ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1jbGFzcy1iYWNrbGlnaHQgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtY2xhc3MtYmFja2xpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjM3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtY2xhc3MtYmFja2xpZ2h0CkBAIC0wLDAgKzEsMzYgQEAKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9ibF9wb3dlcgorRGF0ZToJCUFwcmlsIDIwMDUKK0tlcm5lbFZlcnNpb246CTIuNi4xMgorQ29udGFjdDoJUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PgorRGVzY3JpcHRpb246CisJCUNvbnRyb2wgQkFDS0xJR0hUIHBvd2VyLCB2YWx1ZXMgYXJlIEZCX0JMQU5LXyogZnJvbSBmYi5oCisJCSAtIEZCX0JMQU5LX1VOQkxBTksgKDApICAgOiBwb3dlciBvbi4KKwkJIC0gRkJfQkxBTktfUE9XRVJET1dOICg0KSA6IHBvd2VyIG9mZgorVXNlcnM6CQlIQUwKKworV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2JyaWdodG5lc3MKK0RhdGU6CQlBcHJpbCAyMDA1CitLZXJuZWxWZXJzaW9uOgkyLjYuMTIKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDb250cm9sIHRoZSBicmlnaHRuZXNzIGZvciB0aGlzIDxiYWNrbGlnaHQ+LiBWYWx1ZXMKKwkJYXJlIGJldHdlZW4gMCBhbmQgbWF4X2JyaWdodG5lc3MuIFRoaXMgZmlsZSB3aWxsIGFsc28KKwkJc2hvdyB0aGUgYnJpZ2h0bmVzcyBsZXZlbCBzdG9yZWQgaW4gdGhlIGRyaXZlciwgd2hpY2gKKwkJbWF5IG5vdCBiZSB0aGUgYWN0dWFsIGJyaWdodG5lc3MgKHNlZSBhY3R1YWxfYnJpZ2h0bmVzcykuCitVc2VyczoJCUhBTAorCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vYWN0dWFsX2JyaWdodG5lc3MKK0RhdGU6CQlNYXJjaCAyMDA2CitLZXJuZWxWZXJzaW9uOgkyLjYuMTcKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlTaG93IHRoZSBhY3R1YWwgYnJpZ2h0bmVzcyBieSBxdWVyeWluZyB0aGUgaGFyZHdhcmUuCitVc2VyczoJCUhBTAorCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbWF4X2JyaWdodG5lc3MKK0RhdGU6CQlBcHJpbCAyMDA1CitLZXJuZWxWZXJzaW9uOgkyLjYuMTIKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlNYXhpbXVtIGJyaWdodG5lc3MgZm9yIDxiYWNrbGlnaHQ+LgorVXNlcnM6CQlIQUwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGNkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sY2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MDZiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGNkCkBAIC0wLDAgKzEsMjMgQEAKK1doYXQ6CQkvc3lzL2NsYXNzL2xjZC88bGNkPi9sY2RfcG93ZXIKK0RhdGU6CQlBcHJpbCAyMDA1CitLZXJuZWxWZXJzaW9uOgkyLjYuMTIKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDb250cm9sIExDRCBwb3dlciwgdmFsdWVzIGFyZSBGQl9CTEFOS18qIGZyb20gZmIuaAorCQkgLSBGQl9CTEFOS19VTkJMQU5LICgwKSAgIDogcG93ZXIgb24uCisJCSAtIEZCX0JMQU5LX1BPV0VSRE9XTiAoNCkgOiBwb3dlciBvZmYKKworV2hhdDoJCS9zeXMvY2xhc3MvbGNkLzxsY2Q+L2NvbnRyYXN0CitEYXRlOgkJQXByaWwgMjAwNQorS2VybmVsVmVyc2lvbjoJMi42LjEyCitDb250YWN0OglSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ3VycmVudCBjb250cmFzdCBvZiB0aGlzIExDRCBkZXZpY2UuIFZhbHVlIGlzIGJldHdlZW4gMCBhbmQKKwkJL3N5cy9jbGFzcy9sY2QvPGxjZD4vbWF4X2NvbnRyYXN0LgorCitXaGF0OgkJL3N5cy9jbGFzcy9sY2QvPGxjZD4vbWF4X2NvbnRyYXN0CitEYXRlOgkJQXByaWwgMjAwNQorS2VybmVsVmVyc2lvbjoJMi42LjEyCitDb250YWN0OglSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJTWF4aW11bSBjb250cmFzdCBmb3IgdGhpcyBMQ0QgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ1NDFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKQEAgLTAsMCArMSwyOCBAQAorV2hhdDoJCS9zeXMvY2xhc3MvbGVkcy88bGVkPi9icmlnaHRuZXNzCitEYXRlOgkJTWFyY2ggMjAwNgorS2VybmVsVmVyc2lvbjoJMi42LjE3CitDb250YWN0OglSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJU2V0IHRoZSBicmlnaHRuZXNzIG9mIHRoZSBMRUQuIE1vc3QgTEVEcyBkb24ndAorCQloYXZlIGhhcmR3YXJlIGJyaWdodG5lc3Mgc3VwcG9ydCBzbyB3aWxsIGp1c3QgYmUgdHVybmVkIG9uIGZvcgorCQlub24temVybyBicmlnaHRuZXNzIHNldHRpbmdzLiBUaGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZAorCQkvc3lzL2NsYXNzL2xlZHMvPGxlZD4vbWF4X2JyaWdodG5lc3MuCisKK1doYXQ6CQkvc3lzL2NsYXNzL2xlZHMvPGxlZD4vbWF4X2JyaWdodG5lc3MKK0RhdGU6CQlNYXJjaCAyMDA2CitLZXJuZWxWZXJzaW9uOgkyLjYuMTcKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlNYXhpbXVtIGJyaWdodG5lc3MgbGV2ZWwgZm9yIHRoaXMgbGVkLCBkZWZhdWx0IGlzIDI1NSAoTEVEX0ZVTEwpLgorCitXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLzxsZWQ+L3RyaWdnZXIKK0RhdGU6CQlNYXJjaCAyMDA2CitLZXJuZWxWZXJzaW9uOgkyLjYuMTcKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlTZXQgdGhlIHRyaWdnZXIgZm9yIHRoaXMgTEVELiBBIHRyaWdnZXIgaXMgYSBrZXJuZWwgYmFzZWQgc291cmNlCisJCW9mIGxlZCBldmVudHMuCisJCVlvdSBjYW4gY2hhbmdlIHRyaWdnZXJzIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gdGhlIHdheSBhbiBJTworCQlzY2hlZHVsZXIgaXMgY2hvc2VuLiBUcmlnZ2VyIHNwZWNpZmljIHBhcmFtZXRlcnMgY2FuIGFwcGVhciBpbgorCQkvc3lzL2NsYXNzL2xlZHMvPGxlZD4gb25jZSBhIGdpdmVuIHRyaWdnZXIgaXMgc2VsZWN0ZWQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZ3BpbyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZ3BpbwppbmRleCA4YWFiODA5Li44MGY0Yzk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWdwaW8KKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1ncGlvCkBAIC0xOSw2ICsxOSw3IEBACiAJL2dwaW9OIC4uLiBmb3IgZWFjaCBleHBvcnRlZCBHUElPICNOCiAJICAgIC92YWx1ZSAuLi4gYWx3YXlzIHJlYWRhYmxlLCB3cml0ZXMgZmFpbCBmb3IgaW5wdXQgR1BJT3MKIAkgICAgL2RpcmVjdGlvbiAuLi4gci93IGFzOiBpbiwgb3V0IChkZWZhdWx0IGxvdyk7IHdyaXRlOiBoaWdoLCBsb3cKKwkgICAgL2VkZ2UgLi4uIHIvdyBhczogbm9uZSwgZmFsbGluZywgcmlzaW5nLCBib3RoCiAJL2dwaW9jaGlwTiAuLi4gZm9yIGVhY2ggZ3Bpb2NoaXA7ICNOIGlzIGl0cyBmaXJzdCBHUElPCiAJICAgIC9iYXNlIC4uLiAoci9vKSBzYW1lIGFzIE4KIAkgICAgL2xhYmVsIC4uLiAoci9vKSBkZXNjcmlwdGl2ZSwgbm90IG5lY2Vzc2FyaWx5IHVuaXF1ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hc3VzLWxhcHRvcCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjYjY2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AKQEAgLTAsMCArMSw1MiBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9kaXNwbGF5CitEYXRlOgkJSmFudWFyeSAyMDA3CitLZXJuZWxWZXJzaW9uOgkyLjYuMjAKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgYWxsb3dzIGRpc3BsYXkgc3dpdGNoaW5nLiBUaGUgdmFsdWUKKwkJaXMgY29tcG9zZWQgYnkgNCBiaXRzIGFuZCBkZWZpbmVkIGFzIGZvbGxvdzoKKwkJNDMyMQorCQl8fHxgLSBMQ0QKKwkJfHxgLS0gQ1JUCisJCXxgLS0tIFRWCisJCWAtLS0tIERWSQorCQlFeDogLSAwICgwMDAwYikgbWVhbnMgbm8gZGlzcGxheQorCQkgICAgLSAzICgwMDExYikgQ1JUK0xDRC4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9ncHMKK0RhdGU6CQlKYW51YXJ5IDIwMDcKK0tlcm5lbFZlcnNpb246CTIuNi4yMAorQ29udGFjdDoJIkNvcmVudGluIENoYXJ5IiA8Y29yZW50aW5jakBpa3NhaWYubmV0PgorRGVzY3JpcHRpb246CisJCUNvbnRyb2wgdGhlIGdwcyBkZXZpY2UuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgorVXNlcnM6CQlMYXBzdXMKKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9sZWRkCitEYXRlOgkJSmFudWFyeSAyMDA3CitLZXJuZWxWZXJzaW9uOgkyLjYuMjAKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlTb21lIG1vZGVscyBsaWtlIHRoZSBXMU4gaGF2ZSBhIExFRCBkaXNwbGF5IHRoYXQgY2FuIGJlCisJCXVzZWQgdG8gZGlzcGxheSBzZXZlcmFsIGluZm9ybWF0aW9ucy4KKwkJVG8gY29udHJvbCB0aGUgTEVEIGRpc3BsYXksIHVzZSB0aGUgZm9sbG93aW5nIDoKKwkJICAgIGVjaG8gMHgwVDAwMERERCA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC8KKwkJd2hlcmUgVCBjb250cm9sIHRoZSAzIGxldHRlcnMgZGlzcGxheSwgYW5kIERERCB0aGUgMyBkaWdpdHMgZGlzcGxheS4KKwkJVGhlIERERCB0YWJsZSBjYW4gYmUgZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FzdXMtbGFwdG9wLnR4dAorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wL2JsdWV0b290aAorRGF0ZToJCUphbnVhcnkgMjAwNworS2VybmVsVmVyc2lvbjoJMi42LjIwCitDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgYmx1ZXRvb3RoIGRldmljZS4gMSBtZWFucyBvbiwgMCBtZWFucyBvZmYuCisJCVRoaXMgbWF5IGNvbnRyb2wgdGhlIGxlZCwgdGhlIGRldmljZSBvciBib3RoLgorVXNlcnM6CQlMYXBzdXMKKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC93bGFuCitEYXRlOgkJSmFudWFyeSAyMDA3CitLZXJuZWxWZXJzaW9uOgkyLjYuMjAKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDb250cm9sIHRoZSBibHVldG9vdGggZGV2aWNlLiAxIG1lYW5zIG9uLCAwIG1lYW5zIG9mZi4KKwkJVGhpcyBtYXkgY29udHJvbCB0aGUgbGVkLCB0aGUgZGV2aWNlIG9yIGJvdGguCitVc2VyczoJCUxhcHN1cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1lZWVwYy1sYXB0b3AgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQ1ZGZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1lZWVwYy1sYXB0b3AKQEAgLTAsMCArMSw1MCBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy1sYXB0b3AvZGlzcAorRGF0ZToJCU1heSAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgYWxsb3dzIGRpc3BsYXkgc3dpdGNoaW5nLgorCQktIDEgPSBMQ0QKKwkJLSAyID0gQ1JUCisJCS0gMyA9IExDRCtDUlQKKwkJSWYgeW91IHJ1biBYMTEsIHlvdSBzaG91bGQgdXNlIHhyYW5kciBpbnN0ZWFkLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLWxhcHRvcC9jYW1lcmEKK0RhdGU6CQlNYXkgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI2CitDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgY2FtZXJhLiAxIG1lYW5zIG9uLCAwIG1lYW5zIG9mZi4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy1sYXB0b3AvY2FyZHIKK0RhdGU6CQlNYXkgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI2CitDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgY2FyZCByZWFkZXIuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLWxhcHRvcC9jcHVmdgorRGF0ZToJCUp1biAyMDA5CitLZXJuZWxWZXJzaW9uOgkyLjYuMzEKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDaGFuZ2UgQ1BVIGNsb2NrIGNvbmZpZ3VyYXRpb24uCisJCU9uIHRoZSBFZWUgUEMgMTAwMEggdGhlcmUgYXJlIHRocmVlIGF2YWlsYWJsZSBjbG9jayBjb25maWd1cmF0aW9uOgorCQkgICAgKiAwIC0+IFN1cGVyIFBlcmZvcm1hbmNlIE1vZGUKKwkJICAgICogMSAtPiBIaWdoIFBlcmZvcm1hbmNlIE1vZGUKKwkJICAgICogMiAtPiBQb3dlciBTYXZpbmcgTW9kZQorCQlPbiBFZWUgUEMgNzAxIHRoZXJlIGlzIG9ubHkgMiBhdmFpbGFibGUgY2xvY2sgY29uZmlndXJhdGlvbnMuCisJCUF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGFyZSBsaXN0ZWQgaW4gYXZhaWxhYmxlX2NwdWZ2IGZpbGUuCisJCVJlYWRpbmcgdGhpcyBmaWxlIHdpbGwgc2hvdyB0aGUgcmF3IGhleGFkZWNpbWFsIHZhbHVlIHdoaWNoCisJCWlzIGRlZmluZWQgYXMgZm9sbG93OgorCQl8IDggYml0IHwgOCBiaXQgfAorCQkgICAgfCAgICAgICBgLS0tLSBDdXJyZW50IG1vZGUKKwkJICAgIGAtLS0tLS0tLS0tLS0gQXZhaWxhYmxlcyBtb2RlcworCQlGb3IgZXhhbXBsZSwgMHgzMDEgbWVhbnM6IG1vZGUgMSBzZWxlY3RlZCwgMyBhdmFpbGFibGUgbW9kZXMuCisKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2F2YWlsYWJsZV9jcHVmdgorRGF0ZToJCUp1biAyMDA5CitLZXJuZWxWZXJzaW9uOgkyLjYuMzEKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlMaXN0IGF2YWlsYWJsZSBjcHVmdiBtb2Rlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCA5NjMyNDQ0Li5hYjgzMDBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCiAJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKIAkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbCBcCi0JICAgIHRyYWNlcG9pbnQueG1sCisJICAgIHRyYWNlcG9pbnQueG1sIG1lZGlhLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CkBAIC0zMiw3ICszMiw3IEBACiAKICMjIwogIyBUaGUgdGFyZ2V0cyB0aGF0IG1heSBiZSB1c2VkLgotUEhPTlkgKz0geG1sZG9jcyBzZ21sZG9jcyBwc2RvY3MgcGRmZG9jcyBodG1sZG9jcyBtYW5kb2NzIGluc3RhbGxtYW5kb2NzIGNsZWFuZG9jcworUEhPTlkgKz0geG1sZG9jcyBzZ21sZG9jcyBwc2RvY3MgcGRmZG9jcyBodG1sZG9jcyBtYW5kb2NzIGluc3RhbGxtYW5kb2NzIGNsZWFuZG9jcyBtZWRpYQogCiBCT09LUyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoRE9DQk9PS1MpKQogeG1sZG9jczogJChCT09LUykKQEAgLTQ1LDEyICs0NSwxNiBAQAogcGRmZG9jczogJChQREYpCiAKIEhUTUwgOj0gJChzb3J0ICQocGF0c3Vic3QgJS54bWwsICUuaHRtbCwgJChCT09LUykpKQotaHRtbGRvY3M6ICQoSFRNTCkKK2h0bWxkb2NzOiBtZWRpYSAkKEhUTUwpCiAJJChjYWxsIGJ1aWxkX21haW5faW5kZXgpCiAKIE1BTiA6PSAkKHBhdHN1YnN0ICUueG1sLCAlLjksICQoQk9PS1MpKQogbWFuZG9jczogJChNQU4pCiAKK21lZGlhOgorCW1rZGlyIC1wICQoc3JjdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLworCWNwICQoc3JjdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi8qLnBuZyAkKHNyY3RyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvKi5naWYgJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvCisKIGluc3RhbGxtYW5kb2NzOiBtYW5kb2NzCiAJbWtkaXIgLXAgL3Vzci9sb2NhbC9tYW4vbWFuOS8KIAlpbnN0YWxsIERvY3VtZW50YXRpb24vRG9jQm9vay9tYW4vKi45Lmd6IC91c3IvbG9jYWwvbWFuL21hbjkvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiLy5naXRpZ25vcmUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlYzMyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACishKi54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvYXVkaW8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9hdWRpby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViOTZiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvYXVkaW8ueG1sCkBAIC0wLDAgKzEsMTQ3MyBAQAorPHRpdGxlPkRWQiBBdWRpbyBEZXZpY2U8L3RpdGxlPgorPHBhcmE+VGhlIERWQiBhdWRpbyBkZXZpY2UgY29udHJvbHMgdGhlIE1QRUcyIGF1ZGlvIGRlY29kZXIgb2YgdGhlIERWQiBoYXJkd2FyZS4gSXQKK2NhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIDxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlcjAvYXVkaW8wPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZAoraW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi92aWRlby5oPC9lbXBoYXNpcz4gaW4geW91cgorYXBwbGljYXRpb24uCis8L3BhcmE+Cis8cGFyYT5QbGVhc2Ugbm90ZSB0aGF0IHNvbWUgRFZCIGNhcmRzIGRvbiYjODIxNzt0IGhhdmUgdGhlaXIgb3duIE1QRUcgZGVjb2Rlciwgd2hpY2ggcmVzdWx0cyBpbgordGhlIG9taXNzaW9uIG9mIHRoZSBhdWRpbyBhbmQgdmlkZW8gZGV2aWNlLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0iYXVkaW9fZGF0YV90eXBlcyI+Cis8dGl0bGU+QXVkaW8gRGF0YSBUeXBlczwvdGl0bGU+Cis8cGFyYT5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBzdHJ1Y3R1cmVzLCBkYXRhIHR5cGVzIGFuZCBkZWZpbmVzIHVzZWQgd2hlbiB0YWxraW5nIHRvIHRoZQorYXVkaW8gZGV2aWNlLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0iYXVkaW9fc3RyZWFtX3NvdXJjZV90Ij4KKzx0aXRsZT5hdWRpb19zdHJlYW1fc291cmNlX3Q8L3RpdGxlPgorPHBhcmE+VGhlIGF1ZGlvIHN0cmVhbSBzb3VyY2UgaXMgc2V0IHRocm91Z2ggdGhlIEFVRElPX1NFTEVDVF9TT1VSQ0UgY2FsbCBhbmQgY2FuIHRha2UKK3RoZSBmb2xsb3dpbmcgdmFsdWVzLCBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBhcmUgcmVwbGF5aW5nIGZyb20gYW4gaW50ZXJuYWwgKGRlbXV4KSBvcgorZXh0ZXJuYWwgKHVzZXIgd3JpdGUpIHNvdXJjZS4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0geworCSBBVURJT19TT1VSQ0VfREVNVVgsCisJIEFVRElPX1NPVVJDRV9NRU1PUlkKKyB9IGF1ZGlvX3N0cmVhbV9zb3VyY2VfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5BVURJT19TT1VSQ0VfREVNVVggc2VsZWN0cyB0aGUgZGVtdWx0aXBsZXhlciAoZmVkIGVpdGhlciBieSB0aGUgZnJvbnRlbmQgb3IgdGhlCitEVlIgZGV2aWNlKSBhcyB0aGUgc291cmNlIG9mIHRoZSB2aWRlbyBzdHJlYW0uIElmIEFVRElPX1NPVVJDRV9NRU1PUlkKK2lzIHNlbGVjdGVkIHRoZSBzdHJlYW0gY29tZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gdGhyb3VnaCB0aGUgPGVtcGhhc2lzIHJvbGU9InR0Ij53cml0ZSgpPC9lbXBoYXNpcz4gc3lzdGVtCitjYWxsLgorPC9wYXJhPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fcGxheV9zdGF0ZV90Ij4KKzx0aXRsZT5hdWRpb19wbGF5X3N0YXRlX3Q8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBBVURJT19HRVRfU1RBVFVTIGNhbGwgcmVwcmVzZW50aW5nIHRoZQorc3RhdGUgb2YgYXVkaW8gcGxheWJhY2suCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgQVVESU9fU1RPUFBFRCwKKwkgQVVESU9fUExBWUlORywKKwkgQVVESU9fUEFVU0VECisgfSBhdWRpb19wbGF5X3N0YXRlX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fY2hhbm5lbF9zZWxlY3RfdCI+Cis8dGl0bGU+YXVkaW9fY2hhbm5lbF9zZWxlY3RfdDwvdGl0bGU+Cis8cGFyYT5UaGUgYXVkaW8gY2hhbm5lbCBzZWxlY3RlZCB2aWEgQVVESU9fQ0hBTk5FTF9TRUxFQ1QgaXMgZGV0ZXJtaW5lZCBieSB0aGUKK2ZvbGxvd2luZyB2YWx1ZXMuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgQVVESU9fU1RFUkVPLAorCSBBVURJT19NT05PX0xFRlQsCisJIEFVRElPX01PTk9fUklHSFQsCisgfSBhdWRpb19jaGFubmVsX3NlbGVjdF90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InN0cnVjdF9hdWRpb19zdGF0dXMiPgorPHRpdGxlPnN0cnVjdCBhdWRpb19zdGF0dXM8L3RpdGxlPgorPHBhcmE+VGhlIEFVRElPX0dFVF9TVEFUVVMgY2FsbCByZXR1cm5zIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluZm9ybWluZyBhYm91dCB2YXJpb3VzCitzdGF0ZXMgb2YgdGhlIHBsYXliYWNrIG9wZXJhdGlvbi4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBhdWRpb19zdGF0dXMgeworCSBib29sZWFuIEFWX3N5bmNfc3RhdGU7CisJIGJvb2xlYW4gbXV0ZV9zdGF0ZTsKKwkgYXVkaW9fcGxheV9zdGF0ZV90IHBsYXlfc3RhdGU7CisJIGF1ZGlvX3N0cmVhbV9zb3VyY2VfdCBzdHJlYW1fc291cmNlOworCSBhdWRpb19jaGFubmVsX3NlbGVjdF90IGNoYW5uZWxfc2VsZWN0OworCSBib29sZWFuIGJ5cGFzc19tb2RlOworIH0gYXVkaW9fc3RhdHVzX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0ic3RydWN0X2F1ZGlvX21peGVyIj4KKzx0aXRsZT5zdHJ1Y3QgYXVkaW9fbWl4ZXI8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgQVVESU9fU0VUX01JWEVSIGNhbGwgdG8gc2V0IHRoZSBhdWRpbwordm9sdW1lLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IGF1ZGlvX21peGVyIHsKKwkgdW5zaWduZWQgaW50IHZvbHVtZV9sZWZ0OworCSB1bnNpZ25lZCBpbnQgdm9sdW1lX3JpZ2h0OworIH0gYXVkaW9fbWl4ZXJfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJhdWRpb19lbmNvZGluZ3MiPgorPHRpdGxlPmF1ZGlvIGVuY29kaW5nczwvdGl0bGU+Cis8cGFyYT5BIGNhbGwgdG8gQVVESU9fR0VUX0NBUEFCSUxJVElFUyByZXR1cm5zIGFuIHVuc2lnbmVkIGludGVnZXIgd2l0aCB0aGUgZm9sbG93aW5nCitiaXRzIHNldCBhY2NvcmRpbmcgdG8gdGhlIGhhcmR3YXJlcyBjYXBhYmlsaXRpZXMuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgI2RlZmluZSBBVURJT19DQVBfRFRTICAgIDEKKyAjZGVmaW5lIEFVRElPX0NBUF9MUENNICAgMgorICNkZWZpbmUgQVVESU9fQ0FQX01QMSAgICA0CisgI2RlZmluZSBBVURJT19DQVBfTVAyICAgIDgKKyAjZGVmaW5lIEFVRElPX0NBUF9NUDMgICAxNgorICNkZWZpbmUgQVVESU9fQ0FQX0FBQyAgIDMyCisgI2RlZmluZSBBVURJT19DQVBfT0dHICAgNjQKKyAjZGVmaW5lIEFVRElPX0NBUF9TRERTIDEyOAorICNkZWZpbmUgQVVESU9fQ0FQX0FDMyAgMjU2Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0ic3RydWN0X2F1ZGlvX2thcmFva2UiPgorPHRpdGxlPnN0cnVjdCBhdWRpb19rYXJhb2tlPC90aXRsZT4KKzxwYXJhPlRoZSBpb2N0bCBBVURJT19TRVRfS0FSQU9LRSB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYKKyBzdHJ1Y3QgYXVkaW9fa2FyYW9rZXsKKwkgaW50IHZvY2FsMTsKKwkgaW50IHZvY2FsMjsKKwkgaW50IG1lbG9keTsKKyB9IGF1ZGlvX2thcmFva2VfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5JZiBWb2NhbDEgb3IgVm9jYWwyIGFyZSBub24temVybywgdGhleSBnZXQgbWl4ZWQgaW50byBsZWZ0IGFuZCByaWdodCB0IGF0IDcwJSBlYWNoLiBJZiBib3RoLAorVm9jYWwxIGFuZCBWb2NhbDIgYXJlIG5vbi16ZXJvLCBWb2NhbDEgZ2V0cyBtaXhlZCBpbnRvIHRoZSBsZWZ0IGNoYW5uZWwgYW5kIFZvY2FsMiBpbnRvIHRoZQorcmlnaHQgY2hhbm5lbCBhdCAxMDAlIGVhY2guIEZmIE1lbG9keSBpcyBub24temVybywgdGhlIG1lbG9keSBjaGFubmVsIGdldHMgbWl4ZWQgaW50byBsZWZ0CithbmQgcmlnaHQuCis8L3BhcmE+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJhdWRpb19hdHRyaWJ1dGVzIj4KKzx0aXRsZT5hdWRpbyBhdHRyaWJ1dGVzPC90aXRsZT4KKzxwYXJhPlRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBjYW4gYmUgc2V0IGJ5IGEgY2FsbCB0byBBVURJT19TRVRfQVRUUklCVVRFUzoKKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHVpbnQxNl90IGF1ZGlvX2F0dHJpYnV0ZXNfdDsKKyAvJiN4MjJDNjsgICBiaXRzOiBkZXNjci4gJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgMTUtMTMgYXVkaW8gY29kaW5nIG1vZGUgKDA9YWMzLCAyPW1wZWcxLCAzPW1wZWcyZXh0LCA0PUxQQ00sIDY9RFRTLCAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAxMiAgICBtdWx0aWNoYW5uZWwgZXh0ZW5zaW9uICYjeDIyQzY7LworIC8mI3gyMkM2OyAgIDExLTEwIGF1ZGlvIHR5cGUgKDA9bm90IHNwZWMsIDE9bGFuZ3VhZ2UgaW5jbHVkZWQpICYjeDIyQzY7LworIC8mI3gyMkM2OyAgICA5LSA4IGF1ZGlvIGFwcGxpY2F0aW9uIG1vZGUgKDA9bm90IHNwZWMsIDE9a2FyYW9rZSwgMj1zdXJyb3VuZCkgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDctIDYgUXVhbnRpemF0aW9uIC8gRFJDIChtcGVnIGF1ZGlvOiAxPURSQyBleGlzdHMpKGxwY206IDA9MTZiaXQsICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAgNS0gNCBTYW1wbGUgZnJlcXVlbmN5IGZzICgwPTQ4a0h6LCAxPTk2a0h6KSAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAgMi0gMCBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMgKG4rMSBjaGFubmVscykgJiN4MjJDNjsvCis8L3Byb2dyYW1saXN0aW5nPgorIDwvc2VjdGlvbj48L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fZnVuY3Rpb25fY2FsbHMiPgorPHRpdGxlPkF1ZGlvIEZ1bmN0aW9uIENhbGxzPC90aXRsZT4KKworCis8c2VjdGlvbiBpZD0iYXVkaW9fZm9wZW4iPgorPHRpdGxlPm9wZW4oKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIG9wZW5zIGEgbmFtZWQgYXVkaW8gZGV2aWNlIChlLmcuIC9kZXYvZHZiL2FkYXB0ZXIwL2F1ZGlvMCkKKyBmb3Igc3Vic2VxdWVudCB1c2UuIFdoZW4gYW4gb3BlbigpIGNhbGwgaGFzIHN1Y2NlZWRlZCwgdGhlIGRldmljZSB3aWxsIGJlIHJlYWR5CisgZm9yIHVzZS4gVGhlIHNpZ25pZmljYW5jZSBvZiBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBpcyBkZXNjcmliZWQgaW4gdGhlCisgZG9jdW1lbnRhdGlvbiBmb3IgZnVuY3Rpb25zIHdoZXJlIHRoZXJlIGlzIGEgZGlmZmVyZW5jZS4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZQorIHNlbWFudGljcyBvZiB0aGUgb3BlbigpIGNhbGwgaXRzZWxmLiBBIGRldmljZSBvcGVuZWQgaW4gYmxvY2tpbmcgbW9kZSBjYW4gbGF0ZXIKKyBiZSBwdXQgaW50byBub24tYmxvY2tpbmcgbW9kZSAoYW5kIHZpY2UgdmVyc2EpIHVzaW5nIHRoZSBGX1NFVEZMIGNvbW1hbmQKKyBvZiB0aGUgZmNudGwgc3lzdGVtIGNhbGwuIFRoaXMgaXMgYSBzdGFuZGFyZCBzeXN0ZW0gY2FsbCwgZG9jdW1lbnRlZCBpbiB0aGUgTGludXgKKyBtYW51YWwgcGFnZSBmb3IgZmNudGwuIE9ubHkgb25lIHVzZXIgY2FuIG9wZW4gdGhlIEF1ZGlvIERldmljZSBpbiBPX1JEV1IKKyBtb2RlLiBBbGwgb3RoZXIgYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZGV2aWNlIGluIHRoaXMgbW9kZSB3aWxsIGZhaWwsIGFuZCBhbiBlcnJvcgorIGNvZGUgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhlIEF1ZGlvIERldmljZSBpcyBvcGVuZWQgaW4gT19SRE9OTFkgbW9kZSwgdGhlCisgb25seSBpb2N0bCBjYWxsIHRoYXQgY2FuIGJlIHVzZWQgaXMgQVVESU9fR0VUX1NUQVRVUy4gQWxsIG90aGVyIGNhbGwgd2lsbAorIHJldHVybiB3aXRoIGFuIGVycm9yIGNvZGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuKGNvbnN0IGNoYXIgJiN4MjJDNjtkZXZpY2VOYW1lLCBpbnQgZmxhZ3MpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNvbnN0IGNoYXIKKyAqZGV2aWNlTmFtZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TmFtZSBvZiBzcGVjaWZpYyBhdWRpbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmbGFnczwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QSBiaXQtd2lzZSBPUiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fUkRPTkxZIHJlYWQtb25seSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JEV1IgcmVhZC93cml0ZSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX05PTkJMT0NLIG9wZW4gaW4gbm9uLWJsb2NraW5nIG1vZGU8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4oYmxvY2tpbmcgbW9kZSBpcyB0aGUgZGVmYXVsdCk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RGV2aWNlIGRyaXZlciBub3QgbG9hZGVkL2F2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBvciByZXNvdXJjZSBidXN5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImF1ZGlvX2ZjbG9zZSI+Cis8dGl0bGU+Y2xvc2UoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGNsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIGF1ZGlvIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGludCBmZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fZndyaXRlIj4KKzx0aXRsZT53cml0ZSgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgY2FuIG9ubHkgYmUgdXNlZCBpZiBBVURJT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkCisgaW4gdGhlIGlvY3RsIGNhbGwgQVVESU9fU0VMRUNUX1NPVVJDRS4gVGhlIGRhdGEgcHJvdmlkZWQgc2hhbGwgYmUgaW4KKyBQRVMgZm9ybWF0LiBJZiBPX05PTkJMT0NLIGlzIG5vdCBzcGVjaWZpZWQgdGhlIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwKKyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLiBUaGUgYW1vdW50IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaXMgaW1wbGllZCBieQorIGNvdW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3Qgd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICYjeDIyQzY7YnVmLCBzaXplX3QgY291bnQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZvaWQgKmJ1ZjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFBFUyBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QgY291bnQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNpemUgb2YgYnVmLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk1vZGUgQVVESU9fU09VUkNFX01FTU9SWSBub3Qgc2VsZWN0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QXR0ZW1wdGVkIHRvIHdyaXRlIG1vcmUgZGF0YSB0aGFuIHRoZSBpbnRlcm5hbCBidWZmZXIgY2FuCisgaG9sZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NUT1A8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGFza3MgdGhlIEF1ZGlvIERldmljZSB0byBzdG9wIHBsYXlpbmcgdGhlIGN1cnJlbnQgc3RyZWFtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX1NUT1ApOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgQVVESU9fU1RPUCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fUExBWTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgQXVkaW8gRGV2aWNlIHRvIHN0YXJ0IHBsYXlpbmcgYW4gYXVkaW8gc3RyZWFtIGZyb20gdGhlCisgc2VsZWN0ZWQgc291cmNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX1BMQVkpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgQVVESU9fUExBWSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fUEFVU0U8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHN1c3BlbmRzIHRoZSBhdWRpbyBzdHJlYW0gYmVpbmcgcGxheWVkLiBEZWNvZGluZyBhbmQgcGxheWluZworIGFyZSBwYXVzZWQuIEl0IGlzIHRoZW4gcG9zc2libGUgdG8gcmVzdGFydCBhZ2FpbiBkZWNvZGluZyBhbmQgcGxheWluZyBwcm9jZXNzIG9mCisgdGhlIGF1ZGlvIHN0cmVhbSB1c2luZyBBVURJT19DT05USU5VRSBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JZiBBVURJT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkIGluIHRoZSBpb2N0bCBjYWxsCisgQVVESU9fU0VMRUNUX1NPVVJDRSwgdGhlIERWQi1zdWJzeXN0ZW0gd2lsbCBub3QgZGVjb2RlIChjb25zdW1lKQorIGFueSBtb3JlIGRhdGEgdW50aWwgdGhlIGlvY3RsIGNhbGwgQVVESU9fQ09OVElOVUUgb3IgQVVESU9fUExBWSBpcworIHBlcmZvcm1lZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19QQVVTRSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19QQVVTRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFTEVDVF9TT1VSQ0U8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGluZm9ybXMgdGhlIGF1ZGlvIGRldmljZSB3aGljaCBzb3VyY2Ugc2hhbGwgYmUgdXNlZAorIGZvciB0aGUgaW5wdXQgZGF0YS4gVGhlIHBvc3NpYmxlIHNvdXJjZXMgYXJlIGRlbXV4IG9yIG1lbW9yeS4gSWYKKyBBVURJT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkLCB0aGUgZGF0YSBpcyBmZWQgdG8gdGhlIEF1ZGlvIERldmljZQorIHRocm91Z2ggdGhlIHdyaXRlIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VMRUNUX1NPVVJDRSwKKyBhdWRpb19zdHJlYW1fc291cmNlX3Qgc291cmNlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFTEVDVF9TT1VSQ0UgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+YXVkaW9fc3RyZWFtX3NvdXJjZV90Cisgc291cmNlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgdGhlIHNvdXJjZSB0aGF0IHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBBdWRpbworIHN0cmVhbS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbGxlZ2FsIGlucHV0IHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfTVVURTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgYXVkaW8gZGV2aWNlIHRvIG11dGUgdGhlIHN0cmVhbSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZworIHBsYXllZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfTVVURSwKKyBib29sZWFuIHN0YXRlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9NVVRFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJvb2xlYW4gc3RhdGU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyBpZiBhdWRpbyBkZXZpY2Ugc2hhbGwgbXV0ZSBvciBub3QuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VFJVRSBBdWRpbyBNdXRlPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RkFMU0UgQXVkaW8gVW4tbXV0ZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9BVl9TWU5DPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gdHVybiBPTiBvciBPRkYgQS9WIHN5bmNocm9uaXphdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfQVZfU1lOQywKKyBib29sZWFuIHN0YXRlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX0FWX1NZTkMgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Ym9vbGVhbiBzdGF0ZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGVsbHMgdGhlIERWQiBzdWJzeXN0ZW0gaWYgQS9WIHN5bmNocm9uaXphdGlvbiBzaGFsbCBiZQorIE9OIG9yIE9GRi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UUlVFIEFWLXN5bmMgT048L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GQUxTRSBBVi1zeW5jIE9GRjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9CWVBBU1NfTU9ERTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgQXVkaW8gRGV2aWNlIHRvIGJ5cGFzcyB0aGUgQXVkaW8gZGVjb2RlciBhbmQgZm9yd2FyZAorIHRoZSBzdHJlYW0gd2l0aG91dCBkZWNvZGluZy4gVGhpcyBtb2RlIHNoYWxsIGJlIHVzZWQgaWYgc3RyZWFtcyB0aGF0IGNhbiYjODIxNzt0IGJlCisgaGFuZGxlZCBieSB0aGUgRFZCIHN5c3RlbSBzaGFsbCBiZSBkZWNvZGVkLiBEb2xieSBEaWdpdGFsVE0gc3RyZWFtcyBhcmUKKyBhdXRvbWF0aWNhbGx5IGZvcndhcmRlZCBieSB0aGUgRFZCIHN1YnN5c3RlbSBpZiB0aGUgaGFyZHdhcmUgY2FuIGhhbmRsZSBpdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEFVRElPX1NFVF9CWVBBU1NfTU9ERSwgYm9vbGVhbiBtb2RlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9CWVBBU1NfTU9ERSBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJvb2xlYW4gbW9kZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZGVjb2Rpbmcgb2YgdGhlIGN1cnJlbnQgQXVkaW8KKyBzdHJlYW0gaW4gdGhlIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VFJVRSBCeXBhc3MgaXMgZGlzYWJsZWQ8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GQUxTRSBCeXBhc3MgaXMgZW5hYmxlZDwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX0NIQU5ORUxfU0VMRUNUPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gc2VsZWN0IHRoZSByZXF1ZXN0ZWQgY2hhbm5lbCBpZiBwb3NzaWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEFVRElPX0NIQU5ORUxfU0VMRUNULCBhdWRpb19jaGFubmVsX3NlbGVjdF90KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX0NIQU5ORUxfU0VMRUNUIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+YXVkaW9fY2hhbm5lbF9zZWxlY3RfdAorIGNoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TZWxlY3QgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGF1ZGlvIChtb25vIGxlZnQvcmlnaHQsCisgc3RlcmVvKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbGxlZ2FsIGlucHV0IHBhcmFtZXRlciBjaC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19HRVRfU1RBVFVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBBdWRpbworIERldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19HRVRfU1RBVFVTLAorIHN0cnVjdCBhdWRpb19zdGF0dXMgJiN4MjJDNjtzdGF0dXMpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgQVVESU9fR0VUX1NUQVRVUyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgYXVkaW9fc3RhdHVzCisgKnN0YXR1czwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBBdWRpbyBEZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RhdHVzIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fR0VUX0NBUEFCSUxJVElFUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgQXVkaW8gRGV2aWNlIHRvIHRlbGwgdXMgYWJvdXQgdGhlIGRlY29kaW5nIGNhcGFiaWxpdGllcworIG9mIHRoZSBhdWRpbyBoYXJkd2FyZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEFVRElPX0dFVF9DQVBBQklMSVRJRVMsIHVuc2lnbmVkIGludCAmI3gyMkM2O2NhcCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19HRVRfQ0FQQUJJTElUSUVTIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dW5zaWduZWQgaW50ICpjYXA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlJldHVybnMgYSBiaXQgYXJyYXkgb2Ygc3VwcG9ydGVkIHNvdW5kIGZvcm1hdHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Y2FwIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fQ0xFQVJfQlVGRkVSPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gY2xlYXIgYWxsIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBidWZmZXJzCisgb2YgdGhlIGF1ZGlvIGRlY29kZXIgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX0NMRUFSX0JVRkZFUik7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19DTEVBUl9CVUZGRVIgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfSUQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBzZWxlY3RzIHdoaWNoIHN1Yi1zdHJlYW0gaXMgdG8gYmUgZGVjb2RlZCBpZiBhIHByb2dyYW0gb3Igc3lzdGVtCisgc3RyZWFtIGlzIHNlbnQgdG8gdGhlIHZpZGVvIGRldmljZS4gSWYgbm8gYXVkaW8gc3RyZWFtIHR5cGUgaXMgc2V0IHRoZSBpZCBoYXMgdG8gYmUKKyBpbiBbMHhDMCwweERGXSBmb3IgTVBFRyBzb3VuZCwgaW4gWzB4ODAsMHg4N10gZm9yIEFDMyBhbmQgaW4gWzB4QTAsMHhBN10KKyBmb3IgTFBDTS4gTW9yZSBzcGVjaWZpY2F0aW9ucyBtYXkgZm9sbG93IGZvciBvdGhlciBzdHJlYW0gdHlwZXMuIElmIHRoZSBzdHJlYW0KKyB0eXBlIGlzIHNldCB0aGUgaWQganVzdCBzcGVjaWZpZXMgdGhlIHN1YnN0cmVhbSBpZCBvZiB0aGUgYXVkaW8gc3RyZWFtIGFuZCBvbmx5CisgdGhlIGZpcnN0IDUgYml0cyBhcmUgcmVjb2duaXplZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfSUQsIGludAorIGlkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9JRCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvIHN1Yi1zdHJlYW0gaWQ8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIHN1Yi1zdHJlYW0gaWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU0VUX01JWEVSPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgbGV0cyB5b3UgYWRqdXN0IHRoZSBtaXhlciBzZXR0aW5ncyBvZiB0aGUgYXVkaW8gZGVjb2Rlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfTUlYRVIsCisgYXVkaW9fbWl4ZXJfdCAmI3gyMkM2O21peCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19TRVRfSUQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+YXVkaW9fbWl4ZXJfdCAqbWl4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5taXhlciBzZXR0aW5ncy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5taXggcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfU1RSRUFNVFlQRTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIHRlbGxzIHRoZSBkcml2ZXIgd2hpY2gga2luZCBvZiBhdWRpbyBzdHJlYW0gdG8gZXhwZWN0LiBUaGlzIGlzIHVzZWZ1bAorIGlmIHRoZSBzdHJlYW0gb2ZmZXJzIHNldmVyYWwgYXVkaW8gc3ViLXN0cmVhbXMgbGlrZSBMUENNIGFuZCBBQzMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfU1RSRUFNVFlQRSwKKyBpbnQgdHlwZSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19TRVRfU1RSRUFNVFlQRSBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCB0eXBlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJlYW0gdHlwZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dHlwZSBpcyBub3QgYSB2YWxpZCBvciBzdXBwb3J0ZWQgc3RyZWFtIHR5cGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU0VUX0VYVF9JRDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZXh0ZW5zaW9uIGlkIGZvciBNUEVHIHN0cmVhbXMgaW4gRFZECisgcGxheWJhY2suIE9ubHkgdGhlIGZpcnN0IDMgYml0cyBhcmUgcmVjb2duaXplZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX1NFVF9FWFRfSUQsIGludAorIGlkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9FWFRfSUQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5hdWRpbyBzdWJfc3RyZWFtX2lkPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pZCBpcyBub3QgYSB2YWxpZCBpZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfQVRUUklCVVRFUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGlzIGludGVuZGVkIGZvciBEVkQgcGxheWJhY2sgYW5kIGFsbG93cyB5b3UgdG8gc2V0IGNlcnRhaW4KKyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXVkaW8gc3RyZWFtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VUX0FUVFJJQlVURVMsCisgYXVkaW9fYXR0cmlidXRlc190IGF0dHIgKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9BVFRSSUJVVEVTIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvX2F0dHJpYnV0ZXNfdAorIGF0dHI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvIGF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIHNlY3Rpb24gPz88L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF0dHIgaXMgbm90IGEgdmFsaWQgb3Igc3VwcG9ydGVkIGF0dHJpYnV0ZSBzZXR0aW5nLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9LQVJBT0tFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgYWxsb3dzIG9uZSB0byBzZXQgdGhlIG1peGVyIHNldHRpbmdzIGZvciBhIGthcmFva2UgRFZELjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VUX1NUUkVBTVRZUEUsCisgYXVkaW9fa2FyYW9rZV90ICYjeDIyQzY7a2FyYW9rZSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19TRVRfU1RSRUFNVFlQRSBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvX2thcmFva2VfdAorICprYXJhb2tlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5rYXJhb2tlIHNldHRpbmdzIGFjY29yZGluZyB0byBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+a2FyYW9rZSBpcyBub3QgYSB2YWxpZCBvciBzdXBwb3J0ZWQga2FyYW9rZSBzZXR0aW5nLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9jYS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2NhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWYxZDJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9jYS54bWwKQEAgLTAsMCArMSwyMjEgQEAKKzx0aXRsZT5EVkIgQ0EgRGV2aWNlPC90aXRsZT4KKzxwYXJhPlRoZSBEVkIgQ0EgZGV2aWNlIGNvbnRyb2xzIHRoZSBjb25kaXRpb25hbCBhY2Nlc3MgaGFyZHdhcmUuIEl0IGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoCis8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvZHZiL2FkYXB0ZXIwL2NhMDwvZW1waGFzaXM+LiBEYXRhIHR5cGVzIGFuZCBhbmQgaW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5CitpbmNsdWRpbmcgPGVtcGhhc2lzIHJvbGU9InR0Ij5saW51eC9kdmIvY2EuaDwvZW1waGFzaXM+IGluIHlvdXIgYXBwbGljYXRpb24uCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSJjYV9kYXRhX3R5cGVzIj4KKzx0aXRsZT5DQSBEYXRhIFR5cGVzPC90aXRsZT4KKworCis8c2VjdGlvbiBpZD0iY2Ffc2xvdF9pbmZvX3QiPgorPHRpdGxlPmNhX3Nsb3RfaW5mb190PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgLyYjeDIyQzY7IHNsb3QgaW50ZXJmYWNlIHR5cGVzIGFuZCBpbmZvICYjeDIyQzY7LworCisgdHlwZWRlZiBzdHJ1Y3QgY2Ffc2xvdF9pbmZvX3MgeworCSBpbnQgbnVtOyAgICAgICAgICAgICAgIC8mI3gyMkM2OyBzbG90IG51bWJlciAmI3gyMkM2Oy8KKworCSBpbnQgdHlwZTsgICAgICAgICAgIC8mI3gyMkM2OyBDQSBpbnRlcmZhY2UgdGhpcyBzbG90IHN1cHBvcnRzICYjeDIyQzY7LworICNkZWZpbmUgQ0FfQ0kgICAgICAgICAgICAxICAvJiN4MjJDNjsgQ0kgaGlnaCBsZXZlbCBpbnRlcmZhY2UgJiN4MjJDNjsvCisgI2RlZmluZSBDQV9DSV9MSU5LICAgICAgIDIgIC8mI3gyMkM2OyBDSSBsaW5rIGxheWVyIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KKyAjZGVmaW5lIENBX0NJX1BIWVMgICAgICAgNCAgLyYjeDIyQzY7IENJIHBoeXNpY2FsIGxheWVyIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KKyAjZGVmaW5lIENBX1NDICAgICAgICAgIDEyOCAgLyYjeDIyQzY7IHNpbXBsZSBzbWFydCBjYXJkIGludGVyZmFjZSAmI3gyMkM2Oy8KKworCSB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgI2RlZmluZSBDQV9DSV9NT0RVTEVfUFJFU0VOVCAxIC8mI3gyMkM2OyBtb2R1bGUgKG9yIGNhcmQpIGluc2VydGVkICYjeDIyQzY7LworICNkZWZpbmUgQ0FfQ0lfTU9EVUxFX1JFQURZICAgMgorIH0gY2Ffc2xvdF9pbmZvX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iY2FfZGVzY3JfaW5mb190Ij4KKzx0aXRsZT5jYV9kZXNjcl9pbmZvX3Q8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBjYV9kZXNjcl9pbmZvX3MgeworCSB1bnNpZ25lZCBpbnQgbnVtOyAgLyYjeDIyQzY7IG51bWJlciBvZiBhdmFpbGFibGUgZGVzY3JhbWJsZXJzIChrZXlzKSAmI3gyMkM2Oy8KKwkgdW5zaWduZWQgaW50IHR5cGU7IC8mI3gyMkM2OyB0eXBlIG9mIHN1cHBvcnRlZCBzY3JhbWJsaW5nIHN5c3RlbSAmI3gyMkM2Oy8KKyAjZGVmaW5lIENBX0VDRCAgICAgICAgICAgMQorICNkZWZpbmUgQ0FfTkRTICAgICAgICAgICAyCisgI2RlZmluZSBDQV9EU1MgICAgICAgICAgIDQKKyB9IGNhX2Rlc2NyX2luZm9fdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJjYV9jYXBfdCI+Cis8dGl0bGU+Y2FfY2FwX3Q8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBjYV9jYXBfcyB7CisJIHVuc2lnbmVkIGludCBzbG90X251bTsgIC8mI3gyMkM2OyB0b3RhbCBudW1iZXIgb2YgQ0EgY2FyZCBhbmQgbW9kdWxlIHNsb3RzICYjeDIyQzY7LworCSB1bnNpZ25lZCBpbnQgc2xvdF90eXBlOyAvJiN4MjJDNjsgT1Igb2YgYWxsIHN1cHBvcnRlZCB0eXBlcyAmI3gyMkM2Oy8KKwkgdW5zaWduZWQgaW50IGRlc2NyX251bTsgLyYjeDIyQzY7IHRvdGFsIG51bWJlciBvZiBkZXNjcmFtYmxlciBzbG90cyAoa2V5cykgJiN4MjJDNjsvCisJIHVuc2lnbmVkIGludCBkZXNjcl90eXBlOy8mI3gyMkM2OyBPUiBvZiBhbGwgc3VwcG9ydGVkIHR5cGVzICYjeDIyQzY7LworIH0gY2FfY2FwX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iY2FfbXNnX3QiPgorPHRpdGxlPmNhX21zZ190PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgLyYjeDIyQzY7IGEgbWVzc2FnZSB0by9mcm9tIGEgQ0ktQ0FNICYjeDIyQzY7LworIHR5cGVkZWYgc3RydWN0IGNhX21zZ19zIHsKKwkgdW5zaWduZWQgaW50IGluZGV4OworCSB1bnNpZ25lZCBpbnQgdHlwZTsKKwkgdW5zaWduZWQgaW50IGxlbmd0aDsKKwkgdW5zaWduZWQgY2hhciBtc2dbMjU2XTsKKyB9IGNhX21zZ190OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImNhX2Rlc2NyX3QiPgorPHRpdGxlPmNhX2Rlc2NyX3Q8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBjYV9kZXNjcl9zIHsKKwkgdW5zaWduZWQgaW50IGluZGV4OworCSB1bnNpZ25lZCBpbnQgcGFyaXR5OworCSB1bnNpZ25lZCBjaGFyIGN3WzhdOworIH0gY2FfZGVzY3JfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJjYV9mdW5jdGlvbl9jYWxscyI+Cis8dGl0bGU+Q0EgRnVuY3Rpb24gQ2FsbHM8L3RpdGxlPgorCisKKzxzZWN0aW9uIGlkPSJjYV9mb3BlbiI+Cis8dGl0bGU+b3BlbigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgb3BlbnMgYSBuYW1lZCBjYSBkZXZpY2UgKGUuZy4gL2Rldi9vc3QvY2EpIGZvciBzdWJzZXF1ZW50IHVzZS48L3BhcmE+Cis8cGFyYT5XaGVuIGFuIG9wZW4oKSBjYWxsIGhhcyBzdWNjZWVkZWQsIHRoZSBkZXZpY2Ugd2lsbCBiZSByZWFkeSBmb3IgdXNlLgorIFRoZSBzaWduaWZpY2FuY2Ugb2YgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIG1vZGUgaXMgZGVzY3JpYmVkIGluIHRoZQorIGRvY3VtZW50YXRpb24gZm9yIGZ1bmN0aW9ucyB3aGVyZSB0aGVyZSBpcyBhIGRpZmZlcmVuY2UuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUKKyBzZW1hbnRpY3Mgb2YgdGhlIG9wZW4oKSBjYWxsIGl0c2VsZi4gQSBkZXZpY2Ugb3BlbmVkIGluIGJsb2NraW5nIG1vZGUgY2FuIGxhdGVyCisgYmUgcHV0IGludG8gbm9uLWJsb2NraW5nIG1vZGUgKGFuZCB2aWNlIHZlcnNhKSB1c2luZyB0aGUgRl9TRVRGTCBjb21tYW5kCisgb2YgdGhlIGZjbnRsIHN5c3RlbSBjYWxsLiBUaGlzIGlzIGEgc3RhbmRhcmQgc3lzdGVtIGNhbGwsIGRvY3VtZW50ZWQgaW4gdGhlIExpbnV4CisgbWFudWFsIHBhZ2UgZm9yIGZjbnRsLiBPbmx5IG9uZSB1c2VyIGNhbiBvcGVuIHRoZSBDQSBEZXZpY2UgaW4gT19SRFdSCisgbW9kZS4gQWxsIG90aGVyIGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRldmljZSBpbiB0aGlzIG1vZGUgd2lsbCBmYWlsLCBhbmQgYW4gZXJyb3IKKyBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuKGNvbnN0IGNoYXIgJiN4MjJDNjtkZXZpY2VOYW1lLCBpbnQgZmxhZ3MpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNvbnN0IGNoYXIKKyAqZGV2aWNlTmFtZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TmFtZSBvZiBzcGVjaWZpYyB2aWRlbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmbGFnczwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QSBiaXQtd2lzZSBPUiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fUkRPTkxZIHJlYWQtb25seSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JEV1IgcmVhZC93cml0ZSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX05PTkJMT0NLIG9wZW4gaW4gbm9uLWJsb2NraW5nIG1vZGU8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4oYmxvY2tpbmcgbW9kZSBpcyB0aGUgZGVmYXVsdCk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RGV2aWNlIGRyaXZlciBub3QgbG9hZGVkL2F2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBvciByZXNvdXJjZSBidXN5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImNhX2ZjbG9zZSI+Cis8dGl0bGU+Y2xvc2UoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGNsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIGF1ZGlvIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGludCBmZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZGVtdXgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kZW11eC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4YzRlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZGVtdXgueG1sCkBAIC0wLDAgKzEsOTczIEBACis8dGl0bGU+RFZCIERlbXV4IERldmljZTwvdGl0bGU+CisKKzxwYXJhPlRoZSBEVkIgZGVtdXggZGV2aWNlIGNvbnRyb2xzIHRoZSBmaWx0ZXJzIG9mIHRoZSBEVkIgaGFyZHdhcmUvc29mdHdhcmUuIEl0IGNhbiBiZQorYWNjZXNzZWQgdGhyb3VnaCA8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvYWRhcHRlcjAvZGVtdXgwPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZCBpb2N0bCBkZWZpbml0aW9ucyBjYW4gYmUKK2FjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi9kbXguaDwvZW1waGFzaXM+IGluIHlvdXIgYXBwbGljYXRpb24uCis8L3BhcmE+Cis8c2VjdGlvbiBpZD0iZG14X3R5cGVzIj4KKzx0aXRsZT5EZW11eCBEYXRhIFR5cGVzPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9ImRteF9vdXRwdXRfdCI+Cis8dGl0bGU+ZG14X291dHB1dF90PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtCisgeworCSBETVhfT1VUX0RFQ09ERVIsCisJIERNWF9PVVRfVEFQLAorCSBETVhfT1VUX1RTX1RBUAorIH0gZG14X291dHB1dF90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPjxlbXBoYXNpcyByb2xlPSJ0dCI+RE1YX09VVF9UQVA8L2VtcGhhc2lzPiBkZWxpdmVycyB0aGUgc3RyZWFtIG91dHB1dCB0byB0aGUgZGVtdXggZGV2aWNlIG9uIHdoaWNoIHRoZSBpb2N0bCBpcworY2FsbGVkLgorPC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij5ETVhfT1VUX1RTX1RBUDwvZW1waGFzaXM+IHJvdXRlcyBvdXRwdXQgdG8gdGhlIGxvZ2ljYWwgRFZSIGRldmljZSA8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvZHZiL2FkYXB0ZXIwL2R2cjA8L2VtcGhhc2lzPiwKK3doaWNoIGRlbGl2ZXJzIGEgVFMgbXVsdGlwbGV4ZWQgZnJvbSBhbGwgZmlsdGVycyBmb3Igd2hpY2ggPGVtcGhhc2lzIHJvbGU9InR0Ij5ETVhfT1VUX1RTX1RBUDwvZW1waGFzaXM+IHdhcworc3BlY2lmaWVkLgorPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X2lucHV0X3QiPgorPHRpdGxlPmRteF9pbnB1dF90PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtCisgeworCSBETVhfSU5fRlJPTlRFTkQsCisJIERNWF9JTl9EVlIKKyB9IGRteF9pbnB1dF90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9wZXNfdHlwZV90Ij4KKzx0aXRsZT5kbXhfcGVzX3R5cGVfdDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bQorIHsKKwkgRE1YX1BFU19BVURJTywKKwkgRE1YX1BFU19WSURFTywKKwkgRE1YX1BFU19URUxFVEVYVCwKKwkgRE1YX1BFU19TVUJUSVRMRSwKKwkgRE1YX1BFU19QQ1IsCisJIERNWF9QRVNfT1RIRVIKKyB9IGRteF9wZXNfdHlwZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9ldmVudF90Ij4KKzx0aXRsZT5kbXhfZXZlbnRfdDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bQorIHsKKwkgRE1YX1NDUkFNQkxJTkdfRVYsCisJIERNWF9GUk9OVEVORF9FVgorIH0gZG14X2V2ZW50X3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X3NjcmFtYmxpbmdfc3RhdHVzX3QiPgorPHRpdGxlPmRteF9zY3JhbWJsaW5nX3N0YXR1c190PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtCisgeworCSBETVhfU0NSQU1CTElOR19PRkYsCisJIERNWF9TQ1JBTUJMSU5HX09OCisgfSBkbXhfc2NyYW1ibGluZ19zdGF0dXNfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfZmlsdGVyIj4KKzx0aXRsZT5zdHJ1Y3QgZG14X2ZpbHRlcjwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IGRteF9maWx0ZXIKKyB7CisJIHVpbnQ4X3QgICAgICAgICBmaWx0ZXJbRE1YX0ZJTFRFUl9TSVpFXTsKKwkgdWludDhfdCAgICAgICAgIG1hc2tbRE1YX0ZJTFRFUl9TSVpFXTsKKyB9IGRteF9maWx0ZXJfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc2N0X2ZpbHRlcl9wYXJhbXMiPgorPHRpdGxlPnN0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXM8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zCisgeworCSB1aW50MTZfdCAgICAgICAgICAgIHBpZDsKKwkgZG14X2ZpbHRlcl90ICAgICAgICBmaWx0ZXI7CisJIHVpbnQzMl90ICAgICAgICAgICAgdGltZW91dDsKKwkgdWludDMyX3QgICAgICAgICAgICBmbGFnczsKKyAjZGVmaW5lIERNWF9DSEVDS19DUkMgICAgICAgMQorICNkZWZpbmUgRE1YX09ORVNIT1QgICAgICAgICAyCisgI2RlZmluZSBETVhfSU1NRURJQVRFX1NUQVJUIDQKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9wZXNfZmlsdGVyX3BhcmFtcyI+Cis8dGl0bGU+c3RydWN0IGRteF9wZXNfZmlsdGVyX3BhcmFtczwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMKKyB7CisJIHVpbnQxNl90ICAgICAgICAgICAgcGlkOworCSBkbXhfaW5wdXRfdCAgICAgICAgIGlucHV0OworCSBkbXhfb3V0cHV0X3QgICAgICAgIG91dHB1dDsKKwkgZG14X3Blc190eXBlX3QgICAgICBwZXNfdHlwZTsKKwkgdWludDMyX3QgICAgICAgICAgICBmbGFnczsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9ldmVudCI+Cis8dGl0bGU+c3RydWN0IGRteF9ldmVudDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkbXhfZXZlbnQKKyB7CisJIGRteF9ldmVudF90ICAgICAgICAgIGV2ZW50OworCSB0aW1lX3QgICAgICAgICAgICAgICB0aW1lU3RhbXA7CisJIHVuaW9uCisJIHsKKwkJIGRteF9zY3JhbWJsaW5nX3N0YXR1c190IHNjcmFtYmxpbmc7CisJIH0gdTsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9zdGMiPgorPHRpdGxlPnN0cnVjdCBkbXhfc3RjPC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGRteF9zdGMgeworCSB1bnNpZ25lZCBpbnQgbnVtOyAgICAgICAvJiN4MjJDNjsgaW5wdXQgOiB3aGljaCBTVEM/IDAuLk4gJiN4MjJDNjsvCisJIHVuc2lnbmVkIGludCBiYXNlOyAgICAgIC8mI3gyMkM2OyBvdXRwdXQ6IGRpdmlzb3IgZm9yIHN0YyB0byBnZXQgOTAga0h6IGNsb2NrICYjeDIyQzY7LworCSB1aW50NjRfdCBzdGM7ICAgICAgICAgICAvJiN4MjJDNjsgb3V0cHV0OiBzdGMgaW4gJ2Jhc2UnJiN4MjJDNjs5MCBrSHogdW5pdHMgJiN4MjJDNjsvCisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPC9zZWN0aW9uPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfZmNhbGxzIj4KKzx0aXRsZT5EZW11eCBGdW5jdGlvbiBDYWxsczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSJkbXhfZm9wZW4iPgorPHRpdGxlPm9wZW4oKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsLCB1c2VkIHdpdGggYSBkZXZpY2UgbmFtZSBvZiAvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDAsCisgYWxsb2NhdGVzIGEgbmV3IGZpbHRlciBhbmQgcmV0dXJucyBhIGhhbmRsZSB3aGljaCBjYW4gYmUgdXNlZCBmb3Igc3Vic2VxdWVudAorIGNvbnRyb2wgb2YgdGhhdCBmaWx0ZXIuIFRoaXMgY2FsbCBoYXMgdG8gYmUgbWFkZSBmb3IgZWFjaCBmaWx0ZXIgdG8gYmUgdXNlZCwgaS5lLiBldmVyeQorIHJldHVybmVkIGZpbGUgZGVzY3JpcHRvciBpcyBhIHJlZmVyZW5jZSB0byBhIHNpbmdsZSBmaWx0ZXIuIC9kZXYvZHZiL2FkYXB0ZXIwL2R2cjAKKyBpcyBhIGxvZ2ljYWwgZGV2aWNlIHRvIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgVHJhbnNwb3J0IFN0cmVhbXMgZm9yIGRpZ2l0YWwKKyB2aWRlbyByZWNvcmRpbmcuIFdoZW4gcmVhZGluZyBmcm9tIHRoaXMgZGV2aWNlIGEgdHJhbnNwb3J0IHN0cmVhbSBjb250YWluaW5nCisgdGhlIHBhY2tldHMgZnJvbSBhbGwgUEVTIGZpbHRlcnMgc2V0IGluIHRoZSBjb3JyZXNwb25kaW5nIGRlbXV4IGRldmljZQorICgvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDApIGhhdmluZyB0aGUgb3V0cHV0IHNldCB0byBETVhfT1VUX1RTX1RBUC4gQQorIHJlY29yZGVkIFRyYW5zcG9ydCBTdHJlYW0gaXMgcmVwbGF5ZWQgYnkgd3JpdGluZyB0byB0aGlzIGRldmljZS4gPC9wYXJhPgorPHBhcmE+VGhlIHNpZ25pZmljYW5jZSBvZiBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBpcyBkZXNjcmliZWQgaW4gdGhlCisgZG9jdW1lbnRhdGlvbiBmb3IgZnVuY3Rpb25zIHdoZXJlIHRoZXJlIGlzIGEgZGlmZmVyZW5jZS4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZQorIHNlbWFudGljcyBvZiB0aGUgb3BlbigpIGNhbGwgaXRzZWxmLiBBIGRldmljZSBvcGVuZWQgaW4gYmxvY2tpbmcgbW9kZSBjYW4gbGF0ZXIKKyBiZSBwdXQgaW50byBub24tYmxvY2tpbmcgbW9kZSAoYW5kIHZpY2UgdmVyc2EpIHVzaW5nIHRoZSBGX1NFVEZMIGNvbW1hbmQKKyBvZiB0aGUgZmNudGwgc3lzdGVtIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuKGNvbnN0IGNoYXIgJiN4MjJDNjtkZXZpY2VOYW1lLCBpbnQgZmxhZ3MpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNvbnN0IGNoYXIKKyAqZGV2aWNlTmFtZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TmFtZSBvZiBkZW11eCBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmbGFnczwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QSBiaXQtd2lzZSBPUiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fUkRXUiByZWFkL3dyaXRlIGFjY2VzczwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fTk9OQkxPQ0sgb3BlbiBpbiBub24tYmxvY2tpbmcgbW9kZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPihibG9ja2luZyBtb2RlIGlzIHRoZSBkZWZhdWx0KTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PREVWPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2UgZHJpdmVyIG5vdCBsb2FkZWQvYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVNRklMRTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+JiM4MjIwO1RvbyBtYW55IG9wZW4gZmlsZXMmIzgyMjE7LCBpLmUuIG5vIG1vcmUgZmlsdGVycyBhdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRyaXZlciBmYWlsZWQgdG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X2ZjbG9zZSI+Cis8dGl0bGU+Y2xvc2UoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGRlYWN0aXZhdGVzIGFuZCBkZWFsbG9jYXRlcyBhIGZpbHRlciB0aGF0IHdhcyBwcmV2aW91c2x5CisgYWxsb2NhdGVkIHZpYSB0aGUgb3BlbigpIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBjbG9zZShpbnQgZmQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9mcmVhZCI+Cis8dGl0bGU+cmVhZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgcmV0dXJucyBmaWx0ZXJlZCBkYXRhLCB3aGljaCBtaWdodCBiZSBzZWN0aW9uIG9yIFBFUyBkYXRhLiBUaGUKKyBmaWx0ZXJlZCBkYXRhIGlzIHRyYW5zZmVycmVkIGZyb20gdGhlIGRyaXZlciYjODIxNztzIGludGVybmFsIGNpcmN1bGFyIGJ1ZmZlciB0byBidWYuIFRoZQorIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaXMgaW1wbGllZCBieSBjb3VudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+V2hlbiByZXR1cm5pbmcgc2VjdGlvbiBkYXRhIHRoZSBkcml2ZXIgYWx3YXlzIHRyaWVzIHRvIHJldHVybiBhIGNvbXBsZXRlIHNpbmdsZQorIHNlY3Rpb24gKGV2ZW4gdGhvdWdoIGJ1ZiB3b3VsZCBwcm92aWRlIGJ1ZmZlciBzcGFjZSBmb3IgbW9yZSBkYXRhKS4gSWYgdGhlIHNpemUKKyBvZiB0aGUgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2VjdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgcmV0dXJuZWQsCisgYW5kIHRoZSByZW1haW5pbmcgZGF0YSB3aWxsIGJlIHByb3ZpZGVkIGluIHN1YnNlcXVlbnQgY2FsbHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgMiAqIDQwOTYgYnl0ZXMgKHRoZSBzaXplIG9mIHR3byBtYXhpbXVtCisgc2l6ZWQgc2VjdGlvbnMpIGJ5IGRlZmF1bHQuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIG1heSBiZSBjaGFuZ2VkIGJ5IHVzaW5nIHRoZQorIERNWF9TRVRfQlVGRkVSX1NJWkUgZnVuY3Rpb24uIElmIHRoZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCwgb3IgaWYKKyB0aGUgcmVhZCBvcGVyYXRpb25zIGFyZSBub3QgcGVyZm9ybWVkIGZhc3QgZW5vdWdoLCB0aGlzIG1heSByZXN1bHQgaW4gYSBidWZmZXIKKyBvdmVyZmxvdyBlcnJvci4gSW4gdGhpcyBjYXNlIEVPVkVSRkxPVyB3aWxsIGJlIHJldHVybmVkLCBhbmQgdGhlIGNpcmN1bGFyCisgYnVmZmVyIHdpbGwgYmUgZW1wdGllZC4gVGhpcyBjYWxsIGlzIGJsb2NraW5nIGlmIHRoZXJlIGlzIG5vIGRhdGEgdG8gcmV0dXJuLCBpLmUuIHRoZQorIHByb2Nlc3Mgd2lsbCBiZSBwdXQgdG8gc2xlZXAgd2FpdGluZyBmb3IgZGF0YSwgdW5sZXNzIHRoZSBPX05PTkJMT0NLIGZsYWcKKyBpcyBzcGVjaWZpZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vdGUgdGhhdCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlYWQsIHRoZSBmaWx0ZXJpbmcgcHJvY2VzcyBoYXMgdG8gYmUgc3RhcnRlZAorIGJ5IGRlZmluaW5nIGVpdGhlciBhIHNlY3Rpb24gb3IgYSBQRVMgZmlsdGVyIGJ5IG1lYW5zIG9mIHRoZSBpb2N0bCBmdW5jdGlvbnMsCisgYW5kIHRoZW4gc3RhcnRpbmcgdGhlIGZpbHRlcmluZyBwcm9jZXNzIHZpYSB0aGUgRE1YX1NUQVJUIGlvY3RsIGZ1bmN0aW9uCisgb3IgYnkgc2V0dGluZyB0aGUgRE1YX0lNTUVESUFURV9TVEFSVCBmbGFnLiBJZiB0aGUgcmVhZGluZyBpcyBkb25lCisgZnJvbSBhIGxvZ2ljYWwgRFZSIGRlbXV4IGRldmljZSwgdGhlIGRhdGEgd2lsbCBjb25zdGl0dXRlIGEgVHJhbnNwb3J0IFN0cmVhbQorIGluY2x1ZGluZyB0aGUgcGFja2V0cyBmcm9tIGFsbCBQRVMgZmlsdGVycyBpbiB0aGUgY29ycmVzcG9uZGluZyBkZW11eCBkZXZpY2UKKyAvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDAgaGF2aW5nIHRoZSBvdXRwdXQgc2V0IHRvIERNWF9PVVRfVFNfVEFQLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QgcmVhZChpbnQgZmQsIHZvaWQgJiN4MjJDNjtidWYsIHNpemVfdCBjb3VudCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dm9pZCAqYnVmPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gYmUgdXNlZCBmb3IgcmV0dXJuZWQgZmlsdGVyZWQgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGNvdW50PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TaXplIG9mIGJ1Zi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVXT1VMREJMT0NLPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ObyBkYXRhIHRvIHJldHVybiBhbmQgT19OT05CTE9DSyB3YXMgc3BlY2lmaWVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVDUkM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkxhc3Qgc2VjdGlvbiBoYWQgYSBDUkMgZXJyb3IgLSBubyBkYXRhIHJldHVybmVkLiBUaGUKKyBidWZmZXIgaXMgZmx1c2hlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU9WRVJGTE9XPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZmlsdGVyZWQgZGF0YSB3YXMgbm90IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGluIGR1ZQorIHRpbWUsIHJlc3VsdGluZyBpbiBub24tcmVhZCBkYXRhIGJlaW5nIGxvc3QuIFRoZSBidWZmZXIgaXMKKyBmbHVzaGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FVElNRURPVVQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzZWN0aW9uIHdhcyBub3QgbG9hZGVkIHdpdGhpbiB0aGUgc3RhdGVkIHRpbWVvdXQKKyBwZXJpb2QuIFNlZSBpb2N0bCBETVhfU0VUX0ZJTFRFUiBmb3IgaG93IHRvIHNldCBhCisgdGltZW91dC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZHJpdmVyIGZhaWxlZCB0byB3cml0ZSB0byB0aGUgY2FsbGVycyBidWZmZXIgZHVlIHRvIGFuCisgaW52YWxpZCAqYnVmIHBvaW50ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9md3JpdGUiPgorPHRpdGxlPndyaXRlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBzeXN0ZW0gY2FsbCBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBsb2dpY2FsIGRldmljZSAvZGV2L2R2Yi9hZGFwdGVyMC9kdnIwLAorIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGh5c2ljYWwgZGVtdXggZGV2aWNlIHRoYXQgcHJvdmlkZXMgdGhlIGFjdHVhbCBEVlIKKyBmdW5jdGlvbmFsaXR5LiBJdCBpcyB1c2VkIGZvciByZXBsYXkgb2YgYSBkaWdpdGFsbHkgcmVjb3JkZWQgVHJhbnNwb3J0IFN0cmVhbS4KKyBNYXRjaGluZyBmaWx0ZXJzIGhhdmUgdG8gYmUgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZyBwaHlzaWNhbCBkZW11eAorIGRldmljZSwgL2Rldi9kdmIvYWRhcHRlcjAvZGVtdXgwLiBUaGUgYW1vdW50IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaXMKKyBpbXBsaWVkIGJ5IGNvdW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zc2l6ZV90IHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAmI3gyMkM2O2J1Ziwgc2l6ZV90CisgY291bnQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZvaWQgKmJ1ZjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRyYW5zcG9ydCBTdHJlYW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBjb3VudDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U2l6ZSBvZiBidWYuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGF0YSB3YXMgd3JpdHRlbi4gVGhpcworIG1pZ2h0IGhhcHBlbiBpZiBPX05PTkJMT0NLIHdhcyBzcGVjaWZpZWQgYW5kIHRoZXJlCisgaXMgbm8gbW9yZSBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIChpZiBPX05PTkJMT0NLIGlzCisgbm90IHNwZWNpZmllZCB0aGUgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBidWZmZXIgc3BhY2UgaXMKKyBhdmFpbGFibGUpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBlcnJvciBjb2RlIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBjb25mbGljdGluZworIHJlcXVlc3RzLiBUaGUgY29ycmVzcG9uZGluZyBkZW11eCBkZXZpY2UgaXMgc2V0dXAgdG8KKyByZWNlaXZlIGRhdGEgZnJvbSB0aGUgZnJvbnQtIGVuZC4gTWFrZSBzdXJlIHRoYXQgdGhlc2UKKyBmaWx0ZXJzIGFyZSBzdG9wcGVkIGFuZCB0aGF0IHRoZSBmaWx0ZXJzIHdpdGggaW5wdXQgc2V0IHRvCisgRE1YX0lOX0RWUiBhcmUgc3RhcnRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc3RhcnQiPgorPHRpdGxlPkRNWF9TVEFSVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgaXMgdXNlZCB0byBzdGFydCB0aGUgYWN0dWFsIGZpbHRlcmluZyBvcGVyYXRpb24gZGVmaW5lZCB2aWEgdGhlIGlvY3RsCisgY2FsbHMgRE1YX1NFVF9GSUxURVIgb3IgRE1YX1NFVF9QRVNfRklMVEVSLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoIGludCBmZCwgaW50IHJlcXVlc3QgPSBETVhfU1RBUlQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRE1YX1NUQVJUIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQsIGkuZS4gbm8gZmlsdGVyaW5nIHBhcmFtZXRlcnMgcHJvdmlkZWQgdmlhCisgdGhlIERNWF9TRVRfRklMVEVSIG9yIERNWF9TRVRfUEVTX0ZJTFRFUgorIGZ1bmN0aW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgY29uZmxpY3RpbmcKKyByZXF1ZXN0cy4gVGhlcmUgYXJlIGFjdGl2ZSBmaWx0ZXJzIGZpbHRlcmluZyBkYXRhIGZyb20KKyBhbm90aGVyIGlucHV0IHNvdXJjZS4gTWFrZSBzdXJlIHRoYXQgdGhlc2UgZmlsdGVycyBhcmUKKyBzdG9wcGVkIGJlZm9yZSBzdGFydGluZyB0aGlzIGZpbHRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X3N0b3AiPgorPHRpdGxlPkRNWF9TVE9QPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBpcyB1c2VkIHRvIHN0b3AgdGhlIGFjdHVhbCBmaWx0ZXJpbmcgb3BlcmF0aW9uIGRlZmluZWQgdmlhIHRoZQorIGlvY3RsIGNhbGxzIERNWF9TRVRfRklMVEVSIG9yIERNWF9TRVRfUEVTX0ZJTFRFUiBhbmQgc3RhcnRlZCB2aWEKKyB0aGUgRE1YX1NUQVJUIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9IERNWF9TVE9QKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIERNWF9TVE9QIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc2V0X2ZpbHRlciI+Cis8dGl0bGU+RE1YX1NFVF9GSUxURVI8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHNldHMgdXAgYSBmaWx0ZXIgYWNjb3JkaW5nIHRvIHRoZSBmaWx0ZXIgYW5kIG1hc2sgcGFyYW1ldGVycworIHByb3ZpZGVkLiBBIHRpbWVvdXQgbWF5IGJlIGRlZmluZWQgc3RhdGluZyBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBhCisgc2VjdGlvbiB0byBiZSBsb2FkZWQuIEEgdmFsdWUgb2YgMCBtZWFucyB0aGF0IG5vIHRpbWVvdXQgc2hvdWxkIGJlIGFwcGxpZWQuCisgRmluYWxseSB0aGVyZSBpcyBhIGZsYWcgZmllbGQgd2hlcmUgaXQgaXMgcG9zc2libGUgdG8gc3RhdGUgd2hldGhlciBhIHNlY3Rpb24gc2hvdWxkCisgYmUgQ1JDLWNoZWNrZWQsIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91bGQgYmUgYSAmIzgyMjE7b25lLXNob3QmIzgyMjE7IGZpbHRlciwgaS5lLiBpZiB0aGUKKyBmaWx0ZXJpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBzdG9wcGVkIGFmdGVyIHRoZSBmaXJzdCBzZWN0aW9uIGlzIHJlY2VpdmVkLCBhbmQKKyB3aGV0aGVyIHRoZSBmaWx0ZXJpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBzdGFydGVkIGltbWVkaWF0ZWx5ICh3aXRob3V0IHdhaXRpbmcKKyBmb3IgYSBETVhfU1RBUlQgaW9jdGwgY2FsbCkuIElmIGEgZmlsdGVyIHdhcyBwcmV2aW91c2x5IHNldC11cCwgdGhpcyBmaWx0ZXIgd2lsbAorIGJlIGNhbmNlbGVkLCBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHdpbGwgYmUgZmx1c2hlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKCBpbnQgZmQsIGludCByZXF1ZXN0ID0gRE1YX1NFVF9GSUxURVIsCisgc3RydWN0IGRteF9zY3RfZmlsdGVyX3BhcmFtcyAmI3gyMkM2O3BhcmFtcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBETVhfU0VUX0ZJTFRFUiBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMKKyAqcGFyYW1zPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIGZpbHRlciBwYXJhbWV0ZXJzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc2V0X3Blc19maWx0ZXIiPgorPHRpdGxlPkRNWF9TRVRfUEVTX0ZJTFRFUjwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgc2V0cyB1cCBhIFBFUyBmaWx0ZXIgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkLiBCeSBhCisgUEVTIGZpbHRlciBpcyBtZWFudCBhIGZpbHRlciB0aGF0IGlzIGJhc2VkIGp1c3Qgb24gdGhlIHBhY2tldCBpZGVudGlmaWVyIChQSUQpLCBpLmUuCisgbm8gUEVTIGhlYWRlciBvciBwYXlsb2FkIGZpbHRlcmluZyBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHRyYW5zcG9ydCBzdHJlYW0gZGVzdGluYXRpb24gZm9yIHRoZSBmaWx0ZXJlZCBvdXRwdXQgbWF5IGJlIHNldC4gQWxzbyB0aGUKKyBQRVMgdHlwZSBtYXkgYmUgc3RhdGVkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZS5nLiBkaXJlY3QgYSB2aWRlbyBzdHJlYW0gZGlyZWN0bHkKKyB0byB0aGUgdmlkZW8gZGVjb2Rlci4gRmluYWxseSB0aGVyZSBpcyBhIGZsYWcgZmllbGQgd2hlcmUgaXQgaXMgcG9zc2libGUgdG8gc3RhdGUKKyB3aGV0aGVyIHRoZSBmaWx0ZXJpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBzdGFydGVkIGltbWVkaWF0ZWx5ICh3aXRob3V0IHdhaXRpbmcKKyBmb3IgYSBETVhfU1RBUlQgaW9jdGwgY2FsbCkuIElmIGEgZmlsdGVyIHdhcyBwcmV2aW91c2x5IHNldC11cCwgdGhpcyBmaWx0ZXIgd2lsbAorIGJlIGNhbmNlbGxlZCwgYW5kIHRoZSByZWNlaXZlIGJ1ZmZlciB3aWxsIGJlIGZsdXNoZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9IERNWF9TRVRfUEVTX0ZJTFRFUiwKKyBzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zICYjeDIyQzY7cGFyYW1zKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIERNWF9TRVRfUEVTX0ZJTFRFUiBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMKKyAqcGFyYW1zPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIGZpbHRlciBwYXJhbWV0ZXJzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBlcnJvciBjb2RlIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBjb25mbGljdGluZworIHJlcXVlc3RzLiBUaGVyZSBhcmUgYWN0aXZlIGZpbHRlcnMgZmlsdGVyaW5nIGRhdGEgZnJvbQorIGFub3RoZXIgaW5wdXQgc291cmNlLiBNYWtlIHN1cmUgdGhhdCB0aGVzZSBmaWx0ZXJzIGFyZQorIHN0b3BwZWQgYmVmb3JlIHN0YXJ0aW5nIHRoaXMgZmlsdGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXNfc2V0X2J1ZmZlcl9zaXplIj4KKzx0aXRsZT5ETVhfU0VUX0JVRkZFUl9TSVpFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBpcyB1c2VkIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIHVzZWQgZm9yIGZpbHRlcmVkIGRhdGEuCisgVGhlIGRlZmF1bHQgc2l6ZSBpcyB0d28gbWF4aW11bSBzaXplZCBzZWN0aW9ucywgaS5lLiBpZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQKKyBhIGJ1ZmZlciBzaXplIG9mIDIgKiA0MDk2IGJ5dGVzIHdpbGwgYmUgdXNlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKCBpbnQgZmQsIGludCByZXF1ZXN0ID0KKyBETVhfU0VUX0JVRkZFUl9TSVpFLCB1bnNpZ25lZCBsb25nIHNpemUpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRE1YX1NFVF9CVUZGRVJfU0laRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT51bnNpZ25lZCBsb25nIHNpemU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNpemUgb2YgY2lyY3VsYXIgYnVmZmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PTUVNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZHJpdmVyIHdhcyBub3QgYWJsZSB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiB0aGUKKyByZXF1ZXN0ZWQgc2l6ZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X2dldF9ldmVudCI+Cis8dGl0bGU+RE1YX0dFVF9FVkVOVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyBhbiBldmVudCBpZiBhdmFpbGFibGUuIElmIGFuIGV2ZW50IGlzIG5vdCBhdmFpbGFibGUsCisgdGhlIGJlaGF2aW9yIGRlcGVuZHMgb24gd2hldGhlciB0aGUgZGV2aWNlIGlzIGluIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZworIG1vZGUuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGNhbGwgZmFpbHMgaW1tZWRpYXRlbHkgd2l0aCBlcnJubyBzZXQgdG8KKyBFV09VTERCTE9DSy4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgY2FsbCBibG9ja3MgdW50aWwgYW4gZXZlbnQgYmVjb21lcworIGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHN0YW5kYXJkIExpbnV4IHBvbGwoKSBhbmQvb3Igc2VsZWN0KCkgc3lzdGVtIGNhbGxzIGNhbiBiZSB1c2VkIHdpdGggdGhlCisgZGV2aWNlIGZpbGUgZGVzY3JpcHRvciB0byB3YXRjaCBmb3IgbmV3IGV2ZW50cy4gRm9yIHNlbGVjdCgpLCB0aGUgZmlsZSBkZXNjcmlwdG9yCisgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBleGNlcHRmZHMgYXJndW1lbnQsIGFuZCBmb3IgcG9sbCgpLCBQT0xMUFJJIHNob3VsZAorIGJlIHNwZWNpZmllZCBhcyB0aGUgd2FrZS11cCBjb25kaXRpb24uIE9ubHkgdGhlIGxhdGVzdCBldmVudCBmb3IgZWFjaCBmaWx0ZXIgaXMKKyBzYXZlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKCBpbnQgZmQsIGludCByZXF1ZXN0ID0gRE1YX0dFVF9FVkVOVCwKKyBzdHJ1Y3QgZG14X2V2ZW50ICYjeDIyQzY7ZXYpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRE1YX0dFVF9FVkVOVCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgZG14X2V2ZW50ICpldjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGV2ZW50IGlzIHRvIGJlIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZXYgcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVdPVUxEQkxPQ0s8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZXJlIGlzIG5vIGV2ZW50IHBlbmRpbmcsIGFuZCB0aGUgZGV2aWNlIGlzIGluCisgbm9uLWJsb2NraW5nIG1vZGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9nZXRfc3RjIj4KKzx0aXRsZT5ETVhfR0VUX1NUQzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3lzdGVtIHRpbWUgY291bnRlciAod2hpY2ggaXMgZHJpdmVuCisgYnkgYSBQRVMgZmlsdGVyIG9mIHR5cGUgRE1YX1BFU19QQ1IpLiBTb21lIGhhcmR3YXJlIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUKKyBTVEMsIHNvIHlvdSBtdXN0IHNwZWNpZnkgd2hpY2ggb25lIGJ5IHNldHRpbmcgdGhlIG51bSBmaWVsZCBvZiBzdGMgYmVmb3JlIHRoZSBpb2N0bAorIChyYW5nZSAwLi4ubikuIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gZm9ybSBvZiBhIHJhdGlvIHdpdGggYSA2NCBiaXQgbnVtZXJhdG9yCisgYW5kIGEgMzIgYml0IGRlbm9taW5hdG9yLCBzbyB0aGUgcmVhbCA5MGtIeiBTVEMgdmFsdWUgaXMgc3RjLSYjeDAwM0U7c3RjIC8KKyBzdGMtJiN4MDAzRTtiYXNlCisgLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoIGludCBmZCwgaW50IHJlcXVlc3QgPSBETVhfR0VUX1NUQywgc3RydWN0CisgZG14X3N0YyAmI3gyMkM2O3N0Yyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBETVhfR0VUX1NUQyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgZG14X3N0YyAqc3RjPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgc3RjIGlzIHRvIGJlIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RjIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW52YWxpZCBzdGMgbnVtYmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZiYXBpLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZiYXBpLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmM1YjIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJhcGkueG1sCkBAIC0wLDAgKzEsODcgQEAKKzxwYXJ0aW5mbz4KKzxhdXRob3Jncm91cD4KKzxhdXRob3I+Cis8Zmlyc3RuYW1lPlJhbHBoPC9maXJzdG5hbWU+Cis8c3VybmFtZT5NZXR6bGVyPC9zdXJuYW1lPgorPG90aGVybmFtZSByb2xlPSJtaSI+Si4gSy48L290aGVybmFtZT4KKzxhZmZpbGlhdGlvbj48YWRkcmVzcz48ZW1haWw+cmprbUBtZXR6bGVyYnJvcy5kZTwvZW1haWw+PC9hZGRyZXNzPjwvYWZmaWxpYXRpb24+Cis8L2F1dGhvcj4KKzxhdXRob3I+Cis8Zmlyc3RuYW1lPk1hcmN1czwvZmlyc3RuYW1lPgorPHN1cm5hbWU+TWV0emxlcjwvc3VybmFtZT4KKzxvdGhlcm5hbWUgcm9sZT0ibWkiPk8uIEMuPC9vdGhlcm5hbWU+Cis8YWZmaWxpYXRpb24+PGFkZHJlc3M+PGVtYWlsPnJqa21AbWV0emxlcmJyb3MuZGU8L2VtYWlsPjwvYWRkcmVzcz48L2FmZmlsaWF0aW9uPgorPC9hdXRob3I+Cis8YXV0aG9yPgorPGZpcnN0bmFtZT5NYXVybzwvZmlyc3RuYW1lPgorPHN1cm5hbWU+Q2hlaGFiPC9zdXJuYW1lPgorPG90aGVybmFtZSByb2xlPSJtaSI+Q2FydmFsaG88L290aGVybmFtZT4KKzxhZmZpbGlhdGlvbj48YWRkcmVzcz48ZW1haWw+bWNoZWhhYkByZWRoYXQuY29tPC9lbWFpbD48L2FkZHJlc3M+PC9hZmZpbGlhdGlvbj4KKzxjb250cmliPlBvcnRlZCBkb2N1bWVudCB0byBEb2Nib29rIFhNTC48L2NvbnRyaWI+Cis8L2F1dGhvcj4KKzwvYXV0aG9yZ3JvdXA+Cis8Y29weXJpZ2h0PgorCTx5ZWFyPjIwMDI8L3llYXI+CisJPHllYXI+MjAwMzwveWVhcj4KKwk8eWVhcj4yMDA5PC95ZWFyPgorCTxob2xkZXI+Q29udmVyZ2VuY2UgR21iSDwvaG9sZGVyPgorPC9jb3B5cmlnaHQ+CisKKzxyZXZoaXN0b3J5PgorPCEtLSBQdXQgZG9jdW1lbnQgcmV2aXNpb25zIGhlcmUsIG5ld2VzdCBmaXJzdC4gLS0+Cis8cmV2aXNpb24+Cis8cmV2bnVtYmVyPjIuMC4xPC9yZXZudW1iZXI+Cis8ZGF0ZT4yMDA5LTA5LTE2PC9kYXRlPgorPGF1dGhvcmluaXRpYWxzPm1jYzwvYXV0aG9yaW5pdGlhbHM+Cis8cmV2cmVtYXJrPgorQWRkZWQgSVNEQi1UIHRlc3Qgb3JpZ2luYWxseSB3cml0dGVuIGJ5IFBhdHJpY2sgQm9ldHRjaGVyCis8L3JldnJlbWFyaz4KKzwvcmV2aXNpb24+Cis8cmV2aXNpb24+Cis8cmV2bnVtYmVyPjIuMC4wPC9yZXZudW1iZXI+Cis8ZGF0ZT4yMDA5LTA5LTA2PC9kYXRlPgorPGF1dGhvcmluaXRpYWxzPm1jYzwvYXV0aG9yaW5pdGlhbHM+Cis8cmV2cmVtYXJrPkNvbnZlcnNpb24gZnJvbSBMYVRleCB0byBEb2NCb29rIFhNTC4gVGhlCisJY29udGVudHMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIExhVGV4IHZlcnNpb24uPC9yZXZyZW1hcms+Cis8L3JldmlzaW9uPgorPHJldmlzaW9uPgorPHJldm51bWJlcj4xLjAuMDwvcmV2bnVtYmVyPgorPGRhdGU+MjAwMy0wNy0yNDwvZGF0ZT4KKzxhdXRob3Jpbml0aWFscz5yamttPC9hdXRob3Jpbml0aWFscz4KKzxyZXZyZW1hcms+SW5pdGlhbCByZXZpc2lvbiBvbiBMYVRFWC48L3JldnJlbWFyaz4KKzwvcmV2aXNpb24+Cis8L3Jldmhpc3Rvcnk+Cis8L3BhcnRpbmZvPgorCisKKzx0aXRsZT5MSU5VWCBEVkIgQVBJPC90aXRsZT4KKzxzdWJ0aXRsZT5WZXJzaW9uIDM8L3N1YnRpdGxlPgorPCEtLSBBREQgVEhFIENIQVBURVJTIEhFUkUgLS0+CisgIDxjaGFwdGVyIGlkPSJkdmJfaW50cm9kdXRpb24iPgorICAgICZzdWItaW50cm87CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9ImR2Yl9mcm9udGVuZCI+CisgICAgJnN1Yi1mcm9udGVuZDsKKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iZHZiX2RlbXV4Ij4KKyAgICAmc3ViLWRlbXV4OworICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJkdmJfdmlkZW8iPgorICAgICZzdWItdmlkZW87CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9ImR2Yl9hdWRpbyI+CisgICAgJnN1Yi1hdWRpbzsKKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iZHZiX2NhIj4KKyAgICAmc3ViLWNhOworICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJkdmJfbmV0Ij4KKyAgICAmc3ViLW5ldDsKKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iZHZiX2tkYXBpIj4KKyAgICAmc3ViLWtkYXBpOworICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJkdmJfZXhhbXBsZXMiPgorICAgICZzdWItZXhhbXBsZXM7CisgIDwvY2hhcHRlcj4KKzwhLS0gRU5EIE9GIENIQVBURVJTIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucGRmIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYTc1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnN0Yi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucG5nIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOGYzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnN0Yi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9leGFtcGxlcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2V4YW1wbGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDM3ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9leGFtcGxlcy54bWwKQEAgLTAsMCArMSwzNjUgQEAKKzx0aXRsZT5FeGFtcGxlczwvdGl0bGU+Cis8cGFyYT5JbiB0aGlzIHNlY3Rpb24gd2Ugd291bGQgbGlrZSB0byBwcmVzZW50IHNvbWUgZXhhbXBsZXMgZm9yIHVzaW5nIHRoZSBEVkIgQVBJLgorPC9wYXJhPgorPHBhcmE+TWFpbnRhaW5lciBub3RlOiBUaGlzIHNlY3Rpb24gaXMgb3V0IG9mIGRhdGUuIFBsZWFzZSByZWZlciB0byB0aGUgc2FtcGxlIHByb2dyYW1zIHBhY2thZ2VkCit3aXRoIHRoZSBkcml2ZXIgZGlzdHJpYnV0aW9uIGZyb20gPHVsaW5rIHVybD0iaHR0cDovL2xpbnV4dHYub3JnL2hnL2R2Yi1hcHBzIiAvPi4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9InR1bmluZyI+Cis8dGl0bGU+VHVuaW5nPC90aXRsZT4KKzxwYXJhPldlIHdpbGwgc3RhcnQgd2l0aCBhIGdlbmVyaWMgdHVuaW5nIHN1YnJvdXRpbmUgdGhhdCB1c2VzIHRoZSBmcm9udGVuZCBhbmQgU0VDLCBhcyB3ZWxsIGFzCit0aGUgZGVtdXggZGV2aWNlcy4gVGhlIGV4YW1wbGUgaXMgZ2l2ZW4gZm9yIFFQU0sgdHVuZXJzLCBidXQgY2FuIGVhc2lseSBiZSBhZGp1c3RlZCBmb3IKK1FBTS4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyAjaW5jbHVkZSAmI3gwMDNDO3N5cy9pb2N0bC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3N0ZGlvLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3RkaW50LmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3lzL3R5cGVzLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3lzL3N0YXQuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztmY250bC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3RpbWUuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQzt1bmlzdGQuaCYjeDAwM0U7CisKKyAjaW5jbHVkZSAmI3gwMDNDO2xpbnV4L2R2Yi9kbXguaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztsaW51eC9kdmIvZnJvbnRlbmQuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztsaW51eC9kdmIvc2VjLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3lzL3BvbGwuaCYjeDAwM0U7CisKKyAjZGVmaW5lIERNWCAiL2Rldi9kdmIvYWRhcHRlcjAvZGVtdXgxIgorICNkZWZpbmUgRlJPTlQgIi9kZXYvZHZiL2FkYXB0ZXIwL2Zyb250ZW5kMSIKKyAjZGVmaW5lIFNFQyAiL2Rldi9kdmIvYWRhcHRlcjAvc2VjMSIKKworIC8mI3gyMkM2OyByb3V0aW5lIGZvciBjaGVja2luZyBpZiB3ZSBoYXZlIGEgc2lnbmFsIGFuZCBvdGhlciBzdGF0dXMgaW5mb3JtYXRpb24mI3gyMkM2Oy8KKyBpbnQgRkVSZWFkU3RhdHVzKGludCBmZCwgZmVfc3RhdHVzX3QgJiN4MjJDNjtzdGF0KQorIHsKKwkgaW50IGFuczsKKworCSBpZiAoIChhbnMgPSBpb2N0bChmZCxGRV9SRUFEX1NUQVRVUyxzdGF0KSAmI3gwMDNDOyAwKSl7CisJCSBwZXJyb3IoIkZFIFJFQUQgU1RBVFVTOiAiKTsKKwkJIHJldHVybiAtMTsKKwkgfQorCisJIGlmICgmI3gyMkM2O3N0YXQgJmFtcDsgRkVfSEFTX1BPV0VSKQorCQkgcHJpbnRmKCJGRSBIQVMgUE9XRVJcbiIpOworCisJIGlmICgmI3gyMkM2O3N0YXQgJmFtcDsgRkVfSEFTX1NJR05BTCkKKwkJIHByaW50ZigiRkUgSEFTIFNJR05BTFxuIik7CisKKwkgaWYgKCYjeDIyQzY7c3RhdCAmYW1wOyBGRV9TUEVDVFJVTV9JTlYpCisJCSBwcmludGYoIlNQRUtUUlVNIElOVlxuIik7CisKKwkgcmV0dXJuIDA7CisgfQorCisKKyAvJiN4MjJDNjsgdHVuZSBxcHNrICYjeDIyQzY7LworIC8mI3gyMkM2OyBmcmVxOiAgICAgICAgICAgICBmcmVxdWVuY3kgb2YgdHJhbnNwb25kZXIgICAgICAgICAgICAgICAgICAgICAgJiN4MjJDNjsvCisgLyYjeDIyQzY7IHZwaWQsIGFwaWQsIHRwaWQ6IFBJRHMgb2YgdmlkZW8sIGF1ZGlvIGFuZCB0ZWxldGV4dCBUUyBwYWNrZXRzICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgZGlzZXFjOiAgICAgICAgICAgRGlTRXFDIGFkZHJlc3Mgb2YgdGhlIHVzZWQgTE5CICAgICAgICAgICAgICAgICYjeDIyQzY7LworIC8mI3gyMkM2OyBwb2w6ICAgICAgICAgICAgICBQb2xhcmlzYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiN4MjJDNjsvCisgLyYjeDIyQzY7IHNyYXRlOiAgICAgICAgICAgIFN5bWJvbCBSYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgZmVjLiAgICAgICAgICAgICAgRkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjeDIyQzY7LworIC8mI3gyMkM2OyBsbmJfbG9mMTogICAgICAgICBsb2NhbCBmcmVxdWVuY3kgb2YgbG93ZXIgTE5CIGJhbmQgICAgICAgICAgICAgJiN4MjJDNjsvCisgLyYjeDIyQzY7IGxuYl9sb2YyOiAgICAgICAgIGxvY2FsIGZyZXF1ZW5jeSBvZiB1cHBlciBMTkIgYmFuZCAgICAgICAgICAgICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgbG5iX3Nsb2Y6ICAgICAgICAgc3dpdGNoIGZyZXF1ZW5jeSBvZiBMTkIgICAgICAgICAgICAgICAgICAgICAgICYjeDIyQzY7LworCisgaW50IHNldF9xcHNrX2NoYW5uZWwoaW50IGZyZXEsIGludCB2cGlkLCBpbnQgYXBpZCwgaW50IHRwaWQsCisJCSBpbnQgZGlzZXFjLCBpbnQgcG9sLCBpbnQgc3JhdGUsIGludCBmZWMsIGludCBsbmJfbG9mMSwKKwkJIGludCBsbmJfbG9mMiwgaW50IGxuYl9zbG9mKQorIHsKKwkgc3RydWN0IHNlY0NvbW1hbmQgc2NtZDsKKwkgc3RydWN0IHNlY0NtZFNlcXVlbmNlIHNjbWRzOworCSBzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zIHBlc0ZpbHRlclBhcmFtczsKKwkgRnJvbnRlbmRQYXJhbWV0ZXJzIGZycDsKKwkgc3RydWN0IHBvbGxmZCBwZmRbMV07CisJIEZyb250ZW5kRXZlbnQgZXZlbnQ7CisJIGludCBkZW11eDEsIGRlbXV4MiwgZGVtdXgzLCBmcm9udDsKKworCSBmcmVxdWVuY3kgPSAodWludDMyX3QpIGZyZXE7CisJIHN5bWJvbHJhdGUgPSAodWludDMyX3QpIHNyYXRlOworCisJIGlmKChmcm9udCA9IG9wZW4oRlJPTlQsT19SRFdSKSkgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIkZST05URU5EIERFVklDRTogIik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBpZigoc2VjID0gb3BlbihTRUMsT19SRFdSKSkgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIlNFQyBERVZJQ0U6ICIpOworCQkgcmV0dXJuIC0xOworCSB9CisKKwkgaWYgKGRlbXV4MSAmI3gwMDNDOyAwKXsKKwkJIGlmICgoZGVtdXgxPW9wZW4oRE1YLCBPX1JEV1J8T19OT05CTE9DSykpCisJCSAgICAgJiN4MDAzQzsgMCl7CisJCQkgcGVycm9yKCJERU1VWCBERVZJQ0U6ICIpOworCQkJIHJldHVybiAtMTsKKwkJIH0KKwkgfQorCisJIGlmIChkZW11eDIgJiN4MDAzQzsgMCl7CisJCSBpZiAoKGRlbXV4Mj1vcGVuKERNWCwgT19SRFdSfE9fTk9OQkxPQ0spKQorCQkgICAgICYjeDAwM0M7IDApeworCQkJIHBlcnJvcigiREVNVVggREVWSUNFOiAiKTsKKwkJCSByZXR1cm4gLTE7CisJCSB9CisJIH0KKworCSBpZiAoZGVtdXgzICYjeDAwM0M7IDApeworCQkgaWYgKChkZW11eDM9b3BlbihETVgsIE9fUkRXUnxPX05PTkJMT0NLKSkKKwkJICAgICAmI3gwMDNDOyAwKXsKKwkJCSBwZXJyb3IoIkRFTVVYIERFVklDRTogIik7CisJCQkgcmV0dXJuIC0xOworCQkgfQorCSB9CisKKwkgaWYgKGZyZXEgJiN4MDAzQzsgbG5iX3Nsb2YpIHsKKwkJIGZycC5GcmVxdWVuY3kgPSAoZnJlcSAtIGxuYl9sb2YxKTsKKwkJIHNjbWRzLmNvbnRpbnVvdXNUb25lID0gU0VDX1RPTkVfT0ZGOworCSB9IGVsc2UgeworCQkgZnJwLkZyZXF1ZW5jeSA9IChmcmVxIC0gbG5iX2xvZjIpOworCQkgc2NtZHMuY29udGludW91c1RvbmUgPSBTRUNfVE9ORV9PTjsKKwkgfQorCSBmcnAuSW52ZXJzaW9uID0gSU5WRVJTSU9OX0FVVE87CisJIGlmIChwb2wpIHNjbWRzLnZvbHRhZ2UgPSBTRUNfVk9MVEFHRV8xODsKKwkgZWxzZSBzY21kcy52b2x0YWdlID0gU0VDX1ZPTFRBR0VfMTM7CisKKwkgc2NtZC50eXBlPTA7CisJIHNjbWQudS5kaXNlcWMuYWRkcj0weDEwOworCSBzY21kLnUuZGlzZXFjLmNtZD0weDM4OworCSBzY21kLnUuZGlzZXFjLm51bVBhcmFtcz0xOworCSBzY21kLnUuZGlzZXFjLnBhcmFtc1swXSA9IDB4RjAgfCAoKGRpc2VxYyAmI3gyMkM2OyA0KSAmYW1wOyAweDBGKSB8CisJCSAoc2NtZHMuY29udGludW91c1RvbmUgPT0gU0VDX1RPTkVfT04gPyAxIDogMCkgfAorCQkgKHNjbWRzLnZvbHRhZ2U9PVNFQ19WT0xUQUdFXzE4ID8gMiA6IDApOworCisJIHNjbWRzLm1pbmlDb21tYW5kPVNFQ19NSU5JX05PTkU7CisJIHNjbWRzLm51bUNvbW1hbmRzPTE7CisJIHNjbWRzLmNvbW1hbmRzPSZhbXA7c2NtZDsKKwkgaWYgKGlvY3RsKHNlYywgU0VDX1NFTkRfU0VRVUVOQ0UsICZhbXA7c2NtZHMpICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJTRUMgU0VORDogIik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBpZiAoaW9jdGwoc2VjLCBTRUNfU0VORF9TRVFVRU5DRSwgJmFtcDtzY21kcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIlNFQyBTRU5EOiAiKTsKKwkJIHJldHVybiAtMTsKKwkgfQorCisJIGZycC51LnFwc2suU3ltYm9sUmF0ZSA9IHNyYXRlOworCSBmcnAudS5xcHNrLkZFQ19pbm5lciA9IGZlYzsKKworCSBpZiAoaW9jdGwoZnJvbnQsIEZFX1NFVF9GUk9OVEVORCwgJmFtcDtmcnApICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJRUFNLIFRVTkU6ICIpOworCQkgcmV0dXJuIC0xOworCSB9CisKKwkgcGZkWzBdLmZkID0gZnJvbnQ7CisJIHBmZFswXS5ldmVudHMgPSBQT0xMSU47CisKKwkgaWYgKHBvbGwocGZkLDEsMzAwMCkpeworCQkgaWYgKHBmZFswXS5yZXZlbnRzICZhbXA7IFBPTExJTil7CisJCQkgcHJpbnRmKCJHZXR0aW5nIFFQU0sgZXZlbnRcbiIpOworCQkJIGlmICggaW9jdGwoZnJvbnQsIEZFX0dFVF9FVkVOVCwgJmFtcDtldmVudCkKKworCQkJICAgICAgPT0gLUVPVkVSRkxPVyl7CisJCQkJIHBlcnJvcigicXBzayBnZXQgZXZlbnQiKTsKKwkJCQkgcmV0dXJuIC0xOworCQkJIH0KKwkJCSBwcmludGYoIlJlY2VpdmVkICIpOworCQkJIHN3aXRjaChldmVudC50eXBlKXsKKwkJCSBjYXNlIEZFX1VORVhQRUNURURfRVY6CisJCQkJIHByaW50ZigidW5leHBlY3RlZCBldmVudFxuIik7CisJCQkJIHJldHVybiAtMTsKKwkJCSBjYXNlIEZFX0ZBSUxVUkVfRVY6CisJCQkJIHByaW50ZigiZmFpbHVyZSBldmVudFxuIik7CisJCQkJIHJldHVybiAtMTsKKworCQkJIGNhc2UgRkVfQ09NUExFVElPTl9FVjoKKwkJCQkgcHJpbnRmKCJjb21wbGV0aW9uIGV2ZW50XG4iKTsKKwkJCSB9CisJCSB9CisJIH0KKworCisJIHBlc0ZpbHRlclBhcmFtcy5waWQgICAgID0gdnBpZDsKKwkgcGVzRmlsdGVyUGFyYW1zLmlucHV0ICAgPSBETVhfSU5fRlJPTlRFTkQ7CisJIHBlc0ZpbHRlclBhcmFtcy5vdXRwdXQgID0gRE1YX09VVF9ERUNPREVSOworCSBwZXNGaWx0ZXJQYXJhbXMucGVzX3R5cGUgPSBETVhfUEVTX1ZJREVPOworCSBwZXNGaWx0ZXJQYXJhbXMuZmxhZ3MgICA9IERNWF9JTU1FRElBVEVfU1RBUlQ7CisJIGlmIChpb2N0bChkZW11eDEsIERNWF9TRVRfUEVTX0ZJTFRFUiwgJmFtcDtwZXNGaWx0ZXJQYXJhbXMpICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJzZXRfdnBpZCIpOworCQkgcmV0dXJuIC0xOworCSB9CisKKwkgcGVzRmlsdGVyUGFyYW1zLnBpZCAgICAgPSBhcGlkOworCSBwZXNGaWx0ZXJQYXJhbXMuaW5wdXQgICA9IERNWF9JTl9GUk9OVEVORDsKKwkgcGVzRmlsdGVyUGFyYW1zLm91dHB1dCAgPSBETVhfT1VUX0RFQ09ERVI7CisJIHBlc0ZpbHRlclBhcmFtcy5wZXNfdHlwZSA9IERNWF9QRVNfQVVESU87CisJIHBlc0ZpbHRlclBhcmFtcy5mbGFncyAgID0gRE1YX0lNTUVESUFURV9TVEFSVDsKKwkgaWYgKGlvY3RsKGRlbXV4MiwgRE1YX1NFVF9QRVNfRklMVEVSLCAmYW1wO3Blc0ZpbHRlclBhcmFtcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoInNldF9hcGlkIik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBwZXNGaWx0ZXJQYXJhbXMucGlkICAgICA9IHRwaWQ7CisJIHBlc0ZpbHRlclBhcmFtcy5pbnB1dCAgID0gRE1YX0lOX0ZST05URU5EOworCSBwZXNGaWx0ZXJQYXJhbXMub3V0cHV0ICA9IERNWF9PVVRfREVDT0RFUjsKKwkgcGVzRmlsdGVyUGFyYW1zLnBlc190eXBlID0gRE1YX1BFU19URUxFVEVYVDsKKwkgcGVzRmlsdGVyUGFyYW1zLmZsYWdzICAgPSBETVhfSU1NRURJQVRFX1NUQVJUOworCSBpZiAoaW9jdGwoZGVtdXgzLCBETVhfU0VUX1BFU19GSUxURVIsICZhbXA7cGVzRmlsdGVyUGFyYW1zKSAmI3gwMDNDOyAwKXsKKwkJIHBlcnJvcigic2V0X3RwaWQiKTsKKwkJIHJldHVybiAtMTsKKwkgfQorCisJIHJldHVybiBoYXNfc2lnbmFsKGZkcyk7CisgfQorCis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+VGhlIHByb2dyYW0gYXNzdW1lcyB0aGF0IHlvdSBhcmUgdXNpbmcgYSB1bml2ZXJzYWwgTE5CIGFuZCBhIHN0YW5kYXJkIERpU0VxQworc3dpdGNoIHdpdGggdXAgdG8gNCBhZGRyZXNzZXMuIE9mIGNvdXJzZSwgeW91IGNvdWxkIGJ1aWxkIGluIHNvbWUgbW9yZSBjaGVja2luZyBpZgordHVuaW5nIHdhcyBzdWNjZXNzZnVsIGFuZCBtYXliZSB0cnkgdG8gcmVwZWF0IHRoZSB0dW5pbmcgcHJvY2Vzcy4gRGVwZW5kaW5nIG9uIHRoZQorZXh0ZXJuYWwgaGFyZHdhcmUsIGkuZS4gTE5CIGFuZCBEaVNFcUMgc3dpdGNoLCBhbmQgd2VhdGhlciBjb25kaXRpb25zIHRoaXMgbWF5IGJlCituZWNlc3NhcnkuCis8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ0aGVfZHZyX2RldmljZSI+Cis8dGl0bGU+VGhlIERWUiBkZXZpY2U8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBwcm9ncmFtIGNvZGUgc2hvd3MgaG93IHRvIHVzZSB0aGUgRFZSIGRldmljZSBmb3IgcmVjb3JkaW5nLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorICNpbmNsdWRlICYjeDAwM0M7c3lzL2lvY3RsLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3RkaW8uaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztzdGRpbnQuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztzeXMvdHlwZXMuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztzeXMvc3RhdC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO2ZjbnRsLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7dGltZS5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3VuaXN0ZC5oJiN4MDAzRTsKKworICNpbmNsdWRlICYjeDAwM0M7bGludXgvZHZiL2RteC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO2xpbnV4L2R2Yi92aWRlby5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3N5cy9wb2xsLmgmI3gwMDNFOworICNkZWZpbmUgRFZSICIvZGV2L2R2Yi9hZGFwdGVyMC9kdnIxIgorICNkZWZpbmUgQVVESU8gIi9kZXYvZHZiL2FkYXB0ZXIwL2F1ZGlvMSIKKyAjZGVmaW5lIFZJREVPICIvZGV2L2R2Yi9hZGFwdGVyMC92aWRlbzEiCisKKyAjZGVmaW5lIEJVRkZZICgxODgmI3gyMkM2OzIwKQorICNkZWZpbmUgTUFYX0xFTkdUSCAoMTAyNCYjeDIyQzY7MTAyNCYjeDIyQzY7NSkgLyYjeDIyQzY7IHJlY29yZCA1TUIgJiN4MjJDNjsvCisKKworIC8mI3gyMkM2OyBzd2l0Y2ggdGhlIGRlbXV4ZXMgdG8gcmVjb3JkaW5nLCBhc3N1bWluZyB0aGUgdHJhbnNwb25kZXIgaXMgdHVuZWQgJiN4MjJDNjsvCisKKyAvJiN4MjJDNjsgZGVtdXgxLCBkZW11eDI6IGZpbGUgZGVzY3JpcHRvciBvZiB2aWRlbyBhbmQgYXVkaW8gZmlsdGVycyAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgdnBpZCwgYXBpZDogICAgIFBJRHMgb2YgdmlkZW8gYW5kIGF1ZGlvIGNoYW5uZWxzICAgICAgICAgICAmI3gyMkM2Oy8KKworIGludCBzd2l0Y2hfdG9fcmVjb3JkKGludCBkZW11eDEsIGludCBkZW11eDIsIHVpbnQxNl90IHZwaWQsIHVpbnQxNl90IGFwaWQpCisgeworCSBzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zIHBlc0ZpbHRlclBhcmFtczsKKworCSBpZiAoZGVtdXgxICYjeDAwM0M7IDApeworCQkgaWYgKChkZW11eDE9b3BlbihETVgsIE9fUkRXUnxPX05PTkJMT0NLKSkKKwkJICAgICAmI3gwMDNDOyAwKXsKKwkJCSBwZXJyb3IoIkRFTVVYIERFVklDRTogIik7CisJCQkgcmV0dXJuIC0xOworCQkgfQorCSB9CisKKwkgaWYgKGRlbXV4MiAmI3gwMDNDOyAwKXsKKwkJIGlmICgoZGVtdXgyPW9wZW4oRE1YLCBPX1JEV1J8T19OT05CTE9DSykpCisJCSAgICAgJiN4MDAzQzsgMCl7CisJCQkgcGVycm9yKCJERU1VWCBERVZJQ0U6ICIpOworCQkJIHJldHVybiAtMTsKKwkJIH0KKwkgfQorCisJIHBlc0ZpbHRlclBhcmFtcy5waWQgPSB2cGlkOworCSBwZXNGaWx0ZXJQYXJhbXMuaW5wdXQgPSBETVhfSU5fRlJPTlRFTkQ7CisJIHBlc0ZpbHRlclBhcmFtcy5vdXRwdXQgPSBETVhfT1VUX1RTX1RBUDsKKwkgcGVzRmlsdGVyUGFyYW1zLnBlc190eXBlID0gRE1YX1BFU19WSURFTzsKKwkgcGVzRmlsdGVyUGFyYW1zLmZsYWdzID0gRE1YX0lNTUVESUFURV9TVEFSVDsKKwkgaWYgKGlvY3RsKGRlbXV4MSwgRE1YX1NFVF9QRVNfRklMVEVSLCAmYW1wO3Blc0ZpbHRlclBhcmFtcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIkRFTVVYIERFVklDRSIpOworCQkgcmV0dXJuIC0xOworCSB9CisJIHBlc0ZpbHRlclBhcmFtcy5waWQgPSBhcGlkOworCSBwZXNGaWx0ZXJQYXJhbXMuaW5wdXQgPSBETVhfSU5fRlJPTlRFTkQ7CisJIHBlc0ZpbHRlclBhcmFtcy5vdXRwdXQgPSBETVhfT1VUX1RTX1RBUDsKKwkgcGVzRmlsdGVyUGFyYW1zLnBlc190eXBlID0gRE1YX1BFU19BVURJTzsKKwkgcGVzRmlsdGVyUGFyYW1zLmZsYWdzID0gRE1YX0lNTUVESUFURV9TVEFSVDsKKwkgaWYgKGlvY3RsKGRlbXV4MiwgRE1YX1NFVF9QRVNfRklMVEVSLCAmYW1wO3Blc0ZpbHRlclBhcmFtcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIkRFTVVYIERFVklDRSIpOworCQkgcmV0dXJuIC0xOworCSB9CisJIHJldHVybiAwOworIH0KKworIC8mI3gyMkM2OyBzdGFydCByZWNvcmRpbmcgTUFYX0xFTkdUSCAsIGFzc3VtaW5nIHRoZSB0cmFuc3BvbmRlciBpcyB0dW5lZCAmI3gyMkM2Oy8KKworIC8mI3gyMkM2OyBkZW11eDEsIGRlbXV4MjogZmlsZSBkZXNjcmlwdG9yIG9mIHZpZGVvIGFuZCBhdWRpbyBmaWx0ZXJzICYjeDIyQzY7LworIC8mI3gyMkM2OyB2cGlkLCBhcGlkOiAgICAgUElEcyBvZiB2aWRlbyBhbmQgYXVkaW8gY2hhbm5lbHMgICAgICAgICAgICYjeDIyQzY7LworIGludCByZWNvcmRfZHZyKGludCBkZW11eDEsIGludCBkZW11eDIsIHVpbnQxNl90IHZwaWQsIHVpbnQxNl90IGFwaWQpCisgeworCSBpbnQgaTsKKwkgaW50IGxlbjsKKwkgaW50IHdyaXR0ZW47CisJIHVpbnQ4X3QgYnVmW0JVRkZZXTsKKwkgdWludDY0X3QgbGVuZ3RoOworCSBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsKKwkgaW50IGR2ciwgZHZyX291dDsKKworCSAvJiN4MjJDNjsgb3BlbiBkdnIgZGV2aWNlICYjeDIyQzY7LworCSBpZiAoKGR2ciA9IG9wZW4oRFZSLCBPX1JET05MWXxPX05PTkJMT0NLKSkgJiN4MDAzQzsgMCl7CisJCQkgcGVycm9yKCJEVlIgREVWSUNFIik7CisJCQkgcmV0dXJuIC0xOworCSB9CisKKwkgLyYjeDIyQzY7IHN3aXRjaCB2aWRlbyBhbmQgYXVkaW8gZGVtdXhlcyB0byBkdnIgJiN4MjJDNjsvCisJIHByaW50ZiAoIlN3aXRjaGluZyBkdnIgb25cbiIpOworCSBpID0gc3dpdGNoX3RvX3JlY29yZChkZW11eDEsIGRlbXV4MiwgdnBpZCwgYXBpZCk7CisJIHByaW50ZigiZmluaXNoZWQ6ICIpOworCisJIHByaW50ZigiUmVjb3JkaW5nICUyLjBmIE1CIG9mIHRlc3QgZmlsZSBpbiBUUyBmb3JtYXRcbiIsCisJCU1BWF9MRU5HVEgvKDEwMjQuMCYjeDIyQzY7MTAyNC4wKSk7CisJIGxlbmd0aCA9IDA7CisKKwkgLyYjeDIyQzY7IG9wZW4gb3V0cHV0IGZpbGUgJiN4MjJDNjsvCisJIGlmICgoZHZyX291dCA9IG9wZW4oRFZSX0ZJTEUsT19XUk9OTFl8T19DUkVBVAorCQkJCSAgfE9fVFJVTkMsIFNfSVJVU1J8U19JV1VTUgorCQkJCSAgfFNfSVJHUlB8U19JV0dSUHxTX0lST1RIfAorCQkJCSAgU19JV09USCkpICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJDYW4ndCBvcGVuIGZpbGUgZm9yIGR2ciB0ZXN0Iik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBwZmRbMF0uZmQgPSBkdnI7CisJIHBmZFswXS5ldmVudHMgPSBQT0xMSU47CisKKwkgLyYjeDIyQzY7IHBvbGwgZm9yIGR2ciBkYXRhIGFuZCB3cml0ZSB0byBmaWxlICYjeDIyQzY7LworCSB3aGlsZSAobGVuZ3RoICYjeDAwM0M7IE1BWF9MRU5HVEggKSB7CisJCSBpZiAocG9sbChwZmQsMSwxKSl7CisJCQkgaWYgKHBmZFswXS5yZXZlbnRzICZhbXA7IFBPTExJTil7CisJCQkJIGxlbiA9IHJlYWQoZHZyLCBidWYsIEJVRkZZKTsKKwkJCQkgaWYgKGxlbiAmI3gwMDNDOyAwKXsKKwkJCQkJIHBlcnJvcigicmVjb3JkaW5nIik7CisJCQkJCSByZXR1cm4gLTE7CisJCQkJIH0KKwkJCQkgaWYgKGxlbiAmI3gwMDNFOyAwKXsKKwkJCQkJIHdyaXR0ZW4gPSAwOworCQkJCQkgd2hpbGUgKHdyaXR0ZW4gJiN4MDAzQzsgbGVuKQorCQkJCQkJIHdyaXR0ZW4gKz0KKwkJCQkJCQkgd3JpdGUgKGR2cl9vdXQsCisJCQkJCQkJCWJ1ZiwgbGVuKTsKKwkJCQkJIGxlbmd0aCArPSBsZW47CisJCQkJCSBwcmludGYoIndyaXR0ZW4gJTIuMGYgTUJcciIsCisJCQkJCQlsZW5ndGgvMTAyNC4vMTAyNC4pOworCQkJCSB9CisJCQkgfQorCQkgfQorCSB9CisJIHJldHVybiAwOworIH0KKworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDg5YTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwKQEAgLTAsMCArMSwxNzY2IEBACis8dGl0bGU+RFZCIEZyb250ZW5kIEFQSTwvdGl0bGU+CisKKzxwYXJhPlRoZSBEVkIgZnJvbnRlbmQgZGV2aWNlIGNvbnRyb2xzIHRoZSB0dW5lciBhbmQgRFZCIGRlbW9kdWxhdG9yCitoYXJkd2FyZS4gSXQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggPGVtcGhhc2lzCityb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlcjAvZnJvbnRlbmQwPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZAoraW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMKK3JvbGU9InR0Ij5saW51eC9kdmIvZnJvbnRlbmQuaDwvZW1waGFzaXM+IGluIHlvdXIgYXBwbGljYXRpb24uPC9wYXJhPgorCis8cGFyYT5EVkIgZnJvbnRlbmRzIGNvbWUgaW4gdGhyZWUgdmFyaWV0aWVzOiBEVkItUyAoc2F0ZWxsaXRlKSwgRFZCLUMKKyhjYWJsZSkgYW5kIERWQi1UICh0ZXJyZXN0cmlhbCkuIFRyYW5zbWlzc2lvbiB2aWEgdGhlIGludGVybmV0IChEVkItSVApCitpcyBub3QgeWV0IGhhbmRsZWQgYnkgdGhpcyBBUEkgYnV0IGEgZnV0dXJlIGV4dGVuc2lvbiBpcyBwb3NzaWJsZS4gRm9yCitEVkItUyB0aGUgZnJvbnRlbmQgZGV2aWNlIGFsc28gc3VwcG9ydHMgc2F0ZWxsaXRlIGVxdWlwbWVudCBjb250cm9sCisoU0VDKSB2aWEgRGlTRXFDIGFuZCBWLVNFQyBwcm90b2NvbHMuIFRoZSBEaVNFcUMgKGRpZ2l0YWwgU0VDKQorc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgZnJvbQorPHVsaW5rIHVybD0iaHR0cDovL3d3dy5ldXRlbHNhdC5jb20vc2F0ZWxsaXRlcy80XzVfNS5odG1sIj5FdXRlbHNhdDwvdWxpbms+LjwvcGFyYT4KKworPHBhcmE+Tm90ZSB0aGF0IHRoZSBEVkIgQVBJIG1heSBhbHNvIGJlIHVzZWQgZm9yIE1QRUcgZGVjb2Rlci1vbmx5IFBDSQorY2FyZHMsIGluIHdoaWNoIGNhc2UgdGhlcmUgZXhpc3RzIG5vIGZyb250ZW5kIGRldmljZS48L3BhcmE+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF90eXBlcyI+Cis8dGl0bGU+RnJvbnRlbmQgRGF0YSBUeXBlczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF90eXBlIj4KKzx0aXRsZT5mcm9udGVuZCB0eXBlPC90aXRsZT4KKworPHBhcmE+Rm9yIGhpc3RvcmljYWwgcmVhc29ucyBmcm9udGVuZCB0eXBlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHR5cGUgb2YgbW9kdWxhdGlvbiB1c2VkIGluCit0cmFuc21pc3Npb24uPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXR5cGVkZWYgZW51bSBmZV90eXBlIHsKKwlGRV9RUFNLLCAgIC8mI3gyMkM2OyBEVkItUyAmI3gyMkM2Oy8KKwlGRV9RQU0sICAgIC8mI3gyMkM2OyBEVkItQyAmI3gyMkM2Oy8KKwlGRV9PRkRNICAgIC8mI3gyMkM2OyBEVkItVCAmI3gyMkM2Oy8KKwl9IGZlX3R5cGVfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2NhcHMiPgorPHRpdGxlPmZyb250ZW5kIGNhcGFiaWxpdGllczwvdGl0bGU+CisKKzxwYXJhPkNhcGFiaWxpdGllcyBkZXNjcmliZSB3aGF0IGEgZnJvbnRlbmQgY2FuIGRvLiBTb21lIGNhcGFiaWxpdGllcyBjYW4gb25seSBiZSBzdXBwb3J0ZWQgZm9yCithIHNwZWNpZmljIGZyb250ZW5kIHR5cGUuPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXR5cGVkZWYgZW51bSBmZV9jYXBzIHsKKwlGRV9JU19TVFVQSUQgICAgICAgICAgICAgICAgICA9IDAsCisJRkVfQ0FOX0lOVkVSU0lPTl9BVVRPICAgICAgICAgPSAweDEsCisJRkVfQ0FOX0ZFQ18xXzIgICAgICAgICAgICAgICAgPSAweDIsCisJRkVfQ0FOX0ZFQ18yXzMgICAgICAgICAgICAgICAgPSAweDQsCisJRkVfQ0FOX0ZFQ18zXzQgICAgICAgICAgICAgICAgPSAweDgsCisJRkVfQ0FOX0ZFQ180XzUgICAgICAgICAgICAgICAgPSAweDEwLAorCUZFX0NBTl9GRUNfNV82ICAgICAgICAgICAgICAgID0gMHgyMCwKKwlGRV9DQU5fRkVDXzZfNyAgICAgICAgICAgICAgICA9IDB4NDAsCisJRkVfQ0FOX0ZFQ183XzggICAgICAgICAgICAgICAgPSAweDgwLAorCUZFX0NBTl9GRUNfOF85ICAgICAgICAgICAgICAgID0gMHgxMDAsCisJRkVfQ0FOX0ZFQ19BVVRPICAgICAgICAgICAgICAgPSAweDIwMCwKKwlGRV9DQU5fUVBTSyAgICAgICAgICAgICAgICAgICA9IDB4NDAwLAorCUZFX0NBTl9RQU1fMTYgICAgICAgICAgICAgICAgID0gMHg4MDAsCisJRkVfQ0FOX1FBTV8zMiAgICAgICAgICAgICAgICAgPSAweDEwMDAsCisJRkVfQ0FOX1FBTV82NCAgICAgICAgICAgICAgICAgPSAweDIwMDAsCisJRkVfQ0FOX1FBTV8xMjggICAgICAgICAgICAgICAgPSAweDQwMDAsCisJRkVfQ0FOX1FBTV8yNTYgICAgICAgICAgICAgICAgPSAweDgwMDAsCisJRkVfQ0FOX1FBTV9BVVRPICAgICAgICAgICAgICAgPSAweDEwMDAwLAorCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPID0gMHgyMDAwMCwKKwlGRV9DQU5fQkFORFdJRFRIX0FVVE8gICAgICAgICA9IDB4NDAwMDAsCisJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gICAgPSAweDgwMDAwLAorCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyAgICAgICAgID0gMHgxMDAwMDAsCisJRkVfQ0FOX01VVEVfVFMgICAgICAgICAgICAgICAgPSAweDgwMDAwMDAwLAorCUZFX0NBTl9DTEVBTl9TRVRVUCAgICAgICAgICAgID0gMHg0MDAwMDAwMAorCX0gZmVfY2Fwc190OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2luZm8iPgorPHRpdGxlPmZyb250ZW5kIGluZm9ybWF0aW9uPC90aXRsZT4KKworPHBhcmE+SW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyb250ZW5kIGNhIGJlIHF1ZXJpZWQgd2l0aCBGRV9HRVRfSU5GTy48L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8geworCWNoYXIgICAgICAgbmFtZVsxMjhdOworCWZlX3R5cGVfdCAgdHlwZTsKKwl1aW50MzJfdCAgIGZyZXF1ZW5jeV9taW47CisJdWludDMyX3QgICBmcmVxdWVuY3lfbWF4OworCXVpbnQzMl90ICAgZnJlcXVlbmN5X3N0ZXBzaXplOworCXVpbnQzMl90ICAgZnJlcXVlbmN5X3RvbGVyYW5jZTsKKwl1aW50MzJfdCAgIHN5bWJvbF9yYXRlX21pbjsKKwl1aW50MzJfdCAgIHN5bWJvbF9yYXRlX21heDsKKwl1aW50MzJfdCAgIHN5bWJvbF9yYXRlX3RvbGVyYW5jZTsgICAgIC8mI3gyMkM2OyBwcG0gJiN4MjJDNjsvCisJdWludDMyX3QgICBub3RpZmllcl9kZWxheTsgICAgICAgICAgICAvJiN4MjJDNjsgbXMgJiN4MjJDNjsvCisJZmVfY2Fwc190ICBjYXBzOworCX07Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZGlzZXFjIj4KKzx0aXRsZT5kaXNlcWMgbWFzdGVyIGNvbW1hbmQ8L3RpdGxlPgorCis8cGFyYT5BIG1lc3NhZ2Ugc2VudCBmcm9tIHRoZSBmcm9udGVuZCB0byBEaVNFcUMgY2FwYWJsZSBlcXVpcG1lbnQuPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgeworCXVpbnQ4X3QgbXNnIFs2XTsgLyYjeDIyQzY7ICB7IGZyYW1pbmcsIGFkZHJlc3MsIGNvbW1hbmQsIGRhdGFbM10gfSAmI3gyMkM2Oy8KKwl1aW50OF90IG1zZ19sZW47IC8mI3gyMkM2OyAgdmFsaWQgdmFsdWVzIGFyZSAzLi4uNiAgJiN4MjJDNjsvCisJfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+Cis8c2VjdGlvbiByb2xlPSJzdWJzZWN0aW9uIj4KKzx0aXRsZT5kaXNlcWMgc2xhdmUgcmVwbHk8L3RpdGxlPgorCis8cGFyYT5BIHJlcGx5IHRvIHRoZSBmcm9udGVuZCBmcm9tIERpU0VxQyAyLjAgY2FwYWJsZSBlcXVpcG1lbnQuPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXN0cnVjdCBkdmJfZGlzZXFjX3NsYXZlX3JlcGx5IHsKKwl1aW50OF90IG1zZyBbNF07IC8mI3gyMkM2OyAgeyBmcmFtaW5nLCBkYXRhIFszXSB9ICYjeDIyQzY7LworCXVpbnQ4X3QgbXNnX2xlbjsgLyYjeDIyQzY7ICB2YWxpZCB2YWx1ZXMgYXJlIDAuLi40LCAwIG1lYW5zIG5vIG1zZyAgJiN4MjJDNjsvCisJaW50ICAgICB0aW1lb3V0OyAvJiN4MjJDNjsgIHJldHVybiBmcm9tIGlvY3RsIGFmdGVyIHRpbWVvdXQgbXMgd2l0aCAmI3gyMkM2Oy8KKwl9OyAgICAgICAgICAgICAgICAgICAgICAgLyYjeDIyQzY7ICBlcnJvcmNvZGUgd2hlbiBubyBtZXNzYWdlIHdhcyByZWNlaXZlZCAgJiN4MjJDNjsvCis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZGlzZXFjX3NsYXZlX3JlcGx5Ij4KKzx0aXRsZT5kaXNlcWMgc2xhdmUgcmVwbHk8L3RpdGxlPgorPHBhcmE+VGhlIHZvbHRhZ2UgaXMgdXN1YWxseSB1c2VkIHdpdGggbm9uLURpU0VxQyBjYXBhYmxlIExOQnMgdG8gc3dpdGNoIHRoZSBwb2xhcnphdGlvbgorKGhvcml6b250YWwvdmVydGljYWwpLiBXaGVuIHVzaW5nIERpU0VxQyBlcHVpcG1lbnQgdGhpcyB2b2x0YWdlIGhhcyB0byBiZSBzd2l0Y2hlZAorY29uc2lzdGVudGx5IHRvIHRoZSBEaVNFcUMgY29tbWFuZHMgYXMgZGVzY3JpYmVkIGluIHRoZSBEaVNFcUMgc3BlYy48L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisJdHlwZWRlZiBlbnVtIGZlX3NlY192b2x0YWdlIHsKKwlTRUNfVk9MVEFHRV8xMywKKwlTRUNfVk9MVEFHRV8xOAorCX0gZmVfc2VjX3ZvbHRhZ2VfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9zZWNfdG9uZSI+Cis8dGl0bGU+U0VDIGNvbnRpbnVvdXMgdG9uZTwvdGl0bGU+CisKKzxwYXJhPlRoZSBjb250aW5vdXMgMjJLSHogdG9uZSBpcyB1c3VhbGx5IHVzZWQgd2l0aCBub24tRGlTRXFDIGNhcGFibGUgTE5CcyB0byBzd2l0Y2ggdGhlCitoaWdoL2xvdyBiYW5kIG9mIGEgZHVhbC1iYW5kIExOQi4gV2hlbiB1c2luZyBEaVNFcUMgZXB1aXBtZW50IHRoaXMgdm9sdGFnZSBoYXMgdG8KK2JlIHN3aXRjaGVkIGNvbnNpc3RlbnRseSB0byB0aGUgRGlTRXFDIGNvbW1hbmRzIGFzIGRlc2NyaWJlZCBpbiB0aGUgRGlTRXFDCitzcGVjLjwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKwl0eXBlZGVmIGVudW0gZmVfc2VjX3RvbmVfbW9kZSB7CisJU0VDX1RPTkVfT04sCisJU0VDX1RPTkVfT0ZGCisJfSBmZV9zZWNfdG9uZV9tb2RlX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfc2VjX2J1cnN0Ij4KKzx0aXRsZT5TRUMgdG9uZSBidXJzdDwvdGl0bGU+CisKKzxwYXJhPlRoZSAyMktIeiB0b25lIGJ1cnN0IGlzIHVzdWFsbHkgdXNlZCB3aXRoIG5vbi1EaVNFcUMgY2FwYWJsZSBzd2l0Y2hlcyB0byBzZWxlY3QKK2JldHdlZW4gdHdvIGNvbm5lY3RlZCBMTkJzL3NhdGVsbGl0ZXMuIFdoZW4gdXNpbmcgRGlTRXFDIGVwdWlwbWVudCB0aGlzIHZvbHRhZ2UgaGFzIHRvCitiZSBzd2l0Y2hlZCBjb25zaXN0ZW50bHkgdG8gdGhlIERpU0VxQyBjb21tYW5kcyBhcyBkZXNjcmliZWQgaW4gdGhlIERpU0VxQworc3BlYy48L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisJdHlwZWRlZiBlbnVtIGZlX3NlY19taW5pX2NtZCB7CisJU0VDX01JTklfQSwKKwlTRUNfTUlOSV9CCisJfSBmZV9zZWNfbWluaV9jbWRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzxwYXJhPjwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX3N0YXR1cyI+Cis8dGl0bGU+ZnJvbnRlbmQgc3RhdHVzPC90aXRsZT4KKzxwYXJhPlNldmVyYWwgZnVuY3Rpb25zIG9mIHRoZSBmcm9udGVuZCBkZXZpY2UgdXNlIHRoZSBmZV9zdGF0dXMgZGF0YSB0eXBlIGRlZmluZWQKK2J5PC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSBmZV9zdGF0dXMgeworCSBGRV9IQVNfU0lHTkFMICAgICA9IDB4MDEsICAgLyYjeDIyQzY7ICBmb3VuZCBzb21ldGhpbmcgYWJvdmUgdGhlIG5vaXNlIGxldmVsICYjeDIyQzY7LworCSBGRV9IQVNfQ0FSUklFUiAgICA9IDB4MDIsICAgLyYjeDIyQzY7ICBmb3VuZCBhIERWQiBzaWduYWwgICYjeDIyQzY7LworCSBGRV9IQVNfVklURVJCSSAgICA9IDB4MDQsICAgLyYjeDIyQzY7ICBGRUMgaXMgc3RhYmxlICAmI3gyMkM2Oy8KKwkgRkVfSEFTX1NZTkMgICAgICAgPSAweDA4LCAgIC8mI3gyMkM2OyAgZm91bmQgc3luYyBieXRlcyAgJiN4MjJDNjsvCisJIEZFX0hBU19MT0NLICAgICAgID0gMHgxMCwgICAvJiN4MjJDNjsgIGV2ZXJ5dGhpbmcncyB3b3JraW5nLi4uICYjeDIyQzY7LworCSBGRV9USU1FRE9VVCAgICAgICA9IDB4MjAsICAgLyYjeDIyQzY7ICBubyBsb2NrIHdpdGhpbiB0aGUgbGFzdCB+MiBzZWNvbmRzICYjeDIyQzY7LworCSBGRV9SRUlOSVQgICAgICAgICA9IDB4NDAgICAgLyYjeDIyQzY7ICBmcm9udGVuZCB3YXMgcmVpbml0aWFsaXplZCwgICYjeDIyQzY7LworIH0gZmVfc3RhdHVzX3Q7ICAgICAgICAgICAgICAgICAgICAgIC8mI3gyMkM2OyAgYXBwbGljYXRpb24gaXMgcmVjb21tbmVkIHRvIHJlc2V0ICYjeDIyQzY7LworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPnRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXRlIGFuZC9vciBzdGF0ZSBjaGFuZ2VzIG9mIHRoZSBmcm9udGVuZCBoYXJkd2FyZS4KKzwvcGFyYT4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcGFyYW1zIj4KKzx0aXRsZT5mcm9udGVuZCBwYXJhbWV0ZXJzPC90aXRsZT4KKzxwYXJhPlRoZSBraW5kIG9mIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBmcm9udGVuZCBkZXZpY2UgZm9yIHR1bmluZyBkZXBlbmQgb24KK3RoZSBraW5kIG9mIGhhcmR3YXJlIHlvdSBhcmUgdXNpbmcuIEFsbCBraW5kcyBvZiBwYXJhbWV0ZXJzIGFyZSBjb21iaW5lZCBhcyBhbgordW5pb24gaW4gdGhlIEZyb250ZW5kUGFyYW1ldGVycyBzdHJ1Y3R1cmU6PC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyB7CisJIHVpbnQzMl90IGZyZXF1ZW5jeTsgICAgICAgLyYjeDIyQzY7IChhYnNvbHV0ZSkgZnJlcXVlbmN5IGluIEh6IGZvciBRQU0vT0ZETSAmI3gyMkM2Oy8KKwkJCQkgICAvJiN4MjJDNjsgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpbiBrSHogZm9yIFFQU0sgJiN4MjJDNjsvCisJIGZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbjsKKwkgdW5pb24geworCQkgc3RydWN0IGR2Yl9xcHNrX3BhcmFtZXRlcnMgcXBzazsKKwkJIHN0cnVjdCBkdmJfcWFtX3BhcmFtZXRlcnMgIHFhbTsKKwkJIHN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzIG9mZG07CisJIH0gdTsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPkZvciBzYXRlbGxpdGUgUVBTSyBmcm9udGVuZHMgeW91IGhhdmUgdG8gdXNlIHRoZSA8Y29uc3RhbnQ+UVBTS1BhcmFtZXRlcnM8L2NvbnN0YW50PiBtZW1iZXIgZGVmaW5lZCBieTwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgZHZiX3Fwc2tfcGFyYW1ldGVycyB7CisJIHVpbnQzMl90ICAgICAgICBzeW1ib2xfcmF0ZTsgIC8mI3gyMkM2OyBzeW1ib2wgcmF0ZSBpbiBTeW1ib2xzIHBlciBzZWNvbmQgJiN4MjJDNjsvCisJIGZlX2NvZGVfcmF0ZV90ICBmZWNfaW5uZXI7ICAgIC8mI3gyMkM2OyBmb3J3YXJkIGVycm9yIGNvcnJlY3Rpb24gKHNlZSBhYm92ZSkgJiN4MjJDNjsvCisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5mb3IgY2FibGUgUUFNIGZyb250ZW5kIHlvdSB1c2UgdGhlIDxjb25zdGFudD5RQU1QYXJhbWV0ZXJzPC9jb25zdGFudD4gc3RydWN0dXJlPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkdmJfcWFtX3BhcmFtZXRlcnMgeworCSB1aW50MzJfdCAgICAgICAgIHN5bWJvbF9yYXRlOyAvJiN4MjJDNjsgc3ltYm9sIHJhdGUgaW4gU3ltYm9scyBwZXIgc2Vjb25kICYjeDIyQzY7LworCSBmZV9jb2RlX3JhdGVfdCAgIGZlY19pbm5lcjsgICAvJiN4MjJDNjsgZm9yd2FyZCBlcnJvciBjb3JyZWN0aW9uIChzZWUgYWJvdmUpICYjeDIyQzY7LworCSBmZV9tb2R1bGF0aW9uX3QgIG1vZHVsYXRpb247ICAvJiN4MjJDNjsgbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICYjeDIyQzY7LworIH07Cis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+RFZCLVQgZnJvbnRlbmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxjb25zdGFudD5PRkRNUGFyYW10ZXJzPC9jb25zdGFudD4gc3RydWN0dXJlCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgeworCSBmZV9iYW5kd2lkdGhfdCAgICAgIGJhbmR3aWR0aDsKKwkgZmVfY29kZV9yYXRlX3QgICAgICBjb2RlX3JhdGVfSFA7ICAvJiN4MjJDNjsgaGlnaCBwcmlvcml0eSBzdHJlYW0gY29kZSByYXRlICYjeDIyQzY7LworCSBmZV9jb2RlX3JhdGVfdCAgICAgIGNvZGVfcmF0ZV9MUDsgIC8mI3gyMkM2OyBsb3cgcHJpb3JpdHkgc3RyZWFtIGNvZGUgcmF0ZSAmI3gyMkM2Oy8KKwkgZmVfbW9kdWxhdGlvbl90ICAgICBjb25zdGVsbGF0aW9uOyAvJiN4MjJDNjsgbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICYjeDIyQzY7LworCSBmZV90cmFuc21pdF9tb2RlX3QgIHRyYW5zbWlzc2lvbl9tb2RlOworCSBmZV9ndWFyZF9pbnRlcnZhbF90IGd1YXJkX2ludGVydmFsOworCSBmZV9oaWVyYXJjaHlfdCAgICAgIGhpZXJhcmNoeV9pbmZvcm1hdGlvbjsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPkluIHRoZSBjYXNlIG9mIFFQU0sgZnJvbnRlbmRzIHRoZSA8Y29uc3RhbnQ+RnJlcXVlbmN5PC9jb25zdGFudD4gZmllbGQgc3BlY2lmaWVzIHRoZSBpbnRlcm1lZGlhdGUKK2ZyZXF1ZW5jeSwgaS5lLiB0aGUgb2Zmc2V0IHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGFkZGVkIHRvIHRoZSBsb2NhbCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAoTE9GKSBvZgordGhlIExOQi4gVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaGFzIHRvIGJlIHNwZWNpZmllZCBpbiB1bml0cyBvZiBrSHouIEZvciBRQU0gYW5kCitPRkRNIGZyb250ZW5kcyB0aGUgRnJlcXVlbmN5IHNwZWNpZmllcyB0aGUgYWJzb2x1dGUgZnJlcXVlbmN5IGFuZCBpcyBnaXZlbiBpbgorSHouCis8L3BhcmE+Cis8cGFyYT5UaGUgSW52ZXJzaW9uIGZpZWxkIGNhbiB0YWtlIG9uZSBvZiB0aGVzZSB2YWx1ZXM6Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIGZlX3NwZWN0cmFsX2ludmVyc2lvbiB7CisJIElOVkVSU0lPTl9PRkYsCisJIElOVkVSU0lPTl9PTiwKKwkgSU5WRVJTSU9OX0FVVE8KKyB9IGZlX3NwZWN0cmFsX2ludmVyc2lvbl90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPkl0IGluZGljYXRlcyBpZiBzcGVjdHJhbCBpbnZlcnNpb24gc2hvdWxkIGJlIHByZXN1bWVkIG9yIG5vdC4gSW4gdGhlIGF1dG9tYXRpYyBzZXR0aW5nCisoPGNvbnN0YW50PklOVkVSU0lPTl9BVVRPPC9jb25zdGFudD4pIHRoZSBoYXJkd2FyZSB3aWxsIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IHNldHRpbmcgYnkKK2l0c2VsZi4KKzwvcGFyYT4KKzxwYXJhPlRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSA8Y29uc3RhbnQ+RkVDX2lubmVyPC9jb25zdGFudD4gZmllbGQgYXJlCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIGZlX2NvZGVfcmF0ZSB7CisJIEZFQ19OT05FID0gMCwKKwkgRkVDXzFfMiwKKwkgRkVDXzJfMywKKwkgRkVDXzNfNCwKKwkgRkVDXzRfNSwKKwkgRkVDXzVfNiwKKwkgRkVDXzZfNywKKwkgRkVDXzdfOCwKKwkgRkVDXzhfOSwKKwkgRkVDX0FVVE8KKyB9IGZlX2NvZGVfcmF0ZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPndoaWNoIGNvcnJlc3BvbmQgdG8gZXJyb3IgY29ycmVjdGlvbiByYXRlcyBvZiAxLzIsIDIvMywgZXRjLiwgbm8gZXJyb3IgY29ycmVjdGlvbiBvciBhdXRvCitkZXRlY3Rpb24uCis8L3BhcmE+Cis8cGFyYT5Gb3IgY2FibGUgYW5kIHRlcnJlc3RyaWFsIGZyb250ZW5kcyAoUUFNIGFuZCBPRkRNKSBvbmUgYWxzbyBoYXMgdG8gc3BlY2lmeSB0aGUgcXVhZHJhdHVyZQorbW9kdWxhdGlvbiBtb2RlIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0gZmVfbW9kdWxhdGlvbiB7CisgUVBTSywKKwkgUUFNXzE2LAorCSBRQU1fMzIsCisJIFFBTV82NCwKKwkgUUFNXzEyOCwKKwkgUUFNXzI1NiwKKwkgUUFNX0FVVE8KKyB9IGZlX21vZHVsYXRpb25fdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5GaW5hbGx5LCB0aGVyZSBhcmUgc2V2ZXJhbCBtb3JlIHBhcmFtZXRlcnMgZm9yIE9GRE06Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIGZlX3RyYW5zbWl0X21vZGUgeworCSBUUkFOU01JU1NJT05fTU9ERV8ySywKKwkgVFJBTlNNSVNTSU9OX01PREVfOEssCisJIFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8KKyB9IGZlX3RyYW5zbWl0X21vZGVfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSBmZV9iYW5kd2lkdGggeworCSBCQU5EV0lEVEhfOF9NSFosCisJIEJBTkRXSURUSF83X01IWiwKKwkgQkFORFdJRFRIXzZfTUhaLAorCSBCQU5EV0lEVEhfQVVUTworIH0gZmVfYmFuZHdpZHRoX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0gZmVfZ3VhcmRfaW50ZXJ2YWwgeworCSBHVUFSRF9JTlRFUlZBTF8xXzMyLAorCSBHVUFSRF9JTlRFUlZBTF8xXzE2LAorCSBHVUFSRF9JTlRFUlZBTF8xXzgsCisJIEdVQVJEX0lOVEVSVkFMXzFfNCwKKwkgR1VBUkRfSU5URVJWQUxfQVVUTworIH0gZmVfZ3VhcmRfaW50ZXJ2YWxfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSBmZV9oaWVyYXJjaHkgeworCSBISUVSQVJDSFlfTk9ORSwKKwkgSElFUkFSQ0hZXzEsCisJIEhJRVJBUkNIWV8yLAorCSBISUVSQVJDSFlfNCwKKwkgSElFUkFSQ0hZX0FVVE8KKyB9IGZlX2hpZXJhcmNoeV90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZXZlbnRzIj4KKzx0aXRsZT5mcm9udGVuZCBldmVudHM8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX2V2ZW50IHsKKwkgZmVfc3RhdHVzX3Qgc3RhdHVzOworCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKyA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2ZjYWxscyI+Cis8dGl0bGU+RnJvbnRlbmQgRnVuY3Rpb24gQ2FsbHM8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZl9vcGVuIj4KKzx0aXRsZT5vcGVuKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT048L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PgorPGVudHJ5IGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgb3BlbnMgYSBuYW1lZCBmcm9udGVuZCBkZXZpY2UgKC9kZXYvZHZiL2FkYXB0ZXIwL2Zyb250ZW5kMCkKKyBmb3Igc3Vic2VxdWVudCB1c2UuIFVzdWFsbHkgdGhlIGZpcnN0IHRoaW5nIHRvIGRvIGFmdGVyIGEgc3VjY2Vzc2Z1bCBvcGVuIGlzIHRvCisgZmluZCBvdXQgdGhlIGZyb250ZW5kIHR5cGUgd2l0aCBGRV9HRVRfSU5GTy48L3BhcmE+Cis8cGFyYT5UaGUgZGV2aWNlIGNhbiBiZSBvcGVuZWQgaW4gcmVhZC1vbmx5IG1vZGUsIHdoaWNoIG9ubHkgYWxsb3dzIG1vbml0b3Jpbmcgb2YKKyBkZXZpY2Ugc3RhdHVzIGFuZCBzdGF0aXN0aWNzLCBvciByZWFkL3dyaXRlIG1vZGUsIHdoaWNoIGFsbG93cyBhbnkga2luZCBvZiB1c2UKKyAoZS5nLiBwZXJmb3JtaW5nIHR1bmluZyBvcGVyYXRpb25zLikKKzwvcGFyYT4KKzxwYXJhPkluIGEgc3lzdGVtIHdpdGggbXVsdGlwbGUgZnJvbnQtZW5kcywgaXQgaXMgdXN1YWxseSB0aGUgY2FzZSB0aGF0IG11bHRpcGxlIGRldmljZXMKKyBjYW5ub3QgYmUgb3BlbiBpbiByZWFkL3dyaXRlIG1vZGUgc2ltdWx0YW5lb3VzbHkuIEFzIGxvbmcgYXMgYSBmcm9udC1lbmQKKyBkZXZpY2UgaXMgb3BlbmVkIGluIHJlYWQvd3JpdGUgbW9kZSwgb3RoZXIgb3BlbigpIGNhbGxzIGluIHJlYWQvd3JpdGUgbW9kZSB3aWxsCisgZWl0aGVyIGZhaWwgb3IgYmxvY2ssIGRlcGVuZGluZyBvbiB3aGV0aGVyIG5vbi1ibG9ja2luZyBvciBibG9ja2luZyBtb2RlIHdhcworIHNwZWNpZmllZC4gQSBmcm9udC1lbmQgZGV2aWNlIG9wZW5lZCBpbiBibG9ja2luZyBtb2RlIGNhbiBsYXRlciBiZSBwdXQgaW50bworIG5vbi1ibG9ja2luZyBtb2RlIChhbmQgdmljZSB2ZXJzYSkgdXNpbmcgdGhlIEZfU0VURkwgY29tbWFuZCBvZiB0aGUgZmNudGwKKyBzeXN0ZW0gY2FsbC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN5c3RlbSBjYWxsLCBkb2N1bWVudGVkIGluIHRoZSBMaW51eCBtYW51YWwKKyBwYWdlIGZvciBmY250bC4gV2hlbiBhbiBvcGVuKCkgY2FsbCBoYXMgc3VjY2VlZGVkLCB0aGUgZGV2aWNlIHdpbGwgYmUgcmVhZHkKKyBmb3IgdXNlIGluIHRoZSBzcGVjaWZpZWQgbW9kZS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgaGFyZHdhcmUgaXMKKyBwb3dlcmVkIHVwLCBhbmQgdGhhdCBvdGhlciBmcm9udC1lbmRzIG1heSBoYXZlIGJlZW4gcG93ZXJlZCBkb3duIHRvIG1ha2UKKyB0aGF0IHBvc3NpYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlNZTk9QU0lTPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgb3Blbihjb25zdCBjaGFyICYjeDIyQzY7ZGV2aWNlTmFtZSwgaW50IGZsYWdzKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5jb25zdCBjaGFyCisgKmRldmljZU5hbWU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5hbWUgb2Ygc3BlY2lmaWMgdmlkZW8gZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmxhZ3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgYml0LXdpc2UgT1Igb2YgdGhlIGZvbGxvd2luZyBmbGFnczo8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JET05MWSByZWFkLW9ubHkgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19SRFdSIHJlYWQvd3JpdGUgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19OT05CTE9DSyBvcGVuIGluIG5vbi1ibG9ja2luZyBtb2RlPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+KGJsb2NraW5nIG1vZGUgaXMgdGhlIGRlZmF1bHQpPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9mX2Nsb3NlIj4KKzx0aXRsZT5jbG9zZSgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgY2xvc2VzIGEgcHJldmlvdXNseSBvcGVuZWQgZnJvbnQtZW5kIGRldmljZS4gQWZ0ZXIgY2xvc2luZworIGEgZnJvbnQtZW5kIGRldmljZSwgaXRzIGNvcnJlc3BvbmRpbmcgaGFyZHdhcmUgbWlnaHQgYmUgcG93ZXJlZCBkb3duCisgYXV0b21hdGljYWxseS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGludCBmZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcmVhZF9zdGF0dXMiPgorPHRpdGxlPkZFX1JFQURfU1RBVFVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZnJvbnQtZW5kLiBUaGlzIGNhbGwgb25seQorIHJlcXVpcmVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBGRV9SRUFEX1NUQVRVUywKKyBmZV9zdGF0dXNfdCAmI3gyMkM2O3N0YXR1cyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKworPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1JFQURfU1RBVFVTIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdCBmZV9zdGF0dXNfdAorICpzdGF0dXM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGZyb250LWVuZCBzdGF0dXMgd29yZCBpcworIHRvIGJlIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdGF0dXMgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcmVhZF9iZXIiPgorPHRpdGxlPkZFX1JFQURfQkVSPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIHRoZSBiaXQgZXJyb3IgcmF0ZSBmb3IgdGhlIHNpZ25hbCBjdXJyZW50bHkKKyByZWNlaXZlZC9kZW1vZHVsYXRlZCBieSB0aGUgZnJvbnQtZW5kLiBGb3IgdGhpcyBjb21tYW5kLCByZWFkLW9ubHkgYWNjZXNzIHRvCisgdGhlIGRldmljZSBpcyBzdWZmaWNpZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX1JFQURfQkVSLAorIHVpbnQzMl90ICYjeDIyQzY7YmVyKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1JFQURfQkVSIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnVpbnQzMl90ICpiZXI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBiaXQgZXJyb3IgcmF0ZSBpcyBzdG9yZWQgaW50byAqYmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJlciBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TSUdOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZXJlIGlzIG5vIHNpZ25hbCwgdGh1cyBubyBtZWFuaW5nZnVsIGJpdCBlcnJvciByYXRlLiBBbHNvCisgcmV0dXJuZWQgaWYgdGhlIGZyb250LWVuZCBpcyBub3QgdHVybmVkIG9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9yZWFkX3NuciI+Cis8dGl0bGU+RkVfUkVBRF9TTlI8L3RpdGxlPgorCis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyB0aGUgc2lnbmFsLXRvLW5vaXNlIHJhdGlvIGZvciB0aGUgc2lnbmFsIGN1cnJlbnRseSByZWNlaXZlZAorIGJ5IHRoZSBmcm9udC1lbmQuIEZvciB0aGlzIGNvbW1hbmQsIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBzdWZmaWNpZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX1JFQURfU05SLCBpbnQxNl90CisgJiN4MjJDNjtzbnIpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfUkVBRF9TTlIgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50MTZfdCAqc25yPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgc2lnbmFsLXRvLW5vaXNlIHJhdGlvIGlzIHN0b3JlZCBpbnRvICpzbnIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zbnIgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PU0lHTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGVyZSBpcyBubyBzaWduYWwsIHRodXMgbm8gbWVhbmluZ2Z1bCBzaWduYWwgc3RyZW5ndGgKKyB2YWx1ZS4gQWxzbyByZXR1cm5lZCBpZiBmcm9udC1lbmQgaXMgbm90IHR1cm5lZCBvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PU1lTPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcmVhZF9zaWduYWxfc3RyZW5ndGgiPgorPHRpdGxlPkZFX1JFQURfU0lHTkFMX1NUUkVOR1RIPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIHRoZSBzaWduYWwgc3RyZW5ndGggdmFsdWUgZm9yIHRoZSBzaWduYWwgY3VycmVudGx5IHJlY2VpdmVkCisgYnkgdGhlIGZyb250LWVuZC4gRm9yIHRoaXMgY29tbWFuZCwgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN1ZmZpY2llbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9CisgRkVfUkVBRF9TSUdOQUxfU1RSRU5HVEgsIGludDE2X3QgJiN4MjJDNjtzdHJlbmd0aCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1JFQURfU0lHTkFMX1NUUkVOR1RIIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50MTZfdCAqc3RyZW5ndGg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzaWduYWwgc3RyZW5ndGggdmFsdWUgaXMgc3RvcmVkIGludG8gKnN0cmVuZ3RoLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0YXR1cyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TSUdOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZXJlIGlzIG5vIHNpZ25hbCwgdGh1cyBubyBtZWFuaW5nZnVsIHNpZ25hbCBzdHJlbmd0aAorIHZhbHVlLiBBbHNvIHJldHVybmVkIGlmIGZyb250LWVuZCBpcyBub3QgdHVybmVkIG9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9yZWFkX3ViIj4KKzx0aXRsZT5GRV9SRUFEX1VOQ09SUkVDVEVEX0JMT0NLUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29ycmVjdGVkIGJsb2NrcyBkZXRlY3RlZCBieSB0aGUgZGV2aWNlCisgZHJpdmVyIGR1cmluZyBpdHMgbGlmZXRpbWUuIEZvciBtZWFuaW5nZnVsIG1lYXN1cmVtZW50cywgdGhlIGluY3JlbWVudCBpbiBibG9jaworIGNvdW50IGR1cmluZyBhIHNwZWNpZmljIHRpbWUgaW50ZXJ2YWwgc2hvdWxkIGJlIGNhbGN1bGF0ZWQuIEZvciB0aGlzIGNvbW1hbmQsCisgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN1ZmZpY2llbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vdGUgdGhhdCB0aGUgY291bnRlciB3aWxsIHdyYXAgdG8gemVybyBhZnRlciBpdHMgbWF4aW11bSBjb3VudCBoYXMgYmVlbgorIHJlYWNoZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9CisgRkVfUkVBRF9VTkNPUlJFQ1RFRF9CTE9DS1MsIHVpbnQzMl90ICYjeDIyQzY7dWJsb2Nrcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9SRUFEX1VOQ09SUkVDVEVEX0JMT0NLUyBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnVpbnQzMl90ICp1YmxvY2tzPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgdG90YWwgbnVtYmVyIG9mIHVuY29ycmVjdGVkIGJsb2NrcyBzZWVuIGJ5IHRoZSBkcml2ZXIKKyBzbyBmYXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dWJsb2NrcyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9zZXRfZmUiPgorPHRpdGxlPkZFX1NFVF9GUk9OVEVORDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgc3RhcnRzIGEgdHVuaW5nIG9wZXJhdGlvbiB1c2luZyBzcGVjaWZpZWQgcGFyYW1ldGVycy4gVGhlIHJlc3VsdAorIG9mIHRoaXMgY2FsbCB3aWxsIGJlIHN1Y2Nlc3NmdWwgaWYgdGhlIHBhcmFtZXRlcnMgd2VyZSB2YWxpZCBhbmQgdGhlIHR1bmluZyBjb3VsZAorIGJlIGluaXRpYXRlZC4gVGhlIHJlc3VsdCBvZiB0aGUgdHVuaW5nIG9wZXJhdGlvbiBpbiBpdHNlbGYsIGhvd2V2ZXIsIHdpbGwgYXJyaXZlCisgYXN5bmNocm9ub3VzbHkgYXMgYW4gZXZlbnQgKHNlZSBkb2N1bWVudGF0aW9uIGZvciBGRV9HRVRfRVZFTlQgYW5kCisgRnJvbnRlbmRFdmVudC4pIElmIGEgbmV3IEZFX1NFVF9GUk9OVEVORCBvcGVyYXRpb24gaXMgaW5pdGlhdGVkIGJlZm9yZQorIHRoZSBwcmV2aW91cyBvbmUgd2FzIGNvbXBsZXRlZCwgdGhlIHByZXZpb3VzIG9wZXJhdGlvbiB3aWxsIGJlIGFib3J0ZWQgaW4gZmF2b3IKKyBvZiB0aGUgbmV3IG9uZS4gVGhpcyBjb21tYW5kIHJlcXVpcmVzIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBGRV9TRVRfRlJPTlRFTkQsCisgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICYjeDIyQzY7cCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9TRVRfRlJPTlRFTkQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RydWN0CisgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMKKyAqcDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRzIHRvIHBhcmFtZXRlcnMgZm9yIHR1bmluZyBvcGVyYXRpb24uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+cCBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk1heGltdW0gc3VwcG9ydGVkIHN5bWJvbCByYXRlIHJlYWNoZWQuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZ2V0X2ZlIj4KKzx0aXRsZT5GRV9HRVRfRlJPTlRFTkQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHF1ZXJpZXMgdGhlIGN1cnJlbnRseSBlZmZlY3RpdmUgZnJvbnRlbmQgcGFyYW1ldGVycy4gRm9yIHRoaXMKKyBjb21tYW5kLCByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgc3VmZmljaWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX0dFVF9GUk9OVEVORCwKKyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgJiN4MjJDNjtwKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfU0VUX0ZST05URU5EIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdAorIGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzCisgKnA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50cyB0byBwYXJhbWV0ZXJzIGZvciB0dW5pbmcgb3BlcmF0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPkVSUk9SUworPC9wYXJhPgorCis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5wIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TWF4aW11bSBzdXBwb3J0ZWQgc3ltYm9sIHJhdGUgcmVhY2hlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9nZXRfZXZlbnQiPgorPHRpdGxlPkZFX0dFVF9FVkVOVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyBhIGZyb250ZW5kIGV2ZW50IGlmIGF2YWlsYWJsZS4gSWYgYW4gZXZlbnQgaXMgbm90CisgYXZhaWxhYmxlLCB0aGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgaW4gYmxvY2tpbmcgb3IKKyBub24tYmxvY2tpbmcgbW9kZS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgY2FsbCBmYWlscyBpbW1lZGlhdGVseSB3aXRoIGVycm5vCisgc2V0IHRvIEVXT1VMREJMT0NLLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBjYWxsIGJsb2NrcyB1bnRpbCBhbiBldmVudAorIGJlY29tZXMgYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgc3RhbmRhcmQgTGludXggcG9sbCgpIGFuZC9vciBzZWxlY3QoKSBzeXN0ZW0gY2FsbHMgY2FuIGJlIHVzZWQgd2l0aCB0aGUKKyBkZXZpY2UgZmlsZSBkZXNjcmlwdG9yIHRvIHdhdGNoIGZvciBuZXcgZXZlbnRzLiBGb3Igc2VsZWN0KCksIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGV4Y2VwdGZkcyBhcmd1bWVudCwgYW5kIGZvciBwb2xsKCksIFBPTExQUkkgc2hvdWxkCisgYmUgc3BlY2lmaWVkIGFzIHRoZSB3YWtlLXVwIGNvbmRpdGlvbi4gU2luY2UgdGhlIGV2ZW50IHF1ZXVlIGFsbG9jYXRlZCBpcworIHJhdGhlciBzbWFsbCAocm9vbSBmb3IgOCBldmVudHMpLCB0aGUgcXVldWUgbXVzdCBiZSBzZXJ2aWNlZCByZWd1bGFybHkgdG8gYXZvaWQKKyBvdmVyZmxvdy4gSWYgYW4gb3ZlcmZsb3cgaGFwcGVucywgdGhlIG9sZGVzdCBldmVudCBpcyBkaXNjYXJkZWQgZnJvbSB0aGUgcXVldWUsCisgYW5kIGFuIGVycm9yIChFT1ZFUkZMT1cpIG9jY3VycyB0aGUgbmV4dCB0aW1lIHRoZSBxdWV1ZSBpcyByZWFkLiBBZnRlcgorIHJlcG9ydGluZyB0aGUgZXJyb3IgY29uZGl0aW9uIGluIHRoaXMgZmFzaGlvbiwgc3Vic2VxdWVudCBGRV9HRVRfRVZFTlQKKyBjYWxscyB3aWxsIHJldHVybiBldmVudHMgZnJvbSB0aGUgcXVldWUgYXMgdXN1YWwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZvciB0aGUgc2FrZSBvZiBpbXBsZW1lbnRhdGlvbiBzaW1wbGljaXR5LCB0aGlzIGNvbW1hbmQgcmVxdWlyZXMgcmVhZC93cml0ZQorIGFjY2VzcyB0byB0aGUgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gUVBTS19HRVRfRVZFTlQsCisgc3RydWN0IGR2Yl9mcm9udGVuZF9ldmVudCAmI3gyMkM2O2V2KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfR0VUX0VWRU5UIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdAorIGR2Yl9mcm9udGVuZF9ldmVudAorICpldjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgZXZlbnQsPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aWYgYW55LCBpcyB0byBiZSBzdG9yZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ldiBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlcmUgaXMgbm8gZXZlbnQgcGVuZGluZywgYW5kIHRoZSBkZXZpY2UgaXMgaW4KKyBub24tYmxvY2tpbmcgbW9kZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU9WRVJGTE9XPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PdmVyZmxvdyBpbiBldmVudCBxdWV1ZSAtIG9uZSBvciBtb3JlIGV2ZW50cyB3ZXJlIGxvc3QuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZ2V0X2luZm8iPgorPHRpdGxlPkZFX0dFVF9JTkZPPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmcm9udC1lbmQuIFRoaXMgY2FsbCBvbmx5IHJlcXVpcmVzCisgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorCis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX0dFVF9JTkZPLCBzdHJ1Y3QKKyBkdmJfZnJvbnRlbmRfaW5mbyAmI3gyMkM2O2luZm8pOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+CisKKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9HRVRfSU5GTyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkdmJfZnJvbnRlbmRfaW5mbworICppbmZvPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBmcm9udC1lbmQgaW5mb3JtYXRpb24gaXMKKyB0byBiZSBzdG9yZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW5mbyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+Cis8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2Rpc2VxY19yZXNldF9vdmVybG9hZCI+Cis8dGl0bGU+RkVfRElTRVFDX1JFU0VUX09WRVJMT0FEPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklmIHRoZSBidXMgaGFzIGJlZW4gYXV0b21hdGljYWxseSBwb3dlcmVkIG9mZiBkdWUgdG8gcG93ZXIgb3ZlcmxvYWQsIHRoaXMgaW9jdGwKKyBjYWxsIHJlc3RvcmVzIHRoZSBwb3dlciB0byB0aGUgYnVzLiBUaGUgY2FsbCByZXF1aXJlcyByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUKKyBkZXZpY2UuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBkZXZpY2UgaXMgbWFudWFsbHkgcG93ZXJlZCBvZmYuIE5vdCBhbGwKKyBEVkIgYWRhcHRlcnMgc3VwcG9ydCB0aGlzIGlvY3RsLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0KKyBGRV9ESVNFUUNfUkVTRVRfT1ZFUkxPQUQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfRElTRVFDX1JFU0VUX09WRVJMT0FEIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBlcm1pc3Npb24gZGVuaWVkIChuZWVkcyByZWFkL3dyaXRlIGFjY2VzcykuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IgaW4gdGhlIGRldmljZSBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCI+Cis8dGl0bGU+RkVfRElTRVFDX1NFTkRfTUFTVEVSX0NNRDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgaXMgdXNlZCB0byBzZW5kIGEgYSBEaVNFcUMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEZFX0RJU0VRQ19TRU5EX01BU1RFUl9DTUQsIHN0cnVjdAorIGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAmI3gyMkM2O2NtZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX0RJU0VRQ19TRU5EX01BU1RFUl9DTUQgZm9yIHRoaXMKKyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkdmJfZGlzZXFjX21hc3Rlcl9jbWQKKyAqY21kPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBjb21tYW5kIHRvIGJlIHRyYW5zbWl0dGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNlcSBwb2ludHMgdG8gYW4gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBkYXRhIHN0cnVjdHVyZSByZWZlcnJlZCB0byBieSBzZXEgaXMgaW52YWxpZCBpbiBzb21lCisgd2F5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FUEVSTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UGVybWlzc2lvbiBkZW5pZWQgKG5lZWRzIHJlYWQvd3JpdGUgYWNjZXNzKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Cis8L2VudHJ5PgorPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9kaXNlcWNfcmVjdl9zbGF2ZV9yZXBseSI+Cis8dGl0bGU+RkVfRElTRVFDX1JFQ1ZfU0xBVkVfUkVQTFk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGlzIHVzZWQgdG8gcmVjZWl2ZSByZXBseSB0byBhIERpU0VxQyAyLjAgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9CisgRkVfRElTRVFDX1JFQ1ZfU0xBVkVfUkVQTFksIHN0cnVjdAorIGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkgJiN4MjJDNjtyZXBseSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX0RJU0VRQ19SRUNWX1NMQVZFX1JFUExZIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RydWN0CisgZHZiX2Rpc2VxY19zbGF2ZV9yZXBseQorICpyZXBseTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgY29tbWFuZCB0byBiZSByZWNlaXZlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U2VxIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRhdGEgc3RydWN0dXJlIHJlZmVycmVkIHRvIGJ5IHNlcSBpcyBpbnZhbGlkIGluIHNvbWUKKyB3YXkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVQRVJNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5QZXJtaXNzaW9uIGRlbmllZCAobmVlZHMgcmVhZC93cml0ZSBhY2Nlc3MpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yIGluIHRoZSBkZXZpY2UgZHJpdmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9kaXNlcWNfc2VuZF9idXJzdCI+Cis8dGl0bGU+RkVfRElTRVFDX1NFTkRfQlVSU1Q8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGlzIHVzZWQgdG8gc2VuZCBhIDIyS0h6IHRvbmUgYnVyc3QuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEZFX0RJU0VRQ19TRU5EX0JVUlNULCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX0RJU0VRQ19TRU5EX0JVUlNUIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZlX3NlY19taW5pX2NtZF90CisgYnVyc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJ1cnN0IEEgb3IgQi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TZXEgcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZGF0YSBzdHJ1Y3R1cmUgcmVmZXJyZWQgdG8gYnkgc2VxIGlzIGludmFsaWQgaW4gc29tZQorIHdheS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBlcm1pc3Npb24gZGVuaWVkIChuZWVkcyByZWFkL3dyaXRlIGFjY2VzcykuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IgaW4gdGhlIGRldmljZSBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfc2V0X3RvbmUiPgorPHRpdGxlPkZFX1NFVF9UT05FPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgY2FsbCBpcyB1c2VkIHRvIHNldCB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgY29udGludW91cyAyMmtIeiB0b25lLiBUaGlzIGNhbGwKKyByZXF1aXJlcyByZWFkL3dyaXRlIHBlcm1pc3Npb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX1NFVF9UT05FLAorIGZlX3NlY190b25lX21vZGVfdCB0b25lKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1NFVF9UT05FIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZlX3NlY190b25lX21vZGVfdAorIHRvbmU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSByZXF1ZXN0ZWQgdG9uZSBnZW5lcmF0aW9uIG1vZGUgKG9uL29mZikuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FUEVSTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBub3Qgb3BlbmVkIHdpdGggcmVhZCBwZXJtaXNzaW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Cis8L2VudHJ5PgorPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmZV9zZXRfdm9sdGFnZSI+Cis8dGl0bGU+RkVfU0VUX1ZPTFRBR0U8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBjYWxsIGlzIHVzZWQgdG8gc2V0IHRoZSBidXMgdm9sdGFnZS4gVGhpcyBjYWxsIHJlcXVpcmVzIHJlYWQvd3JpdGUKKyBwZXJtaXNzaW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBGRV9TRVRfVk9MVEFHRSwKKyBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9TRVRfVk9MVEFHRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZV9zZWNfdm9sdGFnZV90Cisgdm9sdGFnZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHJlcXVlc3RlZCBidXMgdm9sdGFnZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PREVWPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2UgZHJpdmVyIG5vdCBsb2FkZWQvYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RGV2aWNlIG9yIHJlc291cmNlIGJ1c3kuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW52YWxpZCBhcmd1bWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgbm90IG9wZW5lZCB3aXRoIHJlYWQgcGVybWlzc2lvbnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IgaW4gdGhlIGRldmljZSBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2VuYWJsZV9oaWdoX2xuYl92b2x0Ij4KKzx0aXRsZT5GRV9FTkFCTEVfSElHSF9MTkJfVk9MVEFHRTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JZiBoaWdoICE9IDAgZW5hYmxlcyBzbGlnaHRseSBoaWdoZXIgdm9sdGFnZXMgaW5zdGVhZCBvZiAxMy8xOFYgKHRvIGNvbXBlbnNhdGUKKyBmb3IgbG9uZyBjYWJsZXMpLiBUaGlzIGNhbGwgcmVxdWlyZXMgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gTm90IGFsbCBEVkIKKyBhZGFwdGVycyBzdXBwb3J0IHRoaXMgaW9jdGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEZFX0VOQUJMRV9ISUdIX0xOQl9WT0xUQUdFLCBpbnQgaGlnaCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1NFVF9WT0xUQUdFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBoaWdoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgcmVxdWVzdGVkIGJ1cyB2b2x0YWdlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FUEVSTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBub3Qgb3BlbmVkIHdpdGggcmVhZCBwZXJtaXNzaW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorJnN1Yi1pc2RidDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvaW50cm8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjODNmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvaW50cm8ueG1sCkBAIC0wLDAgKzEsMTkxIEBACis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9InJlcXVpc2l0ZXMiPgorPHRpdGxlPldoYXQgeW91IG5lZWQgdG8ga25vdzwvdGl0bGU+CisKKzxwYXJhPlRoZSByZWFkZXIgb2YgdGhpcyBkb2N1bWVudCBpcyByZXF1aXJlZCB0byBoYXZlIHNvbWUga25vd2xlZGdlIGluCit0aGUgYXJlYSBvZiBkaWdpdGFsIHZpZGVvIGJyb2FkY2FzdGluZyAoRFZCKSBhbmQgc2hvdWxkIGJlIGZhbWlsaWFyIHdpdGgKK3BhcnQgSSBvZiB0aGUgTVBFRzIgc3BlY2lmaWNhdGlvbiBJU08vSUVDIDEzODE4IChha2EgSVRVLVQgSC4yMjIpLCBpLmUKK3lvdSBzaG91bGQga25vdyB3aGF0IGEgcHJvZ3JhbS90cmFuc3BvcnQgc3RyZWFtIChQUy9UUykgaXMgYW5kIHdoYXQgaXMKK21lYW50IGJ5IGEgcGFja2V0aXplZCBlbGVtZW50YXJ5IHN0cmVhbSAoUEVTKSBvciBhbiBJLWZyYW1lLjwvcGFyYT4KKworPHBhcmE+VmFyaW91cyBEVkIgc3RhbmRhcmRzIGRvY3VtZW50cyBhcmUgYXZhaWxhYmxlIGZyb20KKzx1bGluayB1cmw9Imh0dHA6Ly93d3cuZHZiLm9yZyIgLz4gYW5kL29yCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIiAvPi48L3BhcmE+CisKKzxwYXJhPkl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIGtub3cgaG93IHRvIGFjY2VzcyB1bml4L2xpbnV4IGRldmljZXMgYW5kCitob3cgdG8gdXNlIGlvY3RsIGNhbGxzLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIGtub3dsZWRnZSBvZiBDIG9yIEMrKy4KKzwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9Imhpc3RvcnkiPgorPHRpdGxlPkhpc3Rvcnk8L3RpdGxlPgorCis8cGFyYT5UaGUgZmlyc3QgQVBJIGZvciBEVkIgY2FyZHMgd2UgdXNlZCBhdCBDb252ZXJnZW5jZSBpbiBsYXRlIDE5OTkKK3dhcyBhbiBleHRlbnNpb24gb2YgdGhlIFZpZGVvNExpbnV4IEFQSSB3aGljaCB3YXMgcHJpbWFyaWx5IGRldmVsb3BlZAorZm9yIGZyYW1lIGdyYWJiZXIgY2FyZHMuIEFzIHN1Y2ggaXQgd2FzIG5vdCByZWFsbHkgd2VsbCBzdWl0ZWQgdG8gYmUKK3VzZWQgZm9yIERWQiBjYXJkcyBhbmQgdGhlaXIgbmV3IGZlYXR1cmVzIGxpa2UgcmVjb3JkaW5nIE1QRUcgc3RyZWFtcworYW5kIGZpbHRlcmluZyBzZXZlcmFsIHNlY3Rpb24gYW5kIFBFUyBkYXRhIHN0cmVhbXMgYXQgdGhlIHNhbWUgdGltZS4KKzwvcGFyYT4KKworPHBhcmE+SW4gZWFybHkgMjAwMCwgd2Ugd2VyZSBhcHByb2FjaGVkIGJ5IE5va2lhIHdpdGggYSBwcm9wb3NhbCBmb3IgYQorbmV3IHN0YW5kYXJkIExpbnV4IERWQiBBUEkuIEFzIGEgY29tbWl0bWVudCB0byB0aGUgZGV2ZWxvcG1lbnQgb2YKK3Rlcm1pbmFscyBiYXNlZCBvbiBvcGVuIHN0YW5kYXJkcywgTm9raWEgYW5kIENvbnZlcmdlbmNlIG1hZGUgaXQKK2F2YWlsYWJsZSB0byBhbGwgTGludXggZGV2ZWxvcGVycyBhbmQgcHVibGlzaGVkIGl0IG9uCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxpbnV4dHYub3JnLyIgLz4gaW4gU2VwdGVtYmVyIDIwMDAuCitDb252ZXJnZW5jZSBpcyB0aGUgbWFpbnRhaW5lciBvZiB0aGUgTGludXggRFZCIEFQSS4gVG9nZXRoZXIgd2l0aCB0aGUKK0xpbnV4VFYgY29tbXVuaXR5IChpLmUuIHlvdSwgdGhlIHJlYWRlciBvZiB0aGlzIGRvY3VtZW50KSwgdGhlIExpbnV4IERWQgorQVBJIHdpbGwgYmUgY29uc3RhbnRseSByZXZpZXdlZCBhbmQgaW1wcm92ZWQuIFdpdGggdGhlIExpbnV4IGRyaXZlciBmb3IKK3RoZSBTaWVtZW5zL0hhdXBwYXVnZSBEVkIgUENJIGNhcmQgQ29udmVyZ2VuY2UgcHJvdmlkZXMgYSBmaXJzdAoraW1wbGVtZW50YXRpb24gb2YgdGhlIExpbnV4IERWQiBBUEkuPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ib3ZlcnZpZXciPgorPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworPGZpZ3VyZSBpZD0ic3RiX2NvbXBvbmVudHMiPgorPHRpdGxlPkNvbXBvbmVudHMgb2YgYSBEVkIgY2FyZC9TVEI8L3RpdGxlPgorPG1lZGlhb2JqZWN0PgorPGltYWdlb2JqZWN0PgorPGltYWdlZGF0YSBmaWxlcmVmPSJkdmJzdGIucGRmIiBmb3JtYXQ9IlBTIiAvPgorPC9pbWFnZW9iamVjdD4KKzxpbWFnZW9iamVjdD4KKzxpbWFnZWRhdGEgZmlsZXJlZj0iZHZic3RiLnBuZyIgZm9ybWF0PSJQTkciIC8+Cis8L2ltYWdlb2JqZWN0PgorPC9tZWRpYW9iamVjdD4KKzwvZmlndXJlPgorCis8cGFyYT5BIERWQiBQQ0kgY2FyZCBvciBEVkIgc2V0LXRvcC1ib3ggKFNUQikgdXN1YWxseSBjb25zaXN0cyBvZiB0aGUKK2ZvbGxvd2luZyBtYWluIGhhcmR3YXJlIGNvbXBvbmVudHM6IDwvcGFyYT4KKworPGl0ZW1pemVkbGlzdD4KKyA8bGlzdGl0ZW0+CisKKzxwYXJhPkZyb250ZW5kIGNvbnNpc3Rpbmcgb2YgdHVuZXIgYW5kIERWQiBkZW1vZHVsYXRvcjwvcGFyYT4KKworPHBhcmE+SGVyZSB0aGUgcmF3IHNpZ25hbCByZWFjaGVzIHRoZSBEVkIgaGFyZHdhcmUgZnJvbSBhIHNhdGVsbGl0ZSBkaXNoCitvciBhbnRlbm5hIG9yIGRpcmVjdGx5IGZyb20gY2FibGUuIFRoZSBmcm9udGVuZCBkb3duLWNvbnZlcnRzIGFuZAorZGVtb2R1bGF0ZXMgdGhpcyBzaWduYWwgaW50byBhbiBNUEVHIHRyYW5zcG9ydCBzdHJlYW0gKFRTKS4gSW4gY2FzZSBvZiBhCitzYXRlbGxpdGUgZnJvbnRlbmQsIHRoaXMgaW5jbHVkZXMgYSBmYWNpbGl0eSBmb3Igc2F0ZWxsaXRlIGVxdWlwbWVudAorY29udHJvbCAoU0VDKSwgd2hpY2ggYWxsb3dzIGNvbnRyb2wgb2YgTE5CIHBvbGFyaXphdGlvbiwgbXVsdGkgZmVlZAorc3dpdGNoZXMgb3IgZGlzaCByb3RvcnMuPC9wYXJhPgorCis8L2xpc3RpdGVtPgorIDxsaXN0aXRlbT4KKworPHBhcmE+Q29uZGl0aW9uYWwgQWNjZXNzIChDQSkgaGFyZHdhcmUgbGlrZSBDSSBhZGFwdGVycyBhbmQgc21hcnRjYXJkIHNsb3RzCis8L3BhcmE+CisKKzxwYXJhPlRoZSBjb21wbGV0ZSBUUyBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgQ0EgaGFyZHdhcmUuIFByb2dyYW1zIHRvCit3aGljaCB0aGUgdXNlciBoYXMgYWNjZXNzIChjb250cm9sbGVkIGJ5IHRoZSBzbWFydCBjYXJkKSBhcmUgZGVjb2RlZCBpbgorcmVhbCB0aW1lIGFuZCByZS1pbnNlcnRlZCBpbnRvIHRoZSBUUy48L3BhcmE+CisKKzwvbGlzdGl0ZW0+CisgPGxpc3RpdGVtPgorIDxwYXJhPkRlbXVsdGlwbGV4ZXIgd2hpY2ggZmlsdGVycyB0aGUgaW5jb21pbmcgRFZCIHN0cmVhbTwvcGFyYT4KKworPHBhcmE+VGhlIGRlbXVsdGlwbGV4ZXIgc3BsaXRzIHRoZSBUUyBpbnRvIGl0cyBjb21wb25lbnRzIGxpa2UgYXVkaW8gYW5kCit2aWRlbyBzdHJlYW1zLiBCZXNpZGVzIHVzdWFsbHkgc2V2ZXJhbCBvZiBzdWNoIGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zCitpdCBhbHNvIGNvbnRhaW5zIGRhdGEgc3RyZWFtcyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9ncmFtcworb2ZmZXJlZCBpbiB0aGlzIG9yIG90aGVyIHN0cmVhbXMgb2YgdGhlIHNhbWUgcHJvdmlkZXIuPC9wYXJhPgorCis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCis8cGFyYT5NUEVHMiBhdWRpbyBhbmQgdmlkZW8gZGVjb2RlcjwvcGFyYT4KKworPHBhcmE+VGhlIG1haW4gdGFyZ2V0cyBvZiB0aGUgZGVtdWx0aXBsZXhlciBhcmUgdGhlIE1QRUcyIGF1ZGlvIGFuZAordmlkZW8gZGVjb2RlcnMuIEFmdGVyIGRlY29kaW5nIHRoZXkgcGFzcyBvbiB0aGUgdW5jb21wcmVzc2VkIGF1ZGlvIGFuZAordmlkZW8gdG8gdGhlIGNvbXB1dGVyIHNjcmVlbiBvciAodGhyb3VnaCBhIFBBTC9OVFNDIGVuY29kZXIpIHRvIGEgVFYKK3NldC48L3BhcmE+CisKKworPC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCis8cGFyYT48eHJlZiBsaW5rZW5kPSJzdGJfY29tcG9uZW50cyIgLz4gc2hvd3MgYSBjcnVkZSBzY2hlbWF0aWMgb2YgdGhlIGNvbnRyb2wgYW5kIGRhdGEgZmxvdworYmV0d2VlbiB0aG9zZSBjb21wb25lbnRzLjwvcGFyYT4KKworPHBhcmE+T24gYSBEVkIgUENJIGNhcmQgbm90IGFsbCBvZiB0aGVzZSBoYXZlIHRvIGJlIHByZXNlbnQgc2luY2Ugc29tZQorZnVuY3Rpb25hbGl0eSBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIG1haW4gQ1BVIG9mIHRoZSBQQyAoZS5nLiBNUEVHCitwaWN0dXJlIGFuZCBzb3VuZCBkZWNvZGluZykgb3IgaXMgbm90IG5lZWRlZCAoZS5nLiBmb3IgZGF0YS1vbmx5IHVzZXMKK2xpa2UgJiM4MjIwO2ludGVybmV0IG92ZXIgc2F0ZWxsaXRlJiM4MjIxOykuIEFsc28gbm90IGV2ZXJ5IGNhcmQgb3IgU1RCCitwcm92aWRlcyBjb25kaXRpb25hbCBhY2Nlc3MgaGFyZHdhcmUuPC9wYXJhPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkdmJfZGV2aWNlcyI+Cis8dGl0bGU+TGludXggRFZCIERldmljZXM8L3RpdGxlPgorCis8cGFyYT5UaGUgTGludXggRFZCIEFQSSBsZXRzIHlvdSBjb250cm9sIHRoZXNlIGhhcmR3YXJlIGNvbXBvbmVudHMKK3Rocm91Z2ggY3VycmVudGx5IHNpeCBVbml4LXN0eWxlIGNoYXJhY3RlciBkZXZpY2VzIGZvciB2aWRlbywgYXVkaW8sCitmcm9udGVuZCwgZGVtdXgsIENBIGFuZCBJUC1vdmVyLURWQiBuZXR3b3JraW5nLiBUaGUgdmlkZW8gYW5kIGF1ZGlvCitkZXZpY2VzIGNvbnRyb2wgdGhlIE1QRUcyIGRlY29kZXIgaGFyZHdhcmUsIHRoZSBmcm9udGVuZCBkZXZpY2UgdGhlCit0dW5lciBhbmQgdGhlIERWQiBkZW1vZHVsYXRvci4gVGhlIGRlbXV4IGRldmljZSBnaXZlcyB5b3UgY29udHJvbCBvdmVyCit0aGUgUEVTIGFuZCBzZWN0aW9uIGZpbHRlcnMgb2YgdGhlIGhhcmR3YXJlLiBJZiB0aGUgaGFyZHdhcmUgZG9lcyBub3QKK3N1cHBvcnQgZmlsdGVyaW5nIHRoZXNlIGZpbHRlcnMgY2FuIGJlIGltcGxlbWVudGVkIGluIHNvZnR3YXJlLiBGaW5hbGx5LAordGhlIENBIGRldmljZSBjb250cm9scyBhbGwgdGhlIGNvbmRpdGlvbmFsIGFjY2VzcyBjYXBhYmlsaXRpZXMgb2YgdGhlCitoYXJkd2FyZS4gSXQgY2FuIGRlcGVuZCBvbiB0aGUgaW5kaXZpZHVhbCBzZWN1cml0eSByZXF1aXJlbWVudHMgb2YgdGhlCitwbGF0Zm9ybSwgaWYgYW5kIGhvdyBtYW55IG9mIHRoZSBDQSBmdW5jdGlvbnMgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZQorYXBwbGljYXRpb24gdGhyb3VnaCB0aGlzIGRldmljZS48L3BhcmE+CisKKzxwYXJhPkFsbCBkZXZpY2VzIGNhbiBiZSBmb3VuZCBpbiB0aGUgPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2PC9lbXBoYXNpcz4KK3RyZWUgdW5kZXIgPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2YjwvZW1waGFzaXM+LiBUaGUgaW5kaXZpZHVhbCBkZXZpY2VzCithcmUgY2FsbGVkOjwvcGFyYT4KKworPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT4KKworPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi9hdWRpb008L2VtcGhhc2lzPiw8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi92aWRlb008L2VtcGhhc2lzPiw8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi9mcm9udGVuZE08L2VtcGhhc2lzPiw8L3BhcmE+Cis8L2xpc3RpdGVtPgorIDxsaXN0aXRlbT4KKworPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi9uZXRNPC9lbXBoYXNpcz4sPC9wYXJhPgorPC9saXN0aXRlbT4KKyA8bGlzdGl0ZW0+CisKKzxwYXJhPjxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlck4vZGVtdXhNPC9lbXBoYXNpcz4sPC9wYXJhPgorPC9saXN0aXRlbT4KKyA8bGlzdGl0ZW0+CisKKzxwYXJhPjxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlck4vY2FNPC9lbXBoYXNpcz4sPC9wYXJhPjwvbGlzdGl0ZW0+PC9pdGVtaXplZGxpc3Q+CisKKzxwYXJhPndoZXJlIE4gZW51bWVyYXRlcyB0aGUgRFZCIFBDSSBjYXJkcyBpbiBhIHN5c3RlbSBzdGFydGluZworZnJvbSYjeDAwQTA7MCwgYW5kIE0gZW51bWVyYXRlcyB0aGUgZGV2aWNlcyBvZiBlYWNoIHR5cGUgd2l0aGluIGVhY2gKK2FkYXB0ZXIsIHN0YXJ0aW5nIGZyb20mI3gwMEEwOzAsIHRvby4gV2Ugd2lsbCBvbWl0IHRoZSAmIzgyMjA7PGVtcGhhc2lzCityb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlck4vPC9lbXBoYXNpcz4mIzgyMjE7IGluIHRoZSBmdXJ0aGVyIGRpY3Vzc2lvbgorb2YgdGhlc2UgZGV2aWNlcy4gVGhlIG5hbWluZyBzY2hlbWUgZm9yIHRoZSBkZXZpY2VzIGlzIHRoZSBzYW1lIHdoZXRlcgorZGV2ZnMgaXMgdXNlZCBvciBub3QuPC9wYXJhPgorCis8cGFyYT5Nb3JlIGRldGFpbHMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gY2FsbHMgb2YgYWxsCit0aGUgZGV2aWNlcyBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgY2hhcHRlcnMuPC9wYXJhPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJpbmNsdWRlX2ZpbGVzIj4KKzx0aXRsZT5BUEkgaW5jbHVkZSBmaWxlczwvdGl0bGU+CisKKzxwYXJhPkZvciBlYWNoIG9mIHRoZSBEVkIgZGV2aWNlcyBhIGNvcnJlc3BvbmRpbmcgaW5jbHVkZSBmaWxlIGV4aXN0cy4KK1RoZSBEVkIgQVBJIGluY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFwcGxpY2F0aW9uIHNvdXJjZXMgd2l0aAorYSBwYXJ0aWFsIHBhdGggbGlrZTo8L3BhcmE+CisKKworPHByb2dyYW1saXN0aW5nPgorCSNpbmNsdWRlICYjeDAwM0M7bGludXgvZHZiL2Zyb250ZW5kLmgmI3gwMDNFOworPC9wcm9ncmFtbGlzdGluZz4KKworPHBhcmE+VG8gZW5hYmxlIGFwcGxpY2F0aW9ucyB0byBzdXBwb3J0IGRpZmZlcmVudCBBUEkgdmVyc2lvbiwgYW4KK2FkZGl0aW9uYWwgaW5jbHVkZSBmaWxlIDxlbXBoYXNpcworcm9sZT0idHQiPmxpbnV4L2R2Yi92ZXJzaW9uLmg8L2VtcGhhc2lzPiBleGlzdHMsIHdoaWNoIGRlZmluZXMgdGhlCitjb25zdGFudCA8ZW1waGFzaXMgcm9sZT0idHQiPkRWQl9BUElfVkVSU0lPTjwvZW1waGFzaXM+LiBUaGlzIGRvY3VtZW50CitkZXNjcmliZXMgPGVtcGhhc2lzIHJvbGU9InR0Ij5EVkJfQVBJX1ZFUlNJT04mI3gwMEEwOzM8L2VtcGhhc2lzPi4KKzwvcGFyYT4KKworPC9zZWN0aW9uPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2lzZGJ0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvaXNkYnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2lzZGJ0LnhtbApAQCAtMCwwICsxLDMxNCBAQAorPHNlY3Rpb24gaWQ9ImlzZGJ0Ij4KKwk8dGl0bGU+SVNEQi1UIGZyb250ZW5kPC90aXRsZT4KKwk8cGFyYT5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNob3J0bHkgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIHBhcmFtZXRlcnMgaW4gdGhlIExpbnV4CisJCURWQi1BUEkgY2FsbGVkICJTMkFQSSIgYW5kIG5vdyBEVkIgQVBJIDUgaW4gb3JkZXIgdG8gdHVuZSBhbiBJU0RCLVQvSVNEQi1Uc2IKKwkJZGVtb2R1bGF0b3I6PC9wYXJhPgorCisJPHBhcmE+VGhpcyBJU0RCLVQvSVNEQi1Uc2IgQVBJIGV4dGVuc2lvbiBzaG91bGQgcmVmbGVjdCBhbGwgaW5mb3JtYXRpb24KKwkJbmVlZGVkIHRvIHR1bmUgYW55IElTREItVC9JU0RCLVRzYiBoYXJkd2FyZS4gT2YgY291cnNlIGl0IGlzIHBvc3NpYmxlCisJCXRoYXQgc29tZSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgZGV2aWNlcyB3b24ndCBuZWVkIGNlcnRhaW4gcGFyYW1ldGVycyB0bworCQl0dW5lLjwvcGFyYT4KKworCTxwYXJhPlRoZSBpbmZvcm1hdGlvbiBnaXZlbiBoZXJlIHNob3VsZCBoZWxwIGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8ga25vdyBob3cKKwkJdG8gaGFuZGxlIElTREItVCBhbmQgSVNEQi1Uc2IgaGFyZHdhcmUgdXNpbmcgdGhlIExpbnV4IERWQi1BUEkuPC9wYXJhPgorCisJPHBhcmE+VGhlIGRldGFpbHMgZ2l2ZW4gaGVyZSBhYm91dCBJU0RCLVQgYW5kIElTREItVHNiIGFyZSBqdXN0IGVub3VnaCB0bworCQliYXNpY2FsbHkgc2hvdyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIG5lZWRlZCBwYXJhbWV0ZXIgdmFsdWVzLAorCQlidXQgc3VyZWx5IHNvbWUgaW5mb3JtYXRpb24gaXMgbGVmdCBvdXQuIEZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uCisJCXNlZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3BhcmE+CisKKwk8cGFyYT5BUklCIFNURC1CMzEgLSAiVHJhbnNtaXNzaW9uIFN5c3RlbSBmb3IgRGlnaXRhbCBUZXJyZXN0cmlhbAorCQlUZWxldmlzaW9uIEJyb2FkY2FzdGluZyIgYW5kPC9wYXJhPgorCTxwYXJhPkFSSUIgVFItQjE0IC0gIk9wZXJhdGlvbmFsIEd1aWRlbGluZXMgZm9yIERpZ2l0YWwgVGVycmVzdHJpYWwKKwkJVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmciLjwvcGFyYT4KKworCTxwYXJhPkluIG9yZGVyIHRvIHJlYWQgdGhpcyBkb2N1bWVudCBvbmUgaGFzIHRvIGhhdmUgc29tZSBrbm93bGVkZ2UgdGhlCisJCWNoYW5uZWwgc3RydWN0dXJlIGluIElTREItVCBhbmQgSVNEQi1Uc2IuIEkuZS4gaXQgaGFzIHRvIGJlIGtub3duIHRvCisJCXRoZSByZWFkZXIgdGhhdCBhbiBJU0RCLVQgY2hhbm5lbCBjb25zaXN0cyBvZiAxMyBzZWdtZW50cywgdGhhdCBpdCBjYW4KKwkJaGF2ZSB1cCB0byAzIGxheWVyIHNoYXJpbmcgdGhvc2Ugc2VnbWVudHMsIGFuZCB0aGluZ3MgbGlrZSB0aGF0LjwvcGFyYT4KKworCTxwYXJhPlBhcmFtZXRlcnMgdXNlZCBieSBJU0RCLVQgYW5kIElTREItVHNiLjwvcGFyYT4KKworCTxzZWN0aW9uIGlkPSJpc2RidC1wYXJtcyI+CisJCTx0aXRsZT5QYXJhbWV0ZXJzIHRoYXQgYXJlIGNvbW1vbiB3aXRoIERWQi1UIGFuZCBBVFNDPC90aXRsZT4KKworCQk8c2VjdGlvbiBpZD0iaXNkYnQtZnJlcSI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9GUkVRVUVOQ1k8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJCTxwYXJhPkNlbnRyYWwgZnJlcXVlbmN5IG9mIHRoZSBjaGFubmVsLjwvcGFyYT4KKworCQkJPHBhcmE+Rm9yIElTREItVCB0aGUgY2hhbm5lbHMgYXJlIHVzYWxseSB0cmFuc21pdHRlZCB3aXRoIGFuIG9mZnNldCBvZiAxNDNrSHouIEUuZy4gYQorCQkJCXZhbGlkIGZyZXF1bmN5IGNvdWxkIGJlIDQ3NDE0MyBrSHouIFRoZSBzdGVwcGluZyBpcyBib3VuZCB0byB0aGUgYmFuZHdpZHRoIG9mCisJCQkJdGhlIGNoYW5uZWwgd2hpY2ggaXMgNk1Iei48L3BhcmE+CisKKwkJCTxwYXJhPkFzIGluIElTREItVHNiIHRoZSBjaGFubmVsIGNvbnNpc3RzIG9mIG9ubHkgb25lIG9yIHRocmVlIHNlZ21lbnRzIHRoZQorCQkJCWZyZXF1ZW5jeSBzdGVwIGlzIDQyOWtIeiwgMyo0MjkgcmVzcGVjdGl2ZWx5LiBBcyBmb3IgSVNEQi1UIHRoZQorCQkJCWNlbnRyYWwgZnJlcXVlbmN5IG9mIHRoZSBjaGFubmVsIGlzIGV4cGVjdGVkLjwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RidC1idyI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9CQU5EV0lEVEhfSFo8L2NvbnN0YW50PiAob3B0aW9uYWwpPC90aXRsZT4KKworCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOjwvcGFyYT4KKworCQkJPHBhcmE+Rm9yIElTREItVCBpdCBzaG91bGQgYmUgYWx3YXlzIDYwMDAwMDBIeiAoNk1Ieik8L3BhcmE+CisJCQk8cGFyYT5Gb3IgSVNEQi1Uc2IgaXQgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29ubmVjdGVkIHNlZ21lbnRzPC9wYXJhPgorCisJCQk8cGFyYT5Ob3RlOiBIYXJkd2FyZSBzcGVjaWZpYyB2YWx1ZXMgbWlnaHQgYmUgZ2l2ZW4gaGVyZSwgYnV0IHN0YW5kYXJkCisJCQkJYXBwbGljYXRpb25zIHNob3VsZCBub3QgYm90aGVyIHRvIHNldCBhIHZhbHVlIHRvIHRoaXMgZmllbGQgYXMKKwkJCQlzdGFuZGFyZCBkZW1vZHMgYXJlIGlnbm9yaW5nIGl0IGFueXdheS48L3BhcmE+CisKKwkJCTxwYXJhPkJhbmR3aWR0aCBpbiBJU0RCLVQgaXMgZml4ZWQgKDZNSHopIG9yIGNhbiBiZSBlYXNpbHkgZGVyaXZlZCBmcm9tCisJCQkJb3RoZXIgcGFyYW1ldGVycyAoRFRWX0lTREJUX1NCX1NFR01FTlRfSURYLAorCQkJCURUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UKS48L3BhcmE+CisJCTwvc2VjdGlvbj4KKworCQk8c2VjdGlvbiBpZD0iaXNkYnQtZGVsaXZlcnktc3lzIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0RFTElWRVJZX1NZU1RFTTwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiA8Y29uc3RhbnQ+U1lTX0lTREJUPC9jb25zdGFudD48L3BhcmE+CisJCTwvc2VjdGlvbj4KKworCQk8c2VjdGlvbiBpZD0iaXNkYnQtdHgtbW9kZSI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9UUkFOU01JU1NJT05fTU9ERTwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+SVNEQi1UIHN1cHBvcnRzIHRocmVlIGNhcnJpZXIvc3ltYm9sLXNpemU6IDhLLCA0SywgMksuIEl0IGlzIGNhbGxlZAorCQkJCSdtb2RlJyBpbiB0aGUgc3RhbmRhcmQ6IE1vZGUgMSBpcyAySywgbW9kZSAyIGlzIDRLLCBtb2RlIDMgaXMgOEs8L3BhcmE+CisKKwkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogPGNvbnN0YW50PlRSQU5TTUlTU0lPTl9NT0RFXzJLPC9jb25zdGFudD4sIDxjb25zdGFudD5UUkFOU01JU1NJT05fTU9ERV84SzwvY29uc3RhbnQ+LAorCQkJCTxjb25zdGFudD5UUkFOU01JU1NJT05fTU9ERV9BVVRPPC9jb25zdGFudD4sIDxjb25zdGFudD5UUkFOU01JU1NJT05fTU9ERV80SzwvY29uc3RhbnQ+PC9wYXJhPgorCisJCQk8cGFyYT5JZiA8Y29uc3RhbnQ+RFRWX1RSQU5TTUlTU0lPTl9NT0RFPC9jb25zdGFudD4gaXMgc2V0IHRoZSA8Y29uc3RhbnQ+VFJBTlNNSVNTSU9OX01PREVfQVVUTzwvY29uc3RhbnQ+IHRoZQorCQkJCWhhcmR3YXJlIHdpbGwgdHJ5IHRvIGZpbmQgdGhlIGNvcnJlY3QgRkZULXNpemUgKGlmIGNhcGFibGUpIGFuZCB3aWxsCisJCQkJdXNlIFRNQ0MgdG8gZmlsbCBpbiB0aGUgbWlzc2luZyBwYXJhbWV0ZXJzLjwvcGFyYT4KKworCQkJPHBhcmE+PGNvbnN0YW50PlRSQU5TTUlTU0lPTl9NT0RFXzRLPC9jb25zdGFudD4gaXMgYWRkZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgb3RoZXIgbmV3IHBhcmFtZXRlcnMuPC9wYXJhPgorCQk8L3NlY3Rpb24+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LWd1YXJkLWludGVydmFsIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0dVQVJEX0lOVEVSVkFMPC9jb25zdGFudD48L3RpdGxlPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF8xXzMyPC9jb25zdGFudD4sIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF8xXzE2PC9jb25zdGFudD4sIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF8xXzg8L2NvbnN0YW50PiwKKwkJCQk8Y29uc3RhbnQ+R1VBUkRfSU5URVJWQUxfMV80PC9jb25zdGFudD4sIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF9BVVRPPC9jb25zdGFudD48L3BhcmE+CisKKwkJCTxwYXJhPklmIDxjb25zdGFudD5EVFZfR1VBUkRfSU5URVJWQUw8L2NvbnN0YW50PiBpcyBzZXQgdGhlIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF9BVVRPPC9jb25zdGFudD4gdGhlIGhhcmR3YXJlIHdpbGwKKwkJCQl0cnkgdG8gZmluZCB0aGUgY29ycmVjdCBndWFyZCBpbnRlcnZhbCAoaWYgY2FwYWJsZSkgYW5kIHdpbGwgdXNlIFRNQ0MgdG8gZmlsbAorCQkJCWluIHRoZSBtaXNzaW5nIHBhcmFtZXRlcnMuPC9wYXJhPgorCQk8L3NlY3Rpb24+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJpc2RidC1uZXctcGFybXMiPgorCQk8dGl0bGU+SVNEQi1UIG9ubHkgcGFyYW1ldGVyczwvdGl0bGU+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LXBhcnQtcmVjIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD48L3RpdGxlPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+SWYgRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGlzICcwJyB0aGlzIGJpdC1maWVsZCByZXByZXNlbnRzIHdoZXRoZXIKKwkJCQl0aGUgY2hhbm5lbCBpcyBpbiBwYXJ0aWFsIHJlY2VwdGlvbiBtb2RlIG9yIG5vdC48L3BhcmE+CisKKwkJCTxwYXJhPklmICcxJyA8Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSQV8qPC9jb25zdGFudD4gdmFsdWVzIGFyZSBhc3NpZ25lZCB0byB0aGUgY2VudGVyIHNlZ21lbnQgYW5kCisJCQkJPGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUkFfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+IGhhcyB0byBiZSAnMScuPC9wYXJhPgorCisJCQk8cGFyYT5JZiBpbiBhZGRpdGlvbiA8Y29uc3RhbnQ+RFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGlzICcxJworCQkJCTxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50PiByZXByZXNlbnRzIHdoZXRoZXIgdGhpcyBJU0RCLVRzYiBjaGFubmVsCisJCQkJaXMgY29uc2lzdGluZyBvZiBvbmUgc2VnbWVudCBhbmQgbGF5ZXIgb3IgdGhyZWUgc2VnbWVudHMgYW5kIHR3byBsYXllcnMuPC9wYXJhPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIC0xIChBVVRPKTwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RidC1zb3VuZC1iY2FzdCI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJCTxwYXJhPlRoaXMgZmllbGQgcmVwcmVzZW50cyB3aGV0aGVyIHRoZSBvdGhlciBEVFZfSVNEQlRfKi1wYXJhbWV0ZXJzIGFyZQorCQkJCXJlZmVycmluZyB0byBhbiBJU0RCLVQgYW5kIGFuIElTREItVHNiIGNoYW5uZWwuIChTZWUgYWxzbworCQkJCTxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50PikuPC9wYXJhPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIC0xIChBVVRPKTwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RidC1zYi1jaC1pZCI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lEPC9jb25zdGFudD48L3RpdGxlPgorCisJCQk8cGFyYT5UaGlzIGZpZWxkIG9ubHkgYXBwbGllcyBpZiA8Y29uc3RhbnQ+RFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGlzICcxJy48L3BhcmE+CisKKwkJCTxwYXJhPihOb3RlIG9mIHRoZSBhdXRob3I6IFRoaXMgbWlnaHQgbm90IGJlIHRoZSBjb3JyZWN0IGRlc2NyaXB0aW9uIG9mIHRoZQorCQkJCTxjb25zdGFudD5TVUJDSEFOTkVMLUlEPC9jb25zdGFudD4gaW4gYWxsIGRldGFpbHMsIGJ1dCBpdCBpcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0ZWNobmljYWwKKwkJCQliYWNrZ3JvdW5kIG5lZWRlZCB0byBwcm9ncmFtIGEgZGV2aWNlKTwvcGFyYT4KKworCQkJPHBhcmE+QW4gSVNEQi1Uc2IgY2hhbm5lbCAoMSBvciAzIHNlZ21lbnRzKSBjYW4gYmUgYnJvYWRjYXN0ZWQgYWxvbmUgb3IgaW4gYQorCQkJCXNldCBvZiBjb25uZWN0ZWQgSVNEQi1Uc2IgY2hhbm5lbHMuIEluIHRoaXMgc2V0IG9mIGNoYW5uZWxzIGV2ZXJ5CisJCQkJY2hhbm5lbCBjYW4gYmUgcmVjZWl2ZWQgaW5kZXBlbmRlbnRseS4gVGhlIG51bWJlciBvZiBjb25uZWN0ZWQKKwkJCQlJU0RCLVRzYiBzZWdtZW50IGNhbiB2YXJ5LCBlLmcuIGRlcGVuZGluZyBvbiB0aGUgZnJlcXVlbmN5IHNwZWN0cnVtCisJCQkJYmFuZHdpZHRoIGF2YWlsYWJsZS48L3BhcmE+CisKKwkJCTxwYXJhPkV4YW1wbGU6IEFzc3VtZSA4IElTREItVHNiIGNvbm5lY3RlZCBzZWdtZW50cyBhcmUgYnJvYWRjYXN0ZWQuIFRoZQorCQkJCWJyb2FkY2FzdGVyIGhhcyBzZXZlcmFsIHBvc3NpYmlsaXRpZXMgdG8gcHV0IHRob3NlIGNoYW5uZWxzIGluIHRoZQorCQkJCWFpcjogQXNzdW1pbmcgYSBub3JtYWwgMTMtc2VnbWVudCBJU0RCLVQgc3BlY3RydW0gaGUgY2FuIGFsaWduIHRoZSA4CisJCQkJc2VnbWVudHMgZnJvbSBwb3NpdGlvbiAxLTggdG8gNS0xMyBvciBhbnl0aGluZyBpbiBiZXR3ZWVuLjwvcGFyYT4KKworCQkJPHBhcmE+VGhlIHVuZGVybHlpbmcgbGF5ZXIgb2Ygc2VnbWVudHMgYXJlIHN1YmNoYW5uZWxzOiBlYWNoIHNlZ21lbnQgaXMKKwkJCQljb25zaXN0aW5nIG9mIHNldmVyYWwgc3ViY2hhbm5lbHMgd2l0aCBhIHByZWRlZmluZWQgSURzLiBBIHN1Yi1jaGFubmVsCisJCQkJaXMgdXNlZCB0byBoZWxwIHRoZSBkZW1vZHVsYXRvciB0byBzeW5jaHJvbml6ZSBvbiB0aGUgY2hhbm5lbC48L3BhcmE+CisKKwkJCTxwYXJhPkFuIElTREItVCBjaGFubmVsIGlzIGFsd2F5cyBjZW50ZXJlZCBvdmVyIGFsbCBzdWItY2hhbm5lbHMuIEFzIGZvcgorCQkJCXRoZSBleGFtcGxlIGFib3ZlLCBpbiBJU0RCLVRzYiBpdCBpcyBubyBsb25nZXIgYXMgc2ltcGxlIGFzIHRoYXQuPC9wYXJhPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+VGhlIERUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lEPC9jb25zdGFudD4gcGFyYW1ldGVyIGlzIHVzZWQgdG8gZ2l2ZSB0aGUKKwkJCQlzdWItY2hhbm5lbCBJRCBvZiB0aGUgc2VnbWVudCB0byBiZSBkZW1vZHVsYXRlZC48L3BhcmE+CisKKwkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCAuLiA0MSwgLTEgKEFVVE8pPC9wYXJhPgorCQk8L3NlY3Rpb24+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LXNiLXNlZy1pZHgiPgorCisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+VGhpcyBmaWVsZCBvbmx5IGFwcGxpZXMgaWYgPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMScuPC9wYXJhPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfSURYPC9jb25zdGFudD4gZ2l2ZXMgdGhlIGluZGV4IG9mIHRoZSBzZWdtZW50IHRvIGJlCisJCQkJZGVtb2R1bGF0ZWQgZm9yIGFuIElTREItVHNiIGNoYW5uZWwgd2hlcmUgc2V2ZXJhbCBvZiB0aGVtIGFyZQorCQkJCXRyYW5zbWl0dGVkIGluIHRoZSBjb25uZWN0ZWQgbWFubmVyLjwvcGFyYT4KKworCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiAwIC4uIDxjb25zdGFudD5EVFZfSVNEQlRfU0JfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+IC0gMTwvcGFyYT4KKworCQkJPHBhcmE+Tm90ZTogVGhpcyB2YWx1ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBhbiBhdXRvbWF0aWMgY2hhbm5lbCBzZWFyY2guPC9wYXJhPgorCQk8L3NlY3Rpb24+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LXNiLXNlZy1jbnQiPgorCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfU0JfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+VGhpcyBmaWVsZCBvbmx5IGFwcGxpZXMgaWYgPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMScuPC9wYXJhPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBnaXZlcyB0aGUgdG90YWwgY291bnQgb2YgY29ubmVjdGVkIElTREItVHNiCisJCQkJY2hhbm5lbHMuPC9wYXJhPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDEgLi4gMTM8L3BhcmE+CisKKwkJCTxwYXJhPk5vdGU6IFRoaXMgdmFsdWUgY2Fubm90IGJlIGRldGVybWluZWQgYnkgYW4gYXV0b21hdGljIGNoYW5uZWwgc2VhcmNoLjwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RiLWhpZXJxLWxheWVycyI+CisJCQk8dGl0bGU+SGllcmFyY2hpY2FsIGxheWVyczwvdGl0bGU+CisKKwkJCTxwYXJhPklTREItVCBjaGFubmVscyBjYW4gYmUgY29kZWQgaGllcmFyY2hpY2FsbHkuIEFzIG9wcG9zZWQgdG8gRFZCLVQgaW4KKwkJCQlJU0RCLVQgaGllcmFyY2hpY2FsIGxheWVycyBjYW4gYmUgZGVjb2RlZCBzaW11bHRhbmVvdXNseS4gRm9yIHRoYXQKKwkJCQlyZWFzb24gYSBJU0RCLVQgZGVtb2R1bGF0b3IgaGFzIDMgdml0ZXJiaSBhbmQgMyByZWVkLXNvbG9tb24tZGVjb2RlcnMuPC9wYXJhPgorCisJCQk8cGFyYT5JU0RCLVQgaGFzIDMgaGllcmFyY2hpY2FsIGxheWVycyB3aGljaCBlYWNoIGNhbiB1c2UgYSBwYXJ0IG9mIHRoZQorCQkJCWF2YWlsYWJsZSBzZWdtZW50cy4gVGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cyBvdmVyIGFsbCBsYXllcnMgaGFzCisJCQkJdG8gMTMgaW4gSVNEQi1ULjwvcGFyYT4KKworCQkJPHNlY3Rpb24gaWQ9ImlzZGJ0LWxheWVyLWVuYSI+CisJCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJfRU5BQkxFRDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPkhpZXJhcmNoaWNhbCByZWNlcHRpb24gaW4gSVNEQi1UIGlzIGFjaGlldmVkIGJ5IGVuYWJsaW5nIG9yIGRpc2FibGluZworCQkJCQlsYXllcnMgaW4gdGhlIGRlY29kaW5nIHByb2Nlc3MuIFNldHRpbmcgYWxsIGJpdHMgb2YKKwkJCQkJPGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEPC9jb25zdGFudD4gdG8gJzEnIGZvcmNlcyBhbGwgbGF5ZXJzIChpZiBhcHBsaWNhYmxlKSB0byBiZQorCQkJCQlkZW1vZHVsYXRlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdC48L3BhcmE+CisKKwkJCQk8cGFyYT5JZiB0aGUgY2hhbm5lbCBpcyBpbiB0aGUgcGFydGlhbCByZWNlcHRpb24gbW9kZQorCQkJCQkoPGNvbnN0YW50PkRUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTjwvY29uc3RhbnQ+ID0gMSkgdGhlIGNlbnRyYWwgc2VnbWVudCBjYW4gYmUgZGVjb2RlZAorCQkJCQlpbmRlcGVuZGVudGx5IG9mIHRoZSBvdGhlciAxMiBzZWdtZW50cy4gSW4gdGhhdCBtb2RlIGxheWVyIEEgaGFzIHRvCisJCQkJCWhhdmUgYSA8Y29uc3RhbnQ+U0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+IG9mIDEuPC9wYXJhPgorCisJCQkJPHBhcmE+SW4gSVNEQi1Uc2Igb25seSBsYXllciBBIGlzIHVzZWQsIGl0IGNhbiBiZSAxIG9yIDMgaW4gSVNEQi1Uc2IKKwkJCQkJYWNjb3JkaW5nIHRvIDxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50Pi4gPGNvbnN0YW50PlNFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBtdXN0IGJlIGZpbGxlZAorCQkJCQlhY2NvcmRpbmdseS48L3BhcmE+CisKKwkJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDB4MSwgMHgyLCAweDQgKHwtYWJsZSk8L3BhcmE+CisKKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMDowXTwvY29uc3RhbnQ+IC0gbGF5ZXIgQTwvcGFyYT4KKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMToxXTwvY29uc3RhbnQ+IC0gbGF5ZXIgQjwvcGFyYT4KKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMjoyXTwvY29uc3RhbnQ+IC0gbGF5ZXIgQzwvcGFyYT4KKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMzE6M108L2NvbnN0YW50PiB1bnVzZWQ8L3BhcmE+CisJCQk8L3NlY3Rpb24+CisKKwkJCTxzZWN0aW9uIGlkPSJpc2RidC1sYXllci1mZWMiPgorCQkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSKl9GRUM8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDxjb25zdGFudD5GRUNfQVVUTzwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzFfMjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzJfMzwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzNfNDwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzVfNjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzdfODwvY29uc3RhbnQ+PC9wYXJhPgorCQkJPC9zZWN0aW9uPgorCisJCQk8c2VjdGlvbiBpZD0iaXNkYnQtbGF5ZXItbW9kIj4KKwkJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfTU9EVUxBVElPTjwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogPGNvbnN0YW50PlFBTV9BVVRPPC9jb25zdGFudD4sIFFQPGNvbnN0YW50PlNLLCBRQU1fMTY8L2NvbnN0YW50PiwgPGNvbnN0YW50PlFBTV82NDwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RFFQU0s8L2NvbnN0YW50PjwvcGFyYT4KKworCQkJCTxwYXJhPk5vdGU6IElmIGxheWVyIEMgaXMgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD4gbGF5ZXIgQiBoYXMgdG8gYmUgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD4uIElmIGxheWVyIEIgaXMgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD4KKwkJCQkJYW5kIDxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50Pj0wIGxheWVyIGhhcyB0byBiZSA8Y29uc3RhbnQ+RFFQU0s8L2NvbnN0YW50Pi48L3BhcmE+CisJCQk8L3NlY3Rpb24+CisKKwkJCTxzZWN0aW9uIGlkPSJpc2RidC1sYXllci1zZWctY250Ij4KKwkJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIC0xIChBVVRPKTwvcGFyYT4KKworCQkJCTxwYXJhPk5vdGU6IFRydXRoIHRhYmxlIGZvciA8Y29uc3RhbnQ+RFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGFuZAorCQkJCQk8Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5MQVlFUjwvY29uc3RhbnQ+Kl9TRUdNRU5UX0NPVU5UPC9wYXJhPgorCisJCQkJPGluZm9ybWFsdGFibGUgaWQ9ImlzZGJ0LWxheWVyX3NlZy1jbnQtdGFibGUiPgorCQkJCQk8dGdyb3VwIGNvbHM9IjYiPgorCisJCQkJCQk8dGJvZHk+CisJCQkJCQkJPHJvdz4KKwkJCQkJCQkJPGVudHJ5PlBSPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PlNCPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PkxheWVyIEEgd2lkdGg8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+TGF5ZXIgQiB3aWR0aDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT5MYXllciBDIHdpZHRoPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PnRvdGFsIHdpZHRoPC9lbnRyeT4KKwkJCQkJCQk8L3Jvdz4KKworCQkJCQkJCTxyb3c+CisJCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MSAuLiAxMzwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xIC4uIDEzPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MTM8L2VudHJ5PgorCQkJCQkJCTwvcm93PgorCisJCQkJCQkJPHJvdz4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MSAuLiAxMzwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xMzwvZW50cnk+CisJCQkJCQkJPC9yb3c+CisKKwkJCQkJCQk8cm93PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCTwvcm93PgorCisJCQkJCQkJPHJvdz4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MTwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjI8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xMzwvZW50cnk+CisJCQkJCQkJPC9yb3c+CisJCQkJCQk8L3Rib2R5PgorCisJCQkJCTwvdGdyb3VwPgorCQkJCTwvaW5mb3JtYWx0YWJsZT4KKworCQkJPC9zZWN0aW9uPgorCisJCQk8c2VjdGlvbiBpZD0iaXNkYnRfbGF5ZXJfdF9pbnRlcmwiPgorCQkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSKl9USU1FX0lOVEVSTEVBVklORzwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCwgMSwgMiwgMywgLTEgKEFVVE8pPC9wYXJhPgorCisJCQkJPHBhcmE+Tm90ZTogVGhlIHJlYWwgaW50ZXItbGVhdmVyIGRlcHRoLW5hbWVzIGRlcGVuZCBvbiB0aGUgbW9kZSAoZmZ0LXNpemUpOyB0aGUgdmFsdWVzCisJCQkJCWhlcmUgYXJlIHJlZmVycmluZyB0byB3aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgVE1DQy1zdHJ1Y3R1cmUgLQorCQkJCQlpbmRlcGVuZGVudCBvZiB0aGUgbW9kZS48L3BhcmE+CisJCQk8L3NlY3Rpb24+CisJCTwvc2VjdGlvbj4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2tkYXBpLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIva2RhcGkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjc0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2tkYXBpLnhtbApAQCAtMCwwICsxLDIzMDkgQEAKKzx0aXRsZT5LZXJuZWwgRGVtdXggQVBJPC90aXRsZT4KKzxwYXJhPlRoZSBrZXJuZWwgZGVtdXggQVBJIGRlZmluZXMgYSBkcml2ZXItaW50ZXJuYWwgaW50ZXJmYWNlIGZvciByZWdpc3RlcmluZyBsb3ctbGV2ZWwsCitoYXJkd2FyZSBzcGVjaWZpYyBkcml2ZXIgdG8gYSBoYXJkd2FyZSBpbmRlcGVuZGVudCBkZW11eCBsYXllci4gSXQgaXMgb25seSBvZiBpbnRlcmVzdCBmb3IKK0RWQiBkZXZpY2UgZHJpdmVyIHdyaXRlcnMuIFRoZSBoZWFkZXIgZmlsZSBmb3IgdGhpcyBBUEkgaXMgbmFtZWQgPGVtcGhhc2lzIHJvbGU9InR0Ij5kZW11eC5oPC9lbXBoYXNpcz4gYW5kIGxvY2F0ZWQgaW4KKzxlbXBoYXNpcyByb2xlPSJ0dCI+ZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmU8L2VtcGhhc2lzPi4KKzwvcGFyYT4KKzxwYXJhPk1haW50YWluZXIgbm90ZTogVGhpcyBzZWN0aW9uIG11c3QgYmUgcmV2aWV3ZWQuIEl0IGlzIHByb2JhYmx5IG91dCBvZiBkYXRlLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ia2VybmVsX2RlbXV4X2RhdGFfdHlwZXMiPgorPHRpdGxlPktlcm5lbCBEZW11eCBEYXRhIFR5cGVzPC90aXRsZT4KKworCis8c2VjdGlvbiBpZD0iZG14X3N1Y2Nlc3NfdCI+Cis8dGl0bGU+ZG14X3N1Y2Nlc3NfdDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSB7CisgICBETVhfT0sgPSAwLCAvJiN4MjJDNjsgUmVjZWl2ZWQgT2sgJiN4MjJDNjsvCisgICBETVhfTEVOR1RIX0VSUk9SLCAvJiN4MjJDNjsgSW5jb3JyZWN0IGxlbmd0aCAmI3gyMkM2Oy8KKyAgIERNWF9PVkVSUlVOX0VSUk9SLCAvJiN4MjJDNjsgUmVjZWl2ZXIgcmluZyBidWZmZXIgb3ZlcnJ1biAmI3gyMkM2Oy8KKyAgIERNWF9DUkNfRVJST1IsIC8mI3gyMkM2OyBJbmNvcnJlY3QgQ1JDICYjeDIyQzY7LworICAgRE1YX0ZSQU1FX0VSUk9SLCAvJiN4MjJDNjsgRnJhbWUgYWxpZ25tZW50IGVycm9yICYjeDIyQzY7LworICAgRE1YX0ZJRk9fRVJST1IsIC8mI3gyMkM2OyBSZWNlaXZlciBGSUZPIG92ZXJydW4gJiN4MjJDNjsvCisgICBETVhfTUlTU0VEX0VSUk9SIC8mI3gyMkM2OyBSZWNlaXZlciBtaXNzZWQgcGFja2V0ICYjeDIyQzY7LworIH0gZG14X3N1Y2Nlc3NfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJ0c19maWx0ZXJfdHlwZXMiPgorPHRpdGxlPlRTIGZpbHRlciB0eXBlczwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisgLyYjeDIyQzY7IFRTIHBhY2tldCByZWNlcHRpb24gJiN4MjJDNjsvCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKworIC8mI3gyMkM2OyBUUyBmaWx0ZXIgdHlwZSBmb3Igc2V0X3R5cGUoKSAmI3gyMkM2Oy8KKworICNkZWZpbmUgVFNfUEFDS0VUICAgICAgIDEgICAvJiN4MjJDNjsgc2VuZCBUUyBwYWNrZXRzICgxODggYnl0ZXMpIHRvIGNhbGxiYWNrIChkZWZhdWx0KSAmI3gyMkM2Oy8KKyAjZGVmaW5lIFRTX1BBWUxPQURfT05MWSAyICAgLyYjeDIyQzY7IGluIGNhc2UgVFNfUEFDS0VUIGlzIHNldCwgb25seSBzZW5kIHRoZSBUUworCQkJCXBheWxvYWQgKCYjeDAwM0M7PTE4NCBieXRlcyBwZXIgcGFja2V0KSB0byBjYWxsYmFjayAmI3gyMkM2Oy8KKyAjZGVmaW5lIFRTX0RFQ09ERVIgICAgICA0ICAgLyYjeDIyQzY7IHNlbmQgc3RyZWFtIHRvIGJ1aWx0LWluIGRlY29kZXIgKGlmIHByZXNlbnQpICYjeDIyQzY7LworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImRteF90c19wZXNfdCI+Cis8dGl0bGU+ZG14X3RzX3Blc190PC90aXRsZT4KKzxwYXJhPlRoZSBzdHJ1Y3R1cmUKKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0KKyB7CisJIERNWF9UU19QRVNfQVVESU8sICAgLyYjeDIyQzY7IGFsc28gc2VuZCBwYWNrZXRzIHRvIGF1ZGlvIGRlY29kZXIgKGlmIGl0IGV4aXN0cykgJiN4MjJDNjsvCisJIERNWF9UU19QRVNfVklERU8sICAgLyYjeDIyQzY7IC4uLiAmI3gyMkM2Oy8KKwkgRE1YX1RTX1BFU19URUxFVEVYVCwKKwkgRE1YX1RTX1BFU19TVUJUSVRMRSwKKwkgRE1YX1RTX1BFU19QQ1IsCisJIERNWF9UU19QRVNfT1RIRVIsCisgfSBkbXhfdHNfcGVzX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+ZGVzY3JpYmVzIHRoZSBQRVMgdHlwZSBmb3IgZmlsdGVycyB3aGljaCB3cml0ZSB0byBhIGJ1aWx0LWluIGRlY29kZXIuIFRoZSBjb3JyZXNwb25kIChhbmQKK3Nob3VsZCBiZSBrZXB0IGlkZW50aWNhbCkgdG8gdGhlIHR5cGVzIGluIHRoZSBkZW11eCBkZXZpY2UuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGRteF90c19mZWVkX3MgeworCSBpbnQgaXNfZmlsdGVyaW5nOyAvJiN4MjJDNjsgU2V0IHRvIG5vbi16ZXJvIHdoZW4gZmlsdGVyaW5nIGluIHByb2dyZXNzICYjeDIyQzY7LworCSBzdHJ1Y3QgZG14X2RlbXV4X3MmI3gyMkM2OyBwYXJlbnQ7IC8mI3gyMkM2OyBCYWNrLXBvaW50ZXIgJiN4MjJDNjsvCisJIHZvaWQmI3gyMkM2OyBwcml2OyAvJiN4MjJDNjsgUG9pbnRlciB0byBwcml2YXRlIGRhdGEgb2YgdGhlIEFQSSBjbGllbnQgJiN4MjJDNjsvCisJIGludCAoJiN4MjJDNjtzZXQpIChzdHJ1Y3QgZG14X3RzX2ZlZWRfcyYjeDIyQzY7IGZlZWQsCisJCSAgICAgX191MTYgcGlkLAorCQkgICAgIHNpemVfdCBjYWxsYmFja19sZW5ndGgsCisJCSAgICAgc2l6ZV90IGNpcmN1bGFyX2J1ZmZlcl9zaXplLAorCQkgICAgIGludCBkZXNjcmFtYmxlLAorCQkgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0KTsKKwkgaW50ICgmI3gyMkM2O3N0YXJ0X2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfdHNfZmVlZF9zJiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjtzdG9wX2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfdHNfZmVlZF9zJiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjtzZXRfdHlwZSkgKHN0cnVjdCBkbXhfdHNfZmVlZF9zJiN4MjJDNjsgZmVlZCwKKwkJCSAgaW50IHR5cGUsCisJCQkgIGRteF90c19wZXNfdCBwZXNfdHlwZSk7CisgfTsKKworIHR5cGVkZWYgc3RydWN0IGRteF90c19mZWVkX3MgZG14X3RzX2ZlZWRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisgLyYjeDIyQzY7IFBFUyBwYWNrZXQgcmVjZXB0aW9uIChub3Qgc3VwcG9ydGVkIHlldCkgJiN4MjJDNjsvCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKworIHR5cGVkZWYgc3RydWN0IGRteF9wZXNfZmlsdGVyX3MgeworCSBzdHJ1Y3QgZG14X3Blc19zJiN4MjJDNjsgcGFyZW50OyAvJiN4MjJDNjsgQmFjay1wb2ludGVyICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgLyYjeDIyQzY7IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIG9mIHRoZSBBUEkgY2xpZW50ICYjeDIyQzY7LworIH0gZG14X3Blc19maWx0ZXJfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IGRteF9wZXNfZmVlZF9zIHsKKwkgaW50IGlzX2ZpbHRlcmluZzsgLyYjeDIyQzY7IFNldCB0byBub24temVybyB3aGVuIGZpbHRlcmluZyBpbiBwcm9ncmVzcyAmI3gyMkM2Oy8KKwkgc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgcGFyZW50OyAvJiN4MjJDNjsgQmFjay1wb2ludGVyICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgLyYjeDIyQzY7IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIG9mIHRoZSBBUEkgY2xpZW50ICYjeDIyQzY7LworCSBpbnQgKCYjeDIyQzY7c2V0KSAoc3RydWN0IGRteF9wZXNfZmVlZF9zJiN4MjJDNjsgZmVlZCwKKwkJICAgICBfX3UxNiBwaWQsCisJCSAgICAgc2l6ZV90IGNpcmN1bGFyX2J1ZmZlcl9zaXplLAorCQkgICAgIGludCBkZXNjcmFtYmxlLAorCQkgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0KTsKKwkgaW50ICgmI3gyMkM2O3N0YXJ0X2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfcGVzX2ZlZWRfcyYjeDIyQzY7IGZlZWQpOworCSBpbnQgKCYjeDIyQzY7c3RvcF9maWx0ZXJpbmcpIChzdHJ1Y3QgZG14X3Blc19mZWVkX3MmI3gyMkM2OyBmZWVkKTsKKwkgaW50ICgmI3gyMkM2O2FsbG9jYXRlX2ZpbHRlcikgKHN0cnVjdCBkbXhfcGVzX2ZlZWRfcyYjeDIyQzY7IGZlZWQsCisJCQkJIGRteF9wZXNfZmlsdGVyX3QmI3gyMkM2OyYjeDIyQzY7IGZpbHRlcik7CisJIGludCAoJiN4MjJDNjtyZWxlYXNlX2ZpbHRlcikgKHN0cnVjdCBkbXhfcGVzX2ZlZWRfcyYjeDIyQzY7IGZlZWQsCisJCQkJZG14X3Blc19maWx0ZXJfdCYjeDIyQzY7IGZpbHRlcik7CisgfSBkbXhfcGVzX2ZlZWRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IHsKKwkgX191OCBmaWx0ZXJfdmFsdWUgW0RNWF9NQVhfRklMVEVSX1NJWkVdOworCSBfX3U4IGZpbHRlcl9tYXNrIFtETVhfTUFYX0ZJTFRFUl9TSVpFXTsKKwkgc3RydWN0IGRteF9zZWN0aW9uX2ZlZWRfcyYjeDIyQzY7IHBhcmVudDsgLyYjeDIyQzY7IEJhY2stcG9pbnRlciAmI3gyMkM2Oy8KKwkgdm9pZCYjeDIyQzY7IHByaXY7IC8mI3gyMkM2OyBQb2ludGVyIHRvIHByaXZhdGUgZGF0YSBvZiB0aGUgQVBJIGNsaWVudCAmI3gyMkM2Oy8KKyB9IGRteF9zZWN0aW9uX2ZpbHRlcl90OworPC9wcm9ncmFtbGlzdGluZz4KKyA8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGRteF9zZWN0aW9uX2ZlZWRfcyB7CisJIGludCBpc19maWx0ZXJpbmc7IC8mI3gyMkM2OyBTZXQgdG8gbm9uLXplcm8gd2hlbiBmaWx0ZXJpbmcgaW4gcHJvZ3Jlc3MgJiN4MjJDNjsvCisJIHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IHBhcmVudDsgLyYjeDIyQzY7IEJhY2stcG9pbnRlciAmI3gyMkM2Oy8KKwkgdm9pZCYjeDIyQzY7IHByaXY7IC8mI3gyMkM2OyBQb2ludGVyIHRvIHByaXZhdGUgZGF0YSBvZiB0aGUgQVBJIGNsaWVudCAmI3gyMkM2Oy8KKwkgaW50ICgmI3gyMkM2O3NldCkgKHN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkX3MmI3gyMkM2OyBmZWVkLAorCQkgICAgIF9fdTE2IHBpZCwKKwkJICAgICBzaXplX3QgY2lyY3VsYXJfYnVmZmVyX3NpemUsCisJCSAgICAgaW50IGRlc2NyYW1ibGUsCisJCSAgICAgaW50IGNoZWNrX2NyYyk7CisJIGludCAoJiN4MjJDNjthbGxvY2F0ZV9maWx0ZXIpIChzdHJ1Y3QgZG14X3NlY3Rpb25fZmVlZF9zJiN4MjJDNjsgZmVlZCwKKwkJCQkgZG14X3NlY3Rpb25fZmlsdGVyX3QmI3gyMkM2OyYjeDIyQzY7IGZpbHRlcik7CisJIGludCAoJiN4MjJDNjtyZWxlYXNlX2ZpbHRlcikgKHN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkX3MmI3gyMkM2OyBmZWVkLAorCQkJCWRteF9zZWN0aW9uX2ZpbHRlcl90JiN4MjJDNjsgZmlsdGVyKTsKKwkgaW50ICgmI3gyMkM2O3N0YXJ0X2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkX3MmI3gyMkM2OyBmZWVkKTsKKwkgaW50ICgmI3gyMkM2O3N0b3BfZmlsdGVyaW5nKSAoc3RydWN0IGRteF9zZWN0aW9uX2ZlZWRfcyYjeDIyQzY7IGZlZWQpOworIH07CisgdHlwZWRlZiBzdHJ1Y3QgZG14X3NlY3Rpb25fZmVlZF9zIGRteF9zZWN0aW9uX2ZlZWRfdDsKKworIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisgLyYjeDIyQzY7IENhbGxiYWNrIGZ1bmN0aW9ucyAmI3gyMkM2Oy8KKyAvJiN4MjJDNjstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjeDIyQzY7LworCisgdHlwZWRlZiBpbnQgKCYjeDIyQzY7ZG14X3RzX2NiKSAoIF9fdTggJiN4MjJDNjsgYnVmZmVyMSwKKwkJCSAgICBzaXplX3QgYnVmZmVyMV9sZW5ndGgsCisJCQkgICAgX191OCAmI3gyMkM2OyBidWZmZXIyLAorCQkJICAgIHNpemVfdCBidWZmZXIyX2xlbmd0aCwKKwkJCSAgICBkbXhfdHNfZmVlZF90JiN4MjJDNjsgc291cmNlLAorCQkJICAgIGRteF9zdWNjZXNzX3Qgc3VjY2Vzcyk7CisKKyB0eXBlZGVmIGludCAoJiN4MjJDNjtkbXhfc2VjdGlvbl9jYikgKCBfX3U4ICYjeDIyQzY7IGJ1ZmZlcjEsCisJCQkJIHNpemVfdCBidWZmZXIxX2xlbiwKKwkJCQkgX191OCAmI3gyMkM2OyBidWZmZXIyLAorCQkJCSBzaXplX3QgYnVmZmVyMl9sZW4sCisJCQkJIGRteF9zZWN0aW9uX2ZpbHRlcl90ICYjeDIyQzY7IHNvdXJjZSwKKwkJCQkgZG14X3N1Y2Nlc3NfdCBzdWNjZXNzKTsKKworIHR5cGVkZWYgaW50ICgmI3gyMkM2O2RteF9wZXNfY2IpICggX191OCAmI3gyMkM2OyBidWZmZXIxLAorCQkJICAgICBzaXplX3QgYnVmZmVyMV9sZW4sCisJCQkgICAgIF9fdTggJiN4MjJDNjsgYnVmZmVyMiwKKwkJCSAgICAgc2l6ZV90IGJ1ZmZlcjJfbGVuLAorCQkJICAgICBkbXhfcGVzX2ZpbHRlcl90JiN4MjJDNjsgc291cmNlLAorCQkJICAgICBkbXhfc3VjY2Vzc190IHN1Y2Nlc3MpOworCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKyAvJiN4MjJDNjsgRFZCIEZyb250LUVuZCAmI3gyMkM2Oy8KKyAvJiN4MjJDNjstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjeDIyQzY7LworCisgdHlwZWRlZiBlbnVtIHsKKwkgRE1YX09USEVSX0ZFID0gMCwKKwkgRE1YX1NBVEVMTElURV9GRSwKKwkgRE1YX0NBQkxFX0ZFLAorCSBETVhfVEVSUkVTVFJJQUxfRkUsCisJIERNWF9MVkRTX0ZFLAorCSBETVhfQVNJX0ZFLCAvJiN4MjJDNjsgRFZCLUFTSSBpbnRlcmZhY2UgJiN4MjJDNjsvCisJIERNWF9NRU1PUllfRkUKKyB9IGRteF9mcm9udGVuZF9zb3VyY2VfdDsKKworIHR5cGVkZWYgc3RydWN0IHsKKwkgLyYjeDIyQzY7IFRoZSBmb2xsb3dpbmcgY2hhciYjeDIyQzY7IGZpZWxkcyBwb2ludCB0byBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5ncyAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IGlkOyAgICAgICAgICAgICAgICAgICAgLyYjeDIyQzY7IFVuaXF1ZSBmcm9udC1lbmQgaWRlbnRpZmllciAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IHZlbmRvcjsgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE5hbWUgb2YgdGhlIGZyb250LWVuZCB2ZW5kb3IgJiN4MjJDNjsvCisJIGNoYXImI3gyMkM2OyBtb2RlbDsgICAgICAgICAgICAgICAgIC8mI3gyMkM2OyBOYW1lIG9mIHRoZSBmcm9udC1lbmQgbW9kZWwgJiN4MjJDNjsvCisJIHN0cnVjdCBsaXN0X2hlYWQgY29ubmVjdGl2aXR5X2xpc3Q7IC8mI3gyMkM2OyBMaXN0IG9mIGZyb250LWVuZHMgdGhhdCBjYW4KKwkJCQkJCWJlIGNvbm5lY3RlZCB0byBhIHBhcnRpY3VsYXIKKwkJCQkJCWRlbXV4ICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgICAgIC8mI3gyMkM2OyBQb2ludGVyIHRvIHByaXZhdGUgZGF0YSBvZiB0aGUgQVBJIGNsaWVudCAmI3gyMkM2Oy8KKwkgZG14X2Zyb250ZW5kX3NvdXJjZV90IHNvdXJjZTsKKyB9IGRteF9mcm9udGVuZF90OworCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKyAvJiN4MjJDNjsgTVBFRy0yIFRTIERlbXV4ICYjeDIyQzY7LworIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisKKyAvJiN4MjJDNjsKKyAgJiN4MjJDNjsgRmxhZ3MgT1InZWQgaW4gdGhlIGNhcGFiaWxpdGVzIGZpZWxkIG9mIHN0cnVjdCBkbXhfZGVtdXhfcy4KKyAgJiN4MjJDNjsvCisKKyAjZGVmaW5lIERNWF9UU19GSUxURVJJTkcgICAgICAgICAgICAgICAgICAgICAgICAxCisgI2RlZmluZSBETVhfUEVTX0ZJTFRFUklORyAgICAgICAgICAgICAgICAgICAgICAgMgorICNkZWZpbmUgRE1YX1NFQ1RJT05fRklMVEVSSU5HICAgICAgICAgICAgICAgICAgIDQKKyAjZGVmaW5lIERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HICAgICAgICAgICAgICA4ICAgIC8mI3gyMkM2OyB3cml0ZSgpIGF2YWlsYWJsZSAmI3gyMkM2Oy8KKyAjZGVmaW5lIERNWF9DUkNfQ0hFQ0tJTkcgICAgICAgICAgICAgICAgICAgICAgICAxNgorICNkZWZpbmUgRE1YX1RTX0RFU0NSQU1CTElORyAgICAgICAgICAgICAgICAgICAgIDMyCisgI2RlZmluZSBETVhfU0VDVElPTl9QQVlMT0FEX0RFU0NSQU1CTElORyAgICAgICAgNjQKKyAjZGVmaW5lIERNWF9NQUNfQUREUkVTU19ERVNDUkFNQkxJTkcgICAgICAgICAgICAxMjgKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkZW11eF9kZW11eF90Ij4KKzx0aXRsZT5kZW11eF9kZW11eF90PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgLyYjeDIyQzY7CisgICYjeDIyQzY7IERNWF9GRV9FTlRSWSgpOiBDYXN0cyBlbGVtZW50cyBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkCisgICYjeDIyQzY7IGZyb250LWVuZHMgZnJvbSB0aGUgZ2VuZXJpYyB0eXBlIHN0cnVjdCBsaXN0X2hlYWQKKyAgJiN4MjJDNjsgdG8gdGhlIHR5cGUgJiN4MjJDNjsgZG14X2Zyb250ZW5kX3QKKyAgJiN4MjJDNjsuCisgJiN4MjJDNjsvCisKKyAjZGVmaW5lIERNWF9GRV9FTlRSWShsaXN0KSBsaXN0X2VudHJ5KGxpc3QsIGRteF9mcm9udGVuZF90LCBjb25uZWN0aXZpdHlfbGlzdCkKKworIHN0cnVjdCBkbXhfZGVtdXhfcyB7CisJIC8mI3gyMkM2OyBUaGUgZm9sbG93aW5nIGNoYXImI3gyMkM2OyBmaWVsZHMgcG9pbnQgdG8gTlVMTCB0ZXJtaW5hdGVkIHN0cmluZ3MgJiN4MjJDNjsvCisJIGNoYXImI3gyMkM2OyBpZDsgICAgICAgICAgICAgICAgICAgIC8mI3gyMkM2OyBVbmlxdWUgZGVtdXggaWRlbnRpZmllciAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IHZlbmRvcjsgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE5hbWUgb2YgdGhlIGRlbXV4IHZlbmRvciAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IG1vZGVsOyAgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE5hbWUgb2YgdGhlIGRlbXV4IG1vZGVsICYjeDIyQzY7LworCSBfX3UzMiBjYXBhYmlsaXRpZXM7ICAgICAgICAgIC8mI3gyMkM2OyBCaXRmaWVsZCBvZiBjYXBhYmlsaXR5IGZsYWdzICYjeDIyQzY7LworCSBkbXhfZnJvbnRlbmRfdCYjeDIyQzY7IGZyb250ZW5kOyAgICAvJiN4MjJDNjsgRnJvbnQtZW5kIGNvbm5lY3RlZCB0byB0aGUgZGVtdXggJiN4MjJDNjsvCisJIHN0cnVjdCBsaXN0X2hlYWQgcmVnX2xpc3Q7ICAgLyYjeDIyQzY7IExpc3Qgb2YgcmVnaXN0ZXJlZCBkZW11eGVzICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgICAgICAgICAgICAgICAgICAvJiN4MjJDNjsgUG9pbnRlciB0byBwcml2YXRlIGRhdGEgb2YgdGhlIEFQSSBjbGllbnQgJiN4MjJDNjsvCisJIGludCB1c2VyczsgICAgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE51bWJlciBvZiB1c2VycyAmI3gyMkM2Oy8KKwkgaW50ICgmI3gyMkM2O29wZW4pIChzdHJ1Y3QgZG14X2RlbXV4X3MmI3gyMkM2OyBkZW11eCk7CisJIGludCAoJiN4MjJDNjtjbG9zZSkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4KTsKKwkgaW50ICgmI3gyMkM2O3dyaXRlKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsIGNvbnN0IGNoYXImI3gyMkM2OyBidWYsIHNpemVfdCBjb3VudCk7CisJIGludCAoJiN4MjJDNjthbGxvY2F0ZV90c19mZWVkKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsCisJCQkJICBkbXhfdHNfZmVlZF90JiN4MjJDNjsmI3gyMkM2OyBmZWVkLAorCQkJCSAgZG14X3RzX2NiIGNhbGxiYWNrKTsKKwkgaW50ICgmI3gyMkM2O3JlbGVhc2VfdHNfZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSBkbXhfdHNfZmVlZF90JiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjthbGxvY2F0ZV9wZXNfZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgIGRteF9wZXNfZmVlZF90JiN4MjJDNjsmI3gyMkM2OyBmZWVkLAorCQkJCSAgIGRteF9wZXNfY2IgY2FsbGJhY2spOworCSBpbnQgKCYjeDIyQzY7cmVsZWFzZV9wZXNfZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgZG14X3Blc19mZWVkX3QmI3gyMkM2OyBmZWVkKTsKKwkgaW50ICgmI3gyMkM2O2FsbG9jYXRlX3NlY3Rpb25fZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgICAgICBkbXhfc2VjdGlvbl9mZWVkX3QmI3gyMkM2OyYjeDIyQzY7IGZlZWQsCisJCQkJICAgICAgIGRteF9zZWN0aW9uX2NiIGNhbGxiYWNrKTsKKwkgaW50ICgmI3gyMkM2O3JlbGVhc2Vfc2VjdGlvbl9mZWVkKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsCisJCQkJICAgICAgZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjtkZXNjcmFtYmxlX21hY19hZGRyZXNzKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsCisJCQkJCV9fdTgmI3gyMkM2OyBidWZmZXIxLAorCQkJCQlzaXplX3QgYnVmZmVyMV9sZW5ndGgsCisJCQkJCV9fdTgmI3gyMkM2OyBidWZmZXIyLAorCQkJCQlzaXplX3QgYnVmZmVyMl9sZW5ndGgsCisJCQkJCV9fdTE2IHBpZCk7CisJIGludCAoJiN4MjJDNjtkZXNjcmFtYmxlX3NlY3Rpb25fcGF5bG9hZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCQkgICAgX191OCYjeDIyQzY7IGJ1ZmZlcjEsCisJCQkJCSAgICBzaXplX3QgYnVmZmVyMV9sZW5ndGgsCisJCQkJCSAgICBfX3U4JiN4MjJDNjsgYnVmZmVyMiwgc2l6ZV90IGJ1ZmZlcjJfbGVuZ3RoLAorCQkJCQkgICAgX191MTYgcGlkKTsKKwkgaW50ICgmI3gyMkM2O2FkZF9mcm9udGVuZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJICAgICAgZG14X2Zyb250ZW5kX3QmI3gyMkM2OyBmcm9udGVuZCk7CisJIGludCAoJiN4MjJDNjtyZW1vdmVfZnJvbnRlbmQpIChzdHJ1Y3QgZG14X2RlbXV4X3MmI3gyMkM2OyBkZW11eCwKKwkJCQkgZG14X2Zyb250ZW5kX3QmI3gyMkM2OyBmcm9udGVuZCk7CisJIHN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyAoJiN4MjJDNjtnZXRfZnJvbnRlbmRzKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgpOworCSBpbnQgKCYjeDIyQzY7Y29ubmVjdF9mcm9udGVuZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgZG14X2Zyb250ZW5kX3QmI3gyMkM2OyBmcm9udGVuZCk7CisJIGludCAoJiN4MjJDNjtkaXNjb25uZWN0X2Zyb250ZW5kKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgpOworCisKKwkgLyYjeDIyQzY7IGFkZGVkIGJlY2F1c2UganMgY2Fubm90IGtlZXAgdHJhY2sgb2YgdGhlc2UgaGltc2VsZiAmI3gyMkM2Oy8KKwkgaW50ICgmI3gyMkM2O2dldF9wZXNfcGlkcykgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LCBfX3UxNiAmI3gyMkM2O3BpZHMpOworIH07CisgdHlwZWRlZiBzdHJ1Y3QgZG14X2RlbXV4X3MgZG14X2RlbXV4X3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iZGVtdXhfZGlyZWN0b3J5Ij4KKzx0aXRsZT5EZW11eCBkaXJlY3Rvcnk8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyAvJiN4MjJDNjsKKyAgJiN4MjJDNjsgRE1YX0RJUl9FTlRSWSgpOiBDYXN0cyBlbGVtZW50cyBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkCisgICYjeDIyQzY7IGRlbXV4ZXMgZnJvbSB0aGUgZ2VuZXJpYyB0eXBlIHN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyB0byB0aGUgdHlwZSBkbXhfZGVtdXhfdAorICAmI3gyMkM2Oy4KKyAgJiN4MjJDNjsvCisKKyAjZGVmaW5lIERNWF9ESVJfRU5UUlkobGlzdCkgbGlzdF9lbnRyeShsaXN0LCBkbXhfZGVtdXhfdCwgcmVnX2xpc3QpCisKKyBpbnQgZG14X3JlZ2lzdGVyX2RlbXV4IChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4KTsKKyBpbnQgZG14X3VucmVnaXN0ZXJfZGVtdXggKGRteF9kZW11eF90JiN4MjJDNjsgZGVtdXgpOworIHN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyBkbXhfZ2V0X2RlbXV4ZXMgKHZvaWQpOworPC9wcm9ncmFtbGlzdGluZz4KKyA8L3NlY3Rpb24+PC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImRlbXV4X2RpcmVjdG9yeV9hcGkiPgorPHRpdGxlPkRlbXV4IERpcmVjdG9yeSBBUEk8L3RpdGxlPgorPHBhcmE+VGhlIGRlbXV4IGRpcmVjdG9yeSBpcyBhIExpbnV4IGtlcm5lbC13aWRlIGZhY2lsaXR5IGZvciByZWdpc3RlcmluZyBhbmQgYWNjZXNzaW5nIHRoZQorTVBFRy0yIFRTIGRlbXV4ZXMgaW4gdGhlIHN5c3RlbS4gUnVuLXRpbWUgcmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcgb2YgZGVtdXggZHJpdmVycworaXMgcG9zc2libGUgdXNpbmcgdGhpcyBBUEkuCis8L3BhcmE+Cis8cGFyYT5BbGwgZGVtdXggZHJpdmVycyBpbiB0aGUgZGlyZWN0b3J5IGltcGxlbWVudCB0aGUgYWJzdHJhY3QgaW50ZXJmYWNlIGRteF9kZW11eF90LgorPC9wYXJhPgorCis8c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmRteF9yZWdpc3Rlcl9kZW11eCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gbWFrZXMgYSBkZW11eCBkcml2ZXIgaW50ZXJmYWNlIGF2YWlsYWJsZSB0byB0aGUgTGludXgga2VybmVsLiBJdCBpcworIHVzdWFsbHkgY2FsbGVkIGJ5IHRoZSBpbml0X21vZHVsZSgpIGZ1bmN0aW9uIG9mIHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyB0aGUgZGVtdXggZHJpdmVyLiBUaGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcKKyBkeW5hbWljIG9yIHN0YXRpYyBtZW1vcnkgZm9yIHRoZSBkZW11eCBzdHJ1Y3R1cmUgYW5kIGZvciBpbml0aWFsaXppbmcgaXRzIGZpZWxkcworIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgZGVtdXggc3RydWN0dXJlCisgbXVzdCBub3QgYmUgZnJlZWQgYmVmb3JlIGNhbGxpbmcgZG14X3VucmVnaXN0ZXJfZGVtdXgoKSw8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRteF9yZWdpc3Rlcl9kZW11eCAoIGRteF9kZW11eF90ICYjeDIyQzY7ZGVtdXggKTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9kZW11eF90KgorIGRlbXV4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBkZW11eCBzdHJ1Y3R1cmUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHdhcyBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FRVhJU1Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgZGVtdXggd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgaWQgZmllbGQgYWxyZWFkeSBzdG9yZWQKKyBpbiB0aGUgZGlyZWN0b3J5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRU5PU1BDPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ObyBzcGFjZSBsZWZ0IGluIHRoZSBkaXJlY3RvcnkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+ZG14X3VucmVnaXN0ZXJfZGVtdXgoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBnaXZlbiBkZW11eCBpbnRlcmZhY2UgaXMgbm8KKyBsb25nZXIgYXZhaWxhYmxlLiBUaGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlCisgbWVtb3J5IG9mIHRoZSBkZW11eCBzdHJ1Y3R1cmUsIGlmIGl0IHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmVmb3JlIGNhbGxpbmcKKyBkbXhfcmVnaXN0ZXJfZGVtdXgoKS4gVGhlIGNsZWFudXBfbW9kdWxlKCkgZnVuY3Rpb24gb2YgdGhlIGtlcm5lbCBtb2R1bGUKKyB0aGF0IGNvbnRhaW5zIHRoZSBkZW11eCBkcml2ZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyBmYWlscyBpZiB0aGUgZGVtdXggaXMgY3VycmVudGx5IGluIHVzZSwgaS5lLiwgcmVsZWFzZV9kZW11eCgpIGhhcyBub3QgYmVlbiBjYWxsZWQKKyBmb3IgdGhlIGludGVyZmFjZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRteF91bnJlZ2lzdGVyX2RlbXV4ICggZG14X2RlbXV4X3QgJiN4MjJDNjtkZW11eCApPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QqCisgZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IHN0cnVjdHVyZSB3aGljaCBpcyB0byBiZQorIHVucmVnaXN0ZXJlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PREVWPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgc3BlY2lmaWVkIGRlbXV4IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBkZW11eAorIGRpcmVjdG9yeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzcGVjaWZpZWQgZGVtdXggaXMgY3VycmVudGx5IGluIHVzZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kbXhfZ2V0X2RlbXV4ZXMoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qcm92aWRlcyB0aGUgY2FsbGVyIHdpdGggdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZW11eCBpbnRlcmZhY2VzLCB1c2luZyB0aGUKKyBzdGFuZGFyZCBsaXN0IHN0cnVjdHVyZSBkZWZpbmVkIGluIHRoZSBpbmNsdWRlIGZpbGUgbGludXgvbGlzdC5oLiBUaGUgaW5jbHVkZSBmaWxlCisgZGVtdXguaCBkZWZpbmVzIHRoZSBtYWNybyBETVhfRElSX0VOVFJZKCkgZm9yIGNvbnZlcnRpbmcgYW4gZWxlbWVudCBvZgorIHRoZSBnZW5lcmljIHR5cGUgc3RydWN0IGxpc3RfaGVhZCogdG8gdGhlIHR5cGUgZG14X2RlbXV4X3QqLiBUaGUgY2FsbGVyIG11c3QKKyBub3QgZnJlZSB0aGUgbWVtb3J5IG9mIGFueSBvZiB0aGUgZWxlbWVudHMgb2J0YWluZWQgdmlhIHRoaXMgZnVuY3Rpb24gY2FsbC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RydWN0IGxpc3RfaGVhZCAmI3gyMkM2O2RteF9nZXRfZGVtdXhlcyAoKTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPm5vbmU8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgbGlzdF9oZWFkICo8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgbGlzdCBvZiBkZW11eCBpbnRlcmZhY2VzLCBvciBOVUxMIGluIHRoZSBjYXNlIG9mIGFuCisgZW1wdHkgbGlzdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorIDwvc2VjdGlvbj48L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iZGVtdXhfYXBpIj4KKzx0aXRsZT5EZW11eCBBUEk8L3RpdGxlPgorPHBhcmE+VGhlIGRlbXV4IEFQSSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgZm9yIGVhY2ggZGVtdXggaW4gdGhlIHN5c3RlbS4gSXQgaXMgdXNlZCB0byBzZWxlY3QKK3RoZSBUUyBzb3VyY2Ugb2YgYSBkZW11eCBhbmQgdG8gbWFuYWdlIHRoZSBkZW11eCByZXNvdXJjZXMuIFdoZW4gdGhlIGRlbXV4CitjbGllbnQgYWxsb2NhdGVzIGEgcmVzb3VyY2UgdmlhIHRoZSBkZW11eCBBUEksIGl0IHJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgQVBJIG9mIHRoYXQKK3Jlc291cmNlLgorPC9wYXJhPgorPHBhcmE+RWFjaCBkZW11eCByZWNlaXZlcyBpdHMgVFMgaW5wdXQgZnJvbSBhIERWQiBmcm9udC1lbmQgb3IgZnJvbSBtZW1vcnksIGFzIHNldCB2aWEgdGhlCitkZW11eCBBUEkuIEluIGEgc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBmcm9udC1lbmQsIHRoZSBBUEkgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZgordGhlIERWQiBmcm9udC1lbmRzIGFzIGEgVFMgc291cmNlIGZvciBhIGRlbXV4LCB1bmxlc3MgdGhpcyBpcyBmaXhlZCBpbiB0aGUgSFcgcGxhdGZvcm0uIFRoZQorZGVtdXggQVBJIG9ubHkgY29udHJvbHMgZnJvbnQtZW5kcyByZWdhcmRpbmcgdGhlaXIgY29ubmVjdGlvbnMgd2l0aCBkZW11eGVzOyB0aGUgQVBJcwordXNlZCB0byBzZXQgdGhlIG90aGVyIGZyb250LWVuZCBwYXJhbWV0ZXJzLCBzdWNoIGFzIHR1bmluZywgYXJlIG5vdCBkZWZpbmVkIGluIHRoaXMKK2RvY3VtZW50LgorPC9wYXJhPgorPHBhcmE+VGhlIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgYWJzdHJhY3QgaW50ZXJmYWNlIGRlbXV4IHNob3VsZCBiZSBkZWZpbmVkIHN0YXRpYyBvcgorbW9kdWxlIHByaXZhdGUgYW5kIHJlZ2lzdGVyZWQgdG8gdGhlIERlbXV4IERpcmVjdG9yeSBmb3IgZXh0ZXJuYWwgYWNjZXNzLiBJdCBpcyBub3QgbmVjZXNzYXJ5Cit0byBpbXBsZW1lbnQgZXZlcnkgZnVuY3Rpb24gaW4gdGhlIGRlbXV4X3Qgc3RydWN0LCBob3dldmVyIChmb3IgZXhhbXBsZSwgYSBkZW11eCBpbnRlcmZhY2UKK21pZ2h0IHN1cHBvcnQgU2VjdGlvbiBmaWx0ZXJpbmcsIGJ1dCBub3QgVFMgb3IgUEVTIGZpbHRlcmluZykuIFRoZSBBUEkgY2xpZW50IGlzIGV4cGVjdGVkIHRvCitjaGVjayB0aGUgdmFsdWUgb2YgYW55IGZ1bmN0aW9uIHBvaW50ZXIgYmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uOiB0aGUgdmFsdWUgb2YgTlVMTCBtZWFucworJiM4MjIwO2Z1bmN0aW9uIG5vdCBhdmFpbGFibGUmIzgyMjE7LgorPC9wYXJhPgorPHBhcmE+V2hlbmV2ZXIgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgZGVtdXggQVBJIG1vZGlmeSBzaGFyZWQgZGF0YSwgdGhlIHBvc3NpYmlsaXRpZXMgb2YgbG9zdAordXBkYXRlIGFuZCByYWNlIGNvbmRpdGlvbiBwcm9ibGVtcyBzaG91bGQgYmUgYWRkcmVzc2VkLCBlLmcuIGJ5IHByb3RlY3RpbmcgcGFydHMgb2YgY29kZSB3aXRoCittdXRleGVzLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IG9uIG11bHRpLXByb2Nlc3NvciBob3N0cy4KKzwvcGFyYT4KKzxwYXJhPk5vdGUgdGhhdCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYSBib3R0b20gaGFsZiBjb250ZXh0IG11c3Qgbm90IHNsZWVwLCBhdCBsZWFzdCBpbiB0aGUgMi4yLngKK2tlcm5lbHMuIEV2ZW4gYSBzaW1wbGUgbWVtb3J5IGFsbG9jYXRpb24gY2FuIHJlc3VsdCBpbiBhIGtlcm5lbCB0aHJlYWQgYmVpbmcgcHV0IHRvIHNsZWVwIGlmCitzd2FwcGluZyBpcyBuZWVkZWQuIEZvciBleGFtcGxlLCB0aGUgTGludXgga2VybmVsIGNhbGxzIHRoZSBmdW5jdGlvbnMgb2YgYSBuZXR3b3JrIGRldmljZQoraW50ZXJmYWNlIGZyb20gYSBib3R0b20gaGFsZiBjb250ZXh0LiBUaHVzLCBpZiBhIGRlbXV4IEFQSSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBuZXR3b3JrCitkZXZpY2UgY29kZSwgdGhlIGZ1bmN0aW9uIG11c3Qgbm90IHNsZWVwLgorPC9wYXJhPgorCisKKzxzZWN0aW9uIGlkPSJrZGFwaV9mb3BlbiI+Cis8dGl0bGU+b3BlbigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gcmVzZXJ2ZXMgdGhlIGRlbXV4IGZvciB1c2UgYnkgdGhlIGNhbGxlciBhbmQsIGlmIG5lY2Vzc2FyeSwKKyBpbml0aWFsaXplcyB0aGUgZGVtdXguIFdoZW4gdGhlIGRlbXV4IGlzIG5vIGxvbmdlciBuZWVkZWQsIHRoZSBmdW5jdGlvbiBjbG9zZSgpCisgc2hvdWxkIGJlIGNhbGxlZC4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBtdWx0aXBsZSBjbGllbnRzIHRvIGFjY2VzcyB0aGUgZGVtdXgKKyBhdCB0aGUgc2FtZSB0aW1lLiBUaHVzLCB0aGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gc2hvdWxkIGluY3JlbWVudCB0aGUKKyBkZW11eCB1c2FnZSBjb3VudCB3aGVuIG9wZW4oKSBpcyBjYWxsZWQgYW5kIGRlY3JlbWVudCBpdCB3aGVuIGNsb3NlKCkgaXMKKyBjYWxsZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuICggZGVtdXhfdCYjeDIyQzY7IGRlbXV4ICk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCogZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVVU0VSUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TWF4aW11bSB1c2FnZSBjb3VudCByZWFjaGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJrZGFwaV9mY2xvc2UiPgorPHRpdGxlPmNsb3NlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBmdW5jdGlvbiByZXNlcnZlcyB0aGUgZGVtdXggZm9yIHVzZSBieSB0aGUgY2FsbGVyIGFuZCwgaWYgbmVjZXNzYXJ5LAorIGluaXRpYWxpemVzIHRoZSBkZW11eC4gV2hlbiB0aGUgZGVtdXggaXMgbm8gbG9uZ2VyIG5lZWRlZCwgdGhlIGZ1bmN0aW9uIGNsb3NlKCkKKyBzaG91bGQgYmUgY2FsbGVkLiBJdCBzaG91bGQgYmUgcG9zc2libGUgZm9yIG11bHRpcGxlIGNsaWVudHMgdG8gYWNjZXNzIHRoZSBkZW11eAorIGF0IHRoZSBzYW1lIHRpbWUuIFRodXMsIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaW5jcmVtZW50IHRoZQorIGRlbXV4IHVzYWdlIGNvdW50IHdoZW4gb3BlbigpIGlzIGNhbGxlZCBhbmQgZGVjcmVtZW50IGl0IHdoZW4gY2xvc2UoKSBpcworIGNhbGxlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGRlbXV4X3QmI3gyMkM2OyBkZW11eCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCogZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRlbXV4IHdhcyBub3QgaW4gdXNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJrZGFwaV9md3JpdGUiPgorPHRpdGxlPndyaXRlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUgZGVtdXggZHJpdmVyIHdpdGggYSBtZW1vcnkgYnVmZmVyIGNvbnRhaW5pbmcgVFMKKyBwYWNrZXRzLiBJbnN0ZWFkIG9mIHJlY2VpdmluZyBUUyBwYWNrZXRzIGZyb20gdGhlIERWQiBmcm9udC1lbmQsIHRoZSBkZW11eAorIGRyaXZlciBzb2Z0d2FyZSB3aWxsIHJlYWQgcGFja2V0cyBmcm9tIG1lbW9yeS4gQW55IGNsaWVudHMgb2YgdGhpcyBkZW11eAorIHdpdGggYWN0aXZlIFRTLCBQRVMgb3IgU2VjdGlvbiBmaWx0ZXJzIHdpbGwgcmVjZWl2ZSBmaWx0ZXJlZCBkYXRhIHZpYSB0aGUgRGVtdXgKKyBjYWxsYmFjayBBUEkgKHNlZSAwKS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hlbiBhbGwgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciBoYXMKKyBiZWVuIGNvbnN1bWVkIGJ5IHRoZSBkZW11eC4gRGVtdXggaGFyZHdhcmUgdHlwaWNhbGx5IGNhbm5vdCByZWFkIFRTIGZyb20KKyBtZW1vcnkuIElmIHRoaXMgaXMgdGhlIGNhc2UsIG1lbW9yeS1iYXNlZCBmaWx0ZXJpbmcgaGFzIHRvIGJlIGltcGxlbWVudGVkCisgZW50aXJlbHkgaW4gc29mdHdhcmUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCB3cml0ZShkZW11eF90JiN4MjJDNjsgZGVtdXgsIGNvbnN0IGNoYXImI3gyMkM2OyBidWYsIHNpemVfdAorIGNvdW50KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kZW11eF90KiBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5jb25zdCBjaGFyKiBidWY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGRhdGEgaW4ga2VybmVsLXNwYWNlIG1lbW9yeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGxlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBUUyBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRU5PU1lTPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgY29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+YWxsb2NhdGVfdHNfZmVlZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkFsbG9jYXRlcyBhIG5ldyBUUyBmZWVkLCB3aGljaCBpcyB1c2VkIHRvIGZpbHRlciB0aGUgVFMgcGFja2V0cyBjYXJyeWluZyBhCisgY2VydGFpbiBQSUQuIFRoZSBUUyBmZWVkIG5vcm1hbGx5IGNvcnJlc3BvbmRzIHRvIGEgaGFyZHdhcmUgUElEIGZpbHRlciBvbiB0aGUKKyBkZW11eCBjaGlwLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgYWxsb2NhdGVfdHNfZmVlZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4LAorIGRteF90c19mZWVkX3QmI3gyMkM2OyYjeDIyQzY7IGZlZWQsIGRteF90c19jYiBjYWxsYmFjayk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCogZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3RzX2ZlZWRfdCoqCisgZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgVFMgZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19jYiBjYWxsYmFjazwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBhc3NpbmcgcmVjZWl2ZWQgVFMKKyBwYWNrZXQ8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ObyBtb3JlIFRTIGZlZWRzIGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGNvbW1hbmQgaXMgbm90IGltcGxlbWVudGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnJlbGVhc2VfdHNfZmVlZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlJlbGVhc2VzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHdpdGggYWxsb2NhdGVfdHNfZmVlZCgpLiBBbnkgZmlsdGVyaW5nIGluCisgcHJvZ3Jlc3Mgb24gdGhlIFRTIGZlZWQgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlbGVhc2VfdHNfZmVlZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4LAorIGRteF90c19mZWVkX3QmI3gyMkM2OyBmZWVkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kZW11eF90KiBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfdHNfZmVlZF90KiBmZWVkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBUUyBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5hbGxvY2F0ZV9zZWN0aW9uX2ZlZWQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BbGxvY2F0ZXMgYSBuZXcgc2VjdGlvbiBmZWVkLCBpLmUuIGEgZGVtdXggcmVzb3VyY2UgZm9yIGZpbHRlcmluZyBhbmQgcmVjZWl2aW5nCisgc2VjdGlvbnMuIE9uIHBsYXRmb3JtcyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHNlY3Rpb24gZmlsdGVyaW5nLCBhIHNlY3Rpb24KKyBmZWVkIGlzIGRpcmVjdGx5IG1hcHBlZCB0byB0aGUgZGVtdXggSFcuIE9uIG90aGVyIHBsYXRmb3JtcywgVFMgcGFja2V0cyBhcmUKKyBmaXJzdCBQSUQgZmlsdGVyZWQgaW4gaGFyZHdhcmUgYW5kIGEgaGFyZHdhcmUgc2VjdGlvbiBmaWx0ZXIgdGhlbiBlbXVsYXRlZCBpbgorIHNvZnR3YXJlLiBUaGUgY2FsbGVyIG9idGFpbnMgYW4gQVBJIHBvaW50ZXIgb2YgdHlwZSBkbXhfc2VjdGlvbl9mZWVkX3QgYXMgYW4KKyBvdXQgcGFyYW1ldGVyLiBVc2luZyB0aGlzIEFQSSB0aGUgY2FsbGVyIGNhbiBzZXQgZmlsdGVyaW5nIHBhcmFtZXRlcnMgYW5kIHN0YXJ0CisgcmVjZWl2aW5nIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgYWxsb2NhdGVfc2VjdGlvbl9mZWVkKGRteF9kZW11eF90JiN4MjJDNjsgZGVtdXgsCisgZG14X3NlY3Rpb25fZmVlZF90ICYjeDIyQzY7JiN4MjJDNjtmZWVkLCBkbXhfc2VjdGlvbl9jYiBjYWxsYmFjayk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCAqZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90CisgKipmZWVkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBzZWN0aW9uIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9jYgorIGNhbGxiYWNrPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcGFzc2luZyByZWNlaXZlZAorIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vIG1vcmUgc2VjdGlvbiBmZWVkcyBhdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5yZWxlYXNlX3NlY3Rpb25fZmVlZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlJlbGVhc2VzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHdpdGggYWxsb2NhdGVfc2VjdGlvbl9mZWVkKCksIGluY2x1ZGluZworIGFsbG9jYXRlZCBmaWx0ZXJzLiBBbnkgZmlsdGVyaW5nIGluIHByb2dyZXNzIG9uIHRoZSBzZWN0aW9uIGZlZWQgc2hvdWxkIGJlIHN0b3BwZWQKKyBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVsZWFzZV9zZWN0aW9uX2ZlZWQoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwKKyBkbXhfc2VjdGlvbl9mZWVkX3QgJiN4MjJDNjtmZWVkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kZW11eF90ICpkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9mZWVkX3QKKyAqZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc2VjdGlvbiBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kZXNjcmFtYmxlX21hY19hZGRyZXNzKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBmdW5jdGlvbiBydW5zIGEgZGVzY3JhbWJsaW5nIGFsZ29yaXRobSBvbiB0aGUgZGVzdGluYXRpb24gTUFDCisgYWRkcmVzcyBmaWVsZCBvZiBhIERWQiBEYXRhZ3JhbSBTZWN0aW9uLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIGFkZHJlc3MKKyB3aXRoIGl0cyB1bi1lbmNyeXB0ZWQgdmVyc2lvbi4gT3RoZXJ3aXNlLCB0aGUgZGVzY3JpcHRpb24gb24gdGhlIGZ1bmN0aW9uCisgZGVzY3JhbWJsZV9zZWN0aW9uX3BheWxvYWQoKSBhcHBsaWVzIGFsc28gdG8gdGhpcyBmdW5jdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRlc2NyYW1ibGVfbWFjX2FkZHJlc3MoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwgX191OAorICYjeDIyQzY7YnVmZmVyMSwgc2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoLCBfX3U4ICYjeDIyQzY7YnVmZmVyMiwKKyBzaXplX3QgYnVmZmVyMl9sZW5ndGgsIF9fdTE2IHBpZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QKKyAqZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191OCAqYnVmZmVyMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc2VjdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5MZW5ndGggb2YgdGhlIHNlY3Rpb24gZGF0YSwgaW5jbHVkaW5nIGhlYWRlcnMgYW5kIENSQywKKyBpbiBidWZmZXIxLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4KiBidWZmZXIyPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBzZWN0aW9uIGRhdGEsIG9yIE5VTEwuIFRoZQorIHBvaW50ZXIgaGFzIGEgbm9uLU5VTEwgdmFsdWUgaWYgdGhlIHNlY3Rpb24gd3JhcHMgcGFzdAorIHRoZSBlbmQgb2YgYSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBzZWN0aW9uIGRhdGEsIGluY2x1ZGluZyBoZWFkZXJzIGFuZCBDUkMsCisgaW4gYnVmZmVyMi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191MTYgcGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgUElEIG9uIHdoaWNoIHRoZSBzZWN0aW9uIHdhcyByZWNlaXZlZC4gVXNlZnVsCisgZm9yIG9idGFpbmluZyB0aGUgZGVzY3JhbWJsaW5nIGtleSwgZS5nLiBmcm9tIGEgRFZCCisgQ29tbW9uIEFjY2VzcyBmYWNpbGl0eS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGVzY3JhbWJsaW5nIGZhY2lsaXR5IGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kZXNjcmFtYmxlX3NlY3Rpb25fcGF5bG9hZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gcnVucyBhIGRlc2NyYW1ibGluZyBhbGdvcml0aG0gb24gdGhlIHBheWxvYWQgb2YgYSBEVkIKKyBEYXRhZ3JhbSBTZWN0aW9uLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIHBheWxvYWQgd2l0aCBpdHMgdW4tZW5jcnlwdGVkCisgdmVyc2lvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGRlbXV4IEFQSSBpbXBsZW1lbnRhdGlvbjsKKyB0aGUgQVBJIGNsaWVudCBuZWVkIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuIFNlY3Rpb24tbGV2ZWwgc2NyYW1ibGluZworIGFsZ29yaXRobXMgYXJlIGN1cnJlbnRseSBzdGFuZGFyZGl6ZWQgb25seSBmb3IgRFZCLVJDQyAocmV0dXJuIGNoYW5uZWwKKyBvdmVyIDItZGlyZWN0aW9uYWwgY2FibGUgVFYgbmV0d29yaykgc3lzdGVtcy4gRm9yIGFsbCBvdGhlciBEVkIgbmV0d29ya3MsCisgZW5jcnlwdGlvbiBzY2hlbWVzIGFyZSBsaWtlbHkgdG8gYmUgcHJvcHJpZXRhcnkgdG8gZWFjaCBkYXRhIGJyb2FkY2FzdGVyLiBUaHVzLAorIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBmdW5jdGlvbiBwb2ludGVyIHdpbGwgaGF2ZSB0aGUgdmFsdWUgb2YgTlVMTCAoaS5lLiwKKyBmdW5jdGlvbiBub3QgYXZhaWxhYmxlKSBpbiBtb3N0IGRlbXV4IEFQSSBpbXBsZW1lbnRhdGlvbnMuIE5ldmVydGhlbGVzcywgaXQKKyBzaG91bGQgYmUgcG9zc2libGUgdG8gdXNlIHRoZSBmdW5jdGlvbiBwb2ludGVyIGFzIGEgaG9vayBmb3IgZHluYW1pY2FsbHkgYWRkaW5nCisgYSAmIzgyMjA7cGx1Zy1pbiYjODIyMTsgZGVzY3JhbWJsaW5nIGZhY2lsaXR5IHRvIGEgZGVtdXggZHJpdmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5XaGlsZSB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBuZWVkZWQgd2l0aCBoYXJkd2FyZS1iYXNlZCBzZWN0aW9uIGRlc2NyYW1ibGluZywKKyB0aGUgZGVzY3JhbWJsZV9zZWN0aW9uX3BheWxvYWQgZnVuY3Rpb24gcG9pbnRlciBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUKKyBkZWZhdWx0IGhhcmR3YXJlLWJhc2VkIGRlc2NyYW1ibGluZyBhbGdvcml0aG06IGlmIHRoZSBmdW5jdGlvbiBwb2ludGVyIGhhcyBhCisgbm9uLU5VTEwgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgYW55CisgZGVzY3JhbWJsaW5nIGhhcmR3YXJlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZGVzY3JhbWJsZV9zZWN0aW9uX3BheWxvYWQoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwKKyBfX3U4ICYjeDIyQzY7YnVmZmVyMSwgc2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoLCBfX3U4ICYjeDIyQzY7YnVmZmVyMiwKKyBzaXplX3QgYnVmZmVyMl9sZW5ndGgsIF9fdTE2IHBpZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QKKyAqZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191OCAqYnVmZmVyMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc2VjdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5MZW5ndGggb2YgdGhlIHNlY3Rpb24gZGF0YSwgaW5jbHVkaW5nIGhlYWRlcnMgYW5kIENSQywKKyBpbiBidWZmZXIxLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4ICpidWZmZXIyPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBzZWN0aW9uIGRhdGEsIG9yIE5VTEwuIFRoZQorIHBvaW50ZXIgaGFzIGEgbm9uLU5VTEwgdmFsdWUgaWYgdGhlIHNlY3Rpb24gd3JhcHMgcGFzdAorIHRoZSBlbmQgb2YgYSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBzZWN0aW9uIGRhdGEsIGluY2x1ZGluZyBoZWFkZXJzIGFuZCBDUkMsCisgaW4gYnVmZmVyMi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191MTYgcGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgUElEIG9uIHdoaWNoIHRoZSBzZWN0aW9uIHdhcyByZWNlaXZlZC4gVXNlZnVsCisgZm9yIG9idGFpbmluZyB0aGUgZGVzY3JhbWJsaW5nIGtleSwgZS5nLiBmcm9tIGEgRFZCCisgQ29tbW9uIEFjY2VzcyBmYWNpbGl0eS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGVzY3JhbWJsaW5nIGZhY2lsaXR5IGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5hZGRfZnJvbnRlbmQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5SZWdpc3RlcnMgYSBjb25uZWN0aXZpdHkgYmV0d2VlbiBhIGRlbXV4IGFuZCBhIGZyb250LWVuZCwgaS5lLiwgaW5kaWNhdGVzIHRoYXQKKyB0aGUgZGVtdXggY2FuIGJlIGNvbm5lY3RlZCB2aWEgYSBjYWxsIHRvIGNvbm5lY3RfZnJvbnRlbmQoKSB0byB1c2UgdGhlIGdpdmVuCisgZnJvbnQtZW5kIGFzIGEgVFMgc291cmNlLiBUaGUgY2xpZW50IG9mIHRoaXMgZnVuY3Rpb24gaGFzIHRvIGFsbG9jYXRlIGR5bmFtaWMgb3IKKyBzdGF0aWMgbWVtb3J5IGZvciB0aGUgZnJvbnRlbmQgc3RydWN0dXJlIGFuZCBpbml0aWFsaXplIGl0cyBmaWVsZHMgYmVmb3JlIGNhbGxpbmcKKyB0aGlzIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IGNhbGxlZCBkdXJpbmcgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbi4KKyBUaGUgY2FsbGVyIG11c3Qgbm90IGZyZWUgdGhlIG1lbW9yeSBvZiB0aGUgZnJvbnRlbmQgc3RydWN0IGJlZm9yZSBzdWNjZXNzZnVsbHkKKyBjYWxsaW5nIHJlbW92ZV9mcm9udGVuZCgpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgYWRkX2Zyb250ZW5kKGRteF9kZW11eF90ICYjeDIyQzY7ZGVtdXgsIGRteF9mcm9udGVuZF90CisgJiN4MjJDNjtmcm9udGVuZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QqCisgZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2Zyb250ZW5kX3QqCisgZnJvbnRlbmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGZyb250LWVuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUVYSVNUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BIGZyb250LWVuZCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIHRoZSBpZCBmaWVsZCBhbHJlYWR5CisgcmVnaXN0ZXJlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlVTRTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRlbXV4IGlzIGluIHVzZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gbW9yZSBmcm9udC1lbmRzIGNhbiBiZSBhZGRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5yZW1vdmVfZnJvbnRlbmQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgdGhhdCB0aGUgZ2l2ZW4gZnJvbnQtZW5kLCByZWdpc3RlcmVkIGJ5IGEgY2FsbCB0byBhZGRfZnJvbnRlbmQoKSwgY2FuCisgbm8gbG9uZ2VyIGJlIGNvbm5lY3RlZCBhcyBhIFRTIHNvdXJjZSBieSB0aGlzIGRlbXV4LiBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlCisgY2FsbGVkIHdoZW4gYSBmcm9udC1lbmQgZHJpdmVyIG9yIGEgZGVtdXggZHJpdmVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorIElmIHRoZSBmcm9udC1lbmQgaXMgaW4gdXNlLCB0aGUgZnVuY3Rpb24gZmFpbHMgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIC1FQlVTWS4KKyBBZnRlciBzdWNjZXNzZnVsbHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgY2FsbGVyIGNhbiBmcmVlIHRoZSBtZW1vcnkgb2YKKyB0aGUgZnJvbnRlbmQgc3RydWN0IGlmIGl0IHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBhZGRfZnJvbnRlbmQoKQorIG9wZXJhdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlbW92ZV9mcm9udGVuZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4LAorIGRteF9mcm9udGVuZF90JiN4MjJDNjsgZnJvbnRlbmQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9kZW11eF90KgorIGRlbXV4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBkZW11eCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9mcm9udGVuZF90KgorIGZyb250ZW5kPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBmcm9udC1lbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnJvbnQtZW5kIGlzIGluIHVzZSwgaS5lLiBhIGNhbGwgdG8gY29ubmVjdF9mcm9udGVuZCgpCisgaGFzIG5vdCBiZWVuIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBkaXNjb25uZWN0X2Zyb250ZW5kKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+Z2V0X2Zyb250ZW5kcygpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlByb3ZpZGVzIHRoZSBBUElzIG9mIHRoZSBmcm9udC1lbmRzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgZm9yIHRoaXMgZGVtdXguCisgQW55IG9mIHRoZSBmcm9udC1lbmRzIG9idGFpbmVkIHdpdGggdGhpcyBjYWxsIGNhbiBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyIGZvcgorIGNvbm5lY3RfZnJvbnRlbmQoKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGluY2x1ZGUgZmlsZSBkZW11eC5oIGNvbnRhaW5zIHRoZSBtYWNybyBETVhfRkVfRU5UUlkoKSBmb3IKKyBjb252ZXJ0aW5nIGFuIGVsZW1lbnQgb2YgdGhlIGdlbmVyaWMgdHlwZSBzdHJ1Y3QgbGlzdF9oZWFkKiB0byB0aGUgdHlwZQorIGRteF9mcm9udGVuZF90Ki4gVGhlIGNhbGxlciBtdXN0IG5vdCBmcmVlIHRoZSBtZW1vcnkgb2YgYW55IG9mIHRoZSBlbGVtZW50cworIG9idGFpbmVkIHZpYSB0aGlzIGZ1bmN0aW9uIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyBnZXRfZnJvbnRlbmRzKGRteF9kZW11eF90JiN4MjJDNjsgZGVtdXgpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9kZW11eF90KgorIGRlbXV4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBkZW11eCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QqPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BIGxpc3Qgb2YgZnJvbnQtZW5kIGludGVyZmFjZXMsIG9yIE5VTEwgaW4gdGhlIGNhc2Ugb2YgYW4KKyBlbXB0eSBsaXN0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmNvbm5lY3RfZnJvbnRlbmQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Db25uZWN0cyB0aGUgVFMgb3V0cHV0IG9mIHRoZSBmcm9udC1lbmQgdG8gdGhlIGlucHV0IG9mIHRoZSBkZW11eC4gQSBkZW11eAorIGNhbiBvbmx5IGJlIGNvbm5lY3RlZCB0byBhIGZyb250LWVuZCByZWdpc3RlcmVkIHRvIHRoZSBkZW11eCB3aXRoIHRoZSBmdW5jdGlvbgorIGFkZF9mcm9udGVuZCgpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JdCBtYXkgb3IgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBjb25uZWN0IG11bHRpcGxlIGRlbXV4ZXMgdG8gdGhlIHNhbWUKKyBmcm9udC1lbmQsIGRlcGVuZGluZyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBIVyBwbGF0Zm9ybS4gV2hlbiBub3QgdXNlZCwKKyB0aGUgZnJvbnQtZW5kIHNob3VsZCBiZSByZWxlYXNlZCBieSBjYWxsaW5nIGRpc2Nvbm5lY3RfZnJvbnRlbmQoKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNvbm5lY3RfZnJvbnRlbmQoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwKKyBkbXhfZnJvbnRlbmRfdCYjeDIyQzY7IGZyb250ZW5kKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfZGVtdXhfdCoKKyBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfZnJvbnRlbmRfdCoKKyBmcm9udGVuZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZnJvbnQtZW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHdhcyBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZyb250LWVuZCBpcyBpbiB1c2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+ZGlzY29ubmVjdF9mcm9udGVuZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRpc2Nvbm5lY3RzIHRoZSBkZW11eCBhbmQgYSBmcm9udC1lbmQgcHJldmlvdXNseSBjb25uZWN0ZWQgYnkgYQorIGNvbm5lY3RfZnJvbnRlbmQoKSBjYWxsLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZGlzY29ubmVjdF9mcm9udGVuZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfZGVtdXhfdCoKKyBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkZW11eF9jYWxsYmFja19hcGkiPgorPHRpdGxlPkRlbXV4IENhbGxiYWNrIEFQSTwvdGl0bGU+Cis8cGFyYT5UaGlzIGtlcm5lbC1zcGFjZSBBUEkgY29tcHJpc2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCBkZWxpdmVyIGZpbHRlcmVkIGRhdGEgdG8gdGhlCitkZW11eCBjbGllbnQuIFVubGlrZSB0aGUgb3RoZXIgQVBJcywgdGhlc2UgQVBJIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCBhbmQgY2FsbGVkCitmcm9tIHRoZSBkZW11eCBjb2RlLgorPC9wYXJhPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHBvaW50ZXJzIG9mIHRoaXMgYWJzdHJhY3QgaW50ZXJmYWNlIGFyZSBub3QgcGFja2VkIGludG8gYSBzdHJ1Y3R1cmUgYXMgaW4gdGhlCitvdGhlciBkZW11eCBBUElzLCBiZWNhdXNlIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVzZWQgaW5kZXBlbmRlbnQKK29mIGVhY2ggb3RoZXIuIEFzIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgQVBJIGNsaWVudCB0byBwcm92aWRlIHNldmVyYWwKK2NhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgcmVjZWl2aW5nIFRTIHBhY2tldHMgYW5kIG5vIGNhbGxiYWNrcyBmb3IgUEVTIHBhY2tldHMgb3IKK3NlY3Rpb25zLgorPC9wYXJhPgorPHBhcmE+VGhlIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgQVBJIG5lZWQgbm90IGJlIHJlLWVudHJhbnQ6IHdoZW4gYSBkZW11eAorZHJpdmVyIGNhbGxzIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoZSBkcml2ZXIgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gYWdhaW4gYmVmb3JlCit0aGUgb3JpZ2luYWwgY2FsbCByZXR1cm5zLiBJZiBhIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCBieSBhIGhhcmR3YXJlIGludGVycnVwdCwgaXQgaXMgcmVjb21tZW5kZWQKK3RvIHVzZSB0aGUgTGludXggJiM4MjIwO2JvdHRvbSBoYWxmJiM4MjIxOyBtZWNoYW5pc20gb3Igc3RhcnQgYSB0YXNrbGV0IGluc3RlYWQgb2YgbWFraW5nIHRoZSBjYWxsYmFjaworZnVuY3Rpb24gY2FsbCBkaXJlY3RseSBmcm9tIGEgaGFyZHdhcmUgaW50ZXJydXB0LgorPC9wYXJhPgorCis8c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmRteF90c19jYigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24sIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgb2YgdGhlIGRlbXV4IEFQSSwgaXMgY2FsbGVkIGZyb20gdGhlCisgZGVtdXggY29kZS4gVGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gZmlsdGVyaW5nIG9uIHRoaXMgVFMgZmVlZCBoYXMKKyBiZWVuIGVuYWJsZWQgdXNpbmcgdGhlIHN0YXJ0X2ZpbHRlcmluZygpIGZ1bmN0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BbnkgVFMgcGFja2V0cyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIgc2V0dGluZ3MgYXJlIGNvcGllZCB0byBhIGNpcmN1bGFyIGJ1ZmZlci4gVGhlCisgZmlsdGVyZWQgVFMgcGFja2V0cyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBjbGllbnQgdXNpbmcgdGhpcyBjYWxsYmFjayBmdW5jdGlvbi4gVGhlCisgc2l6ZSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGNpcmN1bGFyX2J1ZmZlcl9zaXplIHBhcmFtZXRlcgorIG9mIHRoZSBzZXQoKSBmdW5jdGlvbiBpbiB0aGUgVFMgRmVlZCBBUEkuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGJ1ZmZlcjEgYW5kCisgYnVmZmVyMiBjYWxsYmFjayBwYXJhbWV0ZXJzIHBvaW50IHRvIGFkZHJlc3NlcyB3aXRoaW4gdGhlIGNpcmN1bGFyIGJ1ZmZlciwgYnV0Cisgb3RoZXIgaW1wbGVtZW50YXRpb25zIGFyZSBhbHNvIHBvc3NpYmxlLiBOb3RlIHRoYXQgdGhlIGNhbGxlZCBwYXJ0eSBzaG91bGQgbm90CisgdHJ5IHRvIGZyZWUgdGhlIG1lbW9yeSB0aGUgYnVmZmVyMSBhbmQgYnVmZmVyMiBwYXJhbWV0ZXJzIHBvaW50IHRvLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5XaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgYnVmZmVyMSBwYXJhbWV0ZXIgdHlwaWNhbGx5IHBvaW50cyB0byB0aGUKKyBzdGFydCBvZiB0aGUgZmlyc3QgdW5kZWxpdmVyZWQgVFMgcGFja2V0IHdpdGhpbiBhIGNpcmN1bGFyIGJ1ZmZlci4gVGhlIGJ1ZmZlcjIKKyBidWZmZXIgcGFyYW1ldGVyIGlzIG5vcm1hbGx5IE5VTEwsIGV4Y2VwdCB3aGVuIHRoZSByZWNlaXZlZCBUUyBwYWNrZXRzIGhhdmUKKyBjcm9zc2VkIHRoZSBsYXN0IGFkZHJlc3Mgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgJiM4MjIxO3dyYXBwZWQmIzgyMjE7IHRvIHRoZSBiZWdpbm5pbmcKKyBvZiB0aGUgYnVmZmVyLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlIGJ1ZmZlcjEgcGFyYW1ldGVyIHdvdWxkIGNvbnRhaW4gYW4gYWRkcmVzcworIHdpdGhpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLCB3aGlsZSB0aGUgYnVmZmVyMiBwYXJhbWV0ZXIgd291bGQgY29udGFpbiB0aGUgZmlyc3QKKyBhZGRyZXNzIG9mIHRoZSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBudW1iZXIgb2YgYnl0ZXMgZGVsaXZlcmVkIHdpdGggdGhpcyBmdW5jdGlvbiAoaS5lLiBidWZmZXIxX2xlbmd0aCArCisgYnVmZmVyMl9sZW5ndGgpIGlzIHVzdWFsbHkgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGNhbGxiYWNrX2xlbmd0aCBwYXJhbWV0ZXIKKyBnaXZlbiBpbiB0aGUgc2V0KCkgZnVuY3Rpb24sIHdpdGggb25lIGV4Y2VwdGlvbjogaWYgYSB0aW1lb3V0IG9jY3VycyBiZWZvcmUKKyByZWNlaXZpbmcgY2FsbGJhY2tfbGVuZ3RoIGJ5dGVzIG9mIFRTIGRhdGEsIGFueSB1bmRlbGl2ZXJlZCBwYWNrZXRzIGFyZQorIGltbWVkaWF0ZWx5IGRlbGl2ZXJlZCB0byB0aGUgY2xpZW50IGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVGhlIHRpbWVvdXQKKyBkdXJhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZXQoKSBmdW5jdGlvbiBpbiB0aGUgVFMgRmVlZCBBUEkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklmIGEgVFMgcGFja2V0IGlzIHJlY2VpdmVkIHdpdGggZXJyb3JzIHRoYXQgY291bGQgbm90IGJlIGZpeGVkIGJ5IHRoZSBUUy1sZXZlbAorIGZvcndhcmQgZXJyb3IgY29ycmVjdGlvbiAoRkVDKSwgdGhlIFRyYW5zcG9ydF9lcnJvcl9pbmRpY2F0b3IgZmxhZyBvZiB0aGUgVFMKKyBwYWNrZXQgaGVhZGVyIHNob3VsZCBiZSBzZXQuIFRoZSBUUyBwYWNrZXQgc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQsIGFzCisgdGhlIGVycm9yIGNhbiBwb3NzaWJseSBiZSBjb3JyZWN0ZWQgYnkgYSBoaWdoZXIgbGF5ZXIgcHJvdG9jb2wuIElmIHRoZSBjYWxsZWQKKyBwYXJ0eSBpcyBzbG93IGluIHByb2Nlc3NpbmcgdGhlIGNhbGxiYWNrLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjaXJjdWxhciBidWZmZXIKKyBldmVudHVhbGx5IGZpbGxzIHVwLiBJZiB0aGlzIGhhcHBlbnMsIHRoZSBkZW11eCBkcml2ZXIgc2hvdWxkIGRpc2NhcmQgYW55IFRTCisgcGFja2V0cyByZWNlaXZlZCB3aGlsZSB0aGUgYnVmZmVyIGlzIGZ1bGwuIFRoZSBlcnJvciBzaG91bGQgYmUgaW5kaWNhdGVkIHRvIHRoZQorIGNsaWVudCBvbiB0aGUgbmV4dCBjYWxsYmFjayBieSBzZXR0aW5nIHRoZSBzdWNjZXNzIHBhcmFtZXRlciB0byB0aGUgdmFsdWUgb2YKKyBETVhfT1ZFUlJVTl9FUlJPUi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHR5cGUgb2YgZGF0YSByZXR1cm5lZCB0byB0aGUgY2FsbGJhY2sgY2FuIGJlIHNlbGVjdGVkIGJ5IHRoZSBuZXcKKyBmdW5jdGlvbiBpbnQgKCpzZXRfdHlwZSkgKHN0cnVjdCBkbXhfdHNfZmVlZF9zKiBmZWVkLCBpbnQgdHlwZSwgZG14X3RzX3Blc190CisgcGVzX3R5cGUpIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRteF90c19mZWVkX3Mgc3RydWN0IChhbHNvIGNmLiB0byB0aGUKKyBpbmNsdWRlIGZpbGUgb3N0L2RlbXV4LmgpIFRoZSB0eXBlIHBhcmFtZXRlciBkZWNpZGVzIGlmIHRoZSByYXcgVFMgcGFja2V0CisgKFRTX1BBQ0tFVCkgb3IganVzdCB0aGUgcGF5bG9hZCAoVFNfUEFDS0VUJiM4MjEyO1RTX1BBWUxPQURfT05MWSkKKyBzaG91bGQgYmUgcmV0dXJuZWQuIElmIGFkZGl0aW9uYWxseSB0aGUgVFNfREVDT0RFUiBiaXQgaXMgc2V0IHRoZSBzdHJlYW0KKyB3aWxsIGFsc28gYmUgc2VudCB0byB0aGUgaGFyZHdhcmUgTVBFRyBkZWNvZGVyLiBJbiB0aGlzIGNhc2UsIHRoZSBzZWNvbmQKKyBmbGFnIGRlY2lkZXMgYXMgd2hhdCBraW5kIG9mIGRhdGEgdGhlIHN0cmVhbSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQuIFRoZQorIHBvc3NpYmxlIGNob2ljZXMgYXJlIG9uZSBvZiBETVhfVFNfUEVTX0FVRElPLCBETVhfVFNfUEVTX1ZJREVPLAorIERNWF9UU19QRVNfVEVMRVRFWFQsIERNWF9UU19QRVNfU1VCVElUTEUsCisgRE1YX1RTX1BFU19QQ1IsIG9yIERNWF9UU19QRVNfT1RIRVIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBkbXhfdHNfY2IoX191OCYjeDIyQzY7IGJ1ZmZlcjEsIHNpemVfdCBidWZmZXIxX2xlbmd0aCwKKyBfX3U4JiN4MjJDNjsgYnVmZmVyMiwgc2l6ZV90IGJ1ZmZlcjJfbGVuZ3RoLCBkbXhfdHNfZmVlZF90JiN4MjJDNjsKKyBzb3VyY2UsIGRteF9zdWNjZXNzX3Qgc3VjY2Vzcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191OCogYnVmZmVyMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbHRlcmVkIFRTIHBhY2tldHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIxX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBUUyBkYXRhIGluIGJ1ZmZlcjEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPl9fdTgqIGJ1ZmZlcjI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGZpbHRlcmVkIFRTIHBhY2tldHMsIG9yIE5VTEwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBUUyBkYXRhIGluIGJ1ZmZlcjIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqCisgc291cmNlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgd2hpY2ggVFMgZmVlZCBpcyB0aGUgc291cmNlIG9mIHRoZSBjYWxsYmFjay48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3N1Y2Nlc3NfdAorIHN1Y2Nlc3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gVFMgcmVjZXB0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkNvbnRpbnVlIGZpbHRlcmluZy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LTE8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlN0b3AgZmlsdGVyaW5nIC0gaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBhIGNhbGwgdG8KKyBzdG9wX2ZpbHRlcmluZygpIG9uIHRoZSBUUyBGZWVkIEFQSS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kbXhfc2VjdGlvbl9jYigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24sIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgb2YgdGhlIGRlbXV4IEFQSSwgaXMgY2FsbGVkIGZyb20gdGhlCisgZGVtdXggY29kZS4gVGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gZmlsdGVyaW5nIG9mIHNlY3Rpb25zIGhhcyBiZWVuCisgZW5hYmxlZCB1c2luZyB0aGUgZnVuY3Rpb24gc3RhcnRfZmlsdGVyaW5nKCkgb2YgdGhlIHNlY3Rpb24gZmVlZCBBUEkuIFdoZW4gdGhlCisgZGVtdXggZHJpdmVyIGhhcyByZWNlaXZlZCBhIGNvbXBsZXRlIHNlY3Rpb24gdGhhdCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBzZWN0aW9uCisgZmlsdGVyLCB0aGUgY2xpZW50IGlzIG5vdGlmaWVkIHZpYSB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uLiBOb3JtYWxseSB0aGlzIGZ1bmN0aW9uIGlzCisgY2FsbGVkIGZvciBlYWNoIHJlY2VpdmVkIHNlY3Rpb247IGhvd2V2ZXIsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gZGVsaXZlciBtdWx0aXBsZQorIHNlY3Rpb25zIHdpdGggb25lIGNhbGxiYWNrLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBzeXN0ZW0gbG9hZCBpcyBoaWdoLiBJZiBhbgorIGVycm9yIG9jY3VycyB3aGlsZSByZWNlaXZpbmcgYSBzZWN0aW9uLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aAorIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIHR5cGUgc2V0IGluIHRoZSBzdWNjZXNzIGZpZWxkLCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcworIGRhdGEgdG8gZGVsaXZlci4gVGhlIFNlY3Rpb24gRmVlZCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbWFpbnRhaW4gYSBjaXJjdWxhcgorIGJ1ZmZlciBmb3IgcmVjZWl2ZWQgc2VjdGlvbnMuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpZiB0aGUgU2VjdGlvbiBGZWVkCisgQVBJIGlzIGltcGxlbWVudGVkIGFzIGEgY2xpZW50IG9mIHRoZSBUUyBGZWVkIEFQSSwgYmVjYXVzZSB0aGUgVFMgRmVlZAorIGltcGxlbWVudGF0aW9uIHRoZW4gYnVmZmVycyB0aGUgcmVjZWl2ZWQgZGF0YS4gVGhlIHNpemUgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlcgorIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSBzZXQoKSBmdW5jdGlvbiBpbiB0aGUgU2VjdGlvbiBGZWVkIEFQSS4gSWYgdGhlcmUKKyBpcyBubyByb29tIGluIHRoZSBjaXJjdWxhciBidWZmZXIgd2hlbiBhIG5ldyBzZWN0aW9uIGlzIHJlY2VpdmVkLCB0aGUgc2VjdGlvbgorIG11c3QgYmUgZGlzY2FyZGVkLiBJZiB0aGlzIGhhcHBlbnMsIHRoZSB2YWx1ZSBvZiB0aGUgc3VjY2VzcyBwYXJhbWV0ZXIgc2hvdWxkCisgYmUgRE1YX09WRVJSVU5fRVJST1Igb24gdGhlIG5leHQgY2FsbGJhY2suPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBkbXhfc2VjdGlvbl9jYihfX3U4JiN4MjJDNjsgYnVmZmVyMSwgc2l6ZV90CisgYnVmZmVyMV9sZW5ndGgsIF9fdTgmI3gyMkM2OyBidWZmZXIyLCBzaXplX3QKKyBidWZmZXIyX2xlbmd0aCwgZG14X3NlY3Rpb25fZmlsdGVyX3QmI3gyMkM2OyBzb3VyY2UsCisgZG14X3N1Y2Nlc3NfdCBzdWNjZXNzKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4KiBidWZmZXIxPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsdGVyZWQgc2VjdGlvbiwgZS5nLiB3aXRoaW4gdGhlCisgY2lyY3VsYXIgYnVmZmVyIG9mIHRoZSBkZW11eCBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIxX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBmaWx0ZXJlZCBzZWN0aW9uIGRhdGEgaW4gYnVmZmVyMSwgaW5jbHVkaW5nCisgaGVhZGVycyBhbmQgQ1JDLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4KiBidWZmZXIyPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBmaWx0ZXJlZCBzZWN0aW9uIGRhdGEsIG9yIE5VTEwuCisgVXNlZnVsIHRvIGhhbmRsZSB0aGUgd3JhcHBpbmcgb2YgYSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBmaWx0ZXJlZCBzZWN0aW9uIGRhdGEgaW4gYnVmZmVyMiwgaW5jbHVkaW5nCisgaGVhZGVycyBhbmQgQ1JDLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9maWx0ZXJfdCoKKyBmaWx0ZXI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyB0aGUgZmlsdGVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsYmFjay48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3N1Y2Nlc3NfdAorIHN1Y2Nlc3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gc2VjdGlvbiByZWNlcHRpb24uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Q29udGludWUgZmlsdGVyaW5nLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U3RvcCBmaWx0ZXJpbmcgLSBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGEgY2FsbCB0bworIHN0b3BfZmlsdGVyaW5nKCkgb24gdGhlIFNlY3Rpb24gRmVlZCBBUEkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyA8L3NlY3Rpb24+PC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InRzX2ZlZWRfYXBpIj4KKzx0aXRsZT5UUyBGZWVkIEFQSTwvdGl0bGU+Cis8cGFyYT5BIFRTIGZlZWQgaXMgdHlwaWNhbGx5IG1hcHBlZCB0byBhIGhhcmR3YXJlIFBJRCBmaWx0ZXIgb24gdGhlIGRlbXV4IGNoaXAuCitVc2luZyB0aGlzIEFQSSwgdGhlIGNsaWVudCBjYW4gc2V0IHRoZSBmaWx0ZXJpbmcgcHJvcGVydGllcyB0byBzdGFydC9zdG9wIGZpbHRlcmluZyBUUworcGFja2V0cyBvbiBhIHBhcnRpY3VsYXIgVFMgZmVlZC4gVGhlIEFQSSBpcyBkZWZpbmVkIGFzIGFuIGFic3RyYWN0IGludGVyZmFjZSBvZiB0aGUgdHlwZQorZG14X3RzX2ZlZWRfdC4KKzwvcGFyYT4KKzxwYXJhPlRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBzaG91bGQgYmUgZGVmaW5lZCBzdGF0aWMgb3IgbW9kdWxlIHByaXZhdGUuIFRoZQorY2xpZW50IGNhbiBnZXQgdGhlIGhhbmRsZSBvZiBhIFRTIGZlZWQgQVBJIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGFsbG9jYXRlX3RzX2ZlZWQoKSBpbiB0aGUKK2RlbXV4IEFQSS4KKzwvcGFyYT4KKworPHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5zZXQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBhcmFtZXRlcnMgb2YgYSBUUyBmZWVkLiBBbnkgZmlsdGVyaW5nIGluIHByb2dyZXNzIG9uIHRoZQorIFRTIGZlZWQgbXVzdCBiZSBzdG9wcGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzZXQgKCBkbXhfdHNfZmVlZF90JiN4MjJDNjsgZmVlZCwgX191MTYgcGlkLCBzaXplX3QKKyBjYWxsYmFja19sZW5ndGgsIHNpemVfdCBjaXJjdWxhcl9idWZmZXJfc2l6ZSwgaW50CisgZGVzY3JhbWJsZSwgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3UxNiBwaWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBJRCB2YWx1ZSB0byBmaWx0ZXIuIE9ubHkgdGhlIFRTIHBhY2tldHMgY2FycnlpbmcgdGhlCisgc3BlY2lmaWVkIFBJRCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgQVBJIGNsaWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90CisgY2FsbGJhY2tfbGVuZ3RoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5OdW1iZXIgb2YgYnl0ZXMgdG8gZGVsaXZlciB3aXRoIGVhY2ggY2FsbCB0byB0aGUKKyBkbXhfdHNfY2IoKSBjYWxsYmFjayBmdW5jdGlvbi4gVGhlIHZhbHVlIG9mIHRoaXMKKyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMTg4LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QKKyBjaXJjdWxhcl9idWZmZXJfc2l6ZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U2l6ZSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIGZvciB0aGUgZmlsdGVyZWQgVFMgcGFja2V0cy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRlc2NyYW1ibGU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklmIG5vbi16ZXJvLCBkZXNjcmFtYmxlIHRoZSBmaWx0ZXJlZCBUUyBwYWNrZXRzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgdGltZXNwZWMKKyB0aW1lb3V0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5NYXhpbXVtIHRpbWUgdG8gd2FpdCBiZWZvcmUgZGVsaXZlcmluZyByZWNlaXZlZCBUUworIHBhY2tldHMgdG8gdGhlIGNsaWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vIGRlc2NyYW1ibGluZyBmYWNpbGl0eSBhdmFpbGFibGUgZm9yIFRTLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnN0YXJ0X2ZpbHRlcmluZygpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlN0YXJ0cyBmaWx0ZXJpbmcgVFMgcGFja2V0cyBvbiB0aGlzIFRTIGZlZWQsIGFjY29yZGluZyB0byBpdHMgc2V0dGluZ3MuIFRoZSBQSUQKKyB2YWx1ZSB0byBmaWx0ZXIgY2FuIGJlIHNldCBieSB0aGUgQVBJIGNsaWVudC4gQWxsIG1hdGNoaW5nIFRTIHBhY2tldHMgYXJlCisgZGVsaXZlcmVkIGFzeW5jaHJvbm91c2x5IHRvIHRoZSBjbGllbnQsIHVzaW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkCisgd2l0aCBhbGxvY2F0ZV90c19mZWVkKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzdGFydF9maWx0ZXJpbmcoZG14X3RzX2ZlZWRfdCYjeDIyQzY7IGZlZWQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnN0b3BfZmlsdGVyaW5nKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U3RvcHMgZmlsdGVyaW5nIFRTIHBhY2tldHMgb24gdGhpcyBUUyBmZWVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgc3RvcF9maWx0ZXJpbmcoZG14X3RzX2ZlZWRfdCYjeDIyQzY7IGZlZWQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJzZWN0aW9uX2ZlZWRfYXBpIj4KKzx0aXRsZT5TZWN0aW9uIEZlZWQgQVBJPC90aXRsZT4KKzxwYXJhPkEgc2VjdGlvbiBmZWVkIGlzIGEgcmVzb3VyY2UgY29uc2lzdGluZyBvZiBhIFBJRCBmaWx0ZXIgYW5kIGEgc2V0IG9mIHNlY3Rpb24gZmlsdGVycy4gVXNpbmcgdGhpcworQVBJLCB0aGUgY2xpZW50IGNhbiBzZXQgdGhlIHByb3BlcnRpZXMgb2YgYSBzZWN0aW9uIGZlZWQgYW5kIHRvIHN0YXJ0L3N0b3AgZmlsdGVyaW5nLiBUaGUgQVBJIGlzCitkZWZpbmVkIGFzIGFuIGFic3RyYWN0IGludGVyZmFjZSBvZiB0aGUgdHlwZSBkbXhfc2VjdGlvbl9mZWVkX3QuIFRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQKK3RoZSBpbnRlcmZhY2Ugc2hvdWxkIGJlIGRlZmluZWQgc3RhdGljIG9yIG1vZHVsZSBwcml2YXRlLiBUaGUgY2xpZW50IGNhbiBnZXQgdGhlIGhhbmRsZSBvZgorYSBzZWN0aW9uIGZlZWQgQVBJIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGFsbG9jYXRlX3NlY3Rpb25fZmVlZCgpIGluIHRoZSBkZW11eAorQVBJLgorPC9wYXJhPgorPHBhcmE+T24gZGVtdXggcGxhdGZvcm1zIHRoYXQgcHJvdmlkZSBzZWN0aW9uIGZpbHRlcmluZyBpbiBoYXJkd2FyZSwgdGhlIFNlY3Rpb24gRmVlZCBBUEkKK2ltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgc29mdHdhcmUgd3JhcHBlciBmb3IgdGhlIGRlbXV4IGhhcmR3YXJlLiBPdGhlciBwbGF0Zm9ybXMgbWF5CitzdXBwb3J0IG9ubHkgUElEIGZpbHRlcmluZyBpbiBoYXJkd2FyZSwgcmVxdWlyaW5nIHRoYXQgVFMgcGFja2V0cyBhcmUgY29udmVydGVkIHRvIHNlY3Rpb25zIGluCitzb2Z0d2FyZS4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZSBTZWN0aW9uIEZlZWQgQVBJIGltcGxlbWVudGF0aW9uIGNhbiBiZSBhIGNsaWVudCBvZiB0aGUgVFMKK0ZlZWQgQVBJLgorPC9wYXJhPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0ia2RhcGlfc2V0Ij4KKzx0aXRsZT5zZXQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBhcmFtZXRlcnMgb2YgYSBzZWN0aW9uIGZlZWQuIEFueSBmaWx0ZXJpbmcgaW4gcHJvZ3Jlc3Mgb24KKyB0aGUgc2VjdGlvbiBmZWVkIG11c3QgYmUgc3RvcHBlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBJZiBkZXNjcmFtYmxpbmcKKyBpcyBlbmFibGVkLCB0aGUgcGF5bG9hZF9zY3JhbWJsaW5nX2NvbnRyb2wgYW5kIGFkZHJlc3Nfc2NyYW1ibGluZ19jb250cm9sCisgZmllbGRzIG9mIHJlY2VpdmVkIERWQiBkYXRhZ3JhbSBzZWN0aW9ucyBzaG91bGQgYmUgb2JzZXJ2ZWQuIElmIGVpdGhlciBvbmUgaXMKKyBub24temVybywgdGhlIHNlY3Rpb24gc2hvdWxkIGJlIGRlc2NyYW1ibGVkIGVpdGhlciBpbiBoYXJkd2FyZSBvciB1c2luZyB0aGUKKyBmdW5jdGlvbnMgZGVzY3JhbWJsZV9tYWNfYWRkcmVzcygpIGFuZCBkZXNjcmFtYmxlX3NlY3Rpb25fcGF5bG9hZCgpIG9mIHRoZQorIGRlbXV4IEFQSS4gTm90ZSB0aGF0IGFjY29yZGluZyB0byB0aGUgTVBFRy0yIFN5c3RlbXMgc3BlY2lmaWNhdGlvbiwgb25seQorIHRoZSBwYXlsb2FkcyBvZiBwcml2YXRlIHNlY3Rpb25zIGNhbiBiZSBzY3JhbWJsZWQgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIHNlY3Rpb24KKyBkYXRhIG11c3QgYmUgc2VudCBpbiB0aGUgY2xlYXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzZXQoZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCwgX191MTYgcGlkLCBzaXplX3QKKyBjaXJjdWxhcl9idWZmZXJfc2l6ZSwgaW50IGRlc2NyYW1ibGUsIGludAorIGNoZWNrX2NyYyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90KgorIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPl9fdTE2IHBpZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UElEIHZhbHVlIHRvIGZpbHRlcjsgb25seSB0aGUgVFMgcGFja2V0cyBjYXJyeWluZyB0aGUKKyBzcGVjaWZpZWQgUElEIHdpbGwgYmUgYWNjZXB0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdAorIGNpcmN1bGFyX2J1ZmZlcl9zaXplPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TaXplIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgZm9yIGZpbHRlcmVkIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZGVzY3JhbWJsZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SWYgbm9uLXplcm8sIGRlc2NyYW1ibGUgYW55IHNlY3Rpb25zIHRoYXQgYXJlIHNjcmFtYmxlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNoZWNrX2NyYzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SWYgbm9uLXplcm8sIGNoZWNrIHRoZSBDUkMgdmFsdWVzIG9mIGZpbHRlcmVkIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRU5PTUVNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Ob3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGVzY3JhbWJsaW5nIGZhY2lsaXR5IGF2YWlsYWJsZSBmb3Igc2VjdGlvbnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXJzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmFsbG9jYXRlX2ZpbHRlcigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBhIHNlY3Rpb24gZmlsdGVyIG9uIHRoZSBkZW11eC4gSXQgc2hvdWxkIG9ubHkgYmUKKyBjYWxsZWQgd2hlbiBubyBmaWx0ZXJpbmcgaXMgaW4gcHJvZ3Jlc3Mgb24gdGhpcyBzZWN0aW9uIGZlZWQuIElmIGEgZmlsdGVyIGNhbm5vdCBiZQorIGFsbG9jYXRlZCwgdGhlIGZ1bmN0aW9uIGZhaWxzIHdpdGggLUVOT1NQQy4gU2VlIGluIHNlY3Rpb24gPz8gZm9yIHRoZSBmb3JtYXQgb2YKKyB0aGUgc2VjdGlvbiBmaWx0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBiaXRmaWVsZHMgZmlsdGVyX21hc2sgYW5kIGZpbHRlcl92YWx1ZSBzaG91bGQgb25seSBiZSBtb2RpZmllZCB3aGVuIG5vCisgZmlsdGVyaW5nIGlzIGluIHByb2dyZXNzIG9uIHRoaXMgc2VjdGlvbiBmZWVkLiBmaWx0ZXJfbWFzayBjb250cm9scyB3aGljaCBiaXRzIG9mCisgZmlsdGVyX3ZhbHVlIGFyZSBjb21wYXJlZCB3aXRoIHRoZSBzZWN0aW9uIGhlYWRlcnMvcGF5bG9hZC4gT24gYSBiaW5hcnkgdmFsdWUKKyBvZiAxIGluIGZpbHRlcl9tYXNrLCB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBjb21wYXJlZC4gVGhlIGZpbHRlciBvbmx5IGFjY2VwdHMKKyBzZWN0aW9ucyB0aGF0IGFyZSBlcXVhbCB0byBmaWx0ZXJfdmFsdWUgaW4gYWxsIHRoZSB0ZXN0ZWQgYml0IHBvc2l0aW9ucy4gQW55IGNoYW5nZXMKKyB0byB0aGUgdmFsdWVzIG9mIGZpbHRlcl9tYXNrIGFuZCBmaWx0ZXJfdmFsdWUgYXJlIGd1YXJhbnRlZWQgdG8gdGFrZSBlZmZlY3Qgb25seQorIHdoZW4gdGhlIHN0YXJ0X2ZpbHRlcmluZygpIGZ1bmN0aW9uIGlzIGNhbGxlZCBuZXh0IHRpbWUuIFRoZSBwYXJlbnQgcG9pbnRlciBpbgorIHRoZSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIEFQSSBpbXBsZW1lbnRhdGlvbiB0byB0aGUgdmFsdWUgb2YgdGhlIGZlZWQKKyBwYXJhbWV0ZXIuIFRoZSBwcml2IHBvaW50ZXIgaXMgbm90IHVzZWQgYnkgdGhlIEFQSSBpbXBsZW1lbnRhdGlvbiwgYW5kIGNhbgorIHRodXMgYmUgZnJlZWx5IHV0aWxpemVkIGJ5IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbi4gQW55IGRhdGEgcG9pbnRlZCB0byBieSB0aGUKKyBwcml2IHBvaW50ZXIgaXMgYXZhaWxhYmxlIHRvIHRoZSByZWNpcGllbnQgb2YgdGhlIGRteF9zZWN0aW9uX2NiKCkgZnVuY3Rpb24gY2FsbC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+V2hpbGUgdGhlIG1heGltdW0gc2VjdGlvbiBmaWx0ZXIgbGVuZ3RoIChETVhfTUFYX0ZJTFRFUl9TSVpFKSBpcworIGN1cnJlbnRseSBzZXQgYXQgMTYgYnl0ZXMsIGhhcmR3YXJlIGZpbHRlcnMgb2YgdGhhdCBzaXplIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbAorIHBsYXRmb3Jtcy4gVGhlcmVmb3JlLCBzZWN0aW9uIGZpbHRlcmluZyB3aWxsIG9mdGVuIHRha2UgcGxhY2UgZmlyc3QgaW4gaGFyZHdhcmUsCisgZm9sbG93ZWQgYnkgZmlsdGVyaW5nIGluIHNvZnR3YXJlIGZvciB0aGUgaGVhZGVyIGJ5dGVzIHRoYXQgd2VyZSBub3QgY292ZXJlZAorIGJ5IGEgaGFyZHdhcmUgZmlsdGVyLiBUaGUgZmlsdGVyX21hc2sgZmllbGQgY2FuIGJlIGNoZWNrZWQgdG8gZGV0ZXJtaW5lIGhvdworIG1hbnkgYnl0ZXMgb2YgdGhlIHNlY3Rpb24gZmlsdGVyIGFyZSBhY3R1YWxseSB1c2VkLCBhbmQgaWYgdGhlIGhhcmR3YXJlIGZpbHRlciB3aWxsCisgc3VmZmljZS4gQWRkaXRpb25hbGx5LCBzb2Z0d2FyZS1vbmx5IHNlY3Rpb24gZmlsdGVycyBjYW4gb3B0aW9uYWxseSBiZSBhbGxvY2F0ZWQKKyB0byBjbGllbnRzIHdoZW4gYWxsIGhhcmR3YXJlIHNlY3Rpb24gZmlsdGVycyBhcmUgaW4gdXNlLiBOb3RlIHRoYXQgb24gbW9zdCBkZW11eAorIGhhcmR3YXJlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBmaWx0ZXIgb24gdGhlIHNlY3Rpb25fbGVuZ3RoIGZpZWxkIG9mIHRoZSBzZWN0aW9uCisgaGVhZGVyICYjODIxMTsgdGh1cyB0aGlzIGZpZWxkIGlzIGlnbm9yZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIGluY2x1ZGVkIGluIGZpbHRlcl92YWx1ZSBhbmQKKyBmaWx0ZXJfbWFzayBmaWVsZHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBhbGxvY2F0ZV9maWx0ZXIoZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCwKKyBkbXhfc2VjdGlvbl9maWx0ZXJfdCYjeDIyQzY7JiN4MjJDNjsgZmlsdGVyKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9mZWVkX3QqCisgZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc2VjdGlvbiBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmlsdGVyX3QqKgorIGZpbHRlcjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZpbHRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NQQzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZmlsdGVycyBvZiBnaXZlbiB0eXBlIGFuZCBsZW5ndGggYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5yZWxlYXNlX2ZpbHRlcigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYWxsIHRoZSByZXNvdXJjZXMgb2YgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBzZWN0aW9uIGZpbHRlci4KKyBUaGUgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgZmlsdGVyaW5nIGlzIGluIHByb2dyZXNzIG9uIHRoaXMgc2VjdGlvbgorIGZlZWQuIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxlciBzaG91bGQgbm90IHRyeSB0byBkZXJlZmVyZW5jZSB0aGUKKyBmaWx0ZXIgcG9pbnRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlbGVhc2VfZmlsdGVyICggZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCwKKyBkbXhfc2VjdGlvbl9maWx0ZXJfdCYjeDIyQzY7IGZpbHRlcik7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90KgorIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9zZWN0aW9uX2ZpbHRlcl90KgorIGZpbHRlcjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SS9PIFBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIGRhdGEgb2YgYSBzZWN0aW9uIGZpbHRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gc3VjaCBmaWx0ZXIgYWxsb2NhdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnN0YXJ0X2ZpbHRlcmluZygpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlN0YXJ0cyBmaWx0ZXJpbmcgc2VjdGlvbnMgb24gdGhpcyBzZWN0aW9uIGZlZWQsIGFjY29yZGluZyB0byBpdHMgc2V0dGluZ3MuIFNlY3Rpb25zCisgYXJlIGZpcnN0IGZpbHRlcmVkIGJhc2VkIG9uIHRoZWlyIFBJRCBhbmQgdGhlbiBtYXRjaGVkIHdpdGggdGhlIHNlY3Rpb24KKyBmaWx0ZXJzIGFsbG9jYXRlZCBmb3IgdGhpcyBmZWVkLiBJZiB0aGUgc2VjdGlvbiBtYXRjaGVzIHRoZSBQSUQgZmlsdGVyIGFuZAorIGF0IGxlYXN0IG9uZSBzZWN0aW9uIGZpbHRlciwgaXQgaXMgZGVsaXZlcmVkIHRvIHRoZSBBUEkgY2xpZW50LiBUaGUgc2VjdGlvbgorIGlzIGRlbGl2ZXJlZCBhc3luY2hyb25vdXNseSB1c2luZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoCisgYWxsb2NhdGVfc2VjdGlvbl9mZWVkKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzdGFydF9maWx0ZXJpbmcgKCBkbXhfc2VjdGlvbl9mZWVkX3QmI3gyMkM2OyBmZWVkICk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90KgorIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHdhcyBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+c3RvcF9maWx0ZXJpbmcoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TdG9wcyBmaWx0ZXJpbmcgc2VjdGlvbnMgb24gdGhpcyBzZWN0aW9uIGZlZWQuIE5vdGUgdGhhdCBhbnkgY2hhbmdlcyB0byB0aGUKKyBmaWx0ZXJpbmcgcGFyYW1ldGVycyAoZmlsdGVyX3ZhbHVlLCBmaWx0ZXJfbWFzaywgZXRjLikgc2hvdWxkIG9ubHkgYmUgbWFkZSB3aGVuCisgZmlsdGVyaW5nIGlzIHN0b3BwZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzdG9wX2ZpbHRlcmluZyAoIGRteF9zZWN0aW9uX2ZlZWRfdCYjeDIyQzY7IGZlZWQgKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9mZWVkX3QqCisgZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc2VjdGlvbiBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL25ldC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL25ldC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlMzg4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvbmV0LnhtbApAQCAtMCwwICsxLDEyIEBACis8dGl0bGU+RFZCIE5ldHdvcmsgQVBJPC90aXRsZT4KKzxwYXJhPlRoZSBEVkIgbmV0IGRldmljZSBlbmFibGVzIGZlZWRpbmcgb2YgTVBFIChtdWx0aSBwcm90b2NvbCBlbmNhcHN1bGF0aW9uKSBwYWNrZXRzCityZWNlaXZlZCB2aWEgRFZCIGludG8gdGhlIExpbnV4IG5ldHdvcmsgcHJvdG9jb2wgc3RhY2ssIGUuZy4gZm9yIGludGVybmV0IHZpYSBzYXRlbGxpdGUKK2FwcGxpY2F0aW9ucy4gSXQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyMC9uZXQwPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kCithbmQgaW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi9uZXQuaDwvZW1waGFzaXM+IGluIHlvdXIKK2FwcGxpY2F0aW9uLgorPC9wYXJhPgorPHNlY3Rpb24gaWQ9ImR2Yl9uZXRfdHlwZXMiPgorPHRpdGxlPkRWQiBOZXQgRGF0YSBUeXBlczwvdGl0bGU+Cis8cGFyYT5UbyBiZSB3cml0dGVuJiN4MjAyNjsKKzwvcGFyYT4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvdmlkZW8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi92aWRlby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiMjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvdmlkZW8ueG1sCkBAIC0wLDAgKzEsMTk3MSBAQAorPHRpdGxlPkRWQiBWaWRlbyBEZXZpY2U8L3RpdGxlPgorPHBhcmE+VGhlIERWQiB2aWRlbyBkZXZpY2UgY29udHJvbHMgdGhlIE1QRUcyIHZpZGVvIGRlY29kZXIgb2YgdGhlIERWQiBoYXJkd2FyZS4gSXQKK2NhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIDxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlcjAvdmlkZW8wPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZAoraW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi92aWRlby5oPC9lbXBoYXNpcz4gaW4geW91cgorYXBwbGljYXRpb24uCis8L3BhcmE+Cis8cGFyYT5Ob3RlIHRoYXQgdGhlIERWQiB2aWRlbyBkZXZpY2Ugb25seSBjb250cm9scyBkZWNvZGluZyBvZiB0aGUgTVBFRyB2aWRlbyBzdHJlYW0sIG5vdAoraXRzIHByZXNlbnRhdGlvbiBvbiB0aGUgVFYgb3IgY29tcHV0ZXIgc2NyZWVuLiBPbiBQQ3MgdGhpcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBieSBhbgorYXNzb2NpYXRlZCB2aWRlbzRsaW51eCBkZXZpY2UsIGUuZy4gPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L3ZpZGVvPC9lbXBoYXNpcz4sIHdoaWNoIGFsbG93cyBzY2FsaW5nIGFuZCBkZWZpbmluZyBvdXRwdXQKK3dpbmRvd3MuCis8L3BhcmE+Cis8cGFyYT5Tb21lIERWQiBjYXJkcyBkb24mIzgyMTc7dCBoYXZlIHRoZWlyIG93biBNUEVHIGRlY29kZXIsIHdoaWNoIHJlc3VsdHMgaW4gdGhlIG9taXNzaW9uIG9mCit0aGUgYXVkaW8gYW5kIHZpZGVvIGRldmljZSBhcyB3ZWxsIGFzIHRoZSB2aWRlbzRsaW51eCBkZXZpY2UuCis8L3BhcmE+Cis8cGFyYT5UaGUgaW9jdGxzIHRoYXQgZGVhbCB3aXRoIFNQVXMgKHN1YiBwaWN0dXJlIHVuaXRzKSBhbmQgbmF2aWdhdGlvbiBwYWNrZXRzIGFyZSBvbmx5CitzdXBwb3J0ZWQgb24gc29tZSBNUEVHIGRlY29kZXJzIG1hZGUgZm9yIERWRCBwbGF5YmFjay4KKzwvcGFyYT4KKzxzZWN0aW9uIGlkPSJ2aWRlb190eXBlcyI+Cis8dGl0bGU+VmlkZW8gRGF0YSBUeXBlczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19mb3JtYXRfdCI+Cis8dGl0bGU+dmlkZW9fZm9ybWF0X3Q8L3RpdGxlPgorPHBhcmE+VGhlIDxlbXBoYXNpcyByb2xlPSJ0dCI+dmlkZW9fZm9ybWF0X3Q8L2VtcGhhc2lzPiBkYXRhIHR5cGUgZGVmaW5lZCBieQorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSB7CisJIFZJREVPX0ZPUk1BVF80XzMsCisJIFZJREVPX0ZPUk1BVF8xNl85CisgfSB2aWRlb19mb3JtYXRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5pcyB1c2VkIGluIHRoZSBWSURFT19TRVRfRk9STUFUIGZ1bmN0aW9uICg/PykgdG8gdGVsbCB0aGUgZHJpdmVyIHdoaWNoIGFzcGVjdCByYXRpbwordGhlIG91dHB1dCBoYXJkd2FyZSAoZS5nLiBUVikgaGFzLiBJdCBpcyBhbHNvIHVzZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB2aWRlb19zdGF0dXMKKyg/PykgcmV0dXJuZWQgYnkgVklERU9fR0VUX1NUQVRVUyAoPz8pIGFuZCB2aWRlb19ldmVudCAoPz8pIHJldHVybmVkIGJ5CitWSURFT19HRVRfRVZFTlQgKD8/KSB3aGljaCByZXBvcnQgYWJvdXQgdGhlIGRpc3BsYXkgZm9ybWF0IG9mIHRoZSBjdXJyZW50IHZpZGVvCitzdHJlYW0uCis8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19kaXNwbGF5X2Zvcm1hdF90Ij4KKzx0aXRsZT52aWRlb19kaXNwbGF5X2Zvcm1hdF90PC90aXRsZT4KKzxwYXJhPkluIGNhc2UgdGhlIGRpc3BsYXkgZm9ybWF0IG9mIHRoZSB2aWRlbyBzdHJlYW0gYW5kIG9mIHRoZSBkaXNwbGF5IGhhcmR3YXJlIGRpZmZlciB0aGUKK2FwcGxpY2F0aW9uIGhhcyB0byBzcGVjaWZ5IGhvdyB0byBoYW5kbGUgdGhlIGNyb3BwaW5nIG9mIHRoZSBwaWN0dXJlLiBUaGlzIGNhbiBiZSBkb25lIHVzaW5nCit0aGUgVklERU9fU0VUX0RJU1BMQVlfRk9STUFUIGNhbGwgKD8/KSB3aGljaCBhY2NlcHRzCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgVklERU9fUEFOX1NDQU4sCisJIFZJREVPX0xFVFRFUl9CT1gsCisJIFZJREVPX0NFTlRFUl9DVVRfT1VUCisgfSB2aWRlb19kaXNwbGF5X2Zvcm1hdF90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPmFzIGFyZ3VtZW50LgorPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0idmlkZW9fc3RyZWFtX3NvdXJjZSI+Cis8dGl0bGU+dmlkZW8gc3RyZWFtIHNvdXJjZTwvdGl0bGU+Cis8cGFyYT5UaGUgdmlkZW8gc3RyZWFtIHNvdXJjZSBpcyBzZXQgdGhyb3VnaCB0aGUgVklERU9fU0VMRUNUX1NPVVJDRSBjYWxsIGFuZCBjYW4gdGFrZQordGhlIGZvbGxvd2luZyB2YWx1ZXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSByZXBsYXlpbmcgZnJvbSBhbiBpbnRlcm5hbCAoZGVtdXhlcikgb3IKK2V4dGVybmFsICh1c2VyIHdyaXRlKSBzb3VyY2UuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgVklERU9fU09VUkNFX0RFTVVYLAorCSBWSURFT19TT1VSQ0VfTUVNT1JZCisgfSB2aWRlb19zdHJlYW1fc291cmNlX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+VklERU9fU09VUkNFX0RFTVVYIHNlbGVjdHMgdGhlIGRlbXVsdGlwbGV4ZXIgKGZlZCBlaXRoZXIgYnkgdGhlIGZyb250ZW5kIG9yIHRoZQorRFZSIGRldmljZSkgYXMgdGhlIHNvdXJjZSBvZiB0aGUgdmlkZW8gc3RyZWFtLiBJZiBWSURFT19TT1VSQ0VfTUVNT1JZCitpcyBzZWxlY3RlZCB0aGUgc3RyZWFtIGNvbWVzIGZyb20gdGhlIGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlIDxlbXBoYXNpcyByb2xlPSJ0dCI+d3JpdGUoKTwvZW1waGFzaXM+IHN5c3RlbQorY2FsbC4KKzwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX3BsYXlfc3RhdGUiPgorPHRpdGxlPnZpZGVvIHBsYXkgc3RhdGU8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBWSURFT19HRVRfU1RBVFVTIGNhbGwgcmVwcmVzZW50aW5nIHRoZQorc3RhdGUgb2YgdmlkZW8gcGxheWJhY2suCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgVklERU9fU1RPUFBFRCwKKwkgVklERU9fUExBWUlORywKKwkgVklERU9fRlJFRVpFRAorIH0gdmlkZW9fcGxheV9zdGF0ZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX2V2ZW50Ij4KKzx0aXRsZT5zdHJ1Y3QgdmlkZW9fZXZlbnQ8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBpcyB0aGUgc3RydWN0dXJlIG9mIGEgdmlkZW8gZXZlbnQgYXMgaXQgaXMgcmV0dXJuZWQgYnkgdGhlIFZJREVPX0dFVF9FVkVOVAorY2FsbC4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgdmlkZW9fZXZlbnQgeworCSBpbnQzMl90IHR5cGU7CisJIHRpbWVfdCB0aW1lc3RhbXA7CisJIHVuaW9uIHsKKwkJIHZpZGVvX2Zvcm1hdF90IHZpZGVvX2Zvcm1hdDsKKwkgfSB1OworIH07Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0idmlkZW9fc3RhdHVzIj4KKzx0aXRsZT5zdHJ1Y3QgdmlkZW9fc3RhdHVzPC90aXRsZT4KKzxwYXJhPlRoZSBWSURFT19HRVRfU1RBVFVTIGNhbGwgcmV0dXJucyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbmZvcm1pbmcgYWJvdXQgdmFyaW91cworc3RhdGVzIG9mIHRoZSBwbGF5YmFjayBvcGVyYXRpb24uCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IHZpZGVvX3N0YXR1cyB7CisJIGJvb2xlYW4gdmlkZW9fYmxhbms7CisJIHZpZGVvX3BsYXlfc3RhdGVfdCBwbGF5X3N0YXRlOworCSB2aWRlb19zdHJlYW1fc291cmNlX3Qgc3RyZWFtX3NvdXJjZTsKKwkgdmlkZW9fZm9ybWF0X3QgdmlkZW9fZm9ybWF0OworCSB2aWRlb19kaXNwbGF5Zm9ybWF0X3QgZGlzcGxheV9mb3JtYXQ7CisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5JZiB2aWRlb19ibGFuayBpcyBzZXQgdmlkZW8gd2lsbCBiZSBibGFua2VkIG91dCBpZiB0aGUgY2hhbm5lbCBpcyBjaGFuZ2VkIG9yIGlmIHBsYXliYWNrIGlzCitzdG9wcGVkLiBPdGhlcndpc2UsIHRoZSBsYXN0IHBpY3R1cmUgd2lsbCBiZSBkaXNwbGF5ZWQuIHBsYXlfc3RhdGUgaW5kaWNhdGVzIGlmIHRoZSB2aWRlbyBpcworY3VycmVudGx5IGZyb3plbiwgc3RvcHBlZCwgb3IgYmVpbmcgcGxheWVkIGJhY2suIFRoZSBzdHJlYW1fc291cmNlIGNvcnJlc3BvbmRzIHRvIHRoZSBzZWxldGVkCitzb3VyY2UgZm9yIHRoZSB2aWRlbyBzdHJlYW0uIEl0IGNhbiBjb21lIGVpdGhlciBmcm9tIHRoZSBkZW11bHRpcGxleGVyIG9yIGZyb20gbWVtb3J5LgorVGhlIHZpZGVvX2Zvcm1hdCBpbmRpY2F0ZXMgdGhlIGFzcGVjdCByYXRpbyAob25lIG9mIDQ6MyBvciAxNjo5KSBvZiB0aGUgY3VycmVudGx5CitwbGF5ZWQgdmlkZW8gc3RyZWFtLiBGaW5hbGx5LCBkaXNwbGF5X2Zvcm1hdCBjb3JyZXNwb25kcyB0byB0aGUgc2VsZWN0ZWQgY3JvcHBpbmcKK21vZGUgaW4gY2FzZSB0aGUgc291cmNlIHZpZGVvIGZvcm1hdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0CitkZXZpY2UuCis8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19zdGlsbF9waWN0dXJlIj4KKzx0aXRsZT5zdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZTwvdGl0bGU+Cis8cGFyYT5BbiBJLWZyYW1lIGRpc3BsYXllZCB2aWEgdGhlIFZJREVPX1NUSUxMUElDVFVSRSBjYWxsIGlzIHBhc3NlZCBvbiB3aXRoaW4gdGhlCitmb2xsb3dpbmcgc3RydWN0dXJlLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2OyBwb2ludGVyIHRvIGFuZCBzaXplIG9mIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgJiN4MjJDNjsvCisgc3RydWN0IHZpZGVvX3N0aWxsX3BpY3R1cmUgeworCSBjaGFyICYjeDIyQzY7aUZyYW1lOworCSBpbnQzMl90IHNpemU7CisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19jYXBzIj4KKzx0aXRsZT52aWRlbyBjYXBhYmlsaXRpZXM8L3RpdGxlPgorPHBhcmE+QSBjYWxsIHRvIFZJREVPX0dFVF9DQVBBQklMSVRJRVMgcmV0dXJucyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHdpdGggdGhlIGZvbGxvd2luZworYml0cyBzZXQgYWNjb3JkaW5nIHRvIHRoZSBoYXJkd2FyZXMgY2FwYWJpbGl0aWVzLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2OyBiaXQgZGVmaW5pdGlvbnMgZm9yIGNhcGFiaWxpdGllczogJiN4MjJDNjsvCisgLyYjeDIyQzY7IGNhbiB0aGUgaGFyZHdhcmUgZGVjb2RlIE1QRUcxIGFuZC9vciBNUEVHMj8gJiN4MjJDNjsvCisgI2RlZmluZSBWSURFT19DQVBfTVBFRzEgICAxCisgI2RlZmluZSBWSURFT19DQVBfTVBFRzIgICAyCisgLyYjeDIyQzY7IGNhbiB5b3Ugc2VuZCBhIHN5c3RlbSBhbmQvb3IgcHJvZ3JhbSBzdHJlYW0gdG8gdmlkZW8gZGV2aWNlPworICAgICh5b3Ugc3RpbGwgaGF2ZSB0byBvcGVuIHRoZSB2aWRlbyBhbmQgdGhlIGF1ZGlvIGRldmljZSBidXQgb25seQorICAgICBzZW5kIHRoZSBzdHJlYW0gdG8gdGhlIHZpZGVvIGRldmljZSkgJiN4MjJDNjsvCisgI2RlZmluZSBWSURFT19DQVBfU1lTICAgICA0CisgI2RlZmluZSBWSURFT19DQVBfUFJPRyAgICA4CisgLyYjeDIyQzY7IGNhbiB0aGUgZHJpdmVyIGFsc28gaGFuZGxlIFNQVSwgTkFWSSBhbmQgQ1NTIGVuY29kZWQgZGF0YT8KKyAgICAoQ1NTIEFQSSBpcyBub3QgcHJlc2VudCB5ZXQpICYjeDIyQzY7LworICNkZWZpbmUgVklERU9fQ0FQX1NQVSAgICAxNgorICNkZWZpbmUgVklERU9fQ0FQX05BVkkgICAzMgorICNkZWZpbmUgVklERU9fQ0FQX0NTUyAgICA2NAorPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX3N5c3RlbSI+Cis8dGl0bGU+dmlkZW8gc3lzdGVtPC90aXRsZT4KKzxwYXJhPkEgY2FsbCB0byBWSURFT19TRVRfU1lTVEVNIHNldHMgdGhlIGRlc2lyZWQgdmlkZW8gc3lzdGVtIGZvciBUViBvdXRwdXQuIFRoZQorZm9sbG93aW5nIHN5c3RlbSB0eXBlcyBjYW4gYmUgc2V0OgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSB7CisJICBWSURFT19TWVNURU1fUEFMLAorCSAgVklERU9fU1lTVEVNX05UU0MsCisJICBWSURFT19TWVNURU1fUEFMTiwKKwkgIFZJREVPX1NZU1RFTV9QQUxOYywKKwkgIFZJREVPX1NZU1RFTV9QQUxNLAorCSAgVklERU9fU1lTVEVNX05UU0M2MCwKKwkgIFZJREVPX1NZU1RFTV9QQUw2MCwKKwkgIFZJREVPX1NZU1RFTV9QQUxNNjAKKyB9IHZpZGVvX3N5c3RlbV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX2hpZ2hsaWdodCI+Cis8dGl0bGU+c3RydWN0IHZpZGVvX2hpZ2hsaWdodDwvdGl0bGU+Cis8cGFyYT5DYWxsaW5nIHRoZSBpb2N0bCBWSURFT19TRVRfSElHSExJR0hUUyBwb3N0cyB0aGUgU1BVIGhpZ2hsaWdodCBpbmZvcm1hdGlvbi4gVGhlCitjYWxsIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBmb3JtYXQgZm9yIHRoYXQgaW5mb3JtYXRpb246Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZgorIHN0cnVjdCB2aWRlb19oaWdobGlnaHQgeworCSBib29sZWFuIGFjdGl2ZTsgICAgICAvJiN4MjJDNjsgICAgMT1zaG93IGhpZ2hsaWdodCwgMD1oaWRlIGhpZ2hsaWdodCAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb250cmFzdDE7ICAgLyYjeDIyQzY7ICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29udHJhc3QgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb250cmFzdCAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb250cmFzdDI7ICAgLyYjeDIyQzY7ICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29udHJhc3QgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb250cmFzdCAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb2xvcjE7ICAgICAgLyYjeDIyQzY7ICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29sb3IgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb2xvciAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb2xvcjI7ICAgICAgLyYjeDIyQzY7ICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29sb3IgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb2xvciAmI3gyMkM2Oy8KKwkgdWludDMyX3QgeXBvczsgICAgICAgLyYjeDIyQzY7ICAgMjMtMjIgIGF1dG8gYWN0aW9uIG1vZGUgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAyMS0xMiAgc3RhcnQgeSAmI3gyMkM2Oy8KKwkJCSAgICAgIC8mI3gyMkM2OyAgICA5LSAwICBlbmQgeSAmI3gyMkM2Oy8KKwkgdWludDMyX3QgeHBvczsgICAgICAgLyYjeDIyQzY7ICAgMjMtMjIgIGJ1dHRvbiBjb2xvciBudW1iZXIgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAyMS0xMiAgc3RhcnQgeCAmI3gyMkM2Oy8KKwkJCSAgICAgIC8mI3gyMkM2OyAgICA5LSAwICBlbmQgeCAmI3gyMkM2Oy8KKyB9IHZpZGVvX2hpZ2hsaWdodF90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InZpZGVvX3NwdSI+Cis8dGl0bGU+dmlkZW8gU1BVPC90aXRsZT4KKzxwYXJhPkNhbGxpbmcgVklERU9fU0VUX1NQVSBkZWFjdGl2YXRlcyBvciBhY3RpdmF0ZXMgU1BVIGRlY29kaW5nLCBhY2NvcmRpbmcgdG8gdGhlCitmb2xsb3dpbmcgZm9ybWF0OgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYKKyBzdHJ1Y3QgdmlkZW9fc3B1IHsKKwkgYm9vbGVhbiBhY3RpdmU7CisJIGludCBzdHJlYW1faWQ7CisgfSB2aWRlb19zcHVfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJ2aWRlb19zcHVfcGFsZXR0ZSI+Cis8dGl0bGU+dmlkZW8gU1BVIHBhbGV0dGU8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZXQgdGhlIFNQVSBwYWxldHRlIGJ5IGNhbGxpbmcgVklERU9fU1BVX1BBTEVUVEU6Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZgorIHN0cnVjdCB2aWRlb19zcHVfcGFsZXR0ZXsKKwkgaW50IGxlbmd0aDsKKwkgdWludDhfdCAmI3gyMkM2O3BhbGV0dGU7CisgfSB2aWRlb19zcHVfcGFsZXR0ZV90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InZpZGVvX25hdmlfcGFjayI+Cis8dGl0bGU+dmlkZW8gTkFWSSBwYWNrPC90aXRsZT4KKzxwYXJhPkluIG9yZGVyIHRvIGdldCB0aGUgbmF2aWdhdGlvbmFsIGRhdGEgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaGFzIHRvIGJlIHBhc3NlZCB0byB0aGUgaW9jdGwKK1ZJREVPX0dFVF9OQVZJOgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYKKyBzdHJ1Y3QgdmlkZW9fbmF2aV9wYWNreworCSBpbnQgbGVuZ3RoOyAgICAgICAgIC8mI3gyMkM2OyAwIC4uLiAxMDI0ICYjeDIyQzY7LworCSB1aW50OF90IGRhdGFbMTAyNF07CisgfSB2aWRlb19uYXZpX3BhY2tfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKworPHNlY3Rpb24gaWQ9InZpZGVvX2F0dHJpYnV0ZXMiPgorPHRpdGxlPnZpZGVvIGF0dHJpYnV0ZXM8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQgYnkgYSBjYWxsIHRvIFZJREVPX1NFVF9BVFRSSUJVVEVTOgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgdWludDE2X3QgdmlkZW9fYXR0cmlidXRlc190OworIC8mI3gyMkM2OyAgIGJpdHM6IGRlc2NyLiAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAxNS0xNCBWaWRlbyBjb21wcmVzc2lvbiBtb2RlICgwPU1QRUctMSwgMT1NUEVHLTIpICYjeDIyQzY7LworIC8mI3gyMkM2OyAgIDEzLTEyIFRWIHN5c3RlbSAoMD01MjUvNjAsIDE9NjI1LzUwKSAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAxMS0xMCBBc3BlY3QgcmF0aW8gKDA9NDozLCAzPTE2OjkpICYjeDIyQzY7LworIC8mI3gyMkM2OyAgICA5LSA4IHBlcm1pdHRlZCBkaXNwbGF5IG1vZGUgb24gNDozIG1vbml0b3IgKDA9Ym90aCwgMT1vbmx5IHBhbi1zY2EgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDcgICAgbGluZSAyMS0xIGRhdGEgcHJlc2VudCBpbiBHT1AgKDE9eWVzLCAwPW5vKSAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAgNiAgICBsaW5lIDIxLTIgZGF0YSBwcmVzZW50IGluIEdPUCAoMT15ZXMsIDA9bm8pICYjeDIyQzY7LworIC8mI3gyMkM2OyAgICA1LSAzIHNvdXJjZSByZXNvbHV0aW9uICgwPTcyMHg0ODAvNTc2LCAxPTcwNHg0ODAvNTc2LCAyPTM1Mng0ODAvNTcgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDIgICAgc291cmNlIGxldHRlcmJveGVkICgxPXllcywgMD1ubykgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDAgICAgZmlsbS9jYW1lcmEgbW9kZSAoMD1jYW1lcmEsIDE9ZmlsbSAoNjI1LzUwIG9ubHkpKSAmI3gyMkM2Oy8KKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+PC9zZWN0aW9uPgorCisKKzxzZWN0aW9uIGlkPSJ2aWRlb19mdW5jdGlvbl9jYWxscyI+Cis8dGl0bGU+VmlkZW8gRnVuY3Rpb24gQ2FsbHM8L3RpdGxlPgorCisKKzxzZWN0aW9uIGlkPSJ2aWRlb19mb3BlbiI+Cis8dGl0bGU+b3BlbigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgb3BlbnMgYSBuYW1lZCB2aWRlbyBkZXZpY2UgKGUuZy4gL2Rldi9kdmIvYWRhcHRlcjAvdmlkZW8wKQorIGZvciBzdWJzZXF1ZW50IHVzZS48L3BhcmE+Cis8cGFyYT5XaGVuIGFuIG9wZW4oKSBjYWxsIGhhcyBzdWNjZWVkZWQsIHRoZSBkZXZpY2Ugd2lsbCBiZSByZWFkeSBmb3IgdXNlLgorIFRoZSBzaWduaWZpY2FuY2Ugb2YgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIG1vZGUgaXMgZGVzY3JpYmVkIGluIHRoZQorIGRvY3VtZW50YXRpb24gZm9yIGZ1bmN0aW9ucyB3aGVyZSB0aGVyZSBpcyBhIGRpZmZlcmVuY2UuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUKKyBzZW1hbnRpY3Mgb2YgdGhlIG9wZW4oKSBjYWxsIGl0c2VsZi4gQSBkZXZpY2Ugb3BlbmVkIGluIGJsb2NraW5nIG1vZGUgY2FuIGxhdGVyCisgYmUgcHV0IGludG8gbm9uLWJsb2NraW5nIG1vZGUgKGFuZCB2aWNlIHZlcnNhKSB1c2luZyB0aGUgRl9TRVRGTCBjb21tYW5kCisgb2YgdGhlIGZjbnRsIHN5c3RlbSBjYWxsLiBUaGlzIGlzIGEgc3RhbmRhcmQgc3lzdGVtIGNhbGwsIGRvY3VtZW50ZWQgaW4gdGhlIExpbnV4CisgbWFudWFsIHBhZ2UgZm9yIGZjbnRsLiBPbmx5IG9uZSB1c2VyIGNhbiBvcGVuIHRoZSBWaWRlbyBEZXZpY2UgaW4gT19SRFdSCisgbW9kZS4gQWxsIG90aGVyIGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRldmljZSBpbiB0aGlzIG1vZGUgd2lsbCBmYWlsLCBhbmQgYW4KKyBlcnJvci1jb2RlIHdpbGwgYmUgcmV0dXJuZWQuIElmIHRoZSBWaWRlbyBEZXZpY2UgaXMgb3BlbmVkIGluIE9fUkRPTkxZCisgbW9kZSwgdGhlIG9ubHkgaW9jdGwgY2FsbCB0aGF0IGNhbiBiZSB1c2VkIGlzIFZJREVPX0dFVF9TVEFUVVMuIEFsbCBvdGhlcgorIGNhbGwgd2lsbCByZXR1cm4gYW4gZXJyb3IgY29kZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgb3Blbihjb25zdCBjaGFyICYjeDIyQzY7ZGV2aWNlTmFtZSwgaW50IGZsYWdzKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5jb25zdCBjaGFyCisgKmRldmljZU5hbWU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5hbWUgb2Ygc3BlY2lmaWMgdmlkZW8gZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmxhZ3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgYml0LXdpc2UgT1Igb2YgdGhlIGZvbGxvd2luZyBmbGFnczo8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JET05MWSByZWFkLW9ubHkgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19SRFdSIHJlYWQvd3JpdGUgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19OT05CTE9DSyBvcGVuIGluIG5vbi1ibG9ja2luZyBtb2RlPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+KGJsb2NraW5nIG1vZGUgaXMgdGhlIGRlZmF1bHQpPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJ2aWRlb19mY2xvc2UiPgorPHRpdGxlPmNsb3NlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBzeXN0ZW0gY2FsbCBjbG9zZXMgYSBwcmV2aW91c2x5IG9wZW5lZCB2aWRlbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBjbG9zZShpbnQgZmQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InZpZGVvX2Z3cml0ZSI+Cis8dGl0bGU+d3JpdGUoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGNhbiBvbmx5IGJlIHVzZWQgaWYgVklERU9fU09VUkNFX01FTU9SWSBpcyBzZWxlY3RlZAorIGluIHRoZSBpb2N0bCBjYWxsIFZJREVPX1NFTEVDVF9TT1VSQ0UuIFRoZSBkYXRhIHByb3ZpZGVkIHNoYWxsIGJlIGluCisgUEVTIGZvcm1hdCwgdW5sZXNzIHRoZSBjYXBhYmlsaXR5IGFsbG93cyBvdGhlciBmb3JtYXRzLiBJZiBPX05PTkJMT0NLIGlzCisgbm90IHNwZWNpZmllZCB0aGUgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLiBUaGUgYW1vdW50Cisgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBpcyBpbXBsaWVkIGJ5IGNvdW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3Qgd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICYjeDIyQzY7YnVmLCBzaXplX3QgY291bnQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZvaWQgKmJ1ZjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFBFUyBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QgY291bnQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNpemUgb2YgYnVmLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk1vZGUgVklERU9fU09VUkNFX01FTU9SWSBub3Qgc2VsZWN0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QXR0ZW1wdGVkIHRvIHdyaXRlIG1vcmUgZGF0YSB0aGFuIHRoZSBpbnRlcm5hbCBidWZmZXIgY2FuCisgaG9sZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NUT1A8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGFza3MgdGhlIFZpZGVvIERldmljZSB0byBzdG9wIHBsYXlpbmcgdGhlIGN1cnJlbnQgc3RyZWFtLgorIERlcGVuZGluZyBvbiB0aGUgaW5wdXQgcGFyYW1ldGVyLCB0aGUgc2NyZWVuIGNhbiBiZSBibGFua2VkIG91dCBvciBkaXNwbGF5aW5nCisgdGhlIGxhc3QgZGVjb2RlZCBmcmFtZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NUT1AsIGJvb2xlYW4KKyBtb2RlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NUT1AgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Qm9vbGVhbiBtb2RlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgaG93IHRoZSBzY3JlZW4gc2hhbGwgYmUgaGFuZGxlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UUlVFOiBCbGFuayBzY3JlZW4gd2hlbiBzdG9wLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZBTFNFOiBTaG93IGxhc3QgZGVjb2RlZCBmcmFtZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fUExBWTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIHN0YXJ0IHBsYXlpbmcgYSB2aWRlbyBzdHJlYW0gZnJvbSB0aGUKKyBzZWxlY3RlZCBzb3VyY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19QTEFZKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1BMQVkgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fRlJFRVpFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBzdXNwZW5kcyB0aGUgbGl2ZSB2aWRlbyBzdHJlYW0gYmVpbmcgcGxheWVkLiBEZWNvZGluZworIGFuZCBwbGF5aW5nIGFyZSBmcm96ZW4uIEl0IGlzIHRoZW4gcG9zc2libGUgdG8gcmVzdGFydCB0aGUgZGVjb2RpbmcKKyBhbmQgcGxheWluZyBwcm9jZXNzIG9mIHRoZSB2aWRlbyBzdHJlYW0gdXNpbmcgdGhlIFZJREVPX0NPTlRJTlVFCisgY29tbWFuZC4gSWYgVklERU9fU09VUkNFX01FTU9SWSBpcyBzZWxlY3RlZCBpbiB0aGUgaW9jdGwgY2FsbAorIFZJREVPX1NFTEVDVF9TT1VSQ0UsIHRoZSBEVkIgc3Vic3lzdGVtIHdpbGwgbm90IGRlY29kZSBhbnkgbW9yZQorIGRhdGEgdW50aWwgdGhlIGlvY3RsIGNhbGwgVklERU9fQ09OVElOVUUgb3IgVklERU9fUExBWSBpcyBwZXJmb3JtZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19GUkVFWkUpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fRlJFRVpFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciwgcG9zc2libHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUKKyBEVkIgc3Vic3lzdGVtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0NPTlRJTlVFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXN0YXJ0cyBkZWNvZGluZyBhbmQgcGxheWluZyBwcm9jZXNzZXMgb2YgdGhlIHZpZGVvIHN0cmVhbQorIHdoaWNoIHdhcyBwbGF5ZWQgYmVmb3JlIGEgY2FsbCB0byBWSURFT19GUkVFWkUgd2FzIG1hZGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19DT05USU5VRSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19DT05USU5VRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IsIHBvc3NpYmx5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlCisgRFZCIHN1YnN5c3RlbS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRUxFQ1RfU09VUkNFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBpbmZvcm1zIHRoZSB2aWRlbyBkZXZpY2Ugd2hpY2ggc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBpbnB1dAorIGRhdGEuIFRoZSBwb3NzaWJsZSBzb3VyY2VzIGFyZSBkZW11eCBvciBtZW1vcnkuIElmIG1lbW9yeSBpcyBzZWxlY3RlZCwgdGhlCisgZGF0YSBpcyBmZWQgdG8gdGhlIHZpZGVvIGRldmljZSB0aHJvdWdoIHRoZSB3cml0ZSBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VMRUNUX1NPVVJDRSwKKyB2aWRlb19zdHJlYW1fc291cmNlX3Qgc291cmNlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFTEVDVF9TT1VSQ0UgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9fc3RyZWFtX3NvdXJjZV90Cisgc291cmNlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgd2hpY2ggc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBWaWRlbyBzdHJlYW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciwgcG9zc2libHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUKKyBEVkIgc3Vic3lzdGVtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9CTEFOSzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIGJsYW5rIG91dCB0aGUgcGljdHVyZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9CTEFOSywgYm9vbGVhbgorIG1vZGUpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fU0VUX0JMQU5LIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJvb2xlYW4gbW9kZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VFJVRTogQmxhbmsgc2NyZWVuIHdoZW4gc3RvcC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GQUxTRTogU2hvdyBsYXN0IGRlY29kZWQgZnJhbWUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciwgcG9zc2libHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUKKyBEVkIgc3Vic3lzdGVtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fR0VUX1NUQVRVUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIHJldHVybiB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19HRVRfU1RBVFVTLCBzdHJ1Y3QKKyB2aWRlb19zdGF0dXMgJiN4MjJDNjtzdGF0dXMpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fR0VUX1NUQVRVUyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgdmlkZW9fc3RhdHVzCisgKnN0YXR1czwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIFZpZGVvIERldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RhdHVzIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19HRVRfRVZFTlQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHJldHVybnMgYW4gZXZlbnQgb2YgdHlwZSB2aWRlb19ldmVudCBpZiBhdmFpbGFibGUuIElmIGFuIGV2ZW50IGlzCisgbm90IGF2YWlsYWJsZSwgdGhlIGJlaGF2aW9yIGRlcGVuZHMgb24gd2hldGhlciB0aGUgZGV2aWNlIGlzIGluIGJsb2NraW5nIG9yCisgbm9uLWJsb2NraW5nIG1vZGUuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGNhbGwgZmFpbHMgaW1tZWRpYXRlbHkgd2l0aCBlcnJubworIHNldCB0byBFV09VTERCTE9DSy4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgY2FsbCBibG9ja3MgdW50aWwgYW4gZXZlbnQKKyBiZWNvbWVzIGF2YWlsYWJsZS4gVGhlIHN0YW5kYXJkIExpbnV4IHBvbGwoKSBhbmQvb3Igc2VsZWN0KCkgc3lzdGVtIGNhbGxzIGNhbgorIGJlIHVzZWQgd2l0aCB0aGUgZGV2aWNlIGZpbGUgZGVzY3JpcHRvciB0byB3YXRjaCBmb3IgbmV3IGV2ZW50cy4gRm9yIHNlbGVjdCgpLAorIHRoZSBmaWxlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBleGNlcHRmZHMgYXJndW1lbnQsIGFuZCBmb3IKKyBwb2xsKCksIFBPTExQUkkgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyB0aGUgd2FrZS11cCBjb25kaXRpb24uIFJlYWQtb25seQorIHBlcm1pc3Npb25zIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGlvY3RsIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fR0VUX0VWRU5ULCBzdHJ1Y3QKKyB2aWRlb19ldmVudCAmI3gyMkM2O2V2KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX0dFVF9FVkVOVCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgdmlkZW9fZXZlbnQKKyAqZXY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGV2ZW50LCBpZiBhbnksIGlzIHRvIGJlCisgc3RvcmVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZXYgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzczwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlcmUgaXMgbm8gZXZlbnQgcGVuZGluZywgYW5kIHRoZSBkZXZpY2UgaXMgaW4KKyBub24tYmxvY2tpbmcgbW9kZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU9WRVJGTE9XPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PdmVyZmxvdyBpbiBldmVudCBxdWV1ZSAtIG9uZSBvciBtb3JlIGV2ZW50cyB3ZXJlIGxvc3QuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0RJU1BMQVlfRk9STUFUPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBWaWRlbyBEZXZpY2UgdG8gc2VsZWN0IHRoZSB2aWRlbyBmb3JtYXQgdG8gYmUgYXBwbGllZAorIGJ5IHRoZSBNUEVHIGNoaXAgb24gdGhlIHZpZGVvLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4gaW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9CisgVklERU9fU0VUX0RJU1BMQVlfRk9STUFULCB2aWRlb19kaXNwbGF5X2Zvcm1hdF90CisgZm9ybWF0KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9ESVNQTEFZX0ZPUk1BVCBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX2Rpc3BsYXlfZm9ybWF0X3QKKyBmb3JtYXQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNlbGVjdHMgdGhlIHZpZGVvIGZvcm1hdCB0byBiZSB1c2VkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SWxsZWdhbCBwYXJhbWV0ZXIgZm9ybWF0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NUSUxMUElDVFVSRTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIGRpc3BsYXkgYSBzdGlsbCBwaWN0dXJlIChJLWZyYW1lKS4gVGhlCisgaW5wdXQgZGF0YSBzaGFsbCBjb250YWluIGFuIEktZnJhbWUuIElmIHRoZSBwb2ludGVyIGlzIE5VTEwsIHRoZW4gdGhlIGN1cnJlbnQKKyBkaXNwbGF5ZWQgc3RpbGwgcGljdHVyZSBpcyBibGFua2VkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU1RJTExQSUNUVVJFLAorIHN0cnVjdCB2aWRlb19zdGlsbF9waWN0dXJlICYjeDIyQzY7c3ApOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fU1RJTExQSUNUVVJFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdAorIHZpZGVvX3N0aWxsX3BpY3R1cmUKKyAqc3A8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gYSBsb2NhdGlvbiB3aGVyZSBhbiBJLWZyYW1lIGFuZCBzaXplIGlzIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNwIHBvaW50cyB0byBhbiBpbnZhbGlkIGlmcmFtZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19GQVNUX0ZPUldBUkQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGFza3MgdGhlIFZpZGVvIERldmljZSB0byBza2lwIGRlY29kaW5nIG9mIE4gbnVtYmVyIG9mIEktZnJhbWVzLgorIFRoaXMgY2FsbCBjYW4gb25seSBiZSB1c2VkIGlmIFZJREVPX1NPVVJDRV9NRU1PUlkgaXMgc2VsZWN0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19GQVNUX0ZPUldBUkQsIGludAorIG5GcmFtZXMpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fRkFTVF9GT1JXQVJEIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBuRnJhbWVzPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVQRVJNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Nb2RlIFZJREVPX1NPVVJDRV9NRU1PUlkgbm90IHNlbGVjdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgcGFyYW1ldGVyIGZvcm1hdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TTE9XTU9USU9OPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSB2aWRlbyBkZXZpY2UgdG8gcmVwZWF0IGRlY29kaW5nIGZyYW1lcyBOIG51bWJlciBvZgorIHRpbWVzLiBUaGlzIGNhbGwgY2FuIG9ubHkgYmUgdXNlZCBpZiBWSURFT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0xPV01PVElPTiwgaW50CisgbkZyYW1lcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TTE9XTU9USU9OIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBuRnJhbWVzPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCBlYWNoIGZyYW1lLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVQRVJNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Nb2RlIFZJREVPX1NPVVJDRV9NRU1PUlkgbm90IHNlbGVjdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgcGFyYW1ldGVyIGZvcm1hdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19HRVRfQ0FQQUJJTElUSUVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSB2aWRlbyBkZXZpY2UgYWJvdXQgaXRzIGRlY29kaW5nIGNhcGFiaWxpdGllcy4gT24gc3VjY2VzcworIGl0IHJldHVybnMgYW5kIGludGVnZXIgd2hpY2ggaGFzIGJpdHMgc2V0IGFjY29yZGluZyB0byB0aGUgZGVmaW5lcyBpbiBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fR0VUX0NBUEFCSUxJVElFUywKKyB1bnNpZ25lZCBpbnQgJiN4MjJDNjtjYXApOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fR0VUX0NBUEFCSUxJVElFUyBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnVuc2lnbmVkIGludCAqY2FwPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIGEgbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIGNhcGFiaWxpdHkKKyBpbmZvcm1hdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNhcCBwb2ludHMgdG8gYW4gaW52YWxpZCBpZnJhbWUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0lEPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgc2VsZWN0cyB3aGljaCBzdWItc3RyZWFtIGlzIHRvIGJlIGRlY29kZWQgaWYgYSBwcm9ncmFtIG9yIHN5c3RlbQorIHN0cmVhbSBpcyBzZW50IHRvIHRoZSB2aWRlbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VUX0lELCBpbnQKKyBpZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TRVRfSUQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT52aWRlbyBzdWItc3RyZWFtIGlkPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW52YWxpZCBzdWItc3RyZWFtIGlkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0NMRUFSX0JVRkZFUjwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgY2xlYXJzIGFsbCB2aWRlbyBidWZmZXJzIGluIHRoZSBkcml2ZXIgYW5kIGluIHRoZSBkZWNvZGVyIGhhcmR3YXJlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fQ0xFQVJfQlVGRkVSKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX0NMRUFSX0JVRkZFUiBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX1NUUkVBTVRZUEU8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCB0ZWxscyB0aGUgZHJpdmVyIHdoaWNoIGtpbmQgb2Ygc3RyZWFtIHRvIGV4cGVjdCBiZWluZyB3cml0dGVuIHRvIGl0LiBJZgorIHRoaXMgY2FsbCBpcyBub3QgdXNlZCB0aGUgZGVmYXVsdCBvZiB2aWRlbyBQRVMgaXMgdXNlZC4gU29tZSBkcml2ZXJzIG1pZ2h0IG5vdAorIHN1cHBvcnQgdGhpcyBjYWxsIGFuZCBhbHdheXMgZXhwZWN0IFBFUy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9TVFJFQU1UWVBFLAorIGludCB0eXBlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9TVFJFQU1UWVBFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCB0eXBlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJlYW0gdHlwZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dHlwZSBpcyBub3QgYSB2YWxpZCBvciBzdXBwb3J0ZWQgc3RyZWFtIHR5cGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0ZPUk1BVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIHNldHMgdGhlIHNjcmVlbiBmb3JtYXQgKGFzcGVjdCByYXRpbykgb2YgdGhlIGNvbm5lY3RlZCBvdXRwdXQgZGV2aWNlCisgKFRWKSBzbyB0aGF0IHRoZSBvdXRwdXQgb2YgdGhlIGRlY29kZXIgY2FuIGJlIGFkanVzdGVkIGFjY29yZGluZ2x5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4gaW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9GT1JNQVQsCisgdmlkZW9fZm9ybWF0X3QgZm9ybWF0KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9GT1JNQVQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9fZm9ybWF0X3QKKyBmb3JtYXQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvIGZvcm1hdCBvZiBUViBhcyBkZWZpbmVkIGluIHNlY3Rpb24gPz8uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mb3JtYXQgaXMgbm90IGEgdmFsaWQgdmlkZW8gZm9ybWF0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9TWVNURU08L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBzZXRzIHRoZSB0ZWxldmlzaW9uIG91dHB1dCBmb3JtYXQuIFRoZSBmb3JtYXQgKHNlZSBzZWN0aW9uID8/KSBtYXkKKyB2YXJ5IGZyb20gdGhlIGNvbG9yIGZvcm1hdCBvZiB0aGUgZGlzcGxheWVkIE1QRUcgc3RyZWFtLiBJZiB0aGUgaGFyZHdhcmUgaXMKKyBub3QgYWJsZSB0byBkaXNwbGF5IHRoZSByZXF1ZXN0ZWQgZm9ybWF0IHRoZSBjYWxsIHdpbGwgcmV0dXJuIGFuIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4gaW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9TWVNURU0gLAorIHZpZGVvX3N5c3RlbV90IHN5c3RlbSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TRVRfRk9STUFUIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX3N5c3RlbV90Cisgc3lzdGVtPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT52aWRlbyBzeXN0ZW0gb2YgVFYgb3V0cHV0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3lzdGVtIGlzIG5vdCBhIHZhbGlkIG9yIHN1cHBvcnRlZCB2aWRlbyBzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0hJR0hMSUdIVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIHNldHMgdGhlIFNQVSBoaWdobGlnaHQgaW5mb3JtYXRpb24gZm9yIHRoZSBtZW51IGFjY2VzcyBvZiBhIERWRC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19TRVRfSElHSExJR0hUCisgLHZpZGVvX2hpZ2hsaWdodF90ICYjeDIyQzY7dmhpbGl0ZSk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9ISUdITElHSFQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9faGlnaGxpZ2h0X3QKKyAqdmhpbGl0ZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U1BVIEhpZ2hsaWdodCBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gc2VjdGlvbiA/Py48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnB1dCBpcyBub3QgYSB2YWxpZCBoaWdobGlnaHQgc2V0dGluZy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfU1BVPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIFNQVSBkZWNvZGluZyBpbiBhIERWRCBpbnB1dCBzdHJlYW0uIEl0IGNhbgorIG9ubHkgYmUgdXNlZCwgaWYgdGhlIGRyaXZlciBpcyBhYmxlIHRvIGhhbmRsZSBhIERWRCBzdHJlYW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VUX1NQVSAsCisgdmlkZW9fc3B1X3QgJiN4MjJDNjtzcHUpPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TRVRfU1BVIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX3NwdV90ICpzcHU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNQVSBkZWNvZGluZyAoZGUpYWN0aXZhdGlvbiBhbmQgc3ViaWQgc2V0dGluZyBhY2NvcmRpbmcKKyB0byBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW5wdXQgaXMgbm90IGEgdmFsaWQgc3B1IHNldHRpbmcgb3IgZHJpdmVyIGNhbm5vdCBoYW5kbGUKKyBTUFUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX1NQVV9QQUxFVFRFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgc2V0cyB0aGUgU1BVIGNvbG9yIHBhbGV0dGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VUX1NQVV9QQUxFVFRFCisgLHZpZGVvX3NwdV9wYWxldHRlX3QgJiN4MjJDNjtwYWxldHRlICk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9TUFVfUEFMRVRURSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT52aWRlb19zcHVfcGFsZXR0ZV90CisgKnBhbGV0dGU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNQVSBwYWxldHRlIGFjY29yZGluZyB0byBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW5wdXQgaXMgbm90IGEgdmFsaWQgcGFsZXR0ZSBvciBkcml2ZXIgZG9lc24mIzgyMTc7dCBoYW5kbGUgU1BVLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0dFVF9OQVZJPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgcmV0dXJucyBuYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb24gZnJvbSB0aGUgRFZEIHN0cmVhbS4gVGhpcyBpcworIGVzcGVjaWFsbHkgbmVlZGVkIGlmIGFuIGVuY29kZWQgc3RyZWFtIGhhcyB0byBiZSBkZWNvZGVkIGJ5IHRoZSBoYXJkd2FyZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19HRVRfTkFWSSAsCisgdmlkZW9fbmF2aV9wYWNrX3QgJiN4MjJDNjtuYXZpcGFjayk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX0dFVF9OQVZJIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX25hdmlfcGFja190CisgKm5hdmlwYWNrPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5QQ0kgb3IgRFNJIHBhY2sgKHByaXZhdGUgc3RyZWFtIDIpIGFjY29yZGluZyB0byBzZWN0aW9uCisgPz8uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kcml2ZXIgaXMgbm90IGFibGUgdG8gcmV0dXJuIG5hdmlnYXRpb25hbCBpbmZvcm1hdGlvbjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9BVFRSSUJVVEVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgaXMgaW50ZW5kZWQgZm9yIERWRCBwbGF5YmFjayBhbmQgYWxsb3dzIHlvdSB0byBzZXQgY2VydGFpbgorIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJlYW0uIFNvbWUgaGFyZHdhcmUgbWF5IG5vdCBuZWVkIHRoaXMgaW5mb3JtYXRpb24sCisgYnV0IHRoZSBjYWxsIGFsc28gdGVsbHMgdGhlIGhhcmR3YXJlIHRvIHByZXBhcmUgZm9yIERWRCBwbGF5YmFjay48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19TRVRfQVRUUklCVVRFCisgLHZpZGVvX2F0dHJpYnV0ZXNfdCB2YXR0cik8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9BVFRSSUJVVEUgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9fYXR0cmlidXRlc190CisgdmF0dHI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvIGF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIHNlY3Rpb24gPz8uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnB1dCBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgc2V0dGluZy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorIDwvc2VjdGlvbj48L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYjQzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbApAQCAtMCwwICsxLDM2NCBAQAorPCEtLSBHZW5lcmF0ZWQgZmlsZSEgRG8gbm90IGVkaXQuIC0tPgorCis8IS0tIEZ1bmN0aW9ucyAtLT4KKzwhRU5USVRZIGZ1bmMtY2xvc2UgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtY2xvc2UnPjxmdW5jdGlvbj5jbG9zZSgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtaW9jdGwgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtaW9jdGwnPjxmdW5jdGlvbj5pb2N0bCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtbW1hcCAiPGxpbmsgbGlua2VuZD0nZnVuYy1tbWFwJz48ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtbXVubWFwICI8bGluayBsaW5rZW5kPSdmdW5jLW11bm1hcCc+PGZ1bmN0aW9uPm11bm1hcCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtb3BlbiAiPGxpbmsgbGlua2VuZD0nZnVuYy1vcGVuJz48ZnVuY3Rpb24+b3BlbigpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtcG9sbCAiPGxpbmsgbGlua2VuZD0nZnVuYy1wb2xsJz48ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtcmVhZCAiPGxpbmsgbGlua2VuZD0nZnVuYy1yZWFkJz48ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtc2VsZWN0ICI8bGluayBsaW5rZW5kPSdmdW5jLXNlbGVjdCc+PGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtd3JpdGUgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtd3JpdGUnPjxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKworPCEtLSBJb2N0bHMgLS0+Cis8IUVOVElUWSBWSURJT0MtQ1JPUENBUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWNyb3BjYXAnPjxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtREJHLUctQ0hJUC1JREVOVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQnPjxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtREJHLUctUkVHSVNURVIgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1kYmctZy1yZWdpc3Rlcic+PGNvbnN0YW50PlZJRElPQ19EQkdfR19SRUdJU1RFUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtREJHLVMtUkVHSVNURVIgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1kYmctZy1yZWdpc3Rlcic+PGNvbnN0YW50PlZJRElPQ19EQkdfU19SRUdJU1RFUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRFFCVUYgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xYnVmJz48Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1FTkNPREVSLUNNRCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVuY29kZXItY21kJz48Y29uc3RhbnQ+VklESU9DX0VOQ09ERVJfQ01EPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1FTlVNQVVESU8gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtYXVkaW8nPjxjb25zdGFudD5WSURJT0NfRU5VTUFVRElPPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1FTlVNQVVET1VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bWF1ZGlvb3V0Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1BVURPVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU1JTlBVVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW1pbnB1dCc+PGNvbnN0YW50PlZJRElPQ19FTlVNSU5QVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU1PVVRQVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtb3V0cHV0Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1PVVRQVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU1TVEQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtc3RkJz48Y29uc3RhbnQ+VklESU9DX0VOVU1TVEQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU0tRk1UICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bS1mbXQnPjxjb25zdGFudD5WSURJT0NfRU5VTV9GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU0tRlJBTUVJTlRFUlZBTFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzJz48Y29uc3RhbnQ+VklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU0tRlJBTUVTSVpFUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZnJhbWVzaXplcyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctQVVESU8gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWF1ZGlvJz48Y29uc3RhbnQ+VklESU9DX0dfQVVESU88L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctQVVET1VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1hdWRpb291dCc+PGNvbnN0YW50PlZJRElPQ19HX0FVRE9VVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1DUk9QICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jcm9wJz48Y29uc3RhbnQ+VklESU9DX0dfQ1JPUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1DVFJMICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jdHJsJz48Y29uc3RhbnQ+VklESU9DX0dfQ1RSTDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1FTkMtSU5ERVggIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWVuYy1pbmRleCc+PGNvbnN0YW50PlZJRElPQ19HX0VOQ19JTkRFWDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1FWFQtQ1RSTFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWV4dC1jdHJscyc+PGNvbnN0YW50PlZJRElPQ19HX0VYVF9DVFJMUzwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1GQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mYnVmJz48Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1GTVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1GUkVRVUVOQ1kgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZyZXF1ZW5jeSc+PGNvbnN0YW50PlZJRElPQ19HX0ZSRVFVRU5DWTwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1JTlBVVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctaW5wdXQnPjxjb25zdGFudD5WSURJT0NfR19JTlBVVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1KUEVHQ09NUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctanBlZ2NvbXAnPjxjb25zdGFudD5WSURJT0NfR19KUEVHQ09NUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1NUEVHQ09NUCAiPGxpbmsgbGlua2VuZD0nJz48Y29uc3RhbnQ+VklESU9DX0dfTVBFR0NPTVA8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctTU9EVUxBVE9SICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1tb2R1bGF0b3InPjxjb25zdGFudD5WSURJT0NfR19NT0RVTEFUT1I8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctT1VUUFVUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1vdXRwdXQnPjxjb25zdGFudD5WSURJT0NfR19PVVRQVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctUEFSTSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctcGFybSc+PGNvbnN0YW50PlZJRElPQ19HX1BBUk08L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctUFJJT1JJVFkgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXByaW9yaXR5Jz48Y29uc3RhbnQ+VklESU9DX0dfUFJJT1JJVFk8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctU0xJQ0VELVZCSS1DQVAgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwJz48Y29uc3RhbnQ+VklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctU1REICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1zdGQnPjxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctVFVORVIgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXR1bmVyJz48Y29uc3RhbnQ+VklESU9DX0dfVFVORVI8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUxPRy1TVEFUVVMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1sb2ctc3RhdHVzJz48Y29uc3RhbnQ+VklESU9DX0xPR19TVEFUVVM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLU9WRVJMQVkgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1vdmVybGF5Jz48Y29uc3RhbnQ+VklESU9DX09WRVJMQVk8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFCVUYgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xYnVmJz48Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnlidWYnPjxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZQ0FQICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnljYXAnPjxjb25zdGFudD5WSURJT0NfUVVFUllDQVA8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZQ1RSTCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXF1ZXJ5Y3RybCc+PGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZTUVOVSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXF1ZXJ5Y3RybCc+PGNvbnN0YW50PlZJRElPQ19RVUVSWU1FTlU8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZU1REICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnlzdGQnPjxjb25zdGFudD5WSURJT0NfUVVFUllTVEQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVJFUUJVRlMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1yZXFidWZzJz48Y29uc3RhbnQ+VklESU9DX1JFUUJVRlM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVNUUkVBTU9GRiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN0cmVhbW9uJz48Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9GRjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtU1RSRUFNT04gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1zdHJlYW1vbic+PGNvbnN0YW50PlZJRElPQ19TVFJFQU1PTjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1BVURJTyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctYXVkaW8nPjxjb25zdGFudD5WSURJT0NfU19BVURJTzwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1BVURPVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWF1ZGlvb3V0Jz48Y29uc3RhbnQ+VklESU9DX1NfQVVET1VUPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUNST1AgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWNyb3AnPjxjb25zdGFudD5WSURJT0NfU19DUk9QPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUNUUkwgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWN0cmwnPjxjb25zdGFudD5WSURJT0NfU19DVFJMPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUVYVC1DVFJMUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZXh0LWN0cmxzJz48Y29uc3RhbnQ+VklESU9DX1NfRVhUX0NUUkxTPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUZCVUYgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZidWYnPjxjb25zdGFudD5WSURJT0NfU19GQlVGPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUZNVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZm10Jz48Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUZSRVFVRU5DWSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZnJlcXVlbmN5Jz48Y29uc3RhbnQ+VklESU9DX1NfRlJFUVVFTkNZPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUhXLUZSRVEtU0VFSyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXMtaHctZnJlcS1zZWVrJz48Y29uc3RhbnQ+VklESU9DX1NfSFdfRlJFUV9TRUVLPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUlOUFVUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1pbnB1dCc+PGNvbnN0YW50PlZJRElPQ19TX0lOUFVUPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUpQRUdDT01QICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1qcGVnY29tcCc+PGNvbnN0YW50PlZJRElPQ19TX0pQRUdDT01QPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLU1QRUdDT01QICI8bGluayBsaW5rZW5kPScnPjxjb25zdGFudD5WSURJT0NfU19NUEVHQ09NUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1NT0RVTEFUT1IgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLW1vZHVsYXRvcic+PGNvbnN0YW50PlZJRElPQ19TX01PRFVMQVRPUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1PVVRQVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLW91dHB1dCc+PGNvbnN0YW50PlZJRElPQ19TX09VVFBVVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1QQVJNICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1wYXJtJz48Y29uc3RhbnQ+VklESU9DX1NfUEFSTTwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1QUklPUklUWSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctcHJpb3JpdHknPjxjb25zdGFudD5WSURJT0NfU19QUklPUklUWTwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1TVEQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXN0ZCc+PGNvbnN0YW50PlZJRElPQ19TX1NURDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1UVU5FUiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctdHVuZXInPjxjb25zdGFudD5WSURJT0NfU19UVU5FUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtVFJZLUVOQ09ERVItQ01EICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW5jb2Rlci1jbWQnPjxjb25zdGFudD5WSURJT0NfVFJZX0VOQ09ERVJfQ01EPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1UUlktRVhULUNUUkxTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1leHQtY3RybHMnPjxjb25zdGFudD5WSURJT0NfVFJZX0VYVF9DVFJMUzwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtVFJZLUZNVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZm10Jz48Y29uc3RhbnQ+VklESU9DX1RSWV9GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgorCis8IS0tIFR5cGVzIC0tPgorPCFFTlRJVFkgdjRsMi1zdGQtaWQgIjxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RkLWlkJz52NGwyX3N0ZF9pZDwvbGluaz4iPgorCis8IS0tIEVudW1zIC0tPgorPCFFTlRJVFkgdjRsMi1idWYtdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYnVmLXR5cGUnPnY0bDJfYnVmX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY29sb3JzcGFjZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY29sb3JzcGFjZSc+djRsMl9jb2xvcnNwYWNlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLWN0cmwtdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY3RybC10eXBlJz52NGwyX2N0cmxfdHlwZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1leHBvc3VyZS1hdXRvLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV4cG9zdXJlLWF1dG8tdHlwZSc+djRsMl9leHBvc3VyZV9hdXRvX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZmllbGQgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZpZWxkJz52NGwyX2ZpZWxkPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLWZybWl2YWx0eXBlcyAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtaXZhbHR5cGVzJz52NGwyX2ZybWl2YWx0eXBlczwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1mcm1zaXpldHlwZXMgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybXNpemV0eXBlcyc+djRsMl9mcm1zaXpldHlwZXM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbWVtb3J5ICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tZW1vcnknPnY0bDJfbWVtb3J5PC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tYWMzLWJpdHJhdGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tYWMzLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLWNyYyAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1jcmMnPnY0bDJfbXBlZ19hdWRpb19jcmM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1lbXBoYXNpcyAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1lbXBoYXNpcyc+djRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmcgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmcnPnY0bDJfbXBlZ19hdWRpb19lbmNvZGluZzwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLWwxLWJpdHJhdGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSc+djRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1sMi1iaXRyYXRlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWwyLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tbDMtYml0cmF0ZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1sMy1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fbDNfYml0cmF0ZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLW1vZGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbW9kZSc+djRsMl9tcGVnX2F1ZGlvX21vZGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbiAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbic+djRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tc2FtcGxpbmctZnJlcSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1zYW1wbGluZy1mcmVxJz52NGwyX21wZWdfYXVkaW9fc2FtcGxpbmdfZnJlcTwvbGluaz4iPgorPCFFTlRJVFkgY2hyb21hLXNwYXRpYWwtZmlsdGVyLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSdjaHJvbWEtc3BhdGlhbC1maWx0ZXItdHlwZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fY2hyb21hX3NwYXRpYWxfZmlsdGVyX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIGx1bWEtc3BhdGlhbC1maWx0ZXItdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J2x1bWEtc3BhdGlhbC1maWx0ZXItdHlwZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tc3BhdGlhbC1maWx0ZXItbW9kZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXNwYXRpYWwtZmlsdGVyLW1vZGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXRlbXBvcmFsLWZpbHRlci1tb2RlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tdGVtcG9yYWwtZmlsdGVyLW1vZGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctc3RyZWFtLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctc3RyZWFtLXR5cGUnPnY0bDJfbXBlZ19zdHJlYW1fdHlwZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLXN0cmVhbS12YmktZm10ICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXN0cmVhbS12YmktZm10Jz52NGwyX21wZWdfc3RyZWFtX3ZiaV9mbXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy12aWRlby1hc3BlY3QgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmlkZW8tYXNwZWN0Jz52NGwyX21wZWdfdmlkZW9fYXNwZWN0PC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctdmlkZW8tYml0cmF0ZS1tb2RlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZpZGVvLWJpdHJhdGUtbW9kZSc+djRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nJz52NGwyX21wZWdfdmlkZW9fZW5jb2Rpbmc8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcG93ZXItbGluZS1mcmVxdWVuY3kgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXBvd2VyLWxpbmUtZnJlcXVlbmN5Jz52NGwyX3Bvd2VyX2xpbmVfZnJlcXVlbmN5PC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLXByaW9yaXR5ICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1wcmlvcml0eSc+djRsMl9wcmlvcml0eTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi10dW5lci10eXBlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi10dW5lci10eXBlJz52NGwyX3R1bmVyX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcHJlZW1waGFzaXMgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXByZWVtcGhhc2lzJz52NGwyX3ByZWVtcGhhc2lzPC9saW5rPiI+CisKKzwhLS0gU3RydWN0dXJlcyAtLT4KKzwhRU5USVRZIHY0bDItYXVkaW8gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW8nPnY0bDJfYXVkaW88L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItYXVkaW9vdXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW9vdXQnPnY0bDJfYXVkaW9vdXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItYnVmZmVyICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWJ1ZmZlcic+djRsMl9idWZmZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY2FwYWJpbGl0eSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jYXBhYmlsaXR5Jz52NGwyX2NhcGFiaWxpdHk8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY2FwdHVyZXBhcm0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwdHVyZXBhcm0nPnY0bDJfY2FwdHVyZXBhcm08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY2xpcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jbGlwJz52NGwyX2NsaXA8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY29udHJvbCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jb250cm9sJz52NGwyX2NvbnRyb2w8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY3JvcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jcm9wJz52NGwyX2Nyb3A8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY3JvcGNhcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jcm9wY2FwJz52NGwyX2Nyb3BjYXA8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZGJnLWNoaXAtaWRlbnQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLWNoaXAtaWRlbnQnPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZGJnLW1hdGNoICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1tYXRjaCc+djRsMl9kYmdfbWF0Y2g8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZGJnLXJlZ2lzdGVyICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1yZWdpc3Rlcic+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZW5jLWlkeCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4Jz52NGwyX2VuY19pZHg8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZW5jLWlkeC1lbnRyeSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4LWVudHJ5Jz52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZW5jb2Rlci1jbWQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jb2Rlci1jbWQnPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZXh0LWNvbnRyb2wgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXh0LWNvbnRyb2wnPnY0bDJfZXh0X2NvbnRyb2w8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZXh0LWNvbnRyb2xzICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV4dC1jb250cm9scyc+djRsMl9leHRfY29udHJvbHM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZm10ZGVzYyAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mbXRkZXNjJz52NGwyX2ZtdGRlc2M8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZm9ybWF0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZvcm1hdCc+djRsMl9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJhY3QgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhY3QnPnY0bDJfZnJhY3Q8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJhbWVidWZmZXIgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhbWVidWZmZXInPnY0bDJfZnJhbWVidWZmZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJlcXVlbmN5ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZyZXF1ZW5jeSc+djRsMl9mcmVxdWVuY3k8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtaXZhbC1zdGVwd2lzZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1pdmFsLXN0ZXB3aXNlJz52NGwyX2ZybWl2YWxfc3RlcHdpc2U8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtaXZhbGVudW0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtaXZhbGVudW0nPnY0bDJfZnJtaXZhbGVudW08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtc2l6ZS1kaXNjcmV0ZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplLWRpc2NyZXRlJz52NGwyX2ZybXNpemVfZGlzY3JldGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtc2l6ZS1zdGVwd2lzZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplLXN0ZXB3aXNlJz52NGwyX2ZybXNpemVfc3RlcHdpc2U8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtc2l6ZWVudW0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZWVudW0nPnY0bDJfZnJtc2l6ZWVudW08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItaHctZnJlcS1zZWVrICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWh3LWZyZXEtc2Vlayc+djRsMl9od19mcmVxX3NlZWs8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItaW5wdXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItaW5wdXQnPnY0bDJfaW5wdXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItanBlZ2NvbXByZXNzaW9uICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWpwZWdjb21wcmVzc2lvbic+djRsMl9qcGVnY29tcHJlc3Npb248L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbW9kdWxhdG9yICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1vZHVsYXRvcic+djRsMl9tb2R1bGF0b3I8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy12YmktZm10LWl2dHYgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy12YmktZm10LWl2dHYnPnY0bDJfbXBlZ192YmlfZm10X2l2dHY8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItb3V0cHV0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW91dHB1dCc+djRsMl9vdXRwdXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItb3V0cHV0cGFybSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1vdXRwdXRwYXJtJz52NGwyX291dHB1dHBhcm08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcGl4LWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1waXgtZm9ybWF0Jz52NGwyX3BpeF9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcXVlcnljdHJsICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5Y3RybCc+djRsMl9xdWVyeWN0cmw8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcXVlcnltZW51ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5bWVudSc+djRsMl9xdWVyeW1lbnU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcmVjdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1yZWN0Jz52NGwyX3JlY3Q8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcmVxdWVzdGJ1ZmZlcnMgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcmVxdWVzdGJ1ZmZlcnMnPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1jYXAgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1jYXAnPnY0bDJfc2xpY2VkX3ZiaV9jYXA8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1kYXRhICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktZGF0YSc+djRsMl9zbGljZWRfdmJpX2RhdGE8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1mb3JtYXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1mb3JtYXQnPnY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc3RhbmRhcmQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RhbmRhcmQnPnY0bDJfc3RhbmRhcmQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc3RyZWFtcGFybSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdHJlYW1wYXJtJz52NGwyX3N0cmVhbXBhcm08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItdGltZWNvZGUgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdGltZWNvZGUnPnY0bDJfdGltZWNvZGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItdHVuZXIgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdHVuZXInPnY0bDJfdHVuZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItdmJpLWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi12YmktZm9ybWF0Jz52NGwyX3ZiaV9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItd2luZG93ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXdpbmRvdyc+djRsMl93aW5kb3c8L2xpbms+Ij4KKworPCEtLSBFcnJvciBDb2RlcyAtLT4KKzwhRU5USVRZIEVBQ0NFUyAiPGVycm9yY29kZT5FQUNDRVM8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFQUdBSU4gIjxlcnJvcmNvZGU+RUFHQUlOPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRUJBREYgIjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFQlVTWSAiPGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVGQVVMVCAiPGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFSU8gIjxlcnJvcmNvZGU+RUlPPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRUlOVFIgIjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFSU5WQUwgIjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRU5GSUxFICI8ZXJyb3Jjb2RlPkVORklMRTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVOT01FTSAiPGVycm9yY29kZT5FTk9NRU08L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFTk9TUEMgIjxlcnJvcmNvZGU+RU5PU1BDPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRU5PVFRZICI8ZXJyb3Jjb2RlPkVOT1RUWTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVOWElPICI8ZXJyb3Jjb2RlPkVOWElPPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRU1GSUxFICI8ZXJyb3Jjb2RlPkVNRklMRTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVQRVJNICI8ZXJyb3Jjb2RlPkVQRVJNPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRVJBTkdFICI8ZXJyb3Jjb2RlPkVSQU5HRTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKworPCEtLSBTdWJzZWN0aW9ucyAtLT4KKzwhRU5USVRZIHN1Yi1iaWJsaW8gU1lTVEVNICJ2NGwvYmlibGlvLnhtbCI+Cis8IUVOVElUWSBzdWItY29tbW9uIFNZU1RFTSAidjRsL2NvbW1vbi54bWwiPgorPCFFTlRJVFkgc3ViLWNvbXBhdCBTWVNURU0gInY0bC9jb21wYXQueG1sIj4KKzwhRU5USVRZIHN1Yi1jb250cm9scyBTWVNURU0gInY0bC9jb250cm9scy54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1jYXB0dXJlIFNZU1RFTSAidjRsL2Rldi1jYXB0dXJlLnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LWNvZGVjIFNZU1RFTSAidjRsL2Rldi1jb2RlYy54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1lZmZlY3QgU1lTVEVNICJ2NGwvZGV2LWVmZmVjdC54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1vc2QgU1lTVEVNICJ2NGwvZGV2LW9zZC54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1vdXRwdXQgU1lTVEVNICJ2NGwvZGV2LW91dHB1dC54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1vdmVybGF5IFNZU1RFTSAidjRsL2Rldi1vdmVybGF5LnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LXJhZGlvIFNZU1RFTSAidjRsL2Rldi1yYWRpby54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1yYXctdmJpIFNZU1RFTSAidjRsL2Rldi1yYXctdmJpLnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LXJkcyBTWVNURU0gInY0bC9kZXYtcmRzLnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LXNsaWNlZC12YmkgU1lTVEVNICJ2NGwvZGV2LXNsaWNlZC12YmkueG1sIj4KKzwhRU5USVRZIHN1Yi1kZXYtdGVsZXRleHQgU1lTVEVNICJ2NGwvZGV2LXRlbGV0ZXh0LnhtbCI+Cis8IUVOVElUWSBzdWItZHJpdmVyIFNZU1RFTSAidjRsL2RyaXZlci54bWwiPgorPCFFTlRJVFkgc3ViLWxpYnY0bCBTWVNURU0gInY0bC9saWJ2NGwueG1sIj4KKzwhRU5USVRZIHN1Yi1yZW1vdGVfY29udHJvbGxlcnMgU1lTVEVNICJ2NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbCI+Cis8IUVOVElUWSBzdWItZmRsLWFwcGVuZGl4IFNZU1RFTSAidjRsL2ZkbC1hcHBlbmRpeC54bWwiPgorPCFFTlRJVFkgc3ViLWNsb3NlIFNZU1RFTSAidjRsL2Z1bmMtY2xvc2UueG1sIj4KKzwhRU5USVRZIHN1Yi1pb2N0bCBTWVNURU0gInY0bC9mdW5jLWlvY3RsLnhtbCI+Cis8IUVOVElUWSBzdWItbW1hcCBTWVNURU0gInY0bC9mdW5jLW1tYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1tdW5tYXAgU1lTVEVNICJ2NGwvZnVuYy1tdW5tYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1vcGVuIFNZU1RFTSAidjRsL2Z1bmMtb3Blbi54bWwiPgorPCFFTlRJVFkgc3ViLXBvbGwgU1lTVEVNICJ2NGwvZnVuYy1wb2xsLnhtbCI+Cis8IUVOVElUWSBzdWItcmVhZCBTWVNURU0gInY0bC9mdW5jLXJlYWQueG1sIj4KKzwhRU5USVRZIHN1Yi1zZWxlY3QgU1lTVEVNICJ2NGwvZnVuYy1zZWxlY3QueG1sIj4KKzwhRU5USVRZIHN1Yi13cml0ZSBTWVNURU0gInY0bC9mdW5jLXdyaXRlLnhtbCI+Cis8IUVOVElUWSBzdWItaW8gU1lTVEVNICJ2NGwvaW8ueG1sIj4KKzwhRU5USVRZIHN1Yi1ncmV5IFNZU1RFTSAidjRsL3BpeGZtdC1ncmV5LnhtbCI+Cis8IUVOVElUWSBzdWItbnYxMiBTWVNURU0gInY0bC9waXhmbXQtbnYxMi54bWwiPgorPCFFTlRJVFkgc3ViLW52MTYgU1lTVEVNICJ2NGwvcGl4Zm10LW52MTYueG1sIj4KKzwhRU5USVRZIHN1Yi1wYWNrZWQtcmdiIFNZU1RFTSAidjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbCI+Cis8IUVOVElUWSBzdWItcGFja2VkLXl1diBTWVNURU0gInY0bC9waXhmbXQtcGFja2VkLXl1di54bWwiPgorPCFFTlRJVFkgc3ViLXNiZ2dyMTYgU1lTVEVNICJ2NGwvcGl4Zm10LXNiZ2dyMTYueG1sIj4KKzwhRU5USVRZIHN1Yi1zYmdncjggU1lTVEVNICJ2NGwvcGl4Zm10LXNiZ2dyOC54bWwiPgorPCFFTlRJVFkgc3ViLXNnYnJnOCBTWVNURU0gInY0bC9waXhmbXQtc2dicmc4LnhtbCI+Cis8IUVOVElUWSBzdWItc2dyYmc4IFNZU1RFTSAidjRsL3BpeGZtdC1zZ3JiZzgueG1sIj4KKzwhRU5USVRZIHN1Yi11eXZ5IFNZU1RFTSAidjRsL3BpeGZtdC11eXZ5LnhtbCI+Cis8IUVOVElUWSBzdWItdnl1eSBTWVNURU0gInY0bC9waXhmbXQtdnl1eS54bWwiPgorPCFFTlRJVFkgc3ViLXkxNiBTWVNURU0gInY0bC9waXhmbXQteTE2LnhtbCI+Cis8IUVOVElUWSBzdWIteTQxcCBTWVNURU0gInY0bC9waXhmbXQteTQxcC54bWwiPgorPCFFTlRJVFkgc3ViLXl1djQxMCBTWVNURU0gInY0bC9waXhmbXQteXV2NDEwLnhtbCI+Cis8IUVOVElUWSBzdWIteXV2NDExcCBTWVNURU0gInY0bC9waXhmbXQteXV2NDExcC54bWwiPgorPCFFTlRJVFkgc3ViLXl1djQyMCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIwLnhtbCI+Cis8IUVOVElUWSBzdWIteXV2NDIycCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIycC54bWwiPgorPCFFTlRJVFkgc3ViLXl1eXYgU1lTVEVNICJ2NGwvcGl4Zm10LXl1eXYueG1sIj4KKzwhRU5USVRZIHN1Yi15dnl1IFNZU1RFTSAidjRsL3BpeGZtdC15dnl1LnhtbCI+Cis8IUVOVElUWSBzdWItcGl4Zm10IFNZU1RFTSAidjRsL3BpeGZtdC54bWwiPgorPCFFTlRJVFkgc3ViLWNyb3BjYXAgU1lTVEVNICJ2NGwvdmlkaW9jLWNyb3BjYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1kYmctZy1yZWdpc3RlciBTWVNURU0gInY0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sIj4KKzwhRU5USVRZIHN1Yi1lbmNvZGVyLWNtZCBTWVNURU0gInY0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtLWZtdCBTWVNURU0gInY0bC92aWRpb2MtZW51bS1mbXQueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtLWZyYW1laW50ZXJ2YWxzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbCI+Cis8IUVOVElUWSBzdWItZW51bS1mcmFtZXNpemVzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1hdWRpby54bWwiPgorPCFFTlRJVFkgc3ViLWVudW1hdWRpb291dCBTWVNURU0gInY0bC92aWRpb2MtZW51bWF1ZGlvb3V0LnhtbCI+Cis8IUVOVElUWSBzdWItZW51bWlucHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtaW5wdXQueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtb3V0cHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtb3V0cHV0LnhtbCI+Cis8IUVOVElUWSBzdWItZW51bXN0ZCBTWVNURU0gInY0bC92aWRpb2MtZW51bXN0ZC54bWwiPgorPCFFTlRJVFkgc3ViLWctYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW8ueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWF1ZGlvb3V0IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbCI+Cis8IUVOVElUWSBzdWItZGJnLWctY2hpcC1pZGVudCBTWVNURU0gInY0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwiPgorPCFFTlRJVFkgc3ViLWctY3JvcCBTWVNURU0gInY0bC92aWRpb2MtZy1jcm9wLnhtbCI+Cis8IUVOVElUWSBzdWItZy1jdHJsIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWN0cmwueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWVuYy1pbmRleCBTWVNURU0gInY0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWV4dC1jdHJscyBTWVNURU0gInY0bC92aWRpb2MtZy1leHQtY3RybHMueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWZidWYgU1lTVEVNICJ2NGwvdmlkaW9jLWctZmJ1Zi54bWwiPgorPCFFTlRJVFkgc3ViLWctZm10IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZtdC54bWwiPgorPCFFTlRJVFkgc3ViLWctZnJlcXVlbmN5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwiPgorPCFFTlRJVFkgc3ViLWctaW5wdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctaW5wdXQueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWpwZWdjb21wIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWpwZWdjb21wLnhtbCI+Cis8IUVOVElUWSBzdWItZy1tb2R1bGF0b3IgU1lTVEVNICJ2NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbCI+Cis8IUVOVElUWSBzdWItZy1vdXRwdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctb3V0cHV0LnhtbCI+Cis8IUVOVElUWSBzdWItZy1wYXJtIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXBhcm0ueG1sIj4KKzwhRU5USVRZIHN1Yi1nLXByaW9yaXR5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbCI+Cis8IUVOVElUWSBzdWItZy1zbGljZWQtdmJpLWNhcCBTWVNURU0gInY0bC92aWRpb2MtZy1zbGljZWQtdmJpLWNhcC54bWwiPgorPCFFTlRJVFkgc3ViLWctc3RkIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXN0ZC54bWwiPgorPCFFTlRJVFkgc3ViLWctdHVuZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWctdHVuZXIueG1sIj4KKzwhRU5USVRZIHN1Yi1sb2ctc3RhdHVzIFNZU1RFTSAidjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbCI+Cis8IUVOVElUWSBzdWItb3ZlcmxheSBTWVNURU0gInY0bC92aWRpb2Mtb3ZlcmxheS54bWwiPgorPCFFTlRJVFkgc3ViLXFidWYgU1lTVEVNICJ2NGwvdmlkaW9jLXFidWYueG1sIj4KKzwhRU5USVRZIHN1Yi1xdWVyeWJ1ZiBTWVNURU0gInY0bC92aWRpb2MtcXVlcnlidWYueG1sIj4KKzwhRU5USVRZIHN1Yi1xdWVyeWNhcCBTWVNURU0gInY0bC92aWRpb2MtcXVlcnljYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1xdWVyeWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwiPgorPCFFTlRJVFkgc3ViLXF1ZXJ5c3RkIFNZU1RFTSAidjRsL3ZpZGlvYy1xdWVyeXN0ZC54bWwiPgorPCFFTlRJVFkgc3ViLXJlcWJ1ZnMgU1lTVEVNICJ2NGwvdmlkaW9jLXJlcWJ1ZnMueG1sIj4KKzwhRU5USVRZIHN1Yi1zLWh3LWZyZXEtc2VlayBTWVNURU0gInY0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sIj4KKzwhRU5USVRZIHN1Yi1zdHJlYW1vbiBTWVNURU0gInY0bC92aWRpb2Mtc3RyZWFtb24ueG1sIj4KKzwhRU5USVRZIHN1Yi1jYXB0dXJlLWMgU1lTVEVNICJ2NGwvY2FwdHVyZS5jLnhtbCI+Cis8IUVOVElUWSBzdWIta2V5dGFibGUtYyBTWVNURU0gInY0bC9rZXl0YWJsZS5jLnhtbCI+Cis8IUVOVElUWSBzdWItdjRsMmdyYWItYyBTWVNURU0gInY0bC92NGwyZ3JhYi5jLnhtbCI+Cis8IUVOVElUWSBzdWItdmlkZW9kZXYyLWggU1lTVEVNICJ2NGwvdmlkZW9kZXYyLmgueG1sIj4KKzwhRU5USVRZIHN1Yi12NGwyIFNZU1RFTSAidjRsL3Y0bDIueG1sIj4KKzwhRU5USVRZIHN1Yi1pbnRybyBTWVNURU0gImR2Yi9pbnRyby54bWwiPgorPCFFTlRJVFkgc3ViLWZyb250ZW5kIFNZU1RFTSAiZHZiL2Zyb250ZW5kLnhtbCI+Cis8IUVOVElUWSBzdWItaXNkYnQgU1lTVEVNICJkdmIvaXNkYnQueG1sIj4KKzwhRU5USVRZIHN1Yi1kZW11eCBTWVNURU0gImR2Yi9kZW11eC54bWwiPgorPCFFTlRJVFkgc3ViLXZpZGVvIFNZU1RFTSAiZHZiL3ZpZGVvLnhtbCI+Cis8IUVOVElUWSBzdWItYXVkaW8gU1lTVEVNICJkdmIvYXVkaW8ueG1sIj4KKzwhRU5USVRZIHN1Yi1jYSBTWVNURU0gImR2Yi9jYS54bWwiPgorPCFFTlRJVFkgc3ViLW5ldCBTWVNURU0gImR2Yi9uZXQueG1sIj4KKzwhRU5USVRZIHN1Yi1rZGFwaSBTWVNURU0gImR2Yi9rZGFwaS54bWwiPgorPCFFTlRJVFkgc3ViLWV4YW1wbGVzIFNZU1RFTSAiZHZiL2V4YW1wbGVzLnhtbCI+Cis8IUVOVElUWSBzdWItZHZiYXBpIFNZU1RFTSAiZHZiL2R2YmFwaS54bWwiPgorPCFFTlRJVFkgc3ViLW1lZGlhIFNZU1RFTSAibWVkaWEueG1sIj4KKzwhRU5USVRZIHN1Yi1tZWRpYS1lbnRpdGllcyBTWVNURU0gIm1lZGlhLWVudGl0aWVzLnRtcGwiPgorPCFFTlRJVFkgc3ViLW1lZGlhLWluZGljZXMgU1lTVEVNICJtZWRpYS1pbmRpY2VzLnRtcGwiPgorCis8IS0tIEZ1bmN0aW9uIFJlZmVyZW5jZSAtLT4KKzwhRU5USVRZIGNsb3NlIFNZU1RFTSAidjRsL2Z1bmMtY2xvc2UueG1sIj4KKzwhRU5USVRZIGlvY3RsIFNZU1RFTSAidjRsL2Z1bmMtaW9jdGwueG1sIj4KKzwhRU5USVRZIG1tYXAgU1lTVEVNICJ2NGwvZnVuYy1tbWFwLnhtbCI+Cis8IUVOVElUWSBtdW5tYXAgU1lTVEVNICJ2NGwvZnVuYy1tdW5tYXAueG1sIj4KKzwhRU5USVRZIG9wZW4gU1lTVEVNICJ2NGwvZnVuYy1vcGVuLnhtbCI+Cis8IUVOVElUWSBwb2xsIFNZU1RFTSAidjRsL2Z1bmMtcG9sbC54bWwiPgorPCFFTlRJVFkgcmVhZCBTWVNURU0gInY0bC9mdW5jLXJlYWQueG1sIj4KKzwhRU5USVRZIHNlbGVjdCBTWVNURU0gInY0bC9mdW5jLXNlbGVjdC54bWwiPgorPCFFTlRJVFkgd3JpdGUgU1lTVEVNICJ2NGwvZnVuYy13cml0ZS54bWwiPgorPCFFTlRJVFkgZ3JleSBTWVNURU0gInY0bC9waXhmbXQtZ3JleS54bWwiPgorPCFFTlRJVFkgbnYxMiBTWVNURU0gInY0bC9waXhmbXQtbnYxMi54bWwiPgorPCFFTlRJVFkgbnYxNiBTWVNURU0gInY0bC9waXhmbXQtbnYxNi54bWwiPgorPCFFTlRJVFkgcGFja2VkLXJnYiBTWVNURU0gInY0bC9waXhmbXQtcGFja2VkLXJnYi54bWwiPgorPCFFTlRJVFkgcGFja2VkLXl1diBTWVNURU0gInY0bC9waXhmbXQtcGFja2VkLXl1di54bWwiPgorPCFFTlRJVFkgc2JnZ3IxNiBTWVNURU0gInY0bC9waXhmbXQtc2JnZ3IxNi54bWwiPgorPCFFTlRJVFkgc2JnZ3I4IFNZU1RFTSAidjRsL3BpeGZtdC1zYmdncjgueG1sIj4KKzwhRU5USVRZIHNnYnJnOCBTWVNURU0gInY0bC9waXhmbXQtc2dicmc4LnhtbCI+Cis8IUVOVElUWSBzZ3JiZzggU1lTVEVNICJ2NGwvcGl4Zm10LXNncmJnOC54bWwiPgorPCFFTlRJVFkgdXl2eSBTWVNURU0gInY0bC9waXhmbXQtdXl2eS54bWwiPgorPCFFTlRJVFkgdnl1eSBTWVNURU0gInY0bC9waXhmbXQtdnl1eS54bWwiPgorPCFFTlRJVFkgeTE2IFNZU1RFTSAidjRsL3BpeGZtdC15MTYueG1sIj4KKzwhRU5USVRZIHk0MXAgU1lTVEVNICJ2NGwvcGl4Zm10LXk0MXAueG1sIj4KKzwhRU5USVRZIHl1djQxMCBTWVNURU0gInY0bC9waXhmbXQteXV2NDEwLnhtbCI+Cis8IUVOVElUWSB5dXY0MTFwIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MTFwLnhtbCI+Cis8IUVOVElUWSB5dXY0MjAgU1lTVEVNICJ2NGwvcGl4Zm10LXl1djQyMC54bWwiPgorPCFFTlRJVFkgeXV2NDIycCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIycC54bWwiPgorPCFFTlRJVFkgeXV5diBTWVNURU0gInY0bC9waXhmbXQteXV5di54bWwiPgorPCFFTlRJVFkgeXZ5dSBTWVNURU0gInY0bC9waXhmbXQteXZ5dS54bWwiPgorPCFFTlRJVFkgY3JvcGNhcCBTWVNURU0gInY0bC92aWRpb2MtY3JvcGNhcC54bWwiPgorPCFFTlRJVFkgZGJnLWctcmVnaXN0ZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbCI+Cis8IUVOVElUWSBlbmNvZGVyLWNtZCBTWVNURU0gInY0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sIj4KKzwhRU5USVRZIGVudW0tZm10IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZtdC54bWwiPgorPCFFTlRJVFkgZW51bS1mcmFtZWludGVydmFscyBTWVNURU0gInY0bC92aWRpb2MtZW51bS1mcmFtZWludGVydmFscy54bWwiPgorPCFFTlRJVFkgZW51bS1mcmFtZXNpemVzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sIj4KKzwhRU5USVRZIGVudW1hdWRpbyBTWVNURU0gInY0bC92aWRpb2MtZW51bWF1ZGlvLnhtbCI+Cis8IUVOVElUWSBlbnVtYXVkaW9vdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1hdWRpb291dC54bWwiPgorPCFFTlRJVFkgZW51bWlucHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtaW5wdXQueG1sIj4KKzwhRU5USVRZIGVudW1vdXRwdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sIj4KKzwhRU5USVRZIGVudW1zdGQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1zdGQueG1sIj4KKzwhRU5USVRZIGctYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW8ueG1sIj4KKzwhRU5USVRZIGctYXVkaW9vdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sIj4KKzwhRU5USVRZIGRiZy1nLWNoaXAtaWRlbnQgU1lTVEVNICJ2NGwvdmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQueG1sIj4KKzwhRU5USVRZIGctY3JvcCBTWVNURU0gInY0bC92aWRpb2MtZy1jcm9wLnhtbCI+Cis8IUVOVElUWSBnLWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLWctY3RybC54bWwiPgorPCFFTlRJVFkgZy1lbmMtaW5kZXggU1lTVEVNICJ2NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbCI+Cis8IUVOVElUWSBnLWV4dC1jdHJscyBTWVNURU0gInY0bC92aWRpb2MtZy1leHQtY3RybHMueG1sIj4KKzwhRU5USVRZIGctZmJ1ZiBTWVNURU0gInY0bC92aWRpb2MtZy1mYnVmLnhtbCI+Cis8IUVOVElUWSBnLWZtdCBTWVNURU0gInY0bC92aWRpb2MtZy1mbXQueG1sIj4KKzwhRU5USVRZIGctZnJlcXVlbmN5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwiPgorPCFFTlRJVFkgZy1pbnB1dCBTWVNURU0gInY0bC92aWRpb2MtZy1pbnB1dC54bWwiPgorPCFFTlRJVFkgZy1qcGVnY29tcCBTWVNURU0gInY0bC92aWRpb2MtZy1qcGVnY29tcC54bWwiPgorPCFFTlRJVFkgZy1tb2R1bGF0b3IgU1lTVEVNICJ2NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbCI+Cis8IUVOVElUWSBnLW91dHB1dCBTWVNURU0gInY0bC92aWRpb2MtZy1vdXRwdXQueG1sIj4KKzwhRU5USVRZIGctcGFybSBTWVNURU0gInY0bC92aWRpb2MtZy1wYXJtLnhtbCI+Cis8IUVOVElUWSBnLXByaW9yaXR5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbCI+Cis8IUVOVElUWSBnLXNsaWNlZC12YmktY2FwIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbCI+Cis8IUVOVElUWSBnLXN0ZCBTWVNURU0gInY0bC92aWRpb2MtZy1zdGQueG1sIj4KKzwhRU5USVRZIGctdHVuZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWctdHVuZXIueG1sIj4KKzwhRU5USVRZIGxvZy1zdGF0dXMgU1lTVEVNICJ2NGwvdmlkaW9jLWxvZy1zdGF0dXMueG1sIj4KKzwhRU5USVRZIG92ZXJsYXkgU1lTVEVNICJ2NGwvdmlkaW9jLW92ZXJsYXkueG1sIj4KKzwhRU5USVRZIHFidWYgU1lTVEVNICJ2NGwvdmlkaW9jLXFidWYueG1sIj4KKzwhRU5USVRZIHF1ZXJ5YnVmIFNZU1RFTSAidjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwiPgorPCFFTlRJVFkgcXVlcnljYXAgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y2FwLnhtbCI+Cis8IUVOVElUWSBxdWVyeWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwiPgorPCFFTlRJVFkgcXVlcnlzdGQgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbCI+Cis8IUVOVElUWSByZXFidWZzIFNZU1RFTSAidjRsL3ZpZGlvYy1yZXFidWZzLnhtbCI+Cis8IUVOVElUWSBzLWh3LWZyZXEtc2VlayBTWVNURU0gInY0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sIj4KKzwhRU5USVRZIHN0cmVhbW9uIFNZU1RFTSAidjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWluZGljZXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzMGEyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwKQEAgLTAsMCArMSw4NSBAQAorPCEtLSBHZW5lcmF0ZWQgZmlsZSEgRG8gbm90IGVkaXQuIC0tPgorCis8aW5kZXg+PHRpdGxlPkxpc3Qgb2YgVHlwZXM8L3RpdGxlPgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT48bGluayBsaW5rZW5kPSd2NGwyLXN0ZC1pZCc+djRsMl9zdGRfaWQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1idWYtdHlwZSc+djRsMl9idWZfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNvbG9yc3BhY2UnPnY0bDJfY29sb3JzcGFjZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWN0cmwtdHlwZSc+djRsMl9jdHJsX3R5cGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1leHBvc3VyZS1hdXRvLXR5cGUnPnY0bDJfZXhwb3N1cmVfYXV0b190eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZmllbGQnPnY0bDJfZmllbGQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1pdmFsdHlwZXMnPnY0bDJfZnJtaXZhbHR5cGVzPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZXR5cGVzJz52NGwyX2ZybXNpemV0eXBlczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1lbW9yeSc+djRsMl9tZW1vcnk8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWFjMy1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWNyYyc+djRsMl9tcGVnX2F1ZGlvX2NyYzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tZW1waGFzaXMnPnY0bDJfbXBlZ19hdWRpb19lbXBoYXNpczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmcnPnY0bDJfbXBlZ19hdWRpb19lbmNvZGluZzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSc+djRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWwyLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1sMy1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fbDNfYml0cmF0ZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbW9kZSc+djRsMl9tcGVnX2F1ZGlvX21vZGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLW1vZGUtZXh0ZW5zaW9uJz52NGwyX21wZWdfYXVkaW9fbW9kZV9leHRlbnNpb248L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLXNhbXBsaW5nLWZyZXEnPnY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J2Nocm9tYS1zcGF0aWFsLWZpbHRlci10eXBlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSdsdW1hLXNwYXRpYWwtZmlsdGVyLXR5cGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctY3gyMzQxeC12aWRlby1zcGF0aWFsLWZpbHRlci1tb2RlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXRlbXBvcmFsLWZpbHRlci1tb2RlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctc3RyZWFtLXR5cGUnPnY0bDJfbXBlZ19zdHJlYW1fdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQnPnY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmlkZW8tYXNwZWN0Jz52NGwyX21wZWdfdmlkZW9fYXNwZWN0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy12aWRlby1iaXRyYXRlLW1vZGUnPnY0bDJfbXBlZ192aWRlb19iaXRyYXRlX21vZGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nJz52NGwyX21wZWdfdmlkZW9fZW5jb2Rpbmc8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1wb3dlci1saW5lLWZyZXF1ZW5jeSc+djRsMl9wb3dlcl9saW5lX2ZyZXF1ZW5jeTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXByaW9yaXR5Jz52NGwyX3ByaW9yaXR5PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdHVuZXItdHlwZSc+djRsMl90dW5lcl90eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcHJlZW1waGFzaXMnPnY0bDJfcHJlZW1waGFzaXM8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWF1ZGlvJz52NGwyX2F1ZGlvPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1hdWRpb291dCc+djRsMl9hdWRpb291dDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYnVmZmVyJz52NGwyX2J1ZmZlcjwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwYWJpbGl0eSc+djRsMl9jYXBhYmlsaXR5PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jYXB0dXJlcGFybSc+djRsMl9jYXB0dXJlcGFybTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2xpcCc+djRsMl9jbGlwPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jb250cm9sJz52NGwyX2NvbnRyb2w8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNyb3AnPnY0bDJfY3JvcDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY3JvcGNhcCc+djRsMl9jcm9wY2FwPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kYmctY2hpcC1pZGVudCc+djRsMl9kYmdfY2hpcF9pZGVudDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLW1hdGNoJz52NGwyX2RiZ19tYXRjaDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLXJlZ2lzdGVyJz52NGwyX2RiZ19yZWdpc3RlcjwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jLWlkeCc+djRsMl9lbmNfaWR4PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4LWVudHJ5Jz52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWVuY29kZXItY21kJz52NGwyX2VuY29kZXJfY21kPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1leHQtY29udHJvbCc+djRsMl9leHRfY29udHJvbDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXh0LWNvbnRyb2xzJz52NGwyX2V4dF9jb250cm9sczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZm10ZGVzYyc+djRsMl9mbXRkZXNjPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mb3JtYXQnPnY0bDJfZm9ybWF0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcmFjdCc+djRsMl9mcmFjdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhbWVidWZmZXInPnY0bDJfZnJhbWVidWZmZXI8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZyZXF1ZW5jeSc+djRsMl9mcmVxdWVuY3k8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybWl2YWwtc3RlcHdpc2UnPnY0bDJfZnJtaXZhbF9zdGVwd2lzZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtaXZhbGVudW0nPnY0bDJfZnJtaXZhbGVudW08L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybXNpemUtZGlzY3JldGUnPnY0bDJfZnJtc2l6ZV9kaXNjcmV0ZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZS1zdGVwd2lzZSc+djRsMl9mcm1zaXplX3N0ZXB3aXNlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplZW51bSc+djRsMl9mcm1zaXplZW51bTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItaHctZnJlcS1zZWVrJz52NGwyX2h3X2ZyZXFfc2VlazwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItaW5wdXQnPnY0bDJfaW5wdXQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWpwZWdjb21wcmVzc2lvbic+djRsMl9qcGVnY29tcHJlc3Npb248L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1vZHVsYXRvcic+djRsMl9tb2R1bGF0b3I8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmJpLWZtdC1pdnR2Jz52NGwyX21wZWdfdmJpX2ZtdF9pdnR2PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1vdXRwdXQnPnY0bDJfb3V0cHV0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1vdXRwdXRwYXJtJz52NGwyX291dHB1dHBhcm08L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXBpeC1mb3JtYXQnPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcXVlcnljdHJsJz52NGwyX3F1ZXJ5Y3RybDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcXVlcnltZW51Jz52NGwyX3F1ZXJ5bWVudTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcmVjdCc+djRsMl9yZWN0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1yZXF1ZXN0YnVmZmVycyc+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1jYXAnPnY0bDJfc2xpY2VkX3ZiaV9jYXA8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktZGF0YSc+djRsMl9zbGljZWRfdmJpX2RhdGE8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktZm9ybWF0Jz52NGwyX3NsaWNlZF92YmlfZm9ybWF0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdGFuZGFyZCc+djRsMl9zdGFuZGFyZDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RyZWFtcGFybSc+djRsMl9zdHJlYW1wYXJtPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi10aW1lY29kZSc+djRsMl90aW1lY29kZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdHVuZXInPnY0bDJfdHVuZXI8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXZiaS1mb3JtYXQnPnY0bDJfdmJpX2Zvcm1hdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItd2luZG93Jz52NGwyX3dpbmRvdzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8L2luZGV4PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWE1NjRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLnRtcGwKQEAgLTAsMCArMSwxMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbCis8IUVOVElUWSAlIG1lZGlhLWVudGl0aWVzIFNZU1RFTSAiLi9tZWRpYS1lbnRpdGllcy50bXBsIj4gJW1lZGlhLWVudGl0aWVzOworPCFFTlRJVFkgbWVkaWEtaW5kaWNlcyBTWVNURU0gIi4vbWVkaWEtaW5kaWNlcy50bXBsIj4KKworPCFFTlRJVFkgZWcgICAgICAgICAgICAgICAgICAgICAiZS4mbmJzcDtnLiI+Cis8IUVOVElUWSBpZSAgICAgICAgICAgICAgICAgICAgICJpLiZuYnNwO2UuIj4KKzwhRU5USVRZIGZkICAgICAgICAgICAgICAgICAgICAgIkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSA8bGluayBsaW5rZW5kPSdmdW5jLW9wZW4nPjxmdW5jdGlvbj5vcGVuKCk8L2Z1bmN0aW9uPjwvbGluaz4uIj4KKzwhRU5USVRZIGkyYyAgICAgICAgICAgICAgICAgICAgIkk8c3VwZXJzY3JpcHQ+Mjwvc3VwZXJzY3JpcHQ+QyI+Cis8IUVOVElUWSByZXR1cm4tdmFsdWUJCSI8dGl0bGU+UmV0dXJuIFZhbHVlPC90aXRsZT48cGFyYT5PbiBzdWNjZXNzIDxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4gaXMgcmV0dXJuZWQsIG9uIGVycm9yIDxyZXR1cm52YWx1ZT4tMTwvcmV0dXJudmFsdWU+IGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5OjwvcGFyYT4iPgorPCFFTlRJVFkgbWFudm9sICAgICAgICAgICAgICAgICAiPG1hbnZvbG51bT4yPC9tYW52b2xudW0+Ij4KKworPCEtLSBUYWJsZSB0ZW1wbGF0ZXM6IHN0cnVjdHMsIHN0cnVjdHMgdy91bmlvbiwgZGVmaW5lcy4gLS0+Cis8IUVOVElUWSBjcy1zdHIgICAgICAgICAgICAgICAgICI8Y29sc3BlYyBjb2xuYW1lPSdjMScgY29sd2lkdGg9JzEqJyAvPjxjb2xzcGVjIGNvbG5hbWU9J2MyJyBjb2x3aWR0aD0nMSonIC8+PGNvbHNwZWMgY29sbmFtZT0nYzMnIGNvbHdpZHRoPScyKicgLz48c3BhbnNwZWMgc3Bhbm5hbWU9J2hzcGFuJyBuYW1lc3Q9J2MxJyBuYW1lZW5kPSdjMycgLz4iPgorPCFFTlRJVFkgY3MtdXN0ciAgICAgICAgICAgICAgICAiPGNvbHNwZWMgY29sbmFtZT0nYzEnIGNvbHdpZHRoPScxKicgLz48Y29sc3BlYyBjb2xuYW1lPSdjMicgY29sd2lkdGg9JzEqJyAvPjxjb2xzcGVjIGNvbG5hbWU9J2MzJyBjb2x3aWR0aD0nMSonIC8+PGNvbHNwZWMgY29sbmFtZT0nYzQnIGNvbHdpZHRoPScyKicgLz48c3BhbnNwZWMgc3Bhbm5hbWU9J2hzcGFuJyBuYW1lc3Q9J2MxJyBuYW1lZW5kPSdjNCcgLz4iPgorPCFFTlRJVFkgY3MtZGVmICAgICAgICAgICAgICAgICAiPGNvbHNwZWMgY29sbmFtZT0nYzEnIGNvbHdpZHRoPSczKicgLz48Y29sc3BlYyBjb2xuYW1lPSdjMicgY29sd2lkdGg9JzEqJyAvPjxjb2xzcGVjIGNvbG5hbWU9J2MzJyBjb2x3aWR0aD0nNConIC8+PHNwYW5zcGVjIHNwYW5uYW1lPSdoc3BhbicgbmFtZXN0PSdjMScgbmFtZWVuZD0nYzMnIC8+Ij4KKworPCEtLSBWaWRlbyBmb3IgTGludXggbWFpbGluZyBsaXN0IGFkZHJlc3MuIC0tPgorPCFFTlRJVFkgdjRsLW1sICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cDovL3d3dy5saW51eHR2Lm9yZy9saXN0cy5waHAnPmh0dHA6Ly93d3cubGludXh0di5vcmcvbGlzdHMucGhwPC91bGluaz4iPgorCis8IS0tIExpbnV4VFYgdjRsLWR2YiByZXBvc2l0b3J5LiAtLT4KKzwhRU5USVRZIHY0bC1kdmIJCSI8dWxpbmsgdXJsPSdodHRwOi8vbGludXh0di5vcmcvcmVwby8nPmh0dHA6Ly9saW51eHR2Lm9yZy9yZXBvLzwvdWxpbms+Ij4KK10+CisKKzxib29rIGlkPSJtZWRpYV9hcGkiPgorPGJvb2tpbmZvPgorPHRpdGxlPkxJTlVYIE1FRElBIElORlJBU1RSVUNUVVJFIEFQSTwvdGl0bGU+CisKKzxjb3B5cmlnaHQ+CisJPHllYXI+MjAwOTwveWVhcj4KKwk8aG9sZGVyPkxpbnV4VFYgRGV2ZWxvcGVyczwvaG9sZGVyPgorPC9jb3B5cmlnaHQ+CisKKzxsZWdhbG5vdGljZT4KKworPHBhcmE+UGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeQordGhpcyBkb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwKK1ZlcnNpb24gMS4xIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBjaGFwdGVyIGVudGl0bGVkCisiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIjwvcGFyYT4KKzwvbGVnYWxub3RpY2U+CisKKzwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+IDwhLS0gYXV0b2dlbmVyYXRlZCAtLT4KKworPHByZWZhY2U+CisJPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5UaGlzIGRvY3VtZW50IGNvdmVycyB0aGUgTGludXggS2VybmVsIHRvIFVzZXJzcGFjZSBBUEkncyB1c2VkIGJ5CisJCXZpZGVvIGFuZCByYWRpbyBzdHJhbWluZyBkZXZpY2VzLCBpbmNsdWRpbmcgdmlkZW8gY2FtZXJhcywKKwkJYW5hbG9nIGFuZCBkaWdpdGFsIFRWIHJlY2VpdmVyIGNhcmRzLCBBTS9GTSByZWNlaXZlciBjYXJkcywKKwkJc3RyZWFtaW5nIGNhcHR1cmUgZGV2aWNlcy48L3BhcmE+CisJPHBhcmE+SXQgaXMgZGl2aWRlZCBpbnRvIHRocmVlIHBhcnRzLjwvcGFyYT4KKwk8cGFyYT5UaGUgZmlyc3QgcGFydCBjb3ZlcnMgcmFkaW8sIGNhcHR1cmUsCisJCWNhbWVyYXMgYW5kIGFuYWxvZyBUViBkZXZpY2VzLjwvcGFyYT4KKwk8cGFyYT5UaGUgc2Vjb25kIHBhcnQgY292ZXJzIHRoZQorCQlBUEkgdXNlZCBmb3IgZGlnaXRhbCBUViBhbmQgSW50ZXJuZXQgcmVjZXB0aW9uIHZpYSBvbmUgb2YgdGhlCisJCXNldmVyYWwgZGlnaXRhbCB0diBzdGFuZGFyZHMuIFdoaWxlIGl0IGlzIGNhbGxlZCBhcyBEVkIgQVBJLAorCQlpbiBmYWN0IGl0IGNvdmVycyBzZXZlcmFsIGRpZmZlcmVudCB2aWRlbyBzdGFuZGFyZHMgaW5jbHVkaW5nCisJCURWQi1ULCBEVkItUywgRFZCLUMgYW5kIEFUU0MuIFRoZSBBUEkgaXMgY3VycmVudGx5IGJlaW5nIHVwZGF0ZWQKKwkJdG8gZG9jdW1tZW50IHN1cHBvcnQgYWxzbyBmb3IgRFZCLVMyLCBJU0RCLVQgYW5kIElTREItUy48L3BhcmE+CisJPHBhcmE+VGhlIHRoaXJkIHBhcnQgY292ZXJzIG90aGVyIEFQSSdzIHVzZWQgYnkgYWxsIG1lZGlhIGluZnJhc3RydWN0dXJlIGRldmljZXM8L3BhcmE+CisJPHBhcmE+Rm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIGZvciB0aGUgbGF0ZXN0IGRldmVsb3BtZW50IGNvZGUsCisJCXNlZTogPHVsaW5rIHVybD0iaHR0cDovL2xpbnV4dHYub3JnIj5odHRwOi8vbGludXh0di5vcmc8L3VsaW5rPi48L3BhcmE+CisJPHBhcmE+Rm9yIGRpc2N1c3NpbmcgaW1wcm92ZW1lbnRzLCByZXBvcnRpbmcgdHJvdWJsZXMsIHNlbmRpbmcgbmV3IGRyaXZlcnMsIGV0YywgcGxlYXNlIG1haWwgdG86IDx1bGluayB1cmw9Imh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sI2xpbnV4LW1lZGlhIj5MaW51eCBNZWRpYSBNYWlsaW5nIExpc3QgKExNTUwpLjwvdWxpbms+LjwvcGFyYT4KKworPC9wcmVmYWNlPgorCis8cGFydCBpZD0idjRsMnNwZWMiPgorJnN1Yi12NGwyOworPC9wYXJ0PgorPHBhcnQgaWQ9ImR2YmFwaSI+Cismc3ViLWR2YmFwaTsKKzwvcGFydD4KKzxwYXJ0IGlkPSJ2NGxkdmJfY29tbW9uIj4KKzxwYXJ0aW5mbz4KKzxhdXRob3Jncm91cD4KKzxhdXRob3I+Cis8Zmlyc3RuYW1lPk1hdXJvPC9maXJzdG5hbWU+Cis8c3VybmFtZT5DaGVoYWI8L3N1cm5hbWU+Cis8b3RoZXJuYW1lIHJvbGU9Im1pIj5DYXJ2YWxobzwvb3RoZXJuYW1lPgorPGFmZmlsaWF0aW9uPjxhZGRyZXNzPjxlbWFpbD5tY2hlaGFiQHJlZGhhdC5jb208L2VtYWlsPjwvYWRkcmVzcz48L2FmZmlsaWF0aW9uPgorPGNvbnRyaWI+SW5pdGlhbCB2ZXJzaW9uLjwvY29udHJpYj4KKzwvYXV0aG9yPgorPC9hdXRob3Jncm91cD4KKzxjb3B5cmlnaHQ+CisJPHllYXI+MjAwOTwveWVhcj4KKwk8aG9sZGVyPk1hdXJvIENhcnZhbGhvIENoZWhhYjwvaG9sZGVyPgorPC9jb3B5cmlnaHQ+CisKKzxyZXZoaXN0b3J5PgorPCEtLSBQdXQgZG9jdW1lbnQgcmV2aXNpb25zIGhlcmUsIG5ld2VzdCBmaXJzdC4gLS0+Cis8cmV2aXNpb24+Cis8cmV2bnVtYmVyPjEuMC4wPC9yZXZudW1iZXI+Cis8ZGF0ZT4yMDA5LTA5LTA2PC9kYXRlPgorPGF1dGhvcmluaXRpYWxzPm1jYzwvYXV0aG9yaW5pdGlhbHM+Cis8cmV2cmVtYXJrPkluaXRpYWwgcmV2aXNpb248L3JldnJlbWFyaz4KKzwvcmV2aXNpb24+Cis8L3Jldmhpc3Rvcnk+Cis8L3BhcnRpbmZvPgorCis8dGl0bGU+T3RoZXIgQVBJJ3MgdXNlZCBieSBtZWRpYSBpbmZyYXN0cnVjdHVyZSBkcml2ZXJzPC90aXRsZT4KKzxjaGFwdGVyIGlkPSJyZW1vdGVfY29udHJvbGxlcnMiPgorJnN1Yi1yZW1vdGVfY29udHJvbGxlcnM7Cis8L2NoYXB0ZXI+Cis8L3BhcnQ+CisKKyZzdWItZmRsLWFwcGVuZGl4OworCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbAppbmRleCA4ZTE0NTg1Li5kZjBkMDg5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKQEAgLTU2OCw3ICs1NjgsNyBAQAogCQkJPHBhcmE+CiAJCQkJVGhlIGJsb2NrcyBpbiB3aGljaCB0aGUgdGFibGVzIGFyZSBzdG9yZWQgYXJlIHByb2N0ZXRlZCBhZ2FpbnN0CiAJCQkJYWNjaWRlbnRhbCBhY2Nlc3MgYnkgbWFya2luZyB0aGVtIGJhZCBpbiB0aGUgbWVtb3J5IGJhZCBibG9jawotCQkJCXRhYmxlLiBUaGUgYmFkIGJsb2NrIHRhYmxlIG1hbmFnbWVudCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQKKwkJCQl0YWJsZS4gVGhlIGJhZCBibG9jayB0YWJsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhcmUgYWxsb3dlZAogCQkJCXRvIGNpcmN1bXZlcm50IHRoaXMgcHJvdGVjdGlvbi4KIAkJCTwvcGFyYT4KIAkJCTxwYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2kudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zY3NpLnRtcGwKaW5kZXggMTBhMTUwYS4uZDg3ZjQ1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2kudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc2NzaS50bXBsCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgVGhlIFNBUyB0cmFuc3BvcnQgY2xhc3MgY29udGFpbnMgY29tbW9uIGNvZGUgdG8gZGVhbCB3aXRoIFNBUyBIQkFzLAogICAgICAgICAgIGFuIGFwcm94aW1hdGVkIHJlcHJlc2VudGF0aW9uIG9mIFNBUyB0b3BvbG9naWVzIGluIHRoZSBkcml2ZXIgbW9kZWwsCi0gICAgICAgICAgYW5kIHZhcmlvdXMgc3lzZnMgYXR0cmlidXRlcyB0byBleHBvc2UgdGhlc2UgdG9wb2xvZ2llcyBhbmQgbWFuYWdtZW50CisgICAgICAgICAgYW5kIHZhcmlvdXMgc3lzZnMgYXR0cmlidXRlcyB0byBleHBvc2UgdGhlc2UgdG9wb2xvZ2llcyBhbmQgbWFuYWdlbWVudAogICAgICAgICAgIGludGVyZmFjZXMgdG8gdXNlcnNwYWNlLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3N0eWxlc2hlZXQueHNsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3N0eWxlc2hlZXQueHNsCmluZGV4IDk3NGUxN2MuLjI1NGMxZDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc3R5bGVzaGVldC54c2wKQEAgLTMsNiArMyw3IEBACiA8cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSI+MTwvcGFyYW0+CiA8cGFyYW0gbmFtZT0iZnVuY3N5bm9wc2lzLnN0eWxlIj5hbnNpPC9wYXJhbT4KIDxwYXJhbSBuYW1lPSJmdW5jc3lub3BzaXMudGFidWxhci50aHJlc2hvbGQiPjgwPC9wYXJhbT4KKzxwYXJhbSBuYW1lPSJjYWxsb3V0LmdyYXBoaWNzIj4wPC9wYXJhbT4KIDwhLS0gPHBhcmFtIG5hbWU9InBhcGVyLnR5cGUiPkE0PC9wYXJhbT4gLS0+CiA8cGFyYW0gbmFtZT0iZ2VuZXJhdGUuc2VjdGlvbi50b2MubGV2ZWwiPjI8L3BhcmFtPgogPC9zdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWMzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorISoueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2JpYmxpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2JpYmxpby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjOGEwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvYmlibGlvLnhtbApAQCAtMCwwICsxLDE4OCBAQAorICA8YmlibGlvZ3JhcGh5PgorICAgIDx0aXRsZT5SZWZlcmVuY2VzPC90aXRsZT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0iZWlhNjA4Ij4KKyAgICAgIDxhYmJyZXY+RUlBJm5ic3A7NjA4LUI8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5FbGVjdHJvbmljIEluZHVzdHJpZXMgQWxsaWFuY2UgKDx1bGluawordXJsPSJodHRwOi8vd3d3LmVpYS5vcmciPmh0dHA6Ly93d3cuZWlhLm9yZzwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+RUlBIDYwOC1CICJSZWNvbW1lbmRlZCBQcmFjdGljZSBmb3IgTGluZSAyMSBEYXRhCitTZXJ2aWNlIjwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0iZW4zMDAyOTQiPgorICAgICAgPGFiYnJldj5FTiZuYnNwOzMwMCZuYnNwOzI5NDwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkV1cm9wZWFuIFRlbGVjb21tdW5pY2F0aW9uIFN0YW5kYXJkcyBJbnN0aXR1dGUKKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIj5odHRwOi8vd3d3LmV0c2kub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5FTiAzMDAgMjk0ICI2MjUtbGluZSB0ZWxldmlzaW9uIFdpZGUgU2NyZWVuIFNpZ25hbGxpbmcKKyhXU1MpIjwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0iZXRzMzAwMjMxIj4KKyAgICAgIDxhYmJyZXY+RVRTJm5ic3A7MzAwJm5ic3A7MjMxPC9hYmJyZXY+CisgICAgICA8YXV0aG9yZ3JvdXA+CisJPGNvcnBhdXRob3I+RXVyb3BlYW4gVGVsZWNvbW11bmljYXRpb24gU3RhbmRhcmRzIEluc3RpdHV0ZQorKDx1bGluawordXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIj5odHRwOi8vd3d3LmV0c2kub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5FVFMgMzAwIDIzMSAiU3BlY2lmaWNhdGlvbiBvZiB0aGUgZG9tZXN0aWMgdmlkZW8KK1Byb2dyYW1tZSBEZWxpdmVyeSBDb250cm9sIHN5c3RlbSAoUERDKSI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9ImV0czMwMDcwNiI+CisgICAgICA8YWJicmV2PkVUUyZuYnNwOzMwMCZuYnNwOzcwNjwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkV1cm9wZWFuIFRlbGVjb21tdW5pY2F0aW9uIFN0YW5kYXJkcyBJbnN0aXR1dGUKKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIj5odHRwOi8vd3d3LmV0c2kub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5FVFMgMzAwIDcwNiAiRW5oYW5jZWQgVGVsZXRleHQgc3BlY2lmaWNhdGlvbiI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Im1wZWcycGFydDEiPgorICAgICAgPGFiYnJldj5JU08mbmJzcDsxMzgxOC0xPC9hYmJyZXY+CisgICAgICA8YXV0aG9yZ3JvdXA+CisJPGNvcnBhdXRob3I+SW50ZXJuYXRpb25hbCBUZWxlY29tbXVuaWNhdGlvbiBVbmlvbiAoPHVsaW5rCit1cmw9Imh0dHA6Ly93d3cuaXR1LmNoIj5odHRwOi8vd3d3Lml0dS5jaDwvdWxpbms+KSwgSW50ZXJuYXRpb25hbAorT3JnYW5pc2F0aW9uIGZvciBTdGFuZGFyZGlzYXRpb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lmlzby5jaCI+aHR0cDovL3d3dy5pc28uY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1UIFJlYy4gSC4yMjIuMCB8IElTTy9JRUMgMTM4MTgtMSAiSW5mb3JtYXRpb24KK3RlY2hub2xvZ3kgJm1kYXNoOyBHZW5lcmljIGNvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQKK2F1ZGlvIGluZm9ybWF0aW9uOiBTeXN0ZW1zIjwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0ibXBlZzJwYXJ0MiI+CisgICAgICA8YWJicmV2PklTTyZuYnNwOzEzODE4LTI8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5JbnRlcm5hdGlvbmFsIFRlbGVjb21tdW5pY2F0aW9uIFVuaW9uICg8dWxpbmsKK3VybD0iaHR0cDovL3d3dy5pdHUuY2giPmh0dHA6Ly93d3cuaXR1LmNoPC91bGluaz4pLCBJbnRlcm5hdGlvbmFsCitPcmdhbmlzYXRpb24gZm9yIFN0YW5kYXJkaXNhdGlvbiAoPHVsaW5rCit1cmw9Imh0dHA6Ly93d3cuaXNvLmNoIj5odHRwOi8vd3d3Lmlzby5jaDwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+SVRVLVQgUmVjLiBILjI2MiB8IElTTy9JRUMgMTM4MTgtMiAiSW5mb3JtYXRpb24KK3RlY2hub2xvZ3kgJm1kYXNoOyBHZW5lcmljIGNvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQKK2F1ZGlvIGluZm9ybWF0aW9uOiBWaWRlbyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Iml0dTQ3MCI+CisgICAgICA8YWJicmV2PklUVSZuYnNwO0JULjQ3MDwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjQ3MC02ICJDb252ZW50aW9uYWwgVGVsZXZpc2lvbgorU3lzdGVtcyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Iml0dTYwMSI+CisgICAgICA8YWJicmV2PklUVSZuYnNwO0JULjYwMTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjYwMS01ICJTdHVkaW8gRW5jb2RpbmcgUGFyYW1ldGVycworb2YgRGlnaXRhbCBUZWxldmlzaW9uIGZvciBTdGFuZGFyZCA0OjMgYW5kIFdpZGUtU2NyZWVuIDE2OjkgQXNwZWN0CitSYXRpb3MiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJpdHU2NTMiPgorICAgICAgPGFiYnJldj5JVFUmbmJzcDtCVC42NTM8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5JbnRlcm5hdGlvbmFsIFRlbGVjb21tdW5pY2F0aW9uIFVuaW9uICg8dWxpbmsKK3VybD0iaHR0cDovL3d3dy5pdHUuY2giPmh0dHA6Ly93d3cuaXR1LmNoPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5JVFUtUiBSZWNvbW1lbmRhdGlvbiBCVC42NTMtMyAiVGVsZXRleHQgc3lzdGVtcyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Iml0dTcwOSI+CisgICAgICA8YWJicmV2PklUVSZuYnNwO0JULjcwOTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjcwOS01ICJQYXJhbWV0ZXIgdmFsdWVzIGZvciB0aGUKK0hEVFYgc3RhbmRhcmRzIGZvciBwcm9kdWN0aW9uIGFuZCBpbnRlcm5hdGlvbmFsIHByb2dyYW1tZQorZXhjaGFuZ2UiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJpdHUxMTE5Ij4KKyAgICAgIDxhYmJyZXY+SVRVJm5ic3A7QlQuMTExOTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjExMTkgIjYyNS1saW5lCit0ZWxldmlzaW9uIFdpZGUgU2NyZWVuIFNpZ25hbGxpbmcgKFdTUykiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJqZmlmIj4KKyAgICAgIDxhYmJyZXY+SkZJRjwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkluZGVwZW5kZW50IEpQRUcgR3JvdXAgKDx1bGluawordXJsPSJodHRwOi8vd3d3LmlqZy5vcmciPmh0dHA6Ly93d3cuaWpnLm9yZzwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+SlBFRyBGaWxlIEludGVyY2hhbmdlIEZvcm1hdDwvdGl0bGU+CisgICAgICA8c3VidGl0bGU+VmVyc2lvbiAxLjAyPC9zdWJ0aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJzbXB0ZTEybSI+CisgICAgICA8YWJicmV2PlNNUFRFJm5ic3A7MTJNPC9hYmJyZXY+CisgICAgICA8YXV0aG9yZ3JvdXA+CisJPGNvcnBhdXRob3I+U29jaWV0eSBvZiBNb3Rpb24gUGljdHVyZSBhbmQgVGVsZXZpc2lvbiBFbmdpbmVlcnMKKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnNtcHRlLm9yZyI+aHR0cDovL3d3dy5zbXB0ZS5vcmc8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPlNNUFRFIDEyTS0xOTk5ICJUZWxldmlzaW9uLCBBdWRpbyBhbmQgRmlsbSAtIFRpbWUgYW5kCitDb250cm9sIENvZGUiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJzbXB0ZTE3MG0iPgorICAgICAgPGFiYnJldj5TTVBURSZuYnNwOzE3ME08L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5Tb2NpZXR5IG9mIE1vdGlvbiBQaWN0dXJlIGFuZCBUZWxldmlzaW9uIEVuZ2luZWVycworKDx1bGluayB1cmw9Imh0dHA6Ly93d3cuc21wdGUub3JnIj5odHRwOi8vd3d3LnNtcHRlLm9yZzwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+U01QVEUgMTcwTS0xOTk5ICJUZWxldmlzaW9uIC0gQ29tcG9zaXRlIEFuYWxvZyBWaWRlbworU2lnbmFsIC0gTlRTQyBmb3IgU3R1ZGlvIEFwcGxpY2F0aW9ucyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9InNtcHRlMjQwbSI+CisgICAgICA8YWJicmV2PlNNUFRFJm5ic3A7MjQwTTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPlNvY2lldHkgb2YgTW90aW9uIFBpY3R1cmUgYW5kIFRlbGV2aXNpb24gRW5naW5lZXJzCisoPHVsaW5rIHVybD0iaHR0cDovL3d3dy5zbXB0ZS5vcmciPmh0dHA6Ly93d3cuc21wdGUub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5TTVBURSAyNDBNLTE5OTkgIlRlbGV2aXNpb24gLSBTaWduYWwgUGFyYW1ldGVycyAtCisxMTI1LUxpbmUgSGlnaC1EZWZpbml0aW9uIFByb2R1Y3Rpb24iPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJlbjUwMDY3Ij4KKyAgICAgIDxhYmJyZXY+RU4mbmJzcDs1MDA2NzwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkV1cm9wZWFuIENvbW1pdHRlZSBmb3IgRWxlY3Ryb3RlY2huaWNhbCBTdGFuZGFyZGl6YXRpb24KKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmNlbmVsZWMuZXUiPmh0dHA6Ly93d3cuY2VuZWxlYy5ldTwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+U3BlY2lmaWNhdGlvbiBvZiB0aGUgcmFkaW8gZGF0YSBzeXN0ZW0gKFJEUykgZm9yIFZIRi9GTSBzb3VuZCBicm9hZGNhc3RpbmcKK2luIHRoZSBmcmVxdWVuY3kgcmFuZ2UgZnJvbSA4Nyw1IHRvIDEwOCwwIE1IejwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0ibnJzYzQiPgorICAgICAgPGFiYnJldj5OUlNDLTQ8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5OYXRpb25hbCBSYWRpbyBTeXN0ZW1zIENvbW1pdHRlZQorKDx1bGluayB1cmw9Imh0dHA6Ly93d3cubnJzY3N0YW5kYXJkcy5vcmciPmh0dHA6Ly93d3cubnJzY3N0YW5kYXJkcy5vcmc8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPk5UU0MtNDogVW5pdGVkIFN0YXRlcyBSQkRTIFN0YW5kYXJkPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgIDwvYmlibGlvZ3JhcGh5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jYXB0dXJlLmMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jYXB0dXJlLmMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWM0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NhcHR1cmUuYy54bWwKQEAgLTAsMCArMSw2NTkgQEAKKzxwcm9ncmFtbGlzdGluZz4KKy8qCisgKiAgVjRMMiB2aWRlbyBjYXB0dXJlIGV4YW1wbGUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGNhbiBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9ucy4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBwcm92aWRlZCB3aXRoIHRoZSBWNEwyIEFQSQorICogc2VlIGh0dHA6Ly9saW51eHR2Lm9yZy9kb2NzLnBocCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCisKKyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OworCisjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7ICAgICAgICAgICAgIC8qIGdldG9wdF9sb25nKCkgKi8KKworI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7ICAgICAgICAgICAgICAvKiBsb3ctbGV2ZWwgaS9vICovCisjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy90aW1lLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKKworI2luY2x1ZGUgJmx0O2xpbnV4L3ZpZGVvZGV2Mi5oJmd0OworCisjZGVmaW5lIENMRUFSKHgpIG1lbXNldCgmYW1wOyh4KSwgMCwgc2l6ZW9mKHgpKQorCitlbnVtIGlvX21ldGhvZCB7CisgICAgICAgIElPX01FVEhPRF9SRUFELAorICAgICAgICBJT19NRVRIT0RfTU1BUCwKKyAgICAgICAgSU9fTUVUSE9EX1VTRVJQVFIsCit9OworCitzdHJ1Y3QgYnVmZmVyIHsKKyAgICAgICAgdm9pZCAgICpzdGFydDsKKyAgICAgICAgc2l6ZV90ICBsZW5ndGg7Cit9OworCitzdGF0aWMgY2hhciAgICAgICAgICAgICpkZXZfbmFtZTsKK3N0YXRpYyBlbnVtIGlvX21ldGhvZCAgIGlvID0gSU9fTUVUSE9EX01NQVA7CitzdGF0aWMgaW50ICAgICAgICAgICAgICBmZCA9IC0xOworc3RydWN0IGJ1ZmZlciAgICAgICAgICAqYnVmZmVyczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgICAgIG5fYnVmZmVyczsKK3N0YXRpYyBpbnQgICAgICAgICAgICAgIG91dF9idWY7CitzdGF0aWMgaW50ICAgICAgICAgICAgICBmb3JjZV9mb3JtYXQ7CitzdGF0aWMgaW50ICAgICAgICAgICAgICBmcmFtZV9jb3VudCA9IDcwOworCitzdGF0aWMgdm9pZCBlcnJub19leGl0KGNvbnN0IGNoYXIgKnMpCit7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZXJyb3IgJWQsICVzXG4iLCBzLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgaW50IHhpb2N0bChpbnQgZmgsIGludCByZXF1ZXN0LCB2b2lkICphcmcpCit7CisgICAgICAgIGludCByOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByID0gaW9jdGwoZmgsIHJlcXVlc3QsIGFyZyk7CisgICAgICAgIH0gd2hpbGUgKC0xID09IHIgJmFtcDsmYW1wOyBFSU5UUiA9PSBlcnJubyk7CisKKyAgICAgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfaW1hZ2UoY29uc3Qgdm9pZCAqcCwgaW50IHNpemUpCit7CisgICAgICAgIGlmIChvdXRfYnVmKQorICAgICAgICAgICAgICAgIGZ3cml0ZShwLCBzaXplLCAxLCBzdGRvdXQpOworCisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9mcmFtZSh2b2lkKQoreworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1idWZmZXIiPnY0bDJfYnVmZmVyPC9saW5rPiBidWY7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgIHN3aXRjaCAoaW8pIHsKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfUkVBRDoKKyAgICAgICAgICAgICAgICBpZiAoLTEgPT0gcmVhZChmZCwgYnVmZmVyc1swXS5zdGFydCwgYnVmZmVyc1swXS5sZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVBR0FJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUlPOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VsZCBpZ25vcmUgRUlPLCBzZWUgc3BlYy4gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgicmVhZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHByb2Nlc3NfaW1hZ2UoYnVmZmVyc1swXS5zdGFydCwgYnVmZmVyc1swXS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSU9fTUVUSE9EX01NQVA6CisgICAgICAgICAgICAgICAgQ0xFQVIoYnVmKTsKKworICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX0RRQlVGLCAmYW1wO2J1ZikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUFHQUlOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFSU86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkIGlnbm9yZSBFSU8sIHNlZSBzcGVjLiAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfRFFCVUYiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhc3NlcnQoYnVmLmluZGV4ICZsdDsgbl9idWZmZXJzKTsKKworICAgICAgICAgICAgICAgIHByb2Nlc3NfaW1hZ2UoYnVmZmVyc1tidWYuaW5kZXhdLnN0YXJ0LCBidWYuYnl0ZXN1c2VkKTsKKworICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfUUJVRiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1VTRVJQVFI6CisgICAgICAgICAgICAgICAgQ0xFQVIoYnVmKTsKKworICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOworCisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX0RRQlVGLCAmYW1wO2J1ZikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUFHQUlOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFSU86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkIGlnbm9yZSBFSU8sIHNlZSBzcGVjLiAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfRFFCVUYiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgbl9idWZmZXJzOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmLm0udXNlcnB0ciA9PSAodW5zaWduZWQgbG9uZylidWZmZXJzW2ldLnN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFtcDsmYW1wOyBidWYubGVuZ3RoID09IGJ1ZmZlcnNbaV0ubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGFzc2VydChpICZsdDsgbl9idWZmZXJzKTsKKworICAgICAgICAgICAgICAgIHByb2Nlc3NfaW1hZ2UoKHZvaWQgKilidWYubS51c2VycHRyLCBidWYuYnl0ZXN1c2VkKTsKKworICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfUUJVRiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG1haW5sb29wKHZvaWQpCit7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3VudDsKKworICAgICAgICBjb3VudCA9IGZyYW1lX2NvdW50OworCisgICAgICAgIHdoaWxlIChjb3VudC0tICZndDsgMCkgeworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCBmZHM7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByOworCisgICAgICAgICAgICAgICAgICAgICAgICBGRF9aRVJPKCZhbXA7ZmRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZEX1NFVChmZCwgJmFtcDtmZHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdHYudHZfc2VjID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR2LnR2X3VzZWMgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICByID0gc2VsZWN0KGZkICsgMSwgJmFtcDtmZHMsIE5VTEwsIE5VTEwsICZhbXA7dHYpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgPT0gcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRUlOVFIgPT0gZXJybm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoInNlbGVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSByKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2VsZWN0IHRpbWVvdXRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2ZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgLyogRUFHQUlOIC0gY29udGludWUgc2VsZWN0IGxvb3AuICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BfY2FwdHVyaW5nKHZvaWQpCit7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkby4gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9NTUFQOgorICAgICAgICBjYXNlIElPX01FVEhPRF9VU0VSUFRSOgorICAgICAgICAgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9GRiwgJmFtcDt0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19TVFJFQU1PRkYiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9jYXB0dXJpbmcodm9pZCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkby4gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9NTUFQOgorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBuX2J1ZmZlcnM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4gYnVmOworCisgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUihidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5pbmRleCA9IGk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19RQlVGIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9OLCAmYW1wO3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1NUUkVBTU9OIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfVVNFUlBUUjoKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgbl9idWZmZXJzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+IGJ1ZjsKKworICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQVIoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX1VTRVJQVFI7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuaW5kZXggPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLm0udXNlcnB0ciA9ICh1bnNpZ25lZCBsb25nKWJ1ZmZlcnNbaV0uc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYubGVuZ3RoID0gYnVmZmVyc1tpXS5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19RQlVGIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9OLCAmYW1wO3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1NUUkVBTU9OIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdW5pbml0X2RldmljZSh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgZnJlZShidWZmZXJzWzBdLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9NTUFQOgorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBuX2J1ZmZlcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSBtdW5tYXAoYnVmZmVyc1tpXS5zdGFydCwgYnVmZmVyc1tpXS5sZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJtdW5tYXAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9VU0VSUFRSOgorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBuX2J1ZmZlcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoYnVmZmVyc1tpXS5zdGFydCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKGJ1ZmZlcnMpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3JlYWQodW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplKQoreworICAgICAgICBidWZmZXJzID0gY2FsbG9jKDEsIHNpemVvZigqYnVmZmVycykpOworCisgICAgICAgIGlmICghYnVmZmVycykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyc1swXS5sZW5ndGggPSBidWZmZXJfc2l6ZTsKKyAgICAgICAgYnVmZmVyc1swXS5zdGFydCA9IG1hbGxvYyhidWZmZXJfc2l6ZSk7CisKKyAgICAgICAgaWYgKCFidWZmZXJzWzBdLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5pdF9tbWFwKHZvaWQpCit7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj52NGwyX3JlcXVlc3RidWZmZXJzPC9saW5rPiByZXE7CisKKyAgICAgICAgQ0xFQVIocmVxKTsKKworICAgICAgICByZXEuY291bnQgPSA0OworICAgICAgICByZXEudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKyAgICAgICAgcmVxLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisKKyAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1JFUUJVRlMsICZhbXA7cmVxKSkgeworICAgICAgICAgICAgICAgIGlmIChFSU5WQUwgPT0gZXJybm8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3Qgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IG1hcHBpbmdcbiIsIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1JFUUJVRlMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVxLmNvdW50ICZsdDsgMikgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW5zdWZmaWNpZW50IGJ1ZmZlciBtZW1vcnkgb24gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZmZlcnMgPSBjYWxsb2MocmVxLmNvdW50LCBzaXplb2YoKmJ1ZmZlcnMpKTsKKworICAgICAgICBpZiAoIWJ1ZmZlcnMpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAobl9idWZmZXJzID0gMDsgbl9idWZmZXJzICZsdDsgcmVxLmNvdW50OyArK25fYnVmZmVycykgeworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+IGJ1ZjsKKworICAgICAgICAgICAgICAgIENMRUFSKGJ1Zik7CisKKyAgICAgICAgICAgICAgICBidWYudHlwZSAgICAgICAgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgYnVmLm1lbW9yeSAgICAgID0gVjRMMl9NRU1PUllfTU1BUDsKKyAgICAgICAgICAgICAgICBidWYuaW5kZXggICAgICAgPSBuX2J1ZmZlcnM7CisKKyAgICAgICAgICAgICAgICBpZiAoLTEgPT0geGlvY3RsKGZkLCBWSURJT0NfUVVFUllCVUYsICZhbXA7YnVmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19RVUVSWUJVRiIpOworCisgICAgICAgICAgICAgICAgYnVmZmVyc1tuX2J1ZmZlcnNdLmxlbmd0aCA9IGJ1Zi5sZW5ndGg7CisgICAgICAgICAgICAgICAgYnVmZmVyc1tuX2J1ZmZlcnNdLnN0YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1tYXAoTlVMTCAvKiBzdGFydCBhbnl3aGVyZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIC8qIHJlcXVpcmVkICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRCAvKiByZWNvbW1lbmRlZCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLCBidWYubS5vZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKE1BUF9GQUlMRUQgPT0gYnVmZmVyc1tuX2J1ZmZlcnNdLnN0YXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgibW1hcCIpOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdXNlcnAodW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplKQoreworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz4gcmVxOworCisgICAgICAgIENMRUFSKHJlcSk7CisKKyAgICAgICAgcmVxLmNvdW50ICA9IDQ7CisgICAgICAgIHJlcS50eXBlICAgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIHJlcS5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOworCisgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19SRVFCVUZTLCAmYW1wO3JlcSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoRUlOVkFMID09IGVycm5vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGRvZXMgbm90IHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZXIgcG9pbnRlciBpL29cbiIsIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1JFUUJVRlMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBidWZmZXJzID0gY2FsbG9jKDQsIHNpemVvZigqYnVmZmVycykpOworCisgICAgICAgIGlmICghYnVmZmVycykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChuX2J1ZmZlcnMgPSAwOyBuX2J1ZmZlcnMgJmx0OyA0OyArK25fYnVmZmVycykgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbbl9idWZmZXJzXS5sZW5ndGggPSBidWZmZXJfc2l6ZTsKKyAgICAgICAgICAgICAgICBidWZmZXJzW25fYnVmZmVyc10uc3RhcnQgPSBtYWxsb2MoYnVmZmVyX3NpemUpOworCisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXJzW25fYnVmZmVyc10uc3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZGV2aWNlKHZvaWQpCit7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcGFiaWxpdHkiPnY0bDJfY2FwYWJpbGl0eTwvbGluaz4gY2FwOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wY2FwIj52NGwyX2Nyb3BjYXA8L2xpbms+IGNyb3BjYXA7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3AiPnY0bDJfY3JvcDwvbGluaz4gY3JvcDsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm9ybWF0Ij52NGwyX2Zvcm1hdDwvbGluaz4gZm10OworICAgICAgICB1bnNpZ25lZCBpbnQgbWluOworCisgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RVUVSWUNBUCwgJmFtcDtjYXApKSB7CisgICAgICAgICAgICAgICAgaWYgKEVJTlZBTCA9PSBlcnJubykgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBubyBWNEwyIGRldmljZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1FVRVJZQ0FQIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoY2FwLmNhcGFiaWxpdGllcyAmYW1wOyBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgbm8gdmlkZW8gY2FwdHVyZSBkZXZpY2VcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoaW8pIHsKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfUkVBRDoKKyAgICAgICAgICAgICAgICBpZiAoIShjYXAuY2FwYWJpbGl0aWVzICZhbXA7IFY0TDJfQ0FQX1JFQURXUklURSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3Qgc3VwcG9ydCByZWFkIGkvb1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfTU1BUDoKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfVVNFUlBUUjoKKyAgICAgICAgICAgICAgICBpZiAoIShjYXAuY2FwYWJpbGl0aWVzICZhbXA7IFY0TDJfQ0FQX1NUUkVBTUlORykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgaS9vXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyogU2VsZWN0IHZpZGVvIGlucHV0LCB2aWRlbyBzdGFuZGFyZCBhbmQgdHVuZSBoZXJlLiAqLworCisKKyAgICAgICAgQ0xFQVIoY3JvcGNhcCk7CisKKyAgICAgICAgY3JvcGNhcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisgICAgICAgIGlmICgwID09IHhpb2N0bChmZCwgVklESU9DX0NST1BDQVAsICZhbXA7Y3JvcGNhcCkpIHsKKyAgICAgICAgICAgICAgICBjcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgY3JvcC5jID0gY3JvcGNhcC5kZWZyZWN0OyAvKiByZXNldCB0byBkZWZhdWx0ICovCisKKyAgICAgICAgICAgICAgICBpZiAoLTEgPT0geGlvY3RsKGZkLCBWSURJT0NfU19DUk9QLCAmYW1wO2Nyb3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVJTlZBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JvcHBpbmcgbm90IHN1cHBvcnRlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvcnMgaWdub3JlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEVycm9ycyBpZ25vcmVkLiAqLworICAgICAgICB9CisKKworICAgICAgICBDTEVBUihmbXQpOworCisgICAgICAgIGZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICBpZiAoZm9yY2VfZm9ybWF0KSB7CisgICAgICAgICAgICAgICAgZm10LmZtdC5waXgud2lkdGggICAgICAgPSA2NDA7CisgICAgICAgICAgICAgICAgZm10LmZtdC5waXguaGVpZ2h0ICAgICAgPSA0ODA7CisgICAgICAgICAgICAgICAgZm10LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKyAgICAgICAgICAgICAgICBmbXQuZm10LnBpeC5maWVsZCAgICAgICA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKworICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19TX0ZNVCwgJmFtcDtmbXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1NfRk1UIik7CisKKyAgICAgICAgICAgICAgICAvKiBOb3RlIFZJRElPQ19TX0ZNVCBtYXkgY2hhbmdlIHdpZHRoIGFuZCBoZWlnaHQuICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogUHJlc2VydmUgb3JpZ2luYWwgc2V0dGluZ3MgYXMgc2V0IGJ5IHY0bDItY3RsIGZvciBleGFtcGxlICovCisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX0dfRk1ULCAmYW1wO2ZtdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfR19GTVQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEJ1Z2d5IGRyaXZlciBwYXJhbm9pYS4gKi8KKyAgICAgICAgbWluID0gZm10LmZtdC5waXgud2lkdGggKiAyOworICAgICAgICBpZiAoZm10LmZtdC5waXguYnl0ZXNwZXJsaW5lICZsdDsgbWluKQorICAgICAgICAgICAgICAgIGZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSA9IG1pbjsKKyAgICAgICAgbWluID0gZm10LmZtdC5waXguYnl0ZXNwZXJsaW5lICogZm10LmZtdC5waXguaGVpZ2h0OworICAgICAgICBpZiAoZm10LmZtdC5waXguc2l6ZWltYWdlICZsdDsgbWluKQorICAgICAgICAgICAgICAgIGZtdC5mbXQucGl4LnNpemVpbWFnZSA9IG1pbjsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgaW5pdF9yZWFkKGZtdC5mbXQucGl4LnNpemVpbWFnZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfTU1BUDoKKyAgICAgICAgICAgICAgICBpbml0X21tYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9VU0VSUFRSOgorICAgICAgICAgICAgICAgIGluaXRfdXNlcnAoZm10LmZtdC5waXguc2l6ZWltYWdlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBjbG9zZV9kZXZpY2Uodm9pZCkKK3sKKyAgICAgICAgaWYgKC0xID09IGNsb3NlKGZkKSkKKyAgICAgICAgICAgICAgICBlcnJub19leGl0KCJjbG9zZSIpOworCisgICAgICAgIGZkID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkIG9wZW5fZGV2aWNlKHZvaWQpCit7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgICAgIGlmICgtMSA9PSBzdGF0KGRldl9uYW1lLCAmYW1wO3N0KSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGlkZW50aWZ5ICclcyc6ICVkLCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFTX0lTQ0hSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBubyBkZXZpY2VcbiIsIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBmZCA9IG9wZW4oZGV2X25hbWUsIE9fUkRXUiAvKiByZXF1aXJlZCAqLyB8IE9fTk9OQkxPQ0ssIDApOworCisgICAgICAgIGlmICgtMSA9PSBmZCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IG9wZW4gJyVzJzogJWQsICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9uYW1lLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdXNhZ2UoRklMRSAqZnAsIGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICAgICAgZnByaW50ZihmcCwKKyAgICAgICAgICAgICAgICAgIlVzYWdlOiAlcyBbb3B0aW9uc11cblxuIgorICAgICAgICAgICAgICAgICAiVmVyc2lvbiAxLjNcbiIKKyAgICAgICAgICAgICAgICAgIk9wdGlvbnM6XG4iCisgICAgICAgICAgICAgICAgICItZCB8IC0tZGV2aWNlIG5hbWUgICBWaWRlbyBkZXZpY2UgbmFtZSBbJXNdXG4iCisgICAgICAgICAgICAgICAgICItaCB8IC0taGVscCAgICAgICAgICBQcmludCB0aGlzIG1lc3NhZ2VcbiIKKyAgICAgICAgICAgICAgICAgIi1tIHwgLS1tbWFwICAgICAgICAgIFVzZSBtZW1vcnkgbWFwcGVkIGJ1ZmZlcnMgW2RlZmF1bHRdXG4iCisgICAgICAgICAgICAgICAgICItciB8IC0tcmVhZCAgICAgICAgICBVc2UgcmVhZCgpIGNhbGxzXG4iCisgICAgICAgICAgICAgICAgICItdSB8IC0tdXNlcnAgICAgICAgICBVc2UgYXBwbGljYXRpb24gYWxsb2NhdGVkIGJ1ZmZlcnNcbiIKKyAgICAgICAgICAgICAgICAgIi1vIHwgLS1vdXRwdXQgICAgICAgIE91dHB1dHMgc3RyZWFtIHRvIHN0ZG91dFxuIgorICAgICAgICAgICAgICAgICAiLWYgfCAtLWZvcm1hdCAgICAgICAgRm9yY2UgZm9ybWF0IHRvIDY0MHg0ODAgWVVZVlxuIgorICAgICAgICAgICAgICAgICAiLWMgfCAtLWNvdW50ICAgICAgICAgTnVtYmVyIG9mIGZyYW1lcyB0byBncmFiIFslaV1cbiIKKyAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGRldl9uYW1lLCBmcmFtZV9jb3VudCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHNob3J0X29wdGlvbnNbXSA9ICJkOmhtcnVvZmM6IjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24KK2xvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJkZXZpY2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2QnIH0sCisgICAgICAgIHsgImhlbHAiLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnaCcgfSwKKyAgICAgICAgeyAibW1hcCIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdtJyB9LAorICAgICAgICB7ICJyZWFkIiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InIH0sCisgICAgICAgIHsgInVzZXJwIiwgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAndScgfSwKKyAgICAgICAgeyAib3V0cHV0Iiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdvJyB9LAorICAgICAgICB7ICJmb3JtYXQiLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2YnIH0sCisgICAgICAgIHsgImNvdW50IiwgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnYycgfSwKKyAgICAgICAgeyAwLCAwLCAwLCAwIH0KK307CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICAgICAgZGV2X25hbWUgPSAiL2Rldi92aWRlbzAiOworCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBpbnQgaWR4OworICAgICAgICAgICAgICAgIGludCBjOworCisgICAgICAgICAgICAgICAgYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X29wdGlvbnMsIGxvbmdfb3B0aW9ucywgJmFtcDtpZHgpOworCisgICAgICAgICAgICAgICAgaWYgKC0xID09IGMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgICAgIGNhc2UgMDogLyogZ2V0b3B0X2xvbmcoKSBmbGFnICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0LCBhcmdjLCBhcmd2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAgICAgICAgICAgICAgaW8gPSBJT19NRVRIT0RfTU1BUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICBpbyA9IElPX01FVEhPRF9SRUFEOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlvID0gSU9fTUVUSE9EX1VTRVJQVFI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2J1ZisrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2Zvcm1hdCsrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2NvdW50ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQob3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlKHN0ZGVyciwgYXJnYywgYXJndik7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3Blbl9kZXZpY2UoKTsKKyAgICAgICAgaW5pdF9kZXZpY2UoKTsKKyAgICAgICAgc3RhcnRfY2FwdHVyaW5nKCk7CisgICAgICAgIG1haW5sb29wKCk7CisgICAgICAgIHN0b3BfY2FwdHVyaW5nKCk7CisgICAgICAgIHVuaW5pdF9kZXZpY2UoKTsKKyAgICAgICAgY2xvc2VfZGV2aWNlKCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTgxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKQEAgLTAsMCArMSwxMTYwIEBACisgIDx0aXRsZT5Db21tb24gQVBJIEVsZW1lbnRzPC90aXRsZT4KKworICA8cGFyYT5Qcm9ncmFtbWluZyBhIFY0TDIgZGV2aWNlIGNvbnNpc3RzIG9mIHRoZXNlCitzdGVwczo8L3BhcmE+CisKKyAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5PcGVuaW5nIHRoZSBkZXZpY2U8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5DaGFuZ2luZyBkZXZpY2UgcHJvcGVydGllcywgc2VsZWN0aW5nIGEgdmlkZW8gYW5kIGF1ZGlvCitpbnB1dCwgdmlkZW8gc3RhbmRhcmQsIHBpY3R1cmUgYnJpZ2h0bmVzcyBhLiZuYnNwO28uPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+TmVnb3RpYXRpbmcgYSBkYXRhIGZvcm1hdDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPk5lZ290aWF0aW5nIGFuIGlucHV0L291dHB1dCBtZXRob2Q8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5UaGUgYWN0dWFsIGlucHV0L291dHB1dCBsb29wPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+Q2xvc2luZyB0aGUgZGV2aWNlPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorCisgIDxwYXJhPkluIHByYWN0aWNlIG1vc3Qgc3RlcHMgYXJlIG9wdGlvbmFsIGFuZCBjYW4gYmUgZXhlY3V0ZWQgb3V0IG9mCitvcmRlci4gSXQgZGVwZW5kcyBvbiB0aGUgVjRMMiBkZXZpY2UgdHlwZSwgeW91IGNhbiByZWFkIGFib3V0IHRoZQorZGV0YWlscyBpbiA8eHJlZiBsaW5rZW5kPSJkZXZpY2VzIiAvPi4gSW4gdGhpcyBjaGFwdGVyIHdlIHdpbGwgZGlzY3VzcwordGhlIGJhc2ljIGNvbmNlcHRzIGFwcGxpY2FibGUgdG8gYWxsIGRldmljZXMuPC9wYXJhPgorCisgIDxzZWN0aW9uIGlkPSJvcGVuIj4KKyAgICA8dGl0bGU+T3BlbmluZyBhbmQgQ2xvc2luZyBEZXZpY2VzPC90aXRsZT4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkRldmljZSBOYW1pbmc8L3RpdGxlPgorCisgICAgICA8cGFyYT5WNEwyIGRyaXZlcnMgYXJlIGltcGxlbWVudGVkIGFzIGtlcm5lbCBtb2R1bGVzLCBsb2FkZWQKK21hbnVhbGx5IGJ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBhdXRvbWF0aWNhbGx5IHdoZW4gYSBkZXZpY2UgaXMKK2ZpcnN0IG9wZW5lZC4gVGhlIGRyaXZlciBtb2R1bGVzIHBsdWcgaW50byB0aGUgInZpZGVvZGV2IiBrZXJuZWwKK21vZHVsZS4gSXQgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBhbmQgYSBjb21tb24gYXBwbGljYXRpb24KK2ludGVyZmFjZSBzcGVjaWZpZWQgaW4gdGhpcyBkb2N1bWVudC48L3BhcmE+CisKKyAgICAgIDxwYXJhPkVhY2ggZHJpdmVyIHRodXMgbG9hZGVkIHJlZ2lzdGVycyBvbmUgb3IgbW9yZSBkZXZpY2Ugbm9kZXMKK3dpdGggbWFqb3IgbnVtYmVyIDgxIGFuZCBhIG1pbm9yIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS4gQXNzaWduaW5nCittaW5vciBudW1iZXJzIHRvIFY0TDIgZGV2aWNlcyBpcyBlbnRpcmVseSB1cCB0byB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IsCit0aGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBzb2x2ZSBjb25mbGljdHMgYmV0d2VlbiBkZXZpY2VzLjxmb290bm90ZT4KKwkgIDxwYXJhPkFjY2VzcyBwZXJtaXNzaW9ucyBhcmUgYXNzb2NpYXRlZCB3aXRoIGNoYXJhY3RlcgorZGV2aWNlIHNwZWNpYWwgZmlsZXMsIGhlbmNlIHdlIG11c3QgZW5zdXJlIGRldmljZSBudW1iZXJzIGNhbm5vdAorY2hhbmdlIHdpdGggdGhlIG1vZHVsZSBsb2FkIG9yZGVyLiBUbyB0aGlzIGVuZCBtaW5vciBudW1iZXJzIGFyZSBubworbG9uZ2VyIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYnkgdGhlICJ2aWRlb2RldiIgbW9kdWxlIGFzIGluIFY0TCBidXQKK3JlcXVlc3RlZCBieSB0aGUgZHJpdmVyLiBUaGUgZGVmYXVsdHMgd2lsbCBzdWZmaWNlIGZvciBtb3N0IHBlb3BsZQordW5sZXNzIHR3byBkcml2ZXJzIGNvbXBldGUgZm9yIHRoZSBzYW1lIG1pbm9yIG51bWJlcnMuPC9wYXJhPgorCTwvZm9vdG5vdGU+IFRoZSBtb2R1bGUgb3B0aW9ucyB0byBzZWxlY3QgbWlub3IgbnVtYmVycyBhcmUgbmFtZWQKK2FmdGVyIHRoZSBkZXZpY2Ugc3BlY2lhbCBmaWxlIHdpdGggYSAiX25yIiBzdWZmaXguIEZvciBleGFtcGxlICJ2aWRlb19uciIKK2ZvciA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IHZpZGVvIGNhcHR1cmUgZGV2aWNlcy4gVGhlIG51bWJlciBpcworYW4gb2Zmc2V0IHRvIHRoZSBiYXNlIG1pbm9yIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSB0eXBlLgorPGZvb3Rub3RlPgorCSAgPHBhcmE+SW4gZWFybGllciB2ZXJzaW9ucyBvZiB0aGUgVjRMMiBBUEkgdGhlIG1vZHVsZSBvcHRpb25zCit3aGVyZSBuYW1lZCBhZnRlciB0aGUgZGV2aWNlIHNwZWNpYWwgZmlsZSB3aXRoIGEgInVuaXRfIiBwcmVmaXgsIGV4cHJlc3NpbmcKK3RoZSBtaW5vciBudW1iZXIgaXRzZWxmLCBub3QgYW4gb2Zmc2V0LiBSYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGlzIHVua25vd24uCitMYXN0bHkgdGhlIG5hbWluZyBhbmQgc2VtYW50aWNzIGFyZSBqdXN0IGEgY29udmVudGlvbiBhbW9uZyBkcml2ZXIgd3JpdGVycywKK3RoZSBwb2ludCB0byBub3RlIGlzIHRoYXQgbWlub3IgbnVtYmVycyBhcmUgbm90IHN1cHBvc2VkIHRvIGJlIGhhcmRjb2RlZAoraW50byBkcml2ZXJzLjwvcGFyYT4KKwk8L2Zvb3Rub3RlPiBXaGVuIHRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcyBvZiB0aGUgc2FtZQordHlwZSBtb3JlIHRoYW4gb25lIG1pbm9yIG51bWJlciBjYW4gYmUgYXNzaWduZWQsIHNlcGFyYXRlZCBieSBjb21tYXM6Cis8aW5mb3JtYWxleGFtcGxlPgorCSAgPHNjcmVlbj4KKyZndDsgaW5zbW9kIG15ZHJpdmVyLm8gdmlkZW9fbnI9MCwxIHJhZGlvX25yPTAsMTwvc2NyZWVuPgorCTwvaW5mb3JtYWxleGFtcGxlPjwvcGFyYT4KKworICAgICAgPHBhcmE+SW4gPGZpbGVuYW1lPi9ldGMvbW9kdWxlcy5jb25mPC9maWxlbmFtZT4gdGhpcyBtYXkgYmUKK3dyaXR0ZW4gYXM6IDxpbmZvcm1hbGV4YW1wbGU+CisJICA8c2NyZWVuPgorYWxpYXMgY2hhci1tYWpvci04MS0wIG15ZHJpdmVyCithbGlhcyBjaGFyLW1ham9yLTgxLTEgbXlkcml2ZXIKK2FsaWFzIGNoYXItbWFqb3ItODEtNjQgbXlkcml2ZXIgICAgICAgICAgICAgIDxjbyBpZD0iYWxpYXMiIC8+CitvcHRpb25zIG15ZHJpdmVyIHZpZGVvX25yPTAsMSByYWRpb19ucj0wLDEgICA8Y28gaWQ9Im9wdGlvbnMiIC8+CisJICA8L3NjcmVlbj4KKwkgIDxjYWxsb3V0bGlzdD4KKwkgICAgPGNhbGxvdXQgYXJlYXJlZnM9ImFsaWFzIj4KKwkgICAgICA8cGFyYT5XaGVuIGFuIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIG9wZW4gYSBkZXZpY2UKK3NwZWNpYWwgZmlsZSB3aXRoIG1ham9yIG51bWJlciA4MSBhbmQgbWlub3IgbnVtYmVyIDAsIDEsIG9yIDY0LCBsb2FkCisibXlkcml2ZXIiIChhbmQgdGhlICJ2aWRlb2RldiIgbW9kdWxlIGl0IGRlcGVuZHMgdXBvbikuPC9wYXJhPgorCSAgICA8L2NhbGxvdXQ+CisJICAgIDxjYWxsb3V0IGFyZWFyZWZzPSJvcHRpb25zIj4KKwkgICAgICA8cGFyYT5SZWdpc3RlciB0aGUgZmlyc3QgdHdvIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyB3aXRoCittaW5vciBudW1iZXIgMCBhbmQgMSAoYmFzZSBudW1iZXIgaXMgMCksIHRoZSBmaXJzdCB0d28gcmFkaW8gZGV2aWNlCit3aXRoIG1pbm9yIG51bWJlciA2NCBhbmQgNjUgKGJhc2UgNjQpLjwvcGFyYT4KKwkgICAgPC9jYWxsb3V0PgorCSAgPC9jYWxsb3V0bGlzdD4KKwk8L2luZm9ybWFsZXhhbXBsZT4gV2hlbiBubyBtaW5vciBudW1iZXIgaXMgZ2l2ZW4gYXMgbW9kdWxlCitvcHRpb24gdGhlIGRyaXZlciBzdXBwbGllcyBhIGRlZmF1bHQuIDx4cmVmIGxpbmtlbmQ9ImRldmljZXMiIC8+CityZWNvbW1lbmRzIHRoZSBiYXNlIG1pbm9yIG51bWJlcnMgdG8gYmUgdXNlZCBmb3IgdGhlIHZhcmlvdXMgZGV2aWNlCit0eXBlcy4gT2J2aW91c2x5IG1pbm9yIG51bWJlcnMgbXVzdCBiZSB1bmlxdWUuIFdoZW4gdGhlIG51bWJlciBpcworYWxyZWFkeSBpbiB1c2UgdGhlIDxlbXBoYXNpcz5vZmZlbmRpbmcgZGV2aWNlPC9lbXBoYXNpcz4gd2lsbCBub3QgYmUKK3JlZ2lzdGVyZWQuIDwhLS0gQmxlc3NlZCBieSBMaW51cyBUb3J2YWxkcyBvbgorbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZywgMjAwMi0xMS0yMC4gLS0+PC9wYXJhPgorCisgICAgICA8cGFyYT5CeSBjb252ZW50aW9uIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBjcmVhdGUgdmFyaW91cworY2hhcmFjdGVyIGRldmljZSBzcGVjaWFsIGZpbGVzIHdpdGggdGhlc2UgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgaW4KK3RoZSA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4gVGhlIG5hbWVzIHJlY29tZW5kZWQgZm9yIHRoZQorZGlmZmVyZW50IFY0TDIgZGV2aWNlIHR5cGVzIGFyZSBsaXN0ZWQgaW4gPHhyZWYgbGlua2VuZD0iZGV2aWNlcyIgLz4uCis8L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSBjcmVhdGlvbiBvZiBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlcyAod2l0aAorPGFwcGxpY2F0aW9uPm1rbm9kPC9hcHBsaWNhdGlvbj4pIGlzIGEgcHJpdmlsZWdlZCBvcGVyYXRpb24gYW5kCitkZXZpY2VzIGNhbm5vdCBiZSBvcGVuZWQgYnkgbWFqb3IgYW5kIG1pbm9yIG51bWJlci4gVGhhdCBtZWFucworYXBwbGljYXRpb25zIGNhbm5vdCA8ZW1waGFzaXM+cmVsaWFibGU8L2VtcGhhc2lzPiBzY2FuIGZvciBsb2FkZWQgb3IKK2luc3RhbGxlZCBkcml2ZXJzLiBUaGUgdXNlciBtdXN0IGVudGVyIGEgZGV2aWNlIG5hbWUsIG9yIHRoZQorYXBwbGljYXRpb24gY2FuIHRyeSB0aGUgY29udmVudGlvbmFsIGRldmljZSBuYW1lcy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlVuZGVyIHRoZSBkZXZpY2UgZmlsZXN5c3RlbSAoZGV2ZnMpIHRoZSBtaW5vciBudW1iZXIKK29wdGlvbnMgYXJlIGlnbm9yZWQuIFY0TDIgZHJpdmVycyAob3IgYnkgcHJveHkgdGhlICJ2aWRlb2RldiIgbW9kdWxlKQorYXV0b21hdGljYWxseSBjcmVhdGUgdGhlIHJlcXVpcmVkIGRldmljZSBmaWxlcyBpbiB0aGUKKzxmaWxlbmFtZT4vZGV2L3Y0bDwvZmlsZW5hbWU+IGRpcmVjdG9yeSB1c2luZyB0aGUgY29udmVudGlvbmFsIGRldmljZQorbmFtZXMgYWJvdmUuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyZWxhdGVkIj4KKyAgICAgIDx0aXRsZT5SZWxhdGVkIERldmljZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5EZXZpY2VzIGNhbiBzdXBwb3J0IHNldmVyYWwgcmVsYXRlZCBmdW5jdGlvbnMuIEZvciBleGFtcGxlCit2aWRlbyBjYXB0dXJpbmcsIHZpZGVvIG92ZXJsYXkgYW5kIFZCSSBjYXB0dXJpbmcgYXJlIHJlbGF0ZWQgYmVjYXVzZQordGhlc2UgZnVuY3Rpb25zIHNoYXJlLCBhbW9uZ3N0IG90aGVyLCB0aGUgc2FtZSB2aWRlbyBpbnB1dCBhbmQgdHVuZXIKK2ZyZXF1ZW5jeS4gVjRMIGFuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIgdXNlZCB0aGUgc2FtZSBkZXZpY2UgbmFtZQorYW5kIG1pbm9yIG51bWJlciBmb3IgdmlkZW8gY2FwdHVyaW5nIGFuZCBvdmVybGF5LCBidXQgZGlmZmVyZW50IG9uZXMKK2ZvciBWQkkuIEV4cGVyaWVuY2Ugc2hvd2VkIHRoaXMgYXBwcm9hY2ggaGFzIHNldmVyYWwgcHJvYmxlbXM8Zm9vdG5vdGU+CisJICA8cGFyYT5HaXZlbiBhIGRldmljZSBmaWxlIG5hbWUgb25lIGNhbm5vdCByZWxpYWJsZSBmaW5kCityZWxhdGVkIGRldmljZXMuIEZvciBvbmNlIG5hbWVzIGFyZSBhcmJpdHJhcnkgYW5kIGluIGEgc3lzdGVtIHdpdGgKK211bHRpcGxlIGRldmljZXMsIHdoZXJlIG9ubHkgc29tZSBzdXBwb3J0IFZCSSBjYXB0dXJpbmcsIGEKKzxmaWxlbmFtZT4vZGV2L3ZpZGVvMjwvZmlsZW5hbWU+IGlzIG5vdCBuZWNlc3NhcmlseSByZWxhdGVkIHRvCis8ZmlsZW5hbWU+L2Rldi92YmkyPC9maWxlbmFtZT4uIFRoZSBWNEwKKzxjb25zdGFudD5WSURJT0NHVU5JVDwvY29uc3RhbnQ+IGlvY3RsIHdvdWxkIHJlcXVpcmUgYSBzZWFyY2ggZm9yIGEKK2RldmljZSBmaWxlIHdpdGggYSBwYXJ0aWN1bGFyIG1ham9yIGFuZCBtaW5vciBudW1iZXIuPC9wYXJhPgorCTwvZm9vdG5vdGU+LCBhbmQgdG8gbWFrZSB0aGluZ3Mgd29yc2UgdGhlIFY0TCB2aWRlb2RldiBtb2R1bGUKK3VzZWQgdG8gcHJvaGliaXQgbXVsdGlwbGUgb3BlbnMgb2YgYSBkZXZpY2UuPC9wYXJhPgorCisgICAgICA8cGFyYT5BcyBhIHJlbWVkeSB0aGUgcHJlc2VudCB2ZXJzaW9uIG9mIHRoZSBWNEwyIEFQSSByZWxheGVkIHRoZQorY29uY2VwdCBvZiBkZXZpY2UgdHlwZXMgd2l0aCBzcGVjaWZpYyBuYW1lcyBhbmQgbWlub3IgbnVtYmVycy4gRm9yCitjb21wYXRpYmlsaXR5IHdpdGggb2xkIGFwcGxpY2F0aW9ucyBkcml2ZXJzIG11c3Qgc3RpbGwgcmVnaXN0ZXIgZGlmZmVyZW50CittaW5vciBudW1iZXJzIHRvIGFzc2lnbiBhIGRlZmF1bHQgZnVuY3Rpb24gdG8gdGhlIGRldmljZS4gQnV0IGlmIHJlbGF0ZWQKK2Z1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgdGhleSBtdXN0IGJlIGF2YWlsYWJsZSB1bmRlciBhbGwKK3JlZ2lzdGVyZWQgbWlub3IgbnVtYmVycy4gVGhlIGRlc2lyZWQgZnVuY3Rpb24gY2FuIGJlIHNlbGVjdGVkIGFmdGVyCitvcGVuaW5nIHRoZSBkZXZpY2UgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImRldmljZXMiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+SW1hZ2luZSBhIGRyaXZlciBzdXBwb3J0aW5nIHZpZGVvIGNhcHR1cmluZywgdmlkZW8KK292ZXJsYXksIHJhdyBWQkkgY2FwdHVyaW5nLCBhbmQgRk0gcmFkaW8gcmVjZXB0aW9uLiBJdCByZWdpc3RlcnMgdGhyZWUKK2RldmljZXMgd2l0aCBtaW5vciBudW1iZXIgMCwgNjQgYW5kIDIyNCAodGhpcyBudW1iZXJpbmcgc2NoZW1lIGlzCitpbmhlcml0ZWQgZnJvbSB0aGUgVjRMIEFQSSkuIFJlZ2FyZGxlc3MgaWYKKzxmaWxlbmFtZT4vZGV2L3ZpZGVvPC9maWxlbmFtZT4gKDgxLCAwKSBvcgorPGZpbGVuYW1lPi9kZXYvdmJpPC9maWxlbmFtZT4gKDgxLCAyMjQpIGlzIG9wZW5lZCB0aGUgYXBwbGljYXRpb24gY2FuCitzZWxlY3QgYW55IG9uZSBvZiB0aGUgdmlkZW8gY2FwdHVyaW5nLCBvdmVybGF5IG9yIFZCSSBjYXB0dXJpbmcKK2Z1bmN0aW9ucy4gV2l0aG91dCBwcm9ncmFtbWluZyAoZS4mbmJzcDtnLiByZWFkaW5nIGZyb20gdGhlIGRldmljZQord2l0aCA8YXBwbGljYXRpb24+ZGQ8L2FwcGxpY2F0aW9uPiBvciA8YXBwbGljYXRpb24+Y2F0PC9hcHBsaWNhdGlvbj4pCis8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IGNhcHR1cmVzIHZpZGVvIGltYWdlcywgd2hpbGUKKzxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+IGNhcHR1cmVzIHJhdyBWQkkgZGF0YS4KKzxmaWxlbmFtZT4vZGV2L3JhZGlvPC9maWxlbmFtZT4gKDgxLCA2NCkgaXMgaW52YXJpYWJsZSBhIHJhZGlvIGRldmljZSwKK3VucmVsYXRlZCB0byB0aGUgdmlkZW8gZnVuY3Rpb25zLiBCZWluZyB1bnJlbGF0ZWQgZG9lcyBub3QgaW1wbHkgdGhlCitkZXZpY2VzIGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIGhvd2V2ZXIuIFRoZSAmZnVuYy1vcGVuOworZnVuY3Rpb24gbWF5IHZlcnkgd2VsbCByZXR1cm4gYW4gJkVCVVNZOy48L3BhcmE+CisKKyAgICAgIDxwYXJhPkJlc2lkZXMgdmlkZW8gaW5wdXQgb3Igb3V0cHV0IHRoZSBoYXJkd2FyZSBtYXkgYWxzbworc3VwcG9ydCBhdWRpbyBzYW1wbGluZyBvciBwbGF5YmFjay4gSWYgc28sIHRoZXNlIGZ1bmN0aW9ucyBhcmUKK2ltcGxlbWVudGVkIGFzIE9TUyBvciBBTFNBIFBDTSBkZXZpY2VzIGFuZCBldmVudHVhbGx5IE9TUyBvciBBTFNBCithdWRpbyBtaXhlci4gVGhlIFY0TDIgQVBJIG1ha2VzIG5vIHByb3Zpc2lvbnMgeWV0IHRvIGZpbmQgdGhlc2UKK3JlbGF0ZWQgZGV2aWNlcy4gSWYgeW91IGhhdmUgYW4gaWRlYSBwbGVhc2Ugd3JpdGUgdG8gdGhlIGxpbnV4LW1lZGlhCittYWlsaW5nIGxpc3Q6ICZ2NGwtbWw7LjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5NdWx0aXBsZSBPcGVuczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkluIGdlbmVyYWwsIFY0TDIgZGV2aWNlcyBjYW4gYmUgb3BlbmVkIG1vcmUgdGhhbiBvbmNlLgorV2hlbiB0aGlzIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLCB1c2VycyBjYW4gZm9yIGV4YW1wbGUgc3RhcnQgYQorInBhbmVsIiBhcHBsaWNhdGlvbiB0byBjaGFuZ2UgY29udHJvbHMgbGlrZSBicmlnaHRuZXNzIG9yIGF1ZGlvCit2b2x1bWUsIHdoaWxlIGFub3RoZXIgYXBwbGljYXRpb24gY2FwdHVyZXMgdmlkZW8gYW5kIGF1ZGlvLiBJbiBvdGhlciB3b3JkcywgcGFuZWwKK2FwcGxpY2F0aW9ucyBhcmUgY29tcGFyYWJsZSB0byBhbiBPU1Mgb3IgQUxTQSBhdWRpbyBtaXhlciBhcHBsaWNhdGlvbi4KK1doZW4gYSBkZXZpY2Ugc3VwcG9ydHMgbXVsdGlwbGUgZnVuY3Rpb25zIGxpa2UgY2FwdHVyaW5nIGFuZCBvdmVybGF5Cis8ZW1waGFzaXM+c2ltdWx0YW5lb3VzbHk8L2VtcGhhc2lzPiwgbXVsdGlwbGUgb3BlbnMgYWxsb3cgY29uY3VycmVudAordXNlIG9mIHRoZSBkZXZpY2UgYnkgZm9ya2VkIHByb2Nlc3NlcyBvciBzcGVjaWFsaXplZCBhcHBsaWNhdGlvbnMuPC9wYXJhPgorCisgICAgICA8cGFyYT5NdWx0aXBsZSBvcGVucyBhcmUgb3B0aW9uYWwsIGFsdGhvdWdoIGRyaXZlcnMgc2hvdWxkCitwZXJtaXQgYXQgbGVhc3QgY29uY3VycmVudCBhY2Nlc3NlcyB3aXRob3V0IGRhdGEgZXhjaGFuZ2UsICZpZTsgcGFuZWwKK2FwcGxpY2F0aW9ucy4gVGhpcyBpbXBsaWVzICZmdW5jLW9wZW47IGNhbiByZXR1cm4gYW4gJkVCVVNZOyB3aGVuIHRoZQorZGV2aWNlIGlzIGFscmVhZHkgaW4gdXNlLCBhcyB3ZWxsIGFzICZmdW5jLWlvY3RsOyBmdW5jdGlvbnMgaW5pdGlhdGluZworZGF0YSBleGNoYW5nZSAobmFtZWx5IHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bCksIGFuZCB0aGUgJmZ1bmMtcmVhZDsKK2FuZCAmZnVuYy13cml0ZTsgZnVuY3Rpb25zLjwvcGFyYT4KKworICAgICAgPHBhcmE+TWVyZSBvcGVuaW5nIGEgVjRMMiBkZXZpY2UgZG9lcyBub3QgZ3JhbnQgZXhjbHVzaXZlCithY2Nlc3MuPGZvb3Rub3RlPgorCSAgPHBhcmE+RHJpdmVycyBjb3VsZCByZWNvZ25pemUgdGhlCis8Y29uc3RhbnQ+T19FWENMPC9jb25zdGFudD4gb3BlbiBmbGFnLiBQcmVzZW50bHkgdGhpcyBpcyBub3QgcmVxdWlyZWQsCitzbyBhcHBsaWNhdGlvbnMgY2Fubm90IGtub3cgaWYgaXQgcmVhbGx5IHdvcmtzLjwvcGFyYT4KKwk8L2Zvb3Rub3RlPiBJbml0aWF0aW5nIGRhdGEgZXhjaGFuZ2UgaG93ZXZlciBhc3NpZ25zIHRoZSByaWdodAordG8gcmVhZCBvciB3cml0ZSB0aGUgcmVxdWVzdGVkIHR5cGUgb2YgZGF0YSwgYW5kIHRvIGNoYW5nZSByZWxhdGVkCitwcm9wZXJ0aWVzLCB0byB0aGlzIGZpbGUgZGVzY3JpcHRvci4gQXBwbGljYXRpb25zIGNhbiByZXF1ZXN0CithZGRpdGlvbmFsIGFjY2VzcyBwcml2aWxlZ2VzIHVzaW5nIHRoZSBwcmlvcml0eSBtZWNoYW5pc20gZGVzY3JpYmVkIGluCis8eHJlZiBsaW5rZW5kPSJhcHAtcHJpIiAvPi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+U2hhcmVkIERhdGEgU3RyZWFtczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlY0TDIgZHJpdmVycyBzaG91bGQgbm90IHN1cHBvcnQgbXVsdGlwbGUgYXBwbGljYXRpb25zCityZWFkaW5nIG9yIHdyaXRpbmcgdGhlIHNhbWUgZGF0YSBzdHJlYW0gb24gYSBkZXZpY2UgYnkgY29weWluZworYnVmZmVycywgdGltZSBtdWx0aXBsZXhpbmcgb3Igc2ltaWxhciBtZWFucy4gVGhpcyBpcyBiZXR0ZXIgaGFuZGxlZCBieQorYSBwcm94eSBhcHBsaWNhdGlvbiBpbiB1c2VyIHNwYWNlLiBXaGVuIHRoZSBkcml2ZXIgc3VwcG9ydHMgc3RyZWFtCitzaGFyaW5nIGFueXdheSBpdCBtdXN0IGJlIGltcGxlbWVudGVkIHRyYW5zcGFyZW50bHkuIFRoZSBWNEwyIEFQSSBkb2VzCitub3Qgc3BlY2lmeSBob3cgY29uZmxpY3RzIGFyZSBzb2x2ZWQuIDwhLS0gRm9yIGV4YW1wbGUgT19FWENMIHdoZW4gdGhlCithcHBsaWNhdGlvbiBkb2VzIG5vdCB3YW50IHRvIGJlIHByZWVtcHRlZCwgUFJPVF9SRUFEIG1tYXBwZWQgYnVmZmVycword2hpY2ggY2FuIGJlIG1hcHBlZCB0d2ljZSwgd2hhdCBoYXBwZW5zIHdoZW4gaW1hZ2UgZm9ybWF0cyBkbyBub3QKK21hdGNoIGV0Yy4tLT48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4KKworICAgIDxwYXJhPlRvIG9wZW4gYW5kIGNsb3NlIFY0TDIgZGV2aWNlcyBhcHBsaWNhdGlvbnMgdXNlIHRoZQorJmZ1bmMtb3BlbjsgYW5kICZmdW5jLWNsb3NlOyBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LiBEZXZpY2VzIGFyZQorcHJvZ3JhbW1lZCB1c2luZyB0aGUgJmZ1bmMtaW9jdGw7IGZ1bmN0aW9uIGFzIGV4cGxhaW5lZCBpbiB0aGUKK2ZvbGxvd2luZyBzZWN0aW9ucy48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InF1ZXJ5Y2FwIj4KKyAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgIDxwYXJhPkJlY2F1c2UgVjRMMiBjb3ZlcnMgYSB3aWRlIHZhcmlldHkgb2YgZGV2aWNlcyBub3QgYWxsCithc3BlY3RzIG9mIHRoZSBBUEkgYXJlIGVxdWFsbHkgYXBwbGljYWJsZSB0byBhbGwgdHlwZXMgb2YgZGV2aWNlcy4KK0Z1cnRoZXJtb3JlIGRldmljZXMgb2YgdGhlIHNhbWUgdHlwZSBoYXZlIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMgYW5kCit0aGlzIHNwZWNpZmljYXRpb24gcGVybWl0cyB0aGUgb21pc3Npb24gb2YgYSBmZXcgY29tcGxpY2F0ZWQgYW5kIGxlc3MKK2ltcG9ydGFudCBwYXJ0cyBvZiB0aGUgQVBJLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bCBpcyBhdmFpbGFibGUgdG8gY2hlY2sgaWYgdGhlIGtlcm5lbAorZGV2aWNlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIHNwZWNpZmljYXRpb24sIGFuZCB0byBxdWVyeSB0aGUgPGxpbmsKK2xpbmtlbmQ9ImRldmljZXMiPmZ1bmN0aW9uczwvbGluaz4gYW5kIDxsaW5rIGxpbmtlbmQ9ImlvIj5JL08KK21ldGhvZHM8L2xpbms+IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLiBPdGhlciBmZWF0dXJlcyBjYW4gYmUgcXVlcmllZAorYnkgY2FsbGluZyB0aGUgcmVzcGVjdGl2ZSBpb2N0bCwgZm9yIGV4YW1wbGUgJlZJRElPQy1FTlVNSU5QVVQ7Cit0byBsZWFybiBhYm91dCB0aGUgbnVtYmVyLCB0eXBlcyBhbmQgbmFtZXMgb2YgdmlkZW8gY29ubmVjdG9ycyBvbiB0aGUKK2RldmljZS4gQWx0aG91Z2ggYWJzdHJhY3Rpb24gaXMgYSBtYWpvciBvYmplY3RpdmUgb2YgdGhpcyBBUEksIHRoZQoraW9jdGwgYWxzbyBhbGxvd3MgZHJpdmVyIHNwZWNpZmljIGFwcGxpY2F0aW9ucyB0byByZWxpYWJsZSBpZGVudGlmeQordGhlIGRyaXZlci48L3BhcmE+CisKKyAgICA8cGFyYT5BbGwgVjRMMiBkcml2ZXJzIG11c3Qgc3VwcG9ydAorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNBUDwvY29uc3RhbnQ+LiBBcHBsaWNhdGlvbnMgc2hvdWxkIGFsd2F5cyBjYWxsCit0aGlzIGlvY3RsIGFmdGVyIG9wZW5pbmcgdGhlIGRldmljZS48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iYXBwLXByaSI+CisgICAgPHRpdGxlPkFwcGxpY2F0aW9uIFByaW9yaXR5PC90aXRsZT4KKworICAgIDxwYXJhPldoZW4gbXVsdGlwbGUgYXBwbGljYXRpb25zIHNoYXJlIGEgZGV2aWNlIGl0IG1heSBiZQorZGVzaXJhYmxlIHRvIGFzc2lnbiB0aGVtIGRpZmZlcmVudCBwcmlvcml0aWVzLiBDb250cmFyeSB0byB0aGUKK3RyYWRpdGlvbmFsICJybSAtcmYgLyIgc2Nob29sIG9mIHRob3VnaHQgYSB2aWRlbyByZWNvcmRpbmcgYXBwbGljYXRpb24KK2NvdWxkIGZvciBleGFtcGxlIGJsb2NrIG90aGVyIGFwcGxpY2F0aW9ucyBmcm9tIGNoYW5naW5nIHZpZGVvCitjb250cm9scyBvciBzd2l0Y2hpbmcgdGhlIGN1cnJlbnQgVFYgY2hhbm5lbC4gQW5vdGhlciBvYmplY3RpdmUgaXMgdG8KK3Blcm1pdCBsb3cgcHJpb3JpdHkgYXBwbGljYXRpb25zIHdvcmtpbmcgaW4gYmFja2dyb3VuZCwgd2hpY2ggY2FuIGJlCitwcmVlbXB0ZWQgYnkgdXNlciBjb250cm9sbGVkIGFwcGxpY2F0aW9ucyBhbmQgYXV0b21hdGljYWxseSByZWdhaW4KK2NvbnRyb2wgb2YgdGhlIGRldmljZSBhdCBhIGxhdGVyIHRpbWUuPC9wYXJhPgorCisgICAgPHBhcmE+U2luY2UgdGhlc2UgZmVhdHVyZXMgY2Fubm90IGJlIGltcGxlbWVudGVkIGVudGlyZWx5IGluIHVzZXIKK3NwYWNlIFY0TDIgZGVmaW5lcyB0aGUgJlZJRElPQy1HLVBSSU9SSVRZOyBhbmQgJlZJRElPQy1TLVBSSU9SSVRZOworaW9jdGxzIHRvIHJlcXVlc3QgYW5kIHF1ZXJ5IHRoZSBhY2Nlc3MgcHJpb3JpdHkgYXNzb2NpYXRlIHdpdGggYSBmaWxlCitkZXNjcmlwdG9yLiBPcGVuaW5nIGEgZGV2aWNlIGFzc2lnbnMgYSBtZWRpdW0gcHJpb3JpdHksIGNvbXBhdGlibGUKK3dpdGggZWFybGllciB2ZXJzaW9ucyBvZiBWNEwyIGFuZCBkcml2ZXJzIG5vdCBzdXBwb3J0aW5nIHRoZXNlIGlvY3Rscy4KK0FwcGxpY2F0aW9ucyByZXF1aXJpbmcgYSBkaWZmZXJlbnQgcHJpb3JpdHkgd2lsbCB1c3VhbGx5IGNhbGwKKzxjb25zdGFudD5WSURJT0NfU19QUklPUklUWTwvY29uc3RhbnQ+IGFmdGVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIHdpdGgKK3RoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5Jb2N0bHMgY2hhbmdpbmcgZHJpdmVyIHByb3BlcnRpZXMsIHN1Y2ggYXMgJlZJRElPQy1TLUlOUFVUOywKK3JldHVybiBhbiAmRUJVU1k7IGFmdGVyIGFub3RoZXIgYXBwbGljYXRpb24gb2J0YWluZWQgaGlnaGVyIHByaW9yaXR5LgorQW4gZXZlbnQgbWVjaGFuaXNtIHRvIG5vdGlmeSBhcHBsaWNhdGlvbnMgYWJvdXQgYXN5bmNocm9ub3VzIHByb3BlcnR5CitjaGFuZ2VzIGhhcyBiZWVuIHByb3Bvc2VkIGJ1dCBub3QgYWRkZWQgeWV0LjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJ2aWRlbyI+CisgICAgPHRpdGxlPlZpZGVvIElucHV0cyBhbmQgT3V0cHV0czwvdGl0bGU+CisKKyAgICA8cGFyYT5WaWRlbyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlIHBoeXNpY2FsIGNvbm5lY3RvcnMgb2YgYQorZGV2aWNlLiBUaGVzZSBjYW4gYmUgZm9yIGV4YW1wbGUgUkYgY29ubmVjdG9ycyAoYW50ZW5uYS9jYWJsZSksIENWQlMKK2Euay5hLiBDb21wb3NpdGUgVmlkZW8sIFMtVmlkZW8gb3IgUkdCIGNvbm5lY3RvcnMuIE9ubHkgdmlkZW8gYW5kIFZCSQorY2FwdHVyZSBkZXZpY2VzIGhhdmUgaW5wdXRzLCBvdXRwdXQgZGV2aWNlcyBoYXZlIG91dHB1dHMsIGF0IGxlYXN0IG9uZQorZWFjaC4gUmFkaW8gZGV2aWNlcyBoYXZlIG5vIHZpZGVvIGlucHV0cyBvciBvdXRwdXRzLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGxlYXJuIGFib3V0IHRoZSBudW1iZXIgYW5kIGF0dHJpYnV0ZXMgb2YgdGhlCithdmFpbGFibGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFwcGxpY2F0aW9ucyBjYW4gZW51bWVyYXRlIHRoZW0gd2l0aCB0aGUKKyZWSURJT0MtRU5VTUlOUFVUOyBhbmQgJlZJRElPQy1FTlVNT1VUUFVUOyBpb2N0bCwgcmVzcGVjdGl2ZWx5LiBUaGUKKyZ2NGwyLWlucHV0OyByZXR1cm5lZCBieSB0aGUgPGNvbnN0YW50PlZJRElPQ19FTlVNSU5QVVQ8L2NvbnN0YW50PgoraW9jdGwgYWxzbyBjb250YWlucyBzaWduYWwgc3RhdHVzIGluZm9ybWF0aW9uIGFwcGxpY2FibGUgd2hlbiB0aGUKK2N1cnJlbnQgdmlkZW8gaW5wdXQgaXMgcXVlcmllZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgJlZJRElPQy1HLUlOUFVUOyBhbmQgJlZJRElPQy1HLU9VVFBVVDsgaW9jdGwgcmV0dXJuIHRoZQoraW5kZXggb2YgdGhlIGN1cnJlbnQgdmlkZW8gaW5wdXQgb3Igb3V0cHV0LiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQKK2lucHV0IG9yIG91dHB1dCBhcHBsaWNhdGlvbnMgY2FsbCB0aGUgJlZJRElPQy1TLUlOUFVUOyBhbmQKKyZWSURJT0MtUy1PVVRQVVQ7IGlvY3RsLiBEcml2ZXJzIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgaW5wdXQgaW9jdGxzCit3aGVuIHRoZSBkZXZpY2UgaGFzIG9uZSBvciBtb3JlIGlucHV0cywgYWxsIHRoZSBvdXRwdXQgaW9jdGxzIHdoZW4gdGhlCitkZXZpY2UgaGFzIG9uZSBvciBtb3JlIG91dHB1dHMuPC9wYXJhPgorCisgICAgPCEtLQorICAgIDxmaWd1cmUgaWQ9aW8tdHJlZT4KKyAgICAgIDx0aXRsZT5JbnB1dCBhbmQgb3V0cHV0IGVudW1lcmF0aW9uIGlzIHRoZSByb290IG9mIG1vc3QgZGV2aWNlIHByb3BlcnRpZXMuPC90aXRsZT4KKyAgICAgIDxtZWRpYW9iamVjdD4KKwk8aW1hZ2VvYmplY3Q+CisJICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImxpbmtzLnBkZiIgZm9ybWF0PSJwcyIgLz4KKwk8L2ltYWdlb2JqZWN0PgorCTxpbWFnZW9iamVjdD4KKwkgIDxpbWFnZWRhdGEgZmlsZXJlZj0ibGlua3MuZ2lmIiBmb3JtYXQ9ImdpZiIgLz4KKwk8L2ltYWdlb2JqZWN0PgorCTx0ZXh0b2JqZWN0PgorCSAgPHBocmFzZT5MaW5rcyBiZXR3ZWVuIHZhcmlvdXMgZGV2aWNlIHByb3BlcnR5IHN0cnVjdHVyZXMuPC9waHJhc2U+CisJPC90ZXh0b2JqZWN0PgorICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICA8L2ZpZ3VyZT4KKyAgICAtLT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHZpZGVvIGlucHV0PC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItaW5wdXQ7IGlucHV0OworaW50IGluZGV4OworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUctSU5QVVQ7LCAmYW1wO2luZGV4KSkgeworCXBlcnJvciAoIlZJRElPQ19HX0lOUFVUIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworbWVtc2V0ICgmYW1wO2lucHV0LCAwLCBzaXplb2YgKGlucHV0KSk7CitpbnB1dC5pbmRleCA9IGluZGV4OworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUVOVU1JTlBVVDssICZhbXA7aW5wdXQpKSB7CisJcGVycm9yICgiVklESU9DX0VOVU1JTlBVVCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK3ByaW50ZiAoIkN1cnJlbnQgaW5wdXQ6ICVzXG4iLCBpbnB1dC5uYW1lKTsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+U3dpdGNoaW5nIHRvIHRoZSBmaXJzdCB2aWRlbyBpbnB1dDwvdGl0bGU+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2ludCBpbmRleDsKKworaW5kZXggPSAwOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLVMtSU5QVVQ7LCAmYW1wO2luZGV4KSkgeworCXBlcnJvciAoIlZJRElPQ19TX0lOUFVUIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9ImF1ZGlvIj4KKyAgICA8dGl0bGU+QXVkaW8gSW5wdXRzIGFuZCBPdXRwdXRzPC90aXRsZT4KKworICAgIDxwYXJhPkF1ZGlvIGlucHV0cyBhbmQgb3V0cHV0cyBhcmUgcGh5c2ljYWwgY29ubmVjdG9ycyBvZiBhCitkZXZpY2UuIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyBoYXZlIGlucHV0cywgb3V0cHV0IGRldmljZXMgaGF2ZQorb3V0cHV0cywgemVybyBvciBtb3JlIGVhY2guIFJhZGlvIGRldmljZXMgaGF2ZSBubyBhdWRpbyBpbnB1dHMgb3IKK291dHB1dHMuIFRoZXkgaGF2ZSBleGFjdGx5IG9uZSB0dW5lciB3aGljaCBpbiBmYWN0Cis8ZW1waGFzaXM+aXM8L2VtcGhhc2lzPiBhbiBhdWRpbyBzb3VyY2UsIGJ1dCB0aGlzIEFQSSBhc3NvY2lhdGVzCit0dW5lcnMgd2l0aCB2aWRlbyBpbnB1dHMgb3Igb3V0cHV0cyBvbmx5LCBhbmQgcmFkaW8gZGV2aWNlcyBoYXZlCitub25lIG9mIHRoZXNlLjxmb290bm90ZT4KKwk8cGFyYT5BY3R1YWxseSAmdjRsMi1hdWRpbzsgb3VnaHQgdG8gaGF2ZSBhCis8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBsaWtlICZ2NGwyLWlucHV0Oywgbm90IG9ubHkKK21ha2luZyB0aGUgQVBJIG1vcmUgY29uc2lzdGVudCBidXQgYWxzbyBwZXJtaXR0aW5nIHJhZGlvIGRldmljZXMgd2l0aAorbXVsdGlwbGUgdHVuZXJzLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+IEEgY29ubmVjdG9yIG9uIGEgVFYgY2FyZCB0byBsb29wIGJhY2sgdGhlIHJlY2VpdmVkCithdWRpbyBzaWduYWwgdG8gYSBzb3VuZCBjYXJkIGlzIG5vdCBjb25zaWRlcmVkIGFuIGF1ZGlvIG91dHB1dC48L3BhcmE+CisKKyAgICA8cGFyYT5BdWRpbyBhbmQgdmlkZW8gaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBhc3NvY2lhdGVkLiBTZWxlY3RpbmcKK2EgdmlkZW8gc291cmNlIGFsc28gc2VsZWN0cyBhbiBhdWRpbyBzb3VyY2UuIFRoaXMgaXMgbW9zdCBldmlkZW50IHdoZW4KK3RoZSB2aWRlbyBhbmQgYXVkaW8gc291cmNlIGlzIGEgdHVuZXIuIEZ1cnRoZXIgYXVkaW8gY29ubmVjdG9ycyBjYW4KK2NvbWJpbmUgd2l0aCBtb3JlIHRoYW4gb25lIHZpZGVvIGlucHV0IG9yIG91dHB1dC4gQXNzdW1lZCB0d28KK2NvbXBvc2l0ZSB2aWRlbyBpbnB1dHMgYW5kIHR3byBhdWRpbyBpbnB1dHMgZXhpc3QsIHRoZXJlIG1heSBiZSB1cCB0bworZm91ciB2YWxpZCBjb21iaW5hdGlvbnMuIFRoZSByZWxhdGlvbiBvZiB2aWRlbyBhbmQgYXVkaW8gY29ubmVjdG9ycworaXMgZGVmaW5lZCBpbiB0aGUgPHN0cnVjdGZpZWxkPmF1ZGlvc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgdGhlCityZXNwZWN0aXZlICZ2NGwyLWlucHV0OyBvciAmdjRsMi1vdXRwdXQ7LCB3aGVyZSBlYWNoIGJpdCByZXByZXNlbnRzCit0aGUgaW5kZXggbnVtYmVyLCBzdGFydGluZyBhdCB6ZXJvLCBvZiBvbmUgYXVkaW8gaW5wdXQgb3Igb3V0cHV0LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGxlYXJuIGFib3V0IHRoZSBudW1iZXIgYW5kIGF0dHJpYnV0ZXMgb2YgdGhlCithdmFpbGFibGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFwcGxpY2F0aW9ucyBjYW4gZW51bWVyYXRlIHRoZW0gd2l0aCB0aGUKKyZWSURJT0MtRU5VTUFVRElPOyBhbmQgJlZJRElPQy1FTlVNQVVET1VUOyBpb2N0bCwgcmVzcGVjdGl2ZWx5LiBUaGUKKyZ2NGwyLWF1ZGlvOyByZXR1cm5lZCBieSB0aGUgPGNvbnN0YW50PlZJRElPQ19FTlVNQVVESU88L2NvbnN0YW50PiBpb2N0bAorYWxzbyBjb250YWlucyBzaWduYWwgc3RhdHVzIGluZm9ybWF0aW9uIGFwcGxpY2FibGUgd2hlbiB0aGUgY3VycmVudAorYXVkaW8gaW5wdXQgaXMgcXVlcmllZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgJlZJRElPQy1HLUFVRElPOyBhbmQgJlZJRElPQy1HLUFVRE9VVDsgaW9jdGwgcmVwb3J0Cit0aGUgY3VycmVudCBhdWRpbyBpbnB1dCBhbmQgb3V0cHV0LCByZXNwZWN0aXZlbHkuIE5vdGUgdGhhdCwgdW5saWtlCismVklESU9DLUctSU5QVVQ7IGFuZCAmVklESU9DLUctT1VUUFVUOyB0aGVzZSBpb2N0bHMgcmV0dXJuIGEgc3RydWN0dXJlCithcyA8Y29uc3RhbnQ+VklESU9DX0VOVU1BVURJTzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19FTlVNQVVET1VUPC9jb25zdGFudD4gZG8sIG5vdCBqdXN0IGFuIGluZGV4LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHNlbGVjdCBhbiBhdWRpbyBpbnB1dCBhbmQgY2hhbmdlIGl0cyBwcm9wZXJ0aWVzCithcHBsaWNhdGlvbnMgY2FsbCB0aGUgJlZJRElPQy1TLUFVRElPOyBpb2N0bC4gVG8gc2VsZWN0IGFuIGF1ZGlvCitvdXRwdXQgKHdoaWNoIHByZXNlbnRseSBoYXMgbm8gY2hhbmdlYWJsZSBwcm9wZXJ0aWVzKSBhcHBsaWNhdGlvbnMKK2NhbGwgdGhlICZWSURJT0MtUy1BVURPVVQ7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPkRyaXZlcnMgbXVzdCBpbXBsZW1lbnQgYWxsIGlucHV0IGlvY3RscyB3aGVuIHRoZSBkZXZpY2UKK2hhcyBvbmUgb3IgbW9yZSBpbnB1dHMsIGFsbCBvdXRwdXQgaW9jdGxzIHdoZW4gdGhlIGRldmljZSBoYXMgb25lCitvciBtb3JlIG91dHB1dHMuIFdoZW4gdGhlIGRldmljZSBoYXMgYW55IGF1ZGlvIGlucHV0cyBvciBvdXRwdXRzIHRoZQorZHJpdmVyIG11c3Qgc2V0IHRoZSA8Y29uc3RhbnQ+VjRMMl9DQVBfQVVESU88L2NvbnN0YW50PiBmbGFnIGluIHRoZQorJnY0bDItY2FwYWJpbGl0eTsgcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsLjwvcGFyYT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGF1ZGlvIGlucHV0PC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItYXVkaW87IGF1ZGlvOworCittZW1zZXQgKCZhbXA7YXVkaW8sIDAsIHNpemVvZiAoYXVkaW8pKTsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1HLUFVRElPOywgJmFtcDthdWRpbykpIHsKKwlwZXJyb3IgKCJWSURJT0NfR19BVURJTyIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK3ByaW50ZiAoIkN1cnJlbnQgaW5wdXQ6ICVzXG4iLCBhdWRpby5uYW1lKTsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+U3dpdGNoaW5nIHRvIHRoZSBmaXJzdCBhdWRpbyBpbnB1dDwvdGl0bGU+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyZ2NGwyLWF1ZGlvOyBhdWRpbzsKKworbWVtc2V0ICgmYW1wO2F1ZGlvLCAwLCBzaXplb2YgKGF1ZGlvKSk7IC8qIGNsZWFyIGF1ZGlvLm1vZGUsIGF1ZGlvLnJlc2VydmVkICovCisKK2F1ZGlvLmluZGV4ID0gMDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLUFVRElPOywgJmFtcDthdWRpbykpIHsKKwlwZXJyb3IgKCJWSURJT0NfU19BVURJTyIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJ0dW5lciI+CisgICAgPHRpdGxlPlR1bmVycyBhbmQgTW9kdWxhdG9yczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5UdW5lcnM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WaWRlbyBpbnB1dCBkZXZpY2VzIGNhbiBoYXZlIG9uZSBvciBtb3JlIHR1bmVycworZGVtb2R1bGF0aW5nIGEgUkYgc2lnbmFsLiBFYWNoIHR1bmVyIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmUgb3IgbW9yZQordmlkZW8gaW5wdXRzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBSRiBjb25uZWN0b3JzIG9uIHRoZSB0dW5lci4KK1RoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHRoZSByZXNwZWN0aXZlCismdjRsMi1pbnB1dDsgcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtRU5VTUlOUFVUOyBpb2N0bCBpcyBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0lOUFVUX1RZUEVfVFVORVI8L2NvbnN0YW50PiBhbmQgaXRzCis8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgaW5kZXggbnVtYmVyIG9mCit0aGUgdHVuZXIuPC9wYXJhPgorCisgICAgICA8cGFyYT5SYWRpbyBkZXZpY2VzIGhhdmUgZXhhY3RseSBvbmUgdHVuZXIgd2l0aCBpbmRleCB6ZXJvLCBubwordmlkZW8gaW5wdXRzLjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gcXVlcnkgYW5kIGNoYW5nZSB0dW5lciBwcm9wZXJ0aWVzIGFwcGxpY2F0aW9ucyB1c2UgdGhlCismVklESU9DLUctVFVORVI7IGFuZCAmVklESU9DLVMtVFVORVI7IGlvY3RsLCByZXNwZWN0aXZlbHkuIFRoZQorJnY0bDItdHVuZXI7IHJldHVybmVkIGJ5IDxjb25zdGFudD5WSURJT0NfR19UVU5FUjwvY29uc3RhbnQ+IGFsc28KK2NvbnRhaW5zIHNpZ25hbCBzdGF0dXMgaW5mb3JtYXRpb24gYXBwbGljYWJsZSB3aGVuIHRoZSB0dW5lciBvZiB0aGUKK2N1cnJlbnQgdmlkZW8gaW5wdXQsIG9yIGEgcmFkaW8gdHVuZXIgaXMgcXVlcmllZC4gTm90ZSB0aGF0Cis8Y29uc3RhbnQ+VklESU9DX1NfVFVORVI8L2NvbnN0YW50PiBkb2VzIG5vdCBzd2l0Y2ggdGhlIGN1cnJlbnQgdHVuZXIsCit3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYXQgYWxsLiBUaGUgdHVuZXIgaXMgc29sZWx5IGRldGVybWluZWQgYnkKK3RoZSBjdXJyZW50IHZpZGVvIGlucHV0LiBEcml2ZXJzIG11c3Qgc3VwcG9ydCBib3RoIGlvY3RscyBhbmQgc2V0IHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX1RVTkVSPC9jb25zdGFudD4gZmxhZyBpbiB0aGUgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bCB3aGVuIHRoZSBkZXZpY2UgaGFzIG9uZSBvcgorbW9yZSB0dW5lcnMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPk1vZHVsYXRvcnM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WaWRlbyBvdXRwdXQgZGV2aWNlcyBjYW4gaGF2ZSBvbmUgb3IgbW9yZSBtb2R1bGF0b3JzLCB1aCwKK21vZHVsYXRpbmcgYSB2aWRlbyBzaWduYWwgZm9yIHJhZGlhdGlvbiBvciBjb25uZWN0aW9uIHRvIHRoZSBhbnRlbm5hCitpbnB1dCBvZiBhIFRWIHNldCBvciB2aWRlbyByZWNvcmRlci4gRWFjaCBtb2R1bGF0b3IgaXMgYXNzb2NpYXRlZCB3aXRoCitvbmUgb3IgbW9yZSB2aWRlbyBvdXRwdXRzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBSRiBjb25uZWN0b3JzIG9uCit0aGUgbW9kdWxhdG9yLiBUaGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0aGUKK3Jlc3BlY3RpdmUgJnY0bDItb3V0cHV0OyByZXR1cm5lZCBieSB0aGUgJlZJRElPQy1FTlVNT1VUUFVUOyBpb2N0bCBpcworc2V0IHRvIDxjb25zdGFudD5WNEwyX09VVFBVVF9UWVBFX01PRFVMQVRPUjwvY29uc3RhbnQ+IGFuZCBpdHMKKzxzdHJ1Y3RmaWVsZD5tb2R1bGF0b3I8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgaW5kZXggbnVtYmVyCitvZiB0aGUgbW9kdWxhdG9yLiBUaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIHJhZGlvIG91dHB1dAorZGV2aWNlcy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRvIHF1ZXJ5IGFuZCBjaGFuZ2UgbW9kdWxhdG9yIHByb3BlcnRpZXMgYXBwbGljYXRpb25zIHVzZQordGhlICZWSURJT0MtRy1NT0RVTEFUT1I7IGFuZCAmVklESU9DLVMtTU9EVUxBVE9SOyBpb2N0bC4gTm90ZSB0aGF0Cis8Y29uc3RhbnQ+VklESU9DX1NfTU9EVUxBVE9SPC9jb25zdGFudD4gZG9lcyBub3Qgc3dpdGNoIHRoZSBjdXJyZW50Cittb2R1bGF0b3IsIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBhdCBhbGwuIFRoZSBtb2R1bGF0b3IgaXMgc29sZWx5CitkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvIG91dHB1dC4gRHJpdmVycyBtdXN0IHN1cHBvcnQgYm90aAoraW9jdGxzIGFuZCBzZXQgdGhlIDxjb25zdGFudD5WNEwyX0NBUF9NT0RVTEFUT1I8L2NvbnN0YW50PiBmbGFnIGluCit0aGUgJnY0bDItY2FwYWJpbGl0eTsgcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsIHdoZW4gdGhlCitkZXZpY2UgaGFzIG9uZSBvciBtb3JlIG1vZHVsYXRvcnMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlJhZGlvIEZyZXF1ZW5jeTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRvIGdldCBhbmQgc2V0IHRoZSB0dW5lciBvciBtb2R1bGF0b3IgcmFkaW8gZnJlcXVlbmN5CithcHBsaWNhdGlvbnMgdXNlIHRoZSAmVklESU9DLUctRlJFUVVFTkNZOyBhbmQgJlZJRElPQy1TLUZSRVFVRU5DWTsKK2lvY3RsIHdoaWNoIGJvdGggdGFrZSBhIHBvaW50ZXIgdG8gYSAmdjRsMi1mcmVxdWVuY3k7LiBUaGVzZSBpb2N0bHMKK2FyZSB1c2VkIGZvciBUViBhbmQgcmFkaW8gZGV2aWNlcyBhbGlrZS4gRHJpdmVycyBtdXN0IHN1cHBvcnQgYm90aAoraW9jdGxzIHdoZW4gdGhlIHR1bmVyIG9yIG1vZHVsYXRvciBpb2N0bHMgYXJlIHN1cHBvcnRlZCwgb3IKK3doZW4gdGhlIGRldmljZSBpcyBhIHJhZGlvIGRldmljZS48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InN0YW5kYXJkIj4KKyAgICA8dGl0bGU+VmlkZW8gU3RhbmRhcmRzPC90aXRsZT4KKworICAgIDxwYXJhPlZpZGVvIGRldmljZXMgdHlwaWNhbGx5IHN1cHBvcnQgb25lIG9yIG1vcmUgZGlmZmVyZW50IHZpZGVvCitzdGFuZGFyZHMgb3IgdmFyaWF0aW9ucyBvZiBzdGFuZGFyZHMuIEVhY2ggdmlkZW8gaW5wdXQgYW5kIG91dHB1dCBtYXkKK3N1cHBvcnQgYW5vdGhlciBzZXQgb2Ygc3RhbmRhcmRzLiBUaGlzIHNldCBpcyByZXBvcnRlZCBieSB0aGUKKzxzdHJ1Y3RmaWVsZD5zdGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1pbnB1dDsgYW5kCismdjRsMi1vdXRwdXQ7IHJldHVybmVkIGJ5IHRoZSAmVklESU9DLUVOVU1JTlBVVDsgYW5kCismVklESU9DLUVOVU1PVVRQVVQ7IGlvY3RsLCByZXNwZWN0aXZlbHkuPC9wYXJhPgorCisgICAgPHBhcmE+VjRMMiBkZWZpbmVzIG9uZSBiaXQgZm9yIGVhY2ggYW5hbG9nIHZpZGVvIHN0YW5kYXJkCitjdXJyZW50bHkgaW4gdXNlIHdvcmxkd2lkZSwgYW5kIHNldHMgYXNpZGUgYml0cyBmb3IgZHJpdmVyIGRlZmluZWQKK3N0YW5kYXJkcywgJmVnOyBoeWJyaWQgc3RhbmRhcmRzIHRvIHdhdGNoIE5UU0MgdmlkZW8gdGFwZXMgb24gUEFMIFRWcworYW5kIHZpY2UgdmVyc2EuIEFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZSBwcmVkZWZpbmVkIGJpdHMgdG8gc2VsZWN0IGEKK3BhcnRpY3VsYXIgc3RhbmRhcmQsIGFsdGhvdWdoIHByZXNlbnRpbmcgdGhlIHVzZXIgYSBtZW51IG9mIHN1cHBvcnRlZAorc3RhbmRhcmRzIGlzIHByZWZlcnJlZC4gVG8gZW51bWVyYXRlIGFuZCBxdWVyeSB0aGUgYXR0cmlidXRlcyBvZiB0aGUKK3N1cHBvcnRlZCBzdGFuZGFyZHMgYXBwbGljYXRpb25zIHVzZSB0aGUgJlZJRElPQy1FTlVNU1REOyBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5NYW55IG9mIHRoZSBkZWZpbmVkIHN0YW5kYXJkcyBhcmUgYWN0dWFsbHkganVzdCB2YXJpYXRpb25zCitvZiBhIGZldyBtYWpvciBzdGFuZGFyZHMuIFRoZSBoYXJkd2FyZSBtYXkgaW4gZmFjdCBub3QgZGlzdGluZ3Vpc2gKK2JldHdlZW4gdGhlbSwgb3IgZG8gc28gaW50ZXJuYWwgYW5kIHN3aXRjaCBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcmUKK2VudW1lcmF0ZWQgc3RhbmRhcmRzIGFsc28gY29udGFpbiBzZXRzIG9mIG9uZSBvciBtb3JlIHN0YW5kYXJkCitiaXRzLjwvcGFyYT4KKworICAgIDxwYXJhPkFzc3VtZSBhIGh5cG90aGV0aWMgdHVuZXIgY2FwYWJsZSBvZiBkZW1vZHVsYXRpbmcgQi9QQUwsCitHL1BBTCBhbmQgSS9QQUwgc2lnbmFscy4gVGhlIGZpcnN0IGVudW1lcmF0ZWQgc3RhbmRhcmQgaXMgYSBzZXQgb2YgQgorYW5kIEcvUEFMLCBzd2l0Y2hlZCBhdXRvbWF0aWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQgcmFkaW8KK2ZyZXF1ZW5jeSBpbiBVSEYgb3IgVkhGIGJhbmQuIEVudW1lcmF0aW9uIGdpdmVzIGEgIlBBTC1CL0ciIG9yICJQQUwtSSIKK2Nob2ljZS4gU2ltaWxhciBhIENvbXBvc2l0ZSBpbnB1dCBtYXkgY29sbGFwc2Ugc3RhbmRhcmRzLCBlbnVtZXJhdGluZworIlBBTC1CL0cvSC9JIiwgIk5UU0MtTSIgYW5kICJTRUNBTS1EL0siLjxmb290bm90ZT4KKwk8cGFyYT5Tb21lIHVzZXJzIGFyZSBhbHJlYWR5IGNvbmZ1c2VkIGJ5IHRlY2huaWNhbCB0ZXJtcyBQQUwsCitOVFNDIGFuZCBTRUNBTS4gVGhlcmUgaXMgbm8gcG9pbnQgYXNraW5nIHRoZW0gdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorQiwgRywgRCwgb3IgSyB3aGVuIHRoZSBzb2Z0d2FyZSBvciBoYXJkd2FyZSBjYW4gZG8gdGhhdAorYXV0b21hdGljYWxseS48L3BhcmE+CisgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBxdWVyeSBhbmQgc2VsZWN0IHRoZSBzdGFuZGFyZCB1c2VkIGJ5IHRoZSBjdXJyZW50IHZpZGVvCitpbnB1dCBvciBvdXRwdXQgYXBwbGljYXRpb25zIGNhbGwgdGhlICZWSURJT0MtRy1TVEQ7IGFuZAorJlZJRElPQy1TLVNURDsgaW9jdGwsIHJlc3BlY3RpdmVseS4gVGhlIDxlbXBoYXNpcz5yZWNlaXZlZDwvZW1waGFzaXM+CitzdGFuZGFyZCBjYW4gYmUgc2Vuc2VkIHdpdGggdGhlICZWSURJT0MtUVVFUllTVEQ7IGlvY3RsLiBOb3RlIHBhcmFtZXRlciBvZiBhbGwgdGhlc2UgaW9jdGxzIGlzIGEgcG9pbnRlciB0byBhICZ2NGwyLXN0ZC1pZDsgdHlwZSAoYSBzdGFuZGFyZCBzZXQpLCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYW4gaW5kZXggaW50byB0aGUgc3RhbmRhcmQgZW51bWVyYXRpb24uPGZvb3Rub3RlPgorCTxwYXJhPkFuIGFsdGVybmF0aXZlIHRvIHRoZSBjdXJyZW50IHNjaGVtZSBpcyB0byB1c2UgcG9pbnRlcnMKK3RvIGluZGljZXMgYXMgYXJndW1lbnRzIG9mIDxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19TVEQ8L2NvbnN0YW50PiwgdGhlICZ2NGwyLWlucHV0OyBhbmQKKyZ2NGwyLW91dHB1dDsgPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdvdWxkIGJlIGEgc2V0IG9mCitpbmRpY2VzIGxpa2UgPHN0cnVjdGZpZWxkPmF1ZGlvc2V0PC9zdHJ1Y3RmaWVsZD4uPC9wYXJhPgorCTxwYXJhPkluZGljZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQVBJCithbmQgaWRlbnRpZnkgdGhlIHN0YW5kYXJkIHVuYW1iaWd1b3VzbHkuIEluIHRoZSBwcmVzZW50IHNjaGVtZSBvZgordGhpbmdzIGFuIGVudW1lcmF0ZWQgc3RhbmRhcmQgaXMgbG9va2VkIHVwIGJ5ICZ2NGwyLXN0ZC1pZDsuIE5vdyB0aGUKK3N0YW5kYXJkcyBzdXBwb3J0ZWQgYnkgdGhlIGlucHV0cyBvZiBhIGRldmljZSBjYW4gb3ZlcmxhcC4gSnVzdAorYXNzdW1lIHRoZSB0dW5lciBhbmQgY29tcG9zaXRlIGlucHV0IGluIHRoZSBleGFtcGxlIGFib3ZlIGJvdGgKK2V4aXN0IG9uIGEgZGV2aWNlLiBBbiBlbnVtZXJhdGlvbiBvZiAiUEFMLUIvRyIsICJQQUwtSC9JIiBzdWdnZXN0cworYSBjaG9pY2Ugd2hpY2ggZG9lcyBub3QgZXhpc3QuIFdlIGNhbm5vdCBtZXJnZSBvciBvbWl0IHNldHMsIGJlY2F1c2UKK2FwcGxpY2F0aW9ucyB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCB0aGUgc3RhbmRhcmRzIHJlcG9ydGVkIGJ5Cis8Y29uc3RhbnQ+VklESU9DX0dfU1REPC9jb25zdGFudD4uIFRoYXQgbGVhdmVzIHNlcGFyYXRlIGVudW1lcmF0aW9ucworZm9yIGVhY2ggaW5wdXQuIEFsc28gc2VsZWN0aW5nIGEgc3RhbmRhcmQgYnkgJnY0bDItc3RkLWlkOyBjYW4gYmUKK2FtYmlndW91cy4gQWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlzIHRoYXQgYXBwbGljYXRpb25zIG5lZWQgbm90CitpZGVudGlmeSB0aGUgc3RhbmRhcmQgaW5kaXJlY3RseSwgYWZ0ZXIgZW51bWVyYXRpbmcuPC9wYXJhPjxwYXJhPlNvIGluCitzdW1tYXJ5LCB0aGUgbG9va3VwIGl0c2VsZiBpcyB1bmF2b2lkYWJsZS4gVGhlIGRpZmZlcmVuY2UgaXMgb25seQord2hldGhlciB0aGUgbG9va3VwIGlzIG5lY2Vzc2FyeSB0byBmaW5kIGFuIGVudW1lcmF0ZWQgc3RhbmRhcmQgb3IgdG8KK3N3aXRjaCB0byBhIHN0YW5kYXJkIGJ5ICZ2NGwyLXN0ZC1pZDsuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT4gRHJpdmVycyBtdXN0IGltcGxlbWVudCBhbGwgdmlkZW8gc3RhbmRhcmQgaW9jdGxzCit3aGVuIHRoZSBkZXZpY2UgaGFzIG9uZSBvciBtb3JlIHZpZGVvIGlucHV0cyBvciBvdXRwdXRzLjwvcGFyYT4KKworICAgIDxwYXJhPlNwZWNpYWwgcnVsZXMgYXBwbHkgdG8gVVNCIGNhbWVyYXMgd2hlcmUgdGhlIG5vdGlvbiBvZiB2aWRlbworc3RhbmRhcmRzIG1ha2VzIGxpdHRsZSBzZW5zZS4gTW9yZSBnZW5lcmFsbHkgYW55IGNhcHR1cmUgZGV2aWNlLAorb3V0cHV0IGRldmljZXMgYWNjb3JkaW5nbHksIHdoaWNoIGlzIDxpdGVtaXplZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+aW5jYXBhYmxlIG9mIGNhcHR1cmluZyBmaWVsZHMgb3IgZnJhbWVzIGF0IHRoZSBub21pbmFsCityYXRlIG9mIHRoZSB2aWRlbyBzdGFuZGFyZCwgb3I8L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT53aGVyZSA8bGluayBsaW5rZW5kPSJidWZmZXIiPnRpbWVzdGFtcHM8L2xpbms+IHJlZmVyCit0byB0aGUgaW5zdGFudCB0aGUgZmllbGQgb3IgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZSBkcml2ZXIsIG5vdCB0aGUKK2NhcHR1cmUgdGltZSwgb3I8L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT53aGVyZSA8bGluayBsaW5rZW5kPSJidWZmZXIiPnNlcXVlbmNlIG51bWJlcnM8L2xpbms+CityZWZlciB0byB0aGUgZnJhbWVzIHJlY2VpdmVkIGJ5IHRoZSBkcml2ZXIsIG5vdCB0aGUgY2FwdHVyZWQKK2ZyYW1lcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PiBIZXJlIHRoZSBkcml2ZXIgc2hhbGwgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWlucHV0OyBhbmQgJnY0bDItb3V0cHV0OwordG8gemVybywgdGhlIDxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfU19TVEQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfUVVFUllTVEQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfRU5VTVNURDwvY29uc3RhbnQ+IGlvY3RscyBzaGFsbCByZXR1cm4gdGhlCismRUlOVkFMOy48Zm9vdG5vdGU+CisJPHBhcmE+U2VlIDx4cmVmIGxpbmtlbmQ9ImJ1ZmZlciIgLz4gZm9yIGEgcmF0aW9uYWxlLiBQcm9iYWJseQorZXZlbiBVU0IgY2FtZXJhcyBmb2xsb3cgc29tZSB3ZWxsIGtub3duIHZpZGVvIHN0YW5kYXJkLiBJdCBtaWdodCBoYXZlCitiZWVuIGJldHRlciB0byBleHBsaWNpdGx5IGluZGljYXRlIGVsc2V3aGVyZSBpZiBhIGRldmljZSBjYW5ub3QgbGl2ZQordXAgdG8gbm9ybWFsIGV4cGVjdGF0aW9ucywgaW5zdGVhZCBvZiB0aGlzIGV4Y2VwdGlvbi48L3BhcmE+CisJICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+SW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQ8L3RpdGxlPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CismdjRsMi1zdGQtaWQ7IHN0ZF9pZDsKKyZ2NGwyLXN0YW5kYXJkOyBzdGFuZGFyZDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1HLVNURDssICZhbXA7c3RkX2lkKSkgeworCS8qIE5vdGUgd2hlbiBWSURJT0NfRU5VTVNURCBhbHdheXMgcmV0dXJucyBFSU5WQUwgdGhpcworCSAgIGlzIG5vIHZpZGVvIGRldmljZSBvciBpdCBmYWxscyB1bmRlciB0aGUgVVNCIGV4Y2VwdGlvbiwKKwkgICBhbmQgVklESU9DX0dfU1REIHJldHVybmluZyBFSU5WQUwgaXMgbm8gZXJyb3IuICovCisKKwlwZXJyb3IgKCJWSURJT0NfR19TVEQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCittZW1zZXQgKCZhbXA7c3RhbmRhcmQsIDAsIHNpemVvZiAoc3RhbmRhcmQpKTsKK3N0YW5kYXJkLmluZGV4ID0gMDsKKword2hpbGUgKDAgPT0gaW9jdGwgKGZkLCAmVklESU9DLUVOVU1TVEQ7LCAmYW1wO3N0YW5kYXJkKSkgeworCWlmIChzdGFuZGFyZC5pZCAmYW1wOyBzdGRfaWQpIHsKKwkgICAgICAgcHJpbnRmICgiQ3VycmVudCB2aWRlbyBzdGFuZGFyZDogJXNcbiIsIHN0YW5kYXJkLm5hbWUpOworCSAgICAgICBleGl0IChFWElUX1NVQ0NFU1MpOworCX0KKworCXN0YW5kYXJkLmluZGV4Kys7Cit9CisKKy8qIEVJTlZBTCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgZW51bWVyYXRpb24sIHdoaWNoIGNhbm5vdCBiZQorICAgZW1wdHkgdW5sZXNzIHRoaXMgZGV2aWNlIGZhbGxzIHVuZGVyIHRoZSBVU0IgZXhjZXB0aW9uLiAqLworCitpZiAoZXJybm8gPT0gRUlOVkFMIHx8IHN0YW5kYXJkLmluZGV4ID09IDApIHsKKwlwZXJyb3IgKCJWSURJT0NfRU5VTVNURCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkxpc3RpbmcgdGhlIHZpZGVvIHN0YW5kYXJkcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKK2lucHV0PC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItaW5wdXQ7IGlucHV0OworJnY0bDItc3RhbmRhcmQ7IHN0YW5kYXJkOworCittZW1zZXQgKCZhbXA7aW5wdXQsIDAsIHNpemVvZiAoaW5wdXQpKTsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1HLUlOUFVUOywgJmFtcDtpbnB1dC5pbmRleCkpIHsKKwlwZXJyb3IgKCJWSURJT0NfR19JTlBVVCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK2lmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtRU5VTUlOUFVUOywgJmFtcDtpbnB1dCkpIHsKKwlwZXJyb3IgKCJWSURJT0NfRU5VTV9JTlBVVCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK3ByaW50ZiAoIkN1cnJlbnQgaW5wdXQgJXMgc3VwcG9ydHM6XG4iLCBpbnB1dC5uYW1lKTsKKworbWVtc2V0ICgmYW1wO3N0YW5kYXJkLCAwLCBzaXplb2YgKHN0YW5kYXJkKSk7CitzdGFuZGFyZC5pbmRleCA9IDA7CisKK3doaWxlICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1FTlVNU1REOywgJmFtcDtzdGFuZGFyZCkpIHsKKwlpZiAoc3RhbmRhcmQuaWQgJmFtcDsgaW5wdXQuc3RkKQorCQlwcmludGYgKCIlc1xuIiwgc3RhbmRhcmQubmFtZSk7CisKKwlzdGFuZGFyZC5pbmRleCsrOworfQorCisvKiBFSU5WQUwgaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIGVudW1lcmF0aW9uLCB3aGljaCBjYW5ub3QgYmUKKyAgIGVtcHR5IHVubGVzcyB0aGlzIGRldmljZSBmYWxscyB1bmRlciB0aGUgVVNCIGV4Y2VwdGlvbi4gKi8KKworaWYgKGVycm5vICE9IEVJTlZBTCB8fCBzdGFuZGFyZC5pbmRleCA9PSAwKSB7CisJcGVycm9yICgiVklESU9DX0VOVU1TVEQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDx0aXRsZT5TZWxlY3RpbmcgYSBuZXcgdmlkZW8gc3RhbmRhcmQ8L3RpdGxlPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CismdjRsMi1pbnB1dDsgaW5wdXQ7CismdjRsMi1zdGQtaWQ7IHN0ZF9pZDsKKworbWVtc2V0ICgmYW1wO2lucHV0LCAwLCBzaXplb2YgKGlucHV0KSk7CisKK2lmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtRy1JTlBVVDssICZhbXA7aW5wdXQuaW5kZXgpKSB7CisJcGVycm9yICgiVklESU9DX0dfSU5QVVQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUVOVU1JTlBVVDssICZhbXA7aW5wdXQpKSB7CisJcGVycm9yICgiVklESU9DX0VOVU1fSU5QVVQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitpZiAoMCA9PSAoaW5wdXQuc3RkICZhbXA7IFY0TDJfU1REX1BBTF9CRykpIHsKKwlmcHJpbnRmIChzdGRlcnIsICJPb3BzLiBCL0cgUEFMIGlzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCisvKiBOb3RlIHRoaXMgaXMgYWxzbyBzdXBwb3NlZCB0byB3b3JrIHdoZW4gb25seSBCCisgICA8ZW1waGFzaXM+b3I8L2VtcGhhc2lzPiBHL1BBTCBpcyBzdXBwb3J0ZWQuICovCisKK3N0ZF9pZCA9IFY0TDJfU1REX1BBTF9CRzsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLVNURDssICZhbXA7c3RkX2lkKSkgeworCXBlcnJvciAoIlZJRElPQ19TX1NURCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKyAgPC9zZWN0aW9uPgorCisgICZzdWItY29udHJvbHM7CisKKyAgPHNlY3Rpb24gaWQ9ImZvcm1hdCI+CisgICAgPHRpdGxlPkRhdGEgRm9ybWF0czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5EYXRhIEZvcm1hdCBOZWdvdGlhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkRpZmZlcmVudCBkZXZpY2VzIGV4Y2hhbmdlIGRpZmZlcmVudCBraW5kcyBvZiBkYXRhIHdpdGgKK2FwcGxpY2F0aW9ucywgZm9yIGV4YW1wbGUgdmlkZW8gaW1hZ2VzLCByYXcgb3Igc2xpY2VkIFZCSSBkYXRhLCBSRFMKK2RhdGFncmFtcy4gRXZlbiB3aXRoaW4gb25lIGtpbmQgbWFueSBkaWZmZXJlbnQgZm9ybWF0cyBhcmUgcG9zc2libGUsCitpbiBwYXJ0aWN1bGFyIGFuIGFidW5kYW5jZSBvZiBpbWFnZSBmb3JtYXRzLiBBbHRob3VnaCBkcml2ZXJzIG11c3QKK3Byb3ZpZGUgYSBkZWZhdWx0IGFuZCB0aGUgc2VsZWN0aW9uIHBlcnNpc3RzIGFjcm9zcyBjbG9zaW5nIGFuZAorcmVvcGVuaW5nIGEgZGV2aWNlLCBhcHBsaWNhdGlvbnMgc2hvdWxkIGFsd2F5cyBuZWdvdGlhdGUgYSBkYXRhIGZvcm1hdAorYmVmb3JlIGVuZ2FnaW5nIGluIGRhdGEgZXhjaGFuZ2UuIE5lZ290aWF0aW9uIG1lYW5zIHRoZSBhcHBsaWNhdGlvbgorYXNrcyBmb3IgYSBwYXJ0aWN1bGFyIGZvcm1hdCBhbmQgdGhlIGRyaXZlciBzZWxlY3RzIGFuZCByZXBvcnRzIHRoZQorYmVzdCB0aGUgaGFyZHdhcmUgY2FuIGRvIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuIE9mIGNvdXJzZQorYXBwbGljYXRpb25zIGNhbiBhbHNvIGp1c3QgcXVlcnkgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLjwvcGFyYT4KKworICAgICAgPHBhcmE+QSBzaW5nbGUgbWVjaGFuaXNtIGV4aXN0cyB0byBuZWdvdGlhdGUgYWxsIGRhdGEgZm9ybWF0cwordXNpbmcgdGhlIGFnZ3JlZ2F0ZSAmdjRsMi1mb3JtYXQ7IGFuZCB0aGUgJlZJRElPQy1HLUZNVDsgYW5kCismVklESU9DLVMtRk1UOyBpb2N0bHMuIEFkZGl0aW9uYWxseSB0aGUgJlZJRElPQy1UUlktRk1UOyBpb2N0bCBjYW4gYmUKK3VzZWQgdG8gZXhhbWluZSB3aGF0IHRoZSBoYXJkd2FyZSA8ZW1waGFzaXM+Y291bGQ8L2VtcGhhc2lzPiBkbywKK3dpdGhvdXQgYWN0dWFsbHkgc2VsZWN0aW5nIGEgbmV3IGRhdGEgZm9ybWF0LiBUaGUgZGF0YSBmb3JtYXRzCitzdXBwb3J0ZWQgYnkgdGhlIFY0TDIgQVBJIGFyZSBjb3ZlcmVkIGluIHRoZSByZXNwZWN0aXZlIGRldmljZSBzZWN0aW9uCitpbiA8eHJlZiBsaW5rZW5kPSJkZXZpY2VzIiAvPi4gRm9yIGEgY2xvc2VyIGxvb2sgYXQgaW1hZ2UgZm9ybWF0cyBzZWUKKzx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIGlzIGEgbWFqb3IKK3R1cm5pbmctcG9pbnQgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBQcmlvciB0byB0aGlzIHBvaW50CittdWx0aXBsZSBwYW5lbCBhcHBsaWNhdGlvbnMgY2FuIGFjY2VzcyB0aGUgc2FtZSBkZXZpY2UgY29uY3VycmVudGx5IHRvCitzZWxlY3QgdGhlIGN1cnJlbnQgaW5wdXQsIGNoYW5nZSBjb250cm9scyBvciBtb2RpZnkgb3RoZXIgcHJvcGVydGllcy4KK1RoZSBmaXJzdCA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gYXNzaWducyBhIGxvZ2ljYWwgc3RyZWFtCisodmlkZW8gZGF0YSwgVkJJIGRhdGEgZXRjLikgZXhjbHVzaXZlbHkgdG8gb25lIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+CisKKyAgICAgIDxwYXJhPkV4Y2x1c2l2ZSBtZWFucyBubyBvdGhlciBhcHBsaWNhdGlvbiwgbW9yZSBwcmVjaXNlbHkgbm8KK290aGVyIGZpbGUgZGVzY3JpcHRvciwgY2FuIGdyYWIgdGhpcyBzdHJlYW0gb3IgY2hhbmdlIGRldmljZQorcHJvcGVydGllcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbmVnb3RpYXRlZCBwYXJhbWV0ZXJzLiBBIHZpZGVvCitzdGFuZGFyZCBjaGFuZ2UgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIG5ldyBzdGFuZGFyZCB1c2VzIGEgZGlmZmVyZW50CitudW1iZXIgb2Ygc2NhbiBsaW5lcywgY2FuIGludmFsaWRhdGUgdGhlIHNlbGVjdGVkIGltYWdlIGZvcm1hdC4KK1RoZXJlZm9yZSBvbmx5IHRoZSBmaWxlIGRlc2NyaXB0b3Igb3duaW5nIHRoZSBzdHJlYW0gY2FuIG1ha2UKK2ludmFsaWRhdGluZyBjaGFuZ2VzLiBBY2NvcmRpbmdseSBtdWx0aXBsZSBmaWxlIGRlc2NyaXB0b3JzIHdoaWNoCitncmFiYmVkIGRpZmZlcmVudCBsb2dpY2FsIHN0cmVhbXMgcHJldmVudCBlYWNoIG90aGVyIGZyb20gaW50ZXJmZXJpbmcKK3dpdGggdGhlaXIgc2V0dGluZ3MuIFdoZW4gZm9yIGV4YW1wbGUgdmlkZW8gb3ZlcmxheSBpcyBhYm91dCB0byBzdGFydAorb3IgYWxyZWFkeSBpbiBwcm9ncmVzcywgc2ltdWx0YW5lb3VzIHZpZGVvIGNhcHR1cmluZyBtYXkgYmUgcmVzdHJpY3RlZAordG8gdGhlIHNhbWUgY3JvcHBpbmcgYW5kIGltYWdlIHNpemUuPC9wYXJhPgorCisgICAgICA8cGFyYT5XaGVuIGFwcGxpY2F0aW9ucyBvbWl0IHRoZQorPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIGl0cyBsb2NraW5nIHNpZGUgZWZmZWN0cyBhcmUKK2ltcGxpZWQgYnkgdGhlIG5leHQgc3RlcCwgdGhlIHNlbGVjdGlvbiBvZiBhbiBJL08gbWV0aG9kIHdpdGggdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsIG9yIGltcGxpY2l0IHdpdGggdGhlIGZpcnN0ICZmdW5jLXJlYWQ7IG9yCismZnVuYy13cml0ZTsgY2FsbC48L3BhcmE+CisKKyAgICAgIDxwYXJhPkdlbmVyYWxseSBvbmx5IG9uZSBsb2dpY2FsIHN0cmVhbSBjYW4gYmUgYXNzaWduZWQgdG8gYQorZmlsZSBkZXNjcmlwdG9yLCB0aGUgZXhjZXB0aW9uIGJlaW5nIGRyaXZlcnMgcGVybWl0dGluZyBzaW11bHRhbmVvdXMKK3ZpZGVvIGNhcHR1cmluZyBhbmQgb3ZlcmxheSB1c2luZyB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggVjRMIGFuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIuIFN3aXRjaGluZyB0aGUKK2xvZ2ljYWwgc3RyZWFtIG9yIHJldHVybmluZyBpbnRvICJwYW5lbCBtb2RlIiBpcyBwb3NzaWJsZSBieSBjbG9zaW5nCithbmQgcmVvcGVuaW5nIHRoZSBkZXZpY2UuIERyaXZlcnMgPGVtcGhhc2lzPm1heTwvZW1waGFzaXM+IHN1cHBvcnQgYQorc3dpdGNoIHVzaW5nIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50Pi48L3BhcmE+CisKKyAgICAgIDxwYXJhPkFsbCBkcml2ZXJzIGV4Y2hhbmdpbmcgZGF0YSB3aXRoCithcHBsaWNhdGlvbnMgbXVzdCBzdXBwb3J0IHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwuIEltcGxlbWVudGF0aW9uIG9mIHRoZQorPGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD4gaXMgaGlnaGx5IHJlY29tbWVuZGVkIGJ1dAorb3B0aW9uYWwuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkltYWdlIEZvcm1hdCBFbnVtZXJhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkFwYXJ0IG9mIHRoZSBnZW5lcmljIGZvcm1hdCBuZWdvdGlhdGlvbiBmdW5jdGlvbnMKK2Egc3BlY2lhbCBpb2N0bCB0byBlbnVtZXJhdGUgYWxsIGltYWdlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHZpZGVvCitjYXB0dXJlLCBvdmVybGF5IG9yIG91dHB1dCBkZXZpY2VzIGlzIGF2YWlsYWJsZS48Zm9vdG5vdGU+CisJICA8cGFyYT5FbnVtZXJhdGluZyBmb3JtYXRzIGFuIGFwcGxpY2F0aW9uIGhhcyBubyBhLXByaW9yaQora25vd2xlZGdlIG9mIChvdGhlcndpc2UgaXQgY291bGQgZXhwbGljaXRseSBhc2sgZm9yIHRoZW0gYW5kIG5lZWQgbm90CitlbnVtZXJhdGUpIHNlZW1zIHVzZWxlc3MsIGJ1dCB0aGVyZSBhcmUgYXBwbGljYXRpb25zIHNlcnZpbmcgYXMgcHJveHkKK2JldHdlZW4gZHJpdmVycyBhbmQgdGhlIGFjdHVhbCB2aWRlbyBhcHBsaWNhdGlvbnMgZm9yIHdoaWNoIHRoaXMgaXMKK3VzZWZ1bC48L3BhcmE+CisJPC9mb290bm90ZT48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSAmVklESU9DLUVOVU0tRk1UOyBpb2N0bCBtdXN0IGJlIHN1cHBvcnRlZAorYnkgYWxsIGRyaXZlcnMgZXhjaGFuZ2luZyBpbWFnZSBkYXRhIHdpdGggYXBwbGljYXRpb25zLjwvcGFyYT4KKworICAgICAgPGltcG9ydGFudD4KKwk8cGFyYT5Ecml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gY29udmVydCBpbWFnZSBmb3JtYXRzIGluCitrZXJuZWwgc3BhY2UuIFRoZXkgbXVzdCBlbnVtZXJhdGUgb25seSBmb3JtYXRzIGRpcmVjdGx5IHN1cHBvcnRlZCBieQordGhlIGhhcmR3YXJlLiBJZiBuZWNlc3NhcnkgZHJpdmVyIHdyaXRlcnMgc2hvdWxkIHB1Ymxpc2ggYW4gZXhhbXBsZQorY29udmVyc2lvbiByb3V0aW5lIG9yIGxpYnJhcnkgZm9yIGludGVncmF0aW9uIGludG8gYXBwbGljYXRpb25zLjwvcGFyYT4KKyAgICAgIDwvaW1wb3J0YW50PgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJjcm9wIj4KKyAgICA8dGl0bGU+SW1hZ2UgQ3JvcHBpbmcsIEluc2VydGlvbiBhbmQgU2NhbGluZzwvdGl0bGU+CisKKyAgICA8cGFyYT5Tb21lIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyBjYW4gc2FtcGxlIGEgc3Vic2VjdGlvbiBvZiB0aGUKK3BpY3R1cmUgYW5kIHNocmluayBvciBlbmxhcmdlIGl0IHRvIGFuIGltYWdlIG9mIGFyYml0cmFyeSBzaXplLiBXZQorY2FsbCB0aGVzZSBhYmlsaXRpZXMgY3JvcHBpbmcgYW5kIHNjYWxpbmcuIFNvbWUgdmlkZW8gb3V0cHV0IGRldmljZXMKK2NhbiBzY2FsZSBhbiBpbWFnZSB1cCBvciBkb3duIGFuZCBpbnNlcnQgaXQgYXQgYW4gYXJiaXRyYXJ5IHNjYW4gbGluZQorYW5kIGhvcml6b250YWwgb2Zmc2V0IGludG8gYSB2aWRlbyBzaWduYWwuPC9wYXJhPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBBUEkgdG8gc2VsZWN0IGFuIGFyZWEgaW4KK3RoZSB2aWRlbyBzaWduYWwsIHF1ZXJ5IHRoZSBkZWZhdWx0IGFyZWEgYW5kIHRoZSBoYXJkd2FyZSBsaW1pdHMuCis8ZW1waGFzaXM+RGVzcGl0ZSB0aGVpciBuYW1lLCB0aGUgJlZJRElPQy1DUk9QQ0FQOywgJlZJRElPQy1HLUNST1A7CithbmQgJlZJRElPQy1TLUNST1A7IGlvY3RscyBhcHBseSB0byBpbnB1dCBhcyB3ZWxsIGFzIG91dHB1dAorZGV2aWNlcy48L2VtcGhhc2lzPjwvcGFyYT4KKworICAgIDxwYXJhPlNjYWxpbmcgcmVxdWlyZXMgYSBzb3VyY2UgYW5kIGEgdGFyZ2V0LiBPbiBhIHZpZGVvIGNhcHR1cmUKK29yIG92ZXJsYXkgZGV2aWNlIHRoZSBzb3VyY2UgaXMgdGhlIHZpZGVvIHNpZ25hbCwgYW5kIHRoZSBjcm9wcGluZworaW9jdGxzIGRldGVybWluZSB0aGUgYXJlYSBhY3R1YWxseSBzYW1wbGVkLiBUaGUgdGFyZ2V0IGFyZSBpbWFnZXMKK3JlYWQgYnkgdGhlIGFwcGxpY2F0aW9uIG9yIG92ZXJsYWlkIG9udG8gdGhlIGdyYXBoaWNzIHNjcmVlbi4gVGhlaXIKK3NpemUgKGFuZCBwb3NpdGlvbiBmb3IgYW4gb3ZlcmxheSkgaXMgbmVnb3RpYXRlZCB3aXRoIHRoZQorJlZJRElPQy1HLUZNVDsgYW5kICZWSURJT0MtUy1GTVQ7IGlvY3Rscy48L3BhcmE+CisKKyAgICA8cGFyYT5PbiBhIHZpZGVvIG91dHB1dCBkZXZpY2UgdGhlIHNvdXJjZSBhcmUgdGhlIGltYWdlcyBwYXNzZWQgaW4KK2J5IHRoZSBhcHBsaWNhdGlvbiwgYW5kIHRoZWlyIHNpemUgaXMgYWdhaW4gbmVnb3RpYXRlZCB3aXRoIHRoZQorPGNvbnN0YW50PlZJRElPQ19HL1NfRk1UPC9jb25zdGFudD4gaW9jdGxzLCBvciBtYXkgYmUgZW5jb2RlZCBpbiBhCitjb21wcmVzc2VkIHZpZGVvIHN0cmVhbS4gVGhlIHRhcmdldCBpcyB0aGUgdmlkZW8gc2lnbmFsLCBhbmQgdGhlCitjcm9wcGluZyBpb2N0bHMgZGV0ZXJtaW5lIHRoZSBhcmVhIHdoZXJlIHRoZSBpbWFnZXMgYXJlCitpbnNlcnRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5Tb3VyY2UgYW5kIHRhcmdldCByZWN0YW5nbGVzIGFyZSBkZWZpbmVkIGV2ZW4gaWYgdGhlIGRldmljZQorZG9lcyBub3Qgc3VwcG9ydCBzY2FsaW5nIG9yIHRoZSA8Y29uc3RhbnQ+VklESU9DX0cvU19DUk9QPC9jb25zdGFudD4KK2lvY3Rscy4gVGhlaXIgc2l6ZSAoYW5kIHBvc2l0aW9uIHdoZXJlIGFwcGxpY2FibGUpIHdpbGwgYmUgZml4ZWQgaW4KK3RoaXMgY2FzZS4gPGVtcGhhc2lzPkFsbCBjYXB0dXJlIGFuZCBvdXRwdXQgZGV2aWNlIG11c3Qgc3VwcG9ydCB0aGUKKzxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+IGlvY3RsIHN1Y2ggdGhhdCBhcHBsaWNhdGlvbnMgY2FuCitkZXRlcm1pbmUgaWYgc2NhbGluZyB0YWtlcyBwbGFjZS48L2VtcGhhc2lzPjwvcGFyYT4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkNyb3BwaW5nIFN0cnVjdHVyZXM8L3RpdGxlPgorCisgICAgICA8ZmlndXJlIGlkPSJjcm9wLXNjYWxlIj4KKwk8dGl0bGU+SW1hZ2UgQ3JvcHBpbmcsIEluc2VydGlvbiBhbmQgU2NhbGluZzwvdGl0bGU+CisJPG1lZGlhb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImNyb3AucGRmIiBmb3JtYXQ9IlBTIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJjcm9wLmdpZiIgZm9ybWF0PSJHSUYiIC8+CisJICA8L2ltYWdlb2JqZWN0PgorCSAgPHRleHRvYmplY3Q+CisJICAgIDxwaHJhc2U+VGhlIGNyb3BwaW5nLCBpbnNlcnRpb24gYW5kIHNjYWxpbmcgcHJvY2VzczwvcGhyYXNlPgorCSAgPC90ZXh0b2JqZWN0PgorCTwvbWVkaWFvYmplY3Q+CisgICAgICA8L2ZpZ3VyZT4KKworICAgICAgPHBhcmE+Rm9yIGNhcHR1cmUgZGV2aWNlcyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRvcCBsZWZ0Citjb3JuZXIsIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFyZWEgd2hpY2ggY2FuIGJlIHNhbXBsZWQgaXMgZ2l2ZW4gYnkKK3RoZSA8c3RydWN0ZmllbGQ+Ym91bmRzPC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIG9mIHRoZQorJnY0bDItY3JvcGNhcDsgcmV0dXJuZWQgYnkgdGhlIDxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+Citpb2N0bC4gVG8gc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgdGhpcyBzcGVjaWZpY2F0aW9uIGRvZXMgbm90CitkZWZpbmUgYW4gb3JpZ2luIG9yIHVuaXRzLiBIb3dldmVyIGJ5IGNvbnZlbnRpb24gZHJpdmVycyBzaG91bGQKK2hvcml6b250YWxseSBjb3VudCB1bnNjYWxlZCBzYW1wbGVzIHJlbGF0aXZlIHRvIDBIICh0aGUgbGVhZGluZyBlZGdlCitvZiB0aGUgaG9yaXpvbnRhbCBzeW5jIHB1bHNlLCBzZWUgPHhyZWYgbGlua2VuZD0idmJpLWhzeW5jIiAvPikuCitWZXJ0aWNhbGx5IElUVS1SIGxpbmUKK251bWJlcnMgb2YgdGhlIGZpcnN0IGZpZWxkICg8eHJlZiBsaW5rZW5kPSJ2YmktNTI1IiAvPiwgPHhyZWYKK2xpbmtlbmQ9InZiaS02MjUiIC8+KSwgbXVsdGlwbGllZCBieSB0d28gaWYgdGhlIGRyaXZlciBjYW4gY2FwdHVyZSBib3RoCitmaWVsZHMuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgdG9wIGxlZnQgY29ybmVyLCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzb3VyY2UKK3JlY3RhbmdsZSwgdGhhdCBpcyB0aGUgYXJlYSBhY3R1YWxseSBzYW1wbGVkLCBpcyBnaXZlbiBieSAmdjRsMi1jcm9wOwordXNpbmcgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0gYXMgJnY0bDItY3JvcGNhcDsuIEFwcGxpY2F0aW9ucyBjYW4KK3VzZSB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0NST1A8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19DUk9QPC9jb25zdGFudD4gaW9jdGxzIHRvIGdldCBhbmQgc2V0IHRoaXMKK3JlY3RhbmdsZS4gSXQgbXVzdCBsaWUgY29tcGxldGVseSB3aXRoaW4gdGhlIGNhcHR1cmUgYm91bmRhcmllcyBhbmQKK3RoZSBkcml2ZXIgbWF5IGZ1cnRoZXIgYWRqdXN0IHRoZSByZXF1ZXN0ZWQgc2l6ZSBhbmQvb3IgcG9zaXRpb24KK2FjY29yZGluZyB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucy48L3BhcmE+CisKKyAgICAgIDxwYXJhPkVhY2ggY2FwdHVyZSBkZXZpY2UgaGFzIGEgZGVmYXVsdCBzb3VyY2UgcmVjdGFuZ2xlLCBnaXZlbgorYnkgdGhlIDxzdHJ1Y3RmaWVsZD5kZWZyZWN0PC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIG9mCismdjRsMi1jcm9wY2FwOy4gVGhlIGNlbnRlciBvZiB0aGlzIHJlY3RhbmdsZSBzaGFsbCBhbGlnbiB3aXRoIHRoZQorY2VudGVyIG9mIHRoZSBhY3RpdmUgcGljdHVyZSBhcmVhIG9mIHRoZSB2aWRlbyBzaWduYWwsIGFuZCBjb3ZlciB3aGF0Cit0aGUgZHJpdmVyIHdyaXRlciBjb25zaWRlcnMgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIERyaXZlcnMgc2hhbGwgcmVzZXQKK3RoZSBzb3VyY2UgcmVjdGFuZ2xlIHRvIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGRyaXZlciBpcyBmaXJzdCBsb2FkZWQsCitidXQgbm90IGxhdGVyLjwvcGFyYT4KKworICAgICAgPHBhcmE+Rm9yIG91dHB1dCBkZXZpY2VzIHRoZXNlIHN0cnVjdHVyZXMgYW5kIGlvY3RscyBhcmUgdXNlZAorYWNjb3JkaW5nbHksIGRlZmluaW5nIHRoZSA8ZW1waGFzaXM+dGFyZ2V0PC9lbXBoYXNpcz4gcmVjdGFuZ2xlIHdoZXJlCit0aGUgaW1hZ2VzIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgdmlkZW8gc2lnbmFsLjwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlNjYWxpbmcgQWRqdXN0bWVudHM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WaWRlbyBoYXJkd2FyZSBjYW4gaGF2ZSB2YXJpb3VzIGNyb3BwaW5nLCBpbnNlcnRpb24gYW5kCitzY2FsaW5nIGxpbWl0YXRpb25zLiBJdCBtYXkgb25seSBzY2FsZSB1cCBvciBkb3duLCBzdXBwb3J0IG9ubHkKK2Rpc2NyZXRlIHNjYWxpbmcgZmFjdG9ycywgb3IgaGF2ZSBkaWZmZXJlbnQgc2NhbGluZyBhYmlsaXRpZXMgaW4KK2hvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpcmVjdGlvbi4gQWxzbyBpdCBtYXkgbm90IHN1cHBvcnQgc2NhbGluZyBhdAorYWxsLiBBdCB0aGUgc2FtZSB0aW1lIHRoZSAmdjRsMi1jcm9wOyByZWN0YW5nbGUgbWF5IGhhdmUgdG8gYmUKK2FsaWduZWQsIGFuZCBib3RoIHRoZSBzb3VyY2UgYW5kIHRhcmdldCByZWN0YW5nbGVzIG1heSBoYXZlIGFyYml0cmFyeQordXBwZXIgYW5kIGxvd2VyIHNpemUgbGltaXRzLiBJbiBwYXJ0aWN1bGFyIHRoZSBtYXhpbXVtCis8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPmhlaWdodDwvc3RydWN0ZmllbGQ+CitpbiAmdjRsMi1jcm9wOyBtYXkgYmUgc21hbGxlciB0aGFuIHRoZQorJnY0bDItY3JvcGNhcDsuPHN0cnVjdGZpZWxkPmJvdW5kczwvc3RydWN0ZmllbGQ+IGFyZWEuIFRoZXJlZm9yZSwgYXMKK3VzdWFsLCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byBhZGp1c3QgdGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXJzIGFuZAorcmV0dXJuIHRoZSBhY3R1YWwgdmFsdWVzIHNlbGVjdGVkLjwvcGFyYT4KKworICAgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiBjaGFuZ2UgdGhlIHNvdXJjZSBvciB0aGUgdGFyZ2V0IHJlY3RhbmdsZQorZmlyc3QsIGFzIHRoZXkgbWF5IHByZWZlciBhIHBhcnRpY3VsYXIgaW1hZ2Ugc2l6ZSBvciBhIGNlcnRhaW4gYXJlYSBpbgordGhlIHZpZGVvIHNpZ25hbC4gSWYgdGhlIGRyaXZlciBoYXMgdG8gYWRqdXN0IGJvdGggdG8gc2F0aXNmeSBoYXJkd2FyZQorbGltaXRhdGlvbnMsIHRoZSBsYXN0IHJlcXVlc3RlZCByZWN0YW5nbGUgc2hhbGwgdGFrZSBwcmlvcml0eSwgYW5kIHRoZQorZHJpdmVyIHNob3VsZCBwcmVmZXJhYmx5IGFkanVzdCB0aGUgb3Bwb3NpdGUgb25lLiBUaGUgJlZJRElPQy1UUlktRk1UOworaW9jdGwgaG93ZXZlciBzaGFsbCBub3QgY2hhbmdlIHRoZSBkcml2ZXIgc3RhdGUgYW5kIHRoZXJlZm9yZSBvbmx5CithZGp1c3QgdGhlIHJlcXVlc3RlZCByZWN0YW5nbGUuPC9wYXJhPgorCisgICAgICA8cGFyYT5TdXBwb3NlIHNjYWxpbmcgb24gYSB2aWRlbyBjYXB0dXJlIGRldmljZSBpcyByZXN0cmljdGVkIHRvCithIGZhY3RvciAxOjEgb3IgMjoxIGluIGVpdGhlciBkaXJlY3Rpb24gYW5kIHRoZSB0YXJnZXQgaW1hZ2Ugc2l6ZSBtdXN0CitiZSBhIG11bHRpcGxlIG9mIDE2Jm5ic3A7JnRpbWVzOyZuYnNwOzE2IHBpeGVscy4gVGhlIHNvdXJjZSBjcm9wcGluZworcmVjdGFuZ2xlIGlzIHNldCB0byBkZWZhdWx0cywgd2hpY2ggYXJlIGFsc28gdGhlIHVwcGVyIGxpbWl0IGluIHRoaXMKK2V4YW1wbGUsIG9mIDY0MCZuYnNwOyZ0aW1lczsmbmJzcDs0MDAgcGl4ZWxzIGF0IG9mZnNldCAwLCZuYnNwOzAuIEFuCithcHBsaWNhdGlvbiByZXF1ZXN0cyBhbiBpbWFnZSBzaXplIG9mIDMwMCZuYnNwOyZ0aW1lczsmbmJzcDsyMjUKK3BpeGVscywgYXNzdW1pbmcgdmlkZW8gd2lsbCBiZSBzY2FsZWQgZG93biBmcm9tIHRoZSAiZnVsbCBwaWN0dXJlIgorYWNjb3JkaW5nbHkuIFRoZSBkcml2ZXIgc2V0cyB0aGUgaW1hZ2Ugc2l6ZSB0byB0aGUgY2xvc2VzdCBwb3NzaWJsZQordmFsdWVzIDMwNCZuYnNwOyZ0aW1lczsmbmJzcDsyMjQsIHRoZW4gY2hvb3NlcyB0aGUgY3JvcHBpbmcgcmVjdGFuZ2xlCitjbG9zZXN0IHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSwgdGhhdCBpcyA2MDgmbmJzcDsmdGltZXM7Jm5ic3A7MjI0CisoMjI0Jm5ic3A7JnRpbWVzOyZuYnNwOzI6MSB3b3VsZCBleGNlZWQgdGhlIGxpbWl0IDQwMCkuIFRoZSBvZmZzZXQKKzAsJm5ic3A7MCBpcyBzdGlsbCB2YWxpZCwgdGh1cyB1bm1vZGlmaWVkLiBHaXZlbiB0aGUgZGVmYXVsdCBjcm9wcGluZworcmVjdGFuZ2xlIHJlcG9ydGVkIGJ5IDxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+IHRoZQorYXBwbGljYXRpb24gY2FuIGVhc2lseSBwcm9wb3NlIGFub3RoZXIgb2Zmc2V0IHRvIGNlbnRlciB0aGUgY3JvcHBpbmcKK3JlY3RhbmdsZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPk5vdyB0aGUgYXBwbGljYXRpb24gbWF5IGluc2lzdCBvbiBjb3ZlcmluZyBhbiBhcmVhIHVzaW5nIGEKK3BpY3R1cmUgYXNwZWN0IHJhdGlvIGNsb3NlciB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCwgc28gaXQgYXNrcyBmb3IgYQorY3JvcHBpbmcgcmVjdGFuZ2xlIG9mIDYwOCZuYnNwOyZ0aW1lczsmbmJzcDs0NTYgcGl4ZWxzLiBUaGUgcHJlc2VudAorc2NhbGluZyBmYWN0b3JzIGxpbWl0IGNyb3BwaW5nIHRvIDY0MCZuYnNwOyZ0aW1lczsmbmJzcDszODQsIHNvIHRoZQorZHJpdmVyIHJldHVybnMgdGhlIGNyb3BwaW5nIHNpemUgNjA4Jm5ic3A7JnRpbWVzOyZuYnNwOzM4NCBhbmQgYWRqdXN0cwordGhlIGltYWdlIHNpemUgdG8gY2xvc2VzdCBwb3NzaWJsZSAzMDQmbmJzcDsmdGltZXM7Jm5ic3A7MTkyLjwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICAgICAgPHBhcmE+U291cmNlIGFuZCB0YXJnZXQgcmVjdGFuZ2xlcyBzaGFsbCByZW1haW4gdW5jaGFuZ2VkIGFjcm9zcworY2xvc2luZyBhbmQgcmVvcGVuaW5nIGEgZGV2aWNlLCBzdWNoIHRoYXQgcGlwaW5nIGRhdGEgaW50byBvciBvdXQgb2YgYQorZGV2aWNlIHdpbGwgd29yayB3aXRob3V0IHNwZWNpYWwgcHJlcGFyYXRpb25zLiBNb3JlIGFkdmFuY2VkCithcHBsaWNhdGlvbnMgc2hvdWxkIGVuc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgc3VpdGFibGUgYmVmb3JlIHN0YXJ0aW5nCitJL08uPC9wYXJhPgorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+UmVzZXR0aW5nIHRoZSBjcm9wcGluZyBwYXJhbWV0ZXJzPC90aXRsZT4KKworCTxwYXJhPihBIHZpZGVvIGNhcHR1cmUgZGV2aWNlIGlzIGFzc3VtZWQ7IGNoYW5nZQorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+IGZvciBvdGhlcgorZGV2aWNlcy4pPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItY3JvcGNhcDsgY3JvcGNhcDsKKyZ2NGwyLWNyb3A7IGNyb3A7CisKK21lbXNldCAoJmFtcDtjcm9wY2FwLCAwLCBzaXplb2YgKGNyb3BjYXApKTsKK2Nyb3BjYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1DUk9QQ0FQOywgJmFtcDtjcm9wY2FwKSkgeworCXBlcnJvciAoIlZJRElPQ19DUk9QQ0FQIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworbWVtc2V0ICgmYW1wO2Nyb3AsIDAsIHNpemVvZiAoY3JvcCkpOworY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworY3JvcC5jID0gY3JvcGNhcC5kZWZyZWN0OworCisvKiBJZ25vcmUgaWYgY3JvcHBpbmcgaXMgbm90IHN1cHBvcnRlZCAoRUlOVkFMKS4gKi8KKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLUNST1A7LCAmYW1wO2Nyb3ApCisgICAgJmFtcDsmYW1wOyBlcnJubyAhPSBFSU5WQUwpIHsKKwlwZXJyb3IgKCJWSURJT0NfU19DUk9QIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2V4YW1wbGU+CisKKyAgICAgIDxleGFtcGxlPgorCTx0aXRsZT5TaW1wbGUgZG93bnNjYWxpbmc8L3RpdGxlPgorCisJPHBhcmE+KEEgdmlkZW8gY2FwdHVyZSBkZXZpY2UgaXMgYXNzdW1lZC4pPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItY3JvcGNhcDsgY3JvcGNhcDsKKyZ2NGwyLWZvcm1hdDsgZm9ybWF0OworCityZXNldF9jcm9wcGluZ19wYXJhbWV0ZXJzICgpOworCisvKiBTY2FsZSBkb3duIHRvIDEvNCBzaXplIG9mIGZ1bGwgcGljdHVyZS4gKi8KKworbWVtc2V0ICgmYW1wO2Zvcm1hdCwgMCwgc2l6ZW9mIChmb3JtYXQpKTsgLyogZGVmYXVsdHMgKi8KKworZm9ybWF0LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKK2Zvcm1hdC5mbXQucGl4LndpZHRoID0gY3JvcGNhcC5kZWZyZWN0LndpZHRoICZndDsmZ3Q7IDE7Citmb3JtYXQuZm10LnBpeC5oZWlnaHQgPSBjcm9wY2FwLmRlZnJlY3QuaGVpZ2h0ICZndDsmZ3Q7IDE7Citmb3JtYXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLVMtRk1UOywgJmFtcDtmb3JtYXQpKSB7CisJcGVycm9yICgiVklESU9DX1NfRk9STUFUIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworLyogV2UgY291bGQgY2hlY2sgdGhlIGFjdHVhbCBpbWFnZSBzaXplIG5vdywgdGhlIGFjdHVhbCBzY2FsaW5nIGZhY3RvcgorICAgb3IgaWYgdGhlIGRyaXZlciBjYW4gc2NhbGUgYXQgYWxsLiAqLworCTwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2V4YW1wbGU+CisKKyAgICAgIDxleGFtcGxlPgorCTx0aXRsZT5TZWxlY3RpbmcgYW4gb3V0cHV0IGFyZWE8L3RpdGxlPgorCisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItY3JvcGNhcDsgY3JvcGNhcDsKKyZ2NGwyLWNyb3A7IGNyb3A7CisKK21lbXNldCAoJmFtcDtjcm9wY2FwLCAwLCBzaXplb2YgKGNyb3BjYXApKTsKK2Nyb3BjYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCBWSURJT0NfQ1JPUENBUDssICZhbXA7Y3JvcGNhcCkpIHsKKwlwZXJyb3IgKCJWSURJT0NfQ1JPUENBUCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK21lbXNldCAoJmFtcDtjcm9wLCAwLCBzaXplb2YgKGNyb3ApKTsKKworY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Citjcm9wLmMgPSBjcm9wY2FwLmRlZnJlY3Q7CisKKy8qIFNjYWxlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIDUwICUgb2YgdGhlaXIgb3JpZ2luYWwgc2l6ZQorICAgYW5kIGNlbnRlciB0aGUgb3V0cHV0LiAqLworCitjcm9wLmMud2lkdGggLz0gMjsKK2Nyb3AuYy5oZWlnaHQgLz0gMjsKK2Nyb3AuYy5sZWZ0ICs9IGNyb3AuYy53aWR0aCAvIDI7Citjcm9wLmMudG9wICs9IGNyb3AuYy5oZWlnaHQgLyAyOworCisvKiBJZ25vcmUgaWYgY3JvcHBpbmcgaXMgbm90IHN1cHBvcnRlZCAoRUlOVkFMKS4gKi8KKworaWYgKC0xID09IGlvY3RsIChmZCwgVklESU9DX1NfQ1JPUCwgJmFtcDtjcm9wKQorICAgICZhbXA7JmFtcDsgZXJybm8gIT0gRUlOVkFMKSB7CisJcGVycm9yICgiVklESU9DX1NfQ1JPUCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+Q3VycmVudCBzY2FsaW5nIGZhY3RvciBhbmQgcGl4ZWwgYXNwZWN0PC90aXRsZT4KKworCTxwYXJhPihBIHZpZGVvIGNhcHR1cmUgZGV2aWNlIGlzIGFzc3VtZWQuKTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KKyZ2NGwyLWNyb3BjYXA7IGNyb3BjYXA7CismdjRsMi1jcm9wOyBjcm9wOworJnY0bDItZm9ybWF0OyBmb3JtYXQ7Citkb3VibGUgaHNjYWxlLCB2c2NhbGU7Citkb3VibGUgYXNwZWN0OworaW50IGR3aWR0aCwgZGhlaWdodDsKKworbWVtc2V0ICgmYW1wO2Nyb3BjYXAsIDAsIHNpemVvZiAoY3JvcGNhcCkpOworY3JvcGNhcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUNST1BDQVA7LCAmYW1wO2Nyb3BjYXApKSB7CisJcGVycm9yICgiVklESU9DX0NST1BDQVAiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCittZW1zZXQgKCZhbXA7Y3JvcCwgMCwgc2l6ZW9mIChjcm9wKSk7Citjcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKK2lmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtRy1DUk9QOywgJmFtcDtjcm9wKSkgeworCWlmIChlcnJubyAhPSBFSU5WQUwpIHsKKwkJcGVycm9yICgiVklESU9DX0dfQ1JPUCIpOworCQlleGl0IChFWElUX0ZBSUxVUkUpOworCX0KKworCS8qIENyb3BwaW5nIG5vdCBzdXBwb3J0ZWQuICovCisJY3JvcC5jID0gY3JvcGNhcC5kZWZyZWN0OworfQorCittZW1zZXQgKCZhbXA7Zm9ybWF0LCAwLCBzaXplb2YgKGZvcm1hdCkpOworZm9ybWF0LmZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUctRk1UOywgJmFtcDtmb3JtYXQpKSB7CisJcGVycm9yICgiVklESU9DX0dfRk1UIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworLyogVGhlIHNjYWxpbmcgYXBwbGllZCBieSB0aGUgZHJpdmVyLiAqLworCitoc2NhbGUgPSBmb3JtYXQuZm10LnBpeC53aWR0aCAvIChkb3VibGUpIGNyb3AuYy53aWR0aDsKK3ZzY2FsZSA9IGZvcm1hdC5mbXQucGl4LmhlaWdodCAvIChkb3VibGUpIGNyb3AuYy5oZWlnaHQ7CisKK2FzcGVjdCA9IGNyb3BjYXAucGl4ZWxhc3BlY3QubnVtZXJhdG9yIC8KKwkgKGRvdWJsZSkgY3JvcGNhcC5waXhlbGFzcGVjdC5kZW5vbWluYXRvcjsKK2FzcGVjdCA9IGFzcGVjdCAqIGhzY2FsZSAvIHZzY2FsZTsKKworLyogRGV2aWNlcyBmb2xsb3dpbmcgSVRVLVIgQlQuNjAxIGRvIG5vdCBjYXB0dXJlCisgICBzcXVhcmUgcGl4ZWxzLiBGb3IgcGxheWJhY2sgb24gYSBjb21wdXRlciBtb25pdG9yCisgICB3ZSBzaG91bGQgc2NhbGUgdGhlIGltYWdlcyB0byB0aGlzIHNpemUuICovCisKK2R3aWR0aCA9IGZvcm1hdC5mbXQucGl4LndpZHRoIC8gYXNwZWN0OworZGhlaWdodCA9IGZvcm1hdC5mbXQucGl4LmhlaWdodDsKKwk8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJzdHJlYW1pbmctcGFyIj4KKyAgICA8dGl0bGU+U3RyZWFtaW5nIFBhcmFtZXRlcnM8L3RpdGxlPgorCisgICAgPHBhcmE+U3RyZWFtaW5nIHBhcmFtZXRlcnMgYXJlIGludGVuZGVkIHRvIG9wdGltaXplIHRoZSB2aWRlbworY2FwdHVyZSBwcm9jZXNzIGFzIHdlbGwgYXMgSS9PLiBQcmVzZW50bHkgYXBwbGljYXRpb25zIGNhbiByZXF1ZXN0IGEKK2hpZ2ggcXVhbGl0eSBjYXB0dXJlIG1vZGUgd2l0aCB0aGUgJlZJRElPQy1TLVBBUk07IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkIGRldGVybWluZXMgYSBub21pbmFsIG51bWJlciBvZgorZnJhbWVzIHBlciBzZWNvbmQuIElmIGxlc3MgdGhhbiB0aGlzIG51bWJlciBvZiBmcmFtZXMgaXMgdG8gYmUKK2NhcHR1cmVkIG9yIG91dHB1dCwgYXBwbGljYXRpb25zIGNhbiByZXF1ZXN0IGZyYW1lIHNraXBwaW5nIG9yCitkdXBsaWNhdGluZyBvbiB0aGUgZHJpdmVyIHNpZGUuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiB1c2luZwordGhlICZmdW5jLXJlYWQ7IG9yICZmdW5jLXdyaXRlOywgd2hpY2ggYXJlIG5vdCBhdWdtZW50ZWQgYnkgdGltZXN0YW1wcworb3Igc2VxdWVuY2UgY291bnRlcnMsIGFuZCB0byBhdm9pZCB1bm5lY2Nlc3NhcnkgZGF0YSBjb3B5aW5nLjwvcGFyYT4KKworICAgIDxwYXJhPkZpbmFsbHkgdGhlc2UgaW9jdGxzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mCitidWZmZXJzIHVzZWQgaW50ZXJuYWxseSBieSBhIGRyaXZlciBpbiByZWFkL3dyaXRlIG1vZGUuIEZvcgoraW1wbGljYXRpb25zIHNlZSB0aGUgc2VjdGlvbiBkaXNjdXNzaW5nIHRoZSAmZnVuYy1yZWFkOworZnVuY3Rpb24uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gZ2V0IGFuZCBzZXQgdGhlIHN0cmVhbWluZyBwYXJhbWV0ZXJzIGFwcGxpY2F0aW9ucyBjYWxsCit0aGUgJlZJRElPQy1HLVBBUk07IGFuZCAmVklESU9DLVMtUEFSTTsgaW9jdGwsIHJlc3BlY3RpdmVseS4gVGhleSB0YWtlCithIHBvaW50ZXIgdG8gYSAmdjRsMi1zdHJlYW1wYXJtOywgd2hpY2ggY29udGFpbnMgYSB1bmlvbiBob2xkaW5nCitzZXBhcmF0ZSBwYXJhbWV0ZXJzIGZvciBpbnB1dCBhbmQgb3V0cHV0IGRldmljZXMuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlc2UgaW9jdGxzIGFyZSBvcHRpb25hbCwgZHJpdmVycyBuZWVkIG5vdCBpbXBsZW1lbnQKK3RoZW0uIElmIHNvLCB0aGV5IHJldHVybiB0aGUgJkVJTlZBTDsuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbXBhdC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbXBhdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxOTAyYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbApAQCAtMCwwICsxLDI0NTcgQEAKKyAgPHRpdGxlPkNoYW5nZXM8L3RpdGxlPgorCisgIDxwYXJhPlRoZSBmb2xsb3dpbmcgY2hhcHRlcnMgZG9jdW1lbnQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgVjRMMiBBUEksCitlcnJhdGEgb3IgZXh0ZW5zaW9ucy4gVGhleSBhcmUgYWxzbyBpbnRlbmRlZCB0byBoZWxwIGFwcGxpY2F0aW9uIGFuZAorZHJpdmVyIHdyaXRlcnMgdG8gcG9ydCBvciB1cGRhdGUgdGhlaXIgY29kZS48L3BhcmE+CisKKyAgPHNlY3Rpb24gaWQ9ImRpZmYtdjRsIj4KKyAgICA8dGl0bGU+RGlmZmVyZW5jZXMgYmV0d2VlbiBWNEwgYW5kIFY0TDI8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIFZpZGVvIEZvciBMaW51eCBBUEkgd2FzIGZpcnN0IGludHJvZHVjZWQgaW4gTGludXggMi4xIHRvCit1bmlmeSBhbmQgcmVwbGFjZSB2YXJpb3VzIFRWIGFuZCByYWRpbyBkZXZpY2UgcmVsYXRlZCBpbnRlcmZhY2VzLAorZGV2ZWxvcGVkIGluZGVwZW5kZW50bHkgYnkgZHJpdmVyIHdyaXRlcnMgaW4gcHJpb3IgeWVhcnMuIFN0YXJ0aW5nCit3aXRoIExpbnV4IDIuNSB0aGUgbXVjaCBpbXByb3ZlZCBWNEwyIEFQSSByZXBsYWNlcyB0aGUgVjRMIEFQSSwKK2FsdGhvdWdoIGV4aXN0aW5nIGRyaXZlcnMgd2lsbCBjb250aW51ZSB0byBzdXBwb3J0IFY0TCBhcHBsaWNhdGlvbnMgaW4KK3RoZSBmdXR1cmUsIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoIHRoZSBWNEwyIGNvbXBhdGliaWxpdHkgbGF5ZXIgaW4KK3RoZSA8ZmlsZW5hbWU+dmlkZW9kZXY8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlIHRyYW5zbGF0aW5nIGlvY3RscyBvbgordGhlIGZseS4gRm9yIGEgdHJhbnNpdGlvbiBwZXJpb2Qgbm90IGFsbCBkcml2ZXJzIHdpbGwgc3VwcG9ydCB0aGUgVjRMMgorQVBJLjwvcGFyYT4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPk9wZW5pbmcgYW5kIENsb3NpbmcgRGV2aWNlczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgdGhlIGNoYXJhY3RlciBkZXZpY2UgZmlsZSBuYW1lcworcmVjb21tZW5kZWQgZm9yIFY0TDIgdmlkZW8gY2FwdHVyZSwgb3ZlcmxheSwgcmFkaW8sIHRlbGV0ZXh0IGFuZCByYXcKK3ZiaSBjYXB0dXJlIGRldmljZXMgZGlkIG5vdCBjaGFuZ2UgZnJvbSB0aG9zZSB1c2VkIGJ5IFY0TC4gVGhleSBhcmUKK2xpc3RlZCBpbiA8eHJlZiBsaW5rZW5kPSJkZXZpY2VzIiAvPiBhbmQgYmVsb3cgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9InY0bC1kZXYiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIFY0TCA8ZmlsZW5hbWU+dmlkZW9kZXY8L2ZpbGVuYW1lPiBtb2R1bGUgYXV0b21hdGljYWxseQorYXNzaWducyBtaW5vciBudW1iZXJzIHRvIGRyaXZlcnMgaW4gbG9hZCBvcmRlciwgZGVwZW5kaW5nIG9uIHRoZQorcmVnaXN0ZXJlZCBkZXZpY2UgdHlwZS4gV2UgcmVjb21tZW5kIHRoYXQgVjRMMiBkcml2ZXJzIGJ5IGRlZmF1bHQKK3JlZ2lzdGVyIGRldmljZXMgd2l0aCB0aGUgc2FtZSBudW1iZXJzLCBidXQgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yCitjYW4gYXNzaWduIGFyYml0cmFyeSBtaW5vciBudW1iZXJzIHVzaW5nIGRyaXZlciBtb2R1bGUgb3B0aW9ucy4gVGhlCittYWpvciBkZXZpY2UgbnVtYmVyIHJlbWFpbnMgODEuPC9wYXJhPgorCisgICAgICA8dGFibGUgaWQ9InY0bC1kZXYiPgorCTx0aXRsZT5WNEwgRGV2aWNlIFR5cGVzLCBOYW1lcyBhbmQgTnVtYmVyczwvdGl0bGU+CisJPHRncm91cCBjb2xzPSIzIj4KKwkgIDx0aGVhZD4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+RGV2aWNlIFR5cGU8L2VudHJ5PgorCSAgICAgIDxlbnRyeT5GaWxlIE5hbWU8L2VudHJ5PgorCSAgICAgIDxlbnRyeT5NaW5vciBOdW1iZXJzPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8L3RoZWFkPgorCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+VmlkZW8gY2FwdHVyZSBhbmQgb3ZlcmxheTwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPjxmaWxlbmFtZT4vZGV2L3ZpZGVvPC9maWxlbmFtZT4gYW5kCis8ZmlsZW5hbWU+L2Rldi9idHR2MDwvZmlsZW5hbWU+PGZvb3Rub3RlPiA8cGFyYT5BY2NvcmRpbmcgdG8KK0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQgdGhlc2Ugc2hvdWxkIGJlIHN5bWJvbGljIGxpbmtzIHRvCis8ZmlsZW5hbWU+L2Rldi92aWRlbzA8L2ZpbGVuYW1lPi4gTm90ZSB0aGUgb3JpZ2luYWwgYnR0diBpbnRlcmZhY2UgaXMKK25vdCBjb21wYXRpYmxlIHdpdGggVjRMIG9yIFY0TDIuPC9wYXJhPiA8L2Zvb3Rub3RlPiwKKzxmaWxlbmFtZT4vZGV2L3ZpZGVvMDwvZmlsZW5hbWU+IHRvCis8ZmlsZW5hbWU+L2Rldi92aWRlbzYzPC9maWxlbmFtZT48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MC02MzwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5SYWRpbyByZWNlaXZlcjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPjxmaWxlbmFtZT4vZGV2L3JhZGlvPC9maWxlbmFtZT48Zm9vdG5vdGU+CisJCSAgICA8cGFyYT5BY2NvcmRpbmcgdG8KKzxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0PC9maWxlbmFtZT4gYSBzeW1ib2xpYyBsaW5rIHRvCis8ZmlsZW5hbWU+L2Rldi9yYWRpbzA8L2ZpbGVuYW1lPi48L3BhcmE+CisJCSAgPC9mb290bm90ZT4sIDxmaWxlbmFtZT4vZGV2L3JhZGlvMDwvZmlsZW5hbWU+IHRvCis8ZmlsZW5hbWU+L2Rldi9yYWRpbzYzPC9maWxlbmFtZT48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+NjQtMTI3PC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5PlRlbGV0ZXh0IGRlY29kZXI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48cGFyYT48ZmlsZW5hbWU+L2Rldi92dHg8L2ZpbGVuYW1lPiwKKzxmaWxlbmFtZT4vZGV2L3Z0eDA8L2ZpbGVuYW1lPiB0bworPGZpbGVuYW1lPi9kZXYvdnR4MzE8L2ZpbGVuYW1lPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4xOTItMjIzPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5PlJhdyBWQkkgY2FwdHVyZTwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPjxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+LAorPGZpbGVuYW1lPi9kZXYvdmJpMDwvZmlsZW5hbWU+IHRvCis8ZmlsZW5hbWU+L2Rldi92YmkzMTwvZmlsZW5hbWU+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPGVudHJ5PjIyNC0yNTU8L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8cGFyYT5WNEwgcHJvaGliaXRzIChvciB1c2VkIHRvIHByb2hpYml0KSBtdWx0aXBsZSBvcGVucyBvZiBhCitkZXZpY2UgZmlsZS4gVjRMMiBkcml2ZXJzIDxlbXBoYXNpcz5tYXk8L2VtcGhhc2lzPiBzdXBwb3J0IG11bHRpcGxlCitvcGVucywgc2VlIDx4cmVmIGxpbmtlbmQ9Im9wZW4iIC8+IGZvciBkZXRhaWxzIGFuZCBjb25zZXF1ZW5jZXMuPC9wYXJhPgorCisgICAgICA8cGFyYT5WNEwgZHJpdmVycyByZXNwb25kIHRvIFY0TDIgaW9jdGxzIHdpdGggYW4gJkVJTlZBTDsuIFRoZQorY29tcGF0aWJpbGl0eSBsYXllciBpbiB0aGUgVjRMMiA8ZmlsZW5hbWU+dmlkZW9kZXY8L2ZpbGVuYW1lPiBtb2R1bGUKK2NhbiB0cmFuc2xhdGUgVjRMIGlvY3RsIHJlcXVlc3RzIHRvIHRoZWlyIFY0TDIgY291bnRlcnBhcnQsIGhvd2V2ZXIgYQorVjRMMiBkcml2ZXIgdXN1YWxseSBuZWVkcyBtb3JlIHByZXBhcmF0aW9uIHRvIGJlY29tZSBmdWxseSBWNEwKK2NvbXBhdGlibGUuIFRoaXMgaXMgY292ZXJlZCBpbiBtb3JlIGRldGFpbCBpbiA8eHJlZgorCSAgbGlua2VuZD0iZHJpdmVyIiAvPi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIFY0TCA8Y29uc3RhbnQ+VklESU9DR0NBUDwvY29uc3RhbnQ+IGlvY3RsIGlzCitlcXVpdmFsZW50IHRvIFY0TDIncyAmVklESU9DLVFVRVJZQ0FQOy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fY2FwYWJpbGl0eTwvc3RydWN0bmFtZT4gYmVjYW1lCis8c3RydWN0ZmllbGQ+Y2FyZDwvc3RydWN0ZmllbGQ+IGluICZ2NGwyLWNhcGFiaWxpdHk7LAorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiB3YXMgcmVwbGFjZWQgYnkKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXRpZXM8L3N0cnVjdGZpZWxkPi4gTm90ZSBWNEwyIGRvZXMgbm90CitkaXN0aW5ndWlzaCBiZXR3ZWVuIGRldmljZSB0eXBlcyBsaWtlIHRoaXMsIGJldHRlciB0aGluayBvZiBiYXNpYwordmlkZW8gaW5wdXQsIHZpZGVvIG91dHB1dCBhbmQgcmFkaW8gZGV2aWNlcyBzdXBwb3J0aW5nIGEgc2V0IG9mCityZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIHZpZGVvIGNhcHR1cmluZywgdmlkZW8gb3ZlcmxheSBhbmQgVkJJCitjYXB0dXJpbmcuIFNlZSA8eHJlZiBsaW5rZW5kPSJvcGVuIiAvPiBmb3IgYW4KK2ludHJvZHVjdGlvbi48aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMyI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19jYXBhYmlsaXR5PC9zdHJ1Y3RuYW1lPgorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJCTxlbnRyeT4mdjRsMi1jYXBhYmlsaXR5OworPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZsYWdzPC9lbnRyeT4KKwkJPGVudHJ5PlB1cnBvc2U8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3RoZWFkPgorCSAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfQ0FQVFVSRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WSURFT19DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+VGhlIDxsaW5rIGxpbmtlbmQ9ImNhcHR1cmUiPnZpZGVvCitjYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PlRoZSBkZXZpY2UgaGFzIGEgPGxpbmsgbGlua2VuZD0idHVuZXIiPnR1bmVyIG9yCittb2R1bGF0b3I8L2xpbms+LjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9URUxFVEVYVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PlRoZSA8bGluayBsaW5rZW5kPSJyYXctdmJpIj5yYXcgVkJJCitjYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9PVkVSTEFZPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT5UaGUgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+dmlkZW8KK292ZXJsYXk8L2xpbms+IGludGVyZmFjZSBpcyBzdXBwb3J0ZWQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX0NIUk9NQUtFWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWTwvY29uc3RhbnQ+IGluCitmaWVsZCA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+IG9mCismdjRsMi1mcmFtZWJ1ZmZlcjs8L2VudHJ5PgorCQk8ZW50cnk+V2hldGhlciBjaHJvbWFrZXkgb3ZlcmxheSBpcyBzdXBwb3J0ZWQuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiBvbiBvdmVybGF5IHNlZQorPHhyZWYgbGlua2VuZD0ib3ZlcmxheSIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX0NMSVBQSU5HPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfQklUTUFQX0NMSVBQSU5HPC9jb25zdGFudD4gaW4gZmllbGQKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gb2YgJnY0bDItZnJhbWVidWZmZXI7PC9lbnRyeT4KKwkJPGVudHJ5PldoZXRoZXIgY2xpcHBpbmcgdGhlIG92ZXJsYWlkIGltYWdlIGlzCitzdXBwb3J0ZWQsIHNlZSA8eHJlZiBsaW5rZW5kPSJvdmVybGF5IiAvPi48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfRlJBTUVSQU08L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9FWFRFUk5PVkVSTEFZPC9jb25zdGFudD4KKzxlbXBoYXNpcz5ub3Qgc2V0PC9lbXBoYXNpcz4gaW4gZmllbGQKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gb2YgJnY0bDItZnJhbWVidWZmZXI7PC9lbnRyeT4KKwkJPGVudHJ5PldoZXRoZXIgb3ZlcmxheSBvdmVyd3JpdGVzIGZyYW1lIGJ1ZmZlciBtZW1vcnksCitzZWUgPHhyZWYgbGlua2VuZD0ib3ZlcmxheSIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX1NDQUxFUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+VGhpcyBmbGFnIGluZGljYXRlcyBpZiB0aGUgaGFyZHdhcmUgY2FuIHNjYWxlCitpbWFnZXMuIFRoZSBWNEwyIEFQSSBpbXBsaWVzIHRoZSBzY2FsZSBmYWN0b3IgYnkgc2V0dGluZyB0aGUgY3JvcHBpbmcKK2RpbWVuc2lvbnMgYW5kIGltYWdlIHNpemUgd2l0aCB0aGUgJlZJRElPQy1TLUNST1A7IGFuZCAmVklESU9DLVMtRk1UOworaW9jdGwsIHJlc3BlY3RpdmVseS4gVGhlIGRyaXZlciByZXR1cm5zIHRoZSBjbG9zZXN0IHNpemVzIHBvc3NpYmxlLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JvcHBpbmcgYW5kIHNjYWxpbmcgc2VlIDx4cmVmCisJCSAgICBsaW5rZW5kPSJjcm9wIiAvPi48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfTU9OT0NIUk9NRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+QXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgdGhlIHN1cHBvcnRlZCBpbWFnZQorZm9ybWF0cyB3aXRoIHRoZSAmVklESU9DLUVOVU0tRk1UOyBpb2N0bCB0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZQorc3VwcG9ydHMgZ3JleSBzY2FsZSBjYXB0dXJpbmcgb25seS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaW1hZ2UKK2Zvcm1hdHMgc2VlIDx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX1NVQkNBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PkFwcGxpY2F0aW9ucyBjYW4gY2FsbCB0aGUgJlZJRElPQy1HLUNST1A7IGlvY3RsCit0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBjYXB0dXJpbmcgYSBzdWJzZWN0aW9uIG9mIHRoZSBmdWxsCitwaWN0dXJlICgiY3JvcHBpbmciIGluIFY0TDIpLiBJZiBub3QsIHRoZSBpb2N0bCByZXR1cm5zIHRoZSAmRUlOVkFMOy4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyb3BwaW5nIGFuZCBzY2FsaW5nIHNlZSA8eHJlZgorCQkgICAgbGlua2VuZD0iY3JvcCIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX01QRUdfREVDT0RFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+QXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgdGhlIHN1cHBvcnRlZCBpbWFnZQorZm9ybWF0cyB3aXRoIHRoZSAmVklESU9DLUVOVU0tRk1UOyBpb2N0bCB0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZQorc3VwcG9ydHMgTVBFRyBzdHJlYW1zLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9NUEVHX0VOQ09ERVI8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PlNlZSBhYm92ZS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfTUpQRUdfREVDT0RFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+U2VlIGFib3ZlLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9NSlBFR19FTkNPREVSPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT5TZWUgYWJvdmUuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90Ym9keT4KKwkgIDwvdGdyb3VwPgorCTwvaW5mb3JtYWx0YWJsZT48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+YXVkaW9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2FzIHJlcGxhY2VkCitieSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmxhZworPGNvbnN0YW50PlY0TDJfQ0FQX0FVRElPPC9jb25zdGFudD4sIGluZGljYXRpbmcKKzxlbXBoYXNpcz5pZjwvZW1waGFzaXM+IHRoZSBkZXZpY2UgaGFzIGFueSBhdWRpbyBpbnB1dHMgb3Igb3V0cHV0cy4gVG8KK2RldGVybWluZSB0aGVpciBudW1iZXIgYXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgYXVkaW8gaW5wdXRzIHdpdGgKK3RoZSAmVklESU9DLUctQVVESU87IGlvY3RsLiBUaGUgYXVkaW8gaW9jdGxzIGFyZSBkZXNjcmliZWQgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9ImF1ZGlvIiAvPi48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+bWF4d2lkdGg8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5tYXhoZWlnaHQ8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5taW53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPm1pbmhlaWdodDwvc3RydWN0ZmllbGQ+IGZpZWxkcyB3ZXJlIHJlbW92ZWQuIENhbGxpbmcgdGhlCismVklESU9DLVMtRk1UOyBvciAmVklESU9DLVRSWS1GTVQ7IGlvY3RsIHdpdGggdGhlIGRlc2lyZWQgZGltZW5zaW9ucworcmV0dXJucyB0aGUgY2xvc2VzdCBzaXplIHBvc3NpYmxlLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBjdXJyZW50Cit2aWRlbyBzdGFuZGFyZCwgY3JvcHBpbmcgYW5kIHNjYWxpbmcgbGltaXRhdGlvbnMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlZpZGVvIFNvdXJjZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WNEwgcHJvdmlkZXMgdGhlIDxjb25zdGFudD5WSURJT0NHQ0hBTjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ1NDSEFOPC9jb25zdGFudD4gaW9jdGwgdXNpbmcgc3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19jaGFubmVsPC9zdHJ1Y3RuYW1lPiB0byBlbnVtZXJhdGUKK3RoZSB2aWRlbyBpbnB1dHMgb2YgYSBWNEwgZGV2aWNlLiBUaGUgZXF1aXZhbGVudCBWNEwyIGlvY3RscworYXJlICZWSURJT0MtRU5VTUlOUFVUOywgJlZJRElPQy1HLUlOUFVUOyBhbmQgJlZJRElPQy1TLUlOUFVUOwordXNpbmcgJnY0bDItaW5wdXQ7IGFzIGRpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJ2aWRlbyIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmNoYW5uZWw8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb3VudGluZworaW5wdXRzIHdhcyByZW5hbWVkIHRvIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+LCB0aGUgdmlkZW8KK2lucHV0IHR5cGVzIHdlcmUgcmVuYW1lZCBhcyBmb2xsb3dzOiA8aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMiI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0IDxzdHJ1Y3RuYW1lPnZpZGVvX2NoYW5uZWw8L3N0cnVjdG5hbWU+Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5PiZ2NGwyLWlucHV0OworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGhlYWQ+CisJICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19UWVBFX1RWPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1RZUEVfQ0FNRVJBPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGJvZHk+CisJICA8L3Rncm91cD4KKwk8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCisgICAgICA8cGFyYT5Vbmxpa2UgdGhlIDxzdHJ1Y3RmaWVsZD50dW5lcnM8L3N0cnVjdGZpZWxkPiBmaWVsZAorZXhwcmVzc2luZyB0aGUgbnVtYmVyIG9mIHR1bmVycyBvZiB0aGlzIGlucHV0LCBWNEwyIGFzc3VtZXMgZWFjaCB2aWRlbworaW5wdXQgaXMgY29ubmVjdGVkIHRvIGF0IG1vc3Qgb25lIHR1bmVyLiBIb3dldmVyIGEgdHVuZXIgY2FuIGhhdmUgbW9yZQordGhhbiBvbmUgaW5wdXQsICZpZTsgUkYgY29ubmVjdG9ycywgYW5kIGEgZGV2aWNlIGNhbiBoYXZlIG11bHRpcGxlCit0dW5lcnMuIFRoZSBpbmRleCBudW1iZXIgb2YgdGhlIHR1bmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQsIGlmCithbnksIGlzIHN0b3JlZCBpbiBmaWVsZCA8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBvZgorJnY0bDItaW5wdXQ7LiBFbnVtZXJhdGlvbiBvZiB0dW5lcnMgaXMgZGlzY3Vzc2VkIGluIDx4cmVmCisJICBsaW5rZW5kPSJ0dW5lciIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgcmVkdW5kYW50IDxjb25zdGFudD5WSURFT19WQ19UVU5FUjwvY29uc3RhbnQ+IGZsYWcgd2FzCitkcm9wcGVkLiBWaWRlbyBpbnB1dHMgYXNzb2NpYXRlZCB3aXRoIGEgdHVuZXIgYXJlIG9mIHR5cGUKKzxjb25zdGFudD5WNEwyX0lOUFVUX1RZUEVfVFVORVI8L2NvbnN0YW50Pi4gVGhlCis8Y29uc3RhbnQ+VklERU9fVkNfQVVESU88L2NvbnN0YW50PiBmbGFnIHdhcyByZXBsYWNlZCBieSB0aGUKKzxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+IGZpZWxkLiBWNEwyIGNvbnNpZGVycyBkZXZpY2VzIHdpdGgKK3VwIHRvIDMyIGF1ZGlvIGlucHV0cy4gRWFjaCBzZXQgYml0IGluIHRoZQorPHN0cnVjdGZpZWxkPmF1ZGlvc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgcmVwcmVzZW50cyBvbmUgYXVkaW8gaW5wdXQKK3RoaXMgdmlkZW8gaW5wdXQgY29tYmluZXMgd2l0aC4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGF1ZGlvIGlucHV0cyBhbmQKK2hvdyB0byBzd2l0Y2ggYmV0d2VlbiB0aGVtIHNlZSA8eHJlZiBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPm5vcm08L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXNjcmliaW5nIHRoZQorc3VwcG9ydGVkIHZpZGVvIHN0YW5kYXJkcyB3YXMgcmVwbGFjZWQgYnkKKzxzdHJ1Y3RmaWVsZD5zdGQ8L3N0cnVjdGZpZWxkPi4gVGhlIFY0TCBzcGVjaWZpY2F0aW9uIG1lbnRpb25zIGEgZmxhZworPGNvbnN0YW50PlZJREVPX1ZDX05PUk08L2NvbnN0YW50PiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0YW5kYXJkIGNhbgorYmUgY2hhbmdlZC4gVGhpcyBmbGFnIHdhcyBhIGxhdGVyIGFkZGl0aW9uIHRvZ2V0aGVyIHdpdGggdGhlCis8c3RydWN0ZmllbGQ+bm9ybTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCBoYXMgYmVlbiByZW1vdmVkIGluIHRoZQorbWVhbnRpbWUuIFY0TDIgaGFzIGEgc2ltaWxhciwgYWxiZWl0IG1vcmUgY29tcHJlaGVuc2l2ZSBhcHByb2FjaAordG8gdmlkZW8gc3RhbmRhcmRzLCBzZWUgPHhyZWYgbGlua2VuZD0ic3RhbmRhcmQiIC8+IGZvciBtb3JlCitpbmZvcm1hdGlvbi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VHVuaW5nPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIFY0TCA8Y29uc3RhbnQ+VklESU9DR1RVTkVSPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DU1RVTkVSPC9jb25zdGFudD4gaW9jdGwgYW5kIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fdHVuZXI8L3N0cnVjdG5hbWU+IGNhbiBiZSB1c2VkIHRvIGVudW1lcmF0ZSB0aGUKK3R1bmVycyBvZiBhIFY0TCBUViBvciByYWRpbyBkZXZpY2UuIFRoZSBlcXVpdmFsZW50IFY0TDIgaW9jdGxzIGFyZQorJlZJRElPQy1HLVRVTkVSOyBhbmQgJlZJRElPQy1TLVRVTkVSOyB1c2luZyAmdjRsMi10dW5lcjsuIFR1bmVycyBhcmUKK2NvdmVyZWQgaW4gPHhyZWYgbGlua2VuZD0idHVuZXIiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvdW50aW5nIHR1bmVycword2FzIHJlbmFtZWQgdG8gPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4uIFRoZSBmaWVsZHMKKzxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4sIDxzdHJ1Y3RmaWVsZD5yYW5nZWxvdzwvc3RydWN0ZmllbGQ+CithbmQgPHN0cnVjdGZpZWxkPnJhbmdlaGlnaDwvc3RydWN0ZmllbGQ+IHJlbWFpbmVkIHVuY2hhbmdlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8Y29uc3RhbnQ+VklERU9fVFVORVJfUEFMPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklERU9fVFVORVJfTlRTQzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJREVPX1RVTkVSX1NFQ0FNPC9jb25zdGFudD4gZmxhZ3MgaW5kaWNhdGluZyB0aGUgc3VwcG9ydGVkCit2aWRlbyBzdGFuZGFyZHMgd2VyZSBkcm9wcGVkLiBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdyBjb250YWluZWQgaW4gdGhlCithc3NvY2lhdGVkICZ2NGwyLWlucHV0Oy4gTm8gcmVwbGFjZW1lbnQgZXhpc3RzIGZvciB0aGUKKzxjb25zdGFudD5WSURFT19UVU5FUl9OT1JNPC9jb25zdGFudD4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlCit2aWRlbyBzdGFuZGFyZCBjYW4gYmUgc3dpdGNoZWQuIFRoZSA8c3RydWN0ZmllbGQ+bW9kZTwvc3RydWN0ZmllbGQ+CitmaWVsZCB0byBzZWxlY3QgYSBkaWZmZXJlbnQgdmlkZW8gc3RhbmRhcmQgd2FzIHJlcGxhY2VkIGJ5IGEgd2hvbGUgbmV3CitzZXQgb2YgaW9jdGxzIGFuZCBzdHJ1Y3R1cmVzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJzdGFuZGFyZCIgLz4uCitEdWUgdG8gaXRzIHViaXF1aXR5IGl0IHNob3VsZCBiZSBtZW50aW9uZWQgdGhlIEJUVFYgZHJpdmVyIHN1cHBvcnRzCitzZXZlcmFsIHN0YW5kYXJkcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVndWxhcgorPGNvbnN0YW50PlZJREVPX01PREVfUEFMPC9jb25zdGFudD4gKDApLAorPGNvbnN0YW50PlZJREVPX01PREVfTlRTQzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJREVPX01PREVfU0VDQU08L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURFT19NT0RFX0FVVE88L2NvbnN0YW50PiAoMykuIE5hbWVseSBOL1BBTCBBcmdlbnRpbmEsCitNL1BBTCwgTi9QQUwsIGFuZCBOVFNDIEphcGFuIHdpdGggbnVtYmVycyAzLTYgKHNpYykuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJREVPX1RVTkVSX1NURVJFT19PTjwvY29uc3RhbnQ+IGZsYWcKK2luZGljYXRpbmcgc3RlcmVvIHJlY2VwdGlvbiBiZWNhbWUKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TVEVSRU88L2NvbnN0YW50PiBpbiBmaWVsZAorPHN0cnVjdGZpZWxkPnJ4c3ViY2hhbnM8L3N0cnVjdGZpZWxkPi4gVGhpcyBmaWVsZCBhbHNvIHBlcm1pdHMgdGhlCitkZXRlY3Rpb24gb2YgbW9uYXVyYWwgYW5kIGJpbGluZ3VhbCBhdWRpbywgc2VlIHRoZSBkZWZpbml0aW9uIG9mCismdjRsMi10dW5lcjsgZm9yIGRldGFpbHMuIFByZXNlbnRseSBubyByZXBsYWNlbWVudCBleGlzdHMgZm9yIHRoZQorPGNvbnN0YW50PlZJREVPX1RVTkVSX1JEU19PTjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJREVPX1RVTkVSX01CU19PTjwvY29uc3RhbnQ+IGZsYWdzLjwvcGFyYT4KKworICAgICAgPHBhcmE+IFRoZSA8Y29uc3RhbnQ+VklERU9fVFVORVJfTE9XPC9jb25zdGFudD4gZmxhZyB3YXMgcmVuYW1lZAordG8gPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX0xPVzwvY29uc3RhbnQ+IGluIHRoZSAmdjRsMi10dW5lcjsKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ0dGUkVRPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DU0ZSRVE8L2NvbnN0YW50PiBpb2N0bCB0byBjaGFuZ2UgdGhlIHR1bmVyIGZyZXF1ZW5jeQord2hlcmUgcmVuYW1lZCB0byAmVklESU9DLUctRlJFUVVFTkNZOyBhbmQgICZWSURJT0MtUy1GUkVRVUVOQ1k7LiBUaGV5Cit0YWtlIGEgcG9pbnRlciB0byBhICZ2NGwyLWZyZXF1ZW5jeTsgaW5zdGVhZCBvZiBhbiB1bnNpZ25lZCBsb25nCitpbnRlZ2VyLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idjRsLWltYWdlLXByb3BlcnRpZXMiPgorICAgICAgPHRpdGxlPkltYWdlIFByb3BlcnRpZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WNEwyIGhhcyBubyBlcXVpdmFsZW50IG9mIHRoZQorPGNvbnN0YW50PlZJRElPQ0dQSUNUPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5WSURJT0NTUElDVDwvY29uc3RhbnQ+Citpb2N0bCBhbmQgc3RydWN0IDxzdHJ1Y3RuYW1lPnZpZGVvX3BpY3R1cmU8L3N0cnVjdG5hbWU+LiBUaGUgZm9sbG93aW5nCitmaWVsZHMgd2hlcmUgcmVwbGFjZWQgYnkgVjRMMiBjb250cm9scyBhY2Nlc3NpYmxlIHdpdGggdGhlCismVklESU9DLVFVRVJZQ1RSTDssICZWSURJT0MtRy1DVFJMOyBhbmQgJlZJRElPQy1TLUNUUkw7IGlvY3Rsczo8aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMiI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0IDxzdHJ1Y3RuYW1lPnZpZGVvX3BpY3R1cmU8L3N0cnVjdG5hbWU+PC9lbnRyeT4KKwkJPGVudHJ5PlY0TDIgQ29udHJvbCBJRDwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGhlYWQ+CisJICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5icmlnaHRuZXNzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0JSSUdIVE5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5odWU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfSFVFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48c3RydWN0ZmllbGQ+Y29sb3VyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1NBVFVSQVRJT048L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jb250cmFzdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9DT05UUkFTVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHN0cnVjdGZpZWxkPndoaXRlbmVzczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9XSElURU5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGJvZHk+CisJICA8L3Rncm91cD4KKwk8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgVjRMIHBpY3R1cmUgY29udHJvbHMgYXJlIGFzc3VtZWQgdG8gcmFuZ2UgZnJvbSAwIHRvCis2NTUzNSB3aXRoIG5vIHBhcnRpY3VsYXIgcmVzZXQgdmFsdWUuIFRoZSBWNEwyIEFQSSBwZXJtaXRzIGFyYml0cmFyeQorbGltaXRzIGFuZCBkZWZhdWx0cyB3aGljaCBjYW4gYmUgcXVlcmllZCB3aXRoIHRoZSAmVklESU9DLVFVRVJZQ1RSTDsKK2lvY3RsLiBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBjb250cm9scyBzZWUgPHhyZWYKK2xpbmtlbmQ9ImNvbnRyb2wiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxzdHJ1Y3RmaWVsZD5kZXB0aDwvc3RydWN0ZmllbGQ+IChhdmVyYWdlIG51bWJlciBvZgorYml0cyBwZXIgcGl4ZWwpIG9mIGEgdmlkZW8gaW1hZ2UgaXMgaW1wbGllZCBieSB0aGUgc2VsZWN0ZWQgaW1hZ2UKK2Zvcm1hdC4gVjRMMiBkb2VzIG5vdCBleHBsaWNpdGVseSBwcm92aWRlIHN1Y2ggaW5mb3JtYXRpb24gYXNzdW1pbmcKK2FwcGxpY2F0aW9ucyByZWNvZ25pemluZyB0aGUgZm9ybWF0IGFyZSBhd2FyZSBvZiB0aGUgaW1hZ2UgZGVwdGggYW5kCitvdGhlcnMgbmVlZCBub3Qga25vdy4gVGhlIDxzdHJ1Y3RmaWVsZD5wYWxldHRlPC9zdHJ1Y3RmaWVsZD4gZmllbGQKK21vdmVkIGludG8gdGhlICZ2NGwyLXBpeC1mb3JtYXQ7OjxpbmZvcm1hbHRhYmxlPgorCSAgPHRncm91cCBjb2xzPSIyIj4KKwkgICAgPHRoZWFkPgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT5zdHJ1Y3QgPHN0cnVjdG5hbWU+dmlkZW9fcGljdHVyZTwvc3RydWN0bmFtZT4KKzxzdHJ1Y3RmaWVsZD5wYWxldHRlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+JnY0bDItcGl4LWZvcm1hdDsKKzxzdHJ1Y3RmaWVsZD5waXhmbXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGhlYWQ+CisJICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX0dSRVk8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULUdSRVkiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfR1JFWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ISTI0MDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJwaXhmbXQtcmVzZXJ2ZWQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSEkyNDA8L2NvbnN0YW50PjwvbGluaz48Zm9vdG5vdGU+CisJCSAgICAgIDxwYXJhPlRoaXMgaXMgYSBjdXN0b20gZm9ybWF0IHVzZWQgYnkgdGhlIEJUVFYKK2RyaXZlciwgbm90IG9uZSBvZiB0aGUgVjRMMiBzdGFuZGFyZCBmb3JtYXRzLjwvcGFyYT4KKwkJICAgIDwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1JHQjU2NTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJwaXhmbXQtcmdiIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjU2NTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SR0I1NTU8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0icGl4Zm10LXJnYiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I1NTU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1BBTEVUVEVfUkdCMjQ8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0icGl4Zm10LXJnYiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SR0IzMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJwaXhmbXQtcmdiIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjMyPC9jb25zdGFudD48L2xpbms+PGZvb3Rub3RlPgorCQkgICAgICA8cGFyYT5QcmVzdW1hYmx5IGFsbCBWNEwgUkdCIGZvcm1hdHMgYXJlCitsaXR0bGUtZW5kaWFuLCBhbHRob3VnaCBzb21lIGRyaXZlcnMgbWlnaHQgaW50ZXJwcmV0IHRoZW0gYWNjb3JkaW5nIHRvIG1hY2hpbmUgZW5kaWFuZXNzLiBWNEwyIGRlZmluZXMgbGl0dGxlLWVuZGlhbiwgYmlnLWVuZGlhbiBhbmQgcmVkL2JsdWUKK3N3YXBwZWQgdmFyaWFudHMuIEZvciBkZXRhaWxzIHNlZSA8eHJlZiBsaW5rZW5kPSJwaXhmbXQtcmdiIiAvPi48L3BhcmE+CisJCSAgICA8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjI8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVWVYiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48cGFyYT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVlWPC9jb25zdGFudD48Zm9vdG5vdGU+CisJCSAgICAgIDxwYXJhPjxjb25zdGFudD5WSURFT19QQUxFVFRFX1lVVjQyMjwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlZJREVPX1BBTEVUVEVfWVVZVjwvY29uc3RhbnQ+IGFyZSB0aGUgc2FtZSBmb3JtYXRzLiBTb21lCitWNEwgZHJpdmVycyByZXNwb25kIHRvIG9uZSwgc29tZSB0byB0aGUgb3RoZXIuPC9wYXJhPgorCQkgICAgPC9mb290bm90ZT48L3BhcmE+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVZViI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVlWPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1VZVlk8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVVZVlkiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfVVlWWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjA8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT5Ob25lPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1BBTEVUVEVfWVVWNDExPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PHBhcmE+PGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1ZNDFQIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1k0MVA8L2NvbnN0YW50PjwvbGluaz48Zm9vdG5vdGU+CisJCSAgICAgIDxwYXJhPk5vdCB0byBiZSBjb25mdXNlZCB3aXRoCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQxMVA8L2NvbnN0YW50Piwgd2hpY2ggaXMgYSBwbGFuYXIKK2Zvcm1hdC48L3BhcmE+IDwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1JBVzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPk5vbmU8Zm9vdG5vdGU+IDxwYXJhPlY0TCBleHBsYWlucyB0aGlzCithczogIlJBVyBjYXB0dXJlIChCVDg0OCkiPC9wYXJhPiA8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjJQPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PHBhcmE+PGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY0MjJQIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQyMlA8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1BBTEVUVEVfWVVWNDExUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDExUCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MTFQPC9jb25zdGFudD48L2xpbms+PGZvb3Rub3RlPgorCQkgICAgICA8cGFyYT5Ob3QgdG8gYmUgY29uZnVzZWQgd2l0aAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD4sIHdoaWNoIGlzIGEgcGFja2VkCitmb3JtYXQuPC9wYXJhPiA8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjBQPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PHBhcmE+PGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVlU0MjAiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDIwPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1lVVjQxMFA8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQxMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MTA8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90Ym9keT4KKwkgIDwvdGdyb3VwPgorCTwvaW5mb3JtYWx0YWJsZT48L3BhcmE+CisKKyAgICAgIDxwYXJhPlY0TDIgaW1hZ2UgZm9ybWF0cyBhcmUgZGVmaW5lZCBpbiA8eHJlZgorbGlua2VuZD0icGl4Zm10IiAvPi4gVGhlIGltYWdlIGZvcm1hdCBjYW4gYmUgc2VsZWN0ZWQgd2l0aCB0aGUKKyZWSURJT0MtUy1GTVQ7IGlvY3RsLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5BdWRpbzwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoZSA8Y29uc3RhbnQ+VklESU9DR0FVRElPPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DU0FVRElPPC9jb25zdGFudD4gaW9jdGwgYW5kIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fYXVkaW88L3N0cnVjdG5hbWU+IGFyZSB1c2VkIHRvIGVudW1lcmF0ZSB0aGUKK2F1ZGlvIGlucHV0cyBvZiBhIFY0TCBkZXZpY2UuIFRoZSBlcXVpdmFsZW50IFY0TDIgaW9jdGxzIGFyZQorJlZJRElPQy1HLUFVRElPOyBhbmQgJlZJRElPQy1TLUFVRElPOyB1c2luZyAmdjRsMi1hdWRpbzsgYXMKK2Rpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmF1ZGlvPC9zdHJ1Y3RmaWVsZD4gImNoYW5uZWwgbnVtYmVyIgorZmllbGQgY291bnRpbmcgYXVkaW8gaW5wdXRzIHdhcyByZW5hbWVkIHRvCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPi48L3BhcmE+CisKKyAgICAgIDxwYXJhPk9uIDxjb25zdGFudD5WSURJT0NTQVVESU88L2NvbnN0YW50PiB0aGUKKzxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc2VsZWN0cyA8ZW1waGFzaXM+b25lPC9lbXBoYXNpcz4KK29mIHRoZSA8Y29uc3RhbnQ+VklERU9fU09VTkRfTU9OTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJREVPX1NPVU5EX1NURVJFTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJREVPX1NPVU5EX0xBTkcxPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WSURFT19TT1VORF9MQU5HMjwvY29uc3RhbnQ+IGF1ZGlvIGRlbW9kdWxhdGlvbiBtb2Rlcy4gV2hlbgordGhlIGN1cnJlbnQgYXVkaW8gc3RhbmRhcmQgaXMgQlRTQworPGNvbnN0YW50PlZJREVPX1NPVU5EX0xBTkcyPC9jb25zdGFudD4gcmVmZXJzIHRvIFNBUCBhbmQKKzxjb25zdGFudD5WSURFT19TT1VORF9MQU5HMTwvY29uc3RhbnQ+IGlzIG1lYW5pbmdsZXNzLiBBbHNvCit1bmRvY3VtZW50ZWQgaW4gdGhlIFY0TCBzcGVjaWZpY2F0aW9uLCB0aGVyZSBpcyBubyB3YXkgdG8gcXVlcnkgdGhlCitzZWxlY3RlZCBtb2RlLiBPbiA8Y29uc3RhbnQ+VklESU9DR0FVRElPPC9jb25zdGFudD4gdGhlIGRyaXZlciByZXR1cm5zCit0aGUgPGVtcGhhc2lzPmFjdHVhbGx5IHJlY2VpdmVkPC9lbXBoYXNpcz4gYXVkaW8gcHJvZ3JhbW1lcyBpbiB0aGlzCitmaWVsZC4gSW4gdGhlIFY0TDIgQVBJIHRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZSAmdjRsMi10dW5lcjsKKzxzdHJ1Y3RmaWVsZD5yeHN1YmNoYW5zPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+YXVkbW9kZTwvc3RydWN0ZmllbGQ+IGZpZWxkcywgcmVzcGVjdGl2ZWx5LiBTZWUgPHhyZWYKK2xpbmtlbmQ9InR1bmVyIiAvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0dW5lcnMuIFJlbGF0ZWQgdG8gYXVkaW8KK21vZGVzICZ2NGwyLWF1ZGlvOyBhbHNvIHJlcG9ydHMgaWYgdGhpcyBpcyBhIG1vbm8gb3Igc3RlcmVvCitpbnB1dCwgcmVnYXJkbGVzcyBpZiB0aGUgc291cmNlIGlzIGEgdHVuZXIuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGZpZWxkcyB3aGVyZSByZXBsYWNlZCBieSBWNEwyIGNvbnRyb2xzCithY2Nlc3NpYmxlIHdpdGggdGhlICZWSURJT0MtUVVFUllDVFJMOywgJlZJRElPQy1HLUNUUkw7IGFuZAorJlZJRElPQy1TLUNUUkw7IGlvY3Rsczo8aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMiI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19hdWRpbzwvc3RydWN0bmFtZT48L2VudHJ5PgorCQk8ZW50cnk+VjRMMiBDb250cm9sIElEPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90aGVhZD4KKwkgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHN0cnVjdGZpZWxkPnZvbHVtZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19WT0xVTUU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5iYXNzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0JBU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD50cmVibGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fVFJFQkxFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48c3RydWN0ZmllbGQ+YmFsYW5jZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19CQUxBTkNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3Rib2R5PgorCSAgPC90Z3JvdXA+CisJPC9pbmZvcm1hbHRhYmxlPjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIGNvbnRyb2xzIGFyZSBzdXBwb3J0ZWQgYnkgYQorZHJpdmVyIFY0TCBwcm92aWRlcyB0aGUgPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4KKzxjb25zdGFudD5WSURFT19BVURJT19WT0xVTUU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURFT19BVURJT19CQVNTPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklERU9fQVVESU9fVFJFQkxFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklERU9fQVVESU9fQkFMQU5DRTwvY29uc3RhbnQ+LiBJbiB0aGUgVjRMMiBBUEkgdGhlCismVklESU9DLVFVRVJZQ1RSTDsgaW9jdGwgcmVwb3J0cyBpZiB0aGUgcmVzcGVjdGl2ZSBjb250cm9sIGlzCitzdXBwb3J0ZWQuIEFjY29yZGluZ2x5IHRoZSA8Y29uc3RhbnQ+VklERU9fQVVESU9fTVVUQUJMRTwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlZJREVPX0FVRElPX01VVEU8L2NvbnN0YW50PiBmbGFncyB3aGVyZSByZXBsYWNlZCBieSB0aGUKK2Jvb2xlYW4gPGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX01VVEU8L2NvbnN0YW50PiBjb250cm9sLjwvcGFyYT4KKworICAgICAgPHBhcmE+QWxsIFY0TDIgY29udHJvbHMgaGF2ZSBhIDxzdHJ1Y3RmaWVsZD5zdGVwPC9zdHJ1Y3RmaWVsZD4KK2F0dHJpYnV0ZSByZXBsYWNpbmcgdGhlIHN0cnVjdCA8c3RydWN0bmFtZT52aWRlb19hdWRpbzwvc3RydWN0bmFtZT4KKzxzdHJ1Y3RmaWVsZD5zdGVwPC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFRoZSBWNEwgYXVkaW8gY29udHJvbHMgYXJlCithc3N1bWVkIHRvIHJhbmdlIGZyb20gMCB0byA2NTUzNSB3aXRoIG5vIHBhcnRpY3VsYXIgcmVzZXQgdmFsdWUuIFRoZQorVjRMMiBBUEkgcGVybWl0cyBhcmJpdHJhcnkgbGltaXRzIGFuZCBkZWZhdWx0cyB3aGljaCBjYW4gYmUgcXVlcmllZAord2l0aCB0aGUgJlZJRElPQy1RVUVSWUNUUkw7IGlvY3RsLiBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dAorY29udHJvbHMgc2VlIDx4cmVmIGxpbmtlbmQ9ImNvbnRyb2wiIC8+LjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5GcmFtZSBCdWZmZXIgT3ZlcmxheTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoZSBWNEwyIGlvY3RscyBlcXVpdmFsZW50IHRvCis8Y29uc3RhbnQ+VklESU9DR0ZCVUY8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlZJRElPQ1NGQlVGPC9jb25zdGFudD4KK2FyZSAmVklESU9DLUctRkJVRjsgYW5kICZWSURJT0MtUy1GQlVGOy4gVGhlCis8c3RydWN0ZmllbGQ+YmFzZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fYnVmZmVyPC9zdHJ1Y3RuYW1lPiByZW1haW5lZCB1bmNoYW5nZWQsIGV4Y2VwdCBWNEwyCitkZWZpbmVzIGEgZmxhZyB0byBpbmRpY2F0ZSBub24tZGVzdHJ1Y3RpdmUgb3ZlcmxheXMgaW5zdGVhZCBvZiBhCis8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+IHBvaW50ZXIuIEFsbCBvdGhlciBmaWVsZHMgbW92ZWQgaW50byB0aGUKKyZ2NGwyLXBpeC1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPiBzdWJzdHJ1Y3R1cmUgb2YKKyZ2NGwyLWZyYW1lYnVmZmVyOy4gVGhlIDxzdHJ1Y3RmaWVsZD5kZXB0aDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcworcmVwbGFjZWQgYnkgPHN0cnVjdGZpZWxkPnBpeGVsZm9ybWF0PC9zdHJ1Y3RmaWVsZD4uIFNlZSA8eHJlZgorCSAgbGlua2VuZD0icGl4Zm10LXJnYiIgLz4gZm9yIGEgbGlzdCBvZiBSR0IgZm9ybWF0cyBhbmQgdGhlaXIKK3Jlc3BlY3RpdmUgY29sb3IgZGVwdGhzLjwvcGFyYT4KKworICAgICAgPHBhcmE+SW5zdGVhZCBvZiB0aGUgc3BlY2lhbCBpb2N0bHMKKzxjb25zdGFudD5WSURJT0NHV0lOPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5WSURJT0NTV0lOPC9jb25zdGFudD4KK1Y0TDIgdXNlcyB0aGUgZ2VuZXJhbC1wdXJwb3NlIGRhdGEgZm9ybWF0IG5lZ290aWF0aW9uIGlvY3RscworJlZJRElPQy1HLUZNVDsgYW5kICZWSURJT0MtUy1GTVQ7LiBUaGV5IHRha2UgYSBwb2ludGVyIHRvIGEKKyZ2NGwyLWZvcm1hdDsgYXMgYXJndW1lbnQuIEhlcmUgdGhlIDxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPgorbWVtYmVyIG9mIHRoZSA8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gdW5pb24gaXMgdXNlZCwgYQorJnY0bDItd2luZG93Oy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+eDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnk8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gZmllbGRzIG9mIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fd2luZG93PC9zdHJ1Y3RuYW1lPiBtb3ZlZCBpbnRvICZ2NGwyLXJlY3Q7CitzdWJzdHJ1Y3R1cmUgPHN0cnVjdGZpZWxkPnc8L3N0cnVjdGZpZWxkPiBvZiBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfd2luZG93PC9zdHJ1Y3RuYW1lPi4gVGhlCis8c3RydWN0ZmllbGQ+Y2hyb21ha2V5PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+Y2xpcHM8L3N0cnVjdGZpZWxkPiwgYW5kCis8c3RydWN0ZmllbGQ+Y2xpcGNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGRzIHJlbWFpbmVkIHVuY2hhbmdlZC4gU3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19jbGlwPC9zdHJ1Y3RuYW1lPiB3YXMgcmVuYW1lZCB0byAmdjRsMi1jbGlwOywgYWxzbworY29udGFpbmluZyBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3JlY3Q8L3N0cnVjdG5hbWU+LCBidXQgdGhlCitzZW1hbnRpY3MgYXJlIHN0aWxsIHRoZSBzYW1lLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURFT19XSU5ET1dfSU5URVJMQUNFPC9jb25zdGFudD4gZmxhZyB3YXMKK2Ryb3BwZWQuIEluc3RlYWQgYXBwbGljYXRpb25zIG11c3Qgc2V0IHRoZQorPHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8KKzxjb25zdGFudD5WNEwyX0ZJRUxEX0FOWTwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9JTlRFUkxBQ0VEPC9jb25zdGFudD4uIFRoZQorPGNvbnN0YW50PlZJREVPX1dJTkRPV19DSFJPTUFLRVk8L2NvbnN0YW50PiBmbGFnIG1vdmVkIGludG8KKyZ2NGwyLWZyYW1lYnVmZmVyOywgdW5kZXIgdGhlIG5ldyBuYW1lCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZPC9jb25zdGFudD4uPC9wYXJhPgorCisgICAgICA8cGFyYT5JbiBWNEwsIHN0b3JpbmcgYSBiaXRtYXAgcG9pbnRlciBpbgorPHN0cnVjdGZpZWxkPmNsaXBzPC9zdHJ1Y3RmaWVsZD4gYW5kIHNldHRpbmcKKzxzdHJ1Y3RmaWVsZD5jbGlwY291bnQ8L3N0cnVjdGZpZWxkPiB0bworPGNvbnN0YW50PlZJREVPX0NMSVBfQklUTUFQPC9jb25zdGFudD4gKC0xKSByZXF1ZXN0cyBiaXRtYXAKK2NsaXBwaW5nLCB1c2luZyBhIGZpeGVkIHNpemUgYml0bWFwIG9mIDEwMjQgJnRpbWVzOyA2MjUgYml0cy4gU3RydWN0Cis8c3RydWN0bmFtZT52NGwyX3dpbmRvdzwvc3RydWN0bmFtZT4gaGFzIGEgc2VwYXJhdGUKKzxzdHJ1Y3RmaWVsZD5iaXRtYXA8L3N0cnVjdGZpZWxkPiBwb2ludGVyIGZpZWxkIGZvciB0aGlzIHB1cnBvc2UgYW5kCit0aGUgYml0bWFwIHNpemUgaXMgZGV0ZXJtaW5lZCBieSA8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPncuaGVpZ2h0PC9zdHJ1Y3RmaWVsZD4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ0NBUFRVUkU8L2NvbnN0YW50PiBpb2N0bCB0byBlbmFibGUgb3IKK2Rpc2FibGUgb3ZlcmxheSB3YXMgcmVuYW1lZCB0byAmVklESU9DLU9WRVJMQVk7LjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5Dcm9wcGluZzwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRvIGNhcHR1cmUgb25seSBhIHN1YnNlY3Rpb24gb2YgdGhlIGZ1bGwgcGljdHVyZSBWNEwKK2RlZmluZXMgdGhlIDxjb25zdGFudD5WSURJT0NHQ0FQVFVSRTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ1NDQVBUVVJFPC9jb25zdGFudD4gaW9jdGxzIHVzaW5nIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fY2FwdHVyZTwvc3RydWN0bmFtZT4uIFRoZSBlcXVpdmFsZW50IFY0TDIgaW9jdGxzIGFyZQorJlZJRElPQy1HLUNST1A7IGFuZCAmVklESU9DLVMtQ1JPUDsgdXNpbmcgJnY0bDItY3JvcDssIGFuZCB0aGUgcmVsYXRlZAorJlZJRElPQy1DUk9QQ0FQOyBpb2N0bC4gVGhpcyBpcyBhIHJhdGhlciBjb21wbGV4IG1hdHRlciwgc2VlCis8eHJlZiBsaW5rZW5kPSJjcm9wIiAvPiBmb3IgZGV0YWlscy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+eDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnk8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gZmllbGRzIG1vdmVkIGludG8gJnY0bDItcmVjdDsKK3N1YnN0cnVjdHVyZSA8c3RydWN0ZmllbGQ+Yzwvc3RydWN0ZmllbGQ+IG9mIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9jcm9wPC9zdHJ1Y3RuYW1lPi4gVGhlCis8c3RydWN0ZmllbGQ+ZGVjaW1hdGlvbjwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBkcm9wcGVkLiBJbiB0aGUgVjRMMgorQVBJIHRoZSBzY2FsaW5nIGZhY3RvciBpcyBpbXBsaWVkIGJ5IHRoZSBzaXplIG9mIHRoZSBjcm9wcGluZworcmVjdGFuZ2xlIGFuZCB0aGUgc2l6ZSBvZiB0aGUgY2FwdHVyZWQgb3Igb3ZlcmxhaWQgaW1hZ2UuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJREVPX0NBUFRVUkVfT0REPC9jb25zdGFudD4KK2FuZCA8Y29uc3RhbnQ+VklERU9fQ0FQVFVSRV9FVkVOPC9jb25zdGFudD4gZmxhZ3MgdG8gY2FwdHVyZSBvbmx5IHRoZQorb2RkIG9yIGV2ZW4gZmllbGQsIHJlc3BlY3RpdmVseSwgd2VyZSByZXBsYWNlZCBieQorPGNvbnN0YW50PlY0TDJfRklFTERfVE9QPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9CT1RUT008L2NvbnN0YW50PiBpbiB0aGUgZmllbGQgbmFtZWQKKzxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IG9mICZ2NGwyLXBpeC1mb3JtYXQ7IGFuZAorJnY0bDItd2luZG93Oy4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCB0byBzZWxlY3QgYSBjYXB0dXJlIG9yCitvdmVybGF5IGZvcm1hdCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bC48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UmVhZGluZyBJbWFnZXMsIE1lbW9yeSBNYXBwaW5nPC90aXRsZT4KKworICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkNhcHR1cmluZyB1c2luZyB0aGUgcmVhZCBtZXRob2Q8L3RpdGxlPgorCisJPHBhcmE+VGhlcmUgaXMgbm8gZXNzZW50aWFsIGRpZmZlcmVuY2UgYmV0d2VlbiByZWFkaW5nIGltYWdlcworZnJvbSBhIFY0TCBvciBWNEwyIGRldmljZSB1c2luZyB0aGUgJmZ1bmMtcmVhZDsgZnVuY3Rpb24sIGhvd2V2ZXIgVjRMMgorZHJpdmVycyBhcmUgbm90IHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhpcyBJL08gbWV0aG9kLiBBcHBsaWNhdGlvbnMgY2FuCitkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSB3aXRoIHRoZSAmVklESU9DLVFVRVJZQ0FQOworaW9jdGwuIEFsbCBWNEwyIGRldmljZXMgZXhjaGFuZ2luZyBkYXRhIHdpdGggYXBwbGljYXRpb25zIG11c3Qgc3VwcG9ydAordGhlICZmdW5jLXNlbGVjdDsgYW5kICZmdW5jLXBvbGw7IGZ1bmN0aW9ucy48L3BhcmE+CisKKwk8cGFyYT5UbyBzZWxlY3QgYW4gaW1hZ2UgZm9ybWF0IGFuZCBzaXplLCBWNEwgcHJvdmlkZXMgdGhlCis8Y29uc3RhbnQ+VklESU9DU1BJQ1Q8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlZJRElPQ1NXSU48L2NvbnN0YW50PgoraW9jdGxzLiBWNEwyIHVzZXMgdGhlIGdlbmVyYWwtcHVycG9zZSBkYXRhIGZvcm1hdCBuZWdvdGlhdGlvbiBpb2N0bHMKKyZWSURJT0MtRy1GTVQ7IGFuZCAmVklESU9DLVMtRk1UOy4gVGhleSB0YWtlIGEgcG9pbnRlciB0byBhCismdjRsMi1mb3JtYXQ7IGFzIGFyZ3VtZW50LCBoZXJlIHRoZSAmdjRsMi1waXgtZm9ybWF0OyBuYW1lZAorPHN0cnVjdGZpZWxkPnBpeDwvc3RydWN0ZmllbGQ+IG9mIGl0cyA8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4KK3VuaW9uIGlzIHVzZWQuPC9wYXJhPgorCisJPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFY0TDIgcmVhZCBpbnRlcmZhY2Ugc2VlCis8eHJlZiBsaW5rZW5kPSJydyIgLz4uPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkNhcHR1cmluZyB1c2luZyBtZW1vcnkgbWFwcGluZzwvdGl0bGU+CisKKwk8cGFyYT5BcHBsaWNhdGlvbnMgY2FuIHJlYWQgZnJvbSBWNEwgZGV2aWNlcyBieSBtYXBwaW5nCitidWZmZXJzIGluIGRldmljZSBtZW1vcnksIG9yIG1vcmUgb2Z0ZW4ganVzdCBidWZmZXJzIGFsbG9jYXRlZCBpbgorRE1BLWFibGUgc3lzdGVtIG1lbW9yeSwgaW50byB0aGVpciBhZGRyZXNzIHNwYWNlLiBUaGlzIGF2b2lkcyB0aGUgZGF0YQorY29weWluZyBvdmVyaGVhZCBvZiB0aGUgcmVhZCBtZXRob2QuIFY0TDIgc3VwcG9ydHMgbWVtb3J5IG1hcHBpbmcgYXMKK3dlbGwsIHdpdGggYSBmZXcgZGlmZmVyZW5jZXMuPC9wYXJhPgorCisJPGluZm9ybWFsdGFibGU+CisJICA8dGdyb3VwIGNvbHM9IjIiPgorCSAgICA8dGhlYWQ+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PlY0TDwvZW50cnk+CisJCTxlbnRyeT5WNEwyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90aGVhZD4KKwkgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PC9lbnRyeT4KKwkJPGVudHJ5PlRoZSBpbWFnZSBmb3JtYXQgbXVzdCBiZSBzZWxlY3RlZCBiZWZvcmUKK2J1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgd2l0aCB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuIFdoZW4gbm8gZm9ybWF0CitpcyBzZWxlY3RlZCB0aGUgZHJpdmVyIG1heSB1c2UgdGhlIGxhc3QsIHBvc3NpYmx5IGJ5IGFub3RoZXIKK2FwcGxpY2F0aW9uIHJlcXVlc3RlZCBmb3JtYXQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHBhcmE+QXBwbGljYXRpb25zIGNhbm5vdCBjaGFuZ2UgdGhlIG51bWJlciBvZgorYnVmZmVycy4gVGhlIGl0IGlzIGJ1aWx0IGludG8gdGhlIGRyaXZlciwgdW5sZXNzIGl0IGhhcyBhIG1vZHVsZQorb3B0aW9uIHRvIGNoYW5nZSB0aGUgbnVtYmVyIHdoZW4gdGhlIGRyaXZlciBtb2R1bGUgaXMKK2xvYWRlZC48L3BhcmE+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPlRoZSAmVklESU9DLVJFUUJVRlM7IGlvY3RsIGFsbG9jYXRlcyB0aGUKK2Rlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMsIHRoaXMgaXMgYSByZXF1aXJlZCBzdGVwIGluIHRoZSBpbml0aWFsaXphdGlvbgorc2VxdWVuY2UuPC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxwYXJhPkRyaXZlcnMgbWFwIGFsbCBidWZmZXJzIGFzIG9uZSBjb250aWd1b3VzCityYW5nZSBvZiBtZW1vcnkuIFRoZSA8Y29uc3RhbnQ+VklESU9DR01CVUY8L2NvbnN0YW50PiBpb2N0bCBpcworYXZhaWxhYmxlIHRvIHF1ZXJ5IHRoZSBudW1iZXIgb2YgYnVmZmVycywgdGhlIG9mZnNldCBvZiBlYWNoIGJ1ZmZlcgorZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHZpcnR1YWwgZmlsZSwgYW5kIHRoZSBvdmVyYWxsIGFtb3VudCBvZiBtZW1vcnkKK3VzZWQsIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGFyZ3VtZW50cyBmb3IgdGhlICZmdW5jLW1tYXA7CitmdW5jdGlvbi48L3BhcmE+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPkJ1ZmZlcnMgYXJlIGluZGl2aWR1YWxseSBtYXBwZWQuIFRoZQorb2Zmc2V0IGFuZCBzaXplIG9mIGVhY2ggYnVmZmVyIGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggdGhlCismVklESU9DLVFVRVJZQlVGOyBpb2N0bC48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NNQ0FQVFVSRTwvY29uc3RhbnQ+Citpb2N0bCBwcmVwYXJlcyBhIGJ1ZmZlciBmb3IgY2FwdHVyaW5nLiBJdCBhbHNvIGRldGVybWluZXMgdGhlIGltYWdlCitmb3JtYXQgZm9yIHRoaXMgYnVmZmVyLiBUaGUgaW9jdGwgcmV0dXJucyBpbW1lZGlhdGVseSwgZXZlbnR1YWxseSB3aXRoCithbiAmRUFHQUlOOyBpZiBubyB2aWRlbyBzaWduYWwgaGFkIGJlZW4gZGV0ZWN0ZWQuIFdoZW4gdGhlIGRyaXZlcgorc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSBidWZmZXIgYXBwbGljYXRpb25zIGNhbiBjYWxsIHRoZSBpb2N0bCBtdWx0aXBsZQordGltZXMgYW5kIHRodXMgaGF2ZSBtdWx0aXBsZSBvdXRzdGFuZGluZyBjYXB0dXJlCityZXF1ZXN0cy48L3BhcmE+PHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NTWU5DPC9jb25zdGFudD4gaW9jdGwKK3N1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBhIHBhcnRpY3VsYXIgYnVmZmVyIGhhcyBiZWVuCitmaWxsZWQuPC9wYXJhPjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT5Ecml2ZXJzIG1haW50YWluIGFuIGluY29taW5nIGFuZCBvdXRnb2luZworcXVldWUuICZWSURJT0MtUUJVRjsgZW5xdWV1ZXMgYW55IGVtcHR5IGJ1ZmZlciBpbnRvIHRoZSBpbmNvbWluZworcXVldWUuIEZpbGxlZCBidWZmZXJzIGFyZSBkZXF1ZXVlZCBmcm9tIHRoZSBvdXRnb2luZyBxdWV1ZSB3aXRoIHRoZQorJlZJRElPQy1EUUJVRjsgaW9jdGwuIFRvIHdhaXQgdW50aWwgZmlsbGVkIGJ1ZmZlcnMgYmVjb21lIGF2YWlsYWJsZSB0aGlzCitmdW5jdGlvbiwgJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBjYW4gYmUgdXNlZC4gVGhlCismVklESU9DLVNUUkVBTU9OOyBpb2N0bCBtdXN0IGJlIGNhbGxlZCBvbmNlIGFmdGVyIGVucXVldWluZyBvbmUgb3IKK21vcmUgYnVmZmVycyB0byBzdGFydCBjYXB0dXJpbmcuIEl0cyBjb3VudGVycGFydAorJlZJRElPQy1TVFJFQU1PRkY7IHN0b3BzIGNhcHR1cmluZyBhbmQgZGVxdWV1ZXMgYWxsIGJ1ZmZlcnMgZnJvbSBib3RoCitxdWV1ZXMuIEFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgdGhlIHNpZ25hbCBzdGF0dXMsIGlmIGtub3duLCB3aXRoIHRoZQorJlZJRElPQy1FTlVNSU5QVVQ7IGlvY3RsLjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3Rib2R5PgorCSAgPC90Z3JvdXA+CisJPC9pbmZvcm1hbHRhYmxlPgorCisJPHBhcmE+Rm9yIGEgbW9yZSBpbi1kZXB0aCBkaXNjdXNzaW9uIG9mIG1lbW9yeSBtYXBwaW5nIGFuZAorZXhhbXBsZXMsIHNlZSA8eHJlZiBsaW5rZW5kPSJtbWFwIiAvPi48L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UmVhZGluZyBSYXcgVkJJIERhdGE8L3RpdGxlPgorCisgICAgICA8cGFyYT5PcmlnaW5hbGx5IHRoZSBWNEwgQVBJIGRpZCBub3Qgc3BlY2lmeSBhIHJhdyBWQkkgY2FwdHVyZQoraW50ZXJmYWNlLCBvbmx5IHRoZSBkZXZpY2UgZmlsZSA8ZmlsZW5hbWU+L2Rldi92Ymk8L2ZpbGVuYW1lPiB3YXMKK3Jlc2VydmVkIGZvciB0aGlzIHB1cnBvc2UuIFRoZSBvbmx5IGRyaXZlciBzdXBwb3J0aW5nIHRoaXMgaW50ZXJmYWNlCit3YXMgdGhlIEJUVFYgZHJpdmVyLCBkZS1mYWN0byBkZWZpbmluZyB0aGUgVjRMIFZCSSBpbnRlcmZhY2UuIFJlYWRpbmcKK2Zyb20gdGhlIGRldmljZSB5aWVsZHMgYSByYXcgVkJJIGltYWdlIHdpdGggdGhlIGZvbGxvd2luZworcGFyYW1ldGVyczo8aW5mb3JtYWx0YWJsZT4KKwkgICAgPHRncm91cCBjb2xzPSIyIj4KKwkgICAgICA8dGhlYWQ+CisJCTxyb3c+CisJCSAgPGVudHJ5PiZ2NGwyLXZiaS1mb3JtYXQ7PC9lbnRyeT4KKwkJICA8ZW50cnk+VjRMLCBCVFRWIGRyaXZlcjwvZW50cnk+CisJCTwvcm93PgorCSAgICAgIDwvdGhlYWQ+CisJICAgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c2FtcGxpbmdfcmF0ZTwvZW50cnk+CisJCSAgPGVudHJ5PjI4NjM2MzYzJm5ic3A7SHogTlRTQyAob3IgYW55IG90aGVyIDUyNS1saW5lCitzdGFuZGFyZCk7IDM1NDY4OTUwJm5ic3A7SHogUEFMIGFuZCBTRUNBTSAoNjI1LWxpbmUgc3RhbmRhcmRzKTwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5vZmZzZXQ8L2VudHJ5PgorCQkgIDxlbnRyeT4/PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnNhbXBsZXNfcGVyX2xpbmU8L2VudHJ5PgorCQkgIDxlbnRyeT4yMDQ4PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnNhbXBsZV9mb3JtYXQ8L2VudHJ5PgorCQkgIDxlbnRyeT5WNEwyX1BJWF9GTVRfR1JFWS4gVGhlIGxhc3QgZm91ciBieXRlcyAoYQorbWFjaGluZSBlbmRpYW5lc3MgaW50ZWdlcikgY29udGFpbiBhIGZyYW1lIGNvdW50ZXIuPC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0W108L2VudHJ5PgorCQkgIDxlbnRyeT4xMCwgMjczIE5UU0M7IDIyLCAzMzUgUEFMIGFuZCBTRUNBTTwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5jb3VudFtdPC9lbnRyeT4KKwkJICA8ZW50cnk+PHBhcmE+MTYsIDE2PGZvb3Rub3RlPjxwYXJhPk9sZCBkcml2ZXIKK3ZlcnNpb25zIHVzZWQgZGlmZmVyZW50IHZhbHVlcywgZXZlbnR1YWxseSB0aGUgY3VzdG9tCis8Y29uc3RhbnQ+QlRUVl9WQklTSVpFPC9jb25zdGFudD4gaW9jdGwgd2FzIGFkZGVkIHRvIHF1ZXJ5IHRoZQorY29ycmVjdCB2YWx1ZXMuPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5mbGFnczwvZW50cnk+CisJCSAgPGVudHJ5PjA8L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L3Rncm91cD4KKwk8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCisgICAgICA8cGFyYT5VbmRvY3VtZW50ZWQgaW4gdGhlIFY0TCBzcGVjaWZpY2F0aW9uLCBpbiBMaW51eCAyLjMgdGhlCis8Y29uc3RhbnQ+VklESU9DR1ZCSUZNVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ1NWQklGTVQ8L2NvbnN0YW50PiBpb2N0bHMgdXNpbmcgc3RydWN0Cis8c3RydWN0bmFtZT52YmlfZm9ybWF0PC9zdHJ1Y3RuYW1lPiB3ZXJlIGFkZGVkIHRvIGRldGVybWluZSB0aGUgVkJJCitpbWFnZSBwYXJhbWV0ZXJzLiBUaGVzZSBpb2N0bHMgYXJlIG9ubHkgcGFydGlhbGx5IGNvbXBhdGlibGUgd2l0aCB0aGUKK1Y0TDIgVkJJIGludGVyZmFjZSBzcGVjaWZpZWQgaW4gPHhyZWYgbGlua2VuZD0icmF3LXZiaSIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5BbiA8c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgZG9lcyBub3QKK2V4aXN0LCA8c3RydWN0ZmllbGQ+c2FtcGxlX2Zvcm1hdDwvc3RydWN0ZmllbGQ+IGlzIHN1cHBvc2VkIHRvIGJlCis8Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SQVc8L2NvbnN0YW50PiwgZXF1aXZhbGVudCB0bworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9HUkVZPC9jb25zdGFudD4uIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZQorcHJvYmFibHkgZXF1aXZhbGVudCB0byAmdjRsMi12YmktZm9ybWF0Oy48L3BhcmE+CisKKyAgICAgIDxwYXJhPkFwcGFyZW50bHkgb25seSB0aGUgWm9yYW4gKFpSIDM2MTIwKSBkcml2ZXIgaW1wbGVtZW50cwordGhlc2UgaW9jdGxzLiBUaGUgc2VtYW50aWNzIGRpZmZlciBmcm9tIHRob3NlIHNwZWNpZmllZCBmb3IgVjRMMiBpbiB0d28KK3dheXMuIFRoZSBwYXJhbWV0ZXJzIGFyZSByZXNldCBvbiAmZnVuYy1vcGVuOyBhbmQKKzxjb25zdGFudD5WSURJT0NTVkJJRk1UPC9jb25zdGFudD4gYWx3YXlzIHJldHVybnMgYW4gJkVJTlZBTDsgaWYgdGhlCitwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzPC90aXRsZT4KKworICAgICAgPHBhcmE+VjRMMiBoYXMgbm8gZXF1aXZhbGVudCBvZiB0aGUKKzxjb25zdGFudD5WSURJT0NHVU5JVDwvY29uc3RhbnQ+IGlvY3RsLiBBcHBsaWNhdGlvbnMgY2FuIGZpbmQgdGhlIFZCSQorZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIHZpZGVvIGNhcHR1cmUgZGV2aWNlIChvciB2aWNlIHZlcnNhKSBieQorcmVvcGVuaW5nIHRoZSBkZXZpY2UgYW5kIHJlcXVlc3RpbmcgVkJJIGRhdGEuIEZvciBkZXRhaWxzIHNlZQorPHhyZWYgbGlua2VuZD0ib3BlbiIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5ObyByZXBsYWNlbWVudCBleGlzdHMgZm9yIDxjb25zdGFudD5WSURJT0NLRVk8L2NvbnN0YW50PiwKK2FuZCB0aGUgVjRMIGZ1bmN0aW9ucyBmb3IgbWljcm9jb2RlIHByb2dyYW1taW5nLiBBIG5ldyBpbnRlcmZhY2UgZm9yCitNUEVHIGNvbXByZXNzaW9uIGFuZCBwbGF5YmFjayBkZXZpY2VzIGlzIGRvY3VtZW50ZWQgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9ImV4dGVuZGVkLWNvbnRyb2xzIiAvPi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iaGlzdC12NGwyIj4KKyAgICA8dGl0bGU+Q2hhbmdlcyBvZiB0aGUgVjRMMiBBUEk8L3RpdGxlPgorCisgICAgPHBhcmE+U29vbiBhZnRlciB0aGUgVjRMIEFQSSB3YXMgYWRkZWQgdG8gdGhlIGtlcm5lbCBpdCB3YXMKK2NyaXRpY2lzZWQgYXMgdG9vIGluZmxleGlibGUuIEluIEF1Z3VzdCAxOTk4IEJpbGwgRGlya3MgcHJvcG9zZWQgYQorbnVtYmVyIG9mIGltcHJvdmVtZW50cyBhbmQgYmVnYW4gdG8gd29yayBvbiBkb2N1bWVudGF0aW9uLCBleGFtcGxlCitkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMuIFdpdGggdGhlIGhlbHAgb2Ygb3RoZXIgdm9sdW50ZWVycyB0aGlzCitldmVudHVhbGx5IGJlY2FtZSB0aGUgVjRMMiBBUEksIG5vdCBqdXN0IGFuIGV4dGVuc2lvbiBidXQgYQorcmVwbGFjZW1lbnQgZm9yIHRoZSBWNEwgQVBJLiBIb3dldmVyIGl0IHRvb2sgYW5vdGhlciBmb3VyIHllYXJzIGFuZAordHdvIHN0YWJsZSBrZXJuZWwgcmVsZWFzZXMgdW50aWwgdGhlIG5ldyBBUEkgd2FzIGZpbmFsbHkgYWNjZXB0ZWQgZm9yCitpbmNsdXNpb24gaW50byB0aGUga2VybmVsIGluIGl0cyBwcmVzZW50IGZvcm0uPC9wYXJhPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+RWFybHkgVmVyc2lvbnM8L3RpdGxlPgorICAgICAgPHBhcmE+MTk5OC0wOC0yMDogRmlyc3QgdmVyc2lvbi48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMDgtMjc6IFRoZSAmZnVuYy1zZWxlY3Q7IGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkLjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0wOS0xMDogTmV3IHZpZGVvIHN0YW5kYXJkIGludGVyZmFjZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMDktMTg6IFRoZSA8Y29uc3RhbnQ+VklESU9DX05PTkNBUDwvY29uc3RhbnQ+IGlvY3RsCit3YXMgcmVwbGFjZWQgYnkgdGhlIG90aGVyd2lzZSBtZWFuaW5nbGVzcyA8Y29uc3RhbnQ+T19UUlVOQzwvY29uc3RhbnQ+CismZnVuYy1vcGVuOyBmbGFnLCBhbmQgdGhlIGFsaWFzZXMgPGNvbnN0YW50Pk9fTk9OQ0FQPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+T19OT0lPPC9jb25zdGFudD4gd2VyZSBkZWZpbmVkLiBBcHBsaWNhdGlvbnMgY2FuIHNldCB0aGlzCitmbGFnIGlmIHRoZXkgaW50ZW5kIHRvIGFjY2VzcyBjb250cm9scyBvbmx5LCBhcyBvcHBvc2VkIHRvIGNhcHR1cmUKK2FwcGxpY2F0aW9ucyB3aGljaCBuZWVkIGV4Y2x1c2l2ZSBhY2Nlc3MuIFRoZQorPGNvbnN0YW50PlZJREVPX1NURF9YWFg8L2NvbnN0YW50PiBpZGVudGlmaWVycyBhcmUgbm93IG9yZGluYWxzCitpbnN0ZWFkIG9mIGZsYWdzLCBhbmQgdGhlIDxmdW5jdGlvbj52aWRlb19zdGRfY29uc3RydWN0KCk8L2Z1bmN0aW9uPgoraGVscGVyIGZ1bmN0aW9uIHRha2VzIGlkIGFuZCB0cmFuc21pc3Npb24gYXJndW1lbnRzLjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0wOS0yODogUmV2YW1wZWQgdmlkZW8gc3RhbmRhcmQuIE1hZGUgdmlkZW8gY29udHJvbHMKK2luZGl2aWR1YWxseSBlbnVtZXJhYmxlLjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0xMC0wMjogVGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcworcmVtb3ZlZCBmcm9tIHN0cnVjdCA8c3RydWN0bmFtZT52aWRlb19zdGFuZGFyZDwvc3RydWN0bmFtZT4gYW5kIHRoZQorY29sb3Igc3ViY2FycmllciBmaWVsZHMgd2VyZSByZW5hbWVkLiBUaGUgJlZJRElPQy1RVUVSWVNURDsgaW9jdGwgd2FzCityZW5hbWVkIHRvICZWSURJT0MtRU5VTVNURDssICZWSURJT0MtRy1JTlBVVDsgdG8gJlZJRElPQy1FTlVNSU5QVVQ7LiBBCitmaXJzdCBkcmFmdCBvZiB0aGUgQ29kZWMgQVBJIHdhcyByZWxlYXNlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMTEtMDg6IE1hbnkgbWlub3IgY2hhbmdlcy4gTW9zdCBzeW1ib2xzIGhhdmUgYmVlbgorcmVuYW1lZC4gU29tZSBtYXRlcmlhbCBjaGFuZ2VzIHRvICZ2NGwyLWNhcGFiaWxpdHk7LjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0xMS0xMjogVGhlIHJlYWQvd3JpdGUgZGlyZWN0b24gb2Ygc29tZSBpb2N0bHMgd2FzIG1pc2RlZmluZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT4xOTk4LTExLTE0OiA8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjI0PC9jb25zdGFudD4KK2NoYW5nZWQgdG8gPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+LCBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMzI8L2NvbnN0YW50PiBjaGFuZ2VkIHRvCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjMyPC9jb25zdGFudD4uIEF1ZGlvIGNvbnRyb2xzIGFyZSBub3cKK2FjY2Vzc2libGUgd2l0aCB0aGUgJlZJRElPQy1HLUNUUkw7IGFuZCAmVklESU9DLVMtQ1RSTDsgaW9jdGxzIHVuZGVyCituYW1lcyBzdGFydGluZyB3aXRoIDxjb25zdGFudD5WNEwyX0NJRF9BVURJTzwvY29uc3RhbnQ+LiBUaGUKKzxjb25zdGFudD5WNEwyX01BSk9SPC9jb25zdGFudD4gZGVmaW5lIHdhcyByZW1vdmVkIGZyb20KKzxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gc2luY2UgaXQgd2FzIG9ubHkgdXNlZCBvbmNlIGluIHRoZQorPGZpbGVuYW1lPnZpZGVvZGV2PC9maWxlbmFtZT4ga2VybmVsIG1vZHVsZS4gVGhlCis8Y29uc3RhbnQ+WVVWNDIyPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5ZVVY0MTE8L2NvbnN0YW50PiBwbGFuYXIKK2ltYWdlIGZvcm1hdHMgd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMTEtMjg6IEEgZmV3IGlvY3RsIHN5bWJvbHMgY2hhbmdlZC4gSW50ZXJmYWNlcyBmb3IgY29kZWNzIGFuZAordmlkZW8gb3V0cHV0IGRldmljZXMgd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTktMDEtMTQ6IEEgcmF3IFZCSSBjYXB0dXJlIGludGVyZmFjZSB3YXMgYWRkZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT4xOTk5LTAxLTE5OiBUaGUgPGNvbnN0YW50PlZJRElPQ19ORVhUQlVGPC9jb25zdGFudD4gaW9jdGwKKyAgICAgIHdhcyByZW1vdmVkLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIFZlcnNpb24gMC4xNiAxOTk5LTAxLTMxPC90aXRsZT4KKyAgICAgIDxwYXJhPjE5OTktMDEtMjc6IFRoZXJlIGlzIG5vdyBvbmUgUUJVRiBpb2N0bCwgVklESU9DX1FXQlVGIGFuZCBWSURJT0NfUVJCVUYKK2FyZSBnb25lLiBWSURJT0NfUUJVRiB0YWtlcyBhIHY0bDJfYnVmZmVyIGFzIGEgcGFyYW1ldGVyLiBBZGRlZAorZGlnaXRhbCB6b29tIChjcm9wcGluZykgY29udHJvbHMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDwhLS0gV2hlcmUncyAwLjE3PyBtaHMgY291bGRuJ3QgZmluZCB0aGF0IHZpZGVvZGV2LmgsIHBlcmhhcHMgQmlsbAorCSBmb3Jnb3QgdG8gYnVtcCB0aGUgdmVyc2lvbiBudW1iZXIgb3IgbmV2ZXIgcmVsZWFzZWQgaXQuIC0tPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMTggMTk5OS0wMy0xNjwvdGl0bGU+CisgICAgICA8cGFyYT5BZGRlZCBhIHY0bCB0byBWNEwyIGlvY3RsIGNvbXBhdGliaWxpdHkgbGF5ZXIgdG8KK3ZpZGVvZGV2LmMuIERyaXZlciB3cml0ZXJzLCB0aGlzIGNoYW5nZXMgaG93IHlvdSBpbXBsZW1lbnQgeW91ciBpb2N0bAoraGFuZGxlci4gU2VlIHRoZSBEcml2ZXIgV3JpdGVyJ3MgR3VpZGUuIEFkZGVkIHNvbWUgbW9yZSBjb250cm9sIGlkCitjb2Rlcy48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMTkgMTk5OS0wNi0wNTwvdGl0bGU+CisgICAgICA8cGFyYT4xOTk5LTAzLTE4OiBGaWxsIGluIHRoZSBjYXRlZ29yeSBhbmQgY2F0bmFtZSBmaWVsZHMgb2YKK3Y0bDJfcXVlcnljdHJsIG9iamVjdHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyLiBSZXF1aXJlZCBhCittaW5vciBjaGFuZ2UgdG8gdGhlIFZJRElPQ19RVUVSWUNUUkwgaGFuZGxlcnMgaW4gdGhlIHNhbXBsZQorZHJpdmVycy48L3BhcmE+CisgICAgICA8cGFyYT4xOTk5LTAzLTMxOiBCZXR0ZXIgY29tcGF0aWJpbGl0eSBmb3IgdjRsIG1lbW9yeSBjYXB0dXJlCitpb2N0bHMuIFJlcXVpcmVzIGNoYW5nZXMgdG8gZHJpdmVycyB0byBmdWxseSBzdXBwb3J0IG5ldyBjb21wYXRpYmlsaXR5CitmZWF0dXJlcywgc2VlIERyaXZlciBXcml0ZXIncyBHdWlkZSBhbmQgdjRsMmNhcC5jLiBBZGRlZCBuZXcgY29udHJvbAorSURzOiBWNEwyX0NJRF9IRkxJUCwgX1ZGTElQLiBDaGFuZ2VkIFY0TDJfUElYX0ZNVF9ZVVY0MjJQIHRvIF9ZVVY0MjJQLAorYW5kIF9ZVVY0MTFQIHRvIF9ZVVY0MTFQLjwvcGFyYT4KKyAgICAgIDxwYXJhPjE5OTktMDQtMDQ6IEFkZGVkIGEgZmV3IG1vcmUgY29udHJvbCBJRHMuPC9wYXJhPgorICAgICAgPHBhcmE+MTk5OS0wNC0wNzogQWRkZWQgdGhlIGJ1dHRvbiBjb250cm9sIHR5cGUuPC9wYXJhPgorICAgICAgPHBhcmE+MTk5OS0wNS0wMjogRml4ZWQgYSB0eXBvIGluIHZpZGVvZGV2LmgsIGFuZCBhZGRlZCB0aGUKK1Y0TDJfQ1RSTF9GTEFHX0dSQVlFRCAobGF0ZXIgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCkgZmxhZy48L3BhcmE+CisgICAgICA8cGFyYT4xOTk5LTA1LTIwOiBEZWZpbml0aW9uIG9mIFZJRElPQ19HX0NUUkwgd2FzIHdyb25nIGNhdXNpbmcKK2EgbWFsZnVuY3Rpb24gb2YgdGhpcyBpb2N0bC48L3BhcmE+CisgICAgICA8cGFyYT4xOTk5LTA2LTA1OiBDaGFuZ2VkIHRoZSB2YWx1ZSBvZgorVjRMMl9DSURfV0hJVEVORVNTLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIFZlcnNpb24gMC4yMCAoMTk5OS0wOS0xMCk8L3RpdGxlPgorCisgICAgICA8cGFyYT5WZXJzaW9uIDAuMjAgaW50cm9kdWNlZCBhIG51bWJlciBvZiBjaGFuZ2VzIHdoaWNoIHdlcmUKKzxlbXBoYXNpcz5ub3QgYmFja3dhcmQgY29tcGF0aWJsZTwvZW1waGFzaXM+IHdpdGggMC4xOSBhbmQgZWFybGllcgordmVyc2lvbnMuIFB1cnBvc2Ugb2YgdGhlc2UgY2hhbmdlcyB3YXMgdG8gc2ltcGxpZnkgdGhlIEFQSSwgd2hpbGUKK21ha2luZyBpdCBtb3JlIGV4dGVuc2libGUgYW5kIGZvbGxvd2luZyBjb21tb24gTGludXggZHJpdmVyIEFQSQorY29udmVudGlvbnMuPC9wYXJhPgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+U29tZSB0eXBvcyBpbiA8Y29uc3RhbnQ+VjRMMl9GTVRfRkxBRzwvY29uc3RhbnQ+CitzeW1ib2xzIHdlcmUgZml4ZWQuICZ2NGwyLWNsaXA7IHdhcyBjaGFuZ2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKK3Y0bC4gKDE5OTktMDgtMzApPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTEFORzE8L2NvbnN0YW50PiB3YXMgYWRkZWQuCisoMTk5OS0wOS0wNSk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFsbCBpb2N0bCgpIGNvbW1hbmRzIHRoYXQgdXNlZCBhbiBpbnRlZ2VyIGFyZ3VtZW50IG5vdwordGFrZSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlci4gV2hlcmUgaXQgbWFrZXMgc2Vuc2UsIGlvY3RscyB3aWxsIHJldHVybgordGhlIGFjdHVhbCBuZXcgdmFsdWUgaW4gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSB0aGUgYXJndW1lbnQsIGEKK2NvbW1vbiBjb252ZW50aW9uIGluIHRoZSBWNEwyIEFQSS4gVGhlIGFmZmVjdGVkIGlvY3RscyBhcmU6CitWSURJT0NfUFJFVklFVywgVklESU9DX1NUUkVBTU9OLCBWSURJT0NfU1RSRUFNT0ZGLCBWSURJT0NfU19GUkVRLAorVklESU9DX1NfSU5QVVQsIFZJRElPQ19TX09VVFBVVCwgVklESU9DX1NfRUZGRUNULiBGb3IgZXhhbXBsZQorPHByb2dyYW1saXN0aW5nPgorZXJyID0gaW9jdGwgKGZkLCBWSURJT0NfWFhYLCBWNEwyX1hYWCk7Cis8L3Byb2dyYW1saXN0aW5nPiBiZWNvbWVzIDxwcm9ncmFtbGlzdGluZz4KK2ludCBhID0gVjRMMl9YWFg7IGVyciA9IGlvY3RsKGZkLCBWSURJT0NfWFhYLCAmYW1wO2EpOworPC9wcm9ncmFtbGlzdGluZz4KKwkgIDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWxsIHRoZSBkaWZmZXJlbnQgZ2V0LSBhbmQgc2V0LWZvcm1hdCBjb21tYW5kcyB3ZXJlCitzd2VwdCBpbnRvIG9uZSAmVklESU9DLUctRk1UOyBhbmQgJlZJRElPQy1TLUZNVDsgaW9jdGwgdGFraW5nIGEgdW5pb24KK2FuZCBhIHR5cGUgZmllbGQgc2VsZWN0aW5nIHRoZSB1bmlvbiBtZW1iZXIgYXMgcGFyYW1ldGVyLiBQdXJwb3NlIGlzIHRvCitzaW1wbGlmeSB0aGUgQVBJIGJ5IGVsaW1pbmF0aW5nIHNldmVyYWwgaW9jdGxzIGFuZCB0byBhbGxvdyBuZXcgYW5kCitkcml2ZXIgcHJpdmF0ZSBkYXRhIHN0cmVhbXMgd2l0aG91dCBhZGRpbmcgbmV3IGlvY3Rscy48L3BhcmE+CisKKwkgIDxwYXJhPlRoaXMgY2hhbmdlIG9ic29sZXRlcyB0aGUgZm9sbG93aW5nIGlvY3RsczoKKzxjb25zdGFudD5WSURJT0NfU19JTkZNVDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJRElPQ19HX0lORk1UPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX1NfT1VURk1UPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX0dfT1VURk1UPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX1NfVkJJRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX0dfVkJJRk1UPC9jb25zdGFudD4uIFRoZSBpbWFnZSBmb3JtYXQgc3RydWN0dXJlCis8c3RydWN0bmFtZT52NGwyX2Zvcm1hdDwvc3RydWN0bmFtZT4gd2FzIHJlbmFtZWQgdG8gJnY0bDItcGl4LWZvcm1hdDssCit3aGlsZSAmdjRsMi1mb3JtYXQ7IGlzIG5vdyB0aGUgZW52ZWxvcHBpbmcgc3RydWN0dXJlIGZvciBhbGwgZm9ybWF0CituZWdvdGlhdGlvbnMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5TaW1pbGFyIHRvIHRoZSBjaGFuZ2VzIGFib3ZlLCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19QQVJNPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfUEFSTTwvY29uc3RhbnQ+IGlvY3RscyB3ZXJlIG1lcmdlZCB3aXRoCis8Y29uc3RhbnQ+VklESU9DX0dfT1VUUEFSTTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX09VVFBBUk08L2NvbnN0YW50Pi4gQQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiB0aGUgbmV3ICZ2NGwyLXN0cmVhbXBhcm07CitzZWxlY3RzIHRoZSByZXNwZWN0aXZlIHVuaW9uIG1lbWJlci48L3BhcmE+CisKKwkgIDxwYXJhPlRoaXMgY2hhbmdlIG9ic29sZXRlcyB0aGUKKzxjb25zdGFudD5WSURJT0NfR19PVVRQQVJNPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfT1VUUEFSTTwvY29uc3RhbnQ+IGlvY3Rscy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkNvbnRyb2wgZW51bWVyYXRpb24gd2FzIHNpbXBsaWZpZWQsIGFuZCB0d28gbmV3Citjb250cm9sIGZsYWdzIHdlcmUgaW50cm9kdWNlZCBhbmQgb25lIGRyb3BwZWQuIFRoZQorPHN0cnVjdGZpZWxkPmNhdG5hbWU8L3N0cnVjdGZpZWxkPiBmaWVsZCB3YXMgcmVwbGFjZWQgYnkgYQorPHN0cnVjdGZpZWxkPmdyb3VwPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCisJICA8cGFyYT5Ecml2ZXJzIGNhbiBub3cgZmxhZyB1bnN1cHBvcnRlZCBhbmQgdGVtcG9yYXJpbHkKK3VuYXZhaWxhYmxlIGNvbnRyb2xzIHdpdGggPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4KK2FuZCA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfR1JBQkJFRDwvY29uc3RhbnQ+IHJlc3BlY3RpdmVseS4gVGhlCis8c3RydWN0ZmllbGQ+Z3JvdXA8L3N0cnVjdGZpZWxkPiBuYW1lIGluZGljYXRlcyBhIHBvc3NpYmx5IG5hcnJvd2VyCitjbGFzc2lmaWNhdGlvbiB0aGFuIHRoZSA8c3RydWN0ZmllbGQ+Y2F0ZWdvcnk8L3N0cnVjdGZpZWxkPi4gSW4gb3RoZXIKK3dvcmRzLCB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgZ3JvdXBzIHdpdGhpbiBhIGNhdGVnb3J5LiBDb250cm9scyB3aXRoaW4KK2EgZ3JvdXAgd291bGQgdHlwaWNhbGx5IGJlIGRyYXduIHdpdGhpbiBhIGdyb3VwIGJveC4gQ29udHJvbHMgaW4KK2RpZmZlcmVudCBjYXRlZ29yaWVzIG1pZ2h0IGhhdmUgYSBncmVhdGVyIHNlcGFyYXRpb24sIG9yIG1heSBldmVuCithcHBlYXIgaW4gc2VwYXJhdGUgd2luZG93cy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1idWZmZXI7IDxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPgord2FzIGNoYW5nZWQgdG8gYSA2NCBiaXQgaW50ZWdlciwgY29udGFpbmluZyB0aGUgc2FtcGxpbmcgb3Igb3V0cHV0Cit0aW1lIG9mIHRoZSBmcmFtZSBpbiBuYW5vc2Vjb25kcy4gQWRkaXRpb25hbGx5IHRpbWVzdGFtcHMgd2lsbCBiZSBpbgorYWJzb2x1dGUgc3lzdGVtIHRpbWUsIG5vdCBzdGFydGluZyBmcm9tIHplcm8gYXQgdGhlIGJlZ2lubmluZyBvZiBhCitzdHJlYW0uIFRoZSBkYXRhIHR5cGUgbmFtZSBmb3IgdGltZXN0YW1wcyBpcyBzdGFtcF90LCBkZWZpbmVkIGFzIGEKK3NpZ25lZCA2NC1iaXQgaW50ZWdlci4gT3V0cHV0IGRldmljZXMgc2hvdWxkIG5vdCBzZW5kIGEgYnVmZmVyIG91dAordW50aWwgdGhlIHRpbWUgaW4gdGhlIHRpbWVzdGFtcCBmaWVsZCBoYXMgYXJyaXZlZC4gSSB3b3VsZCBsaWtlIHRvCitmb2xsb3cgU0dJJ3MgbGVhZCwgYW5kIGFkb3B0IGEgbXVsdGltZWRpYSB0aW1lc3RhbXBpbmcgc3lzdGVtIGxpa2UKK3RoZWlyIFVTVCAoVW5hZGp1c3RlZCBTeXN0ZW0gVGltZSkuIFNlZQoraHR0cDovL3JlYWxpdHkuc2dpLmNvbS9jcGlyYXp6aV9lbmdyL2xnL3RpbWUvaW50cm8uaHRtbC4gW1RoaXMgbGluayBpcworbm8gbG9uZ2VyIHZhbGlkLl0gVVNUIHVzZXMgdGltZXN0YW1wcyB0aGF0IGFyZSA2NC1iaXQgc2lnbmVkIGludGVnZXJzCisobm90IHN0cnVjdCB0aW1ldmFsJ3MpIGFuZCBnaXZlbiBpbiBuYW5vc2Vjb25kIHVuaXRzLiBUaGUgVVNUIGNsb2NrCitzdGFydHMgYXQgemVybyB3aGVuIHRoZSBzeXN0ZW0gaXMgYm9vdGVkIGFuZCBydW5zIGNvbnRpbnVvdXNseSBhbmQKK3VuaWZvcm1seS4gSXQgdGFrZXMgYSBsaXR0bGUgb3ZlciAyOTIgeWVhcnMgZm9yIFVTVCB0byBvdmVyZmxvdy4gVGhlcmUKK2lzIG5vIHdheSB0byBzZXQgdGhlIFVTVCBjbG9jay4gVGhlIHJlZ3VsYXIgTGludXggdGltZS1vZi1kYXkgY2xvY2sKK2NhbiBiZSBjaGFuZ2VkIHBlcmlvZGljYWxseSwgd2hpY2ggd291bGQgY2F1c2UgZXJyb3JzIGlmIGl0IHdlcmUgYmVpbmcKK3VzZWQgZm9yIHRpbWVzdGFtcGluZyBhIG11bHRpbWVkaWEgc3RyZWFtLiBBIHJlYWwgVVNUIHN0eWxlIGNsb2NrIHdpbGwKK3JlcXVpcmUgc29tZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgdGhhdCBpcyBub3QgdGhlcmUgeWV0LiBCdXQgaW4KK2FudGljaXBhdGlvbiwgSSB3aWxsIGNoYW5nZSB0aGUgdGltZXN0YW1wIGZpZWxkIHRvIGEgNjQtYml0IGludGVnZXIsCithbmQgSSB3aWxsIGNoYW5nZSB0aGUgdjRsMl9tYXN0ZXJjbG9ja19nZXR0aW1lKCkgZnVuY3Rpb24gKHVzZWQgb25seQorYnkgZHJpdmVycykgdG8gcmV0dXJuIGEgNjQtYml0IGludGVnZXIuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BIDxzdHJ1Y3RmaWVsZD5zZXF1ZW5jZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBhZGRlZAordG8gJnY0bDItYnVmZmVyOy4gVGhlIDxzdHJ1Y3RmaWVsZD5zZXF1ZW5jZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvdW50cworY2FwdHVyZWQgZnJhbWVzLCBpdCBpcyBpZ25vcmVkIGJ5IG91dHB1dCBkZXZpY2VzLiBXaGVuIGEgY2FwdHVyZQorZHJpdmVyIGRyb3BzIGEgZnJhbWUsIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhhdCBmcmFtZSBpcworc2tpcHBlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMjAgaW5jcmVtZW50YWwgY2hhbmdlczwvdGl0bGU+CisgICAgICA8IS0tIFZlcnNpb24gbnVtYmVyIGRpZG4ndCBjaGFuZ2UgYW55bW9yZSwgcmVhc29uIHVua25vd24uIC0tPgorCisgICAgICA8cGFyYT4xOTk5LTEyLTIzOiBJbiAmdjRsMi12YmktZm9ybWF0OyB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDE8L3N0cnVjdGZpZWxkPiBmaWVsZCBiZWNhbWUKKzxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPi4gUHJldmlvdXNseSBkcml2ZXJzIHdlcmUgcmVxdWlyZWQgdG8KK2NsZWFyIHRoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQxPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCisgICAgICA8cGFyYT4yMDAwLTAxLTEzOiBUaGUKKyAgICAgIDxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX05PVF9JTlRFUkxBQ0VEPC9jb25zdGFudD4gZmxhZyB3YXMgYWRkZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT4yMDAwLTA3LTMxOiBUaGUgPGZpbGVuYW1lPmxpbnV4L3BvbGwuaDwvZmlsZW5hbWU+IGhlYWRlcgoraXMgbm93IGluY2x1ZGVkIGJ5IDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggdGhlIG9yaWdpbmFsIDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMTEtMjA6IDxjb25zdGFudD5WNEwyX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD4gd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMTEtMjU6IDxjb25zdGFudD5WNEwyX1RZUEVfVkJJX0lOUFVUPC9jb25zdGFudD4gd2FzCithZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMTItMDQ6IEEgY291cGxlIHR5cG9zIGluIHN5bWJvbCBuYW1lcyB3ZXJlIGZpeGVkLjwvcGFyYT4KKworICAgICAgPHBhcmE+MjAwMS0wMS0xODogVG8gYXZvaWQgbmFtZXNwYWNlIGNvbmZsaWN0cyB0aGUKKzxjb25zdGFudD5mb3VyY2M8L2NvbnN0YW50PiBtYWNybyBkZWZpbmVkIGluIHRoZQorPGZpbGVuYW1lPnZpZGVvZGV2Lmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSB3YXMgcmVuYW1lZCB0bworPGNvbnN0YW50PnY0bDJfZm91cmNjPC9jb25zdGFudD4uPC9wYXJhPgorCisgICAgICA8cGFyYT4yMDAxLTAxLTI1OiBBIHBvc3NpYmxlIGRyaXZlci1sZXZlbCBjb21wYXRpYmlsaXR5IHByb2JsZW0KK2JldHdlZW4gdGhlIDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZSBpbiBMaW51eCAyLjQuMCBhbmQKK3RoZSA8ZmlsZW5hbWU+dmlkZW9kZXYuaDwvZmlsZW5hbWU+IGZpbGUgaW5jbHVkZWQgaW4gdGhlCis8ZmlsZW5hbWU+dmlkZW9kZXZYPC9maWxlbmFtZT4gcGF0Y2ggd2FzIGZpeGVkLiBVc2VycyBvZiBhbiBlYXJsaWVyCit2ZXJzaW9uIG9mIDxmaWxlbmFtZT52aWRlb2Rldlg8L2ZpbGVuYW1lPiBvbiBMaW51eCAyLjQuMCBzaG91bGQKK3JlY29tcGlsZSB0aGVpciBWNEwgYW5kIFY0TDIgZHJpdmVycy48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDEtMDEtMjY6IEEgcG9zc2libGUga2VybmVsLWxldmVsIGluY29tcGF0aWJpbGl0eQorYmV0d2VlbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Lmg8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorPGZpbGVuYW1lPnZpZGVvZGV2WDwvZmlsZW5hbWU+IHBhdGNoIGFuZCB0aGUKKzxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZSBpbiBMaW51eCAyLjIueCB3aXRoIGRldmZzIHBhdGNoZXMKK2FwcGxpZWQgd2FzIGZpeGVkLjwvcGFyYT4KKworICAgICAgPHBhcmE+MjAwMS0wMy0wMjogQ2VydGFpbiBWNEwgaW9jdGxzIHdoaWNoIHBhc3MgZGF0YSBpbiBib3RoCitkaXJlY3Rpb24gYWx0aG91Z2ggdGhleSBhcmUgZGVmaW5lZCB3aXRoIHJlYWQtb25seSBwYXJhbWV0ZXIsIGRpZCBub3QKK3dvcmsgY29ycmVjdGx5IHRocm91Z2ggdGhlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbGF5ZXIuCitbU29sdXRpb24/XTwvcGFyYT4KKworICAgICAgPHBhcmE+MjAwMS0wNC0xMzogQmlnIGVuZGlhbiAxNi1iaXQgUkdCIGZvcm1hdHMgd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDEtMDktMTc6IE5ldyBZVVYgZm9ybWF0cyBhbmQgdGhlICZWSURJT0MtRy1GUkVRVUVOQ1k7IGFuZAorJlZJRElPQy1TLUZSRVFVRU5DWTsgaW9jdGxzIHdlcmUgYWRkZWQuIChUaGUgb2xkCis8Y29uc3RhbnQ+VklESU9DX0dfRlJFUTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX0ZSRVE8L2NvbnN0YW50PiBpb2N0bHMgZGlkIG5vdCB0YWtlIG11bHRpcGxlIHR1bmVycworaW50byBhY2NvdW50Lik8L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMDktMTg6IDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZCSTwvY29uc3RhbnQ+IHdhcworYWRkZWQuIFRoaXMgbWF5IDxlbXBoYXNpcz5icmVhayBjb21wYXRpYmlsaXR5PC9lbXBoYXNpcz4gYXMgdGhlCismVklESU9DLUctRk1UOyBhbmQgJlZJRElPQy1TLUZNVDsgaW9jdGxzIG1heSBmYWlsIG5vdyBpZiB0aGUgc3RydWN0Cis8c3RydWN0bmFtZT52NGwyX2ZtdDwvc3RydWN0bmFtZT4gPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgorZmllbGQgZG9lcyBub3QgY29udGFpbiA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WQkk8L2NvbnN0YW50Pi4gSW4gdGhlCitkb2N1bWVudGF0aW9uIG9mIHRoZSAmdjRsMi12YmktZm9ybWF0OworPHN0cnVjdGZpZWxkPm9mZnNldDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRoZSBhbWJpZ3VvdXMgcGhyYXNlICJyaXNpbmcKK2VkZ2UiIHdhcyBjaGFuZ2VkIHRvICJsZWFkaW5nIGVkZ2UiLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIFZlcnNpb24gMC4yMCAyMDAwLTExLTIzPC90aXRsZT4KKworICAgICAgPHBhcmE+QSBudW1iZXIgb2YgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIHJhdyBWQkkKK2ludGVyZmFjZS48L3BhcmE+CisKKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5GaWd1cmVzIGNsYXJpZnlpbmcgdGhlIGxpbmUgbnVtYmVyaW5nIHNjaGVtZSB3ZXJlCithZGRlZCB0byB0aGUgVjRMMiBBUEkgc3BlY2lmaWNhdGlvbi4gVGhlCis8c3RydWN0ZmllbGQ+c3RhcnQ8L3N0cnVjdGZpZWxkPlswXSBhbmQKKzxzdHJ1Y3RmaWVsZD5zdGFydDwvc3RydWN0ZmllbGQ+WzFdIGZpZWxkcyBubyBsb25nZXIgY291bnQgbGluZQorbnVtYmVycyBiZWdpbm5pbmcgYXQgemVyby4gUmF0aW9uYWxlOiBhKSBUaGUgcHJldmlvdXMgZGVmaW5pdGlvbiB3YXMKK3VuY2xlYXIuIGIpIFRoZSA8c3RydWN0ZmllbGQ+c3RhcnQ8L3N0cnVjdGZpZWxkPltdIHZhbHVlcyBhcmUgb3JkaW5hbAorbnVtYmVycy4gYykgVGhlcmUgaXMgbm8gcG9pbnQgaW4gaW52ZW50aW5nIGEgbmV3IGxpbmUgbnVtYmVyaW5nCitzY2hlbWUuIFdlIG5vdyB1c2UgbGluZSBudW1iZXIgYXMgZGVmaW5lZCBieSBJVFUtUiwgcGVyaW9kLgorQ29tcGF0aWJpbGl0eTogQWRkIG9uZSB0byB0aGUgc3RhcnQgdmFsdWVzLiBBcHBsaWNhdGlvbnMgZGVwZW5kaW5nIG9uCit0aGUgcHJldmlvdXMgc2VtYW50aWNzIG1heSBub3QgZnVuY3Rpb24gY29ycmVjdGx5LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHJlc3RyaWN0aW9uICJjb3VudFswXSAmZ3Q7IDAgYW5kIGNvdW50WzFdICZndDsgMCIKK2hhcyBiZWVuIHJlbGF4ZWQgIHRvICIoY291bnRbMF0gKyBjb3VudFsxXSkgJmd0OyAwIi4gUmF0aW9uYWxlOgorRHJpdmVycyBtYXkgYWxsb2NhdGUgcmVzb3VyY2VzIGF0IHNjYW4gbGluZSBncmFudWxhcml0eSBhbmQgc29tZSBkYXRhCitzZXJ2aWNlcyBhcmUgdHJhbnNtaXR0ZWQgb25seSBvbiB0aGUgZmlyc3QgZmllbGQuIFRoZSBjb21tZW50IHRoYXQKK2JvdGggPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gdmFsdWVzIHdpbGwgdXN1YWxseSBiZSBlcXVhbCBpcworbWlzbGVhZGluZyBhbmQgcG9pbnRsZXNzIGFuZCBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGNoYW5nZQorPGVtcGhhc2lzPmJyZWFrcyBjb21wYXRpYmlsaXR5PC9lbXBoYXNpcz4gd2l0aCBlYXJsaWVyIHZlcnNpb25zOgorRHJpdmVycyBtYXkgcmV0dXJuIEVJTlZBTCwgYXBwbGljYXRpb25zIG1heSBub3QgZnVuY3Rpb24KK2NvcnJlY3RseS48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkRyaXZlcnMgYXJlIGFnYWluIHBlcm1pdHRlZCB0byByZXR1cm4gbmVnYXRpdmUKKyh1bmtub3duKSBzdGFydCB2YWx1ZXMgYXMgcHJvcG9zZWQgZWFybGllci4gV2h5IHRoaXMgZmVhdHVyZSB3YXMKK2Ryb3BwZWQgaXMgdW5jbGVhci4gVGhpcyBjaGFuZ2UgbWF5IDxlbXBoYXNpcz5icmVhaworY29tcGF0aWJpbGl0eTwvZW1waGFzaXM+IHdpdGggYXBwbGljYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgc3RhcnQKK3ZhbHVlcyBiZWluZyBwb3NpdGl2ZS4gVGhlIHVzZSBvZiA8Y29uc3RhbnQ+RUJVU1k8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5FSU5WQUw8L2NvbnN0YW50PiBlcnJvciBjb2RlcyB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bAord2FzIGNsYXJpZmllZC4gVGhlICZFQlVTWTsgd2FzIGZpbmFsbHkgZG9jdW1lbnRlZCwgYW5kIHRoZQorPHN0cnVjdGZpZWxkPnJlc2VydmVkMjwvc3RydWN0ZmllbGQ+IGZpZWxkIHdoaWNoIHdhcyBwcmV2aW91c2x5CittZW50aW9uZWQgb25seSBpbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Lmg8L2ZpbGVuYW1lPiBoZWFkZXIKK2ZpbGUuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5OZXcgYnVmZmVyIHR5cGVzCis8Y29uc3RhbnQ+VjRMMl9UWVBFX1ZCSV9JTlBVVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfVFlQRV9WQklfT1VUUFVUPC9jb25zdGFudD4gd2VyZSBhZGRlZC4gVGhlIGZvcm1lciBpcyBhbgorYWxpYXMgZm9yIHRoZSBvbGQgPGNvbnN0YW50PlY0TDJfVFlQRV9WQkk8L2NvbnN0YW50PiwgdGhlIGxhdHRlciB3YXMKK21pc3NpbmcgaW4gdGhlIDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMjAgMjAwMi0wNy0yNTwvdGl0bGU+CisgICAgICA8cGFyYT5BZGRlZCBzbGljZWQgVkJJIGludGVyZmFjZSBwcm9wb3NhbC48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjUuNDYsIDIwMDItMTA8L3RpdGxlPgorCisgICAgICA8cGFyYT5Bcm91bmQgT2N0b2Jlci1Ob3ZlbWJlciAyMDAyLCBwcmlvciB0byBhbiBhbm5vdW5jZWQKK2ZlYXR1cmUgZnJlZXplIG9mIExpbnV4IDIuNSwgdGhlIEFQSSB3YXMgcmV2aXNlZCwgZHJhd2luZyBmcm9tCitleHBlcmllbmNlIHdpdGggVjRMMiAwLjIwLiBUaGlzIHVubmFtZWQgdmVyc2lvbiB3YXMgZmluYWxseSBtZXJnZWQKK2ludG8gTGludXggMi41LjQ2LjwvcGFyYT4KKworICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFzIHNwZWNpZmllZCBpbiA8eHJlZiBsaW5rZW5kPSJyZWxhdGVkIiAvPiwgZHJpdmVycworbXVzdCBtYWtlIHJlbGF0ZWQgZGV2aWNlIGZ1bmN0aW9ucyBhdmFpbGFibGUgdW5kZXIgYWxsIG1pbm9yIGRldmljZQorbnVtYmVycy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmZnVuYy1vcGVuOyBmdW5jdGlvbiByZXF1aXJlcyBhY2Nlc3MgbW9kZQorPGNvbnN0YW50Pk9fUkRXUjwvY29uc3RhbnQ+IHJlZ2FyZGxlc3Mgb2YgdGhlIGRldmljZSB0eXBlLiBBbGwgVjRMMgorZHJpdmVycyBleGNoYW5naW5nIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMgbXVzdCBzdXBwb3J0IHRoZQorPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnLiBUaGUgPGNvbnN0YW50Pk9fTk9JTzwvY29uc3RhbnQ+CitmbGFnLCBhIFY0TDIgc3ltYm9sIHdoaWNoIGFsaWFzZWQgdGhlIG1lYW5pbmdsZXNzCis8Y29uc3RhbnQ+T19UUlVOQzwvY29uc3RhbnQ+IHRvIGluZGljYXRlIGFjY2Vzc2VzIHdpdGhvdXQgZGF0YQorZXhjaGFuZ2UgKHBhbmVsIGFwcGxpY2F0aW9ucykgd2FzIGRyb3BwZWQuIERyaXZlcnMgbXVzdCBzdGF5IGluICJwYW5lbAorbW9kZSIgdW50aWwgdGhlIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIGluaXRpYXRlIGEgZGF0YSBleGNoYW5nZSwgc2VlCis8eHJlZiBsaW5rZW5kPSJvcGVuIiAvPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1jYXBhYmlsaXR5OyBjaGFuZ2VkIGRyYW1hdGljYWxseS4gTm90ZSB0aGF0CithbHNvIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgY2hhbmdlZCwgd2hpY2ggaXMgZW5jb2RlZCBpbiB0aGUgaW9jdGwKK3JlcXVlc3QgY29kZSwgdGh1cyBvbGRlciBWNEwyIGRldmljZXMgd2lsbCByZXNwb25kIHdpdGggYW4gJkVJTlZBTDsgdG8KK3RoZSBuZXcgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuPC9wYXJhPgorCisJICA8cGFyYT5UaGVyZSBhcmUgbmV3IGZpZWxkcyB0byBpZGVudGlmeSB0aGUgZHJpdmVyLCBhIG5ldyBSRFMKK2RldmljZSBmdW5jdGlvbiA8Y29uc3RhbnQ+VjRMMl9DQVBfUkRTX0NBUFRVUkU8L2NvbnN0YW50PiwgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfQVVESU88L2NvbnN0YW50PiBmbGFnIGluZGljYXRlcyBpZiB0aGUgZGV2aWNlIGhhcworYW55IGF1ZGlvIGNvbm5lY3RvcnMsIGFub3RoZXIgSS9PIGNhcGFiaWxpdHkKKzxjb25zdGFudD5WNEwyX0NBUF9BU1lOQ0lPPC9jb25zdGFudD4gY2FuIGJlIGZsYWdnZWQuIEluIHJlc3BvbnNlIHRvCit0aGVzZSBjaGFuZ2VzIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGJlY2FtZSBhIGJpdAorc2V0IGFuZCB3YXMgbWVyZ2VkIGludG8gdGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkLgorPGNvbnN0YW50PlY0TDJfRkxBR19UVU5FUjwvY29uc3RhbnQ+IHdhcyByZW5hbWVkIHRvCis8Y29uc3RhbnQ+VjRMMl9DQVBfVFVORVI8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVkVSTEFZPC9jb25zdGFudD4gcmVwbGFjZWQKKzxjb25zdGFudD5WNEwyX0ZMQUdfUFJFVklFVzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfQ0FQX1ZCSV9DQVBUVVJFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DQVBfVkJJX09VVFBVVDwvY29uc3RhbnQ+IHJlcGxhY2VkCis8Y29uc3RhbnQ+VjRMMl9GTEFHX0RBVEFfU0VSVklDRTwvY29uc3RhbnQ+LgorPGNvbnN0YW50PlY0TDJfRkxBR19SRUFEPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GTEFHX1dSSVRFPC9jb25zdGFudD4gd2VyZSBtZXJnZWQgaW50bworPGNvbnN0YW50PlY0TDJfQ0FQX1JFQURXUklURTwvY29uc3RhbnQ+LjwvcGFyYT4KKworCSAgPHBhcmE+VGhlIHJlZHVuZGFudCBmaWVsZHMKKzxzdHJ1Y3RmaWVsZD5pbnB1dHM8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPm91dHB1dHM8L3N0cnVjdGZpZWxkPgorYW5kIDxzdHJ1Y3RmaWVsZD5hdWRpb3M8L3N0cnVjdGZpZWxkPiB3ZXJlIHJlbW92ZWQuIFRoZXNlIHByb3BlcnRpZXMKK2NhbiBiZSBkZXRlcm1pbmVkIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJ2aWRlbyIgLz4gYW5kIDx4cmVmCitsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPgorCisJICA8cGFyYT5UaGUgc29tZXdoYXQgdm9sYXRpbGUgYW5kIHRoZXJlZm9yZSBiYXJlbHkgdXNlZnVsCitmaWVsZHMgPHN0cnVjdGZpZWxkPm1heHdpZHRoPC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+bWF4aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+bWlud2lkdGg8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5taW5oZWlnaHQ8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5tYXhmcmFtZXJhdGU8L3N0cnVjdGZpZWxkPiB3ZXJlIHJlbW92ZWQuIFRoaXMgaW5mb3JtYXRpb24KK2lzIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iZm9ybWF0IiAvPiBhbmQKKzx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkIiAvPi48L3BhcmE+CisKKwkgIDxwYXJhPjxjb25zdGFudD5WNEwyX0ZMQUdfU0VMRUNUPC9jb25zdGFudD4gd2FzIHJlbW92ZWQuIFdlCitiZWxpZXZlIHRoZSBzZWxlY3QoKSBmdW5jdGlvbiBpcyBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcXVpcmUgc3VwcG9ydAorb2YgaXQgaW4gYWxsIFY0TDIgZHJpdmVycyBleGNoYW5naW5nIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMuIFRoZQorcmVkdW5kYW50IDxjb25zdGFudD5WNEwyX0ZMQUdfTU9OT0NIUk9NRTwvY29uc3RhbnQ+IGZsYWcgd2FzIHJlbW92ZWQsCit0aGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gPHhyZWYKKwkgICAgICBsaW5rZW5kPSJmb3JtYXQiIC8+LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItaW5wdXQ7IHRoZQorPHN0cnVjdGZpZWxkPmFzc29jX2F1ZGlvPC9zdHJ1Y3RmaWVsZD4gZmllbGQgYW5kIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgaXRzIG9ubHkgZmxhZworPGNvbnN0YW50PlY0TDJfSU5QVVRfQ0FQX0FVRElPPC9jb25zdGFudD4gd2FzIHJlcGxhY2VkIGJ5IHRoZSBuZXcKKzxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJbnN0ZWFkIG9mIGxpbmtpbmcgb25lCit2aWRlbyBpbnB1dCB0byBvbmUgYXVkaW8gaW5wdXQgdGhpcyBmaWVsZCByZXBvcnRzIGFsbCBhdWRpbyBpbnB1dHMKK3RoaXMgdmlkZW8gaW5wdXQgY29tYmluZXMgd2l0aC48L3BhcmE+CisKKwkgIDxwYXJhPk5ldyBmaWVsZHMgYXJlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+CisocmV2ZXJzaW5nIHRoZSBmb3JtZXIgbGluayBmcm9tIHR1bmVycyB0byB2aWRlbyBpbnB1dHMpLAorPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnN0YXR1czwvc3RydWN0ZmllbGQ+LjwvcGFyYT4KKworCSAgPHBhcmE+QWNjb3JkaW5nbHkgJnY0bDItb3V0cHV0OyBsb3N0IGl0cworPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5hc3NvY19hdWRpbzwvc3RydWN0ZmllbGQ+IGZpZWxkcy4KKzxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPm1vZHVsYXRvcjwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IHdoZXJlIGFkZGVkIGluc3RlYWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItYXVkaW87IGZpZWxkCis8c3RydWN0ZmllbGQ+YXVkaW88L3N0cnVjdGZpZWxkPiB3YXMgcmVuYW1lZCB0bworPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4sIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyCitzdHJ1Y3R1cmVzLiBBIG5ldyBjYXBhYmlsaXR5IGZsYWcKKzxjb25zdGFudD5WNEwyX0FVRENBUF9TVEVSRU88L2NvbnN0YW50PiB3YXMgYWRkZWQgdG8gaW5kaWNhdGVkIGlmIHRoZQorYXVkaW8gaW5wdXQgaW4gcXVlc3Rpb24gc3VwcG9ydHMgc3RlcmVvIHNvdW5kLgorPGNvbnN0YW50PlY0TDJfQVVEQ0FQX0VGRkVDVFM8L2NvbnN0YW50PiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKzxjb25zdGFudD5WNEwyX0FVRE1PREU8L2NvbnN0YW50PiBmbGFncyB3aGVyZSByZW1vdmVkLiBUaGlzIGNhbiBiZQorZWFzaWx5IGltcGxlbWVudGVkIHVzaW5nIGNvbnRyb2xzLiAoSG93ZXZlciB0aGUgc2FtZSBhcHBsaWVzIHRvIEFWTAord2hpY2ggaXMgc3RpbGwgdGhlcmUuKTwvcGFyYT4KKworCSAgPHBhcmE+QWdhaW4gZm9yIGNvbnNpc3RlbmN5IHRoZSAmdjRsMi1hdWRpb291dDsgZmllbGQKKzxzdHJ1Y3RmaWVsZD5hdWRpbzwvc3RydWN0ZmllbGQ+IHdhcyByZW5hbWVkIHRvCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi10dW5lcjsKKzxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyByZXBsYWNlZCBieSBhbgorPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQsIHBlcm1pdHRpbmcgZGV2aWNlcyB3aXRoCittdWx0aXBsZSB0dW5lcnMuIFRoZSBsaW5rIGJldHdlZW4gdmlkZW8gaW5wdXRzIGFuZCB0dW5lcnMgaXMgbm93CityZXZlcnNlZCwgaW5wdXRzIHBvaW50IHRvIHRoZWlyIHR1bmVyLiBUaGUKKzxzdHJ1Y3RmaWVsZD5zdGQ8L3N0cnVjdGZpZWxkPiBzdWJzdHJ1Y3R1cmUgYmVjYW1lIGEKK3NpbXBsZSBzZXQgKG1vcmUgYWJvdXQgdGhpcyBiZWxvdykgYW5kIG1vdmVkIGludG8gJnY0bDItaW5wdXQ7LiBBCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBhZGRlZC48L3BhcmE+CisKKwkgIDxwYXJhPkFjY29yZGluZ2x5IGluICZ2NGwyLW1vZHVsYXRvcjsgdGhlCis8c3RydWN0ZmllbGQ+b3V0cHV0PC9zdHJ1Y3RmaWVsZD4gd2FzIHJlcGxhY2VkIGJ5IGFuCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKwkgIDxwYXJhPkluICZ2NGwyLWZyZXF1ZW5jeTsgdGhlCis8c3RydWN0ZmllbGQ+cG9ydDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyByZXBsYWNlZCBieSBhCis8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWluaW5nIHRoZSByZXNwZWN0aXZlIHR1bmVyCitvciBtb2R1bGF0b3IgaW5kZXggbnVtYmVyLiBBIHR1bmVyIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHdhcyBhZGRlZCBhbmQgdGhlIDxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkCitiZWNhbWUgbGFyZ2VyIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyAoc2F0ZWxsaXRlIHR1bmVycyBpbgorcGFydGljdWxhcikuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgaWRlYSBvZiBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHZpZGVvIHN0YW5kYXJkcyB3YXMKK2Ryb3BwZWQuIEV4cGVyaWVuY2Ugc2hvd2VkIHRoYXQgYXBwbGljYXRpb25zIG11c3QgYmUgYWJsZSB0byB3b3JrIHdpdGgKK3ZpZGVvIHN0YW5kYXJkcyBiZXlvbmQgcHJlc2VudGluZyB0aGUgdXNlciBhIG1lbnUuIEluc3RlYWQgb2YKK2VudW1lcmF0aW5nIHN1cHBvcnRlZCBzdGFuZGFyZHMgd2l0aCBhbiBpb2N0bCBhcHBsaWNhdGlvbnMgY2FuIG5vdworcmVmZXIgdG8gc3RhbmRhcmRzIGJ5ICZ2NGwyLXN0ZC1pZDsgYW5kIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUKKzxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlLiBGb3IgZGV0YWlscyBzZWUgPHhyZWYKKwkgICAgICBsaW5rZW5kPSJzdGFuZGFyZCIgLz4uIFRoZSAmVklESU9DLUctU1REOyBhbmQKKyZWSURJT0MtUy1TVEQ7IG5vdyB0YWtlIGEgcG9pbnRlciB0byB0aGlzIHR5cGUgYXMgYXJndW1lbnQuCismVklESU9DLVFVRVJZU1REOyB3YXMgYWRkZWQgdG8gYXV0b2RldGVjdCB0aGUgcmVjZWl2ZWQgc3RhbmRhcmQsIGlmCit0aGUgaGFyZHdhcmUgaGFzIHRoaXMgY2FwYWJpbGl0eS4gSW4gJnY0bDItc3RhbmRhcmQ7IGFuCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCB3YXMgYWRkZWQgZm9yICZWSURJT0MtRU5VTVNURDsuCitBICZ2NGwyLXN0ZC1pZDsgZmllbGQgbmFtZWQgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gd2FzIGFkZGVkIGFzCittYWNoaW5lIHJlYWRhYmxlIGlkZW50aWZpZXIsIGFsc28gcmVwbGFjaW5nIHRoZQorPHN0cnVjdGZpZWxkPnRyYW5zbWlzc2lvbjwvc3RydWN0ZmllbGQ+IGZpZWxkLiBUaGUgbWlzbGVhZGluZworPHN0cnVjdGZpZWxkPmZyYW1lcmF0ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyByZW5hbWVkCit0byA8c3RydWN0ZmllbGQ+ZnJhbWVwZXJpb2Q8L3N0cnVjdGZpZWxkPi4gVGhlIG5vdyBvYnNvbGV0ZQorPHN0cnVjdGZpZWxkPmNvbG9yc3RhbmRhcmQ8L3N0cnVjdGZpZWxkPiBpbmZvcm1hdGlvbiwgb3JpZ2luYWxseQorbmVlZGVkIHRvIGRpc3RndWlzaCBiZXR3ZWVuIHZhcmlhdGlvbnMgb2Ygc3RhbmRhcmRzLCB3ZXJlCityZW1vdmVkLjwvcGFyYT4KKworCSAgPHBhcmE+U3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZW51bXN0ZDwvc3RydWN0bmFtZT4gY2Vhc2VkIHRvCitiZS4gJlZJRElPQy1FTlVNU1REOyBub3cgdGFrZXMgYSBwb2ludGVyIHRvIGEgJnY0bDItc3RhbmRhcmQ7CitkaXJlY3RseS4gVGhlIGluZm9ybWF0aW9uIHdoaWNoIHN0YW5kYXJkcyBhcmUgc3VwcG9ydGVkIGJ5IGEKK3BhcnRpY3VsYXIgdmlkZW8gaW5wdXQgb3Igb3V0cHV0IG1vdmVkIGludG8gJnY0bDItaW5wdXQ7IGFuZAorJnY0bDItb3V0cHV0OyBmaWVsZHMgbmFtZWQgPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+LAorcmVzcGVjdGl2ZWx5LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLXF1ZXJ5Y3RybDsgZmllbGRzCis8c3RydWN0ZmllbGQ+Y2F0ZWdvcnk8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5ncm91cDwvc3RydWN0ZmllbGQ+IGRpZCBub3QgY2F0Y2ggb24gYW5kL29yIHdlcmUgbm90CitpbXBsZW1lbnRlZCBhcyBleHBlY3RlZCBhbmQgdGhlcmVmb3JlIHJlbW92ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJlZJRElPQy1UUlktRk1UOyBpb2N0bCB3YXMgYWRkZWQgdG8gbmVnb3RpYXRlIGRhdGEKK2Zvcm1hdHMgYXMgd2l0aCAmVklESU9DLVMtRk1UOywgYnV0IHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mCitwcm9ncmFtbWluZyB0aGUgaGFyZHdhcmUgYW5kIHJlZ2FyZGxlc3Mgb2YgSS9PIGluIHByb2dyZXNzLjwvcGFyYT4KKworCSAgPHBhcmE+SW4gJnY0bDItZm9ybWF0OyB0aGUgPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+Cit1bmlvbiB3YXMgZXh0ZW5kZWQgdG8gY29udGFpbiAmdjRsMi13aW5kb3c7LiBBbGwgaW1hZ2UgZm9ybWF0CituZWdvdGlhdGlvbnMgYXJlIG5vdyBwb3NzaWJsZSB3aXRoIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+OyBpb2N0bC4gVGhlCis8Y29uc3RhbnQ+VklESU9DX0dfV0lOPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfV0lOPC9jb25zdGFudD4gaW9jdGxzIHRvIHByZXBhcmUgZm9yIGEgdmlkZW8KK292ZXJsYXkgd2VyZSByZW1vdmVkLiBUaGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZAorY2hhbmdlZCB0byB0eXBlICZ2NGwyLWJ1Zi10eXBlOyBhbmQgdGhlIGJ1ZmZlciB0eXBlIG5hbWVzIGNoYW5nZWQgYXMKK2ZvbGxvd3MuPGluZm9ybWFsdGFibGU+CisJICAgICAgPHRncm91cCBjb2xzPSIyIj4KKwkJPHRoZWFkPgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+T2xkIGRlZmluZXM8L2VudHJ5PgorCQkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJCSAgPC9yb3c+CisJCTwvdGhlYWQ+CisJCTx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9DT0RFQ0lOPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9DT0RFQ09VVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT5PbWl0dGVkIGZvciBub3c8L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfRUZGRUNUU0lOPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9FRkZFQ1RTSU4yPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9FRkZFQ1RTT1VUPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT09VVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFX0JBU0U8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90Ym9keT4KKwkgICAgICA8L3Rncm91cD4KKwkgICAgPC9pbmZvcm1hbHRhYmxlPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItZm10ZGVzYzsgYSAmdjRsMi1idWYtdHlwZTsgZmllbGQgbmFtZWQKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gd2FzIGFkZGVkIGFzIGluICZ2NGwyLWZvcm1hdDsuIFRoZQorPGNvbnN0YW50PlZJRElPQ19FTlVNX0ZCVUZGTVQ8L2NvbnN0YW50PiBpb2N0bCBpcyBubyBsb25nZXIgbmVlZGVkIGFuZAord2FzIHJlbW92ZWQuIFRoZXNlIGNhbGxzIGNhbiBiZSByZXBsYWNlZCBieSAmVklESU9DLUVOVU0tRk1UOyB3aXRoCit0eXBlIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLXBpeC1mb3JtYXQ7IHRoZQorPHN0cnVjdGZpZWxkPmRlcHRoPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2FzIHJlbW92ZWQsIGFzc3VtaW5nCithcHBsaWNhdGlvbnMgd2hpY2ggcmVjb2duaXplIHRoZSBmb3JtYXQgYnkgaXRzIGZvdXItY2hhcmFjdGVyLWNvZGUKK2FscmVhZHkga25vdyB0aGUgY29sb3IgZGVwdGgsIGFuZCBvdGhlcnMgZG8gbm90IGNhcmUgYWJvdXQgaXQuIFRoZQorc2FtZSByYXRpb25hbGUgbGVhZCB0byB0aGUgcmVtb3ZhbCBvZiB0aGUKKzxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ8L2NvbnN0YW50PiBmbGFnLiBUaGUKKzxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX1NXQ09OVkVDT01QUkVTU0VEPC9jb25zdGFudD4gZmxhZyB3YXMgcmVtb3ZlZAorYmVjYXVzZSBkcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gY29udmVydCBpbWFnZXMgaW4ga2VybmVsIHNwYWNlLiBBCit1c2VyIGxpYnJhcnkgb2YgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHByb3ZpZGVkIGluc3RlYWQuIFRoZQorPGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfQllURVNQRVJMSU5FPC9jb25zdGFudD4gZmxhZyB3YXMgcmVkdW5kYW50LgorQXBwbGljYXRpb25zIGNhbiBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPiBmaWVsZAordG8gemVybyB0byBnZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuIFNpbmNlIHRoZSByZW1haW5pbmcgZmxhZ3Mgd2VyZQorcmVwbGFjZWQgYXMgd2VsbCwgdGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIGl0c2VsZgord2FzIHJlbW92ZWQuPC9wYXJhPgorCSAgPHBhcmE+VGhlIGludGVybGFjZSBmbGFncyB3ZXJlIHJlcGxhY2VkIGJ5IGEgJnY0bDItZmllbGQ7Cit2YWx1ZSBpbiBhIG5ld2x5IGFkZGVkIDxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+CitmaWVsZC48aW5mb3JtYWx0YWJsZT4KKwkgICAgICA8dGdyb3VwIGNvbHM9IjIiPgorCQk8dGhlYWQ+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT5PbGQgZmxhZzwvZW50cnk+CisJCSAgICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90aGVhZD4KKwkJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX05PVF9JTlRFUkxBQ0VEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pj88L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfSU5URVJMQUNFRDwvY29uc3RhbnQ+Cis9IDxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0NPTUJJTkVEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTVRfRkxBR19UT1BGSUVMRDwvY29uc3RhbnQ+Cis9IDxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX09EREZJRUxEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0JPVEZJRUxEPC9jb25zdGFudD4KKz0gPGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfRVZFTkZJRUxEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0JPVFRPTTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9UQjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9CVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0FMVEVSTkFURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90Ym9keT4KKwkgICAgICA8L3Rncm91cD4KKwkgICAgPC9pbmZvcm1hbHRhYmxlPjwvcGFyYT4KKworCSAgPHBhcmE+VGhlIGNvbG9yIHNwYWNlIGZsYWdzIHdlcmUgcmVwbGFjZWQgYnkgYQorJnY0bDItY29sb3JzcGFjZTsgdmFsdWUgaW4gYSBuZXdseSBhZGRlZAorPHN0cnVjdGZpZWxkPmNvbG9yc3BhY2U8L3N0cnVjdGZpZWxkPiBmaWVsZCwgd2hlcmUgb25lIG9mCis8Y29uc3RhbnQ+VjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9CVDg3ODwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX008L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHPC9jb25zdGFudD4gcmVwbGFjZXMKKzxjb25zdGFudD5WNEwyX0ZNVF9DU182MDFZVVY8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLXJlcXVlc3RidWZmZXJzOyB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2FzIHByb3Blcmx5IGRlZmluZWQgYXMKKyZ2NGwyLWJ1Zi10eXBlOy4gQnVmZmVyIHR5cGVzIGNoYW5nZWQgYXMgbWVudGlvbmVkIGFib3ZlLiBBIG5ldworPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHR5cGUgJnY0bDItbWVtb3J5OyB3YXMKK2FkZGVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gSS9PIG1ldGhvZHMgdXNpbmcgYnVmZmVycyBhbGxvY2F0ZWQKK2J5IHRoZSBkcml2ZXIgb3IgdGhlIGFwcGxpY2F0aW9uLiBTZWUgPHhyZWYgbGlua2VuZD0iaW8iIC8+IGZvcgorZGV0YWlscy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLWJ1ZmZlcjsgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHdhcyBwcm9wZXJseSBkZWZpbmVkIGFzICZ2NGwyLWJ1Zi10eXBlOy4gQnVmZmVyIHR5cGVzIGNoYW5nZWQgYXMKK21lbnRpb25lZCBhYm92ZS4gQSA8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0eXBlCismdjRsMi1maWVsZDsgd2FzIGFkZGVkIHRvIGluZGljYXRlIGlmIGEgYnVmZmVyIGNvbnRhaW5zIGEgdG9wIG9yCitib3R0b20gZmllbGQuIFRoZSBvbGQgZmllbGQgZmxhZ3Mgd2VyZSByZW1vdmVkLiBTaW5jZSBubyB1bmFkanVzdGVkCitzeXN0ZW0gdGltZSBjbG9jayB3YXMgYWRkZWQgdG8gdGhlIGtlcm5lbCBhcyBwbGFubmVkLCB0aGUKKzxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZCBjaGFuZ2VkIGJhY2sgZnJvbSB0eXBlCitzdGFtcF90LCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBleHByZXNzaW5nIHRoZSBzYW1wbGUgdGltZSBpbgorbmFub3NlY29uZHMsIHRvIHN0cnVjdCA8c3RydWN0bmFtZT50aW1ldmFsPC9zdHJ1Y3RuYW1lPi4gV2l0aCB0aGUKK2FkZGl0aW9uIG9mIGEgc2Vjb25kIG1lbW9yeSBtYXBwaW5nIG1ldGhvZCB0aGUKKzxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBtb3ZlZCBpbnRvIHVuaW9uCis8c3RydWN0ZmllbGQ+bTwvc3RydWN0ZmllbGQ+LCBhbmQgYSBuZXcKKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0eXBlICZ2NGwyLW1lbW9yeTsgd2FzCithZGRlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIEkvTyBtZXRob2RzLiBTZWUgPHhyZWYgbGlua2VuZD0iaW8iIC8+Citmb3IgZGV0YWlscy48L3BhcmE+CisKKwkgIDxwYXJhPlRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfUkVRX0NPTlRJRzwvY29uc3RhbnQ+CitmbGFnIHdhcyB1c2VkIGJ5IHRoZSBWNEwgY29tcGF0aWJpbGl0eSBsYXllciwgYWZ0ZXIgY2hhbmdlcyB0byB0aGlzCitjb2RlIGl0IHdhcyBubyBsb25nZXIgbmVlZGVkLiBUaGUKKzxjb25zdGFudD5WNEwyX0JVRl9BVFRSX0RFVklDRU1FTTwvY29uc3RhbnQ+IGZsYWcgd291bGQgaW5kaWNhdGUgaWYKK3RoZSBidWZmZXIgd2FzIGluZGVlZCBhbGxvY2F0ZWQgaW4gZGV2aWNlIG1lbW9yeSByYXRoZXIgdGhhbiBETUEtYWJsZQorc3lzdGVtIG1lbW9yeS4gSXQgd2FzIGJhcmVseSB1c2VmdWwgYW5kIHNvIHdhcyByZW1vdmVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItZnJhbWVidWZmZXI7IHRoZQorPHN0cnVjdGZpZWxkPmJhc2VbM108L3N0cnVjdGZpZWxkPiBhcnJheSBhbnRpY2lwYXRpbmcgZG91YmxlLSBhbmQKK3RyaXBsZS1idWZmZXJpbmcgaW4gb2ZmLXNjcmVlbiB2aWRlbyBtZW1vcnksIGhvd2V2ZXIgd2l0aG91dCBkZWZpbmluZworYSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtLCB3YXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgcG9pbnRlci4gVGhlCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9TQ0FMRVVQPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9TQ0FMRURPV048L2NvbnN0YW50PiBmbGFncyB3ZXJlIHJlbW92ZWQuCitBcHBsaWNhdGlvbnMgY2FuIGRldGVybWluZSB0aGlzIGNhcGFiaWxpdHkgbW9yZSBhY2N1cmF0ZWx5IHVzaW5nIHRoZQorbmV3IGNyb3BwaW5nIGFuZCBzY2FsaW5nIGludGVyZmFjZS4gVGhlCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9DTElQUElORzwvY29uc3RhbnQ+IGZsYWcgd2FzIHJlcGxhY2VkIGJ5Cis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9CSVRNQVBfQ0xJUFBJTkc8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLWNsaXA7IHRoZSA8c3RydWN0ZmllbGQ+eDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnk8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgbW92ZWQgaW50byBhCis8c3RydWN0ZmllbGQ+Yzwvc3RydWN0ZmllbGQ+IHN1YnN0cnVjdHVyZSBvZiB0eXBlICZ2NGwyLXJlY3Q7LiBUaGUKKzxzdHJ1Y3RmaWVsZD54PC9zdHJ1Y3RmaWVsZD4gYW5kIDxzdHJ1Y3RmaWVsZD55PC9zdHJ1Y3RmaWVsZD4gZmllbGRzCit3ZXJlIHJlbmFtZWQgdG8gPHN0cnVjdGZpZWxkPmxlZnQ8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD50b3A8L3N0cnVjdGZpZWxkPiwgJmllOyBvZmZzZXRzIHRvIGEgY29udGV4dCBkZXBlbmRlbnQKK29yaWdpbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLXdpbmRvdzsgdGhlIDxzdHJ1Y3RmaWVsZD54PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+eTwvc3RydWN0ZmllbGQ+LCA8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5oZWlnaHQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBtb3ZlZCBpbnRvIGEKKzxzdHJ1Y3RmaWVsZD53PC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIGFzIGFib3ZlLiBBCis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0eXBlICV2NGwyLWZpZWxkOyB3YXMgYWRkZWQKK3RvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZmllbGQgYW5kIGZyYW1lIChpbnRlcmxhY2VkKSBvdmVybGF5LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRpZ2l0YWwgem9vbSBpbnRlcmZhY2UsIGluY2x1ZGluZyBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfem9vbWNhcDwvc3RydWN0bmFtZT4sIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl96b29tPC9zdHJ1Y3RuYW1lPiwKKzxjb25zdGFudD5WNEwyX1pPT01fTk9OQ0FQPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9aT09NX1dISUxFU1RSRUFNSU5HPC9jb25zdGFudD4gd2FzIHJlcGxhY2VkIGJ5IGEgbmV3Citjcm9wcGluZyBhbmQgc2NhbGluZyBpbnRlcmZhY2UuIFRoZSBwcmV2aW91c2x5IHVudXNlZCBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfY3JvcGNhcDwvc3RydWN0bmFtZT4gYW5kCis8c3RydWN0bmFtZT52NGwyX2Nyb3A8L3N0cnVjdG5hbWU+IHdoZXJlIHJlZGVmaW5lZCBmb3IgdGhpcyBwdXJwb3NlLgorU2VlIDx4cmVmIGxpbmtlbmQ9ImNyb3AiIC8+IGZvciBkZXRhaWxzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItdmJpLWZvcm1hdDsgdGhlCis8c3RydWN0ZmllbGQ+U0FNUExFX0ZPUk1BVDwvc3RydWN0ZmllbGQ+IGZpZWxkIG5vdyBjb250YWlucyBhCitmb3VyLWNoYXJhY3Rlci1jb2RlIGFzIHVzZWQgdG8gaWRlbnRpZnkgdmlkZW8gaW1hZ2UgZm9ybWF0cyBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfR1JFWTwvY29uc3RhbnQ+IHJlcGxhY2VzIHRoZQorPGNvbnN0YW50PlY0TDJfVkJJX1NGX1VCWVRFPC9jb25zdGFudD4gZGVmaW5lLiBUaGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBleHRlbmRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLWNhcHR1cmVwYXJtOyB0aGUgdHlwZSBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD50aW1lcGVyZnJhbWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBjaGFuZ2VkIGZyb20gdW5zaWduZWQKK2xvbmcgdG8gJnY0bDItZnJhY3Q7LiBUaGlzIGFsbG93cyB0aGUgYWNjdXJhdGUgZXhwcmVzc2lvbiBvZiBtdWx0aXBsZXMKK29mIHRoZSBOVFNDLU0gZnJhbWUgcmF0ZSAzMDAwMCAvIDEwMDEuIEEgbmV3IGZpZWxkCis8c3RydWN0ZmllbGQ+cmVhZGJ1ZmZlcnM8L3N0cnVjdGZpZWxkPiB3YXMgYWRkZWQgdG8gY29udHJvbCB0aGUgZHJpdmVyCitiZWhhdmlvdXIgaW4gcmVhZCBJL08gbW9kZS48L3BhcmE+CisKKwkgIDxwYXJhPlNpbWlsYXIgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gJnY0bDItb3V0cHV0cGFybTsuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgc3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfcGVyZm9ybWFuY2U8L3N0cnVjdG5hbWU+CithbmQgPGNvbnN0YW50PlZJRElPQ19HX1BFUkY8L2NvbnN0YW50PiBpb2N0bCB3ZXJlIGRyb3BwZWQuIEV4Y2VwdCB3aGVuCit1c2luZyB0aGUgPGxpbmsgbGlua2VuZD0icnciPnJlYWQvd3JpdGUgSS9PIG1ldGhvZDwvbGluaz4sIHdoaWNoIGlzCitsaW1pdGVkIGFueXdheSwgdGhpcyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSB0bworYXBwbGljYXRpb25zLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGV4YW1wbGUgdHJhbnNmb3JtYXRpb24gZnJvbSBSR0IgdG8gWUNiQ3IgY29sb3IKK3NwYWNlIGluIHRoZSBvbGQgVjRMMiBkb2N1bWVudGF0aW9uIHdhcyBpbmFjY3VyYXRlLCB0aGlzIGhhcyBiZWVuCitjb3JyZWN0ZWQgaW4gPHhyZWYgbGlua2VuZD0icGl4Zm10IiAvPi48IS0tIDAuNTY3MEcgc2hvdWxkIGJlCiswLjU4NywgYW5kIDEyNy8xMTIgIT0gMjU1LzIyNCAtLT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiAyMDAzLTA2LTE5PC90aXRsZT4KKworICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IGNhcGFiaWxpdHkgZmxhZworPGNvbnN0YW50PlY0TDJfQ0FQX1JBRElPPC9jb25zdGFudD4gd2FzIGFkZGVkIGZvciByYWRpbyBkZXZpY2VzLiBQcmlvcgordG8gdGhpcyBjaGFuZ2UgcmFkaW8gZGV2aWNlcyB3b3VsZCBpZGVudGlmeSBzb2xlbHkgYnkgaGF2aW5nIGV4YWN0bHkgb25lCit0dW5lciB3aG9zZSB0eXBlIGZpZWxkIHJlYWRzIDxjb25zdGFudD5WNEwyX1RVTkVSX1JBRElPPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BbiBvcHRpb25hbCBkcml2ZXIgYWNjZXNzIHByaW9yaXR5IG1lY2hhbmlzbSB3YXMKK2FkZGVkLCBzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXByaSIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYXVkaW8gaW5wdXQgYW5kIG91dHB1dCBpbnRlcmZhY2Ugd2FzIGZvdW5kIHRvIGJlCitpbmNvbXBsZXRlLjwvcGFyYT4KKwkgIDxwYXJhPlByZXZpb3VzbHkgdGhlICZWSURJT0MtRy1BVURJTzsKK2lvY3RsIHdvdWxkIGVudW1lcmF0ZSB0aGUgYXZhaWxhYmxlIGF1ZGlvIGlucHV0cy4gQW4gaW9jdGwgdG8KK2RldGVybWluZSB0aGUgY3VycmVudCBhdWRpbyBpbnB1dCwgaWYgbW9yZSB0aGFuIG9uZSBjb21iaW5lcyB3aXRoIHRoZQorY3VycmVudCB2aWRlbyBpbnB1dCwgZGlkIG5vdCBleGlzdC4gU28KKzxjb25zdGFudD5WSURJT0NfR19BVURJTzwvY29uc3RhbnQ+IHdhcyByZW5hbWVkIHRvCis8Y29uc3RhbnQ+VklESU9DX0dfQVVESU9fT0xEPC9jb25zdGFudD4sIHRoaXMgaW9jdGwgd2lsbCBiZSByZW1vdmVkIGluCit0aGUgZnV0dXJlLiBUaGUgJlZJRElPQy1FTlVNQVVESU87IGlvY3RsIHdhcyBhZGRlZCB0byBlbnVtZXJhdGUKK2F1ZGlvIGlucHV0cywgd2hpbGUgJlZJRElPQy1HLUFVRElPOyBub3cgcmVwb3J0cyB0aGUgY3VycmVudCBhdWRpbworaW5wdXQuPC9wYXJhPgorCSAgPHBhcmE+VGhlIHNhbWUgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gJlZJRElPQy1HLUFVRE9VVDsgYW5kCismVklESU9DLUVOVU1BVURPVVQ7LjwvcGFyYT4KKwkgIDxwYXJhPlVudGlsIGZ1cnRoZXIgdGhlICJ2aWRlb2RldiIgbW9kdWxlIHdpbGwgYXV0b21hdGljYWxseQordHJhbnNsYXRlIGJldHdlZW4gdGhlIG9sZCBhbmQgbmV3IGlvY3RscywgYnV0IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucworbXVzdCBiZSB1cGRhdGVkIHRvIHN1Y2Nlc3NmdWxseSBjb21waWxlIGFnYWluLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZWSURJT0MtT1ZFUkxBWTsgaW9jdGwgd2FzIGluY29ycmVjdGx5IGRlZmluZWQgd2l0aAord3JpdGUtcmVhZCBwYXJhbWV0ZXIuIEl0IHdhcyBjaGFuZ2VkIHRvIHdyaXRlLW9ubHksIHdoaWxlIHRoZSB3cml0ZS1yZWFkCit2ZXJzaW9uIHdhcyByZW5hbWVkIHRvIDxjb25zdGFudD5WSURJT0NfT1ZFUkxBWV9PTEQ8L2NvbnN0YW50Pi4gVGhlIG9sZAoraW9jdGwgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFVudGlsIGZ1cnRoZXIgdGhlICJ2aWRlb2RldiIKK2tlcm5lbCBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZSB0byB0aGUgbmV3IHZlcnNpb24sIHNvIGRyaXZlcnMKK211c3QgYmUgcmVjb21waWxlZCwgYnV0IG5vdCBhcHBsaWNhdGlvbnMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48eHJlZiBsaW5rZW5kPSJvdmVybGF5IiAvPiBpbmNvcnJlY3RseSBzdGF0ZWQgdGhhdAorY2xpcHBpbmcgcmVjdGFuZ2xlcyBkZWZpbmUgcmVnaW9ucyB3aGVyZSB0aGUgdmlkZW8gY2FuIGJlIHNlZW4uCitDb3JyZWN0IGlzIHRoYXQgY2xpcHBpbmcgcmVjdGFuZ2xlcyBkZWZpbmUgcmVnaW9ucyB3aGVyZQorPGVtcGhhc2lzPm5vPC9lbXBoYXNpcz4gdmlkZW8gc2hhbGwgYmUgZGlzcGxheWVkIGFuZCBzbyB0aGUgZ3JhcGhpY3MKK3N1cmZhY2UgY2FuIGJlIHNlZW4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJlZJRElPQy1TLVBBUk07IGFuZCAmVklESU9DLVMtQ1RSTDsgaW9jdGxzIHdlcmUKK2RlZmluZWQgd2l0aCB3cml0ZS1vbmx5IHBhcmFtZXRlciwgaW5jb25zaXN0ZW50IHdpdGggb3RoZXIgaW9jdGxzCittb2RpZnlpbmcgdGhlaXIgYXJndW1lbnQuIFRoZXkgd2VyZSBjaGFuZ2VkIHRvIHdyaXRlLXJlYWQsIHdoaWxlIGEKKzxjb25zdGFudD5fT0xEPC9jb25zdGFudD4gc3VmZml4IHdhcyBhZGRlZCB0byB0aGUgd3JpdGUtb25seSB2ZXJzaW9ucy4KK1RoZSBvbGQgaW9jdGxzIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBEcml2ZXJzIGFuZAorYXBwbGljYXRpb25zIGFzc3VtaW5nIGEgY29uc3RhbnQgcGFyYW1ldGVyIG5lZWQgYW4gdXBkYXRlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIDIwMDMtMTEtMDU8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluIDx4cmVmIGxpbmtlbmQ9InBpeGZtdC1yZ2IiIC8+IHRoZSBmb2xsb3dpbmcgcGl4ZWwKK2Zvcm1hdHMgd2VyZSBpbmNvcnJlY3RseSB0cmFuc2ZlcnJlZCBmcm9tIEJpbGwgRGlya3MnIFY0TDIKK3NwZWNpZmljYXRpb24uIERlc2NyaXB0aW9ucyBiZWxvdyByZWZlciB0byBieXRlcyBpbiBtZW1vcnksIGluCithc2NlbmRpbmcgYWRkcmVzcyBvcmRlci48aW5mb3JtYWx0YWJsZT4KKwkgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCQk8dGhlYWQ+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT5TeW1ib2w8L2VudHJ5PgorCQkgICAgPGVudHJ5PkluIHRoaXMgZG9jdW1lbnQgcHJpb3IgdG8gcmV2aXNpb24KKzAuNTwvZW50cnk+CisJCSAgICA8ZW50cnk+Q29ycmVjdGVkPC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90aGVhZD4KKwkJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMjQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+QiwgRywgUjwvZW50cnk+CisJCSAgICA8ZW50cnk+UiwgRywgQjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjI0PC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5PlIsIEcsIEI8L2VudHJ5PgorCQkgICAgPGVudHJ5PkIsIEcsIFI8L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0IzMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT5CLCBHLCBSLCBYPC9lbnRyeT4KKwkJICAgIDxlbnRyeT5SLCBHLCBCLCBYPC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMzI8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+UiwgRywgQiwgWDwvZW50cnk+CisJCSAgICA8ZW50cnk+QiwgRywgUiwgWDwvZW50cnk+CisJCSAgPC9yb3c+CisJCTwvdGJvZHk+CisJICAgICAgPC90Z3JvdXA+CisJICAgIDwvaW5mb3JtYWx0YWJsZT4gVGhlCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjI0PC9jb25zdGFudD4gZXhhbXBsZSB3YXMgYWx3YXlzCitjb3JyZWN0LjwvcGFyYT4KKwkgIDxwYXJhPkluIDx4cmVmIGxpbmtlbmQ9InY0bC1pbWFnZS1wcm9wZXJ0aWVzIiAvPiB0aGUgbWFwcGluZworb2YgdGhlIFY0TCA8Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SR0IyNDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJREVPX1BBTEVUVEVfUkdCMzI8L2NvbnN0YW50PiBmb3JtYXRzIHRvIFY0TDIgcGl4ZWwgZm9ybWF0cword2FzIGFjY29yZGluZ2x5IGNvcnJlY3RlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlVucmVsYXRlZCB0byB0aGUgZml4ZXMgYWJvdmUsIGRyaXZlcnMgbWF5IHN0aWxsCitpbnRlcnByZXQgc29tZSBWNEwyIFJHQiBwaXhlbCBmb3JtYXRzIGRpZmZlcmVudGx5LiBUaGVzZSBpc3N1ZXMgaGF2ZQoreWV0IHRvIGJlIGFkZHJlc3NlZCwgZm9yIGRldGFpbHMgc2VlIDx4cmVmCisJICAgICAgbGlua2VuZD0icGl4Zm10LXJnYiIgLz4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42LjYsIDIwMDQtMDUtMDk8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmVklESU9DLUNST1BDQVA7IGlvY3RsIHdhcyBpbmNvcnJlY3RseSBkZWZpbmVkCit3aXRoIHJlYWQtb25seSBwYXJhbWV0ZXIuIEl0IGlzIG5vdyBkZWZpbmVkIGFzIHdyaXRlLXJlYWQgaW9jdGwsIHdoaWxlCit0aGUgcmVhZC1vbmx5IHZlcnNpb24gd2FzIHJlbmFtZWQgdG8KKzxjb25zdGFudD5WSURJT0NfQ1JPUENBUF9PTEQ8L2NvbnN0YW50Pi4gVGhlIG9sZCBpb2N0bCB3aWxsIGJlIHJlbW92ZWQKK2luIHRoZSBmdXR1cmUuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42Ljg8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IGZpZWxkIDxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+IChmb3JtZXIKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZFswXTwvc3RydWN0ZmllbGQ+KSB3YXMgYWRkZWQgdG8gdGhlICZ2NGwyLWJ1ZmZlcjsKK3N0cnVjdHVyZS4gUHVycG9zZSBvZiB0aGlzIGZpZWxkIGlzIHRvIGFsdGVybmF0ZSBiZXR3ZWVuIHZpZGVvIGlucHV0cworKCZlZzsgY2FtZXJhcykgaW4gc3RlcCB3aXRoIHRoZSB2aWRlbyBjYXB0dXJpbmcgcHJvY2Vzcy4gVGhpcyBmdW5jdGlvbgorbXVzdCBiZSBlbmFibGVkIHdpdGggdGhlIG5ldyA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19JTlBVVDwvY29uc3RhbnQ+CitmbGFnLiBUaGUgPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgbm8gbG9uZ2VyCityZWFkLW9ubHkuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgc3BlYyBlcnJhdHVtIDIwMDQtMDgtMDE8L3RpdGxlPgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKKzx4cmVmIGxpbmtlbmQ9ImZ1bmMtb3BlbiIgLz4gZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IGRvY3VtZW50ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BdWRpbyBvdXRwdXQgaW9jdGxzIGVuZCBpbiAtQVVET1VULCBub3QgLUFVRElPT1VULjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gdGhlIEN1cnJlbnQgQXVkaW8gSW5wdXQgZXhhbXBsZSB0aGUKKzxjb25zdGFudD5WSURJT0NfR19BVURJTzwvY29uc3RhbnQ+IGlvY3RsIHRvb2sgdGhlIHdyb25nCithcmd1bWVudC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSAmVklESU9DLVFCVUY7IGFuZAorJlZJRElPQy1EUUJVRjsgaW9jdGxzIGRpZCBub3QgbWVudGlvbiB0aGUgJnY0bDItYnVmZmVyOworPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJdCB3YXMgYWxzbyBtaXNzaW5nIGZyb20KK2V4YW1wbGVzLiBBbHNvIG9uIHRoZSA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gcGFnZSB0aGUgJkVJTzsKK3dhcyBub3QgZG9jdW1lbnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTQ8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IHNsaWNlZCBWQkkgaW50ZXJmYWNlIHdhcyBhZGRlZC4gSXQgaXMgZG9jdW1lbnRlZAoraW4gPHhyZWYgbGlua2VuZD0ic2xpY2VkIiAvPiBhbmQgcmVwbGFjZXMgdGhlIGludGVyZmFjZSBmaXJzdAorcHJvcG9zZWQgaW4gVjRMMiBzcGVjaWZpY2F0aW9uIDAuOC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTU8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmVklESU9DLUxPRy1TVEFUVVM7IGlvY3RsIHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyB2aWRlbyBzdGFuZGFyZHMKKzxjb25zdGFudD5WNEwyX1NURF9OVFNDXzQ0MzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfU1REX1NFQ0FNX0xDPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9TVERfU0VDQU1fREs8L2NvbnN0YW50PiAoYSBzZXQgb2YgU0VDQU0gRCwgSyBhbmQgSzEpLAorYW5kIDxjb25zdGFudD5WNEwyX1NURF9BVFNDPC9jb25zdGFudD4gKGEgc2V0IG9mCis8Y29uc3RhbnQ+VjRMMl9TVERfQVRTQ184X1ZTQjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfU1REX0FUU0NfMTZfVlNCPC9jb25zdGFudD4pIHdlcmUgZGVmaW5lZC4gTm90ZSB0aGUKKzxjb25zdGFudD5WNEwyX1NURF81MjVfNjA8L2NvbnN0YW50PiBzZXQgbm93IGluY2x1ZGVzCis8Y29uc3RhbnQ+VjRMMl9TVERfTlRTQ180NDM8L2NvbnN0YW50Pi4gU2VlIGFsc28gPHhyZWYKKwkgICAgICBsaW5rZW5kPSJ2NGwyLXN0ZC1pZCIgLz4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ19HX0NPTVA8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19DT01QPC9jb25zdGFudD4gaW9jdGwgd2VyZSByZW5hbWVkIHRvCis8Y29uc3RhbnQ+VklESU9DX0dfTVBFR0NPTVA8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19NUEVHQ09NUDwvY29uc3RhbnQ+IHJlc3BlY3RpdmVseS4gVGhlaXIgYXJndW1lbnQKK3dhcyByZXBsYWNlZCBieSBhIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9tcGVnX2NvbXByZXNzaW9uPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLiAoVGhlCis8Y29uc3RhbnQ+VklESU9DX0dfTVBFR0NPTVA8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19NUEVHQ09NUDwvY29uc3RhbnQ+IGlvY3RscyB3aGVyZSByZW1vdmVkIGluIExpbnV4CisyLjYuMjUuKTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIHNwZWMgZXJyYXR1bSAyMDA1LTExLTI3PC90aXRsZT4KKyAgICAgIDxwYXJhPlRoZSBjYXB0dXJlIGV4YW1wbGUgaW4gPHhyZWYgbGlua2VuZD0iY2FwdHVyZS1leGFtcGxlIiAvPgorY2FsbGVkIHRoZSAmVklESU9DLVMtQ1JPUDsgaW9jdGwgd2l0aG91dCBjaGVja2luZyBpZiBjcm9wcGluZyBpcworc3VwcG9ydGVkLiBJbiB0aGUgdmlkZW8gc3RhbmRhcmQgc2VsZWN0aW9uIGV4YW1wbGUgaW4KKzx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkIiAvPiB0aGUgJlZJRElPQy1TLVNURDsgY2FsbCB1c2VkIHRoZSB3cm9uZworYXJndW1lbnQgdHlwZS48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBzcGVjIGVycmF0dW0gMjAwNi0wMS0xMDwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxjb25zdGFudD5WNEwyX0lOX1NUX0NPTE9SX0tJTEw8L2NvbnN0YW50PiBmbGFnIGluCismdjRsMi1pbnB1dDsgbm90IG9ubHkgaW5kaWNhdGVzIGlmIHRoZSBjb2xvciBraWxsZXIgaXMgZW5hYmxlZCwgYnV0CithbHNvIGlmIGl0IGlzIGFjdGl2ZS4gKFRoZSBjb2xvciBraWxsZXIgZGlzYWJsZXMgY29sb3IgZGVjb2Rpbmcgd2hlbgoraXQgZGV0ZWN0cyBubyBjb2xvciBpbiB0aGUgdmlkZW8gc2lnbmFsIHRvIGltcHJvdmUgdGhlIGltYWdlCitxdWFsaXR5Lik8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZWSURJT0MtUy1QQVJNOyBpcyBhIHdyaXRlLXJlYWQgaW9jdGwsIG5vdCB3cml0ZS1vbmx5IGFzCitzdGF0ZWQgb24gaXRzIHJlZmVyZW5jZSBwYWdlLiBUaGUgaW9jdGwgY2hhbmdlZCBpbiAyMDAzIGFzIG5vdGVkIGFib3ZlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIHNwZWMgZXJyYXR1bSAyMDA2LTAyLTAzPC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiAmdjRsMi1jYXB0dXJlcGFybTsgYW5kICZ2NGwyLW91dHB1dHBhcm07IHRoZQorPHN0cnVjdGZpZWxkPnRpbWVwZXJmcmFtZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGdpdmVzIHRoZSB0aW1lIGluCitzZWNvbmRzLCBub3QgbWljcm9zZWNvbmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIHNwZWMgZXJyYXR1bSAyMDA2LTAyLTA0PC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmNsaXBzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4KKyZ2NGwyLXdpbmRvdzsgbXVzdCBwb2ludCB0byBhbiBhcnJheSBvZiAmdjRsMi1jbGlwOywgbm90IGEgbGlua2VkCitsaXN0LCBiZWNhdXNlIGRyaXZlcnMgaWdub3JlIHRoZSBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfY2xpcDwvc3RydWN0bmFtZT4uPHN0cnVjdGZpZWxkPm5leHQ8L3N0cnVjdGZpZWxkPgorcG9pbnRlci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTc8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyB2aWRlbyBzdGFuZGFyZCBtYWNyb3Mgd2VyZSBhZGRlZDoKKzxjb25zdGFudD5WNEwyX1NURF9OVFNDX01fS1I8L2NvbnN0YW50PiAoTlRTQyBNIFNvdXRoIEtvcmVhKSwgYW5kIHRoZQorc2V0cyA8Y29uc3RhbnQ+VjRMMl9TVERfTU48L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1NURF9CPC9jb25zdGFudD4sIDxjb25zdGFudD5WNEwyX1NURF9HSDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfU1REX0RLPC9jb25zdGFudD4uIFRoZQorPGNvbnN0YW50PlY0TDJfU1REX05UU0M8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1NURF9TRUNBTTwvY29uc3RhbnQ+IHNldHMgbm93IGluY2x1ZGUKKzxjb25zdGFudD5WNEwyX1NURF9OVFNDX01fS1I8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1NURF9TRUNBTV9MQzwvY29uc3RhbnQ+IHJlc3BlY3RpdmVseS48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IDxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI8L2NvbnN0YW50Pgord2FzIGRlZmluZWQgdG8gcmVjb3JkIGJvdGggbGFuZ3VhZ2VzIG9mIGEgYmlsaW5ndWFsIHByb2dyYW0uIFRoZQordXNlIG9mIDxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfU1RFUkVPPC9jb25zdGFudD4gZm9yIHRoaXMgcHVycG9zZQoraXMgZGVwcmVjYXRlZCBub3cuIFNlZSB0aGUgJlZJRElPQy1HLVRVTkVSOyBzZWN0aW9uIGZvcgorZGV0YWlscy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBzcGVjIGVycmF0dW0gMjAwNi0wOS0yMyAoRHJhZnQgMC4xNSk8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluIHZhcmlvdXMgcGxhY2VzCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUPC9jb25zdGFudD4gb2YgdGhlIHNsaWNlZCBWQkkKK2ludGVyZmFjZSB3ZXJlIG5vdCBtZW50aW9uZWQgYWxvbmcgd2l0aCBvdGhlciBidWZmZXIgdHlwZXMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1hdWRpbyIgLz4gaXQgd2FzIGNsYXJpZmllZAordGhhdCB0aGUgJnY0bDItYXVkaW87IDxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgYSBmbGFncworZmllbGQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48eHJlZiBsaW5rZW5kPSJ2aWRpb2MtcXVlcnljYXAiIC8+IGRpZCBub3QgbWVudGlvbiB0aGUKK3NsaWNlZCBWQkkgYW5kIHJhZGlvIGNhcGFiaWxpdHkgZmxhZ3MuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1mcmVxdWVuY3kiIC8+IGl0IHdhcworY2xhcmlmaWVkIHRoYXQgYXBwbGljYXRpb25zIG11c3QgaW5pdGlhbGl6ZSB0aGUgdHVuZXIKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItZnJlcXVlbmN5OyBiZWZvcmUKK2NhbGxpbmcgJlZJRElPQy1TLUZSRVFVRU5DWTsuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkKK2luICZ2NGwyLXJlcXVlc3RidWZmZXJzOyBoYXMgMiBlbGVtZW50cywgbm90IDMyLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gPHhyZWYgbGlua2VuZD0ib3V0cHV0IiAvPiBhbmQgPHhyZWYKKwkgICAgICBsaW5rZW5kPSJyYXctdmJpIiAvPiB0aGUgZGV2aWNlIGZpbGUgbmFtZXMKKzxmaWxlbmFtZT4vZGV2L3ZvdXQ8L2ZpbGVuYW1lPiB3aGljaCBuZXZlciBjYXVnaHQgb24gd2VyZSByZXBsYWNlZAorYnkgPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPldpdGggTGludXggMi42LjE1IHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgVkJJIGRldmljZSBtaW5vcgorbnVtYmVycyB3YXMgZXh0ZW5kZWQgZnJvbSAyMjQtMjM5IHRvIDIyNC0yNTUuIEFjY29yZGluZ2x5IGRldmljZSBmaWxlIG5hbWVzCis8ZmlsZW5hbWU+L2Rldi92YmkwPC9maWxlbmFtZT4gdG8gPGZpbGVuYW1lPi9kZXYvdmJpMzE8L2ZpbGVuYW1lPiBhcmUKK3Bvc3NpYmxlIG5vdy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTg8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyBpb2N0bHMgJlZJRElPQy1HLUVYVC1DVFJMUzssICZWSURJT0MtUy1FWFQtQ1RSTFM7CithbmQgJlZJRElPQy1UUlktRVhULUNUUkxTOyB3ZXJlIGFkZGVkLCBhIGZsYWcgdG8gc2tpcCB1bnN1cHBvcnRlZAorY29udHJvbHMgd2l0aCAmVklESU9DLVFVRVJZQ1RSTDssIG5ldyBjb250cm9sIHR5cGVzCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0PC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUzwvY29uc3RhbnQ+ICg8eHJlZgorCSAgICAgIGxpbmtlbmQ9InY0bDItY3RybC10eXBlIiAvPiksIGFuZCBuZXcgY29udHJvbCBmbGFncworPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX1VQREFURTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfU0xJREVSPC9jb25zdGFudD4gKDx4cmVmCisJICAgICAgbGlua2VuZD0iY29udHJvbC1mbGFncyIgLz4pLiBTZWUgPHhyZWYKKwkgICAgICBsaW5rZW5kPSJleHRlbmRlZC1jb250cm9scyIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42LjE5PC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiAmdjRsMi1zbGljZWQtdmJpLWNhcDsgYSBidWZmZXIgdHlwZSBmaWVsZCB3YXMgYWRkZWQKK3JlcGxhY2luZyBhIHJlc2VydmVkIGZpZWxkLiBOb3RlIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgdGhlIHNpemUgb2YKK2VudW0gdHlwZXMgZGlmZmVycyBmcm9tIGludCB0eXBlcyB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGNoYW5nZWQuCitUaGUgJlZJRElPQy1HLVNMSUNFRC1WQkktQ0FQOyBpb2N0bCB3YXMgcmVkZWZpbmVkIGZyb20gYmVpbmcgcmVhZC1vbmx5Cit0byB3cml0ZS1yZWFkLiBBcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIHRoZSB0eXBlIGZpZWxkIGFuZCBjbGVhcgordGhlIHJlc2VydmVkIGZpZWxkcyBub3cuIFRoZXNlIGNoYW5nZXMgbWF5IDxlbXBoYXNpcz5icmVhayB0aGUKK2NvbXBhdGliaWxpdHk8L2VtcGhhc2lzPiB3aXRoIG9sZGVyIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBpb2N0bHMgJlZJRElPQy1FTlVNLUZSQU1FU0laRVM7IGFuZAorJlZJRElPQy1FTlVNLUZSQU1FSU5URVJWQUxTOyB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QSBuZXcgcGl4ZWwgZm9ybWF0IDxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNDQ0PC9jb25zdGFudD4gKDx4cmVmCitsaW5rZW5kPSJyZ2ItZm9ybWF0cyIgLz4pIHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBzcGVjIGVycmF0dW0gMjAwNi0xMC0xMiAoRHJhZnQgMC4xNyk8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSE0xMjwvY29uc3RhbnQ+ICg8eHJlZgorbGlua2VuZD0icmVzZXJ2ZWQtZm9ybWF0cyIgLz4pIGlzIGEgWVVWIDQ6MjowLCBub3QgNDoyOjIgZm9ybWF0LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yMTwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlIGlzCitub3cgZHVhbCBsaWNlbnNlZCB1bmRlciBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIHR3byBvcgorbGF0ZXIsIGFuZCB1bmRlciBhIDMtY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yMjwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VHdvIG5ldyBmaWVsZCBvcmRlcnMKKwkgIDxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEI8L2NvbnN0YW50PiBhbmQKKwkgIDxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQ8L2NvbnN0YW50PiB3ZXJlCisJICBhZGRlZC4gU2VlIDx4cmVmIGxpbmtlbmQ9InY0bDItZmllbGQiIC8+IGZvciBkZXRhaWxzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhyZWUgbmV3IGNsaXBwaW5nL2JsZW5kaW5nIG1ldGhvZHMgd2l0aCBhIGdsb2JhbCBvcgorc3RyYWlnaHQgb3IgaW52ZXJ0ZWQgbG9jYWwgYWxwaGEgdmFsdWUgd2VyZSBhZGRlZCB0byB0aGUgdmlkZW8gb3ZlcmxheQoraW50ZXJmYWNlLiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAmVklESU9DLUctRkJVRjsgYW5kCismVklESU9DLVMtRkJVRjsgaW9jdGxzIGZvciBkZXRhaWxzLjwvcGFyYT4KKwkgIDxwYXJhPkEgbmV3IDxzdHJ1Y3RmaWVsZD5nbG9iYWxfYWxwaGE8L3N0cnVjdGZpZWxkPiBmaWVsZAord2FzIGFkZGVkIHRvIDxsaW5rCitsaW5rZW5kPSJ2NGwyLXdpbmRvdyI+PHN0cnVjdG5hbWU+djRsMl93aW5kb3c8L3N0cnVjdG5hbWU+PC9saW5rPiwKK2V4dGVuZGluZyB0aGUgc3RydWN0dXJlLiBUaGlzIG1heSA8ZW1waGFzaXM+YnJlYWsKK2NvbXBhdGliaWxpdHk8L2VtcGhhc2lzPiB3aXRoIGFwcGxpY2F0aW9ucyB1c2luZyBhIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl93aW5kb3c8L3N0cnVjdG5hbWU+IGRpcmVjdGx5LiBIb3dldmVyIHRoZSA8bGluaworbGlua2VuZD0idmlkaW9jLWctZm10Ij5WSURJT0NfRy9TL1RSWV9GTVQ8L2xpbms+IGlvY3Rscywgd2hpY2ggdGFrZSBhCitwb2ludGVyIHRvIGEgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPiBwYXJlbnQKK3N0cnVjdHVyZSB3aXRoIHBhZGRpbmcgYnl0ZXMgYXQgdGhlIGVuZCwgYXJlIG5vdCBhZmZlY3RlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBmb3JtYXQgb2YgdGhlIDxzdHJ1Y3RmaWVsZD5jaHJvbWFrZXk8L3N0cnVjdGZpZWxkPgorZmllbGQgaW4gJnY0bDItd2luZG93OyBjaGFuZ2VkIGZyb20gImhvc3Qgb3JkZXIgUkdCMzIiIHRvIGEgcGl4ZWwKK3ZhbHVlIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgZnJhbWVidWZmZXIuIFRoaXMgbWF5IDxlbXBoYXNpcz5icmVhaworY29tcGF0aWJpbGl0eTwvZW1waGFzaXM+IHdpdGggZXhpc3RpbmcgYXBwbGljYXRpb25zLiBEcml2ZXJzCitzdXBwb3J0aW5nIHRoZSAiaG9zdCBvcmRlciBSR0IzMiIgZm9ybWF0IGFyZSBub3Qga25vd24uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMjQ8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBwaXhlbCBmb3JtYXRzCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BBTDg8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDQ0PC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjU1NTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY1NjU8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWMzI8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yNTwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHBpeGVsIGZvcm1hdHMgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVkxNiI+Cis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1kxNjwvY29uc3RhbnQ+PC9saW5rPiBhbmQgPGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1TQkdHUjE2Ij4KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0JHR1IxNjwvY29uc3RhbnQ+PC9saW5rPiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sczwvbGluaz4KKzxjb25zdGFudD5WNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0hVRV9BVVRPPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1NIQVJQTkVTUzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT048L2NvbnN0YW50PiB3ZXJlIGFkZGVkLiBUaGUKK2NvbnRyb2xzIDxjb25zdGFudD5WNEwyX0NJRF9CTEFDS19MRVZFTDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1dISVRFTkVTUzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0hDRU5URVI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0NJRF9WQ0VOVEVSPC9jb25zdGFudD4gd2VyZSBkZXByZWNhdGVkLgorPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QSA8bGluayBsaW5rZW5kPSJjYW1lcmEtY29udHJvbHMiPkNhbWVyYSBjb250cm9scworY2xhc3M8L2xpbms+IHdhcyBhZGRlZCwgd2l0aCB0aGUgbmV3IGNvbnRyb2xzCis8Y29uc3RhbnQ+VjRMMl9DSURfRVhQT1NVUkVfQVVUTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1BBTl9SRUxBVElWRTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1RJTFRfUkVMQVRJVkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9QQU5fUkVTRVQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9USUxUX1JFU0VUPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9BQlNPTFVURTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0ZPQ1VTX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfRk9DVVNfUkVMQVRJVkU8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0NJRF9GT0NVU19BVVRPPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfR19NUEVHQ09NUDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX01QRUdDT01QPC9jb25zdGFudD4gaW9jdGxzLCB3aGljaCB3ZXJlIHN1cGVyc2VkZWQKK2J5IHRoZSA8bGluayBsaW5rZW5kPSJleHRlbmRlZC1jb250cm9scyI+ZXh0ZW5kZWQgY29udHJvbHM8L2xpbms+CitpbnRlcmZhY2UgaW4gTGludXggMi42LjE4LCB3aGVyZSBmaW5hbGx5IHJlbW92ZWQgZnJvbSB0aGUKKzxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yNjwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHBpeGVsIGZvcm1hdHMKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWTE2PC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSMTY8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIHVzZXIgY29udHJvbHMKKzxjb25zdGFudD5WNEwyX0NJRF9DSFJPTUFfQUdDPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DSURfQ09MT1JfS0lMTEVSPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42LjI3PC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJlZJRElPQy1TLUhXLUZSRVEtU0VFSzsgaW9jdGwgYW5kIHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX0hXX0ZSRVFfU0VFSzwvY29uc3RhbnQ+IGNhcGFiaWxpdHkgd2VyZSBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgcGl4ZWwgZm9ybWF0cworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVllVPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BDQTUwMTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9QQ0E1MDU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUENBNTA4PC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BDQTU2MTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR0JSRzg8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFDMjA3PC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BKUEc8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yODwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkZWQgPGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUM8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzPC9jb25zdGFudD4gTVBFRyBhdWRpbyBlbmNvZGluZ3MuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkZWQgPGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDPC9jb25zdGFudD4gTVBFRwordmlkZW8gZW5jb2RpbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHBpeGVsIGZvcm1hdHMKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0dSQkcxMDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR1JCRzEwRFBDTTg8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yOTwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfR19DSElQX0lERU5UPC9jb25zdGFudD4gaW9jdGwgd2FzIHJlbmFtZWQKK3RvIDxjb25zdGFudD5WSURJT0NfR19DSElQX0lERU5UX09MRDwvY29uc3RhbnQ+IGFuZCAmVklESU9DLURCRy1HLUNISVAtSURFTlQ7Cit3YXMgaW50cm9kdWNlZCBpbiBpdHMgcGxhY2UuIFRoZSBvbGQgc3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfY2hpcF9pZGVudDwvc3RydWN0bmFtZT4KK3dhcyByZW5hbWVkIHRvIDxzdHJ1Y3RuYW1lIGlkPSJ2NGwyLWNoaXAtaWRlbnQtb2xkIj52NGwyX2NoaXBfaWRlbnRfb2xkPC9zdHJ1Y3RuYW1lPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgcGl4ZWwgZm9ybWF0cworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9WWVVZPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WMTY8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfTlY2MTwvY29uc3RhbnQ+IHdlcmUgYWRkZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkZWQgY2FtZXJhIGNvbnRyb2xzCis8Y29uc3RhbnQ+VjRMMl9DSURfWk9PTV9BQlNPTFVURTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1pPT01fUkVMQVRJVkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9aT09NX0NPTlRJTlVPVVM8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0NJRF9QUklWQUNZPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4zMDwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+TmV3IGNvbnRyb2wgZmxhZyA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTwvY29uc3RhbnQ+IHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5OZXcgY29udHJvbCA8Y29uc3RhbnQ+VjRMMl9DSURfQ09MT1JGWDwvY29uc3RhbnQ+IHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMzI8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluIG9yZGVyIHRvIGJlIGVhc2llciB0byBjb21wYXJlIGEgVjRMMiBBUEkgYW5kIGEga2VybmVsCit2ZXJzaW9uLCBub3cgVjRMMiBBUEkgaXMgbnVtYmVyZWQgdXNpbmcgdGhlIExpbnV4IEtlcm5lbCB2ZXJzaW9uIG51bWVyYXRpb24uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+RmluYWxpemVkIHRoZSBSRFMgY2FwdHVyZSBBUEkuIFNlZSA8eHJlZiBsaW5rZW5kPSJyZHMiIC8+IGZvcgorbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BZGRlZCBuZXcgY2FwYWJpbGl0aWVzIGZvciBtb2R1bGF0b3JzIGFuZCBSRFMgZW5jb2RlcnMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkIGRlc2NyaXB0aW9uIGZvciBsaWJ2NGwgQVBJLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIHN1cHBvcnQgZm9yIHN0cmluZyBjb250cm9scyB2aWEgbmV3IHR5cGUgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX1NUUklORzwvY29uc3RhbnQ+LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIDxjb25zdGFudD5WNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSPC9jb25zdGFudD4gZG9jdW1lbnRhdGlvbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BZGRlZCBGTSBNb2R1bGF0b3IgKEZNIFRYKSBFeHRlbmRlZCBDb250cm9sIENsYXNzOiA8Y29uc3RhbnQ+VjRMMl9DVFJMX0NMQVNTX0ZNX1RYPC9jb25zdGFudD4gYW5kIHRoZWlyIENvbnRyb2wgSURzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIFJlbW90ZSBDb250cm9sbGVyIGNoYXB0ZXIsIGRlc2NyaWJpbmcgdGhlIGRlZmF1bHQgUmVtb3RlIENvbnRyb2xsZXIgbWFwcGluZyBmb3IgbWVkaWEgZGV2aWNlcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICA8L3NlY3Rpb24+CisgICA8L3NlY3Rpb24+CisKKyAgIDxzZWN0aW9uIGlkPSJvdGhlciI+CisgICAgIDx0aXRsZT5SZWxhdGlvbiBvZiBWNEwyIHRvIG90aGVyIExpbnV4IG11bHRpbWVkaWEgQVBJczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ieHZpZGVvIj4KKyAgICAgIDx0aXRsZT5YIFZpZGVvIEV4dGVuc2lvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoZSBYIFZpZGVvIEV4dGVuc2lvbiAoYWJicmV2aWF0ZWQgWFZpZGVvIG9yIGp1c3QgWHYpIGlzCithbiBleHRlbnNpb24gb2YgdGhlIFggV2luZG93IHN5c3RlbSwgaW1wbGVtZW50ZWQgZm9yIGV4YW1wbGUgYnkgdGhlCitYRnJlZTg2IHByb2plY3QuIEl0cyBzY29wZSBpcyBzaW1pbGFyIHRvIFY0TDIsIGFuIEFQSSB0byB2aWRlbyBjYXB0dXJlCithbmQgb3V0cHV0IGRldmljZXMgZm9yIFggY2xpZW50cy4gWHYgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBkaXNwbGF5CitsaXZlIHZpZGVvIGluIGEgd2luZG93LCBzZW5kIHdpbmRvdyBjb250ZW50cyB0byBhIFRWIG91dHB1dCwgYW5kCitjYXB0dXJlIG9yIG91dHB1dCBzdGlsbCBpbWFnZXMgaW4gWFBpeG1hcHM8Zm9vdG5vdGU+CisJICA8cGFyYT5UaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBYRnJlZTg2LjwvcGFyYT4KKwk8L2Zvb3Rub3RlPi4gV2l0aCB0aGVpciBpbXBsZW1lbnRhdGlvbiBYRnJlZTg2IG1ha2VzIHRoZQorZXh0ZW5zaW9uIGF2YWlsYWJsZSBhY3Jvc3MgbWFueSBvcGVyYXRpbmcgc3lzdGVtcyBhbmQKK2FyY2hpdGVjdHVyZXMuPC9wYXJhPgorCisgICAgICA8cGFyYT5CZWNhdXNlIHRoZSBkcml2ZXIgaXMgZW1iZWRkZWQgaW50byB0aGUgWCBzZXJ2ZXIgWHYgaGFzIGEKK251bWJlciBvZiBhZHZhbnRhZ2VzIG92ZXIgdGhlIFY0TDIgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+dmlkZW8KK292ZXJsYXkgaW50ZXJmYWNlPC9saW5rPi4gVGhlIGRyaXZlciBjYW4gZWFzaWx5IGRldGVybWluZSB0aGUgb3ZlcmxheQordGFyZ2V0LCAmaWU7IHZpc2libGUgZ3JhcGhpY3MgbWVtb3J5IG9yIG9mZi1zY3JlZW4gYnVmZmVycyBmb3IgYQorZGVzdHJ1Y3RpdmUgb3ZlcmxheS4gSXQgY2FuIHByb2dyYW0gdGhlIFJBTURBQyBmb3IgYSBub24tZGVzdHJ1Y3RpdmUKK292ZXJsYXksIHNjYWxpbmcgb3IgY29sb3Ita2V5aW5nLCBvciB0aGUgY2xpcHBpbmcgZnVuY3Rpb25zIG9mIHRoZQordmlkZW8gY2FwdHVyZSBoYXJkd2FyZSwgYWx3YXlzIGluIHN5bmMgd2l0aCBkcmF3aW5nIG9wZXJhdGlvbnMgb3IKK3dpbmRvd3MgbW92aW5nIG9yIGNoYW5naW5nIHRoZWlyIHN0YWNraW5nIG9yZGVyLjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gY29tYmluZSB0aGUgYWR2YW50YWdlcyBvZiBYdiBhbmQgVjRMIGEgc3BlY2lhbCBYdgorZHJpdmVyIGV4aXN0cyBpbiBYRnJlZTg2IGFuZCBYT3JnLCBqdXN0IHByb2dyYW1taW5nIGFueSBvdmVybGF5IGNhcGFibGUKK1ZpZGVvNExpbnV4IGRldmljZSBpdCBmaW5kcy4gVG8gZW5hYmxlIGl0Cis8ZmlsZW5hbWU+L2V0Yy9YMTEvWEY4NkNvbmZpZzwvZmlsZW5hbWU+IG11c3QgY29udGFpbiB0aGVzZSBsaW5lczo8L3BhcmE+CisgICAgICA8cGFyYT48c2NyZWVuPgorU2VjdGlvbiAiTW9kdWxlIgorICAgIExvYWQgInY0bCIKK0VuZFNlY3Rpb248L3NjcmVlbj48L3BhcmE+CisKKyAgICAgIDxwYXJhPkFzIG9mIFhGcmVlODYgNC4yIHRoaXMgZHJpdmVyIHN0aWxsIHN1cHBvcnRzIG9ubHkgVjRMCitpb2N0bHMsIGhvd2V2ZXIgaXQgc2hvdWxkIHdvcmsganVzdCBmaW5lIHdpdGggYWxsIFY0TDIgZGV2aWNlcyB0aHJvdWdoCit0aGUgVjRMMiBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGxheWVyLiBTaW5jZSBWNEwyIHBlcm1pdHMgbXVsdGlwbGUKK29wZW5zIGl0IGlzIHBvc3NpYmxlIChpZiBzdXBwb3J0ZWQgYnkgdGhlIFY0TDIgZHJpdmVyKSB0byBjYXB0dXJlCit2aWRlbyB3aGlsZSBhbiBYIGNsaWVudCByZXF1ZXN0ZWQgdmlkZW8gb3ZlcmxheS4gUmVzdHJpY3Rpb25zIG9mCitzaW11bHRhbmVvdXMgY2FwdHVyaW5nIGFuZCBvdmVybGF5IGFyZSBkaXNjdXNzZWQgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9Im92ZXJsYXkiIC8+IGFwcGx5LjwvcGFyYT4KKworICAgICAgPHBhcmE+T25seSBtYXJnaW5hbGx5IHJlbGF0ZWQgdG8gVjRMMiwgWEZyZWU4NiBleHRlbmRlZCBYdiB0bworc3VwcG9ydCBoYXJkd2FyZSBZVVYgdG8gUkdCIGNvbnZlcnNpb24gYW5kIHNjYWxpbmcgZm9yIGZhc3RlciB2aWRlbworcGxheWJhY2ssIGFuZCBhZGRlZCBhbiBpbnRlcmZhY2UgdG8gTVBFRy0yIGRlY29kaW5nIGhhcmR3YXJlLiBUaGlzIEFQSQoraXMgdXNlZnVsIHRvIGRpc3BsYXkgaW1hZ2VzIGNhcHR1cmVkIHdpdGggVjRMMiBkZXZpY2VzLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5EaWdpdGFsIFZpZGVvPC90aXRsZT4KKworICAgICAgPHBhcmE+VjRMMiBkb2VzIG5vdCBzdXBwb3J0IGRpZ2l0YWwgdGVycmVzdHJpYWwsIGNhYmxlIG9yCitzYXRlbGxpdGUgYnJvYWRjYXN0LiBBIHNlcGFyYXRlIHByb2plY3QgYWltaW5nIGF0IGRpZ2l0YWwgcmVjZWl2ZXJzCitleGlzdHMuIFlvdSBjYW4gZmluZCBpdHMgaG9tZXBhZ2UgYXQgPHVsaW5rCit1cmw9Imh0dHA6Ly9saW51eHR2Lm9yZyI+aHR0cDovL2xpbnV4dHYub3JnPC91bGluaz4uIFRoZSBMaW51eCBEVkIgQVBJCitoYXMgbm8gY29ubmVjdGlvbiB0byB0aGUgVjRMMiBBUEkgZXhjZXB0IHRoYXQgZHJpdmVycyBmb3IgaHlicmlkCitoYXJkd2FyZSBtYXkgc3VwcG9ydCBib3RoLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5BdWRpbyBJbnRlcmZhY2VzPC90aXRsZT4KKworICAgICAgPHBhcmE+W3RvIGRvIC0gT1NTL0FMU0FdPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJleHBlcmltZW50YWwiPgorICAgIDx0aXRsZT5FeHBlcmltZW50YWwgQVBJIEVsZW1lbnRzPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgVjRMMiBBUEkgZWxlbWVudHMgYXJlIGN1cnJlbnRseSBleHBlcmltZW50YWwKK2FuZCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuPC9wYXJhPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT5WaWRlbyBPdXRwdXQgT3ZlcmxheSAoT1NEKSBJbnRlcmZhY2UsIDx4cmVmCisJICAgIGxpbmtlbmQ9Im9zZCIgLz4uPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJPHBhcmE+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVk8L2NvbnN0YW50PiwKKwkmdjRsMi1idWYtdHlwZTssIDx4cmVmIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiIC8+LjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZPC9jb25zdGFudD4sCismVklESU9DLVFVRVJZQ0FQOyBpb2N0bCwgPHhyZWYgbGlua2VuZD0iZGV2aWNlLWNhcGFiaWxpdGllcyIgLz4uPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4mVklESU9DLUVOVU0tRlJBTUVTSVpFUzsgYW5kCismVklESU9DLUVOVU0tRlJBTUVJTlRFUlZBTFM7IGlvY3Rscy48L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPiZWSURJT0MtRy1FTkMtSU5ERVg7IGlvY3RsLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+JlZJRElPQy1FTkNPREVSLUNNRDsgYW5kICZWSURJT0MtVFJZLUVOQ09ERVItQ01EOworaW9jdGxzLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+JlZJRElPQy1EQkctRy1SRUdJU1RFUjsgYW5kICZWSURJT0MtREJHLVMtUkVHSVNURVI7Citpb2N0bHMuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4mVklESU9DLURCRy1HLUNISVAtSURFTlQ7IGlvY3RsLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0ib2Jzb2xldGUiPgorICAgIDx0aXRsZT5PYnNvbGV0ZSBBUEkgRWxlbWVudHM8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBWNEwyIEFQSSBlbGVtZW50cyB3ZXJlIHN1cGVyc2VkZWQgYnkgbmV3CitpbnRlcmZhY2VzIGFuZCBzaG91bGQgbm90IGJlIGltcGxlbWVudGVkIGluIG5ldyBkcml2ZXJzLjwvcGFyYT4KKworICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGNvbnN0YW50PlZJRElPQ19HX01QRUdDT01QPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfTVBFR0NPTVA8L2NvbnN0YW50PiBpb2N0bHMuIFVzZSBFeHRlbmRlZCBDb250cm9scywKKzx4cmVmIGxpbmtlbmQ9ImV4dGVuZGVkLWNvbnRyb2xzIiAvPi48L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29udHJvbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTJhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbApAQCAtMCwwICsxLDIwNDkgQEAKKyAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wiPgorICAgIDx0aXRsZT5Vc2VyIENvbnRyb2xzPC90aXRsZT4KKworICAgIDxwYXJhPkRldmljZXMgdHlwaWNhbGx5IGhhdmUgYSBudW1iZXIgb2YgdXNlci1zZXR0YWJsZSBjb250cm9scworc3VjaCBhcyBicmlnaHRuZXNzLCBzYXR1cmF0aW9uIGFuZCBzbyBvbiwgd2hpY2ggd291bGQgYmUgcHJlc2VudGVkIHRvCit0aGUgdXNlciBvbiBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZS4gQnV0LCBkaWZmZXJlbnQgZGV2aWNlcword2lsbCBoYXZlIGRpZmZlcmVudCBjb250cm9scyBhdmFpbGFibGUsIGFuZCBmdXJ0aGVybW9yZSwgdGhlIHJhbmdlIG9mCitwb3NzaWJsZSB2YWx1ZXMsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSB3aWxsIHZhcnkgZnJvbSBkZXZpY2UgdG8KK2RldmljZS4gVGhlIGNvbnRyb2wgaW9jdGxzIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIGFuZCBhIG1lY2hhbmlzbSB0bworY3JlYXRlIGEgbmljZSB1c2VyIGludGVyZmFjZSBmb3IgdGhlc2UgY29udHJvbHMgdGhhdCB3aWxsIHdvcmsKK2NvcnJlY3RseSB3aXRoIGFueSBkZXZpY2UuPC9wYXJhPgorCisgICAgPHBhcmE+QWxsIGNvbnRyb2xzIGFyZSBhY2Nlc3NlZCB1c2luZyBhbiBJRCB2YWx1ZS4gVjRMMiBkZWZpbmVzCitzZXZlcmFsIElEcyBmb3Igc3BlY2lmaWMgcHVycG9zZXMuIERyaXZlcnMgY2FuIGFsc28gaW1wbGVtZW50IHRoZWlyCitvd24gY3VzdG9tIGNvbnRyb2xzIHVzaW5nIDxjb25zdGFudD5WNEwyX0NJRF9QUklWQVRFX0JBU0U8L2NvbnN0YW50PgorYW5kIGhpZ2hlciB2YWx1ZXMuIFRoZSBwcmUtZGVmaW5lZCBjb250cm9sIElEcyBoYXZlIHRoZSBwcmVmaXgKKzxjb25zdGFudD5WNEwyX0NJRF88L2NvbnN0YW50PiwgYW5kIGFyZSBsaXN0ZWQgaW4gPHhyZWYKK2xpbmtlbmQ9ImNvbnRyb2wtaWQiIC8+LiBUaGUgSUQgaXMgdXNlZCB3aGVuIHF1ZXJ5aW5nIHRoZSBhdHRyaWJ1dGVzIG9mCithIGNvbnRyb2wsIGFuZCB3aGVuIGdldHRpbmcgb3Igc2V0dGluZyB0aGUgY3VycmVudCB2YWx1ZS48L3BhcmE+CisKKyAgICA8cGFyYT5HZW5lcmFsbHkgYXBwbGljYXRpb25zIHNob3VsZCBwcmVzZW50IGNvbnRyb2xzIHRvIHRoZSB1c2VyCit3aXRob3V0IGFzc3VtcHRpb25zIGFib3V0IHRoZWlyIHB1cnBvc2UuIEVhY2ggY29udHJvbCBjb21lcyB3aXRoIGEKK25hbWUgc3RyaW5nIHRoZSB1c2VyIGlzIHN1cHBvc2VkIHRvIHVuZGVyc3RhbmQuIFdoZW4gdGhlIHB1cnBvc2UgaXMKK25vbi1pbnR1aXRpdmUgdGhlIGRyaXZlciB3cml0ZXIgc2hvdWxkIHByb3ZpZGUgYSB1c2VyIG1hbnVhbCwgYSB1c2VyCitpbnRlcmZhY2UgcGx1Zy1pbiBvciBhIGRyaXZlciBzcGVjaWZpYyBwYW5lbCBhcHBsaWNhdGlvbi4gUHJlZGVmaW5lZAorSURzIHdlcmUgaW50cm9kdWNlZCB0byBjaGFuZ2UgYSBmZXcgY29udHJvbHMgcHJvZ3JhbW1hdGljYWxseSwgZm9yCitleGFtcGxlIHRvIG11dGUgYSBkZXZpY2UgZHVyaW5nIGEgY2hhbm5lbCBzd2l0Y2guPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBtYXkgZW51bWVyYXRlIGRpZmZlcmVudCBjb250cm9scyBhZnRlciBzd2l0Y2hpbmcKK3RoZSBjdXJyZW50IHZpZGVvIGlucHV0IG9yIG91dHB1dCwgdHVuZXIgb3IgbW9kdWxhdG9yLCBvciBhdWRpbyBpbnB1dAorb3Igb3V0cHV0LiBEaWZmZXJlbnQgaW4gdGhlIHNlbnNlIG9mIG90aGVyIGJvdW5kcywgYW5vdGhlciBkZWZhdWx0IGFuZAorY3VycmVudCB2YWx1ZSwgc3RlcCBzaXplIG9yIG90aGVyIG1lbnUgaXRlbXMuIEEgY29udHJvbCB3aXRoIGEgY2VydGFpbgorPGVtcGhhc2lzPmN1c3RvbTwvZW1waGFzaXM+IElEIGNhbiBhbHNvIGNoYW5nZSBuYW1lIGFuZAordHlwZS48Zm9vdG5vdGU+CisJPHBhcmE+SXQgd2lsbCBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIGFwcGxpY2F0aW9ucyBpZiBkcml2ZXJzCittYWtlIHVzZSBvZiB0aGUgPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4gZmxhZywgYnV0Cit0aGF0IHdhcyBuZXZlciByZXF1aXJlZC48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPiBDb250cm9sIHZhbHVlcyBhcmUgc3RvcmVkIGdsb2JhbGx5LCB0aGV5IGRvIG5vdAorY2hhbmdlIHdoZW4gc3dpdGNoaW5nIGV4Y2VwdCB0byBzdGF5IHdpdGhpbiB0aGUgcmVwb3J0ZWQgYm91bmRzLiBUaGV5CithbHNvIGRvIG5vdCBjaGFuZ2UgJmVnOyB3aGVuIHRoZSBkZXZpY2UgaXMgb3BlbmVkIG9yIGNsb3NlZCwgd2hlbiB0aGUKK3R1bmVyIHJhZGlvIGZyZXF1ZW5jeSBpcyBjaGFuZ2VkIG9yIGdlbmVyYWxseSBuZXZlciB3aXRob3V0CithcHBsaWNhdGlvbiByZXF1ZXN0LiBTaW5jZSBWNEwyIHNwZWNpZmllcyBubyBldmVudCBtZWNoYW5pc20sIHBhbmVsCithcHBsaWNhdGlvbnMgaW50ZW5kZWQgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIgcGFuZWwgYXBwbGljYXRpb25zIChiZQordGhleSBidWlsdCBpbnRvIGEgbGFyZ2VyIGFwcGxpY2F0aW9uLCBhcyBhIFRWIHZpZXdlcikgbWF5IG5lZWQgdG8KK3JlZ3VsYXJseSBwb2xsIGNvbnRyb2wgdmFsdWVzIHRvIHVwZGF0ZSB0aGVpciB1c2VyCitpbnRlcmZhY2UuPGZvb3Rub3RlPgorCTxwYXJhPkFwcGxpY2F0aW9ucyBjb3VsZCBjYWxsIGFuIGlvY3RsIHRvIHJlcXVlc3QgZXZlbnRzLgorQWZ0ZXIgYW5vdGhlciBwcm9jZXNzIGNhbGxlZCAmVklESU9DLVMtQ1RSTDsgb3IgYW5vdGhlciBpb2N0bCBjaGFuZ2luZworc2hhcmVkIHByb3BlcnRpZXMgdGhlICZmdW5jLXNlbGVjdDsgZnVuY3Rpb24gd291bGQgaW5kaWNhdGUKK3JlYWRhYmlsaXR5IHVudGlsIGFueSBpb2N0bCAocXVlcnlpbmcgdGhlIHByb3BlcnRpZXMpIGlzCitjYWxsZWQuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImNvbnRyb2wtaWQiPgorICAgICAgPHRpdGxlPkNvbnRyb2wgSURzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SUQ8L2VudHJ5PgorCSAgICA8ZW50cnk+VHlwZTwvZW50cnk+CisJICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0JBU0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Rmlyc3QgcHJlZGVmaW5lZCBJRCwgZXF1YWwgdG8KKzxjb25zdGFudD5WNEwyX0NJRF9CUklHSFRORVNTPC9jb25zdGFudD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9VU0VSX0JBU0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+U3lub255bSBvZiA8Y29uc3RhbnQ+VjRMMl9DSURfQkFTRTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQlJJR0hUTkVTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+UGljdHVyZSBicmlnaHRuZXNzLCBvciBtb3JlIHByZWNpc2VseSwgdGhlIGJsYWNrCitsZXZlbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0NPTlRSQVNUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5QaWN0dXJlIGNvbnRyYXN0IG9yIGx1bWEgZ2Fpbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1NBVFVSQVRJT048L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBpY3R1cmUgY29sb3Igc2F0dXJhdGlvbiBvciBjaHJvbWEgZ2Fpbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0hVRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+SHVlIG9yIGNvbG9yIGJhbGFuY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19WT0xVTUU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk92ZXJhbGwgYXVkaW8gdm9sdW1lLiBOb3RlIHNvbWUgZHJpdmVycyBhbHNvCitwcm92aWRlIGFuIE9TUyBvciBBTFNBIG1peGVyIGludGVyZmFjZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkF1ZGlvIHN0ZXJlbyBiYWxhbmNlLiBNaW5pbXVtIGNvcnJlc3BvbmRzIHRvIGFsbAordGhlIHdheSBsZWZ0LCBtYXhpbXVtIHRvIHJpZ2h0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fQkFTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+QXVkaW8gYmFzcyBhZGp1c3RtZW50LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fVFJFQkxFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5BdWRpbyB0cmVibGUgYWRqdXN0bWVudC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX01VVEU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk11dGUgYXVkaW8sICZpZTsgc2V0IHRoZSB2b2x1bWUgdG8gemVybywgaG93ZXZlcgord2l0aG91dCBhZmZlY3RpbmcgPGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX1ZPTFVNRTwvY29uc3RhbnQ+LiBMaWtlCitBTFNBIGRyaXZlcnMsIFY0TDIgZHJpdmVycyBtdXN0IG11dGUgYXQgbG9hZCB0aW1lIHRvIGF2b2lkIGV4Y2Vzc2l2ZQorbm9pc2UuIEFjdHVhbGx5IHRoZSBlbnRpcmUgZGV2aWNlIHNob3VsZCBiZSByZXNldCB0byBhIGxvdyBwb3dlcgorY29uc3VtcHRpb24gc3RhdGUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19MT1VETkVTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+TG91ZG5lc3MgbW9kZSAoYmFzcyBib29zdCkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9CTEFDS19MRVZFTDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+QW5vdGhlciBuYW1lIGZvciBicmlnaHRuZXNzIChub3QgYSBzeW5vbnltIG9mCis8Y29uc3RhbnQ+VjRMMl9DSURfQlJJR0hUTkVTUzwvY29uc3RhbnQ+KS4gVGhpcyBjb250cm9sIGlzIGRlcHJlY2F0ZWQKK2FuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbmV3IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+QXV0b21hdGljIHdoaXRlIGJhbGFuY2UgKGNhbWVyYXMpLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJ1dHRvbjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGFuIGFjdGlvbiBjb250cm9sLiBXaGVuIHNldCAodGhlIHZhbHVlIGlzCitpZ25vcmVkKSwgdGhlIGRldmljZSB3aWxsIGRvIGEgd2hpdGUgYmFsYW5jZSBhbmQgdGhlbiBob2xkIHRoZSBjdXJyZW50CitzZXR0aW5nLiBDb250cmFzdCB0aGlzIHdpdGggdGhlIGJvb2xlYW4KKzxjb25zdGFudD5WNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U8L2NvbnN0YW50Piwgd2hpY2gsIHdoZW4KK2FjdGl2YXRlZCwga2VlcHMgYWRqdXN0aW5nIHRoZSB3aGl0ZSBiYWxhbmNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfUkVEX0JBTEFOQ0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlZCBjaHJvbWEgYmFsYW5jZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0JMVUVfQkFMQU5DRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+Qmx1ZSBjaHJvbWEgYmFsYW5jZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0dBTU1BPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5HYW1tYSBhZGp1c3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9XSElURU5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PldoaXRlbmVzcyBmb3IgZ3JleS1zY2FsZSBkZXZpY2VzLiBUaGlzIGlzIGEgc3lub255bQorZm9yIDxjb25zdGFudD5WNEwyX0NJRF9HQU1NQTwvY29uc3RhbnQ+LiBUaGlzIGNvbnRyb2wgaXMgZGVwcmVjYXRlZAorYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXcgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfRVhQT1NVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkV4cG9zdXJlIChjYW1lcmFzKS4gW1VuaXQ/XTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVUT0dBSU48L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgPGVudHJ5PkF1dG9tYXRpYyBnYWluL2V4cG9zdXJlIGNvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9HQUlOPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5HYWluIGNvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9IRkxJUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+TWlycm9yIHRoZSBwaWN0dXJlIGhvcml6b250YWxseS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1ZGTElQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgIDxlbnRyeT5NaXJyb3IgdGhlIHBpY3R1cmUgdmVydGljYWxseS48L2VudHJ5PgorCSAgPC9yb3c+CisJPHJvdz4KKwkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfSENFTlRFUl9ERVBSRUNBVEVEPC9jb25zdGFudD4gKGZvcm1lcmx5IDxjb25zdGFudD5WNEwyX0NJRF9IQ0VOVEVSPC9jb25zdGFudD4pPC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+SG9yaXpvbnRhbCBpbWFnZSBjZW50ZXJpbmcuIFRoaXMgY29udHJvbCBpcworZGVwcmVjYXRlZC4gTmV3IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSA8bGluaworbGlua2VuZD0iY2FtZXJhLWNvbnRyb2xzIj5DYW1lcmEgY2xhc3MgY29udHJvbHM8L2xpbms+Cis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX1JFTEFUSVZFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX1JFU0VUPC9jb25zdGFudD4gaW5zdGVhZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1ZDRU5URVJfREVQUkVDQVRFRDwvY29uc3RhbnQ+CisJICAgIChmb3JtZXJseSA8Y29uc3RhbnQ+VjRMMl9DSURfVkNFTlRFUjwvY29uc3RhbnQ+KTwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlZlcnRpY2FsIGltYWdlIGNlbnRlcmluZy4gQ2VudGVyaW5nIGlzIGludGVuZGVkIHRvCis8ZW1waGFzaXM+cGh5c2ljYWxseTwvZW1waGFzaXM+IGFkanVzdCBjYW1lcmFzLiBGb3IgaW1hZ2UgY3JvcHBpbmcgc2VlCis8eHJlZiBsaW5rZW5kPSJjcm9wIiAvPiwgZm9yIGNsaXBwaW5nIDx4cmVmIGxpbmtlbmQ9Im92ZXJsYXkiIC8+LiBUaGlzCitjb250cm9sIGlzIGRlcHJlY2F0ZWQuIE5ldyBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUKKzxsaW5rIGxpbmtlbmQ9ImNhbWVyYS1jb250cm9scyI+Q2FtZXJhIGNsYXNzIGNvbnRyb2xzPC9saW5rPgorPGNvbnN0YW50PlY0TDJfQ0lEX1RJTFRfQUJTT0xVVEU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9USUxUX1JFTEFUSVZFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9SRVNFVDwvY29uc3RhbnQ+IGluc3RlYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0idjRsMi1wb3dlci1saW5lLWZyZXF1ZW5jeSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5lbnVtPC9lbnRyeT4KKwkgICAgPGVudHJ5PkVuYWJsZXMgYSBwb3dlciBsaW5lIGZyZXF1ZW5jeSBmaWx0ZXIgdG8gYXZvaWQKK2ZsaWNrZXIuIFBvc3NpYmxlIHZhbHVlcyBmb3IgPGNvbnN0YW50PmVudW0gdjRsMl9wb3dlcl9saW5lX2ZyZXF1ZW5jeTwvY29uc3RhbnQ+IGFyZToKKzxjb25zdGFudD5WNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRDwvY29uc3RhbnQ+ICgwKSwKKzxjb25zdGFudD5WNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaPC9jb25zdGFudD4gKDEpIGFuZAorPGNvbnN0YW50PlY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFo8L2NvbnN0YW50PiAoMikuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9IVUVfQVVUTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+RW5hYmxlcyBhdXRvbWF0aWMgaHVlIGNvbnRyb2wgYnkgdGhlIGRldmljZS4gVGhlCitlZmZlY3Qgb2Ygc2V0dGluZyA8Y29uc3RhbnQ+VjRMMl9DSURfSFVFPC9jb25zdGFudD4gd2hpbGUgYXV0b21hdGljCitodWUgY29udHJvbCBpcyBlbmFibGVkIGlzIHVuZGVmaW5lZCwgZHJpdmVycyBzaG91bGQgaWdub3JlIHN1Y2gKK3JlcXVlc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGNvbnRyb2wgc3BlY2lmaWVzIHRoZSB3aGl0ZSBiYWxhbmNlIHNldHRpbmdzCithcyBhIGNvbG9yIHRlbXBlcmF0dXJlIGluIEtlbHZpbi4gQSBkcml2ZXIgc2hvdWxkIGhhdmUgYSBtaW5pbXVtIG9mCisyODAwIChpbmNhbmRlc2NlbnQpIHRvIDY1MDAgKGRheWxpZ2h0KS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK2NvbG9yIHRlbXBlcmF0dXJlIHNlZSA8dWxpbmsKK3VybD0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2xvcl90ZW1wZXJhdHVyZSI+V2lraXBlZGlhPC91bGluaz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9TSEFSUE5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkFkanVzdHMgdGhlIHNoYXJwbmVzcyBmaWx0ZXJzIGluIGEgY2FtZXJhLiBUaGUKK21pbmltdW0gdmFsdWUgZGlzYWJsZXMgdGhlIGZpbHRlcnMsIGhpZ2hlciB2YWx1ZXMgZ2l2ZSBhIHNoYXJwZXIKK3BpY3R1cmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5BZGp1c3RzIHRoZSBiYWNrbGlnaHQgY29tcGVuc2F0aW9uIGluIGEgY2FtZXJhLiBUaGUKK21pbmltdW0gdmFsdWUgZGlzYWJsZXMgYmFja2xpZ2h0IGNvbXBlbnNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0NIUk9NQV9BR0M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNocm9tYSBhdXRvbWF0aWMgZ2FpbiBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQ09MT1JfS0lMTEVSPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgIDxlbnRyeT5FbmFibGUgdGhlIGNvbG9yIGtpbGxlciAoJmllOyBmb3JjZSBhIGJsYWNrICZhbXA7IHdoaXRlIGltYWdlIGluIGNhc2Ugb2YgYSB3ZWFrIHZpZGVvIHNpZ25hbCkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0idjRsMi1jb2xvcmZ4Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9DT0xPUkZYPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZW51bTwvZW50cnk+CisJICAgIDxlbnRyeT5TZWxlY3RzIGEgY29sb3IgZWZmZWN0LiBQb3NzaWJsZSB2YWx1ZXMgZm9yCis8Y29uc3RhbnQ+ZW51bSB2NGwyX2NvbG9yZng8L2NvbnN0YW50PiBhcmU6Cis8Y29uc3RhbnQ+VjRMMl9DT0xPUkZYX05PTkU8L2NvbnN0YW50PiAoMCksCis8Y29uc3RhbnQ+VjRMMl9DT0xPUkZYX0JXPC9jb25zdGFudD4gKDEpIGFuZAorPGNvbnN0YW50PlY0TDJfQ09MT1JGWF9TRVBJQTwvY29uc3RhbnQ+ICgyKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0xBU1RQMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5FbmQgb2YgdGhlIHByZWRlZmluZWQgY29udHJvbCBJRHMgKGN1cnJlbnRseQorPGNvbnN0YW50PlY0TDJfQ0lEX0NPTE9SRlg8L2NvbnN0YW50PiArIDEpLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfUFJJVkFURV9CQVNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklEIG9mIHRoZSBmaXJzdCBjdXN0b20gKGRyaXZlciBzcGVjaWZpYykgY29udHJvbC4KK0FwcGxpY2F0aW9ucyBkZXBlbmRpbmcgb24gcGFydGljdWxhciBjdXN0b20gY29udHJvbHMgc2hvdWxkIGNoZWNrIHRoZQorZHJpdmVyIG5hbWUgYW5kIHZlcnNpb24sIHNlZSA8eHJlZiBsaW5rZW5kPSJxdWVyeWNhcCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgdGhlIGF2YWlsYWJsZSBjb250cm9scyB3aXRoIHRoZQorJlZJRElPQy1RVUVSWUNUUkw7IGFuZCAmVklESU9DLVFVRVJZTUVOVTsgaW9jdGxzLCBnZXQgYW5kIHNldCBhCitjb250cm9sIHZhbHVlIHdpdGggdGhlICZWSURJT0MtRy1DVFJMOyBhbmQgJlZJRElPQy1TLUNUUkw7IGlvY3Rscy4KK0RyaXZlcnMgbXVzdCBpbXBsZW1lbnQgPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfR19DVFJMPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfQ1RSTDwvY29uc3RhbnQ+IHdoZW4gdGhlIGRldmljZSBoYXMgb25lIG9yIG1vcmUKK2NvbnRyb2xzLCA8Y29uc3RhbnQ+VklESU9DX1FVRVJZTUVOVTwvY29uc3RhbnQ+IHdoZW4gaXQgaGFzIG9uZSBvcgorbW9yZSBtZW51IHR5cGUgY29udHJvbHMuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+RW51bWVyYXRpbmcgYWxsIGNvbnRyb2xzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcXVlcnljdHJsOyBxdWVyeWN0cmw7CismdjRsMi1xdWVyeW1lbnU7IHF1ZXJ5bWVudTsKKworc3RhdGljIHZvaWQKK2VudW1lcmF0ZV9tZW51ICh2b2lkKQoreworCXByaW50ZiAoIiAgTWVudSBpdGVtczpcbiIpOworCisJbWVtc2V0ICgmYW1wO3F1ZXJ5bWVudSwgMCwgc2l6ZW9mIChxdWVyeW1lbnUpKTsKKwlxdWVyeW1lbnUuaWQgPSBxdWVyeWN0cmwuaWQ7CisKKwlmb3IgKHF1ZXJ5bWVudS5pbmRleCA9IHF1ZXJ5Y3RybC5taW5pbXVtOworCSAgICAgcXVlcnltZW51LmluZGV4ICZsdDs9IHF1ZXJ5Y3RybC5tYXhpbXVtOworCSAgICAgIHF1ZXJ5bWVudS5pbmRleCsrKSB7CisJCWlmICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1RVUVSWU1FTlU7LCAmYW1wO3F1ZXJ5bWVudSkpIHsKKwkJCXByaW50ZiAoIiAgJXNcbiIsIHF1ZXJ5bWVudS5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXBlcnJvciAoIlZJRElPQ19RVUVSWU1FTlUiKTsKKwkJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9Cit9CisKK21lbXNldCAoJmFtcDtxdWVyeWN0cmwsIDAsIHNpemVvZiAocXVlcnljdHJsKSk7CisKK2ZvciAocXVlcnljdHJsLmlkID0gVjRMMl9DSURfQkFTRTsKKyAgICAgcXVlcnljdHJsLmlkICZsdDsgVjRMMl9DSURfTEFTVFAxOworICAgICBxdWVyeWN0cmwuaWQrKykgeworCWlmICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1RVUVSWUNUUkw7LCAmYW1wO3F1ZXJ5Y3RybCkpIHsKKwkJaWYgKHF1ZXJ5Y3RybC5mbGFncyAmYW1wOyBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ZiAoIkNvbnRyb2wgJXNcbiIsIHF1ZXJ5Y3RybC5uYW1lKTsKKworCQlpZiAocXVlcnljdHJsLnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkKKwkJCWVudW1lcmF0ZV9tZW51ICgpOworCX0gZWxzZSB7CisJCWlmIChlcnJubyA9PSBFSU5WQUwpCisJCQljb250aW51ZTsKKworCQlwZXJyb3IgKCJWSURJT0NfUVVFUllDVFJMIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorfQorCitmb3IgKHF1ZXJ5Y3RybC5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTs7CisgICAgIHF1ZXJ5Y3RybC5pZCsrKSB7CisJaWYgKDAgPT0gaW9jdGwgKGZkLCAmVklESU9DLVFVRVJZQ1RSTDssICZhbXA7cXVlcnljdHJsKSkgeworCQlpZiAocXVlcnljdHJsLmZsYWdzICZhbXA7IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmICgiQ29udHJvbCAlc1xuIiwgcXVlcnljdHJsLm5hbWUpOworCisJCWlmIChxdWVyeWN0cmwudHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKQorCQkJZW51bWVyYXRlX21lbnUgKCk7CisJfSBlbHNlIHsKKwkJaWYgKGVycm5vID09IEVJTlZBTCkKKwkJCWJyZWFrOworCisJCXBlcnJvciAoIlZJRElPQ19RVUVSWUNUUkwiKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkNoYW5naW5nIGNvbnRyb2xzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcXVlcnljdHJsOyBxdWVyeWN0cmw7CismdjRsMi1jb250cm9sOyBjb250cm9sOworCittZW1zZXQgKCZhbXA7cXVlcnljdHJsLCAwLCBzaXplb2YgKHF1ZXJ5Y3RybCkpOworcXVlcnljdHJsLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUzsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1RVUVSWUNUUkw7LCAmYW1wO3F1ZXJ5Y3RybCkpIHsKKwlpZiAoZXJybm8gIT0gRUlOVkFMKSB7CisJCXBlcnJvciAoIlZJRElPQ19RVUVSWUNUUkwiKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9IGVsc2UgeworCQlwcmludGYgKCJWNEwyX0NJRF9CUklHSFRORVNTIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCX0KK30gZWxzZSBpZiAocXVlcnljdHJsLmZsYWdzICZhbXA7IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSB7CisJcHJpbnRmICgiVjRMMl9DSURfQlJJR0hUTkVTUyBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKK30gZWxzZSB7CisJbWVtc2V0ICgmYW1wO2NvbnRyb2wsIDAsIHNpemVvZiAoY29udHJvbCkpOworCWNvbnRyb2wuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOworCWNvbnRyb2wudmFsdWUgPSBxdWVyeWN0cmwuZGVmYXVsdF92YWx1ZTsKKworCWlmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtUy1DVFJMOywgJmFtcDtjb250cm9sKSkgeworCQlwZXJyb3IgKCJWSURJT0NfU19DVFJMIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorfQorCittZW1zZXQgKCZhbXA7Y29udHJvbCwgMCwgc2l6ZW9mIChjb250cm9sKSk7Citjb250cm9sLmlkID0gVjRMMl9DSURfQ09OVFJBU1Q7CisKK2lmICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1HLUNUUkw7LCAmYW1wO2NvbnRyb2wpKSB7CisJY29udHJvbC52YWx1ZSArPSAxOworCisJLyogVGhlIGRyaXZlciBtYXkgY2xhbXAgdGhlIHZhbHVlIG9yIHJldHVybiBFUkFOR0UsIGlnbm9yZWQgaGVyZSAqLworCisJaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLUNUUkw7LCAmYW1wO2NvbnRyb2wpCisJICAgICZhbXA7JmFtcDsgZXJybm8gIT0gRVJBTkdFKSB7CisJCXBlcnJvciAoIlZJRElPQ19TX0NUUkwiKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9CisvKiBJZ25vcmUgaWYgVjRMMl9DSURfQ09OVFJBU1QgaXMgdW5zdXBwb3J0ZWQgKi8KK30gZWxzZSBpZiAoZXJybm8gIT0gRUlOVkFMKSB7CisJcGVycm9yICgiVklESU9DX0dfQ1RSTCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK2NvbnRyb2wuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFOworY29udHJvbC52YWx1ZSA9IFRSVUU7IC8qIHNpbGVuY2UgKi8KKworLyogRXJyb3JzIGlnbm9yZWQgKi8KK2lvY3RsIChmZCwgVklESU9DX1NfQ1RSTCwgJmFtcDtjb250cm9sKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9ImV4dGVuZGVkLWNvbnRyb2xzIj4KKyAgICA8dGl0bGU+RXh0ZW5kZWQgQ29udHJvbHM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIGNvbnRyb2wgbWVjaGFuaXNtIGFzIG9yaWdpbmFsbHkgZGVzaWduZWQgd2FzIG1lYW50Cit0byBiZSB1c2VkIGZvciB1c2VyIHNldHRpbmdzIChicmlnaHRuZXNzLCBzYXR1cmF0aW9uLCBldGMpLiBIb3dldmVyLAoraXQgdHVybmVkIG91dCB0byBiZSBhIHZlcnkgdXNlZnVsIG1vZGVsIGZvciBpbXBsZW1lbnRpbmcgbW9yZQorY29tcGxpY2F0ZWQgZHJpdmVyIEFQSXMgd2hlcmUgZWFjaCBkcml2ZXIgaW1wbGVtZW50cyBvbmx5IGEgc3Vic2V0IG9mCithIGxhcmdlciBBUEkuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgTVBFRyBlbmNvZGluZyBBUEkgd2FzIHRoZSBkcml2aW5nIGZvcmNlIGJlaGluZAorZGVzaWduaW5nIGFuZCBpbXBsZW1lbnRpbmcgdGhpcyBleHRlbmRlZCBjb250cm9sIG1lY2hhbmlzbTogdGhlIE1QRUcKK3N0YW5kYXJkIGlzIHF1aXRlIGxhcmdlIGFuZCB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBoYXJkd2FyZSBNUEVHCitlbmNvZGVycyBlYWNoIG9ubHkgaW1wbGVtZW50IGEgc3Vic2V0IG9mIHRoaXMgc3RhbmRhcmQuIEZ1cnRoZXIgbW9yZSwKK21hbnkgcGFyYW1ldGVycyByZWxhdGluZyB0byBob3cgdGhlIHZpZGVvIGlzIGVuY29kZWQgaW50byBhbiBNUEVHCitzdHJlYW0gYXJlIHNwZWNpZmljIHRvIHRoZSBNUEVHIGVuY29kaW5nIGNoaXAgc2luY2UgdGhlIE1QRUcgc3RhbmRhcmQKK29ubHkgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSByZXN1bHRpbmcgTVBFRyBzdHJlYW0sIG5vdCBob3cgdGhlCit2aWRlbyBpcyBhY3R1YWxseSBlbmNvZGVkIGludG8gdGhhdCBmb3JtYXQuPC9wYXJhPgorCisgICAgICA8cGFyYT5VbmZvcnR1bmF0ZWx5LCB0aGUgb3JpZ2luYWwgY29udHJvbCBBUEkgbGFja2VkIHNvbWUKK2ZlYXR1cmVzIG5lZWRlZCBmb3IgdGhlc2UgbmV3IHVzZXMgYW5kIHNvIGl0IHdhcyBleHRlbmRlZCBpbnRvIHRoZQorKG5vdCB0ZXJyaWJseSBvcmlnaW5hbGx5IG5hbWVkKSBleHRlbmRlZCBjb250cm9sIEFQSS48L3BhcmE+CisKKyAgICAgIDxwYXJhPkV2ZW4gdGhvdWdoIHRoZSBNUEVHIGVuY29kaW5nIEFQSSB3YXMgdGhlIGZpcnN0IGVmZm9ydAordG8gdXNlIHRoZSBFeHRlbmRlZCBDb250cm9sIEFQSSwgbm93YWRheXMgdGhlcmUgYXJlIGFsc28gb3RoZXIgY2xhc3Nlcworb2YgRXh0ZW5kZWQgQ29udHJvbHMsIHN1Y2ggYXMgQ2FtZXJhIENvbnRyb2xzIGFuZCBGTSBUcmFuc21pdHRlciBDb250cm9scy4KK1RoZSBFeHRlbmRlZCBDb250cm9scyBBUEkgYXMgd2VsbCBhcyBhbGwgRXh0ZW5kZWQgQ29udHJvbHMgY2xhc3NlcyBhcmUKK2Rlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHRleHQuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlRoZSBFeHRlbmRlZCBDb250cm9sIEFQSTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRocmVlIG5ldyBpb2N0bHMgYXJlIGF2YWlsYWJsZTogJlZJRElPQy1HLUVYVC1DVFJMUzssCismVklESU9DLVMtRVhULUNUUkxTOyBhbmQgJlZJRElPQy1UUlktRVhULUNUUkxTOy4gVGhlc2UgaW9jdGxzIGFjdCBvbgorYXJyYXlzIG9mIGNvbnRyb2xzIChhcyBvcHBvc2VkIHRvIHRoZSAmVklESU9DLUctQ1RSTDsgYW5kCismVklESU9DLVMtQ1RSTDsgaW9jdGxzIHRoYXQgYWN0IG9uIGEgc2luZ2xlIGNvbnRyb2wpLiBUaGlzIGlzIG5lZWRlZAorc2luY2UgaXQgaXMgb2Z0ZW4gcmVxdWlyZWQgdG8gYXRvbWljYWxseSBjaGFuZ2Ugc2V2ZXJhbCBjb250cm9scyBhdAorb25jZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPkVhY2ggb2YgdGhlIG5ldyBpb2N0bHMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYQorJnY0bDItZXh0LWNvbnRyb2xzOy4gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBjb250cm9sCithcnJheSwgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGNvbnRyb2xzIGluIHRoYXQgYXJyYXkgYW5kIGEgY29udHJvbAorY2xhc3MuIENvbnRyb2wgY2xhc3NlcyBhcmUgdXNlZCB0byBncm91cCBzaW1pbGFyIGNvbnRyb2xzIGludG8gYQorc2luZ2xlIGNsYXNzLiBGb3IgZXhhbXBsZSwgY29udHJvbCBjbGFzcworPGNvbnN0YW50PlY0TDJfQ1RSTF9DTEFTU19VU0VSPC9jb25zdGFudD4gY29udGFpbnMgYWxsIHVzZXIgY29udHJvbHMKKygmaWU7IGFsbCBjb250cm9scyB0aGF0IGNhbiBhbHNvIGJlIHNldCB1c2luZyB0aGUgb2xkCis8Y29uc3RhbnQ+VklESU9DX1NfQ1RSTDwvY29uc3RhbnQ+IGlvY3RsKS4gQ29udHJvbCBjbGFzcworPGNvbnN0YW50PlY0TDJfQ1RSTF9DTEFTU19NUEVHPC9jb25zdGFudD4gY29udGFpbnMgYWxsIGNvbnRyb2xzCityZWxhdGluZyB0byBNUEVHIGVuY29kaW5nLCBldGMuPC9wYXJhPgorCisgICAgICA8cGFyYT5BbGwgY29udHJvbHMgaW4gdGhlIGNvbnRyb2wgYXJyYXkgbXVzdCBiZWxvbmcgdG8gdGhlCitzcGVjaWZpZWQgY29udHJvbCBjbGFzcy4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhpcyBpcyBub3QgdGhlCitjYXNlLjwvcGFyYT4KKworICAgICAgPHBhcmE+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gZW1wdHkgY29udHJvbCBhcnJheSAoY291bnQKKz09IDApIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjb250cm9sIGNsYXNzIGlzCitzdXBwb3J0ZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgY29udHJvbCBhcnJheSBpcyBhICZ2NGwyLWV4dC1jb250cm9sOyBhcnJheS4gVGhlCis8c3RydWN0bmFtZT52NGwyX2V4dF9jb250cm9sPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgaXMgdmVyeSBzaW1pbGFyIHRvCismdjRsMi1jb250cm9sOywgZXhjZXB0IGZvciB0aGUgZmFjdCB0aGF0IGl0IGFsc28gYWxsb3dzIGZvciA2NC1iaXQKK3ZhbHVlcyBhbmQgcG9pbnRlcnMgdG8gYmUgcGFzc2VkLjwvcGFyYT4KKworICAgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBkdWUgdG8gdGhlIGZsZXhpYmlsaXR5IG9mCitjb250cm9scyBpdCBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgd2hldGhlciB0aGUgY29udHJvbCB5b3Ugd2FudCB0byBzZXQKK2FjdHVhbGx5IGlzIHN1cHBvcnRlZCBpbiB0aGUgZHJpdmVyIGFuZCB3aGF0IHRoZSB2YWxpZCByYW5nZSBvZiB2YWx1ZXMKK2lzLiBTbyB1c2UgdGhlICZWSURJT0MtUVVFUllDVFJMOyBhbmQgJlZJRElPQy1RVUVSWU1FTlU7IGlvY3RscyB0bworY2hlY2sgdGhpcy4gQWxzbyBub3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIG9mIHRoZSBtZW51CitpbmRpY2VzIGluIGEgY29udHJvbCBvZiB0eXBlIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9NRU5VPC9jb25zdGFudD4KK21heSBub3QgYmUgc3VwcG9ydGVkICg8Y29uc3RhbnQ+VklESU9DX1FVRVJZTUVOVTwvY29uc3RhbnQ+IHdpbGwKK3JldHVybiBhbiBlcnJvcikuIEEgZ29vZCBleGFtcGxlIGlzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBNUEVHIGF1ZGlvCitiaXRyYXRlcy4gU29tZSBkcml2ZXJzIG9ubHkgc3VwcG9ydCBvbmUgb3IgdHdvIGJpdHJhdGVzLCBvdGhlcnMKK3N1cHBvcnQgYSB3aWRlciByYW5nZS48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+RW51bWVyYXRpbmcgRXh0ZW5kZWQgQ29udHJvbHM8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGUgcmVjb21tZW5kZWQgd2F5IHRvIGVudW1lcmF0ZSBvdmVyIHRoZSBleHRlbmRlZAorY29udHJvbHMgaXMgYnkgdXNpbmcgJlZJRElPQy1RVUVSWUNUUkw7IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCis8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMPC9jb25zdGFudD4gZmxhZzo8L3BhcmE+CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItcXVlcnljdHJsOyBxY3RybDsKKworcWN0cmwuaWQgPSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkw7Cit3aGlsZSAoMCA9PSBpb2N0bCAoZmQsICZWSURJT0MtUVVFUllDVFJMOywgJmFtcDtxY3RybCkpIHsKKwkvKiAuLi4gKi8KKwlxY3RybC5pZCB8PSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkw7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIDxwYXJhPlRoZSBpbml0aWFsIGNvbnRyb2wgSUQgaXMgc2V0IHRvIDAgT1JlZCB3aXRoIHRoZQorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDwvY29uc3RhbnQ+IGZsYWcuIFRoZQorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiBpb2N0bCB3aWxsIHJldHVybiB0aGUgZmlyc3QKK2NvbnRyb2wgd2l0aCBhIGhpZ2hlciBJRCB0aGFuIHRoZSBzcGVjaWZpZWQgb25lLiBXaGVuIG5vIHN1Y2ggY29udHJvbHMKK2FyZSBmb3VuZCBhbiBlcnJvciBpcyByZXR1cm5lZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPklmIHlvdSB3YW50IHRvIGdldCBhbGwgY29udHJvbHMgd2l0aGluIGEgc3BlY2lmaWMgY29udHJvbAorY2xhc3MsIHRoZW4geW91IGNhbiBzZXQgdGhlIGluaXRpYWwKKzxzdHJ1Y3RmaWVsZD5xY3RybC5pZDwvc3RydWN0ZmllbGQ+IHZhbHVlIHRvIHRoZSBjb250cm9sIGNsYXNzIGFuZCBhZGQKK2FuIGV4dHJhIGNoZWNrIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCB3aGVuIGEgY29udHJvbCBvZiBhbm90aGVyCitjb250cm9sIGNsYXNzIGlzIGZvdW5kOjwvcGFyYT4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKwk8cHJvZ3JhbWxpc3Rpbmc+CitxY3RybC5pZCA9IFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMOword2hpbGUgKDAgPT0gaW9jdGwgKGZkLCAmVklESU9DLVFVRVJZQ1RSTDssICZhbXA7cWN0cmwpKSB7CisJaWYgKFY0TDJfQ1RSTF9JRDJDTEFTUyAocWN0cmwuaWQpICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQorCQlicmVhazsKKwkJLyogLi4uICovCisJCXFjdHJsLmlkIHw9IFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDsKKwl9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIDxwYXJhPlRoZSAzMi1iaXQgPHN0cnVjdGZpZWxkPnFjdHJsLmlkPC9zdHJ1Y3RmaWVsZD4gdmFsdWUgaXMKK3N1YmRpdmlkZWQgaW50byB0aHJlZSBiaXQgcmFuZ2VzOiB0aGUgdG9wIDQgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yCitmbGFncyAoJmVnOyA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMPC9jb25zdGFudD4pIGFuZCBhcmUgbm90CithY3R1YWxseSBwYXJ0IG9mIHRoZSBJRC4gVGhlIHJlbWFpbmluZyAyOCBiaXRzIGZvcm0gdGhlIGNvbnRyb2wgSUQsIG9mCit3aGljaCB0aGUgbW9zdCBzaWduaWZpY2FudCAxMiBiaXRzIGRlZmluZSB0aGUgY29udHJvbCBjbGFzcyBhbmQgdGhlCitsZWFzdCBzaWduaWZpY2FudCAxNiBiaXRzIGlkZW50aWZ5IHRoZSBjb250cm9sIHdpdGhpbiB0aGUgY29udHJvbAorY2xhc3MuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVzZSBsYXN0IDE2IGJpdHMgYXJlIGFsd2F5cyBub24temVybworZm9yIGNvbnRyb2xzLiBUaGUgcmFuZ2Ugb2YgMHgxMDAwIGFuZCB1cCBhcmUgcmVzZXJ2ZWQgZm9yCitkcml2ZXItc3BlY2lmaWMgY29udHJvbHMuIFRoZSBtYWNybworPGNvbnN0YW50PlY0TDJfQ1RSTF9JRDJDTEFTUyhpZCk8L2NvbnN0YW50PiByZXR1cm5zIHRoZSBjb250cm9sIGNsYXNzCitJRCBiYXNlZCBvbiBhIGNvbnRyb2wgSUQuPC9wYXJhPgorCisgICAgICA8cGFyYT5JZiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5kZWQgY29udHJvbHMsIHRoZW4KKzxjb25zdGFudD5WSURJT0NfUVVFUllDVFJMPC9jb25zdGFudD4gd2lsbCBmYWlsIHdoZW4gdXNlZCBpbgorY29tYmluYXRpb24gd2l0aCA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMPC9jb25zdGFudD4uIEluCit0aGF0IGNhc2UgdGhlIG9sZCBtZXRob2Qgb2YgZW51bWVyYXRpbmcgY29udHJvbCBzaG91bGQgYmUgdXNlZCAoc2VlCisxLjgpLiBCdXQgaWYgaXQgaXMgc3VwcG9ydGVkLCB0aGVuIGl0IGlzIGd1YXJhbnRlZWQgdG8gZW51bWVyYXRlIG92ZXIKK2FsbCBjb250cm9scywgaW5jbHVkaW5nIGRyaXZlci1wcml2YXRlIGNvbnRyb2xzLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5DcmVhdGluZyBDb250cm9sIFBhbmVsczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBjb250cm9sIHBhbmVscyBmb3IgYSBncmFwaGljYWwKK3VzZXIgaW50ZXJmYWNlIHdoZXJlIHRoZSB1c2VyIGNhbiBzZWxlY3QgdGhlIHZhcmlvdXMgY29udHJvbHMuCitCYXNpY2FsbHkgeW91IHdpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIGNvbnRyb2xzIHVzaW5nIHRoZSBtZXRob2QKK2Rlc2NyaWJlZCBhYm92ZS4gRWFjaCBjb250cm9sIGNsYXNzIHN0YXJ0cyB3aXRoIGEgY29udHJvbCBvZiB0eXBlCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUzwvY29uc3RhbnQ+LgorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzCitjb250cm9sIGNsYXNzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIHRoZSB0aXRsZSBvZiBhIHRhYiBwYWdlIHdpdGhpbiBhCitjb250cm9sIHBhbmVsLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIGZsYWdzIGZpZWxkIG9mICZ2NGwyLXF1ZXJ5Y3RybDsgYWxzbyBjb250YWlucyBoaW50cyBvbgordGhlIGJlaGF2aW9yIG9mIHRoZSBjb250cm9sLiBTZWUgdGhlICZWSURJT0MtUVVFUllDVFJMOyBkb2N1bWVudGF0aW9uCitmb3IgbW9yZSBkZXRhaWxzLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibXBlZy1jb250cm9scyI+CisgICAgICA8dGl0bGU+TVBFRyBDb250cm9sIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkJlbG93IGFsbCBjb250cm9scyB3aXRoaW4gdGhlIE1QRUcgY29udHJvbCBjbGFzcyBhcmUKK2Rlc2NyaWJlZC4gRmlyc3QgdGhlIGdlbmVyaWMgY29udHJvbHMsIHRoZW4gY29udHJvbHMgc3BlY2lmaWMgZm9yCitjZXJ0YWluIGhhcmR3YXJlLjwvcGFyYT4KKworICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkdlbmVyaWMgTVBFRyBDb250cm9sczwvdGl0bGU+CisKKwk8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9Im1wZWctY29udHJvbC1pZCI+CisJICA8dGl0bGU+TVBFRyBDb250cm9sIElEczwvdGl0bGU+CisJICA8dGdyb3VwIGNvbHM9IjQiPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjYqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjIqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjYqIiAvPgorCSAgICA8c3BhbnNwZWMgbmFtZXN0PSJjMSIgbmFtZWVuZD0iYzIiIHNwYW5uYW1lPSJpZCIgLz4KKwkgICAgPHNwYW5zcGVjIG5hbWVzdD0iYzIiIG5hbWVlbmQ9ImM0IiBzcGFubmFtZT0iZGVzY3IiIC8+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIiBhbGlnbj0ibGVmdCI+SUQ8L2VudHJ5PgorCQk8ZW50cnkgYWxpZ249ImxlZnQiPlR5cGU8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3cgcm93c2VwPSIxIj48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIiBhbGlnbj0ibGVmdCI+RGVzY3JpcHRpb248L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3RoZWFkPgorCSAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ0xBU1M8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5jbGFzczwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgTVBFRyBjbGFzcworZGVzY3JpcHRvci4gQ2FsbGluZyAmVklESU9DLVFVRVJZQ1RSTDsgZm9yIHRoaXMgY29udHJvbCB3aWxsIHJldHVybiBhCitkZXNjcmlwdGlvbiBvZiB0aGlzIGNvbnRyb2wgY2xhc3MuIFRoaXMgZGVzY3JpcHRpb24gY2FuIGJlIHVzZWQgYXMgdGhlCitjYXB0aW9uIG9mIGEgVGFiIHBhZ2UgaW4gYSBHVUksIGZvciBleGFtcGxlLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctc3RyZWFtLXR5cGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfc3RyZWFtX3R5cGU8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIE1QRUctMSwgLTIgb3IgLTQKK291dHB1dCBzdHJlYW0gdHlwZS4gT25lIGNhbm5vdCBhc3N1bWUgYW55dGhpbmcgaGVyZS4gRWFjaCBoYXJkd2FyZQorTVBFRyBlbmNvZGVyIHRlbmRzIHRvIHN1cHBvcnQgZGlmZmVyZW50IHN1YnNldHMgb2YgdGhlIGF2YWlsYWJsZSBNUEVHCitzdHJlYW0gdHlwZXMuIFRoZSBjdXJyZW50bHkgZGVmaW5lZCBzdHJlYW0gdHlwZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0yIHByb2dyYW0gc3RyZWFtPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgdHJhbnNwb3J0IHN0cmVhbTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1NTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xIHN5c3RlbSBzdHJlYW08L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9EVkQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgRFZELWNvbXBhdGlibGUgc3RyZWFtPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfVkNEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xIFZDRC1jb21wYXRpYmxlIHN0cmVhbTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0Q8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgU1ZDRC1jb21wYXRpYmxlIHN0cmVhbTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlByb2dyYW0gTWFwIFRhYmxlCitQYWNrZXQgSUQgZm9yIHRoZSBNUEVHIHRyYW5zcG9ydCBzdHJlYW0gKGRlZmF1bHQgMTYpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkF1ZGlvIFBhY2tldCBJRCBmb3IKK3RoZSBNUEVHIHRyYW5zcG9ydCBzdHJlYW0gKGRlZmF1bHQgMjU2KTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5WaWRlbyBQYWNrZXQgSUQgZm9yCit0aGUgTVBFRyB0cmFuc3BvcnQgc3RyZWFtIChkZWZhdWx0IDI2MCk8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlBhY2tldCBJRCBmb3IgdGhlCitNUEVHIHRyYW5zcG9ydCBzdHJlYW0gY2FycnlpbmcgUENSIGZpZWxkcyAoZGVmYXVsdCAyNTkpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkF1ZGlvIElEIGZvciBNUEVHCitQRVM8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VmlkZW8gSUQgZm9yIE1QRUcKK1BFUzwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfc3RyZWFtX3ZiaV9mbXQ8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U29tZSBjYXJkcyBjYW4gZW1iZWQKK1ZCSSBkYXRhICgmZWc7IENsb3NlZCBDYXB0aW9uLCBUZWxldGV4dCkgaW50byB0aGUgTVBFRyBzdHJlYW0uIFRoaXMKK2NvbnRyb2wgc2VsZWN0cyB3aGV0aGVyIFZCSSBkYXRhIHNob3VsZCBiZSBlbWJlZGRlZCwgYW5kIGlmIHNvLCB3aGF0CitlbWJlZGRpbmcgbWV0aG9kIHNob3VsZCBiZSB1c2VkLiBUaGUgbGlzdCBvZiBwb3NzaWJsZSBWQkkgZm9ybWF0cworZGVwZW5kcyBvbiB0aGUgZHJpdmVyLiBUaGUgY3VycmVudGx5IGRlZmluZWQgVkJJIGZvcm1hdCB0eXBlcworYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ObyBWQkkgaW4gdGhlIE1QRUcgc3RyZWFtPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUVjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlZCSSBpbiBwcml2YXRlIHBhY2tldHMsIElWVFYgZm9ybWF0IChkb2N1bWVudGVkCitpbiB0aGUga2VybmVsIHNvdXJjZXMgaW4gdGhlIGZpbGUgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUudmJpPC9maWxlbmFtZT4pPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctYXVkaW8tc2FtcGxpbmctZnJlcSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXE8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TVBFRyBBdWRpbyBzYW1wbGluZworZnJlcXVlbmN5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40NC4xIGtIejwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40OCBrSHo8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MzIga0h6PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmciPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfYXVkaW9fZW5jb2Rpbmc8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TVBFRyBBdWRpbyBlbmNvZGluZy4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk1QRUctMS8yIExheWVyIEkgZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xLzIgTGF5ZXIgSUkgZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8zPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xLzIgTGF5ZXIgSUlJIGVuY29kaW5nPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0yLzQgQUFDIChBZHZhbmNlZCBBdWRpbyBDb2RpbmcpPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QUMtMyBha2EgQVRTQyBBLzUyIGVuY29kaW5nPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGU8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TVBFRy0xLzIgTGF5ZXIgSSBiaXRyYXRlLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+PC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzY0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjY0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfOTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+OTYga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xMjhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTI4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTYwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjE2MCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE5Mks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xOTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yMjRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjI0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI1NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI4OEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yODgga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMjBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MzIwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzUySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjM1MiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM4NEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4zODQga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80MTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDE2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDQ4SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjQ0OCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1sMi1iaXRyYXRlIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5NUEVHLTEvMiBMYXllciBJSSBiaXRyYXRlLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDgga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV81Nks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT41NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzY0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjY0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfODBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+ODAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV85Nks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT45NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzExMks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xMTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMjhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTI4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTYwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjE2MCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE5Mks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xOTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjI0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI1NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMyMEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4zMjAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Mzg0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWF1ZGlvLWwzLWJpdHJhdGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19sM19iaXRyYXRlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1QRUctMS8yIExheWVyIElJSSBiaXRyYXRlLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80OEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40OCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNjRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NjQga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV84MEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT44MCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzk2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pjk2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTEySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjExMiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzEyOEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xMjgga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xNjBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTYwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjE5MiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzIyNEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yMjQga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yNTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzIwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyMCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BQUMgYml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1hYzMtYml0cmF0ZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BQy0zIGJpdHJhdGUuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjQwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjQ4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjY0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzgwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjgwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pjk2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzExMks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xMTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTI4SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjEyOCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xNjBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTYwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE5Mks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xOTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjIyNCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMyMEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4zMjAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjM4NCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80NDhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDQ4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzUxMks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT41MTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTc2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjU3NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NDBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NjQwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWF1ZGlvLW1vZGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19NT0RFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19tb2RlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1QRUcgQXVkaW8gbW9kZS4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5TdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkpvaW50IFN0ZXJlbzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX01PREVfRFVBTDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkJpbGluZ3VhbDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX01PREVfTU9OTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk1vbm88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbiI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5Kb2ludCBTdGVyZW8KK2F1ZGlvIG1vZGUgZXh0ZW5zaW9uLiBJbiBMYXllciBJIGFuZCBJSSB0aGV5IGluZGljYXRlIHdoaWNoIHN1YmJhbmRzCithcmUgaW4gaW50ZW5zaXR5IHN0ZXJlby4gQWxsIG90aGVyIHN1YmJhbmRzIGFyZSBjb2RlZCBpbiBzdGVyZW8uIExheWVyCitJSUkgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZC4gUG9zc2libGUgdmFsdWVzCithcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlN1YmJhbmRzIDQtMzEgaW4gaW50ZW5zaXR5IHN0ZXJlbzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzg8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5TdWJiYW5kcyA4LTMxIGluIGludGVuc2l0eSBzdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xMjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlN1YmJhbmRzIDEyLTMxIGluIGludGVuc2l0eSBzdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlN1YmJhbmRzIDE2LTMxIGluIGludGVuc2l0eSBzdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1lbXBoYXNpcyI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19lbXBoYXNpczwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BdWRpbyBFbXBoYXNpcy4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfTk9ORTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vbmU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTVBIQVNJU181MF9ESVZfMTVfdVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT41MC8xNSBtaWNyb3NlY29uZCBlbXBoYXNpczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNDSVRUIEouMTc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1jcmMiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19DUkM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2F1ZGlvX2NyYzwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5DUkMgbWV0aG9kLiBQb3NzaWJsZQordmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19DUkNfTk9ORTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vbmU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTY8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xNiBiaXQgcGFyaXR5IGNoZWNrPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19NVVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5NdXRlcyB0aGUgYXVkaW8gd2hlbgorY2FwdHVyaW5nLiBUaGlzIGlzIG5vdCBkb25lIGJ5IG11dGluZyBhdWRpbyBoYXJkd2FyZSwgd2hpY2ggY2FuIHN0aWxsCitwcm9kdWNlIGEgc2xpZ2h0IGhpc3MsIGJ1dCBpbiB0aGUgZW5jb2RlciBpdHNlbGYsIGd1YXJhbnRlZWluZyBhIGZpeGVkCithbmQgcmVwcm9kdWNhYmxlIGF1ZGlvIGJpdHN0cmVhbS4gMCA9IHVubXV0ZWQsIDEgPSBtdXRlZC48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1QRUcgVmlkZW8gZW5jb2RpbmcKK21ldGhvZC4gUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTEgVmlkZW8gZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgVmlkZW8gZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy00IEFWQyAoSC4yNjQpIFZpZGVvIGVuY29kaW5nPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctdmlkZW8tYXNwZWN0Ij4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ192aWRlb19hc3BlY3Q8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VmlkZW8gYXNwZWN0LgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk51bWJlciBvZiBCLUZyYW1lcworKGRlZmF1bHQgMik8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkdPUCBzaXplIChkZWZhdWx0CisxMik8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkdPUCBjbG9zdXJlIChkZWZhdWx0CisxKTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlIDM6MiBwdWxsZG93bgorKGRlZmF1bHQgMCk8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLXZpZGVvLWJpdHJhdGUtbW9kZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfdmlkZW9fYml0cmF0ZV9tb2RlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlZpZGVvIGJpdHJhdGUgbW9kZS4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlZhcmlhYmxlIGJpdHJhdGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q29uc3RhbnQgYml0cmF0ZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VmlkZW8gYml0cmF0ZSBpbiBiaXRzCitwZXIgc2Vjb25kLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlBlYWsgdmlkZW8gYml0cmF0ZSBpbgorYml0cyBwZXIgc2Vjb25kLiBNdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0byB0aGUgYXZlcmFnZSB2aWRlbyBiaXRyYXRlLgorSXQgaXMgaWdub3JlZCBpZiB0aGUgdmlkZW8gYml0cmF0ZSBtb2RlIGlzIHNldCB0byBjb25zdGFudAorYml0cmF0ZS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Rm9yIGV2ZXJ5IGNhcHR1cmVkCitmcmFtZSwgc2tpcCB0aGlzIG1hbnkgc3Vic2VxdWVudCBmcmFtZXMgKGRlZmF1bHQgMCkuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPiJNdXRlcyIgdGhlIHZpZGVvIHRvIGEKK2ZpeGVkIGNvbG9yIHdoZW4gY2FwdHVyaW5nLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZywgdG8gcHJvZHVjZSBhCitmaXhlZCB2aWRlbyBiaXRzdHJlYW0uIDAgPSB1bm11dGVkLCAxID0gbXV0ZWQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSAibXV0ZSIgY29sb3IKK29mIHRoZSB2aWRlby4gVGhlIHN1cHBsaWVkIDMyLWJpdCBpbnRlZ2VyIGlzIGludGVycHJldGVkIGFzIGZvbGxvd3MgKGJpdAorMCA9IGxlYXN0IHNpZ25pZmljYW50IGJpdCk6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PkJpdCAwOjc8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+ViBjaHJvbWluYW5jZSBpbmZvcm1hdGlvbjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5CaXQgODoxNTwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5VIGNocm9taW5hbmNlIGluZm9ybWF0aW9uPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PkJpdCAxNjoyMzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZIGx1bWluYW5jZSBpbmZvcm1hdGlvbjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5CaXQgMjQ6MzE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TXVzdCBiZSB6ZXJvLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICA8L3Rib2R5PgorCSAgPC90Z3JvdXA+CisJPC90YWJsZT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkNYMjM0MXggTVBFRyBDb250cm9sczwvdGl0bGU+CisKKwk8cGFyYT5UaGUgZm9sbG93aW5nIE1QRUcgY2xhc3MgY29udHJvbHMgZGVhbCB3aXRoIE1QRUcKK2VuY29kaW5nIHNldHRpbmdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBDb25leGFudCBDWDIzNDE1IGFuZAorQ1gyMzQxNiBNUEVHIGVuY29kaW5nIGNoaXBzLjwvcGFyYT4KKworCTx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iY3gyMzQxeC1jb250cm9sLWlkIj4KKwkgIDx0aXRsZT5DWDIzNDF4IENvbnRyb2wgSURzPC90aXRsZT4KKwkgIDx0Z3JvdXAgY29scz0iNCI+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iNioiIC8+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImMzIiBjb2x3aWR0aD0iMioiIC8+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImM0IiBjb2x3aWR0aD0iNioiIC8+CisJICAgIDxzcGFuc3BlYyBuYW1lc3Q9ImMxIiBuYW1lZW5kPSJjMiIgc3Bhbm5hbWU9ImlkIiAvPgorCSAgICA8c3BhbnNwZWMgbmFtZXN0PSJjMiIgbmFtZWVuZD0iYzQiIHNwYW5uYW1lPSJkZXNjciIgLz4KKwkgICAgPHRoZWFkPgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiIGFsaWduPSJsZWZ0Ij5JRDwvZW50cnk+CisJCTxlbnRyeSBhbGlnbj0ibGVmdCI+VHlwZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIiBhbGlnbj0ibGVmdCI+RGVzY3JpcHRpb248L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3RoZWFkPgorCSAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tc3BhdGlhbC1maWx0ZXItbW9kZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIFNwYXRpYWwKK0ZpbHRlciBtb2RlIChkZWZhdWx0IDxjb25zdGFudD5NQU5VQUw8L2NvbnN0YW50PikuIFBvc3NpYmxlIHZhbHVlcworYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9NQU5VQUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DaG9vc2UgdGhlIGZpbHRlciBtYW51YWxseTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2hvb3NlIHRoZSBmaWx0ZXIgYXV0b21hdGljYWxseTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXImbmJzcDsoMC0xNSk8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIHNldHRpbmcgZm9yIHRoZQorU3BhdGlhbCBGaWx0ZXIuIDAgPSBvZmYsIDE1ID0gbWF4aW11bS4gKERlZmF1bHQgaXMgMC4pPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9Imx1bWEtc3BhdGlhbC1maWx0ZXItdHlwZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZWxlY3QgdGhlIGFsZ29yaXRobQordG8gdXNlIGZvciB0aGUgTHVtYSBTcGF0aWFsIEZpbHRlciAoZGVmYXVsdAorPGNvbnN0YW50PjFEX0hPUjwvY29uc3RhbnQ+KS4gUG9zc2libGUgdmFsdWVzOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk9uZS1kaW1lbnNpb25hbCBob3Jpem9udGFsPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk9uZS1kaW1lbnNpb25hbCB2ZXJ0aWNhbDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX0hWX1NFUEFSQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlR3by1kaW1lbnNpb25hbCBzZXBhcmFibGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9TWU1fTk9OX1NFUEFSQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlR3by1kaW1lbnNpb25hbCBzeW1tZXRyaWNhbAorbm9uLXNlcGFyYWJsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0iY2hyb21hLXNwYXRpYWwtZmlsdGVyLXR5cGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNlbGVjdCB0aGUgYWxnb3JpdGhtCitmb3IgdGhlIENocm9tYSBTcGF0aWFsIEZpbHRlciAoZGVmYXVsdCA8Y29uc3RhbnQ+MURfSE9SPC9jb25zdGFudD4pLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+T25lLWRpbWVuc2lvbmFsIGhvcml6b250YWw8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXRlbXBvcmFsLWZpbHRlci1tb2RlIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfY3gyMzQxeF92aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBUZW1wb3JhbAorRmlsdGVyIG1vZGUgKGRlZmF1bHQgPGNvbnN0YW50Pk1BTlVBTDwvY29uc3RhbnQ+KS4gUG9zc2libGUgdmFsdWVzCithcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9NQU5VQUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DaG9vc2UgdGhlIGZpbHRlciBtYW51YWxseTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfQVVUTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNob29zZSB0aGUgZmlsdGVyIGF1dG9tYXRpY2FsbHk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlciZuYnNwOygwLTMxKTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgc2V0dGluZyBmb3IgdGhlCitUZW1wb3JhbCBGaWx0ZXIuIDAgPSBvZmYsIDMxID0gbWF4aW11bS4gKERlZmF1bHQgaXMgOCBmb3IgZnVsbC1zY2FsZQorY2FwdHVyaW5nIGFuZCAwIGZvciBzY2FsZWQgY2FwdHVyaW5nLik8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tbWVkaWFuLWZpbHRlci10eXBlIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1lZGlhbiBGaWx0ZXIgVHlwZQorKGRlZmF1bHQgPGNvbnN0YW50Pk9GRjwvY29uc3RhbnQ+KS4gUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkY8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ObyBmaWx0ZXI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1I8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5Ib3Jpem9udGFsIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX1ZFUlQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5WZXJ0aWNhbCBmaWx0ZXI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1JfVkVSVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0RJQUc8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5EaWFnb25hbCBmaWx0ZXI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX0JPVFRPTTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXImbmJzcDsoMC0yNTUpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRocmVzaG9sZCBhYm92ZSB3aGljaAordGhlIGx1bWluYW5jZSBtZWRpYW4gZmlsdGVyIGlzIGVuYWJsZWQgKGRlZmF1bHQgMCk8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlciZuYnNwOygwLTI1NSk8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhyZXNob2xkIGJlbG93IHdoaWNoCit0aGUgbHVtaW5hbmNlIG1lZGlhbiBmaWx0ZXIgaXMgZW5hYmxlZCAoZGVmYXVsdCAyNTUpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfQk9UVE9NPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlciZuYnNwOygwLTI1NSk8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhyZXNob2xkIGFib3ZlIHdoaWNoCit0aGUgY2hyb21hIG1lZGlhbiBmaWx0ZXIgaXMgZW5hYmxlZCAoZGVmYXVsdCAwKTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX1RPUDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXImbmJzcDsoMC0yNTUpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRocmVzaG9sZCBiZWxvdyB3aGljaAordGhlIGNocm9tYSBtZWRpYW4gZmlsdGVyIGlzIGVuYWJsZWQgKGRlZmF1bHQgMjU1KTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBDWDIzNDFYIE1QRUcgZW5jb2RlcgorY2FuIGluc2VydCBvbmUgZW1wdHkgTVBFRy0yIFBFUyBwYWNrZXQgaW50byB0aGUgc3RyZWFtIGJldHdlZW4gZXZlcnkKK2ZvdXIgdmlkZW8gZnJhbWVzLiBUaGUgcGFja2V0IHNpemUgaXMgMjA0OCBieXRlcywgaW5jbHVkaW5nIHRoZQorcGFja2V0X3N0YXJ0X2NvZGVfcHJlZml4IGFuZCBzdHJlYW1faWQgZmllbGRzLiBUaGUgc3RyZWFtX2lkIGlzIDB4QkYKKyhwcml2YXRlIHN0cmVhbSAyKS4gVGhlIHBheWxvYWQgY29uc2lzdHMgb2YgMHgwMCBieXRlcywgdG8gYmUgZmlsbGVkCitpbiBieSB0aGUgYXBwbGljYXRpb24uIDAgPSBkbyBub3QgaW5zZXJ0LCAxID0gaW5zZXJ0IHBhY2tldHMuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90Ym9keT4KKwkgIDwvdGdyb3VwPgorCTwvdGFibGU+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNhbWVyYS1jb250cm9scyI+CisgICAgICA8dGl0bGU+Q2FtZXJhIENvbnRyb2wgUmVmZXJlbmNlPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIENhbWVyYSBjbGFzcyBpbmNsdWRlcyBjb250cm9scyBmb3IgbWVjaGFuaWNhbCAob3IKK2VxdWl2YWxlbnQgZGlnaXRhbCkgZmVhdHVyZXMgb2YgYSBkZXZpY2Ugc3VjaCBhcyBjb250cm9sbGFibGUgbGVuc2VzCitvciBzZW5zb3JzLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iY2FtZXJhLWNvbnRyb2wtaWQiPgorICAgICAgPHRpdGxlPkNhbWVyYSBDb250cm9sIElEczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSI2KiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiBjb2x3aWR0aD0iNioiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzEiIG5hbWVlbmQ9ImMyIiBzcGFubmFtZT0iaWQiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzIiIG5hbWVlbmQ9ImM0IiBzcGFubmFtZT0iZGVzY3IiIC8+CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCIgYWxpZ249ImxlZnQiPklEPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5UeXBlPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3cgcm93c2VwPSIxIj48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIiBhbGlnbj0ibGVmdCI+RGVzY3JpcHRpb248L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9DQU1FUkFfQ0xBU1M8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5jbGFzczwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBDYW1lcmEgY2xhc3MKK2Rlc2NyaXB0b3IuIENhbGxpbmcgJlZJRElPQy1RVUVSWUNUUkw7IGZvciB0aGlzIGNvbnRyb2wgd2lsbCByZXR1cm4gYQorZGVzY3JpcHRpb24gb2YgdGhpcyBjb250cm9sIGNsYXNzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3cgaWQ9InY0bDItZXhwb3N1cmUtYXV0by10eXBlIj4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FVVE88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5lbnVtJm5ic3A7djRsMl9leHBvc3VyZV9hdXRvX3R5cGU8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbmFibGVzIGF1dG9tYXRpYworYWRqdXN0bWVudHMgb2YgdGhlIGV4cG9zdXJlIHRpbWUgYW5kL29yIGlyaXMgYXBlcnR1cmUuIFRoZSBlZmZlY3Qgb2YKK21hbnVhbCBjaGFuZ2VzIG9mIHRoZSBleHBvc3VyZSB0aW1lIG9yIGlyaXMgYXBlcnR1cmUgd2hpbGUgdGhlc2UKK2ZlYXR1cmVzIGFyZSBlbmFibGVkIGlzIHVuZGVmaW5lZCwgZHJpdmVycyBzaG91bGQgaWdub3JlIHN1Y2gKK3JlcXVlc3RzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCSAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCTxyb3c+CisJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VYUE9TVVJFX0FVVE88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5BdXRvbWF0aWMgZXhwb3N1cmUgdGltZSwgYXV0b21hdGljIGlyaXMKK2FwZXJ0dXJlLjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FWFBPU1VSRV9NQU5VQUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgPGVudHJ5Pk1hbnVhbCBleHBvc3VyZSB0aW1lLCBtYW51YWwgaXJpcy48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRVhQT1NVUkVfU0hVVFRFUl9QUklPUklUWTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICA8ZW50cnk+TWFudWFsIGV4cG9zdXJlIHRpbWUsIGF1dG8gaXJpcy48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRVhQT1NVUkVfQVBFUlRVUkVfUFJJT1JJVFk8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgPGVudHJ5PkF1dG8gZXhwb3N1cmUgdGltZSwgbWFudWFsIGlyaXMuPC9lbnRyeT4KKwkJPC9yb3c+CisJICAgICAgPC90Ym9keT4KKwkgICAgPC9lbnRyeXRibD4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkRldGVybWluZXMgdGhlIGV4cG9zdXJlCit0aW1lIG9mIHRoZSBjYW1lcmEgc2Vuc29yLiBUaGUgZXhwb3N1cmUgdGltZSBpcyBsaW1pdGVkIGJ5IHRoZSBmcmFtZQoraW50ZXJ2YWwuIERyaXZlcnMgc2hvdWxkIGludGVycHJldCB0aGUgdmFsdWVzIGFzIDEwMCAmbWljcm87cyB1bml0cywKK3doZXJlIHRoZSB2YWx1ZSAxIHN0YW5kcyBmb3IgMS8xMDAwMHRoIG9mIGEgc2Vjb25kLCAxMDAwMCBmb3IgMSBzZWNvbmQKK2FuZCAxMDAwMDAgZm9yIDEwIHNlY29uZHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFk8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+V2hlbgorPGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FVVE88L2NvbnN0YW50PiBpcyBzZXQgdG8KKzxjb25zdGFudD5BVVRPPC9jb25zdGFudD4gb3IgPGNvbnN0YW50PkFQRVJUVVJFX1BSSU9SSVRZPC9jb25zdGFudD4sCit0aGlzIGNvbnRyb2wgZGV0ZXJtaW5lcyBpZiB0aGUgZGV2aWNlIG1heSBkeW5hbWljYWxseSB2YXJ5IHRoZSBmcmFtZQorcmF0ZS4gQnkgZGVmYXVsdCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgKDApIGFuZCB0aGUgZnJhbWUgcmF0ZSBtdXN0CityZW1haW4gY29uc3RhbnQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1BBTl9SRUxBVElWRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIGNvbnRyb2wgdHVybnMgdGhlCitjYW1lcmEgaG9yaXpvbnRhbGx5IGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBUaGUgdW5pdCBpcyB1bmRlZmluZWQuIEEKK3Bvc2l0aXZlIHZhbHVlIG1vdmVzIHRoZSBjYW1lcmEgdG8gdGhlIHJpZ2h0IChjbG9ja3dpc2Ugd2hlbiB2aWV3ZWQKK2Zyb20gYWJvdmUpLCBhIG5lZ2F0aXZlIHZhbHVlIHRvIHRoZSBsZWZ0LiBBIHZhbHVlIG9mIHplcm8gZG9lcyBub3QKK2NhdXNlIG1vdGlvbi4gVGhpcyBpcyBhIHdyaXRlLW9ubHkgY29udHJvbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9SRUxBVElWRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIGNvbnRyb2wgdHVybnMgdGhlCitjYW1lcmEgdmVydGljYWxseSBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gVGhlIHVuaXQgaXMgdW5kZWZpbmVkLiBBCitwb3NpdGl2ZSB2YWx1ZSBtb3ZlcyB0aGUgY2FtZXJhIHVwLCBhIG5lZ2F0aXZlIHZhbHVlIGRvd24uIEEgdmFsdWUgb2YKK3plcm8gZG9lcyBub3QgY2F1c2UgbW90aW9uLiBUaGlzIGlzIGEgd3JpdGUtb25seSBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9QQU5fUkVTRVQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5idXR0b248L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5XaGVuIHRoaXMgY29udHJvbCBpcyBzZXQsCit0aGUgY2FtZXJhIG1vdmVzIGhvcml6b250YWxseSB0byB0aGUgZGVmYXVsdCBwb3NpdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9SRVNFVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJ1dHRvbjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPldoZW4gdGhpcyBjb250cm9sIGlzIHNldCwKK3RoZSBjYW1lcmEgbW92ZXMgdmVydGljYWxseSB0byB0aGUgZGVmYXVsdCBwb3NpdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUEFOX0FCU09MVVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoaXMgY29udHJvbAordHVybnMgdGhlIGNhbWVyYSBob3Jpem9udGFsbHkgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4gUG9zaXRpdmUKK3ZhbHVlcyBtb3ZlIHRoZSBjYW1lcmEgdG8gdGhlIHJpZ2h0IChjbG9ja3dpc2Ugd2hlbiB2aWV3ZWQgZnJvbSBhYm92ZSksCituZWdhdGl2ZSB2YWx1ZXMgdG8gdGhlIGxlZnQuIERyaXZlcnMgc2hvdWxkIGludGVycHJldCB0aGUgdmFsdWVzIGFzIGFyYworc2Vjb25kcywgd2l0aCB2YWxpZCB2YWx1ZXMgYmV0d2VlbiAtMTgwICogMzYwMCBhbmQgKzE4MCAqIDM2MDAKK2luY2x1c2l2ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9BQlNPTFVURTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIGNvbnRyb2wKK3R1cm5zIHRoZSBjYW1lcmEgdmVydGljYWxseSB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiBQb3NpdGl2ZSB2YWx1ZXMKK21vdmUgdGhlIGNhbWVyYSB1cCwgbmVnYXRpdmUgdmFsdWVzIGRvd24uIERyaXZlcnMgc2hvdWxkIGludGVycHJldCB0aGUKK3ZhbHVlcyBhcyBhcmMgc2Vjb25kcywgd2l0aCB2YWxpZCB2YWx1ZXMgYmV0d2VlbiAtMTgwICogMzYwMCBhbmQgKzE4MAorKiAzNjAwIGluY2x1c2l2ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRk9DVVNfQUJTT0xVVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhpcyBjb250cm9sIHNldHMgdGhlCitmb2NhbCBwb2ludCBvZiB0aGUgY2FtZXJhIHRvIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uIFRoZSB1bml0IGlzCit1bmRlZmluZWQuIFBvc2l0aXZlIHZhbHVlcyBzZXQgdGhlIGZvY3VzIGNsb3NlciB0byB0aGUgY2FtZXJhLAorbmVnYXRpdmUgdmFsdWVzIHRvd2FyZHMgaW5maW5pdHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoaXMgY29udHJvbCBtb3ZlcyB0aGUKK2ZvY2FsIHBvaW50IG9mIHRoZSBjYW1lcmEgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFRoZSB1bml0IGlzCit1bmRlZmluZWQuIFBvc2l0aXZlIHZhbHVlcyBtb3ZlIHRoZSBmb2N1cyBjbG9zZXIgdG8gdGhlIGNhbWVyYSwKK25lZ2F0aXZlIHZhbHVlcyB0b3dhcmRzIGluZmluaXR5LiBUaGlzIGlzIGEgd3JpdGUtb25seSBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9GT0NVU19BVVRPPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkVuYWJsZXMgYXV0b21hdGljIGZvY3VzCithZGp1c3RtZW50cy4gVGhlIGVmZmVjdCBvZiBtYW51YWwgZm9jdXMgYWRqdXN0bWVudHMgd2hpbGUgdGhpcyBmZWF0dXJlCitpcyBlbmFibGVkIGlzIHVuZGVmaW5lZCwgZHJpdmVycyBzaG91bGQgaWdub3JlIHN1Y2ggcmVxdWVzdHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1pPT01fQUJTT0xVVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U3BlY2lmeSB0aGUgb2JqZWN0aXZlIGxlbnMKK2ZvY2FsIGxlbmd0aCBhcyBhbiBhYnNvbHV0ZSB2YWx1ZS4gVGhlIHpvb20gdW5pdCBpcyBkcml2ZXItc3BlY2lmaWMgYW5kIGl0cwordmFsdWUgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfWk9PTV9SRUxBVElWRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TcGVjaWZ5IHRoZSBvYmplY3RpdmUgbGVucworZm9jYWwgbGVuZ3RoIHJlbGF0aXZlbHkgdG8gdGhlIGN1cnJlbnQgdmFsdWUuIFBvc2l0aXZlIHZhbHVlcyBtb3ZlIHRoZSB6b29tCitsZW5zIGdyb3VwIHRvd2FyZHMgdGhlIHRlbGVwaG90byBkaXJlY3Rpb24sIG5lZ2F0aXZlIHZhbHVlcyB0b3dhcmRzIHRoZQord2lkZS1hbmdsZSBkaXJlY3Rpb24uIFRoZSB6b29tIHVuaXQgaXMgZHJpdmVyLXNwZWNpZmljLiBUaGlzIGlzIGEgd3JpdGUtb25seSBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9aT09NX0NPTlRJTlVPVVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TW92ZSB0aGUgb2JqZWN0aXZlIGxlbnMgZ3JvdXAKK2F0IHRoZSBzcGVjaWZpZWQgc3BlZWQgdW50aWwgaXQgcmVhY2hlcyBwaHlzaWNhbCBkZXZpY2UgbGltaXRzIG9yIHVudGlsIGFuCitleHBsaWNpdCByZXF1ZXN0IHRvIHN0b3AgdGhlIG1vdmVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIG1vdmVzIHRoZSB6b29tIGxlbnMKK2dyb3VwIHRvd2FyZHMgdGhlIHRlbGVwaG90byBkaXJlY3Rpb24uIEEgdmFsdWUgb2YgemVybyBzdG9wcyB0aGUgem9vbSBsZW5zCitncm91cCBtb3ZlbWVudC4gQSBuZWdhdGl2ZSB2YWx1ZSBtb3ZlcyB0aGUgem9vbSBsZW5zIGdyb3VwIHRvd2FyZHMgdGhlCit3aWRlLWFuZ2xlIGRpcmVjdGlvbi4gVGhlIHpvb20gc3BlZWQgdW5pdCBpcyBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1BSSVZBQ1k8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+UHJldmVudCB2aWRlbyBmcm9tIGJlaW5nIGFjcXVpcmVkCitieSB0aGUgY2FtZXJhLiBXaGVuIHRoaXMgY29udHJvbCBpcyBzZXQgdG8gPGNvbnN0YW50PlRSVUU8L2NvbnN0YW50PiAoMSksIG5vCitpbWFnZSBjYW4gYmUgY2FwdHVyZWQgYnkgdGhlIGNhbWVyYS4gQ29tbW9uIG1lYW5zIHRvIGVuZm9yY2UgcHJpdmFjeSBhcmUKK21lY2hhbmljYWwgb2J0dXJhdGlvbiBvZiB0aGUgc2Vuc29yIGFuZCBmaXJtd2FyZSBpbWFnZSBwcm9jZXNzaW5nLCBidXQgdGhlCitkZXZpY2UgaXMgbm90IHJlc3RyaWN0ZWQgdG8gdGhlc2UgbWV0aG9kcy4gRGV2aWNlcyB0aGF0IGltcGxlbWVudCB0aGUgcHJpdmFjeQorY29udHJvbCBtdXN0IHN1cHBvcnQgcmVhZCBhY2Nlc3MgYW5kIG1heSBzdXBwb3J0IHdyaXRlIGFjY2Vzcy48L2VudHJ5PgorCSAgPC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlN3aXRjaCB0aGUgYmFuZC1zdG9wIGZpbHRlciBvZiBhCitjYW1lcmEgc2Vuc29yIG9uIG9yIG9mZiwgb3Igc3BlY2lmeSBpdHMgc3RyZW5ndGguIFN1Y2ggYmFuZC1zdG9wIGZpbHRlcnMgY2FuCitiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gZmlsdGVyIG91dCB0aGUgZmx1b3Jlc2NlbnQgbGlnaHQgY29tcG9uZW50LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmbS10eC1jb250cm9scyI+CisgICAgICA8dGl0bGU+Rk0gVHJhbnNtaXR0ZXIgQ29udHJvbCBSZWZlcmVuY2U8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGUgRk0gVHJhbnNtaXR0ZXIgKEZNX1RYKSBjbGFzcyBpbmNsdWRlcyBjb250cm9scyBmb3IgY29tbW9uIGZlYXR1cmVzIG9mCitGTSB0cmFuc21pc3Npb25zIGNhcGFibGUgZGV2aWNlcy4gQ3VycmVudGx5IHRoaXMgY2xhc3MgaW5jbHVkZXMgcGFyYW1ldGVycyBmb3IgYXVkaW8KK2NvbXByZXNzaW9uLCBwaWxvdCB0b25lIGdlbmVyYXRpb24sIGF1ZGlvIGRldmlhdGlvbiBsaW1pdGVyLCBSRFMgdHJhbnNtaXNzaW9uIGFuZAordHVuaW5nIHBvd2VyIGZlYXR1cmVzLjwvcGFyYT4KKworICAgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJmbS10eC1jb250cm9sLWlkIj4KKyAgICAgIDx0aXRsZT5GTV9UWCBDb250cm9sIElEczwvdGl0bGU+CisKKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjYqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIGNvbHdpZHRoPSI2KiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJjMSIgbmFtZWVuZD0iYzIiIHNwYW5uYW1lPSJpZCIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJjMiIgbmFtZWVuZD0iYzQiIHNwYW5uYW1lPSJkZXNjciIgLz4KKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIiBhbGlnbj0ibGVmdCI+SUQ8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlR5cGU8L2VudHJ5PgorCSAgPC9yb3c+PHJvdyByb3dzZXA9IjEiPjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiIGFsaWduPSJsZWZ0Ij5EZXNjcmlwdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0ZNX1RYX0NMQVNTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Y2xhc3M8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgRk1fVFggY2xhc3MKK2Rlc2NyaXB0b3IuIENhbGxpbmcgJlZJRElPQy1RVUVSWUNUUkw7IGZvciB0aGlzIGNvbnRyb2wgd2lsbCByZXR1cm4gYQorZGVzY3JpcHRpb24gb2YgdGhpcyBjb250cm9sIGNsYXNzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyBSRFMgc2lnbmFsIGZyZXF1ZW5jeSBkZXZpYXRpb24gbGV2ZWwgaW4gSHouCitUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUkRTX1RYX1BJPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U2V0cyB0aGUgUkRTIFByb2dyYW1tZSBJZGVudGlmaWNhdGlvbiBmaWVsZAorZm9yIHRyYW5zbWlzc2lvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUkRTX1RYX1BUWTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIFJEUyBQcm9ncmFtbWUgVHlwZSBmaWVsZCBmb3IgdHJhbnNtaXNzaW9uLgorVGhpcyBlbmNvZGVzIHVwIHRvIDMxIHByZS1kZWZpbmVkIHByb2dyYW1tZSB0eXBlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUkRTX1RYX1BTX05BTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIFByb2dyYW1tZSBTZXJ2aWNlIG5hbWUgKFBTX05BTUUpIGZvciB0cmFuc21pc3Npb24uCitJdCBpcyBpbnRlbmRlZCBmb3Igc3RhdGljIGRpc3BsYXkgb24gYSByZWNlaXZlci4gSXQgaXMgdGhlIHByaW1hcnkgYWlkIHRvIGxpc3RlbmVycyBpbiBwcm9ncmFtbWUgc2VydmljZQoraWRlbnRpZmljYXRpb24gYW5kIHNlbGVjdGlvbi4gIEluIEFubmV4IEUgb2YgPHhyZWYgbGlua2VuZD0iZW41MDA2NyIgLz4sIHRoZSBSRFMgc3BlY2lmaWNhdGlvbiwKK3RoZXJlIGlzIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgY29ycmVjdCBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIFByb2dyYW1tZSBTZXJ2aWNlIG5hbWUgc3RyaW5ncy4KK0Fsc28gZnJvbSBSRFMgc3BlY2lmaWNhdGlvbiwgUFMgaXMgdXN1YWxseSBhIHNpbmdsZSBlaWdodCBjaGFyYWN0ZXIgdGV4dC4gSG93ZXZlciwgaXQgaXMgYWxzbyBwb3NzaWJsZQordG8gZmluZCByZWNlaXZlcnMgd2hpY2ggY2FuIHNjcm9sbCBzdHJpbmdzIHNpemVkIGFzIDggeCBOIGNoYXJhY3RlcnMuIFNvLCB0aGlzIGNvbnRyb2wgbXVzdCBiZSBjb25maWd1cmVkCit3aXRoIHN0ZXBzIG9mIDggY2hhcmFjdGVycy4gVGhlIHJlc3VsdCBpcyBpdCBtdXN0IGFsd2F5cyBjb250YWluIGEgc3RyaW5nIHdpdGggc2l6ZSBtdWx0aXBsZSBvZiA4LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U2V0cyB0aGUgUmFkaW8gVGV4dCBpbmZvIGZvciB0cmFuc21pc3Npb24uIEl0IGlzIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZgord2hhdCBpcyBiZWluZyBicm9hZGNhc3RlZC4gUkRTIFJhZGlvIFRleHQgY2FuIGJlIGFwcGxpZWQgd2hlbiBicm9hZGNhc3RlciB3aXNoZXMgdG8gdHJhbnNtaXQgbG9uZ2VyIFBTIG5hbWVzLAorcHJvZ3JhbW1lLXJlbGF0ZWQgaW5mb3JtYXRpb24gb3IgYW55IG90aGVyIHRleHQuIEluIHRoZXNlIGNhc2VzLCBSYWRpb1RleHQgc2hvdWxkIGJlIHVzZWQgaW4gYWRkaXRpb24gdG8KKzxjb25zdGFudD5WNEwyX0NJRF9SRFNfVFhfUFNfTkFNRTwvY29uc3RhbnQ+LiBUaGUgZW5jb2RpbmcgZm9yIFJhZGlvIFRleHQgc3RyaW5ncyBpcyBhbHNvIGZ1bGx5IGRlc2NyaWJlZAoraW4gQW5uZXggRSBvZiA8eHJlZiBsaW5rZW5kPSJlbjUwMDY3IiAvPi4gVGhlIGxlbmd0aCBvZiBSYWRpbyBUZXh0IHN0cmluZ3MgZGVwZW5kcyBvbiB3aGljaCBSRFMgQmxvY2sgaXMgYmVpbmcKK3VzZWQgdG8gdHJhbnNtaXQgaXQsIGVpdGhlciAzMiAoMkEgYmxvY2spIG9yIDY0ICgyQiBibG9jaykuICBIb3dldmVyLCBpdCBpcyBhbHNvIHBvc3NpYmxlCit0byBmaW5kIHJlY2VpdmVycyB3aGljaCBjYW4gc2Nyb2xsIHN0cmluZ3Mgc2l6ZWQgYXMgMzIgeCBOIG9yIDY0IHggTiBjaGFyYWN0ZXJzLiBTbywgdGhpcyBjb250cm9sIG11c3QgYmUgY29uZmlndXJlZAord2l0aCBzdGVwcyBvZiAzMiBvciA2NCBjaGFyYWN0ZXJzLiBUaGUgcmVzdWx0IGlzIGl0IG11c3QgYWx3YXlzIGNvbnRhaW4gYSBzdHJpbmcgd2l0aCBzaXplIG11bHRpcGxlIG9mIDMyIG9yIDY0LiA8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXVkaW8gZGV2aWF0aW9uIGxpbWl0ZXIgZmVhdHVyZS4KK1RoZSBsaW1pdGVyIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byBtYXhpbWl6ZSB0aGUgYXVkaW8gdm9sdW1lLCBtaW5pbWl6ZSByZWNlaXZlci1nZW5lcmF0ZWQKK2Rpc3RvcnRpb24gYW5kIHByZXZlbnQgb3Zlcm1vZHVsYXRpb24uCis8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fTElNSVRFUl9SRUxFQVNFX1RJTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBhdWRpbyBkZXZpYXRpb24gbGltaXRlciBmZWF0dXJlIHJlbGVhc2UgdGltZS4KK1VuaXQgaXMgaW4gdXNlY29uZHMuIFN0ZXAgYW5kIHJhbmdlIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0xJTUlURVJfREVWSUFUSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyBhdWRpbyBmcmVxdWVuY3kgZGV2aWF0aW9uIGxldmVsIGluIEh6LgorVGhlIHJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhdWRpbyBjb21wcmVzc2lvbiBmZWF0dXJlLgorVGhpcyBmZWF0dXJlIGFtcGxpZmllcyBzaWduYWxzIGJlbG93IHRoZSB0aHJlc2hvbGQgYnkgYSBmaXhlZCBnYWluIGFuZCBjb21wcmVzc2VzIGF1ZGlvCitzaWduYWxzIGFib3ZlIHRoZSB0aHJlc2hvbGQgYnkgdGhlIHJhdGlvIG9mIFRocmVzaG9sZC8oR2FpbiArIFRocmVzaG9sZCkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU48L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBnYWluIGZvciBhdWRpbyBjb21wcmVzc2lvbiBmZWF0dXJlLiBJdCBpcworYSBkQiB2YWx1ZS4gVGhlIHJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIHRocmVzaG9sZCBsZXZlbCBmb3IgYXVkaW8gY29tcHJlc3Npb24gZnJlYXR1cmUuCitJdCBpcyBhIGRCIHZhbHVlLiBUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBhdHRhY2sgdGltZSBmb3IgYXVkaW8gY29tcHJlc3Npb24gZmVhdHVyZS4KK0l0IGlzIGEgdXNlY29uZHMgdmFsdWUuIFRoZSByYW5nZSBhbmQgc3RlcCBhcmUgZHJpdmVyLXNwZWNpZmljLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSByZWxlYXNlIHRpbWUgZm9yIGF1ZGlvIGNvbXByZXNzaW9uIGZlYXR1cmUuCitJdCBpcyBhIHVzZWNvbmRzIHZhbHVlLiBUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcGlsb3QgdG9uZSBnZW5lcmF0aW9uIGZlYXR1cmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1BJTE9UX1RPTkVfREVWSUFUSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyBwaWxvdCB0b25lIGZyZXF1ZW5jeSBkZXZpYXRpb24gbGV2ZWwuIFVuaXQgaXMKK2luIEh6LiBUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1k8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5Db25maWd1cmVzIHBpbG90IHRvbmUgZnJlcXVlbmN5IHZhbHVlLiBVbml0IGlzCitpbiBIei4gVGhlIHJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0idjRsMi1wcmVlbXBoYXNpcyI+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyB0aGUgcHJlLWVtcGhhc2lzIHZhbHVlIGZvciBicm9hZGNhc3RpbmcuCitBIHByZS1lbXBoYXNpcyBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgYnJvYWRjYXN0IHRvIGFjY2VudHVhdGUgdGhlIGhpZ2ggYXVkaW8gZnJlcXVlbmNpZXMuCitEZXBlbmRpbmcgb24gdGhlIHJlZ2lvbiwgYSB0aW1lIGNvbnN0YW50IG9mIGVpdGhlciA1MCBvciA3NSB1c2Vjb25kcyBpcyB1c2VkLiBUaGUgZW51bSZuYnNwO3Y0bDJfcHJlZW1waGFzaXMKK2RlZmluZXMgcG9zc2libGUgdmFsdWVzIGZvciBwcmUtZW1waGFzaXMuIEhlcmUgdGhleSBhcmU6PC9lbnRyeT4KKwk8L3Jvdz48cm93PgorCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ObyBwcmUtZW1waGFzaXMgaXMgYXBwbGllZC48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJFRU1QSEFTSVNfNTBfdVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5BIHByZS1lbXBoYXNpcyBvZiA1MCB1UyBpcyB1c2VkLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QUkVFTVBIQVNJU183NV91UzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkEgcHJlLWVtcGhhc2lzIG9mIDc1IHVTIGlzIHVzZWQuPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisKKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBvdXRwdXQgcG93ZXIgbGV2ZWwgZm9yIHNpZ25hbCB0cmFuc21pc3Npb24uCitVbml0IGlzIGluIGRCdVYuIFJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIHNlbGVjdHMgdGhlIHZhbHVlIG9mIGFudGVubmEgdHVuaW5nIGNhcGFjaXRvcgorbWFudWFsbHkgb3IgYXV0b21hdGljYWxseSBpZiBzZXQgdG8gemVyby4gVW5pdCwgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICAgIDwvdGFibGU+CisKKzxwYXJhPkZvciBtb3JlIGRldGFpbHMgYWJvdXQgUkRTIHNwZWNpZmljYXRpb24sIHJlZmVyIHRvCis8eHJlZiBsaW5rZW5kPSJlbjUwMDY3IiAvPiBkb2N1bWVudCwgZnJvbSBDRU5FTEVDLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJjb21tb24uc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY3JvcC5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOWU3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY3JvcC5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZmI4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWNhcHR1cmUueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtY2FwdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4MDdlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWNhcHR1cmUueG1sCkBAIC0wLDAgKzEsMTE1IEBACisgIDx0aXRsZT5WaWRlbyBDYXB0dXJlIEludGVyZmFjZTwvdGl0bGU+CisKKyAgPHBhcmE+VmlkZW8gY2FwdHVyZSBkZXZpY2VzIHNhbXBsZSBhbiBhbmFsb2cgdmlkZW8gc2lnbmFsIGFuZCBzdG9yZQordGhlIGRpZ2l0aXplZCBpbWFnZXMgaW4gbWVtb3J5LiBUb2RheSBuZWFybHkgYWxsIGRldmljZXMgY2FuIGNhcHR1cmUKK2F0IGZ1bGwgMjUgb3IgMzAgZnJhbWVzL3NlY29uZC4gV2l0aCB0aGlzIGludGVyZmFjZSBhcHBsaWNhdGlvbnMgY2FuCitjb250cm9sIHRoZSBjYXB0dXJlIHByb2Nlc3MgYW5kIG1vdmUgaW1hZ2VzIGZyb20gdGhlIGRyaXZlciBpbnRvIHVzZXIKK3NwYWNlLjwvcGFyYT4KKworICA8cGFyYT5Db252ZW50aW9uYWxseSBWNEwyIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyBhcmUgYWNjZXNzZWQgdGhyb3VnaAorY2hhcmFjdGVyIGRldmljZSBzcGVjaWFsIGZpbGVzIG5hbWVkIDxmaWxlbmFtZT4vZGV2L3ZpZGVvPC9maWxlbmFtZT4KK2FuZCA8ZmlsZW5hbWU+L2Rldi92aWRlbzA8L2ZpbGVuYW1lPiB0bworPGZpbGVuYW1lPi9kZXYvdmlkZW82MzwvZmlsZW5hbWU+IHdpdGggbWFqb3IgbnVtYmVyIDgxIGFuZCBtaW5vcgorbnVtYmVycyAwIHRvIDYzLiA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IGlzIHR5cGljYWxseSBhCitzeW1ib2xpYyBsaW5rIHRvIHRoZSBwcmVmZXJyZWQgdmlkZW8gZGV2aWNlLiBOb3RlIHRoZSBzYW1lIGRldmljZQorZmlsZXMgYXJlIHVzZWQgZm9yIHZpZGVvIG91dHB1dCBkZXZpY2VzLjwvcGFyYT4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgIDxwYXJhPkRldmljZXMgc3VwcG9ydGluZyB0aGUgdmlkZW8gY2FwdHVyZSBpbnRlcmZhY2Ugc2V0IHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIEFzIHNlY29uZGFyeSBkZXZpY2UgZnVuY3Rpb25zCit0aGV5IG1heSBhbHNvIHN1cHBvcnQgdGhlIDxsaW5rIGxpbmtlbmQ9Im92ZXJsYXkiPnZpZGVvIG92ZXJsYXk8L2xpbms+CisoPGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50PikgYW5kIHRoZSA8bGluaworbGlua2VuZD0icmF3LXZiaSI+cmF3IFZCSSBjYXB0dXJlPC9saW5rPgorKDxjb25zdGFudD5WNEwyX0NBUF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+KSBpbnRlcmZhY2UuIEF0IGxlYXN0IG9uZSBvZgordGhlIHJlYWQvd3JpdGUgb3Igc3RyZWFtaW5nIEkvTyBtZXRob2RzIG11c3QgYmUgc3VwcG9ydGVkLiBUdW5lcnMgYW5kCithdWRpbyBpbnB1dHMgYXJlIG9wdGlvbmFsLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5TdXBwbGVtZW50YWwgRnVuY3Rpb25zPC90aXRsZT4KKworICAgIDxwYXJhPlZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzaGFsbCBzdXBwb3J0IDxsaW5rCitsaW5rZW5kPSJhdWRpbyI+YXVkaW8gaW5wdXQ8L2xpbms+LCA8bGluaworbGlua2VuZD0idHVuZXIiPnR1bmVyPC9saW5rPiwgPGxpbmsgbGlua2VuZD0iY29udHJvbCI+Y29udHJvbHM8L2xpbms+LAorPGxpbmsgbGlua2VuZD0iY3JvcCI+Y3JvcHBpbmcgYW5kIHNjYWxpbmc8L2xpbms+IGFuZCA8bGluaworbGlua2VuZD0ic3RyZWFtaW5nLXBhciI+c3RyZWFtaW5nIHBhcmFtZXRlcjwvbGluaz4gaW9jdGxzIGFzIG5lZWRlZC4KK1RoZSA8bGluayBsaW5rZW5kPSJ2aWRlbyI+dmlkZW8gaW5wdXQ8L2xpbms+IGFuZCA8bGluaworbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgbXVzdCBiZSBzdXBwb3J0ZWQgYnkKK2FsbCB2aWRlbyBjYXB0dXJlIGRldmljZXMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPkltYWdlIEZvcm1hdCBOZWdvdGlhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGUgcmVzdWx0IG9mIGEgY2FwdHVyZSBvcGVyYXRpb24gaXMgZGV0ZXJtaW5lZCBieQorY3JvcHBpbmcgYW5kIGltYWdlIGZvcm1hdCBwYXJhbWV0ZXJzLiBUaGUgZm9ybWVyIHNlbGVjdCBhbiBhcmVhIG9mIHRoZQordmlkZW8gcGljdHVyZSB0byBjYXB0dXJlLCB0aGUgbGF0dGVyIGhvdyBpbWFnZXMgYXJlIHN0b3JlZCBpbiBtZW1vcnksCismaWU7IGluIFJHQiBvciBZVVYgZm9ybWF0LCB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIHBpeGVsIG9yIHdpZHRoIGFuZAoraGVpZ2h0LiBUb2dldGhlciB0aGV5IGFsc28gZGVmaW5lIGhvdyBpbWFnZXMgYXJlIHNjYWxlZCBpbiB0aGUKK3Byb2Nlc3MuPC9wYXJhPgorCisgICAgPHBhcmE+QXMgdXN1YWwgdGhlc2UgcGFyYW1ldGVycyBhcmUgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IHJlc2V0CithdCAmZnVuYy1vcGVuOyB0aW1lIHRvIHBlcm1pdCBVbml4IHRvb2wgY2hhaW5zLCBwcm9ncmFtbWluZyBhIGRldmljZQorYW5kIHRoZW4gcmVhZGluZyBmcm9tIGl0IGFzIGlmIGl0IHdhcyBhIHBsYWluIGZpbGUuIFdlbGwgd3JpdHRlbiBWNEwyCithcHBsaWNhdGlvbnMgZW5zdXJlIHRoZXkgcmVhbGx5IGdldCB3aGF0IHRoZXkgd2FudCwgaW5jbHVkaW5nIGNyb3BwaW5nCithbmQgc2NhbGluZy48L3BhcmE+CisKKyAgICA8cGFyYT5Dcm9wcGluZyBpbml0aWFsaXphdGlvbiBhdCBtaW5pbXVtIHJlcXVpcmVzIHRvIHJlc2V0IHRoZQorcGFyYW1ldGVycyB0byBkZWZhdWx0cy4gQW4gZXhhbXBsZSBpcyBnaXZlbiBpbiA8eHJlZgorbGlua2VuZD0iY3JvcCIgLz4uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgaW1hZ2UgZm9ybWF0IGFwcGxpY2F0aW9ucyBzZXQgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgJnY0bDItZm9ybWF0OyB0bworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+IGFuZCBjYWxsIHRoZQorJlZJRElPQy1HLUZNVDsgaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbAordGhlICZ2NGwyLXBpeC1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD5waXg8L3N0cnVjdGZpZWxkPiBtZW1iZXIgb2YgdGhlCis8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gdW5pb24uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcmVxdWVzdCBkaWZmZXJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLWZvcm1hdDsgYXMgYWJvdmUgYW5kCitpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgdGhlICZ2NGwyLXBpeC1mb3JtYXQ7Cis8c3RydWN0ZmllbGQ+dmJpPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLCBvciBiZXR0ZXIganVzdCBtb2RpZnkgdGhlCityZXN1bHRzIG9mIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwgYW5kIGNhbGwgdGhlCismVklESU9DLVMtRk1UOyBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyBtYXkKK2FkanVzdCB0aGUgcGFyYW1ldGVycyBhbmQgZmluYWxseSByZXR1cm4gdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy48L3BhcmE+CisKKyAgICA8cGFyYT5MaWtlIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiB0aGUKKyZWSURJT0MtVFJZLUZNVDsgaW9jdGwgY2FuIGJlIHVzZWQgdG8gbGVhcm4gYWJvdXQgaGFyZHdhcmUgbGltaXRhdGlvbnMKK3dpdGhvdXQgZGlzYWJsaW5nIEkvTyBvciBwb3NzaWJseSB0aW1lIGNvbnN1bWluZyBoYXJkd2FyZQorcHJlcGFyYXRpb25zLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBjb250ZW50cyBvZiAmdjRsMi1waXgtZm9ybWF0OyBhcmUgZGlzY3Vzc2VkIGluIDx4cmVmCitsaW5rZW5kPSJwaXhmbXQiIC8+LiBTZWUgYWxzbyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUKKzxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwgPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD4gaW9jdGxzIGZvciBkZXRhaWxzLiBWaWRlbworY2FwdHVyZSBkZXZpY2VzIG11c3QgaW1wbGVtZW50IGJvdGggdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwsIGV2ZW4gaWYKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBpZ25vcmVzIGFsbCByZXF1ZXN0cyBhbmQgYWx3YXlzCityZXR1cm5zIGRlZmF1bHQgcGFyYW1ldGVycyBhcyA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy4KKzxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlzIG9wdGlvbmFsLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5SZWFkaW5nIEltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT5BIHZpZGVvIGNhcHR1cmUgZGV2aWNlIG1heSBzdXBwb3J0IHRoZSA8bGluaworbGlua2VuZD0icnciPnJlYWQoKSBmdW5jdGlvbjwvbGluaz4gYW5kL29yIHN0cmVhbWluZyAoPGxpbmsKK2xpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBvciA8bGluaworbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy4gU2VlIDx4cmVmCitsaW5rZW5kPSJpbyIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1jb2RlYy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1jb2RlYy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxNTZkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWNvZGVjLnhtbApAQCAtMCwwICsxLDI2IEBACisgIDx0aXRsZT5Db2RlYyBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxub3RlPgorICAgIDx0aXRsZT5TdXNwZW5kZWQ8L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBpbnRlcmZhY2UgaGFzIGJlZW4gYmUgc3VzcGVuZGVkIGZyb20gdGhlIFY0TDIgQVBJCitpbXBsZW1lbnRlZCBpbiBMaW51eCAyLjYgdW50aWwgd2UgaGF2ZSBtb3JlIGV4cGVyaWVuY2Ugd2l0aCBjb2RlYworZGV2aWNlIGludGVyZmFjZXMuPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+QSBWNEwyIGNvZGVjIGNhbiBjb21wcmVzcywgZGVjb21wcmVzcywgdHJhbnNmb3JtLCBvciBvdGhlcndpc2UKK2NvbnZlcnQgdmlkZW8gZGF0YSBmcm9tIG9uZSBmb3JtYXQgaW50byBhbm90aGVyIGZvcm1hdCwgaW4gbWVtb3J5LgorQXBwbGljYXRpb25zIHNlbmQgZGF0YSB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIGRyaXZlciB0aHJvdWdoIGEKKyZmdW5jLXdyaXRlOyBjYWxsLCBhbmQgcmVjZWl2ZSB0aGUgY29udmVydGVkIGRhdGEgdGhyb3VnaCBhCismZnVuYy1yZWFkOyBjYWxsLiBGb3IgZWZmaWNpZW5jeSBhIGRyaXZlciBtYXkgYWxzbyBzdXBwb3J0IHN0cmVhbWluZworSS9PLjwvcGFyYT4KKworICA8cGFyYT5bdG8gZG9dPC9wYXJhPgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtZWZmZWN0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWVmZmVjdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyNDNiZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWVmZmVjdC54bWwKQEAgLTAsMCArMSwyNSBAQAorICA8dGl0bGU+RWZmZWN0IERldmljZXMgSW50ZXJmYWNlPC90aXRsZT4KKworICA8bm90ZT4KKyAgICA8dGl0bGU+U3VzcGVuZGVkPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaW50ZXJmYWNlIGhhcyBiZWVuIGJlIHN1c3BlbmRlZCBmcm9tIHRoZSBWNEwyIEFQSQoraW1wbGVtZW50ZWQgaW4gTGludXggMi42IHVudGlsIHdlIGhhdmUgbW9yZSBleHBlcmllbmNlIHdpdGggZWZmZWN0CitkZXZpY2UgaW50ZXJmYWNlcy48L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT5BIFY0TDIgdmlkZW8gZWZmZWN0IGRldmljZSBjYW4gZG8gaW1hZ2UgZWZmZWN0cywgZmlsdGVyaW5nLCBvcgorY29tYmluZSB0d28gb3IgbW9yZSBpbWFnZXMgb3IgaW1hZ2Ugc3RyZWFtcy4gRm9yIGV4YW1wbGUgdmlkZW8KK3RyYW5zaXRpb25zIG9yIHdpcGVzLiBBcHBsaWNhdGlvbnMgc2VuZCBkYXRhIHRvIGJlIHByb2Nlc3NlZCBhbmQKK3JlY2VpdmUgdGhlIHJlc3VsdCBkYXRhIGVpdGhlciB3aXRoICZmdW5jLXJlYWQ7IGFuZCAmZnVuYy13cml0ZTsKK2Z1bmN0aW9ucywgb3IgdGhyb3VnaCB0aGUgc3RyZWFtaW5nIEkvTyBtZWNoYW5pc20uPC9wYXJhPgorCisgIDxwYXJhPlt0byBkb108L3BhcmE+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vc2QueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtb3NkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWE2OGEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtb3NkLnhtbApAQCAtMCwwICsxLDE2NCBAQAorICA8dGl0bGU+VmlkZW8gT3V0cHV0IE92ZXJsYXkgSW50ZXJmYWNlPC90aXRsZT4KKyAgPHN1YnRpdGxlPkFsc28ga25vd24gYXMgT24tU2NyZWVuIERpc3BsYXkgKE9TRCk8L3N1YnRpdGxlPgorCisgIDxub3RlPgorICAgIDx0aXRsZT5FeHBlcmltZW50YWw8L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBpcyBhbiA8bGluayBsaW5rZW5kPSJleHBlcmltZW50YWwiPmV4cGVyaW1lbnRhbDwvbGluaz4KK2ludGVyZmFjZSBhbmQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLjwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPlNvbWUgdmlkZW8gb3V0cHV0IGRldmljZXMgY2FuIG92ZXJsYXkgYSBmcmFtZWJ1ZmZlciBpbWFnZSBvbnRvCit0aGUgb3V0Z29pbmcgdmlkZW8gc2lnbmFsLiBBcHBsaWNhdGlvbnMgY2FuIHNldCB1cCBzdWNoIGFuIG92ZXJsYXkKK3VzaW5nIHRoaXMgaW50ZXJmYWNlLCB3aGljaCBib3Jyb3dzIHN0cnVjdHVyZXMgYW5kIGlvY3RscyBvZiB0aGUgPGxpbmsKK2xpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IGludGVyZmFjZS48L3BhcmE+CisKKyAgPHBhcmE+VGhlIE9TRCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHNhbWUgY2hhcmFjdGVyCitzcGVjaWFsIGZpbGUgYXMgdGhlIDxsaW5rIGxpbmtlbmQ9ImNhcHR1cmUiPlZpZGVvIE91dHB1dDwvbGluaz4gZnVuY3Rpb24uCitOb3RlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG9mIHN1Y2ggYSA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IGRldmljZQoraXMgdmlkZW8gY2FwdHVyaW5nIG9yIG91dHB1dC4gVGhlIE9TRCBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlcgorY2FsbGluZyB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSA8d29yZGFzd29yZD5WaWRlbyBPdXRwdXQKK092ZXJsYXk8L3dvcmRhc3dvcmQ+IGludGVyZmFjZSBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1VUUFVUX09WRVJMQVk8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPkZyYW1lYnVmZmVyPC90aXRsZT4KKworICAgIDxwYXJhPkNvbnRyYXJ5IHRvIHRoZSA8d29yZGFzd29yZD5WaWRlbyBPdmVybGF5PC93b3JkYXN3b3JkPgoraW50ZXJmYWNlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3JtYWxseSBpbXBsZW1lbnRlZCBvbiB0aGUgVFYgY2FyZCBhbmQKK25vdCB0aGUgZ3JhcGhpY3MgY2FyZC4gT24gTGludXggaXQgaXMgYWNjZXNzaWJsZSBhcyBhIGZyYW1lYnVmZmVyCitkZXZpY2UgKDxmaWxlbmFtZT4vZGV2L2ZiTjwvZmlsZW5hbWU+KS4gR2l2ZW4gYSBWNEwyIGRldmljZSwKK2FwcGxpY2F0aW9ucyBjYW4gZmluZCB0aGUgY29ycmVzcG9uZGluZyBmcmFtZWJ1ZmZlciBkZXZpY2UgYnkgY2FsbGluZwordGhlICZWSURJT0MtRy1GQlVGOyBpb2N0bC4gSXQgcmV0dXJucywgYW1vbmdzdCBvdGhlciBpbmZvcm1hdGlvbiwgdGhlCitwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmcmFtZWJ1ZmZlciBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5iYXNlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItZnJhbWVidWZmZXI7LiBUaGUKK2ZyYW1lYnVmZmVyIGRldmljZSBpb2N0bCA8Y29uc3RhbnQ+RkJJT0dFVF9GU0NSRUVOSU5GTzwvY29uc3RhbnQ+CityZXR1cm5zIHRoZSBzYW1lIGFkZHJlc3MgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5zbWVtX3N0YXJ0PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIG9mIHN0cnVjdCA8c3RydWN0bmFtZT5mYl9maXhfc2NyZWVuaW5mbzwvc3RydWN0bmFtZT4uIFRoZQorPGNvbnN0YW50PkZCSU9HRVRfRlNDUkVFTklORk88L2NvbnN0YW50PiBpb2N0bCBhbmQgc3RydWN0Cis8c3RydWN0bmFtZT5mYl9maXhfc2NyZWVuaW5mbzwvc3RydWN0bmFtZT4gYXJlIGRlZmluZWQgaW4gdGhlCis8ZmlsZW5hbWU+bGludXgvZmIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBmcmFtZWJ1ZmZlciBkZXBlbmRzIG9uIHRoZQorY3VycmVudCB2aWRlbyBzdGFuZGFyZC4gQSBWNEwyIGRyaXZlciBtYXkgcmVqZWN0IGF0dGVtcHRzIHRvIGNoYW5nZQordGhlIHZpZGVvIHN0YW5kYXJkIChvciBhbnkgb3RoZXIgaW9jdGwgd2hpY2ggd291bGQgaW1wbHkgYSBmcmFtZWJ1ZmZlcgorc2l6ZSBjaGFuZ2UpIHdpdGggYW4gJkVCVVNZOyB1bnRpbCBhbGwgYXBwbGljYXRpb25zIGNsb3NlZCB0aGUKK2ZyYW1lYnVmZmVyIGRldmljZS48L3BhcmE+CisKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDx0aXRsZT5GaW5kaW5nIGEgZnJhbWVidWZmZXIgZGV2aWNlIGZvciBPU0Q8L3RpdGxlPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisjaW5jbHVkZSAmbHQ7bGludXgvZmIuaCZndDsKKworJnY0bDItZnJhbWVidWZmZXI7IGZidWY7Cit1bnNpZ25lZCBpbnQgaTsKK2ludCBmYl9mZDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgVklESU9DX0dfRkJVRiwgJmFtcDtmYnVmKSkgeworCXBlcnJvciAoIlZJRElPQ19HX0ZCVUYiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitmb3IgKGkgPSAwOyBpICZndDsgMzA7ICsraSkgeworCWNoYXIgZGV2X25hbWVbMTZdOworCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBzaTsKKworCXNucHJpbnRmIChkZXZfbmFtZSwgc2l6ZW9mIChkZXZfbmFtZSksICIvZGV2L2ZiJXUiLCBpKTsKKworCWZiX2ZkID0gb3BlbiAoZGV2X25hbWUsIE9fUkRXUik7CisJaWYgKC0xID09IGZiX2ZkKSB7CisJCXN3aXRjaCAoZXJybm8pIHsKKwkJY2FzZSBFTk9FTlQ6IC8qIG5vIHN1Y2ggZmlsZSAqLworCQljYXNlIEVOWElPOiAgLyogbm8gZHJpdmVyICovCisJCQljb250aW51ZTsKKworCQlkZWZhdWx0OgorCQkJcGVycm9yICgib3BlbiIpOworCQkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKworCWlmICgwID09IGlvY3RsIChmYl9mZCwgRkJJT0dFVF9GU0NSRUVOSU5GTywgJmFtcDtzaSkpIHsKKwkJaWYgKHNpLnNtZW1fc3RhcnQgPT0gKHVuc2lnbmVkIGxvbmcpIGZidWYuYmFzZSkKKwkJCWJyZWFrOworCX0gZWxzZSB7CisJCS8qIEFwcGFyZW50bHkgbm90IGEgZnJhbWVidWZmZXIgZGV2aWNlLiAqLworCX0KKworCWNsb3NlIChmYl9mZCk7CisJZmJfZmQgPSAtMTsKK30KKworLyogZmJfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZnJhbWVidWZmZXIgZGV2aWNlCisgICBmb3IgdGhlIHZpZGVvIG91dHB1dCBvdmVybGF5LCBvciAtMSBpZiBubyBkZXZpY2Ugd2FzIGZvdW5kLiAqLworPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+T3ZlcmxheSBXaW5kb3cgYW5kIFNjYWxpbmc8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIG92ZXJsYXkgaXMgY29udHJvbGxlZCBieSBzb3VyY2UgYW5kIHRhcmdldCByZWN0YW5nbGVzLgorVGhlIHNvdXJjZSByZWN0YW5nbGUgc2VsZWN0cyBhIHN1YnNlY3Rpb24gb2YgdGhlIGZyYW1lYnVmZmVyIGltYWdlIHRvCitiZSBvdmVybGFpZCwgdGhlIHRhcmdldCByZWN0YW5nbGUgYW4gYXJlYSBpbiB0aGUgb3V0Z29pbmcgdmlkZW8gc2lnbmFsCit3aGVyZSB0aGUgaW1hZ2Ugd2lsbCBhcHBlYXIuIERyaXZlcnMgbWF5IG9yIG1heSBub3Qgc3VwcG9ydCBzY2FsaW5nLAorYW5kIGFyYml0cmFyeSBzaXplcyBhbmQgcG9zaXRpb25zIG9mIHRoZXNlIHJlY3RhbmdsZXMuIEZ1cnRoZXIgZHJpdmVycworbWF5IHN1cHBvcnQgYW55IChvciBub25lKSBvZiB0aGUgY2xpcHBpbmcvYmxlbmRpbmcgbWV0aG9kcyBkZWZpbmVkIGZvcgordGhlIDxsaW5rIGxpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IGludGVyZmFjZS48L3BhcmE+CisKKyAgICA8cGFyYT5BICZ2NGwyLXdpbmRvdzsgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgc291cmNlIHJlY3RhbmdsZSwKK2l0cyBwb3NpdGlvbiBpbiB0aGUgZnJhbWVidWZmZXIgYW5kIHRoZSBjbGlwcGluZy9ibGVuZGluZyBtZXRob2QgdG8gYmUKK3VzZWQgZm9yIHRoZSBvdmVybGF5LiBUbyBnZXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0Cit0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLWZvcm1hdDsgdG8KKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9PVkVSTEFZPC9jb25zdGFudD4gYW5kIGNhbGwgdGhlCismVklESU9DLUctRk1UOyBpb2N0bC4gVGhlIGRyaXZlciBmaWxscyB0aGUKKzxzdHJ1Y3RuYW1lPnY0bDJfd2luZG93PC9zdHJ1Y3RuYW1lPiBzdWJzdHJ1Y3R1cmUgbmFtZWQKKzxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPi4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZXZlIGEKK3ByZXZpb3VzbHkgcHJvZ3JhbW1lZCBjbGlwcGluZyBsaXN0IG9yIGJpdG1hcC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBwcm9ncmFtIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIGFwcGxpY2F0aW9ucyBzZXQgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgJnY0bDItZm9ybWF0OyB0bworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVk8L2NvbnN0YW50PiwgaW5pdGlhbGl6ZQordGhlIDxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPiBzdWJzdHJ1Y3R1cmUgYW5kIGNhbGwgdGhlCismVklESU9DLVMtRk1UOyBpb2N0bC4gVGhlIGRyaXZlciBhZGp1c3RzIHRoZSBwYXJhbWV0ZXJzIGFnYWluc3QKK2hhcmR3YXJlIGxpbWl0cyBhbmQgcmV0dXJucyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXMKKzxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBkb2VzLiBMaWtlCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4sIHRoZSAmVklESU9DLVRSWS1GTVQ7IGlvY3RsIGNhbiBiZQordXNlZCB0byBsZWFybiBhYm91dCBkcml2ZXIgY2FwYWJpbGl0aWVzIHdpdGhvdXQgYWN0dWFsbHkgY2hhbmdpbmcKK2RyaXZlciBzdGF0ZS4gVW5saWtlIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiB0aGlzIGFsc28gd29ya3MKK2FmdGVyIHRoZSBvdmVybGF5IGhhcyBiZWVuIGVuYWJsZWQuPC9wYXJhPgorCisgICAgPHBhcmE+QSAmdjRsMi1jcm9wOyBkZWZpbmVzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgdGFyZ2V0CityZWN0YW5nbGUuIFRoZSBzY2FsaW5nIGZhY3RvciBvZiB0aGUgb3ZlcmxheSBpcyBpbXBsaWVkIGJ5IHRoZSB3aWR0aAorYW5kIGhlaWdodCBnaXZlbiBpbiAmdjRsMi13aW5kb3c7IGFuZCAmdjRsMi1jcm9wOy4gVGhlIGNyb3BwaW5nIEFQSQorYXBwbGllcyB0byA8d29yZGFzd29yZD5WaWRlbyBPdXRwdXQ8L3dvcmRhc3dvcmQ+IGFuZCA8d29yZGFzd29yZD5WaWRlbworT3V0cHV0IE92ZXJsYXk8L3dvcmRhc3dvcmQ+IGRldmljZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRvCis8d29yZGFzd29yZD5WaWRlbyBDYXB0dXJlPC93b3JkYXN3b3JkPiBhbmQgPHdvcmRhc3dvcmQ+VmlkZW8KK092ZXJsYXk8L3dvcmRhc3dvcmQ+IGRldmljZXMsIG1lcmVseSByZXZlcnNpbmcgdGhlIGRpcmVjdGlvbiBvZiB0aGUKK2RhdGEgZmxvdy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDx4cmVmIGxpbmtlbmQ9ImNyb3AiIC8+LjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5FbmFibGluZyBPdmVybGF5PC90aXRsZT4KKworICAgIDxwYXJhPlRoZXJlIGlzIG5vIFY0TDIgaW9jdGwgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIG92ZXJsYXksCitob3dldmVyIHRoZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2Ugb2YgdGhlIGRyaXZlciBtYXkgc3VwcG9ydCB0aGUKKzxjb25zdGFudD5GQklPQkxBTks8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LW91dHB1dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdXRwdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzNjMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdXRwdXQueG1sCkBAIC0wLDAgKzEsMTExIEBACisgIDx0aXRsZT5WaWRlbyBPdXRwdXQgSW50ZXJmYWNlPC90aXRsZT4KKworICA8cGFyYT5WaWRlbyBvdXRwdXQgZGV2aWNlcyBlbmNvZGUgc3RpbGxzIG9yIGltYWdlIHNlcXVlbmNlcyBhcworYW5hbG9nIHZpZGVvIHNpZ25hbC4gV2l0aCB0aGlzIGludGVyZmFjZSBhcHBsaWNhdGlvbnMgY2FuCitjb250cm9sIHRoZSBlbmNvZGluZyBwcm9jZXNzIGFuZCBtb3ZlIGltYWdlcyBmcm9tIHVzZXIgc3BhY2UgdG8KK3RoZSBkcml2ZXIuPC9wYXJhPgorCisgIDxwYXJhPkNvbnZlbnRpb25hbGx5IFY0TDIgdmlkZW8gb3V0cHV0IGRldmljZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2gKK2NoYXJhY3RlciBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBuYW1lZCA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+CithbmQgPGZpbGVuYW1lPi9kZXYvdmlkZW8wPC9maWxlbmFtZT4gdG8KKzxmaWxlbmFtZT4vZGV2L3ZpZGVvNjM8L2ZpbGVuYW1lPiB3aXRoIG1ham9yIG51bWJlciA4MSBhbmQgbWlub3IKK251bWJlcnMgMCB0byA2My4gPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPiBpcyB0eXBpY2FsbHkgYQorc3ltYm9saWMgbGluayB0byB0aGUgcHJlZmVycmVkIHZpZGVvIGRldmljZS4gTm90ZSB0aGUgc2FtZSBkZXZpY2UKK2ZpbGVzIGFyZSB1c2VkIGZvciB2aWRlbyBjYXB0dXJlIGRldmljZXMuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSB2aWRlbyBvdXRwdXQgaW50ZXJmYWNlIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIEFzIHNlY29uZGFyeSBkZXZpY2UgZnVuY3Rpb25zCit0aGV5IG1heSBhbHNvIHN1cHBvcnQgdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPnJhdyBWQkkKK291dHB1dDwvbGluaz4gKDxjb25zdGFudD5WNEwyX0NBUF9WQklfT1VUUFVUPC9jb25zdGFudD4pIGludGVyZmFjZS4gQXQKK2xlYXN0IG9uZSBvZiB0aGUgcmVhZC93cml0ZSBvciBzdHJlYW1pbmcgSS9PIG1ldGhvZHMgbXVzdCBiZQorc3VwcG9ydGVkLiBNb2R1bGF0b3JzIGFuZCBhdWRpbyBvdXRwdXRzIGFyZSBvcHRpb25hbC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+U3VwcGxlbWVudGFsIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT5WaWRlbyBvdXRwdXQgZGV2aWNlcyBzaGFsbCBzdXBwb3J0IDxsaW5rCitsaW5rZW5kPSJhdWRpbyI+YXVkaW8gb3V0cHV0PC9saW5rPiwgPGxpbmsKK2xpbmtlbmQ9InR1bmVyIj5tb2R1bGF0b3I8L2xpbms+LCA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sczwvbGluaz4sCis8bGluayBsaW5rZW5kPSJjcm9wIj5jcm9wcGluZyBhbmQgc2NhbGluZzwvbGluaz4gYW5kIDxsaW5rCitsaW5rZW5kPSJzdHJlYW1pbmctcGFyIj5zdHJlYW1pbmcgcGFyYW1ldGVyPC9saW5rPiBpb2N0bHMgYXMgbmVlZGVkLgorVGhlIDxsaW5rIGxpbmtlbmQ9InZpZGVvIj52aWRlbyBvdXRwdXQ8L2xpbms+IGFuZCA8bGluaworbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgbXVzdCBiZSBzdXBwb3J0ZWQgYnkKK2FsbCB2aWRlbyBvdXRwdXQgZGV2aWNlcy48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+SW1hZ2UgRm9ybWF0IE5lZ290aWF0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBvdXRwdXQgaXMgZGV0ZXJtaW5lZCBieSBjcm9wcGluZyBhbmQgaW1hZ2UgZm9ybWF0CitwYXJhbWV0ZXJzLiBUaGUgZm9ybWVyIHNlbGVjdCBhbiBhcmVhIG9mIHRoZSB2aWRlbyBwaWN0dXJlIHdoZXJlIHRoZQoraW1hZ2Ugd2lsbCBhcHBlYXIsIHRoZSBsYXR0ZXIgaG93IGltYWdlcyBhcmUgc3RvcmVkIGluIG1lbW9yeSwgJmllOyBpbgorUkdCIG9yIFlVViBmb3JtYXQsIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgb3Igd2lkdGggYW5kIGhlaWdodC4KK1RvZ2V0aGVyIHRoZXkgYWxzbyBkZWZpbmUgaG93IGltYWdlcyBhcmUgc2NhbGVkIGluIHRoZSBwcm9jZXNzLjwvcGFyYT4KKworICAgIDxwYXJhPkFzIHVzdWFsIHRoZXNlIHBhcmFtZXRlcnMgYXJlIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiByZXNldAorYXQgJmZ1bmMtb3BlbjsgdGltZSB0byBwZXJtaXQgVW5peCB0b29sIGNoYWlucywgcHJvZ3JhbW1pbmcgYSBkZXZpY2UKK2FuZCB0aGVuIHdyaXRpbmcgdG8gaXQgYXMgaWYgaXQgd2FzIGEgcGxhaW4gZmlsZS4gV2VsbCB3cml0dGVuIFY0TDIKK2FwcGxpY2F0aW9ucyBlbnN1cmUgdGhleSByZWFsbHkgZ2V0IHdoYXQgdGhleSB3YW50LCBpbmNsdWRpbmcgY3JvcHBpbmcKK2FuZCBzY2FsaW5nLjwvcGFyYT4KKworICAgIDxwYXJhPkNyb3BwaW5nIGluaXRpYWxpemF0aW9uIGF0IG1pbmltdW0gcmVxdWlyZXMgdG8gcmVzZXQgdGhlCitwYXJhbWV0ZXJzIHRvIGRlZmF1bHRzLiBBbiBleGFtcGxlIGlzIGdpdmVuIGluIDx4cmVmCitsaW5rZW5kPSJjcm9wIiAvPi48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCBpbWFnZSBmb3JtYXQgYXBwbGljYXRpb25zIHNldCB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSAmdjRsMi1mb3JtYXQ7IHRvCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiBhbmQgY2FsbCB0aGUKKyZWSURJT0MtRy1GTVQ7IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwKK3RoZSAmdjRsMi1waXgtZm9ybWF0OyA8c3RydWN0ZmllbGQ+cGl4PC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHJlcXVlc3QgZGlmZmVyZW50IHBhcmFtZXRlcnMgYXBwbGljYXRpb25zIHNldCB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSAmdjRsMi1mb3JtYXQ7IGFzIGFib3ZlIGFuZAoraW5pdGlhbGl6ZSBhbGwgZmllbGRzIG9mIHRoZSAmdjRsMi1waXgtZm9ybWF0OworPHN0cnVjdGZpZWxkPnZiaTwvc3RydWN0ZmllbGQ+IG1lbWJlciBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPiB1bmlvbiwgb3IgYmV0dGVyIGp1c3QgbW9kaWZ5IHRoZQorcmVzdWx0cyBvZiA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4sIGFuZCBjYWxsIHRoZQorJlZJRElPQy1TLUZNVDsgaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgbWF5CithZGp1c3QgdGhlIHBhcmFtZXRlcnMgYW5kIGZpbmFsbHkgcmV0dXJuIHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcworPGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+IGRvZXMuPC9wYXJhPgorCisgICAgPHBhcmE+TGlrZSA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gdGhlCismVklESU9DLVRSWS1GTVQ7IGlvY3RsIGNhbiBiZSB1c2VkIHRvIGxlYXJuIGFib3V0IGhhcmR3YXJlIGxpbWl0YXRpb25zCit3aXRob3V0IGRpc2FibGluZyBJL08gb3IgcG9zc2libHkgdGltZSBjb25zdW1pbmcgaGFyZHdhcmUKK3ByZXBhcmF0aW9ucy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgY29udGVudHMgb2YgJnY0bDItcGl4LWZvcm1hdDsgYXJlIGRpc2N1c3NlZCBpbiA8eHJlZgorbGlua2VuZD0icGl4Zm10IiAvPi4gU2VlIGFsc28gdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4sIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PgorYW5kIDxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlvY3RscyBmb3IgZGV0YWlscy4gVmlkZW8KK291dHB1dCBkZXZpY2VzIG11c3QgaW1wbGVtZW50IGJvdGggdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwsIGV2ZW4gaWYKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBpZ25vcmVzIGFsbCByZXF1ZXN0cyBhbmQgYWx3YXlzCityZXR1cm5zIGRlZmF1bHQgcGFyYW1ldGVycyBhcyA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy4KKzxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlzIG9wdGlvbmFsLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5Xcml0aW5nIEltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT5BIHZpZGVvIG91dHB1dCBkZXZpY2UgbWF5IHN1cHBvcnQgdGhlIDxsaW5rCitsaW5rZW5kPSJydyI+d3JpdGUoKSBmdW5jdGlvbjwvbGluaz4gYW5kL29yIHN0cmVhbWluZyAoPGxpbmsKK2xpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBvciA8bGluaworbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy4gU2VlIDx4cmVmCitsaW5rZW5kPSJpbyIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdmVybGF5LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LW92ZXJsYXkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNTEzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdmVybGF5LnhtbApAQCAtMCwwICsxLDM3OSBAQAorICA8dGl0bGU+VmlkZW8gT3ZlcmxheSBJbnRlcmZhY2U8L3RpdGxlPgorICA8c3VidGl0bGU+QWxzbyBrbm93biBhcyBGcmFtZWJ1ZmZlciBPdmVybGF5IG9yIFByZXZpZXdpbmc8L3N1YnRpdGxlPgorCisgIDxwYXJhPlZpZGVvIG92ZXJsYXkgZGV2aWNlcyBoYXZlIHRoZSBhYmlsaXR5IHRvIGdlbmxvY2sgKFRWLSl2aWRlbworaW50byB0aGUgKFZHQS0pdmlkZW8gc2lnbmFsIG9mIGEgZ3JhcGhpY3MgY2FyZCwgb3IgdG8gc3RvcmUgY2FwdHVyZWQKK2ltYWdlcyBkaXJlY3RseSBpbiB2aWRlbyBtZW1vcnkgb2YgYSBncmFwaGljcyBjYXJkLCB0eXBpY2FsbHkgd2l0aAorY2xpcHBpbmcuIFRoaXMgY2FuIGJlIGNvbnNpZGVyYWJsZSBtb3JlIGVmZmljaWVudCB0aGFuIGNhcHR1cmluZworaW1hZ2VzIGFuZCBkaXNwbGF5aW5nIHRoZW0gYnkgb3RoZXIgbWVhbnMuIEluIHRoZSBvbGQgZGF5cyB3aGVuIG9ubHkKK251Y2xlYXIgcG93ZXIgcGxhbnRzIG5lZWRlZCBjb29saW5nIHRvd2VycyB0aGlzIHVzZWQgdG8gYmUgdGhlIG9ubHkKK3dheSB0byBwdXQgbGl2ZSB2aWRlbyBpbnRvIGEgd2luZG93LjwvcGFyYT4KKworICA8cGFyYT5WaWRlbyBvdmVybGF5IGRldmljZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHNhbWUgY2hhcmFjdGVyCitzcGVjaWFsIGZpbGVzIGFzIDxsaW5rIGxpbmtlbmQ9ImNhcHR1cmUiPnZpZGVvIGNhcHR1cmU8L2xpbms+IGRldmljZXMuCitOb3RlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG9mIGEgPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPiBkZXZpY2UKK2lzIHZpZGVvIGNhcHR1cmluZy4gVGhlIG92ZXJsYXkgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIKK2NhbGxpbmcgdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBkcml2ZXIgbWF5IHN1cHBvcnQgc2ltdWx0YW5lb3VzIG92ZXJsYXkgYW5kIGNhcHR1cmluZwordXNpbmcgdGhlIHJlYWQvd3JpdGUgYW5kIHN0cmVhbWluZyBJL08gbWV0aG9kcy4gSWYgc28sIG9wZXJhdGlvbiBhdAordGhlIG5vbWluYWwgZnJhbWUgcmF0ZSBvZiB0aGUgdmlkZW8gc3RhbmRhcmQgaXMgbm90IGd1YXJhbnRlZWQuIEZyYW1lcworbWF5IGJlIGRpcmVjdGVkIGF3YXkgZnJvbSBvdmVybGF5IHRvIGNhcHR1cmUsIG9yIG9uZSBmaWVsZCBtYXkgYmUgdXNlZAorZm9yIG92ZXJsYXkgYW5kIHRoZSBvdGhlciBmb3IgY2FwdHVyZSBpZiB0aGUgY2FwdHVyZSBwYXJhbWV0ZXJzIHBlcm1pdAordGhpcy48L3BhcmE+CisKKyAgPHBhcmE+QXBwbGljYXRpb25zIHNob3VsZCB1c2UgZGlmZmVyZW50IGZpbGUgZGVzY3JpcHRvcnMgZm9yCitjYXB0dXJpbmcgYW5kIG92ZXJsYXkuIFRoaXMgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRyaXZlcnMgY2FwYWJsZQorb2Ygc2ltdWx0YW5lb3VzIGNhcHR1cmluZyBhbmQgb3ZlcmxheS4gT3B0aW9uYWxseSB0aGVzZSBkcml2ZXJzIG1heQorYWxzbyBwZXJtaXQgY2FwdHVyaW5nIGFuZCBvdmVybGF5IHdpdGggYSBzaW5nbGUgZmlsZSBkZXNjcmlwdG9yIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIFY0TCBhbmQgZWFybGllciB2ZXJzaW9ucyBvZiBWNEwyLjxmb290bm90ZT4KKwk8cGFyYT5BIGNvbW1vbiBhcHBsaWNhdGlvbiBvZiB0d28gZmlsZSBkZXNjcmlwdG9ycyBpcyB0aGUKK1hGcmVlODYgPGxpbmsgbGlua2VuZD0ieHZpZGVvIj5Ydi9WNEw8L2xpbms+IGludGVyZmFjZSBkcml2ZXIgYW5kCithIFY0TDIgYXBwbGljYXRpb24uIFdoaWxlIHRoZSBYIHNlcnZlciBjb250cm9scyB2aWRlbyBvdmVybGF5LCB0aGUKK2FwcGxpY2F0aW9uIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBtZW1vcnkgbWFwcGluZyBhbmQgRE1BLjwvcGFyYT4KKwk8cGFyYT5JbiB0aGUgb3BpbmlvbiBvZiB0aGUgZGVzaWduZXJzIG9mIHRoaXMgQVBJLCBubyBkcml2ZXIKK3dyaXRlciB0YWtpbmcgdGhlIGVmZm9ydHMgdG8gc3VwcG9ydCBzaW11bHRhbmVvdXMgY2FwdHVyaW5nIGFuZAorb3ZlcmxheSB3aWxsIHJlc3RyaWN0IHRoaXMgYWJpbGl0eSBieSByZXF1aXJpbmcgYSBzaW5nbGUgZmlsZQorZGVzY3JpcHRvciwgYXMgaW4gVjRMIGFuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIuIE1ha2luZyB0aGlzCitvcHRpb25hbCBtZWFucyBhcHBsaWNhdGlvbnMgZGVwZW5kaW5nIG9uIHR3byBmaWxlIGRlc2NyaXB0b3JzIG5lZWQKK2JhY2t1cCByb3V0aW5lcyB0byBiZSBjb21wYXRpYmxlIHdpdGggYWxsIGRyaXZlcnMsIHdoaWNoIGlzCitjb25zaWRlcmFibGUgbW9yZSB3b3JrIHRoYW4gdXNpbmcgdHdvIGZkcyBpbiBhcHBsaWNhdGlvbnMgd2hpY2ggZG8KK25vdC4gQWxzbyB0d28gZmQncyBmaXQgdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBvbmUgZmlsZSBkZXNjcmlwdG9yIGZvcgorZWFjaCBsb2dpY2FsIHN0cmVhbS4gSGVuY2UgYXMgYSBjb21wbGV4aXR5IHRyYWRlLW9mZiBkcml2ZXJzCis8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IHN1cHBvcnQgdHdvIGZpbGUgZGVzY3JpcHRvcnMgYW5kCis8ZW1waGFzaXM+bWF5PC9lbXBoYXNpcz4gc3VwcG9ydCBzaW5nbGUgZmQgb3BlcmF0aW9uLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSB2aWRlbyBvdmVybGF5IGludGVyZmFjZSBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4gVGhlIG92ZXJsYXkgSS9PIG1ldGhvZCBzcGVjaWZpZWQKK2JlbG93IG11c3QgYmUgc3VwcG9ydGVkLiBUdW5lcnMgYW5kIGF1ZGlvIGlucHV0cyBhcmUgb3B0aW9uYWwuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlN1cHBsZW1lbnRhbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHBhcmE+VmlkZW8gb3ZlcmxheSBkZXZpY2VzIHNoYWxsIHN1cHBvcnQgPGxpbmsKK2xpbmtlbmQ9ImF1ZGlvIj5hdWRpbyBpbnB1dDwvbGluaz4sIDxsaW5rCitsaW5rZW5kPSJ0dW5lciI+dHVuZXI8L2xpbms+LCA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sczwvbGluaz4sCis8bGluayBsaW5rZW5kPSJjcm9wIj5jcm9wcGluZyBhbmQgc2NhbGluZzwvbGluaz4gYW5kIDxsaW5rCitsaW5rZW5kPSJzdHJlYW1pbmctcGFyIj5zdHJlYW1pbmcgcGFyYW1ldGVyPC9saW5rPiBpb2N0bHMgYXMgbmVlZGVkLgorVGhlIDxsaW5rIGxpbmtlbmQ9InZpZGVvIj52aWRlbyBpbnB1dDwvbGluaz4gYW5kIDxsaW5rCitsaW5rZW5kPSJzdGFuZGFyZCI+dmlkZW8gc3RhbmRhcmQ8L2xpbms+IGlvY3RscyBtdXN0IGJlIHN1cHBvcnRlZCBieQorYWxsIHZpZGVvIG92ZXJsYXkgZGV2aWNlcy48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgPHBhcmE+QmVmb3JlIG92ZXJsYXkgY2FuIGNvbW1lbmNlIGFwcGxpY2F0aW9ucyBtdXN0IHByb2dyYW0gdGhlCitkcml2ZXIgd2l0aCBmcmFtZSBidWZmZXIgcGFyYW1ldGVycywgbmFtZWx5IHRoZSBhZGRyZXNzIGFuZCBzaXplIG9mCit0aGUgZnJhbWUgYnVmZmVyIGFuZCB0aGUgaW1hZ2UgZm9ybWF0LCBmb3IgZXhhbXBsZSBSR0IgNTo2OjUuIFRoZQorJlZJRElPQy1HLUZCVUY7IGFuZCAmVklESU9DLVMtRkJVRjsgaW9jdGxzIGFyZSBhdmFpbGFibGUgdG8gZ2V0CithbmQgc2V0IHRoZXNlIHBhcmFtZXRlcnMsIHJlc3BlY3RpdmVseS4gVGhlCis8Y29uc3RhbnQ+VklESU9DX1NfRkJVRjwvY29uc3RhbnQ+IGlvY3RsIGlzIHByaXZpbGVnZWQgYmVjYXVzZSBpdAorYWxsb3dzIHRvIHNldCB1cCBETUEgaW50byBwaHlzaWNhbCBtZW1vcnksIGJ5cGFzc2luZyB0aGUgbWVtb3J5Citwcm90ZWN0aW9uIG1lY2hhbmlzbXMgb2YgdGhlIGtlcm5lbC4gT25seSB0aGUgc3VwZXJ1c2VyIGNhbiBjaGFuZ2UgdGhlCitmcmFtZSBidWZmZXIgYWRkcmVzcyBhbmQgc2l6ZS4gVXNlcnMgYXJlIG5vdCBzdXBwb3NlZCB0byBydW4gVFYKK2FwcGxpY2F0aW9ucyBhcyByb290IG9yIHdpdGggU1VJRCBiaXQgc2V0LiBBIHNtYWxsIGhlbHBlciBhcHBsaWNhdGlvbgord2l0aCBzdWl0YWJsZSBwcml2aWxlZ2VzIHNob3VsZCBxdWVyeSB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGFuZCBwcm9ncmFtCit0aGUgVjRMMiBkcml2ZXIgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUuPC9wYXJhPgorCisgICAgPHBhcmE+U29tZSBkZXZpY2VzIGFkZCB0aGUgdmlkZW8gb3ZlcmxheSB0byB0aGUgb3V0cHV0IHNpZ25hbAorb2YgdGhlIGdyYXBoaWNzIGNhcmQuIEluIHRoaXMgY2FzZSB0aGUgZnJhbWUgYnVmZmVyIGlzIG5vdCBtb2RpZmllZCBieQordGhlIHZpZGVvIGRldmljZSwgYW5kIHRoZSBmcmFtZSBidWZmZXIgYWRkcmVzcyBhbmQgcGl4ZWwgZm9ybWF0IGFyZQorbm90IG5lZWRlZCBieSB0aGUgZHJpdmVyLiBUaGUgPGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PiBpb2N0bAoraXMgbm90IHByaXZpbGVnZWQuIEFuIGFwcGxpY2F0aW9uIGNhbiBjaGVjayBmb3IgdGhpcyB0eXBlIG9mIGRldmljZSBieQorY2FsbGluZyB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0ZCVUY8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5BIGRyaXZlciBtYXkgc3VwcG9ydCBhbnkgKG9yIG5vbmUpIG9mIGZpdmUgY2xpcHBpbmcvYmxlbmRpbmcKK21ldGhvZHM6PG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkNocm9tYS1rZXlpbmcgZGlzcGxheXMgdGhlIG92ZXJsYWlkIGltYWdlIG9ubHkgd2hlcmUKK3BpeGVscyBpbiB0aGUgcHJpbWFyeSBncmFwaGljcyBzdXJmYWNlIGFzc3VtZSBhIGNlcnRhaW4gY29sb3IuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QSBiaXRtYXAgY2FuIGJlIHNwZWNpZmllZCB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcwordG8gYSBwaXhlbCBpbiB0aGUgb3ZlcmxhaWQgaW1hZ2UuIFdoZW4gdGhlIGJpdCBpcyBzZXQsIHRoZQorY29ycmVzcG9uZGluZyB2aWRlbyBwaXhlbCBpcyBkaXNwbGF5ZWQsIG90aGVyd2lzZSBhIHBpeGVsIG9mIHRoZQorZ3JhcGhpY3Mgc3VyZmFjZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BIGxpc3Qgb2YgY2xpcHBpbmcgcmVjdGFuZ2xlcyBjYW4gYmUgc3BlY2lmaWVkLiBJbgordGhlc2UgcmVnaW9ucyA8ZW1waGFzaXM+bm88L2VtcGhhc2lzPiB2aWRlbyBpcyBkaXNwbGF5ZWQsIHNvIHRoZQorZ3JhcGhpY3Mgc3VyZmFjZSBjYW4gYmUgc2VlbiBoZXJlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBmcmFtZWJ1ZmZlciBoYXMgYW4gYWxwaGEgY2hhbm5lbCB0aGF0IGNhbiBiZSB1c2VkCit0byBjbGlwIG9yIGJsZW5kIHRoZSBmcmFtZWJ1ZmZlciB3aXRoIHRoZSB2aWRlby48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BIGdsb2JhbCBhbHBoYSB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIHRvIGJsZW5kIHRoZQorZnJhbWVidWZmZXIgY29udGVudHMgd2l0aCB2aWRlbyBpbWFnZXMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gc2ltdWx0YW5lb3VzIGNhcHR1cmluZyBhbmQgb3ZlcmxheSBpcyBzdXBwb3J0ZWQgYW5kCit0aGUgaGFyZHdhcmUgcHJvaGliaXRzIGRpZmZlcmVudCBpbWFnZSBhbmQgZnJhbWUgYnVmZmVyIGZvcm1hdHMsIHRoZQorZm9ybWF0IHJlcXVlc3RlZCBmaXJzdCB0YWtlcyBwcmVjZWRlbmNlLiBUaGUgYXR0ZW1wdCB0byBjYXB0dXJlCisoJlZJRElPQy1TLUZNVDspIG9yIG92ZXJsYXkgKCZWSURJT0MtUy1GQlVGOykgbWF5IGZhaWwgd2l0aCBhbgorJkVCVVNZOyBvciByZXR1cm4gYWNjb3JkaW5nbHkgbW9kaWZpZWQgcGFyYW1ldGVycy4uPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPk92ZXJsYXkgV2luZG93PC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBvdmVybGFpZCBpbWFnZSBpcyBkZXRlcm1pbmVkIGJ5IGNyb3BwaW5nIGFuZCBvdmVybGF5Cit3aW5kb3cgcGFyYW1ldGVycy4gVGhlIGZvcm1lciBzZWxlY3QgYW4gYXJlYSBvZiB0aGUgdmlkZW8gcGljdHVyZSB0bworY2FwdHVyZSwgdGhlIGxhdHRlciBob3cgaW1hZ2VzIGFyZSBvdmVybGFpZCBhbmQgY2xpcHBlZC4gQ3JvcHBpbmcKK2luaXRpYWxpemF0aW9uIGF0IG1pbmltdW0gcmVxdWlyZXMgdG8gcmVzZXQgdGhlIHBhcmFtZXRlcnMgdG8KK2RlZmF1bHRzLiBBbiBleGFtcGxlIGlzIGdpdmVuIGluIDx4cmVmIGxpbmtlbmQ9ImNyb3AiIC8+LjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBvdmVybGF5IHdpbmRvdyBpcyBkZXNjcmliZWQgYnkgYSAmdjRsMi13aW5kb3c7LiBJdAorZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UsIGl0cyBwb3NpdGlvbiBvdmVyIHRoZSBncmFwaGljcyBzdXJmYWNlCithbmQgdGhlIGNsaXBwaW5nIHRvIGJlIGFwcGxpZWQuIFRvIGdldCB0aGUgY3VycmVudCBwYXJhbWV0ZXJzCithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKyZ2NGwyLWZvcm1hdDsgdG8gPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+IGFuZAorY2FsbCB0aGUgJlZJRElPQy1HLUZNVDsgaW9jdGwuIFRoZSBkcml2ZXIgZmlsbHMgdGhlCis8c3RydWN0bmFtZT52NGwyX3dpbmRvdzwvc3RydWN0bmFtZT4gc3Vic3RydWN0dXJlIG5hbWVkCis8c3RydWN0ZmllbGQ+d2luPC9zdHJ1Y3RmaWVsZD4uIEl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSBhCitwcmV2aW91c2x5IHByb2dyYW1tZWQgY2xpcHBpbmcgbGlzdCBvciBiaXRtYXAuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcHJvZ3JhbSB0aGUgb3ZlcmxheSB3aW5kb3cgYXBwbGljYXRpb25zIHNldCB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSAmdjRsMi1mb3JtYXQ7IHRvCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD4sIGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+d2luPC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIGFuZCBjYWxsIHRoZQorJlZJRElPQy1TLUZNVDsgaW9jdGwuIFRoZSBkcml2ZXIgYWRqdXN0cyB0aGUgcGFyYW1ldGVycyBhZ2FpbnN0CitoYXJkd2FyZSBsaW1pdHMgYW5kIHJldHVybnMgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy4gTGlrZQorPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+LCB0aGUgJlZJRElPQy1UUlktRk1UOyBpb2N0bCBjYW4gYmUKK3VzZWQgdG8gbGVhcm4gYWJvdXQgZHJpdmVyIGNhcGFiaWxpdGllcyB3aXRob3V0IGFjdHVhbGx5IGNoYW5naW5nCitkcml2ZXIgc3RhdGUuIFVubGlrZSA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gdGhpcyBhbHNvIHdvcmtzCithZnRlciB0aGUgb3ZlcmxheSBoYXMgYmVlbiBlbmFibGVkLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBzY2FsaW5nIGZhY3RvciBvZiB0aGUgb3ZlcmxhaWQgaW1hZ2UgaXMgaW1wbGllZCBieSB0aGUKK3dpZHRoIGFuZCBoZWlnaHQgZ2l2ZW4gaW4gJnY0bDItd2luZG93OyBhbmQgdGhlIHNpemUgb2YgdGhlIGNyb3BwaW5nCityZWN0YW5nbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSA8eHJlZiBsaW5rZW5kPSJjcm9wIiAvPi48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHNpbXVsdGFuZW91cyBjYXB0dXJpbmcgYW5kIG92ZXJsYXkgaXMgc3VwcG9ydGVkIGFuZAordGhlIGhhcmR3YXJlIHByb2hpYml0cyBkaWZmZXJlbnQgaW1hZ2UgYW5kIHdpbmRvdyBzaXplcywgdGhlIHNpemUKK3JlcXVlc3RlZCBmaXJzdCB0YWtlcyBwcmVjZWRlbmNlLiBUaGUgYXR0ZW1wdCB0byBjYXB0dXJlIG9yIG92ZXJsYXkgYXMKK3dlbGwgKCZWSURJT0MtUy1GTVQ7KSBtYXkgZmFpbCB3aXRoIGFuICZFQlVTWTsgb3IgcmV0dXJuIGFjY29yZGluZ2x5Cittb2RpZmllZCBwYXJhbWV0ZXJzLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi13aW5kb3ciPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3dpbmRvdzwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItcmVjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnc8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgd2luZG93IHJlbGF0aXZlIHRvIHRoZQordG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUgZnJhbWUgYnVmZmVyIGRlZmluZWQgd2l0aCAmVklESU9DLVMtRkJVRjsuIFRoZQord2luZG93IGNhbiBleHRlbmQgdGhlIGZyYW1lIGJ1ZmZlciB3aWR0aCBhbmQgaGVpZ2h0LCB0aGUKKzxzdHJ1Y3RmaWVsZD54PC9zdHJ1Y3RmaWVsZD4gYW5kIDxzdHJ1Y3RmaWVsZD55PC9zdHJ1Y3RmaWVsZD4KK2Nvb3JkaW5hdGVzIGNhbiBiZSBuZWdhdGl2ZSwgYW5kIGl0IGNhbiBsaWUgY29tcGxldGVseSBvdXRzaWRlIHRoZQorZnJhbWUgYnVmZmVyLiBUaGUgZHJpdmVyIGNsaXBzIHRoZSB3aW5kb3cgYWNjb3JkaW5nbHksIG9yIGlmIHRoYXQgaXMKK25vdCBwb3NzaWJsZSwgbW9kaWZpZXMgaXRzIHNpemUgYW5kL29yIHBvc2l0aW9uLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1maWVsZDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXBwbGljYXRpb25zIHNldCB0aGlzIGZpZWxkIHRvIGRldGVybWluZSB3aGljaAordmlkZW8gZmllbGQgc2hhbGwgYmUgb3ZlcmxhaWQsIHR5cGljYWxseSBvbmUgb2YKKzxjb25zdGFudD5WNEwyX0ZJRUxEX0FOWTwvY29uc3RhbnQ+ICgwKSwKKzxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfRklFTERfQk9UVE9NPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50Pi4gRHJpdmVycyBtYXkgaGF2ZSB0byBjaG9vc2UKK2EgZGlmZmVyZW50IGZpZWxkIG9yZGVyIGFuZCByZXR1cm4gdGhlIGFjdHVhbCBzZXR0aW5nIGhlcmUuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNocm9tYWtleTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gY2hyb21hLWtleWluZyBoYXMgYmVlbiBuZWdvdGlhdGVkIHdpdGgKKyZWSURJT0MtUy1GQlVGOyBhcHBsaWNhdGlvbnMgc2V0IHRoaXMgZmllbGQgdG8gdGhlIGRlc2lyZWQgcGl4ZWwgdmFsdWUKK2ZvciB0aGUgY2hyb21hIGtleS4gVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZQorZnJhbWVidWZmZXIgKCZ2NGwyLWZyYW1lYnVmZmVyOworPHN0cnVjdGZpZWxkPmZtdC5waXhlbGZvcm1hdDwvc3RydWN0ZmllbGQ+IGZpZWxkKSwgd2l0aCBieXRlcyBpbiBob3N0CitvcmRlci4gRS4mbmJzcDtnLiBmb3IgPGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1CR1IzMiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+PC9saW5rPgordGhlIHZhbHVlIHNob3VsZCBiZSAweFJSR0dCQiBvbiBhIGxpdHRsZSBlbmRpYW4sIDB4QkJHR1JSIG9uIGEgYmlnCitlbmRpYW4gaG9zdC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItY2xpcDsgKjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2xpcHM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5XaGVuIGNocm9tYS1rZXlpbmcgaGFzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgorYmVlbiBuZWdvdGlhdGVkIGFuZCAmVklESU9DLUctRkJVRjsgaW5kaWNhdGVkIHRoaXMgY2FwYWJpbGl0eSwKK2FwcGxpY2F0aW9ucyBjYW4gc2V0IHRoaXMgZmllbGQgdG8gcG9pbnQgdG8gYW4gYXJyYXkgb2YKK2NsaXBwaW5nIHJlY3RhbmdsZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+TGlrZSB0aGUgd2luZG93IGNvb3JkaW5hdGVzCis8c3RydWN0ZmllbGQ+dzwvc3RydWN0ZmllbGQ+LCBjbGlwcGluZyByZWN0YW5nbGVzIGFyZSBkZWZpbmVkIHJlbGF0aXZlCit0byB0aGUgdG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUgZnJhbWUgYnVmZmVyLiBIb3dldmVyIGNsaXBwaW5nCityZWN0YW5nbGVzIG11c3Qgbm90IGV4dGVuZCB0aGUgZnJhbWUgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHQsIGFuZCB0aGV5CittdXN0IG5vdCBvdmVybGFwLiBJZiBwb3NzaWJsZSBhcHBsaWNhdGlvbnMgc2hvdWxkIG1lcmdlIGFkamFjZW50CityZWN0YW5nbGVzLiBXaGV0aGVyIHRoaXMgbXVzdCBjcmVhdGUgeC15IG9yIHkteCBiYW5kcywgb3IgdGhlIG9yZGVyIG9mCityZWN0YW5nbGVzLCBpcyBub3QgZGVmaW5lZC4gV2hlbiBjbGlwIGxpc3RzIGFyZSBub3Qgc3VwcG9ydGVkIHRoZQorZHJpdmVyIGlnbm9yZXMgdGhpcyBmaWVsZC4gSXRzIGNvbnRlbnRzIGFmdGVyIGNhbGxpbmcgJlZJRElPQy1TLUZNVDsKK2FyZSB1bmRlZmluZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jbGlwY291bnQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5XaGVuIHRoZSBhcHBsaWNhdGlvbiBzZXQgdGhlCis8c3RydWN0ZmllbGQ+Y2xpcHM8L3N0cnVjdGZpZWxkPiBmaWVsZCwgdGhpcyBmaWVsZCBtdXN0IGNvbnRhaW4gdGhlCitudW1iZXIgb2YgY2xpcHBpbmcgcmVjdGFuZ2xlcyBpbiB0aGUgbGlzdC4gV2hlbiBjbGlwIGxpc3RzIGFyZSBub3QKK3N1cHBvcnRlZCB0aGUgZHJpdmVyIGlnbm9yZXMgdGhpcyBmaWVsZCwgaXRzIGNvbnRlbnRzIGFmdGVyIGNhbGxpbmcKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhcmUgdW5kZWZpbmVkLiBXaGVuIGNsaXAgbGlzdHMgYXJlCitzdXBwb3J0ZWQgYnV0IG5vIGNsaXBwaW5nIGlzIGRlc2lyZWQgdGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0bworemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dm9pZCAqPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5iaXRtYXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5XaGVuIGNocm9tYS1rZXlpbmcgaGFzCis8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYmVlbiBuZWdvdGlhdGVkIGFuZCAmVklESU9DLUctRkJVRjsgaW5kaWNhdGVkCit0aGlzIGNhcGFiaWxpdHksIGFwcGxpY2F0aW9ucyBjYW4gc2V0IHRoaXMgZmllbGQgdG8gcG9pbnQgdG8gYQorY2xpcHBpbmcgYml0IG1hc2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+PHBhcmE+SXQgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplCithcyB0aGUgd2luZG93LCA8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPncuaGVpZ2h0PC9zdHJ1Y3RmaWVsZD4uIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgcGl4ZWwKK2luIHRoZSBvdmVybGFpZCBpbWFnZSwgd2hpY2ggaXMgZGlzcGxheWVkIG9ubHkgd2hlbiB0aGUgYml0IGlzCis8ZW1waGFzaXM+c2V0PC9lbXBoYXNpcz4uIFBpeGVsIGNvb3JkaW5hdGVzIHRyYW5zbGF0ZSB0byBiaXRzIGxpa2U6Cis8cHJvZ3JhbWxpc3Rpbmc+CisoKF9fdTggKikgPHN0cnVjdGZpZWxkPmJpdG1hcDwvc3RydWN0ZmllbGQ+KVs8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+ICogeSArIHggLyA4XSAmYW1wOyAoMSAmbHQ7Jmx0OyAoeCAmYW1wOyA3KSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT53aGVyZSA8c3RydWN0ZmllbGQ+MDwvc3RydWN0ZmllbGQ+ICZsZTsgeCAmbHQ7Cis8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+MDwvc3RydWN0ZmllbGQ+ICZsZTsKK3kgJmx0OzxzdHJ1Y3RmaWVsZD53LmhlaWdodDwvc3RydWN0ZmllbGQ+Ljxmb290bm90ZT4KKwkJICA8cGFyYT5TaG91bGQgd2UgcmVxdWlyZQorCSAgICAgIDxzdHJ1Y3RmaWVsZD53LndpZHRoPC9zdHJ1Y3RmaWVsZD4gdG8gYmUgYSBtdWx0aXBsZSBvZgorCSAgICAgIGVpZ2h0PzwvcGFyYT4KKwkJPC9mb290bm90ZT48L3BhcmE+PHBhcmE+V2hlbiBhIGNsaXBwaW5nCitiaXQgbWFzayBpcyBub3Qgc3VwcG9ydGVkIHRoZSBkcml2ZXIgaWdub3JlcyB0aGlzIGZpZWxkLCBpdHMgY29udGVudHMKK2FmdGVyIGNhbGxpbmcgJlZJRElPQy1TLUZNVDsgYXJlIHVuZGVmaW5lZC4gV2hlbiBhIGJpdCBtYXNrIGlzIHN1cHBvcnRlZAorYnV0IG5vIGNsaXBwaW5nIGlzIGRlc2lyZWQgdGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0bworPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50Pi48L3BhcmE+PHBhcmE+QXBwbGljYXRpb25zIG5lZWQgbm90IGNyZWF0ZSBhCitjbGlwIGxpc3Qgb3IgYml0IG1hc2suIFdoZW4gdGhleSBwYXNzIGJvdGgsIG9yIGRlc3BpdGUgbmVnb3RpYXRpbmcKK2Nocm9tYS1rZXlpbmcsIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuIFJlZ2FyZGxlc3Mgb2YgdGhlIGNob3NlbgorbWV0aG9kLCB0aGUgY2xpcHBpbmcgYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSBtYXkgYmUgbGltaXRlZCBpbgorcXVhbnRpdHkgb3IgcXVhbGl0eS4gVGhlIHJlc3VsdHMgd2hlbiB0aGVzZSBsaW1pdHMgYXJlIGV4Y2VlZGVkIGFyZQordW5kZWZpbmVkLjxmb290bm90ZT4KKwkJICA8cGFyYT5XaGVuIHRoZSBpbWFnZSBpcyB3cml0dGVuIGludG8gZnJhbWUgYnVmZmVyCittZW1vcnkgaXQgd2lsbCBiZSB1bmRlc2lyYWJsZSBpZiB0aGUgZHJpdmVyIGNsaXBzIG91dCBsZXNzIHBpeGVscwordGhhbiBleHBlY3RlZCwgYmVjYXVzZSB0aGUgYXBwbGljYXRpb24gYW5kIGdyYXBoaWNzIHN5c3RlbSBhcmUgbm90Cithd2FyZSB0aGVzZSByZWdpb25zIG5lZWQgdG8gYmUgcmVmcmVzaGVkLiBUaGUgZHJpdmVyIHNob3VsZCBjbGlwIG91dAorbW9yZSBwaXhlbHMgb3Igbm90IHdyaXRlIHRoZSBpbWFnZSBhdCBhbGwuPC9wYXJhPgorCQk8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Z2xvYmFsX2FscGhhPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGdsb2JhbCBhbHBoYSB2YWx1ZSB1c2VkIHRvIGJsZW5kIHRoZQorZnJhbWVidWZmZXIgd2l0aCB2aWRlbyBpbWFnZXMsIGlmIGdsb2JhbCBhbHBoYSBibGVuZGluZyBoYXMgYmVlbgorbmVnb3RpYXRlZCAoPGNvbnN0YW50PlY0TDJfRkJVRl9GTEFHX0dMT0JBTF9BTFBIQTwvY29uc3RhbnQ+LCBzZWUKKyZWSURJT0MtUy1GQlVGOywgPHhyZWYgbGlua2VuZD0iZnJhbWVidWZmZXItZmxhZ3MiIC8+KS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5Ob3RlIHRoaXMgZmllbGQgd2FzIGFkZGVkIGluIExpbnV4IDIuNi4yMywgZXh0ZW5kaW5nIHRoZSBzdHJ1Y3R1cmUuIEhvd2V2ZXIKK3RoZSA8bGluayBsaW5rZW5kPSJ2aWRpb2MtZy1mbXQiPlZJRElPQ19HL1MvVFJZX0ZNVDwvbGluaz4gaW9jdGxzLAord2hpY2ggdGFrZSBhIHBvaW50ZXIgdG8gYSA8bGluaworbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPiBwYXJlbnQgc3RydWN0dXJlIHdpdGggcGFkZGluZworYnl0ZXMgYXQgdGhlIGVuZCwgYXJlIG5vdCBhZmZlY3RlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItY2xpcCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfY2xpcDwvc3RydWN0bmFtZT48Zm9vdG5vdGU+CisJICA8cGFyYT5UaGUgWCBXaW5kb3cgc3lzdGVtIGRlZmluZXMgInJlZ2lvbnMiIHdoaWNoIGFyZQordmVjdG9ycyBvZiBzdHJ1Y3QgQm94UmVjIHsgc2hvcnQgeDEsIHkxLCB4MiwgeTI7IH0gd2l0aCB3aWR0aCA9IHgyIC0KK3gxIGFuZCBoZWlnaHQgPSB5MiAtIHkxLCBzbyBvbmUgY2Fubm90IHBhc3MgWDExIGNsaXAgbGlzdHMKK2RpcmVjdGx5LjwvcGFyYT4KKwk8L2Zvb3Rub3RlPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1yZWN0OzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Yzwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvb3JkaW5hdGVzIG9mIHRoZSBjbGlwcGluZyByZWN0YW5nbGUsIHJlbGF0aXZlIHRvCit0aGUgdG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUgZnJhbWUgYnVmZmVyLiBPbmx5IHdpbmRvdyBwaXhlbHMKKzxlbXBoYXNpcz5vdXRzaWRlPC9lbXBoYXNpcz4gYWxsIGNsaXBwaW5nIHJlY3RhbmdsZXMgYXJlCitkaXNwbGF5ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWNsaXA7ICo8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5leHQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Qb2ludGVyIHRvIHRoZSBuZXh0IGNsaXBwaW5nIHJlY3RhbmdsZSwgTlVMTCB3aGVuCit0aGlzIGlzIHRoZSBsYXN0IHJlY3RhbmdsZS4gRHJpdmVycyBpZ25vcmUgdGhpcyBmaWVsZCwgaXQgY2Fubm90IGJlCit1c2VkIHRvIHBhc3MgYSBsaW5rZWQgbGlzdCBvZiBjbGlwcGluZyByZWN0YW5nbGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gTkIgZm9yIGVhc2llciByZWFkaW5nIHRoaXMgdGFibGUgaXMgZHVwbGljYXRlZAorICAgIGluIHRoZSB2aWRpb2MtY3JvcGNhcCBjaGFwdGVyLi0tPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXJlY3QiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3JlY3Q8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5sZWZ0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIHRvcCwgbGVmdCBjb3JuZXIgb2YgdGhlCityZWN0YW5nbGUsIGluIHBpeGVscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRvcDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlZlcnRpY2FsIG9mZnNldCBvZiB0aGUgdG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUKK3JlY3RhbmdsZSwgaW4gcGl4ZWxzLiBPZmZzZXRzIGluY3JlYXNlIHRvIHRoZSByaWdodCBhbmQgZG93bi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2lkdGggb2YgdGhlIHJlY3RhbmdsZSwgaW4gcGl4ZWxzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3MzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUsIGluIHBpeGVscy4gV2lkdGggYW5kCitoZWlnaHQgY2Fubm90IGJlIG5lZ2F0aXZlLCB0aGUgZmllbGRzIGFyZSBzaWduZWQgZm9yIGh5c3RlcmljYWwKK3JlYXNvbnMuIDwhLS0gdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tIG9uIDIyIE9jdCAyMDAyIHN1YmplY3QKKyJSZTpbVjRMXVtwYXRjaGVzIV0gUmU6djRsMi9rZXJuZWwtMi41IiAtLT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+RW5hYmxpbmcgT3ZlcmxheTwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBzdGFydCBvciBzdG9wIHRoZSBmcmFtZSBidWZmZXIgb3ZlcmxheSBhcHBsaWNhdGlvbnMgY2FsbAordGhlICZWSURJT0MtT1ZFUkxBWTsgaW9jdGwuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYWRpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYWRpby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhYTkwYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXJhZGlvLnhtbApAQCAtMCwwICsxLDU3IEBACisgIDx0aXRsZT5SYWRpbyBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlRoaXMgaW50ZXJmYWNlIGlzIGludGVuZGVkIGZvciBBTSBhbmQgRk0gKGFuYWxvZykgcmFkaW8KK3JlY2VpdmVycyBhbmQgdHJhbnNtaXR0ZXJzLjwvcGFyYT4KKworICA8cGFyYT5Db252ZW50aW9uYWxseSBWNEwyIHJhZGlvIGRldmljZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2gKK2NoYXJhY3RlciBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBuYW1lZCA8ZmlsZW5hbWU+L2Rldi9yYWRpbzwvZmlsZW5hbWU+CithbmQgPGZpbGVuYW1lPi9kZXYvcmFkaW8wPC9maWxlbmFtZT4gdG8KKzxmaWxlbmFtZT4vZGV2L3JhZGlvNjM8L2ZpbGVuYW1lPiB3aXRoIG1ham9yIG51bWJlciA4MSBhbmQgbWlub3IKK251bWJlcnMgNjQgdG8gMTI3LjwvcGFyYT4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgIDxwYXJhPkRldmljZXMgc3VwcG9ydGluZyB0aGUgcmFkaW8gaW50ZXJmYWNlIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0NBUF9SQURJTzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfQ0FQX1RVTkVSPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0NBUF9NT0RVTEFUT1I8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIE90aGVyIGNvbWJpbmF0aW9ucyBvZgorY2FwYWJpbGl0eSBmbGFncyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5TdXBwbGVtZW50YWwgRnVuY3Rpb25zPC90aXRsZT4KKworICAgIDxwYXJhPlJhZGlvIGRldmljZXMgY2FuIHN1cHBvcnQgPGxpbmsKK2xpbmtlbmQ9ImNvbnRyb2wiPmNvbnRyb2xzPC9saW5rPiwgYW5kIG11c3Qgc3VwcG9ydCB0aGUgPGxpbmsKK2xpbmtlbmQ9InR1bmVyIj50dW5lciBvciBtb2R1bGF0b3I8L2xpbms+IGlvY3Rscy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGV5IGRvIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyBpbnB1dCBvciBvdXRwdXQsIGF1ZGlvIGlucHV0CitvciBvdXRwdXQsIHZpZGVvIHN0YW5kYXJkLCBjcm9wcGluZyBhbmQgc2NhbGluZywgY29tcHJlc3Npb24gYW5kCitzdHJlYW1pbmcgcGFyYW1ldGVyLCBvciBvdmVybGF5IGlvY3Rscy4gQWxsIG90aGVyIGlvY3RscyBhbmQgSS9PCittZXRob2RzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlByb2dyYW1taW5nPC90aXRsZT4KKworICAgIDxwYXJhPlJhZGlvIGRldmljZXMgbWF5IGhhdmUgYSBjb3VwbGUgYXVkaW8gY29udHJvbHMgKGFzIGRpc2N1c3NlZAoraW4gPHhyZWYgbGlua2VuZD0iY29udHJvbCIgLz4pIHN1Y2ggYXMgYSB2b2x1bWUgY29udHJvbCwgcG9zc2libHkgY3VzdG9tCitjb250cm9scy4gRnVydGhlciBhbGwgcmFkaW8gZGV2aWNlcyBoYXZlIG9uZSB0dW5lciBvciBtb2R1bGF0b3IgKHRoZXNlIGFyZQorZGlzY3Vzc2VkIGluIDx4cmVmIGxpbmtlbmQ9InR1bmVyIiAvPikgd2l0aCBpbmRleCBudW1iZXIgemVybyB0byBzZWxlY3QKK3RoZSByYWRpbyBmcmVxdWVuY3kgYW5kIHRvIGRldGVybWluZSBpZiBhIG1vbmF1cmFsIG9yIEZNIHN0ZXJlbworcHJvZ3JhbSBpcyByZWNlaXZlZC9lbWl0dGVkLiBEcml2ZXJzIHN3aXRjaCBhdXRvbWF0aWNhbGx5IGJldHdlZW4gQU0gYW5kIEZNCitkZXBlbmRpbmcgb24gdGhlIHNlbGVjdGVkIGZyZXF1ZW5jeS4gVGhlICZWSURJT0MtRy1UVU5FUjsgb3IKKyZWSURJT0MtRy1NT0RVTEFUT1I7IGlvY3RsCityZXBvcnRzIHRoZSBzdXBwb3J0ZWQgZnJlcXVlbmN5IHJhbmdlLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtcmF3LXZiaS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYXctdmJpLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWE3MGJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtcmF3LXZiaS54bWwKQEAgLTAsMCArMSwzNDcgQEAKKyAgPHRpdGxlPlJhdyBWQkkgRGF0YSBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlZCSSBpcyBhbiBhYmJyZXZpYXRpb24gb2YgVmVydGljYWwgQmxhbmtpbmcgSW50ZXJ2YWwsIGEgZ2FwCitpbiB0aGUgc2VxdWVuY2Ugb2YgbGluZXMgb2YgYW4gYW5hbG9nIHZpZGVvIHNpZ25hbC4gRHVyaW5nIFZCSQorbm8gcGljdHVyZSBpbmZvcm1hdGlvbiBpcyB0cmFuc21pdHRlZCwgYWxsb3dpbmcgc29tZSB0aW1lIHdoaWxlIHRoZQorZWxlY3Ryb24gYmVhbSBvZiBhIGNhdGhvZGUgcmF5IHR1YmUgVFYgcmV0dXJucyB0byB0aGUgdG9wIG9mIHRoZQorc2NyZWVuLiBVc2luZyBhbiBvc2NpbGxvc2NvcGUgeW91IHdpbGwgZmluZCBoZXJlIHRoZSB2ZXJ0aWNhbAorc3luY2hyb25pemF0aW9uIHB1bHNlcyBhbmQgc2hvcnQgZGF0YSBwYWNrYWdlcyBBU0sKK21vZHVsYXRlZDxmb290bm90ZT48cGFyYT5BU0s6IEFtcGxpdHVkZS1TaGlmdCBLZXlpbmcuIEEgaGlnaCBzaWduYWwKK2xldmVsIHJlcHJlc2VudHMgYSAnMScgYml0LCBhIGxvdyBsZXZlbCBhICcwJyBiaXQuPC9wYXJhPjwvZm9vdG5vdGU+CitvbnRvIHRoZSB2aWRlbyBzaWduYWwuIFRoZXNlIGFyZSB0cmFuc21pc3Npb25zIG9mIHNlcnZpY2VzIHN1Y2ggYXMKK1RlbGV0ZXh0IG9yIENsb3NlZCBDYXB0aW9uLjwvcGFyYT4KKworICA8cGFyYT5TdWJqZWN0IG9mIHRoaXMgaW50ZXJmYWNlIHR5cGUgaXMgcmF3IFZCSSBkYXRhLCBhcyBzYW1wbGVkIG9mZgorYSB2aWRlbyBzaWduYWwsIG9yIHRvIGJlIGFkZGVkIHRvIGEgc2lnbmFsIGZvciBvdXRwdXQuCitUaGUgZGF0YSBmb3JtYXQgaXMgc2ltaWxhciB0byB1bmNvbXByZXNzZWQgdmlkZW8gaW1hZ2VzLCBhIG51bWJlciBvZgorbGluZXMgdGltZXMgYSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgbGluZSwgd2UgY2FsbCB0aGlzIGEgVkJJIGltYWdlLjwvcGFyYT4KKworICA8cGFyYT5Db252ZW50aW9uYWxseSBWNEwyIFZCSSBkZXZpY2VzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIGNoYXJhY3RlcgorZGV2aWNlIHNwZWNpYWwgZmlsZXMgbmFtZWQgPGZpbGVuYW1lPi9kZXYvdmJpPC9maWxlbmFtZT4gYW5kCis8ZmlsZW5hbWU+L2Rldi92YmkwPC9maWxlbmFtZT4gdG8gPGZpbGVuYW1lPi9kZXYvdmJpMzE8L2ZpbGVuYW1lPiB3aXRoCittYWpvciBudW1iZXIgODEgYW5kIG1pbm9yIG51bWJlcnMgMjI0IHRvIDI1NS4KKzxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+IGlzIHR5cGljYWxseSBhIHN5bWJvbGljIGxpbmsgdG8gdGhlCitwcmVmZXJyZWQgVkJJIGRldmljZS4gVGhpcyBjb252ZW50aW9uIGFwcGxpZXMgdG8gYm90aCBpbnB1dCBhbmQgb3V0cHV0CitkZXZpY2VzLjwvcGFyYT4KKworICA8cGFyYT5UbyBhZGRyZXNzIHRoZSBwcm9ibGVtcyBvZiBmaW5kaW5nIHJlbGF0ZWQgdmlkZW8gYW5kIFZCSQorZGV2aWNlcyBWQkkgY2FwdHVyaW5nIGFuZCBvdXRwdXQgaXMgYWxzbyBhdmFpbGFibGUgYXMgZGV2aWNlIGZ1bmN0aW9uCit1bmRlciA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+LiBUbyBjYXB0dXJlIG9yIG91dHB1dCByYXcgVkJJCitkYXRhIHdpdGggdGhlc2UgZGV2aWNlcyBhcHBsaWNhdGlvbnMgbXVzdCBjYWxsIHRoZSAmVklESU9DLVMtRk1UOworaW9jdGwuIEFjY2Vzc2VkIGFzIDxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+LCByYXcgVkJJIGNhcHR1cmluZworb3Igb3V0cHV0IGlzIHRoZSBkZWZhdWx0IGRldmljZSBmdW5jdGlvbi48L3BhcmE+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5EZXZpY2VzIHN1cHBvcnRpbmcgdGhlIHJhdyBWQkkgY2FwdHVyaW5nIG9yIG91dHB1dCBBUEkgc2V0Cit0aGUgPGNvbnN0YW50PlY0TDJfQ0FQX1ZCSV9DQVBUVVJFPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0NBUF9WQklfT1VUUFVUPC9jb25zdGFudD4gZmxhZ3MsIHJlc3BlY3RpdmVseSwgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4gQXQgbGVhc3Qgb25lIG9mIHRoZQorcmVhZC93cml0ZSwgc3RyZWFtaW5nIG9yIGFzeW5jaHJvbm91cyBJL08gbWV0aG9kcyBtdXN0IGJlCitzdXBwb3J0ZWQuIFZCSSBkZXZpY2VzIG1heSBvciBtYXkgbm90IGhhdmUgYSB0dW5lciBvciBtb2R1bGF0b3IuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlN1cHBsZW1lbnRhbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WQkkgZGV2aWNlcyBzaGFsbCBzdXBwb3J0IDxsaW5rIGxpbmtlbmQ9InZpZGVvIj52aWRlbworaW5wdXQgb3Igb3V0cHV0PC9saW5rPiwgPGxpbmsgbGlua2VuZD0idHVuZXIiPnR1bmVyIG9yCittb2R1bGF0b3I8L2xpbms+LCBhbmQgPGxpbmsgbGlua2VuZD0iY29udHJvbCI+Y29udHJvbHM8L2xpbms+IGlvY3RscworYXMgbmVlZGVkLiBUaGUgPGxpbmsgbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgcHJvdmlkZQoraW5mb3JtYXRpb24gdml0YWwgdG8gcHJvZ3JhbSBhIFZCSSBkZXZpY2UsIHRoZXJlZm9yZSBtdXN0IGJlCitzdXBwb3J0ZWQuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlJhdyBWQkkgRm9ybWF0IE5lZ290aWF0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+UmF3IFZCSSBzYW1wbGluZyBhYmlsaXRpZXMgY2FuIHZhcnksIGluIHBhcnRpY3VsYXIgdGhlCitzYW1wbGluZyBmcmVxdWVuY3kuIFRvIHByb3Blcmx5IGludGVycHJldCB0aGUgZGF0YSBWNEwyIHNwZWNpZmllcyBhbgoraW9jdGwgdG8gcXVlcnkgdGhlIHNhbXBsaW5nIHBhcmFtZXRlcnMuIE1vcmVvdmVyLCB0byBhbGxvdyBmb3Igc29tZQorZmxleGliaWxpdHkgYXBwbGljYXRpb25zIGNhbiBhbHNvIHN1Z2dlc3QgZGlmZmVyZW50IHBhcmFtZXRlcnMuPC9wYXJhPgorCisgICAgICA8cGFyYT5BcyB1c3VhbCB0aGVzZSBwYXJhbWV0ZXJzIGFyZSA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4KK3Jlc2V0IGF0ICZmdW5jLW9wZW47IHRpbWUgdG8gcGVybWl0IFVuaXggdG9vbCBjaGFpbnMsIHByb2dyYW1taW5nIGEKK2RldmljZSBhbmQgdGhlbiByZWFkaW5nIGZyb20gaXQgYXMgaWYgaXQgd2FzIGEgcGxhaW4gZmlsZS4gV2VsbAord3JpdHRlbiBWNEwyIGFwcGxpY2F0aW9ucyBzaG91bGQgYWx3YXlzIGVuc3VyZSB0aGV5IHJlYWxseSBnZXQgd2hhdAordGhleSB3YW50LCByZXF1ZXN0aW5nIHJlYXNvbmFibGUgcGFyYW1ldGVycyBhbmQgdGhlbiBjaGVja2luZyBpZiB0aGUKK2FjdHVhbCBwYXJhbWV0ZXJzIGFyZSBzdWl0YWJsZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBjdXJyZW50IHJhdyBWQkkgY2FwdHVyZSBwYXJhbWV0ZXJzCithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKyZ2NGwyLWZvcm1hdDsgdG8gPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+LCBhbmQgY2FsbCB0aGUKKyZWSURJT0MtRy1GTVQ7IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwKK3RoZSAmdjRsMi12YmktZm9ybWF0OyA8c3RydWN0ZmllbGQ+dmJpPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gcmVxdWVzdCBkaWZmZXJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLWZvcm1hdDsgYXMgYWJvdmUgYW5kCitpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgdGhlICZ2NGwyLXZiaS1mb3JtYXQ7Cis8c3RydWN0ZmllbGQ+dmJpPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLCBvciBiZXR0ZXIganVzdCBtb2RpZnkgdGhlCityZXN1bHRzIG9mIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwgYW5kIGNhbGwgdGhlCismVklESU9DLVMtRk1UOyBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyByZXR1cm4KK2FuICZFSU5WQUw7IG9ubHkgd2hlbiB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhcmUgYW1iaWd1b3VzLCBvdGhlcndpc2UKK3RoZXkgbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0ZXMgYW5kCityZXR1cm4gdGhlIGFjdHVhbCBwYXJhbWV0ZXJzLiBXaGVuIHRoZSBkcml2ZXIgYWxsb2NhdGVzIHJlc291cmNlcyBhdAordGhpcyBwb2ludCwgaXQgbWF5IHJldHVybiBhbiAmRUJVU1k7IHRvIGluZGljYXRlIHRoZSByZXR1cm5lZAorcGFyYW1ldGVycyBhcmUgdmFsaWQgYnV0IHRoZSByZXF1aXJlZCByZXNvdXJjZXMgYXJlIGN1cnJlbnRseSBub3QKK2F2YWlsYWJsZS4gVGhhdCBtYXkgaGFwcGVuIGZvciBpbnN0YW5jZSB3aGVuIHRoZSB2aWRlbyBhbmQgVkJJIGFyZWFzCit0byBjYXB0dXJlIHdvdWxkIG92ZXJsYXAsIG9yIHdoZW4gdGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBvcGVucworYW5kIGFub3RoZXIgcHJvY2VzcyBhbHJlYWR5IHJlcXVlc3RlZCBWQkkgY2FwdHVyaW5nIG9yIG91dHB1dC4gQW55d2F5LAorYXBwbGljYXRpb25zIG11c3QgZXhwZWN0IG90aGVyIHJlc291cmNlIGFsbG9jYXRpb24gcG9pbnRzIHdoaWNoIG1heQorcmV0dXJuIDxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT4sIGF0IHRoZSAmVklESU9DLVNUUkVBTU9OOyBpb2N0bAorYW5kIHRoZSBmaXJzdCByZWFkKCksIHdyaXRlKCkgYW5kIHNlbGVjdCgpIGNhbGwuPC9wYXJhPgorCisgICAgICA8cGFyYT5WQkkgZGV2aWNlcyBtdXN0IGltcGxlbWVudCBib3RoIHRoZQorPGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsLCBldmVuIGlmCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaWdub3JlcyBhbGwgcmVxdWVzdHMgYW5kIGFsd2F5cworcmV0dXJucyBkZWZhdWx0IHBhcmFtZXRlcnMgYXMgPGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+IGRvZXMuCis8Y29uc3RhbnQ+VklESU9DX1RSWV9GTVQ8L2NvbnN0YW50PiBpcyBvcHRpb25hbC48L3BhcmE+CisKKyAgICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi12YmktZm9ybWF0Ij4KKwk8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfdmJpX2Zvcm1hdDwvc3RydWN0bmFtZT48L3RpdGxlPgorCTx0Z3JvdXAgY29scz0iMyI+CisJICAmY3Mtc3RyOworCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2FtcGxpbmdfcmF0ZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+U2FtcGxlcyBwZXIgc2Vjb25kLCBpLiZuYnNwO2UuIHVuaXQgMSBIei48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT48cGFyYT5Ib3Jpem9udGFsIG9mZnNldCBvZiB0aGUgVkJJIGltYWdlLAorcmVsYXRpdmUgdG8gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgbGluZSBzeW5jaHJvbml6YXRpb24gcHVsc2UgYW5kCitjb3VudGVkIGluIHNhbXBsZXM6IFRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIFZCSSBpbWFnZSB3aWxsIGJlIGxvY2F0ZWQKKzxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPiAvCis8c3RydWN0ZmllbGQ+c2FtcGxpbmdfcmF0ZTwvc3RydWN0ZmllbGQ+IHNlY29uZHMgZm9sbG93aW5nIHRoZSBsZWFkaW5nCitlZGdlLiBTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJ2YmktaHN5bmMiIC8+LjwvcGFyYT48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2FtcGxlc19wZXJfbGluZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNhbXBsZV9mb3JtYXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPkRlZmluZXMgdGhlIHNhbXBsZSBmb3JtYXQgYXMgaW4gPHhyZWYKK2xpbmtlbmQ9InBpeGZtdCIgLz4sIGEgZm91ci1jaGFyYWN0ZXItY29kZS48Zm9vdG5vdGU+CisJCSAgICA8cGFyYT5BIGZldyBkZXZpY2VzIG1heSBiZSB1bmFibGUgdG8KK3NhbXBsZSBWQkkgZGF0YSBhdCBhbGwgYnV0IGNhbiBleHRlbmQgdGhlIHZpZGVvIGNhcHR1cmUgd2luZG93IHRvIHRoZQorVkJJIHJlZ2lvbi48L3BhcmE+CisJCSAgPC9mb290bm90ZT4gVXN1YWxseSB0aGlzIGlzCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0dSRVk8L2NvbnN0YW50PiwgaS4mbmJzcDtlLiBlYWNoIHNhbXBsZQorY29uc2lzdHMgb2YgOCBiaXRzIHdpdGggbG93ZXIgdmFsdWVzIG9yaWVudGVkIHRvd2FyZHMgdGhlIGJsYWNrIGxldmVsLgorRG8gbm90IGFzc3VtZSBhbnkgb3RoZXIgY29ycmVsYXRpb24gb2YgdmFsdWVzIHdpdGggdGhlIHNpZ25hbCBsZXZlbC4KK0ZvciBleGFtcGxlLCB0aGUgTVNCIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGluZGljYXRlIGlmIHRoZSBzaWduYWwgaXMKKydoaWdoJyBvciAnbG93JyBiZWNhdXNlIDEyOCBtYXkgbm90IGJlIHRoZSBtZWFuIHZhbHVlIG9mIHRoZQorc2lnbmFsLiBEcml2ZXJzIHNoYWxsIG5vdCBjb252ZXJ0IHRoZSBzYW1wbGUgZm9ybWF0IGJ5IHNvZnR3YXJlLjwvcGFyYT48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RhcnQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CisJICAgICAgPGVudHJ5PlRoaXMgaXMgdGhlIHNjYW5uaW5nIHN5c3RlbSBsaW5lIG51bWJlcgorYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBWQkkgaW1hZ2UsIG9mIHRoZSBmaXJzdCBhbmQgdGhlCitzZWNvbmQgZmllbGQgcmVzcGVjdGl2ZWx5LiBTZWUgPHhyZWYgbGlua2VuZD0idmJpLTUyNSIgLz4gYW5kCis8eHJlZiBsaW5rZW5kPSJ2YmktNjI1IiAvPiBmb3IgdmFsaWQgdmFsdWVzLiBWQkkgaW5wdXQgZHJpdmVycyBjYW4KK3JldHVybiBzdGFydCB2YWx1ZXMgMCBpZiB0aGUgaGFyZHdhcmUgY2Fubm90IHJlbGlhYmxlIGlkZW50aWZ5CitzY2FubmluZyBsaW5lcywgVkJJIGFjcXVpc2l0aW9uIG1heSBub3QgcmVxdWlyZSB0aGlzCitpbmZvcm1hdGlvbi48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CisJICAgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQKK2ZpZWxkIGltYWdlLCByZXNwZWN0aXZlbHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+PHBhcmE+RHJpdmVycyBzaG91bGQgYmUgYXMKK2ZsZXhpYmlsaXR5IGFzIHBvc3NpYmxlLiBGb3IgZXhhbXBsZSwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIGV4dGVuZCBvcgorbW92ZSB0aGUgVkJJIGNhcHR1cmUgd2luZG93IGRvd24gdG8gdGhlIHBpY3R1cmUgYXJlYSwgaW1wbGVtZW50aW5nIGEKKydmdWxsIGZpZWxkIG1vZGUnIHRvIGNhcHR1cmUgZGF0YSBzZXJ2aWNlIHRyYW5zbWlzc2lvbnMgZW1iZWRkZWQgaW4KK3RoZSBwaWN0dXJlLjwvcGFyYT48cGFyYT5BbiBhcHBsaWNhdGlvbiBjYW4gc2V0IHRoZSBmaXJzdCBvciBzZWNvbmQKKzxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IHZhbHVlIHRvIHplcm8gaWYgbm8gZGF0YSBpcyByZXF1aXJlZAorZnJvbSB0aGUgcmVzcGVjdGl2ZSBmaWVsZDsgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD5bMV0gaWYgdGhlCitzY2FubmluZyBzeXN0ZW0gaXMgcHJvZ3Jlc3NpdmUsICZpZTsgbm90IGludGVybGFjZWQuIFRoZQorY29ycmVzcG9uZGluZyBzdGFydCB2YWx1ZSBzaGFsbCBiZSBpZ25vcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQKK2RyaXZlci4gQW55d2F5LCBkcml2ZXJzIG1heSBub3Qgc3VwcG9ydCBzaW5nbGUgZmllbGQgY2FwdHVyaW5nIGFuZAorcmV0dXJuIGJvdGggY291bnQgdmFsdWVzIG5vbi16ZXJvLjwvcGFyYT48cGFyYT5Cb3RoCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgc2V0IHRvIHplcm8sIG9yIGxpbmUgbnVtYmVycworb3V0c2lkZSB0aGUgYm91bmRzIGRlcGljdGVkIGluIDx4cmVmIGxpbmtlbmQ9InZiaS01MjUiIC8+IGFuZCA8eHJlZgorCQkgICAgbGlua2VuZD0idmJpLTYyNSIgLz4sIG9yIGEgZmllbGQgaW1hZ2UgY292ZXJpbmcKK2xpbmVzIG9mIHR3byBmaWVsZHMsIGFyZSBpbnZhbGlkIGFuZCBzaGFsbCBub3QgYmUgcmV0dXJuZWQgYnkgdGhlCitkcml2ZXIuPC9wYXJhPjxwYXJhPlRvIGluaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5zdGFydDwvc3RydWN0ZmllbGQ+CithbmQgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGRzLCBhcHBsaWNhdGlvbnMgbXVzdCBmaXJzdAorZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkIHNlbGVjdGlvbi4gVGhlICZ2NGwyLXN0ZC1pZDsgb3IKK3RoZSA8c3RydWN0ZmllbGQ+ZnJhbWVsaW5lczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLXN0YW5kYXJkOyBjYW4KK2JlIGV2YWx1YXRlZCBmb3IgdGhpcyBwdXJwb3NlLjwvcGFyYT48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPGVudHJ5PlNlZSA8eHJlZiBsaW5rZW5kPSJ2YmlmbXQtZmxhZ3MiIC8+IGJlbG93LiBDdXJyZW50bHkKK29ubHkgZHJpdmVycyBzZXQgZmxhZ3MsIGFwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvCit6ZXJvLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzJdPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+VGhpcyBhcnJheSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuCitEcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgbXVzdCBzZXQgaXQgdG8gemVyby48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InZiaWZtdC1mbGFncyI+CisJPHRpdGxlPlJhdyBWQkkgRm9ybWF0IEZsYWdzPC90aXRsZT4KKwk8dGdyb3VwIGNvbHM9IjMiPgorCSAgJmNzLWRlZjsKKwkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1ZCSV9VTlNZTkM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPlRoaXMgZmxhZyBpbmRpY2F0ZXMgaGFyZHdhcmUgd2hpY2ggZG9lcyBub3QKK3Byb3Blcmx5IGRpc3Rpbmd1aXNoIGJldHdlZW4gZmllbGRzLiBOb3JtYWxseSB0aGUgVkJJIGltYWdlIHN0b3JlcyB0aGUKK2ZpcnN0IGZpZWxkIChsb3dlciBzY2FubmluZyBsaW5lIG51bWJlcnMpIGZpcnN0IGluIG1lbW9yeS4gVGhpcyBtYXkgYmUKK2EgdG9wIG9yIGJvdHRvbSBmaWVsZCBkZXBlbmRpbmcgb24gdGhlIHZpZGVvIHN0YW5kYXJkLiBXaGVuIHRoaXMgZmxhZworaXMgc2V0IHRoZSBmaXJzdCBvciBzZWNvbmQgZmllbGQgbWF5IGJlIHN0b3JlZCBmaXJzdCwgaG93ZXZlciB0aGUKK2ZpZWxkcyBhcmUgc3RpbGwgaW4gY29ycmVjdCB0ZW1wb3JhbCBvcmRlciB3aXRoIHRoZSBvbGRlciBmaWVsZCBmaXJzdAoraW4gbWVtb3J5Ljxmb290bm90ZT4KKwkJICA8cGFyYT5Nb3N0IFZCSSBzZXJ2aWNlcyB0cmFuc21pdCBvbiBib3RoIGZpZWxkcywgYnV0Citzb21lIGhhdmUgZGlmZmVyZW50IHNlbWFudGljcyBkZXBlbmRpbmcgb24gdGhlIGZpZWxkIG51bWJlci4gVGhlc2UKK2Nhbm5vdCBiZSByZWxpYWJsZSBkZWNvZGVkIG9yIGVuY29kZWQgd2hlbgorPGNvbnN0YW50PlY0TDJfVkJJX1VOU1lOQzwvY29uc3RhbnQ+IGlzIHNldC48L3BhcmE+CisJCTwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9WQklfSU5URVJMQUNFRDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+QnkgZGVmYXVsdCB0aGUgdHdvIGZpZWxkIGltYWdlcyB3aWxsIGJlIHBhc3NlZAorc2VxdWVudGlhbGx5OyBhbGwgbGluZXMgb2YgdGhlIGZpcnN0IGZpZWxkIGZvbGxvd2VkIGJ5IGFsbCBsaW5lcyBvZgordGhlIHNlY29uZCBmaWVsZCAoY29tcGFyZSA8eHJlZiBsaW5rZW5kPSJmaWVsZC1vcmRlciIgLz4KKzxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9UQjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfRklFTERfU0VRX0JUPC9jb25zdGFudD4sIHdoZXRoZXIgdGhlIHRvcCBvciBib3R0b20KK2ZpZWxkIGlzIGZpcnN0IGluIG1lbW9yeSBkZXBlbmRzIG9uIHRoZSB2aWRlbyBzdGFuZGFyZCkuIFdoZW4gdGhpcworZmxhZyBpcyBzZXQsIHRoZSB0d28gZmllbGRzIGFyZSBpbnRlcmxhY2VkIChjZi4KKzxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50PikuIFRoZSBmaXJzdCBsaW5lIG9mIHRoZQorZmlyc3QgZmllbGQgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNlY29uZCBmaWVsZCwgdGhlbiB0aGUKK3R3byBzZWNvbmQgbGluZXMsIGFuZCBzbyBvbi4gU3VjaCBhIGxheW91dCBtYXkgYmUgbmVjZXNzYXJ5IHdoZW4gdGhlCitoYXJkd2FyZSBoYXMgYmVlbiBwcm9ncmFtbWVkIHRvIGNhcHR1cmUgb3Igb3V0cHV0IGludGVybGFjZWQgdmlkZW8KK2ltYWdlcyBhbmQgaXMgdW5hYmxlIHRvIHNlcGFyYXRlIHRoZSBmaWVsZHMgZm9yIFZCSSBjYXB0dXJpbmcgYXQKK3RoZSBzYW1lIHRpbWUuIEZvciBzaW1wbGljaXR5IHNldHRpbmcgdGhpcyBmbGFnIGltcGxpZXMgdGhhdCBib3RoCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgYXJlIGVxdWFsIGFuZCBub24temVyby48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8ZmlndXJlIGlkPSJ2YmktaHN5bmMiPgorCTx0aXRsZT5MaW5lIHN5bmNocm9uaXphdGlvbjwvdGl0bGU+CisJPG1lZGlhb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9InZiaV9oc3luYy5wZGYiIGZvcm1hdD0iUFMiIC8+CisJICA8L2ltYWdlb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9InZiaV9oc3luYy5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDx0ZXh0b2JqZWN0PgorCSAgICA8cGhyYXNlPkxpbmUgc3luY2hyb25pemF0aW9uIGRpYWdyYW08L3BocmFzZT4KKwkgIDwvdGV4dG9iamVjdD4KKwk8L21lZGlhb2JqZWN0PgorICAgICAgPC9maWd1cmU+CisKKyAgICAgIDxmaWd1cmUgaWQ9InZiaS01MjUiPgorCTx0aXRsZT5JVFUtUiA1MjUgbGluZSBudW1iZXJpbmcgKE0vTlRTQyBhbmQgTS9QQUwpPC90aXRsZT4KKwk8bWVkaWFvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0idmJpXzUyNS5wZGYiIGZvcm1hdD0iUFMiIC8+CisJICA8L2ltYWdlb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9InZiaV81MjUuZ2lmIiBmb3JtYXQ9IkdJRiIgLz4KKwkgIDwvaW1hZ2VvYmplY3Q+CisJICA8dGV4dG9iamVjdD4KKwkgICAgPHBocmFzZT5OVFNDIGZpZWxkIHN5bmNocm9uaXphdGlvbiBkaWFncmFtPC9waHJhc2U+CisJICA8L3RleHRvYmplY3Q+CisJICA8Y2FwdGlvbj4KKwkgICAgPHBhcmE+KDEpIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljYXRpb24gZmllbGQgMgorc3RhcnRzIGluIGxpbmUgMjY0IGFuZCBub3QgMjYzLjUgYmVjYXVzZSBoYWxmIGxpbmUgY2FwdHVyaW5nIGlzIG5vdAorc3VwcG9ydGVkLjwvcGFyYT4KKwkgIDwvY2FwdGlvbj4KKwk8L21lZGlhb2JqZWN0PgorICAgICAgPC9maWd1cmU+CisKKyAgICAgIDxmaWd1cmUgaWQ9InZiaS02MjUiPgorCTx0aXRsZT5JVFUtUiA2MjUgbGluZSBudW1iZXJpbmc8L3RpdGxlPgorCTxtZWRpYW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJ2YmlfNjI1LnBkZiIgZm9ybWF0PSJQUyIgLz4KKwkgIDwvaW1hZ2VvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0idmJpXzYyNS5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDx0ZXh0b2JqZWN0PgorCSAgICA8cGhyYXNlPlBBTC9TRUNBTSBmaWVsZCBzeW5jaHJvbml6YXRpb24gZGlhZ3JhbTwvcGhyYXNlPgorCSAgPC90ZXh0b2JqZWN0PgorCSAgPGNhcHRpb24+CisJICAgIDxwYXJhPigxKSBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpY2F0aW9uIGZpZWxkIDIKK3N0YXJ0cyBpbiBsaW5lIDMxNCBhbmQgbm90IDMxMy41IGJlY2F1c2UgaGFsZiBsaW5lIGNhcHR1cmluZyBpcyBub3QKK3N1cHBvcnRlZC48L3BhcmE+CisJICA8L2NhcHRpb24+CisJPC9tZWRpYW9iamVjdD4KKyAgICAgIDwvZmlndXJlPgorCisgICAgICA8cGFyYT5SZW1lbWJlciB0aGUgVkJJIGltYWdlIGZvcm1hdCBkZXBlbmRzIG9uIHRoZSBzZWxlY3RlZAordmlkZW8gc3RhbmRhcmQsIHRoZXJlZm9yZSB0aGUgYXBwbGljYXRpb24gbXVzdCBjaG9vc2UgYSBuZXcgc3RhbmRhcmQgb3IKK3F1ZXJ5IHRoZSBjdXJyZW50IHN0YW5kYXJkIGZpcnN0LiBBdHRlbXB0cyB0byByZWFkIG9yIHdyaXRlIGRhdGEgYWhlYWQKK29mIGZvcm1hdCBuZWdvdGlhdGlvbiwgb3IgYWZ0ZXIgc3dpdGNoaW5nIHRoZSB2aWRlbyBzdGFuZGFyZCB3aGljaCBtYXkKK2ludmFsaWRhdGUgdGhlIG5lZ290aWF0ZWQgVkJJIHBhcmFtZXRlcnMsIHNob3VsZCBiZSByZWZ1c2VkIGJ5IHRoZQorZHJpdmVyLiBBIGZvcm1hdCBjaGFuZ2UgZHVyaW5nIGFjdGl2ZSBJL08gaXMgbm90IHBlcm1pdHRlZC48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UmVhZGluZyBhbmQgd3JpdGluZyBWQkkgaW1hZ2VzPC90aXRsZT4KKworICAgICAgPHBhcmE+VG8gYXNzdXJlIHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBmaWVsZCBudW1iZXIgYW5kIGVhc2llcgoraW1wbGVtZW50YXRpb24sIHRoZSBzbWFsbGVzdCB1bml0IG9mIGRhdGEgcGFzc2VkIGF0IGEgdGltZSBpcyBvbmUKK2ZyYW1lLCBjb25zaXN0aW5nIG9mIHR3byBmaWVsZHMgb2YgVkJJIGltYWdlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaW4KK21lbW9yeS48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSB0b3RhbCBzaXplIG9mIGEgZnJhbWUgY29tcHV0ZXMgYXMgZm9sbG93czo8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyg8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPlswXSArIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+WzFdKSAqCis8c3RydWN0ZmllbGQ+c2FtcGxlc19wZXJfbGluZTwvc3RydWN0ZmllbGQ+ICogc2FtcGxlIHNpemUgaW4gYnl0ZXM8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT5UaGUgc2FtcGxlIHNpemUgaXMgbW9zdCBsaWtlbHkgYWx3YXlzIG9uZSBieXRlLAorYXBwbGljYXRpb25zIG11c3QgY2hlY2sgdGhlIDxzdHJ1Y3RmaWVsZD5zYW1wbGVfZm9ybWF0PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHRob3VnaCwgdG8gZnVuY3Rpb24gcHJvcGVybHkgd2l0aCBvdGhlciBkcml2ZXJzLjwvcGFyYT4KKworICAgICAgPHBhcmE+QSBWQkkgZGV2aWNlIG1heSBzdXBwb3J0IDxsaW5rCisgICAgICBsaW5rZW5kPSJydyI+cmVhZC93cml0ZTwvbGluaz4gYW5kL29yIHN0cmVhbWluZyAoPGxpbmsKKyAgICAgIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBvciA8bGluaworICAgICAgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy4gVGhlIGxhdHRlciBiZWFycyB0aGUKK3Bvc3NpYmlsaXR5IG9mIHN5bmNocm9uaXppbmcgdmlkZW8gYW5kCitWQkkgZGF0YSBieSB1c2luZyBidWZmZXIgdGltZXN0YW1wcy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlJlbWVtYmVyIHRoZSAmVklESU9DLVNUUkVBTU9OOyBpb2N0bCBhbmQgdGhlIGZpcnN0IHJlYWQoKSwKK3dyaXRlKCkgYW5kIHNlbGVjdCgpIGNhbGwgY2FuIGJlIHJlc291cmNlIGFsbG9jYXRpb24gcG9pbnRzIHJldHVybmluZworYW4gJkVCVVNZOyBpZiB0aGUgcmVxdWlyZWQgaGFyZHdhcmUgcmVzb3VyY2VzIGFyZSB0ZW1wb3JhcmlseQordW5hdmFpbGFibGUsIGZvciBleGFtcGxlIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlcgorcHJvY2Vzcy48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXJkcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yZHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjlkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yZHMueG1sCkBAIC0wLDAgKzEsMTY4IEBACisgICAgIDx0aXRsZT5SRFMgSW50ZXJmYWNlPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIFJhZGlvIERhdGEgU3lzdGVtIHRyYW5zbWl0cyBzdXBwbGVtZW50YXJ5CitpbmZvcm1hdGlvbiBpbiBiaW5hcnkgZm9ybWF0LCBmb3IgZXhhbXBsZSB0aGUgc3RhdGlvbiBuYW1lIG9yIHRyYXZlbAoraW5mb3JtYXRpb24sIG9uIGFuIGluYXVkaWJsZSBhdWRpbyBzdWJjYXJyaWVyIG9mIGEgcmFkaW8gcHJvZ3JhbS4gVGhpcworaW50ZXJmYWNlIGlzIGFpbWVkIGF0IGRldmljZXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgYW5kIGRlY29kaW5nIFJEUworaW5mb3JtYXRpb24uPC9wYXJhPgorCisgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGNvcmUgUkRTIHN0YW5kYXJkIDx4cmVmIGxpbmtlbmQ9ImVuNTAwNjciIC8+CithbmQgdGhlIFJCRFMgc3RhbmRhcmQgPHhyZWYgbGlua2VuZD0ibnJzYzQiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+Tm90ZSB0aGF0IHRoZSBSQkRTIHN0YW5kYXJkIGFzIGlzIHVzZWQgaW4gdGhlIFVTQSBpcyBhbG1vc3QgaWRlbnRpY2FsCit0byB0aGUgUkRTIHN0YW5kYXJkLiBBbnkgUkRTIGRlY29kZXIgY2FuIGFsc28gaGFuZGxlIFJCRFMuIE9ubHkgc29tZSBvZiB0aGUgZmllbGRzCitoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5ncy4gU2VlIHRoZSBSQkRTIHN0YW5kYXJkIGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIFJCRFMgc3RhbmRhcmQgYWxzbyBzcGVjaWZpZXMgc3VwcG9ydCBmb3IgTU1CUyAoTW9kaWZpZWQgTW9iaWxlIFNlYXJjaCkuCitUaGlzIGlzIGEgcHJvcHJpZXRhcnkgZm9ybWF0IHdoaWNoIHNlZW1zIHRvIGJlIGRpc2NvbnRpbnVlZC4gVGhlIFJEUyBpbnRlcmZhY2UgZG9lcyBub3QKK3N1cHBvcnQgdGhpcyBmb3JtYXQuIFNob3VsZCBzdXBwb3J0IGZvciBNTUJTIChvciB0aGUgc28tY2FsbGVkICdFIGJsb2NrcycgaW4gZ2VuZXJhbCkKK2JlIG5lZWRlZCwgdGhlbiBwbGVhc2UgY29udGFjdCB0aGUgbGludXgtbWVkaWEgbWFpbGluZyBsaXN0OiAmdjRsLW1sOy48L3BhcmE+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlF1ZXJ5aW5nIENhcGFiaWxpdGllczwvdGl0bGU+CisKKyAgICA8cGFyYT5EZXZpY2VzIHN1cHBvcnRpbmcgdGhlIFJEUyBjYXB0dXJpbmcgQVBJCitzZXQgdGhlIDxjb25zdGFudD5WNEwyX0NBUF9SRFNfQ0FQVFVSRTwvY29uc3RhbnQ+IGZsYWcgaW4KK3RoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4KK0FueSB0dW5lciB0aGF0IHN1cHBvcnRzIFJEUyB3aWxsIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9SRFM8L2NvbnN0YW50PiBmbGFnIGluIHRoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+CitmaWVsZCBvZiAmdjRsMi10dW5lcjsuCitXaGV0aGVyIGFuIFJEUyBzaWduYWwgaXMgcHJlc2VudCBjYW4gYmUgZGV0ZWN0ZWQgYnkgbG9va2luZyBhdAordGhlIDxzdHJ1Y3RmaWVsZD5yeHN1YmNoYW5zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItdHVuZXI7OiB0aGUKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9SRFM8L2NvbnN0YW50PiB3aWxsIGJlIHNldCBpZiBSRFMgZGF0YSB3YXMgZGV0ZWN0ZWQuPC9wYXJhPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSBSRFMgb3V0cHV0IEFQSQorc2V0IHRoZSA8Y29uc3RhbnQ+VjRMMl9DQVBfUkRTX09VVFBVVDwvY29uc3RhbnQ+IGZsYWcgaW4KK3RoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4KK0FueSBtb2R1bGF0b3IgdGhhdCBzdXBwb3J0cyBSRFMgd2lsbCBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfUkRTPC9jb25zdGFudD4gZmxhZyBpbiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPgorZmllbGQgb2YgJnY0bDItbW9kdWxhdG9yOy4KK0luIG9yZGVyIHRvIGVuYWJsZSB0aGUgUkRTIHRyYW5zbWlzc2lvbiBvbmUgbXVzdCBzZXQgdGhlIDxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9SRFM8L2NvbnN0YW50PgorYml0IGluIHRoZSA8c3RydWN0ZmllbGQ+dHhzdWJjaGFuczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLW1vZHVsYXRvcjsuPC9wYXJhPgorCisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UmVhZGluZyBSRFMgZGF0YTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlJEUyBkYXRhIGNhbiBiZSByZWFkIGZyb20gdGhlIHJhZGlvIGRldmljZQord2l0aCB0aGUgJmZ1bmMtcmVhZDsgZnVuY3Rpb24uIFRoZSBkYXRhIGlzIHBhY2tlZCBpbiBncm91cHMgb2YgdGhyZWUgYnl0ZXMsCithcyBmb2xsb3dzOjwvcGFyYT4KKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItcmRzLWRhdGEiPgorICAgICAgPHRpdGxlPnN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9yZHNfZGF0YTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSI1KiIgLz4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmxzYjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkxlYXN0IFNpZ25pZmljYW50IEJ5dGUgb2YgUkRTIEJsb2NrPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1zYjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vc3QgU2lnbmlmaWNhbnQgQnl0ZSBvZiBSRFMgQmxvY2s8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+YmxvY2s8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5CbG9jayBkZXNjcmlwdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItcmRzLWJsb2NrIj4KKyAgICAgIDx0aXRsZT5CbG9jayBkZXNjcmlwdGlvbjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjIiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSI1KiIgLz4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PkJpdHMgMC0yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJsb2NrIChha2Egb2Zmc2V0KSBvZiB0aGUgcmVjZWl2ZWQgZGF0YS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+Qml0cyAzLTU8L2VudHJ5PgorCSAgICA8ZW50cnk+RGVwcmVjYXRlZC4gQ3VycmVudGx5IGlkZW50aWNhbCB0byBiaXRzIDAtMi4gRG8gbm90IHVzZSB0aGVzZSBiaXRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5CaXQgNjwvZW50cnk+CisJICAgIDxlbnRyeT5Db3JyZWN0ZWQgYml0LiBJbmRpY2F0ZXMgdGhhdCBhbiBlcnJvciB3YXMgY29ycmVjdGVkIGZvciB0aGlzIGRhdGEgYmxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PkJpdCA3PC9lbnRyeT4KKwkgICAgPGVudHJ5PkVycm9yIGJpdC4gSW5kaWNhdGVzIHRoYXQgYW4gdW5jb3JyZWN0YWJsZSBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcmVjZXB0aW9uIG9mIHRoaXMgYmxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXJkcy1ibG9jay1jb2RlcyI+CisgICAgICA8dGl0bGU+QmxvY2sgZGVmaW5lczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjUqIiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfTVNLPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+TWFzayBmb3IgYml0cyAwLTIgdG8gZ2V0IHRoZSBibG9jayBJRC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfQTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJsb2NrIEEuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfUkRTX0JMT0NLX0I8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5CbG9jayBCLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX1JEU19CTE9DS19DPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+QmxvY2sgQy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfRDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJsb2NrIEQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfUkRTX0JMT0NLX0NfQUxUPC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+QmxvY2sgQycuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfUkRTX0JMT0NLX0lOVkFMSUQ8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5BbiBpbnZhbGlkIGJsb2NrLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX1JEU19CTE9DS19DT1JSRUNURUQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MHg0MDwvZW50cnk+CisJICAgIDxlbnRyeT5BIGJpdCBlcnJvciB3YXMgZGV0ZWN0ZWQgYnV0IGNvcnJlY3RlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfRVJST1I8L2VudHJ5PgorCSAgICA8ZW50cnk+MHg4MDwvZW50cnk+CisJICAgIDxlbnRyeT5BbiBpbmNvcnJlY3RhYmxlIGVycm9yIG9jY3VycmVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9zZWN0aW9uPgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtc2xpY2VkLXZiaS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1zbGljZWQtdmJpLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWU3ODlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtc2xpY2VkLXZiaS54bWwKQEAgLTAsMCArMSw3MDggQEAKKyAgPHRpdGxlPlNsaWNlZCBWQkkgRGF0YSBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlZCSSBzdGFuZHMgZm9yIFZlcnRpY2FsIEJsYW5raW5nIEludGVydmFsLCBhIGdhcCBpbiB0aGUKK3NlcXVlbmNlIG9mIGxpbmVzIG9mIGFuIGFuYWxvZyB2aWRlbyBzaWduYWwuIER1cmluZyBWQkkgbm8gcGljdHVyZQoraW5mb3JtYXRpb24gaXMgdHJhbnNtaXR0ZWQsIGFsbG93aW5nIHNvbWUgdGltZSB3aGlsZSB0aGUgZWxlY3Ryb24gYmVhbQorb2YgYSBjYXRob2RlIHJheSB0dWJlIFRWIHJldHVybnMgdG8gdGhlIHRvcCBvZiB0aGUgc2NyZWVuLjwvcGFyYT4KKworICA8cGFyYT5TbGljZWQgVkJJIGRldmljZXMgdXNlIGhhcmR3YXJlIHRvIGRlbW9kdWxhdGUgZGF0YSB0cmFuc21pdHRlZAoraW4gdGhlIFZCSS4gVjRMMiBkcml2ZXJzIHNoYWxsIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBkbyB0aGlzIGJ5Citzb2Z0d2FyZSwgc2VlIGFsc28gdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPnJhdyBWQkkKK2ludGVyZmFjZTwvbGluaz4uIFRoZSBkYXRhIGlzIHBhc3NlZCBhcyBzaG9ydCBwYWNrZXRzIG9mIGZpeGVkIHNpemUsCitjb3ZlcmluZyBvbmUgc2NhbiBsaW5lIGVhY2guIFRoZSBudW1iZXIgb2YgcGFja2V0cyBwZXIgdmlkZW8gZnJhbWUgaXMKK3ZhcmlhYmxlLjwvcGFyYT4KKworICA8cGFyYT5TbGljZWQgVkJJIGNhcHR1cmUgYW5kIG91dHB1dCBkZXZpY2VzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZQorc2FtZSBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlcyBhcyByYXcgVkJJIGRldmljZXMuIFdoZW4gYSBkcml2ZXIKK3N1cHBvcnRzIGJvdGggaW50ZXJmYWNlcywgdGhlIGRlZmF1bHQgZnVuY3Rpb24gb2YgYQorPGZpbGVuYW1lPi9kZXYvdmJpPC9maWxlbmFtZT4gZGV2aWNlIGlzIDxlbXBoYXNpcz5yYXc8L2VtcGhhc2lzPiBWQkkKK2NhcHR1cmluZyBvciBvdXRwdXQsIGFuZCB0aGUgc2xpY2VkIFZCSSBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZQorYWZ0ZXIgY2FsbGluZyB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwgYXMgZGVmaW5lZCBiZWxvdy4gTGlrZXdpc2UgYQorPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPiBkZXZpY2UgbWF5IHN1cHBvcnQgdGhlIHNsaWNlZCBWQkkgQVBJLAoraG93ZXZlciB0aGUgZGVmYXVsdCBmdW5jdGlvbiBoZXJlIGlzIHZpZGVvIGNhcHR1cmluZyBvciBvdXRwdXQuCitEaWZmZXJlbnQgZmlsZSBkZXNjcmlwdG9ycyBtdXN0IGJlIHVzZWQgdG8gcGFzcyByYXcgYW5kIHNsaWNlZCBWQkkKK2RhdGEgc2ltdWx0YW5lb3VzbHksIGlmIHRoaXMgaXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSBzbGljZWQgVkJJIGNhcHR1cmluZyBvciBvdXRwdXQgQVBJCitzZXQgdGhlIDxjb25zdGFudD5WNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUPC9jb25zdGFudD4gZmxhZyByZXNwZWN0aXZlbHksIGluCit0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIEF0IGxlYXN0IG9uZSBvZiB0aGUKK3JlYWQvd3JpdGUsIHN0cmVhbWluZyBvciBhc3luY2hyb25vdXMgPGxpbmsgbGlua2VuZD0iaW8iPkkvTworbWV0aG9kczwvbGluaz4gbXVzdCBiZSBzdXBwb3J0ZWQuIFNsaWNlZCBWQkkgZGV2aWNlcyBtYXkgaGF2ZSBhIHR1bmVyCitvciBtb2R1bGF0b3IuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlN1cHBsZW1lbnRhbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHBhcmE+U2xpY2VkIFZCSSBkZXZpY2VzIHNoYWxsIHN1cHBvcnQgPGxpbmsgbGlua2VuZD0idmlkZW8iPnZpZGVvCitpbnB1dCBvciBvdXRwdXQ8L2xpbms+IGFuZCA8bGluayBsaW5rZW5kPSJ0dW5lciI+dHVuZXIgb3IKK21vZHVsYXRvcjwvbGluaz4gaW9jdGxzIGlmIHRoZXkgaGF2ZSB0aGVzZSBjYXBhYmlsaXRpZXMsIGFuZCB0aGV5IG1heQorc3VwcG9ydCA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sPC9saW5rPiBpb2N0bHMuIFRoZSA8bGluaworbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgcHJvdmlkZSBpbmZvcm1hdGlvbgordml0YWwgdG8gcHJvZ3JhbSBhIHNsaWNlZCBWQkkgZGV2aWNlLCB0aGVyZWZvcmUgbXVzdCBiZQorc3VwcG9ydGVkLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJzbGljZWQtdmJpLWZvcm1hdC1uZWdvdGl0YXRpb24iPgorICAgIDx0aXRsZT5TbGljZWQgVkJJIEZvcm1hdCBOZWdvdGlhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBmaW5kIG91dCB3aGljaCBkYXRhIHNlcnZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitoYXJkd2FyZSBhcHBsaWNhdGlvbnMgY2FuIGNhbGwgdGhlICZWSURJT0MtRy1TTElDRUQtVkJJLUNBUDsgaW9jdGwuCitBbGwgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlIHNsaWNlZCBWQkkgaW50ZXJmYWNlIG11c3Qgc3VwcG9ydCB0aGlzCitpb2N0bC4gVGhlIHJlc3VsdHMgbWF5IGRpZmZlciBmcm9tIHRob3NlIG9mIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bAord2hlbiB0aGUgbnVtYmVyIG9mIFZCSSBsaW5lcyB0aGUgaGFyZHdhcmUgY2FuIGNhcHR1cmUgb3Igb3V0cHV0IHBlcgorZnJhbWUsIG9yIHRoZSBudW1iZXIgb2Ygc2VydmljZXMgaXQgY2FuIGlkZW50aWZ5IG9uIGEgZ2l2ZW4gbGluZSBhcmUKK2xpbWl0ZWQuIEZvciBleGFtcGxlIG9uIFBBTCBsaW5lIDE2IHRoZSBoYXJkd2FyZSBtYXkgYmUgYWJsZSB0byBsb29rCitmb3IgYSBWUFMgb3IgVGVsZXRleHQgc2lnbmFsLCBidXQgbm90IGJvdGggYXQgdGhlIHNhbWUgdGltZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBkZXRlcm1pbmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzZXJ2aWNlcyBhcHBsaWNhdGlvbnMKK3NldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGUgPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItZm9ybWF0OyB0bworPGNvbnN0YW50PiBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD4KK1Y0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PiwgYW5kIHRoZSAmVklESU9DLUctRk1UOworaW9jdGwgZmlsbHMgdGhlIDxzdHJ1Y3RmaWVsZD5mbXQuc2xpY2VkPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyLCBhCismdjRsMi1zbGljZWQtdmJpLWZvcm1hdDsuPC9wYXJhPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiByZXF1ZXN0IGRpZmZlcmVudCBwYXJhbWV0ZXJzIGJ5Citpbml0aWFsaXppbmcgb3IgbW9kaWZ5aW5nIHRoZSA8c3RydWN0ZmllbGQ+Zm10LnNsaWNlZDwvc3RydWN0ZmllbGQ+CittZW1iZXIgYW5kIGNhbGxpbmcgdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoZQorPHN0cnVjdG5hbWU+djRsMl9mb3JtYXQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgc2xpY2VkIFZCSSBBUEkgaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSByYXcgVkJJIEFQSQorYmVjYXVzZSB0aGUgaGFyZHdhcmUgbXVzdCBiZSB0b2xkIHdoaWNoIFZCSSBzZXJ2aWNlIHRvIGV4cGVjdCBvbiBlYWNoCitzY2FuIGxpbmUuIE5vdCBhbGwgc2VydmljZXMgbWF5IGJlIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgb24gYWxsCitsaW5lcyAodGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgZm9yIFZCSSBvdXRwdXQgd2hlcmUgVGVsZXRleHQgaXMgb2Z0ZW4KK3Vuc3VwcG9ydGVkIGFuZCBvdGhlciBzZXJ2aWNlcyBjYW4gb25seSBiZSBpbnNlcnRlZCBpbiBvbmUgc3BlY2lmaWMKK2xpbmUpLiBJbiBtYW55IGNhc2VzLCBob3dldmVyLCBpdCBpcyBzdWZmaWNpZW50IHRvIGp1c3Qgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIHJlcXVpcmVkIHNlcnZpY2VzCithbmQgbGV0IHRoZSBkcml2ZXIgZmlsbCB0aGUgPHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPgorYXJyYXkgYWNjb3JkaW5nIHRvIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gT25seSBpZiBtb3JlIHByZWNpc2UgY29udHJvbAoraXMgbmVlZGVkIHNob3VsZCB0aGUgcHJvZ3JhbW1lciBzZXQgdGhlCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+IGFycmF5IGV4cGxpY2l0bHkuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsIG1vZGlmaWVzIHRoZSBwYXJhbWV0ZXJzCithY2NvcmRpbmcgdG8gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBXaGVuIHRoZSBkcml2ZXIgYWxsb2NhdGVzCityZXNvdXJjZXMgYXQgdGhpcyBwb2ludCwgaXQgbWF5IHJldHVybiBhbiAmRUJVU1k7IGlmIHRoZSByZXF1aXJlZAorcmVzb3VyY2VzIGFyZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4gT3RoZXIgcmVzb3VyY2UgYWxsb2NhdGlvbgorcG9pbnRzIHdoaWNoIG1heSByZXR1cm4gPGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPiBjYW4gYmUgdGhlCismVklESU9DLVNUUkVBTU9OOyBpb2N0bCBhbmQgdGhlIGZpcnN0ICZmdW5jLXJlYWQ7LCAmZnVuYy13cml0ZTsgYW5kCismZnVuYy1zZWxlY3Q7IGNhbGwuPC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXNsaWNlZC12YmktZm9ybWF0Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQ8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNSI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIGNvbHdpZHRoPSIzKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjMqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIGNvbHdpZHRoPSIyKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNSIgY29sd2lkdGg9IjIqIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImMzIiBuYW1lZW5kPSJjNSIgc3Bhbm5hbWU9ImhzcGFuIiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5JZgorPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gaXMgbm9uLXplcm8gd2hlbiBwYXNzZWQgd2l0aAorJlZJRElPQy1TLUZNVDsgb3IgJlZJRElPQy1UUlktRk1UOywgdGhlCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+IGFycmF5IHdpbGwgYmUgZmlsbGVkIGJ5IHRoZQorZHJpdmVyIGFjY29yZGluZyB0byB0aGUgc2VydmljZXMgc3BlY2lmaWVkIGluIHRoaXMgZmllbGQuIEZvciBleGFtcGxlLAoraWYgPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gaXMgaW5pdGlhbGl6ZWQgd2l0aAorPGNvbnN0YW50PlY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9XU1NfNjI1PC9jb25zdGFudD4sIGEKK2RyaXZlciBmb3IgdGhlIGN4MjU4NDAgdmlkZW8gZGVjb2RlciBzZXRzIGxpbmVzIDctMjIgb2YgYm90aAorZmllbGRzPGZvb3Rub3RlPjxwYXJhPkFjY29yZGluZyB0byA8bGluaworbGlua2VuZD0iZXRzMzAwNzA2Ij5FVFMmbmJzcDszMDAmbmJzcDs3MDY8L2xpbms+IGxpbmVzIDYtMjIgb2YgdGhlCitmaXJzdCBmaWVsZCBhbmQgbGluZXMgNS0yMiBvZiB0aGUgc2Vjb25kIGZpZWxkIG1heSBjYXJyeSBUZWxldGV4dAorZGF0YS48L3BhcmE+PC9mb290bm90ZT4gdG8gPGNvbnN0YW50PlY0TDJfU0xJQ0VEX1RFTEVURVhUX0I8L2NvbnN0YW50PgorYW5kIGxpbmUgMjMgb2YgdGhlIGZpcnN0IGZpZWxkIHRvCis8Y29uc3RhbnQ+VjRMMl9TTElDRURfV1NTXzYyNTwvY29uc3RhbnQ+LiBJZgorPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gaXMgc2V0IHRvIHplcm8sIHRoZW4gdGhlIHZhbHVlcworb2YgPHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKzwvcGFyYT48cGFyYT5PbiByZXR1cm4gdGhlIGRyaXZlciBzZXRzIHRoaXMgZmllbGQgdG8gdGhlIHVuaW9uIG9mIGFsbAorZWxlbWVudHMgb2YgdGhlIHJldHVybmVkIDxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD4KK2FycmF5LiBJdCBtYXkgY29udGFpbiBsZXNzIHNlcnZpY2VzIHRoYW4gcmVxdWVzdGVkLCBwZXJoYXBzIGp1c3Qgb25lLAoraWYgdGhlIGhhcmR3YXJlIGNhbm5vdCBoYW5kbGUgbW9yZSBzZXJ2aWNlcyBzaW11bHRhbmVvdXNseS4gSXQgbWF5IGJlCitlbXB0eSAoemVybykgaWYgbm9uZSBvZiB0aGUgcmVxdWVzdGVkIHNlcnZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitoYXJkd2FyZS48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMl1bMjRdPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+PHBhcmE+QXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhpcworYXJyYXkgd2l0aCBzZXRzIG9mIGRhdGEgc2VydmljZXMgdGhlIGRyaXZlciBzaGFsbCBsb29rIGZvciBvciBpbnNlcnQKK29uIHRoZSByZXNwZWN0aXZlIHNjYW4gbGluZS4gU3ViamVjdCB0byBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgZHJpdmVycworcmV0dXJuIHRoZSByZXF1ZXN0ZWQgc2V0LCBhIHN1YnNldCwgd2hpY2ggbWF5IGJlIGp1c3QgYSBzaW5nbGUKK3NlcnZpY2UsIG9yIGFuIGVtcHR5IHNldC4gV2hlbiB0aGUgaGFyZHdhcmUgY2Fubm90IGhhbmRsZSBtdWx0aXBsZQorc2VydmljZXMgb24gdGhlIHNhbWUgbGluZSB0aGUgZHJpdmVyIHNoYWxsIGNob29zZSBvbmUuIE5vIGFzc3VtcHRpb25zCitjYW4gYmUgbWFkZSBvbiB3aGljaCBzZXJ2aWNlIHRoZSBkcml2ZXIgY2hvb3Nlcy48L3BhcmE+PHBhcmE+RGF0YQorc2VydmljZXMgYXJlIGRlZmluZWQgaW4gPHhyZWYgbGlua2VuZD0idmJpLXNlcnZpY2VzMiIgLz4uIEFycmF5IGluZGljZXMKK21hcCB0byBJVFUtUiBsaW5lIG51bWJlcnMgKHNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9InZiaS01MjUiIC8+IGFuZCA8eHJlZgorCQkgIGxpbmtlbmQ9InZiaS02MjUiIC8+KSBhcyBmb2xsb3dzOiA8IS0tIE5vIG5lc3RlZAordGFibGVzLCBzaWdoLiAtLT48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+RWxlbWVudDwvZW50cnk+CisJICAgIDxlbnRyeT41MjUgbGluZSBzeXN0ZW1zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjYyNSBsaW5lIHN5c3RlbXM8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzBdWzFdPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjE8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMjNdPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjIzPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjIzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPlsxXVsxXTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4yNjQ8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MzE0PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPlsxXVsyM108L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+Mjg2PC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjMzNjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDwhLS0gRW5kIG9mIGxpbmUgbnVtYmVycyB0YWJsZS4gLS0+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkRyaXZlcnMgbXVzdCBzZXQKKzxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMF0gYW5kCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzBdIHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pb19zaXplPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5NYXhpbXVtIG51bWJlciBvZiBieXRlcyBwYXNzZWQgYnkKK29uZSAmZnVuYy1yZWFkOyBvciAmZnVuYy13cml0ZTsgY2FsbCwgYW5kIHRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcyBmb3IKK3RoZSAmVklESU9DLVFCVUY7IGFuZCAmVklESU9DLURRQlVGOyBpb2N0bC4gRHJpdmVycyBzZXQgdGhpcyBmaWVsZCB0bwordGhlIHNpemUgb2YgJnY0bDItc2xpY2VkLXZiaS1kYXRhOyB0aW1lcyB0aGUgbnVtYmVyIG9mIG5vbi16ZXJvCitlbGVtZW50cyBpbiB0aGUgcmV0dXJuZWQgPHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPgorYXJyYXkgKHRoYXQgaXMgdGhlIG51bWJlciBvZiBsaW5lcyBwb3RlbnRpYWxseSBjYXJyeWluZyBkYXRhKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5UaGlzIGFycmF5IGlzIHJlc2VydmVkIGZvciBmdXR1cmUKK2V4dGVuc2lvbnMuIEFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCBpdCB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gU2VlIGFsc28gdmlkaW9jLWctc2xpY2VkLXZiaS1jYXAuc2dtbCAtLT4KKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InZiaS1zZXJ2aWNlczIiPgorICAgICAgPHRpdGxlPlNsaWNlZCBWQkkgc2VydmljZXM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI1Ij4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM1IiBjb2x3aWR0aD0iMioiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzMiIG5hbWVlbmQ9ImM1IiBzcGFubmFtZT0icmxwIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5TeW1ib2w8L2VudHJ5PgorCSAgICA8ZW50cnk+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnk+UmVmZXJlbmNlPC9lbnRyeT4KKwkgICAgPGVudHJ5PkxpbmVzLCB1c3VhbGx5PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBheWxvYWQ8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9URUxFVEVYVF9CPC9jb25zdGFudD4KKyhUZWxldGV4dCBTeXN0ZW0gQik8L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjx4cmVmIGxpbmtlbmQ9ImV0czMwMDcwNiIgLz4sIDx4cmVmIGxpbmtlbmQ9Iml0dTY1MyIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+UEFML1NFQ0FNIGxpbmUgNy0yMiwgMzIwLTMzNSAoc2Vjb25kIGZpZWxkIDctMjIpPC9lbnRyeT4KKwkgICAgPGVudHJ5Pkxhc3QgNDIgb2YgdGhlIDQ1IGJ5dGUgVGVsZXRleHQgcGFja2V0LCB0aGF0IGlzCit3aXRob3V0IGNsb2NrIHJ1bi1pbiBhbmQgZnJhbWluZyBjb2RlLCBsc2IgZmlyc3QgdHJhbnNtaXR0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9WUFM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDA0MDA8L2VudHJ5PgorCSAgICA8ZW50cnk+PHhyZWYgbGlua2VuZD0iZXRzMzAwMjMxIiAvPjwvZW50cnk+CisJICAgIDxlbnRyeT5QQUwgbGluZSAxNjwvZW50cnk+CisJICAgIDxlbnRyeT5CeXRlIG51bWJlciAzIHRvIDE1IGFjY29yZGluZyB0byBGaWd1cmUgOSBvZgorRVRTJm5ic3A7MzAwJm5ic3A7MjMxLCBsc2IgZmlyc3QgdHJhbnNtaXR0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MTAwMDwvZW50cnk+CisJICAgIDxlbnRyeT48eHJlZiBsaW5rZW5kPSJlaWE2MDgiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5UU0MgbGluZSAyMSwgMjg0IChzZWNvbmQgZmllbGQgMjEpPC9lbnRyeT4KKwkgICAgPGVudHJ5PlR3byBieXRlcyBpbiB0cmFuc21pc3Npb24gb3JkZXIsIGluY2x1ZGluZyBwYXJpdHkKK2JpdCwgbHNiIGZpcnN0IHRyYW5zbWl0dGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9TTElDRURfV1NTXzYyNTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4NDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT48eHJlZiBsaW5rZW5kPSJpdHUxMTE5IiAvPiwgPHhyZWYgbGlua2VuZD0iZW4zMDAyOTQiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBBTC9TRUNBTSBsaW5lIDIzPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzY3JlZW4+CitCeXRlICAgICAgICAgMCAgICAgICAgICAgICAgICAgMQorICAgICAgbXNiICAgICAgICAgbHNiICBtc2IgICAgICAgICAgIGxzYgorIEJpdCAgNyA2IDUgNCAzIDIgMSAwICB4IHggMTMgMTIgMTEgMTAgOQorPC9zY3JlZW4+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9WQklfNTI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgxMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJybHAiPlNldCBvZiBzZXJ2aWNlcyBhcHBsaWNhYmxlIHRvIDUyNQorbGluZSBzeXN0ZW1zLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9TTElDRURfVkJJXzYyNTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4NDQwMTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0icmxwIj5TZXQgb2Ygc2VydmljZXMgYXBwbGljYWJsZSB0byA2MjUKK2xpbmUgc3lzdGVtcy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8cGFyYT5Ecml2ZXJzIG1heSByZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiBhcHBsaWNhdGlvbnMgYXR0ZW1wdCB0bworcmVhZCBvciB3cml0ZSBkYXRhIHdpdGhvdXQgcHJpb3IgZm9ybWF0IG5lZ290aWF0aW9uLCBhZnRlciBzd2l0Y2hpbmcKK3RoZSB2aWRlbyBzdGFuZGFyZCAod2hpY2ggbWF5IGludmFsaWRhdGUgdGhlIG5lZ290aWF0ZWQgVkJJCitwYXJhbWV0ZXJzKSBhbmQgYWZ0ZXIgc3dpdGNoaW5nIHRoZSB2aWRlbyBpbnB1dCAod2hpY2ggbWF5IGNoYW5nZSB0aGUKK3ZpZGVvIHN0YW5kYXJkIGFzIGEgc2lkZSBlZmZlY3QpLiBUaGUgJlZJRElPQy1TLUZNVDsgaW9jdGwgbWF5IHJldHVybgorYW4gJkVCVVNZOyB3aGVuIGFwcGxpY2F0aW9ucyBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgZm9ybWF0IHdoaWxlIGkvbyBpcworaW4gcHJvZ3Jlc3MgKGJldHdlZW4gYSAmVklESU9DLVNUUkVBTU9OOyBhbmQgJlZJRElPQy1TVFJFQU1PRkY7IGNhbGwsCithbmQgYWZ0ZXIgdGhlIGZpcnN0ICZmdW5jLXJlYWQ7IG9yICZmdW5jLXdyaXRlOyBjYWxsKS48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UmVhZGluZyBhbmQgd3JpdGluZyBzbGljZWQgVkJJIGRhdGE8L3RpdGxlPgorCisgICAgPHBhcmE+QSBzaW5nbGUgJmZ1bmMtcmVhZDsgb3IgJmZ1bmMtd3JpdGU7IGNhbGwgbXVzdCBwYXNzIGFsbCBkYXRhCitiZWxvbmdpbmcgdG8gb25lIHZpZGVvIGZyYW1lLiBUaGF0IGlzIGFuIGFycmF5IG9mCis8c3RydWN0bmFtZT52NGwyX3NsaWNlZF92YmlfZGF0YTwvc3RydWN0bmFtZT4gc3RydWN0dXJlcyB3aXRoIG9uZSBvcgorbW9yZSBlbGVtZW50cyBhbmQgYSB0b3RhbCBzaXplIG5vdCBleGNlZWRpbmcKKzxzdHJ1Y3RmaWVsZD5pb19zaXplPC9zdHJ1Y3RmaWVsZD4gYnl0ZXMuIExpa2V3aXNlIGluIHN0cmVhbWluZyBJL08KK21vZGUgb25lIGJ1ZmZlciBvZiA8c3RydWN0ZmllbGQ+aW9fc2l6ZTwvc3RydWN0ZmllbGQ+IGJ5dGVzIG11c3QKK2NvbnRhaW4gZGF0YSBvZiBvbmUgdmlkZW8gZnJhbWUuIFRoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBvZgordW51c2VkIDxzdHJ1Y3RuYW1lPnY0bDJfc2xpY2VkX3ZiaV9kYXRhPC9zdHJ1Y3RuYW1lPiBlbGVtZW50cyBtdXN0IGJlCit6ZXJvLjwvcGFyYT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1zbGljZWQtdmJpLWRhdGEiPgorICAgICAgPHRpdGxlPnN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9zbGljZWRfdmJpX2RhdGE8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgZmxhZyBmcm9tIDx4cmVmIGxpbmtlbmQ9InZiaS1zZXJ2aWNlcyIgLz4KK2lkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIGRhdGEgaW4gdGhpcyBwYWNrZXQuIE9ubHkgYSBzaW5nbGUgYml0IG11c3QgYmUKK3NldC4gV2hlbiB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gb2YgYSBjYXB0dXJlZCBwYWNrZXQgaXMKK3plcm8sIHRoZSBwYWNrZXQgaXMgZW1wdHkgYW5kIHRoZSBjb250ZW50cyBvZiBvdGhlciBmaWVsZHMgYXJlCit1bmRlZmluZWQuIEFwcGxpY2F0aW9ucyBzaGFsbCBpZ25vcmUgZW1wdHkgcGFja2V0cy4gV2hlbiB0aGUKKzxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IG9mIGEgcGFja2V0IGZvciBvdXRwdXQgaXMgemVybyB0aGUKK2NvbnRlbnRzIG9mIHRoZSA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFyZSB1bmRlZmluZWQKK2FuZCB0aGUgZHJpdmVyIG11c3Qgbm8gbG9uZ2VyIGluc2VydCBkYXRhIG9uIHRoZSByZXF1ZXN0ZWQKKzxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHZpZGVvIGZpZWxkIG51bWJlciB0aGlzIGRhdGEgaGFzIGJlZW4gY2FwdHVyZWQKK2Zyb20sIG9yIHNoYWxsIGJlIGluc2VydGVkIGF0LiA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IGZvciB0aGUgZmlyc3QKK2ZpZWxkLCA8Y29uc3RhbnQ+MTwvY29uc3RhbnQ+IGZvciB0aGUgc2Vjb25kIGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBmaWVsZCAoYXMgb3Bwb3NlZCB0byBmcmFtZSkgbGluZSBudW1iZXIgdGhpcworZGF0YSBoYXMgYmVlbiBjYXB0dXJlZCBmcm9tLCBvciBzaGFsbCBiZSBpbnNlcnRlZCBhdC4gU2VlIDx4cmVmCisJICAgIGxpbmtlbmQ9InZiaS01MjUiIC8+IGFuZCA8eHJlZiBsaW5rZW5kPSJ2YmktNjI1IiAvPiBmb3IgdmFsaWQKK3ZhbHVlcy4gU2xpY2VkIFZCSSBjYXB0dXJlIGRldmljZXMgY2FuIHNldCB0aGUgbGluZSBudW1iZXIgb2YgYWxsCitwYWNrZXRzIHRvIDxjb25zdGFudD4wPC9jb25zdGFudD4gaWYgdGhlIGhhcmR3YXJlIGNhbm5vdCByZWxpYWJseQoraWRlbnRpZnkgc2NhbiBsaW5lcy4gVGhlIGZpZWxkIG51bWJlciBtdXN0IGFsd2F5cyBiZSB2YWxpZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuCitBcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbXVzdCBzZXQgaXQgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+WzQ4XTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgcGFja2V0IHBheWxvYWQuIFNlZSA8eHJlZgorCSAgICBsaW5rZW5kPSJ2Ymktc2VydmljZXMiIC8+IGZvciB0aGUgY29udGVudHMgYW5kIG51bWJlciBvZgorYnl0ZXMgcGFzc2VkIGZvciBlYWNoIGRhdGEgdHlwZS4gVGhlIGNvbnRlbnRzIG9mIHBhZGRpbmcgYnl0ZXMgYXQgdGhlCitlbmQgb2YgdGhpcyBhcnJheSBhcmUgdW5kZWZpbmVkLCBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgc2hhbGwgaWdub3JlCit0aGVtLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxwYXJhPlBhY2tldHMgYXJlIGFsd2F5cyBwYXNzZWQgaW4gYXNjZW5kaW5nIGxpbmUgbnVtYmVyIG9yZGVyLAord2l0aG91dCBkdXBsaWNhdGUgbGluZSBudW1iZXJzLiBUaGUgJmZ1bmMtd3JpdGU7IGZ1bmN0aW9uIGFuZCB0aGUKKyZWSURJT0MtUUJVRjsgaW9jdGwgbXVzdCByZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiBhcHBsaWNhdGlvbnMgdmlvbGF0ZQordGhpcyBydWxlLiBUaGV5IG11c3QgYWxzbyByZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiBhcHBsaWNhdGlvbnMgcGFzcyBhbgoraW5jb3JyZWN0IGZpZWxkIG9yIGxpbmUgbnVtYmVyLCBvciBhIGNvbWJpbmF0aW9uIG9mCis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IHdoaWNoIGhhcyBub3QgYmVlbiBuZWdvdGlhdGVkIHdpdGggdGhlCismVklESU9DLUctRk1UOyBvciAmVklESU9DLVMtRk1UOyBpb2N0bC4gV2hlbiB0aGUgbGluZSBudW1iZXJzIGFyZQordW5rbm93biB0aGUgZHJpdmVyIG11c3QgcGFzcyB0aGUgcGFja2V0cyBpbiB0cmFuc21pdHRlZCBvcmRlci4gVGhlCitkcml2ZXIgY2FuIGluc2VydCBlbXB0eSBwYWNrZXRzIHdpdGggPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gc2V0Cit0byB6ZXJvIGFueXdoZXJlIGluIHRoZSBwYWNrZXQgYXJyYXkuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gYXNzdXJlIHN5bmNocm9uaXphdGlvbiBhbmQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBmcmFtZQorZHJvcHBpbmcsIHdoZW4gYSBjYXB0dXJlZCBmcmFtZSBkb2VzIG5vdCBjYXJyeSBhbnkgb2YgdGhlIHJlcXVlc3RlZAorZGF0YSBzZXJ2aWNlcyBkcml2ZXJzIG11c3QgcGFzcyBvbmUgb3IgbW9yZSBlbXB0eSBwYWNrZXRzLiBXaGVuIGFuCithcHBsaWNhdGlvbiBmYWlscyB0byBwYXNzIFZCSSBkYXRhIGluIHRpbWUgZm9yIG91dHB1dCwgdGhlIGRyaXZlcgorbXVzdCBvdXRwdXQgdGhlIGxhc3QgVlBTIGFuZCBXU1MgcGFja2V0IGFnYWluLCBhbmQgZGlzYWJsZSB0aGUgb3V0cHV0CitvZiBDbG9zZWQgQ2FwdGlvbiBhbmQgVGVsZXRleHQgZGF0YSwgb3Igb3V0cHV0IGRhdGEgd2hpY2ggaXMgaWdub3JlZAorYnkgQ2xvc2VkIENhcHRpb24gYW5kIFRlbGV0ZXh0IGRlY29kZXJzLjwvcGFyYT4KKworICAgIDxwYXJhPkEgc2xpY2VkIFZCSSBkZXZpY2UgbWF5IHN1cHBvcnQgPGxpbmsKK2xpbmtlbmQ9InJ3Ij5yZWFkL3dyaXRlPC9saW5rPiBhbmQvb3Igc3RyZWFtaW5nICg8bGluaworbGlua2VuZD0ibW1hcCI+bWVtb3J5IG1hcHBpbmc8L2xpbms+IGFuZC9vciA8bGluayBsaW5rZW5kPSJ1c2VycCI+dXNlcgorcG9pbnRlcjwvbGluaz4pIEkvTy4gVGhlIGxhdHRlciBiZWFycyB0aGUgcG9zc2liaWxpdHkgb2Ygc3luY2hyb25pemluZwordmlkZW8gYW5kIFZCSSBkYXRhIGJ5IHVzaW5nIGJ1ZmZlciB0aW1lc3RhbXBzLjwvcGFyYT4KKworICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlNsaWNlZCBWQkkgRGF0YSBpbiBNUEVHIFN0cmVhbXM8L3RpdGxlPgorCisgICAgPHBhcmE+SWYgYSBkZXZpY2UgY2FuIHByb2R1Y2UgYW4gTVBFRyBvdXRwdXQgc3RyZWFtLCBpdCBtYXkgYmUKK2NhcGFibGUgb2YgcHJvdmlkaW5nIDxsaW5rCitsaW5rZW5kPSJzbGljZWQtdmJpLWZvcm1hdC1uZWdvdGl0YXRpb24iPm5lZ290aWF0ZWQgc2xpY2VkIFZCSQorc2VydmljZXM8L2xpbms+IGFzIGRhdGEgZW1iZWRkZWQgaW4gdGhlIE1QRUcgc3RyZWFtLiAgVXNlcnMgb3IKK2FwcGxpY2F0aW9ucyBjb250cm9sIHRoaXMgc2xpY2VkIFZCSSBkYXRhIGluc2VydGlvbiB3aXRoIHRoZSA8bGluaworbGlua2VuZD0idjRsMi1tcGVnLXN0cmVhbS12YmktZm10Ij5WNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UPC9saW5rPgorY29udHJvbC48L3BhcmE+CisKKyAgICA8cGFyYT5JZiB0aGUgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgdGhlIDxsaW5rCitsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPlY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ8L2xpbms+Citjb250cm9sLCBvciBvbmx5IGFsbG93cyB0aGF0IGNvbnRyb2wgdG8gYmUgc2V0IHRvIDxsaW5rCitsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPjxjb25zdGFudD4KK1Y0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FPC9jb25zdGFudD48L2xpbms+LCB0aGVuIHRoZSBkZXZpY2UKK2Nhbm5vdCBlbWJlZCBzbGljZWQgVkJJIGRhdGEgaW4gdGhlIE1QRUcgc3RyZWFtLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPgorVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDwvbGluaz4gY29udHJvbCBkb2VzIG5vdCBpbXBsaWNpdGx5IHNldAordGhlIGRldmljZSBkcml2ZXIgdG8gY2FwdHVyZSBub3IgY2Vhc2UgY2FwdHVyaW5nIHNsaWNlZCBWQkkgZGF0YS4gIFRoZQorY29udHJvbCBvbmx5IGluZGljYXRlcyB0byBlbWJlZCBzbGljZWQgVkJJIGRhdGEgaW4gdGhlIE1QRUcgc3RyZWFtLCBpZgorYW4gYXBwbGljYXRpb24gaGFzIG5lZ290aWF0ZWQgc2xpY2VkIFZCSSBzZXJ2aWNlIGJlIGNhcHR1cmVkLjwvcGFyYT4KKworICAgIDxwYXJhPkl0IG1heSBhbHNvIGJlIHRoZSBjYXNlIHRoYXQgYSBkZXZpY2UgY2FuIGVtYmVkIHNsaWNlZCBWQkkKK2RhdGEgaW4gb25seSBjZXJ0YWluIHR5cGVzIG9mIE1QRUcgc3RyZWFtczogZm9yIGV4YW1wbGUgaW4gYW4gTVBFRy0yCitQUyBidXQgbm90IGFuIE1QRUctMiBUUy4gIEluIHRoaXMgc2l0dWF0aW9uLCBpZiBzbGljZWQgVkJJIGRhdGEKK2luc2VydGlvbiBpcyByZXF1ZXN0ZWQsIHRoZSBzbGljZWQgVkJJIGRhdGEgd2lsbCBiZSBlbWJlZGRlZCBpbiBNUEVHCitzdHJlYW0gdHlwZXMgd2hlbiBzdXBwb3J0ZWQsIGFuZCBzaWxlbnRseSBvbWl0dGVkIGZyb20gTVBFRyBzdHJlYW0KK3R5cGVzIHdoZXJlIHNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLgorPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBzcGVjaWZ5IHRoZSBmb3JtYXQgb2YgdGhlCitlbWJlZGRlZCBzbGljZWQgVkJJIGRhdGEuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5NUEVHIFN0cmVhbSBFbWJlZGRlZCwgU2xpY2VkIFZCSSBEYXRhIEZvcm1hdDogTk9ORTwvdGl0bGU+CisgICAgPHBhcmE+VGhlIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1zdHJlYW0tdmJpLWZtdCI+PGNvbnN0YW50PgorVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkU8L2NvbnN0YW50PjwvbGluaz4gZW1iZWRkZWQgc2xpY2VkIFZCSQorZm9ybWF0IHNoYWxsIGJlIGludGVycHJldGVkIGJ5IGRyaXZlcnMgYXMgYSBjb250cm9sIHRvIGNlYXNlCitlbWJlZGRpbmcgc2xpY2VkIFZCSSBkYXRhIGluIE1QRUcgc3RyZWFtcy4gIE5laXRoZXIgdGhlIGRldmljZSBub3IKK2RyaXZlciBzaGFsbCBpbnNlcnQgImVtcHR5IiBlbWJlZGRlZCBzbGljZWQgVkJJIGRhdGEgcGFja2V0cyBpbiB0aGUKK01QRUcgc3RyZWFtIHdoZW4gdGhpcyBmb3JtYXQgaXMgc2V0LiAgTm8gTVBFRyBzdHJlYW0gZGF0YSBzdHJ1Y3R1cmVzCithcmUgc3BlY2lmaWVkIGZvciB0aGlzIGZvcm1hdC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+TVBFRyBTdHJlYW0gRW1iZWRkZWQsIFNsaWNlZCBWQkkgRGF0YSBGb3JtYXQ6IElWVFY8L3RpdGxlPgorICAgIDxwYXJhPlRoZSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPjxjb25zdGFudD4KK1Y0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWPC9jb25zdGFudD48L2xpbms+IGVtYmVkZGVkIHNsaWNlZCBWQkkKK2Zvcm1hdCwgd2hlbiBzdXBwb3J0ZWQsIGluZGljYXRlcyB0byB0aGUgZHJpdmVyIHRvIGVtYmVkIHVwIHRvIDM2CitsaW5lcyBvZiBzbGljZWQgVkJJIGRhdGEgcGVyIGZyYW1lIGluIGFuIE1QRUctMiA8ZW1waGFzaXM+UHJpdmF0ZQorU3RyZWFtIDEgUEVTPC9lbXBoYXNpcz4gcGFja2V0IGVuY2Fwc3VsYXRlZCBpbiBhbiBNUEVHLTIgPGVtcGhhc2lzPgorUHJvZ3JhbSBQYWNrPC9lbXBoYXNpcz4gaW4gdGhlIE1QRUcgc3RyZWFtLjwvcGFyYT4KKworICAgIDxwYXJhPjxlbXBoYXNpcz5IaXN0b3JpY2FsIGNvbnRleHQ8L2VtcGhhc2lzPjogVGhpcyBmb3JtYXQKK3NwZWNpZmljYXRpb24gb3JpZ2luYXRlcyBmcm9tIGEgY3VzdG9tLCBlbWJlZGRlZCwgc2xpY2VkIFZCSSBkYXRhCitmb3JtYXQgdXNlZCBieSB0aGUgPGZpbGVuYW1lPml2dHY8L2ZpbGVuYW1lPiBkcml2ZXIuICBUaGlzIGZvcm1hdAoraGFzIGFscmVhZHkgYmVlbiBpbmZvcm1hbGx5IHNwZWNpZmllZCBpbiB0aGUga2VybmVsIHNvdXJjZXMgaW4gdGhlCitmaWxlIDxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLnZiaTwvZmlsZW5hbWU+CisuICBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBwYXlsb2FkIGFuZCBvdGhlciBhc3BlY3RzIG9mIHRoaXMgZm9ybWF0CithcmUgZHJpdmVuIGJ5IHRoZSBDWDIzNDE1IE1QRUcgZGVjb2RlcidzIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMKK3dpdGggcmVzcGVjdCB0byBleHRyYWN0aW5nLCBkZWNvZGluZywgYW5kIGRpc3BsYXlpbmcgc2xpY2VkIFZCSSBkYXRhCitlbWJlZGRlZCB3aXRoaW4gYW4gTVBFRyBzdHJlYW0uPC9wYXJhPgorCisgICAgPHBhcmE+VGhpcyBmb3JtYXQncyB1c2UgaXMgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGV4Y2x1c2l2ZSB0bwordGhlIDxmaWxlbmFtZT5pdnR2PC9maWxlbmFtZT4gZHJpdmVyIDxlbXBoYXNpcz5ub3I8L2VtcGhhc2lzPgorZXhjbHVzaXZlIHRvIENYMjM0MXggZGV2aWNlcywgYXMgdGhlIHNsaWNlZCBWQkkgZGF0YSBwYWNrZXQgaW5zZXJ0aW9uCitpbnRvIHRoZSBNUEVHIHN0cmVhbSBpcyBpbXBsZW1lbnRlZCBpbiBkcml2ZXIgc29mdHdhcmUuICBBdCBsZWFzdCB0aGUKKzxmaWxlbmFtZT5jeDE4PC9maWxlbmFtZT4gZHJpdmVyIHByb3ZpZGVzIHNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb24KK2ludG8gYW4gTVBFRy0yIFBTIGluIHRoaXMgZm9ybWF0IGFzIHdlbGwuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBzcGVjaWZ5IHRoZSBwYXlsb2FkIG9mIHRoZQorTVBFRy0yIDxlbXBoYXNpcz5Qcml2YXRlIFN0cmVhbSAxIFBFUzwvZW1waGFzaXM+IHBhY2tldHMgdGhhdCBjb250YWluCitzbGljZWQgVkJJIGRhdGEgd2hlbiA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPgorPGNvbnN0YW50PlY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWPC9jb25zdGFudD48L2xpbms+IGlzIHNldC4KKyhUaGUgTVBFRy0yIDxlbXBoYXNpcz5Qcml2YXRlIFN0cmVhbSAxIFBFUzwvZW1waGFzaXM+IHBhY2tldCBoZWFkZXIKK2FuZCBlbmNhcHN1bGF0aW5nIE1QRUctMiA8ZW1waGFzaXM+UHJvZ3JhbSBQYWNrPC9lbXBoYXNpcz4gaGVhZGVyIGFyZQorbm90IGRldGFpbGVkIGhlcmUuICBQbGVhc2UgcmVmZXIgdG8gdGhlIE1QRUctMiBzcGVjaWZpY2F0aW9ucyBmb3IKK2RldGFpbHMgb24gdGhvc2UgcGFja2V0IGhlYWRlcnMuKTwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBwYXlsb2FkIG9mIHRoZSBNUEVHLTIgPGVtcGhhc2lzPlByaXZhdGUgU3RyZWFtIDEgUEVTCis8L2VtcGhhc2lzPiBwYWNrZXRzIHRoYXQgY29udGFpbiBzbGljZWQgVkJJIGRhdGEgaXMgc3BlY2lmaWVkIGJ5CismdjRsMi1tcGVnLXZiaS1mbXQtaXZ0djsuICBUaGUgcGF5bG9hZCBpcyB2YXJpYWJsZQorbGVuZ3RoLCBkZXBlbmRpbmcgb24gdGhlIGFjdHVhbCBudW1iZXIgb2YgbGluZXMgb2Ygc2xpY2VkIFZCSSBkYXRhCitwcmVzZW50IGluIGEgdmlkZW8gZnJhbWUuICBUaGUgcGF5bG9hZCBtYXkgYmUgcGFkZGVkIGF0IHRoZSBlbmQgd2l0aAordW5zcGVjaWZpZWQgZmlsbCBieXRlcyB0byBhbGlnbiB0aGUgZW5kIG9mIHRoZSBwYXlsb2FkIHRvIGEgNC1ieXRlCitib3VuZGFyeS4gIFRoZSBwYXlsb2FkIHNoYWxsIG5ldmVyIGV4Y2VlZCAxNTUyIGJ5dGVzICgyIGZpZWxkcyB3aXRoCisxOCBsaW5lcy9maWVsZCB3aXRoIDQzIGJ5dGVzIG9mIGRhdGEvbGluZSBhbmQgYSA0IGJ5dGUgbWFnaWMgbnVtYmVyKS4KKzwvcGFyYT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1tcGVnLXZiaS1mbXQtaXZ0diI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfZm10X2l2dHY8L3N0cnVjdG5hbWU+CisgICAgICA8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1hZ2ljPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgIm1hZ2ljIiBjb25zdGFudCBmcm9tIDx4cmVmCisJICAgIGxpbmtlbmQ9InY0bDItbXBlZy12YmktZm10LWl2dHYtbWFnaWMiIC8+IHRoYXQgaW5kaWNhdGVzCit0aGlzIGlzIGEgdmFsaWQgc2xpY2VkIFZCSSBkYXRhIHBheWxvYWQgYW5kIGFsc28gaW5kaWNhdGVzIHdoaWNoCittZW1iZXIgb2YgdGhlIGFub255bW91cyB1bmlvbiwgPHN0cnVjdGZpZWxkPml0djA8L3N0cnVjdGZpZWxkPiBvcgorPHN0cnVjdGZpZWxkPklUVjA8L3N0cnVjdGZpZWxkPiwgdG8gdXNlIGZvciB0aGUgcGF5bG9hZCBkYXRhLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT4oYW5vbnltb3VzKTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+c3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MCI+CisJICAgICAgPHN0cnVjdG5hbWU+djRsMl9tcGVnX3ZiaV9pdHYwPC9zdHJ1Y3RuYW1lPjwvbGluaz4KKwkgICAgPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pdHYwPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHByaW1hcnkgZm9ybSBvZiB0aGUgc2xpY2VkIFZCSSBkYXRhIHBheWxvYWQKK3RoYXQgY29udGFpbnMgYW55d2hlcmUgZnJvbSAxIHRvIDM1IGxpbmVzIG9mIHNsaWNlZCBWQkkgZGF0YS4KK0xpbmUgbWFza3MgYXJlIHByb3ZpZGVkIGluIHRoaXMgZm9ybSBvZiB0aGUgcGF5bG9hZCBpbmRpY2F0aW5nCit3aGljaCBWQkkgbGluZXMgYXJlIHByb3ZpZGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+c3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC0xIj4KKwkgICAgICA8c3RydWN0bmFtZT52NGwyX21wZWdfdmJpX0lUVjA8L3N0cnVjdG5hbWU+PC9saW5rPgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPklUVjA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BbiBhbHRlcm5hdGUgZm9ybSBvZiB0aGUgc2xpY2VkIFZCSSBkYXRhIHBheWxvYWQKK3VzZWQgd2hlbiAzNiBsaW5lcyBvZiBzbGljZWQgVkJJIGRhdGEgYXJlIHByZXNlbnQuICBObyBsaW5lIG1hc2tzIGFyZQorcHJvdmlkZWQgaW4gdGhpcyBmb3JtIG9mIHRoZSBwYXlsb2FkOyBhbGwgdmFsaWQgbGluZSBtYXNrIGJpdHMgYXJlCitpbXBsY2l0bHkgc2V0LjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1tcGVnLXZiaS1mbXQtaXZ0di1tYWdpYyI+CisgICAgICA8dGl0bGU+TWFnaWMgQ29uc3RhbnRzIGZvciAmdjRsMi1tcGVnLXZiaS1mbXQtaXZ0djsKKwk8c3RydWN0ZmllbGQ+bWFnaWM8L3N0cnVjdGZpZWxkPiBmaWVsZDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWZpbmVkIFN5bWJvbDwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMDwvY29uc3RhbnQ+CisJICAgIDwvZW50cnk+CisJICAgIDxlbnRyeT4iaXR2MCI8L2VudHJ5PgorCSAgICA8ZW50cnk+SW5kaWNhdGVzIHRoZSA8c3RydWN0ZmllbGQ+aXR2MDwvc3RydWN0ZmllbGQ+CittZW1iZXIgb2YgdGhlIHVuaW9uIGluICZ2NGwyLW1wZWctdmJpLWZtdC1pdnR2OyBpcyB2YWxpZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzE8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+IklUVjAiPC9lbnRyeT4KKwkgICAgPGVudHJ5PkluZGljYXRlcyB0aGUgPHN0cnVjdGZpZWxkPklUVjA8L3N0cnVjdGZpZWxkPgorbWVtYmVyIG9mIHRoZSB1bmlvbiBpbiAmdjRsMi1tcGVnLXZiaS1mbXQtaXZ0djsgaXMgdmFsaWQgYW5kCit0aGF0IDM2IGxpbmVzIG9mIHNsaWNlZCBWQkkgZGF0YSBhcmUgcHJlc2VudC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItbXBlZy12YmktaXR2MCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfaXR2MDwvc3RydWN0bmFtZT4KKyAgICAgIDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX2xlMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+Qml0bWFza3MgaW5kaWNhdGluZyB0aGUgVkJJIHNlcnZpY2UgbGluZXMKK3ByZXNlbnQuICBUaGVzZSA8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgYXJlIHN0b3JlZAoraW4gbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyIGluIHRoZSBNUEVHIHN0cmVhbS4gIFNvbWUgcmVmZXJlbmNlCis8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPiBiaXQgcG9zaXRpb25zIHdpdGggdGhlaXIKK2NvcnJlc3BvbmRpbmcgVkJJIGxpbmUgbnVtYmVyIGFuZCB2aWRlbyBmaWVsZCBhcmUgZ2l2ZW4gYmVsb3cuCitiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+IGluZGljYXRlcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGEKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+IHZhbHVlOjxzY3JlZW4+Cis8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPlswXSBiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+OgkJbGluZSAgNgkJZmlyc3QgZmllbGQKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdIGI8c3Vic2NyaXB0PjE3PC9zdWJzY3JpcHQ+OgkJbGluZSAyMwkJZmlyc3QgZmllbGQKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdIGI8c3Vic2NyaXB0PjE4PC9zdWJzY3JpcHQ+OgkJbGluZSAgNgkJc2Vjb25kIGZpZWxkCis8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPlswXSBiPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjoJCWxpbmUgMTkJCXNlY29uZCBmaWVsZAorPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjoJCWxpbmUgMjAJCXNlY29uZCBmaWVsZAorPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gYjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjoJCWxpbmUgMjMJCXNlY29uZCBmaWVsZAorPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gYjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0Pi1iPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjoJdW51c2VkIGFuZCBzZXQgdG8gMDwvc2NyZWVuPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+c3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC1saW5lIj4KKwkgICAgICA8c3RydWN0bmFtZT52NGwyX21wZWdfdmJpX2l0djBfbGluZTwvc3RydWN0bmFtZT48L2xpbms+CisJICAgIDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzM1XTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5IHRoYXQgaG9sZHMgZnJvbSAxCit0byAzNSBsaW5lcyBvZiBzbGljZWQgVkJJIGRhdGEuICBUaGUgc2xpY2VkIFZCSSBkYXRhIGxpbmVzIHByZXNlbnQKK2NvcnJlc3BvbmQgdG8gdGhlIGJpdHMgc2V0IGluIHRoZSA8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPgorYXJyYXksIHN0YXJ0aW5nIGZyb20gYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PiBvZiA8c3RydWN0ZmllbGQ+CitsaW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdIHVwIHRocm91Z2ggYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD4gb2YKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdLCBhbmQgZnJvbSBiPHN1YnNjcmlwdD4wCis8L3N1YnNjcmlwdD4gb2YgPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gdXAgdGhyb3VnaCBiCis8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD4gb2YgPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0uCis8c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzBdIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBiaXQKK2ZvdW5kIHNldCBpbiB0aGUgPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD4gYXJyYXksCis8c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzFdIGNvcnJlc3BvbmRzIHRvIHRoZSBzZWNvbmQgYml0Citmb3VuZCBzZXQgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+IGFycmF5LCBldGMuCitJZiBubyA8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPiBhcnJheSBiaXRzIGFyZSBzZXQsIHRoZW4KKzxzdHJ1Y3RmaWVsZD5saW5lPC9zdHJ1Y3RmaWVsZD5bMF0gbWF5IGNvbnRhaW4gb25lIGxpbmUgb2YKK3Vuc3BlY2lmaWVkIGRhdGEgdGhhdCBzaG91bGQgYmUgaWdub3JlZCBieSBhcHBsaWNhdGlvbnMuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLW1wZWctdmJpLWl0djAtMSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfSVRWMDwvc3RydWN0bmFtZT4KKyAgICAgIDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwLWxpbmUiPgorCSAgICAgIDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfaXR2MF9saW5lPC9zdHJ1Y3RuYW1lPjwvbGluaz4KKwkgICAgPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5saW5lPC9zdHJ1Y3RmaWVsZD5bMzZdPC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgZml4ZWQgbGVuZ3RoIGFycmF5IG9mIDM2IGxpbmVzIG9mIHNsaWNlZCBWQkkKK2RhdGEuICA8c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzBdIHRocm91Z2ggPHN0cnVjdGZpZWxkPmxpbmUKKzwvc3RydWN0ZmllbGQ+WzE3XSBjb3JyZXNwb25kIHRvIGxpbmVzIDYgdGhyb3VnaCAyMyBvZiB0aGUKK2ZpcnN0IGZpZWxkLiAgPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPlsxOF0gdGhyb3VnaAorPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPlszNV0gY29ycmVzcG9uZHMgdG8gbGluZXMgNgordGhyb3VnaCAyMyBvZiB0aGUgc2Vjb25kIGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1tcGVnLXZiaS1pdHYwLWxpbmUiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX21wZWdfdmJpX2l0djBfbGluZTwvc3RydWN0bmFtZT4KKyAgICAgIDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgbGluZSBpZGVudGlmaWVyIHZhbHVlIGZyb20KKzx4cmVmIGxpbmtlbmQ9IklUVjAtTGluZS1JZGVudGlmaWVyLUNvbnN0YW50cyIgLz4gdGhhdCBpbmRpY2F0ZXMKK3RoZSB0eXBlIG9mIHNsaWNlZCBWQkkgZGF0YSBzdG9yZWQgb24gdGhpcyBsaW5lLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD5bNDJdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBzbGljZWQgVkJJIGRhdGEgZm9yIHRoZSBsaW5lLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0iSVRWMC1MaW5lLUlkZW50aWZpZXItQ29uc3RhbnRzIj4KKyAgICAgIDx0aXRsZT5MaW5lIElkZW50aWZpZXJzIGZvciBzdHJ1Y3QgPGxpbmsKKyAgICAgIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC1saW5lIj48c3RydWN0bmFtZT4KK3Y0bDJfbXBlZ192YmlfaXR2MF9saW5lPC9zdHJ1Y3RuYW1lPjwvbGluaz4gPHN0cnVjdGZpZWxkPmlkCis8L3N0cnVjdGZpZWxkPiBmaWVsZDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWZpbmVkIFN5bWJvbDwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZCSV9JVlRWX1RFTEVURVhUX0I8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlciB0byA8bGluayBsaW5rZW5kPSJ2Ymktc2VydmljZXMyIj4KK1NsaWNlZCBWQkkgc2VydmljZXM8L2xpbms+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lIHBheWxvYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVkJJX0lWVFZfQ0FQVElPTl81MjU8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlciB0byA8bGluayBsaW5rZW5kPSJ2Ymktc2VydmljZXMyIj4KK1NsaWNlZCBWQkkgc2VydmljZXM8L2xpbms+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lIHBheWxvYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVkJJX0lWVFZfV1NTXzYyNTwvY29uc3RhbnQ+CisJICAgIDwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlZmVyIHRvIDxsaW5rIGxpbmtlbmQ9InZiaS1zZXJ2aWNlczIiPgorU2xpY2VkIFZCSSBzZXJ2aWNlczwvbGluaz4gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGxpbmUgcGF5bG9hZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WQklfSVZUVl9WUFM8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlciB0byA8bGluayBsaW5rZW5kPSJ2Ymktc2VydmljZXMyIj4KK1NsaWNlZCBWQkkgc2VydmljZXM8L2xpbms+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lIHBheWxvYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi10ZWxldGV4dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi10ZWxldGV4dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxODRlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXRlbGV0ZXh0LnhtbApAQCAtMCwwICsxLDQwIEBACisgIDx0aXRsZT5UZWxldGV4dCBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlRoaXMgaW50ZXJmYWNlIGFpbXMgYXQgZGV2aWNlcyByZWNlaXZpbmcgYW5kIGRlbW9kdWxhdGluZworVGVsZXRleHQgZGF0YSBbPHhyZWYgbGlua2VuZD0iZXRzMzAwNzA2IiAvPiwgPHhyZWYgbGlua2VuZD0iaXR1NjUzIiAvPl0sIGV2YWx1YXRpbmcgdGhlCitUZWxldGV4dCBwYWNrYWdlcyBhbmQgc3RvcmluZyBmb3JtYXR0ZWQgcGFnZXMgaW4gY2FjaGUgbWVtb3J5LiBTdWNoCitkZXZpY2VzIGFyZSB1c3VhbGx5IGltcGxlbWVudGVkIGFzIG1pY3JvY29udHJvbGxlcnMgd2l0aCBzZXJpYWwKK2ludGVyZmFjZSAoSTxzdXBlcnNjcmlwdD4yPC9zdXBlcnNjcmlwdD5DKSBhbmQgY2FuIGJlIGZvdW5kIG9uIG9sZGVyCitUViBjYXJkcywgZGVkaWNhdGVkIFRlbGV0ZXh0IGRlY29kaW5nIGNhcmRzIGFuZCBob21lLWJyZXcgZGV2aWNlcworY29ubmVjdGVkIHRvIHRoZSBQQyBwYXJhbGxlbCBwb3J0LjwvcGFyYT4KKworICA8cGFyYT5UaGUgVGVsZXRleHQgQVBJIHdhcyBkZXNpZ25lZCBieSBNYXJ0aW4gQnVjay4gSXQgaXMgZGVmaW5lZCBpbgordGhlIGtlcm5lbCBoZWFkZXIgZmlsZSA8ZmlsZW5hbWU+bGludXgvdmlkZW90ZXh0Lmg8L2ZpbGVuYW1lPiwgdGhlCitzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIDx1bGluayB1cmw9ImZ0cDovL2Z0cC5nd2RnLmRlL3B1Yi9saW51eC9taXNjL3ZpZGVvdGV4dC8iPgorZnRwOi8vZnRwLmd3ZGcuZGUvcHViL2xpbnV4L21pc2MvdmlkZW90ZXh0LzwvdWxpbms+LiAoVmlkZW90ZXh0IGlzIHRoZSBuYW1lIG9mCit0aGUgR2VybWFuIHB1YmxpYyB0ZWxldmlzaW9uIFRlbGV0ZXh0IHNlcnZpY2UuKSBDb252ZW50aW9uYWwgY2hhcmFjdGVyCitkZXZpY2UgZmlsZSBuYW1lcyBhcmUgPGZpbGVuYW1lPi9kZXYvdnR4PC9maWxlbmFtZT4gYW5kCis8ZmlsZW5hbWU+L2Rldi92dHR1bmVyPC9maWxlbmFtZT4sIHdpdGggZGV2aWNlIG51bWJlciA4MywgMCBhbmQgODMsIDE2CityZXNwZWN0aXZlbHkuIEEgc2ltaWxhciBpbnRlcmZhY2UgZXhpc3RzIGZvciB0aGUgUGhpbGlwcyBTQUE1MjQ5CitUZWxldGV4dCBkZWNvZGVyIFtzcGVjaWZpY2F0aW9uP10gd2l0aCBjaGFyYWN0ZXIgZGV2aWNlIGZpbGUgbmFtZXMKKzxmaWxlbmFtZT4vZGV2L3Rsa048L2ZpbGVuYW1lPiwgZGV2aWNlIG51bWJlciAxMDIsIE4uPC9wYXJhPgorCisgIDxwYXJhPkV2ZW50dWFsbHkgdGhlIFRlbGV0ZXh0IEFQSSB3YXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBWNEwgQVBJCit3aXRoIGNoYXJhY3RlciBkZXZpY2UgZmlsZSBuYW1lcyA8ZmlsZW5hbWU+L2Rldi92dHgwPC9maWxlbmFtZT4gdG8KKzxmaWxlbmFtZT4vZGV2L3Z0eDMxPC9maWxlbmFtZT4sIGRldmljZSBtYWpvciBudW1iZXIgODEsIG1pbm9yIG51bWJlcnMKKzE5MiB0byAyMjMuIEZvciByZWZlcmVuY2UgdGhlIFY0TCBUZWxldGV4dCBBUEkgc3BlY2lmaWNhdGlvbiBpcworcmVwcm9kdWNlZCBoZXJlIGluIGZ1bGw6ICJUZWxldGV4dCBpbnRlcmZhY2VzIHRhbGsgdGhlIGV4aXN0aW5nIFZUWAorQVBJLiIgVGVsZXRleHQgZGV2aWNlcyB3aXRoIG1ham9yIG51bWJlciA4MyBhbmQgMTAyIHdpbGwgYmUgcmVtb3ZlZCBpbgorTGludXggMi42LjwvcGFyYT4KKworICA8cGFyYT5UaGVyZSBhcmUgbm8gcGxhbnMgdG8gcmVwbGFjZSB0aGUgVGVsZXRleHQgQVBJIG9yIHRvIGludGVncmF0ZQoraXQgaW50byBWNEwyLiBQbGVhc2Ugd3JpdGUgdG8gdGhlIGxpbnV4LW1lZGlhIG1haWxpbmcgbGlzdDogJnY0bC1tbDsKK3doZW4gdGhlIG5lZWQgYXJpc2VzLjwvcGFyYT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZHJpdmVyLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZHJpdmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdlZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kcml2ZXIueG1sCkBAIC0wLDAgKzEsMjA4IEBACisgIDx0aXRsZT5WNEwyIERyaXZlciBQcm9ncmFtbWluZzwvdGl0bGU+CisKKyAgPCEtLSBUaGlzIHBhcnQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJ2aWRlb2RldiIKKyAgICBtb2R1bGUgYW5kIGluZGl2aWR1YWwgZHJpdmVycy4gLS0+CisKKyAgPHBhcmE+dG8gZG88L3BhcmE+Cis8IS0tCisgIDxwYXJhPlY0TDIgaXMgYSB0d28tbGF5ZXIgZHJpdmVyIHN5c3RlbS4gVGhlIHRvcCBsYXllciBpcyB0aGUgInZpZGVvZGV2Igora2VybmVsIG1vZHVsZS4gV2hlbiB2aWRlb2RldiBpbml0aWFsaXplcyBpdCByZWdpc3RlcnMgYXMgY2hhcmFjdGVyIGRldmljZQord2l0aCBtYWpvciBudW1iZXIgODEsIGFuZCBpdCByZWdpc3RlcnMgYSBzZXQgb2YgZmlsZSBvcGVyYXRpb25zLiBBbGwgVjRMMgorZHJpdmVycyBhcmUgcmVhbGx5IGNsaWVudHMgb2YgdmlkZW9kZXYsIHdoaWNoIGNhbGxzIFY0TDIgZHJpdmVycyB0aHJvdWdoCitkcml2ZXIgbWV0aG9kIGZ1bmN0aW9ucy4gVjRMMiBkcml2ZXJzIGFyZSBhbHNvIHdyaXR0ZW4gYXMga2VybmVsIG1vZHVsZXMuCitBZnRlciBwcm9iaW5nIHRoZSBoYXJkd2FyZSB0aGV5IHJlZ2lzdGVyIG9uZSBvciBtb3JlIGRldmljZXMgd2l0aAordmlkZW9kZXYuPC9wYXJhPgorCisgIDxzZWN0aW9uIGlkPSJkcml2ZXItbW9kdWxlcyI+CisgICAgPHRpdGxlPkRyaXZlciBNb2R1bGVzPC90aXRsZT4KKworICAgIDxwYXJhPlY0TDIgZHJpdmVyIG1vZHVsZXMgbXVzdCBoYXZlIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdoaWNoIGlzCitjYWxsZWQgYWZ0ZXIgdGhlIG1vZHVsZSB3YXMgbG9hZGVkIGludG8ga2VybmVsLCBhbiBleGl0IGZ1bmN0aW9uIHdoaXMgaXMKK2NhbGxlZCBiZWZvcmUgdGhlIG1vZHVsZSBpcyByZW1vdmVkLiAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlCitrZXJuZWwgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZCBhdCBzeXN0ZW0gYm9vdCBhbmQgc2h1dGRvd24gdGltZS48L3BhcmE+CisKKyAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OworCisvKiBFeHBvcnQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtb2R1bGUuIEZvciBkZXRhaWxzIGFuZCBvdGhlciB1c2VmdWwKKyAgIG1hY3JvcyBzZWUgPGZpbGVuYW1lPmxpbnV4L21vZHVsZS5oPC9maWxlbmFtZT4uICovCitNT0RVTEVfREVTQ1JJUFRJT04oIm15IC0gZHJpdmVyIGZvciBteSBoYXJkd2FyZSIpOworTU9EVUxFX0FVVEhPUigiWW91ciBuYW1lIGhlcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHZvaWQKK215X21vZHVsZV9leGl0ICh2b2lkKQoreworCS8qIEZyZWUgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgbXlfbW9kdWxlX2luaXQoKS4gKi8KK30KKworc3RhdGljIGludAorbXlfbW9kdWxlX2luaXQgKHZvaWQpCit7CisJLyogQmluZCB0aGUgZHJpdmVyIHRvIHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUsIHNlZQorCSAgIDxsaW5rIGxpbmtlbmQ9ImRyaXZlci1wY2kiPiBhbmQKKwkgICA8bGluayBsaW5rZW5kPSJkcml2ZXItdXNiIj4gZm9yIGV4YW1wbGVzLiAqLworCisJcmV0dXJuIDA7IC8qIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4gKi8KK30KKworLyogRXhwb3J0IG1vZHVsZSBmdW5jdGlvbnMuICovCittb2R1bGVfaW5pdCAobXlfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQgKG15X21vZHVsZV9leGl0KTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICA8cGFyYT5Vc2VycyBjYW4gYWRkIHBhcmFtZXRlcnMgd2hlbiBrZXJuZWwgbW9kdWxlcyBhcmUgaW5zZXJ0ZWQ6PC9wYXJhPgorCisgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZXBhcmFtLmgmZ3Q7CisKK3N0YXRpYyBpbnQgbXlfb3B0aW9uID0gMTIzOworc3RhdGljIGludCBteV9vcHRpb25fYXJyYXlbNDddOworCisvKiBFeHBvcnQgdGhlIHN5bWJvbCwgYW4gaW50LCB3aXRoIGFjY2VzcyBwZXJtaXNzaW9ucyAwNjY0LgorICAgU2VlIDxmaWxlbmFtZT5saW51eC9tb2R1bGVwYXJhbS5oPC9maWxlbmFtZT4gZm9yIG90aGVyIHR5cGVzLiAqLworbW9kdWxlX3BhcmFtIChteV9vcHRpb24sIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkgKG15X29wdGlvbl9hcnJheSwgaW50LCBOVUxMLCAwNjQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyAobXlfb3B0aW9uLCAiRG9lcyBtYWdpYyB0aGluZ3MsIGRlZmF1bHQgMTIzIik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgPHBhcmE+T25lIHBhcmFtZXRlciBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IGFsbCBWNEwyIGRyaXZlcnMsIHRoZSBtaW5vcgorbnVtYmVyIG9mIHRoZSBkZXZpY2UgaXQgd2lsbCByZWdpc3Rlci4gUHVycG9zZSBpcyB0byBwcmVkaWN0YWJseSBsaW5rIFY0TDIKK2RyaXZlcnMgdG8gZGV2aWNlIG5vZGVzIGlmIG1vcmUgdGhhbiBvbmUgdmlkZW8gZGV2aWNlIGlzIGluc3RhbGxlZC4gVXNlIHRoZQorbmFtZSBvZiB0aGUgZGV2aWNlIG5vZGUgZm9sbG93ZWQgYnkgYSAiX25yIiBzdWZmaXgsIGZvciBleGFtcGxlICJ2aWRlb19uciIKK2ZvciA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+LjwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisvKiBNaW5vciBudW1iZXIgb2YgdGhlIGRldmljZSwgLTEgdG8gYWxsb2NhdGUgdGhlIGZpcnN0IHVudXNlZC4gKi8KK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKworbW9kdWxlX3BhcmFtICh2aWRlb19uciwgaW50LCAwNDQ0KTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iZHJpdmVyLXBjaSI+CisgICAgPHRpdGxlPlBDSSBEZXZpY2VzPC90aXRsZT4KKworICAgIDxwYXJhPlBDSSBkZXZpY2VzIGFyZSBpbml0aWFsaXplZCBsaWtlIHRoaXM6PC9wYXJhPgorCisgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgc3RydWN0IHsKKwkvKiBTdGF0ZSBvZiBvbmUgcGh5c2ljYWwgZGV2aWNlLiAqLworfSBteV9kZXZpY2U7CisKK3N0YXRpYyBpbnQKK215X3Jlc3VtZSAgICAgICAgICAgICAgIChzdHJ1Y3QgcGNpX2RldiAqICAgICAgICAgICAgICAgcGNpX2RldikKK3sKKwkvKiBSZXN0b3JlIHRoZSBzdXNwZW5kZWQgZGV2aWNlIHRvIHdvcmtpbmcgc3RhdGUuICovCit9CisKK3N0YXRpYyBpbnQKK215X3N1c3BlbmQgICAgICAgICAgICAgIChzdHJ1Y3QgcGNpX2RldiAqICAgICAgICAgICAgICAgcGNpX2RldiwKKwkJCSBwbV9tZXNzYWdlX3QgICAgICAgICAgICAgICAgICAgc3RhdGUpCit7CisJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRoZSBzeXN0ZW0gZ29lcyB0byBzbGVlcC4KKwkgICBTdG9wIGFsbCBETUFzIGFuZCBkaXNhYmxlIGludGVycnVwdHMsIHRoZW4gcHV0IHRoZSBkZXZpY2UKKwkgICBpbnRvIGEgbG93IHBvd2VyIHN0YXRlLiBGb3IgZGV0YWlscyBzZWUgdGhlIGtlcm5lbAorCSAgIHNvdXJjZXMgdW5kZXIgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vcG93ZXI8L2ZpbGVuYW1lPi4gKi8KKworCXJldHVybiAwOyAvKiBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuICovCit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdAorbXlfcmVtb3ZlICAgICAgICAgICAgICAgKHN0cnVjdCBwY2lfZGV2ICogICAgICAgICAgICAgICBwY2lfZGV2KQoreworCW15X2RldmljZSAqbXkgPSBwY2lfZ2V0X2RydmRhdGEgKHBjaV9kZXYpOworCisJLyogRGVzY3JpYmUgbWUuICovCit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitteV9wcm9iZSAgICAgICAgICAgICAgICAoc3RydWN0IHBjaV9kZXYgKiAgICAgICAgICAgICAgIHBjaV9kZXYsCisJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKiAgIHBjaV9pZCkKK3sKKwlteV9kZXZpY2UgKm15OworCisJLyogRGVzY3JpYmUgbWUuICovCisKKwkvKiBZb3UgY2FuIGFsbG9jYXRlIHBlci1kZXZpY2UgZGF0YSBoZXJlIGFuZCBzdG9yZSBhIHBvaW50ZXIKKwkgICB0byBpdCBpbiB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUuICovCisJbXkgPSAuLi47CisJcGNpX3NldF9kcnZkYXRhIChwY2lfZGV2LCBteSk7CisKKwlyZXR1cm4gMDsgLyogYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLiAqLworfQorCisvKiBBIGxpc3Qgb2Ygc3VwcG9ydGVkIFBDSSBkZXZpY2VzLiAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkCitteV9wY2lfZGV2aWNlX2lkcyBbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IDAgfSAvKiBlbmQgb2YgbGlzdCAqLworfTsKKworLyogTG9hZCBvdXIgbW9kdWxlIGlmIHN1cHBvcnRlZCBQQ0kgZGV2aWNlcyBhcmUgaW5zdGFsbGVkLiAqLworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBteV9wY2lfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlcgorbXlfcGNpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgPSAibXkiLAorCS5pZF90YWJsZSA9IG15X3BjaV9kZXZpY2VfaWRzLAorCisJLnByb2JlICAgID0gbXlfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AgKG15X3JlbW92ZSksCisKKwkvKiBQb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gKi8KKwkuc3VzcGVuZCAgPSBteV9zdXNwZW5kLAorCS5yZXN1bWUgICA9IG15X3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkCitteV9tb2R1bGVfZXhpdCAgICAgICAgICAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZteV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIGludAorbXlfbW9kdWxlX2luaXQgICAgICAgICAgKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIgKCZteV9wY2lfZHJpdmVyKTsKK30KKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iZHJpdmVyLXVzYiI+CisgICAgPHRpdGxlPlVTQiBEZXZpY2VzPC90aXRsZT4KKyAgICA8cGFyYT50byBkbzwvcGFyYT4KKyAgPC9zZWN0aW9uPgorICA8c2VjdGlvbiBpZD0iZHJpdmVyLXJlZ2lzdGVyaW5nIj4KKyAgICA8dGl0bGU+UmVnaXN0ZXJpbmcgVjRMMiBEcml2ZXJzPC90aXRsZT4KKworICAgIDxwYXJhPkFmdGVyIGEgVjRMMiBkcml2ZXIgcHJvYmVkIHRoZSBoYXJkd2FyZSBpdCByZWdpc3RlcnMgb25lIG9yIG1vcmUKK2RldmljZXMgd2l0aCB0aGUgdmlkZW9kZXYgbW9kdWxlLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorICA8c2VjdGlvbiBpZD0iZHJpdmVyLWZpbGUtb3BzIj4KKyAgICA8dGl0bGU+RmlsZSBPcGVyYXRpb25zPC90aXRsZT4KKyAgICA8cGFyYT50byBkbzwvcGFyYT4KKyAgPC9zZWN0aW9uPgorICA8c2VjdGlvbiBpZD0iZHJpdmVyLWludGVybmFsLWFwaSI+CisgICAgPHRpdGxlPkludGVybmFsIEFQSTwvdGl0bGU+CisgICAgPHBhcmE+dG8gZG88L3BhcmE+CisgIDwvc2VjdGlvbj4KKy0tPgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZkbC1hcHBlbmRpeC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZkbC1hcHBlbmRpeC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjZTUwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZmRsLWFwcGVuZGl4LnhtbApAQCAtMCwwICsxLDY3MSBAQAorPCEtLQorICAgICBUaGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIDEuMSBpbiBEb2NCb29rCisgICAgIE1hcmt1cCBieSBFcmljIEJhdWRhaXMgPGJhdWRhaXNAb2tzdGF0ZS5lZHU+CisgICAgIE1haW50YWluZWQgYnkgdGhlIEdOT01FIERvY3VtZW50YXRpb24gUHJvamVjdAorICAgICBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9wcm9qZWN0cy9nZHAKKyAgICAgVmVyc2lvbjogMS4wLjEKKyAgICAgTGFzdCBNb2RpZmllZDogTm92IDE2LCAyMDAwCistLT4KKworPGFwcGVuZGl4IGlkPSJmZGwiPgorICA8YXBwZW5kaXhpbmZvPgorICAgIDxyZWxlYXNlaW5mbz4KKyAgICAgIFZlcnNpb24gMS4xLCBNYXJjaCAyMDAwCisgICAgPC9yZWxlYXNlaW5mbz4KKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+MjAwMDwveWVhcj48aG9sZGVyPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorICAgIDxsZWdhbG5vdGljZSBpZD0iZmRsLWxlZ2Fsbm90aWNlIj4KKyAgICAgIDxwYXJhPgorCTxhZGRyZXNzPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8c3RyZWV0PjU5IFRlbXBsZSBQbGFjZSwKKwlTdWl0ZSAzMzA8L3N0cmVldD4sIDxjaXR5PkJvc3RvbjwvY2l0eT4sIDxzdGF0ZT5NQTwvc3RhdGU+CisJPHBvc3Rjb2RlPjAyMTExLTEzMDc8L3Bvc3Rjb2RlPiAgPGNvdW50cnk+VVNBPC9jb3VudHJ5PjwvYWRkcmVzcz4KKwlFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworCWxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorICA8L2FwcGVuZGl4aW5mbz4KKyAgPHRpdGxlPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvdGl0bGU+CisKKyAgPHNlY3QxIGlkPSJmZGwtcHJlYW1ibGUiPgorICAgIDx0aXRsZT4wLiBQUkVBTUJMRTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yCisgICAgICBvdGhlciB3cml0dGVuIGRvY3VtZW50IDxxdW90ZT5mcmVlPC9xdW90ZT4gaW4gdGhlIHNlbnNlIG9mCisgICAgICBmcmVlZG9tOiB0byBhc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kCisgICAgICByZWRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlcgorICAgICAgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4gU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZQorICAgICAgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkgdG8gZ2V0IGNyZWRpdCBmb3IKKyAgICAgIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlIGZvcgorICAgICAgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgPHF1b3RlPmNvcHlsZWZ0PC9xdW90ZT4sIHdoaWNoIG1lYW5zCisgICAgICB0aGF0IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluCisgICAgICB0aGUgc2FtZSBzZW5zZS4gSXQgY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICAgICAgd2hpY2ggaXMgYSBjb3B5bGVmdCBsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvcgorICAgICAgZnJlZSBzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYQorICAgICAgZnJlZSBwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUKKyAgICAgIGZyZWVkb21zIHRoYXQgdGhlIHNvZnR3YXJlIGRvZXMuIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQKKyAgICAgIHRvIHNvZnR3YXJlIG1hbnVhbHM7IGl0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLAorICAgICAgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvciB3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhCisgICAgICBwcmludGVkIGJvb2suIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UgcHJpbmNpcGFsbHkgZm9yIHdvcmtzCisgICAgICB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0iZmRsLXNlY3Rpb24xIj4KKyAgICA8dGl0bGU+MS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlM8L3RpdGxlPgorICAgIDxwYXJhIGlkPSJmZGwtZG9jdW1lbnQiPgorICAgICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrIHRoYXQgY29udGFpbnMgYQorICAgICAgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCisgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGUKKyAgICAgIDxxdW90ZT5Eb2N1bWVudDwvcXVvdGU+LCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvcgorICAgICAgd29yay4gQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEgbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQKKyAgICAgIGFzIDxxdW90ZT55b3U8L3F1b3RlPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYSBpZD0iZmRsLW1vZGlmaWVkIj4KKyAgICAgIEEgPHF1b3RlPk1vZGlmaWVkIFZlcnNpb248L3F1b3RlPiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsKKyAgICAgIGNvbnRhaW5pbmcgdGhlIERvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZAorICAgICAgdmVyYmF0aW0sIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKyAgICAgIGxhbmd1YWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhIGlkPSJmZGwtc2Vjb25kYXJ5Ij4KKyAgICAgIEEgPHF1b3RlPlNlY29uZGFyeSBTZWN0aW9uPC9xdW90ZT4gaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhCisgICAgICBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZiB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkKKyAgICAgIHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZQorICAgICAgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbCBzdWJqZWN0IChvciB0byByZWxhdGVkCisgICAgICBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkgd2l0aGluCisgICAgICB0aGF0IG92ZXJhbGwgc3ViamVjdC4gKEZvciBleGFtcGxlLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCisgICAgICB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CisgICAgICBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKKyAgICAgIGNvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YKKyAgICAgIGxlZ2FsLCBjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbgorICAgICAgcmVnYXJkaW5nIHRoZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9ImZkbC1pbnZhcmlhbnQiPgorICAgICAgVGhlIDxxdW90ZT5JbnZhcmlhbnQgU2VjdGlvbnM8L3F1b3RlPiBhcmUgY2VydGFpbiA8bGluaworICAgICAgbGlua2VuZD0iZmRsLXNlY29uZGFyeSI+IFNlY29uZGFyeSBTZWN0aW9uczwvbGluaz4gd2hvc2UgdGl0bGVzCisgICAgICBhcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUKKyAgICAgIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMKKyAgICAgIExpY2Vuc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9ImZkbC1jb3Zlci10ZXh0cyI+CisgICAgICBUaGUgPHF1b3RlPkNvdmVyIFRleHRzPC9xdW90ZT4gYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YKKyAgICAgIHRleHQgdGhhdCBhcmUgbGlzdGVkLCBhcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLAorICAgICAgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMKKyAgICAgIExpY2Vuc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9ImZkbC10cmFuc3BhcmVudCI+CisgICAgICBBIDxxdW90ZT5UcmFuc3BhcmVudDwvcXVvdGU+IGNvcHkgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPiBEb2N1bWVudDwvbGluaz4gbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlCisgICAgICBjb3B5LCByZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZQorICAgICAgdG8gdGhlIGdlbmVyYWwgcHVibGljLCB3aG9zZSBjb250ZW50cyBjYW4gYmUgdmlld2VkIGFuZCBlZGl0ZWQKKyAgICAgIGRpcmVjdGx5IGFuZCBzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IKKyAgICAgIGltYWdlcyBjb21wb3NlZCBvZiBwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvcgorICAgICAgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZSBkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMKKyAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IgZm9yIGF1dG9tYXRpYworICAgICAgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQKKyAgICAgIGZvcm1hdHRlcnMuIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlIGZvcm1hdAorICAgICAgd2hvc2UgbWFya3VwIGhhcyBiZWVuIGRlc2lnbmVkIHRvIHRod2FydCBvciBkaXNjb3VyYWdlCisgICAgICBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gIEEgY29weQorICAgICAgdGhhdCBpcyBub3QgPHF1b3RlPlRyYW5zcGFyZW50PC9xdW90ZT4gaXMgY2FsbGVkCisgICAgICA8cXVvdGU+T3BhcXVlPC9xdW90ZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZQorICAgICAgcGxhaW4gQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dAorICAgICAgZm9ybWF0LCBTR01MIG9yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZAorICAgICAgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUgSFRNTCBkZXNpZ25lZCBmb3IgaHVtYW4KKyAgICAgIG1vZGlmaWNhdGlvbi4gT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBQb3N0U2NyaXB0LCBQREYsCisgICAgICBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5CisgICAgICBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFRECisgICAgICBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKKyAgICAgIG1hY2hpbmUtZ2VuZXJhdGVkIEhUTUwgcHJvZHVjZWQgYnkgc29tZSB3b3JkIHByb2Nlc3NvcnMgZm9yCisgICAgICBvdXRwdXQgcHVycG9zZXMgb25seS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYSBpZD0iZmRsLXRpdGxlLXBhZ2UiPgorICAgICAgVGhlIDxxdW90ZT5UaXRsZSBQYWdlPC9xdW90ZT4gbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlCisgICAgICB0aXRsZSBwYWdlIGl0c2VsZiwgcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvCisgICAgICBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwgdGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbgorICAgICAgdGhlIHRpdGxlIHBhZ2UuIEZvciB3b3JrcyBpbiBmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZQorICAgICAgcGFnZSBhcyBzdWNoLCA8cXVvdGU+VGl0bGUgUGFnZTwvcXVvdGU+IG1lYW5zIHRoZSB0ZXh0IG5lYXIgdGhlCisgICAgICBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsIHByZWNlZGluZyB0aGUKKyAgICAgIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjIiPgorICAgIDx0aXRsZT4yLiBWRVJCQVRJTSBDT1BZSU5HPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGluIGFueSBtZWRpdW0sIGVpdGhlcgorICAgICAgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorICAgICAgY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZQorICAgICAgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAgICAgIHlvdSBhZGQgbm8gb3RoZXIgY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMKKyAgICAgIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IKKyAgICAgIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlciBjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IKKyAgICAgIGRpc3RyaWJ1dGUuIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0IGNvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IKKyAgICAgIGNvcGllcy4gSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGNvcGllcyB5b3UKKyAgICAgIG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1zZWN0aW9uMyI+c2VjdGlvbiAzPC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFlvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQKKyAgICAgIGFib3ZlLCBhbmQgeW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC1zZWN0aW9uMyI+CisgICAgPHRpdGxlPjMuIENPUFlJTkcgSU4gUVVBTlRJVFk8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwKKyAgICAgIGFuZCB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Db3ZlciBUZXh0czwvbGluaz4sIHlvdSBtdXN0IGVuY2xvc2UKKyAgICAgIHRoZSBjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZQorICAgICAgQ292ZXIgVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kCisgICAgICBCYWNrLUNvdmVyIFRleHRzIG9uIHRoZSBiYWNrIGNvdmVyLiBCb3RoIGNvdmVycyBtdXN0IGFsc28KKyAgICAgIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkgeW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UKKyAgICAgIGNvcGllcy4gVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudCB0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbAorICAgICAgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZCB2aXNpYmxlLiBZb3UgbWF5IGFkZAorICAgICAgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4gQ29weWluZyB3aXRoIGNoYW5nZXMKKyAgICAgIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlIHRoZSB0aXRsZSBvZiB0aGUKKyAgICAgIDxsaW5rIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGFuZCBzYXRpc2Z5IHRoZXNlCisgICAgICBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZCBhcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyCisgICAgICByZXNwZWN0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKKyAgICAgIGxlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKKyAgICAgIHJlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvCisgICAgICBhZGphY2VudCBwYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC10cmFuc3BhcmVudCI+T3BhcXVlPC9saW5rPiBjb3BpZXMgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwKKyAgICAgIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLXRyYW5zcGFyZW50Ij5UcmFuc3BhcmVudDwvbGluaz4gY29weSBhbG9uZyB3aXRoCisgICAgICBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkgYQorICAgICAgcHVibGljbHktYWNjZXNzaWJsZSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGNvbnRhaW5pbmcgYQorICAgICAgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQKKyAgICAgIG1hdGVyaWFsLCB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nIHB1YmxpYyBoYXMgYWNjZXNzIHRvCisgICAgICBkb3dubG9hZCBhbm9ueW1vdXNseSBhdCBubyBjaGFyZ2UgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsKKyAgICAgIHByb3RvY29scy4gSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZQorICAgICAgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLCB3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlCisgICAgICBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZSB0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsCisgICAgICByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQgbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lCisgICAgICB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4gT3BhcXVlIGNvcHkgKGRpcmVjdGx5CisgICAgICBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdCBlZGl0aW9uIHRvIHRoZQorICAgICAgcHVibGljLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzCisgICAgICBvZiB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gd2VsbCBiZWZvcmUKKyAgICAgIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlIHRoZW0gYSBjaGFuY2UKKyAgICAgIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC1zZWN0aW9uNCI+CisgICAgPHRpdGxlPjQuIE1PRElGSUNBVElPTlM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbjwvbGluaz4gb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiB1bmRlciB0aGUgY29uZGl0aW9ucyBvZgorICAgICAgc2VjdGlvbnMgPGxpbmsgbGlua2VuZD0iZmRsLXNlY3Rpb24yIj4yPC9saW5rPiBhbmQgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1zZWN0aW9uMyI+MzwvbGluaz4gYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKKyAgICAgIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlCisgICAgICBNb2RpZmllZCBWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzCisgICAgICBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24KKyAgICAgIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weSBvZiBpdC4gSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvCisgICAgICB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisgICAgPC9wYXJhPgorCisgICAgPGl0ZW1pemVkbGlzdCBtYXJrPSJvcGVuY2lyY2xlIj4KKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5BPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBVc2UgaW4gdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC10aXRsZS1wYWdlIj5UaXRsZQorCSAgICBQYWdlPC9saW5rPiAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorCSAgICBmcm9tIHRoYXQgb2YgdGhlIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+LCBhbmQgZnJvbSB0aG9zZSBvZgorCSAgICBwcmV2aW91cyB2ZXJzaW9ucyAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUKKwkgICAgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24gb2YgdGhlIERvY3VtZW50KS4gWW91IG1heQorCSAgICB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uIGlmIHRoZSBvcmlnaW5hbAorCSAgICBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkI8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIExpc3Qgb24gdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC10aXRsZS1wYWdlIj5UaXRsZQorCSAgICBQYWdlPC9saW5rPiwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworCSAgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUKKwkgICAgPGxpbmsgbGlua2VuZD0iZmRsLW1vZGlmaWVkIj5Nb2RpZmllZCBWZXJzaW9uPC9saW5rPiwKKwkgICAgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZgorCSAgICB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gKGFsbCBvZgorCSAgICBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBsZXNzIHRoYW4gZml2ZSkuCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkM8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIFN0YXRlIG9uIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtdGl0bGUtcGFnZSI+VGl0bGUKKwkgICAgUGFnZTwvbGluaz4gdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLW1vZGlmaWVkIj5Nb2RpZmllZCBWZXJzaW9uPC9saW5rPiwgYXMgdGhlCisJICAgIHB1Ymxpc2hlci4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+RDwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4uCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkU8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKwkgICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5GPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEKKwkgICAgbGljZW5zZSBub3RpY2UgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlCisJICAgIDxsaW5rIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbjwvbGluaz4gdW5kZXIKKwkgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlCisJICAgIEFkZGVuZHVtIGJlbG93LgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5HPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1pbnZhcmlhbnQiPiBJbnZhcmlhbnQgU2VjdGlvbnM8L2xpbms+IGFuZAorCSAgICByZXF1aXJlZCA8bGluayBsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkNvdmVyCisJICAgIFRleHRzPC9saW5rPiBnaXZlbiBpbiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudCdzPC9saW5rPiBsaWNlbnNlIG5vdGljZS4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+SDwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkk8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIFByZXNlcnZlIHRoZSBzZWN0aW9uIGVudGl0bGVkIDxxdW90ZT5IaXN0b3J5PC9xdW90ZT4sIGFuZAorCSAgICBpdHMgdGl0bGUsIGFuZCBhZGQgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZQorCSAgICB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbiA8L2xpbms+YXMgZ2l2ZW4gb24KKwkgICAgdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC10aXRsZS1wYWdlIj5UaXRsZSBQYWdlPC9saW5rPi4gIElmCisJICAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gZW50aXRsZWQgPHF1b3RlPkhpc3Rvcnk8L3F1b3RlPiBpbiB0aGUKKwkgICAgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4sIGNyZWF0ZSBvbmUKKwkgICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlCisJICAgIERvY3VtZW50IGFzIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtCisJICAgIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cworCSAgICBzZW50ZW5jZS4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+SjwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGZvciBwdWJsaWMgYWNjZXNzCisJICAgIHRvIGEgPGxpbmsgbGlua2VuZD0iZmRsLXRyYW5zcGFyZW50Ij5UcmFuc3BhcmVudDwvbGluaz4KKwkgICAgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZSB0aGUgbmV0d29yayBsb2NhdGlvbnMKKwkgICAgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucyBpdCB3YXMgYmFzZWQKKwkgICAgb24uIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlIDxxdW90ZT5IaXN0b3J5PC9xdW90ZT4KKwkgICAgc2VjdGlvbi4gIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0CisJICAgIHdhcyBwdWJsaXNoZWQgYXQgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50CisJICAgIGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdAorCSAgICByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+SzwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgSW4gYW55IHNlY3Rpb24gZW50aXRsZWQgPHF1b3RlPkFja25vd2xlZGdlbWVudHM8L3F1b3RlPiBvcgorCSAgICA8cXVvdGU+RGVkaWNhdGlvbnM8L3F1b3RlPiwgcHJlc2VydmUgdGhlIHNlY3Rpb24ncyB0aXRsZSwKKwkgICAgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mCisJICAgIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMgYW5kL29yCisJICAgIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkw8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIFByZXNlcnZlIGFsbCB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisJICAgIFNlY3Rpb25zPC9saW5rPiBvZiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4sIHVuYWx0ZXJlZCBpbiB0aGVpcgorCSAgICB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMgb3IgdGhlCisJICAgIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5NPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBEZWxldGUgYW55IHNlY3Rpb24gZW50aXRsZWQKKwkgICAgPHF1b3RlPkVuZG9yc2VtZW50czwvcXVvdGU+LiBTdWNoIGEgc2VjdGlvbiBtYXkgbm90IGJlCisJICAgIGluY2x1ZGVkIGluIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkCisJICAgIFZlcnNpb248L2xpbms+LgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5OPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiBhcworCSAgICA8cXVvdGU+RW5kb3JzZW1lbnRzPC9xdW90ZT4gb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aAorCSAgICBhbnkgPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisJICAgIFNlY3Rpb248L2xpbms+LgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb248L2xpbms+CisgICAgICBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yIGFwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzCisgICAgICA8bGluayBsaW5rZW5kPSJmZGwtc2Vjb25kYXJ5Ij5TZWNvbmRhcnkgU2VjdGlvbnM8L2xpbms+IGFuZAorICAgICAgY29udGFpbiBubyBtYXRlcmlhbCBjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91cgorICAgICAgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbCBvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuIFRvCisgICAgICBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZSBsaXN0IG9mIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtaW52YXJpYW50Ij5JbnZhcmlhbnQgU2VjdGlvbnM8L2xpbms+IGluIHRoZQorICAgICAgTW9kaWZpZWQgVmVyc2lvbidzIGxpY2Vuc2Ugbm90aWNlLiAgVGhlc2UgdGl0bGVzIG11c3QgYmUKKyAgICAgIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgWW91IG1heSBhZGQgYSBzZWN0aW9uIGVudGl0bGVkIDxxdW90ZT5FbmRvcnNlbWVudHM8L3F1b3RlPiwKKyAgICAgIHByb3ZpZGVkIGl0IGNvbnRhaW5zIG5vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb248L2xpbms+IGJ5IHZhcmlvdXMKKyAgICAgIHBhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQKKyAgICAgIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZQorICAgICAgZGVmaW5pdGlvbiBvZiBhIHN0YW5kYXJkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Gcm9udC1Db3ZlciBUZXh0PC9saW5rPiwgYW5kIGEgcGFzc2FnZQorICAgICAgb2YgdXAgdG8gMjUgd29yZHMgYXMgYSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5CYWNrLUNvdmVyIFRleHQ8L2xpbms+LCB0byB0aGUgZW5kIG9mCisgICAgICB0aGUgbGlzdCBvZiA8bGluayBsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkNvdmVyIFRleHRzPC9saW5rPgorICAgICAgaW4gdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbjwvbGluaz4uCisgICAgICBPbmx5IG9uZSBwYXNzYWdlIG9mIEZyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQKKyAgICAgIG1heSBiZSBhZGRlZCBieSAob3IgdGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZQorICAgICAgZW50aXR5LiBJZiB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4KKyAgICAgIGFscmVhZHkgaW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseQorICAgICAgYWRkZWQgYnkgeW91IG9yIGJ5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUKKyAgICAgIGFjdGluZyBvbiBiZWhhbGYgb2YsIHlvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heQorICAgICAgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cworICAgICAgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCisgICAgICBnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvCisgICAgICBhc3NlcnQgb3IgaW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb24gPC9saW5rPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjUiPgorICAgIDx0aXRsZT41LiBDT01CSU5JTkcgRE9DVU1FTlRTPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFlvdSBtYXkgY29tYmluZSB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4KKyAgICAgIHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgdW5kZXIgdGhlCisgICAgICB0ZXJtcyBkZWZpbmVkIGluIDxsaW5rIGxpbmtlbmQ9ImZkbC1zZWN0aW9uNCI+c2VjdGlvbiA0PC9saW5rPgorICAgICAgYWJvdmUgZm9yIG1vZGlmaWVkIHZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZQorICAgICAgY29tYmluYXRpb24gYWxsIG9mIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtaW52YXJpYW50Ij5JbnZhcmlhbnQKKyAgICAgIFNlY3Rpb25zPC9saW5rPiBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwKKyAgICAgIGFuZCBsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4KKyAgICAgIGl0cyBsaWNlbnNlIG5vdGljZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwKKyAgICAgIGFuZCBtdWx0aXBsZSBpZGVudGljYWwgPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisgICAgICBTZWN0aW9uczwvbGluaz4gbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgY29weS4gSWYgdGhlcmUgYXJlCisgICAgICBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBkaWZmZXJlbnQKKyAgICAgIGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkgYWRkaW5nCisgICAgICBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCisgICAgICBhdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZQorICAgICAgbnVtYmVyLiBNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZQorICAgICAgbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZAorICAgICAgd29yay4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEluIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgZW50aXRsZWQKKyAgICAgIDxxdW90ZT5IaXN0b3J5PC9xdW90ZT4gaW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLAorICAgICAgZm9ybWluZyBvbmUgc2VjdGlvbiBlbnRpdGxlZCA8cXVvdGU+SGlzdG9yeTwvcXVvdGU+OyBsaWtld2lzZQorICAgICAgY29tYmluZSBhbnkgc2VjdGlvbnMgZW50aXRsZWQgPHF1b3RlPkFja25vd2xlZGdlbWVudHM8L3F1b3RlPiwKKyAgICAgIGFuZCBhbnkgc2VjdGlvbnMgZW50aXRsZWQgPHF1b3RlPkRlZGljYXRpb25zPC9xdW90ZT4uICBZb3UgbXVzdAorICAgICAgZGVsZXRlIGFsbCBzZWN0aW9ucyBlbnRpdGxlZCA8cXVvdGU+RW5kb3JzZW1lbnRzLjwvcXVvdGU+CisgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjYiPgorICAgIDx0aXRsZT42LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gYW5kIG90aGVyIGRvY3VtZW50cworICAgICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQKKyAgICAgIGlzIGluY2x1ZGVkIGluIHRoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlCisgICAgICBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUKKyAgICAgIGRvY3VtZW50cyBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kCisgICAgICBkaXNwYmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdQorICAgICAgaW5zZXJ0IGEgY29weSBvZiB0aGlzIExpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQKKyAgICAgIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsIG90aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbQorICAgICAgY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iZmRsLXNlY3Rpb243Ij4KKyAgICA8dGl0bGU+Ny4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBIGNvbXBpbGF0aW9uIG9mIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gb3IgaXRzIGRlcml2YXRpdmVzIHdpdGgKKyAgICAgIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEKKyAgICAgIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgZG9lcyBub3QgYXMgYSB3aG9sZQorICAgICAgY291bnQgYXMgYSA8bGluayBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb248L2xpbms+CisgICAgICBvZiB0aGUgRG9jdW1lbnQsIHByb3ZpZGVkIG5vIGNvbXBpbGF0aW9uIGNvcHlyaWdodCBpcyBjbGFpbWVkCisgICAgICBmb3IgdGhlIGNvbXBpbGF0aW9uLiAgU3VjaCBhIGNvbXBpbGF0aW9uIGlzIGNhbGxlZCBhbgorICAgICAgPHF1b3RlPmFnZ3JlZ2F0ZTwvcXVvdGU+LCBhbmQgdGhpcyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIHRoZQorICAgICAgb3RoZXIgc2VsZi1jb250YWluZWQgd29ya3MgdGh1cyBjb21waWxlZCB3aXRoIHRoZSBEb2N1bWVudCAsIG9uCisgICAgICBhY2NvdW50IG9mIHRoZWlyIGJlaW5nIHRodXMgY29tcGlsZWQsIGlmIHRoZXkgYXJlIG5vdCB0aGVtc2VsdmVzCisgICAgICBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4gIElmIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Db3ZlciBUZXh0PC9saW5rPiByZXF1aXJlbWVudCBvZiA8bGluaworICAgICAgbGlua2VuZD0iZmRsLXNlY3Rpb24zIj5zZWN0aW9uIDM8L2xpbms+IGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKKyAgICAgIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUKKyAgICAgIHF1YXJ0ZXIgb2YgdGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heQorICAgICAgYmUgcGxhY2VkIG9uIGNvdmVycyB0aGF0IHN1cnJvdW5kIG9ubHkgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUKKyAgICAgIGFnZ3JlZ2F0ZS4gT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gY292ZXJzIGFyb3VuZCB0aGUgd2hvbGUKKyAgICAgIGFnZ3JlZ2F0ZS4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC1zZWN0aW9uOCI+CisgICAgPHRpdGxlPjguIFRSQU5TTEFUSU9OPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorICAgICAgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiB1bmRlciB0aGUgdGVybXMgb2YgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1zZWN0aW9uNCI+c2VjdGlvbiA0PC9saW5rPi4gUmVwbGFjaW5nIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtaW52YXJpYW50Ij4gSW52YXJpYW50IFNlY3Rpb25zPC9saW5rPiB3aXRoCisgICAgICB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbCBwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0CisgICAgICBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlIHRyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbAorICAgICAgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZQorICAgICAgSW52YXJpYW50IFNlY3Rpb25zLiBZb3UgbWF5IGluY2x1ZGUgYSB0cmFuc2xhdGlvbiBvZiB0aGlzCisgICAgICBMaWNlbnNlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZSB0aGUgb3JpZ2luYWwgRW5nbGlzaAorICAgICAgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UuIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbiB0aGUKKyAgICAgIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwKKyAgICAgIHRoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iZmRsLXNlY3Rpb245Ij4KKyAgICA8dGl0bGU+OS4gVEVSTUlOQVRJT048L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gZXhjZXB0IGFzIGV4cHJlc3NseQorICAgICAgcHJvdmlkZWQgZm9yIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IG90aGVyIGF0dGVtcHQgdG8gY29weSwKKyAgICAgIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAorICAgICAgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLAorICAgICAgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworICAgICAgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisgICAgICBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjEwIj4KKyAgICA8dGl0bGU+MTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2ZzZi9mc2YuaHRtbCI+RnJlZSBTb2Z0d2FyZQorICAgICAgRm91bmRhdGlvbjwvdWxpbms+IG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucyBvZiB0aGUgR05VCisgICAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMKKyAgICAgIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIKKyAgICAgIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gU2VlIDx1bGluaworICAgICAgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ij5odHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvPC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uCisgICAgICBudW1iZXIuIElmIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPgorICAgICAgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlCisgICAgICA8cXVvdGU+b3IgYW55IGxhdGVyIHZlcnNpb248L3F1b3RlPiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKKyAgICAgIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0CisgICAgICBzcGVjaWZpZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuCisgICAgICBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZgorICAgICAgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsCisgICAgICB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5CisgICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC11c2luZyI+CisgICAgPHRpdGxlPkFkZGVuZHVtPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgorICAgICAgdGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgICAgICBsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKyAgICA8L3BhcmE+CisKKyAgICA8YmxvY2txdW90ZT4KKyAgICAgIDxwYXJhPgorCUNvcHlyaWdodCAmY29weTsgWUVBUiBZT1VSIE5BTUUuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwlQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMKKwlkb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24KKwlMaWNlbnNlLCBWZXJzaW9uIDEuMSBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlCisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZSA8bGluaworCWxpbmtlbmQ9ImZkbC1pbnZhcmlhbnQiPkludmFyaWFudCBTZWN0aW9uczwvbGluaz4gYmVpbmcgTElTVAorCVRIRUlSIFRJVExFUywgd2l0aCB0aGUgPGxpbmsKKwlsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkZyb250LUNvdmVyIFRleHRzPC9saW5rPiBiZWluZyBMSVNULAorCWFuZCB3aXRoIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkJhY2stQ292ZXIKKwlUZXh0czwvbGluaz4gYmVpbmcgTElTVC4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbgorCXRoZSBzZWN0aW9uIGVudGl0bGVkIDxxdW90ZT5HTlUgRnJlZSBEb2N1bWVudGF0aW9uCisJTGljZW5zZTwvcXVvdGU+LgorICAgICAgPC9wYXJhPgorICAgIDwvYmxvY2txdW90ZT4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IGhhdmUgbm8gPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisgICAgICBTZWN0aW9uczwvbGluaz4sIHdyaXRlIDxxdW90ZT53aXRoIG5vIEludmFyaWFudCBTZWN0aW9uczwvcXVvdGU+CisgICAgICBpbnN0ZWFkIG9mIHNheWluZyB3aGljaCBvbmVzIGFyZSBpbnZhcmlhbnQuICBJZiB5b3UgaGF2ZSBubworICAgICAgPGxpbmsgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Gcm9udC1Db3ZlciBUZXh0czwvbGluaz4sIHdyaXRlCisgICAgICA8cXVvdGU+bm8gRnJvbnQtQ292ZXIgVGV4dHM8L3F1b3RlPiBpbnN0ZWFkIG9mCisgICAgICA8cXVvdGU+RnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVDwvcXVvdGU+OyBsaWtld2lzZSBmb3IgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1jb3Zlci10ZXh0cyI+QmFjay1Db3ZlciBUZXh0czwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLAorICAgICAgd2UgcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyCisgICAgICBjaG9pY2Ugb2YgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sIj4gR05VIEdlbmVyYWwgUHVibGljCisgICAgICBMaWNlbnNlPC91bGluaz4sIHRvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2FwcGVuZGl4PgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX2J0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGU4NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX2J0LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjU5OGIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX3RiLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg0OTJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX3RiLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY1YjIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLWNsb3NlLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1jbG9zZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiNDFjYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1jbG9zZS54bWwKQEAgLTAsMCArMSw3MCBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLWNsb3NlIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBjbG9zZSgpPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT52NGwyLWNsb3NlPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkNsb3NlIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+Q2xvc2VzIHRoZSBkZXZpY2UuIEFueSBJL08gaW4gcHJvZ3Jlc3MgaXMgdGVybWluYXRlZCBhbmQKK3Jlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBhcmUgZnJlZWQuIEhvd2V2ZXIgZGF0YQorZm9ybWF0IHBhcmFtZXRlcnMsIGN1cnJlbnQgaW5wdXQgb3Igb3V0cHV0LCBjb250cm9sIHZhbHVlcyBvciBvdGhlcgorcHJvcGVydGllcyByZW1haW4gdW5jaGFuZ2VkLjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlJldHVybiBWYWx1ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGUgZnVuY3Rpb24gcmV0dXJucyA8cmV0dXJudmFsdWU+MDwvcmV0dXJudmFsdWU+IG9uCitzdWNjZXNzLCA8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBvbiBmYWlsdXJlIGFuZCB0aGUKKzx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiBpcyBzZXQgYXBwcm9wcmlhdGVseS4gUG9zc2libGUgZXJyb3IKK2NvZGVzOjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPiBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUKK2Rlc2NyaXB0b3IuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1pb2N0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtaW9jdGwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjk2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtaW9jdGwueG1sCkBAIC0wLDAgKzEsMTQ2IEBACis8cmVmZW50cnkgaWQ9ImZ1bmMtaW9jdGwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5WNEwyIGlvY3RsKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItaW9jdGw8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UHJvZ3JhbSBhIFY0TDIgZGV2aWNlPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3N5bm9wc2lzaW5mbz4jaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52b2lkICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WNEwyIGlvY3RsIHJlcXVlc3QgY29kZSBhcyBkZWZpbmVkIGluIHRoZSA8bGluaworbGlua2VuZD0idmlkZW9kZXYiPnZpZGVvZGV2Lmg8L2xpbms+IGhlYWRlciBmaWxlLCBmb3IgZXhhbXBsZQorVklESU9DX1FVRVJZQ0FQLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Qb2ludGVyIHRvIGEgZnVuY3Rpb24gcGFyYW1ldGVyLCB1c3VhbGx5IGEgc3RydWN0dXJlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPmlvY3RsKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb2dyYW0KK1Y0TDIgZGV2aWNlcy4gVGhlIGFyZ3VtZW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gbXVzdCBiZSBhbiBvcGVuCitmaWxlIGRlc2NyaXB0b3IuIEFuIGlvY3RsIDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPiBoYXMgZW5jb2RlZAoraW4gaXQgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gaW5wdXQsIG91dHB1dCBvciByZWFkL3dyaXRlCitwYXJhbWV0ZXIsIGFuZCB0aGUgc2l6ZSBvZiB0aGUgYXJndW1lbnQgPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+IGluCitieXRlcy4gTWFjcm9zIGFuZCBkZWZpbmVzIHNwZWNpZnlpbmcgVjRMMiBpb2N0bCByZXF1ZXN0cyBhcmUgbG9jYXRlZAoraW4gdGhlIDxsaW5rIGxpbmtlbmQ9InZpZGVvZGV2Ij52aWRlb2Rldi5oPC9saW5rPiBoZWFkZXIgZmlsZS4KK0FwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZWlyIG93biBjb3B5LCBub3QgaW5jbHVkZSB0aGUgdmVyc2lvbiBpbiB0aGUKK2tlcm5lbCBzb3VyY2VzIG9uIHRoZSBzeXN0ZW0gdGhleSBjb21waWxlIG9uLiBBbGwgVjRMMiBpb2N0bCByZXF1ZXN0cywKK3RoZWlyIHJlc3BlY3RpdmUgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbiA8eHJlZgorCWxpbmtlbmQ9InVzZXItZnVuYyIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+UmV0dXJuIFZhbHVlPC90aXRsZT4KKworICAgIDxwYXJhPk9uIHN1Y2Nlc3MgdGhlIDxmdW5jdGlvbj5pb2N0bCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gcmV0dXJucworPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPiBhbmQgZG9lcyBub3QgcmVzZXQgdGhlCis8dmFybmFtZT5lcnJubzwvdmFybmFtZT4gdmFyaWFibGUuIE9uIGZhaWx1cmUKKzxyZXR1cm52YWx1ZT4tMTwvcmV0dXJudmFsdWU+IGlzIHJldHVybmVkLCB3aGVuIHRoZSBpb2N0bCB0YWtlcyBhbgorb3V0cHV0IG9yIHJlYWQvd3JpdGUgcGFyYW1ldGVyIGl0IHJlbWFpbnMgdW5tb2RpZmllZCwgYW5kIHRoZQorPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5LiBTZWUgYmVsb3cgZm9yCitwb3NzaWJsZSBlcnJvciBjb2Rlcy4gR2VuZXJpYyBlcnJvcnMgbGlrZSA8ZXJyb3Jjb2RlPkVCQURGPC9lcnJvcmNvZGU+CitvciA8ZXJyb3Jjb2RlPkVGQVVMVDwvZXJyb3Jjb2RlPiBhcmUgbm90IGxpc3RlZCBpbiB0aGUgc2VjdGlvbnMKK2Rpc2N1c3NpbmcgaW5kaXZpZHVhbCBpb2N0bCByZXF1ZXN0cy48L3BhcmE+CisgICAgPHBhcmE+Tm90ZSBpb2N0bHMgbWF5IHJldHVybiB1bmRlZmluZWQgZXJyb3IgY29kZXMuIFNpbmNlIGVycm9ycworbWF5IGhhdmUgc2lkZSBlZmZlY3RzIHN1Y2ggYXMgYSBkcml2ZXIgcmVzZXQgYXBwbGljYXRpb25zIHNob3VsZAorYWJvcnQgb24gdW5leHBlY3RlZCBlcnJvcnMuPC9wYXJhPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQkFERjwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZQorZGVzY3JpcHRvci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCByaWdodCBub3cuIFR5cGljYWxseQordGhpcyBlcnJvciBjb2RlIGlzIHJldHVybmVkIHdoZW4gSS9PIGlzIGluIHByb2dyZXNzIG9yIHRoZSBkcml2ZXIKK3N1cHBvcnRzIG11bHRpcGxlIG9wZW5zIGFuZCBhbm90aGVyIHByb2Nlc3MgbG9ja2VkIHRoZSBwcm9wZXJ0eS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVGQVVMVDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj4gcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUKK21lbW9yeSBhcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RU5PVFRZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaXMgIG5vdCAgYXNzb2NpYXRlZCAgd2l0aCAgYQorY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj4gb3IgdGhlIGRhdGEgcG9pbnRlZAordG8gYnkgPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+IGlzIG5vdCB2YWxpZC4gVGhpcyBpcyBhIHZlcnkgY29tbW9uCitlcnJvciBjb2RlLCBzZWUgdGhlIGluZGl2aWR1YWwgaW9jdGwgcmVxdWVzdHMgbGlzdGVkIGluIDx4cmVmCisJICAgICAgbGlua2VuZD0idXNlci1mdW5jIiAvPiBmb3IgYWN0dWFsIGNhdXNlcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVOT01FTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Ob3QgZW5vdWdoIHBoeXNpY2FsIG9yIHZpcnR1YWwgbWVtb3J5IHdhcyBhdmFpbGFibGUgdG8KK2NvbXBsZXRlIHRoZSByZXF1ZXN0LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RVJBTkdFPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBhcHBsaWNhdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGEgY29udHJvbCB3aXRoIHRoZQorJlZJRElPQy1TLUNUUkw7IGlvY3RsIHRvIGEgdmFsdWUgd2hpY2ggaXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW1tYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW1tYXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmZjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtbW1hcC54bWwKQEAgLTAsMCArMSwxODUgQEAKKzxyZWZlbnRyeSBpZD0iZnVuYy1tbWFwIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBtbWFwKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItbW1hcDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5NYXAgZGV2aWNlIG1lbW9yeSBpbnRvIGFwcGxpY2F0aW9uIGFkZHJlc3Mgc3BhY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPgorI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9uPm1tYXA8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnByb3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+b2ZmX3QgPHBhcmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk1hcCB0aGUgYnVmZmVyIHRvIHRoaXMgYWRkcmVzcyBpbiB0aGUKK2FwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZS4gV2hlbiB0aGUgPGNvbnN0YW50Pk1BUF9GSVhFRDwvY29uc3RhbnQ+CitmbGFnIGlzIHNwZWNpZmllZCwgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlCitwYWdlc2l6ZSBhbmQgbW1hcCB3aWxsIGZhaWwgd2hlbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MKK2Nhbm5vdCBiZSB1c2VkLiBVc2Ugb2YgdGhpcyBvcHRpb24gaXMgZGlzY291cmFnZWQ7IGFwcGxpY2F0aW9ucyBzaG91bGQKK2p1c3Qgc3BlY2lmeSBhIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gcG9pbnRlciBoZXJlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkxlbmd0aCBvZiB0aGUgbWVtb3J5IGFyZWEgdG8gbWFwLiBUaGlzIG11c3QgYmUgdGhlCitzYW1lIHZhbHVlIGFzIHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgaW4gdGhlICZ2NGwyLWJ1ZmZlcjsKKzxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnByb3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxwYXJhbWV0ZXI+cHJvdDwvcGFyYW1ldGVyPiBhcmd1bWVudCBkZXNjcmliZXMgdGhlCitkZXNpcmVkIG1lbW9yeSBwcm90ZWN0aW9uLiBSZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UgdHlwZSBhbmQgdGhlCitkaXJlY3Rpb24gb2YgZGF0YSBleGNoYW5nZSBpdCBzaG91bGQgYmUgc2V0IHRvCis8Y29uc3RhbnQ+UFJPVF9SRUFEPC9jb25zdGFudD4gfCA8Y29uc3RhbnQ+UFJPVF9XUklURTwvY29uc3RhbnQ+LAorcGVybWl0dGluZyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gaW1hZ2UgYnVmZmVycy4gRHJpdmVycyBzaG91bGQKK3N1cHBvcnQgYXQgbGVhc3QgdGhpcyBjb21iaW5hdGlvbiBvZiBmbGFncy4gTm90ZSB0aGUgTGludXgKKzxmaWxlbmFtZT52aWRlby1idWY8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlLCB3aGljaCBpcyB1c2VkIGJ5IHRoZQorYnR0diwgc2FhNzEzNCwgc2FhNzE0NiwgY3g4OCBhbmQgdml2aSBkcml2ZXIgc3VwcG9ydHMgb25seQorPGNvbnN0YW50PlBST1RfUkVBRDwvY29uc3RhbnQ+IHwgPGNvbnN0YW50PlBST1RfV1JJVEU8L2NvbnN0YW50Pi4gV2hlbgordGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBkZXNpcmVkIHByb3RlY3Rpb24gdGhlCis8ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gZmFpbHMuPC9wYXJhPgorCSAgPHBhcmE+Tm90ZSBkZXZpY2UgbWVtb3J5IGFjY2Vzc2VzICgmZWc7IHRoZSBtZW1vcnkgb24gYQorZ3JhcGhpY3MgY2FyZCB3aXRoIHZpZGVvIGNhcHR1cmluZyBoYXJkd2FyZSkgbWF5IGluY3VyIGEgcGVyZm9ybWFuY2UKK3BlbmFsdHkgY29tcGFyZWQgdG8gbWFpbiBtZW1vcnkgYWNjZXNzZXMsIG9yIHJlYWRzIG1heSBiZQorc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiB3cml0ZXMgb3IgdmljZSB2ZXJzYS4gT3RoZXIgSS9PIG1ldGhvZHMgbWF5CitiZSBtb3JlIGVmZmljaWVudCBpbiB0aGlzIGNhc2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIKK3NwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgbWFwcGVkIG9iamVjdCwgbWFwcGluZyBvcHRpb25zIGFuZCB3aGV0aGVyCittb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIG1hcHBlZCBjb3B5IG9mIHRoZSBwYWdlIGFyZSBwcml2YXRlIHRvIHRoZQorcHJvY2VzcyBvciBhcmUgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgcmVmZXJlbmNlcy48L3BhcmE+CisJICA8cGFyYT48Y29uc3RhbnQ+TUFQX0ZJWEVEPC9jb25zdGFudD4gcmVxdWVzdHMgdGhhdCB0aGUKK2RyaXZlciBzZWxlY3RzIG5vIG90aGVyIGFkZHJlc3MgdGhhbiB0aGUgb25lIHNwZWNpZmllZC4gSWYgdGhlCitzcGVjaWZpZWQgYWRkcmVzcyBjYW5ub3QgYmUgdXNlZCwgPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+IHdpbGwgZmFpbC4gSWYKKzxjb25zdGFudD5NQVBfRklYRUQ8L2NvbnN0YW50PiBpcyBzcGVjaWZpZWQsCis8cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+IG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZXNpemUuIFVzZQorb2YgdGhpcyBvcHRpb24gaXMgZGlzY291cmFnZWQuPC9wYXJhPgorCSAgPHBhcmE+T25lIG9mIHRoZSA8Y29uc3RhbnQ+TUFQX1NIQVJFRDwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+TUFQX1BSSVZBVEU8L2NvbnN0YW50PiBmbGFncyBtdXN0IGJlIHNldC4KKzxjb25zdGFudD5NQVBfU0hBUkVEPC9jb25zdGFudD4gYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBzaGFyZSB0aGUKK21hcHBlZCBtZW1vcnkgd2l0aCBvdGhlciAoJmVnOyBjaGlsZC0pIHByb2Nlc3Nlcy4gTm90ZSB0aGUgTGludXgKKzxmaWxlbmFtZT52aWRlby1idWY8L2ZpbGVuYW1lPiBtb2R1bGUgd2hpY2ggaXMgdXNlZCBieSB0aGUgYnR0diwKK3NhYTcxMzQsIHNhYTcxNDYsIGN4ODggYW5kIHZpdmkgZHJpdmVyIHN1cHBvcnRzIG9ubHkKKzxjb25zdGFudD5NQVBfU0hBUkVEPC9jb25zdGFudD4uIDxjb25zdGFudD5NQVBfUFJJVkFURTwvY29uc3RhbnQ+CityZXF1ZXN0cyBjb3B5LW9uLXdyaXRlIHNlbWFudGljcy4gVjRMMiBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBzZXQgdGhlCis8Y29uc3RhbnQ+TUFQX1BSSVZBVEU8L2NvbnN0YW50PiwgPGNvbnN0YW50Pk1BUF9ERU5ZV1JJVEU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5NQVBfRVhFQ1VUQUJMRTwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD5NQVBfQU5PTjwvY29uc3RhbnQ+CitmbGFnLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk9mZnNldCBvZiB0aGUgYnVmZmVyIGluIGRldmljZSBtZW1vcnkuIFRoaXMgbXVzdCBiZSB0aGUKK3NhbWUgdmFsdWUgYXMgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciBpbiB0aGUgJnY0bDItYnVmZmVyOworPHN0cnVjdGZpZWxkPm08L3N0cnVjdGZpZWxkPiB1bmlvbiA8c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYXNrcyB0byBtYXAKKzxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+IGJ5dGVzIHN0YXJ0aW5nIGF0Cis8cGFyYW1ldGVyPm9mZnNldDwvcGFyYW1ldGVyPiBpbiB0aGUgbWVtb3J5IG9mIHRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5Cis8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGludG8gdGhlIGFwcGxpY2F0aW9uIGFkZHJlc3Mgc3BhY2UsCitwcmVmZXJhYmx5IGF0IGFkZHJlc3MgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPi4gVGhpcyBsYXR0ZXIKK2FkZHJlc3MgaXMgYSBoaW50IG9ubHksIGFuZCBpcyB1c3VhbGx5IHNwZWNpZmllZCBhcyAwLjwvcGFyYT4KKworICAgIDxwYXJhPlN1aXRhYmxlIGxlbmd0aCBhbmQgb2Zmc2V0IHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQgd2l0aCB0aGUKKyZWSURJT0MtUVVFUllCVUY7IGlvY3RsLiBCdWZmZXJzIG11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsIGJlZm9yZSB0aGV5IGNhbiBiZSBxdWVyaWVkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHVubWFwIGJ1ZmZlcnMgdGhlICZmdW5jLW11bm1hcDsgZnVuY3Rpb24gaXMgdXNlZC48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcyA8ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj4gcmV0dXJucyBhIHBvaW50ZXIgdG8KK3RoZSBtYXBwZWQgYnVmZmVyLiBPbiBlcnJvciA8Y29uc3RhbnQ+TUFQX0ZBSUxFRDwvY29uc3RhbnQ+ICgtMSkgaXMKK3JldHVybmVkLCBhbmQgdGhlIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiB2YXJpYWJsZSBpcyBzZXQKK2FwcHJvcHJpYXRlbHkuIFBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCQURGPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaXMgbm90IGEgdmFsaWQgZmlsZQorZGVzY3JpcHRvci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBQ0NFUzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzCitub3Qgb3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj5sZW5ndGg8L3BhcmFtZXRlcj4gb3IgPHBhcmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj4gYXJlIG5vdAorc3VpdGFibGUuIChFLiZuYnNwO2cuIHRoZXkgYXJlIHRvbyBsYXJnZSwgb3Igbm90IGFsaWduZWQgb24gYQorPGNvbnN0YW50PlBBR0VTSVpFPC9jb25zdGFudD4gYm91bmRhcnkuKTwvcGFyYT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+IG9yCis8cGFyYW1ldGVyPnByb3Q8L3BhcmFtZXRlcj4gdmFsdWUgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJICA8cGFyYT5ObyBidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0aCB0aGUKKyZWSURJT0MtUkVRQlVGUzsgaW9jdGwuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTk9NRU08L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm90IGVub3VnaCBwaHlzaWNhbCBvciB2aXJ0dWFsIG1lbW9yeSB3YXMgYXZhaWxhYmxlIHRvCitjb21wbGV0ZSB0aGUgcmVxdWVzdC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW11bm1hcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtbXVubWFwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJlZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW11bm1hcC54bWwKQEAgLTAsMCArMSw4MyBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLW11bm1hcCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPlY0TDIgbXVubWFwKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItbXVubWFwPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlVubWFwIGRldmljZSBtZW1vcnk8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPgorI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5tdW5tYXA8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZHJlc3Mgb2YgdGhlIG1hcHBlZCBidWZmZXIgYXMgcmV0dXJuZWQgYnkgdGhlCismZnVuYy1tbWFwOyBmdW5jdGlvbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5MZW5ndGggb2YgdGhlIG1hcHBlZCBidWZmZXIuIFRoaXMgbXVzdCBiZSB0aGUgc2FtZQordmFsdWUgYXMgZ2l2ZW4gdG8gPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+IGFuZCByZXR1cm5lZCBieSB0aGUKK2RyaXZlciBpbiB0aGUgJnY0bDItYnVmZmVyOyA8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5Vbm1hcHMgYSBwcmV2aW91c2x5IHdpdGggdGhlICZmdW5jLW1tYXA7IGZ1bmN0aW9uIG1hcHBlZAorYnVmZmVyIGFuZCBmcmVlcyBpdCwgaWYgcG9zc2libGUuIDwhLS0gPyBUaGlzIGZ1bmN0aW9uIChub3QgZnJlZWluZykKK2hhcyBubyBpbXBhY3Qgb24gSS9PIGluIHByb2dyZXNzLCBzcGVjaWZpY2FsbHkgaXQgZG9lcyBub3QgaW1wbHkKKyZWSURJT0MtU1RSRUFNT0ZGOyB0byB0ZXJtaW5hdGUgSS9PLiBVbm1hcHBlZCBidWZmZXJzIGNhbiBzdGlsbCBiZQorZW5xdWV1ZWQsIGRlcXVldWVkIG9yIHF1ZXJpZWQsIHRoZXkgYXJlIGp1c3Qgbm90IGFjY2Vzc2libGUgYnkgdGhlCithcHBsaWNhdGlvbi4tLT48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcyA8ZnVuY3Rpb24+bXVubWFwKCk8L2Z1bmN0aW9uPiByZXR1cm5zIDAsIG9uCitmYWlsdXJlIC0xIGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldAorYXBwcm9wcmlhdGVseTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj5sZW5ndGg8L3BhcmFtZXRlcj4gaXMgaW5jb3JyZWN0LCBvciBubyBidWZmZXJzIGhhdmUgYmVlbgorbWFwcGVkIHlldC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW9wZW4ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW9wZW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTVkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtb3Blbi54bWwKQEAgLTAsMCArMSwxMjEgQEAKKzxyZWZlbnRyeSBpZD0iZnVuYy1vcGVuIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBvcGVuKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItb3BlbjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5PcGVuIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtmY250bC5oJmd0OzwvZnVuY3N5bm9wc2lzaW5mbz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+b3BlbjwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5jb25zdCBjaGFyICo8cGFyYW1ldGVyPmRldmljZV9uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZGV2aWNlX25hbWU8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+RGV2aWNlIHRvIGJlIG9wZW5lZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk9wZW4gZmxhZ3MuIEFjY2VzcyBtb2RlIG11c3QgYmUKKzxjb25zdGFudD5PX1JEV1I8L2NvbnN0YW50Pi4gVGhpcyBpcyBqdXN0IGEgdGVjaG5pY2FsaXR5LCBpbnB1dCBkZXZpY2VzCitzdGlsbCBzdXBwb3J0IG9ubHkgcmVhZGluZyBhbmQgb3V0cHV0IGRldmljZXMgb25seSB3cml0aW5nLjwvcGFyYT4KKwkgIDxwYXJhPldoZW4gdGhlIDxjb25zdGFudD5PX05PTkJMT0NLPC9jb25zdGFudD4gZmxhZyBpcworZ2l2ZW4sIHRoZSByZWFkKCkgZnVuY3Rpb24gYW5kIHRoZSAmVklESU9DLURRQlVGOyBpb2N0bCB3aWxsIHJldHVybgordGhlICZFQUdBSU47IHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUgb3Igbm8gYnVmZmVyIGlzIGluIHRoZSBkcml2ZXIKK291dGdvaW5nIHF1ZXVlLCBvdGhlcndpc2UgdGhlc2UgZnVuY3Rpb25zIGJsb2NrIHVudGlsIGRhdGEgYmVjb21lcworYXZhaWxhYmxlLiBBbGwgVjRMMiBkcml2ZXJzIGV4Y2hhbmdpbmcgZGF0YSB3aXRoIGFwcGxpY2F0aW9ucyBtdXN0CitzdXBwb3J0IHRoZSA8Y29uc3RhbnQ+T19OT05CTE9DSzwvY29uc3RhbnQ+IGZsYWcuPC9wYXJhPgorCSAgPHBhcmE+T3RoZXIgZmxhZ3MgaGF2ZSBubyBlZmZlY3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBvcGVuIGEgVjRMMiBkZXZpY2UgYXBwbGljYXRpb25zIGNhbGwKKzxmdW5jdGlvbj5vcGVuKCk8L2Z1bmN0aW9uPiB3aXRoIHRoZSBkZXNpcmVkIGRldmljZSBuYW1lLiBUaGlzCitmdW5jdGlvbiBoYXMgbm8gc2lkZSBlZmZlY3RzOyBhbGwgZGF0YSBmb3JtYXQgcGFyYW1ldGVycywgY3VycmVudAoraW5wdXQgb3Igb3V0cHV0LCBjb250cm9sIHZhbHVlcyBvciBvdGhlciBwcm9wZXJ0aWVzIHJlbWFpbiB1bmNoYW5nZWQuCitBdCB0aGUgZmlyc3QgPGZ1bmN0aW9uPm9wZW4oKTwvZnVuY3Rpb24+IGNhbGwgYWZ0ZXIgbG9hZGluZyB0aGUgZHJpdmVyCit0aGV5IHdpbGwgYmUgcmVzZXQgdG8gZGVmYXVsdCB2YWx1ZXMsIGRyaXZlcnMgYXJlIG5ldmVyIGluIGFuCit1bmRlZmluZWQgc3RhdGUuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlJldHVybiBWYWx1ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5PbiBzdWNjZXNzIDxmdW5jdGlvbj5vcGVuPC9mdW5jdGlvbj4gcmV0dXJucyB0aGUgbmV3IGZpbGUKK2Rlc2NyaXB0b3IuIE9uIGVycm9yIC0xIGlzIHJldHVybmVkLCBhbmQgdGhlIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPgordmFyaWFibGUgaXMgc2V0IGFwcHJvcHJpYXRlbHkuIFBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBQ0NFUzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgY2FsbGVyIGhhcyBubyBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUKK2RldmljZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBvcGVucyBhbmQgdGhlCitkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTlhJTzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5ObyBkZXZpY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIGRldmljZSBzcGVjaWFsIGZpbGUKK2V4aXN0cy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVOT01FTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Ob3QgZW5vdWdoIGtlcm5lbCBtZW1vcnkgd2FzIGF2YWlsYWJsZSB0byBjb21wbGV0ZSB0aGUKK3JlcXVlc3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTUZJTEU8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICBwcm9jZXNzICBhbHJlYWR5ICBoYXMgIHRoZSAgbWF4aW11bSBudW1iZXIgb2YKK2ZpbGVzIG9wZW4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTkZJTEU8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGxpbWl0IG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMgb3BlbiBvbiB0aGUKK3N5c3RlbSBoYXMgYmVlbiByZWFjaGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtcG9sbC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtcG9sbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzYzcxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1wb2xsLnhtbApAQCAtMCwwICsxLDEyNyBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLXBvbGwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5WNEwyIHBvbGwoKTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+djRsMi1wb2xsPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPldhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3I8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtzeXMvcG9sbC5oJmd0OzwvZnVuY3N5bm9wc2lzaW5mbz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+cG9sbDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgcG9sbGZkICo8cGFyYW1ldGVyPnVmZHM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj51bnNpZ25lZCBpbnQgPHBhcmFtZXRlcj5uZmRzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+dGltZW91dDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5XaXRoIHRoZSA8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYXBwbGljYXRpb25zCitjYW4gc3VzcGVuZCBleGVjdXRpb24gdW50aWwgdGhlIGRyaXZlciBoYXMgY2FwdHVyZWQgZGF0YSBvciBpcyByZWFkeQordG8gYWNjZXB0IGRhdGEgZm9yIG91dHB1dC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHN0cmVhbWluZyBJL08gaGFzIGJlZW4gbmVnb3RpYXRlZCB0aGlzIGZ1bmN0aW9uIHdhaXRzCit1bnRpbCBhIGJ1ZmZlciBoYXMgYmVlbiBmaWxsZWQgb3IgZGlzcGxheWVkIGFuZCBjYW4gYmUgZGVxdWV1ZWQgd2l0aAordGhlICZWSURJT0MtRFFCVUY7IGlvY3RsLiBXaGVuIGJ1ZmZlcnMgYXJlIGFscmVhZHkgaW4gdGhlIG91dGdvaW5nCitxdWV1ZSBvZiB0aGUgZHJpdmVyIHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LjwvcGFyYT4KKworICAgIDxwYXJhPk9uIHN1Y2Nlc3MgPGZ1bmN0aW9uPnBvbGwoKTwvZnVuY3Rpb24+IHJldHVybnMgdGhlIG51bWJlciBvZgorZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZCAodGhhdCBpcywgZmlsZSBkZXNjcmlwdG9ycworZm9yIHdoaWNoIHRoZSA8c3RydWN0ZmllbGQ+cmV2ZW50czwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHRoZQorcmVzcGVjdGl2ZSA8c3RydWN0bmFtZT5wb2xsZmQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpcyBub24temVybykuCitDYXB0dXJlIGRldmljZXMgc2V0IHRoZSA8Y29uc3RhbnQ+UE9MTElOPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+UE9MTFJETk9STTwvY29uc3RhbnQ+IGZsYWdzIGluIHRoZQorPHN0cnVjdGZpZWxkPnJldmVudHM8L3N0cnVjdGZpZWxkPiBmaWVsZCwgb3V0cHV0IGRldmljZXMgdGhlCis8Y29uc3RhbnQ+UE9MTE9VVDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+UE9MTFdSTk9STTwvY29uc3RhbnQ+CitmbGFncy4gV2hlbiB0aGUgZnVuY3Rpb24gdGltZWQgb3V0IGl0IHJldHVybnMgYSB2YWx1ZSBvZiB6ZXJvLCBvbgorZmFpbHVyZSBpdCByZXR1cm5zIDxyZXR1cm52YWx1ZT4tMTwvcmV0dXJudmFsdWU+IGFuZCB0aGUKKzx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiB2YXJpYWJsZSBpcyBzZXQgYXBwcm9wcmlhdGVseS4gV2hlbiB0aGUKK2FwcGxpY2F0aW9uIGRpZCBub3QgY2FsbCAmVklESU9DLVFCVUY7IG9yICZWSURJT0MtU1RSRUFNT047IHlldCB0aGUKKzxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBzdWNjZWVkcywgYnV0IHNldHMgdGhlCis8Y29uc3RhbnQ+UE9MTEVSUjwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+cmV2ZW50czwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gdXNlIG9mIHRoZSA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzCitiZWVuIG5lZ290aWF0ZWQgYW5kIHRoZSBkcml2ZXIgZG9lcyBub3QgY2FwdHVyZSB5ZXQsIHRoZQorPGZ1bmN0aW9uPnBvbGw8L2Z1bmN0aW9uPiBmdW5jdGlvbiBzdGFydHMgY2FwdHVyaW5nLiBXaGVuIHRoYXQgZmFpbHMKK2l0IHJldHVybnMgYSA8Y29uc3RhbnQ+UE9MTEVSUjwvY29uc3RhbnQ+IGFzIGFib3ZlLiBPdGhlcndpc2UgaXQgd2FpdHMKK3VudGlsIGRhdGEgaGFzIGJlZW4gY2FwdHVyZWQgYW5kIGNhbiBiZSByZWFkLiBXaGVuIHRoZSBkcml2ZXIgY2FwdHVyZXMKK2NvbnRpbnVvdXNseSAoYXMgb3Bwb3NlZCB0bywgZm9yIGV4YW1wbGUsIHN0aWxsIGltYWdlcykgdGhlIGZ1bmN0aW9uCittYXkgcmV0dXJuIGltbWVkaWF0ZWx5LjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gdXNlIG9mIHRoZSA8ZnVuY3Rpb24+d3JpdGUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcworYmVlbiBuZWdvdGlhdGVkIHRoZSA8ZnVuY3Rpb24+cG9sbDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGp1c3Qgd2FpdHMKK3VudGlsIHRoZSBkcml2ZXIgaXMgcmVhZHkgZm9yIGEgbm9uLWJsb2NraW5nCis8ZnVuY3Rpb24+d3JpdGUoKTwvZnVuY3Rpb24+IGNhbGwuPC9wYXJhPgorCisgICAgPHBhcmE+QWxsIGRyaXZlcnMgaW1wbGVtZW50aW5nIHRoZSA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gb3IKKzxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gb3Igc3RyZWFtaW5nIEkvTyBtdXN0IGFsc28KK3N1cHBvcnQgdGhlIDxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi48L3BhcmE+CisKKyAgICA8cGFyYT5Gb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUKKzxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPiBtYW51YWwgcGFnZS48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcywgPGZ1bmN0aW9uPnBvbGwoKTwvZnVuY3Rpb24+IHJldHVybnMgdGhlIG51bWJlcgorc3RydWN0dXJlcyB3aGljaCBoYXZlIG5vbi16ZXJvIDxzdHJ1Y3RmaWVsZD5yZXZlbnRzPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcywgb3IgemVybyBpZiB0aGUgY2FsbCB0aW1lZCBvdXQuIE9uIGVycm9yCis8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgYW5kIHRoZQorPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5OjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+T25lIG9yIG1vcmUgb2YgdGhlIDxwYXJhbWV0ZXI+dWZkczwvcGFyYW1ldGVyPiBtZW1iZXJzCitzcGVjaWZ5IGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHJlYWQgb3Igd3JpdGUKK3N0cmVhbXMgYW5kIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj51ZmRzPC9wYXJhbWV0ZXI+IHJlZmVyZW5jZXMgYW4gaW5hY2Nlc3NpYmxlCittZW1vcnkgYXJlYS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlRSPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBjYWxsIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5uZmRzPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IGlzIGdyZWF0ZXIKK3RoYW4gPGNvbnN0YW50Pk9QRU5fTUFYPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1yZWFkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1yZWFkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA4OWJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXJlYWQueG1sCkBAIC0wLDAgKzEsMTg5IEBACis8cmVmZW50cnkgaWQ9ImZ1bmMtcmVhZCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPlY0TDIgcmVhZCgpPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT52NGwyLXJlYWQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UmVhZCBmcm9tIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5zc2l6ZV90IDxmdW5jdGlvbj5yZWFkPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+PGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGF0dGVtcHRzIHRvIHJlYWQgdXAgdG8KKzxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4gYnl0ZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3IKKzxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaW50byB0aGUgYnVmZmVyIHN0YXJ0aW5nIGF0Cis8cGFyYW1ldGVyPmJ1ZjwvcGFyYW1ldGVyPi4gVGhlIGxheW91dCBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIGlzCitkaXNjdXNzZWQgaW4gdGhlIHJlc3BlY3RpdmUgZGV2aWNlIGludGVyZmFjZSBzZWN0aW9uLCBzZWUgIyMuIElmIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4gaXMgemVybywKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiByZXR1cm5zIHplcm8gYW5kIGhhcyBubyBvdGhlciByZXN1bHRzLiBJZgorPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPiBpcyBncmVhdGVyIHRoYW4KKzxjb25zdGFudD5TU0laRV9NQVg8L2NvbnN0YW50PiwgdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gUmVnYXJkbGVzcworb2YgdGhlIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4gdmFsdWUgZWFjaAorPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGNhbGwgd2lsbCBwcm92aWRlIGF0IG1vc3Qgb25lIGZyYW1lICh0d28KK2ZpZWxkcykgd29ydGggb2YgZGF0YS48L3BhcmE+CisKKyAgICA8cGFyYT5CeSBkZWZhdWx0IDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBibG9ja3MgdW50aWwgZGF0YQorYmVjb21lcyBhdmFpbGFibGUuIFdoZW4gdGhlIDxjb25zdGFudD5PX05PTkJMT0NLPC9jb25zdGFudD4gZmxhZyB3YXMKK2dpdmVuIHRvIHRoZSAmZnVuYy1vcGVuOyBmdW5jdGlvbiBpdAorcmV0dXJucyBpbW1lZGlhdGVseSB3aXRoIGFuICZFQUdBSU47IHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUuIFRoZQorJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBmdW5jdGlvbnMKK2NhbiBhbHdheXMgYmUgdXNlZCB0byBzdXNwZW5kIGV4ZWN1dGlvbiB1bnRpbCBkYXRhIGJlY29tZXMgYXZhaWxhYmxlLiBBbGwKK2RyaXZlcnMgc3VwcG9ydGluZyB0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIG11c3QgYWxzbworc3VwcG9ydCA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBhbmQKKzxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPi48L3BhcmE+CisKKyAgICA8cGFyYT5Ecml2ZXJzIGNhbiBpbXBsZW1lbnQgcmVhZCBmdW5jdGlvbmFsaXR5IGluIGRpZmZlcmVudAord2F5cywgdXNpbmcgYSBzaW5nbGUgb3IgbXVsdGlwbGUgYnVmZmVycyBhbmQgZGlzY2FyZGluZyB0aGUgb2xkZXN0IG9yCituZXdlc3QgZnJhbWVzIG9uY2UgdGhlIGludGVybmFsIGJ1ZmZlcnMgYXJlIGZpbGxlZC48L3BhcmE+CisKKyAgICA8cGFyYT48ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gbmV2ZXIgcmV0dXJucyBhICJzbmFwc2hvdCIgb2YgYQorYnVmZmVyIGJlaW5nIGZpbGxlZC4gVXNpbmcgYSBzaW5nbGUgYnVmZmVyIHRoZSBkcml2ZXIgd2lsbCBzdG9wCitjYXB0dXJpbmcgd2hlbiB0aGUgYXBwbGljYXRpb24gc3RhcnRzIHJlYWRpbmcgdGhlIGJ1ZmZlciB1bnRpbCB0aGUKK3JlYWQgaXMgZmluaXNoZWQuIFRodXMgb25seSB0aGUgcGVyaW9kIG9mIHRoZSB2ZXJ0aWNhbCBibGFua2luZworaW50ZXJ2YWwgaXMgYXZhaWxhYmxlIGZvciByZWFkaW5nLCBvciB0aGUgY2FwdHVyZSByYXRlIG11c3QgZmFsbCBiZWxvdwordGhlIG5vbWluYWwgZnJhbWUgcmF0ZSBvZiB0aGUgdmlkZW8gc3RhbmRhcmQuPC9wYXJhPgorCis8cGFyYT5UaGUgYmVoYXZpb3Igb2YKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiB3aGVuIGNhbGxlZCBkdXJpbmcgdGhlIGFjdGl2ZSBwaWN0dXJlCitwZXJpb2Qgb3IgdGhlIHZlcnRpY2FsIGJsYW5raW5nIHNlcGFyYXRpbmcgdGhlIHRvcCBhbmQgYm90dG9tIGZpZWxkCitkZXBlbmRzIG9uIHRoZSBkaXNjYXJkaW5nIHBvbGljeS4gQSBkcml2ZXIgZGlzY2FyZGluZyB0aGUgb2xkZXN0CitmcmFtZXMga2VlcHMgY2FwdHVyaW5nIGludG8gYW4gaW50ZXJuYWwgYnVmZmVyLCBjb250aW51b3VzbHkKK292ZXJ3cml0aW5nIHRoZSBwcmV2aW91c2x5LCBub3QgcmVhZCBmcmFtZSwgYW5kIHJldHVybnMgdGhlIGZyYW1lCitiZWluZyByZWNlaXZlZCBhdCB0aGUgdGltZSBvZiB0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGNhbGwgYXMKK3Nvb24gYXMgaXQgaXMgY29tcGxldGUuPC9wYXJhPgorCisgICAgPHBhcmE+QSBkcml2ZXIgZGlzY2FyZGluZyB0aGUgbmV3ZXN0IGZyYW1lcyBzdG9wcyBjYXB0dXJpbmcgdW50aWwKK3RoZSBuZXh0IDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBjYWxsLiBUaGUgZnJhbWUgYmVpbmcgcmVjZWl2ZWQgYXQKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiB0aW1lIGlzIGRpc2NhcmRlZCwgcmV0dXJuaW5nIHRoZSBmb2xsb3dpbmcKK2ZyYW1lIGluc3RlYWQuIEFnYWluIHRoaXMgaW1wbGllcyBhIHJlZHVjdGlvbiBvZiB0aGUgY2FwdHVyZSByYXRlIHRvCitvbmUgaGFsZiBvciBsZXNzIG9mIHRoZSBub21pbmFsIGZyYW1lIHJhdGUuIEFuIGV4YW1wbGUgb2YgdGhpcyBtb2RlbAoraXMgdGhlIHZpZGVvIHJlYWQgbW9kZSBvZiB0aGUgYnR0diBkcml2ZXIsIGluaXRpYXRpbmcgYSBETUEgdG8gdXNlcgorbWVtb3J5IHdoZW4gPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCBhbmQgcmV0dXJuaW5nIHdoZW4KK3RoZSBETUEgZmluaXNoZWQuPC9wYXJhPgorCisgICAgPHBhcmE+SW4gdGhlIG11bHRpcGxlIGJ1ZmZlciBtb2RlbCBkcml2ZXJzIG1haW50YWluIGEgcmluZyBvZgoraW50ZXJuYWwgYnVmZmVycywgYXV0b21hdGljYWxseSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZnJlZSBidWZmZXIuCitUaGlzIGFsbG93cyBjb250aW51b3VzIGNhcHR1cmluZyB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjYW4gZW1wdHkgdGhlCitidWZmZXJzIGZhc3QgZW5vdWdoLiBBZ2FpbiwgdGhlIGJlaGF2aW9yIHdoZW4gdGhlIGRyaXZlciBydW5zIG91dCBvZgorZnJlZSBidWZmZXJzIGRlcGVuZHMgb24gdGhlIGRpc2NhcmRpbmcgcG9saWN5LjwvcGFyYT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gZ2V0IGFuZCBzZXQgdGhlIG51bWJlciBvZiBidWZmZXJzIHVzZWQKK2ludGVybmFsbHkgYnkgdGhlIGRyaXZlciB3aXRoIHRoZSAmVklESU9DLUctUEFSTTsgYW5kICZWSURJT0MtUy1QQVJNOworaW9jdGxzLiBUaGV5IGFyZSBvcHRpb25hbCwgaG93ZXZlci4gVGhlIGRpc2NhcmRpbmcgcG9saWN5IGlzIG5vdAorcmVwb3J0ZWQgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkLiBGb3IgbWluaW11bSByZXF1aXJlbWVudHMgc2VlIDx4cmVmCisJbGlua2VuZD0iZGV2aWNlcyIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+UmV0dXJuIFZhbHVlPC90aXRsZT4KKworICAgIDxwYXJhPk9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpcyByZXR1cm5lZC4gSXQgaXMgbm90CithbiBlcnJvciBpZiB0aGlzIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQsCitvciB0aGUgYW1vdW50IG9mIGRhdGEgcmVxdWlyZWQgZm9yIG9uZSBmcmFtZS4gVGhpcyBtYXkgaGFwcGVuIGZvcgorZXhhbXBsZSBiZWNhdXNlIDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiB3YXMgaW50ZXJydXB0ZWQgYnkgYQorc2lnbmFsLiBPbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQsIGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+Cit2YXJpYWJsZSBpcyBzZXQgYXBwcm9wcmlhdGVseS4gSW4gdGhpcyBjYXNlIHRoZSBuZXh0IHJlYWQgd2lsbCBzdGFydAorYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZS4gUG9zc2libGUgZXJyb3IgY29kZXMgYXJlOjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUFHQUlOPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5vbi1ibG9ja2luZyBJL08gaGFzIGJlZW4gc2VsZWN0ZWQgdXNpbmcKK09fTk9OQkxPQ0sgYW5kIG5vIGRhdGEgd2FzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBmb3IgcmVhZGluZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCQURGPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaXMgbm90IGEgdmFsaWQgZmlsZQorZGVzY3JpcHRvciBvciBpcyBub3Qgb3BlbiBmb3IgcmVhZGluZywgb3IgdGhlIHByb2Nlc3MgYWxyZWFkeSBoYXMgdGhlCittYXhpbXVtIG51bWJlciBvZiBmaWxlcyBvcGVuLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHJlYWQgc3RyZWFtcyBhbmQgdGhlCitkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj4gcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUKK21lbW9yeSBhcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGNhbGwgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGJlZm9yZSBhbnkKK2RhdGEgd2FzIHJlYWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU88L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGVycm9yLiBUaGlzIGluZGljYXRlcyBzb21lIGhhcmR3YXJlIHByb2JsZW0gb3IgYQorZmFpbHVyZSB0byBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIGRldmljZSAoVVNCIGNhbWVyYSBldGMuKS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIG5vdAorc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBub3Qgb24gdGhpcyBkZXZpY2UsIG9yIGdlbmVyYWxseSBub3Qgb24gdGhpcwordHlwZSBvZiBkZXZpY2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1zZWxlY3QueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXNlbGVjdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3MTM2MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1zZWxlY3QueG1sCkBAIC0wLDAgKzEsMTM4IEBACis8cmVmZW50cnkgaWQ9ImZ1bmMtc2VsZWN0Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBzZWxlY3QoKTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+djRsMi1zZWxlY3Q8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+U3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZzwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNzeW5vcHNpc2luZm8+CisjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKKyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPnNlbGVjdDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5uZmRzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+ZmRfc2V0ICo8cGFyYW1ldGVyPnJlYWRmZHM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5mZF9zZXQgKjxwYXJhbWV0ZXI+d3JpdGVmZHM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5mZF9zZXQgKjxwYXJhbWV0ZXI+ZXhjZXB0ZmRzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHRpbWV2YWwgKjxwYXJhbWV0ZXI+dGltZW91dDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5XaXRoIHRoZSA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBhcHBsaWNhdGlvbnMKK2NhbiBzdXNwZW5kIGV4ZWN1dGlvbiB1bnRpbCB0aGUgZHJpdmVyIGhhcyBjYXB0dXJlZCBkYXRhIG9yIGlzIHJlYWR5Cit0byBhY2NlcHQgZGF0YSBmb3Igb3V0cHV0LjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gc3RyZWFtaW5nIEkvTyBoYXMgYmVlbiBuZWdvdGlhdGVkIHRoaXMgZnVuY3Rpb24gd2FpdHMKK3VudGlsIGEgYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCBvciBkaXNwbGF5ZWQgYW5kIGNhbiBiZSBkZXF1ZXVlZCB3aXRoCit0aGUgJlZJRElPQy1EUUJVRjsgaW9jdGwuIFdoZW4gYnVmZmVycyBhcmUgYWxyZWFkeSBpbiB0aGUgb3V0Z29pbmcKK3F1ZXVlIG9mIHRoZSBkcml2ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuPC9wYXJhPgorCisgICAgPHBhcmE+T24gc3VjY2VzcyA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiByZXR1cm5zIHRoZSB0b3RhbAorbnVtYmVyIG9mIGJpdHMgc2V0IGluIHRoZSA8c3RydWN0bmFtZT5mZF9zZXQ8L3N0cnVjdG5hbWU+cy4gV2hlbiB0aGUKK2Z1bmN0aW9uIHRpbWVkIG91dCBpdCByZXR1cm5zIGEgdmFsdWUgb2YgemVyby4gT24gZmFpbHVyZSBpdCByZXR1cm5zCis8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBhbmQgdGhlIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPgordmFyaWFibGUgaXMgc2V0IGFwcHJvcHJpYXRlbHkuIFdoZW4gdGhlIGFwcGxpY2F0aW9uIGRpZCBub3QgY2FsbAorJlZJRElPQy1RQlVGOyBvciAmVklESU9DLVNUUkVBTU9OOyB5ZXQgdGhlCis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBzdWNjZWVkcywgc2V0dGluZyB0aGUgYml0IG9mCit0aGUgZmlsZSBkZXNjcmlwdG9yIGluIDxwYXJhbWV0ZXI+cmVhZGZkczwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj53cml0ZWZkczwvcGFyYW1ldGVyPiwgYnV0IHN1YnNlcXVlbnQgJlZJRElPQy1EUUJVRjsgY2FsbHMKK3dpbGwgZmFpbC48Zm9vdG5vdGU+PHBhcmE+VGhlIExpbnV4IGtlcm5lbCBpbXBsZW1lbnRzCis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBsaWtlIHRoZSAmZnVuYy1wb2xsOyBmdW5jdGlvbiwgYnV0Cis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBjYW5ub3QgcmV0dXJuIGEKKzxjb25zdGFudD5QT0xMRVJSPC9jb25zdGFudD4uPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHVzZSBvZiB0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcworYmVlbiBuZWdvdGlhdGVkIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IGNhcHR1cmUgeWV0LCB0aGUKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHN0YXJ0cyBjYXB0dXJpbmcuIFdoZW4gdGhhdAorZmFpbHMsIDxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IHJldHVybnMgc3VjY2Vzc2Z1bCBhbmQgYQorc3Vic2VxdWVudCA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gY2FsbCwgd2hpY2ggYWxzbyBhdHRlbXB0cyB0bworc3RhcnQgY2FwdHVyaW5nLCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLiBXaGVuIHRoZQorZHJpdmVyIGNhcHR1cmVzIGNvbnRpbnVvdXNseSAoYXMgb3Bwb3NlZCB0bywgZm9yIGV4YW1wbGUsIHN0aWxsCitpbWFnZXMpIGFuZCBkYXRhIGlzIGFscmVhZHkgYXZhaWxhYmxlIHRoZQorPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseS48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHVzZSBvZiB0aGUgPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMKK2JlZW4gbmVnb3RpYXRlZCB0aGUgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24ganVzdCB3YWl0cwordW50aWwgdGhlIGRyaXZlciBpcyByZWFkeSBmb3IgYSBub24tYmxvY2tpbmcKKzxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gY2FsbC48L3BhcmE+CisKKyAgICA8cGFyYT5BbGwgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlIDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBvcgorPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBvciBzdHJlYW1pbmcgSS9PIG11c3QgYWxzbworc3VwcG9ydCB0aGUgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uPC9wYXJhPgorCisgICAgPHBhcmE+Rm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIDxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+CittYW51YWwgcGFnZS48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlJldHVybiBWYWx1ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5PbiBzdWNjZXNzLCA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiByZXR1cm5zIHRoZSBudW1iZXIKK29mIGRlc2NyaXB0b3JzIGNvbnRhaW5lZCBpbiB0aGUgdGhyZWUgcmV0dXJuZWQgZGVzY3JpcHRvciBzZXRzLCB3aGljaAord2lsbCBiZSB6ZXJvIGlmIHRoZSB0aW1lb3V0IGV4cGlyZWQuIE9uIGVycm9yCis8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgYW5kIHRoZQorPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5OyB0aGUgc2V0cyBhbmQKKzxwYXJhbWV0ZXI+dGltZW91dDwvcGFyYW1ldGVyPiBhcmUgdW5kZWZpbmVkLiBQb3NzaWJsZSBlcnJvciBjb2RlcworYXJlOjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+T25lIG9yIG1vcmUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciBzZXRzIHNwZWNpZmllZCBhCitmaWxlIGRlc2NyaXB0b3IgdGhhdCBpcyBub3Qgb3Blbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSByZWFkIG9yIHdyaXRlCitzdHJlYW1zIGFuZCB0aGUgZGV2aWNlIGlzIGFscmVhZHkgaW4gdXNlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUZBVUxUPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPnJlYWRmZHM8L3BhcmFtZXRlcj4sCis8cGFyYW1ldGVyPndyaXRlZmRzPC9wYXJhbWV0ZXI+LCA8cGFyYW1ldGVyPmV4Y2VwdGZkczwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj50aW1lb3V0PC9wYXJhbWV0ZXI+IHBvaW50ZXIgcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUgbWVtb3J5CithcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGNhbGwgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPm5mZHM8L3BhcmFtZXRlcj4gYXJndW1lbnQgaXMgbGVzcyB0aGFuCit6ZXJvIG9yIGdyZWF0ZXIgdGhhbiA8Y29uc3RhbnQ+RkRfU0VUU0laRTwvY29uc3RhbnQ+LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtd3JpdGUueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXdyaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzA5YzA5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXdyaXRlLnhtbApAQCAtMCwwICsxLDEzNiBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLXdyaXRlIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiB3cml0ZSgpPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT52NGwyLXdyaXRlPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPldyaXRlIHRvIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5zc2l6ZV90IDxmdW5jdGlvbj53cml0ZTwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+YnVmPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YnVmPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPjxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gd3JpdGVzIHVwIHRvCis8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+IGJ5dGVzIHRvIHRoZSBkZXZpY2UgcmVmZXJlbmNlZCBieSB0aGUKK2ZpbGUgZGVzY3JpcHRvciA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGZyb20gdGhlIGJ1ZmZlciBzdGFydGluZyBhdAorPHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj4uIFdoZW4gdGhlIGhhcmR3YXJlIG91dHB1dHMgYXJlIG5vdCBhY3RpdmUKK3lldCwgdGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZW0uIFdoZW4gPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPiBpcworemVybywgPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiByZXR1cm5zCis8cmV0dXJudmFsdWU+MDwvcmV0dXJudmFsdWU+IHdpdGhvdXQgYW55IG90aGVyIGVmZmVjdC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBwcm92aWRlIG1vcmUgZGF0YSBpbiB0aW1lLCB0aGUKK3ByZXZpb3VzIHZpZGVvIGZyYW1lLCByYXcgVkJJIGltYWdlLCBzbGljZWQgVlBTIG9yIFdTUyBkYXRhIGlzCitkaXNwbGF5ZWQgYWdhaW4uIFNsaWNlZCBUZWxldGV4dCBvciBDbG9zZWQgQ2FwdGlvbiBkYXRhIGlzIG5vdAorcmVwZWF0ZWQsIHRoZSBkcml2ZXIgaW5zZXJ0cyBhIGJsYW5rIGxpbmUgaW5zdGVhZC48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGFyZSByZXR1cm5lZC4gWmVybworaW5kaWNhdGVzIG5vdGhpbmcgd2FzIHdyaXR0ZW4uIE9uIGVycm9yLCA8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPgoraXMgcmV0dXJuZWQsIGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldAorYXBwcm9wcmlhdGVseS4gSW4gdGhpcyBjYXNlIHRoZSBuZXh0IHdyaXRlIHdpbGwgc3RhcnQgYXQgdGhlIGJlZ2lubmluZworb2YgYSBuZXcgZnJhbWUuIFBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBR0FJTjwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Ob24tYmxvY2tpbmcgSS9PIGhhcyBiZWVuIHNlbGVjdGVkIHVzaW5nIHRoZSA8bGluaworbGlua2VuZD0iZnVuYy1vcGVuIj48Y29uc3RhbnQ+T19OT05CTE9DSzwvY29uc3RhbnQ+PC9saW5rPiBmbGFnIGFuZCBubworYnVmZmVyIHNwYWNlIHdhcyBhdmFpbGFibGUgdG8gd3JpdGUgdGhlIGRhdGEgaW1tZWRpYXRlbHkuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQkFERjwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzIG5vdCBhIHZhbGlkIGZpbGUKK2Rlc2NyaXB0b3Igb3IgaXMgbm90IG9wZW4gZm9yIHdyaXRpbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgd3JpdGUgc3RyZWFtcyBhbmQgdGhlCitkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj4gcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUKK21lbW9yeSBhcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGNhbGwgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGJlZm9yZSBhbnkKK2RhdGEgd2FzIHdyaXR0ZW4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU88L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGVycm9yLiBUaGlzIGluZGljYXRlcyBzb21lIGhhcmR3YXJlIHByb2JsZW0uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgbm90CitzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG5vdCBvbiB0aGlzIGRldmljZSwgb3IgZ2VuZXJhbGx5IG5vdCBvbiB0aGlzCit0eXBlIG9mIGRldmljZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJmMjQzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwKQEAgLTAsMCArMSwxMDczIEBACisgIDx0aXRsZT5JbnB1dC9PdXRwdXQ8L3RpdGxlPgorCisgIDxwYXJhPlRoZSBWNEwyIEFQSSBkZWZpbmVzIHNldmVyYWwgZGlmZmVyZW50IG1ldGhvZHMgdG8gcmVhZCBmcm9tIG9yCit3cml0ZSB0byBhIGRldmljZS4gQWxsIGRyaXZlcnMgZXhjaGFuZ2luZyBkYXRhIHdpdGggYXBwbGljYXRpb25zIG11c3QKK3N1cHBvcnQgYXQgbGVhc3Qgb25lIG9mIHRoZW0uPC9wYXJhPgorCisgIDxwYXJhPlRoZSBjbGFzc2ljIEkvTyBtZXRob2QgdXNpbmcgdGhlIDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPgorYW5kIDxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZAorYWZ0ZXIgb3BlbmluZyBhIFY0TDIgZGV2aWNlLiBXaGVuIHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCittZXRob2QgYXR0ZW1wdHMgdG8gcmVhZCBvciB3cml0ZSB3aWxsIGZhaWwgYXQgYW55IHRpbWUuPC9wYXJhPgorCisgIDxwYXJhPk90aGVyIG1ldGhvZHMgbXVzdCBiZSBuZWdvdGlhdGVkLiBUbyBzZWxlY3QgdGhlIHN0cmVhbWluZyBJL08KK21ldGhvZCB3aXRoIG1lbW9yeSBtYXBwZWQgb3IgdXNlciBidWZmZXJzIGFwcGxpY2F0aW9ucyBjYWxsIHRoZQorJlZJRElPQy1SRVFCVUZTOyBpb2N0bC4gVGhlIGFzeW5jaHJvbm91cyBJL08gbWV0aG9kIGlzIG5vdCBkZWZpbmVkCit5ZXQuPC9wYXJhPgorCisgIDxwYXJhPlZpZGVvIG92ZXJsYXkgY2FuIGJlIGNvbnNpZGVyZWQgYW5vdGhlciBJL08gbWV0aG9kLCBhbHRob3VnaAordGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGRpcmVjdGx5IHJlY2VpdmUgdGhlIGltYWdlIGRhdGEuIEl0IGlzCitzZWxlY3RlZCBieSBpbml0aWF0aW5nIHZpZGVvIG92ZXJsYXkgd2l0aCB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgPHhyZWYgbGlua2VuZD0ib3ZlcmxheSIgLz4uPC9wYXJhPgorCisgIDxwYXJhPkdlbmVyYWxseSBleGFjdGx5IG9uZSBJL08gbWV0aG9kLCBpbmNsdWRpbmcgb3ZlcmxheSwgaXMKK2Fzc29jaWF0ZWQgd2l0aCBlYWNoIGZpbGUgZGVzY3JpcHRvci4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUKK2FwcGxpY2F0aW9ucyBub3QgZXhjaGFuZ2luZyBkYXRhIHdpdGggYSBkcml2ZXIgKCJwYW5lbCBhcHBsaWNhdGlvbnMiLAorc2VlIDx4cmVmIGxpbmtlbmQ9Im9wZW4iIC8+KSBhbmQgZHJpdmVycyBwZXJtaXR0aW5nIHNpbXVsdGFuZW91cyB2aWRlbyBjYXB0dXJpbmcKK2FuZCBvdmVybGF5IHVzaW5nIHRoZSBzYW1lIGZpbGUgZGVzY3JpcHRvciwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBWNEwKK2FuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIuPC9wYXJhPgorCisgIDxwYXJhPjxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfUkVRQlVGUzwvY29uc3RhbnQ+IHdvdWxkIHBlcm1pdCB0aGlzIHRvIHNvbWUgZGVncmVlLAorYnV0IGZvciBzaW1wbGljaXR5IGRyaXZlcnMgbmVlZCBub3Qgc3VwcG9ydCBzd2l0Y2hpbmcgdGhlIEkvTyBtZXRob2QKKyhhZnRlciBmaXJzdCBzd2l0Y2hpbmcgYXdheSBmcm9tIHJlYWQvd3JpdGUpIG90aGVyIHRoYW4gYnkgY2xvc2luZworYW5kIHJlb3BlbmluZyB0aGUgZGV2aWNlLjwvcGFyYT4KKworICA8cGFyYT5UaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSB2YXJpb3VzIEkvTyBtZXRob2RzIGluCittb3JlIGRldGFpbC48L3BhcmE+CisKKyAgPHNlY3Rpb24gaWQ9InJ3Ij4KKyAgICA8dGl0bGU+UmVhZC9Xcml0ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5JbnB1dCBhbmQgb3V0cHV0IGRldmljZXMgc3VwcG9ydCB0aGUKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwKK3Jlc3BlY3RpdmVseSwgd2hlbiB0aGUgPGNvbnN0YW50PlY0TDJfQ0FQX1JFQURXUklURTwvY29uc3RhbnQ+IGZsYWcgaW4KK3RoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bCBpcyBzZXQuPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBtYXkgbmVlZCB0aGUgQ1BVIHRvIGNvcHkgdGhlIGRhdGEsIGJ1dCB0aGV5IG1heSBhbHNvCitzdXBwb3J0IERNQSB0byBvciBmcm9tIHVzZXIgbWVtb3J5LCBzbyB0aGlzIEkvTyBtZXRob2QgaXMgbm90CituZWNlc3NhcmlseSBsZXNzIGVmZmljaWVudCB0aGFuIG90aGVyIG1ldGhvZHMgbWVyZWx5IGV4Y2hhbmdpbmcgYnVmZmVyCitwb2ludGVycy4gSXQgaXMgY29uc2lkZXJlZCBpbmZlcmlvciB0aG91Z2ggYmVjYXVzZSBubyBtZXRhLWluZm9ybWF0aW9uCitsaWtlIGZyYW1lIGNvdW50ZXJzIG9yIHRpbWVzdGFtcHMgYXJlIHBhc3NlZC4gVGhpcyBpbmZvcm1hdGlvbiBpcworbmVjZXNzYXJ5IHRvIHJlY29nbml6ZSBmcmFtZSBkcm9wcGluZyBhbmQgdG8gc3luY2hyb25pemUgd2l0aCBvdGhlcgorZGF0YSBzdHJlYW1zLiBIb3dldmVyIHRoaXMgaXMgYWxzbyB0aGUgc2ltcGxlc3QgSS9PIG1ldGhvZCwgcmVxdWlyaW5nCitsaXR0bGUgb3Igbm8gc2V0dXAgdG8gZXhjaGFuZ2UgZGF0YS4gSXQgcGVybWl0cyBjb21tYW5kIGxpbmUgc3R1bnRzCitsaWtlIHRoaXMgKHRoZSA8YXBwbGljYXRpb24+dmlkY3RybDwvYXBwbGljYXRpb24+IHRvb2wgaXMKK2ZpY3RpdGlvdXMpOjwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICA8c2NyZWVuPgorJmd0OyB2aWRjdHJsIC9kZXYvdmlkZW8gLS1pbnB1dD0wIC0tZm9ybWF0PVlVWVYgLS1zaXplPTM1MngyODgKKyZndDsgZGQgaWY9L2Rldi92aWRlbyBvZj1teWltYWdlLjQyMiBicz0yMDI3NTIgY291bnQ9MQorPC9zY3JlZW4+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICA8cGFyYT5UbyByZWFkIGZyb20gdGhlIGRldmljZSBhcHBsaWNhdGlvbnMgdXNlIHRoZQorJmZ1bmMtcmVhZDsgZnVuY3Rpb24sIHRvIHdyaXRlIHRoZSAmZnVuYy13cml0ZTsgZnVuY3Rpb24uCitEcml2ZXJzIG11c3QgaW1wbGVtZW50IG9uZSBJL08gbWV0aG9kIGlmIHRoZXkKK2V4Y2hhbmdlIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMsIGJ1dCBpdCBuZWVkIG5vdCBiZSB0aGlzLjxmb290bm90ZT4KKwk8cGFyYT5JdCB3b3VsZCBiZSBkZXNpcmFibGUgaWYgYXBwbGljYXRpb25zIGNvdWxkIGRlcGVuZCBvbgorZHJpdmVycyBzdXBwb3J0aW5nIGFsbCBJL08gaW50ZXJmYWNlcywgYnV0IGFzIG11Y2ggYXMgdGhlIGNvbXBsZXgKK21lbW9yeSBtYXBwaW5nIEkvTyBjYW4gYmUgaW5hZGVxdWF0ZSBmb3Igc29tZSBkZXZpY2VzIHdlIGhhdmUgbm8KK3JlYXNvbiB0byByZXF1aXJlIHRoaXMgaW50ZXJmYWNlLCB3aGljaCBpcyBtb3N0IHVzZWZ1bCBmb3Igc2ltcGxlCithcHBsaWNhdGlvbnMgY2FwdHVyaW5nIHN0aWxsIGltYWdlcy48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPiBXaGVuIHJlYWRpbmcgb3Igd3JpdGluZyBpcyBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIKK211c3QgYWxzbyBzdXBwb3J0IHRoZSAmZnVuYy1zZWxlY3Q7IGFuZCAmZnVuYy1wb2xsOworZnVuY3Rpb24uPGZvb3Rub3RlPgorCTxwYXJhPkF0IHRoZSBkcml2ZXIgbGV2ZWwgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gYW5kCis8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gYXJlIHRoZSBzYW1lLCBhbmQKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGlzIHRvbyBpbXBvcnRhbnQgdG8gYmUgb3B0aW9uYWwuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0ibW1hcCI+CisgICAgPHRpdGxlPlN0cmVhbWluZyBJL08gKE1lbW9yeSBNYXBwaW5nKTwvdGl0bGU+CisKKyAgICA8cGFyYT5JbnB1dCBhbmQgb3V0cHV0IGRldmljZXMgc3VwcG9ydCB0aGlzIEkvTyBtZXRob2Qgd2hlbiB0aGUKKzxjb25zdGFudD5WNEwyX0NBUF9TVFJFQU1JTkc8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwgaXMgc2V0LiBUaGVyZSBhcmUgdHdvCitzdHJlYW1pbmcgbWV0aG9kcywgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtZW1vcnkgbWFwcGluZyBmbGF2b3IgaXMKK3N1cHBvcnRlZCBhcHBsaWNhdGlvbnMgbXVzdCBjYWxsIHRoZSAmVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlN0cmVhbWluZyBpcyBhbiBJL08gbWV0aG9kIHdoZXJlIG9ubHkgcG9pbnRlcnMgdG8gYnVmZmVycworYXJlIGV4Y2hhbmdlZCBiZXR3ZWVuIGFwcGxpY2F0aW9uIGFuZCBkcml2ZXIsIHRoZSBkYXRhIGl0c2VsZiBpcyBub3QKK2NvcGllZC4gTWVtb3J5IG1hcHBpbmcgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIG1hcCBidWZmZXJzIGluIGRldmljZQorbWVtb3J5IGludG8gdGhlIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZS4gRGV2aWNlIG1lbW9yeSBjYW4gYmUgZm9yCitleGFtcGxlIHRoZSB2aWRlbyBtZW1vcnkgb24gYSBncmFwaGljcyBjYXJkIHdpdGggYSB2aWRlbyBjYXB0dXJlCithZGQtb24uIEhvd2V2ZXIsIGJlaW5nIHRoZSBtb3N0IGVmZmljaWVudCBJL08gbWV0aG9kIGF2YWlsYWJsZSBmb3IgYQorbG9uZyB0aW1lLCBtYW55IG90aGVyIGRyaXZlcnMgc3VwcG9ydCBzdHJlYW1pbmcgYXMgd2VsbCwgYWxsb2NhdGluZworYnVmZmVycyBpbiBETUEtYWJsZSBtYWluIG1lbW9yeS48L3BhcmE+CisKKyAgICA8cGFyYT5BIGRyaXZlciBjYW4gc3VwcG9ydCBtYW55IHNldHMgb2YgYnVmZmVycy4gRWFjaCBzZXQgaXMKK2lkZW50aWZpZWQgYnkgYSB1bmlxdWUgYnVmZmVyIHR5cGUgdmFsdWUuIFRoZSBzZXRzIGFyZSBpbmRlcGVuZGVudCBhbmQKK2VhY2ggc2V0IGNhbiBob2xkIGEgZGlmZmVyZW50IHR5cGUgb2YgZGF0YS4gVG8gYWNjZXNzIGRpZmZlcmVudCBzZXRzCithdCB0aGUgc2FtZSB0aW1lIGRpZmZlcmVudCBmaWxlIGRlc2NyaXB0b3JzIG11c3QgYmUgdXNlZC48Zm9vdG5vdGU+CisJPHBhcmE+T25lIGNvdWxkIHVzZSBvbmUgZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXQgdGhlIGJ1ZmZlcgordHlwZSBmaWVsZCBhY2NvcmRpbmdseSB3aGVuIGNhbGxpbmcgJlZJRElPQy1RQlVGOyBldGMuLCBidXQgaXQgbWFrZXMKK3RoZSA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBhbWJpZ3VvdXMuIFdlIGFsc28gbGlrZSB0aGUKK2NsZWFuIGFwcHJvYWNoIG9mIG9uZSBmaWxlIGRlc2NyaXB0b3IgcGVyIGxvZ2ljYWwgc3RyZWFtLiBWaWRlbworb3ZlcmxheSBmb3IgZXhhbXBsZSBpcyBhbHNvIGEgbG9naWNhbCBzdHJlYW0sIGFsdGhvdWdoIHRoZSBDUFUgaXMgbm90CituZWVkZWQgZm9yIGNvbnRpbnVvdXMgb3BlcmF0aW9uLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPHBhcmE+VG8gYWxsb2NhdGUgZGV2aWNlIGJ1ZmZlcnMgYXBwbGljYXRpb25zIGNhbGwgdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsIHdpdGggdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgYW5kIGJ1ZmZlcgordHlwZSwgZm9yIGV4YW1wbGUgPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LgorVGhpcyBpb2N0bCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgb3IgdG8gZnJlZQordGhlIGFsbG9jYXRlZCBtZW1vcnksIHByb3ZpZGVkIG5vbmUgb2YgdGhlIGJ1ZmZlcnMgYXJlIHN0aWxsCittYXBwZWQuPC9wYXJhPgorCisgICAgPHBhcmE+QmVmb3JlIGFwcGxpY2F0aW9ucyBjYW4gYWNjZXNzIHRoZSBidWZmZXJzIHRoZXkgbXVzdCBtYXAKK3RoZW0gaW50byB0aGVpciBhZGRyZXNzIHNwYWNlIHdpdGggdGhlICZmdW5jLW1tYXA7IGZ1bmN0aW9uLiBUaGUKK2xvY2F0aW9uIG9mIHRoZSBidWZmZXJzIGluIGRldmljZSBtZW1vcnkgY2FuIGJlIGRldGVybWluZWQgd2l0aCB0aGUKKyZWSURJT0MtUVVFUllCVUY7IGlvY3RsLiBUaGUgPHN0cnVjdGZpZWxkPm0ub2Zmc2V0PC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gcmV0dXJuZWQgaW4gYSAmdjRsMi1idWZmZXI7IGFyZQorcGFzc2VkIGFzIHNpeHRoIGFuZCBzZWNvbmQgcGFyYW1ldGVyIHRvIHRoZQorPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBUaGUgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzCittdXN0IG5vdCBiZSBtb2RpZmllZC4gUmVtZW1iZXIgdGhlIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBpbiBwaHlzaWNhbAorbWVtb3J5LCBhcyBvcHBvc2VkIHRvIHZpcnR1YWwgbWVtb3J5IHdoaWNoIGNhbiBiZSBzd2FwcGVkIG91dCB0byBkaXNrLgorQXBwbGljYXRpb25zIHNob3VsZCBmcmVlIHRoZSBidWZmZXJzIGFzIHNvb24gYXMgcG9zc2libGUgd2l0aCB0aGUKKyZmdW5jLW11bm1hcDsgZnVuY3Rpb24uPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+TWFwcGluZyBidWZmZXJzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IHJlcWJ1ZjsKK3N0cnVjdCB7CisJdm9pZCAqc3RhcnQ7CisJc2l6ZV90IGxlbmd0aDsKK30gKmJ1ZmZlcnM7Cit1bnNpZ25lZCBpbnQgaTsKKworbWVtc2V0ICgmYW1wO3JlcWJ1ZiwgMCwgc2l6ZW9mIChyZXFidWYpKTsKK3JlcWJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworcmVxYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CityZXFidWYuY291bnQgPSAyMDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1SRVFCVUZTOywgJmFtcDtyZXFidWYpKSB7CisJaWYgKGVycm5vID09IEVJTlZBTCkKKwkJcHJpbnRmICgiVmlkZW8gY2FwdHVyaW5nIG9yIG1tYXAtc3RyZWFtaW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCWVsc2UKKwkJcGVycm9yICgiVklESU9DX1JFUUJVRlMiKTsKKworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKKy8qIFdlIHdhbnQgYXQgbGVhc3QgZml2ZSBidWZmZXJzLiAqLworCitpZiAocmVxYnVmLmNvdW50ICZsdDsgNSkgeworCS8qIFlvdSBtYXkgbmVlZCB0byBmcmVlIHRoZSBidWZmZXJzIGhlcmUuICovCisJcHJpbnRmICgiTm90IGVub3VnaCBidWZmZXIgbWVtb3J5XG4iKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitidWZmZXJzID0gY2FsbG9jIChyZXFidWYuY291bnQsIHNpemVvZiAoKmJ1ZmZlcnMpKTsKK2Fzc2VydCAoYnVmZmVycyAhPSBOVUxMKTsKKworZm9yIChpID0gMDsgaSAmbHQ7IHJlcWJ1Zi5jb3VudDsgaSsrKSB7CisJJnY0bDItYnVmZmVyOyBidWZmZXI7CisKKwltZW1zZXQgKCZhbXA7YnVmZmVyLCAwLCBzaXplb2YgKGJ1ZmZlcikpOworCWJ1ZmZlci50eXBlID0gcmVxYnVmLnR5cGU7CisJYnVmZmVyLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJYnVmZmVyLmluZGV4ID0gaTsKKworCWlmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtUVVFUllCVUY7LCAmYW1wO2J1ZmZlcikpIHsKKwkJcGVycm9yICgiVklESU9DX1FVRVJZQlVGIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorCisJYnVmZmVyc1tpXS5sZW5ndGggPSBidWZmZXIubGVuZ3RoOyAvKiByZW1lbWJlciBmb3IgbXVubWFwKCkgKi8KKworCWJ1ZmZlcnNbaV0uc3RhcnQgPSBtbWFwIChOVUxMLCBidWZmZXIubGVuZ3RoLAorCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCAvKiByZWNvbW1lbmRlZCAqLworCQkJCSBNQVBfU0hBUkVELCAgICAgICAgICAgICAvKiByZWNvbW1lbmRlZCAqLworCQkJCSBmZCwgYnVmZmVyLm0ub2Zmc2V0KTsKKworCWlmIChNQVBfRkFJTEVEID09IGJ1ZmZlcnNbaV0uc3RhcnQpIHsKKwkJLyogSWYgeW91IGRvIG5vdCBleGl0IGhlcmUgeW91IHNob3VsZCB1bm1hcCgpIGFuZCBmcmVlKCkKKwkJICAgdGhlIGJ1ZmZlcnMgbWFwcGVkIHNvIGZhci4gKi8KKwkJcGVycm9yICgibW1hcCIpOworCQlleGl0IChFWElUX0ZBSUxVUkUpOworCX0KK30KKworLyogQ2xlYW51cC4gKi8KKworZm9yIChpID0gMDsgaSAmbHQ7IHJlcWJ1Zi5jb3VudDsgaSsrKQorCW11bm1hcCAoYnVmZmVyc1tpXS5zdGFydCwgYnVmZmVyc1tpXS5sZW5ndGgpOworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisKKyAgICA8cGFyYT5Db25jZXB0dWFsbHkgc3RyZWFtaW5nIGRyaXZlcnMgbWFpbnRhaW4gdHdvIGJ1ZmZlciBxdWV1ZXMsIGFuIGluY29taW5nCithbmQgYW4gb3V0Z29pbmcgcXVldWUuIFRoZXkgc2VwYXJhdGUgdGhlIHN5bmNocm9ub3VzIGNhcHR1cmUgb3Igb3V0cHV0CitvcGVyYXRpb24gbG9ja2VkIHRvIGEgdmlkZW8gY2xvY2sgZnJvbSB0aGUgYXBwbGljYXRpb24gd2hpY2ggaXMKK3N1YmplY3QgdG8gcmFuZG9tIGRpc2sgb3IgbmV0d29yayBkZWxheXMgYW5kIHByZWVtcHRpb24gYnkKK290aGVyIHByb2Nlc3NlcywgdGhlcmVieSByZWR1Y2luZyB0aGUgcHJvYmFiaWxpdHkgb2YgZGF0YSBsb3NzLgorVGhlIHF1ZXVlcyBhcmUgb3JnYW5pemVkIGFzIEZJRk9zLCBidWZmZXJzIHdpbGwgYmUKK291dHB1dCBpbiB0aGUgb3JkZXIgZW5xdWV1ZWQgaW4gdGhlIGluY29taW5nIEZJRk8sIGFuZCB3ZXJlCitjYXB0dXJlZCBpbiB0aGUgb3JkZXIgZGVxdWV1ZWQgZnJvbSB0aGUgb3V0Z29pbmcgRklGTy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSByZXF1aXJlIGEgbWluaW11bSBudW1iZXIgb2YgYnVmZmVycyBlbnF1ZXVlZAorYXQgYWxsIHRpbWVzIHRvIGZ1bmN0aW9uLCBhcGFydCBvZiB0aGlzIG5vIGxpbWl0IGV4aXN0cyBvbiB0aGUgbnVtYmVyCitvZiBidWZmZXJzIGFwcGxpY2F0aW9ucyBjYW4gZW5xdWV1ZSBpbiBhZHZhbmNlLCBvciBkZXF1ZXVlIGFuZAorcHJvY2Vzcy4gVGhleSBjYW4gYWxzbyBlbnF1ZXVlIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gYnVmZmVycyBoYXZlCitiZWVuIGRlcXVldWVkLCBhbmQgdGhlIGRyaXZlciBjYW4gPGVtcGhhc2lzPmZpbGw8L2VtcGhhc2lzPiBlbnF1ZXVlZAorPGVtcGhhc2lzPmVtcHR5PC9lbXBoYXNpcz4gYnVmZmVycyBpbiBhbnkgb3JkZXIuIDxmb290bm90ZT4KKwk8cGFyYT5SYW5kb20gZW5xdWV1ZSBvcmRlciBwZXJtaXRzIGFwcGxpY2F0aW9ucyBwcm9jZXNzaW5nCitpbWFnZXMgb3V0IG9mIG9yZGVyIChzdWNoIGFzIHZpZGVvIGNvZGVjcykgdG8gcmV0dXJuIGJ1ZmZlcnMgZWFybGllciwKK3JlZHVjaW5nIHRoZSBwcm9iYWJpbGl0eSBvZiBkYXRhIGxvc3MuIFJhbmRvbSBmaWxsIG9yZGVyIGFsbG93cworZHJpdmVycyB0byByZXVzZSBidWZmZXJzIG9uIGEgTElGTy1iYXNpcywgdGFraW5nIGFkdmFudGFnZSBvZiBjYWNoZXMKK2hvbGRpbmcgc2NhdHRlci1nYXRoZXIgbGlzdHMgYW5kIHRoZSBsaWtlLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+IFRoZSBpbmRleCBudW1iZXIgb2YgYSBidWZmZXIgKCZ2NGwyLWJ1ZmZlcjsKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+KSBwbGF5cyBubyByb2xlIGhlcmUsIGl0IG9ubHkKK2lkZW50aWZpZXMgdGhlIGJ1ZmZlci48L3BhcmE+CisKKyAgICA8cGFyYT5Jbml0aWFsbHkgYWxsIG1hcHBlZCBidWZmZXJzIGFyZSBpbiBkZXF1ZXVlZCBzdGF0ZSwKK2luYWNjZXNzaWJsZSBieSB0aGUgZHJpdmVyLiBGb3IgY2FwdHVyaW5nIGFwcGxpY2F0aW9ucyBpdCBpcyBjdXN0b21hcnkKK3RvIGZpcnN0IGVucXVldWUgYWxsIG1hcHBlZCBidWZmZXJzLCB0aGVuIHRvIHN0YXJ0IGNhcHR1cmluZyBhbmQgZW50ZXIKK3RoZSByZWFkIGxvb3AuIEhlcmUgdGhlIGFwcGxpY2F0aW9uIHdhaXRzIHVudGlsIGEgZmlsbGVkIGJ1ZmZlciBjYW4gYmUKK2RlcXVldWVkLCBhbmQgcmUtZW5xdWV1ZXMgdGhlIGJ1ZmZlciB3aGVuIHRoZSBkYXRhIGlzIG5vIGxvbmdlcgorbmVlZGVkLiBPdXRwdXQgYXBwbGljYXRpb25zIGZpbGwgYW5kIGVucXVldWUgYnVmZmVycywgd2hlbiBlbm91Z2gKK2J1ZmZlcnMgYXJlIHN0YWNrZWQgdXAgdGhlIG91dHB1dCBpcyBzdGFydGVkIHdpdGgKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT048L2NvbnN0YW50Pi4gSW4gdGhlIHdyaXRlIGxvb3AsIHdoZW4KK3RoZSBhcHBsaWNhdGlvbiBydW5zIG91dCBvZiBmcmVlIGJ1ZmZlcnMsIGl0IG11c3Qgd2FpdCB1bnRpbCBhbiBlbXB0eQorYnVmZmVyIGNhbiBiZSBkZXF1ZXVlZCBhbmQgcmV1c2VkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGVucXVldWUgYW5kIGRlcXVldWUgYSBidWZmZXIgYXBwbGljYXRpb25zIHVzZSB0aGUKKyZWSURJT0MtUUJVRjsgYW5kICZWSURJT0MtRFFCVUY7IGlvY3RsLiBUaGUgc3RhdHVzIG9mIGEgYnVmZmVyIGJlaW5nCittYXBwZWQsIGVucXVldWVkLCBmdWxsIG9yIGVtcHR5IGNhbiBiZSBkZXRlcm1pbmVkIGF0IGFueSB0aW1lIHVzaW5nIHRoZQorJlZJRElPQy1RVUVSWUJVRjsgaW9jdGwuIFR3byBtZXRob2RzIGV4aXN0IHRvIHN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZQorYXBwbGljYXRpb24gdW50aWwgb25lIG9yIG1vcmUgYnVmZmVycyBjYW4gYmUgZGVxdWV1ZWQuIEJ5IGRlZmF1bHQKKzxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiBibG9ja3Mgd2hlbiBubyBidWZmZXIgaXMgaW4gdGhlCitvdXRnb2luZyBxdWV1ZS4gV2hlbiB0aGUgPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnIHdhcworZ2l2ZW4gdG8gdGhlICZmdW5jLW9wZW47IGZ1bmN0aW9uLCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KK3JldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBhbiAmRUFHQUlOOyB3aGVuIG5vIGJ1ZmZlciBpcyBhdmFpbGFibGUuIFRoZQorJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBmdW5jdGlvbiBhcmUgYWx3YXlzIGF2YWlsYWJsZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzdGFydCBhbmQgc3RvcCBjYXB0dXJpbmcgb3Igb3V0cHV0IGFwcGxpY2F0aW9ucyBjYWxsIHRoZQorJlZJRElPQy1TVFJFQU1PTjsgYW5kICZWSURJT0MtU1RSRUFNT0ZGOyBpb2N0bC4gTm90ZQorPGNvbnN0YW50PlZJRElPQ19TVFJFQU1PRkY8L2NvbnN0YW50PiByZW1vdmVzIGFsbCBidWZmZXJzIGZyb20gYm90aAorcXVldWVzIGFzIGEgc2lkZSBlZmZlY3QuIFNpbmNlIHRoZXJlIGlzIG5vIG5vdGlvbiBvZiBkb2luZyBhbnl0aGluZworIm5vdyIgb24gYSBtdWx0aXRhc2tpbmcgc3lzdGVtLCBpZiBhbiBhcHBsaWNhdGlvbiBuZWVkcyB0byBzeW5jaHJvbml6ZQord2l0aCBhbm90aGVyIGV2ZW50IGl0IHNob3VsZCBleGFtaW5lIHRoZSAmdjRsMi1idWZmZXI7Cis8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gb2YgY2FwdHVyZWQgYnVmZmVycywgb3Igc2V0IHRoZQorZmllbGQgYmVmb3JlIGVucXVldWluZyBidWZmZXJzIGZvciBvdXRwdXQuPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBpbXBsZW1lbnRpbmcgbWVtb3J5IG1hcHBpbmcgSS9PIG11c3QKK3N1cHBvcnQgdGhlIDxjb25zdGFudD5WSURJT0NfUkVRQlVGUzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJRElPQ19RVUVSWUJVRjwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD4sIDxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT048L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT0ZGPC9jb25zdGFudD4gaW9jdGwsIHRoZQorPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+bXVubWFwKCk8L2Z1bmN0aW9uPiwKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4KK2Z1bmN0aW9uLjxmb290bm90ZT4KKwk8cGFyYT5BdCB0aGUgZHJpdmVyIGxldmVsIDxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGFuZAorPGZ1bmN0aW9uPnBvbGwoKTwvZnVuY3Rpb24+IGFyZSB0aGUgc2FtZSwgYW5kCis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBpcyB0b28gaW1wb3J0YW50IHRvIGJlIG9wdGlvbmFsLiBUaGUKK3Jlc3Qgc2hvdWxkIGJlIGV2aWRlbnQuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5bY2FwdHVyZSBleGFtcGxlXTwvcGFyYT4KKworICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InVzZXJwIj4KKyAgICA8dGl0bGU+U3RyZWFtaW5nIEkvTyAoVXNlciBQb2ludGVycyk8L3RpdGxlPgorCisgICAgPHBhcmE+SW5wdXQgYW5kIG91dHB1dCBkZXZpY2VzIHN1cHBvcnQgdGhpcyBJL08gbWV0aG9kIHdoZW4gdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfU1RSRUFNSU5HPC9jb25zdGFudD4gZmxhZyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXRpZXM8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1jYXBhYmlsaXR5OworcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsIGlzIHNldC4gSWYgdGhlIHBhcnRpY3VsYXIgdXNlcgorcG9pbnRlciBtZXRob2QgKG5vdCBvbmx5IG1lbW9yeSBtYXBwaW5nKSBpcyBzdXBwb3J0ZWQgbXVzdCBiZQorZGV0ZXJtaW5lZCBieSBjYWxsaW5nIHRoZSAmVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlRoaXMgSS9PIG1ldGhvZCBjb21iaW5lcyBhZHZhbnRhZ2VzIG9mIHRoZSByZWFkL3dyaXRlIGFuZAorbWVtb3J5IG1hcHBpbmcgbWV0aG9kcy4gQnVmZmVycyBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgoraXRzZWxmLCBhbmQgY2FuIHJlc2lkZSBmb3IgZXhhbXBsZSBpbiB2aXJ0dWFsIG9yIHNoYXJlZCBtZW1vcnkuIE9ubHkKK3BvaW50ZXJzIHRvIGRhdGEgYXJlIGV4Y2hhbmdlZCwgdGhlc2UgcG9pbnRlcnMgYW5kIG1ldGEtaW5mb3JtYXRpb24KK2FyZSBwYXNzZWQgaW4gJnY0bDItYnVmZmVyOy4gVGhlIGRyaXZlciBtdXN0IGJlIHN3aXRjaGVkCitpbnRvIHVzZXIgcG9pbnRlciBJL08gbW9kZSBieSBjYWxsaW5nIHRoZSAmVklESU9DLVJFUUJVRlM7IHdpdGggdGhlCitkZXNpcmVkIGJ1ZmZlciB0eXBlLiBObyBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYmVmb3JlaGFuZHMsCitjb25zZXF1ZW50bHkgdGhleSBhcmUgbm90IGluZGV4ZWQgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGxpa2UgbWFwcGVkCitidWZmZXJzIHdpdGggdGhlIDxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDx0aXRsZT5Jbml0aWF0aW5nIHN0cmVhbWluZyBJL08gd2l0aCB1c2VyIHBvaW50ZXJzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IHJlcWJ1ZjsKKworbWVtc2V0ICgmYW1wO3JlcWJ1ZiwgMCwgc2l6ZW9mIChyZXFidWYpKTsKK3JlcWJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworcmVxYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX1VTRVJQVFI7CisKK2lmIChpb2N0bCAoZmQsICZWSURJT0MtUkVRQlVGUzssICZhbXA7cmVxYnVmKSA9PSAtMSkgeworCWlmIChlcnJubyA9PSBFSU5WQUwpCisJCXByaW50ZiAoIlZpZGVvIGNhcHR1cmluZyBvciB1c2VyIHBvaW50ZXIgc3RyZWFtaW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCWVsc2UKKwkJcGVycm9yICgiVklESU9DX1JFUUJVRlMiKTsKKworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxwYXJhPkJ1ZmZlciBhZGRyZXNzZXMgYW5kIHNpemVzIGFyZSBwYXNzZWQgb24gdGhlIGZseSB3aXRoIHRoZQorJlZJRElPQy1RQlVGOyBpb2N0bC4gQWx0aG91Z2ggYnVmZmVycyBhcmUgY29tbW9ubHkgY3ljbGVkLAorYXBwbGljYXRpb25zIGNhbiBwYXNzIGRpZmZlcmVudCBhZGRyZXNzZXMgYW5kIHNpemVzIGF0IGVhY2gKKzxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGNhbGwuIElmIHJlcXVpcmVkIGJ5IHRoZSBoYXJkd2FyZSB0aGUKK2RyaXZlciBzd2FwcyBtZW1vcnkgcGFnZXMgd2l0aGluIHBoeXNpY2FsIG1lbW9yeSB0byBjcmVhdGUgYQorY29udGludW91cyBhcmVhIG9mIG1lbW9yeS4gVGhpcyBoYXBwZW5zIHRyYW5zcGFyZW50bHkgdG8gdGhlCithcHBsaWNhdGlvbiBpbiB0aGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWwuIFdoZW4gYnVmZmVyCitwYWdlcyBoYXZlIGJlZW4gc3dhcHBlZCBvdXQgdG8gZGlzayB0aGV5IGFyZSBicm91Z2h0IGJhY2sgYW5kIGZpbmFsbHkKK2xvY2tlZCBpbiBwaHlzaWNhbCBtZW1vcnkgZm9yIERNQS48Zm9vdG5vdGU+CisJPHBhcmE+V2UgZXhwZWN0IHRoYXQgZnJlcXVlbnRseSB1c2VkIGJ1ZmZlcnMgYXJlIHR5cGljYWxseSBub3QKK3N3YXBwZWQgb3V0LiBBbnl3YXksIHRoZSBwcm9jZXNzIG9mIHN3YXBwaW5nLCBsb2NraW5nIG9yIGdlbmVyYXRpbmcKK3NjYXR0ZXItZ2F0aGVyIGxpc3RzIG1heSBiZSB0aW1lIGNvbnN1bWluZy4gVGhlIGRlbGF5IGNhbiBiZSBtYXNrZWQgYnkKK3RoZSBkZXB0aCBvZiB0aGUgaW5jb21pbmcgYnVmZmVyIHF1ZXVlLCBhbmQgcGVyaGFwcyBieSBtYWludGFpbmluZworY2FjaGVzIGFzc3VtaW5nIGEgYnVmZmVyIHdpbGwgYmUgc29vbiBlbnF1ZXVlZCBhZ2Fpbi4gT24gdGhlIG90aGVyCitoYW5kLCB0byBvcHRpbWl6ZSBtZW1vcnkgdXNhZ2UgZHJpdmVycyBjYW4gbGltaXQgdGhlIG51bWJlciBvZiBidWZmZXJzCitsb2NrZWQgaW4gYWR2YW5jZSBhbmQgcmVjeWNsZSB0aGUgbW9zdCByZWNlbnRseSB1c2VkIGJ1ZmZlcnMgZmlyc3QuIE9mCitjb3Vyc2UsIHRoZSBwYWdlcyBvZiBlbXB0eSBidWZmZXJzIGluIHRoZSBpbmNvbWluZyBxdWV1ZSBuZWVkIG5vdCBiZQorc2F2ZWQgdG8gZGlzay4gT3V0cHV0IGJ1ZmZlcnMgbXVzdCBiZSBzYXZlZCBvbiB0aGUgaW5jb21pbmcgYW5kCitvdXRnb2luZyBxdWV1ZSBiZWNhdXNlIGFuIGFwcGxpY2F0aW9uIG1heSBzaGFyZSB0aGVtIHdpdGggb3RoZXIKK3Byb2Nlc3Nlcy48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPjwvcGFyYT4KKworICAgIDxwYXJhPkZpbGxlZCBvciBkaXNwbGF5ZWQgYnVmZmVycyBhcmUgZGVxdWV1ZWQgd2l0aCB0aGUKKyZWSURJT0MtRFFCVUY7IGlvY3RsLiBUaGUgZHJpdmVyIGNhbiB1bmxvY2sgdGhlIG1lbW9yeSBwYWdlcyBhdCBhbnkKK3RpbWUgYmV0d2VlbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgRE1BIGFuZCB0aGlzIGlvY3RsLiBUaGUgbWVtb3J5IGlzCithbHNvIHVubG9ja2VkIHdoZW4gJlZJRElPQy1TVFJFQU1PRkY7IGlzIGNhbGxlZCwgJlZJRElPQy1SRVFCVUZTOywgb3IKK3doZW4gdGhlIGRldmljZSBpcyBjbG9zZWQuIEFwcGxpY2F0aW9ucyBtdXN0IHRha2UgY2FyZSBub3QgdG8gZnJlZQorYnVmZmVycyB3aXRob3V0IGRlcXVldWluZy4gRm9yIG9uY2UsIHRoZSBidWZmZXJzIHJlbWFpbiBsb2NrZWQgdW50aWwKK2Z1cnRoZXIsIHdhc3RpbmcgcGh5c2ljYWwgbWVtb3J5LiBTZWNvbmQgdGhlIGRyaXZlciB3aWxsIG5vdCBiZQorbm90aWZpZWQgd2hlbiB0aGUgbWVtb3J5IGlzIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbidzIGZyZWUgbGlzdAorYW5kIHN1YnNlcXVlbnRseSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBwb3NzaWJseSBjb21wbGV0aW5nIHRoZQorcmVxdWVzdGVkIERNQSBhbmQgb3ZlcndyaXRpbmcgdmFsdWFibGUgZGF0YS48L3BhcmE+CisKKyAgICA8cGFyYT5Gb3IgY2FwdHVyaW5nIGFwcGxpY2F0aW9ucyBpdCBpcyBjdXN0b21hcnkgdG8gZW5xdWV1ZSBhCitudW1iZXIgb2YgZW1wdHkgYnVmZmVycywgdG8gc3RhcnQgY2FwdHVyaW5nIGFuZCBlbnRlciB0aGUgcmVhZCBsb29wLgorSGVyZSB0aGUgYXBwbGljYXRpb24gd2FpdHMgdW50aWwgYSBmaWxsZWQgYnVmZmVyIGNhbiBiZSBkZXF1ZXVlZCwgYW5kCityZS1lbnF1ZXVlcyB0aGUgYnVmZmVyIHdoZW4gdGhlIGRhdGEgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3V0cHV0CithcHBsaWNhdGlvbnMgZmlsbCBhbmQgZW5xdWV1ZSBidWZmZXJzLCB3aGVuIGVub3VnaCBidWZmZXJzIGFyZSBzdGFja2VkCit1cCBvdXRwdXQgaXMgc3RhcnRlZC4gSW4gdGhlIHdyaXRlIGxvb3AsIHdoZW4gdGhlIGFwcGxpY2F0aW9uCitydW5zIG91dCBvZiBmcmVlIGJ1ZmZlcnMgaXQgbXVzdCB3YWl0IHVudGlsIGFuIGVtcHR5IGJ1ZmZlciBjYW4gYmUKK2RlcXVldWVkIGFuZCByZXVzZWQuIFR3byBtZXRob2RzIGV4aXN0IHRvIHN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZQorYXBwbGljYXRpb24gdW50aWwgb25lIG9yIG1vcmUgYnVmZmVycyBjYW4gYmUgZGVxdWV1ZWQuIEJ5IGRlZmF1bHQKKzxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiBibG9ja3Mgd2hlbiBubyBidWZmZXIgaXMgaW4gdGhlCitvdXRnb2luZyBxdWV1ZS4gV2hlbiB0aGUgPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnIHdhcworZ2l2ZW4gdG8gdGhlICZmdW5jLW9wZW47IGZ1bmN0aW9uLCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KK3JldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBhbiAmRUFHQUlOOyB3aGVuIG5vIGJ1ZmZlciBpcyBhdmFpbGFibGUuIFRoZQorJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBmdW5jdGlvbiBhcmUgYWx3YXlzIGF2YWlsYWJsZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzdGFydCBhbmQgc3RvcCBjYXB0dXJpbmcgb3Igb3V0cHV0IGFwcGxpY2F0aW9ucyBjYWxsIHRoZQorJlZJRElPQy1TVFJFQU1PTjsgYW5kICZWSURJT0MtU1RSRUFNT0ZGOyBpb2N0bC4gTm90ZQorPGNvbnN0YW50PlZJRElPQ19TVFJFQU1PRkY8L2NvbnN0YW50PiByZW1vdmVzIGFsbCBidWZmZXJzIGZyb20gYm90aAorcXVldWVzIGFuZCB1bmxvY2tzIGFsbCBidWZmZXJzIGFzIGEgc2lkZSBlZmZlY3QuIFNpbmNlIHRoZXJlIGlzIG5vCitub3Rpb24gb2YgZG9pbmcgYW55dGhpbmcgIm5vdyIgb24gYSBtdWx0aXRhc2tpbmcgc3lzdGVtLCBpZiBhbgorYXBwbGljYXRpb24gbmVlZHMgdG8gc3luY2hyb25pemUgd2l0aCBhbm90aGVyIGV2ZW50IGl0IHNob3VsZCBleGFtaW5lCit0aGUgJnY0bDItYnVmZmVyOyA8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gb2YgY2FwdHVyZWQKK2J1ZmZlcnMsIG9yIHNldCB0aGUgZmllbGQgYmVmb3JlIGVucXVldWluZyBidWZmZXJzIGZvciBvdXRwdXQuPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBpbXBsZW1lbnRpbmcgdXNlciBwb2ludGVyIEkvTyBtdXN0CitzdXBwb3J0IHRoZSA8Y29uc3RhbnQ+VklESU9DX1JFUUJVRlM8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9GRjwvY29uc3RhbnQ+IGlvY3RsLCB0aGUKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uPGZvb3Rub3RlPgorCTxwYXJhPkF0IHRoZSBkcml2ZXIgbGV2ZWwgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gYW5kCis8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gYXJlIHRoZSBzYW1lLCBhbmQKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGlzIHRvbyBpbXBvcnRhbnQgdG8gYmUgb3B0aW9uYWwuIFRoZQorcmVzdCBzaG91bGQgYmUgZXZpZGVudC48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJhc3luYyI+CisgICAgPHRpdGxlPkFzeW5jaHJvbm91cyBJL088L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQgeWV0LjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJidWZmZXIiPgorICAgIDx0aXRsZT5CdWZmZXJzPC90aXRsZT4KKworICAgIDxwYXJhPkEgYnVmZmVyIGNvbnRhaW5zIGRhdGEgZXhjaGFuZ2VkIGJ5IGFwcGxpY2F0aW9uIGFuZAorZHJpdmVyIHVzaW5nIG9uZSBvZiB0aGUgU3RyZWFtaW5nIEkvTyBtZXRob2RzLiBPbmx5IHBvaW50ZXJzIHRvCitidWZmZXJzIGFyZSBleGNoYW5nZWQsIHRoZSBkYXRhIGl0c2VsZiBpcyBub3QgY29waWVkLiBUaGVzZSBwb2ludGVycywKK3RvZ2V0aGVyIHdpdGggbWV0YS1pbmZvcm1hdGlvbiBsaWtlIHRpbWVzdGFtcHMgb3IgZmllbGQgcGFyaXR5LCBhcmUKK3N0b3JlZCBpbiBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2J1ZmZlcjwvc3RydWN0bmFtZT4sIGFyZ3VtZW50IHRvCit0aGUgJlZJRElPQy1RVUVSWUJVRjssICZWSURJT0MtUUJVRjsgYW5kICZWSURJT0MtRFFCVUY7IGlvY3RsLjwvcGFyYT4KKworICAgICAgPHBhcmE+Tm9taW5hbGx5IHRpbWVzdGFtcHMgcmVmZXIgdG8gdGhlIGZpcnN0IGRhdGEgYnl0ZSB0cmFuc21pdHRlZC4KK0luIHByYWN0aWNlIGhvd2V2ZXIgdGhlIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgY292ZXJlZCBieSB0aGUgVjRMMiBBUEkKK2xpbWl0cyB0aW1lc3RhbXAgYWNjdXJhY3kuIE9mdGVuIGFuIGludGVycnVwdCByb3V0aW5lIHdpbGwKK3NhbXBsZSB0aGUgc3lzdGVtIGNsb2NrIHNob3J0bHkgYWZ0ZXIgdGhlIGZpZWxkIG9yIGZyYW1lIHdhcyBzdG9yZWQKK2NvbXBsZXRlbHkgaW4gbWVtb3J5LiBTbyBhcHBsaWNhdGlvbnMgbXVzdCBleHBlY3QgYSBjb25zdGFudAorZGlmZmVyZW5jZSB1cCB0byBvbmUgZmllbGQgb3IgZnJhbWUgcGVyaW9kIHBsdXMgYSBzbWFsbCAoZmV3IHNjYW4KK2xpbmVzKSByYW5kb20gZXJyb3IuIFRoZSBkZWxheSBhbmQgZXJyb3IgY2FuIGJlIG11Y2gKK2xhcmdlciBkdWUgdG8gY29tcHJlc3Npb24gb3IgdHJhbnNtaXNzaW9uIG92ZXIgYW4gZXh0ZXJuYWwgYnVzIHdoZW4KK3RoZSBmcmFtZXMgYXJlIG5vdCBwcm9wZXJseSBzdGFtcGVkIGJ5IHRoZSBzZW5kZXIuIFRoaXMgaXMgZnJlcXVlbnRseQordGhlIGNhc2Ugd2l0aCBVU0IgY2FtZXJhcy4gSGVyZSB0aW1lc3RhbXBzIHJlZmVyIHRvIHRoZSBpbnN0YW50IHRoZQorZmllbGQgb3IgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZSBkcml2ZXIsIG5vdCB0aGUgY2FwdHVyZSB0aW1lLiBUaGVzZQorZGV2aWNlcyBpZGVudGlmeSBieSBub3QgZW51bWVyYXRpbmcgYW55IHZpZGVvIHN0YW5kYXJkcywgc2VlIDx4cmVmCitsaW5rZW5kPSJzdGFuZGFyZCIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5TaW1pbGFyIGxpbWl0YXRpb25zIGFwcGx5IHRvIG91dHB1dCB0aW1lc3RhbXBzLiBUeXBpY2FsbHkKK3RoZSB2aWRlbyBoYXJkd2FyZSBsb2NrcyB0byBhIGNsb2NrIGNvbnRyb2xsaW5nIHRoZSB2aWRlbyB0aW1pbmcsIHRoZQoraG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc3luY2hyb25pemF0aW9uIHB1bHNlcy4gQXQgc29tZSBwb2ludCBpbiB0aGUKK2xpbmUgc2VxdWVuY2UsIHBvc3NpYmx5IHRoZSB2ZXJ0aWNhbCBibGFua2luZywgYW4gaW50ZXJydXB0IHJvdXRpbmUKK3NhbXBsZXMgdGhlIHN5c3RlbSBjbG9jaywgY29tcGFyZXMgYWdhaW5zdCB0aGUgdGltZXN0YW1wIGFuZCBwcm9ncmFtcwordGhlIGhhcmR3YXJlIHRvIHJlcGVhdCB0aGUgcHJldmlvdXMgZmllbGQgb3IgZnJhbWUsIG9yIHRvIGRpc3BsYXkgdGhlCitidWZmZXIgY29udGVudHMuPC9wYXJhPgorCisgICAgICA8cGFyYT5BcGFydCBvZiBsaW1pdGF0aW9ucyBvZiB0aGUgdmlkZW8gZGV2aWNlIGFuZCBuYXR1cmFsCitpbmFjY3VyYWNpZXMgb2YgYWxsIGNsb2NrcywgaXQgc2hvdWxkIGJlIG5vdGVkIHN5c3RlbSB0aW1lIGl0c2VsZiBpcworbm90IHBlcmZlY3RseSBzdGFibGUuIEl0IGNhbiBiZSBhZmZlY3RlZCBieSBwb3dlciBzYXZpbmcgY3ljbGVzLAord2FycGVkIHRvIGluc2VydCBsZWFwIHNlY29uZHMsIG9yIGV2ZW4gdHVybmVkIGJhY2sgb3IgZm9ydGggYnkgdGhlCitzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZmZlY3RpbmcgbG9uZyB0ZXJtIG1lYXN1cmVtZW50cy4gPGZvb3Rub3RlPgorCSAgPHBhcmE+U2luY2Ugbm8gb3RoZXIgTGludXggbXVsdGltZWRpYQorQVBJIHN1cHBvcnRzIHVuYWRqdXN0ZWQgdGltZSBpdCB3b3VsZCBiZSBmb29saXNoIHRvIGludHJvZHVjZSBoZXJlLiBXZQorbXVzdCB1c2UgYSB1bml2ZXJzYWxseSBzdXBwb3J0ZWQgY2xvY2sgdG8gc3luY2hyb25pemUgZGlmZmVyZW50IG1lZGlhLAoraGVuY2UgdGltZSBvZiBkYXkuPC9wYXJhPgorCTwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWJ1ZmZlciI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfYnVmZmVyPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCSZjcy11c3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk51bWJlciBvZiB0aGUgYnVmZmVyLCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLiBUaGlzCitmaWVsZCBpcyBvbmx5IHVzZWQgZm9yIDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBJL08KK2FuZCBjYW4gcmFuZ2UgZnJvbSB6ZXJvIHRvIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQKK3dpdGggdGhlICZWSURJT0MtUkVRQlVGUzsgaW9jdGwgKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VHlwZSBvZiB0aGUgYnVmZmVyLCBzYW1lIGFzICZ2NGwyLWZvcm1hdDsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gb3IgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Ynl0ZXN1c2VkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgYnl0ZXMgb2NjdXBpZWQgYnkgdGhlIGRhdGEgaW4gdGhlCitidWZmZXIuIEl0IGRlcGVuZHMgb24gdGhlIG5lZ290aWF0ZWQgZGF0YSBmb3JtYXQgYW5kIG1heSBjaGFuZ2Ugd2l0aAorZWFjaCBidWZmZXIgZm9yIGNvbXByZXNzZWQgdmFyaWFibGUgc2l6ZSBkYXRhIGxpa2UgSlBFRyBpbWFnZXMuCitEcml2ZXJzIG11c3Qgc2V0IHRoaXMgZmllbGQgd2hlbiA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+CityZWZlcnMgdG8gYW4gaW5wdXQgc3RyZWFtLCBhcHBsaWNhdGlvbnMgd2hlbiBhbiBvdXRwdXQgc3RyZWFtLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+RmxhZ3Mgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiBvciBkcml2ZXIsIHNlZSA8eHJlZgorbGlua2VuZD0iYnVmZmVyLWZsYWdzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JbmRpY2F0ZXMgdGhlIGZpZWxkIG9yZGVyIG9mIHRoZSBpbWFnZSBpbiB0aGUKK2J1ZmZlciwgc2VlIDx4cmVmIGxpbmtlbmQ9InY0bDItZmllbGQiIC8+LiBUaGlzIGZpZWxkIGlzIG5vdCB1c2VkIHdoZW4KK3RoZSBidWZmZXIgY29udGFpbnMgVkJJIGRhdGEuIERyaXZlcnMgbXVzdCBzZXQgaXQgd2hlbgorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiByZWZlcnMgdG8gYW4gaW5wdXQgc3RyZWFtLAorYXBwbGljYXRpb25zIHdoZW4gYW4gb3V0cHV0IHN0cmVhbS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+c3RydWN0IHRpbWV2YWw8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5Gb3IgaW5wdXQgc3RyZWFtcyB0aGlzIGlzIHRoZQorc3lzdGVtIHRpbWUgKGFzIHJldHVybmVkIGJ5IHRoZSA8ZnVuY3Rpb24+Z2V0dGltZW9mZGF5KCk8L2Z1bmN0aW9uPgorZnVuY3Rpb24pIHdoZW4gdGhlIGZpcnN0IGRhdGEgYnl0ZSB3YXMgY2FwdHVyZWQuIEZvciBvdXRwdXQgc3RyZWFtcwordGhlIGRhdGEgd2lsbCBub3QgYmUgZGlzcGxheWVkIGJlZm9yZSB0aGlzIHRpbWUsIHNlY29uZGFyeSB0byB0aGUKK25vbWluYWwgZnJhbWUgcmF0ZSBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkIGluCitlbnF1ZXVlZCBvcmRlci4gQXBwbGljYXRpb25zIGNhbiBmb3IgZXhhbXBsZSB6ZXJvIHRoaXMgZmllbGQgdG8KK2Rpc3BsYXkgZnJhbWVzIGFzIHNvb24gYXMgcG9zc2libGUuIFRoZSBkcml2ZXIgc3RvcmVzIHRoZSB0aW1lIGF0Cit3aGljaCB0aGUgZmlyc3QgZGF0YSBieXRlIHdhcyBhY3R1YWxseSBzZW50IG91dCBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZC4gVGhpcyBwZXJtaXRzCithcHBsaWNhdGlvbnMgdG8gbW9uaXRvciB0aGUgZHJpZnQgYmV0d2VlbiB0aGUgdmlkZW8gYW5kIHN5c3RlbQorY2xvY2suPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi10aW1lY29kZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVjb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBpcworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+IGFuZCB0aGUKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX1RJTUVDT0RFPC9jb25zdGFudD4gZmxhZyBpcyBzZXQgaW4KKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+LCB0aGlzIHN0cnVjdHVyZSBjb250YWlucyBhIGZyYW1lCit0aW1lY29kZS4gSW4gPGxpbmsgbGlua2VuZD0idjRsMi1maWVsZCI+VjRMMl9GSUVMRF9BTFRFUk5BVEU8L2xpbms+Cittb2RlIHRoZSB0b3AgYW5kIGJvdHRvbSBmaWVsZCBjb250YWluIHRoZSBzYW1lIHRpbWVjb2RlLgorVGltZWNvZGVzIGFyZSBpbnRlbmRlZCB0byBoZWxwIHZpZGVvIGVkaXRpbmcgYW5kIGFyZSB0eXBpY2FsbHkgcmVjb3JkZWQgb24KK3ZpZGVvIHRhcGVzLCBidXQgYWxzbyBlbWJlZGRlZCBpbiBjb21wcmVzc2VkIGZvcm1hdHMgbGlrZSBNUEVHLiBUaGlzCitmaWVsZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgPHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnNlcXVlbmNlPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VxdWVuY2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+U2V0IGJ5IHRoZSBkcml2ZXIsIGNvdW50aW5nIHRoZSBmcmFtZXMgaW4gdGhlCitzZXF1ZW5jZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5JbiA8bGluaworbGlua2VuZD0idjRsMi1maWVsZCI+VjRMMl9GSUVMRF9BTFRFUk5BVEU8L2xpbms+IG1vZGUgdGhlIHRvcCBhbmQKK2JvdHRvbSBmaWVsZCBoYXZlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlci4gVGhlIGNvdW50IHN0YXJ0cyBhdCB6ZXJvCithbmQgaW5jbHVkZXMgZHJvcHBlZCBvciByZXBlYXRlZCBmcmFtZXMuIEEgZHJvcHBlZCBmcmFtZSB3YXMgcmVjZWl2ZWQKK2J5IGFuIGlucHV0IGRldmljZSBidXQgY291bGQgbm90IGJlIHN0b3JlZCBkdWUgdG8gbGFjayBvZiBmcmVlIGJ1ZmZlcgorc3BhY2UuIEEgcmVwZWF0ZWQgZnJhbWUgd2FzIGRpc3BsYXllZCBhZ2FpbiBieSBhbiBvdXRwdXQgZGV2aWNlCitiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbiBkaWQgbm90IHBhc3MgbmV3IGRhdGEgaW4KK3RpbWUuPC9wYXJhPjxwYXJhPk5vdGUgdGhpcyBtYXkgY291bnQgdGhlIGZyYW1lcyByZWNlaXZlZAorZS5nLiBvdmVyIFVTQiwgd2l0aG91dCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmcmFtZXMgZHJvcHBlZCBieSB0aGUKK3JlbW90ZSBoYXJkd2FyZSBkdWUgdG8gbGltaXRlZCBjb21wcmVzc2lvbiB0aHJvdWdocHV0IG9yIGJ1cworYmFuZHdpZHRoLiBUaGVzZSBkZXZpY2VzIGlkZW50aWZ5IGJ5IG5vdCBlbnVtZXJhdGluZyBhbnkgdmlkZW8KK3N0YW5kYXJkcywgc2VlIDx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkIiAvPi48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLW1lbW9yeTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGZpZWxkIG11c3QgYmUgc2V0IGJ5IGFwcGxpY2F0aW9ucyBhbmQvb3IgZHJpdmVycworaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzZWxlY3RlZCBJL08gbWV0aG9kLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2hlbiA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4gdGhpcyBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIKK2Zyb20gdGhlIHN0YXJ0IG9mIHRoZSBkZXZpY2UgbWVtb3J5LiBUaGUgdmFsdWUgaXMgcmV0dXJuZWQgYnkgdGhlCitkcml2ZXIgYW5kIGFwYXJ0IG9mIHNlcnZpbmcgYXMgcGFyYW1ldGVyIHRvIHRoZSAmZnVuYy1tbWFwOyBmdW5jdGlvbgorbm90IHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zLiBTZWUgPHhyZWYgbGlua2VuZD0ibW1hcCIgLz4gZm9yIGRldGFpbHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT51bnNpZ25lZCBsb25nPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD51c2VycHRyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2hlbiA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX01FTU9SWV9VU0VSUFRSPC9jb25zdGFudD4gdGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlCitidWZmZXIgKGNhc3RlZCB0byB1bnNpZ25lZCBsb25nIHR5cGUpIGluIHZpcnR1YWwgbWVtb3J5LCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi4gU2VlIDx4cmVmIGxpbmtlbmQ9InVzZXJwIiAvPiBmb3IgZGV0YWlscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5TaXplIG9mIHRoZSBidWZmZXIgKG5vdCB0aGUgcGF5bG9hZCkgaW4gYnl0ZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5Tb21lIHZpZGVvIGNhcHR1cmUgZHJpdmVycyBzdXBwb3J0IHJhcGlkIGFuZAorc3luY2hyb25vdXMgdmlkZW8gaW5wdXQgY2hhbmdlcywgYSBmdW5jdGlvbiB1c2VmdWwgZm9yIGV4YW1wbGUgaW4KK3ZpZGVvIHN1cnZlaWxsYW5jZSBhcHBsaWNhdGlvbnMuIEZvciB0aGlzIHB1cnBvc2UgYXBwbGljYXRpb25zIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0lOUFVUPC9jb25zdGFudD4gZmxhZywgYW5kIHRoaXMgZmllbGQgdG8gdGhlCitudW1iZXIgb2YgYSB2aWRlbyBpbnB1dCBhcyBpbiAmdjRsMi1pbnB1dDsgZmllbGQKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kIGhpZ2hlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItYnVmLXR5cGUiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl9idWZfdHlwZTwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5CdWZmZXIgb2YgYSB2aWRlbyBjYXB0dXJlIHN0cmVhbSwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9ImNhcHR1cmUiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJ1ZmZlciBvZiBhIHZpZGVvIG91dHB1dCBzdHJlYW0sIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJvdXRwdXQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5CdWZmZXIgZm9yIHZpZGVvIG92ZXJsYXksIHNlZSA8eHJlZiBsaW5rZW5kPSJvdmVybGF5IiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJ1ZmZlciBvZiBhIHJhdyBWQkkgY2FwdHVyZSBzdHJlYW0sIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJyYXctdmJpIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+QnVmZmVyIG9mIGEgcmF3IFZCSSBvdXRwdXQgc3RyZWFtLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0icmF3LXZiaSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+QnVmZmVyIG9mIGEgc2xpY2VkIFZCSSBjYXB0dXJlIHN0cmVhbSwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9InNsaWNlZCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5CdWZmZXIgb2YgYSBzbGljZWQgVkJJIG91dHB1dCBzdHJlYW0sIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJzbGljZWQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjg8L2VudHJ5PgorCSAgICA8ZW50cnk+QnVmZmVyIGZvciB2aWRlbyBvdXRwdXQgb3ZlcmxheSAoT1NEKSwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9Im9zZCIgLz4uIFN0YXR1czogPGxpbmsKK2xpbmtlbmQ9ImV4cGVyaW1lbnRhbCI+RXhwZXJpbWVudGFsPC9saW5rPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4ODA8L2VudHJ5PgorCSAgPGVudHJ5PlRoaXMgYW5kIGhpZ2hlciB2YWx1ZXMgYXJlIHJlc2VydmVkIGZvciBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0iYnVmZmVyLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5CdWZmZXIgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBidWZmZXIgcmVzaWRlcyBpbiBkZXZpY2UgbWVtb3J5IGFuZCBoYXMgYmVlbiBtYXBwZWQKK2ludG8gdGhlIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZSwgc2VlIDx4cmVmIGxpbmtlbmQ9Im1tYXAiIC8+IGZvciBkZXRhaWxzLgorRHJpdmVycyBzZXQgb3IgY2xlYXIgdGhpcyBmbGFnIHdoZW4gdGhlCis8bGluayBsaW5rZW5kPSJ2aWRpb2MtcXVlcnlidWYiPlZJRElPQ19RVUVSWUJVRjwvbGluaz4sIDxsaW5rCisJICBsaW5rZW5kPSJ2aWRpb2MtcWJ1ZiI+VklESU9DX1FCVUY8L2xpbms+IG9yIDxsaW5rCisJICBsaW5rZW5kPSJ2aWRpb2MtcWJ1ZiI+VklESU9DX0RRQlVGPC9saW5rPiBpb2N0bCBpcyBjYWxsZWQuIFNldCBieSB0aGUgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgPGVudHJ5PkludGVybmFsbHkgZHJpdmVycyBtYWludGFpbiB0d28gYnVmZmVyIHF1ZXVlcywgYW4KK2luY29taW5nIGFuZCBvdXRnb2luZyBxdWV1ZS4gV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgYnVmZmVyIGlzCitjdXJyZW50bHkgb24gdGhlIGluY29taW5nIHF1ZXVlLiBJdCBhdXRvbWF0aWNhbGx5IG1vdmVzIHRvIHRoZQorb3V0Z29pbmcgcXVldWUgYWZ0ZXIgdGhlIGJ1ZmZlciBoYXMgYmVlbiBmaWxsZWQgKGNhcHR1cmUgZGV2aWNlcykgb3IKK2Rpc3BsYXllZCAob3V0cHV0IGRldmljZXMpLiBEcml2ZXJzIHNldCBvciBjbGVhciB0aGlzIGZsYWcgd2hlbiB0aGUKKzxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PiBpb2N0bCBpcyBjYWxsZWQuIEFmdGVyCisoc3VjY2Vzc2Z1bCkgY2FsbGluZyB0aGUgPGNvbnN0YW50PlZJRElPQ19RQlVGIDwvY29uc3RhbnQ+aW9jdGwgaXQgaXMKK2Fsd2F5cyBzZXQgYW5kIGFmdGVyIDxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiBhbHdheXMKK2NsZWFyZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDQ8L2VudHJ5PgorCSAgICA8ZW50cnk+V2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgYnVmZmVyIGlzIGN1cnJlbnRseSBvbgordGhlIG91dGdvaW5nIHF1ZXVlLCByZWFkeSB0byBiZSBkZXF1ZXVlZCBmcm9tIHRoZSBkcml2ZXIuIERyaXZlcnMgc2V0CitvciBjbGVhciB0aGlzIGZsYWcgd2hlbiB0aGUgPGNvbnN0YW50PlZJRElPQ19RVUVSWUJVRjwvY29uc3RhbnQ+IGlvY3RsCitpcyBjYWxsZWQuIEFmdGVyIGNhbGxpbmcgdGhlIDxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gaXQgaXMgYWx3YXlzIGNsZWFyZWQuIE9mIGNvdXJzZSBhCitidWZmZXIgY2Fubm90IGJlIG9uIGJvdGggcXVldWVzIGF0IHRoZSBzYW1lIHRpbWUsIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfUVVFVUVEPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19ET05FPC9jb25zdGFudD4gZmxhZyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorVGhleSBjYW4gYmUgYm90aCBjbGVhcmVkIGhvd2V2ZXIsIHRoZW4gdGhlIGJ1ZmZlciBpcyBpbiAiZGVxdWV1ZWQiCitzdGF0ZSwgaW4gdGhlIGFwcGxpY2F0aW9uIGRvbWFpbiB0byBzYXkgc28uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0tFWUZSQU1FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA4PC9lbnRyeT4KKwkgIDxlbnRyeT5Ecml2ZXJzIHNldCBvciBjbGVhciB0aGlzIGZsYWcgd2hlbiBjYWxsaW5nIHRoZQorPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+IGlvY3RsLiBJdCBtYXkgYmUgc2V0IGJ5IHZpZGVvCitjYXB0dXJlIGRldmljZXMgd2hlbiB0aGUgYnVmZmVyIGNvbnRhaW5zIGEgY29tcHJlc3NlZCBpbWFnZSB3aGljaCBpcyBhCitrZXkgZnJhbWUgKG9yIGZpZWxkKSwgJmllOyBjYW4gYmUgZGVjb21wcmVzc2VkIG9uIGl0cyBvd24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX1BGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAxMDwvZW50cnk+CisJICAgIDxlbnRyeT5TaW1pbGFyIHRvIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0tFWUZSQU1FPC9jb25zdGFudD4KK3RoaXMgZmxhZ3MgcHJlZGljdGVkIGZyYW1lcyBvciBmaWVsZHMgd2hpY2ggY29udGFpbiBvbmx5IGRpZmZlcmVuY2VzIHRvIGEKK3ByZXZpb3VzIGtleSBmcmFtZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfQkZSQU1FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlNpbWlsYXIgdG8gPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfUEZSQU1FPC9jb25zdGFudD4KKwl0aGlzIGlzIGEgYmlkaXJlY3Rpb25hbCBwcmVkaWN0ZWQgZnJhbWUgb3IgZmllbGQuIFtvb2MgdGJkXTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19USU1FQ09ERTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDEwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgPHN0cnVjdGZpZWxkPnRpbWVjb2RlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgdmFsaWQuCitEcml2ZXJzIHNldCBvciBjbGVhciB0aGlzIGZsYWcgd2hlbiB0aGUgPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+Citpb2N0bCBpcyBjYWxsZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0lOUFVUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMjAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSA8c3RydWN0ZmllbGQ+aW5wdXQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyB2YWxpZC4KK0FwcGxpY2F0aW9ucyBzZXQgb3IgY2xlYXIgdGhpcyBmbGFnIGJlZm9yZSBjYWxsaW5nIHRoZQorPGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD4gaW9jdGwuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLW1lbW9yeSI+CisgICAgICA8dGl0bGU+ZW51bSB2NGwyX21lbW9yeTwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGJ1ZmZlciBpcyB1c2VkIGZvciA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkKK21hcHBpbmc8L2xpbms+IEkvTy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBidWZmZXIgaXMgdXNlZCBmb3IgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIKK3BvaW50ZXI8L2xpbms+IEkvTy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTUVNT1JZX09WRVJMQVk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5Plt0byBkb108L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5UaW1lY29kZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdG5hbWU+djRsMl90aW1lY29kZTwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGlzCitkZXNpZ25lZCB0byBob2xkIGEgPHhyZWYgbGlua2VuZD0ic21wdGUxMm0iIC8+IG9yIHNpbWlsYXIgdGltZWNvZGUuCisoc3RydWN0IDxzdHJ1Y3RuYW1lPnRpbWV2YWw8L3N0cnVjdG5hbWU+IHRpbWVzdGFtcHMgYXJlIHN0b3JlZCBpbgorJnY0bDItYnVmZmVyOyBmaWVsZCA8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4uKTwvcGFyYT4KKworICAgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXRpbWVjb2RlIj4KKwk8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfdGltZWNvZGU8L3N0cnVjdG5hbWU+PC90aXRsZT4KKwk8dGdyb3VwIGNvbHM9IjMiPgorCSAgJmNzLXN0cjsKKwkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPGVudHJ5PkZyYW1lIHJhdGUgdGhlIHRpbWVjb2RlcyBhcmUgYmFzZWQgb24sIHNlZSA8eHJlZgorCQkgIGxpbmtlbmQ9InRpbWVjb2RlLXR5cGUiIC8+LjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+VGltZWNvZGUgZmxhZ3MsIHNlZSA8eHJlZiBsaW5rZW5kPSJ0aW1lY29kZS1mbGFncyIgLz4uPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZnJhbWVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5GcmFtZSBjb3VudCwgMCAuLi4gMjMvMjQvMjkvNDkvNTksIGRlcGVuZGluZyBvbiB0aGUKKwkgICAgdHlwZSBvZiB0aW1lY29kZS48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZWNvbmRzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5TZWNvbmRzIGNvdW50LCAwIC4uLiA1OS4gVGhpcyBpcyBhIGJpbmFyeSwgbm90IEJDRCBudW1iZXIuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWludXRlczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+TWludXRlcyBjb3VudCwgMCAuLi4gNTkuIFRoaXMgaXMgYSBiaW5hcnksIG5vdCBCQ0QgbnVtYmVyLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhvdXJzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5Ib3VycyBjb3VudCwgMCAuLi4gMjkuIFRoaXMgaXMgYSBiaW5hcnksIG5vdCBCQ0QgbnVtYmVyLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnVzZXJiaXRzPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICAgIDxlbnRyeT5UaGUgInVzZXIgZ3JvdXAiIGJpdHMgZnJvbSB0aGUgdGltZWNvZGUuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8L3Rib2R5PgorCTwvdGdyb3VwPgorICAgICAgPC90YWJsZT4KKworICAgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ0aW1lY29kZS10eXBlIj4KKwk8dGl0bGU+VGltZWNvZGUgVHlwZXM8L3RpdGxlPgorCTx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RDX1RZUEVfMjRGUFM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICAgIDxlbnRyeT4yNCBmcmFtZXMgcGVyIHNlY29uZCwgaS4mbmJzcDtlLiBmaWxtLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19UWVBFXzI1RlBTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MjUgZnJhbWVzIHBlciBzZWNvbmQsICZpZTsgUEFMIG9yIFNFQ0FNIHZpZGVvLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19UWVBFXzMwRlBTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MzAgZnJhbWVzIHBlciBzZWNvbmQsICZpZTsgTlRTQyB2aWRlby48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVFlQRV81MEZQUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19UWVBFXzYwRlBTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8L3Rib2R5PgorCTwvdGdyb3VwPgorICAgICAgPC90YWJsZT4KKworICAgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ0aW1lY29kZS1mbGFncyI+CisJPHRpdGxlPlRpbWVjb2RlIEZsYWdzPC90aXRsZT4KKwk8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19GTEFHX0RST1BGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+SW5kaWNhdGVzICJkcm9wIGZyYW1lIiBzZW1hbnRpY3MgZm9yIGNvdW50aW5nIGZyYW1lcworaW4gMjkuOTcgZnBzIG1hdGVyaWFsLiBXaGVuIHNldCwgZnJhbWUgbnVtYmVycyAwIGFuZCAxIGF0IHRoZSBzdGFydCBvZgorZWFjaCBtaW51dGUsIGV4Y2VwdCBtaW51dGVzIDAsIDEwLCAyMCwgMzAsIDQwLCA1MCBhcmUgb21pdHRlZCBmcm9tIHRoZQorY291bnQuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RDX0ZMQUdfQ09MT1JGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+VGhlICJjb2xvciBmcmFtZSIgZmxhZy48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVVNFUkJJVFNfZmllbGQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MDAwQzwvZW50cnk+CisJICAgICAgPGVudHJ5PkZpZWxkIG1hc2sgZm9yIHRoZSAiYmluYXJ5IGdyb3VwIGZsYWdzIi48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVVNFUkJJVFNfVVNFUkRFRklORUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MDAwMDwvZW50cnk+CisJICAgICAgPGVudHJ5PlVuc3BlY2lmaWVkIGZvcm1hdC48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVVNFUkJJVFNfOEJJVENIQVJTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT44LWJpdCBJU08gY2hhcmFjdGVycy48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJmaWVsZC1vcmRlciI+CisgICAgPHRpdGxlPkZpZWxkIE9yZGVyPC90aXRsZT4KKworICAgIDxwYXJhPldlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBwcm9ncmVzc2l2ZSBhbmQgaW50ZXJsYWNlZAordmlkZW8uIFByb2dyZXNzaXZlIHZpZGVvIHRyYW5zbWl0cyBhbGwgbGluZXMgb2YgYSB2aWRlbyBpbWFnZQorc2VxdWVudGlhbGx5LiBJbnRlcmxhY2VkIHZpZGVvIGRpdmlkZXMgYW4gaW1hZ2UgaW50byB0d28gZmllbGRzLAorY29udGFpbmluZyBvbmx5IHRoZSBvZGQgYW5kIGV2ZW4gbGluZXMgb2YgdGhlIGltYWdlLCByZXNwZWN0aXZlbHkuCitBbHRlcm5hdGluZyB0aGUgc28gY2FsbGVkIG9kZCBhbmQgZXZlbiBmaWVsZCBhcmUgdHJhbnNtaXR0ZWQsIGFuZCBkdWUKK3RvIGEgc21hbGwgZGVsYXkgYmV0d2VlbiBmaWVsZHMgYSBjYXRob2RlIHJheSBUViBkaXNwbGF5cyB0aGUgbGluZXMKK2ludGVybGVhdmVkLCB5aWVsZGluZyB0aGUgb3JpZ2luYWwgZnJhbWUuIFRoaXMgY3VyaW91cyB0ZWNobmlxdWUgd2FzCitpbnZlbnRlZCBiZWNhdXNlIGF0IHJlZnJlc2ggcmF0ZXMgc2ltaWxhciB0byBmaWxtIHRoZSBpbWFnZSB3b3VsZAorZmFkZSBvdXQgdG9vIHF1aWNrbHkuIFRyYW5zbWl0dGluZyBmaWVsZHMgcmVkdWNlcyB0aGUgZmxpY2tlciB3aXRob3V0Cit0aGUgbmVjZXNzaXR5IG9mIGRvdWJsaW5nIHRoZSBmcmFtZSByYXRlIGFuZCB3aXRoIGl0IHRoZSBiYW5kd2lkdGgKK3JlcXVpcmVkIGZvciBlYWNoIGNoYW5uZWwuPC9wYXJhPgorCisgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgYSB2aWRlbyBjYW1lcmEgZG9lcyBub3QgZXhwb3NlCitvbmUgZnJhbWUgYXQgYSB0aW1lLCBtZXJlbHkgdHJhbnNtaXR0aW5nIHRoZSBmcmFtZXMgc2VwYXJhdGVkIGludG8KK2ZpZWxkcy4gVGhlIGZpZWxkcyBhcmUgaW4gZmFjdCBjYXB0dXJlZCBhdCB0d28gZGlmZmVyZW50IGluc3RhbmNlcyBpbgordGltZS4gQW4gb2JqZWN0IG9uIHNjcmVlbiBtYXkgd2VsbCBtb3ZlIGJldHdlZW4gb25lIGZpZWxkIGFuZCB0aGUKK25leHQuIEZvciBhcHBsaWNhdGlvbnMgYW5hbHlzaW5nIG1vdGlvbiBpdCBpcyBvZiBwYXJhbW91bnQgaW1wb3J0YW5jZQordG8gcmVjb2duaXplIHdoaWNoIGZpZWxkIG9mIGEgZnJhbWUgaXMgb2xkZXIsIHRoZSA8ZW1waGFzaXM+dGVtcG9yYWwKK29yZGVyPC9lbXBoYXNpcz4uPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiB0aGUgZHJpdmVyIHByb3ZpZGVzIG9yIGFjY2VwdHMgaW1hZ2VzIGZpZWxkIGJ5IGZpZWxkCityYXRoZXIgdGhhbiBpbnRlcmxlYXZlZCwgaXQgaXMgYWxzbyBpbXBvcnRhbnQgYXBwbGljYXRpb25zIHVuZGVyc3RhbmQKK2hvdyB0aGUgZmllbGRzIGNvbWJpbmUgdG8gZnJhbWVzLiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRvcCBhbmQKK2JvdHRvbSBmaWVsZHMsIHRoZSA8ZW1waGFzaXM+c3BhdGlhbCBvcmRlcjwvZW1waGFzaXM+OiBUaGUgZmlyc3QgbGluZQorb2YgdGhlIHRvcCBmaWVsZCBpcyB0aGUgZmlyc3QgbGluZSBvZiBhbiBpbnRlcmxhY2VkIGZyYW1lLCB0aGUgZmlyc3QKK2xpbmUgb2YgdGhlIGJvdHRvbSBmaWVsZCBpcyB0aGUgc2Vjb25kIGxpbmUgb2YgdGhhdCBmcmFtZS48L3BhcmE+CisKKyAgICA8cGFyYT5Ib3dldmVyIGJlY2F1c2UgZmllbGRzIHdlcmUgY2FwdHVyZWQgb25lIGFmdGVyIHRoZSBvdGhlciwKK2FyZ3Vpbmcgd2hldGhlciBhIGZyYW1lIGNvbW1lbmNlcyB3aXRoIHRoZSB0b3Agb3IgYm90dG9tIGZpZWxkIGlzCitwb2ludGxlc3MuIEFueSB0d28gc3VjY2Vzc2l2ZSB0b3AgYW5kIGJvdHRvbSwgb3IgYm90dG9tIGFuZCB0b3AgZmllbGRzCit5aWVsZCBhIHZhbGlkIGZyYW1lLiBPbmx5IHdoZW4gdGhlIHNvdXJjZSB3YXMgcHJvZ3Jlc3NpdmUgdG8gYmVnaW4KK3dpdGgsICZlZzsgd2hlbiB0cmFuc2ZlcnJpbmcgZmlsbSB0byB2aWRlbywgdHdvIGZpZWxkcyBtYXkgY29tZSBmcm9tCit0aGUgc2FtZSBmcmFtZSwgY3JlYXRpbmcgYSBuYXR1cmFsIG9yZGVyLjwvcGFyYT4KKworICAgIDxwYXJhPkNvdW50ZXIgdG8gaW50dWl0aW9uIHRoZSB0b3AgZmllbGQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZQorb2xkZXIgZmllbGQuIFdoZXRoZXIgdGhlIG9sZGVyIGZpZWxkIGNvbnRhaW5zIHRoZSB0b3Agb3IgYm90dG9tIGxpbmVzCitpcyBhIGNvbnZlbnRpb24gZGV0ZXJtaW5lZCBieSB0aGUgdmlkZW8gc3RhbmRhcmQuIEhlbmNlIHRoZQorZGlzdGluY3Rpb24gYmV0d2VlbiB0ZW1wb3JhbCBhbmQgc3BhdGlhbCBvcmRlciBvZiBmaWVsZHMuIFRoZSBkaWFncmFtcworYmVsb3cgc2hvdWxkIG1ha2UgdGhpcyBjbGVhcmVyLjwvcGFyYT4KKworICAgIDxwYXJhPkFsbCB2aWRlbyBjYXB0dXJlIGFuZCBvdXRwdXQgZGV2aWNlcyBtdXN0IHJlcG9ydCB0aGUgY3VycmVudAorZmllbGQgb3JkZXIuIFNvbWUgZHJpdmVycyBtYXkgcGVybWl0IHRoZSBzZWxlY3Rpb24gb2YgYSBkaWZmZXJlbnQKK29yZGVyLCB0byB0aGlzIGVuZCBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLXBpeC1mb3JtYXQ7IGJlZm9yZQorY2FsbGluZyB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuIElmIHRoaXMgaXMgbm90IGRlc2lyZWQgaXQgc2hvdWxkCitoYXZlIHRoZSB2YWx1ZSA8Y29uc3RhbnQ+VjRMMl9GSUVMRF9BTlk8L2NvbnN0YW50PiAoMCkuPC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWZpZWxkIj4KKyAgICAgIDx0aXRsZT5lbnVtIHY0bDJfZmllbGQ8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRklFTERfQU5ZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT5BcHBsaWNhdGlvbnMgcmVxdWVzdCB0aGlzIGZpZWxkIG9yZGVyIHdoZW4gYW55CitvbmUgb2YgdGhlIDxjb25zdGFudD5WNEwyX0ZJRUxEX05PTkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfRklFTERfQk9UVE9NPC9jb25zdGFudD4sIG9yCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9JTlRFUkxBQ0VEPC9jb25zdGFudD4gZm9ybWF0cyBpcyBhY2NlcHRhYmxlLgorRHJpdmVycyBjaG9vc2UgZGVwZW5kaW5nIG9uIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvciBlLiZuYnNwO2cuIHRoZQorcmVxdWVzdGVkIGltYWdlIHNpemUsIGFuZCByZXR1cm4gdGhlIGFjdHVhbCBmaWVsZCBvcmRlci4gJnY0bDItYnVmZmVyOworPHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD4gY2FuIG5ldmVyIGJlCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9BTlk8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRklFTERfTk9ORTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+SW1hZ2VzIGFyZSBpbiBwcm9ncmVzc2l2ZSBmb3JtYXQsIG5vdCBpbnRlcmxhY2VkLgorVGhlIGRyaXZlciBtYXkgYWxzbyBpbmRpY2F0ZSB0aGlzIG9yZGVyIHdoZW4gaXQgY2Fubm90IGRpc3Rpbmd1aXNoCitiZXR3ZWVuIDxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfRklFTERfQk9UVE9NPC9jb25zdGFudD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+SW1hZ2VzIGNvbnNpc3Qgb2YgdGhlIHRvcCBmaWVsZCBvbmx5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GSUVMRF9CT1RUT008L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb25zaXN0IG9mIHRoZSBib3R0b20gZmllbGQgb25seS4KK0FwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBwcmV2ZW50IGEgZGV2aWNlIGZyb20gY2FwdHVyaW5nIGludGVybGFjZWQKK2ltYWdlcyBiZWNhdXNlIHRoZXkgd2lsbCBoYXZlICJjb21iIiBvciAiZmVhdGhlcmluZyIgYXJ0ZWZhY3RzIGFyb3VuZAorbW92aW5nIG9iamVjdHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb250YWluIGJvdGggZmllbGRzLCBpbnRlcmxlYXZlZCBsaW5lIGJ5CitsaW5lLiBUaGUgdGVtcG9yYWwgb3JkZXIgb2YgdGhlIGZpZWxkcyAod2hldGhlciB0aGUgdG9wIG9yIGJvdHRvbQorZmllbGQgaXMgZmlyc3QgdHJhbnNtaXR0ZWQpIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQuCitNL05UU0MgdHJhbnNtaXRzIHRoZSBib3R0b20gZmllbGQgZmlyc3QsIGFsbCBvdGhlciBzdGFuZGFyZHMgdGhlIHRvcAorZmllbGQgZmlyc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9UQjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+SW1hZ2VzIGNvbnRhaW4gYm90aCBmaWVsZHMsIHRoZSB0b3AgZmllbGQgbGluZXMKK2FyZSBzdG9yZWQgZmlyc3QgaW4gbWVtb3J5LCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGUgYm90dG9tIGZpZWxkCitsaW5lcy4gRmllbGRzIGFyZSBhbHdheXMgc3RvcmVkIGluIHRlbXBvcmFsIG9yZGVyLCB0aGUgb2xkZXIgb25lIGZpcnN0CitpbiBtZW1vcnkuIEltYWdlIHNpemVzIHJlZmVyIHRvIHRoZSBmcmFtZSwgbm90IGZpZWxkcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRklFTERfU0VRX0JUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT5JbWFnZXMgY29udGFpbiBib3RoIGZpZWxkcywgdGhlIGJvdHRvbSBmaWVsZAorbGluZXMgYXJlIHN0b3JlZCBmaXJzdCBpbiBtZW1vcnksIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSB0b3AKK2ZpZWxkIGxpbmVzLiBGaWVsZHMgYXJlIGFsd2F5cyBzdG9yZWQgaW4gdGVtcG9yYWwgb3JkZXIsIHRoZSBvbGRlciBvbmUKK2ZpcnN0IGluIG1lbW9yeS4gSW1hZ2Ugc2l6ZXMgcmVmZXIgdG8gdGhlIGZyYW1lLCBub3QgZmllbGRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GSUVMRF9BTFRFUk5BVEU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0d28gZmllbGRzIG9mIGEgZnJhbWUgYXJlIHBhc3NlZCBpbiBzZXBhcmF0ZQorYnVmZmVycywgaW4gdGVtcG9yYWwgb3JkZXIsICZpZTsgdGhlIG9sZGVyIG9uZSBmaXJzdC4gVG8gaW5kaWNhdGUgdGhlIGZpZWxkCitwYXJpdHkgKHdoZXRoZXIgdGhlIGN1cnJlbnQgZmllbGQgaXMgYSB0b3Agb3IgYm90dG9tIGZpZWxkKSB0aGUgZHJpdmVyCitvciBhcHBsaWNhdGlvbiwgZGVwZW5kaW5nIG9uIGRhdGEgZGlyZWN0aW9uLCBtdXN0IHNldCAmdjRsMi1idWZmZXI7Cis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiB0bworPGNvbnN0YW50PlY0TDJfRklFTERfVE9QPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0ZJRUxEX0JPVFRPTTwvY29uc3RhbnQ+LiBBbnkgdHdvIHN1Y2Nlc3NpdmUgZmllbGRzIHBhaXIKK3RvIGJ1aWxkIGEgZnJhbWUuIElmIGZpZWxkcyBhcmUgc3VjY2Vzc2l2ZSwgd2l0aG91dCBhbnkgZHJvcHBlZCBmaWVsZHMKK2JldHdlZW4gdGhlbSAoZmllbGRzIGNhbiBkcm9wIGluZGl2aWR1YWxseSksIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20KK3RoZSAmdjRsMi1idWZmZXI7IDxzdHJ1Y3RmaWVsZD5zZXF1ZW5jZTwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJbWFnZQorc2l6ZXMgcmVmZXIgdG8gdGhlIGZyYW1lLCBub3QgZmllbGRzLiBUaGlzIGZvcm1hdCBjYW5ub3QgYmUgc2VsZWN0ZWQKK3doZW4gdXNpbmcgdGhlIHJlYWQvd3JpdGUgSS9PIG1ldGhvZC48IS0tIFdoZXJlIGl0J3MgaW5kaXN0aW5ndWlzaGFibGUKK2Zyb20gVjRMMl9GSUVMRF9TRVFfKi4gLS0+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb250YWluIGJvdGggZmllbGRzLCBpbnRlcmxlYXZlZCBsaW5lIGJ5CitsaW5lLCB0b3AgZmllbGQgZmlyc3QuIFRoZSB0b3AgZmllbGQgaXMgdHJhbnNtaXR0ZWQgZmlyc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT45PC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb250YWluIGJvdGggZmllbGRzLCBpbnRlcmxlYXZlZCBsaW5lIGJ5CitsaW5lLCB0b3AgZmllbGQgZmlyc3QuIFRoZSBib3R0b20gZmllbGQgaXMgdHJhbnNtaXR0ZWQgZmlyc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPGZpZ3VyZSBpZD0iZmllbGRzZXEtdGIiPgorCTx0aXRsZT5GaWVsZCBPcmRlciwgVG9wIEZpZWxkIEZpcnN0IFRyYW5zbWl0dGVkPC90aXRsZT4KKwk8bWVkaWFvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmllbGRzZXFfdGIucGRmIiBmb3JtYXQ9IlBTIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWVsZHNlcV90Yi5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwk8L21lZGlhb2JqZWN0PgorICAgIDwvZmlndXJlPgorCisgICAgPGZpZ3VyZSBpZD0iZmllbGRzZXEtYnQiPgorCTx0aXRsZT5GaWVsZCBPcmRlciwgQm90dG9tIEZpZWxkIEZpcnN0IFRyYW5zbWl0dGVkPC90aXRsZT4KKwk8bWVkaWFvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmllbGRzZXFfYnQucGRmIiBmb3JtYXQ9IlBTIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWVsZHNlcV9idC5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwk8L21lZGlhb2JqZWN0PgorICAgIDwvZmlndXJlPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2tleXRhYmxlLmMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9rZXl0YWJsZS5jLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTMyNTRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9rZXl0YWJsZS5jLnhtbApAQCAtMCwwICsxLDE3MiBAQAorPHByb2dyYW1saXN0aW5nPgorLyoga2V5dGFibGUuYyAtIFRoaXMgcHJvZ3JhbSBhbGxvd3MgY2hlY2tpbmcvcmVwbGFjaW5nIGtleXMgYXQgSVIKKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiICZsdDttY2hlaGFiQGluZnJhZGVhZC5vcmcmZ3Q7CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICZsdDtjdHlwZS5oJmd0OworI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKKyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O2xpbnV4L2lucHV0LmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CisKKyNpbmNsdWRlICJwYXJzZS5oIgorCit2b2lkIHBydGNvZGUgKGludCAqY29kZXMpCit7CisgICAgICAgIHN0cnVjdCBwYXJzZV9rZXkgKnA7CisKKyAgICAgICAgZm9yIChwPWtleW5hbWVzO3AtJmd0O25hbWUhPU5VTEw7cCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHAtJmd0O3ZhbHVlID09ICh1bnNpZ25lZCljb2Rlc1sxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzY2FuY29kZSAweCUwNHggPSAlcyAoMHglMDJ4KVxuIiwgY29kZXNbMF0sIHAtJmd0O25hbWUsIGNvZGVzWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNwcmludCAoY29kZXNbMV0pKQorICAgICAgICAgICAgICAgIHByaW50Zigic2NhbmNvZGUgJWQgPSAnJWMnICgweCUwMngpXG4iLCBjb2Rlc1swXSwgY29kZXNbMV0sIGNvZGVzWzFdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50Zigic2NhbmNvZGUgJWQgPSAweCUwMnhcbiIsIGNvZGVzWzBdLCBjb2Rlc1sxXSk7Cit9CisKK2ludCBwYXJzZV9jb2RlKGNoYXIgKnN0cmluZykKK3sKKyAgICAgICAgc3RydWN0IHBhcnNlX2tleSAqcDsKKworICAgICAgICBmb3IgKHA9a2V5bmFtZXM7cC0mZ3Q7bmFtZSE9TlVMTDtwKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAocC0mZ3Q7bmFtZSwgc3RyaW5nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAtJmd0O3ZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgICAgICBpbnQgZmQ7CisgICAgICAgIHVuc2lnbmVkIGludCBpLCBqOworICAgICAgICBpbnQgY29kZXNbMl07CisKKyAgICAgICAgaWYgKGFyZ2MmbHQ7MiB8fCBhcmdjJmd0OzQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYgKCJ1c2FnZTogJXMgJmx0O2RldmljZSZndDsgdG8gZ2V0IHRhYmxlOyBvclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAlcyAmbHQ7ZGV2aWNlJmd0OyAmbHQ7c2NhbmNvZGUmZ3Q7ICZsdDtrZXljb2RlJmd0O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAlcyAmbHQ7ZGV2aWNlJmd0OyAmbHQ7a2V5Y29kZV9maWxlJmd0O1xuIiwqYXJndiwqYXJndiwqYXJndik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChmZCA9IG9wZW4oYXJndlsxXSwgT19SRE9OTFkpKSAmbHQ7IDApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoIkNvdWxkbid0IG9wZW4gaW5wdXQgZGV2aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmdjPT00KSB7CisgICAgICAgICAgICAgICAgaW50IHZhbHVlOworCisgICAgICAgICAgICAgICAgdmFsdWU9cGFyc2VfY29kZShhcmd2WzNdKTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZT09LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RydG9sKGFyZ3ZbM10sIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm5vKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29kZXMgWzBdID0gKHVuc2lnbmVkKSBzdHJ0b2woYXJndlsyXSwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29kZXMgWzFdID0gKHVuc2lnbmVkKSB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGlmKGlvY3RsKGZkLCBFVklPQ1NLRVlDT0RFLCBjb2RlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJFVklPQ1NLRVlDT0RFIik7CisKKyAgICAgICAgICAgICAgICBpZihpb2N0bChmZCwgRVZJT0NHS0VZQ09ERSwgY29kZXMpPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJ0Y29kZShjb2Rlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJnYz09MykgeworICAgICAgICAgICAgICAgIEZJTEUgKmZpbjsKKyAgICAgICAgICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgICAgICAgICAgY2hhciAqc2NhbmNvZGUsICprZXljb2RlLCBzWzIwNDhdOworCisgICAgICAgICAgICAgICAgZmluPWZvcGVuKGFyZ3ZbMl0sInIiKTsKKyAgICAgICAgICAgICAgICBpZiAoZmluPT1OVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJvcGVuaW5nIGtleWNvZGUgZmlsZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIENsZWFycyBvbGQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqICZsdDsgMjU2OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc1swXSA9IChqICZsdDsmbHQ7IDgpIHwgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNbMV0gPSBLRVlfUkVTRVJWRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvY3RsKGZkLCBFVklPQ1NLRVlDT0RFLCBjb2Rlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2hpbGUgKGZnZXRzKHMsc2l6ZW9mKHMpLGZpbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5jb2RlPXN0cnRvayhzLCJcblx0ID06Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjYW5jb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvciAoInBhcnNpbmcgaW5wdXQgZmlsZSBzY2FuY29kZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoc2NhbmNvZGUsICJzY2FuY29kZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5jb2RlID0gc3RydG9rKE5VTEwsIlxuXHQgPToiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2FuY29kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvciAoInBhcnNpbmcgaW5wdXQgZmlsZSBzY2FuY29kZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBrZXljb2RlPXN0cnRvayhOVUxMLCJcblx0ID06KCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXljb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvciAoInBhcnNpbmcgaW5wdXQgZmlsZSBrZXljb2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRmICgicGFyc2luZyAlcz0lczoiLCBzY2FuY29kZSwga2V5Y29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1wYXJzZV9jb2RlKGtleWNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRmICgiXHR2YWx1ZT0lZFxuIix2YWx1ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZT09LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woa2V5Y29kZSwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzIFswXSA9ICh1bnNpZ25lZCkgc3RydG9sKHNjYW5jb2RlLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzIFsxXSA9ICh1bnNpZ25lZCkgdmFsdWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50ZigiXHQlMDR4PSUwNHhcbiIsY29kZXNbMF0sIGNvZGVzWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlvY3RsKGZkLCBFVklPQ1NLRVlDT0RFLCBjb2RlcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXR0aW5nIHNjYW5jb2RlIDB4JTA0eCB3aXRoIDB4JTA0eCB2aWEgIixjb2Rlc1swXSwgY29kZXNbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJFVklPQ1NLRVlDT0RFIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlvY3RsKGZkLCBFVklPQ0dLRVlDT0RFLCBjb2Rlcyk9PTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydGNvZGUoY29kZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdldCBzY2FuY29kZSB0YWJsZSAqLworICAgICAgICBmb3IgKGogPSAwOyBqICZsdDsgMjU2OyBqKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzWzBdID0gKGogJmx0OyZsdDsgOCkgfCBpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpb2N0bChmZCwgRVZJT0NHS0VZQ09ERSwgY29kZXMpICZhbXA7JmFtcDsgY29kZXNbMV0gIT0gS0VZX1JFU0VSVkVEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnRjb2RlKGNvZGVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKzwvcHJvZ3JhbWxpc3Rpbmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpYnY0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpYnY0bC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0ZmMzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlidjRsLnhtbApAQCAtMCwwICsxLDE2NyBAQAorPHRpdGxlPkxpYnY0bCBVc2Vyc3BhY2UgTGlicmFyeTwvdGl0bGU+Cis8c2VjdGlvbiBpZD0ibGlidjRsLWludHJvZHVjdGlvbiI+CisJPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5saWJ2NGwgaXMgYSBjb2xsZWN0aW9uIG9mIGxpYnJhcmllcyB3aGljaCBhZGRzIGEgdGhpbiBhYnN0cmFjdGlvbgorbGF5ZXIgb24gdG9wIG9mIHZpZGVvNGxpbnV4MiBkZXZpY2VzLiBUaGUgcHVycG9zZSBvZiB0aGlzICh0aGluKSBsYXllcgoraXMgdG8gbWFrZSBpdCBlYXN5IGZvciBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIHN1cHBvcnQgYSB3aWRlIHZhcmlldHkgb2YKK2RldmljZXMgd2l0aG91dCBoYXZpbmcgdG8gd3JpdGUgc2VwYXJhdGUgY29kZSBmb3IgZGlmZmVyZW50IGRldmljZXMgaW4gdGhlCitzYW1lIGNsYXNzLjwvcGFyYT4KKzxwYXJhPkFuIGV4YW1wbGUgb2YgdXNpbmcgbGlidjRsIGlzIHByb3ZpZGVkIGJ5Cis8bGluayBsaW5rZW5kPSd2NGwyZ3JhYi1leGFtcGxlJz52NGwyZ3JhYjwvbGluaz4uCis8L3BhcmE+CisKKwk8cGFyYT5saWJ2NGwgY29uc2lzdHMgb2YgMyBkaWZmZXJlbnQgbGlicmFyaWVzOjwvcGFyYT4KKwk8c2VjdGlvbj4KKwkJPHRpdGxlPmxpYnY0bGNvbnZlcnQ8L3RpdGxlPgorCisJCTxwYXJhPmxpYnY0bGNvbnZlcnQgaXMgYSBsaWJyYXJ5IHRoYXQgY29udmVydHMgc2V2ZXJhbAorZGlmZmVyZW50IHBpeGVsZm9ybWF0cyBmb3VuZCBpbiBWNEwyIGRyaXZlcnMgaW50byBhIGZldyBjb21tb24gUkdCIGFuZAorWVVZIGZvcm1hdHMuPC9wYXJhPgorCQk8cGFyYT5JdCBjdXJyZW50bHkgYWNjZXB0cyB0aGUgZm9sbG93aW5nIFY0TDIgZHJpdmVyIGZvcm1hdHM6Cis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtQkdSMjQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMjQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtSE0xMiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ITTEyPC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUpQRUciPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSlBFRzwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NSlBFRyI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9NSlBFRzwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NUjk3MzEwQSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9NUjk3MzEwQTwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1PVjUxMSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9PVjUxMTwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1PVjUxOCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9PVjUxODwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1QQUMyMDciPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFDMjA3PC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVBKUEciPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEpQRzwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0IyNCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0IyNDwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TQkdHUjgiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0JHR1I4PC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNHQlJHOCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR0JSRzg8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU0dSQkc4Ij48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NHUkJHODwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TTjlDMTBYIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NOOUMxMFg8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU045QzIwWC1JNDIwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NOOUMyMFhfSTQyMDwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TUENBNTAxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NQQ0E1MDE8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1BDQTUwNSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TUENBNTA1PC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDgiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1BDQTUwODwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TUENBNTYxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NQQ0E1NjE8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1E5MDVDIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NROTA1QzwvY29uc3RhbnQ+PC9saW5rPiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1JHR0I4PC9jb25zdGFudD4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtVVlWWSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9VWVZZPC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjA8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVZViI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVlWPC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PjwvbGluaz4sCithbmQgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWWVUiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZZVTwvY29uc3RhbnQ+PC9saW5rPi4KKzwvcGFyYT4KKwkJPHBhcmE+TGF0ZXIgb24gbGlidjRsY29udmVydCB3YXMgZXhwYW5kZWQgdG8gYWxzbyBiZSBhYmxlIHRvIGRvCit2YXJpb3VzCXZpZGVvIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHRvIGltcHJvdmUgd2ViY2FtIHZpZGVvIHF1YWxpdHkuCitUaGUgdmlkZW8gcHJvY2Vzc2luZyBpcyBzcGxpdCBpbiB0byAyIHBhcnRzOiBsaWJ2NGxjb252ZXJ0L2NvbnRyb2wgYW5kCitsaWJ2NGxjb252ZXJ0L3Byb2Nlc3NpbmcuPC9wYXJhPgorCisJCTxwYXJhPlRoZSBjb250cm9sIHBhcnQgaXMgdXNlZCB0byBvZmZlciB2aWRlbyBjb250cm9scyB3aGljaCBjYW4KK2JlIHVzZWQJdG8gY29udHJvbCB0aGUgdmlkZW8gcHJvY2Vzc2luZyBmdW5jdGlvbnMgbWFkZSBhdmFpbGFibGUgYnkKKwlsaWJ2NGxjb252ZXJ0L3Byb2Nlc3NpbmcuIFRoZXNlIGNvbnRyb2xzIGFyZSBzdG9yZWQgYXBwbGljYXRpb24gd2lkZQorKHVudGlsIHJlYm9vdCkgYnkgdXNpbmcgYSBwZXJzaXN0ZW50IHNoYXJlZCBtZW1vcnkgb2JqZWN0LjwvcGFyYT4KKworCQk8cGFyYT5saWJ2NGxjb252ZXJ0L3Byb2Nlc3Npbmcgb2ZmZXJzIHRoZSBhY3R1YWwgdmlkZW8KK3Byb2Nlc3NpbmcgZnVuY3Rpb25hbGl0eS48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uPgorCQk8dGl0bGU+bGlidjRsMTwvdGl0bGU+CisJCTxwYXJhPlRoaXMgbGlicmFyeSBvZmZlcnMgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gcXVpY2tseQorbWFrZSB2NGwxIGFwcGxpY2F0aW9ucyB3b3JrIHdpdGggdjRsMiBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgd29yayBleGFjdGx5CitsaWtlIHRoZSBub3JtYWwgb3Blbi9jbG9zZS9ldGMsIGV4Y2VwdCB0aGF0IGxpYnY0bDEgZG9lcyBmdWxsIGVtdWxhdGlvbiBvZgordGhlIHY0bDEgYXBpIG9uIHRvcCBvZiB2NGwyIGRyaXZlcnMsIGluIGNhc2Ugb2YgdjRsMSBkcml2ZXJzIGl0Cit3aWxsIGp1c3QgcGFzcyBjYWxscyB0aHJvdWdoLjwvcGFyYT4KKwkJPHBhcmE+U2luY2UgdGhvc2UgZnVuY3Rpb25zIGFyZSBlbXVsYXRpb25zIG9mIHRoZSBvbGQgVjRMMSBBUEksCitpdCBzaG91bGRuJ3QgYmUgdXNlZCBmb3IgbmV3IGFwcGxpY2F0aW9ucy48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uPgorCQk8dGl0bGU+bGlidjRsMjwvdGl0bGU+CisJCTxwYXJhPlRoaXMgbGlicmFyeSBzaG91bGQgYmUgdXNlZCBmb3IgYWxsIG1vZGVybiBWNEwyCithcHBsaWNhdGlvbnMuPC9wYXJhPgorCQk8cGFyYT5JdCBwcm92aWRlcyBoYW5kbGVzIHRvIGNhbGwgVjRMMiBvcGVuL2lvY3RsL2Nsb3NlL3BvbGwKK21ldGhvZHMuIEluc3RlYWQgb2YganVzdCBwcm92aWRpbmcgdGhlIHJhdyBvdXRwdXQgb2YgdGhlIGRldmljZSwgaXQgZW5oYW5jZXMKK3RoZSBjYWxscyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCB3aWxsIHVzZSBsaWJ2NGxjb252ZXJ0IHRvIHByb3ZpZGUgbW9yZSB2aWRlbworZm9ybWF0cyBhbmQgdG8gZW5oYW5jZSB0aGUgaW1hZ2UgcXVhbGl0eS48L3BhcmE+CisJCTxwYXJhPkluIG1vc3QgY2FzZXMsIGxpYnY0bDIganVzdCBwYXNzZXMgdGhlIGNhbGxzIGRpcmVjdGx5Cit0aHJvdWdoIHRvIHRoZSB2NGwyIGRyaXZlciwgaW50ZXJjZXB0aW5nIHRoZSBjYWxscyB0bworPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZm10Jz48Y29uc3RhbnQ+VklESU9DX1RSWV9GTVQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mbXQnPjxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PjwvbGluaz4KKzxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+PC9saW5rPgorPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZnJhbWVzaXplcyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L2NvbnN0YW50PjwvbGluaz4KK2FuZCA8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bS1mcmFtZWludGVydmFscyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTPC9jb25zdGFudD48L2xpbms+CitpbiBvcmRlciB0byBlbXVsYXRlIHRoZSBmb3JtYXRzCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtQkdSMjQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMjQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCMjQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMjQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDIwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQyMDwvY29uc3RhbnQ+PC9saW5rPiwKK2FuZCA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVZVNDIwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lWVTQyMDwvY29uc3RhbnQ+PC9saW5rPiwKK2lmIHRoZXkgYXJlbid0IGF2YWlsYWJsZSBpbiB0aGUgZHJpdmVyLgorPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZm10Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1fRk1UPC9jb25zdGFudD48L2xpbms+CitrZWVwcyBlbnVtZXJhdGluZyB0aGUgaGFyZHdhcmUgc3VwcG9ydGVkIGZvcm1hdHMsIHBsdXMgdGhlIGVtdWxhdGVkIGZvcm1hdHMKK29mZmVyZWQgYnkgbGlidjRsIGF0IHRoZSBlbmQuCis8L3BhcmE+CisJCTxzZWN0aW9uIGlkPSJsaWJ2NGwtb3BzIj4KKwkJCTx0aXRsZT5MaWJ2NGwgZGV2aWNlIGNvbnRyb2wgZnVuY3Rpb25zPC90aXRsZT4KKwkJCTxwYXJhPlRoZSBjb21tb24gZmlsZSBvcGVyYXRpb24gbWV0aG9kcyBhcmUgcHJvdmlkZWQgYnkKK2xpYnY0bC48L3BhcmE+CisJCQk8cGFyYT5UaG9zZSBmdW5jdGlvbnMgb3BlcmF0ZSBqdXN0IGxpa2UgZ2xpYmMKK29wZW4vY2xvc2UvZHVwL2lvY3RsL3JlYWQvbW1hcC9tdW5tYXA6PC9wYXJhPgorPGl0ZW1pemVkbGlzdD48bGlzdGl0ZW0+CisJCQk8cGFyYT5pbnQgdjRsMl9vcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGludCBvZmxhZywKKy4uLikgLQorb3BlcmF0ZXMgbGlrZSB0aGUgc3RhbmRhcmQgPGxpbmsgbGlua2VuZD0nZnVuYy1vcGVuJz5vcGVuKCk8L2xpbms+IGZ1bmN0aW9uLgorPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPgorCQkJPHBhcmE+aW50IHY0bDJfY2xvc2UoaW50IGZkKSAtCitvcGVyYXRlcyBsaWtlIHRoZSBzdGFuZGFyZCA8bGluayBsaW5rZW5kPSdmdW5jLWNsb3NlJz5jbG9zZSgpPC9saW5rPiBmdW5jdGlvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX2R1cChpbnQgZmQpIC0KK29wZXJhdGVzIGxpa2UgdGhlIHN0YW5kYXJkIGR1cCgpIGZ1bmN0aW9uLCBkdXBsaWNhdGluZyBhIGZpbGUgaGFuZGxlci4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX2lvY3RsIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgaW50IHJlcXVlc3QsIC4uLikgLQorb3BlcmF0ZXMgbGlrZSB0aGUgc3RhbmRhcmQgPGxpbmsgbGlua2VuZD0nZnVuYy1pb2N0bCc+aW9jdGwoKTwvbGluaz4gZnVuY3Rpb24uCis8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+CisJCQk8cGFyYT5pbnQgdjRsMl9yZWFkIChpbnQgZmQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IG4pIC0KK29wZXJhdGVzIGxpa2UgdGhlIHN0YW5kYXJkIDxsaW5rIGxpbmtlbmQ9J2Z1bmMtcmVhZCc+cmVhZCgpPC9saW5rPiBmdW5jdGlvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPnZvaWQgdjRsMl9tbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIGludDY0X3Qgb2Zmc2V0KTsgLQorb3BlcmF0ZXMgbGlrZSB0aGUgc3RhbmRhcmQgPGxpbmsgbGlua2VuZD0nZnVuYy1tbWFwJz5tbWFwKCk8L2xpbms+IGZ1bmN0aW9uLgorPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPgorCQkJPHBhcmE+aW50IHY0bDJfbXVubWFwKHZvaWQgKl9zdGFydCwgc2l6ZV90IGxlbmd0aCk7IC0KK29wZXJhdGVzIGxpa2UgdGhlIHN0YW5kYXJkIDxsaW5rIGxpbmtlbmQ9J2Z1bmMtbXVubWFwJz5tdW5tYXAoKTwvbGluaz4gZnVuY3Rpb24uCis8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCQkJPHBhcmE+VGhvc2UgZnVuY3Rpb25zIHByb3ZpZGUgYWRkaXRpb25hbCBjb250cm9sOjwvcGFyYT4KKzxpdGVtaXplZGxpc3Q+PGxpc3RpdGVtPgorCQkJPHBhcmE+aW50IHY0bDJfZmRfb3BlbihpbnQgZmQsIGludCB2NGwyX2ZsYWdzKSAtCitvcGVucyBhbiBhbHJlYWR5IG9wZW5lZCBmZCBmb3IgZnVydGhlciB1c2UgdGhyb3VnaCB2NGwybGliIGFuZCBwb3NzaWJseQorbW9kaWZ5IGxpYnY0bDIncyBkZWZhdWx0IGJlaGF2aW9yIHRocm91Z2ggdGhlIHY0bDJfZmxhZ3MgYXJndW1lbnQuCitDdXJyZW50bHksIHY0bDJfZmxhZ3MgY2FuIGJlIDxjb25zdGFudD5WNEwyX0RJU0FCTEVfQ09OVkVSU0lPTjwvY29uc3RhbnQ+LAordG8gZGlzYWJsZSBmb3JtYXQgY29udmVyc2lvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX3NldF9jb250cm9sKGludCBmZCwgaW50IGNpZCwgaW50IHZhbHVlKSAtCitUaGlzIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgb2YgMCAtIDY1NTM1LCBhbmQgdGhlbiBzY2FsZXMgdGhhdCByYW5nZSB0bwordGhlIGFjdHVhbCByYW5nZSBvZiB0aGUgZ2l2ZW4gdjRsIGNvbnRyb2wgaWQsIGFuZCB0aGVuIGlmIHRoZSBjaWQgZXhpc3RzCithbmQgaXMgbm90IGxvY2tlZCBzZXRzIHRoZSBjaWQgdG8gdGhlIHNjYWxlZCB2YWx1ZS4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX2dldF9jb250cm9sKGludCBmZCwgaW50IGNpZCkgLQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgMCAtIDY1NTM1LCBzY2FsZWQgdG8gZnJvbSB0aGUgYWN0dWFsIHJhbmdlCitvZiB0aGUgZ2l2ZW4gdjRsIGNvbnRyb2wgaWQuIHdoZW4gdGhlIGNpZCBkb2VzIG5vdCBleGlzdCwgY291bGQgbm90IGJlCithY2Nlc3NlZCBmb3Igc29tZSByZWFzb24sIG9yIHNvbWUgZXJyb3Igb2NjdXJlZCAwIGlzIHJldHVybmVkLgorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKwkJPC9zZWN0aW9uPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbj4KKworCQk8dGl0bGU+djRsMWNvbXBhdC5zbyB3cmFwcGVyIGxpYnJhcnk8L3RpdGxlPgorCisJCTxwYXJhPlRoaXMgbGlicmFyeSBpbnRlcmNlcHRzIGNhbGxzIHRvCitvcGVuL2Nsb3NlL2lvY3RsL21tYXAvbW11bm1hcCBvcGVyYXRpb25zIGFuZCByZWRpcmVjdHMgdGhlbSB0byB0aGUgbGlidjRsCitjb3VudGVycGFydHMsIGJ5IHVzaW5nIExEX1BSRUxPQUQ9L3Vzci9saWIvdjRsMWNvbXBhdC5zby4gSXQgYWxzbworZW11bGF0ZXMgVjRMMSBjYWxscyB2aWEgVjRMMiBBUEkuPC9wYXJhPgorCQk8cGFyYT5JdCBhbGxvd3MgdXNhZ2Ugb2YgYmluYXJ5IGxlZ2FjeSBhcHBsaWNhdGlvbnMgdGhhdAorc3RpbGwgZG9uJ3QgdXNlIGxpYnY0bC48L3BhcmE+CisJPC9zZWN0aW9uPgorCis8L3NlY3Rpb24+Cis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1ncmV5LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LWdyZXkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNzJiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1ncmV5LnhtbApAQCAtMCwwICsxLDcwIEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtR1JFWSI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfR1JFWSAoJ0dSRVknKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9HUkVZPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+R3JleS1zY2FsZSBpbWFnZTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhpcyBpcyBhIGdyZXktc2NhbGUgaW1hZ2UuIEl0IGlzIHJlYWxseSBhIGRlZ2VuZXJhdGUKK1knQ2JDciBmb3JtYXQgd2hpY2ggc2ltcGx5IGNvbnRhaW5zIG5vIENiIG9yIENyIGRhdGEuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9HUkVZPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjUiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7NDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxMi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1udjEyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNmNjcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxMi54bWwKQEAgLTAsMCArMSwxNTEgQEAKKyAgICA8cmVmZW50cnk+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfTlYxMiAoJ05WMTInKSwgVjRMMl9QSVhfRk1UX05WMjEgKCdOVjIxJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtTlYxMiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjEyPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZm5hbWUgaWQ9IlY0TDItUElYLUZNVC1OVjIxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WMjE8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5Gb3JtYXRzIHdpdGggJmZyYWMxMjsgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKK2Nocm9tYSByZXNvbHV0aW9uLCBhbHNvIGtub3duIGFzIFlVViA0OjI6MC4gT25lIGx1bWluYW5jZSBhbmQgb25lCitjaHJvbWluYW5jZSBwbGFuZSB3aXRoIGFsdGVybmF0aW5nIGNocm9tYSBzYW1wbGVzIGFzIG9wcG9zZWQgdG8KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDIwPC9jb25zdGFudD48L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPlRoZXNlIGFyZSB0d28tcGxhbmUgdmVyc2lvbnMgb2YgdGhlIFlVViA0OjI6MCBmb3JtYXQuCitUaGUgdGhyZWUgY29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGludG8gdHdvIHN1Yi1pbWFnZXMgb3IgcGxhbmVzLiBUaGUKK1kgcGxhbmUgaXMgZmlyc3QuIFRoZSBZIHBsYW5lIGhhcyBvbmUgYnl0ZSBwZXIgcGl4ZWwuIEZvcgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjEyPC9jb25zdGFudD4sIGEgY29tYmluZWQgQ2JDciBwbGFuZQoraW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgWSBwbGFuZSBpbiBtZW1vcnkuICBUaGUgQ2JDciBwbGFuZSBpcyB0aGUgc2FtZQord2lkdGgsIGluIGJ5dGVzLCBhcyB0aGUgWSBwbGFuZSAoYW5kIG9mIHRoZSBpbWFnZSksIGJ1dCBpcyBoYWxmIGFzCit0YWxsIGluIHBpeGVscy4gRWFjaCBDYkNyIHBhaXIgYmVsb25ncyB0byBmb3VyIHBpeGVscy4gRm9yIGV4YW1wbGUsCitDYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0Pi9DcjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PiBiZWxvbmdzIHRvCitZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD4sIFknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PiwKK1knPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PiwgWSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+LgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjIxPC9jb25zdGFudD4gaXMgdGhlIHNhbWUgZXhjZXB0IHRoZSBDYiBhbmQKK0NyIGJ5dGVzIGFyZSBzd2FwcGVkLCB0aGUgQ3JDYiBwbGFuZSBzdGFydHMgd2l0aCBhIENyIGJ5dGUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUKK0NiQ3IgcGxhbmUgaGFzIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIGl0cyByb3dzLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfTlYxMjwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIwOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxNi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1udjE2LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjA5NDAzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxNi54bWwKQEAgLTAsMCArMSwxNzQgQEAKKyAgICA8cmVmZW50cnk+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfTlYxNiAoJ05WMTYnKSwgVjRMMl9QSVhfRk1UX05WNjEgKCdOVjYxJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtTlYxNiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjE2PC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZm5hbWUgaWQ9IlY0TDItUElYLUZNVC1OVjYxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WNjE8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5Gb3JtYXRzIHdpdGggJmZyYWMxMjsgaG9yaXpvbnRhbAorY2hyb21hIHJlc29sdXRpb24sIGFsc28ga25vd24gYXMgWVVWIDQ6MjoyLiBPbmUgbHVtaW5hbmNlIGFuZCBvbmUKK2Nocm9taW5hbmNlIHBsYW5lIHdpdGggYWx0ZXJuYXRpbmcgY2hyb21hIHNhbXBsZXMgYXMgb3Bwb3NlZCB0bworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PjwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhlc2UgYXJlIHR3by1wbGFuZSB2ZXJzaW9ucyBvZiB0aGUgWVVWIDQ6MjoyIGZvcm1hdC4KK1RoZSB0aHJlZSBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgaW50byB0d28gc3ViLWltYWdlcyBvciBwbGFuZXMuIFRoZQorWSBwbGFuZSBpcyBmaXJzdC4gVGhlIFkgcGxhbmUgaGFzIG9uZSBieXRlIHBlciBwaXhlbC4gRm9yCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WMTY8L2NvbnN0YW50PiwgYSBjb21iaW5lZCBDYkNyIHBsYW5lCitpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBZIHBsYW5lIGluIG1lbW9yeS4gIFRoZSBDYkNyIHBsYW5lIGlzIHRoZSBzYW1lCit3aWR0aCBhbmQgaGVpZ2h0LCBpbiBieXRlcywgYXMgdGhlIFkgcGxhbmUgKGFuZCBvZiB0aGUgaW1hZ2UpLgorRWFjaCBDYkNyIHBhaXIgYmVsb25ncyB0byB0d28gcGl4ZWxzLiBGb3IgZXhhbXBsZSwKK0NiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+L0NyPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+IGJlbG9uZ3MgdG8KK1knPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PiwgWSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+LgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjYxPC9jb25zdGFudD4gaXMgdGhlIHNhbWUgZXhjZXB0IHRoZSBDYiBhbmQKK0NyIGJ5dGVzIGFyZSBzd2FwcGVkLCB0aGUgQ3JDYiBwbGFuZSBzdGFydHMgd2l0aCBhIENyIGJ5dGUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUKK0NiQ3IgcGxhbmUgaGFzIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIGl0cyByb3dzLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfTlYxNjwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIwOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXBhY2tlZC1yZ2IueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZGQ2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbApAQCAtMCwwICsxLDg2MiBAQAorPHJlZmVudHJ5IGlkPSJwYWNrZWQtcmdiIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+UGFja2VkIFJHQiBmb3JtYXRzPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+UGFja2VkIFJHQiBmb3JtYXRzPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlBhY2tlZCBSR0IgZm9ybWF0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXNlIGZvcm1hdHMgYXJlIGRlc2lnbmVkIHRvIG1hdGNoIHRoZSBwaXhlbCBmb3JtYXRzIG9mCit0eXBpY2FsIFBDIGdyYXBoaWNzIGZyYW1lIGJ1ZmZlcnMuIFRoZXkgb2NjdXB5IDgsIDE2LCAyNCBvciAzMiBiaXRzCitwZXIgcGl4ZWwuIFRoZXNlIGFyZSBhbGwgcGFja2VkLXBpeGVsIGZvcm1hdHMsIG1lYW5pbmcgYWxsIHRoZSBkYXRhCitmb3IgYSBwaXhlbCBsaWUgbmV4dCB0byBlYWNoIG90aGVyIGluIG1lbW9yeS48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIG9uZSBvZiB0aGVzZSBmb3JtYXRzIGlzIHVzZWQsIGRyaXZlcnMgc2hhbGwgcmVwb3J0IHRoZQorY29sb3JzcGFjZSA8Y29uc3RhbnQ+VjRMMl9DT0xPUlNQQUNFX1NSR0I8L2NvbnN0YW50Pi48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InJnYi1mb3JtYXRzIj4KKyAgICAgIDx0aXRsZT5QYWNrZWQgUkdCIEltYWdlIEZvcm1hdHM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzNyIgYWxpZ249ImNlbnRlciI+CisJPGNvbHNwZWMgY29sbmFtZT0iaWQiIGFsaWduPSJsZWZ0IiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImZvdXJjYyIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJiaXQiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjQiIGNvbG5hbWU9ImIwNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjUiIGNvbG5hbWU9ImIwNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjYiIGNvbG5hbWU9ImIwNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjciIGNvbG5hbWU9ImIwNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjgiIGNvbG5hbWU9ImIwMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjkiIGNvbG5hbWU9ImIwMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjEwIiBjb2xuYW1lPSJiMDEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxMSIgY29sbmFtZT0iYjAwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPGNvbHNwZWMgY29sbnVtPSIxMyIgY29sbmFtZT0iYjE3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTQiIGNvbG5hbWU9ImIxNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE1IiBjb2xuYW1lPSJiMTUiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNiIgY29sbmFtZT0iYjE0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTciIGNvbG5hbWU9ImIxMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE4IiBjb2xuYW1lPSJiMTIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxOSIgY29sbmFtZT0iYjExIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjAiIGNvbG5hbWU9ImIxMCIgYWxpZ249ImNlbnRlciIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iMjIiIGNvbG5hbWU9ImIyNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjIzIiBjb2xuYW1lPSJiMjYiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNCIgY29sbmFtZT0iYjI1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjUiIGNvbG5hbWU9ImIyNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI2IiBjb2xuYW1lPSJiMjMiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNyIgY29sbmFtZT0iYjIyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjgiIGNvbG5hbWU9ImIyMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI5IiBjb2xuYW1lPSJiMjAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjMxIiBjb2xuYW1lPSJiMzciIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzMiIgY29sbmFtZT0iYjM2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzMiIGNvbG5hbWU9ImIzNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM0IiBjb2xuYW1lPSJiMzQiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzNSIgY29sbmFtZT0iYjMzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzYiIGNvbG5hbWU9ImIzMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM3IiBjb2xuYW1lPSJiMzEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzOCIgY29sbmFtZT0iYjMwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPHNwYW5zcGVjIG5hbWVzdD0iYjA3IiBuYW1lZW5kPSJiMDAiIHNwYW5uYW1lPSJiMCIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMTciIG5hbWVlbmQ9ImIxMCIgc3Bhbm5hbWU9ImIxIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIyNyIgbmFtZWVuZD0iYjIwIiBzcGFubmFtZT0iYjIiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjM3IiBuYW1lZW5kPSJiMzAiIHNwYW5uYW1lPSJiMyIgLz4KKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeT5Db2RlPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjAiPkJ5dGUmbmJzcDswIGluIG1lbW9yeTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjEiPkJ5dGUmbmJzcDsxPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMiI+Qnl0ZSZuYnNwOzI8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImIzIj5CeXRlJm5ic3A7MzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJpdDwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVJHQjMzMiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjMzMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0IxJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVJHQjQ0NCI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjQ0NDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSNDQ0JzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtUkdCNTU1Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTU1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQk8nPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0I1NjUiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I1NjU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUkdCUCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVJHQjU1NVgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I1NTVYPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQlEnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0I1NjVYIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTY1WDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JSJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtQkdSMjQiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidCR1IzJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0IyNCI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjI0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQjMnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUJHUjMyIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nQkdSNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0IzMiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjMyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQjQnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8cGFyYT5CaXQgNyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuIFRoZSB2YWx1ZSBvZiBhID0gYWxwaGEKK2JpdHMgaXMgdW5kZWZpbmVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBkcml2ZXIsIGlnbm9yZWQgd2hlbiB3cml0aW5nCit0byB0aGUgZHJpdmVyLCBleGNlcHQgd2hlbiBhbHBoYSBibGVuZGluZyBoYXMgYmVlbiBuZWdvdGlhdGVkIGZvciBhCis8bGluayBsaW5rZW5kPSJvdmVybGF5Ij5WaWRlbyBPdmVybGF5PC9saW5rPiBvciA8bGluaworbGlua2VuZD0ib3NkIj5WaWRlbyBPdXRwdXQgT3ZlcmxheTwvbGluaz4uPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0IHBpeGVsCitpbWFnZTwvdGl0bGU+CisKKyAgICAgIDxmb3JtYWxwYXJhPgorCTx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCSAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkgICAgPHRncm91cCBjb2xzPSIxMyIgYWxpZ249ImNlbnRlciI+CisJICAgICAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzM2OjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCSAgICAgIDwvdGJvZHk+CisJICAgIDwvdGdyb3VwPgorCSAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKwkgICAgPC9wYXJhPgorICAgICAgPC9mb3JtYWxwYXJhPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxpbXBvcnRhbnQ+CisgICAgICA8cGFyYT5Ecml2ZXJzIG1heSBpbnRlcnByZXQgdGhlc2UgZm9ybWF0cyBkaWZmZXJlbnRseS48L3BhcmE+CisgICAgPC9pbXBvcnRhbnQ+CisKKyAgICA8cGFyYT5Tb21lIFJHQiBmb3JtYXRzIGFib3ZlIGFyZSB1bmNvbW1vbiBhbmQgd2VyZSBwcm9iYWJseQorZGVmaW5lZCBpbiBlcnJvci4gRHJpdmVycyBtYXkgaW50ZXJwcmV0IHRoZW0gYXMgaW4gPHhyZWYKKwlsaW5rZW5kPSJyZ2ItZm9ybWF0cy1jb3JyZWN0ZWQiIC8+LjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0icmdiLWZvcm1hdHMtY29ycmVjdGVkIj4KKyAgICAgIDx0aXRsZT5QYWNrZWQgUkdCIEltYWdlIEZvcm1hdHMgKGNvcnJlY3RlZCk8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzNyIgYWxpZ249ImNlbnRlciI+CisJPGNvbHNwZWMgY29sbmFtZT0iaWQiIGFsaWduPSJsZWZ0IiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImZvdXJjYyIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJiaXQiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjQiIGNvbG5hbWU9ImIwNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjUiIGNvbG5hbWU9ImIwNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjYiIGNvbG5hbWU9ImIwNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjciIGNvbG5hbWU9ImIwNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjgiIGNvbG5hbWU9ImIwMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjkiIGNvbG5hbWU9ImIwMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjEwIiBjb2xuYW1lPSJiMDEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxMSIgY29sbmFtZT0iYjAwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPGNvbHNwZWMgY29sbnVtPSIxMyIgY29sbmFtZT0iYjE3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTQiIGNvbG5hbWU9ImIxNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE1IiBjb2xuYW1lPSJiMTUiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNiIgY29sbmFtZT0iYjE0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTciIGNvbG5hbWU9ImIxMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE4IiBjb2xuYW1lPSJiMTIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxOSIgY29sbmFtZT0iYjExIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjAiIGNvbG5hbWU9ImIxMCIgYWxpZ249ImNlbnRlciIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iMjIiIGNvbG5hbWU9ImIyNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjIzIiBjb2xuYW1lPSJiMjYiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNCIgY29sbmFtZT0iYjI1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjUiIGNvbG5hbWU9ImIyNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI2IiBjb2xuYW1lPSJiMjMiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNyIgY29sbmFtZT0iYjIyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjgiIGNvbG5hbWU9ImIyMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI5IiBjb2xuYW1lPSJiMjAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjMxIiBjb2xuYW1lPSJiMzciIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzMiIgY29sbmFtZT0iYjM2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzMiIGNvbG5hbWU9ImIzNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM0IiBjb2xuYW1lPSJiMzQiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzNSIgY29sbmFtZT0iYjMzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzYiIGNvbG5hbWU9ImIzMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM3IiBjb2xuYW1lPSJiMzEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzOCIgY29sbmFtZT0iYjMwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPHNwYW5zcGVjIG5hbWVzdD0iYjA3IiBuYW1lZW5kPSJiMDAiIHNwYW5uYW1lPSJiMCIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMTciIG5hbWVlbmQ9ImIxMCIgc3Bhbm5hbWU9ImIxIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIyNyIgbmFtZWVuZD0iYjIwIiBzcGFubmFtZT0iYjIiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjM3IiBuYW1lZW5kPSJiMzAiIHNwYW5uYW1lPSJiMyIgLz4KKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeT5Db2RlPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjAiPkJ5dGUmbmJzcDswIGluIG1lbW9yeTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjEiPkJ5dGUmbmJzcDsxPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMiI+Qnl0ZSZuYnNwOzI8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImIzIj5CeXRlJm5ic3A7MzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJpdDwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz48IS0tIGlkPSJWNEwyLVBJWC1GTVQtUkdCMzMyIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMzMyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQjEnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1SR0I0NDQiIC0tPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I0NDQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUjQ0NCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48IS0tIGlkPSJWNEwyLVBJWC1GTVQtUkdCNTU1IiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTU1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQk8nPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PCEtLSBpZD0iVjRMMi1QSVgtRk1ULVJHQjU2NSIgLS0+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjU2NTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JQJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1SR0I1NTVYIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTU1WDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JRJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YTwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1SR0I1NjVYIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTY1WDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JSJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1CR1IyNCIgLS0+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjI0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0JHUjMnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48IS0tIGlkPSJWNEwyLVBJWC1GTVQtUkdCMjQiIC0tPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0IyNDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0IzJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PCEtLSBpZD0iVjRMMi1QSVgtRk1ULUJHUjMyIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nQkdSNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PCEtLSBpZD0iVjRMMi1QSVgtRk1ULVJHQjMyIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUkdCNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxwYXJhPkEgdGVzdCB1dGlsaXR5IHRvIGRldGVybWluZSB3aGljaCBSR0IgZm9ybWF0cyBhIGRyaXZlcgorYWN0dWFsbHkgc3VwcG9ydHMgaXMgYXZhaWxhYmxlIGZyb20gdGhlIExpbnV4VFYgdjRsLWR2YiByZXBvc2l0b3J5LgorU2VlICZ2NGwtZHZiOyBmb3IgYWNjZXNzIGluc3RydWN0aW9ucy48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQteXV2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXBhY2tlZC15dXYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWI1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQteXV2LnhtbApAQCAtMCwwICsxLDI0NCBAQAorPHJlZmVudHJ5IGlkPSJwYWNrZWQteXV2Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+UGFja2VkIFlVViBmb3JtYXRzPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+UGFja2VkIFlVViBmb3JtYXRzPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlBhY2tlZCBZVVYgZm9ybWF0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlNpbWlsYXIgdG8gdGhlIHBhY2tlZCBSR0IgZm9ybWF0cyB0aGVzZSBmb3JtYXRzIHN0b3JlCit0aGUgWSwgQ2IgYW5kIENyIGNvbXBvbmVudCBvZiBlYWNoIHBpeGVsIGluIG9uZSAxNiBvciAzMiBiaXQKK3dvcmQuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiPgorICAgICAgPHRpdGxlPlBhY2tlZCBZVVYgSW1hZ2UgRm9ybWF0czwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjM3IiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJpZCIgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iZm91cmNjIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImJpdCIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iNCIgY29sbmFtZT0iYjA3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNSIgY29sbmFtZT0iYjA2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNiIgY29sbmFtZT0iYjA1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNyIgY29sbmFtZT0iYjA0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOCIgY29sbmFtZT0iYjAzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOSIgY29sbmFtZT0iYjAyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTAiIGNvbG5hbWU9ImIwMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjExIiBjb2xuYW1lPSJiMDAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjEzIiBjb2xuYW1lPSJiMTciIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNCIgY29sbmFtZT0iYjE2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTUiIGNvbG5hbWU9ImIxNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE2IiBjb2xuYW1lPSJiMTQiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNyIgY29sbmFtZT0iYjEzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTgiIGNvbG5hbWU9ImIxMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE5IiBjb2xuYW1lPSJiMTEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyMCIgY29sbmFtZT0iYjEwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPGNvbHNwZWMgY29sbnVtPSIyMiIgY29sbmFtZT0iYjI3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjMiIGNvbG5hbWU9ImIyNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI0IiBjb2xuYW1lPSJiMjUiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNSIgY29sbmFtZT0iYjI0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjYiIGNvbG5hbWU9ImIyMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI3IiBjb2xuYW1lPSJiMjIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyOCIgY29sbmFtZT0iYjIxIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjkiIGNvbG5hbWU9ImIyMCIgYWxpZ249ImNlbnRlciIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iMzEiIGNvbG5hbWU9ImIzNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjMyIiBjb2xuYW1lPSJiMzYiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzMyIgY29sbmFtZT0iYjM1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzQiIGNvbG5hbWU9ImIzNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM1IiBjb2xuYW1lPSJiMzMiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzNiIgY29sbmFtZT0iYjMyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzciIGNvbG5hbWU9ImIzMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM4IiBjb2xuYW1lPSJiMzAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8c3BhbnNwZWMgbmFtZXN0PSJiMDciIG5hbWVlbmQ9ImIwMCIgc3Bhbm5hbWU9ImIwIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIxNyIgbmFtZWVuZD0iYjEwIiBzcGFubmFtZT0iYjEiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjI3IiBuYW1lZW5kPSJiMjAiIHNwYW5uYW1lPSJiMiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMzciIG5hbWVlbmQ9ImIzMCIgc3Bhbm5hbWU9ImIzIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5JZGVudGlmaWVyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvZGU8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMCI+Qnl0ZSZuYnNwOzAgaW4gbWVtb3J5PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMSI+Qnl0ZSZuYnNwOzE8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImIyIj5CeXRlJm5ic3A7MjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjMiPkJ5dGUmbmJzcDszPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Qml0PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtWVVWNDQ0Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDQ0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1k0NDQnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKworCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVlVVjU1NSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjU1NTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidZVVZPJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisKKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1ZVVY1NjUiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY1NjU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nWVVWUCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKworCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVlVVjMyIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nWVVWNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxwYXJhPkJpdCA3IGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gVGhlIHZhbHVlIG9mIGEgPSBhbHBoYQorYml0cyBpcyB1bmRlZmluZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGRyaXZlciwgaWdub3JlZCB3aGVuIHdyaXRpbmcKK3RvIHRoZSBkcml2ZXIsIGV4Y2VwdCB3aGVuIGFscGhhIGJsZW5kaW5nIGhhcyBiZWVuIG5lZ290aWF0ZWQgZm9yIGEKKzxsaW5rIGxpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IG9yIDxsaW5rCitsaW5rZW5kPSJvc2QiPlZpZGVvIE91dHB1dCBPdmVybGF5PC9saW5rPi48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zYmdncjE2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNiZ2dyMTYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWE5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zYmdncjE2LnhtbApAQCAtMCwwICsxLDkxIEBACis8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1TQkdHUjE2Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1NCR0dSMTYgKCdCWVIyJyk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSMTY8L2NvbnN0YW50PjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5CYXllciBSR0IgZm9ybWF0PC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBmb3JtYXQgaXMgc2ltaWxhciB0byA8bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNCR0dSOCI+Cis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSODwvY29uc3RhbnQ+PC9saW5rPiwgZXhjZXB0IGVhY2ggcGl4ZWwgaGFzCithIGRlcHRoIG9mIDE2IGJpdHMuIFRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIGlzIHN0b3JlZCBhdCBsb3dlcgorbWVtb3J5IGFkZHJlc3NlcyAobGl0dGxlLWVuZGlhbikuIE5vdGUgdGhlIGFjdHVhbCBzYW1wbGluZyBwcmVjaXNpb24KK21heSBiZSBsb3dlciB0aGFuIDE2IGJpdHMsIGZvciBleGFtcGxlIDEwIGJpdHMgcGVyIHBpeGVsIHdpdGggdmFsdWVzCitpbiByYW5nZSAwIHRvIDEwMjMuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TQkdHUjE2PC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworICAgICAgPGZvcm1hbHBhcmE+CisJPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwk8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJICAgIDx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJICAgICAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MDBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDFsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4wMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4wMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MTBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4xMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjExaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MTJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4xM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4yMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjIybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MjNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4zMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjMxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjMybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L3Rncm91cD4KKwkgIDwvaW5mb3JtYWx0YWJsZT4KKwk8L3BhcmE+CisgICAgICA8L2Zvcm1hbHBhcmE+CisgICAgPC9leGFtcGxlPgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2JnZ3I4LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNiZ2dyOC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlODRlYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNiZ2dyOC54bWwKQEAgLTAsMCArMSw3NSBAQAorICAgIDxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVNCR0dSOCI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfU0JHR1I4ICgnQkE4MScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSODwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPkJheWVyIFJHQiBmb3JtYXQ8L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPlRoaXMgaXMgY29tbW9ubHkgdGhlIG5hdGl2ZSBmb3JtYXQgb2YgZGlnaXRhbCBjYW1lcmFzLAorcmVmbGVjdGluZyB0aGUgYXJyYW5nZW1lbnQgb2Ygc2Vuc29ycyBvbiB0aGUgQ0NEIGRldmljZS4gT25seSBvbmUgcmVkLAorZ3JlZW4gb3IgYmx1ZSB2YWx1ZSBpcyBnaXZlbiBmb3IgZWFjaCBwaXhlbC4gTWlzc2luZyBjb21wb25lbnRzIG11c3QKK2JlIGludGVycG9sYXRlZCBmcm9tIG5laWdoYm91cmluZyBwaXhlbHMuIEZyb20gbGVmdCB0byByaWdodCB0aGUgZmlyc3QKK3JvdyBjb25zaXN0cyBvZiBhIGJsdWUgYW5kIGdyZWVuIHZhbHVlLCB0aGUgc2Vjb25kIHJvdyBvZiBhIGdyZWVuIGFuZAorcmVkIHZhbHVlLiBUaGlzIHNjaGVtZSByZXBlYXRzIHRvIHRoZSByaWdodCBhbmQgZG93biBmb3IgZXZlcnkgdHdvCitjb2x1bW5zIGFuZCByb3dzLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0JHR1I4PC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJCSAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzEyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkgICAgICA8L2luZm9ybWFsdGFibGU+CisJICAgIDwvcGFyYT4KKwkgIDwvZm9ybWFscGFyYT4KKwk8L2V4YW1wbGU+CisgICAgICA8L3JlZnNlY3QxPgorICAgIDwvcmVmZW50cnk+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJwaXhmbXQuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNnYnJnOC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zZ2JyZzgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2N2E0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zZ2JyZzgueG1sCkBAIC0wLDAgKzEsNzUgQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1TR0JSRzgiPgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1NHQlJHOCAoJ0dCUkcnKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR0JSRzg8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5CYXllciBSR0IgZm9ybWF0PC9yZWZwdXJwb3NlPgorICAgICAgPC9yZWZuYW1lZGl2PgorICAgICAgPHJlZnNlY3QxPgorCTx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5UaGlzIGlzIGNvbW1vbmx5IHRoZSBuYXRpdmUgZm9ybWF0IG9mIGRpZ2l0YWwgY2FtZXJhcywKK3JlZmxlY3RpbmcgdGhlIGFycmFuZ2VtZW50IG9mIHNlbnNvcnMgb24gdGhlIENDRCBkZXZpY2UuIE9ubHkgb25lIHJlZCwKK2dyZWVuIG9yIGJsdWUgdmFsdWUgaXMgZ2l2ZW4gZm9yIGVhY2ggcGl4ZWwuIE1pc3NpbmcgY29tcG9uZW50cyBtdXN0CitiZSBpbnRlcnBvbGF0ZWQgZnJvbSBuZWlnaGJvdXJpbmcgcGl4ZWxzLiBGcm9tIGxlZnQgdG8gcmlnaHQgdGhlIGZpcnN0Cityb3cgY29uc2lzdHMgb2YgYSBncmVlbiBhbmQgYmx1ZSB2YWx1ZSwgdGhlIHNlY29uZCByb3cgb2YgYSByZWQgYW5kCitncmVlbiB2YWx1ZS4gVGhpcyBzY2hlbWUgcmVwZWF0cyB0byB0aGUgcmlnaHQgYW5kIGRvd24gZm9yIGV2ZXJ5IHR3bworY29sdW1ucyBhbmQgcm93cy48L3BhcmE+CisKKwk8ZXhhbXBsZT4KKwkgIDx0aXRsZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NHQlJHODwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjUiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs0OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJICAgICAgPC9pbmZvcm1hbHRhYmxlPgorCSAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zZ3JiZzgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2dyYmc4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2RmMTNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2dyYmc4LnhtbApAQCAtMCwwICsxLDc1IEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtU0dSQkc4Ij4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9TR1JCRzggKCdHUkJHJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0dSQkc4PC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+QmF5ZXIgUkdCIGZvcm1hdDwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhpcyBpcyBjb21tb25seSB0aGUgbmF0aXZlIGZvcm1hdCBvZiBkaWdpdGFsIGNhbWVyYXMsCityZWZsZWN0aW5nIHRoZSBhcnJhbmdlbWVudCBvZiBzZW5zb3JzIG9uIHRoZSBDQ0QgZGV2aWNlLiBPbmx5IG9uZSByZWQsCitncmVlbiBvciBibHVlIHZhbHVlIGlzIGdpdmVuIGZvciBlYWNoIHBpeGVsLiBNaXNzaW5nIGNvbXBvbmVudHMgbXVzdAorYmUgaW50ZXJwb2xhdGVkIGZyb20gbmVpZ2hib3VyaW5nIHBpeGVscy4gRnJvbSBsZWZ0IHRvIHJpZ2h0IHRoZSBmaXJzdAorcm93IGNvbnNpc3RzIG9mIGEgZ3JlZW4gYW5kIGJsdWUgdmFsdWUsIHRoZSBzZWNvbmQgcm93IG9mIGEgcmVkIGFuZAorZ3JlZW4gdmFsdWUuIFRoaXMgc2NoZW1lIHJlcGVhdHMgdG8gdGhlIHJpZ2h0IGFuZCBkb3duIGZvciBldmVyeSB0d28KK2NvbHVtbnMgYW5kIHJvd3MuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR1JCRzg8L2NvbnN0YW50PiA0ICZ0aW1lczsKKzQgcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCSAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7NDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QjxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7ODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCSAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKwkgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdXl2eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC11eXZ5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZjOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdXl2eS54bWwKQEAgLTAsMCArMSwxMjggQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1VWVZZIj4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9VWVZZICgnVVlWWScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1VZVlk8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5WYXJpYXRpb24gb2YKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IHdpdGggZGlmZmVyZW50IG9yZGVyIG9mIHNhbXBsZXMKK2luIG1lbW9yeTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+SW4gdGhpcyBmb3JtYXQgZWFjaCBmb3VyIGJ5dGVzIGlzIHR3byBwaXhlbHMuIEVhY2ggZm91cgorYnl0ZXMgaXMgdHdvIFkncywgYSBDYiBhbmQgYSBDci4gRWFjaCBZIGdvZXMgdG8gb25lIG9mIHRoZSBwaXhlbHMsIGFuZAordGhlIENiIGFuZCBDciBiZWxvbmcgdG8gYm90aCBwaXhlbHMuIEFzIHlvdSBjYW4gc2VlLCB0aGUgQ3IgYW5kIENiCitjb21wb25lbnRzIGhhdmUgaGFsZiB0aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHRoZSBZCitjb21wb25lbnQuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9VWVZZPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdnl1eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC12eXV5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWYxMmE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdnl1eS54bWwKQEAgLTAsMCArMSwxMjggQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1WWVVZIj4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9WWVVZICgnVllVWScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1ZZVVk8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5WYXJpYXRpb24gb2YKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IHdpdGggZGlmZmVyZW50IG9yZGVyIG9mIHNhbXBsZXMKK2luIG1lbW9yeTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+SW4gdGhpcyBmb3JtYXQgZWFjaCBmb3VyIGJ5dGVzIGlzIHR3byBwaXhlbHMuIEVhY2ggZm91cgorYnl0ZXMgaXMgdHdvIFkncywgYSBDYiBhbmQgYSBDci4gRWFjaCBZIGdvZXMgdG8gb25lIG9mIHRoZSBwaXhlbHMsIGFuZAordGhlIENiIGFuZCBDciBiZWxvbmcgdG8gYm90aCBwaXhlbHMuIEFzIHlvdSBjYW4gc2VlLCB0aGUgQ3IgYW5kIENiCitjb21wb25lbnRzIGhhdmUgaGFsZiB0aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHRoZSBZCitjb21wb25lbnQuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9WWVVZPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTE2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxNi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NDA0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxNi54bWwKQEAgLTAsMCArMSw4OSBAQAorPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtWTE2Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1kxNiAoJ1kxNiAnKTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWTE2PC9jb25zdGFudD48L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R3JleS1zY2FsZSBpbWFnZTwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaXMgYSBncmV5LXNjYWxlIGltYWdlIHdpdGggYSBkZXB0aCBvZiAxNiBiaXRzIHBlcgorcGl4ZWwuIFRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIGlzIHN0b3JlZCBhdCBsb3dlciBtZW1vcnkgYWRkcmVzc2VzCisobGl0dGxlLWVuZGlhbikuIE5vdGUgdGhlIGFjdHVhbCBzYW1wbGluZyBwcmVjaXNpb24gbWF5IGJlIGxvd2VyIHRoYW4KKzE2IGJpdHMsIGZvciBleGFtcGxlIDEwIGJpdHMgcGVyIHBpeGVsIHdpdGggdmFsdWVzIGluIHJhbmdlIDAgdG8KKzEwMjMuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZMTY8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisgICAgICA8Zm9ybWFscGFyYT4KKwk8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCTxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkgICAgPHRncm91cCBjb2xzPSI5IiBhbGlnbj0iY2VudGVyIj4KKwkgICAgICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCSAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2xvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNDo8L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJICAgICAgPC90Ym9keT4KKwkgICAgPC90Z3JvdXA+CisJICA8L2luZm9ybWFsdGFibGU+CisJPC9wYXJhPgorICAgICAgPC9mb3JtYWxwYXJhPgorICAgIDwvZXhhbXBsZT4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJwaXhmbXQuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXk0MXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTQxcC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjODUzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXk0MXAueG1sCkBAIC0wLDAgKzEsMTU3IEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtWTQxUCI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfWTQxUCAoJ1k0MVAnKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+Rm9ybWF0IHdpdGggJmZyYWMxNDsgaG9yaXpvbnRhbCBjaHJvbWEKK3Jlc29sdXRpb24sIGFsc28ga25vd24gYXMgWVVWIDQ6MToxPC9yZWZwdXJwb3NlPgorICAgICAgPC9yZWZuYW1lZGl2PgorICAgICAgPHJlZnNlY3QxPgorCTx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5JbiB0aGlzIGZvcm1hdCBlYWNoIDEyIGJ5dGVzIGlzIGVpZ2h0IHBpeGVscy4gSW4gdGhlCit0d2VsdmUgYnl0ZXMgYXJlIHR3byBDYkNyIHBhaXJzIGFuZCBlaWdodCBZJ3MuIFRoZSBmaXJzdCBDYkNyIHBhaXIKK2dvZXMgd2l0aCB0aGUgZmlyc3QgZm91ciBZJ3MsIGFuZCB0aGUgc2Vjb25kIENiQ3IgcGFpciBnb2VzIHdpdGggdGhlCitvdGhlciBmb3VyIFkncy4gVGhlIENiIGFuZCBDciBjb21wb25lbnRzIGhhdmUgb25lIGZvdXJ0aCB0aGUKK2hvcml6b250YWwgcmVzb2x1dGlvbiBvZiB0aGUgWSBjb21wb25lbnQuPC9wYXJhPgorCisJPHBhcmE+RG8gbm90IGNvbmZ1c2UgdGhpcyBmb3JtYXQgd2l0aCA8bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQxMVAiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDExUDwvY29uc3RhbnQ+PC9saW5rPi4KK1k0MVAgaXMgZGVyaXZlZCBmcm9tICJZVVYgNDoxOjEgPGVtcGhhc2lzPnBhY2tlZDwvZW1waGFzaXM+Iiwgd2hpbGUKK1lVVjQxMVAgc3RhbmRzIGZvciAiWVVWIDQ6MToxIDxlbXBoYXNpcz5wbGFuYXI8L2VtcGhhc2lzPiIuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD4gOCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iMTMiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wNDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDU8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjA2PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wNzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjE1PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xNjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTc8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI0PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yNTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI3PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzM2OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zNDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzU8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjM2PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zNzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkgICAgICA8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjE1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40PC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+NTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT42PC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+NzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MTwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MTAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDEwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWI0YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDEwLnhtbApAQCAtMCwwICsxLDE0MSBAQAorICAgIDxyZWZlbnRyeT4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9ZVlU0MTAgKCdZVlU5JyksIFY0TDJfUElYX0ZNVF9ZVVY0MTAgKCdZVVY5Jyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtWVZVNDEwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lWVTQxMDwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtWVVWNDEwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQxMDwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPlBsYW5hciBmb3JtYXRzIHdpdGggJmZyYWMxNDsgaG9yaXpvbnRhbCBhbmQKK3ZlcnRpY2FsIGNocm9tYSByZXNvbHV0aW9uLCBhbHNvIGtub3duIGFzIFlVViA0OjE6MDwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhlc2UgYXJlIHBsYW5hciBmb3JtYXRzLCBhcyBvcHBvc2VkIHRvIGEgcGFja2VkIGZvcm1hdC4KK1RoZSB0aHJlZSBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgaW50byB0aHJlZSBzdWItaW1hZ2VzIG9yIHBsYW5lcy4KK1RoZSBZIHBsYW5lIGlzIGZpcnN0LiBUaGUgWSBwbGFuZSBoYXMgb25lIGJ5dGUgcGVyIHBpeGVsLiBGb3IKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDEwPC9jb25zdGFudD4sIHRoZSBDciBwbGFuZSBpbW1lZGlhdGVseQorZm9sbG93cyB0aGUgWSBwbGFuZSBpbiBtZW1vcnkuIFRoZSBDciBwbGFuZSBpcyAmZnJhYzE0OyB0aGUgd2lkdGggYW5kCismZnJhYzE0OyB0aGUgaGVpZ2h0IG9mIHRoZSBZIHBsYW5lIChhbmQgb2YgdGhlIGltYWdlKS4gRWFjaCBDciBiZWxvbmdzCit0byAxNiBwaXhlbHMsIGEgZm91ci1ieS1mb3VyIHNxdWFyZSBvZiB0aGUgaW1hZ2UuIEZvbGxvd2luZyB0aGUgQ3IKK3BsYW5lIGlzIHRoZSBDYiBwbGFuZSwganVzdCBsaWtlIHRoZSBDciBwbGFuZS4KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDEwPC9jb25zdGFudD4gaXMgdGhlIHNhbWUsIGV4Y2VwdCB0aGUgQ2IKK3BsYW5lIGNvbWVzIGZpcnN0LCB0aGVuIHRoZSBDciBwbGFuZS48L3BhcmE+CisKKwk8cGFyYT5JZiB0aGUgWSBwbGFuZSBoYXMgcGFkIGJ5dGVzIGFmdGVyIGVhY2ggcm93LCB0aGVuIHRoZSBDcgorYW5kIENiIHBsYW5lcyBoYXZlICZmcmFjMTQ7IGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIHRoZWlyIHJvd3MuIEluCitvdGhlciB3b3JkcywgZm91ciBDeCByb3dzIChpbmNsdWRpbmcgcGFkZGluZykgYXJlIGV4YWN0bHkgYXMgbG9uZyBhcworb25lIFkgcm93IChpbmNsdWRpbmcgcGFkZGluZykuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MTA8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJCSAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs0OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7ODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzEyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNzo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MTFwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQxMXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTA5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MTFwLnhtbApAQCAtMCwwICsxLDE1NSBAQAorICAgIDxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVlVVjQxMVAiPgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1lVVjQxMVAgKCc0MTFQJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDExUDwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPkZvcm1hdCB3aXRoICZmcmFjMTQ7IGhvcml6b250YWwgY2hyb21hIHJlc29sdXRpb24sCithbHNvIGtub3duIGFzIFlVViA0OjE6MS4gUGxhbmFyIGxheW91dCBhcyBvcHBvc2VkIHRvCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1k0MVA8L2NvbnN0YW50PjwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhpcyBmb3JtYXQgaXMgbm90IGNvbW1vbmx5IHVzZWQuIFRoaXMgaXMgYSBwbGFuYXIKK2Zvcm1hdCBzaW1pbGFyIHRvIHRoZSA0OjI6MiBwbGFuYXIgZm9ybWF0IGV4Y2VwdCB3aXRoIGhhbGYgYXMgbWFueQorY2hyb21hLiBUaGUgdGhyZWUgY29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGludG8gdGhyZWUgc3ViLWltYWdlcyBvcgorcGxhbmVzLiBUaGUgWSBwbGFuZSBpcyBmaXJzdC4gVGhlIFkgcGxhbmUgaGFzIG9uZSBieXRlIHBlciBwaXhlbC4gVGhlCitDYiBwbGFuZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBZIHBsYW5lIGluIG1lbW9yeS4gVGhlIENiIHBsYW5lIGlzCismZnJhYzE0OyB0aGUgd2lkdGggb2YgdGhlIFkgcGxhbmUgKGFuZCBvZiB0aGUgaW1hZ2UpLiBFYWNoIENiIGJlbG9uZ3MKK3RvIDQgcGl4ZWxzIGFsbCBvbiB0aGUgc2FtZSByb3cuIEZvciBleGFtcGxlLAorQ2I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD4gYmVsb25ncyB0byBZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD4sCitZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD4sIFknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PiBhbmQKK1knPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0Pi4gRm9sbG93aW5nIHRoZSBDYiBwbGFuZSBpcyB0aGUgQ3IgcGxhbmUsCitqdXN0IGxpa2UgdGhlIENiIHBsYW5lLjwvcGFyYT4KKworCTxwYXJhPklmIHRoZSBZIHBsYW5lIGhhcyBwYWQgYnl0ZXMgYWZ0ZXIgZWFjaCByb3csIHRoZW4gdGhlIENyCithbmQgQ2IgcGxhbmVzIGhhdmUgJmZyYWMxNDsgYXMgbWFueSBwYWQgYnl0ZXMgYWZ0ZXIgdGhlaXIgcm93cy4gSW4KK290aGVyIHdvcmRzLCBmb3VyIEMgeCByb3dzIChpbmNsdWRpbmcgcGFkZGluZykgaXMgZXhhY3RseSBhcyBsb25nIGFzCitvbmUgWSByb3cgKGluY2x1ZGluZyBwYWRkaW5nKS48L3BhcmE+CisKKwk8ZXhhbXBsZT4KKwkgIDx0aXRsZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQxMVA8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJCSAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs0OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7ODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzEyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNzo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzE4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTk6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIxOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMzo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MjAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZDdkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MjAueG1sCkBAIC0wLDAgKzEsMTU3IEBACisgICAgPHJlZmVudHJ5PgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1lWVTQyMCAoJ1lWMTInKSwgVjRMMl9QSVhfRk1UX1lVVjQyMCAoJ1lVMTInKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZSBpZD0iVjRMMi1QSVgtRk1ULVlWVTQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmbmFtZSBpZD0iVjRMMi1QSVgtRk1ULVlVVjQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjA8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5QbGFuYXIgZm9ybWF0cyB3aXRoICZmcmFjMTI7IGhvcml6b250YWwgYW5kCit2ZXJ0aWNhbCBjaHJvbWEgcmVzb2x1dGlvbiwgYWxzbyBrbm93biBhcyBZVVYgNDoyOjA8L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPlRoZXNlIGFyZSBwbGFuYXIgZm9ybWF0cywgYXMgb3Bwb3NlZCB0byBhIHBhY2tlZCBmb3JtYXQuCitUaGUgdGhyZWUgY29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGludG8gdGhyZWUgc3ViLSBpbWFnZXMgb3IgcGxhbmVzLgorVGhlIFkgcGxhbmUgaXMgZmlyc3QuIFRoZSBZIHBsYW5lIGhhcyBvbmUgYnl0ZSBwZXIgcGl4ZWwuIEZvcgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PiwgdGhlIENyIHBsYW5lIGltbWVkaWF0ZWx5Citmb2xsb3dzIHRoZSBZIHBsYW5lIGluIG1lbW9yeS4gVGhlIENyIHBsYW5lIGlzIGhhbGYgdGhlIHdpZHRoIGFuZCBoYWxmCit0aGUgaGVpZ2h0IG9mIHRoZSBZIHBsYW5lIChhbmQgb2YgdGhlIGltYWdlKS4gRWFjaCBDciBiZWxvbmdzIHRvIGZvdXIKK3BpeGVscywgYSB0d28tYnktdHdvIHNxdWFyZSBvZiB0aGUgaW1hZ2UuIEZvciBleGFtcGxlLAorQ3I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD4gYmVsb25ncyB0byBZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD4sCitZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD4sIFknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PiwgYW5kCitZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD4uIEZvbGxvd2luZyB0aGUgQ3IgcGxhbmUgaXMgdGhlIENiIHBsYW5lLAoranVzdCBsaWtlIHRoZSBDciBwbGFuZS4gPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjA8L2NvbnN0YW50PiBpcwordGhlIHNhbWUgZXhjZXB0IHRoZSBDYiBwbGFuZSBjb21lcyBmaXJzdCwgdGhlbiB0aGUgQ3IgcGxhbmUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUgQ3IKK2FuZCBDYiBwbGFuZXMgaGF2ZSBoYWxmIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIHRoZWlyIHJvd3MuIEluIG90aGVyCit3b3JkcywgdHdvIEN4IHJvd3MgKGluY2x1ZGluZyBwYWRkaW5nKSBpcyBleGFjdGx5IGFzIGxvbmcgYXMgb25lIFkgcm93CisoaW5jbHVkaW5nIHBhZGRpbmcpLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDIwPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjUiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7NDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzE2OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzE4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIwOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkJPC9pbmZvcm1hbHRhYmxlPgorCSAgICAgIDwvcGFyYT4KKwkgIDwvZm9ybWFscGFyYT4KKwk8L2V4YW1wbGU+CisgICAgICA8L3JlZnNlY3QxPgorICAgIDwvcmVmZW50cnk+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJwaXhmbXQuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMnAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDIycC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0OGJkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMnAueG1sCkBAIC0wLDAgKzEsMTYxIEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtWVVWNDIyUCI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfWVVWNDIyUCAoJzQyMlAnKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjJQPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+Rm9ybWF0IHdpdGggJmZyYWMxMjsgaG9yaXpvbnRhbCBjaHJvbWEgcmVzb2x1dGlvbiwKK2Fsc28ga25vd24gYXMgWVVWIDQ6MjoyLiBQbGFuYXIgbGF5b3V0IGFzIG9wcG9zZWQgdG8KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+PC9yZWZwdXJwb3NlPgorICAgICAgPC9yZWZuYW1lZGl2PgorICAgICAgPHJlZnNlY3QxPgorCTx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5UaGlzIGZvcm1hdCBpcyBub3QgY29tbW9ubHkgdXNlZC4gVGhpcyBpcyBhIHBsYW5hcgordmVyc2lvbiBvZiB0aGUgWVVZViBmb3JtYXQuIFRoZSB0aHJlZSBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgaW50bwordGhyZWUgc3ViLWltYWdlcyBvciBwbGFuZXMuIFRoZSBZIHBsYW5lIGlzIGZpcnN0LiBUaGUgWSBwbGFuZSBoYXMgb25lCitieXRlIHBlciBwaXhlbC4gVGhlIENiIHBsYW5lIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIFkgcGxhbmUgaW4KK21lbW9yeS4gVGhlIENiIHBsYW5lIGlzIGhhbGYgdGhlIHdpZHRoIG9mIHRoZSBZIHBsYW5lIChhbmQgb2YgdGhlCitpbWFnZSkuIEVhY2ggQ2IgYmVsb25ncyB0byB0d28gcGl4ZWxzLiBGb3IgZXhhbXBsZSwKK0NiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+IGJlbG9uZ3MgdG8gWSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+LAorWSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+LiBGb2xsb3dpbmcgdGhlIENiIHBsYW5lIGlzIHRoZSBDciBwbGFuZSwKK2p1c3QgbGlrZSB0aGUgQ2IgcGxhbmUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUgQ3IKK2FuZCBDYiBwbGFuZXMgaGF2ZSBoYWxmIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIHRoZWlyIHJvd3MuIEluIG90aGVyCit3b3JkcywgdHdvIEN4IHJvd3MgKGluY2x1ZGluZyBwYWRkaW5nKSBpcyBleGFjdGx5IGFzIGxvbmcgYXMgb25lIFkgcm93CisoaW5jbHVkaW5nIHBhZGRpbmcpLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDIyUDwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDszMDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkJPC9pbmZvcm1hbHRhYmxlPgorCSAgICAgIDwvcGFyYT4KKwkgIDwvZm9ybWFscGFyYT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5Db2xvciBTYW1wbGUgTG9jYXRpb24uPC90aXRsZT4KKwkgICAgPHBhcmE+CisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI3IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MTwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXl2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1eXYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjJmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXl2LnhtbApAQCAtMCwwICsxLDEyOCBAQAorICAgIDxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVlVWVYiPgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1lVWVYgKCdZVVlWJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPlBhY2tlZCBmb3JtYXQgd2l0aCAmZnJhYzEyOyBob3Jpem9udGFsIGNocm9tYQorcmVzb2x1dGlvbiwgYWxzbyBrbm93biBhcyBZVVYgNDoyOjI8L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPkluIHRoaXMgZm9ybWF0IGVhY2ggZm91ciBieXRlcyBpcyB0d28gcGl4ZWxzLiBFYWNoIGZvdXIKK2J5dGVzIGlzIHR3byBZJ3MsIGEgQ2IgYW5kIGEgQ3IuIEVhY2ggWSBnb2VzIHRvIG9uZSBvZiB0aGUgcGl4ZWxzLCBhbmQKK3RoZSBDYiBhbmQgQ3IgYmVsb25nIHRvIGJvdGggcGl4ZWxzLiBBcyB5b3UgY2FuIHNlZSwgdGhlIENyIGFuZCBDYgorY29tcG9uZW50cyBoYXZlIGhhbGYgdGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBvZiB0aGUgWSBjb21wb25lbnQuCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVWVYgPC9jb25zdGFudD4gaXMga25vd24gaW4gdGhlIFdpbmRvd3MKK2Vudmlyb25tZW50IGFzIFlVWTIuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVlWPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXZ5dS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dnl1LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQxN2FlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXZ5dS54bWwKQEAgLTAsMCArMSwxMjggQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1ZVllVIj4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9ZVllVICgnWVZZVScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lWWVU8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5WYXJpYXRpb24gb2YKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IHdpdGggZGlmZmVyZW50IG9yZGVyIG9mIHNhbXBsZXMKK2luIG1lbW9yeTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+SW4gdGhpcyBmb3JtYXQgZWFjaCBmb3VyIGJ5dGVzIGlzIHR3byBwaXhlbHMuIEVhY2ggZm91cgorYnl0ZXMgaXMgdHdvIFkncywgYSBDYiBhbmQgYSBDci4gRWFjaCBZIGdvZXMgdG8gb25lIG9mIHRoZSBwaXhlbHMsIGFuZAordGhlIENiIGFuZCBDciBiZWxvbmcgdG8gYm90aCBwaXhlbHMuIEFzIHlvdSBjYW4gc2VlLCB0aGUgQ3IgYW5kIENiCitjb21wb25lbnRzIGhhdmUgaGFsZiB0aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHRoZSBZCitjb21wb25lbnQuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVllVPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzk2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwKQEAgLTAsMCArMSw4MDEgQEAKKyAgPHRpdGxlPkltYWdlIEZvcm1hdHM8L3RpdGxlPgorCisgIDxwYXJhPlRoZSBWNEwyIEFQSSB3YXMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBkZXZpY2VzIGV4Y2hhbmdpbmcKK2ltYWdlIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMuIFRoZQorPHN0cnVjdG5hbWU+djRsMl9waXhfZm9ybWF0PC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgZm9ybWF0CithbmQgbGF5b3V0IG9mIGFuIGltYWdlIGluIG1lbW9yeS4gSW1hZ2UgZm9ybWF0cyBhcmUgbmVnb3RpYXRlZCB3aXRoCit0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuIChUaGUgZXhwbGFuYXRpb25zIGhlcmUgZm9jdXMgb24gdmlkZW8KK2NhcHR1cmluZyBhbmQgb3V0cHV0LCBmb3Igb3ZlcmxheSBmcmFtZSBidWZmZXIgZm9ybWF0cyBzZWUgYWxzbworJlZJRElPQy1HLUZCVUY7Lik8L3BhcmE+CisKKyAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXBpeC1mb3JtYXQiPgorICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9waXhfZm9ybWF0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIzIj4KKyAgICAgICZjcy1zdHI7CisgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCTxyb3c+CisJICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDxlbnRyeT5JbWFnZSB3aWR0aCBpbiBwaXhlbHMuPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgPGVudHJ5PkltYWdlIGhlaWdodCBpbiBwaXhlbHMuPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+QXBwbGljYXRpb25zIHNldCB0aGVzZSBmaWVsZHMgdG8KK3JlcXVlc3QgYW4gaW1hZ2Ugc2l6ZSwgZHJpdmVycyByZXR1cm4gdGhlIGNsb3Nlc3QgcG9zc2libGUgdmFsdWVzLiBJbgorY2FzZSBvZiBwbGFuYXIgZm9ybWF0cyB0aGUgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gYXBwbGllcyB0byB0aGUgbGFyZ2VzdCBwbGFuZS4gVG8KK2F2b2lkIGFtYmlndWl0aWVzIGRyaXZlcnMgbXVzdCByZXR1cm4gdmFsdWVzIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZQorb2YgdGhlIHNjYWxlIGZhY3RvciBvZiBhbnkgc21hbGxlciBwbGFuZXMuIEZvciBleGFtcGxlIHdoZW4gdGhlIGltYWdlCitmb3JtYXQgaXMgWVVWIDQ6MjowLCA8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5oZWlnaHQ8L3N0cnVjdGZpZWxkPiBtdXN0IGJlIG11bHRpcGxlcyBvZiB0d28uPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+cGl4ZWxmb3JtYXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8ZW50cnk+VGhlIHBpeGVsIGZvcm1hdCBvciB0eXBlIG9mIGNvbXByZXNzaW9uLCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi4gVGhpcyBpcyBhIGxpdHRsZSBlbmRpYW4gPGxpbmsKK2xpbmtlbmQ9InY0bDItZm91cmNjIj5mb3VyIGNoYXJhY3RlciBjb2RlPC9saW5rPi4gVjRMMiBkZWZpbmVzCitzdGFuZGFyZCBSR0IgZm9ybWF0cyBpbiA8eHJlZiBsaW5rZW5kPSJyZ2ItZm9ybWF0cyIgLz4sIFlVViBmb3JtYXRzIGluIDx4cmVmCitsaW5rZW5kPSJ5dXYtZm9ybWF0cyIgLz4sIGFuZCByZXNlcnZlZCBjb2RlcyBpbiA8eHJlZgorbGlua2VuZD0icmVzZXJ2ZWQtZm9ybWF0cyIgLz48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8ZW50cnk+VmlkZW8gaW1hZ2VzIGFyZSB0eXBpY2FsbHkgaW50ZXJsYWNlZC4gQXBwbGljYXRpb25zCitjYW4gcmVxdWVzdCB0byBjYXB0dXJlIG9yIG91dHB1dCBvbmx5IHRoZSB0b3Agb3IgYm90dG9tIGZpZWxkLCBvciBib3RoCitmaWVsZHMgaW50ZXJsYWNlZCBvciBzZXF1ZW50aWFsbHkgc3RvcmVkIGluIG9uZSBidWZmZXIgb3IgYWx0ZXJuYXRpbmcKK2luIHNlcGFyYXRlIGJ1ZmZlcnMuIERyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgZmllbGQgb3JkZXIgc2VsZWN0ZWQuCitGb3IgZGV0YWlscyBzZWUgPHhyZWYgbGlua2VuZD0iZmllbGQtb3JkZXIiIC8+LjwvZW50cnk+CisJPC9yb3c+CisJPHJvdz4KKwkgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICA8ZW50cnk+PHN0cnVjdGZpZWxkPmJ5dGVzcGVybGluZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDxlbnRyeT5EaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHRoZSBsZWZ0bW9zdCBwaXhlbHMgaW4gdHdvCithZGphY2VudCBsaW5lcy48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5Cb3RoIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycworY2FuIHNldCB0aGlzIGZpZWxkIHRvIHJlcXVlc3QgcGFkZGluZyBieXRlcyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4KK0RyaXZlcnMgaG93ZXZlciBtYXkgaWdub3JlIHRoZSB2YWx1ZSByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLAorcmV0dXJuaW5nIDxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+IHRpbWVzIGJ5dGVzIHBlciBwaXhlbCBvciBhCitsYXJnZXIgdmFsdWUgcmVxdWlyZWQgYnkgdGhlIGhhcmR3YXJlLiBUaGF0IGltcGxpZXMgYXBwbGljYXRpb25zIGNhbgoranVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvIHRvIGdldCBhIHJlYXNvbmFibGUKK2RlZmF1bHQuPC9wYXJhPjxwYXJhPlZpZGVvIGhhcmR3YXJlIG1heSBhY2Nlc3MgcGFkZGluZyBieXRlcywKK3RoZXJlZm9yZSB0aGV5IG11c3QgcmVzaWRlIGluIGFjY2Vzc2libGUgbWVtb3J5LiBDb25zaWRlciBjYXNlcyB3aGVyZQorcGFkZGluZyBieXRlcyBhZnRlciB0aGUgbGFzdCBsaW5lIG9mIGFuIGltYWdlIGNyb3NzIGEgc3lzdGVtIHBhZ2UKK2JvdW5kYXJ5LiBJbnB1dCBkZXZpY2VzIG1heSB3cml0ZSBwYWRkaW5nIGJ5dGVzLCB0aGUgdmFsdWUgaXMKK3VuZGVmaW5lZC4gT3V0cHV0IGRldmljZXMgaWdub3JlIHRoZSBjb250ZW50cyBvZiBwYWRkaW5nCitieXRlcy48L3BhcmE+PHBhcmE+V2hlbiB0aGUgaW1hZ2UgZm9ybWF0IGlzIHBsYW5hciB0aGUKKzxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPiB2YWx1ZSBhcHBsaWVzIHRvIHRoZSBsYXJnZXN0CitwbGFuZSBhbmQgaXMgZGl2aWRlZCBieSB0aGUgc2FtZSBmYWN0b3IgYXMgdGhlCis8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBmaWVsZCBmb3IgYW55IHNtYWxsZXIgcGxhbmVzLiBGb3IKK2V4YW1wbGUgdGhlIENiIGFuZCBDciBwbGFuZXMgb2YgYSBZVVYgNDoyOjAgaW1hZ2UgaGF2ZSBoYWxmIGFzIG1hbnkKK3BhZGRpbmcgYnl0ZXMgZm9sbG93aW5nIGVhY2ggbGluZSBhcyB0aGUgWSBwbGFuZS4gVG8gYXZvaWQgYW1iaWd1aXRpZXMKK2RyaXZlcnMgbXVzdCByZXR1cm4gYSA8c3RydWN0ZmllbGQ+Ynl0ZXNwZXJsaW5lPC9zdHJ1Y3RmaWVsZD4gdmFsdWUKK3JvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZSBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvcGFyYT48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zaXplaW1hZ2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8ZW50cnk+U2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVyIHRvIGhvbGQgYSBjb21wbGV0ZSBpbWFnZSwKK3NldCBieSB0aGUgZHJpdmVyLiBVc3VhbGx5IHRoaXMgaXMKKzxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPiB0aW1lcworPHN0cnVjdGZpZWxkPmhlaWdodDwvc3RydWN0ZmllbGQ+LiBXaGVuIHRoZSBpbWFnZSBjb25zaXN0cyBvZiB2YXJpYWJsZQorbGVuZ3RoIGNvbXByZXNzZWQgZGF0YSB0aGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0bworaG9sZCBhbiBpbWFnZS48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnk+JnY0bDItY29sb3JzcGFjZTs8L2VudHJ5PgorCSAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jb2xvcnNwYWNlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgPGVudHJ5PlRoaXMgaW5mb3JtYXRpb24gc3VwcGxlbWVudHMgdGhlCis8c3RydWN0ZmllbGQ+cGl4ZWxmb3JtYXQ8L3N0cnVjdGZpZWxkPiBhbmQgbXVzdCBiZSBzZXQgYnkgdGhlIGRyaXZlciwKK3NlZSA8eHJlZiBsaW5rZW5kPSJjb2xvcnNwYWNlcyIgLz4uPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+cHJpdjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDxlbnRyeT5SZXNlcnZlZCBmb3IgY3VzdG9tIChkcml2ZXIgZGVmaW5lZCkgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gYWJvdXQgZm9ybWF0cy4gV2hlbiBub3QgdXNlZCBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgbXVzdAorc2V0IHRoaXMgZmllbGQgdG8gemVyby48L2VudHJ5PgorCTwvcm93PgorICAgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgPC90YWJsZT4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+U3RhbmRhcmQgSW1hZ2UgRm9ybWF0czwvdGl0bGU+CisKKyAgICA8cGFyYT5JbiBvcmRlciB0byBleGNoYW5nZSBpbWFnZXMgYmV0d2VlbiBkcml2ZXJzIGFuZAorYXBwbGljYXRpb25zLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBzdGFuZGFyZCBpbWFnZSBkYXRhIGZvcm1hdHMKK3doaWNoIGJvdGggc2lkZXMgd2lsbCBpbnRlcnByZXQgdGhlIHNhbWUgd2F5LiBWNEwyIGluY2x1ZGVzIHNldmVyYWwKK3N1Y2ggZm9ybWF0cywgYW5kIHRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBhbiB1bmFtYmlndW91cworc3BlY2lmaWNhdGlvbiBvZiB0aGUgc3RhbmRhcmQgaW1hZ2UgZGF0YSBmb3JtYXRzIGluIFY0TDIuPC9wYXJhPgorCisgICAgPHBhcmE+VjRMMiBkcml2ZXJzIGFyZSBub3QgbGltaXRlZCB0byB0aGVzZSBmb3JtYXRzLCBob3dldmVyLgorRHJpdmVyLXNwZWNpZmljIGZvcm1hdHMgYXJlIHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UgdGhlIGFwcGxpY2F0aW9uIG1heQorZGVwZW5kIG9uIGEgY29kZWMgdG8gY29udmVydCBpbWFnZXMgdG8gb25lIG9mIHRoZSBzdGFuZGFyZCBmb3JtYXRzCit3aGVuIG5lZWRlZC4gQnV0IHRoZSBkYXRhIGNhbiBzdGlsbCBiZSBzdG9yZWQgYW5kIHJldHJpZXZlZCBpbiB0aGUKK3Byb3ByaWV0YXJ5IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGEgZGV2aWNlIG1heSBzdXBwb3J0IGEgcHJvcHJpZXRhcnkKK2NvbXByZXNzZWQgZm9ybWF0LiBBcHBsaWNhdGlvbnMgY2FuIHN0aWxsIGNhcHR1cmUgYW5kIHNhdmUgdGhlIGRhdGEgaW4KK3RoZSBjb21wcmVzc2VkIGZvcm1hdCwgc2F2aW5nIG11Y2ggZGlzayBzcGFjZSwgYW5kIGxhdGVyIHVzZSBhIGNvZGVjCit0byBjb252ZXJ0IHRoZSBpbWFnZXMgdG8gdGhlIFggV2luZG93cyBzY3JlZW4gZm9ybWF0IHdoZW4gdGhlIHZpZGVvIGlzCit0byBiZSBkaXNwbGF5ZWQuPC9wYXJhPgorCisgICAgPHBhcmE+RXZlbiBzbywgdWx0aW1hdGVseSwgc29tZSBzdGFuZGFyZCBmb3JtYXRzIGFyZSBuZWVkZWQsIHNvCit0aGUgVjRMMiBzcGVjaWZpY2F0aW9uIHdvdWxkIG5vdCBiZSBjb21wbGV0ZSB3aXRob3V0IHdlbGwtZGVmaW5lZAorc3RhbmRhcmQgZm9ybWF0cy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgVjRMMiBzdGFuZGFyZCBmb3JtYXRzIGFyZSBtYWlubHkgdW5jb21wcmVzc2VkIGZvcm1hdHMuIFRoZQorcGl4ZWxzIGFyZSBhbHdheXMgYXJyYW5nZWQgaW4gbWVtb3J5IGZyb20gbGVmdCB0byByaWdodCwgYW5kIGZyb20gdG9wCit0byBib3R0b20uIFRoZSBmaXJzdCBieXRlIG9mIGRhdGEgaW4gdGhlIGltYWdlIGJ1ZmZlciBpcyBhbHdheXMgZm9yCit0aGUgbGVmdG1vc3QgcGl4ZWwgb2YgdGhlIHRvcG1vc3Qgcm93LiBGb2xsb3dpbmcgdGhhdCBpcyB0aGUgcGl4ZWwKK2ltbWVkaWF0ZWx5IHRvIGl0cyByaWdodCwgYW5kIHNvIG9uIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRvcCByb3cgb2YKK3BpeGVscy4gRm9sbG93aW5nIHRoZSByaWdodG1vc3QgcGl4ZWwgb2YgdGhlIHJvdyB0aGVyZSBtYXkgYmUgemVybyBvcgorbW9yZSBieXRlcyBvZiBwYWRkaW5nIHRvIGd1YXJhbnRlZSB0aGF0IGVhY2ggcm93IG9mIHBpeGVsIGRhdGEgaGFzIGEKK2NlcnRhaW4gYWxpZ25tZW50LiBGb2xsb3dpbmcgdGhlIHBhZCBieXRlcywgaWYgYW55LCBpcyBkYXRhIGZvciB0aGUKK2xlZnRtb3N0IHBpeGVsIG9mIHRoZSBzZWNvbmQgcm93IGZyb20gdGhlIHRvcCwgYW5kIHNvIG9uLiBUaGUgbGFzdCByb3cKK2hhcyBqdXN0IGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIGl0IGFzIHRoZSBvdGhlciByb3dzLjwvcGFyYT4KKworICAgIDxwYXJhPkluIFY0TDIgZWFjaCBmb3JtYXQgaGFzIGFuIGlkZW50aWZpZXIgd2hpY2ggbG9va3MgbGlrZQorPGNvbnN0YW50PlBJWF9GTVRfWFhYPC9jb25zdGFudD4sIGRlZmluZWQgaW4gdGhlIDxsaW5rCitsaW5rZW5kPSJ2aWRlb2RldiI+dmlkZW9kZXYuaDwvbGluaz4gaGVhZGVyIGZpbGUuIFRoZXNlIGlkZW50aWZpZXJzCityZXByZXNlbnQgPGxpbmsgbGlua2VuZD0idjRsMi1mb3VyY2MiPmZvdXIgY2hhcmFjdGVyIGNvZGVzPC9saW5rPgord2hpY2ggYXJlIGFsc28gbGlzdGVkIGJlbG93LCBob3dldmVyIHRoZXkgYXJlIG5vdCB0aGUgc2FtZSBhcyB0aG9zZQordXNlZCBpbiB0aGUgV2luZG93cyB3b3JsZC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iY29sb3JzcGFjZXMiPgorICAgIDx0aXRsZT5Db2xvcnNwYWNlczwvdGl0bGU+CisKKyAgICA8cGFyYT5baW50cm9dPC9wYXJhPgorCisgICAgPCEtLSBTZWUgcHJvcG9zYWwgYnkgQmlsbHkgQmlnZ3MsIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbQorb24gMTEgT2N0IDIwMDIsIHN1YmplY3Q6ICJSZTogW1Y0TF0gUmU6IHY0bDIgYXBpIiwgYW5kCitodHRwOi8vdmVrdG9yLnRoZW9yZW0uY2EvZ3JhcGhpY3MveWNiY3IvIGFuZAoraHR0cDovL3d3dy5wb3ludG9uLmNvbS9ub3Rlcy9jb2xvdXJfYW5kX2dhbW1hL0NvbG9yRkFRLmh0bWwgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgIDx2YXJpYWJsZWxpc3Q+CisJPHZhcmxpc3RlbnRyeT4KKwkgIDx0ZXJtPkdhbW1hIENvcnJlY3Rpb248L3Rlcm0+CisJICA8bGlzdGl0ZW0+CisJICAgIDxwYXJhPlt0byBkb108L3BhcmE+CisJICAgIDxwYXJhPkUnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+ID0gZihSKTwvcGFyYT4KKwkgICAgPHBhcmE+RSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4gPSBmKEcpPC9wYXJhPgorCSAgICA8cGFyYT5FJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiA9IGYoQik8L3BhcmE+CisJICA8L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJICA8dGVybT5Db25zdHJ1Y3Rpb24gb2YgbHVtaW5hbmNlIGFuZCBjb2xvci1kaWZmZXJlbmNlCitzaWduYWxzPC90ZXJtPgorCSAgPGxpc3RpdGVtPgorCSAgICA8cGFyYT5bdG8gZG9dPC9wYXJhPgorCSAgICA8cGFyYT5FJzxzdWJzY3JpcHQ+WTwvc3Vic2NyaXB0PiA9CitDb2VmZjxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiBFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyBDb2VmZjxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PiBFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyBDb2VmZjxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiBFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvcGFyYT4KKwkgICAgPHBhcmE+KEUnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+IC0gRSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4pID0gRSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKy0gQ29lZmY8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4gRSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKy0gQ29lZmY8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4gRSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4KKy0gQ29lZmY8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gRSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L3BhcmE+CisJICAgIDxwYXJhPihFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiAtIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+KSA9IEUnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+CistIENvZWZmPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+IEUnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+CistIENvZWZmPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+IEUnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CistIENvZWZmPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+IEUnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9wYXJhPgorCSAgPC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCSAgPHRlcm0+UmUtbm9ybWFsaXplZCBjb2xvci1kaWZmZXJlbmNlIHNpZ25hbHM8L3Rlcm0+CisJICA8bGlzdGl0ZW0+CisJICAgIDxwYXJhPlRoZSBjb2xvci1kaWZmZXJlbmNlIHNpZ25hbHMgYXJlIHNjYWxlZCBiYWNrIHRvIHVuaXR5CityYW5nZSBbLTAuNTsrMC41XTo8L3BhcmE+CisJICAgIDxwYXJhPks8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gPSAwLjUgLyAoMSAtIENvZWZmPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+KTwvcGFyYT4KKwkgICAgPHBhcmE+SzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiA9IDAuNSAvICgxIC0gQ29lZmY8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4pPC9wYXJhPgorCSAgICA8cGFyYT5QPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+ID0KK0s8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gKEUnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+IC0gRSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4pID0KKyAgMC41IChDb2VmZjxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiAvIENvZWZmPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+KSBFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyAwLjUgKENvZWZmPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+IC8gQ29lZmY8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4pIEUnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrIDAuNSBFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvcGFyYT4KKwkgICAgPHBhcmE+UDxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiA9CitLPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+IChFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiAtIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+KSA9CisgIDAuNSBFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyAwLjUgKENvZWZmPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+IC8gQ29lZmY8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4pIEUnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrIDAuNSAoQ29lZmY8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gLyBDb2VmZjxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PikgRSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L3BhcmE+CisJICA8L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJICA8dGVybT5RdWFudGl6YXRpb248L3Rlcm0+CisJICA8bGlzdGl0ZW0+CisJICAgIDxwYXJhPlt0byBkb108L3BhcmE+CisJICAgIDxwYXJhPlknID0gKEx1bS4gTGV2ZWxzIC0gMSkgJm1pZGRvdDsgRSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4gKyBMdW0uIE9mZnNldDwvcGFyYT4KKwkgICAgPHBhcmE+QzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiA9IChDaHJvbS4gTGV2ZWxzIC0gMSkKKyZtaWRkb3Q7IFA8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gKyBDaHJvbS4gT2Zmc2V0PC9wYXJhPgorCSAgICA8cGFyYT5DPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+ID0gKENocm9tLiBMZXZlbHMgLSAxKQorJm1pZGRvdDsgUDxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiArIENocm9tLiBPZmZzZXQ8L3BhcmE+CisJICAgIDxwYXJhPlJvdW5kaW5nIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYW5kIGNsYW1waW5nIHRvIHRoZSByYW5nZQorWzA7MjU1XSBmaW5hbGx5IHlpZWxkcyB0aGUgZGlnaXRhbCBjb2xvciBjb21wb25lbnRzIFknQ2JDcgorc3RvcmVkIGluIFlVViBpbWFnZXMuPC9wYXJhPgorCSAgPC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPklUVS1SIFJlYy4gQlQuNjAxIGNvbG9yIGNvbnZlcnNpb248L3RpdGxlPgorCisgICAgICA8cGFyYT5Gb3J3YXJkIFRyYW5zZm9ybWF0aW9uPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitpbnQgRVIsIEVHLCBFQjsgICAgICAgICAvKiBnYW1tYSBjb3JyZWN0ZWQgUkdCIGlucHV0IFswOzI1NV0gKi8KK2ludCBZMSwgQ2IsIENyOyAgICAgICAgIC8qIG91dHB1dCBbMDsyNTVdICovCisKK2RvdWJsZSByLCBnLCBiOyAgICAgICAgIC8qIHRlbXBvcmFyaWVzICovCitkb3VibGUgeTEsIHBiLCBwcjsKKworaW50CitjbGFtcCAoZG91YmxlIHgpCit7CisJaW50IHIgPSB4OyAgICAgIC8qIHJvdW5kIHRvIG5lYXJlc3QgKi8KKworCWlmIChyICZsdDsgMCkgICAgICAgICByZXR1cm4gMDsKKwllbHNlIGlmIChyICZndDsgMjU1KSAgcmV0dXJuIDI1NTsKKwllbHNlICAgICAgICAgICAgICAgcmV0dXJuIHI7Cit9CisKK3IgPSBFUiAvIDI1NS4wOworZyA9IEVHIC8gMjU1LjA7CitiID0gRUIgLyAyNTUuMDsKKworeTEgID0gIDAuMjk5ICAqIHIgKyAwLjU4NyAqIGcgKyAwLjExNCAgKiBiOworcGIgID0gLTAuMTY5ICAqIHIgLSAwLjMzMSAqIGcgKyAwLjUgICAgKiBiOworcHIgID0gIDAuNSAgICAqIHIgLSAwLjQxOSAqIGcgLSAwLjA4MSAgKiBiOworCitZMSA9IGNsYW1wICgyMTkgKiB5MSArIDE2KTsKK0NiID0gY2xhbXAgKDIyNCAqIHBiICsgMTI4KTsKK0NyID0gY2xhbXAgKDIyNCAqIHByICsgMTI4KTsKKworLyogb3Igc2hvcnRlciAqLworCit5MSA9IDAuMjk5ICogRVIgKyAwLjU4NyAqIEVHICsgMC4xMTQgKiBFQjsKKworWTEgPSBjbGFtcCAoICgyMTkgLyAyNTUuMCkgICAgICAgICAgICAgICAgICAgICogICAgICAgeTEgICsgMTYpOworQ2IgPSBjbGFtcCAoKCgyMjQgLyAyNTUuMCkgLyAoMiAtIDIgKiAwLjExNCkpICogKEVCIC0geTEpICsgMTI4KTsKK0NyID0gY2xhbXAgKCgoMjI0IC8gMjU1LjApIC8gKDIgLSAyICogMC4yOTkpKSAqIChFUiAtIHkxKSArIDEyOCk7CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT5JbnZlcnNlIFRyYW5zZm9ybWF0aW9uPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitpbnQgWTEsIENiLCBDcjsgICAgICAgICAvKiBnYW1tYSBwcmUtY29ycmVjdGVkIGlucHV0IFswOzI1NV0gKi8KK2ludCBFUiwgRUcsIEVCOyAgICAgICAgIC8qIG91dHB1dCBbMDsyNTVdICovCisKK2RvdWJsZSByLCBnLCBiOyAgICAgICAgIC8qIHRlbXBvcmFyaWVzICovCitkb3VibGUgeTEsIHBiLCBwcjsKKworaW50CitjbGFtcCAoZG91YmxlIHgpCit7CisJaW50IHIgPSB4OyAgICAgIC8qIHJvdW5kIHRvIG5lYXJlc3QgKi8KKworCWlmIChyICZsdDsgMCkgICAgICAgICByZXR1cm4gMDsKKwllbHNlIGlmIChyICZndDsgMjU1KSAgcmV0dXJuIDI1NTsKKwllbHNlICAgICAgICAgICAgICAgcmV0dXJuIHI7Cit9CisKK3kxID0gKDI1NSAvIDIxOS4wKSAqIChZMSAtIDE2KTsKK3BiID0gKDI1NSAvIDIyNC4wKSAqIChDYiAtIDEyOCk7CitwciA9ICgyNTUgLyAyMjQuMCkgKiAoQ3IgLSAxMjgpOworCityID0gMS4wICogeTEgKyAwICAgICAqIHBiICsgMS40MDIgKiBwcjsKK2cgPSAxLjAgKiB5MSAtIDAuMzQ0ICogcGIgLSAwLjcxNCAqIHByOworYiA9IDEuMCAqIHkxICsgMS43NzIgKiBwYiArIDAgICAgICogcHI7CisKK0VSID0gY2xhbXAgKHIgKiAyNTUpOyAvKiBbb2s/IG9uZSBzaG91bGQgcHJvYi4gbGltaXQgeTEscGIscHJdICovCitFRyA9IGNsYW1wIChnICogMjU1KTsKK0VCID0gY2xhbXAgKGIgKiAyNTUpOworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBpZD0idjRsMi1jb2xvcnNwYWNlIiBvcmllbnQ9ImxhbmQiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl9jb2xvcnNwYWNlPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMTEiIGFsaWduPSJjZW50ZXIiPgorCTxjb2xzcGVjIGFsaWduPSJsZWZ0IiAvPgorCTxjb2xzcGVjIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iY3IiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iY2ciIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iY2IiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0id3AiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iZ2MiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0ibHVtIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9InF5IiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9InFjIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImNyIiBuYW1lZW5kPSJjYiIgc3Bhbm5hbWU9ImNocm9tIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9InF5IiBuYW1lZW5kPSJxYyIgc3Bhbm5hbWU9InF1YW50IiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9Imx1bSIgbmFtZWVuZD0icWMiIHNwYW5uYW1lPSJzcGFtIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnkgbW9yZXJvd3M9IjEiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJjaHJvbSI+Q2hyb21hdGljaXRpZXM8Zm9vdG5vdGU+CisJCTxwYXJhPlRoZSBjb29yZGluYXRlcyBvZiB0aGUgY29sb3IgcHJpbWFyaWVzIGFyZQorZ2l2ZW4gaW4gdGhlIENJRSBzeXN0ZW0gKDE5MzEpPC9wYXJhPgorCSAgICAgIDwvZm9vdG5vdGU+PC9lbnRyeT4KKwkgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj5XaGl0ZSBQb2ludDwvZW50cnk+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+R2FtbWEgQ29ycmVjdGlvbjwvZW50cnk+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+THVtaW5hbmNlIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJxdWFudCI+UXVhbnRpemF0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlJlZDwvZW50cnk+CisJICAgIDxlbnRyeT5HcmVlbjwvZW50cnk+CisJICAgIDxlbnRyeT5CbHVlPC9lbnRyeT4KKwkgICAgPGVudHJ5PlknPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiLCBDcjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME08L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5UU0MvUEFMIGFjY29yZGluZyB0byA8eHJlZiBsaW5rZW5kPSJzbXB0ZTE3MG0iIC8+LAorPHhyZWYgbGlua2VuZD0iaXR1NjAxIiAvPjwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuNjMwLCB5Jm5ic3A7PSZuYnNwOzAuMzQwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMTAsIHkmbmJzcDs9Jm5ic3A7MC41OTU8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjE1NSwgeSZuYnNwOz0mbmJzcDswLjA3MDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMzEyNywgeSZuYnNwOz0mbmJzcDswLjMyOTAsCisJICAgIElsbHVtaW5hbnQgRDxzdWJzY3JpcHQ+NjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+RScgPSA0LjUmbmJzcDtJJm5ic3A7Zm9yJm5ic3A7SSZuYnNwOyZsZTswLjAxOCwKKzEuMDk5Jm5ic3A7STxzdXBlcnNjcmlwdD4wLjQ1PC9zdXBlcnNjcmlwdD4mbmJzcDstJm5ic3A7MC4wOTkmbmJzcDtmb3ImbmJzcDswLjAxOCZuYnNwOyZsdDsmbmJzcDtJPC9lbnRyeT4KKwkgICAgPGVudHJ5PjAuMjk5Jm5ic3A7RSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKysmbmJzcDswLjU4NyZuYnNwO0UnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC4xMTQmbmJzcDtFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT4yMTkmbmJzcDtFJzxzdWJzY3JpcHQ+WTwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxNjwvZW50cnk+CisJICAgIDxlbnRyeT4yMjQmbmJzcDtQPHN1YnNjcmlwdD5CLFI8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTI4PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NPTE9SU1BBQ0VfU01QVEUyNDBNPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xMTI1LUxpbmUgKFVTKSBIRFRWLCBzZWUgPHhyZWYKK2xpbmtlbmQ9InNtcHRlMjQwbSIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjYzMCwgeSZuYnNwOz0mbmJzcDswLjM0MDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMzEwLCB5Jm5ic3A7PSZuYnNwOzAuNTk1PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4xNTUsIHkmbmJzcDs9Jm5ic3A7MC4wNzA8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjMxMjcsIHkmbmJzcDs9Jm5ic3A7MC4zMjkwLAorCSAgICBJbGx1bWluYW50IEQ8c3Vic2NyaXB0PjY1PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkUnID0gNCZuYnNwO0kmbmJzcDtmb3ImbmJzcDtJJm5ic3A7JmxlOzAuMDIyOCwKKzEuMTExNSZuYnNwO0k8c3VwZXJzY3JpcHQ+MC40NTwvc3VwZXJzY3JpcHQ+Jm5ic3A7LSZuYnNwOzAuMTExNSZuYnNwO2ZvciZuYnNwOzAuMDIyOCZuYnNwOyZsdDsmbmJzcDtJPC9lbnRyeT4KKwkgICAgPGVudHJ5PjAuMjEyJm5ic3A7RSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKysmbmJzcDswLjcwMSZuYnNwO0UnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC4wODcmbmJzcDtFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT4yMTkmbmJzcDtFJzxzdWJzY3JpcHQ+WTwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxNjwvZW50cnk+CisJICAgIDxlbnRyeT4yMjQmbmJzcDtQPHN1YnNjcmlwdD5CLFI8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTI4PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NPTE9SU1BBQ0VfUkVDNzA5PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5IRFRWIGFuZCBtb2Rlcm4gZGV2aWNlcywgc2VlIDx4cmVmCitsaW5rZW5kPSJpdHU3MDkiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC42NDAsIHkmbmJzcDs9Jm5ic3A7MC4zMzA8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjMwMCwgeSZuYnNwOz0mbmJzcDswLjYwMDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMTUwLCB5Jm5ic3A7PSZuYnNwOzAuMDYwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMTI3LCB5Jm5ic3A7PSZuYnNwOzAuMzI5MCwKKwkgICAgSWxsdW1pbmFudCBEPHN1YnNjcmlwdD42NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5FJyA9IDQuNSZuYnNwO0kmbmJzcDtmb3ImbmJzcDtJJm5ic3A7JmxlOzAuMDE4LAorMS4wOTkmbmJzcDtJPHN1cGVyc2NyaXB0PjAuNDU8L3N1cGVyc2NyaXB0PiZuYnNwOy0mbmJzcDswLjA5OSZuYnNwO2ZvciZuYnNwOzAuMDE4Jm5ic3A7Jmx0OyZuYnNwO0k8L2VudHJ5PgorCSAgICA8ZW50cnk+MC4yMTI1Jm5ic3A7RSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKysmbmJzcDswLjcxNTQmbmJzcDtFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyZuYnNwOzAuMDcyMSZuYnNwO0UnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIxOSZuYnNwO0UnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIyNCZuYnNwO1A8c3Vic2NyaXB0PkIsUjwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxMjg8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9CVDg3ODwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+QnJva2VuIEJ0ODc4IGV4dGVudHM8Zm9vdG5vdGU+CisJCTxwYXJhPlRoZSB1YmlxdWl0b3VzIEJ0ODc4IHZpZGVvIGNhcHR1cmUgY2hpcAorcXVhbnRpemVzIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+IHRvIDIzOCBsZXZlbHMsIHlpZWxkaW5nIGEgcmFuZ2UKK29mIFknID0gMTYgJmhlbGxpcDsgMjUzLCB1bmxpa2UgUmVjLiA2MDEgWScgPSAxNiAmaGVsbGlwOworMjM1LiBUaGlzIGlzIG5vdCBhIHR5cG8gaW4gdGhlIEJ0ODc4IGRvY3VtZW50YXRpb24sIGl0IGhhcyBiZWVuCitpbXBsZW1lbnRlZCBpbiBzaWxpY29uLiBUaGUgY2hyb21hIGV4dGVudHMgYXJlIHVuY2xlYXIuPC9wYXJhPgorCSAgICAgIDwvZm9vdG5vdGU+LCA8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4/PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4wLjI5OSZuYnNwO0UnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC41ODcmbmJzcDtFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyZuYnNwOzAuMTE0Jm5ic3A7RSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGVtcGhhc2lzPjIzNzwvZW1waGFzaXM+Jm5ic3A7RSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTY8L2VudHJ5PgorCSAgICA8ZW50cnk+MjI0Jm5ic3A7UDxzdWJzY3JpcHQ+QixSPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzEyOCAocHJvYmFibHkpPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT5NL05UU0M8Zm9vdG5vdGU+CisJCTxwYXJhPk5vIGlkZW50aWZpZXIgZXhpc3RzIGZvciBNL1BBTCB3aGljaCB1c2VzCit0aGUgY2hyb21hdGljaXRpZXMgb2YgTS9OVFNDLCB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgYXJlIGVxdWFsIHRvIEIgYW5kCitHL1BBTC48L3BhcmE+CisJICAgICAgPC9mb290bm90ZT4gYWNjb3JkaW5nIHRvIDx4cmVmIGxpbmtlbmQ9Iml0dTQ3MCIgLz4sIDx4cmVmCisJCWxpbmtlbmQ9Iml0dTYwMSIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjY3LCB5Jm5ic3A7PSZuYnNwOzAuMzM8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjIxLCB5Jm5ic3A7PSZuYnNwOzAuNzE8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjE0LCB5Jm5ic3A7PSZuYnNwOzAuMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjMxMCwgeSZuYnNwOz0mbmJzcDswLjMxNiwgSWxsdW1pbmFudCBDPC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+MC4yOTkmbmJzcDtFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyZuYnNwOzAuNTg3Jm5ic3A7RSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4KKysmbmJzcDswLjExNCZuYnNwO0UnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIxOSZuYnNwO0UnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIyNCZuYnNwO1A8c3Vic2NyaXB0PkIsUjwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxMjg8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT42MjUtbGluZSBQQUwgYW5kIFNFQ0FNIHN5c3RlbXMgYWNjb3JkaW5nIHRvIDx4cmVmCitsaW5rZW5kPSJpdHU0NzAiIC8+LCA8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC42NCwgeSZuYnNwOz0mbmJzcDswLjMzPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4yOSwgeSZuYnNwOz0mbmJzcDswLjYwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4xNSwgeSZuYnNwOz0mbmJzcDswLjA2PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMTMsIHkmbmJzcDs9Jm5ic3A7MC4zMjksCitJbGx1bWluYW50IEQ8c3Vic2NyaXB0PjY1PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+MC4yOTkmbmJzcDtFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyZuYnNwOzAuNTg3Jm5ic3A7RSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4KKysmbmJzcDswLjExNCZuYnNwO0UnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIxOSZuYnNwO0UnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIyNCZuYnNwO1A8c3Vic2NyaXB0PkIsUjwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxMjg8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9KUEVHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5KUEVHIFknQ2JDciwgc2VlIDx4cmVmIGxpbmtlbmQ9ImpmaWYiIC8+LCA8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4/PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4wLjI5OSZuYnNwO0UnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC41ODcmbmJzcDtFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyZuYnNwOzAuMTE0Jm5ic3A7RSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjU2Jm5ic3A7RSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTY8Zm9vdG5vdGU+CisJCTxwYXJhPk5vdGUgSkZJRiBxdWFudGl6ZXMKK1knUDxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PlA8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4gaW4gcmFuZ2UgWzA7KzFdIGFuZAorWy0wLjU7KzAuNV0gdG8gPGVtcGhhc2lzPjI1NzwvZW1waGFzaXM+IGxldmVscywgaG93ZXZlciBZJ0NiQ3Igc2lnbmFscworYXJlIHN0aWxsIGNsYW1wZWQgdG8gWzA7MjU1XS48L3BhcmE+CisJICAgICAgPC9mb290bm90ZT48L2VudHJ5PgorCSAgICA8ZW50cnk+MjU2Jm5ic3A7UDxzdWJzY3JpcHQ+QixSPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzEyODwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DT0xPUlNQQUNFX1NSR0I8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5Pls/XTwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuNjQwLCB5Jm5ic3A7PSZuYnNwOzAuMzMwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMDAsIHkmbmJzcDs9Jm5ic3A7MC42MDA8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjE1MCwgeSZuYnNwOz0mbmJzcDswLjA2MDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMzEyNywgeSZuYnNwOz0mbmJzcDswLjMyOTAsCisJICAgIElsbHVtaW5hbnQgRDxzdWJzY3JpcHQ+NjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+RScgPSA0LjUmbmJzcDtJJm5ic3A7Zm9yJm5ic3A7SSZuYnNwOyZsZTswLjAxOCwKKzEuMDk5Jm5ic3A7STxzdXBlcnNjcmlwdD4wLjQ1PC9zdXBlcnNjcmlwdD4mbmJzcDstJm5ic3A7MC4wOTkmbmJzcDtmb3ImbmJzcDswLjAxOCZuYnNwOyZsdDsmbmJzcDtJPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJzcGFtIj5uL2E8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0icGl4Zm10LWluZGV4ZWQiPgorICAgIDx0aXRsZT5JbmRleGVkIEZvcm1hdDwvdGl0bGU+CisKKyAgICA8cGFyYT5JbiB0aGlzIGZvcm1hdCBlYWNoIHBpeGVsIGlzIHJlcHJlc2VudGVkIGJ5IGFuIDggYml0IGluZGV4CitpbnRvIGEgMjU2IGVudHJ5IEFSR0IgcGFsZXR0ZS4gSXQgaXMgaW50ZW5kZWQgZm9yIDxsaW5rCitsaW5rZW5kPSJvc2QiPlZpZGVvIE91dHB1dCBPdmVybGF5czwvbGluaz4gb25seS4gVGhlcmUgYXJlIG5vIGlvY3RscyB0bworYWNjZXNzIHRoZSBwYWxldHRlLCB0aGlzIG11c3QgYmUgZG9uZSB3aXRoIGlvY3RscyBvZiB0aGUgTGludXggZnJhbWVidWZmZXIgQVBJLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjAiIGZyYW1lPSJub25lIj4KKyAgICAgIDx0aXRsZT5JbmRleGVkIEltYWdlIEZvcm1hdDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjM3IiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJpZCIgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iZm91cmNjIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImJpdCIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iNCIgY29sbmFtZT0iYjA3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNSIgY29sbmFtZT0iYjA2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNiIgY29sbmFtZT0iYjA1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNyIgY29sbmFtZT0iYjA0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOCIgY29sbmFtZT0iYjAzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOSIgY29sbmFtZT0iYjAyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTAiIGNvbG5hbWU9ImIwMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjExIiBjb2xuYW1lPSJiMDAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8c3BhbnNwZWMgbmFtZXN0PSJiMDciIG5hbWVlbmQ9ImIwMCIgc3Bhbm5hbWU9ImIwIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIxNyIgbmFtZWVuZD0iYjEwIiBzcGFubmFtZT0iYjEiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjI3IiBuYW1lZW5kPSJiMjAiIHNwYW5uYW1lPSJiMiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMzciIG5hbWVlbmQ9ImIzMCIgc3Bhbm5hbWU9ImIzIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5JZGVudGlmaWVyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvZGU8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMCI+Qnl0ZSZuYnNwOzA8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5CaXQ8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1QQUw4Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFMODwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidQQUw4JzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+aTxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5pPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmk8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+aTxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5pPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmk8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+aTxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5pPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InBpeGZtdC1yZ2IiPgorICAgIDx0aXRsZT5SR0IgRm9ybWF0czwvdGl0bGU+CisKKyAgICAmc3ViLXBhY2tlZC1yZ2I7CisgICAgJnN1Yi1zYmdncjg7CisgICAgJnN1Yi1zZ2JyZzg7CisgICAgJnN1Yi1zZ3JiZzg7CisgICAgJnN1Yi1zYmdncjE2OworICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9Inl1di1mb3JtYXRzIj4KKyAgICA8dGl0bGU+WVVWIEZvcm1hdHM8L3RpdGxlPgorCisgICAgPHBhcmE+WVVWIGlzIHRoZSBmb3JtYXQgbmF0aXZlIHRvIFRWIGJyb2FkY2FzdCBhbmQgY29tcG9zaXRlIHZpZGVvCitzaWduYWxzLiBJdCBzZXBhcmF0ZXMgdGhlIGJyaWdodG5lc3MgaW5mb3JtYXRpb24gKFkpIGZyb20gdGhlIGNvbG9yCitpbmZvcm1hdGlvbiAoVSBhbmQgViBvciBDYiBhbmQgQ3IpLiBUaGUgY29sb3IgaW5mb3JtYXRpb24gY29uc2lzdHMgb2YKK3JlZCBhbmQgYmx1ZSA8ZW1waGFzaXM+Y29sb3IgZGlmZmVyZW5jZTwvZW1waGFzaXM+IHNpZ25hbHMsIHRoaXMgd2F5Cit0aGUgZ3JlZW4gY29tcG9uZW50IGNhbiBiZSByZWNvbnN0cnVjdGVkIGJ5IHN1YnRyYWN0aW5nIGZyb20gdGhlCiticmlnaHRuZXNzIGNvbXBvbmVudC4gU2VlIDx4cmVmIGxpbmtlbmQ9ImNvbG9yc3BhY2VzIiAvPiBmb3IgY29udmVyc2lvbgorZXhhbXBsZXMuIFlVViB3YXMgY2hvc2VuIGJlY2F1c2UgZWFybHkgdGVsZXZpc2lvbiB3b3VsZCBvbmx5IHRyYW5zbWl0CiticmlnaHRuZXNzIGluZm9ybWF0aW9uLiBUbyBhZGQgY29sb3IgaW4gYSB3YXkgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nCityZWNlaXZlcnMgYSBuZXcgc2lnbmFsIGNhcnJpZXIgd2FzIGFkZGVkIHRvIHRyYW5zbWl0IHRoZSBjb2xvcgorZGlmZmVyZW5jZSBzaWduYWxzLiBTZWNvbmRhcnkgaW4gdGhlIFlVViBmb3JtYXQgdGhlIFUgYW5kIFYgY29tcG9uZW50cwordXN1YWxseSBoYXZlIGxvd2VyIHJlc29sdXRpb24gdGhhbiB0aGUgWSBjb21wb25lbnQuIFRoaXMgaXMgYW4gYW5hbG9nCit2aWRlbyBjb21wcmVzc2lvbiB0ZWNobmlxdWUgdGFraW5nIGFkdmFudGFnZSBvZiBhIHByb3BlcnR5IG9mIHRoZQoraHVtYW4gdmlzdWFsIHN5c3RlbSwgYmVpbmcgbW9yZSBzZW5zaXRpdmUgdG8gYnJpZ2h0bmVzcworaW5mb3JtYXRpb24uPC9wYXJhPgorCisgICAgJnN1Yi1wYWNrZWQteXV2OworICAgICZzdWItZ3JleTsKKyAgICAmc3ViLXkxNjsKKyAgICAmc3ViLXl1eXY7CisgICAgJnN1Yi11eXZ5OworICAgICZzdWIteXZ5dTsKKyAgICAmc3ViLXZ5dXk7CisgICAgJnN1Yi15NDFwOworICAgICZzdWIteXV2NDIwOworICAgICZzdWIteXV2NDEwOworICAgICZzdWIteXV2NDIycDsKKyAgICAmc3ViLXl1djQxMXA7CisgICAgJnN1Yi1udjEyOworICAgICZzdWItbnYxNjsKKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5Db21wcmVzc2VkIEZvcm1hdHM8L3RpdGxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJjb21wcmVzc2VkLWZvcm1hdHMiPgorICAgICAgPHRpdGxlPkNvbXByZXNzZWQgSW1hZ2UgRm9ybWF0czwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiIGFsaWduPSJsZWZ0Ij4KKwkmY3MtZGVmOworCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5JZGVudGlmaWVyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvZGU8L2VudHJ5PgorCSAgICA8ZW50cnk+RGV0YWlsczwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1KUEVHIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSlBFRzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidKUEVHJzwvZW50cnk+CisJICAgIDxlbnRyeT5UQkQuIFNlZSBhbHNvICZWSURJT0MtRy1KUEVHQ09NUDssCisJICAgICZWSURJT0MtUy1KUEVHQ09NUDsuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULU1QRUciPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9NUEVHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J01QRUcnPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1QRUcgc3RyZWFtLiBUaGUgYWN0dWFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5CitleHRlbmRlZCBjb250cm9sIDxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFPC9jb25zdGFudD4sIHNlZQorPHhyZWYgbGlua2VuZD0ibXBlZy1jb250cm9sLWlkIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0icGl4Zm10LXJlc2VydmVkIj4KKyAgICA8dGl0bGU+UmVzZXJ2ZWQgRm9ybWF0IElkZW50aWZpZXJzPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXNlIGZvcm1hdHMgYXJlIG5vdCBkZWZpbmVkIGJ5IHRoaXMgc3BlY2lmaWNhdGlvbiwgdGhleQorYXJlIGp1c3QgbGlzdGVkIGZvciByZWZlcmVuY2UgYW5kIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdHMuIElmIHlvdQord2FudCB0byByZWdpc3RlciB5b3VyIG93biBmb3JtYXQsIHNlbmQgYW4gZS1tYWlsIHRvIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nCitsaXN0ICZ2NGwtbWw7IGZvciBpbmNsdXNpb24gaW4gdGhlIDxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+CitmaWxlLiBJZiB5b3Ugd2FudCB0byBzaGFyZSB5b3VyIGZvcm1hdCB3aXRoIG90aGVyIGRldmVsb3BlcnMgYWRkIGEKK2xpbmsgdG8geW91ciBkb2N1bWVudGF0aW9uIGFuZCBzZW5kIGEgY29weSB0byB0aGUgbGludXgtbWVkaWEgbWFpbGluZyBsaXN0Citmb3IgaW5jbHVzaW9uIGluIHRoaXMgc2VjdGlvbi4gSWYgeW91IHRoaW5rIHlvdXIgZm9ybWF0IHNob3VsZCBiZSBsaXN0ZWQKK2luIGEgc3RhbmRhcmQgZm9ybWF0IHNlY3Rpb24gcGxlYXNlIG1ha2UgYSBwcm9wb3NhbCBvbiB0aGUgbGludXgtbWVkaWEgbWFpbGluZworbGlzdC48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InJlc2VydmVkLWZvcm1hdHMiPgorICAgICAgPHRpdGxlPlJlc2VydmVkIEltYWdlIEZvcm1hdHM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIiBhbGlnbj0ibGVmdCI+CisJJmNzLWRlZjsKKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeT5Db2RlPC9lbnRyeT4KKwkgICAgPGVudHJ5PkRldGFpbHM8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULURWIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfRFY8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nZHZzZCc8L2VudHJ5PgorCSAgICA8ZW50cnk+dW5rbm93bjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1FVDYxWDI1MSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0VUNjFYMjUxPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0U2MjUnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgZm9ybWF0IG9mIHRoZSBFVDYxWDI1MSBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUhJMjQwIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSEkyNDA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nSEkyNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+OCBiaXQgUkdCIGZvcm1hdCB1c2VkIGJ5IHRoZSBCVFRWIGRyaXZlci48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUhNMTIiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ITTEyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0hNMTInPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPllVViA0OjI6MCBmb3JtYXQgdXNlZCBieSB0aGUKK0lWVFYgZHJpdmVyLCA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lml2dHZkcml2ZXIub3JnLyI+CitodHRwOi8vd3d3Lml2dHZkcml2ZXIub3JnLzwvdWxpbms+PC9wYXJhPjxwYXJhPlRoZSBmb3JtYXQgaXMgZG9jdW1lbnRlZCBpbiB0aGUKK2tlcm5lbCBzb3VyY2VzIGluIHRoZSBmaWxlIDxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTI8L2ZpbGVuYW1lPgorPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1TUENBNTAxIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1BDQTUwMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidTNTAxJzwvZW50cnk+CisJICAgIDxlbnRyeT5ZVVlWIHBlciBsaW5lIHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU1BDQTUwNSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NQQ0E1MDU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUzUwNSc8L2VudHJ5PgorCSAgICA8ZW50cnk+WVlVViBwZXIgbGluZSB1c2VkIGJ5IHRoZSBnc3BjYSBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TUENBNTA4PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1M1MDgnPC9lbnRyeT4KKwkgICAgPGVudHJ5PllVVlkgcGVyIGxpbmUgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1TUENBNTYxIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1BDQTU2MTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidTNTYxJzwvZW50cnk+CisJICAgIDxlbnRyeT5Db21wcmVzc2VkIEdCUkcgQmF5ZXIgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU0dSQkcxMCI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NHUkJHMTA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nREExMCc8L2VudHJ5PgorCSAgICA8ZW50cnk+MTAgYml0IHJhdyBCYXllciwgZXhwYW5kZWQgdG8gMTYgYml0cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU0dSQkcxMERQQ004Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0RCMTAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjEwIGJpdCByYXcgQmF5ZXIgRFBDTSBjb21wcmVzc2VkIHRvIDggYml0cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtUEFDMjA3Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFDMjA3PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1AyMDcnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgQkdHUiBCYXllciBmb3JtYXQgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1NUjk3MzEwQSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX01SOTczMTBBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J00zMTAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgQkdHUiBCYXllciBmb3JtYXQgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1PVjUxMSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX09WNTExPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J081MTEnPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9WNTExIEpQRUcgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtT1Y1MTgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9PVjUxODwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidPNTE4JzwvZW50cnk+CisJICAgIDxlbnRyeT5PVjUxOCBKUEVHIGZvcm1hdCB1c2VkIGJ5IHRoZSBnc3BjYSBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVBKUEciPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9QSlBHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1BKUEcnPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBpeGFydCA3M3h4IEpQRUcgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU1E5MDVDIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1E5MDVDPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+JzkwNUMnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgUkdHQiBiYXllciBmb3JtYXQgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1NSlBFRyI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX01KUEVHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J01KUEcnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgZm9ybWF0IHVzZWQgYnkgdGhlIFpvcmFuIGRyaXZlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1QV0MxIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUFdDMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidQV0MxJzwvZW50cnk+CisJICAgIDxlbnRyeT5Db21wcmVzc2VkIGZvcm1hdCBvZiB0aGUgUFdDIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtUFdDMiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BXQzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUFdDMic8L2VudHJ5PgorCSAgICA8ZW50cnk+Q29tcHJlc3NlZCBmb3JtYXQgb2YgdGhlIFBXQyBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVNOOUMxMFgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TTjlDMTBYPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1M5MTAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgZm9ybWF0IG9mIHRoZSBTTjlDMTAyIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU045QzIwWC1JNDIwIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1M5MjAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PllVViA0OjI6MCBmb3JtYXQgb2YgdGhlIGdzcGNhIHNuOWMyMHggZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1XTlZBIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfV05WQTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidXTlZBJzwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5Vc2VkIGJ5IHRoZSBXaW5ub3YgVmlkZXVtIGRyaXZlciwgPHVsaW5rCit1cmw9Imh0dHA6Ly93d3cudGhlZGlya3Mub3JnL3dpbm5vdi8iPgoraHR0cDovL3d3dy50aGVkaXJrcy5vcmcvd2lubm92LzwvdWxpbms+PC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1UTTYwMDAiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9UTTYwMDA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nVE02MCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+VXNlZCBieSBUcmlkZW50IHRtNjAwMDwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtWVlVViI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lZVVY8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nWVlVVic8L2VudHJ5PgorCSAgICA8ZW50cnk+dW5rbm93bjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9zZWN0aW9uPgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZjVlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwKQEAgLTAsMCArMSwxNzUgQEAKKzx0aXRsZT5SZW1vdGUgQ29udHJvbGxlcnM8L3RpdGxlPgorPHNlY3Rpb24gaWQ9IlJlbW90ZV9jb250cm9sbGVyc19JbnRybyI+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHBhcmE+Q3VycmVudGx5LCBtb3N0IGFuYWxvZyBhbmQgZGlnaXRhbCBkZXZpY2VzIGhhdmUgYSBJbmZyYXJlZCBpbnB1dCBmb3IgcmVtb3RlIGNvbnRyb2xsZXJzLiBFYWNoCittYW51ZmFjdHVyZXIgaGFzIHRoZWlyIG93biB0eXBlIG9mIGNvbnRyb2wuIEl0IGlzIG5vdCByYXJlIGZvciB0aGUgc2FtZSBtYW51ZmFjdHVyZXIgdG8gc2hpcCBkaWZmZXJlbnQKK3R5cGVzIG9mIGNvbnRyb2xzLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZS48L3BhcmE+Cis8cGFyYT5VbmZvcnR1bmF0ZWx5LCBmb3Igc2V2ZXJhbCB5ZWFycywgdGhlcmUgd2FzIG5vIGVmZm9ydCB0byBjcmVhdGUgdW5pZm9ybSBJUiBrZXljb2RlcyBmb3IKK2RpZmZlcmVudCBkZXZpY2VzLiAgVGhpcyBjYXVzZWQgdGhlIHNhbWUgSVIga2V5bmFtZSB0byBiZSBtYXBwZWQgY29tcGxldGVseSBkaWZmZXJlbnRseSBvbgorZGlmZmVyZW50IElSIGRldmljZXMuIFRoaXMgcmVzdWx0ZWQgdGhhdCB0aGUgc2FtZSBJUiBrZXluYW1lIHRvIGJlIG1hcHBlZCBjb21wbGV0ZWx5IGRpZmZlcmVudCBvbgorZGlmZmVyZW50IElSJ3MuIER1ZSB0byB0aGF0LCBWNEwyIEFQSSBub3cgc3BlY2lmaWVzIGEgc3RhbmRhcmQgZm9yIG1hcHBpbmcgTWVkaWEga2V5cyBvbiBJUi48L3BhcmE+Cis8cGFyYT5UaGlzIHN0YW5kYXJkIHNob3VsZCBiZSB1c2VkIGJ5IGJvdGggVjRML0RWQiBkcml2ZXJzIGFuZCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zPC9wYXJhPgorPHBhcmE+VGhlIG1vZHVsZXMgcmVnaXN0ZXIgdGhlIHJlbW90ZSBhcyBrZXlib2FyZCB3aXRoaW4gdGhlIGxpbnV4IGlucHV0IGxheWVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIElSIGtleSBzdHJva2VzIHdpbGwgbG9vayBsaWtlIG5vcm1hbCBrZXlib2FyZCBrZXkgc3Ryb2tlcyAoaWYgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIGVuYWJsZWQpLiBVc2luZyB0aGUgZXZlbnQgZGV2aWNlcyAoQ09ORklHX0lOUFVUX0VWREVWKSBpdCBpcyBwb3NzaWJsZSBmb3IgYXBwbGljYXRpb25zIHRvIGFjY2VzcyB0aGUgcmVtb3RlIHZpYSAvZGV2L2lucHV0L2V2ZW50IGRldmljZXMuPC9wYXJhPgorCis8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InJjX3N0YW5kYXJkX2tleW1hcCI+Cis8dGl0bGU+SVIgZGVmYXVsdCBrZXltYXBwaW5nPC90aXRsZT4KKzx0Z3JvdXAgY29scz0iMyI+CismY3Mtc3RyOworPHRib2R5IHZhbGlnbj0idG9wIj4KKzxyb3c+Cis8ZW50cnk+S2V5IGNvZGU8L2VudHJ5PgorPGVudHJ5Pk1lYW5pbmc8L2VudHJ5PgorPGVudHJ5PktleSBleGFtcGxlcyBvbiBJUjwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz48ZW50cnk+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPk51bWVyaWMga2V5czwvZW1waGFzaXM+PC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV8wPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCAwPC9lbnRyeT48ZW50cnk+MDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZXzE8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PktleWJvYXJkIGRpZ2l0IDE8L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfMjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+S2V5Ym9hcmQgZGlnaXQgMjwvZW50cnk+PGVudHJ5PjI8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV8zPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCAzPC9lbnRyeT48ZW50cnk+MzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZXzQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PktleWJvYXJkIGRpZ2l0IDQ8L2VudHJ5PjxlbnRyeT40PC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfNTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+S2V5Ym9hcmQgZGlnaXQgNTwvZW50cnk+PGVudHJ5PjU8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV82PC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCA2PC9lbnRyeT48ZW50cnk+NjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZXzc8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PktleWJvYXJkIGRpZ2l0IDc8L2VudHJ5PjxlbnRyeT43PC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfODwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+S2V5Ym9hcmQgZGlnaXQgODwvZW50cnk+PGVudHJ5Pjg8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV85PC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCA5PC9lbnRyeT48ZW50cnk+OTwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5Nb3ZpZSBwbGF5IGNvbnRyb2w8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRk9SV0FSRDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+SW5zdGFudGx5IGFkdmFuY2UgaW4gdGltZTwvZW50cnk+PGVudHJ5PiZndDsmZ3Q7IC8gRk9SV0FSRDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0JBQ0s8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5Pkluc3RhbnRseSBnbyBiYWNrIGluIHRpbWU8L2VudHJ5PjxlbnRyeT4mbHQ7Jmx0OyZsdDsgLyBCQUNLPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRkFTVEZPUldBUkQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlBsYXkgbW92aWUgZmFzdGVyPC9lbnRyeT48ZW50cnk+Jmd0OyZndDsmZ3Q7IC8gRk9SV0FSRDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1JFV0lORDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UGxheSBtb3ZpZSBiYWNrPC9lbnRyeT48ZW50cnk+UkVXSU5EIC8gQkFDS1dBUkQ8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9ORVhUPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgbmV4dCBjaGFwdGVyIC8gc3ViLWNoYXB0ZXIgLyBpbnRlcnZhbDwvZW50cnk+PGVudHJ5Pk5FWFQgLyBTS0lQPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUFJFVklPVVM8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlNlbGVjdCBwcmV2aW91cyBjaGFwdGVyIC8gc3ViLWNoYXB0ZXIgLyBpbnRlcnZhbDwvZW50cnk+PGVudHJ5PiZsdDsmbHQ7IC8gIFBSRVYgLyBQUkVWSU9VUzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0FHQUlOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5SZXBlYXQgdGhlIHZpZGVvIG9yIGEgdmlkZW8gaW50ZXJ2YWw8L2VudHJ5PjxlbnRyeT5SRVBFQVQgLyBMT09QIC8gUkVDQUxMPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUEFVU0U8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlBhdXNlIHNyb3dlYW08L2VudHJ5PjxlbnRyeT5QQVVTRSAvIEZSRUVaRTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1BMQVk8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlBsYXkgbW92aWUgYXQgdGhlIG5vcm1hbCB0aW1lc2hpZnQ8L2VudHJ5PjxlbnRyeT5OT1JNQUwgVElNRVNISUZUIC8gTElWRSAvICZndDs8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9QTEFZUEFVU0U8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkFsdGVybmF0ZSBiZXR3ZWVuIHBsYXkgYW5kIHBhdXNlPC9lbnRyeT48ZW50cnk+UExBWSAvIFBBVVNFPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfU1RPUDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RvcCBzcm93ZWFtPC9lbnRyeT48ZW50cnk+U1RPUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1JFQ09SRDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RhcnQvc3RvcCByZWNvcmRpbmcgc3Jvd2VhbTwvZW50cnk+PGVudHJ5PkNBUFRVUkUgLyBSRUMgLyBSRUNPUkQvUEFVU0U8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlRha2UgYSBwaWN0dXJlIG9mIHRoZSBpbWFnZTwvZW50cnk+PGVudHJ5PkNBTUVSQSBJQ09OIC8gQ0FQVFVSRSAvIFNOQVBTSE9UPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfU0hVRkZMRTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RW5hYmxlIHNodWZmbGUgbW9kZTwvZW50cnk+PGVudHJ5PlNIVUZGTEU8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9USU1FPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BY3RpdmF0ZSB0aW1lIHNoaWZ0IG1vZGU8L2VudHJ5PjxlbnRyeT5USU1FIFNISUZUPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVElUTEU8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkFsbG93IGNoYW5naW5nIHRoZSBjaGFwdGVyPC9lbnRyeT48ZW50cnk+Q0hBUFRFUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NVQlRJVExFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BbGxvdyBjaGFuZ2luZyB0aGUgc3VidGl0bGU8L2VudHJ5PjxlbnRyeT5TVUJUSVRMRTwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5JbWFnZSBjb250cm9sPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0JSSUdIVE5FU1NET1dOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5EZWNyZWFzZSBCcmlnaHRuZXNzPC9lbnRyeT48ZW50cnk+QlJJR0hUTkVTUyBERUNSRUFTRTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0JSSUdIVE5FU1NVUDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+SW5jcmVhc2UgQnJpZ2h0bmVzczwvZW50cnk+PGVudHJ5PkJSSUdIVE5FU1MgSU5DUkVBU0U8L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0FOR0xFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5Td2l0Y2ggdmlkZW8gY2FtZXJhIGFuZ2xlIChvbiB2aWRlb3Mgd2l0aCBtb3JlIHRoYW4gb25lIGFuZ2xlIHN0b3JlZCk8L2VudHJ5PjxlbnRyeT5BTkdMRSAvIFNXQVA8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9FUEc8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5Pk9wZW4gdGhlIEVsZWNyb3dvbmljIFBsYXkgR3VpZGUgKEVQRyk8L2VudHJ5PjxlbnRyeT5FUEcgLyBHVUlERTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1RFWFQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkFjdGl2YXRlL2NoYW5nZSBjbG9zZWQgY2FwdGlvbiBtb2RlPC9lbnRyeT48ZW50cnk+Q0xPU0VEIENBUFRJT04vVEVMRVRFWFQgLyBEVkQgVEVYVCAvIFRFTEVURVhUIC8gVFRYPC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkF1ZGlvIGNvbnRyb2w8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQVVESU88L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkNoYW5nZSBhdWRpbyBzb3VyY2U8L2VudHJ5PjxlbnRyeT5BVURJTyBTT1VSQ0UgLyBBVURJTyAvIE1VU0lDPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTVVURTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+TXV0ZS91bm11dGUgYXVkaW88L2VudHJ5PjxlbnRyeT5NVVRFIC8gREVNVVRFIC8gVU5NVVRFPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVk9MVU1FRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RGVjcmVhc2Ugdm9sdW1lPC9lbnRyeT48ZW50cnk+Vk9MVU1FLSAvIFZPTFVNRSBET1dOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVk9MVU1FVVA8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkluY3JlYXNlIHZvbHVtZTwvZW50cnk+PGVudHJ5PlZPTFVNRSsgLyBWT0xVTUUgVVA8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9NT0RFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5DaGFuZ2Ugc291bmQgbW9kZTwvZW50cnk+PGVudHJ5Pk1PTk8vU1RFUkVPPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTEFOR1VBR0U8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlNlbGVjdCBMYW5ndWFnZTwvZW50cnk+PGVudHJ5PjFTVCAvIDJORCBMQU5HVUFHRSAvIERWRCBMQU5HIC8gTVRTL1NBUCAvIE1UUyBTRUw8L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+Q2hhbm5lbCBjb250cm9sPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0NIQU5ORUw8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkdvIHRvIHRoZSBuZXh0IGZhdm9yaXRlIGNoYW5uZWw8L2VudHJ5PjxlbnRyeT5BTFQgLyBDSEFOTkVMIC8gQ0ggU1VSRklORyAvIFNVUkYgLyBGQVY8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9DSEFOTkVMRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RGVjcmVhc2UgY2hhbm5lbCBzZXF1ZW5jaWFsbHk8L2VudHJ5PjxlbnRyeT5DSEFOTkVMIC0gLyBDSEFOTkVMIERPV04gLyBET1dOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQ0hBTk5FTFVQPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5JbmNyZWFzZSBjaGFubmVsIHNlcXVlbmNpYWxseTwvZW50cnk+PGVudHJ5PkNIQU5ORUwgKyAvIENIQU5ORUwgVVAgLyBVUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0RJR0lUUzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+VXNlIG1vcmUgdGhhbiBvbmUgZGlnaXQgZm9yIGNoYW5uZWw8L2VudHJ5PjxlbnRyeT5QTFVTIC8gMTAwLyAxeHggLyB4eHggLyAgLS8tLSAgLyBTaW5nbGUgRG91YmxlIFRyaXBsZSBEaWdpdDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NFQVJDSDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RhcnQgY2hhbm5lbCBhdXRvc2NhbjwvZW50cnk+PGVudHJ5PlNDQU4gLyBBVVRPU0NBTjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5Db2xvcmVkIGtleXM8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQkxVRTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+SVIgQmx1ZSBrZXk8L2VudHJ5PjxlbnRyeT5CTFVFPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfR1JFRU48L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PklSIEdyZWVuIEtleTwvZW50cnk+PGVudHJ5PkdSRUVOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUkVEPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5JUiBSZWQga2V5PC9lbnRyeT48ZW50cnk+UkVEPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfWUVMTE9XPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5JUiBZZWxsb3cga2V5PC9lbnRyeT48ZW50cnk+IFlFTExPVzwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5NZWRpYSBzZWxlY3Rpb248L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQ0Q8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkNoYW5nZSBpbnB1dCBzb3VyY2UgdG8gQ29tcGFjdCBEaXNjPC9lbnRyeT48ZW50cnk+Q0Q8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9EVkQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkNoYW5nZSBpbnB1dCB0byBEVkQ8L2VudHJ5PjxlbnRyeT5EVkQgLyBEVkQgTUVOVTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0VKRUNUQ0xPU0VDRDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3Blbi9jbG9zZSB0aGUgQ0QvRFZEIHBsYXllcjwvZW50cnk+PGVudHJ5Pi0mZ3Q7ICkgLyBDTE9TRSAvIE9QRU48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX01FRElBPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5UdXJuIG9uL29mZiBNZWRpYSBhcHBsaWNhdGlvbjwvZW50cnk+PGVudHJ5PlBDL1RWIC8gIFRVUk4gT04vT0ZGIEFQUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1BDPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3RzIGZyb20gVFYgdG8gUEM8L2VudHJ5PjxlbnRyeT5QQzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1JBRElPPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5QdXQgaW50byBBTS9GTSByYWRpbyBtb2RlPC9lbnRyeT48ZW50cnk+UkFESU8gLyBUVi9GTSAvIFRWL1JBRElPIC8gRk0gLyBGTS9SQURJTzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1RWPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgdHYgbW9kZTwvZW50cnk+PGVudHJ5PlRWIC8gTElWRSBUVjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1RWMjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U2VsZWN0IENhYmxlIG1vZGU8L2VudHJ5PjxlbnRyeT5BSVIvQ0JMPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVkNSPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgVkNSIG1vZGU8L2VudHJ5PjxlbnRyeT5WQ1IgTU9ERSAvIERUUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1ZJREVPPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BbHRlcm5hdGUgYmV0d2VlbiBpbnB1dCBtb2RlczwvZW50cnk+PGVudHJ5PlNPVVJDRSAvIFNFTEVDVCAvIERJU1BMQVkgLyBTV0lUQ0ggSU5QVVRTIC8gVklERU88L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+UG93ZXIgY29udHJvbDwvZW1waGFzaXM+PC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9QT1dFUjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+VHVybiBvbi9vZmYgY29tcHV0ZXI8L2VudHJ5PjxlbnRyeT5TWVNURU0gUE9XRVIgLyBDT01QVVRFUiBQT1dFUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1BPV0VSMjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+VHVybiBvbi9vZmYgYXBwbGljYXRpb248L2VudHJ5PjxlbnRyeT5UViBPTi9PRkYgLyBQT1dFUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NMRUVQPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BY3RpdmF0ZSBzbGVlcCB0aW1lcjwvZW50cnk+PGVudHJ5PlNMRUVQIC8gU0xFRVAgVElNRVI8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9TVVNQRU5EPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5QdXQgY29tcHV0ZXIgaW50byBzdXNwZW5kIG1vZGU8L2VudHJ5PjxlbnRyeT5TVEFOREJZIC8gU1VTUEVORDwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5XaW5kb3cgY29udHJvbDwvZW1waGFzaXM+PC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9DTEVBUjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RvcCBzcm93ZWFtIGFuZCByZXR1cm4gdG8gZGVmYXVsdCBpbnB1dCB2aWRlby9hdWRpbzwvZW50cnk+PGVudHJ5PkNMRUFSIC8gUkVTRVQgLyBCT1NTIEtFWTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0NZQ0xFV0lORE9XUzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+TWluaW1pemUgd2luZG93cyBhbmQgbW92ZSB0byB0aGUgbmV4dCBvbmU8L2VudHJ5PjxlbnRyeT5BTFQtVEFCIC8gTUlOSU1JWkUgLyBERVNLVE9QPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRkFWT1JJVEVTPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5PcGVuIHRoZSBmYXZvcml0ZXMgc3Jvd2VhbSB3aW5kb3c8L2VudHJ5PjxlbnRyeT5UViBXQUxMIC8gRmF2b3JpdGVzPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTUVOVTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+Q2FsbCBhcHBsaWNhdGlvbiBtZW51PC9lbnRyeT48ZW50cnk+Mk5EIENPTlRST0xTIChVU0E6IE1FTlUpIC8gRFZEL01FTlUgLyBTSE9XL0hJREUgQ1RSTDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX05FVzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3Blbi9DbG9zZSBQaWN0dXJlIGluIFBpY3R1cmU8L2VudHJ5PjxlbnRyeT5QSVA8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9PSzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U2VuZCBhIGNvbmZpcm1hdGlvbiBjb2RlIHRvIGFwcGxpY2F0aW9uPC9lbnRyeT48ZW50cnk+T0sgLyBFTlRFUiAvIFJFVFVSTjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NDUkVFTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U2VsZWN0IHNjcmVlbiBhc3BlY3QgcmF0aW88L2VudHJ5PjxlbnRyeT40OjMgMTY6OSBTRUxFQ1Q8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9aT09NPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5QdXQgZGV2aWNlIGludG8gem9vbS9mdWxsIHNjcmVlbiBtb2RlPC9lbnRyeT48ZW50cnk+Wk9PTSAvIEZVTEwgU0NSRUVOIC8gWk9PTSsgLyBISURFIFBBTk5FTCAvIFNXSVRDSDwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5OYXZpZ2F0aW9uIGtleXM8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRVNDPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5DYW5jZWwgY3VycmVudCBvcGVyYXRpb248L2VudHJ5PjxlbnRyeT5DQU5DRUwgLyBCQUNLPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfSEVMUDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3BlbiBhIEhlbHAgd2luZG93PC9lbnRyeT48ZW50cnk+SEVMUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0hPTUVQQUdFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5OYXZpZ2F0ZSB0byBIb21lcGFnZTwvZW50cnk+PGVudHJ5PkhPTUU8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9JTkZPPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5PcGVuIE9uIFNjcmVlbiBEaXNwbGF5PC9lbnRyeT48ZW50cnk+RElTUExBWSBJTkZPUk1BVElPTiAvIE9TRDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1dXVzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3BlbiB0aGUgZGVmYXVsdCBicm93c2VyPC9lbnRyeT48ZW50cnk+V0VCPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVVA8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlVwIGtleTwvZW50cnk+PGVudHJ5PlVQPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RG93biBrZXk8L2VudHJ5PjxlbnRyeT5ET1dOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTEVGVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+TGVmdCBrZXk8L2VudHJ5PjxlbnRyeT5MRUZUPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUklHSFQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlJpZ2h0IGtleTwvZW50cnk+PGVudHJ5PlJJR0hUPC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPk1pc2NlbGFuZW91cyBrZXlzPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0RPVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UmV0dXJuIGEgZG90PC9lbnRyeT48ZW50cnk+LjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0ZOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgYSBmdW5jdGlvbjwvZW50cnk+PGVudHJ5PkZVTkNUSU9OPC9lbnRyeT48L3Jvdz4KKworPC90Ym9keT4KKzwvdGdyb3VwPgorPC90YWJsZT4KKworPHBhcmE+SXQgc2hvdWxkIGJlIG5vdGljZWQgdGhhdCwgc29tZXRpbWVzLCB0aGVyZSBzb21lIGZ1bmRhbWVudGFsIG1pc3Npbmcga2V5cyBhdCBzb21lIGNoZWFwZXIgSVIncy4gRHVlIHRvIHRoYXQsIGl0IGlzIHJlY29tbWVuZGVkIHRvOjwvcGFyYT4KKworPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJyY19rZXltYXBfbm90ZXMiPgorPHRpdGxlPk5vdGVzPC90aXRsZT4KKzx0Z3JvdXAgY29scz0iMSI+CismY3Mtc3RyOworPHRib2R5IHZhbGlnbj0idG9wIj4KKzxyb3c+Cis8ZW50cnk+T24gc2ltcGxlciBJUidzLCB3aXRob3V0IHNlcGFyYXRlIGNoYW5uZWwga2V5cywgeW91IG5lZWQgdG8gbWFwIFVQIGFzIDxjb25zdGFudD5LRVlfQ0hBTk5FTFVQPC9jb25zdGFudD48L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5PbiBzaW1wbGVyIElSJ3MsIHdpdGhvdXQgc2VwYXJhdGUgY2hhbm5lbCBrZXlzLCB5b3UgbmVlZCB0byBtYXAgRE9XTiBhcyA8Y29uc3RhbnQ+S0VZX0NIQU5ORUxET1dOPC9jb25zdGFudD48L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5PbiBzaW1wbGVyIElSJ3MsIHdpdGhvdXQgc2VwYXJhdGUgdm9sdW1lIGtleXMsIHlvdSBuZWVkIHRvIG1hcCBMRUZUIGFzIDxjb25zdGFudD5LRVlfVk9MVU1FRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT4KKzwvcm93Pjxyb3c+Cis8ZW50cnk+T24gc2ltcGxlciBJUidzLCB3aXRob3V0IHNlcGFyYXRlIHZvbHVtZSBrZXlzLCB5b3UgbmVlZCB0byBtYXAgUklHSFQgYXMgPGNvbnN0YW50PktFWV9WT0xVTUVVUDwvY29uc3RhbnQ+PC9lbnRyeT4KKzwvcm93PgorPC90Ym9keT4KKzwvdGdyb3VwPgorPC90YWJsZT4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iUmVtb3RlX2NvbnRyb2xsZXJzX3RhYmxlX2NoYW5nZSI+Cis8dGl0bGU+Q2hhbmdpbmcgZGVmYXVsdCBSZW1vdGUgQ29udHJvbGxlciBtYXBwaW5nczwvdGl0bGU+Cis8cGFyYT5UaGUgZXZlbnQgaW50ZXJmYWNlIHByb3ZpZGVzIHR3byBpb2N0bHMgdG8gYmUgdXNlZCBhZ2FpbnN0Cit0aGUgL2Rldi9pbnB1dC9ldmVudCBkZXZpY2UsIHRvIGFsbG93IGNoYW5naW5nIHRoZSBkZWZhdWx0CitrZXltYXBwaW5nLjwvcGFyYT4KKworPHBhcmE+VGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyBob3cgdG8gcmVwbGFjZSB0aGUga2V5bWFwIHRhYmxlcy48L3BhcmE+Cismc3ViLWtleXRhYmxlLWM7Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3Y0bDIueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzdiNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbApAQCAtMCwwICsxLDQ3OSBAQAorIDxwYXJ0aW5mbz4KKyAgICA8YXV0aG9yZ3JvdXA+CisgICAgICA8YXV0aG9yPgorCTxmaXJzdG5hbWU+TWljaGFlbDwvZmlyc3RuYW1lPgorCTxzdXJuYW1lPlNjaGltZWs8L3N1cm5hbWU+CisJPG90aGVybmFtZSByb2xlPSJtaSI+SDwvb3RoZXJuYW1lPgorCTxhZmZpbGlhdGlvbj4KKwkgIDxhZGRyZXNzPgorCSAgICA8ZW1haWw+bXNjaGltZWtAZ214LmF0PC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5CaWxsPC9maXJzdG5hbWU+CisJPHN1cm5hbWU+RGlya3M8L3N1cm5hbWU+CisJPCEtLSBDb21tZW50ZWQgdW50aWwgQmlsbCBvcHRzIGluIHRvIGJlIHNwYW1tZWQuCisJPGFmZmlsaWF0aW9uPgorCSAgPGFkZHJlc3M+CisJICAgIDxlbWFpbD5iaWxsQHRoZWRpcmtzLm9yZzwvZW1haWw+CisJICA8L2FkZHJlc3M+CisJPC9hZmZpbGlhdGlvbj4gLS0+CisJPGNvbnRyaWI+T3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBWNEwyIEFQSSBhbmQKK2RvY3VtZW50YXRpb24uPC9jb250cmliPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5IYW5zPC9maXJzdG5hbWU+CisJPHN1cm5hbWU+VmVya3VpbDwvc3VybmFtZT4KKwk8Y29udHJpYj5EZXNpZ25lZCBhbmQgZG9jdW1lbnRlZCB0aGUgVklESU9DX0xPR19TVEFUVVMgaW9jdGwsCit0aGUgZXh0ZW5kZWQgY29udHJvbCBpb2N0bHMgYW5kIG1ham9yIHBhcnRzIG9mIHRoZSBzbGljZWQgVkJJCitBUEkuPC9jb250cmliPgorCTxhZmZpbGlhdGlvbj4KKwkgIDxhZGRyZXNzPgorCSAgICA8ZW1haWw+aHZlcmt1aWxAeHM0YWxsLm5sPC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5NYXJ0aW48L2ZpcnN0bmFtZT4KKwk8c3VybmFtZT5SdWJsaTwvc3VybmFtZT4KKwk8IS0tCisJPGFmZmlsaWF0aW9uPgorCSAgPGFkZHJlc3M+CisJICAgIDxlbWFpbD5tYXJ0aW5fcnVibGlAbG9naXRlY2guY29tPC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPiAtLT4KKwk8Y29udHJpYj5EZXNpZ25lZCBhbmQgZG9jdW1lbnRlZCB0aGUgVklESU9DX0VOVU1fRlJBTUVTSVpFUworYW5kIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIGlvY3Rscy48L2NvbnRyaWI+CisgICAgICA8L2F1dGhvcj4KKworICAgICAgPGF1dGhvcj4KKwk8Zmlyc3RuYW1lPkFuZHk8L2ZpcnN0bmFtZT4KKwk8c3VybmFtZT5XYWxsczwvc3VybmFtZT4KKwk8Y29udHJpYj5Eb2N1bWVudGVkIHRoZSBmaWVsZGVkIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWCitNUEVHIHN0cmVhbSBlbWJlZGRlZCwgc2xpY2VkIFZCSSBkYXRhIGZvcm1hdCBpbiB0aGlzIHNwZWNpZmljYXRpb24uCis8L2NvbnRyaWI+CisJPGFmZmlsaWF0aW9uPgorCSAgPGFkZHJlc3M+CisJICAgIDxlbWFpbD5hd2FsbHNAcmFkaXgubmV0PC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5NYXVybzwvZmlyc3RuYW1lPgorCTxzdXJuYW1lPkNhcnZhbGhvIENoZWhhYjwvc3VybmFtZT4KKwk8Y29udHJpYj5Eb2N1bWVudGVkIGxpYnY0bCwgZGVzaWduZWQgYW5kIGFkZGVkIHY0bDJncmFiIGV4YW1wbGUsCitSZW1vdGUgQ29udHJvbGxlciBjaGFwdGVyLjwvY29udHJpYj4KKwk8YWZmaWxpYXRpb24+CisJICA8YWRkcmVzcz4KKwkgICAgPGVtYWlsPm1jaGVoYWJAcmVkaGF0LmNvbTwvZW1haWw+CisJICA8L2FkZHJlc3M+CisJPC9hZmZpbGlhdGlvbj4KKyAgICAgIDwvYXV0aG9yPgorICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+MTk5OTwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDA8L3llYXI+CisgICAgICA8eWVhcj4yMDAxPC95ZWFyPgorICAgICAgPHllYXI+MjAwMjwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDM8L3llYXI+CisgICAgICA8eWVhcj4yMDA0PC95ZWFyPgorICAgICAgPHllYXI+MjAwNTwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDY8L3llYXI+CisgICAgICA8eWVhcj4yMDA3PC95ZWFyPgorICAgICAgPHllYXI+MjAwODwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDk8L3llYXI+CisgICAgICA8aG9sZGVyPkJpbGwgRGlya3MsIE1pY2hhZWwgSC4gU2NoaW1laywgSGFucyBWZXJrdWlsLCBNYXJ0aW4KK1J1YmxpLCBBbmR5IFdhbGxzLCBNYXVybyBDYXJ2YWxobyBDaGVoYWI8L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKyAgICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+RXhjZXB0IHdoZW4gZXhwbGljaXRseSBzdGF0ZWQgYXMgR1BMLCBwcm9ncmFtbWluZyBleGFtcGxlcyB3aXRoaW4KKwkgICAgdGhpcyBwYXJ0IGNhbiBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9ucy48L3BhcmE+CisgICAgPC9sZWdhbG5vdGljZT4KKyAgICA8cmV2aGlzdG9yeT4KKyAgICAgIDwhLS0gUHV0IGRvY3VtZW50IHJldmlzaW9ucyBoZXJlLCBuZXdlc3QgZmlyc3QuIC0tPgorICAgICAgPCEtLSBBUEkgcmV2aXNpb25zIChjaGFuZ2VzIGFuZCBhZGRpdGlvbnMgb2YgZGVmaW5lcywgZW51bXMsCitzdHJ1Y3RzLCBpb2N0bHMpIG11c3QgYmUgbm90ZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGhpc3RvcnkgY2hhcHRlcgorKGNvbXBhdC5zZ21sKSwgYWxvbmcgd2l0aCB0aGUgcG9zc2libGUgaW1wYWN0IG9uIGV4aXN0aW5nIGRyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMuIC0tPgorCisgICAgICA8cmV2aXNpb24+CisJPHJldm51bWJlcj4yLjYuMzI8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA5LTA4LTMxPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5tY2M8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Tm93LCByZXZpc2lvbnMgd2lsbCBtYXRjaCB0aGUga2VybmVsIHZlcnNpb24gd2hlcmUKK3RoZSBWNEwyIEFQSSBjaGFuZ2VzIHdpbGwgYmUgdXNlZCBieSB0aGUgTGludXggS2VybmVsLgorQWxzbyBhZGRlZCBSZW1vdGUgQ29udHJvbGxlciBjaGFwdGVyLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yOTwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDktMDgtMjY8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmV2PC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHN0cmluZyBjb250cm9scyBhbmQgZm9yIEZNIFRyYW5zbWl0dGVyIGNvbnRyb2xzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yODwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDktMDgtMjY8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmdsPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIgZG9jdW1lbnRhdGlvbi48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjc8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA5LTA4LTE1PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5tY2M8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+QWRkZWQgbGlidjRsIGFuZCBSZW1vdGUgQ29udHJvbGxlciBkb2N1bWVudGF0aW9uOworYWRkZWQgdjRsMmdyYWIgYW5kIGtleXRhYmxlIGFwcGxpY2F0aW9uIGV4YW1wbGVzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yNjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDktMDctMjM8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmh2PC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkZpbmFsaXplZCB0aGUgUkRTIGNhcHR1cmUgQVBJLiBBZGRlZCBtb2R1bGF0b3IgYW5kIFJEUyBlbmNvZGVyCitjYXBhYmlsaXRpZXMuIEFkZGVkIHN1cHBvcnQgZm9yIHN0cmluZyBjb250cm9scy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjU8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA5LTAxLTE4PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5odjwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBwaXhlbCBmb3JtYXRzIFZZVVksIE5WMTYgYW5kIE5WNjEsIGFuZCBjaGFuZ2VkCit0aGUgZGVidWcgaW9jdGxzIFZJRElPQ19EQkdfRy9TX1JFR0lTVEVSIGFuZCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVC4KK0FkZGVkIGNhbWVyYSBjb250cm9scyBWNEwyX0NJRF9aT09NX0FCU09MVVRFLCBWNEwyX0NJRF9aT09NX1JFTEFUSVZFLAorVjRMMl9DSURfWk9PTV9DT05USU5VT1VTIGFuZCBWNEwyX0NJRF9QUklWQUNZLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yNDwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDgtMDMtMDQ8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBwaXhlbCBmb3JtYXRzIFkxNiBhbmQgU0JHR1IxNiwgbmV3IGNvbnRyb2xzCithbmQgYSBjYW1lcmEgY29udHJvbHMgY2xhc3MuIFJlbW92ZWQgVklESU9DX0cvU19NUEVHQ09NUC48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjM8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA3LTA4LTMwPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Rml4ZWQgYSB0eXBvIGluIFZJRElPQ19EQkdfRy9TX1JFR0lTVEVSLgorQ2xhcmlmaWVkIHRoZSBieXRlIG9yZGVyIG9mIHBhY2tlZCBwaXhlbCBmb3JtYXRzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yMjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDctMDgtMjk8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCB0aGUgVmlkZW8gT3V0cHV0IE92ZXJsYXkgaW50ZXJmYWNlLCBuZXcgTVBFRworY29udHJvbHMsIFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiBhbmQgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JULAorVklESU9DX0RCR19HL1NfUkVHSVNURVIsIFZJRElPQ18oVFJZXylFTkNPREVSX0NNRCwKK1ZJRElPQ19HX0NISVBfSURFTlQsIFZJRElPQ19HX0VOQ19JTkRFWCwgbmV3IHBpeGVsIGZvcm1hdHMuCitDbGFyaWZpY2F0aW9ucyBpbiB0aGUgY3JvcHBpbmcgY2hhcHRlciwgYWJvdXQgUkdCIHBpeGVsIGZvcm1hdHMsIHRoZQorbW1hcCgpLCBwb2xsKCksIHNlbGVjdCgpLCByZWFkKCkgYW5kIHdyaXRlKCkgZnVuY3Rpb25zLiBUeXBvZ3JhcGhpY2FsCitmaXhlcy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjE8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTEyLTE5PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Rml4ZWQgYSBsaW5rIGluIHRoZSBWSURJT0NfR19FWFRfQ1RSTFMgc2VjdGlvbi48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjA8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTExLTI0PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Q2xhcmlmaWVkIHRoZSBwdXJwb3NlIG9mIHRoZSBhdWRpb3NldCBmaWVsZCBpbgorc3RydWN0IHY0bDJfaW5wdXQgYW5kIHY0bDJfb3V0cHV0LjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4xOTwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDYtMTAtMTk8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5Eb2N1bWVudGVkIFY0TDJfUElYX0ZNVF9SR0I0NDQuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CisJPHJldm51bWJlcj4wLjE4PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNi0xMC0xODwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIHRoZSBkZXNjcmlwdGlvbiBvZiBleHRlbmRlZCBjb250cm9scyBieSBIYW5zCitWZXJrdWlsLiBMaW5rZWQgVjRMMl9QSVhfRk1UX01QRUcgdG8gVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRS48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTc8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTEwLTEyPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Q29ycmVjdGVkIFY0TDJfUElYX0ZNVF9ITTEyIGRlc2NyaXB0aW9uLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4xNjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDYtMTAtMDg8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5WSURJT0NfRU5VTV9GUkFNRVNJWkVTIGFuZAorVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgYXJlIG5vdyBwYXJ0IG9mIHRoZSBBUEkuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CisJPHJldm51bWJlcj4wLjE1PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNi0wOS0yMzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkNsZWFuZWQgdXAgdGhlIGJpYmxpb2dyYXBoeSwgYWRkZWQgQlQuNjUzIGFuZAorQlQuMTExOS4gY2FwdHVyZS5jL3N0YXJ0X2NhcHR1cmluZygpIGZvciB1c2VyIHBvaW50ZXIgSS9PIGRpZCBub3QKK2luaXRpYWxpemUgdGhlIGJ1ZmZlciBpbmRleC4gRG9jdW1lbnRlZCB0aGUgVjRMIE1QRUcgYW5kIE1KUEVHCitWSURfVFlQRXMgYW5kIFY0TDJfUElYX0ZNVF9TQkdHUjguIFVwZGF0ZWQgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgcGl4ZWwKK2Zvcm1hdHMuIFNlZSB0aGUgaGlzdG9yeSBjaGFwdGVyIGZvciBBUEkgY2hhbmdlcy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTQ8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTA5LTE0PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5tcjwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBWSURJT0NfRU5VTV9GUkFNRVNJWkVTIGFuZAorVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgcHJvcG9zYWwgZm9yIGZyYW1lIGZvcm1hdCBlbnVtZXJhdGlvbiBvZgorZGlnaXRhbCBkZXZpY2VzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4xMzwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDYtMDQtMDc8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5Db3JyZWN0ZWQgdGhlIGRlc2NyaXB0aW9uIG9mIHN0cnVjdCB2NGwyX3dpbmRvdworY2xpcHMuIE5ldyBWNEwyX1NURF8gYW5kIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMgorZGVmaW5lcy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTI8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTAyLTAzPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Q29ycmVjdGVkIHRoZSBkZXNjcmlwdGlvbiBvZiBzdHJ1Y3QKK3Y0bDJfY2FwdHVyZXBhcm0gYW5kIHY0bDJfb3V0cHV0cGFybS48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTE8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTAxLTI3PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+SW1wcm92ZWQgdGhlIGRlc2NyaXB0aW9uIG9mIHN0cnVjdAordjRsMl90dW5lci48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTA8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTAxLTEwPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+VklESU9DX0dfSU5QVVQgYW5kIFZJRElPQ19TX1BBUk0KK2NsYXJpZmljYXRpb25zLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC45PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNS0xMS0yNzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkltcHJvdmVkIHRoZSA1MjUgbGluZSBudW1iZXJpbmcgZGlhZ3JhbS4gSGFucworVmVya3VpbCBhbmQgSSByZXdyb3RlIHRoZSBzbGljZWQgVkJJIHNlY3Rpb24uIEhlIGFsc28gY29udHJpYnV0ZWQgYQorVklESU9DX0xPR19TVEFUVVMgcGFnZS4gRml4ZWQgVklESU9DX1NfU1REIGNhbGwgaW4gdGhlIHZpZGVvIHN0YW5kYXJkCitzZWxlY3Rpb24gZXhhbXBsZS4gVmFyaW91cyB1cGRhdGVzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC44PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNC0xMC0wNDwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPlNvbWVob3cgYSBwaWVjZSBvZiBqdW5rIHNsaXBwZWQgaW50byB0aGUgY2FwdHVyZQorZXhhbXBsZSwgcmVtb3ZlZC48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuNzwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDQtMDktMTk8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5GaXhlZCB2aWRlbyBzdGFuZGFyZCBzZWxlY3Rpb24sIGNvbnRyb2wKK2VudW1lcmF0aW9uLCBkb3duc2NhbGluZyBhbmQgYXNwZWN0IGV4YW1wbGUuIEFkZGVkIHJlYWQgYW5kIHVzZXIKK3BvaW50ZXIgaS9vIHRvIHZpZGVvIGNhcHR1cmUgZXhhbXBsZS48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuNjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDQtMDgtMDE8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz52NGwyX2J1ZmZlciBjaGFuZ2VzLCBhZGRlZCB2aWRlbyBjYXB0dXJlIGV4YW1wbGUsCit2YXJpb3VzIGNvcnJlY3Rpb25zLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC41PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwMy0xMS0wNTwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPlBpeGVsIGZvcm1hdCBlcnJhdHVtLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC40PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwMy0wOS0xNzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkNvcnJlY3RlZCBzb3VyY2UgYW5kIE1ha2VmaWxlIHRvIGdlbmVyYXRlIGEgUERGLgorU0dNTCBmaXhlcy4gQWRkZWQgbGF0ZXN0IEFQSSBjaGFuZ2VzLiBDbG9zZWQgZ2FwcyBpbiB0aGUgaGlzdG9yeQorY2hhcHRlci48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMzwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDMtMDItMDU8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5Bbm90aGVyIGRyYWZ0LCBtb3JlIGNvcnJlY3Rpb25zLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yPC9yZXZudW1iZXI+CisJPGRhdGU+MjAwMy0wMS0xNTwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPlNlY29uZCBkcmFmdCwgd2l0aCBjb3JyZWN0aW9ucyBwb2ludGVkIG91dCBieSBHZXJkCitLbm9yci48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDItMTItMDE8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5GaXJzdCBkcmFmdCwgYmFzZWQgb24gZG9jdW1lbnRhdGlvbiBieSBCaWxsIERpcmtzCithbmQgZGlzY3Vzc2lvbnMgb24gdGhlIFY0TCBtYWlsaW5nIGxpc3QuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorICAgIDwvcmV2aGlzdG9yeT4KKzwvcGFydGluZm8+CisKKzx0aXRsZT5WaWRlbyBmb3IgTGludXggVHdvIEFQSSBTcGVjaWZpY2F0aW9uPC90aXRsZT4KKyA8c3VidGl0bGU+UmV2aXNpb24gMi42LjMyPC9zdWJ0aXRsZT4KKworICA8Y2hhcHRlciBpZD0iY29tbW9uIj4KKyAgICAmc3ViLWNvbW1vbjsKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwaXhmbXQiPgorICAgICZzdWItcGl4Zm10OworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImlvIj4KKyAgICAmc3ViLWlvOworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRldmljZXMiPgorICAgIDx0aXRsZT5JbnRlcmZhY2VzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJjYXB0dXJlIj4gJnN1Yi1kZXYtY2FwdHVyZTsgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJvdmVybGF5Ij4gJnN1Yi1kZXYtb3ZlcmxheTsgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJvdXRwdXQiPiAmc3ViLWRldi1vdXRwdXQ7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0ib3NkIj4gJnN1Yi1kZXYtb3NkOyA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gaWQ9ImNvZGVjIj4gJnN1Yi1kZXYtY29kZWM7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0iZWZmZWN0Ij4gJnN1Yi1kZXYtZWZmZWN0OyA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gaWQ9InJhdy12YmkiPiAmc3ViLWRldi1yYXctdmJpOyA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gaWQ9InNsaWNlZCI+ICZzdWItZGV2LXNsaWNlZC12Ymk7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0idHR4Ij4gJnN1Yi1kZXYtdGVsZXRleHQ7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0icmFkaW8iPiAmc3ViLWRldi1yYWRpbzsgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJyZHMiPiAmc3ViLWRldi1yZHM7IDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkcml2ZXIiPgorCSAgJnN1Yi1kcml2ZXI7CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibGlidjRsIj4KKwkgICZzdWItbGlidjRsOworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImNvbXBhdCI+CisJICAmc3ViLWNvbXBhdDsKKyAgPC9jaGFwdGVyPgorCisgIDxhcHBlbmRpeCBpZD0idXNlci1mdW5jIj4KKyAgPHRpdGxlPkZ1bmN0aW9uIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICA8IS0tIEtlZXAgdGhpcyBhbHBoYWJldGljYWxseSBzb3J0ZWQuIC0tPgorCisgICAgJnN1Yi1jbG9zZTsKKyAgICAmc3ViLWlvY3RsOworICAgIDwhLS0gQWxsIGlvY3RscyBnbyBoZXJlLiAtLT4KKyAgICAmc3ViLWNyb3BjYXA7CisgICAgJnN1Yi1kYmctZy1jaGlwLWlkZW50OworICAgICZzdWItZGJnLWctcmVnaXN0ZXI7CisgICAgJnN1Yi1lbmNvZGVyLWNtZDsKKyAgICAmc3ViLWVudW1hdWRpbzsKKyAgICAmc3ViLWVudW1hdWRpb291dDsKKyAgICAmc3ViLWVudW0tZm10OworICAgICZzdWItZW51bS1mcmFtZXNpemVzOworICAgICZzdWItZW51bS1mcmFtZWludGVydmFsczsKKyAgICAmc3ViLWVudW1pbnB1dDsKKyAgICAmc3ViLWVudW1vdXRwdXQ7CisgICAgJnN1Yi1lbnVtc3RkOworICAgICZzdWItZy1hdWRpbzsKKyAgICAmc3ViLWctYXVkaW9vdXQ7CisgICAgJnN1Yi1nLWNyb3A7CisgICAgJnN1Yi1nLWN0cmw7CisgICAgJnN1Yi1nLWVuYy1pbmRleDsKKyAgICAmc3ViLWctZXh0LWN0cmxzOworICAgICZzdWItZy1mYnVmOworICAgICZzdWItZy1mbXQ7CisgICAgJnN1Yi1nLWZyZXF1ZW5jeTsKKyAgICAmc3ViLWctaW5wdXQ7CisgICAgJnN1Yi1nLWpwZWdjb21wOworICAgICZzdWItZy1tb2R1bGF0b3I7CisgICAgJnN1Yi1nLW91dHB1dDsKKyAgICAmc3ViLWctcGFybTsKKyAgICAmc3ViLWctcHJpb3JpdHk7CisgICAgJnN1Yi1nLXNsaWNlZC12YmktY2FwOworICAgICZzdWItZy1zdGQ7CisgICAgJnN1Yi1nLXR1bmVyOworICAgICZzdWItbG9nLXN0YXR1czsKKyAgICAmc3ViLW92ZXJsYXk7CisgICAgJnN1Yi1xYnVmOworICAgICZzdWItcXVlcnlidWY7CisgICAgJnN1Yi1xdWVyeWNhcDsKKyAgICAmc3ViLXF1ZXJ5Y3RybDsKKyAgICAmc3ViLXF1ZXJ5c3RkOworICAgICZzdWItcmVxYnVmczsKKyAgICAmc3ViLXMtaHctZnJlcS1zZWVrOworICAgICZzdWItc3RyZWFtb247CisgICAgPCEtLSBFbmQgb2YgaW9jdGxzLiAtLT4KKyAgICAmc3ViLW1tYXA7CisgICAgJnN1Yi1tdW5tYXA7CisgICAgJnN1Yi1vcGVuOworICAgICZzdWItcG9sbDsKKyAgICAmc3ViLXJlYWQ7CisgICAgJnN1Yi1zZWxlY3Q7CisgICAgJnN1Yi13cml0ZTsKKyAgPC9hcHBlbmRpeD4KKworICA8YXBwZW5kaXggaWQ9InZpZGVvZGV2Ij4KKyAgICA8dGl0bGU+VmlkZW8gRm9yIExpbnV4IFR3byBIZWFkZXIgRmlsZTwvdGl0bGU+CisgICAgJnN1Yi12aWRlb2RldjItaDsKKyAgPC9hcHBlbmRpeD4KKworICA8YXBwZW5kaXggaWQ9ImNhcHR1cmUtZXhhbXBsZSI+CisgICAgPHRpdGxlPlZpZGVvIENhcHR1cmUgRXhhbXBsZTwvdGl0bGU+CisgICAgJnN1Yi1jYXB0dXJlLWM7CisgIDwvYXBwZW5kaXg+CisKKyAgPGFwcGVuZGl4IGlkPSJ2NGwyZ3JhYi1leGFtcGxlIj4KKyAgICA8dGl0bGU+VmlkZW8gR3JhYmJlciBleGFtcGxlIHVzaW5nIGxpYnY0bDwvdGl0bGU+CisgICAgPHBhcmE+VGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyBob3cgdG8gZ3JhYiBWNEwyIGltYWdlcyBpbiBwcG0gZm9ybWF0IGJ5Cit1c2luZyBsaWJ2NGwgaGFuZGxlcnMuIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGlzIGdyYWJiZXIgY2FuIHBvdGVudGlhbGx5IHdvcmsKK3dpdGggYW55IFY0TDIgZHJpdmVyLjwvcGFyYT4KKyAgICAmc3ViLXY0bDJncmFiLWM7CisgIDwvYXBwZW5kaXg+CisKKyAgJnN1Yi1tZWRpYS1pbmRpY2VzOworCisgICZzdWItYmlibGlvOworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3Y0bDJncmFiLmMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyZ3JhYi5jLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQxMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyZ3JhYi5jLnhtbApAQCAtMCwwICsxLDE2NCBAQAorPHByb2dyYW1saXN0aW5nPgorLyogVjRMMiB2aWRlbyBwaWN0dXJlIGdyYWJiZXIKKyAgIENvcHlyaWdodCAoQykgMjAwOSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgJmx0O21jaGVoYWJAaW5mcmFkZWFkLm9yZyZndDsKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyNpbmNsdWRlICZsdDtmY250bC5oJmd0OworI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OworI2luY2x1ZGUgJmx0O2xpbnV4L3ZpZGVvZGV2Mi5oJmd0OworI2luY2x1ZGUgIi4uL2xpYnY0bC9pbmNsdWRlL2xpYnY0bDIuaCIKKworI2RlZmluZSBDTEVBUih4KSBtZW1zZXQoJmFtcDsoeCksIDAsIHNpemVvZih4KSkKKworc3RydWN0IGJ1ZmZlciB7CisgICAgICAgIHZvaWQgICAqc3RhcnQ7CisgICAgICAgIHNpemVfdCBsZW5ndGg7Cit9OworCitzdGF0aWMgdm9pZCB4aW9jdGwoaW50IGZoLCBpbnQgcmVxdWVzdCwgdm9pZCAqYXJnKQoreworICAgICAgICBpbnQgcjsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgciA9IHY0bDJfaW9jdGwoZmgsIHJlcXVlc3QsIGFyZyk7CisgICAgICAgIH0gd2hpbGUgKHIgPT0gLTEgJmFtcDsmYW1wOyAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpOworCisgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciAlZCwgJXNcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZvcm1hdCI+djRsMl9mb3JtYXQ8L2xpbms+ICAgICAgICAgICAgICBmbXQ7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+ICAgICAgICAgICAgICBidWY7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj52NGwyX3JlcXVlc3RidWZmZXJzPC9saW5rPiAgICAgIHJlcTsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgICAgICAgICAgICAgdHlwZTsKKyAgICAgICAgZmRfc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICBmZHM7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsICAgICAgICAgICAgICAgICAgdHY7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgZmQgPSAtMTsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBpLCBuX2J1ZmZlcnM7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRldl9uYW1lID0gIi9kZXYvdmlkZW8wIjsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfbmFtZVsyNTZdOworICAgICAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmb3V0OworICAgICAgICBzdHJ1Y3QgYnVmZmVyICAgICAgICAgICAgICAgICAgICpidWZmZXJzOworCisgICAgICAgIGZkID0gdjRsMl9vcGVuKGRldl9uYW1lLCBPX1JEV1IgfCBPX05PTkJMT0NLLCAwKTsKKyAgICAgICAgaWYgKGZkICZsdDsgMCkgeworICAgICAgICAgICAgICAgIHBlcnJvcigiQ2Fubm90IG9wZW4gZGV2aWNlIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgQ0xFQVIoZm10KTsKKyAgICAgICAgZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIGZtdC5mbXQucGl4LndpZHRoICAgICAgID0gNjQwOworICAgICAgICBmbXQuZm10LnBpeC5oZWlnaHQgICAgICA9IDQ4MDsKKyAgICAgICAgZm10LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfUkdCMjQ7CisgICAgICAgIGZtdC5mbXQucGl4LmZpZWxkICAgICAgID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworICAgICAgICB4aW9jdGwoZmQsIFZJRElPQ19TX0ZNVCwgJmFtcDtmbXQpOworICAgICAgICBpZiAoZm10LmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1JHQjI0KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJMaWJ2NGwgZGlkbid0IGFjY2VwdCBSR0IyNCBmb3JtYXQuIENhbid0IHByb2NlZWQuXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChmbXQuZm10LnBpeC53aWR0aCAhPSA2NDApIHx8IChmbXQuZm10LnBpeC5oZWlnaHQgIT0gNDgwKSkKKyAgICAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IGRyaXZlciBpcyBzZW5kaW5nIGltYWdlIGF0ICVkeCVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZm10LmZtdC5waXgud2lkdGgsIGZtdC5mbXQucGl4LmhlaWdodCk7CisKKyAgICAgICAgQ0xFQVIocmVxKTsKKyAgICAgICAgcmVxLmNvdW50ID0gMjsKKyAgICAgICAgcmVxLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIHJlcS5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworICAgICAgICB4aW9jdGwoZmQsIFZJRElPQ19SRVFCVUZTLCAmYW1wO3JlcSk7CisKKyAgICAgICAgYnVmZmVycyA9IGNhbGxvYyhyZXEuY291bnQsIHNpemVvZigqYnVmZmVycykpOworICAgICAgICBmb3IgKG5fYnVmZmVycyA9IDA7IG5fYnVmZmVycyAmbHQ7IHJlcS5jb3VudDsgKytuX2J1ZmZlcnMpIHsKKyAgICAgICAgICAgICAgICBDTEVBUihidWYpOworCisgICAgICAgICAgICAgICAgYnVmLnR5cGUgICAgICAgID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgICAgICA9IFY0TDJfTUVNT1JZX01NQVA7CisgICAgICAgICAgICAgICAgYnVmLmluZGV4ICAgICAgID0gbl9idWZmZXJzOworCisgICAgICAgICAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfUVVFUllCVUYsICZhbXA7YnVmKTsKKworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbbl9idWZmZXJzXS5sZW5ndGggPSBidWYubGVuZ3RoOworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbbl9idWZmZXJzXS5zdGFydCA9IHY0bDJfbW1hcChOVUxMLCBidWYubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLCBidWYubS5vZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKE1BUF9GQUlMRUQgPT0gYnVmZmVyc1tuX2J1ZmZlcnNdLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoIm1tYXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgbl9idWZmZXJzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBDTEVBUihidWYpOworICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworICAgICAgICAgICAgICAgIGJ1Zi5pbmRleCA9IGk7CisgICAgICAgICAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfUUJVRiwgJmFtcDtidWYpOworICAgICAgICB9CisgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKyAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfU1RSRUFNT04sICZhbXA7dHlwZSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyAyMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgRkRfWkVSTygmYW1wO2Zkcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBGRF9TRVQoZmQsICZhbXA7ZmRzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHR2LnR2X3NlYyA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB0di50dl91c2VjID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNlbGVjdChmZCArIDEsICZhbXA7ZmRzLCBOVUxMLCBOVUxMLCAmYW1wO3R2KTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICgociA9PSAtMSAmYW1wOyZhbXA7IChlcnJubyA9IEVJTlRSKSkpOworICAgICAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInNlbGVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm5vOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENMRUFSKGJ1Zik7CisgICAgICAgICAgICAgICAgYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisgICAgICAgICAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfRFFCVUYsICZhbXA7YnVmKTsKKworICAgICAgICAgICAgICAgIHNwcmludGYob3V0X25hbWUsICJvdXQlMDNkLnBwbSIsIGkpOworICAgICAgICAgICAgICAgIGZvdXQgPSBmb3BlbihvdXRfbmFtZSwgInciKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZvdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigiQ2Fubm90IG9wZW4gaW1hZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnByaW50Zihmb3V0LCAiUDZcbiVkICVkIDI1NVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdC5mbXQucGl4LndpZHRoLCBmbXQuZm10LnBpeC5oZWlnaHQpOworICAgICAgICAgICAgICAgIGZ3cml0ZShidWZmZXJzW2J1Zi5pbmRleF0uc3RhcnQsIGJ1Zi5ieXRlc3VzZWQsIDEsIGZvdXQpOworICAgICAgICAgICAgICAgIGZjbG9zZShmb3V0KTsKKworICAgICAgICAgICAgICAgIHhpb2N0bChmZCwgVklESU9DX1FCVUYsICZhbXA7YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9GRiwgJmFtcDt0eXBlKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSAmbHQ7IG5fYnVmZmVyczsgKytpKQorICAgICAgICAgICAgICAgIHY0bDJfbXVubWFwKGJ1ZmZlcnNbaV0uc3RhcnQsIGJ1ZmZlcnNbaV0ubGVuZ3RoKTsKKyAgICAgICAgdjRsMl9jbG9zZShmZCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfNTI1LmdpZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4MGI2OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfNTI1LnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3MmMyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV81MjUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzYyNS5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTMyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzYyNS5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTIzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLmdpZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDI0MzRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfaHN5bmMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBiNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfaHN5bmMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRlb2RldjIuaC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwMDIwNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sCkBAIC0wLDAgKzEsMTY0MCBAQAorPHByb2dyYW1saXN0aW5nPgorLyoKKyAqICBWaWRlbyBmb3IgTGludXggVHdvIGhlYWRlciBmaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDA3IHRoZSBjb250cmlidXRvcnMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHJlZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogIEJTRCBsaWNlbnNlIGFzIHN0YXRlZCBiZWxvdzoKKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgICBkaXN0cmlidXRpb24uCisgKiAgMy4gVGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiAgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICAgICAgSGVhZGVyIGZpbGUgZm9yIHY0bCBvciBWNEwyIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucworICogd2l0aCBwdWJsaWMgQVBJLgorICogQWxsIGtlcm5lbC1zcGVjaWZpYyBzdHVmZiB3ZXJlIG1vdmVkIHRvIG1lZGlhL3Y0bDItZGV2LmgsIHNvCisgKiBubyAjaWYgX19LRVJORUwgdGVzdHMgYXJlIGFsbG93ZWQgaGVyZQorICoKKyAqICAgICAgU2VlIGh0dHA6Ly9saW51eHR2Lm9yZyBmb3IgbW9yZSBpbmZvCisgKgorICogICAgICBBdXRob3I6IEJpbGwgRGlya3MgJmx0O2JpbGxAdGhlZGlya3Mub3JnJmd0OworICogICAgICAgICAgICAgIEp1c3RpbiBTY2hvZW1hbgorICogICAgICAgICAgICAgIEhhbnMgVmVya3VpbCAmbHQ7aHZlcmt1aWxAeHM0YWxsLm5sJmd0OworICogICAgICAgICAgICAgIGV0IGFsLgorICovCisjaWZuZGVmIF9fTElOVVhfVklERU9ERVYyX0gKKyNkZWZpbmUgX19MSU5VWF9WSURFT0RFVjJfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWUuaCZndDsgICAgIC8qIG5lZWQgc3RydWN0IHRpbWV2YWwgKi8KKyNlbHNlCisjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKKyNlbmRpZgorI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bGludXgvaW9jdGwuaCZndDsKKyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OworCisvKgorICogQ29tbW9uIHN0dWZmIGZvciBib3RoIFY0TDEgYW5kIFY0TDIKKyAqIE1vdmVkIGZyb20gdmlkZW9kZXYuaAorICovCisjZGVmaW5lIFZJREVPX01BWF9GUkFNRSAgICAgICAgICAgICAgIDMyCisKKyNpZm5kZWYgX19LRVJORUxfXworCisvKiBUaGVzZSBkZWZpbmVzIGFyZSBWNEwxIHNwZWNpZmljIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCB0aGUgVjRMMiBBUEkhCisgICBUaGV5IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoaXMgaGVhZGVyIGluIHRoZSBmdXR1cmUuICovCisKKyNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRSAgICAgICAgMSAgICAgICAvKiBDYW4gY2FwdHVyZSAqLworI2RlZmluZSBWSURfVFlQRV9UVU5FUiAgICAgICAgICAyICAgICAgIC8qIENhbiB0dW5lICovCisjZGVmaW5lIFZJRF9UWVBFX1RFTEVURVhUICAgICAgIDQgICAgICAgLyogRG9lcyB0ZWxldGV4dCAqLworI2RlZmluZSBWSURfVFlQRV9PVkVSTEFZICAgICAgICA4ICAgICAgIC8qIE92ZXJsYXkgb250byBmcmFtZSBidWZmZXIgKi8KKyNkZWZpbmUgVklEX1RZUEVfQ0hST01BS0VZICAgICAgMTYgICAgICAvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLworI2RlZmluZSBWSURfVFlQRV9DTElQUElORyAgICAgICAzMiAgICAgIC8qIENhbiBjbGlwICovCisjZGVmaW5lIFZJRF9UWVBFX0ZSQU1FUkFNICAgICAgIDY0ICAgICAgLyogVXNlcyB0aGUgZnJhbWUgYnVmZmVyIG1lbW9yeSAqLworI2RlZmluZSBWSURfVFlQRV9TQ0FMRVMgICAgICAgICAxMjggICAgIC8qIFNjYWxhYmxlICovCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUgICAgIDI1NiAgICAgLyogTW9ub2Nocm9tZSBvbmx5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NVQkNBUFRVUkUgICAgIDUxMiAgICAgLyogQ2FuIGNhcHR1cmUgc3ViYXJlYXMgb2YgdGhlIGltYWdlICovCisjZGVmaW5lIFZJRF9UWVBFX01QRUdfREVDT0RFUiAgIDEwMjQgICAgLyogQ2FuIGRlY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSICAgMjA0OCAgICAvKiBDYW4gZW5jb2RlIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19ERUNPREVSICA0MDk2ICAgIC8qIENhbiBkZWNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSICA4MTkyICAgIC8qIENhbiBlbmNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2VuZGlmCisKKy8qCisgKiAgICAgIE0gSSBTIEMgRSBMIEwgQSBOIEUgTyBVIFMKKyAqLworCisvKiAgRm91ci1jaGFyYWN0ZXItY29kZSAoRk9VUkNDKSAqLworI2RlZmluZSB2NGwyX2ZvdXJjYyhhLCBiLCBjLCBkKVwKKyAgICAgICAgKChfX3UzMikoYSkgfCAoKF9fdTMyKShiKSAmbHQ7Jmx0OyA4KSB8ICgoX191MzIpKGMpICZsdDsmbHQ7IDE2KSB8ICgoX191MzIpKGQpICZsdDsmbHQ7IDI0KSkKKworLyoKKyAqICAgICAgRSBOIFUgTSBTCisgKi8KK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1maWVsZCI+djRsMl9maWVsZDwvbGluaz4geworICAgICAgICBWNEwyX0ZJRUxEX0FOWSAgICAgICAgICAgPSAwLCAvKiBkcml2ZXIgY2FuIGNob29zZSBmcm9tIG5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgYm90dG9tLCBpbnRlcmxhY2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB3aGF0ZXZlciBpdCB0aGlua3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYXBwcm94aW1hdGUgLi4uICovCisgICAgICAgIFY0TDJfRklFTERfTk9ORSAgICAgICAgICA9IDEsIC8qIHRoaXMgZGV2aWNlIGhhcyBubyBmaWVsZHMgLi4uICovCisgICAgICAgIFY0TDJfRklFTERfVE9QICAgICAgICAgICA9IDIsIC8qIHRvcCBmaWVsZCBvbmx5ICovCisgICAgICAgIFY0TDJfRklFTERfQk9UVE9NICAgICAgICA9IDMsIC8qIGJvdHRvbSBmaWVsZCBvbmx5ICovCisgICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCAgICA9IDQsIC8qIGJvdGggZmllbGRzIGludGVybGFjZWQgKi8KKyAgICAgICAgVjRMMl9GSUVMRF9TRVFfVEIgICAgICAgID0gNSwgLyogYm90aCBmaWVsZHMgc2VxdWVudGlhbCBpbnRvIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHRvcC1ib3R0b20gb3JkZXIgKi8KKyAgICAgICAgVjRMMl9GSUVMRF9TRVFfQlQgICAgICAgID0gNiwgLyogc2FtZSBhcyBhYm92ZSArIGJvdHRvbS10b3Agb3JkZXIgKi8KKyAgICAgICAgVjRMMl9GSUVMRF9BTFRFUk5BVEUgICAgID0gNywgLyogYm90aCBmaWVsZHMgYWx0ZXJuYXRpbmcgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBidWZmZXJzICovCisgICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiA9IDgsIC8qIGJvdGggZmllbGRzIGludGVybGFjZWQsIHRvcCBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBhbmQgdGhlIHRvcCBmaWVsZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZCBmaXJzdCAqLworICAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgPSA5LCAvKiBib3RoIGZpZWxkcyBpbnRlcmxhY2VkLCB0b3AgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgYW5kIHRoZSBib3R0b20gZmllbGQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgZmlyc3QgKi8KK307CisjZGVmaW5lIFY0TDJfRklFTERfSEFTX1RPUChmaWVsZCkgICAgICAgXAorICAgICAgICAoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1RPUCAgICAgIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fFwKKyAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9UQiAgIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKKyNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfQk9UVE9NKGZpZWxkKSAgICBcCisgICAgICAgICgoZmllbGQpID09IFY0TDJfRklFTERfQk9UVE9NICAgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fFwKKyAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX1RCICAgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQorI2RlZmluZSBWNEwyX0ZJRUxEX0hBU19CT1RIKGZpZWxkKSAgICAgIFwKKyAgICAgICAgKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9CVCB8fFwKKyAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQorCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiPnY0bDJfYnVmX3R5cGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICAgICAgICA9IDEsCisgICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICAgICAgICAgPSAyLAorICAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkgICAgICAgID0gMywKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAgICAgICAgICA9IDQsCisgICAgICAgIFY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVCAgICAgICAgICAgPSA1LAorICAgICAgICBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSAgID0gNiwKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCAgICA9IDcsCisjaWYgMSAvKktFRVAqLworICAgICAgICAvKiBFeHBlcmltZW50YWwgKi8KKyAgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWSA9IDgsCisjZW5kaWYKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9QUklWQVRFICAgICAgICAgICAgICA9IDB4ODAsCit9OworCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItY3RybC10eXBlIj52NGwyX2N0cmxfdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSICAgICAgID0gMSwKKyAgICAgICAgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiAgICAgICA9IDIsCisgICAgICAgIFY0TDJfQ1RSTF9UWVBFX01FTlUgICAgICAgICAgPSAzLAorICAgICAgICBWNEwyX0NUUkxfVFlQRV9CVVRUT04gICAgICAgID0gNCwKKyAgICAgICAgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0ICAgICA9IDUsCisgICAgICAgIFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1MgICAgPSA2LAorICAgICAgICBWNEwyX0NUUkxfVFlQRV9TVFJJTkcgICAgICAgID0gNywKK307CisKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi10dW5lci10eXBlIj52NGwyX3R1bmVyX3R5cGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9UVU5FUl9SQURJTyAgICAgICAgICAgICA9IDEsCisgICAgICAgIFY0TDJfVFVORVJfQU5BTE9HX1RWICAgICAgICAgPSAyLAorICAgICAgICBWNEwyX1RVTkVSX0RJR0lUQUxfVFYgICAgICAgID0gMywKK307CisKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tZW1vcnkiPnY0bDJfbWVtb3J5PC9saW5rPiB7CisgICAgICAgIFY0TDJfTUVNT1JZX01NQVAgICAgICAgICAgICAgPSAxLAorICAgICAgICBWNEwyX01FTU9SWV9VU0VSUFRSICAgICAgICAgID0gMiwKKyAgICAgICAgVjRMMl9NRU1PUllfT1ZFUkxBWSAgICAgICAgICA9IDMsCit9OworCisvKiBzZWUgYWxzbyBodHRwOi8vdmVrdG9yLnRoZW9yZW0uY2EvZ3JhcGhpY3MveWNiY3IvICovCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItY29sb3JzcGFjZSI+djRsMl9jb2xvcnNwYWNlPC9saW5rPiB7CisgICAgICAgIC8qIElUVS1SIDYwMSAtLSBicm9hZGNhc3QgTlRTQy9QQUwgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSAgICAgPSAxLAorCisgICAgICAgIC8qIDExMjUtTGluZSAoVVMpIEhEVFYgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMjQwTSAgICAgPSAyLAorCisgICAgICAgIC8qIEhEIGFuZCBtb2Rlcm4gY2FwdHVyZXMuICovCisgICAgICAgIFY0TDJfQ09MT1JTUEFDRV9SRUM3MDkgICAgICAgID0gMywKKworICAgICAgICAvKiBicm9rZW4gQlQ4NzggZXh0ZW50cyAoNjAxLCBsdW1hIHJhbmdlIDE2LTI1MyBpbnN0ZWFkIG9mIDE2LTIzNSkgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX0JUODc4ICAgICAgICAgPSA0LAorCisgICAgICAgIC8qIFRoZXNlIHNob3VsZCBiZSB1c2VmdWwuICBBc3N1bWUgNjAxIGV4dGVudHMuICovCisgICAgICAgIFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX00gID0gNSwKKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkcgPSA2LAorCisgICAgICAgIC8qIEkga25vdyB0aGVyZSB3aWxsIGJlIGNhbWVyYXMgdGhhdCBzZW5kIHRoaXMuICBTbywgdGhpcyBpcworICAgICAgICAgKiB1bnNwZWNpZmllZCBjaHJvbWF0aWNpdGllcyBhbmQgZnVsbCAwLTI1NSBvbiBlYWNoIG9mIHRoZQorICAgICAgICAgKiBZJ0NiQ3IgY29tcG9uZW50cworICAgICAgICAgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX0pQRUcgICAgICAgICAgPSA3LAorCisgICAgICAgIC8qIEZvciBSR0IgY29sb3Vyc3BhY2VzLCB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydC4gKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX1NSR0IgICAgICAgICAgPSA4LAorfTsKKworZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXByaW9yaXR5Ij52NGwyX3ByaW9yaXR5PC9saW5rPiB7CisgICAgICAgIFY0TDJfUFJJT1JJVFlfVU5TRVQgICAgICAgPSAwLCAgLyogbm90IGluaXRpYWxpemVkICovCisgICAgICAgIFY0TDJfUFJJT1JJVFlfQkFDS0dST1VORCAgPSAxLAorICAgICAgICBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFID0gMiwKKyAgICAgICAgVjRMMl9QUklPUklUWV9SRUNPUkQgICAgICA9IDMsCisgICAgICAgIFY0TDJfUFJJT1JJVFlfREVGQVVMVCAgICAgPSBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFLAorfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiB7CisgICAgICAgIF9fczMyICAgbGVmdDsKKyAgICAgICAgX19zMzIgICB0b3A7CisgICAgICAgIF9fczMyICAgd2lkdGg7CisgICAgICAgIF9fczMyICAgaGVpZ2h0OworfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+IHsKKyAgICAgICAgX191MzIgICBudW1lcmF0b3I7CisgICAgICAgIF9fdTMyICAgZGVub21pbmF0b3I7Cit9OworCisvKgorICogICAgICBEIFIgSSBWIEUgUiAgIEMgQSBQIEEgQiBJIEwgSSBUIEkgRSBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcGFiaWxpdHkiPnY0bDJfY2FwYWJpbGl0eTwvbGluaz4geworICAgICAgICBfX3U4ICAgIGRyaXZlclsxNl07ICAgICAvKiBpLmUuaWU7ICJidHR2IiAqLworICAgICAgICBfX3U4ICAgIGNhcmRbMzJdOyAgICAgICAvKiBpLmUuaWU7ICJIYXVwcGF1Z2UgV2luVFYiICovCisgICAgICAgIF9fdTggICAgYnVzX2luZm9bMzJdOyAgIC8qICJQQ0k6IiArIHBjaV9uYW1lKHBjaV9kZXYpICovCisgICAgICAgIF9fdTMyICAgdmVyc2lvbjsgICAgICAgIC8qIHNob3VsZCB1c2UgS0VSTkVMX1ZFUlNJT04oKSAqLworICAgICAgICBfX3UzMiAgIGNhcGFiaWxpdGllczsgICAvKiBEZXZpY2UgY2FwYWJpbGl0aWVzICovCisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKiBWYWx1ZXMgZm9yICdjYXBhYmlsaXRpZXMnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgICAgICAgICAgMHgwMDAwMDAwMSAgLyogSXMgYSB2aWRlbyBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQgICAgICAgICAgIDB4MDAwMDAwMDIgIC8qIElzIGEgdmlkZW8gb3V0cHV0IGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZICAgICAgICAgIDB4MDAwMDAwMDQgIC8qIENhbiBkbyB2aWRlbyBvdmVybGF5ICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9DQVBUVVJFICAgICAgICAgICAgMHgwMDAwMDAxMCAgLyogSXMgYSByYXcgVkJJIGNhcHR1cmUgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9PVVRQVVQgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLyogSXMgYSByYXcgVkJJIG91dHB1dCBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFICAgICAweDAwMDAwMDQwICAvKiBJcyBhIHNsaWNlZCBWQkkgY2FwdHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQgICAgICAweDAwMDAwMDgwICAvKiBJcyBhIHNsaWNlZCBWQkkgb3V0cHV0IGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9SRFNfQ0FQVFVSRSAgICAgICAgICAgIDB4MDAwMDAxMDAgIC8qIFJEUyBkYXRhIGNhcHR1cmUgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUX09WRVJMQVkgICAweDAwMDAwMjAwICAvKiBDYW4gZG8gdmlkZW8gb3V0cHV0IG92ZXJsYXkgKi8KKyNkZWZpbmUgVjRMMl9DQVBfSFdfRlJFUV9TRUVLICAgICAgICAgICAweDAwMDAwNDAwICAvKiBDYW4gZG8gaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsgICovCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19PVVRQVVQgICAgICAgICAgICAgMHgwMDAwMDgwMCAgLyogSXMgYW4gUkRTIGVuY29kZXIgKi8KKworI2RlZmluZSBWNEwyX0NBUF9UVU5FUiAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAgIC8qIGhhcyBhIHR1bmVyICovCisjZGVmaW5lIFY0TDJfQ0FQX0FVRElPICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMCAgLyogaGFzIGF1ZGlvIHN1cHBvcnQgKi8KKyNkZWZpbmUgVjRMMl9DQVBfUkFESU8gICAgICAgICAgICAgICAgICAweDAwMDQwMDAwICAvKiBpcyBhIHJhZGlvIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9NT0RVTEFUT1IgICAgICAgICAgICAgIDB4MDAwODAwMDAgIC8qIGhhcyBhIG1vZHVsYXRvciAqLworCisjZGVmaW5lIFY0TDJfQ0FQX1JFQURXUklURSAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgLyogcmVhZC93cml0ZSBzeXN0ZW1jYWxscyAqLworI2RlZmluZSBWNEwyX0NBUF9BU1lOQ0lPICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAgIC8qIGFzeW5jIEkvTyAqLworI2RlZmluZSBWNEwyX0NBUF9TVFJFQU1JTkcgICAgICAgICAgICAgIDB4MDQwMDAwMDAgIC8qIHN0cmVhbWluZyBJL08gaW9jdGxzICovCisKKy8qCisgKiAgICAgIFYgSSBEIEUgTyAgIEkgTSBBIEcgRSAgIEYgTyBSIE0gQSBUCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQiPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB3aWR0aDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaGVpZ2h0OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBwaXhlbGZvcm1hdDsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWZpZWxkIj52NGwyX2ZpZWxkPC9saW5rPiAgICAgICAgIGZpZWxkOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBieXRlc3BlcmxpbmU7ICAgLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHNpemVpbWFnZTsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbG9yc3BhY2UiPnY0bDJfY29sb3JzcGFjZTwvbGluaz4gICAgY29sb3JzcGFjZTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcHJpdjsgICAgICAgICAgIC8qIHByaXZhdGUgZGF0YSwgZGVwZW5kcyBvbiBwaXhlbGZvcm1hdCAqLworfTsKKworLyogICAgICBQaXhlbCBmb3JtYXQgICAgICAgICBGT1VSQ0MgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoICBEZXNjcmlwdGlvbiAgKi8KKworLyogUkdCIGZvcm1hdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjMzMiI+VjRMMl9QSVhfRk1UX1JHQjMzMjwvbGluaz4gIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICcxJykgLyogIDggIFJHQi0zLTMtMiAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjQ0NCI+VjRMMl9QSVhfRk1UX1JHQjQ0NDwvbGluaz4gIHY0bDJfZm91cmNjKCdSJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHhycnJyIGdnZ2diYmJiICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NTUiPlY0TDJfUElYX0ZNVF9SR0I1NTU8L2xpbms+ICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnTycpIC8qIDE2ICBSR0ItNS01LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NjUiPlY0TDJfUElYX0ZNVF9SR0I1NjU8L2xpbms+ICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUCcpIC8qIDE2ICBSR0ItNS02LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NTVYIj5WNEwyX1BJWF9GTVRfUkdCNTU1WDwvbGluaz4gdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1EnKSAvKiAxNiAgUkdCLTUtNS01IEJFICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCNTY1WCI+VjRMMl9QSVhfRk1UX1JHQjU2NVg8L2xpbms+IHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdSJykgLyogMTYgIFJHQi01LTYtNSBCRSAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUJHUjI0Ij5WNEwyX1BJWF9GTVRfQkdSMjQ8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJzMnKSAvKiAyNCAgQkdSLTgtOC04ICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCMjQiPlY0TDJfUElYX0ZNVF9SR0IyNDwvbGluaz4gICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMycpIC8qIDI0ICBSR0ItOC04LTggICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1CR1IzMiI+VjRMMl9QSVhfRk1UX0JHUjMyPC9saW5rPiAgIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICc0JykgLyogMzIgIEJHUi04LTgtOC04ICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjMyIj5WNEwyX1BJWF9GTVRfUkdCMzI8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJzQnKSAvKiAzMiAgUkdCLTgtOC04LTggICAqLworCisvKiBHcmV5IGZvcm1hdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUdSRVkiPlY0TDJfUElYX0ZNVF9HUkVZPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0UnLCAnWScpIC8qICA4ICBHcmV5c2NhbGUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZMTYiPlY0TDJfUElYX0ZNVF9ZMTY8L2xpbms+ICAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzYnLCAnICcpIC8qIDE2ICBHcmV5c2NhbGUgICAgICovCisKKy8qIFBhbGV0dGUgZm9ybWF0cyAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUEFMOCI+VjRMMl9QSVhfRk1UX1BBTDg8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdQJywgJ0EnLCAnTCcsICc4JykgLyogIDggIDgtYml0IHBhbGV0dGUgKi8KKworLyogTHVtaW5hbmNlK0Nocm9taW5hbmNlIGZvcm1hdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQxMCI+VjRMMl9QSVhfRk1UX1lWVTQxMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnVScsICc5JykgLyogIDkgIFlWVSA0OjE6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQyMCI+VjRMMl9QSVhfRk1UX1lWVTQyMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnMScsICcyJykgLyogMTIgIFlWVSA0OjI6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVWVYiPlY0TDJfUElYX0ZNVF9ZVVlWPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1knLCAnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZWVVWIj5WNEwyX1BJWF9GTVRfWVlVVjwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1knLCAnWScsICdVJywgJ1YnKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVZZVSI+VjRMMl9QSVhfRk1UX1lWWVU8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnWScsICdVJykgLyogMTYgWVZVIDQ6MjoyICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1VWVZZIj5WNEwyX1BJWF9GTVRfVVlWWTwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1UnLCAnWScsICdWJywgJ1knKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtVllVWSI+VjRMMl9QSVhfRk1UX1ZZVVk8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdWJywgJ1knLCAnVScsICdZJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQyMlAiPlY0TDJfUElYX0ZNVF9ZVVY0MjJQPC9saW5rPiB2NGwyX2ZvdXJjYygnNCcsICcyJywgJzInLCAnUCcpIC8qIDE2ICBZVlU0MjIgcGxhbmFyICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY0MTFQIj5WNEwyX1BJWF9GTVRfWVVWNDExUDwvbGluaz4gdjRsMl9mb3VyY2MoJzQnLCAnMScsICcxJywgJ1AnKSAvKiAxNiAgWVZVNDExIHBsYW5hciAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWTQxUCI+VjRMMl9QSVhfRk1UX1k0MVA8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdZJywgJzQnLCAnMScsICdQJykgLyogMTIgIFlVViA0OjE6MSAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQ0NCI+VjRMMl9QSVhfRk1UX1lVVjQ0NDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHh5eXl5IHV1dXV2dnZ2ICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY1NTUiPlY0TDJfUElYX0ZNVF9ZVVY1NTU8L2xpbms+ICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnTycpIC8qIDE2ICBZVVYtNS01LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY1NjUiPlY0TDJfUElYX0ZNVF9ZVVY1NjU8L2xpbms+ICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnUCcpIC8qIDE2ICBZVVYtNS02LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVYzMiI+VjRMMl9QSVhfRk1UX1lVVjMyPC9saW5rPiAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc0JykgLyogMzIgIFlVVi04LTgtOC04ICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQxMCI+VjRMMl9QSVhfRk1UX1lVVjQxMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc5JykgLyogIDkgIFlVViA0OjE6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQyMCI+VjRMMl9QSVhfRk1UX1lVVjQyMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnMScsICcyJykgLyogMTIgIFlVViA0OjI6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUhJMjQwIj5WNEwyX1BJWF9GTVRfSEkyNDA8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ0gnLCAnSScsICcyJywgJzQnKSAvKiAgOCAgOC1iaXQgY29sb3IgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtSE0xMiI+VjRMMl9QSVhfRk1UX0hNMTI8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdIJywgJ00nLCAnMScsICcyJykgLyogIDggIFlVViA0OjI6MCAxNngxNiBtYWNyb2Jsb2NrcyAqLworCisvKiB0d28gcGxhbmVzIC0tIG9uZSBZLCBvbmUgQ3IgKyBDYiBpbnRlcmxlYXZlZCAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU5WMTIiPlY0TDJfUElYX0ZNVF9OVjEyPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzEnLCAnMicpIC8qIDEyICBZL0NiQ3IgNDoyOjAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1OVjIxIj5WNEwyX1BJWF9GTVRfTlYyMTwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcyJywgJzEnKSAvKiAxMiAgWS9DckNiIDQ6MjowICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTlYxNiI+VjRMMl9QSVhfRk1UX05WMTY8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICc2JykgLyogMTYgIFkvQ2JDciA0OjI6MiAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU5WNjEiPlY0TDJfUElYX0ZNVF9OVjYxPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzYnLCAnMScpIC8qIDE2ICBZL0NyQ2IgNDoyOjIgICovCisKKy8qIEJheWVyIGZvcm1hdHMgLSBzZWUgaHR0cDovL3d3dy5zaWxpY29uaW1hZ2luZy5jb20vUkdCJTIwQmF5ZXIuaHRtICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TQkdHUjgiPlY0TDJfUElYX0ZNVF9TQkdHUjg8L2xpbms+ICB2NGwyX2ZvdXJjYygnQicsICdBJywgJzgnLCAnMScpIC8qICA4ICBCR0JHLi4gR1JHUi4uICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR0JSRzgiPlY0TDJfUElYX0ZNVF9TR0JSRzg8L2xpbms+ICB2NGwyX2ZvdXJjYygnRycsICdCJywgJ1InLCAnRycpIC8qICA4ICBHQkdCLi4gUkdSRy4uICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR1JCRzgiPlY0TDJfUElYX0ZNVF9TR1JCRzg8L2xpbms+ICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0InLCAnRycpIC8qICA4ICBHUkdSLi4gQkdCRy4uICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR1JCRzEwIj5WNEwyX1BJWF9GTVRfU0dSQkcxMDwvbGluaz4gdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzAnKSAvKiAxMGJpdCByYXcgYmF5ZXIgKi8KKyAgICAgICAgLyogMTBiaXQgcmF3IGJheWVyIERQQ00gY29tcHJlc3NlZCB0byA4IGJpdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNHUkJHMTBEUENNOCI+VjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNODwvbGluaz4gdjRsMl9mb3VyY2MoJ0InLCAnRCcsICcxJywgJzAnKQorICAgICAgICAvKgorICAgICAgICAgKiAxMGJpdCByYXcgYmF5ZXIsIGV4cGFuZGVkIHRvIDE2IGJpdHMKKyAgICAgICAgICogeHh4eHJycnJycnJycnJ4eHh4Z2dnZ2dnZ2dnZyB4eHh4Z2dnZ2dnZ2dnZ3h4eHhiYmJiYmJiYmJiLi4uCisgICAgICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU0JHR1IxNiI+VjRMMl9QSVhfRk1UX1NCR0dSMTY8L2xpbms+IHY0bDJfZm91cmNjKCdCJywgJ1knLCAnUicsICcyJykgLyogMTYgIEJHQkcuLiBHUkdSLi4gKi8KKworLyogY29tcHJlc3NlZCBmb3JtYXRzICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NSlBFRyI+VjRMMl9QSVhfRk1UX01KUEVHPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnTScsICdKJywgJ1AnLCAnRycpIC8qIE1vdGlvbi1KUEVHICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUpQRUciPlY0TDJfUElYX0ZNVF9KUEVHPC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ0onLCAnUCcsICdFJywgJ0cnKSAvKiBKRklGIEpQRUcgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1EViI+VjRMMl9QSVhfRk1UX0RWPC9saW5rPiAgICAgICB2NGwyX2ZvdXJjYygnZCcsICd2JywgJ3MnLCAnZCcpIC8qIDEzOTQgICAgICAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU1QRUciPlY0TDJfUElYX0ZNVF9NUEVHPC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdFJywgJ0cnKSAvKiBNUEVHLTEvMi80ICAgICovCisKKy8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1XTlZBIj5WNEwyX1BJWF9GTVRfV05WQTwvbGluaz4gICAgIHY0bDJfZm91cmNjKCdXJywgJ04nLCAnVicsICdBJykgLyogV2lubm92IGh3IGNvbXByZXNzICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TTjlDMTBYIj5WNEwyX1BJWF9GTVRfU045QzEwWDwvbGluaz4gIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykgLyogU045QzEweCBjb21wcmVzc2lvbiAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU045QzIwWC1JNDIwIj5WNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwPC9saW5rPiB2NGwyX2ZvdXJjYygnUycsICc5JywgJzInLCAnMCcpIC8qIFNOOUMyMHggWVVWIDQ6MjowICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1QV0MxIj5WNEwyX1BJWF9GTVRfUFdDMTwvbGluaz4gICAgIHY0bDJfZm91cmNjKCdQJywgJ1cnLCAnQycsICcxJykgLyogcHdjIG9sZGVyIHdlYmNhbSAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUFdDMiI+VjRMMl9QSVhfRk1UX1BXQzI8L2xpbms+ICAgICB2NGwyX2ZvdXJjYygnUCcsICdXJywgJ0MnLCAnMicpIC8qIHB3YyBuZXdlciB3ZWJjYW0gKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUVUNjFYMjUxIj5WNEwyX1BJWF9GTVRfRVQ2MVgyNTE8L2xpbms+IHY0bDJfZm91cmNjKCdFJywgJzYnLCAnMicsICc1JykgLyogRVQ2MVgyNTEgY29tcHJlc3Npb24gKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDEiPlY0TDJfUElYX0ZNVF9TUENBNTAxPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzEnKSAvKiBZVVlWIHBlciBsaW5lICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TUENBNTA1Ij5WNEwyX1BJWF9GTVRfU1BDQTUwNTwvbGluaz4gIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc1JykgLyogWVlVViBwZXIgbGluZSAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1BDQTUwOCI+VjRMMl9QSVhfRk1UX1NQQ0E1MDg8L2xpbms+ICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnOCcpIC8qIFlVVlkgcGVyIGxpbmUgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNQQ0E1NjEiPlY0TDJfUElYX0ZNVF9TUENBNTYxPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICc2JywgJzEnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVBBQzIwNyI+VjRMMl9QSVhfRk1UX1BBQzIwNzwvbGluaz4gICB2NGwyX2ZvdXJjYygnUCcsICcyJywgJzAnLCAnNycpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTVI5NzMxMEEiPlY0TDJfUElYX0ZNVF9NUjk3MzEwQTwvbGluaz4gdjRsMl9mb3VyY2MoJ00nLCAnMycsICcxJywgJzAnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNROTA1QyI+VjRMMl9QSVhfRk1UX1NROTA1QzwvbGluaz4gICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUEpQRyI+VjRMMl9QSVhfRk1UX1BKUEc8L2xpbms+ICAgICB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpIC8qIFBpeGFydCA3M3h4IEpQRUcgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU9WNTExIj5WNEwyX1BJWF9GTVRfT1Y1MTE8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICcxJykgLyogb3Y1MTEgSlBFRyAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtT1Y1MTgiPlY0TDJfUElYX0ZNVF9PVjUxODwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzgnKSAvKiBvdjUxOCBKUEVHICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1UTTYwMDAiPlY0TDJfUElYX0ZNVF9UTTYwMDA8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ1QnLCAnTScsICc2JywgJzAnKSAvKiB0bTU2MDAvdG02MHgwICovCisKKy8qCisgKiAgICAgIEYgTyBSIE0gQSBUICAgRSBOIFUgTSBFIFIgQSBUIEkgTyBOCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZtdGRlc2MiPnY0bDJfZm10ZGVzYzwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgIGluZGV4OyAgICAgICAgICAgICAvKiBGb3JtYXQgbnVtYmVyICAgICAgKi8KKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgdHlwZTsgICAgICAgICAgICAgIC8qIGJ1ZmZlciB0eXBlICAgICAgICAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgIGZsYWdzOworICAgICAgICBfX3U4ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uWzMyXTsgICAvKiBEZXNjcmlwdGlvbiBzdHJpbmcgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICBwaXhlbGZvcm1hdDsgICAgICAgLyogRm9ybWF0IGZvdXJjYyAgICAgICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRCAweDAwMDEKKyNkZWZpbmUgVjRMMl9GTVRfRkxBR19FTVVMQVRFRCAgIDB4MDAwMgorCisjaWYgMSAvKktFRVAqLworICAgICAgICAvKiBFeHBlcmltZW50YWwgRnJhbWUgU2l6ZSBhbmQgZnJhbWUgcmF0ZSBlbnVtZXJhdGlvbiAqLworLyoKKyAqICAgICAgRiBSIEEgTSBFICAgUyBJIFogRSAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZXR5cGVzIj52NGwyX2ZybXNpemV0eXBlczwvbGluaz4geworICAgICAgICBWNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURSAgICAgID0gMSwKKyAgICAgICAgVjRMMl9GUk1TSVpFX1RZUEVfQ09OVElOVU9VUyAgICA9IDIsCisgICAgICAgIFY0TDJfRlJNU0laRV9UWVBFX1NURVBXSVNFICAgICAgPSAzLAorfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZS1kaXNjcmV0ZSI+djRsMl9mcm1zaXplX2Rpc2NyZXRlPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHdpZHRoOyAgICAgICAgICAvKiBGcmFtZSB3aWR0aCBbcGl4ZWxdICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGhlaWdodDsgICAgICAgICAvKiBGcmFtZSBoZWlnaHQgW3BpeGVsXSAqLworfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZS1zdGVwd2lzZSI+djRsMl9mcm1zaXplX3N0ZXB3aXNlPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIG1pbl93aWR0aDsgICAgICAvKiBNaW5pbXVtIGZyYW1lIHdpZHRoIFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbWF4X3dpZHRoOyAgICAgIC8qIE1heGltdW0gZnJhbWUgd2lkdGggW3BpeGVsXSAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBzdGVwX3dpZHRoOyAgICAgLyogRnJhbWUgd2lkdGggc3RlcCBzaXplIFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbWluX2hlaWdodDsgICAgIC8qIE1pbmltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbWF4X2hlaWdodDsgICAgIC8qIE1heGltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgc3RlcF9oZWlnaHQ7ICAgIC8qIEZyYW1lIGhlaWdodCBzdGVwIHNpemUgW3BpeGVsXSAqLworfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZWVudW0iPnY0bDJfZnJtc2l6ZWVudW08L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgIC8qIEZyYW1lIHNpemUgbnVtYmVyICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHBpeGVsX2Zvcm1hdDsgICAvKiBQaXhlbCBmb3JtYXQgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgIC8qIEZyYW1lIHNpemUgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLiAqLworCisgICAgICAgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGcmFtZSBzaXplICovCisgICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZS1kaXNjcmV0ZSI+djRsMl9mcm1zaXplX2Rpc2NyZXRlPC9saW5rPiAgICBkaXNjcmV0ZTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1zaXplLXN0ZXB3aXNlIj52NGwyX2ZybXNpemVfc3RlcHdpc2U8L2xpbms+ICAgIHN0ZXB3aXNlOworICAgICAgICB9OworCisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMl07ICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCBzcGFjZSBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworLyoKKyAqICAgICAgRiBSIEEgTSBFICAgUiBBIFQgRSAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbHR5cGVzIj52NGwyX2ZybWl2YWx0eXBlczwvbGluaz4geworICAgICAgICBWNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURSAgICAgID0gMSwKKyAgICAgICAgVjRMMl9GUk1JVkFMX1RZUEVfQ09OVElOVU9VUyAgICA9IDIsCisgICAgICAgIFY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFICAgICAgPSAzLAorfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbC1zdGVwd2lzZSI+djRsMl9mcm1pdmFsX3N0ZXB3aXNlPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICAgICBtaW47ICAgICAgICAgICAgLyogTWluaW11bSBmcmFtZSBpbnRlcnZhbCBbc10gKi8KKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICAgICAgIG1heDsgICAgICAgICAgICAvKiBNYXhpbXVtIGZyYW1lIGludGVydmFsIFtzXSAqLworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFjdCI+djRsMl9mcmFjdDwvbGluaz4gICAgICAgc3RlcDsgICAgICAgICAgIC8qIEZyYW1lIGludGVydmFsIHN0ZXAgc2l6ZSBbc10gKi8KK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZybWl2YWxlbnVtIj52NGwyX2ZybWl2YWxlbnVtPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGluZGV4OyAgICAgICAgICAvKiBGcmFtZSBmb3JtYXQgaW5kZXggKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcGl4ZWxfZm9ybWF0OyAgIC8qIFBpeGVsIGZvcm1hdCAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB3aWR0aDsgICAgICAgICAgLyogRnJhbWUgd2lkdGggKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaGVpZ2h0OyAgICAgICAgIC8qIEZyYW1lIGhlaWdodCAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogRnJhbWUgaW50ZXJ2YWwgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLiAqLworCisgICAgICAgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGcmFtZSBpbnRlcnZhbCAqLworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICAgICAgICAgICAgIGRpc2NyZXRlOworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZybWl2YWwtc3RlcHdpc2UiPnY0bDJfZnJtaXZhbF9zdGVwd2lzZTwvbGluaz4gICAgc3RlcHdpc2U7CisgICAgICAgIH07CisKKyAgICAgICAgX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkIHNwYWNlIGZvciBmdXR1cmUgdXNlICovCit9OworI2VuZGlmCisKKy8qCisgKiAgICAgIFQgSSBNIEUgQyBPIEQgRQorICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi10aW1lY29kZSI+djRsMl90aW1lY29kZTwvbGluaz4geworICAgICAgICBfX3UzMiAgIHR5cGU7CisgICAgICAgIF9fdTMyICAgZmxhZ3M7CisgICAgICAgIF9fdTggICAgZnJhbWVzOworICAgICAgICBfX3U4ICAgIHNlY29uZHM7CisgICAgICAgIF9fdTggICAgbWludXRlczsKKyAgICAgICAgX191OCAgICBob3VyczsKKyAgICAgICAgX191OCAgICB1c2VyYml0c1s0XTsKK307CisKKy8qICBUeXBlICAqLworI2RlZmluZSBWNEwyX1RDX1RZUEVfMjRGUFMgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzI1RlBTICAgICAgICAgICAgICAyCisjZGVmaW5lIFY0TDJfVENfVFlQRV8zMEZQUyAgICAgICAgICAgICAgMworI2RlZmluZSBWNEwyX1RDX1RZUEVfNTBGUFMgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzYwRlBTICAgICAgICAgICAgICA1CisKKy8qICBGbGFncyAgKi8KKyNkZWZpbmUgVjRMMl9UQ19GTEFHX0RST1BGUkFNRSAgICAgICAgICAweDAwMDEgLyogImRyb3AtZnJhbWUiIG1vZGUgKi8KKyNkZWZpbmUgVjRMMl9UQ19GTEFHX0NPTE9SRlJBTUUgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU19maWVsZCAgICAgICAgICAweDAwMEMKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU19VU0VSREVGSU5FRCAgICAweDAwMDAKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU184QklUQ0hBUlMgICAgICAweDAwMDgKKy8qIFRoZSBhYm92ZSBpcyBiYXNlZCBvbiBTTVBURSB0aW1lY29kZXMgKi8KKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItanBlZ2NvbXByZXNzaW9uIj52NGwyX2pwZWdjb21wcmVzc2lvbjwvbGluaz4geworICAgICAgICBpbnQgcXVhbGl0eTsKKworICAgICAgICBpbnQgIEFQUG47ICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgQVBQIHNlZ21lbnQgdG8gYmUgd3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbXVzdCBiZSAwLi4xNSAqLworICAgICAgICBpbnQgIEFQUF9sZW47ICAgICAgICAgICAvKiBMZW5ndGggb2YgZGF0YSBpbiBKUEVHIEFQUG4gc2VnbWVudCAqLworICAgICAgICBjaGFyIEFQUF9kYXRhWzYwXTsgICAgICAvKiBEYXRhIGluIHRoZSBKUEVHIEFQUG4gc2VnbWVudC4gKi8KKworICAgICAgICBpbnQgIENPTV9sZW47ICAgICAgICAgICAvKiBMZW5ndGggb2YgZGF0YSBpbiBKUEVHIENPTSBzZWdtZW50ICovCisgICAgICAgIGNoYXIgQ09NX2RhdGFbNjBdOyAgICAgIC8qIERhdGEgaW4gSlBFRyBDT00gc2VnbWVudCAqLworCisgICAgICAgIF9fdTMyIGpwZWdfbWFya2VyczsgICAgIC8qIFdoaWNoIG1hcmtlcnMgc2hvdWxkIGdvIGludG8gdGhlIEpQRUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb3V0cHV0LiBVbmxlc3MgeW91IGV4YWN0bHkga25vdyB3aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHlvdSBkbywgbGVhdmUgdGhlbSB1bnRvdWNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElubHVkaW5nIGxlc3MgbWFya2VycyB3aWxsIG1ha2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc3VsdGluZyBjb2RlIHNtYWxsZXIsIGJ1dCB0aGVyZSB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIGZld2VyIGFwbGljYXRpb25zIHdoaWNoIGNhbiByZWFkIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgcHJlc2VuY2Ugb2YgdGhlIEFQUCBhbmQgQ09NIG1hcmtlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyBpbmZsdWVuY2VkIGJ5IEFQUF9sZW4gYW5kIENPTV9sZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogT05MWSwgbm90IGJ5IHRoaXMgcHJvcGVydHkhICovCisKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9ESFQgKDEmbHQ7Jmx0OzMpICAgIC8qIERlZmluZSBIdWZmbWFuIFRhYmxlcyAqLworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RRVCAoMSZsdDsmbHQ7NCkgICAgLyogRGVmaW5lIFF1YW50aXphdGlvbiBUYWJsZXMgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9EUkkgKDEmbHQ7Jmx0OzUpICAgIC8qIERlZmluZSBSZXN0YXJ0IEludGVydmFsICovCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfQ09NICgxJmx0OyZsdDs2KSAgICAvKiBDb21tZW50IHNlZ21lbnQgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9BUFAgKDEmbHQ7Jmx0OzcpICAgIC8qIEFwcCBzZWdtZW50LCBkcml2ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsd2F5cyB1c2UgQVBQMCAqLworfTsKKworLyoKKyAqICAgICAgTSBFIE0gTyBSIFkgLSBNIEEgUCBQIEkgTiBHICAgQiBVIEYgRiBFIFIgUworICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBjb3VudDsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgICAgIHR5cGU7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tZW1vcnkiPnY0bDJfbWVtb3J5PC9saW5rPiAgICAgICAgbWVtb3J5OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gICAgICB0eXBlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBieXRlc3VzZWQ7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZmllbGQiPnY0bDJfZmllbGQ8L2xpbms+ICAgICAgICAgZmllbGQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsICAgICAgICAgIHRpbWVzdGFtcDsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdGltZWNvZGUiPnY0bDJfdGltZWNvZGU8L2xpbms+ICAgIHRpbWVjb2RlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTsKKworICAgICAgICAvKiBtZW1vcnkgbG9jYXRpb24gKi8KKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1lbW9yeSI+djRsMl9tZW1vcnk8L2xpbms+ICAgICAgICBtZW1vcnk7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBfX3UzMiAgICAgICAgICAgb2Zmc2V0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICB1c2VycHRyOworICAgICAgICB9IG07CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5wdXQ7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOworfTsKKworLyogIEZsYWdzIGZvciAnZmxhZ3MnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTUFQUEVEICAgIDB4MDAwMSAgLyogQnVmZmVyIGlzIG1hcHBlZCAoZmxhZykgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19RVUVVRUQgICAgMHgwMDAyICAvKiBCdWZmZXIgaXMgcXVldWVkIGZvciBwcm9jZXNzaW5nICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfRE9ORSAgICAgIDB4MDAwNCAgLyogQnVmZmVyIGlzIHJlYWR5ICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUUgIDB4MDAwOCAgLyogSW1hZ2UgaXMgYSBrZXlmcmFtZSAoSS1mcmFtZSkgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19QRlJBTUUgICAgMHgwMDEwICAvKiBJbWFnZSBpcyBhIFAtZnJhbWUgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19CRlJBTUUgICAgMHgwMDIwICAvKiBJbWFnZSBpcyBhIEItZnJhbWUgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FQ09ERSAgMHgwMTAwICAvKiB0aW1lY29kZSBmaWVsZCBpcyB2YWxpZCAqLworI2RlZmluZSBWNEwyX0JVRl9GTEFHX0lOUFVUICAgICAweDAyMDAgIC8qIGlucHV0IGZpZWxkIGlzIHZhbGlkICovCisKKy8qCisgKiAgICAgIE8gViBFIFIgTCBBIFkgICBQIFIgRSBWIEkgRSBXCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYW1lYnVmZmVyIj52NGwyX2ZyYW1lYnVmZmVyPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHk7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGZsYWdzOworLyogRklYTUU6IGluIHRoZW9yeSB3ZSBzaG91bGQgcGFzcyBzb21ldGhpbmcgbGlrZSBQQ0kgZGV2aWNlICsgbWVtb3J5CisgKiByZWdpb24gKyBvZmZzZXQgaW5zdGVhZCBvZiBzb21lIHBoeXNpY2FsIGFkZHJlc3MgKi8KKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmJhc2U7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQiPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz4gIGZtdDsKK307CisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQuIFJlYWQgb25seSAqLworI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0VYVEVSTk9WRVJMQVkgICAgIDB4MDAwMQorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWSAgICAgICAgIDB4MDAwMgorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkcgICAgIDB4MDAwNAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0JJVE1BUF9DTElQUElORyAgIDB4MDAwOAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0FMUEhBICAgICAgIDB4MDAxMAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0dMT0JBTF9BTFBIQSAgICAgIDB4MDAyMAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQSAgIDB4MDA0MAorLyogIEZsYWdzIGZvciB0aGUgJ2ZsYWdzJyBmaWVsZC4gKi8KKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfUFJJTUFSWSAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWSAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZICAgICAgICAweDAwMDQKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEEgICAgICAweDAwMDgKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBICAgICAweDAwMTAKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfTE9DQUxfSU5WX0FMUEhBICAweDAwMjAKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY2xpcCI+djRsMl9jbGlwPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QiPnY0bDJfcmVjdDwvbGluaz4gICAgICAgIGM7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNsaXAiPnY0bDJfY2xpcDwvbGluaz4gICAgICAgIF9fdXNlciAqbmV4dDsKK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXdpbmRvdyI+djRsMl93aW5kb3c8L2xpbms+IHsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiAgICAgICAgdzsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWZpZWxkIj52NGwyX2ZpZWxkPC9saW5rPiAgICAgICAgIGZpZWxkOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBjaHJvbWFrZXk7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNsaXAiPnY0bDJfY2xpcDwvbGluaz4gICAgICAgIF9fdXNlciAqY2xpcHM7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGNsaXBjb3VudDsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgX191c2VyICpiaXRtYXA7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgICAgIGdsb2JhbF9hbHBoYTsKK307CisKKy8qCisgKiAgICAgIEMgQSBQIFQgVSBSIEUgICBQIEEgUiBBIE0gRSBUIEUgUiBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcHR1cmVwYXJtIj52NGwyX2NhcHR1cmVwYXJtPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBjYXBhYmlsaXR5OyAgICAvKiAgU3VwcG9ydGVkIG1vZGVzICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBjYXB0dXJlbW9kZTsgICAvKiAgQ3VycmVudCBtb2RlICovCisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgdGltZXBlcmZyYW1lOyAgLyogIFRpbWUgcGVyIGZyYW1lIGluIC4xdXMgdW5pdHMgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgIGV4dGVuZGVkbW9kZTsgIC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgcmVhZGJ1ZmZlcnM7ICAgLyogICMgb2YgYnVmZmVycyBmb3IgcmVhZCAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKiAgRmxhZ3MgZm9yICdjYXBhYmlsaXR5JyBhbmQgJ2NhcHR1cmVtb2RlJyBmaWVsZHMgKi8KKyNkZWZpbmUgVjRMMl9NT0RFX0hJR0hRVUFMSVRZICAgMHgwMDAxICAvKiAgSGlnaCBxdWFsaXR5IGltYWdpbmcgbW9kZSAqLworI2RlZmluZSBWNEwyX0NBUF9USU1FUEVSRlJBTUUgICAweDEwMDAgIC8qICB0aW1lcGVyZnJhbWUgZmllbGQgaXMgc3VwcG9ydGVkICovCisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dHBhcm0iPnY0bDJfb3V0cHV0cGFybTwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgY2FwYWJpbGl0eTsgICAvKiAgU3VwcG9ydGVkIG1vZGVzICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBvdXRwdXRtb2RlOyAgIC8qICBDdXJyZW50IG1vZGUgKi8KKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICB0aW1lcGVyZnJhbWU7IC8qICBUaW1lIHBlciBmcmFtZSBpbiBzZWNvbmRzICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBleHRlbmRlZG1vZGU7IC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgd3JpdGVidWZmZXJzOyAvKiAgIyBvZiBidWZmZXJzIGZvciB3cml0ZSAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKgorICogICAgICBJIE4gUCBVIFQgICBJIE0gQSBHIEUgICBDIFIgTyBQIFAgSSBOIEcKKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY3JvcGNhcCI+djRsMl9jcm9wY2FwPC9saW5rPiB7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gICAgICB0eXBlOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZWN0Ij52NGwyX3JlY3Q8L2xpbms+ICAgICAgICBib3VuZHM7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QiPnY0bDJfcmVjdDwvbGluaz4gICAgICAgIGRlZnJlY3Q7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICAgICBwaXhlbGFzcGVjdDsKK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3AiPnY0bDJfY3JvcDwvbGluaz4geworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiPnY0bDJfYnVmX3R5cGU8L2xpbms+ICAgICAgdHlwZTsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiAgICAgICAgYzsKK307CisKKy8qCisgKiAgICAgIEEgTiBBIEwgTyBHICAgViBJIEQgRSBPICAgUyBUIEEgTiBEIEEgUiBECisgKi8KKwordHlwZWRlZiBfX3U2NCB2NGwyX3N0ZF9pZDsKKworLyogb25lIGJpdCBmb3IgZWFjaCAqLworI2RlZmluZSBWNEwyX1NURF9QQUxfQiAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDEpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0cgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA0KQorI2RlZmluZSBWNEwyX1NURF9QQUxfSCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDgpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9JICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAxMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0QgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDIwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRDEgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwNDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9LICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA4MCkKKworI2RlZmluZSBWNEwyX1NURF9QQUxfTSAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9OICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX05jICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwNDAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfNjAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCisKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAxMDAwKQorI2RlZmluZSBWNEwyX1NURF9OVFNDX01fSlAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDIwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA4MDAwKQorCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0IgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDIwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9HICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwNDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0ggICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDA4MDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSyAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMTAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LMSAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAyMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDQwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTEMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwODAwMDAwKQorCisvKiBBVFNDL0hEVFYgKi8KKyNkZWZpbmUgVjRMMl9TVERfQVRTQ184X1ZTQiAgICAgKCh2NGwyX3N0ZF9pZCkweDAxMDAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9BVFNDXzE2X1ZTQiAgICAoKHY0bDJfc3RkX2lkKTB4MDIwMDAwMDApCisKKy8qIEZJWE1FOgorICAgQWx0aG91Z2ggc3RkX2lkIGlzIDY0IGJpdHMsIHRoZXJlIGlzIGFuIGlzc3VlIG9uIFBQQzMyIGFyY2hpdGVjdHVyZSB0aGF0CisgICBtYWtlcyBzd2l0Y2goX191NjQpIHRvIGJyZWFrLiBTbywgdGhlcmUncyBhIGhhY2sgb24gdjRsMi1jb21tb24uYyByb3VuZGluZworICAgdGhpcyB2YWx1ZSB0byAzMiBiaXRzLgorICAgQXMsIGN1cnJlbnRseSwgdGhlIG1heCB2YWx1ZSBpcyBmb3IgVjRMMl9TVERfQVRTQ18xNl9WU0IgKDMwIGJpdHMgd2lkZSksCisgICBpdCBzaG91bGQgd29yayBmaW5lLiBIb3dldmVyLCBpZiBuZWVkZWQgdG8gYWRkIG1vcmUgdGhhbiB0d28gc3RhbmRhcmRzLAorICAgdjRsMi1jb21tb24uYyBzaG91bGQgYmUgZml4ZWQuCisgKi8KKworLyogc29tZSBtZXJnZWQgc3RhbmRhcmRzICovCisjZGVmaW5lIFY0TDJfU1REX01OICAgICAoVjRMMl9TVERfUEFMX018VjRMMl9TVERfUEFMX058VjRMMl9TVERfUEFMX05jfFY0TDJfU1REX05UU0MpCisjZGVmaW5lIFY0TDJfU1REX0IgICAgICAoVjRMMl9TVERfUEFMX0J8VjRMMl9TVERfUEFMX0IxfFY0TDJfU1REX1NFQ0FNX0IpCisjZGVmaW5lIFY0TDJfU1REX0dIICAgICAoVjRMMl9TVERfUEFMX0d8VjRMMl9TVERfUEFMX0h8VjRMMl9TVERfU0VDQU1fR3xWNEwyX1NURF9TRUNBTV9IKQorI2RlZmluZSBWNEwyX1NURF9ESyAgICAgKFY0TDJfU1REX1BBTF9ES3xWNEwyX1NURF9TRUNBTV9ESykKKworLyogc29tZSBjb21tb24gbmVlZGVkIHN0dWZmICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CRyAgICAgICAgIChWNEwyX1NURF9QQUxfQiAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfQjEgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfRykKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0RLICAgICAgICAgKFY0TDJfU1REX1BBTF9EICAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9EMSAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9LKQorI2RlZmluZSBWNEwyX1NURF9QQUwgICAgICAgICAgICAoVjRMMl9TVERfUEFMX0JHICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0RLICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0ggICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0kpCisjZGVmaW5lIFY0TDJfU1REX05UU0MgICAgICAgICAgIChWNEwyX1NURF9OVFNDX00gICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDX01fSlAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDX01fS1IpCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0RLICAgICAgIChWNEwyX1NURF9TRUNBTV9EICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9TRUNBTV9LICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9TRUNBTV9LMSkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU0gICAgICAgICAgKFY0TDJfU1REX1NFQ0FNX0IgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0ggICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0RLICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0xDKQorCisjZGVmaW5lIFY0TDJfU1REXzUyNV82MCAgICAgICAgIChWNEwyX1NURF9QQUxfTSAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfNjAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDICAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDXzQ0MykKKyNkZWZpbmUgVjRMMl9TVERfNjI1XzUwICAgICAgICAgKFY0TDJfU1REX1BBTCAgICAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9OICAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9OYyAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNKQorI2RlZmluZSBWNEwyX1NURF9BVFNDICAgICAgICAgICAoVjRMMl9TVERfQVRTQ184X1ZTQiAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfQVRTQ18xNl9WU0IpCisKKyNkZWZpbmUgVjRMMl9TVERfVU5LTk9XTiAgICAgICAgMAorI2RlZmluZSBWNEwyX1NURF9BTEwgICAgICAgICAgICAoVjRMMl9TVERfNTI1XzYwICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfNjI1XzUwKQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zdGFuZGFyZCI+djRsMl9zdGFuZGFyZDwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBpbmRleDsKKyAgICAgICAgdjRsMl9zdGRfaWQgICAgICAgICAgaWQ7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgIG5hbWVbMjRdOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFjdCI+djRsMl9mcmFjdDwvbGluaz4gICAgZnJhbWVwZXJpb2Q7IC8qIEZyYW1lcywgbm90IGZpZWxkcyAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBmcmFtZWxpbmVzOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICByZXNlcnZlZFs0XTsKK307CisKKy8qCisgKiAgICAgIFYgSSBEIEUgTyAgIEkgTiBQIFUgVCBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWlucHV0Ij52NGwyX2lucHV0PC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICBpbmRleDsgICAgICAgICAgICAgLyogIFdoaWNoIGlucHV0ICovCisgICAgICAgIF9fdTggICAgICAgICBuYW1lWzMyXTsgICAgICAgICAgLyogIExhYmVsICovCisgICAgICAgIF9fdTMyICAgICAgICB0eXBlOyAgICAgICAgICAgICAgLyogIFR5cGUgb2YgaW5wdXQgKi8KKyAgICAgICAgX191MzIgICAgICAgIGF1ZGlvc2V0OyAgICAgICAgICAvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLworICAgICAgICBfX3UzMiAgICAgICAgdHVuZXI7ICAgICAgICAgICAgIC8qICBBc3NvY2lhdGVkIHR1bmVyICovCisgICAgICAgIHY0bDJfc3RkX2lkICBzdGQ7CisgICAgICAgIF9fdTMyICAgICAgICBzdGF0dXM7CisgICAgICAgIF9fdTMyICAgICAgICByZXNlcnZlZFs0XTsKK307CisKKy8qICBWYWx1ZXMgZm9yIHRoZSAndHlwZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9JTlBVVF9UWVBFX1RVTkVSICAgICAgICAgICAxCisjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEgICAgICAgICAgMgorCisvKiBmaWVsZCAnc3RhdHVzJyAtIGdlbmVyYWwgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19QT1dFUiAgICAweDAwMDAwMDAxICAvKiBBdHRhY2hlZCBkZXZpY2UgaXMgb2ZmICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fU0lHTkFMICAgMHgwMDAwMDAwMgorI2RlZmluZSBWNEwyX0lOX1NUX05PX0NPTE9SICAgIDB4MDAwMDAwMDQKKworLyogZmllbGQgJ3N0YXR1cycgLSBzZW5zb3Igb3JpZW50YXRpb24gKi8KKy8qIElmIHNlbnNvciBpcyBtb3VudGVkIHVwc2lkZSBkb3duIHNldCBib3RoIGJpdHMgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9IRkxJUCAgICAgICAweDAwMDAwMDEwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCBob3Jpem9udGFsbHkgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9WRkxJUCAgICAgICAweDAwMDAwMDIwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCB2ZXJ0aWNhbGx5ICovCisKKy8qIGZpZWxkICdzdGF0dXMnIC0gYW5hbG9nICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fSF9MT0NLICAgMHgwMDAwMDEwMCAgLyogTm8gaG9yaXpvbnRhbCBzeW5jIGxvY2sgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9DT0xPUl9LSUxMICAweDAwMDAwMjAwICAvKiBDb2xvciBraWxsZXIgaXMgYWN0aXZlICovCisKKy8qIGZpZWxkICdzdGF0dXMnIC0gZGlnaXRhbCAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX1NZTkMgICAgIDB4MDAwMTAwMDAgIC8qIE5vIHN5bmNocm9uaXphdGlvbiBsb2NrICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fRVFVICAgICAgMHgwMDAyMDAwMCAgLyogTm8gZXF1YWxpemVyIGxvY2sgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSICAweDAwMDQwMDAwICAvKiBDYXJyaWVyIHJlY292ZXJ5IGZhaWxlZCAqLworCisvKiBmaWVsZCAnc3RhdHVzJyAtIFZDUiBhbmQgc2V0LXRvcCBib3ggKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9NQUNST1ZJU0lPTiAweDAxMDAwMDAwICAvKiBNYWNyb3Zpc2lvbiBkZXRlY3RlZCAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX0FDQ0VTUyAgIDB4MDIwMDAwMDAgIC8qIENvbmRpdGlvbmFsIGFjY2VzcyBkZW5pZWQgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9WVFIgICAgICAgICAweDA0MDAwMDAwICAvKiBWVFIgdGltZSBjb25zdGFudCAqLworCisvKgorICogICAgICBWIEkgRCBFIE8gICBPIFUgVCBQIFUgVCBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dCI+djRsMl9vdXRwdXQ8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgIGluZGV4OyAgICAgICAgICAgICAvKiAgV2hpY2ggb3V0cHV0ICovCisgICAgICAgIF9fdTggICAgICAgICBuYW1lWzMyXTsgICAgICAgICAgLyogIExhYmVsICovCisgICAgICAgIF9fdTMyICAgICAgICB0eXBlOyAgICAgICAgICAgICAgLyogIFR5cGUgb2Ygb3V0cHV0ICovCisgICAgICAgIF9fdTMyICAgICAgICBhdWRpb3NldDsgICAgICAgICAgLyogIEFzc29jaWF0ZWQgYXVkaW9zIChiaXRmaWVsZCkgKi8KKyAgICAgICAgX191MzIgICAgICAgIG1vZHVsYXRvcjsgICAgICAgICAvKiAgQXNzb2NpYXRlZCBtb2R1bGF0b3IgKi8KKyAgICAgICAgdjRsMl9zdGRfaWQgIHN0ZDsKKyAgICAgICAgX191MzIgICAgICAgIHJlc2VydmVkWzRdOworfTsKKy8qICBWYWx1ZXMgZm9yIHRoZSAndHlwZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1IgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0cgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZICAgICAgIDMKKworLyoKKyAqICAgICAgQyBPIE4gVCBSIE8gTCBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbnRyb2wiPnY0bDJfY29udHJvbDwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBpZDsKKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgdmFsdWU7Cit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1leHQtY29udHJvbCI+djRsMl9leHRfY29udHJvbDwvbGluaz4geworICAgICAgICBfX3UzMiBpZDsKKyAgICAgICAgX191MzIgc2l6ZTsKKyAgICAgICAgX191MzIgcmVzZXJ2ZWQyWzFdOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgX19zMzIgdmFsdWU7CisgICAgICAgICAgICAgICAgX19zNjQgdmFsdWU2NDsKKyAgICAgICAgICAgICAgICBjaGFyICpzdHJpbmc7CisgICAgICAgIH07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2xzIj52NGwyX2V4dF9jb250cm9sczwvbGluaz4geworICAgICAgICBfX3UzMiBjdHJsX2NsYXNzOworICAgICAgICBfX3UzMiBjb3VudDsKKyAgICAgICAgX191MzIgZXJyb3JfaWR4OworICAgICAgICBfX3UzMiByZXNlcnZlZFsyXTsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2wiPnY0bDJfZXh0X2NvbnRyb2w8L2xpbms+ICpjb250cm9sczsKK307CisKKy8qICBWYWx1ZXMgZm9yIGN0cmxfY2xhc3MgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX1VTRVIgMHgwMDk4MDAwMCAvKiBPbGQtc3R5bGUgJ3VzZXInIGNvbnRyb2xzICovCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19NUEVHIDB4MDA5OTAwMDAgLyogTVBFRy1jb21wcmVzc2lvbiBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIDB4MDA5YTAwMDAgICAgICAgLyogQ2FtZXJhIGNsYXNzIGNvbnRyb2xzICovCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19GTV9UWCAweDAwOWIwMDAwICAgICAgICAvKiBGTSBNb2R1bGF0b3IgY29udHJvbCBjbGFzcyAqLworCisjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICAgICAgICAgKDB4MGZmZmZmZmYpCisjZGVmaW5lIFY0TDJfQ1RSTF9JRDJDTEFTUyhpZCkgICAgKChpZCkgJmFtcDsgMHgwZmZmMDAwMFVMKQorI2RlZmluZSBWNEwyX0NUUkxfRFJJVkVSX1BSSVYoaWQpICgoKGlkKSAmYW1wOyAweGZmZmYpICZndDs9IDB4MTAwMCkKKworLyogIFVzZWQgaW4gdGhlIFZJRElPQ19RVUVSWUNUUkwgaW9jdGwgZm9yIHF1ZXJ5aW5nIGNvbnRyb2xzICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1xdWVyeWN0cmwiPnY0bDJfcXVlcnljdHJsPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgIGlkOworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItY3RybC10eXBlIj52NGwyX2N0cmxfdHlwZTwvbGluaz4gIHR5cGU7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgIG5hbWVbMzJdOyAgLyogV2hhdGV2ZXIgKi8KKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgbWluaW11bTsgICAvKiBOb3RlIHNpZ25lZG5lc3MgKi8KKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgbWF4aW11bTsKKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgc3RlcDsKKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgZGVmYXVsdF92YWx1ZTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgZmxhZ3M7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgIHJlc2VydmVkWzJdOworfTsKKworLyogIFVzZWQgaW4gdGhlIFZJRElPQ19RVUVSWU1FTlUgaW9jdGwgZm9yIHF1ZXJ5aW5nIG1lbnUgaXRlbXMgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXF1ZXJ5bWVudSI+djRsMl9xdWVyeW1lbnU8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgIGlkOworICAgICAgICBfX3UzMiAgICAgICAgICAgaW5kZXg7CisgICAgICAgIF9fdTggICAgICAgICAgICBuYW1lWzMyXTsgICAgICAgLyogV2hhdGV2ZXIgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgIHJlc2VydmVkOworfTsKKworLyogIENvbnRyb2wgZmxhZ3MgICovCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSAgICAgICAgMHgwMDA0CisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1VQREFURSAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1NMSURFUiAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1dSSVRFX09OTFkgICAgICAgMHgwMDQwCisKKy8qICBRdWVyeSBmbGFnLCB0byBiZSBPUmVkIHdpdGggdGhlIGNvbnRyb2wgSUQgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMICAgICAgICAweDgwMDAwMDAwCisKKy8qICBVc2VyLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLworI2RlZmluZSBWNEwyX0NJRF9CQVNFICAgICAgICAgICAgICAgICAgIChWNEwyX0NUUkxfQ0xBU1NfVVNFUiB8IDB4OTAwKQorI2RlZmluZSBWNEwyX0NJRF9VU0VSX0JBU0UgICAgICAgICAgICAgIFY0TDJfQ0lEX0JBU0UKKy8qICBJRHMgcmVzZXJ2ZWQgZm9yIGRyaXZlciBzcGVjaWZpYyBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgICAgICAgICAgIDB4MDgwMDAwMDAKKworI2RlZmluZSBWNEwyX0NJRF9VU0VSX0NMQVNTICAgICAgICAgICAgIChWNEwyX0NUUkxfQ0xBU1NfVVNFUiB8IDEpCisjZGVmaW5lIFY0TDJfQ0lEX0JSSUdIVE5FU1MgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMCkKKyNkZWZpbmUgVjRMMl9DSURfQ09OVFJBU1QgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxKQorI2RlZmluZSBWNEwyX0NJRF9TQVRVUkFUSU9OICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIpCisjZGVmaW5lIFY0TDJfQ0lEX0hVRSAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMykKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fVk9MVU1FICAgICAgICAgICAoVjRMMl9DSURfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBU1MgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrNykKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fVFJFQkxFICAgICAgICAgICAoVjRMMl9DSURfQkFTRSs4KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19NVVRFICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzkpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMTApCisjZGVmaW5lIFY0TDJfQ0lEX0JMQUNLX0xFVkVMICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMTEpIC8qIERlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFICAgICAoVjRMMl9DSURfQkFTRSsxMikKKyNkZWZpbmUgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSAgICAgICAoVjRMMl9DSURfQkFTRSsxMykKKyNkZWZpbmUgVjRMMl9DSURfUkVEX0JBTEFOQ0UgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNCkKKyNkZWZpbmUgVjRMMl9DSURfQkxVRV9CQUxBTkNFICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNSkKKyNkZWZpbmUgVjRMMl9DSURfR0FNTUEgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNikKKyNkZWZpbmUgVjRMMl9DSURfV0hJVEVORVNTICAgICAgICAgICAgICAoVjRMMl9DSURfR0FNTUEpIC8qIERlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkUgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNykKKyNkZWZpbmUgVjRMMl9DSURfQVVUT0dBSU4gICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxOCkKKyNkZWZpbmUgVjRMMl9DSURfR0FJTiAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxOSkKKyNkZWZpbmUgVjRMMl9DSURfSEZMSVAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyMCkKKyNkZWZpbmUgVjRMMl9DSURfVkZMSVAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyMSkKKworLyogRGVwcmVjYXRlZDsgdXNlIFY0TDJfQ0lEX1BBTl9SRVNFVCBhbmQgVjRMMl9DSURfVElMVF9SRVNFVCAqLworI2RlZmluZSBWNEwyX0NJRF9IQ0VOVEVSICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIyKQorI2RlZmluZSBWNEwyX0NJRF9WQ0VOVEVSICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIzKQorCisjZGVmaW5lIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZICAgKFY0TDJfQ0lEX0JBU0UrMjQpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItcG93ZXItbGluZS1mcmVxdWVuY3kiPnY0bDJfcG93ZXJfbGluZV9mcmVxdWVuY3k8L2xpbms+IHsKKyAgICAgICAgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgID0gMCwKKyAgICAgICAgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAgICAgID0gMSwKKyAgICAgICAgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAgICAgID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX0hVRV9BVVRPICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyNSkKKyNkZWZpbmUgVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSAgICAgIChWNEwyX0NJRF9CQVNFKzI2KQorI2RlZmluZSBWNEwyX0NJRF9TSEFSUE5FU1MgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMjcpCisjZGVmaW5lIFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04gICAgICAgICAoVjRMMl9DSURfQkFTRSsyOCkKKyNkZWZpbmUgVjRMMl9DSURfQ0hST01BX0FHQyAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzI5KQorI2RlZmluZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVIgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzApCisjZGVmaW5lIFY0TDJfQ0lEX0NPTE9SRlggICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMSkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1jb2xvcmZ4Ij52NGwyX2NvbG9yZng8L2xpbms+IHsKKyAgICAgICAgVjRMMl9DT0xPUkZYX05PTkUgICAgICAgPSAwLAorICAgICAgICBWNEwyX0NPTE9SRlhfQlcgICAgICAgICA9IDEsCisgICAgICAgIFY0TDJfQ09MT1JGWF9TRVBJQSAgICAgID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9CUklHSFRORVNTICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMikKKyNkZWZpbmUgVjRMMl9DSURfQkFORF9TVE9QX0ZJTFRFUiAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzMzKQorCisvKiBsYXN0IENJRCArIDEgKi8KKyNkZWZpbmUgVjRMMl9DSURfTEFTVFAxICAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzM0KQorCisvKiAgTVBFRy1jbGFzcyBjb250cm9sIElEcyBkZWZpbmVkIGJ5IFY0TDIgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19CQVNFICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4OTAwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NMQVNTICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMSkKKworLyogIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFICAgICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSswKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXR5cGUiPnY0bDJfbXBlZ19zdHJlYW1fdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMgICA9IDAsIC8qIE1QRUctMiBwcm9ncmFtIHN0cmVhbSAqLworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMgICA9IDEsIC8qIE1QRUctMiB0cmFuc3BvcnQgc3RyZWFtICovCisgICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9TUyAgID0gMiwgLyogTVBFRy0xIHN5c3RlbSBzdHJlYW0gKi8KKyAgICAgICAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX0RWRCAgPSAzLCAvKiBNUEVHLTIgRFZELWNvbXBhdGlibGUgc3RyZWFtICovCisgICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9WQ0QgID0gNCwgLyogTVBFRy0xIFZDRC1jb21wYXRpYmxlIHN0cmVhbSAqLworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCA9IDUsIC8qIE1QRUctMiBTVkNELWNvbXBhdGlibGUgc3RyZWFtICovCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU8gICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU8gICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSszKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU8gICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU8gICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs2KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs3KQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPnY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdDwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSA9IDAsICAvKiBObyBWQkkgaW4gdGhlIE1QRUcgc3RyZWFtICovCisgICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWID0gMSwgIC8qIFZCSSBpbiBwcml2YXRlIHBhY2tldHMsIElWVFYgZm9ybWF0ICovCit9OworCisvKiAgTVBFRyBhdWRpbyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVEgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDApCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1zYW1wbGluZy1mcmVxIj52NGwyX21wZWdfYXVkaW9fc2FtcGxpbmdfZnJlcTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAgPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAxKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmciPnY0bDJfbXBlZ19hdWRpb19lbmNvZGluZzwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMSA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzMgPSAyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDICAgICA9IDMsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMgICAgID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURSAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLWwxLWJpdHJhdGUiPnY0bDJfbXBlZ19hdWRpb19sMV9iaXRyYXRlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySyAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV82NEsgID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfOTZLICA9IDIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzEyOEsgPSAzLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xNjBLID0gNCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTkySyA9IDUsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzIyNEsgPSA2LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yNTZLID0gNywKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjg4SyA9IDgsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMyMEsgPSA5LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zNTJLID0gMTAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM4NEsgPSAxMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDE2SyA9IDEyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80NDhLID0gMTMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEUgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDMpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1sMi1iaXRyYXRlIj52NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMksgID0gMCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzU2SyAgPSAyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV82NEsgID0gMywKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfODBLICA9IDQsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzk2SyAgPSA1LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMTJLID0gNiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTI4SyA9IDcsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE2MEsgPSA4LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLID0gOSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjI0SyA9IDEwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLID0gMTEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMyMEsgPSAxMiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SyA9IDEzLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA0KQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctYXVkaW8tbDMtYml0cmF0ZSI+djRsMl9tcGVnX2F1ZGlvX2wzX2JpdHJhdGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQwSyAgPSAxLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80OEsgID0gMiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNTZLICA9IDMsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzY0SyAgPSA0LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV84MEsgID0gNSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfOTZLICA9IDYsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzExMksgPSA3LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xMjhLID0gOCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTYwSyA9IDksCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MksgPSAxMCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMjI0SyA9IDExLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yNTZLID0gMTIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEsgPSAxMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSAgICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwNSkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLW1vZGUiPnY0bDJfbXBlZ19hdWRpb19tb2RlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyAgICAgICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTyA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0RVQUwgICAgICAgICA9IDIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX01PTk8gICAgICAgICA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDYpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbiI+djRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80ICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF84ICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xMiA9IDIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDcpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1lbXBoYXNpcyI+djRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FICAgICAgICAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfNTBfRElWXzE1X3VTID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNyAgICA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQyAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDgpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1jcmMiPnY0bDJfbXBlZ19hdWRpb19jcmM8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0NSQ19OT05FICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NVVRFICAgICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzExMSkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLWFjMy1iaXRyYXRlIj52NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySyAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDBLICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80OEsgID0gMiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SyAgPSAzLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjRLICA9IDQsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV84MEsgID0gNSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SyAgPSA2LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTEySyA9IDcsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMjhLID0gOCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE2MEsgPSA5LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTkySyA9IDEwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0SyA9IDExLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SyA9IDEyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzIwSyA9IDEzLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SyA9IDE0LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SyA9IDE1LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTEySyA9IDE2LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTc2SyA9IDE3LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjQwSyA9IDE4LAorfTsKKworLyogIE1QRUcgdmlkZW8gKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORyAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmlkZW8tZW5jb2RpbmciPnY0bDJfbXBlZ192aWRlb19lbmNvZGluZzwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xICAgICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIgICAgID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMgPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QgICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAxKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmlkZW8tYXNwZWN0Ij52NGwyX21wZWdfdmlkZW9fYXNwZWN0PC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxICAgICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzICAgICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSAgICA9IDIsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMjIxeDEwMCA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkUgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwMykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRSAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDUpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwNikKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZpZGVvLWJpdHJhdGUtbW9kZSI+djRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiA9IDAsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSID0gMSwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUsgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA4KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT04gKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURSAgICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIxMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVViAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjExKQorCisvKiAgTVBFRy1jbGFzcyBjb250cm9sIElEcyBzcGVjaWZpYyB0byB0aGUgQ1gyMzQxeCBkcml2ZXIgYXMgZGVmaW5lZCBieSBWNEwyICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMDAwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERSAgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSswKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctY3gyMzQxeC12aWRlby1zcGF0aWFsLWZpbHRlci1tb2RlIj52NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPICAgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRSAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMikKK2VudW0gPGxpbmsgbGlua2VuZD0ibHVtYS1zcGF0aWFsLWZpbHRlci10eXBlIj52NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX1ZFUlQgICAgICAgICAgICAgID0gMiwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX0hWX1NFUEFSQUJMRSAgICAgID0gMywKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX1NZTV9OT05fU0VQQVJBQkxFID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRSAgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCitlbnVtIDxsaW5rIGxpbmtlbmQ9ImNocm9tYS1zcGF0aWFsLWZpbHRlci10eXBlIj52NGwyX21wZWdfY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgICAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFICAgICAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNCkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tdGVtcG9yYWwtZmlsdGVyLW1vZGUiPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCisgICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX0FVVE8gICA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs2KQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUiPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfT0ZGICAgICAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SICAgICAgPSAxLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfVkVSVCAgICAgPSAyLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SX1ZFUlQgPSAzLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfRElBRyAgICAgPSA0LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9UT1AgICAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX0JPVFRPTSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX1RPUCAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMTApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9TVFJFQU1fSU5TRVJUX05BVl9QQUNLRVRTICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzExKQorCisvKiAgQ2FtZXJhIGNsYXNzIGNvbnRyb2wgSURzICovCisjZGVmaW5lIFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFICAgICAgKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKKyNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDEpCisKKyNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQVVUTyAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxKQorZW51bSAgPGxpbmsgbGlua2VuZD0idjRsMi1leHBvc3VyZS1hdXRvLXR5cGUiPnY0bDJfZXhwb3N1cmVfYXV0b190eXBlPC9saW5rPiB7CisgICAgICAgIFY0TDJfRVhQT1NVUkVfQVVUTyA9IDAsCisgICAgICAgIFY0TDJfRVhQT1NVUkVfTUFOVUFMID0gMSwKKyAgICAgICAgVjRMMl9FWFBPU1VSRV9TSFVUVEVSX1BSSU9SSVRZID0gMiwKKyAgICAgICAgVjRMMl9FWFBPU1VSRV9BUEVSVFVSRV9QUklPUklUWSA9IDMKK307CisjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMikKKyNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWSAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszKQorCisjZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRUxBVElWRSAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNCkKKyNkZWZpbmUgVjRMMl9DSURfVElMVF9SRUxBVElWRSAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9QQU5fUkVTRVQgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNykKKworI2RlZmluZSBWNEwyX0NJRF9QQU5fQUJTT0xVVEUgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzgpCisjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOSkKKworI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURSAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEwKQorI2RlZmluZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRSAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzExKQorI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BVVRPICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEyKQorCisjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQUJTT0xVVEUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTMpCisjZGVmaW5lIFY0TDJfQ0lEX1pPT01fUkVMQVRJVkUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTQpCisjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQ09OVElOVU9VUyAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTUpCisKKyNkZWZpbmUgVjRMMl9DSURfUFJJVkFDWSAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNikKKworLyogRk0gTW9kdWxhdG9yIGNsYXNzIGNvbnRyb2wgSURzICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgICAgICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMHg5MDApCisjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTICAgICAgICAgICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMSkKKworI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUEkgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAyKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFRZICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAzKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRSAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA1KQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVCAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA2KQorCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfRU5BQkxFRCAgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY0KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRSAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA2NSkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fTElNSVRFUl9ERVZJQVRJT04gICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjYpCisKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRCAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODApCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU4gICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgxKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MikKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUUgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODMpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDg0KQorCisjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRCAgICAgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk2KQorI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTiAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA5NykKKyNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1kgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTgpCisKKyNkZWZpbmUgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUyAgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXByZWVtcGhhc2lzIj52NGwyX3ByZWVtcGhhc2lzPC9saW5rPiB7CisgICAgICAgIFY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQgICAgICAgPSAwLAorICAgICAgICBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTICAgICAgICAgID0gMSwKKyAgICAgICAgVjRMMl9QUkVFTVBIQVNJU183NV91UyAgICAgICAgICA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTMpCisjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExNCkKKworLyoKKyAqICAgICAgVCBVIE4gSSBOIEcKKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdHVuZXIiPnY0bDJfdHVuZXI8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgICAgIG5hbWVbMzJdOworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItdHVuZXItdHlwZSI+djRsMl90dW5lcl90eXBlPC9saW5rPiAgICB0eXBlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByYW5nZWxvdzsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmFuZ2VoaWdoOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByeHN1YmNoYW5zOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBhdWRtb2RlOworICAgICAgICBfX3MzMiAgICAgICAgICAgICAgICAgICBzaWduYWw7CisgICAgICAgIF9fczMyICAgICAgICAgICAgICAgICAgIGFmYzsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tb2R1bGF0b3IiPnY0bDJfbW9kdWxhdG9yPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGluZGV4OworICAgICAgICBfX3U4ICAgICAgICAgICAgICAgICAgICBuYW1lWzMyXTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmFuZ2Vsb3c7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJhbmdlaGlnaDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgdHhzdWJjaGFuczsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTE9XICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTk9STSAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU1RFUkVPICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzIgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU0FQICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzEgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTICAgICAgICAgICAgICAweDAwODAKKworLyogIEZsYWdzIGZvciB0aGUgJ3J4c3ViY2hhbnMnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX01PTk8gICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NURVJFTyAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcyICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NBUCAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcxICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1JEUyAgICAgICAgICAgICAgMHgwMDEwCisKKy8qICBWYWx1ZXMgZm9yIHRoZSAnYXVkbW9kZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX01PTk8gICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcyICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NBUCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyICAgICAweDAwMDQKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJlcXVlbmN5Ij52NGwyX2ZyZXF1ZW5jeTwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgdHVuZXI7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi10dW5lci10eXBlIj52NGwyX3R1bmVyX3R5cGU8L2xpbms+ICB0eXBlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgZnJlcXVlbmN5OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbOF07Cit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1ody1mcmVxLXNlZWsiPnY0bDJfaHdfZnJlcV9zZWVrPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICB0dW5lcjsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXR1bmVyLXR5cGUiPnY0bDJfdHVuZXJfdHlwZTwvbGluaz4gIHR5cGU7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICBzZWVrX3Vwd2FyZDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgIHdyYXBfYXJvdW5kOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbOF07Cit9OworCisvKgorICogICAgICBSIEQgUworICovCisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJkcy1kYXRhIj52NGwyX3Jkc19kYXRhPC9saW5rPiB7CisgICAgICAgIF9fdTggICAgbHNiOworICAgICAgICBfX3U4ICAgIG1zYjsKKyAgICAgICAgX191OCAgICBibG9jazsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX01TSyAgICAgICAweDcKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQSAgICAgICAgIDAKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQiAgICAgICAgIDEKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQyAgICAgICAgIDIKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfRCAgICAgICAgIDMKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQ19BTFQgICAgIDQKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfSU5WQUxJRCAgIDcKKworI2RlZmluZSBWNEwyX1JEU19CTE9DS19DT1JSRUNURUQgMHg0MAorI2RlZmluZSBWNEwyX1JEU19CTE9DS19FUlJPUiAgICAgMHg4MAorCisvKgorICogICAgICBBIFUgRCBJIE8KKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+IHsKKyAgICAgICAgX191MzIgICBpbmRleDsKKyAgICAgICAgX191OCAgICBuYW1lWzMyXTsKKyAgICAgICAgX191MzIgICBjYXBhYmlsaXR5OworICAgICAgICBfX3UzMiAgIG1vZGU7CisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMl07Cit9OworCisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9BVURDQVBfU1RFUkVPICAgICAgICAgICAgICAweDAwMDAxCisjZGVmaW5lIFY0TDJfQVVEQ0FQX0FWTCAgICAgICAgICAgICAgICAgMHgwMDAwMgorCisvKiAgRmxhZ3MgZm9yIHRoZSAnbW9kZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9BVURNT0RFX0FWTCAgICAgICAgICAgICAgICAweDAwMDAxCisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWF1ZGlvb3V0Ij52NGwyX2F1ZGlvb3V0PC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgaW5kZXg7CisgICAgICAgIF9fdTggICAgbmFtZVszMl07CisgICAgICAgIF9fdTMyICAgY2FwYWJpbGl0eTsKKyAgICAgICAgX191MzIgICBtb2RlOworICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzJdOworfTsKKworLyoKKyAqICAgICAgTSBQIEUgRyAgIFMgRSBSIFYgSSBDIEUgUworICoKKyAqICAgICAgTk9URTogRVhQRVJJTUVOVEFMIEFQSQorICovCisjaWYgMSAvKktFRVAqLworI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfSSAgICAoMCkKKyNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX1AgICAgKDEpCisjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9CICAgICgyKQorI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfTUFTSyAoMHhmKQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4LWVudHJ5Ij52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+IHsKKyAgICAgICAgX191NjQgb2Zmc2V0OworICAgICAgICBfX3U2NCBwdHM7CisgICAgICAgIF9fdTMyIGxlbmd0aDsKKyAgICAgICAgX191MzIgZmxhZ3M7CisgICAgICAgIF9fdTMyIHJlc2VydmVkWzJdOworfTsKKworI2RlZmluZSBWNEwyX0VOQ19JRFhfRU5UUklFUyAoNjQpCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4Ij52NGwyX2VuY19pZHg8L2xpbms+IHsKKyAgICAgICAgX191MzIgZW50cmllczsKKyAgICAgICAgX191MzIgZW50cmllc19jYXA7CisgICAgICAgIF9fdTMyIHJlc2VydmVkWzRdOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4LWVudHJ5Ij52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+IGVudHJ5W1Y0TDJfRU5DX0lEWF9FTlRSSUVTXTsKK307CisKKworI2RlZmluZSBWNEwyX0VOQ19DTURfU1RBUlQgICAgICAoMCkKKyNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUT1AgICAgICAgKDEpCisjZGVmaW5lIFY0TDJfRU5DX0NNRF9QQVVTRSAgICAgICgyKQorI2RlZmluZSBWNEwyX0VOQ19DTURfUkVTVU1FICAgICAoMykKKworLyogRmxhZ3MgZm9yIFY0TDJfRU5DX0NNRF9TVE9QICovCisjZGVmaW5lIFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQgICAgKDEgJmx0OyZsdDsgMCkKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZW5jb2Rlci1jbWQiPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+IHsKKyAgICAgICAgX191MzIgY21kOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBkYXRhWzhdOworICAgICAgICAgICAgICAgIH0gcmF3OworICAgICAgICB9OworfTsKKworI2VuZGlmCisKKworLyoKKyAqICAgICAgRCBBIFQgQSAgIFMgRSBSIFYgSSBDIEUgUyAgICggViBCIEkgKQorICoKKyAqICAgICAgRGF0YSBzZXJ2aWNlcyBBUEkgYnkgTWljaGFlbCBTY2hpbWVrCisgKi8KKworLyogUmF3IFZCSSAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdmJpLWZvcm1hdCI+djRsMl92YmlfZm9ybWF0PC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgc2FtcGxpbmdfcmF0ZTsgICAgICAgICAgLyogaW4gMSBIeiAqLworICAgICAgICBfX3UzMiAgIG9mZnNldDsKKyAgICAgICAgX191MzIgICBzYW1wbGVzX3Blcl9saW5lOworICAgICAgICBfX3UzMiAgIHNhbXBsZV9mb3JtYXQ7ICAgICAgICAgIC8qIFY0TDJfUElYX0ZNVF8qICovCisgICAgICAgIF9fczMyICAgc3RhcnRbMl07CisgICAgICAgIF9fdTMyICAgY291bnRbMl07CisgICAgICAgIF9fdTMyICAgZmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogVjRMMl9WQklfKiAqLworICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzJdOyAgICAgICAgICAgIC8qIG11c3QgYmUgemVybyAqLworfTsKKworLyogIFZCSSBmbGFncyAgKi8KKyNkZWZpbmUgVjRMMl9WQklfVU5TWU5DICAgICAgICAgKDEgJmx0OyZsdDsgMCkKKyNkZWZpbmUgVjRMMl9WQklfSU5URVJMQUNFRCAgICAgKDEgJmx0OyZsdDsgMSkKKworLyogU2xpY2VkIFZCSQorICoKKyAqICAgIFRoaXMgaW1wbGVtZW50cyBpcyBhIHByb3Bvc2FsIFY0TDIgQVBJIHRvIGFsbG93IFNMSUNFRCBWQkkKKyAqIHJlcXVpcmVkIGZvciBzb21lIGhhcmR3YXJlIGVuY29kZXJzLiBJdCBzaG91bGQgY2hhbmdlIHdpdGhvdXQKKyAqIG5vdGljZSBpbiB0aGUgZGVmaW5pdGl2ZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zbGljZWQtdmJpLWZvcm1hdCI+djRsMl9zbGljZWRfdmJpX2Zvcm1hdDwvbGluaz4geworICAgICAgICBfX3UxNiAgIHNlcnZpY2Vfc2V0OworICAgICAgICAvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCisgICAgICAgICAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWxzIGZyYW1lIGxpbmVzIDMxMy0zMzYgZm9yIDYyNSBsaW5lIHZpZGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCisgICAgICAgIF9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07CisgICAgICAgIF9fdTMyICAgaW9fc2l6ZTsKKyAgICAgICAgX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAvKiBtdXN0IGJlIHplcm8gKi8KK307CisKKy8qIFRlbGV0ZXh0IFdvcmxkIFN5c3RlbSBUZWxldGV4dAorICAgKFdTVCksIGRlZmluZWQgb24gSVRVLVIgQlQuNjUzLTIgKi8KKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAgICAgICAgICAoMHgwMDAxKQorLyogVmlkZW8gUHJvZ3JhbSBTeXN0ZW0sIGRlZmluZWQgb24gRVRTIDMwMCAyMzEqLworI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDA0MDApCisvKiBDbG9zZWQgQ2FwdGlvbiwgZGVmaW5lZCBvbiBFSUEtNjA4ICovCisjZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICAgICAgKDB4MTAwMCkKKy8qIFdpZGUgU2NyZWVuIFN5c3RlbSwgZGVmaW5lZCBvbiBJVFUtUiBCVDExMTkuMSAqLworI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNjI1ICAgICAgICAgICAgICgweDQwMDApCisKKyNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zbGljZWQtdmJpLWNhcCI+djRsMl9zbGljZWRfdmJpX2NhcDwvbGluaz4geworICAgICAgICBfX3UxNiAgIHNlcnZpY2Vfc2V0OworICAgICAgICAvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCisgICAgICAgICAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWxzIGZyYW1lIGxpbmVzIDMxMy0zMzYgZm9yIDYyNSBsaW5lIHZpZGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCisgICAgICAgIF9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKyAgICAgICAgX191MzIgICByZXNlcnZlZFszXTsgICAgLyogbXVzdCBiZSAwICovCit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zbGljZWQtdmJpLWRhdGEiPnY0bDJfc2xpY2VkX3ZiaV9kYXRhPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgaWQ7CisgICAgICAgIF9fdTMyICAgZmllbGQ7ICAgICAgICAgIC8qIDA6IGZpcnN0IGZpZWxkLCAxOiBzZWNvbmQgZmllbGQgKi8KKyAgICAgICAgX191MzIgICBsaW5lOyAgICAgICAgICAgLyogMS0yMyAqLworICAgICAgICBfX3UzMiAgIHJlc2VydmVkOyAgICAgICAvKiBtdXN0IGJlIDAgKi8KKyAgICAgICAgX191OCAgICBkYXRhWzQ4XTsKK307CisKKy8qCisgKiBTbGljZWQgVkJJIGRhdGEgaW5zZXJ0ZWQgaW50byBNUEVHIFN0cmVhbXMKKyAqLworCisvKgorICogVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFY6CisgKgorICogU3RydWN0dXJlIG9mIHBheWxvYWQgY29udGFpbmVkIGluIGFuIE1QRUcgMiBQcml2YXRlIFN0cmVhbSAxIFBFUyBQYWNrZXQgaW4gYW4KKyAqIE1QRUctMiBQcm9ncmFtIFBhY2sgdGhhdCBjb250YWlucyBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViBTbGljZWQgVkJJCisgKiBkYXRhCisgKgorICogTm90ZSwgdGhlIE1QRUctMiBQcm9ncmFtIFBhY2sgYW5kIFByaXZhdGUgU3RyZWFtIDEgUEVTIHBhY2tldCBoZWFkZXIKKyAqIGRlZmluaXRpb25zIGFyZSBub3QgaW5jbHVkZWQgaGVyZS4gIFNlZSB0aGUgTVBFRy0yIHNwZWNpZmljYXRpb25zIGZvciBkZXRhaWxzCisgKiBvbiB0aGVzZSBoZWFkZXJzLgorICovCisKKy8qIExpbmUgdHlwZSBJRHMgKi8KKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1RFTEVURVhUX0IgICAgICgxKQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfQ0FQVElPTl81MjUgICAgKDQpCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1ICAgICAgICAoNSkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUyAgICAgICAgICAgICg3KQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwLWxpbmUiPnY0bDJfbXBlZ192YmlfaXR2MF9saW5lPC9saW5rPiB7CisgICAgICAgIF9fdTggaWQ7ICAgICAgICAvKiBPbmUgb2YgVjRMMl9NUEVHX1ZCSV9JVlRWXyogYWJvdmUgKi8KKyAgICAgICAgX191OCBkYXRhWzQyXTsgIC8qIFNsaWNlZCBWQkkgZGF0YSBmb3IgdGhlIGxpbmUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwIj52NGwyX21wZWdfdmJpX2l0djA8L2xpbms+IHsKKyAgICAgICAgX19sZTMyIGxpbmVtYXNrWzJdOyAvKiBCaXRtYXNrcyBvZiBWQkkgc2VydmljZSBsaW5lcyBwcmVzZW50ICovCisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtbGluZSI+djRsMl9tcGVnX3ZiaV9pdHYwX2xpbmU8L2xpbms+IGxpbmVbMzVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtMSI+djRsMl9tcGVnX3ZiaV9JVFYwPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtbGluZSI+djRsMl9tcGVnX3ZiaV9pdHYwX2xpbmU8L2xpbms+IGxpbmVbMzZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMCAgICAgICAiaXR2MCIKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMSAgICAgICAiSVRWMCIKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktZm10LWl2dHYiPnY0bDJfbXBlZ192YmlfZm10X2l2dHY8L2xpbms+IHsKKyAgICAgICAgX191OCBtYWdpY1s0XTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAiPnY0bDJfbXBlZ192YmlfaXR2MDwvbGluaz4gaXR2MDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwLTEiPnY0bDJfbXBlZ192YmlfSVRWMDwvbGluaz4gSVRWMDsKKyAgICAgICAgfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogICAgICBBIEcgRyBSIEUgRyBBIFQgRSAgIFMgVCBSIFUgQyBUIFUgUiBFIFMKKyAqLworCisvKiAgICAgIFN0cmVhbSBkYXRhIGZvcm1hdAorICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPiB7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQiPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz4gICAgICAgICAgcGl4OyAgICAgLyogVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICovCisgICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItd2luZG93Ij52NGwyX3dpbmRvdzwvbGluaz4gICAgICAgICAgICAgIHdpbjsgICAgIC8qIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXZiaS1mb3JtYXQiPnY0bDJfdmJpX2Zvcm1hdDwvbGluaz4gICAgICAgICAgdmJpOyAgICAgLyogVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXNsaWNlZC12YmktZm9ybWF0Ij52NGwyX3NsaWNlZF92YmlfZm9ybWF0PC9saW5rPiAgIHNsaWNlZDsgIC8qIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICovCisgICAgICAgICAgICAgICAgX191OCAgICByYXdfZGF0YVsyMDBdOyAgICAgICAgICAgICAgICAgICAvKiB1c2VyLWRlZmluZWQgKi8KKyAgICAgICAgfSBmbXQ7Cit9OworCisKKy8qICAgICAgU3RyZWFtIHR5cGUtZGVwZW5kZW50IHBhcmFtZXRlcnMKKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc3RyZWFtcGFybSI+djRsMl9zdHJlYW1wYXJtPC9saW5rPiB7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcHR1cmVwYXJtIj52NGwyX2NhcHR1cmVwYXJtPC9saW5rPiBjYXB0dXJlOworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dHBhcm0iPnY0bDJfb3V0cHV0cGFybTwvbGluaz4gIG91dHB1dDsKKyAgICAgICAgICAgICAgICBfX3U4ICAgIHJhd19kYXRhWzIwMF07ICAvKiB1c2VyLWRlZmluZWQgKi8KKyAgICAgICAgfSBwYXJtOworfTsKKworLyoKKyAqICAgICAgQSBEIFYgQSBOIEMgRSBEICAgRCBFIEIgVSBHIEcgSSBOIEcKKyAqCisgKiAgICAgIE5PVEU6IEVYUEVSSU1FTlRBTCBBUEksIE5FVkVSIFJFTFkgT04gVEhJUyBJTiBBUFBMSUNBVElPTlMhCisgKiAgICAgIEZPUiBERUJVR0dJTkcsIFRFU1RJTkcgQU5EIElOVEVSTkFMIFVTRSBPTkxZIQorICovCisKKy8qIFZJRElPQ19EQkdfR19SRUdJU1RFUiBhbmQgVklESU9DX0RCR19TX1JFR0lTVEVSICovCisKKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0hPU1QgICAgICAgMCAgLyogTWF0Y2ggYWdhaW5zdCBjaGlwIElEIG9uIGhvc3QgKDAgZm9yIHRoZSBob3N0KSAqLworI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUiAxICAvKiBNYXRjaCBhZ2FpbnN0IEkyQyBkcml2ZXIgbmFtZSAqLworI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgICAyICAvKiBNYXRjaCBhZ2FpbnN0IEkyQyA3LWJpdCBhZGRyZXNzICovCisjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9BQzk3ICAgICAgIDMgIC8qIE1hdGNoIGFnYWluc3QgYW5jaWxpYXJ5IEFDOTcgY2hpcCAqLworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctbWF0Y2giPnY0bDJfZGJnX21hdGNoPC9saW5rPiB7CisgICAgICAgIF9fdTMyIHR5cGU7IC8qIE1hdGNoIHR5cGUgKi8KKyAgICAgICAgdW5pb24geyAgICAgLyogTWF0Y2ggdGhpcyBjaGlwLCBtZWFuaW5nIGRldGVybWluZWQgYnkgdHlwZSAqLworICAgICAgICAgICAgICAgIF9fdTMyIGFkZHI7CisgICAgICAgICAgICAgICAgY2hhciBuYW1lWzMyXTsKKyAgICAgICAgfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctcmVnaXN0ZXIiPnY0bDJfZGJnX3JlZ2lzdGVyPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWRiZy1tYXRjaCI+djRsMl9kYmdfbWF0Y2g8L2xpbms+IG1hdGNoOworICAgICAgICBfX3UzMiBzaXplOyAgICAgLyogcmVnaXN0ZXIgc2l6ZSBpbiBieXRlcyAqLworICAgICAgICBfX3U2NCByZWc7CisgICAgICAgIF9fdTY0IHZhbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLWNoaXAtaWRlbnQiPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+IHsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLW1hdGNoIj52NGwyX2RiZ19tYXRjaDwvbGluaz4gbWF0Y2g7CisgICAgICAgIF9fdTMyIGlkZW50OyAgICAgICAvKiBjaGlwIGlkZW50aWZpZXIgYXMgc3BlY2lmaWVkIGluICZsdDttZWRpYS92NGwyLWNoaXAtaWRlbnQuaCZndDsgKi8KKyAgICAgICAgX191MzIgcmV2aXNpb247ICAgIC8qIGNoaXAgcmV2aXNpb24sIGNoaXAgc3BlY2lmaWMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogICAgICBJIE8gQyBUIEwgICBDIE8gRCBFIFMgICBGIE8gUiAgIFYgSSBEIEUgTyAgIEQgRSBWIEkgQyBFIFMKKyAqCisgKi8KKyNkZWZpbmUgVklESU9DX1FVRVJZQ0FQICAgICAgICAgIF9JT1IoJ1YnLCAgMCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY2FwYWJpbGl0eSI+djRsMl9jYXBhYmlsaXR5PC9saW5rPikKKyNkZWZpbmUgVklESU9DX1JFU0VSVkVEICAgICAgICAgICBfSU8oJ1YnLCAgMSkKKyNkZWZpbmUgVklESU9DX0VOVU1fRk1UICAgICAgICAgX0lPV1IoJ1YnLCAgMiwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm10ZGVzYyI+djRsMl9mbXRkZXNjPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfRk1UICAgICAgICAgICAgX0lPV1IoJ1YnLCAgNCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm9ybWF0Ij52NGwyX2Zvcm1hdDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0ZNVCAgICAgICAgICAgIF9JT1dSKCdWJywgIDUsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZvcm1hdCI+djRsMl9mb3JtYXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfUkVRQlVGUyAgICAgICAgICBfSU9XUignVicsICA4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19RVUVSWUJVRiAgICAgICAgIF9JT1dSKCdWJywgIDksIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19GQlVGICAgICAgICAgICAgX0lPUignVicsIDEwLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFtZWJ1ZmZlciI+djRsMl9mcmFtZWJ1ZmZlcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0ZCVUYgICAgICAgICAgICBfSU9XKCdWJywgMTEsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYW1lYnVmZmVyIj52NGwyX2ZyYW1lYnVmZmVyPC9saW5rPikKKyNkZWZpbmUgVklESU9DX09WRVJMQVkgICAgICAgICAgIF9JT1coJ1YnLCAxNCwgaW50KQorI2RlZmluZSBWSURJT0NfUUJVRiAgICAgICAgICAgICBfSU9XUignVicsIDE1LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1idWZmZXIiPnY0bDJfYnVmZmVyPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0RRQlVGICAgICAgICAgICAgX0lPV1IoJ1YnLCAxNywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TVFJFQU1PTiAgICAgICAgICBfSU9XKCdWJywgMTgsIGludCkKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9GRiAgICAgICAgIF9JT1coJ1YnLCAxOSwgaW50KQorI2RlZmluZSBWSURJT0NfR19QQVJNICAgICAgICAgICBfSU9XUignVicsIDIxLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zdHJlYW1wYXJtIj52NGwyX3N0cmVhbXBhcm08L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19QQVJNICAgICAgICAgICBfSU9XUignVicsIDIyLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zdHJlYW1wYXJtIj52NGwyX3N0cmVhbXBhcm08L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19TVEQgICAgICAgICAgICAgX0lPUignVicsIDIzLCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX1NfU1REICAgICAgICAgICAgIF9JT1coJ1YnLCAyNCwgdjRsMl9zdGRfaWQpCisjZGVmaW5lIFZJRElPQ19FTlVNU1REICAgICAgICAgIF9JT1dSKCdWJywgMjUsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXN0YW5kYXJkIj52NGwyX3N0YW5kYXJkPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0VOVU1JTlBVVCAgICAgICAgX0lPV1IoJ1YnLCAyNiwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItaW5wdXQiPnY0bDJfaW5wdXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19DVFJMICAgICAgICAgICBfSU9XUignVicsIDI3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jb250cm9sIj52NGwyX2NvbnRyb2w8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19DVFJMICAgICAgICAgICBfSU9XUignVicsIDI4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jb250cm9sIj52NGwyX2NvbnRyb2w8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19UVU5FUiAgICAgICAgICBfSU9XUignVicsIDI5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi10dW5lciI+djRsMl90dW5lcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX1RVTkVSICAgICAgICAgICBfSU9XKCdWJywgMzAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXR1bmVyIj52NGwyX3R1bmVyPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfQVVESU8gICAgICAgICAgIF9JT1IoJ1YnLCAzMywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19BVURJTyAgICAgICAgICAgX0lPVygnVicsIDM0LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpbyI+djRsMl9hdWRpbzwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19RVUVSWUNUUkwgICAgICAgIF9JT1dSKCdWJywgMzYsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXF1ZXJ5Y3RybCI+djRsMl9xdWVyeWN0cmw8L2xpbms+KQorI2RlZmluZSBWSURJT0NfUVVFUllNRU5VICAgICAgICBfSU9XUignVicsIDM3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1xdWVyeW1lbnUiPnY0bDJfcXVlcnltZW51PC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfSU5QVVQgICAgICAgICAgIF9JT1IoJ1YnLCAzOCwgaW50KQorI2RlZmluZSBWSURJT0NfU19JTlBVVCAgICAgICAgICBfSU9XUignVicsIDM5LCBpbnQpCisjZGVmaW5lIFZJRElPQ19HX09VVFBVVCAgICAgICAgICBfSU9SKCdWJywgNDYsIGludCkKKyNkZWZpbmUgVklESU9DX1NfT1VUUFVUICAgICAgICAgX0lPV1IoJ1YnLCA0NywgaW50KQorI2RlZmluZSBWSURJT0NfRU5VTU9VVFBVVCAgICAgICBfSU9XUignVicsIDQ4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1vdXRwdXQiPnY0bDJfb3V0cHV0PC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfQVVET1VUICAgICAgICAgIF9JT1IoJ1YnLCA0OSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW9vdXQiPnY0bDJfYXVkaW9vdXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19BVURPVVQgICAgICAgICAgX0lPVygnVicsIDUwLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpb291dCI+djRsMl9hdWRpb291dDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19HX01PRFVMQVRPUiAgICAgIF9JT1dSKCdWJywgNTQsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1vZHVsYXRvciI+djRsMl9tb2R1bGF0b3I8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19NT0RVTEFUT1IgICAgICAgX0lPVygnVicsIDU1LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tb2R1bGF0b3IiPnY0bDJfbW9kdWxhdG9yPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfRlJFUVVFTkNZICAgICAgX0lPV1IoJ1YnLCA1Niwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJlcXVlbmN5Ij52NGwyX2ZyZXF1ZW5jeTwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0ZSRVFVRU5DWSAgICAgICBfSU9XKCdWJywgNTcsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyZXF1ZW5jeSI+djRsMl9mcmVxdWVuY3k8L2xpbms+KQorI2RlZmluZSBWSURJT0NfQ1JPUENBUCAgICAgICAgICBfSU9XUignVicsIDU4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wY2FwIj52NGwyX2Nyb3BjYXA8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19DUk9QICAgICAgICAgICBfSU9XUignVicsIDU5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wIj52NGwyX2Nyb3A8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19DUk9QICAgICAgICAgICAgX0lPVygnVicsIDYwLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wIj52NGwyX2Nyb3A8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19KUEVHQ09NUCAgICAgICAgX0lPUignVicsIDYxLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1qcGVnY29tcHJlc3Npb24iPnY0bDJfanBlZ2NvbXByZXNzaW9uPC9saW5rPikKKyNkZWZpbmUgVklESU9DX1NfSlBFR0NPTVAgICAgICAgIF9JT1coJ1YnLCA2Miwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItanBlZ2NvbXByZXNzaW9uIj52NGwyX2pwZWdjb21wcmVzc2lvbjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19RVUVSWVNURCAgICAgICAgICBfSU9SKCdWJywgNjMsIHY0bDJfc3RkX2lkKQorI2RlZmluZSBWSURJT0NfVFJZX0ZNVCAgICAgICAgICBfSU9XUignVicsIDY0LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPikKKyNkZWZpbmUgVklESU9DX0VOVU1BVURJTyAgICAgICAgX0lPV1IoJ1YnLCA2NSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+KQorI2RlZmluZSBWSURJT0NfRU5VTUFVRE9VVCAgICAgICBfSU9XUignVicsIDY2LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpb291dCI+djRsMl9hdWRpb291dDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19HX1BSSU9SSVRZICAgICAgICBfSU9SKCdWJywgNjcsIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1wcmlvcml0eSI+djRsMl9wcmlvcml0eTwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX1BSSU9SSVRZICAgICAgICBfSU9XKCdWJywgNjgsIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1wcmlvcml0eSI+djRsMl9wcmlvcml0eTwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1dSKCdWJywgNjksIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXNsaWNlZC12YmktY2FwIj52NGwyX3NsaWNlZF92YmlfY2FwPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0xPR19TVEFUVVMgICAgICAgICBfSU8oJ1YnLCA3MCkKKyNkZWZpbmUgVklESU9DX0dfRVhUX0NUUkxTICAgICAgX0lPV1IoJ1YnLCA3MSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2xzIj52NGwyX2V4dF9jb250cm9sczwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0VYVF9DVFJMUyAgICAgIF9JT1dSKCdWJywgNzIsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWV4dC1jb250cm9scyI+djRsMl9leHRfY29udHJvbHM8L2xpbms+KQorI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUyAgICBfSU9XUignVicsIDczLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1leHQtY29udHJvbHMiPnY0bDJfZXh0X2NvbnRyb2xzPC9saW5rPikKKyNpZiAxIC8qS0VFUCovCisjZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FU0laRVMgIF9JT1dSKCdWJywgNzQsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZybXNpemVlbnVtIj52NGwyX2ZybXNpemVlbnVtPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgX0lPV1IoJ1YnLCA3NSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbGVudW0iPnY0bDJfZnJtaXZhbGVudW08L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19FTkNfSU5ERVggICAgICAgX0lPUignVicsIDc2LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4Ij52NGwyX2VuY19pZHg8L2xpbms+KQorI2RlZmluZSBWSURJT0NfRU5DT0RFUl9DTUQgICAgICBfSU9XUignVicsIDc3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmNvZGVyLWNtZCI+djRsMl9lbmNvZGVyX2NtZDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19UUllfRU5DT0RFUl9DTUQgIF9JT1dSKCdWJywgNzgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWVuY29kZXItY21kIj52NGwyX2VuY29kZXJfY21kPC9saW5rPikKKyNlbmRpZgorCisjaWYgMSAvKktFRVAqLworLyogRXhwZXJpbWVudGFsLCBtZWFudCBmb3IgZGVidWdnaW5nLCB0ZXN0aW5nIGFuZCBpbnRlcm5hbCB1c2UuCisgICBPbmx5IGltcGxlbWVudGVkIGlmIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgZGVmaW5lZC4KKyAgIFlvdSBtdXN0IGJlIHJvb3QgdG8gdXNlIHRoZXNlIGlvY3Rscy4gTmV2ZXIgdXNlIHRoZXNlIGluIGFwcGxpY2F0aW9ucyEgKi8KKyNkZWZpbmUgVklESU9DX0RCR19TX1JFR0lTVEVSICAgIF9JT1coJ1YnLCA3OSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLXJlZ2lzdGVyIj52NGwyX2RiZ19yZWdpc3RlcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19EQkdfR19SRUdJU1RFUiAgIF9JT1dSKCdWJywgODAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWRiZy1yZWdpc3RlciI+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+KQorCisvKiBFeHBlcmltZW50YWwsIG1lYW50IGZvciBkZWJ1Z2dpbmcsIHRlc3RpbmcgYW5kIGludGVybmFsIHVzZS4KKyAgIE5ldmVyIHVzZSB0aGlzIGlvY3RsIGluIGFwcGxpY2F0aW9ucyEgKi8KKyNkZWZpbmUgVklESU9DX0RCR19HX0NISVBfSURFTlQgX0lPV1IoJ1YnLCA4MSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLWNoaXAtaWRlbnQiPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+KQorI2VuZGlmCisKKyNkZWZpbmUgVklESU9DX1NfSFdfRlJFUV9TRUVLICAgIF9JT1coJ1YnLCA4Miwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItaHctZnJlcS1zZWVrIj52NGwyX2h3X2ZyZXFfc2VlazwvbGluaz4pCisvKiBSZW1pbmRlcjogd2hlbiBhZGRpbmcgbmV3IGlvY3RscyBwbGVhc2UgYWRkIHN1cHBvcnQgZm9yIHRoZW0gdG8KKyAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGFzIHdlbGwhICovCisKKyNpZmRlZiBfX09MRF9WSURJT0NfCisvKiBmb3IgY29tcGF0aWJpbGl0eSwgd2lsbCBnbyBhd2F5IHNvbWUgZGF5ICovCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZX09MRCAgICAgIF9JT1dSKCdWJywgMTQsIGludCkKKyNkZWZpbmUgVklESU9DX1NfUEFSTV9PTEQgICAgICAgIF9JT1coJ1YnLCAyMiwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc3RyZWFtcGFybSI+djRsMl9zdHJlYW1wYXJtPC9saW5rPikKKyNkZWZpbmUgVklESU9DX1NfQ1RSTF9PTEQgICAgICAgIF9JT1coJ1YnLCAyOCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY29udHJvbCI+djRsMl9jb250cm9sPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfQVVESU9fT0xEICAgICAgX0lPV1IoJ1YnLCAzMywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19BVURPVVRfT0xEICAgICBfSU9XUignVicsIDQ5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpb291dCI+djRsMl9hdWRpb291dDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19DUk9QQ0FQX09MRCAgICAgICBfSU9SKCdWJywgNTgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3BjYXAiPnY0bDJfY3JvcGNhcDwvbGluaz4pCisjZW5kaWYKKworI2RlZmluZSBCQVNFX1ZJRElPQ19QUklWQVRFICAgICAxOTIgICAgICAgICAgICAgLyogMTkyLTI1NSBhcmUgcHJpdmF0ZSAqLworCisjZW5kaWYgLyogX19MSU5VWF9WSURFT0RFVjJfSCAqLworPC9wcm9ncmFtbGlzdGluZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWNyb3BjYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtY3JvcGNhcC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2ZTkwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWNyb3BjYXAueG1sCkBAIC0wLDAgKzEsMTc0IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1jcm9wY2FwIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0NST1BDQVA8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19DUk9QQ0FQPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkluZm9ybWF0aW9uIGFib3V0IHRoZSB2aWRlbyBjcm9wcGluZyBhbmQgc2NhbGluZyBhYmlsaXRpZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfY3JvcGNhcAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19DUk9QQ0FQPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5BcHBsaWNhdGlvbnMgdXNlIHRoaXMgZnVuY3Rpb24gdG8gcXVlcnkgdGhlIGNyb3BwaW5nCitsaW1pdHMsIHRoZSBwaXhlbCBhc3BlY3Qgb2YgaW1hZ2VzIGFuZCB0byBjYWxjdWxhdGUgc2NhbGUgZmFjdG9ycy4KK1RoZXkgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgdjRsMl9jcm9wY2FwCitzdHJ1Y3R1cmUgdG8gdGhlIHJlc3BlY3RpdmUgYnVmZmVyIChzdHJlYW0pIHR5cGUgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0NST1BDQVA8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCitzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlLiBUaGUgcmVzdWx0cyBhcmUKK2NvbnN0YW50IGV4Y2VwdCB3aGVuIHN3aXRjaGluZyB0aGUgdmlkZW8gc3RhbmRhcmQuIFJlbWVtYmVyIHRoaXMKK3N3aXRjaCBjYW4gb2NjdXIgaW1wbGljaXQgd2hlbiBzd2l0Y2hpbmcgdGhlIHZpZGVvIGlucHV0IG9yCitvdXRwdXQuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNyb3BjYXAiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2Nyb3BjYXA8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLgorT25seSB0aGVzZSB0eXBlcyBhcmUgdmFsaWQgaGVyZToKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+LCBhbmQgY3VzdG9tIChkcml2ZXIKK2RlZmluZWQpIHR5cGVzIHdpdGggY29kZSA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4KK2FuZCBoaWdoZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QtY3JvcCI+djRsMl9yZWN0PC9saW5rPjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Ym91bmRzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RGVmaW5lcyB0aGUgd2luZG93IHdpdGhpbiBjYXB0dXJpbmcgb3Igb3V0cHV0IGlzCitwb3NzaWJsZSwgdGhpcyBtYXkgZXhjbHVkZSBmb3IgZXhhbXBsZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKK2JsYW5raW5nIGFyZWFzLiBUaGUgY3JvcHBpbmcgcmVjdGFuZ2xlIGNhbm5vdCBleGNlZWQgdGhlc2UgbGltaXRzLgorV2lkdGggYW5kIGhlaWdodCBhcmUgZGVmaW5lZCBpbiBwaXhlbHMsIHRoZSBkcml2ZXIgd3JpdGVyIGlzIGZyZWUgdG8KK2Nob29zZSBvcmlnaW4gYW5kIHVuaXRzIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbSBpbiB0aGUgYW5hbG9nCitkb21haW4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QtY3JvcCI+djRsMl9yZWN0PC9saW5rPjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGVmcmVjdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRlZmF1bHQgY3JvcHBpbmcgcmVjdGFuZ2xlLCBpdCBzaGFsbCBjb3ZlciB0aGUKKyJ3aG9sZSBwaWN0dXJlIi4gQXNzdW1pbmcgcGl4ZWwgYXNwZWN0IDEvMSB0aGlzIGNvdWxkIGJlIGZvciBleGFtcGxlIGEKKzY0MCZuYnNwOyZ0aW1lczsmbmJzcDs0ODAgcmVjdGFuZ2xlIGZvciBOVFNDLCBhCis3NjgmbmJzcDsmdGltZXM7Jm5ic3A7NTc2IHJlY3RhbmdsZSBmb3IgUEFMIGFuZCBTRUNBTSBjZW50ZXJlZCBvdmVyCit0aGUgYWN0aXZlIHBpY3R1cmUgYXJlYS4gVGhlIHNhbWUgY28tb3JkaW5hdGUgc3lzdGVtIGFzIGZvcgorCSAgICA8c3RydWN0ZmllbGQ+Ym91bmRzPC9zdHJ1Y3RmaWVsZD4gaXMgdXNlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5waXhlbGFzcGVjdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPlRoaXMgaXMgdGhlIHBpeGVsIGFzcGVjdCAoeSAvIHgpIHdoZW4gbm8KK3NjYWxpbmcgaXMgYXBwbGllZCwgdGhlIHJhdGlvIG9mIHRoZSBhY3R1YWwgc2FtcGxpbmcKK2ZyZXF1ZW5jeSBhbmQgdGhlIGZyZXF1ZW5jeSByZXF1aXJlZCB0byBnZXQgc3F1YXJlCitwaXhlbHMuPC9wYXJhPjxwYXJhPldoZW4gY3JvcHBpbmcgY29vcmRpbmF0ZXMgcmVmZXIgdG8gc3F1YXJlIHBpeGVscywKK3RoZSBkcml2ZXIgc2V0cyA8c3RydWN0ZmllbGQ+cGl4ZWxhc3BlY3Q8L3N0cnVjdGZpZWxkPiB0byAxLzEuIE90aGVyCitjb21tb24gdmFsdWVzIGFyZSA1NC81OSBmb3IgUEFMIGFuZCBTRUNBTSwgMTEvMTAgZm9yIE5UU0Mgc2FtcGxlZAorYWNjb3JkaW5nIHRvIFs8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+XS48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPCEtLSBOQiB0aGlzIHRhYmxlIGlzIGR1cGxpY2F0ZWQgaW4gdGhlIG92ZXJsYXkgY2hhcHRlci4gLS0+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItcmVjdC1jcm9wIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9yZWN0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3MzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bGVmdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pkhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSB0b3AsIGxlZnQgY29ybmVyIG9mIHRoZQorcmVjdGFuZ2xlLCBpbiBwaXhlbHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50b3A8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5WZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIHRvcCwgbGVmdCBjb3JuZXIgb2YgdGhlCityZWN0YW5nbGUsIGluIHBpeGVscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2lkdGggb2YgdGhlIHJlY3RhbmdsZSwgaW4gcGl4ZWxzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3MzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUsIGluIHBpeGVscy4gV2lkdGgKK2FuZCBoZWlnaHQgY2Fubm90IGJlIG5lZ2F0aXZlLCB0aGUgZmllbGRzIGFyZSBzaWduZWQgZm9yCitoeXN0ZXJpY2FsIHJlYXNvbnMuIDwhLS0gdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tCitvbiAyMiBPY3QgMjAwMiBzdWJqZWN0ICJSZTpbVjRMXVtwYXRjaGVzIV0gUmU6djRsMi9rZXJuZWwtMi41IiAtLT4KKzwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1jcm9wY2FwOyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzCitpbnZhbGlkIG9yIHRoZSBpb2N0bCBpcyBub3Qgc3VwcG9ydGVkLiBUaGlzIGlzIG5vdCBwZXJtaXR0ZWQgZm9yCit2aWRlbyBjYXB0dXJlLCBvdXRwdXQgYW5kIG92ZXJsYXkgZGV2aWNlcywgd2hpY2ggbXVzdCBzdXBwb3J0Cis8Y29uc3RhbnQ+VklESU9DX0NST1BDQVA8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1kYmctZy1jaGlwLWlkZW50LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA5ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwKQEAgLTAsMCArMSwyNzUgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0RCR19HX0NISVBfSURFTlQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+SWRlbnRpZnkgdGhlIGNoaXBzIG9uIGEgVFYgY2FyZDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19EQkdfR19DSElQX0lERU5UPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8bm90ZT4KKyAgICAgIDx0aXRsZT5FeHBlcmltZW50YWw8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGlzIGlzIGFuIDxsaW5rCitsaW5rZW5kPSJleHBlcmltZW50YWwiPmV4cGVyaW1lbnRhbDwvbGluaz4gaW50ZXJmYWNlIGFuZCBtYXkgY2hhbmdlIGluCit0aGUgZnV0dXJlLjwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT5Gb3IgZHJpdmVyIGRlYnVnZ2luZyBwdXJwb3NlcyB0aGlzIGlvY3RsIGFsbG93cyB0ZXN0CithcHBsaWNhdGlvbnMgdG8gcXVlcnkgdGhlIGRyaXZlciBhYm91dCB0aGUgY2hpcHMgcHJlc2VudCBvbiB0aGUgVFYKK2NhcmQuIFJlZ3VsYXIgYXBwbGljYXRpb25zIG11c3Qgbm90IHVzZSBpdC4gV2hlbiB5b3UgZm91bmQgYSBjaGlwCitzcGVjaWZpYyBidWcsIHBsZWFzZSBjb250YWN0IHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nIGxpc3QgKCZ2NGwtbWw7KQorc28gaXQgY2FuIGJlIGZpeGVkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBkcml2ZXIgYXBwbGljYXRpb25zIG11c3QgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+bWF0Y2guYWRkcjwvc3RydWN0ZmllbGQ+IG9yIDxzdHJ1Y3RmaWVsZD5tYXRjaC5uYW1lPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcyBvZiBhICZ2NGwyLWRiZy1jaGlwLWlkZW50OworYW5kIGNhbGwgPGNvbnN0YW50PlZJRElPQ19EQkdfR19DSElQX0lERU5UPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8KK3RoaXMgc3RydWN0dXJlLiBPbiBzdWNjZXNzIHRoZSBkcml2ZXIgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorc2VsZWN0ZWQgY2hpcCBpbiB0aGUgPHN0cnVjdGZpZWxkPmlkZW50PC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+cmV2aXNpb248L3N0cnVjdGZpZWxkPiBmaWVsZHMuIE9uIGZhaWx1cmUgdGhlIHN0cnVjdHVyZQorcmVtYWlucyB1bmNoYW5nZWQuPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiA8c3RydWN0ZmllbGQ+bWF0Y2gudHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9DSElQX01BVENIX0hPU1Q8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gc2VsZWN0cyB0aGUgbnRoIG5vbi0maTJjOyBjaGlwCitvbiB0aGUgVFYgY2FyZC4gWW91IGNhbiBlbnVtZXJhdGUgYWxsIGNoaXBzIGJ5IHN0YXJ0aW5nIGF0IHplcm8gYW5kCitpbmNyZW1lbnRpbmcgPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBieSBvbmUgdW50aWwKKzxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+IGZhaWxzIHdpdGggYW4gJkVJTlZBTDsuCitUaGUgbnVtYmVyIHplcm8gYWx3YXlzIHNlbGVjdHMgdGhlIGhvc3QgY2hpcCwgJmVnOyB0aGUgY2hpcCBjb25uZWN0ZWQKK3RvIHRoZSBQQ0kgb3IgVVNCIGJ1cy48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLm5hbWU8L3N0cnVjdGZpZWxkPiBjb250YWlucyB0aGUgSTJDIGRyaXZlciBuYW1lLgorRm9yIGluc3RhbmNlCis8Y29uc3RhbnQ+InNhYTcxMjciPC9jb25zdGFudD4gd2lsbCBtYXRjaCBhbnkgY2hpcAorc3VwcG9ydGVkIGJ5IHRoZSBzYWE3MTI3IGRyaXZlciwgcmVnYXJkbGVzcyBvZiBpdHMgJmkyYzsgYnVzIGFkZHJlc3MuCitXaGVuIG11bHRpcGxlIGNoaXBzIHN1cHBvcnRlZCBieSB0aGUgc2FtZSBkcml2ZXIgYXJlIHByZXNlbnQsIHRoZQoraW9jdGwgd2lsbCByZXR1cm4gPGNvbnN0YW50PlY0TDJfSURFTlRfQU1CSUdVT1VTPC9jb25zdGFudD4gaW4gdGhlCis8c3RydWN0ZmllbGQ+aWRlbnQ8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gc2VsZWN0cyBhIGNoaXAgYnkgaXRzIDcgYml0CismaTJjOyBidXMgYWRkcmVzcy48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfQUM5NzwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBzZWxlY3RzIHRoZSBudGggQUM5NyBjaGlwCitvbiB0aGUgVFYgY2FyZC4gWW91IGNhbiBlbnVtZXJhdGUgYWxsIGNoaXBzIGJ5IHN0YXJ0aW5nIGF0IHplcm8gYW5kCitpbmNyZW1lbnRpbmcgPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBieSBvbmUgdW50aWwKKzxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+IGZhaWxzIHdpdGggYW4gJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHBhcmE+T24gc3VjY2VzcywgdGhlIDxzdHJ1Y3RmaWVsZD5pZGVudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpbGwKK2NvbnRhaW4gYSBjaGlwIElEIGZyb20gdGhlIExpbnV4Cis8ZmlsZW5hbWU+bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSwgYW5kIHRoZQorPHN0cnVjdGZpZWxkPnJldmlzaW9uPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2lsbCBjb250YWluIGEgZHJpdmVyCitzcGVjaWZpYyB2YWx1ZSwgb3IgemVybyBpZiBubyBwYXJ0aWN1bGFyIHJldmlzaW9uIGlzIGFzc29jaWF0ZWQgd2l0aAordGhpcyBjaGlwLjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gdGhlIGRyaXZlciBjb3VsZCBub3QgaWRlbnRpZnkgdGhlIHNlbGVjdGVkIGNoaXAsCis8c3RydWN0ZmllbGQ+aWRlbnQ8L3N0cnVjdGZpZWxkPiB3aWxsIGNvbnRhaW4KKzxjb25zdGFudD5WNEwyX0lERU5UX1VOS05PV048L2NvbnN0YW50Pi4gV2hlbiBubyBjaGlwIG1hdGNoZWQKK3RoZSBpb2N0bCB3aWxsIHN1Y2NlZWQgYnV0IHRoZQorPHN0cnVjdGZpZWxkPmlkZW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2lsbCBjb250YWluCis8Y29uc3RhbnQ+VjRMMl9JREVOVF9OT05FPC9jb25zdGFudD4uIElmIG11bHRpcGxlIGNoaXBzIG1hdGNoZWQsCis8c3RydWN0ZmllbGQ+aWRlbnQ8L3N0cnVjdGZpZWxkPiB3aWxsIGNvbnRhaW4KKzxjb25zdGFudD5WNEwyX0lERU5UX0FNQklHVU9VUzwvY29uc3RhbnQ+LiBJbiBhbGwgdGhlc2UgY2FzZXMgdGhlCis8c3RydWN0ZmllbGQ+cmV2aXNpb248L3N0cnVjdGZpZWxkPiBmaWVsZCByZW1haW5zIHVuY2hhbmdlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGlzIGlvY3RsIGlzIG9wdGlvbmFsLCBub3QgYWxsIGRyaXZlcnMgbWF5IHN1cHBvcnQgaXQuIEl0Cit3YXMgaW50cm9kdWNlZCBpbiBMaW51eCAyLjYuMjEsIGJ1dCB0aGUgQVBJIHdhcyBjaGFuZ2VkIHRvIHRoZQorb25lIGRlc2NyaWJlZCBoZXJlIGluIDIuNi4yOS48L3BhcmE+CisKKyAgICA8cGFyYT5XZSByZWNvbW1lbmRlZCB0aGUgPGFwcGxpY2F0aW9uPnY0bDItZGJnPC9hcHBsaWNhdGlvbj4KK3V0aWxpdHkgb3ZlciBjYWxsaW5nIHRoaXMgaW9jdGwgZGlyZWN0bHkuIEl0IGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorTGludXhUViB2NGwtZHZiIHJlcG9zaXRvcnk7IHNlZSA8dWxpbmsKK3VybD0iaHR0cDovL2xpbnV4dHYub3JnL3JlcG8vIj5odHRwOi8vbGludXh0di5vcmcvcmVwby88L3VsaW5rPiBmb3IKK2FjY2VzcyBpbnN0cnVjdGlvbnMuPC9wYXJhPgorCisgICAgPCEtLSBOb3RlIGZvciBjb252ZW5pZW5jZSB2aWRpb2MtZGJnLWctcmVnaXN0ZXIuc2dtbAorCSBjb250YWlucyBhIGR1cGxpY2F0ZSBvZiB0aGlzIHRhYmxlLiAtLT4KKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImlkZW50LXY0bDItZGJnLW1hdGNoIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9kYmdfbWF0Y2g8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJJmNzLXVzdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlNlZSA8eHJlZiBsaW5rZW5kPSJpZGVudC1jaGlwLW1hdGNoLXR5cGVzIiAvPiBmb3IgYSBsaXN0IG9mCitwb3NzaWJsZSB0eXBlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dW5pb248L2VudHJ5PgorCSAgICA8ZW50cnk+KGFub255bW91cyk8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5hZGRyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggYSBjaGlwIGJ5IHRoaXMgbnVtYmVyLCBpbnRlcnByZXRlZCBhY2NvcmRpbmcKK3RvIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Y2hhcjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bmFtZVszMl08L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCBhIGNoaXAgYnkgdGhpcyBuYW1lLCBpbnRlcnByZXRlZCBhY2NvcmRpbmcKK3RvIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1kYmctY2hpcC1pZGVudCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnN0cnVjdCB2NGwyX2RiZ19tYXRjaDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWF0Y2g8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Ib3cgdG8gbWF0Y2ggdGhlIGNoaXAsIHNlZSA8eHJlZiBsaW5rZW5kPSJpZGVudC12NGwyLWRiZy1tYXRjaCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZGVudDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgY2hpcCBpZGVudGlmaWVyIGFzIGRlZmluZWQgaW4gdGhlIExpbnV4Cis8ZmlsZW5hbWU+bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSwgb3Igb25lIG9mCit0aGUgdmFsdWVzIGZyb20gPHhyZWYgbGlua2VuZD0iY2hpcC1pZHMiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmV2aXNpb248L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BIGNoaXAgcmV2aXNpb24sIGNoaXAgYW5kIGRyaXZlciBzcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8IS0tIE5vdGUgZm9yIGNvbnZlbmllbmNlIHZpZGlvYy1kYmctZy1yZWdpc3Rlci5zZ21sCisJIGNvbnRhaW5zIGEgZHVwbGljYXRlIG9mIHRoaXMgdGFibGUuIC0tPgorICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iaWRlbnQtY2hpcC1tYXRjaC10eXBlcyI+CisgICAgICA8dGl0bGU+Q2hpcCBNYXRjaCBUeXBlczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSElQX01BVENIX0hPU1Q8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hdGNoIHRoZSBudGggY2hpcCBvbiB0aGUgY2FyZCwgemVybyBmb3IgdGhlCisJICAgIGhvc3QgY2hpcC4gRG9lcyBub3QgbWF0Y2ggJmkyYzsgY2hpcHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggYW4gJmkyYzsgY2hpcCBieSBpdHMgZHJpdmVyIG5hbWUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hdGNoIGEgY2hpcCBieSBpdHMgNyBiaXQgJmkyYzsgYnVzIGFkZHJlc3MuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfQUM5NzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggdGhlIG50aCBhbmNpbGlhcnkgQUM5NyBjaGlwLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gVGhpcyBpcyBhbiBhbm9ueW1vdXMgZW51bSBpbiBtZWRpYS92NGwyLWNoaXAtaWRlbnQuaC4gLS0+CisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJjaGlwLWlkcyI+CisgICAgICA8dGl0bGU+Q2hpcCBJZGVudGlmaWVyczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JREVOVF9OT05FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT5ObyBjaGlwIG1hdGNoZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lERU5UX0FNQklHVU9VUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+TXVsdGlwbGUgY2hpcHMgbWF0Y2hlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSURFTlRfVU5LTk9XTjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBjaGlwIGlzIHByZXNlbnQgYXQgdGhpcyBhZGRyZXNzLCBidXQgdGhlIGRyaXZlcgorY291bGQgbm90IGlkZW50aWZ5IGl0LjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsLCBvciB0aGUKKzxzdHJ1Y3RmaWVsZD5tYXRjaF90eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODBjN2YzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sCkBAIC0wLDAgKzEsMjc1IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1kYmctZy1yZWdpc3RlciI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgVklESU9DX0RCR19TX1JFR0lTVEVSPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfREJHX0dfUkVHSVNURVI8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX0RCR19TX1JFR0lTVEVSPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlJlYWQgb3Igd3JpdGUgaGFyZHdhcmUgcmVnaXN0ZXJzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfREJHX0dfUkVHSVNURVIsIFZJRElPQ19EQkdfU19SRUdJU1RFUjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPG5vdGU+CisgICAgICA8dGl0bGU+RXhwZXJpbWVudGFsPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhpcyBpcyBhbiA8bGluayBsaW5rZW5kPSJleHBlcmltZW50YWwiPmV4cGVyaW1lbnRhbDwvbGluaz4KK2ludGVyZmFjZSBhbmQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLjwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT5Gb3IgZHJpdmVyIGRlYnVnZ2luZyBwdXJwb3NlcyB0aGVzZSBpb2N0bHMgYWxsb3cgdGVzdAorYXBwbGljYXRpb25zIHRvIGFjY2VzcyBoYXJkd2FyZSByZWdpc3RlcnMgZGlyZWN0bHkuIFJlZ3VsYXIKK2FwcGxpY2F0aW9ucyBtdXN0IG5vdCB1c2UgdGhlbS48L3BhcmE+CisKKyAgICA8cGFyYT5TaW5jZSB3cml0aW5nIG9yIGV2ZW4gcmVhZGluZyByZWdpc3RlcnMgY2FuIGplb3BhcmRpemUgdGhlCitzeXN0ZW0gc2VjdXJpdHksIGl0cyBzdGFiaWxpdHkgYW5kIGRhbWFnZSB0aGUgaGFyZHdhcmUsIGJvdGggaW9jdGxzCityZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiBBZGRpdGlvbmFsbHkgdGhlIExpbnV4IGtlcm5lbCBtdXN0IGJlCitjb21waWxlZCB3aXRoIHRoZSA8Y29uc3RhbnQ+Q09ORklHX1ZJREVPX0FEVl9ERUJVRzwvY29uc3RhbnQ+IG9wdGlvbgordG8gZW5hYmxlIHRoZXNlIGlvY3Rscy48L3BhcmE+CisKKyAgICA8cGFyYT5UbyB3cml0ZSBhIHJlZ2lzdGVyIGFwcGxpY2F0aW9ucyBtdXN0IGluaXRpYWxpemUgYWxsIGZpZWxkcworb2YgYSAmdjRsMi1kYmctcmVnaXN0ZXI7IGFuZCBjYWxsCis8Y29uc3RhbnQ+VklESU9DX0RCR19TX1JFR0lTVEVSPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBUaGUgPHN0cnVjdGZpZWxkPm1hdGNoLnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gb3IgPHN0cnVjdGZpZWxkPm1hdGNoLm5hbWU8L3N0cnVjdGZpZWxkPgorZmllbGRzIHNlbGVjdCBhIGNoaXAgb24gdGhlIFRWCitjYXJkLCB0aGUgPHN0cnVjdGZpZWxkPnJlZzwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyBhIHJlZ2lzdGVyCitudW1iZXIgYW5kIHRoZSA8c3RydWN0ZmllbGQ+dmFsPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdGhlIHZhbHVlIHRvIGJlCit3cml0dGVuIGludG8gdGhlIHJlZ2lzdGVyLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHJlYWQgYSByZWdpc3RlciBhcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIHRoZQorPHN0cnVjdGZpZWxkPm1hdGNoLnR5cGU8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5jaGlwPC9zdHJ1Y3RmaWVsZD4gb3IgPHN0cnVjdGZpZWxkPm1hdGNoLm5hbWU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5yZWc8L3N0cnVjdGZpZWxkPiBmaWVsZHMsIGFuZCBjYWxsCis8Y29uc3RhbnQ+VklESU9DX0RCR19HX1JFR0lTVEVSPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBPbiBzdWNjZXNzIHRoZSBkcml2ZXIgc3RvcmVzIHRoZSByZWdpc3RlciB2YWx1ZSBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD52YWw8L3N0cnVjdGZpZWxkPiBmaWVsZC4gT24gZmFpbHVyZSB0aGUgc3RydWN0dXJlIHJlbWFpbnMKK3VuY2hhbmdlZC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSE9TVDwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBzZWxlY3RzIHRoZSBudGggbm9uLSZpMmM7IGNoaXAKK29uIHRoZSBUViBjYXJkLiAgVGhlIG51bWJlciB6ZXJvIGFsd2F5cyBzZWxlY3RzIHRoZSBob3N0IGNoaXAsICZlZzsgdGhlCitjaGlwIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFVTQiBidXMuIFlvdSBjYW4gZmluZCBvdXQgd2hpY2ggY2hpcHMgYXJlCitwcmVzZW50IHdpdGggdGhlICZWSURJT0MtREJHLUctQ0hJUC1JREVOVDsgaW9jdGwuPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiA8c3RydWN0ZmllbGQ+bWF0Y2gudHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9DSElQX01BVENIX0kyQ19EUklWRVI8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5uYW1lPC9zdHJ1Y3RmaWVsZD4gY29udGFpbnMgdGhlIEkyQyBkcml2ZXIgbmFtZS4KK0ZvciBpbnN0YW5jZQorPGNvbnN0YW50PiJzYWE3MTI3IjwvY29uc3RhbnQ+IHdpbGwgbWF0Y2ggYW55IGNoaXAKK3N1cHBvcnRlZCBieSB0aGUgc2FhNzEyNyBkcml2ZXIsIHJlZ2FyZGxlc3Mgb2YgaXRzICZpMmM7IGJ1cyBhZGRyZXNzLgorV2hlbiBtdWx0aXBsZSBjaGlwcyBzdXBwb3J0ZWQgYnkgdGhlIHNhbWUgZHJpdmVyIGFyZSBwcmVzZW50LCB0aGUKK2VmZmVjdCBvZiB0aGVzZSBpb2N0bHMgaXMgdW5kZWZpbmVkLiBBZ2FpbiB3aXRoIHRoZQorJlZJRElPQy1EQkctRy1DSElQLUlERU5UOyBpb2N0bCB5b3UgY2FuIGZpbmQgb3V0IHdoaWNoICZpMmM7IGNoaXBzIGFyZQorcHJlc2VudC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gc2VsZWN0cyBhIGNoaXAgYnkgaXRzIDcgYml0ICZpMmM7CitidXMgYWRkcmVzcy48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfQUM5NzwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBzZWxlY3RzIHRoZSBudGggQUM5NyBjaGlwCitvbiB0aGUgVFYgY2FyZC48L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgIDx0aXRsZT5TdWNjZXNzIG5vdCBndWFyYW50ZWVkPC90aXRsZT4KKworICAgICAgPHBhcmE+RHVlIHRvIGEgZmxhdyBpbiB0aGUgTGludXggJmkyYzsgYnVzIGRyaXZlciB0aGVzZSBpb2N0bHMgbWF5CityZXR1cm4gc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYWN0dWFsbHkgcmVhZGluZyBvciB3cml0aW5nIGEgcmVnaXN0ZXIuIFRvCitjYXRjaCB0aGUgbW9zdCBsaWtlbHkgZmFpbHVyZSB3ZSByZWNvbW1lbmQgYSAmVklESU9DLURCRy1HLUNISVAtSURFTlQ7CitjYWxsIGNvbmZpcm1pbmcgdGhlIHByZXNlbmNlIG9mIHRoZSBzZWxlY3RlZCAmaTJjOyBjaGlwLjwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT5UaGVzZSBpb2N0bHMgYXJlIG9wdGlvbmFsLCBub3QgYWxsIGRyaXZlcnMgbWF5IHN1cHBvcnQgdGhlbS4KK0hvd2V2ZXIgd2hlbiBhIGRyaXZlciBzdXBwb3J0cyB0aGVzZSBpb2N0bHMgaXQgbXVzdCBhbHNvIHN1cHBvcnQKKyZWSURJT0MtREJHLUctQ0hJUC1JREVOVDsuIENvbnZlcnNlbHkgaXQgbWF5IHN1cHBvcnQKKzxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+IGJ1dCBub3QgdGhlc2UgaW9jdGxzLjwvcGFyYT4KKworICAgIDxwYXJhPjxjb25zdGFudD5WSURJT0NfREJHX0dfUkVHSVNURVI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfREJHX1NfUkVHSVNURVI8L2NvbnN0YW50PiB3ZXJlIGludHJvZHVjZWQgaW4gTGludXgKKzIuNi4yMSwgYnV0IHRoZWlyIEFQSSB3YXMgY2hhbmdlZCB0byB0aGUgb25lIGRlc2NyaWJlZCBoZXJlIGluIGtlcm5lbCAyLjYuMjkuPC9wYXJhPgorCisgICAgPHBhcmE+V2UgcmVjb21tZW5kZWQgdGhlIDxhcHBsaWNhdGlvbj52NGwyLWRiZzwvYXBwbGljYXRpb24+Cit1dGlsaXR5IG92ZXIgY2FsbGluZyB0aGVzZSBpb2N0bHMgZGlyZWN0bHkuIEl0IGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorTGludXhUViB2NGwtZHZiIHJlcG9zaXRvcnk7IHNlZSA8dWxpbmsKK3VybD0iaHR0cDovL2xpbnV4dHYub3JnL3JlcG8vIj5odHRwOi8vbGludXh0di5vcmcvcmVwby88L3VsaW5rPiBmb3IKK2FjY2VzcyBpbnN0cnVjdGlvbnMuPC9wYXJhPgorCisgICAgPCEtLSBOb3RlIGZvciBjb252ZW5pZW5jZSB2aWRpb2MtZGJnLWctY2hpcC1pZGVudC5zZ21sCisJIGNvbnRhaW5zIGEgZHVwbGljYXRlIG9mIHRoaXMgdGFibGUuIC0tPgorICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1kYmctbWF0Y2giPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2RiZ19tYXRjaDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2VlIDx4cmVmIGxpbmtlbmQ9ImlkZW50LWNoaXAtbWF0Y2gtdHlwZXMiIC8+IGZvciBhIGxpc3Qgb2YKK3Bvc3NpYmxlIHR5cGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT4oYW5vbnltb3VzKTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmFkZHI8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCBhIGNoaXAgYnkgdGhpcyBudW1iZXIsIGludGVycHJldGVkIGFjY29yZGluZwordG8gdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5jaGFyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5uYW1lWzMyXTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hdGNoIGEgY2hpcCBieSB0aGlzIG5hbWUsIGludGVycHJldGVkIGFjY29yZGluZwordG8gdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZGJnLXJlZ2lzdGVyIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9kYmdfcmVnaXN0ZXI8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIC8+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5zdHJ1Y3QgdjRsMl9kYmdfbWF0Y2g8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1hdGNoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SG93IHRvIG1hdGNoIHRoZSBjaGlwLCBzZWUgPHhyZWYgbGlua2VuZD0idjRsMi1kYmctbWF0Y2giIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U2NDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVnPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QSByZWdpc3RlciBudW1iZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTY0PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52YWw8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgdmFsdWUgcmVhZCBmcm9tLCBvciB0byBiZSB3cml0dGVuIGludG8gdGhlCityZWdpc3Rlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8IS0tIE5vdGUgZm9yIGNvbnZlbmllbmNlIHZpZGlvYy1kYmctZy1jaGlwLWlkZW50LnNnbWwKKwkgY29udGFpbnMgYSBkdXBsaWNhdGUgb2YgdGhpcyB0YWJsZS4gLS0+CisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJjaGlwLW1hdGNoLXR5cGVzIj4KKyAgICAgIDx0aXRsZT5DaGlwIE1hdGNoIFR5cGVzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSE9TVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggdGhlIG50aCBjaGlwIG9uIHRoZSBjYXJkLCB6ZXJvIGZvciB0aGUKKwkgICAgaG9zdCBjaGlwLiBEb2VzIG5vdCBtYXRjaCAmaTJjOyBjaGlwcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCBhbiAmaTJjOyBjaGlwIGJ5IGl0cyBkcml2ZXIgbmFtZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggYSBjaGlwIGJ5IGl0cyA3IGJpdCAmaTJjOyBidXMgYWRkcmVzcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0hJUF9NQVRDSF9BQzk3PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCB0aGUgbnRoIGFuY2lsaWFyeSBBQzk3IGNoaXAuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaW9jdGwsIG9yIHRoZSBrZXJuZWwKK3dhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgPGNvbnN0YW50PkNPTkZJR19WSURFT19BRFZfREVCVUc8L2NvbnN0YW50Pgorb3B0aW9uLCBvciB0aGUgPHN0cnVjdGZpZWxkPm1hdGNoX3R5cGU8L3N0cnVjdGZpZWxkPiBpcyBpbnZhbGlkLCBvciB0aGUKK3NlbGVjdGVkIGNoaXAgb3IgcmVnaXN0ZXIgZG9lcyBub3QgZXhpc3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FUEVSTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMuIFJvb3QgcHJpdmlsZWdlcyBhcmUgcmVxdWlyZWQKK3RvIGV4ZWN1dGUgdGhlc2UgaW9jdGxzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbmNvZGVyLWNtZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbmNvZGVyLWNtZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkZGU5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVuY29kZXItY21kLnhtbApAQCAtMCwwICsxLDIwNCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZW5jb2Rlci1jbWQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfRU5DT0RFUl9DTUQsIFZJRElPQ19UUllfRU5DT0RFUl9DTUQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTkNPREVSX0NNRDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfVFJZX0VOQ09ERVJfQ01EPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkV4ZWN1dGUgYW4gZW5jb2RlciBjb21tYW5kPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2VuY29kZXJfY21kICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfRU5DT0RFUl9DTUQsIFZJRElPQ19UUllfRU5DT0RFUl9DTUQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxub3RlPgorICAgICAgPHRpdGxlPkV4cGVyaW1lbnRhbDwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoaXMgaXMgYW4gPGxpbmsgbGlua2VuZD0iZXhwZXJpbWVudGFsIj5leHBlcmltZW50YWw8L2xpbms+CitpbnRlcmZhY2UgYW5kIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS48L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHBhcmE+VGhlc2UgaW9jdGxzIGNvbnRyb2wgYW4gYXVkaW8vdmlkZW8gKHVzdWFsbHkgTVBFRy0pIGVuY29kZXIuCis8Y29uc3RhbnQ+VklESU9DX0VOQ09ERVJfQ01EPC9jb25zdGFudD4gc2VuZHMgYSBjb21tYW5kIHRvIHRoZQorZW5jb2RlciwgPGNvbnN0YW50PlZJRElPQ19UUllfRU5DT0RFUl9DTUQ8L2NvbnN0YW50PiBjYW4gYmUgdXNlZCB0bwordHJ5IGEgY29tbWFuZCB3aXRob3V0IGFjdHVhbGx5IGV4ZWN1dGluZyBpdC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzZW5kIGEgY29tbWFuZCBhcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgYQorICAgICZ2NGwyLWVuY29kZXItY21kOyBhbmQgY2FsbAorICAgIDxjb25zdGFudD5WSURJT0NfRU5DT0RFUl9DTUQ8L2NvbnN0YW50PiBvcgorICAgIDxjb25zdGFudD5WSURJT0NfVFJZX0VOQ09ERVJfQ01EPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworICAgIHN0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmNtZDwvc3RydWN0ZmllbGQ+IGZpZWxkIG11c3QgY29udGFpbiB0aGUKK2NvbW1hbmQgY29kZS4gVGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGN1cnJlbnRseQorb25seSB1c2VkIGJ5IHRoZSBTVE9QIGNvbW1hbmQgYW5kIGNvbnRhaW5zIG9uZSBiaXQ6IElmIHRoZQorPGNvbnN0YW50PlY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQ8L2NvbnN0YW50PiBmbGFnIGlzIHNldCwKK2VuY29kaW5nIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgY3VycmVudCA8d29yZGFzd29yZD5Hcm91cAorT2YgUGljdHVyZXM8L3dvcmRhc3dvcmQ+LCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGltbWVkaWF0ZWx5LjwvcGFyYT4KKworICAgIDxwYXJhPkEgPGZ1bmN0aW9uPnJlYWQ8L2Z1bmN0aW9uPigpIGNhbGwgc2VuZHMgYSBTVEFSVCBjb21tYW5kIHRvCit0aGUgZW5jb2RlciBpZiBpdCBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQuIEFmdGVyIGEgU1RPUCBjb21tYW5kLAorPGZ1bmN0aW9uPnJlYWQ8L2Z1bmN0aW9uPigpIGNhbGxzIHdpbGwgcmVhZCB0aGUgcmVtYWluaW5nIGRhdGEKK2J1ZmZlcmVkIGJ5IHRoZSBkcml2ZXIuIFdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0eSwKKzxmdW5jdGlvbj5yZWFkPC9mdW5jdGlvbj4oKSB3aWxsIHJldHVybiB6ZXJvIGFuZCB0aGUgbmV4dAorPGZ1bmN0aW9uPnJlYWQ8L2Z1bmN0aW9uPigpIGNhbGwgd2lsbCByZXN0YXJ0IHRoZSBlbmNvZGVyLjwvcGFyYT4KKworICAgIDxwYXJhPkEgPGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj4oKSBjYWxsIHNlbmRzIGFuIGltbWVkaWF0ZSBTVE9QCit0byB0aGUgZW5jb2RlciwgYW5kIGFsbCBidWZmZXJlZCBkYXRhIGlzIGRpc2NhcmRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGVzZSBpb2N0bHMgYXJlIG9wdGlvbmFsLCBub3QgYWxsIGRyaXZlcnMgbWF5IHN1cHBvcnQKK3RoZW0uIFRoZXkgd2VyZSBpbnRyb2R1Y2VkIGluIExpbnV4IDIuNi4yMS48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZW5jb2Rlci1jbWQiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2VuY29kZXJfY21kPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y21kPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGVuY29kZXIgY29tbWFuZCwgc2VlIDx4cmVmIGxpbmtlbmQ9ImVuY29kZXItY21kcyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkZsYWdzIHRvIGdvIHdpdGggdGhlIGNvbW1hbmQsIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJlbmNvZGVyLWZsYWdzIiAvPi4gSWYgbm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yCit0aGlzIGNvbW1hbmQsIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvCit6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+WzhdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImVuY29kZXItY21kcyI+CisgICAgICA8dGl0bGU+RW5jb2RlciBDb21tYW5kczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfQ01EX1NUQVJUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT5TdGFydCB0aGUgZW5jb2Rlci4gV2hlbiB0aGUgZW5jb2RlciBpcyBhbHJlYWR5CitydW5uaW5nIG9yIHBhdXNlZCwgdGhpcyBjb21tYW5kIGRvZXMgbm90aGluZy4gTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yCit0aGlzIGNvbW1hbmQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VOQ19DTURfU1RPUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+U3RvcCB0aGUgZW5jb2Rlci4gV2hlbiB0aGUKKzxjb25zdGFudD5WNEwyX0VOQ19DTURfU1RPUF9BVF9HT1BfRU5EPC9jb25zdGFudD4gZmxhZyBpcyBzZXQsCitlbmNvZGluZyB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgPHdvcmRhc3dvcmQ+R3JvdXAKK09mIFBpY3R1cmVzPC93b3JkYXN3b3JkPiwgb3RoZXJ3aXNlIGVuY29kaW5nIHdpbGwgc3RvcCBpbW1lZGlhdGVseS4KK1doZW4gdGhlIGVuY29kZXIgaXMgYWxyZWFkeSBzdG9wcGVkLCB0aGlzIGNvbW1hbmQgZG9lcworbm90aGluZy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRU5DX0NNRF9QQVVTRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+UGF1c2UgdGhlIGVuY29kZXIuIFdoZW4gdGhlIGVuY29kZXIgaGFzIG5vdCBiZWVuCitzdGFydGVkIHlldCwgdGhlIGRyaXZlciB3aWxsIHJldHVybiBhbiAmRVBFUk07LiBXaGVuIHRoZSBlbmNvZGVyIGlzCithbHJlYWR5IHBhdXNlZCwgdGhpcyBjb21tYW5kIGRvZXMgbm90aGluZy4gTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yCit0aGlzIGNvbW1hbmQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VOQ19DTURfUkVTVU1FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5SZXN1bWUgZW5jb2RpbmcgYWZ0ZXIgYSBQQVVTRSBjb21tYW5kLiBXaGVuIHRoZQorZW5jb2RlciBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQsIHRoZSBkcml2ZXIgd2lsbCByZXR1cm4gYW4gJkVQRVJNOy4KK1doZW4gdGhlIGVuY29kZXIgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNvbW1hbmQgZG9lcyBub3RoaW5nLiBObworZmxhZ3MgYXJlIGRlZmluZWQgZm9yIHRoaXMgY29tbWFuZC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImVuY29kZXItZmxhZ3MiPgorICAgICAgPHRpdGxlPkVuY29kZXIgQ29tbWFuZCBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5TdG9wIGVuY29kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgPHdvcmRhc3dvcmQ+R3JvdXAgT2YKK1BpY3R1cmVzPC93b3JkYXN3b3JkPiwgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkuPC9lbnRyeT4KKwkgIDwvcm93PgorICAgICAgIDwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaW9jdGwsIG9yIHRoZQorPHN0cnVjdGZpZWxkPmNtZDwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGludmFsaWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FUEVSTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYXBwbGljYXRpb24gc2VudCBhIFBBVVNFIG9yIFJFU1VNRSBjb21tYW5kIHdoZW4KK3RoZSBlbmNvZGVyIHdhcyBub3QgcnVubmluZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mbXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mbXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGQ0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZtdC54bWwKQEAgLTAsMCArMSwxNjQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW0tZm10Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0VOVU1fRk1UPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfRU5VTV9GTVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGltYWdlIGZvcm1hdHM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZm10ZGVzYworKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19FTlVNX0ZNVDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gZW51bWVyYXRlIGltYWdlIGZvcm1hdHMgYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPgorZmllbGQgb2YgJnY0bDItZm10ZGVzYzsgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0VOVU1fRk1UPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBvciByZXR1cm4gYW4KKyZFSU5WQUw7LiBBbGwgZm9ybWF0cyBhcmUgZW51bWVyYWJsZSBieSBiZWdpbm5pbmcgYXQgaW5kZXggemVybyBhbmQKK2luY3JlbWVudGluZyBieSBvbmUgdW50aWwgPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4gaXMKK3JldHVybmVkLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mbXRkZXNjIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9mbXRkZXNjPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5OdW1iZXIgb2YgdGhlIGZvcm1hdCBpbiB0aGUgZW51bWVyYXRpb24sIHNldCBieQordGhlIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGluIG5vIHdheSByZWxhdGVkIHRvIHRoZSA8c3RydWN0ZmllbGQ+CitwaXhlbGZvcm1hdDwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UeXBlIG9mIHRoZSBkYXRhIHN0cmVhbSwgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi4KK09ubHkgdGhlc2UgdHlwZXMgYXJlIHZhbGlkIGhlcmU6Cis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50PiwgYW5kIGN1c3RvbSAoZHJpdmVyCitkZWZpbmVkKSB0eXBlcyB3aXRoIGNvZGUgPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+CithbmQgaGlnaGVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TZWUgPHhyZWYgbGlua2VuZD0iZm10ZGVzYy1mbGFncyIgLz48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGVzY3JpcHRpb248L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+RGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCwgYSBOVUwtdGVybWluYXRlZCBBU0NJSQorc3RyaW5nLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUgdXNlciwgZm9yIGV4YW1wbGU6ICJZVVYKKzQ6MjoyIi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeGVsZm9ybWF0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGltYWdlIGZvcm1hdCBpZGVudGlmaWVyLiBUaGlzIGlzIGEKK2ZvdXIgY2hhcmFjdGVyIGNvZGUgYXMgY29tcHV0ZWQgYnkgdGhlIHY0bDJfZm91cmNjKCkKK21hY3JvOjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPjxwcm9ncmFtbGlzdGluZyBpZD0idjRsMi1mb3VyY2MiPgorI2RlZmluZSB2NGwyX2ZvdXJjYyhhLGIsYyxkKSAoKChfX3UzMikoYSkmbHQ7Jmx0OzApfCgoX191MzIpKGIpJmx0OyZsdDs4KXwoKF9fdTMyKShjKSZsdDsmbHQ7MTYpfCgoX191MzIpKGQpJmx0OyZsdDsyNCkpCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT5TZXZlcmFsIGltYWdlIGZvcm1hdHMgYXJlIGFscmVhZHkKK2RlZmluZWQgYnkgdGhpcyBzcGVjaWZpY2F0aW9uIGluIDx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4uIE5vdGUgdGhlc2UKK2NvZGVzIGFyZSBub3QgdGhlIHNhbWUgYXMgdGhvc2UgdXNlZCBpbiB0aGUgV2luZG93cyB3b3JsZC48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBtdXN0IHNldAordGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJmbXRkZXNjLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5JbWFnZSBGb3JtYXQgRGVzY3JpcHRpb24gRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgY29tcHJlc3NlZCBmb3JtYXQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0VNVUxBVEVEPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgZm9ybWF0IGlzIG5vdCBuYXRpdmUgdG8gdGhlIGRldmljZSBidXQgZW11bGF0ZWQKK3Rocm91Z2ggc29mdHdhcmUgKHVzdWFsbHkgbGlidjRsMiksIHdoZXJlIHBvc3NpYmxlIHRyeSB0byB1c2UgYSBuYXRpdmUgZm9ybWF0CitpbnN0ZWFkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLWZtdGRlc2M7IDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KK2lzIG5vdCBzdXBwb3J0ZWQgb3IgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGlzIG91dCBvZgorYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW0tZnJhbWVpbnRlcnZhbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMjE2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbApAQCAtMCwwICsxLDI3MCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZW51bS1mcmFtZWludGVydmFscyI+CisKKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkVudW1lcmF0ZSBmcmFtZSBpbnRlcnZhbHM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlBvaW50ZXIgdG8gYSAmdjRsMi1mcm1pdmFsZW51bTsgc3RydWN0dXJlIHRoYXQKK2NvbnRhaW5zIGEgcGl4ZWwgZm9ybWF0IGFuZCBzaXplIGFuZCByZWNlaXZlcyBhIGZyYW1lIGludGVydmFsLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGlzIGlvY3RsIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gZW51bWVyYXRlIGFsbCBmcmFtZQoraW50ZXJ2YWxzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cyBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCBhbmQKK2ZyYW1lIHNpemUuPC9wYXJhPgorICAgIDxwYXJhPlRoZSBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0cyBhbmQgZnJhbWUgc2l6ZXMgY2FuIGJlIG9idGFpbmVkCitieSB1c2luZyB0aGUgJlZJRElPQy1FTlVNLUZNVDsgYW5kICZWSURJT0MtRU5VTS1GUkFNRVNJWkVTOworZnVuY3Rpb25zLjwvcGFyYT4KKyAgICA8cGFyYT5UaGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgY29udGVudCBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybWl2YWxlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXBlbmQgb24gdGhlCit0eXBlIG9mIGZyYW1lIGludGVydmFscyB0aGUgZGV2aWNlIHN1cHBvcnRzLiBIZXJlIGFyZSB0aGUgc2VtYW50aWNzIG9mCit0aGUgZnVuY3Rpb24gZm9yIHRoZSBkaWZmZXJlbnQgY2FzZXM6PC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkRpc2NyZXRlOjwvZW1waGFzaXM+IFRoZSBmdW5jdGlvbgorcmV0dXJucyBzdWNjZXNzIGlmIHRoZSBnaXZlbiBpbmRleCB2YWx1ZSAoemVyby1iYXNlZCkgaXMgdmFsaWQuIFRoZQorYXBwbGljYXRpb24gc2hvdWxkIGluY3JlYXNlIHRoZSBpbmRleCBieSBvbmUgZm9yIGVhY2ggY2FsbCB1bnRpbAorPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGlzIHJldHVybmVkLiBUaGUgYHY0bDJfZnJtaXZhbGVudW0udHlwZWAKK2ZpZWxkIGlzIHNldCB0byBgVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEVgIGJ5IHRoZSBkcml2ZXIuIE9mIHRoZQordW5pb24gb25seSB0aGUgYGRpc2NyZXRlYCBtZW1iZXIgaXMgdmFsaWQuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+U3RlcC13aXNlOjwvZW1waGFzaXM+IFRoZSBmdW5jdGlvbgorcmV0dXJucyBzdWNjZXNzIGlmIHRoZSBnaXZlbiBpbmRleCB2YWx1ZSBpcyB6ZXJvIGFuZAorPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvciBhbnkgb3RoZXIgaW5kZXggdmFsdWUuIFRoZQorPHN0cnVjdGZpZWxkPnY0bDJfZnJtaXZhbGVudW0udHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIHNldCB0bworPGNvbnN0YW50PlY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YgdGhlCit1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMKK3ZhbGlkLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkNvbnRpbnVvdXM6PC9lbXBoYXNpcz4gVGhpcyBpcyBhCitzcGVjaWFsIGNhc2Ugb2YgdGhlIHN0ZXAtd2lzZSB0eXBlIGFib3ZlLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzCitpZiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUgaXMgemVybyBhbmQgPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvcgorYW55IG90aGVyIGluZGV4IHZhbHVlLiBUaGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybWl2YWxlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0ZSTUlWQUxfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YKK3RoZSB1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMgdmFsaWQKK2FuZCB0aGUgPHN0cnVjdGZpZWxkPnN0ZXA8L3N0cnVjdGZpZWxkPiB2YWx1ZSBpcyBzZXQgdG8gMS48L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgPHBhcmE+V2hlbiB0aGUgYXBwbGljYXRpb24gY2FsbHMgdGhlIGZ1bmN0aW9uIHdpdGggaW5kZXggemVybywgaXQKK211c3QgY2hlY2sgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gZGV0ZXJtaW5lIHRoZQordHlwZSBvZiBmcmFtZSBpbnRlcnZhbCBlbnVtZXJhdGlvbiB0aGUgZGV2aWNlIHN1cHBvcnRzLiBPbmx5IGZvciB0aGUKKzxjb25zdGFudD5WNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURTwvY29uc3RhbnQ+IHR5cGUgZG9lcyBpdCBtYWtlCitzZW5zZSB0byBpbmNyZWFzZSB0aGUgaW5kZXggdmFsdWUgdG8gcmVjZWl2ZSBtb3JlIGZyYW1lCitpbnRlcnZhbHMuPC9wYXJhPgorICAgIDxwYXJhPk5vdGUgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGZyYW1lIGludGVydmFscyBhcmUKK3JldHVybmVkIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcuIEluIHBhcnRpY3VsYXIgZG9lcyBpdCBub3Qgc2F5Cithbnl0aGluZyBhYm91dCBwb3RlbnRpYWwgZGVmYXVsdCBmcmFtZSBpbnRlcnZhbHMuPC9wYXJhPgorICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gYXNzdW1lIHRoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgZG9lcyBub3QKK2NoYW5nZSB3aXRob3V0IGFueSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYuIFRoaXMgbWVhbnMKK3RoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgaXMgY29uc2lzdGVudCBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QKK3BlcmZvcm0gYW55IG90aGVyIGlvY3RsIGNhbGxzIHdoaWxlIGl0IHJ1bnMgdGhlIGZyYW1lIGludGVydmFsCitlbnVtZXJhdGlvbi48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPjxlbXBoYXNpcyByb2xlPSJib2xkIj5GcmFtZSBpbnRlcnZhbHMgYW5kIGZyYW1lCityYXRlczo8L2VtcGhhc2lzPiBUaGUgVjRMMiBBUEkgdXNlcyBmcmFtZSBpbnRlcnZhbHMgaW5zdGVhZCBvZiBmcmFtZQorcmF0ZXMuIEdpdmVuIHRoZSBmcmFtZSBpbnRlcnZhbCB0aGUgZnJhbWUgcmF0ZSBjYW4gYmUgY29tcHV0ZWQgYXMKK2ZvbGxvd3M6PHNjcmVlbj5mcmFtZV9yYXRlID0gMSAvIGZyYW1lX2ludGVydmFsPC9zY3JlZW4+PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKworICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+U3RydWN0czwvdGl0bGU+CisKKyAgICA8cGFyYT5JbiB0aGUgc3RydWN0cyBiZWxvdywgPGVtcGhhc2lzPklOPC9lbXBoYXNpcz4gZGVub3RlcyBhCit2YWx1ZSB0aGF0IGhhcyB0byBiZSBmaWxsZWQgaW4gYnkgdGhlIGFwcGxpY2F0aW9uLAorPGVtcGhhc2lzPk9VVDwvZW1waGFzaXM+IGRlbm90ZXMgdmFsdWVzIHRoYXQgdGhlIGRyaXZlciBmaWxscyBpbi4gVGhlCithcHBsaWNhdGlvbiBzaG91bGQgemVybyBvdXQgYWxsIG1lbWJlcnMgZXhjZXB0IGZvciB0aGUKKzxlbXBoYXNpcz5JTjwvZW1waGFzaXM+IGZpZWxkcy48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZnJtaXZhbC1zdGVwd2lzZSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZnJtaXZhbF9zdGVwd2lzZTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5taW48L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NaW5pbXVtIGZyYW1lIGludGVydmFsIFtzXS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tYXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NYXhpbXVtIGZyYW1lIGludGVydmFsIFtzXS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zdGVwPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RnJhbWUgaW50ZXJ2YWwgc3RlcCBzaXplIFtzXS48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZnJtaXZhbGVudW0iPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2ZybWl2YWxlbnVtPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklOOiBJbmRleCBvZiB0aGUgZ2l2ZW4gZnJhbWUgaW50ZXJ2YWwgaW4gdGhlCitlbnVtZXJhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeGVsX2Zvcm1hdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JTjogUGl4ZWwgZm9ybWF0IGZvciB3aGljaCB0aGUgZnJhbWUgaW50ZXJ2YWxzIGFyZQorZW51bWVyYXRlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklOOiBGcmFtZSB3aWR0aCBmb3Igd2hpY2ggdGhlIGZyYW1lIGludGVydmFscyBhcmUKK2VudW1lcmF0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5oZWlnaHQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+SU46IEZyYW1lIGhlaWdodCBmb3Igd2hpY2ggdGhlIGZyYW1lIGludGVydmFscyBhcmUKK2VudW1lcmF0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9VVDogRnJhbWUgaW50ZXJ2YWwgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9VVDogRnJhbWUgaW50ZXJ2YWwgd2l0aCB0aGUgZ2l2ZW4gaW5kZXguPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRpc2NyZXRlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RnJhbWUgaW50ZXJ2YWwgW3NdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItZnJtaXZhbC1zdGVwd2lzZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXB3aXNlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZFsyXTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBzcGFjZSBmb3IgZnV0dXJlIHVzZS48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5FbnVtczwvdGl0bGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZnJtaXZhbHR5cGVzIj4KKyAgICAgIDx0aXRsZT5lbnVtIDxzdHJ1Y3RuYW1lPnY0bDJfZnJtaXZhbHR5cGVzPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PkRpc2NyZXRlIGZyYW1lIGludGVydmFsLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GUk1JVkFMX1RZUEVfQ09OVElOVU9VUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+Q29udGludW91cyBmcmFtZSBpbnRlcnZhbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5TdGVwLXdpc2UgZGVmaW5lZCBmcmFtZSBpbnRlcnZhbC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8cGFyYT5TZWUgdGhlIGRlc2NyaXB0aW9uIHNlY3Rpb24gYWJvdmUgZm9yIGEgbGlzdCBvZiByZXR1cm4KK3ZhbHVlcyB0aGF0IDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiBjYW4gaGF2ZS48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW0tZnJhbWVzaXplcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmE0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sCkBAIC0wLDAgKzEsMjgyIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMiPgorCisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGZyYW1lIHNpemVzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfRU5VTV9GUkFNRVNJWkVTPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlBvaW50ZXIgdG8gYSAmdjRsMi1mcm1zaXplZW51bTsgdGhhdCBjb250YWlucyBhbiBpbmRleAorYW5kIHBpeGVsIGZvcm1hdCBhbmQgcmVjZWl2ZXMgYSBmcmFtZSB3aWR0aCBhbmQgaGVpZ2h0LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8bm90ZT4KKyAgICAgIDx0aXRsZT5FeHBlcmltZW50YWw8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGlzIGlzIGFuIDxsaW5rIGxpbmtlbmQ9ImV4cGVyaW1lbnRhbCI+ZXhwZXJpbWVudGFsPC9saW5rPgoraW50ZXJmYWNlIGFuZCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuPC9wYXJhPgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBlbnVtZXJhdGUgYWxsIGZyYW1lIHNpemVzCisoJmllOyB3aWR0aCBhbmQgaGVpZ2h0IGluIHBpeGVscykgdGhhdCB0aGUgZGV2aWNlIHN1cHBvcnRzIGZvciB0aGUKK2dpdmVuIHBpeGVsIGZvcm1hdC48L3BhcmE+CisgICAgPHBhcmE+VGhlIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXRzIGNhbiBiZSBvYnRhaW5lZCBieSB1c2luZyB0aGUKKyZWSURJT0MtRU5VTS1GTVQ7IGZ1bmN0aW9uLjwvcGFyYT4KKyAgICA8cGFyYT5UaGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgY29udGVudCBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybXNpemVlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXBlbmQgb24gdGhlCit0eXBlIG9mIGZyYW1lIHNpemVzIHRoZSBkZXZpY2Ugc3VwcG9ydHMuIEhlcmUgYXJlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlCitmdW5jdGlvbiBmb3IgdGhlIGRpZmZlcmVudCBjYXNlczo8L3BhcmE+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPjxlbXBoYXNpcyByb2xlPSJib2xkIj5EaXNjcmV0ZTo8L2VtcGhhc2lzPiBUaGUgZnVuY3Rpb24KK3JldHVybnMgc3VjY2VzcyBpZiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUgKHplcm8tYmFzZWQpIGlzIHZhbGlkLiBUaGUKK2FwcGxpY2F0aW9uIHNob3VsZCBpbmNyZWFzZSB0aGUgaW5kZXggYnkgb25lIGZvciBlYWNoIGNhbGwgdW50aWwKKzxjb25zdGFudD5FSU5WQUw8L2NvbnN0YW50PiBpcyByZXR1cm5lZC4gVGhlCis8c3RydWN0ZmllbGQ+djRsMl9mcm1zaXplZW51bS50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU8L2NvbnN0YW50PiBieSB0aGUgZHJpdmVyLiBPZiB0aGUKK3VuaW9uIG9ubHkgdGhlIDxzdHJ1Y3RmaWVsZD5kaXNjcmV0ZTwvc3RydWN0ZmllbGQ+IG1lbWJlciBpcwordmFsaWQuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+U3RlcC13aXNlOjwvZW1waGFzaXM+IFRoZSBmdW5jdGlvbgorcmV0dXJucyBzdWNjZXNzIGlmIHRoZSBnaXZlbiBpbmRleCB2YWx1ZSBpcyB6ZXJvIGFuZAorPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvciBhbnkgb3RoZXIgaW5kZXggdmFsdWUuIFRoZQorPHN0cnVjdGZpZWxkPnY0bDJfZnJtc2l6ZWVudW0udHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIHNldCB0bworPGNvbnN0YW50PlY0TDJfRlJNU0laRV9UWVBFX1NURVBXSVNFPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YgdGhlCit1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMKK3ZhbGlkLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkNvbnRpbnVvdXM6PC9lbXBoYXNpcz4gVGhpcyBpcyBhCitzcGVjaWFsIGNhc2Ugb2YgdGhlIHN0ZXAtd2lzZSB0eXBlIGFib3ZlLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzCitpZiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUgaXMgemVybyBhbmQgPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvcgorYW55IG90aGVyIGluZGV4IHZhbHVlLiBUaGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybXNpemVlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YKK3RoZSB1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMgdmFsaWQKK2FuZCB0aGUgPHN0cnVjdGZpZWxkPnN0ZXBfd2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5zdGVwX2hlaWdodDwvc3RydWN0ZmllbGQ+IHZhbHVlcyBhcmUgc2V0IHRvIDEuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgIDxwYXJhPldoZW4gdGhlIGFwcGxpY2F0aW9uIGNhbGxzIHRoZSBmdW5jdGlvbiB3aXRoIGluZGV4IHplcm8sIGl0CittdXN0IGNoZWNrIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIGRldGVybWluZSB0aGUKK3R5cGUgb2YgZnJhbWUgc2l6ZSBlbnVtZXJhdGlvbiB0aGUgZGV2aWNlIHN1cHBvcnRzLiBPbmx5IGZvciB0aGUKKzxjb25zdGFudD5WNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURTwvY29uc3RhbnQ+IHR5cGUgZG9lcyBpdCBtYWtlCitzZW5zZSB0byBpbmNyZWFzZSB0aGUgaW5kZXggdmFsdWUgdG8gcmVjZWl2ZSBtb3JlIGZyYW1lIHNpemVzLjwvcGFyYT4KKyAgICA8cGFyYT5Ob3RlIHRoYXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmcmFtZSBzaXplcyBhcmUgcmV0dXJuZWQKK2hhcyBubyBzcGVjaWFsIG1lYW5pbmcuIEluIHBhcnRpY3VsYXIgZG9lcyBpdCBub3Qgc2F5IGFueXRoaW5nIGFib3V0Citwb3RlbnRpYWwgZGVmYXVsdCBmb3JtYXQgc2l6ZXMuPC9wYXJhPgorICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gYXNzdW1lIHRoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgZG9lcyBub3QKK2NoYW5nZSB3aXRob3V0IGFueSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYuIFRoaXMgbWVhbnMKK3RoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgaXMgY29uc2lzdGVudCBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QKK3BlcmZvcm0gYW55IG90aGVyIGlvY3RsIGNhbGxzIHdoaWxlIGl0IHJ1bnMgdGhlIGZyYW1lIHNpemUKK2VudW1lcmF0aW9uLjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlN0cnVjdHM8L3RpdGxlPgorCisgICAgPHBhcmE+SW4gdGhlIHN0cnVjdHMgYmVsb3csIDxlbXBoYXNpcz5JTjwvZW1waGFzaXM+IGRlbm90ZXMgYQordmFsdWUgdGhhdCBoYXMgdG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBhcHBsaWNhdGlvbiwKKzxlbXBoYXNpcz5PVVQ8L2VtcGhhc2lzPiBkZW5vdGVzIHZhbHVlcyB0aGF0IHRoZSBkcml2ZXIgZmlsbHMgaW4uIFRoZQorYXBwbGljYXRpb24gc2hvdWxkIHplcm8gb3V0IGFsbCBtZW1iZXJzIGV4Y2VwdCBmb3IgdGhlCis8ZW1waGFzaXM+SU48L2VtcGhhc2lzPiBmaWVsZHMuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWZybXNpemUtZGlzY3JldGUiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2ZybXNpemVfZGlzY3JldGU8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldpZHRoIG9mIHRoZSBmcmFtZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SGVpZ2h0IG9mIHRoZSBmcmFtZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcm1zaXplLXN0ZXB3aXNlIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9mcm1zaXplX3N0ZXB3aXNlPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWluX3dpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWluaW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWF4X3dpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF4aW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RlcF93aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkZyYW1lIHdpZHRoIHN0ZXAgc2l6ZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWluX2hlaWdodDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1pbmltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tYXhfaGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF4aW11bSBmcmFtZSBoZWlnaHQgW3BpeGVsXS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXBfaGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RnJhbWUgaGVpZ2h0IHN0ZXAgc2l6ZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcm1zaXplZW51bSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZnJtc2l6ZWVudW08L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIC8+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+SU46IEluZGV4IG9mIHRoZSBnaXZlbiBmcmFtZSBzaXplIGluIHRoZSBlbnVtZXJhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeGVsX2Zvcm1hdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JTjogUGl4ZWwgZm9ybWF0IGZvciB3aGljaCB0aGUgZnJhbWUgc2l6ZXMgYXJlIGVudW1lcmF0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9VVDogRnJhbWUgc2l6ZSB0eXBlIHRoZSBkZXZpY2Ugc3VwcG9ydHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnVuaW9uPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+T1VUOiBGcmFtZSBzaXplIHdpdGggdGhlIGdpdmVuIGluZGV4LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItZnJtc2l6ZS1kaXNjcmV0ZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRpc2NyZXRlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi1mcm1zaXplLXN0ZXB3aXNlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkWzJdPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIHNwYWNlIGZvciBmdXR1cmUgdXNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkVudW1zPC90aXRsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcm1zaXpldHlwZXMiPgorICAgICAgPHRpdGxlPmVudW0gPHN0cnVjdG5hbWU+djRsMl9mcm1zaXpldHlwZXM8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+RGlzY3JldGUgZnJhbWUgc2l6ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRlJNU0laRV9UWVBFX0NPTlRJTlVPVVM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbnRpbnVvdXMgZnJhbWUgc2l6ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRlJNU0laRV9UWVBFX1NURVBXSVNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5TdGVwLXdpc2UgZGVmaW5lZCBmcmFtZSBzaXplLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDxwYXJhPlNlZSB0aGUgZGVzY3JpcHRpb24gc2VjdGlvbiBhYm92ZSBmb3IgYSBsaXN0IG9mIHJldHVybgordmFsdWVzIHRoYXQgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IGNhbiBoYXZlLjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1hdWRpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZThmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW8ueG1sCkBAIC0wLDAgKzEsODYgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW1hdWRpbyI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNQVVESU88L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNQVVESU88L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGF1ZGlvIGlucHV0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9hdWRpbyAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1BVURJTzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gYXVkaW8gaW5wdXQgYXBwbGljYXRpb25zCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgemVybyBvdXQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBvZiBhICZ2NGwyLWF1ZGlvOworYW5kIGNhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfRU5VTUFVRElPPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIKK3RvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBvciByZXR1cm4gYW4KKyZFSU5WQUw7IHdoZW4gdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuIFRvIGVudW1lcmF0ZSBhbGwgYXVkaW8KK2lucHV0cyBhcHBsaWNhdGlvbnMgc2hhbGwgYmVnaW4gYXQgaW5kZXggemVybywgaW5jcmVtZW50aW5nIGJ5IG9uZQordW50aWwgdGhlIGRyaXZlciByZXR1cm5zIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDxwYXJhPlNlZSA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1hdWRpbyIgLz4gZm9yIGEgZGVzY3JpcHRpb24gb2YKKyZ2NGwyLWF1ZGlvOy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgbnVtYmVyIG9mIHRoZSBhdWRpbyBpbnB1dCBpcyBvdXQgb2YgYm91bmRzLCBvcgordGhlcmUgYXJlIG5vIGF1ZGlvIGlucHV0cyBhdCBhbGwgYW5kIHRoaXMgaW9jdGwgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1hdWRpb291dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW9vdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZDdjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW9vdXQueG1sCkBAIC0wLDAgKzEsODkgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW1hdWRpb291dCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNQVVET1VUPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfRU5VTUFVRE9VVDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5FbnVtZXJhdGUgYXVkaW8gb3V0cHV0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9hdWRpb291dCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1BVURPVVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGF1ZGlvIG91dHB1dCBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCB6ZXJvIG91dCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEgJnY0bDItYXVkaW9vdXQ7IGFuZAorY2FsbCB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0FVRE9VVDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyCit0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJuIGFuCismRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsIGF1ZGlvCitvdXRwdXRzIGFwcGxpY2F0aW9ucyBzaGFsbCBiZWdpbiBhdCBpbmRleCB6ZXJvLCBpbmNyZW1lbnRpbmcgYnkgb25lCit1bnRpbCB0aGUgZHJpdmVyIHJldHVybnMgPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4uPC9wYXJhPgorCisgICAgPHBhcmE+Tm90ZSBjb25uZWN0b3JzIG9uIGEgVFYgY2FyZCB0byBsb29wIGJhY2sgdGhlIHJlY2VpdmVkIGF1ZGlvCitzaWduYWwgdG8gYSBzb3VuZCBjYXJkIGFyZSBub3QgYXVkaW8gb3V0cHV0cyBpbiB0aGlzIHNlbnNlLjwvcGFyYT4KKworICAgIDxwYXJhPlNlZSA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1hdWRpb291dCIgLz4gZm9yIGEgZGVzY3JpcHRpb24gb2YKKyZ2NGwyLWF1ZGlvb3V0Oy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgbnVtYmVyIG9mIHRoZSBhdWRpbyBvdXRwdXQgaXMgb3V0IG9mIGJvdW5kcywgb3IKK3RoZXJlIGFyZSBubyBhdWRpbyBvdXRwdXRzIGF0IGFsbCBhbmQgdGhpcyBpb2N0bCBpcyBub3QKK3N1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWlucHV0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1pbnB1dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0ODU2YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1pbnB1dC54bWwKQEAgLTAsMCArMSwyODcgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW1pbnB1dCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNSU5QVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNSU5QVVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIHZpZGVvIGlucHV0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9pbnB1dAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19FTlVNSU5QVVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdmlkZW8gaW5wdXQgYXBwbGljYXRpb25zCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1pbnB1dDsKK2FuZCBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0VOVU1JTlBVVDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYQorcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IKK3JldHVybiBhbiAmRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsCitpbnB1dHMgYXBwbGljYXRpb25zIHNoYWxsIGJlZ2luIGF0IGluZGV4IHplcm8sIGluY3JlbWVudGluZyBieSBvbmUKK3VudGlsIHRoZSBkcml2ZXIgcmV0dXJucyA8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPi48L3BhcmE+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItaW5wdXQiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2lucHV0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5JZGVudGlmaWVzIHRoZSBpbnB1dCwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgdmlkZW8gaW5wdXQsIGEgTlVMLXRlcm1pbmF0ZWQgQVNDSUkKK3N0cmluZywgZm9yIGV4YW1wbGU6ICJWaW4gKENvbXBvc2l0ZSAyKSIuIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQKK2ZvciB0aGUgdXNlciwgcHJlZmVyYWJseSB0aGUgY29ubmVjdG9yIGxhYmVsIG9uIHRoZSBkZXZpY2UgaXRzZWxmLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGlucHV0LCBzZWUgPHhyZWYKKwkJbGlua2VuZD0iaW5wdXQtdHlwZSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPkRyaXZlcnMgY2FuIGVudW1lcmF0ZSB1cCB0byAzMiB2aWRlbyBhbmQKK2F1ZGlvIGlucHV0cy4gVGhpcyBmaWVsZCBzaG93cyB3aGljaCBhdWRpbyBpbnB1dHMgd2VyZSBzZWxlY3RhYmxlIGFzCithdWRpbyBzb3VyY2UgaWYgdGhpcyB3YXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2aWRlbyBpbnB1dC4gSXQgaXMgYQorYml0IG1hc2suIFRoZSBMU0IgY29ycmVzcG9uZHMgdG8gYXVkaW8gaW5wdXQgMCwgdGhlIE1TQiB0byBpbnB1dCAzMS4KK0FueSBudW1iZXIgb2YgYml0cyBjYW4gYmUgc2V0LCBvciBub25lLjwvcGFyYT48cGFyYT5XaGVuIHRoZSBkcml2ZXIKK2RvZXMgbm90IGVudW1lcmF0ZSBhdWRpbyBpbnB1dHMgbm8gYml0cyBtdXN0IGJlIHNldC4gQXBwbGljYXRpb25zCitzaGFsbCBub3QgaW50ZXJwcmV0IHRoaXMgYXMgbGFjayBvZiBhdWRpbyBzdXBwb3J0LiBTb21lIGRyaXZlcnMKK2F1dG9tYXRpY2FsbHkgc2VsZWN0IGF1ZGlvIHNvdXJjZXMgYW5kIGRvIG5vdCBlbnVtZXJhdGUgdGhlbSBzaW5jZQordGhlcmUgaXMgbm8gY2hvaWNlIGFueXdheS48L3BhcmE+PHBhcmE+Rm9yIGRldGFpbHMgb24gYXVkaW8gaW5wdXRzIGFuZAoraG93IHRvIHNlbGVjdCB0aGUgY3VycmVudCBpbnB1dCBzZWUgPHhyZWYKKwkJICBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5DYXB0dXJlIGRldmljZXMgY2FuIGhhdmUgemVybyBvciBtb3JlIHR1bmVycyAoUkYKK2RlbW9kdWxhdG9ycykuIFdoZW4gdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9JTlBVVF9UWVBFX1RVTkVSPC9jb25zdGFudD4gdGhpcyBpcyBhbiBSRiBjb25uZWN0b3IgYW5kCit0aGlzIGZpZWxkIGlkZW50aWZpZXMgdGhlIHR1bmVyLiBJdCBjb3JyZXNwb25kcyB0bworJnY0bDItdHVuZXI7IGZpZWxkIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+LiBGb3IgZGV0YWlscyBvbgordHVuZXJzIHNlZSA8eHJlZiBsaW5rZW5kPSJ0dW5lciIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXN0ZC1pZDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkV2ZXJ5IHZpZGVvIGlucHV0IHN1cHBvcnRzIG9uZSBvciBtb3JlIGRpZmZlcmVudAordmlkZW8gc3RhbmRhcmRzLiBUaGlzIGZpZWxkIGlzIGEgc2V0IG9mIGFsbCBzdXBwb3J0ZWQgc3RhbmRhcmRzLiBGb3IKK2RldGFpbHMgb24gdmlkZW8gc3RhbmRhcmRzIGFuZCBob3cgdG8gc3dpdGNoIHNlZSA8eHJlZgorbGlua2VuZD0ic3RhbmRhcmQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RhdHVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBmaWVsZCBwcm92aWRlcyBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitpbnB1dC4gU2VlIDx4cmVmIGxpbmtlbmQ9ImlucHV0LXN0YXR1cyIgLz4gZm9yIGZsYWdzLgorV2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBzZW5zb3Igb3JpZW50YXRpb24gYml0cyA8c3RydWN0ZmllbGQ+c3RhdHVzPC9zdHJ1Y3RmaWVsZD4gaXMgb25seSB2YWxpZCB3aGVuIHRoaXMgaXMgdGhlCitjdXJyZW50IGlucHV0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0iaW5wdXQtdHlwZSI+CisgICAgICA8dGl0bGU+SW5wdXQgVHlwZXM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBpbnB1dCB1c2VzIGEgdHVuZXIgKFJGIGRlbW9kdWxhdG9yKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkFuYWxvZyBiYXNlYmFuZCBpbnB1dCwgZm9yIGV4YW1wbGUgQ1ZCUyAvCitDb21wb3NpdGUgVmlkZW8sIFMtVmlkZW8sIFJHQi48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8IS0tIFN0YXR1cyBmbGFncyBiYXNlZCBvbiBwcm9wb3NhbCBieSBNYXJrIE1jQ2xlbGxhbmQsCit2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20gb24gMTggT2N0IDIwMDIsIHN1YmplY3QgIlJlOiBbVjRMXSBSZToKK3Y0bDIgYXBpIi4gIldoeSBhcmUgc29tZSBvZiB0aGVtIGludmVydGVkPyBTbyB0aGF0IHRoZSBkcml2ZXIgZG9lc24ndAoraGF2ZSB0byBsaWUgYWJvdXQgdGhlIHN0YXR1cyBpbiBjYXNlcyB3aGVyZSBpdCBjYW4ndCB0ZWxsIG9uZSB3YXkgb3IKK3RoZSBvdGhlci4gUGx1cywgYSBzdGF0dXMgb2YgemVybyB3b3VsZCBnZW5lcmFsbHkgbWVhbiB0aGF0IGV2ZXJ5dGhpbmcKK2lzIE9LLiIgLS0+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9ImlucHV0LXN0YXR1cyI+CisgICAgICA8dGl0bGU+SW5wdXQgU3RhdHVzIEZsYWdzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzEiIG5hbWVlbmQ9ImMzIiBzcGFubmFtZT0iaHNwYW4iCisJICBhbGlnbj0ibGVmdCIgLz4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+R2VuZXJhbDwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9OT19QT1dFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+QXR0YWNoZWQgZGV2aWNlIGlzIG9mZi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTk9fU0lHTkFMPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTk9fQ09MT1I8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBoYXJkd2FyZSBzdXBwb3J0cyBjb2xvciBkZWNvZGluZywgYnV0IGRvZXMgbm90CitkZXRlY3QgY29sb3IgbW9kdWxhdGlvbiBpbiB0aGUgc2lnbmFsLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlNlbnNvciBPcmllbnRhdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9IRkxJUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMTA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGlucHV0IGlzIGNvbm5lY3RlZCB0byBhIGRldmljZSB0aGF0IHByb2R1Y2VzIGEgc2lnbmFsCit0aGF0IGlzIGZsaXBwZWQgaG9yaXpvbnRhbGx5IGFuZCBkb2VzIG5vdCBjb3JyZWN0IHRoaXMgYmVmb3JlIHBhc3NpbmcgdGhlCitzaWduYWwgdG8gdXNlcnNwYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9WRkxJUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMjA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGlucHV0IGlzIGNvbm5lY3RlZCB0byBhIGRldmljZSB0aGF0IHByb2R1Y2VzIGEgc2lnbmFsCit0aGF0IGlzIGZsaXBwZWQgdmVydGljYWxseSBhbmQgZG9lcyBub3QgY29ycmVjdCB0aGlzIGJlZm9yZSBwYXNzaW5nIHRoZQorc2lnbmFsIHRvIHVzZXJzcGFjZS4gTm90ZSB0aGF0IGEgMTgwIGRlZ3JlZSByb3RhdGlvbiBpcyB0aGUgc2FtZSBhcyBIRkxJUCB8IFZGTElQPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+QW5hbG9nIFZpZGVvPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX05PX0hfTE9DSzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAxMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+Tm8gaG9yaXpvbnRhbCBzeW5jIGxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX0NPTE9SX0tJTEw8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMjAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgY29sb3Iga2lsbGVyIGNpcmN1aXQgYXV0b21hdGljYWxseSBkaXNhYmxlcyBjb2xvcgorZGVjb2Rpbmcgd2hlbiBpdCBkZXRlY3RzIG5vIGNvbG9yIG1vZHVsYXRpb24uIFdoZW4gdGhpcyBmbGFnIGlzIHNldAordGhlIGNvbG9yIGtpbGxlciBpcyBlbmFibGVkIDxlbXBoYXNpcz5hbmQ8L2VtcGhhc2lzPiBoYXMgc2h1dCBvZmYKK2NvbG9yIGRlY29kaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkRpZ2l0YWwgVmlkZW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTk9fU1lOQzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+Tm8gc3luY2hyb25pemF0aW9uIGxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX05PX0VRVTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMjAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+Tm8gZXF1YWxpemVyIGxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX05PX0NBUlJJRVI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDQwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNhcnJpZXIgcmVjb3ZlcnkgZmFpbGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlZDUiBhbmQgU2V0LVRvcCBCb3g8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTUFDUk9WSVNJT048L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAxMDAwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hY3JvdmlzaW9uIGlzIGFuIGFuYWxvZyBjb3B5IHByZXZlbnRpb24gc3lzdGVtCittYW5nbGluZyB0aGUgdmlkZW8gc2lnbmFsIHRvIGNvbmZ1c2UgdmlkZW8gcmVjb3JkZXJzLiBXaGVuIHRoaXMKK2ZsYWcgaXMgc2V0IE1hY3JvdmlzaW9uIGhhcyBiZWVuIGRldGVjdGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9OT19BQ0NFU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAyMDAwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbmRpdGlvbmFsIGFjY2VzcyBkZW5pZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX1ZUUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDQwMDAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VlRSIHRpbWUgY29uc3RhbnQuIFs/XTwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1pbnB1dDsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMKK291dCBvZiBib3VuZHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bW91dHB1dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkMTZkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sCkBAIC0wLDAgKzEsMTcyIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1lbnVtb3V0cHV0Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0VOVU1PVVRQVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNT1VUUFVUPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkVudW1lcmF0ZSB2aWRlbyBvdXRwdXRzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX291dHB1dCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1PVVRQVVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdmlkZW8gb3V0cHV0cyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLW91dHB1dDsKK2FuZCBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0VOVU1PVVRQVVQ8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEKK3BvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yCityZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gVG8gZW51bWVyYXRlIGFsbAorb3V0cHV0cyBhcHBsaWNhdGlvbnMgc2hhbGwgYmVnaW4gYXQgaW5kZXggemVybywgaW5jcmVtZW50aW5nIGJ5IG9uZQordW50aWwgdGhlIGRyaXZlciByZXR1cm5zIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1vdXRwdXQiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX291dHB1dDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgb3V0cHV0LCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5OYW1lIG9mIHRoZSB2aWRlbyBvdXRwdXQsIGEgTlVMLXRlcm1pbmF0ZWQgQVNDSUkKK3N0cmluZywgZm9yIGV4YW1wbGU6ICJWb3V0Ii4gVGhpcyBpbmZvcm1hdGlvbiBpcyBpbnRlbmRlZCBmb3IgdGhlCit1c2VyLCBwcmVmZXJhYmx5IHRoZSBjb25uZWN0b3IgbGFiZWwgb24gdGhlIGRldmljZSBpdHNlbGYuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VHlwZSBvZiB0aGUgb3V0cHV0LCBzZWUgPHhyZWYKKwkJbGlua2VuZD0ib3V0cHV0LXR5cGUiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+YXVkaW9zZXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5Ecml2ZXJzIGNhbiBlbnVtZXJhdGUgdXAgdG8gMzIgdmlkZW8gYW5kCithdWRpbyBvdXRwdXRzLiBUaGlzIGZpZWxkIHNob3dzIHdoaWNoIGF1ZGlvIG91dHB1dHMgd2VyZQorc2VsZWN0YWJsZSBhcyB0aGUgY3VycmVudCBvdXRwdXQgaWYgdGhpcyB3YXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAordmlkZW8gb3V0cHV0LiBJdCBpcyBhIGJpdCBtYXNrLiBUaGUgTFNCIGNvcnJlc3BvbmRzIHRvIGF1ZGlvIG91dHB1dCAwLAordGhlIE1TQiB0byBvdXRwdXQgMzEuIEFueSBudW1iZXIgb2YgYml0cyBjYW4gYmUgc2V0LCBvcgorbm9uZS48L3BhcmE+PHBhcmE+V2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IGVudW1lcmF0ZSBhdWRpbyBvdXRwdXRzIG5vCitiaXRzIG11c3QgYmUgc2V0LiBBcHBsaWNhdGlvbnMgc2hhbGwgbm90IGludGVycHJldCB0aGlzIGFzIGxhY2sgb2YKK2F1ZGlvIHN1cHBvcnQuIERyaXZlcnMgbWF5IGF1dG9tYXRpY2FsbHkgc2VsZWN0IGF1ZGlvIG91dHB1dHMgd2l0aG91dAorZW51bWVyYXRpbmcgdGhlbS48L3BhcmE+PHBhcmE+Rm9yIGRldGFpbHMgb24gYXVkaW8gb3V0cHV0cyBhbmQgaG93IHRvCitzZWxlY3QgdGhlIGN1cnJlbnQgb3V0cHV0IHNlZSA8eHJlZiBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bW9kdWxhdG9yPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+T3V0cHV0IGRldmljZXMgY2FuIGhhdmUgemVybyBvciBtb3JlIFJGIG1vZHVsYXRvcnMuCitXaGVuIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1I8L2NvbnN0YW50PiB0aGlzIGlzIGFuIFJGCitjb25uZWN0b3IgYW5kIHRoaXMgZmllbGQgaWRlbnRpZmllcyB0aGUgbW9kdWxhdG9yLiBJdCBjb3JyZXNwb25kcyB0bworJnY0bDItbW9kdWxhdG9yOyBmaWVsZCA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPi4gRm9yIGRldGFpbHMKK29uIG1vZHVsYXRvcnMgc2VlIDx4cmVmIGxpbmtlbmQ9InR1bmVyIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItc3RkLWlkOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RXZlcnkgdmlkZW8gb3V0cHV0IHN1cHBvcnRzIG9uZSBvciBtb3JlIGRpZmZlcmVudAordmlkZW8gc3RhbmRhcmRzLiBUaGlzIGZpZWxkIGlzIGEgc2V0IG9mIGFsbCBzdXBwb3J0ZWQgc3RhbmRhcmRzLiBGb3IKK2RldGFpbHMgb24gdmlkZW8gc3RhbmRhcmRzIGFuZCBob3cgdG8gc3dpdGNoIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJzdGFuZGFyZCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBtdXN0IHNldAordGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJvdXRwdXQtdHlwZSI+CisgICAgICA8dGl0bGU+T3V0cHV0IFR5cGU8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIG91dHB1dCBpcyBhbiBhbmFsb2cgVFYgbW9kdWxhdG9yLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9PVVRQVVRfVFlQRV9BTkFMT0c8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkFuYWxvZyBiYXNlYmFuZCBvdXRwdXQsIGZvciBleGFtcGxlIENvbXBvc2l0ZSAvCitDVkJTLCBTLVZpZGVvLCBSR0IuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5Pls/XTwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICA8L3JlZnNlY3QxPgorICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1vdXRwdXQ7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CitpcyBvdXQgb2YgYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtc3RkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1zdGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODAzZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtc3RkLnhtbApAQCAtMCwwICsxLDM5MSBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZW51bXN0ZCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNU1REPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfRU5VTVNURDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5FbnVtZXJhdGUgc3VwcG9ydGVkIHZpZGVvIHN0YW5kYXJkczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1TVEQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdmlkZW8gc3RhbmRhcmQsCitlc3BlY2lhbGx5IGEgY3VzdG9tIChkcml2ZXIgZGVmaW5lZCkgb25lLCBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLXN0YW5kYXJkOyBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfRU5VTVNURDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJuIGFuCismRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsIHN0YW5kYXJkcworYXBwbGljYXRpb25zIHNoYWxsIGJlZ2luICBhdCBpbmRleCB6ZXJvLCBpbmNyZW1lbnRpbmcgYnkgb25lIHVudGlsIHRoZQorZHJpdmVyIHJldHVybnMgPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4uIERyaXZlcnMgbWF5IGVudW1lcmF0ZSBhCitkaWZmZXJlbnQgc2V0IG9mIHN0YW5kYXJkcyBhZnRlciBzd2l0Y2hpbmcgdGhlIHZpZGVvIGlucHV0IG9yCitvdXRwdXQuPGZvb3Rub3RlPgorCTxwYXJhPlRoZSBzdXBwb3J0ZWQgc3RhbmRhcmRzIG1heSBvdmVybGFwIGFuZCB3ZSBuZWVkIGFuCit1bmFtYmlndW91cyBzZXQgdG8gZmluZCB0aGUgY3VycmVudCBzdGFuZGFyZCByZXR1cm5lZCBieQorPGNvbnN0YW50PlZJRElPQ19HX1NURDwvY29uc3RhbnQ+LjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXN0YW5kYXJkIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9zdGFuZGFyZDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TnVtYmVyIG9mIHRoZSB2aWRlbyBzdGFuZGFyZCwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXN0ZC1pZDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGJpdHMgaW4gdGhpcyBmaWVsZCBpZGVudGlmeSB0aGUgc3RhbmRhcmQgYXMKK29uZSBvZiB0aGUgY29tbW9uIHN0YW5kYXJkcyBsaXN0ZWQgaW4gPHhyZWYgbGlua2VuZD0idjRsMi1zdGQtaWQiIC8+LAorb3IgaWYgYml0cyAzMiB0byA2MyBhcmUgc2V0IGFzIGN1c3RvbSBzdGFuZGFyZHMuIE11bHRpcGxlIGJpdHMgY2FuIGJlCitzZXQgaWYgdGhlIGhhcmR3YXJlIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2Ugc3RhbmRhcmRzLAoraG93ZXZlciBzZXBhcmF0ZSBpbmRpY2VzIGRvIG5vdCBpbmRpY2F0ZSB0aGUgb3Bwb3NpdGUuIFRoZQorPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gbXVzdCBiZSB1bmlxdWUuIE5vIG90aGVyIGVudW1lcmF0ZWQKKzxzdHJ1Y3RuYW1lPnY0bDJfc3RhbmRhcmQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSwgZm9yIHRoaXMgaW5wdXQgb3IKK291dHB1dCBhbnl3YXksIGNhbiBjb250YWluIHRoZSBzYW1lIHNldCBvZiBiaXRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD5bMjRdPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5hbWUgb2YgdGhlIHN0YW5kYXJkLCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcsIGZvciBleGFtcGxlOiAiUEFMLUIvRyIsICJOVFNDIEphcGFuIi4gVGhpcyBpbmZvcm1hdGlvbiBpcworaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZyYW1lcGVyaW9kPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGZyYW1lIHBlcmlvZCAobm90IGZpZWxkIHBlcmlvZCkgaXMgbnVtZXJhdG9yCisvIGRlbm9taW5hdG9yLiBGb3IgZXhhbXBsZSBNL05UU0MgaGFzIGEgZnJhbWUgcGVyaW9kIG9mIDEwMDEgLworMzAwMDAgc2Vjb25kcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZyYW1lbGluZXM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Ub3RhbCBsaW5lcyBwZXIgZnJhbWUgaW5jbHVkaW5nIGJsYW5raW5nLAorZS4mbmJzcDtnLiA2MjUgZm9yIEIvUEFMLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcmFjdCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZnJhY3Q8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5udW1lcmF0b3I8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRlbm9taW5hdG9yPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXN0ZC1pZCI+CisgICAgICA8dGl0bGU+dHlwZWRlZiA8c3RydWN0bmFtZT52NGwyX3N0ZF9pZDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191NjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnY0bDJfc3RkX2lkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyB0eXBlIGlzIGEgc2V0LCBlYWNoIGJpdCByZXByZXNlbnRpbmcgYW5vdGhlcgordmlkZW8gc3RhbmRhcmQgYXMgbGlzdGVkIGJlbG93IGFuZCBpbiA8eHJlZgorbGlua2VuZD0idmlkZW8tc3RhbmRhcmRzIiAvPi4gVGhlIDMyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgcmVzZXJ2ZWQKK2ZvciBjdXN0b20gKGRyaXZlciBkZWZpbmVkKSB2aWRlbyBzdGFuZGFyZHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPgorI2RlZmluZSBWNEwyX1NURF9QQUxfQiAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDEpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0cgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA0KQorI2RlZmluZSBWNEwyX1NURF9QQUxfSCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDgpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9JICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAxMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0QgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDIwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRDEgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwNDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9LICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA4MCkKKworI2RlZmluZSBWNEwyX1NURF9QQUxfTSAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9OICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX05jICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwNDAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfNjAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT48Y29uc3RhbnQ+VjRMMl9TVERfUEFMXzYwPC9jb25zdGFudD4gaXMKK2EgaHlicmlkIHN0YW5kYXJkIHdpdGggNTI1IGxpbmVzLCA2MCBIeiByZWZyZXNoIHJhdGUsIGFuZCBQQUwgY29sb3IKK21vZHVsYXRpb24gd2l0aCBhIDQuNDMgTUh6IGNvbG9yIHN1YmNhcnJpZXIuIFNvbWUgUEFMIHZpZGVvIHJlY29yZGVycworY2FuIHBsYXkgYmFjayBOVFNDIHRhcGVzIGluIHRoaXMgbW9kZSBmb3IgZGlzcGxheSBvbiBhIDUwLzYwIEh6IGFnbm9zdGljCitQQUwgVFYuPC9wYXJhPjxwYXJhPjxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAxMDAwKQorI2RlZmluZSBWNEwyX1NURF9OVFNDX01fSlAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDIwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPjxwYXJhPjxjb25zdGFudD5WNEwyX1NURF9OVFNDXzQ0MzwvY29uc3RhbnQ+CitpcyBhIGh5YnJpZCBzdGFuZGFyZCB3aXRoIDUyNSBsaW5lcywgNjAgSHogcmVmcmVzaCByYXRlLCBhbmQgTlRTQworY29sb3IgbW9kdWxhdGlvbiB3aXRoIGEgNC40MyBNSHogY29sb3IKK3N1YmNhcnJpZXIuPC9wYXJhPjxwYXJhPjxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA4MDAwKQorCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0IgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDIwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9HICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwNDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0ggICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDA4MDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSyAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMTAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LMSAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAyMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDQwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTEMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwODAwMDAwKQorCisvKiBBVFNDL0hEVFYgKi8KKyNkZWZpbmUgVjRMMl9TVERfQVRTQ184X1ZTQiAgICAgKCh2NGwyX3N0ZF9pZCkweDAxMDAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9BVFNDXzE2X1ZTQiAgICAoKHY0bDJfc3RkX2lkKTB4MDIwMDAwMDApCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT48IS0tIEFUU0MgcHJvcG9zYWwgYnkgTWFyayBNY0NsZWxsYW5kLAordmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tIG9uIDE3IE9jdCAyMDAyCistLT48Y29uc3RhbnQ+VjRMMl9TVERfQVRTQ184X1ZTQjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfU1REX0FUU0NfMTZfVlNCPC9jb25zdGFudD4gYXJlIFUuUy4gdGVycmVzdHJpYWwgZGlnaXRhbAorVFYgc3RhbmRhcmRzLiBQcmVzZW50bHkgdGhlIFY0TDIgQVBJIGRvZXMgbm90IHN1cHBvcnQgZGlnaXRhbCBUVi4gU2VlCithbHNvIHRoZSBMaW51eCBEVkIgQVBJIGF0IDx1bGluawordXJsPSJodHRwOi8vbGludXh0di5vcmciPmh0dHA6Ly9saW51eHR2Lm9yZzwvdWxpbms+LjwvcGFyYT4KKzxwYXJhPjxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgVjRMMl9TVERfUEFMX0JHICAgICAgICAgKFY0TDJfU1REX1BBTF9CICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0IxICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfRykKKyNkZWZpbmUgVjRMMl9TVERfQiAgICAgICAgICAgICAgKFY0TDJfU1REX1BBTF9CICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0IxICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9CKQorI2RlZmluZSBWNEwyX1NURF9HSCAgICAgICAgICAgICAoVjRMMl9TVERfUEFMX0cgICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfSCAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0RLICAgICAgICAgKFY0TDJfU1REX1BBTF9EICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0QxICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfSykKKyNkZWZpbmUgVjRMMl9TVERfUEFMICAgICAgICAgICAgKFY0TDJfU1REX1BBTF9CRyAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0RLICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfSCAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1BBTF9JKQorI2RlZmluZSBWNEwyX1NURF9OVFNDICAgICAgICAgICAoVjRMMl9TVERfTlRTQ19NICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9OVFNDX01fSlAgICAgIHxcCisJCQkJIFY0TDJfU1REX05UU0NfTV9LUikKKyNkZWZpbmUgVjRMMl9TVERfTU4gICAgICAgICAgICAgKFY0TDJfU1REX1BBTF9NICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX04gICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfTmMgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX05UU0MpCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0RLICAgICAgIChWNEwyX1NURF9TRUNBTV9EICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0sgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSzEpCisjZGVmaW5lIFY0TDJfU1REX0RLICAgICAgICAgICAgIChWNEwyX1NURF9QQUxfREsgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0RLKQorCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNICAgICAgICAgIChWNEwyX1NURF9TRUNBTV9CICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSCAgICAgICB8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9ESyAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fTEMpCisKKyNkZWZpbmUgVjRMMl9TVERfNTI1XzYwICAgICAgICAgKFY0TDJfU1REX1BBTF9NICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMXzYwICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9OVFNDICAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX05UU0NfNDQzKQorI2RlZmluZSBWNEwyX1NURF82MjVfNTAgICAgICAgICAoVjRMMl9TVERfUEFMICAgICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfTiAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1BBTF9OYyAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU0pCisKKyNkZWZpbmUgVjRMMl9TVERfVU5LTk9XTiAgICAgICAgMAorI2RlZmluZSBWNEwyX1NURF9BTEwgICAgICAgICAgICAoVjRMMl9TVERfNTI1XzYwICAgICAgICB8XAorCQkJCSBWNEwyX1NURF82MjVfNTApCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGlkPSJ2aWRlby1zdGFuZGFyZHMiIG9yaWVudD0ibGFuZCI+CisgICAgICA8dGl0bGU+VmlkZW8gU3RhbmRhcmRzIChiYXNlZCBvbiBbPHhyZWYgbGlua2VuZD0iaXR1NDcwIiAvPl0pPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMTIiIGNvbHNlcD0iMSIgcm93c2VwPSIxIiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzUiIC8+CisJPGNvbHNwZWMgY29sbnVtPSI3IiBjb2xuYW1lPSJjNyIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjkiIGNvbG5hbWU9ImM5IiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTIiIGNvbG5hbWU9ImMxMiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJjMiIgbmFtZWVuZD0iYzMiIHNwYW5uYW1lPSJtIiBhbGlnbj0iY2VudGVyIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImM0IiBuYW1lZW5kPSJjMTIiIHNwYW5uYW1lPSJ4IiBhbGlnbj0iY2VudGVyIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImM1IiBuYW1lZW5kPSJjNyIgc3Bhbm5hbWU9ImIiIGFsaWduPSJjZW50ZXIiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzkiIG5hbWVlbmQ9ImMxMiIgc3Bhbm5hbWU9InMiIGFsaWduPSJjZW50ZXIiIC8+CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PkNoYXJhY3RlcmlzdGljczwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5NL05UU0M8Zm9vdG5vdGU+PHBhcmE+SmFwYW4gdXNlcyBhIHN0YW5kYXJkCitzaW1pbGFyIHRvIE0vTlRTQworKFY0TDJfU1REX05UU0NfTV9KUCkuPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDxlbnRyeT5NL1BBTDwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5OL1BBTDxmb290bm90ZT48cGFyYT4gVGhlIHZhbHVlcyBpbgorYnJhY2tldHMgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIE4vUEFMIGEuay5hLgorTjxzdWJzY3JpcHQ+Qzwvc3Vic2NyaXB0PiB1c2VkIGluIEFyZ2VudGluYQorKFY0TDJfU1REX1BBTF9OYykuPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj5CLCBCMSwgRy9QQUw8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+RCwgRDEsIEsvUEFMPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPkgvUEFMPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPkkvUEFMPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPkIsIEcvU0VDQU08L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+RCwgSy9TRUNBTTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj5LMS9TRUNBTTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj5ML1NFQ0FNPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5GcmFtZSBsaW5lczwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0ibSI+NTI1PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJ4Ij42MjU8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+RnJhbWUgcGVyaW9kIChzKTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0ibSI+MTAwMS8zMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0ieCI+MS8yNTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5DaHJvbWluYW5jZSBzdWItY2FycmllciBmcmVxdWVuY3kgKEh6KTwvZW50cnk+CisJICAgIDxlbnRyeT4zNTc5NTQ1ICZwbHVzbW47Jm5ic3A7MTA8L2VudHJ5PgorCSAgICA8ZW50cnk+MzU3OTYxMS40OSAmcGx1c21uOyZuYnNwOzEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ0MzM2MTguNzUgJnBsdXNtbjsmbmJzcDs1ICgzNTgyMDU2LjI1CismcGx1c21uOyZuYnNwOzUpPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiIj40NDMzNjE4Ljc1ICZwbHVzbW47Jm5ic3A7NTwvZW50cnk+CisJICAgIDxlbnRyeT40NDMzNjE4Ljc1ICZwbHVzbW47Jm5ic3A7MTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0icyI+ZjxzdWJzY3JpcHQ+T1I8L3N1YnNjcmlwdD4mbmJzcDs9Cis0NDA2MjUwICZwbHVzbW47Jm5ic3A7MjAwMCwgZjxzdWJzY3JpcHQ+T0I8L3N1YnNjcmlwdD4mbmJzcDs9IDQyNTAwMDAKKyZwbHVzbW47Jm5ic3A7MjAwMDwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5Ob21pbmFsIHJhZGlvLWZyZXF1ZW5jeSBjaGFubmVsIGJhbmR3aWR0aAorKE1Ieik8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+QjogNzsgQjEsIEc6IDg8L2VudHJ5PgorCSAgICA8ZW50cnk+ODwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjg8L2VudHJ5PgorCSAgICA8ZW50cnk+ODwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjg8L2VudHJ5PgorCSAgICA8ZW50cnk+ODwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5Tb3VuZCBjYXJyaWVyIHJlbGF0aXZlIHRvIHZpc2lvbiBjYXJyaWVyCisoTUh6KTwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7NC41PC9lbnRyeT4KKwkgICAgPGVudHJ5PismbmJzcDs0LjU8L2VudHJ5PgorCSAgICA8ZW50cnk+KyZuYnNwOzQuNTwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT4rJm5ic3A7NS41ICZwbHVzbW47Jm5ic3A7MC4wMDEKKzxmb290bm90ZT48cGFyYT5JbiB0aGUgRmVkZXJhbCBSZXB1YmxpYyBvZiBHZXJtYW55LCBBdXN0cmlhLCBJdGFseSwKK3RoZSBOZXRoZXJsYW5kcywgU2xvdmFraWEgYW5kIFN3aXR6ZXJsYW5kIGEgc3lzdGVtIG9mIHR3byBzb3VuZAorY2FycmllcnMgaXMgdXNlZCwgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgc2Vjb25kIGNhcnJpZXIgYmVpbmcKKzI0Mi4xODc1Jm5ic3A7a0h6IGFib3ZlIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGZpcnN0IHNvdW5kIGNhcnJpZXIuIEZvcgorc3RlcmVvcGhvbmljIHNvdW5kIHRyYW5zbWlzc2lvbnMgYSBzaW1pbGFyIHN5c3RlbSBpcyB1c2VkIGluCitBdXN0cmFsaWEuPC9wYXJhPjwvZm9vdG5vdGU+IDxmb290bm90ZT48cGFyYT5OZXcgWmVhbGFuZCB1c2VzIGEgc291bmQKK2NhcnJpZXIgZGlzcGxhY2VkIDUuNDk5NiAmcGx1c21uOyZuYnNwOzAuMDAwNSBNSHogZnJvbSB0aGUgdmlzaW9uCitjYXJyaWVyLjwvcGFyYT48L2Zvb3Rub3RlPiA8Zm9vdG5vdGU+PHBhcmE+SW4gRGVubWFyaywgRmlubGFuZCwgTmV3CitaZWFsYW5kLCBTd2VkZW4gYW5kIFNwYWluIGEgc3lzdGVtIG9mIHR3byBzb3VuZCBjYXJyaWVycyBpcyB1c2VkLiBJbgorSWNlbGFuZCwgTm9yd2F5IGFuZCBQb2xhbmQgdGhlIHNhbWUgc3lzdGVtIGlzIGJlaW5nIGludHJvZHVjZWQuIFRoZQorc2Vjb25kIGNhcnJpZXIgaXMgNS44NSZuYnNwO01IeiBhYm92ZSB0aGUgdmlzaW9uIGNhcnJpZXIgYW5kIGlzIERRUFNLCittb2R1bGF0ZWQgd2l0aCA3MjgmbmJzcDtrYml0L3Mgc291bmQgYW5kIGRhdGEgbXVsdGlwbGV4LiAoTklDQU0KK3N5c3RlbSk8L3BhcmE+PC9mb290bm90ZT4gPGZvb3Rub3RlPjxwYXJhPkluIHRoZSBVbml0ZWQgS2luZ2RvbSwgYQorc3lzdGVtIG9mIHR3byBzb3VuZCBjYXJyaWVycyBpcyB1c2VkLiBUaGUgc2Vjb25kIHNvdW5kIGNhcnJpZXIgaXMKKzYuNTUyJm5ic3A7TUh6IGFib3ZlIHRoZSB2aXNpb24gY2FycmllciBhbmQgaXMgRFFQU0sgbW9kdWxhdGVkIHdpdGggYQorNzI4Jm5ic3A7a2JpdC9zIHNvdW5kIGFuZCBkYXRhIG11bHRpcGxleCBhYmxlIHRvIGNhcnJ5IHR3byBzb3VuZAorY2hhbm5lbHMuIChOSUNBTSBzeXN0ZW0pPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7Ni41ICZwbHVzbW47Jm5ic3A7MC4wMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+KyZuYnNwOzUuNTwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7NS45OTk2ICZwbHVzbW47Jm5ic3A7MC4wMDA1PC9lbnRyeT4KKwkgICAgPGVudHJ5PismbmJzcDs1LjUgJnBsdXNtbjsmbmJzcDswLjAwMTwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7Ni41ICZwbHVzbW47Jm5ic3A7MC4wMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+KyZuYnNwOzYuNTwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT4rJm5ic3A7Ni41IDxmb290bm90ZT48cGFyYT5JbiBGcmFuY2UsIGEKK2RpZ2l0YWwgY2FycmllciA1Ljg1IE1IeiBhd2F5IGZyb20gdGhlIHZpc2lvbiBjYXJyaWVyIG1heSBiZSB1c2VkIGluCithZGRpdGlvbiB0byB0aGUgbWFpbiBzb3VuZCBjYXJyaWVyLiBJdCBpcyBtb2R1bGF0ZWQgaW4gZGlmZmVyZW50aWFsbHkKK2VuY29kZWQgUVBTSyB3aXRoIGEgNzI4IGtiaXQvcyBzb3VuZCBhbmQgZGF0YSBtdWx0aXBsZXhlciBjYXBhYmxlIG9mCitjYXJyeWluZyB0d28gc291bmQgY2hhbm5lbHMuIChOSUNBTQorc3lzdGVtKTwvcGFyYT48L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItc3RhbmRhcmQ7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CitpcyBvdXQgb2YgYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctYXVkaW8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzYxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvLnhtbApAQCAtMCwwICsxLDE4OCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1hdWRpbyI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0FVRElPLCBWSURJT0NfU19BVURJTzwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfQVVESU88L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfQVVESU88L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgb3Igc2VsZWN0IHRoZSBjdXJyZW50IGF1ZGlvIGlucHV0IGFuZCBpdHMKK2F0dHJpYnV0ZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfYXVkaW8gKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfYXVkaW8gKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0FVRElPLCBWSURJT0NfU19BVURJTzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgYXVkaW8gaW5wdXQgYXBwbGljYXRpb25zIHplcm8gb3V0IHRoZQorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgb2YgYSAmdjRsMi1hdWRpbzsKK2FuZCBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfQVVESU88L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yIHJldHVybiBhbgorJkVJTlZBTDsgd2hlbiB0aGUgZGV2aWNlIGhhcyBubyBhdWRpbyBpbnB1dHMsIG9yIG5vbmUgd2hpY2ggY29tYmluZQord2l0aCB0aGUgY3VycmVudCB2aWRlbyBpbnB1dC48L3BhcmE+CisKKyAgICA8cGFyYT5BdWRpbyBpbnB1dHMgaGF2ZSBvbmUgd3JpdGFibGUgcHJvcGVydHksIHRoZSBhdWRpbyBtb2RlLiBUbworc2VsZWN0IHRoZSBjdXJyZW50IGF1ZGlvIGlucHV0IDxlbXBoYXNpcz5hbmQ8L2VtcGhhc2lzPiBjaGFuZ2UgdGhlCithdWRpbyBtb2RlLCBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+bW9kZTwvc3RydWN0ZmllbGQ+CitmaWVsZHMsIGFuZCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEKKzxzdHJ1Y3RuYW1lPnY0bDJfYXVkaW88L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19BVURJTzwvY29uc3RhbnQ+IGlvY3RsLiBEcml2ZXJzIG1heSBzd2l0Y2ggdG8gYQorZGlmZmVyZW50IGF1ZGlvIG1vZGUgaWYgdGhlIHJlcXVlc3QgY2Fubm90IGJlIHNhdGlzZmllZC4gSG93ZXZlciwgdGhpcworaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGFjdHVhbCBuZXcgYXVkaW8KK21vZGUuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWF1ZGlvIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9hdWRpbzwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgYXVkaW8gaW5wdXQsIHNldCBieSB0aGUKK2RyaXZlciBvciBhcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5OYW1lIG9mIHRoZSBhdWRpbyBpbnB1dCwgYSBOVUwtdGVybWluYXRlZCBBU0NJSQorc3RyaW5nLCBmb3IgZXhhbXBsZTogIkxpbmUgSW4iLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUKK3VzZXIsIHByZWZlcmFibHkgdGhlIGNvbm5lY3RvciBsYWJlbCBvbiB0aGUgZGV2aWNlIGl0c2VsZi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BdWRpbyBjYXBhYmlsaXR5IGZsYWdzLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0iYXVkaW8tY2FwYWJpbGl0eSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXVkaW8gbW9kZSBmbGFncyBzZXQgYnkgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zIChvbgorCSAgICA8Y29uc3RhbnQ+VklESU9DX1NfQVVESU88L2NvbnN0YW50PiBpb2N0bCksIHNlZSA8eHJlZiBsaW5rZW5kPSJhdWRpby1tb2RlIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIGFuZAorYXBwbGljYXRpb25zIG11c3Qgc2V0IHRoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iYXVkaW8tY2FwYWJpbGl0eSI+CisgICAgICA8dGl0bGU+QXVkaW8gQ2FwYWJpbGl0eSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9BVURDQVBfU1RFUkVPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgc3RlcmVvIGlucHV0LiBUaGUgZmxhZyBpcyBpbnRlbmRlZCB0bworYXV0b21hdGljYWxseSBkaXNhYmxlIHN0ZXJlbyByZWNvcmRpbmcgZXRjLiB3aGVuIHRoZSBzaWduYWwgaXMgYWx3YXlzCittb25hdXJhbC4gVGhlIEFQSSBwcm92aWRlcyBubyBtZWFucyB0byBkZXRlY3QgaWYgc3RlcmVvIGlzCis8ZW1waGFzaXM+cmVjZWl2ZWQ8L2VtcGhhc2lzPiwgdW5sZXNzIHRoZSBhdWRpbyBpbnB1dCBiZWxvbmdzIHRvIGEKK3R1bmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9BVURDQVBfQVZMPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT5BdXRvbWF0aWMgVm9sdW1lIExldmVsIG1vZGUgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iYXVkaW8tbW9kZSI+CisgICAgICA8dGl0bGU+QXVkaW8gTW9kZSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9BVURNT0RFX0FWTDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+QVZMIG1vZGUgaXMgb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm8gYXVkaW8gaW5wdXRzIGNvbWJpbmUgd2l0aCB0aGUgY3VycmVudCB2aWRlbyBpbnB1dCwKK29yIHRoZSBudW1iZXIgb2YgdGhlIHNlbGVjdGVkIGF1ZGlvIGlucHV0IGlzIG91dCBvZiBib3VuZHMgb3IgaXQgZG9lcworbm90IGNvbWJpbmUsIG9yIHRoZXJlIGFyZSBubyBhdWRpbyBpbnB1dHMgYXQgYWxsIGFuZCB0aGUgaW9jdGwgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JL08gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBpbnB1dCBjYW5ub3QgYmUKK3N3aXRjaGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MzI3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbApAQCAtMCwwICsxLDE1NCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1hdWRpb291dCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0FVRE9VVCwgVklESU9DX1NfQVVET1VUPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19BVURPVVQ8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfQVVET1VUPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlF1ZXJ5IG9yIHNlbGVjdCB0aGUgY3VycmVudCBhdWRpbyBvdXRwdXQ8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfYXVkaW9vdXQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfYXVkaW9vdXQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0FVRE9VVCwgVklESU9DX1NfQVVET1VUPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCBhdWRpbyBvdXRwdXQgYXBwbGljYXRpb25zIHplcm8gb3V0IHRoZQorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgb2YgYSAmdjRsMi1hdWRpb291dDsgYW5kCitjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfQVVET1VUPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIKK3RvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBvciByZXR1cm4gYW4KKyZFSU5WQUw7IHdoZW4gdGhlIGRldmljZSBoYXMgbm8gYXVkaW8gaW5wdXRzLCBvciBub25lIHdoaWNoIGNvbWJpbmUKK3dpdGggdGhlIGN1cnJlbnQgdmlkZW8gb3V0cHV0LjwvcGFyYT4KKworICAgIDxwYXJhPkF1ZGlvIG91dHB1dHMgaGF2ZSBubyB3cml0YWJsZSBwcm9wZXJ0aWVzLiBOZXZlcnRoZWxlc3MsIHRvCitzZWxlY3QgdGhlIGN1cnJlbnQgYXVkaW8gb3V0cHV0IGFwcGxpY2F0aW9ucyBjYW4gaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZAorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgKHdoaWNoIGluIHRoZSBmdXR1cmUgbWF5Citjb250YWluIHdyaXRhYmxlIHByb3BlcnRpZXMpIG9mIGEKKzxzdHJ1Y3RuYW1lPnY0bDJfYXVkaW9vdXQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19BVURPVVQ8L2NvbnN0YW50PiBpb2N0bC4gRHJpdmVycyBzd2l0Y2ggdG8gdGhlCityZXF1ZXN0ZWQgb3V0cHV0IG9yIHJldHVybiB0aGUgJkVJTlZBTDsgd2hlbiB0aGUgaW5kZXggaXMgb3V0IG9mCitib3VuZHMuIFRoaXMgaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGN1cnJlbnQKK2F1ZGlvIG91dHB1dCBhdHRyaWJ1dGVzIGFzIDxjb25zdGFudD5WSURJT0NfR19BVURPVVQ8L2NvbnN0YW50PgorZG9lcy48L3BhcmE+CisKKyAgICA8cGFyYT5Ob3RlIGNvbm5lY3RvcnMgb24gYSBUViBjYXJkIHRvIGxvb3AgYmFjayB0aGUgcmVjZWl2ZWQgYXVkaW8KK3NpZ25hbCB0byBhIHNvdW5kIGNhcmQgYXJlIG5vdCBhdWRpbyBvdXRwdXRzIGluIHRoaXMgc2Vuc2UuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWF1ZGlvb3V0Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9hdWRpb291dDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgYXVkaW8gb3V0cHV0LCBzZXQgYnkgdGhlCitkcml2ZXIgb3IgYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgYXVkaW8gb3V0cHV0LCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcsIGZvciBleGFtcGxlOiAiTGluZSBPdXQiLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUKK3VzZXIsIHByZWZlcmFibHkgdGhlIGNvbm5lY3RvciBsYWJlbCBvbiB0aGUgZGV2aWNlIGl0c2VsZi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BdWRpbyBjYXBhYmlsaXR5IGZsYWdzLCBub25lIGRlZmluZWQgeWV0LiBEcml2ZXJzCittdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXVkaW8gbW9kZSwgbm9uZSBkZWZpbmVkIHlldC4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyAob24gPGNvbnN0YW50PlZJRElPQ19TX0FVRE9VVDwvY29uc3RhbnQ+KSBtdXN0IHNldCB0aGlzCitmaWVsZCB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm8gYXVkaW8gb3V0cHV0cyBjb21iaW5lIHdpdGggdGhlIGN1cnJlbnQgdmlkZW8KK291dHB1dCwgb3IgdGhlIG51bWJlciBvZiB0aGUgc2VsZWN0ZWQgYXVkaW8gb3V0cHV0IGlzIG91dCBvZiBib3VuZHMgb3IKK2l0IGRvZXMgbm90IGNvbWJpbmUsIG9yIHRoZXJlIGFyZSBubyBhdWRpbyBvdXRwdXRzIGF0IGFsbCBhbmQgdGhlCitpb2N0bCBpcyBub3Qgc3VwcG9ydGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGlzIGluIHByb2dyZXNzLCB0aGUgb3V0cHV0IGNhbm5vdCBiZQorc3dpdGNoZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctY3JvcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWNyb3AueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzViMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWNyb3AueG1sCkBAIC0wLDAgKzEsMTQzIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWNyb3AiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19DUk9QLCBWSURJT0NfU19DUk9QPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19DUk9QPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0NST1A8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCB0aGUgY3VycmVudCBjcm9wcGluZyByZWN0YW5nbGU8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfY3JvcCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBzdHJ1Y3QgdjRsMl9jcm9wICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19DUk9QLCBWSURJT0NfU19DUk9QPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3JvcHBpbmcgcmVjdGFuZ2xlIHNpemUgYW5kIHBvc2l0aW9uCithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKzxzdHJ1Y3RuYW1lPnY0bDJfY3JvcDwvc3RydWN0bmFtZT4gc3RydWN0dXJlIHRvIHRoZSByZXNwZWN0aXZlIGJ1ZmZlcgorKHN0cmVhbSkgdHlwZSBhbmQgY2FsbCB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0NST1A8L2NvbnN0YW50PiBpb2N0bAord2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIFRoZSBkcml2ZXIgZmlsbHMgdGhlIHJlc3Qgb2YgdGhlCitzdHJ1Y3R1cmUgb3IgcmV0dXJucyB0aGUgJkVJTlZBTDsgaWYgY3JvcHBpbmcgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBjaGFuZ2UgdGhlIGNyb3BwaW5nIHJlY3RhbmdsZSBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlY3Q7IHN1YnN0cnVjdHVyZSBuYW1lZAorPHN0cnVjdGZpZWxkPmM8L3N0cnVjdGZpZWxkPiBvZiBhIHY0bDJfY3JvcCBzdHJ1Y3R1cmUgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX1NfQ1JPUDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgZHJpdmVyIGZpcnN0IGFkanVzdHMgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIGFnYWluc3QKK2hhcmR3YXJlIGxpbWl0cywgJmllOyB0aGUgYm91bmRzIGdpdmVuIGJ5IHRoZSBjYXB0dXJlL291dHB1dCB3aW5kb3csCithbmQgaXQgcm91bmRzIHRvIHRoZSBjbG9zZXN0IHBvc3NpYmxlIHZhbHVlcyBvZiBob3Jpem9udGFsIGFuZAordmVydGljYWwgb2Zmc2V0LCB3aWR0aCBhbmQgaGVpZ2h0LiBJbiBwYXJ0aWN1bGFyIHRoZSBkcml2ZXIgbXVzdCByb3VuZAordGhlIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgY3JvcHBpbmcgcmVjdGFuZ2xlIHRvIGZyYW1lIGxpbmVzIG1vZHVsbwordHdvLCBzdWNoIHRoYXQgdGhlIGZpZWxkIG9yZGVyIGNhbm5vdCBiZSBjb25mdXNlZC48L3BhcmE+CisKKyAgICA8cGFyYT5TZWNvbmQgdGhlIGRyaXZlciBhZGp1c3RzIHRoZSBpbWFnZSBzaXplICh0aGUgb3Bwb3NpdGUKK3JlY3RhbmdsZSBvZiB0aGUgc2NhbGluZyBwcm9jZXNzLCBzb3VyY2Ugb3IgdGFyZ2V0IGRlcGVuZGluZyBvbiB0aGUKK2RhdGEgZGlyZWN0aW9uKSB0byB0aGUgY2xvc2VzdCBzaXplIHBvc3NpYmxlIHdoaWxlIG1haW50YWluaW5nIHRoZQorY3VycmVudCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsaW5nIGZhY3Rvci48L3BhcmE+CisKKyAgICA8cGFyYT5GaW5hbGx5IHRoZSBkcml2ZXIgcHJvZ3JhbXMgdGhlIGhhcmR3YXJlIHdpdGggdGhlIGFjdHVhbAorY3JvcHBpbmcgYW5kIGltYWdlIHBhcmFtZXRlcnMuIDxjb25zdGFudD5WSURJT0NfU19DUk9QPC9jb25zdGFudD4gaXMgYQord3JpdGUtb25seSBpb2N0bCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyYW1ldGVycy4gVG8gcXVlcnkKK3RoZW0gYXBwbGljYXRpb25zIG11c3QgY2FsbCA8Y29uc3RhbnQ+VklESU9DX0dfQ1JPUDwvY29uc3RhbnQ+IGFuZAorJlZJRElPQy1HLUZNVDsuIFdoZW4gdGhlIHBhcmFtZXRlcnMgYXJlIHVuc3VpdGFibGUgdGhlIGFwcGxpY2F0aW9uIG1heQorbW9kaWZ5IHRoZSBjcm9wcGluZyBvciBpbWFnZSBwYXJhbWV0ZXJzIGFuZCByZXBlYXQgdGhlIGN5Y2xlIHVudGlsCitzYXRpc2ZhY3RvcnkgcGFyYW1ldGVycyBoYXZlIGJlZW4gbmVnb3RpYXRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIGNyb3BwaW5nIGlzIG5vdCBzdXBwb3J0ZWQgdGhlbiBubyBwYXJhbWV0ZXJzIGFyZQorY2hhbmdlZCBhbmQgPGNvbnN0YW50PlZJRElPQ19TX0NST1A8L2NvbnN0YW50PiByZXR1cm5zIHRoZQorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNyb3AiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2Nyb3A8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLgorT25seSB0aGVzZSB0eXBlcyBhcmUgdmFsaWQgaGVyZTogPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD4sIGFuZCBjdXN0b20gKGRyaXZlcgorZGVmaW5lZCkgdHlwZXMgd2l0aCBjb2RlIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PgorYW5kIGhpZ2hlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItcmVjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Dcm9wcGluZyByZWN0YW5nbGUuIFRoZSBzYW1lIGNvLW9yZGluYXRlIHN5c3RlbSBhcworZm9yICZ2NGwyLWNyb3BjYXA7IDxzdHJ1Y3RmaWVsZD5ib3VuZHM8L3N0cnVjdGZpZWxkPiBpcyB1c2VkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkNyb3BwaW5nIGlzIG5vdCBzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctY3RybC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWN0cmwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWU2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWN0cmwueG1sCkBAIC0wLDAgKzEsMTMwIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWN0cmwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19DVFJMLCBWSURJT0NfU19DVFJMPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19DVFJMPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0NUUkw8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCB0aGUgdmFsdWUgb2YgYSBjb250cm9sPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2NvbnRyb2wKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19DVFJMLCBWSURJT0NfU19DVFJMPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBnZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBjb250cm9sIGFwcGxpY2F0aW9ucworaW5pdGlhbGl6ZSB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfY29udHJvbDwvc3RydWN0bmFtZT4gYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfQ1RSTDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gVG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgYXBwbGljYXRpb25zIGluaXRpYWxpemUKK3RoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcyBvZiBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2NvbnRyb2w8L3N0cnVjdG5hbWU+IGFuZCBjYWxsIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX0NUUkw8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHRoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBpcyBpbnZhbGlkIGRyaXZlcnMKK3JldHVybiBhbiAmRUlOVkFMOy4gV2hlbiB0aGUgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4gaXMgb3V0CitvZiBib3VuZHMgZHJpdmVycyBjYW4gY2hvb3NlIHRvIHRha2UgdGhlIGNsb3Nlc3QgdmFsaWQgdmFsdWUgb3IgcmV0dXJuCithbiAmRVJBTkdFOywgd2hhdGV2ZXIgc2VlbXMgbW9yZSBhcHByb3ByaWF0ZS4gSG93ZXZlciwKKzxjb25zdGFudD5WSURJT0NfU19DVFJMPC9jb25zdGFudD4gaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdAorcmV0dXJuIHRoZSBhY3R1YWwgbmV3IHZhbHVlLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZXNlIGlvY3RscyB3b3JrIG9ubHkgd2l0aCB1c2VyIGNvbnRyb2xzLiBGb3Igb3RoZXIKK2NvbnRyb2wgY2xhc3NlcyB0aGUgJlZJRElPQy1HLUVYVC1DVFJMUzssICZWSURJT0MtUy1FWFQtQ1RSTFM7IG9yCismVklESU9DLVRSWS1FWFQtQ1RSTFM7IG11c3QgYmUgdXNlZC48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItY29udHJvbCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfY29udHJvbDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgY29udHJvbCwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5ldyB2YWx1ZSBvciBjdXJyZW50IHZhbHVlLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1jb250cm9sOyA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBpcworaW52YWxpZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVSQU5HRTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItY29udHJvbDsgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4KK2lzIG91dCBvZiBib3VuZHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgY29udHJvbCBpcyB0ZW1wb3JhcmlseSBub3QgY2hhbmdlYWJsZSwgcG9zc2libHkKK2JlY2F1c2UgYW5vdGhlciBhcHBsaWNhdGlvbnMgdG9vayBvdmVyIGNvbnRyb2wgb2YgdGhlIGRldmljZSBmdW5jdGlvbgordGhpcyBjb250cm9sIGJlbG9uZ3MgdG8uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjI0MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sCkBAIC0wLDAgKzEsMjEzIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWVuYy1pbmRleCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0VOQ19JTkRFWDwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfRU5DX0lOREVYPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdldCBtZXRhIGRhdGEgYWJvdXQgYSBjb21wcmVzc2VkIHZpZGVvIHN0cmVhbTwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9lbmNfaWR4ICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19FTkNfSU5ERVg8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxub3RlPgorICAgICAgPHRpdGxlPkV4cGVyaW1lbnRhbDwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoaXMgaXMgYW4gPGxpbmsgbGlua2VuZD0iZXhwZXJpbWVudGFsIj5leHBlcmltZW50YWw8L2xpbms+CitpbnRlcmZhY2UgYW5kIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS48L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfR19FTkNfSU5ERVg8L2NvbnN0YW50PiBpb2N0bCBwcm92aWRlcworbWV0YSBkYXRhIGFib3V0IGEgY29tcHJlc3NlZCB2aWRlbyBzdHJlYW0gdGhlIHNhbWUgb3IgYW5vdGhlcgorYXBwbGljYXRpb24gY3VycmVudGx5IHJlYWRzIGZyb20gdGhlIGRyaXZlciwgd2hpY2ggaXMgdXNlZnVsIGZvcgorcmFuZG9tIGFjY2VzcyBpbnRvIHRoZSBzdHJlYW0gd2l0aG91dCBkZWNvZGluZyBpdC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyByZWFkIHRoZSBkYXRhIGFwcGxpY2F0aW9ucyBtdXN0IGNhbGwKKzxjb25zdGFudD5WSURJT0NfR19FTkNfSU5ERVg8L2NvbnN0YW50PiB3aXRoIGEgcG9pbnRlciB0byBhCismdjRsMi1lbmMtaWR4Oy4gT24gc3VjY2VzcyB0aGUgZHJpdmVyIGZpbGxzIHRoZQorPHN0cnVjdGZpZWxkPmVudHJ5PC9zdHJ1Y3RmaWVsZD4gYXJyYXksIHN0b3JlcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCit3cml0dGVuIGluIHRoZSA8c3RydWN0ZmllbGQ+ZW50cmllczwvc3RydWN0ZmllbGQ+IGZpZWxkLCBhbmQKK2luaXRpYWxpemVzIHRoZSA8c3RydWN0ZmllbGQ+ZW50cmllc19jYXA8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKyAgICA8cGFyYT5FYWNoIGVsZW1lbnQgb2YgdGhlIDxzdHJ1Y3RmaWVsZD5lbnRyeTwvc3RydWN0ZmllbGQ+IGFycmF5Citjb250YWlucyBtZXRhIGRhdGEgYWJvdXQgb25lIHBpY3R1cmUuIEEKKzxjb25zdGFudD5WSURJT0NfR19FTkNfSU5ERVg8L2NvbnN0YW50PiBjYWxsIHJlYWRzIHVwIHRvCis8Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0VOVFJJRVM8L2NvbnN0YW50PiBlbnRyaWVzIGZyb20gYSBkcml2ZXIKK2J1ZmZlciwgd2hpY2ggY2FuIGhvbGQgdXAgdG8gPHN0cnVjdGZpZWxkPmVudHJpZXNfY2FwPC9zdHJ1Y3RmaWVsZD4KK2VudHJpZXMuIFRoaXMgbnVtYmVyIGNhbiBiZSBsb3dlciBvciBoaWdoZXIgdGhhbgorPGNvbnN0YW50PlY0TDJfRU5DX0lEWF9FTlRSSUVTPC9jb25zdGFudD4sIGJ1dCBub3QgemVyby4gV2hlbiB0aGUKK2FwcGxpY2F0aW9uIGZhaWxzIHRvIHJlYWQgdGhlIG1ldGEgZGF0YSBpbiB0aW1lIHRoZSBvbGRlc3QgZW50cmllcword2lsbCBiZSBsb3N0LiBXaGVuIHRoZSBidWZmZXIgaXMgZW1wdHkgb3Igbm8gY2FwdHVyaW5nL2VuY29kaW5nIGlzIGluCitwcm9ncmVzcywgPHN0cnVjdGZpZWxkPmVudHJpZXM8L3N0cnVjdGZpZWxkPiB3aWxsIGJlIHplcm8uPC9wYXJhPgorCisgICAgPHBhcmE+Q3VycmVudGx5IHRoaXMgaW9jdGwgaXMgb25seSBkZWZpbmVkIGZvciBNUEVHLTIgcHJvZ3JhbQorc3RyZWFtcyBhbmQgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW1zLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1lbmMtaWR4Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9lbmNfaWR4PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZW50cmllczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgZHJpdmVyIHN0b3JlZCBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5lbnRyeTwvc3RydWN0ZmllbGQ+IGFycmF5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZW50cmllc19jYXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIGRyaXZlciBjYW4KK2J1ZmZlci4gTXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuCitEcml2ZXJzIG11c3Qgc2V0IHRoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1lbmMtaWR4LWVudHJ5OzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZW50cnk8L3N0cnVjdGZpZWxkPls8Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0VOVFJJRVM8L2NvbnN0YW50Pl08L2VudHJ5PgorCSAgICA8ZW50cnk+TWV0YSBkYXRhIGFib3V0IGEgY29tcHJlc3NlZCB2aWRlbyBzdHJlYW0uIEVhY2gKK2VsZW1lbnQgb2YgdGhlIGFycmF5IGNvcnJlc3BvbmRzIHRvIG9uZSBwaWN0dXJlLCBzb3J0ZWQgaW4gYXNjZW5kaW5nCitvcmRlciBieSB0aGVpciA8c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWVuYy1pZHgtZW50cnkiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2VuY19pZHhfZW50cnk8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTY0PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgb2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKK2NvbXByZXNzZWQgdmlkZW8gc3RyZWFtIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBwaWN0dXJlLCB0aGF0IGlzIGEKKzx3b3JkYXN3b3JkPlBFUyBwYWNrZXQgaGVhZGVyPC93b3JkYXN3b3JkPiBhcyBkZWZpbmVkIGluIDx4cmVmCisJICAgIGxpbmtlbmQ9Im1wZWcycGFydDEiIC8+IG9yIGEgPHdvcmRhc3dvcmQ+cGljdHVyZQoraGVhZGVyPC93b3JkYXN3b3JkPiBhcyBkZWZpbmVkIGluIDx4cmVmIGxpbmtlbmQ9Im1wZWcycGFydDIiIC8+LiBXaGVuCit0aGUgZW5jb2RlciBpcyBzdG9wcGVkLCB0aGUgZHJpdmVyIHJlc2V0cyB0aGUgb2Zmc2V0IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTY0PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5wdHM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgMzMgYml0IDx3b3JkYXN3b3JkPlByZXNlbnRhdGlvbiBUaW1lCitTdGFtcDwvd29yZGFzd29yZD4gb2YgdGhpcyBwaWN0dXJlIGFzIGRlZmluZWQgaW4gPHhyZWYKKwkJbGlua2VuZD0ibXBlZzJwYXJ0MSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbGVuZ3RoIG9mIHRoaXMgcGljdHVyZSBpbiBieXRlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RmxhZ3MgY29udGFpbmluZyB0aGUgY29kaW5nIHR5cGUgb2YgdGhpcyBwaWN0dXJlLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0iZW5jLWlkeC1mbGFncyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzJdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4KK0RyaXZlcnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJlbmMtaWR4LWZsYWdzIj4KKyAgICAgIDx0aXRsZT5JbmRleCBFbnRyeSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0ZSQU1FX0k8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgYW4gSW50cmEtY29kZWQgcGljdHVyZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRU5DX0lEWF9GUkFNRV9QPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgUHJlZGljdGl2ZS1jb2RlZCBwaWN0dXJlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0ZSQU1FX0I8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgYSBCaWRpcmVjdGlvbmFsbHkgcHJlZGljdGl2ZS1jb2RlZAorcGljdHVyZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRU5DX0lEWF9GUkFNRV9NQVNLPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwRjwvZW50cnk+CisJICAgIDxlbnRyeT48d29yZGFzd29yZD5BTkQ8L3dvcmRhc3dvcmQ+IHRoZSBmbGFncyBmaWVsZCB3aXRoCit0aGlzIG1hc2sgdG8gb2J0YWluIHRoZSBwaWN0dXJlIGNvZGluZyB0eXBlLjwvZW50cnk+CisJICA8L3Jvdz4KKyAgICAgICA8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhN2Y4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZXh0LWN0cmxzLnhtbApAQCAtMCwwICsxLDMwNyBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1leHQtY3RybHMiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19FWFRfQ1RSTFMsIFZJRElPQ19TX0VYVF9DVFJMUywKK1ZJRElPQ19UUllfRVhUX0NUUkxTPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19FWFRfQ1RSTFM8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfRVhUX0NUUkxTPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19UUllfRVhUX0NUUkxTPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdldCBvciBzZXQgdGhlIHZhbHVlIG9mIHNldmVyYWwgY29udHJvbHMsIHRyeSBjb250cm9sCit2YWx1ZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzCisqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfRVhUX0NUUkxTLCBWSURJT0NfU19FWFRfQ1RSTFMsCitWSURJT0NfVFJZX0VYVF9DVFJMUzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlc2UgaW9jdGxzIGFsbG93IHRoZSBjYWxsZXIgdG8gZ2V0IG9yIHNldCBtdWx0aXBsZQorY29udHJvbHMgYXRvbWljYWxseS4gQ29udHJvbCBJRHMgYXJlIGdyb3VwZWQgaW50byBjb250cm9sIGNsYXNzZXMgKHNlZQorPHhyZWYgbGlua2VuZD0iY3RybC1jbGFzcyIgLz4pIGFuZCBhbGwgY29udHJvbHMgaW4gdGhlIGNvbnRyb2wgYXJyYXkKK211c3QgYmVsb25nIHRvIHRoZSBzYW1lIGNvbnRyb2wgY2xhc3MuPC9wYXJhPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIG11c3QgYWx3YXlzIGZpbGwgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5jdHJsX2NsYXNzPC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+Y29udHJvbHM8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkcyBvZiAmdjRsMi1leHQtY29udHJvbHM7LCBhbmQKK2luaXRpYWxpemUgdGhlICZ2NGwyLWV4dC1jb250cm9sOyBhcnJheSBwb2ludGVkIHRvIGJ5IHRoZQorPHN0cnVjdGZpZWxkPmNvbnRyb2xzPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIHNldCBvZiBjb250cm9scyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPnJlc2VydmVkMjwvc3RydWN0ZmllbGQ+IGZpZWxkcworb2YgZWFjaCAmdjRsMi1leHQtY29udHJvbDsgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRVhUX0NUUkxTPC9jb25zdGFudD4gaW9jdGwuIFN0cmluZyBjb250cm9scyBjb250cm9scworbXVzdCBhbHNvIHNldCB0aGUgPHN0cnVjdGZpZWxkPnN0cmluZzwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvcGFyYT4KKworICAgIDxwYXJhPklmIHRoZSA8c3RydWN0ZmllbGQ+c2l6ZTwvc3RydWN0ZmllbGQ+IGlzIHRvbyBzbWFsbCB0bworcmVjZWl2ZSB0aGUgY29udHJvbCByZXN1bHQgKG9ubHkgcmVsZXZhbnQgZm9yIHBvaW50ZXItdHlwZSBjb250cm9scworbGlrZSBzdHJpbmdzKSwgdGhlbiB0aGUgZHJpdmVyIHdpbGwgc2V0IDxzdHJ1Y3RmaWVsZD5zaXplPC9zdHJ1Y3RmaWVsZD4KK3RvIGEgdmFsaWQgdmFsdWUgYW5kIHJldHVybiBhbiAmRU5PU1BDOy4gWW91IHNob3VsZCByZS1hbGxvY2F0ZSB0aGUKK3N0cmluZyBtZW1vcnkgdG8gdGhpcyBuZXcgc2l6ZSBhbmQgdHJ5IGFnYWluLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZQorc2FtZSBpc3N1ZSBvY2N1cnMgYWdhaW4gaWYgdGhlIHN0cmluZyBoYXMgZ3Jvd24gaW4gdGhlIG1lYW50aW1lLiBJdCBpcworcmVjb21tZW5kZWQgdG8gY2FsbCAmVklESU9DLVFVRVJZQ1RSTDsgZmlyc3QgYW5kIHVzZQorPHN0cnVjdGZpZWxkPm1heGltdW08L3N0cnVjdGZpZWxkPisxIGFzIHRoZSBuZXcgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPgordmFsdWUuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGF0IGlzIHN1ZmZpY2llbnQgbWVtb3J5LgorPC9wYXJhPgorCisgICAgPHBhcmE+VG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHNldCBvZiBjb250cm9scyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+LCA8c3RydWN0ZmllbGQ+c2l6ZTwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnJlc2VydmVkMjwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnZhbHVlL3N0cmluZzwvc3RydWN0ZmllbGQ+IGZpZWxkcyBvZiBlYWNoICZ2NGwyLWV4dC1jb250cm9sOyBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfU19FWFRfQ1RSTFM8L2NvbnN0YW50PiBpb2N0bC4gVGhlIGNvbnRyb2xzCit3aWxsIG9ubHkgYmUgc2V0IGlmIDxlbXBoYXNpcz5hbGw8L2VtcGhhc2lzPiBjb250cm9sIHZhbHVlcyBhcmUKK3ZhbGlkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGNoZWNrIGlmIGEgc2V0IG9mIGNvbnRyb2xzIGhhdmUgY29ycmVjdCB2YWx1ZXMgYXBwbGljYXRpb25zCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDI8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD52YWx1ZS9zdHJpbmc8L3N0cnVjdGZpZWxkPiBmaWVsZHMgb2YgZWFjaCAmdjRsMi1leHQtY29udHJvbDsgYW5kCitjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX1RSWV9FWFRfQ1RSTFM8L2NvbnN0YW50PiBpb2N0bC4gSXQgaXMgdXAgdG8KK3RoZSBkcml2ZXIgd2hldGhlciB3cm9uZyB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQgdG8gYSB2YWxpZAordmFsdWUgb3IgaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQuPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gb3IKKzxzdHJ1Y3RmaWVsZD5jdHJsX2NsYXNzPC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZCBkcml2ZXJzIHJldHVybiBhbgorJkVJTlZBTDsuIFdoZW4gdGhlIHZhbHVlIGlzIG91dCBvZiBib3VuZHMgZHJpdmVycyBjYW4gY2hvb3NlIHRvIHRha2UKK3RoZSBjbG9zZXN0IHZhbGlkIHZhbHVlIG9yIHJldHVybiBhbiAmRVJBTkdFOywgd2hhdGV2ZXIgc2VlbXMgbW9yZQorYXBwcm9wcmlhdGUuIEluIHRoZSBmaXJzdCBjYXNlIHRoZSBuZXcgdmFsdWUgaXMgc2V0IGluCismdjRsMi1leHQtY29udHJvbDsuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIGRyaXZlciB3aWxsIG9ubHkgc2V0L2dldCB0aGVzZSBjb250cm9scyBpZiBhbGwgY29udHJvbAordmFsdWVzIGFyZSBjb3JyZWN0LiBUaGlzIHByZXZlbnRzIHRoZSBzaXR1YXRpb24gd2hlcmUgb25seSBzb21lIG9mIHRoZQorY29udHJvbHMgd2VyZSBzZXQvZ2V0LiBPbmx5IGxvdy1sZXZlbCBlcnJvcnMgKCZlZzsgYSBmYWlsZWQgaTJjCitjb21tYW5kKSBjYW4gc3RpbGwgY2F1c2UgdGhpcyBzaXR1YXRpb24uPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWV4dC1jb250cm9sIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9leHRfY29udHJvbDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JZGVudGlmaWVzIHRoZSBjb250cm9sLCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHRvdGFsIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHBheWxvYWQgb2YgdGhpcworY29udHJvbC4gVGhpcyBpcyBub3JtYWxseSAwLCBidXQgZm9yIHBvaW50ZXIgY29udHJvbHMgdGhpcyBzaG91bGQgYmUKK3NldCB0byB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNvbnRhaW5pbmcgdGhlIHBheWxvYWQsIG9yIHRoYXQgd2lsbAorcmVjZWl2ZSB0aGUgcGF5bG9hZC4gSWYgPGNvbnN0YW50PlZJRElPQ19HX0VYVF9DVFJMUzwvY29uc3RhbnQ+IGZpbmRzCit0aGF0IHRoaXMgdmFsdWUgaXMgbGVzcyB0aGFuIGlzIHJlcXVpcmVkIHRvIHN0b3JlCit0aGUgcGF5bG9hZCByZXN1bHQsIHRoZW4gaXQgaXMgc2V0IHRvIGEgdmFsdWUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIHRoZQorcGF5bG9hZCByZXN1bHQgYW5kIEVOT1NQQyBpcyByZXR1cm5lZC4gTm90ZSB0aGF0IGZvciBzdHJpbmcgY29udHJvbHMKK3RoaXMgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBmaWVsZCBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorVGhpcyBmaWVsZCByZWZlcnMgdG8gdGhlIHNpemUgb2YgdGhlIG1lbW9yeSB0aGF0IGNvbnRhaW5zIHRoZSBzdHJpbmcuCitUaGUgYWN0dWFsIDxlbXBoYXNpcz5sZW5ndGg8L2VtcGhhc2lzPiBvZiB0aGUgc3RyaW5nIG1heSB3ZWxsIGJlIG11Y2ggc21hbGxlci4KKzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQyPC9zdHJ1Y3RmaWVsZD5bMV08L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dW5pb248L2VudHJ5PgorCSAgICA8ZW50cnk+KGFub255bW91cyk8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5ldyB2YWx1ZSBvciBjdXJyZW50IHZhbHVlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X19zNjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnZhbHVlNjQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5OZXcgdmFsdWUgb3IgY3VycmVudCB2YWx1ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmNoYXIgKjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RyaW5nPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QSBwb2ludGVyIHRvIGEgc3RyaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1leHQtY29udHJvbHMiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2V4dF9jb250cm9sczwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmN0cmxfY2xhc3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY29udHJvbCBjbGFzcyB0byB3aGljaCBhbGwgY29udHJvbHMgYmVsb25nLCBzZWUKKzx4cmVmIGxpbmtlbmQ9ImN0cmwtY2xhc3MiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbnVtYmVyIG9mIGNvbnRyb2xzIGluIHRoZSBjb250cm9scyBhcnJheS4gTWF5CithbHNvIGJlIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5lcnJvcl9pZHg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TZXQgYnkgdGhlIGRyaXZlciBpbiBjYXNlIG9mIGFuIGVycm9yLiBJdCBpcyB0aGUKK2luZGV4IG9mIHRoZSBjb250cm9sIGNhdXNpbmcgdGhlIGVycm9yIG9yIGVxdWFsIHRvICdjb3VudCcgd2hlbiB0aGUKK2Vycm9yIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGNvbnRyb2wuIFVuZGVmaW5lZCB3aGVuIHRoZQoraW9jdGwgcmV0dXJucyAwIChzdWNjZXNzKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIGFuZAorYXBwbGljYXRpb25zIG11c3Qgc2V0IHRoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1leHQtY29udHJvbDsgKjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y29udHJvbHM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Qb2ludGVyIHRvIGFuIGFycmF5IG9mCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiB2NGwyX2V4dF9jb250cm9sIHN0cnVjdHVyZXMuIElnbm9yZWQKK2lmIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGVxdWFscyB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iY3RybC1jbGFzcyI+CisgICAgICA8dGl0bGU+Q29udHJvbCBjbGFzc2VzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfQ0xBU1NfVVNFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4OTgwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBjbGFzcyBjb250YWluaW5nIHVzZXIgY29udHJvbHMuIFRoZXNlIGNvbnRyb2xzCithcmUgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImNvbnRyb2wiIC8+LiBBbGwgY29udHJvbHMgdGhhdCBjYW4gYmUgc2V0Cit1c2luZyB0aGUgJlZJRElPQy1TLUNUUkw7IGFuZCAmVklESU9DLUctQ1RSTDsgaW9jdGwgYmVsb25nIHRvIHRoaXMKK2NsYXNzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0NMQVNTX01QRUc8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDk5MDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY2xhc3MgY29udGFpbmluZyBNUEVHIGNvbXByZXNzaW9uIGNvbnRyb2xzLgorVGhlc2UgY29udHJvbHMgYXJlIGRlc2NyaWJlZCBpbiA8eHJlZgorCQlsaW5rZW5kPSJtcGVnLWNvbnRyb2xzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9DTEFTU19DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDlhMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY2xhc3MgY29udGFpbmluZyBjYW1lcmEgY29udHJvbHMuCitUaGVzZSBjb250cm9scyBhcmUgZGVzY3JpYmVkIGluIDx4cmVmCisJCWxpbmtlbmQ9ImNhbWVyYS1jb250cm9scyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfQ0xBU1NfRk1fVFg8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDliMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY2xhc3MgY29udGFpbmluZyBGTSBUcmFuc21pdHRlciAoRk0gVFgpIGNvbnRyb2xzLgorVGhlc2UgY29udHJvbHMgYXJlIGRlc2NyaWJlZCBpbiA8eHJlZgorCQlsaW5rZW5kPSJmbS10eC1jb250cm9scyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItZXh0LWNvbnRyb2w7IDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+CitpcyBpbnZhbGlkIG9yIHRoZSAmdjRsMi1leHQtY29udHJvbHM7Cis8c3RydWN0ZmllbGQ+Y3RybF9jbGFzczwvc3RydWN0ZmllbGQ+IGlzIGludmFsaWQuIFRoaXMgZXJyb3IgY29kZSBpcworYWxzbyByZXR1cm5lZCBieSB0aGUgPGNvbnN0YW50PlZJRElPQ19TX0VYVF9DVFJMUzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19UUllfRVhUX0NUUkxTPC9jb25zdGFudD4gaW9jdGxzIGlmIHR3byBvciBtb3JlCitjb250cm9sIHZhbHVlcyBhcmUgaW4gY29uZmxpY3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FUkFOR0U8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLWV4dC1jb250cm9sOyA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPgoraXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBjb250cm9sIGlzIHRlbXBvcmFyaWx5IG5vdCBjaGFuZ2VhYmxlLCBwb3NzaWJseQorYmVjYXVzZSBhbm90aGVyIGFwcGxpY2F0aW9ucyB0b29rIG92ZXIgY29udHJvbCBvZiB0aGUgZGV2aWNlIGZ1bmN0aW9uCit0aGlzIGNvbnRyb2wgYmVsb25ncyB0by48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVOT1NQQzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgc3BhY2UgcmVzZXJ2ZWQgZm9yIHRoZSBjb250cm9sJ3MgcGF5bG9hZCBpcyBpbnN1ZmZpY2llbnQuCitUaGUgZmllbGQgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBpcyBzZXQgdG8gYSB2YWx1ZSB0aGF0IGlzIGVub3VnaAordG8gc3RvcmUgdGhlIHBheWxvYWQgYW5kIHRoaXMgZXJyb3IgY29kZSBpcyByZXR1cm5lZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1mYnVmLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZmJ1Zi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwMTcwNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZmJ1Zi54bWwKQEAgLTAsMCArMSw0NTYgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctZmJ1ZiI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0ZCVUYsIFZJRElPQ19TX0ZCVUY8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0ZCVUY8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfRkJVRjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5HZXQgb3Igc2V0IGZyYW1lIGJ1ZmZlciBvdmVybGF5IHBhcmFtZXRlcnM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0ZCVUYsIFZJRElPQ19TX0ZCVUY8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PiBpb2N0bCB0byBnZXQgYW5kIHNldCB0aGUKK2ZyYW1lYnVmZmVyIHBhcmFtZXRlcnMgZm9yIGEgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+VmlkZW8KK092ZXJsYXk8L2xpbms+IG9yIDxsaW5rIGxpbmtlbmQ9Im9zZCI+VmlkZW8gT3V0cHV0IE92ZXJsYXk8L2xpbms+CisoT1NEKS4gVGhlIHR5cGUgb2Ygb3ZlcmxheSBpcyBpbXBsaWVkIGJ5IHRoZSBkZXZpY2UgdHlwZSAoY2FwdHVyZSBvcgorb3V0cHV0IGRldmljZSkgYW5kIGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsLgorT25lIDxmaWxlbmFtZT4vZGV2L3ZpZGVvTjwvZmlsZW5hbWU+IGRldmljZSBtdXN0IG5vdCBzdXBwb3J0IGJvdGgKK2tpbmRzIG9mIG92ZXJsYXkuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIFY0TDIgQVBJIGRpc3Rpbmd1aXNoZXMgZGVzdHJ1Y3RpdmUgYW5kIG5vbi1kZXN0cnVjdGl2ZQorb3ZlcmxheXMuIEEgZGVzdHJ1Y3RpdmUgb3ZlcmxheSBjb3BpZXMgY2FwdHVyZWQgdmlkZW8gaW1hZ2VzIGludG8gdGhlCit2aWRlbyBtZW1vcnkgb2YgYSBncmFwaGljcyBjYXJkLiBBIG5vbi1kZXN0cnVjdGl2ZSBvdmVybGF5IGJsZW5kcwordmlkZW8gaW1hZ2VzIGludG8gYSBWR0Egc2lnbmFsIG9yIGdyYXBoaWNzIGludG8gYSB2aWRlbyBzaWduYWwuCis8d29yZGFzd29yZD5WaWRlbyBPdXRwdXQgT3ZlcmxheXM8L3dvcmRhc3dvcmQ+IGFyZSBhbHdheXMKK25vbi1kZXN0cnVjdGl2ZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBnZXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19GQlVGPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gYQorPHN0cnVjdG5hbWU+djRsMl9mcmFtZWJ1ZmZlcjwvc3RydWN0bmFtZT4gc3RydWN0dXJlLiBUaGUgZHJpdmVyIGZpbGxzCithbGwgZmllbGRzIG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJucyBhbiAmRUlOVkFMOyB3aGVuIG92ZXJsYXlzIGFyZQorbm90IHN1cHBvcnRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIGEgPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0CitPdmVybGF5PC93b3JkYXN3b3JkPiwgYXBwbGljYXRpb25zIG11c3QgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgc3RydWN0Cis8c3RydWN0bmFtZT52NGwyX2ZyYW1lYnVmZmVyPC9zdHJ1Y3RuYW1lPi4gU2luY2UgdGhlIGZyYW1lYnVmZmVyIGlzCitpbXBsZW1lbnRlZCBvbiB0aGUgVFYgY2FyZCBhbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUKK2RyaXZlci4gV2hlbiBhbiBhcHBsaWNhdGlvbiBjYWxscyA8Y29uc3RhbnQ+VklESU9DX1NfRkJVRjwvY29uc3RhbnQ+Cit3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSwgdGhlIGRyaXZlciBwcmVwYXJlcyBmb3IgdGhlIG92ZXJsYXkKK2FuZCByZXR1cm5zIHRoZSBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+IGRvZXMsIG9yIGl0IHJldHVybnMgYW4gZXJyb3IKK2NvZGUuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGZvciBhIDx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZQorVmlkZW8gT3ZlcmxheTwvd29yZGFzd29yZD4sIGFwcGxpY2F0aW9ucyBtdXN0IGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCwgdGhlCis8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlLCBhbmQgY2FsbAorPGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50Pi4gQWdhaW4gdGhlIGRyaXZlciBwcmVwYXJlcyBmb3IgdGhlCitvdmVybGF5IGFuZCByZXR1cm5zIHRoZSBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+IGRvZXMsIG9yIGl0IHJldHVybnMgYW4gZXJyb3IKK2NvZGUuPC9wYXJhPgorCisgICAgPHBhcmE+Rm9yIGEgPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8gT3ZlcmxheTwvd29yZGFzd29yZD4KK2FwcGxpY2F0aW9ucyBtdXN0IGFkZGl0aW9uYWxseSBwcm92aWRlIGEKKzxzdHJ1Y3RmaWVsZD5iYXNlPC9zdHJ1Y3RmaWVsZD4gYWRkcmVzcy4gU2V0dGluZyB1cCBhIERNQSB0byBhCityYW5kb20gbWVtb3J5IGxvY2F0aW9uIGNhbiBqZW9wYXJkaXplIHRoZSBzeXN0ZW0gc2VjdXJpdHksIGl0cworc3RhYmlsaXR5IG9yIGV2ZW4gZGFtYWdlIHRoZSBoYXJkd2FyZSwgdGhlcmVmb3JlIG9ubHkgdGhlIHN1cGVydXNlcgorY2FuIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgYSBkZXN0cnVjdGl2ZSB2aWRlbyBvdmVybGF5LjwvcGFyYT4KKworICAgIDwhLS0gTkIgdjRsMl9waXhfZm9ybWF0IGlzIGFsc28gc3BlY2lmaWVkIGluIHBpeGZtdC5zZ21sLi0tPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWZyYW1lYnVmZmVyIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9mcmFtZWJ1ZmZlcjwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk92ZXJsYXkgY2FwYWJpbGl0eSBmbGFncyBzZXQgYnkgdGhlIGRyaXZlciwgc2VlCis8eHJlZiBsaW5rZW5kPSJmcmFtZWJ1ZmZlci1jYXAiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+T3ZlcmxheSBjb250cm9sIGZsYWdzIHNldCBieSBhcHBsaWNhdGlvbiBhbmQKK2RyaXZlciwgc2VlIDx4cmVmIGxpbmtlbmQ9ImZyYW1lYnVmZmVyLWZsYWdzIiAvPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT52b2lkICo8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmJhc2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+UGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBmcmFtZWJ1ZmZlciwKK3RoYXQgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBpeGVsIGluIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlCitmcmFtZWJ1ZmZlci48Zm9vdG5vdGU+PHBhcmE+QSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgbWF5IG5vdCBzdWl0IGFsbAorcGxhdGZvcm1zLiBHSyBub3RlcyBpbiB0aGVvcnkgd2Ugc2hvdWxkIHBhc3Mgc29tZXRoaW5nIGxpa2UgUENJIGRldmljZQorKyBtZW1vcnkgcmVnaW9uICsgb2Zmc2V0IGluc3RlYWQuIElmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgcGxlYXNlCitkaXNjdXNzIG9uIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nIGxpc3Q6ICZ2NGwtbWw7LjwvcGFyYT48L2Zvb3Rub3RlPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGZpZWxkIGlzIGlycmVsZXZhbnQgdG8KKzx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZSBWaWRlbyBPdmVybGF5czwvd29yZGFzd29yZD4uIEZvcgorPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8gT3ZlcmxheXM8L3dvcmRhc3dvcmQ+IGFwcGxpY2F0aW9ucyBtdXN0Citwcm92aWRlIGEgYmFzZSBhZGRyZXNzLiBUaGUgZHJpdmVyIG1heSBhY2NlcHQgb25seSBiYXNlIGFkZHJlc3Nlcword2hpY2ggYXJlIGEgbXVsdGlwbGUgb2YgdHdvLCBmb3VyIG9yIGVpZ2h0IGJ5dGVzLiBGb3IKKzx3b3JkYXN3b3JkPlZpZGVvIE91dHB1dCBPdmVybGF5czwvd29yZGFzd29yZD4gdGhlIGRyaXZlciBtdXN0IHJldHVybgorYSB2YWxpZCBiYXNlIGFkZHJlc3MsIHNvIGFwcGxpY2F0aW9ucyBjYW4gZmluZCB0aGUgY29ycmVzcG9uZGluZyBMaW51eAorZnJhbWVidWZmZXIgZGV2aWNlIChzZWUgPHhyZWYgbGlua2VuZD0ib3NkIiAvPikuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXBpeC1mb3JtYXQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+TGF5b3V0IG9mIHRoZSBmcmFtZSBidWZmZXIuIFRoZQorPHN0cnVjdG5hbWU+djRsMl9waXhfZm9ybWF0PC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8eHJlZgorbGlua2VuZD0icGl4Zm10IiAvPiwgZm9yIGNsYXJpZmljYXRpb24gdGhlIGZpZWxkcyBhbmQgYWNjZXB0YWJsZSB2YWx1ZXMKKwkgICAgYXJlIGxpc3RlZCBiZWxvdzo8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldpZHRoIG9mIHRoZSBmcmFtZSBidWZmZXIgaW4gcGl4ZWxzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhlaWdodDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkhlaWdodCBvZiB0aGUgZnJhbWUgYnVmZmVyIGluIHBpeGVscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5waXhlbGZvcm1hdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlCitmcmFtZWJ1ZmZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Rm9yIDx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZSBWaWRlbworT3ZlcmxheXM8L3dvcmRhc3dvcmQ+IHRoaXMgZmllbGQgb25seSBkZWZpbmVzIGEgZm9ybWF0IGZvciB0aGUKKyZ2NGwyLXdpbmRvdzsgPHN0cnVjdGZpZWxkPmNocm9tYWtleTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5Gb3IgPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8KK092ZXJsYXlzPC93b3JkYXN3b3JkPiBhcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIHRoaXMgZmllbGQuIEZvcgorPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0IE92ZXJsYXlzPC93b3JkYXN3b3JkPiB0aGUgZHJpdmVyIG11c3QgcmV0dXJuCithIHZhbGlkIGZvcm1hdC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VXN1YWxseSB0aGlzIGlzIGFuIFJHQiBmb3JtYXQgKGZvciBleGFtcGxlCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCNTY1Ij48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjU2NTwvY29uc3RhbnQ+PC9saW5rPikKK2J1dCBZVVYgZm9ybWF0cyAob25seSBwYWNrZWQgWVVWIGZvcm1hdHMgd2hlbiBjaHJvbWEga2V5aW5nIGlzIHVzZWQsCitub3QgaW5jbHVkaW5nIDxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9VWVZZPC9jb25zdGFudD4pIGFuZCB0aGUKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFMODwvY29uc3RhbnQ+IGZvcm1hdCBhcmUgYWxzbyBwZXJtaXR0ZWQuIFRoZQorYmVoYXZpb3Igb2YgdGhlIGRyaXZlciB3aGVuIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIGEgY29tcHJlc3NlZAorZm9ybWF0IGlzIHVuZGVmaW5lZC4gU2VlIDx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4gZm9yIGluZm9ybWF0aW9uIG9uCitwaXhlbCBmb3JtYXRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzaGFsbCBpZ25vcmUgdGhpcyBmaWVsZC4KK0lmIGFwcGxpY2FibGUsIHRoZSBmaWVsZCBvcmRlciBpcyBzZWxlY3RlZCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOworaW9jdGwsIHVzaW5nIHRoZSA8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZgorJnY0bDItd2luZG93Oy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5EaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHRoZSBsZWZ0bW9zdCBwaXhlbHMgaW4KK3R3byBhZGphY2VudCBsaW5lcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5UaGlzIGZpZWxkIGlzIGlycmVsZXZhbnQgdG8KKzx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZSBWaWRlbworT3ZlcmxheXM8L3dvcmRhc3dvcmQ+LjwvcGFyYT48cGFyYT5Gb3IgPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8KK092ZXJsYXlzPC93b3JkYXN3b3JkPiBib3RoIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBjYW4gc2V0IHRoaXMgZmllbGQKK3RvIHJlcXVlc3QgcGFkZGluZyBieXRlcyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4gRHJpdmVycyBob3dldmVyIG1heQoraWdub3JlIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIHJldHVybmluZyA8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPgordGltZXMgYnl0ZXMtcGVyLXBpeGVsIG9yIGEgbGFyZ2VyIHZhbHVlIHJlcXVpcmVkIGJ5IHRoZSBoYXJkd2FyZS4gVGhhdAoraW1wbGllcyBhcHBsaWNhdGlvbnMgY2FuIGp1c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVybyB0byBnZXQgYQorcmVhc29uYWJsZSBkZWZhdWx0LjwvcGFyYT48cGFyYT5Gb3IgPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0CitPdmVybGF5czwvd29yZGFzd29yZD4gdGhlIGRyaXZlciBtdXN0IHJldHVybiBhIHZhbGlkCit2YWx1ZS48L3BhcmE+PHBhcmE+VmlkZW8gaGFyZHdhcmUgbWF5IGFjY2VzcyBwYWRkaW5nIGJ5dGVzLCB0aGVyZWZvcmUKK3RoZXkgbXVzdCByZXNpZGUgaW4gYWNjZXNzaWJsZSBtZW1vcnkuIENvbnNpZGVyIGZvciBleGFtcGxlIHRoZSBjYXNlCit3aGVyZSBwYWRkaW5nIGJ5dGVzIGFmdGVyIHRoZSBsYXN0IGxpbmUgb2YgYW4gaW1hZ2UgY3Jvc3MgYSBzeXN0ZW0KK3BhZ2UgYm91bmRhcnkuIENhcHR1cmUgZGV2aWNlcyBtYXkgd3JpdGUgcGFkZGluZyBieXRlcywgdGhlIHZhbHVlIGlzCit1bmRlZmluZWQuIE91dHB1dCBkZXZpY2VzIGlnbm9yZSB0aGUgY29udGVudHMgb2YgcGFkZGluZworYnl0ZXMuPC9wYXJhPjxwYXJhPldoZW4gdGhlIGltYWdlIGZvcm1hdCBpcyBwbGFuYXIgdGhlCis8c3RydWN0ZmllbGQ+Ynl0ZXNwZXJsaW5lPC9zdHJ1Y3RmaWVsZD4gdmFsdWUgYXBwbGllcyB0byB0aGUgbGFyZ2VzdAorcGxhbmUgYW5kIGlzIGRpdmlkZWQgYnkgdGhlIHNhbWUgZmFjdG9yIGFzIHRoZQorPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gZmllbGQgZm9yIGFueSBzbWFsbGVyIHBsYW5lcy4gRm9yCitleGFtcGxlIHRoZSBDYiBhbmQgQ3IgcGxhbmVzIG9mIGEgWVVWIDQ6MjowIGltYWdlIGhhdmUgaGFsZiBhcyBtYW55CitwYWRkaW5nIGJ5dGVzIGZvbGxvd2luZyBlYWNoIGxpbmUgYXMgdGhlIFkgcGxhbmUuIFRvIGF2b2lkIGFtYmlndWl0aWVzCitkcml2ZXJzIG11c3QgcmV0dXJuIGEgPHN0cnVjdGZpZWxkPmJ5dGVzcGVybGluZTwvc3RydWN0ZmllbGQ+IHZhbHVlCityb3VuZGVkIHVwIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHNjYWxlIGZhY3Rvci48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2l6ZWltYWdlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+VGhpcyBmaWVsZCBpcyBpcnJlbGV2YW50IHRvCis8d29yZGFzd29yZD5ub24tZGVzdHJ1Y3RpdmUgVmlkZW8gT3ZlcmxheXM8L3dvcmRhc3dvcmQ+LiBGb3IKKzx3b3JkYXN3b3JkPmRlc3RydWN0aXZlIFZpZGVvIE92ZXJsYXlzPC93b3JkYXN3b3JkPiBhcHBsaWNhdGlvbnMgbXVzdAoraW5pdGlhbGl6ZSB0aGlzIGZpZWxkLiBGb3IgPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0CitPdmVybGF5czwvd29yZGFzd29yZD4gdGhlIGRyaXZlciBtdXN0IHJldHVybiBhIHZhbGlkCitmb3JtYXQuPC9wYXJhPjxwYXJhPlRvZ2V0aGVyIHdpdGggPHN0cnVjdGZpZWxkPmJhc2U8L3N0cnVjdGZpZWxkPiBpdAorZGVmaW5lcyB0aGUgZnJhbWVidWZmZXIgbWVtb3J5IGFjY2Vzc2libGUgYnkgdGhlCitkcml2ZXIuPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItY29sb3JzcGFjZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNvbG9yc3BhY2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGluZm9ybWF0aW9uIHN1cHBsZW1lbnRzIHRoZQorPHN0cnVjdGZpZWxkPnBpeGVsZm9ybWF0PC9zdHJ1Y3RmaWVsZD4gYW5kIG11c3QgYmUgc2V0IGJ5IHRoZSBkcml2ZXIsCitzZWUgPHhyZWYgbGlua2VuZD0iY29sb3JzcGFjZXMiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnByaXY8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgZm9ybWF0cy4gV2hlbiBub3QgdXNlZCBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgbXVzdAorc2V0IHRoaXMgZmllbGQgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImZyYW1lYnVmZmVyLWNhcCI+CisgICAgICA8dGl0bGU+RnJhbWUgQnVmZmVyIENhcGFiaWxpdHkgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfRVhURVJOT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIGlzIGNhcGFibGUgb2Ygbm9uLWRlc3RydWN0aXZlIG92ZXJsYXlzLgorV2hlbiB0aGUgZHJpdmVyIGNsZWFycyB0aGlzIGZsYWcsIG9ubHkgZGVzdHJ1Y3RpdmUgb3ZlcmxheXMgYXJlCitzdXBwb3J0ZWQuIFRoZXJlIGFyZSBubyBkcml2ZXJzIHlldCB3aGljaCBzdXBwb3J0IGJvdGggZGVzdHJ1Y3RpdmUgYW5kCitub24tZGVzdHJ1Y3RpdmUgb3ZlcmxheXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nIGJ5IGNocm9tYS1rZXlpbmcgdGhlCitpbWFnZXMuIFRoYXQgaXMsIGltYWdlIHBpeGVscyByZXBsYWNlIHBpeGVscyBpbiB0aGUgVkdBIG9yIHZpZGVvCitzaWduYWwgb25seSB3aGVyZSB0aGUgbGF0dGVyIGFzc3VtZSBhIGNlcnRhaW4gY29sb3IuIENocm9tYS1rZXlpbmcKK21ha2VzIG5vIHNlbnNlIGZvciBkZXN0cnVjdGl2ZSBvdmVybGF5cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwNDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nIHVzaW5nIGEgbGlzdCBvZiBjbGlwCityZWN0YW5nbGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9CSVRNQVBfQ0xJUFBJTkc8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyBjbGlwcGluZyB1c2luZyBhIGJpdCBtYXNrLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9MT0NBTF9BTFBIQTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAxMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nL2JsZW5kaW5nIHVzaW5nIHRoZQorYWxwaGEgY2hhbm5lbCBvZiB0aGUgZnJhbWVidWZmZXIgb3IgVkdBIHNpZ25hbC4gQWxwaGEgYmxlbmRpbmcgbWFrZXMKK25vIHNlbnNlIGZvciBkZXN0cnVjdGl2ZSBvdmVybGF5cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgYWxwaGEgYmxlbmRpbmcgdXNpbmcgYSBnbG9iYWwKK2FscGhhIHZhbHVlLiBBbHBoYSBibGVuZGluZyBtYWtlcyBubyBzZW5zZSBmb3IgZGVzdHJ1Y3RpdmUgb3ZlcmxheXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDA0MDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nL2JsZW5kaW5nIHVzaW5nIHRoZQoraW52ZXJ0ZWQgYWxwaGEgY2hhbm5lbCBvZiB0aGUgZnJhbWVidWZmZXIgb3IgVkdBIHNpZ25hbC4gQWxwaGEKK2JsZW5kaW5nIG1ha2VzIG5vIHNlbnNlIGZvciBkZXN0cnVjdGl2ZSBvdmVybGF5cy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImZyYW1lYnVmZmVyLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5GcmFtZSBCdWZmZXIgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9GTEFHX1BSSU1BUlk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGZyYW1lYnVmZmVyIGlzIHRoZSBwcmltYXJ5IGdyYXBoaWNzIHN1cmZhY2UuCitJbiBvdGhlciB3b3JkcywgdGhlIG92ZXJsYXkgaXMgZGVzdHJ1Y3RpdmUuIFs/XTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZnJhbWUgYnVmZmVyIGlzIGFuIG92ZXJsYXkgc3VyZmFjZSB0aGUgc2FtZQorc2l6ZSBhcyB0aGUgY2FwdHVyZS4gWz9dPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+VGhlIHB1cnBvc2Ugb2YKKzxjb25zdGFudD5WNEwyX0ZCVUZfRkxBR19QUklNQVJZPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTwvY29uc3RhbnQ+IHdhcyBuZXZlciBxdWl0ZSBjbGVhci4KK01vc3QgZHJpdmVycyBzZWVtIHRvIGlnbm9yZSB0aGVzZSBmbGFncy4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKKzx3b3JkYXN3b3JkPmJ0dHY8L3dvcmRhc3dvcmQ+IGRyaXZlciBhcHBsaWNhdGlvbnMgc2hvdWxkIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0ZCVUZfRkxBR19PVkVSTEFZPC9jb25zdGFudD4gZmxhZy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9GTEFHX0NIUk9NQUtFWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwNDwvZW50cnk+CisJICAgIDxlbnRyeT5Vc2UgY2hyb21hLWtleWluZy4gVGhlIGNocm9tYS1rZXkgY29sb3IgaXMKK2RldGVybWluZWQgYnkgdGhlIDxzdHJ1Y3RmaWVsZD5jaHJvbWFrZXk8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZgorJnY0bDItd2luZG93OyBhbmQgbmVnb3RpYXRlZCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bCwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9Im92ZXJsYXkiIC8+CithbmQKKwkgICAgPHhyZWYgbGlua2VuZD0ib3NkIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5UaGVyZSBhcmUgbm8gZmxhZ3MgdG8gZW5hYmxlCitjbGlwcGluZyB1c2luZyBhIGxpc3Qgb2YgY2xpcCByZWN0YW5nbGVzIG9yIGEgYml0bWFwLiBUaGVzZSBtZXRob2RzCithcmUgbmVnb3RpYXRlZCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bCwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9Im92ZXJsYXkiIC8+IGFuZCA8eHJlZiBsaW5rZW5kPSJvc2QiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+VXNlIHRoZSBhbHBoYSBjaGFubmVsIG9mIHRoZSBmcmFtZWJ1ZmZlciB0byBjbGlwIG9yCitibGVuZCBmcmFtZWJ1ZmZlciBwaXhlbHMgd2l0aCB2aWRlbyBpbWFnZXMuIFRoZSBibGVuZAorZnVuY3Rpb24gaXM6IG91dHB1dCA9IGZyYW1lYnVmZmVyIHBpeGVsICogYWxwaGEgKyB2aWRlbyBwaXhlbCAqICgxIC0KK2FscGhhKS4gVGhlIGFjdHVhbCBhbHBoYSBkZXB0aCBkZXBlbmRzIG9uIHRoZSBmcmFtZWJ1ZmZlciBwaXhlbAorZm9ybWF0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlVzZSBhIGdsb2JhbCBhbHBoYSB2YWx1ZSB0byBibGVuZCB0aGUgZnJhbWVidWZmZXIKK3dpdGggdmlkZW8gaW1hZ2VzLiBUaGUgYmxlbmQgZnVuY3Rpb24gaXM6IG91dHB1dCA9IChmcmFtZWJ1ZmZlciBwaXhlbAorKiBhbHBoYSArIHZpZGVvIHBpeGVsICogKDI1NSAtIGFscGhhKSkgLyAyNTUuIFRoZSBhbHBoYSB2YWx1ZSBpcworZGV0ZXJtaW5lZCBieSB0aGUgPHN0cnVjdGZpZWxkPmdsb2JhbF9hbHBoYTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mCismdjRsMi13aW5kb3c7IGFuZCBuZWdvdGlhdGVkIHdpdGggdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0ib3ZlcmxheSIgLz4KK2FuZCA8eHJlZiBsaW5rZW5kPSJvc2QiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfTE9DQUxfSU5WX0FMUEhBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pkxpa2UKKzxjb25zdGFudD5WNEwyX0ZCVUZfRkxBR19MT0NBTF9BTFBIQTwvY29uc3RhbnQ+LCB1c2UgdGhlIGFscGhhIGNoYW5uZWwKK29mIHRoZSBmcmFtZWJ1ZmZlciB0byBjbGlwIG9yIGJsZW5kIGZyYW1lYnVmZmVyIHBpeGVscyB3aXRoIHZpZGVvCitpbWFnZXMsIGJ1dCB3aXRoIGFuIGludmVydGVkIGFscGhhIHZhbHVlLiBUaGUgYmxlbmQgZnVuY3Rpb24gaXM6CitvdXRwdXQgPSBmcmFtZWJ1ZmZlciBwaXhlbCAqICgxIC0gYWxwaGEpICsgdmlkZW8gcGl4ZWwgKiBhbHBoYS4gVGhlCithY3R1YWwgYWxwaGEgZGVwdGggZGVwZW5kcyBvbiB0aGUgZnJhbWVidWZmZXIgcGl4ZWwgZm9ybWF0LjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RVBFUk08L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PiBjYW4gb25seSBiZSBjYWxsZWQKK2J5IGEgcHJpdmlsZWdlZCB1c2VyIHRvIG5lZ290aWF0ZSB0aGUgcGFyYW1ldGVycyBmb3IgYSBkZXN0cnVjdGl2ZQorb3ZlcmxheS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzIGNhbm5vdCBiZSBjaGFuZ2VkIGF0IHRoaXMKK3RpbWUgYmVjYXVzZSBvdmVybGF5IGlzIGFscmVhZHkgZW5hYmxlZCwgb3IgY2FwdHVyaW5nIGlzIGVuYWJsZWQKK2FuZCB0aGUgaGFyZHdhcmUgY2Fubm90IGNhcHR1cmUgYW5kIG92ZXJsYXkgc2ltdWx0YW5lb3VzbHkuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQgb3IgdGhlCis8Y29uc3RhbnQ+VklESU9DX1NfRkJVRjwvY29uc3RhbnQ+IHBhcmFtZXRlcnMgYXJlIHVuc3VpdGFibGUuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZm10LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZm10LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzdkMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1mbXQueG1sCkBAIC0wLDAgKzEsMjAxIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWZtdCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0ZNVCwgVklESU9DX1NfRk1ULAorVklESU9DX1RSWV9GTVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0ZNVDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19GTVQ8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1RSWV9GTVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCB0aGUgZGF0YSBmb3JtYXQsIHRyeSBhIGZvcm1hdDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9mb3JtYXQKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19GTVQsIFZJRElPQ19TX0ZNVCwgVklESU9DX1RSWV9GTVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXNlIGlvY3RscyBhcmUgdXNlZCB0byBuZWdvdGlhdGUgdGhlIGZvcm1hdCBvZiBkYXRhCisodHlwaWNhbGx5IGltYWdlIGZvcm1hdCkgZXhjaGFuZ2VkIGJldHdlZW4gZHJpdmVyIGFuZAorYXBwbGljYXRpb24uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9mb3JtYXQ8L3N0cnVjdG5hbWU+IHRvIHRoZSByZXNwZWN0aXZlIGJ1ZmZlciAoc3RyZWFtKQordHlwZS4gRm9yIGV4YW1wbGUgdmlkZW8gY2FwdHVyZSBkZXZpY2VzIHVzZQorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LiBXaGVuIHRoZSBhcHBsaWNhdGlvbgorY2FsbHMgdGhlIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlciB0bwordGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBmaWxscyB0aGUgcmVzcGVjdGl2ZSBtZW1iZXIgb2YgdGhlCis8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gdW5pb24uIEluIGNhc2Ugb2YgdmlkZW8gY2FwdHVyZSBkZXZpY2VzCit0aGF0IGlzIHRoZSAmdjRsMi1waXgtZm9ybWF0OyA8c3RydWN0ZmllbGQ+cGl4PC9zdHJ1Y3RmaWVsZD4gbWVtYmVyLgorV2hlbiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZHJpdmVycyByZXR1cm4gYW4KKyZFSU5WQUw7LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGNoYW5nZSB0aGUgY3VycmVudCBmb3JtYXQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgYW5kIGFsbAorZmllbGRzIG9mIHRoZSByZXNwZWN0aXZlIDxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPgordW5pb24gbWVtYmVyLiBGb3IgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgZGV2aWNlcwordHlwZXMgaW4gPHhyZWYgbGlua2VuZD0iZGV2aWNlcyIgLz4uIEdvb2QgcHJhY3RpY2UgaXMgdG8gcXVlcnkgdGhlCitjdXJyZW50IHBhcmFtZXRlcnMgZmlyc3QsIGFuZCB0bworbW9kaWZ5IG9ubHkgdGhvc2UgcGFyYW1ldGVycyBub3Qgc3VpdGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4gV2hlbgordGhlIGFwcGxpY2F0aW9uIGNhbGxzIHRoZSA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwKK3dpdGggYSBwb2ludGVyIHRvIGEgPHN0cnVjdG5hbWU+djRsMl9mb3JtYXQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZQordGhlIGRyaXZlciBjaGVja3MKK2FuZCBhZGp1c3RzIHRoZSBwYXJhbWV0ZXJzIGFnYWluc3QgaGFyZHdhcmUgYWJpbGl0aWVzLiBEcml2ZXJzCitzaG91bGQgbm90IHJldHVybiBhbiBlcnJvciBjb2RlIHVubGVzcyB0aGUgaW5wdXQgaXMgYW1iaWd1b3VzLCB0aGlzIGlzCithIG1lY2hhbmlzbSB0byBmYXRob20gZGV2aWNlIGNhcGFiaWxpdGllcyBhbmQgdG8gYXBwcm9hY2ggcGFyYW1ldGVycworYWNjZXB0YWJsZSBmb3IgYm90aCB0aGUgYXBwbGljYXRpb24gYW5kIGRyaXZlci4gT24gc3VjY2VzcyB0aGUgZHJpdmVyCittYXkgcHJvZ3JhbSB0aGUgaGFyZHdhcmUsIGFsbG9jYXRlIHJlc291cmNlcyBhbmQgZ2VuZXJhbGx5IHByZXBhcmUgZm9yCitkYXRhIGV4Y2hhbmdlLgorRmluYWxseSB0aGUgPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIHJldHVybnMgdGhlCitjdXJyZW50IGZvcm1hdCBwYXJhbWV0ZXJzIGFzIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBkb2VzLgorVmVyeSBzaW1wbGUsIGluZmxleGlibGUgZGV2aWNlcyBtYXkgZXZlbiBpZ25vcmUgYWxsIGlucHV0IGFuZCBhbHdheXMKK3JldHVybiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzLiBIb3dldmVyIGFsbCBWNEwyIGRldmljZXMgZXhjaGFuZ2luZworZGF0YSB3aXRoIHRoZSBhcHBsaWNhdGlvbiBtdXN0IGltcGxlbWVudCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBpb2N0bC4gV2hlbiB0aGUgcmVxdWVzdGVkIGJ1ZmZlcgordHlwZSBpcyBub3Qgc3VwcG9ydGVkIGRyaXZlcnMgcmV0dXJuIGFuICZFSU5WQUw7IG9uIGEKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhdHRlbXB0LiBXaGVuIEkvTyBpcyBhbHJlYWR5IGluCitwcm9ncmVzcyBvciB0aGUgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBmb3Igb3RoZXIgcmVhc29ucyBkcml2ZXJzCityZXR1cm4gdGhlICZFQlVTWTsuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIGlzIGVxdWl2YWxlbnQKK3RvIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiB3aXRoIG9uZSBleGNlcHRpb246IGl0IGRvZXMgbm90CitjaGFuZ2UgZHJpdmVyIHN0YXRlLiBJdCBjYW4gYWxzbyBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIG5ldmVyCityZXR1cm5pbmcgPGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPi4gVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCB0bworbmVnb3RpYXRlIHBhcmFtZXRlcnMsIHRvIGxlYXJuIGFib3V0IGhhcmR3YXJlIGxpbWl0YXRpb25zLCB3aXRob3V0CitkaXNhYmxpbmcgSS9PIG9yIHBvc3NpYmx5IHRpbWUgY29uc3VtaW5nIGhhcmR3YXJlIHByZXBhcmF0aW9ucy4KK0FsdGhvdWdoIHN0cm9uZ2x5IHJlY29tbWVuZGVkIGRyaXZlcnMgYXJlIG5vdCByZXF1aXJlZCB0byBpbXBsZW1lbnQKK3RoaXMgaW9jdGwuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWZvcm1hdCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZm9ybWF0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItYnVmLXR5cGU7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0idjRsMi1idWYtdHlwZSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnVuaW9uPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItcGl4LWZvcm1hdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRlZmluaXRpb24gb2YgYW4gaW1hZ2UgZm9ybWF0LCBzZWUgPHhyZWYKKwkJbGlua2VuZD0icGl4Zm10IiAvPiwgdXNlZCBieSB2aWRlbyBjYXB0dXJlIGFuZCBvdXRwdXQKK2RldmljZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi13aW5kb3c7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5EZWZpbml0aW9uIG9mIGFuIG92ZXJsYWlkIGltYWdlLCBzZWUgPHhyZWYKKwkgICAgbGlua2VuZD0ib3ZlcmxheSIgLz4sIHVzZWQgYnkgdmlkZW8gb3ZlcmxheSBkZXZpY2VzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItdmJpLWZvcm1hdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnZiaTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJhdyBWQkkgY2FwdHVyZSBvciBvdXRwdXQgcGFyYW1ldGVycy4gVGhpcyBpcworZGlzY3Vzc2VkIGluIG1vcmUgZGV0YWlsIGluIDx4cmVmIGxpbmtlbmQ9InJhdy12YmkiIC8+LiBVc2VkIGJ5IHJhdyBWQkkKK2NhcHR1cmUgYW5kIG91dHB1dCBkZXZpY2VzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItc2xpY2VkLXZiaS1mb3JtYXQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zbGljZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TbGljZWQgVkJJIGNhcHR1cmUgb3Igb3V0cHV0IHBhcmFtZXRlcnMuIFNlZQorPHhyZWYgbGlua2VuZD0ic2xpY2VkIiAvPiBmb3IgZGV0YWlscy4gVXNlZCBieSBzbGljZWQgVkJJCitjYXB0dXJlIGFuZCBvdXRwdXQgZGV2aWNlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJhd19kYXRhPC9zdHJ1Y3RmaWVsZD5bMjAwXTwvZW50cnk+CisJICAgIDxlbnRyeT5QbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgZm9ybWF0cyB3aXRoIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQgaGlnaGVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRhdGEgZm9ybWF0IGNhbm5vdCBiZSBjaGFuZ2VkIGF0IHRoaXMKK3RpbWUsIGZvciBleGFtcGxlIGJlY2F1c2UgSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgorZmllbGQgaXMgaW52YWxpZCwgdGhlIHJlcXVlc3RlZCBidWZmZXIgdHlwZSBub3Qgc3VwcG9ydGVkLCBvcgorPGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD4gd2FzIGNhbGxlZCBhbmQgaXMgbm90CitzdXBwb3J0ZWQgd2l0aCB0aGlzIGJ1ZmZlciB0eXBlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYyZDcyMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZnJlcXVlbmN5LnhtbApAQCAtMCwwICsxLDE0NSBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1mcmVxdWVuY3kiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19GUkVRVUVOQ1ksIFZJRElPQ19TX0ZSRVFVRU5DWTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfRlJFUVVFTkNZPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0ZSRVFVRU5DWTwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5HZXQgb3Igc2V0IHR1bmVyIG9yIG1vZHVsYXRvciByYWRpbworZnJlcXVlbmN5PC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2ZyZXF1ZW5jeQorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfZnJlcXVlbmN5CisqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfRlJFUVVFTkNZLCBWSURJT0NfU19GUkVRVUVOQ1k8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIGdldCB0aGUgY3VycmVudCB0dW5lciBvciBtb2R1bGF0b3IgcmFkaW8gZnJlcXVlbmN5CithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhCismdjRsMi1mcmVxdWVuY3k7IHRvIHRoZSByZXNwZWN0aXZlIHR1bmVyIG9yIG1vZHVsYXRvciBudW1iZXIgKG9ubHkKK2lucHV0IGRldmljZXMgaGF2ZSB0dW5lcnMsIG9ubHkgb3V0cHV0IGRldmljZXMgaGF2ZSBtb2R1bGF0b3JzKSwgemVybworb3V0IHRoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfR19GUkVRVUVOQ1k8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIFRoZSBkcml2ZXIgc3RvcmVzIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5mcmVxdWVuY3k8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBjaGFuZ2UgdGhlIGN1cnJlbnQgdHVuZXIgb3IgbW9kdWxhdG9yIHJhZGlvIGZyZXF1ZW5jeQorYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5mcmVxdWVuY3k8L3N0cnVjdGZpZWxkPiBmaWVsZHMsIGFuZCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEgJnY0bDItZnJlcXVlbmN5OyBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfU19GUkVRVUVOQ1k8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIFdoZW4gdGhlIHJlcXVlc3RlZCBmcmVxdWVuY3kgaXMgbm90IHBvc3NpYmxlIHRoZQorZHJpdmVyIGFzc3VtZXMgdGhlIGNsb3Nlc3QgcG9zc2libGUgdmFsdWUuIEhvd2V2ZXIKKzxjb25zdGFudD5WSURJT0NfU19GUkVRVUVOQ1k8L2NvbnN0YW50PiBpcyBhIHdyaXRlLW9ubHkgaW9jdGwsIGl0IGRvZXMKK25vdCByZXR1cm4gdGhlIGFjdHVhbCBuZXcgZnJlcXVlbmN5LjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcmVxdWVuY3kiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2ZyZXF1ZW5jeTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR1bmVyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIG9yIG1vZHVsYXRvciBpbmRleCBudW1iZXIuIFRoaXMgaXMgdGhlCitzYW1lIHZhbHVlIGFzIGluIHRoZSAmdjRsMi1pbnB1dDsgPHN0cnVjdGZpZWxkPnR1bmVyPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIGFuZCB0aGUgJnY0bDItdHVuZXI7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkLCBvcgordGhlICZ2NGwyLW91dHB1dDsgPHN0cnVjdGZpZWxkPm1vZHVsYXRvcjwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCB0aGUKKyZ2NGwyLW1vZHVsYXRvcjsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXR1bmVyLXR5cGU7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIHR5cGUuIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUgYXMgaW4gdGhlCismdjRsMi10dW5lcjsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZC4gVGhlIGZpZWxkIGlzIG5vdAorYXBwbGljYWJsZSB0byBtb2R1bGF0b3JzLCAmaWU7IGlnbm9yZWQgYnkgZHJpdmVycy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZyZXF1ZW5jeTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR1bmluZyBmcmVxdWVuY3kgaW4gdW5pdHMgb2YgNjIuNSBrSHosIG9yIGlmIHRoZQorJnY0bDItdHVuZXI7IG9yICZ2NGwyLW1vZHVsYXRvcjsgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZsYWcKKzxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9MT1c8L2NvbnN0YW50PiBpcyBzZXQsIGluIHVuaXRzIG9mIDYyLjUKK0h6LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls4XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCisJICAgIGFwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPnR1bmVyPC9zdHJ1Y3RmaWVsZD4gaW5kZXggaXMgb3V0IG9mCitib3VuZHMgb3IgdGhlIHZhbHVlIGluIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzCit3cm9uZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1pbnB1dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWlucHV0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDA3NmU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1pbnB1dC54bWwKQEAgLTAsMCArMSwxMDAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctaW5wdXQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19JTlBVVCwgVklESU9DX1NfSU5QVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0lOUFVUPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0lOUFVUPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlF1ZXJ5IG9yIHNlbGVjdCB0aGUgY3VycmVudCB2aWRlbyBpbnB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0lOUFVULCBWSURJT0NfU19JTlBVVDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgdmlkZW8gaW5wdXQgYXBwbGljYXRpb25zIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfSU5QVVQ8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyCit3aGVyZSB0aGUgZHJpdmVyIHN0b3JlcyB0aGUgbnVtYmVyIG9mIHRoZSBpbnB1dCwgYXMgaW4gdGhlCismdjRsMi1pbnB1dDsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFRoaXMgaW9jdGwgd2lsbAorZmFpbCBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIHZpZGVvIGlucHV0cywgcmV0dXJuaW5nCis8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPi48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzZWxlY3QgYSB2aWRlbyBpbnB1dCBhcHBsaWNhdGlvbnMgc3RvcmUgdGhlIG51bWJlciBvZiB0aGUKK2Rlc2lyZWQgaW5wdXQgaW4gYW4gaW50ZWdlciBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19JTlBVVDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK2ludGVnZXIuIFNpZGUgZWZmZWN0cyBhcmUgcG9zc2libGUuIEZvciBleGFtcGxlIGlucHV0cyBtYXkgc3VwcG9ydAorZGlmZmVyZW50IHZpZGVvIHN0YW5kYXJkcywgc28gdGhlIGRyaXZlciBtYXkgaW1wbGljaXRseSBzd2l0Y2ggdGhlCitjdXJyZW50IHN0YW5kYXJkLiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHNlbGVjdCBhbiBpbnB1dCBiZWZvcmUKK3F1ZXJ5aW5nIG9yIG5lZ290aWF0aW5nIGFueSBvdGhlciBwYXJhbWV0ZXJzLjwvcGFyYT4KKworICAgIDxwYXJhPkluZm9ybWF0aW9uIGFib3V0IHZpZGVvIGlucHV0cyBpcyBhdmFpbGFibGUgdXNpbmcgdGhlCismVklESU9DLUVOVU1JTlBVVDsgaW9jdGwuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIG51bWJlciBvZiB0aGUgdmlkZW8gaW5wdXQgaXMgb3V0IG9mIGJvdW5kcywgb3IKK3RoZXJlIGFyZSBubyB2aWRlbyBpbnB1dHMgYXQgYWxsIGFuZCB0aGlzIGlvY3RsIGlzIG5vdAorc3VwcG9ydGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGlzIGluIHByb2dyZXNzLCB0aGUgaW5wdXQgY2Fubm90IGJlCitzd2l0Y2hlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1qcGVnY29tcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWpwZWdjb21wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzM5NGIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1qcGVnY29tcC54bWwKQEAgLTAsMCArMSwxODAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctanBlZ2NvbXAiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19KUEVHQ09NUCwgVklESU9DX1NfSlBFR0NPTVA8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0pQRUdDT01QPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0pQRUdDT01QPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPjwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52NGwyX2pwZWdjb21wcmVzc2lvbiAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfSlBFR0NPTVAsIFZJRElPQ19TX0pQRUdDT01QPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5bdG8gZG9dPC9wYXJhPgorCisgICAgPHBhcmE+Um9uYWxkIEJ1bHRqZSBlbGFib3JhdGVzOjwvcGFyYT4KKworICAgIDwhLS0gU2VlIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbSBvbiAxNiBPY3QgMjAwMiwgc3ViamVjdAorIlJlOiBbVjRMXSBSZTogdjRsMiBhcGkgLyBab3JhbiB2NGwyX2pwZWdjb21wcmVzc2lvbiIgLS0+CisKKyAgICA8cGFyYT5BUFAgaXMgc29tZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbmZvcm1hdGlvbi4gVGhlCithcHBsaWNhdGlvbiBjYW4gc2V0IGl0IGl0c2VsZiwgYW5kIGl0J2xsIGJlIHN0b3JlZCBpbiB0aGUgSlBFRy1lbmNvZGVkCitmaWVsZHMgKGVnOyBpbnRlcmxhY2luZyBpbmZvcm1hdGlvbiBmb3IgaW4gYW4gQVZJIG9yIHNvKS4gQ09NIGlzIHRoZQorc2FtZSwgYnV0IGl0J3MgY29tbWVudHMsIGxpa2UgJ2VuY29kZWQgYnkgbWUnIG9yIHNvLjwvcGFyYT4KKworICAgIDxwYXJhPmpwZWdfbWFya2VycyBkZXNjcmliZXMgd2hldGhlciB0aGUgaHVmZm1hbiB0YWJsZXMsCitxdWFudGl6YXRpb24gdGFibGVzIGFuZCB0aGUgcmVzdGFydCBpbnRlcnZhbCBpbmZvcm1hdGlvbiAoYWxsCitKUEVHLXNwZWNpZmljIHN0dWZmKSBzaG91bGQgYmUgc3RvcmVkIGluIHRoZSBKUEVHLWVuY29kZWQgZmllbGRzLgorVGhlc2UgZGVmaW5lIGhvdyB0aGUgSlBFRyBmaWVsZCBpcyBlbmNvZGVkLiBJZiB5b3Ugb21pdCB0aGVtLAorYXBwbGljYXRpb25zIGFzc3VtZSB5b3UndmUgdXNlZCBzdGFuZGFyZCBlbmNvZGluZy4gWW91IHVzdWFsbHkgZG8gd2FudAordG8gYWRkIHRoZW0uPC9wYXJhPgorCisgICAgPCEtLSBOQiBWSURJT0NfU19KUEVHQ09NUCBpcyB3L28uIC0tPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWpwZWdjb21wcmVzc2lvbiI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfanBlZ2NvbXByZXNzaW9uPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5pbnQ8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnF1YWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+aW50PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5BUFBuPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PmludDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+QVBQX2xlbjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5jaGFyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5BUFBfZGF0YTwvc3RydWN0ZmllbGQ+WzYwXTwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+aW50PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5DT01fbGVuPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PmNoYXI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPkNPTV9kYXRhPC9zdHJ1Y3RmaWVsZD5bNjBdPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+anBlZ19tYXJrZXJzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2VlIDx4cmVmIGxpbmtlbmQ9ImpwZWctbWFya2VycyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJqcGVnLW1hcmtlcnMiPgorICAgICAgPHRpdGxlPkpQRUcgTWFya2VycyBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9KUEVHX01BUktFUl9ESFQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4oMSZsdDsmbHQ7Myk8L2VudHJ5PgorCSAgICA8ZW50cnk+RGVmaW5lIEh1ZmZtYW4gVGFibGVzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0pQRUdfTUFSS0VSX0RRVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PigxJmx0OyZsdDs0KTwvZW50cnk+CisJICAgIDxlbnRyeT5EZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlczwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9KUEVHX01BUktFUl9EUkk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4oMSZsdDsmbHQ7NSk8L2VudHJ5PgorCSAgICA8ZW50cnk+RGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWw8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSlBFR19NQVJLRVJfQ09NPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+KDEmbHQ7Jmx0OzYpPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbW1lbnQgc2VnbWVudDwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9KUEVHX01BUktFUl9BUFA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4oMSZsdDsmbHQ7Nyk8L2VudHJ5PgorCSAgICA8ZW50cnk+QXBwIHNlZ21lbnQsIGRyaXZlciB3aWxsIGFsd2F5cyB1c2UgQVBQMDwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1tb2R1bGF0b3IueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1tb2R1bGF0b3IueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Y2U2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLW1vZHVsYXRvci54bWwKQEAgLTAsMCArMSwyNDYgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctbW9kdWxhdG9yIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0dfTU9EVUxBVE9SLCBWSURJT0NfU19NT0RVTEFUT1I8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX01PRFVMQVRPUjwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19NT0RVTEFUT1I8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCBtb2R1bGF0b3IgYXR0cmlidXRlczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9tb2R1bGF0b3IKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmNvbnN0IHN0cnVjdCB2NGwyX21vZHVsYXRvcgorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX01PRFVMQVRPUiwgVklESU9DX1NfTU9EVUxBVE9SPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgYXR0cmlidXRlcyBvZiBhIG1vZHVsYXRvciBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZQordGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCB6ZXJvIG91dCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEgJnY0bDItbW9kdWxhdG9yOyBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfR19NT0RVTEFUT1I8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yIHJldHVybiBhbgorJkVJTlZBTDsgd2hlbiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gVG8gZW51bWVyYXRlIGFsbCBtb2R1bGF0b3JzCithcHBsaWNhdGlvbnMgc2hhbGwgYmVnaW4gYXQgaW5kZXggemVybywgaW5jcmVtZW50aW5nIGJ5IG9uZSB1bnRpbCB0aGUKK2RyaXZlciByZXR1cm5zIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDxwYXJhPk1vZHVsYXRvcnMgaGF2ZSB0d28gd3JpdGFibGUgcHJvcGVydGllcywgYW4gYXVkaW8KK21vZHVsYXRpb24gc2V0IGFuZCB0aGUgcmFkaW8gZnJlcXVlbmN5LiBUbyBjaGFuZ2UgdGhlIG1vZHVsYXRlZCBhdWRpbworc3VicHJvZ3JhbXMsIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXgKKzwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+dHhzdWJjaGFuczwvc3RydWN0ZmllbGQ+IGZpZWxkcyBhbmQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19NT0RVTEFUT1I8L2NvbnN0YW50PiBpb2N0bC4gRHJpdmVycyBtYXkgY2hvb3NlIGEKK2RpZmZlcmVudCBhdWRpbyBtb2R1bGF0aW9uIGlmIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBzYXRpc2ZpZWQuIEhvd2V2ZXIKK3RoaXMgaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGFjdHVhbCBhdWRpbworbW9kdWxhdGlvbiBzZWxlY3RlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBjaGFuZ2UgdGhlIHJhZGlvIGZyZXF1ZW5jeSB0aGUgJlZJRElPQy1TLUZSRVFVRU5DWTsgaW9jdGwKK2lzIGF2YWlsYWJsZS48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItbW9kdWxhdG9yIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9tb2R1bGF0b3I8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklkZW50aWZpZXMgdGhlIG1vZHVsYXRvciwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgbW9kdWxhdG9yLCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcuIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vZHVsYXRvciBjYXBhYmlsaXR5IGZsYWdzLiBObyBmbGFncyBhcmUgZGVmaW5lZAorZm9yIHRoaXMgZmllbGQsIHRoZSB0dW5lciBmbGFncyBpbiAmdjRsMi10dW5lcjsKK2FyZSB1c2VkIGFjY29yZGluZ2x5LiBUaGUgYXVkaW8gZmxhZ3MgaW5kaWNhdGUgdGhlIGFiaWxpdHkKK3RvIGVuY29kZSBhdWRpbyBzdWJwcm9ncmFtcy4gVGhleSB3aWxsIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgorY2hhbmdlIGZvciBleGFtcGxlIHdpdGggdGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yYW5nZWxvdzwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBsb3dlc3QgdHVuYWJsZSBmcmVxdWVuY3kgaW4gdW5pdHMgb2YgNjIuNQorS0h6LCBvciBpZiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPiBmbGFnCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD4gaXMgc2V0LCBpbiB1bml0cyBvZiA2Mi41CitIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJhbmdlaGlnaDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBoaWdoZXN0IHR1bmFibGUgZnJlcXVlbmN5IGluIHVuaXRzIG9mIDYyLjUKK0tIeiwgb3IgaWYgdGhlIDxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gZmxhZworPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX0xPVzwvY29uc3RhbnQ+IGlzIHNldCwgaW4gdW5pdHMgb2YgNjIuNQorSHouPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eHN1YmNoYW5zPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2l0aCB0aGlzIGZpZWxkIGFwcGxpY2F0aW9ucyBjYW4gZGV0ZXJtaW5lIGhvdworYXVkaW8gc3ViLWNhcnJpZXJzIHNoYWxsIGJlIG1vZHVsYXRlZC4gSXQgY29udGFpbnMgYSBzZXQgb2YgZmxhZ3MgYXMKK2RlZmluZWQgaW4gPHhyZWYgbGlua2VuZD0ibW9kdWxhdG9yLXR4c3ViY2hhbnMiIC8+LiBOb3RlIHRoZSB0dW5lcgorPHN0cnVjdGZpZWxkPnJ4c3ViY2hhbnM8L3N0cnVjdGZpZWxkPiBmbGFncyBhcmUgcmV1c2VkLCBidXQgdGhlCitzZW1hbnRpY3MgYXJlIGRpZmZlcmVudC4gVmlkZW8gb3V0cHV0IGRldmljZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhbgorYW5hbG9nIG9yIFBDTSBhdWRpbyBpbnB1dCB3aXRoIDEtMyBjaGFubmVscy4gVGhlCis8c3RydWN0ZmllbGQ+dHhzdWJjaGFuczwvc3RydWN0ZmllbGQ+IGZsYWdzIHNlbGVjdCBvbmUgb3IgbW9yZQorY2hhbm5lbHMgZm9yIG1vZHVsYXRpb24sIHRvZ2V0aGVyIHdpdGggc29tZSBhdWRpbyBzdWJwcm9ncmFtCitpbmRpY2F0b3IsIGZvciBleGFtcGxlIGEgc3RlcmVvIHBpbG90IHRvbmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9Im1vZHVsYXRvci10eHN1YmNoYW5zIj4KKyAgICAgIDx0aXRsZT5Nb2R1bGF0b3IgQXVkaW8gVHJhbnNtaXNzaW9uIEZsYWdzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9NT05PPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vZHVsYXRlIGNoYW5uZWwgMSBhcyBtb25vIGF1ZGlvLCB3aGVuIHRoZSBpbnB1dAoraGFzIG1vcmUgY2hhbm5lbHMsIGEgZG93bi1taXggb2YgY2hhbm5lbCAxIGFuZCAyLiBUaGlzIGZsYWcgZG9lcyBub3QKK2NvbWJpbmUgd2l0aCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU1RFUkVPPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9MQU5HMTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU1RFUkVPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vZHVsYXRlIGNoYW5uZWwgMSBhbmQgMiBhcyBsZWZ0IGFuZCByaWdodAorY2hhbm5lbCBvZiBhIHN0ZXJlbyBhdWRpbyBzaWduYWwuIFdoZW4gdGhlIGlucHV0IGhhcyBvbmx5IG9uZSBjaGFubmVsCitvciB0d28gY2hhbm5lbHMgYW5kIDxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TQVA8L2NvbnN0YW50PiBpcyBhbHNvCitzZXQsIGNoYW5uZWwgMSBpcyBlbmNvZGVkIGFzIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWwuIFRoaXMgZmxhZyBkb2VzCitub3QgY29tYmluZSB3aXRoIDxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9NT05PPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9MQU5HMTwvY29uc3RhbnQ+LiBXaGVuIHRoZSBkcml2ZXIgZG9lcyBub3QKK3N1cHBvcnQgc3RlcmVvIGF1ZGlvIGl0IHNoYWxsIGZhbGwgYmFjayB0byBtb25vLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTEFORzE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+TW9kdWxhdGUgY2hhbm5lbCAxIGFuZCAyIGFzIHByaW1hcnkgYW5kIHNlY29uZGFyeQorbGFuZ3VhZ2Ugb2YgYSBiaWxpbmd1YWwgYXVkaW8gc2lnbmFsLiBXaGVuIHRoZSBpbnB1dCBoYXMgb25seSBvbmUKK2NoYW5uZWwgaXQgaXMgdXNlZCBmb3IgYm90aCBsYW5ndWFnZXMuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBlbmNvZGUKK3RoZSBwcmltYXJ5IG9yIHNlY29uZGFyeSBsYW5ndWFnZSBvbmx5LiBUaGlzIGZsYWcgZG9lcyBub3QgY29tYmluZQord2l0aCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTU9OTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX1NURVJFTzwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD4uIElmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdAorc3VwcG9ydCB0aGUgcmVzcGVjdGl2ZSBhdWRpbyBtYXRyaXgsIG9yIHRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkCitkb2VzIG5vdCBwZXJtaXQgYmlsaW5ndWFsIGF1ZGlvIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX01PRFVMQVRPUjwvY29uc3RhbnQ+IGlvY3RsIHNoYWxsIHJldHVybiBhbiAmRUlOVkFMOworYW5kIHRoZSBkcml2ZXIgc2hhbGwgZmFsbCBiYWNrIHRvIG1vbm8gb3Igc3RlcmVvIG1vZGUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9MQU5HMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwNDwvZW50cnk+CisJICAgIDxlbnRyeT5TYW1lIGVmZmVjdCBhcworPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX1NBUDwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gY29tYmluZWQgd2l0aCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTU9OTworPC9jb25zdGFudD4gdGhlIGZpcnN0IGNoYW5uZWwgaXMgZW5jb2RlZCBhcyBtb25vIGF1ZGlvLCB0aGUgbGFzdAorY2hhbm5lbCBhcyBTZWNvbmQgQXVkaW8gUHJvZ3JhbS4gV2hlbiB0aGUgaW5wdXQgaGFzIG9ubHkgb25lIGNoYW5uZWwKK2l0IGlzIHVzZWQgZm9yIGJvdGggYXVkaW8gdHJhY2tzLiBXaGVuIHRoZSBpbnB1dCBoYXMgdGhyZWUgY2hhbm5lbHMKK3RoZSBtb25vIHRyYWNrIGlzIGEgZG93bi1taXggb2YgY2hhbm5lbCAxIGFuZCAyLiBXaGVuIGNvbWJpbmVkIHdpdGgKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TVEVSRU88L2NvbnN0YW50PiBjaGFubmVsIDEgYW5kIDIgYXJlCitlbmNvZGVkIGFzIGxlZnQgYW5kIHJpZ2h0IHN0ZXJlbyBhdWRpbywgY2hhbm5lbCAzIGFzIFNlY29uZCBBdWRpbworUHJvZ3JhbS4gV2hlbiB0aGUgaW5wdXQgaGFzIG9ubHkgdHdvIGNoYW5uZWxzLCB0aGUgZmlyc3QgaXMgZW5jb2RlZCBhcworbGVmdCBhbmQgcmlnaHQgY2hhbm5lbCBhbmQgdGhlIHNlY29uZCBhcyBTQVAuIFdoZW4gdGhlIGlucHV0IGhhcyBvbmx5CitvbmUgY2hhbm5lbCBpdCBpcyB1c2VkIGZvciBhbGwgYXVkaW8gdHJhY2tzLiBJdCBpcyBub3QgcG9zc2libGUgdG8KK2VuY29kZSBhIFNlY29uZCBBdWRpbyBQcm9ncmFtIG9ubHkuIFRoaXMgZmxhZyBtdXN0IGNvbWJpbmUgd2l0aAorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX01PTk88L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX1NURVJFTzwvY29uc3RhbnQ+LiBJZiB0aGUgaGFyZHdhcmUgZG9lcyBub3QKK3N1cHBvcnQgdGhlIHJlc3BlY3RpdmUgYXVkaW8gbWF0cml4LCBvciB0aGUgY3VycmVudCB2aWRlbyBzdGFuZGFyZAorZG9lcyBub3QgcGVybWl0IFNBUCB0aGUgPGNvbnN0YW50PlZJRElPQ19TX01PRFVMQVRPUjwvY29uc3RhbnQ+IGlvY3RsCitzaGFsbCByZXR1cm4gYW4gJkVJTlZBTDsgYW5kIGRyaXZlciBzaGFsbCBmYWxsIGJhY2sgdG8gbW9ubyBvciBzdGVyZW8KK21vZGUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9SRFM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMTA8L2VudHJ5PgorCSAgICA8ZW50cnk+RW5hYmxlIHRoZSBSRFMgZW5jb2RlciBmb3IgYSByYWRpbyBGTSB0cmFuc21pdHRlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItbW9kdWxhdG9yOworPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1vdXRwdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1vdXRwdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYThjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLW91dHB1dC54bWwKQEAgLTAsMCArMSwxMDAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctb3V0cHV0Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0dfT1VUUFVULCBWSURJT0NfU19PVVRQVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX09VVFBVVDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19PVVRQVVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgb3Igc2VsZWN0IHRoZSBjdXJyZW50IHZpZGVvIG91dHB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX09VVFBVVCwgVklESU9DX1NfT1VUUFVUPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCB2aWRlbyBvdXRwdXQgYXBwbGljYXRpb25zIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfT1VUUFVUPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlcgord2hlcmUgdGhlIGRyaXZlciBzdG9yZXMgdGhlIG51bWJlciBvZiB0aGUgb3V0cHV0LCBhcyBpbiB0aGUKKyZ2NGwyLW91dHB1dDsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFRoaXMgaW9jdGwKK3dpbGwgZmFpbCBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIHZpZGVvIG91dHB1dHMsIHJldHVybmluZyB0aGUKKyZFSU5WQUw7LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHNlbGVjdCBhIHZpZGVvIG91dHB1dCBhcHBsaWNhdGlvbnMgc3RvcmUgdGhlIG51bWJlciBvZiB0aGUKK2Rlc2lyZWQgb3V0cHV0IGluIGFuIGludGVnZXIgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX1NfT1VUUFVUPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBpbnRlZ2VyLgorU2lkZSBlZmZlY3RzIGFyZSBwb3NzaWJsZS4gRm9yIGV4YW1wbGUgb3V0cHV0cyBtYXkgc3VwcG9ydCBkaWZmZXJlbnQKK3ZpZGVvIHN0YW5kYXJkcywgc28gdGhlIGRyaXZlciBtYXkgaW1wbGljaXRseSBzd2l0Y2ggdGhlIGN1cnJlbnQKK3N0YW5kYXJkLiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHNlbGVjdCBhbiBvdXRwdXQgYmVmb3JlIHF1ZXJ5aW5nIG9yCituZWdvdGlhdGluZyBhbnkgb3RoZXIgcGFyYW1ldGVycy48L3BhcmE+CisKKyAgICA8cGFyYT5JbmZvcm1hdGlvbiBhYm91dCB2aWRlbyBvdXRwdXRzIGlzIGF2YWlsYWJsZSB1c2luZyB0aGUKKyZWSURJT0MtRU5VTU9VVFBVVDsgaW9jdGwuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIG51bWJlciBvZiB0aGUgdmlkZW8gb3V0cHV0IGlzIG91dCBvZiBib3VuZHMsIG9yCit0aGVyZSBhcmUgbm8gdmlkZW8gb3V0cHV0cyBhdCBhbGwgYW5kIHRoaXMgaW9jdGwgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JL08gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBvdXRwdXQgY2Fubm90IGJlCitzd2l0Y2hlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1wYXJtLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcGFybS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzMzJkMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcGFybS54bWwKQEAgLTAsMCArMSwzMzIgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctcGFybSI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX1BBUk0sIFZJRElPQ19TX1BBUk08L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1BBUk08L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfUEFSTTwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5HZXQgb3Igc2V0IHN0cmVhbWluZyBwYXJhbWV0ZXJzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnY0bDJfc3RyZWFtcGFybSAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfUEFSTSwgVklESU9DX1NfUEFSTTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQgZGV0ZXJtaW5lcyBhIG5vbWluYWwgbnVtYmVyIG9mCitmcmFtZXMgcGVyIHNlY29uZC4gSWYgbGVzcyB0aGFuIHRoaXMgbnVtYmVyIG9mIGZyYW1lcyBpcyB0byBiZQorY2FwdHVyZWQgb3Igb3V0cHV0LCBhcHBsaWNhdGlvbnMgY2FuIHJlcXVlc3QgZnJhbWUgc2tpcHBpbmcgb3IKK2R1cGxpY2F0aW5nIG9uIHRoZSBkcml2ZXIgc2lkZS4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHVzaW5nCit0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IG9yIDxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4sIHdoaWNoCithcmUgbm90IGF1Z21lbnRlZCBieSB0aW1lc3RhbXBzIG9yIHNlcXVlbmNlIGNvdW50ZXJzLCBhbmQgdG8gYXZvaWQKK3VubmVjY2Vzc2FyeSBkYXRhIGNvcHlpbmcuPC9wYXJhPgorCisgICAgPHBhcmE+RnVydGhlciB0aGVzZSBpb2N0bHMgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKK2J1ZmZlcnMgdXNlZCBpbnRlcm5hbGx5IGJ5IGEgZHJpdmVyIGluIHJlYWQvd3JpdGUgbW9kZS4gRm9yCitpbXBsaWNhdGlvbnMgc2VlIHRoZSBzZWN0aW9uIGRpc2N1c3NpbmcgdGhlICZmdW5jLXJlYWQ7CitmdW5jdGlvbi48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBnZXQgYW5kIHNldCB0aGUgc3RyZWFtaW5nIHBhcmFtZXRlcnMgYXBwbGljYXRpb25zIGNhbGwKK3RoZSA8Y29uc3RhbnQ+VklESU9DX0dfUEFSTTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX1BBUk08L2NvbnN0YW50PiBpb2N0bCwgcmVzcGVjdGl2ZWx5LiBUaGV5IHRha2UgYQorcG9pbnRlciB0byBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3N0cmVhbXBhcm08L3N0cnVjdG5hbWU+IHdoaWNoCitjb250YWlucyBhIHVuaW9uIGhvbGRpbmcgc2VwYXJhdGUgcGFyYW1ldGVycyBmb3IgaW5wdXQgYW5kIG91dHB1dAorZGV2aWNlcy48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItc3RyZWFtcGFybSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfc3RyZWFtcGFybTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgYnVmZmVyIChzdHJlYW0pIHR5cGUsIHNhbWUgYXMgJnY0bDItZm9ybWF0OworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dW5pb248L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBhcm08L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi1jYXB0dXJlcGFybTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcHR1cmU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5QYXJhbWV0ZXJzIGZvciBjYXB0dXJlIGRldmljZXMsIHVzZWQgd2hlbgorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBpcworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItb3V0cHV0cGFybTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm91dHB1dDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBhcmFtZXRlcnMgZm9yIG91dHB1dCBkZXZpY2VzLCB1c2VkIHdoZW4KKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmF3X2RhdGE8L3N0cnVjdGZpZWxkPlsyMDBdPC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgcGxhY2UgaG9sZGVyIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgY3VzdG9tCisoZHJpdmVyIGRlZmluZWQpIGJ1ZmZlciB0eXBlcyA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kCitoaWdoZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNhcHR1cmVwYXJtIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9jYXB0dXJlcGFybTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TZWUgPHhyZWYgbGlua2VuZD0icGFybS1jYXBzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcHR1cmVtb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2V0IGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucywgc2VlIDx4cmVmIGxpbmtlbmQ9InBhcm0tZmxhZ3MiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVwZXJmcmFtZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPlRoaXMgaXMgaXMgdGhlIGRlc2lyZWQgcGVyaW9kIGJldHdlZW4KK3N1Y2Nlc3NpdmUgZnJhbWVzIGNhcHR1cmVkIGJ5IHRoZSBkcml2ZXIsIGluIHNlY29uZHMuIFRoZQorZmllbGQgaXMgaW50ZW5kZWQgdG8gc2tpcCBmcmFtZXMgb24gdGhlIGRyaXZlciBzaWRlLCBzYXZpbmcgSS9PCitiYW5kd2lkdGguPC9wYXJhPjxwYXJhPkFwcGxpY2F0aW9ucyBzdG9yZSBoZXJlIHRoZSBkZXNpcmVkIGZyYW1lCitwZXJpb2QsIGRyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgZnJhbWUgcGVyaW9kLCB3aGljaCBtdXN0IGJlIGdyZWF0ZXIKK29yIGVxdWFsIHRvIHRoZSBub21pbmFsIGZyYW1lIHBlcmlvZCBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvCitzdGFuZGFyZCAoJnY0bDItc3RhbmRhcmQ7IDxzdHJ1Y3RmaWVsZD5mcmFtZXBlcmlvZDwvc3RydWN0ZmllbGQ+CitmaWVsZCkuIENoYW5naW5nIHRoZSB2aWRlbyBzdGFuZGFyZCAoYWxzbyBpbXBsaWNpdGx5IGJ5IHN3aXRjaGluZyB0aGUKK3ZpZGVvIGlucHV0KSBtYXkgcmVzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdGhlIG5vbWluYWwgZnJhbWUgcGVyaW9kLiBUbworcmVzZXQgbWFudWFsbHkgYXBwbGljYXRpb25zIGNhbiBqdXN0IHNldCB0aGlzIGZpZWxkIHRvCit6ZXJvLjwvcGFyYT48cGFyYT5Ecml2ZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbiBvbmx5IHdoZW4gdGhleSBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVElNRVBFUkZSQU1FPC9jb25zdGFudD4gZmxhZyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZXh0ZW5kZWRtb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3VzdG9tIChkcml2ZXIgc3BlY2lmaWMpIHN0cmVhbWluZyBwYXJhbWV0ZXJzLiBXaGVuCit1bnVzZWQsIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uCitBcHBsaWNhdGlvbnMgdXNpbmcgdGhpcyBmaWVsZCBzaG91bGQgY2hlY2sgdGhlIGRyaXZlciBuYW1lIGFuZAordmVyc2lvbiwgc2VlIDx4cmVmIGxpbmtlbmQ9InF1ZXJ5Y2FwIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlYWRidWZmZXJzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXBwbGljYXRpb25zIHNldCB0aGlzIGZpZWxkIHRvIHRoZSBkZXNpcmVkIG51bWJlcgorb2YgYnVmZmVycyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGRyaXZlciBpbiAmZnVuYy1yZWFkOyBtb2RlLiBEcml2ZXJzCityZXR1cm4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYnVmZmVycy4gV2hlbiBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0cyB6ZXJvCitidWZmZXJzLCBkcml2ZXJzIHNob3VsZCBqdXN0IHJldHVybiB0aGUgY3VycmVudCBzZXR0aW5nIHJhdGhlciB0aGFuCit0aGUgbWluaW11bSBvciBhbiBlcnJvciBjb2RlLiBGb3IgZGV0YWlscyBzZWUgPHhyZWYKKwkJbGlua2VuZD0icnciIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLW91dHB1dHBhcm0iPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX291dHB1dHBhcm08L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2VlIDx4cmVmIGxpbmtlbmQ9InBhcm0tY2FwcyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5vdXRwdXRtb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2V0IGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucywgc2VlIDx4cmVmCisJICAgIGxpbmtlbmQ9InBhcm0tZmxhZ3MiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVwZXJmcmFtZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgaXMgdGhlIGRlc2lyZWQgcGVyaW9kIGJldHdlZW4KK3N1Y2Nlc3NpdmUgZnJhbWVzIG91dHB1dCBieSB0aGUgZHJpdmVyLCBpbiBzZWNvbmRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlRoZSBmaWVsZCBpcyBpbnRlbmRlZCB0bworcmVwZWF0IGZyYW1lcyBvbiB0aGUgZHJpdmVyIHNpZGUgaW4gJmZ1bmMtd3JpdGU7IG1vZGUgKGluIHN0cmVhbWluZworbW9kZSB0aW1lc3RhbXBzIGNhbiBiZSB1c2VkIHRvIHRocm90dGxlIHRoZSBvdXRwdXQpLCBzYXZpbmcgSS9PCitiYW5kd2lkdGguPC9wYXJhPjxwYXJhPkFwcGxpY2F0aW9ucyBzdG9yZSBoZXJlIHRoZSBkZXNpcmVkIGZyYW1lCitwZXJpb2QsIGRyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgZnJhbWUgcGVyaW9kLCB3aGljaCBtdXN0IGJlIGdyZWF0ZXIKK29yIGVxdWFsIHRvIHRoZSBub21pbmFsIGZyYW1lIHBlcmlvZCBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvCitzdGFuZGFyZCAoJnY0bDItc3RhbmRhcmQ7IDxzdHJ1Y3RmaWVsZD5mcmFtZXBlcmlvZDwvc3RydWN0ZmllbGQ+CitmaWVsZCkuIENoYW5naW5nIHRoZSB2aWRlbyBzdGFuZGFyZCAoYWxzbyBpbXBsaWNpdGx5IGJ5IHN3aXRjaGluZyB0aGUKK3ZpZGVvIG91dHB1dCkgbWF5IHJlc2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRoZSBub21pbmFsIGZyYW1lIHBlcmlvZC4gVG8KK3Jlc2V0IG1hbnVhbGx5IGFwcGxpY2F0aW9ucyBjYW4ganVzdCBzZXQgdGhpcyBmaWVsZCB0bworemVyby48L3BhcmE+PHBhcmE+RHJpdmVycyBzdXBwb3J0IHRoaXMgZnVuY3Rpb24gb25seSB3aGVuIHRoZXkgc2V0IHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX1RJTUVQRVJGUkFNRTwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmV4dGVuZGVkbW9kZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkN1c3RvbSAoZHJpdmVyIHNwZWNpZmljKSBzdHJlYW1pbmcgcGFyYW1ldGVycy4gV2hlbgordW51c2VkLCBhcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLgorQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgZmllbGQgc2hvdWxkIGNoZWNrIHRoZSBkcml2ZXIgbmFtZSBhbmQKK3ZlcnNpb24sIHNlZSA8eHJlZiBsaW5rZW5kPSJxdWVyeWNhcCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53cml0ZWJ1ZmZlcnM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BcHBsaWNhdGlvbnMgc2V0IHRoaXMgZmllbGQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyCitvZiBidWZmZXJzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgZHJpdmVyIGluCis8ZnVuY3Rpb24+d3JpdGUoKTwvZnVuY3Rpb24+IG1vZGUuIERyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mCitidWZmZXJzLiBXaGVuIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIHplcm8gYnVmZmVycywgZHJpdmVycyBzaG91bGQKK2p1c3QgcmV0dXJuIHRoZSBjdXJyZW50IHNldHRpbmcgcmF0aGVyIHRoYW4gdGhlIG1pbmltdW0gb3IgYW4gZXJyb3IKK2NvZGUuIEZvciBkZXRhaWxzIHNlZSA8eHJlZiBsaW5rZW5kPSJydyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InBhcm0tY2FwcyI+CisgICAgICA8dGl0bGU+U3RyZWFtaW5nIFBhcmFtZXRlcnMgQ2FwYWJpbGl0ZXM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1RJTUVQRVJGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MTAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZnJhbWUgc2tpcHBpbmcvcmVwZWF0aW5nIGNvbnRyb2xsZWQgYnkgdGhlCis8c3RydWN0ZmllbGQ+dGltZXBlcmZyYW1lPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0icGFybS1mbGFncyI+CisgICAgICA8dGl0bGU+Q2FwdHVyZSBQYXJhbWV0ZXJzIEZsYWdzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01PREVfSElHSFFVQUxJVFk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+SGlnaCBxdWFsaXR5IGltYWdpbmcgbW9kZS4gSGlnaCBxdWFsaXR5IG1vZGUKK2lzIGludGVuZGVkIGZvciBzdGlsbCBpbWFnaW5nIGFwcGxpY2F0aW9ucy4gVGhlIGlkZWEgaXMgdG8gZ2V0IHRoZQorYmVzdCBwb3NzaWJsZSBpbWFnZSBxdWFsaXR5IHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBkZWxpdmVyLiBJdCBpcyBub3QKK2RlZmluZWQgaG93IHRoZSBkcml2ZXIgd3JpdGVyIG1heSBhY2hpZXZlIHRoYXQ7IGl0IHdpbGwgZGVwZW5kIG9uIHRoZQoraGFyZHdhcmUgYW5kIHRoZSBpbmdlbnVpdHkgb2YgdGhlIGRyaXZlciB3cml0ZXIuIEhpZ2ggcXVhbGl0eSBtb2RlIGlzCithIGRpZmZlcmVudCBtb2RlIGZyb20gdGhlIHRoZSByZWd1bGFyIG1vdGlvbiB2aWRlbyBjYXB0dXJlIG1vZGVzLiBJbgoraGlnaCBxdWFsaXR5IG1vZGU6PGl0ZW1pemVkbGlzdD4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSBiZSBhYmxlIHRvIGNhcHR1cmUgaGlnaGVyCityZXNvbHV0aW9ucyB0aGFuIGZvciBtb3Rpb24gY2FwdHVyZS48L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSBzdXBwb3J0IGZld2VyIHBpeGVsIGZvcm1hdHMKK3RoYW4gbW90aW9uIGNhcHR1cmUgKGVnOyB0cnVlIGNvbG9yKS48L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSBjYXB0dXJlIGFuZCBhcml0aG1ldGljYWxseQorY29tYmluZSBtdWx0aXBsZSBzdWNjZXNzaXZlIGZpZWxkcyBvciBmcmFtZXMgdG8gcmVtb3ZlIGNvbG9yIGVkZ2UKK2FydGlmYWN0cyBhbmQgcmVkdWNlIHRoZSBub2lzZSBpbiB0aGUgdmlkZW8gZGF0YS4KKzwvcGFyYT4KKwkJICA8L2xpc3RpdGVtPgorCQkgIDxsaXN0aXRlbT4KKwkJICAgIDxwYXJhPlRoZSBkcml2ZXIgbWF5IGNhcHR1cmUgaW1hZ2VzIGluIHNsaWNlcyBsaWtlCithIHNjYW5uZXIgaW4gb3JkZXIgdG8gaGFuZGxlIGxhcmdlciBmb3JtYXQgaW1hZ2VzIHRoYW4gd291bGQgb3RoZXJ3aXNlCitiZSBwb3NzaWJsZS4gPC9wYXJhPgorCQkgIDwvbGlzdGl0ZW0+CisJCSAgPGxpc3RpdGVtPgorCQkgICAgPHBhcmE+QW4gaW1hZ2UgY2FwdHVyZSBvcGVyYXRpb24gbWF5IGJlCitzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIG1vdGlvbiBjYXB0dXJlLiA8L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5Nb3Zpbmcgb2JqZWN0cyBpbiB0aGUgaW1hZ2UgbWlnaHQgaGF2ZQorZXhjZXNzaXZlIG1vdGlvbiBibHVyLiA8L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5DYXB0dXJlIG1pZ2h0IG9ubHkgd29yayB0aHJvdWdoIHRoZQorPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGNhbGwuPC9wYXJhPgorCQkgIDwvbGlzdGl0ZW0+CisJCTwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1wcmlvcml0eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmIwMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1wcmlvcml0eS54bWwKQEAgLTAsMCArMSwxNDQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctcHJpb3JpdHkiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19QUklPUklUWSwgVklESU9DX1NfUFJJT1JJVFk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1BSSU9SSVRZPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX1BSSU9SSVRZPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlF1ZXJ5IG9yIHJlcXVlc3QgdGhlIGFjY2VzcyBwcmlvcml0eSBhc3NvY2lhdGVkIHdpdGggYQorZmlsZSBkZXNjcmlwdG9yPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmVudW0gdjRsMl9wcmlvcml0eSAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBlbnVtIHY0bDJfcHJpb3JpdHkgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX1BSSU9SSVRZLCBWSURJT0NfU19QUklPUklUWTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Qb2ludGVyIHRvIGFuIGVudW0gdjRsMl9wcmlvcml0eSB0eXBlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCBhY2Nlc3MgcHJpb3JpdHkKK2FwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfUFJJT1JJVFk8L2NvbnN0YW50PiBpb2N0bAord2l0aCBhIHBvaW50ZXIgdG8gYW4gZW51bSB2NGwyX3ByaW9yaXR5IHZhcmlhYmxlIHdoZXJlIHRoZSBkcml2ZXIgc3RvcmVzCit0aGUgY3VycmVudCBwcmlvcml0eS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyByZXF1ZXN0IGFuIGFjY2VzcyBwcmlvcml0eSBhcHBsaWNhdGlvbnMgc3RvcmUgdGhlCitkZXNpcmVkIHByaW9yaXR5IGluIGFuIGVudW0gdjRsMl9wcmlvcml0eSB2YXJpYWJsZSBhbmQgY2FsbAorPGNvbnN0YW50PlZJRElPQ19TX1BSSU9SSVRZPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcwordmFyaWFibGUuPC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXByaW9yaXR5Ij4KKyAgICAgIDx0aXRsZT5lbnVtIHY0bDJfcHJpb3JpdHk8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJJT1JJVFlfVU5TRVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QUklPUklUWV9CQUNLR1JPVU5EPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5Mb3dlc3QgcHJpb3JpdHksIHVzdWFsbHkgYXBwbGljYXRpb25zIHJ1bm5pbmcgaW4KK2JhY2tncm91bmQsIGZvciBleGFtcGxlIG1vbml0b3JpbmcgVkJJIHRyYW5zbWlzc2lvbnMuIEEgcHJveHkKK2FwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdXNlciBzcGFjZSB3aWxsIGJlIG5lY2Vzc2FyeSBpZiBtdWx0aXBsZQorYXBwbGljYXRpb25zIHdhbnQgdG8gcmVhZCBmcm9tIGEgZGV2aWNlIGF0IHRoaXMgcHJpb3JpdHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJJT1JJVFlfREVGQVVMVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+TWVkaXVtIHByaW9yaXR5LCB1c3VhbGx5IGFwcGxpY2F0aW9ucyBzdGFydGVkIGFuZAoraW50ZXJhY3RpdmVseSBjb250cm9sbGVkIGJ5IHRoZSB1c2VyLiBGb3IgZXhhbXBsZSBUViB2aWV3ZXJzLCBUZWxldGV4dAorYnJvd3NlcnMsIG9yIGp1c3QgInBhbmVsIiBhcHBsaWNhdGlvbnMgdG8gY2hhbmdlIHRoZSBjaGFubmVsIG9yIHZpZGVvCitjb250cm9scy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBwcmlvcml0eSB1bmxlc3MgYW4gYXBwbGljYXRpb24gcmVxdWVzdHMKK2Fub3RoZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BSSU9SSVRZX1JFQ09SRDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+SGlnaGVzdCBwcmlvcml0eS4gT25seSBvbmUgZmlsZSBkZXNjcmlwdG9yIGNhbiBoYXZlCit0aGlzIHByaW9yaXR5LCBpdCBibG9ja3MgYW55IG90aGVyIGZkIGZyb20gY2hhbmdpbmcgZGV2aWNlIHByb3BlcnRpZXMuCitVc3VhbGx5IGFwcGxpY2F0aW9ucyB3aGljaCBtdXN0IG5vdCBiZSBpbnRlcnJ1cHRlZCwgbGlrZSB2aWRlbworcmVjb3JkaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgdmFsdWUgaXMgaW52YWxpZCwgb3IgdGhlCitkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhY2Nlc3MgcHJpb3JpdGllcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFub3RoZXIgYXBwbGljYXRpb24gYWxyZWFkeSByZXF1ZXN0ZWQgaGlnaGVyCitwcmlvcml0eS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zbGljZWQtdmJpLWNhcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3MjFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zbGljZWQtdmJpLWNhcC54bWwKQEAgLTAsMCArMSwyNjQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctc2xpY2VkLXZiaS1jYXAiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19TTElDRURfVkJJX0NBUDwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgc2xpY2VkIFZCSSBjYXBhYmlsaXRpZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBmaW5kIG91dCB3aGljaCBkYXRhIHNlcnZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgYSBzbGljZWQKK1ZCSSBjYXB0dXJlIG9yIG91dHB1dCBkZXZpY2UsIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLXNsaWNlZC12YmktY2FwOywKK2NsZWFyIHRoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfR19TTElDRURfVkJJX0NBUDwvY29uc3RhbnQ+IGlvY3RsLiBUaGUKK2RyaXZlciBmaWxscyBpbiB0aGUgcmVtYWluaW5nIGZpZWxkcyBvciByZXR1cm5zIGFuICZFSU5WQUw7IGlmIHRoZQorc2xpY2VkIFZCSSBBUEkgaXMgdW5zdXBwb3J0ZWQgb3IgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgoraXMgaW52YWxpZC48L3BhcmE+CisKKyAgICA8cGFyYT5Ob3RlIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBhZGRlZCwKK2FuZCB0aGUgaW9jdGwgY2hhbmdlZCBmcm9tIHJlYWQtb25seSB0byB3cml0ZS1yZWFkLCBpbiBMaW51eCAyLjYuMTkuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXNsaWNlZC12YmktY2FwIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9zbGljZWRfdmJpX2NhcDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI1Ij4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjMqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMyoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSIyKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM1IiBjb2x3aWR0aD0iMioiIC8+CisJPHNwYW5zcGVjIHNwYW5uYW1lPSJoc3BhbiIgbmFtZXN0PSJjMyIgbmFtZWVuZD0iYzUiIC8+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UxNjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9zZXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkEgc2V0IG9mIGFsbCBkYXRhIHNlcnZpY2VzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4gRXF1YWwgdG8gdGhlIHVuaW9uIG9mIGFsbCBlbGVtZW50cyBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzIDwvc3RydWN0ZmllbGQ+IGFycmF5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UxNjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzJdWzI0XTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkVhY2ggZWxlbWVudCBvZiB0aGlzIGFycmF5Citjb250YWlucyBhIHNldCBvZiBkYXRhIHNlcnZpY2VzIHRoZSBoYXJkd2FyZSBjYW4gbG9vayBmb3Igb3IgaW5zZXJ0CitpbnRvIGEgcGFydGljdWxhciBzY2FuIGxpbmUuIERhdGEgc2VydmljZXMgYXJlIGRlZmluZWQgaW4gPHhyZWYKKwkJbGlua2VuZD0idmJpLXNlcnZpY2VzIiAvPi4gQXJyYXkgaW5kaWNlcyBtYXAgdG8gSVRVLVIKK2xpbmUgbnVtYmVycyAoc2VlIGFsc28gPHhyZWYKKwkJbGlua2VuZD0idmJpLTUyNSIgLz4gYW5kIDx4cmVmCitsaW5rZW5kPSJ2YmktNjI1IiAvPikgYXMgZm9sbG93czo8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5FbGVtZW50PC9lbnRyeT4KKwkgICAgPGVudHJ5PjUyNSBsaW5lIHN5c3RlbXM8L2VudHJ5PgorCSAgICA8ZW50cnk+NjI1IGxpbmUgc3lzdGVtczwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMV08L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4xPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPlswXVsyM108L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MjM8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MjM8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzFdPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjI2NDwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4zMTQ8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzIzXTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4yODY8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MzM2PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+VGhlIG51bWJlciBvZiBWQkkgbGluZXMgdGhlCitoYXJkd2FyZSBjYW4gY2FwdHVyZSBvciBvdXRwdXQgcGVyIGZyYW1lLCBvciB0aGUgbnVtYmVyIG9mIHNlcnZpY2VzIGl0CitjYW4gaWRlbnRpZnkgb24gYSBnaXZlbiBsaW5lIG1heSBiZSBsaW1pdGVkLiBGb3IgZXhhbXBsZSBvbiBQQUwgbGluZQorMTYgdGhlIGhhcmR3YXJlIG1heSBiZSBhYmxlIHRvIGxvb2sgZm9yIGEgVlBTIG9yIFRlbGV0ZXh0IHNpZ25hbCwgYnV0Citub3QgYm90aCBhdCB0aGUgc2FtZSB0aW1lLiBBcHBsaWNhdGlvbnMgY2FuIGxlYXJuIGFib3V0IHRoZXNlIGxpbWl0cwordXNpbmcgdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsIGFzIGRlc2NyaWJlZCBpbiA8eHJlZgorCQlsaW5rZW5kPSJzbGljZWQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkRyaXZlcnMgbXVzdCBzZXQKKzxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMF0gYW5kCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzBdIHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZWUgPHhyZWYKKwkJICBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIiAvPi4gU2hvdWxkIGJlCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bM108L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5UaGlzIGFycmF5IGlzIHJlc2VydmVkIGZvciBmdXR1cmUKK2V4dGVuc2lvbnMuIEFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCBpdCB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gU2VlIGFsc28gZGV2LXNsaWNlZC12Ymkuc2dtbCAtLT4KKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InZiaS1zZXJ2aWNlcyI+CisgICAgICA8dGl0bGU+U2xpY2VkIFZCSSBzZXJ2aWNlczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjUiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzUiIGNvbHdpZHRoPSIyKiIgLz4KKwk8c3BhbnNwZWMgc3Bhbm5hbWU9J3JscCcgbmFtZXN0PSdjMycgbmFtZWVuZD0nYzUnIC8+CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlN5bWJvbDwvZW50cnk+CisJICAgIDxlbnRyeT5WYWx1ZTwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlcmVuY2U8L2VudHJ5PgorCSAgICA8ZW50cnk+TGluZXMsIHVzdWFsbHk8L2VudHJ5PgorCSAgICA8ZW50cnk+UGF5bG9hZDwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX1RFTEVURVhUX0I8L2NvbnN0YW50PiAoVGVsZXRleHQKK1N5c3RlbSBCKTwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+PHhyZWYgbGlua2VuZD0iZXRzMzAwNzA2IiAvPiwgPHhyZWYgbGlua2VuZD0iaXR1NjUzIiAvPjwvZW50cnk+CisJICAgIDxlbnRyeT5QQUwvU0VDQU0gbGluZSA3LTIyLCAzMjAtMzM1IChzZWNvbmQgZmllbGQgNy0yMik8L2VudHJ5PgorCSAgICA8ZW50cnk+TGFzdCA0MiBvZiB0aGUgNDUgYnl0ZSBUZWxldGV4dCBwYWNrZXQsIHRoYXQgaXMKK3dpdGhvdXQgY2xvY2sgcnVuLWluIGFuZCBmcmFtaW5nIGNvZGUsIGxzYiBmaXJzdCB0cmFuc21pdHRlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX1ZQUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDQwMDwvZW50cnk+CisJICAgIDxlbnRyeT48eHJlZiBsaW5rZW5kPSJldHMzMDAyMzEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBBTCBsaW5lIDE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJ5dGUgbnVtYmVyIDMgdG8gMTUgYWNjb3JkaW5nIHRvIEZpZ3VyZSA5IG9mCitFVFMmbmJzcDszMDAmbmJzcDsyMzEsIGxzYiBmaXJzdCB0cmFuc21pdHRlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgxMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjx4cmVmIGxpbmtlbmQ9ImVpYTYwOCIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+TlRTQyBsaW5lIDIxLCAyODQgKHNlY29uZCBmaWVsZCAyMSk8L2VudHJ5PgorCSAgICA8ZW50cnk+VHdvIGJ5dGVzIGluIHRyYW5zbWlzc2lvbiBvcmRlciwgaW5jbHVkaW5nIHBhcml0eQorYml0LCBsc2IgZmlyc3QgdHJhbnNtaXR0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9XU1NfNjI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHg0MDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjx4cmVmIGxpbmtlbmQ9ImVuMzAwMjk0IiAvPiwgPHhyZWYgbGlua2VuZD0iaXR1MTExOSIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+UEFML1NFQ0FNIGxpbmUgMjM8L2VudHJ5PgorCSAgICA8ZW50cnk+PHNjcmVlbj4KK0J5dGUgICAgICAgIDAgICAgICAgICAgICAgICAgIDEKKyAgICAgbXNiICAgICAgICAgbHNiICBtc2IgICAgICAgICAgIGxzYgorQml0ICA3IDYgNSA0IDMgMiAxIDAgIHggeCAxMyAxMiAxMSAxMCA5Cis8L3NjcmVlbj48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX1ZCSV81MjU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDEwMDA8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9InJscCI+U2V0IG9mIHNlcnZpY2VzIGFwcGxpY2FibGUgdG8gNTI1CitsaW5lIHN5c3RlbXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9WQklfNjI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHg0NDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJybHAiPlNldCBvZiBzZXJ2aWNlcyBhcHBsaWNhYmxlIHRvIDYyNQorbGluZSBzeXN0ZW1zLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHNsaWNlZCBWQkkgY2FwdHVyaW5nIG9yCitvdXRwdXQsIG9yIHRoZSB2YWx1ZSBpbiB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcword3JvbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc3RkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc3RkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmY1ZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zdGQueG1sCkBAIC0wLDAgKzEsOTkgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctc3RkIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0dfU1RELCBWSURJT0NfU19TVEQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1NURDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19TVEQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgb3Igc2VsZWN0IHRoZSB2aWRlbyBzdGFuZGFyZCBvZiB0aGUgY3VycmVudCBpbnB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52NGwyX3N0ZF9pZAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3QgdjRsMl9zdGRfaWQKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19TVEQsIFZJRElPQ19TX1NURDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgYW5kIHNlbGVjdCB0aGUgY3VycmVudCB2aWRlbyBzdGFuZGFyZCBhcHBsaWNhdGlvbnMKK3VzZSB0aGUgPGNvbnN0YW50PlZJRElPQ19HX1NURDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+VklESU9DX1NfU1REPC9jb25zdGFudD4gaW9jdGxzIHdoaWNoIHRha2UgYSBwb2ludGVyIHRvIGEKKyZ2NGwyLXN0ZC1pZDsgdHlwZSBhcyBhcmd1bWVudC4gPGNvbnN0YW50PlZJRElPQ19HX1NURDwvY29uc3RhbnQ+IGNhbgorcmV0dXJuIGEgc2luZ2xlIGZsYWcgb3IgYSBzZXQgb2YgZmxhZ3MgYXMgaW4gJnY0bDItc3RhbmRhcmQ7IGZpZWxkCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPi4gVGhlIGZsYWdzIG11c3QgYmUgdW5hbWJpZ3VvdXMgc3VjaAordGhhdCB0aGV5IGFwcGVhciBpbiBvbmx5IG9uZSBlbnVtZXJhdGVkIDxzdHJ1Y3RuYW1lPnY0bDJfc3RhbmRhcmQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT48Y29uc3RhbnQ+VklESU9DX1NfU1REPC9jb25zdGFudD4gYWNjZXB0cyBvbmUgb3IgbW9yZQorZmxhZ3MsIGJlaW5nIGEgd3JpdGUtb25seSBpb2N0bCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGFjdHVhbCBuZXcgc3RhbmRhcmQgYXMKKzxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PiBkb2VzLiBXaGVuIG5vIGZsYWdzIGFyZSBnaXZlbiBvcgordGhlIGN1cnJlbnQgaW5wdXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIHN0YW5kYXJkIHRoZSBkcml2ZXIKK3JldHVybnMgYW4gJkVJTlZBTDsuIFdoZW4gdGhlIHN0YW5kYXJkIHNldCBpcyBhbWJpZ3VvdXMgZHJpdmVycyBtYXkKK3JldHVybiA8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPiBvciBjaG9vc2UgYW55IG9mIHRoZSByZXF1ZXN0ZWQKK3N0YW5kYXJkcy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGlzIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX1NURDwvY29uc3RhbnQ+IHBhcmFtZXRlciB3YXMgdW5zdWl0YWJsZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy10dW5lci54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXR1bmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk4YzczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy10dW5lci54bWwKQEAgLTAsMCArMSw1MzUgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctdHVuZXIiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19UVU5FUiwgVklESU9DX1NfVFVORVI8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1RVTkVSPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX1RVTkVSPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdldCBvciBzZXQgdHVuZXIgYXR0cmlidXRlczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl90dW5lcgorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfdHVuZXIKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19UVU5FUiwgVklESU9DX1NfVFVORVI8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdHVuZXIgYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgemVybyBvdXQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBvZiBhICZ2NGwyLXR1bmVyOyBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19UVU5FUjwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJuIGFuCismRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsIHR1bmVycworYXBwbGljYXRpb25zIHNoYWxsIGJlZ2luIGF0IGluZGV4IHplcm8sIGluY3JlbWVudGluZyBieSBvbmUgdW50aWwgdGhlCitkcml2ZXIgcmV0dXJucyA8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPi48L3BhcmE+CisKKyAgICA8cGFyYT5UdW5lcnMgaGF2ZSB0d28gd3JpdGFibGUgcHJvcGVydGllcywgdGhlIGF1ZGlvIG1vZGUgYW5kCit0aGUgcmFkaW8gZnJlcXVlbmN5LiBUbyBjaGFuZ2UgdGhlIGF1ZGlvIG1vZGUsIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplCit0aGUgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+YXVkbW9kZTwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gZmllbGRzIGFuZCBjYWxsIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX1RVTkVSPC9jb25zdGFudD4gaW9jdGwuIFRoaXMgd2lsbAorPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGNoYW5nZSB0aGUgY3VycmVudCB0dW5lciwgd2hpY2ggaXMgZGV0ZXJtaW5lZAorYnkgdGhlIGN1cnJlbnQgdmlkZW8gaW5wdXQuIERyaXZlcnMgbWF5IGNob29zZSBhIGRpZmZlcmVudCBhdWRpbyBtb2RlCitpZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMgaW52YWxpZCBvciB1bnN1cHBvcnRlZC4gU2luY2UgdGhpcyBpcyBhCis8IS0tIEZJWE1FIC0tPndyaXRlLW9ubHkgaW9jdGwsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgYWN0dWFsbHkKK3NlbGVjdGVkIGF1ZGlvIG1vZGUuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gY2hhbmdlIHRoZSByYWRpbyBmcmVxdWVuY3kgdGhlICZWSURJT0MtUy1GUkVRVUVOQ1k7IGlvY3RsCitpcyBhdmFpbGFibGUuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXR1bmVyIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl90dW5lcjwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjEqIiAvPgorCTxzcGFuc3BlYyBzcGFubmFtZT0iaHNwYW4iIG5hbWVzdD0iYzMiIG5hbWVlbmQ9ImM0IiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5JZGVudGlmaWVzIHRoZSB0dW5lciwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5OYW1lIG9mIHRoZSB0dW5lciwgYQorTlVMLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUKK3VzZXIuPCEtLSBGSVhNRSBWaWRlbyBpbnB1dHMgYWxyZWFkeSBoYXZlIGEgbmFtZSwgdGhlIHB1cnBvc2Ugb2YgdGhpcworZmllbGQgaXMgbm90IHF1aXRlIGNsZWFyLi0tPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItdHVuZXItdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlR5cGUgb2YgdGhlIHR1bmVyLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0idjRsMi10dW5lci10eXBlIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlR1bmVyIGNhcGFiaWxpdHkgZmxhZ3MsIHNlZQorPHhyZWYgbGlua2VuZD0idHVuZXItY2FwYWJpbGl0eSIgLz4uIEF1ZGlvIGZsYWdzIGluZGljYXRlIHRoZSBhYmlsaXR5Cit0byBkZWNvZGUgYXVkaW8gc3VicHJvZ3JhbXMuIFRoZXkgd2lsbCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4KK2NoYW5nZSwgZm9yIGV4YW1wbGUgd2l0aCB0aGUgY3VycmVudCB2aWRlbyBzdGFuZGFyZC48L3BhcmE+PHBhcmE+V2hlbgordGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSByYWRpbyB0dW5lciBvbmx5IHRoZQorPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX0xPVzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX1NURVJFTzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX1JEUzwvY29uc3RhbnQ+IGZsYWdzIGNhbiBiZSBzZXQuPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmFuZ2Vsb3c8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlRoZSBsb3dlc3QgdHVuYWJsZSBmcmVxdWVuY3kgaW4KK3VuaXRzIG9mIDYyLjUga0h6LCBvciBpZiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPgorZmxhZyA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD4gaXMgc2V0LCBpbiB1bml0cyBvZiA2Mi41CitIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJhbmdlaGlnaDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+VGhlIGhpZ2hlc3QgdHVuYWJsZSBmcmVxdWVuY3kgaW4KK3VuaXRzIG9mIDYyLjUga0h6LCBvciBpZiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPgorZmxhZyA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD4gaXMgc2V0LCBpbiB1bml0cyBvZiA2Mi41CitIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJ4c3ViY2hhbnM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlNvbWUgdHVuZXJzIG9yIGF1ZGlvCitkZWNvZGVycyBjYW4gZGV0ZXJtaW5lIHRoZSByZWNlaXZlZCBhdWRpbyBzdWJwcm9ncmFtcyBieSBhbmFseXppbmcKK2F1ZGlvIGNhcnJpZXJzLCBwaWxvdCB0b25lcyBvciBvdGhlciBpbmRpY2F0b3JzLiBUbyBwYXNzIHRoaXMKK2luZm9ybWF0aW9uIGRyaXZlcnMgc2V0IGZsYWdzIGRlZmluZWQgaW4gPHhyZWYKKwkJICBsaW5rZW5kPSJ0dW5lci1yeHN1YmNoYW5zIiAvPiBpbiB0aGlzIGZpZWxkLiBGb3IKK2V4YW1wbGU6PC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9NT05PPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+cmVjZWl2aW5nIG1vbm8gYXVkaW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+U1RFUkVPIHwgU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+cmVjZWl2aW5nIHN0ZXJlbyBhdWRpbyBhbmQgYSBzZWNvbmRhcnkgYXVkaW8KK3Byb2dyYW08L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+TU9OTyB8IFNURVJFTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnJlY2VpdmluZyBtb25vIG9yIHN0ZXJlbyBhdWRpbywgdGhlIGhhcmR3YXJlIGNhbm5vdAorZGlzdGluZ3Vpc2g8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+TEFORzEgfCBMQU5HMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnJlY2VpdmluZyBiaWxpbmd1YWwgYXVkaW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+TU9OTyB8IFNURVJFTyB8IExBTkcxIHwgTEFORzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5yZWNlaXZpbmcgbW9ubywgc3RlcmVvIG9yIGJpbGluZ3VhbAorYXVkaW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPldoZW4gdGhlCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfU1RFUkVPPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+X0xBTkcxPC9jb25zdGFudD4sIDxjb25zdGFudD5fTEFORzI8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50Pl9TQVA8L2NvbnN0YW50PiBmbGFnIGlzIGNsZWFyZWQgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+IGZpZWxkLCB0aGUgY29ycmVzcG9uZGluZworPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCXzwvY29uc3RhbnQ+IGZsYWcgbXVzdCBub3QgYmUgc2V0CitoZXJlLjwvcGFyYT48cGFyYT5UaGlzIGZpZWxkIGlzIHZhbGlkIG9ubHkgaWYgdGhpcyBpcyB0aGUgdHVuZXIgb2YgdGhlCitjdXJyZW50IHZpZGVvIGlucHV0LCBvciB3aGVuIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgcmFkaW8KK3R1bmVyLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmF1ZG1vZGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlRoZSBzZWxlY3RlZCBhdWRpbyBtb2RlLCBzZWUKKzx4cmVmIGxpbmtlbmQ9InR1bmVyLWF1ZG1vZGUiIC8+IGZvciB2YWxpZCB2YWx1ZXMuIFRoZSBhdWRpbyBtb2RlIGRvZXMKK25vdCBhZmZlY3QgYXVkaW8gc3VicHJvZ3JhbSBkZXRlY3Rpb24sIGFuZCBsaWtlIGEgPGxpbmsKK2xpbmtlbmQ9ImNvbnRyb2wiPmNvbnRyb2w8L2xpbms+IGl0IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgY2hhbmdlCit1bmxlc3MgdGhlIHJlcXVlc3RlZCBtb2RlIGlzIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQuIFNlZSA8eHJlZgorCQkgIGxpbmtlbmQ9InR1bmVyLW1hdHJpeCIgLz4gZm9yIHBvc3NpYmxlIHJlc3VsdHMgd2hlbgordGhlIHNlbGVjdGVkIGFuZCByZWNlaXZlZCBhdWRpbyBwcm9ncmFtcyBkbyBub3QKK21hdGNoLjwvcGFyYT48cGFyYT5DdXJyZW50bHkgdGhpcyBpcyB0aGUgb25seSBmaWVsZCBvZiBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfdHVuZXI8L3N0cnVjdG5hbWU+IGFwcGxpY2F0aW9ucyBjYW4KK2NoYW5nZS48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zaWduYWw8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlRoZSBzaWduYWwgc3RyZW5ndGggaWYga25vd24sIHJhbmdpbmcKK2Zyb20gMCB0byA2NTUzNS4gSGlnaGVyIHZhbHVlcyBpbmRpY2F0ZSBhIGJldHRlciBzaWduYWwuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5hZmM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkF1dG9tYXRpYyBmcmVxdWVuY3kgY29udHJvbDogV2hlbiB0aGUKKzxzdHJ1Y3RmaWVsZD5hZmM8L3N0cnVjdGZpZWxkPiB2YWx1ZSBpcyBuZWdhdGl2ZSwgdGhlIGZyZXF1ZW5jeSBpcyB0b28KK2xvdywgd2hlbiBwb3NpdGl2ZSB0b28gaGlnaC48IS0tIEZJWE1FIG5lZWQgZXhhbXBsZSB3aGF0IHRvIGRvIHdoZW4gaXQgbmV2ZXIKK3NldHRsZXMgYXQgemVybywgJmllOyByYW5nZSBpcyB3aGF0PyAtLT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXR1bmVyLXR5cGUiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl90dW5lcl90eXBlPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1JBRElPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfQU5BTE9HX1RWPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InR1bmVyLWNhcGFiaWxpdHkiPgorICAgICAgPHRpdGxlPlR1bmVyIGFuZCBNb2R1bGF0b3IgQ2FwYWJpbGl0eSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gc2V0LCB0dW5pbmcgZnJlcXVlbmNpZXMgYXJlIGV4cHJlc3NlZCBpbiB1bml0cyBvZgorNjIuNSZuYnNwO0h6LCBvdGhlcndpc2UgaW4gdW5pdHMgb2YgNjIuNSZuYnNwO2tIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX05PUk08L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBpcyBhIG11bHRpLXN0YW5kYXJkIHR1bmVyOyB0aGUgdmlkZW8gc3RhbmRhcmQKK2NhbiBvciBtdXN0IGJlIHN3aXRjaGVkLiAoQi9HIFBBTCB0dW5lcnMgZm9yIGV4YW1wbGUgYXJlIHR5cGljYWxseSBub3QKKyAgICAgIGNvbnNpZGVyZWQgbXVsdGktc3RhbmRhcmQgYmVjYXVzZSB0aGUgdmlkZW8gc3RhbmRhcmQgaXMgYXV0b21hdGljYWxseQorICAgICAgZGV0ZXJtaW5lZCBmcm9tIHRoZSBmcmVxdWVuY3kgYmFuZC4pIFRoZSBzZXQgb2Ygc3VwcG9ydGVkIHZpZGVvCisgICAgICBzdGFuZGFyZHMgaXMgYXZhaWxhYmxlIGZyb20gdGhlICZ2NGwyLWlucHV0OyBwb2ludGluZyB0byB0aGlzIHR1bmVyLAorICAgICAgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpb2N0bCAmVklESU9DLUVOVU1JTlBVVDsgZm9yIGRldGFpbHMuIE9ubHkKKyAgICAgIDxjb25zdGFudD5WNEwyX1RVTkVSX0FOQUxPR19UVjwvY29uc3RhbnQ+IHR1bmVycyBjYW4gaGF2ZSB0aGlzIGNhcGFiaWxpdHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwk8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX1NURVJFTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwk8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwk8ZW50cnk+U3RlcmVvIGF1ZGlvIHJlY2VwdGlvbiBpcyBzdXBwb3J0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9MQU5HMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDA0MDwvZW50cnk+CisJICAgIDxlbnRyeT5SZWNlcHRpb24gb2YgdGhlIHByaW1hcnkgbGFuZ3VhZ2Ugb2YgYSBiaWxpbmd1YWwKK2F1ZGlvIHByb2dyYW0gaXMgc3VwcG9ydGVkLiBCaWxpbmd1YWwgYXVkaW8gaXMgYSBmZWF0dXJlIG9mCit0d28tY2hhbm5lbCBzeXN0ZW1zLCB0cmFuc21pdHRpbmcgdGhlIHByaW1hcnkgbGFuZ3VhZ2UgbW9uYXVyYWwgb24gdGhlCittYWluIGF1ZGlvIGNhcnJpZXIgYW5kIGEgc2Vjb25kYXJ5IGxhbmd1YWdlIG1vbmF1cmFsIG9uIGEgc2Vjb25kCitjYXJyaWVyLiBPbmx5CisgICAgICA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9BTkFMT0dfVFY8L2NvbnN0YW50PiB0dW5lcnMgY2FuIGhhdmUgdGhpcyBjYXBhYmlsaXR5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTEFORzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMjA8L2VudHJ5PgorCSAgICA8ZW50cnk+UmVjZXB0aW9uIG9mIHRoZSBzZWNvbmRhcnkgbGFuZ3VhZ2Ugb2YgYSBiaWxpbmd1YWwKK2F1ZGlvIHByb2dyYW0gaXMgc3VwcG9ydGVkLiBPbmx5CisgICAgICA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9BTkFMT0dfVFY8L2NvbnN0YW50PiB0dW5lcnMgY2FuIGhhdmUgdGhpcyBjYXBhYmlsaXR5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPlJlY2VwdGlvbiBvZiBhIHNlY29uZGFyeSBhdWRpbyBwcm9ncmFtIGlzCitzdXBwb3J0ZWQuIFRoaXMgaXMgYSBmZWF0dXJlIG9mIHRoZSBCVFNDIHN5c3RlbSB3aGljaCBhY2NvbXBhbmllcyB0aGUKK05UU0MgdmlkZW8gc3RhbmRhcmQuIFR3byBhdWRpbyBjYXJyaWVycyBhcmUgYXZhaWxhYmxlIGZvciBtb25vIG9yCitzdGVyZW8gdHJhbnNtaXNzaW9ucyBvZiBhIHByaW1hcnkgbGFuZ3VhZ2UsIGFuZCBhbiBpbmRlcGVuZGVudCB0aGlyZAorY2FycmllciBmb3IgYSBtb25hdXJhbCBzZWNvbmRhcnkgbGFuZ3VhZ2UuIE9ubHkKKyAgICAgIDxjb25zdGFudD5WNEwyX1RVTkVSX0FOQUxPR19UVjwvY29uc3RhbnQ+IHR1bmVycyBjYW4gaGF2ZSB0aGlzIGNhcGFiaWxpdHkuPC9wYXJhPjxwYXJhPk5vdGUgdGhlCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTEFORzI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9TQVA8L2NvbnN0YW50PiBmbGFncyBhcmUgc3lub255bXMuCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfU0FQPC9jb25zdGFudD4gYXBwbGllcyB3aGVuIHRoZSB0dW5lcgorc3VwcG9ydHMgdGhlIDxjb25zdGFudD5WNEwyX1NURF9OVFNDX008L2NvbnN0YW50PiB2aWRlbworc3RhbmRhcmQuPC9wYXJhPjwhLS0gRklYTUUgd2hhdCBpZiBQQUwrTlRTQyBhbmQgQmkgYnV0IG5vdCBTQVA/IC0tPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9SRFM8L2NvbnN0YW50PjwvZW50cnk+CisJPGVudHJ5PjB4MDA4MDwvZW50cnk+CisJPGVudHJ5PlJEUyBjYXB0dXJlIGlzIHN1cHBvcnRlZC4gVGhpcyBjYXBhYmlsaXR5IGlzIG9ubHkgdmFsaWQgZm9yCityYWRpbyB0dW5lcnMuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ0dW5lci1yeHN1YmNoYW5zIj4KKyAgICAgIDx0aXRsZT5UdW5lciBBdWRpbyBSZWNlcHRpb24gRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX01PTk88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIHJlY2VpdmVzIGEgbW9ubyBhdWRpbyBzaWduYWwuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TVEVSRU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIHJlY2VpdmVzIGEgc3RlcmVvIGF1ZGlvIHNpZ25hbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX0xBTkcxPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA4PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyB0aGUgcHJpbWFyeSBsYW5ndWFnZSBvZiBhCitiaWxpbmd1YWwgYXVkaW8gc2lnbmFsLiBEcml2ZXJzIG11c3QgY2xlYXIgdGhpcyBmbGFnIHdoZW4gdGhlIGN1cnJlbnQKK3ZpZGVvIHN0YW5kYXJkIGlzIDxjb25zdGFudD5WNEwyX1NURF9OVFNDX008L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX0xBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyB0aGUgc2Vjb25kYXJ5IGxhbmd1YWdlIG9mIGEKK2JpbGluZ3VhbCBhdWRpbyBzaWduYWwgKG9yIGEgc2Vjb25kIGF1ZGlvIHByb2dyYW0pLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyBhIFNlY29uZCBBdWRpbyBQcm9ncmFtLiBOb3RlIHRoZQorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX0xBTkcyPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD4gZmxhZ3MgYXJlIHN5bm9ueW1zLiBUaGUKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TQVA8L2NvbnN0YW50PiBmbGFnIGFwcGxpZXMgd2hlbiB0aGUKK2N1cnJlbnQgdmlkZW8gc3RhbmRhcmQgaXMgPGNvbnN0YW50PlY0TDJfU1REX05UU0NfTTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfUkRTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyBhbiBSRFMgY2hhbm5lbC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InR1bmVyLWF1ZG1vZGUiPgorICAgICAgPHRpdGxlPlR1bmVyIEF1ZGlvIE1vZGVzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTU9OTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+UGxheSBtb25vIGF1ZGlvLiBXaGVuIHRoZSB0dW5lciByZWNlaXZlcyBhIHN0ZXJlbworc2lnbmFsIHRoaXMgYSBkb3duLW1peCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbC4gV2hlbiB0aGUgdHVuZXIKK3JlY2VpdmVzIGEgYmlsaW5ndWFsIG9yIFNBUCBzaWduYWwgdGhpcyBtb2RlIHNlbGVjdHMgdGhlIHByaW1hcnkKK2xhbmd1YWdlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9NT0RFX1NURVJFTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+UGxheSBzdGVyZW8gYXVkaW8uIFdoZW4gdGhlIHR1bmVyIHJlY2VpdmVzCitiaWxpbmd1YWwgYXVkaW8gaXQgbWF5IHBsYXkgZGlmZmVyZW50IGxhbmd1YWdlcyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQKK2NoYW5uZWwgb3IgdGhlIHByaW1hcnkgbGFuZ3VhZ2UgaXMgcGxheWVkIG9uIGJvdGggY2hhbm5lbHMuPC9wYXJhPjxwYXJhPlBsYXlpbmcKK2RpZmZlcmVudCBsYW5ndWFnZXMgaW4gdGhpcyBtb2RlIGlzCitkZXByZWNhdGVkLiBOZXcgZHJpdmVycyBzaG91bGQgZG8gdGhpcyBvbmx5IGluCis8Y29uc3RhbnQ+TU9ERV9MQU5HMV9MQU5HMjwvY29uc3RhbnQ+LjwvcGFyYT48cGFyYT5XaGVuIHRoZSB0dW5lcgorcmVjZWl2ZXMgbm8gc3RlcmVvIHNpZ25hbCBvciBkb2VzIG5vdCBzdXBwb3J0IHN0ZXJlbyByZWNlcHRpb24gdGhlCitkcml2ZXIgc2hhbGwgZmFsbCBiYWNrIHRvIDxjb25zdGFudD5NT0RFX01PTk88L2NvbnN0YW50Pi48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTEFORzE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBsYXkgdGhlIHByaW1hcnkgbGFuZ3VhZ2UsIG1vbm8gb3Igc3RlcmVvLiBPbmx5Cis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9BTkFMT0dfVFY8L2NvbnN0YW50PiB0dW5lcnMgc3VwcG9ydCB0aGlzCittb2RlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9NT0RFX0xBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT5QbGF5IHRoZSBzZWNvbmRhcnkgbGFuZ3VhZ2UsIG1vbm8uIFdoZW4gdGhlIHR1bmVyCityZWNlaXZlcyBubyBiaWxpbmd1YWwgYXVkaW8gb3IgU0FQLCBvciB0aGVpciByZWNlcHRpb24gaXMgbm90CitzdXBwb3J0ZWQgdGhlIGRyaXZlciBzaGFsbCBmYWxsIGJhY2sgdG8gbW9ubyBvciBzdGVyZW8gbW9kZS4gT25seQorPGNvbnN0YW50PlY0TDJfVFVORVJfQU5BTE9HX1RWPC9jb25zdGFudD4gdHVuZXJzIHN1cHBvcnQgdGhpcworbW9kZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfTU9ERV9TQVA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBsYXkgdGhlIFNlY29uZCBBdWRpbyBQcm9ncmFtLiBXaGVuIHRoZSB0dW5lcgorcmVjZWl2ZXMgbm8gYmlsaW5ndWFsIGF1ZGlvIG9yIFNBUCwgb3IgdGhlaXIgcmVjZXB0aW9uIGlzIG5vdAorc3VwcG9ydGVkIHRoZSBkcml2ZXIgc2hhbGwgZmFsbCBiYWNrIHRvIG1vbm8gb3Igc3RlcmVvIG1vZGUuIE9ubHkKKzxjb25zdGFudD5WNEwyX1RVTkVSX0FOQUxPR19UVjwvY29uc3RhbnQ+IHR1bmVycyBzdXBwb3J0IHRoaXMgbW9kZS4KK05vdGUgdGhlIDxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTEFORzI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfU0FQPC9jb25zdGFudD4gYXJlIHN5bm9ueW1zLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT5QbGF5IHRoZSBwcmltYXJ5IGxhbmd1YWdlIG9uIHRoZSBsZWZ0IGNoYW5uZWwsIHRoZQorc2Vjb25kYXJ5IGxhbmd1YWdlIG9uIHRoZSByaWdodCBjaGFubmVsLiBXaGVuIHRoZSB0dW5lciByZWNlaXZlcyBubworYmlsaW5ndWFsIGF1ZGlvIG9yIFNBUCwgaXQgc2hhbGwgZmFsbCBiYWNrIHRvCis8Y29uc3RhbnQ+TU9ERV9MQU5HMTwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD5NT0RFX01PTk88L2NvbnN0YW50Pi4KK09ubHkgPGNvbnN0YW50PlY0TDJfVFVORVJfQU5BTE9HX1RWPC9jb25zdGFudD4gdHVuZXJzIHN1cHBvcnQgdGhpcworbW9kZS48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0iYWxsIiBpZD0idHVuZXItbWF0cml4Ij4KKyAgICAgIDx0aXRsZT5UdW5lciBBdWRpbyBNYXRyaXg8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBhbGlnbj0ibGVmdCIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjNiIgY29sd2lkdGg9IjEqIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImMyIiBuYW1lZW5kPSJjNiIgc3Bhbm5hbWU9ImhzcGFuIiBhbGlnbj0iY2VudGVyIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5TZWxlY3RlZAorPGNvbnN0YW50PlY0TDJfVFVORVJfTU9ERV88L2NvbnN0YW50PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5SZWNlaXZlZCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50Pk1PTk88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+U1RFUkVPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PkxBTkcxPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PkxBTkcyID0gU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PkxBTkcxX0xBTkcyPC9jb25zdGFudD48Zm9vdG5vdGU+PHBhcmE+VGhpcworbW9kZSBoYXMgYmVlbiBhZGRlZCBpbiBMaW51eCAyLjYuMTcgYW5kIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IG9sZGVyCitkcml2ZXJzLjwvcGFyYT48L2Zvb3Rub3RlPjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50Pk1PTk88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5Nb25vPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vbm8vTW9ubzwvZW50cnk+CisJICAgIDxlbnRyeT5Nb25vPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vbm88L2VudHJ5PgorCSAgICA8ZW50cnk+TW9uby9Nb25vPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5NT05PIHwgU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+TW9ubzwvZW50cnk+CisJICAgIDxlbnRyeT5Nb25vL01vbm88L2VudHJ5PgorCSAgICA8ZW50cnk+TW9ubzwvZW50cnk+CisJICAgIDxlbnRyeT5TQVA8L2VudHJ5PgorCSAgICA8ZW50cnk+TW9uby9TQVAgKHByZWZlcnJlZCkgb3IgTW9uby9Nb25vPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5TVEVSRU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5MK1I8L2VudHJ5PgorCSAgICA8ZW50cnk+TC9SPC9lbnRyeT4KKwkgICAgPGVudHJ5PlN0ZXJlbyBML1IgKHByZWZlcnJlZCkgb3IgTW9ubyBMK1I8L2VudHJ5PgorCSAgICA8ZW50cnk+U3RlcmVvIEwvUiAocHJlZmVycmVkKSBvciBNb25vIEwrUjwvZW50cnk+CisJICAgIDxlbnRyeT5ML1IgKHByZWZlcnJlZCkgb3IgTCtSL0wrUjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+U1RFUkVPIHwgU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+TCtSPC9lbnRyeT4KKwkgICAgPGVudHJ5PkwvUjwvZW50cnk+CisJICAgIDxlbnRyeT5TdGVyZW8gTC9SIChwcmVmZXJyZWQpIG9yIE1vbm8gTCtSPC9lbnRyeT4KKwkgICAgPGVudHJ5PlNBUDwvZW50cnk+CisJICAgIDxlbnRyeT5MK1IvU0FQIChwcmVmZXJyZWQpIG9yIEwvUiBvciBMK1IvTCtSPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5MQU5HMSB8IExBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+TGFuZ3VhZ2UmbmJzcDsxPC9lbnRyeT4KKwkgICAgPGVudHJ5PkxhbmcxL0xhbmcyIChkZXByZWNhdGVkPGZvb3Rub3RlPjxwYXJhPlBsYXliYWNrIG9mCitib3RoIGxhbmd1YWdlcyBpbiA8Y29uc3RhbnQ+TU9ERV9TVEVSRU88L2NvbnN0YW50PiBpcyBkZXByZWNhdGVkLiBJbgordGhlIGZ1dHVyZSBkcml2ZXJzIHNob3VsZCBwcm9kdWNlIG9ubHkgdGhlIHByaW1hcnkgbGFuZ3VhZ2UgaW4gdGhpcworbW9kZS4gQXBwbGljYXRpb25zIHNob3VsZCByZXF1ZXN0Cis8Y29uc3RhbnQ+TU9ERV9MQU5HMV9MQU5HMjwvY29uc3RhbnQ+IHRvIHJlY29yZCBib3RoIGxhbmd1YWdlcyBvciBhCitzdGVyZW8gc2lnbmFsLjwvcGFyYT48L2Zvb3Rub3RlPikgb3IKK0xhbmcxL0xhbmcxPC9lbnRyeT4KKwkgICAgPGVudHJ5Pkxhbmd1YWdlJm5ic3A7MTwvZW50cnk+CisJICAgIDxlbnRyeT5MYW5ndWFnZSZuYnNwOzI8L2VudHJ5PgorCSAgICA8ZW50cnk+TGFuZzEvTGFuZzIgKHByZWZlcnJlZCkgb3IgTGFuZzEvTGFuZzE8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItdHVuZXI7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGlzCitvdXQgb2YgYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWxvZy1zdGF0dXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzRiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbApAQCAtMCwwICsxLDU4IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1sb2ctc3RhdHVzIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0xPR19TVEFUVVM8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19MT0dfU1RBVFVTPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkxvZyBkcml2ZXIgc3RhdHVzIGluZm9ybWF0aW9uPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5BcyB0aGUgdmlkZW8vYXVkaW8gZGV2aWNlcyBiZWNvbWUgbW9yZSBjb21wbGljYXRlZCBpdAorYmVjb21lcyBoYXJkZXIgdG8gZGVidWcgcHJvYmxlbXMuIFdoZW4gdGhpcyBpb2N0bCBpcyBjYWxsZWQgdGhlIGRyaXZlcgord2lsbCBvdXRwdXQgdGhlIGN1cnJlbnQgZGV2aWNlIHN0YXR1cyB0byB0aGUga2VybmVsIGxvZy4gVGhpcyBpcworcGFydGljdWxhciB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggcHJvYmxlbXMgbGlrZSBubyBzb3VuZCwgbm8gdmlkZW8KK2FuZCBpbmNvcnJlY3RseSB0dW5lZCBjaGFubmVscy4gQWxzbyBtYW55IG1vZGVybiBkZXZpY2VzIGF1dG9kZXRlY3QKK3ZpZGVvIGFuZCBhdWRpbyBzdGFuZGFyZHMgYW5kIHRoaXMgaW9jdGwgd2lsbCByZXBvcnQgd2hhdCB0aGUgZGV2aWNlCit0aGlua3Mgd2hhdCB0aGUgc3RhbmRhcmQgaXMuIE1pc21hdGNoZXMgbWF5IGdpdmUgYW4gaW5kaWNhdGlvbiB3aGVyZQordGhlIHByb2JsZW0gaXMuPC9wYXJhPgorCisgICAgPHBhcmE+VGhpcyBpb2N0bCBpcyBvcHRpb25hbCBhbmQgbm90IGFsbCBkcml2ZXJzIHN1cHBvcnQgaXQuIEl0Cit3YXMgaW50cm9kdWNlZCBpbiBMaW51eCAyLjYuMTUuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaW9jdGwuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLW92ZXJsYXkueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtb3ZlcmxheS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzNmM1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLW92ZXJsYXkueG1sCkBAIC0wLDAgKzEsODMgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLW92ZXJsYXkiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfT1ZFUkxBWTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX09WRVJMQVk8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+U3RhcnQgb3Igc3RvcCB2aWRlbyBvdmVybGF5PC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmNvbnN0IGludCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX09WRVJMQVk8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgaXMgcGFydCBvZiB0aGUgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+dmlkZW8KKyAgICBvdmVybGF5PC9saW5rPiBJL08gbWV0aG9kLiBBcHBsaWNhdGlvbnMgY2FsbAorICAgIDxjb25zdGFudD5WSURJT0NfT1ZFUkxBWTwvY29uc3RhbnQ+IHRvIHN0YXJ0IG9yIHN0b3AgdGhlCisgICAgb3ZlcmxheS4gSXQgdGFrZXMgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgd2hpY2ggbXVzdCBiZSBzZXQgdG8KKyAgICB6ZXJvIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBzdG9wIG92ZXJsYXksIHRvIG9uZSB0byBzdGFydC48L3BhcmE+CisKKyAgICA8cGFyYT5Ecml2ZXJzIGRvIG5vdCBzdXBwb3J0ICZWSURJT0MtU1RSRUFNT047IG9yCismVklESU9DLVNUUkVBTU9GRjsgd2l0aCA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VmlkZW8gb3ZlcmxheSBpcyBub3Qgc3VwcG9ydGVkLCBvciB0aGUKK3BhcmFtZXRlcnMgaGF2ZSBub3QgYmVlbiBzZXQgdXAuIFNlZSA8eHJlZgorbGlua2VuZD0ib3ZlcmxheSIgLz4gZm9yIHRoZSBuZWNlc3Nhcnkgc3RlcHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3MDgxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sCkBAIC0wLDAgKzEsMTY4IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1xYnVmIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX1FCVUYsIFZJRElPQ19EUUJVRjwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX1FCVUY8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX0RRQlVGPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkV4Y2hhbmdlIGEgYnVmZmVyIHdpdGggdGhlIGRyaXZlcjwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9idWZmZXIgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19RQlVGLCBWSURJT0NfRFFCVUY8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PiBpb2N0bAordG8gZW5xdWV1ZSBhbiBlbXB0eSAoY2FwdHVyaW5nKSBvciBmaWxsZWQgKG91dHB1dCkgYnVmZmVyIGluIHRoZQorZHJpdmVyJ3MgaW5jb21pbmcgcXVldWUuIFRoZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzZWxlY3RlZCBJL08KK21ldGhvZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgPGxpbmsgbGlua2VuZD0ibW1hcCI+bWVtb3J5IG1hcHBlZDwvbGluaz4KK2J1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKyZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseSAmdjRsMi1mb3JtYXQ7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4gYW5kIHRoZQorPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFZhbGlkIGluZGV4IG51bWJlcnMgcmFuZ2UgZnJvbQoremVybyB0byB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggJlZJRElPQy1SRVFCVUZTOworKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLiBUaGUKK2NvbnRlbnRzIG9mIHRoZSBzdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9idWZmZXI8L3N0cnVjdG5hbWU+IHJldHVybmVkCitieSBhICZWSURJT0MtUVVFUllCVUY7IGlvY3RsIHdpbGwgZG8gYXMgd2VsbC4gV2hlbiB0aGUgYnVmZmVyIGlzCitpbnRlbmRlZCBmb3Igb3V0cHV0ICg8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+KSBhcHBsaWNhdGlvbnMgbXVzdCBhbHNvCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+Ynl0ZXN1c2VkPC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZHMuIFNlZSA8eHJlZgorCWxpbmtlbmQ9ImJ1ZmZlciIgLz4gZm9yIGRldGFpbHMuIFdoZW4KKzxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCitzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzZXRzIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PiBmbGFncyBhbmQgY2xlYXJzIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfRE9ORTwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCwgb3IgaXQgcmV0dXJucyBhbgorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIDxsaW5rIGxpbmtlbmQ9InVzZXJwIj51c2VyIHBvaW50ZXI8L2xpbms+CitidWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhCismdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHByZXZpb3VzbHkgJnY0bDItZm9ybWF0OworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CitmaWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfVVNFUlBUUjwvY29uc3RhbnQ+IGFuZCB0aGUKKzxzdHJ1Y3RmaWVsZD5tLnVzZXJwdHI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byB0aGUgYWRkcmVzcyBvZiB0aGUKK2J1ZmZlciBhbmQgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IHRvIGl0cyBzaXplLiBXaGVuIHRoZQorYnVmZmVyIGlzIGludGVuZGVkIGZvciBvdXRwdXQgYWRkaXRpb25hbCBmaWVsZHMgbXVzdCBiZSBzZXQgYXMgYWJvdmUuCitXaGVuIDxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCitzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzZXRzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PgorZmxhZyBhbmQgY2xlYXJzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PiBmbGFncyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkLCBvciBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUuCitUaGlzIGlvY3RsIGxvY2tzIHRoZSBtZW1vcnkgcGFnZXMgb2YgdGhlIGJ1ZmZlciBpbiBwaHlzaWNhbCBtZW1vcnksCit0aGV5IGNhbm5vdCBiZSBzd2FwcGVkIG91dCB0byBkaXNrLiBCdWZmZXJzIHJlbWFpbiBsb2NrZWQgdW50aWwKK2RlcXVldWVkLCB1bnRpbCB0aGUgJlZJRElPQy1TVFJFQU1PRkY7IG9yICZWSURJT0MtUkVRQlVGUzsgaW9jdGwgYXJlCitjYWxsZWQsIG9yIHVudGlsIHRoZSBkZXZpY2UgaXMgY2xvc2VkLjwvcGFyYT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KK2lvY3RsIHRvIGRlcXVldWUgYSBmaWxsZWQgKGNhcHR1cmluZykgb3IgZGlzcGxheWVkIChvdXRwdXQpIGJ1ZmZlcgorZnJvbSB0aGUgZHJpdmVyJ3Mgb3V0Z29pbmcgcXVldWUuIFRoZXkganVzdCBzZXQgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcyBvZiBhICZ2NGwyLWJ1ZmZlcjsgYXMgYWJvdmUsIHdoZW4gPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+CitpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBmaWxscyB0aGUKK3JlbWFpbmluZyBmaWVsZHMgb3IgcmV0dXJucyBhbiBlcnJvciBjb2RlLjwvcGFyYT4KKworICAgIDxwYXJhPkJ5IGRlZmF1bHQgPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+IGJsb2NrcyB3aGVuIG5vCitidWZmZXIgaXMgaW4gdGhlIG91dGdvaW5nIHF1ZXVlLiBXaGVuIHRoZQorPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnIHdhcyBnaXZlbiB0byB0aGUgJmZ1bmMtb3BlbjsKK2Z1bmN0aW9uLCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gcmV0dXJucyBpbW1lZGlhdGVseQord2l0aCBhbiAmRUFHQUlOOyB3aGVuIG5vIGJ1ZmZlciBpcyBhdmFpbGFibGUuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIDxzdHJ1Y3RuYW1lPnY0bDJfYnVmZmVyPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgaXMKK3NwZWNpZmllZCBpbiA8eHJlZiBsaW5rZW5kPSJidWZmZXIiIC8+LjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUFHQUlOPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5vbi1ibG9ja2luZyBJL08gaGFzIGJlZW4gc2VsZWN0ZWQgdXNpbmcKKzxjb25zdGFudD5PX05PTkJMT0NLPC9jb25zdGFudD4gYW5kIG5vIGJ1ZmZlciB3YXMgaW4gdGhlIG91dGdvaW5nCitxdWV1ZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYnVmZmVyIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgbm90CitzdXBwb3J0ZWQsIG9yIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBpcyBvdXQgb2YgYm91bmRzLAorb3Igbm8gYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHlldCwgb3IgdGhlCis8c3RydWN0ZmllbGQ+dXNlcnB0cjwvc3RydWN0ZmllbGQ+IG9yCis8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gYXJlIGludmFsaWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTk9NRU08L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm90IGVub3VnaCBwaHlzaWNhbCBvciB2aXJ0dWFsIG1lbW9yeSB3YXMgYXZhaWxhYmxlIHRvCitlbnF1ZXVlIGEgdXNlciBwb2ludGVyIGJ1ZmZlci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gZmFpbGVkIGR1ZSB0byBhbgoraW50ZXJuYWwgZXJyb3IuIENhbiBhbHNvIGluZGljYXRlIHRlbXBvcmFyeSBwcm9ibGVtcyBsaWtlIHNpZ25hbAorbG9zcy4gTm90ZSB0aGUgZHJpdmVyIG1pZ2h0IGRlcXVldWUgYW4gKGVtcHR5KSBidWZmZXIgZGVzcGl0ZQorcmV0dXJuaW5nIGFuIGVycm9yLCBvciBldmVuIHN0b3AgY2FwdHVyaW5nLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzNDk5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbApAQCAtMCwwICsxLDEwMyBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtcXVlcnlidWYiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfUVVFUllCVUY8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19RVUVSWUJVRjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5RdWVyeSB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2J1ZmZlciAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1FVRVJZQlVGPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGlzIGlvY3RsIGlzIHBhcnQgb2YgdGhlIDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeQorbWFwcGluZzwvbGluaz4gSS9PIG1ldGhvZC4gSXQgY2FuIGJlIHVzZWQgdG8gcXVlcnkgdGhlIHN0YXR1cyBvZiBhCitidWZmZXIgYXQgYW55IHRpbWUgYWZ0ZXIgYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHdpdGggdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQKKyAgICBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseQorJnY0bDItZm9ybWF0OyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIGFuZCB0aGUgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4KKyAgICBmaWVsZC4gVmFsaWQgaW5kZXggbnVtYmVycyByYW5nZSBmcm9tIHplcm8KK3RvIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgd2l0aCAmVklESU9DLVJFUUJVRlM7CisgICAgKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLgorQWZ0ZXIgY2FsbGluZyA8Y29uc3RhbnQ+VklESU9DX1FVRVJZQlVGPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8KKyAgICB0aGlzIHN0cnVjdHVyZSBkcml2ZXJzIHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGZpbGwgdGhlIHJlc3Qgb2YKK3RoZSBzdHJ1Y3R1cmUuPC9wYXJhPgorCisgICAgPHBhcmE+SW4gdGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PiBmbGFncyB3aWxsIGJlIHZhbGlkLiBUaGUKKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aWxsIGJlIHNldCB0bworPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiwgdGhlIDxzdHJ1Y3RmaWVsZD5tLm9mZnNldDwvc3RydWN0ZmllbGQ+Citjb250YWlucyB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBtZW1vcnksCit0aGUgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IGZpZWxkIGl0cyBzaXplLiBUaGUgZHJpdmVyIG1heQorb3IgbWF5IG5vdCBzZXQgdGhlIHJlbWFpbmluZyBmaWVsZHMgYW5kIGZsYWdzLCB0aGV5IGFyZSBtZWFuaW5nbGVzcyBpbgordGhpcyBjb250ZXh0LjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSA8c3RydWN0bmFtZT52NGwyX2J1ZmZlcjwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGlzCisgICAgc3BlY2lmaWVkIGluIDx4cmVmIGxpbmtlbmQ9ImJ1ZmZlciIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGJ1ZmZlciA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzIG5vdAorc3VwcG9ydGVkLCBvciB0aGUgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnljYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnljYXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjdlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWNhcC54bWwKQEAgLTAsMCArMSwyODQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLXF1ZXJ5Y2FwIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX1FVRVJZQ0FQPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfUVVFUllDQVA8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgZGV2aWNlIGNhcGFiaWxpdGllczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfUVVFUllDQVA8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPkFsbCBWNEwyIGRldmljZXMgc3VwcG9ydCB0aGUKKzxjb25zdGFudD5WSURJT0NfUVVFUllDQVA8L2NvbnN0YW50PiBpb2N0bC4gSXQgaXMgdXNlZCB0byBpZGVudGlmeQora2VybmVsIGRldmljZXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWNhdGlvbiBhbmQgdG8gb2J0YWluCitpbmZvcm1hdGlvbiBhYm91dCBkcml2ZXIgYW5kIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIHRha2VzIGEKK3BvaW50ZXIgdG8gYSAmdjRsMi1jYXBhYmlsaXR5OyB3aGljaCBpcyBmaWxsZWQgYnkgdGhlIGRyaXZlci4gV2hlbiB0aGUKK2RyaXZlciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWNhdGlvbiB0aGUgaW9jdGwgcmV0dXJucyBhbgorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNhcGFiaWxpdHkiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2NhcGFiaWxpdHk8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRyaXZlcjwvc3RydWN0ZmllbGQ+WzE2XTwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5OYW1lIG9mIHRoZSBkcml2ZXIsIGEgdW5pcXVlIE5VTC10ZXJtaW5hdGVkCitBU0NJSSBzdHJpbmcuIEZvciBleGFtcGxlOiAiYnR0diIuIERyaXZlciBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgY2FuCit1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byB2ZXJpZnkgdGhlIGRyaXZlciBpZGVudGl0eS4gSXQgaXMgYWxzbyB1c2VmdWwKK3RvIHdvcmsgYXJvdW5kIGtub3duIGJ1Z3MsIG9yIHRvIGlkZW50aWZ5IGRyaXZlcnMgaW4gZXJyb3IgcmVwb3J0cy4KK1RoZSBkcml2ZXIgdmVyc2lvbiBpcyBzdG9yZWQgaW4gdGhlIDxzdHJ1Y3RmaWVsZD52ZXJzaW9uPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkLjwvcGFyYT48cGFyYT5TdG9yaW5nIHN0cmluZ3MgaW4gZml4ZWQgc2l6ZWQgYXJyYXlzIGlzIGJhZAorcHJhY3RpY2UgYnV0IHVuYXZvaWRhYmxlIGhlcmUuIERyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQgdGFrZQorcHJlY2F1dGlvbnMgdG8gbmV2ZXIgcmVhZCBvciB3cml0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgYW5kIHRvCittYWtlIHN1cmUgdGhlIHN0cmluZ3MgYXJlIHByb3Blcmx5IE5VTC10ZXJtaW5hdGVkLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2FyZDwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5OYW1lIG9mIHRoZSBkZXZpY2UsIGEgTlVMLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLgorRm9yIGV4YW1wbGU6ICJZb3lvZHluZSBUVi9GTSIuIE9uZSBkcml2ZXIgbWF5IHN1cHBvcnQgZGlmZmVyZW50IGJyYW5kcworb3IgbW9kZWxzIG9mIHZpZGVvIGhhcmR3YXJlLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB1c2VycywKK2ZvciBleGFtcGxlIGluIGEgbWVudSBvZiBhdmFpbGFibGUgZGV2aWNlcy4gU2luY2UgbXVsdGlwbGUgVFYgY2FyZHMgb2YKK3RoZSBzYW1lIGJyYW5kIG1heSBiZSBpbnN0YWxsZWQgd2hpY2ggYXJlIHN1cHBvcnRlZCBieSB0aGUgc2FtZQorZHJpdmVyLCB0aGlzIG5hbWUgc2hvdWxkIGJlIGNvbWJpbmVkIHdpdGggdGhlIGNoYXJhY3RlciBkZXZpY2UgZmlsZQorbmFtZSAoJmVnOyA8ZmlsZW5hbWU+L2Rldi92aWRlbzI8L2ZpbGVuYW1lPikgb3IgdGhlCis8c3RydWN0ZmllbGQ+YnVzX2luZm88L3N0cnVjdGZpZWxkPiBzdHJpbmcgdG8gYXZvaWQKK2FtYmlndWl0aWVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5idXNfaW5mbzwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5Mb2NhdGlvbiBvZiB0aGUgZGV2aWNlIGluIHRoZSBzeXN0ZW0sIGEKK05VTC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4gRm9yIGV4YW1wbGU6ICJQQ0kgU2xvdCA0Ii4gVGhpcworaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZXJzLCB0byBkaXN0aW5ndWlzaCBtdWx0aXBsZQoraWRlbnRpY2FsIGRldmljZXMuIElmIG5vIHN1Y2ggaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRoZSBmaWVsZCBtYXkKK3NpbXBseSBjb3VudCB0aGUgZGV2aWNlcyBjb250cm9sbGVkIGJ5IHRoZSBkcml2ZXIsIG9yIGNvbnRhaW4gdGhlCitlbXB0eSBzdHJpbmcgKDxzdHJ1Y3RmaWVsZD5idXNfaW5mbzwvc3RydWN0ZmllbGQ+WzBdID0gMCkuPCEtLSBYWFggcGNpX2Rldi0+c2xvdF9uYW1lIGV4YW1wbGUgLS0+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52ZXJzaW9uPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+VmVyc2lvbiBudW1iZXIgb2YgdGhlIGRyaXZlci4gVG9nZXRoZXIgd2l0aAordGhlIDxzdHJ1Y3RmaWVsZD5kcml2ZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0aGlzIGlkZW50aWZpZXMgYQorcGFydGljdWxhciBkcml2ZXIuIFRoZSB2ZXJzaW9uIG51bWJlciBpcyBmb3JtYXR0ZWQgdXNpbmcgdGhlCis8Y29uc3RhbnQ+S0VSTkVMX1ZFUlNJT04oKTwvY29uc3RhbnQ+IG1hY3JvOjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpICZsdDsmbHQ7IDE2KSArICgoYikgJmx0OyZsdDsgOCkgKyAoYykpCisKK19fdTMyIHZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCA4LCAxKTsKKworcHJpbnRmICgiVmVyc2lvbjogJXUuJXUuJXVcbiIsCisJKHZlcnNpb24gJmd0OyZndDsgMTYpICZhbXA7IDB4RkYsCisJKHZlcnNpb24gJmd0OyZndDsgOCkgJmFtcDsgMHhGRiwKKwkgdmVyc2lvbiAmYW1wOyAweEZGKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RGV2aWNlIGNhcGFiaWxpdGllcywgc2VlIDx4cmVmCisJCWxpbmtlbmQ9ImRldmljZS1jYXBhYmlsaXRpZXMiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoaXMgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImRldmljZS1jYXBhYmlsaXRpZXMiPgorICAgICAgPHRpdGxlPkRldmljZSBDYXBhYmlsaXRpZXMgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rCitsaW5rZW5kPSJjYXB0dXJlIj5WaWRlbyBDYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rCitsaW5rZW5kPSJvdXRwdXQiPlZpZGVvIE91dHB1dDwvbGluaz4gaW50ZXJmYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMDQ8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsKK2xpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IGludGVyZmFjZS4gQSB2aWRlbyBvdmVybGF5IGRldmljZQordHlwaWNhbGx5IHN0b3JlcyBjYXB0dXJlZCBpbWFnZXMgZGlyZWN0bHkgaW4gdGhlIHZpZGVvIG1lbW9yeSBvZiBhCitncmFwaGljcyBjYXJkLCB3aXRoIGhhcmR3YXJlIGNsaXBwaW5nIGFuZCBzY2FsaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPlJhdworVkJJIENhcHR1cmU8L2xpbms+IGludGVyZmFjZSwgcHJvdmlkaW5nIFRlbGV0ZXh0IGFuZCBDbG9zZWQgQ2FwdGlvbgorZGF0YS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPlJhdyBWQkkgT3V0cHV0PC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDQwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InNsaWNlZCI+U2xpY2VkIFZCSSBDYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwODA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsgbGlua2VuZD0ic2xpY2VkIj5TbGljZWQgVkJJIE91dHB1dDwvbGluaz4gaW50ZXJmYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfUkRTX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMTAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InJkcyI+UkRTPC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAyMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsgbGlua2VuZD0ib3NkIj5WaWRlbworT3V0cHV0IE92ZXJsYXk8L2xpbms+IChPU0QpIGludGVyZmFjZS4gVW5saWtlIHRoZSA8d29yZGFzd29yZD5WaWRlbworT3ZlcmxheTwvd29yZGFzd29yZD4gaW50ZXJmYWNlLCB0aGlzIGlzIGEgc2Vjb25kYXJ5IGZ1bmN0aW9uIG9mIHZpZGVvCitvdXRwdXQgZGV2aWNlcyBhbmQgb3ZlcmxheXMgYW4gaW1hZ2Ugb250byBhbiBvdXRnb2luZyB2aWRlbyBzaWduYWwuCitXaGVuIHRoZSBkcml2ZXIgc2V0cyB0aGlzIGZsYWcsIGl0IG11c3QgY2xlYXIgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+IGZsYWcgYW5kIHZpY2UKK3ZlcnNhLjxmb290bm90ZT48cGFyYT5UaGUgJnY0bDItZnJhbWVidWZmZXI7IGxhY2tzIGFuCismdjRsMi1idWYtdHlwZTsgZmllbGQsIHRoZXJlZm9yZSB0aGUgdHlwZSBvZiBvdmVybGF5IGlzIGltcGxpZWQgYnkgdGhlCitkcml2ZXIgY2FwYWJpbGl0aWVzLjwvcGFyYT48L2Zvb3Rub3RlPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfSFdfRlJFUV9TRUVLPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMDQwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSAmVklESU9DLVMtSFctRlJFUS1TRUVLOyBpb2N0bCBmb3IKK2hhcmR3YXJlIGZyZXF1ZW5jeSBzZWVraW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfVFVORVI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDEwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2UgaGFzIHNvbWUgc29ydCBvZiB0dW5lciB0bworcmVjZWl2ZSBSRi1tb2R1bGF0ZWQgdmlkZW8gc2lnbmFscy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK3R1bmVyIHByb2dyYW1taW5nIHNlZQorPHhyZWYgbGlua2VuZD0idHVuZXIiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfQVVESU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDIwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2UgaGFzIGF1ZGlvIGlucHV0cyBvciBvdXRwdXRzLiBJdCBtYXkgb3IKK21heSBub3Qgc3VwcG9ydCBhdWRpbyByZWNvcmRpbmcgb3IgcGxheWJhY2ssIGluIFBDTSBvciBjb21wcmVzc2VkCitmb3JtYXRzLiBQQ00gYXVkaW8gc3VwcG9ydCBtdXN0IGJlIGltcGxlbWVudGVkIGFzIEFMU0Egb3IgT1NTCitpbnRlcmZhY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF1ZGlvIGlucHV0cyBhbmQgb3V0cHV0cyBzZWUgPHhyZWYKKwkJbGlua2VuZD0iYXVkaW8iIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfUkFESU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDQwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgYSByYWRpbyByZWNlaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX01PRFVMQVRPUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwODAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBoYXMgc29tZSBzb3J0IG9mIG1vZHVsYXRvciB0bworZW1pdCBSRi1tb2R1bGF0ZWQgdmlkZW8vYXVkaW8gc2lnbmFscy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK21vZHVsYXRvciBwcm9ncmFtbWluZyBzZWUKKzx4cmVmIGxpbmtlbmQ9InR1bmVyIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1JFQURXUklURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDEwMDAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsKK2xpbmtlbmQ9InJ3Ij5yZWFkKCk8L2xpbms+IGFuZC9vciA8bGluayBsaW5rZW5kPSJydyI+d3JpdGUoKTwvbGluaz4KK0kvTyBtZXRob2RzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfQVNZTkNJTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDIwMDAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsKK2xpbmtlbmQ9ImFzeW5jIj5hc3luY2hyb25vdXM8L2xpbms+IEkvTyBtZXRob2RzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfU1RSRUFNSU5HPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwNDAwMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSA8bGluaworbGlua2VuZD0ibW1hcCI+c3RyZWFtaW5nPC9saW5rPiBJL08gbWV0aG9kLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkZXZpY2UgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzCitzcGVjaWZpY2F0aW9uLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWN0cmwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzZmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWN0cmwueG1sCkBAIC0wLDAgKzEsNDI4IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1xdWVyeWN0cmwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfUVVFUllDVFJMLCBWSURJT0NfUVVFUllNRU5VPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfUVVFUllDVFJMPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19RVUVSWU1FTlU8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGNvbnRyb2xzIGFuZCBtZW51IGNvbnRyb2wgaXRlbXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfcXVlcnljdHJsICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1FVRVJZQ1RSTCwgVklESU9DX1FVRVJZTUVOVTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGF0dHJpYnV0ZXMgb2YgYSBjb250cm9sIGFwcGxpY2F0aW9ucyBzZXQgdGhlCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLXF1ZXJ5Y3RybDsgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX1FVRVJZQ1RSTDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gVGhlIGRyaXZlciBmaWxscyB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yIHJldHVybnMgYW4KKyZFSU5WQUw7IHdoZW4gdGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IGlzIGludmFsaWQuPC9wYXJhPgorCisgICAgPHBhcmE+SXQgaXMgcG9zc2libGUgdG8gZW51bWVyYXRlIGNvbnRyb2xzIGJ5IGNhbGxpbmcKKzxjb25zdGFudD5WSURJT0NfUVVFUllDVFJMPC9jb25zdGFudD4gd2l0aCBzdWNjZXNzaXZlCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgc3RhcnRpbmcgZnJvbQorPGNvbnN0YW50PlY0TDJfQ0lEX0JBU0U8L2NvbnN0YW50PiB1cCB0byBhbmQgZXhjbHVzaXZlCis8Y29uc3RhbnQ+VjRMMl9DSURfQkFTRV9MQVNUUDE8L2NvbnN0YW50Pi4gRHJpdmVycyBtYXkgcmV0dXJuCis8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPiBpZiBhIGNvbnRyb2wgaW4gdGhpcyByYW5nZSBpcyBub3QKK3N1cHBvcnRlZC4gRnVydGhlciBhcHBsaWNhdGlvbnMgY2FuIGVudW1lcmF0ZSBwcml2YXRlIGNvbnRyb2xzLCB3aGljaAorYXJlIG5vdCBkZWZpbmVkIGluIHRoaXMgc3BlY2lmaWNhdGlvbiwgYnkgc3RhcnRpbmcgYXQKKzxjb25zdGFudD5WNEwyX0NJRF9QUklWQVRFX0JBU0U8L2NvbnN0YW50PiBhbmQgaW5jcmVtZW50aW5nCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiB1bnRpbCB0aGUgZHJpdmVyIHJldHVybnMKKzxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDxwYXJhPkluIGJvdGggY2FzZXMsIHdoZW4gdGhlIGRyaXZlciBzZXRzIHRoZQorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4gZmxhZyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRoaXMgY29udHJvbCBpcyBwZXJtYW5lbnRseQorZGlzYWJsZWQgYW5kIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi48Zm9vdG5vdGU+CisJPHBhcmE+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4gd2FzCitpbnRlbmRlZCBmb3IgdHdvIHB1cnBvc2VzOiBEcml2ZXJzIGNhbiBza2lwIHByZWRlZmluZWQgY29udHJvbHMgbm90CitzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlIChhbHRob3VnaCByZXR1cm5pbmcgRUlOVkFMIHdvdWxkIGRvIGFzCit3ZWxsKSwgb3IgZGlzYWJsZSBwcmVkZWZpbmVkIGFuZCBwcml2YXRlIGNvbnRyb2xzIGFmdGVyIGhhcmR3YXJlCitkZXRlY3Rpb24gd2l0aG91dCB0aGUgdHJvdWJsZSBvZiByZW9yZGVyaW5nIGNvbnRyb2wgYXJyYXlzIGFuZCBpbmRpY2VzCisoRUlOVkFMIGNhbm5vdCBiZSB1c2VkIHRvIHNraXAgcHJpdmF0ZSBjb250cm9scyBiZWNhdXNlIGl0IHdvdWxkCitwcmVtYXR1cmVseSBlbmQgdGhlIGVudW1lcmF0aW9uKS48L3BhcmE+PC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHRoZSBhcHBsaWNhdGlvbiBPUnMgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gd2l0aAorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDwvY29uc3RhbnQ+IHRoZSBkcml2ZXIgcmV0dXJucyB0aGUKK25leHQgc3VwcG9ydGVkIGNvbnRyb2wsIG9yIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+IGlmIHRoZXJlIGlzCitub25lLiBEcml2ZXJzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IHRoaXMgZmxhZyB5ZXQgYWx3YXlzIHJldHVybgorPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4uPC9wYXJhPgorCisgICAgPHBhcmE+QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCBmb3IgbWVudSBjb250cm9sczogdGhlCituYW1lcyBvZiB0aGUgbWVudSBpdGVtcy4gVG8gcXVlcnkgdGhlbSBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gYW5kIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CitmaWVsZHMgb2YgJnY0bDItcXVlcnltZW51OyBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfUVVFUllNRU5VPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBUaGUgZHJpdmVyIGZpbGxzIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJucyBhbgorJkVJTlZBTDsgd2hlbiB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gb3IKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGlzIGludmFsaWQuIE1lbnUgaXRlbXMgYXJlIGVudW1lcmF0ZWQKK2J5IGNhbGxpbmcgPGNvbnN0YW50PlZJRElPQ19RVUVSWU1FTlU8L2NvbnN0YW50PiB3aXRoIHN1Y2Nlc3NpdmUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IHZhbHVlcyBmcm9tICZ2NGwyLXF1ZXJ5Y3RybDsKKzxzdHJ1Y3RmaWVsZD5taW5pbXVtPC9zdHJ1Y3RmaWVsZD4gKDApIHRvCis8c3RydWN0ZmllbGQ+bWF4aW11bTwvc3RydWN0ZmllbGQ+LCBpbmNsdXNpdmUuPC9wYXJhPgorCisgICAgPHBhcmE+U2VlIGFsc28gdGhlIGV4YW1wbGVzIGluIDx4cmVmIGxpbmtlbmQ9ImNvbnRyb2wiIC8+LjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1xdWVyeWN0cmwiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3F1ZXJ5Y3RybDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgY29udHJvbCwgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi4gU2VlCis8eHJlZiBsaW5rZW5kPSJjb250cm9sLWlkIiAvPiBmb3IgcHJlZGVmaW5lZCBJRHMuIFdoZW4gdGhlIElEIGlzIE9SZWQKK3dpdGggVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMIHRoZSBkcml2ZXIgY2xlYXJzIHRoZSBmbGFnIGFuZCByZXR1cm5zCit0aGUgZmlyc3QgY29udHJvbCB3aXRoIGEgaGlnaGVyIElELiBEcml2ZXJzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IHRoaXMKK2ZsYWcgeWV0IGFsd2F5cyByZXR1cm4gYW4gJkVJTlZBTDsuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWN0cmwtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UeXBlIG9mIGNvbnRyb2wsIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJ2NGwyLWN0cmwtdHlwZSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgY29udHJvbCwgYSBOVUwtdGVybWluYXRlZCBBU0NJSQorc3RyaW5nLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUgdXNlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1pbmltdW08L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NaW5pbXVtIHZhbHVlLCBpbmNsdXNpdmUuIFRoaXMgZmllbGQgZ2l2ZXMgYSBsb3dlcgorYm91bmQgZm9yIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9JTlRFR0VSPC9jb25zdGFudD4gY29udHJvbHMgYW5kIHRoZQorbG93ZXN0IHZhbGlkIGluZGV4IChhbHdheXMgMCkgZm9yIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9NRU5VPC9jb25zdGFudD4gY29udHJvbHMuCitGb3IgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX1NUUklORzwvY29uc3RhbnQ+IGNvbnRyb2xzIHRoZSBtaW5pbXVtIHZhbHVlCitnaXZlcyB0aGUgbWluaW11bSBsZW5ndGggb2YgdGhlIHN0cmluZy4gVGhpcyBsZW5ndGggPGVtcGhhc2lzPmRvZXMgbm90IGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nCit6ZXJvPC9lbXBoYXNpcz4uIEl0IG1heSBub3QgYmUgdmFsaWQgZm9yIGFueSBvdGhlciB0eXBlIG9mIGNvbnRyb2wsIGluY2x1ZGluZworPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDwvY29uc3RhbnQ+IGNvbnRyb2xzLiBOb3RlIHRoYXQgdGhpcyBpcyBhCitzaWduZWQgdmFsdWUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tYXhpbXVtPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF4aW11bSB2YWx1ZSwgaW5jbHVzaXZlLiBUaGlzIGZpZWxkIGdpdmVzIGFuIHVwcGVyCitib3VuZCBmb3IgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI8L2NvbnN0YW50PiBjb250cm9scyBhbmQgdGhlCitoaWdoZXN0IHZhbGlkIGluZGV4IGZvciA8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfTUVOVTwvY29uc3RhbnQ+Citjb250cm9scy4KK0ZvciA8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfU1RSSU5HPC9jb25zdGFudD4gY29udHJvbHMgdGhlIG1heGltdW0gdmFsdWUKK2dpdmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgc3RyaW5nLiBUaGlzIGxlbmd0aCA8ZW1waGFzaXM+ZG9lcyBub3QgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcKK3plcm88L2VtcGhhc2lzPi4gSXQgbWF5IG5vdCBiZSB2YWxpZCBmb3IgYW55IG90aGVyIHR5cGUgb2YgY29udHJvbCwgaW5jbHVkaW5nCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0PC9jb25zdGFudD4gY29udHJvbHMuIE5vdGUgdGhhdCB0aGlzIGlzIGEKK3NpZ25lZCB2YWx1ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5UaGlzIGZpZWxkIGdpdmVzIGEgc3RlcCBzaXplIGZvcgorPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI8L2NvbnN0YW50PiBjb250cm9scy4gRm9yCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfU1RSSU5HPC9jb25zdGFudD4gY29udHJvbHMgdGhpcyBmaWVsZCByZWZlcnMgdG8KK3RoZSBzdHJpbmcgbGVuZ3RoIHRoYXQgaGFzIHRvIGJlIGEgbXVsdGlwbGUgb2YgdGhpcyBzdGVwIHNpemUuCitJdCBtYXkgbm90IGJlIHZhbGlkIGZvciBhbnkgb3RoZXIgdHlwZSBvZiBjb250cm9sLCBpbmNsdWRpbmcKKzxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQ8L2NvbnN0YW50PgorY29udHJvbHMuPC9wYXJhPjxwYXJhPkdlbmVyYWxseSBkcml2ZXJzIHNob3VsZCBub3Qgc2NhbGUgaGFyZHdhcmUKK2NvbnRyb2wgdmFsdWVzLiBJdCBtYXkgYmUgbmVjZXNzYXJ5IGZvciBleGFtcGxlIHdoZW4gdGhlCis8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IG9yIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IGltcGx5CithIHBhcnRpY3VsYXIgdW5pdCBhbmQgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IGFjY2VwdHMgb25seSBtdWx0aXBsZXMgb2YKK3NhaWQgdW5pdC4gSWYgc28sIGRyaXZlcnMgbXVzdCB0YWtlIGNhcmUgdmFsdWVzIGFyZSBwcm9wZXJseSByb3VuZGVkCit3aGVuIHNjYWxpbmcsIHN1Y2ggdGhhdCBlcnJvcnMgd2lsbCBub3QgYWNjdW11bGF0ZSBvbiByZXBlYXRlZAorcmVhZC13cml0ZSBjeWNsZXMuPC9wYXJhPjxwYXJhPlRoaXMgZmllbGQgZ2l2ZXMgdGhlIHNtYWxsZXN0IGNoYW5nZSBvZgorYW4gaW50ZWdlciBjb250cm9sIGFjdHVhbGx5IGFmZmVjdGluZyBoYXJkd2FyZS4gT2Z0ZW4gdGhlIGluZm9ybWF0aW9uCitpcyBuZWVkZWQgd2hlbiB0aGUgdXNlciBjYW4gY2hhbmdlIGNvbnRyb2xzIGJ5IGtleWJvYXJkIG9yIEdVSQorYnV0dG9ucywgcmF0aGVyIHRoYW4gYSBzbGlkZXIuIFdoZW4gZm9yIGV4YW1wbGUgYSBoYXJkd2FyZSByZWdpc3RlcgorYWNjZXB0cyB2YWx1ZXMgMC01MTEgYW5kIHRoZSBkcml2ZXIgcmVwb3J0cyAwLTY1NTM1LCBzdGVwIHNob3VsZCBiZQorMTI4LjwvcGFyYT48cGFyYT5Ob3RlIHRoYXQgYWx0aG91Z2ggc2lnbmVkLCB0aGUgc3RlcCB2YWx1ZSBpcyBzdXBwb3NlZCB0bworYmUgYWx3YXlzIHBvc2l0aXZlLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRlZmF1bHRfdmFsdWU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGVmYXVsdCB2YWx1ZSBvZiBhCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjwvY29uc3RhbnQ+LAorPGNvbnN0YW50Pl9CT09MRUFOPC9jb25zdGFudD4gb3IgPGNvbnN0YW50Pl9NRU5VPC9jb25zdGFudD4gY29udHJvbC4KK05vdCB2YWxpZCBmb3Igb3RoZXIgdHlwZXMgb2YgY29udHJvbHMuIERyaXZlcnMgcmVzZXQgY29udHJvbHMgb25seQord2hlbiB0aGUgZHJpdmVyIGlzIGxvYWRlZCwgbm90IGxhdGVyLCBpbiBwYXJ0aWN1bGFyIG5vdCB3aGVuIHRoZQorZnVuYy1vcGVuOyBpcyBjYWxsZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbnRyb2wgZmxhZ3MsIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJjb250cm9sLWZsYWdzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIG11c3Qgc2V0Cit0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItcXVlcnltZW51Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9xdWVyeW1lbnU8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklkZW50aWZpZXMgdGhlIGNvbnRyb2wsIHNldCBieSB0aGUgYXBwbGljYXRpb24KK2Zyb20gdGhlIHJlc3BlY3RpdmUgJnY0bDItcXVlcnljdHJsOworPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkluZGV4IG9mIHRoZSBtZW51IGl0ZW0sIHN0YXJ0aW5nIGF0IHplcm8sIHNldCBieQorCSAgICB0aGUgYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgbWVudSBpdGVtLCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcuIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1jdHJsLXR5cGUiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl9jdHJsX3R5cGU8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI1IiBhbGlnbj0ibGVmdCI+CisJPGNvbHNwZWMgY29sd2lkdGg9IjMwKiIgLz4KKwk8Y29sc3BlYyBjb2x3aWR0aD0iNSoiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sd2lkdGg9IjUqIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbHdpZHRoPSI1KiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2x3aWR0aD0iNTUqIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5UeXBlPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5taW5pbXVtPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWF4aW11bTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmFueTwvZW50cnk+CisJICAgIDxlbnRyeT5hbnk8L2VudHJ5PgorCSAgICA8ZW50cnk+YW55PC9lbnRyeT4KKwkgICAgPGVudHJ5PkFuIGludGVnZXItdmFsdWVkIGNvbnRyb2wgcmFuZ2luZyBmcm9tIG1pbmltdW0gdG8KK21heGltdW0gaW5jbHVzaXZlLiBUaGUgc3RlcCB2YWx1ZSBpbmRpY2F0ZXMgdGhlIGluY3JlbWVudCBiZXR3ZWVuCit2YWx1ZXMgd2hpY2ggYXJlIGFjdHVhbGx5IGRpZmZlcmVudCBvbiB0aGUgaGFyZHdhcmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9CT09MRUFOPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBib29sZWFuLXZhbHVlZCBjb250cm9sLiBaZXJvIGNvcnJlc3BvbmRzIHRvCisiZGlzYWJsZWQiLCBhbmQgb25lIG1lYW5zICJlbmFibGVkIi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX01FTlU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+Ti0xPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBjb250cm9sIGhhcyBhIG1lbnUgb2YgTiBjaG9pY2VzLiBUaGUgbmFtZXMgb2YKK3RoZSBtZW51IGl0ZW1zIGNhbiBiZSBlbnVtZXJhdGVkIHdpdGggdGhlCis8Y29uc3RhbnQ+VklESU9DX1FVRVJZTUVOVTwvY29uc3RhbnQ+IGlvY3RsLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQlVUVE9OPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBjb250cm9sIHdoaWNoIHBlcmZvcm1zIGFuIGFjdGlvbiB3aGVuIHNldC4KK0RyaXZlcnMgbXVzdCBpZ25vcmUgdGhlIHZhbHVlIHBhc3NlZCB3aXRoCis8Y29uc3RhbnQ+VklESU9DX1NfQ1RSTDwvY29uc3RhbnQ+IGFuZCByZXR1cm4gYW4gJkVJTlZBTDsgb24gYQorPGNvbnN0YW50PlZJRElPQ19HX0NUUkw8L2NvbnN0YW50PiBhdHRlbXB0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+bi9hPC9lbnRyeT4KKwkgICAgPGVudHJ5Pm4vYTwvZW50cnk+CisJICAgIDxlbnRyeT5uL2E8L2VudHJ5PgorCSAgICA8ZW50cnk+QSA2NC1iaXQgaW50ZWdlciB2YWx1ZWQgY29udHJvbC4gTWluaW11bSwgbWF4aW11bQorYW5kIHN0ZXAgc2l6ZSBjYW5ub3QgYmUgcXVlcmllZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX1NUUklORzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PiZnZTsgMDwvZW50cnk+CisJICAgIDxlbnRyeT4mZ2U7IDE8L2VudHJ5PgorCSAgICA8ZW50cnk+JmdlOyAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHN0cmluZyBsZW5ndGhzLiBUaGUgc3RlcCBzaXplCittZWFucyB0aGF0IHRoZSBzdHJpbmcgbXVzdCBiZSAobWluaW11bSArIE4gKiBzdGVwKSBjaGFyYWN0ZXJzIGxvbmcgZm9yCitOICZnZTsgMC4gVGhlc2UgbGVuZ3RocyBkbyBub3QgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgemVybywgc28gaW4gb3JkZXIgdG8KK3Bhc3MgYSBzdHJpbmcgb2YgbGVuZ3RoIDggdG8gJlZJRElPQy1TLUVYVC1DVFJMUzsgeW91IG5lZWQgdG8gc2V0IHRoZQorPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1leHQtY29udHJvbDsgdG8gOS4gRm9yICZWSURJT0MtRy1FWFQtQ1RSTFM7IHlvdSBjYW4KK3NldCB0aGUgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byA8c3RydWN0ZmllbGQ+bWF4aW11bTwvc3RydWN0ZmllbGQ+ICsgMS4KK1doaWNoIGNoYXJhY3RlciBlbmNvZGluZyBpcyB1c2VkIHdpbGwgZGVwZW5kIG9uIHRoZSBzdHJpbmcgY29udHJvbCBpdHNlbGYgYW5kCitzaG91bGQgYmUgcGFydCBvZiB0aGUgY29udHJvbCBkb2N1bWVudGF0aW9uLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pm4vYTwvZW50cnk+CisJICAgIDxlbnRyeT5uL2E8L2VudHJ5PgorCSAgICA8ZW50cnk+bi9hPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgbm90IGEgY29udHJvbC4gV2hlbgorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiBpcyBjYWxsZWQgd2l0aCBhIGNvbnRyb2wgSUQKK2VxdWFsIHRvIGEgY29udHJvbCBjbGFzcyBjb2RlIChzZWUgPHhyZWYgbGlua2VuZD0iY3RybC1jbGFzcyIgLz4pLCB0aGUKK2lvY3RsIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgY2xhc3MgYW5kIHRoaXMgY29udHJvbCB0eXBlLgorT2xkZXIgZHJpdmVycyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUgcmV0dXJuIGFuCismRUlOVkFMOy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImNvbnRyb2wtZmxhZ3MiPgorICAgICAgPHRpdGxlPkNvbnRyb2wgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgY29udHJvbCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCBhbmQgc2hvdWxkIGJlCitpZ25vcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gQW55IGF0dGVtcHQgdG8gY2hhbmdlIHRoZSBjb250cm9sIHdpbGwKK3Jlc3VsdCBpbiBhbiAmRUlOVkFMOy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBjb250cm9sIGlzIHRlbXBvcmFyaWx5IHVuY2hhbmdlYWJsZSwgZm9yCitleGFtcGxlIGJlY2F1c2UgYW5vdGhlciBhcHBsaWNhdGlvbiB0b29rIG92ZXIgY29udHJvbCBvZiB0aGUKK3Jlc3BlY3RpdmUgcmVzb3VyY2UuIFN1Y2ggY29udHJvbHMgbWF5IGJlIGRpc3BsYXllZCBzcGVjaWFsbHkgaW4gYQordXNlciBpbnRlcmZhY2UuIEF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgY29udHJvbCBtYXkgcmVzdWx0IGluIGFuCismRUJVU1k7LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgY29udHJvbCBpcyBwZXJtYW5lbnRseSByZWFkYWJsZSBvbmx5LiBBbnkKK2F0dGVtcHQgdG8gY2hhbmdlIHRoZSBjb250cm9sIHdpbGwgcmVzdWx0IGluIGFuICZFSU5WQUw7LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfVVBEQVRFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA4PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgaGludCB0aGF0IGNoYW5naW5nIHRoaXMgY29udHJvbCBtYXkgYWZmZWN0IHRoZQordmFsdWUgb2Ygb3RoZXIgY29udHJvbHMgd2l0aGluIHRoZSBzYW1lIGNvbnRyb2wgY2xhc3MuIEFwcGxpY2F0aW9ucworc2hvdWxkIHVwZGF0ZSB0aGVpciB1c2VyIGludGVyZmFjZSBhY2NvcmRpbmdseS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgY29udHJvbCBpcyBub3QgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudAorY29uZmlndXJhdGlvbiBhbmQgc2hvdWxkIGJlIGRpc3BsYXllZCBhY2NvcmRpbmdseSBpbiBhIHVzZXIgaW50ZXJmYWNlLgorRm9yIGV4YW1wbGUgdGhlIGZsYWcgbWF5IGJlIHNldCBvbiBhIE1QRUcgYXVkaW8gbGV2ZWwgMiBiaXRyYXRlCitjb250cm9sIHdoZW4gTVBFRyBhdWRpbyBlbmNvZGluZyBsZXZlbCAxIHdhcyBzZWxlY3RlZCB3aXRoIGFub3RoZXIKK2NvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfRkxBR19TTElERVI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMjA8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBoaW50IHRoYXQgdGhpcyBjb250cm9sIGlzIGJlc3QgcmVwcmVzZW50ZWQgYXMgYQorc2xpZGVyLWxpa2UgZWxlbWVudCBpbiBhIHVzZXIgaW50ZXJmYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDA0MDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGNvbnRyb2wgaXMgcGVybWFuZW50bHkgd3JpdGFibGUgb25seS4gQW55CithdHRlbXB0IHRvIHJlYWQgdGhlIGNvbnRyb2wgd2lsbCByZXN1bHQgaW4gYW4gJkVBQ0NFUzsgZXJyb3IgY29kZS4gVGhpcworZmxhZyBpcyB0eXBpY2FsbHkgcHJlc2VudCBmb3IgcmVsYXRpdmUgY29udHJvbHMgb3IgYWN0aW9uIGNvbnRyb2xzIHdoZXJlCit3cml0aW5nIGEgdmFsdWUgd2lsbCBjYXVzZSB0aGUgZGV2aWNlIHRvIGNhcnJ5IG91dCBhIGdpdmVuIGFjdGlvbgorKCZlZzsgbW90b3IgY29udHJvbCkgYnV0IG5vIG1lYW5pbmdmdWwgdmFsdWUgY2FuIGJlIHJldHVybmVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1xdWVyeWN0cmw7IDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+CitpcyBpbnZhbGlkLiBUaGUgJnY0bDItcXVlcnltZW51OyA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBvcgorPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBQ0NFUzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJlYWQgYSB3cml0ZS1vbmx5IGNvbnRyb2wuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE3ZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlzdGQueG1sCkBAIC0wLDAgKzEsODMgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLXF1ZXJ5c3RkIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX1FVRVJZU1REPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfUVVFUllTVEQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+U2Vuc2UgdGhlIHZpZGVvIHN0YW5kYXJkIHJlY2VpdmVkIGJ5IHRoZSBjdXJyZW50CitpbnB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52NGwyX3N0ZF9pZCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorCTx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19RVUVSWVNURDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIGhhcmR3YXJlIG1heSBiZSBhYmxlIHRvIGRldGVjdCB0aGUgY3VycmVudCB2aWRlbworc3RhbmRhcmQgYXV0b21hdGljYWxseS4gVG8gZG8gc28sIGFwcGxpY2F0aW9ucyBjYWxsIDxjb25zdGFudD4KK1ZJRElPQ19RVUVSWVNURDwvY29uc3RhbnQ+IHdpdGggYSBwb2ludGVyIHRvIGEgJnY0bDItc3RkLWlkOyB0eXBlLiBUaGUKK2RyaXZlciBzdG9yZXMgaGVyZSBhIHNldCBvZiBjYW5kaWRhdGVzLCB0aGlzIGNhbiBiZSBhIHNpbmdsZSBmbGFnIG9yIGEKK3NldCBvZiBzdXBwb3J0ZWQgc3RhbmRhcmRzIGlmIGZvciBleGFtcGxlIHRoZSBoYXJkd2FyZSBjYW4gb25seQorZGlzdGluZ3Vpc2ggYmV0d2VlbiA1MCBhbmQgNjAgSHogc3lzdGVtcy4gV2hlbiBkZXRlY3Rpb24gaXMgbm90Citwb3NzaWJsZSBvciBmYWlscywgdGhlIHNldCBtdXN0IGNvbnRhaW4gYWxsIHN0YW5kYXJkcyBzdXBwb3J0ZWQgYnkgdGhlCitjdXJyZW50IHZpZGVvIGlucHV0IG9yIG91dHB1dC48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWIzODA4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKQEAgLTAsMCArMSwxNjAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLXJlcWJ1ZnMiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfUkVRQlVGUzwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX1JFUUJVRlM8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+SW5pdGlhdGUgTWVtb3J5IE1hcHBpbmcgb3IgVXNlciBQb2ludGVyIEkvTzwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1JFUUJVRlM8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgaXMgdXNlZCB0byBpbml0aWF0ZSA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkKK21hcHBlZDwvbGluaz4gb3IgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4KK0kvTy4gTWVtb3J5IG1hcHBlZCBidWZmZXJzIGFyZSBsb2NhdGVkIGluIGRldmljZSBtZW1vcnkgYW5kIG11c3QgYmUKK2FsbG9jYXRlZCB3aXRoIHRoaXMgaW9jdGwgYmVmb3JlIHRoZXkgY2FuIGJlIG1hcHBlZCBpbnRvIHRoZQorYXBwbGljYXRpb24ncyBhZGRyZXNzIHNwYWNlLiBVc2VyIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBieQorYXBwbGljYXRpb25zIHRoZW1zZWx2ZXMsIGFuZCB0aGlzIGlvY3RsIGlzIG1lcmVseSB1c2VkIHRvIHN3aXRjaCB0aGUKK2RyaXZlciBpbnRvIHVzZXIgcG9pbnRlciBJL08gbW9kZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBhbGxvY2F0ZSBkZXZpY2UgYnVmZmVycyBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aHJlZQorZmllbGRzIG9mIGEgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT4gc3RydWN0dXJlLgorVGhleSBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIHJlc3BlY3RpdmUKK3N0cmVhbSBvciBidWZmZXIgdHlwZSwgdGhlIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvCit0aGUgZGVzaXJlZCBudW1iZXIgb2YgYnVmZmVycywgYW5kIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorbXVzdCBiZSBzZXQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwKK2lzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvCithbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBidWZmZXJzIGFuZCBzdG9yZXMgdGhlIGFjdHVhbCBudW1iZXIKK2FsbG9jYXRlZCBpbiB0aGUgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIEl0IGNhbiBiZQorc21hbGxlciB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLCBldmVuIHplcm8sIHdoZW4gdGhlIGRyaXZlciBydW5zIG91dAorb2YgZnJlZSBtZW1vcnkuIEEgbGFyZ2VyIG51bWJlciBpcyBwb3NzaWJsZSB3aGVuIHRoZSBkcml2ZXIgcmVxdWlyZXMKK21vcmUgYnVmZmVycyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuPGZvb3Rub3RlPgorCTxwYXJhPkZvciBleGFtcGxlIHZpZGVvIG91dHB1dCByZXF1aXJlcyBhdCBsZWFzdCB0d28gYnVmZmVycywKK29uZSBkaXNwbGF5ZWQgYW5kIG9uZSBmaWxsZWQgYnkgdGhlIGFwcGxpY2F0aW9uLjwvcGFyYT4KKwk8L2Zvb3Rub3RlPiBXaGVuIG1lbW9yeSBtYXBwaW5nIEkvTyBpcyBub3Qgc3VwcG9ydGVkIHRoZSBpb2N0bAorcmV0dXJucyBhbiAmRUlOVkFMOy48L3BhcmE+CisKKyAgICA8cGFyYT5BcHBsaWNhdGlvbnMgY2FuIGNhbGwgPGNvbnN0YW50PlZJRElPQ19SRVFCVUZTPC9jb25zdGFudD4KK2FnYWluIHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMsIGhvd2V2ZXIgdGhpcyBjYW5ub3Qgc3VjY2VlZAord2hlbiBhbnkgYnVmZmVycyBhcmUgc3RpbGwgbWFwcGVkLiBBIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+Cit2YWx1ZSBvZiB6ZXJvIGZyZWVzIGFsbCBidWZmZXJzLCBhZnRlciBhYm9ydGluZyBvciBmaW5pc2hpbmcgYW55IERNQQoraW4gcHJvZ3Jlc3MsIGFuIGltcGxpY2l0ICZWSURJT0MtU1RSRUFNT0ZGOy4gPCEtLSBtaHM6IEkgc2VlIG5vCityZWFzb24gd2h5IG11bm1hcCgpcGluZyBvbmUgb3IgZXZlbiBhbGwgYnVmZmVycyBtdXN0IGltcGx5CitzdHJlYW1vZmYuLS0+PC9wYXJhPgorCisgICAgPHBhcmE+VG8gbmVnb3RpYXRlIHVzZXIgcG9pbnRlciBJL08sIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIG9ubHkKK3RoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCBzZXQKKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiB0bworPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwgaXMgY2FsbGVkCit3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHByZXBhcmVzIGZvciB1c2VyIHBvaW50ZXIKK0kvTywgd2hlbiB0aGlzIEkvTyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCB0aGUgaW9jdGwgcmV0dXJucyBhbgorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIG51bWJlciBvZiBidWZmZXJzIHJlcXVlc3RlZCBvciBncmFudGVkLiBUaGlzCitmaWVsZCBpcyBvbmx5IHVzZWQgd2hlbiA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gaXMgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UeXBlIG9mIHRoZSBzdHJlYW0gb3IgYnVmZmVycywgdGhpcyBpcyB0aGUgc2FtZQorYXMgdGhlICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZC4gU2VlIDx4cmVmCisJCWxpbmtlbmQ9InY0bDItYnVmLXR5cGUiIC8+IGZvciB2YWxpZCB2YWx1ZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLW1lbW9yeTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkFwcGxpY2F0aW9ucyBzZXQgdGhpcyBmaWVsZCB0bworPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQKK2hpZ2hlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgb3BlbnMgYW5kIEkvTyBpcyBhbHJlYWR5CitpbiBwcm9ncmVzcywgb3IgcmVhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgd2FzIGF0dGVtcHRlZCBhbHRob3VnaCBvbmUgb3IKK21vcmUgYXJlIHN0aWxsIG1hcHBlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYnVmZmVyIHR5cGUgKDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQpIG9yIHRoZQorcmVxdWVzdGVkIEkvTyBtZXRob2QgKDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPikgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXMtaHctZnJlcS1zZWVrLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXMtaHctZnJlcS1zZWVrLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sCkBAIC0wLDAgKzEsMTI5IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1zLWh3LWZyZXEtc2VlayI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19TX0hXX0ZSRVFfU0VFSzwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX1NfSFdfRlJFUV9TRUVLPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlBlcmZvcm0gYSBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlazwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfU19IV19GUkVRX1NFRUs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlN0YXJ0IGEgaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsgZnJvbSB0aGUgY3VycmVudCBmcmVxdWVuY3kuCitUbyBkbyB0aGlzIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIDxzdHJ1Y3RmaWVsZD5zZWVrX3Vwd2FyZDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPndyYXBfYXJvdW5kPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLCBhbmQgemVybyBvdXQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBvZiBhICZ2NGwyLWh3LWZyZXEtc2VlazsgYW5kCitjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX1NfSFdfRlJFUV9TRUVLPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIKK3RvIHRoaXMgc3RydWN0dXJlLjwvcGFyYT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgaXMgc3VwcG9ydGVkIGlmIHRoZSA8Y29uc3RhbnQ+VjRMMl9DQVBfSFdfRlJFUV9TRUVLPC9jb25zdGFudD4gY2FwYWJpbGl0eSBpcyBzZXQuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWh3LWZyZXEtc2VlayI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfaHdfZnJlcV9zZWVrPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgdHVuZXIgaW5kZXggbnVtYmVyLiBUaGlzIGlzIHRoZQorc2FtZSB2YWx1ZSBhcyBpbiB0aGUgJnY0bDItaW5wdXQ7IDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+CitmaWVsZCBhbmQgdGhlICZ2NGwyLXR1bmVyOyA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItdHVuZXItdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgdHVuZXIgdHlwZS4gVGhpcyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyBpbiB0aGUKKyZ2NGwyLXR1bmVyOyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2Vla191cHdhcmQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5JZiBub24temVybywgc2VlayB1cHdhcmQgZnJvbSB0aGUgY3VycmVudCBmcmVxdWVuY3ksIGVsc2Ugc2VlayBkb3dud2FyZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndyYXBfYXJvdW5kPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWYgbm9uLXplcm8sIHdyYXAgYXJvdW5kIHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgZnJlcXVlbmN5IHJhbmdlLCBlbHNlIHN0b3Agc2Vla2luZy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bOF08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIGFuZAorCSAgICBhcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+IGluZGV4IGlzIG91dCBvZgorYm91bmRzIG9yIHRoZSB2YWx1ZSBpbiB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcword3JvbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQUdBSU48L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGlvY3RsIHRpbWVkLW91dC4gVHJ5IGFnYWluLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyYmZmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN0cmVhbW9uLnhtbApAQCAtMCwwICsxLDEwNiBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2Mtc3RyZWFtb24iPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfU1RSRUFNT04sIFZJRElPQ19TVFJFQU1PRkY8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19TVFJFQU1PTjwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU1RSRUFNT0ZGPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlN0YXJ0IG9yIHN0b3Agc3RyZWFtaW5nIEkvTzwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBpbnQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19TVFJFQU1PTiwgVklESU9DX1NUUkVBTU9GRjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfU1RSRUFNT048L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT0ZGPC9jb25zdGFudD4gaW9jdGwgc3RhcnQgYW5kIHN0b3AgdGhlIGNhcHR1cmUKK29yIG91dHB1dCBwcm9jZXNzIGR1cmluZyBzdHJlYW1pbmcgKDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeQorbWFwcGluZzwvbGluaz4gb3IgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy48L3BhcmE+CisKKyAgICA8cGFyYT5TcGVjaWZpY2FsbHkgdGhlIGNhcHR1cmUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgYW5kIG5vIGlucHV0CitidWZmZXJzIGFyZSBmaWxsZWQgKGlmIHRoZXJlIGFyZSBhbnkgZW1wdHkgYnVmZmVycyBpbiB0aGUgaW5jb21pbmcKK3F1ZXVlKSB1bnRpbCA8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gaGFzIGJlZW4gY2FsbGVkLgorQWNjb3JkaW5nbHkgdGhlIG91dHB1dCBoYXJkd2FyZSBpcyBkaXNhYmxlZCwgbm8gdmlkZW8gc2lnbmFsIGlzCitwcm9kdWNlZCB1bnRpbCA8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gaGFzIGJlZW4gY2FsbGVkLgorVGhlIGlvY3RsIHdpbGwgc3VjY2VlZCBvbmx5IHdoZW4gYXQgbGVhc3Qgb25lIG91dHB1dCBidWZmZXIgaXMgaW4gdGhlCitpbmNvbWluZyBxdWV1ZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ19TVFJFQU1PRkY8L2NvbnN0YW50PiBpb2N0bCwgYXBhcnQgb2YKK2Fib3J0aW5nIG9yIGZpbmlzaGluZyBhbnkgRE1BIGluIHByb2dyZXNzLCB1bmxvY2tzIGFueSB1c2VyIHBvaW50ZXIKK2J1ZmZlcnMgbG9ja2VkIGluIHBoeXNpY2FsIG1lbW9yeSwgYW5kIGl0IHJlbW92ZXMgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUKK2luY29taW5nIGFuZCBvdXRnb2luZyBxdWV1ZXMuIFRoYXQgbWVhbnMgYWxsIGltYWdlcyBjYXB0dXJlZCBidXQgbm90CitkZXF1ZXVlZCB5ZXQgd2lsbCBiZSBsb3N0LCBsaWtld2lzZSBhbGwgaW1hZ2VzIGVucXVldWVkIGZvciBvdXRwdXQgYnV0Citub3QgdHJhbnNtaXR0ZWQgeWV0LiBJL08gcmV0dXJucyB0byB0aGUgc2FtZSBzdGF0ZSBhcyBhZnRlciBjYWxsaW5nCismVklESU9DLVJFUUJVRlM7IGFuZCBjYW4gYmUgcmVzdGFydGVkIGFjY29yZGluZ2x5LjwvcGFyYT4KKworICAgIDxwYXJhPkJvdGggaW9jdGxzIHRha2UgYSBwb2ludGVyIHRvIGFuIGludGVnZXIsIHRoZSBkZXNpcmVkIGJ1ZmZlciBvcgorc3RyZWFtIHR5cGUuIFRoaXMgaXMgdGhlIHNhbWUgYXMgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LjwvcGFyYT4KKworICAgIDxwYXJhPk5vdGUgYXBwbGljYXRpb25zIGNhbiBiZSBwcmVlbXB0ZWQgZm9yIHVua25vd24gcGVyaW9kcyByaWdodAorYmVmb3JlIG9yIGFmdGVyIHRoZSA8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT0ZGPC9jb25zdGFudD4gY2FsbHMsIHRoZXJlIGlzIG5vIG5vdGlvbiBvZgorc3RhcnRpbmcgb3Igc3RvcHBpbmcgIm5vdyIuIEJ1ZmZlciB0aW1lc3RhbXBzIGNhbiBiZSB1c2VkIHRvCitzeW5jaHJvbml6ZSB3aXRoIG90aGVyIGV2ZW50cy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5TdHJlYW1pbmcgSS9PIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBidWZmZXIKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgbm90IHN1cHBvcnRlZCwgb3Igbm8gYnVmZmVycyBoYXZlCitiZWVuIGFsbG9jYXRlZCAobWVtb3J5IG1hcHBpbmcpIG9yIGVucXVldWVkIChvdXRwdXQpIHlldC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9JbnRlbC1JT01NVS50eHQgYi9Eb2N1bWVudGF0aW9uL0ludGVsLUlPTU1VLnR4dAppbmRleCAyMWJjNDE2Li5jZjk0MzFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0ludGVsLUlPTU1VLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0ludGVsLUlPTU1VLnR4dApAQCAtNTYsMTEgKzU2LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLQogSWYgeW91IGVuY291bnRlciBpc3N1ZXMgd2l0aCBncmFwaGljcyBkZXZpY2VzLCB5b3UgY2FuIHRyeSBhZGRpbmcKIG9wdGlvbiBpbnRlbF9pb21tdT1pZ2Z4X29mZiB0byB0dXJuIG9mZiB0aGUgaW50ZWdyYXRlZCBncmFwaGljcyBlbmdpbmUuCi0KLUlmIGl0IGhhcHBlbnMgdG8gYmUgYSBQQ0kgZGV2aWNlIGluY2x1ZGVkIGluIHRoZSBJTkNMVURFX0FMTCBFbmdpbmUsCi10aGVuIHRyeSBlbmFibGluZyBDT05GSUdfRE1BUl9HRlhfV0EgdG8gc2V0dXAgYSAxLTEgbWFwLiBXZSBoZWFyCi1ncmFwaGljcyBkcml2ZXJzIG1heSBiZSBpbiBwcm9jZXNzIG9mIHVzaW5nIERNQSBhcGkncyBpbiB0aGUgbmVhcgotZnV0dXJlIGFuZCBhdCB0aGF0IHRpbWUgdGhpcyBvcHRpb24gY2FuIGJlIHlhbmtlZCBvdXQuCitJZiB0aGlzIGZpeGVzIGFueXRoaW5nLCBwbGVhc2UgZW5zdXJlIHlvdSBmaWxlIGEgYnVnIHJlcG9ydGluZyB0aGUgcHJvYmxlbS4KIAogU29tZSBleGNlcHRpb25zIHRvIElPVkEKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCA1YzU1NWE4Yi4uYjdmOWQzYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0xODMsNyArMTgzLDcgQEAKIGEgbWFuLXBhZ2VzIHBhdGNoLCBvciBhdCBsZWFzdCBhIG5vdGlmaWNhdGlvbiBvZiB0aGUgY2hhbmdlLAogc28gdGhhdCBzb21lIGluZm9ybWF0aW9uIG1ha2VzIGl0cyB3YXkgaW50byB0aGUgbWFudWFsIHBhZ2VzLgogCi1FdmVuIGlmIHRoZSBtYWludGFpbmVyIGRpZCBub3QgcmVzcG9uZCBpbiBzdGVwICM0LCBtYWtlIHN1cmUgdG8gQUxXQVlTCitFdmVuIGlmIHRoZSBtYWludGFpbmVyIGRpZCBub3QgcmVzcG9uZCBpbiBzdGVwICM1LCBtYWtlIHN1cmUgdG8gQUxXQVlTCiBjb3B5IHRoZSBtYWludGFpbmVyIHdoZW4geW91IGNoYW5nZSB0aGVpciBjb2RlLgogCiBGb3Igc21hbGwgcGF0Y2hlcyB5b3UgbWF5IHdhbnQgdG8gQ0MgdGhlIFRyaXZpYWwgUGF0Y2ggTW9ua2V5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMKaW5kZXggYWE3M2U3Mi4uNmUyNWMyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2dldGRlbGF5cy5jCisrKyBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9nZXRkZWxheXMuYwpAQCAtMTE2LDcgKzExNiw3IEBACiB9CiAKIAotaW50IHNlbmRfY21kKGludCBzZCwgX191MTYgbmxtc2dfdHlwZSwgX191MzIgbmxtc2dfcGlkLAorc3RhdGljIGludCBzZW5kX2NtZChpbnQgc2QsIF9fdTE2IG5sbXNnX3R5cGUsIF9fdTMyIG5sbXNnX3BpZCwKIAkgICAgIF9fdTggZ2VubF9jbWQsIF9fdTE2IG5sYV90eXBlLAogCSAgICAgdm9pZCAqbmxhX2RhdGEsIGludCBubGFfbGVuKQogewpAQCAtMTYwLDcgKzE2MCw3IEBACiAgKiBQcm9iZSB0aGUgY29udHJvbGxlciBpbiBnZW5ldGxpbmsgdG8gZmluZCB0aGUgZmFtaWx5IGlkCiAgKiBmb3IgdGhlIFRBU0tTVEFUUyBmYW1pbHkKICAqLwotaW50IGdldF9mYW1pbHlfaWQoaW50IHNkKQorc3RhdGljIGludCBnZXRfZmFtaWx5X2lkKGludCBzZCkKIHsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3Qgbmxtc2doZHIgbjsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCXJldHVybiBpZDsKIH0KIAotdm9pZCBwcmludF9kZWxheWFjY3Qoc3RydWN0IHRhc2tzdGF0cyAqdCkKK3N0YXRpYyB2b2lkIHByaW50X2RlbGF5YWNjdChzdHJ1Y3QgdGFza3N0YXRzICp0KQogewogCXByaW50ZigiXG5cbkNQVSAgICUxNXMlMTVzJTE1cyUxNXNcbiIKIAkgICAgICAgIiAgICAgICUxNWxsdSUxNWxsdSUxNWxsdSUxNWxsdVxuIgpAQCAtMjE2LDcgKzIxNiw3IEBACiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdC0+ZnJlZXBhZ2VzX2RlbGF5X3RvdGFsKTsKIH0KIAotdm9pZCB0YXNrX2NvbnRleHRfc3dpdGNoX2NvdW50cyhzdHJ1Y3QgdGFza3N0YXRzICp0KQorc3RhdGljIHZvaWQgdGFza19jb250ZXh0X3N3aXRjaF9jb3VudHMoc3RydWN0IHRhc2tzdGF0cyAqdCkKIHsKIAlwcmludGYoIlxuXG5UYXNrICAgJTE1cyUxNXNcbiIKIAkgICAgICAgIiAgICAgICAlMTVsbHUlMTVsbHVcbiIsCkBAIC0yMjQsNyArMjI0LDcgQEAKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl0LT5udmNzdywgKHVuc2lnbmVkIGxvbmcgbG9uZyl0LT5uaXZjc3cpOwogfQogCi12b2lkIHByaW50X2Nncm91cHN0YXRzKHN0cnVjdCBjZ3JvdXBzdGF0cyAqYykKK3N0YXRpYyB2b2lkIHByaW50X2Nncm91cHN0YXRzKHN0cnVjdCBjZ3JvdXBzdGF0cyAqYykKIHsKIAlwcmludGYoInNsZWVwaW5nICVsbHUsIGJsb2NrZWQgJWxsdSwgcnVubmluZyAlbGx1LCBzdG9wcGVkICVsbHUsICIKIAkJInVuaW50ZXJydXB0aWJsZSAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWMtPm5yX3NsZWVwaW5nLApAQCAtMjM1LDcgKzIzNSw3IEBACiB9CiAKIAotdm9pZCBwcmludF9pb2FjY3Qoc3RydWN0IHRhc2tzdGF0cyAqdCkKK3N0YXRpYyB2b2lkIHByaW50X2lvYWNjdChzdHJ1Y3QgdGFza3N0YXRzICp0KQogewogCXByaW50ZigiJXM6IHJlYWQ9JWxsdSwgd3JpdGU9JWxsdSwgY2FuY2VsbGVkX3dyaXRlPSVsbHVcbiIsCiAJCXQtPmFjX2NvbW0sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi1leGFtcGxlLmMgYi9Eb2N1bWVudGF0aW9uL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi1leGFtcGxlLmMKaW5kZXggMmNhZWVhNS4uMWQyYzAxMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hdXhkaXNwbGF5L2NmYWcxMjg2NGItZXhhbXBsZS5jCisrKyBiL0RvY3VtZW50YXRpb24vYXV4ZGlzcGxheS9jZmFnMTI4NjRiLWV4YW1wbGUuYwpAQCAtNjIsNyArNjIsNyBAQAogICogVW5hYmxlIHRvIG9wZW46IHJldHVybiA9IC0xCiAgKiBVbmFibGUgdG8gbW1hcDogcmV0dXJuID0gLTIKICAqLwotaW50IGNmYWcxMjg2NGJfaW5pdChjaGFyICpwYXRoKQorc3RhdGljIGludCBjZmFnMTI4NjRiX2luaXQoY2hhciAqcGF0aCkKIHsKIAljZmFnMTI4NjRiX2ZkID0gb3BlbihwYXRoLCBPX1JEV1IpOwogCWlmIChjZmFnMTI4NjRiX2ZkID09IC0xKQpAQCAtODEsNyArODEsNyBAQAogLyoKICAqIGV4aXQgYSBjZmFnMTI4NjRiIGZyYW1lYnVmZmVyIGRldmljZQogICovCi12b2lkIGNmYWcxMjg2NGJfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9leGl0KHZvaWQpCiB7CiAJbXVubWFwKGNmYWcxMjg2NGJfbWVtLCBDRkFHMTI4NjRCX1NJWkUpOwogCWNsb3NlKGNmYWcxMjg2NGJfZmQpOwpAQCAtOTAsNyArOTAsNyBAQAogLyoKICAqIHNldCAoeCwgeSkgcGl4ZWwKICAqLwotdm9pZCBjZmFnMTI4NjRiX3NldCh1bnNpZ25lZCBjaGFyIHgsIHVuc2lnbmVkIGNoYXIgeSkKK3N0YXRpYyB2b2lkIGNmYWcxMjg2NGJfc2V0KHVuc2lnbmVkIGNoYXIgeCwgdW5zaWduZWQgY2hhciB5KQogewogCWlmIChDRkFHMTI4NjRCX0NIRUNLKHgsIHkpKQogCQljZmFnMTI4NjRiX2J1ZmZlcltDRkFHMTI4NjRCX0FERFJFU1MoeCwgeSldIHw9CkBAIC0xMDAsNyArMTAwLDcgQEAKIC8qCiAgKiB1bnNldCAoeCwgeSkgcGl4ZWwKICAqLwotdm9pZCBjZmFnMTI4NjRiX3Vuc2V0KHVuc2lnbmVkIGNoYXIgeCwgdW5zaWduZWQgY2hhciB5KQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl91bnNldCh1bnNpZ25lZCBjaGFyIHgsIHVuc2lnbmVkIGNoYXIgeSkKIHsKIAlpZiAoQ0ZBRzEyODY0Ql9DSEVDSyh4LCB5KSkKIAkJY2ZhZzEyODY0Yl9idWZmZXJbQ0ZBRzEyODY0Ql9BRERSRVNTKHgsIHkpXSAmPQpAQCAtMTEzLDcgKzExMyw3IEBACiAgKiBQaXhlbCBvZmY6IHJldHVybiA9IDAKICAqIFBpeGVsIG9uOiAgcmV0dXJuID0gMQogICovCi11bnNpZ25lZCBjaGFyIGNmYWcxMjg2NGJfaXNzZXQodW5zaWduZWQgY2hhciB4LCB1bnNpZ25lZCBjaGFyIHkpCitzdGF0aWMgdW5zaWduZWQgY2hhciBjZmFnMTI4NjRiX2lzc2V0KHVuc2lnbmVkIGNoYXIgeCwgdW5zaWduZWQgY2hhciB5KQogewogCWlmIChDRkFHMTI4NjRCX0NIRUNLKHgsIHkpKQogCQlpZiAoY2ZhZzEyODY0Yl9idWZmZXJbQ0ZBRzEyODY0Ql9BRERSRVNTKHgsIHkpXSAmCkBAIC0xMjYsNyArMTI2LDcgQEAKIC8qCiAgKiBub3QgKHgsIHkpIHBpeGVsCiAgKi8KLXZvaWQgY2ZhZzEyODY0Yl9ub3QodW5zaWduZWQgY2hhciB4LCB1bnNpZ25lZCBjaGFyIHkpCitzdGF0aWMgdm9pZCBjZmFnMTI4NjRiX25vdCh1bnNpZ25lZCBjaGFyIHgsIHVuc2lnbmVkIGNoYXIgeSkKIHsKIAlpZiAoY2ZhZzEyODY0Yl9pc3NldCh4LCB5KSkKIAkJY2ZhZzEyODY0Yl91bnNldCh4LCB5KTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogLyoKICAqIGZpbGwgKHNldCBhbGwgcGl4ZWxzKQogICovCi12b2lkIGNmYWcxMjg2NGJfZmlsbCh2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9maWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgc2hvcnQgaTsKIApAQCAtMTQ4LDcgKzE0OCw3IEBACiAvKgogICogY2xlYXIgKHVuc2V0IGFsbCBwaXhlbHMpCiAgKi8KLXZvaWQgY2ZhZzEyODY0Yl9jbGVhcih2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9jbGVhcih2b2lkKQogewogCXVuc2lnbmVkIHNob3J0IGk7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogICogUGl4ZWwgb2ZmOiBzcmNbaV0gPSAwCiAgKiBQaXhlbCBvbjogIHNyY1tpXSA+IDAKICAqLwotdm9pZCBjZmFnMTI4NjRiX2Zvcm1hdCh1bnNpZ25lZCBjaGFyICogbWF0cml4KQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9mb3JtYXQodW5zaWduZWQgY2hhciAqIG1hdHJpeCkKIHsKIAl1bnNpZ25lZCBjaGFyIGksIGosIG47CiAKQEAgLTE4Miw3ICsxODIsNyBAQAogLyoKICAqIGJsaXQgYnVmZmVyIHRvIGxjZAogICovCi12b2lkIGNmYWcxMjg2NGJfYmxpdCh2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9ibGl0KHZvaWQpCiB7CiAJbWVtY3B5KGNmYWcxMjg2NGJfbWVtLCBjZmFnMTI4NjRiX2J1ZmZlciwgQ0ZBRzEyODY0Ql9TSVpFKTsKIH0KQEAgLTE5OCw3ICsxOTgsNyBAQAogCiAjZGVmaW5lIEVYQU1QTEVTCTYKIAotdm9pZCBleGFtcGxlKHVuc2lnbmVkIGNoYXIgbikKK3N0YXRpYyB2b2lkIGV4YW1wbGUodW5zaWduZWQgY2hhciBuKQogewogCXVuc2lnbmVkIHNob3J0IGksIGo7CiAJdW5zaWduZWQgY2hhciBtYXRyaXhbQ0ZBRzEyODY0Ql9XSURUSCAqIENGQUcxMjg2NEJfSEVJR0hUXTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCmluZGV4IDNkMWIwYWIuLjE0YjdiNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQpAQCAtMjUsNyArMjUsOCBAQAogCQkidGRhMTAwNDZsaWZldmlldyIsICJhdjcxMTAiLCAiZGVjMjAwMHQiLCAiZGVjMjU0MHQiLAogCQkiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwgIm54dDIwMDQiLAogCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIsICJibHVlYmlyZCIsCi0JCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIsICJtcGM3MTgiICk7CisJCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIsICJtcGM3MTgiLAorCQkiYWY5MDE1Iik7CiAKICMgQ2hlY2sgYXJncwogc3ludGF4KCkgaWYgKHNjYWxhcihAQVJHVikgIT0gMSk7CkBAIC01MTQsNiArNTE1LDQwIEBACiAJJG91dGZpbGU7CiB9CiAKK3N1YiBhZjkwMTUgeworCW15ICRzb3VyY2VmaWxlID0gImRvd25sb2FkLmFzaHg/ZmlsZT01NyI7CisJbXkgJHVybCA9ICJodHRwOi8vd3d3Lml0ZS5jb20udHcvRU4vU2VydmljZXMvJHNvdXJjZWZpbGUiOworCW15ICRoYXNoID0gImZmNWIwOTZlZDQ3YzA4MDg3MGVhY2RhYjJkZTMzYWQ2IjsKKwlteSAkb3V0ZmlsZSA9ICJkdmItdXNiLWFmOTAxNS5mdyI7CisJbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKwlteSAkZndvZmZzZXQgPSAweDIyNzA4OworCW15ICRmd2xlbmd0aCA9IDE4MjI1OworCW15ICgkY2h1bmtsZW5ndGgsICRidWYsICRyY291bnQpOworCisJY2hlY2tzdGFuZGFyZCgpOworCisJd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworCXVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKwl2ZXJpZnkoIiR0bXBkaXIvRHJpdmVyL0ZpbGVzL0FGMTVCREEuc3lzIiwgJGhhc2gpOworCisJb3BlbiBJTkZJTEUsICc8JywgIiR0bXBkaXIvRHJpdmVyL0ZpbGVzL0FGMTVCREEuc3lzIjsKKwlvcGVuIE9VVEZJTEUsICc+JywgJG91dGZpbGU7CisKKwlzeXNzZWVrKElORklMRSwgJGZ3b2Zmc2V0LCBTRUVLX1NFVCk7CisJd2hpbGUoJGZ3bGVuZ3RoID4gMCkgeworCQkkY2h1bmtsZW5ndGggPSA1NTsKKwkJJGNodW5rbGVuZ3RoID0gJGZ3bGVuZ3RoIGlmICgkY2h1bmtsZW5ndGggPiAkZndsZW5ndGgpOworCQkkcmNvdW50ID0gc3lzcmVhZChJTkZJTEUsICRidWYsICRjaHVua2xlbmd0aCk7CisJCWRpZSAiUmFuIG91dCBvZiBkYXRhXG4iIGlmICgkcmNvdW50ICE9ICRjaHVua2xlbmd0aCk7CisJCXN5c3dyaXRlKE9VVEZJTEUsICRidWYpOworCQlzeXNyZWFkKElORklMRSwgJGJ1ZiwgOCk7CisJCSRmd2xlbmd0aCAtPSAkcmNvdW50ICsgODsKKwl9CisKKwljbG9zZSBPVVRGSUxFOworCWNsb3NlIElORklMRTsKK30KKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVXRpbGl0aWVzCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL3RlY2huaXNhdC50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi90ZWNobmlzYXQudHh0CmluZGV4IDNmNDM1ZmYuLmYwY2M0ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL3RlY2huaXNhdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvdGVjaG5pc2F0LnR4dApAQCAtNCw5ICs0LDEyIEBACiAxKSBGaW5kIG91dCB3aGF0IGRldmljZSB5b3UgaGF2ZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorSW1wb3J0YW50IE5vdGljZTogVGhlIGRyaXZlciBkb2VzIE5PVCBzdXBwb3J0IFRlY2huaXNhdCBVU0IgMiBkZXZpY2VzIQorCiBGaXJzdCBzdGFydCB5b3VyIGxpbnV4IGJveCB3aXRoIGEgc2hpcHBlZCBrZXJuZWw6CiBsc3BjaSAtdnZ2IGZvciBhIFBDSSBkZXZpY2UgKGxzdXNiIC12dnYgZm9yIGFuIFVTQiBkZXZpY2UpIHdpbGwgc2hvdyB5b3UgZm9yIGV4YW1wbGU6Ci0wMjowYi4wIE5ldHdvcmsgY29udHJvbGxlcjogVGVjaHNhbiBFbGVjdHJvbmljcyBDbyBMdGQgQjJDMiBGbGV4Q29wSUkgRFZCIGNoaXAgLyBUZWNobmlzYXQgU2t5U3RhcjIgRFZCIGNhcmQgKHJldiAwMikKKzAyOjBiLjAgTmV0d29yayBjb250cm9sbGVyOiBUZWNoc2FuIEVsZWN0cm9uaWNzIENvIEx0ZCBCMkMyIEZsZXhDb3BJSSBEVkIgY2hpcCAvCisgVGVjaG5pc2F0IFNreVN0YXIyIERWQiBjYXJkIChyZXYgMDIpCiAKIGRtZXNnIHwgZ3JlcCBmcm9udGVuZCBtYXkgc2hvdyB5b3UgZm9yIGV4YW1wbGU6CiBEVkI6IHJlZ2lzdGVyaW5nIGZyb250ZW5kIDAgKENvbmV4YW50IENYMjQxMjMvQ1gyNDEwOSkuLi4KQEAgLTE0LDYyICsxNyw2MiBAQAogMikgS2VybmVsIGNvbXBpbGF0aW9uOgogPT09PT09PT09PT09PT09PT09PT09PQogCi1JZiB0aGUgVGVjaG5pc2F0IGlzIHRoZSBvbmx5IFRWIGRldmljZSBpbiB5b3VyIGJveCBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5IG1vZHVsZXMgYW5kIGNoZWNrIHRoaXMgb25lOgotIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBhbmFsb2cgYW5kIGh5YnJpZCB0dW5lciBtb2R1bGVzIHRvIGJ1aWxkIgotSW4gdGhpcyBkaXJlY3RvcnkgdW5jaGVjayBldmVyeSBkcml2ZXIgd2hpY2ggaXMgYWN0aXZhdGVkIHRoZXJlIChleGNlcHQgIlNpbXBsZSB0dW5lciBzdXBwb3J0IiBmb3IgY2FzZSA5IG9ubHkpLgorSWYgdGhlIEZsZXhjb3AgLyBUZWNobmlzYXQgaXMgdGhlIG9ubHkgRFZCIC8gVFYgLyBSYWRpbyBkZXZpY2UgaW4geW91ciBib3gKKyBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5IG1vZHVsZXMgYW5kIGNoZWNrIHRoaXMgb25lOgorIk11bHRpbWVkaWEgc3VwcG9ydCIgPT4gIkN1c3RvbWlzZSBhbmFsb2cgYW5kIGh5YnJpZCB0dW5lciBtb2R1bGVzIHRvIGJ1aWxkIgorSW4gdGhpcyBkaXJlY3RvcnkgdW5jaGVjayBldmVyeSBkcml2ZXIgd2hpY2ggaXMgYWN0aXZhdGVkIHRoZXJlCisgKGV4Y2VwdCAiU2ltcGxlIHR1bmVyIHN1cHBvcnQiIGZvciBBVFNDIDNyZCBnZW5lcmF0aW9uIG9ubHkgLT4gc2VlIGNhc2UgOSBwbGVhc2UpLgogCiBUaGVuIHBsZWFzZSBhY3RpdmF0ZToKIDJhKSBNYWluIG1vZHVsZSBwYXJ0OgorIk11bHRpbWVkaWEgc3VwcG9ydCIgPT4gIkRWQi9BVFNDIGFkYXB0ZXJzIgorID0+ICJUZWNobmlzYXQvQjJDMiBGbGV4Y29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiCiAKLWEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIKLWIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIiBpbiBjYXNlIG9mIGEgUENJIGNhcmQKLU9SCi1jLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiRFZCL0FUU0MgYWRhcHRlcnMiID0+ICJUZWNobmlzYXQvQjJDMiBGbGV4Y29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiID0+ICJUZWNobmlzYXQvQjJDMiBBaXIvU2t5L0NhYmxlMlBDIFVTQiIgaW4gY2FzZSBvZiBhbiBVU0IgMS4xIGFkYXB0ZXIKLWQuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIkVuYWJsZSBkZWJ1ZyBmb3IgdGhlIEIyQzIgRmxleENvcCBkcml2ZXJzIgotTm90aWNlOiBkLikgaXMgaGVscGZ1bCBmb3IgdHJvdWJsZXNob290aW5nCithLikgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIiAoUENJIGNhcmQpIG9yCitiLikgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgVVNCIiAoVVNCIDEuMSBhZGFwdGVyKQorIGFuZCBmb3IgdHJvdWJsZXNob290aW5nIHB1cnBvc2VzOgorYy4pID0+ICJFbmFibGUgZGVidWcgZm9yIHRoZSBCMkMyIEZsZXhDb3AgZHJpdmVycyIKIAotMmIpIEZyb250ZW5kIG1vZHVsZSBwYXJ0OgorMmIpIEZyb250ZW5kIC8gVHVuZXIgLyBEZW1vZHVsYXRvciBtb2R1bGUgcGFydDoKKyJNdWx0aW1lZGlhIHN1cHBvcnQiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIKKyA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+CiAKIDEuKSBTa3lTdGFyIERWQi1TIFJldmlzaW9uIDIuMzoKLWEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKLWIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIlphcmxpbmsgVlAzMTAvTVQzMTIvWkwxMDMxMyBiYXNlZCIKK2EuKSA9PiAiWmFybGluayBWUDMxMC9NVDMxMi9aTDEwMzEzIGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiAyLikgU2t5U3RhciBEVkItUyBSZXZpc2lvbiAyLjY6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTVCBTVFYwMjk5IGJhc2VkIgorYS4pID0+ICJTVCBTVFYwMjk5IGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiAzLikgU2t5U3RhciBEVkItUyBSZXZpc2lvbiAyLjc6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCi1jLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJJbnRlZ3JhbnQgSVREMTAwMCBaZXJvIElGIHR1bmVyIGZvciBEVkItUy9EU1MiCi1kLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJJU0w2NDIxIFNFQyBjb250cm9sbGVyIgorYS4pID0+ICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCitiLikgPT4gIkludGVncmFudCBJVEQxMDAwIFplcm8gSUYgdHVuZXIgZm9yIERWQi1TL0RTUyIKK2MuKSA9PiAiSVNMNjQyMSBTRUMgY29udHJvbGxlciIKIAogNC4pIFNreVN0YXIgRFZCLVMgUmV2aXNpb24gMi44OgotYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgotYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ29uZXhhbnQgQ1gyNDExMy9DWDI0MTI4IHR1bmVyIGZvciBEVkItUy9EU1MiCi1jLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDb25leGFudCBDWDI0MTIzIGJhc2VkIgotZC4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiSVNMNjQyMSBTRUMgY29udHJvbGxlciIKK2EuKSA9PiAiQ29uZXhhbnQgQ1gyNDEyMyBiYXNlZCIKK2IuKSA9PiAiQ29uZXhhbnQgQ1gyNDExMy9DWDI0MTI4IHR1bmVyIGZvciBEVkItUy9EU1MiCitjLikgPT4gIklTTDY0MjEgU0VDIGNvbnRyb2xsZXIiCiAKIDUuKSBBaXJTdGFyIERWQi1UIGNhcmQ6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJaYXJsaW5rIE1UMzUyIGJhc2VkIgorYS4pID0+ICJaYXJsaW5rIE1UMzUyIGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiA2LikgQ2FibGVTdGFyIERWQi1DIGNhcmQ6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTVCBTVFYwMjk3IGJhc2VkIgorYS4pID0+ICJTVCBTVFYwMjk3IGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiA3LikgQWlyU3RhciBBVFNDIGNhcmQgMXN0IGdlbmVyYXRpb246Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJCcm9hZGNvbSBCQ00zNTEwIgorYS4pID0+ICJCcm9hZGNvbSBCQ00zNTEwIgogCiA4LikgQWlyU3RhciBBVFNDIGNhcmQgMm5kIGdlbmVyYXRpb246Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJOeHRXYXZlIENvbW11bmljYXRpb25zIE5YVDIwMDIvTlhUMjAwNCBiYXNlZCIKLWMuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkdlbmVyaWMgSTJDIFBMTCBiYXNlZCB0dW5lcnMiCithLikgPT4gIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUMjAwMi9OWFQyMDA0IGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiA5LikgQWlyU3RhciBBVFNDIGNhcmQgM3JkIGdlbmVyYXRpb246Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwMi9MR0RUMzMwMyBiYXNlZCIKLWMuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgYW5hbG9nIGFuZCBoeWJyaWQgdHVuZXIgbW9kdWxlcyB0byBidWlsZCIgPT4gIlNpbXBsZSB0dW5lciBzdXBwb3J0IgorYS4pID0+ICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwMi9MR0RUMzMwMyBiYXNlZCIKK2IuKSAiTXVsdGltZWRpYSBzdXBwb3J0IiA9PiAiQ3VzdG9taXNlIGFuYWxvZyBhbmQgaHlicmlkIHR1bmVyIG1vZHVsZXMgdG8gYnVpbGQiCisgPT4gIlNpbXBsZSB0dW5lciBzdXBwb3J0IgogCi1BdXRob3I6IFV3ZSBCdWdsYSA8dXdlLmJ1Z2xhQGdteC5kZT4gRmVicnVhcnkgMjAwOQorQXV0aG9yOiBVd2UgQnVnbGEgPHV3ZS5idWdsYUBnbXguZGU+IEF1Z3VzdCAyMDA5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2VwOTN4eC1mYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2VwOTN4eC1mYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmMWJkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvZXA5M3h4LWZiLnR4dApAQCAtMCwwICsxLDEzNSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0RyaXZlciBmb3IgRVA5M3h4IExDRCBjb250cm9sbGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgRVA5M3h4IExDRCBjb250cm9sbGVyIGNhbiBkcml2ZSBib3RoIHN0YW5kYXJkIGRlc2t0b3AgbW9uaXRvcnMgYW5kCitlbWJlZGRlZCBMQ0QgZGlzcGxheXMuIElmIHlvdSBoYXZlIGEgc3RhbmRhcmQgZGVza3RvcCBtb25pdG9yIHRoZW4geW91CitjYW4gdXNlIHRoZSBzdGFuZGFyZCBMaW51eCB2aWRlbyBtb2RlIGRhdGFiYXNlLiBJbiB5b3VyIGJvYXJkIGZpbGU6CisKKwlzdGF0aWMgc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyBzb21lX2JvYXJkX2ZiX2luZm8gPSB7CisJCS5udW1fbW9kZXMJPSBFUDkzWFhGQl9VU0VfTU9ERURCLAorCQkuYnBwCQk9IDE2LAorCX07CisKK0lmIHlvdSBoYXZlIGFuIGVtYmVkZGVkIExDRCBkaXNwbGF5IHRoZW4geW91IG5lZWQgdG8gZGVmaW5lIGEgdmlkZW8KK21vZGUgZm9yIGl0IGFzIGZvbGxvd3M6CisKKwlzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBzb21lX2JvYXJkX3ZpZGVvX21vZGVzW10gPSB7CisJCXsKKwkJCS5uYW1lCQk9ICJzb21lX2xjZF9uYW1lIiwKKwkJCS8qIFBpeGVsIGNsb2NrLCBwb3JjaGVzLCBldGMgKi8KKwkJfSwKKwl9OworCitOb3RlIHRoYXQgdGhlIHBpeGVsIGNsb2NrIHZhbHVlIGlzIGluIHBpY28tc2Vjb25kcy4gWW91IGNhbiB1c2UgdGhlCitLSFoyUElDT1MgbWFjcm8gdG8gY29udmVydCB0aGUgcGl4ZWwgY2xvY2sgdmFsdWUuIE1vc3Qgb3RoZXIgdmFsdWVzCithcmUgaW4gcGl4ZWwgY2xvY2tzLiBTZWUgRG9jdW1lbnRhdGlvbi9mYi9mcmFtZWJ1ZmZlci50eHQgZm9yIGZ1cnRoZXIKK2RldGFpbHMuCisKK1RoZSBlcDkzeHhmYl9tYWNoX2luZm8gc3RydWN0dXJlIGZvciB5b3VyIGJvYXJkIHNob3VsZCBsb29rIGxpa2UgdGhlCitmb2xsb3dpbmc6CisKKwlzdGF0aWMgc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyBzb21lX2JvYXJkX2ZiX2luZm8gPSB7CisJCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHNvbWVfYm9hcmRfdmlkZW9fbW9kZXMpLAorCQkubW9kZXMJCT0gc29tZV9ib2FyZF92aWRlb19tb2RlcywKKwkJLmRlZmF1bHRfbW9kZQk9ICZzb21lX2JvYXJkX3ZpZGVvX21vZGVzWzBdLAorCQkuYnBwCQk9IDE2LAorCX07CisKK1RoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgY2FuIGJlIHJlZ2lzdGVyZWQgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8KK3lvdXIgYm9hcmQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb246CisKKwllcDkzeHhfcmVnaXN0ZXJfZmIoJnNvbWVfYm9hcmRfZmJfaW5mbyk7CisKKz09PT09PT09PT09PT09PT09PT09PQorVmlkZW8gQXR0cmlidXRlIEZsYWdzCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGVwOTN4eGZiX21hY2hfaW5mbyBzdHJ1Y3R1cmUgaGFzIGEgZmxhZ3MgZmllbGQgd2hpY2ggY2FuIGJlIHVzZWQKK3RvIGNvbmZpZ3VyZSB0aGUgY29udHJvbGxlci4gVGhlIHZpZGVvIGF0dHJpYnV0ZXMgZmxhZ3MgYXJlIGZ1bGx5Citkb2N1bWVudGVkIGluIHNlY3Rpb24gNyBvZiB0aGUgRVA5M3h4IHVzZXJzJyBndWlkZS4gVGhlIGZvbGxvd2luZworZmxhZ3MgYXJlIGF2YWlsYWJsZToKKworRVA5M1hYRkJfUENMS19GQUxMSU5HCQlDbG9jayBkYXRhIG9uIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgdGhlCisJCQkJcGl4ZWwgY2xvY2suIFRoZSBkZWZhdWx0IGlzIHRvIGNsb2NrCisJCQkJZGF0YSBvbiB0aGUgcmlzaW5nIGVkZ2UuCisKK0VQOTNYWEZCX1NZTkNfQkxBTktfSElHSAlCbGFuayBzaWduYWwgaXMgYWN0aXZlIGhpZ2guIEJ5CisJCQkJZGVmYXVsdCB0aGUgYmxhbmsgc2lnbmFsIGlzIGFjdGl2ZSBsb3cuCisKK0VQOTNYWEZCX1NZTkNfSE9SSVpfSElHSAlIb3Jpem9udGFsIHN5bmMgaXMgYWN0aXZlIGhpZ2guIEJ5CisJCQkJZGVmYXVsdCB0aGUgaG9yaXpvbnRhbCBzeW5jIGlzIGFjdGl2ZSBsb3cuCisKK0VQOTNYWEZCX1NZTkNfVkVSVF9ISUdICQlWZXJ0aWNhbCBzeW5jIGlzIGFjdGl2ZSBoaWdoLiBCeQorCQkJCWRlZmF1bHQgdGhlIHZlcnRpY2FsIHN5bmMgaXMgYWN0aXZlIGhpZ2guCisKK1RoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmcmFtZWJ1ZmZlciBjYW4gYmUgY29udHJvbGxlZCB1c2luZyB0aGUKK2ZvbGxvd2luZyBmbGFnczoKKworRVA5M1hYRkJfVVNFX1NEQ1NOMAkJVXNlIFNEQ1NuWzBdIGZvciB0aGUgZnJhbWVidWZmZXIuIFRoaXMKKwkJCQlpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLgorCitFUDkzWFhGQl9VU0VfU0RDU04xCQlVc2UgU0RDU25bMV0gZm9yIHRoZSBmcmFtZWJ1ZmZlci4KKworRVA5M1hYRkJfVVNFX1NEQ1NOMgkJVXNlIFNEQ1NuWzJdIGZvciB0aGUgZnJhbWVidWZmZXIuCisKK0VQOTNYWEZCX1VTRV9TRENTTjMJCVVzZSBTRENTblszXSBmb3IgdGhlIGZyYW1lYnVmZmVyLgorCis9PT09PT09PT09PT09PT09PT0KK1BsYXRmb3JtIGNhbGxiYWNrcworPT09PT09PT09PT09PT09PT09CisKK1RoZSBFUDkzeHggZnJhbWVidWZmZXIgZHJpdmVyIHN1cHBvcnRzIHRocmVlIG9wdGlvbmFsIHBsYXRmb3JtCitjYWxsYmFja3M6IHNldHVwLCB0ZWFyZG93biBhbmQgYmxhbmsuIFRoZSBzZXR1cCBhbmQgdGVhcmRvd24gZnVuY3Rpb25zCithcmUgY2FsbGVkIHdoZW4gdGhlIGZyYW1lYnVmZmVyIGRyaXZlciBpcyBpbnN0YWxsZWQgYW5kIHJlbW92ZWQKK3Jlc3BlY3RpdmVseS4gVGhlIGJsYW5rIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgZGlzcGxheSBpcworYmxhbmtlZCBvciB1bmJsYW5rZWQuCisKK1RoZSBzZXR1cCBhbmQgdGVhcmRvd24gZGV2aWNlcyBwYXNzIHRoZSBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0dXJlIGFzCithbiBhcmd1bWVudC4gVGhlIGZiX2luZm8gYW5kIGVwOTN4eGZiX21hY2hfaW5mbyBzdHJ1Y3R1cmVzIGNhbiBiZQorb2J0YWluZWQgYXMgZm9sbG93czoKKworCXN0YXRpYyBpbnQgc29tZV9ib2FyZF9mYl9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorCXsKKwkJc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyAqbWFjaF9pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwkJLyogQm9hcmQgc3BlY2lmaWMgZnJhbWVidWZmZXIgc2V0dXAgKi8KKwl9CisKKz09PT09PT09PT09PT09PT09PT09PT0KK1NldHRpbmcgdGhlIHZpZGVvIG1vZGUKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHZpZGVvIG1vZGUgaXMgc2V0IHVzaW5nIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorCisJdmlkZW89WFJFU3hZUkVTWy1CUFBdW0BSRUZSRVNIXQorCitJZiB0aGUgRVA5M3h4IHZpZGVvIGRyaXZlciBpcyBidWlsdC1pbiB0aGVuIHRoZSB2aWRlbyBtb2RlIGlzIHNldCBvbgordGhlIExpbnV4IGtlcm5lbCBjb21tYW5kIGxpbmUsIGZvciBleGFtcGxlOgorCisJdmlkZW89ZXA5M3h4LWZiOjgwMHg2MDAtMTZANjAKKworSWYgdGhlIEVQOTN4eCB2aWRlbyBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUgdGhlbiB0aGUgdmlkZW8gbW9kZSBpcworc2V0IHdoZW4gdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQ6CisKKwltb2Rwcm9iZSBlcDkzeHgtZmIgdmlkZW89MzIweDI0MAorCis9PT09PT09PT09PT09PQorU2NyZWVucGFnZSBidWcKKz09PT09PT09PT09PT09CisKK0F0IGxlYXN0IG9uIHRoZSBFUDkzMTUgdGhlcmUgaXMgYSBzaWxpY29uIGJ1ZyB3aGljaCBjYXVzZXMgYml0IDI3IG9mCit0aGUgVklEU0NSTlBBR0UgKGZyYW1lYnVmZmVyIHBoeXNpY2FsIG9mZnNldCkgdG8gYmUgdGllZCBsb3cuIFRoZXJlIGlzCithbiB1bm9mZmljaWFsIGVycmF0YSBmb3IgdGhpcyBidWcgYXQ6CisJaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1hcm0ta2VybmVsJm09MTEwMDYxMjQ1NTAyMDAwJnc9MgorCitCeSBkZWZhdWx0IHRoZSBFUDkzeHggZnJhbWVidWZmZXIgZHJpdmVyIGNoZWNrcyBpZiB0aGUgYWxsb2NhdGVkIHBoeXNpY2FsCithZGRyZXNzIGhhcyBiaXQgMjcgc2V0LiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBtZW1vcnkgaXMgZnJlZWQgYW5kIGFuCitlcnJvciBpcyByZXR1cm5lZC4gVGhlIGNoZWNrIGNhbiBiZSBkaXNhYmxlZCBieSBhZGRpbmcgdGhlIGZvbGxvd2luZworb3B0aW9uIHdoZW4gbG9hZGluZyB0aGUgZHJpdmVyOgorCisgICAgICBlcDkzeHgtZmIuY2hlY2tfc2NyZWVucGFnZV9idWc9MAorCitJbiBzb21lIGNhc2VzIGl0IG1heSBiZSBwb3NzaWJsZSB0byByZWNvbmZpZ3VyZSB5b3VyIFNEUkFNIGxheW91dCB0bworYXZvaWQgdGhpcyBidWcuIFNlZSBzZWN0aW9uIDEzIG9mIHRoZSBFUDkzeHggdXNlcnMnIGd1aWRlIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9tYXRyb3hmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dAppbmRleCBhZDdhNjc3Li5lNWNlOGExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dApAQCAtMTg2LDkgKzE4Niw3IEBACiBkZXY6WCAgICAtIGJpbmQgZHJpdmVyIHRvIGRldmljZSBYLiBEcml2ZXIgbnVtYmVycyBkZXZpY2UgZnJvbSAwIHVwIHRvIE4sCiAgICAgICAgICAgIHdoZXJlIGRldmljZSAwIGlzIGZpcnN0IGBrbm93bicgZGV2aWNlIGZvdW5kLCAxIHNlY29uZCBhbmQgc28gb24uCiAJICAgbHNwY2kgbGlzdHMgZGV2aWNlcyBpbiB0aGlzIG9yZGVyLgotCSAgIERlZmF1bHQgaXMgYGV2ZXJ5JyBrbm93biBkZXZpY2UgZm9yIGRyaXZlciB3aXRoIG11bHRpaGVhZCBzdXBwb3J0Ci0JICAgYW5kIGZpcnN0IHdvcmtpbmcgZGV2aWNlICh1c3VhbGx5IGRldjowKSBmb3IgZHJpdmVyIHdpdGhvdXQKLQkgICBtdWx0aWhlYWQgc3VwcG9ydC4KKwkgICBEZWZhdWx0IGlzIGBldmVyeScga25vd24gZGV2aWNlLgogbm9od2N1cnNvciAtIGRpc2FibGVzIGhhcmR3YXJlIGN1cnNvciAodXNlIHNvZnR3YXJlIGN1cnNvciBpbnN0ZWFkKS4KIGh3Y3Vyc29yIC0gZW5hYmxlcyBoYXJkd2FyZSBjdXJzb3IuIEl0IGlzIGRlZmF1bHQuIElmIHlvdSBhcmUgdXNpbmcKICAgICAgICAgICAgbm9uLWFjY2VsZXJhdGVkIG1vZGUgKGBub2FjY2VsJyBvciBgZmJzZXQgLWFjY2VsIGZhbHNlJyksIHNvZnR3YXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggZmE3NTIyMC4uODlhNDdiNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMzU0LDE0ICszNTQsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJZnNjaGVyIGFuZCBmc2Nwb3MgZHJpdmVycwotV2hlbjoJSnVuZSAyMDA5Ci1XaHk6CURlcHJlY2F0ZWQgYnkgdGhlIG5ldyBmc2NobWQgZHJpdmVyLgotV2hvOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotCUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJc3lzZnMgdWkgZm9yIGNoYW5naW5nIHA0LWNsb2NrbW9kIHBhcmFtZXRlcnMKIFdoZW46CVNlcHRlbWJlciAyMDA5CiBXaHk6CVNlZSBjb21taXRzIDEyOWY4YWU5YjFiNWJlOTQ1MTdkYTc2MDA5ZWE5NTZlODkxMDRjZTggYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvOXAudHh0CmluZGV4IDYyMDhmNTUuLjU3ZTBiODAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvOXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvOXAudHh0CkBAIC0xOCwxMSArMTgsMTEgQEAKIAogT3RoZXIgYXBwbGljYXRpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBwYXBlcnM6CiAJKiBYQ1BVICYgQ2x1c3RlcmluZwotCQlodHRwOi8vd3d3LnhjcHUub3JnL3hjcHUtdGFsay5wZGYKKwkJaHR0cDovL3hjcHUub3JnL3BhcGVycy94Y3B1LXRhbGsucGRmCiAJKiBLVk1GUzogY29udHJvbCBmaWxlIHN5c3RlbSBmb3IgS1ZNCi0JCWh0dHA6Ly93d3cueGNwdS5vcmcva3ZtZnMucGRmCi0JKiBDZWxsRlM6IEEgTmV3IFByb2dyYW1taW5nTW9kZWwgZm9yIHRoZSBDZWxsIEJFCi0JCWh0dHA6Ly93d3cueGNwdS5vcmcvY2VsbGZzLXRhbGsucGRmCisJCWh0dHA6Ly94Y3B1Lm9yZy9wYXBlcnMva3ZtZnMucGRmCisJKiBDZWxsRlM6IEEgTmV3IFByb2dyYW1taW5nIE1vZGVsIGZvciB0aGUgQ2VsbCBCRQorCQlodHRwOi8veGNwdS5vcmcvcGFwZXJzL2NlbGxmcy10YWxrLnBkZgogCSogUFJPU0UgSS9POiBVc2luZyA5cCB0byBlbmFibGUgQXBwbGljYXRpb24gUGFydGl0aW9ucwogCQlodHRwOi8vcGxhbjkuZXNjZXQudXJqYy5lcy9pd3A5L2NyZWFkeS9QUk9TRV9pd3A5XzIwMDYucGRmCiAKQEAgLTQ4LDYgKzQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSByZmRubyBhbmQgd2Zkbm8pCiAJCQl2aXJ0aW8JLSBjb25uZWN0IHRvIHRoZSBuZXh0IHZpcnRpbyBjaGFubmVsIGF2YWlsYWJsZQogCQkJCShmcm9tIGxndWVzdCBvciBLVk0gd2l0aCB0cmFuc192aXJ0aW8gbW9kdWxlKQorCQkJcmRtYQktIGNvbm5lY3QgdG8gYSBzcGVjaWZpZWQgUkRNQSBjaGFubmVsCiAKICAgdW5hbWU9bmFtZQl1c2VyIG5hbWUgdG8gYXR0ZW1wdCBtb3VudCBhcyBvbiB0aGUgcmVtb3RlIHNlcnZlci4gIFRoZQogICAJCXNlcnZlciBtYXkgb3ZlcnJpZGUgb3IgaWdub3JlIHRoaXMgdmFsdWUuICBDZXJ0YWluIHVzZXIKQEAgLTU5LDE2ICs2MCwyMiBAQAogICBjYWNoZT1tb2RlCXNwZWNpZmllcyBhIGNhY2hpbmcgcG9saWN5LiAgQnkgZGVmYXVsdCwgbm8gY2FjaGVzIGFyZSB1c2VkLgogCQkJbG9vc2UgPSBubyBhdHRlbXB0cyBhcmUgbWFkZSBhdCBjb25zaXN0ZW5jeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW5kZWQgZm9yIGV4Y2x1c2l2ZSwgcmVhZC1vbmx5IG1vdW50cworCQkJZnNjYWNoZSA9IHVzZSBGUy1DYWNoZSBmb3IgYSBwZXJzaXN0ZW50LCByZWFkLW9ubHkKKwkJCQljYWNoZSBiYWNrZW5kLgogCiAgIGRlYnVnPW4Jc3BlY2lmaWVzIGRlYnVnIGxldmVsLiAgVGhlIGRlYnVnIGxldmVsIGlzIGEgYml0bWFzay4KLSAgCQkJMHgwMSA9IGRpc3BsYXkgdmVyYm9zZSBlcnJvciBtZXNzYWdlcwotCQkJMHgwMiA9IGRldmVsb3BlciBkZWJ1ZyAoREVCVUdfQ1VSUkVOVCkKLQkJCTB4MDQgPSBkaXNwbGF5IDlwIHRyYWNlCi0JCQkweDA4ID0gZGlzcGxheSBWRlMgdHJhY2UKLQkJCTB4MTAgPSBkaXNwbGF5IE1hcnNoYWxsaW5nIGRlYnVnCi0JCQkweDIwID0gZGlzcGxheSBSUEMgZGVidWcKLQkJCTB4NDAgPSBkaXNwbGF5IHRyYW5zcG9ydCBkZWJ1ZwotCQkJMHg4MCA9IGRpc3BsYXkgYWxsb2NhdGlvbiBkZWJ1ZworCQkJMHgwMSAgPSBkaXNwbGF5IHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMKKwkJCTB4MDIgID0gZGV2ZWxvcGVyIGRlYnVnIChERUJVR19DVVJSRU5UKQorCQkJMHgwNCAgPSBkaXNwbGF5IDlwIHRyYWNlCisJCQkweDA4ICA9IGRpc3BsYXkgVkZTIHRyYWNlCisJCQkweDEwICA9IGRpc3BsYXkgTWFyc2hhbGxpbmcgZGVidWcKKwkJCTB4MjAgID0gZGlzcGxheSBSUEMgZGVidWcKKwkJCTB4NDAgID0gZGlzcGxheSB0cmFuc3BvcnQgZGVidWcKKwkJCTB4ODAgID0gZGlzcGxheSBhbGxvY2F0aW9uIGRlYnVnCisJCQkweDEwMCA9IGRpc3BsYXkgcHJvdG9jb2wgbWVzc2FnZSBkZWJ1ZworCQkJMHgyMDAgPSBkaXNwbGF5IEZpZCBkZWJ1ZworCQkJMHg0MDAgPSBkaXNwbGF5IHBhY2tldCBkZWJ1ZworCQkJMHg4MDAgPSBkaXNwbGF5IGZzY2FjaGUgdHJhY2luZyBkZWJ1ZwogCiAgIHJmZG5vPW4JdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgcmVhZGluZyB3aXRoIHRyYW5zPWZkCiAKQEAgLTEwMCw2ICsxMDcsMTAgQEAKIAkJCWFueSAgID0gdjlmcyBkb2VzIHNpbmdsZSBhdHRhY2ggYW5kIHBlcmZvcm1zIGFsbAogCQkJCW9wZXJhdGlvbnMgYXMgb25lIHVzZXIKIAorICBjYWNoZXRhZwljYWNoZSB0YWcgdG8gdXNlIHRoZSBzcGVjaWZpZWQgcGVyc2lzdGVudCBjYWNoZS4KKwkJY2FjaGUgdGFncyBmb3IgZXhpc3RpbmcgY2FjaGUgc2Vzc2lvbnMgY2FuIGJlIGxpc3RlZCBhdAorCQkvc3lzL2ZzLzlwL2NhY2hlcy4gKGFwcGxpZXMgb25seSB0byBjYWNoZT1mc2NhY2hlKQorCiBSRVNPVVJDRVMKID09PT09PT09PQogCkBAIC0xMTgsNyArMTI5LDcgQEAKIEEgTGludXggdmVyc2lvbiBvZiB0aGUgOXAgc2VydmVyIGlzIG5vdyBtYWludGFpbmVkIHVuZGVyIHRoZSBucGZzIHByb2plY3QKIG9uIHNvdXJjZWZvcmdlIChodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL25wZnMpLiAgVGhlIGN1cnJlbnRseQogbWFpbnRhaW5lZCB2ZXJzaW9uIGlzIHRoZSBzaW5nbGUtdGhyZWFkZWQgdmVyc2lvbiBvZiB0aGUgc2VydmVyIChuYW1lZCBzcGZzKQotYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUgQ1ZTIHJlcG9zaXRvcnkuCithdmFpbGFibGUgZnJvbSB0aGUgc2FtZSBTVk4gcmVwb3NpdG9yeS4KIAogVGhlcmUgYXJlIHVzZXIgYW5kIGRldmVsb3BlciBtYWlsaW5nIGxpc3RzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB2OWZzIHByb2plY3QKIG9uIHNvdXJjZWZvcmdlIChodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3Y5ZnMpLgpAQCAtMTI2LDcgKzEzNyw4IEBACiBBIHN0YW5kLWFsb25lIHZlcnNpb24gb2YgdGhlIG1vZHVsZSAod2hpY2ggc2hvdWxkIGJ1aWxkIGZvciBhbnkgMi42IGtlcm5lbCkKIGlzIGF2YWlsYWJsZSB2aWEgKGh0dHA6Ly9naXRodWIuY29tL2VyaWN2aC85cC1zYWMvdHJlZS9tYXN0ZXIpCiAKLU5ld3MgYW5kIG90aGVyIGluZm9ybWF0aW9uIGlzIG1haW50YWluZWQgb24gU1dpSyAoaHR0cDovL3N3aWsubmV0L3Y5ZnMpLgorTmV3cyBhbmQgb3RoZXIgaW5mb3JtYXRpb24gaXMgbWFpbnRhaW5lZCBvbiBTV2lLIChodHRwOi8vc3dpay5uZXQvdjlmcykKK2FuZCB0aGUgV2lraSAoaHR0cDovL3NmLm5ldC9hcHBzL21lZGlhd2lraS92OWZzL2luZGV4LnBocCkuCiAKIEJ1ZyByZXBvcnRzIG1heSBiZSBpc3N1ZWQgdGhyb3VnaCB0aGUga2VybmVsLm9yZyBidWd6aWxsYSAKIChodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmNwZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uY3Bmcy50eHQKaW5kZXggZjEyYzMwYy4uNWFmMTY0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uY3Bmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uY3Bmcy50eHQKQEAgLTcsNiArNyw2IEBACiB3aWxsIGhhdmUgaXQgYXMgd2VsbC4KIAogUmVsYXRlZCBwcm9kdWN0cyBhcmUgbGlud2FyZSBhbmQgbWFyc19ud2UsIHdoaWNoIHdpbGwgZ2l2ZSBMaW51eCBwYXJ0aWFsCi1OZXRXYXJlIHNlcnZlciBmdW5jdGlvbmFsaXR5LiAgTGlud2FyZSdzIGhvbWUgc2l0ZSBpcwota2xva2FuLnNoLmN2dXQuY3ovcHViL2xpbnV4L2xpbndhcmU7IG1hcnNfbndlIGNhbiBiZSBmb3VuZCBvbgotZnRwLmd3ZGcuZGUvcHViL2xpbnV4L21pc2MvbmNwZnMuCitOZXRXYXJlIHNlcnZlciBmdW5jdGlvbmFsaXR5LgorCittYXJzX253ZSBjYW4gYmUgZm91bmQgb24gZnRwLmd3ZGcuZGUvcHViL2xpbnV4L21pc2MvbmNwZnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mczQxLXNlcnZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mczQxLXNlcnZlci50eHQKaW5kZXggMDVkODFjYi4uNTkyMGZlMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnM0MS1zZXJ2ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzNDEtc2VydmVyLnR4dApAQCAtMTEsNiArMTEsMTEgQEAKIGNvbnRyb2wgZmlsZSwgdGhlIG5mc2Qgc2VydmljZSBtdXN0IGJlIHRha2VuIGRvd24uICBVc2UgeW91ciB1c2VyLW1vZGUKIG5mcy11dGlscyB0byBzZXQgdGhpcyB1cDsgc2VlIHJwYy5uZnNkKDgpCiAKKyhXYXJuaW5nOiBvbGRlciBzZXJ2ZXJzIHdpbGwgaW50ZXJwcmV0ICIrNC4xIiBhbmQgIi00LjEiIGFzICIrNCIgYW5kCisiLTQiLCByZXNwZWN0aXZlbHkuICBUaGVyZWZvcmUsIGNvZGUgbWVhbnQgdG8gd29yayBvbiBib3RoIG5ldyBhbmQgb2xkCitrZXJuZWxzIG11c3QgdHVybiA0LjEgb24gb3Igb2ZmICpiZWZvcmUqIHR1cm5pbmcgc3VwcG9ydCBmb3IgdmVyc2lvbiA0CitvbiBvciBvZmY7IHJwYy5uZnNkIGRvZXMgdGhpcyBjb3JyZWN0bHkuKQorCiBUaGUgTkZTdjQgbWlub3J2ZXJzaW9uIDEgKE5GU3Y0LjEpIGltcGxlbWVudGF0aW9uIGluIG5mc2QgaXMgYmFzZWQKIG9uIHRoZSBsYXRlc3QgTkZTdjQuMSBJbnRlcm5ldCBEcmFmdDoKIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtbmZzdjQtbWlub3J2ZXJzaW9uMS0yOQpAQCAtMjUsNiArMzAsNDkgQEAKIFNlZSBodHRwOi8vd2lraS5saW51eC1uZnMub3JnL3dpa2kvaW5kZXgucGhwL1BORlNfcHJvdG90eXBlX2Rlc2lnbgogZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKK1RoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIGludGVuZGVkIGZvciBkZXZlbG9wZXJzIG9ubHk6IHdoaWxlIGl0Citkb2VzIHN1cHBvcnQgb3JkaW5hcnkgZmlsZSBvcGVyYXRpb25zIG9uIGNsaWVudHMgd2UgaGF2ZSB0ZXN0ZWQgYWdhaW5zdAorKGluY2x1ZGluZyB0aGUgbGludXggY2xpZW50KSwgaXQgaXMgaW5jb21wbGV0ZSBpbiB3YXlzIHdoaWNoIG1heSBsaW1pdAorZmVhdHVyZXMgdW5leHBlY3RlZGx5LCBjYXVzZSBrbm93biBidWdzIGluIHJhcmUgY2FzZXMsIG9yIGNhdXNlCitpbnRlcm9wZXJhYmlsaXR5IHByb2JsZW1zIHdpdGggZnV0dXJlIGNsaWVudHMuICBLbm93biBpc3N1ZXM6CisKKwktIGdzcyBzdXBwb3J0IGlzIHF1ZXN0aW9uYWJsZTogY3VycmVudGx5IG1vdW50cyB3aXRoIGtlcmJlcm9zCisJICBmcm9tIGEgbGludXggY2xpZW50IGFyZSBwb3NzaWJsZSwgYnV0IHdlIGFyZW4ndCByZWFsbHkKKwkgIGNvbmZvcm1hbnQgd2l0aCB0aGUgc3BlYyAoZm9yIGV4YW1wbGUsIHdlIGRvbid0IHVzZSBrZXJiZXJvcworCSAgb24gdGhlIGJhY2tjaGFubmVsIGNvcnJlY3RseSkuCisJLSBubyB0cnVua2luZyBzdXBwb3J0OiBubyBjbGllbnRzIGN1cnJlbnRseSB0YWtlIGFkdmFudGFnZSBvZgorCSAgdHJ1bmtpbmcsIGJ1dCB0aGlzIGlzIGEgbWFuZGF0b3J5IGZhaWx1cmUsIGFuZCBpdHMgdXNlIGlzCisJICByZWNvbW1lbmRlZCB0byBjbGllbnRzIGluIGEgbnVtYmVyIG9mIHBsYWNlcy4gIChFLmcuIHRvIGVuc3VyZQorCSAgdGltZWx5IHJlbmV3YWwgaW4gY2FzZSBhbiBleGlzdGluZyBjb25uZWN0aW9uJ3MgcmV0cnkgdGltZW91dHMKKwkgIGhhdmUgZ290dGVuIHRvbyBsb25nOyBzZWUgc2VjdGlvbiA4LjMgb2YgdGhlIGRyYWZ0LikKKwkgIFRoZXJlZm9yZSwgbGFjayBvZiB0aGlzIGZlYXR1cmUgbWF5IGNhdXNlIGZ1dHVyZSBjbGllbnRzIHRvCisJICBmYWlsLgorCS0gSW5jb21wbGV0ZSBiYWNrY2hhbm5lbCBzdXBwb3J0OiBpbmNvbXBsZXRlIGJhY2tjaGFubmVsIGdzcworCSAgc3VwcG9ydCBhbmQgbm8gc3VwcG9ydCBmb3IgQkFDS0NIQU5ORUxfQ1RMIG1lYW4gdGhhdAorCSAgY2FsbGJhY2tzIChoZW5jZSBkZWxlZ2F0aW9ucyBhbmQgbGF5b3V0cykgbWF5IG5vdCBiZQorCSAgYXZhaWxhYmxlIGFuZCBjbGllbnRzIGNvbmZ1c2VkIGJ5IHRoZSBpbmNvbXBsZXRlCisJICBpbXBsZW1lbnRhdGlvbiBtYXkgZmFpbC4KKwktIFNlcnZlciByZWJvb3QgcmVjb3ZlcnkgaXMgdW5zdXBwb3J0ZWQ7IGlmIHRoZSBzZXJ2ZXIgcmVib290cywKKwkgIGNsaWVudHMgbWF5IGZhaWwuCisJLSBXZSBkbyBub3Qgc3VwcG9ydCBTU1YsIHdoaWNoIHByb3ZpZGVzIHNlY3VyaXR5IGZvciBzaGFyZWQKKwkgIGNsaWVudC1zZXJ2ZXIgc3RhdGUgKHRodXMgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgdGFtcGVyaW5nCisJICB3aXRoIGxvY2tzIGFuZCBvcGVucywgZm9yIGV4YW1wbGUpLiAgSXQgaXMgbWFuZGF0b3J5IGZvcgorCSAgc2VydmVycyB0byBzdXBwb3J0IHRoaXMsIHRob3VnaCBubyBjbGllbnRzIHVzZSBpdCB5ZXQuCisJLSBNYW5kYXRvcnkgb3BlcmF0aW9ucyB3aGljaCB3ZSBkbyBub3Qgc3VwcG9ydCwgc3VjaCBhcworCSAgREVTVFJPWV9DTElFTlRJRCwgRlJFRV9TVEFURUlELCBTRUNJTkZPX05PX05BTUUsIGFuZAorCSAgVEVTVF9TVEFURUlELCBhcmUgbm90IGN1cnJlbnRseSB1c2VkIGJ5IGNsaWVudHMsIGJ1dCB3aWxsIGJlCisJICAoYW5kIHRoZSBzcGVjIHJlY29tbWVuZHMgdGhlaXIgdXNlcyBpbiBjb21tb24gY2FzZXMpLCBhbmQKKwkgIGNsaWVudHMgc2hvdWxkIG5vdCBiZSBleHBlY3RlZCB0byBrbm93IGhvdyB0byByZWNvdmVyIGZyb20gdGhlCisJICBjYXNlIHdoZXJlIHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQuICBUaGlzIHdpbGwgZXZlbnR1YWxseSBjYXVzZQorCSAgaW50ZXJvcGVyYWJpbGl0eSBmYWlsdXJlcy4KKworSW4gYWRkaXRpb24sIHNvbWUgbGltaXRhdGlvbnMgYXJlIGluaGVyaXRlZCBmcm9tIHRoZSBjdXJyZW50IE5GU3Y0CitpbXBsZW1lbnRhdGlvbjoKKworCS0gSW5jb21wbGV0ZSBkZWxlZ2F0aW9uIGVuZm9yY2VtZW50OiBpZiBhIGZpbGUgaXMgcmVuYW1lZCBvcgorCSAgdW5saW5rZWQsIGEgY2xpZW50IGhvbGRpbmcgYSBkZWxlZ2F0aW9uIG1heSBjb250aW51ZSB0bworCSAgaW5kZWZpbml0ZWx5IGFsbG93IG9wZW5zIG9mIHRoZSBmaWxlIHVuZGVyIHRoZSBvbGQgbmFtZS4KKwogVGhlIHRhYmxlIGJlbG93LCB0YWtlbiBmcm9tIHRoZSBORlN2NC4xIGRvY3VtZW50LCBsaXN0cwogdGhlIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWFuZGF0b3J5IHRvIGltcGxlbWVudCAoUkVRKSwgb3B0aW9uYWwKIChPUFQpLCBhbmQgTkZTdjQuMCBvcGVyYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIG5vdCB0byBpbXBsZW1lbnQgKE1OSSkKQEAgLTE0Miw2ICsxOTAsMTIgQEAKIAogSW1wbGVtZW50YXRpb24gbm90ZXM6CiAKK0RFTEVHUFVSR0U6CisqIG1hbmRhdG9yeSBvbmx5IGZvciBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBDTEFJTV9ERUxFR0FURV9QUkVWIGFuZC9vcgorICBDTEFJTV9ERUxFR19QUkVWX0ZIICh3aGljaCBhbGxvd3MgY2xpZW50cyB0byBrZWVwIGRlbGVnYXRpb25zIHRoYXQKKyAgcGVyc2lzdCBhY3Jvc3MgY2xpZW50IHJlYm9vdHMpLiAgVGh1cyB3ZSBuZWVkIG5vdCBpbXBsZW1lbnQgdGhpcyBmb3IKKyAgbm93LgorCiBFWENIQU5HRV9JRDoKICogb25seSBTUDRfTk9ORSBzdGF0ZSBwcm90ZWN0aW9uIHN1cHBvcnRlZAogKiBpbXBsZW1lbnRhdGlvbiBpZHMgYXJlIGlnbm9yZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0CmluZGV4IDY4YmFkZGYuLjNiYTBiOTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dApAQCAtMTA1LDcgKzEwNSw3IEBACiAJCXRoZSBjbGllbnQgYWRkcmVzcyBhbmQgdGhpcyBwYXJhbWV0ZXIgaXMgTk9UIGVtcHR5IG9ubHkKIAkJcmVwbGllcyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VydmVyIGFyZSBhY2NlcHRlZC4KIAotCQlPbmx5IHJlcXVpcmVkIGZvciBmb3IgTkZTIHJvb3QuIFRoYXQgaXMgYXV0b2NvbmZpZ3VyYXRpb24KKwkJT25seSByZXF1aXJlZCBmb3IgTkZTIHJvb3QuIFRoYXQgaXMgYXV0b2NvbmZpZ3VyYXRpb24KIAkJd2lsbCBub3QgYmUgdHJpZ2dlcmVkIGlmIGl0IGlzIG1pc3NpbmcgYW5kIE5GUyByb290IGlzIG5vdAogCQlpbiBvcGVyYXRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGZmZWFkMTMuLmI1YWVlNzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTc2LDYgKzE3Niw3IEBACiAgIENhcEJuZDogZmZmZmZmZmZmZmZmZmZmZgogICB2b2x1bnRhcnlfY3R4dF9zd2l0Y2hlczogICAgICAgIDAKICAgbm9udm9sdW50YXJ5X2N0eHRfc3dpdGNoZXM6ICAgICAxCisgIFN0YWNrIHVzYWdlOiAgICAxMiBrQgogCiBUaGlzIHNob3dzIHlvdSBuZWFybHkgdGhlIHNhbWUgaW5mb3JtYXRpb24geW91IHdvdWxkIGdldCBpZiB5b3Ugdmlld2VkIGl0IHdpdGgKIHRoZSBwcyAgY29tbWFuZC4gIEluICBmYWN0LCAgcHMgIHVzZXMgIHRoZSAgcHJvYyAgZmlsZSAgc3lzdGVtICB0byAgb2J0YWluIGl0cwpAQCAtMjI5LDYgKzIzMCw3IEBACiAgTWVtc19hbGxvd2VkX2xpc3QgICAgICAgICAgIFNhbWUgYXMgcHJldmlvdXMsIGJ1dCBpbiAibGlzdCBmb3JtYXQiCiAgdm9sdW50YXJ5X2N0eHRfc3dpdGNoZXMgICAgIG51bWJlciBvZiB2b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlcwogIG5vbnZvbHVudGFyeV9jdHh0X3N3aXRjaGVzICBudW1iZXIgb2Ygbm9uIHZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzCisgU3RhY2sgdXNhZ2U6ICAgICAgICAgICAgICAgIHN0YWNrIHVzYWdlIGhpZ2ggd2F0ZXIgbWFyayAocm91bmQgdXAgdG8gcGFnZSBzaXplKQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIFRhYmxlIDEtMzogQ29udGVudHMgb2YgdGhlIHN0YXRtIGZpbGVzIChhcyBvZiAyLjYuOC1yYzMpCkBAIC0zMDcsNyArMzA5LDcgQEAKIDA4MDQ5MDAwLTA4MDRhMDAwIHJ3LXAgMDAwMDEwMDAgMDM6MDAgODMxMiAgICAgICAvb3B0L3Rlc3QKIDA4MDRhMDAwLTA4MDZiMDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMCAgICAgICAgICBbaGVhcF0KIGE3Y2IxMDAwLWE3Y2IyMDAwIC0tLXAgMDAwMDAwMDAgMDA6MDAgMAotYTdjYjIwMDAtYTdlYjIwMDAgcnctcCAwMDAwMDAwMCAwMDowMCAwCithN2NiMjAwMC1hN2ViMjAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAgICAgICAgICAgW3RocmVhZHN0YWNrOjAwMWZmNGI0XQogYTdlYjIwMDAtYTdlYjMwMDAgLS0tcCAwMDAwMDAwMCAwMDowMCAwCiBhN2ViMzAwMC1hN2VkNTAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKIGE3ZWQ1MDAwLWE4MDA4MDAwIHIteHAgMDAwMDAwMDAgMDM6MDAgNDIyMiAgICAgICAvbGliL2xpYmMuc28uNgpAQCAtMzQzLDYgKzM0NSw3IEBACiAgW3N0YWNrXSAgICAgICAgICAgICAgICAgID0gdGhlIHN0YWNrIG9mIHRoZSBtYWluIHByb2Nlc3MKICBbdmRzb10gICAgICAgICAgICAgICAgICAgPSB0aGUgInZpcnR1YWwgZHluYW1pYyBzaGFyZWQgb2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIHN5c3RlbSBjYWxsIGhhbmRsZXIKKyBbdGhyZWFkc3RhY2s6eHh4eHh4eHhdICAgPSB0aGUgc3RhY2sgb2YgdGhlIHRocmVhZCwgeHh4eHh4eHggaXMgdGhlIHN0YWNrIHNpemUKIAogIG9yIGlmIGVtcHR5LCB0aGUgbWFwcGluZyBpcyBhbm9ueW1vdXMuCiAKQEAgLTM3NSw2ICszNzgsMTkgQEAKIFRoaXMgZmlsZSBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIENPTkZJR19NTVUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzCiBlbmFibGVkLgogCitUaGUgL3Byb2MvUElEL2NsZWFyX3JlZnMgaXMgdXNlZCB0byByZXNldCB0aGUgUEdfUmVmZXJlbmNlZCBhbmQgQUNDRVNTRUQvWU9VTkcKK2JpdHMgb24gYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggYSBwcm9jZXNzLgorVG8gY2xlYXIgdGhlIGJpdHMgZm9yIGFsbCB0aGUgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzCisgICAgPiBlY2hvIDEgPiAvcHJvYy9QSUQvY2xlYXJfcmVmcworCitUbyBjbGVhciB0aGUgYml0cyBmb3IgdGhlIGFub255bW91cyBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3MKKyAgICA+IGVjaG8gMiA+IC9wcm9jL1BJRC9jbGVhcl9yZWZzCisKK1RvIGNsZWFyIHRoZSBiaXRzIGZvciB0aGUgZmlsZSBtYXBwZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzCisgICAgPiBlY2hvIDMgPiAvcHJvYy9QSUQvY2xlYXJfcmVmcworQW55IG90aGVyIHZhbHVlIHdyaXR0ZW4gdG8gL3Byb2MvUElEL2NsZWFyX3JlZnMgd2lsbCBoYXZlIG5vIGVmZmVjdC4KKworCiAxLjIgS2VybmVsIGRhdGEKIC0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMDMyLDkgKzEwNDgsOSBAQAogc2luY2UgdGhlIHN5c3RlbSBmaXJzdCBib290ZWQuICBGb3IgYSBxdWljayBsb29rLCBzaW1wbHkgY2F0IHRoZSBmaWxlOgogCiAgID4gY2F0IC9wcm9jL3N0YXQKLSAgY3B1ICAyMjU1IDM0IDIyOTAgMjI2MjU1NjMgNjI5MCAxMjcgNDU2IDAKLSAgY3B1MCAxMTMyIDM0IDE0NDEgMTEzMTE3MTggMzY3NSAxMjcgNDM4IDAKLSAgY3B1MSAxMTIzIDAgODQ5IDExMzEzODQ1IDI2MTQgMCAxOCAwCisgIGNwdSAgMjI1NSAzNCAyMjkwIDIyNjI1NTYzIDYyOTAgMTI3IDQ1NiAwIDAKKyAgY3B1MCAxMTMyIDM0IDE0NDEgMTEzMTE3MTggMzY3NSAxMjcgNDM4IDAgMAorICBjcHUxIDExMjMgMCA4NDkgMTEzMTM4NDUgMjYxNCAwIDE4IDAgMAogICBpbnRyIDExNDkzMDU0OCAxMTMxOTk3ODggMyAwIDUgMjYzIDAgNCBbLi4uIGxvdHMgbW9yZSBudW1iZXJzIC4uLl0KICAgY3R4dCAxOTkwNDczCiAgIGJ0aW1lIDEwNjIxOTEzNzYKQEAgLTEwNTYsNiArMTA3Miw3IEBACiAtIGlycTogc2VydmljaW5nIGludGVycnVwdHMKIC0gc29mdGlycTogc2VydmljaW5nIHNvZnRpcnFzCiAtIHN0ZWFsOiBpbnZvbHVudGFyeSB3YWl0CistIGd1ZXN0OiBydW5uaW5nIGEgZ3Vlc3QKIAogVGhlICJpbnRyIiBsaW5lIGdpdmVzIGNvdW50cyBvZiBpbnRlcnJ1cHRzICBzZXJ2aWNlZCBzaW5jZSBib290IHRpbWUsIGZvciBlYWNoCiBvZiB0aGUgIHBvc3NpYmxlIHN5c3RlbSBpbnRlcnJ1cHRzLiAgIFRoZSBmaXJzdCAgY29sdW1uICBpcyB0aGUgIHRvdGFsIG9mICBhbGwKQEAgLTExOTEsNyArMTIwOCw3IEBACiAgKiBpZiB0aGUgdGFzayB3YXMgcmVuaWNlZCwgaXRzIHNjb3JlIGRvdWJsZXMKICAqIHN1cGVydXNlciBvciBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzIHRhc2tzIChDQVBfU1lTX0FETUlOLCBDQVBfU1lTX1JFU09VUkNFCiAgCW9yIENBUF9TWVNfUkFXSU8pIGhhdmUgdGhlaXIgc2NvcmUgZGl2aWRlZCBieSA0Ci0gKiBpZiBvb20gY29uZGl0aW9uIGhhcHBlbmVkIGluIG9uZSBjcHVzZXQgYW5kIGNoZWNrZWQgdGFzayBkb2VzIG5vdCBiZWxvbmcKKyAqIGlmIG9vbSBjb25kaXRpb24gaGFwcGVuZWQgaW4gb25lIGNwdXNldCBhbmQgY2hlY2tlZCBwcm9jZXNzIGRvZXMgbm90IGJlbG9uZwogIAl0byBpdCwgaXRzIHNjb3JlIGlzIGRpdmlkZWQgYnkgOAogICogdGhlIHJlc3VsdGluZyBzY29yZSBpcyBtdWx0aXBsaWVkIGJ5IHR3byB0byB0aGUgcG93ZXIgb2Ygb29tX2FkaiwgaS5lLgogCXBvaW50cyA8PD0gb29tX2FkaiB3aGVuIGl0IGlzIHBvc2l0aXZlIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9nY292LnR4dCBiL0RvY3VtZW50YXRpb24vZ2Nvdi50eHQKaW5kZXggNDBlYzYzMy4uZTdjYTY0NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9nY292LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2djb3YudHh0CkBAIC00Nyw3ICs0Nyw3IEBACiAKIENvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGg6CiAKLSAgICAgICAgQ09ORklHX0RFQlVHRlM9eQorICAgICAgICBDT05GSUdfREVCVUdfRlM9eQogICAgICAgICBDT05GSUdfR0NPVl9LRVJORUw9eQogCiBhbmQgdG8gZ2V0IGNvdmVyYWdlIGRhdGEgZm9yIHRoZSBlbnRpcmUga2VybmVsOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKaW5kZXggZTRiNjk4NS4uZmE0ZGMwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CkBAIC01MjQsNiArNTI0LDEzIEBACiAJCWlzIGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0LCB0aGlzIHZhbHVlIG1heSBiZSB3cml0dGVuOwogCQlhbnkgbm9uemVybyB2YWx1ZSBpcyB0cmVhdGVkIGFzIGhpZ2guCiAKKwkiZWRnZSIgLi4uIHJlYWRzIGFzIGVpdGhlciAibm9uZSIsICJyaXNpbmciLCAiZmFsbGluZyIsIG9yCisJCSJib3RoIi4gV3JpdGUgdGhlc2Ugc3RyaW5ncyB0byBzZWxlY3QgdGhlIHNpZ25hbCBlZGdlKHMpCisJCXRoYXQgd2lsbCBtYWtlIHBvbGwoMikgb24gdGhlICJ2YWx1ZSIgZmlsZSByZXR1cm4uCisKKwkJVGhpcyBmaWxlIGV4aXN0cyBvbmx5IGlmIHRoZSBwaW4gY2FuIGJlIGNvbmZpZ3VyZWQgYXMgYW4KKwkJaW50ZXJydXB0IGdlbmVyYXRpbmcgaW5wdXQgcGluLgorCiBHUElPIGNvbnRyb2xsZXJzIGhhdmUgcGF0aHMgbGlrZSAvc3lzL2NsYXNzL2dwaW8vY2hpcGNoaXA0Mi8gKGZvciB0aGUKIGNvbnRyb2xsZXIgaW1wbGVtZW50aW5nIEdQSU9zIHN0YXJ0aW5nIGF0ICM0MikgYW5kIGhhdmUgdGhlIGZvbGxvd2luZwogcmVhZC1vbmx5IGF0dHJpYnV0ZXM6CkBAIC01NTUsNiArNTYyLDExIEBACiAJLyogcmV2ZXJzZSBncGlvX2V4cG9ydCgpICovCiAJdm9pZCBncGlvX3VuZXhwb3J0KCk7CiAKKwkvKiBjcmVhdGUgYSBzeXNmcyBsaW5rIHRvIGFuIGV4cG9ydGVkIEdQSU8gbm9kZSAqLworCWludCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJdW5zaWduZWQgZ3BpbykKKworCiBBZnRlciBhIGtlcm5lbCBkcml2ZXIgcmVxdWVzdHMgYSBHUElPLCBpdCBtYXkgb25seSBiZSBtYWRlIGF2YWlsYWJsZSBpbgogdGhlIHN5c2ZzIGludGVyZmFjZSBieSBncGlvX2V4cG9ydCgpLiAgVGhlIGRyaXZlciBjYW4gY29udHJvbCB3aGV0aGVyIHRoZQogc2lnbmFsIGRpcmVjdGlvbiBtYXkgY2hhbmdlLiAgVGhpcyBoZWxwcyBkcml2ZXJzIHByZXZlbnQgdXNlcnNwYWNlIGNvZGUKQEAgLTU2MywzICs1NzUsOCBAQAogVGhpcyBleHBsaWNpdCBleHBvcnRpbmcgY2FuIGhlbHAgd2l0aCBkZWJ1Z2dpbmcgKGJ5IG1ha2luZyBzb21lIGtpbmRzCiBvZiBleHBlcmltZW50cyBlYXNpZXIpLCBvciBjYW4gcHJvdmlkZSBhbiBhbHdheXMtdGhlcmUgaW50ZXJmYWNlIHRoYXQncwogc3VpdGFibGUgZm9yIGRvY3VtZW50aW5nIGFzIHBhcnQgb2YgYSBib2FyZCBzdXBwb3J0IHBhY2thZ2UuCisKK0FmdGVyIHRoZSBHUElPIGhhcyBiZWVuIGV4cG9ydGVkLCBncGlvX2V4cG9ydF9saW5rKCkgYWxsb3dzIGNyZWF0aW5nCitzeW1saW5rcyBmcm9tIGVsc2V3aGVyZSBpbiBzeXNmcyB0byB0aGUgR1BJTyBzeXNmcyBub2RlLiAgRHJpdmVycyBjYW4KK3VzZSB0aGlzIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZSB1bmRlciB0aGVpciBvd24gZGV2aWNlIGluIHN5c2ZzIHdpdGgKK2EgZGVzY3JpcHRpdmUgbmFtZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWNwaV9wb3dlcl9tZXRlciBiL0RvY3VtZW50YXRpb24vaHdtb24vYWNwaV9wb3dlcl9tZXRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODAzOTlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hY3BpX3Bvd2VyX21ldGVyCkBAIC0wLDAgKzEsNTEgQEAKK0tlcm5lbCBkcml2ZXIgcG93ZXJfbWV0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkcml2ZXIgdGFsa3MgdG8gQUNQSSA0LjAgcG93ZXIgbWV0ZXJzLgorCitTdXBwb3J0ZWQgc3lzdGVtczoKKyAgKiBBbnkgcmVjZW50IHN5c3RlbSB3aXRoIEFDUEkgNC4wLgorICAgIFByZWZpeDogJ3Bvd2VyX21ldGVyJworICAgIERhdGFzaGVldDogaHR0cDovL2FjcGkuaW5mby8sIHNlY3Rpb24gMTAuNC4KKworQXV0aG9yOiBEYXJyaWNrIEouIFdvbmcKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc2Vuc29yIHJlYWRpbmcgc3VwcG9ydCBmb3IgdGhlIHBvd2VyIG1ldGVycyBleHBvc2VkIGluCit0aGUgQUNQSSA0LjAgc3BlYyAoQ2hhcHRlciAxMC40KS4gIFRoZXNlIGRldmljZXMgaGF2ZSBhIHNpbXBsZSBzZXQgb2YKK2ZlYXR1cmVzLS1hIHBvd2VyIG1ldGVyIHRoYXQgcmV0dXJucyBhdmVyYWdlIHBvd2VyIHVzZSBvdmVyIGEgY29uZmlndXJhYmxlCitpbnRlcnZhbCwgYW4gb3B0aW9uYWwgY2FwcGluZyBtZWNoYW5pc20sIGFuZCBhIGNvdXBsZSBvZiB0cmlwIHBvaW50cy4gIFRoZQorc3lzZnMgaW50ZXJmYWNlIGNvbmZvcm1zIHdpdGggdGhlIHNwZWNpZmljYXRpb24gb3V0bGluZWQgaW4gdGhlICJQb3dlciIgc2VjdGlvbgorb2YgRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UuCisKK1NwZWNpYWwgRmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHBvd2VyWzEtKl1faXNfYmF0dGVyeSBrbm9iIGluZGljYXRlcyBpZiB0aGUgcG93ZXIgc3VwcGx5IGlzIGEgYmF0dGVyeS4KK0JvdGggcG93ZXJbMS0qXV9hdmVyYWdlX3ttaW4sbWF4fSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIHRyaXAgcG9pbnRzIHdpbGwgd29yay4KK1doZW4gYm90aCBvZiB0aGVtIGFyZSBzZXQsIGFuIEFDUEkgZXZlbnQgd2lsbCBiZSBicm9hZGNhc3Qgb24gdGhlIEFDUEkgbmV0bGluaworc29ja2V0IGFuZCBhIHBvbGwgbm90aWZpY2F0aW9uIHdpbGwgYmUgc2VudCB0byB0aGUgYXBwcm9wcmlhdGUKK3Bvd2VyWzEtKl1fYXZlcmFnZSBzeXNmcyBmaWxlLgorCitUaGUgcG93ZXJbMS0qXV97bW9kZWxfbnVtYmVyLCBzZXJpYWxfbnVtYmVyLCBvZW1faW5mb30gZmllbGRzIGRpc3BsYXkgYXJiaXRyYXJ5CitzdHJpbmdzIHRoYXQgQUNQSSBwcm92aWRlcyB3aXRoIHRoZSBtZXRlci4gIFRoZSBtZWFzdXJlcy8gZGlyZWN0b3J5IGNvbnRhaW5zCitzeW1saW5rcyB0byB0aGUgZGV2aWNlcyB0aGF0IHRoaXMgbWV0ZXIgbWVhc3VyZXMuCisKK1NvbWUgY29tcHV0ZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZW5mb3JjZSBhIHBvd2VyIGNhcCBpbiBoYXJkd2FyZS4gIElmIHRoaXMgaXMKK3RoZSBjYXNlLCB0aGUgcG93ZXJbMS0qXV9jYXAgYW5kIHJlbGF0ZWQgc3lzZnMgZmlsZXMgd2lsbCBhcHBlYXIuICBXaGVuIHRoZQorYXZlcmFnZSBwb3dlciBjb25zdW1wdGlvbiBleGNlZWRzIHRoZSBjYXAsIGFuIEFDUEkgZXZlbnQgd2lsbCBiZSBicm9hZGNhc3Qgb24KK3RoZSBuZXRsaW5rIGV2ZW50IHNvY2tldCBhbmQgYSBwb2xsIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQgdG8gdGhlCithcHByb3ByaWF0ZSBwb3dlclsxLSpdX2FsYXJtIGZpbGUgdG8gaW5kaWNhdGUgdGhhdCBjYXBwaW5nIGhhcyBiZWd1biwgYW5kIHRoZQoraGFyZHdhcmUgaGFzIHRha2VuIGFjdGlvbiB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24uICBNb3N0IGxpa2VseSB0aGlzIHdpbGwKK3Jlc3VsdCBpbiByZWR1Y2VkIHBlcmZvcm1hbmNlLgorCitUaGVyZSBhcmUgYSBmZXcgb3RoZXIgQUNQSSBub3RpZmljYXRpb25zIHRoYXQgY2FuIGJlIHNlbnQgYnkgdGhlIGZpcm13YXJlLiAgSW4KK2FsbCBjYXNlcyB0aGUgQUNQSSBldmVudCB3aWxsIGJlIGJyb2FkY2FzdCBvbiB0aGUgQUNQSSBuZXRsaW5rIGV2ZW50IHNvY2tldCBhcword2VsbCBhcyBzZW50IGFzIGEgcG9sbCBub3RpZmljYXRpb24gdG8gYSBzeXNmcyBmaWxlLiAgVGhlIGV2ZW50cyBhcmUgYXMKK2ZvbGxvd3M6CisKK3Bvd2VyWzEtKl1fY2FwIHdpbGwgYmUgbm90aWZpZWQgaWYgdGhlIGZpcm13YXJlIGNoYW5nZXMgdGhlIHBvd2VyIGNhcC4KK3Bvd2VyWzEtKl1faW50ZXJ2YWwgd2lsbCBiZSBub3RpZmllZCBpZiB0aGUgZmlybXdhcmUgY2hhbmdlcyB0aGUgYXZlcmFnaW5nCitpbnRlcnZhbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCmluZGV4IGRiYmU2YzcwLi45MjI2N2I2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAKQEAgLTQsNyArNCw5IEBACiBTdXBwb3J0ZWQgY2hpcHM6CiAgICogQWxsIEludGVsIENvcmUgZmFtaWx5CiAgICAgUHJlZml4OiAnY29yZXRlbXAnCi0gICAgQ1BVSUQ6IGZhbWlseSAweDYsIG1vZGVscyAweGUsIDB4ZiwgMHgxNiwgMHgxNworICAgIENQVUlEOiBmYW1pbHkgMHg2LCBtb2RlbHMgMHhlIChQZW50aXVtIE0gREMpLCAweGYgKENvcmUgMiBEQyA2NW5tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYgKENvcmUgMiBTQyA2NW5tKSwgMHgxNyAoUGVucnluIDQ1bm0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYSAoTmVoYWxlbSksIDB4MWMgKEF0b20pLCAweDFlIChMeW5uZmllbGQpCiAgICAgRGF0YXNoZWV0OiBJbnRlbCA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKICAgICAgICAgICAgICAgIFZvbHVtZSAzQTogU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlCiAgICAgICAgICAgICAgICBodHRwOi8vc29mdHdhcmVjb21tdW5pdHkuaW50ZWwuY29tL1dpa2kvTW9iaWxpdHkvNzIwLmh0bQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9mc2NoZXIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2ZzY2hlcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwMzE2NS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2ZzY2hlcgorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi1LZXJuZWwgZHJpdmVyIGZzY2hlcgotPT09PT09PT09PT09PT09PT09PT0KLQotU3VwcG9ydGVkIGNoaXBzOgotICAqIEZ1aml0c3UtU2llbWVucyBIZXJtZXMgY2hpcAotICAgIFByZWZpeDogJ2ZzY2hlcicKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NzMKLQotQXV0aG9yczoKLSAgICAgICAgUmVpbmhhcmQgTmlzc2wgPHJuaXNzbEBnbXguZGU+IGJhc2VkIG9uIHdvcmsKLSAgICAgICAgZnJvbSBIZXJtYW5uIEp1bmcgPGhlakBvZG4uZGU+LAotICAgICAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LAotICAgICAgICBQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+Ci0KLURlc2NyaXB0aW9uCi0tLS0tLS0tLS0tLQotCi1UaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBGdWppdHN1LVNpZW1lbnMgSGVybWVzIGNoaXAuIEl0IGlzCi1kZXNjcmliZWQgaW4gdGhlICdSZWdpc3RlciBTZXQgU3BlY2lmaWNhdGlvbiBCTUMgSGVybWVzIGJhc2VkIFN5c3RlbWJvYXJkJwotZnJvbSBGdWppdHN1LVNpZW1lbnMuCi0KLVRoZSBIZXJtZXMgY2hpcCBpbXBsZW1lbnRzIGEgaGFyZHdhcmUtYmFzZWQgc3lzdGVtIG1hbmFnZW1lbnQsIGUuZy4gZm9yCi1jb250cm9sbGluZyBmYW4gc3BlZWQgYW5kIGNvcmUgdm9sdGFnZS4gVGhlcmUgaXMgYWxzbyBhIHdhdGNoZG9nIGNvdW50ZXIgb24KLXRoZSBjaGlwIHdoaWNoIGNhbiB0cmlnZ2VyIGFuIGFsYXJtIGFuZCBldmVuIHNodXQgdGhlIHN5c3RlbSBkb3duLgotCi1UaGUgY2hpcCBwcm92aWRlcyB0aHJlZSB0ZW1wZXJhdHVyZSB2YWx1ZXMgKENQVSwgbW90aGVyYm9hcmQgYW5kCi1hdXhpbGlhcnkpLCB0aHJlZSB2b2x0YWdlIHZhbHVlcyAoKzEyViwgKzVWIGFuZCBiYXR0ZXJ5KSBhbmQgdGhyZWUgZmFucwotKHBvd2VyIHN1cHBseSwgQ1BVIGFuZCBhdXhpbGlhcnkpLgotCi1UZW1wZXJhdHVyZXMgYXJlIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cy4gVGhlIHJlc29sdXRpb24gaXMgMSBkZWdyZWUuCi0KLUZhbiByb3RhdGlvbiBzcGVlZHMgYXJlIHJlcG9ydGVkIGluIFJQTSAocm90YXRpb25zIHBlciBtaW51dGUpLiBUaGUgdmFsdWUKLWNhbiBiZSBkaXZpZGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIGRpdmlkZXIgKDEsIDIgb3IgNCkgd2hpY2ggaXMgc3RvcmVkIG9uCi10aGUgY2hpcC4KLQotVm9sdGFnZSBzZW5zb3JzIChhbHNvIGtub3duIGFzICJpbiIgc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiB2b2x0cy4KLQotQWxsIHZhbHVlcyBhcmUgcmVwb3J0ZWQgYXMgZmluYWwgdmFsdWVzIGZyb20gdGhlIGRyaXZlci4gVGhlcmUgaXMgbm8gbmVlZAotZm9yIGZ1cnRoZXIgY2FsY3VsYXRpb25zLgotCi0KLURldGFpbGVkIGRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CZWxvdyB5b3UnbGwgZmluZCBhIHNpbmdsZSBsaW5lIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgYml0IHZhbHVlcy4gV2l0aAotdGhpcyBpbmZvcm1hdGlvbiwgeW91J3JlIGFibGUgdG8gZGVjb2RlIGUuIGcuIGFsYXJtcywgd2RvZywgZXRjLiBUbyBtYWtlCi11c2Ugb2YgdGhlIHdhdGNoZG9nLCB5b3UnbGwgbmVlZCB0byBzZXQgdGhlIHdhdGNoZG9nIHRpbWUgYW5kIGVuYWJsZSB0aGUKLXdhdGNoZG9nLiBBZnRlciB0aGF0IGl0IGlzIG5lY2Vzc2FyeSB0byByZXN0YXJ0IHRoZSB3YXRjaGRvZyB0aW1lIHdpdGhpbgotdGhlIHNwZWNpZmllZCBwZXJpb2Qgb2YgdGltZSwgb3IgYSBzeXN0ZW0gcmVzZXQgd2lsbCBvY2N1ci4KLQotKiByZXZpc2lvbgotICBSRUFESU5HICYgMHhmZiA9IDB4Pz86IEhFUk1FUyByZXZpc2lvbiBpZGVudGlmaWNhdGlvbgotCi0qIGFsYXJtcwotICBSRUFESU5HICYgMHg4MCA9IDB4ODA6IENQVSB0aHJvdHRsaW5nIGFjdGl2ZQotICBSRUFESU5HICYgMHg4MCA9IDB4MDA6IENQVSBydW5uaW5nIGF0IGZ1bGwgc3BlZWQKLQotICBSRUFESU5HICYgMHgxMCA9IDB4MTA6IHNvZnR3YXJlIGV2ZW50IChzZWUgY29udHJvbDoxKQotICBSRUFESU5HICYgMHgxMCA9IDB4MDA6IG5vIHNvZnR3YXJlIGV2ZW50Ci0KLSAgUkVBRElORyAmIDB4MDggPSAweDA4OiB3YXRjaGRvZyBldmVudCAoc2VlIHdkb2c6MikKLSAgUkVBRElORyAmIDB4MDggPSAweDAwOiBubyB3YXRjaGRvZyBldmVudAotCi0gIFJFQURJTkcgJiAweDAyID0gMHgwMjogdGhlcm1hbCBldmVudCAoc2VlIHRlbXAqOjEpCi0gIFJFQURJTkcgJiAweDAyID0gMHgwMDogbm8gdGhlcm1hbCBldmVudAotCi0gIFJFQURJTkcgJiAweDAxID0gMHgwMTogZmFuIGV2ZW50IChzZWUgZmFuKjoxKQotICBSRUFESU5HICYgMHgwMSA9IDB4MDA6IG5vIGZhbiBldmVudAotCi0gIFJFQURJTkcgJiAweDEzICEgMHgwMDogQUxFUlQgTEVEIGlzIGZsYXNoaW5nCi0KLSogY29udHJvbAotICBSRUFESU5HICYgMHgwMSA9IDB4MDE6IHNvZnR3YXJlIGV2ZW50Ci0gIFJFQURJTkcgJiAweDAxID0gMHgwMDogbm8gc29mdHdhcmUgZXZlbnQKLQotICBXUklUSU5HICYgMHgwMSA9IDB4MDE6IHNldCBzb2Z0d2FyZSBldmVudAotICBXUklUSU5HICYgMHgwMSA9IDB4MDA6IGNsZWFyIHNvZnR3YXJlIGV2ZW50Ci0KLSogd2F0Y2hkb2dfY29udHJvbAotICBSRUFESU5HICYgMHg4MCA9IDB4ODA6IHBvd2VyIG9mZiBvbiB3YXRjaGRvZyBldmVudCB3aGlsZSB0aGVybWFsIGV2ZW50Ci0gIFJFQURJTkcgJiAweDgwID0gMHgwMDogd2F0Y2hkb2cgcG93ZXIgb2ZmIGRpc2FibGVkIChqdXN0IHN5c3RlbSByZXNldCBlbmFibGVkKQotCi0gIFJFQURJTkcgJiAweDQwID0gMHg0MDogd2F0Y2hkb2cgdGltZWJhc2UgNjAgc2Vjb25kcyAoc2VlIGFsc28gd2RvZzoxKQotICBSRUFESU5HICYgMHg0MCA9IDB4MDA6IHdhdGNoZG9nIHRpbWViYXNlICAyIHNlY29uZHMKLQotICBSRUFESU5HICYgMHgxMCA9IDB4MTA6IHdhdGNoZG9nIGVuYWJsZWQKLSAgUkVBRElORyAmIDB4MTAgPSAweDAwOiB3YXRjaGRvZyBkaXNhYmxlZAotCi0gIFdSSVRJTkcgJiAweDgwID0gMHg4MDogZW5hYmxlICJwb3dlciBvZmYgb24gd2F0Y2hkb2cgZXZlbnQgd2hpbGUgdGhlcm1hbCBldmVudCIKLSAgV1JJVElORyAmIDB4ODAgPSAweDAwOiBkaXNhYmxlICJwb3dlciBvZmYgb24gd2F0Y2hkb2cgZXZlbnQgd2hpbGUgdGhlcm1hbCBldmVudCIKLQotICBXUklUSU5HICYgMHg0MCA9IDB4NDA6IHNldCB3YXRjaGRvZyB0aW1lYmFzZSB0byA2MCBzZWNvbmRzCi0gIFdSSVRJTkcgJiAweDQwID0gMHgwMDogc2V0IHdhdGNoZG9nIHRpbWViYXNlIHRvICAyIHNlY29uZHMKLQotICBXUklUSU5HICYgMHgyMCA9IDB4MjA6IGRpc2FibGUgd2F0Y2hkb2cKLQotICBXUklUSU5HICYgMHgxMCA9IDB4MTA6IGVuYWJsZSB3YXRjaGRvZyAvIHJlc3RhcnQgd2F0Y2hkb2cgdGltZQotCi0qIHdhdGNoZG9nX3N0YXRlCi0gIFJFQURJTkcgJiAweDAyID0gMHgwMjogd2F0Y2hkb2cgc3lzdGVtIHJlc2V0IG9jY3VycmVkCi0gIFJFQURJTkcgJiAweDAyID0gMHgwMDogbm8gd2F0Y2hkb2cgc3lzdGVtIHJlc2V0IG9jY3VycmVkCi0KLSAgV1JJVElORyAmIDB4MDIgPSAweDAyOiBjbGVhciB3YXRjaGRvZyBldmVudAotCi0qIHdhdGNoZG9nX3ByZXNldAotICBSRUFESU5HICYgMHhmZiA9IDB4Pz86IGNvbmZpZ3VyZWQgd2F0Y2ggZG9nIHRpbWUgaW4gdW5pdHMgKHNlZSB3ZG9nOjMgMHg0MCkKLQotICBXUklUSU5HICYgMHhmZiA9IDB4Pz86IGNvbmZpZ3VyZSB3YXRjaCBkb2cgdGltZSBpbiB1bml0cwotCi0qIGluKiAgICAgKDA6ICs1ViwgMTogKzEyViwgMjogb25ib2FyZCAzViBiYXR0ZXJ5KQotICBSRUFESU5HOiBhY3R1YWwgdm9sdGFnZSB2YWx1ZQotCi0qIHRlbXAqX3N0YXR1cyAgICgxOiBDUFUgc2Vuc29yLCAyOiBvbmJvYXJkIHNlbnNvciwgMzogYXV4aWxpYXJ5IHNlbnNvcikKLSAgUkVBRElORyAmIDB4MDIgPSAweDAyOiB0aGVybWFsIGV2ZW50IChvdmVydGVtcGVyYXR1cmUpCi0gIFJFQURJTkcgJiAweDAyID0gMHgwMDogbm8gdGhlcm1hbCBldmVudAotCi0gIFJFQURJTkcgJiAweDAxID0gMHgwMTogc2Vuc29yIGlzIHdvcmtpbmcKLSAgUkVBRElORyAmIDB4MDEgPSAweDAwOiBzZW5zb3IgaXMgZmF1bHR5Ci0KLSAgV1JJVElORyAmIDB4MDIgPSAweDAyOiBjbGVhciB0aGVybWFsIGV2ZW50Ci0KLSogdGVtcCpfaW5wdXQgICAoMTogQ1BVIHNlbnNvciwgMjogb25ib2FyZCBzZW5zb3IsIDM6IGF1eGlsaWFyeSBzZW5zb3IpCi0gIFJFQURJTkc6IGFjdHVhbCB0ZW1wZXJhdHVyZSB2YWx1ZQotCi0qIGZhbipfc3RhdHVzICAgKDE6IHBvd2VyIHN1cHBseSBmYW4sIDI6IENQVSBmYW4sIDM6IGF1eGlsaWFyeSBmYW4pCi0gIFJFQURJTkcgJiAweDA0ID0gMHgwNDogZmFuIGV2ZW50IChmYW4gZmF1bHQpCi0gIFJFQURJTkcgJiAweDA0ID0gMHgwMDogbm8gZmFuIGV2ZW50Ci0KLSAgV1JJVElORyAmIDB4MDQgPSAweDA0OiBjbGVhciBmYW4gZXZlbnQKLQotKiBmYW4qX2RpdiAoMTogcG93ZXIgc3VwcGx5IGZhbiwgMjogQ1BVIGZhbiwgMzogYXV4aWxpYXJ5IGZhbikKLSAgCURpdmlzb3JzIDIsNCBhbmQgOCBhcmUgc3VwcG9ydGVkLCBib3RoIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCi0KLSogZmFuKl9wd20gICAoMTogcG93ZXIgc3VwcGx5IGZhbiwgMjogQ1BVIGZhbiwgMzogYXV4aWxpYXJ5IGZhbikKLSAgUkVBRElORyAmIDB4ZmYgPSAweDAwOiBmYW4gbWF5IGJlIHN3aXRjaGVkIG9mZgotICBSRUFESU5HICYgMHhmZiA9IDB4MDE6IGZhbiBtdXN0IHJ1biBhdCBsZWFzdCBhdCBtaW5pbXVtIHNwZWVkIChzdXBwbHk6IDZWKQotICBSRUFESU5HICYgMHhmZiA9IDB4ZmY6IGZhbiBtdXN0IHJ1biBhdCBtYXhpbXVtIHNwZWVkIChzdXBwbHk6IDEyVikKLSAgUkVBRElORyAmIDB4ZmYgPSAweD8/OiBmYW4gbXVzdCBydW4gYXQgbGVhc3QgYXQgZ2l2ZW4gc3BlZWQgKHN1cHBseTogNlYuLjEyVikKLQotICBXUklUSU5HICYgMHhmZiA9IDB4MDA6IGZhbiBtYXkgYmUgc3dpdGNoZWQgb2ZmCi0gIFdSSVRJTkcgJiAweGZmID0gMHgwMTogZmFuIG11c3QgcnVuIGF0IGxlYXN0IGF0IG1pbmltdW0gc3BlZWQgKHN1cHBseTogNlYpCi0gIFdSSVRJTkcgJiAweGZmID0gMHhmZjogZmFuIG11c3QgcnVuIGF0IG1heGltdW0gc3BlZWQgKHN1cHBseTogMTJWKQotICBXUklUSU5HICYgMHhmZiA9IDB4Pz86IGZhbiBtdXN0IHJ1biBhdCBsZWFzdCBhdCBnaXZlbiBzcGVlZCAoc3VwcGx5OiA2Vi4uMTJWKQotCi0qIGZhbipfaW5wdXQgICAoMTogcG93ZXIgc3VwcGx5IGZhbiwgMjogQ1BVIGZhbiwgMzogYXV4aWxpYXJ5IGZhbikKLSAgUkVBRElORzogYWN0dWFsIFJQTSB2YWx1ZQotCi0KLUxpbWl0YXRpb25zCi0tLS0tLS0tLS0tLQotCi0qIE1lYXN1cmluZyBmYW4gc3BlZWQKLUl0IHNlZW1zIHRoYXQgdGhlIGNoaXAgY291bnRzICJyaXBwbGVzIiAodHlwaWNhbCBmYW5zIHByb2R1Y2UgMiByaXBwbGVzIHBlcgotcm90YXRpb24gd2hpbGUgVkVSQVggZmFucyBwcm9kdWNlIDE4KSBpbiBhIDktYml0IHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGlzCi1yZWFkIG91dCBldmVyeSBzZWNvbmQsIHRoZW4gdGhlIHJpcHBsZSBwcmVzY2FsZXIgKDIsIDQgb3IgOCkgaXMgYXBwbGllZCBhbmQKLXRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSA4IGJpdCBvdXRwdXQgcmVnaXN0ZXIuIER1ZSB0byB0aGUgbGltaXRhdGlvbiBvZgotdGhlIGNvdW50aW5nIHJlZ2lzdGVyIHRvIDkgYml0cywgaXQgaXMgaW1wb3NzaWJsZSB0byBtZWFzdXJlIGEgVkVSQVggZmFuCi1wcm9wZXJseSAoZXZlbiB3aXRoIGEgcHJlc2NhbGVyIG9mIDgpLiBBdCBpdHMgbWF4aW11bSBzcGVlZCBvZiAzNTAwIFJQTSB0aGUKLWZhbiBwcm9kdWNlcyAxMDgwIHJpcHBsZXMgcGVyIHNlY29uZCB3aGljaCBjYXVzZXMgdGhlIGNvdW50aW5nIHJlZ2lzdGVyIHRvCi1vdmVyZmxvdyB0d2ljZSwgbGVhZGluZyB0byBvbmx5IDE4NiBSUE0uCi0KLSogTWVhc3VyaW5nIGlucHV0IHZvbHRhZ2VzCi1pbjIgKCJiYXR0ZXJ5IikgcmVwb3J0cyB0aGUgdm9sdGFnZSBvZiB0aGUgb25ib2FyZCBsaXRoaXVtIGJhdHRlcnkgYW5kIG5vdAotKzMuM1YgZnJvbSB0aGUgcG93ZXIgc3VwcGx5LgotCi0qIFVuZG9jdW1lbnRlZCBmZWF0dXJlcwotRnVqaXRzdS1TaWVtZW5zIENvbXB1dGVycyBoYXMgbm90IGRvY3VtZW50ZWQgYWxsIGZlYXR1cmVzIG9mIHRoZSBjaGlwIHNvCi1mYXIuIFRoZWlyIHNvZnR3YXJlLCBTeXN0ZW0gR3VhcmQsIHNob3dzIHRoYXQgdGhlcmUgYXJlIGEgc3RpbGwgc29tZQotZmVhdHVyZXMgd2hpY2ggY2Fubm90IGJlIGNvbnRyb2xsZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vaHBmYWxsLmMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2hwZmFsbC5jCmluZGV4IGJiZWExY2MuLjY4MWVjMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vaHBmYWxsLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9ocGZhbGwuYwpAQCAtMTYsNiArMTYsMzQgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKworY2hhciB1bmxvYWRfaGVhZHNfcGF0aFs2NF07CisKK2ludCBzZXRfdW5sb2FkX2hlYWRzX3BhdGgoY2hhciAqZGV2aWNlKQoreworCWNoYXIgZGV2bmFtZVs2NF07CisKKwlpZiAoc3RybGVuKGRldmljZSkgPD0gNSB8fCBzdHJuY21wKGRldmljZSwgIi9kZXYvIiwgNSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3RybmNweShkZXZuYW1lLCBkZXZpY2UgKyA1LCBzaXplb2YoZGV2bmFtZSkpOworCisJc25wcmludGYodW5sb2FkX2hlYWRzX3BhdGgsIHNpemVvZih1bmxvYWRfaGVhZHNfcGF0aCksCisJCQkJIi9zeXMvYmxvY2svJXMvZGV2aWNlL3VubG9hZF9oZWFkcyIsIGRldm5hbWUpOworCXJldHVybiAwOworfQoraW50IHZhbGlkX2Rpc2sodm9pZCkKK3sKKwlpbnQgZmQgPSBvcGVuKHVubG9hZF9oZWFkc19wYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IodW5sb2FkX2hlYWRzX3BhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwljbG9zZShmZCk7CisJcmV0dXJuIDE7Cit9CiAKIHZvaWQgd3JpdGVfaW50KGNoYXIgKnBhdGgsIGludCBpKQogewpAQCAtNDAsNyArNjgsNyBAQAogCiB2b2lkIHByb3RlY3QoaW50IHNlY29uZHMpCiB7Ci0Jd3JpdGVfaW50KCIvc3lzL2Jsb2NrL3NkYS9kZXZpY2UvdW5sb2FkX2hlYWRzIiwgc2Vjb25kcyoxMDAwKTsKKwl3cml0ZV9pbnQodW5sb2FkX2hlYWRzX3BhdGgsIHNlY29uZHMqMTAwMCk7CiB9CiAKIGludCBvbl9hYyh2b2lkKQpAQCAtNTcsNDUgKzg1LDYyIEBACiB7CiAJcHJvdGVjdCgwKTsKIAlzZXRfbGVkKDApOwotCiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gICAgICAgaW50IGZkLCByZXQ7CisJaW50IGZkLCByZXQ7CisJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogCi0gICAgICAgZmQgPSBvcGVuKCIvZGV2L2ZyZWVmYWxsIiwgT19SRE9OTFkpOwotICAgICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgICAgICAgIHBlcnJvcigib3BlbiIpOwotICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICAgICB9CisJaWYgKGFyZ2MgPT0gMSkKKwkJcmV0ID0gc2V0X3VubG9hZF9oZWFkc19wYXRoKCIvZGV2L3NkYSIpOworCWVsc2UgaWYgKGFyZ2MgPT0gMikKKwkJcmV0ID0gc2V0X3VubG9hZF9oZWFkc19wYXRoKGFyZ3ZbMV0pOworCWVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKworCWlmIChyZXQgfHwgIXZhbGlkX2Rpc2soKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyA8ZGV2aWNlPiAoZGVmYXVsdDogL2Rldi9zZGEpXG4iLAorCQkJCWFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKworCWZkID0gb3BlbigiL2Rldi9mcmVlZmFsbCIsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcigiL2Rldi9mcmVlZmFsbCIpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCWRhZW1vbigwLCAwKTsKKwlwYXJhbS5zY2hlZF9wcmlvcml0eSA9IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfRklGTyk7CisJc2NoZWRfc2V0c2NoZWR1bGVyKDAsIFNDSEVEX0ZJRk8sICZwYXJhbSk7CisJbWxvY2thbGwoTUNMX0NVUlJFTlR8TUNMX0ZVVFVSRSk7CiAKIAlzaWduYWwoU0lHQUxSTSwgaWdub3JlX21lKTsKIAotICAgICAgIGZvciAoOzspIHsKLQkgICAgICAgdW5zaWduZWQgY2hhciBjb3VudDsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGNoYXIgY291bnQ7CiAKLSAgICAgICAgICAgICAgIHJldCA9IHJlYWQoZmQsICZjb3VudCwgc2l6ZW9mKGNvdW50KSk7Ci0JICAgICAgIGFsYXJtKDApOwotCSAgICAgICBpZiAoKHJldCA9PSAtMSkgJiYgKGVycm5vID09IEVJTlRSKSkgewotCQkgICAgICAgLyogQWxhcm0gZXhwaXJlZCwgdGltZSB0byB1bnBhcmsgdGhlIGhlYWRzICovCi0JCSAgICAgICBjb250aW51ZTsKLQkgICAgICAgfQorCQlyZXQgPSByZWFkKGZkLCAmY291bnQsIHNpemVvZihjb3VudCkpOworCQlhbGFybSgwKTsKKwkJaWYgKChyZXQgPT0gLTEpICYmIChlcnJubyA9PSBFSU5UUikpIHsKKwkJCS8qIEFsYXJtIGV4cGlyZWQsIHRpbWUgdG8gdW5wYXJrIHRoZSBoZWFkcyAqLworCQkJY29udGludWU7CisJCX0KIAotICAgICAgICAgICAgICAgaWYgKHJldCAhPSBzaXplb2YoY291bnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigicmVhZCIpOwotICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgIH0KKwkJaWYgKHJldCAhPSBzaXplb2YoY291bnQpKSB7CisJCQlwZXJyb3IoInJlYWQiKTsKKwkJCWJyZWFrOworCQl9CiAKLQkgICAgICAgcHJvdGVjdCgyMSk7Ci0JICAgICAgIHNldF9sZWQoMSk7Ci0JICAgICAgIGlmICgxIHx8IG9uX2FjKCkgfHwgbGlkX29wZW4oKSkgewotCQkgICAgICAgYWxhcm0oMik7Ci0JICAgICAgIH0gZWxzZSB7Ci0JCSAgICAgICBhbGFybSgyMCk7Ci0JICAgICAgIH0KLSAgICAgICB9CisJCXByb3RlY3QoMjEpOworCQlzZXRfbGVkKDEpOworCQlpZiAoMSB8fCBvbl9hYygpIHx8IGxpZF9vcGVuKCkpCisJCQlhbGFybSgyKTsKKwkJZWxzZQorCQkJYWxhcm0oMjApOworCX0KIAotICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CmluZGV4IGQxZWJiZTUuLmRiNWNjMTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcKQEAgLTM0LDUgKzM0LDUgQEAKIHNpZ25hbC4gU3BlZWRzIGRvd24gdG8gODMgUlBNIGNhbiBiZSBtZWFzdXJlZC4KIAogQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSByb3RhdGlvbiBzcGVlZCBkcm9wcyBiZWxvdyBhIHByb2dyYW1tYWJsZQotbGltaXQuIEFub3RoZXIgYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSBzcGVlZCBpcyB0b28gbG93IHRvIHRvIGJlIG1lYXN1cmVkCitsaW1pdC4gQW5vdGhlciBhbGFybSBpcyB0cmlnZ2VyZWQgaWYgdGhlIHNwZWVkIGlzIHRvbyBsb3cgdG8gYmUgbWVhc3VyZWQKIChpbmNsdWRpbmcgc3RhbGxlZCBvciBtaXNzaW5nIGZhbikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NAppbmRleCBmODg5NDgxLi5jNWIzN2M1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKQEAgLTgsNiArOCw4IEBACiAgICAgRGF0YXNoZWV0OiBPbmx5IGF2YWlsYWJsZSB2aWEgTkRBIGZyb20gU2VydmVyV29ya3MKICAgKiBBVEkgSVhQMjAwLCBJWFAzMDAsIElYUDQwMCwgU0I2MDAsIFNCNzAwIGFuZCBTQjgwMCBzb3V0aGJyaWRnZXMKICAgICBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUKKyAgKiBBTUQgU0I5MDAKKyAgICBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUKICAgKiBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgKFNNU0MpIFNMQzkwRTY2IChWaWN0b3J5NjYpIHNvdXRoYnJpZGdlCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFNNU0Mgd2Vic2l0ZSBodHRwOi8vd3d3LnNtc2MuY29tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3BjYTk1MzkgYi9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2E5NTM5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZmODkwLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3BjYTk1MzkKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1LZXJuZWwgZHJpdmVyIHBjYTk1MzkKLT09PT09PT09PT09PT09PT09PT09PQotCi1OT1RFOiB0aGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIGRyb3BwZWQgc29vbiwgdXNlCi1kcml2ZXJzL2dwaW8vcGNhOTUzOS5jIGluc3RlYWQuCi0KLVN1cHBvcnRlZCBjaGlwczoKLSAgKiBQaGlsaXBzIFBDQTk1MzkKLSAgICBQcmVmaXg6ICdwY2E5NTM5JwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lCi0gICAgRGF0YXNoZWV0OgotICAgICAgICBodHRwOi8vd3d3LnNlbWljb25kdWN0b3JzLnBoaWxpcHMuY29tL2Fjcm9iYXQvZGF0YXNoZWV0cy9QQ0E5NTM5XzIucGRmCi0KLUF1dGhvcjogQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+Ci0KLQotRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0tCi0KLVRoZSBQaGlsaXBzIFBDQTk1MzkgaXMgYSAxNiBiaXQgbG93IHBvd2VyIEkvTyBkZXZpY2UuCi1BbGwgMTYgbGluZXMgY2FuIGJlIGluZGl2aWR1YWxseSBjb25maWd1cmVkIGFzIGFuIGlucHV0IG9yIG91dHB1dC4KLVRoZSBpbnB1dCBzZW5zZSBjYW4gYWxzbyBiZSBpbnZlcnRlZC4KLVRoZSAxNiBsaW5lcyBhcmUgc3BsaXQgYmV0d2VlbiB0d28gYnl0ZXMuCi0KLQotRGV0ZWN0aW9uCi0tLS0tLS0tLS0KLQotVGhlIFBDQTk1MzkgaXMgZGlmZmljdWx0IHRvIGRldGVjdCBhbmQgbm90IGNvbW1vbmx5IGZvdW5kIGluIFBDIG1hY2hpbmVzLAotc28geW91IGhhdmUgdG8gcGFzcyB0aGUgSTJDIGJ1cyBhbmQgYWRkcmVzcyBvZiB0aGUgaW5zdGFsbGVkIFBDQTk1MzkKLWRldmljZXMgZXhwbGljaXRseSB0byB0aGUgZHJpdmVyIGF0IGxvYWQgdGltZSB2aWEgdGhlIGZvcmNlPS4uLiBwYXJhbWV0ZXIuCi0KLQotU3lzZnMgZW50cmllcwotLS0tLS0tLS0tLS0tLQotCi1FYWNoIGlzIGEgYnl0ZSB0aGF0IG1hcHMgdG8gdGhlIDggSS9PIGJpdHMuCi1BICcwJyBzdWZmaXggaXMgZm9yIGJpdHMgMC03LCB3aGlsZSAnMScgaXMgZm9yIGJpdHMgOC0xNS4KLQotaW5wdXRbMDFdICAgICAtIHJlYWQgdGhlIGN1cnJlbnQgdmFsdWUKLW91dHB1dFswMV0gICAgLSBzZXRzIHRoZSBvdXRwdXQgdmFsdWUKLWRpcmVjdGlvblswMV0gLSBkaXJlY3Rpb24gb2YgZWFjaCBiaXQ6IDE9aW5wdXQsIDA9b3V0cHV0Ci1pbnZlcnRbMDFdICAgIC0gdG9nZ2xlIHRoZSBpbnB1dCBiaXQgc2Vuc2UKLQotaW5wdXQgcmVhZHMgdGhlIGFjdHVhbCBzdGF0ZSBvZiB0aGUgbGluZSBhbmQgaXMgYWx3YXlzIGF2YWlsYWJsZS4KLVRoZSBkaXJlY3Rpb24gZGVmYXVsdHMgdG8gaW5wdXQgZm9yIGFsbCBjaGFubmVscy4KLQotCi1HZW5lcmFsIFJlbWFya3MKLS0tLS0tLS0tLS0tLS0tLQotCi1Ob3RlIHRoYXQgZWFjaCBvdXRwdXQsIGRpcmVjdGlvbiwgYW5kIGludmVydCBlbnRyeSBjb250cm9scyA4IGxpbmVzLgotWW91IHNob3VsZCB1c2UgdGhlIHJlYWQsIG1vZGlmeSwgd3JpdGUgc2VxdWVuY2UuCi1Gb3IgZXhhbXBsZS4gdG8gc2V0IG91dHB1dCBiaXQgMCBvZiAxLgotICB2YWw9JChjYXQgb3V0cHV0MCkKLSAgdmFsPSQoKCAkdmFsIHwgMSApKQotICBlY2hvICR2YWwgPiBvdXRwdXQwCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3BjZjg1NzQgYi9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTc0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzU4MTVjLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3BjZjg1NzQKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1LZXJuZWwgZHJpdmVyIHBjZjg1NzQKLT09PT09PT09PT09PT09PT09PT09PQotCi1TdXBwb3J0ZWQgY2hpcHM6Ci0gICogUGhpbGlwcyBQQ0Y4NTc0Ci0gICAgUHJlZml4OiAncGNmODU3NCcKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBQaGlsaXBzIFNlbWljb25kdWN0b3JzIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20vcGlwL1BDRjg1NzRQLmh0bWwKLQotICogUGhpbGlwcyBQQ0Y4NTc0QQotICAgIFByZWZpeDogJ3BjZjg1NzRhJwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5zZW1pY29uZHVjdG9ycy5waGlsaXBzLmNvbS9waXAvUENGODU3NFAuaHRtbAotCi1BdXRob3JzOgotICAgICAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LAotICAgICAgICBQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LAotICAgICAgICBEYW4gRWF0b24gPGRhbi5lYXRvbkByb2NrZXRsb2dpeC5jb20+LAotICAgICAgICBBdXJlbGllbiBKYXJubyA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+LAotICAgICAgICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4sCi0KLQotRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0tCi1UaGUgUENGODU3NChBKSBpcyBhbiA4LWJpdCBJL08gZXhwYW5kZXIgZm9yIHRoZSBJMkMgYnVzIHByb2R1Y2VkIGJ5IFBoaWxpcHMKLVNlbWljb25kdWN0b3JzLiBJdCBpcyBkZXNpZ25lZCB0byBwcm92aWRlIGEgYnl0ZSBJMkMgaW50ZXJmYWNlIHRvIHVwIHRvIDE2Ci1zZXBhcmF0ZSBkZXZpY2VzICg4IHggUENGODU3NCBhbmQgOCB4IFBDRjg1NzRBKS4KLQotVGhpcyBkZXZpY2UgY29uc2lzdHMgb2YgYSBxdWFzaS1iaWRpcmVjdGlvbmFsIHBvcnQuIEVhY2ggb2YgdGhlIGVpZ2h0IEkvT3MKLWNhbiBiZSBpbmRlcGVuZGVudGx5IHVzZWQgYXMgYW4gaW5wdXQgb3Igb3V0cHV0LiBUbyBzZXR1cCBhbiBJL08gYXMgYW4KLWlucHV0LCB5b3UgaGF2ZSB0byB3cml0ZSBhIDEgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3V0cHV0LgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbnMgc2VlIHRoZSBkYXRhc2hlZXQuCi0KLQotQWNjZXNzaW5nIFBDRjg1NzQoQSkgdmlhIC9zeXMgaW50ZXJmYWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBQQ0Y4NTc0KEEpIGlzIHBsYWlubHkgaW1wb3NzaWJsZSB0byBkZXRlY3QgISBTdHVwaWQgY2hpcC4KLVNvLCB5b3UgaGF2ZSB0byBwYXNzIHRoZSBJMkMgYnVzIGFuZCBhZGRyZXNzIG9mIHRoZSBpbnN0YWxsZWQgUENGODU3QQotYW5kIFBDRjg1NzRBIGRldmljZXMgZXhwbGljaXRseSB0byB0aGUgZHJpdmVyIGF0IGxvYWQgdGltZSB2aWEgdGhlCi1mb3JjZT0uLi4gcGFyYW1ldGVyLgotCi1PbiBkZXRlY3Rpb24gKGkuZS4gaW5zbW9kLCBtb2Rwcm9iZSBldCBhbC4pLCBkaXJlY3RvcmllcyBhcmUgYmVpbmcKLWNyZWF0ZWQgZm9yIGVhY2ggZGV0ZWN0ZWQgUENGODU3NChBKToKLQotL3N5cy9idXMvaTJjL2RldmljZXMvPDA+LTwxPi8KLXdoZXJlIDwwPiBpcyB0aGUgYnVzIHRoZSBjaGlwIHdhcyBkZXRlY3RlZCBvbiAoZS4gZy4gaTJjLTApCi1hbmQgPDE+IHRoZSBjaGlwIGFkZHJlc3MgKFsyMC4uMjddIG9yIFszOC4uM2ZdKToKLQotKGV4YW1wbGU6IC9zeXMvYnVzL2kyYy9kZXZpY2VzLzEtMDAyMC8pCi0KLUluc2lkZSB0aGVzZSBkaXJlY3RvcmllcywgdGhlcmUgYXJlIHR3byBmaWxlcyBlYWNoOgotcmVhZCBhbmQgd3JpdGUgKGFuZCBvbmUgZmlsZSB3aXRoIGNoaXAgbmFtZSkuCi0KLVRoZSByZWFkIGZpbGUgaXMgcmVhZC1vbmx5LiBSZWFkaW5nIGdpdmVzIHlvdSB0aGUgY3VycmVudCBJL08gaW5wdXQKLWlmIHRoZSBjb3JyZXNwb25kaW5nIG91dHB1dCBpcyBzZXQgYXMgMSwgb3RoZXJ3aXNlIHRoZSBjdXJyZW50IG91dHB1dAotdmFsdWUsIHRoYXQgaXMgdG8gc2F5IDAuCi0KLVRoZSB3cml0ZSBmaWxlIGlzIHJlYWQvd3JpdGUuIFdyaXRpbmcgYSB2YWx1ZSBvdXRwdXRzIGl0IG9uIHRoZSBJL08KLXBvcnQuIFJlYWRpbmcgcmV0dXJucyB0aGUgbGFzdCB3cml0dGVuIHZhbHVlLiBBcyBpdCBpcyBub3QgcG9zc2libGUKLXRvIHJlYWQgdGhpcyB2YWx1ZSBmcm9tIHRoZSBjaGlwLCB5b3UgbmVlZCB0byB3cml0ZSBhdCBsZWFzdCBvbmNlIHRvCi10aGlzIGZpbGUgYmVmb3JlIHlvdSBjYW4gcmVhZCBiYWNrIGZyb20gaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTc1IGIvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvcGNmODU3NQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiMjY4ZS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTc1CisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotQWJvdXQgdGhlIFBDRjg1NzUgY2hpcCBhbmQgdGhlIHBjZjg1NzUga2VybmVsIGRyaXZlcgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgUENGODU3NSBjaGlwIGlzIHByb2R1Y2VkIGJ5IHRoZSBmb2xsb3dpbmcgbWFudWZhY3R1cmVyczoKLQotICAqIFBoaWxpcHMgTlhQCi0gICAgaHR0cDovL3d3dy5ueHAuY29tLyMvcGlwL2NiPVt0eXBlPXByb2R1Y3QscGF0aD01MDgwNy80MTczNS80MTg1MCxmaW5hbD1QQ0Y4NTc1XzNdfHBpcD1bcGlwPVBDRjg1NzVfM11bMF0KLQotICAqIFRleGFzIEluc3RydW1lbnRzCi0gICAgaHR0cDovL2ZvY3VzLnRpLmNvbS9kb2NzL3Byb2QvZm9sZGVycy9wcmludC9wY2Y4NTc1Lmh0bWwKLQotCi1Tb21lIHZlbmRvcnMgc2VsbCBzbWFsbCBQQ0IncyB3aXRoIHRoZSBQQ0Y4NTc1IG1vdW50ZWQgb24gaXQuIFlvdSBjYW4gY29ubmVjdAotc3VjaCBhIGJvYXJkIHRvIGEgTGludXggaG9zdCB2aWEgZS5nLiBhbiBVU0IgdG8gSTJDIGludGVyZmFjZS4gRXhhbXBsZXMgb2YKLVBDQiBib2FyZHMgd2l0aCBhIFBDRjg1NzU6Ci0KLSAgKiBTRkUgQnJlYWtvdXQgQm9hcmQgZm9yIFBDRjg1NzUgSTJDIEV4cGFuZGVyIGJ5IFJvYm90U2hvcAotICAgIGh0dHA6Ly93d3cucm9ib3RzaG9wLmNhL2hvbWUvcHJvZHVjdHMvcm9ib3QtcGFydHMvZWxlY3Ryb25pY3MvYWRhcHRlcnMtY29udmVydGVycy9zZmUtcGNmODU3NS1pMmMtZXhwYW5kZXItYm9hcmQuaHRtbAotCi0gICogQnJlYWtvdXQgQm9hcmQgZm9yIFBDRjg1NzUgSTJDIEV4cGFuZGVyIGJ5IFNwYXJrIEZ1biBFbGVjdHJvbmljcwotICAgIGh0dHA6Ly93d3cuc3BhcmtmdW4uY29tL2NvbW1lcmNlL3Byb2R1Y3RfaW5mby5waHA/cHJvZHVjdHNfaWQ9ODEzMAotCi0KLURlc2NyaXB0aW9uCi0tLS0tLS0tLS0tLQotVGhlIFBDRjg1NzUgY2hpcCBpcyBhIDE2LWJpdCBJL08gZXhwYW5kZXIgZm9yIHRoZSBJMkMgYnVzLiBVcCB0byBlaWdodCBvZgotdGhlc2UgY2hpcHMgY2FuIGJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBJMkMgYnVzLiBZb3UgY2FuIGZpbmQgdGhpcwotY2hpcCBvbiBzb21lIGN1c3RvbSBkZXNpZ25lZCBoYXJkd2FyZSwgYnV0IHlvdSB3b24ndCBmaW5kIGl0IG9uIFBDCi1tb3RoZXJib2FyZHMuCi0KLVRoZSBQQ0Y4NTc1IGNoaXAgY29uc2lzdHMgb2YgYSAxNi1iaXQgcXVhc2ktYmlkaXJlY3Rpb25hbCBwb3J0IGFuZCBhbiBJMkMtYnVzCi1pbnRlcmZhY2UuIEVhY2ggb2YgdGhlIHNpeHRlZW4gSS9PJ3MgY2FuIGJlIGluZGVwZW5kZW50bHkgdXNlZCBhcyBhbiBpbnB1dCBvcgotYW4gb3V0cHV0LiBUbyBzZXQgdXAgYW4gSS9PIHBpbiBhcyBhbiBpbnB1dCwgeW91IGhhdmUgdG8gd3JpdGUgYSAxIHRvIHRoZQotY29ycmVzcG9uZGluZyBvdXRwdXQuCi0KLUZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdGhlIGRhdGFzaGVldC4KLQotCi1EZXRlY3Rpb24KLS0tLS0tLS0tLQotCi1UaGVyZSBpcyBubyBtZXRob2Qga25vd24gdG8gZGV0ZWN0IHdoZXRoZXIgYSBjaGlwIG9uIGEgZ2l2ZW4gSTJDIGFkZHJlc3MgaXMKLWEgUENGODU3NSBvciB3aGV0aGVyIGl0IGlzIGFueSBvdGhlciBJMkMgZGV2aWNlLCBzbyB5b3UgaGF2ZSB0byBwYXNzIHRoZSBJMkMKLWJ1cyBhbmQgYWRkcmVzcyBvZiB0aGUgaW5zdGFsbGVkIFBDRjg1NzUgZGV2aWNlcyBleHBsaWNpdGx5IHRvIHRoZSBkcml2ZXIgYXQKLWxvYWQgdGltZSB2aWEgdGhlIGZvcmNlPS4uLiBwYXJhbWV0ZXIuCi0KLS9zeXMgaW50ZXJmYWNlCi0tLS0tLS0tLS0tLS0tLQotCi1Gb3IgZWFjaCBhZGRyZXNzIG9uIHdoaWNoIGEgUENGODU3NSBjaGlwIHdhcyBmb3VuZCBvciBmb3JjZWQgdGhlIGZvbGxvd2luZwotZmlsZXMgd2lsbCBiZSBjcmVhdGVkIHVuZGVyIC9zeXM6Ci0qIC9zeXMvYnVzL2kyYy9kZXZpY2VzLzxidXM+LTxhZGRyZXNzPi9yZWFkCi0qIC9zeXMvYnVzL2kyYy9kZXZpY2VzLzxidXM+LTxhZGRyZXNzPi93cml0ZQotd2hlcmUgYnVzIGlzIHRoZSBJMkMgYnVzIG51bWJlciAoMCwgMSwgLi4uKSBhbmQgYWRkcmVzcyBpcyB0aGUgZm91ci1kaWdpdAotaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIDctYml0IEkyQyBhZGRyZXNzIG9mIHRoZSBQQ0Y4NTc1Ci0oMDAyMCAuLiAwMDI3KS4KLQotVGhlIHJlYWQgZmlsZSBpcyByZWFkLW9ubHkuIFJlYWRpbmcgaXQgd2lsbCB0cmlnZ2VyIGFuIEkyQyByZWFkIGFuZCB3aWxsIGhlbmNlCi1yZXBvcnQgdGhlIGN1cnJlbnQgaW5wdXQgc3RhdGUgZm9yIHRoZSBwaW5zIGNvbmZpZ3VyZWQgYXMgaW5wdXRzLCBhbmQgdGhlCi1jdXJyZW50IG91dHB1dCB2YWx1ZSBmb3IgdGhlIHBpbnMgY29uZmlndXJlZCBhcyBvdXRwdXRzLgotCi1UaGUgd3JpdGUgZmlsZSBpcyByZWFkLXdyaXRlLiBXcml0aW5nIGEgdmFsdWUgdG8gaXQgd2lsbCBjb25maWd1cmUgYWxsIHBpbnMKLWFzIG91dHB1dCBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHplcm8uIFJlYWRpbmcgdGhlIHdyaXRlIGZpbGUgd2lsbAotcmV0dXJuIHRoZSB2YWx1ZSBsYXN0IHdyaXR0ZW4sIG9yIC1FQUdBSU4gaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8KLXRoZSB3cml0ZSBmaWxlLgotCi1PbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNoaXAgaXMgbm90IGNoYW5nZWQgLS0gdGhlCi1jaGlwIGlzIGxlZnQgaW4gdGhlIHN0YXRlIGl0IHdhcyBhbHJlYWR5IGNvbmZpZ3VyZWQgaW4gdGhyb3VnaCBlaXRoZXIgcG93ZXItdXAKLW9yIHRocm91Z2ggcHJldmlvdXMgSTJDIHdyaXRlIGFjdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jIGIvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLXRlc3QuYwppbmRleCBkMjM2MTBmLi4zZGZiNzZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9hbGlhc2luZy10ZXN0LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogaW50IHN1bTsKIAotaW50IG1hcF9tZW0oY2hhciAqcGF0aCwgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoLCBpbnQgdG91Y2gpCitzdGF0aWMgaW50IG1hcF9tZW0oY2hhciAqcGF0aCwgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoLCBpbnQgdG91Y2gpCiB7CiAJaW50IGZkLCByYzsKIAl2b2lkICphZGRyOwpAQCAtNjIsNyArNjIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc2Nhbl90cmVlKGNoYXIgKnBhdGgsIGNoYXIgKmZpbGUsIG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgaW50IHRvdWNoKQorc3RhdGljIGludCBzY2FuX3RyZWUoY2hhciAqcGF0aCwgY2hhciAqZmlsZSwgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoLCBpbnQgdG91Y2gpCiB7CiAJc3RydWN0IGRpcmVudCAqKm5hbWVsaXN0OwogCWNoYXIgKm5hbWUsICpwYXRoMjsKQEAgLTExOSw3ICsxMTksNyBAQAogCiBjaGFyIGJ1ZlsxMDI0XTsKIAotaW50IHJlYWRfcm9tKGNoYXIgKnBhdGgpCitzdGF0aWMgaW50IHJlYWRfcm9tKGNoYXIgKnBhdGgpCiB7CiAJaW50IGZkLCByYzsKIAlzaXplX3Qgc2l6ZSA9IDA7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotaW50IHNjYW5fcm9tKGNoYXIgKnBhdGgsIGNoYXIgKmZpbGUpCitzdGF0aWMgaW50IHNjYW5fcm9tKGNoYXIgKnBhdGgsIGNoYXIgKmZpbGUpCiB7CiAJc3RydWN0IGRpcmVudCAqKm5hbWVsaXN0OwogCWNoYXIgKm5hbWUsICpwYXRoMjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggMGYxN2QxNi4uNmZhNzI5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTY3MSw3ICs2NzEsNyBAQAogCWVhcmx5cHJpbnRrPQlbWDg2LFNILEJMQUNLRklOXQogCQkJZWFybHlwcmludGs9dmdhCiAJCQllYXJseXByaW50az1zZXJpYWxbLHR0eVNuWyxiYXVkcmF0ZV1dCi0JCQllYXJseXByaW50az1kYmdwCisJCQllYXJseXByaW50az1kYmdwW2RlYnVnQ29udHJvbGxlciNdCiAKIAkJCUFwcGVuZCAiLGtlZXAiIHRvIG5vdCBkaXNhYmxlIGl0IHdoZW4gdGhlIHJlYWwgY29uc29sZQogCQkJdGFrZXMgb3Zlci4KQEAgLTkzMyw3ICs5MzMsNyBAQAogCQkJMSAtLSBlbmFibGUgaW5mb3JtYXRpb25hbCBpbnRlZ3JpdHkgYXVkaXRpbmcgbWVzc2FnZXMuCiAKIAlpbWFfaGFzaD0JW0lNQV0KLQkJCUZvcm10OiB7ICJzaGExIiB8ICJtZDUiIH0KKwkJCUZvcm1hdDogeyAic2hhMSIgfCAibWQ1IiB9CiAJCQlkZWZhdWx0OiAic2hhMSIKIAogCWltYV90Y2IJCVtJTUFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ttZW1jaGVjay50eHQgYi9Eb2N1bWVudGF0aW9uL2ttZW1jaGVjay50eHQKaW5kZXggMzYzMDQ0Ni4uYzI4ZjgyOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rbWVtY2hlY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24va21lbWNoZWNrLnR4dApAQCAtNDMsMjYgKzQzLDcgQEAKIDEuIERvd25sb2FkaW5nCiA9PT09PT09PT09PT09PQogCi1rbWVtY2hlY2sgY2FuIG9ubHkgYmUgZG93bmxvYWRlZCB1c2luZyBnaXQuIElmIHlvdSB3YW50IHRvIHdyaXRlIHBhdGNoZXMKLWFnYWluc3QgdGhlIGN1cnJlbnQgY29kZSwgeW91IHNob3VsZCB1c2UgdGhlIGttZW1jaGVjayBkZXZlbG9wbWVudCBicmFuY2ggb2YKLXRoZSB0aXAgdHJlZS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgdGhlIGxpbnV4LW5leHQgdHJlZSwgd2hpY2ggYWxzbwotaW5jbHVkZXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGttZW1jaGVjay4KLQotQXNzdW1pbmcgdGhhdCB5b3UndmUgYWxyZWFkeSBjbG9uZWQgdGhlIGxpbnV4LTIuNi5naXQgcmVwb3NpdG9yeSwgYWxsIHlvdQotaGF2ZSB0byBkbyBpcyBhZGQgdGhlIC10aXAgdHJlZSBhcyBhIHJlbW90ZSwgbGlrZSB0aGlzOgotCi0JJCBnaXQgcmVtb3RlIGFkZCB0aXAgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdAotCi1UbyBhY3R1YWxseSBkb3dubG9hZCB0aGUgdHJlZSwgZmV0Y2ggdGhlIHJlbW90ZToKLQotCSQgZ2l0IGZldGNoIHRpcAotCi1BbmQgdG8gY2hlY2sgb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB3aXRoIHRoZSBrbWVtY2hlY2sgY29kZToKLQotCSQgZ2l0IGNoZWNrb3V0IC1iIGttZW1jaGVjayB0aXAva21lbWNoZWNrCi0KLUdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgLXRpcCB0cmVlIGNhbiBiZSBmb3VuZCBoZXJlOgotaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL21pbmdvL3RpcC5naXQvcmVhZG1lLnR4dAorQXMgb2YgdmVyc2lvbiAyLjYuMzEtcmMxLCBrbWVtY2hlY2sgaXMgaW5jbHVkZWQgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4KIAogCiAyLiBDb25maWd1cmluZyBhbmQgY29tcGlsaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvYXN1cy1sYXB0b3AudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FzdXMtbGFwdG9wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWM1YmU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FzdXMtbGFwdG9wLnR4dApAQCAtMCwwICsxLDI1OCBAQAorQXN1cyBMYXB0b3AgRXh0cmFzCisKK1ZlcnNpb24gMC4xCitBdWd1c3QgNiwgMjAwOQorCitDb3JlbnRpbiBDaGFyeSA8Y29yZW50aW5jakBpa3NhaWYubmV0PgoraHR0cDovL2FjcGk0YXN1cy5zZi5uZXQvCisKKyBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBleHRyYSBmZWF0dXJlcyBvZiBBQ1BJLWNvbXBhdGlibGUgQVNVUyBsYXB0b3BzLgorIEl0IG1heSBhbHNvIHN1cHBvcnQgc29tZSBNRURJT04sIEpWQyBvciBWSUNUT1IgbGFwdG9wcyAoc3VjaCBhcyBNRURJT04gOTY3NSBvcgorIFZJQ1RPUiBYUDcyMTAgZm9yIGV4YW1wbGUpLiBJdCBtYWtlcyBhbGwgdGhlIGV4dHJhIGJ1dHRvbnMgZ2VuZXJhdGUgc3RhbmRhcmQKKyBBQ1BJIGV2ZW50cyB0aGF0IGdvIHRocm91Z2ggL3Byb2MvYWNwaS9ldmVudHMgYW5kIGlucHV0IGV2ZW50cyAobGlrZSBrZXlib2FyZHMpLgorIE9uIHNvbWUgbW9kZWxzIGFkZHMgc3VwcG9ydCBmb3IgY2hhbmdpbmcgdGhlIGRpc3BsYXkgYnJpZ2h0bmVzcyBhbmQgb3V0cHV0LAorIHN3aXRjaGluZyB0aGUgTENEIGJhY2tsaWdodCBvbiBhbmQgb2ZmLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYWxsb3dzIHlvdSB0bworIGJsaW5rIHRob3NlIGZhbmN5IExFRHMgaW50ZW5kZWQgZm9yIHJlcG9ydGluZyBtYWlsIGFuZCB3aXJlbGVzcyBzdGF0dXMuCisKK1RoaXMgZHJpdmVyIHN1cGVyY2VkZXMgdGhlIG9sZCBhc3VzX2FjcGkgZHJpdmVyLgorCitSZXF1aXJlbWVudHMKKy0tLS0tLS0tLS0tLQorCisgIEtlcm5lbCAyLjYuWCBzb3VyY2VzLCBjb25maWd1cmVkIGZvciB5b3VyIGNvbXB1dGVyLCB3aXRoIEFDUEkgc3VwcG9ydC4KKyAgWW91IGFsc28gbmVlZCBDT05GSUdfSU5QVVQgYW5kIENPTkZJR19BQ1BJLgorCitTdGF0dXMKKy0tLS0tLQorCisgVGhlIGZlYXR1cmVzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYXJlIHRoZSBmb2xsb3dpbmcgKHNlZSBiZWxvdyBmb3IKKyBkZXRhaWxlZCBkZXNjcmlwdGlvbik6CisKKyAtIEZuIGtleSBjb21iaW5hdGlvbnMKKyAtIEJsdWV0b290aCBlbmFibGUgYW5kIGRpc2FibGUKKyAtIFdsYW4gZW5hYmxlIGFuZCBkaXNhYmxlCisgLSBHUFMgZW5hYmxlIGFuZCBkaXNhYmxlCisgLSBWaWRlbyBvdXRwdXQgc3dpdGNoaW5nCisgLSBBbWJpZW50IExpZ2h0IFNlbnNvciBvbiBhbmQgb2ZmCisgLSBMRUQgY29udHJvbAorIC0gTEVEIERpc3BsYXkgY29udHJvbAorIC0gTENEIGJyaWdodG5lc3MgY29udHJvbAorIC0gTENEIG9uIGFuZCBvZmYKKworIEEgY29tcGF0aWJpbGl0eSB0YWJsZSBieSBtb2RlbCBhbmQgZmVhdHVyZSBpcyBtYWludGFpbmVkIG9uIHRoZSB3ZWIKKyBzaXRlLCBodHRwOi8vYWNwaTRhc3VzLnNmLm5ldC8uCisKK1VzYWdlCistLS0tLQorCisgIFRyeSAibW9kcHJvYmUgYXN1c19hY3BpIi4gQ2hlY2sgeW91ciBkbWVzZyAoc2ltcGx5IHR5cGUgZG1lc2cpLiBZb3Ugc2hvdWxkCisgIHNlZSBzb21lIGxpbmVzIGxpa2UgdGhpcyA6CisKKyAgICAgIEFzdXMgTGFwdG9wIEV4dHJhcyB2ZXJzaW9uIDAuNDIKKyAgICAgICAgTDJEIG1vZGVsIGRldGVjdGVkLgorCisgIElmIGl0IGlzIG5vdCB0aGUgb3V0cHV0IHlvdSBoYXZlIG9uIHlvdXIgbGFwdG9wLCBzZW5kIGl0IChhbmQgdGhlIGxhcHRvcCdzCisgIERTRFQpIHRvIG1lLgorCisgIFRoYXQncyBhbGwsIG5vdywgYWxsIHRoZSBldmVudHMgZ2VuZXJhdGVkIGJ5IHRoZSBob3RrZXlzIG9mIHlvdXIgbGFwdG9wCisgIHNob3VsZCBiZSByZXBvcnRlZCBpbiB5b3VyIC9wcm9jL2FjcGkvZXZlbnQgZW50cnkuIFlvdSBjYW4gY2hlY2sgd2l0aAorICAiYWNwaV9saXN0ZW4iLgorCisgIEhvdGtleXMgYXJlIGFsc28gcmVwb3J0ZWQgYXMgaW5wdXQga2V5cyAobGlrZSBrZXlib2FyZHMpIHlvdSBjYW4gY2hlY2sKKyAgd2hpY2gga2V5IGFyZSBzdXBwb3J0ZWQgdXNpbmcgInhldiIgdW5kZXIgWDExLgorCisgIFlvdSBjYW4gZ2V0IGluZm9ybWF0aW9ucyBvbiB0aGUgdmVyc2lvbiBvZiB5b3VyIERTRFQgdGFibGUgYnkgcmVhZGluZyB0aGUKKyAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wL2luZm9zIGVudHJ5LiBJZiB5b3UgaGF2ZSBhIHF1ZXN0aW9uIG9yIGEKKyAgYnVnIHJlcG9ydCB0byBkbywgcGxlYXNlIGluY2x1ZGUgdGhlIG91dHB1dCBvZiB0aGlzIGVudHJ5LgorCitMRURzCistLS0tCisKKyAgWW91IGNhbiBtb2RpZnkgTEVEcyBiZSBlY2hvaW5nIHZhbHVlcyB0byAvc3lzL2NsYXNzL2xlZHMvYXN1czo6Ki9icmlnaHRuZXNzIDoKKyAgICBlY2hvIDEgPiAgL3N5cy9jbGFzcy9sZWRzL2FzdXM6Om1haWwvYnJpZ2h0bmVzcworICB3aWxsIHN3aXRjaCB0aGUgbWFpbCBMRUQgb24uCisgIFlvdSBjYW4gYWxzbyBrbm93IGlmIHRoZXkgYXJlIG9uL29mZiBieSByZWFkaW5nIHRoZWlyIGNvbnRlbnQgYW5kIHVzZQorICBrZXJuZWwgdHJpZ2dlcnMgbGlrZSBpZGUtZGlzayBvciBoZWFydGJlYXQuCisKK0JhY2tsaWdodAorLS0tLS0tLS0tCisKKyAgWW91IGNhbiBjb250cm9sIGxjZCBiYWNrbGlnaHQgcG93ZXIgYW5kIGJyaWdodG5lc3Mgd2l0aAorICAvc3lzL2NsYXNzL2JhY2tsaWdodC9hc3VzLWxhcHRvcC8uIEJyaWdodG5lc3MgVmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDE1LgorCitXaXJlbGVzcyBkZXZpY2VzCistLS0tLS0tLS0tLS0tLS0KKworICBZb3UgY2FuIHR1cm4gdGhlIGludGVybmFsIEJsdWV0b290aCBhZGFwdGVyIG9uL29mZiB3aXRoIHRoZSBibHVldG9vdGggZW50cnkKKyAgKG9ubHkgb24gbW9kZWxzIHdpdGggQmx1ZXRvb3RoKS4gVGhpcyB1c3VhbGx5IGNvbnRyb2xzIHRoZSBhc3NvY2lhdGVkIExFRC4KKyAgU2FtZSBmb3IgV2xhbiBhZGFwdGVyLgorCitEaXNwbGF5IHN3aXRjaGluZworLS0tLS0tLS0tLS0tLS0tLS0KKworICBOb3RlOiB0aGUgZGlzcGxheSBzd2l0Y2hpbmcgY29kZSBpcyBjdXJyZW50bHkgY29uc2lkZXJlZCBFWFBFUklNRU5UQUwuCisKKyAgU3dpdGNoaW5nIHdvcmtzIGZvciB0aGUgZm9sbG93aW5nIG1vZGVsczoKKyAgICBMMzgwMEMKKyAgICBBMjUwMEgKKyAgICBMNTgwMEMKKyAgICBNNTIwME4KKyAgICBXMTAwME4gKGFsYmVpdCB3aXRoIHNvbWUgZ2xpdGNoZXMpCisgICAgTTY3MDBSCisgICAgQTZKQworICAgIEYzSgorCisgIFN3aXRjaGluZyBkb2Vzbid0IHdvcmsgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAgTTM3MDBOCisgICAgTDJYMDBEIChsb2NrcyB0aGUgbGFwdG9wIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucykKKworICBUbyBzd2l0Y2ggdGhlIGRpc3BsYXlzLCBlY2hvIHZhbHVlcyBmcm9tIDAgdG8gMTUgdG8KKyAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wL2Rpc3BsYXkuIFRoZSBzaWduaWZpY2FuY2Ugb2YgdGhvc2UgdmFsdWVzCisgIGlzIGFzIGZvbGxvd3M6CisKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgIHwgQmluICAgfCBWYWwgfCBEVkkgfCBUViAgfCBDUlQgfCBMQ0QgfAorICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAwMDAwICArICAgMCArICAgICArICAgICArICAgICArICAgICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDAwMDEgICsgICAxICsgICAgICsgICAgICsgICAgICsgIFggICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMDAxMCAgKyAgIDIgKyAgICAgKyAgICAgKyAgWCAgKyAgICAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAwMDExICArICAgMyArICAgICArICAgICArICBYICArICBYICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDAxMDAgICsgICA0ICsgICAgICsgIFggICsgICAgICsgICAgICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMDEwMSAgKyAgIDUgKyAgICAgKyAgWCAgKyAgICAgKyBYICAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAwMTEwICArICAgNiArICAgICArICBYICArICBYICArICAgICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDAxMTEgICsgICA3ICsgICAgICsgIFggICsgIFggICsgIFggICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMTAwMCAgKyAgIDggKyAgWCAgKyAgICAgKyAgICAgKyAgICAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAxMDAxICArICAgOSArICBYICArICAgICArICAgICArICBYICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDEwMTAgICsgIDEwICsgIFggICsgICAgICsgIFggICsgICAgICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMTAxMSAgKyAgMTEgKyAgWCAgKyAgICAgKyAgWCAgKyAgWCAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAxMTAwICArICAxMiArICBYICArICBYICArICAgICArICAgICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDExMDEgICsgIDEzICsgIFggICsgIFggICsgICAgICsgIFggICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMTExMCAgKyAgMTQgKyAgWCAgKyAgWCAgKyAgWCAgKyAgICAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAxMTExICArICAxNSArICBYICArICBYICArICBYICArICBYICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworCisgIEluIG1vc3QgY2FzZXMsIHRoZSBhcHByb3ByaWF0ZSBkaXNwbGF5cyBtdXN0IGJlIHBsdWdnZWQgaW4gZm9yIHRoZSBhYm92ZQorICBjb21iaW5hdGlvbnMgdG8gd29yay4gVFYtT3V0IG1heSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGF0IGJvb3QgdGltZS4KKworICBEZWJ1Z2dpbmc6CisgIDEpIENoZWNrIHdoZXRoZXIgdGhlIEZuK0Y4IGtleToKKyAgICAgYSkgZG9lcyBub3QgbG9jayB0aGUgbGFwdG9wICh0cnkgZGlzYWJsaW5nIENPTkZJR19YODZfVVBfQVBJQyBvciBib290IHdpdGgKKyAgICAgICAgbm9hcGljIC8gbm9sYXBpYyBpZiBpdCBkb2VzKQorICAgICBiKSBnZW5lcmF0ZXMgZXZlbnRzICgweDZuLCB3aGVyZSBuIGlzIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBjb25maWd1cmF0aW9uIGFib3ZlKQorICAgICBjKSBhY3R1YWxseSB3b3JrcworICAgICBSZWNvcmQgdGhlIGRpc3AgdmFsdWUgYXQgZXZlcnkgY29uZmlndXJhdGlvbi4KKyAgMikgRWNobyB2YWx1ZXMgZnJvbSAwIHRvIDE1IHRvIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9kaXNwbGF5LgorICAgICBSZWNvcmQgaXRzIHZhbHVlLCBub3RlIGFueSBjaGFuZ2UuIElmIG5vdGhpbmcgY2hhbmdlcywgdHJ5IGEgYnJvYWRlciByYW5nZSwKKyAgICAgdXAgdG8gNjU1MzUuCisgIDMpIFNlbmQgQU5ZIG91dHB1dCAoYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgcmVwb3J0cyBhcmUgbmVlZGVkLCB1bmxlc3MgeW91cgorICAgICBtYWNoaW5lIGlzIGFscmVhZHkgbGlzdGVkIGFib3ZlKSB0byB0aGUgYWNwaTRhc3VzLXVzZXIgbWFpbGluZyBsaXN0LgorCisgIE5vdGU6IG9uIHNvbWUgbWFjaGluZXMgKGUuZy4gTDNDKSwgYWZ0ZXIgdGhlIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQsIG9ubHkgMHg2bgorICBldmVudHMgYXJlIGdlbmVyYXRlZCBhbmQgbm8gYWN0dWFsIHN3aXRjaGluZyBvY2N1cnMuIEluIHN1Y2ggYSBjYXNlLCBhIGxpbmUKKyAgbGlrZToKKworICAgIGVjaG8gJCgoMTAjJGFyZy02MCkpID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wL2Rpc3BsYXkKKworICB3aWxsIHVzdWFsbHkgZG8gdGhlIHRyaWNrICgkYXJnIGlzIHRoZSAwMDAwMDA2bi1saWtlIGV2ZW50IHBhc3NlZCB0byBhY3BpZCkuCisKKyAgTm90ZTogdGhlcmUgaXMgY3VycmVudGx5IG5vIHJlbGlhYmxlIHdheSB0byByZWFkIGRpc3BsYXkgc3RhdHVzIG9uIHh4TgorICAoQ2VudHJpbm8pIG1vZGVscy4KKworTEVEIGRpc3BsYXkKKy0tLS0tLS0tLS0tCisKKyAgU29tZSBtb2RlbHMgbGlrZSB0aGUgVzFOIGhhdmUgYSBMRUQgZGlzcGxheSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkKKyAgc2V2ZXJhbCBpbmZvcm1hdGlvbnMuCisKKyAgTEVEIGRpc3BsYXkgd29ya3MgZm9yIHRoZSBmb2xsb3dpbmcgbW9kZWxzOgorICAgIFcxMDAwTgorICAgIFcxSgorCisgIFRvIGNvbnRyb2wgdGhlIExFRCBkaXNwbGF5LCB1c2UgdGhlIGZvbGxvd2luZyA6CisKKyAgICBlY2hvIDB4MFQwMDBEREQgPiAvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvCisKKyAgd2hlcmUgVCBjb250cm9sIHRoZSAzIGxldHRlcnMgZGlzcGxheSwgYW5kIERERCB0aGUgMyBkaWdpdHMgZGlzcGxheSwKKyAgYWNjb3JkaW5nIHRvIHRoZSB0YWJsZXMgYmVsb3cuCisKKyAgICAgICAgIERERCAoZGlnaXRzKQorICAgICAgICAgMDAwIHRvIDk5OSA9IGRpc3BsYXkgZGlnaXRzCisgICAgICAgICBBQUEgICAgICAgID0gLS0tCisgICAgICAgICBCQkIgdG8gRkZGID0gdHVybi1vZmYKKworICAgICAgICAgVCAgKHR5cGUpCisgICAgICAgICAwID0gb2ZmCisgICAgICAgICAxID0gZHZkCisgICAgICAgICAyID0gdmNkCisgICAgICAgICAzID0gbXAzCisgICAgICAgICA0ID0gY2QKKyAgICAgICAgIDUgPSB0dgorICAgICAgICAgNiA9IGNwdQorICAgICAgICAgNyA9IHZvbAorCisgIEZvciBleGFtcGxlICJlY2hvIDB4MDEwMDAwMDEgPi9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9sZWRkIgorICB3b3VsZCBkaXNwbGF5ICJEVkQwMDEiLgorCitEcml2ZXIgb3B0aW9uczoKKy0tLS0tLS0tLS0tLS0tLQorCisgT3B0aW9ucyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBhc3VzLWxhcHRvcCBkcml2ZXIgdXNpbmcgdGhlIHN0YW5kYXJkCisgbW9kdWxlIGFyZ3VtZW50IHN5bnRheCAoPHBhcmFtPj08dmFsdWU+IHdoZW4gcGFzc2luZyB0aGUgb3B0aW9uIHRvIHRoZQorIG1vZHVsZSBvciBhc3VzLWxhcHRvcC48cGFyYW0+PTx2YWx1ZT4gb24gdGhlIGtlcm5lbCBib290IGxpbmUgd2hlbgorIGFzdXMtbGFwdG9wIGlzIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGtlcm5lbCkuCisKKwkgICAgIHdhcGY6IFdBUEYgZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIEZuK0Z4IHdsYW4ga2V5CisJCSAgIFRoZSBzaWduaWZpY2FuY2Ugb2YgdmFsdWVzIGlzIHlldCB0byBiZSBmb3VuZCwgYnV0CisJCSAgIG1vc3Qgb2YgdGhlIHRpbWU6CisJCSAgIC0gMHgwIHNob3VsZCBkbyBub3RoaW5nCisJCSAgIC0gMHgxIHNob3VsZCBhbGxvdyB0byBjb250cm9sIHRoZSBkZXZpY2Ugd2l0aCBGbitGeCBrZXkuCisJCSAgIC0gMHg0IHNob3VsZCBzZW5kIGFuIEFDUEkgZXZlbnQgKDB4ODgpIHdoaWxlIHByZXNzaW5nIHRoZSBGbitGeCBrZXkKKwkJICAgLSAweDUgbGlrZSAweDEgb3IgMHg0CisKKyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAweDEuCisKK1Vuc3VwcG9ydGVkIG1vZGVscworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBUaGVzZSBtb2RlbHMgd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGUsIGFzIHRoZXkgdXNlIGEgY29tcGxldGVseQorIGRpZmZlcmVudCBtZWNoYW5pc20gdG8gaGFuZGxlIExFRHMgYW5kIGV4dHJhIHN0dWZmIChtZWFuaW5nIHdlIGhhdmUgbm8gY2x1ZQorIGhvdyBpdCB3b3Jrcyk6CisKKyAtIEFTVVMgQTEzMDAgKEExQiksIEExMzcwRAorIC0gQVNVUyBMNzMwMEcKKyAtIEFTVVMgTDg0MDAKKworUGF0Y2hlcywgRXJyb3JzLCBRdWVzdGlvbnM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgSSBhcHByZWNpYXRlIGFueSBzdWNjZXNzIG9yIGZhaWx1cmUKKyByZXBvcnRzLCBlc3BlY2lhbGx5IGlmIHRoZXkgYWRkIHRvIG9yIGNvcnJlY3QgdGhlIGNvbXBhdGliaWxpdHkgdGFibGUuCisgUGxlYXNlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpbiB5b3VyIHJlcG9ydDoKKworIC0gQXN1cyBtb2RlbCBuYW1lCisgLSBhIGNvcHkgb2YgeW91ciBBQ1BJIHRhYmxlcywgdXNpbmcgdGhlICJhY3BpZHVtcCIgdXRpbGl0eQorIC0gYSBjb3B5IG9mIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9pbmZvcworIC0gd2hpY2ggZHJpdmVyIGZlYXR1cmVzIHdvcmsgYW5kIHdoaWNoIGRvbid0CisgLSB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3Igb2Ygbm9uLXdvcmtpbmcgZmVhdHVyZXMKKworIEFueSBvdGhlciBjb21tZW50cyBvciBwYXRjaGVzIGFyZSBhbHNvIG1vcmUgdGhhbiB3ZWxjb21lLgorCisgYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CisgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY3BpNGFzdXMKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CmluZGV4IGUyZGRjZGUuLjZkMDM0ODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKQEAgLTIxOSw3ICsyMTksNyBAQAogCWVjaG8gMHhmZmZmZmZmZiA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSBlbmFibGUgYWxsIGhvdCBrZXlzCiAJZWNobyAwID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGRpc2FibGUgYWxsIHBvc3NpYmxlIGhvdCBrZXlzCiAJLi4uIGFueSBvdGhlciA4LWhleC1kaWdpdCBtYXNrIC4uLgotCWVjaG8gcmVzZXQgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gcmVzdG9yZSB0aGUgb3JpZ2luYWwgbWFzaworCWVjaG8gcmVzZXQgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gcmVzdG9yZSB0aGUgcmVjb21tZW5kZWQgbWFzawogCiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIHRoZSBrZXJuZWwKIHRvIGxvZyBhIHdhcm5pbmc6CkBAIC0yNDAsOSArMjQwLDEzIEBACiAJCVJldHVybnMgMC4KIAogCWhvdGtleV9iaW9zX21hc2s6CisJCURFUFJFQ0FURUQsIERPTidUIFVTRSwgV0lMTCBCRSBSRU1PVkVEIElOIFRIRSBGVVRVUkUuCisKIAkJUmV0dXJucyB0aGUgaG90IGtleXMgbWFzayB3aGVuIHRoaW5rcGFkLWFjcGkgd2FzIGxvYWRlZC4KIAkJVXBvbiBtb2R1bGUgdW5sb2FkLCB0aGUgaG90IGtleXMgbWFzayB3aWxsIGJlIHJlc3RvcmVkCi0JCXRvIHRoaXMgdmFsdWUuCisJCXRvIHRoaXMgdmFsdWUuICAgVGhpcyBpcyBhbHdheXMgMHg4MGMsIGJlY2F1c2UgdGhvc2UgYXJlCisJCXRoZSBob3RrZXlzIHRoYXQgd2VyZSBzdXBwb3J0ZWQgYnkgYW5jaWVudCBmaXJtd2FyZQorCQl3aXRob3V0IG1hc2sgc3VwcG9ydC4KIAogCWhvdGtleV9lbmFibGU6CiAJCURFUFJFQ0FURUQsIFdJTEwgQkUgUkVNT1ZFRCBTT09OLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZWRzLWNsYXNzLnR4dCBiL0RvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQKaW5kZXggNjM5OTU1Ny4uOGZkNWNhMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzLWNsYXNzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xlZHMtY2xhc3MudHh0CkBAIC0xLDMgKzEsNCBAQAorCiBMRUQgaGFuZGxpbmcgdW5kZXIgTGludXgKID09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC01LDEwICs2LDEwIEBACiBoYW5kbGVkIGJ5IHRoZSBpbnB1dCBzdWJzeXN0ZW0gYW5kIHRoZSBsZWQgY2xhc3MgaXMgKm5vdCogbmVlZGVkLgogCiBJbiBpdHMgc2ltcGxlc3QgZm9ybSwgdGhlIExFRCBjbGFzcyBqdXN0IGFsbG93cyBjb250cm9sIG9mIExFRHMgZnJvbQotdXNlcnNwYWNlLiBMRURzIGFwcGVhciBpbiAvc3lzL2NsYXNzL2xlZHMvLiBUaGUgYnJpZ2h0bmVzcyBmaWxlIHdpbGwKLXNldCB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgTEVEICh0YWtpbmcgYSB2YWx1ZSAwLTI1NSkuIE1vc3QgTEVEcyBkb24ndAotaGF2ZSBoYXJkd2FyZSBicmlnaHRuZXNzIHN1cHBvcnQgc28gd2lsbCBqdXN0IGJlIHR1cm5lZCBvbiBmb3Igbm9uLXplcm8KLWJyaWdodG5lc3Mgc2V0dGluZ3MuCit1c2Vyc3BhY2UuIExFRHMgYXBwZWFyIGluIC9zeXMvY2xhc3MvbGVkcy8uIFRoZSBtYXhpbXVtIGJyaWdodG5lc3Mgb2YgdGhlCitMRUQgaXMgZGVmaW5lZCBpbiBtYXhfYnJpZ2h0bmVzcyBmaWxlLiBUaGUgYnJpZ2h0bmVzcyBmaWxlIHdpbGwgc2V0IHRoZSBicmlnaHRuZXNzCitvZiB0aGUgTEVEICh0YWtpbmcgYSB2YWx1ZSAwLW1heF9icmlnaHRuZXNzKS4gTW9zdCBMRURzIGRvbid0IGhhdmUgaGFyZHdhcmUKK2JyaWdodG5lc3Mgc3VwcG9ydCBzbyB3aWxsIGp1c3QgYmUgdHVybmVkIG9uIGZvciBub24temVybyBicmlnaHRuZXNzIHNldHRpbmdzLgogCiBUaGUgY2xhc3MgYWxzbyBpbnRyb2R1Y2VzIHRoZSBvcHRpb25hbCBjb25jZXB0IG9mIGFuIExFRCB0cmlnZ2VyLiBBIHRyaWdnZXIKIGlzIGEga2VybmVsIGJhc2VkIHNvdXJjZSBvZiBsZWQgZXZlbnRzLiBUcmlnZ2VycyBjYW4gZWl0aGVyIGJlIHNpbXBsZSBvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwppbmRleCA5NTBjZGU2Li5iYTkzNzNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgImxpbnV4L2xndWVzdF9sYXVuY2hlci5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25maWcuaCIKKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSAibGludXgvdmlydGlvX25ldC5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19ibGsuaCIKICNpbmNsdWRlICJsaW51eC92aXJ0aW9fY29uc29sZS5oIgpAQCAtMTMzLDYgKzEzNCw5IEBACiAJLyogSXMgaXQgb3BlcmF0aW9uYWwgKi8KIAlib29sIHJ1bm5pbmc7CiAKKwkvKiBEb2VzIEd1ZXN0IHdhbnQgYW4gaW50cnJ1cHQgb24gZW1wdHk/ICovCisJYm9vbCBpcnFfb25fZW1wdHk7CisKIAkvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YS4gKi8KIAl2b2lkICpwcml2OwogfTsKQEAgLTYyMywxMCArNjI3LDEzIEBACiAJCXJldHVybjsKIAl2cS0+cGVuZGluZ191c2VkID0gMDsKIAotCS8qIElmIHRoZXkgZG9uJ3Qgd2FudCBhbiBpbnRlcnJ1cHQsIGRvbid0IHNlbmQgb25lLCB1bmxlc3MgZW1wdHkuICovCi0JaWYgKCh2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpCi0JICAgICYmIGxnX2xhc3RfYXZhaWwodnEpICE9IHZxLT52cmluZy5hdmFpbC0+aWR4KQotCQlyZXR1cm47CisJLyogSWYgdGhleSBkb24ndCB3YW50IGFuIGludGVycnVwdCwgZG9uJ3Qgc2VuZCBvbmUuLi4gKi8KKwlpZiAodnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKSB7CisJCS8qIC4uLiB1bmxlc3MgdGhleSd2ZSBhc2tlZCB1cyB0byBmb3JjZSBvbmUgb24gZW1wdHkuICovCisJCWlmICghdnEtPmRldi0+aXJxX29uX2VtcHR5CisJCSAgICB8fCBsZ19sYXN0X2F2YWlsKHZxKSAhPSB2cS0+dnJpbmcuYXZhaWwtPmlkeCkKKwkJCXJldHVybjsKKwl9CiAKIAkvKiBTZW5kIHRoZSBHdWVzdCBhbiBpbnRlcnJ1cHQgdGVsbCB0aGVtIHdlIHVzZWQgc29tZXRoaW5nIHVwLiAqLwogCWlmICh3cml0ZShsZ3Vlc3RfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IDApCkBAIC0xMDQyLDYgKzEwNDksMTUgQEAKIAljbG9zZSh2cS0+ZXZlbnRmZCk7CiB9CiAKK3N0YXRpYyBib29sIGFjY2VwdGVkX2ZlYXR1cmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0KQoreworCWNvbnN0IHU4ICpmZWF0dXJlcyA9IGdldF9mZWF0dXJlX2JpdHMoZGV2KSArIGRldi0+ZmVhdHVyZV9sZW47CisKKwlpZiAoZGV2LT5mZWF0dXJlX2xlbiA8IGJpdCAvIENIQVJfQklUKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZlYXR1cmVzW2JpdCAvIENIQVJfQklUXSAmICgxIDw8IChiaXQgJSBDSEFSX0JJVCkpOworfQorCiBzdGF0aWMgdm9pZCBzdGFydF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTA1NSw2ICsxMDcxLDggQEAKIAkJdmVyYm9zZSgiICUwMngiLCBnZXRfZmVhdHVyZV9iaXRzKGRldikKIAkJCVtkZXYtPmZlYXR1cmVfbGVuK2ldKTsKIAorCWRldi0+aXJxX29uX2VtcHR5ID0gYWNjZXB0ZWRfZmVhdHVyZShkZXYsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSk7CisKIAlmb3IgKHZxID0gZGV2LT52cTsgdnE7IHZxID0gdnEtPm5leHQpIHsKIAkJaWYgKHZxLT5zZXJ2aWNlKQogCQkJY3JlYXRlX3RocmVhZCh2cSk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hcmtlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tYXJrZXJzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiM2QwZS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL21hcmtlcnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLSAJICAgICAgICAgICAgIFVzaW5nIHRoZSBMaW51eCBLZXJuZWwgTWFya2VycwotCi0JCQkgICAgTWF0aGlldSBEZXNub3llcnMKLQotCi1UaGlzIGRvY3VtZW50IGludHJvZHVjZXMgTGludXggS2VybmVsIE1hcmtlcnMgYW5kIHRoZWlyIHVzZS4gSXQgcHJvdmlkZXMKLWV4YW1wbGVzIG9mIGhvdyB0byBpbnNlcnQgbWFya2VycyBpbiB0aGUga2VybmVsIGFuZCBjb25uZWN0IHByb2JlIGZ1bmN0aW9ucyB0bwotdGhlbSBhbmQgcHJvdmlkZXMgc29tZSBleGFtcGxlcyBvZiBwcm9iZSBmdW5jdGlvbnMuCi0KLQotKiBQdXJwb3NlIG9mIG1hcmtlcnMKLQotQSBtYXJrZXIgcGxhY2VkIGluIGNvZGUgcHJvdmlkZXMgYSBob29rIHRvIGNhbGwgYSBmdW5jdGlvbiAocHJvYmUpIHRoYXQgeW91IGNhbgotcHJvdmlkZSBhdCBydW50aW1lLiBBIG1hcmtlciBjYW4gYmUgIm9uIiAoYSBwcm9iZSBpcyBjb25uZWN0ZWQgdG8gaXQpIG9yICJvZmYiCi0obm8gcHJvYmUgaXMgYXR0YWNoZWQpLiBXaGVuIGEgbWFya2VyIGlzICJvZmYiIGl0IGhhcyBubyBlZmZlY3QsIGV4Y2VwdCBmb3IKLWFkZGluZyBhIHRpbnkgdGltZSBwZW5hbHR5IChjaGVja2luZyBhIGNvbmRpdGlvbiBmb3IgYSBicmFuY2gpIGFuZCBzcGFjZQotcGVuYWx0eSAoYWRkaW5nIGEgZmV3IGJ5dGVzIGZvciB0aGUgZnVuY3Rpb24gY2FsbCBhdCB0aGUgZW5kIG9mIHRoZQotaW5zdHJ1bWVudGVkIGZ1bmN0aW9uIGFuZCBhZGRzIGEgZGF0YSBzdHJ1Y3R1cmUgaW4gYSBzZXBhcmF0ZSBzZWN0aW9uKS4gIFdoZW4gYQotbWFya2VyIGlzICJvbiIsIHRoZSBmdW5jdGlvbiB5b3UgcHJvdmlkZSBpcyBjYWxsZWQgZWFjaCB0aW1lIHRoZSBtYXJrZXIgaXMKLWV4ZWN1dGVkLCBpbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQgb2YgdGhlIGNhbGxlci4gV2hlbiB0aGUgZnVuY3Rpb24gcHJvdmlkZWQKLWVuZHMgaXRzIGV4ZWN1dGlvbiwgaXQgcmV0dXJucyB0byB0aGUgY2FsbGVyIChjb250aW51aW5nIGZyb20gdGhlIG1hcmtlciBzaXRlKS4KLQotWW91IGNhbiBwdXQgbWFya2VycyBhdCBpbXBvcnRhbnQgbG9jYXRpb25zIGluIHRoZSBjb2RlLiBNYXJrZXJzIGFyZQotbGlnaHR3ZWlnaHQgaG9va3MgdGhhdCBjYW4gcGFzcyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBhcmFtZXRlcnMsCi1kZXNjcmliZWQgaW4gYSBwcmludGstbGlrZSBmb3JtYXQgc3RyaW5nLCB0byB0aGUgYXR0YWNoZWQgcHJvYmUgZnVuY3Rpb24uCi0KLVRoZXkgY2FuIGJlIHVzZWQgZm9yIHRyYWNpbmcgYW5kIHBlcmZvcm1hbmNlIGFjY291bnRpbmcuCi0KLQotKiBVc2FnZQotCi1JbiBvcmRlciB0byB1c2UgdGhlIG1hY3JvIHRyYWNlX21hcmssIHlvdSBzaG91bGQgaW5jbHVkZSBsaW51eC9tYXJrZXIuaC4KLQotI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgotCi1BbmQsCi0KLXRyYWNlX21hcmsoc3Vic3lzdGVtX2V2ZW50LCAibXlpbnQgJWQgbXlzdHJpbmcgJXMiLCBzb21laW50LCBzb21lc3RyaW5nKTsKLVdoZXJlIDoKLS0gc3Vic3lzdGVtX2V2ZW50IGlzIGFuIGlkZW50aWZpZXIgdW5pcXVlIHRvIHlvdXIgZXZlbnQKLSAgICAtIHN1YnN5c3RlbSBpcyB0aGUgbmFtZSBvZiB5b3VyIHN1YnN5c3RlbS4KLSAgICAtIGV2ZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBtYXJrLgotLSAibXlpbnQgJWQgbXlzdHJpbmcgJXMiIGlzIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGZvciB0aGUgc2VyaWFsaXplci4gIm15aW50IiBhbmQKLSAgIm15c3RyaW5nIiBhcmUgcmVwZWN0aXZlbHkgdGhlIGZpZWxkIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlyc3QgYW5kCi0gIHNlY29uZCBwYXJhbWV0ZXIuCi0tIHNvbWVpbnQgaXMgYW4gaW50ZWdlci4KLS0gc29tZXN0cmluZyBpcyBhIGNoYXIgcG9pbnRlci4KLQotQ29ubmVjdGluZyBhIGZ1bmN0aW9uIChwcm9iZSkgdG8gYSBtYXJrZXIgaXMgZG9uZSBieSBwcm92aWRpbmcgYSBwcm9iZSAoZnVuY3Rpb24KLXRvIGNhbGwpIGZvciB0aGUgc3BlY2lmaWMgbWFya2VyIHRocm91Z2ggbWFya2VyX3Byb2JlX3JlZ2lzdGVyKCkgYW5kIGNhbiBiZQotYWN0aXZhdGVkIGJ5IGNhbGxpbmcgbWFya2VyX2FybSgpLiBNYXJrZXIgZGVhY3RpdmF0aW9uIGNhbiBiZSBkb25lIGJ5IGNhbGxpbmcKLW1hcmtlcl9kaXNhcm0oKSBhcyBtYW55IHRpbWVzIGFzIG1hcmtlcl9hcm0oKSBoYXMgYmVlbiBjYWxsZWQuIFJlbW92aW5nIGEgcHJvYmUKLWlzIGRvbmUgdGhyb3VnaCBtYXJrZXJfcHJvYmVfdW5yZWdpc3RlcigpOyBpdCB3aWxsIGRpc2FybSB0aGUgcHJvYmUuCi0KLW1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCkgbXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBwcm9iZSB1bnJlZ2lzdHJhdGlvbiBhbmQKLXRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mCi0tIHRoZSBlbmQgb2YgbW9kdWxlIGV4aXQgZnVuY3Rpb24sCi0gIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyBjYWxsZXIgbGVmdCB1c2luZyB0aGUgcHJvYmU7Ci0tIHRoZSBmcmVlIG9mIGFueSByZXNvdXJjZSB1c2VkIGJ5IHRoZSBwcm9iZXMsCi0gIHRvIG1ha2Ugc3VyZSB0aGUgcHJvYmVzIHdvbnQgYmUgYWNjZXNzaW5nIGludmFsaWQgZGF0YS4KLVRoaXMsIGFuZCB0aGUgZmFjdCB0aGF0IHByZWVtcHRpb24gaXMgZGlzYWJsZWQgYXJvdW5kIHRoZSBwcm9iZSBjYWxsLCBtYWtlIHN1cmUKLXRoYXQgcHJvYmUgcmVtb3ZhbCBhbmQgbW9kdWxlIHVubG9hZCBhcmUgc2FmZS4gU2VlIHRoZSAiUHJvYmUgZXhhbXBsZSIgc2VjdGlvbgotYmVsb3cgZm9yIGEgc2FtcGxlIHByb2JlIG1vZHVsZS4KLQotVGhlIG1hcmtlciBtZWNoYW5pc20gc3VwcG9ydHMgaW5zZXJ0aW5nIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBtYXJrZXIuCi1NYXJrZXJzIGNhbiBiZSBwdXQgaW4gaW5saW5lIGZ1bmN0aW9ucywgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQKLXVucm9sbGVkIGxvb3BzIGFzIHdlbGwgYXMgcmVndWxhciBmdW5jdGlvbnMuCi0KLVRoZSBuYW1pbmcgc2NoZW1lICJzdWJzeXN0ZW1fZXZlbnQiIGlzIHN1Z2dlc3RlZCBoZXJlIGFzIGEgY29udmVudGlvbiBpbnRlbmRlZAotdG8gbGltaXQgY29sbGlzaW9ucy4gTWFya2VyIG5hbWVzIGFyZSBnbG9iYWwgdG8gdGhlIGtlcm5lbDogdGhleSBhcmUgY29uc2lkZXJlZAotYXMgYmVpbmcgdGhlIHNhbWUgd2hldGhlciB0aGV5IGFyZSBpbiB0aGUgY29yZSBrZXJuZWwgaW1hZ2Ugb3IgaW4gbW9kdWxlcy4KLUNvbmZsaWN0aW5nIGZvcm1hdCBzdHJpbmdzIGZvciBtYXJrZXJzIHdpdGggdGhlIHNhbWUgbmFtZSB3aWxsIGNhdXNlIHRoZSBtYXJrZXJzCi10byBiZSBkZXRlY3RlZCB0byBoYXZlIGEgZGlmZmVyZW50IGZvcm1hdCBzdHJpbmcgbm90IHRvIGJlIGFybWVkIGFuZCB3aWxsIG91dHB1dAotYSBwcmludGsgd2FybmluZyB3aGljaCBpZGVudGlmaWVzIHRoZSBpbmNvbnNpc3RlbmN5OgotCi0iRm9ybWF0IG1pc21hdGNoIGZvciBwcm9iZSBwcm9iZV9uYW1lIChmb3JtYXQpLCBtYXJrZXIgKGZvcm1hdCkiCi0KLUFub3RoZXIgd2F5IHRvIHVzZSBtYXJrZXJzIGlzIHRvIHNpbXBseSBkZWZpbmUgdGhlIG1hcmtlciB3aXRob3V0IGdlbmVyYXRpbmcgYW55Ci1mdW5jdGlvbiBjYWxsIHRvIGFjdHVhbGx5IGNhbGwgaW50byB0aGUgbWFya2VyLiBUaGlzIGlzIHVzZWZ1bCBpbiBjb21iaW5hdGlvbgotd2l0aCB0cmFjZXBvaW50IHByb2JlcyBpbiBhIHNjaGVtZSBsaWtlIHRoaXMgOgotCi12b2lkIHByb2JlX3RyYWNlcG9pbnRfbmFtZSh1bnNpZ25lZCBpbnQgYXJnMSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwotCi1ERUZJTkVfTUFSS0VSX1RQKG1hcmtlcl9ldmVudG5hbWUsIHRyYWNlcG9pbnRfbmFtZSwgcHJvYmVfdHJhY2Vwb2ludF9uYW1lLAotCSJhcmcxICV1IHBpZCAlZCIpOwotCi1ub3RyYWNlIHZvaWQgcHJvYmVfdHJhY2Vwb2ludF9uYW1lKHVuc2lnbmVkIGludCBhcmcxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlzdHJ1Y3QgbWFya2VyICptYXJrZXIgPSAmR0VUX01BUktFUihrZXJuZWxfaXJxX2VudHJ5KTsKLQkvKiB3cml0ZSBkYXRhIHRvIHRyYWNlIGJ1ZmZlcnMgLi4uICovCi19Ci0KLSogUHJvYmUgLyBtYXJrZXIgZXhhbXBsZQotCi1TZWUgdGhlIGV4YW1wbGUgcHJvdmlkZWQgaW4gc2FtcGxlcy9tYXJrZXJzL3NyYwotCi1Db21waWxlIHRoZW0gd2l0aCB5b3VyIGtlcm5lbC4KLQotUnVuLCBhcyByb290IDoKLW1vZHByb2JlIG1hcmtlci1leGFtcGxlIChpbnNtb2Qgb3JkZXIgaXMgbm90IGltcG9ydGFudCkKLW1vZHByb2JlIHByb2JlLWV4YW1wbGUKLWNhdCAvcHJvYy9tYXJrZXItZXhhbXBsZSAocmV0dXJucyBhbiBleHBlY3RlZCBlcnJvcikKLXJtbW9kIG1hcmtlci1leGFtcGxlIHByb2JlLWV4YW1wbGUKLWRtZXNnCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS50eHQKaW5kZXggMmIzZGVkZC4uODAyZWZlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVtb3J5LnR4dApAQCAtMSwxOCArMSw3IEBACiBUaGVyZSBhcmUgc2V2ZXJhbCBjbGFzc2ljIHByb2JsZW1zIHJlbGF0ZWQgdG8gbWVtb3J5IG9uIExpbnV4CiBzeXN0ZW1zLgogCi0JMSkgVGhlcmUgYXJlIHNvbWUgYnVnZ3kgbW90aGVyYm9hcmRzIHdoaWNoIGNhbm5vdCBwcm9wZXJseSAKLQkgICBkZWFsIHdpdGggdGhlIG1lbW9yeSBhYm92ZSAxNk1CLiAgQ29uc2lkZXIgZXhjaGFuZ2luZwotCSAgIHlvdXIgbW90aGVyYm9hcmQuCi0KLQkyKSBZb3UgY2Fubm90IGRvIERNQSBvbiB0aGUgSVNBIGJ1cyB0byBhZGRyZXNzZXMgYWJvdmUKLQkgICAxNk0uICBNb3N0IGRldmljZSBkcml2ZXJzIHVuZGVyIExpbnV4IGFsbG93IHRoZSB1c2UKLSAgICAgICAgICAgb2YgYm91bmNlIGJ1ZmZlcnMgd2hpY2ggd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLiAgRHJpdmVycwotCSAgIHRoYXQgZG9uJ3QgdXNlIGJvdW5jZSBidWZmZXJzIHdpbGwgYmUgdW5zdGFibGUgd2l0aAotCSAgIG1vcmUgdGhhbiAxNk0gaW5zdGFsbGVkLiAgRHJpdmVycyB0aGF0IHVzZSBib3VuY2UgYnVmZmVycwotCSAgIHdpbGwgYmUgT0ssIGJ1dCBtYXkgaGF2ZSBzbGlnaHRseSBoaWdoZXIgb3ZlcmhlYWQuCi0JCi0JMykgVGhlcmUgYXJlIHNvbWUgbW90aGVyYm9hcmRzIHRoYXQgd2lsbCBub3QgY2FjaGUgYWJvdmUKKwkxKSBUaGVyZSBhcmUgc29tZSBtb3RoZXJib2FyZHMgdGhhdCB3aWxsIG5vdCBjYWNoZSBhYm92ZQogCSAgIGEgY2VydGFpbiBxdWFudGl0eSBvZiBtZW1vcnkuICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UKIAkgICBtb3RoZXJib2FyZHMsIHlvdXIgc3lzdGVtIHdpbGwgYmUgU0xPV0VSLCBub3QgZmFzdGVyCiAJICAgYXMgeW91IGFkZCBtb3JlIG1lbW9yeS4gIENvbnNpZGVyIGV4Y2hhbmdpbmcgeW91ciAKQEAgLTI0LDcgKzEzLDcgQEAKIElmIHlvdSB1c2UgIm1lbT0iIG9uIGEgbWFjaGluZSB3aXRoIFBDSSwgY29uc2lkZXIgdXNpbmcgIm1lbW1hcD0iIHRvIGF2b2lkCiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGNvbGxpc2lvbnMuCiAKLVNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIGJvb3QgbG9hZGVyIChMSUxPLCBsb2FkbGluLCBldGMuKSBhYm91dAorU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgYm9vdCBsb2FkZXIgKExJTE8sIGdydWIsIGxvYWRsaW4sIGV0Yy4pIGFib3V0CiBob3cgdG8gcGFzcyBvcHRpb25zIHRvIHRoZSBrZXJuZWwuCiAKIFRoZXJlIGFyZSBvdGhlciBtZW1vcnkgcHJvYmxlbXMgd2hpY2ggTGludXggY2Fubm90IGRlYWwgd2l0aC4gIFJhbmRvbQpAQCAtNDIsMTkgKzMxLDMgQEAKIAkgIHdpdGggdGhlIHZlbmRvci4gQ29uc2lkZXIgdGVzdGluZyBpdCB3aXRoIG1lbXRlc3Q4NiB5b3Vyc2VsZi4KIAkKIAkqIEV4Y2hhbmdpbmcgeW91ciBDUFUsIGNhY2hlLCBvciBtb3RoZXJib2FyZCBmb3Igb25lIHRoYXQgd29ya3MuCi0KLQkqIERpc2FibGluZyB0aGUgY2FjaGUgZnJvbSB0aGUgQklPUy4KLQotCSogVHJ5IHBhc3NpbmcgdGhlICJtZW09NE0iIG9wdGlvbiB0byB0aGUga2VybmVsIHRvIGxpbWl0Ci0JICBMaW51eCB0byB1c2luZyBhIHZlcnkgc21hbGwgYW1vdW50IG9mIG1lbW9yeS4gVXNlICJtZW1tYXA9Ii1vcHRpb24KLQkgIHRvZ2V0aGVyIHdpdGggIm1lbT0iIG9uIHN5c3RlbXMgd2l0aCBQQ0kgdG8gYXZvaWQgcGh5c2ljYWwgYWRkcmVzcwotCSAgc3BhY2UgY29sbGlzaW9ucy4KLQotCi1PdGhlciB0cmlja3M6Ci0KLQkqIFRyeSBwYXNzaW5nIHRoZSAibm8tMzg3IiBvcHRpb24gdG8gdGhlIGtlcm5lbCB0byBpZ25vcmUKLQkgIGEgYnVnZ3kgRlBVLgotCi0JKiBUcnkgcGFzc2luZyB0aGUgIm5vLWhsdCIgb3B0aW9uIHRvIGRpc2FibGUgdGhlIHBvdGVudGlhbGx5Ci0gICAgICAgICAgYnVnZ3kgSExUIGluc3RydWN0aW9uIGluIHlvdXIgQ1BVLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JlZ3VsYXRvcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JlZ3VsYXRvcnkudHh0CmluZGV4IGVhYTFhMjUuLmVlMzEzNjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZWd1bGF0b3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmVndWxhdG9yeS50eHQKQEAgLTk2LDcgKzk2LDcgQEAKIAogVGhpcyBleGFtcGxlIGNvbWVzIGZyb20gdGhlIHpkMTIxMXJ3IGRldmljZSBkcml2ZXIuIFlvdSBjYW4gc3RhcnQKIGJ5IGhhdmluZyBhIG1hcHBpbmcgb2YgeW91ciBkZXZpY2UncyBFRVBST00gY291bnRyeS9yZWd1bGF0b3J5Ci1kb21haW4gdmFsdWUgdG8gdG8gYSBzcGVjaWZpYyBhbHBoYTIgYXMgZm9sbG93czoKK2RvbWFpbiB2YWx1ZSB0byBhIHNwZWNpZmljIGFscGhhMiBhcyBmb2xsb3dzOgogCiBzdGF0aWMgc3RydWN0IHpkX3JlZ19hbHBoYTJfbWFwIHJlZ19hbHBoYTJfbWFwW10gPSB7CiAJeyBaRF9SRUdET01BSU5fRkNDLCAiVVMiIH0sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL251bWFzdGF0LnR4dCBiL0RvY3VtZW50YXRpb24vbnVtYXN0YXQudHh0CmluZGV4IDgwMTMzYWMuLjlmY2M5YTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbnVtYXN0YXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbnVtYXN0YXQudHh0CkBAIC03LDEwICs3LDEwIEBACiAKIG51bWFfaGl0CQkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGlzIG5vZGUsCiAJCQkJCWFuZCBzdWNjZWVkZWQuCi1udW1hX21pc3MJCQlBIHByb2Nlc3Mgd2FudGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoaXMgbm9kZSwKLQkJCQkJYnV0IGVuZGVkIHVwIHdpdGggbWVtb3J5IGZyb20gYW5vdGhlci4KLW51bWFfZm9yZWlnbgkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBvbiBhbm90aGVyIG5vZGUsCi0JCQkJICAgIGJ1dCBlbmRlZCB1cCB3aXRoIG1lbW9yeSBmcm9tIHRoaXMgb25lLgorbnVtYV9taXNzCQkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSBhbm90aGVyIG5vZGUsCisJCQkJCWJ1dCBlbmRlZCB1cCB3aXRoIG1lbW9yeSBmcm9tIHRoaXMgbm9kZS4KK251bWFfZm9yZWlnbgkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBvbiB0aGlzIG5vZGUsCisJCQkJICAgIGJ1dCBlbmRlZCB1cCB3aXRoIG1lbW9yeSBmcm9tIGFub3RoZXIgb25lLgogbG9jYWxfbm9kZQkJCUEgcHJvY2VzcyByYW4gb24gdGhpcyBub2RlIGFuZCBnb3QgbWVtb3J5IGZyb20gaXQuCiBvdGhlcl9ub2RlCQkJQSBwcm9jZXNzIHJhbiBvbiB0aGlzIG5vZGUgYW5kIGdvdCBtZW1vcnkgZnJvbSBhbm90aGVyIG5vZGUuCiBpbnRlcmxlYXZlX2hpdCAJCUludGVybGVhdmluZyB3YW50ZWQgdG8gYWxsb2NhdGUgZnJvbSB0aGlzIG5vZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNtY2lhL2NyYzMyaGFzaC5jIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvY3JjMzJoYXNoLmMKaW5kZXggNDIxMGU1YS4uNDRmOGJlZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvY3JjMzJoYXNoLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvY3JjMzJoYXNoLmMKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAotdW5zaWduZWQgaW50IGNyYzMyKHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgdW5zaWduZWQgaW50IGNyYzMyKHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IGNyYyA9IDA7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3Bvd2VyX3N1cHBseV9jbGFzcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3Bvd2VyX3N1cHBseV9jbGFzcy50eHQKaW5kZXggYzZjZDQ5NS4uOWYxNmM1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9wb3dlcl9zdXBwbHlfY2xhc3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcG93ZXJfc3VwcGx5X2NsYXNzLnR4dApAQCAtNzYsNiArNzYsMTEgQEAKIGRpc2NoYXJnaW5nIChpLmUuIHBvd2VyaW5nIGEgbG9hZCksIGV0Yy4pLiBUaGlzIGNvcnJlc3BvbmRzIHRvCiBCQVRURVJZX1NUQVRVU18qIHZhbHVlcywgYXMgZGVmaW5lZCBpbiBiYXR0ZXJ5LmguCiAKK0NIQVJHRV9UWVBFIC0gYmF0dGVyaWVzIGNhbiB0eXBpY2FsbHkgY2hhcmdlIGF0IGRpZmZlcmVudCByYXRlcy4KK1RoaXMgZGVmaW5lcyB0cmlja2xlIGFuZCBmYXN0IGNoYXJnZXMuICBGb3IgYmF0dGVyaWVzIHRoYXQKK2FyZSBhbHJlYWR5IGNoYXJnZWQgb3IgZGlzY2hhcmdpbmcsICduL2EnIGNhbiBiZSBkaXNwbGF5ZWQgKG9yCisndW5rbm93bicsIGlmIHRoZSBzdGF0dXMgaXMgbm90IGtub3duKS4KKwogSEVBTFRIIC0gcmVwcmVzZW50cyBoZWFsdGggb2YgdGhlIGJhdHRlcnksIHZhbHVlcyBjb3JyZXNwb25kcyB0bwogUE9XRVJfU1VQUExZX0hFQUxUSF8qLCBkZWZpbmVkIGluIGJhdHRlcnkuaC4KIApAQCAtMTA4LDYgKzExMyw4IEBACiBFTkVSR1lfRlVMTCwgRU5FUkdZX0VNUFRZIC0gc2FtZSBhcyBhYm92ZSBidXQgZm9yIGVuZXJneS4KIAogQ0FQQUNJVFkgLSBjYXBhY2l0eSBpbiBwZXJjZW50cy4KK0NBUEFDSVRZX0xFVkVMIC0gY2FwYWNpdHkgbGV2ZWwuIFRoaXMgY29ycmVzcG9uZHMgdG8KK1BPV0VSX1NVUFBMWV9DQVBBQ0lUWV9MRVZFTF8qLgogCiBURU1QIC0gdGVtcGVyYXR1cmUgb2YgdGhlIHBvd2VyIHN1cHBseS4KIFRFTVBfQU1CSUVOVCAtIGFtYmllbnQgdGVtcGVyYXR1cmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvZGVzaWduLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWI1NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvZGVzaWduLnR4dApAQCAtMCwwICsxLDMzIEBACitSZWd1bGF0b3IgQVBJIGRlc2lnbiBub3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBwcm92aWRlcyBhIGJyaWVmLCBwYXJ0aWFsbHkgc3RydWN0dXJlZCwgb3ZlcnZpZXcgb2Ygc29tZQorb2YgdGhlIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB3aGljaCBpbXBhY3QgdGhlIHJlZ3VsYXRvciBBUEkgZGVzaWduLgorCitTYWZldHkKKy0tLS0tLQorCisgLSBFcnJvcnMgaW4gcmVndWxhdG9yIGNvbmZpZ3VyYXRpb24gY2FuIGhhdmUgdmVyeSBzZXJpb3VzIGNvbnNlcXVlbmNlcworICAgZm9yIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGluY2x1ZGluZyBsYXN0aW5nIGhhcmR3YXJlIGRhbWFnZS4KKyAtIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUgcG93ZXIgY29uZnVncmF0aW9uCisgICBvZiB0aGUgc3lzdGVtIC0gc29mdHdhcmUtZXF1aXZhbGVudCB2YXJpYW50cyBvZiB0aGUgc2FtZSBjaGlwIG1heQorICAgaGF2ZSBkaWZmZXJlbnQgcG93ZXIgcmVxdWlybWVudHMsIGFuZCBub3QgYWxsIGNvbXBvbmVudHMgd2l0aCBwb3dlcgorICAgcmVxdWlyZW1lbnRzIGFyZSB2aXNpYmxlIHRvIHNvZnR3YXJlLgorCisgID0+IFRoZSBBUEkgc2hvdWxkIG1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgaGFyZHdhcmUgc3RhdGUgdW5sZXNzIGl0IGhhcworICAgICBzcGVjaWZpYyBrbm93bGVkZ2UgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBzYWZlIHRvIGRvIHBlcmZvcm0gb24KKyAgICAgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbS4KKworQ29uc3VtZXIgdXNlIGNhc2VzCistLS0tLS0tLS0tLS0tLS0tLS0KKworIC0gVGhlIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZiBkZXZpY2VzIGluIGEgc3lzdGVtIHdpbGwgaGF2ZSBubworICAgcmVxdWlyZW1lbnQgdG8gZG8gYW55IHJ1bnRpbWUgY29uZmlndXJhdGlvbiBvZiB0aGVpciBwb3dlciBiZXlvbmQKKyAgIGJlaW5nIGFibGUgdG8gdHVybiBpdCBvbiBvciBvZmYuCisKKyAtIE1hbnkgb2YgdGhlIHBvd2VyIHN1cHBsaWVzIGluIHRoZSBzeXN0ZW0gd2lsbCBiZSBzaGFyZWQgYmV0d2VlbiBtYW55CisgICBkaWZmZXJlbnQgY29uc3VtZXJzLgorCisgID0+IFRoZSBjb25zdW1lciBBUEkgc2hvdWxkIGJlIHN0cnVjdHVyZWQgc28gdGhhdCB0aGVzZSB1c2UgY2FzZXMgYXJlCisgICAgIHZlcnkgZWFzeSB0byBoYW5kbGUgYW5kIHNvIHRoYXQgY29uc3VtZXJzIHdpbGwgd29yayB3aXRoIHNoYXJlZAorICAgICBzdXBwbGllcyB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGVmZm9ydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvbWFjaGluZS50eHQKaW5kZXggY2UzNDg3ZC4uNjM3MjhmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvbWFjaGluZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvbWFjaGluZS50eHQKQEAgLTg3LDcgKzg3LDcgQEAKIH0sCiB9OwogLyogcmVnaXN0ZXIgcmVndWxhdG9yIDEgZGV2aWNlICovCi1wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndtODM1MF9yZWd1bGF0b3JfZGV2aWNlc1swXSk7CitwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlZ3VsYXRvcl9kZXZpY2VzWzBdKTsKIAogLyogcmVnaXN0ZXIgcmVndWxhdG9yIDIgZGV2aWNlICovCi1wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndtODM1MF9yZWd1bGF0b3JfZGV2aWNlc1sxXSk7CitwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlZ3VsYXRvcl9kZXZpY2VzWzFdKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL292ZXJ2aWV3LnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL292ZXJ2aWV3LnR4dAppbmRleCAwY2RlZDY5Li5mZmQxODViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9vdmVydmlldy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3Ivb3ZlcnZpZXcudHh0CkBAIC0yOSw3ICsyOSw3IEBACiAKIAogICBvIFBNSUMgICAgICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgSUMuIEFuIElDIHRoYXQgY29udGFpbnMgbnVtZXJvdXMgcmVndWxhdG9ycwotICAgICAgICAgICAgICAgICAgIGFuZCBvZnRlbiBjb250YWlucyBvdGhlciBzdXNic3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICBhbmQgb2Z0ZW4gY29udGFpbnMgb3RoZXIgc3Vic3lzdGVtcy4KIAogCiAgIG8gQ29uc3VtZXIgICAgIC0gRWxlY3Ryb25pYyBkZXZpY2UgdGhhdCBpcyBzdXBwbGllZCBwb3dlciBieSBhIHJlZ3VsYXRvci4KQEAgLTE2OCw0ICsxNjgsNCBAQAogICAgICAgdXNlcnNwYWNlIHZpYSBzeXNmcy4gVGhpcyBjb3VsZCBiZSB1c2VkIHRvIGhlbHAgbW9uaXRvciBkZXZpY2UgcG93ZXIKICAgICAgIGNvbnN1bXB0aW9uIGFuZCBzdGF0dXMuCiAKLSAgICAgICAgU2VlIERvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvcmVndWxhdG9yLXN5c2ZzLnR4dAorICAgICAgICBTZWUgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CmluZGV4IDQyMDBhY2MuLjNmOGI1MjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dApAQCAtMTAsOCArMTAsOSBAQAogCiBEcml2ZXJzIGNhbiByZWdpc3RlciBhIHJlZ3VsYXRvciBieSBjYWxsaW5nIDotCiAKLXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MpOworc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcl9yZWdpc3RlcihzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnJlZ3VsYXRvcl9kZXNjLAorCXN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YSwKKwl2b2lkICpkcml2ZXJfZGF0YSk7CiAKIFRoaXMgd2lsbCByZWdpc3RlciB0aGUgcmVndWxhdG9ycyBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnMgdG8gdGhlIHJlZ3VsYXRvcgogY29yZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dAppbmRleCAzZWQzNzk3Li44YTAwNDA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0CkBAIC0xMCw2ICsxMCw4IEBACiAgIC0gaW50ZXJydXB0cyA6IHNob3VsZCBjb250YWluIGVTREhDIGludGVycnVwdC4KICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogaW50ZXJydXB0IHNvdXJjZSBwaGFuZGxlLgogICAtIGNsb2NrLWZyZXF1ZW5jeSA6IHNwZWNpZmllcyBlU0RIQyBiYXNlIGNsb2NrIGZyZXF1ZW5jeS4KKyAgLSBzZGhjaSx3cC1pbnZlcnRlZCA6IChvcHRpb25hbCkgc3BlY2lmaWVzIHRoYXQgZVNESEMgY29udHJvbGxlcgorICAgIHJlcG9ydHMgaW52ZXJ0ZWQgd3JpdGUtcHJvdGVjdCBzdGF0ZTsKICAgLSBzZGhjaSwxLWJpdC1vbmx5IDogKG9wdGlvbmFsKSBzcGVjaWZpZXMgdGhhdCBhIGNvbnRyb2xsZXIgY2FuCiAgICAgb25seSBoYW5kbGUgMS1iaXQgZGF0YSB0cmFuc2ZlcnMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbWFydmVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21hcnZlbGwudHh0CmluZGV4IDM3MDhhMmYuLmYxNTMzZDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbWFydmVsbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tYXJ2ZWxsLnR4dApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgZGV2aWNlcy4gIFRoaXMgZmllbGQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0bwogICAgICAgcmVwcmVzZW50IHRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycyBvZiBkZXZpY2VzCiAgICAgICB3aXRoaW4gdGhlIHN5c3RlbSBjb250cm9sbGVyIGNoaXAuCi0gICAgLSAjc2l6ZS1jZWxscyA6IFNpemUgcmVwcmVzZW50YXRpb24gZm9yIGZvciB0aGUgbWVtb3J5LW1hcHBlZAorICAgIC0gI3NpemUtY2VsbHMgOiBTaXplIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgbWVtb3J5LW1hcHBlZAogICAgICAgcmVnaXN0ZXJzIHdpdGhpbiB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgY2hpcC4KICAgICAtICNpbnRlcnJ1cHQtY2VsbHMgOiBEZWZpbmVzIHRoZSB3aWR0aCBvZiBjZWxscyB1c2VkIHRvIHJlcHJlc2VudAogICAgICAgaW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbXRkLXBoeXNtYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tdGQtcGh5c21hcC50eHQKaW5kZXggNjY3YzliZC4uODAxNTJjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tdGQtcGh5c21hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tdGQtcGh5c21hcC50eHQKQEAgLTEsMTggKzEsMTkgQEAKLUNGSSBvciBKRURFQyBtZW1vcnktbWFwcGVkIE5PUiBmbGFzaAorQ0ZJIG9yIEpFREVDIG1lbW9yeS1tYXBwZWQgTk9SIGZsYXNoLCBNVEQtUkFNIChOVlJBTS4uLikKIAogRmxhc2ggY2hpcHMgKE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMpIGFyZSBvZnRlbiB1c2VkIGZvciBzb2xpZCBzdGF0ZQogZmlsZSBzeXN0ZW1zIG9uIGVtYmVkZGVkIGRldmljZXMuCiAKLSAtIGNvbXBhdGlibGUgOiBzaG91bGQgY29udGFpbiB0aGUgc3BlY2lmaWMgbW9kZWwgb2YgZmxhc2ggY2hpcChzKQotICAgdXNlZCwgaWYga25vd24sIGZvbGxvd2VkIGJ5IGVpdGhlciAiY2ZpLWZsYXNoIiBvciAiamVkZWMtZmxhc2giCi0gLSByZWcgOiBBZGRyZXNzIHJhbmdlKHMpIG9mIHRoZSBmbGFzaCBjaGlwKHMpCisgLSBjb21wYXRpYmxlIDogc2hvdWxkIGNvbnRhaW4gdGhlIHNwZWNpZmljIG1vZGVsIG9mIG10ZCBjaGlwKHMpCisgICB1c2VkLCBpZiBrbm93biwgZm9sbG93ZWQgYnkgZWl0aGVyICJjZmktZmxhc2giLCAiamVkZWMtZmxhc2giCisgICBvciAibXRkLXJhbSIuCisgLSByZWcgOiBBZGRyZXNzIHJhbmdlKHMpIG9mIHRoZSBtdGQgY2hpcChzKQogICAgSXQncyBwb3NzaWJsZSB0byAob3B0aW9uYWxseSkgZGVmaW5lIG11bHRpcGxlICJyZWciIHR1cGxlcyBzbyB0aGF0Ci0gICBub24taWRlbnRpY2FsIE5PUiBjaGlwcyBjYW4gYmUgZGVzY3JpYmVkIGluIG9uZSBmbGFzaCBub2RlLgotIC0gYmFuay13aWR0aCA6IFdpZHRoIChpbiBieXRlcykgb2YgdGhlIGZsYXNoIGJhbmsuICBFcXVhbCB0byB0aGUKKyAgIG5vbi1pZGVudGljYWwgY2hpcHMgY2FuIGJlIGRlc2NyaWJlZCBpbiBvbmUgbm9kZS4KKyAtIGJhbmstd2lkdGggOiBXaWR0aCAoaW4gYnl0ZXMpIG9mIHRoZSBiYW5rLiAgRXF1YWwgdG8gdGhlCiAgICBkZXZpY2Ugd2lkdGggdGltZXMgdGhlIG51bWJlciBvZiBpbnRlcmxlYXZlZCBjaGlwcy4KLSAtIGRldmljZS13aWR0aCA6IChvcHRpb25hbCkgV2lkdGggb2YgYSBzaW5nbGUgZmxhc2ggY2hpcC4gIElmCisgLSBkZXZpY2Utd2lkdGggOiAob3B0aW9uYWwpIFdpZHRoIG9mIGEgc2luZ2xlIG10ZCBjaGlwLiAgSWYKICAgIG9taXR0ZWQsIGFzc3VtZWQgdG8gYmUgZXF1YWwgdG8gJ2Jhbmstd2lkdGgnLgotIC0gI2FkZHJlc3MtY2VsbHMsICNzaXplLWNlbGxzIDogTXVzdCBiZSBwcmVzZW50IGlmIHRoZSBmbGFzaCBoYXMKKyAtICNhZGRyZXNzLWNlbGxzLCAjc2l6ZS1jZWxscyA6IE11c3QgYmUgcHJlc2VudCBpZiB0aGUgZGV2aWNlIGhhcwogICAgc3ViLW5vZGVzIHJlcHJlc2VudGluZyBwYXJ0aXRpb25zIChzZWUgYmVsb3cpLiAgSW4gdGhpcyBjYXNlCiAgICBib3RoICNhZGRyZXNzLWNlbGxzIGFuZCAjc2l6ZS1jZWxscyBtdXN0IGJlIGVxdWFsIHRvIDEuCiAKQEAgLTIyLDI0ICsyMywyNCBAQAogIC0gdmVuZG9yLWlkIDogQ29udGFpbnMgdGhlIGZsYXNoIGNoaXAncyB2ZW5kb3IgaWQgKDEgYnl0ZSkuCiAgLSBkZXZpY2UtaWQgOiBDb250YWlucyB0aGUgZmxhc2ggY2hpcCdzIGRldmljZSBpZCAoMSBieXRlKS4KIAotSW4gYWRkaXRpb24gdG8gdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBmbGFzaCBiYW5rIGl0c2VsZiwgdGhlCitJbiBhZGRpdGlvbiB0byB0aGUgaW5mb3JtYXRpb24gb24gdGhlIG10ZCBiYW5rIGl0c2VsZiwgdGhlCiBkZXZpY2UgdHJlZSBtYXkgb3B0aW9uYWxseSBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLWRlc2NyaWJpbmcgcGFydGl0aW9ucyBvZiB0aGUgZmxhc2ggYWRkcmVzcyBzcGFjZS4gIFRoaXMgY2FuIGJlCitkZXNjcmliaW5nIHBhcnRpdGlvbnMgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuICBUaGlzIGNhbiBiZQogdXNlZCBvbiBwbGF0Zm9ybXMgd2hpY2ggaGF2ZSBzdHJvbmcgY29udmVudGlvbnMgYWJvdXQgd2hpY2gKLXBvcnRpb25zIG9mIHRoZSBmbGFzaCBhcmUgdXNlZCBmb3Igd2hhdCBwdXJwb3NlcywgYnV0IHdoaWNoIGRvbid0Citwb3J0aW9ucyBvZiBhIGZsYXNoIGFyZSB1c2VkIGZvciB3aGF0IHB1cnBvc2VzLCBidXQgd2hpY2ggZG9uJ3QKIHVzZSBhbiBvbi1mbGFzaCBwYXJ0aXRpb24gdGFibGUgc3VjaCBhcyBSZWRCb290LgogCi1FYWNoIHBhcnRpdGlvbiBpcyByZXByZXNlbnRlZCBhcyBhIHN1Yi1ub2RlIG9mIHRoZSBmbGFzaCBkZXZpY2UuCitFYWNoIHBhcnRpdGlvbiBpcyByZXByZXNlbnRlZCBhcyBhIHN1Yi1ub2RlIG9mIHRoZSBtdGQgZGV2aWNlLgogRWFjaCBub2RlJ3MgbmFtZSByZXByZXNlbnRzIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nCi1wYXJ0aXRpb24gb2YgdGhlIGZsYXNoIGRldmljZS4KK3BhcnRpdGlvbiBvZiB0aGUgbXRkIGRldmljZS4KIAogRmxhc2ggcGFydGl0aW9ucwotIC0gcmVnIDogVGhlIHBhcnRpdGlvbidzIG9mZnNldCBhbmQgc2l6ZSB3aXRoaW4gdGhlIGZsYXNoIGJhbmsuCi0gLSBsYWJlbCA6IChvcHRpb25hbCkgVGhlIGxhYmVsIC8gbmFtZSBmb3IgdGhpcyBmbGFzaCBwYXJ0aXRpb24uCisgLSByZWcgOiBUaGUgcGFydGl0aW9uJ3Mgb2Zmc2V0IGFuZCBzaXplIHdpdGhpbiB0aGUgbXRkIGJhbmsuCisgLSBsYWJlbCA6IChvcHRpb25hbCkgVGhlIGxhYmVsIC8gbmFtZSBmb3IgdGhpcyBwYXJ0aXRpb24uCiAgICBJZiBvbWl0dGVkLCB0aGUgbGFiZWwgaXMgdGFrZW4gZnJvbSB0aGUgbm9kZSBuYW1lIChleGNsdWRpbmcKICAgIHRoZSB1bml0IGFkZHJlc3MpLgogIC0gcmVhZC1vbmx5IDogKG9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciwgaWYgcHJlc2VudCwgaXMgYSBoaW50IHRvCi0gICBMaW51eCB0aGF0IHRoaXMgZmxhc2ggcGFydGl0aW9uIHNob3VsZCBvbmx5IGJlIG1vdW50ZWQKKyAgIExpbnV4IHRoYXQgdGhpcyBwYXJ0aXRpb24gc2hvdWxkIG9ubHkgYmUgbW91bnRlZAogICAgcmVhZC1vbmx5LiAgVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGZsYXNoIHBhcnRpdGlvbnMKICAgIGNvbnRhaW5pbmcgZWFybHktYm9vdCBmaXJtd2FyZSBpbWFnZXMgb3IgZGF0YSB3aGljaCBzaG91bGQgbm90CiAgICBiZSBjbG9iYmVyZWQuCkBAIC03OCwzICs3OSwxMiBAQAogCQkJcmVnID0gPDAgMHgwNDAwMDAwMD47CiAJCX07CiAJfTsKKworQW4gZXhhbXBsZSB1c2luZyBTUkFNOgorCisJc3JhbUAyLDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsazZmMTYxNnU2YSIsICJtdGQtcmFtIjsKKwkJcmVnID0gPDIgMCAweDAwMjAwMDAwPjsKKwkJYmFuay13aWR0aCA9IDwyPjsKKwl9OworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3J0Yy50eHQgYi9Eb2N1bWVudGF0aW9uL3J0Yy50eHQKaW5kZXggOGRlZmZjZC4uOTEwNGMxMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ydGMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcnRjLnR4dApAQCAtMTM1LDYgKzEzNSwzMCBAQAogdGhlIHN5c3RlbSBjbG9jayBmcm9tIHRoZSBkaXNjcmV0ZSBSVEMsIGJ1dCB1c2UgdGhlIGludGVncmF0ZWQgb25lIGZvciBhbGwKIG90aGVyIHRhc2tzLCBiZWNhdXNlIG9mIGl0cyBncmVhdGVyIGZ1bmN0aW9uYWxpdHkuCiAKK1NZU0ZTIElOVEVSRkFDRQorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzeXNmcyBpbnRlcmZhY2UgdW5kZXIgL3N5cy9jbGFzcy9ydGMvcnRjTiBwcm92aWRlcyBhY2Nlc3MgdG8gdmFyaW91cworcnRjIGF0dHJpYnV0ZXMgd2l0aG91dCByZXF1aXJpbmcgdGhlIHVzZSBvZiBpb2N0bHMuIEFsbCBkYXRlcyBhbmQgdGltZXMKK2FyZSBpbiB0aGUgUlRDJ3MgdGltZXpvbmUsIHJhdGhlciB0aGFuIGluIHN5c3RlbSB0aW1lLgorCitkYXRlOiAgCSAgIAkgUlRDLXByb3ZpZGVkIGRhdGUKK2hjdG9zeXM6ICAgCSAxIGlmIHRoZSBSVEMgcHJvdmlkZWQgdGhlIHN5c3RlbSB0aW1lIGF0IGJvb3QgdmlhIHRoZQorCQkgQ09ORklHX1JUQ19IQ1RPU1lTIGtlcm5lbCBvcHRpb24sIDAgb3RoZXJ3aXNlCittYXhfdXNlcl9mcmVxOgkgVGhlIG1heGltdW0gaW50ZXJydXB0IHJhdGUgYW4gdW5wcml2aWxlZ2VkIHVzZXIgbWF5IHJlcXVlc3QKKwkJIGZyb20gdGhpcyBSVEMuCituYW1lOgkJIFRoZSBuYW1lIG9mIHRoZSBSVEMgY29ycmVzcG9uZGluZyB0byB0aGlzIHN5c2ZzIGRpcmVjdG9yeQorc2luY2VfZXBvY2g6CSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoIGFjY29yZGluZyB0byB0aGUgUlRDCit0aW1lOgkJIFJUQy1wcm92aWRlZCB0aW1lCit3YWtlYWxhcm06CSBUaGUgdGltZSBhdCB3aGljaCB0aGUgY2xvY2sgd2lsbCBnZW5lcmF0ZSBhIHN5c3RlbSB3YWtldXAKKwkJIGV2ZW50LiBUaGlzIGlzIGEgb25lIHNob3Qgd2FrZXVwIGV2ZW50LCBzbyBtdXN0IGJlIHJlc2V0CisJCSBhZnRlciB3YWtlIGlmIGEgZGFpbHkgd2FrZXVwIGlzIHJlcXVpcmVkLiBGb3JtYXQgaXMgZWl0aGVyCisJCSBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCBvciwgaWYgdGhlcmUncyBhIGxlYWRpbmcgKywgc2Vjb25kcworCQkgaW4gdGhlIGZ1dHVyZS4KKworSU9DVEwgSU5URVJGQUNFCistLS0tLS0tLS0tLS0tLS0KKwogVGhlIGlvY3RsKCkgY2FsbHMgc3VwcG9ydGVkIGJ5IC9kZXYvcnRjIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGUgUlRDIGNsYXNzCiBmcmFtZXdvcmsuICBIb3dldmVyLCBiZWNhdXNlIHRoZSBjaGlwcyBhbmQgc3lzdGVtcyBhcmUgbm90IHN0YW5kYXJkaXplZCwKIHNvbWUgUEMvQVQgZnVuY3Rpb25hbGl0eSBtaWdodCBub3QgYmUgcHJvdmlkZWQuICBBbmQgaW4gdGhlIHNhbWUgd2F5LCBzb21lCkBAIC0xODUsNiArMjA5LDggQEAKIAloYXJkd2FyZSBpbiB0aGUgaXJxX3NldF9mcmVxIGZ1bmN0aW9uLiAgSWYgaXQgaXNuJ3QsIHJldHVybiAtRUlOVkFMLiAgSWYKIAl5b3UgY2Fubm90IGFjdHVhbGx5IGNoYW5nZSB0aGUgZnJlcXVlbmN5LCBkbyBub3QgZGVmaW5lIGlycV9zZXRfZnJlcS4KIAorICAgICoJUlRDX1BJRV9PTiwgUlRDX1BJRV9PRkY6IHRoZSBpcnFfc2V0X3N0YXRlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLgorCiBJZiBhbGwgZWxzZSBmYWlscywgY2hlY2sgb3V0IHRoZSBydGMtdGVzdC5jIGRyaXZlciEKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAppbmRleCBlYWE0ODAxLi4zOGU5ZTdjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKQEAgLTUxNCw3ICs1MTQsNyBAQAogCiB2LglSZW1vdmUgcmVkdW5kYW50IF9fbWVnYXJhaWRfYnVzeXdhaXRfbWJveCByb3V0aW5lCiAKLXZpLglGaXggYnVnIGluIHRoZSBtYW5hZ21lbnQgbW9kdWxlLCB3aGljaCBjYXVzZXMgYSBzeXN0ZW0gbG9ja3VwIHdoZW4gdGhlCit2aS4JRml4IGJ1ZyBpbiB0aGUgbWFuYWdlbWVudCBtb2R1bGUsIHdoaWNoIGNhdXNlcyBhIHN5c3RlbSBsb2NrdXAgd2hlbiB0aGUKIAlJTyBtb2R1bGUgaXMgbG9hZGVkIGFuZCB0aGVuIHVubG9hZGVkLCBmb2xsb3dlZCBieSBleGVjdXRpbmcgYW55CiAJbWFuYWdlbWVudCB1dGlsaXR5LiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIG1hbmFnZW1lbnQgbW9kdWxlIGRvZXMgbm90CiAJaGFuZGxlIHRoZSBhZGFwdGVyIHVucmVnaXN0ZXIgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9mY190cmFuc3BvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZmNfdHJhbnNwb3J0LnR4dAppbmRleCBkN2YxODE3Li5hZWM2NTQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9mY190cmFuc3BvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2ZjX3RyYW5zcG9ydC50eHQKQEAgLTM3OCw3ICszNzgsNyBAQAogICAgICAgaW50IHZwb3J0X2Rpc2FibGUoc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCwgYm9vbCBkaXNhYmxlKQogCiAgICAgd2hlcmU6Ci0gICAgICB2cG9ydDogICAgSXMgdnBvcnQgdG8gdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZAorICAgICAgdnBvcnQ6ICAgIElzIHZwb3J0IHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQKICAgICAgIGRpc2FibGU6ICBJZiAidHJ1ZSIsIHRoZSB2cG9ydCBpcyB0byBiZSBkaXNhYmxlZC4KICAgICAgICAgICAgICAgICBJZiAiZmFsc2UiLCB0aGUgdnBvcnQgaXMgdG8gYmUgZW5hYmxlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCA5N2VlYmQ2Li5mMTcwOGI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtMzg3LDcgKzM4Nyw3IEBACiBTVEFDOTJIRDgzKgogPT09PT09PT09PT0KICAgcmVmCQlSZWZlcmVuY2UgYm9hcmQKLSAgbWljLXJlZglSZWZlcmVuY2UgYm9hcmQgd2l0aCBwb3dlciBtYW5hZ21lbnQgZm9yIHBvcnRzCisgIG1pYy1yZWYJUmVmZXJlbmNlIGJvYXJkIHdpdGggcG93ZXIgbWFuYWdlbWVudCBmb3IgcG9ydHMKICAgZGVsbC1zMTQJRGVsbCBsYXB0b3AKICAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQppbmRleCA0YTAyZDI1Li5kZWFiNTFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQpAQCAtMzUwLDcgKzM1MCw3IEBACiAJCS5yZXN1bWUJCT0gQ0hJUF9yZXN1bWUsCiAJfTsKIAotVGhlIGRyaXZlciBjb3JlIHdpbGwgYXV0bWF0aWNhbGx5IGF0dGVtcHQgdG8gYmluZCB0aGlzIGRyaXZlciB0byBhbnkgU1BJCitUaGUgZHJpdmVyIGNvcmUgd2lsbCBhdXRvbWF0aWNhbGx5IGF0dGVtcHQgdG8gYmluZCB0aGlzIGRyaXZlciB0byBhbnkgU1BJCiBkZXZpY2Ugd2hvc2UgYm9hcmRfaW5mbyBnYXZlIGEgbW9kYWxpYXMgb2YgIkNISVAiLiAgWW91ciBwcm9iZSgpIGNvZGUKIG1pZ2h0IGxvb2sgbGlrZSB0aGlzIHVubGVzcyB5b3UncmUgY3JlYXRpbmcgYSBkZXZpY2Ugd2hpY2ggaXMgbWFuYWdpbmcKIGEgYnVzIChhcHBlYXJpbmcgdW5kZXIgL3N5cy9jbGFzcy9zcGlfbWFzdGVyKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3NwaWRldl90ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGlkZXZfdGVzdC5jCmluZGV4IGMxYTVhYWQuLjEwYWJkMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3BpL3NwaWRldl90ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvc3BpZGV2X3Rlc3QuYwpAQCAtNjksNyArNjksNyBAQAogCXB1dHMoIiIpOwogfQogCi12b2lkIHByaW50X3VzYWdlKGNvbnN0IGNoYXIgKnByb2cpCitzdGF0aWMgdm9pZCBwcmludF91c2FnZShjb25zdCBjaGFyICpwcm9nKQogewogCXByaW50ZigiVXNhZ2U6ICVzIFstRHNiZGxIT0xDM11cbiIsIHByb2cpOwogCXB1dHMoIiAgLUQgLS1kZXZpY2UgICBkZXZpY2UgdG8gdXNlIChkZWZhdWx0IC9kZXYvc3BpZGV2MS4xKVxuIgpAQCAtODUsNyArODUsNyBAQAogCWV4aXQoMSk7CiB9CiAKLXZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqYXJndltdKQorc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXdoaWxlICgxKSB7CiAJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvcHRzW10gPSB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAppbmRleCAyZGJmZjUzLi5iM2Q4YjQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKQEAgLTMxMywzMSArMzEzLDQzIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKK3ByaW50a19kZWxheToKKworRGVsYXkgZWFjaCBwcmludGsgbWVzc2FnZSBpbiBwcmludGtfZGVsYXkgbWlsbGlzZWNvbmRzCisKK1ZhbHVlIGZyb20gMCAtIDEwMDAwIGlzIGFsbG93ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIHJhbmRvbWl6ZS12YS1zcGFjZToKIAogVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIHByb2Nlc3MgYWRkcmVzcwogc3BhY2UgcmFuZG9taXphdGlvbiB0aGF0IGlzIHVzZWQgaW4gdGhlIHN5c3RlbSwgZm9yIGFyY2hpdGVjdHVyZXMKIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiAKLTAgLSBUdXJuIHRoZSBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgcmFuZG9taXphdGlvbiBvZmYgYnkgZGVmYXVsdC4KKzAgLSBUdXJuIHRoZSBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgcmFuZG9taXphdGlvbiBvZmYuICBUaGlzIGlzIHRoZQorICAgIGRlZmF1bHQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUgYW55d2F5cywKKyAgICBhbmQga2VybmVscyB0aGF0IGFyZSBib290ZWQgd2l0aCB0aGUgIm5vcmFuZG1hcHMiIHBhcmFtZXRlci4KIAogMSAtIE1ha2UgdGhlIGFkZHJlc3NlcyBvZiBtbWFwIGJhc2UsIHN0YWNrIGFuZCBWRFNPIHBhZ2UgcmFuZG9taXplZC4KICAgICBUaGlzLCBhbW9uZyBvdGhlciB0aGluZ3MsIGltcGxpZXMgdGhhdCBzaGFyZWQgbGlicmFyaWVzIHdpbGwgYmUKLSAgICBsb2FkZWQgdG8gcmFuZG9tIGFkZHJlc3Nlcy4gQWxzbyBmb3IgUElFLWxpbmtlZCBiaW5hcmllcywgdGhlIGxvY2F0aW9uCi0gICAgb2YgY29kZSBzdGFydCBpcyByYW5kb21pemVkLgorICAgIGxvYWRlZCB0byByYW5kb20gYWRkcmVzc2VzLiAgQWxzbyBmb3IgUElFLWxpbmtlZCBiaW5hcmllcywgdGhlCisgICAgbG9jYXRpb24gb2YgY29kZSBzdGFydCBpcyByYW5kb21pemVkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB0aGUKKyAgICBDT05GSUdfQ09NUEFUX0JSSyBvcHRpb24gaXMgZW5hYmxlZC4KIAotICAgIFdpdGggaGVhcCByYW5kb21pemF0aW9uLCB0aGUgc2l0dWF0aW9uIGlzIGEgbGl0dGxlIGJpdCBtb3JlCi0gICAgY29tcGxpY2F0ZWQuCi0gICAgVGhlcmUgYSBmZXcgbGVnYWN5IGFwcGxpY2F0aW9ucyBvdXQgdGhlcmUgKHN1Y2ggYXMgc29tZSBhbmNpZW50CisyIC0gQWRkaXRpb25hbGx5IGVuYWJsZSBoZWFwIHJhbmRvbWl6YXRpb24uICBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmCisgICAgQ09ORklHX0NPTVBBVF9CUksgaXMgZGlzYWJsZWQuCisKKyAgICBUaGVyZSBhcmUgYSBmZXcgbGVnYWN5IGFwcGxpY2F0aW9ucyBvdXQgdGhlcmUgKHN1Y2ggYXMgc29tZSBhbmNpZW50CiAgICAgdmVyc2lvbnMgb2YgbGliYy5zby41IGZyb20gMTk5NikgdGhhdCBhc3N1bWUgdGhhdCBicmsgYXJlYSBzdGFydHMKLSAgICBqdXN0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGNvZGUrYnNzLiBUaGVzZSBhcHBsaWNhdGlvbnMgYnJlYWsgd2hlbgotICAgIHN0YXJ0IG9mIHRoZSBicmsgYXJlYSBpcyByYW5kb21pemVkLiBUaGVyZSBhcmUgaG93ZXZlciBubyBrbm93bgorICAgIGp1c3QgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgY29kZStic3MuICBUaGVzZSBhcHBsaWNhdGlvbnMgYnJlYWsgd2hlbgorICAgIHN0YXJ0IG9mIHRoZSBicmsgYXJlYSBpcyByYW5kb21pemVkLiAgVGhlcmUgYXJlIGhvd2V2ZXIgbm8ga25vd24KICAgICBub24tbGVnYWN5IGFwcGxpY2F0aW9ucyB0aGF0IHdvdWxkIGJlIGJyb2tlbiB0aGlzIHdheSwgc28gZm9yIG1vc3QKLSAgICBzeXN0ZW1zIGl0IGlzIHNhZmUgdG8gY2hvb3NlIGZ1bGwgcmFuZG9taXphdGlvbi4gSG93ZXZlciB0aGVyZSBpcwotICAgIGEgQ09ORklHX0NPTVBBVF9CUksgb3B0aW9uIGZvciBzeXN0ZW1zIHdpdGggYW5jaWVudCBhbmQvb3IgYnJva2VuCi0gICAgYmluYXJpZXMsIHRoYXQgbWFrZXMgaGVhcCBub24tcmFuZG9taXplZCwgYnV0IGtlZXBzIGFsbCBvdGhlcgotICAgIHBhcnRzIG9mIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSByYW5kb21pemVkIGlmIHJhbmRvbWl6ZV92YV9zcGFjZQotICAgIHN5c2N0bCBpcyB0dXJuZWQgb24uCisgICAgc3lzdGVtcyBpdCBpcyBzYWZlIHRvIGNob29zZSBmdWxsIHJhbmRvbWl6YXRpb24uCisKKyAgICBTeXN0ZW1zIHdpdGggYW5jaWVudCBhbmQvb3IgYnJva2VuIGJpbmFyaWVzIHNob3VsZCBiZSBjb25maWd1cmVkCisgICAgd2l0aCBDT05GSUdfQ09NUEFUX0JSSyBlbmFibGVkLCB3aGljaCBleGNsdWRlcyB0aGUgaGVhcCBmcm9tIHByb2Nlc3MKKyAgICBhZGRyZXNzIHNwYWNlIHJhbmRvbWl6YXRpb24uCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dAppbmRleCBjNGRlNjM1Li5lNmZiMWVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CkBAIC01ODUsNyArNTg1LDkgQEAKIEF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHZmc19jYWNoZV9wcmVzc3VyZT0xMDAgdGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgdG8KIHJlY2xhaW0gZGVudHJpZXMgYW5kIGlub2RlcyBhdCBhICJmYWlyIiByYXRlIHdpdGggcmVzcGVjdCB0byBwYWdlY2FjaGUgYW5kCiBzd2FwY2FjaGUgcmVjbGFpbS4gIERlY3JlYXNpbmcgdmZzX2NhY2hlX3ByZXNzdXJlIGNhdXNlcyB0aGUga2VybmVsIHRvIHByZWZlcgotdG8gcmV0YWluIGRlbnRyeSBhbmQgaW5vZGUgY2FjaGVzLiAgSW5jcmVhc2luZyB2ZnNfY2FjaGVfcHJlc3N1cmUgYmV5b25kIDEwMAordG8gcmV0YWluIGRlbnRyeSBhbmQgaW5vZGUgY2FjaGVzLiBXaGVuIHZmc19jYWNoZV9wcmVzc3VyZT0wLCB0aGUga2VybmVsIHdpbGwKK25ldmVyIHJlY2xhaW0gZGVudHJpZXMgYW5kIGlub2RlcyBkdWUgdG8gbWVtb3J5IHByZXNzdXJlIGFuZCB0aGlzIGNhbiBlYXNpbHkKK2xlYWQgdG8gb3V0LW9mLW1lbW9yeSBjb25kaXRpb25zLiBJbmNyZWFzaW5nIHZmc19jYWNoZV9wcmVzc3VyZSBiZXlvbmQgMTAwCiBjYXVzZXMgdGhlIGtlcm5lbCB0byBwcmVmZXIgdG8gcmVjbGFpbSBkZW50cmllcyBhbmQgaW5vZGVzLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMta21lbS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWYyYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMta21lbS50eHQKQEAgLTAsMCArMSwxMDcgQEAKKwkJCVN1YnN5c3RlbSBUcmFjZSBQb2ludHM6IGttZW0KKworVGhlIHRyYWNpbmcgc3lzdGVtIGttZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KK3dpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmb3VyIG1ham9yIHN1YmhlYWRpbmdzLgorCisgIG8gU2xhYiBhbGxvY2F0aW9uIG9mIHNtYWxsIG9iamVjdHMgb2YgdW5rbm93biB0eXBlIChrbWFsbG9jKQorICBvIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIGtub3duIHR5cGUKKyAgbyBQYWdlIGFsbG9jYXRpb24KKyAgbyBQZXItQ1BVIEFsbG9jYXRvciBBY3Rpdml0eQorICBvIEV4dGVybmFsIEZyYWdtZW50YXRpb24KKworVGhpcyBkb2N1bWVudCB3aWxsIGRlc2NyaWJlIHdoYXQgZWFjaCBvZiB0aGUgdHJhY2Vwb2ludHMgYXJlIGFuZCB3aHkgdGhleQorbWlnaHQgYmUgdXNlZnVsLgorCisxLiBTbGFiIGFsbG9jYXRpb24gb2Ygc21hbGwgb2JqZWN0cyBvZiB1bmtub3duIHR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQora21hbGxvYwkJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzCitrbWFsbG9jX25vZGUJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzIG5vZGU9JWQKK2tmcmVlCQljYWxsX3NpdGU9JWx4IHB0cj0lcAorCitIZWF2eSBhY3Rpdml0eSBmb3IgdGhlc2UgZXZlbnRzIG1heSBpbmRpY2F0ZSB0aGF0IGEgc3BlY2lmaWMgY2FjaGUgaXMKK2p1c3RpZmllZCwgcGFydGljdWxhcmx5IGlmIGttYWxsb2Mgc2xhYiBwYWdlcyBhcmUgZ2V0dGluZyBzaWduaWZpY2FudGx5CitpbnRlcm5hbCBmcmFnbWVudGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBhbGxvY2F0aW9uIHBhdHRlcm4uIEJ5IGNvcnJlbGF0aW5nCitrbWFsbG9jIHdpdGgga2ZyZWUsIGl0IG1heSBiZSBwb3NzaWJsZSB0byBpZGVudGlmeSBtZW1vcnkgbGVha3MgYW5kIHdoZXJlCit0aGUgYWxsb2NhdGlvbiBzaXRlcyB3ZXJlLgorCisKKzIuIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIGtub3duIHR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2ttZW1fY2FjaGVfYWxsb2MJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzCitrbWVtX2NhY2hlX2FsbG9jX25vZGUJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzIG5vZGU9JWQKK2ttZW1fY2FjaGVfZnJlZQkJY2FsbF9zaXRlPSVseCBwdHI9JXAKKworVGhlc2UgZXZlbnRzIGFyZSBzaW1pbGFyIGluIHVzYWdlIHRvIHRoZSBrbWFsbG9jLXJlbGF0ZWQgZXZlbnRzIGV4Y2VwdCB0aGF0CitpdCBpcyBsaWtlbHkgZWFzaWVyIHRvIHBpbiB0aGUgZXZlbnQgZG93biB0byBhIHNwZWNpZmljIGNhY2hlLiBBdCB0aGUgdGltZQorb2Ygd3JpdGluZywgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIHdoYXQgc2xhYiBpcyBiZWluZyBhbGxvY2F0ZWQgZnJvbSwKK2J1dCB0aGUgY2FsbF9zaXRlIGNhbiB1c3VhbGx5IGJlIHVzZWQgdG8gZXh0cmFwb2xhdGUgdGhhdCBpbmZvcm1hdGlvbgorCiszLiBQYWdlIGFsbG9jYXRpb24KKz09PT09PT09PT09PT09PT09PQorbW1fcGFnZV9hbGxvYwkJICBwYWdlPSVwIHBmbj0lbHUgb3JkZXI9JWQgbWlncmF0ZXR5cGU9JWQgZ2ZwX2ZsYWdzPSVzCittbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkIHBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0ldSBtaWdyYXRldHlwZT0lZCBjcHU9JWQgcGVyY3B1X3JlZmlsbD0lZAorbW1fcGFnZV9mcmVlX2RpcmVjdAkgIHBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZAorbW1fcGFnZXZlY19mcmVlCQkgIHBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCBjb2xkPSVkCisKK1RoZXNlIGZvdXIgZXZlbnRzIGRlYWwgd2l0aCBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcuIG1tX3BhZ2VfYWxsb2MgaXMKK2Egc2ltcGxlIGluZGljYXRvciBvZiBwYWdlIGFsbG9jYXRvciBhY3Rpdml0eS4gUGFnZXMgbWF5IGJlIGFsbG9jYXRlZCBmcm9tCit0aGUgcGVyLUNQVSBhbGxvY2F0b3IgKGhpZ2ggcGVyZm9ybWFuY2UpIG9yIHRoZSBidWRkeSBhbGxvY2F0b3IuCisKK0lmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgZGlyZWN0bHkgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCB0aGUKK21tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGlzIGV2ZW50IGlzIGltcG9ydGFudCBhcyBoaWdoCithbW91bnRzIG9mIGFjdGl2aXR5IGltcGx5IGhpZ2ggYWN0aXZpdHkgb24gdGhlIHpvbmUtPmxvY2suIFRha2luZyB0aGlzIGxvY2sKK2ltcGFpcnMgcGVyZm9ybWFuY2UgYnkgZGlzYWJsaW5nIGludGVycnVwdHMsIGRpcnR5aW5nIGNhY2hlIGxpbmVzIGJldHdlZW4KK0NQVXMgYW5kIHNlcmlhbGlzaW5nIG1hbnkgQ1BVcy4KKworV2hlbiBhIHBhZ2UgaXMgZnJlZWQgZGlyZWN0bHkgYnkgdGhlIGNhbGxlciwgdGhlIG1tX3BhZ2VfZnJlZV9kaXJlY3QgZXZlbnQKK2lzIHRyaWdnZXJlZC4gU2lnbmlmaWNhbnQgYW1vdW50cyBvZiBhY3Rpdml0eSBoZXJlIGNvdWxkIGluZGljYXRlIHRoYXQgdGhlCitjYWxsZXJzIHNob3VsZCBiZSBiYXRjaGluZyB0aGVpciBhY3Rpdml0aWVzLgorCitXaGVuIHBhZ2VzIGFyZSBmcmVlZCB1c2luZyBhIHBhZ2V2ZWMsIHRoZSBtbV9wYWdldmVjX2ZyZWUgaXMKK3RyaWdnZXJlZC4gQnJvYWRseSBzcGVha2luZywgcGFnZXMgYXJlIHRha2VuIG9mZiB0aGUgTFJVIGxvY2sgaW4gYnVsayBhbmQKK2ZyZWVkIGluIGJhdGNoIHdpdGggYSBwYWdldmVjLiBTaWduaWZpY2FudCBhbW91bnRzIG9mIGFjdGl2aXR5IGhlcmUgY291bGQKK2luZGljYXRlIHRoYXQgdGhlIHN5c3RlbSBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUgYW5kIGNhbiBhbHNvIGluZGljYXRlCitjb250ZW50aW9uIG9uIHRoZSB6b25lLT5scnVfbG9jay4KKworNC4gUGVyLUNQVSBBbGxvY2F0b3IgQWN0aXZpdHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkCXBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0ldSBtaWdyYXRldHlwZT0lZCBjcHU9JWQgcGVyY3B1X3JlZmlsbD0lZAorbW1fcGFnZV9wY3B1X2RyYWluCQlwYWdlPSVwIHBmbj0lbHUgb3JkZXI9JWQgY3B1PSVkIG1pZ3JhdGV0eXBlPSVkCisKK0luIGZyb250IG9mIHRoZSBwYWdlIGFsbG9jYXRvciBpcyBhIHBlci1jcHUgcGFnZSBhbGxvY2F0b3IuIEl0IGV4aXN0cyBvbmx5Citmb3Igb3JkZXItMCBwYWdlcywgcmVkdWNlcyBjb250ZW50aW9uIG9uIHRoZSB6b25lLT5sb2NrIGFuZCByZWR1Y2VzIHRoZQorYW1vdW50IG9mIHdyaXRpbmcgb24gc3RydWN0IHBhZ2UuCisKK1doZW4gYSBwZXItQ1BVIGxpc3QgaXMgZW1wdHkgb3IgcGFnZXMgb2YgdGhlIHdyb25nIHR5cGUgYXJlIGFsbG9jYXRlZCwKK3RoZSB6b25lLT5sb2NrIHdpbGwgYmUgdGFrZW4gb25jZSBhbmQgdGhlIHBlci1DUFUgbGlzdCByZWZpbGxlZC4gVGhlIGV2ZW50Cit0cmlnZ2VyZWQgaXMgbW1fcGFnZV9hbGxvY196b25lX2xvY2tlZCBmb3IgZWFjaCBwYWdlIGFsbG9jYXRlZCB3aXRoIHRoZQorZXZlbnQgaW5kaWNhdGluZyB3aGV0aGVyIGl0IGlzIGZvciBhIHBlcmNwdV9yZWZpbGwgb3Igbm90LgorCitXaGVuIHRoZSBwZXItQ1BVIGxpc3QgaXMgdG9vIGZ1bGwsIGEgbnVtYmVyIG9mIHBhZ2VzIGFyZSBmcmVlZCwgZWFjaCBvbmUKK3doaWNoIHRyaWdnZXJzIGEgbW1fcGFnZV9wY3B1X2RyYWluIGV2ZW50LgorCitUaGUgaW5kaXZpZHVhbCBuYXR1cmUgb2YgdGhlIGV2ZW50cyBhcmUgc28gdGhhdCBwYWdlcyBjYW4gYmUgdHJhY2tlZAorYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLiBBIG51bWJlciBvZiBkcmFpbiBvciByZWZpbGwgcGFnZXMgdGhhdCBvY2N1cgorY29uc2VjdXRpdmVseSBpbXBseSB0aGUgem9uZS0+bG9jayBiZWluZyB0YWtlbiBvbmNlLiBMYXJnZSBhbW91bnRzIG9mIFBDUAorcmVmaWxscyBhbmQgZHJhaW5zIGNvdWxkIGltcGx5IGFuIGltYmFsYW5jZSBiZXR3ZWVuIENQVXMgd2hlcmUgdG9vIG11Y2ggd29yaworaXMgYmVpbmcgY29uY2VudHJhdGVkIGluIG9uZSBwbGFjZS4gSXQgY291bGQgYWxzbyBpbmRpY2F0ZSB0aGF0IHRoZSBwZXItQ1BVCitsaXN0cyBzaG91bGQgYmUgYSBsYXJnZXIgc2l6ZS4gRmluYWxseSwgbGFyZ2UgYW1vdW50cyBvZiByZWZpbGxzIG9uIG9uZSBDUFUKK2FuZCBkcmFpbnMgb24gYW5vdGhlciBjb3VsZCBiZSBhIGZhY3RvciBpbiBjYXVzaW5nIGxhcmdlIGFtb3VudHMgb2YgY2FjaGUKK2xpbmUgYm91bmNlcyBkdWUgdG8gd3JpdGVzIGJldHdlZW4gQ1BVcyBhbmQgd29ydGggaW52ZXN0aWdhdGluZyBpZiBwYWdlcworY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgb24gdGhlIHNhbWUgQ1BVIHRocm91Z2ggc29tZSBhbGdvcml0aG0gY2hhbmdlLgorCis1LiBFeHRlcm5hbCBGcmFnbWVudGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09CittbV9wYWdlX2FsbG9jX2V4dGZyYWcJCXBhZ2U9JXAgcGZuPSVsdSBhbGxvY19vcmRlcj0lZCBmYWxsYmFja19vcmRlcj0lZCBwYWdlYmxvY2tfb3JkZXI9JWQgYWxsb2NfbWlncmF0ZXR5cGU9JWQgZmFsbGJhY2tfbWlncmF0ZXR5cGU9JWQgZnJhZ21lbnRpbmc9JWQgY2hhbmdlX293bmVyc2hpcD0lZAorCitFeHRlcm5hbCBmcmFnbWVudGF0aW9uIGFmZmVjdHMgd2hldGhlciBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiB3aWxsIGJlCitzdWNjZXNzZnVsIG9yIG5vdC4gRm9yIHNvbWUgdHlwZXMgb2YgaGFyZHdhcmUsIHRoaXMgaXMgaW1wb3J0YW50IGFsdGhvdWdoCitpdCBpcyBhdm9pZGVkIHdoZXJlIHBvc3NpYmxlLiBJZiB0aGUgc3lzdGVtIGlzIHVzaW5nIGh1Z2UgcGFnZXMgYW5kIG5lZWRzCit0byBiZSBhYmxlIHRvIHJlc2l6ZSB0aGUgcG9vbCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgc3lzdGVtLCB0aGlzIHZhbHVlCitpcyBpbXBvcnRhbnQuCisKK0xhcmdlIG51bWJlcnMgb2YgdGhpcyBldmVudCBpbXBsaWVzIHRoYXQgbWVtb3J5IGlzIGZyYWdtZW50aW5nIGFuZAoraGlnaC1vcmRlciBhbGxvY2F0aW9ucyB3aWxsIHN0YXJ0IGZhaWxpbmcgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuIE9uZQorbWVhbnMgb2YgcmVkdWNpbmcgdGhlIG9jY3VyYW5nZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCittaW5fZnJlZV9rYnl0ZXMgaW4gaW5jcmVtZW50cyBvZiAzKnBhZ2VibG9ja19zaXplKm5yX29ubGluZV9ub2RlcyB3aGVyZQorcGFnZWJsb2NrX3NpemUgaXMgdXN1YWxseSB0aGUgc2l6ZSBvZiB0aGUgZGVmYXVsdCBodWdlcGFnZSBzaXplLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0CmluZGV4IDc4YzQ1YTguLjAyYWM2ZWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy50eHQKQEAgLTcyLDcgKzcyLDcgQEAKIAogCSMgZWNobyAxID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvc2NoZWQvZW5hYmxlCiAKLVRvIGVhbmJsZSBhbGwgZXZlbnRzOgorVG8gZW5hYmxlIGFsbCBldmVudHM6CiAKIAkjIGVjaG8gMSA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2VuYWJsZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKaW5kZXggMWI2MjkyYi4uOTU3YjIyZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dApAQCAtMTMzLDcgKzEzMyw3IEBACiAJdGhhbiByZXF1ZXN0ZWQsIHRoZSByZXN0IG9mIHRoZSBwYWdlIHdpbGwgYmUgdXNlZCwKIAltYWtpbmcgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIGJpZ2dlciB0aGFuIHJlcXVlc3RlZC4KIAkoIE5vdGUsIHRoZSBzaXplIG1heSBub3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZSBzaXplCi0JICBkdWUgdG8gYnVmZmVyIG1hbmFnbWVudCBvdmVyaGVhZC4gKQorCSAgZHVlIHRvIGJ1ZmZlciBtYW5hZ2VtZW50IG92ZXJoZWFkLiApCiAKIAlUaGlzIGNhbiBvbmx5IGJlIHVwZGF0ZWQgd2hlbiB0aGUgY3VycmVudF90cmFjZXIKIAlpcyBzZXQgdG8gIm5vcCIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXBhZ2VhbGxvYy1wb3N0cHJvY2Vzcy5wbCBiL0RvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2UtcGFnZWFsbG9jLXBvc3Rwcm9jZXNzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjUwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXBhZ2VhbGxvYy1wb3N0cHJvY2Vzcy5wbApAQCAtMCwwICsxLDQxOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIFRoaXMgaXMgYSBQT0MgKHByb29mIG9mIGNvbmNlcHQgb3IgcGllY2Ugb2YgY3JhcCwgdGFrZSB5b3VyIHBpY2spIGZvciByZWFkaW5nIHRoZQorIyB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRyYWNlIG91dHB1dCByZWxhdGVkIHRvIHBhZ2UgYWxsb2NhdGlvbi4gSXQgbWFrZXMgYW4gYXR0ZW1wdAorIyB0byBleHRyYWN0IHNvbWUgaGlnaC1sZXZlbCBpbmZvcm1hdGlvbiBvbiB3aGF0IGlzIGdvaW5nIG9uLiBUaGUgYWNjdXJhY3kgb2YgdGhlIHBhcnNlcgorIyBtYXkgdmFyeSBjb25zaWRlcmFibHkKKyMKKyMgRXhhbXBsZSB1c2FnZTogdHJhY2UtcGFnZWFsbG9jLXBvc3Rwcm9jZXNzLnBsIDwgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZV9waXBlCisjIG90aGVyIG9wdGlvbnMKKyMgICAtLXByZXBlbmQtcGFyZW50CVJlcG9ydCBvbiB0aGUgcGFyZW50IHByb2MgYW5kIFBJRAorIyAgIC0tcmVhZC1wcm9jc3RhdAlJZiB0aGUgdHJhY2UgbGFja3MgcHJvY2VzcyBpbmZvLCBnZXQgaXQgZnJvbSAvcHJvYworIyAgIC0taWdub3JlLXBpZAlBZ2dyZWdhdGUgcHJvY2Vzc2VzIG9mIHRoZSBzYW1lIG5hbWUgdG9nZXRoZXIKKyMKKyMgQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24gMjAwOQorIyBBdXRob3I6IE1lbCBHb3JtYW4gPG1lbEBjc24udWwuaWU+Cit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKKworIyBUcmFjZXBvaW50IGV2ZW50cwordXNlIGNvbnN0YW50IE1NX1BBR0VfQUxMT0MJCT0+IDE7Cit1c2UgY29uc3RhbnQgTU1fUEFHRV9GUkVFX0RJUkVDVCAJPT4gMjsKK3VzZSBjb25zdGFudCBNTV9QQUdFVkVDX0ZSRUUJCT0+IDM7Cit1c2UgY29uc3RhbnQgTU1fUEFHRV9QQ1BVX0RSQUlOCQk9PiA0OwordXNlIGNvbnN0YW50IE1NX1BBR0VfQUxMT0NfWk9ORV9MT0NLRUQJPT4gNTsKK3VzZSBjb25zdGFudCBNTV9QQUdFX0FMTE9DX0VYVEZSQUcJPT4gNjsKK3VzZSBjb25zdGFudCBFVkVOVF9VTktOT1dOCQk9PiA3OworCisjIENvbnN0YW50cyB1c2VkIHRvIHRyYWNrIHN0YXRlCit1c2UgY29uc3RhbnQgU1RBVEVfUENQVV9QQUdFU19EUkFJTkVECT0+IDg7Cit1c2UgY29uc3RhbnQgU1RBVEVfUENQVV9QQUdFU19SRUZJTExFRAk9PiA5OworCisjIEhpZ2gtbGV2ZWwgZXZlbnRzIGV4dHJhcG9sYXRlZCBmcm9tIHRyYWNlcG9pbnRzCit1c2UgY29uc3RhbnQgSElHSF9QQ1BVX0RSQUlOUwkJPT4gMTA7Cit1c2UgY29uc3RhbnQgSElHSF9QQ1BVX1JFRklMTFMJCT0+IDExOwordXNlIGNvbnN0YW50IEhJR0hfRVhUX0ZSQUdNRU5UCQk9PiAxMjsKK3VzZSBjb25zdGFudCBISUdIX0VYVF9GUkFHTUVOVF9TRVZFUkUJPT4gMTM7Cit1c2UgY29uc3RhbnQgSElHSF9FWFRfRlJBR01FTlRfTU9ERVJBVEUJPT4gMTQ7Cit1c2UgY29uc3RhbnQgSElHSF9FWFRfRlJBR01FTlRfQ0hBTkdFRAk9PiAxNTsKKworbXkgJXBlcnByb2Nlc3NwaWQ7CitteSAlcGVycHJvY2VzczsKK215ICRvcHRfaWdub3JlcGlkOworbXkgJG9wdF9yZWFkX3Byb2NzdGF0OworbXkgJG9wdF9wcmVwZW5kX3BhcmVudDsKKworIyBDYXRjaCBzaWdpbnQgYW5kIGV4aXQgb24gcmVxdWVzdAorbXkgJHNpZ2ludF9yZXBvcnQgPSAwOworbXkgJHNpZ2ludF9leGl0ID0gMDsKK215ICRzaWdpbnRfcGVuZGluZyA9IDA7CitteSAkc2lnaW50X3JlY2VpdmVkID0gMDsKK3N1YiBzaWdpbnRfaGFuZGxlciB7CisJbXkgJGN1cnJlbnRfdGltZSA9IHRpbWU7CisJaWYgKCRjdXJyZW50X3RpbWUgLSAyID4gJHNpZ2ludF9yZWNlaXZlZCkgeworCQlwcmludCAiU0lHSU5UIHJlY2VpdmVkLCByZXBvcnQgcGVuZGluZy4gSGl0IGN0cmwtYyBhZ2FpbiB0byBleGl0XG4iOworCQkkc2lnaW50X3JlcG9ydCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKCEkc2lnaW50X2V4aXQpIHsKKwkJCXByaW50ICJTZWNvbmQgU0lHSU5UIHJlY2VpdmVkIHF1aWNrbHksIGV4aXRpbmdcbiI7CisJCX0KKwkJJHNpZ2ludF9leGl0Kys7CisJfQorCisJaWYgKCRzaWdpbnRfZXhpdCA+IDMpIHsKKwkJcHJpbnQgIk1hbnkgU0lHSU5UcyByZWNlaXZlZCwgZXhpdGluZyBub3cgd2l0aG91dCByZXBvcnRcbiI7CisJCWV4aXQ7CisJfQorCisJJHNpZ2ludF9yZWNlaXZlZCA9ICRjdXJyZW50X3RpbWU7CisJJHNpZ2ludF9wZW5kaW5nID0gMTsKK30KKyRTSUd7SU5UfSA9ICJzaWdpbnRfaGFuZGxlciI7CisKKyMgUGFyc2UgY29tbWFuZCBsaW5lIG9wdGlvbnMKK0dldE9wdGlvbnMoCisJJ2lnbm9yZS1waWQnCSA9PglcJG9wdF9pZ25vcmVwaWQsCisJJ3JlYWQtcHJvY3N0YXQnCSA9PglcJG9wdF9yZWFkX3Byb2NzdGF0LAorCSdwcmVwZW5kLXBhcmVudCcgPT4JXCRvcHRfcHJlcGVuZF9wYXJlbnQsCispOworCisjIERlZmF1bHRzIGZvciBkeW5hbWljYWxseSBkaXNjb3ZlcmVkIHJlZ2V4J3MKK215ICRyZWdleF9mcmFnZGV0YWlsc19kZWZhdWx0ID0gJ3BhZ2U9KFswLTlhLWZdKikgcGZuPShbMC05XSopIGFsbG9jX29yZGVyPShbLTAtOV0qKSBmYWxsYmFja19vcmRlcj0oWy0wLTldKikgcGFnZWJsb2NrX29yZGVyPShbLTAtOV0qKSBhbGxvY19taWdyYXRldHlwZT0oWy0wLTldKikgZmFsbGJhY2tfbWlncmF0ZXR5cGU9KFstMC05XSopIGZyYWdtZW50aW5nPShbLTAtOV0pIGNoYW5nZV9vd25lcnNoaXA9KFstMC05XSknOworCisjIER5YW5pY2FsbHkgZGlzY292ZXJlZCByZWdleAorbXkgJHJlZ2V4X2ZyYWdkZXRhaWxzOworCisjIFN0YXRpYyByZWdleCB1c2VkLiBTcGVjaWZpZWQgbGlrZSB0aGlzIGZvciByZWFkYWJpbGl0eSBhbmQgZm9yIHVzZSB3aXRoIC9vCisjICAgICAgICAgICAgICAgICAgICAgIChwcm9jZXNzX3BpZCkgICAgIChjcHVzICAgICAgKSAgICggdGltZSAgKSAgICh0cG9pbnQgICAgKSAoZGV0YWlscykKK215ICRyZWdleF90cmFjZWV2ZW50ID0gJ1xzKihbYS16QS1aMC05LV0qKVxzKihcW1swLTldKlxdKVxzKihbMC05Ll0qKTpccyooW2EtekEtWl9dKik6XHMqKC4qKSc7CitteSAkcmVnZXhfc3RhdG5hbWUgPSAnWy0wLTldKlxzXCgoLiopXCkuKic7CitteSAkcmVnZXhfc3RhdHBwaWQgPSAnWy0wLTldKlxzXCguKlwpXHNbQS1aYS16XVxzKFswLTldKikuKic7CisKK3N1YiBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4IHsKKwlteSAkZXZlbnQgPSBzaGlmdDsKKwlteSAkZGVmYXVsdCA9IHNoaWZ0OworCW15ICRyZWdleDsKKworCSMgUmVhZCB0aGUgZXZlbnQgZm9ybWF0IG9yIHVzZSB0aGUgZGVmYXVsdAorCWlmICghb3BlbiAoRk9STUFULCAiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvJGV2ZW50L2Zvcm1hdCIpKSB7CisJCSRyZWdleCA9ICRkZWZhdWx0OworCX0gZWxzZSB7CisJCW15ICRsaW5lOworCQl3aGlsZSAoIWVvZihGT1JNQVQpKSB7CisJCQkkbGluZSA9IDxGT1JNQVQ+OworCQkJaWYgKCRsaW5lID1+IC9ecHJpbnQgZm10OlxzIiguKikiLC4qLykgeworCQkJCSRyZWdleCA9ICQxOworCQkJCSRyZWdleCA9fiBzLyVwL1woWzAtOWEtZl0qXCkvZzsKKwkJCQkkcmVnZXggPX4gcy8lZC9cKFstMC05XSpcKS9nOworCQkJCSRyZWdleCA9fiBzLyVsdS9cKFswLTldKlwpL2c7CisJCQl9CisJCX0KKwl9CisKKwkjIFZlcmlmeSBmaWVsZHMgYXJlIGluIHRoZSByaWdodCBvcmRlcgorCW15ICR0dXBsZTsKKwlmb3JlYWNoICR0dXBsZSAoc3BsaXQgL1xzLywgJHJlZ2V4KSB7CisJCW15ICgka2V5LCAkdmFsdWUpID0gc3BsaXQoLz0vLCAkdHVwbGUpOworCQlteSAkZXhwZWN0ZWQgPSBzaGlmdDsKKwkJaWYgKCRrZXkgbmUgJGV4cGVjdGVkKSB7CisJCQlwcmludCgiV0FSTklORzogRm9ybWF0IG5vdCBhcyBleHBlY3RlZCAnJGtleScgIT0gJyRleHBlY3RlZCciKTsKKwkJCSRyZWdleCA9fiBzLyRrZXk9XCgoLiopXCkvJGtleT0kMS87CisJCX0KKwl9CisKKwlpZiAoZGVmaW5lZCBzaGlmdCkgeworCQlkaWUoIkZld2VyIGZpZWxkcyB0aGFuIGV4cGVjdGVkIGluIGZvcm1hdCIpOworCX0KKworCXJldHVybiAkcmVnZXg7Cit9CiskcmVnZXhfZnJhZ2RldGFpbHMgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KCJrbWVtL21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyIsCisJCQkkcmVnZXhfZnJhZ2RldGFpbHNfZGVmYXVsdCwKKwkJCSJwYWdlIiwgInBmbiIsCisJCQkiYWxsb2Nfb3JkZXIiLCAiZmFsbGJhY2tfb3JkZXIiLCAicGFnZWJsb2NrX29yZGVyIiwKKwkJCSJhbGxvY19taWdyYXRldHlwZSIsICJmYWxsYmFja19taWdyYXRldHlwZSIsCisJCQkiZnJhZ21lbnRpbmciLCAiY2hhbmdlX293bmVyc2hpcCIpOworCitzdWIgcmVhZF9zdGF0bGluZSgkKSB7CisJbXkgJHBpZCA9ICRfWzBdOworCW15ICRzdGF0bGluZTsKKworCWlmIChvcGVuKFNUQVQsICIvcHJvYy8kcGlkL3N0YXQiKSkgeworCQkkc3RhdGxpbmUgPSA8U1RBVD47CisJCWNsb3NlKFNUQVQpOworCX0KKworCWlmICgkc3RhdGxpbmUgZXEgJycpIHsKKwkJJHN0YXRsaW5lID0gIi0xIChVTktOT1dOX1BST0NFU1NfTkFNRSkgUiAwIjsKKwl9CisKKwlyZXR1cm4gJHN0YXRsaW5lOworfQorCitzdWIgZ3Vlc3NfcHJvY2Vzc19waWQoJCQpIHsKKwlteSAkcGlkID0gJF9bMF07CisJbXkgJHN0YXRsaW5lID0gJF9bMV07CisKKwlpZiAoJHBpZCA9PSAwKSB7CisJCXJldHVybiAic3dhcHBlci0wIjsKKwl9CisKKwlpZiAoJHN0YXRsaW5lICF+IC8kcmVnZXhfc3RhdG5hbWUvbykgeworCQlkaWUoIkZhaWxlZCB0byBtYXRoIHN0YXQgbGluZSBmb3IgcHJvY2VzcyBuYW1lIDo6ICRzdGF0bGluZSIpOworCX0KKwlyZXR1cm4gIiQxLSRwaWQiOworfQorCitzdWIgcGFyZW50X2luZm8oJCQpIHsKKwlteSAkcGlkID0gJF9bMF07CisJbXkgJHN0YXRsaW5lID0gJF9bMV07CisJbXkgJHBwaWQ7CisKKwlpZiAoJHBpZCA9PSAwKSB7CisJCXJldHVybiAiTk9QQVJFTlQtMCI7CisJfQorCisJaWYgKCRzdGF0bGluZSAhfiAvJHJlZ2V4X3N0YXRwcGlkL28pIHsKKwkJZGllKCJGYWlsZWQgdG8gbWF0Y2ggc3RhdCBsaW5lIHByb2Nlc3MgcHBpZDo6ICRzdGF0bGluZSIpOworCX0KKworCSMgUmVhZCB0aGUgcHBpZCBzdGF0IGxpbmUKKwkkcHBpZCA9ICQxOworCXJldHVybiBndWVzc19wcm9jZXNzX3BpZCgkcHBpZCwgcmVhZF9zdGF0bGluZSgkcHBpZCkpOworfQorCitzdWIgcHJvY2Vzc19ldmVudHMgeworCW15ICR0cmFjZWV2ZW50OworCW15ICRwcm9jZXNzX3BpZDsKKwlteSAkY3B1czsKKwlteSAkdGltZXN0YW1wOworCW15ICR0cmFjZXBvaW50OworCW15ICRkZXRhaWxzOworCW15ICRzdGF0bGluZTsKKworCSMgUmVhZCBlYWNoIGxpbmUgb2YgdGhlIGV2ZW50IGxvZworRVZFTlRfUFJPQ0VTUzoKKwl3aGlsZSAoJHRyYWNlZXZlbnQgPSA8U1RESU4+KSB7CisJCWlmICgkdHJhY2VldmVudCA9fiAvJHJlZ2V4X3RyYWNlZXZlbnQvbykgeworCQkJJHByb2Nlc3NfcGlkID0gJDE7CisJCQkkdHJhY2Vwb2ludCA9ICQ0OworCisJCQlpZiAoJG9wdF9yZWFkX3Byb2NzdGF0IHx8ICRvcHRfcHJlcGVuZF9wYXJlbnQpIHsKKwkJCQkkcHJvY2Vzc19waWQgPX4gLyguKiktKFswLTldKikkLzsKKwkJCQlteSAkcHJvY2VzcyA9ICQxOworCQkJCW15ICRwaWQgPSAkMjsKKworCQkJCSRzdGF0bGluZSA9IHJlYWRfc3RhdGxpbmUoJHBpZCk7CisKKwkJCQlpZiAoJG9wdF9yZWFkX3Byb2NzdGF0ICYmICRwcm9jZXNzIGVxICcnKSB7CisJCQkJCSRwcm9jZXNzX3BpZCA9IGd1ZXNzX3Byb2Nlc3NfcGlkKCRwaWQsICRzdGF0bGluZSk7CisJCQkJfQorCisJCQkJaWYgKCRvcHRfcHJlcGVuZF9wYXJlbnQpIHsKKwkJCQkJJHByb2Nlc3NfcGlkID0gcGFyZW50X2luZm8oJHBpZCwgJHN0YXRsaW5lKSAuICIgOjogJHByb2Nlc3NfcGlkIjsKKwkJCQl9CisJCQl9CisKKwkJCSMgVW5uZWNlc3NhcnkgaW4gdGhpcyBzY3JpcHQuIFVuY29tbWVudCBpZiByZXF1aXJlZAorCQkJIyAkY3B1cyA9ICQyOworCQkJIyAkdGltZXN0YW1wID0gJDM7CisJCX0gZWxzZSB7CisJCQluZXh0OworCQl9CisKKwkJIyBQZXJsIFN3aXRjaCgpIHN1Y2tzIG1ham9ybHkKKwkJaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdlX2FsbG9jIikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfQUxMT0N9Kys7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdlX2ZyZWVfZGlyZWN0IikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfRlJFRV9ESVJFQ1R9Kys7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdldmVjX2ZyZWUiKSB7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRVZFQ19GUkVFfSsrOworCQl9IGVsc2lmICgkdHJhY2Vwb2ludCBlcSAibW1fcGFnZV9wY3B1X2RyYWluIikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfUENQVV9EUkFJTn0rKzsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9QQ1BVX1BBR0VTX0RSQUlORUR9Kys7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkIikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfQUxMT0NfWk9ORV9MT0NLRUR9Kys7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19SRUZJTExFRH0rKzsKKwkJfSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgIm1tX3BhZ2VfYWxsb2NfZXh0ZnJhZyIpIHsKKworCQkJIyBFeHRyYWN0IHRoZSBkZXRhaWxzIG9mIHRoZSBldmVudCBub3cKKwkJCSRkZXRhaWxzID0gJDU7CisKKwkJCW15ICgkcGFnZSwgJHBmbik7CisJCQlteSAoJGFsbG9jX29yZGVyLCAkZmFsbGJhY2tfb3JkZXIsICRwYWdlYmxvY2tfb3JkZXIpOworCQkJbXkgKCRhbGxvY19taWdyYXRldHlwZSwgJGZhbGxiYWNrX21pZ3JhdGV0eXBlKTsKKwkJCW15ICgkZnJhZ21lbnRpbmcsICRjaGFuZ2Vfb3duZXJzaGlwKTsKKworCQkJaWYgKCRkZXRhaWxzICF+IC8kcmVnZXhfZnJhZ2RldGFpbHMvbykgeworCQkJCXByaW50ICJXQVJOSU5HOiBGYWlsZWQgdG8gcGFyc2UgbW1fcGFnZV9hbGxvY19leHRmcmFnIGFzIGV4cGVjdGVkXG4iOworCQkJCW5leHQ7CisJCQl9CisKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0FMTE9DX0VYVEZSQUd9Kys7CisJCQkkcGFnZSA9ICQxOworCQkJJHBmbiA9ICQyOworCQkJJGFsbG9jX29yZGVyID0gJDM7CisJCQkkZmFsbGJhY2tfb3JkZXIgPSAkNDsKKwkJCSRwYWdlYmxvY2tfb3JkZXIgPSAkNTsKKwkJCSRhbGxvY19taWdyYXRldHlwZSA9ICQ2OworCQkJJGZhbGxiYWNrX21pZ3JhdGV0eXBlID0gJDc7CisJCQkkZnJhZ21lbnRpbmcgPSAkODsKKwkJCSRjaGFuZ2Vfb3duZXJzaGlwID0gJDk7CisKKwkJCWlmICgkZnJhZ21lbnRpbmcpIHsKKwkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR30rKzsKKwkJCQlpZiAoJGZhbGxiYWNrX29yZGVyIDw9IDMpIHsKKwkJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX0rKzsKKwkJCQl9IGVsc2UgeworCQkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfTU9ERVJBVEV9Kys7CisJCQkJfQorCQkJfQorCQkJaWYgKCRjaGFuZ2Vfb3duZXJzaGlwKSB7CisJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX0NIQU5HRUR9Kys7CisJCQl9CisJCX0gZWxzZSB7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57RVZFTlRfVU5LTk9XTn0rKzsKKwkJfQorCisJCSMgQ2F0Y2ggYSBmdWxsIHBjcHUgZHJhaW4gZXZlbnQKKwkJaWYgKCRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9QQ1BVX1BBR0VTX0RSQUlORUR9ICYmCisJCQkJJHRyYWNlcG9pbnQgbmUgIm1tX3BhZ2VfcGNwdV9kcmFpbiIpIHsKKworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfUENQVV9EUkFJTlN9Kys7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19EUkFJTkVEfSA9IDA7CisJCX0KKworCQkjIENhdGNoIGEgZnVsbCBwY3B1IHJlZmlsbCBldmVudAorCQlpZiAoJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX1BDUFVfUEFHRVNfUkVGSUxMRUR9ICYmCisJCQkJJHRyYWNlcG9pbnQgbmUgIm1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQiKSB7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX1JFRklMTFN9Kys7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19SRUZJTExFRH0gPSAwOworCQl9CisKKwkJaWYgKCRzaWdpbnRfcGVuZGluZykgeworCQkJbGFzdCBFVkVOVF9QUk9DRVNTOworCQl9CisJfQorfQorCitzdWIgZHVtcF9zdGF0cyB7CisJbXkgJGhhc2hyZWYgPSBzaGlmdDsKKwlteSAlc3RhdHMgPSAlJGhhc2hyZWY7CisKKwkjIER1bXAgcGVyLXByb2Nlc3Mgc3RhdHMKKwlteSAkcHJvY2Vzc19waWQ7CisJbXkgJG1heF9zdHJsZW4gPSAwOworCisJIyBHZXQgdGhlIG1heGltdW0gcHJvY2VzcyBuYW1lCisJZm9yZWFjaCAkcHJvY2Vzc19waWQgKGtleXMgJXBlcnByb2Nlc3NwaWQpIHsKKwkJbXkgJGxlbiA9IGxlbmd0aCgkcHJvY2Vzc19waWQpOworCQlpZiAoJGxlbiA+ICRtYXhfc3RybGVuKSB7CisJCQkkbWF4X3N0cmxlbiA9ICRsZW47CisJCX0KKwl9CisJJG1heF9zdHJsZW4gKz0gMjsKKworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIiUtIiAuICRtYXhfc3RybGVuIC4gInMgJThzICUxMHMgICAlOHMgJThzICAgJThzICU4cyAlOHMgICAlOHMgJThzICU4cyAlOHMgJThzICU4c1xuIiwKKwkJIlByb2Nlc3MiLCAiUGFnZXMiLCAgIlBhZ2VzIiwgICAgICAiUGFnZXMiLCAiUGFnZXMiLCAiUENQVSIsICAiUENQVSIsICAgIlBDUFUiLCAgICAiRnJhZ21lbnQiLCAgIkZyYWdtZW50IiwgIk1pZ1R5cGUiLCAiRnJhZ21lbnQiLCAiRnJhZ21lbnQiLCAiVW5rbm93biIpOworCXByaW50ZigiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAlOHMgJTEwcyAgICU4cyAlOHMgICAlOHMgJThzICU4cyAgICU4cyAlOHMgJThzICU4cyAlOHMgJThzXG4iLAorCQkiZGV0YWlscyIsICJhbGxvY2QiLCAiYWxsb2NkIiwgICAgICJmcmVlZCIsICJmcmVlZCIsICJwYWdlcyIsICJkcmFpbnMiLCAicmVmaWxscyIsICJGYWxsYmFjayIsICJDYXVzaW5nIiwgICAiQ2hhbmdlZCIsICJTZXZlcmUiLCAiTW9kZXJhdGUiLCAiIik7CisKKwlwcmludGYoIiUtIiAuICRtYXhfc3RybGVuIC4gInMgJThzICUxMHMgICAlOHMgJThzICAgJThzICU4cyAlOHMgICAlOHMgJThzICU4cyAlOHMgJThzICU4c1xuIiwKKwkJIiIsICAgICAgICAiIiwgICAgICAgInVuZGVyIGxvY2siLCAiZGlyZWN0IiwgInBhZ2V2ZWMiLCAiZHJhaW4iLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIpOworCisJZm9yZWFjaCAkcHJvY2Vzc19waWQgKGtleXMgJXN0YXRzKSB7CisJCSMgRHVtcCBmaW5hbCBhZ2dyZWdhdGVzCisJCWlmICgkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX1BDUFVfUEFHRVNfRFJBSU5FRH0pIHsKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX0RSQUlOU30rKzsKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19EUkFJTkVEfSA9IDA7CisJCX0KKwkJaWYgKCRzdGF0c3skcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19SRUZJTExFRH0pIHsKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX1JFRklMTFN9Kys7CisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX1BDUFVfUEFHRVNfUkVGSUxMRUR9ID0gMDsKKwkJfQorCisJCXByaW50ZigiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAlOGQgJTEwZCAgICU4ZCAlOGQgICAlOGQgJThkICU4ZCAgICU4ZCAlOGQgJThkICU4ZCAlOGQgJThkXG4iLAorCQkJJHByb2Nlc3NfcGlkLAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0FMTE9DfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fUEFHRV9BTExPQ19aT05FX0xPQ0tFRH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfRlJFRV9ESVJFQ1R9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFVkVDX0ZSRUV9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX1BDUFVfRFJBSU59LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX1BDUFVfRFJBSU5TfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX1JFRklMTFN9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0FMTE9DX0VYVEZSQUd9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0VYVF9GUkFHfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfQ0hBTkdFRH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX01PREVSQVRFfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57RVZFTlRfVU5LTk9XTn0pOworCX0KK30KKworc3ViIGFnZ3JlZ2F0ZV9wZXJwcm9jZXNzcGlkKCkgeworCW15ICRwcm9jZXNzX3BpZDsKKwlteSAkcHJvY2VzczsKKwl1bmRlZiAlcGVycHJvY2VzczsKKworCWZvcmVhY2ggJHByb2Nlc3NfcGlkIChrZXlzICVwZXJwcm9jZXNzcGlkKSB7CisJCSRwcm9jZXNzID0gJHByb2Nlc3NfcGlkOworCQkkcHJvY2VzcyA9fiBzLy0oWzAtOV0pKiQvLzsKKwkJaWYgKCRwcm9jZXNzIGVxICcnKSB7CisJCQkkcHJvY2VzcyA9ICJOT19QUk9DRVNTX05BTUUiOworCQl9CisKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRV9BTExPQ30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfQUxMT0N9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9QQUdFX0FMTE9DX1pPTkVfTE9DS0VEfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRV9BTExPQ19aT05FX0xPQ0tFRH07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1BBR0VfRlJFRV9ESVJFQ1R9ICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0ZSRUVfRElSRUNUfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRVZFQ19GUkVFfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRVZFQ19GUkVFfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRV9QQ1BVX0RSQUlOfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRV9QQ1BVX0RSQUlOfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57SElHSF9QQ1BVX0RSQUlOU30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfUENQVV9EUkFJTlN9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntISUdIX1BDUFVfUkVGSUxMU30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfUENQVV9SRUZJTExTfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRV9BTExPQ19FWFRGUkFHfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRV9BTExPQ19FWFRGUkFHfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57SElHSF9FWFRfRlJBR30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUd9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntISUdIX0VYVF9GUkFHTUVOVF9DSEFOR0VEfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfQ0hBTkdFRH07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX0gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX01PREVSQVRFfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfTU9ERVJBVEV9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntFVkVOVF9VTktOT1dOfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57RVZFTlRfVU5LTk9XTn07CisJfQorfQorCitzdWIgcmVwb3J0KCkgeworCWlmICghJG9wdF9pZ25vcmVwaWQpIHsKKwkJZHVtcF9zdGF0cyhcJXBlcnByb2Nlc3NwaWQpOworCX0gZWxzZSB7CisJCWFnZ3JlZ2F0ZV9wZXJwcm9jZXNzcGlkKCk7CisJCWR1bXBfc3RhdHMoXCVwZXJwcm9jZXNzKTsKKwl9Cit9CisKKyMgUHJvY2VzcyBldmVudHMgb3Igc2lnbmFscyB1bnRpbCBuZWl0aGVyIGlzIGF2YWlsYWJsZQorc3ViIHNpZ25hbF9sb29wKCkgeworCW15ICRzaWdpbnRfcHJvY2Vzc2VkOworCWRvIHsKKwkJJHNpZ2ludF9wcm9jZXNzZWQgPSAwOworCQlwcm9jZXNzX2V2ZW50cygpOworCisJCSMgSGFuZGxlIHBlbmRpbmcgc2lnbmFscyBpZiBhbnkKKwkJaWYgKCRzaWdpbnRfcGVuZGluZykgeworCQkJbXkgJGN1cnJlbnRfdGltZSA9IHRpbWU7CisKKwkJCWlmICgkc2lnaW50X2V4aXQpIHsKKwkJCQlwcmludCAiUmVjZWl2ZWQgZXhpdCBzaWduYWxcbiI7CisJCQkJJHNpZ2ludF9wZW5kaW5nID0gMDsKKwkJCX0KKwkJCWlmICgkc2lnaW50X3JlcG9ydCkgeworCQkJCWlmICgkY3VycmVudF90aW1lID49ICRzaWdpbnRfcmVjZWl2ZWQgKyAyKSB7CisJCQkJCXJlcG9ydCgpOworCQkJCQkkc2lnaW50X3JlcG9ydCA9IDA7CisJCQkJCSRzaWdpbnRfcGVuZGluZyA9IDA7CisJCQkJCSRzaWdpbnRfcHJvY2Vzc2VkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IHdoaWxlICgkc2lnaW50X3BlbmRpbmcgfHwgJHNpZ2ludF9wcm9jZXNzZWQpOworfQorCitzaWduYWxfbG9vcCgpOworcmVwb3J0KCk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvd2VyLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvcG93ZXIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDgwNWUxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvcG93ZXIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotVGhlIHBvd2VyIHRyYWNlciBjb2xsZWN0cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBDLXN0YXRlIGFuZCBQLXN0YXRlCi10cmFuc2l0aW9ucywgaW5zdGVhZCBvZiBqdXN0IGxvb2tpbmcgYXQgdGhlIGhpZ2gtbGV2ZWwgImF2ZXJhZ2UiCi1pbmZvcm1hdGlvbi4KLQotVGhlcmUgaXMgYSBoZWxwZXIgc2NyaXB0IGZvdW5kIGluIHNjcmlwcy90cmFjaW5nL3Bvd2VyLnBsIGluIHRoZSBrZXJuZWwKLXNvdXJjZXMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcGFyc2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgY3JlYXRlIGEKLVNjYWxhYmxlIFZlY3RvciBHcmFwaGljcyAoU1ZHKSBwaWN0dXJlIGZyb20gdGhlIHRyYWNlIGRhdGEuCi0KLVRvIHVzZSB0aGlzIHRyYWNlcjoKLQotCWVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkCi0JZWNobyBwb3dlciA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKLQllY2hvIDEgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZAotCXNsZWVwIDEKLQllY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZAotCWNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlIHwgXAotCQlwZXJsIHNjcmlwdHMvdHJhY2luZy9wb3dlci5wbCA+IG91dC5zdgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS90cmFjZXBvaW50LWFuYWx5c2lzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvdHJhY2Vwb2ludC1hbmFseXNpcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViNGU0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvdHJhY2Vwb2ludC1hbmFseXNpcy50eHQKQEAgLTAsMCArMSwzMjcgQEAKKwkJTm90ZXMgb24gQW5hbHlzaW5nIEJlaGF2aW91ciBVc2luZyBFdmVudHMgYW5kIFRyYWNlcG9pbnRzCisKKwkJCURvY3VtZW50YXRpb24gd3JpdHRlbiBieSBNZWwgR29ybWFuCisJCVBDTCBpbmZvcm1hdGlvbiBoZWF2aWx5IGJhc2VkIG9uIGVtYWlsIGZyb20gSW5nbyBNb2xuYXIKKworMS4gSW50cm9kdWN0aW9uCis9PT09PT09PT09PT09PT0KKworVHJhY2Vwb2ludHMgKHNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL3RyYWNlcG9pbnRzLnR4dCkgY2FuIGJlIHVzZWQgd2l0aG91dAorY3JlYXRpbmcgY3VzdG9tIGtlcm5lbCBtb2R1bGVzIHRvIHJlZ2lzdGVyIHByb2JlIGZ1bmN0aW9ucyB1c2luZyB0aGUgZXZlbnQKK3RyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuCisKK1NpbXBsaXN0aWNhbGx5LCB0cmFjZXBvaW50cyB3aWxsIHJlcHJlc2VudCBhbiBpbXBvcnRhbnQgZXZlbnQgdGhhdCB3aGVuIGNhbgorYmUgdGFrZW4gaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciB0cmFjZXBvaW50cyB0byBidWlsZCBhICJCaWcgUGljdHVyZSIgb2YKK3doYXQgaXMgZ29pbmcgb24gd2l0aGluIHRoZSBzeXN0ZW0uIFRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZiBtZXRob2RzIGZvcgorZ2F0aGVyaW5nIGFuZCBpbnRlcnByZXRpbmcgdGhlc2UgZXZlbnRzLiBMYWNraW5nIGFueSBjdXJyZW50IEJlc3QgUHJhY3Rpc2VzLAordGhpcyBkb2N1bWVudCBkZXNjcmliZXMgc29tZSBvZiB0aGUgbWV0aG9kcyB0aGF0IGNhbiBiZSB1c2VkLgorCitUaGlzIGRvY3VtZW50IGFzc3VtZXMgdGhhdCBkZWJ1Z2ZzIGlzIG1vdW50ZWQgb24gL3N5cy9rZXJuZWwvZGVidWcgYW5kIHRoYXQKK3RoZSBhcHByb3ByaWF0ZSB0cmFjaW5nIG9wdGlvbnMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsLiBJdCBpcworYXNzdW1lZCB0aGF0IHRoZSBQQ0wgdG9vbCB0b29scy9wZXJmIGhhcyBiZWVuIGluc3RhbGxlZCBhbmQgaXMgaW4geW91ciBwYXRoLgorCisyLiBMaXN0aW5nIEF2YWlsYWJsZSBFdmVudHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisyLjEgU3RhbmRhcmQgVXRpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBwb3NzaWJsZSBldmVudHMgYXJlIHZpc2libGUgZnJvbSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy4gU2ltcGx5CitjYWxsaW5nCisKKyAgJCBmaW5kIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzIC10eXBlIGQKKword2lsbCBnaXZlIGEgZmFpciBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgZXZlbnRzIGF2YWlsYWJsZS4KKworMi4yIFBDTAorLS0tLS0tLQorCitEaXNjb3ZlcnkgYW5kIGVudW1lcmF0aW9uIG9mIGFsbCBjb3VudGVycyBhbmQgZXZlbnRzLCBpbmNsdWRpbmcgdHJhY2Vwb2ludHMKK2FyZSBhdmFpbGFibGUgd2l0aCB0aGUgcGVyZiB0b29sLiBHZXR0aW5nIGEgbGlzdCBvZiBhdmFpbGFibGUgZXZlbnRzIGlzIGEKK3NpbXBsZSBjYXNlIG9mCisKKyAgJCBwZXJmIGxpc3QgMj4mMSB8IGdyZXAgVHJhY2Vwb2ludAorICBleHQ0OmV4dDRfZnJlZV9pbm9kZSAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfcmVxdWVzdF9pbm9kZSAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfYWxsb2NhdGVfaW5vZGUgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfd3JpdGVfYmVnaW4gICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfb3JkZXJlZF93cml0ZV9lbmQgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBbIC4uLi4gcmVtYWluaW5nIG91dHB1dCBzbmlwcGVkIC4uLi4gXQorCisKKzIuIEVuYWJsaW5nIEV2ZW50cworPT09PT09PT09PT09PT09PT09CisKKzIuMSBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy50eHQgZm9yIGEgcHJvcGVyIGRlc2NyaXB0aW9uIG9uIGhvdyBldmVudHMKK2NhbiBiZSBlbmFibGVkIHN5c3RlbS13aWRlLiBBIHNob3J0IGV4YW1wbGUgb2YgZW5hYmxpbmcgYWxsIGV2ZW50cyByZWxhdGVkCit0byBwYWdlIGFsbG9jYXRpb24gd291bGQgbG9vayBzb21ldGhpbmcgbGlrZQorCisgICQgZm9yIGkgaW4gYGZpbmQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMgLW5hbWUgImVuYWJsZSIgfCBncmVwIG1tX2A7IGRvIGVjaG8gMSA+ICRpOyBkb25lCisKKzIuMiBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZyB3aXRoIFN5c3RlbVRhcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIFN5c3RlbVRhcCwgdHJhY2Vwb2ludHMgYXJlIGFjY2Vzc2libGUgdXNpbmcgdGhlIGtlcm5lbC50cmFjZSgpIGZ1bmN0aW9uCitjYWxsLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCByZXBvcnRzIGV2ZXJ5IDUgc2Vjb25kcyB3aGF0IHByb2Nlc3Nlcword2VyZSBhbGxvY2F0aW5nIHRoZSBwYWdlcy4KKworICBnbG9iYWwgcGFnZV9hbGxvY3MKKworICBwcm9iZSBrZXJuZWwudHJhY2UoIm1tX3BhZ2VfYWxsb2MiKSB7CisgIAlwYWdlX2FsbG9jc1tleGVjbmFtZSgpXSsrCisgIH0KKworICBmdW5jdGlvbiBwcmludF9jb3VudCgpIHsKKyAgCXByaW50ZiAoIiUtMjVzICUtc1xuIiwgIiNQYWdlcyBBbGxvY2F0ZWQiLCAiUHJvY2VzcyBOYW1lIikKKyAgCWZvcmVhY2ggKHByb2MgaW4gcGFnZV9hbGxvY3MtKQorICAJCXByaW50ZigiJS0yNWQgJXNcbiIsIHBhZ2VfYWxsb2NzW3Byb2NdLCBwcm9jKQorICAJcHJpbnRmICgiXG4iKQorICAJZGVsZXRlIHBhZ2VfYWxsb2NzCisgIH0KKworICBwcm9iZSB0aW1lci5zKDUpIHsKKyAgICAgICAgICBwcmludF9jb3VudCgpCisgIH0KKworMi4zIFN5c3RlbS1XaWRlIEV2ZW50IEVuYWJsaW5nIHdpdGggUENMCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgc3BlY2lmeWluZyB0aGUgLWEgc3dpdGNoIGFuZCBhbmFseXNpbmcgc2xlZXAsIHRoZSBzeXN0ZW0td2lkZSBldmVudHMKK2ZvciBhIGR1cmF0aW9uIG9mIHRpbWUgY2FuIGJlIGV4YW1pbmVkLgorCisgJCBwZXJmIHN0YXQgLWEgXAorCS1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCS1lIGttZW06bW1fcGFnZXZlY19mcmVlIFwKKwlzbGVlcCAxMAorIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICdzbGVlcCAxMCc6CisKKyAgICAgICAgICAgOTYzMCAga21lbTptbV9wYWdlX2FsbG9jCisgICAgICAgICAgIDIxNDMgIGttZW06bW1fcGFnZV9mcmVlX2RpcmVjdAorICAgICAgICAgICA3NDI0ICBrbWVtOm1tX3BhZ2V2ZWNfZnJlZQorCisgICAxMC4wMDI1Nzc3NjQgIHNlY29uZHMgdGltZSBlbGFwc2VkCisKK1NpbWlsYXJseSwgb25lIGNvdWxkIGV4ZWN1dGUgYSBzaGVsbCBhbmQgZXhpdCBpdCBhcyBkZXNpcmVkIHRvIGdldCBhIHJlcG9ydAorYXQgdGhhdCBwb2ludC4KKworMi40IExvY2FsIEV2ZW50IEVuYWJsaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGRlc2NyaWJlcyBob3cgdG8gZW5hYmxlIGV2ZW50cyBvbiBhIHBlci10aHJlYWQKK2Jhc2lzIHVzaW5nIHNldF9mdHJhY2VfcGlkLgorCisyLjUgTG9jYWwgRXZlbnQgRW5hYmxlbWVudCB3aXRoIFBDTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXZlbnRzIGNhbiBiZSBhY3RpdmF0ZSBhbmQgdHJhY2tlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgcHJvY2VzcyBvbiBhIGxvY2FsCitiYXNpcyB1c2luZyBQQ0wgc3VjaCBhcyBmb2xsb3dzLgorCisgICQgcGVyZiBzdGF0IC1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCQkgLWUga21lbTptbV9wYWdldmVjX2ZyZWUgLi9oYWNrYmVuY2ggMTAKKyAgVGltZTogMC45MDkKKworICAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICcuL2hhY2tiZW5jaCAxMCc6CisKKyAgICAgICAgICAxNzgwMyAga21lbTptbV9wYWdlX2FsbG9jCisgICAgICAgICAgMTIzOTggIGttZW06bW1fcGFnZV9mcmVlX2RpcmVjdAorICAgICAgICAgICA0ODI3ICBrbWVtOm1tX3BhZ2V2ZWNfZnJlZQorCisgICAgMC45NzM5MTMzODcgIHNlY29uZHMgdGltZSBlbGFwc2VkCisKKzMuIEV2ZW50IEZpbHRlcmluZworPT09PT09PT09PT09PT09PT09CisKK0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dCBjb3ZlcnMgaW4tZGVwdGggaG93IHRvIGZpbHRlciBldmVudHMgaW4KK2Z0cmFjZS4gIE9idmlvdXNseSB1c2luZyBncmVwIGFuZCBhd2sgb2YgdHJhY2VfcGlwZSBpcyBhbiBvcHRpb24gYXMgd2VsbAorYXMgYW55IHNjcmlwdCByZWFkaW5nIHRyYWNlX3BpcGUuCisKKzQuIEFuYWx5c2luZyBFdmVudCBWYXJpYW5jZXMgd2l0aCBQQ0wKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQW55IHdvcmtsb2FkIGNhbiBleGhpYml0IHZhcmlhbmNlcyBiZXR3ZWVuIHJ1bnMgYW5kIGl0IGNhbiBiZSBpbXBvcnRhbnQKK3RvIGtub3cgd2hhdCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGluLiBCeSBhbmQgbGFyZ2UsIHRoaXMgaXMgbGVmdCB0byB0aGUKK3BlcmZvcm1hbmNlIGFuYWx5c3QgdG8gZG8gaXQgYnkgaGFuZC4gSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGRpc2NyZXRlIGV2ZW50CitvY2N1cnJlbmNlcyBhcmUgdXNlZnVsIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmFseXN0LCB0aGVuIHBlcmYgY2FuIGJlIHVzZWQuCisKKyAgJCBwZXJmIHN0YXQgLS1yZXBlYXQgNSAtZSBrbWVtOm1tX3BhZ2VfYWxsb2MgLWUga21lbTptbV9wYWdlX2ZyZWVfZGlyZWN0CisJCQktZSBrbWVtOm1tX3BhZ2V2ZWNfZnJlZSAuL2hhY2tiZW5jaCAxMAorICBUaW1lOiAwLjg5MAorICBUaW1lOiAwLjg5NQorICBUaW1lOiAwLjkxNQorICBUaW1lOiAxLjAwMQorICBUaW1lOiAwLjg5OQorCisgICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnLi9oYWNrYmVuY2ggMTAnICg1IHJ1bnMpOgorCisgICAgICAgICAgMTY2MzAgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICggKy0gICAzLjU0MiUgKQorICAgICAgICAgIDExNDg2ICBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgICAoICstICAgNC43NzElICkKKyAgICAgICAgICAgNDczMCAga21lbTptbV9wYWdldmVjX2ZyZWUgICAgICAgKCArLSAgIDIuMzI1JSApCisKKyAgICAwLjk4MjY1MzAwMiAgc2Vjb25kcyB0aW1lIGVsYXBzZWQgICAoICstICAgMS40NDglICkKKworSW4gdGhlIGV2ZW50IHRoYXQgc29tZSBoaWdoZXItbGV2ZWwgZXZlbnQgaXMgcmVxdWlyZWQgdGhhdCBkZXBlbmRzIG9uIHNvbWUKK2FnZ3JlZ2F0aW9uIG9mIGRpc2NyZXRlIGV2ZW50cywgdGhlbiBhIHNjcmlwdCB3b3VsZCBuZWVkIHRvIGJlIGRldmVsb3BlZC4KKworVXNpbmcgLS1yZXBlYXQsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gdmlldyBob3cgZXZlbnRzIGFyZSBmbHVjdHVhdGluZyBvdmVyCit0aW1lIG9uIGEgc3lzdGVtIHdpZGUgYmFzaXMgdXNpbmcgLWEgYW5kIHNsZWVwLgorCisgICQgcGVyZiBzdGF0IC1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCQktZSBrbWVtOm1tX3BhZ2V2ZWNfZnJlZSBcCisJCS1hIC0tcmVwZWF0IDEwIFwKKwkJc2xlZXAgMQorICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnc2xlZXAgMScgKDEwIHJ1bnMpOgorCisgICAgICAgICAgIDEwNjYgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICggKy0gIDI2LjE0OCUgKQorICAgICAgICAgICAgMTgyICBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgICAoICstICAgNS40NjQlICkKKyAgICAgICAgICAgIDg5MCAga21lbTptbV9wYWdldmVjX2ZyZWUgICAgICAgKCArLSAgMzAuMDc5JSApCisKKyAgICAxLjAwMjI1MTc1NyAgc2Vjb25kcyB0aW1lIGVsYXBzZWQgICAoICstICAgMC4wMDUlICkKKworNS4gSGlnaGVyLUxldmVsIEFuYWx5c2lzIHdpdGggSGVscGVyIFNjcmlwdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gZXZlbnRzIGFyZSBlbmFibGVkIHRoZSBldmVudHMgdGhhdCBhcmUgdHJpZ2dlcmluZyBjYW4gYmUgcmVhZCBmcm9tCisvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlX3BpcGUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybWF0IGFsdGhvdWdoIGJpbmFyeQorb3B0aW9ucyBleGlzdCBhcyB3ZWxsLiBCeSBwb3N0LXByb2Nlc3NpbmcgdGhlIG91dHB1dCwgZnVydGhlciBpbmZvcm1hdGlvbiBjYW4KK2JlIGdhdGhlcmVkIG9uLWxpbmUgYXMgYXBwcm9wcmlhdGUuIEV4YW1wbGVzIG9mIHBvc3QtcHJvY2Vzc2luZyBtaWdodCBpbmNsdWRlCisKKyAgbyBSZWFkaW5nIGluZm9ybWF0aW9uIGZyb20gL3Byb2MgZm9yIHRoZSBQSUQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50CisgIG8gRGVyaXZpbmcgYSBoaWdoZXItbGV2ZWwgZXZlbnQgZnJvbSBhIHNlcmllcyBvZiBsb3dlci1sZXZlbCBldmVudHMuCisgIG8gQ2FsY3VsYXRlIGxhdGVuY2llcyBiZXR3ZWVuIHR3byBldmVudHMKKworRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS1wYWdlYWxsb2MtcG9zdHByb2Nlc3MucGwgaXMgYW4gZXhhbXBsZQorc2NyaXB0IHRoYXQgY2FuIHJlYWQgdHJhY2VfcGlwZSBmcm9tIFNURElOIG9yIGEgY29weSBvZiBhIHRyYWNlLiBXaGVuIHVzZWQKK29uLWxpbmUsIGl0IGNhbiBiZSBpbnRlcnJ1cHRlZCBvbmNlIHRvIGdlbmVyYXRlIGEgcmVwb3J0IHdpdGhvdXQgZXhpc3RpbmcKK2FuZCB0d2ljZSB0byBleGl0LgorCitTaW1wbGlzdGljYWxseSwgdGhlIHNjcmlwdCBqdXN0IHJlYWRzIFNURElOIGFuZCBjb3VudHMgdXAgZXZlbnRzIGJ1dCBpdAorYWxzbyBjYW4gZG8gbW9yZSBzdWNoIGFzCisKKyAgbyBEZXJpdmUgaGlnaC1sZXZlbCBldmVudHMgZnJvbSBtYW55IGxvdy1sZXZlbCBldmVudHMuIElmIGEgbnVtYmVyIG9mIHBhZ2VzCisgICAgYXJlIGZyZWVkIHRvIHRoZSBtYWluIGFsbG9jYXRvciBmcm9tIHRoZSBwZXItQ1BVIGxpc3RzLCBpdCByZWNvZ25pc2VzCisgICAgdGhhdCBhcyBvbmUgcGVyLUNQVSBkcmFpbiBldmVuIHRob3VnaCB0aGVyZSBpcyBubyBzcGVjaWZpYyB0cmFjZXBvaW50CisgICAgZm9yIHRoYXQgZXZlbnQKKyAgbyBJdCBjYW4gYWdncmVnYXRlIGJhc2VkIG9uIFBJRCBvciBpbmRpdmlkdWFsIHByb2Nlc3MgbnVtYmVyCisgIG8gSW4gdGhlIGV2ZW50IG1lbW9yeSBpcyBnZXR0aW5nIGV4dGVybmFsbHkgZnJhZ21lbnRlZCwgaXQgcmVwb3J0cworICAgIG9uIHdoZXRoZXIgdGhlIGZyYWdtZW50YXRpb24gZXZlbnQgd2FzIHNldmVyZSBvciBtb2RlcmF0ZS4KKyAgbyBXaGVuIHJlY2VpdmluZyBhbiBldmVudCBhYm91dCBhIFBJRCwgaXQgY2FuIHJlY29yZCB3aG8gdGhlIHBhcmVudCB3YXMgc28KKyAgICB0aGF0IGlmIGxhcmdlIG51bWJlcnMgb2YgZXZlbnRzIGFyZSBjb21pbmcgZnJvbSB2ZXJ5IHNob3J0LWxpdmVkCisgICAgcHJvY2Vzc2VzLCB0aGUgcGFyZW50IHByb2Nlc3MgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFsbCB0aGUgaGVscGVycworICAgIGNhbiBiZSBpZGVudGlmaWVkCisKKzYuIExvd2VyLUxldmVsIEFuYWx5c2lzIHdpdGggUENMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBtYXkgYWxzbyBiZSBhIHJlcXVpcmVtZW50IHRvIGlkZW50aWZ5IHdoYXQgZnVuY3Rpb25zIHdpdGggYSBwcm9ncmFtCit3ZXJlIGdlbmVyYXRpbmcgZXZlbnRzIHdpdGhpbiB0aGUga2VybmVsLiBUbyBiZWdpbiB0aGlzIHNvcnQgb2YgYW5hbHlzaXMsIHRoZQorZGF0YSBtdXN0IGJlIHJlY29yZGVkLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGlzIHJlcXVpcmVkIHJvb3QKKworICAkIHBlcmYgcmVjb3JkIC1jIDEgXAorCS1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCS1lIGttZW06bW1fcGFnZXZlY19mcmVlIFwKKwkuL2hhY2tiZW5jaCAxMAorICBUaW1lOiAwLjg5NAorICBbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgMC43MzMgTUIgcGVyZi5kYXRhICh+MzIwMTAgc2FtcGxlcykgXQorCitOb3RlIHRoZSB1c2Ugb2YgJy1jIDEnIHRvIHNldCB0aGUgZXZlbnQgcGVyaW9kIHRvIHNhbXBsZS4gVGhlIGRlZmF1bHQgc2FtcGxlCitwZXJpb2QgaXMgcXVpdGUgaGlnaCB0byBtaW5pbWlzZSBvdmVyaGVhZCBidXQgdGhlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBjYW4gYmUKK3ZlcnkgY29hcnNlIGFzIGEgcmVzdWx0LgorCitUaGlzIHJlY29yZCBvdXRwdXR0ZWQgYSBmaWxlIGNhbGxlZCBwZXJmLmRhdGEgd2hpY2ggY2FuIGJlIGFuYWx5c2VkIHVzaW5nCitwZXJmIHJlcG9ydC4KKworICAkIHBlcmYgcmVwb3J0CisgICMgU2FtcGxlczogMzA5MjIKKyAgIworICAjIE92ZXJoZWFkICAgIENvbW1hbmQgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgT2JqZWN0CisgICMgLi4uLi4uLi4gIC4uLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIworICAgICAgODcuMjclICBoYWNrYmVuY2ggIFt2ZHNvXQorICAgICAgIDYuODUlICBoYWNrYmVuY2ggIC9saWIvaTY4Ni9jbW92L2xpYmMtMi45LnNvCisgICAgICAgMi42MiUgIGhhY2tiZW5jaCAgL2xpYi9sZC0yLjkuc28KKyAgICAgICAxLjUyJSAgICAgICBwZXJmICBbdmRzb10KKyAgICAgICAxLjIyJSAgaGFja2JlbmNoICAuL2hhY2tiZW5jaAorICAgICAgIDAuNDglICBoYWNrYmVuY2ggIFtrZXJuZWxdCisgICAgICAgMC4wMiUgICAgICAgcGVyZiAgL2xpYi9pNjg2L2Ntb3YvbGliYy0yLjkuc28KKyAgICAgICAwLjAxJSAgICAgICBwZXJmICAvdXNyL2Jpbi9wZXJmCisgICAgICAgMC4wMSUgICAgICAgcGVyZiAgL2xpYi9sZC0yLjkuc28KKyAgICAgICAwLjAwJSAgaGFja2JlbmNoICAvbGliL2k2ODYvY21vdi9saWJwdGhyZWFkLTIuOS5zbworICAjCisgICMgKEZvciBtb3JlIGRldGFpbHMsIHRyeTogcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbCkKKyAgIworCitBY2NvcmRpbmcgdG8gdGhpcywgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZXZlbnRzIG9jY3VyZWQgdHJpZ2dlcmVkIG9uIGV2ZW50cword2l0aGluIHRoZSBWRFNPLiBXaXRoIHNpbXBsZSBiaW5hcmllcywgdGhpcyB3aWxsIG9mdGVuIGJlIHRoZSBjYXNlIHNvIGxldHMKK3Rha2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZXhhbXBsZS4gSW4gdGhlIGNvdXJzZSBvZiB3cml0aW5nIHRoaXMsIGl0IHdhcworbm90aWNlZCB0aGF0IFggd2FzIGdlbmVyYXRpbmcgYW4gaW5zYW5lIGFtb3VudCBvZiBwYWdlIGFsbG9jYXRpb25zIHNvIGxldHMgbG9vaworYXQgaXQKKworICAkIHBlcmYgcmVjb3JkIC1jIDEgLWYgXAorCQktZSBrbWVtOm1tX3BhZ2VfYWxsb2MgLWUga21lbTptbV9wYWdlX2ZyZWVfZGlyZWN0IFwKKwkJLWUga21lbTptbV9wYWdldmVjX2ZyZWUgXAorCQktcCBgcGlkb2YgWGAKKworVGhpcyB3YXMgaW50ZXJydXB0ZWQgYWZ0ZXIgYSBmZXcgc2Vjb25kcyBhbmQKKworICAkIHBlcmYgcmVwb3J0CisgICMgU2FtcGxlczogMjc2NjYKKyAgIworICAjIE92ZXJoZWFkICBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZCBPYmplY3QKKyAgIyAuLi4uLi4uLiAgLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICMKKyAgICAgIDUxLjk1JSAgICAgWG9yZyAgW3Zkc29dCisgICAgICA0Ny45NSUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMQorICAgICAgIDAuMDklICAgICBYb3JnICAvbGliL2k2ODYvY21vdi9saWJjLTIuOS5zbworICAgICAgIDAuMDElICAgICBYb3JnICBba2VybmVsXQorICAjCisgICMgKEZvciBtb3JlIGRldGFpbHMsIHRyeTogcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbCkKKyAgIworCitTbywgYWxtb3N0IGhhbGYgb2YgdGhlIGV2ZW50cyBhcmUgb2NjdXJpbmcgaW4gYSBsaWJyYXJ5LiBUbyBnZXQgYW4gaWRlYSB3aGljaAorc3ltYm9sLgorCisgICQgcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbAorICAjIFNhbXBsZXM6IDI3NjY2CisgICMKKyAgIyBPdmVyaGVhZCAgQ29tbWFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgT2JqZWN0ICBTeW1ib2wKKyAgIyAuLi4uLi4uLiAgLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAuLi4uLi4KKyAgIworICAgICAgNTEuOTUlICAgICBYb3JnICBbdmRzb10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsuXSAweDAwMDAwMGZmZmZlNDI0CisgICAgICA0Ny45MyUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMSAgWy5dIHBpeG1hbkZpbGxzc2UyCisgICAgICAgMC4wOSUgICAgIFhvcmcgIC9saWIvaTY4Ni9jbW92L2xpYmMtMi45LnNvICAgICAgICAgICAgICAgWy5dIF9pbnRfbWFsbG9jCisgICAgICAgMC4wMSUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMSAgWy5dIHBpeG1hbl9yZWdpb24zMl9jb3B5X2YKKyAgICAgICAwLjAxJSAgICAgWG9yZyAgW2tlcm5lbF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba10gcmVhZF9ocGV0CisgICAgICAgMC4wMSUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMSAgWy5dIGdldF9mYXN0X3BhdGgKKyAgICAgICAwLjAwJSAgICAgWG9yZyAgW2tlcm5lbF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba10gZnRyYWNlX3RyYWNlX3VzZXJzdGFjaworCitUbyBzZWUgd2hlcmUgd2l0aGluIHRoZSBmdW5jdGlvbiBwaXhtYW5GaWxsc3NlMiB0aGluZ3MgYXJlIGdvaW5nIHdyb25nCisKKyAgJCBwZXJmIGFubm90YXRlIHBpeG1hbkZpbGxzc2UyCisgIFsgLi4uIF0KKyAgICAwLjAwIDogICAgICAgICAzNGVlYjogICAgICAgMGYgMTggMDggICAgICAgICAgICAgICAgcHJlZmV0Y2h0MCAoJWVheCkKKyAgICAgICAgIDogICAgICB9CisgICAgICAgICA6CisgICAgICAgICA6ICAgICAgZXh0ZXJuIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfCisgICAgICAgICA6ICAgICAgX21tX3N0b3JlX3NpMTI4IChfX20xMjhpICpfX1AsIF9fbTEyOGkgX19CKSA6ICAgICAgeworICAgICAgICAgOiAgICAgICAgKl9fUCA9IF9fQjsKKyAgIDEyLjQwIDogICAgICAgICAzNGVlZTogICAgICAgNjYgMGYgN2YgODAgNDAgZmYgZmYgICAgbW92ZHFhICV4bW0wLC0weGMwKCVlYXgpCisgICAgMC4wMCA6ICAgICAgICAgMzRlZjU6ICAgICAgIGZmCisgICAxMi40MCA6ICAgICAgICAgMzRlZjY6ICAgICAgIDY2IDBmIDdmIDgwIDUwIGZmIGZmICAgIG1vdmRxYSAleG1tMCwtMHhiMCglZWF4KQorICAgIDAuMDAgOiAgICAgICAgIDM0ZWZkOiAgICAgICBmZgorICAgMTIuMzkgOiAgICAgICAgIDM0ZWZlOiAgICAgICA2NiAwZiA3ZiA4MCA2MCBmZiBmZiAgICBtb3ZkcWEgJXhtbTAsLTB4YTAoJWVheCkKKyAgICAwLjAwIDogICAgICAgICAzNGYwNTogICAgICAgZmYKKyAgIDEyLjY3IDogICAgICAgICAzNGYwNjogICAgICAgNjYgMGYgN2YgODAgNzAgZmYgZmYgICAgbW92ZHFhICV4bW0wLC0weDkwKCVlYXgpCisgICAgMC4wMCA6ICAgICAgICAgMzRmMGQ6ICAgICAgIGZmCisgICAxMi41OCA6ICAgICAgICAgMzRmMGU6ICAgICAgIDY2IDBmIDdmIDQwIDgwICAgICAgICAgIG1vdmRxYSAleG1tMCwtMHg4MCglZWF4KQorICAgMTIuMzEgOiAgICAgICAgIDM0ZjEzOiAgICAgICA2NiAwZiA3ZiA0MCA5MCAgICAgICAgICBtb3ZkcWEgJXhtbTAsLTB4NzAoJWVheCkKKyAgIDEyLjQwIDogICAgICAgICAzNGYxODogICAgICAgNjYgMGYgN2YgNDAgYTAgICAgICAgICAgbW92ZHFhICV4bW0wLC0weDYwKCVlYXgpCisgICAxMi4zMSA6ICAgICAgICAgMzRmMWQ6ICAgICAgIDY2IDBmIDdmIDQwIGIwICAgICAgICAgIG1vdmRxYSAleG1tMCwtMHg1MCglZWF4KQorCitBdCBhIGdsYW5jZSwgaXQgbG9va3MgbGlrZSB0aGUgdGltZSBpcyBiZWluZyBzcGVudCBjb3B5aW5nIHBpeG1hcHMgdG8KK3RoZSBjYXJkLiAgRnVydGhlciBpbnZlc3RpZ2F0aW9uIHdvdWxkIGJlIG5lZWRlZCB0byBkZXRlcm1pbmUgd2h5IHBpeG1hcHMKK2FyZSBiZWluZyBjb3BpZWQgYXJvdW5kIHNvIG11Y2ggYnV0IGEgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdG8gdGFrZSBhbgorYW5jaWVudCBidWlsZCBvZiBsaWJwaXhtYXAgb3V0IG9mIHRoZSBsaWJyYXJ5IHBhdGggd2hlcmUgaXQgd2FzIHRvdGFsbHkKK2ZvcmdvdHRlbiBhYm91dCBmcm9tIG1vbnRocyBhZ28hCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hdXRob3JpemF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0CmluZGV4IDM4MWIyMmUuLmMwNjliNjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0CkBAIC0xNiwyMCArMTYsMjAgQEAKIAogQXV0aG9yaXplIGEgZGV2aWNlIHRvIGNvbm5lY3Q6CiAKLSQgZWNobyAxID4gL3N5cy91c2IvZGV2aWNlcy9ERVZJQ0UvYXV0aG9yaXplZAorJCBlY2hvIDEgPiAvc3lzL2J1cy91c2IvZGV2aWNlcy9ERVZJQ0UvYXV0aG9yaXplZAogCiBEZWF1dGhvcml6ZSBhIGRldmljZToKIAotJCBlY2hvIDAgPiAvc3lzL3VzYi9kZXZpY2VzL0RFVklDRS9hdXRob3JpemVkCiskIGVjaG8gMCA+IC9zeXMvYnVzL3VzYi9kZXZpY2VzL0RFVklDRS9hdXRob3JpemVkCiAKIFNldCBuZXcgZGV2aWNlcyBjb25uZWN0ZWQgdG8gaG9zdFggdG8gYmUgZGVhdXRob3JpemVkIGJ5IGRlZmF1bHQgKGllOgogbG9jayBkb3duKToKIAotJCBlY2hvIDAgPiAvc3lzL2J1cy9kZXZpY2VzL3VzYlgvYXV0aG9yaXplZF9kZWZhdWx0CiskIGVjaG8gMCA+IC9zeXMvYnVzL3VzYi9kZXZpY2VzL3VzYlgvYXV0aG9yaXplZF9kZWZhdWx0CiAKIFJlbW92ZSB0aGUgbG9jayBkb3duOgogCi0kIGVjaG8gMSA+IC9zeXMvYnVzL2RldmljZXMvdXNiWC9hdXRob3JpemVkX2RlZmF1bHQKKyQgZWNobyAxID4gL3N5cy9idXMvdXNiL2RldmljZXMvdXNiWC9hdXRob3JpemVkX2RlZmF1bHQKIAogQnkgZGVmYXVsdCwgV2lyZWQgVVNCIGRldmljZXMgYXJlIGF1dGhvcml6ZWQgYnkgZGVmYXVsdCB0bwogY29ubmVjdC4gV2lyZWxlc3MgVVNCIGhvc3RzIGRlYXV0aG9yaXplIGJ5IGRlZmF1bHQgYWxsIG5ldyBjb25uZWN0ZWQKQEAgLTQ3LDcgKzQ3LDcgQEAKIGJvb3QgdXAKIHJjLmxvY2FsIC0+CiAKLSBmb3IgaG9zdCBpbiAvc3lzL2J1cy9kZXZpY2VzL3VzYioKKyBmb3IgaG9zdCBpbiAvc3lzL2J1cy91c2IvZGV2aWNlcy91c2IqCiAgZG8KICAgICBlY2hvIDAgPiAkaG9zdC9hdXRob3JpemVkX2RlZmF1bHQKICBkb25lCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dAppbmRleCA2YzNjNjI1Li42NmY5MmQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKQEAgLTMzLDcgKzMzLDcgQEAKIAogVmVyaWZ5IHRoYXQgYnVzIHNvY2tldHMgYXJlIHByZXNlbnQuCiAKLSMgbHMgL3N5cy9rZXJuZWwvZGVidWcvdXNibW9uCisjIGxzIC9zeXMva2VybmVsL2RlYnVnL3VzYi91c2Jtb24KIDBzICAwdSAgMXMgIDF0ICAxdSAgMnMgIDJ0ICAydSAgM3MgIDN0ICAzdSAgNHMgIDR0ICA0dQogIwogCkBAIC01OCwxMSArNTgsMTEgQEAKIAogMy4gU3RhcnQgJ2NhdCcKIAotIyBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdXNibW9uLzN1ID4gL3RtcC8xLm1vbi5vdXQKKyMgY2F0IC9zeXMva2VybmVsL2RlYnVnL3VzYi91c2Jtb24vM3UgPiAvdG1wLzEubW9uLm91dAogCiB0byBsaXN0ZW4gb24gYSBzaW5nbGUgYnVzLCBvdGhlcndpc2UsIHRvIGxpc3RlbiBvbiBhbGwgYnVzZXMsIHR5cGU6CiAKLSMgY2F0IC9zeXMva2VybmVsL2RlYnVnL3VzYm1vbi8wdSA+IC90bXAvMS5tb24ub3V0CisjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvdXNibW9uLzB1ID4gL3RtcC8xLm1vbi5vdXQKIAogVGhpcyBwcm9jZXNzIHdpbGwgYmUgcmVhZGluZyB1bnRpbCBraWxsZWQuIE5hdHVyYWxseSwgdGhlIG91dHB1dCBjYW4gYmUKIHJlZGlyZWN0ZWQgdG8gYSBkZXNpcmFibGUgbG9jYXRpb24uIFRoaXMgaXMgcHJlZmVycmVkLCBiZWNhdXNlIGl0IGlzIGdvaW5nCkBAIC0zMDUsNyArMzA1LDcgQEAKIHBvaW50ZWQgYnkgaGRyIGNvbnRhaW5zIHRoZSBuZXh0IGV2ZW50IHN0cnVjdHVyZSwgYW5kIHRoZSBkYXRhIGJ1ZmZlciBjb250YWlucwogdGhlIGRhdGEsIGlmIGFueS4gVGhlIGV2ZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIGJ1ZmZlci4KIAotVGhlIE1PTl9JT0NYX0dFVCBjb3BpZXMgNDggYnl0ZXMsIE1PTl9JT0NYX0dFVFggY29waWVzIDY0IGJ5dGVzLgorVGhlIE1PTl9JT0NYX0dFVCBjb3BpZXMgNDggYnl0ZXMgdG8gaGRyIGFyZWEsIE1PTl9JT0NYX0dFVFggY29waWVzIDY0IGJ5dGVzLgogCiAgTU9OX0lPQ1hfTUZFVENILCBkZWZpbmVkIGFzIF9JT1dSKE1PTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBtb25fbWZldGNoX2FyZykKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CmluZGV4IDUyNWVkYjMuLjVmMzNkODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKQEAgLTIzLDMgKzIzLDQgQEAKICAyMiAtPiBNeWdpY2EgWDg1MDYgRE1CLVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0ZjE6ODY1MV0KICAyMyAtPiBNYWdpYy1Qcm8gUHJvSERUViBFeHRyZW1lIDIgICAgICAgICAgICAgICAgICAgICAgICAgWzE0ZjE6ODY1N10KICAyNCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTg1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODU0MV0KKyAyNSAtPiBDb21wcm8gVmlkZW9NYXRlIEU4MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4NTg6ZTgwMF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKaW5kZXggYjEzZmNiZC4uYjhhZmVmNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKQEAgLTEsNSArMSw1IEBACiAgIDAgLT4gVW5rbm93biBFTTI4MDAgdmlkZW8gZ3JhYmJlciAgICAgICAgICAgICAoZW0yODAwKSAgICAgICAgW2ViMWE6MjgwMF0KLSAgMSAtPiBVbmtub3duIEVNMjc1MC8yOHh4IHZpZGVvIGdyYWJiZXIgICAgICAgIChlbTI4MjAvZW0yODQwKSBbZWIxYToyNzEwLGViMWE6MjgyMCxlYjFhOjI4MjEsZWIxYToyODYwLGViMWE6Mjg2MSxlYjFhOjI4NzAsZWIxYToyODgxLGViMWE6Mjg4M10KKyAgMSAtPiBVbmtub3duIEVNMjc1MC8yOHh4IHZpZGVvIGdyYWJiZXIgICAgICAgIChlbTI4MjAvZW0yODQwKSBbZWIxYToyNzEwLGViMWE6MjgyMCxlYjFhOjI4MjEsZWIxYToyODYwLGViMWE6Mjg2MSxlYjFhOjI4NzAsZWIxYToyODgxLGViMWE6Mjg4MyxlYjFhOjI4NjhdCiAgIDIgLT4gVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzBjY2Q6MDAzNl0KICAgMyAtPiBQaW5uYWNsZSBQQ1RWIFVTQiAyICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjMwNDowMjA4XQogICA0IC0+IEhhdXBwYXVnZSBXaW5UViBVU0IgMiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMDQwOjQyMDAsMjA0MDo0MjAxXQpAQCAtNjgsMyArNjgsNCBAQAogIDcwIC0+IEV2Z2EgaW5EdHViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MikKICA3MSAtPiBTaWx2ZXJjcmVzdCBXZWJjYW0gMS4zbXBpeCAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQogIDcyIC0+IEdhZG1laSBVVFYzMzArICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MSkKKyA3MyAtPiBSZWRkbyBEVkItQyBVU0IgVFYgQm94ICAgICAgICAgICAgICAgICAgIChlbTI4NzApCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggMGFjNGQyNS4uMjYyMGQ2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTcxLDMgKzE3MSw0IEBACiAxNzAgLT4gQXZlck1lZGlhIEF2ZXJUViBTdHVkaW8gNTA1ICAgICAgICAgICAgICBbMTQ2MTphMTE1XQogMTcxIC0+IEJlaG9sZGVyIEJlaG9sZFRWIFg3ICAgICAgICAgICAgICAgICAgICAgWzVhY2U6NzU5NV0KIDE3MiAtPiBSb3Zlck1lZGlhIFRWIExpbmsgUHJvIEZNICAgICAgICAgICAgICAgIFsxOWQxOjAxMzhdCisxNzMgLT4gWm9saWQgSHlicmlkIFRWIFR1bmVyIFBDSSAgICAgICAgICAgICAgICBbMTEzMToyMDA0XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTY0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmJkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxNjQKQEAgLTAsMCArMSw5IEBACisgIDAgLT4gVW5rbm93bgorICAxIC0+IEdlbmVyaWMgUmV2MgorICAyIC0+IEdlbmVyaWMgUmV2MworICAzIC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIyMjUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo4ODgwLDAwNzA6ODgxMF0KKyAgNCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODk4MF0KKyAgNSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODkwMF0KKyAgNiAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODkwMV0KKyAgNyAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjI1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODg5MSwwMDcwOjg4NTFdCisgIDggLT4gSGF1cHBhdWdlIFdpblRWLUhWUjIyNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjg4QTFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCBiYTlmYTY3Li5lMGQyOThmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTc5LDMgKzc5LDUgQEAKIHR1bmVyPTc5IC0gUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZNMTIxNiBNSzUpCiB0dW5lcj04MCAtIFBoaWxpcHMgRlExMjE2TE1FIE1LMyBQQUwvU0VDQU0gdy9hY3RpdmUgbG9vcHRocm91Z2gKIHR1bmVyPTgxIC0gUGFydHNuaWMgKERhZXdvbykgUFRJLTVORjA1Cit0dW5lcj04MiAtIFBoaWxpcHMgQ1UxMjE2TAordHVuZXI9ODMgLSBOWFAgVERBMTgyNzEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKaW5kZXggNDY4NmU4NC4uM2Y2MTgyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTE3Myw2ICsxNzMsOCBAQAogb3Y1MTkJCTA1YTk6YTUxOAlELUxpbmsgRFNCLUMzMTAgV2ViY2FtCiBzdW5wbHVzCQkwNWRhOjEwMTgJRGlnaXRhbCBEcmVhbSBFbmlnbWEgMS4zCiBzdGswMTQJCTA1ZTE6MDg5MwlTeW50ZWsgRFY0MDAwCitnbDg2MAkJMDVlMzowNTAzCUdlbmVzeXMgTG9naWMgUEMgQ2FtZXJhCitnbDg2MAkJMDVlMzpmMTkxCUdlbmVzeXMgTG9naWMgUEMgQ2FtZXJhCiBzcGNhNTYxCQkwNjBiOmEwMDEJTWF4ZWxsIENvbXBhY3QgUGMgUE0zCiB6YzN4eAkJMDY5ODoyMDAzCUNUWCBNNzMwViBidWlsdCBpbgogc3BjYTUwMAkJMDZiZDowNDA0CUFnZmEgQ0wyMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zb2MtY2FtZXJhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc29jLWNhbWVyYS50eHQKaW5kZXggMTc4ZWYzYy4uM2Y4N2M3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zb2MtY2FtZXJhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NvYy1jYW1lcmEudHh0CkBAIC0xMTYsNSArMTE2LDQ1IEBACiBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgYWxzbyBsaW5rcyB0byBhbiBhcnJheSBvZiBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCwKIGxpc3RpbmcgcGl4ZWwgZm9ybWF0cywgc3VwcG9ydGVkIGJ5IHRoZSBjYW1lcmEuCiAKK1ZJRElPQ19TX0NST1AgYW5kIFZJRElPQ19TX0ZNVCBiZWhhdmlvdXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWJvdmUgdXNlciBpb2N0bHMgbW9kaWZ5IGltYWdlIGdlb21ldHJ5IGFzIGZvbGxvd3M6CisKK1ZJRElPQ19TX0NST1A6IHNldHMgbG9jYXRpb24gYW5kIHNpemVzIG9mIHRoZSBzZW5zb3Igd2luZG93LiBVbml0IGlzIG9uZSBzZW5zb3IKK3BpeGVsLiBDaGFuZ2luZyBzZW5zb3Igd2luZG93IHNpemVzIHByZXNlcnZlcyBhbnkgc2NhbGluZyBmYWN0b3JzLCB0aGVyZWZvcmUKK3VzZXIgd2luZG93IHNpemVzIGNoYW5nZSBhcyB3ZWxsLgorCitWSURJT0NfU19GTVQ6IHNldHMgdXNlciB3aW5kb3cuIFNob3VsZCBwcmVzZXJ2ZSBwcmV2aW91c2x5IHNldCBzZW5zb3Igd2luZG93IGFzCittdWNoIGFzIHBvc3NpYmxlIGJ5IG1vZGlmeWluZyBzY2FsaW5nIGZhY3RvcnMuIElmIHRoZSBzZW5zb3Igd2luZG93IGNhbm5vdCBiZQorcHJlc2VydmVkIHByZWNpc2VseSwgaXQgbWF5IGJlIGNoYW5nZWQgdG9vLgorCitJbiBzb2MtY2FtZXJhIHRoZXJlIGFyZSB0d28gbG9jYXRpb25zLCB3aGVyZSBzY2FsaW5nIGFuZCBjcm9wcGluZyBjYW4gdGFrcworcGxhY2U6IGluIHRoZSBjYW1lcmEgZHJpdmVyIGFuZCBpbiB0aGUgaG9zdCBkcml2ZXIuIFVzZXIgaW9jdGxzIGFyZSBmaXJzdCBwYXNzZWQKK3RvIHRoZSBob3N0IGRyaXZlciwgd2hpY2ggdGhlbiBnZW5lcmFsbHkgcGFzc2VzIHRoZW0gZG93biB0byB0aGUgY2FtZXJhIGRyaXZlci4KK0l0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHBlcmZvcm0gc2NhbGluZyBhbmQgY3JvcHBpbmcgaW4gdGhlIGNhbWVyYSBkcml2ZXIgdG8KK3NhdmUgY2FtZXJhIGJ1cyBiYW5kd2lkdGggYW5kIG1heGltaXNlIHRoZSBmcmFtZXJhdGUuIEhvd2V2ZXIsIGlmIHRoZSBjYW1lcmEKK2RyaXZlciBmYWlsZWQgdG8gc2V0IHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIHdpdGggc3VmZmljaWVudCBwcmVjaXNpb24sIHRoZSBob3N0Citkcml2ZXIgbWF5IGRlY2lkZSB0byBhbHNvIHVzZSBpdHMgb3duIHNjYWxpbmcgYW5kIGNyb3BwaW5nIHRvIGZ1bGZpbGwgdGhlIHVzZXIncworcmVxdWVzdC4KKworQ2FtZXJhIGRyaXZlcnMgYXJlIGludGVyZmFjZWQgdG8gdGhlIHNvYy1jYW1lcmEgY29yZSBhbmQgdG8gaG9zdCBkcml2ZXJzIG92ZXIKK3RoZSB2NGwyLXN1YmRldiBBUEksIHdoaWNoIGlzIGNvbXBsZXRlbHkgZnVuY3Rpb25hbCwgaXQgZG9lc24ndCBwYXNzIGFueSBkYXRhLgorVGhlcmVmb3JlIGFsbCBjYW1lcmEgZHJpdmVycyBzaGFsbCByZXBseSB0byAuZ19mbXQoKSByZXF1ZXN0cyB3aXRoIHRoZWlyIGN1cnJlbnQKK291dHB1dCBnZW9tZXRyeS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY29ycmVjdGx5IGNvbmZpZ3VyZSB0aGUgY2FtZXJhIGJ1cy4KKy5zX2ZtdCgpIGFuZCAudHJ5X2ZtdCgpIGhhdmUgdG8gYmUgaW1wbGVtZW50ZWQgdG9vLiBTZW5zb3Igd2luZG93IGFuZCBzY2FsaW5nCitmYWN0b3JzIGhhdmUgdG8gYmUgbWFpbnRhaW5lZCBieSBjYW1lcmEgZHJpdmVycyBpbnRlcm5hbGx5LiBBY2NvcmRpbmcgdG8gdGhlCitWNEwyIEFQSSBhbGwgY2FwdHVyZSBkcml2ZXJzIG11c3Qgc3VwcG9ydCB0aGUgVklESU9DX0NST1BDQVAgaW9jdGwsIGhlbmNlIHdlCityZWx5IG9uIGNhbWVyYSBkcml2ZXJzIGltcGxlbWVudGluZyAuY3JvcGNhcCgpLiBJZiB0aGUgY2FtZXJhIGRyaXZlciBkb2VzIG5vdAorc3VwcG9ydCBjcm9wcGluZywgaXQgbWF5IGNob29zZSB0byBub3QgaW1wbGVtZW50IC5zX2Nyb3AoKSwgYnV0IHRvIGVuYWJsZQorY3JvcHBpbmcgc3VwcG9ydCBieSB0aGUgY2FtZXJhIGhvc3QgZHJpdmVyIGF0IGxlYXN0IHRoZSAuZ19jcm9wIG1ldGhvZCBtdXN0IGJlCitpbXBsZW1lbnRlZC4KKworVXNlciB3aW5kb3cgZ2VvbWV0cnkgaXMga2VwdCBpbiAudXNlcl93aWR0aCBhbmQgLnVzZXJfaGVpZ2h0IGZpZWxkcyBpbiBzdHJ1Y3QKK3NvY19jYW1lcmFfZGV2aWNlIGFuZCB1c2VkIGJ5IHRoZSBzb2MtY2FtZXJhIGNvcmUgYW5kIGhvc3QgZHJpdmVycy4gVGhlIGNvcmUKK3VwZGF0ZXMgdGhlc2UgZmllbGRzIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgLnNfZm10KCkgY2FsbCwgYnV0IGlmIHRoZXNlCitmaWVsZHMgY2hhbmdlIGVsc2V3aGVyZSwgZS5nLiwgZHVyaW5nIC5zX2Nyb3AoKSBwcm9jZXNzaW5nLCB0aGUgaG9zdCBkcml2ZXIgaXMKK3Jlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGVtLgorCiAtLQogQXV0aG9yOiBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKaW5kZXggYmE0NzA2YS4uYjgwNmVkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKQEAgLTM3MCwxOSArMzcwLDIwIEBACiBUaGUgYnJpZGdlIGRyaXZlciBhbHNvIGhhcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgaXQgY2FuIHVzZToKIAogc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYodjRsMl9kZXYsIGFkYXB0ZXIsCi0JICAgICAgICJtb2R1bGVfZm9vIiwgImNoaXBpZCIsIDB4MzYpOworCSAgICAgICAibW9kdWxlX2ZvbyIsICJjaGlwaWQiLCAweDM2LCBOVUxMKTsKIAogVGhpcyBsb2FkcyB0aGUgZ2l2ZW4gbW9kdWxlIChjYW4gYmUgTlVMTCBpZiBubyBtb2R1bGUgbmVlZHMgdG8gYmUgbG9hZGVkKSBhbmQKIGNhbGxzIGkyY19uZXdfZGV2aWNlKCkgd2l0aCB0aGUgZ2l2ZW4gaTJjX2FkYXB0ZXIgYW5kIGNoaXAvYWRkcmVzcyBhcmd1bWVudHMuCiBJZiBhbGwgZ29lcyB3ZWxsLCB0aGVuIGl0IHJlZ2lzdGVycyB0aGUgc3ViZGV2IHdpdGggdGhlIHY0bDJfZGV2aWNlLgogCi1Zb3UgY2FuIGFsc28gdXNlIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCkgd2hpY2ggaXMgdmVyeSBzaW1pbGFyIHRvCi12NGwyX2kyY19uZXdfc3ViZGV2KCksIGV4Y2VwdCB0aGF0IGl0IGhhcyBhbiBhcnJheSBvZiBwb3NzaWJsZSBJMkMgYWRkcmVzc2VzCi10aGF0IGl0IHNob3VsZCBwcm9iZS4gSW50ZXJuYWxseSBpdCBjYWxscyBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoKS4KK1lvdSBjYW4gYWxzbyB1c2UgdGhlIGxhc3QgYXJndW1lbnQgb2YgdjRsMl9pMmNfbmV3X3N1YmRldigpIHRvIHBhc3MgYW4gYXJyYXkKK29mIHBvc3NpYmxlIEkyQyBhZGRyZXNzZXMgdGhhdCBpdCBzaG91bGQgcHJvYmUuIFRoZXNlIHByb2JlIGFkZHJlc3NlcyBhcmUKK29ubHkgdXNlZCBpZiB0aGUgcHJldmlvdXMgYXJndW1lbnQgaXMgMC4gQSBub24temVybyBhcmd1bWVudCBtZWFucyB0aGF0IHlvdQora25vdyB0aGUgZXhhY3QgaTJjIGFkZHJlc3Mgc28gaW4gdGhhdCBjYXNlIG5vIHByb2Jpbmcgd2lsbCB0YWtlIHBsYWNlLgogCiBCb3RoIGZ1bmN0aW9ucyByZXR1cm4gTlVMTCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4KIAotTm90ZSB0aGF0IHRoZSBjaGlwaWQgeW91IHBhc3MgdG8gdjRsMl9pMmNfbmV3Xyhwcm9iZWRfKXN1YmRldigpIGlzIHVzdWFsbHkKK05vdGUgdGhhdCB0aGUgY2hpcGlkIHlvdSBwYXNzIHRvIHY0bDJfaTJjX25ld19zdWJkZXYoKSBpcyB1c3VhbGx5CiB0aGUgc2FtZSBhcyB0aGUgbW9kdWxlIG5hbWUuIEl0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGNoaXAgdmFyaWFudCwgZS5nLgogInNhYTcxMTQiIG9yICJzYWE3MTE1Ii4gSW4gZ2VuZXJhbCB0aG91Z2ggdGhlIGkyYyBkcml2ZXIgYXV0b2RldGVjdHMgdGhpcy4KIFRoZSB1c2Ugb2YgY2hpcGlkIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGxvb2tlZCBhdCBtb3JlIGNsb3NlbHkgYXQgYQpAQCAtNDEwLDExICs0MTEsNiBAQAogdjRsMl9pMmNfbmV3Xyhwcm9iZWRfKXN1YmRldiBmdW5jdGlvbnMgd2lsbCBjYWxsIHNfY29uZmlnIGFzIHdlbGwsIGJ1dCB3aXRoCiBpcnEgc2V0IHRvIDAgYW5kIHBsYXRmb3JtX2RhdGEgc2V0IHRvIE5VTEwuCiAKLU5vdGUgdGhhdCBpbiB0aGUgbmV4dCBrZXJuZWwgcmVsZWFzZSB0aGUgZnVuY3Rpb25zIHY0bDJfaTJjX25ld19zdWJkZXYsCi12NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldiBhbmQgdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXZfYWRkciB3aWxsIGFsbCBiZQotcmVwbGFjZWQgYnkgYSBzaW5nbGUgdjRsMl9pMmNfbmV3X3N1YmRldiB0aGF0IGlzIGlkZW50aWNhbCB0bwotdjRsMl9pMmNfbmV3X3N1YmRldl9jZmcgYnV0IHdpdGhvdXQgdGhlIGlycSBhbmQgcGxhdGZvcm1fZGF0YSBhcmd1bWVudHMuCi0KIHN0cnVjdCB2aWRlb19kZXZpY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDkwLDMxICs0ODYsMzUgQEAKIFZGTF9UWVBFX1ZUWDogdnR4WCBmb3IgdGVsZXRleHQgZGV2aWNlcyAoZGVwcmVjYXRlZCwgZG9uJ3QgdXNlKQogCiBUaGUgbGFzdCBhcmd1bWVudCBnaXZlcyB5b3UgYSBjZXJ0YWluIGFtb3VudCBvZiBjb250cm9sIG92ZXIgdGhlIGRldmljZQota2VybmVsIG51bWJlciB1c2VkIChpLmUuIHRoZSBYIGluIHZpZGVvWCkuIE5vcm1hbGx5IHlvdSB3aWxsIHBhc3MgLTEgdG8KLWxldCB0aGUgdjRsMiBmcmFtZXdvcmsgcGljayB0aGUgZmlyc3QgZnJlZSBudW1iZXIuIEJ1dCBpZiBhIGRyaXZlciBjcmVhdGVzCi1tYW55IGRldmljZXMsIHRoZW4gaXQgY2FuIGJlIHVzZWZ1bCB0byBoYXZlIGRpZmZlcmVudCB2aWRlbyBkZXZpY2VzIGluCi1zZXBhcmF0ZSByYW5nZXMuIEZvciBleGFtcGxlLCB2aWRlbyBjYXB0dXJlIGRldmljZXMgc3RhcnQgYXQgMCwgdmlkZW8KLW91dHB1dCBkZXZpY2VzIHN0YXJ0IGF0IDE2LgorZGV2aWNlIG5vZGUgbnVtYmVyIHVzZWQgKGkuZS4gdGhlIFggaW4gdmlkZW9YKS4gTm9ybWFsbHkgeW91IHdpbGwgcGFzcyAtMQordG8gbGV0IHRoZSB2NGwyIGZyYW1ld29yayBwaWNrIHRoZSBmaXJzdCBmcmVlIG51bWJlci4gQnV0IHNvbWV0aW1lcyB1c2Vycword2FudCB0byBzZWxlY3QgYSBzcGVjaWZpYyBub2RlIG51bWJlci4gSXQgaXMgY29tbW9uIHRoYXQgZHJpdmVycyBhbGxvdwordGhlIHVzZXIgdG8gc2VsZWN0IGEgc3BlY2lmaWMgZGV2aWNlIG5vZGUgbnVtYmVyIHRocm91Z2ggYSBkcml2ZXIgbW9kdWxlCitvcHRpb24uIFRoYXQgbnVtYmVyIGlzIHRoZW4gcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHZpZGVvX3JlZ2lzdGVyX2RldmljZQord2lsbCBhdHRlbXB0IHRvIHNlbGVjdCB0aGF0IGRldmljZSBub2RlIG51bWJlci4gSWYgdGhhdCBudW1iZXIgd2FzIGFscmVhZHkKK2luIHVzZSwgdGhlbiB0aGUgbmV4dCBmcmVlIGRldmljZSBub2RlIG51bWJlciB3aWxsIGJlIHNlbGVjdGVkIGFuZCBpdAord2lsbCBzZW5kIGEgd2FybmluZyB0byB0aGUga2VybmVsIGxvZy4KIAotU28geW91IGNhbiB1c2UgdGhlIGxhc3QgYXJndW1lbnQgdG8gc3BlY2lmeSBhIG1pbmltdW0ga2VybmVsIG51bWJlciBhbmQKLXRoZSB2NGwyIGZyYW1ld29yayB3aWxsIHRyeSB0byBwaWNrIHRoZSBmaXJzdCBmcmVlIG51bWJlciB0aGF0IGlzIGVxdWFsCitBbm90aGVyIHVzZS1jYXNlIGlzIGlmIGEgZHJpdmVyIGNyZWF0ZXMgbWFueSBkZXZpY2VzLiBJbiB0aGF0IGNhc2UgaXQgY2FuCitiZSB1c2VmdWwgdG8gcGxhY2UgZGlmZmVyZW50IHZpZGVvIGRldmljZXMgaW4gc2VwYXJhdGUgcmFuZ2VzLiBGb3IgZXhhbXBsZSwKK3ZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzdGFydCBhdCAwLCB2aWRlbyBvdXRwdXQgZGV2aWNlcyBzdGFydCBhdCAxNi4KK1NvIHlvdSBjYW4gdXNlIHRoZSBsYXN0IGFyZ3VtZW50IHRvIHNwZWNpZnkgYSBtaW5pbXVtIGRldmljZSBub2RlIG51bWJlcgorYW5kIHRoZSB2NGwyIGZyYW1ld29yayB3aWxsIHRyeSB0byBwaWNrIHRoZSBmaXJzdCBmcmVlIG51bWJlciB0aGF0IGlzIGVxdWFsCiBvciBoaWdoZXIgdG8gd2hhdCB5b3UgcGFzc2VkLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGl0IHdpbGwganVzdCBwaWNrIHRoZQogZmlyc3QgZnJlZSBudW1iZXIuCiAKK1NpbmNlIGluIHRoaXMgY2FzZSB5b3UgZG8gbm90IGNhcmUgYWJvdXQgYSB3YXJuaW5nIGFib3V0IG5vdCBiZWluZyBhYmxlCit0byBzZWxlY3QgdGhlIHNwZWNpZmllZCBkZXZpY2Ugbm9kZSBudW1iZXIsIHlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24KK3ZpZGVvX3JlZ2lzdGVyX2RldmljZV9ub193YXJuKCkgaW5zdGVhZC4KKwogV2hlbmV2ZXIgYSBkZXZpY2Ugbm9kZSBpcyBjcmVhdGVkIHNvbWUgYXR0cmlidXRlcyBhcmUgYWxzbyBjcmVhdGVkIGZvciB5b3UuCiBJZiB5b3UgbG9vayBpbiAvc3lzL2NsYXNzL3ZpZGVvNGxpbnV4IHlvdSBzZWUgdGhlIGRldmljZXMuIEdvIGludG8gZS5nLgogdmlkZW8wIGFuZCB5b3Ugd2lsbCBzZWUgJ25hbWUnIGFuZCAnaW5kZXgnIGF0dHJpYnV0ZXMuIFRoZSAnbmFtZScgYXR0cmlidXRlCi1pcyB0aGUgJ25hbWUnIGZpZWxkIG9mIHRoZSB2aWRlb19kZXZpY2Ugc3RydWN0LiBUaGUgJ2luZGV4JyBhdHRyaWJ1dGUgaXMKLWEgZGV2aWNlIG5vZGUgaW5kZXggdGhhdCBjYW4gYmUgYXNzaWduZWQgYnkgdGhlIGRyaXZlciwgb3IgdGhhdCBpcyBjYWxjdWxhdGVkCi1mb3IgeW91LgoraXMgdGhlICduYW1lJyBmaWVsZCBvZiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdC4KIAotSWYgeW91IGNhbGwgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCksIHRoZW4gdGhlIGluZGV4IGlzIGp1c3QgaW5jcmVhc2VkIGJ5Ci0xIGZvciBlYWNoIGRldmljZSBub2RlIHlvdSByZWdpc3Rlci4gVGhlIGZpcnN0IHZpZGVvIGRldmljZSBub2RlIHlvdSByZWdpc3RlcgotYWx3YXlzIHN0YXJ0cyBvZmYgd2l0aCAwLgotCi1BbHRlcm5hdGl2ZWx5IHlvdSBjYW4gY2FsbCB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoKSB3aGljaCBpcyBpZGVudGljYWwKLXRvIHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpLCBidXQgd2l0aCBhbiBleHRyYSBpbmRleCBhcmd1bWVudC4gSGVyZSB5b3UgY2FuCi1wYXNzIGEgc3BlY2lmaWMgaW5kZXggdmFsdWUgKGJldHdlZW4gMCBhbmQgMzEpIHRoYXQgc2hvdWxkIGJlIHVzZWQuCitUaGUgJ2luZGV4JyBhdHRyaWJ1dGUgaXMgdGhlIGluZGV4IG9mIHRoZSBkZXZpY2Ugbm9kZTogZm9yIGVhY2ggY2FsbCB0bwordmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgdGhlIGluZGV4IGlzIGp1c3QgaW5jcmVhc2VkIGJ5IDEuIFRoZSBmaXJzdCB2aWRlbworZGV2aWNlIG5vZGUgeW91IHJlZ2lzdGVyIGFsd2F5cyBzdGFydHMgd2l0aCBpbmRleCAwLgogCiBVc2VycyBjYW4gc2V0dXAgdWRldiBydWxlcyB0aGF0IHV0aWxpemUgdGhlIGluZGV4IGF0dHJpYnV0ZSB0byBtYWtlIGZhbmN5CiBkZXZpY2UgbmFtZXMgKGUuZy4gJ21wZWdYJyBmb3IgTVBFRyB2aWRlbyBjYXB0dXJlIGRldmljZSBub2RlcykuCkBAIC01MjMsOSArNTIzLDggQEAKIAogLSB2ZmxfdHlwZTogdGhlIGRldmljZSB0eXBlIHBhc3NlZCB0byB2aWRlb19yZWdpc3Rlcl9kZXZpY2UuCiAtIG1pbm9yOiB0aGUgYXNzaWduZWQgZGV2aWNlIG1pbm9yIG51bWJlci4KLS0gbnVtOiB0aGUgZGV2aWNlIGtlcm5lbCBudW1iZXIgKGkuZS4gdGhlIFggaW4gdmlkZW9YKS4KLS0gaW5kZXg6IHRoZSBkZXZpY2UgaW5kZXggbnVtYmVyIChjYWxjdWxhdGVkIG9yIHNldCBleHBsaWNpdGx5IHVzaW5nCi0gIHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleCkuCistIG51bTogdGhlIGRldmljZSBub2RlIG51bWJlciAoaS5lLiB0aGUgWCBpbiB2aWRlb1gpLgorLSBpbmRleDogdGhlIGRldmljZSBpbmRleCBudW1iZXIuCiAKIElmIHRoZSByZWdpc3RyYXRpb24gZmFpbGVkLCB0aGVuIHlvdSBuZWVkIHRvIGNhbGwgdmlkZW9fZGV2aWNlX3JlbGVhc2UoKQogdG8gZnJlZSB0aGUgYWxsb2NhdGVkIHZpZGVvX2RldmljZSBzdHJ1Y3QsIG9yIGZyZWUgeW91ciBvd24gc3RydWN0IGlmIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYwppbmRleCAwNTc2OWNmLi5jOGRlZDE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYwpAQCAtODksNyArODksNyBAQAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKLWludCBnZXRfYnJpZ2h0bmVzc19hZGoodW5zaWduZWQgY2hhciAqaW1hZ2UsIGxvbmcgc2l6ZSwgaW50ICpicmlnaHRuZXNzKSB7CitzdGF0aWMgaW50IGdldF9icmlnaHRuZXNzX2Fkaih1bnNpZ25lZCBjaGFyICppbWFnZSwgbG9uZyBzaXplLCBpbnQgKmJyaWdodG5lc3MpIHsKICAgbG9uZyBpLCB0b3QgPSAwOwogICBmb3IgKGk9MDtpPHNpemUqMztpKyspCiAgICAgdG90ICs9IGltYWdlW2ldOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vdm0vMDAtSU5ERVgKaW5kZXggMmY3N2NlZC4uZTU3ZDZhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtLzAwLUlOREVYCkBAIC02LDYgKzYsOCBAQAogCS0gdmFyaW91cyBpbmZvcm1hdGlvbiBvbiBtZW1vcnkgYmFsYW5jaW5nLgogaHVnZXRsYnBhZ2UudHh0CiAJLSBhIGJyaWVmIHN1bW1hcnkgb2YgaHVnZXRsYnBhZ2Ugc3VwcG9ydCBpbiB0aGUgTGludXgga2VybmVsLgora3NtLnR4dAorCS0gaG93IHRvIHVzZSB0aGUgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcgZmVhdHVyZS4KIGxvY2tpbmcKIAktIGluZm8gb24gaG93IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGluIHRoZSBMaW51eCB2bSBjb2RlLgogbnVtYQpAQCAtMjAsMyArMjIsNSBAQAogCS0gc291cmNlIGNvZGUgZm9yIGEgdG9vbCB0byBnZXQgcmVwb3J0cyBhYm91dCBzbGFicy4KIHNsdWIudHh0CiAJLSBhIHNob3J0IHVzZXJzIGd1aWRlIGZvciBTTFVCLgorbWFwX2h1Z2V0bGIuYworCS0gYW4gZXhhbXBsZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTUFQX0hVR0VUTEIgbW1hcCBmbGFnLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAppbmRleCBlYTg3MTRmLi44MmE3YmQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dApAQCAtMTgsMTMgKzE4LDEzIEBACiBhdXRvbWF0aWNhbGx5IHdoZW4gQ09ORklHX0hVR0VUTEJGUyBpcyBzZWxlY3RlZCkgY29uZmlndXJhdGlvbgogb3B0aW9ucy4KIAotVGhlIGtlcm5lbCBidWlsdCB3aXRoIGh1Z2VwYWdlIHN1cHBvcnQgc2hvdWxkIHNob3cgdGhlIG51bWJlciBvZiBjb25maWd1cmVkCi1odWdlcGFnZXMgaW4gdGhlIHN5c3RlbSBieSBydW5uaW5nIHRoZSAiY2F0IC9wcm9jL21lbWluZm8iIGNvbW1hbmQuCitUaGUga2VybmVsIGJ1aWx0IHdpdGggaHVnZSBwYWdlIHN1cHBvcnQgc2hvdWxkIHNob3cgdGhlIG51bWJlciBvZiBjb25maWd1cmVkCitodWdlIHBhZ2VzIGluIHRoZSBzeXN0ZW0gYnkgcnVubmluZyB0aGUgImNhdCAvcHJvYy9tZW1pbmZvIiBjb21tYW5kLgogCiAvcHJvYy9tZW1pbmZvIGFsc28gcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRvdGFsIG51bWJlciBvZiBodWdldGxiCiBwYWdlcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuICBJdCBhbHNvIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZQogbnVtYmVyIG9mIGZyZWUgaHVnZXRsYiBwYWdlcyBhdCBhbnkgdGltZS4gIEl0IGFsc28gZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBjb25maWd1cmVkIGh1Z2VwYWdlIHNpemUgLSB0aGlzIGlzIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgcHJvcGVyCit0aGUgY29uZmlndXJlZCBodWdlIHBhZ2Ugc2l6ZSAtIHRoaXMgaXMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBwcm9wZXIKIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBhYm92ZSBzeXN0ZW0gY2FsbHMuCiAKIFRoZSBvdXRwdXQgb2YgImNhdCAvcHJvYy9tZW1pbmZvIiB3aWxsIGhhdmUgbGluZXMgbGlrZToKQEAgLTM3LDI1ICszNywyNyBAQAogSHVnZXBhZ2VzaXplOiAgICB6enoga0IKIAogd2hlcmU6Ci1IdWdlUGFnZXNfVG90YWwgaXMgdGhlIHNpemUgb2YgdGhlIHBvb2wgb2YgaHVnZXBhZ2VzLgotSHVnZVBhZ2VzX0ZyZWUgaXMgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgaW4gdGhlIHBvb2wgdGhhdCBhcmUgbm90IHlldAotYWxsb2NhdGVkLgotSHVnZVBhZ2VzX1JzdmQgaXMgc2hvcnQgZm9yICJyZXNlcnZlZCwiIGFuZCBpcyB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlcwotZm9yIHdoaWNoIGEgY29tbWl0bWVudCB0byBhbGxvY2F0ZSBmcm9tIHRoZSBwb29sIGhhcyBiZWVuIG1hZGUsIGJ1dCBubwotYWxsb2NhdGlvbiBoYXMgeWV0IGJlZW4gbWFkZS4gSXQncyB2YWd1ZWx5IGFuYWxvZ291cyB0byBvdmVyY29tbWl0LgotSHVnZVBhZ2VzX1N1cnAgaXMgc2hvcnQgZm9yICJzdXJwbHVzLCIgYW5kIGlzIHRoZSBudW1iZXIgb2YgaHVnZXBhZ2VzIGluCi10aGUgcG9vbCBhYm92ZSB0aGUgdmFsdWUgaW4gL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcy4gVGhlIG1heGltdW0KLW51bWJlciBvZiBzdXJwbHVzIGh1Z2VwYWdlcyBpcyBjb250cm9sbGVkIGJ5Ci0vcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMuCitIdWdlUGFnZXNfVG90YWwgaXMgdGhlIHNpemUgb2YgdGhlIHBvb2wgb2YgaHVnZSBwYWdlcy4KK0h1Z2VQYWdlc19GcmVlICBpcyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgaW4gdGhlIHBvb2wgdGhhdCBhcmUgbm90IHlldAorICAgICAgICAgICAgICAgIGFsbG9jYXRlZC4KK0h1Z2VQYWdlc19Sc3ZkICBpcyBzaG9ydCBmb3IgInJlc2VydmVkLCIgYW5kIGlzIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBmb3IKKyAgICAgICAgICAgICAgICB3aGljaCBhIGNvbW1pdG1lbnQgdG8gYWxsb2NhdGUgZnJvbSB0aGUgcG9vbCBoYXMgYmVlbiBtYWRlLAorICAgICAgICAgICAgICAgIGJ1dCBubyBhbGxvY2F0aW9uIGhhcyB5ZXQgYmVlbiBtYWRlLiAgUmVzZXJ2ZWQgaHVnZSBwYWdlcworICAgICAgICAgICAgICAgIGd1YXJhbnRlZSB0aGF0IGFuIGFwcGxpY2F0aW9uIHdpbGwgYmUgYWJsZSB0byBhbGxvY2F0ZSBhCisgICAgICAgICAgICAgICAgaHVnZSBwYWdlIGZyb20gdGhlIHBvb2wgb2YgaHVnZSBwYWdlcyBhdCBmYXVsdCB0aW1lLgorSHVnZVBhZ2VzX1N1cnAgIGlzIHNob3J0IGZvciAic3VycGx1cywiIGFuZCBpcyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgaW4KKyAgICAgICAgICAgICAgICB0aGUgcG9vbCBhYm92ZSB0aGUgdmFsdWUgaW4gL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcy4gVGhlCisgICAgICAgICAgICAgICAgbWF4aW11bSBudW1iZXIgb2Ygc3VycGx1cyBodWdlIHBhZ2VzIGlzIGNvbnRyb2xsZWQgYnkKKyAgICAgICAgICAgICAgICAvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMuCiAKIC9wcm9jL2ZpbGVzeXN0ZW1zIHNob3VsZCBhbHNvIHNob3cgYSBmaWxlc3lzdGVtIG9mIHR5cGUgImh1Z2V0bGJmcyIgY29uZmlndXJlZAogaW4gdGhlIGtlcm5lbC4KIAogL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGNvbmZpZ3VyZWQgaHVnZXRsYgogcGFnZXMgaW4gdGhlIGtlcm5lbC4gIFN1cGVyIHVzZXIgY2FuIGR5bmFtaWNhbGx5IHJlcXVlc3QgbW9yZSAob3IgZnJlZSBzb21lCi1wcmUtY29uZmlndXJlZCkgaHVnZXBhZ2VzLgorcHJlLWNvbmZpZ3VyZWQpIGh1Z2UgcGFnZXMuCiBUaGUgYWxsb2NhdGlvbiAob3IgZGVhbGxvY2F0aW9uKSBvZiBodWdldGxiIHBhZ2VzIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgYXJlCi1lbm91Z2ggcGh5c2ljYWxseSBjb250aWd1b3VzIGZyZWUgcGFnZXMgaW4gc3lzdGVtIChmcmVlaW5nIG9mIGh1Z2VwYWdlcyBpcworZW5vdWdoIHBoeXNpY2FsbHkgY29udGlndW91cyBmcmVlIHBhZ2VzIGluIHN5c3RlbSAoZnJlZWluZyBvZiBodWdlIHBhZ2VzIGlzCiBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZSBlbm91Z2ggaHVnZXRsYiBwYWdlcyBmcmVlIHRoYXQgY2FuIGJlIHRyYW5zZmVycmVkCiBiYWNrIHRvIHJlZ3VsYXIgbWVtb3J5IHBvb2wpLgogCkBAIC02Nyw0MyArNjksODIgQEAKIHRoZSBodWdlIHBhZ2VzLiAgSXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgcHJlYWxsb2NhdGUKIGVub3VnaCBtZW1vcnkgZm9yIGh1Z2UgcGFnZSBwdXJwb3Nlcy4KIAotVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBkeW5hbWljYWxseSBhbGxvY2F0ZS9kZWFsbG9jYXRlIGh1Z2VwYWdlczoKK1RoZSBhZG1pbmlzdHJhdG9yIGNhbiBwcmVhbGxvY2F0ZSBodWdlIHBhZ2VzIG9uIHRoZSBrZXJuZWwgYm9vdCBjb21tYW5kIGxpbmUgYnkKK3NwZWNpZnlpbmcgdGhlICJodWdlcGFnZXM9TiIgcGFyYW1ldGVyLCB3aGVyZSAnTicgPSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMKK3JlcXVlc3RlZC4gIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgbWV0aG9kIGZvciBwcmVhbGxvY2F0aW5nIGh1Z2UgcGFnZXMgYXMKK21lbW9yeSBoYXMgbm90IHlldCBiZWNvbWUgZnJhZ21lbnRlZC4KKworU29tZSBwbGF0Zm9ybXMgc3VwcG9ydCBtdWx0aXBsZSBodWdlIHBhZ2Ugc2l6ZXMuICBUbyBwcmVhbGxvY2F0ZSBodWdlIHBhZ2VzCitvZiBhIHNwZWNpZmljIHNpemUsIG9uZSBtdXN0IHByZWNlZWQgdGhlIGh1Z2UgcGFnZXMgYm9vdCBjb21tYW5kIHBhcmFtZXRlcnMKK3dpdGggYSBodWdlIHBhZ2Ugc2l6ZSBzZWxlY3Rpb24gcGFyYW1ldGVyICJodWdlcGFnZXN6PTxzaXplPiIuICA8c2l6ZT4gbXVzdAorYmUgc3BlY2lmaWVkIGluIGJ5dGVzIHdpdGggb3B0aW9uYWwgc2NhbGUgc3VmZml4IFtrS21NZ0ddLiAgVGhlIGRlZmF1bHQgaHVnZQorcGFnZSBzaXplIG1heSBiZSBzZWxlY3RlZCB3aXRoIHRoZSAiZGVmYXVsdF9odWdlcGFnZXN6PTxzaXplPiIgYm9vdCBwYXJhbWV0ZXIuCisKKy9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMgaW5kaWNhdGVzIHRoZSBjdXJyZW50IG51bWJlciBvZiBjb25maWd1cmVkIFtkZWZhdWx0CitzaXplXSBodWdldGxiIHBhZ2VzIGluIHRoZSBrZXJuZWwuICBTdXBlciB1c2VyIGNhbiBkeW5hbWljYWxseSByZXF1ZXN0IG1vcmUKKyhvciBmcmVlIHNvbWUgcHJlLWNvbmZpZ3VyZWQpIGh1Z2UgcGFnZXMuCisKK1VzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUvZGVhbGxvY2F0ZSBkZWZhdWx0IHNpemVkCitodWdlIHBhZ2VzOgogCiAJZWNobyAyMCA+IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMKIAotVGhpcyBjb21tYW5kIHdpbGwgdHJ5IHRvIGNvbmZpZ3VyZSAyMCBodWdlcGFnZXMgaW4gdGhlIHN5c3RlbS4gIFRoZSBzdWNjZXNzCi1vciBmYWlsdXJlIG9mIGFsbG9jYXRpb24gZGVwZW5kcyBvbiB0aGUgYW1vdW50IG9mIHBoeXNpY2FsbHkgY29udGlndW91cwotbWVtb3J5IHRoYXQgaXMgcHJlc2V0IGluIHN5c3RlbSBhdCB0aGlzIHRpbWUuICBTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQKLXRvIHB1dCB0aGlzIGNvbW1hbmQgaW4gb25lIG9mIHRoZSBsb2NhbCByYyBpbml0IGZpbGVzLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUKLWtlcm5lbCB0byByZXF1ZXN0IGh1Z2UgcGFnZXMgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2VzcyAod2hlbiB0aGUgcG9zc2liaWxpdHkKLW9mIGdldHRpbmcgcGh5c2ljYWwgY29udGlndW91cyBwYWdlcyBpcyBzdGlsbCB2ZXJ5IGhpZ2gpLiBJbiBlaXRoZXIKLWNhc2UsIGFkbWluaXN0cmF0b3JzIHdpbGwgd2FudCB0byB2ZXJpZnkgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgYWN0dWFsbHkKLWFsbG9jYXRlZCBieSBjaGVja2luZyB0aGUgc3lzY3RsIG9yIG1lbWluZm8uCitUaGlzIGNvbW1hbmQgd2lsbCB0cnkgdG8gY29uZmlndXJlIDIwIGRlZmF1bHQgc2l6ZWQgaHVnZSBwYWdlcyBpbiB0aGUgc3lzdGVtLgorT24gYSBOVU1BIHBsYXRmb3JtLCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBkaXN0cmlidXRlIHRoZSBodWdlIHBhZ2UgcG9vbAorb3ZlciB0aGUgYWxsIG9uLWxpbmUgbm9kZXMuICBUaGVzZSBodWdlIHBhZ2VzLCBhbGxvY2F0ZWQgd2hlbiBucl9odWdlcGFnZXMKK2lzIGluY3JlYXNlZCwgYXJlIGNhbGxlZCAicGVyc2lzdGVudCBodWdlIHBhZ2VzIi4KIAotL3Byb2Mvc3lzL3ZtL25yX292ZXJjb21taXRfaHVnZXBhZ2VzIGluZGljYXRlcyBob3cgbGFyZ2UgdGhlIHBvb2wgb2YKLWh1Z2VwYWdlcyBjYW4gZ3JvdywgaWYgbW9yZSBodWdlcGFnZXMgdGhhbiAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGFyZQotcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9ucy4gZWNobydpbmcgYW55IG5vbi16ZXJvIHZhbHVlIGludG8gdGhpcyBmaWxlCi1pbmRpY2F0ZXMgdGhhdCB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gaXMgYWxsb3dlZCB0byB0cnkgdG8gb2J0YWluCi1odWdlcGFnZXMgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBpZiB0aGUgbm9ybWFsIHBvb2wgaXMgZXhoYXVzdGVkLiBBcwotdGhlc2Ugc3VycGx1cyBodWdlcGFnZXMgZ28gb3V0IG9mIHVzZSwgdGhleSBhcmUgZnJlZWQgYmFjayB0byB0aGUgYnVkZHkKK1RoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgaHVnZSBwYWdlIGFsbG9jYXRpb24gZGVwZW5kcyBvbiB0aGUgYW1vdW50IG9mCitwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHRoYXQgaXMgcHJlc2V0IGluIHN5c3RlbSBhdCB0aGUgdGltZSBvZiB0aGUKK2FsbG9jYXRpb24gYXR0ZW1wdC4gIElmIHRoZSBrZXJuZWwgaXMgdW5hYmxlIHRvIGFsbG9jYXRlIGh1Z2UgcGFnZXMgZnJvbQorc29tZSBub2RlcyBpbiBhIE5VTUEgc3lzdGVtLCBpdCB3aWxsIGF0dGVtcHQgdG8gbWFrZSB1cCB0aGUgZGlmZmVyZW5jZSBieQorYWxsb2NhdGluZyBleHRyYSBwYWdlcyBvbiBvdGhlciBub2RlcyB3aXRoIHN1ZmZpY2llbnQgYXZhaWxhYmxlIGNvbnRpZ3VvdXMKK21lbW9yeSwgaWYgYW55LgorCitTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQgdG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjIGluaXQKK2ZpbGVzLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUga2VybmVsIHRvIHJlcXVlc3QgaHVnZSBwYWdlcyBlYXJseSBpbiB0aGUgYm9vdAorcHJvY2VzcyB3aGVuIHRoZSBwb3NzaWJpbGl0eSBvZiBnZXR0aW5nIHBoeXNpY2FsIGNvbnRpZ3VvdXMgcGFnZXMgaXMgc3RpbGwKK3ZlcnkgaGlnaC4gIEFkbWluaXN0cmF0b3JzIGNhbiB2ZXJpZnkgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGFjdHVhbGx5CithbGxvY2F0ZWQgYnkgY2hlY2tpbmcgdGhlIHN5c2N0bCBvciBtZW1pbmZvLiAgVG8gY2hlY2sgdGhlIHBlciBub2RlCitkaXN0cmlidXRpb24gb2YgaHVnZSBwYWdlcyBpbiBhIE5VTUEgc3lzdGVtLCB1c2U6CisKKwljYXQgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL21lbWluZm8gfCBmZ3JlcCBIdWdlCisKKy9wcm9jL3N5cy92bS9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyBzcGVjaWZpZXMgaG93IGxhcmdlIHRoZSBwb29sIG9mCitodWdlIHBhZ2VzIGNhbiBncm93LCBpZiBtb3JlIGh1Z2UgcGFnZXMgdGhhbiAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGFyZQorcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9ucy4gIFdyaXRpbmcgYW55IG5vbi16ZXJvIHZhbHVlIGludG8gdGhpcyBmaWxlCitpbmRpY2F0ZXMgdGhhdCB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gaXMgYWxsb3dlZCB0byB0cnkgdG8gb2J0YWluICJzdXJwbHVzIgoraHVnZSBwYWdlcyBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoZW4gdGhlIG5vcm1hbCBwb29sIGlzIGV4aGF1c3RlZC4gQXMKK3RoZXNlIHN1cnBsdXMgaHVnZSBwYWdlcyBnbyBvdXQgb2YgdXNlLCB0aGV5IGFyZSBmcmVlZCBiYWNrIHRvIHRoZSBidWRkeQogYWxsb2NhdG9yLgogCitXaGVuIGluY3JlYXNpbmcgdGhlIGh1Z2UgcGFnZSBwb29sIHNpemUgdmlhIG5yX2h1Z2VwYWdlcywgYW55IHN1cnBsdXMKK3BhZ2VzIHdpbGwgZmlyc3QgYmUgcHJvbW90ZWQgdG8gcGVyc2lzdGVudCBodWdlIHBhZ2VzLiAgVGhlbiwgYWRkaXRpb25hbAoraHVnZSBwYWdlcyB3aWxsIGJlIGFsbG9jYXRlZCwgaWYgbmVjZXNzYXJ5IGFuZCBpZiBwb3NzaWJsZSwgdG8gZnVsZmlsbAordGhlIG5ldyBodWdlIHBhZ2UgcG9vbCBzaXplLgorCitUaGUgYWRtaW5pc3RyYXRvciBtYXkgc2hyaW5rIHRoZSBwb29sIG9mIHByZWFsbG9jYXRlZCBodWdlIHBhZ2VzIGZvcgordGhlIGRlZmF1bHQgaHVnZSBwYWdlIHNpemUgYnkgc2V0dGluZyB0aGUgbnJfaHVnZXBhZ2VzIHN5c2N0bCB0byBhCitzbWFsbGVyIHZhbHVlLiAgVGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgZnJlZWluZyBvZiBodWdlIHBhZ2VzCithY3Jvc3MgYWxsIG9uLWxpbmUgbm9kZXMuICBBbnkgZnJlZSBodWdlIHBhZ2VzIG9uIHRoZSBzZWxlY3RlZCBub2RlcyB3aWxsCitiZSBmcmVlZCBiYWNrIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuCisKIENhdmVhdDogU2hyaW5raW5nIHRoZSBwb29sIHZpYSBucl9odWdlcGFnZXMgc3VjaCB0aGF0IGl0IGJlY29tZXMgbGVzcwotdGhhbiB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlcyBpbiB1c2Ugd2lsbCBjb252ZXJ0IHRoZSBiYWxhbmNlIHRvIHN1cnBsdXMKK3RoYW4gdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGluIHVzZSB3aWxsIGNvbnZlcnQgdGhlIGJhbGFuY2UgdG8gc3VycGx1cwogaHVnZSBwYWdlcyBldmVuIGlmIGl0IHdvdWxkIGV4Y2VlZCB0aGUgb3ZlcmNvbW1pdCB2YWx1ZS4gIEFzIGxvbmcgYXMKIHRoaXMgY29uZGl0aW9uIGhvbGRzLCBob3dldmVyLCBubyBtb3JlIHN1cnBsdXMgaHVnZSBwYWdlcyB3aWxsIGJlCiBhbGxvd2VkIG9uIHRoZSBzeXN0ZW0gdW50aWwgb25lIG9mIHRoZSB0d28gc3lzY3RscyBhcmUgaW5jcmVhc2VkCiBzdWZmaWNpZW50bHksIG9yIHRoZSBzdXJwbHVzIGh1Z2UgcGFnZXMgZ28gb3V0IG9mIHVzZSBhbmQgYXJlIGZyZWVkLgogCi1XaXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIGh1Z2VwYWdlIHBvb2xzIGF0IHJ1bi10aW1lIGF2YWlsYWJsZSwgbXVjaCBvZgotdGhlIGh1Z2VwYWdlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaGFzIGJlZW4gZHVwbGljYXRlZCBpbiBzeXNmcy4gVGhlIGFib3ZlCi1pbmZvcm1hdGlvbiBhcHBsaWVzIHRvIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgKHdoaWNoIHdpbGwgYmUKLWNvbnRyb2xsZWQgYnkgdGhlIHByb2MgaW50ZXJmYWNlcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLiBUaGUgcm9vdAotaHVnZXBhZ2UgY29udHJvbCBkaXJlY3RvcnkgaXMKK1dpdGggc3VwcG9ydCBmb3IgbXVsdGlwbGUgaHVnZSBwYWdlIHBvb2xzIGF0IHJ1bi10aW1lIGF2YWlsYWJsZSwgbXVjaCBvZgordGhlIGh1Z2UgcGFnZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGhhcyBiZWVuIGR1cGxpY2F0ZWQgaW4gc3lzZnMuIFRoZSBhYm92ZQoraW5mb3JtYXRpb24gYXBwbGllcyB0byB0aGUgZGVmYXVsdCBodWdlIHBhZ2Ugc2l6ZSB3aGljaCB3aWxsIGJlCitjb250cm9sbGVkIGJ5IHRoZSAvcHJvYyBpbnRlcmZhY2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlIHJvb3QKK2h1Z2UgcGFnZSBjb250cm9sIGRpcmVjdG9yeSBpbiBzeXNmcyBpczoKIAogCS9zeXMva2VybmVsL21tL2h1Z2VwYWdlcwogCi1Gb3IgZWFjaCBodWdlcGFnZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWwsIGEgc3ViZGlyZWN0b3J5CitGb3IgZWFjaCBodWdlIHBhZ2Ugc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIHJ1bm5pbmcga2VybmVsLCBhIHN1YmRpcmVjdG9yeQogd2lsbCBleGlzdCwgb2YgdGhlIGZvcm0KIAogCWh1Z2VwYWdlcy0ke3NpemV9a0IKQEAgLTExNiw5ICsxNTcsOSBAQAogCXJlc3ZfaHVnZXBhZ2VzCiAJc3VycGx1c19odWdlcGFnZXMKIAotd2hpY2ggZnVuY3Rpb24gYXMgZGVzY3JpYmVkIGFib3ZlIGZvciB0aGUgZGVmYXVsdCBodWdlcGFnZS1zaXplZCBjYXNlLgord2hpY2ggZnVuY3Rpb24gYXMgZGVzY3JpYmVkIGFib3ZlIGZvciB0aGUgZGVmYXVsdCBodWdlIHBhZ2Utc2l6ZWQgY2FzZS4KIAotSWYgdGhlIHVzZXIgYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byByZXF1ZXN0IGh1Z2VwYWdlcyB1c2luZyBtbWFwIHN5c3RlbQorSWYgdGhlIHVzZXIgYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byByZXF1ZXN0IGh1Z2UgcGFnZXMgdXNpbmcgbW1hcCBzeXN0ZW0KIGNhbGwsIHRoZW4gaXQgaXMgcmVxdWlyZWQgdGhhdCBzeXN0ZW0gYWRtaW5pc3RyYXRvciBtb3VudCBhIGZpbGUgc3lzdGVtIG9mCiB0eXBlIGh1Z2V0bGJmczoKIApAQCAtMTI3LDcgKzE2OCw3IEBACiAJbm9uZSAvbW50L2h1Z2UKIAogVGhpcyBjb21tYW5kIG1vdW50cyBhIChwc2V1ZG8pIGZpbGVzeXN0ZW0gb2YgdHlwZSBodWdldGxiZnMgb24gdGhlIGRpcmVjdG9yeQotL21udC9odWdlLiAgQW55IGZpbGVzIGNyZWF0ZWQgb24gL21udC9odWdlIHVzZXMgaHVnZXBhZ2VzLiAgVGhlIHVpZCBhbmQgZ2lkCisvbW50L2h1Z2UuICBBbnkgZmlsZXMgY3JlYXRlZCBvbiAvbW50L2h1Z2UgdXNlcyBodWdlIHBhZ2VzLiAgVGhlIHVpZCBhbmQgZ2lkCiBvcHRpb25zIHNldHMgdGhlIG93bmVyIGFuZCBncm91cCBvZiB0aGUgcm9vdCBvZiB0aGUgZmlsZSBzeXN0ZW0uICBCeSBkZWZhdWx0CiB0aGUgdWlkIGFuZCBnaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyBhcmUgdGFrZW4uICBUaGUgbW9kZSBvcHRpb24gc2V0cyB0aGUKIG1vZGUgb2Ygcm9vdCBvZiBmaWxlIHN5c3RlbSB0byB2YWx1ZSAmIDA3NzcuICBUaGlzIHZhbHVlIGlzIGdpdmVuIGluIG9jdGFsLgpAQCAtMTQ2LDI0ICsxODcsMjYgQEAKIHVzZWQgdG8gY2hhbmdlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb24gaHVnZXRsYmZzLgogCiBBbHNvLCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IG5vIHN1Y2ggbW91bnQgY29tbWFuZCBpcyByZXF1aXJlZCBpZiB0aGUKLWFwcGxpY2F0aW9ucyBhcmUgZ29pbmcgdG8gdXNlIG9ubHkgc2htYXQvc2htZ2V0IHN5c3RlbSBjYWxscy4gIFVzZXJzIHdobwotd2lzaCB0byB1c2UgaHVnZXRsYiBwYWdlIHZpYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgc2hvdWxkIGJlIGEgbWVtYmVyIG9mCi1hIHN1cHBsZW1lbnRhcnkgZ3JvdXAgYW5kIHN5c3RlbSBhZG1pbiBuZWVkcyB0byBjb25maWd1cmUgdGhhdCBnaWQgaW50bwotL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwLiAgSXQgaXMgcG9zc2libGUgZm9yIHNhbWUgb3IgZGlmZmVyZW50Ci1hcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKiBjYWxscywgdGhvdWdoIHRoZQotbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwIGNhbGxzLgorYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byB1c2Ugb25seSBzaG1hdC9zaG1nZXQgc3lzdGVtIGNhbGxzIG9yIG1tYXAgd2l0aAorTUFQX0hVR0VUTEIuICBVc2VycyB3aG8gd2lzaCB0byB1c2UgaHVnZXRsYiBwYWdlIHZpYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKK3Nob3VsZCBiZSBhIG1lbWJlciBvZiBhIHN1cHBsZW1lbnRhcnkgZ3JvdXAgYW5kIHN5c3RlbSBhZG1pbiBuZWVkcyB0bworY29uZmlndXJlIHRoYXQgZ2lkIGludG8gL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwLiAgSXQgaXMgcG9zc2libGUgZm9yCitzYW1lIG9yIGRpZmZlcmVudCBhcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKgorY2FsbHMsIHRob3VnaCB0aGUgbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwIGNhbGxzCit3aXRob3V0IE1BUF9IVUdFVExCLiAgRm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBtbWFwIHdpdGggTUFQX0hVR0VUTEIgc2VlCittYXBfaHVnZXRsYi5jLgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIC8qCi0gKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2VwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgU3lzIFYgc2hhcmVkCisgKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2UgcGFnZSBtZW1vcnkgaW4gYSB1c2VyIGFwcGxpY2F0aW9uIHVzaW5nIFN5cyBWIHNoYXJlZAogICogbWVtb3J5IHN5c3RlbSBjYWxscy4gIEluIHRoaXMgZXhhbXBsZSB0aGUgYXBwIGlzIHJlcXVlc3RpbmcgMjU2TUIgb2YKICAqIG1lbW9yeSB0aGF0IGlzIGJhY2tlZCBieSBodWdlIHBhZ2VzLiAgVGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhlIGZsYWcKICAqIFNITV9IVUdFVExCIGluIHRoZSBzaG1nZXQgc3lzdGVtIGNhbGwgdG8gaW5mb3JtIHRoZSBrZXJuZWwgdGhhdCBpdCBpcwotICogcmVxdWVzdGluZyBodWdlcGFnZXMuCisgKiByZXF1ZXN0aW5nIGh1Z2UgcGFnZXMuCiAgKgogICogRm9yIHRoZSBpYTY0IGFyY2hpdGVjdHVyZSwgdGhlIExpbnV4IGtlcm5lbCByZXNlcnZlcyBSZWdpb24gbnVtYmVyIDQgZm9yCi0gKiBodWdlcGFnZXMuICBUaGF0IG1lYW5zIHRoZSBhZGRyZXNzZXMgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIG5lZWQKKyAqIGh1Z2UgcGFnZXMuICBUaGF0IG1lYW5zIHRoZSBhZGRyZXNzZXMgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIG5lZWQKICAqIHRvIGJlIHNwZWNpZmllZC4gIFNwZWNpZnlpbmcgYSBmaXhlZCBhZGRyZXNzIGlzIG5vdCByZXF1aXJlZCBvbiBwcGM2NCwKICAqIGkzODYgb3IgeDg2XzY0LgogICoKQEAgLTI1MiwxNCArMjk1LDE0IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIC8qCi0gKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2VwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIG1tYXAKKyAqIEV4YW1wbGUgb2YgdXNpbmcgaHVnZSBwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIG1tYXAKICAqIHN5c3RlbSBjYWxsLiAgQmVmb3JlIHJ1bm5pbmcgdGhpcyBhcHBsaWNhdGlvbiwgbWFrZSBzdXJlIHRoYXQgdGhlCiAgKiBhZG1pbmlzdHJhdG9yIGhhcyBtb3VudGVkIHRoZSBodWdldGxiZnMgZmlsZXN5c3RlbSAob24gc29tZSBkaXJlY3RvcnkKICAqIGxpa2UgL21udCkgdXNpbmcgdGhlIGNvbW1hbmQgbW91bnQgLXQgaHVnZXRsYmZzIG5vZGV2IC9tbnQuIEluIHRoaXMKICAqIGV4YW1wbGUsIHRoZSBhcHAgaXMgcmVxdWVzdGluZyBtZW1vcnkgb2Ygc2l6ZSAyNTZNQiB0aGF0IGlzIGJhY2tlZCBieQogICogaHVnZSBwYWdlcy4KICAqCi0gKiBGb3IgaWE2NCBhcmNoaXRlY3R1cmUsIExpbnV4IGtlcm5lbCByZXNlcnZlcyBSZWdpb24gbnVtYmVyIDQgZm9yIGh1Z2VwYWdlcy4KKyAqIEZvciBpYTY0IGFyY2hpdGVjdHVyZSwgTGludXgga2VybmVsIHJlc2VydmVzIFJlZ2lvbiBudW1iZXIgNCBmb3IgaHVnZSBwYWdlcy4KICAqIFRoYXQgbWVhbnMgdGhlIGFkZHJlc3NlcyBzdGFydGluZyB3aXRoIDB4ODAwMDAwLi4uIHdpbGwgbmVlZCB0byBiZQogICogc3BlY2lmaWVkLiAgU3BlY2lmeWluZyBhIGZpeGVkIGFkZHJlc3MgaXMgbm90IHJlcXVpcmVkIG9uIHBwYzY0LCBpMzg2CiAgKiBvciB4ODZfNjQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhMjJmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dApAQCAtMCwwICsxLDg5IEBACitIb3cgdG8gdXNlIHRoZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZyBmZWF0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tTTSBpcyBhIG1lbW9yeS1zYXZpbmcgZGUtZHVwbGljYXRpb24gZmVhdHVyZSwgZW5hYmxlZCBieSBDT05GSUdfS1NNPXksCithZGRlZCB0byB0aGUgTGludXgga2VybmVsIGluIDIuNi4zMi4gIFNlZSBtbS9rc20uYyBmb3IgaXRzIGltcGxlbWVudGF0aW9uLAorYW5kIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzMwNjcwNC8gYW5kIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzMzMDU4OS8KKworVGhlIEtTTSBkYWVtb24ga3NtZCBwZXJpb2RpY2FsbHkgc2NhbnMgdGhvc2UgYXJlYXMgb2YgdXNlciBtZW1vcnkgd2hpY2gKK2hhdmUgYmVlbiByZWdpc3RlcmVkIHdpdGggaXQsIGxvb2tpbmcgZm9yIHBhZ2VzIG9mIGlkZW50aWNhbCBjb250ZW50IHdoaWNoCitjYW4gYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgd3JpdGUtcHJvdGVjdGVkIHBhZ2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkKK2NvcGllZCBpZiBhIHByb2Nlc3MgbGF0ZXIgd2FudHMgdG8gdXBkYXRlIGl0cyBjb250ZW50KS4KKworS1NNIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBmb3IgdXNlIHdpdGggS1ZNICh3aGVyZSBpdCB3YXMga25vd24gYXMKK0tlcm5lbCBTaGFyZWQgTWVtb3J5KSwgdG8gZml0IG1vcmUgdmlydHVhbCBtYWNoaW5lcyBpbnRvIHBoeXNpY2FsIG1lbW9yeSwKK2J5IHNoYXJpbmcgdGhlIGRhdGEgY29tbW9uIGJldHdlZW4gdGhlbS4gIEJ1dCBpdCBjYW4gYmUgdXNlZnVsIHRvIGFueQorYXBwbGljYXRpb24gd2hpY2ggZ2VuZXJhdGVzIG1hbnkgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGRhdGEuCisKK0tTTSBvbmx5IG1lcmdlcyBhbm9ueW1vdXMgKHByaXZhdGUpIHBhZ2VzLCBuZXZlciBwYWdlY2FjaGUgKGZpbGUpIHBhZ2VzLgorS1NNJ3MgbWVyZ2VkIHBhZ2VzIGFyZSBhdCBwcmVzZW50IGxvY2tlZCBpbnRvIGtlcm5lbCBtZW1vcnkgZm9yIGFzIGxvbmcKK2FzIHRoZXkgYXJlIHNoYXJlZDogc28gY2Fubm90IGJlIHN3YXBwZWQgb3V0IGxpa2UgdGhlIHVzZXIgcGFnZXMgdGhleQorcmVwbGFjZSAoYnV0IHN3YXBwaW5nIEtTTSBwYWdlcyBzaG91bGQgZm9sbG93IHNvb24gaW4gYSBsYXRlciByZWxlYXNlKS4KKworS1NNIG9ubHkgb3BlcmF0ZXMgb24gdGhvc2UgYXJlYXMgb2YgYWRkcmVzcyBzcGFjZSB3aGljaCBhbiBhcHBsaWNhdGlvbgoraGFzIGFkdmlzZWQgdG8gYmUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcsIGJ5IHVzaW5nIHRoZSBtYWR2aXNlKDIpCitzeXN0ZW0gY2FsbDogaW50IG1hZHZpc2UoYWRkciwgbGVuZ3RoLCBNQURWX01FUkdFQUJMRSkuCisKK1RoZSBhcHAgbWF5IGNhbGwgaW50IG1hZHZpc2UoYWRkciwgbGVuZ3RoLCBNQURWX1VOTUVSR0VBQkxFKSB0byBjYW5jZWwKK3RoYXQgYWR2aWNlIGFuZCByZXN0b3JlIHVuc2hhcmVkIHBhZ2VzOiB3aGVyZXVwb24gS1NNIHVubWVyZ2VzIHdoYXRldmVyCitpdCBtZXJnZWQgaW4gdGhhdCByYW5nZS4gIE5vdGU6IHRoaXMgdW5tZXJnaW5nIGNhbGwgbWF5IHN1ZGRlbmx5IHJlcXVpcmUKK21vcmUgbWVtb3J5IHRoYW4gaXMgYXZhaWxhYmxlIC0gcG9zc2libHkgZmFpbGluZyB3aXRoIEVBR0FJTiwgYnV0IG1vcmUKK3Byb2JhYmx5IGFyb3VzaW5nIHRoZSBPdXQtT2YtTWVtb3J5IGtpbGxlci4KKworSWYgS1NNIGlzIG5vdCBjb25maWd1cmVkIGludG8gdGhlIHJ1bm5pbmcga2VybmVsLCBtYWR2aXNlIE1BRFZfTUVSR0VBQkxFCithbmQgTUFEVl9VTk1FUkdFQUJMRSBzaW1wbHkgZmFpbCB3aXRoIEVJTlZBTC4gIElmIHRoZSBydW5uaW5nIGtlcm5lbCB3YXMKK2J1aWx0IHdpdGggQ09ORklHX0tTTT15LCB0aG9zZSBjYWxscyB3aWxsIG5vcm1hbGx5IHN1Y2NlZWQ6IGV2ZW4gaWYgdGhlCit0aGUgS1NNIGRhZW1vbiBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcsIE1BRFZfTUVSR0VBQkxFIHN0aWxsIHJlZ2lzdGVycwordGhlIHJhbmdlIGZvciB3aGVuZXZlciB0aGUgS1NNIGRhZW1vbiBpcyBzdGFydGVkOyBldmVuIGlmIHRoZSByYW5nZQorY2Fubm90IGNvbnRhaW4gYW55IHBhZ2VzIHdoaWNoIEtTTSBjb3VsZCBhY3R1YWxseSBtZXJnZTsgZXZlbiBpZgorTUFEVl9VTk1FUkdFQUJMRSBpcyBhcHBsaWVkIHRvIGEgcmFuZ2Ugd2hpY2ggd2FzIG5ldmVyIE1BRFZfTUVSR0VBQkxFLgorCitMaWtlIG90aGVyIG1hZHZpc2UgY2FsbHMsIHRoZXkgYXJlIGludGVuZGVkIGZvciB1c2Ugb24gbWFwcGVkIGFyZWFzIG9mCit0aGUgdXNlciBhZGRyZXNzIHNwYWNlOiB0aGV5IHdpbGwgcmVwb3J0IEVOT01FTSBpZiB0aGUgc3BlY2lmaWVkIHJhbmdlCitpbmNsdWRlcyB1bm1hcHBlZCBnYXBzICh0aG91Z2ggd29ya2luZyBvbiB0aGUgaW50ZXJ2ZW5pbmcgbWFwcGVkIGFyZWFzKSwKK2FuZCBtaWdodCBmYWlsIHdpdGggRUFHQUlOIGlmIG5vdCBlbm91Z2ggbWVtb3J5IGZvciBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorCitBcHBsaWNhdGlvbnMgc2hvdWxkIGJlIGNvbnNpZGVyYXRlIGluIHRoZWlyIHVzZSBvZiBNQURWX01FUkdFQUJMRSwKK3Jlc3RyaWN0aW5nIGl0cyB1c2UgdG8gYXJlYXMgbGlrZWx5IHRvIGJlbmVmaXQuICBLU00ncyBzY2FucyBtYXkgdXNlCithIGxvdCBvZiBwcm9jZXNzaW5nIHBvd2VyLCBhbmQgaXRzIGtlcm5lbC1yZXNpZGVudCBwYWdlcyBhcmUgYSBsaW1pdGVkCityZXNvdXJjZS4gIFNvbWUgaW5zdGFsbGF0aW9ucyB3aWxsIGRpc2FibGUgS1NNIGZvciB0aGVzZSByZWFzb25zLgorCitUaGUgS1NNIGRhZW1vbiBpcyBjb250cm9sbGVkIGJ5IHN5c2ZzIGZpbGVzIGluIC9zeXMva2VybmVsL21tL2tzbS8sCityZWFkYWJsZSBieSBhbGwgYnV0IHdyaXRhYmxlIG9ubHkgYnkgcm9vdDoKKworbWF4X2tlcm5lbF9wYWdlcyAtIHNldCB0byBtYXhpbXVtIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdGhhdCBLU00gbWF5IHVzZQorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAwMCA+IC9zeXMva2VybmVsL21tL2tzbS9tYXhfa2VybmVsX3BhZ2VzIgorICAgICAgICAgICAgICAgICAgIFZhbHVlIDAgaW1wb3NlcyBubyBsaW1pdCBvbiB0aGUga2VybmVsIHBhZ2VzIEtTTSBtYXkgdXNlOworICAgICAgICAgICAgICAgICAgIGJ1dCBub3RlIHRoYXQgYW55IHByb2Nlc3MgdXNpbmcgTUFEVl9NRVJHRUFCTEUgY2FuIGNhdXNlCisgICAgICAgICAgICAgICAgICAgS1NNIHRvIGFsbG9jYXRlIHRoZXNlIHBhZ2VzLCB1bnN3YXBwYWJsZSB1bnRpbCBpdCBleGl0cy4KKyAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAyMDAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisKK3BhZ2VzX3RvX3NjYW4gICAgLSBob3cgbWFueSBwcmVzZW50IHBhZ2VzIHRvIHNjYW4gYmVmb3JlIGtzbWQgZ29lcyB0byBzbGVlcAorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAwID4gL3N5cy9rZXJuZWwvbW0va3NtL3BhZ2VzX3RvX3NjYW4iCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMjAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisKK3NsZWVwX21pbGxpc2VjcyAgLSBob3cgbWFueSBtaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmVmb3JlIG5leHQgc2NhbgorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAgPiAvc3lzL2tlcm5lbC9tbS9rc20vc2xlZXBfbWlsbGlzZWNzIgorICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDIwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisKK3J1biAgICAgICAgICAgICAgLSBzZXQgMCB0byBzdG9wIGtzbWQgZnJvbSBydW5uaW5nIGJ1dCBrZWVwIG1lcmdlZCBwYWdlcywKKyAgICAgICAgICAgICAgICAgICBzZXQgMSB0byBydW4ga3NtZCBlLmcuICJlY2hvIDEgPiAvc3lzL2tlcm5lbC9tbS9rc20vcnVuIiwKKyAgICAgICAgICAgICAgICAgICBzZXQgMiB0byBzdG9wIGtzbWQgYW5kIHVubWVyZ2UgYWxsIHBhZ2VzIGN1cnJlbnRseSBtZXJnZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGxlYXZlIG1lcmdlYWJsZSBhcmVhcyByZWdpc3RlcmVkIGZvciBuZXh0IHJ1bgorICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDEgKGZvciBpbW1lZGlhdGUgdXNlIGJ5IGFwcHMgd2hpY2ggcmVnaXN0ZXIpCisKK1RoZSBlZmZlY3RpdmVuZXNzIG9mIEtTTSBhbmQgTUFEVl9NRVJHRUFCTEUgaXMgc2hvd24gaW4gL3N5cy9rZXJuZWwvbW0va3NtLzoKKworcGFnZXNfc2hhcmVkICAgICAtIGhvdyBtYW55IHNoYXJlZCB1bnN3YXBwYWJsZSBrZXJuZWwgcGFnZXMgS1NNIGlzIHVzaW5nCitwYWdlc19zaGFyaW5nICAgIC0gaG93IG1hbnkgbW9yZSBzaXRlcyBhcmUgc2hhcmluZyB0aGVtIGkuZS4gaG93IG11Y2ggc2F2ZWQKK3BhZ2VzX3Vuc2hhcmVkICAgLSBob3cgbWFueSBwYWdlcyB1bmlxdWUgYnV0IHJlcGVhdGVkbHkgY2hlY2tlZCBmb3IgbWVyZ2luZworcGFnZXNfdm9sYXRpbGUgICAtIGhvdyBtYW55IHBhZ2VzIGNoYW5naW5nIHRvbyBmYXN0IHRvIGJlIHBsYWNlZCBpbiBhIHRyZWUKK2Z1bGxfc2NhbnMgICAgICAgLSBob3cgbWFueSB0aW1lcyBhbGwgbWVyZ2VhYmxlIGFyZWFzIGhhdmUgYmVlbiBzY2FubmVkCisKK0EgaGlnaCByYXRpbyBvZiBwYWdlc19zaGFyaW5nIHRvIHBhZ2VzX3NoYXJlZCBpbmRpY2F0ZXMgZ29vZCBzaGFyaW5nLCBidXQKK2EgaGlnaCByYXRpbyBvZiBwYWdlc191bnNoYXJlZCB0byBwYWdlc19zaGFyaW5nIGluZGljYXRlcyB3YXN0ZWQgZWZmb3J0LgorcGFnZXNfdm9sYXRpbGUgZW1icmFjZXMgc2V2ZXJhbCBkaWZmZXJlbnQga2luZHMgb2YgYWN0aXZpdHksIGJ1dCBhIGhpZ2gKK3Byb3BvcnRpb24gdGhlcmUgd291bGQgYWxzbyBpbmRpY2F0ZSBwb29yIHVzZSBvZiBtYWR2aXNlIE1BRFZfTUVSR0VBQkxFLgorCitJemlrIEVpZHVzLAorSHVnaCBEaWNraW5zLCAzMCBKdWx5IDIwMDkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vbWFwX2h1Z2V0bGIuYyBiL0RvY3VtZW50YXRpb24vdm0vbWFwX2h1Z2V0bGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJkYWUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9tYXBfaHVnZXRsYi5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2VwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIG1tYXAKKyAqIHN5c3RlbSBjYWxsIHdpdGggTUFQX0hVR0VUTEIgZmxhZy4gIEJlZm9yZSBydW5uaW5nIHRoaXMgcHJvZ3JhbSBtYWtlCisgKiBzdXJlIHRoZSBhZG1pbmlzdHJhdG9yIGhhcyBhbGxvY2F0ZWQgZW5vdWdoIGRlZmF1bHQgc2l6ZWQgaHVnZSBwYWdlcworICogdG8gY292ZXIgdGhlIDI1NiBNQiBhbGxvY2F0aW9uLgorICoKKyAqIEZvciBpYTY0IGFyY2hpdGVjdHVyZSwgTGludXgga2VybmVsIHJlc2VydmVzIFJlZ2lvbiBudW1iZXIgNCBmb3IgaHVnZXBhZ2VzLgorICogVGhhdCBtZWFucyB0aGUgYWRkcmVzc2VzIHN0YXJ0aW5nIHdpdGggMHg4MDAwMDAuLi4gd2lsbCBuZWVkIHRvIGJlCisgKiBzcGVjaWZpZWQuICBTcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQgb24gcHBjNjQsIGkzODYKKyAqIG9yIHg4Nl82NC4KKyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQorI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKQorCisjaWZuZGVmIE1BUF9IVUdFVExCCisjZGVmaW5lIE1BUF9IVUdFVExCIDB4NDAKKyNlbmRpZgorCisvKiBPbmx5IGlhNjQgcmVxdWlyZXMgdGhpcyAqLworI2lmZGVmIF9faWE2NF9fCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHg4MDAwMDAwMDAwMDAwMDAwVUwpCisjZGVmaW5lIEZMQUdTIChNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiB8IE1BUF9GSVhFRCkKKyNlbHNlCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHgwVUwpCisjZGVmaW5lIEZMQUdTIChNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQikKKyNlbmRpZgorCit2b2lkIGNoZWNrX2J5dGVzKGNoYXIgKmFkZHIpCit7CisJcHJpbnRmKCJGaXJzdCBoZXggaXMgJXhcbiIsICooKHVuc2lnbmVkIGludCAqKWFkZHIpKTsKK30KKwordm9pZCB3cml0ZV9ieXRlcyhjaGFyICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKKwkJKihhZGRyICsgaSkgPSAoY2hhcilpOworfQorCit2b2lkIHJlYWRfYnl0ZXMoY2hhciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwljaGVja19ieXRlcyhhZGRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgTEVOR1RIOyBpKyspCisJCWlmICgqKGFkZHIgKyBpKSAhPSAoY2hhcilpKSB7CisJCQlwcmludGYoIk1pc21hdGNoIGF0ICVsdVxuIiwgaSk7CisJCQlicmVhazsKKwkJfQorfQorCitpbnQgbWFpbih2b2lkKQoreworCXZvaWQgKmFkZHI7CisKKwlhZGRyID0gbW1hcChBRERSLCBMRU5HVEgsIFBST1RFQ1RJT04sIEZMQUdTLCAwLCAwKTsKKwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CisJCXBlcnJvcigibW1hcCIpOworCQlleGl0KDEpOworCX0KKworCXByaW50ZigiUmV0dXJuZWQgYWRkcmVzcyBpcyAlcFxuIiwgYWRkcik7CisJY2hlY2tfYnl0ZXMoYWRkcik7CisJd3JpdGVfYnl0ZXMoYWRkcik7CisJcmVhZF9ieXRlcyhhZGRyKTsKKworCW11bm1hcChhZGRyLCBMRU5HVEgpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCmluZGV4IDA4MzNmNDQuLjNlZGE4ZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCkBAIC0xNTgsMTIgKzE1OCwxMiBAQAogCXR5cGUgX19taW4yID0gKHkpOwkJCVwKIAlfX21pbjEgPCBfX21pbjIgPyBfX21pbjEgOiBfX21pbjI7IH0pCiAKLXVuc2lnbmVkIGxvbmcgcGFnZXMybWIodW5zaWduZWQgbG9uZyBwYWdlcykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzMm1iKHVuc2lnbmVkIGxvbmcgcGFnZXMpCiB7CiAJcmV0dXJuIChwYWdlcyAqIHBhZ2Vfc2l6ZSkgPj4gMjA7CiB9CiAKLXZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQorc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQogewogCXZhX2xpc3QgYXA7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQAogICogcGFnZSBmbGFnIG5hbWVzCiAgKi8KIAotY2hhciAqcGFnZV9mbGFnX25hbWUodWludDY0X3QgZmxhZ3MpCitzdGF0aWMgY2hhciAqcGFnZV9mbGFnX25hbWUodWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIGNoYXIgYnVmWzY1XTsKIAlpbnQgcHJlc2VudDsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXJldHVybiBidWY7CiB9CiAKLWNoYXIgKnBhZ2VfZmxhZ19sb25nbmFtZSh1aW50NjRfdCBmbGFncykKK3N0YXRpYyBjaGFyICpwYWdlX2ZsYWdfbG9uZ25hbWUodWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIGNoYXIgYnVmWzEwMjRdOwogCWludCBpLCBuOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAgKiBwYWdlIGxpc3QgYW5kIHN1bW1hcnkKICAqLwogCi12b2lkIHNob3dfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCitzdGF0aWMgdm9pZCBzaG93X3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQogewogCXN0YXRpYyB1aW50NjRfdCAgICAgIGZsYWdzMDsKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmRleDsKQEAgLTI0MSwxMiArMjQxLDEyIEBACiAJY291bnQgID0gMTsKIH0KIAotdm9pZCBzaG93X3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKIHsKIAlwcmludGYoIiVsdVx0JXNcbiIsIG9mZnNldCwgcGFnZV9mbGFnX25hbWUoZmxhZ3MpKTsKIH0KIAotdm9pZCBzaG93X3N1bW1hcnkodm9pZCkKK3N0YXRpYyB2b2lkIHNob3dfc3VtbWFyeSh2b2lkKQogewogCWludCBpOwogCkBAIC0yNzIsNyArMjcyLDcgQEAKICAqIHBhZ2UgZmxhZyBmaWx0ZXJzCiAgKi8KIAotaW50IGJpdF9tYXNrX29rKHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIGludCBiaXRfbWFza19vayh1aW50NjRfdCBmbGFncykKIHsKIAlpbnQgaTsKIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXVpbnQ2NF90IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHVpbnQ2NF90IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQogewogCS8qIFNMT0IvU0xVQiBvdmVybG9hZCBzZXZlcmFsIHBhZ2UgZmxhZ3MgKi8KIAlpZiAoZmxhZ3MgJiBCSVQoU0xBQikpIHsKQEAgLTMwOCw3ICszMDgsNyBAQAogCXJldHVybiBmbGFnczsKIH0KIAotdWludDY0X3Qgd2VsbF9rbm93bl9mbGFncyh1aW50NjRfdCBmbGFncykKK3N0YXRpYyB1aW50NjRfdCB3ZWxsX2tub3duX2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQogewogCS8qIGhpZGUgZmxhZ3MgaW50ZW5kZWQgb25seSBmb3Iga2VybmVsIGhhY2tlciAqLwogCWZsYWdzICY9IH5LUEZfSEFDS0VSU19CSVRTOwpAQCAtMzI1LDcgKzMyNSw3IEBACiAgKiBwYWdlIGZyYW1lIHdhbGtlcgogICovCiAKLWludCBoYXNoX3Nsb3QodWludDY0X3QgZmxhZ3MpCitzdGF0aWMgaW50IGhhc2hfc2xvdCh1aW50NjRfdCBmbGFncykKIHsKIAlpbnQgayA9IEhBU0hfS0VZKGZsYWdzKTsKIAlpbnQgaTsKQEAgLTM1Miw3ICszNTIsNyBAQAogCWV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAotdm9pZCBhZGRfcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCitzdGF0aWMgdm9pZCBhZGRfcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJZmxhZ3MgPSBleHBhbmRfb3ZlcmxvYWRlZF9mbGFncyhmbGFncyk7CiAKQEAgLTM3MSw3ICszNzEsNyBAQAogCXRvdGFsX3BhZ2VzKys7CiB9CiAKLXZvaWQgd2Fsa19wZm4odW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyB2b2lkIHdhbGtfcGZuKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXRjaDsKIAl1bnNpZ25lZCBsb25nIG47CkBAIC00MDQsNyArNDA0LDcgQEAKIAl9CiB9CiAKLXZvaWQgd2Fsa19hZGRyX3Jhbmdlcyh2b2lkKQorc3RhdGljIHZvaWQgd2Fsa19hZGRyX3Jhbmdlcyh2b2lkKQogewogCWludCBpOwogCkBAIC00MjgsNyArNDI4LDcgQEAKICAqIHVzZXIgaW50ZXJmYWNlCiAgKi8KIAotY29uc3QgY2hhciAqcGFnZV9mbGFnX3R5cGUodWludDY0X3QgZmxhZykKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlX2ZsYWdfdHlwZSh1aW50NjRfdCBmbGFnKQogewogCWlmIChmbGFnICYgS1BGX0hBQ0tFUlNfQklUUykKIAkJcmV0dXJuICIocikiOwpAQCAtNDM3LDcgKzQzNyw3IEBACiAJcmV0dXJuICIgICAiOwogfQogCi12b2lkIHVzYWdlKHZvaWQpCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCWludCBpLCBqOwogCkBAIC00ODIsNyArNDgyLDcgQEAKIAkJIihyKSByYXcgbW9kZSBiaXRzICAobykgb3ZlcmxvYWRlZCBiaXRzXG4iKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIHBhcnNlX251bWJlcihjb25zdCBjaGFyICpzdHIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHBhcnNlX251bWJlcihjb25zdCBjaGFyICpzdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG47CiAKQEAgLTQ5NCwxNiArNDk0LDE2IEBACiAJcmV0dXJuIG47CiB9CiAKLXZvaWQgcGFyc2VfcGlkKGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIHBhcnNlX3BpZChjb25zdCBjaGFyICpzdHIpCiB7CiAJb3B0X3BpZCA9IHBhcnNlX251bWJlcihzdHIpOwogfQogCi12b2lkIHBhcnNlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIHBhcnNlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSkKIHsKIH0KIAotdm9pZCBhZGRfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIHZvaWQgYWRkX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAobnJfYWRkcl9yYW5nZXMgPj0gTUFYX0FERFJfUkFOR0VTKQogCQlmYXRhbCgidG9vIG11Y2ggYWRkciByYW5nZXNcbiIpOwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJbnJfYWRkcl9yYW5nZXMrKzsKIH0KIAotdm9pZCBwYXJzZV9hZGRyX3JhbmdlKGNvbnN0IGNoYXIgKm9wdGFyZykKK3N0YXRpYyB2b2lkIHBhcnNlX2FkZHJfcmFuZ2UoY29uc3QgY2hhciAqb3B0YXJnKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCWFkZF9hZGRyX3JhbmdlKG9mZnNldCwgc2l6ZSk7CiB9CiAKLXZvaWQgYWRkX2JpdHNfZmlsdGVyKHVpbnQ2NF90IG1hc2ssIHVpbnQ2NF90IGJpdHMpCitzdGF0aWMgdm9pZCBhZGRfYml0c19maWx0ZXIodWludDY0X3QgbWFzaywgdWludDY0X3QgYml0cykKIHsKIAlpZiAobnJfYml0X2ZpbHRlcnMgPj0gTUFYX0JJVF9GSUxURVJTKQogCQlmYXRhbCgidG9vIG11Y2ggYml0IGZpbHRlcnNcbiIpOwpAQCAtNTU3LDcgKzU1Nyw3IEBACiAJbnJfYml0X2ZpbHRlcnMrKzsKIH0KIAotdWludDY0X3QgcGFyc2VfZmxhZ19uYW1lKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbikKK3N0YXRpYyB1aW50NjRfdCBwYXJzZV9mbGFnX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQogewogCWludCBpOwogCkBAIC01NzcsNyArNTc3LDcgQEAKIAlyZXR1cm4gcGFyc2VfbnVtYmVyKHN0cik7CiB9CiAKLXVpbnQ2NF90IHBhcnNlX2ZsYWdfbmFtZXMoY29uc3QgY2hhciAqc3RyLCBpbnQgYWxsKQorc3RhdGljIHVpbnQ2NF90IHBhcnNlX2ZsYWdfbmFtZXMoY29uc3QgY2hhciAqc3RyLCBpbnQgYWxsKQogewogCWNvbnN0IGNoYXIgKnAgICAgPSBzdHI7CiAJdWludDY0X3QgICBmbGFncyA9IDA7CkBAIC01OTYsNyArNTk2LDcgQEAKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKLXZvaWQgcGFyc2VfYml0c19tYXNrKGNvbnN0IGNoYXIgKm9wdGFyZykKK3N0YXRpYyB2b2lkIHBhcnNlX2JpdHNfbWFzayhjb25zdCBjaGFyICpvcHRhcmcpCiB7CiAJdWludDY0X3QgbWFzazsKIAl1aW50NjRfdCBiaXRzOwpAQCAtNjIxLDcgKzYyMSw3IEBACiB9CiAKIAotc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CitzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CiAJeyAicmF3IiAgICAgICAsIDAsIE5VTEwsICdyJyB9LAogCXsgInBpZCIgICAgICAgLCAxLCBOVUxMLCAncCcgfSwKIAl7ICJmaWxlIiAgICAgICwgMSwgTlVMTCwgJ2YnIH0sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3NsYWJpbmZvLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3NsYWJpbmZvLmMKaW5kZXggZGYzMjI3Ni4uOTJlNzI5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9zbGFiaW5mby5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vc2xhYmluZm8uYwpAQCAtODcsNyArODcsNyBAQAogCiByZWdleF90IHBhdHRlcm47CiAKLXZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQorc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQogewogCXZhX2xpc3QgYXA7CiAKQEAgLTk3LDcgKzk3LDcgQEAKIAlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKLXZvaWQgdXNhZ2Uodm9pZCkKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7CiAJcHJpbnRmKCJzbGFiaW5mbyA1LzcvMjAwNy4gKGMpIDIwMDcgc2dpLlxuXG4iCiAJCSJzbGFiaW5mbyBbLWFobnB2dHN6XSBbLWQgZGVidWdvcHRzXSBbc2xhYi1yZWdleHBdXG4iCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkpOwogfQogCi11bnNpZ25lZCBsb25nIHJlYWRfb2JqKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX29iaihjb25zdCBjaGFyICpuYW1lKQogewogCUZJTEUgKmYgPSBmb3BlbihuYW1lLCAiciIpOwogCkBAIC0xNTEsNyArMTUxLDcgQEAKIC8qCiAgKiBHZXQgdGhlIGNvbnRlbnRzIG9mIGFuIGF0dHJpYnV0ZQogICovCi11bnNpZ25lZCBsb25nIGdldF9vYmooY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9vYmooY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpZiAoIXJlYWRfb2JqKG5hbWUpKQogCQlyZXR1cm4gMDsKQEAgLTE1OSw3ICsxNTksNyBAQAogCXJldHVybiBhdG9sKGJ1ZmZlcik7CiB9CiAKLXVuc2lnbmVkIGxvbmcgZ2V0X29ial9hbmRfc3RyKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKip4KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X29ial9hbmRfc3RyKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKip4KQogewogCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKIAljaGFyICpwOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBzZXRfb2JqKHN0cnVjdCBzbGFiaW5mbyAqcywgY29uc3QgY2hhciAqbmFtZSwgaW50IG4pCitzdGF0aWMgdm9pZCBzZXRfb2JqKHN0cnVjdCBzbGFiaW5mbyAqcywgY29uc3QgY2hhciAqbmFtZSwgaW50IG4pCiB7CiAJY2hhciB4WzEwMF07CiAJRklMRSAqZjsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWZjbG9zZShmKTsKIH0KIAotdW5zaWduZWQgbG9uZyByZWFkX3NsYWJfb2JqKHN0cnVjdCBzbGFiaW5mbyAqcywgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfc2xhYl9vYmooc3RydWN0IHNsYWJpbmZvICpzLCBjb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgeFsxMDBdOwogCUZJTEUgKmY7CkBAIC0yMTUsNyArMjE1LDcgQEAKIC8qCiAgKiBQdXQgYSBzaXplIHN0cmluZyB0b2dldGhlcgogICovCi1pbnQgc3RvcmVfc2l6ZShjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCitzdGF0aWMgaW50IHN0b3JlX3NpemUoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXVuc2lnbmVkIGxvbmcgZGl2aXNvciA9IDE7CiAJY2hhciB0cmFpbGVyID0gMDsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIGRlY29kZV9udW1hX2xpc3QoaW50ICpudW1hLCBjaGFyICp0KQorc3RhdGljIHZvaWQgZGVjb2RlX251bWFfbGlzdChpbnQgKm51bWEsIGNoYXIgKnQpCiB7CiAJaW50IG5vZGU7CiAJaW50IG5yOwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJfQogfQogCi12b2lkIHNsYWJfdmFsaWRhdGUoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2xhYl92YWxpZGF0ZShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJaWYgKHN0cmNtcChzLT5uYW1lLCAiKiIpID09IDApCiAJCXJldHVybjsKQEAgLTI4MCw3ICsyODAsNyBAQAogCXNldF9vYmoocywgInZhbGlkYXRlIiwgMSk7CiB9CiAKLXZvaWQgc2xhYl9zaHJpbmsoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2xhYl9zaHJpbmsoc3RydWN0IHNsYWJpbmZvICpzKQogewogCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQogCQlyZXR1cm47CkBAIC0yOTAsNyArMjkwLDcgQEAKIAogaW50IGxpbmUgPSAwOwogCi12b2lkIGZpcnN0X2xpbmUodm9pZCkKK3N0YXRpYyB2b2lkIGZpcnN0X2xpbmUodm9pZCkKIHsKIAlpZiAoc2hvd19hY3Rpdml0eSkKIAkJcHJpbnRmKCJOYW1lICAgICAgICAgICAgICAgICAgIE9iamVjdHMgICAgICBBbGxvYyAgICAgICBGcmVlICAgJSVGYXN0IEZhbGxiIE9cbiIpOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAvKgogICogRmluZCB0aGUgc2hvcnRlc3QgYWxpYXMgb2YgYSBzbGFiCiAgKi8KLXN0cnVjdCBhbGlhc2luZm8gKmZpbmRfb25lX2FsaWFzKHN0cnVjdCBzbGFiaW5mbyAqZmluZCkKK3N0YXRpYyBzdHJ1Y3QgYWxpYXNpbmZvICpmaW5kX29uZV9hbGlhcyhzdHJ1Y3Qgc2xhYmluZm8gKmZpbmQpCiB7CiAJc3RydWN0IGFsaWFzaW5mbyAqYTsKIAlzdHJ1Y3QgYWxpYXNpbmZvICpiZXN0ID0gTlVMTDsKQEAgLTMxOCwxOCArMzE4LDE4IEBACiAJcmV0dXJuIGJlc3Q7CiB9CiAKLXVuc2lnbmVkIGxvbmcgc2xhYl9zaXplKHN0cnVjdCBzbGFiaW5mbyAqcykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNsYWJfc2l6ZShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJcmV0dXJuIAlzLT5zbGFicyAqIChwYWdlX3NpemUgPDwgcy0+b3JkZXIpOwogfQogCi11bnNpZ25lZCBsb25nIHNsYWJfYWN0aXZpdHkoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2xhYl9hY3Rpdml0eShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJcmV0dXJuIAlzLT5hbGxvY19mYXN0cGF0aCArIHMtPmZyZWVfZmFzdHBhdGggKwogCQlzLT5hbGxvY19zbG93cGF0aCArIHMtPmZyZWVfc2xvd3BhdGg7CiB9CiAKLXZvaWQgc2xhYl9udW1hKHN0cnVjdCBzbGFiaW5mbyAqcywgaW50IG1vZGUpCitzdGF0aWMgdm9pZCBzbGFiX251bWEoc3RydWN0IHNsYWJpbmZvICpzLCBpbnQgbW9kZSkKIHsKIAlpbnQgbm9kZTsKIApAQCAtMzc0LDcgKzM3NCw3IEBACiAJbGluZSsrOwogfQogCi12b2lkIHNob3dfdHJhY2tpbmcoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2hvd190cmFja2luZyhzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJcHJpbnRmKCJcbiVzOiBLZXJuZWwgb2JqZWN0IGFsbG9jYXRpb25cbiIsIHMtPm5hbWUpOwogCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIH0KIAotdm9pZCBvcHMoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgb3BzKHN0cnVjdCBzbGFiaW5mbyAqcykKIHsKIAlpZiAoc3RyY21wKHMtPm5hbWUsICIqIikgPT0gMCkKIAkJcmV0dXJuOwpAQCAtNDA1LDE0ICs0MDUsMTQgQEAKIAkJcHJpbnRmKCJcbiVzIGhhcyBubyBrbWVtX2NhY2hlIG9wZXJhdGlvbnNcbiIsIHMtPm5hbWUpOwogfQogCi1jb25zdCBjaGFyICpvbm9mZihpbnQgeCkKK3N0YXRpYyBjb25zdCBjaGFyICpvbm9mZihpbnQgeCkKIHsKIAlpZiAoeCkKIAkJcmV0dXJuICJPbiAiOwogCXJldHVybiAiT2ZmIjsKIH0KIAotdm9pZCBzbGFiX3N0YXRzKHN0cnVjdCBzbGFiaW5mbyAqcykKK3N0YXRpYyB2b2lkIHNsYWJfc3RhdHMoc3RydWN0IHNsYWJpbmZvICpzKQogewogCXVuc2lnbmVkIGxvbmcgdG90YWxfYWxsb2M7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9mcmVlOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJCQlzLT5kZWFjdGl2YXRlX3RvX3RhaWwsIChzLT5kZWFjdGl2YXRlX3RvX3RhaWwgKiAxMDApIC8gdG90YWwpOwogfQogCi12b2lkIHJlcG9ydChzdHJ1Y3Qgc2xhYmluZm8gKnMpCitzdGF0aWMgdm9pZCByZXBvcnQoc3RydWN0IHNsYWJpbmZvICpzKQogewogCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQogCQlyZXR1cm47CkBAIC01MTgsNyArNTE4LDcgQEAKIAlzbGFiX3N0YXRzKHMpOwogfQogCi12b2lkIHNsYWJjYWNoZShzdHJ1Y3Qgc2xhYmluZm8gKnMpCitzdGF0aWMgdm9pZCBzbGFiY2FjaGUoc3RydWN0IHNsYWJpbmZvICpzKQogewogCWNoYXIgc2l6ZV9zdHJbMjBdOwogCWNoYXIgZGlzdF9zdHJbNDBdOwpAQCAtNTkzLDcgKzU5Myw3IEBACiAvKgogICogQW5hbHl6ZSBkZWJ1ZyBvcHRpb25zLiBSZXR1cm4gZmFsc2UgaWYgc29tZXRoaW5nIGlzIGFtaXNzLgogICovCi1pbnQgZGVidWdfb3B0X3NjYW4oY2hhciAqb3B0KQorc3RhdGljIGludCBkZWJ1Z19vcHRfc2NhbihjaGFyICpvcHQpCiB7CiAJaWYgKCFvcHQgfHwgIW9wdFswXSB8fCBzdHJjbXAob3B0LCAiLSIpID09IDApCiAJCXJldHVybiAxOwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBzbGFiX2VtcHR5KHN0cnVjdCBzbGFiaW5mbyAqcykKK3N0YXRpYyBpbnQgc2xhYl9lbXB0eShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJaWYgKHMtPm9iamVjdHMgPiAwKQogCQlyZXR1cm4gMDsKQEAgLTY1Nyw3ICs2NTcsNyBAQAogCXJldHVybiAxOwogfQogCi12b2lkIHNsYWJfZGVidWcoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2xhYl9kZWJ1ZyhzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJaWYgKHN0cmNtcChzLT5uYW1lLCAiKiIpID09IDApCiAJCXJldHVybjsKQEAgLTcxNyw3ICs3MTcsNyBAQAogCQlzZXRfb2JqKHMsICJ0cmFjZSIsIDEpOwogfQogCi12b2lkIHRvdGFscyh2b2lkKQorc3RhdGljIHZvaWQgdG90YWxzKHZvaWQpCiB7CiAJc3RydWN0IHNsYWJpbmZvICpzOwogCkBAIC05NzYsNyArOTc2LDcgQEAKIAkJCWIxLAliMiwJYjMpOwogfQogCi12b2lkIHNvcnRfc2xhYnModm9pZCkKK3N0YXRpYyB2b2lkIHNvcnRfc2xhYnModm9pZCkKIHsKIAlzdHJ1Y3Qgc2xhYmluZm8gKnMxLCpzMjsKIApAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAl9CiB9CiAKLXZvaWQgc29ydF9hbGlhc2VzKHZvaWQpCitzdGF0aWMgdm9pZCBzb3J0X2FsaWFzZXModm9pZCkKIHsKIAlzdHJ1Y3QgYWxpYXNpbmZvICphMSwqYTI7CiAKQEAgLTEwMzAsNyArMTAzMCw3IEBACiAJfQogfQogCi12b2lkIGxpbmtfc2xhYnModm9pZCkKK3N0YXRpYyB2b2lkIGxpbmtfc2xhYnModm9pZCkKIHsKIAlzdHJ1Y3QgYWxpYXNpbmZvICphOwogCXN0cnVjdCBzbGFiaW5mbyAqczsKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJfQogfQogCi12b2lkIGFsaWFzKHZvaWQpCitzdGF0aWMgdm9pZCBhbGlhcyh2b2lkKQogewogCXN0cnVjdCBhbGlhc2luZm8gKmE7CiAJY2hhciAqYWN0aXZlID0gTlVMTDsKQEAgLTEwNzksNyArMTA3OSw3IEBACiB9CiAKIAotdm9pZCByZW5hbWVfc2xhYnModm9pZCkKK3N0YXRpYyB2b2lkIHJlbmFtZV9zbGFicyh2b2lkKQogewogCXN0cnVjdCBzbGFiaW5mbyAqczsKIAlzdHJ1Y3QgYWxpYXNpbmZvICphOwpAQCAtMTEwMiwxMiArMTEwMiwxMiBAQAogCX0KIH0KIAotaW50IHNsYWJfbWlzbWF0Y2goY2hhciAqc2xhYikKK3N0YXRpYyBpbnQgc2xhYl9taXNtYXRjaChjaGFyICpzbGFiKQogewogCXJldHVybiByZWdleGVjKCZwYXR0ZXJuLCBzbGFiLCAwLCBOVUxMLCAwKTsKIH0KIAotdm9pZCByZWFkX3NsYWJfZGlyKHZvaWQpCitzdGF0aWMgdm9pZCByZWFkX3NsYWJfZGlyKHZvaWQpCiB7CiAJRElSICpkaXI7CiAJc3RydWN0IGRpcmVudCAqZGU7CkBAIC0xMjA5LDcgKzEyMDksNyBAQAogCQlmYXRhbCgiVG9vIG1hbnkgYWxpYXNlc1xuIik7CiB9CiAKLXZvaWQgb3V0cHV0X3NsYWJzKHZvaWQpCitzdGF0aWMgdm9pZCBvdXRwdXRfc2xhYnModm9pZCkKIHsKIAlzdHJ1Y3Qgc2xhYmluZm8gKnNsYWI7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXRlc3QuYyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXRlc3QuYwppbmRleCA2NWY2YzE5Li5hNzUwNTMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3NyYy93YXRjaGRvZy10ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9zcmMvd2F0Y2hkb2ctdGVzdC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiB0aGUgUEMgV2F0Y2hkb2cgY2FyZCB0byByZXNldCBpdHMgaW50ZXJuYWwgdGltZXIgc28gaXQgZG9lc24ndCB0cmlnZ2VyCiAgKiBhIGNvbXB1dGVyIHJlc2V0LgogICovCi12b2lkIGtlZXBfYWxpdmUodm9pZCkKK3N0YXRpYyB2b2lkIGtlZXBfYWxpdmUodm9pZCkKIHsKICAgICBpbnQgZHVtbXk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dCBiL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dAppbmRleCA2MDdiMWEwLi5mMTk4MDJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni9lYXJseXByaW50ay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0CkBAIC03LDcgKzcsNyBAQAogCiAgIFtob3N0L3RhcmdldF0gPC0tLS0tLS0+IFtVU0IgZGVidWcga2V5XSA8LS0tLS0tLT4gW2NsaWVudC9jb25zb2xlXQogCi0xLiBUaGVyZSBhcmUgdGhyZWUgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzOgorMS4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50czoKIAogIGEuKSBIb3N0L3RhcmdldCBzeXN0ZW0gbmVlZHMgdG8gaGF2ZSBVU0IgZGVidWcgcG9ydCBjYXBhYmlsaXR5LgogCkBAIC00Miw3ICs0MiwzNSBAQAogICAgICBUaGlzIGlzIGEgc21hbGwgYmx1ZSBwbGFzdGljIGNvbm5lY3RvciB3aXRoIHR3byBVU0IgY29ubmVjdGlvbnMsCiAgICAgIGl0IGRyYXdzIHBvd2VyIGZyb20gaXRzIFVTQiBjb25uZWN0aW9ucy4KIAotIGMuKSBUaGlyZGx5LCB5b3UgbmVlZCBhIHNlY29uZCBjbGllbnQvY29uc29sZSBzeXN0ZW0gd2l0aCBhIHJlZ3VsYXIgVVNCIHBvcnQuCisgYy4pIFlvdSBuZWVkIGEgc2Vjb25kIGNsaWVudC9jb25zb2xlIHN5c3RlbSB3aXRoIGEgaGlnaCBzcGVlZCBVU0IgMi4wCisgICAgIHBvcnQuCisKKyBkLikgVGhlIE5ldGNoaXAgZGV2aWNlIG11c3QgYmUgcGx1Z2dlZCBkaXJlY3RseSBpbnRvIHRoZSBwaHlzaWNhbAorICAgICBkZWJ1ZyBwb3J0IG9uIHRoZSAiaG9zdC90YXJnZXQiIHN5c3RlbS4gIFlvdSBjYW5ub3QgdXNlIGEgVVNCIGh1YiBpbgorICAgICBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBkZWJ1ZyBwb3J0IGFuZCB0aGUgImhvc3QvdGFyZ2V0IiBzeXN0ZW0uCisKKyAgICAgVGhlIEVIQ0kgZGVidWcgY29udHJvbGxlciBpcyBib3VuZCB0byBhIHNwZWNpZmljIHBoeXNpY2FsIFVTQgorICAgICBwb3J0IGFuZCB0aGUgTmV0Y2hpcCBkZXZpY2Ugd2lsbCBvbmx5IHdvcmsgYXMgYW4gZWFybHkgcHJpbnRrCisgICAgIGRldmljZSBpbiB0aGlzIHBvcnQuICBUaGUgRUhDSSBob3N0IGNvbnRyb2xsZXJzIGFyZSBlbGVjdHJpY2FsbHkKKyAgICAgd2lyZWQgc3VjaCB0aGF0IHRoZSBFSENJIGRlYnVnIGNvbnRyb2xsZXIgaXMgaG9va2VkIHVwIHRvIHRoZQorICAgICBmaXJzdCBwaHlzaWNhbCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5nZSB0aGlzIHZpYSBzb2Z0d2FyZS4KKyAgICAgWW91IGNhbiBmaW5kIHRoZSBwaHlzaWNhbCBwb3J0IHRocm91Z2ggZXhwZXJpbWVudGF0aW9uIGJ5IHRyeWluZworICAgICBlYWNoIHBoeXNpY2FsIHBvcnQgb24gdGhlIHN5c3RlbSBhbmQgcmVib290aW5nLiAgT3IgeW91IGNhbiB0cnkKKyAgICAgYW5kIHVzZSBsc3VzYiBvciBsb29rIGF0IHRoZSBrZXJuZWwgaW5mbyBtZXNzYWdlcyBlbWl0dGVkIGJ5IHRoZQorICAgICB1c2Igc3RhY2sgd2hlbiB5b3UgcGx1ZyBhIHVzYiBkZXZpY2UgaW50byB2YXJpb3VzIHBvcnRzIG9uIHRoZQorICAgICAiaG9zdC90YXJnZXQiIHN5c3RlbS4KKworICAgICBTb21lIGhhcmR3YXJlIHZlbmRvcnMgZG8gbm90IGV4cG9zZSB0aGUgdXNiIGRlYnVnIHBvcnQgd2l0aCBhCisgICAgIHBoeXNpY2FsIGNvbm5lY3RvciBhbmQgaWYgeW91IGZpbmQgc3VjaCBhIGRldmljZSBzZW5kIGEgY29tcGxhaW50CisgICAgIHRvIHRoZSBoYXJkd2FyZSB2ZW5kb3IsIGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIG5vdCB0byB3aXJlCisgICAgIHRoaXMgcG9ydCBpbnRvIG9uZSBvZiB0aGUgcGh5c2ljYWxseSBhY2Nlc3NpYmxlIHBvcnRzLgorCisgZS4pIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUsIHRoYXQgbWFueSB2ZXJzaW9ucyBvZiB0aGUgTmV0Y2hpcAorICAgICBkZXZpY2UgcmVxdWlyZSB0aGUgImNsaWVudC9jb25zb2xlIiBzeXN0ZW0gdG8gYmUgcGx1Z2dlZCBpbnRvIHRoZQorICAgICByaWdodCBhbmQgc2lkZSBvZiB0aGUgZGV2aWNlICh3aXRoIHRoZSBwcm9kdWN0IGxvZ28gZmFjaW5nIHVwIGFuZAorICAgICByZWFkYWJsZSBsZWZ0IHRvIHJpZ2h0KS4gIFRoZSByZWFzb24gYmVpbmcgaXMgdGhhdCB0aGUgNSB2b2x0CisgICAgIHBvd2VyIHN1cHBseSBpcyB0YWtlbiBmcm9tIG9ubHkgb25lIHNpZGUgb2YgdGhlIGRldmljZSBhbmQgaXQKKyAgICAgbXVzdCBiZSB0aGUgc2lkZSB0aGF0IGRvZXMgbm90IGdldCByZWJvb3RlZC4KIAogMi4gU29mdHdhcmUgcmVxdWlyZW1lbnRzOgogCkBAIC01Niw2ICs4NCwxMyBAQAogICAgIChJZiB5b3UgYXJlIHVzaW5nIEdydWIsIGFwcGVuZCBpdCB0byB0aGUgJ2tlcm5lbCcgbGluZSBpbgogICAgICAvZXRjL2dydWIuY29uZikKIAorICAgIE9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIEVIQ0kgZGVidWcgY29udHJvbGxlciB5b3UgbXVzdAorICAgIHNwZWNpZnkgdGhlIGNvcnJlY3QgRUhDSSBkZWJ1ZyBjb250cm9sbGVyIG51bWJlci4gIFRoZSBvcmRlcmluZworICAgIGNvbWVzIGZyb20gdGhlIFBDSSBidXMgZW51bWVyYXRpb24gb2YgdGhlIEVIQ0kgY29udHJvbGxlcnMuICBUaGUKKyAgICBkZWZhdWx0IHdpdGggbm8gbnVtYmVyIGFyZ3VtZW50IGlzICIwIiB0aGUgZmlyc3QgRUhDSSBkZWJ1ZworICAgIGNvbnRyb2xsZXIuICBUbyB1c2UgdGhlIHNlY29uZCBFSENJIGRlYnVnIGNvbnRyb2xsZXIsIHlvdSB3b3VsZAorICAgIHVzZSB0aGUgY29tbWFuZCBsaW5lOiAiZWFybHlwcmludGs9ZGJncDEiCisKICAgICBOT1RFOiBub3JtYWxseSBlYXJseXByaW50ayBjb25zb2xlIGdldHMgdHVybmVkIG9mZiBvbmNlIHRoZQogICAgIHJlZ3VsYXIgY29uc29sZSBpcyBhbGl2ZSAtIHVzZSAiZWFybHlwcmludGs9ZGJncCxrZWVwIiB0byBrZWVwCiAgICAgdGhpcyBjaGFubmVsIG9wZW4gYmV5b25kIGVhcmx5IGJvb3R1cC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvcgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA0Mzc2MWEwLi43YzFjMGIwIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjMzLDYgKzIzMyw3IEBACiBGOglkcml2ZXJzL2FjcGkvCiBGOglkcml2ZXJzL3BucC9wbnBhY3BpLwogRjoJaW5jbHVkZS9saW51eC9hY3BpLmgKK0Y6CWluY2x1ZGUvYWNwaS8KIAogQUNQSSBCQVRURVJZIERSSVZFUlMKIE06CUFsZXhleSBTdGFyaWtvdnNraXkgPGFzdGFyaWtvdnNraXlAc3VzZS5kZT4KQEAgLTQ5Nyw3ICs0OTgsNyBAQAogCiBBUk0gUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtLwpAQCAtNTA4LDM2ICs1MDksMzYgQEAKIAogQVJNL0FESSBST0FEUlVOTkVSIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWl4cDIzeHgvCiBGOglhcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoLwogCiBBUk0vQURTIFNQSEVSRSBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vQUZFQjkyNjAgTUFDSElORSBTVVBQT1JUCiBNOglTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9BSkVDTyAxQVJNIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9BVE1FTCBBVDkxUk05MjAwIEFSTSBBUkNISVRFQ1RVUkUKIE06CUFuZHJldyBWaWN0b3IgPGxpbnV4QG1heGltLm9yZy56YT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vbWF4aW0ub3JnLnphL2F0OTFfMjYuaHRtbAogUzoJTWFpbnRhaW5lZAogCiBBUk0vQkNNUklORyBBUk0gQVJDSElURUNUVVJFCiBNOglMZW8gQ2hlbiA8bGVvY2hlbkBicm9hZGNvbS5jb20+CiBNOglTY290dCBCcmFuZGVuIDxzYnJhbmRlbkBicm9hZGNvbS5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1iY21yaW5nCiAKQEAgLTU1NCwyNSArNTU1LDI1IEBACiBBUk0vQ0lSUlVTIExPR0lDIEVQOTNYWCBBUk0gQVJDSElURUNUVVJFCiBNOglIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20+CiBNOglSeWFuIE1hbGxvbiA8cnlhbkBibHVld2F0ZXJzeXMuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtZXA5M3h4LwogRjoJYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoLwogCiBBUk0vQ0lSUlVTIExPR0lDIEVEQjkzMTVBIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9DTEtERVYgU1VQUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEY6CWFyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwogRjoJYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmgKIAogQVJNL0NPTVBVTEFCIENNLVgyNzAvRU0tWDI3MCBhbmQgQ00tWDMwMCBNQUNISU5FIFNVUFBPUlQKIE06CU1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vQ09SR0kgTUFDSElORSBTVVBQT1JUCkBAIC01ODEsMTQgKzU4MiwxNCBAQAogCiBBUk0vQ09SVElOQSBTWVNURU1TIEdFTUlOSSBBUk0gQVJDSElURUNUVVJFCiBNOglQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBUOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1nZW1pbmkvbWFpbmxpbmUuZ2l0CiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWdlbWluaS8KIAogQVJNL0VCU0ExMTAgTUFDSElORSBTVVBQT1JUCiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrLwogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1lYnNhMTEwLwpAQCAtNjA2LDEzICs2MDcsMTMgQEAKIAogQVJNL0ZBUkFEQVkgRkE1MjYgUE9SVAogTToJUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbW0vKi1mYSoKIAogQVJNL0ZPT1RCUklER0UgQVJDSElURUNUVVJFCiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrLwogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvZGVjMjEyODUuaApAQCAtNjIwLDE3ICs2MjEsMTcgQEAKIAogQVJNL0ZSRUVTQ0FMRSBJTVggLyBNWEMgQVJNIEFSQ0hJVEVDVFVSRQogTToJU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vR0xPTUFUSU9OIEdFU0JDOTMxMlNYIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9HVU1TVElYIE1BQ0hJTkUgU1VQUE9SVAogTToJU3RldmUgU2Frb21hbiA8c2Frb21hbkBnbWFpbC5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vSDQ3MDAgKEhQIElQQVEgSFg0NzAwKSBNQUNISU5FIFNVUFBPUlQKQEAgLTY1MCw1NSArNjUxLDYyIEBACiBBUk0vSU5URUwgSU9QMzJYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglTdXBwb3J0ZWQKIAogQVJNL0lOVEVMIElPUDMzWCBBUk0gQVJDSElURUNUVVJFCiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglTdXBwb3J0ZWQKIAogQVJNL0lOVEVMIElPUDEzWFggQVJNIEFSQ0hJVEVDVFVSRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogCiBBUk0vSU5URUwgSVE4MTM0MkVYIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogCiBBUk0vSU5URUwgSVhQMjAwMCBBUk0gQVJDSElURUNUVVJFCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElYRFAyODUwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJWFAyM1hYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCitBUk0vSU5URUwgSVhQNFhYIEFSTSBBUkNISVRFQ1RVUkUKK006CUltcmUgS2Fsb3ogPGthbG96QG9wZW53cnQub3JnPgorTToJS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZworUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1peHA0eHgvCisKIEFSTS9JTlRFTCBYU0MzIChNQU5aQU5PKSBBUk0gQ09SRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogCiBBUk0vSVAgRkFCUklDUyBET1VCTEUgRVNQUkVTU08gTUFDSElORSBTVVBQT1JUCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogQVJNL0xPR0lDUEQgUFhBMjcwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9NQUdJQ0lBTiBNQUNISU5FIFNVUFBPUlQKQEAgLTcwOCw3ICs3MTYsNyBAQAogQVJNL01hcnZlbGwgTG9raS9LaXJrd29vZC9NVjc4eHgwL09yaW9uIFNPQyBzdXBwb3J0CiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4KIE06CU5pY29sYXMgUGl0cmUgPG5pY29AbWFydmVsbC5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVDoJZ2l0IGdpdDovL2dpdC5tYXJ2ZWxsLmNvbS9vcmlvbgogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1sb2tpLwpAQCAtNzE5LDcgKzcyNyw3IEBACiAKIEFSTS9NSU9BNzAxIE1BQ0hJTkUgU1VQUE9SVAogTToJUm9iZXJ0IEphcnptaWsgPHJvYmVydC5qYXJ6bWlrQGZyZWUuZnI+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogRjoJYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCiBTOglNYWludGFpbmVkCiAKQEAgLTc2MCwxOCArNzY4LDE4IEBACiAKIEFSTS9QVCBESUdJVEFMIEJPQVJEIFBPUlQKIE06CVN0ZWZhbiBFbGV0emhvZmVyIDxzdGVmYW4uZWxldHpob2ZlckBlbGV0enRyaWNrLmRlPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay8KIFM6CU1haW50YWluZWQKIAogQVJNL1JBRElTWVMgRU5QMjYxMSBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vUklTQ1BDIEFSQ0hJVEVDVFVSRQogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL2NvbW1vbi90aW1lLWFjb3JuLmMKQEAgLTc5MCw3ICs3OTgsNyBAQAogCiBBUk0vU0FNU1VORyBBUk0gQVJDSElURUNUVVJFUwogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL3BsYXQtczNjLwpAQCAtNzk4LDY1ICs4MDYsNjUgQEAKIAogQVJNL1MzQzI0MTAgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjMjQxMC8KIAogQVJNL1MzQzI0NDAgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjMjQ0MC8KIAogQVJNL1MzQzI0NDIgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjMjQ0Mi8KIAogQVJNL1MzQzI0NDMgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjMjQ0My8KIAogQVJNL1MzQzY0MDAgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjNjQwMC8KIAogQVJNL1MzQzY0MTAgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjNjQxMC8KIAogQVJNL1RFQ0hOT0xPR0lDIFNZU1RFTVMgVFM3MjUwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9USEVDVVMgTjIxMDAgTUFDSElORSBTVVBQT1JUCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogQVJNL05VVk9UT04gVzkwWDkwMCBBUk0gQVJDSElURUNUVVJFCiBNOglXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5tY3Vvcy5jb20KIFM6CU1haW50YWluZWQKIAogQVJNL1ZGUCBTVVBQT1JUCiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrLwogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vdmZwLwpAQCAtODk0LDYgKzkwMiwxMyBAQAogRjoJaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAogRjoJaW5jbHVkZS9saW51eC9hc3luY190eC5oCiAKK0FUMjQgRUVQUk9NIERSSVZFUgorTToJV29sZnJhbSBTYW5nIDx3LnNhbmdAcGVuZ3V0cm9uaXguZGU+CitMOglsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL21pc2MvZWVwcm9tL2F0MjQuYworRjoJaW5jbHVkZS9saW51eC9pMmMvYXQyNC5oCisKIEFUQSBPVkVSIEVUSEVSTkVUIChBT0UpIERSSVZFUgogTToJIkVkIEwuIENhc2hpbiIgPGVjYXNoaW5AY29yYWlkLmNvbT4KIFc6CWh0dHA6Ly93d3cuY29yYWlkLmNvbS9zdXBwb3J0L2xpbnV4CkBAIC05NjMsNyArOTc4LDcgQEAKIAogQVRNRUwgQVQ5MSBNQ0kgRFJJVkVSCiBNOglOaWNvbGFzIEZlcnJlIDxuaWNvbGFzLmZlcnJlQGF0bWVsLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmF0bWVsLmNvbS9wcm9kdWN0cy9BVDkxLwogVzoJaHR0cDovL3d3dy5hdDkxLmNvbS8KIFM6CU1haW50YWluZWQKQEAgLTE1NDEsNyArMTU1Niw3IEBACiAKIENZQkVSUFJPIEZCIERSSVZFUgogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay8KIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuKgpAQCAtMjA4NSw3ICsyMTAwLDcgQEAKIEZSRUVTQ0FMRSBJTVggLyBNWEMgRlJBTUVCVUZGRVIgRFJJVkVSCiBNOglTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KIEw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKIEY6CWRyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtMjEwNiwxMiArMjEyMSwxMiBAQAogRjoJYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvCiBGOglhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vKnFlLmgKIAotRlJFRVNDQUxFIEhJR0hTUEVFRCBVU0IgREVWSUNFIERSSVZFUgorRlJFRVNDQUxFIFVTQiBQRVJJUEhFUklBTCBEUklWRVJTCiBNOglMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYworRjoJZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbCoKIAogRlJFRVNDQUxFIFFVSUNDIEVOR0lORSBVQ0MgRVRIRVJORVQgRFJJVkVSCiBNOglMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgpAQCAtMjgwMyw2ICsyODE4LDggQEAKIEw6CWx2cy1kZXZlbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcHZzLXN5c2N0bC50eHQKK0Y6CWluY2x1ZGUvbmV0L2lwX3ZzLmgKK0Y6CWluY2x1ZGUvbGludXgvaXBfdnMuaAogRjoJbmV0L25ldGZpbHRlci9pcHZzLwogCiBJUFdJUkVMRVNTIERSSVZFUgpAQCAtMjk1NSw3ICsyOTcyLDcgQEAKIEtFUk5FTCBKQU5JVE9SUwogTDoJa2VybmVsLWphbml0b3JzQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5rZXJuZWxqYW5pdG9ycy5vcmcvCi1TOglPZGQgZml4ZXMKK1M6CU1haW50YWluZWQKIAogS0VSTkVMIE5GU0QsIFNVTlJQQywgQU5EIExPQ0tEIFNFUlZFUlMKIE06CSJKLiBCcnVjZSBGaWVsZHMiIDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KQEAgLTM0NDksNyArMzQ2Niw3IEBACiAKIE1PVE9ST0xBIElNWCBNTUMvU0QgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSBEUklWRVIKIE06CVBhdmVsIFBpc2EgPHBwaXNhQHBpa3Jvbi5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tbWMvaG9zdC9pbXhtbWMuKgogCkBAIC0zNTI0LDcgKzM1NDEsNiBAQAogCiBOQ1AgRklMRVNZU1RFTQogTToJUGV0ciBWYW5kcm92ZWMgPHZhbmRyb3ZlQHZjLmN2dXQuY3o+Ci1MOglsaW53YXJlQHNoLmN2dXQuY3oKIFM6CU1haW50YWluZWQKIEY6CWZzL25jcGZzLwogCkBAIC0zNzM0LDcgKzM3NTAsNyBAQAogVzoJaHR0cDovL2xpbnV4Lm9tYXAuY29tLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90bWxpbmQvbGludXgtb21hcC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCi1GOglhcmNoL2FybS8qb21hcCoKK0Y6CWFyY2gvYXJtLypvbWFwKi8KIAogT01BUCBDTE9DSyBGUkFNRVdPUksgU1VQUE9SVAogTToJUGF1bCBXYWxtc2xleSA8cGF1bEBwd3Nhbi5jb20+CkBAIC0zNzY2LDcgKzM3ODIsMTMgQEAKIE06CUphcmtrbyBMYXZpbmVuIDxqYXJra28ubGF2aW5lbkBub2tpYS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9tbWMvaG9zdC8qb21hcCoKK0Y6CWRyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisKK09NQVAgSFMgTU1DIFNVUFBPUlQKK006CU1hZGh1c3VkaGFuIENoaWtrYXR1cmUgPG1hZGh1LmNyQHRpLmNvbT4KK0w6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwogCiBPTUFQIFJBTkRPTSBOVU1CRVIgR0VORVJBVE9SIFNVUFBPUlQKIE06CURlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CkBAIC0zOTU2LDYgKzM5NzgsMTUgQEAKIEY6CWRyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwogRjoJaW5jbHVkZS9saW51eC9sZWRzLXBjYTk1MzIuaAogCitQQ0E5NTY0L1BDQTk2NjUgSTJDIEJVUyBEUklWRVIKK006CVdvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPgorTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMKK0Y6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLSoKK0Y6CWluY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNhLmgKK0Y6CWluY2x1ZGUvbGludXgvaTJjLXBjYS1wbGF0Zm9ybS5oCisKIFBDSSBFUlJPUiBSRUNPVkVSWQogTToJTGluYXMgVmVwc3RhcyA8bGluYXNAYXVzdGluLmlibS5jb20+CiBMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCkBAIC00MDAwLDcgKzQwMzEsNyBAQAogRjoJaW5jbHVkZS9saW51eC9kZWxheWFjY3QuaAogRjoJa2VybmVsL2RlbGF5YWNjdC5jCiAKLVBFUkZPUk1BTkNFIENPVU5URVIgU1VCU1lTVEVNCitQRVJGT1JNQU5DRSBFVkVOVFMgU1VCU1lTVEVNCiBNOglQZXRlciBaaWpsc3RyYSA8YS5wLnppamxzdHJhQGNoZWxsby5ubD4KIE06CVBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgogTToJSW5nbyBNb2xuYXIgPG1pbmdvQGVsdGUuaHU+CkBAIC00MDI1LDggKzQwNTYsNyBAQAogRjoJaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKIAogUE1DIFNJRVJSQSBNYXhSQUlEIERSSVZFUgotUDoJQW5pbCBSYXZpbmRyYW5hdGgKLU06CWFuaWxfcmF2aW5kcmFuYXRoQHBtYy1zaWVycmEuY29tCitNOglBbmlsIFJhdmluZHJhbmF0aCA8YW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20+CiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5wbWMtc2llcnJhLmNvbS8KIFM6CVN1cHBvcnRlZApAQCAtNDE2OCw3ICs0MTk4LDcgQEAKIFBYQTJ4eC9QWEEzeHggU1VQUE9SVAogTToJRXJpYyBNaWFvIDxlcmljLnkubWlhb0BnbWFpbC5jb20+CiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1weGEvCiBGOglkcml2ZXJzL3BjbWNpYS9weGEyeHgqCkBAIC00MTgxLDEzICs0MjExLDEzIEBACiBQWEExNjggU1VQUE9SVAogTToJRXJpYyBNaWFvIDxlcmljLnkubWlhb0BnbWFpbC5jb20+CiBNOglKYXNvbiBDaGFnYXMgPGphc29uLmNoYWdhc0BtYXJ2ZWxsLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3ljbWlhby9weGEtbGludXgtMi42LmdpdAogUzoJTWFpbnRhaW5lZAogCiBQWEE5MTAgU1VQUE9SVAogTToJRXJpYyBNaWFvIDxlcmljLnkubWlhb0BnbWFpbC5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC95Y21pYW8vcHhhLWxpbnV4LTIuNi5naXQKIFM6CU1haW50YWluZWQKIApAQCAtNDQyOCw3ICs0NDU4LDcgQEAKIAogUzNDMjRYWCBTRC9NTUMgRHJpdmVyCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL21tYy9ob3N0L3MzY21jaS4qCiAKQEAgLTQ0NTgsNyArNDQ4OCw3IEBACiBQOglDaGVuIExpcWluCiBNOglsaXFpbi5jaGVuQHN1bnBsdXNjdC5jb20KIFA6CUxlbm5veCBXdQotTToJbGVubm94Lnd1QHN1bnBsdXNjdC5jb20KK006CWxlbm5veC53dUBnbWFpbC5jb20KIFc6CWh0dHA6Ly93d3cuc3VucGx1c2N0LmNvbQogUzoJU3VwcG9ydGVkCiAKQEAgLTQ1MzMsMjAgKzQ1NjMsMjAgQEAKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBEUklWRVIKLU06CVBpZXJyZSBPc3NtYW4gPHBpZXJyZUBvc3NtYW4uZXU+Ci1MOglzZGhjaS1kZXZlbEBsaXN0cy5vc3NtYW4uZXUKLVM6CU1haW50YWluZWQKK1M6ICAgICBPcnBoYW4KK0w6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitGOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UsIE9QRU4gRklSTVdBUkUgQklORElOR1MgKFNESENJLU9GKQogTToJQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwotTDoJc2RoY2ktZGV2ZWxAbGlzdHMub3NzbWFuLmV1CitMOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCitGOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi4qCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBTQU1TVU5HIERSSVZFUgogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJc2RoY2ktZGV2ZWxAbGlzdHMub3NzbWFuLmV1CitMOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwogCkBAIC00NjMyLDcgKzQ2NjIsNyBAQAogU0hBUlAgTEggU1VQUE9SVCAoTEg3OTUyWCAmIExIN0E0MFgpCiBNOglNYXJjIFNpbmdlciA8ZWxmQGJ1aWNpLmNvbT4KIFc6CWh0dHA6Ly9wcm9qZWN0cy5idWljaS5jb20vYXJtCi1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvQURDLUxINy1Ub3VjaHNjcmVlbgogRjoJYXJjaC9hcm0vbWFjaC1saDdhNDB4LwpAQCAtNDY0Niw2ICs0Njc2LDE4IEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwKgogCitTSU1QTEUgRklSTVdBUkUgSU5URVJGQUNFIChTRkkpCitQOglMZW4gQnJvd24KK006CWxlbmJAa2VybmVsLm9yZworTDoJc2ZpLWRldmVsQHNpbXBsZWZpcm13YXJlLm9yZworVzoJaHR0cDovL3NpbXBsZWZpcm13YXJlLm9yZy8KK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGVuYi9saW51eC1zZmktMi42LmdpdAorUzoJU3VwcG9ydGVkCitGOglhcmNoL3g4Ni9rZXJuZWwvKnNmaSoKK0Y6CWRyaXZlcnMvc2ZpLworRjoJaW5jbHVkZS9saW51eC9zZmkqLmgKKworCiBTSU1URUMgRUIxMTBBVFggKENoYWxpY2UgQ0FUUykKIFA6CUJlbiBEb29rcwogTToJVmluY2VudCBTYW5kZXJzIDxzdXBwb3J0QHNpbXRlYy5jby51az4KQEAgLTUwNDYsNiArNTA4OCwxMSBAQAogUzoJTWFpbnRhaW5lZAogRjoJc2VjdXJpdHkvdG9tb3lvLwogCitUT1BTVEFSIExBUFRPUCBFWFRSQVMgRFJJVkVSCitNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AbWFuZHJpdmEuY29tLmJyPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9wc3Rhci1sYXB0b3AuYworCiBUT1NISUJBIEFDUEkgRVhUUkFTIERSSVZFUgogUzoJT3JwaGFuCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNTYzOCw2ICs1Njg1LDEyIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3Njc2kvd2Q3MDAwLmMKIAorV0lOQk9ORCBDSVIgRFJJVkVSCitQOglEYXZpZCBI5HJkZW1hbgorTToJZGF2aWRAaGFyZGVtYW4ubnUKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jCisKIFdJTUFYIFNUQUNLCiBNOglJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgogTToJbGludXgtd2ltYXhAaW50ZWwuY29tCkBAIC01NjU3LDggKzU3MTAsNyBAQAogRjoJZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCiAKIFdMMTI1MSBXSVJFTEVTUyBEUklWRVIKLVA6CUthbGxlIFZhbG8KLU06CWthbGxlLnZhbG9Abm9raWEuY29tCitNOglLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtdGVzdGluZy5naXQKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCA5ZmI4YWFlLi40NDM0NDgxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC00NSw2ICs0NSwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgWk9ORV9ETUEKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2Jvb3QvdG9vbHMvb2Jqc3RyaXAuYyBiL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jCmluZGV4IGVmMTgzODIuLjlkMDcyN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jCisrKyBiL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jCkBAIC05Myw3ICs5Myw3IEBACiAgICAgb2ZkID0gMTsKICAgICBpZiAoaSA8IGFyZ2MpIHsKIAlvZmQgPSBvcGVuKGFyZ3ZbaSsrXSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY2Nik7Ci0JaWYgKGZkID09IC0xKSB7CisJaWYgKG9mZCA9PSAtMSkgewogCSAgICBwZXJyb3IoIm9wZW4iKTsKIAkgICAgZXhpdCgxKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDg4OTcxNDYuLjI0MmMwOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xLDE3ICsxLDkgQEAKICNpZm5kZWYgX0FMUEhBX0hBUkRJUlFfSAogI2RlZmluZSBfQUxQSEFfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQotCi0vKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisjZGVmaW5lIGFja19iYWRfaXJxIGFja19iYWRfaXJxCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CiAKICNlbmRpZiAvKiBfQUxQSEFfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IDkwZDdjMzUuLjk5YzU2ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0yOCw2ICsyOCw4IEBACiAjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHgxMDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLwogI2RlZmluZSBNQVBfUE9QVUxBVEUJMHgyMDAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCiAjZGVmaW5lIE1BUF9OT05CTE9DSwkweDQwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKyNkZWZpbmUgTUFQX1NUQUNLCTB4ODAwMDAJCS8qIGdpdmUgb3V0IGFuIGFkZHJlc3MgdGhhdCBpcyBiZXN0IHN1aXRlZCBmb3IgcHJvY2Vzcy90aHJlYWQgc3RhY2tzICovCisjZGVmaW5lIE1BUF9IVUdFVExCCTB4MTAwMDAwCS8qIGNyZWF0ZSBhIGh1Z2UgcGFnZSBtYXBwaW5nICovCiAKICNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KICNkZWZpbmUgTVNfU1lOQwkJMgkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KQEAgLTQ4LDYgKzUwLDkgQEAKICNkZWZpbmUgTUFEVl9ET05URk9SSwkxMAkJLyogZG9uJ3QgaW5oZXJpdCBhY3Jvc3MgZm9yayAqLwogI2RlZmluZSBNQURWX0RPRk9SSwkxMQkJLyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqLwogCisjZGVmaW5lIE1BRFZfTUVSR0VBQkxFICAgMTIJCS8qIEtTTSBtYXkgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisjZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTMJCS8qIEtTTSBtYXkgbm90IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLworCiAvKiBjb21wYXRpYmlsaXR5IGZsYWdzICovCiAjZGVmaW5lIE1BUF9GSUxFCTAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCBiZmI4ODBhLi5kMTVhZWRmIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYwpAQCAtMjY4LDExICsyNjgsNyBAQAogCSAgIGFzc3VtZSBpdCBkb2Vzbid0IHN1cHBvcnQgc2cgbWFwcGluZywgYW5kLCBzaW5jZSB3ZSB0cmllZCB0bwogCSAgIHVzZSBkaXJlY3RfbWFwIGFib3ZlLCBpdCBub3cgbXVzdCBiZSBjb25zaWRlcmVkIGFuIGVycm9yLiAqLwogCWlmICghIGFscGhhX212Lm12X3BjaV90YmkpIHsKLQkJc3RhdGljIGludCBiZWVuX2hlcmUgPSAwOyAvKiBPbmx5IHByaW50IHRoZSBtZXNzYWdlIG9uY2UuICovCi0JCWlmICghYmVlbl9oZXJlKSB7Ci0JCSAgICBwcmludGsoS0VSTl9XQVJOSU5HICJwY2lfbWFwX3NpbmdsZTogbm8gSFcgc2dcbiIpOwotCQkgICAgYmVlbl9oZXJlID0gMTsKLQkJfQorCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgInBjaV9tYXBfc2luZ2xlOiBubyBIVyBzZ1xuIik7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCmluZGV4IGIwNGUyY2IuLjVkMDgyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKQEAgLTQwOCwyOCArNDA4LDE3IEBACiAgKiBwYXJ0LiAgU28gd2UgY2FuJ3QgZG8gdGhlICJmaW5kIGFic29sdXRlIHRpbWUgaW4gdGVybXMgb2YgY3ljbGVzIiB0aGluZwogICogdGhhdCB0aGUgb3RoZXIgcG9ydHMgZG8uCiAgKi8KLXZvaWQKLWRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCit1MzIgYXJjaF9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHNlYywgdXNlYywgc2VxOwotCXVuc2lnbmVkIGxvbmcgZGVsdGFfY3ljbGVzLCBkZWx0YV91c2VjLCBwYXJ0aWFsX3RpY2s7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCi0JCWRlbHRhX2N5Y2xlcyA9IHJwY2MoKSAtIHN0YXRlLmxhc3RfdGltZTsKLQkJc2VjID0geHRpbWUudHZfc2VjOwotCQl1c2VjID0gKHh0aW1lLnR2X25zZWMgLyAxMDAwKTsKLQkJcGFydGlhbF90aWNrID0gc3RhdGUucGFydGlhbF90aWNrOwotCi0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7Ci0KICNpZmRlZiBDT05GSUdfU01QCiAJLyogVW50aWwgYW5kIHVubGVzcyB3ZSBmaWd1cmUgb3V0IGhvdyB0byBnZXQgY3B1IGN5Y2xlIGNvdW50ZXJzCiAJICAgaW4gc3luYyBhbmQga2VlcCB0aGVtIHRoZXJlLCB3ZSBjYW4ndCB1c2UgdGhlIHJwY2MgdHJpY2tzLiAgKi8KLQlkZWx0YV91c2VjID0gMDsKKwlyZXR1cm4gMDsKICNlbHNlCisJdW5zaWduZWQgbG9uZyBkZWx0YV9jeWNsZXMsIGRlbHRhX3VzZWMsIHBhcnRpYWxfdGljazsKKworCWRlbHRhX2N5Y2xlcyA9IHJwY2MoKSAtIHN0YXRlLmxhc3RfdGltZTsKKwlwYXJ0aWFsX3RpY2sgPSBzdGF0ZS5wYXJ0aWFsX3RpY2s7CiAJLyoKIAkgKiB1c2VjID0gY3ljbGVzICogdGlja3NfcGVyX2N5Y2xlICogMioqNDggKiAxZTYgLyAoMioqNDggKiB0aWNrcykKIAkgKgk9IGN5Y2xlcyAqIChzX3RfcF9jKSAqIDFlNiAvICgyKio0OCAqIHRpY2tzKQpAQCAtNDQ2LDY0ICs0MzUsMTAgQEAKIAlkZWx0YV91c2VjID0gKGRlbHRhX2N5Y2xlcyAqIHN0YXRlLnNjYWxlZF90aWNrc19wZXJfY3ljbGUgCiAJCSAgICAgICsgcGFydGlhbF90aWNrKSAqIDE1NjI1OwogCWRlbHRhX3VzZWMgPSAoKGRlbHRhX3VzZWMgLyAoKDFVTCA8PCAoRklYX1NISUZULTYtMSkpICogSFopKSArIDEpIC8gMjsKKwlyZXR1cm4gZGVsdGFfdXNlYyAqIDEwMDA7CiAjZW5kaWYKLQotCXVzZWMgKz0gZGVsdGFfdXNlYzsKLQlpZiAodXNlYyA+PSAxMDAwMDAwKSB7Ci0JCXNlYyArPSAxOwotCQl1c2VjIC09IDEwMDAwMDA7Ci0JfQotCi0JdHYtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfdXNlYyA9IHVzZWM7CiB9CiAKLUVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKLQotaW50Ci1kb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKLXsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7Ci0JdW5zaWduZWQgbG9uZyBkZWx0YV9uc2VjOwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0KLQkvKiBUaGUgb2Zmc2V0IHRoYXQgaXMgYWRkZWQgaW50byB0aW1lIGluIGRvX2dldHRpbWVvZmRheSBhYm92ZQotCSAgIG11c3QgYmUgc3VidHJhY3RlZCBvdXQgaGVyZSB0byBrZWVwIGEgY29oZXJlbnQgdmlldyBvZiB0aGUKLQkgICB0aW1lLiAgV2l0aG91dCB0aGlzLCBhIGZ1bGwtdGljayBlcnJvciBpcyBwb3NzaWJsZS4gICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0JZGVsdGFfbnNlYyA9IDA7Ci0jZWxzZQotCWRlbHRhX25zZWMgPSBycGNjKCkgLSBzdGF0ZS5sYXN0X3RpbWU7Ci0JZGVsdGFfbnNlYyA9IChkZWx0YV9uc2VjICogc3RhdGUuc2NhbGVkX3RpY2tzX3Blcl9jeWNsZSAKLQkJICAgICAgKyBzdGF0ZS5wYXJ0aWFsX3RpY2spICogMTU2MjU7Ci0JZGVsdGFfbnNlYyA9ICgoZGVsdGFfbnNlYyAvICgoMVVMIDw8IChGSVhfU0hJRlQtNi0xKSkgKiBIWikpICsgMSkgLyAyOwotCWRlbHRhX25zZWMgKj0gMTAwMDsKLSNlbmRpZgotCi0JbnNlYyAtPSBkZWx0YV9uc2VjOwotCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0KLQl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQljbG9ja193YXNfc2V0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKLQotCiAvKgogICogSW4gb3JkZXIgdG8gc2V0IHRoZSBDTU9TIGNsb2NrIHByZWNpc2VseSwgc2V0X3J0Y19tbXNzIGhhcyB0byBiZQogICogY2FsbGVkIDUwMCBtcyBhZnRlciB0aGUgc2Vjb25kIG5vd3RpbWUgaGFzIHN0YXJ0ZWQsIGJlY2F1c2Ugd2hlbgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9pbml0LmMgYi9hcmNoL2FscGhhL21tL2luaXQuYwppbmRleCBhZjcxZDM4Li5hMDkwMmMyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL21tL2luaXQuYworKysgYi9hcmNoL2FscGhhL21tL2luaXQuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAJaW5pdHNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfZW5kIC0gKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfYmVnaW47CiAKIAlwcmludGsoIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWx1ayBrZXJuZWwgY29kZSwgJWx1ayByZXNlcnZlZCwgJWx1ayBkYXRhLCAlbHVrIGluaXQpXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgbWF4X21hcG5yIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgY29kZXNpemUgPj4gMTAsCiAJICAgICAgIHJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9udW1hLmMgYi9hcmNoL2FscGhhL21tL251bWEuYwppbmRleCAwZWFiNTU3Li4xMGI0MDM1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL21tL251bWEuYworKysgYi9hcmNoL2FscGhhL21tL251bWEuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIAlwcmludGsoIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWx1ayBrZXJuZWwgY29kZSwgJWx1ayByZXNlcnZlZCwgIgogCSAgICAgICAiJWx1ayBkYXRhLCAlbHVrIGluaXQpXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBudW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgY29kZXNpemUgPj4gMTAsCiAJICAgICAgIHJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBjNjk1ZmRhLi5hNzNjYWFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMjUsNyArMjUsNyBAQAogIyBTZWxlY3QgYSBwbGF0Zm9ybSB0aHQgaXMga2VwdCB1cC10by1kYXRlCiBLQlVJTERfREVGQ09ORklHIDo9IHZlcnNhdGlsZV9kZWZjb25maWcKIAotIyBkZWZpbmVzIGZpbGVuYW1lIGV4dGVuc2lvbiBkZXBlbmRpbmcgbWVtb3J5IG1hbmVtZW50IHR5cGUuCisjIGRlZmluZXMgZmlsZW5hbWUgZXh0ZW5zaW9uIGRlcGVuZGluZyBtZW1vcnkgbWFuYWdlbWVudCB0eXBlLgogaWZlcSAoJChDT05GSUdfTU1VKSwpCiBNTVVFWFQJCTo9IC1ub21tdQogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnCmluZGV4IDY3MmY2ZGIuLmExNjU3YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZwpAQCAtODc1LDcgKzg3NSw3IEBACiBDT05GSUdfRkJfT01BUF9MQ0RDX0hXQTc0Mj15CiAjIENPTkZJR19GQl9PTUFQX0xDRENfQkxJWlpBUkQgaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVBfTUFOVUFMX1VQREFURT15Ci0jIENPTkZJR19GQl9PTUFQX0xDRF9NSVBJRCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUF9MQ0RfTUlQSUQ9eQogIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCiAjIENPTkZJR19GQl9PTUFQX0RNQV9UVU5FIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCmluZGV4IDliYjQ1YjkuLjYwMGNiMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfRUNDX1NNQz15CiAjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKaW5kZXggNTFjMGZhOC4uMzU3ZDQwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwpAQCAtNzc4LDcgKzc3OCwzMyBAQAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUD15CisjIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03OTEsNiArODE3LDI1IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwppbmRleCA5YTUxMGVhLi44YTRhN2UyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0xMzEzLDggKzEzMTMsMzMgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUD15CisjIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMzMxLDYgKzEzNTYsMTYgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU05EPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKaW5kZXggNjc5YTRhMy4uYjljNDg5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKQEAgLTY5MCw2ICs2OTAsNyBAQAogIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorQ09ORklHX0dQSU9fVFdMNDAzMD15CiAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgpAQCAtNzQyLDYgKzc0Myw3IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldApAQCAtNzY3LDggKzc2OSw0NiBAQAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUD15CitDT05GSUdfRkJfT01BUF9MQ0RfVkdBPXkKKyMgQ09ORklHX0ZCX09NQVBfTENEQ19FWFRFUk5BTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFPTQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9URE8yNE0gaXMgbm90IHNldAorIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0CitDT05GSUdfTENEX1BMQVRGT1JNPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtNzgwLDYgKzgyMCwxNiBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NORD15CiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCBmYzI2OTc2Li44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE3ICsxIEBACi0jaWZuZGVmIF9fQVJNX01NQU5fSF9fCi0jZGVmaW5lIF9fQVJNX01NQU5fSF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogX19BUk1fTU1BTl9IX18gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDkxMjJjOWUuLjg5ZjdlYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zOTAsNyArMzkwLDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYxKQogI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYyKQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYzKQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCQkoX19OUl9TWVNDQUxMX0JBU0UrMzY0KQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NCkKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgU1dJcyBhcmUgQVJNIHByaXZhdGUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCmluZGV4IGVjZmE5ODkuLmZhZmNlMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC0zNzMsNyArMzczLDcgQEAKIAkJQ0FMTChzeXNfcHJlYWR2KQogCQlDQUxMKHN5c19wd3JpdGV2KQogCQlDQUxMKHN5c19ydF90Z3NpZ3F1ZXVlaW5mbykKLQkJQ0FMTChzeXNfcGVyZl9jb3VudGVyX29wZW4pCisJCUNBTEwoc3lzX3BlcmZfZXZlbnRfb3BlbikKICNpZm5kZWYgc3lzY2FsbHNfY291bnRlZAogLmVxdSBzeXNjYWxsc19wYWRkaW5nLCAoKE5SX3N5c2NhbGxzICsgMykgJiB+MykgLSBOUl9zeXNjYWxscwogI2RlZmluZSBzeXNjYWxsc19jb3VudGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IGEyNGQ4MjQuLmUzNWQ1NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0yODksNiArMjg5LDEzIEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgQWRlbmVvIE5lb2NvcmUgOTI2IGJvYXJkLgogCitjb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMKKwlib29sICJBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdCBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgUmV2IEEgb3IgQiBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMuCisKIGVuZGlmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCmluZGV4IGE2ZWQwMTUuLmFkYTQ0MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKQEAgLTU5LDYgKzU5LDcgQEAKIAogIyBBVDkxU0FNOUcyMCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLKSArPSBib2FyZC1zYW05ZzIwZWsubworb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFS18yTU1DKSArPSBib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX0NQVTlHMjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KIAogIyBBVDkxU0FNOUc0NSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwppbmRleCBlZTRlYTBlNy4uMDdlYjdiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCkBAIC0yNzgsNiArMjc4LDEwMiBAQAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQogI2VuZGlmCiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTU1DIC8gU0QgU2xvdCBmb3IgQXRtZWwgTUNJIERyaXZlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJX01PRFVMRSkKK3N0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX01DSSwKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX01DSSwKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX01DSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX21tY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX21jaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHNsb3RfY291bnQgPSAwOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7CisJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCkgeworCQkJLyogaW5wdXQvaXJxICovCisJCQlpZiAoZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluKSB7CisJCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sIDEpOworCQkJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwgMSk7CisJCQl9CisJCQlpZiAoZGF0YS0+c2xvdFtpXS53cF9waW4pCisJCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLndwX3BpbiwgMSk7CisKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOgorCQkJCS8qIENNRCAqLworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMSk7CisJCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNiwgMSk7CisJCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKKwkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKKwkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMSk7CisJCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDEpOworCQkJCX0KKwkJCQlzbG90X2NvdW50Kys7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJLyogQ01EICovCisJCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExLCAxKTsKKwkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCisJCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAxKTsKKwkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgeworCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOworCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOworCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMsIDEpOworCQkJCX0KKwkJCQlzbG90X2NvdW50Kys7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiQVQ5MTogU0QvTU1DIHNsb3QgJWQgbm90IGF2YWlsYWJsZVxuIiwgaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc2xvdF9jb3VudCkgeworCQkvKiBDTEsgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAwKTsKKworCQltbWNfZGF0YSA9ICpkYXRhOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX21tY19kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBOQU5EIC8gU21hcnRNZWRpYQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYwppbmRleCA2MWU1MmI2Li41MDY2N2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYwpAQCAtNTMsNyArNTMsNyBAQAogCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDE4NDMyMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKaW5kZXggZDNiYTI5Yy4uMDIxMzhhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTAgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDEwMDAwMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMKaW5kZXggOWJhN2JhMi4uOGMwYjcxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCkBAIC01Niw3ICs1Niw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDIwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSgyMDAwMDAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBSVFMsIENUUykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1xaWwtYTkyNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1xaWwtYTkyNjAuYwppbmRleCA0Y2ZmOWE3Li42NjQ5MzhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcWlsLWE5MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXFpbC1hOTI2MC5jCkBAIC01Myw3ICs1Myw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwogCWF0OTFzYW05MjYwX2luaXRpYWxpemUoMTIwMDAwMDApOwogCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwogCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKIAogCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCmluZGV4IDkzYTBmOGIuLmJhOWQ1MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSgxODQzMjAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKaW5kZXggZjliMTk5OS4uYzRjODg2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwpAQCAtNjEsNyArNjEsNyBAQAogCS8qIFNldHVwIHRoZSBMRURzICovCiAJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEExMywgQVQ5MV9QSU5fUEExNCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwppbmRleCAxYmY3YmQ0Li4yNmYxYWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE2LjM2NyBNSHogY3J5c3RhbCAqLwogCWF0OTFzYW05MjYzX2luaXRpYWxpemUoMTYzNjc2NjApOwogCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwogCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKIAogCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhlNTNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQorICogIENvcHlyaWdodCAoQykgMjAwOCBBdG1lbAorICogIENvcHlyaWdodCAoQykgMjAwOSBSb2IgRW1hbnVlbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hdDczYzIxMy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisKKyNpbmNsdWRlICJzYW05X3NtYy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLworCWF0OTFzYW05MjYwX2luaXRpYWxpemUoMTg0MzIwMDApOworCisJLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCisJCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAorCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKKworCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxc2FtOTI2MF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKworLyoKKyAqIFVTQiBIb3N0IHBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKKwkucG9ydHMJCT0gMiwKK307CisKKy8qCisgKiBVU0IgRGV2aWNlIHBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7CisJLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAorCS5wdWxsdXBfcGluCT0gMCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLworfTsKKworCisvKgorICogU1BJIGRldmljZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZWtfc3BpX2RldmljZXNbXSA9IHsKKyNpZiAhZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKQorCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAxLAorCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorCX0sCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCisJewkvKiBEYXRhRmxhc2ggY2FyZCAqLworCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJfSwKKyNlbmRpZgorI2VuZGlmCit9OworCisKKy8qCisgKiBNQUNCIEV0aGVybmV0IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEMxMiwKKwkuaXNfcm1paQk9IDEsCit9OworCisKKy8qCisgKiBOQU5EIGZsYXNoCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7CisJeworCQkubmFtZSAgID0gIkJvb3RzdHJhcCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSAgID0gNCAqIFNaXzFNLAorCX0sCisJeworCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCT0gNjAgKiBTWl8xTSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGVrX25hbmRfcGFydGl0aW9uOworfQorCisvKiBkZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0geworCS5hbGUJCT0gMjEsCisJLmNsZQkJPSAyMiwKKwkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCisJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAorCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9CVVNXSURUSF8xNikKKwkuYnVzX3dpZHRoXzE2CT0gMSwKKyNlbHNlCisJLmJ1c193aWR0aF8xNgk9IDAsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMiwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDIsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNCwKKwkubnJkX3B1bHNlCQk9IDQsCisJLm5jc193cml0ZV9wdWxzZQk9IDQsCisJLm53ZV9wdWxzZQkJPSA0LAorCisJLnJlYWRfY3ljbGUJCT0gNywKKwkud3JpdGVfY3ljbGUJCT0gNywKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCisJLnRkZl9jeWNsZXMJCT0gMywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZla19uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIE1DSSAoU0QvTU1DKQorICogZGV0X3BpbiBhbmQgd3BfcGluIGFyZSBub3QgY29ubmVjdGVkCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CisJLnNsb3RbMF0gPSB7CisJCS5idXNfd2lkdGgJPSA0LAorCQkuZGV0ZWN0X3Bpbgk9IC1FTk9ERVYsCisJCS53cF9waW4JCT0gLUVOT0RFViwKKwl9LAorCS5zbG90WzFdID0geworCQkuYnVzX3dpZHRoCT0gNCwKKwkJLmRldGVjdF9waW4JPSAtRU5PREVWLAorCQkud3BfcGluCQk9IC1FTk9ERVYsCisJfSwKKworfTsKKyNlbHNlCitzdGF0aWMgc3RydWN0IGFtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0geworfTsKKyNlbmRpZgorCisvKgorICogTEVEcworICovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKKwl7CS8qICJib3R0b20iIGxlZCwgZ3JlZW4sIHVzZXJsZWQxIHRvIGJlIGRlZmluZWQgKi8KKwkJLm5hbWUJCQk9ICJkczUiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLworCQkubmFtZQkJCT0gImRzMSIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjEzLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVrX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiMjRjNTEyIiwgMHg1MCksCisJfSwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKKwkvKiBVU0IgRGV2aWNlICovCisJYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOworCS8qIFNQSSAqLworCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKKwkvKiBOQU5EICovCisJZWtfYWRkX2RldmljZV9uYW5kKCk7CisJLyogRXRoZXJuZXQgKi8KKwlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOworCS8qIE1NQyAqLworCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21tY19kYXRhKTsKKwkvKiBJMkMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7CisJLyogTEVEcyAqLworCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOworCS8qIFBDSzAgcHJvdmlkZXMgTUNMSyB0byB0aGUgV004NzMxICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsKKwkvKiBTU0MgKGZvciBXTTg3MzEpICovCisJYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlHMjBFS18yTU1DLCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgMiBNTUMgU2xvdCBNb2QiKQorCS8qIE1haW50YWluZXI6IFJvYiBFbWFudWVsZSAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxc2FtOTI2eF90aW1lciwKKwkubWFwX2lvCQk9IGVrX21hcF9pbywKKwkuaW5pdF9pcnEJPSBla19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKaW5kZXggY2E0NzBkNS4uMjljZjgzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwpAQCAtNTAsNyArNTAsNyBAQAogCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDE4NDMyMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggOWQwNzY3OS4uOTRmZmI1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTIuMDAwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTlybF9pbml0aWFsaXplKDEyMDAwMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2MC5jCmluZGV4IGQxMzMwNGMuLjkwNWQ2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtdXNiLWE5MjYwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTIuMDAwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjMuYwppbmRleCBkOTY0MDViLi5iNmEzNDgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtdXNiLWE5MjYzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2My5jCkBAIC01Miw3ICs1Miw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCAxM2YyN2E0Li41ODNmMzhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvYXRtZWxfdXNiYV91ZGMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KICNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYzk3Yy5oPgogCiAgLyogVVNCIERldmljZSAqLwpAQCAtNjQsNiArNjUsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKTsKIAogIC8qIE1NQyAvIFNEICovCisgIC8qIGF0OTFfbWNpIHBsYXRmb3JtIGNvbmZpZyAqLwogc3RydWN0IGF0OTFfbW1jX2RhdGEgewogCXU4CQlkZXRfcGluOwkvKiBjYXJkIGRldGVjdCBJUlEgKi8KIAl1bnNpZ25lZAlzbG90X2I6MTsJLyogdXNlcyBTbG90IEIgKi8KQEAgLTczLDYgKzc1LDkgQEAKIH07CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKTsKIAorICAvKiBhdG1lbC1tY2kgcGxhdGZvcm0gY29uZmlnICovCitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CisKICAvKiBFdGhlcm5ldCAoRU1BQyAmIE1BQ0IpICovCiBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSB7CiAJdTMyCQlwaHlfbWFzazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IDNkZDBlMmEuLmRkYTE5Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKQEAgLTM3LDcgKzM3LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqY2xrKTsKIAogc3RhdGljIGludCBzZXRfa2V5dGNoY2xrX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotCitzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MSA9IHsKIAkuc3dfbG9ja2VkCT0gMSwKQEAgLTc2LDYgKzc2LDEzIEBACiAJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa192aWRlbyA9IHsKKwkuc3dfbG9ja2VkCT0gMSwKKwkuZW5hYmxlX3JlZyAgICAgPSBFUDkzWFhfU1lTQ09OX1ZJRENMS0RJViwKKwkuZW5hYmxlX21hc2sgICAgPSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FTkFCTEUsCisJLnNldF9yYXRlCT0gc2V0X2Rpdl9yYXRlLAorfTsKKwogLyogRE1BIENsb2NrcyAqLwogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDAgPSB7CiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKQEAgLTE0MCw2ICsxNDcsNyBAQAogCUlOSVRfQ0soTlVMTCwJCQkicGxsMiIsCQkmY2xrX3BsbDIpLAogCUlOSVRfQ0soImVwOTN4eC1vaGNpIiwJCU5VTEwsCQkmY2xrX3VzYl9ob3N0KSwKIAlJTklUX0NLKCJlcDkzeHgta2V5cGFkIiwJTlVMTCwJCSZjbGtfa2V5cGFkKSwKKwlJTklUX0NLKCJlcDkzeHgtZmIiLAkJTlVMTCwJCSZjbGtfdmlkZW8pLAogCUlOSVRfQ0soTlVMTCwJCQkicHdtX2NsayIsCSZjbGtfcHdtKSwKIAlJTklUX0NLKE5VTEwsCQkJIm0ycDAiLAkJJmNsa19tMnAwKSwKIAlJTklUX0NLKE5VTEwsCQkJIm0ycDEiLAkJJmNsa19tMnAxKSwKQEAgLTIzNiw2ICsyNDQsODQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY19jbGtfZGl2KHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50ICpwc2VsLCBpbnQgKmVzZWwsCisJCQkJICBpbnQgKnBkaXYsIGludCAqZGl2KQoreworCXVuc2lnbmVkIGxvbmcgbWF4X3JhdGUsIGJlc3RfcmF0ZSA9IDAsCisJCWFjdHVhbF9yYXRlID0gMCwgbWNsa19yYXRlID0gMCwgcmF0ZV9lcnIgPSAtMTsKKwlpbnQgaSwgZm91bmQgPSAwLCBfX2RpdiA9IDAsIF9fcGRpdiA9IDA7CisKKwkvKiBEb24ndCBleGNlZWQgdGhlIG1heGltdW0gcmF0ZSAqLworCW1heF9yYXRlID0gbWF4KG1heChjbGtfcGxsMS5yYXRlIC8gNCwgY2xrX3BsbDIucmF0ZSAvIDQpLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpOworCXJhdGUgPSBtaW4ocmF0ZSwgbWF4X3JhdGUpOworCisJLyoKKwkgKiBUcnkgdGhlIHR3byBwbGwncyBhbmQgdGhlIGV4dGVybmFsIGNsb2NrCisJICogQmVjYXVzZSB0aGUgdmFsaWQgcHJlZGl2aWRlcnMgYXJlIDIsIDIuNSBhbmQgMywgd2UgbXVsdGlwbHkKKwkgKiBhbGwgdGhlIGNsb2NrcyBieSAyIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IG1hdGguCisJICoKKwkgKiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gaW4gdGhlIGVwOTN4eCByYXN0ZXIgZ3VpZGU6CisJICogaHR0cDovL2JlLWEtbWF2ZXJpY2suY29tL2VuL3B1YnMvYXBwTm90ZS9BTjI2OVJFVjEucGRmCisJICoKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpID09IDApCisJCQltY2xrX3JhdGUgPSBFUDkzWFhfRVhUX0NMS19SQVRFICogMjsKKwkJZWxzZSBpZiAoaSA9PSAxKQorCQkJbWNsa19yYXRlID0gY2xrX3BsbDEucmF0ZSAqIDI7CisJCWVsc2UgaWYgKGkgPT0gMikKKwkJCW1jbGtfcmF0ZSA9IGNsa19wbGwyLnJhdGUgKiAyOworCisJCS8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KKwkJZm9yIChfX3BkaXYgPSA0OyBfX3BkaXYgPD0gNjsgX19wZGl2KyspIHsKKwkJCV9fZGl2ID0gbWNsa19yYXRlIC8gKHJhdGUgKiBfX3BkaXYpOworCQkJaWYgKF9fZGl2IDwgMiB8fCBfX2RpdiA+IDEyNykKKwkJCQljb250aW51ZTsKKworCQkJYWN0dWFsX3JhdGUgPSBtY2xrX3JhdGUgLyAoX19wZGl2ICogX19kaXYpOworCisJCQlpZiAoIWZvdW5kIHx8IGFicyhhY3R1YWxfcmF0ZSAtIHJhdGUpIDwgcmF0ZV9lcnIpIHsKKwkJCQkqcGRpdiA9IF9fcGRpdiAtIDM7CisJCQkJKmRpdiA9IF9fZGl2OworCQkJCSpwc2VsID0gKGkgPT0gMik7CisJCQkJKmVzZWwgPSAoaSAhPSAwKTsKKwkJCQliZXN0X3JhdGUgPSBhY3R1YWxfcmF0ZTsKKwkJCQlyYXRlX2VyciA9IGFicyhhY3R1YWxfcmF0ZSAtIHJhdGUpOworCQkJCWZvdW5kID0gMTsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZm91bmQpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJlc3RfcmF0ZTsKK30KKworc3RhdGljIGludCBzZXRfZGl2X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBhY3R1YWxfcmF0ZTsKKwlpbnQgcHNlbCA9IDAsIGVzZWwgPSAwLCBwZGl2ID0gMCwgZGl2ID0gMDsKKwl1MzIgdmFsOworCisJYWN0dWFsX3JhdGUgPSBjYWxjX2Nsa19kaXYocmF0ZSwgJnBzZWwsICZlc2VsLCAmcGRpdiwgJmRpdik7CisJaWYgKGFjdHVhbF9yYXRlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWNsay0+cmF0ZSA9IGFjdHVhbF9yYXRlOworCisJLyogQ2xlYXIgdGhlIGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzICovCisJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwl2YWwgJj0gfjB4N2ZmZjsKKworCS8qIFNldCB0aGUgbmV3IGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzIGZvciB0aGUgbmV3IGNsb2NrIHJhdGUgKi8KKwl2YWwgfD0gKGVzZWwgPyBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FU0VMIDogMCkgfAorCQkocHNlbCA/IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BTRUwgOiAwKSB8CisJCShwZGl2IDw8IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlQpIHwgZGl2OworCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsLCBjbGstPmVuYWJsZV9yZWcpOworCXJldHVybiAwOworfQorCiBpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCWlmIChjbGstPnNldF9yYXRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDE2YjkyYzMuLmY3ZWJlZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KQEAgLTY4Miw2ICs2ODMsMzcgQEAKIEVYUE9SVF9TWU1CT0woZXA5M3h4X3B3bV9yZWxlYXNlX2dwaW8pOwogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggdmlkZW8gcGVyaXBoZXJhbCBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyBlcDkzeHhmYl9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVwOTN4eF9mYl9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0CQk9IEVQOTNYWF9SQVNURVJfUEhZU19CQVNFLAorCQkuZW5kCQk9IEVQOTNYWF9SQVNURVJfUEhZU19CQVNFICsgMHg4MDAgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9mYl9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJlcDkzeHgtZmIiLAorCS5pZAkJCT0gLTEsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZlcDkzeHhmYl9kYXRhLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkuZG1hX21hc2sJCT0gJmVwOTN4eF9mYl9kZXZpY2UuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorCX0sCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShlcDkzeHhfZmJfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkJPSBlcDkzeHhfZmJfcmVzb3VyY2UsCit9OworCit2b2lkIF9faW5pdCBlcDkzeHhfcmVnaXN0ZXJfZmIoc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyAqZGF0YSkKK3sKKwllcDkzeHhmYl9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfZmJfZGV2aWNlKTsKK30KKwogZXh0ZXJuIHZvaWQgZXA5M3h4X2dwaW9faW5pdCh2b2lkKTsKIAogdm9pZCBfX2luaXQgZXA5M3h4X2luaXRfZGV2aWNlcyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAppbmRleCBlYTc4ZTkwLi4wZmJmODdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaApAQCAtNzAsNiArNzAsNyBAQAogI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAyMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VTQl9CQVNFCQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDIwMDAwKQogCisjZGVmaW5lIEVQOTNYWF9SQVNURVJfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDMwMDAwKQogI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCkBAIC0yMDcsNiArMjA4LDExIEBACiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0FEQ1BECSgxPDwyKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19LRVlTCSgxPDwxKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19TSEVOQQkoMTw8MCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9WSURDTEtESVYJCUVQOTNYWF9TWVNDT05fUkVHKDB4ODQpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLRElWX0VOQUJMRQkoMTw8MTUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLRElWX0VTRUwJKDE8PDE0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9QU0VMCSgxPDwxMykKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtESVZfUERJVl9TSElGVAk4CiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWCUVQOTNYWF9TWVNDT05fUkVHKDB4OTApCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX1RTRU4JKDE8PDMxKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9BRElWCSgxPDwxNikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9mYi5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhZTExZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9mYi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZmIuaAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9FUDkzWFhGQl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRVA5M1hYRkJfSAorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IGZiX3ZpZGVvbW9kZTsKK3N0cnVjdCBmYl9pbmZvOworCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9NT0RFREIJCTAKKworLyogVmlkZW9BdHRyaWJ1dGVzIGZsYWdzICovCisjZGVmaW5lIEVQOTNYWEZCX1NUQVRFX01BQ0hJTkVfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMX0NMT0NLX0VOQUJMRQkoMSA8PCAxKQorI2RlZmluZSBFUDkzWFhGQl9WU1lOQ19FTkFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMX0RBVEFfRU5BQkxFCSgxIDw8IDMpCisjZGVmaW5lIEVQOTNYWEZCX0NPTVBPU0lURV9TWU5DCQkoMSA8PCA0KQorI2RlZmluZSBFUDkzWFhGQl9TWU5DX1ZFUlRfSElHSAkJKDEgPDwgNSkKKyNkZWZpbmUgRVA5M1hYRkJfU1lOQ19IT1JJWl9ISUdICSgxIDw8IDYpCisjZGVmaW5lIEVQOTNYWEZCX1NZTkNfQkxBTktfSElHSAkoMSA8PCA3KQorI2RlZmluZSBFUDkzWFhGQl9QQ0xLX0ZBTExJTkcJCSgxIDw8IDgpCisjZGVmaW5lIEVQOTNYWEZCX0VOQUJMRV9BQwkJKDEgPDwgOSkKKyNkZWZpbmUgRVA5M1hYRkJfRU5BQkxFX0xDRAkJKDEgPDwgMTApCisjZGVmaW5lIEVQOTNYWEZCX0VOQUJMRV9DQ0lSCQkoMSA8PCAxMikKKyNkZWZpbmUgRVA5M1hYRkJfVVNFX1BBUkFMTEVMX0lOVEVSRkFDRQkoMSA8PCAxMykKKyNkZWZpbmUgRVA5M1hYRkJfRU5BQkxFX0lOVEVSUlVQVAkoMSA8PCAxNCkKKyNkZWZpbmUgRVA5M1hYRkJfVVNCX0lOVEVSTEFDRQkJKDEgPDwgMTYpCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9FUVVBTElaQVRJT04JKDEgPDwgMTcpCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9ET1VCTEVfSE9SWgkoMSA8PCAxOCkKKyNkZWZpbmUgRVA5M1hYRkJfVVNFX0RPVUJMRV9WRVJUCSgxIDw8IDE5KQorI2RlZmluZSBFUDkzWFhGQl9VU0VfQkxBTktfUElYRUwJKDEgPDwgMjApCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9TRENTTjAJCSgwIDw8IDIxKQorI2RlZmluZSBFUDkzWFhGQl9VU0VfU0RDU04xCQkoMSA8PCAyMSkKKyNkZWZpbmUgRVA5M1hYRkJfVVNFX1NEQ1NOMgkJKDIgPDwgMjEpCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9TRENTTjMJCSgzIDw8IDIxKQorCisjZGVmaW5lIEVQOTNYWEZCX0VOQUJMRQkJCShFUDkzWFhGQl9TVEFURV9NQUNISU5FX0VOQUJMRQl8IFwKKwkJCQkJIEVQOTNYWEZCX1BJWEVMX0NMT0NLX0VOQUJMRQl8IFwKKwkJCQkJIEVQOTNYWEZCX1ZTWU5DX0VOQUJMRQkJfCBcCisJCQkJCSBFUDkzWFhGQl9QSVhFTF9EQVRBX0VOQUJMRSkKKworc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyB7CisJdW5zaWduZWQgaW50CQkJbnVtX21vZGVzOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUJKm1vZGVzOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUJKmRlZmF1bHRfbW9kZTsKKwlpbnQJCQkJYnBwOworCXVuc2lnbmVkIGludAkJCWZsYWdzOworCisJaW50CSgqc2V0dXApKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCXZvaWQJKCp0ZWFyZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisJdm9pZAkoKmJsYW5rKShpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRVA5M1hYRkJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCA1ZjVmYTY1Li4wMWEwZjA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNiw2ICs2LDcgQEAKIAogc3RydWN0IGkyY19ib2FyZF9pbmZvOwogc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm87CiAKIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEKIHsKQEAgLTMzLDYgKzM0LDcgQEAKIAogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfZXRoKHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGEsIGludCBjb3B5X2FkZHIpOwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7Cit2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mYihzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICpkYXRhKTsKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX3B3bShpbnQgcHdtMCwgaW50IHB3bTEpOwogaW50IGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogdm9pZCBlcDkzeHhfcHdtX3JlbGVhc2VfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggNTA4M2YwMy4uY2ZkNTJmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTQxLDggKzQxLDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKLXN0YXRpYyBpbnQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpOwotc3RhdGljIGludCBfX2luaXQgaXhwNHh4X2Nsb2NrZXZlbnRfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIF9faW5pdCBpeHA0eHhfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIF9faW5pdCBpeHA0eHhfY2xvY2tldmVudF9pbml0KHZvaWQpOwogc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2xvY2tldmVudF9peHA0eHg7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjcsNyArMjY3LDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IGl4cDR4eF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZjbG9ja2V2ZW50X2l4cDR4eDsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CiAKIAkvKiBDbGVhciBQZW5kaW5nIEludGVycnVwdCBieSB3cml0aW5nICcxJyB0byBpdCAqLwogCSpJWFA0WFhfT1NTVCA9IElYUDRYWF9PU1NUX1RJTUVSXzFfUEVORDsKQEAgLTI4MSw2ICsyODEsNyBAQAogCS5uYW1lCQk9ICJ0aW1lcjEiLAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IGl4cDR4eF90aW1lcl9pbnRlcnJ1cHQsCisJLmRldl9pZAkJPSAmY2xvY2tldmVudF9peHA0eHgsCiB9OwogCiB2b2lkIF9faW5pdCBpeHA0eHhfdGltZXJfaW5pdCh2b2lkKQpAQCAtNDAxLDcgKzQwMiw3IEBACiAvKgogICogY2xvY2tzb3VyY2UKICAqLwotY3ljbGVfdCBpeHA0eHhfZ2V0X2N5Y2xlcyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQorc3RhdGljIGN5Y2xlX3QgaXhwNHh4X2dldF9jeWNsZXMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlyZXR1cm4gKklYUDRYWF9PU1RTOwogfQpAQCAtNDE3LDE0ICs0MTgsMTIgQEAKIAogdW5zaWduZWQgbG9uZyBpeHA0eHhfdGltZXJfZnJlcSA9IEZSRVE7CiBFWFBPUlRfU1lNQk9MKGl4cDR4eF90aW1lcl9mcmVxKTsKLXN0YXRpYyBpbnQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaXhwNHh4X2Nsb2Nrc291cmNlX2luaXQodm9pZCkKIHsKIAljbG9ja3NvdXJjZV9peHA0eHgubXVsdCA9CiAJCWNsb2Nrc291cmNlX2h6Mm11bHQoaXhwNHh4X3RpbWVyX2ZyZXEsCiAJCQkJICAgIGNsb2Nrc291cmNlX2l4cDR4eC5zaGlmdCk7CiAJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2l4cDR4eCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTQ4MCw3ICs0NzksNyBAQAogCS5zZXRfbmV4dF9ldmVudAk9IGl4cDR4eF9zZXRfbmV4dF9ldmVudCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGl4cDR4eF9jbG9ja2V2ZW50X2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpeHA0eHhfY2xvY2tldmVudF9pbml0KHZvaWQpCiB7CiAJY2xvY2tldmVudF9peHA0eHgubXVsdCA9IGRpdl9zYyhGUkVRLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfaXhwNHh4LnNoaWZ0KTsKQEAgLTQ5MSw1ICs0OTAsNCBAQAogCWNsb2NrZXZlbnRfaXhwNHh4LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOwogCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZjbG9ja2V2ZW50X2l4cDR4eCk7Ci0JcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZDJhYTI2Zi4uNTRjMGFmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTMsOSArMTMsMTEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogeworCS8qIGl4cDR4eCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIFhTY2FsZSBQV1JNT0RFIHJlZ2lzdGVyLAorCSAqIHNvIGl0IG11c3Qgbm90IGNhbGwgY3B1X2RvX2lkbGUoKSBoZXJlLgorCSAqLwogI2lmIDAKLQlpZiAoIWhsdF9jb3VudGVyKQotCQljcHVfZG9faWRsZSgwKTsKKwljcHVfZG9faWRsZSgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvYm9hcmQtbmhrODgxNS5jCmluZGV4IDc5YmRlYTkuLjZiZmQ1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2JvYXJkLW5oazg4MTUuYwpAQCAtMTYsMTIgKzE2LDE2NCBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KKyNpbmNsdWRlIDxtYWNoL25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL2ZzbWMuaD4KICNpbmNsdWRlICJjbG9jay5oIgogCisvKiBUaGVzZSBhZHJlc3NlcyBzcGFuIDE2TUIsIHNvIHVzZSB0aHJlZSBpbmRpdmlkdWFsIHBhZ2VzICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5oazg4MTVfbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gIm5hbmRfYWRkciIsCisJCS5zdGFydCA9IE5BTkRfSU9fQUREUiwKKwkJLmVuZCA9IE5BTkRfSU9fQUREUiArIDB4ZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5uYW1lID0gIm5hbmRfY21kIiwKKwkJLnN0YXJ0ID0gTkFORF9JT19DTUQsCisJCS5lbmQgPSBOQU5EX0lPX0NNRCArIDB4ZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5uYW1lID0gIm5hbmRfZGF0YSIsCisJCS5zdGFydCA9IE5BTkRfSU9fREFUQSwKKwkJLmVuZCA9IE5BTkRfSU9fREFUQSArIDB4ZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgaW50IG5oazg4MTVfbmFuZF9pbml0KHZvaWQpCit7CisJLyogRlNNQyBzZXR1cCBmb3IgbmFuZCBjaGlwIHNlbGVjdCAoOC1iaXQgbmFuZCBpbiA4ODE1TkhLKSAqLworCXdyaXRlbCgweDAwMDAwMDBFLCBGU01DX1BDUigwKSk7CisJd3JpdGVsKDB4MDAwRDBBMDAsIEZTTUNfUE1FTSgwKSk7CisJd3JpdGVsKDB4MDAxMDBBMDAsIEZTTUNfUEFUVCgwKSk7CisKKwkvKiBlbmFibGUgYWNjZXNzIHRvIHRoZSBjaGlwIHNlbGVjdCBhcmVhICovCisJd3JpdGVsKHJlYWRsKEZTTUNfUENSKDApKSB8IDB4MDQsIEZTTUNfUENSKDApKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhlc2UgcGFydGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgdXNlZCBpbiB0aGUgMi42LjIwIHJlbGVhc2UKKyAqIHNoaXBwZWQgYnkgdGhlIHZlbmRvcjsgdGhlIGZpcnN0IHR3byBwYXJ0aXRpb25zIGFyZSBtYW5kYXRlZAorICogYnkgdGhlIGJvb3QgUk9NLCBhbmQgdGhlIGJvb3Rsb2FkZXIgYXJlYSBpcyBzb21laG93IG92ZXJzaXplZC4uLgorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbmhrODgxNV9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9ICJYLUxvYWRlcihOQU5EKSIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZQk9IFNaXzI1NkssCisJfSwgeworCQkubmFtZQk9ICJNZW1Jbml0KE5BTkQpIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJPSBTWl8yNTZLLAorCX0sIHsKKwkJLm5hbWUJPSAiQm9vdExvYWRlcihOQU5EKSIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCT0gU1pfMk0sCisJfSwgeworCQkubmFtZQk9ICJLZXJuZWwgekltYWdlKE5BTkQpIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJPSAzICogU1pfMU0sCisJfSwgeworCQkubmFtZQk9ICJSb290IEZpbGVzeXN0ZW0oTkFORCkiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IDIyICogU1pfMU0sCisJfSwgeworCQkubmFtZQk9ICJVc2VyIEZpbGVzeXN0ZW0oTkFORCkiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBub21hZGlrX25hbmRfcGxhdGZvcm1fZGF0YSBuaGs4ODE1X25hbmRfZGF0YSA9IHsKKwkucGFydHMJCT0gbmhrODgxNV9wYXJ0aXRpb25zLAorCS5ucGFydHMJCT0gQVJSQVlfU0laRShuaGs4ODE1X3BhcnRpdGlvbnMpLAorCS5vcHRpb25zCT0gTkFORF9DT1BZQkFDSyB8IE5BTkRfQ0FDSEVQUkcgfCBOQU5EX05PX1BBRERJTkcgXAorCQkJfCBOQU5EX05PX1JFQURSRFkgfCBOQU5EX05PX0FVVE9JTkNSLAorCS5pbml0CQk9IG5oazg4MTVfbmFuZF9pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmhrODgxNV9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAibm9tYWRpa19uYW5kIiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbmhrODgxNV9uYW5kX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBuaGs4ODE1X25hbmRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuaGs4ODE1X25hbmRfcmVzb3VyY2VzKSwKK307CisKKy8qIFRoZXNlIGFyZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIE9uZU5hbmQgZGV2aWNlLCBkaWZmZXJlbnQgZnJvbSBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5oazg4MTVfb25lbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9ICJYLUxvYWRlcihPbmVOQU5EKSIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZQk9IFNaXzI1NkssCisJfSwgeworCQkubmFtZQk9ICJNZW1Jbml0KE9uZU5BTkQpIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJPSBTWl8yNTZLLAorCX0sIHsKKwkJLm5hbWUJPSAiQm9vdExvYWRlcihPbmVOQU5EKSIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCT0gU1pfMk0tU1pfMjU2SywKKwl9LCB7CisJCS5uYW1lCT0gIlN5c0ltYWdlKE9uZU5BTkQpIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJPSA0ICogU1pfMU0sCisJfSwgeworCQkubmFtZQk9ICJSb290IEZpbGVzeXN0ZW0oT25lTkFORCkiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IDIyICogU1pfMU0sCisJfSwgeworCQkubmFtZQk9ICJVc2VyIEZpbGVzeXN0ZW0oT25lTkFORCkiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5oazg4MTVfb25lbmFuZF9kYXRhID0geworCS5wYXJ0cwkJPSBuaGs4ODE1X29uZW5hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5oazg4MTVfb25lbmFuZF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmhrODgxNV9vbmVuYW5kX3Jlc291cmNlW10gPSB7CisJeworCQkuc3RhcnQJCT0gMHgzMDAwMDAwMCwKKwkJLmVuZAkJPSAweDMwMDAwMDAwICsgU1pfMTI4SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmhrODgxNV9vbmVuYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAib25lbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZuaGs4ODE1X29uZW5hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IG5oazg4MTVfb25lbmFuZF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmhrODgxNV9vbmVuYW5kX3Jlc291cmNlKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuaGs4ODE1X29uZW5hbmRfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19PTkVOQU5ECisgICAgICAgLyogU2V0IHVwIFNNQ1MwIGZvciBPbmVOYW5kICovCisgICAgICAgd3JpdGVsKDB4MDAwMDMwZGIsIEZTTUNfQkNSMCk7CisgICAgICAgd3JpdGVsKDB4MDIxMDA1NTEsIEZTTUNfQlRSMCk7CisjZW5kaWYKK30KKwogI2RlZmluZSBfX01FTV80S19SRVNPVVJDRSh4KSBcCiAJLnJlcyA9IHsuc3RhcnQgPSAoeCksIC5lbmQgPSAoeCkgKyBTWl80SyAtIDEsIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNfQogCkBAIC04MSw2ICsyMzMsOCBAQAogZGV2aWNlX2luaXRjYWxsKG5oazg4MTVfZXRoX2luaXQpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbmhrODgxNV9wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbmhrODgxNV9uYW5kX2RldmljZSwKKwkmbmhrODgxNV9vbmVuYW5kX2RldmljZSwKIAkmbmhrODgxNV9ldGhfZGV2aWNlLAogCS8qIHdpbGwgYWRkIG1vcmUgZGV2aWNlcyAqLwogfTsKQEAgLTkwLDYgKzI0NCw3IEBACiAJaW50IGk7CiAKIAljcHU4ODE1X3BsYXRmb3JtX2luaXQoKTsKKwluaGs4ODE1X29uZW5hbmRfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG5oazg4MTVfcGxhdGZvcm1fZGV2aWNlcywKIAkJCSAgICAgQVJSQVlfU0laRShuaGs4ODE1X3BsYXRmb3JtX2RldmljZXMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9mc21jLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2ZzbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJjMDUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9mc21jLmgKQEAgLTAsMCArMSwyOSBAQAorCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIE5vbWFkaWsgRlNNQyAiRmxleGlibGUgU3RhdGljIE1lbW9yeSBjb250cm9sbGVyIiAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfRlNNQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRlNNQ19ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisvKgorICogUmVnaXN0ZXIgbGlzdAorICovCisKKy8qIGJ1cyBjb250cm9sIHJlZy4gYW5kIGJ1cyB0aW1pbmcgcmVnLiBmb3IgQ1MwLi5DUzMgKi8KKyNkZWZpbmUgRlNNQ19CQ1IoeCkgICAgIChOT01BRElLX0ZTTUNfVkEgKyAoeCA8PCAzKSkKKyNkZWZpbmUgRlNNQ19CVFIoeCkgICAgIChOT01BRElLX0ZTTUNfVkEgKyAoeCA8PCAzKSArIDB4MDQpCisKKy8qIFBDLWNhcmQgYW5kIE5BTkQ6CisgKiBQQ1IgPSBjb250cm9sIHJlZ2lzdGVyCisgKiBQTUVNID0gbWVtb3J5IHRpbWluZworICogUEFUVCA9IGF0dHJpYnV0ZSB0aW1pbmcKKyAqIFBJTyA9IEkvTyB0aW1pbmcKKyAqIFBFQ0NSID0gRUNDIHJlc3VsdAorICovCisjZGVmaW5lIEZTTUNfUENSKHgpICAgICAoTk9NQURJS19GU01DX1ZBICsgKCgyICsgeCkgPDwgNSkgKyAweDAwKQorI2RlZmluZSBGU01DX1BNRU0oeCkgICAgKE5PTUFESUtfRlNNQ19WQSArICgoMiArIHgpIDw8IDUpICsgMHgwOCkKKyNkZWZpbmUgRlNNQ19QQVRUKHgpICAgIChOT01BRElLX0ZTTUNfVkEgKyAoKDIgKyB4KSA8PCA1KSArIDB4MGMpCisjZGVmaW5lIEZTTUNfUElPKHgpICAgICAoTk9NQURJS19GU01DX1ZBICsgKCgyICsgeCkgPDwgNSkgKyAweDEwKQorI2RlZmluZSBGU01DX1BFQ0NSKHgpICAgKE5PTUFESUtfRlNNQ19WQSArICgoMiArIHgpIDw8IDUpICsgMHgxNCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRlNNQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL25hbmQuaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvbmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzgyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL25hbmQuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfTkFORF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTkFORF9ICisKK3N0cnVjdCBub21hZGlrX25hbmRfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCWludCBucGFydHM7CisJaW50IG9wdGlvbnM7CisJaW50ICgqaW5pdCkgKHZvaWQpOworCWludCAoKmV4aXQpICh2b2lkKTsKK307CisKKyNkZWZpbmUgTkFORF9JT19EQVRBCTB4NDAwMDAwMDAKKyNkZWZpbmUgTkFORF9JT19DTUQJMHg0MDgwMDAwMAorI2RlZmluZSBOQU5EX0lPX0FERFIJMHg0MTAwMDAwMAorCisjZW5kaWYJCQkJLyogX19BU01fQVJDSF9OQU5EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggN2EyYjU0Yy4uYTExMzIyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGFwb2xsb25fZmxhc2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhIGFwb2xsb25fZmxhc2hfZGF0YSA9IHsKIAkucGFydHMJCT0gYXBvbGxvbl9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoYXBvbGxvbl9wYXJ0aXRpb25zKSwKIH07CkBAIC05OSw3ICs5OSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcG9sbG9uX29uZW5hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbmVuYW5kIiwKKwkubmFtZQkJPSAib25lbmFuZC1mbGFzaCIsCiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZhcG9sbG9uX2ZsYXNoX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGU3MGJhYTcuLmU2ZTgyOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CkBAIC0xMDIsNiArMTAzLDcgQEAKIAkJLmNvdmVyX29ubHkJPSB0cnVlLAogCQkuZ3Bpb19jZAk9IDE2MCwKIAkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCQkucG93ZXJfc2F2aW5nCT0gdHJ1ZSwKIAl9LAogCXsKIAkJLm5hbWUJCT0gImludGVybmFsIiwKQEAgLTEwOSw2ICsxMTEsOCBAQAogCQkud2lyZXMJCT0gOCwKIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJCS5ub25yZW1vdmFibGUJPSB0cnVlLAorCQkucG93ZXJfc2F2aW5nCT0gdHJ1ZSwKIAl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IGEyZTkxNTYuLmJjZmNmYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC0yNTcsNiArMjU3LDExIEBACiAjZGVmaW5lIE9NQVAyX01DU1BJM19CQVNFCQkweDQ4MGI4MDAwCiAjZGVmaW5lIE9NQVAyX01DU1BJNF9CQVNFCQkweDQ4MGJhMDAwCiAKKyNkZWZpbmUgT01BUDRfTUNTUEkxX0JBU0UJCTB4NDgwOTgxMDAKKyNkZWZpbmUgT01BUDRfTUNTUEkyX0JBU0UJCTB4NDgwOWExMDAKKyNkZWZpbmUgT01BUDRfTUNTUEkzX0JBU0UJCTB4NDgwYjgxMDAKKyNkZWZpbmUgT01BUDRfTUNTUEk0X0JBU0UJCTB4NDgwYmExMDAKKwogc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkxX2NvbmZpZyA9IHsKIAkubnVtX2NzCQk9IDQsCiB9OwpAQCAtMzAxLDcgKzMwNiw4IEBACiAJfSwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkzX2NvbmZpZyA9IHsKIAkubnVtX2NzCQk9IDIsCiB9OwpAQCAtMzI1LDcgKzMzMSw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiBzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTRfY29uZmlnID0gewogCS5udW1fY3MJCT0gMSwKIH07CkBAIC0zNTEsMTQgKzM1NywyNSBAQAogCiBzdGF0aWMgdm9pZCBvbWFwX2luaXRfbWNzcGkodm9pZCkKIHsKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMV9CQVNFOworCQlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMV9CQVNFICsgMHhmZjsKKwkJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOworCQlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMl9CQVNFICsgMHhmZjsKKwkJb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJM19CQVNFOworCQlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKKwkJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJNF9CQVNFOworCQlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJNF9CQVNFICsgMHhmZjsKKwl9CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTEpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkyKTsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0M3goKSkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCiAJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkzKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi0JaWYgKGNwdV9pc19vbWFwMzQzeCgpKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisJaWYgKGNwdV9pc19vbWFwMzQzeCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKQogCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpNCk7CiAjZW5kaWYKIH0KQEAgLTM5Nyw3ICs0MTQsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogCiAjZGVmaW5lIE1NQ0hTX1NZU0NPTkZJRwkJCTB4MDAxMAogI2RlZmluZSBNTUNIU19TWVNDT05GSUdfU1dSRVNFVAkJKDEgPDwgMSkKQEAgLTQyNCw4ICs0NDEsOCBAQAogICoqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaHNtbWNfcmVzZXQodm9pZCkKIHsKLQl1MzIgaSwgbnJfY29udHJvbGxlcnMgPSBjcHVfaXNfb21hcDM0eHgoKSA/IE9NQVAzNFhYX05SX01NQyA6Ci0JCU9NQVAyNFhYX05SX01NQzsKKwl1MzIgaSwgbnJfY29udHJvbGxlcnMgPSBjcHVfaXNfb21hcDQ0eHgoKSA/IE9NQVA0NFhYX05SX01NQyA6CisJCShjcHVfaXNfb21hcDM0eHgoKSA/IE9NQVAzNFhYX05SX01NQyA6IE9NQVAyNFhYX05SX01NQyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfY29udHJvbGxlcnM7IGkrKykgewogCQl1MzIgdiwgYmFzZSA9IDA7CkBAIC00NDIsOCArNDU5LDIxIEBACiAJCWNhc2UgMjoKIAkJCWJhc2UgPSBPTUFQM19NTUMzX0JBU0U7CiAJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJCQlyZXR1cm47CisJCQliYXNlID0gT01BUDRfTU1DNF9CQVNFOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCQkJcmV0dXJuOworCQkJYmFzZSA9IE9NQVA0X01NQzVfQkFTRTsKKwkJCWJyZWFrOwogCQl9CiAKKwkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQkJYmFzZSArPSBPTUFQNF9NTUNfUkVHX09GRlNFVDsKKwogCQlkdW1teV9wZGV2LmlkID0gaTsKIAkJZGV2X3NldF9uYW1lKCZkdW1teV9wZGV2LmRldiwgIm1tY2ktb21hcC1ocy4lZCIsIGkpOwogCQlpY2xrID0gY2xrX2dldChkZXYsICJpY2siKTsKQEAgLTU4MSwxMSArNjExLDIzIEBACiAJCQlpcnEgPSBJTlRfMjRYWF9NTUMyX0lSUTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSAmJiAhY3B1X2lzX29tYXAzNHh4KCkpCiAJCQkJcmV0dXJuOwogCQkJYmFzZSA9IE9NQVAzX01NQzNfQkFTRTsKIAkJCWlycSA9IElOVF8zNFhYX01NQzNfSVJROwogCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCQkJcmV0dXJuOworCQkJYmFzZSA9IE9NQVA0X01NQzRfQkFTRSArIE9NQVA0X01NQ19SRUdfT0ZGU0VUOworCQkJaXJxID0gSU5UXzQ0WFhfTU1DNF9JUlE7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJCQlyZXR1cm47CisJCQliYXNlID0gT01BUDRfTU1DNV9CQVNFICsgT01BUDRfTU1DX1JFR19PRkZTRVQ7CisJCQlpcnEgPSBJTlRfNDRYWF9NTUM1X0lSUTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJY29udGludWU7CiAJCX0KQEAgLTU5Myw4ICs2MzUsMTUgQEAKIAkJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CiAJCQlzaXplID0gT01BUDI0MjBfTU1DX1NJWkU7CiAJCQluYW1lID0gIm1tY2ktb21hcCI7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCWlmIChpIDwgMykgeworCQkJCWJhc2UgKz0gT01BUDRfTU1DX1JFR19PRkZTRVQ7CisJCQkJaXJxICs9IElSUV9HSUNfU1RBUlQ7CisJCQl9CisJCQlzaXplID0gT01BUDRfSFNNTUNfU0laRTsKKwkJCW5hbWUgPSAibW1jaS1vbWFwLWhzIjsKIAkJfSBlbHNlIHsKLQkJCXNpemUgPSBIU01NQ19TSVpFOworCQkJc2l6ZSA9IE9NQVAzX0hTTU1DX1NJWkU7CiAJCQluYW1lID0gIm1tY2ktb21hcC1ocyI7CiAJCX0KIAkJb21hcF9tbWNfYWRkKG5hbWUsIGksIGJhc2UsIHNpemUsIGlycSwgbW1jX2RhdGFbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwppbmRleCBmOTE5MzRiLi4xNTg3NjgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwpAQCAtNTcsNiArNTcsMTEgQEAKICNkZWZpbmUgR1BNQ19DSFVOS19TSElGVAkyNAkJLyogMTYgTUIgKi8KICNkZWZpbmUgR1BNQ19TRUNUSU9OX1NISUZUCTI4CQkvKiAxMjggTUIgKi8KIAorI2RlZmluZSBQUkVGRVRDSF9GSUZPVEhSRVNIT0xECSgweDQwIDw8IDgpCisjZGVmaW5lIENTX05VTV9TSElGVAkJMjQKKyNkZWZpbmUgRU5BQkxFX1BSRUZFVENICQkoMHgxIDw8IDcpCisjZGVmaW5lIERNQV9NUFVfTU9ERQkJMgorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlCWdwbWNfbWVtX3Jvb3Q7CiBzdGF0aWMgc3RydWN0IHJlc291cmNlCWdwbWNfY3NfbWVtW0dQTUNfQ1NfTlVNXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3BtY19tZW1fbG9jayk7CkBAIC0zODYsNiArMzkxLDYzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGdwbWNfY3NfZnJlZSk7CiAKKy8qKgorICogZ3BtY19wcmVmZXRjaF9lbmFibGUgLSBjb25maWd1cmVzIGFuZCBzdGFydHMgcHJlZmV0Y2ggdHJhbnNmZXIKKyAqIEBjczogbmFuZCBjcyAoY2hpcCBzZWxlY3QpIG51bWJlcgorICogQGRtYV9tb2RlOiBkbWEgbW9kZSBlbmFibGUgKDEpIG9yIGRpc2FibGUgKDApCisgKiBAdTMyX2NvdW50OiBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQKKyAqIEBpc193cml0ZTogcHJlZmV0Y2ggcmVhZCgwKSBvciB3cml0ZSBwb3N0KDEpIG1vZGUKKyAqLworaW50IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGludCBjcywgaW50IGRtYV9tb2RlLAorCQkJCXVuc2lnbmVkIGludCB1MzJfY291bnQsIGludCBpc193cml0ZSkKK3sKKwl1aW50MzJfdCBwcmVmZXRjaF9jb25maWcxOworCisJaWYgKCEoZ3BtY19yZWFkX3JlZyhHUE1DX1BSRUZFVENIX0NPTlRST0wpKSkgeworCQkvKiBTZXQgdGhlIGFtb3VudCBvZiBieXRlcyB0byBiZSBwcmVmZXRjaGVkICovCisJCWdwbWNfd3JpdGVfcmVnKEdQTUNfUFJFRkVUQ0hfQ09ORklHMiwgdTMyX2NvdW50KTsKKworCQkvKiBTZXQgZG1hL21wdSBtb2RlLCB0aGUgcHJlZmV0Y2ggcmVhZCAvIHBvc3Qgd3JpdGUgYW5kCisJCSAqIGVuYWJsZSB0aGUgZW5naW5lLiBTZXQgd2hpY2ggY3MgaXMgaGFzIHJlcXVlc3RlZCBmb3IuCisJCSAqLworCQlwcmVmZXRjaF9jb25maWcxID0gKChjcyA8PCBDU19OVU1fU0hJRlQpIHwKKwkJCQkJUFJFRkVUQ0hfRklGT1RIUkVTSE9MRCB8CisJCQkJCUVOQUJMRV9QUkVGRVRDSCB8CisJCQkJCShkbWFfbW9kZSA8PCBETUFfTVBVX01PREUpIHwKKwkJCQkJKDB4MSAmIGlzX3dyaXRlKSk7CisJCWdwbWNfd3JpdGVfcmVnKEdQTUNfUFJFRkVUQ0hfQ09ORklHMSwgcHJlZmV0Y2hfY29uZmlnMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJLyogIFN0YXJ0IHRoZSBwcmVmZXRjaCBlbmdpbmUgKi8KKwlncG1jX3dyaXRlX3JlZyhHUE1DX1BSRUZFVENIX0NPTlRST0wsIDB4MSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ3BtY19wcmVmZXRjaF9lbmFibGUpOworCisvKioKKyAqIGdwbWNfcHJlZmV0Y2hfcmVzZXQgLSBkaXNhYmxlcyBhbmQgc3RvcHMgdGhlIHByZWZldGNoIGVuZ2luZQorICovCit2b2lkIGdwbWNfcHJlZmV0Y2hfcmVzZXQodm9pZCkKK3sKKwkvKiBTdG9wIHRoZSBQRlBXIGVuZ2luZSAqLworCWdwbWNfd3JpdGVfcmVnKEdQTUNfUFJFRkVUQ0hfQ09OVFJPTCwgMHgwKTsKKworCS8qIFJlc2V0L2Rpc2FibGUgdGhlIFBGUFcgZW5naW5lICovCisJZ3BtY193cml0ZV9yZWcoR1BNQ19QUkVGRVRDSF9DT05GSUcxLCAweDApOworfQorRVhQT1JUX1NZTUJPTChncG1jX3ByZWZldGNoX3Jlc2V0KTsKKworLyoqCisgKiBncG1jX3ByZWZldGNoX3N0YXR1cyAtIHJlYWRzIHByZWZldGNoIHN0YXR1cyBvZiBlbmdpbmUKKyAqLworaW50ICBncG1jX3ByZWZldGNoX3N0YXR1cyh2b2lkKQoreworCXJldHVybiBncG1jX3JlYWRfcmVnKEdQTUNfUFJFRkVUQ0hfU1RBVFVTKTsKK30KK0VYUE9SVF9TWU1CT0woZ3BtY19wcmVmZXRjaF9zdGF0dXMpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgZ3BtY19tZW1faW5pdCh2b2lkKQogewogCWludCBjczsKQEAgLTQ1Miw2ICs1MTQsNSBAQAogCWwgJj0gMHgwMyA8PCAzOwogCWwgfD0gKDB4MDIgPDwgMykgfCAoMSA8PCAwKTsKIAlncG1jX3dyaXRlX3JlZyhHUE1DX1NZU0NPTkZJRywgbCk7Ci0KIAlncG1jX21lbV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKaW5kZXggM2MwNGMyZi4uYzljNTlhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYwpAQCAtMTk4LDYgKzE5OCwxOCBAQAogI2RlZmluZSB0d2xfbW1jX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpICYmIGRlZmluZWQoQ09ORklHX1BNKQorCitzdGF0aWMgaW50IHR3bDQwMzBfbW1jX2dldF9jb250ZXh0X2xvc3Moc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIEZJWE1FOiBQTSBEUFMgbm90IGltcGxlbWVudGVkIHlldCAqLworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSB0d2w0MDMwX21tY19nZXRfY29udGV4dF9sb3NzIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgaW50IHR3bF9tbWMxX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCiAJCQkJaW50IHZkZCkKIHsKQEAgLTMyOCw2ICszNDAsNjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHR3bF9tbWMxX3NldF9zbGVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsIGludCB2ZGQsCisJCQkgICAgICBpbnQgY2FyZHNsZWVwKQoreworCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMgPSAmaHNtbWNbMF07CisJaW50IG1vZGUgPSBzbGVlcCA/IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlkgOiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CisKKwlyZXR1cm4gcmVndWxhdG9yX3NldF9tb2RlKGMtPnZjYywgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgdHdsX21tYzIzX3NldF9zbGVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsIGludCB2ZGQsCisJCQkgICAgICAgaW50IGNhcmRzbGVlcCkKK3sKKwlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gTlVMTDsKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWludCBpLCBlcnIsIG1vZGU7CisKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShoc21tYyk7IGkrKykgeworCQlpZiAobW1jID09IGhzbW1jW2ldLm1tYykgeworCQkJYyA9ICZoc21tY1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IHNlZSBhIFZjYyByZWd1bGF0b3IsIGFzc3VtZSBpdCdzIGEgZml4ZWQKKwkgKiB2b2x0YWdlIGFsd2F5cy1vbiByZWd1bGF0b3IuCisJICovCisJaWYgKCFjLT52Y2MpCisJCXJldHVybiAwOworCisJbW9kZSA9IHNsZWVwID8gUkVHVUxBVE9SX01PREVfU1RBTkRCWSA6IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKworCWlmICghYy0+dmNjX2F1eCkKKwkJcmV0dXJuIHJlZ3VsYXRvcl9zZXRfbW9kZShjLT52Y2MsIG1vZGUpOworCisJaWYgKGNhcmRzbGVlcCkgeworCQkvKiBWQ0MgY2FuIGJlIHR1cm5lZCBvZmYgaWYgY2FyZCBpcyBhc2xlZXAgKi8KKwkJc3RydWN0IHJlZ3VsYXRvciAqdmNjX2F1eCA9IGMtPnZjY19hdXg7CisKKwkJYy0+dmNjX2F1eCA9IE5VTEw7CisJCWlmIChzbGVlcCkKKwkJCWVyciA9IHR3bF9tbWMyM19zZXRfcG93ZXIoZGV2LCBzbG90LCAwLCAwKTsKKwkJZWxzZQorCQkJZXJyID0gdHdsX21tYzIzX3NldF9wb3dlcihkZXYsIHNsb3QsIDEsIHZkZCk7CisJCWMtPnZjY19hdXggPSB2Y2NfYXV4OworCX0gZWxzZQorCQllcnIgPSByZWd1bGF0b3Jfc2V0X21vZGUoYy0+dmNjLCBtb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiByZWd1bGF0b3Jfc2V0X21vZGUoYy0+dmNjX2F1eCwgbW9kZSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqaHNtbWNfZGF0YVtPTUFQMzRYWF9OUl9NTUNdIF9faW5pdGRhdGE7CiAKIHZvaWQgX19pbml0IHR3bDQwMzBfbW1jX2luaXQoc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyAqY29udHJvbGxlcnMpCkBAIC0zOTAsNiArNDU3LDkgQEAKIAkJfSBlbHNlCiAJCQltbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSAtRUlOVkFMOwogCisJCW1tYy0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCA9CisJCQkJdHdsNDAzMF9tbWNfZ2V0X2NvbnRleHRfbG9zczsKKwogCQkvKiB3cml0ZSBwcm90ZWN0IG5vcm1hbGx5IHVzZXMgYW4gT01BUCBncGlvICovCiAJCWlmIChncGlvX2lzX3ZhbGlkKGMtPmdwaW9fd3ApKSB7CiAJCQlncGlvX3JlcXVlc3QoYy0+Z3Bpb193cCwgIm1tY193cCIpOwpAQCAtNDAwLDYgKzQ3MCwxMiBAQAogCQl9IGVsc2UKIAkJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IC1FSU5WQUw7CiAKKwkJaWYgKGMtPm5vbnJlbW92YWJsZSkKKwkJCW1tYy0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gMTsKKworCQlpZiAoYy0+cG93ZXJfc2F2aW5nKQorCQkJbW1jLT5zbG90c1swXS5wb3dlcl9zYXZpbmcgPSAxOworCiAJCS8qIE5PVEU6ICBNTUMgc2xvdHMgc2hvdWxkIGhhdmUgYSBWY2MgcmVndWxhdG9yIHNldCB1cC4KIAkJICogVGhpcyBtYXkgYmUgZnJvbSBhIFRXTDQwMzAtZmFtaWx5IGNoaXAsIGFub3RoZXIKIAkJICogY29udHJvbGxhYmxlIHJlZ3VsYXRvciwgb3IgYSBmaXhlZCBzdXBwbHkuCkBAIC00MTIsNiArNDg4LDcgQEAKIAkJY2FzZSAxOgogCQkJLyogb24tY2hpcCBsZXZlbCBzaGlmdGluZyB2aWEgUEJJQVMwL1BCSUFTMSAqLwogCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSB0d2xfbW1jMV9zZXRfcG93ZXI7CisJCQltbWMtPnNsb3RzWzBdLnNldF9zbGVlcCA9IHR3bF9tbWMxX3NldF9zbGVlcDsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQlpZiAoYy0+ZXh0X2Nsb2NrKQpAQCAtNDIyLDYgKzQ5OSw3IEBACiAJCWNhc2UgMzoKIAkJCS8qIG9mZi1jaGlwIGxldmVsIHNoaWZ0aW5nLCBvciBub25lICovCiAJCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IHR3bF9tbWMyM19zZXRfcG93ZXI7CisJCQltbWMtPnNsb3RzWzBdLnNldF9zbGVlcCA9IHR3bF9tbWMyM19zZXRfc2xlZXA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaAppbmRleCAzODA3YzQ1Li5hNDdlNjg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oCkBAIC0xMiw2ICsxMiw4IEBACiAJYm9vbAl0cmFuc2NlaXZlcjsJLyogTU1DLTIgb3B0aW9uICovCiAJYm9vbAlleHRfY2xvY2s7CS8qIHVzZSBleHRlcm5hbCBwaW4gZm9yIGlucHV0IGNsb2NrICovCiAJYm9vbAljb3Zlcl9vbmx5OwkvKiBObyBjYXJkIGRldGVjdCAtIGp1c3QgY292ZXIgc3dpdGNoICovCisJYm9vbAlub25yZW1vdmFibGU7CS8qIE5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KKwlib29sCXBvd2VyX3NhdmluZzsJLyogVHJ5IHRvIHNsZWVwIG9yIHBvd2VyIG9mZiB3aGVuIHBvc3NpYmxlICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwogCWNoYXIJKm5hbWU7CQkvKiBvciBOVUxMIGZvciBkZWZhdWx0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggZWEzNjE4Ni4uZjk4MjYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtNTk2LDggKzU5Niw4IEBACiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIk1lbW9yeTogJWx1S0IgYXZhaWxhYmxlICglZEsgY29kZSwgIgogCQkiJWRLIGRhdGEsICVkSyBpbml0LCAlbHVLIGhpZ2htZW0pXG4iLAotCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKLQkJY29kZXNpemUgPj4gMTAsIGRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwgY29kZXNpemUgPj4gMTAsCisJCWRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCwKIAkJKHVuc2lnbmVkIGxvbmcpICh0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKSk7CiAKIAlpZiAoUEFHRV9TSVpFID49IDE2Mzg0ICYmIG51bV9waHlzcGFnZXMgPD0gMTI4KSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3BpLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiZTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zcGkuaApAQCAtMCwwICsxLDI3IEBACisKKyNpZm5kZWYgX19NQUNIX1NQSV9IXworI2RlZmluZSBfX01BQ0hfU1BJX0hfCisKKy8qCisgKiBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgLSBkZXZpY2UucGxhdGZvcm1fZGF0YSBmb3IgU1BJIGNvbnRyb2xsZXIgZGV2aWNlcy4KKyAqIEBjaGlwc2VsZWN0OiBBcnJheSBvZiBjaGlwc2VsZWN0cyBmb3IgdGhpcyBtYXN0ZXIuIE51bWJlcnMgPj0gMCBtZWFuIGdwaW8KKyAqICAgICAgICAgICAgICBwaW5zLCBudW1iZXJzIDwgMCBtZWFuIGludGVybmFsIENTUEkgY2hpcHNlbGVjdHMgYWNjb3JkaW5nCisgKiAgICAgICAgICAgICAgdG8gTVhDX1NQSV9DUygpLiBOb3JtYWxseSB5b3Ugd2FudCB0byB1c2UgZ3BpbyBiYXNlZCBjaGlwCisgKiAgICAgICAgICAgICAgc2VsZWN0cyBhcyB0aGUgQ1NQSSBtb2R1bGUgdHJpZXMgdG8gYmUgaW50ZWxsaWdlbnQgYWJvdXQKKyAqICAgICAgICAgICAgICB3aGVuIHRvIGFzc2VydCB0aGUgY2hpcHNlbGVjdDogVGhlIENTUEkgbW9kdWxlIGRlYXNzZXJ0cyB0aGUKKyAqICAgICAgICAgICAgICBjaGlwc2VsZWN0IG9uY2UgaXQgcnVucyBvdXQgb2YgaW5wdXQgZGF0YS4gVGhlIG90aGVyIHByb2JsZW0KKyAqICAgICAgICAgICAgICBpcyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBtaXggYmV0d2VlbiBoaWdoIGFjdGl2ZSBhbmQgbG93CisgKiAgICAgICAgICAgICAgYWN0aXZlIGNoaXBzZWxlY3RzIG9uIG9uZSBzaW5nbGUgYnVzIHVzaW5nIHRoZSBpbnRlcm5hbAorICogICAgICAgICAgICAgIGNoaXBzZWxlY3RzLiBVbmZvcnR1bmF0ZWx5IEZyZWVzY2FsZSBkZWNpZGVkIHRvIHB1dCBzb21lCisgKiAgICAgICAgICAgICAgY2hpcHNlbGVjdHMgb24gZGVkaWNhdGVkIHBpbnMgd2hpY2ggYXJlIG5vdCB1c2FibGUgYXMgZ3Bpb3MsCisgKiAgICAgICAgICAgICAgc28gd2UgaGF2ZSB0byBzdXBwb3J0IHRoZSBpbnRlcm5hbCBjaGlwc2VsZWN0cy4KKyAqIEBudW1fY2hpcHNlbGVjdDogQVJSQVlfU0laRShjaGlwc2VsZWN0KQorICovCitzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgeworCWludAkqY2hpcHNlbGVjdDsKKwlpbnQJbnVtX2NoaXBzZWxlY3Q7Cit9OworCisjZGVmaW5lIE1YQ19TUElfQ1Mobm8pCSgobm8pIC0gMzIpCisKKyNlbmRpZiAvKiBfX01BQ0hfU1BJX0hfKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKaW5kZXggOTIxYjE2NS4uOWM5OWNkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKQEAgLTEwMyw2ICsxMDMsMTAgQEAKIGV4dGVybiB2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpOwogZXh0ZXJuIGludCBncG1jX2NzX3NldF9yZXNlcnZlZChpbnQgY3MsIGludCByZXNlcnZlZCk7CiBleHRlcm4gaW50IGdwbWNfY3NfcmVzZXJ2ZWQoaW50IGNzKTsKK2V4dGVybiBpbnQgZ3BtY19wcmVmZXRjaF9lbmFibGUoaW50IGNzLCBpbnQgZG1hX21vZGUsCisJCQkJCXVuc2lnbmVkIGludCB1MzJfY291bnQsIGludCBpc193cml0ZSk7CitleHRlcm4gdm9pZCBncG1jX3ByZWZldGNoX3Jlc2V0KHZvaWQpOworZXh0ZXJuIGludCBncG1jX3ByZWZldGNoX3N0YXR1cyh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBncG1jX2luaXQodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBmYjdjYjc3Li4yOGExNjUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNTAzLDYgKzUwMyw3IEBACiAjZGVmaW5lIElOVF80NFhYX0ZQS0FfUkVBRFlfSVJRCSg1MCArIElSUV9HSUNfU1RBUlQpCiAjZGVmaW5lIElOVF80NFhYX1NIQTFNRDUxX0lSUQkoNTEgKyBJUlFfR0lDX1NUQVJUKQogI2RlZmluZSBJTlRfNDRYWF9STkdfSVJRCSg1MiArIElSUV9HSUNfU1RBUlQpCisjZGVmaW5lIElOVF80NFhYX01NQzVfSVJRCSg1OSArIElSUV9HSUNfU1RBUlQpCiAjZGVmaW5lIElOVF80NFhYX0kyQzNfSVJRCSg2MSArIElSUV9HSUNfU1RBUlQpCiAjZGVmaW5lIElOVF80NFhYX0ZQS0FfRVJST1JfSVJRCSg2NCArIElSUV9HSUNfU1RBUlQpCiAjZGVmaW5lIElOVF80NFhYX1BCSUFTX0lSUQkoNzUgKyBJUlFfR0lDX1NUQVJUKQpAQCAtNTExLDYgKzUxMiw3IEBACiAjZGVmaW5lIElOVF80NFhYX1RMTF9JUlEJKDc4ICsgSVJRX0dJQ19TVEFSVCkKICNkZWZpbmUgSU5UXzQ0WFhfUEFSVEhBU0hfSVJRCSg3OSArIElSUV9HSUNfU1RBUlQpCiAjZGVmaW5lIElOVF80NFhYX01NQzNfSVJRCSg5NCArIElSUV9HSUNfU1RBUlQpCisjZGVmaW5lIElOVF80NFhYX01NQzRfSVJRCSg5NiArIElSUV9HSUNfU1RBUlQpCiAKIAogLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMC84NTApIGFuZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9sY2RfbWlwaWQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbGNkX21pcGlkLmgKaW5kZXggZjhmYmM0OC4uOGU1MmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9sY2RfbWlwaWQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2xjZF9taXBpZC5oCkBAIC0xNiw3ICsxNiwxMiBAQAogc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgewogCWludAlucmVzZXRfZ3BpbzsKIAlpbnQJZGF0YV9saW5lczsKKwogCXZvaWQJKCpzaHV0ZG93bikoc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKKwl2b2lkCSgqc2V0X2JrbGlnaHRfbGV2ZWwpKHN0cnVjdCBtaXBpZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCQkgICAgIGludCBsZXZlbCk7CisJaW50CSgqZ2V0X2JrbGlnaHRfbGV2ZWwpKHN0cnVjdCBtaXBpZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisJaW50CSgqZ2V0X2JrbGlnaHRfbWF4KShzdHJ1Y3QgbWlwaWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaAppbmRleCA4MWQ1YjM2Li43MjI5Yjk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTI1LDExICsyNSwxOCBAQAogCiAjZGVmaW5lIE9NQVAyNFhYX05SX01NQwkJMgogI2RlZmluZSBPTUFQMzRYWF9OUl9NTUMJCTMKKyNkZWZpbmUgT01BUDQ0WFhfTlJfTU1DCQk1CiAjZGVmaW5lIE9NQVAyNDIwX01NQ19TSVpFCU9NQVAxX01NQ19TSVpFCi0jZGVmaW5lIEhTTU1DX1NJWkUJCTB4MjAwCisjZGVmaW5lIE9NQVAzX0hTTU1DX1NJWkUJMHgyMDAKKyNkZWZpbmUgT01BUDRfSFNNTUNfU0laRQkweDEwMDAKICNkZWZpbmUgT01BUDJfTU1DMV9CQVNFCQkweDQ4MDljMDAwCiAjZGVmaW5lIE9NQVAyX01NQzJfQkFTRQkJMHg0ODBiNDAwMAogI2RlZmluZSBPTUFQM19NTUMzX0JBU0UJCTB4NDgwYWQwMDAKKyNkZWZpbmUgT01BUDRfTU1DNF9CQVNFCQkweDQ4MGQxMDAwCisjZGVmaW5lIE9NQVA0X01NQzVfQkFTRQkJMHg0ODBkNTAwMAorI2RlZmluZSBPTUFQNF9NTUNfUkVHX09GRlNFVAkweDEwMAorI2RlZmluZSBIU01NQzUJCQkoMSA8PCA0KQorI2RlZmluZSBIU01NQzQJCQkoMSA8PCAzKQogI2RlZmluZSBIU01NQzMJCQkoMSA8PCAyKQogI2RlZmluZSBIU01NQzIJCQkoMSA8PCAxKQogI2RlZmluZSBIU01NQzEJCQkoMSA8PCAwKQpAQCAtNTksNiArNjYsOSBAQAogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCk7CiAKKwkvKiBSZXR1cm4gY29udGV4dCBsb3NzIGNvdW50IGR1ZSB0byBQTSBzdGF0ZXMgY2hhbmdpbmcgKi8KKwlpbnQgKCpnZXRfY29udGV4dF9sb3NzX2NvdW50KShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCiAJdTY0IGRtYV9tYXNrOwogCiAJc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSB7CkBAIC04MCwxMiArOTAsMjAgQEAKIAkJLyogdXNlIHRoZSBpbnRlcm5hbCBjbG9jayAqLwogCQl1bnNpZ25lZCBpbnRlcm5hbF9jbG9jazoxOwogCisJCS8qIG5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KKwkJdW5zaWduZWQgbm9ucmVtb3ZhYmxlOjE7CisKKwkJLyogVHJ5IHRvIHNsZWVwIG9yIHBvd2VyIG9mZiB3aGVuIHBvc3NpYmxlICovCisJCXVuc2lnbmVkIHBvd2VyX3NhdmluZzoxOworCiAJCWludCBzd2l0Y2hfcGluOwkJCS8qIGdwaW8gKGNhcmQgZGV0ZWN0KSAqLwogCQlpbnQgZ3Bpb193cDsJCQkvKiBncGlvICh3cml0ZSBwcm90ZWN0KSAqLwogCiAJCWludCAoKiBzZXRfYnVzX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBidXNfbW9kZSk7CiAJCWludCAoKiBzZXRfcG93ZXIpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CiAJCWludCAoKiBnZXRfcm8pKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOworCQlpbnQgKCpzZXRfc2xlZXApKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwKKwkJCQkgaW50IHZkZCwgaW50IGNhcmRzbGVlcCk7CiAKIAkJLyogcmV0dXJuIE1NQyBjb3ZlciBzd2l0Y2ggc3RhdGUsIGNhbiBiZSBOVUxMIGlmIG5vdCBzdXBwb3J0ZWQuCiAJCSAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwZmIuaAppbmRleCA3Yjc0ZDEyLi5iMjI2YmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcGZiLmgKQEAgLTI3Niw4ICsyNzYsOCBAQAogCQkJCQkgIHZvaWQgKmZiaSk7CiAKIHN0cnVjdCBvbWFwZmJfbWVtX3JlZ2lvbiB7Ci0JZG1hX2FkZHJfdAlwYWRkcjsKLQl2b2lkCQkqdmFkZHI7CisJdTMyCQlwYWRkcjsKKwl2b2lkIF9faW9tZW0JKnZhZGRyOwogCXVuc2lnbmVkIGxvbmcJc2l6ZTsKIAl1OAkJdHlwZTsJCS8qIE9NQVBGQl9QTEFORV9NRU1fKiAqLwogCXVuc2lnbmVkCWFsbG9jOjE7CS8qIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IDlhOTJiMTUuLjhlZWJmODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE3ICsxIEBACi0jaWZuZGVmIF9fQVNNX0FWUjMyX01NQU5fSF9fCi0jZGVmaW5lIF9fQVNNX0FWUjMyX01NQU5fSF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogX19BU01fQVZSMzJfTU1BTl9IX18gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21tL2luaXQuYyBiL2FyY2gvYXZyMzIvbW0vaW5pdC5jCmluZGV4IGNjNjBkMTAuLjk0OTI1NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vaW5pdC5jCisrKyBiL2FyY2gvYXZyMzIvbW0vaW5pdC5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAogCXByaW50ayAoIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAiCiAJCSIlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAlZGsgaW5pdClcbiIsCi0JCSh1bnNpZ25lZCBsb25nKW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVCAtIDEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZUIC0gMTApLAogCQl0b3RhbHJhbV9wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKIAkJY29kZXNpemUgPj4gMTAsCiAJCXJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCksCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggZTdmZDBlYy4uYWU0ZGFlMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMSw5ICsxLDYgQEAKICNpZm5kZWYgX0JMQUNLRklOX1NFQ1RJT05TX0gKICNkZWZpbmUgX0JMQUNLRklOX1NFQ1RJT05TX0gKIAotLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgotCiAvKiBvbmx5IHVzZWQgd2hlbiBNVERfVUNMSU5VWCAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X210ZF9zdGFydCwgbWVtb3J5X210ZF9lbmQsIG10ZF9zaXplOwogCkBAIC0xNSw0ICsxMiwzOSBAQAogCV9zdGV4dF9sMltdLCBfZXRleHRfbDJbXSwgX3NkYXRhX2wyW10sIF9lZGF0YV9sMltdLCBfc2Jzc19sMltdLAogCV9lYnNzX2wyW10sIF9sMl9sbWFfc3RhcnRbXTsKIAorI2luY2x1ZGUgPGFzbS9tZW1fbWFwLmg+CisKKy8qIEJsYWNrZmluIHN5c3RlbXMgaGF2ZSBkaXNjb250aW51b3VzIG1lbW9yeSBtYXAgYW5kIG5vIHZpcnR1YWxpemVkIG1lbW9yeSAqLworc3RhdGljIGlubGluZSBpbnQgYXJjaF9pc19rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuCisJCShMMV9DT0RFX0xFTkdUSCAmJgorCQkgYWRkciA+PSAodW5zaWduZWQgbG9uZylfc3RleHRfbDEgJiYKKwkJIGFkZHIgPCAgKHVuc2lnbmVkIGxvbmcpX2V0ZXh0X2wxKQorCQl8fAorCQkoTDJfTEVOR1RIICYmCisJCSBhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zdGV4dF9sMiAmJgorCQkgYWRkciA8ICAodW5zaWduZWQgbG9uZylfZXRleHRfbDIpOworfQorI2RlZmluZSBhcmNoX2lzX2tlcm5lbF90ZXh0KGFkZHIpIGFyY2hfaXNfa2VybmVsX3RleHQoYWRkcikKKworc3RhdGljIGlubGluZSBpbnQgYXJjaF9pc19rZXJuZWxfZGF0YSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuCisJCShMMV9EQVRBX0FfTEVOR1RIICYmCisJCSBhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zZGF0YV9sMSAmJgorCQkgYWRkciA8ICAodW5zaWduZWQgbG9uZylfZWJzc19sMSkKKwkJfHwKKwkJKEwxX0RBVEFfQl9MRU5HVEggJiYKKwkJIGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3NkYXRhX2JfbDEgJiYKKwkJIGFkZHIgPCAgKHVuc2lnbmVkIGxvbmcpX2Vic3NfYl9sMSkKKwkJfHwKKwkJKEwyX0xFTkdUSCAmJgorCQkgYWRkciA+PSAodW5zaWduZWQgbG9uZylfc2RhdGFfbDIgJiYKKwkJIGFkZHIgPCAgKHVuc2lnbmVkIGxvbmcpX2Vic3NfbDIpOworfQorI2RlZmluZSBhcmNoX2lzX2tlcm5lbF9kYXRhKGFkZHIpIGFyY2hfaXNfa2VybmVsX2RhdGEoYWRkcikKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggYzhlN2VlNC4uMDJiMTUyOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zODEsNyArMzgxLDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCTM2NgogI2RlZmluZSBfX05SX3B3cml0ZXYJCTM2NwogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTM2OAotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCTM2OQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzNjkKIAogI2RlZmluZSBfX05SX3N5c2NhbGwJCTM3MAogI2RlZmluZSBOUl9zeXNjYWxscwkJX19OUl9zeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKaW5kZXggYmRjMzMwYy4uMWM1ODkxNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaApAQCAtMjMyNSw3ICsyMzI1LDcgQEAKICNkZWZpbmUJQU1CRU5fQjBfQjEJMHgwMDA0CS8qIEVuYWJsZSBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmtzIDAgJgkxIG9ubHkgKi8KICNkZWZpbmUJQU1CRU5fQjBfQjFfQjIJMHgwMDA2CS8qIEVuYWJsZSBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmtzIDAsIDEsIGFuZCAyICovCiAjZGVmaW5lCUFNQkVOX0FMTAkweDAwMDgJLyogRW5hYmxlIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFua3MgKGFsbCkgMCwgMSwJMiwgYW5kIDMgKi8KLSNkZWZpbmUJQ0RQUklPCQkweDAxMDAJLyogRE1BIGhhcyBwcmlvcml0eSBvdmVyIGNvcmUgZm9yIGZvciBleHRlcm5hbCBhY2Nlc3NlcyAqLworI2RlZmluZQlDRFBSSU8JCTB4MDEwMAkvKiBETUEgaGFzIHByaW9yaXR5IG92ZXIgY29yZSBmb3IgZXh0ZXJuYWwgYWNjZXNzZXMgKi8KIAogLyogRUJJVV9BTUdDVEwgQml0IFBvc2l0aW9ucyAqLwogI2RlZmluZQlBTUNLRU5fUAkJMHgwMDAwCS8qIEVuYWJsZSBDTEtPVVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCAwMWFmMjRjLi4xZTdjYWMyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0xNjIwLDcgKzE2MjAsNyBAQAogCS5sb25nIF9zeXNfcHJlYWR2CiAJLmxvbmcgX3N5c19wd3JpdGV2CiAJLmxvbmcgX3N5c19ydF90Z3NpZ3F1ZXVlaW5mbwotCS5sb25nIF9zeXNfcGVyZl9jb3VudGVyX29wZW4KKwkubG9uZyBfc3lzX3BlcmZfZXZlbnRfb3BlbgogCiAJLnJlcHQgTlJfc3lzY2FsbHMtKC4tX3N5c19jYWxsX3RhYmxlKS80CiAJLmxvbmcgX3N5c19uaV9zeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCBiN2YwYWZiLi44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTEsMTkgKzEgQEAKLSNpZm5kZWYgX19DUklTX01NQU5fSF9fCi0jZGVmaW5lIF9fQ1JJU19NTUFOX0hfXwotCi0vKiB2ZXJiYXRpbSBjb3B5IG9mIGFzbS1pMzg2LyB2ZXJzaW9uICovCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLQotI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCi0jZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCi0KLSNlbmRpZiAvKiBfX0NSSVNfTU1BTl9IX18gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvbW0vaW5pdC5jIGIvYXJjaC9jcmlzL21tL2luaXQuYwppbmRleCA1MTRmNDZhLi5mZjY4YjlmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvbW0vaW5pdC5jCisrKyBiL2FyY2gvY3Jpcy9tbS9pbml0LmMKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwogICAgICAgICAgICAgICAgIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAiCiAJICAgICAgICIlZGsgaW5pdClcbiIgLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgbWF4X21hcG5yIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgY29kZXNpemUgPj4gMTAsCiAJICAgICAgIHJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggYjg2ZTE5Yy4uNGI1ODMwYiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC03LDcgKzcsNyBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCi0Jc2VsZWN0IEhBVkVfUEVSRl9DT1VOVEVSUworCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAKIGNvbmZpZyBaT05FX0RNQQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2dkYi1zdHViLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9nZGItc3R1Yi5oCmluZGV4IDI0Zjk3MzguLjJkYTcxNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2dkYi1zdHViLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vZ2RiLXN0dWIuaApAQCAtOTAsNyArOTAsNiBAQAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBfX2RlYnVnX3N0dWJfaW5pdF9icmVhayh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgX19icmVha19oaWphY2tfa2VybmVsX2V2ZW50KHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBfX2JyZWFrX2hpamFja19rZXJuZWxfZXZlbnRfYnJlYWtzX2hlcmUodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHN0YXJ0X2tlcm5lbCh2b2lkKTsKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBnZGJzdHViX3J4X2hhbmRsZXIodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGdkYnN0dWJfcnhfaXJxKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IGZjNDc1MTUuLjVmYzhiNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEyLDI0ICsxMiwxNSBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci0JdW5zaWduZWQgbG9uZyBpZGxlX3RpbWVzdGFtcDsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2Vycm9yIFNNUCBub3QgYXZhaWxhYmxlIG9uIEZSLVYKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBleHRlcm4gYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfYmFkX2lycShpbnQgaXJxKQogewogCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOwogfQorI2RlZmluZSBhY2tfYmFkX2lycSBhY2tfYmFkX2lycQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA1OGMxZDExLi44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE4ICsxIEBACi0jaWZuZGVmIF9fQVNNX01NQU5fSF9fCi0jZGVmaW5lIF9fQVNNX01NQU5fSF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLQotI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCi0jZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCi0KLSNlbmRpZiAvKiBfX0FTTV9NTUFOX0hfXyAqLwotCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmNzI2ZS4uMDAwMDAwMAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIEZSViBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfQVNNX1BFUkZfQ09VTlRFUl9ICi0jZGVmaW5lIF9BU01fUEVSRl9DT1VOVEVSX0gKLQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUCTAKLQotI2VuZGlmIC8qIF9BU01fUEVSRl9DT1VOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjllMDE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEZSViBwZXJmb3JtYW5jZSBldmVudCBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9QRVJGX0VWRU5UX0gKKyNkZWZpbmUgX0FTTV9QRVJGX0VWRU5UX0gKKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkwCisKKyNlbmRpZiAvKiBfQVNNX1BFUkZfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA0YThmYjQyLi5iZTZlZjBmIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzQyLDcgKzM0Miw3IEBACiAjZGVmaW5lIF9fTlJfcHJlYWR2CQkzMzMKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzMzQKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzMzUKLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkzMzYKKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzM2CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9kZWJ1Zy1zdHViLmMgYi9hcmNoL2Zydi9rZXJuZWwvZGVidWctc3R1Yi5jCmluZGV4IDJmNmM2MGMuLjI4NDUxMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9kZWJ1Zy1zdHViLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2RlYnVnLXN0dWIuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFydF9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc2VyaWFsLXJlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKaW5kZXggZmRlMWU0NC4uMTg5Mzk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKQEAgLTE1MjUsNiArMTUyNSw2IEBACiAJLmxvbmcgc3lzX3ByZWFkdgogCS5sb25nIHN5c19wd3JpdGV2CiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCS8qIDMzNSAqLwotCS5sb25nIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KIAogc3lzY2FsbF90YWJsZV9zaXplID0gKC4gLSBzeXNfY2FsbF90YWJsZSkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDBkZTUwZGYuLjkwNDI1NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYwpAQCAtODMsMTMgKzgzLDkgQEAKICAqLwogdm9pZCBjcHVfaWRsZSh2b2lkKQogewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCWlycV9zdGF0W2NwdV0uaWRsZV90aW1lc3RhbXAgPSBqaWZmaWVzOwotCiAJCQljaGVja19wZ3RfY2FjaGUoKTsKIAogCQkJaWYgKCFmcnZfZG1hX2lucHJvZ3Jlc3MgJiYgaWRsZSkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2xpYi9NYWtlZmlsZSBiL2FyY2gvZnJ2L2xpYi9NYWtlZmlsZQppbmRleCAwYTM3NzIxLi5mNDcwOTc1IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9mcnYvbGliL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogbGliLXkgOj0gXAogCV9fYXNobGRpMy5vIF9fbHNocmRpMy5vIF9fbXVsZGkzLm8gX19hc2hyZGkzLm8gX19uZWdkaTIubyBfX3VjbXBkaTIubyBcCiAJY2hlY2tzdW0ubyBtZW1jcHkubyBtZW1zZXQubyBhdG9taWMtb3BzLm8gYXRvbWljNjQtb3BzLm8gXAotCW91dHNsX25zLm8gb3V0c2xfc3cubyBpbnNsX25zLm8gaW5zbF9zdy5vIGNhY2hlLm8gcGVyZl9jb3VudGVyLm8KKwlvdXRzbF9ucy5vIG91dHNsX3N3Lm8gaW5zbF9ucy5vIGluc2xfc3cubyBjYWNoZS5vIHBlcmZfZXZlbnQubwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbGliL2NhY2hlLlMgYi9hcmNoL2Zydi9saWIvY2FjaGUuUwppbmRleCAwZTEwYWQ4Li4wYzRmYjIwIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9saWIvY2FjaGUuUworKysgYi9hcmNoL2Zydi9saWIvY2FjaGUuUwpAQCAtMSw0ICsxLDQgQEAKLS8qIGNhY2hlLlM6IGNhY2hlIG1hbmFnbWVudCByb3V0aW5lcworLyogY2FjaGUuUzogY2FjaGUgbWFuYWdlbWVudCByb3V0aW5lcwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9saWIvcGVyZl9jb3VudGVyLmMgYi9hcmNoL2Zydi9saWIvcGVyZl9jb3VudGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDBmZWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9mcnYvbGliL3BlcmZfY291bnRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyogUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+Ci0KLS8qCi0gKiBtYXJrIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGFzIHBlbmRpbmcKLSAqLwotdm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkKLXsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2xpYi9wZXJmX2V2ZW50LmMgYi9hcmNoL2Zydi9saWIvcGVyZl9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzVhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2Zydi9saWIvcGVyZl9ldmVudC5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFBlcmZvcm1hbmNlIGV2ZW50IGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisKKy8qCisgKiBtYXJrIHRoZSBwZXJmb3JtYW5jZSBldmVudCBhcyBwZW5kaW5nCisgKi8KK3ZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCA5ZDdmN2E3Li5jMmUxYWEwIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSwxOCArMSw3IEBACiAjaWZuZGVmIF9fSDgzMDBfSEFSRElSUV9ICiAjZGVmaW5lIF9fSDgzMDBfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQotZXh0ZXJuIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjZGVmaW5lIEhBUkRJUlFfQklUUwk4CiAKQEAgLTI1LDQgKzE0LDYgQEAKICMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCiAjZW5kaWYKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IGNmMzVmMGEuLjhlZWJmODkgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE3ICsxIEBACi0jaWZuZGVmIF9fSDgzMDBfTU1BTl9IX18KLSNkZWZpbmUgX19IODMwMF9NTUFOX0hfXwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogX19IODMwMF9NTUFOX0hfXyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2lycS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKaW5kZXggNzRmOGRkNy4uNWM5MTNkNCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKQEAgLTgxLDExICs4MSw2IEBACiAJLmVuZAkJPSBoODMwMF9lbmRfaXJxLAogfTsKIAotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50aygidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX1JBTUtFUk5FTCkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCAqZ2V0X3ZlY3Rvcl9hZGRyZXNzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCmluZGV4IGU3YzZlNjEuLjIxOTNhMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCAwMTFhMWNkLi42ODUxZTUyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNTAwLDYgKzUwMCwxMCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE5VTUEKIAorY29uZmlnIEFSQ0hfUFJPQ19LQ09SRV9URVhUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gUFJPQ19LQ09SRQorCiBjb25maWcgSUEzMl9TVVBQT1JUCiAJYm9vbCAiU3VwcG9ydCBmb3IgTGludXgveDg2IGJpbmFyaWVzIgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDhjZmIwMDEuLjY3NGE4MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMjAyNiwyNCArMjAyNiwyMSBAQAogCXN0cnVjdCBpb2MgKmlvYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTY0IGhwYSwgbGVuZ3RoOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXI7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmRldl9pbmZvOwogCiAJc3RhdHVzID0gaHBfYWNwaV9jc3Jfc3BhY2UoZGV2aWNlLT5oYW5kbGUsICZocGEsICZsZW5ndGgpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIDE7CiAKLQlidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9MT0NBTF9CVUZGRVI7Ci0Jc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oZGV2aWNlLT5oYW5kbGUsICZidWZmZXIpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGRldmljZS0+aGFuZGxlLCAmZGV2X2luZm8pOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIDE7Ci0JZGV2X2luZm8gPSBidWZmZXIucG9pbnRlcjsKIAogCS8qCiAJICogRm9yIEhXUDAwMDEsIG9ubHkgU0JBIGFwcGVhcnMgaW4gQUNQSSBuYW1lc3BhY2UuICBJdCBlbmNsb3NlcyB0aGUgUENJCiAJICogcm9vdCBicmlkZ2VzLCBhbmQgaXRzIENTUiBzcGFjZSBpbmNsdWRlcyB0aGUgSU9DIGZ1bmN0aW9uLgogCSAqLwotCWlmIChzdHJuY21wKCJIV1AwMDAxIiwgZGV2X2luZm8tPmhhcmR3YXJlX2lkLnZhbHVlLCA3KSA9PSAwKSB7CisJaWYgKHN0cm5jbXAoIkhXUDAwMDEiLCBkZXZfaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nLCA3KSA9PSAwKSB7CiAJCWhwYSArPSBaWDFfSU9DX09GRlNFVDsKIAkJLyogengxIGJhc2VkIHN5c3RlbXMgZGVmYXVsdCB0byBrZXJuZWwgcGFnZSBzaXplIGlvbW11IHBhZ2VzICovCiAJCWlmICghaW92cF9zaGlmdCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCmluZGV4IDE2ZWY2MWEuLjYyNWVkOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwpAQCAtMTI3MCw3ICsxMjcwLDcgQEAKIAkgICAgICBjYXNlIFBUX0NTOgogCQlpZiAodmFsdWUgIT0gX19VU0VSX0NTKQogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImlhMzIucHV0cmVnOiBhdHRlbXB0IHRvIHRvIHNldCBpbnZhbGlkIHNlZ21lbnQgcmVnaXN0ZXIgJWQgPSAleFxuIiwKKwkJCSAgICAgICAiaWEzMi5wdXRyZWc6IGF0dGVtcHQgdG8gc2V0IGludmFsaWQgc2VnbWVudCByZWdpc3RlciAlZCA9ICV4XG4iLAogCQkJICAgICAgIHJlZ25vLCB2YWx1ZSk7CiAJCWJyZWFrOwogCSAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vY3B1dGltZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2NwdXRpbWUuaAppbmRleCBkMjBiOTk4Li43ZmE4YTg1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vY3B1dGltZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKQEAgLTMwLDYgKzMwLDcgQEAKIHR5cGVkZWYgdTY0IGNwdXRpbWU2NF90OwogCiAjZGVmaW5lIGNwdXRpbWVfemVybwkJCSgoY3B1dGltZV90KTApCisjZGVmaW5lIGNwdXRpbWVfb25lX2ppZmZ5CQlqaWZmaWVzX3RvX2NwdXRpbWUoMSkKICNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4oKGNwdXRpbWVfdCkwKSA+PiAxKSAtIDEpCiAjZGVmaW5lIGNwdXRpbWVfYWRkKF9fYSwgX19iKQkJKChfX2EpICsgIChfX2IpKQogI2RlZmluZSBjcHV0aW1lX3N1YihfX2EsIF9fYikJCSgoX19hKSAtICAoX19iKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IDQ4Y2Y4YjkuLjQ0NTkwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21tYW4uaApAQCAtOCwxOSArOCw5IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KICAqLwogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CiAKLSNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0dST1dTVVAJMHgwMDIwMAkJLyogcmVnaXN0ZXIgc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwMDgwMAkJLyogRVRYVEJTWSAqLwotI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDAxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDAyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHgwNDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLwotI2RlZmluZSBNQVBfUE9QVUxBVEUJMHgwODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLQotI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCi0jZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCisjZGVmaW5lIE1BUF9HUk9XU1VQCTB4MDIwMAkJLyogcmVnaXN0ZXIgc3RhY2stbGlrZSBzZWdtZW50ICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCmluZGV4IDIyM2FiYjEuLjI4NWFhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BjaS1zd2lvdGxiLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogdm9pZCBfX2luaXQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKQogewotCWlmICghaW9tbXVfZGV0ZWN0ZWQgfHwgaW9tbXVfcGFzc190aHJvdWdoKSB7CisJaWYgKCFpb21tdV9kZXRlY3RlZCkgewogI2lmZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKIAkJc3dpb3RsYiA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IFJlLWluaXRpYWxpemUgbWFjaGluZSB2ZWN0b3IuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IGIxMTViM2IuLjE4NTc3NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNjE3LDcgKzYxNyw2IEBACiAJbG9uZyByZXNlcnZlZF9wYWdlcywgY29kZXNpemUsIGRhdGFzaXplLCBpbml0c2l6ZTsKIAlwZ19kYXRhX3QgKnBnZGF0OwogCWludCBpOwotCXN0YXRpYyBzdHJ1Y3Qga2NvcmVfbGlzdCBrY29yZV9tZW0sIGtjb3JlX3ZtZW0sIGtjb3JlX2tlcm5lbDsKIAogCUJVR19PTihQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpICE9IFBBR0VfU0laRSk7CiAJQlVHX09OKFBUUlNfUEVSX1BNRCAqIHNpemVvZihwbWRfdCkgIT0gUEFHRV9TSVpFKTsKQEAgLTYzOSwxMCArNjM4LDYgQEAKIAogCWhpZ2hfbWVtb3J5ID0gX192YShtYXhfbG93X3BmbiAqIFBBR0VfU0laRSk7CiAKLQlrY2xpc3RfYWRkKCZrY29yZV9tZW0sIF9fdmEoMCksIG1heF9sb3dfcGZuICogUEFHRV9TSVpFKTsKLQlrY2xpc3RfYWRkKCZrY29yZV92bWVtLCAodm9pZCAqKVZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELVZNQUxMT0NfU1RBUlQpOwotCWtjbGlzdF9hZGQoJmtjb3JlX2tlcm5lbCwgX3N0ZXh0LCBfZW5kIC0gX3N0ZXh0KTsKLQogCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkKIAkJaWYgKHBnZGF0LT5iZGF0YS0+bm9kZV9ib290bWVtX21hcCkKIAkJCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW1fbm9kZShwZ2RhdCk7CkBAIC02NTUsNyArNjUwLDcgQEAKIAlpbml0c2l6ZSA9ICAodW5zaWduZWQgbG9uZykgX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSBfX2luaXRfYmVnaW47CiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVsdWsgY29kZSwgJWx1ayByZXNlcnZlZCwgIgotCSAgICAgICAiJWx1ayBkYXRhLCAlbHVrIGluaXQpXG4iLCAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZUIC0gMTApLAorCSAgICAgICAiJWx1ayBkYXRhLCAlbHVrIGluaXQpXG4iLCBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQgLSAxMCksCiAJICAgICAgIG51bV9waHlzcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCksIGNvZGVzaXplID4+IDEwLAogCSAgICAgICByZXNlcnZlZF9wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwgZGF0YXNpemUgPj4gMTAsIGluaXRzaXplID4+IDEwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCBjYWJiYTMzLi5jNDEyMzRmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtNDEsNiArNDEsMTIgQEAKIAlpbnQKIAlkZWZhdWx0IDEwMAogCitjb25maWcgR0VORVJJQ19USU1FCisJZGVmX2Jvb2wgeQorCitjb25maWcgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlkZWZfYm9vbCB5CisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCBjYjhhYTc2Li40YzMxYzBhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTIsMTQgKzIsNyBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpZiBOUl9JUlFTID4gMjU2CiAjZGVmaW5lIEhBUkRJUlFfQklUUwk5CkBAIC0yNiwxMSArMTksNyBAQAogIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWNrX2JhZF9pcnEoaW50IGlycSkKLXsKLQlwcmludGsoS0VSTl9DUklUICJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotCUJVRygpOwotfQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KIAogI2VuZGlmIC8qIF9fQVNNX0hBUkRJUlFfSCAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IDA0YTVmNDAuLjhlZWJmODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtMSwxNyArMSBAQAotI2lmbmRlZiBfX00zMlJfTU1BTl9IX18KLSNkZWZpbmUgX19NMzJSX01NQU5fSF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLQotI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCi0jZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCi0KLSNlbmRpZiAvKiBfX00zMlJfTU1BTl9IX18gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYwppbmRleCA5OGI4ZmViLi45ODY4MmJiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvcHRyYWNlLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlzdHJ1Y3QgdXNlciAqIGR1bW15ID0gTlVMTDsKICNlbmRpZgogCi0JaWYgKChvZmYgJiAzKSB8fCAob2ZmIDwgMCkgfHwgKG9mZiA+IHNpemVvZihzdHJ1Y3QgdXNlcikgLSAzKSkKKwlpZiAoKG9mZiAmIDMpIHx8IG9mZiA+IHNpemVvZihzdHJ1Y3QgdXNlcikgLSAzKQogCQlyZXR1cm4gLUVJTzsKIAogCW9mZiA+Pj0gMjsKQEAgLTEzOSw4ICsxMzksNyBAQAogCXN0cnVjdCB1c2VyICogZHVtbXkgPSBOVUxMOwogI2VuZGlmCiAKLQlpZiAoKG9mZiAmIDMpIHx8IG9mZiA8IDAgfHwKLQkgICAgb2ZmID4gc2l6ZW9mKHN0cnVjdCB1c2VyKSAtIDMpCisJaWYgKChvZmYgJiAzKSB8fCBvZmYgPiBzaXplb2Yoc3RydWN0IHVzZXIpIC0gMykKIAkJcmV0dXJuIC1FSU87CiAKIAlvZmYgPj49IDI7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDI1NDdkNmMuLjY1NWVhMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJaWYgKCFwaHlzaWRfaXNzZXQocGh5c19pZCwgcGh5c19jcHVfcHJlc2VudF9tYXApKQogCQkJY29udGludWU7CiAKLQkJaWYgKChtYXhfY3B1cyA+PSAwKSAmJiAobWF4X2NwdXMgPD0gY3B1Y291bnQgKyAxKSkKKwkJaWYgKG1heF9jcHVzIDw9IGNwdWNvdW50ICsgMSkKIAkJCWNvbnRpbnVlOwogCiAJCWRvX2Jvb3RfY3B1KHBoeXNfaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMgYi9hcmNoL20zMnIva2VybmVsL3RpbWUuYwppbmRleCBjYWRhM2JhLi5iYTYxYzRjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RpbWUuYwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXRjaDsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fZ2V0dGltZW9mZnNldCh2b2lkKQordTMyIGFyY2hfZ2V0dGltZW9mZnNldCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgIGVsYXBzZWRfdGltZSA9IDA7ICAvKiBbdXNdICovCiAKQEAgLTkzLDc5ICs5MywxMCBAQAogI2Vycm9yIG5vIGNoaXAgY29uZmlndXJhdGlvbgogI2VuZGlmCiAKLQlyZXR1cm4gZWxhcHNlZF90aW1lOworCXJldHVybiBlbGFwc2VkX3RpbWUgKiAxMDAwOwogfQogCiAvKgotICogVGhpcyB2ZXJzaW9uIG9mIGdldHRpbWVvZmRheSBoYXMgbmVhciBtaWNyb3NlY29uZCByZXNvbHV0aW9uLgotICovCi12b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCi17Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0JdW5zaWduZWQgbG9uZyB1c2VjLCBzZWM7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbnRwX3RpY2sgPSB0aWNrX3VzZWMgLSB0aWNrYWRqOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQotCQl1c2VjID0gZG9fZ2V0dGltZW9mZnNldCgpOwotCi0JCS8qCi0JCSAqIElmIHRpbWVfYWRqdXN0IGlzIG5lZ2F0aXZlIHRoZW4gTlRQIGlzIHNsb3dpbmcgdGhlIGNsb2NrCi0JCSAqIHNvIG1ha2Ugc3VyZSBub3QgdG8gZ28gaW50byBuZXh0IHBvc3NpYmxlIGludGVydmFsLgotCQkgKiBCZXR0ZXIgdG8gbG9zZSBzb21lIGFjY3VyYWN5IHRoYW4gaGF2ZSB0aW1lIGdvIGJhY2t3YXJkcy4uCi0JCSAqLwotCQlpZiAodW5saWtlbHkodGltZV9hZGp1c3QgPCAwKSkKLQkJCXVzZWMgPSBtaW4odXNlYywgbWF4X250cF90aWNrKTsKLQotCQlzZWMgPSB4dGltZS50dl9zZWM7Ci0JCXVzZWMgKz0gKHh0aW1lLnR2X25zZWMgLyAxMDAwKTsKLQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKLQotCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKLQkJdXNlYyAtPSAxMDAwMDAwOwotCQlzZWMrKzsKLQl9Ci0KLQl0di0+dHZfc2VjID0gc2VjOwotCXR2LT50dl91c2VjID0gdXNlYzsKLX0KLQotRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwotCi1pbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0gCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKLQotCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwotCS8qCi0JICogVGhpcyBpcyByZXZvbHRpbmcuIFdlIG5lZWQgdG8gc2V0ICJ4dGltZSIgY29ycmVjdGx5LiBIb3dldmVyLCB0aGUKLQkgKiB2YWx1ZSBpbiB0aGlzIGxvY2F0aW9uIGlzIHRoZSB2YWx1ZSBhdCB0aGUgbW9zdCByZWNlbnQgdXBkYXRlIG9mCi0JICogd2FsbCB0aW1lLiAgRGlzY292ZXIgd2hhdCBjb3JyZWN0aW9uIGdldHRpbWVvZmRheSgpIHdvdWxkIGhhdmUKLQkgKiBtYWRlLCBhbmQgdGhlbiB1bmRvIGl0IQotCSAqLwotCW5zZWMgLT0gZG9fZ2V0dGltZW9mZnNldCgpICogTlNFQ19QRVJfVVNFQzsKLQotCXd0bV9zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKLQotLyoKICAqIEluIG9yZGVyIHRvIHNldCB0aGUgQ01PUyBjbG9jayBwcmVjaXNlbHksIHNldF9ydGNfbW1zcyBoYXMgdG8gYmUKICAqIGNhbGxlZCA1MDAgbXMgYWZ0ZXIgdGhlIHNlY29uZCBub3d0aW1lIGhhcyBzdGFydGVkLCBiZWNhdXNlIHdoZW4KICAqIG5vd3RpbWUgaXMgd3JpdHRlbiBpbnRvIHRoZSByZWdpc3RlcnMgb2YgdGhlIENNT1MgY2xvY2ssIGl0IHdpbGwKQEAgLTE5Miw2ICsxMjMsNyBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogI2VuZGlmCisJLyogWFhYIEZJWE1FLiBVaCwgdGhlIHh0aW1lX2xvY2sgc2hvdWxkIGJlIGhlbGQgaGVyZSwgbm8/ICovCiAJZG9fdGltZXIoMSk7CiAKICNpZm5kZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2luaXQuYyBiL2FyY2gvbTMyci9tbS9pbml0LmMKaW5kZXggMjRkNDI5Zi4uOWY1ODFkZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2luaXQuYworKysgYi9hcmNoL20zMnIvbW0vaW5pdC5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAiCiAJCSIlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAlZGsgaW5pdClcbiIsCi0JCSh1bnNpZ25lZCBsb25nKSBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCQlucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCQludW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJY29kZXNpemUgPj4gMTAsCiAJCXJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCBmYjg3YzA4Li4yOWRkODQ4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTgsNiArNTgsMTIgQEAKIAlpbnQKIAlkZWZhdWx0IDEwMAogCitjb25maWcgR0VORVJJQ19USU1FCisJZGVmX2Jvb2wgeQorCitjb25maWcgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlkZWZfYm9vbCB5CisKIG1haW5tZW51ICJMaW51eC82OGsgS2VybmVsIENvbmZpZ3VyYXRpb24iCiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmgKaW5kZXggMzk0ZWU5NC4uNTU0ZjY1YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oCkBAIC0xLDE2ICsxLDggQEAKICNpZm5kZWYgX19NNjhLX0hBUkRJUlFfSAogI2RlZmluZSBfX002OEtfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQotLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KICNkZWZpbmUgSEFSRElSUV9CSVRTCTgKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA5ZjVjNGM0Li44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTEsMTcgKzEgQEAKLSNpZm5kZWYgX19NNjhLX01NQU5fSF9fCi0jZGVmaW5lIF9fTTY4S19NTUFOX0hfXwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogX19NNjhLX01NQU5fSF9fICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDk0NmQ4NjkuLjQ4Yjg3ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMzNSw3ICszMzUsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzI5CiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzMwCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzMxCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzMyCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzMgogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKaW5kZXggOTIyZjUyZS4uYzViMzM2MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwpAQCAtNzU2LDUgKzc1Niw1IEBACiAJLmxvbmcgc3lzX3ByZWFkdgogCS5sb25nIHN5c19wd3JpdGV2CQkvKiAzMzAgKi8KIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KLQkubG9uZyBzeXNfcGVyZl9jb3VudGVyX29wZW4KKwkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKaW5kZXggNTRkOTgwNy4uMTdkYzJhMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKQEAgLTkxLDc3ICs5MSwxMSBAQAogCW1hY2hfc2NoZWRfaW5pdCh0aW1lcl9pbnRlcnJ1cHQpOwogfQogCi0vKgotICogVGhpcyB2ZXJzaW9uIG9mIGdldHRpbWVvZmRheSBoYXMgbmVhciBtaWNyb3NlY29uZCByZXNvbHV0aW9uLgotICovCi12b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCit1MzIgYXJjaF9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHNlcTsKLQl1bnNpZ25lZCBsb25nIHVzZWMsIHNlYzsKLQl1bnNpZ25lZCBsb25nIG1heF9udHBfdGljayA9IHRpY2tfdXNlYyAtIHRpY2thZGo7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCi0JCXVzZWMgPSBtYWNoX2dldHRpbWVvZmZzZXQoKTsKLQotCQkvKgotCQkgKiBJZiB0aW1lX2FkanVzdCBpcyBuZWdhdGl2ZSB0aGVuIE5UUCBpcyBzbG93aW5nIHRoZSBjbG9jawotCQkgKiBzbyBtYWtlIHN1cmUgbm90IHRvIGdvIGludG8gbmV4dCBwb3NzaWJsZSBpbnRlcnZhbC4KLQkJICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpCi0JCQl1c2VjID0gbWluKHVzZWMsIG1heF9udHBfdGljayk7Ci0KLQkJc2VjID0geHRpbWUudHZfc2VjOwotCQl1c2VjICs9IHh0aW1lLnR2X25zZWMvMTAwMDsKLQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKLQotCi0Jd2hpbGUgKHVzZWMgPj0gMTAwMDAwMCkgewotCQl1c2VjIC09IDEwMDAwMDA7Ci0JCXNlYysrOwotCX0KLQotCXR2LT50dl9zZWMgPSBzZWM7Ci0JdHYtPnR2X3VzZWMgPSB1c2VjOworCXJldHVybiBtYWNoX2dldHRpbWVvZmZzZXQoKSAqIDEwMDA7CiB9CiAKLUVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKLQotaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQotewotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKLQotCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwotCS8qIFRoaXMgaXMgcmV2b2x0aW5nLiBXZSBuZWVkIHRvIHNldCB0aGUgeHRpbWUudHZfbnNlYwotCSAqIGNvcnJlY3RseS4gSG93ZXZlciwgdGhlIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMKLQkgKiBpcyB2YWx1ZSBhdCB0aGUgbGFzdCB0aWNrLgotCSAqIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkKLQkgKiB3b3VsZCBoYXZlIGRvbmUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0JbnNlYyAtPSAxMDAwICogbWFjaF9nZXR0aW1lb2Zmc2V0KCk7Ci0KLQl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwotCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7Ci0KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIHNlYywgbnNlYyk7Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCB3dG1fc2VjLCB3dG1fbnNlYyk7Ci0KLQludHBfY2xlYXIoKTsKLQl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQljbG9ja193YXNfc2V0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKLQotCiBzdGF0aWMgaW50IF9faW5pdCBydGNfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vaW5pdC5jIGIvYXJjaC9tNjhrL21tL2luaXQuYwppbmRleCAwMDA3YjJhLi43NzQ1NDlhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogI2VuZGlmCiAKIAlwcmludGsoIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICB0b3RhbHJhbV9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGNvZGVwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGRhdGFwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKaW5kZXggMGFlMTIzZS4uMjM1MzVjYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJLmxvbmcgc3lzX3ByZWFkdgogCS5sb25nIHN5c19wd3JpdGV2CQkvKiAzMzAgKi8KIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KLQkubG9uZyBzeXNfcGVyZl9jb3VudGVyX29wZW4KKwkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCiAKIAkucmVwdCBOUl9zeXNjYWxscy0oLi1zeXNfY2FsbF90YWJsZSkvNAogCQkubG9uZyBzeXNfbmlfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDBiODUyMzIuLmNiMDVhMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM4MSw3ICszODEsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzYzIC8qIG5ldyAqLwogI2RlZmluZSBfX05SX3B3cml0ZXYJCTM2NCAvKiBuZXcgKi8KICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzNjUgLyogbmV3ICovCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzY2IC8qIG5ldyAqLworI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzNjYgLyogbmV3ICovCiAKICNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzY3CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggNDU3MjE2MC4uZWNlYzE5MSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTM3MCw0ICszNzAsNCBAQAogCS5sb25nIHN5c19uaV9zeXNjYWxsCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwKIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogMzY1ICovCi0JLmxvbmcgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL21tL2luaXQuYyBiL2FyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMKaW5kZXggZjIwN2YxYS4uMTExMDc4NCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL21tL2luaXQuYworKysgYi9hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290bWVtKCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGVcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKSBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBudW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSk7CiAjaWZkZWYgQ09ORklHX01NVQogCW1lbV9pbml0X2RvbmUgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggZTRkNmYxZi4uYTIyNTBmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC00Niw2ICs0Niw4IEBACiAjZGVmaW5lIE1BUF9MT0NLRUQJMHg4MDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCiAjZGVmaW5lIE1BUF9QT1BVTEFURQkweDEwMDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KICNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MjAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworI2RlZmluZSBNQVBfU1RBQ0sJMHg0MDAwMAkJLyogZ2l2ZSBvdXQgYW4gYWRkcmVzcyB0aGF0IGlzIGJlc3Qgc3VpdGVkIGZvciBwcm9jZXNzL3RocmVhZCBzdGFja3MgKi8KKyNkZWZpbmUgTUFQX0hVR0VUTEIJMHg4MDAwMAkJLyogY3JlYXRlIGEgaHVnZSBwYWdlIG1hcHBpbmcgKi8KIAogLyoKICAqIEZsYWdzIGZvciBtc3luYwpAQCAtNzEsNiArNzMsOSBAQAogI2RlZmluZSBNQURWX0RPTlRGT1JLCTEwCQkvKiBkb24ndCBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAjZGVmaW5lIE1BRFZfRE9GT1JLCTExCQkvKiBkbyBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAKKyNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICAxMgkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxMwkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisKIC8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgTUFQX0ZJTEUJMAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAxYTlmOWIyLi5kNmViNjEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTc2LDYgKzc2LDE2IEBACiAjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgXAogCSh2aXJ0X3RvX3BhZ2UoKHZvaWQgKikoZW1wdHlfemVyb19wYWdlICsgKCgodW5zaWduZWQgbG9uZykodmFkZHIpKSAmIHplcm9fcGFnZV9tYXNrKSkpKQogCisjZGVmaW5lIGlzX3plcm9fcGZuIGlzX3plcm9fcGZuCitzdGF0aWMgaW5saW5lIGludCBpc196ZXJvX3Bmbih1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlleHRlcm4gdW5zaWduZWQgbG9uZyB6ZXJvX3BmbjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldF9mcm9tX3plcm9fcGZuID0gcGZuIC0gemVyb19wZm47CisJcmV0dXJuIG9mZnNldF9mcm9tX3plcm9fcGZuIDw9ICh6ZXJvX3BhZ2VfbWFzayA+PiBQQUdFX1NISUZUKTsKK30KKworI2RlZmluZSBteV96ZXJvX3BmbihhZGRyKQlwYWdlX3RvX3BmbihaRVJPX1BBR0UoYWRkcikpCisKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGU3NTNhNzcuLjhjOWRmYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM1Myw3ICszNTMsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMzMwKQogI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDMzMSkKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkJKF9fTlJfTGludXggKyAzMzIpCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JCShfX05SX0xpbnV4ICsgMzMzKQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJKF9fTlJfTGludXggKyAzMzMpCiAjZGVmaW5lIF9fTlJfYWNjZXB0NAkJCShfX05SX0xpbnV4ICsgMzM0KQogCiAvKgpAQCAtNjY0LDcgKzY2NCw3IEBACiAjZGVmaW5lIF9fTlJfcHJlYWR2CQkJKF9fTlJfTGludXggKyAyODkpCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJCShfX05SX0xpbnV4ICsgMjkwKQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCQkoX19OUl9MaW51eCArIDI5MSkKLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkJKF9fTlJfTGludXggKyAyOTIpCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCQkoX19OUl9MaW51eCArIDI5MikKICNkZWZpbmUgX19OUl9hY2NlcHQ0CQkJKF9fTlJfTGludXggKyAyOTMpCiAKIC8qCkBAIC05NzksNyArOTc5LDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9MaW51eCArIDI5MykKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkJKF9fTlJfTGludXggKyAyOTQpCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JCShfX05SX0xpbnV4ICsgMjk1KQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCQkoX19OUl9MaW51eCArIDI5NikKKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JCShfX05SX0xpbnV4ICsgMjk2KQogI2RlZmluZSBfX05SX2FjY2VwdDQJCQkoX19OUl9MaW51eCArIDI5NykKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwppbmRleCA3YzJkZTRmLi5mZDJhOWJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCkBAIC01ODEsNyArNTgxLDcgQEAKIAlzeXMJc3lzX3ByZWFkdgkJNgkvKiA0MzMwICovCiAJc3lzCXN5c19wd3JpdGV2CQk2CiAJc3lzCXN5c19ydF90Z3NpZ3F1ZXVlaW5mbwk0Ci0Jc3lzCXN5c19wZXJmX2NvdW50ZXJfb3Blbgk1CisJc3lzCXN5c19wZXJmX2V2ZW50X29wZW4JNQogCXN5cwlzeXNfYWNjZXB0NAkJNAogCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKaW5kZXggYjk3Yjk5My4uMThiZjdmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKQEAgLTQxOCw2ICs0MTgsNiBAQAogCVBUUglzeXNfcHJlYWR2CiAJUFRSCXN5c19wd3JpdGV2CQkJLyogNTM5MCAqLwogCVBUUglzeXNfcnRfdGdzaWdxdWV1ZWluZm8KLQlQVFIJc3lzX3BlcmZfY291bnRlcl9vcGVuCisJUFRSCXN5c19wZXJmX2V2ZW50X29wZW4KIAlQVFIJc3lzX2FjY2VwdDQKIAkuc2l6ZQlzeXNfY2FsbF90YWJsZSwuLXN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggMWE2YWUxMi4uNmViYzA3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtNDE2LDYgKzQxNiw2IEBACiAJUFRSCXN5c19wcmVhZHYKIAlQVFIJc3lzX3B3cml0ZXYKIAlQVFIJY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbwkvKiA1Mjk1ICovCi0JUFRSCXN5c19wZXJmX2NvdW50ZXJfb3BlbgorCVBUUglzeXNfcGVyZl9ldmVudF9vcGVuCiAJUFRSCXN5c19hY2NlcHQ0CiAJLnNpemUJc3lzbjMyX2NhbGxfdGFibGUsLi1zeXNuMzJfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IGNkMzEwODcuLjliYmY5NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTUzNiw2ICs1MzYsNiBAQAogCVBUUgljb21wYXRfc3lzX3ByZWFkdgkJLyogNDMzMCAqLwogCVBUUgljb21wYXRfc3lzX3B3cml0ZXYKIAlQVFIJY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbwotCVBUUglzeXNfcGVyZl9jb3VudGVyX29wZW4KKwlQVFIJc3lzX3BlcmZfZXZlbnRfb3BlbgogCVBUUglzeXNfYWNjZXB0NAogCS5zaXplCXN5c19jYWxsX3RhYmxlLC4tc3lzX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKaW5kZXggMGVkYmVmMy4uNmUwOGM4MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKQEAgLTIzLDYgKzIzLDYgQEAKIAogdm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKIHsKLQl0cy0+dHZfc2VjID0gcmV0dXJuIG1jMTQ2ODE4X2dldF9jbW9zX3RpbWUoKTsKKwl0cy0+dHZfc2VjID0gbWMxNDY4MThfZ2V0X2Ntb3NfdGltZSgpOwogCXRzLT50dl9uc2VjID0gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDM4Yzc5YzUuLjE1YWExOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL21tL2luaXQuYwpAQCAtMzUyLDcgKzM1Miw2IEBACiAJZnJlZV9hcmVhX2luaXRfbm9kZXMobWF4X3pvbmVfcGZucyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga2NvcmVfbGlzdCBrY29yZV9tZW0sIGtjb3JlX3ZtYWxsb2M7CiAjaWZkZWYgQ09ORklHXzY0QklUCiBzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfa3NlZzA7CiAjZW5kaWYKQEAgLTQwOSwxNSArNDA4LDEzIEBACiAJaWYgKCh1bnNpZ25lZCBsb25nKSAmX3RleHQgPiAodW5zaWduZWQgbG9uZykgQ0tTRUcwKQogCQkvKiBUaGUgLTQgaXMgYSBoYWNrIHNvIHRoYXQgdXNlciB0b29scyBkb24ndCBoYXZlIHRvIGhhbmRsZQogCQkgICB0aGUgb3ZlcmZsb3cuICAqLwotCQlrY2xpc3RfYWRkKCZrY29yZV9rc2VnMCwgKHZvaWQgKikgQ0tTRUcwLCAweDgwMDAwMDAwIC0gNCk7CisJCWtjbGlzdF9hZGQoJmtjb3JlX2tzZWcwLCAodm9pZCAqKSBDS1NFRzAsCisJCQkJMHg4MDAwMDAwMCAtIDQsIEtDT1JFX1RFWFQpOwogI2VuZGlmCi0Ja2NsaXN0X2FkZCgma2NvcmVfbWVtLCBfX3ZhKDApLCBtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKTsKLQlrY2xpc3RfYWRkKCZrY29yZV92bWFsbG9jLCAodm9pZCAqKVZNQUxMT0NfU1RBUlQsCi0JCSAgIFZNQUxMT0NfRU5ELVZNQUxMT0NfU1RBUlQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglbGRrIGtlcm5lbCBjb2RlLCAiCiAJICAgICAgICIlbGRrIHJlc2VydmVkLCAlbGRrIGRhdGEsICVsZGsgaW5pdCwgJWxkayBoaWdobWVtKVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCisJICAgICAgIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIHJhbSA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGNvZGVzaXplID4+IDEwLAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDJkYjc0NmEuLjFhNTVkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIC8qCi0gKiB2aXJ0dWFsbHktaW5kZXhlZCBjYWNoZSBtYW5hZ21lbnQgKG91ciBjYWNoZSBpcyBwaHlzaWNhbGx5IGluZGV4ZWQpCisgKiB2aXJ0dWFsbHktaW5kZXhlZCBjYWNoZSBtYW5hZ2VtZW50IChvdXIgY2FjaGUgaXMgcGh5c2ljYWxseSBpbmRleGVkKQogICovCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHt9IHdoaWxlICgwKQpAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8ge30gd2hpbGUgKDApCiAKIC8qCi0gKiBwaHlzaWNhbGx5LWluZGV4ZWQgY2FjaGUgbWFuYWdtZW50CisgKiBwaHlzaWNhbGx5LWluZGV4ZWQgY2FjaGUgbWFuYWdlbWVudAogICovCiAjaWZuZGVmIENPTkZJR19NTjEwMzAwX0NBQ0hFX0RJU0FCTEVECiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9nZGItc3R1Yi5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2dkYi1zdHViLmgKaW5kZXggZTVhNjM2OC4uNTU2Y2NlOSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2dkYi1zdHViLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2dkYi1zdHViLmgKQEAgLTEwOSw3ICsxMDksNiBAQAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBnZGJzdHViX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqLCBlbnVtIGV4Y2VwdGlvbl9jb2RlKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgX19nZGJzdHViX2J1Z190cmFwKHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBfX2dkYnN0dWJfcGF1c2Uodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHN0YXJ0X2tlcm5lbCh2b2lkKTsKIAogI2lmbmRlZiBDT05GSUdfTU4xMDMwMF9DQUNIRV9ESVNBQkxFRAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBnZGJzdHViX3B1cmdlX2NhY2hlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggZDA0ZmFjMS4uOGVlYmY4OSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDI4ICsxIEBACi0vKiBNTjEwMzAwIENvbnN0YW50cyBmb3IgbW1hcCBhbmQgY28uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IE1hdHN1c2hpdGEgRWxlY3RyaWMgSW5kdXN0cmlhbCBDby4sIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAtIERlcml2ZWQgZnJvbSBhc20teDg2L21tYW4uaAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpZm5kZWYgX0FTTV9NTUFOX0gKLSNkZWZpbmUgX0FTTV9NTUFOX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4tY29tbW9uLmg+Ci0KLSNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAxMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLwotI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLwotI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLwotI2RlZmluZSBNQVBfTE9DS0VECTB4MjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLwotI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4NDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLwotI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KLSNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLwotCi0jZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KLSNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KLQotI2VuZGlmIC8qIF9BU01fTU1BTl9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGZhZDY4NjEuLjJhOTgzOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM0Nyw3ICszNDcsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzM0CiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzM1CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzM2Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzM3CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzNwogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMjY0NmZjYi4uMDJkYzdlNCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtODUsNyArODUsNyBAQAogCU9GRlNFVChfX3J4X2J1ZmZlciwJCW1uMTAzMDBfc2VyaWFsX3BvcnQsIHJ4X2J1ZmZlcik7CiAJT0ZGU0VUKF9fcnhfaW5wLAkJbW4xMDMwMF9zZXJpYWxfcG9ydCwgcnhfaW5wKTsKIAlPRkZTRVQoX19yeF9vdXRwLAkJbW4xMDMwMF9zZXJpYWxfcG9ydCwgcnhfb3V0cCk7Ci0JT0ZGU0VUKF9fdHhfaW5mb19idWZmZXIsCW1uMTAzMDBfc2VyaWFsX3BvcnQsIHVhcnQuaW5mbyk7CisJT0ZGU0VUKF9fdWFydF9zdGF0ZSwJCW1uMTAzMDBfc2VyaWFsX3BvcnQsIHVhcnQuc3RhdGUpOwogCU9GRlNFVChfX3R4X3hjaGFyLAkJbW4xMDMwMF9zZXJpYWxfcG9ydCwgdHhfeGNoYXIpOwogCU9GRlNFVChfX3R4X2JyZWFrLAkJbW4xMDMwMF9zZXJpYWxfcG9ydCwgdHhfYnJlYWspOwogCU9GRlNFVChfX2ludHJfZmxhZ3MsCQltbjEwMzAwX3NlcmlhbF9wb3J0LCBpbnRyX2ZsYWdzKTsKQEAgLTk1LDcgKzk1LDcgQEAKIAlPRkZTRVQoX19pb2Jhc2UsCQltbjEwMzAwX3NlcmlhbF9wb3J0LCBfaW9iYXNlKTsKIAogCURFRklORShfX1VBUlRfWE1JVF9TSVpFLAlVQVJUX1hNSVRfU0laRSk7Ci0JT0ZGU0VUKF9feG1pdF9idWZmZXIsCQl1YXJ0X2luZm8sIHhtaXQuYnVmKTsKLQlPRkZTRVQoX194bWl0X2hlYWQsCQl1YXJ0X2luZm8sIHhtaXQuaGVhZCk7Ci0JT0ZGU0VUKF9feG1pdF90YWlsLAkJdWFydF9pbmZvLCB4bWl0LnRhaWwpOworCU9GRlNFVChfX3htaXRfYnVmZmVyLAkJdWFydF9zdGF0ZSwgeG1pdC5idWYpOworCU9GRlNFVChfX3htaXRfaGVhZCwJCXVhcnRfc3RhdGUsIHhtaXQuaGVhZCk7CisJT0ZGU0VUKF9feG1pdF90YWlsLAkJdWFydF9zdGF0ZSwgeG1pdC50YWlsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUwppbmRleCBlMGQyNTYzLi5hOTRlN2VhIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9lbnRyeS5TCkBAIC03MjMsNyArNzIzLDcgQEAKIAkubG9uZyBzeXNfcHJlYWR2CiAJLmxvbmcgc3lzX3B3cml0ZXYJCS8qIDMzNSAqLwogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwotCS5sb25nIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KIAogCiBucl9zeXNjYWxscz0oLi1zeXNfY2FsbF90YWJsZSkvNApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC1sb3cuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvbW4xMDMwMC1zZXJpYWwtbG93LlMKaW5kZXggMjI0NDg1My4uNjY3MDJkMiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC1sb3cuUworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtc2VyaWFsLWxvdy5TCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlvcglkMixkMgogCWJuZQltbnNjX3ZkbWFfdHhfeGNoYXIKIAotCW1vdgkoX190eF9pbmZvX2J1ZmZlcixhMyksYTIgIyBnZXQgdGhlIHVhcnRfaW5mbyBzdHJ1Y3QgZm9yIFR4CisJbW92CShfX3VhcnRfc3RhdGUsYTMpLGEyCSMgc2VlIGlmIHRoZSBUVFkgVHggcXVldWUgaGFzIGFueXRoaW5nIGluIGl0CiAJbW92CShfX3htaXRfdGFpbCxhMiksZDMKIAltb3YJKF9feG1pdF9oZWFkLGEyKSxkMgogCWNtcAlkMyxkMgpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC5jCmluZGV4IDJmZDU5NjYuLjIyOWI3MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvbW4xMDMwMC1zZXJpYWwuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtc2VyaWFsLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogc3RhdGljIHZvaWQgbW4xMDMwMF9zZXJpYWxfcmVjZWl2ZV9pbnRlcnJ1cHQoc3RydWN0IG1uMTAzMDBfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVhcnRfaWNvdW50ICppY291bnQgPSAmcG9ydC0+dWFydC5pY291bnQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnVhcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnVhcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGl4OwogCWludCBjb3VudDsKIAl1OCBzdCwgY2gsIHB1c2gsIHN0YXR1cywgb3ZlcnJ1bjsKQEAgLTU2NiwxNiArNTY2LDE2IEBACiB7CiAJX2VudGVyKCIlcyIsIHBvcnQtPm5hbWUpOwogCi0JaWYgKCFwb3J0LT51YXJ0LmluZm8gfHwgIXBvcnQtPnVhcnQuaW5mby0+cG9ydC50dHkpIHsKKwlpZiAoIXBvcnQtPnVhcnQuc3RhdGUgfHwgIXBvcnQtPnVhcnQuc3RhdGUtPnBvcnQudHR5KSB7CiAJCW1uMTAzMDBfc2VyaWFsX2Rpc190eF9pbnRyKHBvcnQpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKHVhcnRfdHhfc3RvcHBlZCgmcG9ydC0+dWFydCkgfHwKLQkgICAgdWFydF9jaXJjX2VtcHR5KCZwb3J0LT51YXJ0LmluZm8tPnhtaXQpKQorCSAgICB1YXJ0X2NpcmNfZW1wdHkoJnBvcnQtPnVhcnQuc3RhdGUtPnhtaXQpKQogCQltbjEwMzAwX3NlcmlhbF9kaXNfdHhfaW50cihwb3J0KTsKIAotCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmcG9ydC0+dWFydC5pbmZvLT54bWl0KSA8IFdBS0VVUF9DSEFSUykKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoJnBvcnQtPnVhcnQuc3RhdGUtPnhtaXQpIDwgV0FLRVVQX0NIQVJTKQogCQl1YXJ0X3dyaXRlX3dha2V1cCgmcG9ydC0+dWFydCk7CiB9CiAKQEAgLTU5Niw3ICs1OTYsNyBAQAogCSpwb3J0LT5fY29udHJvbCA9IGN0cjsKIAogCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnBvcnQtPnVhcnQsIHN0ICYgU0MyU1RSX0NUUyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT51YXJ0LmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnVhcnQuc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogfQogCiAvKgpAQCAtNzA1LDggKzcwNSw4IEBACiAKIAlfZW50ZXIoIiVzeyVsdX0iLAogCSAgICAgICBwb3J0LT5uYW1lLAotCSAgICAgICBDSVJDX0NOVCgmcG9ydC0+dWFydC5pbmZvLT54bWl0LmhlYWQsCi0JCQkmcG9ydC0+dWFydC5pbmZvLT54bWl0LnRhaWwsCisJICAgICAgIENJUkNfQ05UKCZwb3J0LT51YXJ0LnN0YXRlLT54bWl0LmhlYWQsCisJCQkmcG9ydC0+dWFydC5zdGF0ZS0+eG1pdC50YWlsLAogCQkJVUFSVF9YTUlUX1NJWkUpKTsKIAogCS8qIGtpY2sgdGhlIHZpcnR1YWwgRE1BIGNvbnRyb2xsZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvc2V0dXAuYwppbmRleCA3OTg5MGVkLi4zZjI0YzI5IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9zZXR1cC5jCkBAIC0yODUsNyArMjg1LDcgQEAKIHsKIH0KIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3AgPSB7Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKIAkuc3RhcnQJPSBjX3N0YXJ0LAogCS5uZXh0CT0gY19uZXh0LAogCS5zdG9wCT0gY19zdG9wLApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL21tL2luaXQuYyBiL2FyY2gvbW4xMDMwMC9tbS9pbml0LmMKaW5kZXggOGNlZTM4Ny4uZWMxNDIwNSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL21tL2luaXQuYworKysgYi9hcmNoL21uMTAzMDAvbW0vaW5pdC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkgICAgICAgIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSIKIAkgICAgICAgIiAoJWRrIGtlcm5lbCBjb2RlLCAlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAlZGsgaW5pdCwiCiAJICAgICAgICIgJWxkayBoaWdobWVtKVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVCAtIDEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZUIC0gMTApLAogCSAgICAgICBtYXhfbWFwbnIgPDwgKFBBR0VfU0hJRlQgLSAxMCksCiAJICAgICAgIGNvZGVzaXplID4+IDEwLAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggMDZmOGQ1Yi4uZjM4OGRjNiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC0xNiw3ICsxNiw3IEBACiAJc2VsZWN0IFJUQ19EUlZfR0VORVJJQwogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQogCXNlbGVjdCBCVUcKLQlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAhNjRCSVQKIAloZWxwCiAJICBUaGUgUEEtUklTQyBtaWNyb3Byb2Nlc3NvciBpcyBkZXNpZ25lZCBieSBIZXdsZXR0LVBhY2thcmQgYW5kIHVzZWQKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCBkZWZlNzUyLi45NzQ5YzhhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0yMiw2ICsyMiw4IEBACiAjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHg4MDAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KICNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MTAwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgyMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisjZGVmaW5lIE1BUF9TVEFDSwkweDQwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLworI2RlZmluZSBNQVBfSFVHRVRMQgkweDgwMDAwCQkvKiBjcmVhdGUgYSBodWdlIHBhZ2UgbWFwcGluZyAqLwogCiAjZGVmaW5lIE1TX1NZTkMJCTEJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCiAjZGVmaW5lIE1TX0FTWU5DCTIJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCkBAIC01NCw2ICs1Niw5IEBACiAjZGVmaW5lIE1BRFZfMTZNX1BBR0VTICAyNCAgICAgICAgICAgICAgLyogVXNlIDE2IE1lZ2FieXRlIHBhZ2VzICovCiAjZGVmaW5lIE1BRFZfNjRNX1BBR0VTICAyNiAgICAgICAgICAgICAgLyogVXNlIDY0IE1lZ2FieXRlIHBhZ2VzICovCiAKKyNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICA2NQkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSA2NgkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisKIC8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgTUFQX0ZJTEUJMAogI2RlZmluZSBNQVBfVkFSSUFCTEUJMApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5ZTgyOS4uMDAwMDAwMAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9QQVJJU0NfUEVSRl9DT1VOVEVSX0gKLSNkZWZpbmUgX19BU01fUEFSSVNDX1BFUkZfQ09VTlRFUl9ICi0KLS8qIHBhcmlzYyBvbmx5IHN1cHBvcnRzIHNvZnR3YXJlIGNvdW50ZXJzIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpIHsgfQotCi0jZW5kaWYgLyogX19BU01fUEFSSVNDX1BFUkZfQ09VTlRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxNDY0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fUEFSSVNDX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfX0FTTV9QQVJJU0NfUEVSRl9FVkVOVF9ICisKKy8qIHBhcmlzYyBvbmx5IHN1cHBvcnRzIHNvZnR3YXJlIGV2ZW50cyB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlLiAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkgeyB9CisKKyNlbmRpZiAvKiBfX0FTTV9QQVJJU0NfUEVSRl9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGYzZDNiOGIuLmNkYTE1ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC04MTAsOSArODEwLDkgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCShfX05SX0xpbnV4ICsgMzE1KQogI2RlZmluZSBfX05SX3B3cml0ZXYJCShfX05SX0xpbnV4ICsgMzE2KQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCShfX05SX0xpbnV4ICsgMzE3KQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCShfX05SX0xpbnV4ICsgMzE4KQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkoX19OUl9MaW51eCArIDMxOCkKIAotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX3BlcmZfY291bnRlcl9vcGVuICsgMSkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl9wZXJmX2V2ZW50X29wZW4gKyAxKQogCiAKICNkZWZpbmUgX19JR05PUkVfc2VsZWN0CQkvKiBuZXdzZWxlY3QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IGNmMTQ1ZWIuLjg0M2Y0MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJRU5UUllfQ09NUChwcmVhZHYpCQkvKiAzMTUgKi8KIAlFTlRSWV9DT01QKHB3cml0ZXYpCiAJRU5UUllfQ09NUChydF90Z3NpZ3F1ZXVlaW5mbykKLQlFTlRSWV9TQU1FKHBlcmZfY291bnRlcl9vcGVuKQorCUVOVFJZX1NBTUUocGVyZl9ldmVudF9vcGVuKQogCiAJLyogTm90aGluZyB5ZXQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCmluZGV4IGIwODMxZDkuLmQ1YWNhMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2luaXQuYworKysgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKQEAgLTUwNiw3ICs1MDYsNyBAQAogI2VuZGlmCiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2VydmVkLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZylucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCQlucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCQludW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJY29kZXNpemUgPj4gMTAsCiAJCXJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA4MjUwOTAyLi40ZmQ0NzkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1dSQVBQRVJTIGlmIFBQQzY0CiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQgaWYgUFBDMzIKLQlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCmluZGV4IGYzMmMyODEuLjg1NTc4MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cwpAQCAtMTU5LDYgKzE1OSw3IEBACiAJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJc2RoY2ksd3AtaW52ZXJ0ZWQ7CiAJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwppbmRleCAyOGUwMjJhLi45ZTIyNjRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKQEAgLTE3Myw2ICsxNzMsNyBAQAogCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCXNkaGNpLHdwLWludmVydGVkOwogCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTExMTExMTExPjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N193bGFuLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzCmluZGV4IDNmZWJjNGUuLjlhNjAzNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzCkBAIC0xNTAsNiArMTUwLDcgQEAKIAkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwogCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlzZGhjaSx3cC1pbnZlcnRlZDsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKIAkJCX07CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cwppbmRleCBmNzIwYWI5Li5mNzBjZjYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKQEAgLTE1OSw2ICsxNTksNyBAQAogCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCXNkaGNpLHdwLWludmVydGVkOwogCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKaW5kZXggYTExZWFkOC4uNGU2YTFhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCkBAIC0xNzMsNiArMTczLDcgQEAKIAkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwogCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlzZGhjaSx3cC1pbnZlcnRlZDsKIAkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDExMTExMTExMT47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKaW5kZXggNGZhMjIxZi4uNjQ1ZWM1MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwogCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlzZGhjaSx3cC1pbnZlcnRlZDsKIAkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCmluZGV4IGUzNWRmYmEuLjcyMzM2ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cwpAQCAtMTcxLDYgKzE3MSw3IEBACiAJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJc2RoY2ksd3AtaW52ZXJ0ZWQ7CiAJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMTExMTExMTE+OwogCQkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oCmluZGV4IGY0MmU2MjMuLmZhMTlmM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApAQCAtMTgsNiArMTgsOSBAQAogCiAjaWZuZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgorI2lmZGVmIF9fS0VSTkVMX18KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9jcHV0aW1lX29uZV9qaWZmeSh2b2lkKSB7IH0KKyNlbmRpZgogI2Vsc2UKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC00OSw2ICs1MiwxMSBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogLyoKKyAqIE9uZSBqaWZmeSBpbiB0aW1lYmFzZSB1bml0cyBjb21wdXRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24KKyAqLworZXh0ZXJuIGNwdXRpbWVfdCBjcHV0aW1lX29uZV9qaWZmeTsKKworLyoKICAqIENvbnZlcnQgY3B1dGltZSA8LT4gamlmZmllcwogICovCiBleHRlcm4gdTY0IF9fY3B1dGltZV9qaWZmaWVzX2ZhY3RvcjsKQEAgLTg5LDYgKzk3LDExIEBACiAJcmV0dXJuIGN0OwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY3B1dGltZV9vbmVfamlmZnkodm9pZCkKK3sKKwljcHV0aW1lX29uZV9qaWZmeSA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKK30KKwogc3RhdGljIGlubGluZSBjcHV0aW1lNjRfdCBqaWZmaWVzNjRfdG9fY3B1dGltZTY0KGNvbnN0IHU2NCBqaWYpCiB7CiAJY3B1dGltZV90IGN0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGU3M2Q1NTQuLmFiYmMyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTEzNSw0MyArMTM1LDQzIEBACiAgKi8KIHN0cnVjdCBpcnFfY2hpcDsKIAotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0ZXN0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGVzdF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHg7CiAKIAlhc20gdm9sYXRpbGUoImxieiAlMCwlMSgxMykiCiAJCTogIj1yIiAoeCkKLQkJOiAiaSIgKG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgcGVyZl9jb3VudGVyX3BlbmRpbmcpKSk7CisJCTogImkiIChvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHBlcmZfZXZlbnRfcGVuZGluZykpKTsKIAlyZXR1cm4geDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUoInN0YiAlMCwlMSgxMykiIDogOgogCQkiciIgKDEpLAotCQkiaSIgKG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgcGVyZl9jb3VudGVyX3BlbmRpbmcpKSk7CisJCSJpIiAob2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBwZXJmX2V2ZW50X3BlbmRpbmcpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgic3RiICUwLCUxKDEzKSIgOiA6CiAJCSJyIiAoMCksCi0JCSJpIiAob2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBwZXJmX2NvdW50ZXJfcGVuZGluZykpKTsKKwkJImkiIChvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHBlcmZfZXZlbnRfcGVuZGluZykpKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAotI2Vsc2UgIC8qIENPTkZJR19QRVJGX0NPVU5URVJTICovCisjZWxzZSAgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0ZXN0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGVzdF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX1BFUkZfQ09VTlRFUlMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkvKiBfQVNNX1BPV0VSUENfSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IDdiMWM0OTguLmQ0YTdmNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtMjUsNiArMjUsOCBAQAogCiAjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisjZGVmaW5lIE1BUF9TVEFDSwkweDIwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLworI2RlZmluZSBNQVBfSFVHRVRMQgkweDQwMDAwCQkvKiBjcmVhdGUgYSBodWdlIHBhZ2UgbWFwcGluZyAqLwogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmZGVmIENPTkZJR19QUEM2NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKaW5kZXggYjYzNDQ1Ni4uN2Q4NTE0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCkBAIC0xMjIsNyArMTIyLDcgQEAKIAl1OCBzb2Z0X2VuYWJsZWQ7CQkvKiBpcnEgc29mdC1lbmFibGUgZmxhZyAqLwogCXU4IGhhcmRfZW5hYmxlZDsJCS8qIHNldCBpZiBpcnFzIGFyZSBlbmFibGVkIGluIE1TUiAqLwogCXU4IGlvX3N5bmM7CQkJLyogd3JpdGVsKCkgbmVlZHMgc3Bpbl91bmxvY2sgc3luYyAqLwotCXU4IHBlcmZfY291bnRlcl9wZW5kaW5nOwkvKiBQTSBpbnRlcnJ1cHQgd2hpbGUgc29mdC1kaXNhYmxlZCAqLworCXU4IHBlcmZfZXZlbnRfcGVuZGluZzsJCS8qIFBNIGludGVycnVwdCB3aGlsZSBzb2Z0LWRpc2FibGVkICovCiAKIAkvKiBTdHVmZiBmb3IgYWNjdXJhdGUgdGltZSBhY2NvdW50aW5nICovCiAJdTY0IHVzZXJfdGltZTsJCQkvKiBhY2N1bXVsYXRlZCB1c2VybW9kZSBUQiB0aWNrcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWEwNjM5Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogUGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IC0gUG93ZXJQQy1zcGVjaWZpYyBkZWZpbml0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vaHdfaXJxLmg+Ci0KLSNkZWZpbmUgTUFYX0hXQ09VTlRFUlMJCTgKLSNkZWZpbmUgTUFYX0VWRU5UX0FMVEVSTkFUSVZFUwk4Ci0jZGVmaW5lIE1BWF9MSU1JVEVEX0hXQ09VTlRFUlMJMgotCi0vKgotICogVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zIG5lZWRlZCB0bwotICogZGVzY3JpYmUgdGhlIFBNVSBvbiBhIHBhcnRpY3VsYXIgUE9XRVItZmFtaWx5IENQVS4KLSAqLwotc3RydWN0IHBvd2VyX3BtdSB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQlpbnQJCW5fY291bnRlcjsKLQlpbnQJCW1heF9hbHRlcm5hdGl2ZXM7Ci0JdW5zaWduZWQgbG9uZwlhZGRfZmllbGRzOwotCXVuc2lnbmVkIGxvbmcJdGVzdF9hZGRlcjsKLQlpbnQJCSgqY29tcHV0ZV9tbWNyKSh1NjQgZXZlbnRzW10sIGludCBuX2V2LAotCQkJCXVuc2lnbmVkIGludCBod2NbXSwgdW5zaWduZWQgbG9uZyBtbWNyW10pOwotCWludAkJKCpnZXRfY29uc3RyYWludCkodTY0IGV2ZW50LCB1bnNpZ25lZCBsb25nICptc2twLAotCQkJCXVuc2lnbmVkIGxvbmcgKnZhbHApOwotCWludAkJKCpnZXRfYWx0ZXJuYXRpdmVzKSh1NjQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncywKLQkJCQl1NjQgYWx0W10pOwotCXZvaWQJCSgqZGlzYWJsZV9wbWMpKHVuc2lnbmVkIGludCBwbWMsIHVuc2lnbmVkIGxvbmcgbW1jcltdKTsKLQlpbnQJCSgqbGltaXRlZF9wbWNfZXZlbnQpKHU2NCBldmVudCk7Ci0JdTMyCQlmbGFnczsKLQlpbnQJCW5fZ2VuZXJpYzsKLQlpbnQJCSpnZW5lcmljX2V2ZW50czsKLQlpbnQJCSgqY2FjaGVfZXZlbnRzKVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCSAgICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkgICAgICAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07Ci19OwotCi0vKgotICogVmFsdWVzIGZvciBwb3dlcl9wbXUuZmxhZ3MKLSAqLwotI2RlZmluZSBQUE1VX0xJTUlURURfUE1DNV82CTEJLyogUE1DNS82IGhhdmUgbGltaXRlZCBmdW5jdGlvbiAqLwotI2RlZmluZSBQUE1VX0FMVF9TSVBSCQkyCS8qIHVzZXMgYWx0ZXJuYXRlIHBvc24gZm9yIFNJUFIvSFYgKi8KLQotLyoKLSAqIFZhbHVlcyBmb3IgZmxhZ3MgdG8gZ2V0X2FsdGVybmF0aXZlcygpCi0gKi8KLSNkZWZpbmUgUFBNVV9MSU1JVEVEX1BNQ19PSwkxCS8qIGNhbiBwdXQgdGhpcyBvbiBhIGxpbWl0ZWQgUE1DICovCi0jZGVmaW5lIFBQTVVfTElNSVRFRF9QTUNfUkVRRAkyCS8qIGhhdmUgdG8gcHV0IHRoaXMgb24gYSBsaW1pdGVkIFBNQyAqLwotI2RlZmluZSBQUE1VX09OTFlfQ09VTlRfUlVOCTQJLyogb25seSBjb3VudGluZyBpbiBydW4gc3RhdGUgKi8KLQotZXh0ZXJuIGludCByZWdpc3Rlcl9wb3dlcl9wbXUoc3RydWN0IHBvd2VyX3BtdSAqKTsKLQotc3RydWN0IHB0X3JlZ3M7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUCTEKLQotLyoKLSAqIE9ubHkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAotICogaWYgd2UgaGF2ZSBoYXJkd2FyZSBQTVUgc3VwcG9ydC4KLSAqLwotI2lmZGVmIENPTkZJR19QUENfUEVSRl9DVFJTCi0jZGVmaW5lIHBlcmZfbWlzY19mbGFncyhyZWdzKQlwZXJmX21pc2NfZmxhZ3MocmVncykKLSNlbmRpZgotCi0vKgotICogVGhlIHBvd2VyX3BtdS5nZXRfY29uc3RyYWludCBmdW5jdGlvbiByZXR1cm5zIGEgMzIvNjQtYml0IHZhbHVlIGFuZAotICogYSAzMi82NC1iaXQgbWFzayB0aGF0IGV4cHJlc3MgdGhlIGNvbnN0cmFpbnRzIGJldHdlZW4gdGhpcyBldmVudCBhbmQKLSAqIG90aGVyIGV2ZW50cy4KLSAqCi0gKiBUaGUgdmFsdWUgYW5kIG1hc2sgYXJlIGRpdmlkZWQgdXAgaW50byAobm9uLW92ZXJsYXBwaW5nKSBiaXRmaWVsZHMKLSAqIG9mIHRocmVlIGRpZmZlcmVudCB0eXBlczoKLSAqCi0gKiBTZWxlY3QgZmllbGQ6IHRoaXMgZXhwcmVzc2VzIHRoZSBjb25zdHJhaW50IHRoYXQgc29tZSBzZXQgb2YgYml0cwotICogaW4gTU1DUiogbmVlZHMgdG8gYmUgc2V0IHRvIGEgc3BlY2lmaWMgdmFsdWUgZm9yIHRoaXMgZXZlbnQuICBGb3IgYQotICogc2VsZWN0IGZpZWxkLCB0aGUgbWFzayBjb250YWlucyAxcyBpbiBldmVyeSBiaXQgb2YgdGhlIGZpZWxkLCBhbmQKLSAqIHRoZSB2YWx1ZSBjb250YWlucyBhIHVuaXF1ZSB2YWx1ZSBmb3IgZWFjaCBwb3NzaWJsZSBzZXR0aW5nIG9mIHRoZQotICogTU1DUiogYml0cy4gIFRoZSBjb25zdHJhaW50IGNoZWNraW5nIGNvZGUgd2lsbCBlbnN1cmUgdGhhdCB0d28gZXZlbnRzCi0gKiB0aGF0IHNldCB0aGUgc2FtZSBmaWVsZCBpbiB0aGVpciBtYXNrcyBoYXZlIHRoZSBzYW1lIHZhbHVlIGluIHRoZWlyCi0gKiB2YWx1ZSBkd29yZHMuCi0gKgotICogQWRkIGZpZWxkOiB0aGlzIGV4cHJlc3NlcyB0aGUgY29uc3RyYWludCB0aGF0IHRoZXJlIGNhbiBiZSBhdCBtb3N0Ci0gKiBOIGV2ZW50cyBpbiBhIHBhcnRpY3VsYXIgY2xhc3MuICBBIGZpZWxkIG9mIGsgYml0cyBjYW4gYmUgdXNlZCBmb3IKLSAqIE4gPD0gMl4oay0xKSAtIDEuICBUaGUgbWFzayBoYXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBmaWVsZAotICogc2V0IChhbmQgdGhlIG90aGVyIGJpdHMgMCksIGFuZCB0aGUgdmFsdWUgaGFzIG9ubHkgdGhlIGxlYXN0IHNpZ25pZmljYW50Ci0gKiBiaXQgb2YgdGhlIGZpZWxkIHNldC4gIEluIGFkZGl0aW9uLCB0aGUgJ2FkZF9maWVsZHMnIGFuZCAndGVzdF9hZGRlcicKLSAqIGluIHRoZSBzdHJ1Y3QgcG93ZXJfcG11IGZvciB0aGlzIHByb2Nlc3NvciBjb21lIGludG8gcGxheS4gIFRoZQotICogYWRkX2ZpZWxkcyB2YWx1ZSBjb250YWlucyAxIGluIHRoZSBMU0Igb2YgdGhlIGZpZWxkLCBhbmQgdGhlCi0gKiB0ZXN0X2FkZGVyIGNvbnRhaW5zIDJeKGstMSkgLSAxIC0gTiBpbiB0aGUgZmllbGQuCi0gKgotICogTkFORCBmaWVsZDogdGhpcyBleHByZXNzZXMgdGhlIGNvbnN0cmFpbnQgdGhhdCB5b3UgbWF5IG5vdCBoYXZlIGV2ZW50cwotICogaW4gYWxsIG9mIGEgc2V0IG9mIGNsYXNzZXMuICAoRm9yIGV4YW1wbGUsIG9uIFBQQzk3MCwgeW91IGNhbid0IHNlbGVjdAotICogZXZlbnRzIGZyb20gdGhlIEZQVSwgSVNVIGFuZCBJRFUgc2ltdWx0YW5lb3VzbHksIGFsdGhvdWdoIGFueSB0d28gYXJlCi0gKiBwb3NzaWJsZS4pICBGb3IgTiBjbGFzc2VzLCB0aGUgZmllbGQgaXMgTisxIGJpdHMgd2lkZSwgYW5kIGVhY2ggY2xhc3MKLSAqIGlzIGFzc2lnbmVkIG9uZSBiaXQgZnJvbSB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgTiBiaXRzLiAgVGhlIG1hc2sgaGFzCi0gKiBvbmx5IHRoZSBtb3N0LXNpZ25pZmljYW50IGJpdCBzZXQsIGFuZCB0aGUgdmFsdWUgaGFzIG9ubHkgdGhlIGJpdAotICogZm9yIHRoZSBldmVudCdzIGNsYXNzIHNldC4gIFRoZSB0ZXN0X2FkZGVyIGhhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKLSAqIGJpdCBzZXQgaW4gdGhlIGZpZWxkLgotICoKLSAqIElmIGFuIGV2ZW50IGlzIG5vdCBzdWJqZWN0IHRvIHRoZSBjb25zdHJhaW50IGV4cHJlc3NlZCBieSBhIHBhcnRpY3VsYXIKLSAqIGZpZWxkLCB0aGVuIGl0IHdpbGwgaGF2ZSAwIGluIGJvdGggdGhlIG1hc2sgYW5kIHZhbHVlIGZvciB0aGF0IGZpZWxkLgotICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjg4Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIFBlcmZvcm1hbmNlIGV2ZW50IHN1cHBvcnQgLSBQb3dlclBDLXNwZWNpZmljIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKworI2RlZmluZSBNQVhfSFdFVkVOVFMJCTgKKyNkZWZpbmUgTUFYX0VWRU5UX0FMVEVSTkFUSVZFUwk4CisjZGVmaW5lIE1BWF9MSU1JVEVEX0hXQ09VTlRFUlMJMgorCisvKgorICogVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zIG5lZWRlZCB0bworICogZGVzY3JpYmUgdGhlIFBNVSBvbiBhIHBhcnRpY3VsYXIgUE9XRVItZmFtaWx5IENQVS4KKyAqLworc3RydWN0IHBvd2VyX3BtdSB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCW5fY291bnRlcjsKKwlpbnQJCW1heF9hbHRlcm5hdGl2ZXM7CisJdW5zaWduZWQgbG9uZwlhZGRfZmllbGRzOworCXVuc2lnbmVkIGxvbmcJdGVzdF9hZGRlcjsKKwlpbnQJCSgqY29tcHV0ZV9tbWNyKSh1NjQgZXZlbnRzW10sIGludCBuX2V2LAorCQkJCXVuc2lnbmVkIGludCBod2NbXSwgdW5zaWduZWQgbG9uZyBtbWNyW10pOworCWludAkJKCpnZXRfY29uc3RyYWludCkodTY0IGV2ZW50X2lkLCB1bnNpZ25lZCBsb25nICptc2twLAorCQkJCXVuc2lnbmVkIGxvbmcgKnZhbHApOworCWludAkJKCpnZXRfYWx0ZXJuYXRpdmVzKSh1NjQgZXZlbnRfaWQsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQl1NjQgYWx0W10pOworCXZvaWQJCSgqZGlzYWJsZV9wbWMpKHVuc2lnbmVkIGludCBwbWMsIHVuc2lnbmVkIGxvbmcgbW1jcltdKTsKKwlpbnQJCSgqbGltaXRlZF9wbWNfZXZlbnQpKHU2NCBldmVudF9pZCk7CisJdTMyCQlmbGFnczsKKwlpbnQJCW5fZ2VuZXJpYzsKKwlpbnQJCSpnZW5lcmljX2V2ZW50czsKKwlpbnQJCSgqY2FjaGVfZXZlbnRzKVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCSAgICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkgICAgICAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07Cit9OworCisvKgorICogVmFsdWVzIGZvciBwb3dlcl9wbXUuZmxhZ3MKKyAqLworI2RlZmluZSBQUE1VX0xJTUlURURfUE1DNV82CTEJLyogUE1DNS82IGhhdmUgbGltaXRlZCBmdW5jdGlvbiAqLworI2RlZmluZSBQUE1VX0FMVF9TSVBSCQkyCS8qIHVzZXMgYWx0ZXJuYXRlIHBvc24gZm9yIFNJUFIvSFYgKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgZmxhZ3MgdG8gZ2V0X2FsdGVybmF0aXZlcygpCisgKi8KKyNkZWZpbmUgUFBNVV9MSU1JVEVEX1BNQ19PSwkxCS8qIGNhbiBwdXQgdGhpcyBvbiBhIGxpbWl0ZWQgUE1DICovCisjZGVmaW5lIFBQTVVfTElNSVRFRF9QTUNfUkVRRAkyCS8qIGhhdmUgdG8gcHV0IHRoaXMgb24gYSBsaW1pdGVkIFBNQyAqLworI2RlZmluZSBQUE1VX09OTFlfQ09VTlRfUlVOCTQJLyogb25seSBjb3VudGluZyBpbiBydW4gc3RhdGUgKi8KKworZXh0ZXJuIGludCByZWdpc3Rlcl9wb3dlcl9wbXUoc3RydWN0IHBvd2VyX3BtdSAqKTsKKworc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkxCisKKy8qCisgKiBPbmx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisgKiBpZiB3ZSBoYXZlIGhhcmR3YXJlIFBNVSBzdXBwb3J0LgorICovCisjaWZkZWYgQ09ORklHX1BQQ19QRVJGX0NUUlMKKyNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCXBlcmZfbWlzY19mbGFncyhyZWdzKQorI2VuZGlmCisKKy8qCisgKiBUaGUgcG93ZXJfcG11LmdldF9jb25zdHJhaW50IGZ1bmN0aW9uIHJldHVybnMgYSAzMi82NC1iaXQgdmFsdWUgYW5kCisgKiBhIDMyLzY0LWJpdCBtYXNrIHRoYXQgZXhwcmVzcyB0aGUgY29uc3RyYWludHMgYmV0d2VlbiB0aGlzIGV2ZW50X2lkIGFuZAorICogb3RoZXIgZXZlbnRzLgorICoKKyAqIFRoZSB2YWx1ZSBhbmQgbWFzayBhcmUgZGl2aWRlZCB1cCBpbnRvIChub24tb3ZlcmxhcHBpbmcpIGJpdGZpZWxkcworICogb2YgdGhyZWUgZGlmZmVyZW50IHR5cGVzOgorICoKKyAqIFNlbGVjdCBmaWVsZDogdGhpcyBleHByZXNzZXMgdGhlIGNvbnN0cmFpbnQgdGhhdCBzb21lIHNldCBvZiBiaXRzCisgKiBpbiBNTUNSKiBuZWVkcyB0byBiZSBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhpcyBldmVudF9pZC4gIEZvciBhCisgKiBzZWxlY3QgZmllbGQsIHRoZSBtYXNrIGNvbnRhaW5zIDFzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgZmllbGQsIGFuZAorICogdGhlIHZhbHVlIGNvbnRhaW5zIGEgdW5pcXVlIHZhbHVlIGZvciBlYWNoIHBvc3NpYmxlIHNldHRpbmcgb2YgdGhlCisgKiBNTUNSKiBiaXRzLiAgVGhlIGNvbnN0cmFpbnQgY2hlY2tpbmcgY29kZSB3aWxsIGVuc3VyZSB0aGF0IHR3byBldmVudHMKKyAqIHRoYXQgc2V0IHRoZSBzYW1lIGZpZWxkIGluIHRoZWlyIG1hc2tzIGhhdmUgdGhlIHNhbWUgdmFsdWUgaW4gdGhlaXIKKyAqIHZhbHVlIGR3b3Jkcy4KKyAqCisgKiBBZGQgZmllbGQ6IHRoaXMgZXhwcmVzc2VzIHRoZSBjb25zdHJhaW50IHRoYXQgdGhlcmUgY2FuIGJlIGF0IG1vc3QKKyAqIE4gZXZlbnRzIGluIGEgcGFydGljdWxhciBjbGFzcy4gIEEgZmllbGQgb2YgayBiaXRzIGNhbiBiZSB1c2VkIGZvcgorICogTiA8PSAyXihrLTEpIC0gMS4gIFRoZSBtYXNrIGhhcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIGZpZWxkCisgKiBzZXQgKGFuZCB0aGUgb3RoZXIgYml0cyAwKSwgYW5kIHRoZSB2YWx1ZSBoYXMgb25seSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKyAqIGJpdCBvZiB0aGUgZmllbGQgc2V0LiAgSW4gYWRkaXRpb24sIHRoZSAnYWRkX2ZpZWxkcycgYW5kICd0ZXN0X2FkZGVyJworICogaW4gdGhlIHN0cnVjdCBwb3dlcl9wbXUgZm9yIHRoaXMgcHJvY2Vzc29yIGNvbWUgaW50byBwbGF5LiAgVGhlCisgKiBhZGRfZmllbGRzIHZhbHVlIGNvbnRhaW5zIDEgaW4gdGhlIExTQiBvZiB0aGUgZmllbGQsIGFuZCB0aGUKKyAqIHRlc3RfYWRkZXIgY29udGFpbnMgMl4oay0xKSAtIDEgLSBOIGluIHRoZSBmaWVsZC4KKyAqCisgKiBOQU5EIGZpZWxkOiB0aGlzIGV4cHJlc3NlcyB0aGUgY29uc3RyYWludCB0aGF0IHlvdSBtYXkgbm90IGhhdmUgZXZlbnRzCisgKiBpbiBhbGwgb2YgYSBzZXQgb2YgY2xhc3Nlcy4gIChGb3IgZXhhbXBsZSwgb24gUFBDOTcwLCB5b3UgY2FuJ3Qgc2VsZWN0CisgKiBldmVudHMgZnJvbSB0aGUgRlBVLCBJU1UgYW5kIElEVSBzaW11bHRhbmVvdXNseSwgYWx0aG91Z2ggYW55IHR3byBhcmUKKyAqIHBvc3NpYmxlLikgIEZvciBOIGNsYXNzZXMsIHRoZSBmaWVsZCBpcyBOKzEgYml0cyB3aWRlLCBhbmQgZWFjaCBjbGFzcworICogaXMgYXNzaWduZWQgb25lIGJpdCBmcm9tIHRoZSBsZWFzdC1zaWduaWZpY2FudCBOIGJpdHMuICBUaGUgbWFzayBoYXMKKyAqIG9ubHkgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IHNldCwgYW5kIHRoZSB2YWx1ZSBoYXMgb25seSB0aGUgYml0CisgKiBmb3IgdGhlIGV2ZW50X2lkJ3MgY2xhc3Mgc2V0LiAgVGhlIHRlc3RfYWRkZXIgaGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudAorICogYml0IHNldCBpbiB0aGUgZmllbGQuCisgKgorICogSWYgYW4gZXZlbnRfaWQgaXMgbm90IHN1YmplY3QgdG8gdGhlIGNvbnN0cmFpbnQgZXhwcmVzc2VkIGJ5IGEgcGFydGljdWxhcgorICogZmllbGQsIHRoZW4gaXQgd2lsbCBoYXZlIDAgaW4gYm90aCB0aGUgbWFzayBhbmQgdmFsdWUgZm9yIHRoYXQgZmllbGQuCisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCBlZDI0YmQ5Li5jN2Q2NzFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zMjIsNyArMzIyLDcgQEAKIFNZU0NBTExfU1BVKGR1cDMpCiBTWVNDQUxMX1NQVShwaXBlMikKIFNZU0NBTEwoaW5vdGlmeV9pbml0MSkKLVNZU0NBTExfU1BVKHBlcmZfY291bnRlcl9vcGVuKQorU1lTQ0FMTF9TUFUocGVyZl9ldmVudF9vcGVuKQogQ09NUEFUX1NZU19TUFUocHJlYWR2KQogQ09NUEFUX1NZU19TUFUocHdyaXRldikKIENPTVBBVF9TWVMocnRfdGdzaWdxdWV1ZWluZm8pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggY2VmMDgwYi4uZjZjYTc2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzQxLDcgKzM0MSw3IEBACiAjZGVmaW5lIF9fTlJfZHVwMwkJMzE2CiAjZGVmaW5lIF9fTlJfcGlwZTIJCTMxNwogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzE4Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzE5CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMxOQogI2RlZmluZSBfX05SX3ByZWFkdgkJMzIwCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzIxCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzIyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCA1NjlmNzljLi5iMjM2NjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTk3LDcgKzk3LDcgQEAKIAogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikJKz0gZnRyYWNlLm8KLW9iai0kKENPTkZJR19QUENfUEVSRl9DVFJTKQkrPSBwZXJmX2NvdW50ZXIubyBwZXJmX2NhbGxjaGFpbi5vCitvYmotJChDT05GSUdfUFBDX1BFUkZfQ1RSUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfY2FsbGNoYWluLm8KIG9iajY0LSQoQ09ORklHX1BQQ19QRVJGX0NUUlMpCSs9IHBvd2VyNC1wbXUubyBwcGM5NzAtcG11Lm8gcG93ZXI1LXBtdS5vIFwKIAkJCQkgICBwb3dlcjUrLXBtdS5vIHBvd2VyNi1wbXUubyBwb3dlcjctcG11Lm8KIG9iajMyLSQoQ09ORklHX1BQQ19QRVJGX0NUUlMpCSs9IG1wYzc0NTAtcG11Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBmMGRmMjg1Li4wODEyYjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlERUZJTkUoUEFDQUtNU1IsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga2VybmVsX21zcikpOwogCURFRklORShQQUNBU09GVElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNvZnRfZW5hYmxlZCkpOwogCURFRklORShQQUNBSEFSRElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGhhcmRfZW5hYmxlZCkpOwotCURFRklORShQQUNBUEVSRlBFTkQsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgcGVyZl9jb3VudGVyX3BlbmRpbmcpKTsKKwlERUZJTkUoUEFDQVBFUkZQRU5ELCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHBlcmZfZXZlbnRfcGVuZGluZykpOwogCURFRklORShQQUNBQ09OVEVYVElELCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGNvbnRleHQuaWQpKTsKICNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUwogCURFRklORShQQUNBTE9XU0xJQ0VTUFNJWkUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCA2NmJjZGEzLi45MDBlMGVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC01NTYsMTQgKzU1NiwxNCBAQAogMjoKIAlUUkFDRV9BTkRfUkVTVE9SRV9JUlEocjUpOwogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLQkvKiBjaGVjayBwYWNhLT5wZXJmX2NvdW50ZXJfcGVuZGluZyBpZiB3ZSdyZSBlbmFibGluZyBpbnRzICovCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJLyogY2hlY2sgcGFjYS0+cGVyZl9ldmVudF9wZW5kaW5nIGlmIHdlJ3JlIGVuYWJsaW5nIGludHMgKi8KIAlsYnoJcjMsUEFDQVBFUkZQRU5EKHIxMykKIAlhbmQuCXIzLHIzLHI1CiAJYmVxCTI3ZgotCWJsCS5wZXJmX2NvdW50ZXJfZG9fcGVuZGluZworCWJsCS5wZXJmX2V2ZW50X2RvX3BlbmRpbmcKIDI3OgotI2VuZGlmIC8qIENPTkZJR19QRVJGX0NPVU5URVJTICovCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKIAkvKiBleHRyYWN0IEVFIGJpdCBhbmQgdXNlIGl0IHRvIHJlc3RvcmUgcGFjYS0+aGFyZF9lbmFibGVkICovCiAJbGQJcjMsX01TUihyMSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IGY3ZjM3NmUuLmU1ZDEyMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNTMsNyArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xMzgsOSArMTM4LDkgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VXzY0ICovCiAKLQlpZiAodGVzdF9wZXJmX2NvdW50ZXJfcGVuZGluZygpKSB7Ci0JCWNsZWFyX3BlcmZfY291bnRlcl9wZW5kaW5nKCk7Ci0JCXBlcmZfY291bnRlcl9kb19wZW5kaW5nKCk7CisJaWYgKHRlc3RfcGVyZl9ldmVudF9wZW5kaW5nKCkpIHsKKwkJY2xlYXJfcGVyZl9ldmVudF9wZW5kaW5nKCk7CisJCXBlcmZfZXZlbnRfZG9fcGVuZGluZygpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21wYzc0NTAtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21wYzc0NTAtcG11LmMKaW5kZXggY2M0NjZkMC4uMDlkNzIwMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tcGM3NDUwLXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbXBjNzQ1MC1wbXUuYwpAQCAtOSw3ICs5LDcgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggZjc0YjYyYy4uMGEwM2NmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY291bnRlci5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NvdW50ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlZWZhZi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY291bnRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMxNiArMCwwIEBACi0vKgotICogUGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IC0gcG93ZXJwYyBhcmNoaXRlY3R1cmUgY29kZQotICoKLSAqIENvcHlyaWdodCAyMDA4LTIwMDkgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZy5oPgotI2luY2x1ZGUgPGFzbS9wbWMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLQotc3RydWN0IGNwdV9od19jb3VudGVycyB7Ci0JaW50IG5fY291bnRlcnM7Ci0JaW50IG5fcGVyY3B1OwotCWludCBkaXNhYmxlZDsKLQlpbnQgbl9hZGRlZDsKLQlpbnQgbl9saW1pdGVkOwotCXU4ICBwbWNzX2VuYWJsZWQ7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcltNQVhfSFdDT1VOVEVSU107Ci0JdTY0IGV2ZW50c1tNQVhfSFdDT1VOVEVSU107Ci0JdW5zaWduZWQgaW50IGZsYWdzW01BWF9IV0NPVU5URVJTXTsKLQl1bnNpZ25lZCBsb25nIG1tY3JbM107Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqbGltaXRlZF9jb3VudGVyW01BWF9MSU1JVEVEX0hXQ09VTlRFUlNdOwotCXU4ICBsaW1pdGVkX2h3aWR4W01BWF9MSU1JVEVEX0hXQ09VTlRFUlNdOwotCXU2NCBhbHRlcm5hdGl2ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwotCXVuc2lnbmVkIGxvbmcgYW1hc2tzW01BWF9IV0NPVU5URVJTXVtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKLQl1bnNpZ25lZCBsb25nIGF2YWx1ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwotfTsKLURFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfY291bnRlcnMsIGNwdV9od19jb3VudGVycyk7Ci0KLXN0cnVjdCBwb3dlcl9wbXUgKnBwbXU7Ci0KLS8qCi0gKiBOb3JtYWxseSwgdG8gaWdub3JlIGtlcm5lbCBldmVudHMgd2Ugc2V0IHRoZSBGQ1MgKGZyZWV6ZSBjb3VudGVycwotICogaW4gc3VwZXJ2aXNvciBtb2RlKSBiaXQgaW4gTU1DUjAsIGJ1dCBpZiB0aGUga2VybmVsIHJ1bnMgd2l0aCB0aGUKLSAqIGh5cGVydmlzb3IgYml0IHNldCBpbiB0aGUgTVNSLCBvciBpZiB3ZSBhcmUgcnVubmluZyBvbiBhIHByb2Nlc3NvcgotICogd2hlcmUgdGhlIGh5cGVydmlzb3IgYml0IGlzIGZvcmNlZCB0byAxIChhcyBvbiBBcHBsZSBHNSBwcm9jZXNzb3JzKSwKLSAqIHRoZW4gd2UgbmVlZCB0byB1c2UgdGhlIEZDSFYgYml0IHRvIGlnbm9yZSBrZXJuZWwgZXZlbnRzLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZyZWV6ZV9jb3VudGVyc19rZXJuZWwgPSBNTUNSMF9GQ1M7Ci0KLS8qCi0gKiAzMi1iaXQgZG9lc24ndCBoYXZlIE1NQ1JBIGJ1dCBkb2VzIGhhdmUgYW4gTU1DUjIsCi0gKiBhbmQgYSBmZXcgb3RoZXIgbmFtZXMgYXJlIGRpZmZlcmVudC4KLSAqLwotI2lmZGVmIENPTkZJR19QUEMzMgotCi0jZGVmaW5lIE1NQ1IwX0ZDSFYJCTAKLSNkZWZpbmUgTU1DUjBfUE1DakNFCQlNTUNSMF9QTUNuQ0UKLQotI2RlZmluZSBTUFJOX01NQ1JBCQlTUFJOX01NQ1IyCi0jZGVmaW5lIE1NQ1JBX1NBTVBMRV9FTkFCTEUJMAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGVyZl9pcF9hZGp1c3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9nZXRfZGF0YV9hZGRyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgKmFkZHJwKSB7IH0KLXN0YXRpYyBpbmxpbmUgdTMyIHBlcmZfZ2V0X21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9yZWFkX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfQotc3RhdGljIGlubGluZSBpbnQgcGVyZl9pbnRyX2lzX25taShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwotCi0vKgotICogVGhpbmdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIDY0LWJpdCBpbXBsZW1lbnRhdGlvbnMuCi0gKi8KLSNpZmRlZiBDT05GSUdfUFBDNjQKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBlcmZfaXBfYWRqdXN0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSByZWdzLT5kc2lzcjsKLQotCWlmICgobW1jcmEgJiBNTUNSQV9TQU1QTEVfRU5BQkxFKSAmJiAhKHBwbXUtPmZsYWdzICYgUFBNVV9BTFRfU0lQUikpIHsKLQkJdW5zaWduZWQgbG9uZyBzbG90ID0gKG1tY3JhICYgTU1DUkFfU0xPVCkgPj4gTU1DUkFfU0xPVF9TSElGVDsKLQkJaWYgKHNsb3QgPiAxKQotCQkJcmV0dXJuIDQgKiAoc2xvdCAtIDEpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoZSB1c2VyIHdhbnRzIGEgZGF0YSBhZGRyZXNzIHJlY29yZGVkLgotICogSWYgd2UncmUgbm90IGRvaW5nIGluc3RydWN0aW9uIHNhbXBsaW5nLCBnaXZlIHRoZW0gdGhlIFNEQVIKLSAqIChzYW1wbGVkIGRhdGEgYWRkcmVzcykuICBJZiB3ZSBhcmUgZG9pbmcgaW5zdHJ1Y3Rpb24gc2FtcGxpbmcsIHRoZW4KLSAqIG9ubHkgZ2l2ZSB0aGVtIHRoZSBTREFSIGlmIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBpbnN0cnVjdGlvbgotICogcG9pbnRlZCB0byBieSBTSUFSOyB0aGlzIGlzIGluZGljYXRlZCBieSB0aGUgW1BPV0VSNl9dTU1DUkFfU0RTWU5DCi0gKiBiaXQgaW4gTU1DUkEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2dldF9kYXRhX2FkZHIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCAqYWRkcnApCi17Ci0JdW5zaWduZWQgbG9uZyBtbWNyYSA9IHJlZ3MtPmRzaXNyOwotCXVuc2lnbmVkIGxvbmcgc2RzeW5jID0gKHBwbXUtPmZsYWdzICYgUFBNVV9BTFRfU0lQUikgPwotCQlQT1dFUjZfTU1DUkFfU0RTWU5DIDogTU1DUkFfU0RTWU5DOwotCi0JaWYgKCEobW1jcmEgJiBNTUNSQV9TQU1QTEVfRU5BQkxFKSB8fCAobW1jcmEgJiBzZHN5bmMpKQotCQkqYWRkcnAgPSBtZnNwcihTUFJOX1NEQVIpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBwZXJmX2dldF9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSByZWdzLT5kc2lzcjsKLQotCWlmIChUUkFQKHJlZ3MpICE9IDB4ZjAwKQotCQlyZXR1cm4gMDsJLyogbm90IGEgUE1VIGludGVycnVwdCAqLwotCi0JaWYgKHBwbXUtPmZsYWdzICYgUFBNVV9BTFRfU0lQUikgewotCQlpZiAobW1jcmEgJiBQT1dFUjZfTU1DUkFfU0lIVikKLQkJCXJldHVybiBQRVJGX0VWRU5UX01JU0NfSFlQRVJWSVNPUjsKLQkJcmV0dXJuIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSVBSKSA/Ci0JCQlQRVJGX0VWRU5UX01JU0NfVVNFUiA6IFBFUkZfRVZFTlRfTUlTQ19LRVJORUw7Ci0JfQotCWlmIChtbWNyYSAmIE1NQ1JBX1NJSFYpCi0JCXJldHVybiBQRVJGX0VWRU5UX01JU0NfSFlQRVJWSVNPUjsKLQlyZXR1cm4gKG1tY3JhICYgTU1DUkFfU0lQUikgPyBQRVJGX0VWRU5UX01JU0NfVVNFUiA6Ci0JCVBFUkZfRVZFTlRfTUlTQ19LRVJORUw7Ci19Ci0KLS8qCi0gKiBPdmVybG9hZCByZWdzLT5kc2lzciB0byBzdG9yZSBNTUNSQSBzbyB3ZSBvbmx5IG5lZWQgdG8gcmVhZCBpdCBvbmNlCi0gKiBvbiBlYWNoIGludGVycnVwdC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfcmVhZF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJlZ3MtPmRzaXNyID0gbWZzcHIoU1BSTl9NTUNSQSk7Ci19Ci0KLS8qCi0gKiBJZiBpbnRlcnJ1cHRzIHdlcmUgc29mdC1kaXNhYmxlZCB3aGVuIGEgUE1VIGludGVycnVwdCBvY2N1cnMsIHRyZWF0Ci0gKiBpdCBhcyBhbiBOTUkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBlcmZfaW50cl9pc19ubWkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuICFyZWdzLT5zb2Z0ZTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwotCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotdm9pZCBwZXJmX2NvdW50ZXJfcHJpbnRfZGVidWcodm9pZCkKLXsKLX0KLQotLyoKLSAqIFJlYWQgb25lIHBlcmZvcm1hbmNlIG1vbml0b3IgY291bnRlciAoUE1DKS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9wbWMoaW50IGlkeCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCXN3aXRjaCAoaWR4KSB7Ci0JY2FzZSAxOgotCQl2YWwgPSBtZnNwcihTUFJOX1BNQzEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXZhbCA9IG1mc3ByKFNQUk5fUE1DMik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJdmFsID0gbWZzcHIoU1BSTl9QTUMzKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQl2YWwgPSBtZnNwcihTUFJOX1BNQzQpOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCXZhbCA9IG1mc3ByKFNQUk5fUE1DNSk7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJdmFsID0gbWZzcHIoU1BSTl9QTUM2KTsKLQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JY2FzZSA3OgotCQl2YWwgPSBtZnNwcihTUFJOX1BNQzcpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCXZhbCA9IG1mc3ByKFNQUk5fUE1DOCk7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAib29wcyB0cnlpbmcgdG8gcmVhZCBQTUMlZFxuIiwgaWR4KTsKLQkJdmFsID0gMDsKLQl9Ci0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIFdyaXRlIG9uZSBQTUMuCi0gKi8KLXN0YXRpYyB2b2lkIHdyaXRlX3BtYyhpbnQgaWR4LCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlzd2l0Y2ggKGlkeCkgewotCWNhc2UgMToKLQkJbXRzcHIoU1BSTl9QTUMxLCB2YWwpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCW10c3ByKFNQUk5fUE1DMiwgdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQltdHNwcihTUFJOX1BNQzMsIHZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJbXRzcHIoU1BSTl9QTUM0LCB2YWwpOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCW10c3ByKFNQUk5fUE1DNSwgdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQltdHNwcihTUFJOX1BNQzYsIHZhbCk7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19QUEM2NAotCWNhc2UgNzoKLQkJbXRzcHIoU1BSTl9QTUM3LCB2YWwpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCW10c3ByKFNQUk5fUE1DOCwgdmFsKTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJvb3BzIHRyeWluZyB0byB3cml0ZSBQTUMlZFxuIiwgaWR4KTsKLQl9Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiBhIHNldCBvZiBldmVudHMgY2FuIGFsbCBnbyBvbiB0aGUgUE1VIGF0IG9uY2UuCi0gKiBJZiB0aGV5IGNhbid0LCB0aGlzIHdpbGwgbG9vayBhdCBhbHRlcm5hdGl2ZSBjb2RlcyBmb3IgdGhlIGV2ZW50cwotICogYW5kIHNlZSBpZiBhbnkgY29tYmluYXRpb24gb2YgYWx0ZXJuYXRpdmUgY29kZXMgaXMgZmVhc2libGUuCi0gKiBUaGUgZmVhc2libGUgc2V0IGlzIHJldHVybmVkIGluIGV2ZW50W10uCi0gKi8KLXN0YXRpYyBpbnQgcG93ZXJfY2hlY2tfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHcsCi0JCQkJICAgdTY0IGV2ZW50W10sIHVuc2lnbmVkIGludCBjZmxhZ3NbXSwKLQkJCQkgICBpbnQgbl9ldikKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2ssIHZhbHVlLCBudjsKLQl1bnNpZ25lZCBsb25nIHNtYXNrc1tNQVhfSFdDT1VOVEVSU10sIHN2YWx1ZXNbTUFYX0hXQ09VTlRFUlNdOwotCWludCBuX2FsdFtNQVhfSFdDT1VOVEVSU10sIGNob2ljZVtNQVhfSFdDT1VOVEVSU107Ci0JaW50IGksIGo7Ci0JdW5zaWduZWQgbG9uZyBhZGRmID0gcHBtdS0+YWRkX2ZpZWxkczsKLQl1bnNpZ25lZCBsb25nIHRhZGQgPSBwcG11LT50ZXN0X2FkZGVyOwotCi0JaWYgKG5fZXYgPiBwcG11LT5uX2NvdW50ZXIpCi0JCXJldHVybiAtMTsKLQotCS8qIEZpcnN0IHNlZSBpZiB0aGUgZXZlbnRzIHdpbGwgZ28gb24gYXMtaXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbl9ldjsgKytpKSB7Ci0JCWlmICgoY2ZsYWdzW2ldICYgUFBNVV9MSU1JVEVEX1BNQ19SRVFEKQotCQkgICAgJiYgIXBwbXUtPmxpbWl0ZWRfcG1jX2V2ZW50KGV2ZW50W2ldKSkgewotCQkJcHBtdS0+Z2V0X2FsdGVybmF0aXZlcyhldmVudFtpXSwgY2ZsYWdzW2ldLAotCQkJCQkgICAgICAgY3B1aHctPmFsdGVybmF0aXZlc1tpXSk7Ci0JCQlldmVudFtpXSA9IGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV1bMF07Ci0JCX0KLQkJaWYgKHBwbXUtPmdldF9jb25zdHJhaW50KGV2ZW50W2ldLCAmY3B1aHctPmFtYXNrc1tpXVswXSwKLQkJCQkJICZjcHVody0+YXZhbHVlc1tpXVswXSkpCi0JCQlyZXR1cm4gLTE7Ci0JfQotCXZhbHVlID0gbWFzayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5fZXY7ICsraSkgewotCQludiA9ICh2YWx1ZSB8IGNwdWh3LT5hdmFsdWVzW2ldWzBdKSArCi0JCQkodmFsdWUgJiBjcHVody0+YXZhbHVlc1tpXVswXSAmIGFkZGYpOwotCQlpZiAoKCgobnYgKyB0YWRkKSBeIHZhbHVlKSAmIG1hc2spICE9IDAgfHwKLQkJICAgICgoKG52ICsgdGFkZCkgXiBjcHVody0+YXZhbHVlc1tpXVswXSkgJgotCQkgICAgIGNwdWh3LT5hbWFza3NbaV1bMF0pICE9IDApCi0JCQlicmVhazsKLQkJdmFsdWUgPSBudjsKLQkJbWFzayB8PSBjcHVody0+YW1hc2tzW2ldWzBdOwotCX0KLQlpZiAoaSA9PSBuX2V2KQotCQlyZXR1cm4gMDsJLyogYWxsIE9LICovCi0KLQkvKiBkb2Vzbid0IHdvcmssIGdhdGhlciBhbHRlcm5hdGl2ZXMuLi4gKi8KLQlpZiAoIXBwbXUtPmdldF9hbHRlcm5hdGl2ZXMpCi0JCXJldHVybiAtMTsKLQlmb3IgKGkgPSAwOyBpIDwgbl9ldjsgKytpKSB7Ci0JCWNob2ljZVtpXSA9IDA7Ci0JCW5fYWx0W2ldID0gcHBtdS0+Z2V0X2FsdGVybmF0aXZlcyhldmVudFtpXSwgY2ZsYWdzW2ldLAotCQkJCQkJICBjcHVody0+YWx0ZXJuYXRpdmVzW2ldKTsKLQkJZm9yIChqID0gMTsgaiA8IG5fYWx0W2ldOyArK2opCi0JCQlwcG11LT5nZXRfY29uc3RyYWludChjcHVody0+YWx0ZXJuYXRpdmVzW2ldW2pdLAotCQkJCQkgICAgICZjcHVody0+YW1hc2tzW2ldW2pdLAotCQkJCQkgICAgICZjcHVody0+YXZhbHVlc1tpXVtqXSk7Ci0JfQotCi0JLyogZW51bWVyYXRlIGFsbCBwb3NzaWJpbGl0aWVzIGFuZCBzZWUgaWYgYW55IHdpbGwgd29yayAqLwotCWkgPSAwOwotCWogPSAtMTsKLQl2YWx1ZSA9IG1hc2sgPSBudiA9IDA7Ci0Jd2hpbGUgKGkgPCBuX2V2KSB7Ci0JCWlmIChqID49IDApIHsKLQkJCS8qIHdlJ3JlIGJhY2t0cmFja2luZywgcmVzdG9yZSBjb250ZXh0ICovCi0JCQl2YWx1ZSA9IHN2YWx1ZXNbaV07Ci0JCQltYXNrID0gc21hc2tzW2ldOwotCQkJaiA9IGNob2ljZVtpXTsKLQkJfQotCQkvKgotCQkgKiBTZWUgaWYgYW55IGFsdGVybmF0aXZlIGsgZm9yIGV2ZW50IGksCi0JCSAqIHdoZXJlIGsgPiBqLCB3aWxsIHNhdGlzZnkgdGhlIGNvbnN0cmFpbnRzLgotCQkgKi8KLQkJd2hpbGUgKCsraiA8IG5fYWx0W2ldKSB7Ci0JCQludiA9ICh2YWx1ZSB8IGNwdWh3LT5hdmFsdWVzW2ldW2pdKSArCi0JCQkJKHZhbHVlICYgY3B1aHctPmF2YWx1ZXNbaV1bal0gJiBhZGRmKTsKLQkJCWlmICgoKChudiArIHRhZGQpIF4gdmFsdWUpICYgbWFzaykgPT0gMCAmJgotCQkJICAgICgoKG52ICsgdGFkZCkgXiBjcHVody0+YXZhbHVlc1tpXVtqXSkKLQkJCSAgICAgJiBjcHVody0+YW1hc2tzW2ldW2pdKSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChqID49IG5fYWx0W2ldKSB7Ci0JCQkvKgotCQkJICogTm8gZmVhc2libGUgYWx0ZXJuYXRpdmUsIGJhY2t0cmFjawotCQkJICogdG8gZXZlbnQgaS0xIGFuZCBjb250aW51ZSBlbnVtZXJhdGluZyBpdHMKLQkJCSAqIGFsdGVybmF0aXZlcyBmcm9tIHdoZXJlIHdlIGdvdCB1cCB0by4KLQkJCSAqLwotCQkJaWYgKC0taSA8IDApCi0JCQkJcmV0dXJuIC0xOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEZvdW5kIGEgZmVhc2libGUgYWx0ZXJuYXRpdmUgZm9yIGV2ZW50IGksCi0JCQkgKiByZW1lbWJlciB3aGVyZSB3ZSBnb3QgdXAgdG8gd2l0aCB0aGlzIGV2ZW50LAotCQkJICogZ28gb24gdG8gdGhlIG5leHQgZXZlbnQsIGFuZCBzdGFydCB3aXRoCi0JCQkgKiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUgZm9yIGl0LgotCQkJICovCi0JCQljaG9pY2VbaV0gPSBqOwotCQkJc3ZhbHVlc1tpXSA9IHZhbHVlOwotCQkJc21hc2tzW2ldID0gbWFzazsKLQkJCXZhbHVlID0gbnY7Ci0JCQltYXNrIHw9IGNwdWh3LT5hbWFza3NbaV1bal07Ci0JCQkrK2k7Ci0JCQlqID0gLTE7Ci0JCX0KLQl9Ci0KLQkvKiBPSywgd2UgaGF2ZSBhIGZlYXNpYmxlIGNvbWJpbmF0aW9uLCB0ZWxsIHRoZSBjYWxsZXIgdGhlIHNvbHV0aW9uICovCi0JZm9yIChpID0gMDsgaSA8IG5fZXY7ICsraSkKLQkJZXZlbnRbaV0gPSBjcHVody0+YWx0ZXJuYXRpdmVzW2ldW2Nob2ljZVtpXV07Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiBuZXdseS1hZGRlZCBjb3VudGVycyBoYXZlIGNvbnNpc3RlbnQgc2V0dGluZ3MgZm9yCi0gKiBleGNsdWRlX3t1c2VyLGtlcm5lbCxodn0gd2l0aCBlYWNoIG90aGVyIGFuZCBhbnkgcHJldmlvdXNseQotICogYWRkZWQgY291bnRlcnMuCi0gKi8KLXN0YXRpYyBpbnQgY2hlY2tfZXhjbHVkZXMoc3RydWN0IHBlcmZfY291bnRlciAqKmN0cnMsIHVuc2lnbmVkIGludCBjZmxhZ3NbXSwKLQkJCSAgaW50IG5fcHJldiwgaW50IG5fbmV3KQotewotCWludCBldSA9IDAsIGVrID0gMCwgZWggPSAwOwotCWludCBpLCBuLCBmaXJzdDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JbiA9IG5fcHJldiArIG5fbmV3OwotCWlmIChuIDw9IDEpCi0JCXJldHVybiAwOwotCi0JZmlyc3QgPSAxOwotCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKLQkJaWYgKGNmbGFnc1tpXSAmIFBQTVVfTElNSVRFRF9QTUNfT0spIHsKLQkJCWNmbGFnc1tpXSAmPSB+UFBNVV9MSU1JVEVEX1BNQ19SRVFEOwotCQkJY29udGludWU7Ci0JCX0KLQkJY291bnRlciA9IGN0cnNbaV07Ci0JCWlmIChmaXJzdCkgewotCQkJZXUgPSBjb3VudGVyLT5hdHRyLmV4Y2x1ZGVfdXNlcjsKLQkJCWVrID0gY291bnRlci0+YXR0ci5leGNsdWRlX2tlcm5lbDsKLQkJCWVoID0gY291bnRlci0+YXR0ci5leGNsdWRlX2h2OwotCQkJZmlyc3QgPSAwOwotCQl9IGVsc2UgaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVkZV91c2VyICE9IGV1IHx8Ci0JCQkgICBjb3VudGVyLT5hdHRyLmV4Y2x1ZGVfa2VybmVsICE9IGVrIHx8Ci0JCQkgICBjb3VudGVyLT5hdHRyLmV4Y2x1ZGVfaHYgIT0gZWgpIHsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JfQotCi0JaWYgKGV1IHx8IGVrIHx8IGVoKQotCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQotCQkJaWYgKGNmbGFnc1tpXSAmIFBQTVVfTElNSVRFRF9QTUNfT0spCi0JCQkJY2ZsYWdzW2ldIHw9IFBQTVVfTElNSVRFRF9QTUNfUkVRRDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwb3dlcl9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXM2NCB2YWwsIGRlbHRhLCBwcmV2OwotCi0JaWYgKCFjb3VudGVyLT5ody5pZHgpCi0JCXJldHVybjsKLQkvKgotCSAqIFBlcmZvcm1hbmNlIG1vbml0b3IgaW50ZXJydXB0cyBjb21lIGV2ZW4gd2hlbiBpbnRlcnJ1cHRzCi0JICogYXJlIHNvZnQtZGlzYWJsZWQsIGFzIGxvbmcgYXMgaW50ZXJydXB0cyBhcmUgaGFyZC1lbmFibGVkLgotCSAqIFRoZXJlZm9yZSB3ZSB0cmVhdCB0aGVtIGxpa2UgTk1Jcy4KLQkgKi8KLQlkbyB7Ci0JCXByZXYgPSBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5ody5wcmV2X2NvdW50KTsKLQkJYmFycmllcigpOwotCQl2YWwgPSByZWFkX3BtYyhjb3VudGVyLT5ody5pZHgpOwotCX0gd2hpbGUgKGF0b21pYzY0X2NtcHhjaGcoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIHByZXYsIHZhbCkgIT0gcHJldik7Ci0KLQkvKiBUaGUgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cyB3aWRlICovCi0JZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmY291bnRlci0+Y291bnQpOwotCWF0b21pYzY0X3N1YihkZWx0YSwgJmNvdW50ZXItPmh3LnBlcmlvZF9sZWZ0KTsKLX0KLQotLyoKLSAqIE9uIHNvbWUgbWFjaGluZXMsIFBNQzUgYW5kIFBNQzYgY2FuJ3QgYmUgd3JpdHRlbiwgZG9uJ3QgcmVzcGVjdAotICogdGhlIGZyZWV6ZSBjb25kaXRpb25zLCBhbmQgZG9uJ3QgZ2VuZXJhdGUgaW50ZXJydXB0cy4gIFRoaXMgdGVsbHMKLSAqIHVzIGlmIGBjb3VudGVyJyBpcyB1c2luZyBzdWNoIGEgUE1DLgotICovCi1zdGF0aWMgaW50IGlzX2xpbWl0ZWRfcG1jKGludCBwbWNudW0pCi17Ci0JcmV0dXJuIChwcG11LT5mbGFncyAmIFBQTVVfTElNSVRFRF9QTUM1XzYpCi0JCSYmIChwbWNudW0gPT0gNSB8fCBwbWNudW0gPT0gNik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWV6ZV9saW1pdGVkX2NvdW50ZXJzKHN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHBtYzUsIHVuc2lnbmVkIGxvbmcgcG1jNikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXU2NCB2YWwsIHByZXYsIGRlbHRhOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2xpbWl0ZWQ7ICsraSkgewotCQljb3VudGVyID0gY3B1aHctPmxpbWl0ZWRfY291bnRlcltpXTsKLQkJaWYgKCFjb3VudGVyLT5ody5pZHgpCi0JCQljb250aW51ZTsKLQkJdmFsID0gKGNvdW50ZXItPmh3LmlkeCA9PSA1KSA/IHBtYzUgOiBwbWM2OwotCQlwcmV2ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+aHcucHJldl9jb3VudCk7Ci0JCWNvdW50ZXItPmh3LmlkeCA9IDA7Ci0JCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOwotCQlhdG9taWM2NF9hZGQoZGVsdGEsICZjb3VudGVyLT5jb3VudCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB0aGF3X2xpbWl0ZWRfY291bnRlcnMoc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHcsCi0JCQkJICB1bnNpZ25lZCBsb25nIHBtYzUsIHVuc2lnbmVkIGxvbmcgcG1jNikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXU2NCB2YWw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fbGltaXRlZDsgKytpKSB7Ci0JCWNvdW50ZXIgPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOwotCQljb3VudGVyLT5ody5pZHggPSBjcHVody0+bGltaXRlZF9od2lkeFtpXTsKLQkJdmFsID0gKGNvdW50ZXItPmh3LmlkeCA9PSA1KSA/IHBtYzUgOiBwbWM2OwotCQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIHZhbCk7Ci0JCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7Ci0JfQotfQotCi0vKgotICogU2luY2UgbGltaXRlZCBjb3VudGVycyBkb24ndCByZXNwZWN0IHRoZSBmcmVlemUgY29uZGl0aW9ucywgd2UKLSAqIGhhdmUgdG8gcmVhZCB0aGVtIGltbWVkaWF0ZWx5IGFmdGVyIGZyZWV6aW5nIG9yIHVuZnJlZXppbmcgdGhlCi0gKiBvdGhlciBjb3VudGVycy4gIFdlIHRyeSB0byBrZWVwIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGltaXRlZAotICogY291bnRlcnMgYXMgY29uc2lzdGVudCBhcyBwb3NzaWJsZSBieSBrZWVwaW5nIHRoZSBkZWxheSAoaW4KLSAqIGN5Y2xlcyBhbmQgaW5zdHJ1Y3Rpb25zKSBiZXR3ZWVuIGZyZWV6aW5nL3VuZnJlZXppbmcgYW5kIHJlYWRpbmcKLSAqIHRoZSBsaW1pdGVkIGNvdW50ZXJzIGFzIHNtYWxsIGFuZCBjb25zaXN0ZW50IGFzIHBvc3NpYmxlLgotICogVGhlcmVmb3JlLCBpZiBhbnkgbGltaXRlZCBjb3VudGVycyBhcmUgaW4gdXNlLCB3ZSByZWFkIHRoZW0KLSAqIGJvdGgsIGFuZCBhbHdheXMgaW4gdGhlIHNhbWUgb3JkZXIsIHRvIG1pbmltaXplIHZhcmlhYmlsaXR5LAotICogYW5kIGRvIGl0IGluc2lkZSB0aGUgc2FtZSBhc20gdGhhdCB3cml0ZXMgTU1DUjAuCi0gKi8KLXN0YXRpYyB2b2lkIHdyaXRlX21tY3IwKHN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3LCB1bnNpZ25lZCBsb25nIG1tY3IwKQotewotCXVuc2lnbmVkIGxvbmcgcG1jNSwgcG1jNjsKLQotCWlmICghY3B1aHctPm5fbGltaXRlZCkgewotCQltdHNwcihTUFJOX01NQ1IwLCBtbWNyMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFdyaXRlIE1NQ1IwLCB0aGVuIHJlYWQgUE1DNSBhbmQgUE1DNiBpbW1lZGlhdGVseS4KLQkgKiBUbyBlbnN1cmUgd2UgZG9uJ3QgZ2V0IGEgcGVyZm9ybWFuY2UgbW9uaXRvciBpbnRlcnJ1cHQKLQkgKiBiZXR3ZWVuIHdyaXRpbmcgTU1DUjAgYW5kIGZyZWV6aW5nL3RoYXdpbmcgdGhlIGxpbWl0ZWQKLQkgKiBjb3VudGVycywgd2UgZmlyc3Qgd3JpdGUgTU1DUjAgd2l0aCB0aGUgY291bnRlciBvdmVyZmxvdwotCSAqIGludGVycnVwdCBlbmFibGUgYml0cyB0dXJuZWQgb2ZmLgotCSAqLwotCWFzbSB2b2xhdGlsZSgibXRzcHIgJTMsJTI7IG1mc3ByICUwLCU0OyBtZnNwciAlMSwlNSIKLQkJICAgICA6ICI9JnIiIChwbWM1KSwgIj0mciIgKHBtYzYpCi0JCSAgICAgOiAiciIgKG1tY3IwICYgfihNTUNSMF9QTUMxQ0UgfCBNTUNSMF9QTUNqQ0UpKSwKLQkJICAgICAgICJpIiAoU1BSTl9NTUNSMCksCi0JCSAgICAgICAiaSIgKFNQUk5fUE1DNSksICJpIiAoU1BSTl9QTUM2KSk7Ci0KLQlpZiAobW1jcjAgJiBNTUNSMF9GQykKLQkJZnJlZXplX2xpbWl0ZWRfY291bnRlcnMoY3B1aHcsIHBtYzUsIHBtYzYpOwotCWVsc2UKLQkJdGhhd19saW1pdGVkX2NvdW50ZXJzKGNwdWh3LCBwbWM1LCBwbWM2KTsKLQotCS8qCi0JICogV3JpdGUgdGhlIGZ1bGwgTU1DUjAgaW5jbHVkaW5nIHRoZSBjb3VudGVyIG92ZXJmbG93IGludGVycnVwdAotCSAqIGVuYWJsZSBiaXRzLCBpZiBuZWNlc3NhcnkuCi0JICovCi0JaWYgKG1tY3IwICYgKE1NQ1IwX1BNQzFDRSB8IE1NQ1IwX1BNQ2pDRSkpCi0JCW10c3ByKFNQUk5fTU1DUjAsIG1tY3IwKTsKLX0KLQotLyoKLSAqIERpc2FibGUgYWxsIGNvdW50ZXJzIHRvIHByZXZlbnQgUE1VIGludGVycnVwdHMgYW5kIHRvIGFsbG93Ci0gKiBjb3VudGVycyB0byBiZSBhZGRlZCBvciByZW1vdmVkLgotICovCi12b2lkIGh3X3BlcmZfZGlzYWJsZSh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXBwbXUpCi0JCXJldHVybjsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCi0JaWYgKCFjcHVody0+ZGlzYWJsZWQpIHsKLQkJY3B1aHctPmRpc2FibGVkID0gMTsKLQkJY3B1aHctPm5fYWRkZWQgPSAwOwotCi0JCS8qCi0JCSAqIENoZWNrIGlmIHdlIGV2ZXIgZW5hYmxlZCB0aGUgUE1VIG9uIHRoaXMgY3B1LgotCQkgKi8KLQkJaWYgKCFjcHVody0+cG1jc19lbmFibGVkKSB7Ci0JCQlwcGNfZW5hYmxlX3BtY3MoKTsKLQkJCWNwdWh3LT5wbWNzX2VuYWJsZWQgPSAxOwotCQl9Ci0KLQkJLyoKLQkJICogRGlzYWJsZSBpbnN0cnVjdGlvbiBzYW1wbGluZyBpZiBpdCB3YXMgZW5hYmxlZAotCQkgKi8KLQkJaWYgKGNwdWh3LT5tbWNyWzJdICYgTU1DUkFfU0FNUExFX0VOQUJMRSkgewotCQkJbXRzcHIoU1BSTl9NTUNSQSwKLQkJCSAgICAgIGNwdWh3LT5tbWNyWzJdICYgfk1NQ1JBX1NBTVBMRV9FTkFCTEUpOwotCQkJbWIoKTsKLQkJfQotCi0JCS8qCi0JCSAqIFNldCB0aGUgJ2ZyZWV6ZSBjb3VudGVycycgYml0LgotCQkgKiBUaGUgYmFycmllciBpcyB0byBtYWtlIHN1cmUgdGhlIG10c3ByIGhhcyBiZWVuCi0JCSAqIGV4ZWN1dGVkIGFuZCB0aGUgUE1VIGhhcyBmcm96ZW4gdGhlIGNvdW50ZXJzCi0JCSAqIGJlZm9yZSB3ZSByZXR1cm4uCi0JCSAqLwotCQl3cml0ZV9tbWNyMChjcHVodywgbWZzcHIoU1BSTl9NTUNSMCkgfCBNTUNSMF9GQyk7Ci0JCW1iKCk7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFJlLWVuYWJsZSBhbGwgY291bnRlcnMgaWYgZGlzYWJsZSA9PSAwLgotICogSWYgd2Ugd2VyZSBwcmV2aW91c2x5IGRpc2FibGVkIGFuZCBjb3VudGVycyB3ZXJlIGFkZGVkLCB0aGVuCi0gKiBwdXQgdGhlIG5ldyBjb25maWcgb24gdGhlIFBNVS4KLSAqLwotdm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGk7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JczY0IGxlZnQ7Ci0JdW5zaWduZWQgaW50IGh3Y19pbmRleFtNQVhfSFdDT1VOVEVSU107Ci0JaW50IG5fbGltOwotCWludCBpZHg7Ci0KLQlpZiAoIXBwbXUpCi0JCXJldHVybjsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCWlmICghY3B1aHctPmRpc2FibGVkKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQljcHVody0+ZGlzYWJsZWQgPSAwOwotCi0JLyoKLQkgKiBJZiB3ZSBkaWRuJ3QgY2hhbmdlIGFueXRoaW5nLCBvciBvbmx5IHJlbW92ZWQgY291bnRlcnMsCi0JICogbm8gbmVlZCB0byByZWNhbGN1bGF0ZSBNTUNSKiBzZXR0aW5ncyBhbmQgcmVzZXQgdGhlIFBNQ3MuCi0JICogSnVzdCByZWVuYWJsZSB0aGUgUE1VIHdpdGggdGhlIGN1cnJlbnQgTU1DUiogc2V0dGluZ3MKLQkgKiAocG9zc2libHkgdXBkYXRlZCBmb3IgcmVtb3ZhbCBvZiBjb3VudGVycykuCi0JICovCi0JaWYgKCFjcHVody0+bl9hZGRlZCkgewotCQltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSAmIH5NTUNSQV9TQU1QTEVfRU5BQkxFKTsKLQkJbXRzcHIoU1BSTl9NTUNSMSwgY3B1aHctPm1tY3JbMV0pOwotCQlpZiAoY3B1aHctPm5fY291bnRlcnMgPT0gMCkKLQkJCXBwY19zZXRfcG11X2ludXNlKDApOwotCQlnb3RvIG91dF9lbmFibGU7Ci0JfQotCi0JLyoKLQkgKiBDb21wdXRlIE1NQ1IqIHZhbHVlcyBmb3IgdGhlIG5ldyBzZXQgb2YgY291bnRlcnMKLQkgKi8KLQlpZiAocHBtdS0+Y29tcHV0ZV9tbWNyKGNwdWh3LT5ldmVudHMsIGNwdWh3LT5uX2NvdW50ZXJzLCBod2NfaW5kZXgsCi0JCQkgICAgICAgY3B1aHctPm1tY3IpKSB7Ci0JCS8qIHNob3VsZG4ndCBldmVyIGdldCBoZXJlICovCi0JCXByaW50ayhLRVJOX0VSUiAib29wcyBjb21wdXRlX21tY3IgZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBBZGQgaW4gTU1DUjAgZnJlZXplIGJpdHMgY29ycmVzcG9uZGluZyB0byB0aGUKLQkgKiBhdHRyLmV4Y2x1ZGVfKiBiaXRzIGZvciB0aGUgZmlyc3QgY291bnRlci4KLQkgKiBXZSBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IGFsbCBjb3VudGVycyBoYXZlIHRoZQotCSAqIHNhbWUgdmFsdWVzIGZvciB0aGVzZSBiaXRzIGFzIHRoZSBmaXJzdCBjb3VudGVyLgotCSAqLwotCWNvdW50ZXIgPSBjcHVody0+Y291bnRlclswXTsKLQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX3VzZXIpCi0JCWNwdWh3LT5tbWNyWzBdIHw9IE1NQ1IwX0ZDUDsKLQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX2tlcm5lbCkKLQkJY3B1aHctPm1tY3JbMF0gfD0gZnJlZXplX2NvdW50ZXJzX2tlcm5lbDsKLQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX2h2KQotCQljcHVody0+bW1jclswXSB8PSBNTUNSMF9GQ0hWOwotCi0JLyoKLQkgKiBXcml0ZSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gdG8gTU1DUiogd2l0aCB0aGUgZnJlZXplCi0JICogYml0IHNldCBhbmQgc2V0IHRoZSBoYXJkd2FyZSBjb3VudGVycyB0byB0aGVpciBpbml0aWFsIHZhbHVlcy4KLQkgKiBUaGVuIHVuZnJlZXplIHRoZSBjb3VudGVycy4KLQkgKi8KLQlwcGNfc2V0X3BtdV9pbnVzZSgxKTsKLQltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSAmIH5NTUNSQV9TQU1QTEVfRU5BQkxFKTsKLQltdHNwcihTUFJOX01NQ1IxLCBjcHVody0+bW1jclsxXSk7Ci0JbXRzcHIoU1BSTl9NTUNSMCwgKGNwdWh3LT5tbWNyWzBdICYgfihNTUNSMF9QTUMxQ0UgfCBNTUNSMF9QTUNqQ0UpKQotCQkJCXwgTU1DUjBfRkMpOwotCi0JLyoKLQkgKiBSZWFkIG9mZiBhbnkgcHJlLWV4aXN0aW5nIGNvdW50ZXJzIHRoYXQgbmVlZCB0byBtb3ZlCi0JICogdG8gYW5vdGhlciBQTUMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2NvdW50ZXJzOyArK2kpIHsKLQkJY291bnRlciA9IGNwdWh3LT5jb3VudGVyW2ldOwotCQlpZiAoY291bnRlci0+aHcuaWR4ICYmIGNvdW50ZXItPmh3LmlkeCAhPSBod2NfaW5kZXhbaV0gKyAxKSB7Ci0JCQlwb3dlcl9wbXVfcmVhZChjb3VudGVyKTsKLQkJCXdyaXRlX3BtYyhjb3VudGVyLT5ody5pZHgsIDApOwotCQkJY291bnRlci0+aHcuaWR4ID0gMDsKLQkJfQotCX0KLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgUE1DcyBmb3IgYWxsIHRoZSBuZXcgYW5kIG1vdmVkIGNvdW50ZXJzLgotCSAqLwotCWNwdWh3LT5uX2xpbWl0ZWQgPSBuX2xpbSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2NvdW50ZXJzOyArK2kpIHsKLQkJY291bnRlciA9IGNwdWh3LT5jb3VudGVyW2ldOwotCQlpZiAoY291bnRlci0+aHcuaWR4KQotCQkJY29udGludWU7Ci0JCWlkeCA9IGh3Y19pbmRleFtpXSArIDE7Ci0JCWlmIChpc19saW1pdGVkX3BtYyhpZHgpKSB7Ci0JCQljcHVody0+bGltaXRlZF9jb3VudGVyW25fbGltXSA9IGNvdW50ZXI7Ci0JCQljcHVody0+bGltaXRlZF9od2lkeFtuX2xpbV0gPSBpZHg7Ci0JCQkrK25fbGltOwotCQkJY29udGludWU7Ci0JCX0KLQkJdmFsID0gMDsKLQkJaWYgKGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpIHsKLQkJCWxlZnQgPSBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5ody5wZXJpb2RfbGVmdCk7Ci0JCQlpZiAobGVmdCA8IDB4ODAwMDAwMDBMKQotCQkJCXZhbCA9IDB4ODAwMDAwMDBMIC0gbGVmdDsKLQkJfQotCQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIHZhbCk7Ci0JCWNvdW50ZXItPmh3LmlkeCA9IGlkeDsKLQkJd3JpdGVfcG1jKGlkeCwgdmFsKTsKLQkJcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLQl9Ci0JY3B1aHctPm5fbGltaXRlZCA9IG5fbGltOwotCWNwdWh3LT5tbWNyWzBdIHw9IE1NQ1IwX1BNWEUgfCBNTUNSMF9GQ0VDRTsKLQotIG91dF9lbmFibGU6Ci0JbWIoKTsKLQl3cml0ZV9tbWNyMChjcHVodywgY3B1aHctPm1tY3JbMF0pOwotCi0JLyoKLQkgKiBFbmFibGUgaW5zdHJ1Y3Rpb24gc2FtcGxpbmcgaWYgbmVjZXNzYXJ5Ci0JICovCi0JaWYgKGNwdWh3LT5tbWNyWzJdICYgTU1DUkFfU0FNUExFX0VOQUJMRSkgewotCQltYigpOwotCQltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSk7Ci0JfQotCi0gb3V0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cCwgaW50IG1heF9jb3VudCwKLQkJCSAgc3RydWN0IHBlcmZfY291bnRlciAqY3Ryc1tdLCB1NjQgKmV2ZW50cywKLQkJCSAgdW5zaWduZWQgaW50ICpmbGFncykKLXsKLQlpbnQgbiA9IDA7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQotCWlmICghaXNfc29mdHdhcmVfY291bnRlcihncm91cCkpIHsKLQkJaWYgKG4gPj0gbWF4X2NvdW50KQotCQkJcmV0dXJuIC0xOwotCQljdHJzW25dID0gZ3JvdXA7Ci0JCWZsYWdzW25dID0gZ3JvdXAtPmh3LmNvdW50ZXJfYmFzZTsKLQkJZXZlbnRzW24rK10gPSBncm91cC0+aHcuY29uZmlnOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZncm91cC0+c2libGluZ19saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCWlmICghaXNfc29mdHdhcmVfY291bnRlcihjb3VudGVyKSAmJgotCQkgICAgY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikgewotCQkJaWYgKG4gPj0gbWF4X2NvdW50KQotCQkJCXJldHVybiAtMTsKLQkJCWN0cnNbbl0gPSBjb3VudGVyOwotCQkJZmxhZ3Nbbl0gPSBjb3VudGVyLT5ody5jb3VudGVyX2Jhc2U7Ci0JCQlldmVudHNbbisrXSA9IGNvdW50ZXItPmh3LmNvbmZpZzsKLQkJfQotCX0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIHZvaWQgY291bnRlcl9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBpbnQgY3B1KQotewotCWNvdW50ZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRTsKLQljb3VudGVyLT5vbmNwdSA9IGNwdTsKLQljb3VudGVyLT50c3RhbXBfcnVubmluZyArPSBjb3VudGVyLT5jdHgtPnRpbWUgLSBjb3VudGVyLT50c3RhbXBfc3RvcHBlZDsKLQlpZiAoaXNfc29mdHdhcmVfY291bnRlcihjb3VudGVyKSkKLQkJY291bnRlci0+cG11LT5lbmFibGUoY291bnRlcik7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgdG8gZW5hYmxlIGEgd2hvbGUgZ3JvdXAgb2YgY291bnRlcnMuCi0gKiBSZXR1cm5zIDEgaWYgdGhlIGdyb3VwIHdhcyBlbmFibGVkLCBvciAtRUFHQUlOIGlmIGl0IGNvdWxkIG5vdCBiZS4KLSAqIEFzc3VtZXMgdGhlIGNhbGxlciBoYXMgZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgaGFzCi0gKiBmcm96ZW4gdGhlIFBNVSB3aXRoIGh3X3BlcmZfc2F2ZV9kaXNhYmxlLgotICovCi1pbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cF9sZWFkZXIsCi0JICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LCBpbnQgY3B1KQotewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3OwotCWxvbmcgaSwgbiwgbjA7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqc3ViOwotCi0JaWYgKCFwcG11KQotCQlyZXR1cm4gMDsKLQljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JbjAgPSBjcHVody0+bl9jb3VudGVyczsKLQluID0gY29sbGVjdF9ldmVudHMoZ3JvdXBfbGVhZGVyLCBwcG11LT5uX2NvdW50ZXIgLSBuMCwKLQkJCSAgICZjcHVody0+Y291bnRlcltuMF0sICZjcHVody0+ZXZlbnRzW24wXSwKLQkJCSAgICZjcHVody0+ZmxhZ3NbbjBdKTsKLQlpZiAobiA8IDApCi0JCXJldHVybiAtRUFHQUlOOwotCWlmIChjaGVja19leGNsdWRlcyhjcHVody0+Y291bnRlciwgY3B1aHctPmZsYWdzLCBuMCwgbikpCi0JCXJldHVybiAtRUFHQUlOOwotCWkgPSBwb3dlcl9jaGVja19jb25zdHJhaW50cyhjcHVodywgY3B1aHctPmV2ZW50cywgY3B1aHctPmZsYWdzLCBuICsgbjApOwotCWlmIChpIDwgMCkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JY3B1aHctPm5fY291bnRlcnMgPSBuMCArIG47Ci0JY3B1aHctPm5fYWRkZWQgKz0gbjsKLQotCS8qCi0JICogT0ssIHRoaXMgZ3JvdXAgY2FuIGdvIG9uOyB1cGRhdGUgY291bnRlciBzdGF0ZXMgZXRjLiwKLQkgKiBhbmQgZW5hYmxlIGFueSBzb2Z0d2FyZSBjb3VudGVycwotCSAqLwotCWZvciAoaSA9IG4wOyBpIDwgbjAgKyBuOyArK2kpCi0JCWNwdWh3LT5jb3VudGVyW2ldLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW2ldOwotCWNwdWN0eC0+YWN0aXZlX29uY3B1ICs9IG47Ci0JbiA9IDE7Ci0JY291bnRlcl9zY2hlZF9pbihncm91cF9sZWFkZXIsIGNwdSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkgewotCQlpZiAoc3ViLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGKSB7Ci0JCQljb3VudGVyX3NjaGVkX2luKHN1YiwgY3B1KTsKLQkJCSsrbjsKLQkJfQotCX0KLQljdHgtPm5yX2FjdGl2ZSArPSBuOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBBZGQgYSBjb3VudGVyIHRvIHRoZSBQTVUuCi0gKiBJZiBhbGwgY291bnRlcnMgYXJlIG5vdCBhbHJlYWR5IGZyb3plbiwgdGhlbiB3ZSBkaXNhYmxlIGFuZAotICogcmUtZW5hYmxlIHRoZSBQTVUgaW4gb3JkZXIgdG8gZ2V0IGh3X3BlcmZfZW5hYmxlIHRvIGRvIHRoZQotICogYWN0dWFsIHdvcmsgb2YgcmVjb25maWd1cmluZyB0aGUgUE1VLgotICovCi1zdGF0aWMgaW50IHBvd2VyX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBuMDsKLQlpbnQgcmV0ID0gLUVBR0FJTjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwZXJmX2Rpc2FibGUoKTsKLQotCS8qCi0JICogQWRkIHRoZSBjb3VudGVyIHRvIHRoZSBsaXN0IChpZiB0aGVyZSBpcyByb29tKQotCSAqIGFuZCBjaGVjayB3aGV0aGVyIHRoZSB0b3RhbCBzZXQgaXMgc3RpbGwgZmVhc2libGUuCi0JICovCi0JY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCW4wID0gY3B1aHctPm5fY291bnRlcnM7Ci0JaWYgKG4wID49IHBwbXUtPm5fY291bnRlcikKLQkJZ290byBvdXQ7Ci0JY3B1aHctPmNvdW50ZXJbbjBdID0gY291bnRlcjsKLQljcHVody0+ZXZlbnRzW24wXSA9IGNvdW50ZXItPmh3LmNvbmZpZzsKLQljcHVody0+ZmxhZ3NbbjBdID0gY291bnRlci0+aHcuY291bnRlcl9iYXNlOwotCWlmIChjaGVja19leGNsdWRlcyhjcHVody0+Y291bnRlciwgY3B1aHctPmZsYWdzLCBuMCwgMSkpCi0JCWdvdG8gb3V0OwotCWlmIChwb3dlcl9jaGVja19jb25zdHJhaW50cyhjcHVodywgY3B1aHctPmV2ZW50cywgY3B1aHctPmZsYWdzLCBuMCArIDEpKQotCQlnb3RvIG91dDsKLQotCWNvdW50ZXItPmh3LmNvbmZpZyA9IGNwdWh3LT5ldmVudHNbbjBdOwotCSsrY3B1aHctPm5fY291bnRlcnM7Ci0JKytjcHVody0+bl9hZGRlZDsKLQotCXJldCA9IDA7Ci0gb3V0OgotCXBlcmZfZW5hYmxlKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSBjb3VudGVyIGZyb20gdGhlIFBNVS4KLSAqLwotc3RhdGljIHZvaWQgcG93ZXJfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodzsKLQlsb25nIGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwZXJmX2Rpc2FibGUoKTsKLQotCXBvd2VyX3BtdV9yZWFkKGNvdW50ZXIpOwotCi0JY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9jb3VudGVyczsgKytpKSB7Ci0JCWlmIChjb3VudGVyID09IGNwdWh3LT5jb3VudGVyW2ldKSB7Ci0JCQl3aGlsZSAoKytpIDwgY3B1aHctPm5fY291bnRlcnMpCi0JCQkJY3B1aHctPmNvdW50ZXJbaS0xXSA9IGNwdWh3LT5jb3VudGVyW2ldOwotCQkJLS1jcHVody0+bl9jb3VudGVyczsKLQkJCXBwbXUtPmRpc2FibGVfcG1jKGNvdW50ZXItPmh3LmlkeCAtIDEsIGNwdWh3LT5tbWNyKTsKLQkJCWlmIChjb3VudGVyLT5ody5pZHgpIHsKLQkJCQl3cml0ZV9wbWMoY291bnRlci0+aHcuaWR4LCAwKTsKLQkJCQljb3VudGVyLT5ody5pZHggPSAwOwotCQkJfQotCQkJcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9saW1pdGVkOyArK2kpCi0JCWlmIChjb3VudGVyID09IGNwdWh3LT5saW1pdGVkX2NvdW50ZXJbaV0pCi0JCQlicmVhazsKLQlpZiAoaSA8IGNwdWh3LT5uX2xpbWl0ZWQpIHsKLQkJd2hpbGUgKCsraSA8IGNwdWh3LT5uX2xpbWl0ZWQpIHsKLQkJCWNwdWh3LT5saW1pdGVkX2NvdW50ZXJbaS0xXSA9IGNwdWh3LT5saW1pdGVkX2NvdW50ZXJbaV07Ci0JCQljcHVody0+bGltaXRlZF9od2lkeFtpLTFdID0gY3B1aHctPmxpbWl0ZWRfaHdpZHhbaV07Ci0JCX0KLQkJLS1jcHVody0+bl9saW1pdGVkOwotCX0KLQlpZiAoY3B1aHctPm5fY291bnRlcnMgPT0gMCkgewotCQkvKiBkaXNhYmxlIGV4Y2VwdGlvbnMgaWYgbm8gY291bnRlcnMgYXJlIHJ1bm5pbmcgKi8KLQkJY3B1aHctPm1tY3JbMF0gJj0gfihNTUNSMF9QTVhFIHwgTU1DUjBfRkNFQ0UpOwotCX0KLQotCXBlcmZfZW5hYmxlKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogUmUtZW5hYmxlIGludGVycnVwdHMgb24gYSBjb3VudGVyIGFmdGVyIHRoZXkgd2VyZSB0aHJvdHRsZWQKLSAqIGJlY2F1c2UgdGhleSB3ZXJlIGNvbWluZyB0b28gZmFzdC4KLSAqLwotc3RhdGljIHZvaWQgcG93ZXJfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzNjQgdmFsLCBsZWZ0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWNvdW50ZXItPmh3LmlkeCB8fCAhY291bnRlci0+aHcuc2FtcGxlX3BlcmlvZCkKLQkJcmV0dXJuOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwZXJmX2Rpc2FibGUoKTsKLQlwb3dlcl9wbXVfcmVhZChjb3VudGVyKTsKLQlsZWZ0ID0gY291bnRlci0+aHcuc2FtcGxlX3BlcmlvZDsKLQljb3VudGVyLT5ody5sYXN0X3BlcmlvZCA9IGxlZnQ7Ci0JdmFsID0gMDsKLQlpZiAobGVmdCA8IDB4ODAwMDAwMDBMKQotCQl2YWwgPSAweDgwMDAwMDAwTCAtIGxlZnQ7Ci0Jd3JpdGVfcG1jKGNvdW50ZXItPmh3LmlkeCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIHZhbCk7Ci0JYXRvbWljNjRfc2V0KCZjb3VudGVyLT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7Ci0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLQlwZXJmX2VuYWJsZSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RydWN0IHBtdSBwb3dlcl9wbXUgPSB7Ci0JLmVuYWJsZQkJPSBwb3dlcl9wbXVfZW5hYmxlLAotCS5kaXNhYmxlCT0gcG93ZXJfcG11X2Rpc2FibGUsCi0JLnJlYWQJCT0gcG93ZXJfcG11X3JlYWQsCi0JLnVudGhyb3R0bGUJPSBwb3dlcl9wbXVfdW50aHJvdHRsZSwKLX07Ci0KLS8qCi0gKiBSZXR1cm4gMSBpZiB3ZSBtaWdodCBiZSBhYmxlIHRvIHB1dCBjb3VudGVyIG9uIGEgbGltaXRlZCBQTUMsCi0gKiBvciAwIGlmIG5vdC4KLSAqIEEgY291bnRlciBjYW4gb25seSBnbyBvbiBhIGxpbWl0ZWQgUE1DIGlmIGl0IGNvdW50cyBzb21ldGhpbmcKLSAqIHRoYXQgYSBsaW1pdGVkIFBNQyBjYW4gY291bnQsIGRvZXNuJ3QgcmVxdWlyZSBpbnRlcnJ1cHRzLCBhbmQKLSAqIGRvZXNuJ3QgZXhjbHVkZSBhbnkgcHJvY2Vzc29yIG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgY2FuX2dvX29uX2xpbWl0ZWRfcG1jKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHU2NCBldiwKLQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKQotewotCWludCBuOwotCXU2NCBhbHRbTUFYX0VWRU5UX0FMVEVSTkFUSVZFU107Ci0KLQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX3VzZXIKLQkgICAgfHwgY291bnRlci0+YXR0ci5leGNsdWRlX2tlcm5lbAotCSAgICB8fCBjb3VudGVyLT5hdHRyLmV4Y2x1ZGVfaHYKLQkgICAgfHwgY291bnRlci0+YXR0ci5zYW1wbGVfcGVyaW9kKQotCQlyZXR1cm4gMDsKLQotCWlmIChwcG11LT5saW1pdGVkX3BtY19ldmVudChldikpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBUaGUgcmVxdWVzdGVkIGV2ZW50IGlzbid0IG9uIGEgbGltaXRlZCBQTUMgYWxyZWFkeTsKLQkgKiBzZWUgaWYgYW55IGFsdGVybmF0aXZlIGNvZGUgZ29lcyBvbiBhIGxpbWl0ZWQgUE1DLgotCSAqLwotCWlmICghcHBtdS0+Z2V0X2FsdGVybmF0aXZlcykKLQkJcmV0dXJuIDA7Ci0KLQlmbGFncyB8PSBQUE1VX0xJTUlURURfUE1DX09LIHwgUFBNVV9MSU1JVEVEX1BNQ19SRVFEOwotCW4gPSBwcG11LT5nZXRfYWx0ZXJuYXRpdmVzKGV2LCBmbGFncywgYWx0KTsKLQotCXJldHVybiBuID4gMDsKLX0KLQotLyoKLSAqIEZpbmQgYW4gYWx0ZXJuYXRpdmUgZXZlbnQgdGhhdCBnb2VzIG9uIGEgbm9ybWFsIFBNQywgaWYgcG9zc2libGUsCi0gKiBhbmQgcmV0dXJuIHRoZSBldmVudCBjb2RlLCBvciAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggYWx0ZXJuYXRpdmUuCi0gKiAoTm90ZTogZXZlbnQgY29kZSAwIGlzICJkb24ndCBjb3VudCIgb24gYWxsIG1hY2hpbmVzLikKLSAqLwotc3RhdGljIHU2NCBub3JtYWxfcG1jX2FsdGVybmF0aXZlKHU2NCBldiwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQl1NjQgYWx0W01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwotCWludCBuOwotCi0JZmxhZ3MgJj0gfihQUE1VX0xJTUlURURfUE1DX09LIHwgUFBNVV9MSU1JVEVEX1BNQ19SRVFEKTsKLQluID0gcHBtdS0+Z2V0X2FsdGVybmF0aXZlcyhldiwgZmxhZ3MsIGFsdCk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gYWx0WzBdOwotfQotCi0vKiBOdW1iZXIgb2YgcGVyZl9jb3VudGVycyBjb3VudGluZyBoYXJkd2FyZSBldmVudHMgKi8KLXN0YXRpYyBhdG9taWNfdCBudW1fY291bnRlcnM7Ci0vKiBVc2VkIHRvIGF2b2lkIHJhY2VzIGluIGNhbGxpbmcgcmVzZXJ2ZS9yZWxlYXNlX3BtY19oYXJkd2FyZSAqLwotc3RhdGljIERFRklORV9NVVRFWChwbWNfcmVzZXJ2ZV9tdXRleCk7Ci0KLS8qCi0gKiBSZWxlYXNlIHRoZSBQTVUgaWYgdGhpcyBpcyB0aGUgbGFzdCBwZXJmX2NvdW50ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGh3X3BlcmZfY291bnRlcl9kZXN0cm95KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKCFhdG9taWNfYWRkX3VubGVzcygmbnVtX2NvdW50ZXJzLCAtMSwgMSkpIHsKLQkJbXV0ZXhfbG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOwotCQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJm51bV9jb3VudGVycykgPT0gMCkKLQkJCXJlbGVhc2VfcG1jX2hhcmR3YXJlKCk7Ci0JCW11dGV4X3VubG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOwotCX0KLX0KLQotLyoKLSAqIFRyYW5zbGF0ZSBhIGdlbmVyaWMgY2FjaGUgZXZlbnQgY29uZmlnIHRvIGEgcmF3IGV2ZW50IGNvZGUuCi0gKi8KLXN0YXRpYyBpbnQgaHdfcGVyZl9jYWNoZV9ldmVudCh1NjQgY29uZmlnLCB1NjQgKmV2ZW50cCkKLXsKLQl1bnNpZ25lZCBsb25nIHR5cGUsIG9wLCByZXN1bHQ7Ci0JaW50IGV2OwotCi0JaWYgKCFwcG11LT5jYWNoZV9ldmVudHMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogdW5wYWNrIGNvbmZpZyAqLwotCXR5cGUgPSBjb25maWcgJiAweGZmOwotCW9wID0gKGNvbmZpZyA+PiA4KSAmIDB4ZmY7Ci0JcmVzdWx0ID0gKGNvbmZpZyA+PiAxNikgJiAweGZmOwotCi0JaWYgKHR5cGUgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9NQVggfHwKLQkgICAgb3AgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVggfHwKLQkgICAgcmVzdWx0ID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlldiA9ICgqcHBtdS0+Y2FjaGVfZXZlbnRzKVt0eXBlXVtvcF1bcmVzdWx0XTsKLQlpZiAoZXYgPT0gMCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmIChldiA9PSAtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JKmV2ZW50cCA9IGV2OwotCXJldHVybiAwOwotfQotCi1jb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXU2NCBldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmN0cnNbTUFYX0hXQ09VTlRFUlNdOwotCXU2NCBldmVudHNbTUFYX0hXQ09VTlRFUlNdOwotCXVuc2lnbmVkIGludCBjZmxhZ3NbTUFYX0hXQ09VTlRFUlNdOwotCWludCBuOwotCWludCBlcnI7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHc7Ci0KLQlpZiAoIXBwbXUpCi0JCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7Ci0Jc3dpdGNoIChjb3VudGVyLT5hdHRyLnR5cGUpIHsKLQljYXNlIFBFUkZfVFlQRV9IQVJEV0FSRToKLQkJZXYgPSBjb3VudGVyLT5hdHRyLmNvbmZpZzsKLQkJaWYgKGV2ID49IHBwbXUtPm5fZ2VuZXJpYyB8fCBwcG11LT5nZW5lcmljX2V2ZW50c1tldl0gPT0gMCkKLQkJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKLQkJZXYgPSBwcG11LT5nZW5lcmljX2V2ZW50c1tldl07Ci0JCWJyZWFrOwotCWNhc2UgUEVSRl9UWVBFX0hXX0NBQ0hFOgotCQllcnIgPSBod19wZXJmX2NhY2hlX2V2ZW50KGNvdW50ZXItPmF0dHIuY29uZmlnLCAmZXYpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQkJYnJlYWs7Ci0JY2FzZSBQRVJGX1RZUEVfUkFXOgotCQlldiA9IGNvdW50ZXItPmF0dHIuY29uZmlnOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0JY291bnRlci0+aHcuY29uZmlnX2Jhc2UgPSBldjsKLQljb3VudGVyLT5ody5pZHggPSAwOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gYSBoeXBlcnZpc29yLCBmb3JjZSB0aGUKLQkgKiBleGNsdWRlX2h2IGJpdCB0byAwIHNvIHRoYXQgd2UgZG9uJ3QgY2FyZSB3aGF0Ci0JICogdGhlIHVzZXIgc2V0IGl0IHRvLgotCSAqLwotCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJY291bnRlci0+YXR0ci5leGNsdWRlX2h2ID0gMDsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGNvdW50ZXIsIHRoZW4gd2UgY2FuIHVzZQotCSAqIFBNX1JVTl8qIGV2ZW50cyBpbnRlcmNoYW5nZWFibHkgd2l0aCB0aGVpciBub24gUlVOXyoKLQkgKiBlcXVpdmFsZW50cywgZS5nLiBQTV9SVU5fQ1lDIGluc3RlYWQgb2YgUE1fQ1lDLgotCSAqIFhYWCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIHRhc2sgaXMgYW4gaWRsZSB0YXNrLgotCSAqLwotCWZsYWdzID0gMDsKLQlpZiAoY291bnRlci0+Y3R4LT50YXNrKQotCQlmbGFncyB8PSBQUE1VX09OTFlfQ09VTlRfUlVOOwotCi0JLyoKLQkgKiBJZiB0aGlzIG1hY2hpbmUgaGFzIGxpbWl0ZWQgY291bnRlcnMsIGNoZWNrIHdoZXRoZXIgdGhpcwotCSAqIGV2ZW50IGNvdWxkIGdvIG9uIGEgbGltaXRlZCBjb3VudGVyLgotCSAqLwotCWlmIChwcG11LT5mbGFncyAmIFBQTVVfTElNSVRFRF9QTUM1XzYpIHsKLQkJaWYgKGNhbl9nb19vbl9saW1pdGVkX3BtYyhjb3VudGVyLCBldiwgZmxhZ3MpKSB7Ci0JCQlmbGFncyB8PSBQUE1VX0xJTUlURURfUE1DX09LOwotCQl9IGVsc2UgaWYgKHBwbXUtPmxpbWl0ZWRfcG1jX2V2ZW50KGV2KSkgewotCQkJLyoKLQkJCSAqIFRoZSByZXF1ZXN0ZWQgZXZlbnQgaXMgb24gYSBsaW1pdGVkIFBNQywKLQkJCSAqIGJ1dCB3ZSBjYW4ndCB1c2UgYSBsaW1pdGVkIFBNQzsgc2VlIGlmIGFueQotCQkJICogYWx0ZXJuYXRpdmUgZ29lcyBvbiBhIG5vcm1hbCBQTUMuCi0JCQkgKi8KLQkJCWV2ID0gbm9ybWFsX3BtY19hbHRlcm5hdGl2ZShldiwgZmxhZ3MpOwotCQkJaWYgKCFldikKLQkJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQkJfQotCX0KLQotCS8qCi0JICogSWYgdGhpcyBpcyBpbiBhIGdyb3VwLCBjaGVjayBpZiBpdCBjYW4gZ28gb24gd2l0aCBhbGwgdGhlCi0JICogb3RoZXIgaGFyZHdhcmUgY291bnRlcnMgaW4gdGhlIGdyb3VwLiAgV2UgYXNzdW1lIHRoZSBjb3VudGVyCi0JICogaGFzbid0IGJlZW4gbGlua2VkIGludG8gaXRzIGxlYWRlcidzIHNpYmxpbmcgbGlzdCBhdCB0aGlzIHBvaW50LgotCSAqLwotCW4gPSAwOwotCWlmIChjb3VudGVyLT5ncm91cF9sZWFkZXIgIT0gY291bnRlcikgewotCQluID0gY29sbGVjdF9ldmVudHMoY291bnRlci0+Z3JvdXBfbGVhZGVyLCBwcG11LT5uX2NvdW50ZXIgLSAxLAotCQkJCSAgIGN0cnMsIGV2ZW50cywgY2ZsYWdzKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCWV2ZW50c1tuXSA9IGV2OwotCWN0cnNbbl0gPSBjb3VudGVyOwotCWNmbGFnc1tuXSA9IGZsYWdzOwotCWlmIChjaGVja19leGNsdWRlcyhjdHJzLCBjZmxhZ3MsIG4sIDEpKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWNwdWh3ID0gJmdldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JZXJyID0gcG93ZXJfY2hlY2tfY29uc3RyYWludHMoY3B1aHcsIGV2ZW50cywgY2ZsYWdzLCBuICsgMSk7Ci0JcHV0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWNvdW50ZXItPmh3LmNvbmZpZyA9IGV2ZW50c1tuXTsKLQljb3VudGVyLT5ody5jb3VudGVyX2Jhc2UgPSBjZmxhZ3Nbbl07Ci0JY291bnRlci0+aHcubGFzdF9wZXJpb2QgPSBjb3VudGVyLT5ody5zYW1wbGVfcGVyaW9kOwotCWF0b21pYzY0X3NldCgmY291bnRlci0+aHcucGVyaW9kX2xlZnQsIGNvdW50ZXItPmh3Lmxhc3RfcGVyaW9kKTsKLQotCS8qCi0JICogU2VlIGlmIHdlIG5lZWQgdG8gcmVzZXJ2ZSB0aGUgUE1VLgotCSAqIElmIG5vIGNvdW50ZXJzIGFyZSBjdXJyZW50bHkgaW4gdXNlLCB0aGVuIHdlIGhhdmUgdG8gdGFrZSBhCi0JICogbXV0ZXggdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmFjZSB3aXRoIGFub3RoZXIgdGFzayBkb2luZwotCSAqIHJlc2VydmVfcG1jX2hhcmR3YXJlIG9yIHJlbGVhc2VfcG1jX2hhcmR3YXJlLgotCSAqLwotCWVyciA9IDA7Ci0JaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZudW1fY291bnRlcnMpKSB7Ci0JCW11dGV4X2xvY2soJnBtY19yZXNlcnZlX211dGV4KTsKLQkJaWYgKGF0b21pY19yZWFkKCZudW1fY291bnRlcnMpID09IDAgJiYKLQkJICAgIHJlc2VydmVfcG1jX2hhcmR3YXJlKHBlcmZfY291bnRlcl9pbnRlcnJ1cHQpKQotCQkJZXJyID0gLUVCVVNZOwotCQllbHNlCi0JCQlhdG9taWNfaW5jKCZudW1fY291bnRlcnMpOwotCQltdXRleF91bmxvY2soJnBtY19yZXNlcnZlX211dGV4KTsKLQl9Ci0JY291bnRlci0+ZGVzdHJveSA9IGh3X3BlcmZfY291bnRlcl9kZXN0cm95OwotCi0JaWYgKGVycikKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQlyZXR1cm4gJnBvd2VyX3BtdTsKLX0KLQotLyoKLSAqIEEgY291bnRlciBoYXMgb3ZlcmZsb3dlZDsgdXBkYXRlIGl0cyBjb3VudCBhbmQgcmVjb3JkCi0gKiB0aGluZ3MgaWYgcmVxdWVzdGVkLiAgTm90ZSB0aGF0IGludGVycnVwdHMgYXJlIGhhcmQtZGlzYWJsZWQKLSAqIGhlcmUgc28gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgYmVpbmcgaW50ZXJydXB0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHJlY29yZF9hbmRfcmVzdGFydChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG5taSkKLXsKLQl1NjQgcGVyaW9kID0gY291bnRlci0+aHcuc2FtcGxlX3BlcmlvZDsKLQlzNjQgcHJldiwgZGVsdGEsIGxlZnQ7Ci0JaW50IHJlY29yZCA9IDA7Ci0KLQkvKiB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGludGVycnVwdHMgaGVyZSAqLwotCXByZXYgPSBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5ody5wcmV2X2NvdW50KTsKLQlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKLQlhdG9taWM2NF9hZGQoZGVsdGEsICZjb3VudGVyLT5jb3VudCk7Ci0KLQkvKgotCSAqIFNlZSBpZiB0aGUgdG90YWwgcGVyaW9kIGZvciB0aGlzIGNvdW50ZXIgaGFzIGV4cGlyZWQsCi0JICogYW5kIHVwZGF0ZSBmb3IgdGhlIG5leHQgcGVyaW9kLgotCSAqLwotCXZhbCA9IDA7Ci0JbGVmdCA9IGF0b21pYzY0X3JlYWQoJmNvdW50ZXItPmh3LnBlcmlvZF9sZWZ0KSAtIGRlbHRhOwotCWlmIChwZXJpb2QpIHsKLQkJaWYgKGxlZnQgPD0gMCkgewotCQkJbGVmdCArPSBwZXJpb2Q7Ci0JCQlpZiAobGVmdCA8PSAwKQotCQkJCWxlZnQgPSBwZXJpb2Q7Ci0JCQlyZWNvcmQgPSAxOwotCQl9Ci0JCWlmIChsZWZ0IDwgMHg4MDAwMDAwMExMKQotCQkJdmFsID0gMHg4MDAwMDAwMExMIC0gbGVmdDsKLQl9Ci0KLQkvKgotCSAqIEZpbmFsbHkgcmVjb3JkIGRhdGEgaWYgcmVxdWVzdGVkLgotCSAqLwotCWlmIChyZWNvcmQpIHsKLQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YSA9IHsKLQkJCS5yZWdzCT0gcmVncywKLQkJCS5hZGRyCT0gMCwKLQkJCS5wZXJpb2QJPSBjb3VudGVyLT5ody5sYXN0X3BlcmlvZCwKLQkJfTsKLQotCQlpZiAoY291bnRlci0+YXR0ci5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCi0JCQlwZXJmX2dldF9kYXRhX2FkZHIocmVncywgJmRhdGEuYWRkcik7Ci0KLQkJaWYgKHBlcmZfY291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCBubWksICZkYXRhKSkgewotCQkJLyoKLQkJCSAqIEludGVycnVwdHMgYXJlIGNvbWluZyB0b28gZmFzdCAtIHRocm90dGxlIHRoZW0KLQkJCSAqIGJ5IHNldHRpbmcgdGhlIGNvdW50ZXIgdG8gMCwgc28gaXQgd2lsbCBiZQotCQkJICogYXQgbGVhc3QgMl4zMCBjeWNsZXMgdW50aWwgdGhlIG5leHQgaW50ZXJydXB0Ci0JCQkgKiAoYXNzdW1pbmcgZWFjaCBjb3VudGVyIGNvdW50cyBhdCBtb3N0IDIgY291bnRzCi0JCQkgKiBwZXIgY3ljbGUpLgotCQkJICovCi0JCQl2YWwgPSAwOwotCQkJbGVmdCA9IH4wVUxMID4+IDE7Ci0JCX0KLQl9Ci0KLQl3cml0ZV9wbWMoY291bnRlci0+aHcuaWR4LCB2YWwpOwotCWF0b21pYzY0X3NldCgmY291bnRlci0+aHcucHJldl9jb3VudCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKLQlwZXJmX2NvdW50ZXJfdXBkYXRlX3VzZXJwYWdlKGNvdW50ZXIpOwotfQotCi0vKgotICogQ2FsbGVkIGZyb20gZ2VuZXJpYyBjb2RlIHRvIGdldCB0aGUgbWlzYyBmbGFncyAoaS5lLiBwcm9jZXNzb3IgbW9kZSkKLSAqIGZvciBhbiBldmVudC4KLSAqLwotdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdTMyIGZsYWdzID0gcGVyZl9nZXRfbWlzY19mbGFncyhyZWdzKTsKLQotCWlmIChmbGFncykKLQkJcmV0dXJuIGZsYWdzOwotCXJldHVybiB1c2VyX21vZGUocmVncykgPyBQRVJGX0VWRU5UX01JU0NfVVNFUiA6Ci0JCVBFUkZfRVZFTlRfTUlTQ19LRVJORUw7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgZnJvbSBnZW5lcmljIGNvZGUgdG8gZ2V0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyCi0gKiBmb3IgYW4gZXZlbnQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgaXA7Ci0KLQlpZiAoVFJBUChyZWdzKSAhPSAweGYwMCkKLQkJcmV0dXJuIHJlZ3MtPm5pcDsJLyogbm90IGEgUE1VIGludGVycnVwdCAqLwotCi0JaXAgPSBtZnNwcihTUFJOX1NJQVIpICsgcGVyZl9pcF9hZGp1c3QocmVncyk7Ci0JcmV0dXJuIGlwOwotfQotCi0vKgotICogUGVyZm9ybWFuY2UgbW9uaXRvciBpbnRlcnJ1cHQgc3R1ZmYKLSAqLwotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgZm91bmQgPSAwOwotCWludCBubWk7Ci0KLQlpZiAoY3B1aHctPm5fbGltaXRlZCkKLQkJZnJlZXplX2xpbWl0ZWRfY291bnRlcnMoY3B1aHcsIG1mc3ByKFNQUk5fUE1DNSksCi0JCQkJCW1mc3ByKFNQUk5fUE1DNikpOwotCi0JcGVyZl9yZWFkX3JlZ3MocmVncyk7Ci0KLQlubWkgPSBwZXJmX2ludHJfaXNfbm1pKHJlZ3MpOwotCWlmIChubWkpCi0JCW5taV9lbnRlcigpOwotCWVsc2UKLQkJaXJxX2VudGVyKCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fY291bnRlcnM7ICsraSkgewotCQljb3VudGVyID0gY3B1aHctPmNvdW50ZXJbaV07Ci0JCWlmICghY291bnRlci0+aHcuaWR4IHx8IGlzX2xpbWl0ZWRfcG1jKGNvdW50ZXItPmh3LmlkeCkpCi0JCQljb250aW51ZTsKLQkJdmFsID0gcmVhZF9wbWMoY291bnRlci0+aHcuaWR4KTsKLQkJaWYgKChpbnQpdmFsIDwgMCkgewotCQkJLyogY291bnRlciBoYXMgb3ZlcmZsb3dlZCAqLwotCQkJZm91bmQgPSAxOwotCQkJcmVjb3JkX2FuZF9yZXN0YXJ0KGNvdW50ZXIsIHZhbCwgcmVncywgbm1pKTsKLQkJfQotCX0KLQotCS8qCi0JICogSW4gY2FzZSB3ZSBkaWRuJ3QgZmluZCBhbmQgcmVzZXQgdGhlIGNvdW50ZXIgdGhhdCBjYXVzZWQKLQkgKiB0aGUgaW50ZXJydXB0LCBzY2FuIGFsbCBjb3VudGVycyBhbmQgcmVzZXQgYW55IHRoYXQgYXJlCi0JICogbmVnYXRpdmUsIHRvIGF2b2lkIGdldHRpbmcgY29udGludWFsIGludGVycnVwdHMuCi0JICogQW55IHRoYXQgd2UgcHJvY2Vzc2VkIGluIHRoZSBwcmV2aW91cyBsb29wIHdpbGwgbm90IGJlIG5lZ2F0aXZlLgotCSAqLwotCWlmICghZm91bmQpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBwbXUtPm5fY291bnRlcjsgKytpKSB7Ci0JCQlpZiAoaXNfbGltaXRlZF9wbWMoaSArIDEpKQotCQkJCWNvbnRpbnVlOwotCQkJdmFsID0gcmVhZF9wbWMoaSArIDEpOwotCQkJaWYgKChpbnQpdmFsIDwgMCkKLQkJCQl3cml0ZV9wbWMoaSArIDEsIDApOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBSZXNldCBNTUNSMCB0byBpdHMgbm9ybWFsIHZhbHVlLiAgVGhpcyB3aWxsIHNldCBQTVhFIGFuZAotCSAqIGNsZWFyIEZDIChmcmVlemUgY291bnRlcnMpIGFuZCBQTUFPIChwZXJmIG1vbiBhbGVydCBvY2N1cnJlZCkKLQkgKiBhbmQgdGh1cyBhbGxvdyBpbnRlcnJ1cHRzIHRvIG9jY3VyIGFnYWluLgotCSAqIFhYWCBtaWdodCB3YW50IHRvIHVzZSBNU1IuUE0gdG8ga2VlcCB0aGUgY291bnRlcnMgZnJvemVuIHVudGlsCi0JICogd2UgZ2V0IGJhY2sgb3V0IG9mIHRoaXMgaW50ZXJydXB0LgotCSAqLwotCXdyaXRlX21tY3IwKGNwdWh3LCBjcHVody0+bW1jclswXSk7Ci0KLQlpZiAobm1pKQotCQlubWlfZXhpdCgpOwotCWVsc2UKLQkJaXJxX2V4aXQoKTsKLX0KLQotdm9pZCBod19wZXJmX2NvdW50ZXJfc2V0dXAoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodyA9ICZwZXJfY3B1KGNwdV9od19jb3VudGVycywgY3B1KTsKLQotCWlmICghcHBtdSkKLQkJcmV0dXJuOwotCW1lbXNldChjcHVodywgMCwgc2l6ZW9mKCpjcHVodykpOwotCWNwdWh3LT5tbWNyWzBdID0gTU1DUjBfRkM7Ci19Ci0KLWludCByZWdpc3Rlcl9wb3dlcl9wbXUoc3RydWN0IHBvd2VyX3BtdSAqcG11KQotewotCWlmIChwcG11KQotCQlyZXR1cm4gLUVCVVNZOwkJLyogc29tZXRoaW5nJ3MgYWxyZWFkeSByZWdpc3RlcmVkICovCi0KLQlwcG11ID0gcG11OwotCXByX2luZm8oIiVzIHBlcmZvcm1hbmNlIG1vbml0b3IgaGFyZHdhcmUgc3VwcG9ydCByZWdpc3RlcmVkXG4iLAotCQlwbXUtPm5hbWUpOwotCi0jaWZkZWYgTVNSX0hWCi0JLyoKLQkgKiBVc2UgRkNIViB0byBpZ25vcmUga2VybmVsIGV2ZW50cyBpZiBNU1IuSFYgaXMgc2V0LgotCSAqLwotCWlmIChtZm1zcigpICYgTVNSX0hWKQotCQlmcmVlemVfY291bnRlcnNfa2VybmVsID0gTU1DUjBfRkNIVjsKLSNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNiYWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTAsMCArMSwxMzE1IEBACisvKgorICogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCAtIHBvd2VycGMgYXJjaGl0ZWN0dXJlIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8YXNtL3BtYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3QgY3B1X2h3X2V2ZW50cyB7CisJaW50IG5fZXZlbnRzOworCWludCBuX3BlcmNwdTsKKwlpbnQgZGlzYWJsZWQ7CisJaW50IG5fYWRkZWQ7CisJaW50IG5fbGltaXRlZDsKKwl1OCAgcG1jc19lbmFibGVkOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudFtNQVhfSFdFVkVOVFNdOworCXU2NCBldmVudHNbTUFYX0hXRVZFTlRTXTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3NbTUFYX0hXRVZFTlRTXTsKKwl1bnNpZ25lZCBsb25nIG1tY3JbM107CisJc3RydWN0IHBlcmZfZXZlbnQgKmxpbWl0ZWRfY291bnRlcltNQVhfTElNSVRFRF9IV0NPVU5URVJTXTsKKwl1OCAgbGltaXRlZF9od2lkeFtNQVhfTElNSVRFRF9IV0NPVU5URVJTXTsKKwl1NjQgYWx0ZXJuYXRpdmVzW01BWF9IV0VWRU5UU11bTUFYX0VWRU5UX0FMVEVSTkFUSVZFU107CisJdW5zaWduZWQgbG9uZyBhbWFza3NbTUFYX0hXRVZFTlRTXVtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKKwl1bnNpZ25lZCBsb25nIGF2YWx1ZXNbTUFYX0hXRVZFTlRTXVtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKK307CitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2V2ZW50cywgY3B1X2h3X2V2ZW50cyk7CisKK3N0cnVjdCBwb3dlcl9wbXUgKnBwbXU7CisKKy8qCisgKiBOb3JtYWxseSwgdG8gaWdub3JlIGtlcm5lbCBldmVudHMgd2Ugc2V0IHRoZSBGQ1MgKGZyZWV6ZSBjb3VudGVycworICogaW4gc3VwZXJ2aXNvciBtb2RlKSBiaXQgaW4gTU1DUjAsIGJ1dCBpZiB0aGUga2VybmVsIHJ1bnMgd2l0aCB0aGUKKyAqIGh5cGVydmlzb3IgYml0IHNldCBpbiB0aGUgTVNSLCBvciBpZiB3ZSBhcmUgcnVubmluZyBvbiBhIHByb2Nlc3NvcgorICogd2hlcmUgdGhlIGh5cGVydmlzb3IgYml0IGlzIGZvcmNlZCB0byAxIChhcyBvbiBBcHBsZSBHNSBwcm9jZXNzb3JzKSwKKyAqIHRoZW4gd2UgbmVlZCB0byB1c2UgdGhlIEZDSFYgYml0IHRvIGlnbm9yZSBrZXJuZWwgZXZlbnRzLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGZyZWV6ZV9ldmVudHNfa2VybmVsID0gTU1DUjBfRkNTOworCisvKgorICogMzItYml0IGRvZXNuJ3QgaGF2ZSBNTUNSQSBidXQgZG9lcyBoYXZlIGFuIE1NQ1IyLAorICogYW5kIGEgZmV3IG90aGVyIG5hbWVzIGFyZSBkaWZmZXJlbnQuCisgKi8KKyNpZmRlZiBDT05GSUdfUFBDMzIKKworI2RlZmluZSBNTUNSMF9GQ0hWCQkwCisjZGVmaW5lIE1NQ1IwX1BNQ2pDRQkJTU1DUjBfUE1DbkNFCisKKyNkZWZpbmUgU1BSTl9NTUNSQQkJU1BSTl9NTUNSMgorI2RlZmluZSBNTUNSQV9TQU1QTEVfRU5BQkxFCTAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBlcmZfaXBfYWRqdXN0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZ2V0X2RhdGFfYWRkcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0ICphZGRycCkgeyB9CitzdGF0aWMgaW5saW5lIHUzMiBwZXJmX2dldF9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfcmVhZF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfaW50cl9pc19ubWkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KKworLyoKKyAqIFRoaW5ncyB0aGF0IGFyZSBzcGVjaWZpYyB0byA2NC1iaXQgaW1wbGVtZW50YXRpb25zLgorICovCisjaWZkZWYgQ09ORklHX1BQQzY0CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwZXJmX2lwX2FkanVzdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIG1tY3JhID0gcmVncy0+ZHNpc3I7CisKKwlpZiAoKG1tY3JhICYgTU1DUkFfU0FNUExFX0VOQUJMRSkgJiYgIShwcG11LT5mbGFncyAmIFBQTVVfQUxUX1NJUFIpKSB7CisJCXVuc2lnbmVkIGxvbmcgc2xvdCA9IChtbWNyYSAmIE1NQ1JBX1NMT1QpID4+IE1NQ1JBX1NMT1RfU0hJRlQ7CisJCWlmIChzbG90ID4gMSkKKwkJCXJldHVybiA0ICogKHNsb3QgLSAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgdXNlciB3YW50cyBhIGRhdGEgYWRkcmVzcyByZWNvcmRlZC4KKyAqIElmIHdlJ3JlIG5vdCBkb2luZyBpbnN0cnVjdGlvbiBzYW1wbGluZywgZ2l2ZSB0aGVtIHRoZSBTREFSCisgKiAoc2FtcGxlZCBkYXRhIGFkZHJlc3MpLiAgSWYgd2UgYXJlIGRvaW5nIGluc3RydWN0aW9uIHNhbXBsaW5nLCB0aGVuCisgKiBvbmx5IGdpdmUgdGhlbSB0aGUgU0RBUiBpZiBpdCBjb3JyZXNwb25kcyB0byB0aGUgaW5zdHJ1Y3Rpb24KKyAqIHBvaW50ZWQgdG8gYnkgU0lBUjsgdGhpcyBpcyBpbmRpY2F0ZWQgYnkgdGhlIFtQT1dFUjZfXU1NQ1JBX1NEU1lOQworICogYml0IGluIE1NQ1JBLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9nZXRfZGF0YV9hZGRyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgKmFkZHJwKQoreworCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSByZWdzLT5kc2lzcjsKKwl1bnNpZ25lZCBsb25nIHNkc3luYyA9IChwcG11LT5mbGFncyAmIFBQTVVfQUxUX1NJUFIpID8KKwkJUE9XRVI2X01NQ1JBX1NEU1lOQyA6IE1NQ1JBX1NEU1lOQzsKKworCWlmICghKG1tY3JhICYgTU1DUkFfU0FNUExFX0VOQUJMRSkgfHwgKG1tY3JhICYgc2RzeW5jKSkKKwkJKmFkZHJwID0gbWZzcHIoU1BSTl9TREFSKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcGVyZl9nZXRfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIG1tY3JhID0gcmVncy0+ZHNpc3I7CisKKwlpZiAoVFJBUChyZWdzKSAhPSAweGYwMCkKKwkJcmV0dXJuIDA7CS8qIG5vdCBhIFBNVSBpbnRlcnJ1cHQgKi8KKworCWlmIChwcG11LT5mbGFncyAmIFBQTVVfQUxUX1NJUFIpIHsKKwkJaWYgKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJSFYpCisJCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOworCQlyZXR1cm4gKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJUFIpID8KKwkJCVBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCX0KKwlpZiAobW1jcmEgJiBNTUNSQV9TSUhWKQorCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOworCXJldHVybiAobW1jcmEgJiBNTUNSQV9TSVBSKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6CisJCVBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworfQorCisvKgorICogT3ZlcmxvYWQgcmVncy0+ZHNpc3IgdG8gc3RvcmUgTU1DUkEgc28gd2Ugb25seSBuZWVkIHRvIHJlYWQgaXQgb25jZQorICogb24gZWFjaCBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX3JlYWRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdzLT5kc2lzciA9IG1mc3ByKFNQUk5fTU1DUkEpOworfQorCisvKgorICogSWYgaW50ZXJydXB0cyB3ZXJlIHNvZnQtZGlzYWJsZWQgd2hlbiBhIFBNVSBpbnRlcnJ1cHQgb2NjdXJzLCB0cmVhdAorICogaXQgYXMgYW4gTk1JLgorICovCitzdGF0aWMgaW5saW5lIGludCBwZXJmX2ludHJfaXNfbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAhcmVncy0+c29mdGU7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCit2b2lkIHBlcmZfZXZlbnRfcHJpbnRfZGVidWcodm9pZCkKK3sKK30KKworLyoKKyAqIFJlYWQgb25lIHBlcmZvcm1hbmNlIG1vbml0b3IgY291bnRlciAoUE1DKS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9wbWMoaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXN3aXRjaCAoaWR4KSB7CisJY2FzZSAxOgorCQl2YWwgPSBtZnNwcihTUFJOX1BNQzEpOworCQlicmVhazsKKwljYXNlIDI6CisJCXZhbCA9IG1mc3ByKFNQUk5fUE1DMik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdmFsID0gbWZzcHIoU1BSTl9QTUMzKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl2YWwgPSBtZnNwcihTUFJOX1BNQzQpOworCQlicmVhazsKKwljYXNlIDU6CisJCXZhbCA9IG1mc3ByKFNQUk5fUE1DNSk7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJdmFsID0gbWZzcHIoU1BSTl9QTUM2KTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJY2FzZSA3OgorCQl2YWwgPSBtZnNwcihTUFJOX1BNQzcpOworCQlicmVhazsKKwljYXNlIDg6CisJCXZhbCA9IG1mc3ByKFNQUk5fUE1DOCk7CisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAib29wcyB0cnlpbmcgdG8gcmVhZCBQTUMlZFxuIiwgaWR4KTsKKwkJdmFsID0gMDsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworLyoKKyAqIFdyaXRlIG9uZSBQTUMuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3BtYyhpbnQgaWR4LCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzd2l0Y2ggKGlkeCkgeworCWNhc2UgMToKKwkJbXRzcHIoU1BSTl9QTUMxLCB2YWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCW10c3ByKFNQUk5fUE1DMiwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQltdHNwcihTUFJOX1BNQzMsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJbXRzcHIoU1BSTl9QTUM0LCB2YWwpOworCQlicmVhazsKKwljYXNlIDU6CisJCW10c3ByKFNQUk5fUE1DNSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQltdHNwcihTUFJOX1BNQzYsIHZhbCk7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19QUEM2NAorCWNhc2UgNzoKKwkJbXRzcHIoU1BSTl9QTUM3LCB2YWwpOworCQlicmVhazsKKwljYXNlIDg6CisJCW10c3ByKFNQUk5fUE1DOCwgdmFsKTsKKwkJYnJlYWs7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJvb3BzIHRyeWluZyB0byB3cml0ZSBQTUMlZFxuIiwgaWR4KTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHNldCBvZiBldmVudHMgY2FuIGFsbCBnbyBvbiB0aGUgUE1VIGF0IG9uY2UuCisgKiBJZiB0aGV5IGNhbid0LCB0aGlzIHdpbGwgbG9vayBhdCBhbHRlcm5hdGl2ZSBjb2RlcyBmb3IgdGhlIGV2ZW50cworICogYW5kIHNlZSBpZiBhbnkgY29tYmluYXRpb24gb2YgYWx0ZXJuYXRpdmUgY29kZXMgaXMgZmVhc2libGUuCisgKiBUaGUgZmVhc2libGUgc2V0IGlzIHJldHVybmVkIGluIGV2ZW50X2lkW10uCisgKi8KK3N0YXRpYyBpbnQgcG93ZXJfY2hlY2tfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3LAorCQkJCSAgIHU2NCBldmVudF9pZFtdLCB1bnNpZ25lZCBpbnQgY2ZsYWdzW10sCisJCQkJICAgaW50IG5fZXYpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrLCB2YWx1ZSwgbnY7CisJdW5zaWduZWQgbG9uZyBzbWFza3NbTUFYX0hXRVZFTlRTXSwgc3ZhbHVlc1tNQVhfSFdFVkVOVFNdOworCWludCBuX2FsdFtNQVhfSFdFVkVOVFNdLCBjaG9pY2VbTUFYX0hXRVZFTlRTXTsKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBsb25nIGFkZGYgPSBwcG11LT5hZGRfZmllbGRzOworCXVuc2lnbmVkIGxvbmcgdGFkZCA9IHBwbXUtPnRlc3RfYWRkZXI7CisKKwlpZiAobl9ldiA+IHBwbXUtPm5fY291bnRlcikKKwkJcmV0dXJuIC0xOworCisJLyogRmlyc3Qgc2VlIGlmIHRoZSBldmVudHMgd2lsbCBnbyBvbiBhcy1pcyAqLworCWZvciAoaSA9IDA7IGkgPCBuX2V2OyArK2kpIHsKKwkJaWYgKChjZmxhZ3NbaV0gJiBQUE1VX0xJTUlURURfUE1DX1JFUUQpCisJCSAgICAmJiAhcHBtdS0+bGltaXRlZF9wbWNfZXZlbnQoZXZlbnRfaWRbaV0pKSB7CisJCQlwcG11LT5nZXRfYWx0ZXJuYXRpdmVzKGV2ZW50X2lkW2ldLCBjZmxhZ3NbaV0sCisJCQkJCSAgICAgICBjcHVody0+YWx0ZXJuYXRpdmVzW2ldKTsKKwkJCWV2ZW50X2lkW2ldID0gY3B1aHctPmFsdGVybmF0aXZlc1tpXVswXTsKKwkJfQorCQlpZiAocHBtdS0+Z2V0X2NvbnN0cmFpbnQoZXZlbnRfaWRbaV0sICZjcHVody0+YW1hc2tzW2ldWzBdLAorCQkJCQkgJmNwdWh3LT5hdmFsdWVzW2ldWzBdKSkKKwkJCXJldHVybiAtMTsKKwl9CisJdmFsdWUgPSBtYXNrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbl9ldjsgKytpKSB7CisJCW52ID0gKHZhbHVlIHwgY3B1aHctPmF2YWx1ZXNbaV1bMF0pICsKKwkJCSh2YWx1ZSAmIGNwdWh3LT5hdmFsdWVzW2ldWzBdICYgYWRkZik7CisJCWlmICgoKChudiArIHRhZGQpIF4gdmFsdWUpICYgbWFzaykgIT0gMCB8fAorCQkgICAgKCgobnYgKyB0YWRkKSBeIGNwdWh3LT5hdmFsdWVzW2ldWzBdKSAmCisJCSAgICAgY3B1aHctPmFtYXNrc1tpXVswXSkgIT0gMCkKKwkJCWJyZWFrOworCQl2YWx1ZSA9IG52OworCQltYXNrIHw9IGNwdWh3LT5hbWFza3NbaV1bMF07CisJfQorCWlmIChpID09IG5fZXYpCisJCXJldHVybiAwOwkvKiBhbGwgT0sgKi8KKworCS8qIGRvZXNuJ3Qgd29yaywgZ2F0aGVyIGFsdGVybmF0aXZlcy4uLiAqLworCWlmICghcHBtdS0+Z2V0X2FsdGVybmF0aXZlcykKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBuX2V2OyArK2kpIHsKKwkJY2hvaWNlW2ldID0gMDsKKwkJbl9hbHRbaV0gPSBwcG11LT5nZXRfYWx0ZXJuYXRpdmVzKGV2ZW50X2lkW2ldLCBjZmxhZ3NbaV0sCisJCQkJCQkgIGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV0pOworCQlmb3IgKGogPSAxOyBqIDwgbl9hbHRbaV07ICsraikKKwkJCXBwbXUtPmdldF9jb25zdHJhaW50KGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV1bal0sCisJCQkJCSAgICAgJmNwdWh3LT5hbWFza3NbaV1bal0sCisJCQkJCSAgICAgJmNwdWh3LT5hdmFsdWVzW2ldW2pdKTsKKwl9CisKKwkvKiBlbnVtZXJhdGUgYWxsIHBvc3NpYmlsaXRpZXMgYW5kIHNlZSBpZiBhbnkgd2lsbCB3b3JrICovCisJaSA9IDA7CisJaiA9IC0xOworCXZhbHVlID0gbWFzayA9IG52ID0gMDsKKwl3aGlsZSAoaSA8IG5fZXYpIHsKKwkJaWYgKGogPj0gMCkgeworCQkJLyogd2UncmUgYmFja3RyYWNraW5nLCByZXN0b3JlIGNvbnRleHQgKi8KKwkJCXZhbHVlID0gc3ZhbHVlc1tpXTsKKwkJCW1hc2sgPSBzbWFza3NbaV07CisJCQlqID0gY2hvaWNlW2ldOworCQl9CisJCS8qCisJCSAqIFNlZSBpZiBhbnkgYWx0ZXJuYXRpdmUgayBmb3IgZXZlbnRfaWQgaSwKKwkJICogd2hlcmUgayA+IGosIHdpbGwgc2F0aXNmeSB0aGUgY29uc3RyYWludHMuCisJCSAqLworCQl3aGlsZSAoKytqIDwgbl9hbHRbaV0pIHsKKwkJCW52ID0gKHZhbHVlIHwgY3B1aHctPmF2YWx1ZXNbaV1bal0pICsKKwkJCQkodmFsdWUgJiBjcHVody0+YXZhbHVlc1tpXVtqXSAmIGFkZGYpOworCQkJaWYgKCgoKG52ICsgdGFkZCkgXiB2YWx1ZSkgJiBtYXNrKSA9PSAwICYmCisJCQkgICAgKCgobnYgKyB0YWRkKSBeIGNwdWh3LT5hdmFsdWVzW2ldW2pdKQorCQkJICAgICAmIGNwdWh3LT5hbWFza3NbaV1bal0pID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGogPj0gbl9hbHRbaV0pIHsKKwkJCS8qCisJCQkgKiBObyBmZWFzaWJsZSBhbHRlcm5hdGl2ZSwgYmFja3RyYWNrCisJCQkgKiB0byBldmVudF9pZCBpLTEgYW5kIGNvbnRpbnVlIGVudW1lcmF0aW5nIGl0cworCQkJICogYWx0ZXJuYXRpdmVzIGZyb20gd2hlcmUgd2UgZ290IHVwIHRvLgorCQkJICovCisJCQlpZiAoLS1pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRm91bmQgYSBmZWFzaWJsZSBhbHRlcm5hdGl2ZSBmb3IgZXZlbnRfaWQgaSwKKwkJCSAqIHJlbWVtYmVyIHdoZXJlIHdlIGdvdCB1cCB0byB3aXRoIHRoaXMgZXZlbnRfaWQsCisJCQkgKiBnbyBvbiB0byB0aGUgbmV4dCBldmVudF9pZCwgYW5kIHN0YXJ0IHdpdGgKKwkJCSAqIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBmb3IgaXQuCisJCQkgKi8KKwkJCWNob2ljZVtpXSA9IGo7CisJCQlzdmFsdWVzW2ldID0gdmFsdWU7CisJCQlzbWFza3NbaV0gPSBtYXNrOworCQkJdmFsdWUgPSBudjsKKwkJCW1hc2sgfD0gY3B1aHctPmFtYXNrc1tpXVtqXTsKKwkJCSsraTsKKwkJCWogPSAtMTsKKwkJfQorCX0KKworCS8qIE9LLCB3ZSBoYXZlIGEgZmVhc2libGUgY29tYmluYXRpb24sIHRlbGwgdGhlIGNhbGxlciB0aGUgc29sdXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbl9ldjsgKytpKQorCQlldmVudF9pZFtpXSA9IGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV1bY2hvaWNlW2ldXTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIGlmIG5ld2x5LWFkZGVkIGV2ZW50cyBoYXZlIGNvbnNpc3RlbnQgc2V0dGluZ3MgZm9yCisgKiBleGNsdWRlX3t1c2VyLGtlcm5lbCxodn0gd2l0aCBlYWNoIG90aGVyIGFuZCBhbnkgcHJldmlvdXNseQorICogYWRkZWQgZXZlbnRzLgorICovCitzdGF0aWMgaW50IGNoZWNrX2V4Y2x1ZGVzKHN0cnVjdCBwZXJmX2V2ZW50ICoqY3RycywgdW5zaWduZWQgaW50IGNmbGFnc1tdLAorCQkJICBpbnQgbl9wcmV2LCBpbnQgbl9uZXcpCit7CisJaW50IGV1ID0gMCwgZWsgPSAwLCBlaCA9IDA7CisJaW50IGksIG4sIGZpcnN0OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCW4gPSBuX3ByZXYgKyBuX25ldzsKKwlpZiAobiA8PSAxKQorCQlyZXR1cm4gMDsKKworCWZpcnN0ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisJCWlmIChjZmxhZ3NbaV0gJiBQUE1VX0xJTUlURURfUE1DX09LKSB7CisJCQljZmxhZ3NbaV0gJj0gflBQTVVfTElNSVRFRF9QTUNfUkVRRDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWV2ZW50ID0gY3Ryc1tpXTsKKwkJaWYgKGZpcnN0KSB7CisJCQlldSA9IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlcjsKKwkJCWVrID0gZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWw7CisJCQllaCA9IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHY7CisJCQlmaXJzdCA9IDA7CisJCX0gZWxzZSBpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyICE9IGV1IHx8CisJCQkgICBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbCAhPSBlayB8fAorCQkJICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9odiAhPSBlaCkgeworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisKKwlpZiAoZXUgfHwgZWsgfHwgZWgpCisJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQlpZiAoY2ZsYWdzW2ldICYgUFBNVV9MSU1JVEVEX1BNQ19PSykKKwkJCQljZmxhZ3NbaV0gfD0gUFBNVV9MSU1JVEVEX1BNQ19SRVFEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VyX3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzNjQgdmFsLCBkZWx0YSwgcHJldjsKKworCWlmICghZXZlbnQtPmh3LmlkeCkKKwkJcmV0dXJuOworCS8qCisJICogUGVyZm9ybWFuY2UgbW9uaXRvciBpbnRlcnJ1cHRzIGNvbWUgZXZlbiB3aGVuIGludGVycnVwdHMKKwkgKiBhcmUgc29mdC1kaXNhYmxlZCwgYXMgbG9uZyBhcyBpbnRlcnJ1cHRzIGFyZSBoYXJkLWVuYWJsZWQuCisJICogVGhlcmVmb3JlIHdlIHRyZWF0IHRoZW0gbGlrZSBOTUlzLgorCSAqLworCWRvIHsKKwkJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwkJYmFycmllcigpOworCQl2YWwgPSByZWFkX3BtYyhldmVudC0+aHcuaWR4KTsKKwl9IHdoaWxlIChhdG9taWM2NF9jbXB4Y2hnKCZldmVudC0+aHcucHJldl9jb3VudCwgcHJldiwgdmFsKSAhPSBwcmV2KTsKKworCS8qIFRoZSBjb3VudGVycyBhcmUgb25seSAzMiBiaXRzIHdpZGUgKi8KKwlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWF0b21pYzY0X3N1YihkZWx0YSwgJmV2ZW50LT5ody5wZXJpb2RfbGVmdCk7Cit9CisKKy8qCisgKiBPbiBzb21lIG1hY2hpbmVzLCBQTUM1IGFuZCBQTUM2IGNhbid0IGJlIHdyaXR0ZW4sIGRvbid0IHJlc3BlY3QKKyAqIHRoZSBmcmVlemUgY29uZGl0aW9ucywgYW5kIGRvbid0IGdlbmVyYXRlIGludGVycnVwdHMuICBUaGlzIHRlbGxzCisgKiB1cyBpZiBgZXZlbnQnIGlzIHVzaW5nIHN1Y2ggYSBQTUMuCisgKi8KK3N0YXRpYyBpbnQgaXNfbGltaXRlZF9wbWMoaW50IHBtY251bSkKK3sKKwlyZXR1cm4gKHBwbXUtPmZsYWdzICYgUFBNVV9MSU1JVEVEX1BNQzVfNikKKwkJJiYgKHBtY251bSA9PSA1IHx8IHBtY251bSA9PSA2KTsKK30KKworc3RhdGljIHZvaWQgZnJlZXplX2xpbWl0ZWRfY291bnRlcnMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHBtYzUsIHVuc2lnbmVkIGxvbmcgcG1jNikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJdTY0IHZhbCwgcHJldiwgZGVsdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fbGltaXRlZDsgKytpKSB7CisJCWV2ZW50ID0gY3B1aHctPmxpbWl0ZWRfY291bnRlcltpXTsKKwkJaWYgKCFldmVudC0+aHcuaWR4KQorCQkJY29udGludWU7CisJCXZhbCA9IChldmVudC0+aHcuaWR4ID09IDUpID8gcG1jNSA6IHBtYzY7CisJCXByZXYgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJCWV2ZW50LT5ody5pZHggPSAwOworCQlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKKwkJYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRoYXdfbGltaXRlZF9jb3VudGVycyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHcsCisJCQkJICB1bnNpZ25lZCBsb25nIHBtYzUsIHVuc2lnbmVkIGxvbmcgcG1jNikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJdTY0IHZhbDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9saW1pdGVkOyArK2kpIHsKKwkJZXZlbnQgPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOworCQlldmVudC0+aHcuaWR4ID0gY3B1aHctPmxpbWl0ZWRfaHdpZHhbaV07CisJCXZhbCA9IChldmVudC0+aHcuaWR4ID09IDUpID8gcG1jNSA6IHBtYzY7CisJCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwl9Cit9CisKKy8qCisgKiBTaW5jZSBsaW1pdGVkIGV2ZW50cyBkb24ndCByZXNwZWN0IHRoZSBmcmVlemUgY29uZGl0aW9ucywgd2UKKyAqIGhhdmUgdG8gcmVhZCB0aGVtIGltbWVkaWF0ZWx5IGFmdGVyIGZyZWV6aW5nIG9yIHVuZnJlZXppbmcgdGhlCisgKiBvdGhlciBldmVudHMuICBXZSB0cnkgdG8ga2VlcCB0aGUgdmFsdWVzIGZyb20gdGhlIGxpbWl0ZWQKKyAqIGV2ZW50cyBhcyBjb25zaXN0ZW50IGFzIHBvc3NpYmxlIGJ5IGtlZXBpbmcgdGhlIGRlbGF5IChpbgorICogY3ljbGVzIGFuZCBpbnN0cnVjdGlvbnMpIGJldHdlZW4gZnJlZXppbmcvdW5mcmVlemluZyBhbmQgcmVhZGluZworICogdGhlIGxpbWl0ZWQgZXZlbnRzIGFzIHNtYWxsIGFuZCBjb25zaXN0ZW50IGFzIHBvc3NpYmxlLgorICogVGhlcmVmb3JlLCBpZiBhbnkgbGltaXRlZCBldmVudHMgYXJlIGluIHVzZSwgd2UgcmVhZCB0aGVtCisgKiBib3RoLCBhbmQgYWx3YXlzIGluIHRoZSBzYW1lIG9yZGVyLCB0byBtaW5pbWl6ZSB2YXJpYWJpbGl0eSwKKyAqIGFuZCBkbyBpdCBpbnNpZGUgdGhlIHNhbWUgYXNtIHRoYXQgd3JpdGVzIE1NQ1IwLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9tbWNyMChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHcsIHVuc2lnbmVkIGxvbmcgbW1jcjApCit7CisJdW5zaWduZWQgbG9uZyBwbWM1LCBwbWM2OworCisJaWYgKCFjcHVody0+bl9saW1pdGVkKSB7CisJCW10c3ByKFNQUk5fTU1DUjAsIG1tY3IwKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogV3JpdGUgTU1DUjAsIHRoZW4gcmVhZCBQTUM1IGFuZCBQTUM2IGltbWVkaWF0ZWx5LgorCSAqIFRvIGVuc3VyZSB3ZSBkb24ndCBnZXQgYSBwZXJmb3JtYW5jZSBtb25pdG9yIGludGVycnVwdAorCSAqIGJldHdlZW4gd3JpdGluZyBNTUNSMCBhbmQgZnJlZXppbmcvdGhhd2luZyB0aGUgbGltaXRlZAorCSAqIGV2ZW50cywgd2UgZmlyc3Qgd3JpdGUgTU1DUjAgd2l0aCB0aGUgZXZlbnQgb3ZlcmZsb3cKKwkgKiBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgdHVybmVkIG9mZi4KKwkgKi8KKwlhc20gdm9sYXRpbGUoIm10c3ByICUzLCUyOyBtZnNwciAlMCwlNDsgbWZzcHIgJTEsJTUiCisJCSAgICAgOiAiPSZyIiAocG1jNSksICI9JnIiIChwbWM2KQorCQkgICAgIDogInIiIChtbWNyMCAmIH4oTU1DUjBfUE1DMUNFIHwgTU1DUjBfUE1DakNFKSksCisJCSAgICAgICAiaSIgKFNQUk5fTU1DUjApLAorCQkgICAgICAgImkiIChTUFJOX1BNQzUpLCAiaSIgKFNQUk5fUE1DNikpOworCisJaWYgKG1tY3IwICYgTU1DUjBfRkMpCisJCWZyZWV6ZV9saW1pdGVkX2NvdW50ZXJzKGNwdWh3LCBwbWM1LCBwbWM2KTsKKwllbHNlCisJCXRoYXdfbGltaXRlZF9jb3VudGVycyhjcHVodywgcG1jNSwgcG1jNik7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBmdWxsIE1NQ1IwIGluY2x1ZGluZyB0aGUgZXZlbnQgb3ZlcmZsb3cgaW50ZXJydXB0CisJICogZW5hYmxlIGJpdHMsIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAobW1jcjAgJiAoTU1DUjBfUE1DMUNFIHwgTU1DUjBfUE1DakNFKSkKKwkJbXRzcHIoU1BSTl9NTUNSMCwgbW1jcjApOworfQorCisvKgorICogRGlzYWJsZSBhbGwgZXZlbnRzIHRvIHByZXZlbnQgUE1VIGludGVycnVwdHMgYW5kIHRvIGFsbG93CisgKiBldmVudHMgdG8gYmUgYWRkZWQgb3IgcmVtb3ZlZC4KKyAqLwordm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHBtdSkKKwkJcmV0dXJuOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJaWYgKCFjcHVody0+ZGlzYWJsZWQpIHsKKwkJY3B1aHctPmRpc2FibGVkID0gMTsKKwkJY3B1aHctPm5fYWRkZWQgPSAwOworCisJCS8qCisJCSAqIENoZWNrIGlmIHdlIGV2ZXIgZW5hYmxlZCB0aGUgUE1VIG9uIHRoaXMgY3B1LgorCQkgKi8KKwkJaWYgKCFjcHVody0+cG1jc19lbmFibGVkKSB7CisJCQlwcGNfZW5hYmxlX3BtY3MoKTsKKwkJCWNwdWh3LT5wbWNzX2VuYWJsZWQgPSAxOworCQl9CisKKwkJLyoKKwkJICogRGlzYWJsZSBpbnN0cnVjdGlvbiBzYW1wbGluZyBpZiBpdCB3YXMgZW5hYmxlZAorCQkgKi8KKwkJaWYgKGNwdWh3LT5tbWNyWzJdICYgTU1DUkFfU0FNUExFX0VOQUJMRSkgeworCQkJbXRzcHIoU1BSTl9NTUNSQSwKKwkJCSAgICAgIGNwdWh3LT5tbWNyWzJdICYgfk1NQ1JBX1NBTVBMRV9FTkFCTEUpOworCQkJbWIoKTsKKwkJfQorCisJCS8qCisJCSAqIFNldCB0aGUgJ2ZyZWV6ZSBjb3VudGVycycgYml0LgorCQkgKiBUaGUgYmFycmllciBpcyB0byBtYWtlIHN1cmUgdGhlIG10c3ByIGhhcyBiZWVuCisJCSAqIGV4ZWN1dGVkIGFuZCB0aGUgUE1VIGhhcyBmcm96ZW4gdGhlIGV2ZW50cworCQkgKiBiZWZvcmUgd2UgcmV0dXJuLgorCQkgKi8KKwkJd3JpdGVfbW1jcjAoY3B1aHcsIG1mc3ByKFNQUk5fTU1DUjApIHwgTU1DUjBfRkMpOworCQltYigpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBSZS1lbmFibGUgYWxsIGV2ZW50cyBpZiBkaXNhYmxlID09IDAuCisgKiBJZiB3ZSB3ZXJlIHByZXZpb3VzbHkgZGlzYWJsZWQgYW5kIGV2ZW50cyB3ZXJlIGFkZGVkLCB0aGVuCisgKiBwdXQgdGhlIG5ldyBjb25maWcgb24gdGhlIFBNVS4KKyAqLwordm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIGk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJczY0IGxlZnQ7CisJdW5zaWduZWQgaW50IGh3Y19pbmRleFtNQVhfSFdFVkVOVFNdOworCWludCBuX2xpbTsKKwlpbnQgaWR4OworCisJaWYgKCFwcG11KQorCQlyZXR1cm47CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJaWYgKCFjcHVody0+ZGlzYWJsZWQpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWNwdWh3LT5kaXNhYmxlZCA9IDA7CisKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBjaGFuZ2UgYW55dGhpbmcsIG9yIG9ubHkgcmVtb3ZlZCBldmVudHMsCisJICogbm8gbmVlZCB0byByZWNhbGN1bGF0ZSBNTUNSKiBzZXR0aW5ncyBhbmQgcmVzZXQgdGhlIFBNQ3MuCisJICogSnVzdCByZWVuYWJsZSB0aGUgUE1VIHdpdGggdGhlIGN1cnJlbnQgTU1DUiogc2V0dGluZ3MKKwkgKiAocG9zc2libHkgdXBkYXRlZCBmb3IgcmVtb3ZhbCBvZiBldmVudHMpLgorCSAqLworCWlmICghY3B1aHctPm5fYWRkZWQpIHsKKwkJbXRzcHIoU1BSTl9NTUNSQSwgY3B1aHctPm1tY3JbMl0gJiB+TU1DUkFfU0FNUExFX0VOQUJMRSk7CisJCW10c3ByKFNQUk5fTU1DUjEsIGNwdWh3LT5tbWNyWzFdKTsKKwkJaWYgKGNwdWh3LT5uX2V2ZW50cyA9PSAwKQorCQkJcHBjX3NldF9wbXVfaW51c2UoMCk7CisJCWdvdG8gb3V0X2VuYWJsZTsKKwl9CisKKwkvKgorCSAqIENvbXB1dGUgTU1DUiogdmFsdWVzIGZvciB0aGUgbmV3IHNldCBvZiBldmVudHMKKwkgKi8KKwlpZiAocHBtdS0+Y29tcHV0ZV9tbWNyKGNwdWh3LT5ldmVudHMsIGNwdWh3LT5uX2V2ZW50cywgaHdjX2luZGV4LAorCQkJICAgICAgIGNwdWh3LT5tbWNyKSkgeworCQkvKiBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZSAqLworCQlwcmludGsoS0VSTl9FUlIgIm9vcHMgY29tcHV0ZV9tbWNyIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQWRkIGluIE1NQ1IwIGZyZWV6ZSBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisJICogYXR0ci5leGNsdWRlXyogYml0cyBmb3IgdGhlIGZpcnN0IGV2ZW50LgorCSAqIFdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgYWxsIGV2ZW50cyBoYXZlIHRoZQorCSAqIHNhbWUgdmFsdWVzIGZvciB0aGVzZSBiaXRzIGFzIHRoZSBmaXJzdCBldmVudC4KKwkgKi8KKwlldmVudCA9IGNwdWh3LT5ldmVudFswXTsKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyKQorCQljcHVody0+bW1jclswXSB8PSBNTUNSMF9GQ1A7CisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfa2VybmVsKQorCQljcHVody0+bW1jclswXSB8PSBmcmVlemVfZXZlbnRzX2tlcm5lbDsKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV9odikKKwkJY3B1aHctPm1tY3JbMF0gfD0gTU1DUjBfRkNIVjsKKworCS8qCisJICogV3JpdGUgdGhlIG5ldyBjb25maWd1cmF0aW9uIHRvIE1NQ1IqIHdpdGggdGhlIGZyZWV6ZQorCSAqIGJpdCBzZXQgYW5kIHNldCB0aGUgaGFyZHdhcmUgZXZlbnRzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLgorCSAqIFRoZW4gdW5mcmVlemUgdGhlIGV2ZW50cy4KKwkgKi8KKwlwcGNfc2V0X3BtdV9pbnVzZSgxKTsKKwltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSAmIH5NTUNSQV9TQU1QTEVfRU5BQkxFKTsKKwltdHNwcihTUFJOX01NQ1IxLCBjcHVody0+bW1jclsxXSk7CisJbXRzcHIoU1BSTl9NTUNSMCwgKGNwdWh3LT5tbWNyWzBdICYgfihNTUNSMF9QTUMxQ0UgfCBNTUNSMF9QTUNqQ0UpKQorCQkJCXwgTU1DUjBfRkMpOworCisJLyoKKwkgKiBSZWFkIG9mZiBhbnkgcHJlLWV4aXN0aW5nIGV2ZW50cyB0aGF0IG5lZWQgdG8gbW92ZQorCSAqIHRvIGFub3RoZXIgUE1DLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9ldmVudHM7ICsraSkgeworCQlldmVudCA9IGNwdWh3LT5ldmVudFtpXTsKKwkJaWYgKGV2ZW50LT5ody5pZHggJiYgZXZlbnQtPmh3LmlkeCAhPSBod2NfaW5kZXhbaV0gKyAxKSB7CisJCQlwb3dlcl9wbXVfcmVhZChldmVudCk7CisJCQl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgMCk7CisJCQlldmVudC0+aHcuaWR4ID0gMDsKKwkJfQorCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgUE1DcyBmb3IgYWxsIHRoZSBuZXcgYW5kIG1vdmVkIGV2ZW50cy4KKwkgKi8KKwljcHVody0+bl9saW1pdGVkID0gbl9saW0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9ldmVudHM7ICsraSkgeworCQlldmVudCA9IGNwdWh3LT5ldmVudFtpXTsKKwkJaWYgKGV2ZW50LT5ody5pZHgpCisJCQljb250aW51ZTsKKwkJaWR4ID0gaHdjX2luZGV4W2ldICsgMTsKKwkJaWYgKGlzX2xpbWl0ZWRfcG1jKGlkeCkpIHsKKwkJCWNwdWh3LT5saW1pdGVkX2NvdW50ZXJbbl9saW1dID0gZXZlbnQ7CisJCQljcHVody0+bGltaXRlZF9od2lkeFtuX2xpbV0gPSBpZHg7CisJCQkrK25fbGltOworCQkJY29udGludWU7CisJCX0KKwkJdmFsID0gMDsKKwkJaWYgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKSB7CisJCQlsZWZ0ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKKwkJCWlmIChsZWZ0IDwgMHg4MDAwMDAwMEwpCisJCQkJdmFsID0gMHg4MDAwMDAwMEwgLSBsZWZ0OworCQl9CisJCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJCWV2ZW50LT5ody5pZHggPSBpZHg7CisJCXdyaXRlX3BtYyhpZHgsIHZhbCk7CisJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwl9CisJY3B1aHctPm5fbGltaXRlZCA9IG5fbGltOworCWNwdWh3LT5tbWNyWzBdIHw9IE1NQ1IwX1BNWEUgfCBNTUNSMF9GQ0VDRTsKKworIG91dF9lbmFibGU6CisJbWIoKTsKKwl3cml0ZV9tbWNyMChjcHVodywgY3B1aHctPm1tY3JbMF0pOworCisJLyoKKwkgKiBFbmFibGUgaW5zdHJ1Y3Rpb24gc2FtcGxpbmcgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKGNwdWh3LT5tbWNyWzJdICYgTU1DUkFfU0FNUExFX0VOQUJMRSkgeworCQltYigpOworCQltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSk7CisJfQorCisgb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXAsIGludCBtYXhfY291bnQsCisJCQkgIHN0cnVjdCBwZXJmX2V2ZW50ICpjdHJzW10sIHU2NCAqZXZlbnRzLAorCQkJICB1bnNpZ25lZCBpbnQgKmZsYWdzKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGdyb3VwKSkgeworCQlpZiAobiA+PSBtYXhfY291bnQpCisJCQlyZXR1cm4gLTE7CisJCWN0cnNbbl0gPSBncm91cDsKKwkJZmxhZ3Nbbl0gPSBncm91cC0+aHcuZXZlbnRfYmFzZTsKKwkJZXZlbnRzW24rK10gPSBncm91cC0+aHcuY29uZmlnOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZ3JvdXAtPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkgJiYKKwkJICAgIGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX09GRikgeworCQkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJCXJldHVybiAtMTsKKwkJCWN0cnNbbl0gPSBldmVudDsKKwkJCWZsYWdzW25dID0gZXZlbnQtPmh3LmV2ZW50X2Jhc2U7CisJCQlldmVudHNbbisrXSA9IGV2ZW50LT5ody5jb25maWc7CisJCX0KKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSkKK3sKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKKwlldmVudC0+b25jcHUgPSBjcHU7CisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGV2ZW50LT5jdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CisJaWYgKGlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKKwkJZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KTsKK30KKworLyoKKyAqIENhbGxlZCB0byBlbmFibGUgYSB3aG9sZSBncm91cCBvZiBldmVudHMuCisgKiBSZXR1cm5zIDEgaWYgdGhlIGdyb3VwIHdhcyBlbmFibGVkLCBvciAtRUFHQUlOIGlmIGl0IGNvdWxkIG5vdCBiZS4KKyAqIEFzc3VtZXMgdGhlIGNhbGxlciBoYXMgZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgaGFzCisgKiBmcm96ZW4gdGhlIFBNVSB3aXRoIGh3X3BlcmZfc2F2ZV9kaXNhYmxlLgorICovCitpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAorCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OworCWxvbmcgaSwgbiwgbjA7CisJc3RydWN0IHBlcmZfZXZlbnQgKnN1YjsKKworCWlmICghcHBtdSkKKwkJcmV0dXJuIDA7CisJY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwluMCA9IGNwdWh3LT5uX2V2ZW50czsKKwluID0gY29sbGVjdF9ldmVudHMoZ3JvdXBfbGVhZGVyLCBwcG11LT5uX2NvdW50ZXIgLSBuMCwKKwkJCSAgICZjcHVody0+ZXZlbnRbbjBdLCAmY3B1aHctPmV2ZW50c1tuMF0sCisJCQkgICAmY3B1aHctPmZsYWdzW24wXSk7CisJaWYgKG4gPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKwlpZiAoY2hlY2tfZXhjbHVkZXMoY3B1aHctPmV2ZW50LCBjcHVody0+ZmxhZ3MsIG4wLCBuKSkKKwkJcmV0dXJuIC1FQUdBSU47CisJaSA9IHBvd2VyX2NoZWNrX2NvbnN0cmFpbnRzKGNwdWh3LCBjcHVody0+ZXZlbnRzLCBjcHVody0+ZmxhZ3MsIG4gKyBuMCk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKwljcHVody0+bl9ldmVudHMgPSBuMCArIG47CisJY3B1aHctPm5fYWRkZWQgKz0gbjsKKworCS8qCisJICogT0ssIHRoaXMgZ3JvdXAgY2FuIGdvIG9uOyB1cGRhdGUgZXZlbnQgc3RhdGVzIGV0Yy4sCisJICogYW5kIGVuYWJsZSBhbnkgc29mdHdhcmUgZXZlbnRzCisJICovCisJZm9yIChpID0gbjA7IGkgPCBuMCArIG47ICsraSkKKwkJY3B1aHctPmV2ZW50W2ldLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW2ldOworCWNwdWN0eC0+YWN0aXZlX29uY3B1ICs9IG47CisJbiA9IDE7CisJZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyLCBjcHUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChzdWItPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKSB7CisJCQlldmVudF9zY2hlZF9pbihzdWIsIGNwdSk7CisJCQkrK247CisJCX0KKwl9CisJY3R4LT5ucl9hY3RpdmUgKz0gbjsKKworCXJldHVybiAxOworfQorCisvKgorICogQWRkIGEgZXZlbnQgdG8gdGhlIFBNVS4KKyAqIElmIGFsbCBldmVudHMgYXJlIG5vdCBhbHJlYWR5IGZyb3plbiwgdGhlbiB3ZSBkaXNhYmxlIGFuZAorICogcmUtZW5hYmxlIHRoZSBQTVUgaW4gb3JkZXIgdG8gZ2V0IGh3X3BlcmZfZW5hYmxlIHRvIGRvIHRoZQorICogYWN0dWFsIHdvcmsgb2YgcmVjb25maWd1cmluZyB0aGUgUE1VLgorICovCitzdGF0aWMgaW50IHBvd2VyX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuMDsKKwlpbnQgcmV0ID0gLUVBR0FJTjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwZXJmX2Rpc2FibGUoKTsKKworCS8qCisJICogQWRkIHRoZSBldmVudCB0byB0aGUgbGlzdCAoaWYgdGhlcmUgaXMgcm9vbSkKKwkgKiBhbmQgY2hlY2sgd2hldGhlciB0aGUgdG90YWwgc2V0IGlzIHN0aWxsIGZlYXNpYmxlLgorCSAqLworCWNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJbjAgPSBjcHVody0+bl9ldmVudHM7CisJaWYgKG4wID49IHBwbXUtPm5fY291bnRlcikKKwkJZ290byBvdXQ7CisJY3B1aHctPmV2ZW50W24wXSA9IGV2ZW50OworCWNwdWh3LT5ldmVudHNbbjBdID0gZXZlbnQtPmh3LmNvbmZpZzsKKwljcHVody0+ZmxhZ3NbbjBdID0gZXZlbnQtPmh3LmV2ZW50X2Jhc2U7CisJaWYgKGNoZWNrX2V4Y2x1ZGVzKGNwdWh3LT5ldmVudCwgY3B1aHctPmZsYWdzLCBuMCwgMSkpCisJCWdvdG8gb3V0OworCWlmIChwb3dlcl9jaGVja19jb25zdHJhaW50cyhjcHVodywgY3B1aHctPmV2ZW50cywgY3B1aHctPmZsYWdzLCBuMCArIDEpKQorCQlnb3RvIG91dDsKKworCWV2ZW50LT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW24wXTsKKwkrK2NwdWh3LT5uX2V2ZW50czsKKwkrK2NwdWh3LT5uX2FkZGVkOworCisJcmV0ID0gMDsKKyBvdXQ6CisJcGVyZl9lbmFibGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlbW92ZSBhIGV2ZW50IGZyb20gdGhlIFBNVS4KKyAqLworc3RhdGljIHZvaWQgcG93ZXJfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKKwlsb25nIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwZXJmX2Rpc2FibGUoKTsKKworCXBvd2VyX3BtdV9yZWFkKGV2ZW50KTsKKworCWNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2V2ZW50czsgKytpKSB7CisJCWlmIChldmVudCA9PSBjcHVody0+ZXZlbnRbaV0pIHsKKwkJCXdoaWxlICgrK2kgPCBjcHVody0+bl9ldmVudHMpCisJCQkJY3B1aHctPmV2ZW50W2ktMV0gPSBjcHVody0+ZXZlbnRbaV07CisJCQktLWNwdWh3LT5uX2V2ZW50czsKKwkJCXBwbXUtPmRpc2FibGVfcG1jKGV2ZW50LT5ody5pZHggLSAxLCBjcHVody0+bW1jcik7CisJCQlpZiAoZXZlbnQtPmh3LmlkeCkgeworCQkJCXdyaXRlX3BtYyhldmVudC0+aHcuaWR4LCAwKTsKKwkJCQlldmVudC0+aHcuaWR4ID0gMDsKKwkJCX0KKwkJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9saW1pdGVkOyArK2kpCisJCWlmIChldmVudCA9PSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldKQorCQkJYnJlYWs7CisJaWYgKGkgPCBjcHVody0+bl9saW1pdGVkKSB7CisJCXdoaWxlICgrK2kgPCBjcHVody0+bl9saW1pdGVkKSB7CisJCQljcHVody0+bGltaXRlZF9jb3VudGVyW2ktMV0gPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOworCQkJY3B1aHctPmxpbWl0ZWRfaHdpZHhbaS0xXSA9IGNwdWh3LT5saW1pdGVkX2h3aWR4W2ldOworCQl9CisJCS0tY3B1aHctPm5fbGltaXRlZDsKKwl9CisJaWYgKGNwdWh3LT5uX2V2ZW50cyA9PSAwKSB7CisJCS8qIGRpc2FibGUgZXhjZXB0aW9ucyBpZiBubyBldmVudHMgYXJlIHJ1bm5pbmcgKi8KKwkJY3B1aHctPm1tY3JbMF0gJj0gfihNTUNSMF9QTVhFIHwgTU1DUjBfRkNFQ0UpOworCX0KKworCXBlcmZfZW5hYmxlKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogUmUtZW5hYmxlIGludGVycnVwdHMgb24gYSBldmVudCBhZnRlciB0aGV5IHdlcmUgdGhyb3R0bGVkCisgKiBiZWNhdXNlIHRoZXkgd2VyZSBjb21pbmcgdG9vIGZhc3QuCisgKi8KK3N0YXRpYyB2b2lkIHBvd2VyX3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzNjQgdmFsLCBsZWZ0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWV2ZW50LT5ody5pZHggfHwgIWV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKQorCQlyZXR1cm47CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXBlcmZfZGlzYWJsZSgpOworCXBvd2VyX3BtdV9yZWFkKGV2ZW50KTsKKwlsZWZ0ID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CisJZXZlbnQtPmh3Lmxhc3RfcGVyaW9kID0gbGVmdDsKKwl2YWwgPSAwOworCWlmIChsZWZ0IDwgMHg4MDAwMDAwMEwpCisJCXZhbCA9IDB4ODAwMDAwMDBMIC0gbGVmdDsKKwl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKKwlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CisJcGVyZl9lbmFibGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0cnVjdCBwbXUgcG93ZXJfcG11ID0geworCS5lbmFibGUJCT0gcG93ZXJfcG11X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHBvd2VyX3BtdV9kaXNhYmxlLAorCS5yZWFkCQk9IHBvd2VyX3BtdV9yZWFkLAorCS51bnRocm90dGxlCT0gcG93ZXJfcG11X3VudGhyb3R0bGUsCit9OworCisvKgorICogUmV0dXJuIDEgaWYgd2UgbWlnaHQgYmUgYWJsZSB0byBwdXQgZXZlbnQgb24gYSBsaW1pdGVkIFBNQywKKyAqIG9yIDAgaWYgbm90LgorICogQSBldmVudCBjYW4gb25seSBnbyBvbiBhIGxpbWl0ZWQgUE1DIGlmIGl0IGNvdW50cyBzb21ldGhpbmcKKyAqIHRoYXQgYSBsaW1pdGVkIFBNQyBjYW4gY291bnQsIGRvZXNuJ3QgcmVxdWlyZSBpbnRlcnJ1cHRzLCBhbmQKKyAqIGRvZXNuJ3QgZXhjbHVkZSBhbnkgcHJvY2Vzc29yIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgY2FuX2dvX29uX2xpbWl0ZWRfcG1jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IGV2LAorCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IG47CisJdTY0IGFsdFtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKKworCWlmIChldmVudC0+YXR0ci5leGNsdWRlX3VzZXIKKwkgICAgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwKKwkgICAgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV9odgorCSAgICB8fCBldmVudC0+YXR0ci5zYW1wbGVfcGVyaW9kKQorCQlyZXR1cm4gMDsKKworCWlmIChwcG11LT5saW1pdGVkX3BtY19ldmVudChldikpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBUaGUgcmVxdWVzdGVkIGV2ZW50X2lkIGlzbid0IG9uIGEgbGltaXRlZCBQTUMgYWxyZWFkeTsKKwkgKiBzZWUgaWYgYW55IGFsdGVybmF0aXZlIGNvZGUgZ29lcyBvbiBhIGxpbWl0ZWQgUE1DLgorCSAqLworCWlmICghcHBtdS0+Z2V0X2FsdGVybmF0aXZlcykKKwkJcmV0dXJuIDA7CisKKwlmbGFncyB8PSBQUE1VX0xJTUlURURfUE1DX09LIHwgUFBNVV9MSU1JVEVEX1BNQ19SRVFEOworCW4gPSBwcG11LT5nZXRfYWx0ZXJuYXRpdmVzKGV2LCBmbGFncywgYWx0KTsKKworCXJldHVybiBuID4gMDsKK30KKworLyoKKyAqIEZpbmQgYW4gYWx0ZXJuYXRpdmUgZXZlbnRfaWQgdGhhdCBnb2VzIG9uIGEgbm9ybWFsIFBNQywgaWYgcG9zc2libGUsCisgKiBhbmQgcmV0dXJuIHRoZSBldmVudF9pZCBjb2RlLCBvciAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggYWx0ZXJuYXRpdmUuCisgKiAoTm90ZTogZXZlbnRfaWQgY29kZSAwIGlzICJkb24ndCBjb3VudCIgb24gYWxsIG1hY2hpbmVzLikKKyAqLworc3RhdGljIHU2NCBub3JtYWxfcG1jX2FsdGVybmF0aXZlKHU2NCBldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1NjQgYWx0W01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOworCWludCBuOworCisJZmxhZ3MgJj0gfihQUE1VX0xJTUlURURfUE1DX09LIHwgUFBNVV9MSU1JVEVEX1BNQ19SRVFEKTsKKwluID0gcHBtdS0+Z2V0X2FsdGVybmF0aXZlcyhldiwgZmxhZ3MsIGFsdCk7CisJaWYgKCFuKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYWx0WzBdOworfQorCisvKiBOdW1iZXIgb2YgcGVyZl9ldmVudHMgY291bnRpbmcgaGFyZHdhcmUgZXZlbnRzICovCitzdGF0aWMgYXRvbWljX3QgbnVtX2V2ZW50czsKKy8qIFVzZWQgdG8gYXZvaWQgcmFjZXMgaW4gY2FsbGluZyByZXNlcnZlL3JlbGVhc2VfcG1jX2hhcmR3YXJlICovCitzdGF0aWMgREVGSU5FX01VVEVYKHBtY19yZXNlcnZlX211dGV4KTsKKworLyoKKyAqIFJlbGVhc2UgdGhlIFBNVSBpZiB0aGlzIGlzIHRoZSBsYXN0IHBlcmZfZXZlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmbnVtX2V2ZW50cywgLTEsIDEpKSB7CisJCW11dGV4X2xvY2soJnBtY19yZXNlcnZlX211dGV4KTsKKwkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZudW1fZXZlbnRzKSA9PSAwKQorCQkJcmVsZWFzZV9wbWNfaGFyZHdhcmUoKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CisJfQorfQorCisvKgorICogVHJhbnNsYXRlIGEgZ2VuZXJpYyBjYWNoZSBldmVudF9pZCBjb25maWcgdG8gYSByYXcgZXZlbnRfaWQgY29kZS4KKyAqLworc3RhdGljIGludCBod19wZXJmX2NhY2hlX2V2ZW50KHU2NCBjb25maWcsIHU2NCAqZXZlbnRwKQoreworCXVuc2lnbmVkIGxvbmcgdHlwZSwgb3AsIHJlc3VsdDsKKwlpbnQgZXY7CisKKwlpZiAoIXBwbXUtPmNhY2hlX2V2ZW50cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB1bnBhY2sgY29uZmlnICovCisJdHlwZSA9IGNvbmZpZyAmIDB4ZmY7CisJb3AgPSAoY29uZmlnID4+IDgpICYgMHhmZjsKKwlyZXN1bHQgPSAoY29uZmlnID4+IDE2KSAmIDB4ZmY7CisKKwlpZiAodHlwZSA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCB8fAorCSAgICBvcCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCB8fAorCSAgICByZXN1bHQgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWV2ID0gKCpwcG11LT5jYWNoZV9ldmVudHMpW3R5cGVdW29wXVtyZXN1bHRdOworCWlmIChldiA9PSAwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKGV2ID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqZXZlbnRwID0gZXY7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJdTY0IGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBlcmZfZXZlbnQgKmN0cnNbTUFYX0hXRVZFTlRTXTsKKwl1NjQgZXZlbnRzW01BWF9IV0VWRU5UU107CisJdW5zaWduZWQgaW50IGNmbGFnc1tNQVhfSFdFVkVOVFNdOworCWludCBuOworCWludCBlcnI7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OworCisJaWYgKCFwcG11KQorCQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOworCXN3aXRjaCAoZXZlbnQtPmF0dHIudHlwZSkgeworCWNhc2UgUEVSRl9UWVBFX0hBUkRXQVJFOgorCQlldiA9IGV2ZW50LT5hdHRyLmNvbmZpZzsKKwkJaWYgKGV2ID49IHBwbXUtPm5fZ2VuZXJpYyB8fCBwcG11LT5nZW5lcmljX2V2ZW50c1tldl0gPT0gMCkKKwkJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKKwkJZXYgPSBwcG11LT5nZW5lcmljX2V2ZW50c1tldl07CisJCWJyZWFrOworCWNhc2UgUEVSRl9UWVBFX0hXX0NBQ0hFOgorCQllcnIgPSBod19wZXJmX2NhY2hlX2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZywgJmV2KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBFUlJfUFRSKGVycik7CisJCWJyZWFrOworCWNhc2UgUEVSRl9UWVBFX1JBVzoKKwkJZXYgPSBldmVudC0+YXR0ci5jb25maWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwlldmVudC0+aHcuY29uZmlnX2Jhc2UgPSBldjsKKwlldmVudC0+aHcuaWR4ID0gMDsKKworCS8qCisJICogSWYgd2UgYXJlIG5vdCBydW5uaW5nIG9uIGEgaHlwZXJ2aXNvciwgZm9yY2UgdGhlCisJICogZXhjbHVkZV9odiBiaXQgdG8gMCBzbyB0aGF0IHdlIGRvbid0IGNhcmUgd2hhdAorCSAqIHRoZSB1c2VyIHNldCBpdCB0by4KKwkgKi8KKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCWV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHYgPSAwOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgcGVyLXRhc2sgZXZlbnQsIHRoZW4gd2UgY2FuIHVzZQorCSAqIFBNX1JVTl8qIGV2ZW50cyBpbnRlcmNoYW5nZWFibHkgd2l0aCB0aGVpciBub24gUlVOXyoKKwkgKiBlcXVpdmFsZW50cywgZS5nLiBQTV9SVU5fQ1lDIGluc3RlYWQgb2YgUE1fQ1lDLgorCSAqIFhYWCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIHRhc2sgaXMgYW4gaWRsZSB0YXNrLgorCSAqLworCWZsYWdzID0gMDsKKwlpZiAoZXZlbnQtPmN0eC0+dGFzaykKKwkJZmxhZ3MgfD0gUFBNVV9PTkxZX0NPVU5UX1JVTjsKKworCS8qCisJICogSWYgdGhpcyBtYWNoaW5lIGhhcyBsaW1pdGVkIGV2ZW50cywgY2hlY2sgd2hldGhlciB0aGlzCisJICogZXZlbnRfaWQgY291bGQgZ28gb24gYSBsaW1pdGVkIGV2ZW50LgorCSAqLworCWlmIChwcG11LT5mbGFncyAmIFBQTVVfTElNSVRFRF9QTUM1XzYpIHsKKwkJaWYgKGNhbl9nb19vbl9saW1pdGVkX3BtYyhldmVudCwgZXYsIGZsYWdzKSkgeworCQkJZmxhZ3MgfD0gUFBNVV9MSU1JVEVEX1BNQ19PSzsKKwkJfSBlbHNlIGlmIChwcG11LT5saW1pdGVkX3BtY19ldmVudChldikpIHsKKwkJCS8qCisJCQkgKiBUaGUgcmVxdWVzdGVkIGV2ZW50X2lkIGlzIG9uIGEgbGltaXRlZCBQTUMsCisJCQkgKiBidXQgd2UgY2FuJ3QgdXNlIGEgbGltaXRlZCBQTUM7IHNlZSBpZiBhbnkKKwkJCSAqIGFsdGVybmF0aXZlIGdvZXMgb24gYSBub3JtYWwgUE1DLgorCQkJICovCisJCQlldiA9IG5vcm1hbF9wbWNfYWx0ZXJuYXRpdmUoZXYsIGZsYWdzKTsKKwkJCWlmICghZXYpCisJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgaW4gYSBncm91cCwgY2hlY2sgaWYgaXQgY2FuIGdvIG9uIHdpdGggYWxsIHRoZQorCSAqIG90aGVyIGhhcmR3YXJlIGV2ZW50cyBpbiB0aGUgZ3JvdXAuICBXZSBhc3N1bWUgdGhlIGV2ZW50CisJICogaGFzbid0IGJlZW4gbGlua2VkIGludG8gaXRzIGxlYWRlcidzIHNpYmxpbmcgbGlzdCBhdCB0aGlzIHBvaW50LgorCSAqLworCW4gPSAwOworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CisJCW4gPSBjb2xsZWN0X2V2ZW50cyhldmVudC0+Z3JvdXBfbGVhZGVyLCBwcG11LT5uX2NvdW50ZXIgLSAxLAorCQkJCSAgIGN0cnMsIGV2ZW50cywgY2ZsYWdzKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCWV2ZW50c1tuXSA9IGV2OworCWN0cnNbbl0gPSBldmVudDsKKwljZmxhZ3Nbbl0gPSBmbGFnczsKKwlpZiAoY2hlY2tfZXhjbHVkZXMoY3RycywgY2ZsYWdzLCBuLCAxKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljcHVodyA9ICZnZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwllcnIgPSBwb3dlcl9jaGVja19jb25zdHJhaW50cyhjcHVodywgZXZlbnRzLCBjZmxhZ3MsIG4gKyAxKTsKKwlwdXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWV2ZW50LT5ody5jb25maWcgPSBldmVudHNbbl07CisJZXZlbnQtPmh3LmV2ZW50X2Jhc2UgPSBjZmxhZ3Nbbl07CisJZXZlbnQtPmh3Lmxhc3RfcGVyaW9kID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CisJYXRvbWljNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGV2ZW50LT5ody5sYXN0X3BlcmlvZCk7CisKKwkvKgorCSAqIFNlZSBpZiB3ZSBuZWVkIHRvIHJlc2VydmUgdGhlIFBNVS4KKwkgKiBJZiBubyBldmVudHMgYXJlIGN1cnJlbnRseSBpbiB1c2UsIHRoZW4gd2UgaGF2ZSB0byB0YWtlIGEKKwkgKiBtdXRleCB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCByYWNlIHdpdGggYW5vdGhlciB0YXNrIGRvaW5nCisJICogcmVzZXJ2ZV9wbWNfaGFyZHdhcmUgb3IgcmVsZWFzZV9wbWNfaGFyZHdhcmUuCisJICovCisJZXJyID0gMDsKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJm51bV9ldmVudHMpKSB7CisJCW11dGV4X2xvY2soJnBtY19yZXNlcnZlX211dGV4KTsKKwkJaWYgKGF0b21pY19yZWFkKCZudW1fZXZlbnRzKSA9PSAwICYmCisJCSAgICByZXNlcnZlX3BtY19oYXJkd2FyZShwZXJmX2V2ZW50X2ludGVycnVwdCkpCisJCQllcnIgPSAtRUJVU1k7CisJCWVsc2UKKwkJCWF0b21pY19pbmMoJm51bV9ldmVudHMpOworCQltdXRleF91bmxvY2soJnBtY19yZXNlcnZlX211dGV4KTsKKwl9CisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCXJldHVybiAmcG93ZXJfcG11OworfQorCisvKgorICogQSBjb3VudGVyIGhhcyBvdmVyZmxvd2VkOyB1cGRhdGUgaXRzIGNvdW50IGFuZCByZWNvcmQKKyAqIHRoaW5ncyBpZiByZXF1ZXN0ZWQuICBOb3RlIHRoYXQgaW50ZXJydXB0cyBhcmUgaGFyZC1kaXNhYmxlZAorICogaGVyZSBzbyB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiBiZWluZyBpbnRlcnJ1cHRlZC4KKyAqLworc3RhdGljIHZvaWQgcmVjb3JkX2FuZF9yZXN0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBubWkpCit7CisJdTY0IHBlcmlvZCA9IGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kOworCXM2NCBwcmV2LCBkZWx0YSwgbGVmdDsKKwlpbnQgcmVjb3JkID0gMDsKKworCS8qIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaW50ZXJydXB0cyBoZXJlICovCisJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCisJLyoKKwkgKiBTZWUgaWYgdGhlIHRvdGFsIHBlcmlvZCBmb3IgdGhpcyBldmVudCBoYXMgZXhwaXJlZCwKKwkgKiBhbmQgdXBkYXRlIGZvciB0aGUgbmV4dCBwZXJpb2QuCisJICovCisJdmFsID0gMDsKKwlsZWZ0ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KSAtIGRlbHRhOworCWlmIChwZXJpb2QpIHsKKwkJaWYgKGxlZnQgPD0gMCkgeworCQkJbGVmdCArPSBwZXJpb2Q7CisJCQlpZiAobGVmdCA8PSAwKQorCQkJCWxlZnQgPSBwZXJpb2Q7CisJCQlyZWNvcmQgPSAxOworCQl9CisJCWlmIChsZWZ0IDwgMHg4MDAwMDAwMExMKQorCQkJdmFsID0gMHg4MDAwMDAwMExMIC0gbGVmdDsKKwl9CisKKwkvKgorCSAqIEZpbmFsbHkgcmVjb3JkIGRhdGEgaWYgcmVxdWVzdGVkLgorCSAqLworCWlmIChyZWNvcmQpIHsKKwkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YSA9IHsKKwkJCS5hZGRyCT0gMCwKKwkJCS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2QsCisJCX07CisKKwkJaWYgKGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQUREUikKKwkJCXBlcmZfZ2V0X2RhdGFfYWRkcihyZWdzLCAmZGF0YS5hZGRyKTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgbm1pLCAmZGF0YSwgcmVncykpIHsKKwkJCS8qCisJCQkgKiBJbnRlcnJ1cHRzIGFyZSBjb21pbmcgdG9vIGZhc3QgLSB0aHJvdHRsZSB0aGVtCisJCQkgKiBieSBzZXR0aW5nIHRoZSBldmVudCB0byAwLCBzbyBpdCB3aWxsIGJlCisJCQkgKiBhdCBsZWFzdCAyXjMwIGN5Y2xlcyB1bnRpbCB0aGUgbmV4dCBpbnRlcnJ1cHQKKwkJCSAqIChhc3N1bWluZyBlYWNoIGV2ZW50IGNvdW50cyBhdCBtb3N0IDIgY291bnRzCisJCQkgKiBwZXIgY3ljbGUpLgorCQkJICovCisJCQl2YWwgPSAwOworCQkJbGVmdCA9IH4wVUxMID4+IDE7CisJCX0KKwl9CisKKwl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKKwlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBnZW5lcmljIGNvZGUgdG8gZ2V0IHRoZSBtaXNjIGZsYWdzIChpLmUuIHByb2Nlc3NvciBtb2RlKQorICogZm9yIGFuIGV2ZW50X2lkLgorICovCit1bnNpZ25lZCBsb25nIHBlcmZfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgZmxhZ3MgPSBwZXJmX2dldF9taXNjX2ZsYWdzKHJlZ3MpOworCisJaWYgKGZsYWdzKQorCQlyZXR1cm4gZmxhZ3M7CisJcmV0dXJuIHVzZXJfbW9kZShyZWdzKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6CisJCVBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworfQorCisvKgorICogQ2FsbGVkIGZyb20gZ2VuZXJpYyBjb2RlIHRvIGdldCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlcgorICogZm9yIGFuIGV2ZW50X2lkLgorICovCit1bnNpZ25lZCBsb25nIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGlwOworCisJaWYgKFRSQVAocmVncykgIT0gMHhmMDApCisJCXJldHVybiByZWdzLT5uaXA7CS8qIG5vdCBhIFBNVSBpbnRlcnJ1cHQgKi8KKworCWlwID0gbWZzcHIoU1BSTl9TSUFSKSArIHBlcmZfaXBfYWRqdXN0KHJlZ3MpOworCXJldHVybiBpcDsKK30KKworLyoKKyAqIFBlcmZvcm1hbmNlIG1vbml0b3IgaW50ZXJydXB0IHN0dWZmCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZm91bmQgPSAwOworCWludCBubWk7CisKKwlpZiAoY3B1aHctPm5fbGltaXRlZCkKKwkJZnJlZXplX2xpbWl0ZWRfY291bnRlcnMoY3B1aHcsIG1mc3ByKFNQUk5fUE1DNSksCisJCQkJCW1mc3ByKFNQUk5fUE1DNikpOworCisJcGVyZl9yZWFkX3JlZ3MocmVncyk7CisKKwlubWkgPSBwZXJmX2ludHJfaXNfbm1pKHJlZ3MpOworCWlmIChubWkpCisJCW5taV9lbnRlcigpOworCWVsc2UKKwkJaXJxX2VudGVyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fZXZlbnRzOyArK2kpIHsKKwkJZXZlbnQgPSBjcHVody0+ZXZlbnRbaV07CisJCWlmICghZXZlbnQtPmh3LmlkeCB8fCBpc19saW1pdGVkX3BtYyhldmVudC0+aHcuaWR4KSkKKwkJCWNvbnRpbnVlOworCQl2YWwgPSByZWFkX3BtYyhldmVudC0+aHcuaWR4KTsKKwkJaWYgKChpbnQpdmFsIDwgMCkgeworCQkJLyogZXZlbnQgaGFzIG92ZXJmbG93ZWQgKi8KKwkJCWZvdW5kID0gMTsKKwkJCXJlY29yZF9hbmRfcmVzdGFydChldmVudCwgdmFsLCByZWdzLCBubWkpOworCQl9CisJfQorCisJLyoKKwkgKiBJbiBjYXNlIHdlIGRpZG4ndCBmaW5kIGFuZCByZXNldCB0aGUgZXZlbnQgdGhhdCBjYXVzZWQKKwkgKiB0aGUgaW50ZXJydXB0LCBzY2FuIGFsbCBldmVudHMgYW5kIHJlc2V0IGFueSB0aGF0IGFyZQorCSAqIG5lZ2F0aXZlLCB0byBhdm9pZCBnZXR0aW5nIGNvbnRpbnVhbCBpbnRlcnJ1cHRzLgorCSAqIEFueSB0aGF0IHdlIHByb2Nlc3NlZCBpbiB0aGUgcHJldmlvdXMgbG9vcCB3aWxsIG5vdCBiZSBuZWdhdGl2ZS4KKwkgKi8KKwlpZiAoIWZvdW5kKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwcG11LT5uX2NvdW50ZXI7ICsraSkgeworCQkJaWYgKGlzX2xpbWl0ZWRfcG1jKGkgKyAxKSkKKwkJCQljb250aW51ZTsKKwkJCXZhbCA9IHJlYWRfcG1jKGkgKyAxKTsKKwkJCWlmICgoaW50KXZhbCA8IDApCisJCQkJd3JpdGVfcG1jKGkgKyAxLCAwKTsKKwkJfQorCX0KKworCS8qCisJICogUmVzZXQgTU1DUjAgdG8gaXRzIG5vcm1hbCB2YWx1ZS4gIFRoaXMgd2lsbCBzZXQgUE1YRSBhbmQKKwkgKiBjbGVhciBGQyAoZnJlZXplIGNvdW50ZXJzKSBhbmQgUE1BTyAocGVyZiBtb24gYWxlcnQgb2NjdXJyZWQpCisJICogYW5kIHRodXMgYWxsb3cgaW50ZXJydXB0cyB0byBvY2N1ciBhZ2Fpbi4KKwkgKiBYWFggbWlnaHQgd2FudCB0byB1c2UgTVNSLlBNIHRvIGtlZXAgdGhlIGV2ZW50cyBmcm96ZW4gdW50aWwKKwkgKiB3ZSBnZXQgYmFjayBvdXQgb2YgdGhpcyBpbnRlcnJ1cHQuCisJICovCisJd3JpdGVfbW1jcjAoY3B1aHcsIGNwdWh3LT5tbWNyWzBdKTsKKworCWlmIChubWkpCisJCW5taV9leGl0KCk7CisJZWxzZQorCQlpcnFfZXhpdCgpOworfQorCit2b2lkIGh3X3BlcmZfZXZlbnRfc2V0dXAoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHcgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpOworCisJaWYgKCFwcG11KQorCQlyZXR1cm47CisJbWVtc2V0KGNwdWh3LCAwLCBzaXplb2YoKmNwdWh3KSk7CisJY3B1aHctPm1tY3JbMF0gPSBNTUNSMF9GQzsKK30KKworaW50IHJlZ2lzdGVyX3Bvd2VyX3BtdShzdHJ1Y3QgcG93ZXJfcG11ICpwbXUpCit7CisJaWYgKHBwbXUpCisJCXJldHVybiAtRUJVU1k7CQkvKiBzb21ldGhpbmcncyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKworCXBwbXUgPSBwbXU7CisJcHJfaW5mbygiJXMgcGVyZm9ybWFuY2UgbW9uaXRvciBoYXJkd2FyZSBzdXBwb3J0IHJlZ2lzdGVyZWRcbiIsCisJCXBtdS0+bmFtZSk7CisKKyNpZmRlZiBNU1JfSFYKKwkvKgorCSAqIFVzZSBGQ0hWIHRvIGlnbm9yZSBrZXJuZWwgZXZlbnRzIGlmIE1TUi5IViBpcyBzZXQuCisJICovCisJaWYgKG1mbXNyKCkgJiBNU1JfSFYpCisJCWZyZWV6ZV9ldmVudHNfa2VybmVsID0gTU1DUjBfRkNIVjsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjQtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYwppbmRleCAzYzkwYTNkLi4yYTM2MWNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYwpAQCAtOSw3ICs5LDcgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jCmluZGV4IDMxOTE4YWYuLjBmNGMxYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1Ky1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNSstcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKaW5kZXggODY3ZjZmNi4uYzM1MWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI2LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKaW5kZXggZmEyMTg5MC4uY2EzOTliYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI3LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMKaW5kZXggMDE4ZDA5NC4uMjhhNGRhYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKaW5kZXggNzVkY2NiNy4uNDc5NTc0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggMDJmZWQyNy4uMWQ1NTcwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIHsKIH0KIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3AgPSB7Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKIAkuc3RhcnQgPWNfc3RhcnQsCiAJLm5leHQgPQljX25leHQsCiAJLnN0b3AgPQljX3N0b3AsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDQ2NWU0OTguLjkyZGM4NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC01Myw3ICs1Myw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xOTMsNiArMTkzLDggQEAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGNwdXRpbWVfbGFzdF9kZWx0YSk7CiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhKTsKIAorY3B1dGltZV90IGNwdXRpbWVfb25lX2ppZmZ5OworCiBzdGF0aWMgdm9pZCBjYWxjX2NwdXRpbWVfZmFjdG9ycyh2b2lkKQogewogCXN0cnVjdCBkaXZfcmVzdWx0IHJlczsKQEAgLTUwMSw2ICs1MDMsNyBAQAogCQkJCXRiX3RvX3hzID0gZGl2cmVzLnJlc3VsdF9sb3c7CiAJCQkJdmRzb19kYXRhLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKIAkJCQl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7CisJCQkJc2V0dXBfY3B1dGltZV9vbmVfamlmZnkoKTsKIAkJCX0KIAkJCWVsc2UgewogCQkJCXByaW50ayggIlRpdGFuIHJlY2FsaWJyYXRlOiBGQUlMRUQgKGRpZmZlcmVuY2UgPiA0IHBlcmNlbnQpXG4iCkBAIC01MjcsMjUgKzUzMCwyNSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfUEVSRl9DT1VOVEVSUykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCi1ERUZJTkVfUEVSX0NQVSh1OCwgcGVyZl9jb3VudGVyX3BlbmRpbmcpOworI2lmIGRlZmluZWQoQ09ORklHX1BFUkZfRVZFTlRTKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKK0RFRklORV9QRVJfQ1BVKHU4LCBwZXJmX2V2ZW50X3BlbmRpbmcpOwogCi12b2lkIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKQordm9pZCBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpCiB7Ci0JZ2V0X2NwdV92YXIocGVyZl9jb3VudGVyX3BlbmRpbmcpID0gMTsKKwlnZXRfY3B1X3ZhcihwZXJmX2V2ZW50X3BlbmRpbmcpID0gMTsKIAlzZXRfZGVjKDEpOwotCXB1dF9jcHVfdmFyKHBlcmZfY291bnRlcl9wZW5kaW5nKTsKKwlwdXRfY3B1X3ZhcihwZXJmX2V2ZW50X3BlbmRpbmcpOwogfQogCi0jZGVmaW5lIHRlc3RfcGVyZl9jb3VudGVyX3BlbmRpbmcoKQlfX2dldF9jcHVfdmFyKHBlcmZfY291bnRlcl9wZW5kaW5nKQotI2RlZmluZSBjbGVhcl9wZXJmX2NvdW50ZXJfcGVuZGluZygpCV9fZ2V0X2NwdV92YXIocGVyZl9jb3VudGVyX3BlbmRpbmcpID0gMAorI2RlZmluZSB0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZygpCV9fZ2V0X2NwdV92YXIocGVyZl9ldmVudF9wZW5kaW5nKQorI2RlZmluZSBjbGVhcl9wZXJmX2V2ZW50X3BlbmRpbmcoKQlfX2dldF9jcHVfdmFyKHBlcmZfZXZlbnRfcGVuZGluZykgPSAwCiAKLSNlbHNlICAvKiBDT05GSUdfUEVSRl9DT1VOVEVSUyAmJiBDT05GSUdfUFBDMzIgKi8KKyNlbHNlICAvKiBDT05GSUdfUEVSRl9FVkVOVFMgJiYgQ09ORklHX1BQQzMyICovCiAKLSNkZWZpbmUgdGVzdF9wZXJmX2NvdW50ZXJfcGVuZGluZygpCTAKLSNkZWZpbmUgY2xlYXJfcGVyZl9jb3VudGVyX3BlbmRpbmcoKQorI2RlZmluZSB0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZygpCTAKKyNkZWZpbmUgY2xlYXJfcGVyZl9ldmVudF9wZW5kaW5nKCkKIAotI2VuZGlmIC8qIENPTkZJR19QRVJGX0NPVU5URVJTICYmIENPTkZJR19QUEMzMiAqLworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAmJiBDT05GSUdfUFBDMzIgKi8KIAogLyoKICAqIEZvciBpU2VyaWVzIHNoYXJlZCBwcm9jZXNzb3JzLCB3ZSBoYXZlIHRvIGxldCB0aGUgaHlwZXJ2aXNvcgpAQCAtNTczLDkgKzU3Niw5IEBACiAJc2V0X2RlYyhERUNSRU1FTlRFUl9NQVgpOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCi0JaWYgKHRlc3RfcGVyZl9jb3VudGVyX3BlbmRpbmcoKSkgewotCQljbGVhcl9wZXJmX2NvdW50ZXJfcGVuZGluZygpOwotCQlwZXJmX2NvdW50ZXJfZG9fcGVuZGluZygpOworCWlmICh0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZygpKSB7CisJCWNsZWFyX3BlcmZfZXZlbnRfcGVuZGluZygpOworCQlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKIAl9CiAJaWYgKGF0b21pY19yZWFkKCZwcGNfbl9sb3N0X2ludGVycnVwdHMpICE9IDApCiAJCWRvX0lSUShyZWdzKTsKQEAgLTk2MCw2ICs5NjMsNyBAQAogCXRiX3RpY2tzX3Blcl91c2VjID0gcHBjX3RiX2ZyZXEgLyAxMDAwMDAwOwogCXRiX3RvX3VzID0gbXVsaHd1X3NjYWxlX2ZhY3RvcihwcGNfdGJfZnJlcSwgMTAwMDAwMCk7CiAJY2FsY19jcHV0aW1lX2ZhY3RvcnMoKTsKKwlzZXR1cF9jcHV0aW1lX29uZV9qaWZmeSgpOwogCiAJLyoKIAkgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBlYWNoIHRpY2sgaW4gbnMuICBJdCB3aWxsIG5vdCBiZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwppbmRleCBhY2I3NGExLi5iNGIxNjdiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiB1ZGJnIGZvciBmb3IgTlMxNjU1MCBjb21wYXRhYmxlIHNlcmlhbCBwb3J0cworICogdWRiZyBmb3IgTlMxNjU1MCBjb21wYXRhYmxlIHNlcmlhbCBwb3J0cwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFBQQyA2NCBUZWFtLCBJQk0gQ29ycAogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggODMwYmVmMC4uZTdkYWU4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTE3MSw3ICsxNzEsNyBAQAogCQlkaWUoIldlaXJkIHBhZ2UgZmF1bHQiLCByZWdzLCBTSUdTRUdWKTsKIAl9CiAKLQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyZXNzKTsKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOwogCiAJLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCiAJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4gdGhlCkBAIC0zMTIsNyArMzEyLDcgQEAKIAl9CiAJaWYgKHJldCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCWN1cnJlbnQtPm1hal9mbHQrKzsKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsCiAJCQkJICAgICByZWdzLCBhZGRyZXNzKTsKICNpZmRlZiBDT05GSUdfUFBDX1NNTFBBUgogCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9DTU8pKSB7CkBAIC0zMjMsNyArMzIzLDcgQEAKICNlbmRpZgogCX0gZWxzZSB7CiAJCWN1cnJlbnQtPm1pbl9mbHQrKzsKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sIDEsIDAsCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sIDEsIDAsCiAJCQkJICAgICByZWdzLCBhZGRyZXNzKTsKIAl9CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IDNlZjUwODQuLjlkZGNmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtMjQyLDM5ICsyNDIsMyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19LQ09SRQotc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX3ZtZW07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2tjb3JlKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGJhc2U7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQkJc3RydWN0IGtjb3JlX2xpc3QgKmtjb3JlX21lbTsKLQotCQliYXNlID0gbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZTsKLQkJc2l6ZSA9IGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7Ci0KLQkJa2NvcmVfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtjb3JlX2xpc3QpLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFrY29yZV9tZW0pCi0JCQlwYW5pYygiJXM6IGttYWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQkJLyogbXVzdCBzdGF5IHVuZGVyIDMyIGJpdHMgKi8KLQkJaWYgKCAweGZmZmZmZmZmdWwgLSAodW5zaWduZWQgbG9uZylfX3ZhKGJhc2UpIDwgc2l6ZSkgewotCQkJc2l6ZSA9IDB4ZmZmZmZmZmZ1bCAtICh1bnNpZ25lZCBsb25nKShfX3ZhKGJhc2UpKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJzZXR1cF9rY29yZTogcmVzdHJpY3Qgc2l6ZT0lbHhcbiIsCi0JCQkJCQlzaXplKTsKLQkJfQotCi0JCWtjbGlzdF9hZGQoa2NvcmVfbWVtLCBfX3ZhKGJhc2UpLCBzaXplKTsKLQl9Ci0KLQlrY2xpc3RfYWRkKCZrY29yZV92bWVtLCAodm9pZCAqKVZNQUxMT0NfU1RBUlQsCi0JCVZNQUxMT0NfRU5ELVZNQUxMT0NfU1RBUlQpOwotCi0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChzZXR1cF9rY29yZSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IDMxNTgyMzIuLjMzNWM1NzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMTA5LDM1ICsxMDksNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19LQ09SRQotc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX3ZtZW07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2tjb3JlKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGk9MDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOwotCQlzdHJ1Y3Qga2NvcmVfbGlzdCAqa2NvcmVfbWVtOwotCi0JCWJhc2UgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOwotCQlzaXplID0gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKLQotCQkvKiBHRlBfQVRPTUlDIHRvIGF2b2lkIG1pZ2h0X3NsZWVwIHdhcm5pbmdzIGR1cmluZyBib290ICovCi0JCWtjb3JlX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrY29yZV9saXN0KSwgR0ZQX0FUT01JQyk7Ci0JCWlmICgha2NvcmVfbWVtKQotCQkJcGFuaWMoIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCi0JCWtjbGlzdF9hZGQoa2NvcmVfbWVtLCBfX3ZhKGJhc2UpLCBzaXplKTsKLQl9Ci0KLQlrY2xpc3RfYWRkKCZrY29yZV92bWVtLCAodm9pZCAqKVZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELVZNQUxMT0NfU1RBUlQpOwotCi0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChzZXR1cF9rY29yZSk7Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgcGdkX2N0b3Iodm9pZCAqYWRkcikKIHsKIAltZW1zZXQoYWRkciwgMCwgUEdEX1RBQkxFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IDU3OTM4MmMuLjU5NzM2MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTE0Myw4ICsxNDMsOCBAQAogICogbWVtb3J5IHJlZ2lvbnMsIGZpbmQgaG9sZXMgYW5kIGNhbGxiYWNrIGZvciBjb250aWd1b3VzIHJlZ2lvbnMuCiAgKi8KIGludAotd2Fsa19tZW1vcnlfcmVzb3VyY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZywKLQkJCWludCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKikpCit3YWxrX3N5c3RlbV9yYW1fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCXZvaWQgKmFyZywgaW50ICgqZnVuYykodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdm9pZCAqKSkKIHsKIAlzdHJ1Y3QgbG1iX3Byb3BlcnR5IHJlczsKIAl1bnNpZ25lZCBsb25nIHBmbiwgbGVuOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJfQogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh3YWxrX21lbW9yeV9yZXNvdXJjZSk7CitFWFBPUlRfU1lNQk9MX0dQTCh3YWxrX3N5c3RlbV9yYW1fcmFuZ2UpOwogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgYm9vdG1lbSBzeXN0ZW0gYW5kIGdpdmUgaXQgYWxsIHRoZSBtZW1vcnkgd2UKQEAgLTM3Miw3ICszNzIsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglbHVrIGtlcm5lbCBjb2RlLCAiCiAJICAgICAgICIlbHVrIHJlc2VydmVkLCAlbHVrIGRhdGEsICVsdWsgYnNzLCAlbHVrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZylucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCQlucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCQludW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJY29kZXNpemUgPj4gMTAsCiAJCXJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCA5ZWZjOGJkLi5lMzgyY2FlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQpAQCAtMjgwLDkgKzI4MCw5IEBACiAKIGNvbmZpZyBQUENfUEVSRl9DVFJTCiAgICAgICAgZGVmX2Jvb2wgeQotICAgICAgIGRlcGVuZHMgb24gUEVSRl9DT1VOVEVSUyAmJiBQUENfSEFWRV9QTVVfU1VQUE9SVAorICAgICAgIGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgUFBDX0hBVkVfUE1VX1NVUFBPUlQKICAgICAgICBoZWxwCi0gICAgICAgICBUaGlzIGVuYWJsZXMgdGhlIHBvd2VycGMtc3BlY2lmaWMgcGVyZl9jb3VudGVyIGJhY2stZW5kLgorICAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBwb3dlcnBjLXNwZWNpZmljIHBlcmZfZXZlbnQgYmFjay1lbmQuCiAKIGNvbmZpZyBTTVAKIAlkZXBlbmRzIG9uIFBQQ19CT09LM1MgfHwgUFBDX0JPT0szRSB8fCBGU0xfQk9PS0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCmluZGV4IGFiOGFlZjkuLjhmMDc5YjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggMjRiMzBiNi4uZmMxYjFjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLCBpbnQgbW9kZSwKIAkJc2l6ZV90IHNpemUsIHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQogewotCXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzcHVmc19maWxlX2lvcHMgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNwdWZzX2ZpbGVfaW9wcyA9IHsKIAkJLnNldGF0dHIgPSBzcHVmc19zZXRhdHRyLAogCX07CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTc3Myw3ICs3NzMsNyBAQAogc3B1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBzcHVmc19zYl9pbmZvICppbmZvOwotCXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzX29wcyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc19vcHMgPSB7CiAJCS5hbGxvY19pbm9kZSA9IHNwdWZzX2FsbG9jX2lub2RlLAogCQkuZGVzdHJveV9pbm9kZSA9IHNwdWZzX2Rlc3Ryb3lfaW5vZGUsCiAJCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCBiYjViNzdjLi40Njc4MDc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCmluZGV4IDU3Mjc3MWYuLjk0OTAxNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogdWRiZyBmb3IgZm9yIHppbG9nIHNjYyBwb3J0cyBhcyBmb3VuZCBvbiBBcHBsZSBQb3dlck1hY3MKKyAqIHVkYmcgZm9yIHppbG9nIHNjYyBwb3J0cyBhcyBmb3VuZCBvbiBBcHBsZSBQb3dlck1hY3MKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKICAqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCmluZGV4IGVhZTUxZWYuLjM2MzFhNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCkBAIC03MSw3ICs3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaGNhbGxfaW5zdF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBoY2FsbF9pbnN0X3NlcV9vcHMgPSB7CiAgICAgICAgIC5zdGFydCA9IGhjX3N0YXJ0LAogICAgICAgICAubmV4dCAgPSBoY19uZXh0LAogICAgICAgICAuc3RvcCAgPSBoY19zdG9wLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9heG9ucmFtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwppbmRleCBhNDc3OTkxLi44OGY0YWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYXhvbl9yYW1fZGV2b3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBheG9uX3JhbV9kZXZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5kaXJlY3RfYWNjZXNzCT0gYXhvbl9yYW1fZGlyZWN0X2FjY2VzcwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggMWM4NjZlZi4uNDNjMGFjYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTk0LDcgKzk0LDcgQEAKIAlzZWxlY3QgSEFWRV9LVk0gaWYgNjRCSVQKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQotCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCiBjb25maWcgU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggNGU5MWEyNS4uYWI0NDY0NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIE1vbiBKdW4gMjIgMTE6MDg6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFR1ZSBTZXAgMjIgMTc6NDM6MTMgMjAwOQogIwogQ09ORklHX1NDSEVEX01DPXkKIENPTkZJR19NTVU9eQpAQCAtMjQsNiArMjQsNyBAQAogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19TMzkwPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC00OCwxMSArNDksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKQEAgLTEwMywxMSArMTA1LDEyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldApAQCAtMTE2LDcgKzExOSw2IEBACiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CkBAIC0xNzYsNiArMTc4LDcgQEAKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogQ09ORklHXzY0QklUPXkKKyMgQ09ORklHX0tUSU1FX1NDQUxBUiBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTMyCiBDT05GSUdfSE9UUExVR19DUFU9eQpAQCAtMjU3LDcgKzI2MCw2IEBACiBDT05GSUdfUEZBVUxUPXkKICMgQ09ORklHX1NIQVJFRF9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfQ01NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfU1RBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExEQVRBX0JBU0UgaXMgbm90IHNldAogQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldApAQCAtMjgwLDYgKzI4Miw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX0hJQkVSTkFUSU9OPXkKIENPTkZJR19QTV9TVERfUEFSVElUSU9OPSIiCisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zOTQsNiArMzk3LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDg3LDYgKzQ5MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTUwMSw2ICs1MDYsNyBAQAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfT1NEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKQEAgLTU5NCw4ICs2MDAsMTEgQEAKIENPTkZJR19ETV9DUllQVD15CiBDT05GSUdfRE1fU05BUFNIT1Q9eQogQ09ORklHX0RNX01JUlJPUj15CisjIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIENPTkZJR19ETV9aRVJPPXkKIENPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNjE1LDcgKzYyNCw2IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTY3OCw2ICs2ODYsNyBAQAogQ09ORklHX1NDTFBfVlQyMjBfVFRZPXkKIENPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEU9eQogQ09ORklHX1NDTFBfQ1BJPW0KK0NPTkZJR19TQ0xQX0FTWU5DPW0KIENPTkZJR19TMzkwX1RBUEU9bQogCiAjCkBAIC03MzcsNiArNzQ2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc5OCw3ICs4MDgsNiBAQAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04ODUsMTEgKzg5NCwxMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVPXkKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTk3OSwxMSArOTkwLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19WTUFDPW0KIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fR0hBU0g9bQogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT1tCiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwppbmRleCBiZDk5MTRiLi4zNDFhZmYyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoeXBmc19maWxlX29wczsKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBoeXBmc190eXBlOwotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh5cGZzX3Nfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh5cGZzX3Nfb3BzOwogCiAvKiBzdGFydCBvZiBsaXN0IG9mIGFsbCBkZW50cmllcywgd2hpY2ggaGF2ZSB0byBiZSBkZWxldGVkIG9uIHVwZGF0ZSAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmh5cGZzX2xhc3RfZGVudHJ5OwpAQCAtNDcyLDcgKzQ3Miw3IEBACiAJLmtpbGxfc2IJPSBoeXBmc19raWxsX3N1cGVyCiB9OwogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHlwZnNfc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHlwZnNfc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlCT0gaHlwZnNfZHJvcF9pbm9kZSwKIAkuc2hvd19vcHRpb25zCT0gaHlwZnNfc2hvd19vcHRpb25zLApAQCAtNDk2LDcgKzQ5Niw3IEBACiAJfQogCXMzOTBfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInMzOTAiLCBoeXBlcnZpc29yX2tvYmopOwogCWlmICghczM5MF9rb2JqKSB7Ci0JCXJjID0gLUVOT01FTTs7CisJCXJjID0gLUVOT01FTTsKIAkJZ290byBmYWlsX3N5c2ZzOwogCX0KIAlyYyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmh5cGZzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggN2EzODE3YS4uMjRiMTI0NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC00Miw2ICs0Miw3IEBACiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKICNkZWZpbmUgY3B1dGltZV96ZXJvCQkJKDBVTEwpCisjZGVmaW5lIGNwdXRpbWVfb25lX2ppZmZ5CQlqaWZmaWVzX3RvX2NwdXRpbWUoMSkKICNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4wVUwgPj4gMSkgLSAxKQogI2RlZmluZSBjcHV0aW1lX2FkZChfX2EsIF9fYikJCSgoX19hKSArICAoX19iKSkKICNkZWZpbmUgY3B1dGltZV9zdWIoX19hLCBfX2IpCQkoKF9fYSkgLSAgKF9fYikpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAppbmRleCA2YmM5NDI2Li5mMmVmNGI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKQEAgLTg2LDYgKzg2LDcgQEAKICNkZWZpbmUgX19MQ19QR01fT0xEX1BTVwkJMHgwMTUwCiAjZGVmaW5lIF9fTENfTUNLX09MRF9QU1cJCTB4MDE2MAogI2RlZmluZSBfX0xDX0lPX09MRF9QU1cJCQkweDAxNzAKKyNkZWZpbmUgX19MQ19SRVNUQVJUX1BTVwkJMHgwMWEwCiAjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDFiMAogI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAxYzAKICNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMWQwCkBAIC0xODksNiArMTkwLDE0IEBACiAjZGVmaW5lIFNBVkVfQVJFQV9CQVNFIFNBVkVfQVJFQV9CQVNFX1MzOTBYCiAjZW5kaWYKIAorI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgTENfT1JERVIgMAorI2Vsc2UKKyNkZWZpbmUgTENfT1JERVIgMQorI2VuZGlmCisKKyNkZWZpbmUgTENfUEFHRVMgKDFVTCA8PCBMQ19PUkRFUikKKwogc3RydWN0IF9sb3djb3JlCiB7CiAjaWZuZGVmIF9fczM5MHhfXwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggZjYzZmU3Yi4uNGU5YzhhZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC05LDE4ICs5LDcgQEAKICNpZm5kZWYgX19TMzkwX01NQU5fSF9fCiAjZGVmaW5lIF9fUzM5MF9NTUFOX0hfXwogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVCkKIGludCBzMzkwX21tYXBfY2hlY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTUxODguLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotLyoKLSAqIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCAtIHMzOTAgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IDIwMDkgTWFydGluIFNjaHdpZGVmc2t5LCBJQk0gQ29ycG9yYXRpb24uCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKSB7fQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpIHt9Ci0KLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVCAwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQwY2JlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDEwIEBACisvKgorICogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCAtIHMzOTAgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IDIwMDkgTWFydGluIFNjaHdpZGVmc2t5LCBJQk0gQ29ycG9yYXRpb24uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkge30KKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggY2Y4ZWVkMy4uYjQyNzE1NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjk1LDcgKzI5NSw3IEBACiAJCSIJb2kJMHgzODQoMSksMHgxMFxuIi8qIGZha2UgcHJvdGVjdGlvbiBiaXQgKi8KIAkJIglscHN3ZQkwKCUxKSIKIAkJOiAiPW0iIChjdGxfYnVmKQotCQk6ICJhIiAoJmR3X3BzdyksICJhIiAoJmN0bF9idWYpLCAibSIgKGR3X3BzdykgOiAiY2MiLCAiMCIpOworCQk6ICJhIiAoJmR3X3BzdyksICJhIiAoJmN0bF9idWYpLCAibSIgKGR3X3BzdykgOiAiY2MiLCAiMCIsICIxIik7CiAjZW5kaWYgLyogX19zMzkweF9fICovCiAJd2hpbGUgKDEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGM4MDYwMmQuLmNiNTIzMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogI2RlZmluZQlfX05SX3ByZWFkdgkJMzI4CiAjZGVmaW5lCV9fTlJfcHdyaXRldgkJMzI5CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzMwCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzMxCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzMQogI2RlZmluZSBOUl9zeXNjYWxscyAzMzIKIAogLyogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZmE5OTA1Yy4uNjNlNDY0MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KIAogaW50IG1haW4odm9pZCkKIHsKQEAgLTU5LDYgKzYwLDEwIEBACiAJREVGSU5FKENMT0NLX1JFQUxUSU1FLCBDTE9DS19SRUFMVElNRSk7CiAJREVGSU5FKENMT0NLX01PTk9UT05JQywgQ0xPQ0tfTU9OT1RPTklDKTsKIAlERUZJTkUoQ0xPQ0tfUkVBTFRJTUVfUkVTLCBNT05PVE9OSUNfUkVTX05TRUMpOwotCisJLyogY29uc3RhbnRzIGZvciBTSUdQICovCisJREVGSU5FKF9fU0lHUF9TVE9QLCBzaWdwX3N0b3ApOworCURFRklORShfX1NJR1BfUkVTVEFSVCwgc2lncF9yZXN0YXJ0KTsKKwlERUZJTkUoX19TSUdQX1NFTlNFLCBzaWdwX3NlbnNlKTsKKwlERUZJTkUoX19TSUdQX0lOSVRJQUxfQ1BVX1JFU0VULCBzaWdwX2luaXRpYWxfY3B1X3Jlc2V0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCmluZGV4IDlhYjE4OGQuLjU1MTljYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwpAQCAtNDQzLDY2ICs0NDMsMjggQEAKICAqIHN5czMyX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0gYWZ0ZXIgdGhlIGFzbSBzdHViIGhhcyBzZXQKICAqIHRoaW5ncyB1cCBmb3IgdXMuICBUaGlzIHNob3VsZCBiYXNpY2FsbHkgZG8gd2hhdCBJIHdhbnQgaXQgdG8uCiAgKi8KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9leGVjdmUodm9pZCkKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl9leGVjdmUoY2hhciBfX3VzZXIgKm5hbWUsIGNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAorCQkJICAgICBjb21wYXRfdXB0cl90IF9fdXNlciAqZW52cCkKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKIAljaGFyICpmaWxlbmFtZTsKLQl1bnNpZ25lZCBsb25nIHJlc3VsdDsKLQlpbnQgcmM7CisJbG9uZyByYzsKIAotCWZpbGVuYW1lID0gZ2V0bmFtZShjb21wYXRfcHRyKHJlZ3MtPm9yaWdfZ3ByMikpOwotCWlmIChJU19FUlIoZmlsZW5hbWUpKSB7Ci0JCXJlc3VsdCA9IFBUUl9FUlIoZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotCX0KLQlyYyA9IGNvbXBhdF9kb19leGVjdmUoZmlsZW5hbWUsIGNvbXBhdF9wdHIocmVncy0+Z3Byc1szXSksCi0JCQkgICAgICBjb21wYXRfcHRyKHJlZ3MtPmdwcnNbNF0pLCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcmVzdWx0ID0gcmM7Ci0JCWdvdG8gb3V0X3B1dG5hbWU7Ci0JfQorCWZpbGVuYW1lID0gZ2V0bmFtZShuYW1lKTsKKwlyYyA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWlmIChJU19FUlIoZmlsZW5hbWUpKQorCQlyZXR1cm4gcmM7CisJcmMgPSBjb21wYXRfZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OwogCWN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLmZwYz0wOwogCWFzbSB2b2xhdGlsZSgic2ZwYyAlMCwwIiA6IDogImQiICgwKSk7Ci0JcmVzdWx0ID0gcmVncy0+Z3Byc1syXTsKLW91dF9wdXRuYW1lOgotICAgICAgICBwdXRuYW1lKGZpbGVuYW1lKTsKKwlyYyA9IHJlZ3MtPmdwcnNbMl07CiBvdXQ6Ci0JcmV0dXJuIHJlc3VsdDsKKwlwdXRuYW1lKGZpbGVuYW1lKTsKKwlyZXR1cm4gcmM7CiB9CiAKLQotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfaW5pdF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsIHVuc2lnbmVkIGxvbmcgbGVuLAotCQljb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpCi17Ci0JcmV0dXJuIHN5c19pbml0X21vZHVsZSh1bW9kLCBsZW4sIHVhcmdzKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgX191c2VyICpuYW1lX3VzZXIsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlyZXR1cm4gc3lzX2RlbGV0ZV9tb2R1bGUobmFtZV91c2VyLCBmbGFncyk7Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19NT0RVTEVTICovCi0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfaW5pdF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsIHVuc2lnbmVkIGxvbmcgbGVuLAotCQljb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZGVsZXRlX21vZHVsZShjb25zdCBjaGFyIF9fdXNlciAqbmFtZV91c2VyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLSNlbmRpZiAgLyogQ09ORklHX01PRFVMRVMgKi8KLQogYXNtbGlua2FnZSBsb25nIHN5czMyX3ByZWFkNjQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQlzaXplX3QgY291bnQsIHUzMiBwb3NoaSwgdTMyIHBvc2xvKQogewpAQCAtODAxLDIzICs3NjMsNiBAQAogCXJldHVybiBzeXNfd3JpdGUoZmQsIGJ1ZiwgY291bnQpOwogfQogCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfY2xvbmUodm9pZCkKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbmV3c3A7Ci0JaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwgKmNoaWxkX3RpZHB0cjsKLQotCWNsb25lX2ZsYWdzID0gcmVncy0+Z3Byc1szXSAmIDB4ZmZmZmZmZmZVTDsKLQluZXdzcCA9IHJlZ3MtPm9yaWdfZ3ByMiAmIDB4N2ZmZmZmZmZVTDsKLQlwYXJlbnRfdGlkcHRyID0gY29tcGF0X3B0cihyZWdzLT5ncHJzWzRdKTsKLQljaGlsZF90aWRwdHIgPSBjb21wYXRfcHRyKHJlZ3MtPmdwcnNbNV0pOwotCWlmICghbmV3c3ApCi0JCW5ld3NwID0gcmVncy0+Z3Byc1sxNV07Ci0JcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCByZWdzLCAwLAotCQkgICAgICAgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKLX0KLQogLyoKICAqIDMxIGJpdCBlbXVsYXRpb24gd3JhcHBlciBmdW5jdGlvbnMgZm9yIHN5c19mYWR2aXNlNjQvZmFkdmlzZTY0XzY0LgogICogVGhlc2UgbmVlZCB0byByZXdyaXRlIHRoZSBhZHZpc2UgdmFsdWVzIGZvciBQT1NJWF9GQURWX3tET05UTkVFRCxOT1JFVVNFfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaCBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmgKaW5kZXggODM2YTI4OC4uYzA3ZjljYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oCkBAIC0xOTgsNyArMTk4LDggQEAKIAkJCSAgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqb3NldCwgc2l6ZV90IHNpZ3NldHNpemUpOwogbG9uZyBzeXMzMl9ydF9zaWdwZW5kaW5nKGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnNldCwgc2l6ZV90IHNpZ3NldHNpemUpOwogbG9uZyBzeXMzMl9ydF9zaWdxdWV1ZWluZm8oaW50IHBpZCwgaW50IHNpZywgY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKnVpbmZvKTsKLWxvbmcgc3lzMzJfZXhlY3ZlKHZvaWQpOworbG9uZyBzeXMzMl9leGVjdmUoY2hhciBfX3VzZXIgKm5hbWUsIGNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAorCQkgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwKTsKIGxvbmcgc3lzMzJfaW5pdF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVhcmdzKTsKIGxvbmcgc3lzMzJfZGVsZXRlX21vZHVsZShjb25zdCBjaGFyIF9fdXNlciAqbmFtZV91c2VyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwpAQCAtMjIyLDcgKzIyMyw2IEBACiBsb25nIHN5czMyX21tYXAyKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3RfZW11MzEgX191c2VyICphcmcpOwogbG9uZyBzeXMzMl9yZWFkKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCk7CiBsb25nIHN5czMyX3dyaXRlKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCk7Ci1sb25nIHN5czMyX2Nsb25lKHZvaWQpOwogbG9uZyBzeXMzMl9mYWR2aXNlNjQoaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgbGVuLCBpbnQgYWR2aXNlKTsKIGxvbmcgc3lzMzJfZmFkdmlzZTY0XzY0KHN0cnVjdCBmYWR2aXNlNjRfNjRfYXJncyBfX3VzZXIgKmFyZ3MpOwogbG9uZyBzeXMzMl9zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCA4OGE4MzM2Ni4uNjgyZmI2OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtNTY4LDE4ICs1NjgsMTggQEAKIAlsbGd0cgklcjQsJXI0CQkJIyBjb21wYXRfb2xkX3NpZ3NldF90ICoKIAlqZwljb21wYXRfc3lzX3NpZ3Byb2NtYXNrCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsCXN5czMyX2luaXRfbW9kdWxlX3dyYXBwZXIKLXN5czMyX2luaXRfbW9kdWxlX3dyYXBwZXI6CisJLmdsb2JsCXN5c19pbml0X21vZHVsZV93cmFwcGVyCitzeXNfaW5pdF9tb2R1bGVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyB2b2lkICoKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCiAJbGxndHIJJXI0LCVyNAkJCSMgY2hhciAqCi0JamcJc3lzMzJfaW5pdF9tb2R1bGUJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKKwlqZwlzeXNfaW5pdF9tb2R1bGUJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwJc3lzMzJfZGVsZXRlX21vZHVsZV93cmFwcGVyCi1zeXMzMl9kZWxldGVfbW9kdWxlX3dyYXBwZXI6CisJLmdsb2JsCXN5c19kZWxldGVfbW9kdWxlX3dyYXBwZXIKK3N5c19kZWxldGVfbW9kdWxlX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCiAJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgaW50Ci0JamcJc3lzMzJfZGVsZXRlX21vZHVsZQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAorCWpnCXN5c19kZWxldGVfbW9kdWxlCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKIAkuZ2xvYmwJc3lzMzJfcXVvdGFjdGxfd3JhcHBlcgogc3lzMzJfcXVvdGFjdGxfd3JhcHBlcjoKQEAgLTE4MzIsMTEgKzE4MzIsMjYgQEAKIAlsbGd0cgklcjUsJXI1CQkJIyBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gKgogCWpnCWNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm9fd3JhcHBlciAjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsCXN5c19wZXJmX2NvdW50ZXJfb3Blbl93cmFwcGVyCi1zeXNfcGVyZl9jb3VudGVyX29wZW5fd3JhcHBlcjoKLQlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKgorCS5nbG9ibAlzeXNfcGVyZl9ldmVudF9vcGVuX3dyYXBwZXIKK3N5c19wZXJmX2V2ZW50X29wZW5fd3JhcHBlcjoKKwlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICoKIAlsZ2ZyCSVyMywlcjMJCQkjIHBpZF90CiAJbGdmcgklcjQsJXI0CQkJIyBpbnQKIAlsZ2ZyCSVyNSwlcjUJCQkjIGludAogCWxsZ2ZyCSVyNiwlcjYJCQkjIHVuc2lnbmVkIGxvbmcKLQlqZwlzeXNfcGVyZl9jb3VudGVyX29wZW4JIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKKwlqZwlzeXNfcGVyZl9ldmVudF9vcGVuCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisKKwkuZ2xvYmwJc3lzX2Nsb25lX3dyYXBwZXIKK3N5c19jbG9uZV93cmFwcGVyOgorCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKKwlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCisJbGxndHIJJXI0LCVyNAkJCSMgaW50ICoKKwlsbGd0cgklcjUsJXI1CQkJIyBpbnQgKgorCWpnCXN5c19jbG9uZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKKworCS5nbG9ibAlzeXMzMl9leGVjdmVfd3JhcHBlcgorc3lzMzJfZXhlY3ZlX3dyYXBwZXI6CisJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCisJbGxndHIJJXIzLCVyMwkJCSMgY29tcGF0X3VwdHJfdCAqCisJbGxndHIJJXI0LCVyNAkJCSMgY29tcGF0X3VwdHJfdCAqCisJamcJc3lzMzJfZXhlY3ZlCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oCmluZGV4IDk1MGM1OWMuLmUxZTVlNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LmgKQEAgLTQyLDEwICs0MiwxMiBAQAogbG9uZyBzeXNfczM5MF9mYWxsb2NhdGUoaW50IGZkLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgdTMyIGxlbl9oaWdoLAogCQkJdTMyIGxlbl9sb3cpOwogbG9uZyBzeXNfZm9yayh2b2lkKTsKLWxvbmcgc3lzX2Nsb25lKHZvaWQpOworbG9uZyBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBuZXdzcCwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKKwkgICAgICAgaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwgaW50IF9fdXNlciAqY2hpbGRfdGlkcHRyKTsKIGxvbmcgc3lzX3Zmb3JrKHZvaWQpOwogdm9pZCBleGVjdmVfdGFpbCh2b2lkKTsKLWxvbmcgc3lzX2V4ZWN2ZSh2b2lkKTsKK2xvbmcgc3lzX2V4ZWN2ZShjaGFyIF9fdXNlciAqbmFtZSwgY2hhciBfX3VzZXIgKiBfX3VzZXIgKmFyZ3YsCisJCWNoYXIgX191c2VyICogX191c2VyICplbnZwKTsKIGxvbmcgc3lzX3NpZ3N1c3BlbmQoaW50IGhpc3RvcnkwLCBpbnQgaGlzdG9yeTEsIG9sZF9zaWdzZXRfdCBtYXNrKTsKIGxvbmcgc3lzX3NpZ2FjdGlvbihpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKIAkJICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICpvYWN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWE0M2YyNy4uNTlmZTZlYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0yMzAsMTcgKzIzMSwxMSBAQAogCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJlZ3MtPmdwcnNbMTVdLCByZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAotU1lTQ0FMTF9ERUZJTkUwKGNsb25lKQorU1lTQ0FMTF9ERUZJTkU0KGNsb25lLCB1bnNpZ25lZCBsb25nLCBuZXdzcCwgdW5zaWduZWQgbG9uZywgY2xvbmVfZmxhZ3MsCisJCWludCBfX3VzZXIgKiwgcGFyZW50X3RpZHB0ciwgaW50IF9fdXNlciAqLCBjaGlsZF90aWRwdHIpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFnczsKLQl1bnNpZ25lZCBsb25nIG5ld3NwOwotCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIsICpjaGlsZF90aWRwdHI7CiAKLQljbG9uZV9mbGFncyA9IHJlZ3MtPmdwcnNbM107Ci0JbmV3c3AgPSByZWdzLT5vcmlnX2dwcjI7Ci0JcGFyZW50X3RpZHB0ciA9IChpbnQgX191c2VyICopIHJlZ3MtPmdwcnNbNF07Ci0JY2hpbGRfdGlkcHRyID0gKGludCBfX3VzZXIgKikgcmVncy0+Z3Byc1s1XTsKIAlpZiAoIW5ld3NwKQogCQluZXdzcCA9IHJlZ3MtPmdwcnNbMTVdOwogCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgcmVncywgMCwKQEAgLTI3NCwzMCArMjY5LDI1IEBACiAvKgogICogc3lzX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0uCiAgKi8KLVNZU0NBTExfREVGSU5FMChleGVjdmUpCitTWVNDQUxMX0RFRklORTMoZXhlY3ZlLCBjaGFyIF9fdXNlciAqLCBuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqLCBhcmd2LAorCQljaGFyIF9fdXNlciAqIF9fdXNlciAqLCBlbnZwKQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwogCWNoYXIgKmZpbGVuYW1lOwotCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwotCWludCByYzsKKwlsb25nIHJjOwogCi0JZmlsZW5hbWUgPSBnZXRuYW1lKChjaGFyIF9fdXNlciAqKSByZWdzLT5vcmlnX2dwcjIpOwotCWlmIChJU19FUlIoZmlsZW5hbWUpKSB7Ci0JCXJlc3VsdCA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWZpbGVuYW1lID0gZ2V0bmFtZShuYW1lKTsKKwlyYyA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWlmIChJU19FUlIoZmlsZW5hbWUpKQorCQlyZXR1cm4gcmM7CisJcmMgPSBkb19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsIHJlZ3MpOworCWlmIChyYykKIAkJZ290byBvdXQ7Ci0JfQotCXJjID0gZG9fZXhlY3ZlKGZpbGVuYW1lLCAoY2hhciBfX3VzZXIgKiBfX3VzZXIgKikgcmVncy0+Z3Byc1szXSwKLQkJICAgICAgIChjaGFyIF9fdXNlciAqIF9fdXNlciAqKSByZWdzLT5ncHJzWzRdLCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcmVzdWx0ID0gcmM7Ci0JCWdvdG8gb3V0X3B1dG5hbWU7Ci0JfQogCWV4ZWN2ZV90YWlsKCk7Ci0JcmVzdWx0ID0gcmVncy0+Z3Byc1syXTsKLW91dF9wdXRuYW1lOgotCXB1dG5hbWUoZmlsZW5hbWUpOworCXJjID0gcmVncy0+Z3Byc1syXTsKIG91dDoKLQlyZXR1cm4gcmVzdWx0OworCXB1dG5hbWUoZmlsZW5hbWUpOworCXJldHVybiByYzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IGYzZGRkN2EuLmE4NzM4NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzM5LDI0ICszMzksMTAgQEAKIAlpbnQgY29waWVkLCByZXQ7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKLQljYXNlIFBUUkFDRV9QRUVLVEVYVDoKLQljYXNlIFBUUkFDRV9QRUVLREFUQToKLQkJLyogUmVtb3ZlIGhpZ2ggb3JkZXIgYml0IGZyb20gYWRkcmVzcyAob25seSBmb3IgMzEgYml0KS4gKi8KLQkJYWRkciAmPSBQU1dfQUREUl9JTlNOOwotCQkvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8KLQkJcmV0dXJuIGdlbmVyaWNfcHRyYWNlX3BlZWtkYXRhKGNoaWxkLCBhZGRyLCBkYXRhKTsKLQogCWNhc2UgUFRSQUNFX1BFRUtVU1I6CiAJCS8qIHJlYWQgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkciBpbiB0aGUgVVNFUiBhcmVhLiAqLwogCQlyZXR1cm4gcGVla191c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAotCWNhc2UgUFRSQUNFX1BPS0VURVhUOgotCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQkvKiBSZW1vdmUgaGlnaCBvcmRlciBiaXQgZnJvbSBhZGRyZXNzIChvbmx5IGZvciAzMSBiaXQpLiAqLwotCQlhZGRyICY9IFBTV19BRERSX0lOU047Ci0JCS8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovCi0JCXJldHVybiBnZW5lcmljX3B0cmFjZV9wb2tlZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7Ci0KIAljYXNlIFBUUkFDRV9QT0tFVVNSOgogCQkvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEgKi8KIAkJcmV0dXJuIHBva2VfdXNlcihjaGlsZCwgYWRkciwgZGF0YSk7CkBAIC0zODYsOCArMzcyLDExIEBACiAJCQljb3BpZWQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCQl9CiAJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCS8qIFJlbW92aW5nIGhpZ2ggb3JkZXIgYml0IGZyb20gYWRkciAob25seSBmb3IgMzEgYml0KS4gKi8KKwkJYWRkciAmPSBQU1dfQUREUl9JTlNOOworCQlyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCX0KLQlyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLlMgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwppbmRleCAyMDYzOWRmLi5lMjdjYTYzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwpAQCAtMjQsOCArMjQsNiBAQAogIyAgIFIzCT0gZXh0ZXJuYWwgaW50ZXJydXB0aW9uIHBhcmFtZXRlciBpZiBSMj0wCiAjCiAKLS5zZWN0aW9uICIuaW5pdC50ZXh0IiwiYXgiCi0KIF9zY2xwX3dhaXRfaW50OgogCXN0bQklcjYsJXIxNSwyNCglcjE1KQkJIyBzYXZlIHJlZ2lzdGVycwogCWJhc3IJJXIxMywwCQkJCSMgZ2V0IGJhc2UgcmVnaXN0ZXIKQEAgLTMxOCw5ICszMTYsOCBAQAogCS5sb25nCV9zY2xwX3dvcmtfYXJlYQogLkxhc2NlYmM6CiAJLmxvbmcJX2FzY2ViYwotLnByZXZpb3VzCiAKLS5zZWN0aW9uICIuaW5pdC5kYXRhIiwiYSIKKy5zZWN0aW9uIC5kYXRhLCJhdyIsQHByb2diaXRzCiAJLmJhbGlnbiA0MDk2CiBfc2NscF93b3JrX2FyZWE6CiAJLmZpbGwJNDA5NgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggNTZjMTY4Ny4uYjRiNjM5NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC00NzUsMTAgKzQ3NSw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBhc3luY19zdGFjaywgcGFuaWNfc3RhY2s7CiAJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwotCWludCBsY19vcmRlcjsKIAotCWxjX29yZGVyID0gc2l6ZW9mKGxvbmcpID09IDggPyAxIDogMDsKLQlsb3djb3JlID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgR0ZQX0RNQSwgbGNfb3JkZXIpOworCWxvd2NvcmUgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLCBMQ19PUkRFUik7CiAJaWYgKCFsb3djb3JlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhc3luY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVNZTkNfT1JERVIpOwpAQCAtNTA5LDE2ICs1MDcsMTQgQEAKIG91dDoKIAlmcmVlX3BhZ2UocGFuaWNfc3RhY2spOwogCWZyZWVfcGFnZXMoYXN5bmNfc3RhY2ssIEFTWU5DX09SREVSKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbG93Y29yZSwgTENfT1JERVIpOwogCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBzbXBfZnJlZV9sb3djb3JlKGludCBjcHUpCiB7CiAJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwotCWludCBsY19vcmRlcjsKIAotCWxjX29yZGVyID0gc2l6ZW9mKGxvbmcpID09IDggPyAxIDogMDsKIAlsb3djb3JlID0gbG93Y29yZV9wdHJbY3B1XTsKICNpZm5kZWYgQ09ORklHXzY0QklUCiAJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpCkBAIC01MjgsNyArNTI0LDcgQEAKICNlbmRpZgogCWZyZWVfcGFnZShsb3djb3JlLT5wYW5pY19zdGFjayAtIFBBR0VfU0laRSk7CiAJZnJlZV9wYWdlcyhsb3djb3JlLT5hc3luY19zdGFjayAtIEFTWU5DX1NJWkUsIEFTWU5DX09SREVSKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbG93Y29yZSwgTENfT1JERVIpOwogCWxvd2NvcmVfcHRyW2NwdV0gPSBOVUxMOwogfQogCkBAIC02NjQsNyArNjYwLDYgQEAKIAl1bnNpZ25lZCBsb25nIGFzeW5jX3N0YWNrLCBwYW5pY19zdGFjazsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmU7CiAJdW5zaWduZWQgaW50IGNwdTsKLQlpbnQgbGNfb3JkZXI7CiAKIAlzbXBfZGV0ZWN0X2NwdXMoKTsKIApAQCAtNjc0LDggKzY2OSw3IEBACiAJcHJpbnRfY3B1X2luZm8oKTsKIAogCS8qIFJlYWxsb2NhdGUgY3VycmVudCBsb3djb3JlLCBidXQga2VlcCBpdHMgY29udGVudHMuICovCi0JbGNfb3JkZXIgPSBzaXplb2YobG9uZykgPT0gOCA/IDEgOiAwOwotCWxvd2NvcmUgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLCBsY19vcmRlcik7CisJbG93Y29yZSA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsIExDX09SREVSKTsKIAlwYW5pY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAlhc3luY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVNZTkNfT1JERVIpOwogCUJVR19PTighbG93Y29yZSB8fCAhcGFuaWNfc3RhY2sgfHwgIWFzeW5jX3N0YWNrKTsKQEAgLTEwNDcsNDIgKzEwNDEsNiBAQAogc3RhdGljIFNZU0RFVl9DTEFTU19BVFRSKGRpc3BhdGNoaW5nLCAwNjQ0LCBkaXNwYXRjaGluZ19zaG93LAogCQkJIGRpc3BhdGNoaW5nX3N0b3JlKTsKIAotLyoKLSAqIElmIHRoZSByZXN1bWUga2VybmVsIHJ1bnMgb24gYW5vdGhlciBjcHUgdGhhbiB0aGUgc3VzcGVuZGVkIGtlcm5lbCwKLSAqIHdlIGhhdmUgdG8gc3dpdGNoIHRoZSBjcHUgSURzIGluIHRoZSBsb2dpY2FsIG1hcC4KLSAqLwotdm9pZCBzbXBfc3dpdGNoX2Jvb3RfY3B1X2luX3Jlc3VtZSh1MzIgcmVzdW1lX3BoeXNfY3B1X2lkLAotCQkJCSAgIHN0cnVjdCBfbG93Y29yZSAqc3VzcGVuZF9sb3djb3JlKQotewotCWludCBjcHUsIHN1c3BlbmRfY3B1X2lkLCByZXN1bWVfY3B1X2lkOwotCXUzMiBzdXNwZW5kX3BoeXNfY3B1X2lkOwotCi0Jc3VzcGVuZF9waHlzX2NwdV9pZCA9IF9fY3B1X2xvZ2ljYWxfbWFwW3N1c3BlbmRfbG93Y29yZS0+Y3B1X25yXTsKLQlzdXNwZW5kX2NwdV9pZCA9IHN1c3BlbmRfbG93Y29yZS0+Y3B1X25yOwotCi0JZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7Ci0JCWlmIChfX2NwdV9sb2dpY2FsX21hcFtjcHVdID09IHJlc3VtZV9waHlzX2NwdV9pZCkgewotCQkJcmVzdW1lX2NwdV9pZCA9IGNwdTsKLQkJCWdvdG8gZm91bmQ7Ci0JCX0KLQl9Ci0JcGFuaWMoIkNvdWxkIG5vdCBmaW5kIHJlc3VtZSBjcHUgaW4gbG9naWNhbCBtYXAuXG4iKTsKLQotZm91bmQ6Ci0JcHJpbnRrKCJSZXN1bWUgIGNwdSBJRDogJWkvJWlcbiIsIHJlc3VtZV9waHlzX2NwdV9pZCwgcmVzdW1lX2NwdV9pZCk7Ci0JcHJpbnRrKCJTdXNwZW5kIGNwdSBJRDogJWkvJWlcbiIsIHN1c3BlbmRfcGh5c19jcHVfaWQsIHN1c3BlbmRfY3B1X2lkKTsKLQotCV9fY3B1X2xvZ2ljYWxfbWFwW3Jlc3VtZV9jcHVfaWRdID0gc3VzcGVuZF9waHlzX2NwdV9pZDsKLQlfX2NwdV9sb2dpY2FsX21hcFtzdXNwZW5kX2NwdV9pZF0gPSByZXN1bWVfcGh5c19jcHVfaWQ7Ci0KLQlsb3djb3JlX3B0cltzdXNwZW5kX2NwdV9pZF0tPmNwdV9hZGRyID0gcmVzdW1lX3BoeXNfY3B1X2lkOwotfQotCi11MzIgc21wX2dldF9waHlzX2NwdV9pZCh2b2lkKQotewotCXJldHVybiBfX2NwdV9sb2dpY2FsX21hcFtzbXBfcHJvY2Vzc29yX2lkKCldOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3VzcGVuZC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMKaW5kZXggMDg2YmVlOS4uY2Y5ZTVjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMKQEAgLTYsMzYgKzYsMjYgQEAKICAqIEF1dGhvcihzKTogSGFucy1Kb2FjaGltIFBpY2h0IDxoYW5zQGxpbnV4LnZuZXQuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pcGwuaD4KIAogLyoKICAqIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzCiAgKi8KIGV4dGVybiBjb25zdCB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CiAKLS8qCi0gKiAgY2hlY2sgaWYgZ2l2ZW4gcGZuIGlzIGluIHRoZSAnbm9zYXZlJyBvciBpbiB0aGUgcmVhZCBvbmx5IE5TUyBzZWN0aW9uCi0gKi8KIGludCBwZm5faXNfbm9zYXZlKHVuc2lnbmVkIGxvbmcgcGZuKQogewotCXVuc2lnbmVkIGxvbmcgbm9zYXZlX2JlZ2luX3BmbiA9IF9fcGEoJl9fbm9zYXZlX2JlZ2luKSA+PiBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgbm9zYXZlX2VuZF9wZm4gPSBQQUdFX0FMSUdOKF9fcGEoJl9fbm9zYXZlX2VuZCkpCi0JCQkJCT4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBlc2hhcmVkX3BmbiA9IFBGTl9ET1dOKF9fcGEoJl9lc2hhcmVkKSkgLSAxOwotCXVuc2lnbmVkIGxvbmcgc3RleHRfcGZuID0gUEZOX0RPV04oX19wYSgmX3N0ZXh0KSk7CisJdW5zaWduZWQgbG9uZyBub3NhdmVfYmVnaW5fcGZuID0gUEZOX0RPV04oX19wYSgmX19ub3NhdmVfYmVnaW4pKTsKKwl1bnNpZ25lZCBsb25nIG5vc2F2ZV9lbmRfcGZuID0gUEZOX0RPV04oX19wYSgmX19ub3NhdmVfZW5kKSk7CiAKKwkvKiBBbHdheXMgc2F2ZSBsb3djb3JlIHBhZ2VzIChMQyBwcm90ZWN0aW9uIG1pZ2h0IGJlIGVuYWJsZWQpLiAqLworCWlmIChwZm4gPD0gTENfUEFHRVMpCisJCXJldHVybiAwOwogCWlmIChwZm4gPj0gbm9zYXZlX2JlZ2luX3BmbiAmJiBwZm4gPCBub3NhdmVfZW5kX3BmbikKIAkJcmV0dXJuIDE7Ci0JaWYgKHBmbiA+PSBzdGV4dF9wZm4gJiYgcGZuIDw9IGVzaGFyZWRfcGZuKSB7Ci0JCWlmIChpcGxfaW5mby50eXBlID09IElQTF9UWVBFX05TUykKLQkJCXJldHVybiAxOwotCX0gZWxzZSBpZiAoKHRwcm90KHBmbiAqIFBBR0VfU0laRSkgJiYgcGZuID4gMCkpCisJLyogU2tpcCBtZW1vcnkgaG9sZXMgYW5kIHJlYWQtb25seSBwYWdlcyAoTlNTLCBEQ1NTLCAuLi4pLiAqLworCWlmICh0cHJvdChQRk5fUEhZUyhwZm4pKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwppbmRleCA3Y2Q2YjA5Li5mZTkyN2QwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogLyoKQEAgLTQxLDYgKzQyLDkgQEAKIAkvKiBHZXQgcG9pbnRlciB0byBzYXZlIGFyZWEgKi8KIAlsZ2hpCSVyMSwweDEwMDAKIAorCS8qIFNhdmUgQ1BVIGFkZHJlc3MgKi8KKwlzdGFwCV9fTENfQ1BVX0FERFJFU1MoJXIxKQorCiAJLyogU3RvcmUgcmVnaXN0ZXJzICovCiAJbXZjCTB4MzE4KDQsJXIxKSxfX1NGX0VNUFRZKCVyMTUpCS8qIG1vdmUgcHJlZml4IHRvIGxvd2NvcmUgKi8KIAlzdGZwYwkweDMxYyglcjEpCQkJLyogc3RvcmUgZnB1IGNvbnRyb2wgKi8KQEAgLTEwMiwxMSArMTA2LDEwIEBACiAJYWdoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAogCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBTYXZlIGJvb3QgY3B1IG51bWJlciAqLwotCWJyYXNsCSVyMTQsc21wX2dldF9waHlzX2NwdV9pZAotCWxncgklcjEwLCVyMgotI2VuZGlmCisJLyogTWFrZSBhbGwgZnJlZSBwYWdlcyBzdGFibGUgKi8KKwlsZ2hpCSVyMiwxCisJYnJhc2wJJXIxNCxhcmNoX3NldF9wYWdlX3N0YXRlcworCiAJLyogRGVhY3RpdmF0ZSBEQVQgKi8KIAlzdG5zbQlfX1NGX0VNUFRZKCVyMTUpLDB4ZmIKIApAQCAtMTMzLDYgKzEzNiw2OSBAQAogMjoKIAlwdGxiCQkJCS8qIGZsdXNoIHRsYiAqLwogCisJLyogUmVzZXQgU3lzdGVtICovCisJbGFybAklcjEscmVzdGFydF9lbnRyeQorCWxhcmwJJXIyLC5McmVzdGFydF9kaWFnMzA4X3BzdworCW9nCSVyMSwwKCVyMikKKwlzdGcJJXIxLDAoJXIwKQorCWxhcmwJJXIxLC5MbmV3X3BnbV9jaGVja19wc3cKKwllcHN3CSVyMiwlcjMKKwlzdG0JJXIyLCVyMywwKCVyMSkKKwltdmMJX19MQ19QR01fTkVXX1BTVygxNiwlcjApLDAoJXIxKQorCWxnaGkJJXIwLDAKKwlkaWFnCSVyMCwlcjAsMHgzMDgKK3Jlc3RhcnRfZW50cnk6CisJbGhpCSVyMSwxCisJc2lncAklcjEsJXIwLDB4MTIKKwlzYW02NAorCWxhcmwJJXIxLC5MbmV3X3BnbV9jaGVja19wc3cKKwlscHN3ZQkwKCVyMSkKK3BnbV9jaGVja19lbnRyeToKKworCS8qIFN3aXRjaCB0byBvcmlnaW5hbCBzdXNwZW5kIENQVSAqLworCWxhcmwJJXIxLC5McmVzdW1lX2NwdQkJLyogUmVzdW1lIENQVSBhZGRyZXNzOiByMiAqLworCXN0YXAJMCglcjEpCisJbGxnaAklcjIsMCglcjEpCisJbGdoaQklcjMsMHgxMDAwCisJbGxnaAklcjEsX19MQ19DUFVfQUREUkVTUyglcjMpCS8qIFN1c3BlbmQgQ1BVIGFkZHJlc3M6IHIxICovCisJY2dyCSVyMSwlcjIKKwlqZQlyZXN0b3JlX3JlZ2lzdGVycwkJLyogcjEgPSByMiAtPiBub3RoaW5nIHRvIGRvICovCisJbGFybAklcjQsLkxyZXN0YXJ0X3N1c3BlbmRfcHN3CS8qIFNldCBuZXcgcmVzdGFydCBQU1cgKi8KKwltdmMJX19MQ19SRVNUQVJUX1BTVygxNiwlcjApLDAoJXI0KQorMzoKKwlzaWdwCSVyOSwlcjEsX19TSUdQX0lOSVRJQUxfQ1BVX1JFU0VUCisJYnJjCTgsNGYJLyogYWNjZXB0ZWQgKi8KKwlicmMJMiwzYgkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKworCS8qIFN1c3BlbmQgQ1BVIG5vdCBhdmFpbGFibGUgLT4gcGFuaWMgKi8KKwlsYXJsCSVyMTUsaW5pdF90aHJlYWRfdW5pb24KKwlhaGkJJXIxNSwxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpCisJbGFybAklcjIsLkxwYW5pY19zdHJpbmcKKwlsYXJsCSVyMyxfc2NscF9wcmludF9lYXJseQorCWxnaGkJJXIxLDAKKwlzYW0zMQorCXNpZ3AJJXIxLCVyMCwweDEyCisJYmFzcgklcjE0LCVyMworCWxhcmwJJXIzLC5MZGlzYWJsZWRfd2FpdF8zMQorCWxwc3cJMCglcjMpCis0OgorCS8qIFN3aXRjaCB0byBzdXNwZW5kIENQVSAqLworCXNpZ3AJJXI5LCVyMSxfX1NJR1BfUkVTVEFSVAkvKiBzdGFydCBzdXNwZW5kIENQVSAqLworCWJyYwkyLDRiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCis1OgorCXNpZ3AJJXI5LCVyMixfX1NJR1BfU1RPUAkvKiBzdG9wIHJlc3VtZSAoY3VycmVudCkgQ1BVICovCis2OglqCTZiCisKK3Jlc3RhcnRfc3VzcGVuZDoKKwlsYXJsCSVyMSwuTHJlc3VtZV9jcHUKKwlsbGdoCSVyMiwwKCVyMSkKKzc6CisJc2lncAklcjksJXIyLF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciByZXN1bWUgQ1BVICovCisJYnJjCTIsN2IJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKwl0bWxsCSVyOSwweDQwCQkvKiBUZXN0IGlmIHJlc3VtZSBDUFUgaXMgc3RvcHBlZCAqLworCWp6CTdiCisKK3Jlc3RvcmVfcmVnaXN0ZXJzOgogCS8qIFJlc3RvcmUgcmVnaXN0ZXJzICovCiAJbGdoaQklcjEzLDB4MTAwMAkJLyogJXIxID0gcG9pbnRlciB0byBzYXZlIGFyYWUgKi8KIApAQCAtMTY2LDE5ICsyMzIsMzMgQEAKIAkvKiBQb2ludGVyIHRvIHNhdmUgYXJlYSAqLwogCWxnaGkJJXIxMywweDEwMDAKIAotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBTd2l0Y2ggQ1BVcyAqLwotCWxncgklcjIsJXIxMAkJLyogZ2V0IGNwdSBpZCAqLwotCWxsZ2YJJXIzLDB4MzE4KCVyMTMpCi0JYnJhc2wJJXIxNCxzbXBfc3dpdGNoX2Jvb3RfY3B1X2luX3Jlc3VtZQotI2VuZGlmCiAJLyogUmVzdG9yZSBwcmVmaXggcmVnaXN0ZXIgKi8KIAlzcHgJMHgzMTgoJXIxMykKIAogCS8qIEFjdGl2YXRlIERBVCAqLwogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAogCisJLyogTWFrZSBhbGwgZnJlZSBwYWdlcyB1bnN0YWJsZSAqLworCWxnaGkJJXIyLDAKKwlicmFzbAklcjE0LGFyY2hfc2V0X3BhZ2Vfc3RhdGVzCisKIAkvKiBSZXR1cm4gMCAqLwogCWxtZwklcjYsJXIxNSxTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fU0ZfR1BSUyglcjE1KQogCWxnaGkJJXIyLDAKIAlicgklcjE0CisKKwkuc2VjdGlvbiAuZGF0YS5ub3NhdmUsImF3IixAcHJvZ2JpdHMKKwkuYWxpZ24JOAorLkxkaXNhYmxlZF93YWl0XzMxOgorCS5sb25nICAweDAwMGEwMDAwLDB4MDAwMDAwMDAKKy5McGFuaWNfc3RyaW5nOgorCS5hc2NpegkiUmVzdW1lIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHN1c3BlbmQgQ1BVIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiCisJLmFsaWduCTgKKy5McmVzdGFydF9kaWFnMzA4X3BzdzoKKwkubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAKKy5McmVzdGFydF9zdXNwZW5kX3BzdzoKKwkucXVhZAkweDAwMDAwMDAxODAwMDAwMDAscmVzdGFydF9zdXNwZW5kCisuTG5ld19wZ21fY2hlY2tfcHN3OgorCS5xdWFkCTAscGdtX2NoZWNrX2VudHJ5CisuTHJlc3VtZV9jcHU6CisJLmJ5dGUJMCwwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c19zMzkwLmMgYi9hcmNoL3MzOTAva2VybmVsL3N5c19zMzkwLmMKaW5kZXggYzdhZTRiMS4uZTlkOTRmNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzX3MzOTAuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImVudHJ5LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCBhZDFhY2QyLi4zMGVjYTA3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0xOSw3ICsxOSw3IEBACiBTWVNDQUxMKHN5c19jcmVhdCxzeXNfY3JlYXQsc3lzMzJfY3JlYXRfd3JhcHBlcikKIFNZU0NBTEwoc3lzX2xpbmssc3lzX2xpbmssc3lzMzJfbGlua193cmFwcGVyKQogU1lTQ0FMTChzeXNfdW5saW5rLHN5c191bmxpbmssc3lzMzJfdW5saW5rX3dyYXBwZXIpCQkvKiAxMCAqLwotU1lTQ0FMTChzeXNfZXhlY3ZlLHN5c19leGVjdmUsc3lzMzJfZXhlY3ZlKQorU1lTQ0FMTChzeXNfZXhlY3ZlLHN5c19leGVjdmUsc3lzMzJfZXhlY3ZlX3dyYXBwZXIpCiBTWVNDQUxMKHN5c19jaGRpcixzeXNfY2hkaXIsc3lzMzJfY2hkaXJfd3JhcHBlcikKIFNZU0NBTEwoc3lzX3RpbWUsc3lzX25pX3N5c2NhbGwsc3lzMzJfdGltZV93cmFwcGVyKQkJLyogb2xkIHRpbWUgc3lzY2FsbCAqLwogU1lTQ0FMTChzeXNfbWtub2Qsc3lzX21rbm9kLHN5czMyX21rbm9kX3dyYXBwZXIpCkBAIC0xMjgsNyArMTI4LDcgQEAKIFNZU0NBTEwoc3lzX2lwYyxzeXNfaXBjLHN5czMyX2lwY193cmFwcGVyKQogU1lTQ0FMTChzeXNfZnN5bmMsc3lzX2ZzeW5jLHN5czMyX2ZzeW5jX3dyYXBwZXIpCiBTWVNDQUxMKHN5c19zaWdyZXR1cm4sc3lzX3NpZ3JldHVybixzeXMzMl9zaWdyZXR1cm4pCi1TWVNDQUxMKHN5c19jbG9uZSxzeXNfY2xvbmUsc3lzMzJfY2xvbmUpCQkJLyogMTIwICovCitTWVNDQUxMKHN5c19jbG9uZSxzeXNfY2xvbmUsc3lzX2Nsb25lX3dyYXBwZXIpCQkJLyogMTIwICovCiBTWVNDQUxMKHN5c19zZXRkb21haW5uYW1lLHN5c19zZXRkb21haW5uYW1lLHN5czMyX3NldGRvbWFpbm5hbWVfd3JhcHBlcikKIFNZU0NBTEwoc3lzX25ld3VuYW1lLHN5c19zMzkwX25ld3VuYW1lLHN5czMyX25ld3VuYW1lX3dyYXBwZXIpCiBOSV9TWVNDQUxMCQkJCQkJCS8qIG1vZGlmeV9sZHQgZm9yIGkzODYgKi8KQEAgLTEzNiw4ICsxMzYsOCBAQAogU1lTQ0FMTChzeXNfbXByb3RlY3Qsc3lzX21wcm90ZWN0LHN5czMyX21wcm90ZWN0X3dyYXBwZXIpCS8qIDEyNSAqLwogU1lTQ0FMTChzeXNfc2lncHJvY21hc2ssc3lzX3NpZ3Byb2NtYXNrLGNvbXBhdF9zeXNfc2lncHJvY21hc2tfd3JhcHBlcikKIE5JX1NZU0NBTEwJCQkJCQkJLyogb2xkICJjcmVhdGUgbW9kdWxlIiAqLwotU1lTQ0FMTChzeXNfaW5pdF9tb2R1bGUsc3lzX2luaXRfbW9kdWxlLHN5czMyX2luaXRfbW9kdWxlX3dyYXBwZXIpCi1TWVNDQUxMKHN5c19kZWxldGVfbW9kdWxlLHN5c19kZWxldGVfbW9kdWxlLHN5czMyX2RlbGV0ZV9tb2R1bGVfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2luaXRfbW9kdWxlLHN5c19pbml0X21vZHVsZSxzeXNfaW5pdF9tb2R1bGVfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2RlbGV0ZV9tb2R1bGUsc3lzX2RlbGV0ZV9tb2R1bGUsc3lzX2RlbGV0ZV9tb2R1bGVfd3JhcHBlcikKIE5JX1NZU0NBTEwJCQkJCQkJLyogMTMwOiBvbGQgZ2V0X2tlcm5lbF9zeW1zICovCiBTWVNDQUxMKHN5c19xdW90YWN0bCxzeXNfcXVvdGFjdGwsc3lzMzJfcXVvdGFjdGxfd3JhcHBlcikKIFNZU0NBTEwoc3lzX2dldHBnaWQsc3lzX2dldHBnaWQsc3lzMzJfZ2V0cGdpZF93cmFwcGVyKQpAQCAtMzM5LDQgKzMzOSw0IEBACiBTWVNDQUxMKHN5c19wcmVhZHYsc3lzX3ByZWFkdixjb21wYXRfc3lzX3ByZWFkdl93cmFwcGVyKQogU1lTQ0FMTChzeXNfcHdyaXRldixzeXNfcHdyaXRldixjb21wYXRfc3lzX3B3cml0ZXZfd3JhcHBlcikKIFNZU0NBTEwoc3lzX3J0X3Rnc2lncXVldWVpbmZvLHN5c19ydF90Z3NpZ3F1ZXVlaW5mbyxjb21wYXRfc3lzX3J0X3Rnc2lncXVldWVpbmZvX3dyYXBwZXIpIC8qIDMzMCAqLwotU1lTQ0FMTChzeXNfcGVyZl9jb3VudGVyX29wZW4sc3lzX3BlcmZfY291bnRlcl9vcGVuLHN5c19wZXJmX2NvdW50ZXJfb3Blbl93cmFwcGVyKQorU1lTQ0FMTChzeXNfcGVyZl9ldmVudF9vcGVuLHN5c19wZXJmX2V2ZW50X29wZW4sc3lzX3BlcmZfZXZlbnRfb3Blbl93cmFwcGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggMmMyZjk4My4uNDM0ODZjMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAlpZiAoIWludGkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW50aS0+dHlwZSA9IEtWTV9TMzkwX1BST0dSQU1fSU5UOzsKKwlpbnRpLT50eXBlID0gS1ZNX1MzOTBfUFJPR1JBTV9JTlQ7CiAJaW50aS0+cGdtLmNvZGUgPSBjb2RlOwogCiAJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiaW5qZWN0OiBwcm9ncmFtIGNoZWNrICVkIChmcm9tIGtlcm5lbCkiLCBjb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggMWFiYmFkZC4uNmQ1MDc0NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqICAgIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMDYsNyArMzA2LDcgQEAKIAkgKiBpbnRlcnJ1cHRzIGFnYWluIGFuZCB0aGVuIHNlYXJjaCB0aGUgVk1BcwogCSAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyZXNzKTsKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOwogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAogCXNpX2NvZGUgPSBTRUdWX01BUEVSUjsKQEAgLTM2NiwxMSArMzY2LDExIEBACiAJfQogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXRzay0+bWluX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0KICAgICAgICAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IGM2MzRkZmIuLjc2NTY0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJZGF0YXNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfZWRhdGEgLSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKIAlpbml0c2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbjsKICAgICAgICAgcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVsZGsga2VybmVsIGNvZGUsICVsZGsgcmVzZXJ2ZWQsICVsZGsgZGF0YSwgJWxkayBpbml0KVxuIiwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKICAgICAgICAgICAgICAgICBtYXhfbWFwbnIgPDwgKFBBR0VfU0hJRlQtMTApLAogICAgICAgICAgICAgICAgIGNvZGVzaXplID4+IDEwLAogICAgICAgICAgICAgICAgIHJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BhZ2Utc3RhdGVzLmMgYi9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYwppbmRleCBmOTJlYzIwLi4wOTg5MjNhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYworKysgYi9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYwpAQCAtNTAsMjggKzUwLDY0IEBACiAJCWNtbWFfZmxhZyA9IDA7CiB9CiAKLXZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV91bnN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogewogCWludCBpLCByYzsKIAotCWlmICghY21tYV9mbGFnKQotCQlyZXR1cm47CiAJZm9yIChpID0gMDsgaSA8ICgxIDw8IG9yZGVyKTsgaSsrKQogCQlhc20gdm9sYXRpbGUoIi5pbnNuIHJyZiwweGI5YWIwMDAwLCUwLCUxLCUyLDAiCiAJCQkgICAgIDogIj0mZCIgKHJjKQotCQkJICAgICA6ICJhIiAoKHBhZ2VfdG9fcGZuKHBhZ2UpICsgaSkgPDwgUEFHRV9TSElGVCksCisJCQkgICAgIDogImEiIChwYWdlX3RvX3BoeXMocGFnZSArIGkpKSwKIAkJCSAgICAgICAiaSIgKEVTU0FfU0VUX1VOVVNFRCkpOwogfQogCit2b2lkIGFyY2hfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCit7CisJaWYgKCFjbW1hX2ZsYWcpCisJCXJldHVybjsKKwlzZXRfcGFnZV91bnN0YWJsZShwYWdlLCBvcmRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zdGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgb3JkZXIpOyBpKyspCisJCWFzbSB2b2xhdGlsZSgiLmluc24gcnJmLDB4YjlhYjAwMDAsJTAsJTEsJTIsMCIKKwkJCSAgICAgOiAiPSZkIiAocmMpCisJCQkgICAgIDogImEiIChwYWdlX3RvX3BoeXMocGFnZSArIGkpKSwKKwkJCSAgICAgICAiaSIgKEVTU0FfU0VUX1NUQUJMRSkpOworfQorCiB2b2lkIGFyY2hfYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogewotCWludCBpLCByYzsKKwlpZiAoIWNtbWFfZmxhZykKKwkJcmV0dXJuOworCXNldF9wYWdlX3N0YWJsZShwYWdlLCBvcmRlcik7Cit9CisKK3ZvaWQgYXJjaF9zZXRfcGFnZV9zdGF0ZXMoaW50IG1ha2Vfc3RhYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yZGVyLCB0OworCXN0cnVjdCBsaXN0X2hlYWQgKmw7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IHpvbmUgKnpvbmU7CiAKIAlpZiAoIWNtbWFfZmxhZykKIAkJcmV0dXJuOwotCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBvcmRlcik7IGkrKykKLQkJYXNtIHZvbGF0aWxlKCIuaW5zbiBycmYsMHhiOWFiMDAwMCwlMCwlMSwlMiwwIgotCQkJICAgICA6ICI9JmQiIChyYykKLQkJCSAgICAgOiAiYSIgKChwYWdlX3RvX3BmbihwYWdlKSArIGkpIDw8IFBBR0VfU0hJRlQpLAotCQkJICAgICAgICJpIiAoRVNTQV9TRVRfU1RBQkxFKSk7CisJaWYgKG1ha2Vfc3RhYmxlKQorCQlkcmFpbl9sb2NhbF9wYWdlcyhOVUxMKTsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5sb2NrLCBmbGFncyk7CisJCWZvcl9lYWNoX21pZ3JhdGV0eXBlX29yZGVyKG9yZGVyLCB0KSB7CisJCQlsaXN0X2Zvcl9lYWNoKGwsICZ6b25lLT5mcmVlX2FyZWFbb3JkZXJdLmZyZWVfbGlzdFt0XSkgeworCQkJCXBhZ2UgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBwYWdlLCBscnUpOworCQkJCWlmIChtYWtlX3N0YWJsZSkKKwkJCQkJc2V0X3BhZ2Vfc3RhYmxlKHBhZ2UsIG9yZGVyKTsKKwkJCQllbHNlCisJCQkJCXNldF9wYWdlX3Vuc3RhYmxlKHBhZ2UsIG9yZGVyKTsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFncyk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggYzcwMjE1Mi4uYzYwYmZiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0zMTQsMjEgKzMxNCwxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9lbmFibGVfc2llKTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLSNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19QQUdFQUxMT0MpICYmIGRlZmluZWQoQ09ORklHX0hJQkVSTkFUSU9OKQogYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlpbnQgY2M7CiAKIAlhZGRyID0gcGFnZV90b19waHlzKHBhZ2UpOwotCWFzbSgibHJhICUxLDAoJTEpXG4iCi0JICAgICJpcG0gJTBcbiIKLQkgICAgInNybCAlMCwyOCIKLQkgICAgOiI9ZCIoY2MpLCIrYSIoYWRkcik6OiJjYyIpOworCWFzbSB2b2xhdGlsZSgKKwkJIglscmEJJTEsMCglMSlcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjgiCisJCTogIj1kIiAoY2MpLCAiK2EiIChhZGRyKSA6IDogImNjIik7CiAJcmV0dXJuIGNjID09IDA7CiB9Ci0KLSNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KLSNlbmRpZiAvKiBDT05GSUdfREVCVUdfUEFHRUFMTE9DICovCi0KKyNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gJiYgQ09ORklHX0RFQlVHX1BBR0VBTExPQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBlZTU4MjEwLi5kOTJhNWEyIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMiwxMCArMiwxMSBAQAogI2RlZmluZSBfQVNNX1NDT1JFX1BBR0VfSAogCiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkoMTIpCi0jZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfU0laRQkoX0FDKDEsVUwpIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggM2ExMTIyOC4uNTU5Mzk5OSAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNyw2ICs3LDE1IEBACiAjZGVmaW5lIEtVX1VTRVIJMHgwOAogI2RlZmluZSBLVV9LRVJOCTB4MDAKIAorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgCSgxKQorI2RlZmluZSBUSFJFQURfU0laRSAJCShQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9NQVNLIAkJKFRIUkVBRF9TSVpFIC0gX0FDKDEsVUwpKQorI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTYyLDEyICs3MSw2IEBACiByZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKl9fY3VycmVudF90aHJlYWRfaW5mbyBfX2FzbV9fKCJyMjgiKTsKICNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCV9fY3VycmVudF90aHJlYWRfaW5mbwogCi0vKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiAJKDEpCi0jZGVmaW5lIFRIUkVBRF9TSVpFIAkJKFBBR0VfU0laRSA8PCBUSFJFQURfU0laRV9PUkRFUikKLSNkZWZpbmUgVEhSRUFEX01BU0sgCQkoVEhSRUFEX1NJWkUgLSAxVUwpCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgotCiAjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyhpbmZvKSBrZnJlZShpbmZvKQogCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zY29yZS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmODU1Njk4Li5lZWJjYmFhIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc2NvcmUva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTI0LDYgKzI0LDggQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiBPVVRQVVRfQVJDSChzY29yZSkKIEVOVFJZKF9zdGV4dCkKQEAgLTQ5LDIxICs1MSw5IEBACiAJLiA9IEFMSUdOKDE2KTsKIAlST0RBVEEKIAotCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotCS4gPSBBTElHTigxNik7Ci0JX19leF90YWJsZSA6IHsKLQkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkJKihfX2V4X3RhYmxlKQotCQlfX3N0b3BfX19leF90YWJsZSA9IC47Ci0JfQorCUVYQ0VQVElPTl9UQUJMRSgxNikKIAotCS8qIHdyaXRlYWJsZSAqLwotCS5kYXRhIEFMSUdOICg0MDk2KTogewotCQkqKC5kYXRhLmluaXRfdGFzaykKLQotCQlEQVRBX0RBVEEKLQkJQ09OU1RSVUNUT1JTCi0JfQorCVJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKIAogCS8qIFdlIHdhbnQgdGhlIHNtYWxsIGRhdGEgc2VjdGlvbnMgdG9nZXRoZXIsIHNvIHNpbmdsZS1pbnN0cnVjdGlvbiBvZmZzZXRzCiAJICAgY2FuIGFjY2VzcyB0aGVtIGFsbCwgYW5kIGluaXRpYWxpemVkIGRhdGEgYWxsIGJlZm9yZSB1bmluaXRpYWxpemVkLCBzbwpAQCAtNzIsNDUgKzYyLDE0IEBACiAJLnNkYXRhIDogewogCQkqKC5zZGF0YSkKIAl9Ci0KLQkuID0gQUxJR04oMzIpOwotCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogewotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQotCX0KIAlfZWRhdGEgPSAgLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAKIAkvKiB3aWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLQkuID0gQUxJR04oNDA5Nik7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KKwkuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogCV9faW5pdF9iZWdpbiA9IC47CiAKLQkuID0gQUxJR04oNDA5Nik7Ci0JLmluaXQudGV4dCA6IHsKLQkJX3Npbml0dGV4dCA9IC47Ci0JCUlOSVRfVEVYVAotCQlfZWluaXR0ZXh0ID0gLjsKLQl9Ci0JLmluaXQuZGF0YSA6IHsKLQkJSU5JVF9EQVRBCi0JfQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCi0JLmluaXRjYWxsLmluaXQgOiB7Ci0JCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0JU0VDVVJJVFlfSU5JVAorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKwlJTklUX0RBVEFfU0VDVElPTigxNikKIAogCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZGVkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsIHRvIGRlYWwgd2l0aAogCSAqIHJlZmVyZW5jZXMgZnJvbSAucm9kYXRhCkBAIC0xMjEsMjggKzgwLDEwIEBACiAJLmV4aXQuZGF0YSA6IHsKIAkJRVhJVF9EQVRBCiAJfQotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQotCS5pbml0LnJhbWZzIEFMSUdOKDQwOTYpOiB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLQkJLiA9IEFMSUdOKDQpOwotCQlMT05HKDApOwotCX0KLSNlbmRpZgotCS4gPSBBTElHTig0MDk2KTsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0JX19ic3Nfc3RhcnQgPSAuOwkvKiBCU1MgKi8KLQkuc2JzcyAgOiB7Ci0JCSooLnNic3MpCi0JCSooLnNjb21tb24pCi0JfQotCS5ic3MgOiB7Ci0JCSooLmJzcykKLQkJKihDT01NT04pCi0JfQotCV9fYnNzX3N0b3AgPSAuOworCUJTU19TRUNUSU9OKDAsIDAsIDApCiAJX2VuZCA9IC47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNGRmMzU3MC4uYjk0MDQyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTYsNyArMTYsNyBAQAogCXNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBNTVUKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKLQlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCAzMjdkNDdjLi4yZDA4MDczIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTMxMCw4ICszMTAsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGFwMzI1cnhhX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgYXAzMjVyeGFfY2FtZXJhX2RlbChzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpOworCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyBjYW1lcmFfaW5mbyA9IHsKLQkuaWZhY2UgPSAwLAogCS5mb3JtYXRfbmFtZSA9ICJVWVZZIiwKIAkuZm9ybWF0X2RlcHRoID0gMTYsCiAJLmZvcm1hdCA9IHsKQEAgLTMyMywyNCArMzI1LDQ2IEBACiAJLmJ1c19wYXJhbSA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKIAlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX0RBVEFXSURUSF84LAogCS5zZXRfY2FwdHVyZSA9IGNhbWVyYV9zZXRfY2FwdHVyZSwKKwkubGluayA9IHsKKwkJLmJ1c19pZAkJPSAwLAorCQkuYWRkX2RldmljZQk9IGFwMzI1cnhhX2NhbWVyYV9hZGQsCisJCS5kZWxfZGV2aWNlCT0gYXAzMjVyeGFfY2FtZXJhX2RlbCwKKwkJLm1vZHVsZV9uYW1lCT0gInNvY19jYW1lcmFfcGxhdGZvcm0iLAorCX0sCiB9OwogCitzdGF0aWMgdm9pZCBkdW1teV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2FtZXJhX2RldmljZSA9IHsKIAkubmFtZQkJPSAic29jX2NhbWVyYV9wbGF0Zm9ybSIsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmNhbWVyYV9pbmZvLAorCQkucmVsZWFzZQk9IGR1bW15X3JlbGVhc2UsCiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGNhbWVyYV9zZXR1cCh2b2lkKQorc3RhdGljIGludCBhcDMyNXJ4YV9jYW1lcmFfYWRkKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGNhbWVyYV9wcm9iZSgpID4gMCkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKKwlpZiAoaWNsICE9ICZjYW1lcmFfaW5mby5saW5rIHx8IGNhbWVyYV9wcm9iZSgpIDw9IDApCisJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIDA7CisJY2FtZXJhX2luZm8uZGV2ID0gZGV2OworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY2FtZXJhX2RldmljZSk7CiB9Ci1sYXRlX2luaXRjYWxsKGNhbWVyYV9zZXR1cCk7CiAKK3N0YXRpYyB2b2lkIGFwMzI1cnhhX2NhbWVyYV9kZWwoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsKQoreworCWlmIChpY2wgIT0gJmNhbWVyYV9pbmZvLmxpbmspCisJCXJldHVybjsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKKwltZW1zZXQoJmNhbWVyYV9kZXZpY2UuZGV2LmtvYmosIDAsCisJICAgICAgIHNpemVvZihjYW1lcmFfZGV2aWNlLmRldi5rb2JqKSk7Cit9CiAjZW5kaWYgLyogQ09ORklHX0kyQyAqLwogCiBzdGF0aWMgaW50IG92NzcyNV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQpAQCAtNDE2LDYgKzQ0MCw3IEBACiAJLmZsYWdzCQk9IE9WNzcyWF9GTEFHX1ZGTElQIHwgT1Y3NzJYX0ZMQUdfSEZMSVAsCiAJLmVkZ2VjdHJsCT0gT1Y3NzJYX0FVVE9fRURHRUNUUkwoMHhmLCAwKSwKIAkubGluayA9IHsKKwkJLmJ1c19pZAkJPSAwLAogCQkucG93ZXIJCT0gb3Y3NzI1X3Bvd2VyLAogCQkuYm9hcmRfaW5mbwk9ICZhcDMyNXJ4YV9pMmNfY2FtZXJhWzBdLAogCQkuaTJjX2FkYXB0ZXJfaWQJPSAwLApAQCAtNDIzLDExICs0NDgsMTkgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXAzMjVyeGFfY2FtZXJhID0gewotCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZvdjc3MjVfaW5mby5saW5rLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXAzMjVyeGFfY2FtZXJhW10gPSB7CisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAwLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmb3Y3NzI1X2luZm8ubGluaywKKwkJfSwKKwl9LCB7CisJCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJCS5pZAk9IDEsCisJCS5kZXYJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZjYW1lcmFfaW5mby5saW5rLAorCQl9LAogCX0sCiB9OwogCkBAIC00MzgsNyArNDcxLDggQEAKIAkmY2V1X2RldmljZSwKIAkmbmFuZF9mbGFzaF9kZXZpY2UsCiAJJnNkY2FyZF9jbjNfZGV2aWNlLAotCSZhcDMyNXJ4YV9jYW1lcmEsCisJJmFwMzI1cnhhX2NhbWVyYVswXSwKKwkmYXAzMjVyeGFfY2FtZXJhWzFdLAogfTsKIAogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBhcDMyNXJ4YV9zcGlfZGV2aWNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTZiYjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfX0FTTV9TSF9QRVJGX0NPVU5URVJfSAotCi0vKiBTSCBvbmx5IHN1cHBvcnRzIHNvZnR3YXJlIGNvdW50ZXJzIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpIHt9Ci0KLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVAkwCi0KLSNlbmRpZiAvKiBfX0FTTV9TSF9QRVJGX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWEzMDIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fQVNNX1NIX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfX0FTTV9TSF9QRVJGX0VWRU5UX0gKKworLyogU0ggb25seSBzdXBwb3J0cyBzb2Z0d2FyZSBldmVudHMgdGhyb3VnaCB0aGlzIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpIHt9CisKKyNkZWZpbmUgUEVSRl9FVkVOVF9JTkRFWF9PRkZTRVQJMAorCisjZW5kaWYgLyogX19BU01fU0hfUEVSRl9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAppbmRleCA5MjVkZDQwLi5mM2ZkMWI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKQEAgLTM0NCw3ICszNDQsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzMzCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzM0CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzM1Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzM2CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzNgogCiAjZGVmaW5lIE5SX3N5c2NhbGxzIDMzNwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAppbmRleCAyYjg0YmM5Li4zNDNjZThmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKQEAgLTM4NCw3ICszODQsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzYxCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzYyCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzYzCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzY0CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTM2NAogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc18zMi5TIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHNfMzIuUwppbmRleCAxNmJhMjI1Li4xOWZkMTFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc18zMi5TCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzMyLlMKQEAgLTM1Miw0ICszNTIsNCBAQAogCS5sb25nIHN5c19wcmVhZHYKIAkubG9uZyBzeXNfcHdyaXRldgogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwkvKiAzMzUgKi8KLQkubG9uZyBzeXNfcGVyZl9jb3VudGVyX29wZW4KKwkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc182NC5TIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHNfNjQuUwppbmRleCBhZjZmYjc0Li41YmZkZTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc182NC5TCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzY0LlMKQEAgLTM5MCw0ICszOTAsNCBAQAogCS5sb25nIHN5c19wcmVhZHYKIAkubG9uZyBzeXNfcHdyaXRldgogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwotCS5sb25nIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwppbmRleCA3ODFiNDEzLi40NzUzMDEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaW9fdHJhcHBlZC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCWlmICgocmVncy0+c3IgJiBTUl9JTUFTSykgIT0gU1JfSU1BU0spCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCXBlcmZfc3djb3VudGVyX2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcmVzcyk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCwgaGF2ZSBubyB1c2VyIGNvbnRleHQgb3IgYXJlIHJ1bm5pbmcKQEAgLTIwOCwxMSArMjA4LDExIEBACiAJfQogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXRzay0+bWluX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCBlZGM4NDJmLi44MTczZTM4IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMTg2LDggKzE4Niw2IEBACiAJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9VTkNBQ0hFRCwgX19wYSgmX191bmNhY2hlZF9zdGFydCkpOwogfQogCi1zdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jOwotCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewogCWludCBjb2Rlc2l6ZSwgZGF0YXNpemUsIGluaXRzaXplOwpAQCAtMjI2LDEzICsyMjQsOSBAQAogCWRhdGFzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhIC0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7CiAJaW5pdHNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfZW5kIC0gKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfYmVnaW47CiAKLQlrY2xpc3RfYWRkKCZrY29yZV9tZW0sIF9fdmEoMCksIG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOwotCWtjbGlzdF9hZGQoJmtjb3JlX3ZtYWxsb2MsICh2b2lkICopVk1BTExPQ19TVEFSVCwKLQkJICAgVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKTsKLQogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAiCiAJICAgICAgICIlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkJbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWNvZGVzaXplID4+IDEwLAogCQlkYXRhc2l6ZSA+PiAxMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYwppbmRleCAyZGNjNDg1Li5kZTBiMGU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKKysrIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTExNiw3ICsxMTYsNyBAQAogCS8qIE5vdCBhbiBJTyBhZGRyZXNzLCBzbyByZWVuYWJsZSBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcmVzcyk7CisJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyZXNzKTsKIAogCS8qCiAJICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0IG9yIGhhdmUgbm8gdXNlcgpAQCAtMjAxLDExICsyMDEsMTEgQEAKIAogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXRzay0+bWluX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDg2YjgyMzQuLjk3ZmNhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTI1LDcgKzI1LDcgQEAKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAlzZWxlY3QgUlRDX0NMQVNTCiAJc2VsZWN0IFJUQ19EUlZfTTQ4VDU5Ci0Jc2VsZWN0IEhBVkVfUEVSRl9DT1VOVEVSUworCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCkBAIC00Nyw3ICs0Nyw3IEBACiAJc2VsZWN0IFJUQ19EUlZfQlE0ODAyCiAJc2VsZWN0IFJUQ19EUlZfU1VONFYKIAlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQotCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCiBjb25maWcgQVJDSF9ERUZDT05GSUcKIAlzdHJpbmcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggOTg4MTkyZS4uYzMwMjlhZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTIwLDYgKzIwLDggQEAKIAogI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KICNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworI2RlZmluZSBNQVBfU1RBQ0sJMHgyMDAwMAkJLyogZ2l2ZSBvdXQgYW4gYWRkcmVzcyB0aGF0IGlzIGJlc3Qgc3VpdGVkIGZvciBwcm9jZXNzL3RocmVhZCBzdGFja3MgKi8KKyNkZWZpbmUgTUFQX0hVR0VUTEIJMHg0MDAwMAkJLyogY3JlYXRlIGEgaHVnZSBwYWdlIG1hcHBpbmcgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3YThjYS4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TUEFSQ19QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfX0FTTV9TUEFSQ19QRVJGX0NPVU5URVJfSAotCi1leHRlcm4gdm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCk7Ci0KLSNkZWZpbmUJUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVAkwCi0KLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUwotZXh0ZXJuIHZvaWQgaW5pdF9od19wZXJmX2NvdW50ZXJzKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfY291bnRlcnModm9pZCkJeyB9Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjY2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fQVNNX1NQQVJDX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19QRVJGX0VWRU5UX0gKKworZXh0ZXJuIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKTsKKworI2RlZmluZQlQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkwCisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKK2V4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkJeyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA3MDZkZjY2Li40MmYyMzE2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM5NSw3ICszOTUsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzI0CiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzI1CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzI2Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzI3CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMyNwogCiAjZGVmaW5lIE5SX1NZU0NBTExTCQkzMjgKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmgKaW5kZXggZDRkZTMyZi4uNmNkYmY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oCkBAIC0yNTgsNyArMjU4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdTMyIHZpb19kcmluZ19hdmFpbChzdHJ1Y3QgdmlvX2RyaW5nX3N0YXRlICpkciwKIAkJCQkgIHVuc2lnbmVkIGludCByaW5nX3NpemUpCiB7Ci0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkpOworCU1BWUJFX0JVSUxEX0JVR19PTighaXNfcG93ZXJfb2ZfMihyaW5nX3NpemUpKTsKIAogCXJldHVybiAoZHItPnBlbmRpbmcgLQogCQkoKGRyLT5wcm9kIC0gZHItPmNvbnMpICYgKHJpbmdfc2l6ZSAtIDEpKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCmluZGV4IDk2YWFkMzkuLjViNDdmYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCkBAIC0xMDgsNSArMTA4LDUgQEAKIGF1ZGl0LS0kKENPTkZJR19BVURJVCkgIDo9IGNvbXBhdF9hdWRpdC5vCiBvYmotJChDT05GSUdfQ09NUEFUKSAgICArPSAkKGF1ZGl0LS15KQogCi1wYy0tJChDT05GSUdfUEVSRl9DT1VOVEVSUykgOj0gcGVyZl9jb3VudGVyLm8KK3BjLS0kKENPTkZJR19QRVJGX0VWRU5UUykgOj0gcGVyZl9ldmVudC5vCiBvYmotJChDT05GSUdfU1BBUkM2NCkJKz0gJChwYy0teSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKaW5kZXggOGRhYWIzMy4uOGFiMWQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJCXRpZCA9ICgoYSA8PCBJTUFQX0FJRF9TSElGVCkgfAogCQkJCSAgICAgICAobiA8PCBJTUFQX05JRF9TSElGVCkpOwogCQkJCXRpZCAmPSAoSU1BUF9BSURfU0FGQVJJIHwKLQkJCQkJSU1BUF9OSURfU0FGQVJJKTs7CisJCQkJCUlNQVBfTklEX1NBRkFSSSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQl0aWQgPSBjcHVpZCA8PCBJTUFQX1RJRF9TSElGVDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL25taS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKaW5kZXggMzc4ZWI1My4uYjEyOTYxMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCi0jaW5jbHVkZSA8YXNtL3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGFzbS9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KQEAgLTI2NSw3ICsyNjUsNyBAQAogCQl9CiAJfQogCWlmICghZXJyKQotCQlpbml0X2h3X3BlcmZfY291bnRlcnMoKTsKKwkJaW5pdF9od19wZXJmX2V2ZW50cygpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKaW5kZXggNjhmZjAwMS4uMmQ5NGU3YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3BpbC5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KQEAgLTE1LDcgKzE1LDcgQEAKIAogLyogVGhpcyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgdXNlcnMgb2YgdGhlIHBlcmZvcm1hbmNlCiAgKiBjb3VudGVycy4gIFVzZXJzIHdpbGwgYmUgb3Byb2ZpbGUsIHBzZXVkby1OTUkgd2F0Y2hkb2csIGFuZCB0aGUKLSAqIHBlcmZfY291bnRlciBzdXBwb3J0IGxheWVyLgorICogcGVyZl9ldmVudCBzdXBwb3J0IGxheWVyLgogICovCiAKICNkZWZpbmUgUENSX1NVTjRVX0VOQUJMRQkoUENSX1BJQ19QUklWIHwgUENSX1NUUkFDRSB8IFBDUl9VVFJBQ0UpCkBAIC00MiwxNCArNDIsMTQgQEAKIAogCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCWlycV9lbnRlcigpOwotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCi0JcGVyZl9jb3VudGVyX2RvX3BlbmRpbmcoKTsKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKICNlbmRpZgogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KIAotdm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkKK3ZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQogewogCXNldF9zb2Z0aW50KDEgPDwgUElMX0RFRkVSUkVEX1BDUl9XT1JLKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfY291bnRlci5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9jb3VudGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZGU0MDM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfY291bnRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTU3ICswLDAgQEAKLS8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3Igc3BhcmM2NC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgotICoKLSAqIFRoaXMgY29kZSBpcyBiYXNlZCBhbG1vc3QgZW50aXJlbHkgdXBvbiB0aGUgeDg2IHBlcmYgY291bnRlcgotICogY29kZSwgd2hpY2ggaXM6Ci0gKgotICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgotI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9wY3IuaD4KLQotLyogU3BhcmM2NCBjaGlwcyBoYXZlIHR3byBwZXJmb3JtYW5jZSBjb3VudGVycywgMzItYml0cyBlYWNoLCB3aXRoCi0gKiBvdmVyZmxvdyBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBvbiB0cmFuc2l0aW9uIGZyb20gMHhmZmZmZmZmZiB0byAwLgotICogVGhlIGNvdW50ZXJzIGFyZSBhY2Nlc3NlZCBpbiBvbmUgZ28gdXNpbmcgYSA2NC1iaXQgcmVnaXN0ZXIuCi0gKgotICogQm90aCBjb3VudGVycyBhcmUgY29udHJvbGxlZCB1c2luZyBhIHNpbmdsZSBjb250cm9sIHJlZ2lzdGVyLiAgVGhlCi0gKiBvbmx5IHdheSB0byBzdG9wIGFsbCBzYW1wbGluZyBpcyB0byBjbGVhciBhbGwgb2YgdGhlIGNvbnRleHQgKHVzZXIsCi0gKiBzdXBlcnZpc29yLCBoeXBlcnZpc29yKSBzYW1wbGluZyBlbmFibGUgYml0cy4gIEJ1dCB0aGVzZSBiaXRzIGFwcGx5Ci0gKiB0byBib3RoIGNvdW50ZXJzLCB0aHVzIHRoZSB0d28gY291bnRlcnMgY2FuJ3QgYmUgZW5hYmxlZC9kaXNhYmxlZAotICogaW5kaXZpZHVhbGx5LgotICoKLSAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIGhhcyB0d28gZXZlbnQgZmllbGRzLCBvbmUgZm9yIGVhY2ggb2YgdGhlIHR3bwotICogY291bnRlcnMuICBJdCdzIHRodXMgbmVhcmx5IGltcG9zc2libGUgdG8gaGF2ZSBvbmUgY291bnRlciBnb2luZwotICogd2hpbGUga2VlcGluZyB0aGUgb3RoZXIgb25lIHN0b3BwZWQuICBUaGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8KLSAqIGdldCBvdmVyZmxvdyBpbnRlcnJ1cHRzIGZvciBjb3VudGVycyBub3QgY3VycmVudGx5ICJpbiB1c2UiIGFuZAotICogdGhhdCBjb25kaXRpb24gbXVzdCBiZSBjaGVja2VkIGluIHRoZSBvdmVyZmxvdyBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKiBTbyB3ZSB1c2UgYSBoYWNrLCBpbiB0aGF0IHdlIHByb2dyYW0gaW5hY3RpdmUgY291bnRlcnMgd2l0aCB0aGUKLSAqICJzd19jb3VudDAiIGFuZCAic3dfY291bnQxIiBldmVudHMuICBUaGVzZSBjb3VudCBob3cgbWFueSB0aW1lcwotICogdGhlIGluc3RydWN0aW9uICJzZXRoaSAlaGkoMHhmYzAwMCksICVnMCIgaXMgZXhlY3V0ZWQuICBJdCdzIGFuCi0gKiB1bnVzdWFsIHdheSB0byBlbmNvZGUgYSBOT1AgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdCB0cmlnZ2VyIGluCi0gKiBub3JtYWwgY29kZS4KLSAqLwotCi0jZGVmaW5lIE1BWF9IV0NPVU5URVJTCQkJMgotI2RlZmluZSBNQVhfUEVSSU9ECQkJKCgxVUwgPDwgMzIpIC0gMSkKLQotI2RlZmluZSBQSUNfVVBQRVJfSU5ERVgJCQkwCi0jZGVmaW5lIFBJQ19MT1dFUl9JTkRFWAkJCTEKLQotc3RydWN0IGNwdV9od19jb3VudGVycyB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcgkqY291bnRlcnNbTUFYX0hXQ09VTlRFUlNdOwotCXVuc2lnbmVkIGxvbmcJCXVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKE1BWF9IV0NPVU5URVJTKV07Ci0JdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdDT1VOVEVSUyldOwotCWludCBlbmFibGVkOwotfTsKLURFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfY291bnRlcnMsIGNwdV9od19jb3VudGVycykgPSB7IC5lbmFibGVkID0gMSwgfTsKLQotc3RydWN0IHBlcmZfZXZlbnRfbWFwIHsKLQl1MTYJZW5jb2Rpbmc7Ci0JdTgJcGljX21hc2s7Ci0jZGVmaW5lIFBJQ19OT05FCTB4MDAKLSNkZWZpbmUgUElDX1VQUEVSCTB4MDEKLSNkZWZpbmUgUElDX0xPV0VSCTB4MDIKLX07Ci0KLXN0cnVjdCBzcGFyY19wbXUgewotCWNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcAkqKCpldmVudF9tYXApKGludCk7Ci0JaW50CQkJCW1heF9ldmVudHM7Ci0JaW50CQkJCXVwcGVyX3NoaWZ0OwotCWludAkJCQlsb3dlcl9zaGlmdDsKLQlpbnQJCQkJZXZlbnRfbWFzazsKLQlpbnQJCQkJaHZfYml0OwotCWludAkJCQlpcnFfYml0OwotCWludAkJCQl1cHBlcl9ub3A7Ci0JaW50CQkJCWxvd2VyX25vcDsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgdWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcFtdID0gewotCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAwMDAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAotCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDAwMSwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDB4MDAwOSwgUElDX0xPV0VSIH0sCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMDA5LCBQSUNfVVBQRVIgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnVsdHJhM2lfZXZlbnRfbWFwKGludCBldmVudCkKLXsKLQlyZXR1cm4gJnVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRdOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSB1bHRyYTNpX3BtdSA9IHsKLQkuZXZlbnRfbWFwCT0gdWx0cmEzaV9ldmVudF9tYXAsCi0JLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKHVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXApLAotCS51cHBlcl9zaGlmdAk9IDExLAotCS5sb3dlcl9zaGlmdAk9IDQsCi0JLmV2ZW50X21hc2sJPSAweDNmLAotCS51cHBlcl9ub3AJPSAweDFjLAotCS5sb3dlcl9ub3AJPSAweDE0LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCBuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtdID0gewotCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAyZmYsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAotCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDJmZiwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDB4MDIwOCwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMzAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKLQlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMjAxLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKLQlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXSA9IHsgMHgwMjAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKm5pYWdhcmEyX2V2ZW50X21hcChpbnQgZXZlbnQpCi17Ci0JcmV0dXJuICZuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtldmVudF07Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IG5pYWdhcmEyX3BtdSA9IHsKLQkuZXZlbnRfbWFwCT0gbmlhZ2FyYTJfZXZlbnRfbWFwLAotCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRShuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcCksCi0JLnVwcGVyX3NoaWZ0CT0gMTksCi0JLmxvd2VyX3NoaWZ0CT0gNiwKLQkuZXZlbnRfbWFzawk9IDB4ZmZmLAotCS5odl9iaXQJCT0gMHg4LAotCS5pcnFfYml0CT0gMHgwMywKLQkudXBwZXJfbm9wCT0gMHgyMjAsCi0JLmxvd2VyX25vcAk9IDB4MjIwLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgKnNwYXJjX3BtdSBfX3JlYWRfbW9zdGx5OwotCi1zdGF0aWMgdTY0IGV2ZW50X2VuY29kaW5nKHU2NCBldmVudCwgaW50IGlkeCkKLXsKLQlpZiAoaWR4ID09IFBJQ19VUFBFUl9JTkRFWCkKLQkJZXZlbnQgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7Ci0JZWxzZQotCQlldmVudCA8PD0gc3BhcmNfcG11LT5sb3dlcl9zaGlmdDsKLQlyZXR1cm4gZXZlbnQ7Ci19Ci0KLXN0YXRpYyB1NjQgbWFza19mb3JfaW5kZXgoaW50IGlkeCkKLXsKLQlyZXR1cm4gZXZlbnRfZW5jb2Rpbmcoc3BhcmNfcG11LT5ldmVudF9tYXNrLCBpZHgpOwotfQotCi1zdGF0aWMgdTY0IG5vcF9mb3JfaW5kZXgoaW50IGlkeCkKLXsKLQlyZXR1cm4gZXZlbnRfZW5jb2RpbmcoaWR4ID09IFBJQ19VUFBFUl9JTkRFWCA/Ci0JCQkgICAgICBzcGFyY19wbXUtPnVwcGVyX25vcCA6Ci0JCQkgICAgICBzcGFyY19wbXUtPmxvd2VyX25vcCwgaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9lbmFibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsCi0JCQkJCSAgICBpbnQgaWR4KQotewotCXU2NCB2YWwsIG1hc2sgPSBtYXNrX2Zvcl9pbmRleChpZHgpOwotCi0JdmFsID0gcGNyX29wcy0+cmVhZCgpOwotCXBjcl9vcHMtPndyaXRlKCh2YWwgJiB+bWFzaykgfCBod2MtPmNvbmZpZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywKLQkJCQkJICAgICBpbnQgaWR4KQotewotCXU2NCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKLQl1NjQgbm9wID0gbm9wX2Zvcl9pbmRleChpZHgpOwotCXU2NCB2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7Ci0KLQlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgbm9wKTsKLX0KLQotdm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXU2NCB2YWw7Ci0JaW50IGk7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDE7Ci0JYmFycmllcigpOwotCi0JdmFsID0gcGNyX29wcy0+cmVhZCgpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0NPVU5URVJTOyBpKyspIHsKLQkJc3RydWN0IHBlcmZfY291bnRlciAqY3AgPSBjcHVjLT5jb3VudGVyc1tpXTsKLQkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOwotCi0JCWlmICghY3ApCi0JCQljb250aW51ZTsKLQkJaHdjID0gJmNwLT5odzsKLQkJdmFsIHw9IGh3Yy0+Y29uZmlnX2Jhc2U7Ci0JfQotCi0JcGNyX29wcy0+d3JpdGUodmFsKTsKLX0KLQotdm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQl1NjQgdmFsOwotCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQotCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKLQl2YWwgJj0gfihQQ1JfVVRSQUNFIHwgUENSX1NUUkFDRSB8Ci0JCSBzcGFyY19wbXUtPmh2X2JpdCB8IHNwYXJjX3BtdS0+aXJxX2JpdCk7Ci0JcGNyX29wcy0+d3JpdGUodmFsKTsKLX0KLQotc3RhdGljIHUzMiByZWFkX3BtYyhpbnQgaWR4KQotewotCXU2NCB2YWw7Ci0KLQlyZWFkX3BpYyh2YWwpOwotCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQotCQl2YWwgPj49IDMyOwotCi0JcmV0dXJuIHZhbCAmIDB4ZmZmZmZmZmY7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlX3BtYyhpbnQgaWR4LCB1NjQgdmFsKQotewotCXU2NCBzaGlmdCwgbWFzaywgcGljOwotCi0Jc2hpZnQgPSAwOwotCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQotCQlzaGlmdCA9IDMyOwotCi0JbWFzayA9ICgodTY0KSAweGZmZmZmZmZmKSA8PCBzaGlmdDsKLQl2YWwgPDw9IHNoaWZ0OwotCi0JcmVhZF9waWMocGljKTsKLQlwaWMgJj0gfm1hc2s7Ci0JcGljIHw9IHZhbDsKLQl3cml0ZV9waWMocGljKTsKLX0KLQotc3RhdGljIGludCBzcGFyY19wZXJmX2NvdW50ZXJfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCQkgc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQotewotCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7Ci0JczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7Ci0JCWxlZnQgPSBwZXJpb2Q7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7Ci0JCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7Ci0JCXJldCA9IDE7Ci0JfQotCi0JaWYgKHVubGlrZWx5KGxlZnQgPD0gMCkpIHsKLQkJbGVmdCArPSBwZXJpb2Q7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7Ci0JCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7Ci0JCXJldCA9IDE7Ci0JfQotCWlmIChsZWZ0ID4gTUFYX1BFUklPRCkKLQkJbGVmdCA9IE1BWF9QRVJJT0Q7Ci0KLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7Ci0KLQl3cml0ZV9wbWMoaWR4LCAodTY0KSgtbGVmdCkgJiAweGZmZmZmZmZmKTsKLQotCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHNwYXJjX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0JaW50IGlkeCA9IGh3Yy0+aWR4OwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXNwYXJjX3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOwotCi0JY3B1Yy0+Y291bnRlcnNbaWR4XSA9IGNvdW50ZXI7Ci0Jc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKLQotCXNwYXJjX3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KTsKLQlzcGFyY19wbXVfZW5hYmxlX2NvdW50ZXIoaHdjLCBpZHgpOwotCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1NjQgc3BhcmNfcGVyZl9jb3VudGVyX3VwZGF0ZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSAgICAgc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQotewotCWludCBzaGlmdCA9IDY0IC0gMzI7Ci0JdTY0IHByZXZfcmF3X2NvdW50LCBuZXdfcmF3X2NvdW50OwotCXM2NCBkZWx0YTsKLQotYWdhaW46Ci0JcHJldl9yYXdfY291bnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOwotCW5ld19yYXdfY291bnQgPSByZWFkX3BtYyhpZHgpOwotCi0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCi0JCQkgICAgIG5ld19yYXdfY291bnQpICE9IHByZXZfcmF3X2NvdW50KQotCQlnb3RvIGFnYWluOwotCi0JZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOwotCWRlbHRhID4+PSBzaGlmdDsKLQotCWF0b21pYzY0X2FkZChkZWx0YSwgJmNvdW50ZXItPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKLQotCXJldHVybiBuZXdfcmF3X2NvdW50OwotfQotCi1zdGF0aWMgdm9pZCBzcGFyY19wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQlpbnQgaWR4ID0gaHdjLT5pZHg7Ci0KLQljbGVhcl9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7Ci0Jc3BhcmNfcG11X2Rpc2FibGVfY291bnRlcihod2MsIGlkeCk7Ci0KLQliYXJyaWVyKCk7Ci0KLQlzcGFyY19wZXJmX2NvdW50ZXJfdXBkYXRlKGNvdW50ZXIsIGh3YywgaWR4KTsKLQljcHVjLT5jb3VudGVyc1tpZHhdID0gTlVMTDsKLQljbGVhcl9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOwotCi0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLX0KLQotc3RhdGljIHZvaWQgc3BhcmNfcG11X3JlYWQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0Jc3BhcmNfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCBod2MsIGh3Yy0+aWR4KTsKLX0KLQotc3RhdGljIHZvaWQgc3BhcmNfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0Jc3BhcmNfcG11X2VuYWJsZV9jb3VudGVyKGh3YywgaHdjLT5pZHgpOwotfQotCi1zdGF0aWMgYXRvbWljX3QgYWN0aXZlX2NvdW50ZXJzID0gQVRPTUlDX0lOSVQoMCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKHBtY19ncmFiX211dGV4KTsKLQotdm9pZCBwZXJmX2NvdW50ZXJfZ3JhYl9wbWModm9pZCkKLXsKLQlpZiAoYXRvbWljX2luY19ub3RfemVybygmYWN0aXZlX2NvdW50ZXJzKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcG1jX2dyYWJfbXV0ZXgpOwotCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlX2NvdW50ZXJzKSA9PSAwKSB7Ci0JCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPiAwKSB7Ci0JCQlvbl9lYWNoX2NwdShzdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7Ci0JCQlCVUdfT04oYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICE9IDApOwotCQl9Ci0JCWF0b21pY19pbmMoJmFjdGl2ZV9jb3VudGVycyk7Ci0JfQotCW11dGV4X3VubG9jaygmcG1jX2dyYWJfbXV0ZXgpOwotfQotCi12b2lkIHBlcmZfY291bnRlcl9yZWxlYXNlX3BtYyh2b2lkKQotewotCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZhY3RpdmVfY291bnRlcnMsICZwbWNfZ3JhYl9tdXRleCkpIHsKLQkJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA9PSAwKQotCQkJb25fZWFjaF9jcHUoc3RhcnRfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKLQkJbXV0ZXhfdW5sb2NrKCZwbWNfZ3JhYl9tdXRleCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBod19wZXJmX2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXBlcmZfY291bnRlcl9yZWxlYXNlX3BtYygpOwotfQotCi1zdGF0aWMgaW50IF9faHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIgPSAmY291bnRlci0+YXR0cjsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0JY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwOwotCXU2NCBlbmM7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDwgMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoYXR0ci0+dHlwZSAhPSBQRVJGX1RZUEVfSEFSRFdBUkUpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBlcmZfY291bnRlcl9ncmFiX3BtYygpOwotCWNvdW50ZXItPmRlc3Ryb3kgPSBod19wZXJmX2NvdW50ZXJfZGVzdHJveTsKLQotCS8qIFdlIHNhdmUgdGhlIGVuYWJsZSBiaXRzIGluIHRoZSBjb25maWdfYmFzZS4gIFNvIHRvCi0JICogdHVybiBvZmYgc2FtcGxpbmcganVzdCB3cml0ZSAnY29uZmlnJywgYW5kIHRvIGVuYWJsZQotCSAqIHRoaW5ncyB3cml0ZSAnY29uZmlnIHwgY29uZmlnX2Jhc2UnLgotCSAqLwotCWh3Yy0+Y29uZmlnX2Jhc2UgPSBzcGFyY19wbXUtPmlycV9iaXQ7Ci0JaWYgKCFhdHRyLT5leGNsdWRlX3VzZXIpCi0JCWh3Yy0+Y29uZmlnX2Jhc2UgfD0gUENSX1VUUkFDRTsKLQlpZiAoIWF0dHItPmV4Y2x1ZGVfa2VybmVsKQotCQlod2MtPmNvbmZpZ19iYXNlIHw9IFBDUl9TVFJBQ0U7Ci0JaWYgKCFhdHRyLT5leGNsdWRlX2h2KQotCQlod2MtPmNvbmZpZ19iYXNlIHw9IHNwYXJjX3BtdS0+aHZfYml0OwotCi0JaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJaHdjLT5zYW1wbGVfcGVyaW9kID0gTUFYX1BFUklPRDsKLQkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOwotCX0KLQotCXBtYXAgPSBzcGFyY19wbXUtPmV2ZW50X21hcChhdHRyLT5jb25maWcpOwotCi0JZW5jID0gcG1hcC0+ZW5jb2Rpbmc7Ci0JaWYgKHBtYXAtPnBpY19tYXNrICYgUElDX1VQUEVSKSB7Ci0JCWh3Yy0+aWR4ID0gUElDX1VQUEVSX0lOREVYOwotCQllbmMgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7Ci0JfSBlbHNlIHsKLQkJaHdjLT5pZHggPSBQSUNfTE9XRVJfSU5ERVg7Ci0JCWVuYyA8PD0gc3BhcmNfcG11LT5sb3dlcl9zaGlmdDsKLQl9Ci0KLQlod2MtPmNvbmZpZyB8PSBlbmM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBtdSA9IHsKLQkuZW5hYmxlCQk9IHNwYXJjX3BtdV9lbmFibGUsCi0JLmRpc2FibGUJPSBzcGFyY19wbXVfZGlzYWJsZSwKLQkucmVhZAkJPSBzcGFyY19wbXVfcmVhZCwKLQkudW50aHJvdHRsZQk9IHNwYXJjX3BtdV91bnRocm90dGxlLAotfTsKLQotY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlpbnQgZXJyID0gX19od19wZXJmX2NvdW50ZXJfaW5pdChjb3VudGVyKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBFUlJfUFRSKGVycik7Ci0JcmV0dXJuICZwbXU7Ci19Ci0KLXZvaWQgcGVyZl9jb3VudGVyX3ByaW50X2RlYnVnKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1NjQgcGNyLCBwaWM7Ci0JaW50IGNwdTsKLQotCWlmICghc3BhcmNfcG11KQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlwY3IgPSBwY3Jfb3BzLT5yZWFkKCk7Ci0JcmVhZF9waWMocGljKTsKLQotCXByX2luZm8oIlxuIik7Ci0JcHJfaW5mbygiQ1BVIyVkOiBQQ1JbJTAxNmxseF0gUElDWyUwMTZsbHhdXG4iLAotCQljcHUsIHBjciwgcGljKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBfX2twcm9iZXMgcGVyZl9jb3VudGVyX25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKl9fYXJncykKLXsKLQlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBfX2FyZ3M7Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjOwotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWludCBpZHg7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZhY3RpdmVfY291bnRlcnMpKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgRElFX05NSToKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0JfQotCi0JcmVncyA9IGFyZ3MtPnJlZ3M7Ci0KLQlkYXRhLnJlZ3MgPSByZWdzOwotCWRhdGEuYWRkciA9IDA7Ci0KLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9IV0NPVU5URVJTOyBpZHgrKykgewotCQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gY3B1Yy0+Y291bnRlcnNbaWR4XTsKLQkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOwotCQl1NjQgdmFsOwotCi0JCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaHdjID0gJmNvdW50ZXItPmh3OwotCQl2YWwgPSBzcGFyY19wZXJmX2NvdW50ZXJfdXBkYXRlKGNvdW50ZXIsIGh3YywgaWR4KTsKLQkJaWYgKHZhbCAmICgxVUxMIDw8IDMxKSkKLQkJCWNvbnRpbnVlOwotCi0JCWRhdGEucGVyaW9kID0gY291bnRlci0+aHcubGFzdF9wZXJpb2Q7Ci0JCWlmICghc3BhcmNfcGVyZl9jb3VudGVyX3NldF9wZXJpb2QoY291bnRlciwgaHdjLCBpZHgpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHBlcmZfY291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCAxLCAmZGF0YSkpCi0JCQlzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKLQl9Ci0KLQlyZXR1cm4gTk9USUZZX1NUT1A7Ci19Ci0KLXN0YXRpYyBfX3JlYWRfbW9zdGx5IHN0cnVjdCBub3RpZmllcl9ibG9jayBwZXJmX2NvdW50ZXJfbm1pX25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsCQk9IHBlcmZfY291bnRlcl9ubWlfaGFuZGxlciwKLX07Ci0KLXN0YXRpYyBib29sIF9faW5pdCBzdXBwb3J0ZWRfcG11KHZvaWQpCi17Ci0JaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTNpIikpIHsKLQkJc3BhcmNfcG11ID0gJnVsdHJhM2lfcG11OwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJuaWFnYXJhMiIpKSB7Ci0JCXNwYXJjX3BtdSA9ICZuaWFnYXJhMl9wbXU7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKQotewotCXByX2luZm8oIlBlcmZvcm1hbmNlIGNvdW50ZXJzOiAiKTsKLQotCWlmICghc3VwcG9ydGVkX3BtdSgpKSB7Ci0JCXByX2NvbnQoIk5vIHN1cHBvcnQgZm9yIFBNVSB0eXBlICclcydcbiIsIHNwYXJjX3BtdV90eXBlKTsKLQkJcmV0dXJuOwotCX0KLQotCXByX2NvbnQoIlN1cHBvcnRlZCBQTVUgdHlwZSBpcyAnJXMnXG4iLCBzcGFyY19wbXVfdHlwZSk7Ci0KLQkvKiBBbGwgc3BhcmM2NCBQTVVzIGN1cnJlbnRseSBoYXZlIDIgY291bnRlcnMuICBCdXQgdGhpcyBzaW1wbGUKLQkgKiBkcml2ZXIgb25seSBzdXBwb3J0cyBvbmUgYWN0aXZlIGNvdW50ZXIgYXQgYSB0aW1lLgotCSAqLwotCXBlcmZfbWF4X2NvdW50ZXJzID0gMTsKLQotCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcGVyZl9jb3VudGVyX25taV9ub3RpZmllcik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2YTFiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMCwwICsxLDU1NiBAQAorLyogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCBmb3Igc3BhcmM2NC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBhbG1vc3QgZW50aXJlbHkgdXBvbiB0aGUgeDg2IHBlcmYgZXZlbnQKKyAqIGNvZGUsIHdoaWNoIGlzOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSmFzd2luZGVyIFNpbmdoIFJhanB1dAorICogIENvcHlyaWdodCAoQykgMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuLCBSb2JlcnQgUmljaHRlcgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL3Bjci5oPgorCisvKiBTcGFyYzY0IGNoaXBzIGhhdmUgdHdvIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCAzMi1iaXRzIGVhY2gsIHdpdGgKKyAqIG92ZXJmbG93IGludGVycnVwdHMgZ2VuZXJhdGVkIG9uIHRyYW5zaXRpb24gZnJvbSAweGZmZmZmZmZmIHRvIDAuCisgKiBUaGUgY291bnRlcnMgYXJlIGFjY2Vzc2VkIGluIG9uZSBnbyB1c2luZyBhIDY0LWJpdCByZWdpc3Rlci4KKyAqCisgKiBCb3RoIGNvdW50ZXJzIGFyZSBjb250cm9sbGVkIHVzaW5nIGEgc2luZ2xlIGNvbnRyb2wgcmVnaXN0ZXIuICBUaGUKKyAqIG9ubHkgd2F5IHRvIHN0b3AgYWxsIHNhbXBsaW5nIGlzIHRvIGNsZWFyIGFsbCBvZiB0aGUgY29udGV4dCAodXNlciwKKyAqIHN1cGVydmlzb3IsIGh5cGVydmlzb3IpIHNhbXBsaW5nIGVuYWJsZSBiaXRzLiAgQnV0IHRoZXNlIGJpdHMgYXBwbHkKKyAqIHRvIGJvdGggY291bnRlcnMsIHRodXMgdGhlIHR3byBjb3VudGVycyBjYW4ndCBiZSBlbmFibGVkL2Rpc2FibGVkCisgKiBpbmRpdmlkdWFsbHkuCisgKgorICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgaGFzIHR3byBldmVudCBmaWVsZHMsIG9uZSBmb3IgZWFjaCBvZiB0aGUgdHdvCisgKiBjb3VudGVycy4gIEl0J3MgdGh1cyBuZWFybHkgaW1wb3NzaWJsZSB0byBoYXZlIG9uZSBjb3VudGVyIGdvaW5nCisgKiB3aGlsZSBrZWVwaW5nIHRoZSBvdGhlciBvbmUgc3RvcHBlZC4gIFRoZXJlZm9yZSBpdCBpcyBwb3NzaWJsZSB0bworICogZ2V0IG92ZXJmbG93IGludGVycnVwdHMgZm9yIGNvdW50ZXJzIG5vdCBjdXJyZW50bHkgImluIHVzZSIgYW5kCisgKiB0aGF0IGNvbmRpdGlvbiBtdXN0IGJlIGNoZWNrZWQgaW4gdGhlIG92ZXJmbG93IGludGVycnVwdCBoYW5kbGVyLgorICoKKyAqIFNvIHdlIHVzZSBhIGhhY2ssIGluIHRoYXQgd2UgcHJvZ3JhbSBpbmFjdGl2ZSBjb3VudGVycyB3aXRoIHRoZQorICogInN3X2NvdW50MCIgYW5kICJzd19jb3VudDEiIGV2ZW50cy4gIFRoZXNlIGNvdW50IGhvdyBtYW55IHRpbWVzCisgKiB0aGUgaW5zdHJ1Y3Rpb24gInNldGhpICVoaSgweGZjMDAwKSwgJWcwIiBpcyBleGVjdXRlZC4gIEl0J3MgYW4KKyAqIHVudXN1YWwgd2F5IHRvIGVuY29kZSBhIE5PUCBhbmQgdGhlcmVmb3JlIHdpbGwgbm90IHRyaWdnZXIgaW4KKyAqIG5vcm1hbCBjb2RlLgorICovCisKKyNkZWZpbmUgTUFYX0hXRVZFTlRTCQkJMgorI2RlZmluZSBNQVhfUEVSSU9ECQkJKCgxVUwgPDwgMzIpIC0gMSkKKworI2RlZmluZSBQSUNfVVBQRVJfSU5ERVgJCQkwCisjZGVmaW5lIFBJQ19MT1dFUl9JTkRFWAkJCTEKKworc3RydWN0IGNwdV9od19ldmVudHMgeworCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbTUFYX0hXRVZFTlRTXTsKKwl1bnNpZ25lZCBsb25nCQl1c2VkX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdFVkVOVFMpXTsKKwl1bnNpZ25lZCBsb25nCQlhY3RpdmVfbWFza1tCSVRTX1RPX0xPTkdTKE1BWF9IV0VWRU5UUyldOworCWludCBlbmFibGVkOworfTsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfZXZlbnRzLCBjcHVfaHdfZXZlbnRzKSA9IHsgLmVuYWJsZWQgPSAxLCB9OworCitzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgeworCXUxNgllbmNvZGluZzsKKwl1OAlwaWNfbWFzazsKKyNkZWZpbmUgUElDX05PTkUJMHgwMAorI2RlZmluZSBQSUNfVVBQRVIJMHgwMQorI2RlZmluZSBQSUNfTE9XRVIJMHgwMgorfTsKKworc3RydWN0IHNwYXJjX3BtdSB7CisJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwCSooKmV2ZW50X21hcCkoaW50KTsKKwlpbnQJCQkJbWF4X2V2ZW50czsKKwlpbnQJCQkJdXBwZXJfc2hpZnQ7CisJaW50CQkJCWxvd2VyX3NoaWZ0OworCWludAkJCQlldmVudF9tYXNrOworCWludAkJCQlodl9iaXQ7CisJaW50CQkJCWlycV9iaXQ7CisJaW50CQkJCXVwcGVyX25vcDsKKwlpbnQJCQkJbG93ZXJfbm9wOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCB1bHRyYTNpX3BlcmZtb25fZXZlbnRfbWFwW10gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10gPSB7IDB4MDAwMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMDAxLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSA9IHsgMHgwMDA5LCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdID0geyAweDAwMDksIFBJQ19VUFBFUiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqdWx0cmEzaV9ldmVudF9tYXAoaW50IGV2ZW50X2lkKQoreworCXJldHVybiAmdWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IHVsdHJhM2lfcG11ID0geworCS5ldmVudF9tYXAJPSB1bHRyYTNpX2V2ZW50X21hcCwKKwkubWF4X2V2ZW50cwk9IEFSUkFZX1NJWkUodWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcCksCisJLnVwcGVyX3NoaWZ0CT0gMTEsCisJLmxvd2VyX3NoaWZ0CT0gNCwKKwkuZXZlbnRfbWFzawk9IDB4M2YsCisJLnVwcGVyX25vcAk9IDB4MWMsCisJLmxvd2VyX25vcAk9IDB4MTQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwIG5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwW10gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10gPSB7IDB4MDJmZiwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMmZmLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSA9IHsgMHgwMjA4LCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdID0geyAweDAzMDIsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0geyAweDAyMDEsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdID0geyAweDAyMDIsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqbmlhZ2FyYTJfZXZlbnRfbWFwKGludCBldmVudF9pZCkKK3sKKwlyZXR1cm4gJm5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50X2lkXTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgbmlhZ2FyYTJfcG11ID0geworCS5ldmVudF9tYXAJPSBuaWFnYXJhMl9ldmVudF9tYXAsCisJLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKG5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwKSwKKwkudXBwZXJfc2hpZnQJPSAxOSwKKwkubG93ZXJfc2hpZnQJPSA2LAorCS5ldmVudF9tYXNrCT0gMHhmZmYsCisJLmh2X2JpdAkJPSAweDgsCisJLmlycV9iaXQJPSAweDAzLAorCS51cHBlcl9ub3AJPSAweDIyMCwKKwkubG93ZXJfbm9wCT0gMHgyMjAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSAqc3BhcmNfcG11IF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyB1NjQgZXZlbnRfZW5jb2RpbmcodTY0IGV2ZW50X2lkLCBpbnQgaWR4KQoreworCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQorCQlldmVudF9pZCA8PD0gc3BhcmNfcG11LT51cHBlcl9zaGlmdDsKKwllbHNlCisJCWV2ZW50X2lkIDw8PSBzcGFyY19wbXUtPmxvd2VyX3NoaWZ0OworCXJldHVybiBldmVudF9pZDsKK30KKworc3RhdGljIHU2NCBtYXNrX2Zvcl9pbmRleChpbnQgaWR4KQoreworCXJldHVybiBldmVudF9lbmNvZGluZyhzcGFyY19wbXUtPmV2ZW50X21hc2ssIGlkeCk7Cit9CisKK3N0YXRpYyB1NjQgbm9wX2Zvcl9pbmRleChpbnQgaWR4KQoreworCXJldHVybiBldmVudF9lbmNvZGluZyhpZHggPT0gUElDX1VQUEVSX0lOREVYID8KKwkJCSAgICAgIHNwYXJjX3BtdS0+dXBwZXJfbm9wIDoKKwkJCSAgICAgIHNwYXJjX3BtdS0+bG93ZXJfbm9wLCBpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkJCQkgICAgaW50IGlkeCkKK3sKKwl1NjQgdmFsLCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKKworCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgaHdjLT5jb25maWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKKwkJCQkJICAgICBpbnQgaWR4KQoreworCXU2NCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKKwl1NjQgbm9wID0gbm9wX2Zvcl9pbmRleChpZHgpOworCXU2NCB2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7CisKKwlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgbm9wKTsKK30KKwordm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdTY0IHZhbDsKKwlpbnQgaTsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljcHVjLT5lbmFibGVkID0gMTsKKwliYXJyaWVyKCk7CisKKwl2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXRVZFTlRTOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmNwID0gY3B1Yy0+ZXZlbnRzW2ldOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghY3ApCisJCQljb250aW51ZTsKKwkJaHdjID0gJmNwLT5odzsKKwkJdmFsIHw9IGh3Yy0+Y29uZmlnX2Jhc2U7CisJfQorCisJcGNyX29wcy0+d3JpdGUodmFsKTsKK30KKwordm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWw7CisKKwlpZiAoIWNwdWMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCWNwdWMtPmVuYWJsZWQgPSAwOworCisJdmFsID0gcGNyX29wcy0+cmVhZCgpOworCXZhbCAmPSB+KFBDUl9VVFJBQ0UgfCBQQ1JfU1RSQUNFIHwKKwkJIHNwYXJjX3BtdS0+aHZfYml0IHwgc3BhcmNfcG11LT5pcnFfYml0KTsKKwlwY3Jfb3BzLT53cml0ZSh2YWwpOworfQorCitzdGF0aWMgdTMyIHJlYWRfcG1jKGludCBpZHgpCit7CisJdTY0IHZhbDsKKworCXJlYWRfcGljKHZhbCk7CisJaWYgKGlkeCA9PSBQSUNfVVBQRVJfSU5ERVgpCisJCXZhbCA+Pj0gMzI7CisKKwlyZXR1cm4gdmFsICYgMHhmZmZmZmZmZjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcG1jKGludCBpZHgsIHU2NCB2YWwpCit7CisJdTY0IHNoaWZ0LCBtYXNrLCBwaWM7CisKKwlzaGlmdCA9IDA7CisJaWYgKGlkeCA9PSBQSUNfVVBQRVJfSU5ERVgpCisJCXNoaWZ0ID0gMzI7CisKKwltYXNrID0gKCh1NjQpIDB4ZmZmZmZmZmYpIDw8IHNoaWZ0OworCXZhbCA8PD0gc2hpZnQ7CisKKwlyZWFkX3BpYyhwaWMpOworCXBpYyAmPSB+bWFzazsKKwlwaWMgfD0gdmFsOworCXdyaXRlX3BpYyhwaWMpOworfQorCitzdGF0aWMgaW50IHNwYXJjX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJCSBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CisJCWxlZnQgPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKHVubGlrZWx5KGxlZnQgPD0gMCkpIHsKKwkJbGVmdCArPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCWlmIChsZWZ0ID4gTUFYX1BFUklPRCkKKwkJbGVmdCA9IE1BWF9QRVJJT0Q7CisKKwlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CisKKwl3cml0ZV9wbWMoaWR4LCAodTY0KSgtbGVmdCkgJiAweGZmZmZmZmZmKTsKKworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3BhcmNfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCisJCXJldHVybiAtRUFHQUlOOworCisJc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCisJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBldmVudDsKKwlzZXRfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOworCisJc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisJc3BhcmNfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7CisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IHNwYXJjX3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJaW50IHNoaWZ0ID0gNjQgLSAzMjsKKwl1NjQgcHJldl9yYXdfY291bnQsIG5ld19yYXdfY291bnQ7CisJczY0IGRlbHRhOworCithZ2FpbjoKKwlwcmV2X3Jhd19jb3VudCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJbmV3X3Jhd19jb3VudCA9IHJlYWRfcG1jKGlkeCk7CisKKwlpZiAoYXRvbWljNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKKwkJCSAgICAgbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpCisJCWdvdG8gYWdhaW47CisKKwlkZWx0YSA9IChuZXdfcmF3X2NvdW50IDw8IHNoaWZ0KSAtIChwcmV2X3Jhd19jb3VudCA8PCBzaGlmdCk7CisJZGVsdGEgPj49IHNoaWZ0OworCisJYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKworCXJldHVybiBuZXdfcmF3X2NvdW50OworfQorCitzdGF0aWMgdm9pZCBzcGFyY19wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwljbGVhcl9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisJc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCisJYmFycmllcigpOworCisJc3BhcmNfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwljcHVjLT5ldmVudHNbaWR4XSA9IE5VTEw7CisJY2xlYXJfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKTsKKworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgc3BhcmNfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXNwYXJjX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKK30KKworc3RhdGljIHZvaWQgc3BhcmNfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoaHdjLCBod2MtPmlkeCk7Cit9CisKK3N0YXRpYyBhdG9taWNfdCBhY3RpdmVfZXZlbnRzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBtY19ncmFiX211dGV4KTsKKwordm9pZCBwZXJmX2V2ZW50X2dyYWJfcG1jKHZvaWQpCit7CisJaWYgKGF0b21pY19pbmNfbm90X3plcm8oJmFjdGl2ZV9ldmVudHMpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwbWNfZ3JhYl9tdXRleCk7CisJaWYgKGF0b21pY19yZWFkKCZhY3RpdmVfZXZlbnRzKSA9PSAwKSB7CisJCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPiAwKSB7CisJCQlvbl9lYWNoX2NwdShzdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CisJCQlCVUdfT04oYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICE9IDApOworCQl9CisJCWF0b21pY19pbmMoJmFjdGl2ZV9ldmVudHMpOworCX0KKwltdXRleF91bmxvY2soJnBtY19ncmFiX211dGV4KTsKK30KKwordm9pZCBwZXJmX2V2ZW50X3JlbGVhc2VfcG1jKHZvaWQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmFjdGl2ZV9ldmVudHMsICZwbWNfZ3JhYl9tdXRleCkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA9PSAwKQorCQkJb25fZWFjaF9jcHUoc3RhcnRfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbWNfZ3JhYl9tdXRleCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBod19wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXBlcmZfZXZlbnRfcmVsZWFzZV9wbWMoKTsKK30KKworc3RhdGljIGludCBfX2h3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9ICZldmVudC0+YXR0cjsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwljb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnBtYXA7CisJdTY0IGVuYzsKKworCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChhdHRyLT50eXBlICE9IFBFUkZfVFlQRV9IQVJEV0FSRSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGF0dHItPmNvbmZpZyA+PSBzcGFyY19wbXUtPm1heF9ldmVudHMpCisJCXJldHVybiAtRUlOVkFMOworCisJcGVyZl9ldmVudF9ncmFiX3BtYygpOworCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OworCisJLyogV2Ugc2F2ZSB0aGUgZW5hYmxlIGJpdHMgaW4gdGhlIGNvbmZpZ19iYXNlLiAgU28gdG8KKwkgKiB0dXJuIG9mZiBzYW1wbGluZyBqdXN0IHdyaXRlICdjb25maWcnLCBhbmQgdG8gZW5hYmxlCisJICogdGhpbmdzIHdyaXRlICdjb25maWcgfCBjb25maWdfYmFzZScuCisJICovCisJaHdjLT5jb25maWdfYmFzZSA9IHNwYXJjX3BtdS0+aXJxX2JpdDsKKwlpZiAoIWF0dHItPmV4Y2x1ZGVfdXNlcikKKwkJaHdjLT5jb25maWdfYmFzZSB8PSBQQ1JfVVRSQUNFOworCWlmICghYXR0ci0+ZXhjbHVkZV9rZXJuZWwpCisJCWh3Yy0+Y29uZmlnX2Jhc2UgfD0gUENSX1NUUkFDRTsKKwlpZiAoIWF0dHItPmV4Y2x1ZGVfaHYpCisJCWh3Yy0+Y29uZmlnX2Jhc2UgfD0gc3BhcmNfcG11LT5odl9iaXQ7CisKKwlpZiAoIWh3Yy0+c2FtcGxlX3BlcmlvZCkgeworCQlod2MtPnNhbXBsZV9wZXJpb2QgPSBNQVhfUEVSSU9EOworCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisJfQorCisJcG1hcCA9IHNwYXJjX3BtdS0+ZXZlbnRfbWFwKGF0dHItPmNvbmZpZyk7CisKKwllbmMgPSBwbWFwLT5lbmNvZGluZzsKKwlpZiAocG1hcC0+cGljX21hc2sgJiBQSUNfVVBQRVIpIHsKKwkJaHdjLT5pZHggPSBQSUNfVVBQRVJfSU5ERVg7CisJCWVuYyA8PD0gc3BhcmNfcG11LT51cHBlcl9zaGlmdDsKKwl9IGVsc2UgeworCQlod2MtPmlkeCA9IFBJQ19MT1dFUl9JTkRFWDsKKwkJZW5jIDw8PSBzcGFyY19wbXUtPmxvd2VyX3NoaWZ0OworCX0KKworCWh3Yy0+Y29uZmlnIHw9IGVuYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcG11ID0geworCS5lbmFibGUJCT0gc3BhcmNfcG11X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHNwYXJjX3BtdV9kaXNhYmxlLAorCS5yZWFkCQk9IHNwYXJjX3BtdV9yZWFkLAorCS51bnRocm90dGxlCT0gc3BhcmNfcG11X3VudGhyb3R0bGUsCit9OworCitjb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWludCBlcnIgPSBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCXJldHVybiAmcG11OworfQorCit2b2lkIHBlcmZfZXZlbnRfcHJpbnRfZGVidWcodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBwY3IsIHBpYzsKKwlpbnQgY3B1OworCisJaWYgKCFzcGFyY19wbXUpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXBjciA9IHBjcl9vcHMtPnJlYWQoKTsKKwlyZWFkX3BpYyhwaWMpOworCisJcHJfaW5mbygiXG4iKTsKKwlwcl9pbmZvKCJDUFUjJWQ6IFBDUlslMDE2bGx4XSBQSUNbJTAxNmxseF1cbiIsCisJCWNwdSwgcGNyLCBwaWMpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBwZXJmX2V2ZW50X25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKl9fYXJncykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBfX2FyZ3M7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlpbnQgaWR4OworCisJaWYgKCFhdG9taWNfcmVhZCgmYWN0aXZlX2V2ZW50cykpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBESUVfTk1JOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9CisKKwlyZWdzID0gYXJncy0+cmVnczsKKworCWRhdGEuYWRkciA9IDA7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfSFdFVkVOVFM7IGlkeCsrKSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCQl1NjQgdmFsOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaHdjID0gJmV2ZW50LT5odzsKKwkJdmFsID0gc3BhcmNfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwkJaWYgKHZhbCAmICgxVUxMIDw8IDMxKSkKKwkJCWNvbnRpbnVlOworCisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIXNwYXJjX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpKQorCQkJY29udGludWU7CisKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKKwkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7Cit9CisKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHN0cnVjdCBub3RpZmllcl9ibG9jayBwZXJmX2V2ZW50X25taV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAkJPSBwZXJmX2V2ZW50X25taV9oYW5kbGVyLAorfTsKKworc3RhdGljIGJvb2wgX19pbml0IHN1cHBvcnRlZF9wbXUodm9pZCkKK3sKKwlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhM2kiKSkgeworCQlzcGFyY19wbXUgPSAmdWx0cmEzaV9wbXU7CisJCXJldHVybiB0cnVlOworCX0KKwlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgIm5pYWdhcmEyIikpIHsKKwkJc3BhcmNfcG11ID0gJm5pYWdhcmEyX3BtdTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBfX2luaXQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKQoreworCXByX2luZm8oIlBlcmZvcm1hbmNlIGV2ZW50czogIik7CisKKwlpZiAoIXN1cHBvcnRlZF9wbXUoKSkgeworCQlwcl9jb250KCJObyBzdXBwb3J0IGZvciBQTVUgdHlwZSAnJXMnXG4iLCBzcGFyY19wbXVfdHlwZSk7CisJCXJldHVybjsKKwl9CisKKwlwcl9jb250KCJTdXBwb3J0ZWQgUE1VIHR5cGUgaXMgJyVzJ1xuIiwgc3BhcmNfcG11X3R5cGUpOworCisJLyogQWxsIHNwYXJjNjQgUE1VcyBjdXJyZW50bHkgaGF2ZSAyIGV2ZW50cy4gIEJ1dCB0aGlzIHNpbXBsZQorCSAqIGRyaXZlciBvbmx5IHN1cHBvcnRzIG9uZSBhY3RpdmUgZXZlbnQgYXQgYSB0aW1lLgorCSAqLworCXBlcmZfbWF4X2V2ZW50cyA9IDE7CisKKwlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnBlcmZfZXZlbnRfbm1pX25vdGlmaWVyKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUwppbmRleCAwNDE4MTU3N2MuLjBmMTY1OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKQEAgLTgyLDUgKzgyLDUgQEAKIC8qMzEwKi8JLmxvbmcgc3lzX3V0aW1lbnNhdCwgc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBzeXNfZmFsbG9jYXRlCiAvKjMxNSovCS5sb25nIHN5c190aW1lcmZkX3NldHRpbWUsIHN5c190aW1lcmZkX2dldHRpbWUsIHN5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLmxvbmcgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBzeXNfcHJlYWR2Ci0vKjMyNSovCS5sb25nIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorLyozMjUqLwkubG9uZyBzeXNfcHdyaXRldiwgc3lzX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcGVyZl9ldmVudF9vcGVuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwppbmRleCA5MWIwNmI3Li4wMDk4MjVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCkBAIC04Myw3ICs4Myw3IEBACiAvKjMxMCovCS53b3JkIGNvbXBhdF9zeXNfdXRpbWVuc2F0LCBjb21wYXRfc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBjb21wYXRfc3lzX2ZhbGxvY2F0ZQogCS53b3JkIGNvbXBhdF9zeXNfdGltZXJmZF9zZXR0aW1lLCBjb21wYXRfc3lzX3RpbWVyZmRfZ2V0dGltZSwgY29tcGF0X3N5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLndvcmQgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBjb21wYXRfc3lzX3ByZWFkdgotCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLndvcmQgY29tcGF0X3N5c19wd3JpdGV2LCBjb21wYXRfc3lzX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcGVyZl9ldmVudF9vcGVuCiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKQEAgLTE1OCw0ICsxNTgsNCBAQAogLyozMTAqLwkud29yZCBzeXNfdXRpbWVuc2F0LCBzeXNfc2lnbmFsZmQsIHN5c190aW1lcmZkX2NyZWF0ZSwgc3lzX2V2ZW50ZmQsIHN5c19mYWxsb2NhdGUKIAkud29yZCBzeXNfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lLCBzeXNfc2lnbmFsZmQ0LCBzeXNfZXZlbnRmZDIsIHN5c19lcG9sbF9jcmVhdGUxCiAvKjMyMCovCS53b3JkIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgc3lzX3ByZWFkdgotCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2V2ZW50X29wZW4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMKaW5kZXggNTQxMTRhZC4uZGM3YzNiMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCQkJcmVzZXJ2ZWRwYWdlcysrOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglZGsga2VybmVsIGNvZGUsICVkayByZXNlcnZlZCwgJWRrIGRhdGEsICVkayBpbml0LCAlbGRrIGhpZ2htZW0pXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKIAkgICAgICAgY29kZXBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgcmVzZXJ2ZWRwYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggZjExNDgxMy4uYTc0MjQ1YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTUzMyw3ICs1MzMsNyBAQAogCQkgICAgIGNoYXIgKiplcnJvcl9vdXQpCiB7CiAJY2hhciAqZW5kOwotCWludCBuLCBlcnIgPSAtRUlOVkFMOzsKKwlpbnQgbiwgZXJyID0gLUVJTlZBTDsKIAogCW4gPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmQsIDApOwogCWlmIChlbmQgPT0gc3RyKSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IDhmMDVkNGQuLjYzNWQxNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogI2RlZmluZSBNQVhfREVWICgxNikKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB1YmRfYmxvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHViZF9ibG9wcyA9IHsKICAgICAgICAgLm93bmVyCQk9IFRISVNfTU9EVUxFLAogICAgICAgICAub3BlbgkJPSB1YmRfb3BlbiwKICAgICAgICAgLnJlbGVhc2UJPSB1YmRfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMzEzZWJiOC4uZmIzYzA1YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEsMjUgKzEgQEAKLS8qIChjKSAyMDA0IGN3QGYwMGYub3JnLCBHUEx2MiBibGFoIGJsYWggKi8KLQotI2lmbmRlZiBfX0FTTV9VTV9IQVJESVJRX0gKLSNkZWZpbmUgX19BU01fVU1fSEFSRElSUV9ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLS8qIE5PVEU6IFdoZW4gU01QIHdvcmtzIGFnYWluIHdlIG1pZ2h0IHdhbnQgdG8gbWFrZSB0aGlzCi0gKiBfX19fY2FjaGVsaW5lX2FsaWduZWQgb3IgbWF5YmUgdXNlIHBlcl9jcHUgc3RhdGU/IC0tY3cgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgotCi0vKiBBcyB0aGlzIHdvdWxkIGJlIHZlcnkgc3RyYW5nZSBmb3IgVU1MIHRvIGdldCB3ZSBCVUcoKSBhZnRlciB0aGUKLSAqIHByaW50ay4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50ayhLRVJOX0VSUiAidW5leHBlY3RlZCBJUlEgJTAyeFxuIiwgaXJxKTsKLQlCVUcoKTsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX1VNX0hBUkRJUlFfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcHRyYWNlX3VzZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcHRyYWNlX3VzZXIuaAppbmRleCA0YmNlNmUwLi43ZmQ4NTM5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3B0cmFjZV91c2VyLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9wdHJhY2VfdXNlci5oCkBAIC0yOSw3ICsyOSw3IEBACiAgKiByZWNvbXBpbGF0aW9uLiBTbywgd2UgdXNlIFBUUkFDRV9PTERTRVRPUFRJT05TIGluIFVNTC4KICAqIFdlIGFsc28gd2FudCB0byBiZSBhYmxlIHRvIGJ1aWxkIHRoZSBrZXJuZWwgb24gMi40LCB3aGljaCBkb2Vzbid0CiAgKiBoYXZlIFBUUkFDRV9PTERTRVRPUFRJT05TLiBTbywgaWYgaXQgaXMgbWlzc2luZywgd2UgZGVjbGFyZQotICogUFRSQUNFX09MRFNFVE9QVElPTlMgdG8gdG8gYmUgdGhlIHNhbWUgYXMgUFRSQUNFX1NFVE9QVElPTlMuCisgKiBQVFJBQ0VfT0xEU0VUT1BUSU9OUyB0byBiZSB0aGUgc2FtZSBhcyBQVFJBQ0VfU0VUT1BUSU9OUy4KICAqCiAgKiBPbiBhcmNoaXRlY3R1cmVzLCB0aGF0IHN0YXJ0IHRvIHN1cHBvcnQgUFRSQUNFX09fVFJBQ0VTWVNHT09EIG9uCiAgKiBsaW51eCAyLjYsIFBUUkFDRV9PTERTRVRPUFRJT05TIG5ldmVyIGlzIGRlZmluZWQsIGFuZCBhbHNvIGlzbid0CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9tZW0uYyBiL2FyY2gvdW0va2VybmVsL21lbS5jCmluZGV4IDYxZDdlNjEuLmE1ZDVlNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL21lbS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJbnVtX3BoeXNwYWdlcyA9IHRvdGFscmFtX3BhZ2VzOwogCW1heF9wZm4gPSB0b3RhbHJhbV9wYWdlczsKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsgYXZhaWxhYmxlXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSk7CisJICAgICAgIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCkpOwogCWttYWxsb2Nfb2sgPSAxOwogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL21tdS5jCmluZGV4IDBjZDlhN2EuLjhiZmQxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYwpAQCAtMzgsMTAgKzM4LDEwIEBACiAJKnB0ZSA9IHB0ZV9ta3JlYWQoKnB0ZSk7CiAJcmV0dXJuIDA7CiAKLSBvdXRfcG1kOgotCXB1ZF9mcmVlKG1tLCBwdWQpOwogIG91dF9wdGU6CiAJcG1kX2ZyZWUobW0sIHBtZCk7Cisgb3V0X3BtZDoKKwlwdWRfZnJlZShtbSwgcHVkKTsKICBvdXQ6CiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jIGIvYXJjaC91bS9vcy1MaW51eC9oZWxwZXIuYwppbmRleCAzMDg2MGI4Li5iNmIxMDk2IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlICJvcy5oIgogI2luY2x1ZGUgInVtX21hbGxvYy5oIgogI2luY2x1ZGUgInVzZXIuaCIKLSNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KIAogc3RydWN0IGhlbHBlcl9kYXRhIHsKIAl2b2lkICgqcHJlX2V4ZWMpKHZvaWQqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDUxYzU5MDEuLjkzNjk4NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjQsNyArMjQsNyBAQAogCXNlbGVjdCBIQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKLQlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTIGlmICghTTM4NiAmJiAhTTQ4NikKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUyBpZiAoIU0zODYgJiYgIU00ODYpCiAJc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UCiAJc2VsZWN0IEhBVkVfS1BST0JFUwogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgpAQCAtMTIwNCw2ICsxMjA0LDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTlVNQSAmJiBYODZfMzIKIAorY29uZmlnIEFSQ0hfUFJPQ19LQ09SRV9URVhUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBST0NfS0NPUkUKKwogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfNjQKQEAgLTE2NjIsNiArMTY2Niw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9hY3BpL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zZmkvS2NvbmZpZyIKKwogY29uZmlnIFg4Nl9BUE1fQk9PVAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTE4NTcsNyArMTg2Myw3IEBACiAKIGNvbmZpZyBQQ0lfTU1DT05GSUcKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfMzIgJiYgUENJICYmIEFDUEkgJiYgKFBDSV9HT01NQ09ORklHIHx8IFBDSV9HT0FOWSkKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kgJiYgKEFDUEkgfHwgU0ZJKSAmJiAoUENJX0dPTU1DT05GSUcgfHwgUENJX0dPQU5ZKQogCiBjb25maWcgUENJX09MUEMKIAlkZWZfYm9vbCB5CkBAIC0xODk1LDcgKzE5MDEsNyBAQAogY29uZmlnIERNQVJfQlJPS0VOX0dGWF9XQQogCWRlZl9ib29sIG4KIAlwcm9tcHQgIldvcmthcm91bmQgYnJva2VuIGdyYXBoaWNzIGRyaXZlcnMgKGdvaW5nIGF3YXkgc29vbikiCi0JZGVwZW5kcyBvbiBETUFSCisJZGVwZW5kcyBvbiBETUFSICYmIEJST0tFTgogCS0tLWhlbHAtLS0KIAkgIEN1cnJlbnQgR3JhcGhpY3MgZHJpdmVycyB0ZW5kIHRvIHVzZSBwaHlzaWNhbCBhZGRyZXNzCiAJICBmb3IgRE1BIGFuZCBhdm9pZCB1c2luZyBETUEgQVBJcy4gU2V0dGluZyB0aGlzIGNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggYmEzMzFiZi4uNzQ2MTljNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC04MzEsNSArODMxLDUgQEAKIAkucXVhZCBjb21wYXRfc3lzX3ByZWFkdgogCS5xdWFkIGNvbXBhdF9zeXNfcHdyaXRldgogCS5xdWFkIGNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogMzM1ICovCi0JLnF1YWQgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLnF1YWQgc3lzX3BlcmZfZXZlbnRfb3BlbgogaWEzMl9zeXNjYWxsX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAyMGQxNDY1Li40NTE4ZGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC0xNDQsNyArMTQ0LDYgQEAKIAogI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCiAKLSNkZWZpbmUgYWNwaV9kaXNhYmxlZCAxCiAjZGVmaW5lIGFjcGlfbGFwaWMgMAogI2RlZmluZSBhY3BpX2lvYXBpYyAwCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ub2lycV9zZXQodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggYzZkMjFiMS4uNDc0ZDgwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtNjYsNiArNjYsMTkgQEAKIH0KIAogLyoKKyAqIFdpdGggODI0ODlEWCB3ZSBjYW4ndCByZWx5IG9uIGFwaWMgZmVhdHVyZSBiaXQKKyAqIHJldHJpZXZlZCB2aWEgY3B1aWQgYnV0IHN0aWxsIGhhdmUgdG8gZGVhbCB3aXRoCisgKiBzdWNoIGFuIGFwaWMgY2hpcCBzbyB3ZSBhc3N1bWUgdGhhdCBTTVAgY29uZmlndXJhdGlvbgorICogaXMgZm91bmQgZnJvbSBNUCB0YWJsZSAoNjRiaXQgY2FzZSB1c2VzIEFDUEkgbW9zdGx5CisgKiB3aGljaCBzZXQgc21wIHByZXNlbmNlIGZsYWcgYXMgd2VsbCBzbyB3ZSBhcmUgc2FmZQorICogdG8gdXNlIHRoaXMgaGVscGVyIHRvbykuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhcGljX2Zyb21fc21wX2NvbmZpZyh2b2lkKQoreworCXJldHVybiBzbXBfZm91bmRfY29uZmlnICYmICFkaXNhYmxlX2FwaWM7Cit9CisKKy8qCiAgKiBCYXNpYyBmdW5jdGlvbnMgYWNjZXNzaW5nIEFQSUNzLgogICovCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKaW5kZXggNWUzZjIwNC4uZjU2OTNjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaApAQCAtNDksNyArNDksNyBAQAogQlVJTERfSU5URVJSVVBUKGVycm9yX2ludGVycnVwdCxFUlJPUl9BUElDX1ZFQ1RPUikKIEJVSUxEX0lOVEVSUlVQVChzcHVyaW91c19pbnRlcnJ1cHQsU1BVUklPVVNfQVBJQ19WRUNUT1IpCiAKLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogQlVJTERfSU5URVJSVVBUKHBlcmZfcGVuZGluZ19pbnRlcnJ1cHQsIExPQ0FMX1BFTkRJTkdfVkVDVE9SKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YjdjOTMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfQVNNX1g4Nl9QRVJGX0NPVU5URVJfSAotCi0vKgotICogUGVyZm9ybWFuY2UgY291bnRlciBodyBkZXRhaWxzOgotICovCi0KLSNkZWZpbmUgWDg2X1BNQ19NQVhfR0VORVJJQwkJCQkJOAotI2RlZmluZSBYODZfUE1DX01BWF9GSVhFRAkJCQkJMwotCi0jZGVmaW5lIFg4Nl9QTUNfSURYX0dFTkVSSUMJCQkJICAgICAgICAwCi0jZGVmaW5lIFg4Nl9QTUNfSURYX0ZJWEVECQkJCSAgICAgICAzMgotI2RlZmluZSBYODZfUE1DX0lEWF9NQVgJCQkJCSAgICAgICA2NAotCi0jZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAJCQkgICAgICAweGMxCi0jZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjEJCQkgICAgICAweGMyCi0KLSNkZWZpbmUgTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAJCQkgICAgIDB4MTg2Ci0jZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwxCQkJICAgICAweDE4NwotCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFCQkJICAoMSA8PCAyMikKLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0lOVAkJCSAgKDEgPDwgMjApCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUwkJCSAgKDEgPDwgMTcpCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1IJCQkgICgxIDw8IDE2KQotCi0vKgotICogSW5jbHVkZXMgZXZlbnRzZWwgYW5kIHVuaXQgbWFzayBhcyB3ZWxsOgotICovCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVF9NQVNLCQkJCSAgICAweGZmZmYKLQotI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfU0VMCQkgICAgICAweDNjCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19VTUFTSwkJKDB4MDAgPDwgOCkKLSNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYIAkJIDAKLSNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1BSRVNFTlQgXAotCQkoMSA8PCAoQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYKSkKLQotI2RlZmluZSBBUkNIX1BFUkZNT05fQlJBTkNIX01JU1NFU19SRVRJUkVECQkJIDYKLQotLyoKLSAqIEludGVsICJBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmciIENQVUlECi0gKiBkZXRlY3Rpb24vZW51bWVyYXRpb24gZGV0YWlsczoKLSAqLwotdW5pb24gY3B1aWQxMF9lYXggewotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCB2ZXJzaW9uX2lkOjg7Ci0JCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM6ODsKLQkJdW5zaWduZWQgaW50IGJpdF93aWR0aDo4OwotCQl1bnNpZ25lZCBpbnQgbWFza19sZW5ndGg6ODsKLQl9IHNwbGl0OwotCXVuc2lnbmVkIGludCBmdWxsOwotfTsKLQotdW5pb24gY3B1aWQxMF9lZHggewotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBudW1fY291bnRlcnNfZml4ZWQ6NDsKLQkJdW5zaWduZWQgaW50IHJlc2VydmVkOjI4OwotCX0gc3BsaXQ7Ci0JdW5zaWduZWQgaW50IGZ1bGw7Ci19OwotCi0KLS8qCi0gKiBGaXhlZC1wdXJwb3NlIHBlcmZvcm1hbmNlIGNvdW50ZXJzOgotICovCi0KLS8qCi0gKiBBbGwgMyBmaXhlZC1tb2RlIFBNQ3MgYXJlIGNvbmZpZ3VyZWQgdmlhIHRoaXMgc2luZ2xlIE1TUjoKLSAqLwotI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMCQkJMHgzOGQKLQotLyoKLSAqIFRoZSBjb3VudHMgYXJlIGF2YWlsYWJsZSBpbiB0aHJlZSBzZXBhcmF0ZSBNU1JzOgotICovCi0KLS8qIEluc3RyX1JldGlyZWQuQW55OiAqLwotI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAJCQkweDMwOQotI2RlZmluZSBYODZfUE1DX0lEWF9GSVhFRF9JTlNUUlVDVElPTlMJCQkoWDg2X1BNQ19JRFhfRklYRUQgKyAwKQotCi0vKiBDUFVfQ0xLX1VuaGFsdGVkLkNvcmU6ICovCi0jZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMQkJCTB4MzBhCi0jZGVmaW5lIFg4Nl9QTUNfSURYX0ZJWEVEX0NQVV9DWUNMRVMJCQkoWDg2X1BNQ19JRFhfRklYRUQgKyAxKQotCi0vKiBDUFVfQ0xLX1VuaGFsdGVkLlJlZjogKi8KLSNkZWZpbmUgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIyCQkJMHgzMGIKLSNkZWZpbmUgWDg2X1BNQ19JRFhfRklYRURfQlVTX0NZQ0xFUwkJCShYODZfUE1DX0lEWF9GSVhFRCArIDIpCi0KLS8qCi0gKiBXZSBtb2RlbCBCVFMgdHJhY2luZyBhcyBhbm90aGVyIGZpeGVkLW1vZGUgUE1DLgotICoKLSAqIFdlIGNob29zZSBhIHZhbHVlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZpeGVkIGNvdW50ZXIgcmFuZ2UsIHNpbmNlIGxvd2VyCi0gKiB2YWx1ZXMgYXJlIHVzZWQgYnkgYWN0dWFsIGZpeGVkIGNvdW50ZXJzIGFuZCBoaWdoZXIgdmFsdWVzIGFyZSB1c2VkCi0gKiB0byBpbmRpY2F0ZSBvdGhlciBvdmVyZmxvdyBjb25kaXRpb25zIGluIHRoZSBQRVJGX0dMT0JBTF9TVEFUVVMgbXNyLgotICovCi0jZGVmaW5lIFg4Nl9QTUNfSURYX0ZJWEVEX0JUUwkJCQkoWDg2X1BNQ19JRFhfRklYRUQgKyAxNikKLQotCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLWV4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcnNfbGFwaWNfaW5pdCh2b2lkKTsKLQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUCQkJMAotCi0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyc19sYXBpY19pbml0KHZvaWQpCXsgfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9QRVJGX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkN2NlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTAsMCArMSwxMDggQEAKKyNpZm5kZWYgX0FTTV9YODZfUEVSRl9FVkVOVF9ICisjZGVmaW5lIF9BU01fWDg2X1BFUkZfRVZFTlRfSAorCisvKgorICogUGVyZm9ybWFuY2UgZXZlbnQgaHcgZGV0YWlsczoKKyAqLworCisjZGVmaW5lIFg4Nl9QTUNfTUFYX0dFTkVSSUMJCQkJCTgKKyNkZWZpbmUgWDg2X1BNQ19NQVhfRklYRUQJCQkJCTMKKworI2RlZmluZSBYODZfUE1DX0lEWF9HRU5FUklDCQkJCSAgICAgICAgMAorI2RlZmluZSBYODZfUE1DX0lEWF9GSVhFRAkJCQkgICAgICAgMzIKKyNkZWZpbmUgWDg2X1BNQ19JRFhfTUFYCQkJCQkgICAgICAgNjQKKworI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwCQkJICAgICAgMHhjMQorI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIxCQkJICAgICAgMHhjMgorCisjZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwCQkJICAgICAweDE4NgorI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMQkJCSAgICAgMHgxODcKKworI2RlZmluZSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRQkJCSAgKDEgPDwgMjIpCisjZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9JTlQJCQkgICgxIDw8IDIwKQorI2RlZmluZSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MJCQkgICgxIDw8IDE3KQorI2RlZmluZSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSCQkJICAoMSA8PCAxNikKKworLyoKKyAqIEluY2x1ZGVzIGV2ZW50c2VsIGFuZCB1bml0IG1hc2sgYXMgd2VsbDoKKyAqLworI2RlZmluZSBBUkNIX1BFUkZNT05fRVZFTlRfTUFTSwkJCQkgICAgMHhmZmZmCisKKyNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1NFTAkJICAgICAgMHgzYworI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfVU1BU0sJCSgweDAwIDw8IDgpCisjZGVmaW5lIEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19JTkRFWCAJCSAwCisjZGVmaW5lIEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19QUkVTRU5UIFwKKwkJKDEgPDwgKEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19JTkRFWCkpCisKKyNkZWZpbmUgQVJDSF9QRVJGTU9OX0JSQU5DSF9NSVNTRVNfUkVUSVJFRAkJCSA2CisKKy8qCisgKiBJbnRlbCAiQXJjaGl0ZWN0dXJhbCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIiBDUFVJRAorICogZGV0ZWN0aW9uL2VudW1lcmF0aW9uIGRldGFpbHM6CisgKi8KK3VuaW9uIGNwdWlkMTBfZWF4IHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgdmVyc2lvbl9pZDo4OworCQl1bnNpZ25lZCBpbnQgbnVtX2V2ZW50czo4OworCQl1bnNpZ25lZCBpbnQgYml0X3dpZHRoOjg7CisJCXVuc2lnbmVkIGludCBtYXNrX2xlbmd0aDo4OworCX0gc3BsaXQ7CisJdW5zaWduZWQgaW50IGZ1bGw7Cit9OworCit1bmlvbiBjcHVpZDEwX2VkeCB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50IG51bV9ldmVudHNfZml4ZWQ6NDsKKwkJdW5zaWduZWQgaW50IHJlc2VydmVkOjI4OworCX0gc3BsaXQ7CisJdW5zaWduZWQgaW50IGZ1bGw7Cit9OworCisKKy8qCisgKiBGaXhlZC1wdXJwb3NlIHBlcmZvcm1hbmNlIGV2ZW50czoKKyAqLworCisvKgorICogQWxsIDMgZml4ZWQtbW9kZSBQTUNzIGFyZSBjb25maWd1cmVkIHZpYSB0aGlzIHNpbmdsZSBNU1I6CisgKi8KKyNkZWZpbmUgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTAkJCTB4MzhkCisKKy8qCisgKiBUaGUgY291bnRzIGFyZSBhdmFpbGFibGUgaW4gdGhyZWUgc2VwYXJhdGUgTVNSczoKKyAqLworCisvKiBJbnN0cl9SZXRpcmVkLkFueTogKi8KKyNkZWZpbmUgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwCQkJMHgzMDkKKyNkZWZpbmUgWDg2X1BNQ19JRFhfRklYRURfSU5TVFJVQ1RJT05TCQkJKFg4Nl9QTUNfSURYX0ZJWEVEICsgMCkKKworLyogQ1BVX0NMS19VbmhhbHRlZC5Db3JlOiAqLworI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjEJCQkweDMwYQorI2RlZmluZSBYODZfUE1DX0lEWF9GSVhFRF9DUFVfQ1lDTEVTCQkJKFg4Nl9QTUNfSURYX0ZJWEVEICsgMSkKKworLyogQ1BVX0NMS19VbmhhbHRlZC5SZWY6ICovCisjZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMgkJCTB4MzBiCisjZGVmaW5lIFg4Nl9QTUNfSURYX0ZJWEVEX0JVU19DWUNMRVMJCQkoWDg2X1BNQ19JRFhfRklYRUQgKyAyKQorCisvKgorICogV2UgbW9kZWwgQlRTIHRyYWNpbmcgYXMgYW5vdGhlciBmaXhlZC1tb2RlIFBNQy4KKyAqCisgKiBXZSBjaG9vc2UgYSB2YWx1ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBmaXhlZCBldmVudCByYW5nZSwgc2luY2UgbG93ZXIKKyAqIHZhbHVlcyBhcmUgdXNlZCBieSBhY3R1YWwgZml4ZWQgZXZlbnRzIGFuZCBoaWdoZXIgdmFsdWVzIGFyZSB1c2VkCisgKiB0byBpbmRpY2F0ZSBvdGhlciBvdmVyZmxvdyBjb25kaXRpb25zIGluIHRoZSBQRVJGX0dMT0JBTF9TVEFUVVMgbXNyLgorICovCisjZGVmaW5lIFg4Nl9QTUNfSURYX0ZJWEVEX0JUUwkJCQkoWDg2X1BNQ19JRFhfRklYRUQgKyAxNikKKworCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCitleHRlcm4gdm9pZCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudHNfbGFwaWNfaW5pdCh2b2lkKTsKKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkJCTAKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50c19sYXBpY19pbml0KHZvaWQpCXsgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QRVJGX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmgKaW5kZXggYzg2ZjQ1Mi4uYWU5MDdlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmgKQEAgLTY1LDcgKzY1LDYgQEAKIAljYXNlIDQ6CiAJCSooaW50ICopdG8gPSAqKGludCAqKWZyb207CiAJCXJldHVybiB0bzsKLQogCWNhc2UgMzoKIAkJKihzaG9ydCAqKXRvID0gKihzaG9ydCAqKWZyb207CiAJCSooKGNoYXIgKil0byArIDIpID0gKigoY2hhciAqKWZyb20gKyAyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAppbmRleCBkODJmMzliLi44ZDMzYmM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEFjY2VzcyB0byB1c2VyIHN5c3RlbSBjYWxsIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMTYsMTMgKzE2LDEzIEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAotc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorLyoKKyAqIE9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIG9yaWdfYXggYXJlIG1lYW5pbmdmdWwsIHNvIHdlIHJldHVybiBpbnQuCisgKiBUaGlzIGltcG9ydGFudGx5IGlnbm9yZXMgdGhlIGhpZ2ggYml0cyBvbiA2NC1iaXQsIHNvIGNvbXBhcmlzb25zCisgKiBzaWduLWV4dGVuZCB0aGUgbG93IDMyIGJpdHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JLyoKLQkgKiBXZSBhbHdheXMgc2lnbi1leHRlbmQgYSAtMSB2YWx1ZSBiZWluZyBzZXQgaGVyZSwKLQkgKiBzbyB0aGlzIGlzIGFsd2F5cyBlaXRoZXIgLTFMIG9yIGEgc3lzY2FsbCBudW1iZXIuCi0JICovCiAJcmV0dXJuIHJlZ3MtPm9yaWdfYXg7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaAppbmRleCA1ZTA2MjU5Li42MzJmYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCkBAIC0zMyw3ICszMyw3IEBACiAgKiBDb3B5IGRhdGEgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4gIENhbGxlciBtdXN0IGNoZWNrCiAgKiB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqIFRoZSBjYWxsZXIgc2hvdWxkIGFsc28gbWFrZSBzdXJlIGhlIHBpbnMgdGhlIHVzZXIgc3BhY2UgYWRkcmVzcwotICogc28gdGhhdCB0aGUgd2UgZG9uJ3QgcmVzdWx0IGluIHBhZ2UgZmF1bHQgYW5kIHNsZWVwLgorICogc28gdGhhdCB3ZSBkb24ndCByZXN1bHQgaW4gcGFnZSBmYXVsdCBhbmQgc2xlZXAuCiAgKgogICogSGVyZSB3ZSBzcGVjaWFsLWNhc2UgMSwgMiBhbmQgNC1ieXRlIGNvcHlfKl91c2VyIGludm9jYXRpb25zLiAgT24gYSBmYXVsdAogICogd2UgcmV0dXJuIHRoZSBpbml0aWFsIHJlcXVlc3Qgc2l6ZSAoMSwgMiBvciA0KSwgYXMgY29weV8qX3VzZXIgc2hvdWxkIGRvLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAppbmRleCA4ZGVhYWRhLi42ZmIzYzIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaApAQCAtMzQxLDcgKzM0MSw3IEBACiAjZGVmaW5lIF9fTlJfcHJlYWR2CQkzMzMKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzMzQKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzMzUKLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkzMzYKKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzM2CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKaW5kZXggYjlmM2M2MC4uOGQzYWQwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKQEAgLTY1OSw4ICs2NTksOCBAQAogX19TWVNDQUxMKF9fTlJfcHdyaXRldiwgc3lzX3B3cml0ZXYpCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JCQkyOTcKIF9fU1lTQ0FMTChfX05SX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8pCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JCQkyOTgKLV9fU1lTQ0FMTChfX05SX3BlcmZfY291bnRlcl9vcGVuLCBzeXNfcGVyZl9jb3VudGVyX29wZW4pCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCQkJMjk4CitfX1NZU0NBTEwoX19OUl9wZXJmX2V2ZW50X29wZW4sIHN5c19wZXJmX2V2ZW50X29wZW4pCiAKICNpZm5kZWYgX19OT19TVFVCUwogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCA3N2E2ODUwLi4wNGViNmM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CkBAIC0yNTgsMTMgKzI1OSwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2dsb2JhbF9tbXIzMihpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCSB1bnNpZ25lZCBsb25nIHZhbCkKIHsKLQkqdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MocG5vZGUsIG9mZnNldCkgPSB2YWw7CisJd3JpdGVxKHZhbCwgdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MocG5vZGUsIG9mZnNldCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9nbG9iYWxfbW1yMzIoaW50IHBub2RlLAogCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXJldHVybiAqdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MocG5vZGUsIG9mZnNldCk7CisJcmV0dXJuIHJlYWRxKHV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKHBub2RlLCBvZmZzZXQpKTsKIH0KIAogLyoKQEAgLTI4MSwxMyArMjgyLDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfZ2xvYmFsX21tcjY0KGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJCQkJdW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKHBub2RlLCBvZmZzZXQpID0gdmFsOworCXdyaXRlcSh2YWwsIHV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKHBub2RlLCBvZmZzZXQpKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X3JlYWRfZ2xvYmFsX21tcjY0KGludCBwbm9kZSwKIAkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQlyZXR1cm4gKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKHBub2RlLCBvZmZzZXQpOworCXJldHVybiByZWFkcSh1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSk7CiB9CiAKIC8qCkBAIC0zMDEsMjIgKzMwMiwyMiBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9sb2NhbF9tbXIodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0JcmV0dXJuICp1dl9sb2NhbF9tbXJfYWRkcmVzcyhvZmZzZXQpOworCXJldHVybiByZWFkcSh1dl9sb2NhbF9tbXJfYWRkcmVzcyhvZmZzZXQpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2xvY2FsX21tcih1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JKnV2X2xvY2FsX21tcl9hZGRyZXNzKG9mZnNldCkgPSB2YWw7CisJd3JpdGVxKHZhbCwgdXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB1dl9yZWFkX2xvY2FsX21tcjgodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0JcmV0dXJuICooKHVuc2lnbmVkIGNoYXIgKil1dl9sb2NhbF9tbXJfYWRkcmVzcyhvZmZzZXQpKTsKKwlyZXR1cm4gcmVhZGIodXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9sb2NhbF9tbXI4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbCkKIHsKLQkqKCh1bnNpZ25lZCBjaGFyICopdXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSkgPSB2YWw7CisJd3JpdGViKHZhbCwgdXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSk7CiB9CiAKIC8qCkBAIC00MjIsNyArNDIzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAogCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8Ci0JCQkoKGFwaWNpZCAmIDB4M2YpIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAorCQkJKChhcGljaWQpIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAogCQkJKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA0YmE0MTliLi5kOGU1ZDBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCkBAIC01Niw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkJKz0gc3RhY2t0cmFjZS5vCiBvYmoteQkJCQkrPSBjcHUvCiBvYmoteQkJCQkrPSBhY3BpLworb2JqLSQoQ09ORklHX1NGSSkJCSs9IHNmaS5vCiBvYmoteQkJCQkrPSByZWJvb3Qubwogb2JqLSQoQ09ORklHX01DQSkJCSs9IG1jYV8zMi5vCiBvYmotJChDT05GSUdfWDg2X01TUikJCSs9IG1zci5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggYTM0NjAxZi4uODk0YWE5NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtMTQsNyArMTQsNyBAQAogICoJTWlrYWVsIFBldHRlcnNzb24JOglQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGlfcG10bXIuaD4KQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCi0jaW5jbHVkZSA8YXNtL3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGFzbS9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC02Miw3ICs2Miw3IEBACiAvKgogICogVGhlIGhpZ2hlc3QgQVBJQyBJRCBzZWVuIGR1cmluZyBlbnVtZXJhdGlvbi4KICAqCi0gKiBUaGlzIGRldGVybWluZXMgdGhlIG1lc3NhZ2luZyBwcm90b2NvbCB3ZSBjYW4gdXNlOiBpZiBhbGwgQVBJQyBJRHMKKyAqIE9uIEFNRCwgdGhpcyBkZXRlcm1pbmVzIHRoZSBtZXNzYWdpbmcgcHJvdG9jb2wgd2UgY2FuIHVzZTogaWYgYWxsIEFQSUMgSURzCiAgKiBhcmUgaW4gdGhlIDAgLi4uIDcgcmFuZ2UsIHRoZW4gd2UgY2FuIHVzZSBsb2dpY2FsIGFkZHJlc3Npbmcgd2hpY2gKICAqIGhhcyBzb21lIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMgKGJldHRlciBicm9hZGNhc3RpbmcpLgogICoKQEAgLTk3OSw3ICs5NzksNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNwdV9oYXNfYXBpYykKKwlpZiAoIWNwdV9oYXNfYXBpYyAmJiAhYXBpY19mcm9tX3NtcF9jb25maWcoKSkKIAkJcmV0dXJuOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTE4OSw3ICsxMTg5LDcgQEAKIAkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CiAJfQogI2VuZGlmCi0JcGVyZl9jb3VudGVyc19sYXBpY19pbml0KCk7CisJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKQEAgLTExOTcsOCArMTE5Nyw3IEBACiAJICogRG91YmxlLWNoZWNrIHdoZXRoZXIgdGhpcyBBUElDIGlzIHJlYWxseSByZWdpc3RlcmVkLgogCSAqIFRoaXMgaXMgbWVhbmluZ2xlc3MgaW4gY2x1c3RlcmVkIGFwaWMgbW9kZSwgc28gd2Ugc2tpcCBpdC4KIAkgKi8KLQlpZiAoIWFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCgpKQotCQlCVUcoKTsKKwlCVUdfT04oIWFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCgpKTsKIAogCS8qCiAJICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKQEAgLTE5MTcsMjQgKzE5MTYsMTQgQEAKIAkJbWF4X3BoeXNpY2FsX2FwaWNpZCA9IGFwaWNpZDsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIFdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3dpdGNoIHRvIGJpZ3NtcCB3aGVuIENPTkZJR19IT1RQTFVHX0NQVT15Ci0JICogYnV0IHdlIG5lZWQgdG8gd29yayBvdGhlciBkZXBlbmRlbmNpZXMgbGlrZSBTTVBfU1VTUEVORCBldGMKLQkgKiBiZWZvcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IHNvbWUgY29uZnVzaW9uLgotCSAqIGlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IG51bV9wcm9jZXNzb3JzID4gOCkKLQkgKiAgICAgICAtIEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KLQkgKi8KLQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KSB7Ci0JCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7Ci0JCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJCWlmICghQVBJQ19YQVBJQyh2ZXJzaW9uKSkgewotCQkJCWRlZl90b19iaWdzbXAgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogSWYgUDQgYW5kIGFib3ZlIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlpZiAobnVtX3Byb2Nlc3NvcnMgPiA4KQogCQkJZGVmX3RvX2JpZ3NtcCA9IDE7Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJaWYgKG1heF9waHlzaWNhbF9hcGljaWQgPj0gOCkKKwkJCWRlZl90b19iaWdzbXAgPSAxOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggODA5ZTFjZi4uNjQ5NzBiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMTg3NCw3ICsxODc0LDcgQEAKIAlwcmludF9QSUMoKTsKIAogCS8qIGRvbid0IHByaW50IG91dCBpZiBhcGljIGlzIG5vdCB0aGVyZSAqLwotCWlmICghY3B1X2hhc19hcGljIHx8IGRpc2FibGVfYXBpYykKKwlpZiAoIWNwdV9oYXNfYXBpYyAmJiAhYXBpY19mcm9tX3NtcF9jb25maWcoKSkKIAkJcmV0dXJuIDA7CiAKIAlwcmludF9hbGxfbG9jYWxfQVBJQ3MoKTsKQEAgLTE5OTksNyArMTk5OSw3IEBACiAJLyoKIAkgKiBVc2UgdmlydHVhbCB3aXJlIEEgbW9kZSB3aGVuIGludGVycnVwdCByZW1hcHBpbmcgaXMgZW5hYmxlZC4KIAkgKi8KLQlpZiAoY3B1X2hhc19hcGljKQorCWlmIChjcHVfaGFzX2FwaWMgfHwgYXBpY19mcm9tX3NtcF9jb25maWcoKSkKIAkJZGlzY29ubmVjdF9ic3BfQVBJQyghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCAmJgogCQkJCWlvYXBpY19pODI1OS5waW4gIT0gLTEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKaW5kZXggNjVlZGMxOC4uYzRjYmQzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCkBAIC02NCwxNiArNjQsMjMgQEAKIAkJCWFwaWMgPSAmYXBpY194MmFwaWNfcGh5czsKIAkJZWxzZQogCQkJYXBpYyA9ICZhcGljX3gyYXBpY19jbHVzdGVyOwotCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlc1xuIiwgYXBpYy0+bmFtZSk7CiAJfQogI2VuZGlmCiAKIAlpZiAoYXBpYyA9PSAmYXBpY19mbGF0KSB7Ci0JCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpCi0JCQlhcGljID0gJmFwaWNfcGh5c2ZsYXQ7Ci0JCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzXG4iLCBhcGljLT5uYW1lKTsKKwkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkJaWYgKG51bV9wcm9jZXNzb3JzID4gOCkKKwkJCQlhcGljID0gJmFwaWNfcGh5c2ZsYXQ7CisJCQlicmVhazsKKwkJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpCisJCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OworCQl9CiAJfQogCisJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXNcbiIsIGFwaWMtPm5hbWUpOworCiAJaWYgKGlzX3ZzbXBfYm94KCkpIHsKIAkJLyogbmVlZCB0byB1cGRhdGUgcGh5c19wa2dfaWQgKi8KIAkJYXBpYy0+cGh5c19wa2dfaWQgPSBhcGljaWRfcGh5c19wa2dfaWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCA2MDExNTkzLi5mNWY1ODg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTM4OSw2ICszODksMTYgQEAKIAkJbWFwX2hpZ2goIkdSVSIsIGdydS5zLmJhc2UsIHNoaWZ0LCBtYXhfcG5vZGUsIG1hcF93Yik7CiB9CiAKK3N0YXRpYyBfX2luaXQgdm9pZCBtYXBfbW1yX2hpZ2goaW50IG1heF9wbm9kZSkKK3sKKwl1bmlvbiB1dmhfcmhfZ2FtX21tcl9vdmVybGF5X2NvbmZpZ19tbXJfdSBtbXI7CisJaW50IHNoaWZ0ID0gVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfU0hGVDsKKworCW1tci52ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SKTsKKwlpZiAobW1yLnMuZW5hYmxlKQorCQltYXBfaGlnaCgiTU1SIiwgbW1yLnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3VjKTsKK30KKwogc3RhdGljIF9faW5pdCB2b2lkIG1hcF9tbWlvaF9oaWdoKGludCBtYXhfcG5vZGUpCiB7CiAJdW5pb24gdXZoX3JoX2dhbV9tbWlvaF9vdmVybGF5X2NvbmZpZ19tbXJfdSBtbWlvaDsKQEAgLTY0Myw2ICs2NTMsNyBAQAogCX0KIAogCW1hcF9ncnVfaGlnaChtYXhfcG5vZGUpOworCW1hcF9tbXJfaGlnaChtYXhfcG5vZGUpOwogCW1hcF9tbWlvaF9oaWdoKG1heF9wbm9kZSk7CiAKIAl1dl9jcHVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggOGRkMzA2My4uNjg1MzdlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0yNyw3ICsyNyw3IEBACiBvYmotJChDT05GSUdfQ1BVX1NVUF9UUkFOU01FVEFfMzIpCSs9IHRyYW5zbWV0YS5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9VTUNfMzIpCQkrPSB1bWMubwogCi1vYmotJChDT05GSUdfUEVSRl9DT1VOVEVSUykJCSs9IHBlcmZfY291bnRlci5vCitvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCQkrPSBwZXJmX2V2ZW50Lm8KIAogb2JqLSQoQ09ORklHX1g4Nl9NQ0UpCQkJKz0gbWNoZWNrLwogb2JqLSQoQ09ORklHX01UUlIpCQkJKz0gbXRyci8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IGYzMmZhNzEuLmM5MTBhNzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJICogYXBwcm92ZWQgQXRobG9uCiAJICovCiAJV0FSTl9PTkNFKDEsICJXQVJOSU5HOiBUaGlzIGNvbWJpbmF0aW9uIG9mIEFNRCIKLQkJInByb2Nlc3NvcnMgaXMgbm90IHN1aXRhYmxlIGZvciBTTVAuXG4iKTsKKwkJIiBwcm9jZXNzb3JzIGlzIG5vdCBzdWl0YWJsZSBmb3IgU01QLlxuIik7CiAJaWYgKCF0ZXN0X3RhaW50KFRBSU5UX1VOU0FGRV9TTVApKQogCQlhZGRfdGFpbnQoVEFJTlRfVU5TQUZFX1NNUCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IDIwNTVmYzIuLmNjMjVjMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KLSNpbmNsdWRlIDxhc20vcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxhc20vbWNlLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogI2luY2x1ZGUgPGFzbS91di91di5oPgpAQCAtODcwLDcgKzg2OSw3IEBACiAjZWxzZQogCXZnZXRjcHVfc2V0X21vZGUoKTsKICNlbmRpZgotCWluaXRfaHdfcGVyZl9jb3VudGVycygpOworCWluaXRfaHdfcGVyZl9ldmVudHMoKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggN2JiNjc2Yy4uN2Q1YzNiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgotI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTcyLDggKzcyLDYgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhcGVyZm1wZXJmLCBvbGRfcGVyZik7CiAKLURFRklORV9UUkFDRShwb3dlcl9tYXJrKTsKLQogLyogYWNwaV9wZXJmX2RhdGEgaXMgYSBwb2ludGVyIHRvIHBlcmNwdSBkYXRhLiAqLwogc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSAqYWNwaV9wZXJmX2RhdGE7CiAKQEAgLTMzMiw3ICszMzAsNiBAQAogCXVuc2lnbmVkIGludCBuZXh0X3BlcmZfc3RhdGUgPSAwOyAvKiBJbmRleCBpbnRvIHBlcmYgdGFibGUgKi8KIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgcG93ZXJfdHJhY2UgaXQ7CiAKIAlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfdGFyZ2V0ICVkICglZClcbiIsIHRhcmdldF9mcmVxLCBwb2xpY3ktPmNwdSk7CiAKQEAgLTM2NCw3ICszNjEsNyBAQAogCQl9CiAJfQogCi0JdHJhY2VfcG93ZXJfbWFyaygmaXQsIFBPV0VSX1BTVEFURSwgbmV4dF9wZXJmX3N0YXRlKTsKKwl0cmFjZV9wb3dlcl9mcmVxdWVuY3koUE9XRVJfUFNUQVRFLCBkYXRhLT5mcmVxX3RhYmxlW25leHRfc3RhdGVdLmZyZXF1ZW5jeSk7CiAKIAlzd2l0Y2ggKGRhdGEtPmNwdV9mZWF0dXJlKSB7CiAJY2FzZSBTWVNURU1fSU5URUxfTVNSX0NBUEFCTEU6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKaW5kZXggOGNkNTIyNC4uODNhM2QxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYwpAQCAtNDg5LDggKzQ4OSw5IEBACiAJaW50IGksIGVyciA9IDA7CiAJc3RydWN0IHRocmVzaG9sZF9iYW5rICpiID0gTlVMTDsKIAljaGFyIG5hbWVbMzJdOworI2lmZGVmIENPTkZJR19TTVAKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKLQorI2VuZGlmCiAKIAlzcHJpbnRmKG5hbWUsICJ0aHJlc2hvbGRfYmFuayVpIiwgYmFuayk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKaW5kZXggMDhiNmVhNC4uZjA0ZTcyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJhc2UgPSBzaW1wbGVfc3RydG91bGwobGluZSArIDUsICZwdHIsIDApOwotCWZvciAoOyBpc3NwYWNlKCpwdHIpOyArK3B0cikKLQkJOworCXdoaWxlIChpc3NwYWNlKCpwdHIpKQorCQlwdHIrKzsKIAogCWlmIChzdHJuY21wKHB0ciwgInNpemU9IiwgNSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM1LDE0ICsxMzUsMTQgQEAKIAlzaXplID0gc2ltcGxlX3N0cnRvdWxsKHB0ciArIDUsICZwdHIsIDApOwogCWlmICgoYmFzZSAmIDB4ZmZmKSB8fCAoc2l6ZSAmIDB4ZmZmKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yICg7IGlzc3BhY2UoKnB0cik7ICsrcHRyKQotCQk7CisJd2hpbGUgKGlzc3BhY2UoKnB0cikpCisJCXB0cisrOwogCiAJaWYgKHN0cm5jbXAocHRyLCAidHlwZT0iLCA1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcHRyICs9IDU7Ci0JZm9yICg7IGlzc3BhY2UoKnB0cik7ICsrcHRyKQotCQk7CisJd2hpbGUgKGlzc3BhY2UoKnB0cikpCisJCXB0cisrOwogCiAJZm9yIChpID0gMDsgaSA8IE1UUlJfTlVNX1RZUEVTOyArK2kpIHsKIAkJaWYgKHN0cmNtcChwdHIsIG10cnJfc3RyaW5nc1tpXSkpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfY291bnRlci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2NvdW50ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjczMmUyYy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfY291bnRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI4MSArMCwwIEBACi0vKgotICogUGVyZm9ybWFuY2UgY291bnRlciB4ODYgYXJjaGl0ZWN0dXJlIGNvZGUKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IEphc3dpbmRlciBTaW5naCBSYWpwdXQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiwgUm9iZXJ0IFJpY2h0ZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4KLSAqCi0gKiAgRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2RlYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotCi0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLQotc3RhdGljIHU2NCBwZXJmX2NvdW50ZXJfbWFzayBfX3JlYWRfbW9zdGx5OwotCi0vKiBUaGUgbWF4aW1hbCBudW1iZXIgb2YgUEVCUyBjb3VudGVyczogKi8KLSNkZWZpbmUgTUFYX1BFQlNfQ09VTlRFUlMJNAotCi0vKiBUaGUgc2l6ZSBvZiBhIEJUUyByZWNvcmQgaW4gYnl0ZXM6ICovCi0jZGVmaW5lIEJUU19SRUNPUkRfU0laRQkJMjQKLQotLyogVGhlIHNpemUgb2YgYSBwZXItY3B1IEJUUyBidWZmZXIgaW4gYnl0ZXM6ICovCi0jZGVmaW5lIEJUU19CVUZGRVJfU0laRQkJKEJUU19SRUNPUkRfU0laRSAqIDEwMjQpCi0KLS8qIFRoZSBCVFMgb3ZlcmZsb3cgdGhyZXNob2xkIGluIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyOiAqLwotI2RlZmluZSBCVFNfT1ZGTF9USAkJKEJUU19SRUNPUkRfU0laRSAqIDY0KQotCi0KLS8qCi0gKiBCaXRzIGluIHRoZSBkZWJ1Z2N0bG1zciBjb250cm9sbGluZyBicmFuY2ggdHJhY2luZy4KLSAqLwotI2RlZmluZSBYODZfREVCVUdDVExfVFIJCQkoMSA8PCA2KQotI2RlZmluZSBYODZfREVCVUdDVExfQlRTCQkoMSA8PCA3KQotI2RlZmluZSBYODZfREVCVUdDVExfQlRJTlQJCSgxIDw8IDgpCi0jZGVmaW5lIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TCQkoMSA8PCA5KQotI2RlZmluZSBYODZfREVCVUdDVExfQlRTX09GRl9VU1IJKDEgPDwgMTApCi0KLS8qCi0gKiBBIGRlYnVnIHN0b3JlIGNvbmZpZ3VyYXRpb24uCi0gKgotICogV2Ugb25seSBzdXBwb3J0IGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgNjRiaXQgZmllbGRzLgotICovCi1zdHJ1Y3QgZGVidWdfc3RvcmUgewotCXU2NAlidHNfYnVmZmVyX2Jhc2U7Ci0JdTY0CWJ0c19pbmRleDsKLQl1NjQJYnRzX2Fic29sdXRlX21heGltdW07Ci0JdTY0CWJ0c19pbnRlcnJ1cHRfdGhyZXNob2xkOwotCXU2NAlwZWJzX2J1ZmZlcl9iYXNlOwotCXU2NAlwZWJzX2luZGV4OwotCXU2NAlwZWJzX2Fic29sdXRlX21heGltdW07Ci0JdTY0CXBlYnNfaW50ZXJydXB0X3RocmVzaG9sZDsKLQl1NjQJcGVic19jb3VudGVyX3Jlc2V0W01BWF9QRUJTX0NPVU5URVJTXTsKLX07Ci0KLXN0cnVjdCBjcHVfaHdfY291bnRlcnMgewotCXN0cnVjdCBwZXJmX2NvdW50ZXIJKmNvdW50ZXJzW1g4Nl9QTUNfSURYX01BWF07Ci0JdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07Ci0JdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKLQl1bnNpZ25lZCBsb25nCQlpbnRlcnJ1cHRzOwotCWludAkJCWVuYWJsZWQ7Ci0Jc3RydWN0IGRlYnVnX3N0b3JlCSpkczsKLX07Ci0KLS8qCi0gKiBzdHJ1Y3QgeDg2X3BtdSAtIGdlbmVyaWMgeDg2IHBtdQotICovCi1zdHJ1Y3QgeDg2X3BtdSB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQlpbnQJCXZlcnNpb247Ci0JaW50CQkoKmhhbmRsZV9pcnEpKHN0cnVjdCBwdF9yZWdzICopOwotCXZvaWQJCSgqZGlzYWJsZV9hbGwpKHZvaWQpOwotCXZvaWQJCSgqZW5hYmxlX2FsbCkodm9pZCk7Ci0Jdm9pZAkJKCplbmFibGUpKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKiwgaW50KTsKLQl2b2lkCQkoKmRpc2FibGUpKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKiwgaW50KTsKLQl1bnNpZ25lZAlldmVudHNlbDsKLQl1bnNpZ25lZAlwZXJmY3RyOwotCXU2NAkJKCpldmVudF9tYXApKGludCk7Ci0JdTY0CQkoKnJhd19ldmVudCkodTY0KTsKLQlpbnQJCW1heF9ldmVudHM7Ci0JaW50CQludW1fY291bnRlcnM7Ci0JaW50CQludW1fY291bnRlcnNfZml4ZWQ7Ci0JaW50CQljb3VudGVyX2JpdHM7Ci0JdTY0CQljb3VudGVyX21hc2s7Ci0JaW50CQlhcGljOwotCXU2NAkJbWF4X3BlcmlvZDsKLQl1NjQJCWludGVsX2N0cmw7Ci0Jdm9pZAkJKCplbmFibGVfYnRzKSh1NjQgY29uZmlnKTsKLQl2b2lkCQkoKmRpc2FibGVfYnRzKSh2b2lkKTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSB4ODZfcG11IF9fcmVhZF9tb3N0bHk7Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzLCBjcHVfaHdfY291bnRlcnMpID0gewotCS5lbmFibGVkID0gMSwKLX07Ci0KLS8qCi0gKiBOb3Qgc3VyZSBhYm91dCBzb21lIG9mIHRoZXNlCi0gKi8KLXN0YXRpYyBjb25zdCB1NjQgcDZfcGVyZm1vbl9ldmVudF9tYXBbXSA9Ci17Ci0gIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3OSwKLSAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwZjJlLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDEyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKLSAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMDYyLAotfTsKLQotc3RhdGljIHU2NCBwNl9wbXVfZXZlbnRfbWFwKGludCBldmVudCkKLXsKLQlyZXR1cm4gcDZfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRdOwotfQotCi0vKgotICogQ291bnRlciBzZXR0aW5nIHRoYXQgaXMgc3BlY2lmaWVkIG5vdCB0byBjb3VudCBhbnl0aGluZy4KLSAqIFdlIHVzZSB0aGlzIHRvIGVmZmVjdGl2ZWx5IGRpc2FibGUgYSBjb3VudGVyLgotICoKLSAqIEwyX1JRU1RTIHdpdGggMCBNRVNJIHVuaXQgbWFzay4KLSAqLwotI2RlZmluZSBQNl9OT1BfQ09VTlRFUgkJCTB4MDAwMDAwMkVVTEwKLQotc3RhdGljIHU2NCBwNl9wbXVfcmF3X2V2ZW50KHU2NCBldmVudCkKLXsKLSNkZWZpbmUgUDZfRVZOVFNFTF9FVkVOVF9NQVNLCQkweDAwMDAwMEZGVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9DT1VOVEVSX01BU0sJCTB4RkYwMDAwMDBVTEwKLQotI2RlZmluZSBQNl9FVk5UU0VMX01BU0sJCQlcCi0JKFA2X0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKLQkgUDZfRVZOVFNFTF9VTklUX01BU0sgIHwJXAotCSBQNl9FVk5UU0VMX0VER0VfTUFTSyAgfAlcCi0JIFA2X0VWTlRTRUxfSU5WX01BU0sgICB8CVwKLQkgUDZfRVZOVFNFTF9DT1VOVEVSX01BU0spCi0KLQlyZXR1cm4gZXZlbnQgJiBQNl9FVk5UU0VMX01BU0s7Ci19Ci0KLQotLyoKLSAqIEludGVsIFBlcmZNb24gdjMuIFVzZWQgb24gQ29yZTIgYW5kIGxhdGVyLgotICovCi1zdGF0aWMgY29uc3QgdTY0IGludGVsX3BlcmZtb25fZXZlbnRfbWFwW10gPQotewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwM2MsCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4NGYyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDQxMmUsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCi0gIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDEzYywKLX07Ci0KLXN0YXRpYyB1NjQgaW50ZWxfcG11X2V2ZW50X21hcChpbnQgZXZlbnQpCi17Ci0JcmV0dXJuIGludGVsX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50XTsKLX0KLQotLyoKLSAqIEdlbmVyYWxpemVkIGh3IGNhY2hpbmcgcmVsYXRlZCBldmVudCB0YWJsZSwgZmlsbGVkCi0gKiBpbiBvbiBhIHBlciBtb2RlbCBiYXNpcy4gQSB2YWx1ZSBvZiAwIG1lYW5zCi0gKiAnbm90IHN1cHBvcnRlZCcsIC0xIG1lYW5zICdldmVudCBtYWtlcyBubyBzZW5zZSBvbgotICogdGhpcyBDUFUnLCBhbnkgb3RoZXIgdmFsdWUgbWVhbnMgdGhlIHJhdyBldmVudAotICogSUQuCi0gKi8KLQotI2RlZmluZSBDKHgpIFBFUkZfQ09VTlRfSFdfQ0FDSEVfIyN4Ci0KLXN0YXRpYyB1NjQgX19yZWFkX21vc3RseSBod19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdOwotCi1zdGF0aWMgY29uc3QgdTY0IG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAoYWxpYXMpICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAoYWxpYXMpICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MjBjOCwgLyogSVRMQl9NSVNTX1JFVElSRUQgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcwotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQotewotIFsgQyhMMUQpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MTA0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MTI4MiwgLyogSVRMQk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRS5MRCAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRS5TVCAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMTCAgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA1MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDYwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODIsIC8qIElUTEIuTUlTU0VTICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotfTsKLQotc3RhdGljIHU2NCBpbnRlbF9wbXVfcmF3X2V2ZW50KHU2NCBldmVudCkKLXsKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfQ09VTlRFUl9NQVNLCTB4RkYwMDAwMDBVTEwKLQotI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAotCShDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKLQkgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIENPUkVfRVZOVFNFTF9FREdFX01BU0sgIHwJXAotCSBDT1JFX0VWTlRTRUxfSU5WX01BU0sgIHwJXAotCSBDT1JFX0VWTlRTRUxfQ09VTlRFUl9NQVNLKQotCi0JcmV0dXJuIGV2ZW50ICYgQ09SRV9FVk5UU0VMX01BU0s7Ci19Ci0KLXN0YXRpYyBjb25zdCB1NjQgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcwotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQotewotIFsgQyhMMUQpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDQwLCAvKiBEYXRhIENhY2hlIEFjY2Vzc2VzICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA0MSwgLyogRGF0YSBDYWNoZSBNaXNzZXMgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNDIsIC8qIERhdGEgQ2FjaGUgUmVmaWxscyA6c3lzdGVtICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyNjcsIC8qIERhdGEgUHJlZmV0Y2hlciA6YXR0ZW1wdHMgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmNhbmNlbGxlZCAqLwotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEluc3RydWN0aW9uIGNhY2hlIGZldGNoZXMgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0QiwgLyogUHJlZmV0Y2ggSW5zdHJ1Y3Rpb25zIDpMb2FkICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzdELCAvKiBSZXF1ZXN0cyB0byBMMiBDYWNoZSA6SUMrREMgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzN0UsIC8qIEwyIENhY2hlIE1pc3NlcyA6IElDK0RDICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE3RiwgLyogTDIgRmlsbC9Xcml0ZWJhY2sgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDYsIC8qIEwxIERUTEIgYW5kIEwyIERMVEIgTWlzcyAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBmZWN0aGVzICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4NSwgLyogSW5zdHIuIGZldGNoIElUTEIgbWlzc2VzICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMyLCAvKiBSZXRpcmVkIEJyYW5jaCBJbnN0ci4gICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjMywgLyogUmV0aXJlZCBNaXNwcmVkaWN0ZWQgQkkgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi0vKgotICogQU1EIFBlcmZvcm1hbmNlIE1vbml0b3IgSzcgYW5kIGxhdGVyLgotICovCi1zdGF0aWMgY29uc3QgdTY0IGFtZF9wZXJmbW9uX2V2ZW50X21hcFtdID0KLXsKLSAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc2LAotICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDAwODAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMDgxLAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAotfTsKLQotc3RhdGljIHU2NCBhbWRfcG11X2V2ZW50X21hcChpbnQgZXZlbnQpCi17Ci0JcmV0dXJuIGFtZF9wZXJmbW9uX2V2ZW50X21hcFtldmVudF07Ci19Ci0KLXN0YXRpYyB1NjQgYW1kX3BtdV9yYXdfZXZlbnQodTY0IGV2ZW50KQotewotI2RlZmluZSBLN19FVk5UU0VMX0VWRU5UX01BU0sJMHg3MDAwMDAwRkZVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9VTklUX01BU0sJMHgwMDAwMEZGMDBVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9FREdFX01BU0sJMHgwMDAwNDAwMDBVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9JTlZfTUFTSwkweDAwMDgwMDAwMFVMTAotI2RlZmluZSBLN19FVk5UU0VMX0NPVU5URVJfTUFTSwkweDBGRjAwMDAwMFVMTAotCi0jZGVmaW5lIEs3X0VWTlRTRUxfTUFTSwkJCVwKLQkoSzdfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAotCSBLN19FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIEs3X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKLQkgSzdfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAotCSBLN19FVk5UU0VMX0NPVU5URVJfTUFTSykKLQotCXJldHVybiBldmVudCAmIEs3X0VWTlRTRUxfTUFTSzsKLX0KLQotLyoKLSAqIFByb3BhZ2F0ZSBjb3VudGVyIGVsYXBzZWQgdGltZSBpbnRvIHRoZSBnZW5lcmljIGNvdW50ZXIuCi0gKiBDYW4gb25seSBiZSBleGVjdXRlZCBvbiB0aGUgQ1BVIHdoZXJlIHRoZSBjb3VudGVyIGlzIGFjdGl2ZS4KLSAqIFJldHVybnMgdGhlIGRlbHRhIGV2ZW50cyBwcm9jZXNzZWQuCi0gKi8KLXN0YXRpYyB1NjQKLXg4Nl9wZXJmX2NvdW50ZXJfdXBkYXRlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBpZHgpCi17Ci0JaW50IHNoaWZ0ID0gNjQgLSB4ODZfcG11LmNvdW50ZXJfYml0czsKLQl1NjQgcHJldl9yYXdfY291bnQsIG5ld19yYXdfY291bnQ7Ci0JczY0IGRlbHRhOwotCi0JaWYgKGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBDYXJlZnVsOiBhbiBOTUkgbWlnaHQgbW9kaWZ5IHRoZSBwcmV2aW91cyBjb3VudGVyIHZhbHVlLgotCSAqCi0JICogT3VyIHRhY3RpYyB0byBoYW5kbGUgdGhpcyBpcyB0byBmaXJzdCBhdG9taWNhbGx5IHJlYWQgYW5kCi0JICogZXhjaGFuZ2UgYSBuZXcgcmF3IGNvdW50IC0gdGhlbiBhZGQgdGhhdCBuZXctcHJldiBkZWx0YQotCSAqIGNvdW50IHRvIHRoZSBnZW5lcmljIGNvdW50ZXIgYXRvbWljYWxseToKLQkgKi8KLWFnYWluOgotCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKLQlyZG1zcmwoaHdjLT5jb3VudGVyX2Jhc2UgKyBpZHgsIG5ld19yYXdfY291bnQpOwotCi0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCi0JCQkJCW5ld19yYXdfY291bnQpICE9IHByZXZfcmF3X2NvdW50KQotCQlnb3RvIGFnYWluOwotCi0JLyoKLQkgKiBOb3cgd2UgaGF2ZSB0aGUgbmV3IHJhdyB2YWx1ZSBhbmQgaGF2ZSB1cGRhdGVkIHRoZSBwcmV2Ci0JICogdGltZXN0YW1wIGFscmVhZHkuIFdlIGNhbiBub3cgY2FsY3VsYXRlIHRoZSBlbGFwc2VkIGRlbHRhCi0JICogKGNvdW50ZXItKXRpbWUgYW5kIGFkZCB0aGF0IHRvIHRoZSBnZW5lcmljIGNvdW50ZXIuCi0JICoKLQkgKiBDYXJlZnVsLCBub3QgYWxsIGh3IHNpZ24tZXh0ZW5kcyBhYm92ZSB0aGUgcGh5c2ljYWwgd2lkdGgKLQkgKiBvZiB0aGUgY291bnQuCi0JICovCi0JZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOwotCWRlbHRhID4+PSBzaGlmdDsKLQotCWF0b21pYzY0X2FkZChkZWx0YSwgJmNvdW50ZXItPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKLQotCXJldHVybiBuZXdfcmF3X2NvdW50OwotfQotCi1zdGF0aWMgYXRvbWljX3QgYWN0aXZlX2NvdW50ZXJzOwotc3RhdGljIERFRklORV9NVVRFWChwbWNfcmVzZXJ2ZV9tdXRleCk7Ci0KLXN0YXRpYyBib29sIHJlc2VydmVfcG1jX2hhcmR3YXJlKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JaW50IGk7Ci0KLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQlkaXNhYmxlX2xhcGljX25taV93YXRjaGRvZygpOwotCi0JZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpKyspIHsKLQkJaWYgKCFyZXNlcnZlX3BlcmZjdHJfbm1pKHg4Nl9wbXUucGVyZmN0ciArIGkpKQotCQkJZ290byBwZXJmY3RyX2ZhaWw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpKyspIHsKLQkJaWYgKCFyZXNlcnZlX2V2bnRzZWxfbm1pKHg4Nl9wbXUuZXZlbnRzZWwgKyBpKSkKLQkJCWdvdG8gZXZlbnRzZWxfZmFpbDsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiB0cnVlOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi1ldmVudHNlbF9mYWlsOgotCWZvciAoaS0tOyBpID49IDA7IGktLSkKLQkJcmVsZWFzZV9ldm50c2VsX25taSh4ODZfcG11LmV2ZW50c2VsICsgaSk7Ci0KLQlpID0geDg2X3BtdS5udW1fY291bnRlcnM7Ci0KLXBlcmZjdHJfZmFpbDoKLQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCi0JCXJlbGVhc2VfcGVyZmN0cl9ubWkoeDg2X3BtdS5wZXJmY3RyICsgaSk7Ci0KLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQllbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgcmVsZWFzZV9wbWNfaGFyZHdhcmUodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaSsrKSB7Ci0JCXJlbGVhc2VfcGVyZmN0cl9ubWkoeDg2X3BtdS5wZXJmY3RyICsgaSk7Ci0JCXJlbGVhc2VfZXZudHNlbF9ubWkoeDg2X3BtdS5ldmVudHNlbCArIGkpOwotCX0KLQotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpCi0JCWVuYWJsZV9sYXBpY19ubWlfd2F0Y2hkb2coKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYnRzX2F2YWlsYWJsZSh2b2lkKQotewotCXJldHVybiB4ODZfcG11LmVuYWJsZV9idHMgIT0gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfZGVidWdfc3RvcmVfb25fY3B1KGludCBjcHUpCi17Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IHBlcl9jcHUoY3B1X2h3X2NvdW50ZXJzLCBjcHUpLmRzOwotCi0JaWYgKCFkcykKLQkJcmV0dXJuOwotCi0Jd3Jtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfRFNfQVJFQSwKLQkJICAgICAodTMyKSgodTY0KSh1bnNpZ25lZCBsb25nKWRzKSwKLQkJICAgICAodTMyKSgodTY0KSh1bnNpZ25lZCBsb25nKWRzID4+IDMyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaW5pX2RlYnVnX3N0b3JlX29uX2NwdShpbnQgY3B1KQotewotCWlmICghcGVyX2NwdShjcHVfaHdfY291bnRlcnMsIGNwdSkuZHMpCi0JCXJldHVybjsKLQotCXdybXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX0RTX0FSRUEsIDAsIDApOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX2J0c19oYXJkd2FyZSh2b2lkKQotewotCWludCBjcHU7Ci0KLQlpZiAoIWJ0c19hdmFpbGFibGUoKSkKLQkJcmV0dXJuOwotCi0JZ2V0X29ubGluZV9jcHVzKCk7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJZmluaV9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IHBlcl9jcHUoY3B1X2h3X2NvdW50ZXJzLCBjcHUpLmRzOwotCi0JCWlmICghZHMpCi0JCQljb250aW51ZTsKLQotCQlwZXJfY3B1KGNwdV9od19jb3VudGVycywgY3B1KS5kcyA9IE5VTEw7Ci0KLQkJa2ZyZWUoKHZvaWQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2J1ZmZlcl9iYXNlKTsKLQkJa2ZyZWUoZHMpOwotCX0KLQotCXB1dF9vbmxpbmVfY3B1cygpOwotfQotCi1zdGF0aWMgaW50IHJlc2VydmVfYnRzX2hhcmR3YXJlKHZvaWQpCi17Ci0JaW50IGNwdSwgZXJyID0gMDsKLQotCWlmICghYnRzX2F2YWlsYWJsZSgpKQotCQlyZXR1cm4gMDsKLQotCWdldF9vbmxpbmVfY3B1cygpOwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzOwotCQl2b2lkICpidWZmZXI7Ci0KLQkJZXJyID0gLUVOT01FTTsKLQkJYnVmZmVyID0ga3phbGxvYyhCVFNfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwotCQlpZiAodW5saWtlbHkoIWJ1ZmZlcikpCi0JCQlicmVhazsKLQotCQlkcyA9IGt6YWxsb2Moc2l6ZW9mKCpkcyksIEdGUF9LRVJORUwpOwotCQlpZiAodW5saWtlbHkoIWRzKSkgewotCQkJa2ZyZWUoYnVmZmVyKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZHMtPmJ0c19idWZmZXJfYmFzZSA9ICh1NjQpKHVuc2lnbmVkIGxvbmcpYnVmZmVyOwotCQlkcy0+YnRzX2luZGV4ID0gZHMtPmJ0c19idWZmZXJfYmFzZTsKLQkJZHMtPmJ0c19hYnNvbHV0ZV9tYXhpbXVtID0KLQkJCWRzLT5idHNfYnVmZmVyX2Jhc2UgKyBCVFNfQlVGRkVSX1NJWkU7Ci0JCWRzLT5idHNfaW50ZXJydXB0X3RocmVzaG9sZCA9Ci0JCQlkcy0+YnRzX2Fic29sdXRlX21heGltdW0gLSBCVFNfT1ZGTF9USDsKLQotCQlwZXJfY3B1KGNwdV9od19jb3VudGVycywgY3B1KS5kcyA9IGRzOwotCQllcnIgPSAwOwotCX0KLQotCWlmIChlcnIpCi0JCXJlbGVhc2VfYnRzX2hhcmR3YXJlKCk7Ci0JZWxzZSB7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQkJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKLQl9Ci0KLQlwdXRfb25saW5lX2NwdXMoKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGh3X3BlcmZfY291bnRlcl9kZXN0cm95KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmFjdGl2ZV9jb3VudGVycywgJnBtY19yZXNlcnZlX211dGV4KSkgewotCQlyZWxlYXNlX3BtY19oYXJkd2FyZSgpOwotCQlyZWxlYXNlX2J0c19oYXJkd2FyZSgpOwotCQltdXRleF91bmxvY2soJnBtY19yZXNlcnZlX211dGV4KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHg4Nl9wbXVfaW5pdGlhbGl6ZWQodm9pZCkKLXsKLQlyZXR1cm4geDg2X3BtdS5oYW5kbGVfaXJxICE9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1zZXRfZXh0X2h3X2F0dHIoc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIpCi17Ci0JdW5zaWduZWQgaW50IGNhY2hlX3R5cGUsIGNhY2hlX29wLCBjYWNoZV9yZXN1bHQ7Ci0JdTY0IGNvbmZpZywgdmFsOwotCi0JY29uZmlnID0gYXR0ci0+Y29uZmlnOwotCi0JY2FjaGVfdHlwZSA9IChjb25maWcgPj4gIDApICYgMHhmZjsKLQlpZiAoY2FjaGVfdHlwZSA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljYWNoZV9vcCA9IChjb25maWcgPj4gIDgpICYgMHhmZjsKLQlpZiAoY2FjaGVfb3AgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2FjaGVfcmVzdWx0ID0gKGNvbmZpZyA+PiAxNikgJiAweGZmOwotCWlmIChjYWNoZV9yZXN1bHQgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZhbCA9IGh3X2NhY2hlX2V2ZW50X2lkc1tjYWNoZV90eXBlXVtjYWNoZV9vcF1bY2FjaGVfcmVzdWx0XTsKLQotCWlmICh2YWwgPT0gMCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlpZiAodmFsID09IC0xKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWh3Yy0+Y29uZmlnIHw9IHZhbDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2J0cyh1NjQgY29uZmlnKQotewotCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7Ci0KLQlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOwotCi0JZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX1RSOwotCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFM7Ci0JZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUSU5UOwotCi0JaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKSkKLQkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1M7Ci0KLQlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKSkKLQkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSOwotCi0JdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X2Rpc2FibGVfYnRzKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKLQotCWlmICghY3B1Yy0+ZHMpCi0JCXJldHVybjsKLQotCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7Ci0KLQlkZWJ1Z2N0bG1zciAmPQotCQl+KFg4Nl9ERUJVR0NUTF9UUiB8IFg4Nl9ERUJVR0NUTF9CVFMgfCBYODZfREVCVUdDVExfQlRJTlQgfAotCQkgIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TIHwgWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSKTsKLQotCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBhdHRyX3R5cGUKLSAqLwotc3RhdGljIGludCBfX2h3X3BlcmZfY291bnRlcl9pbml0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyID0gJmNvdW50ZXItPmF0dHI7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCXU2NCBjb25maWc7Ci0JaW50IGVycjsKLQotCWlmICgheDg2X3BtdV9pbml0aWFsaXplZCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVyciA9IDA7Ci0JaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhY3RpdmVfY291bnRlcnMpKSB7Ci0JCW11dGV4X2xvY2soJnBtY19yZXNlcnZlX211dGV4KTsKLQkJaWYgKGF0b21pY19yZWFkKCZhY3RpdmVfY291bnRlcnMpID09IDApIHsKLQkJCWlmICghcmVzZXJ2ZV9wbWNfaGFyZHdhcmUoKSkKLQkJCQllcnIgPSAtRUJVU1k7Ci0JCQllbHNlCi0JCQkJZXJyID0gcmVzZXJ2ZV9idHNfaGFyZHdhcmUoKTsKLQkJfQotCQlpZiAoIWVycikKLQkJCWF0b21pY19pbmMoJmFjdGl2ZV9jb3VudGVycyk7Ci0JCW11dGV4X3VubG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOwotCX0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyoKLQkgKiBHZW5lcmF0ZSBQTUMgSVJRczoKLQkgKiAoa2VlcCAnZW5hYmxlZCcgYml0IGNsZWFyIGZvciBub3cpCi0JICovCi0JaHdjLT5jb25maWcgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfSU5UOwotCi0JLyoKLQkgKiBDb3VudCB1c2VyIGFuZCBPUyBldmVudHMgdW5sZXNzIHJlcXVlc3RlZCBub3QgdG8uCi0JICovCi0JaWYgKCFhdHRyLT5leGNsdWRlX3VzZXIpCi0JCWh3Yy0+Y29uZmlnIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1I7Ci0JaWYgKCFhdHRyLT5leGNsdWRlX2tlcm5lbCkKLQkJaHdjLT5jb25maWcgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TOwotCi0JaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJaHdjLT5zYW1wbGVfcGVyaW9kID0geDg2X3BtdS5tYXhfcGVyaW9kOwotCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwotCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSWYgd2UgaGF2ZSBhIFBNVSBpbml0aWFsaXplZCBidXQgbm8gQVBJQwotCQkgKiBpbnRlcnJ1cHRzLCB3ZSBjYW5ub3Qgc2FtcGxlIGhhcmR3YXJlCi0JCSAqIGNvdW50ZXJzICh1c2VyLXNwYWNlIGhhcyB0byBmYWxsIGJhY2sgYW5kCi0JCSAqIHNhbXBsZSB2aWEgYSBocnRpbWVyIGJhc2VkIHNvZnR3YXJlIGNvdW50ZXIpOgotCQkgKi8KLQkJaWYgKCF4ODZfcG11LmFwaWMpCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JY291bnRlci0+ZGVzdHJveSA9IGh3X3BlcmZfY291bnRlcl9kZXN0cm95OwotCi0JLyoKLQkgKiBSYXcgZXZlbnQgdHlwZSBwcm92aWRlIHRoZSBjb25maWcgaW4gdGhlIGV2ZW50IHN0cnVjdHVyZQotCSAqLwotCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9SQVcpIHsKLQkJaHdjLT5jb25maWcgfD0geDg2X3BtdS5yYXdfZXZlbnQoYXR0ci0+Y29uZmlnKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX0hXX0NBQ0hFKQotCQlyZXR1cm4gc2V0X2V4dF9od19hdHRyKGh3YywgYXR0cik7Ci0KLQlpZiAoYXR0ci0+Y29uZmlnID49IHg4Nl9wbXUubWF4X2V2ZW50cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIFRoZSBnZW5lcmljIG1hcDoKLQkgKi8KLQljb25maWcgPSB4ODZfcG11LmV2ZW50X21hcChhdHRyLT5jb25maWcpOwotCi0JaWYgKGNvbmZpZyA9PSAwKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWlmIChjb25maWcgPT0gLTFMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIEJyYW5jaCB0cmFjaW5nOgotCSAqLwotCWlmICgoYXR0ci0+Y29uZmlnID09IFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykgJiYKLQkgICAgKGh3Yy0+c2FtcGxlX3BlcmlvZCA9PSAxKSkgewotCQkvKiBCVFMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGFyY2hpdGVjdHVyZS4gKi8KLQkJaWYgKCFidHNfYXZhaWxhYmxlKCkpCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkJLyogQlRTIGlzIGN1cnJlbnRseSBvbmx5IGFsbG93ZWQgZm9yIHVzZXItbW9kZS4gKi8KLQkJaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCWh3Yy0+Y29uZmlnIHw9IGNvbmZpZzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwNl9wbXVfZGlzYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQl1NjQgdmFsOwotCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQliYXJyaWVyKCk7Ci0KLQkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCi0JcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKLQl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQliYXJyaWVyKCk7Ci0KLQl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7Ci0KLQlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2Rpc2FibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JaW50IGlkeDsKLQotCWlmICghY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDA7Ci0JLyoKLQkgKiBlbnN1cmUgd2Ugd3JpdGUgdGhlIGRpc2FibGUgYmVmb3JlIHdlIHN0YXJ0IGRpc2FibGluZyB0aGUKLQkgKiBjb3VudGVycyBwcm9wZXIsIHNvIHRoYXQgYW1kX3BtdV9lbmFibGVfY291bnRlcigpIGRvZXMgdGhlCi0JICogcmlnaHQgdGhpbmcuCi0JICovCi0JYmFycmllcigpOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaWR4KyspIHsKLQkJdTY0IHZhbDsKLQotCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQotCQkJY29udGludWU7Ci0JCXJkbXNybChNU1JfSzdfRVZOVFNFTDAgKyBpZHgsIHZhbCk7Ci0JCWlmICghKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKSkKLQkJCWNvbnRpbnVlOwotCQl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCQl3cm1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOwotCX0KLX0KLQotdm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKLXsKLQlpZiAoIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkKLQkJcmV0dXJuOwotCXJldHVybiB4ODZfcG11LmRpc2FibGVfYWxsKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDE7Ci0JYmFycmllcigpOwotCi0JLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLwotCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci0JdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDE7Ci0JYmFycmllcigpOwotCi0Jd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIHg4Nl9wbXUuaW50ZWxfY3RybCk7Ci0KLQlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpIHsKLQkJc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9Ci0JCQljcHVjLT5jb3VudGVyc1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOwotCi0JCWlmIChXQVJOX09OX09OQ0UoIWNvdW50ZXIpKQotCQkJcmV0dXJuOwotCi0JCWludGVsX3BtdV9lbmFibGVfYnRzKGNvdW50ZXItPmh3LmNvbmZpZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQlpbnQgaWR4OwotCi0JaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAxOwotCWJhcnJpZXIoKTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fY291bnRlcnM7IGlkeCsrKSB7Ci0JCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBjcHVjLT5jb3VudGVyc1tpZHhdOwotCQl1NjQgdmFsOwotCi0JCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQl2YWwgPSBjb3VudGVyLT5ody5jb25maWc7Ci0JCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQkJd3Jtc3JsKE1TUl9LN19FVk5UU0VMMCArIGlkeCwgdmFsKTsKLQl9Ci19Ci0KLXZvaWQgaHdfcGVyZl9lbmFibGUodm9pZCkKLXsKLQlpZiAoIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkKLQkJcmV0dXJuOwotCXg4Nl9wbXUuZW5hYmxlX2FsbCgpOwotfQotCi1zdGF0aWMgaW5saW5lIHU2NCBpbnRlbF9wbXVfZ2V0X3N0YXR1cyh2b2lkKQotewotCXU2NCBzdGF0dXM7Ci0KLQlyZG1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBzdGF0dXMpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGludGVsX3BtdV9hY2tfc3RhdHVzKHU2NCBhY2spCi17Ci0Jd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLCBhY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeDg2X3BtdV9lbmFibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBpZHgpCi17Ci0JKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsCi0JCQkgICAgICBod2MtPmNvbmZpZyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHg4Nl9wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKLXsKLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgaHdjLT5jb25maWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IF9faWR4KQotewotCWludCBpZHggPSBfX2lkeCAtIFg4Nl9QTUNfSURYX0ZJWEVEOwotCXU2NCBjdHJsX3ZhbCwgbWFzazsKLQotCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOwotCi0JcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKLQljdHJsX3ZhbCAmPSB+bWFzazsKLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXA2X3BtdV9kaXNhYmxlX2NvdW50ZXIoc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQotewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXU2NCB2YWwgPSBQNl9OT1BfQ09VTlRFUjsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0KLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKLXsKLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJaW50ZWxfcG11X2Rpc2FibGVfYnRzKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaHdjLT5jb25maWdfYmFzZSA9PSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMKSkgewotCQlpbnRlbF9wbXVfZGlzYWJsZV9maXhlZChod2MsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl4ODZfcG11X2Rpc2FibGVfY291bnRlcihod2MsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYW1kX3BtdV9kaXNhYmxlX2NvdW50ZXIoc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQotewotCXg4Nl9wbXVfZGlzYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKLX0KLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCBbWDg2X1BNQ19JRFhfTUFYXSwgcG1jX3ByZXZfbGVmdCk7Ci0KLS8qCi0gKiBTZXQgdGhlIG5leHQgSVJRIHBlcmlvZCwgYmFzZWQgb24gdGhlIGh3Yy0+cGVyaW9kX2xlZnQgdmFsdWUuCi0gKiBUbyBiZSBjYWxsZWQgd2l0aCB0aGUgY291bnRlciBkaXNhYmxlZCBpbiBodzoKLSAqLwotc3RhdGljIGludAoteDg2X3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkgICAgIHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKLXsKLQlzNjQgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOwotCXM2NCBwZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JaW50IGVyciwgcmV0ID0gMDsKLQotCWlmIChpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgd2UgYXJlIHdheSBvdXRzaWRlIGEgcmVhc29hYmxlIHJhbmdlIHRoZW4ganVzdCBza2lwIGZvcndhcmQ6Ci0JICovCi0JaWYgKHVubGlrZWx5KGxlZnQgPD0gLXBlcmlvZCkpIHsKLQkJbGVmdCA9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKLQkJaHdjLT5sYXN0X3BlcmlvZCA9IHBlcmlvZDsKLQkJcmV0ID0gMTsKLQl9Ci0KLQlpZiAodW5saWtlbHkobGVmdCA8PSAwKSkgewotCQlsZWZ0ICs9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKLQkJaHdjLT5sYXN0X3BlcmlvZCA9IHBlcmlvZDsKLQkJcmV0ID0gMTsKLQl9Ci0JLyoKLQkgKiBRdWlyazogY2VydGFpbiBDUFVzIGRvbnQgbGlrZSBpdCBpZiBqdXN0IDEgZXZlbnQgaXMgbGVmdDoKLQkgKi8KLQlpZiAodW5saWtlbHkobGVmdCA8IDIpKQotCQlsZWZ0ID0gMjsKLQotCWlmIChsZWZ0ID4geDg2X3BtdS5tYXhfcGVyaW9kKQotCQlsZWZ0ID0geDg2X3BtdS5tYXhfcGVyaW9kOwotCi0JcGVyX2NwdShwbWNfcHJldl9sZWZ0W2lkeF0sIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBsZWZ0OwotCi0JLyoKLQkgKiBUaGUgaHcgY291bnRlciBzdGFydHMgY291bnRpbmcgZnJvbSB0aGlzIGNvdW50ZXIgb2Zmc2V0LAotCSAqIG1hcmsgaXQgdG8gYmUgYWJsZSB0byBleHRyYSBmdXR1cmUgZGVsdGFzOgotCSAqLwotCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKLQotCWVyciA9IGNoZWNraW5nX3dybXNybChod2MtPmNvdW50ZXJfYmFzZSArIGlkeCwKLQkJCSAgICAgKHU2NCkoLWxlZnQpICYgeDg2X3BtdS5jb3VudGVyX21hc2spOwotCi0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaW50ZWxfcG11X2VuYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBfX2lkeCkKLXsKLQlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKLQl1NjQgY3RybF92YWwsIGJpdHMsIG1hc2s7Ci0JaW50IGVycjsKLQotCS8qCi0JICogRW5hYmxlIElSUSBnZW5lcmF0aW9uICgweDgpLAotCSAqIGFuZCBlbmFibGUgcmluZy0zIGNvdW50aW5nICgweDIpIGFuZCByaW5nLTAgY291bnRpbmcgKDB4MSkKLQkgKiBpZiByZXF1ZXN0ZWQ6Ci0JICovCi0JYml0cyA9IDB4OFVMTDsKLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKQotCQliaXRzIHw9IDB4MjsKLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpCi0JCWJpdHMgfD0gMHgxOwotCWJpdHMgPDw9IChpZHggKiA0KTsKLQltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKLQotCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci0JY3RybF92YWwgJj0gfm1hc2s7Ci0JY3RybF92YWwgfD0gYml0czsKLQllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotfQotCi1zdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2NvdW50ZXIoc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQotewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXU2NCB2YWw7Ci0KLQl2YWwgPSBod2MtPmNvbmZpZzsKLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCi0JKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKLXsKLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJaWYgKCFfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycykuZW5hYmxlZCkKLQkJCXJldHVybjsKLQotCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhod2MtPmNvbmZpZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaHdjLT5jb25maWdfYmFzZSA9PSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMKSkgewotCQlpbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKGh3YywgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCXg4Nl9wbXVfZW5hYmxlX2NvdW50ZXIoaHdjLCBpZHgpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQl4ODZfcG11X2VuYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKLX0KLQotc3RhdGljIGludAotZml4ZWRfbW9kZV9pZHgoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjKQotewotCXVuc2lnbmVkIGludCBldmVudDsKLQotCWV2ZW50ID0gaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRfTUFTSzsKLQotCWlmICh1bmxpa2VseSgoZXZlbnQgPT0KLQkJICAgICAgeDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSkgJiYKLQkJICAgICAoaHdjLT5zYW1wbGVfcGVyaW9kID09IDEpKSkKLQkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0JUUzsKLQotCWlmICgheDg2X3BtdS5udW1fY291bnRlcnNfZml4ZWQpCi0JCXJldHVybiAtMTsKLQotCWlmICh1bmxpa2VseShldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfSU5TVFJVQ1RJT05TOwotCWlmICh1bmxpa2VseShldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMpKSkKLQkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0NQVV9DWUNMRVM7Ci0JaWYgKHVubGlrZWx5KGV2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQlVTX0NZQ0xFUzsKLQotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZpbmQgYSBQTUMgc2xvdCBmb3IgdGhlIGZyZXNobHkgZW5hYmxlZCAvIHNjaGVkdWxlZCBpbiBjb3VudGVyOgotICovCi1zdGF0aWMgaW50IHg4Nl9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCWludCBpZHg7Ci0KLQlpZHggPSBmaXhlZF9tb2RlX2lkeChjb3VudGVyLCBod2MpOwotCWlmIChpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSB7Ci0JCS8qIEJUUyBpcyBhbHJlYWR5IG9jY3VwaWVkLiAqLwotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlod2MtPmNvbmZpZ19iYXNlCT0gMDsKLQkJaHdjLT5jb3VudGVyX2Jhc2UJPSAwOwotCQlod2MtPmlkeAkJPSBpZHg7Ci0JfSBlbHNlIGlmIChpZHggPj0gMCkgewotCQkvKgotCQkgKiBUcnkgdG8gZ2V0IHRoZSBmaXhlZCBjb3VudGVyLCBpZiB0aGF0IGlzIGFscmVhZHkgdGFrZW4KLQkJICogdGhlbiB0cnkgdG8gZ2V0IGEgZ2VuZXJpYyBjb3VudGVyOgotCQkgKi8KLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQotCQkJZ290byB0cnlfZ2VuZXJpYzsKLQotCQlod2MtPmNvbmZpZ19iYXNlID0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTDsKLQkJLyoKLQkJICogV2Ugc2V0IGl0IHNvIHRoYXQgY291bnRlcl9iYXNlICsgaWR4IGluIHdybXNyL3JkbXNyIG1hcHMgdG8KLQkJICogTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC4uLiBDVFIyOgotCQkgKi8KLQkJaHdjLT5jb3VudGVyX2Jhc2UgPQotCQkJTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC0gWDg2X1BNQ19JRFhfRklYRUQ7Ci0JCWh3Yy0+aWR4ID0gaWR4OwotCX0gZWxzZSB7Ci0JCWlkeCA9IGh3Yy0+aWR4OwotCQkvKiBUcnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBnZW5lcmljIGNvdW50ZXIgYWdhaW4gKi8KLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKSB7Ci10cnlfZ2VuZXJpYzoKLQkJCWlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQoY3B1Yy0+dXNlZF9tYXNrLAotCQkJCQkJICB4ODZfcG11Lm51bV9jb3VudGVycyk7Ci0JCQlpZiAoaWR4ID09IHg4Nl9wbXUubnVtX2NvdW50ZXJzKQotCQkJCXJldHVybiAtRUFHQUlOOwotCi0JCQlzZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKTsKLQkJCWh3Yy0+aWR4ID0gaWR4OwotCQl9Ci0JCWh3Yy0+Y29uZmlnX2Jhc2UgID0geDg2X3BtdS5ldmVudHNlbDsKLQkJaHdjLT5jb3VudGVyX2Jhc2UgPSB4ODZfcG11LnBlcmZjdHI7Ci0JfQotCi0JcGVyZl9jb3VudGVyc19sYXBpY19pbml0KCk7Ci0KLQl4ODZfcG11LmRpc2FibGUoaHdjLCBpZHgpOwotCi0JY3B1Yy0+Y291bnRlcnNbaWR4XSA9IGNvdW50ZXI7Ci0Jc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKLQotCXg4Nl9wZXJmX2NvdW50ZXJfc2V0X3BlcmlvZChjb3VudGVyLCBod2MsIGlkeCk7Ci0JeDg2X3BtdS5lbmFibGUoaHdjLCBpZHgpOwotCi0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB4ODZfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKGh3Yy0+aWR4ID49IFg4Nl9QTUNfSURYX01BWCB8fAotCQkJCWNwdWMtPmNvdW50ZXJzW2h3Yy0+aWR4XSAhPSBjb3VudGVyKSkKLQkJcmV0dXJuOwotCi0JeDg2X3BtdS5lbmFibGUoaHdjLCBod2MtPmlkeCk7Ci19Ci0KLXZvaWQgcGVyZl9jb3VudGVyX3ByaW50X2RlYnVnKHZvaWQpCi17Ci0JdTY0IGN0cmwsIHN0YXR1cywgb3ZlcmZsb3csIHBtY19jdHJsLCBwbWNfY291bnQsIHByZXZfbGVmdCwgZml4ZWQ7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjcHUsIGlkeDsKLQotCWlmICgheDg2X3BtdS5udW1fY291bnRlcnMpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQljcHVjID0gJnBlcl9jcHUoY3B1X2h3X2NvdW50ZXJzLCBjcHUpOwotCi0JaWYgKHg4Nl9wbXUudmVyc2lvbiA+PSAyKSB7Ci0JCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBjdHJsKTsKLQkJcmRtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgc3RhdHVzKTsKLQkJcmRtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLCBvdmVyZmxvdyk7Ci0JCXJkbXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMLCBmaXhlZCk7Ci0KLQkJcHJfaW5mbygiXG4iKTsKLQkJcHJfaW5mbygiQ1BVIyVkOiBjdHJsOiAgICAgICAlMDE2bGx4XG4iLCBjcHUsIGN0cmwpOwotCQlwcl9pbmZvKCJDUFUjJWQ6IHN0YXR1czogICAgICUwMTZsbHhcbiIsIGNwdSwgc3RhdHVzKTsKLQkJcHJfaW5mbygiQ1BVIyVkOiBvdmVyZmxvdzogICAlMDE2bGx4XG4iLCBjcHUsIG92ZXJmbG93KTsKLQkJcHJfaW5mbygiQ1BVIyVkOiBmaXhlZDogICAgICAlMDE2bGx4XG4iLCBjcHUsIGZpeGVkKTsKLQl9Ci0JcHJfaW5mbygiQ1BVIyVkOiB1c2VkOiAgICAgICAlMDE2bGx4XG4iLCBjcHUsICoodTY0ICopY3B1Yy0+dXNlZF9tYXNrKTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fY291bnRlcnM7IGlkeCsrKSB7Ci0JCXJkbXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCBwbWNfY3RybCk7Ci0JCXJkbXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCBwbWNfY291bnQpOwotCi0JCXByZXZfbGVmdCA9IHBlcl9jcHUocG1jX3ByZXZfbGVmdFtpZHhdLCBjcHUpOwotCi0JCXByX2luZm8oIkNQVSMlZDogICBnZW4tUE1DJWQgY3RybDogICUwMTZsbHhcbiIsCi0JCQljcHUsIGlkeCwgcG1jX2N0cmwpOwotCQlwcl9pbmZvKCJDUFUjJWQ6ICAgZ2VuLVBNQyVkIGNvdW50OiAlMDE2bGx4XG4iLAotCQkJY3B1LCBpZHgsIHBtY19jb3VudCk7Ci0JCXByX2luZm8oIkNQVSMlZDogICBnZW4tUE1DJWQgbGVmdDogICUwMTZsbHhcbiIsCi0JCQljcHUsIGlkeCwgcHJldl9sZWZ0KTsKLQl9Ci0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZDsgaWR4KyspIHsKLQkJcmRtc3JsKE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCArIGlkeCwgcG1jX2NvdW50KTsKLQotCQlwcl9pbmZvKCJDUFUjJWQ6IGZpeGVkLVBNQyVkIGNvdW50OiAlMDE2bGx4XG4iLAotCQkJY3B1LCBpZHgsIHBtY19jb3VudCk7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YywKLQkJCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IGNwdWMtPmRzOwotCXN0cnVjdCBidHNfcmVjb3JkIHsKLQkJdTY0CWZyb207Ci0JCXU2NAl0bzsKLQkJdTY0CWZsYWdzOwotCX07Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGNwdWMtPmNvdW50ZXJzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107Ci0JdW5zaWduZWQgbG9uZyBvcmlnX2lwID0gZGF0YS0+cmVncy0+aXA7Ci0Jc3RydWN0IGJ0c19yZWNvcmQgKmF0LCAqdG9wOwotCi0JaWYgKCFjb3VudGVyKQotCQlyZXR1cm47Ci0KLQlpZiAoIWRzKQotCQlyZXR1cm47Ci0KLQlhdCAgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2J1ZmZlcl9iYXNlOwotCXRvcCA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfaW5kZXg7Ci0KLQlkcy0+YnRzX2luZGV4ID0gZHMtPmJ0c19idWZmZXJfYmFzZTsKLQotCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgewotCQlkYXRhLT5yZWdzLT5pcAk9IGF0LT5mcm9tOwotCQlkYXRhLT5hZGRyCT0gYXQtPnRvOwotCi0JCXBlcmZfY291bnRlcl9vdXRwdXQoY291bnRlciwgMSwgZGF0YSk7Ci0JfQotCi0JZGF0YS0+cmVncy0+aXAJPSBvcmlnX2lwOwotCWRhdGEtPmFkZHIJPSAwOwotCi0JLyogVGhlcmUncyBuZXcgZGF0YSBhdmFpbGFibGUuICovCi0JY291bnRlci0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKLX0KLQotc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCWludCBpZHggPSBod2MtPmlkeDsKLQotCS8qCi0JICogTXVzdCBiZSBkb25lIGJlZm9yZSB3ZSBkaXNhYmxlLCBvdGhlcndpc2UgdGhlIG5taSBoYW5kbGVyCi0JICogY291bGQgcmVlbmFibGUgYWdhaW46Ci0JICovCi0JY2xlYXJfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOwotCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgY2xlYXJlZCBwb2ludGVyIGJlY29tZXMgdmlzaWJsZSBiZWZvcmUgd2UKLQkgKiAocG90ZW50aWFsbHkpIGZyZWUgdGhlIGNvdW50ZXI6Ci0JICovCi0JYmFycmllcigpOwotCi0JLyoKLQkgKiBEcmFpbiB0aGUgcmVtYWluaW5nIGRlbHRhIGNvdW50IG91dCBvZiBhIGNvdW50ZXIKLQkgKiB0aGF0IHdlIGFyZSBkaXNhYmxpbmc6Ci0JICovCi0JeDg2X3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgaHdjLCBpZHgpOwotCi0JLyogRHJhaW4gdGhlIHJlbWFpbmluZyBCVFMgcmVjb3Jkcy4gKi8KLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQkJc3RydWN0IHB0X3JlZ3MgcmVnczsKLQotCQlkYXRhLnJlZ3MgPSAmcmVnczsKLQkJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoY3B1YywgJmRhdGEpOwotCX0KLQljcHVjLT5jb3VudGVyc1tpZHhdID0gTlVMTDsKLQljbGVhcl9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOwotCi0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLX0KLQotLyoKLSAqIFNhdmUgYW5kIHJlc3RhcnQgYW4gZXhwaXJlZCBjb3VudGVyLiBDYWxsZWQgYnkgTk1JIGNvbnRleHRzLAotICogc28gaXQgaGFzIHRvIGJlIGNhcmVmdWwgYWJvdXQgcHJlZW1wdGluZyBub3JtYWwgY291bnRlciBvcHM6Ci0gKi8KLXN0YXRpYyBpbnQgaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0JaW50IGlkeCA9IGh3Yy0+aWR4OwotCWludCByZXQ7Ci0KLQl4ODZfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCBod2MsIGlkeCk7Ci0JcmV0ID0geDg2X3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KTsKLQotCWlmIChjb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQlpbnRlbF9wbXVfZW5hYmxlX2NvdW50ZXIoaHdjLCBpZHgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCi17Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKS5kczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpZHg7Ci0KLQlpZiAoIXg4Nl9wbXUubnVtX2NvdW50ZXJzKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlwcmludGsoImNsZWFyaW5nIFBNVSBzdGF0ZSBvbiBDUFUjJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpZHgrKykgewotCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgMHVsbCk7Ci0JCWNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCAwdWxsKTsKLQl9Ci0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZDsgaWR4KyspIHsKLQkJY2hlY2tpbmdfd3Jtc3JsKE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCArIGlkeCwgMHVsbCk7Ci0JfQotCWlmIChkcykKLQkJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgcDZfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOwotCWludCBpZHgsIGhhbmRsZWQgPSAwOwotCXU2NCB2YWw7Ci0KLQlkYXRhLnJlZ3MgPSByZWdzOwotCWRhdGEuYWRkciA9IDA7Ci0KLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fY291bnRlcnM7IGlkeCsrKSB7Ci0JCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQljb3VudGVyID0gY3B1Yy0+Y291bnRlcnNbaWR4XTsKLQkJaHdjID0gJmNvdW50ZXItPmh3OwotCi0JCXZhbCA9IHg4Nl9wZXJmX2NvdW50ZXJfdXBkYXRlKGNvdW50ZXIsIGh3YywgaWR4KTsKLQkJaWYgKHZhbCAmICgxVUxMIDw8ICh4ODZfcG11LmNvdW50ZXJfYml0cyAtIDEpKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIGNvdW50ZXIgb3ZlcmZsb3cKLQkJICovCi0JCWhhbmRsZWQJCT0gMTsKLQkJZGF0YS5wZXJpb2QJPSBjb3VudGVyLT5ody5sYXN0X3BlcmlvZDsKLQotCQlpZiAoIXg4Nl9wZXJmX2NvdW50ZXJfc2V0X3BlcmlvZChjb3VudGVyLCBod2MsIGlkeCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocGVyZl9jb3VudGVyX292ZXJmbG93KGNvdW50ZXIsIDEsICZkYXRhKSkKLQkJCXA2X3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOwotCX0KLQotCWlmIChoYW5kbGVkKQotCQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOwotCi0JcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLS8qCi0gKiBUaGlzIGhhbmRsZXIgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBsb2NhbCBBUElDLCBzbyB0aGUgQVBJQyBJUlEgaGFuZGxpbmcKLSAqIHJ1bGVzIGFwcGx5OgotICovCi1zdGF0aWMgaW50IGludGVsX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YzsKLQlpbnQgYml0LCBsb29wczsKLQl1NjQgYWNrLCBzdGF0dXM7Ci0KLQlkYXRhLnJlZ3MgPSByZWdzOwotCWRhdGEuYWRkciA9IDA7Ci0KLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQotCXBlcmZfZGlzYWJsZSgpOwotCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMsICZkYXRhKTsKLQlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwotCWlmICghc3RhdHVzKSB7Ci0JCXBlcmZfZW5hYmxlKCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWxvb3BzID0gMDsKLWFnYWluOgotCWlmICgrK2xvb3BzID4gMTAwKSB7Ci0JCVdBUk5fT05DRSgxLCAicGVyZmNvdW50ZXJzOiBpcnEgbG9vcCBzdHVjayFcbiIpOwotCQlwZXJmX2NvdW50ZXJfcHJpbnRfZGVidWcoKTsKLQkJaW50ZWxfcG11X3Jlc2V0KCk7Ci0JCXBlcmZfZW5hYmxlKCk7Ci0JCXJldHVybiAxOwotCX0KLQotCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7Ci0JYWNrID0gc3RhdHVzOwotCWZvcl9lYWNoX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJnN0YXR1cywgWDg2X1BNQ19JRFhfTUFYKSB7Ci0JCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBjcHVjLT5jb3VudGVyc1tiaXRdOwotCi0JCWNsZWFyX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopICZzdGF0dXMpOwotCQlpZiAoIXRlc3RfYml0KGJpdCwgY3B1Yy0+YWN0aXZlX21hc2spKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFpbnRlbF9wbXVfc2F2ZV9hbmRfcmVzdGFydChjb3VudGVyKSkKLQkJCWNvbnRpbnVlOwotCi0JCWRhdGEucGVyaW9kID0gY291bnRlci0+aHcubGFzdF9wZXJpb2Q7Ci0KLQkJaWYgKHBlcmZfY291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCAxLCAmZGF0YSkpCi0JCQlpbnRlbF9wbXVfZGlzYWJsZV9jb3VudGVyKCZjb3VudGVyLT5odywgYml0KTsKLQl9Ci0KLQlpbnRlbF9wbXVfYWNrX3N0YXR1cyhhY2spOwotCi0JLyoKLQkgKiBSZXBlYXQgaWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmU6Ci0JICovCi0Jc3RhdHVzID0gaW50ZWxfcG11X2dldF9zdGF0dXMoKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGFnYWluOwotCi0JcGVyZl9lbmFibGUoKTsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGFtZF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWM7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2M7Ci0JaW50IGlkeCwgaGFuZGxlZCA9IDA7Ci0JdTY0IHZhbDsKLQotCWRhdGEucmVncyA9IHJlZ3M7Ci0JZGF0YS5hZGRyID0gMDsKLQotCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaWR4KyspIHsKLQkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNvdW50ZXIgPSBjcHVjLT5jb3VudGVyc1tpZHhdOwotCQlod2MgPSAmY291bnRlci0+aHc7Ci0KLQkJdmFsID0geDg2X3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgaHdjLCBpZHgpOwotCQlpZiAodmFsICYgKDFVTEwgPDwgKHg4Nl9wbXUuY291bnRlcl9iaXRzIC0gMSkpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogY291bnRlciBvdmVyZmxvdwotCQkgKi8KLQkJaGFuZGxlZAkJPSAxOwotCQlkYXRhLnBlcmlvZAk9IGNvdW50ZXItPmh3Lmxhc3RfcGVyaW9kOwotCi0JCWlmICgheDg2X3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwZXJmX2NvdW50ZXJfb3ZlcmZsb3coY291bnRlciwgMSwgJmRhdGEpKQotCQkJYW1kX3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOwotCX0KLQotCWlmIChoYW5kbGVkKQotCQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOwotCi0JcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLXZvaWQgc21wX3BlcmZfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaXJxX2VudGVyKCk7Ci0JYWNrX0FQSUNfaXJxKCk7Ci0JaW5jX2lycV9zdGF0KGFwaWNfcGVuZGluZ19pcnFzKTsKLQlwZXJmX2NvdW50ZXJfZG9fcGVuZGluZygpOwotCWlycV9leGl0KCk7Ci19Ci0KLXZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JYXBpYy0+c2VuZF9JUElfc2VsZihMT0NBTF9QRU5ESU5HX1ZFQ1RPUik7Ci0jZW5kaWYKLX0KLQotdm9pZCBwZXJmX2NvdW50ZXJzX2xhcGljX2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlpZiAoIXg4Nl9wbXUuYXBpYyB8fCAheDg2X3BtdV9pbml0aWFsaXplZCgpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIEFsd2F5cyB1c2UgTk1JIGZvciBQTVUKLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IF9fa3Byb2JlcwotcGVyZl9jb3VudGVyX25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCSB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQotewotCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQotCWlmICghYXRvbWljX3JlYWQoJmFjdGl2ZV9jb3VudGVycykpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBESUVfTk1JOgotCWNhc2UgRElFX05NSV9JUEk6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCX0KLQotCXJlZ3MgPSBhcmdzLT5yZWdzOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7Ci0jZW5kaWYKLQkvKgotCSAqIENhbid0IHJlbHkgb24gdGhlIGhhbmRsZWQgcmV0dXJuIHZhbHVlIHRvIHNheSBpdCB3YXMgb3VyIE5NSSwgdHdvCi0JICogY291bnRlcnMgY291bGQgdHJpZ2dlciAnc2ltdWx0YW5lb3VzbHknIHJhaXNpbmcgdHdvIGJhY2stdG8tYmFjayBOTUlzLgotCSAqCi0JICogSWYgdGhlIGZpcnN0IE5NSSBoYW5kbGVzIGJvdGgsIHRoZSBsYXR0ZXIgd2lsbCBiZSBlbXB0eSBhbmQgZGF6ZQotCSAqIHRoZSBDUFUuCi0JICovCi0JeDg2X3BtdS5oYW5kbGVfaXJxKHJlZ3MpOwotCi0JcmV0dXJuIE5PVElGWV9TVE9QOwotfQotCi1zdGF0aWMgX19yZWFkX21vc3RseSBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGVyZl9jb3VudGVyX25taV9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbAkJPSBwZXJmX2NvdW50ZXJfbm1pX2hhbmRsZXIsCi0JLm5leHQJCQk9IE5VTEwsCi0JLnByaW9yaXR5CQk9IDEKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJwNiIsCi0JLmhhbmRsZV9pcnEJCT0gcDZfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IHA2X3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBwNl9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBwNl9wbXVfZW5hYmxlX2NvdW50ZXIsCi0JLmRpc2FibGUJCT0gcDZfcG11X2Rpc2FibGVfY291bnRlciwKLQkuZXZlbnRzZWwJCT0gTVNSX1A2X0VWTlRTRUwwLAotCS5wZXJmY3RyCQk9IE1TUl9QNl9QRVJGQ1RSMCwKLQkuZXZlbnRfbWFwCQk9IHA2X3BtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBwNl9wbXVfcmF3X2V2ZW50LAotCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUocDZfcGVyZm1vbl9ldmVudF9tYXApLAotCS5hcGljCQkJPSAxLAotCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCi0JLnZlcnNpb24JCT0gMCwKLQkubnVtX2NvdW50ZXJzCQk9IDIsCi0JLyoKLQkgKiBDb3VudGVycyBoYXZlIDQwIGJpdHMgaW1wbGVtZW50ZWQuIEhvd2V2ZXIgdGhleSBhcmUgZGVzaWduZWQgc3VjaAotCSAqIHRoYXQgYml0cyBbMzItMzldIGFyZSBzaWduIGV4dGVuc2lvbnMgb2YgYml0IDMxLiBBcyBzdWNoIHRoZQotCSAqIGVmZmVjdGl2ZSB3aWR0aCBvZiBhIGNvdW50ZXIgZm9yIFA2LWxpa2UgUE1VIGlzIDMyIGJpdHMgb25seS4KLQkgKgotCSAqIFNlZSBJQS0zMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgZGV2ZWxvcGVyIG1hbnVhbCBWb2wgM0IKLQkgKi8KLQkuY291bnRlcl9iaXRzCQk9IDMyLAotCS5jb3VudGVyX21hc2sJCT0gKDFVTEwgPDwgMzIpIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJJbnRlbCIsCi0JLmhhbmRsZV9pcnEJCT0gaW50ZWxfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IGludGVsX3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBpbnRlbF9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2NvdW50ZXIsCi0JLmRpc2FibGUJCT0gaW50ZWxfcG11X2Rpc2FibGVfY291bnRlciwKLQkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCi0JLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKLQkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAotCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAotCS5hcGljCQkJPSAxLAotCS8qCi0JICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKLQkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKLQkgKiB0aGUgZ2VuZXJpYyBjb3VudGVyIHBlcmlvZDoKLQkgKi8KLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAotCS5lbmFibGVfYnRzCQk9IGludGVsX3BtdV9lbmFibGVfYnRzLAotCS5kaXNhYmxlX2J0cwkJPSBpbnRlbF9wbXVfZGlzYWJsZV9idHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKLQkubmFtZQkJCT0gIkFNRCIsCi0JLmhhbmRsZV9pcnEJCT0gYW1kX3BtdV9oYW5kbGVfaXJxLAotCS5kaXNhYmxlX2FsbAkJPSBhbWRfcG11X2Rpc2FibGVfYWxsLAotCS5lbmFibGVfYWxsCQk9IGFtZF9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBhbWRfcG11X2VuYWJsZV9jb3VudGVyLAotCS5kaXNhYmxlCQk9IGFtZF9wbXVfZGlzYWJsZV9jb3VudGVyLAotCS5ldmVudHNlbAkJPSBNU1JfSzdfRVZOVFNFTDAsCi0JLnBlcmZjdHIJCT0gTVNSX0s3X1BFUkZDVFIwLAotCS5ldmVudF9tYXAJCT0gYW1kX3BtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBhbWRfcG11X3Jhd19ldmVudCwKLQkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKGFtZF9wZXJmbW9uX2V2ZW50X21hcCksCi0JLm51bV9jb3VudGVycwkJPSA0LAotCS5jb3VudGVyX2JpdHMJCT0gNDgsCi0JLmNvdW50ZXJfbWFzawkJPSAoMVVMTCA8PCA0OCkgLSAxLAotCS5hcGljCQkJPSAxLAotCS8qIHVzZSBoaWdoZXN0IGJpdCB0byBkZXRlY3Qgb3ZlcmZsb3cgKi8KLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCA0NykgLSAxLAotfTsKLQotc3RhdGljIGludCBwNl9wbXVfaW5pdCh2b2lkKQotewotCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKLQljYXNlIDE6Ci0JY2FzZSAzOiAgLyogUGVudGl1bSBQcm8gKi8KLQljYXNlIDU6Ci0JY2FzZSA2OiAgLyogUGVudGl1bSBJSSAqLwotCWNhc2UgNzoKLQljYXNlIDg6Ci0JY2FzZSAxMTogLyogUGVudGl1bSBJSUkgKi8KLQkJYnJlYWs7Ci0JY2FzZSA5OgotCWNhc2UgMTM6Ci0JCS8qIFBlbnRpdW0gTSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9jb250KCJ1bnN1cHBvcnRlZCBwNiBDUFUgbW9kZWwgJWQgIiwKLQkJCWJvb3RfY3B1X2RhdGEueDg2X21vZGVsKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JeDg2X3BtdSA9IHA2X3BtdTsKLQotCWlmICghY3B1X2hhc19hcGljKSB7Ci0JCXByX2luZm8oIm5vIEFQSUMsIGJvb3Qgd2l0aCB0aGUgXCJsYXBpY1wiIGJvb3QgcGFyYW1ldGVyIHRvIGZvcmNlLWVuYWJsZSBpdC5cbiIpOwotCQlwcl9pbmZvKCJubyBoYXJkd2FyZSBzYW1wbGluZyBpbnRlcnJ1cHQgYXZhaWxhYmxlLlxuIik7Ci0JCXg4Nl9wbXUuYXBpYyA9IDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKLXsKLQl1bmlvbiBjcHVpZDEwX2VkeCBlZHg7Ci0JdW5pb24gY3B1aWQxMF9lYXggZWF4OwotCXVuc2lnbmVkIGludCB1bnVzZWQ7Ci0JdW5zaWduZWQgaW50IGVieDsKLQlpbnQgdmVyc2lvbjsKLQotCWlmICghY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkgewotCQkvKiBjaGVjayBmb3IgUDYgcHJvY2Vzc29yIGZhbWlseSAqLwotCSAgIGlmIChib290X2NwdV9kYXRhLng4NiA9PSA2KSB7Ci0JCXJldHVybiBwNl9wbXVfaW5pdCgpOwotCSAgIH0gZWxzZSB7Ci0JCXJldHVybiAtRU5PREVWOwotCSAgIH0KLQl9Ci0KLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIEFyY2hpdGVjdHVyYWwgUGVyZk1vbiBzdXBwb3J0cwotCSAqIEJyYW5jaCBNaXNzZXMgUmV0aXJlZCBFdmVudCBvciBub3QuCi0JICovCi0JY3B1aWQoMTAsICZlYXguZnVsbCwgJmVieCwgJnVudXNlZCwgJmVkeC5mdWxsKTsKLQlpZiAoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDw9IEFSQ0hfUEVSRk1PTl9CUkFOQ0hfTUlTU0VTX1JFVElSRUQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdmVyc2lvbiA9IGVheC5zcGxpdC52ZXJzaW9uX2lkOwotCWlmICh2ZXJzaW9uIDwgMikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl4ODZfcG11CQkJCT0gaW50ZWxfcG11OwotCXg4Nl9wbXUudmVyc2lvbgkJCT0gdmVyc2lvbjsKLQl4ODZfcG11Lm51bV9jb3VudGVycwkJPSBlYXguc3BsaXQubnVtX2NvdW50ZXJzOwotCXg4Nl9wbXUuY291bnRlcl9iaXRzCQk9IGVheC5zcGxpdC5iaXRfd2lkdGg7Ci0JeDg2X3BtdS5jb3VudGVyX21hc2sJCT0gKDFVTEwgPDwgZWF4LnNwbGl0LmJpdF93aWR0aCkgLSAxOwotCi0JLyoKLQkgKiBRdWlyazogdjIgcGVyZm1vbiBkb2VzIG5vdCByZXBvcnQgZml4ZWQtcHVycG9zZSBjb3VudGVycywgc28KLQkgKiBhc3N1bWUgYXQgbGVhc3QgMyBjb3VudGVyczoKLQkgKi8KLQl4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZAk9IG1heCgoaW50KWVkeC5zcGxpdC5udW1fY291bnRlcnNfZml4ZWQsIDMpOwotCi0JLyoKLQkgKiBJbnN0YWxsIHRoZSBody1jYWNoZS1ldmVudHMgdGFibGU6Ci0JICovCi0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgewotCWNhc2UgMTU6IC8qIG9yaWdpbmFsIDY1IG5tIGNlbGVyb24vcGVudGl1bS9jb3JlMi94ZW9uLCAiTWVyb20iLyJDb25yb2UiICovCi0JY2FzZSAyMjogLyogc2luZ2xlLWNvcmUgNjUgbm0gY2VsZXJvbi9jb3JlMnNvbG8gIk1lcm9tLUwiLyJDb25yb2UtTCIgKi8KLQljYXNlIDIzOiAvKiBjdXJyZW50IDQ1IG5tIGNlbGVyb24vY29yZTIveGVvbiAiUGVucnluIi8iV29sZmRhbGUiICovCi0JY2FzZSAyOTogLyogc2l4LWNvcmUgNDUgbm0geGVvbiAiRHVubmluZ3RvbiIgKi8KLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgY29yZTJfaHdfY2FjaGVfZXZlbnRfaWRzLAotCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwotCi0JCXByX2NvbnQoIkNvcmUyIGV2ZW50cywgIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSAyNjoKLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMsCi0JCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7Ci0KLQkJcHJfY29udCgiTmVoYWxlbS9Db3JlaTcgZXZlbnRzLCAiKTsKLQkJYnJlYWs7Ci0JY2FzZSAyODoKLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgYXRvbV9od19jYWNoZV9ldmVudF9pZHMsCi0JCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7Ci0KLQkJcHJfY29udCgiQXRvbSBldmVudHMsICIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYW1kX3BtdV9pbml0KHZvaWQpCi17Ci0JLyogUGVyZm9ybWFuY2UtbW9uaXRvcmluZyBzdXBwb3J0ZWQgZnJvbSBLNyBhbmQgbGF0ZXI6ICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgNikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl4ODZfcG11ID0gYW1kX3BtdTsKLQotCS8qIEV2ZW50cyBhcmUgY29tbW9uIGZvciBhbGwgQU1EcyAqLwotCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGFtZF9od19jYWNoZV9ldmVudF9pZHMsCi0JICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBpbml0X2h3X3BlcmZfY291bnRlcnModm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JcHJfaW5mbygiUGVyZm9ybWFuY2UgQ291bnRlcnM6ICIpOwotCi0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKLQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCWVyciA9IGludGVsX3BtdV9pbml0KCk7Ci0JCWJyZWFrOwotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCWVyciA9IGFtZF9wbXVfaW5pdCgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCWlmIChlcnIgIT0gMCkgewotCQlwcl9jb250KCJubyBQTVUgZHJpdmVyLCBzb2Z0d2FyZSBjb3VudGVycyBvbmx5LlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcl9jb250KCIlcyBQTVUgZHJpdmVyLlxuIiwgeDg2X3BtdS5uYW1lKTsKLQotCWlmICh4ODZfcG11Lm51bV9jb3VudGVycyA+IFg4Nl9QTUNfTUFYX0dFTkVSSUMpIHsKLQkJV0FSTigxLCBLRVJOX0VSUiAiaHcgcGVyZiBjb3VudGVycyAlZCA+IG1heCglZCksIGNsaXBwaW5nISIsCi0JCSAgICAgeDg2X3BtdS5udW1fY291bnRlcnMsIFg4Nl9QTUNfTUFYX0dFTkVSSUMpOwotCQl4ODZfcG11Lm51bV9jb3VudGVycyA9IFg4Nl9QTUNfTUFYX0dFTkVSSUM7Ci0JfQotCXBlcmZfY291bnRlcl9tYXNrID0gKDEgPDwgeDg2X3BtdS5udW1fY291bnRlcnMpIC0gMTsKLQlwZXJmX21heF9jb3VudGVycyA9IHg4Nl9wbXUubnVtX2NvdW50ZXJzOwotCi0JaWYgKHg4Nl9wbXUubnVtX2NvdW50ZXJzX2ZpeGVkID4gWDg2X1BNQ19NQVhfRklYRUQpIHsKLQkJV0FSTigxLCBLRVJOX0VSUiAiaHcgcGVyZiBjb3VudGVycyBmaXhlZCAlZCA+IG1heCglZCksIGNsaXBwaW5nISIsCi0JCSAgICAgeDg2X3BtdS5udW1fY291bnRlcnNfZml4ZWQsIFg4Nl9QTUNfTUFYX0ZJWEVEKTsKLQkJeDg2X3BtdS5udW1fY291bnRlcnNfZml4ZWQgPSBYODZfUE1DX01BWF9GSVhFRDsKLQl9Ci0KLQlwZXJmX2NvdW50ZXJfbWFzayB8PQotCQkoKDFMTCA8PCB4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZCktMSkgPDwgWDg2X1BNQ19JRFhfRklYRUQ7Ci0JeDg2X3BtdS5pbnRlbF9jdHJsID0gcGVyZl9jb3VudGVyX21hc2s7Ci0KLQlwZXJmX2NvdW50ZXJzX2xhcGljX2luaXQoKTsKLQlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnBlcmZfY291bnRlcl9ubWlfbm90aWZpZXIpOwotCi0JcHJfaW5mbygiLi4uIHZlcnNpb246ICAgICAgICAgICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUudmVyc2lvbik7Ci0JcHJfaW5mbygiLi4uIGJpdCB3aWR0aDogICAgICAgICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUuY291bnRlcl9iaXRzKTsKLQlwcl9pbmZvKCIuLi4gZ2VuZXJpYyBjb3VudGVyczogICAgICAgICVkXG4iLCAgICAgeDg2X3BtdS5udW1fY291bnRlcnMpOwotCXByX2luZm8oIi4uLiB2YWx1ZSBtYXNrOiAgICAgICAgICAgICAgJTAxNkx4XG4iLCB4ODZfcG11LmNvdW50ZXJfbWFzayk7Ci0JcHJfaW5mbygiLi4uIG1heCBwZXJpb2Q6ICAgICAgICAgICAgICAlMDE2THhcbiIsIHg4Nl9wbXUubWF4X3BlcmlvZCk7Ci0JcHJfaW5mbygiLi4uIGZpeGVkLXB1cnBvc2UgY291bnRlcnM6ICAlZFxuIiwgICAgIHg4Nl9wbXUubnVtX2NvdW50ZXJzX2ZpeGVkKTsKLQlwcl9pbmZvKCIuLi4gY291bnRlciBtYXNrOiAgICAgICAgICAgICUwMTZMeFxuIiwgcGVyZl9jb3VudGVyX21hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeDg2X3BtdV9yZWFkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JeDg2X3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgJmNvdW50ZXItPmh3LCBjb3VudGVyLT5ody5pZHgpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBtdSBwbXUgPSB7Ci0JLmVuYWJsZQkJPSB4ODZfcG11X2VuYWJsZSwKLQkuZGlzYWJsZQk9IHg4Nl9wbXVfZGlzYWJsZSwKLQkucmVhZAkJPSB4ODZfcG11X3JlYWQsCi0JLnVudGhyb3R0bGUJPSB4ODZfcG11X3VudGhyb3R0bGUsCi19OwotCi1jb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBfX2h3X3BlcmZfY291bnRlcl9pbml0KGNvdW50ZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBFUlJfUFRSKGVycik7Ci0KLQlyZXR1cm4gJnBtdTsKLX0KLQotLyoKLSAqIGNhbGxjaGFpbiBzdXBwb3J0Ci0gKi8KLQotc3RhdGljIGlubGluZQotdm9pZCBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgdTY0IGlwKQotewotCWlmIChlbnRyeS0+bnIgPCBQRVJGX01BWF9TVEFDS19ERVBUSCkKLQkJZW50cnktPmlwW2VudHJ5LT5ucisrXSA9IGlwOwotfQotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfaXJxX2VudHJ5KTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnksIHBtY19ubWlfZW50cnkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgaW5fbm1pX2ZyYW1lKTsKLQotCi1zdGF0aWMgdm9pZAotYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sKHZvaWQgKmRhdGEsIGNoYXIgKm1zZywgdW5zaWduZWQgbG9uZyBzeW1ib2wpCi17Ci0JLyogSWdub3JlIHdhcm5pbmdzICovCi19Ci0KLXN0YXRpYyB2b2lkIGJhY2t0cmFjZV93YXJuaW5nKHZvaWQgKmRhdGEsIGNoYXIgKm1zZykKLXsKLQkvKiBJZ25vcmUgd2FybmluZ3MgKi8KLX0KLQotc3RhdGljIGludCBiYWNrdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKLXsKLQlwZXJfY3B1KGluX25taV9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9Ci0JCQl4ODZfaXNfc3RhY2tfaWQoTk1JX1NUQUNLLCBuYW1lKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBiYWNrdHJhY2VfYWRkcmVzcyh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCByZWxpYWJsZSkKLXsKLQlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gZGF0YTsKLQotCWlmIChwZXJfY3B1KGluX25taV9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLQkJcmV0dXJuOwotCi0JaWYgKHJlbGlhYmxlKQotCQljYWxsY2hhaW5fc3RvcmUoZW50cnksIGFkZHIpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIGJhY2t0cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcJCT0gYmFja3RyYWNlX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sCQk9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKLQkuc3RhY2sJCQk9IGJhY2t0cmFjZV9zdGFjaywKLQkuYWRkcmVzcwkJPSBiYWNrdHJhY2VfYWRkcmVzcywKLX07Ci0KLSNpbmNsdWRlICIuLi9kdW1wc3RhY2suaCIKLQotc3RhdGljIHZvaWQKLXBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKLXsKLQljYWxsY2hhaW5fc3RvcmUoZW50cnksIFBFUkZfQ09OVEVYVF9LRVJORUwpOwotCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgcmVncy0+aXApOwotCi0JZHVtcF90cmFjZShOVUxMLCByZWdzLCBOVUxMLCAwLCAmYmFja3RyYWNlX29wcywgZW50cnkpOwotfQotCi0vKgotICogYmVzdCBlZmZvcnQsIEdVUCBiYXNlZCBjb3B5X2Zyb21fdXNlcigpIHRoYXQgYXNzdW1lcyBJUlEgb3IgTk1JIGNvbnRleHQKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWNvcHlfZnJvbV91c2VyX25taSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKLXsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgYWRkciA9ICh1bnNpZ25lZCBsb25nKWZyb207Ci0JaW50IHR5cGUgPSBpbl9ubWkoKSA/IEtNX05NSSA6IEtNX0lSUTA7Ci0JdW5zaWduZWQgbG9uZyBzaXplLCBsZW4gPSAwOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXZvaWQgKm1hcDsKLQlpbnQgcmV0OwotCi0JZG8gewotCQlyZXQgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgMSwgMCwgJnBhZ2UpOwotCQlpZiAoIXJldCkKLQkJCWJyZWFrOwotCi0JCW9mZnNldCA9IGFkZHIgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCXNpemUgPSBtaW4oUEFHRV9TSVpFIC0gb2Zmc2V0LCBuIC0gbGVuKTsKLQotCQltYXAgPSBrbWFwX2F0b21pYyhwYWdlLCB0eXBlKTsKLQkJbWVtY3B5KHRvLCBtYXArb2Zmc2V0LCBzaXplKTsKLQkJa3VubWFwX2F0b21pYyhtYXAsIHR5cGUpOwotCQlwdXRfcGFnZShwYWdlKTsKLQotCQlsZW4gICs9IHNpemU7Ci0JCXRvICAgKz0gc2l6ZTsKLQkJYWRkciArPSBzaXplOwotCi0JfSB3aGlsZSAobGVuIDwgbik7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50IGNvcHlfc3RhY2tfZnJhbWUoY29uc3Qgdm9pZCBfX3VzZXIgKmZwLCBzdHJ1Y3Qgc3RhY2tfZnJhbWUgKmZyYW1lKQotewotCXVuc2lnbmVkIGxvbmcgYnl0ZXM7Ci0KLQlieXRlcyA9IGNvcHlfZnJvbV91c2VyX25taShmcmFtZSwgZnAsIHNpemVvZigqZnJhbWUpKTsKLQotCXJldHVybiBieXRlcyA9PSBzaXplb2YoKmZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLXBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkpCi17Ci0Jc3RydWN0IHN0YWNrX2ZyYW1lIGZyYW1lOwotCWNvbnN0IHZvaWQgX191c2VyICpmcDsKLQotCWlmICghdXNlcl9tb2RlKHJlZ3MpKQotCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwotCi0JZnAgPSAodm9pZCBfX3VzZXIgKilyZWdzLT5icDsKLQotCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgUEVSRl9DT05URVhUX1VTRVIpOwotCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgcmVncy0+aXApOwotCi0Jd2hpbGUgKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSB7Ci0JCWZyYW1lLm5leHRfZnJhbWUJICAgICA9IE5VTEw7Ci0JCWZyYW1lLnJldHVybl9hZGRyZXNzID0gMDsKLQotCQlpZiAoIWNvcHlfc3RhY2tfZnJhbWUoZnAsICZmcmFtZSkpCi0JCQlicmVhazsKLQotCQlpZiAoKHVuc2lnbmVkIGxvbmcpZnAgPCByZWdzLT5zcCkKLQkJCWJyZWFrOwotCi0JCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgZnJhbWUucmV0dXJuX2FkZHJlc3MpOwotCQlmcCA9IGZyYW1lLm5leHRfZnJhbWU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcGVyZl9kb19jYWxsY2hhaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkpCi17Ci0JaW50IGlzX3VzZXI7Ci0KLQlpZiAoIXJlZ3MpCi0JCXJldHVybjsKLQotCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7Ci0KLQlpZiAoIWN1cnJlbnQgfHwgY3VycmVudC0+cGlkID09IDApCi0JCXJldHVybjsKLQotCWlmIChpc191c2VyICYmIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORykKLQkJcmV0dXJuOwotCi0JaWYgKCFpc191c2VyKQotCQlwZXJmX2NhbGxjaGFpbl9rZXJuZWwocmVncywgZW50cnkpOwotCi0JaWYgKGN1cnJlbnQtPm1tKQotCQlwZXJmX2NhbGxjaGFpbl91c2VyKHJlZ3MsIGVudHJ5KTsKLX0KLQotc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICpwZXJmX2NhbGxjaGFpbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5OwotCi0JaWYgKGluX25taSgpKQotCQllbnRyeSA9ICZfX2dldF9jcHVfdmFyKHBtY19ubWlfZW50cnkpOwotCWVsc2UKLQkJZW50cnkgPSAmX19nZXRfY3B1X3ZhcihwbWNfaXJxX2VudHJ5KTsKLQotCWVudHJ5LT5uciA9IDA7Ci0KLQlwZXJmX2RvX2NhbGxjaGFpbihyZWdzLCBlbnRyeSk7Ci0KLQlyZXR1cm4gZW50cnk7Ci19Ci0KLXZvaWQgaHdfcGVyZl9jb3VudGVyX3NldHVwX29ubGluZShpbnQgY3B1KQotewotCWluaXRfZGVidWdfc3RvcmVfb25fY3B1KGNwdSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzdhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMCwwICsxLDIyOTggQEAKKy8qCisgKiBQZXJmb3JtYW5jZSBldmVudHMgeDg2IGFyY2hpdGVjdHVyZSBjb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogIENvcHlyaWdodCAoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLCA8bWFya3VzLnQubWV0emdlckBpbnRlbC5jb20+CisgKgorICogIEZvciBsaWNlbmNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORworICovCisKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorCitzdGF0aWMgdTY0IHBlcmZfZXZlbnRfbWFzayBfX3JlYWRfbW9zdGx5OworCisvKiBUaGUgbWF4aW1hbCBudW1iZXIgb2YgUEVCUyBldmVudHM6ICovCisjZGVmaW5lIE1BWF9QRUJTX0VWRU5UUwk0CisKKy8qIFRoZSBzaXplIG9mIGEgQlRTIHJlY29yZCBpbiBieXRlczogKi8KKyNkZWZpbmUgQlRTX1JFQ09SRF9TSVpFCQkyNAorCisvKiBUaGUgc2l6ZSBvZiBhIHBlci1jcHUgQlRTIGJ1ZmZlciBpbiBieXRlczogKi8KKyNkZWZpbmUgQlRTX0JVRkZFUl9TSVpFCQkoQlRTX1JFQ09SRF9TSVpFICogMjA0OCkKKworLyogVGhlIEJUUyBvdmVyZmxvdyB0aHJlc2hvbGQgaW4gYnl0ZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXI6ICovCisjZGVmaW5lIEJUU19PVkZMX1RICQkoQlRTX1JFQ09SRF9TSVpFICogMTI4KQorCisKKy8qCisgKiBCaXRzIGluIHRoZSBkZWJ1Z2N0bG1zciBjb250cm9sbGluZyBicmFuY2ggdHJhY2luZy4KKyAqLworI2RlZmluZSBYODZfREVCVUdDVExfVFIJCQkoMSA8PCA2KQorI2RlZmluZSBYODZfREVCVUdDVExfQlRTCQkoMSA8PCA3KQorI2RlZmluZSBYODZfREVCVUdDVExfQlRJTlQJCSgxIDw8IDgpCisjZGVmaW5lIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TCQkoMSA8PCA5KQorI2RlZmluZSBYODZfREVCVUdDVExfQlRTX09GRl9VU1IJKDEgPDwgMTApCisKKy8qCisgKiBBIGRlYnVnIHN0b3JlIGNvbmZpZ3VyYXRpb24uCisgKgorICogV2Ugb25seSBzdXBwb3J0IGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgNjRiaXQgZmllbGRzLgorICovCitzdHJ1Y3QgZGVidWdfc3RvcmUgeworCXU2NAlidHNfYnVmZmVyX2Jhc2U7CisJdTY0CWJ0c19pbmRleDsKKwl1NjQJYnRzX2Fic29sdXRlX21heGltdW07CisJdTY0CWJ0c19pbnRlcnJ1cHRfdGhyZXNob2xkOworCXU2NAlwZWJzX2J1ZmZlcl9iYXNlOworCXU2NAlwZWJzX2luZGV4OworCXU2NAlwZWJzX2Fic29sdXRlX21heGltdW07CisJdTY0CXBlYnNfaW50ZXJydXB0X3RocmVzaG9sZDsKKwl1NjQJcGVic19ldmVudF9yZXNldFtNQVhfUEVCU19FVkVOVFNdOworfTsKKworc3RydWN0IGNwdV9od19ldmVudHMgeworCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbWDg2X1BNQ19JRFhfTUFYXTsKKwl1bnNpZ25lZCBsb25nCQl1c2VkX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKKwl1bnNpZ25lZCBsb25nCQlhY3RpdmVfbWFza1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOworCXVuc2lnbmVkIGxvbmcJCWludGVycnVwdHM7CisJaW50CQkJZW5hYmxlZDsKKwlzdHJ1Y3QgZGVidWdfc3RvcmUJKmRzOworfTsKKworLyoKKyAqIHN0cnVjdCB4ODZfcG11IC0gZ2VuZXJpYyB4ODYgcG11CisgKi8KK3N0cnVjdCB4ODZfcG11IHsKKwljb25zdCBjaGFyCSpuYW1lOworCWludAkJdmVyc2lvbjsKKwlpbnQJCSgqaGFuZGxlX2lycSkoc3RydWN0IHB0X3JlZ3MgKik7CisJdm9pZAkJKCpkaXNhYmxlX2FsbCkodm9pZCk7CisJdm9pZAkJKCplbmFibGVfYWxsKSh2b2lkKTsKKwl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IGh3X3BlcmZfZXZlbnQgKiwgaW50KTsKKwl2b2lkCQkoKmRpc2FibGUpKHN0cnVjdCBod19wZXJmX2V2ZW50ICosIGludCk7CisJdW5zaWduZWQJZXZlbnRzZWw7CisJdW5zaWduZWQJcGVyZmN0cjsKKwl1NjQJCSgqZXZlbnRfbWFwKShpbnQpOworCXU2NAkJKCpyYXdfZXZlbnQpKHU2NCk7CisJaW50CQltYXhfZXZlbnRzOworCWludAkJbnVtX2V2ZW50czsKKwlpbnQJCW51bV9ldmVudHNfZml4ZWQ7CisJaW50CQlldmVudF9iaXRzOworCXU2NAkJZXZlbnRfbWFzazsKKwlpbnQJCWFwaWM7CisJdTY0CQltYXhfcGVyaW9kOworCXU2NAkJaW50ZWxfY3RybDsKKwl2b2lkCQkoKmVuYWJsZV9idHMpKHU2NCBjb25maWcpOworCXZvaWQJCSgqZGlzYWJsZV9idHMpKHZvaWQpOworfTsKKworc3RhdGljIHN0cnVjdCB4ODZfcG11IHg4Nl9wbXUgX19yZWFkX21vc3RseTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfZXZlbnRzLCBjcHVfaHdfZXZlbnRzKSA9IHsKKwkuZW5hYmxlZCA9IDEsCit9OworCisvKgorICogTm90IHN1cmUgYWJvdXQgc29tZSBvZiB0aGVzZQorICovCitzdGF0aWMgY29uc3QgdTY0IHA2X3BlcmZtb25fZXZlbnRfbWFwW10gPQoreworICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwNzksCisgIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4MGYyZSwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDAxMmUsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCisgIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDA2MiwKK307CisKK3N0YXRpYyB1NjQgcDZfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCit7CisJcmV0dXJuIHA2X3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKK30KKworLyoKKyAqIEV2ZW50IHNldHRpbmcgdGhhdCBpcyBzcGVjaWZpZWQgbm90IHRvIGNvdW50IGFueXRoaW5nLgorICogV2UgdXNlIHRoaXMgdG8gZWZmZWN0aXZlbHkgZGlzYWJsZSBhIGNvdW50ZXIuCisgKgorICogTDJfUlFTVFMgd2l0aCAwIE1FU0kgdW5pdCBtYXNrLgorICovCisjZGVmaW5lIFA2X05PUF9FVkVOVAkJCTB4MDAwMDAwMkVVTEwKKworc3RhdGljIHU2NCBwNl9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKK3sKKyNkZWZpbmUgUDZfRVZOVFNFTF9FVkVOVF9NQVNLCQkweDAwMDAwMEZGVUxMCisjZGVmaW5lIFA2X0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCisjZGVmaW5lIFA2X0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCisjZGVmaW5lIFA2X0VWTlRTRUxfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9SRUdfTUFTSwkJMHhGRjAwMDAwMFVMTAorCisjZGVmaW5lIFA2X0VWTlRTRUxfTUFTSwkJCVwKKwkoUDZfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAorCSBQNl9FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCisJIFA2X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKKwkgUDZfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAorCSBQNl9FVk5UU0VMX1JFR19NQVNLKQorCisJcmV0dXJuIGh3X2V2ZW50ICYgUDZfRVZOVFNFTF9NQVNLOworfQorCisKKy8qCisgKiBJbnRlbCBQZXJmTW9uIHYzLiBVc2VkIG9uIENvcmUyIGFuZCBsYXRlci4KKyAqLworc3RhdGljIGNvbnN0IHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDNjLAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDRmMmUsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHg0MTJlLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCit9OworCitzdGF0aWMgdTY0IGludGVsX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKKy8qCisgKiBHZW5lcmFsaXplZCBodyBjYWNoaW5nIHJlbGF0ZWQgaHdfZXZlbnQgdGFibGUsIGZpbGxlZAorICogaW4gb24gYSBwZXIgbW9kZWwgYmFzaXMuIEEgdmFsdWUgb2YgMCBtZWFucworICogJ25vdCBzdXBwb3J0ZWQnLCAtMSBtZWFucyAnaHdfZXZlbnQgbWFrZXMgbm8gc2Vuc2Ugb24KKyAqIHRoaXMgQ1BVJywgYW55IG90aGVyIHZhbHVlIG1lYW5zIHRoZSByYXcgaHdfZXZlbnQKKyAqIElELgorICovCisKKyNkZWZpbmUgQyh4KSBQRVJGX0NPVU5UX0hXX0NBQ0hFXyMjeAorCitzdGF0aWMgdTY0IF9fcmVhZF9tb3N0bHkgaHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXTsKKworc3RhdGljIGNvbnN0IHU2NCBuZWhhbGVtX2h3X2NhY2hlX2V2ZW50X2lkcworCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQoreworIFsgQyhMMUQpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQwLCAvKiBMMURfQ0FDSEVfTEQuSV9TVEFURSAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTRlLCAvKiBMMURfUFJFRkVUQ0guUkVRVUVTVFMgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjRlLCAvKiBMMURfUFJFRkVUQ0guTUlTUyAgICAgICAgICAgICovCisJfSwKKyB9LAorIFsgQyhMMUkgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDMyNCwgLyogTDJfUlFTVFMuTE9BRFMgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIyNCwgLyogTDJfUlFTVFMuTERfTUlTUyAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGMyNCwgLyogTDJfUlFTVFMuUkZPUyAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDgyNCwgLyogTDJfUlFTVFMuUkZPX01JU1MgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyZSwgLyogTExDIFJlZmVyZW5jZSAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyZSwgLyogTExDIE1pc3NlcyAgICAgICAgICAgICAgICAgICAqLworCX0sCisgfSwKKyBbIEMoRFRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgKGFsaWFzKSAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxMDgsIC8qIERUTEJfTE9BRF9NSVNTRVMuQU5ZICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgKGFsaWFzKSAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxMGMsIC8qIE1FTV9TVE9SRV9SRVRJUkVELkRUTEJfTUlTUyAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAorCX0sCisgfSwKKyBbIEMoSVRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDIwYzgsIC8qIElUTEJfTUlTU19SRVRJUkVEICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQUxMX0JSQU5DSEVTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwM2U4LCAvKiBCUFVfQ0xFQVJTLkFOWSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDEwNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4MSwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDgwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDEyODIsIC8qIElUTEJNSVNTRVMgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBhdG9tX2h3X2NhY2hlX2V2ZW50X2lkcworCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQoreworIFsgQyhMMUQpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMTQwLCAvKiBMMURfQ0FDSEUuTEQgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEUuU1QgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMMUkgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMjksIC8qIEwyX0xELk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTI5LCAvKiBMMl9MRC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyQSwgLyogTDJfU1QuTUVTSSAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMkEsIC8qIEwyX1NULklTVEFURSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoRFRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwNTA4LCAvKiBEVExCX01JU1NFUy5NSVNTX0xEICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjI0MCwgLyogTDFEX0NBQ0hFX1NULk1FU0kgIChhbGlhcykgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA2MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfU1QgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoSVRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgyLCAvKiBJVExCLk1JU1NFUyAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTlkgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGM1LCAvKiBCUF9JTlNUX1JFVElSRUQuTUlTUFJFRCAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKK3N0YXRpYyB1NjQgaW50ZWxfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCit7CisjZGVmaW5lIENPUkVfRVZOVFNFTF9FVkVOVF9NQVNLCQkweDAwMDAwMEZGVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX1JFR19NQVNLCTB4RkYwMDAwMDBVTEwKKworI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAorCShDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKKwkgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCisJIENPUkVfRVZOVFNFTF9FREdFX01BU0sgIHwJXAorCSBDT1JFX0VWTlRTRUxfSU5WX01BU0sgIHwJXAorCSBDT1JFX0VWTlRTRUxfUkVHX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBDT1JFX0VWTlRTRUxfTUFTSzsKK30KKworc3RhdGljIGNvbnN0IHU2NCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQxLCAvKiBEYXRhIENhY2hlIE1pc3NlcyAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0MiwgLyogRGF0YSBDYWNoZSBSZWZpbGxzIDpzeXN0ZW0gKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDI2NywgLyogRGF0YSBQcmVmZXRjaGVyIDphdHRlbXB0cyAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNjcsIC8qIERhdGEgUHJlZmV0Y2hlciA6Y2FuY2VsbGVkICovCisJfSwKKyB9LAorIFsgQyhMMUkgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgZmV0Y2hlcyAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODEsIC8qIEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcyAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTRCLCAvKiBQcmVmZXRjaCBJbnN0cnVjdGlvbnMgOkxvYWQgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzN0QsIC8qIFJlcXVlc3RzIHRvIEwyIENhY2hlIDpJQytEQyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDM3RSwgLyogTDIgQ2FjaGUgTWlzc2VzIDogSUMrREMgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTdGLCAvKiBMMiBGaWxsL1dyaXRlYmFjayAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDQwLCAvKiBEYXRhIENhY2hlIEFjY2Vzc2VzICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA0NiwgLyogTDEgRFRMQiBhbmQgTDIgRExUQiBNaXNzICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoSVRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEluc3RydWN0aW9uIGZlY3RoZXMgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDg1LCAvKiBJbnN0ci4gZmV0Y2ggSVRMQiBtaXNzZXMgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzIsIC8qIFJldGlyZWQgQnJhbmNoIEluc3RyLiAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGMzLCAvKiBSZXRpcmVkIE1pc3ByZWRpY3RlZCBCSSAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKKy8qCisgKiBBTUQgUGVyZm9ybWFuY2UgTW9uaXRvciBLNyBhbmQgbGF0ZXIuCisgKi8KK3N0YXRpYyBjb25zdCB1NjQgYW1kX3BlcmZtb25fZXZlbnRfbWFwW10gPQoreworICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwNzYsCisgIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4MDA4MCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDAwODEsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCit9OworCitzdGF0aWMgdTY0IGFtZF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKK3sKKwlyZXR1cm4gYW1kX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKK30KKworc3RhdGljIHU2NCBhbWRfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCit7CisjZGVmaW5lIEs3X0VWTlRTRUxfRVZFTlRfTUFTSwkweDcwMDAwMDBGRlVMTAorI2RlZmluZSBLN19FVk5UU0VMX1VOSVRfTUFTSwkweDAwMDAwRkYwMFVMTAorI2RlZmluZSBLN19FVk5UU0VMX0VER0VfTUFTSwkweDAwMDA0MDAwMFVMTAorI2RlZmluZSBLN19FVk5UU0VMX0lOVl9NQVNLCTB4MDAwODAwMDAwVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfUkVHX01BU0sJMHgwRkYwMDAwMDBVTEwKKworI2RlZmluZSBLN19FVk5UU0VMX01BU0sJCQlcCisJKEs3X0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKKwkgSzdfRVZOVFNFTF9VTklUX01BU0sgIHwJXAorCSBLN19FVk5UU0VMX0VER0VfTUFTSyAgfAlcCisJIEs3X0VWTlRTRUxfSU5WX01BU0sgICB8CVwKKwkgSzdfRVZOVFNFTF9SRUdfTUFTSykKKworCXJldHVybiBod19ldmVudCAmIEs3X0VWTlRTRUxfTUFTSzsKK30KKworLyoKKyAqIFByb3BhZ2F0ZSBldmVudCBlbGFwc2VkIHRpbWUgaW50byB0aGUgZ2VuZXJpYyBldmVudC4KKyAqIENhbiBvbmx5IGJlIGV4ZWN1dGVkIG9uIHRoZSBDUFUgd2hlcmUgdGhlIGV2ZW50IGlzIGFjdGl2ZS4KKyAqIFJldHVybnMgdGhlIGRlbHRhIGV2ZW50cyBwcm9jZXNzZWQuCisgKi8KK3N0YXRpYyB1NjQKK3g4Nl9wZXJmX2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCWludCBzaGlmdCA9IDY0IC0geDg2X3BtdS5ldmVudF9iaXRzOworCXU2NCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKKwlzNjQgZGVsdGE7CisKKwlpZiAoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIENhcmVmdWw6IGFuIE5NSSBtaWdodCBtb2RpZnkgdGhlIHByZXZpb3VzIGV2ZW50IHZhbHVlLgorCSAqCisJICogT3VyIHRhY3RpYyB0byBoYW5kbGUgdGhpcyBpcyB0byBmaXJzdCBhdG9taWNhbGx5IHJlYWQgYW5kCisJICogZXhjaGFuZ2UgYSBuZXcgcmF3IGNvdW50IC0gdGhlbiBhZGQgdGhhdCBuZXctcHJldiBkZWx0YQorCSAqIGNvdW50IHRvIHRoZSBnZW5lcmljIGV2ZW50IGF0b21pY2FsbHk6CisJICovCithZ2FpbjoKKwlwcmV2X3Jhd19jb3VudCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJcmRtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGlkeCwgbmV3X3Jhd19jb3VudCk7CisKKwlpZiAoYXRvbWljNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKKwkJCQkJbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpCisJCWdvdG8gYWdhaW47CisKKwkvKgorCSAqIE5vdyB3ZSBoYXZlIHRoZSBuZXcgcmF3IHZhbHVlIGFuZCBoYXZlIHVwZGF0ZWQgdGhlIHByZXYKKwkgKiB0aW1lc3RhbXAgYWxyZWFkeS4gV2UgY2FuIG5vdyBjYWxjdWxhdGUgdGhlIGVsYXBzZWQgZGVsdGEKKwkgKiAoZXZlbnQtKXRpbWUgYW5kIGFkZCB0aGF0IHRvIHRoZSBnZW5lcmljIGV2ZW50LgorCSAqCisJICogQ2FyZWZ1bCwgbm90IGFsbCBodyBzaWduLWV4dGVuZHMgYWJvdmUgdGhlIHBoeXNpY2FsIHdpZHRoCisJICogb2YgdGhlIGNvdW50LgorCSAqLworCWRlbHRhID0gKG5ld19yYXdfY291bnQgPDwgc2hpZnQpIC0gKHByZXZfcmF3X2NvdW50IDw8IHNoaWZ0KTsKKwlkZWx0YSA+Pj0gc2hpZnQ7CisKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWF0b21pYzY0X3N1YihkZWx0YSwgJmh3Yy0+cGVyaW9kX2xlZnQpOworCisJcmV0dXJuIG5ld19yYXdfY291bnQ7Cit9CisKK3N0YXRpYyBhdG9taWNfdCBhY3RpdmVfZXZlbnRzOworc3RhdGljIERFRklORV9NVVRFWChwbWNfcmVzZXJ2ZV9tdXRleCk7CisKK3N0YXRpYyBib29sIHJlc2VydmVfcG1jX2hhcmR3YXJlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJaW50IGk7CisKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQorCQlkaXNhYmxlX2xhcGljX25taV93YXRjaGRvZygpOworCisJZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaSsrKSB7CisJCWlmICghcmVzZXJ2ZV9wZXJmY3RyX25taSh4ODZfcG11LnBlcmZjdHIgKyBpKSkKKwkJCWdvdG8gcGVyZmN0cl9mYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB4ODZfcG11Lm51bV9ldmVudHM7IGkrKykgeworCQlpZiAoIXJlc2VydmVfZXZudHNlbF9ubWkoeDg2X3BtdS5ldmVudHNlbCArIGkpKQorCQkJZ290byBldmVudHNlbF9mYWlsOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHRydWU7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKK2V2ZW50c2VsX2ZhaWw6CisJZm9yIChpLS07IGkgPj0gMDsgaS0tKQorCQlyZWxlYXNlX2V2bnRzZWxfbm1pKHg4Nl9wbXUuZXZlbnRzZWwgKyBpKTsKKworCWkgPSB4ODZfcG11Lm51bV9ldmVudHM7CisKK3BlcmZjdHJfZmFpbDoKKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCXJlbGVhc2VfcGVyZmN0cl9ubWkoeDg2X3BtdS5wZXJmY3RyICsgaSk7CisKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQorCQllbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9wbWNfaGFyZHdhcmUodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB4ODZfcG11Lm51bV9ldmVudHM7IGkrKykgeworCQlyZWxlYXNlX3BlcmZjdHJfbm1pKHg4Nl9wbXUucGVyZmN0ciArIGkpOworCQlyZWxlYXNlX2V2bnRzZWxfbm1pKHg4Nl9wbXUuZXZlbnRzZWwgKyBpKTsKKwl9CisKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQorCQllbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBib29sIGJ0c19hdmFpbGFibGUodm9pZCkKK3sKKwlyZXR1cm4geDg2X3BtdS5lbmFibGVfYnRzICE9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2RlYnVnX3N0b3JlX29uX2NwdShpbnQgY3B1KQoreworCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSkuZHM7CisKKwlpZiAoIWRzKQorCQlyZXR1cm47CisKKwl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9EU19BUkVBLAorCQkgICAgICh1MzIpKCh1NjQpKHVuc2lnbmVkIGxvbmcpZHMpLAorCQkgICAgICh1MzIpKCh1NjQpKHVuc2lnbmVkIGxvbmcpZHMgPj4gMzIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbmlfZGVidWdfc3RvcmVfb25fY3B1KGludCBjcHUpCit7CisJaWYgKCFwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSkuZHMpCisJCXJldHVybjsKKworCXdybXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX0RTX0FSRUEsIDAsIDApOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2J0c19oYXJkd2FyZSh2b2lkKQoreworCWludCBjcHU7CisKKwlpZiAoIWJ0c19hdmFpbGFibGUoKSkKKwkJcmV0dXJuOworCisJZ2V0X29ubGluZV9jcHVzKCk7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJZmluaV9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IHBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KS5kczsKKworCQlpZiAoIWRzKQorCQkJY29udGludWU7CisKKwkJcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpLmRzID0gTlVMTDsKKworCQlrZnJlZSgodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfYnVmZmVyX2Jhc2UpOworCQlrZnJlZShkcyk7CisJfQorCisJcHV0X29ubGluZV9jcHVzKCk7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXJ2ZV9idHNfaGFyZHdhcmUodm9pZCkKK3sKKwlpbnQgY3B1LCBlcnIgPSAwOworCisJaWYgKCFidHNfYXZhaWxhYmxlKCkpCisJCXJldHVybiAwOworCisJZ2V0X29ubGluZV9jcHVzKCk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHM7CisJCXZvaWQgKmJ1ZmZlcjsKKworCQllcnIgPSAtRU5PTUVNOworCQlidWZmZXIgPSBremFsbG9jKEJUU19CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICh1bmxpa2VseSghYnVmZmVyKSkKKwkJCWJyZWFrOworCisJCWRzID0ga3phbGxvYyhzaXplb2YoKmRzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICh1bmxpa2VseSghZHMpKSB7CisJCQlrZnJlZShidWZmZXIpOworCQkJYnJlYWs7CisJCX0KKworCQlkcy0+YnRzX2J1ZmZlcl9iYXNlID0gKHU2NCkodW5zaWduZWQgbG9uZylidWZmZXI7CisJCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOworCQlkcy0+YnRzX2Fic29sdXRlX21heGltdW0gPQorCQkJZHMtPmJ0c19idWZmZXJfYmFzZSArIEJUU19CVUZGRVJfU0laRTsKKwkJZHMtPmJ0c19pbnRlcnJ1cHRfdGhyZXNob2xkID0KKwkJCWRzLT5idHNfYWJzb2x1dGVfbWF4aW11bSAtIEJUU19PVkZMX1RIOworCisJCXBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KS5kcyA9IGRzOworCQllcnIgPSAwOworCX0KKworCWlmIChlcnIpCisJCXJlbGVhc2VfYnRzX2hhcmR3YXJlKCk7CisJZWxzZSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQkJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKKwl9CisKKwlwdXRfb25saW5lX2NwdXMoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGh3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmFjdGl2ZV9ldmVudHMsICZwbWNfcmVzZXJ2ZV9tdXRleCkpIHsKKwkJcmVsZWFzZV9wbWNfaGFyZHdhcmUoKTsKKwkJcmVsZWFzZV9idHNfaGFyZHdhcmUoKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCB4ODZfcG11X2luaXRpYWxpemVkKHZvaWQpCit7CisJcmV0dXJuIHg4Nl9wbXUuaGFuZGxlX2lycSAhPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludAorc2V0X2V4dF9od19hdHRyKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCit7CisJdW5zaWduZWQgaW50IGNhY2hlX3R5cGUsIGNhY2hlX29wLCBjYWNoZV9yZXN1bHQ7CisJdTY0IGNvbmZpZywgdmFsOworCisJY29uZmlnID0gYXR0ci0+Y29uZmlnOworCisJY2FjaGVfdHlwZSA9IChjb25maWcgPj4gIDApICYgMHhmZjsKKwlpZiAoY2FjaGVfdHlwZSA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYWNoZV9vcCA9IChjb25maWcgPj4gIDgpICYgMHhmZjsKKwlpZiAoY2FjaGVfb3AgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FjaGVfcmVzdWx0ID0gKGNvbmZpZyA+PiAxNikgJiAweGZmOworCWlmIChjYWNoZV9yZXN1bHQgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IGh3X2NhY2hlX2V2ZW50X2lkc1tjYWNoZV90eXBlXVtjYWNoZV9vcF1bY2FjaGVfcmVzdWx0XTsKKworCWlmICh2YWwgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAodmFsID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWh3Yy0+Y29uZmlnIHw9IHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2J0cyh1NjQgY29uZmlnKQoreworCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7CisKKwlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOworCisJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX1RSOworCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFM7CisJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUSU5UOworCisJaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKSkKKwkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1M7CisKKwlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKSkKKwkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSOworCisJdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X2Rpc2FibGVfYnRzKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwl1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyOworCisJaWYgKCFjcHVjLT5kcykKKwkJcmV0dXJuOworCisJZGVidWdjdGxtc3IgPSBnZXRfZGVidWdjdGxtc3IoKTsKKworCWRlYnVnY3RsbXNyICY9CisJCX4oWDg2X0RFQlVHQ1RMX1RSIHwgWDg2X0RFQlVHQ1RMX0JUUyB8IFg4Nl9ERUJVR0NUTF9CVElOVCB8CisJCSAgWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1MgfCBYODZfREVCVUdDVExfQlRTX09GRl9VU1IpOworCisJdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGF0dHJfdHlwZQorICovCitzdGF0aWMgaW50IF9faHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gJmV2ZW50LT5hdHRyOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXU2NCBjb25maWc7CisJaW50IGVycjsKKworCWlmICgheDg2X3BtdV9pbml0aWFsaXplZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IDA7CisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhY3RpdmVfZXZlbnRzKSkgeworCQltdXRleF9sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CisJCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlX2V2ZW50cykgPT0gMCkgeworCQkJaWYgKCFyZXNlcnZlX3BtY19oYXJkd2FyZSgpKQorCQkJCWVyciA9IC1FQlVTWTsKKwkJCWVsc2UKKwkJCQllcnIgPSByZXNlcnZlX2J0c19oYXJkd2FyZSgpOworCQl9CisJCWlmICghZXJyKQorCQkJYXRvbWljX2luYygmYWN0aXZlX2V2ZW50cyk7CisJCW11dGV4X3VubG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisKKwkvKgorCSAqIEdlbmVyYXRlIFBNQyBJUlFzOgorCSAqIChrZWVwICdlbmFibGVkJyBiaXQgY2xlYXIgZm9yIG5vdykKKwkgKi8KKwlod2MtPmNvbmZpZyA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9JTlQ7CisKKwkvKgorCSAqIENvdW50IHVzZXIgYW5kIE9TIGV2ZW50cyB1bmxlc3MgcmVxdWVzdGVkIG5vdCB0by4KKwkgKi8KKwlpZiAoIWF0dHItPmV4Y2x1ZGVfdXNlcikKKwkJaHdjLT5jb25maWcgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUjsKKwlpZiAoIWF0dHItPmV4Y2x1ZGVfa2VybmVsKQorCQlod2MtPmNvbmZpZyB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1M7CisKKwlpZiAoIWh3Yy0+c2FtcGxlX3BlcmlvZCkgeworCQlod2MtPnNhbXBsZV9wZXJpb2QgPSB4ODZfcG11Lm1heF9wZXJpb2Q7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgUE1VIGluaXRpYWxpemVkIGJ1dCBubyBBUElDCisJCSAqIGludGVycnVwdHMsIHdlIGNhbm5vdCBzYW1wbGUgaGFyZHdhcmUKKwkJICogZXZlbnRzICh1c2VyLXNwYWNlIGhhcyB0byBmYWxsIGJhY2sgYW5kCisJCSAqIHNhbXBsZSB2aWEgYSBocnRpbWVyIGJhc2VkIHNvZnR3YXJlIGV2ZW50KToKKwkJICovCisJCWlmICgheDg2X3BtdS5hcGljKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qCisJICogUmF3IGh3X2V2ZW50IHR5cGUgcHJvdmlkZSB0aGUgY29uZmlnIGluIHRoZSBod19ldmVudCBzdHJ1Y3R1cmUKKwkgKi8KKwlpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfUkFXKSB7CisJCWh3Yy0+Y29uZmlnIHw9IHg4Nl9wbXUucmF3X2V2ZW50KGF0dHItPmNvbmZpZyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSkKKwkJcmV0dXJuIHNldF9leHRfaHdfYXR0cihod2MsIGF0dHIpOworCisJaWYgKGF0dHItPmNvbmZpZyA+PSB4ODZfcG11Lm1heF9ldmVudHMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBUaGUgZ2VuZXJpYyBtYXA6CisJICovCisJY29uZmlnID0geDg2X3BtdS5ldmVudF9tYXAoYXR0ci0+Y29uZmlnKTsKKworCWlmIChjb25maWcgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoY29uZmlnID09IC0xTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBCcmFuY2ggdHJhY2luZzoKKwkgKi8KKwlpZiAoKGF0dHItPmNvbmZpZyA9PSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpICYmCisJICAgIChod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSkpIHsKKwkJLyogQlRTIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhcmNoaXRlY3R1cmUuICovCisJCWlmICghYnRzX2F2YWlsYWJsZSgpKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCS8qIEJUUyBpcyBjdXJyZW50bHkgb25seSBhbGxvd2VkIGZvciB1c2VyLW1vZGUuICovCisJCWlmIChod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUykKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlod2MtPmNvbmZpZyB8PSBjb25maWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcDZfcG11X2Rpc2FibGVfYWxsKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwl1NjQgdmFsOworCisJaWYgKCFjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljcHVjLT5lbmFibGVkID0gMDsKKwliYXJyaWVyKCk7CisKKwkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCisJcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKKwl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlpZiAoIWNwdWMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCWNwdWMtPmVuYWJsZWQgPSAwOworCWJhcnJpZXIoKTsKKworCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTsKKworCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKKwkJaW50ZWxfcG11X2Rpc2FibGVfYnRzKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCWludCBpZHg7CisKKwlpZiAoIWNwdWMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCWNwdWMtPmVuYWJsZWQgPSAwOworCS8qCisJICogZW5zdXJlIHdlIHdyaXRlIHRoZSBkaXNhYmxlIGJlZm9yZSB3ZSBzdGFydCBkaXNhYmxpbmcgdGhlCisJICogZXZlbnRzIHByb3Blciwgc28gdGhhdCBhbWRfcG11X2VuYWJsZV9ldmVudCgpIGRvZXMgdGhlCisJICogcmlnaHQgdGhpbmcuCisJICovCisJYmFycmllcigpOworCisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CisJCXU2NCB2YWw7CisKKwkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlyZG1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCQlpZiAoISh2YWwgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRSkpCisJCQljb250aW51ZTsKKwkJdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKKwkJd3Jtc3JsKE1TUl9LN19FVk5UU0VMMCArIGlkeCwgdmFsKTsKKwl9Cit9CisKK3ZvaWQgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCit7CisJaWYgKCF4ODZfcG11X2luaXRpYWxpemVkKCkpCisJCXJldHVybjsKKwlyZXR1cm4geDg2X3BtdS5kaXNhYmxlX2FsbCgpOworfQorCitzdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJY3B1Yy0+ZW5hYmxlZCA9IDE7CisJYmFycmllcigpOworCisJLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLworCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYWxsKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljcHVjLT5lbmFibGVkID0gMTsKKwliYXJyaWVyKCk7CisKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgeDg2X3BtdS5pbnRlbF9jdHJsKTsKKworCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPQorCQkJY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107CisKKwkJaWYgKFdBUk5fT05fT05DRSghZXZlbnQpKQorCQkJcmV0dXJuOworCisJCWludGVsX3BtdV9lbmFibGVfYnRzKGV2ZW50LT5ody5jb25maWcpOworCX0KK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9lbmFibGVfYWxsKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlpbnQgaWR4OworCisJaWYgKGNwdWMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCWNwdWMtPmVuYWJsZWQgPSAxOworCWJhcnJpZXIoKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKKwkJdTY0IHZhbDsKKworCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQorCQkJY29udGludWU7CisKKwkJdmFsID0gZXZlbnQtPmh3LmNvbmZpZzsKKwkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCQl3cm1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCX0KK30KKwordm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQoreworCWlmICgheDg2X3BtdV9pbml0aWFsaXplZCgpKQorCQlyZXR1cm47CisJeDg2X3BtdS5lbmFibGVfYWxsKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGludGVsX3BtdV9nZXRfc3RhdHVzKHZvaWQpCit7CisJdTY0IHN0YXR1czsKKworCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcG11X2Fja19zdGF0dXModTY0IGFjaykKK3sKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIGFjayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LAorCQkJICAgICAgaHdjLT5jb25maWcgfCBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgaHdjLT5jb25maWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKK3sKKwlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKKwl1NjQgY3RybF92YWwsIG1hc2s7CisKKwltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKKworCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7CisJY3RybF92YWwgJj0gfm1hc2s7CisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwNl9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdTY0IHZhbCA9IFA2X05PUF9FVkVOVDsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgeworCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7CisJCWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKGh3YywgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYW1kX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJeDg2X3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKK30KKworc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCBbWDg2X1BNQ19JRFhfTUFYXSwgcG1jX3ByZXZfbGVmdCk7CisKKy8qCisgKiBTZXQgdGhlIG5leHQgSVJRIHBlcmlvZCwgYmFzZWQgb24gdGhlIGh3Yy0+cGVyaW9kX2xlZnQgdmFsdWUuCisgKiBUbyBiZSBjYWxsZWQgd2l0aCB0aGUgZXZlbnQgZGlzYWJsZWQgaW4gaHc6CisgKi8KK3N0YXRpYyBpbnQKK3g4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlpbnQgZXJyLCByZXQgPSAwOworCisJaWYgKGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgd2F5IG91dHNpZGUgYSByZWFzb2FibGUgcmFuZ2UgdGhlbiBqdXN0IHNraXAgZm9yd2FyZDoKKwkgKi8KKwlpZiAodW5saWtlbHkobGVmdCA8PSAtcGVyaW9kKSkgeworCQlsZWZ0ID0gcGVyaW9kOworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOworCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOworCQlyZXQgPSAxOworCX0KKworCWlmICh1bmxpa2VseShsZWZ0IDw9IDApKSB7CisJCWxlZnQgKz0gcGVyaW9kOworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOworCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOworCQlyZXQgPSAxOworCX0KKwkvKgorCSAqIFF1aXJrOiBjZXJ0YWluIENQVXMgZG9udCBsaWtlIGl0IGlmIGp1c3QgMSBod19ldmVudCBpcyBsZWZ0OgorCSAqLworCWlmICh1bmxpa2VseShsZWZ0IDwgMikpCisJCWxlZnQgPSAyOworCisJaWYgKGxlZnQgPiB4ODZfcG11Lm1heF9wZXJpb2QpCisJCWxlZnQgPSB4ODZfcG11Lm1heF9wZXJpb2Q7CisKKwlwZXJfY3B1KHBtY19wcmV2X2xlZnRbaWR4XSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IGxlZnQ7CisKKwkvKgorCSAqIFRoZSBodyBldmVudCBzdGFydHMgY291bnRpbmcgZnJvbSB0aGlzIGV2ZW50IG9mZnNldCwKKwkgKiBtYXJrIGl0IHRvIGJlIGFibGUgdG8gZXh0cmEgZnV0dXJlIGRlbHRhczoKKwkgKi8KKwlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CisKKwllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5ldmVudF9iYXNlICsgaWR4LAorCQkJICAgICAodTY0KSgtbGVmdCkgJiB4ODZfcG11LmV2ZW50X21hc2spOworCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKK3sKKwlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKKwl1NjQgY3RybF92YWwsIGJpdHMsIG1hc2s7CisJaW50IGVycjsKKworCS8qCisJICogRW5hYmxlIElSUSBnZW5lcmF0aW9uICgweDgpLAorCSAqIGFuZCBlbmFibGUgcmluZy0zIGNvdW50aW5nICgweDIpIGFuZCByaW5nLTAgY291bnRpbmcgKDB4MSkKKwkgKiBpZiByZXF1ZXN0ZWQ6CisJICovCisJYml0cyA9IDB4OFVMTDsKKwlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKQorCQliaXRzIHw9IDB4MjsKKwlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpCisJCWJpdHMgfD0gMHgxOworCWJpdHMgPDw9IChpZHggKiA0KTsKKwltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKKworCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7CisJY3RybF92YWwgJj0gfm1hc2s7CisJY3RybF92YWwgfD0gYml0czsKKwllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworfQorCitzdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwl1NjQgdmFsOworCisJdmFsID0gaHdjLT5jb25maWc7CisJaWYgKGNwdWMtPmVuYWJsZWQpCisJCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKKworCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LCB2YWwpOworfQorCisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKKwkJaWYgKCFfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpLmVuYWJsZWQpCisJCQlyZXR1cm47CisKKwkJaW50ZWxfcG11X2VuYWJsZV9idHMoaHdjLT5jb25maWcpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKKwkJaW50ZWxfcG11X2VuYWJsZV9maXhlZChod2MsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwl4ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQl4ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKK3N0YXRpYyBpbnQKK2ZpeGVkX21vZGVfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKK3sKKwl1bnNpZ25lZCBpbnQgaHdfZXZlbnQ7CisKKwlod19ldmVudCA9IGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0s7CisKKwlpZiAodW5saWtlbHkoKGh3X2V2ZW50ID09CisJCSAgICAgIHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpICYmCisJCSAgICAgKGh3Yy0+c2FtcGxlX3BlcmlvZCA9PSAxKSkpCisJCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9CVFM7CisKKwlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKSkpCisJCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9JTlNUUlVDVElPTlM7CisJaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUykpKQorCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQ1BVX0NZQ0xFUzsKKwlpZiAodW5saWtlbHkoaHdfZXZlbnQgPT0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTKSkpCisJCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9CVVNfQ1lDTEVTOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogRmluZCBhIFBNQyBzbG90IGZvciB0aGUgZnJlc2hseSBlbmFibGVkIC8gc2NoZWR1bGVkIGluIGV2ZW50OgorICovCitzdGF0aWMgaW50IHg4Nl9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHg7CisKKwlpZHggPSBmaXhlZF9tb2RlX2lkeChldmVudCwgaHdjKTsKKwlpZiAoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykgeworCQkvKiBCVFMgaXMgYWxyZWFkeSBvY2N1cGllZC4gKi8KKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJaHdjLT5jb25maWdfYmFzZQk9IDA7CisJCWh3Yy0+ZXZlbnRfYmFzZQk9IDA7CisJCWh3Yy0+aWR4CQk9IGlkeDsKKwl9IGVsc2UgaWYgKGlkeCA+PSAwKSB7CisJCS8qCisJCSAqIFRyeSB0byBnZXQgdGhlIGZpeGVkIGV2ZW50LCBpZiB0aGF0IGlzIGFscmVhZHkgdGFrZW4KKwkJICogdGhlbiB0cnkgdG8gZ2V0IGEgZ2VuZXJpYyBldmVudDoKKwkJICovCisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkKKwkJCWdvdG8gdHJ5X2dlbmVyaWM7CisKKwkJaHdjLT5jb25maWdfYmFzZSA9IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkw7CisJCS8qCisJCSAqIFdlIHNldCBpdCBzbyB0aGF0IGV2ZW50X2Jhc2UgKyBpZHggaW4gd3Jtc3IvcmRtc3IgbWFwcyB0bworCQkgKiBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLi4uIENUUjI6CisJCSAqLworCQlod2MtPmV2ZW50X2Jhc2UgPQorCQkJTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC0gWDg2X1BNQ19JRFhfRklYRUQ7CisJCWh3Yy0+aWR4ID0gaWR4OworCX0gZWxzZSB7CisJCWlkeCA9IGh3Yy0+aWR4OworCQkvKiBUcnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBnZW5lcmljIGV2ZW50IGFnYWluICovCisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkgewordHJ5X2dlbmVyaWM6CisJCQlpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGNwdWMtPnVzZWRfbWFzaywKKwkJCQkJCSAgeDg2X3BtdS5udW1fZXZlbnRzKTsKKwkJCWlmIChpZHggPT0geDg2X3BtdS5udW1fZXZlbnRzKQorCQkJCXJldHVybiAtRUFHQUlOOworCisJCQlzZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKTsKKwkJCWh3Yy0+aWR4ID0gaWR4OworCQl9CisJCWh3Yy0+Y29uZmlnX2Jhc2UgID0geDg2X3BtdS5ldmVudHNlbDsKKwkJaHdjLT5ldmVudF9iYXNlID0geDg2X3BtdS5wZXJmY3RyOworCX0KKworCXBlcmZfZXZlbnRzX2xhcGljX2luaXQoKTsKKworCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7CisKKwljcHVjLT5ldmVudHNbaWR4XSA9IGV2ZW50OworCXNldF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisKKwl4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisJeDg2X3BtdS5lbmFibGUoaHdjLCBpZHgpOworCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfdW50aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWlmIChXQVJOX09OX09OQ0UoaHdjLT5pZHggPj0gWDg2X1BNQ19JRFhfTUFYIHx8CisJCQkJY3B1Yy0+ZXZlbnRzW2h3Yy0+aWR4XSAhPSBldmVudCkpCisJCXJldHVybjsKKworCXg4Nl9wbXUuZW5hYmxlKGh3YywgaHdjLT5pZHgpOworfQorCit2b2lkIHBlcmZfZXZlbnRfcHJpbnRfZGVidWcodm9pZCkKK3sKKwl1NjQgY3RybCwgc3RhdHVzLCBvdmVyZmxvdywgcG1jX2N0cmwsIHBtY19jb3VudCwgcHJldl9sZWZ0LCBmaXhlZDsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjcHUsIGlkeDsKKworCWlmICgheDg2X3BtdS5udW1fZXZlbnRzKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJY3B1YyA9ICZwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSk7CisKKwlpZiAoeDg2X3BtdS52ZXJzaW9uID49IDIpIHsKKwkJcmRtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIGN0cmwpOworCQlyZG1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBzdGF0dXMpOworCQlyZG1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIG92ZXJmbG93KTsKKwkJcmRtc3JsKE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwsIGZpeGVkKTsKKworCQlwcl9pbmZvKCJcbiIpOworCQlwcl9pbmZvKCJDUFUjJWQ6IGN0cmw6ICAgICAgICUwMTZsbHhcbiIsIGNwdSwgY3RybCk7CisJCXByX2luZm8oIkNQVSMlZDogc3RhdHVzOiAgICAgJTAxNmxseFxuIiwgY3B1LCBzdGF0dXMpOworCQlwcl9pbmZvKCJDUFUjJWQ6IG92ZXJmbG93OiAgICUwMTZsbHhcbiIsIGNwdSwgb3ZlcmZsb3cpOworCQlwcl9pbmZvKCJDUFUjJWQ6IGZpeGVkOiAgICAgICUwMTZsbHhcbiIsIGNwdSwgZml4ZWQpOworCX0KKwlwcl9pbmZvKCJDUFUjJWQ6IHVzZWQ6ICAgICAgICUwMTZsbHhcbiIsIGNwdSwgKih1NjQgKiljcHVjLT51c2VkX21hc2spOworCisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CisJCXJkbXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCBwbWNfY3RybCk7CisJCXJkbXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCBwbWNfY291bnQpOworCisJCXByZXZfbGVmdCA9IHBlcl9jcHUocG1jX3ByZXZfbGVmdFtpZHhdLCBjcHUpOworCisJCXByX2luZm8oIkNQVSMlZDogICBnZW4tUE1DJWQgY3RybDogICUwMTZsbHhcbiIsCisJCQljcHUsIGlkeCwgcG1jX2N0cmwpOworCQlwcl9pbmZvKCJDUFUjJWQ6ICAgZ2VuLVBNQyVkIGNvdW50OiAlMDE2bGx4XG4iLAorCQkJY3B1LCBpZHgsIHBtY19jb3VudCk7CisJCXByX2luZm8oIkNQVSMlZDogICBnZW4tUE1DJWQgbGVmdDogICUwMTZsbHhcbiIsCisJCQljcHUsIGlkeCwgcHJldl9sZWZ0KTsKKwl9CisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7CisJCXJkbXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIHBtY19jb3VudCk7CisKKwkJcHJfaW5mbygiQ1BVIyVkOiBmaXhlZC1QTUMlZCBjb3VudDogJTAxNmxseFxuIiwKKwkJCWNwdSwgaWR4LCBwbWNfY291bnQpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKQoreworCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBjcHVjLT5kczsKKwlzdHJ1Y3QgYnRzX3JlY29yZCB7CisJCXU2NAlmcm9tOworCQl1NjQJdG87CisJCXU2NAlmbGFnczsKKwl9OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOworCXN0cnVjdCBidHNfcmVjb3JkICphdCwgKnRvcDsKKwlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKworCWlmICghZXZlbnQpCisJCXJldHVybjsKKworCWlmICghZHMpCisJCXJldHVybjsKKworCWF0ICA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfYnVmZmVyX2Jhc2U7CisJdG9wID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19pbmRleDsKKworCWlmICh0b3AgPD0gYXQpCisJCXJldHVybjsKKworCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOworCisKKwlkYXRhLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKKwlkYXRhLmFkZHIJPSAwOworCXJlZ3MuaXAJCT0gMDsKKworCS8qCisJICogUHJlcGFyZSBhIGdlbmVyaWMgc2FtcGxlLCBpLmUuIGZpbGwgaW4gdGhlIGludmFyaWFudCBmaWVsZHMuCisJICogV2Ugd2lsbCBvdmVyd3JpdGUgdGhlIGZyb20gYW5kIHRvIGFkZHJlc3MgYmVmb3JlIHdlIG91dHB1dAorCSAqIHRoZSBzYW1wbGUuCisJICovCisJcGVyZl9wcmVwYXJlX3NhbXBsZSgmaGVhZGVyLCAmZGF0YSwgZXZlbnQsICZyZWdzKTsKKworCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwKKwkJCSAgICAgIGhlYWRlci5zaXplICogKHRvcCAtIGF0KSwgMSwgMSkpCisJCXJldHVybjsKKworCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgeworCQlkYXRhLmlwCQk9IGF0LT5mcm9tOworCQlkYXRhLmFkZHIJPSBhdC0+dG87CisKKwkJcGVyZl9vdXRwdXRfc2FtcGxlKCZoYW5kbGUsICZoZWFkZXIsICZkYXRhLCBldmVudCk7CisJfQorCisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworCisJLyogVGhlcmUncyBuZXcgZGF0YSBhdmFpbGFibGUuICovCisJZXZlbnQtPmh3LmludGVycnVwdHMrKzsKKwlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKK30KKworc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKworCS8qCisJICogTXVzdCBiZSBkb25lIGJlZm9yZSB3ZSBkaXNhYmxlLCBvdGhlcndpc2UgdGhlIG5taSBoYW5kbGVyCisJICogY291bGQgcmVlbmFibGUgYWdhaW46CisJICovCisJY2xlYXJfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOworCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgY2xlYXJlZCBwb2ludGVyIGJlY29tZXMgdmlzaWJsZSBiZWZvcmUgd2UKKwkgKiAocG90ZW50aWFsbHkpIGZyZWUgdGhlIGV2ZW50OgorCSAqLworCWJhcnJpZXIoKTsKKworCS8qCisJICogRHJhaW4gdGhlIHJlbWFpbmluZyBkZWx0YSBjb3VudCBvdXQgb2YgYSBldmVudAorCSAqIHRoYXQgd2UgYXJlIGRpc2FibGluZzoKKwkgKi8KKwl4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKworCS8qIERyYWluIHRoZSByZW1haW5pbmcgQlRTIHJlY29yZHMuICovCisJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKQorCQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihjcHVjKTsKKworCWNwdWMtPmV2ZW50c1tpZHhdID0gTlVMTDsKKwljbGVhcl9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOworCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworfQorCisvKgorICogU2F2ZSBhbmQgcmVzdGFydCBhbiBleHBpcmVkIGV2ZW50LiBDYWxsZWQgYnkgTk1JIGNvbnRleHRzLAorICogc28gaXQgaGFzIHRvIGJlIGNhcmVmdWwgYWJvdXQgcHJlZW1wdGluZyBub3JtYWwgZXZlbnQgb3BzOgorICovCitzdGF0aWMgaW50IGludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisJaW50IHJldDsKKworCXg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOworCXJldCA9IHg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KTsKKworCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCisJCWludGVsX3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaWR4OworCisJaWYgKCF4ODZfcG11Lm51bV9ldmVudHMpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXByaW50aygiY2xlYXJpbmcgUE1VIHN0YXRlIG9uIENQVSMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgeworCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgMHVsbCk7CisJCWNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCAwdWxsKTsKKwl9CisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7CisJCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOworCX0KKwlpZiAoZHMpCisJCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHA2X3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CisJaW50IGlkeCwgaGFuZGxlZCA9IDA7CisJdTY0IHZhbDsKKworCWRhdGEuYWRkciA9IDA7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKKwkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CisJCWh3YyA9ICZldmVudC0+aHc7CisKKwkJdmFsID0geDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWlmICh2YWwgJiAoMVVMTCA8PCAoeDg2X3BtdS5ldmVudF9iaXRzIC0gMSkpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogZXZlbnQgb3ZlcmZsb3cKKwkJICovCisJCWhhbmRsZWQJCT0gMTsKKwkJZGF0YS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CisKKwkJaWYgKCF4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQorCQkJcDZfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCX0KKworCWlmIChoYW5kbGVkKQorCQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOworCisJcmV0dXJuIGhhbmRsZWQ7Cit9CisKKy8qCisgKiBUaGlzIGhhbmRsZXIgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBsb2NhbCBBUElDLCBzbyB0aGUgQVBJQyBJUlEgaGFuZGxpbmcKKyAqIHJ1bGVzIGFwcGx5OgorICovCitzdGF0aWMgaW50IGludGVsX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CisJaW50IGJpdCwgbG9vcHM7CisJdTY0IGFjaywgc3RhdHVzOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCXBlcmZfZGlzYWJsZSgpOworCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMpOworCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJcGVyZl9lbmFibGUoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbG9vcHMgPSAwOworYWdhaW46CisJaWYgKCsrbG9vcHMgPiAxMDApIHsKKwkJV0FSTl9PTkNFKDEsICJwZXJmZXZlbnRzOiBpcnEgbG9vcCBzdHVjayFcbiIpOworCQlwZXJmX2V2ZW50X3ByaW50X2RlYnVnKCk7CisJCWludGVsX3BtdV9yZXNldCgpOworCQlwZXJmX2VuYWJsZSgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOworCWFjayA9IHN0YXR1czsKKwlmb3JfZWFjaF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZzdGF0dXMsIFg4Nl9QTUNfSURYX01BWCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbYml0XTsKKworCQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSAmc3RhdHVzKTsKKwkJaWYgKCF0ZXN0X2JpdChiaXQsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoZXZlbnQpKQorCQkJY29udGludWU7CisKKwkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CisKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKKwkJCWludGVsX3BtdV9kaXNhYmxlX2V2ZW50KCZldmVudC0+aHcsIGJpdCk7CisJfQorCisJaW50ZWxfcG11X2Fja19zdGF0dXMoYWNrKTsKKworCS8qCisJICogUmVwZWF0IGlmIHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lOgorCSAqLworCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBhZ2FpbjsKKworCXBlcmZfZW5hYmxlKCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhbWRfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKwlpbnQgaWR4LCBoYW5kbGVkID0gMDsKKwl1NjQgdmFsOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgeworCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQorCQkJY29udGludWU7CisKKwkJZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKKwkJaHdjID0gJmV2ZW50LT5odzsKKworCQl2YWwgPSB4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwkJaWYgKHZhbCAmICgxVUxMIDw8ICh4ODZfcG11LmV2ZW50X2JpdHMgLSAxKSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBldmVudCBvdmVyZmxvdworCQkgKi8KKwkJaGFuZGxlZAkJPSAxOworCQlkYXRhLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKKworCQlpZiAoIXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCisJCQlhbWRfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCX0KKworCWlmIChoYW5kbGVkKQorCQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOworCisJcmV0dXJuIGhhbmRsZWQ7Cit9CisKK3ZvaWQgc21wX3BlcmZfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaXJxX2VudGVyKCk7CisJYWNrX0FQSUNfaXJxKCk7CisJaW5jX2lycV9zdGF0KGFwaWNfcGVuZGluZ19pcnFzKTsKKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKKwlpcnFfZXhpdCgpOworfQorCit2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlhcGljLT5zZW5kX0lQSV9zZWxmKExPQ0FMX1BFTkRJTkdfVkVDVE9SKTsKKyNlbmRpZgorfQorCit2b2lkIHBlcmZfZXZlbnRzX2xhcGljX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlpZiAoIXg4Nl9wbXUuYXBpYyB8fCAheDg2X3BtdV9pbml0aWFsaXplZCgpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsd2F5cyB1c2UgTk1JIGZvciBQTVUKKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcworcGVyZl9ldmVudF9ubWlfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKl9fYXJncykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBfX2FyZ3M7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisKKwlpZiAoIWF0b21pY19yZWFkKCZhY3RpdmVfZXZlbnRzKSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERJRV9OTUk6CisJY2FzZSBESUVfTk1JX0lQSToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmVncyA9IGFyZ3MtPnJlZ3M7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKyNlbmRpZgorCS8qCisJICogQ2FuJ3QgcmVseSBvbiB0aGUgaGFuZGxlZCByZXR1cm4gdmFsdWUgdG8gc2F5IGl0IHdhcyBvdXIgTk1JLCB0d28KKwkgKiBldmVudHMgY291bGQgdHJpZ2dlciAnc2ltdWx0YW5lb3VzbHknIHJhaXNpbmcgdHdvIGJhY2stdG8tYmFjayBOTUlzLgorCSAqCisJICogSWYgdGhlIGZpcnN0IE5NSSBoYW5kbGVzIGJvdGgsIHRoZSBsYXR0ZXIgd2lsbCBiZSBlbXB0eSBhbmQgZGF6ZQorCSAqIHRoZSBDUFUuCisJICovCisJeDg2X3BtdS5oYW5kbGVfaXJxKHJlZ3MpOworCisJcmV0dXJuIE5PVElGWV9TVE9QOworfQorCitzdGF0aWMgX19yZWFkX21vc3RseSBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGVyZl9ldmVudF9ubWlfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJCT0gcGVyZl9ldmVudF9ubWlfaGFuZGxlciwKKwkubmV4dAkJCT0gTlVMTCwKKwkucHJpb3JpdHkJCT0gMQorfTsKKworc3RhdGljIHN0cnVjdCB4ODZfcG11IHA2X3BtdSA9IHsKKwkubmFtZQkJCT0gInA2IiwKKwkuaGFuZGxlX2lycQkJPSBwNl9wbXVfaGFuZGxlX2lycSwKKwkuZGlzYWJsZV9hbGwJCT0gcDZfcG11X2Rpc2FibGVfYWxsLAorCS5lbmFibGVfYWxsCQk9IHA2X3BtdV9lbmFibGVfYWxsLAorCS5lbmFibGUJCQk9IHA2X3BtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJCT0gcDZfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50c2VsCQk9IE1TUl9QNl9FVk5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfUDZfUEVSRkNUUjAsCisJLmV2ZW50X21hcAkJPSBwNl9wbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gcDZfcG11X3Jhd19ldmVudCwKKwkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKHA2X3BlcmZtb25fZXZlbnRfbWFwKSwKKwkuYXBpYwkJCT0gMSwKKwkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAorCS52ZXJzaW9uCQk9IDAsCisJLm51bV9ldmVudHMJCT0gMiwKKwkvKgorCSAqIEV2ZW50cyBoYXZlIDQwIGJpdHMgaW1wbGVtZW50ZWQuIEhvd2V2ZXIgdGhleSBhcmUgZGVzaWduZWQgc3VjaAorCSAqIHRoYXQgYml0cyBbMzItMzldIGFyZSBzaWduIGV4dGVuc2lvbnMgb2YgYml0IDMxLiBBcyBzdWNoIHRoZQorCSAqIGVmZmVjdGl2ZSB3aWR0aCBvZiBhIGV2ZW50IGZvciBQNi1saWtlIFBNVSBpcyAzMiBiaXRzIG9ubHkuCisJICoKKwkgKiBTZWUgSUEtMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIGRldmVsb3BlciBtYW51YWwgVm9sIDNCCisJICovCisJLmV2ZW50X2JpdHMJCT0gMzIsCisJLmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgMzIpIC0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7CisJLm5hbWUJCQk9ICJJbnRlbCIsCisJLmhhbmRsZV9pcnEJCT0gaW50ZWxfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IGludGVsX3BtdV9kaXNhYmxlX2FsbCwKKwkuZW5hYmxlX2FsbAkJPSBpbnRlbF9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGludGVsX3BtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAorCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGludGVsX3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShpbnRlbF9wZXJmbW9uX2V2ZW50X21hcCksCisJLmFwaWMJCQk9IDEsCisJLyoKKwkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAorCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgorCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKKwkgKi8KKwkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAorCS5lbmFibGVfYnRzCQk9IGludGVsX3BtdV9lbmFibGVfYnRzLAorCS5kaXNhYmxlX2J0cwkJPSBpbnRlbF9wbXVfZGlzYWJsZV9idHMsCit9OworCitzdGF0aWMgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKKwkubmFtZQkJCT0gIkFNRCIsCisJLmhhbmRsZV9pcnEJCT0gYW1kX3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSBhbWRfcG11X2Rpc2FibGVfYWxsLAorCS5lbmFibGVfYWxsCQk9IGFtZF9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSBhbWRfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBhbWRfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50c2VsCQk9IE1TUl9LN19FVk5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfSzdfUEVSRkNUUjAsCisJLmV2ZW50X21hcAkJPSBhbWRfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGFtZF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoYW1kX3BlcmZtb25fZXZlbnRfbWFwKSwKKwkubnVtX2V2ZW50cwkJPSA0LAorCS5ldmVudF9iaXRzCQk9IDQ4LAorCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDQ4KSAtIDEsCisJLmFwaWMJCQk9IDEsCisJLyogdXNlIGhpZ2hlc3QgYml0IHRvIGRldGVjdCBvdmVyZmxvdyAqLworCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDQ3KSAtIDEsCit9OworCitzdGF0aWMgaW50IHA2X3BtdV9pbml0KHZvaWQpCit7CisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgeworCWNhc2UgMToKKwljYXNlIDM6ICAvKiBQZW50aXVtIFBybyAqLworCWNhc2UgNToKKwljYXNlIDY6ICAvKiBQZW50aXVtIElJICovCisJY2FzZSA3OgorCWNhc2UgODoKKwljYXNlIDExOiAvKiBQZW50aXVtIElJSSAqLworCQlicmVhazsKKwljYXNlIDk6CisJY2FzZSAxMzoKKwkJLyogUGVudGl1bSBNICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2NvbnQoInVuc3VwcG9ydGVkIHA2IENQVSBtb2RlbCAlZCAiLAorCQkJYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl4ODZfcG11ID0gcDZfcG11OworCisJaWYgKCFjcHVfaGFzX2FwaWMpIHsKKwkJcHJfaW5mbygibm8gQVBJQywgYm9vdCB3aXRoIHRoZSBcImxhcGljXCIgYm9vdCBwYXJhbWV0ZXIgdG8gZm9yY2UtZW5hYmxlIGl0LlxuIik7CisJCXByX2luZm8oIm5vIGhhcmR3YXJlIHNhbXBsaW5nIGludGVycnVwdCBhdmFpbGFibGUuXG4iKTsKKwkJeDg2X3BtdS5hcGljID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKQoreworCXVuaW9uIGNwdWlkMTBfZWR4IGVkeDsKKwl1bmlvbiBjcHVpZDEwX2VheCBlYXg7CisJdW5zaWduZWQgaW50IHVudXNlZDsKKwl1bnNpZ25lZCBpbnQgZWJ4OworCWludCB2ZXJzaW9uOworCisJaWYgKCFjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pKSB7CisJCS8qIGNoZWNrIGZvciBQNiBwcm9jZXNzb3IgZmFtaWx5ICovCisJICAgaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYpIHsKKwkJcmV0dXJuIHA2X3BtdV9pbml0KCk7CisJICAgfSBlbHNlIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJICAgfQorCX0KKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgQXJjaGl0ZWN0dXJhbCBQZXJmTW9uIHN1cHBvcnRzCisJICogQnJhbmNoIE1pc3NlcyBSZXRpcmVkIGh3X2V2ZW50IG9yIG5vdC4KKwkgKi8KKwljcHVpZCgxMCwgJmVheC5mdWxsLCAmZWJ4LCAmdW51c2VkLCAmZWR4LmZ1bGwpOworCWlmIChlYXguc3BsaXQubWFza19sZW5ndGggPD0gQVJDSF9QRVJGTU9OX0JSQU5DSF9NSVNTRVNfUkVUSVJFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2ZXJzaW9uID0gZWF4LnNwbGl0LnZlcnNpb25faWQ7CisJaWYgKHZlcnNpb24gPCAyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXg4Nl9wbXUJCQkJPSBpbnRlbF9wbXU7CisJeDg2X3BtdS52ZXJzaW9uCQkJPSB2ZXJzaW9uOworCXg4Nl9wbXUubnVtX2V2ZW50cwkJPSBlYXguc3BsaXQubnVtX2V2ZW50czsKKwl4ODZfcG11LmV2ZW50X2JpdHMJCT0gZWF4LnNwbGl0LmJpdF93aWR0aDsKKwl4ODZfcG11LmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgZWF4LnNwbGl0LmJpdF93aWR0aCkgLSAxOworCisJLyoKKwkgKiBRdWlyazogdjIgcGVyZm1vbiBkb2VzIG5vdCByZXBvcnQgZml4ZWQtcHVycG9zZSBldmVudHMsIHNvCisJICogYXNzdW1lIGF0IGxlYXN0IDMgZXZlbnRzOgorCSAqLworCXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZAk9IG1heCgoaW50KWVkeC5zcGxpdC5udW1fZXZlbnRzX2ZpeGVkLCAzKTsKKworCS8qCisJICogSW5zdGFsbCB0aGUgaHctY2FjaGUtZXZlbnRzIHRhYmxlOgorCSAqLworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKKwljYXNlIDE1OiAvKiBvcmlnaW5hbCA2NSBubSBjZWxlcm9uL3BlbnRpdW0vY29yZTIveGVvbiwgIk1lcm9tIi8iQ29ucm9lIiAqLworCWNhc2UgMjI6IC8qIHNpbmdsZS1jb3JlIDY1IG5tIGNlbGVyb24vY29yZTJzb2xvICJNZXJvbS1MIi8iQ29ucm9lLUwiICovCisJY2FzZSAyMzogLyogY3VycmVudCA0NSBubSBjZWxlcm9uL2NvcmUyL3hlb24gIlBlbnJ5biIvIldvbGZkYWxlIiAqLworCWNhc2UgMjk6IC8qIHNpeC1jb3JlIDQ1IG5tIHhlb24gIkR1bm5pbmd0b24iICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQlwcl9jb250KCJDb3JlMiBldmVudHMsICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgMjY6CisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXByX2NvbnQoIk5laGFsZW0vQ29yZWk3IGV2ZW50cywgIik7CisJCWJyZWFrOworCWNhc2UgMjg6CisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGF0b21faHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXByX2NvbnQoIkF0b20gZXZlbnRzLCAiKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQoreworCS8qIFBlcmZvcm1hbmNlLW1vbml0b3Jpbmcgc3VwcG9ydGVkIGZyb20gSzcgYW5kIGxhdGVyOiAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA8IDYpCisJCXJldHVybiAtRU5PREVWOworCisJeDg2X3BtdSA9IGFtZF9wbXU7CisKKwkvKiBFdmVudHMgYXJlIGNvbW1vbiBmb3IgYWxsIEFNRHMgKi8KKwltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzLAorCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKQoreworCWludCBlcnI7CisKKwlwcl9pbmZvKCJQZXJmb3JtYW5jZSBFdmVudHM6ICIpOworCisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWVyciA9IGludGVsX3BtdV9pbml0KCk7CisJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWVyciA9IGFtZF9wbXVfaW5pdCgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCWlmIChlcnIgIT0gMCkgeworCQlwcl9jb250KCJubyBQTVUgZHJpdmVyLCBzb2Z0d2FyZSBldmVudHMgb25seS5cbiIpOworCQlyZXR1cm47CisJfQorCisJcHJfY29udCgiJXMgUE1VIGRyaXZlci5cbiIsIHg4Nl9wbXUubmFtZSk7CisKKwlpZiAoeDg2X3BtdS5udW1fZXZlbnRzID4gWDg2X1BNQ19NQVhfR0VORVJJQykgeworCQlXQVJOKDEsIEtFUk5fRVJSICJodyBwZXJmIGV2ZW50cyAlZCA+IG1heCglZCksIGNsaXBwaW5nISIsCisJCSAgICAgeDg2X3BtdS5udW1fZXZlbnRzLCBYODZfUE1DX01BWF9HRU5FUklDKTsKKwkJeDg2X3BtdS5udW1fZXZlbnRzID0gWDg2X1BNQ19NQVhfR0VORVJJQzsKKwl9CisJcGVyZl9ldmVudF9tYXNrID0gKDEgPDwgeDg2X3BtdS5udW1fZXZlbnRzKSAtIDE7CisJcGVyZl9tYXhfZXZlbnRzID0geDg2X3BtdS5udW1fZXZlbnRzOworCisJaWYgKHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCA+IFg4Nl9QTUNfTUFYX0ZJWEVEKSB7CisJCVdBUk4oMSwgS0VSTl9FUlIgImh3IHBlcmYgZXZlbnRzIGZpeGVkICVkID4gbWF4KCVkKSwgY2xpcHBpbmchIiwKKwkJICAgICB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQsIFg4Nl9QTUNfTUFYX0ZJWEVEKTsKKwkJeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkID0gWDg2X1BNQ19NQVhfRklYRUQ7CisJfQorCisJcGVyZl9ldmVudF9tYXNrIHw9CisJCSgoMUxMIDw8IHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCktMSkgPDwgWDg2X1BNQ19JRFhfRklYRUQ7CisJeDg2X3BtdS5pbnRlbF9jdHJsID0gcGVyZl9ldmVudF9tYXNrOworCisJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOworCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcGVyZl9ldmVudF9ubWlfbm90aWZpZXIpOworCisJcHJfaW5mbygiLi4uIHZlcnNpb246ICAgICAgICAgICAgICAgICVkXG4iLCAgICAgeDg2X3BtdS52ZXJzaW9uKTsKKwlwcl9pbmZvKCIuLi4gYml0IHdpZHRoOiAgICAgICAgICAgICAgJWRcbiIsICAgICB4ODZfcG11LmV2ZW50X2JpdHMpOworCXByX2luZm8oIi4uLiBnZW5lcmljIHJlZ2lzdGVyczogICAgICAlZFxuIiwgICAgIHg4Nl9wbXUubnVtX2V2ZW50cyk7CisJcHJfaW5mbygiLi4uIHZhbHVlIG1hc2s6ICAgICAgICAgICAgICUwMTZMeFxuIiwgeDg2X3BtdS5ldmVudF9tYXNrKTsKKwlwcl9pbmZvKCIuLi4gbWF4IHBlcmlvZDogICAgICAgICAgICAgJTAxNkx4XG4iLCB4ODZfcG11Lm1heF9wZXJpb2QpOworCXByX2luZm8oIi4uLiBmaXhlZC1wdXJwb3NlIGV2ZW50czogICAlZFxuIiwgICAgIHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCk7CisJcHJfaW5mbygiLi4uIGV2ZW50IG1hc2s6ICAgICAgICAgICAgICUwMTZMeFxuIiwgcGVyZl9ldmVudF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHg4Nl9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCAmZXZlbnQtPmh3LCBldmVudC0+aHcuaWR4KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcG11ID0geworCS5lbmFibGUJCT0geDg2X3BtdV9lbmFibGUsCisJLmRpc2FibGUJPSB4ODZfcG11X2Rpc2FibGUsCisJLnJlYWQJCT0geDg2X3BtdV9yZWFkLAorCS51bnRocm90dGxlCT0geDg2X3BtdV91bnRocm90dGxlLAorfTsKKworY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gX19od19wZXJmX2V2ZW50X2luaXQoZXZlbnQpOworCWlmIChlcnIpIHsKKwkJaWYgKGV2ZW50LT5kZXN0cm95KQorCQkJZXZlbnQtPmRlc3Ryb3koZXZlbnQpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXJldHVybiAmcG11OworfQorCisvKgorICogY2FsbGNoYWluIHN1cHBvcnQKKyAqLworCitzdGF0aWMgaW5saW5lCit2b2lkIGNhbGxjaGFpbl9zdG9yZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCB1NjQgaXApCit7CisJaWYgKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKQorCQllbnRyeS0+aXBbZW50cnktPm5yKytdID0gaXA7Cit9CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnksIHBtY19pcnFfZW50cnkpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgcG1jX25taV9lbnRyeSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBpbl9ubWlfZnJhbWUpOworCisKK3N0YXRpYyB2b2lkCitiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCkKK3sKKwkvKiBJZ25vcmUgd2FybmluZ3MgKi8KK30KKworc3RhdGljIHZvaWQgYmFja3RyYWNlX3dhcm5pbmcodm9pZCAqZGF0YSwgY2hhciAqbXNnKQoreworCS8qIElnbm9yZSB3YXJuaW5ncyAqLworfQorCitzdGF0aWMgaW50IGJhY2t0cmFjZV9zdGFjayh2b2lkICpkYXRhLCBjaGFyICpuYW1lKQoreworCXBlcl9jcHUoaW5fbm1pX2ZyYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0KKwkJCXg4Nl9pc19zdGFja19pZChOTUlfU1RBQ0ssIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJhY2t0cmFjZV9hZGRyZXNzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHJlbGlhYmxlKQoreworCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSBkYXRhOworCisJaWYgKHBlcl9jcHUoaW5fbm1pX2ZyYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCkpKQorCQlyZXR1cm47CisKKwlpZiAocmVsaWFibGUpCisJCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgYWRkcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgYmFja3RyYWNlX29wcyA9IHsKKwkud2FybmluZwkJPSBiYWNrdHJhY2Vfd2FybmluZywKKwkud2FybmluZ19zeW1ib2wJCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjawkJCT0gYmFja3RyYWNlX3N0YWNrLAorCS5hZGRyZXNzCQk9IGJhY2t0cmFjZV9hZGRyZXNzLAorfTsKKworI2luY2x1ZGUgIi4uL2R1bXBzdGFjay5oIgorCitzdGF0aWMgdm9pZAorcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgUEVSRl9DT05URVhUX0tFUk5FTCk7CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCByZWdzLT5pcCk7CisKKwlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsIE5VTEwsIDAsICZiYWNrdHJhY2Vfb3BzLCBlbnRyeSk7Cit9CisKKy8qCisgKiBiZXN0IGVmZm9ydCwgR1VQIGJhc2VkIGNvcHlfZnJvbV91c2VyKCkgdGhhdCBhc3N1bWVzIElSUSBvciBOTUkgY29udGV4dAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZworY29weV9mcm9tX3VzZXJfbm1pKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBhZGRyID0gKHVuc2lnbmVkIGxvbmcpZnJvbTsKKwlpbnQgdHlwZSA9IGluX25taSgpID8gS01fTk1JIDogS01fSVJRMDsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGxlbiA9IDA7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqbWFwOworCWludCByZXQ7CisKKwlkbyB7CisJCXJldCA9IF9fZ2V0X3VzZXJfcGFnZXNfZmFzdChhZGRyLCAxLCAwLCAmcGFnZSk7CisJCWlmICghcmV0KQorCQkJYnJlYWs7CisKKwkJb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUgLSAxKTsKKwkJc2l6ZSA9IG1pbihQQUdFX1NJWkUgLSBvZmZzZXQsIG4gLSBsZW4pOworCisJCW1hcCA9IGttYXBfYXRvbWljKHBhZ2UsIHR5cGUpOworCQltZW1jcHkodG8sIG1hcCtvZmZzZXQsIHNpemUpOworCQlrdW5tYXBfYXRvbWljKG1hcCwgdHlwZSk7CisJCXB1dF9wYWdlKHBhZ2UpOworCisJCWxlbiAgKz0gc2l6ZTsKKwkJdG8gICArPSBzaXplOworCQlhZGRyICs9IHNpemU7CisKKwl9IHdoaWxlIChsZW4gPCBuKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgY29weV9zdGFja19mcmFtZShjb25zdCB2b2lkIF9fdXNlciAqZnAsIHN0cnVjdCBzdGFja19mcmFtZSAqZnJhbWUpCit7CisJdW5zaWduZWQgbG9uZyBieXRlczsKKworCWJ5dGVzID0gY29weV9mcm9tX3VzZXJfbm1pKGZyYW1lLCBmcCwgc2l6ZW9mKCpmcmFtZSkpOworCisJcmV0dXJuIGJ5dGVzID09IHNpemVvZigqZnJhbWUpOworfQorCitzdGF0aWMgdm9pZAorcGVyZl9jYWxsY2hhaW5fdXNlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgZnJhbWU7CisJY29uc3Qgdm9pZCBfX3VzZXIgKmZwOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisKKwlmcCA9ICh2b2lkIF9fdXNlciAqKXJlZ3MtPmJwOworCisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBQRVJGX0NPTlRFWFRfVVNFUik7CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCByZWdzLT5pcCk7CisKKwl3aGlsZSAoZW50cnktPm5yIDwgUEVSRl9NQVhfU1RBQ0tfREVQVEgpIHsKKwkJZnJhbWUubmV4dF9mcmFtZQkgICAgID0gTlVMTDsKKwkJZnJhbWUucmV0dXJuX2FkZHJlc3MgPSAwOworCisJCWlmICghY29weV9zdGFja19mcmFtZShmcCwgJmZyYW1lKSkKKwkJCWJyZWFrOworCisJCWlmICgodW5zaWduZWQgbG9uZylmcCA8IHJlZ3MtPnNwKQorCQkJYnJlYWs7CisKKwkJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBmcmFtZS5yZXR1cm5fYWRkcmVzcyk7CisJCWZwID0gZnJhbWUubmV4dF9mcmFtZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmX2RvX2NhbGxjaGFpbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlpbnQgaXNfdXNlcjsKKworCWlmICghcmVncykKKwkJcmV0dXJuOworCisJaXNfdXNlciA9IHVzZXJfbW9kZShyZWdzKTsKKworCWlmICghY3VycmVudCB8fCBjdXJyZW50LT5waWQgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGlzX3VzZXIgJiYgY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3VzZXIpCisJCXBlcmZfY2FsbGNoYWluX2tlcm5lbChyZWdzLCBlbnRyeSk7CisKKwlpZiAoY3VycmVudC0+bW0pCisJCXBlcmZfY2FsbGNoYWluX3VzZXIocmVncywgZW50cnkpOworfQorCitzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnBlcmZfY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnk7CisKKwlpZiAoaW5fbm1pKCkpCisJCWVudHJ5ID0gJl9fZ2V0X2NwdV92YXIocG1jX25taV9lbnRyeSk7CisJZWxzZQorCQllbnRyeSA9ICZfX2dldF9jcHVfdmFyKHBtY19pcnFfZW50cnkpOworCisJZW50cnktPm5yID0gMDsKKworCXBlcmZfZG9fY2FsbGNoYWluKHJlZ3MsIGVudHJ5KTsKKworCXJldHVybiBlbnRyeTsKK30KKwordm9pZCBod19wZXJmX2V2ZW50X3NldHVwX29ubGluZShpbnQgY3B1KQoreworCWluaXRfZGVidWdfc3RvcmVfb25fY3B1KGNwdSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCmluZGV4IDM5MmJlYTQuLmZhYjc4NmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnQuaD4KIAogc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgewogCXVuc2lnbmVkIGludCBjY2NyX21zcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCmluZGV4IDBhNDZiNGQuLjFjYmVkOTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYwpAQCAtNTgsNiArNTgsOSBAQAogCXRzY19oeiA9IGVheCB8ICgoKHVpbnQ2NF90KWVieCkgPDwgMzIpOwogCWRvX2Rpdih0c2NfaHosIDEwMDApOwogCUJVR19PTih0c2NfaHogPj4gMzIpOworCXByaW50ayhLRVJOX0lORk8gIlRTQyBmcmVxIHJlYWQgZnJvbSBoeXBlcnZpc29yIDogJWx1LiUwM2x1IE1IelxuIiwKKwkJCSAodW5zaWduZWQgbG9uZykgdHNjX2h6IC8gMTAwMCwKKwkJCSAodW5zaWduZWQgbG9uZykgdHNjX2h6ICUgMTAwMCk7CiAJcmV0dXJuIHRzY19oejsKIH0KIApAQCAtNjksNiArNzIsOSBAQAogCiAJaWYgKGVieCAhPSBVSU5UX01BWCkKIAkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSB2bXdhcmVfZ2V0X3RzY19raHo7CisJZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiRmFpbGVkIHRvIGdldCBUU0MgZnJlcSBmcm9tIHRoZSBoeXBlcnZpc29yXG4iKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKaW5kZXggYjA3YWY4OC4uNmE1MmQ0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCS5ub3RpZmllcl9jYWxsID0gY3B1aWRfY2xhc3NfY3B1X2NhbGxiYWNrLAogfTsKIAotc3RhdGljIGNoYXIgKmNwdWlkX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICpjcHVpZF9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImNwdS8ldS9jcHVpZCIsIE1JTk9SKGRldi0+ZGV2dCkpOwogfQpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCWVyciA9IFBUUl9FUlIoY3B1aWRfY2xhc3MpOwogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQotCWNwdWlkX2NsYXNzLT5ub2RlbmFtZSA9IGNwdWlkX25vZGVuYW1lOworCWNwdWlkX2NsYXNzLT5kZXZub2RlID0gY3B1aWRfZGV2bm9kZTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJZXJyID0gY3B1aWRfZGV2aWNlX2NyZWF0ZShpKTsKIAkJaWYgKGVyciAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggYTMyMTBjZS4uODU0MTliYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMzMxLDcgKzEzMzEsNyBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXU2NCBlbmQ7CiAKLQlyZXMgPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIGU4MjAubnJfbWFwKTsKKwlyZXMgPSBhbGxvY19ib290bWVtKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogZTgyMC5ucl9tYXApOwogCWU4MjBfcmVzID0gcmVzOwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCWVuZCA9IGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplIC0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCAzMzVmMDQ5Li4yYWNmZDNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0xNjAsNzIxICsxNjAsNiBAQAogCS5pbmRleCA9CS0xLAogfTsKIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEtfREJHUAotCi1zdGF0aWMgc3RydWN0IGVoY2lfY2FwcyBfX2lvbWVtICplaGNpX2NhcHM7Ci1zdGF0aWMgc3RydWN0IGVoY2lfcmVncyBfX2lvbWVtICplaGNpX3JlZ3M7Ci1zdGF0aWMgc3RydWN0IGVoY2lfZGJnX3BvcnQgX19pb21lbSAqZWhjaV9kZWJ1ZzsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGJncF9lbmRwb2ludF9vdXQ7Ci0KLXN0cnVjdCBlaGNpX2RldiB7Ci0JdTMyIGJ1czsKLQl1MzIgc2xvdDsKLQl1MzIgZnVuYzsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZWhjaV9kZXYgZWhjaV9kZXY7Ci0KLSNkZWZpbmUgVVNCX0RFQlVHX0RFVk5VTSAxMjcKLQotI2RlZmluZSBEQkdQX0RBVEFfVE9HR0xFCTB4ODgwMAotCi1zdGF0aWMgaW5saW5lIHUzMiBkYmdwX3BpZF91cGRhdGUodTMyIHgsIHUzMiB0b2spCi17Ci0JcmV0dXJuICgoeCBeIERCR1BfREFUQV9UT0dHTEUpICYgMHhmZmZmMDApIHwgKHRvayAmIDB4ZmYpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBkYmdwX2xlbl91cGRhdGUodTMyIHgsIHUzMiBsZW4pCi17Ci0JcmV0dXJuICh4ICYgfjB4MGYpIHwgKGxlbiAmIDB4MGYpOwotfQotCi0vKgotICogVVNCIFBhY2tldCBJRHMgKFBJRHMpCi0gKi8KLQotLyogdG9rZW4gKi8KLSNkZWZpbmUgVVNCX1BJRF9PVVQJCTB4ZTEKLSNkZWZpbmUgVVNCX1BJRF9JTgkJMHg2OQotI2RlZmluZSBVU0JfUElEX1NPRgkJMHhhNQotI2RlZmluZSBVU0JfUElEX1NFVFVQCQkweDJkCi0vKiBoYW5kc2hha2UgKi8KLSNkZWZpbmUgVVNCX1BJRF9BQ0sJCTB4ZDIKLSNkZWZpbmUgVVNCX1BJRF9OQUsJCTB4NWEKLSNkZWZpbmUgVVNCX1BJRF9TVEFMTAkJMHgxZQotI2RlZmluZSBVU0JfUElEX05ZRVQJCTB4OTYKLS8qIGRhdGEgKi8KLSNkZWZpbmUgVVNCX1BJRF9EQVRBMAkJMHhjMwotI2RlZmluZSBVU0JfUElEX0RBVEExCQkweDRiCi0jZGVmaW5lIFVTQl9QSURfREFUQTIJCTB4ODcKLSNkZWZpbmUgVVNCX1BJRF9NREFUQQkJMHgwZgotLyogU3BlY2lhbCAqLwotI2RlZmluZSBVU0JfUElEX1BSRUFNQkxFCTB4M2MKLSNkZWZpbmUgVVNCX1BJRF9FUlIJCTB4M2MKLSNkZWZpbmUgVVNCX1BJRF9TUExJVAkJMHg3OAotI2RlZmluZSBVU0JfUElEX1BJTkcJCTB4YjQKLSNkZWZpbmUgVVNCX1BJRF9VTkRFRl8wCQkweGYwCi0KLSNkZWZpbmUgVVNCX1BJRF9EQVRBX1RPR0dMRQkweDg4Ci0jZGVmaW5lIERCR1BfQ0xBSU0gKERCR1BfT1dORVIgfCBEQkdQX0VOQUJMRUQgfCBEQkdQX0lOVVNFKQotCi0jZGVmaW5lIFBDSV9DQVBfSURfRUhDSV9ERUJVRwkweGEKLQotI2RlZmluZSBIVUJfUk9PVF9SRVNFVF9USU1FCTUwCS8qIHRpbWVzIGFyZSBpbiBtc2VjICovCi0jZGVmaW5lIEhVQl9TSE9SVF9SRVNFVF9USU1FCTEwCi0jZGVmaW5lIEhVQl9MT05HX1JFU0VUX1RJTUUJMjAwCi0jZGVmaW5lIEhVQl9SRVNFVF9USU1FT1VUCTUwMAotCi0jZGVmaW5lIERCR1BfTUFYX1BBQ0tFVAkJOAotCi1zdGF0aWMgaW50IGRiZ3Bfd2FpdF91bnRpbF9jb21wbGV0ZSh2b2lkKQotewotCXUzMiBjdHJsOwotCWludCBsb29wID0gMHgxMDAwMDA7Ci0KLQlkbyB7Ci0JCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0JCS8qIFN0b3Agd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQgKi8KLQkJaWYgKGN0cmwgJiBEQkdQX0RPTkUpCi0JCQlicmVhazsKLQl9IHdoaWxlICgtLWxvb3AgPiAwKTsKLQotCWlmICghbG9vcCkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSBoYXZlIG9ic2VydmVkIHRoZSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24sCi0JICogY2xlYXIgdGhlIGRvbmUgYml0LgotCSAqLwotCXdyaXRlbChjdHJsIHwgREJHUF9ET05FLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0JcmV0dXJuIChjdHJsICYgREJHUF9FUlJPUikgPyAtREJHUF9FUlJDT0RFKGN0cmwpIDogREJHUF9MRU4oY3RybCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkYmdwX21kZWxheShpbnQgbXMpCi17Ci0JaW50IGk7Ci0KLQl3aGlsZSAobXMtLSkgewotCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotCQkJb3V0YigweDEsIDB4ODApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZGJncF9icmVhdGgodm9pZCkKLXsKLQkvKiBTbGVlcCB0byBnaXZlIHRoZSBkZWJ1ZyBwb3J0IGEgY2hhbmNlIHRvIGJyZWF0aGUgKi8KLX0KLQotc3RhdGljIGludCBkYmdwX3dhaXRfdW50aWxfZG9uZSh1bnNpZ25lZCBjdHJsKQotewotCXUzMiBwaWRzLCBscGlkOwotCWludCByZXQ7Ci0JaW50IGxvb3AgPSAzOwotCi1yZXRyeToKLQl3cml0ZWwoY3RybCB8IERCR1BfR08sICZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQlyZXQgPSBkYmdwX3dhaXRfdW50aWxfY29tcGxldGUoKTsKLQlwaWRzID0gcmVhZGwoJmVoY2lfZGVidWctPnBpZHMpOwotCWxwaWQgPSBEQkdQX1BJRF9HRVQocGlkcyk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qCi0JICogSWYgdGhlIHBvcnQgaXMgZ2V0dGluZyBmdWxsIG9yIGl0IGhhcyBkcm9wcGVkIGRhdGEKLQkgKiBzdGFydCBwYWNpbmcgb3Vyc2VsdmVzLCBub3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGZyaWVuZGx5LgotCSAqLwotCWlmICgobHBpZCA9PSBVU0JfUElEX05BSykgfHwgKGxwaWQgPT0gVVNCX1BJRF9OWUVUKSkKLQkJZGJncF9icmVhdGgoKTsKLQotCS8qIElmIEkgZ2V0IGEgTkFDSyByZWlzc3VlIHRoZSB0cmFuc21pc3Npb24gKi8KLQlpZiAobHBpZCA9PSBVU0JfUElEX05BSykgewotCQlpZiAoLS1sb29wID4gMCkKLQkJCWdvdG8gcmV0cnk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZGJncF9zZXRfZGF0YShjb25zdCB2b2lkICpidWYsIGludCBzaXplKQotewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmOwotCXUzMiBsbywgaGk7Ci0JaW50IGk7Ci0KLQlsbyA9IGhpID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgNCAmJiBpIDwgc2l6ZTsgaSsrKQotCQlsbyB8PSBieXRlc1tpXSA8PCAoOCppKTsKLQlmb3IgKDsgaSA8IDggJiYgaSA8IHNpemU7IGkrKykKLQkJaGkgfD0gYnl0ZXNbaV0gPDwgKDgqKGkgLSA0KSk7Ci0Jd3JpdGVsKGxvLCAmZWhjaV9kZWJ1Zy0+ZGF0YTAzKTsKLQl3cml0ZWwoaGksICZlaGNpX2RlYnVnLT5kYXRhNDcpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZGJncF9nZXRfZGF0YSh2b2lkICpidWYsIGludCBzaXplKQotewotCXVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmOwotCXUzMiBsbywgaGk7Ci0JaW50IGk7Ci0KLQlsbyA9IHJlYWRsKCZlaGNpX2RlYnVnLT5kYXRhMDMpOwotCWhpID0gcmVhZGwoJmVoY2lfZGVidWctPmRhdGE0Nyk7Ci0JZm9yIChpID0gMDsgaSA8IDQgJiYgaSA8IHNpemU7IGkrKykKLQkJYnl0ZXNbaV0gPSAobG8gPj4gKDgqaSkpICYgMHhmZjsKLQlmb3IgKDsgaSA8IDggJiYgaSA8IHNpemU7IGkrKykKLQkJYnl0ZXNbaV0gPSAoaGkgPj4gKDgqKGkgLSA0KSkpICYgMHhmZjsKLX0KLQotc3RhdGljIGludCBkYmdwX2J1bGtfd3JpdGUodW5zaWduZWQgZGV2bnVtLCB1bnNpZ25lZCBlbmRwb2ludCwKLQkJCSBjb25zdCBjaGFyICpieXRlcywgaW50IHNpemUpCi17Ci0JdTMyIHBpZHMsIGFkZHIsIGN0cmw7Ci0JaW50IHJldDsKLQotCWlmIChzaXplID4gREJHUF9NQVhfUEFDS0VUKQotCQlyZXR1cm4gLTE7Ci0KLQlhZGRyID0gREJHUF9FUEFERFIoZGV2bnVtLCBlbmRwb2ludCk7Ci0KLQlwaWRzID0gcmVhZGwoJmVoY2lfZGVidWctPnBpZHMpOwotCXBpZHMgPSBkYmdwX3BpZF91cGRhdGUocGlkcywgVVNCX1BJRF9PVVQpOwotCi0JY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQljdHJsID0gZGJncF9sZW5fdXBkYXRlKGN0cmwsIHNpemUpOwotCWN0cmwgfD0gREJHUF9PVVQ7Ci0JY3RybCB8PSBEQkdQX0dPOwotCi0JZGJncF9zZXRfZGF0YShieXRlcywgc2l6ZSk7Ci0Jd3JpdGVsKGFkZHIsICZlaGNpX2RlYnVnLT5hZGRyZXNzKTsKLQl3cml0ZWwocGlkcywgJmVoY2lfZGVidWctPnBpZHMpOwotCi0JcmV0ID0gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBkYmdwX2J1bGtfcmVhZCh1bnNpZ25lZCBkZXZudW0sIHVuc2lnbmVkIGVuZHBvaW50LCB2b2lkICpkYXRhLAotCQkJCSBpbnQgc2l6ZSkKLXsKLQl1MzIgcGlkcywgYWRkciwgY3RybDsKLQlpbnQgcmV0OwotCi0JaWYgKHNpemUgPiBEQkdQX01BWF9QQUNLRVQpCi0JCXJldHVybiAtMTsKLQotCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIGVuZHBvaW50KTsKLQotCXBpZHMgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0JcGlkcyA9IGRiZ3BfcGlkX3VwZGF0ZShwaWRzLCBVU0JfUElEX0lOKTsKLQotCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0JY3RybCA9IGRiZ3BfbGVuX3VwZGF0ZShjdHJsLCBzaXplKTsKLQljdHJsICY9IH5EQkdQX09VVDsKLQljdHJsIHw9IERCR1BfR087Ci0KLQl3cml0ZWwoYWRkciwgJmVoY2lfZGVidWctPmFkZHJlc3MpOwotCXdyaXRlbChwaWRzLCAmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0JcmV0ID0gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoc2l6ZSA+IHJldCkKLQkJc2l6ZSA9IHJldDsKLQlkYmdwX2dldF9kYXRhKGRhdGEsIHNpemUpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRiZ3BfY29udHJvbF9tc2codW5zaWduZWQgZGV2bnVtLCBpbnQgcmVxdWVzdHR5cGUsCi0JaW50IHJlcXVlc3QsIGludCB2YWx1ZSwgaW50IGluZGV4LCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQl1MzIgcGlkcywgYWRkciwgY3RybDsKLQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHJlcTsKLQlpbnQgcmVhZDsKLQlpbnQgcmV0OwotCi0JcmVhZCA9IChyZXF1ZXN0dHlwZSAmIFVTQl9ESVJfSU4pICE9IDA7Ci0JaWYgKHNpemUgPiAocmVhZCA/IERCR1BfTUFYX1BBQ0tFVDowKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogQ29tcHV0ZSB0aGUgY29udHJvbCBtZXNzYWdlICovCi0JcmVxLmJSZXF1ZXN0VHlwZSA9IHJlcXVlc3R0eXBlOwotCXJlcS5iUmVxdWVzdCA9IHJlcXVlc3Q7Ci0JcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKLQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOwotCXJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7Ci0KLQlwaWRzID0gREJHUF9QSURfU0VUKFVTQl9QSURfREFUQTAsIFVTQl9QSURfU0VUVVApOwotCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIDApOwotCi0JY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQljdHJsID0gZGJncF9sZW5fdXBkYXRlKGN0cmwsIHNpemVvZihyZXEpKTsKLQljdHJsIHw9IERCR1BfT1VUOwotCWN0cmwgfD0gREJHUF9HTzsKLQotCS8qIFNlbmQgdGhlIHNldHVwIG1lc3NhZ2UgKi8KLQlkYmdwX3NldF9kYXRhKCZyZXEsIHNpemVvZihyZXEpKTsKLQl3cml0ZWwoYWRkciwgJmVoY2lfZGVidWctPmFkZHJlc3MpOwotCXdyaXRlbChwaWRzLCAmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0JcmV0ID0gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBSZWFkIHRoZSByZXN1bHQgKi8KLQlyZXR1cm4gZGJncF9idWxrX3JlYWQoZGV2bnVtLCAwLCBkYXRhLCBzaXplKTsKLX0KLQotCi0vKiBGaW5kIGEgUENJIGNhcGFiaWxpdHkgKi8KLXN0YXRpYyB1MzIgX19pbml0IGZpbmRfY2FwKHUzMiBudW0sIHUzMiBzbG90LCB1MzIgZnVuYywgaW50IGNhcCkKLXsKLQl1OCBwb3M7Ci0JaW50IGJ5dGVzOwotCi0JaWYgKCEocmVhZF9wY2lfY29uZmlnXzE2KG51bSwgc2xvdCwgZnVuYywgUENJX1NUQVRVUykgJgotCQlQQ0lfU1RBVFVTX0NBUF9MSVNUKSkKLQkJcmV0dXJuIDA7Ci0KLQlwb3MgPSByZWFkX3BjaV9jb25maWdfYnl0ZShudW0sIHNsb3QsIGZ1bmMsIFBDSV9DQVBBQklMSVRZX0xJU1QpOwotCWZvciAoYnl0ZXMgPSAwOyBieXRlcyA8IDQ4ICYmIHBvcyA+PSAweDQwOyBieXRlcysrKSB7Ci0JCXU4IGlkOwotCi0JCXBvcyAmPSB+MzsKLQkJaWQgPSByZWFkX3BjaV9jb25maWdfYnl0ZShudW0sIHNsb3QsIGZ1bmMsIHBvcytQQ0lfQ0FQX0xJU1RfSUQpOwotCQlpZiAoaWQgPT0gMHhmZikKLQkJCWJyZWFrOwotCQlpZiAoaWQgPT0gY2FwKQotCQkJcmV0dXJuIHBvczsKLQotCQlwb3MgPSByZWFkX3BjaV9jb25maWdfYnl0ZShudW0sIHNsb3QsIGZ1bmMsCi0JCQkJCQkgcG9zK1BDSV9DQVBfTElTVF9ORVhUKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgX19pbml0IF9fZmluZF9kYmdwKHUzMiBidXMsIHUzMiBzbG90LCB1MzIgZnVuYykKLXsKLQl1MzIgY2xhc3M7Ci0KLQljbGFzcyA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIGZ1bmMsIFBDSV9DTEFTU19SRVZJU0lPTik7Ci0JaWYgKChjbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9FSENJKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBmaW5kX2NhcChidXMsIHNsb3QsIGZ1bmMsIFBDSV9DQVBfSURfRUhDSV9ERUJVRyk7Ci19Ci0KLXN0YXRpYyB1MzIgX19pbml0IGZpbmRfZGJncChpbnQgZWhjaV9udW0sIHUzMiAqcmJ1cywgdTMyICpyc2xvdCwgdTMyICpyZnVuYykKLXsKLQl1MzIgYnVzLCBzbG90LCBmdW5jOwotCi0JZm9yIChidXMgPSAwOyBidXMgPCAyNTY7IGJ1cysrKSB7Ci0JCWZvciAoc2xvdCA9IDA7IHNsb3QgPCAzMjsgc2xvdCsrKSB7Ci0JCQlmb3IgKGZ1bmMgPSAwOyBmdW5jIDwgODsgZnVuYysrKSB7Ci0JCQkJdW5zaWduZWQgY2FwOwotCi0JCQkJY2FwID0gX19maW5kX2RiZ3AoYnVzLCBzbG90LCBmdW5jKTsKLQotCQkJCWlmICghY2FwKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAoZWhjaV9udW0tLSAhPSAwKQotCQkJCQljb250aW51ZTsKLQkJCQkqcmJ1cyA9IGJ1czsKLQkJCQkqcnNsb3QgPSBzbG90OwotCQkJCSpyZnVuYyA9IGZ1bmM7Ci0JCQkJcmV0dXJuIGNhcDsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQotewotCXUzMiBwb3J0c2M7Ci0JdTMyIGRlbGF5X3RpbWUsIGRlbGF5OwotCWludCBsb29wOwotCi0JLyogUmVzZXQgdGhlIHVzYiBkZWJ1ZyBwb3J0ICovCi0JcG9ydHNjID0gcmVhZGwoJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbcG9ydCAtIDFdKTsKLQlwb3J0c2MgJj0gflBPUlRfUEU7Ci0JcG9ydHNjIHw9IFBPUlRfUkVTRVQ7Ci0Jd3JpdGVsKHBvcnRzYywgJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbcG9ydCAtIDFdKTsKLQotCWRlbGF5ID0gSFVCX1JPT1RfUkVTRVRfVElNRTsKLQlmb3IgKGRlbGF5X3RpbWUgPSAwOyBkZWxheV90aW1lIDwgSFVCX1JFU0VUX1RJTUVPVVQ7Ci0JICAgICBkZWxheV90aW1lICs9IGRlbGF5KSB7Ci0JCWRiZ3BfbWRlbGF5KGRlbGF5KTsKLQotCQlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0IC0gMV0pOwotCQlpZiAocG9ydHNjICYgUE9SVF9SRVNFVCkgewotCQkJLyogZm9yY2UgcmVzZXQgdG8gY29tcGxldGUgKi8KLQkJCWxvb3AgPSAyOwotCQkJd3JpdGVsKHBvcnRzYyAmIH4oUE9SVF9SV0NfQklUUyB8IFBPUlRfUkVTRVQpLAotCQkJCSZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW3BvcnQgLSAxXSk7Ci0JCQlkbyB7Ci0JCQkJcG9ydHNjID0gcmVhZGwoJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbcG9ydC0xXSk7Ci0JCQl9IHdoaWxlICgocG9ydHNjICYgUE9SVF9SRVNFVCkgJiYgKC0tbG9vcCA+IDApKTsKLQkJfQotCi0JCS8qIERldmljZSB3ZW50IGF3YXk/ICovCi0JCWlmICghKHBvcnRzYyAmIFBPUlRfQ09OTkVDVCkpCi0JCQlyZXR1cm4gLUVOT1RDT05OOwotCi0JCS8qIGJvbWIgb3V0IGNvbXBsZXRlbHkgaWYgc29tZXRoaW5nIHdlaXJkIGhhcHBlbmQgKi8KLQkJaWYgKChwb3J0c2MgJiBQT1JUX0NTQykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBJZiB3ZSd2ZSBmaW5pc2hlZCByZXNldHRpbmcsIHRoZW4gYnJlYWsgb3V0IG9mIHRoZSBsb29wICovCi0JCWlmICghKHBvcnRzYyAmIFBPUlRfUkVTRVQpICYmIChwb3J0c2MgJiBQT1JUX1BFKSkKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVCVVNZOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlaGNpX3dhaXRfZm9yX3BvcnQoaW50IHBvcnQpCi17Ci0JdTMyIHN0YXR1czsKLQlpbnQgcmV0LCByZXBzOwotCi0JZm9yIChyZXBzID0gMDsgcmVwcyA8IDM7IHJlcHMrKykgewotCQlkYmdwX21kZWxheSgxMDApOwotCQlzdGF0dXMgPSByZWFkbCgmZWhjaV9yZWdzLT5zdGF0dXMpOwotCQlpZiAoc3RhdHVzICYgU1RTX1BDRCkgewotCQkJcmV0ID0gZWhjaV9yZXNldF9wb3J0KHBvcnQpOwotCQkJaWYgKHJldCA9PSAwKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAtRU5PVENPTk47Ci19Ci0KLSNpZmRlZiBEQkdQX0RFQlVHCi0jIGRlZmluZSBkYmdwX3ByaW50ayBlYXJseV9wcmludGsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJncF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pIHsgfQotI2VuZGlmCi0KLXR5cGVkZWYgdm9pZCAoKnNldF9kZWJ1Z19wb3J0X3QpKGludCBwb3J0KTsKLQotc3RhdGljIHZvaWQgX19pbml0IGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCi17Ci19Ci0KLXN0YXRpYyBzZXRfZGVidWdfcG9ydF90IF9faW5pdGRhdGEgc2V0X2RlYnVnX3BvcnQgPSBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbnZpZGlhX3NldF9kZWJ1Z19wb3J0KGludCBwb3J0KQotewotCXUzMiBkd29yZDsKLQlkd29yZCA9IHJlYWRfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsCi0JCQkJIDB4NzQpOwotCWR3b3JkICY9IH4oMHgwZjw8MTIpOwotCWR3b3JkIHw9ICgocG9ydCAmIDB4MGYpPDwxMik7Ci0Jd3JpdGVfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsIDB4NzQsCi0JCQkJIGR3b3JkKTsKLQlkYmdwX3ByaW50aygic2V0IGRlYnVnIHBvcnQgdG8gJWRcbiIsIHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZGV0ZWN0X3NldF9kZWJ1Z19wb3J0KHZvaWQpCi17Ci0JdTMyIHZlbmRvcmlkOwotCi0JdmVuZG9yaWQgPSByZWFkX3BjaV9jb25maWcoZWhjaV9kZXYuYnVzLCBlaGNpX2Rldi5zbG90LCBlaGNpX2Rldi5mdW5jLAotCQkgMHgwMCk7Ci0KLQlpZiAoKHZlbmRvcmlkICYgMHhmZmZmKSA9PSAweDEwZGUpIHsKLQkJZGJncF9wcmludGsoInVzaW5nIG52aWRpYSBzZXRfZGVidWdfcG9ydFxuIik7Ci0JCXNldF9kZWJ1Z19wb3J0ID0gbnZpZGlhX3NldF9kZWJ1Z19wb3J0OwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgZWhjaV9zZXR1cCh2b2lkKQotewotCXN0cnVjdCB1c2JfZGVidWdfZGVzY3JpcHRvciBkYmdwX2Rlc2M7Ci0JdTMyIGNtZCwgY3RybCwgc3RhdHVzLCBwb3J0c2MsIGhjc19wYXJhbXM7Ci0JdTMyIGRlYnVnX3BvcnQsIG5ld19kZWJ1Z19wb3J0ID0gMCwgbl9wb3J0czsKLQl1MzIgIGRldm51bTsKLQlpbnQgcmV0LCBpOwotCWludCBsb29wOwotCWludCBwb3J0X21hcF90cmllZDsKLQlpbnQgcGxheXRpbWVzID0gMzsKLQotdHJ5X25leHRfdGltZToKLQlwb3J0X21hcF90cmllZCA9IDA7Ci0KLXRyeV9uZXh0X3BvcnQ6Ci0KLQloY3NfcGFyYW1zID0gcmVhZGwoJmVoY2lfY2Fwcy0+aGNzX3BhcmFtcyk7Ci0JZGVidWdfcG9ydCA9IEhDU19ERUJVR19QT1JUKGhjc19wYXJhbXMpOwotCW5fcG9ydHMgICAgPSBIQ1NfTl9QT1JUUyhoY3NfcGFyYW1zKTsKLQotCWRiZ3BfcHJpbnRrKCJkZWJ1Z19wb3J0OiAlZFxuIiwgZGVidWdfcG9ydCk7Ci0JZGJncF9wcmludGsoIm5fcG9ydHM6ICAgICVkXG4iLCBuX3BvcnRzKTsKLQotCWZvciAoaSA9IDE7IGkgPD0gbl9wb3J0czsgaSsrKSB7Ci0JCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2ktMV0pOwotCQlkYmdwX3ByaW50aygicG9ydHN0YXR1cyVkOiAlMDh4XG4iLCBpLCBwb3J0c2MpOwotCX0KLQotCWlmIChwb3J0X21hcF90cmllZCAmJiAobmV3X2RlYnVnX3BvcnQgIT0gZGVidWdfcG9ydCkpIHsKLQkJaWYgKC0tcGxheXRpbWVzKSB7Ci0JCQlzZXRfZGVidWdfcG9ydChuZXdfZGVidWdfcG9ydCk7Ci0JCQlnb3RvIHRyeV9uZXh0X3RpbWU7Ci0JCX0KLQkJcmV0dXJuIC0xOwotCX0KLQotCWxvb3AgPSAxMDsKLQkvKiBSZXNldCB0aGUgRUhDSSBjb250cm9sbGVyICovCi0JY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7Ci0JY21kIHw9IENNRF9SRVNFVDsKLQl3cml0ZWwoY21kLCAmZWhjaV9yZWdzLT5jb21tYW5kKTsKLQlkbyB7Ci0JCWNtZCA9IHJlYWRsKCZlaGNpX3JlZ3MtPmNvbW1hbmQpOwotCX0gd2hpbGUgKChjbWQgJiBDTURfUkVTRVQpICYmICgtLWxvb3AgPiAwKSk7Ci0KLQlpZiAoIWxvb3ApIHsKLQkJZGJncF9wcmludGsoImNhbiBub3QgcmVzZXQgZWhjaVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZGJncF9wcmludGsoImVoY2kgcmVzZXQgZG9uZVxuIik7Ci0KLQkvKiBDbGFpbSBvd25lcnNoaXAsIGJ1dCBkbyBub3QgZW5hYmxlIHlldCAqLwotCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0JY3RybCB8PSBEQkdQX09XTkVSOwotCWN0cmwgJj0gfihEQkdQX0VOQUJMRUQgfCBEQkdQX0lOVVNFKTsKLQl3cml0ZWwoY3RybCwgJmVoY2lfZGVidWctPmNvbnRyb2wpOwotCi0JLyogU3RhcnQgdGhlIGVoY2kgcnVubmluZyAqLwotCWNtZCA9IHJlYWRsKCZlaGNpX3JlZ3MtPmNvbW1hbmQpOwotCWNtZCAmPSB+KENNRF9MUkVTRVQgfCBDTURfSUFBRCB8IENNRF9QU0UgfCBDTURfQVNFIHwgQ01EX1JFU0VUKTsKLQljbWQgfD0gQ01EX1JVTjsKLQl3cml0ZWwoY21kLCAmZWhjaV9yZWdzLT5jb21tYW5kKTsKLQotCS8qIEVuc3VyZSBldmVyeXRoaW5nIGlzIHJvdXRlZCB0byB0aGUgRUhDSSAqLwotCXdyaXRlbChGTEFHX0NGLCAmZWhjaV9yZWdzLT5jb25maWd1cmVkX2ZsYWcpOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgY29udHJvbGxlciBpcyBubyBsb25nZXIgaGFsdGVkICovCi0JbG9vcCA9IDEwOwotCWRvIHsKLQkJc3RhdHVzID0gcmVhZGwoJmVoY2lfcmVncy0+c3RhdHVzKTsKLQl9IHdoaWxlICgoc3RhdHVzICYgU1RTX0hBTFQpICYmICgtLWxvb3AgPiAwKSk7Ci0KLQlpZiAoIWxvb3ApIHsKLQkJZGJncF9wcmludGsoImVoY2kgY2FuIGJlIHN0YXJ0ZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWRiZ3BfcHJpbnRrKCJlaGNpIHN0YXJ0ZWRcbiIpOwotCi0JLyogV2FpdCBmb3IgYSBkZXZpY2UgdG8gc2hvdyB1cCBpbiB0aGUgZGVidWcgcG9ydCAqLwotCXJldCA9IGVoY2lfd2FpdF9mb3JfcG9ydChkZWJ1Z19wb3J0KTsKLQlpZiAocmV0IDwgMCkgewotCQlkYmdwX3ByaW50aygiTm8gZGV2aWNlIGZvdW5kIGluIGRlYnVnIHBvcnRcbiIpOwotCQlnb3RvIG5leHRfZGVidWdfcG9ydDsKLQl9Ci0JZGJncF9wcmludGsoImVoY2kgd2FpdCBmb3IgcG9ydCBkb25lXG4iKTsKLQotCS8qIEVuYWJsZSB0aGUgZGVidWcgcG9ydCAqLwotCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0JY3RybCB8PSBEQkdQX0NMQUlNOwotCXdyaXRlbChjdHJsLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0JY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQlpZiAoKGN0cmwgJiBEQkdQX0NMQUlNKSAhPSBEQkdQX0NMQUlNKSB7Ci0JCWRiZ3BfcHJpbnRrKCJObyBkZXZpY2UgaW4gZGVidWcgcG9ydFxuIik7Ci0JCXdyaXRlbChjdHJsICYgfkRCR1BfQ0xBSU0sICZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQkJZ290byBlcnI7Ci0JfQotCWRiZ3BfcHJpbnRrKCJkZWJ1ZyBwb3J0ZWQgZW5hYmxlZFxuIik7Ci0KLQkvKiBDb21wbGV0ZWx5IHRyYW5zZmVyIHRoZSBkZWJ1ZyBkZXZpY2UgdG8gdGhlIGRlYnVnIGNvbnRyb2xsZXIgKi8KLQlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1tkZWJ1Z19wb3J0IC0gMV0pOwotCXBvcnRzYyAmPSB+UE9SVF9QRTsKLQl3cml0ZWwocG9ydHNjLCAmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1tkZWJ1Z19wb3J0IC0gMV0pOwotCi0JZGJncF9tZGVsYXkoMTAwKTsKLQotCS8qIEZpbmQgdGhlIGRlYnVnIGRldmljZSBhbmQgbWFrZSBpdCBkZXZpY2UgbnVtYmVyIDEyNyAqLwotCWZvciAoZGV2bnVtID0gMDsgZGV2bnVtIDw9IDEyNzsgZGV2bnVtKyspIHsKLQkJcmV0ID0gZGJncF9jb250cm9sX21zZyhkZXZudW0sCi0JCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJVVNCX1JFUV9HRVRfREVTQ1JJUFRPUiwgKFVTQl9EVF9ERUJVRyA8PCA4KSwgMCwKLQkJCSZkYmdwX2Rlc2MsIHNpemVvZihkYmdwX2Rlc2MpKTsKLQkJaWYgKHJldCA+IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKGRldm51bSA+IDEyNykgewotCQlkYmdwX3ByaW50aygiQ291bGQgbm90IGZpbmQgYXR0YWNoZWQgZGVidWcgZGV2aWNlXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCWlmIChyZXQgPCAwKSB7Ci0JCWRiZ3BfcHJpbnRrKCJBdHRhY2hlZCBkZXZpY2UgaXMgbm90IGEgZGVidWcgZGV2aWNlXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCWRiZ3BfZW5kcG9pbnRfb3V0ID0gZGJncF9kZXNjLmJEZWJ1Z091dEVuZHBvaW50OwotCi0JLyogTW92ZSB0aGUgZGV2aWNlIHRvIDEyNyBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlICovCi0JaWYgKGRldm51bSAhPSBVU0JfREVCVUdfREVWTlVNKSB7Ci0JCXJldCA9IGRiZ3BfY29udHJvbF9tc2coZGV2bnVtLAotCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQlVU0JfUkVRX1NFVF9BRERSRVNTLCBVU0JfREVCVUdfREVWTlVNLCAwLCBOVUxMLCAwKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRiZ3BfcHJpbnRrKCJDb3VsZCBub3QgbW92ZSBhdHRhY2hlZCBkZXZpY2UgdG8gJWRcbiIsCi0JCQkJVVNCX0RFQlVHX0RFVk5VTSk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCQlkZXZudW0gPSBVU0JfREVCVUdfREVWTlVNOwotCQlkYmdwX3ByaW50aygiZGVidWcgZGV2aWNlIHJlbmFtZWQgdG8gMTI3XG4iKTsKLQl9Ci0KLQkvKiBFbmFibGUgdGhlIGRlYnVnIGludGVyZmFjZSAqLwotCXJldCA9IGRiZ3BfY29udHJvbF9tc2coVVNCX0RFQlVHX0RFVk5VTSwKLQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIFVTQl9ERVZJQ0VfREVCVUdfTU9ERSwgMCwgTlVMTCwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGJncF9wcmludGsoIiBDb3VsZCBub3QgZW5hYmxlIHRoZSBkZWJ1ZyBkZXZpY2VcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0JZGJncF9wcmludGsoImRlYnVnIGludGVyZmFjZSBlbmFibGVkXG4iKTsKLQotCS8qIFBlcmZvcm0gYSBzbWFsbCB3cml0ZSB0byBnZXQgdGhlIGV2ZW4vb2RkIGRhdGEgc3RhdGUgaW4gc3luYwotCSAqLwotCXJldCA9IGRiZ3BfYnVsa193cml0ZShVU0JfREVCVUdfREVWTlVNLCBkYmdwX2VuZHBvaW50X291dCwgIiAiLCAxKTsKLQlpZiAocmV0IDwgMCkgewotCQlkYmdwX3ByaW50aygiZGJncF9idWxrX3dyaXRlIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyOwotCX0KLQlkYmdwX3ByaW50aygic21hbGwgd3JpdGUgZG9uZWRcbiIpOwotCi0JcmV0dXJuIDA7Ci1lcnI6Ci0JLyogVGhpbmdzIGRpZG4ndCB3b3JrIHNvIHJlbW92ZSBteSBjbGFpbSAqLwotCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0JY3RybCAmPSB+KERCR1BfQ0xBSU0gfCBEQkdQX09VVCk7Ci0Jd3JpdGVsKGN0cmwsICZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQlyZXR1cm4gLTE7Ci0KLW5leHRfZGVidWdfcG9ydDoKLQlwb3J0X21hcF90cmllZCB8PSAoMTw8KGRlYnVnX3BvcnQgLSAxKSk7Ci0JbmV3X2RlYnVnX3BvcnQgPSAoKGRlYnVnX3BvcnQtMSsxKSVuX3BvcnRzKSArIDE7Ci0JaWYgKHBvcnRfbWFwX3RyaWVkICE9ICgoMTw8bl9wb3J0cykgLSAxKSkgewotCQlzZXRfZGVidWdfcG9ydChuZXdfZGVidWdfcG9ydCk7Ci0JCWdvdG8gdHJ5X25leHRfcG9ydDsKLQl9Ci0JaWYgKC0tcGxheXRpbWVzKSB7Ci0JCXNldF9kZWJ1Z19wb3J0KG5ld19kZWJ1Z19wb3J0KTsKLQkJZ290byB0cnlfbmV4dF90aW1lOwotCX0KLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfZGJncF9pbml0KGNoYXIgKnMpCi17Ci0JdTMyIGRlYnVnX3BvcnQsIGJhciwgb2Zmc2V0OwotCXUzMiBidXMsIHNsb3QsIGZ1bmMsIGNhcDsKLQl2b2lkIF9faW9tZW0gKmVoY2lfYmFyOwotCXUzMiBkYmdwX251bTsKLQl1MzIgYmFyX3ZhbDsKLQljaGFyICplOwotCWludCByZXQ7Ci0JdTggYnl0ZTsKLQotCWlmICghZWFybHlfcGNpX2FsbG93ZWQoKSkKLQkJcmV0dXJuIC0xOwotCi0JZGJncF9udW0gPSAwOwotCWlmICgqcykKLQkJZGJncF9udW0gPSBzaW1wbGVfc3RydG91bChzLCAmZSwgMTApOwotCWRiZ3BfcHJpbnRrKCJkYmdwX251bTogJWRcbiIsIGRiZ3BfbnVtKTsKLQotCWNhcCA9IGZpbmRfZGJncChkYmdwX251bSwgJmJ1cywgJnNsb3QsICZmdW5jKTsKLQlpZiAoIWNhcCkKLQkJcmV0dXJuIC0xOwotCi0JZGJncF9wcmludGsoIkZvdW5kIEVIQ0kgZGVidWcgcG9ydCBvbiAlMDJ4OiUwMnguJTF4XG4iLCBidXMsIHNsb3QsCi0JCQkgZnVuYyk7Ci0KLQlkZWJ1Z19wb3J0ID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgY2FwKTsKLQliYXIgPSAoZGVidWdfcG9ydCA+PiAyOSkgJiAweDc7Ci0JYmFyID0gKGJhciAqIDQpICsgMHhjOwotCW9mZnNldCA9IChkZWJ1Z19wb3J0ID4+IDE2KSAmIDB4ZmZmOwotCWRiZ3BfcHJpbnRrKCJiYXI6ICUwMnggb2Zmc2V0OiAlMDN4XG4iLCBiYXIsIG9mZnNldCk7Ci0JaWYgKGJhciAhPSBQQ0lfQkFTRV9BRERSRVNTXzApIHsKLQkJZGJncF9wcmludGsoIm9ubHkgZGVidWcgcG9ydHMgb24gYmFyIDEgaGFuZGxlZC5cbiIpOwotCi0JCXJldHVybiAtMTsKLQl9Ci0KLQliYXJfdmFsID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0JBU0VfQUREUkVTU18wKTsKLQlkYmdwX3ByaW50aygiYmFyX3ZhbDogJTAyeCBvZmZzZXQ6ICUwM3hcbiIsIGJhcl92YWwsIG9mZnNldCk7Ci0JaWYgKGJhcl92YWwgJiB+UENJX0JBU0VfQUREUkVTU19NRU1fTUFTSykgewotCQlkYmdwX3ByaW50aygib25seSBzaW1wbGUgMzJiaXQgbW1pbyBiYXJzIHN1cHBvcnRlZFxuIik7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIGRvdWJsZSBjaGVjayBpZiB0aGUgbWVtIHNwYWNlIGlzIGVuYWJsZWQgKi8KLQlieXRlID0gcmVhZF9wY2lfY29uZmlnX2J5dGUoYnVzLCBzbG90LCBmdW5jLCAweDA0KTsKLQlpZiAoIShieXRlICYgMHgyKSkgewotCQlieXRlICB8PSAweDAyOwotCQl3cml0ZV9wY2lfY29uZmlnX2J5dGUoYnVzLCBzbG90LCBmdW5jLCAweDA0LCBieXRlKTsKLQkJZGJncF9wcmludGsoIm1taW8gZm9yIGVoY2kgZW5hYmxlZFxuIik7Ci0JfQotCi0JLyoKLQkgKiBGSVhNRSBJIGRvbid0IGhhdmUgdGhlIGJhciBzaXplIHNvIGp1c3QgZ3Vlc3MgUEFHRV9TSVpFIGlzIG1vcmUKLQkgKiB0aGFuIGVub3VnaC4gIDFLIGlzIHRoZSBiaWdnZXN0IEkgaGF2ZSBzZWVuLgotCSAqLwotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfREJHUF9CQVNFLCBiYXJfdmFsICYgUEFHRV9NQVNLKTsKLQllaGNpX2JhciA9ICh2b2lkIF9faW9tZW0gKilfX2ZpeF90b192aXJ0KEZJWF9EQkdQX0JBU0UpOwotCWVoY2lfYmFyICs9IGJhcl92YWwgJiB+UEFHRV9NQVNLOwotCWRiZ3BfcHJpbnRrKCJlaGNpX2JhcjogJXBcbiIsIGVoY2lfYmFyKTsKLQotCWVoY2lfY2FwcyAgPSBlaGNpX2JhcjsKLQllaGNpX3JlZ3MgID0gZWhjaV9iYXIgKyBIQ19MRU5HVEgocmVhZGwoJmVoY2lfY2Fwcy0+aGNfY2FwYmFzZSkpOwotCWVoY2lfZGVidWcgPSBlaGNpX2JhciArIG9mZnNldDsKLQllaGNpX2Rldi5idXMgPSBidXM7Ci0JZWhjaV9kZXYuc2xvdCA9IHNsb3Q7Ci0JZWhjaV9kZXYuZnVuYyA9IGZ1bmM7Ci0KLQlkZXRlY3Rfc2V0X2RlYnVnX3BvcnQoKTsKLQotCXJldCA9IGVoY2lfc2V0dXAoKTsKLQlpZiAocmV0IDwgMCkgewotCQlkYmdwX3ByaW50aygiZWhjaV9zZXR1cCBmYWlsZWRcbiIpOwotCQllaGNpX2RlYnVnID0gTlVMTDsKLQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGVhcmx5X2RiZ3Bfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqc3RyLCB1MzIgbikKLXsKLQlpbnQgY2h1bmssIHJldDsKLQotCWlmICghZWhjaV9kZWJ1ZykKLQkJcmV0dXJuOwotCXdoaWxlIChuID4gMCkgewotCQljaHVuayA9IG47Ci0JCWlmIChjaHVuayA+IERCR1BfTUFYX1BBQ0tFVCkKLQkJCWNodW5rID0gREJHUF9NQVhfUEFDS0VUOwotCQlyZXQgPSBkYmdwX2J1bGtfd3JpdGUoVVNCX0RFQlVHX0RFVk5VTSwKLQkJCWRiZ3BfZW5kcG9pbnRfb3V0LCBzdHIsIGNodW5rKTsKLQkJc3RyICs9IGNodW5rOwotCQluIC09IGNodW5rOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBjb25zb2xlIGVhcmx5X2RiZ3BfY29uc29sZSA9IHsKLQkubmFtZSA9CQkiZWFybHlkYmciLAotCS53cml0ZSA9CWVhcmx5X2RiZ3Bfd3JpdGUsCi0JLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleCA9CS0xLAotfTsKLSNlbmRpZgotCiAvKiBEaXJlY3QgaW50ZXJmYWNlIGZvciBlbWVyZ2VuY2llcyAqLwogc3RhdGljIHN0cnVjdCBjb25zb2xlICplYXJseV9jb25zb2xlID0gJmVhcmx5X3ZnYV9jb25zb2xlOwogc3RhdGljIGludCBfX2luaXRkYXRhIGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQ7CkBAIC04OTEsMTAgKzE3NiwxOSBAQAogCXZhX2VuZChhcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9jb25zb2xlX3JlZ2lzdGVyKHN0cnVjdCBjb25zb2xlICpjb24sIGludCBrZWVwX2Vhcmx5KQoreworCWVhcmx5X2NvbnNvbGUgPSBjb247CisJaWYgKGtlZXBfZWFybHkpCisJCWVhcmx5X2NvbnNvbGUtPmZsYWdzICY9IH5DT05fQk9PVDsKKwllbHNlCisJCWVhcmx5X2NvbnNvbGUtPmZsYWdzIHw9IENPTl9CT09UOworCXJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7Cit9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICpidWYpCiB7Ci0JaW50IGtlZXBfZWFybHk7CisJaW50IGtlZXA7CiAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIDA7CkBAIC05MDMsNDIgKzE5NywzNCBAQAogCQlyZXR1cm4gMDsKIAllYXJseV9jb25zb2xlX2luaXRpYWxpemVkID0gMTsKIAotCWtlZXBfZWFybHkgPSAoc3Ryc3RyKGJ1ZiwgImtlZXAiKSAhPSBOVUxMKTsKKwlrZWVwID0gKHN0cnN0cihidWYsICJrZWVwIikgIT0gTlVMTCk7CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCAic2VyaWFsIiwgNikpIHsKLQkJZWFybHlfc2VyaWFsX2luaXQoYnVmICsgNik7Ci0JCWVhcmx5X2NvbnNvbGUgPSAmZWFybHlfc2VyaWFsX2NvbnNvbGU7Ci0JfSBlbHNlIGlmICghc3RybmNtcChidWYsICJ0dHlTIiwgNCkpIHsKLQkJZWFybHlfc2VyaWFsX2luaXQoYnVmKTsKLQkJZWFybHlfY29uc29sZSA9ICZlYXJseV9zZXJpYWxfY29uc29sZTsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInZnYSIsIDMpCi0JCSYmIGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgPT0gMSkgewotCQltYXhfeHBvcyA9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fY29sczsKLQkJbWF4X3lwb3MgPSBib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2xpbmVzOwotCQljdXJyZW50X3lwb3MgPSBib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3k7Ci0JCWVhcmx5X2NvbnNvbGUgPSAmZWFybHlfdmdhX2NvbnNvbGU7CisJd2hpbGUgKCpidWYgIT0gJ1wwJykgeworCQlpZiAoIXN0cm5jbXAoYnVmLCAic2VyaWFsIiwgNikpIHsKKwkJCWVhcmx5X3NlcmlhbF9pbml0KGJ1ZiArIDYpOworCQkJZWFybHlfY29uc29sZV9yZWdpc3RlcigmZWFybHlfc2VyaWFsX2NvbnNvbGUsIGtlZXApOworCQl9CisJCWlmICghc3RybmNtcChidWYsICJ0dHlTIiwgNCkpIHsKKwkJCWVhcmx5X3NlcmlhbF9pbml0KGJ1ZiArIDQpOworCQkJZWFybHlfY29uc29sZV9yZWdpc3RlcigmZWFybHlfc2VyaWFsX2NvbnNvbGUsIGtlZXApOworCQl9CisJCWlmICghc3RybmNtcChidWYsICJ2Z2EiLCAzKSAmJgorCQkgICAgYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9PSAxKSB7CisJCQltYXhfeHBvcyA9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fY29sczsKKwkJCW1heF95cG9zID0gYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ192aWRlb19saW5lczsKKwkJCWN1cnJlbnRfeXBvcyA9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfeTsKKwkJCWVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoJmVhcmx5X3ZnYV9jb25zb2xlLCBrZWVwKTsKKwkJfQogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEtfREJHUAotCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAiZGJncCIsIDQpKSB7Ci0JCWlmIChlYXJseV9kYmdwX2luaXQoYnVmKzQpIDwgMCkKLQkJCXJldHVybiAwOwotCQllYXJseV9jb25zb2xlID0gJmVhcmx5X2RiZ3BfY29uc29sZTsKLQkJLyoKLQkJICogdXNiIHN1YnN5cyB3aWxsIHJlc2V0IGVoY2kgY29udHJvbGxlciwgc28gZG9uJ3Qga2VlcAotCQkgKiB0aGF0IGVhcmx5IGNvbnNvbGUKLQkJICovCi0JCWtlZXBfZWFybHkgPSAwOworCQlpZiAoIXN0cm5jbXAoYnVmLCAiZGJncCIsIDQpICYmICFlYXJseV9kYmdwX2luaXQoYnVmICsgNCkpCisJCQllYXJseV9jb25zb2xlX3JlZ2lzdGVyKCZlYXJseV9kYmdwX2NvbnNvbGUsIGtlZXApOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hWQ19YRU4KLQl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInhlbiIsIDMpKSB7Ci0JCWVhcmx5X2NvbnNvbGUgPSAmeGVuYm9vdF9jb25zb2xlOworCQlpZiAoIXN0cm5jbXAoYnVmLCAieGVuIiwgMykpCisJCQllYXJseV9jb25zb2xlX3JlZ2lzdGVyKCZ4ZW5ib290X2NvbnNvbGUsIGtlZXApOwogI2VuZGlmCisJCWJ1ZisrOwogCX0KLQotCWlmIChrZWVwX2Vhcmx5KQotCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7Ci0JZWxzZQotCQllYXJseV9jb25zb2xlLT5mbGFncyB8PSBDT05fQk9PVDsKLQlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IGQ1OWZlMzIuLmI1YzA2MWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCkBAIC01MzYsMjAgKzUzNiwxMyBAQAogCWJ0ICRUSUZfU1lTQ0FMTF9BVURJVCwlZWR4CiAJamMgc3lzcmV0X2F1ZGl0CiAjZW5kaWYKLQkvKiBlZHg6CXdvcmsgZmxhZ3MgKGFyZzMpICovCi0JbGVhcSAtQVJHT0ZGU0VUKCVyc3ApLCVyZGkgIyAmcHRfcmVncyAtPiBhcmcxCi0JeG9ybCAlZXNpLCVlc2kgIyBvbGRzZXQgLT4gYXJnMgotCVNBVkVfUkVTVAotCUZJWFVQX1RPUF9PRl9TVEFDSyAlcjExCi0JY2FsbCBkb19ub3RpZnlfcmVzdW1lCi0JUkVTVE9SRV9UT1BfT0ZfU1RBQ0sgJXIxMQotCVJFU1RPUkVfUkVTVAotCW1vdmwgJF9USUZfV09SS19NQVNLLCVlZGkKLQkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lLiBUaGlzCi0JICAgd29ya3MgYmVjYXVzZSBwdHJlZ3NjYWxsX2NvbW1vbiBoYXMgY2FsbGVkIEZJWFVQX1RPUF9PRl9TVEFDSy4gKi8KLQlESVNBQkxFX0lOVEVSUlVQVFMoQ0xCUl9OT05FKQotCVRSQUNFX0lSUVNfT0ZGCi0Jam1wIGludF93aXRoX2NoZWNrCisJLyoKKwkgKiBXZSBoYXZlIGEgc2lnbmFsLCBvciBleGl0IHRyYWNpbmcgb3Igc2luZ2xlLXN0ZXAuCisJICogVGhlc2UgYWxsIHdpbmQgdXAgd2l0aCB0aGUgaXJldCByZXR1cm4gcGF0aCBhbnl3YXksCisJICogc28ganVzdCBqb2luIHRoYXQgcGF0aCByaWdodCBub3cuCisJICovCisJRklYVVBfVE9QX09GX1NUQUNLICVyMTEsIC1BUkdPRkZTRVQKKwlqbXAgaW50X2NoZWNrX3N5c2NhbGxfZXhpdF93b3JrCiAKIGJhZHN5czoKIAltb3ZxICQtRU5PU1lTLFJBWC1BUkdPRkZTRVQoJXJzcCkKQEAgLTY1NCw2ICs2NDcsNyBAQAogaW50X3ZlcnlfY2FyZWZ1bDoKIAlUUkFDRV9JUlFTX09OCiAJRU5BQkxFX0lOVEVSUlVQVFMoQ0xCUl9OT05FKQoraW50X2NoZWNrX3N5c2NhbGxfZXhpdF93b3JrOgogCVNBVkVfUkVTVAogCS8qIENoZWNrIGZvciBzeXNjYWxsIGV4aXQgdHJhY2UgKi8KIAl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRVhJVCwlZWR4CkBAIC0xMDIxLDcgKzEwMTUsNyBAQAogYXBpY2ludGVycnVwdCBTUFVSSU9VU19BUElDX1ZFQ1RPUiBcCiAJc3B1cmlvdXNfaW50ZXJydXB0IHNtcF9zcHVyaW91c19pbnRlcnJ1cHQKIAotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiBhcGljaW50ZXJydXB0IExPQ0FMX1BFTkRJTkdfVkVDVE9SIFwKIAlwZXJmX3BlbmRpbmdfaW50ZXJydXB0IHNtcF9wZXJmX3BlbmRpbmdfaW50ZXJydXB0CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdC5jCmluZGV4IDMwMDg4MzEuLjQwZjMwNzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXQuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJYWxsb2NfaW50cl9nYXRlKEVSUk9SX0FQSUNfVkVDVE9SLCBlcnJvcl9pbnRlcnJ1cHQpOwogCiAJLyogUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzOiAqLwotIyBpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUworIyBpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlhbGxvY19pbnRyX2dhdGUoTE9DQUxfUEVORElOR19WRUNUT1IsIHBlcmZfcGVuZGluZ19pbnRlcnJ1cHQpOwogIyBlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCmluZGV4IDkzNzE0NDguLjM3OGU5YTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCkBAIC0yMTAsOCArMjEwLDggQEAKIHsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoKGxlbiA+PiBQQUdFX1NISUZUKSA+IG51bV9waHlzcGFnZXMpIHsKLQkJcHJfZXJyKCJtaWNyb2NvZGU6IHRvbyBtdWNoIGRhdGEgKG1heCAlbGQgcGFnZXMpXG4iLCBudW1fcGh5c3BhZ2VzKTsKKwlpZiAoKGxlbiA+PiBQQUdFX1NISUZUKSA+IHRvdGFscmFtX3BhZ2VzKSB7CisJCXByX2VycigibWljcm9jb2RlOiB0b28gbXVjaCBkYXRhIChtYXggJWxkIHBhZ2VzKVxuIiwgdG90YWxyYW1fcGFnZXMpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjM2LDcgKzIzNiw3IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWljcm9jb2RlX2RldiA9IHsKIAkubWlub3IJCQk9IE1JQ1JPQ09ERV9NSU5PUiwKIAkubmFtZQkJCT0gIm1pY3JvY29kZSIsCi0JLmRldm5vZGUJCT0gImNwdS9taWNyb2NvZGUiLAorCS5ub2RlbmFtZQkJPSAiY3B1L21pY3JvY29kZSIsCiAJLmZvcHMJCQk9ICZtaWNyb2NvZGVfZm9wcywKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCA3ZGQ5NTAwLi42YTNjZWZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAkubm90aWZpZXJfY2FsbCA9IG1zcl9jbGFzc19jcHVfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgY2hhciAqbXNyX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICptc3JfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJjcHUvJXUvbXNyIiwgTUlOT1IoZGV2LT5kZXZ0KSk7CiB9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJZXJyID0gUFRSX0VSUihtc3JfY2xhc3MpOwogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQotCW1zcl9jbGFzcy0+bm9kZW5hbWUgPSBtc3Jfbm9kZW5hbWU7CisJbXNyX2NsYXNzLT5kZXZub2RlID0gbXNyX2Rldm5vZGU7CiAJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CiAJCWVyciA9IG1zcl9kZXZpY2VfY3JlYXRlKGkpOwogCQlpZiAoZXJyICE9IDApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jCmluZGV4IGU4YTM1MDEuLmFhYTZiNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jCkBAIC00Niw5ICs0Niw4IEBACiB7CiAJLyogZG9uJ3QgaW5pdGlhbGl6ZSBzd2lvdGxiIGlmIGlvbW11PW9mZiAobm9faW9tbXU9MSkgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JaWYgKCghaW9tbXVfZGV0ZWN0ZWQgJiYgIW5vX2lvbW11ICYmIG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB8fAotCQlpb21tdV9wYXNzX3Rocm91Z2gpCi0JICAgICAgIHN3aW90bGIgPSAxOworCWlmICgoIWlvbW11X2RldGVjdGVkICYmICFub19pb21tdSAmJiBtYXhfcGZuID4gTUFYX0RNQTMyX1BGTikpCisJCXN3aW90bGIgPSAxOwogI2VuZGlmCiAJaWYgKHN3aW90bGJfZm9yY2UpCiAJCXN3aW90bGIgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMDcxMTY2YS4uODQ3YWI0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CkBAIC0yNSw5ICsyNSw2IEBACiAKIHN0cnVjdCBrbWVtX2NhY2hlICp0YXNrX3hzdGF0ZV9jYWNoZXA7CiAKLURFRklORV9UUkFDRShwb3dlcl9zdGFydCk7Ci1ERUZJTkVfVFJBQ0UocG93ZXJfZW5kKTsKLQogaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYykKIHsKIAkqZHN0ID0gKnNyYzsKQEAgLTI5OSw5ICsyOTYsNyBAQAogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlpZiAoaGx0X3VzZV9oYWx0KCkpIHsKLQkJc3RydWN0IHBvd2VyX3RyYWNlIGl0OwotCi0JCXRyYWNlX3Bvd2VyX3N0YXJ0KCZpdCwgUE9XRVJfQ1NUQVRFLCAxKTsKKwkJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAxKTsKIAkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7CiAJCS8qCiAJCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlCkBAIC0zMTQsNyArMzA5LDYgQEAKIAkJZWxzZQogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOwotCQl0cmFjZV9wb3dlcl9lbmQoJml0KTsKIAl9IGVsc2UgewogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCS8qIGxvb3AgaXMgZG9uZSBieSB0aGUgY2FsbGVyICovCkBAIC0zNzIsOSArMzY2LDcgQEAKICAqLwogdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBheCwgdW5zaWduZWQgbG9uZyBjeCkKIHsKLQlzdHJ1Y3QgcG93ZXJfdHJhY2UgaXQ7Ci0KLQl0cmFjZV9wb3dlcl9zdGFydCgmaXQsIFBPV0VSX0NTVEFURSwgKGF4Pj40KSsxKTsKKwl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIChheD4+NCkrMSk7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQlpZiAoY3B1X2hhcygmY3VycmVudF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SKSkKIAkJCWNsZmx1c2goKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7CkBAIC0zODQsMTUgKzM3NiwxMyBAQAogCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQogCQkJX19td2FpdChheCwgY3gpOwogCX0KLQl0cmFjZV9wb3dlcl9lbmQoJml0KTsKIH0KIAogLyogRGVmYXVsdCBNT05JVE9SL01XQUlUIHdpdGggbm8gaGludHMsIHVzZWQgZm9yIGRlZmF1bHQgQzEgc3RhdGUgKi8KIHN0YXRpYyB2b2lkIG13YWl0X2lkbGUodm9pZCkKIHsKLQlzdHJ1Y3QgcG93ZXJfdHJhY2UgaXQ7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewotCQl0cmFjZV9wb3dlcl9zdGFydCgmaXQsIFBPV0VSX0NTVEFURSwgMSk7CisJCXRyYWNlX3Bvd2VyX3N0YXJ0KFBPV0VSX0NTVEFURSwgMSk7CiAJCWlmIChjcHVfaGFzKCZjdXJyZW50X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9DTEZMVVNIX01PTklUT1IpKQogCQkJY2xmbHVzaCgodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzKTsKIApAQCAtNDAyLDcgKzM5Miw2IEBACiAJCQlfX3N0aV9td2FpdCgwLCAwKTsKIAkJZWxzZQogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQl0cmFjZV9wb3dlcl9lbmQoJml0KTsKIAl9IGVsc2UKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQpAQCAtNDE0LDEzICs0MDMsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgcG9sbF9pZGxlKHZvaWQpCiB7Ci0Jc3RydWN0IHBvd2VyX3RyYWNlIGl0OwotCi0JdHJhY2VfcG93ZXJfc3RhcnQoJml0LCBQT1dFUl9DU1RBVEUsIDApOworCXRyYWNlX3Bvd2VyX3N0YXJ0KFBPV0VSX0NTVEFURSwgMCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCWNwdV9yZWxheCgpOwotCXRyYWNlX3Bvd2VyX2VuZCgmaXQpOworCXRyYWNlX3Bvd2VyX2VuZCgwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA4ZDdkNWM5Li43YjA1OGEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC0zMjUsMTYgKzMyNSw2IEBACiAJCXJldHVybiBzZXRfZmxhZ3MoY2hpbGQsIHZhbHVlKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLQkvKgotCSAqIE9yaWdfYXggaXMgcmVhbGx5IGp1c3QgYSBmbGFnIHdpdGggc21hbGwgcG9zaXRpdmUgYW5kCi0JICogbmVnYXRpdmUgdmFsdWVzLCBzbyBtYWtlIHN1cmUgdG8gYWx3YXlzIHNpZ24tZXh0ZW5kIGl0Ci0JICogZnJvbSAzMiBiaXRzIHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IHJlZ2FyZGxlc3Mgb2YKLQkgKiB3aGV0aGVyIHdlIGNvbWUgZnJvbSBhIDMyLWJpdCBlbnZpcm9ubWVudCBvciBub3QuCi0JICovCi0JY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCwgb3JpZ19heCk6Ci0JCXZhbHVlID0gKGxvbmcpIChzMzIpIHZhbHVlOwotCQlicmVhazsKLQogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QsZnNfYmFzZSk6CiAJCWlmICh2YWx1ZSA+PSBUQVNLX1NJWkVfT0YoY2hpbGQpKQogCQkJcmV0dXJuIC1FSU87CkBAIC0xMTI2LDEwICsxMTE2LDE1IEBACiAKIAljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyMzIsIHJlZ3Mub3JpZ19lYXgpOgogCQkvKgotCQkgKiBTaWduLWV4dGVuZCB0aGUgdmFsdWUgc28gdGhhdCBvcmlnX2VheCA9IC0xCi0JCSAqIGNhdXNlcyAobG9uZylvcmlnX2F4IDwgMCB0ZXN0cyB0byBmaXJlIGNvcnJlY3RseS4KKwkJICogQSAzMi1iaXQgZGVidWdnZXIgc2V0dGluZyBvcmlnX2VheCBtZWFucyB0byByZXN0b3JlCisJCSAqIHRoZSBzdGF0ZSBvZiB0aGUgdGFzayByZXN0YXJ0aW5nIGEgMzItYml0IHN5c2NhbGwuCisJCSAqIE1ha2Ugc3VyZSB3ZSBpbnRlcnByZXQgdGhlIC1FUkVTVEFSVCogY29kZXMgY29ycmVjdGx5CisJCSAqIGluIGNhc2UgdGhlIHRhc2sgaXMgbm90IGFjdHVhbGx5IHN0aWxsIHNpdHRpbmcgYXQgdGhlCisJCSAqIGV4aXQgZnJvbSBhIDMyLWJpdCBzeXNjYWxsIHdpdGggVFNfQ09NUEFUIHN0aWxsIHNldC4KIAkJICovCi0JCXJlZ3MtPm9yaWdfYXggPSAobG9uZykgKHMzMikgdmFsdWU7CisJCXJlZ3MtPm9yaWdfYXggPSB2YWx1ZTsKKwkJaWYgKHN5c2NhbGxfZ2V0X25yKGNoaWxkLCByZWdzKSA+PSAwKQorCQkJdGFza190aHJlYWRfaW5mbyhjaGlsZCktPnN0YXR1cyB8PSBUU19DT01QQVQ7CiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdXNlcjMyLCByZWdzLmVmbGFncyk6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGE1NWY2NjAuLmUwOWYwZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC02OTcsMjEgKzY5OCw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29tbWFuZCBsaW5lOiAlc1xuIiwgYm9vdF9jb21tYW5kX2xpbmUpOwogI2VuZGlmCiAKLQlzdHJsY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKLQkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qCi0JICogTXVzdCBjYWxsIHRoaXMgdHdpY2U6IE9uY2UganVzdCB0byBkZXRlY3Qgd2hldGhlciBoYXJkd2FyZSBkb2Vzbid0Ci0JICogc3VwcG9ydCBOWCAoc28gdGhhdCB0aGUgZWFybHkgRUhDSSBkZWJ1ZyBjb25zb2xlIHNldHVwIGNhbiBzYWZlbHkKLQkgKiBjYWxsIHNldF9maXhtYXAoKSwgYW5kIHRoZW4gYWdhaW4gYWZ0ZXIgcGFyc2luZyBlYXJseSBwYXJhbWV0ZXJzIHRvCi0JICogaG9ub3IgdGhlIHJlc3BlY3RpdmUgY29tbWFuZCBsaW5lIG9wdGlvbi4KLQkgKi8KLQljaGVja19lZmVyKCk7Ci0jZW5kaWYKLQotCXBhcnNlX2Vhcmx5X3BhcmFtKCk7Ci0KIAkvKiBWTUkgbWF5IHJlbG9jYXRlIHRoZSBmaXhtYXA7IGRvIHRoaXMgYmVmb3JlIHRvdWNoaW5nIGlvcmVtYXAgYXJlYSAqLwogCXZtaV9pbml0KCk7CiAKQEAgLTc5NCw2ICs3ODAsMjEgQEAKICNlbmRpZgogI2VuZGlmCiAKKwlzdHJsY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKKwkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qCisJICogTXVzdCBjYWxsIHRoaXMgdHdpY2U6IE9uY2UganVzdCB0byBkZXRlY3Qgd2hldGhlciBoYXJkd2FyZSBkb2Vzbid0CisJICogc3VwcG9ydCBOWCAoc28gdGhhdCB0aGUgZWFybHkgRUhDSSBkZWJ1ZyBjb25zb2xlIHNldHVwIGNhbiBzYWZlbHkKKwkgKiBjYWxsIHNldF9maXhtYXAoKSwgYW5kIHRoZW4gYWdhaW4gYWZ0ZXIgcGFyc2luZyBlYXJseSBwYXJhbWV0ZXJzIHRvCisJICogaG9ub3IgdGhlIHJlc3BlY3RpdmUgY29tbWFuZCBsaW5lIG9wdGlvbi4KKwkgKi8KKwljaGVja19lZmVyKCk7CisjZW5kaWYKKworCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJY2hlY2tfZWZlcigpOwogI2VuZGlmCkBAIC05ODUsNiArOTg2LDggQEAKIAkgKi8KIAlhY3BpX2Jvb3RfaW5pdCgpOwogCisJc2ZpX2luaXQoKTsKKwogCS8qCiAJICogZ2V0IGJvb3QtdGltZSBTTVAgY29uZmlndXJhdGlvbjoKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZmkuYyBiL2FyY2gveDg2L2tlcm5lbC9zZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGUwOTkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL3NmaS5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogc2ZpLmMgLSB4ODYgYXJjaGl0ZWN0dXJlIFNGSSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiU0ZJIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2ZpX2xhcGljX2FkZHIgX19pbml0ZGF0YSA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisKK3ZvaWQgX19pbml0IG1wX3NmaV9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwltcF9sYXBpY19hZGRyID0gYWRkcmVzczsKKworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBtcF9sYXBpY19hZGRyKTsKKwlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID09IC0xVSkKKwkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7CisKKwlwcl9pbmZvKCJCb290IENQVSA9ICVkXG4iLCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworfQorCisvKiBBbGwgQ1BVcyBlbnVtZXJhdGVkIGJ5IFNGSSBtdXN0IGJlIHByZXNlbnQgYW5kIGVuYWJsZWQgKi8KK3ZvaWQgX19jcHVpbml0IG1wX3NmaV9yZWdpc3Rlcl9sYXBpYyh1OCBpZCkKK3sKKwlpZiAoTUFYX0FQSUNTIC0gaWQgPD0gMCkgeworCQlwcl93YXJuaW5nKCJQcm9jZXNzb3IgIyVkIGludmFsaWQgKG1heCAlZClcbiIsCisJCQlpZCwgTUFYX0FQSUNTKTsKKwkJcmV0dXJuOworCX0KKworCXByX2luZm8oInJlZ2lzdGVyaW5nIGxhcGljWyVkXVxuIiwgaWQpOworCisJZ2VuZXJpY19wcm9jZXNzb3JfaW5mbyhpZCwgR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNmaV9wYXJzZV9jcHVzKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSkKK3sKKwlzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqc2I7CisJc3RydWN0IHNmaV9jcHVfdGFibGVfZW50cnkgKnBlbnRyeTsKKwlpbnQgaTsKKwlpbnQgY3B1X251bTsKKworCXNiID0gKHN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICopdGFibGU7CisJY3B1X251bSA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc2IsIHN0cnVjdCBzZmlfY3B1X3RhYmxlX2VudHJ5KTsKKwlwZW50cnkgPSAoc3RydWN0IHNmaV9jcHVfdGFibGVfZW50cnkgKilzYi0+cGVudHJ5OworCisJZm9yIChpID0gMDsgaSA8IGNwdV9udW07IGkrKykgeworCQltcF9zZmlfcmVnaXN0ZXJfbGFwaWMocGVudHJ5LT5hcGljX2lkKTsKKwkJcGVudHJ5Kys7CisJfQorCisJc21wX2ZvdW5kX2NvbmZpZyA9IDE7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKK3N0YXRpYyB1MzIgZ3NpX2Jhc2U7CisKK3N0YXRpYyBpbnQgX19pbml0IHNmaV9wYXJzZV9pb2FwaWMoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQoreworCXN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzYjsKKwlzdHJ1Y3Qgc2ZpX2FwaWNfdGFibGVfZW50cnkgKnBlbnRyeTsKKwlpbnQgaSwgbnVtOworCisJc2IgPSAoc3RydWN0IHNmaV90YWJsZV9zaW1wbGUgKil0YWJsZTsKKwludW0gPSBTRklfR0VUX05VTV9FTlRSSUVTKHNiLCBzdHJ1Y3Qgc2ZpX2FwaWNfdGFibGVfZW50cnkpOworCXBlbnRyeSA9IChzdHJ1Y3Qgc2ZpX2FwaWNfdGFibGVfZW50cnkgKilzYi0+cGVudHJ5OworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCW1wX3JlZ2lzdGVyX2lvYXBpYyhpLCBwZW50cnktPnBoeXNfYWRkciwgZ3NpX2Jhc2UpOworCQlnc2lfYmFzZSArPSBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGkpOworCQlwZW50cnkrKzsKKwl9CisKKwlXQVJOKHBpY19tb2RlLCBLRVJOX1dBUk5JTkcKKwkJIlNGSTogcGljX21vZCBzaG91bGRuJ3QgYmUgMSB3aGVuIElPQVBJQyB0YWJsZSBpcyBwcmVzZW50XG4iKTsKKwlwaWNfbW9kZSA9IDA7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCisKKy8qCisgKiBzZmlfcGxhdGZvcm1faW5pdCgpOiByZWdpc3RlciBsYXBpY3MgJiBpby1hcGljcworICovCitpbnQgX19pbml0IHNmaV9wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJbXBfc2ZpX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3Moc2ZpX2xhcGljX2FkZHIpOworCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX0NQVVMsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9jcHVzKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX0FQSUMsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9pb2FwaWMpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwppbmRleCBkNTEzMjFkLi4wMTU3Y2QyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKQEAgLTMzNSw0ICszMzUsNCBAQAogCS5sb25nIHN5c19wcmVhZHYKIAkubG9uZyBzeXNfcHdyaXRldgogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwkvKiAzMzUgKi8KLQkubG9uZyBzeXNfcGVyZl9jb3VudGVyX29wZW4KKwkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwppbmRleCA4MDgwMzFhLi42OTlmN2VlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KIAogLyogcmVhZHkgZm9yIHg4Nl82NCBhbmQgeDg2ICovCi11bnNpZ25lZCBjaGFyICp0cmFtcG9saW5lX2Jhc2UgPSBfX3ZhKFRSQU1QT0xJTkVfQkFTRSk7Cit1bnNpZ25lZCBjaGFyICpfX2NwdWluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKIAogdm9pZCBfX2luaXQgcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSh2b2lkKQogewpAQCAtMjYsNyArMjYsNyBAQAogICogYm9vdHN0cmFwIGludG8gdGhlIHBhZ2UgY29uY2VybmVkLiBUaGUgY2FsbGVyCiAgKiBoYXMgbWFkZSBzdXJlIGl0J3Mgc3VpdGFibHkgYWxpZ25lZC4KICAqLwotdW5zaWduZWQgbG9uZyBzZXR1cF90cmFtcG9saW5lKHZvaWQpCit1bnNpZ25lZCBsb25nIF9fY3B1aW5pdCBzZXR1cF90cmFtcG9saW5lKHZvaWQpCiB7CiAJbWVtY3B5KHRyYW1wb2xpbmVfYmFzZSwgdHJhbXBvbGluZV9kYXRhLCBUUkFNUE9MSU5FX1NJWkUpOwogCXJldHVybiB2aXJ0X3RvX3BoeXModHJhbXBvbGluZV9iYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV8zMi5TCmluZGV4IDY2ZDg3NGUuLjg1MDgyMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfMzIuUwpAQCAtMjgsMTYgKzI4LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogCiAvKiBXZSBjYW4gZnJlZSB1cCB0cmFtcG9saW5lIGFmdGVyIGJvb3R1cCBpZiBjcHUgaG90cGx1ZyBpcyBub3Qgc3VwcG9ydGVkLiAqLwotI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKLS5zZWN0aW9uICIuY3B1aW5pdC5kYXRhIiwiYXciLEBwcm9nYml0cwotI2Vsc2UKLS5zZWN0aW9uIC5yb2RhdGEsImEiLEBwcm9nYml0cwotI2VuZGlmCi0KK19fQ1BVSU5JVFJPREFUQQogLmNvZGUxNgogCiBFTlRSWSh0cmFtcG9saW5lX2RhdGEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwppbmRleCBjZGRmYjhkLi41OTZkNTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKQEAgLTI1LDE0ICsyNSwxNSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKLS5zZWN0aW9uIC5yb2RhdGEsICJhIiwgQHByb2diaXRzCi0KKy8qIFdlIGNhbiBmcmVlIHVwIHRoZSB0cmFtcG9saW5lIGFmdGVyIGJvb3R1cCBpZiBjcHUgaG90cGx1ZyBpcyBub3Qgc3VwcG9ydGVkLiAqLworX19DUFVJTklUUk9EQVRBCiAuY29kZTE2CiAKIEVOVFJZKHRyYW1wb2xpbmVfZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggN2RjMGRlOS4uOTM0NmUxMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTY1LDcgKzY1LDYgQEAKICNlbHNlCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCiBhc21saW5rYWdlIGludCBzeXN0ZW1fY2FsbCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCmluZGV4IDE3NDA5ZTguLmNkOTgyZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKQEAgLTY2Niw3ICs2NjYsNyBAQAogCWlmICgodmFsID09IENQVUZSRVFfUFJFQ0hBTkdFICAmJiBmcmVxLT5vbGQgPCBmcmVxLT5uZXcpIHx8CiAJCQkodmFsID09IENQVUZSRVFfUE9TVENIQU5HRSAmJiBmcmVxLT5vbGQgPiBmcmVxLT5uZXcpIHx8CiAJCQkodmFsID09IENQVUZSRVFfUkVTVU1FQ0hBTkdFKSkgewotCQkqbHBqID0gCWNwdWZyZXFfc2NhbGUobG9vcHNfcGVyX2ppZmZ5X3JlZiwgcmVmX2ZyZXEsIGZyZXEtPm5ldyk7CisJCSpscGogPSBjcHVmcmVxX3NjYWxlKGxvb3BzX3Blcl9qaWZmeV9yZWYsIHJlZl9mcmVxLCBmcmVxLT5uZXcpOwogCiAJCXRzY19raHogPSBjcHVmcmVxX3NjYWxlKHRzY19raHpfcmVmLCByZWZfZnJlcSwgZnJlcS0+bmV3KTsKIAkJaWYgKCEoZnJlcS0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMGNjYjU3ZC4uYTQ2YWNjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQ1LDkgKzQ1LDkgQEAKIAl0ZXh0IFBUX0xPQUQgRkxBR1MoNSk7ICAgICAgICAgIC8qIFJfRSAqLwogCWRhdGEgUFRfTE9BRCBGTEFHUyg3KTsgICAgICAgICAgLyogUldFICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCXVzZXIgUFRfTE9BRCBGTEFHUyg3KTsgICAgICAgICAgLyogUldFICovCisJdXNlciBQVF9MT0FEIEZMQUdTKDUpOyAgICAgICAgICAvKiBSX0UgKi8KICNpZmRlZiBDT05GSUdfU01QCi0JcGVyY3B1IFBUX0xPQUQgRkxBR1MoNyk7ICAgICAgICAvKiBSV0UgKi8KKwlwZXJjcHUgUFRfTE9BRCBGTEFHUyg2KTsgICAgICAgIC8qIFJXXyAqLwogI2VuZGlmCiAJaW5pdCBQVF9MT0FEIEZMQUdTKDcpOyAgICAgICAgICAvKiBSV0UgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggNGNiN2Q1ZC4uN2U1OWRjMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC0xMTM1LDExICsxMTM1LDYgQEAKIC8qIFNldHRpbmcgdXAgbWVtb3J5IGlzIGZhaXJseSBlYXN5LiAqLwogc3RhdGljIF9faW5pdCBjaGFyICpsZ3Vlc3RfbWVtb3J5X3NldHVwKHZvaWQpCiB7Ci0JLyogV2UgZG8gdGhpcyBoZXJlIGFuZCBub3QgZWFybGllciBiZWNhdXNlIGxvY2tjaGVjayB1c2VkIHRvIGJhcmYgaWYgd2UKLQkgKiBkaWQgaXQgYmVmb3JlIHN0YXJ0X2tlcm5lbCgpLiAgSSB0aGluayB3ZSBmaXhlZCB0aGF0LCBzbyBpdCdkIGJlCi0JICogbmljZSB0byBtb3ZlIGl0IGJhY2sgdG8gbGd1ZXN0X2luaXQuICBQYXRjaCB3ZWxjb21lLi4uICovCi0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNlZCk7Ci0KIAkvKgogCSAqVGhlIExpbnV4IGJvb3Rsb2FkZXIgaGVhZGVyIGNvbnRhaW5zIGFuICJlODIwIiBtZW1vcnkgbWFwOiB0aGUKIAkgKiBMYXVuY2hlciBwb3B1bGF0ZWQgdGhlIGZpcnN0IGVudHJ5IHdpdGggb3VyIG1lbW9yeSBsaW1pdC4KQEAgLTEzNjQsMTAgKzEzNTksMTMgQEAKIAogCS8qCiAJICogSWYgd2UgZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgbG9jayBkZXBlbmRlbmN5IGNoZWNrZXIgbm93LCBpdCBjcmFzaGVzCi0JICogcGFyYXZpcnRfZGlzYWJsZV9pb3NwYWNlLgorCSAqIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlciwgdGhlbiBwYXJhdmlydF9kaXNhYmxlX2lvc3BhY2UuCiAJICovCiAJbG9ja2RlcF9pbml0KCk7CiAKKwkvKiBIb29rIGluIG91ciBzcGVjaWFsIHBhbmljIGh5cGVyY2FsbCBjb2RlLiAqLworCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOworCiAJLyoKIAkgKiBUaGUgSURFIGNvZGUgc3BlbmRzIGFib3V0IDMgc2Vjb25kcyBwcm9iaW5nIGZvciBkaXNrczogaWYgd2UgcmVzZXJ2ZQogCSAqIGFsbCB0aGUgSS9PIHBvcnRzIHVwIGZyb250IGl0IGNhbid0IGdldCB0aGVtIGFuZCBzbyBkb2Vzbid0IHByb2JlLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggNzc1YTAyMC4uODI3MjhmMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgkJLyogbWF4X2xvd19wZm4JCQkqLwogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4JCS8qIF9fa3Byb2JlcywgLi4uCQkqLwogI2luY2x1ZGUgPGxpbnV4L21taW90cmFjZS5oPgkJLyoga21taW9faGFuZGxlciwgLi4uCQkqLwotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgkJLyogcGVyZl9zd2NvdW50ZXJfZXZlbnQJCSovCisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgkJLyogcGVyZl9zd19ldmVudAkJKi8KIAogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgkJCS8qIGRvdHJhcGxpbmthZ2UsIC4uLgkJKi8KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgkJLyogcGdkXyooKSwgLi4uCQkJKi8KQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJaWYgKHVubGlrZWx5KGVycm9yX2NvZGUgJiBQRl9SU1ZEKSkKIAkJcGd0YWJsZV9iYWQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CiAKLQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyZXNzKTsKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQsIGhhdmUgbm8gdXNlciBjb250ZXh0IG9yIGFyZSBydW5uaW5nCkBAIC0xMTE0LDExICsxMTE0LDExIEBACiAKIAlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikgewogCQl0c2stPm1hal9mbHQrKzsKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsCiAJCQkJICAgICByZWdzLCBhZGRyZXNzKTsKIAl9IGVsc2UgewogCQl0c2stPm1pbl9mbHQrKzsKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sIDEsIDAsCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sIDEsIDAsCiAJCQkJICAgICByZWdzLCBhZGRyZXNzKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCAzY2Q3NzExLi4zMDkzOGMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC04NCw3ICs4NCw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAlpZiAoIShwZ2RfdmFsKCpwZ2QpICYgX1BBR0VfUFJFU0VOVCkpIHsKIAkJaWYgKGFmdGVyX2Jvb3RtZW0pCi0JCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCQkJcG1kX3RhYmxlID0gKHBtZF90ICopYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwogCQllbHNlCiAJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19sb3dfcGFnZSgpOwogCQlwYXJhdmlydF9hbGxvY19wbWQoJmluaXRfbW0sIF9fcGEocG1kX3RhYmxlKSA+PiBQQUdFX1NISUZUKTsKQEAgLTExNiw3ICsxMTYsNyBAQAogI2VuZGlmCiAJCQlpZiAoIXBhZ2VfdGFibGUpCiAJCQkJcGFnZV90YWJsZSA9Ci0JCQkJKHB0ZV90ICopYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKwkJCQkocHRlX3QgKilhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAJCX0gZWxzZQogCQkJcGFnZV90YWJsZSA9IChwdGVfdCAqKWFsbG9jX2xvd19wYWdlKCk7CiAKQEAgLTg1Nyw4ICs4NTcsNiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX21lbSwga2NvcmVfdm1hbGxvYzsKLQogdm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKIHsKIAlpbnQgY29kZXNpemUsIHJlc2VydmVkcGFnZXMsIGRhdGFzaXplLCBpbml0c2l6ZTsKQEAgLTg4NiwxMyArODg0LDkgQEAKIAlkYXRhc2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwogCWluaXRzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luOwogCi0Ja2NsaXN0X2FkZCgma2NvcmVfbWVtLCBfX3ZhKDApLCBtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKTsKLQlrY2xpc3RfYWRkKCZrY29yZV92bWFsbG9jLCAodm9pZCAqKVZNQUxMT0NfU1RBUlQsCi0JCSAgIFZNQUxMT0NfRU5ELVZNQUxMT0NfU1RBUlQpOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglZGsga2VybmVsIGNvZGUsICIKIAkJCSIlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAlZGsgaW5pdCwgJWxkayBoaWdobWVtKVxuIiwKLQkJKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCisJCW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJCW51bV9waHlzcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCQljb2Rlc2l6ZSA+PiAxMCwKIAkJcmVzZXJ2ZWRwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggZWE1NmI4Yy4uNWE0Mzk4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwpAQCAtNjQ3LDggKzY0Nyw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAotc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX21lbSwga2NvcmVfdm1hbGxvYywga2NvcmVfa2VybmVsLAotCQkJIGtjb3JlX21vZHVsZXMsIGtjb3JlX3ZzeXNjYWxsOworc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX3ZzeXNjYWxsOwogCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewpAQCAtNjc3LDE3ICs2NzYsMTIgQEAKIAlpbml0c2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbjsKIAogCS8qIFJlZ2lzdGVyIG1lbW9yeSBhcmVhcyBmb3IgL3Byb2Mva2NvcmUgKi8KLQlrY2xpc3RfYWRkKCZrY29yZV9tZW0sIF9fdmEoMCksIG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOwotCWtjbGlzdF9hZGQoJmtjb3JlX3ZtYWxsb2MsICh2b2lkICopVk1BTExPQ19TVEFSVCwKLQkJICAgVk1BTExPQ19FTkQtVk1BTExPQ19TVEFSVCk7Ci0Ja2NsaXN0X2FkZCgma2NvcmVfa2VybmVsLCAmX3N0ZXh0LCBfZW5kIC0gX3N0ZXh0KTsKLQlrY2xpc3RfYWRkKCZrY29yZV9tb2R1bGVzLCAodm9pZCAqKU1PRFVMRVNfVkFERFIsIE1PRFVMRVNfTEVOKTsKIAlrY2xpc3RfYWRkKCZrY29yZV92c3lzY2FsbCwgKHZvaWQgKilWU1lTQ0FMTF9TVEFSVCwKLQkJCQkgVlNZU0NBTExfRU5EIC0gVlNZU0NBTExfU1RBUlQpOworCQkJIFZTWVNDQUxMX0VORCAtIFZTWVNDQUxMX1NUQVJULCBLQ09SRV9PVEhFUik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVsZGsga2VybmVsIGNvZGUsICIKIAkJCSAiJWxkayBhYnNlbnQsICVsZGsgcmVzZXJ2ZWQsICVsZGsgZGF0YSwgJWxkayBpbml0KVxuIiwKLQkJKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCisJCW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJCW1heF9wZm4gPDwgKFBBR0VfU0hJRlQtMTApLAogCQljb2Rlc2l6ZSA+PiAxMCwKIAkJYWJzZW50X3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYwppbmRleCA1MjhiZjk1Li44Y2MxODMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCkBAIC0yMjUsOSArMjI1LDYgQEAKIAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWlmIChkYXRhLT5iYWxhbmNlID09IDApCi0JCXJldHVybjsKLQogCWlmICh1bmxpa2VseShkYXRhLT5iYWxhbmNlICE9IDEpKSB7CiAJCWttZW1jaGVja19zaG93X2FsbCgpOwogCQlrbWVtY2hlY2tfZXJyb3Jfc2F2ZV9idWcocmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKaW5kZXggZTc3M2I2Yi4uM2Y2NmI4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jCisrKyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYwpAQCAtMSw3ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCmluZGV4IDQ4OTkyMTUuLjhlYjA1ODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKQEAgLTIzNCwxMSArMjM0LDExIEBACiAJaWYgKGVheC5zcGxpdC52ZXJzaW9uX2lkID09IDAgJiYgY3VycmVudF9jcHVfZGF0YS54ODYgPT0gNiAmJgogCQljdXJyZW50X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxNSkgewogCQllYXguc3BsaXQudmVyc2lvbl9pZCA9IDI7Ci0JCWVheC5zcGxpdC5udW1fY291bnRlcnMgPSAyOworCQllYXguc3BsaXQubnVtX2V2ZW50cyA9IDI7CiAJCWVheC5zcGxpdC5iaXRfd2lkdGggPSA0MDsKIAl9CiAKLQludW1fY291bnRlcnMgPSBlYXguc3BsaXQubnVtX2NvdW50ZXJzOworCW51bV9jb3VudGVycyA9IGVheC5zcGxpdC5udW1fZXZlbnRzOwogCiAJb3BfYXJjaF9wZXJmbW9uX3NwZWMubnVtX2NvdW50ZXJzID0gbnVtX2NvdW50ZXJzOwogCW9wX2FyY2hfcGVyZm1vbl9zcGVjLm51bV9jb250cm9scyA9IG51bV9jb3VudGVyczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKaW5kZXggYjgzNzc2MS4uN2I4ZTc1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKQEAgLTEzLDcgKzEzLDcgQEAKICNkZWZpbmUgT1BfWDg2X01PREVMX0gKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxhc20vcGVyZl9ldmVudC5oPgogCiBzdHJ1Y3Qgb3BfbXNyIHsKIAl1bnNpZ25lZCBsb25nCWFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKaW5kZXggNzEyNDQzZS4uNjAyYzE3MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCisrKyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwpAQCAtMTMsMTAgKzEzLDE0IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmlfYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKworI2RlZmluZSBQUkVGSVggIlBDSTogIgogCiAvKiBhcGVydHVyZSBpcyB1cCB0byAyNTZNQiBidXQgQklPUyBtYXkgcmVzZXJ2ZSBsZXNzICovCiAjZGVmaW5lIE1NQ09ORklHX0FQRVJfTUlOCSgyICogMTAyNCoxMDI0KQpAQCAtNDkxLDcgKzQ5NSw3IEBACiAJCSAgICAgICAodW5zaWduZWQgaW50KWNmZy0+c3RhcnRfYnVzX251bWJlciwKIAkJICAgICAgICh1bnNpZ25lZCBpbnQpY2ZnLT5lbmRfYnVzX251bWJlcik7CiAKLQkJaWYgKCFlYXJseSkKKwkJaWYgKCFlYXJseSAmJiAhYWNwaV9kaXNhYmxlZCkKIAkJCXZhbGlkID0gaXNfbW1jb25mX3Jlc2VydmVkKGlzX2FjcGlfcmVzZXJ2ZWQsIGFkZHIsIHNpemUsIGksIGNmZywgMCk7CiAKIAkJaWYgKHZhbGlkKQpAQCAtNjA2LDcgKzYxMCw3IEBACiAJfQogCiAJaWYgKCFrbm93bl9icmlkZ2UpCi0JCWFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfTUNGRywgcGNpX3BhcnNlX21jZmcpOworCQlhY3BpX3NmaV90YWJsZV9wYXJzZShBQ1BJX1NJR19NQ0ZHLCBwY2lfcGFyc2VfbWNmZyk7CiAKIAlwY2lfbW1jZmdfcmVqZWN0X2Jyb2tlbihlYXJseSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZ18zMi5jIGIvYXJjaC94ODYvcGNpL21tY29uZmlnXzMyLmMKaW5kZXggOGIyZDU2MS4uZjEwYTdlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL21tY29uZmlnXzMyLmMKKysrIGIvYXJjaC94ODYvcGNpL21tY29uZmlnXzMyLmMKQEAgLTExLDkgKzExLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogCiAvKiBBc3N1bWUgc3lzdGVtcyB3aXRoIG1vcmUgYnVzc2VzIGhhdmUgY29ycmVjdCBNQ0ZHICovCiAjZGVmaW5lIG1tY2ZnX3ZpcnRfYWRkciAoKHZvaWQgX19pb21lbSAqKSBmaXhfdG9fdmlydChGSVhfUENJRV9NQ0ZHKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Bvd2VyL2NwdS5jIGIvYXJjaC94ODYvcG93ZXIvY3B1LmMKaW5kZXggNDE3YzlmNS4uOGFhODVmMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcG93ZXIvY3B1LmMKKysrIGIvYXJjaC94ODYvcG93ZXIvY3B1LmMKQEAgLTI0MywxMCArMjQzLDYgQEAKIAogCWRvX2ZwdV9lbmQoKTsKIAltdHJyX2JwX3Jlc3RvcmUoKTsKLQotI2lmZGVmIENPTkZJR19YODZfT0xEX01DRQotCW1jaGVja19pbml0KCZib290X2NwdV9kYXRhKTsKLSNlbmRpZgogfQogCiAvKiBOZWVkZWQgYnkgYXBtLmMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA5YjkyNjIwLi5mY2E0ZGI0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC01Myw2ICs1Myw4IEBACiAjZGVmaW5lIE1BUF9MT0NLRUQJMHg4MDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCiAjZGVmaW5lIE1BUF9QT1BVTEFURQkweDEwMDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KICNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MjAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworI2RlZmluZSBNQVBfU1RBQ0sJMHg0MDAwMAkJLyogZ2l2ZSBvdXQgYW4gYWRkcmVzcyB0aGF0IGlzIGJlc3Qgc3VpdGVkIGZvciBwcm9jZXNzL3RocmVhZCBzdGFja3MgKi8KKyNkZWZpbmUgTUFQX0hVR0VUTEIJMHg4MDAwMAkJLyogY3JlYXRlIGEgaHVnZSBwYWdlIG1hcHBpbmcgKi8KIAogLyoKICAqIEZsYWdzIGZvciBtc3luYwpAQCAtNzgsNiArODAsOSBAQAogI2RlZmluZSBNQURWX0RPTlRGT1JLCTEwCQkvKiBkb24ndCBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAjZGVmaW5lIE1BRFZfRE9GT1JLCTExCQkvKiBkbyBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAKKyNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICAxMgkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxMwkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisKIC8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgTUFQX0ZJTEUJMAogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMgYi9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKaW5kZXggNDI3ZTE0Zi4uY2RiYzI3YyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vaW5pdC5jCisrKyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIAlwcmludGsoIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWxkayBrZXJuZWwgY29kZSwgJWxkayByZXNlcnZlZCwgIgogCSAgICAgICAiJWxkayBkYXRhLCAlbGRrIGluaXQgJWxkayBoaWdobWVtKVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCisJICAgICAgIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIHJhbSA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGNvZGVzaXplID4+IDEwLAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2Jsb2NrL2JzZy5jIGIvYmxvY2svYnNnLmMKaW5kZXggNWYxODRiYi4uMDY3NjMwMSAxMDA2NDQKLS0tIGEvYmxvY2svYnNnLmMKKysrIGIvYmxvY2svYnNnLmMKQEAgLTEwNjIsNyArMTA2Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2RldiBic2dfY2RldjsKIAotc3RhdGljIGNoYXIgKmJzZ19ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqYnNnX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYnNnLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCQlyZXQgPSBQVFJfRVJSKGJzZ19jbGFzcyk7CiAJCWdvdG8gZGVzdHJveV9rbWVtY2FjaGU7CiAJfQotCWJzZ19jbGFzcy0+bm9kZW5hbWUgPSBic2dfbm9kZW5hbWU7CisJYnNnX2NsYXNzLT5kZXZub2RlID0gYnNnX2Rldm5vZGU7CiAKIAlyZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXZpZCwgMCwgQlNHX01BWF9ERVZTLCAiYnNnIik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDJhZDkxZGQuLjUxN2U0MzMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtOTk4LDEyICs5OTgsMTIgQEAKIAkubmFtZQkJPSAiYmxvY2siLAogfTsKIAotc3RhdGljIGNoYXIgKmJsb2NrX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICpibG9ja19kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTsKIAotCWlmIChkaXNrLT5ub2RlbmFtZSkKLQkJcmV0dXJuIGRpc2stPm5vZGVuYW1lKGRpc2spOworCWlmIChkaXNrLT5kZXZub2RlKQorCQlyZXR1cm4gZGlzay0+ZGV2bm9kZShkaXNrLCBtb2RlKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTAxMSw3ICsxMDExLDcgQEAKIAkubmFtZQkJPSAiZGlzayIsCiAJLmdyb3VwcwkJPSBkaXNrX2F0dHJfZ3JvdXBzLAogCS5yZWxlYXNlCT0gZGlza19yZWxlYXNlLAotCS5ub2RlbmFtZQk9IGJsb2NrX25vZGVuYW1lLAorCS5kZXZub2RlCT0gYmxvY2tfZGV2bm9kZSwKIH07CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggYmM0MjA1ZC4uNmVlNTNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0xMSw2ICsxMSw3IEBACiBvYmotJChDT05GSUdfUkFQSURJTykJCSs9IHJhcGlkaW8vCiBvYmoteQkJCQkrPSB2aWRlby8KIG9iai0kKENPTkZJR19BQ1BJKQkJKz0gYWNwaS8KK29iai0kKENPTkZJR19TRkkpCQkrPSBzZmkvCiAjIFBuUCBtdXN0IGNvbWUgYWZ0ZXIgQUNQSSBzaW5jZSBpdCB3aWxsIGV2ZW50dWFsbHkgbmVlZCB0byBjaGVjayBpZiBhY3BpCiAjIHdhcyB1c2VkIGFuZCBkbyBub3RoaW5nIGlmIHNvCiBvYmotJChDT05GSUdfUE5QKQkJKz0gcG5wLwpAQCAtNDIsNiArNDMsOCBAQAogb2JqLSQoQ09ORklHX0lERSkJCSs9IGlkZS8KIG9iai0kKENPTkZJR19TQ1NJKQkJKz0gc2NzaS8KIG9iai0kKENPTkZJR19BVEEpCQkrPSBhdGEvCitvYmotJChDT05GSUdfTVREKQkJKz0gbXRkLworb2JqLSQoQ09ORklHX1NQSSkJCSs9IHNwaS8KIG9iai15CQkJCSs9IG5ldC8KIG9iai0kKENPTkZJR19BVE0pCQkrPSBhdG0vCiBvYmotJChDT05GSUdfRlVTSU9OKQkJKz0gbWVzc2FnZS8KQEAgLTUwLDggKzUzLDYgQEAKIG9iai0kKENPTkZJR19VSU8pCQkrPSB1aW8vCiBvYmoteQkJCQkrPSBjZHJvbS8KIG9iai15CQkJCSs9IGF1eGRpc3BsYXkvCi1vYmotJChDT05GSUdfTVREKQkJKz0gbXRkLwotb2JqLSQoQ09ORklHX1NQSSkJCSs9IHNwaS8KIG9iai0kKENPTkZJR19QQ0NBUkQpCQkrPSBwY21jaWEvCiBvYmotJChDT05GSUdfRElPKQkJKz0gZGlvLwogb2JqLSQoQ09ORklHX1NCVVMpCQkrPSBzYnVzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCA3ZWM3ZDg4Li5kZDg3MjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtNjAsNyArNjAsMTEgQEAKIAkgIC9wcm9jL2FjcGkvZmFkdCAoL3N5cy9maXJtd2FyZS9hY3BpL3RhYmxlcy9GQUNQKQogCSAgL3Byb2MvYWNwaS9kZWJ1Z19sYXllciAoL3N5cy9tb2R1bGUvYWNwaS9wYXJhbWV0ZXJzL2RlYnVnX2xheWVyKQogCSAgL3Byb2MvYWNwaS9kZWJ1Z19sZXZlbCAoL3N5cy9tb2R1bGUvYWNwaS9wYXJhbWV0ZXJzL2RlYnVnX2xldmVsKQotCisJICAvcHJvYy9hY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyICgvc3lzL2RldmljZXMvc3lzdGVtL2NwdS8qL2NwdWlkbGUvKikKKwkgIC9wcm9jL2FjcGkvcHJvY2Vzc29yLyovcGVyZm9ybWFuY2UgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1LyovCisJCWNwdWZyZXEvKikKKwkgIC9wcm9jL2FjcGkvcHJvY2Vzc29yLyovdGhyb3R0bGluZyAoL3N5cy9jbGFzcy90aGVybWFsLworCQljb29saW5nX2RldmljZSovKikKIAkgIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gL3Byb2MvYWNwaS8gZmlsZXMKIAkgIGFuZCBmdW5jdGlvbnMgd2hpY2ggZG8gbm90IHlldCBleGlzdCBpbiAvc3lzLgogCkBAIC04Miw2ICs4NiwxNyBAQAogCiAJICBTYXkgTiB0byBkZWxldGUgcG93ZXIgL3Byb2MvYWNwaS8gZGlyZWN0b3JpZXMgdGhhdCBoYXZlIG1vdmVkIHRvIC9zeXMvCiAKK2NvbmZpZyBBQ1BJX1BPV0VSX01FVEVSCisJdHJpc3RhdGUgIkFDUEkgNC4wIHBvd2VyIG1ldGVyIgorCWRlcGVuZHMgb24gSFdNT04KKwloZWxwCisJICBUaGlzIGRyaXZlciBleHBvc2VzIEFDUEkgNC4wIHBvd2VyIG1ldGVycyBhcyBoYXJkd2FyZSBtb25pdG9yaW5nCisJICBkZXZpY2VzLiAgU2F5IFkgKG9yIE0pIGlmIHlvdSBoYXZlIGEgY29tcHV0ZXIgd2l0aCBBQ1BJIDQuMCBmaXJtd2FyZQorCSAgYW5kIGEgcG93ZXIgbWV0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvd2VyLW1ldGVyLgorCiBjb25maWcgQUNQSV9TWVNGU19QT1dFUgogCWJvb2wgIkZ1dHVyZSBwb3dlciAvc3lzIGludGVyZmFjZSIKIAlzZWxlY3QgUE9XRVJfU1VQUExZCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggMDNhOTg1Yi4uODJjZDQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNTYsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX0FDUElfQkFUVEVSWSkJKz0gYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQUNQSV9TQlMpCQkrPSBzYnNoYy5vCiBvYmotJChDT05GSUdfQUNQSV9TQlMpCQkrPSBzYnMubworb2JqLSQoQ09ORklHX0FDUElfUE9XRVJfTUVURVIpCSs9IHBvd2VyX21ldGVyLm8KIAogIyBwcm9jZXNzb3IgaGFzIGl0cyBvd24gInByb2Nlc3Nvci4iIG1vZHVsZV9wYXJhbSBuYW1lc3BhY2UKIHByb2Nlc3Nvci15CQkJOj0gcHJvY2Vzc29yX2NvcmUubyBwcm9jZXNzb3JfdGhyb3R0bGluZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDBkZjhmY2IuLjk4Yjk2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hYy5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9BQ19DTEFTUwkJCSJhY19hZGFwdGVyIgogI2RlZmluZSBBQ1BJX0FDX0RFVklDRV9OQU1FCQkiQUMgQWRhcHRlciIKICNkZWZpbmUgQUNQSV9BQ19GSUxFX1NUQVRFCQkic3RhdGUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKaW5kZXggOWE2MjIyNC4uMjhjY2RiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwpAQCAtNTMsNyArNTMsNiBAQAogCiBzdGF0aWMgaW50IGFjcGlfbWVtb3J5X2RldmljZV9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBhY3BpX21lbW9yeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7Ci1zdGF0aWMgaW50IGFjcGlfbWVtb3J5X2RldmljZV9zdGFydChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgbWVtb3J5X2RldmljZV9pZHNbXSA9IHsKIAl7QUNQSV9NRU1PUllfREVWSUNFX0hJRCwgMH0sCkBAIC02OCw3ICs2Nyw2IEBACiAJLm9wcyA9IHsKIAkJLmFkZCA9IGFjcGlfbWVtb3J5X2RldmljZV9hZGQsCiAJCS5yZW1vdmUgPSBhY3BpX21lbW9yeV9kZXZpY2VfcmVtb3ZlLAotCQkuc3RhcnQgPSBhY3BpX21lbW9yeV9kZXZpY2Vfc3RhcnQsCiAJCX0sCiB9OwogCkBAIC00MzEsNiArNDI5LDIyIEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMgXG4iLCBhY3BpX2RldmljZV9uYW1lKGRldmljZSkpOwogCisJLyoKKwkgKiBFYXJseSBib290IGNvZGUgaGFzIHJlY29nbml6ZWQgbWVtb3J5IGFyZWEgYnkgRUZJL0U4MjAuCisJICogSWYgRFNEVCBzaG93cyB0aGVzZSBtZW1vcnkgZGV2aWNlcyBvbiBib290LCBob3RwbHVnIGlzIG5vdCBuZWNlc3NhcnkKKwkgKiBmb3IgdGhlbS4gU28sIGl0IGp1c3QgcmV0dXJucyB1bnRpbCBjb21wbGV0aW9uIG9mIHRoaXMgZHJpdmVyJ3MKKwkgKiBzdGFydCB1cC4KKwkgKi8KKwlpZiAoIWFjcGlfaG90bWVtX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWlmICghYWNwaV9tZW1vcnlfY2hlY2tfZGV2aWNlKG1lbV9kZXZpY2UpKSB7CisJCS8qIGNhbGwgYWRkX21lbW9yeSBmdW5jICovCisJCXJlc3VsdCA9IGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2UobWVtX2RldmljZSk7CisJCWlmIChyZXN1bHQpCisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkJIkVycm9yIGluIGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2VcbiIpOworCX0KIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NDgsMzIgKzQ2Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9tZW1vcnlfZGV2aWNlX3N0YXJ0IChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgYWNwaV9tZW1vcnlfZGV2aWNlICptZW1fZGV2aWNlOwotCWludCByZXN1bHQgPSAwOwotCi0JLyoKLQkgKiBFYXJseSBib290IGNvZGUgaGFzIHJlY29nbml6ZWQgbWVtb3J5IGFyZWEgYnkgRUZJL0U4MjAuCi0JICogSWYgRFNEVCBzaG93cyB0aGVzZSBtZW1vcnkgZGV2aWNlcyBvbiBib290LCBob3RwbHVnIGlzIG5vdCBuZWNlc3NhcnkKLQkgKiBmb3IgdGhlbS4gU28sIGl0IGp1c3QgcmV0dXJucyB1bnRpbCBjb21wbGV0aW9uIG9mIHRoaXMgZHJpdmVyJ3MKLQkgKiBzdGFydCB1cC4KLQkgKi8KLQlpZiAoIWFjcGlfaG90bWVtX2luaXRpYWxpemVkKQotCQlyZXR1cm4gMDsKLQotCW1lbV9kZXZpY2UgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0KLQlpZiAoIWFjcGlfbWVtb3J5X2NoZWNrX2RldmljZShtZW1fZGV2aWNlKSkgewotCQkvKiBjYWxsIGFkZF9tZW1vcnkgZnVuYyAqLwotCQlyZXN1bHQgPSBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlKG1lbV9kZXZpY2UpOwotCQlpZiAocmVzdWx0KQotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAotCQkJCSJFcnJvciBpbiBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlXG4iKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQogLyoKICAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBmb3IgbWVtb3J5IGRldmljZQogICovCkBAIC00ODEsMjYgKzQ2OSwyMyBAQAogewogCWNoYXIgKmhhcmR3YXJlX2lkOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwogCi0KLQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIHN0YXR1czsKIAotCWluZm8gPSBidWZmZXIucG9pbnRlcjsKIAlpZiAoIShpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSkgewotCQlrZnJlZShidWZmZXIucG9pbnRlcik7CisJCWtmcmVlKGluZm8pOwogCQlyZXR1cm4gQUVfRVJST1I7CiAJfQogCi0JaGFyZHdhcmVfaWQgPSBpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZTsKKwloYXJkd2FyZV9pZCA9IGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZzsKIAlpZiAoKGhhcmR3YXJlX2lkID09IE5VTEwpIHx8CiAJICAgIChzdHJjbXAoaGFyZHdhcmVfaWQsIEFDUElfTUVNT1JZX0RFVklDRV9ISUQpKSkKIAkJc3RhdHVzID0gQUVfRVJST1I7CiAKLQlrZnJlZShidWZmZXIucG9pbnRlcik7CisJa2ZyZWUoaW5mbyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUKaW5kZXggNzJhYzI4ZC4uZTc5NzNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBhY3BpLXkgKz0gbnNhY2Nlc3MubyAgbnNsb2FkLm8gICAgbnNzZWFyY2gubyAgbnN4ZmV2YWwubyBcCiAJIG5zYWxsb2MubyAgIG5zZXZhbC5vICAgIG5zbmFtZXMubyAgIG5zdXRpbHMubyAgIG5zeGZuYW1lLm8gXAogCSBuc2R1bXAubyAgICBuc2luaXQubyAgICBuc29iamVjdC5vICBuc3dhbGsubyAgICBuc3hmb2JqLm8gIFwKLQkgbnNwYXJzZS5vICAgbnNwcmVkZWYubworCSBuc3BhcnNlLm8gICBuc3ByZWRlZi5vICBuc3JlcGFpci5vCiAKIGFjcGktJChBQ1BJX0ZVVFVSRV9VU0FHRSkgKz0gbnNkdW1wZHYubwogCkBAIC00NCw0ICs0NCw0IEBACiAKIGFjcGkteSArPSB1dGFsbG9jLm8gdXRkZWJ1Zy5vIHV0ZXZhbC5vIHV0aW5pdC5vIHV0bWlzYy5vIHV0eGZhY2UubyBcCiAJCXV0Y29weS5vIHV0ZGVsZXRlLm8gdXRnbG9iYWwubyB1dG1hdGgubyB1dG9iamVjdC5vIFwKLQkJdXRzdGF0ZS5vIHV0bXV0ZXgubyB1dG9iamVjdC5vIHV0cmVzcmMubyB1dGxvY2subworCQl1dHN0YXRlLm8gdXRtdXRleC5vIHV0b2JqZWN0Lm8gdXRyZXNyYy5vIHV0bG9jay5vIHV0aWRzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAppbmRleCBlNjc3N2ZiLi44ZTY3OWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCkBAIC0xODMsNyArMTgzLDcgQEAKIAogLyogT3BlcmF0aW9uIHJlZ2lvbnMgKi8KIAotI2RlZmluZSBBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlMgICAgIDgKKyNkZWZpbmUgQUNQSV9OVU1fUFJFREVGSU5FRF9SRUdJT05TICAgICA5CiAjZGVmaW5lIEFDUElfVVNFUl9SRUdJT05fQkVHSU4gICAgICAgICAgMHg4MAogCiAvKiBNYXhpbXVtIHNwYWNlX2lkcyBmb3IgT3BlcmF0aW9uIFJlZ2lvbnMgKi8KQEAgLTE5OSw5ICsxOTksMTUgQEAKICNkZWZpbmUgQUNQSV9SU0RQX0NIRUNLU1VNX0xFTkdUSCAgICAgICAyMAogI2RlZmluZSBBQ1BJX1JTRFBfWENIRUNLU1VNX0xFTkdUSCAgICAgIDM2CiAKLS8qIFNNQnVzIGJpZGlyZWN0aW9uYWwgYnVmZmVyIHNpemUgKi8KKy8qIFNNQnVzIGFuZCBJUE1JIGJpZGlyZWN0aW9uYWwgYnVmZmVyIHNpemUgKi8KIAogI2RlZmluZSBBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFICAgICAgICAgIDM0CisjZGVmaW5lIEFDUElfSVBNSV9CVUZGRVJfU0laRSAgICAgICAgICAgNjYKKworLyogX3N4X2QgYW5kIF9zeF93IGNvbnRyb2wgbWV0aG9kcyAqLworCisjZGVmaW5lIEFDUElfTlVNX3N4X2RfTUVUSE9EUyAgICAgICAgICAgNAorI2RlZmluZSBBQ1BJX05VTV9zeF93X01FVEhPRFMgICAgICAgICAgIDUKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkZWJ1Zy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKaW5kZXggNjJjNTlkZi4uYTRmYjAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKQEAgLTE1NCwxMCArMTU0LDYgQEAKIGFjcGlfZGJfZGlzcGxheV9hcmd1bWVudF9vYmplY3QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCiAJCQkJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSk7CiAKLXZvaWQgYWNwaV9kYl9jaGVja19wcmVkZWZpbmVkX25hbWVzKHZvaWQpOwotCi12b2lkIGFjcGlfZGJfYmF0Y2hfZXhlY3V0ZSh2b2lkKTsKLQogLyoKICAqIGRiZXhlYyAtIGRlYnVnZ2VyIGNvbnRyb2wgbWV0aG9kIGV4ZWN1dGlvbgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKaW5kZXggM2Q4NzM2Mi4uMjliYTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaApAQCAtNTgsNiArNTgsMTAgQEAKICNkZWZpbmUgQUNQSV9JTklUX0dMT0JBTChhLGIpIGEKICNlbmRpZgogCisjaWZkZWYgREVGSU5FX0FDUElfR0xPQkFMUworCisvKiBQdWJsaWMgZ2xvYmFscywgYXZhaWxhYmxlIGZyb20gb3V0c2lkZSBBQ1BJQ0Egc3Vic3lzdGVtICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFJ1bnRpbWUgY29uZmlndXJhdGlvbiAoc3RhdGljIGRlZmF1bHRzIHRoYXQgY2FuIGJlIG92ZXJyaWRlbiBhdCBydW50aW1lKQpAQCAtNzgsNyArODIsNyBAQAogICogNSkgQWxsb3cgdW5yZXNvbHZlZCByZWZlcmVuY2VzIChpbnZhbGlkIHRhcmdldCBuYW1lKSBpbiBwYWNrYWdlIG9iamVjdHMKICAqIDYpIEVuYWJsZSB3YXJuaW5nIG1lc3NhZ2VzIGZvciBiZWhhdmlvciB0aGF0IGlzIG5vdCBBQ1BJIHNwZWMgY29tcGxpYW50CiAgKi8KLUFDUElfRVhURVJOIHU4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfZW5hYmxlX2ludGVycHJldGVyX3NsYWNrLCBGQUxTRSk7Cit1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX2VuYWJsZV9pbnRlcnByZXRlcl9zbGFjaywgRkFMU0UpOwogCiAvKgogICogQXV0b21hdGljYWxseSBzZXJpYWxpemUgQUxMIGNvbnRyb2wgbWV0aG9kcz8gRGVmYXVsdCBpcyBGQUxTRSwgbWVhbmluZwpAQCAtODYsMjcgKzkwLDM2IEBACiAgKiBPbmx5IGNoYW5nZSB0aGlzIGlmIHRoZSBBU0wgY29kZSBpcyBwb29ybHkgd3JpdHRlbiBhbmQgY2Fubm90IGhhbmRsZQogICogcmVlbnRyYW5jeSBldmVuIHRob3VnaCBtZXRob2RzIGFyZSBtYXJrZWQgIk5vdFNlcmlhbGl6ZWQiLgogICovCi1BQ1BJX0VYVEVSTiB1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX2FsbF9tZXRob2RzX3NlcmlhbGl6ZWQsIEZBTFNFKTsKK3U4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfYWxsX21ldGhvZHNfc2VyaWFsaXplZCwgRkFMU0UpOwogCiAvKgogICogQ3JlYXRlIHRoZSBwcmVkZWZpbmVkIF9PU0kgbWV0aG9kIGluIHRoZSBuYW1lc3BhY2U/IERlZmF1bHQgaXMgVFJVRQogICogYmVjYXVzZSBBQ1BJIENBIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBvdGhlciBBQ1BJIGltcGxlbWVudGF0aW9ucy4KICAqIENoYW5naW5nIHRoaXMgd2lsbCByZXZlcnQgQUNQSSBDQSAoYW5kIG1hY2hpbmUgQVNMKSB0byBwcmUtT1NJIGJlaGF2aW9yLgogICovCi1BQ1BJX0VYVEVSTiB1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX2NyZWF0ZV9vc2lfbWV0aG9kLCBUUlVFKTsKK3U4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfY3JlYXRlX29zaV9tZXRob2QsIFRSVUUpOwogCiAvKgogICogRGlzYWJsZSB3YWtldXAgR1BFcyBkdXJpbmcgcnVudGltZT8gRGVmYXVsdCBpcyBUUlVFIGJlY2F1c2UgV0FLRSBhbmQKICAqIFJVTlRJTUUgR1BFcyBzaG91bGQgbmV2ZXIgYmUgc2hhcmVkLCBhbmQgV0FLRSBHUEVzIHNob3VsZCB0eXBpY2FsbHkgb25seQogICogYmUgZW5hYmxlZCBqdXN0IGJlZm9yZSBnb2luZyB0byBzbGVlcC4KICAqLwotQUNQSV9FWFRFUk4gdTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQsIFRSVUUpOwordTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQsIFRSVUUpOwogCiAvKgogICogT3B0aW9uYWxseSB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBBQ1BJIHJlZ2lzdGVyIHdpZHRocy4gU2V0IHRoaXMgdG8KICAqIFRSVUUgdG8gdXNlIHRoZSBkZWZhdWx0cywgaWYgYW4gRkFEVCBjb250YWlucyBpbmNvcnJlY3Qgd2lkdGhzL2xlbmd0aHMuCiAgKi8KLUFDUElfRVhURVJOIHU4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfdXNlX2RlZmF1bHRfcmVnaXN0ZXJfd2lkdGhzLCBUUlVFKTsKK3U4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfdXNlX2RlZmF1bHRfcmVnaXN0ZXJfd2lkdGhzLCBUUlVFKTsKKworLyogYWNwaV9nYmxfRkFEVCBpcyBhIGxvY2FsIGNvcHkgb2YgdGhlIEZBRFQsIGNvbnZlcnRlZCB0byBhIGNvbW1vbiBmb3JtYXQuICovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgYWNwaV9nYmxfRkFEVDsKK3UzMiBhY3BpX2N1cnJlbnRfZ3BlX2NvdW50OwordTMyIGFjcGlfZ2JsX3RyYWNlX2ZsYWdzOworYWNwaV9uYW1lIGFjcGlfZ2JsX3RyYWNlX21ldGhvZF9uYW1lOworCisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTE0LDExICsxMjcsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBSdW50aW1lIGNvbmZpZ3VyYXRpb24gb2YgZGVidWcgcHJpbnQgbGV2ZWxzICovCi0KLWV4dGVybiB1MzIgYWNwaV9kYmdfbGV2ZWw7Ci1leHRlcm4gdTMyIGFjcGlfZGJnX2xheWVyOwotCiAvKiBQcm9jZWR1cmUgbmVzdGluZyBsZXZlbCBmb3IgZGVidWcgb3V0cHV0ICovCiAKIGV4dGVybiB1MzIgYWNwaV9nYmxfbmVzdGluZ19sZXZlbDsKQEAgLTEyNywxMCArMTM1LDggQEAKIAogQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX29yaWdpbmFsX2RiZ19sZXZlbDsKIEFDUElfRVhURVJOIHUzMiBhY3BpX2dibF9vcmlnaW5hbF9kYmdfbGF5ZXI7Ci1BQ1BJX0VYVEVSTiBhY3BpX25hbWUgYWNwaV9nYmxfdHJhY2VfbWV0aG9kX25hbWU7CiBBQ1BJX0VYVEVSTiB1MzIgYWNwaV9nYmxfdHJhY2VfZGJnX2xldmVsOwogQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX3RyYWNlX2RiZ19sYXllcjsKLUFDUElfRVhURVJOIHUzMiBhY3BpX2dibF90cmFjZV9mbGFnczsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQyLDEwICsxNDgsOCBAQAogICogYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0IGlzIHRoZSBtYXN0ZXIgbGlzdCBvZiBBQ1BJIHRhYmxlcyBmb3VuZCBpbiB0aGUKICAqIFJTRFQvWFNEVC4KICAqCi0gKiBhY3BpX2dibF9GQURUIGlzIGEgbG9jYWwgY29weSBvZiB0aGUgRkFEVCwgY29udmVydGVkIHRvIGEgY29tbW9uIGZvcm1hdC4KICAqLwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfaW50ZXJuYWxfcnNkdCBhY3BpX2dibF9yb290X3RhYmxlX2xpc3Q7Ci1BQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0IGFjcGlfZ2JsX0ZBRFQ7CiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV90YWJsZV9mYWNzICphY3BpX2dibF9GQUNTOwogCiAvKiBUaGVzZSBhZGRyZXNzZXMgYXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgRkFEVCBFdmVudCBCbG9jayBhZGRyZXNzZXMgKi8KQEAgLTI2MSw3ICsyNjUsOCBAQAogZXh0ZXJuIHU4IGFjcGlfZ2JsX3NodXRkb3duOwogZXh0ZXJuIHUzMiBhY3BpX2dibF9zdGFydHVwX2ZsYWdzOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3NsZWVwX3N0YXRlX25hbWVzW0FDUElfU19TVEFURV9DT1VOVF07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfaGlnaGVzdF9kc3RhdGVfbmFtZXNbNF07CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbG93ZXN0X2RzdGF0ZV9uYW1lc1tBQ1BJX05VTV9zeF93X01FVEhPRFNdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2hpZ2hlc3RfZHN0YXRlX25hbWVzW0FDUElfTlVNX3N4X2RfTUVUSE9EU107CiBleHRlcm4gY29uc3Qgc3RydWN0IGFjcGlfb3Bjb2RlX2luZm8gYWNwaV9nYmxfYW1sX29wX2luZm9bQU1MX05VTV9PUENPREVTXTsKIGV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9yZWdpb25fdHlwZXNbQUNQSV9OVU1fUFJFREVGSU5FRF9SRUdJT05TXTsKIApAQCAtMjkwLDYgKzI5NSw3IEBACiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSBhY3BpX2dibF9yb290X25vZGVfc3RydWN0OwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfZ2JsX3Jvb3Rfbm9kZTsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX2dibF9mYWR0X2dwZV9kZXZpY2U7CitBQ1BJX0VYVEVSTiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphY3BpX2dibF9tb2R1bGVfY29kZV9saXN0OwogCiBleHRlcm4gY29uc3QgdTggYWNwaV9nYmxfbnNfcHJvcGVydGllc1tBQ1BJX05VTV9OU19UWVBFU107CiBleHRlcm4gY29uc3Qgc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9uYW1lcwpAQCAtMzQwLDcgKzM0Niw2IEBACiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqYWNwaV9nYmxfZ3BlX3hydXB0X2xpc3RfaGVhZDsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvCiAqYWNwaV9nYmxfZ3BlX2ZhZHRfYmxvY2tzW0FDUElfTUFYX0dQRV9CTE9DS1NdOwotQUNQSV9FWFRFUk4gdTMyIGFjcGlfY3VycmVudF9ncGVfY291bnQ7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNod2FyZS5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKaW5kZXggNGFmYTNkOC4uMzYxOTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKQEAgLTYyLDYgKzYyLDE0IEBACiAvKgogICogaHdyZWdzIC0gQUNQSSBSZWdpc3RlciBJL08KICAqLworYWNwaV9zdGF0dXMKK2FjcGlfaHdfdmFsaWRhdGVfcmVnaXN0ZXIoc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWcsCisJCQkgIHU4IG1heF9iaXRfd2lkdGgsIHU2NCAqYWRkcmVzcyk7CisKK2FjcGlfc3RhdHVzIGFjcGlfaHdfcmVhZCh1MzIgKnZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZyk7CisKK2FjcGlfc3RhdHVzIGFjcGlfaHdfd3JpdGUodTMyIHZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZyk7CisKIHN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICphY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyh1MzIgcmVnaXN0ZXJfaWQpOwogCiBhY3BpX3N0YXR1cyBhY3BpX2h3X3dyaXRlX3BtMV9jb250cm9sKHUzMiBwbTFhX2NvbnRyb2wsIHUzMiBwbTFiX2NvbnRyb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2ludGVycC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2ludGVycC5oCmluZGV4IGU4ZGI3YTMuLjVkYjlmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmgKQEAgLTQ2MSw5ICs0NjEsOSBAQAogCiB2b2lkIGFjcGlfZXhfcmVsZWFzZV9nbG9iYWxfbG9jayh1MzIgcnVsZSk7CiAKLXZvaWQgYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZyh1MzIgbnVtZXJpY19pZCwgY2hhciAqb3V0X3N0cmluZyk7Cit2b2lkIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoY2hhciAqZGVzdCwgYWNwaV9pbnRlZ2VyIGNvbXByZXNzZWRfaWQpOwogCi12b2lkIGFjcGlfZXhfdW5zaWduZWRfaW50ZWdlcl90b19zdHJpbmcoYWNwaV9pbnRlZ2VyIHZhbHVlLCBjaGFyICpvdXRfc3RyaW5nKTsKK3ZvaWQgYWNwaV9leF9pbnRlZ2VyX3RvX3N0cmluZyhjaGFyICpkZXN0LCBhY3BpX2ludGVnZXIgdmFsdWUpOwogCiAvKgogICogZXhyZWdpb24gLSBkZWZhdWx0IG9wX3JlZ2lvbiBoYW5kbGVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAppbmRleCBlZTk4NmVkLi44MWU2NGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtMzY5LDYgKzM2OSwxOSBAQAogCXN0cnVjdCBhY3BpX3BhY2thZ2VfaW5mbzMgcmV0X2luZm8zOwogfTsKIAorLyogRGF0YSBibG9jayB1c2VkIGR1cmluZyBvYmplY3QgdmFsaWRhdGlvbiAqLworCitzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgeworCWNoYXIgKnBhdGhuYW1lOworCWNvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvICpwcmVkZWZpbmVkOworCXUzMiBmbGFnczsKKwl1OCBub2RlX2ZsYWdzOworfTsKKworLyogRGVmaW5lcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX09CSkVDVF9SRVBBSVJFRCAgICAxCisKIC8qCiAgKiBCaXRtYXBwZWQgcmV0dXJuIHZhbHVlIHR5cGVzCiAgKiBOb3RlOiB0aGUgYWN0dWFsIGRhdGEgdHlwZXMgbXVzdCBiZSBjb250aWd1b3VzLCBhIGxvb3AgaW4gbnNwcmVkZWYuYwpAQCAtODg1LDYgKzg5OCw5IEBACiAjZGVmaW5lIEFDUElfT1NJX1dJTl9YUF9TUDIgICAgICAgICAgICAgMHgwNQogI2RlZmluZSBBQ1BJX09TSV9XSU5TUlZfMjAwM19TUDEgICAgICAgIDB4MDYKICNkZWZpbmUgQUNQSV9PU0lfV0lOX1ZJU1RBICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIEFDUElfT1NJX1dJTlNSVl8yMDA4ICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBQ1BJX09TSV9XSU5fVklTVEFfU1AxICAgICAgICAgIDB4MDkKKyNkZWZpbmUgQUNQSV9PU0lfV0lOXzcgICAgICAgICAgICAgICAgICAweDBBCiAKICNkZWZpbmUgQUNQSV9BTFdBWVNfSUxMRUdBTCAgICAgICAgICAgICAweDAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaAppbmRleCA5MWFjN2Q3Li4zYWNkOWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCkBAIC0zNDAsNiArMzQwLDcgQEAKICAqLwogI2RlZmluZSBBQ1BJX0VSUk9SX05BTUVTUEFDRShzLCBlKSAgICAgIGFjcGlfbnNfcmVwb3J0X2Vycm9yIChBRV9JTkZPLCBzLCBlKTsKICNkZWZpbmUgQUNQSV9FUlJPUl9NRVRIT0QocywgbiwgcCwgZSkgICBhY3BpX25zX3JlcG9ydF9tZXRob2RfZXJyb3IgKEFFX0lORk8sIHMsIG4sIHAsIGUpOworI2RlZmluZSBBQ1BJX1dBUk5fUFJFREVGSU5FRChwbGlzdCkgICAgIGFjcGlfdXRfcHJlZGVmaW5lZF93YXJuaW5nIHBsaXN0CiAKICNlbHNlCiAKQEAgLTM0Nyw2ICszNDgsNyBAQAogCiAjZGVmaW5lIEFDUElfRVJST1JfTkFNRVNQQUNFKHMsIGUpCiAjZGVmaW5lIEFDUElfRVJST1JfTUVUSE9EKHMsIG4sIHAsIGUpCisjZGVmaW5lIEFDUElfV0FSTl9QUkVERUZJTkVEKHBsaXN0KQogI2VuZGlmCQkvKiBBQ1BJX05PX0VSUk9SX01FU1NBR0VTICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKaW5kZXggOTRjZGMyYi4uMDlhMjc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaApAQCAtNzMsNiArNzMsMTQgQEAKICNkZWZpbmUgQUNQSV9OU19XQUxLX1VOTE9DSyAgICAgICAgIDB4MDEKICNkZWZpbmUgQUNQSV9OU19XQUxLX1RFTVBfTk9ERVMgICAgIDB4MDIKIAorLyogT2JqZWN0IGlzIG5vdCBhIHBhY2thZ2UgZWxlbWVudCAqLworCisjZGVmaW5lIEFDUElfTk9UX1BBQ0tBR0VfRUxFTUVOVCAgICBBQ1BJX1VJTlQzMl9NQVgKKworLyogQWx3YXlzIGVtaXQgd2FybmluZyBtZXNzYWdlLCBub3QgZGVwZW5kZW50IG9uIG5vZGUgZmxhZ3MgKi8KKworI2RlZmluZSBBQ1BJX1dBUk5fQUxXQVlTICAgICAgICAgICAgMAorCiAvKgogICogbnNpbml0IC0gTmFtZXNwYWNlIGluaXRpYWxpemF0aW9uCiAgKi8KQEAgLTE0NCw2ICsxNTIsOCBAQAogCiB2b2lkIGFjcGlfbnNfZGVsZXRlX25vZGUoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUpOwogCit2b2lkIGFjcGlfbnNfcmVtb3ZlX25vZGUoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUpOworCiB2b2lkCiBhY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2Vfc3VidHJlZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGFyZW50X2hhbmRsZSk7CiAKQEAgLTE4Niw2ICsxOTYsOCBAQAogICovCiBhY3BpX3N0YXR1cyBhY3BpX25zX2V2YWx1YXRlKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pOwogCit2b2lkIGFjcGlfbnNfZXhlY19tb2R1bGVfY29kZV9saXN0KHZvaWQpOworCiAvKgogICogbnNwcmVkZWYgLSBTdXBwb3J0IGZvciBwcmVkZWZpbmVkL3Jlc2VydmVkIG5hbWVzCiAgKi8KQEAgLTI2MCw2ICsyNzIsMTkgQEAKIAkJCSAgYWNwaV9vYmplY3RfaGFuZGxlciBoYW5kbGVyLCB2b2lkICoqZGF0YSk7CiAKIC8qCisgKiBuc3JlcGFpciAtIHJldHVybiBvYmplY3QgcmVwYWlyIGZvciBwcmVkZWZpbmVkIG1ldGhvZHMvb2JqZWN0cworICovCithY3BpX3N0YXR1cworYWNwaV9uc19yZXBhaXJfb2JqZWN0KHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKKwkJICAgICAgdTMyIGV4cGVjdGVkX2J0eXBlcywKKwkJICAgICAgdTMyIHBhY2thZ2VfaW5kZXgsCisJCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0cik7CisKK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9wYWNrYWdlX2xpc3Qoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipvYmpfZGVzY19wdHIpOworCisvKgogICogbnNzZWFyY2ggLSBOYW1lc3BhY2Ugc2VhcmNoaW5nIGFuZCBlbnRyeQogICovCiBhY3BpX3N0YXR1cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCmluZGV4IGViNmYwMzguLmIzOWQ2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKQEAgLTk4LDYgKzk4LDcgQEAKICNkZWZpbmUgQU9QT0JKX1NFVFVQX0NPTVBMRVRFICAgICAgIDB4MTAKICNkZWZpbmUgQU9QT0JKX1NJTkdMRV9EQVRVTSAgICAgICAgIDB4MjAKICNkZWZpbmUgQU9QT0JKX0lOVkFMSUQgICAgICAgICAgICAgIDB4NDAJLyogVXNlZCBpZiBob3N0IE9TIHdvbid0IGFsbG93IGFuIG9wX3JlZ2lvbiBhZGRyZXNzICovCisjZGVmaW5lIEFPUE9CSl9NT0RVTEVfTEVWRUwgICAgICAgICAweDgwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcGFyc2VyLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcGFyc2VyLmgKaW5kZXggMjNlZTBmYi4uMjI4ODFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaApAQCAtNjIsNiArNjIsOCBAQAogI2RlZmluZSBBQ1BJX1BBUlNFX0RFRkVSUkVEX09QICAgICAgICAgIDB4MDEwMAogI2RlZmluZSBBQ1BJX1BBUlNFX0RJU0FTU0VNQkxFICAgICAgICAgIDB4MDIwMAogCisjZGVmaW5lIEFDUElfUEFSU0VfTU9EVUxFX0xFVkVMICAgICAgICAgMHgwNDAwCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBQYXJzZXIgaW50ZXJmYWNlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCmluZGV4IDYzZjY1NmEuLmNkODBkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKQEAgLTY0LDggKzY0LDggQEAKICAqICAgICAgKFVzZWQgZm9yIF9QUlcpCiAgKgogICoKLSAqIDIpIFBUWVBFMiBwYWNrYWdlcyBjb250YWluIGEgdmFyaWFibGUgbnVtYmVyIG9mIHN1Yi1wYWNrYWdlcy4gRWFjaCBvZiB0aGUKLSAqICAgIGRpZmZlcmVudCB0eXBlcyBkZXNjcmliZSB0aGUgY29udGVudHMgb2YgZWFjaCBvZiB0aGUgc3ViLXBhY2thZ2VzLgorICogMikgUFRZUEUyIHBhY2thZ2VzIGNvbnRhaW4gYSBWYXJpYWJsZS1sZW5ndGggbnVtYmVyIG9mIHN1Yi1wYWNrYWdlcy4gRWFjaAorICogICAgb2YgdGhlIGRpZmZlcmVudCB0eXBlcyBkZXNjcmliZSB0aGUgY29udGVudHMgb2YgZWFjaCBvZiB0aGUgc3ViLXBhY2thZ2VzLgogICoKICAqIEFDUElfUFRZUEUyOiBFYWNoIHN1YnBhY2thZ2UgY29udGFpbnMgMSBvciAyIG9iamVjdCB0eXBlczoKICAqICAgICAgb2JqZWN0IHR5cGUKQEAgLTkxLDYgKzkxLDkgQEAKICAqIEFDUElfUFRZUEUyX01JTjogRWFjaCBzdWJwYWNrYWdlIGhhcyBhIHZhcmlhYmxlIGJ1dCBtaW5pbXVtIGxlbmd0aAogICogICAgICAoVXNlZCBmb3IgX0hQWCkKICAqCisgKiBBQ1BJX1BUWVBFMl9SRVZfRklYRUQ6IFJldmlzaW9uIGF0IHN0YXJ0LCBlYWNoIHN1YnBhY2thZ2UgaXMgRml4ZWQtbGVuZ3RoCisgKiAgICAgIChVc2VkIGZvciBfQVJULCBfRlBTKQorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogZW51bSBhY3BpX3JldHVybl9wYWNrYWdlX3R5cGVzIHsKQEAgLTEwMSw5ICsxMDQsMTEgQEAKIAlBQ1BJX1BUWVBFMl9DT1VOVCA9IDUsCiAJQUNQSV9QVFlQRTJfUEtHX0NPVU5UID0gNiwKIAlBQ1BJX1BUWVBFMl9GSVhFRCA9IDcsCi0JQUNQSV9QVFlQRTJfTUlOID0gOAorCUFDUElfUFRZUEUyX01JTiA9IDgsCisJQUNQSV9QVFlQRTJfUkVWX0ZJWEVEID0gOQogfTsKIAorI2lmZGVmIEFDUElfQ1JFQVRFX1BSRURFRklORURfVEFCTEUKIC8qCiAgKiBQcmVkZWZpbmVkIG1ldGhvZC9vYmplY3QgaW5mb3JtYXRpb24gdGFibGUuCiAgKgpAQCAtMTM2LDIzOSArMTQxLDM4NCBAQAogICogaXMgc2F2ZWQgaGVyZSAocmF0aGVyIHRoYW4gaW4gYSBzZXBhcmF0ZSB0YWJsZSkgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlCiAgKiBvdmVyYWxsIHNpemUgb2YgdGhlIHN0b3JlZCBkYXRhLgogICovCi1zdGF0aWMgY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gcHJlZGVmaW5lZF9uYW1lc1tdID0gewotCXsuaW5mbyA9IHsiX0FDMCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDMSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDMiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDMyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDNCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDNSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDNiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDNyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDOCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FDOSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FEUiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0FMMCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfQUwxIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9BTDIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX0FMMyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfQUw0IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9BTDUiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX0FMNiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfQUw3IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9BTDgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX0FMOSIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfQUxDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUxJIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUxQIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUxSIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfSU5URUdFUiwgMiwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCAyIChJbnRzKSAqLwotCXsuaW5mbyA9IHsiX0FMVCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0JCTiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0JDTCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChJbnRzKSAqLwotCXsuaW5mbyA9IHsiX0JDTSIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9CRE4iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9CRlMiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfQklGIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwKLQkJCQkJICA5LAotCQkJCQkgIEFDUElfUlRZUEVfU1RSSU5HIHwgQUNQSV9SVFlQRV9CVUZGRVIsIDQsIDB9fSwJLyogZml4ZWQgKDkgSW50KSwoNCBTdHIpICovCi0Jey5pbmZvID0geyJfQkxUIiwgMywgMH19LAotCXsuaW5mbyA9IHsiX0JNQyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9CTUQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwLCAwLCAwfX0sCS8qIGZpeGVkICg1IEludCkgKi8KLQl7LmluZm8gPSB7Il9CUUMiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9CU1QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA0LCAwLCAwLCAwfX0sCS8qIGZpeGVkICg0IEludCkgKi8KLQl7LmluZm8gPSB7Il9CVE0iLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9CVFAiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfQ0JBIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIHNlZSBQQ0kgZmlybXdhcmUgc3BlYyAzLjAgKi8KLQl7LmluZm8gPSB7Il9DSUQiLCAwLAotCSBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklORyB8IEFDUElfUlRZUEVfUEFDS0FHRX19LAotCXsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklORywgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoSW50cy9TdHJzKSAqLwotCXsuaW5mbyA9IHsiX0NSUyIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfQ1JUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQ1NEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTJfQ09VTlQsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoMSBJbnQobiksIG4tMSBJbnQpICovCi0Jey5pbmZvID0geyJfQ1NUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTJfUEtHX0NPVU5ULAotCQkJCQkgIEFDUElfUlRZUEVfQlVGRkVSLCAxLAotCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiwgMywgMH19LAkvKiB2YXJpYWJsZSAoMSBJbnQobiksIG4gUGtnICgxIEJ1Zi8zIEludCkgKi8KLQl7LmluZm8gPSB7Il9EQ0siLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9EQ1MiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9EREMiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX0JVRkZFUn19LAotCXsuaW5mbyA9IHsiX0RETiIsIDAsIEFDUElfUlRZUEVfU1RSSU5HfX0sCi0Jey5pbmZvID0geyJfREdTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfRElTIiwgMCwgMH19LAotCXsuaW5mbyA9IHsiX0RNQSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfRE9EIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKEludHMpICovCi0Jey5pbmZvID0geyJfRE9TIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0RTTSIsIDQsIEFDUElfUlRZUEVfQUxMfX0sCS8qIE11c3QgcmV0dXJuIGEgdHlwZSwgYnV0IGl0IGNhbiBiZSBvZiBhbnkgdHlwZSAqLwotCXsuaW5mbyA9IHsiX0RTUyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9EU1ciLCAzLCAwfX0sCi0Jey5pbmZvID0geyJfRUNfIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfRURMIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9FSjAiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfRUoxIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0VKMiIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9FSjMiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfRUo0IiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0VKRCIsIDAsIEFDUElfUlRZUEVfU1RSSU5HfX0sCi0Jey5pbmZvID0geyJfRkRFIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKLQl7LmluZm8gPSB7Il9GREkiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxNiwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMTYgSW50KSAqLwotCXsuaW5mbyA9IHsiX0ZETSIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9GSVgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoSW50cykgKi8KLQl7LmluZm8gPSB7Il9HTEsiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9HUEQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9HUEUiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwJLyogX0dQRSBtZXRob2QsIG5vdCBfR1BFIHNjb3BlICovCi0Jey5pbmZvID0geyJfR1NCIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfR1RGIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKLQl7LmluZm8gPSB7Il9HVE0iLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAotCXsuaW5mbyA9IHsiX0dUUyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9ISUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklOR319LAotCXsuaW5mbyA9IHsiX0hPVCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0hQUCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDQgSW50KSAqLworc3RhdGljIGNvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvIHByZWRlZmluZWRfbmFtZXNbXSA9Cit7CisJe3siX0FDMCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BQzEiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUMyIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FDMyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BQzQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUM1IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FDNiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BQzciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUM4IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FDOSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BRFIiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUwwIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUwxIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUwyIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUwzIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUw0IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUw1IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUw2IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUw3IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUw4IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUw5IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQUxDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FMSSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BTFAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUxSIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCAyIChJbnRzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAyLDB9LCAwLDB9fSwKKworCXt7Il9BTFQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQVJUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIFZhcmlhYmxlLWxlbmd0aCAoMSBJbnQocmV2KSwgbiBQa2cgKDIgUmVmLzExIEludCkgKi8KKwl7e3tBQ1BJX1BUWVBFMl9SRVZfRklYRUQsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAyLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9LAorCSAgMTEsIDB9fSwKKworCXt7Il9CQk4iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQkNMIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoSW50cykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsMH0sIDAsMH19LAorCisJe3siX0JDTSIsIDEsIDB9fSwKKwl7eyJfQkNUIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0JETiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9CRlMiLCAxLCAwfX0sCisJe3siX0JJRiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDkgSW50KSwoNCBTdHIpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDksIEFDUElfUlRZUEVfU1RSSU5HfSwgNCwwfX0sCisKKwl7eyJfQklYIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIEZpeGVkLWxlbmd0aCAoMTYgSW50KSwoNCBTdHIpICovCisJe3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgMTYsIEFDUElfUlRZUEVfU1RSSU5HfSwgNCwKKwkgIDB9fSwKKworCXt7Il9CTFQiLCAzLCAwfX0sCisJe3siX0JNQSIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9CTUMiLCAxLCAwfX0sCisJe3siX0JNRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDUgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LDB9LCAwLDB9fSwKKworCXt7Il9CTVMiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQlFDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0JTVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDQgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA0LDB9LCAwLDB9fSwKKworCXt7Il9CVE0iLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQlRQIiwgMSwgMH19LAorCXt7Il9DQkEiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwgLyogU2VlIFBDSSBmaXJtd2FyZSBzcGVjIDMuMCAqLworCXt7Il9DRE0iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQ0lEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkcgfCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChJbnRzL1N0cnMpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkcsIDAsMH0sIDAsMH19LAorCisJe3siX0NSUyIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX0NSVCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9DU0QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoICgxIEludChuKSwgbi0xIEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTJfQ09VTlQsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQ1NUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoMSBJbnQobiksIG4gUGtnICgxIEJ1Zi8zIEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTJfUEtHX0NPVU5ULEFDUElfUlRZUEVfQlVGRkVSLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9LCAzLDB9fSwKKworCXt7Il9EQ0siLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfRENTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0REQyIsIDEsIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX0RETiIsIDAsIEFDUElfUlRZUEVfU1RSSU5HfX0sCisJe3siX0RHUyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9ESVMiLCAwLCAwfX0sCisJe3siX0RNQSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX0RPRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKEludHMpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAwLDB9LCAwLDB9fSwKKworCXt7Il9ET1MiLCAxLCAwfX0sCisJe3siX0RTTSIsIDQsIEFDUElfUlRZUEVfQUxMfX0sICAgICAvKiBNdXN0IHJldHVybiBhIHR5cGUsIGJ1dCBpdCBjYW4gYmUgb2YgYW55IHR5cGUgKi8KKwl7eyJfRFNTIiwgMSwgMH19LAorCXt7Il9EU1ciLCAzLCAwfX0sCisJe3siX0RUSSIsIDEsIDB9fSwKKwl7eyJfRUNfIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0VETCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFJlZnMpKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfRUowIiwgMSwgMH19LAorCXt7Il9FSjEiLCAxLCAwfX0sCisJe3siX0VKMiIsIDEsIDB9fSwKKwl7eyJfRUozIiwgMSwgMH19LAorCXt7Il9FSjQiLCAxLCAwfX0sCisJe3siX0VKRCIsIDAsIEFDUElfUlRZUEVfU1RSSU5HfX0sCisJe3siX0ZERSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX0ZESSIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDE2IEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgMTYsMH0sIDAsMH19LAorCisJe3siX0ZETSIsIDEsIDB9fSwKKwl7eyJfRklGIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIEZpeGVkLWxlbmd0aCAoNCBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsIDB9LCAwLCAwfX0sCisKKwl7eyJfRklYIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoSW50cykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsMH0sIDAsMH19LAorCisJe3siX0ZQUyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LAkvKiBWYXJpYWJsZS1sZW5ndGggKDEgSW50KHJldiksIG4gUGtnICg1IEludCkgKi8KKwl7e3tBQ1BJX1BUWVBFMl9SRVZfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgNSwgMH0sIDAsIDB9fSwKKworCXt7Il9GU0wiLCAxLCAwfX0sCisJe3siX0ZTVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LAkvKiBGaXhlZC1sZW5ndGggKDMgSW50KSAqLworCXt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDMsIDB9LCAwLCAwfX0sCisKKwl7eyJfR0FJIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0dITCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9HTEsiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfR1BEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0dQRSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LCAvKiBfR1BFIG1ldGhvZCwgbm90IF9HUEUgc2NvcGUgKi8KKwl7eyJfR1NCIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0dURiIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX0dUTSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX0dUUyIsIDEsIDB9fSwKKwl7eyJfSElEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKKwl7eyJfSE9UIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0hQUCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDQgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA0LDB9LCAwLDB9fSwKIAogCS8qCi0JICogRm9yIF9IUFgsIGEgc2luZ2xlIHBhY2thZ2UgaXMgcmV0dXJuZWQsIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLgotCSAqIEVhY2ggc3ViLXBhY2thZ2UgY29udGFpbnMgYSBQQ0kgcmVjb3JkIHNldHRpbmcuIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB0eXBlIG9mCi0JICogcmVjb3JkIHNldHRpbmdzLCBvZiBkaWZmZXJlbnQgbGVuZ3RocywgYnV0IGFsbCBlbGVtZW50cyBvZiBhbGwgc2V0dGluZ3MgYXJlIEludGVnZXJzLgorCSAqIEZvciBfSFBYLCBhIHNpbmdsZSBwYWNrYWdlIGlzIHJldHVybmVkLCBjb250YWluaW5nIGEgVmFyaWFibGUtbGVuZ3RoIG51bWJlcgorCSAqIG9mIHN1Yi1wYWNrYWdlcy4gRWFjaCBzdWItcGFja2FnZSBjb250YWlucyBhIFBDSSByZWNvcmQgc2V0dGluZy4KKwkgKiBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgdHlwZSBvZiByZWNvcmQgc2V0dGluZ3MsIG9mIGRpZmZlcmVudAorCSAqIGxlbmd0aHMsIGJ1dCBhbGwgZWxlbWVudHMgb2YgYWxsIHNldHRpbmdzIGFyZSBJbnRlZ2Vycy4KIAkgKi8KLQl7LmluZm8gPSB7Il9IUFgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMl9NSU4sIEFDUElfUlRZUEVfSU5URUdFUiwgNSwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCAodmFyIEludHMpICovCi0Jey5pbmZvID0geyJfSUZUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIHNlZSBJUE1JIHNwZWMgKi8KLQl7LmluZm8gPSB7Il9JTkkiLCAwLCAwfX0sCi0Jey5pbmZvID0geyJfSVJDIiwgMCwgMH19LAotCXsuaW5mbyA9IHsiX0xDSyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9MSUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9NQVQiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAotCXsuaW5mbyA9IHsiX01MUyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX1NUUklORywgMiwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCAoMiBTdHIpICovCi0Jey5pbmZvID0geyJfTVNHIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX09GRiIsIDAsIDB9fSwKLQl7LmluZm8gPSB7Il9PTl8iLCAwLCAwfX0sCi0Jey5pbmZvID0geyJfT1NfIiwgMCwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKLQl7LmluZm8gPSB7Il9PU0MiLCA0LCBBQ1BJX1JUWVBFX0JVRkZFUn19LAotCXsuaW5mbyA9IHsiX09TVCIsIDMsIDB9fSwKLQl7LmluZm8gPSB7Il9QQ0wiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX1BDVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0JVRkZFUiwgMiwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMiBCdWYpICovCi0Jey5pbmZvID0geyJfUERDIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX1BJQyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9QTEQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfQlVGRkVSLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChCdWZzKSAqLwotCXsuaW5mbyA9IHsiX1BQQyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1BQRSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAkvKiBzZWUgZGlnNjQgc3BlYyAqLwotCXsuaW5mbyA9IHsiX1BSMCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfUFIxIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9QUjIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX1BSUyIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX0hQWCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFBrZ3MpIGVhY2ggKHZhciBJbnRzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMl9NSU4sIEFDUElfUlRZUEVfSU5URUdFUiwgNSwwfSwgMCwwfX0sCisKKwl7eyJfSUZUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sIC8qIFNlZSBJUE1JIHNwZWMgKi8KKwl7eyJfSU5JIiwgMCwgMH19LAorCXt7Il9JUkMiLCAwLCAwfX0sCisJe3siX0xDSyIsIDEsIDB9fSwKKwl7eyJfTElEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX01BVCIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX01CTSIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LAkvKiBGaXhlZC1sZW5ndGggKDggSW50KSAqLworCXt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDgsIDB9LCAwLCAwfX0sCisKKwl7eyJfTUxTIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCAoMiBTdHIpICovCisJCQkgIHt7e0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX1NUUklORywgMiwwfSwgMCwwfX0sCisKKwl7eyJfTVNHIiwgMSwgMH19LAorCXt7Il9NU00iLCA0LCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfTlRUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX09GRiIsIDAsIDB9fSwKKwl7eyJfT05fIiwgMCwgMH19LAorCXt7Il9PU18iLCAwLCBBQ1BJX1JUWVBFX1NUUklOR319LAorCXt7Il9PU0MiLCA0LCBBQ1BJX1JUWVBFX0JVRkZFUn19LAorCXt7Il9PU1QiLCAzLCAwfX0sCisJe3siX1BBSSIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9QQ0wiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9QQ1QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogRml4ZWQtbGVuZ3RoICgyIEJ1ZikgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfQlVGRkVSLCAyLDB9LCAwLDB9fSwKKworCXt7Il9QREMiLCAxLCAwfX0sCisJe3siX1BETCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9QSUMiLCAxLCAwfX0sCisJe3siX1BJRiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LAkvKiBGaXhlZC1sZW5ndGggKDMgSW50KSwoMyBTdHIpICovCisJe3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgMywgQUNQSV9SVFlQRV9TVFJJTkd9LCAzLCAwfX0sCisKKwl7eyJfUExEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoQnVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0JVRkZFUiwgMCwwfSwgMCwwfX0sCisKKwl7eyJfUE1DIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIEZpeGVkLWxlbmd0aCAoMTEgSW50KSwoMyBTdHIpICovCisJe3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgMTEsIEFDUElfUlRZUEVfU1RSSU5HfSwgMywKKwkgIDB9fSwKKworCXt7Il9QTUQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCXt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDB9LCAwLCAwfX0sCisKKwl7eyJfUE1NIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1BQQyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9QUEUiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwgLyogU2VlIGRpZzY0IHNwZWMgKi8KKwl7eyJfUFIwIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfUFIxIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfUFIyIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfUFIzIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwl7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwfSwgMCwgMH19LAorCisJe3siX1BSTCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LAkvKiBWYXJpYWJsZS1sZW5ndGggKFJlZnMpICovCisJe3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMH0sIDAsIDB9fSwKKworCXt7Il9QUlMiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAogCiAJLyoKLQkgKiBGb3IgX1BSVCwgbWFueSBCSU9TcyByZXZlcnNlIHRoZSAybmQgYW5kIDNyZCBQYWNrYWdlIGVsZW1lbnRzLiBUaGlzIGJ1ZyBpcyBzbyBwcmV2YWxlbnQgdGhhdCB0aGVyZQotCSAqIGlzIGNvZGUgaW4gdGhlIEFDUElDQSBSZXNvdXJjZSBNYW5hZ2VyIHRvIGRldGVjdCB0aGlzIGFuZCBzd2l0Y2ggdGhlbSBiYWNrLiBGb3Igbm93LCBkbyBub3QgYWxsb3cKLQkgKiBhbmQgaXNzdWUgYSB3YXJuaW5nLiBUbyBhbGxvdyB0aGlzIGFuZCBlbGltaW5hdGUgdGhlIHdhcm5pbmcsIGFkZCB0aGUgQUNQSV9SVFlQRV9SRUZFUkVOQ0UKLQkgKiB0eXBlIHRvIHRoZSAybmQgZWxlbWVudCAoaW5kZXggMSkgaW4gdGhlIHN0YXRlbWVudCBiZWxvdy4KKwkgKiBGb3IgX1BSVCwgbWFueSBCSU9TcyByZXZlcnNlIHRoZSAzcmQgYW5kIDR0aCBQYWNrYWdlIGVsZW1lbnRzIChTb3VyY2UKKwkgKiBhbmQgc291cmNlX2luZGV4KS4gVGhpcyBidWcgaXMgc28gcHJldmFsZW50IHRoYXQgdGhlcmUgaXMgY29kZSBpbiB0aGUKKwkgKiBBQ1BJQ0EgUmVzb3VyY2UgTWFuYWdlciB0byBkZXRlY3QgdGhpcyBhbmQgc3dpdGNoIHRoZW0gYmFjay4gRm9yIG5vdywKKwkgKiBkbyBub3QgYWxsb3cgYW5kIGlzc3VlIGEgd2FybmluZy4gVG8gYWxsb3cgdGhpcyBhbmQgZWxpbWluYXRlIHRoZQorCSAqIHdhcm5pbmcsIGFkZCB0aGUgQUNQSV9SVFlQRV9SRUZFUkVOQ0UgdHlwZSB0byB0aGUgNHRoIGVsZW1lbnQgKGluZGV4IDMpCisJICogaW4gdGhlIHN0YXRlbWVudCBiZWxvdy4KIAkgKi8KLQl7LmluZm8gPSB7Il9QUlQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMl9GSVhFRCwgNCwKLQkJCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVIsCi0JCQkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSLAotCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfUkVGRVJFTkNFLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2ggKDQpOiBJbnQsSW50LEludC9SZWYsSW50ICovCisJe3siX1BSVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFBrZ3MpIGVhY2ggKDQpOiBJbnQsSW50LEludC9SZWYsSW50ICovCisJCQkgIHt7e0FDUElfUFRZUEUyX0ZJWEVELCA0LCBBQ1BJX1JUWVBFX0lOVEVHRVIsQUNQSV9SVFlQRV9JTlRFR0VSfSwKKwkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsCisJCQkgIEFDUElfUlRZUEVfSU5URUdFUn19LAogCi0Jey5pbmZvID0geyJfUFJXIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfT1BUSU9OLCAyLAotCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiB8Ci0JCQkJCSAgQUNQSV9SVFlQRV9QQUNLQUdFLAotCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDB9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2g6IFBrZy9JbnQsSW50LFt2YXJpYWJsZSBSZWZzXSAoUGtnIGlzIFJlZi9JbnQpICovCisJe3siX1BSVyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFBrZ3MpIGVhY2g6IFBrZy9JbnQsSW50LFtWYXJpYWJsZS1sZW5ndGggUmVmc10gKFBrZyBpcyBSZWYvSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9PUFRJT04sIDIsIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfUEFDS0FHRSwKKwkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSfSwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsMH19LAogCi0Jey5pbmZvID0geyJfUFMwIiwgMCwgMH19LAotCXsuaW5mbyA9IHsiX1BTMSIsIDAsIDB9fSwKLQl7LmluZm8gPSB7Il9QUzIiLCAwLCAwfX0sCi0Jey5pbmZvID0geyJfUFMzIiwgMCwgMH19LAotCXsuaW5mbyA9IHsiX1BTQyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1BTRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyX0NPVU5ULCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2ggKDUgSW50KSB3aXRoIGNvdW50ICovCi0Jey5pbmZvID0geyJfUFNMIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9QU1IiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9QU1MiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA2LCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoICg2IEludCkgKi8KLQl7LmluZm8gPSB7Il9QU1YiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9QU1ciLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfUFRDIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfQlVGRkVSLCAyLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgyIEJ1ZikgKi8KLQl7LmluZm8gPSB7Il9QVFMiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfUFhNIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUkVHIiwgMiwgMH19LAotCXsuaW5mbyA9IHsiX1JFViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1JNViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1JPTSIsIDIsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfUlRWIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1BTMCIsIDAsIDB9fSwKKwl7eyJfUFMxIiwgMCwgMH19LAorCXt7Il9QUzIiLCAwLCAwfX0sCisJe3siX1BTMyIsIDAsIDB9fSwKKwl7eyJfUFNDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1BTRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFBrZ3MpIGVhY2ggKDUgSW50KSB3aXRoIGNvdW50ICovCisJCQkgIHt7e0FDUElfUFRZUEUyX0NPVU5ULCBBQ1BJX1JUWVBFX0lOVEVHRVIsMCwwfSwgMCwwfX0sCisKKwl7eyJfUFNMIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfUFNSIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1BTUyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFBrZ3MpIGVhY2ggKDYgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA2LDB9LCAwLDB9fSwKKworCXt7Il9QU1YiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUFNXIiwgMSwgMH19LAorCXt7Il9QVEMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogRml4ZWQtbGVuZ3RoICgyIEJ1ZikgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfQlVGRkVSLCAyLDB9LCAwLDB9fSwKKworCXt7Il9QVFAiLCAyLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUFRTIiwgMSwgMH19LAorCXt7Il9QVVIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogRml4ZWQtbGVuZ3RoICgyIEludCkgKi8KKwl7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAyLCAwfSwgMCwgMH19LAorCisJe3siX1BYTSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9SRUciLCAyLCAwfX0sCisJe3siX1JFViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9STVYiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUk9NIiwgMiwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfUlRWIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAKIAkvKgotCSAqIEZvciBfUzBfIHRocm91Z2ggX1M1XywgdGhlIEFDUEkgc3BlYyBkZWZpbmVzIGEgcmV0dXJuIFBhY2thZ2UgY29udGFpbmluZyAxIEludGVnZXIsCi0JICogYnV0IG1vc3QgRFNEVHMgaGF2ZSBpdCB3cm9uZyAtIDIsMywgb3IgNCBpbnRlZ2Vycy4gQWxsb3cgdGhpcyBieSBtYWtpbmcgdGhlIG9iamVjdHMgInZhcmlhYmxlIGxlbmd0aCIsCi0JICogYnV0IGFsbCBlbGVtZW50cyBtdXN0IGJlIEludGVnZXJzLgorCSAqIEZvciBfUzBfIHRocm91Z2ggX1M1XywgdGhlIEFDUEkgc3BlYyBkZWZpbmVzIGEgcmV0dXJuIFBhY2thZ2UKKwkgKiBjb250YWluaW5nIDEgSW50ZWdlciwgYnV0IG1vc3QgRFNEVHMgaGF2ZSBpdCB3cm9uZyAtIDIsMywgb3IgNCBpbnRlZ2Vycy4KKwkgKiBBbGxvdyB0aGlzIGJ5IG1ha2luZyB0aGUgb2JqZWN0cyAiVmFyaWFibGUtbGVuZ3RoIGxlbmd0aCIsIGJ1dCBhbGwgZWxlbWVudHMKKwkgKiBtdXN0IGJlIEludGVnZXJzLgogCSAqLwotCXsuaW5mbyA9IHsiX1MwXyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgxIEludCkgKi8KLQl7LmluZm8gPSB7Il9TMV8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMSBJbnQpICovCi0Jey5pbmZvID0geyJfUzJfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDEgSW50KSAqLwotCXsuaW5mbyA9IHsiX1MzXyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgxIEludCkgKi8KLQl7LmluZm8gPSB7Il9TNF8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMSBJbnQpICovCi0Jey5pbmZvID0geyJfUzVfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDEgSW50KSAqLworCXt7Il9TMF8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogRml4ZWQtbGVuZ3RoICgxIEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsMH0sIDAsMH19LAogCi0Jey5pbmZvID0geyJfUzFEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzJEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzNEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzREIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzBXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzFXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzJXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzNXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUzRXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfU0JTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfU0NQIiwgMHgxMywgMH19LAkvKiBBY3BpIDEuMCBhbGxvd2VkIDEgYXJnLiBBY3BpIDMuMCBleHBhbmRlZCB0byAzIGFyZ3MuIEFsbG93IGJvdGguICovCi0JLyogTm90ZTogdGhlIDMtYXJnIGRlZmluaXRpb24gbWF5IGJlIHJlbW92ZWQgZm9yIEFDUEkgNC4wICovCi0Jey5pbmZvID0geyJfU0REIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX1NFRyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1NMSSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfU1BEIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfU1JTIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX1NSViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAkvKiBzZWUgSVBNSSBzcGVjICovCi0Jey5pbmZvID0geyJfU1NUIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX1NUQSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1NUTSIsIDMsIDB9fSwKLQl7LmluZm8gPSB7Il9TVFIiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAotCXsuaW5mbyA9IHsiX1NVTiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1NXUyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1RDMSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1RDMiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1RNUCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1RQQyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1RQVCIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9UUlQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDIsCi0JCQkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSLCA2LCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoIDJfcmVmLzZfaW50ICovCi0Jey5pbmZvID0geyJfVFNEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTJfQ09VTlQsIEFDUElfUlRZUEVfSU5URUdFUiwgNSwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCA1X2ludCB3aXRoIGNvdW50ICovCi0Jey5pbmZvID0geyJfVFNQIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVFNTIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfSU5URUdFUiwgNSwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCA1X2ludCAqLwotCXsuaW5mbyA9IHsiX1RTVCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1RUUyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9UWkQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX1RaTSIsIDAsIEFDUElfUlRZUEVfUkVGRVJFTkNFfX0sCi0Jey5pbmZvID0geyJfVFpQIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVUlEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKLQl7LmluZm8gPSB7Il9VUEMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA0LCAwLCAwLCAwfX0sCS8qIGZpeGVkICg0IEludCkgKi8KLQl7LmluZm8gPSB7Il9VUEQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9VUFAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9WUE8iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUzFfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoMSBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLDB9LCAwLDB9fSwKKworCXt7Il9TMl8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogRml4ZWQtbGVuZ3RoICgxIEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsMH0sIDAsMH19LAorCisJe3siX1MzXyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDEgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwwfSwgMCwwfX0sCisKKwl7eyJfUzRfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoMSBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLDB9LCAwLDB9fSwKKworCXt7Il9TNV8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogRml4ZWQtbGVuZ3RoICgxIEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsMH0sIDAsMH19LAorCisJe3siX1MxRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TMkQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUzNEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1M0RCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TMFciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUzFXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1MyVyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TM1ciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUzRXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1NCUyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TQ1AiLCAweDEzLCAwfX0sICAgICAgICAgICAgICAgLyogQWNwaSAxLjAgYWxsb3dlZCAxIGFyZy4gQWNwaSAzLjAgZXhwYW5kZWQgdG8gMyBhcmdzLiBBbGxvdyBib3RoLiAqLworCQkJICAgLyogTm90ZTogdGhlIDMtYXJnIGRlZmluaXRpb24gbWF5IGJlIHJlbW92ZWQgZm9yIEFDUEkgNC4wICovCisJe3siX1NERCIsIDEsIDB9fSwKKwl7eyJfU0VHIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1NITCIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TTEkiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAorCXt7Il9TUEQiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfU1JTIiwgMSwgMH19LAorCXt7Il9TUlYiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwgLyogU2VlIElQTUkgc3BlYyAqLworCXt7Il9TU1QiLCAxLCAwfX0sCisJe3siX1NUQSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TVE0iLCAzLCAwfX0sCisJe3siX1NUUCIsIDIsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TVFIiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAorCXt7Il9TVFYiLCAyLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfU1VOIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1NXUyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9UQzEiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVEMyIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1RJUCIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9USVYiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVE1QIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1RQQyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9UUFQiLCAxLCAwfX0sCisJe3siX1RSVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFBrZ3MpIGVhY2ggMl9yZWYvNl9pbnQgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAyLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9LCA2LCAwfX0sCisKKwl7eyJfVFNEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCA1X2ludCB3aXRoIGNvdW50ICovCisJCQkgIHt7e0FDUElfUFRZUEUyX0NPVU5ULEFDUElfUlRZUEVfSU5URUdFUiwgNSwwfSwgMCwwfX0sCisKKwl7eyJfVFNQIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1RTUyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFBrZ3MpIGVhY2ggNV9pbnQgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfSU5URUdFUiwgNSwwfSwgMCwwfX0sCisKKwl7eyJfVFNUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1RUUyIsIDEsIDB9fSwKKwl7eyJfVFpEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwwfSwgMCwwfX0sCisKKwl7eyJfVFpNIiwgMCwgQUNQSV9SVFlQRV9SRUZFUkVOQ0V9fSwKKwl7eyJfVFpQIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1VJRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfU1RSSU5HfX0sCisJe3siX1VQQyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDQgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA0LDB9LCAwLDB9fSwKKworCXt7Il9VUEQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVVBQIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1ZQTyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAogCiAJLyogQWNwaSAxLjAgZGVmaW5lZCBfV0FLIHdpdGggbm8gcmV0dXJuIHZhbHVlLiBMYXRlciwgaXQgd2FzIGNoYW5nZWQgdG8gcmV0dXJuIGEgcGFja2FnZSAqLwogCi0Jey5pbmZvID0geyJfV0FLIiwgMSwgQUNQSV9SVFlQRV9OT05FIHwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCi0Jey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAyLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgyIEludCksIGJ1dCBpcyBvcHRpb25hbCAqLwotCXsucmV0X2luZm8gPSB7MCwgMCwgMCwgMCwgMCwgMH19CS8qIFRhYmxlIHRlcm1pbmF0b3IgKi8KKwl7eyJfV0FLIiwgMSwgQUNQSV9SVFlQRV9OT05FIHwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCisJCQkgIHt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDIsMH0sIDAsMH19LCAvKiBGaXhlZC1sZW5ndGggKDIgSW50KSwgYnV0IGlzIG9wdGlvbmFsICovCisKKwl7e3swLDAsMCwwfSwgMCwwfX0gLyogVGFibGUgdGVybWluYXRvciAqLwogfTsKIAogI2lmIDAKIAkvKiBOb3QgaW1wbGVtZW50ZWQgKi8KIAotewotIl9XREciLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn0sCS8qIE1TIEV4dGVuc2lvbiAqLworCXt7Il9XREciLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LCAgLyogTVMgRXh0ZW5zaW9uICovCisJe3siX1dFRCIsIDEsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBNUyBFeHRlbnNpb24gKi8KIAotewotIl9XRUQiLCAxLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9LAkvKiBNUyBFeHRlbnNpb24gKi8KKwkvKiBUaGlzIGlzIGFuIGludGVybmFsbHkgaW1wbGVtZW50ZWQgY29udHJvbCBtZXRob2QsIG5vIG5lZWQgdG8gY2hlY2sgKi8KKwl7eyJfT1NJIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAKLSAgICAvKiBUaGlzIGlzIGFuIGludGVybmFsbHkgaW1wbGVtZW50ZWQgY29udHJvbCBtZXRob2QsIG5vIG5lZWQgdG8gY2hlY2sgKi8KLXsKLSJfT1NJIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfSwKKwkvKiBUQkQ6ICovCiAKLSAgICAvKiBUQkQ6ICovCi0gICAgX1BSVCAtIGN1cnJlbnRseSBpZ25vcmUgcmV2ZXJzZWQgZW50cmllcy5hdHRlbXB0IHRvIGZpeCBoZXJlID8KLSAgICB0aGluayBhYm91dCBjb2RlIHRoYXQgYXR0ZW1wdHMgdG8gZml4IHBhY2thZ2UgZWxlbWVudHMgbGlrZSBfQklGLCBldGMuCisJX1BSVCAtIGN1cnJlbnRseSBpZ25vcmUgcmV2ZXJzZWQgZW50cmllcy4gYXR0ZW1wdCB0byBmaXggaGVyZT8KKwl0aGluayBhYm91dCBwb3NzaWJseSBmaXhpbmcgcGFja2FnZSBlbGVtZW50cyBsaWtlIF9CSUYsIGV0Yy4KKyNlbmRpZgorCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAppbmRleCA4OTc4MTBiLi44NjNhMjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaApAQCAtMzI0LDI2ICszMjQsMzAgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KGNoYXIgKm9iamVjdF9uYW1lLAogCQkJCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJCQlhY3BpX2ludGVnZXIgKiBhZGRyZXNzKTsKKwkJCQlhY3BpX2ludGVnZXIgKnZhbHVlKTsKIAogYWNwaV9zdGF0dXMKK2FjcGlfdXRfZXhlY3V0ZV9TVEEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLCB1MzIgKnN0YXR1c19mbGFncyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2V4ZWN1dGVfcG93ZXJfbWV0aG9kcyhzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCisJCQkgICAgICBjb25zdCBjaGFyICoqbWV0aG9kX25hbWVzLAorCQkJICAgICAgdTggbWV0aG9kX2NvdW50LCB1OCAqb3V0X3ZhbHVlcyk7CisKKy8qCisgKiB1dGlkcyAtIGRldmljZSBJRCBzdXBwb3J0CisgKi8KK2FjcGlfc3RhdHVzCiBhY3BpX3V0X2V4ZWN1dGVfSElEKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICpoaWQpOwotCi1hY3BpX3N0YXR1cwotYWNwaV91dF9leGVjdXRlX0NJRChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCi0JCSAgICBzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgKipyZXR1cm5fY2lkX2xpc3QpOwotCi1hY3BpX3N0YXR1cwotYWNwaV91dF9leGVjdXRlX1NUQShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCi0JCSAgICB1MzIgKiBzdGF0dXNfZmxhZ3MpOworCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKipyZXR1cm5faWQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV91dF9leGVjdXRlX1VJRChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCi0JCSAgICBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqdWlkKTsKKwkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICoqcmV0dXJuX2lkKTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfdXRfZXhlY3V0ZV9zeGRzKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwgdTggKiBoaWdoZXN0KTsKK2FjcGlfdXRfZXhlY3V0ZV9DSUQoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLAorCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqKnJldHVybl9jaWRfbGlzdCk7CiAKIC8qCiAgKiB1dGxvY2sgLSByZWFkZXIvd3JpdGVyIGxvY2tzCkBAIC00NDUsNiArNDQ5LDggQEAKICAqLwogY29uc3QgY2hhciAqYWNwaV91dF92YWxpZGF0ZV9leGNlcHRpb24oYWNwaV9zdGF0dXMgc3RhdHVzKTsKIAordTggYWNwaV91dF9pc19wY2lfcm9vdF9icmlkZ2UoY2hhciAqaWQpOworCiB1OCBhY3BpX3V0X2lzX2FtbF90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKIAogYWNwaV9zdGF0dXMgYWNwaV91dF9hbGxvY2F0ZV9vd25lcl9pZChhY3BpX293bmVyX2lkICogb3duZXJfaWQpOwpAQCAtNDY5LDYgKzQ3NSwxMiBAQAogYWNwaV9zdGF0dXMKIGFjcGlfdXRfc3RydG91bDY0KGNoYXIgKnN0cmluZywgdTMyIGJhc2UsIGFjcGlfaW50ZWdlciAqIHJldF9pbnRlZ2VyKTsKIAordm9pZCBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQorYWNwaV91dF9wcmVkZWZpbmVkX3dhcm5pbmcoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsCisJCQkgICB1MzIgbGluZV9udW1iZXIsCisJCQkgICBjaGFyICpwYXRobmFtZSwKKwkJCSAgIHU4IG5vZGVfZmxhZ3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwogLyogVmFsdWVzIGZvciBCYXNlIGFib3ZlICgxNj1IZXgsIDEwPURlY2ltYWwpICovCiAKICNkZWZpbmUgQUNQSV9BTllfQkFTRSAgICAgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxjb2RlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbGNvZGUuaAppbmRleCAwNjdmOTY3Li40OTQwMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbGNvZGUuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbGNvZGUuaApAQCAtNDA0LDYgKzQwNCw3IEBACiAJUkVHSU9OX1NNQlVTLAogCVJFR0lPTl9DTU9TLAogCVJFR0lPTl9QQ0lfQkFSLAorCVJFR0lPTl9JUE1JLAogCVJFR0lPTl9EQVRBX1RBQkxFLAkvKiBJbnRlcm5hbCB1c2Ugb25seSAqLwogCVJFR0lPTl9GSVhFRF9IVyA9IDB4N0YKIH0gQU1MX1JFR0lPTl9UWVBFUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2ZpZWxkLmMKaW5kZXggNTNlMjdiYy4uNTRhMjI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc2ZpZWxkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2ZpZWxkLmMKQEAgLTEyMyw5ICsxMjMsMTIgQEAKIAkJZmxhZ3MgPSBBQ1BJX05TX05PX1VQU0VBUkNIIHwgQUNQSV9OU19ET05UX09QRU5fU0NPUEUgfAogCQkgICAgQUNQSV9OU19FUlJPUl9JRl9GT1VORDsKIAotCQkvKiBNYXJrIG5vZGUgdGVtcG9yYXJ5IGlmIHdlIGFyZSBleGVjdXRpbmcgYSBtZXRob2QgKi8KLQotCQlpZiAod2Fsa19zdGF0ZS0+bWV0aG9kX25vZGUpIHsKKwkJLyoKKwkJICogTWFyayBub2RlIHRlbXBvcmFyeSBpZiB3ZSBhcmUgZXhlY3V0aW5nIGEgbm9ybWFsIGNvbnRyb2wKKwkJICogbWV0aG9kLiAoRG9uJ3QgbWFyayBpZiB0aGlzIGlzIGEgbW9kdWxlLWxldmVsIGNvZGUgbWV0aG9kKQorCQkgKi8KKwkJaWYgKHdhbGtfc3RhdGUtPm1ldGhvZF9ub2RlICYmCisJCSAgICAhKHdhbGtfc3RhdGUtPnBhcnNlX2ZsYWdzICYgQUNQSV9QQVJTRV9NT0RVTEVfTEVWRUwpKSB7CiAJCQlmbGFncyB8PSBBQ1BJX05TX1RFTVBPUkFSWTsKIAkJfQogCkBAIC00NTYsOSArNDU5LDEyIEBACiAJZmxhZ3MgPSBBQ1BJX05TX05PX1VQU0VBUkNIIHwgQUNQSV9OU19ET05UX09QRU5fU0NPUEUgfAogCSAgICBBQ1BJX05TX0VSUk9SX0lGX0ZPVU5EOwogCi0JLyogTWFyayBub2RlKHMpIHRlbXBvcmFyeSBpZiB3ZSBhcmUgZXhlY3V0aW5nIGEgbWV0aG9kICovCi0KLQlpZiAod2Fsa19zdGF0ZS0+bWV0aG9kX25vZGUpIHsKKwkvKgorCSAqIE1hcmsgbm9kZShzKSB0ZW1wb3JhcnkgaWYgd2UgYXJlIGV4ZWN1dGluZyBhIG5vcm1hbCBjb250cm9sCisJICogbWV0aG9kLiAoRG9uJ3QgbWFyayBpZiB0aGlzIGlzIGEgbW9kdWxlLWxldmVsIGNvZGUgbWV0aG9kKQorCSAqLworCWlmICh3YWxrX3N0YXRlLT5tZXRob2Rfbm9kZSAmJgorCSAgICAhKHdhbGtfc3RhdGUtPnBhcnNlX2ZsYWdzICYgQUNQSV9QQVJTRV9NT0RVTEVfTEVWRUwpKSB7CiAJCWZsYWdzIHw9IEFDUElfTlNfVEVNUE9SQVJZOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCmluZGV4IDE0YjhiOGUuLjU2N2E0ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKQEAgLTU3OCwxMCArNTc4LDE1IEBACiAJCX0KIAogCQkvKgotCQkgKiBEZWxldGUgYW55IG5hbWVzcGFjZSBvYmplY3RzIGNyZWF0ZWQgYW55d2hlcmUgd2l0aGluCi0JCSAqIHRoZSBuYW1lc3BhY2UgYnkgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIG1ldGhvZAorCQkgKiBEZWxldGUgYW55IG5hbWVzcGFjZSBvYmplY3RzIGNyZWF0ZWQgYW55d2hlcmUgd2l0aGluIHRoZQorCQkgKiBuYW1lc3BhY2UgYnkgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIG1ldGhvZC4gVW5sZXNzIHRoaXMgbWV0aG9kCisJCSAqIGlzIGEgbW9kdWxlLWxldmVsIGV4ZWN1dGFibGUgY29kZSBtZXRob2QsIGluIHdoaWNoIGNhc2Ugd2UKKwkJICogd2FudCBtYWtlIHRoZSBvYmplY3RzIHBlcm1hbmVudC4KIAkJICovCi0JCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcihtZXRob2RfZGVzYy0+bWV0aG9kLm93bmVyX2lkKTsKKwkJaWYgKCEobWV0aG9kX2Rlc2MtPm1ldGhvZC5mbGFncyAmIEFPUE9CSl9NT0RVTEVfTEVWRUwpKSB7CisJCQlhY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIobWV0aG9kX2Rlc2MtPm1ldGhvZC4KKwkJCQkJCQkgIG93bmVyX2lkKTsKKwkJfQogCX0KIAogCS8qIERlY3JlbWVudCB0aGUgdGhyZWFkIGNvdW50IG9uIHRoZSBtZXRob2QgKi8KQEAgLTYyMiw3ICs2MjcsOSBAQAogCiAJCS8qIE5vIG1vcmUgdGhyZWFkcywgd2UgY2FuIGZyZWUgdGhlIG93bmVyX2lkICovCiAKLQkJYWNwaV91dF9yZWxlYXNlX293bmVyX2lkKCZtZXRob2RfZGVzYy0+bWV0aG9kLm93bmVyX2lkKTsKKwkJaWYgKCEobWV0aG9kX2Rlc2MtPm1ldGhvZC5mbGFncyAmIEFPUE9CSl9NT0RVTEVfTEVWRUwpKSB7CisJCQlhY3BpX3V0X3JlbGVhc2Vfb3duZXJfaWQoJm1ldGhvZF9kZXNjLT5tZXRob2Qub3duZXJfaWQpOworCQl9CiAJfQogCiAJcmV0dXJuX1ZPSUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKaW5kZXggMjJiMWEzYy4uN2QwNzdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYwpAQCAtNDMzLDEwICs0MzMsMTAgQEAKIAogCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOgogCi0JCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkJICAgICJVbmluaXRpYWxpemVkIExvY2FsWyVkXSBhdCBub2RlICVwIiwKLQkJCQkJICAgIGluZGV4LCBub2RlKSk7Ci0KKwkJCQkvKgorCQkJCSAqIE5vIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgY2FzZSwgd2lsbCBiZSB0cmFwcGVkIGFnYWluIGxhdGVyIHRvCisJCQkJICogZGV0ZWN0IGFuZCBpZ25vcmUgY2FzZXMgb2YgU3RvcmUobG9jYWxfeCxsb2NhbF94KQorCQkJCSAqLwogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfVU5JTklUSUFMSVpFRF9MT0NBTCk7CiAKIAkJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKaW5kZXggMDJlNmNhYS4uNTA3ZTFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYwpAQCAtNDgyLDE0ICs0ODIsMjcgQEAKIAlpZiAoYXJnKSB7CiAJCS8qCiAJCSAqIG51bV9lbGVtZW50cyB3YXMgZXhoYXVzdGVkLCBidXQgdGhlcmUgYXJlIHJlbWFpbmluZyBlbGVtZW50cyBpbiB0aGUKLQkJICogcGFja2FnZV9saXN0LgorCQkgKiBwYWNrYWdlX2xpc3QuIFRydW5jYXRlIHRoZSBwYWNrYWdlIHRvIG51bV9lbGVtZW50cy4KIAkJICoKIAkJICogTm90ZTogdGVjaG5pY2FsbHksIHRoaXMgaXMgYW4gZXJyb3IsIGZyb20gQUNQSSBzcGVjOiAiSXQgaXMgYW4gZXJyb3IKIAkJICogZm9yIE51bUVsZW1lbnRzIHRvIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQotCQkgKiBQYWNrYWdlTGlzdCIuIEhvd2V2ZXIsIGZvciBub3csIHdlIGp1c3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBhbmQKLQkJICogbm8gZXhjZXB0aW9uIGlzIHJldHVybmVkLgorCQkgKiBQYWNrYWdlTGlzdCIuIEhvd2V2ZXIsIHdlIGp1c3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBhbmQKKwkJICogbm8gZXhjZXB0aW9uIGlzIHJldHVybmVkLiBUaGlzIHByb3ZpZGVzIFdpbmRvd3MgY29tcGF0aWJpbGl0eS4gU29tZQorCQkgKiBCSU9TcyB3aWxsIGFsdGVyIHRoZSBudW1fZWxlbWVudHMgb24gdGhlIGZseSwgY3JlYXRpbmcgdGhpcyB0eXBlCisJCSAqIG9mIGlsbC1mb3JtZWQgcGFja2FnZSBvYmplY3QuCiAJCSAqLwogCQl3aGlsZSAoYXJnKSB7CisJCQkvKgorCQkJICogV2UgbXVzdCBkZWxldGUgYW55IHBhY2thZ2UgZWxlbWVudHMgdGhhdCB3ZXJlIGNyZWF0ZWQgZWFybGllcgorCQkJICogYW5kIGFyZSBub3QgZ29pbmcgdG8gYmUgdXNlZCBiZWNhdXNlIG9mIHRoZSBwYWNrYWdlIHRydW5jYXRpb24uCisJCQkgKi8KKwkJCWlmIChhcmctPmNvbW1vbi5ub2RlKSB7CisJCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKEFDUElfQ0FTVF9QVFIKKwkJCQkJCQkgKHVuaW9uCisJCQkJCQkJICBhY3BpX29wZXJhbmRfb2JqZWN0LAorCQkJCQkJCSAgYXJnLT5jb21tb24ubm9kZSkpOworCQkJCWFyZy0+Y29tbW9uLm5vZGUgPSBOVUxMOworCQkJfQogCiAJCQkvKiBGaW5kIG91dCBob3cgbWFueSBlbGVtZW50cyB0aGVyZSByZWFsbHkgYXJlICovCiAKQEAgLTQ5OCw3ICs1MTEsNyBAQAogCQl9CiAKIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICJQYWNrYWdlIExpc3QgbGVuZ3RoICglWCkgbGFyZ2VyIHRoYW4gTnVtRWxlbWVudHMgY291bnQgKCVYKSwgdHJ1bmNhdGVkXG4iLAorCQkJICAgICJQYWNrYWdlIExpc3QgbGVuZ3RoICgweCVYKSBsYXJnZXIgdGhhbiBOdW1FbGVtZW50cyBjb3VudCAoMHglWCksIHRydW5jYXRlZFxuIiwKIAkJCSAgICBpLCBlbGVtZW50X2NvdW50KSk7CiAJfSBlbHNlIGlmIChpIDwgZWxlbWVudF9jb3VudCkgewogCQkvKgpAQCAtNTA2LDcgKzUxOSw3IEBACiAJCSAqIE5vdGU6IHRoaXMgaXMgbm90IGFuIGVycm9yLCB0aGUgcGFja2FnZSBpcyBwYWRkZWQgb3V0IHdpdGggTlVMTHMuCiAJCSAqLwogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiUGFja2FnZSBMaXN0IGxlbmd0aCAoJVgpIHNtYWxsZXIgdGhhbiBOdW1FbGVtZW50cyBjb3VudCAoJVgpLCBwYWRkZWQgd2l0aCBudWxsIGVsZW1lbnRzXG4iLAorCQkJCSAgIlBhY2thZ2UgTGlzdCBsZW5ndGggKDB4JVgpIHNtYWxsZXIgdGhhbiBOdW1FbGVtZW50cyBjb3VudCAoMHglWCksIHBhZGRlZCB3aXRoIG51bGwgZWxlbWVudHNcbiIsCiAJCQkJICBpLCBlbGVtZW50X2NvdW50KSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jCmluZGV4IDMwMjNjZWEuLjZkZTNhOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jCkBAIC01ODEsMjEgKzU4MSw2IEBACiAJCWlmICgoISh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9OU09QQ09ERSkgJiYKIAkJICAgICAod2Fsa19zdGF0ZS0+b3Bjb2RlICE9IEFNTF9JTlRfTkFNRVBBVEhfT1ApKSB8fAogCQkgICAgKCEod2Fsa19zdGF0ZS0+b3BfaW5mby0+ZmxhZ3MgJiBBTUxfTkFNRUQpKSkgewotI2lmZGVmIEFDUElfRU5BQkxFX01PRFVMRV9MRVZFTF9DT0RFCi0JCQlpZiAoKHdhbGtfc3RhdGUtPm9wX2luZm8tPmNsYXNzID09IEFNTF9DTEFTU19FWEVDVVRFKSB8fAotCQkJICAgICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5jbGFzcyA9PSBBTUxfQ0xBU1NfQ09OVFJPTCkpIHsKLQkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJCQkJICAiQmVnaW4vRVhFQzogJXMgKGZsICU4LjhYKVxuIiwKLQkJCQkJCSAgd2Fsa19zdGF0ZS0+b3BfaW5mby0+bmFtZSwKLQkJCQkJCSAgd2Fsa19zdGF0ZS0+b3BfaW5mby0+ZmxhZ3MpKTsKLQotCQkJCS8qIEV4ZWN1dGluZyBhIHR5cGUxIG9yIHR5cGUyIG9wY29kZSBvdXRzaWRlIG9mIGEgbWV0aG9kICovCi0KLQkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX2RzX2V4ZWNfYmVnaW5fb3Aod2Fsa19zdGF0ZSwgb3V0X29wKTsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJCX0KLSNlbmRpZgogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAkJfQogCkBAIC03NjgsNyArNzUzLDEzIEBACiAKIAkJCS8qIEV4ZWN1dGlvbiBtb2RlLCBub2RlIGNhbm5vdCBhbHJlYWR5IGV4aXN0LCBub2RlIGlzIHRlbXBvcmFyeSAqLwogCi0JCQlmbGFncyB8PSAoQUNQSV9OU19FUlJPUl9JRl9GT1VORCB8IEFDUElfTlNfVEVNUE9SQVJZKTsKKwkJCWZsYWdzIHw9IEFDUElfTlNfRVJST1JfSUZfRk9VTkQ7CisKKwkJCWlmICghCisJCQkgICAgKHdhbGtfc3RhdGUtPgorCQkJICAgICBwYXJzZV9mbGFncyAmIEFDUElfUEFSU0VfTU9EVUxFX0xFVkVMKSkgeworCQkJCWZsYWdzIHw9IEFDUElfTlNfVEVNUE9SQVJZOworCQkJfQogCQl9CiAKIAkJLyogQWRkIG5ldyBlbnRyeSBvciBsb29rdXAgZXhpc3RpbmcgZW50cnkgKi8KQEAgLTg1MSwyNCArODQyLDYgQEAKIAkvKiBDaGVjayBpZiBvcGNvZGUgaGFkIGFuIGFzc29jaWF0ZWQgbmFtZXNwYWNlIG9iamVjdCAqLwogCiAJaWYgKCEod2Fsa19zdGF0ZS0+b3BfaW5mby0+ZmxhZ3MgJiBBTUxfTlNPQkpFQ1QpKSB7Ci0jaWZuZGVmIEFDUElfTk9fTUVUSE9EX0VYRUNVVElPTgotI2lmZGVmIEFDUElfRU5BQkxFX01PRFVMRV9MRVZFTF9DT0RFCi0JCS8qIE5vIG5hbWVzcGFjZSBvYmplY3QuIEV4ZWN1dGFibGUgb3Bjb2RlPyAqLwotCi0JCWlmICgod2Fsa19zdGF0ZS0+b3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX0VYRUNVVEUpIHx8Ci0JCSAgICAod2Fsa19zdGF0ZS0+b3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX0NPTlRST0wpKSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJCQkgICJFbmQvRVhFQzogICAlcyAoZmwgJTguOFgpXG4iLAotCQkJCQkgIHdhbGtfc3RhdGUtPm9wX2luZm8tPm5hbWUsCi0JCQkJCSAgd2Fsa19zdGF0ZS0+b3BfaW5mby0+ZmxhZ3MpKTsKLQotCQkJLyogRXhlY3V0aW5nIGEgdHlwZTEgb3IgdHlwZTIgb3Bjb2RlIG91dHNpZGUgb2YgYSBtZXRob2QgKi8KLQotCQkJc3RhdHVzID0gYWNwaV9kc19leGVjX2VuZF9vcCh3YWxrX3N0YXRlKTsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQl9Ci0jZW5kaWYKLSNlbmRpZgogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCmluZGV4IGI5ZDhlZTYuLmFmYWNmNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKQEAgLTQyNCw4ICs0MjQsOCBAQAogCQkJLyogUmVhZCB0aGUgU3RhdHVzIFJlZ2lzdGVyICovCiAKIAkJCXN0YXR1cyA9Ci0JCQkgICAgYWNwaV9yZWFkKCZzdGF0dXNfcmVnLAotCQkJCSAgICAgICZncGVfcmVnaXN0ZXJfaW5mby0+c3RhdHVzX2FkZHJlc3MpOworCQkJICAgIGFjcGlfaHdfcmVhZCgmc3RhdHVzX3JlZywKKwkJCQkJICZncGVfcmVnaXN0ZXJfaW5mby0+c3RhdHVzX2FkZHJlc3MpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CkBAIC00MzMsOCArNDMzLDggQEAKIAkJCS8qIFJlYWQgdGhlIEVuYWJsZSBSZWdpc3RlciAqLwogCiAJCQlzdGF0dXMgPQotCQkJICAgIGFjcGlfcmVhZCgmZW5hYmxlX3JlZywKLQkJCQkgICAgICAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKKwkJCSAgICBhY3BpX2h3X3JlYWQoJmVuYWJsZV9yZWcsCisJCQkJCSAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCmluZGV4IDdiMzQ2MzYuLmE2MGFhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKQEAgLTg0MywxNCArODQzLDE0IEBACiAKIAkJLyogRGlzYWJsZSBhbGwgR1BFcyB3aXRoaW4gdGhpcyByZWdpc3RlciAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUoMHgwMCwgJnRoaXNfcmVnaXN0ZXItPmVuYWJsZV9hZGRyZXNzKTsKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZSgweDAwLCAmdGhpc19yZWdpc3Rlci0+ZW5hYmxlX2FkZHJlc3MpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWdvdG8gZXJyb3JfZXhpdDsKIAkJfQogCiAJCS8qIENsZWFyIGFueSBwZW5kaW5nIEdQRSBldmVudHMgd2l0aGluIHRoaXMgcmVnaXN0ZXIgKi8KIAotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKDB4RkYsICZ0aGlzX3JlZ2lzdGVyLT5zdGF0dXNfYWRkcmVzcyk7CisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGUoMHhGRiwgJnRoaXNfcmVnaXN0ZXItPnN0YXR1c19hZGRyZXNzKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGVycm9yX2V4aXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwppbmRleCAyODRhN2JlLi5jZjI5YzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCkBAIC01MCw4ICs1MCw2IEBACiBBQ1BJX01PRFVMRV9OQU1FKCJldnJnbmluaSIpCiAKIC8qIExvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB1OCBhY3BpX2V2X21hdGNoX3BjaV9yb290X2JyaWRnZShjaGFyICppZCk7Ci0KIHN0YXRpYyB1OCBhY3BpX2V2X2lzX3BjaV9yb290X2JyaWRnZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzIsMzcgKzMzMCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfZXZfbWF0Y2hfcGNpX3Jvb3RfYnJpZGdlCi0gKgotICogUEFSQU1FVEVSUzogIElkICAgICAgICAgICAgICAtIFRoZSBISUQvQ0lEIGluIHN0cmluZyBmb3JtYXQKLSAqCi0gKiBSRVRVUk46ICAgICAgVFJVRSBpZiB0aGUgSWQgaXMgYSBtYXRjaCBmb3IgYSBQQ0kvUENJLUV4cHJlc3MgUm9vdCBCcmlkZ2UKLSAqCi0gKiBERVNDUklQVElPTjogRGV0ZXJtaW5lIGlmIHRoZSBpbnB1dCBJRCBpcyBhIFBDSSBSb290IEJyaWRnZSBJRC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdTggYWNwaV9ldl9tYXRjaF9wY2lfcm9vdF9icmlkZ2UoY2hhciAqaWQpCi17Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoaXMgaXMgYSBQQ0kgcm9vdC4KLQkgKiBBQ1BJIDMuMCs6IGNoZWNrIGZvciBhIFBDSSBFeHByZXNzIHJvb3QgYWxzby4KLQkgKi8KLQlpZiAoIShBQ1BJX1NUUk5DTVAoaWQsCi0JCQkgICBQQ0lfUk9PVF9ISURfU1RSSU5HLAotCQkJICAgc2l6ZW9mKFBDSV9ST09UX0hJRF9TVFJJTkcpKSkgfHwKLQkgICAgIShBQ1BJX1NUUk5DTVAoaWQsCi0JCQkgICBQQ0lfRVhQUkVTU19ST09UX0hJRF9TVFJJTkcsCi0JCQkgICBzaXplb2YoUENJX0VYUFJFU1NfUk9PVF9ISURfU1RSSU5HKSkpKSB7Ci0JCXJldHVybiAoVFJVRSk7Ci0JfQotCi0JcmV0dXJuIChGQUxTRSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXZfaXNfcGNpX3Jvb3RfYnJpZGdlCiAgKgogICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgICAgICAtIERldmljZSBub2RlIGJlaW5nIGV4YW1pbmVkCkBAIC0zNzcsOSArMzQ0LDEwIEBACiBzdGF0aWMgdTggYWNwaV9ldl9pc19wY2lfcm9vdF9icmlkZ2Uoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIGhpZDsKLQlzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgKmNpZDsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqaGlkOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZDsKIAl1MzIgaTsKKwl1OCBtYXRjaDsKIAogCS8qIEdldCB0aGUgX0hJRCBhbmQgY2hlY2sgZm9yIGEgUENJIFJvb3QgQnJpZGdlICovCiAKQEAgLTM4OCw3ICszNTYsMTAgQEAKIAkJcmV0dXJuIChGQUxTRSk7CiAJfQogCi0JaWYgKGFjcGlfZXZfbWF0Y2hfcGNpX3Jvb3RfYnJpZGdlKGhpZC52YWx1ZSkpIHsKKwltYXRjaCA9IGFjcGlfdXRfaXNfcGNpX3Jvb3RfYnJpZGdlKGhpZC0+c3RyaW5nKTsKKwlBQ1BJX0ZSRUUoaGlkKTsKKworCWlmIChtYXRjaCkgewogCQlyZXR1cm4gKFRSVUUpOwogCX0KIApAQCAtNDAyLDcgKzM3Myw3IEBACiAJLyogQ2hlY2sgYWxsIF9DSURzIGluIHRoZSByZXR1cm5lZCBsaXN0ICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgY2lkLT5jb3VudDsgaSsrKSB7Ci0JCWlmIChhY3BpX2V2X21hdGNoX3BjaV9yb290X2JyaWRnZShjaWQtPmlkW2ldLnZhbHVlKSkgeworCQlpZiAoYWNwaV91dF9pc19wY2lfcm9vdF9icmlkZ2UoY2lkLT5pZHNbaV0uc3RyaW5nKSkgewogCQkJQUNQSV9GUkVFKGNpZCk7CiAJCQlyZXR1cm4gKFRSVUUpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKaW5kZXggMjc3ZmQ2MC4uMjRhZmVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwpAQCAtMTEwLDggKzExMCwxNSBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uob2JqX2Rlc2MpOwogCQkqZGRiX2hhbmRsZSA9IE5VTEw7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAorCS8qIEV4ZWN1dGUgYW55IG1vZHVsZS1sZXZlbCBjb2RlIHRoYXQgd2FzIGZvdW5kIGluIHRoZSB0YWJsZSAqLworCisJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7CisJYWNwaV9uc19leGVjX21vZHVsZV9jb2RlX2xpc3QoKTsKKwlhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7CisKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKaW5kZXggZWM1MjQ2MS4uZGUzNDQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCkBAIC00MTgsOSArNDE4LDkgQEAKIAkJY2FzZSBBQ1BJX0VYRF9SRUZFUkVOQ0U6CiAKIAkJCWFjcGlfZXhfb3V0X3N0cmluZygiQ2xhc3MgTmFtZSIsCi0JCQkJCSAgIChjaGFyICopCi0JCQkJCSAgIGFjcGlfdXRfZ2V0X3JlZmVyZW5jZV9uYW1lCi0JCQkJCSAgIChvYmpfZGVzYykpOworCQkJCQkgICBBQ1BJX0NBU1RfUFRSKGNoYXIsCisJCQkJCQkJIGFjcGlfdXRfZ2V0X3JlZmVyZW5jZV9uYW1lCisJCQkJCQkJIChvYmpfZGVzYykpKTsKIAkJCWFjcGlfZXhfZHVtcF9yZWZlcmVuY2Vfb2JqKG9ial9kZXNjKTsKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCmluZGV4IDU0NmRjZGQuLjBiMzNkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCkBAIC03Miw2ICs3Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYnVmZmVyX2Rlc2M7CiAJYWNwaV9zaXplIGxlbmd0aDsKIAl2b2lkICpidWZmZXI7CisJdTMyIGZ1bmN0aW9uOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZXhfcmVhZF9kYXRhX2Zyb21fZmllbGQsIG9ial9kZXNjKTsKIApAQCAtOTcsMTMgKzk4LDI3IEBACiAJCX0KIAl9IGVsc2UgaWYgKChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFR0lPTl9GSUVMRCkgJiYKIAkJICAgKG9ial9kZXNjLT5maWVsZC5yZWdpb25fb2JqLT5yZWdpb24uc3BhY2VfaWQgPT0KLQkJICAgIEFDUElfQURSX1NQQUNFX1NNQlVTKSkgeworCQkgICAgQUNQSV9BRFJfU1BBQ0VfU01CVVMKKwkJICAgIHx8IG9ial9kZXNjLT5maWVsZC5yZWdpb25fb2JqLT5yZWdpb24uc3BhY2VfaWQgPT0KKwkJICAgIEFDUElfQURSX1NQQUNFX0lQTUkpKSB7CiAJCS8qCi0JCSAqIFRoaXMgaXMgYW4gU01CdXMgcmVhZC4gIFdlIG11c3QgY3JlYXRlIGEgYnVmZmVyIHRvIGhvbGQgdGhlIGRhdGEKLQkJICogYW5kIGRpcmVjdGx5IGFjY2VzcyB0aGUgcmVnaW9uIGhhbmRsZXIuCisJCSAqIFRoaXMgaXMgYW4gU01CdXMgb3IgSVBNSSByZWFkLiBXZSBtdXN0IGNyZWF0ZSBhIGJ1ZmZlciB0byBob2xkCisJCSAqIHRoZSBkYXRhIGFuZCB0aGVuIGRpcmVjdGx5IGFjY2VzcyB0aGUgcmVnaW9uIGhhbmRsZXIuCisJCSAqCisJCSAqIE5vdGU6IFNtYnVzIHByb3RvY29sIHZhbHVlIGlzIHBhc3NlZCBpbiB1cHBlciAxNi1iaXRzIG9mIEZ1bmN0aW9uCiAJCSAqLwotCQlidWZmZXJfZGVzYyA9Ci0JCSAgICBhY3BpX3V0X2NyZWF0ZV9idWZmZXJfb2JqZWN0KEFDUElfU01CVVNfQlVGRkVSX1NJWkUpOworCQlpZiAob2JqX2Rlc2MtPmZpZWxkLnJlZ2lvbl9vYmotPnJlZ2lvbi5zcGFjZV9pZCA9PQorCQkgICAgQUNQSV9BRFJfU1BBQ0VfU01CVVMpIHsKKwkJCWxlbmd0aCA9IEFDUElfU01CVVNfQlVGRkVSX1NJWkU7CisJCQlmdW5jdGlvbiA9CisJCQkgICAgQUNQSV9SRUFEIHwgKG9ial9kZXNjLT5maWVsZC5hdHRyaWJ1dGUgPDwgMTYpOworCQl9IGVsc2UgewkvKiBJUE1JICovCisKKwkJCWxlbmd0aCA9IEFDUElfSVBNSV9CVUZGRVJfU0laRTsKKwkJCWZ1bmN0aW9uID0gQUNQSV9SRUFEOworCQl9CisKKwkJYnVmZmVyX2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9idWZmZXJfb2JqZWN0KGxlbmd0aCk7CiAJCWlmICghYnVmZmVyX2Rlc2MpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCQl9CkBAIC0xMTIsMTYgKzEyNywxMyBAQAogCiAJCWFjcGlfZXhfYWNxdWlyZV9nbG9iYWxfbG9jayhvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmZpZWxkX2ZsYWdzKTsKIAotCQkvKgotCQkgKiBQZXJmb3JtIHRoZSByZWFkLgotCQkgKiBOb3RlOiBTbWJ1cyBwcm90b2NvbCB2YWx1ZSBpcyBwYXNzZWQgaW4gdXBwZXIgMTYtYml0cyBvZiBGdW5jdGlvbgotCQkgKi8KKwkJLyogQ2FsbCB0aGUgcmVnaW9uIGhhbmRsZXIgZm9yIHRoZSByZWFkICovCisKIAkJc3RhdHVzID0gYWNwaV9leF9hY2Nlc3NfcmVnaW9uKG9ial9kZXNjLCAwLAogCQkJCQkgICAgICAgQUNQSV9DQVNUX1BUUihhY3BpX2ludGVnZXIsCiAJCQkJCQkJICAgICBidWZmZXJfZGVzYy0+CiAJCQkJCQkJICAgICBidWZmZXIucG9pbnRlciksCi0JCQkJCSAgICAgICBBQ1BJX1JFQUQgfCAob2JqX2Rlc2MtPmZpZWxkLgotCQkJCQkJCSAgICBhdHRyaWJ1dGUgPDwgMTYpKTsKKwkJCQkJICAgICAgIGZ1bmN0aW9uKTsKIAkJYWNwaV9leF9yZWxlYXNlX2dsb2JhbF9sb2NrKG9ial9kZXNjLT5jb21tb25fZmllbGQuZmllbGRfZmxhZ3MpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjEyLDYgKzIyNCw3IEBACiAJdTMyIGxlbmd0aDsKIAl2b2lkICpidWZmZXI7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYnVmZmVyX2Rlc2M7CisJdTMyIGZ1bmN0aW9uOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZXhfd3JpdGVfZGF0YV90b19maWVsZCwgb2JqX2Rlc2MpOwogCkBAIC0yMzQsMzkgKzI0Nyw1NiBAQAogCQl9CiAJfSBlbHNlIGlmICgob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpICYmCiAJCSAgIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09Ci0JCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUykpIHsKKwkJICAgIEFDUElfQURSX1NQQUNFX1NNQlVTCisJCSAgICB8fCBvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CisJCSAgICBBQ1BJX0FEUl9TUEFDRV9JUE1JKSkgewogCQkvKgotCQkgKiBUaGlzIGlzIGFuIFNNQnVzIHdyaXRlLiAgV2Ugd2lsbCBieXBhc3MgdGhlIGVudGlyZSBmaWVsZCBtZWNoYW5pc20KLQkJICogYW5kIGhhbmRvZmYgdGhlIGJ1ZmZlciBkaXJlY3RseSB0byB0aGUgaGFuZGxlci4KKwkJICogVGhpcyBpcyBhbiBTTUJ1cyBvciBJUE1JIHdyaXRlLiBXZSB3aWxsIGJ5cGFzcyB0aGUgZW50aXJlIGZpZWxkCisJCSAqIG1lY2hhbmlzbSBhbmQgaGFuZG9mZiB0aGUgYnVmZmVyIGRpcmVjdGx5IHRvIHRoZSBoYW5kbGVyLiBGb3IKKwkJICogdGhlc2UgYWRkcmVzcyBzcGFjZXMsIHRoZSBidWZmZXIgaXMgYmktZGlyZWN0aW9uYWw7IG9uIGEgd3JpdGUsCisJCSAqIHJldHVybiBkYXRhIGlzIHJldHVybmVkIGluIHRoZSBzYW1lIGJ1ZmZlci4KIAkJICoKLQkJICogU291cmNlIG11c3QgYmUgYSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIChBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFKS4KKwkJICogU291cmNlIG11c3QgYmUgYSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplOgorCQkgKiBBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFIG9yIEFDUElfSVBNSV9CVUZGRVJfU0laRS4KKwkJICoKKwkJICogTm90ZTogU01CdXMgcHJvdG9jb2wgdHlwZSBpcyBwYXNzZWQgaW4gdXBwZXIgMTYtYml0cyBvZiBGdW5jdGlvbgogCQkgKi8KIAkJaWYgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiU01CdXMgd3JpdGUgcmVxdWlyZXMgQnVmZmVyLCBmb3VuZCB0eXBlICVzIiwKKwkJCQkgICAgIlNNQnVzIG9yIElQTUkgd3JpdGUgcmVxdWlyZXMgQnVmZmVyLCBmb3VuZCB0eXBlICVzIiwKIAkJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShzb3VyY2VfZGVzYykpKTsKIAogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwogCQl9CiAKLQkJaWYgKHNvdXJjZV9kZXNjLT5idWZmZXIubGVuZ3RoIDwgQUNQSV9TTUJVU19CVUZGRVJfU0laRSkgeworCQlpZiAob2JqX2Rlc2MtPmZpZWxkLnJlZ2lvbl9vYmotPnJlZ2lvbi5zcGFjZV9pZCA9PQorCQkgICAgQUNQSV9BRFJfU1BBQ0VfU01CVVMpIHsKKwkJCWxlbmd0aCA9IEFDUElfU01CVVNfQlVGRkVSX1NJWkU7CisJCQlmdW5jdGlvbiA9CisJCQkgICAgQUNQSV9XUklURSB8IChvYmpfZGVzYy0+ZmllbGQuYXR0cmlidXRlIDw8IDE2KTsKKwkJfSBlbHNlIHsJLyogSVBNSSAqLworCisJCQlsZW5ndGggPSBBQ1BJX0lQTUlfQlVGRkVSX1NJWkU7CisJCQlmdW5jdGlvbiA9IEFDUElfV1JJVEU7CisJCX0KKworCQlpZiAoc291cmNlX2Rlc2MtPmJ1ZmZlci5sZW5ndGggPCBsZW5ndGgpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJTTUJ1cyB3cml0ZSByZXF1aXJlcyBCdWZmZXIgb2YgbGVuZ3RoICVYLCBmb3VuZCBsZW5ndGggJVgiLAotCQkJCSAgICBBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFLAotCQkJCSAgICBzb3VyY2VfZGVzYy0+YnVmZmVyLmxlbmd0aCkpOworCQkJCSAgICAiU01CdXMgb3IgSVBNSSB3cml0ZSByZXF1aXJlcyBCdWZmZXIgb2YgbGVuZ3RoICVYLCBmb3VuZCBsZW5ndGggJVgiLAorCQkJCSAgICBsZW5ndGgsIHNvdXJjZV9kZXNjLT5idWZmZXIubGVuZ3RoKSk7CiAKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfQlVGRkVSX0xJTUlUKTsKIAkJfQogCi0JCWJ1ZmZlcl9kZXNjID0KLQkJICAgIGFjcGlfdXRfY3JlYXRlX2J1ZmZlcl9vYmplY3QoQUNQSV9TTUJVU19CVUZGRVJfU0laRSk7CisJCS8qIENyZWF0ZSB0aGUgYmktZGlyZWN0aW9uYWwgYnVmZmVyICovCisKKwkJYnVmZmVyX2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9idWZmZXJfb2JqZWN0KGxlbmd0aCk7CiAJCWlmICghYnVmZmVyX2Rlc2MpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCQl9CiAKIAkJYnVmZmVyID0gYnVmZmVyX2Rlc2MtPmJ1ZmZlci5wb2ludGVyOwotCQlBQ1BJX01FTUNQWShidWZmZXIsIHNvdXJjZV9kZXNjLT5idWZmZXIucG9pbnRlciwKLQkJCSAgICBBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFKTsKKwkJQUNQSV9NRU1DUFkoYnVmZmVyLCBzb3VyY2VfZGVzYy0+YnVmZmVyLnBvaW50ZXIsIGxlbmd0aCk7CiAKIAkJLyogTG9jayBlbnRpcmUgdHJhbnNhY3Rpb24gaWYgcmVxdWVzdGVkICovCiAKQEAgLTI3NSwxMiArMzA1LDEwIEBACiAJCS8qCiAJCSAqIFBlcmZvcm0gdGhlIHdyaXRlIChyZXR1cm5zIHN0YXR1cyBhbmQgcGVyaGFwcyBkYXRhIGluIHRoZQogCQkgKiBzYW1lIGJ1ZmZlcikKLQkJICogTm90ZTogU01CdXMgcHJvdG9jb2wgdHlwZSBpcyBwYXNzZWQgaW4gdXBwZXIgMTYtYml0cyBvZiBGdW5jdGlvbi4KIAkJICovCiAJCXN0YXR1cyA9IGFjcGlfZXhfYWNjZXNzX3JlZ2lvbihvYmpfZGVzYywgMCwKIAkJCQkJICAgICAgIChhY3BpX2ludGVnZXIgKikgYnVmZmVyLAotCQkJCQkgICAgICAgQUNQSV9XUklURSB8IChvYmpfZGVzYy0+ZmllbGQuCi0JCQkJCQkJICAgICBhdHRyaWJ1dGUgPDwgMTYpKTsKKwkJCQkJICAgICAgIGZ1bmN0aW9uKTsKIAkJYWNwaV9leF9yZWxlYXNlX2dsb2JhbF9sb2NrKG9ial9kZXNjLT5jb21tb25fZmllbGQuZmllbGRfZmxhZ3MpOwogCiAJCSpyZXN1bHRfZGVzYyA9IGJ1ZmZlcl9kZXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZsZGlvLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYwppbmRleCA2Njg3YmUxLi5kN2IzYjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYwpAQCAtMTIwLDEyICsxMjAsMTMgQEAKIAl9CiAKIAkvKgotCSAqIEV4aXQgbm93IGZvciBTTUJ1cyBhZGRyZXNzIHNwYWNlLCBpdCBoYXMgYSBub24tbGluZWFyIGFkZHJlc3Mgc3BhY2UKKwkgKiBFeGl0IG5vdyBmb3IgU01CdXMgb3IgSVBNSSBhZGRyZXNzIHNwYWNlLCBpdCBoYXMgYSBub24tbGluZWFyIGFkZHJlc3Mgc3BhY2UKIAkgKiBhbmQgdGhlIHJlcXVlc3QgY2Fubm90IGJlIGRpcmVjdGx5IHZhbGlkYXRlZAogCSAqLwotCWlmIChyZ25fZGVzYy0+cmVnaW9uLnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NNQlVTKSB7CisJaWYgKHJnbl9kZXNjLT5yZWdpb24uc3BhY2VfaWQgPT0gQUNQSV9BRFJfU1BBQ0VfU01CVVMgfHwKKwkgICAgcmduX2Rlc2MtPnJlZ2lvbi5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9JUE1JKSB7CiAKLQkJLyogU01CdXMgaGFzIGEgbm9uLWxpbmVhciBhZGRyZXNzIHNwYWNlICovCisJCS8qIFNNQnVzIG9yIElQTUkgaGFzIGEgbm9uLWxpbmVhciBhZGRyZXNzIHNwYWNlICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4dXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCmluZGV4IDg3NzMwZTkuLjdkNDFmOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCkBAIC0zNTgsNTAgKzM1OCw2NyBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nCiAgKgotICogUEFSQU1FVEVSUzogIG51bWVyaWNfaWQgICAgICAtIEVJU0EgSUQgdG8gYmUgY29udmVydGVkCisgKiBQQVJBTUVURVJTOiAgY29tcHJlc3NlZF9pZCAgIC0gRUlTQUlEIHRvIGJlIGNvbnZlcnRlZAogICogICAgICAgICAgICAgIG91dF9zdHJpbmcgICAgICAtIFdoZXJlIHRvIHB1dCB0aGUgY29udmVydGVkIHN0cmluZyAoOCBieXRlcykKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBDb252ZXJ0IGEgbnVtZXJpYyBFSVNBIElEIHRvIHN0cmluZyByZXByZXNlbnRhdGlvbgorICogREVTQ1JJUFRJT046IENvbnZlcnQgYSBudW1lcmljIEVJU0FJRCB0byBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFJldHVybgorICogICAgICAgICAgICAgIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBzdHJpbmcuIFRoZSBzdHJpbmcKKyAqICAgICAgICAgICAgICByZXR1cm5lZCBpcyBhbHdheXMgZXhhY3RseSBvZiBsZW5ndGggQUNQSV9FSVNBSURfU1RSSU5HX1NJWkUKKyAqICAgICAgICAgICAgICAoaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdG9yKS4gVGhlIEVJU0FJRCBpcyBhbHdheXMgMzIgYml0cy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcodTMyIG51bWVyaWNfaWQsIGNoYXIgKm91dF9zdHJpbmcpCit2b2lkIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoY2hhciAqb3V0X3N0cmluZywgYWNwaV9pbnRlZ2VyIGNvbXByZXNzZWRfaWQpCiB7Ci0JdTMyIGVpc2FfaWQ7CisJdTMyIHN3YXBwZWRfaWQ7CiAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKKwkvKiBUaGUgRUlTQUlEIHNob3VsZCBiZSBhIDMyLWJpdCBpbnRlZ2VyICovCisKKwlpZiAoY29tcHJlc3NlZF9pZCA+IEFDUElfVUlOVDMyX01BWCkgeworCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCisJCQkgICAgICAiRXhwZWN0ZWQgRUlTQUlEIGlzIGxhcmdlciB0aGFuIDMyIGJpdHM6IDB4JTguOFglOC44WCwgdHJ1bmNhdGluZyIsCisJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoY29tcHJlc3NlZF9pZCkpKTsKKwl9CisKIAkvKiBTd2FwIElEIHRvIGJpZy1lbmRpYW4gdG8gZ2V0IGNvbnRpZ3VvdXMgYml0cyAqLwogCi0JZWlzYV9pZCA9IGFjcGlfdXRfZHdvcmRfYnl0ZV9zd2FwKG51bWVyaWNfaWQpOworCXN3YXBwZWRfaWQgPSBhY3BpX3V0X2R3b3JkX2J5dGVfc3dhcCgodTMyKWNvbXByZXNzZWRfaWQpOwogCi0Jb3V0X3N0cmluZ1swXSA9IChjaGFyKSgnQCcgKyAoKCh1bnNpZ25lZCBsb25nKWVpc2FfaWQgPj4gMjYpICYgMHgxZikpOwotCW91dF9zdHJpbmdbMV0gPSAoY2hhcikoJ0AnICsgKChlaXNhX2lkID4+IDIxKSAmIDB4MWYpKTsKLQlvdXRfc3RyaW5nWzJdID0gKGNoYXIpKCdAJyArICgoZWlzYV9pZCA+PiAxNikgJiAweDFmKSk7Ci0Jb3V0X3N0cmluZ1szXSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcikgZWlzYV9pZCwgMTIpOwotCW91dF9zdHJpbmdbNF0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpIGVpc2FfaWQsIDgpOwotCW91dF9zdHJpbmdbNV0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpIGVpc2FfaWQsIDQpOwotCW91dF9zdHJpbmdbNl0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpIGVpc2FfaWQsIDApOworCS8qIEZpcnN0IDMgYnl0ZXMgYXJlIHVwcGVyY2FzZSBsZXR0ZXJzLiBOZXh0IDQgYnl0ZXMgYXJlIGhleGFkZWNpbWFsICovCisKKwlvdXRfc3RyaW5nWzBdID0KKwkgICAgKGNoYXIpKDB4NDAgKyAoKCh1bnNpZ25lZCBsb25nKXN3YXBwZWRfaWQgPj4gMjYpICYgMHgxRikpOworCW91dF9zdHJpbmdbMV0gPSAoY2hhcikoMHg0MCArICgoc3dhcHBlZF9pZCA+PiAyMSkgJiAweDFGKSk7CisJb3V0X3N0cmluZ1syXSA9IChjaGFyKSgweDQwICsgKChzd2FwcGVkX2lkID4+IDE2KSAmIDB4MUYpKTsKKwlvdXRfc3RyaW5nWzNdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigoYWNwaV9pbnRlZ2VyKXN3YXBwZWRfaWQsIDEyKTsKKwlvdXRfc3RyaW5nWzRdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigoYWNwaV9pbnRlZ2VyKXN3YXBwZWRfaWQsIDgpOworCW91dF9zdHJpbmdbNV0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpc3dhcHBlZF9pZCwgNCk7CisJb3V0X3N0cmluZ1s2XSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcilzd2FwcGVkX2lkLCAwKTsKIAlvdXRfc3RyaW5nWzddID0gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9leF91bnNpZ25lZF9pbnRlZ2VyX3RvX3N0cmluZworICogRlVOQ1RJT046ICAgIGFjcGlfZXhfaW50ZWdlcl90b19zdHJpbmcKICAqCi0gKiBQQVJBTUVURVJTOiAgVmFsdWUgICAgICAgICAgIC0gVmFsdWUgdG8gYmUgY29udmVydGVkCi0gKiAgICAgICAgICAgICAgb3V0X3N0cmluZyAgICAgIC0gV2hlcmUgdG8gcHV0IHRoZSBjb252ZXJ0ZWQgc3RyaW5nICg4IGJ5dGVzKQorICogUEFSQU1FVEVSUzogIG91dF9zdHJpbmcgICAgICAtIFdoZXJlIHRvIHB1dCB0aGUgY29udmVydGVkIHN0cmluZy4gQXQgbGVhc3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSBieXRlcyBhcmUgbmVlZGVkIHRvIGhvbGQgdGhlIGxhcmdlc3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSA2NC1iaXQgaW50ZWdlci4KKyAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZSwgc3RyaW5nCiAgKgotICogREVTQ1JJUFRJT046IENvbnZlcnQgYSBudW1iZXIgdG8gc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBBc3N1bWVzIHN0cmluZwotICogICAgICAgICAgICAgIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgc3RyaW5nLgorICogREVTQ1JJUFRJT046IENvbnZlcnQgYSA2NC1iaXQgaW50ZWdlciB0byBkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAqICAgICAgICAgICAgICBBc3N1bWVzIHN0cmluZyBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHN0cmluZy4gVGhlCisgKiAgICAgICAgICAgICAgbGFyZ2VzdCBzdHJpbmcgaXMgKEFDUElfTUFYNjRfREVDSU1BTF9ESUdJVFMgKyAxKS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGFjcGlfZXhfdW5zaWduZWRfaW50ZWdlcl90b19zdHJpbmcoYWNwaV9pbnRlZ2VyIHZhbHVlLCBjaGFyICpvdXRfc3RyaW5nKQordm9pZCBhY3BpX2V4X2ludGVnZXJfdG9fc3RyaW5nKGNoYXIgKm91dF9zdHJpbmcsIGFjcGlfaW50ZWdlciB2YWx1ZSkKIHsKIAl1MzIgY291bnQ7CiAJdTMyIGRpZ2l0c19uZWVkZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKaW5kZXggZDNiN2UzNy4uYzI4YzQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYwpAQCAtODIsNyArODIsNyBAQAogCiAJLyogR2V0IGN1cnJlbnQgdmFsdWUgb2YgdGhlIGVuYWJsZSByZWdpc3RlciB0aGF0IGNvbnRhaW5zIHRoaXMgR1BFICovCiAKLQlzdGF0dXMgPSBhY3BpX3JlYWQoJmVuYWJsZV9tYXNrLCAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3JlYWQoJmVuYWJsZV9tYXNrLCAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuIChzdGF0dXMpOwogCX0KQEAgLTk1LDcgKzk1LDcgQEAKIAogCS8qIFdyaXRlIHRoZSB1cGRhdGVkIGVuYWJsZSBtYXNrICovCiAKLQlzdGF0dXMgPSBhY3BpX3dyaXRlKGVuYWJsZV9tYXNrLCAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKGVuYWJsZV9tYXNrLCAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKQEAgLTEzMCw4ICsxMzAsOCBAQAogCiAJLyogV3JpdGUgdGhlIGVudGlyZSBHUEUgKHJ1bnRpbWUpIGVuYWJsZSByZWdpc3RlciAqLwogCi0Jc3RhdHVzID0gYWNwaV93cml0ZShncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sCi0JCQkgICAgJmdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfYWRkcmVzcyk7CisJc3RhdHVzID0gYWNwaV9od193cml0ZShncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sCisJCQkgICAgICAgJmdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfYWRkcmVzcyk7CiAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CkBAIC0xNjMsOCArMTYzLDggQEAKIAkgKiBXcml0ZSBhIG9uZSB0byB0aGUgYXBwcm9wcmlhdGUgYml0IGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8KIAkgKiBjbGVhciB0aGlzIEdQRS4KIAkgKi8KLQlzdGF0dXMgPSBhY3BpX3dyaXRlKHJlZ2lzdGVyX2JpdCwKLQkJCSAgICAmZ3BlX2V2ZW50X2luZm8tPnJlZ2lzdGVyX2luZm8tPnN0YXR1c19hZGRyZXNzKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKHJlZ2lzdGVyX2JpdCwKKwkJCSAgICAgICAmZ3BlX2V2ZW50X2luZm8tPnJlZ2lzdGVyX2luZm8tPnN0YXR1c19hZGRyZXNzKTsKIAogCXJldHVybiAoc3RhdHVzKTsKIH0KQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAJLyogR1BFIGN1cnJlbnRseSBhY3RpdmUgKHN0YXR1cyBiaXQgPT0gMSk/ICovCiAKLQlzdGF0dXMgPSBhY3BpX3JlYWQoJmluX2J5dGUsICZncGVfcmVnaXN0ZXJfaW5mby0+c3RhdHVzX2FkZHJlc3MpOworCXN0YXR1cyA9IGFjcGlfaHdfcmVhZCgmaW5fYnl0ZSwgJmdwZV9yZWdpc3Rlcl9pbmZvLT5zdGF0dXNfYWRkcmVzcyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KQEAgLTI2Niw4ICsyNjYsOCBAQAogCQkvKiBEaXNhYmxlIGFsbCBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV93cml0ZSgweDAwLAotCQkJICAgICAgICZncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2FkZHJlc3MpOworCQkgICAgYWNwaV9od193cml0ZSgweDAwLAorCQkJCSAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5lbmFibGVfYWRkcmVzcyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuIChzdGF0dXMpOwogCQl9CkBAIC0zMDMsOCArMzAzLDggQEAKIAkJLyogQ2xlYXIgc3RhdHVzIG9uIGFsbCBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV93cml0ZSgweEZGLAotCQkJICAgICAgICZncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uc3RhdHVzX2FkZHJlc3MpOworCQkgICAgYWNwaV9od193cml0ZSgweEZGLAorCQkJCSAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5zdGF0dXNfYWRkcmVzcyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuIChzdGF0dXMpOwogCQl9CkBAIC0zNDUsOSArMzQ1LDkgQEAKIAogCQkvKiBFbmFibGUgYWxsICJydW50aW1lIiBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKGdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5lbmFibGVfZm9yX3J1biwKLQkJCQkgICAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS4KLQkJCQkgICAgZW5hYmxlX2FkZHJlc3MpOworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9od193cml0ZShncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2Zvcl9ydW4sCisJCQkJICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLmVuYWJsZV9hZGRyZXNzKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCX0KQEAgLTM4Nyw5ICszODcsOSBAQAogCiAJCS8qIEVuYWJsZSBhbGwgIndha2UiIEdQRXMgaW4gdGhpcyByZWdpc3RlciAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLmVuYWJsZV9mb3Jfd2FrZSwKLQkJCQkgICAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS4KLQkJCQkgICAgZW5hYmxlX2FkZHJlc3MpOworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9od193cml0ZShncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2Zvcl93YWtlLAorCQkJCSAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5lbmFibGVfYWRkcmVzcyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuIChzdGF0dXMpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYwppbmRleCAyM2Q1NTA1Li4xNWM5ZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKQEAgLTYyLDYgKzYyLDE4NCBAQAogCQkgICAgICAgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWdpc3Rlcl9hLAogCQkgICAgICAgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWdpc3Rlcl9iKTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2h3X3ZhbGlkYXRlX3JlZ2lzdGVyCisgKgorICogUEFSQU1FVEVSUzogIFJlZyAgICAgICAgICAgICAgICAgLSBHQVMgcmVnaXN0ZXIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgbWF4X2JpdF93aWR0aCAgICAgICAtIE1heCBiaXRfd2lkdGggc3VwcG9ydGVkICgzMiBvciA2NCkKKyAqICAgICAgICAgICAgICBBZGRyZXNzICAgICAgICAgICAgIC0gUG9pbnRlciB0byB3aGVyZSB0aGUgZ2FzLT5hZGRyZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJldHVybmVkCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgYSBHQVMgcmVnaXN0ZXIuIENoZWNrcyB0aGUgR0FTCisgKiAgICAgICAgICAgICAgcG9pbnRlciwgQWRkcmVzcywgc3BhY2VfaWQsIGJpdF93aWR0aCwgYW5kIGJpdF9vZmZzZXQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfdmFsaWRhdGVfcmVnaXN0ZXIoc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWcsCisJCQkgIHU4IG1heF9iaXRfd2lkdGgsIHU2NCAqYWRkcmVzcykKK3sKKworCS8qIE11c3QgaGF2ZSBhIHZhbGlkIHBvaW50ZXIgdG8gYSBHQVMgc3RydWN0dXJlICovCisKKwlpZiAoIXJlZykgeworCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOworCX0KKworCS8qCisJICogQ29weSB0aGUgdGFyZ2V0IGFkZHJlc3MuIFRoaXMgaGFuZGxlcyBwb3NzaWJsZSBhbGlnbm1lbnQgaXNzdWVzLgorCSAqIEFkZHJlc3MgbXVzdCBub3QgYmUgbnVsbC4gQSBudWxsIGFkZHJlc3MgYWxzbyBpbmRpY2F0ZXMgYW4gb3B0aW9uYWwKKwkgKiBBQ1BJIHJlZ2lzdGVyIHRoYXQgaXMgbm90IHN1cHBvcnRlZCwgc28gbm8gZXJyb3IgbWVzc2FnZS4KKwkgKi8KKwlBQ1BJX01PVkVfNjRfVE9fNjQoYWRkcmVzcywgJnJlZy0+YWRkcmVzcyk7CisJaWYgKCEoKmFkZHJlc3MpKSB7CisJCXJldHVybiAoQUVfQkFEX0FERFJFU1MpOworCX0KKworCS8qIFZhbGlkYXRlIHRoZSBzcGFjZV9pRCAqLworCisJaWYgKChyZWctPnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlkpICYmCisJICAgIChyZWctPnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykpIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCSAgICAiVW5zdXBwb3J0ZWQgYWRkcmVzcyBzcGFjZTogMHglWCIsIHJlZy0+c3BhY2VfaWQpKTsKKwkJcmV0dXJuIChBRV9TVVBQT1JUKTsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgYml0X3dpZHRoICovCisKKwlpZiAoKHJlZy0+Yml0X3dpZHRoICE9IDgpICYmCisJICAgIChyZWctPmJpdF93aWR0aCAhPSAxNikgJiYKKwkgICAgKHJlZy0+Yml0X3dpZHRoICE9IDMyKSAmJiAocmVnLT5iaXRfd2lkdGggIT0gbWF4X2JpdF93aWR0aCkpIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCSAgICAiVW5zdXBwb3J0ZWQgcmVnaXN0ZXIgYml0IHdpZHRoOiAweCVYIiwKKwkJCSAgICByZWctPmJpdF93aWR0aCkpOworCQlyZXR1cm4gKEFFX1NVUFBPUlQpOworCX0KKworCS8qIFZhbGlkYXRlIHRoZSBiaXRfb2Zmc2V0LiBKdXN0IGEgd2FybmluZyBmb3Igbm93LiAqLworCisJaWYgKHJlZy0+Yml0X29mZnNldCAhPSAwKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICJVbnN1cHBvcnRlZCByZWdpc3RlciBiaXQgb2Zmc2V0OiAweCVYIiwKKwkJCSAgICAgIHJlZy0+Yml0X29mZnNldCkpOworCX0KKworCXJldHVybiAoQUVfT0spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfaHdfcmVhZAorICoKKyAqIFBBUkFNRVRFUlM6ICBWYWx1ZSAgICAgICAgICAgICAgIC0gV2hlcmUgdGhlIHZhbHVlIGlzIHJldHVybmVkCisgKiAgICAgICAgICAgICAgUmVnICAgICAgICAgICAgICAgICAtIEdBUyByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFJlYWQgZnJvbSBlaXRoZXIgbWVtb3J5IG9yIElPIHNwYWNlLiBUaGlzIGlzIGEgMzItYml0IG1heAorICogICAgICAgICAgICAgIHZlcnNpb24gb2YgYWNwaV9yZWFkLCB1c2VkIGludGVybmFsbHkgc2luY2UgdGhlIG92ZXJoZWFkIG9mCisgKiAgICAgICAgICAgICAgNjQtYml0IHZhbHVlcyBpcyBub3QgbmVlZGVkLgorICoKKyAqIExJTUlUQVRJT05TOiA8VGhlc2UgbGltaXRhdGlvbnMgYWxzbyBhcHBseSB0byBhY3BpX2h3X3dyaXRlPgorICogICAgICBiaXRfd2lkdGggbXVzdCBiZSBleGFjdGx5IDgsIDE2LCBvciAzMi4KKyAqICAgICAgc3BhY2VfaUQgbXVzdCBiZSBzeXN0ZW1fbWVtb3J5IG9yIHN5c3RlbV9pTy4KKyAqICAgICAgYml0X29mZnNldCBhbmQgYWNjZXNzX3dpZHRoIGFyZSBjdXJyZW50bHkgaWdub3JlZCwgYXMgdGhlcmUgaGFzCisgKiAgICAgICAgICBub3QgYmVlbiBhIG5lZWQgdG8gaW1wbGVtZW50IHRoZXNlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzIGFjcGlfaHdfcmVhZCh1MzIgKnZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZykKK3sKKwl1NjQgYWRkcmVzczsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoaHdfcmVhZCk7CisKKwkvKiBWYWxpZGF0ZSBjb250ZW50cyBvZiB0aGUgR0FTIHJlZ2lzdGVyICovCisKKwlzdGF0dXMgPSBhY3BpX2h3X3ZhbGlkYXRlX3JlZ2lzdGVyKHJlZywgMzIsICZhZGRyZXNzKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCS8qIEluaXRpYWxpemUgZW50aXJlIDMyLWJpdCByZXR1cm4gdmFsdWUgdG8gemVybyAqLworCisJKnZhbHVlID0gMDsKKworCS8qCisJICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLiBQQ0lfQ29uZmlnIGlzCisJICogbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3R1cmUgaXMgaW5zdWZmaWNpZW50CisJICovCisJaWYgKHJlZy0+c3BhY2VfaWQgPT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWSkgeworCQlzdGF0dXMgPSBhY3BpX29zX3JlYWRfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpCisJCQkJCSAgICAgYWRkcmVzcywgdmFsdWUsIHJlZy0+Yml0X3dpZHRoKTsKKwl9IGVsc2UgewkJLyogQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPLCB2YWxpZGF0ZWQgZWFybGllciAqLworCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpCisJCQkJCSAgIGFkZHJlc3MsIHZhbHVlLCByZWctPmJpdF93aWR0aCk7CisJfQorCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKKwkJCSAgIlJlYWQ6ICAlOC44WCB3aWR0aCAlMmQgZnJvbSAlOC44WCU4LjhYICglcylcbiIsCisJCQkgICp2YWx1ZSwgcmVnLT5iaXRfd2lkdGgsIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzKSwKKwkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUocmVnLT5zcGFjZV9pZCkpKTsKKworCXJldHVybiAoc3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2h3X3dyaXRlCisgKgorICogUEFSQU1FVEVSUzogIFZhbHVlICAgICAgICAgICAgICAgLSBWYWx1ZSB0byBiZSB3cml0dGVuCisgKiAgICAgICAgICAgICAgUmVnICAgICAgICAgICAgICAgICAtIEdBUyByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFdyaXRlIHRvIGVpdGhlciBtZW1vcnkgb3IgSU8gc3BhY2UuIFRoaXMgaXMgYSAzMi1iaXQgbWF4CisgKiAgICAgICAgICAgICAgdmVyc2lvbiBvZiBhY3BpX3dyaXRlLCB1c2VkIGludGVybmFsbHkgc2luY2UgdGhlIG92ZXJoZWFkIG9mCisgKiAgICAgICAgICAgICAgNjQtYml0IHZhbHVlcyBpcyBub3QgbmVlZGVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzIGFjcGlfaHdfd3JpdGUodTMyIHZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZykKK3sKKwl1NjQgYWRkcmVzczsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoaHdfd3JpdGUpOworCisJLyogVmFsaWRhdGUgY29udGVudHMgb2YgdGhlIEdBUyByZWdpc3RlciAqLworCisJc3RhdHVzID0gYWNwaV9od192YWxpZGF0ZV9yZWdpc3RlcihyZWcsIDMyLCAmYWRkcmVzcyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisKKwkvKgorCSAqIFR3byBhZGRyZXNzIHNwYWNlcyBzdXBwb3J0ZWQ6IE1lbW9yeSBvciBJTy4gUENJX0NvbmZpZyBpcworCSAqIG5vdCBzdXBwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoZSBHQVMgc3RydWN0dXJlIGlzIGluc3VmZmljaWVudAorCSAqLworCWlmIChyZWctPnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlkpIHsKKwkJc3RhdHVzID0gYWNwaV9vc193cml0ZV9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykKKwkJCQkJICAgICAgYWRkcmVzcywgdmFsdWUsIHJlZy0+Yml0X3dpZHRoKTsKKwl9IGVsc2UgewkJLyogQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPLCB2YWxpZGF0ZWQgZWFybGllciAqLworCisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfcG9ydCgoYWNwaV9pb19hZGRyZXNzKQorCQkJCQkgICAgYWRkcmVzcywgdmFsdWUsIHJlZy0+Yml0X3dpZHRoKTsKKwl9CisKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLAorCQkJICAiV3JvdGU6ICU4LjhYIHdpZHRoICUyZCAgIHRvICU4LjhYJTguOFggKCVzKVxuIiwKKwkJCSAgdmFsdWUsIHJlZy0+Yml0X3dpZHRoLCBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzcyksCisJCQkgIGFjcGlfdXRfZ2V0X3JlZ2lvbl9uYW1lKHJlZy0+c3BhY2VfaWQpKSk7CisKKwlyZXR1cm4gKHN0YXR1cyk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXMKQEAgLTE1MiwxNSArMzMwLDE2IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3dyaXRlX3BtMV9jb250cm9sKTsKIAotCXN0YXR1cyA9IGFjcGlfd3JpdGUocG0xYV9jb250cm9sLCAmYWNwaV9nYmxfRkFEVC54cG0xYV9jb250cm9sX2Jsb2NrKTsKKwlzdGF0dXMgPQorCSAgICBhY3BpX2h3X3dyaXRlKHBtMWFfY29udHJvbCwgJmFjcGlfZ2JsX0ZBRFQueHBtMWFfY29udHJvbF9ibG9jayk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAogCWlmIChhY3BpX2dibF9GQURULnhwbTFiX2NvbnRyb2xfYmxvY2suYWRkcmVzcykgewogCQlzdGF0dXMgPQotCQkgICAgYWNwaV93cml0ZShwbTFiX2NvbnRyb2wsCi0JCQkgICAgICAgJmFjcGlfZ2JsX0ZBRFQueHBtMWJfY29udHJvbF9ibG9jayk7CisJCSAgICBhY3BpX2h3X3dyaXRlKHBtMWJfY29udHJvbCwKKwkJCQkgICZhY3BpX2dibF9GQURULnhwbTFiX2NvbnRyb2xfYmxvY2spOwogCX0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KQEAgLTIxOCwxMiArMzk3LDEzIEBACiAKIAljYXNlIEFDUElfUkVHSVNURVJfUE0yX0NPTlRST0w6CS8qIDgtYml0IGFjY2VzcyAqLwogCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2h3X3JlYWQoJnZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0yX2NvbnRyb2xfYmxvY2spOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9QTV9USU1FUjoJLyogMzItYml0IGFjY2VzcyAqLwogCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFR0lTVEVSX1NNSV9DT01NQU5EX0JMT0NLOgkvKiA4LWJpdCBhY2Nlc3MgKi8KQEAgLTM0MCw3ICs1MjAsOCBAQAogCQkgKiBhcyBwZXIgdGhlIEFDUEkgc3BlYy4KIAkJICovCiAJCXN0YXR1cyA9Ci0JCSAgICBhY3BpX3JlYWQoJnJlYWRfdmFsdWUsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CisJCSAgICBhY3BpX2h3X3JlYWQoJnJlYWRfdmFsdWUsCisJCQkJICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJZ290byBleGl0OwogCQl9CkBAIC0zNTAsMTIgKzUzMSwxMyBAQAogCQlBQ1BJX0lOU0VSVF9CSVRTKHZhbHVlLCBBQ1BJX1BNMl9DT05UUk9MX1BSRVNFUlZFRF9CSVRTLAogCQkJCSByZWFkX3ZhbHVlKTsKIAotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0yX2NvbnRyb2xfYmxvY2spOworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9od193cml0ZSh2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfUkVHSVNURVJfUE1fVElNRVI6CS8qIDMyLWJpdCBhY2Nlc3MgKi8KIAotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2spOworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2spOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9TTUlfQ09NTUFORF9CTE9DSzoJLyogOC1iaXQgYWNjZXNzICovCkBAIC00MDEsNyArNTgzLDcgQEAKIAogCS8qIFRoZSBmaXJzdCByZWdpc3RlciBpcyBhbHdheXMgcmVxdWlyZWQgKi8KIAotCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWVfYSwgcmVnaXN0ZXJfYSk7CisJc3RhdHVzID0gYWNwaV9od19yZWFkKCZ2YWx1ZV9hLCByZWdpc3Rlcl9hKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuIChzdGF0dXMpOwogCX0KQEAgLTQwOSw3ICs1OTEsNyBAQAogCS8qIFNlY29uZCByZWdpc3RlciBpcyBvcHRpb25hbCAqLwogCiAJaWYgKHJlZ2lzdGVyX2ItPmFkZHJlc3MpIHsKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZV9iLCByZWdpc3Rlcl9iKTsKKwkJc3RhdHVzID0gYWNwaV9od19yZWFkKCZ2YWx1ZV9iLCByZWdpc3Rlcl9iKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCX0KQEAgLTQ1Miw3ICs2MzQsNyBAQAogCiAJLyogVGhlIGZpcnN0IHJlZ2lzdGVyIGlzIGFsd2F5cyByZXF1aXJlZCAqLwogCi0Jc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgcmVnaXN0ZXJfYSk7CisJc3RhdHVzID0gYWNwaV9od193cml0ZSh2YWx1ZSwgcmVnaXN0ZXJfYSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybiAoc3RhdHVzKTsKIAl9CkBAIC00NzAsNyArNjUyLDcgQEAKIAkgKiBhbmQgd3JpdGVzIGhhdmUgbm8gc2lkZSBlZmZlY3RzIgogCSAqLwogCWlmIChyZWdpc3Rlcl9iLT5hZGRyZXNzKSB7Ci0JCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsIHJlZ2lzdGVyX2IpOworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKHZhbHVlLCByZWdpc3Rlcl9iKTsKIAl9CiAKIAlyZXR1cm4gKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dGltZXIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jCmluZGV4IGI3ZjUyMmMuLjZiMjgyZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAl9CiAKIAlzdGF0dXMgPQotCSAgICBhY3BpX2h3X2xvd19sZXZlbF9yZWFkKDMyLCB0aWNrcywgJmFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrKTsKKwkgICAgYWNwaV9od19yZWFkKHRpY2tzLCAmYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2spOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCmluZGV4IDk4Mjk5NzkuLjY0N2M3YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCkBAIC03OCw5ICs3OCwyMiBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9UX0VYSVNUKTsKIAl9CiAKLQkvKiBXcml0ZSB0aGUgcmVzZXQgdmFsdWUgdG8gdGhlIHJlc2V0IHJlZ2lzdGVyICovCisJaWYgKHJlc2V0X3JlZy0+c3BhY2VfaWQgPT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPKSB7CisJCS8qCisJCSAqIEZvciBJL08gc3BhY2UsIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBPU0wuIFRoaXMgYnlwYXNzZXMgdGhlIHBvcnQKKwkJICogdmFsaWRhdGlvbiBtZWNoYW5pc20sIHdoaWNoIG1heSBibG9jayBhIHZhbGlkIHdyaXRlIHRvIHRoZSByZXNldAorCQkgKiByZWdpc3Rlci4KKwkJICovCisJCXN0YXR1cyA9CisJCSAgICBhY3BpX29zX3dyaXRlX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykgcmVzZXRfcmVnLT5hZGRyZXNzLAorCQkJCSAgICAgICBhY3BpX2dibF9GQURULnJlc2V0X3ZhbHVlLAorCQkJCSAgICAgICByZXNldF9yZWctPmJpdF93aWR0aCk7CisJfSBlbHNlIHsKKwkJLyogV3JpdGUgdGhlIHJlc2V0IHZhbHVlIHRvIHRoZSByZXNldCByZWdpc3RlciAqLwogCi0Jc3RhdHVzID0gYWNwaV93cml0ZShhY3BpX2dibF9GQURULnJlc2V0X3ZhbHVlLCByZXNldF9yZWcpOworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKGFjcGlfZ2JsX0ZBRFQucmVzZXRfdmFsdWUsIHJlc2V0X3JlZyk7CisJfQorCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTk3LDY3ICsxMTAsOTIgQEAKICAqCiAgKiBERVNDUklQVElPTjogUmVhZCBmcm9tIGVpdGhlciBtZW1vcnkgb3IgSU8gc3BhY2UuCiAgKgorICogTElNSVRBVElPTlM6IDxUaGVzZSBsaW1pdGF0aW9ucyBhbHNvIGFwcGx5IHRvIGFjcGlfd3JpdGU+CisgKiAgICAgIGJpdF93aWR0aCBtdXN0IGJlIGV4YWN0bHkgOCwgMTYsIDMyLCBvciA2NC4KKyAqICAgICAgc3BhY2VfaUQgbXVzdCBiZSBzeXN0ZW1fbWVtb3J5IG9yIHN5c3RlbV9pTy4KKyAqICAgICAgYml0X29mZnNldCBhbmQgYWNjZXNzX3dpZHRoIGFyZSBjdXJyZW50bHkgaWdub3JlZCwgYXMgdGhlcmUgaGFzCisgKiAgICAgICAgICBub3QgYmVlbiBhIG5lZWQgdG8gaW1wbGVtZW50IHRoZXNlLgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX3JlYWQodTMyICp2YWx1ZSwgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWcpCithY3BpX3N0YXR1cyBhY3BpX3JlYWQodTY0ICpyZXR1cm5fdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKQogeworCXUzMiB2YWx1ZTsKIAl1MzIgd2lkdGg7CiAJdTY0IGFkZHJlc3M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJQUNQSV9GVU5DVElPTl9OQU1FKGFjcGlfcmVhZCk7CiAKLQkvKgotCSAqIE11c3QgaGF2ZSBhIHZhbGlkIHBvaW50ZXIgdG8gYSBHQVMgc3RydWN0dXJlLCBhbmQgYSBub24temVybyBhZGRyZXNzCi0JICogd2l0aGluLgotCSAqLwotCWlmICghcmVnKSB7CisJaWYgKCFyZXR1cm5fdmFsdWUpIHsKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKiBHZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBhZGRyZXNzLiBIYW5kbGVzIHBvc3NpYmxlIGFsaWdubWVudCBpc3N1ZXMgKi8KKwkvKiBWYWxpZGF0ZSBjb250ZW50cyBvZiB0aGUgR0FTIHJlZ2lzdGVyLiBBbGxvdyA2NC1iaXQgdHJhbnNmZXJzICovCiAKLQlBQ1BJX01PVkVfNjRfVE9fNjQoJmFkZHJlc3MsICZyZWctPmFkZHJlc3MpOwotCWlmICghYWRkcmVzcykgewotCQlyZXR1cm4gKEFFX0JBRF9BRERSRVNTKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3ZhbGlkYXRlX3JlZ2lzdGVyKHJlZywgNjQsICZhZGRyZXNzKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOwogCX0KIAotCS8qIFN1cHBvcnRlZCB3aWR0aHMgYXJlIDgvMTYvMzIgKi8KLQogCXdpZHRoID0gcmVnLT5iaXRfd2lkdGg7Ci0JaWYgKCh3aWR0aCAhPSA4KSAmJiAod2lkdGggIT0gMTYpICYmICh3aWR0aCAhPSAzMikpIHsKLQkJcmV0dXJuIChBRV9TVVBQT1JUKTsKKwlpZiAod2lkdGggPT0gNjQpIHsKKwkJd2lkdGggPSAzMjsJLyogQnJlYWsgaW50byB0d28gMzItYml0IHRyYW5zZmVycyAqLwogCX0KIAotCS8qIEluaXRpYWxpemUgZW50aXJlIDMyLWJpdCByZXR1cm4gdmFsdWUgdG8gemVybyAqLworCS8qIEluaXRpYWxpemUgZW50aXJlIDY0LWJpdCByZXR1cm4gdmFsdWUgdG8gemVybyAqLwogCi0JKnZhbHVlID0gMDsKKwkqcmV0dXJuX3ZhbHVlID0gMDsKKwl2YWx1ZSA9IDA7CiAKIAkvKgogCSAqIFR3byBhZGRyZXNzIHNwYWNlcyBzdXBwb3J0ZWQ6IE1lbW9yeSBvciBJTy4gUENJX0NvbmZpZyBpcwogCSAqIG5vdCBzdXBwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoZSBHQVMgc3RydWN0dXJlIGlzIGluc3VmZmljaWVudAogCSAqLwotCXN3aXRjaCAocmVnLT5zcGFjZV9pZCkgewotCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWToKKwlpZiAocmVnLT5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZKSB7CisJCXN0YXR1cyA9IGFjcGlfb3NfcmVhZF9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykKKwkJCQkJICAgICBhZGRyZXNzLCAmdmFsdWUsIHdpZHRoKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKwkJKnJldHVybl92YWx1ZSA9IHZhbHVlOwogCi0JCXN0YXR1cyA9IGFjcGlfb3NfcmVhZF9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgYWRkcmVzcywKLQkJCQkJICAgICB2YWx1ZSwgd2lkdGgpOwotCQlicmVhazsKKwkJaWYgKHJlZy0+Yml0X3dpZHRoID09IDY0KSB7CiAKLQljYXNlIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTzoKKwkJCS8qIFJlYWQgdGhlIHRvcCAzMiBiaXRzICovCiAKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfaHdfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsIHZhbHVlLCB3aWR0aCk7Ci0JCWJyZWFrOworCQkJc3RhdHVzID0gYWNwaV9vc19yZWFkX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQorCQkJCQkJICAgICAoYWRkcmVzcyArIDQpLCAmdmFsdWUsIDMyKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKwkJCSpyZXR1cm5fdmFsdWUgfD0gKCh1NjQpdmFsdWUgPDwgMzIpOworCQl9CisJfSBlbHNlIHsJCS8qIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTywgdmFsaWRhdGVkIGVhcmxpZXIgKi8KIAotCWRlZmF1bHQ6Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIlVuc3VwcG9ydGVkIGFkZHJlc3Mgc3BhY2U6ICVYIiwgcmVnLT5zcGFjZV9pZCkpOwotCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOworCQlzdGF0dXMgPSBhY3BpX2h3X3JlYWRfcG9ydCgoYWNwaV9pb19hZGRyZXNzKQorCQkJCQkgICBhZGRyZXNzLCAmdmFsdWUsIHdpZHRoKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKwkJKnJldHVybl92YWx1ZSA9IHZhbHVlOworCisJCWlmIChyZWctPmJpdF93aWR0aCA9PSA2NCkgeworCisJCQkvKiBSZWFkIHRoZSB0b3AgMzIgYml0cyAqLworCisJCQlzdGF0dXMgPSBhY3BpX2h3X3JlYWRfcG9ydCgoYWNwaV9pb19hZGRyZXNzKQorCQkJCQkJICAgKGFkZHJlc3MgKyA0KSwgJnZhbHVlLCAzMik7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCQkqcmV0dXJuX3ZhbHVlIHw9ICgodTY0KXZhbHVlIDw8IDMyKTsKKwkJfQogCX0KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sCi0JCQkgICJSZWFkOiAgJTguOFggd2lkdGggJTJkIGZyb20gJTguOFglOC44WCAoJXMpXG4iLAotCQkJICAqdmFsdWUsIHdpZHRoLCBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzcyksCisJCQkgICJSZWFkOiAgJTguOFglOC44WCB3aWR0aCAlMmQgZnJvbSAlOC44WCU4LjhYICglcylcbiIsCisJCQkgIEFDUElfRk9STUFUX1VJTlQ2NCgqcmV0dXJuX3ZhbHVlKSwgcmVnLT5iaXRfd2lkdGgsCisJCQkgIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzKSwKIAkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUocmVnLT5zcGFjZV9pZCkpKTsKIAogCXJldHVybiAoc3RhdHVzKTsKQEAgLTE2OSw3ICsyMDcsNyBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3dyaXRlCiAgKgotICogUEFSQU1FVEVSUzogIFZhbHVlICAgICAgICAgICAgICAgLSBUbyBiZSB3cml0dGVuCisgKiBQQVJBTUVURVJTOiAgVmFsdWUgICAgICAgICAgICAgICAtIFZhbHVlIHRvIGJlIHdyaXR0ZW4KICAqICAgICAgICAgICAgICBSZWcgICAgICAgICAgICAgICAgIC0gR0FTIHJlZ2lzdGVyIHN0cnVjdHVyZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKQEAgLTE3Nyw3ICsyMTUsNyBAQAogICogREVTQ1JJUFRJT046IFdyaXRlIHRvIGVpdGhlciBtZW1vcnkgb3IgSU8gc3BhY2UuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfd3JpdGUodTMyIHZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZykKK2FjcGlfc3RhdHVzIGFjcGlfd3JpdGUodTY0IHZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZykKIHsKIAl1MzIgd2lkdGg7CiAJdTY0IGFkZHJlc3M7CkBAIC0xODUsNTQgKzIyMyw2MSBAQAogCiAJQUNQSV9GVU5DVElPTl9OQU1FKGFjcGlfd3JpdGUpOwogCi0JLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgR0FTIHN0cnVjdHVyZSwgYW5kIGEgbm9uLXplcm8gYWRkcmVzcwotCSAqIHdpdGhpbi4KLQkgKi8KLQlpZiAoIXJlZykgewotCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOworCS8qIFZhbGlkYXRlIGNvbnRlbnRzIG9mIHRoZSBHQVMgcmVnaXN0ZXIuIEFsbG93IDY0LWJpdCB0cmFuc2ZlcnMgKi8KKworCXN0YXR1cyA9IGFjcGlfaHdfdmFsaWRhdGVfcmVnaXN0ZXIocmVnLCA2NCwgJmFkZHJlc3MpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCi0JLyogR2V0IGEgbG9jYWwgY29weSBvZiB0aGUgYWRkcmVzcy4gSGFuZGxlcyBwb3NzaWJsZSBhbGlnbm1lbnQgaXNzdWVzICovCi0KLQlBQ1BJX01PVkVfNjRfVE9fNjQoJmFkZHJlc3MsICZyZWctPmFkZHJlc3MpOwotCWlmICghYWRkcmVzcykgewotCQlyZXR1cm4gKEFFX0JBRF9BRERSRVNTKTsKLQl9Ci0KLQkvKiBTdXBwb3J0ZWQgd2lkdGhzIGFyZSA4LzE2LzMyICovCi0KIAl3aWR0aCA9IHJlZy0+Yml0X3dpZHRoOwotCWlmICgod2lkdGggIT0gOCkgJiYgKHdpZHRoICE9IDE2KSAmJiAod2lkdGggIT0gMzIpKSB7Ci0JCXJldHVybiAoQUVfU1VQUE9SVCk7CisJaWYgKHdpZHRoID09IDY0KSB7CisJCXdpZHRoID0gMzI7CS8qIEJyZWFrIGludG8gdHdvIDMyLWJpdCB0cmFuc2ZlcnMgKi8KIAl9CiAKIAkvKgotCSAqIFR3byBhZGRyZXNzIHNwYWNlcyBzdXBwb3J0ZWQ6IE1lbW9yeSBvciBJTy4KLQkgKiBQQ0lfQ29uZmlnIGlzIG5vdCBzdXBwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoZSBHQVMgc3RydWN0IGlzIGluc3VmZmljaWVudAorCSAqIFR3byBhZGRyZXNzIHNwYWNlcyBzdXBwb3J0ZWQ6IE1lbW9yeSBvciBJTy4gUENJX0NvbmZpZyBpcworCSAqIG5vdCBzdXBwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoZSBHQVMgc3RydWN0dXJlIGlzIGluc3VmZmljaWVudAogCSAqLwotCXN3aXRjaCAocmVnLT5zcGFjZV9pZCkgewotCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWToKKwlpZiAocmVnLT5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZKSB7CisJCXN0YXR1cyA9IGFjcGlfb3Nfd3JpdGVfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpCisJCQkJCSAgICAgIGFkZHJlc3MsIEFDUElfTE9EV09SRCh2YWx1ZSksCisJCQkJCSAgICAgIHdpZHRoKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KIAotCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhZGRyZXNzLAotCQkJCQkgICAgICB2YWx1ZSwgd2lkdGgpOwotCQlicmVhazsKKwkJaWYgKHJlZy0+Yml0X3dpZHRoID09IDY0KSB7CisJCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQorCQkJCQkJICAgICAgKGFkZHJlc3MgKyA0KSwKKwkJCQkJCSAgICAgIEFDUElfSElEV09SRCh2YWx1ZSksIDMyKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CQkvKiBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8sIHZhbGlkYXRlZCBlYXJsaWVyICovCiAKLQljYXNlIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTzoKLQotCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykgYWRkcmVzcywgdmFsdWUsCisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfcG9ydCgoYWNwaV9pb19hZGRyZXNzKQorCQkJCQkgICAgYWRkcmVzcywgQUNQSV9MT0RXT1JEKHZhbHVlKSwKIAkJCQkJICAgIHdpZHRoKTsKLQkJYnJlYWs7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CiAKLQlkZWZhdWx0OgotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJVbnN1cHBvcnRlZCBhZGRyZXNzIHNwYWNlOiAlWCIsIHJlZy0+c3BhY2VfaWQpKTsKLQkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKKwkJaWYgKHJlZy0+Yml0X3dpZHRoID09IDY0KSB7CisJCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykKKwkJCQkJCSAgICAoYWRkcmVzcyArIDQpLAorCQkJCQkJICAgIEFDUElfSElEV09SRCh2YWx1ZSksIDMyKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKwkJfQogCX0KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sCi0JCQkgICJXcm90ZTogJTguOFggd2lkdGggJTJkICAgdG8gJTguOFglOC44WCAoJXMpXG4iLAotCQkJICB2YWx1ZSwgd2lkdGgsIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzKSwKKwkJCSAgIldyb3RlOiAlOC44WCU4LjhYIHdpZHRoICUyZCAgIHRvICU4LjhYJTguOFggKCVzKVxuIiwKKwkJCSAgQUNQSV9GT1JNQVRfVUlOVDY0KHZhbHVlKSwgcmVnLT5iaXRfd2lkdGgsCisJCQkgIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzKSwKIAkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUocmVnLT5zcGFjZV9pZCkpKTsKIAogCXJldHVybiAoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMKaW5kZXggZWZjOTcxYS4uOGE1OGExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMKQEAgLTk2LDE3ICs5Niw2OCBAQAogICoKICAqIFJFVFVSTjogICAgICBOb25lCiAgKgotICogREVTQ1JJUFRJT046IERlbGV0ZSBhIG5hbWVzcGFjZSBub2RlCisgKiBERVNDUklQVElPTjogRGVsZXRlIGEgbmFtZXNwYWNlIG5vZGUuIEFsbCBub2RlIGRlbGV0aW9ucyBtdXN0IGNvbWUgdGhyb3VnaAorICogICAgICAgICAgICAgIGhlcmUuIERldGFjaGVzIGFueSBhdHRhY2hlZCBvYmplY3RzLCBpbmNsdWRpbmcgYW55IGF0dGFjaGVkCisgKiAgICAgICAgICAgICAgZGF0YS4gSWYgYSBoYW5kbGVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhdHRhY2hlZCBkYXRhLCBpdCBpcworICogICAgICAgICAgICAgIGludm9rZWQgYmVmb3JlIHRoZSBub2RlIGlzIGRlbGV0ZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdm9pZCBhY3BpX25zX2RlbGV0ZV9ub2RlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKQogeworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOworCisJQUNQSV9GVU5DVElPTl9OQU1FKG5zX2RlbGV0ZV9ub2RlKTsKKworCS8qIERldGFjaCBhbiBvYmplY3QgaWYgdGhlcmUgaXMgb25lICovCisKKwlhY3BpX25zX2RldGFjaF9vYmplY3Qobm9kZSk7CisKKwkvKgorCSAqIERlbGV0ZSBhbiBhdHRhY2hlZCBkYXRhIG9iamVjdCBpZiBwcmVzZW50IChhbiBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZAorCSAqIGFuZCBhdHRhY2hlZCB2aWEgYWNwaV9hdHRhY2hfZGF0YSkuIE5vdGU6IEFmdGVyIGFueSBub3JtYWwgb2JqZWN0IGlzCisJICogZGV0YWNoZWQgYWJvdmUsIHRoZSBvbmx5IHBvc3NpYmxlIHJlbWFpbmluZyBvYmplY3QgaXMgYSBkYXRhIG9iamVjdC4KKwkgKi8KKwlvYmpfZGVzYyA9IG5vZGUtPm9iamVjdDsKKwlpZiAob2JqX2Rlc2MgJiYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkpIHsKKworCQkvKiBJbnZva2UgdGhlIGF0dGFjaGVkIGRhdGEgZGVsZXRpb24gaGFuZGxlciBpZiBwcmVzZW50ICovCisKKwkJaWYgKG9ial9kZXNjLT5kYXRhLmhhbmRsZXIpIHsKKwkJCW9ial9kZXNjLT5kYXRhLmhhbmRsZXIobm9kZSwgb2JqX2Rlc2MtPmRhdGEucG9pbnRlcik7CisJCX0KKworCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uob2JqX2Rlc2MpOworCX0KKworCS8qIE5vdyB3ZSBjYW4gZGVsZXRlIHRoZSBub2RlICovCisKKwkodm9pZClhY3BpX29zX3JlbGVhc2Vfb2JqZWN0KGFjcGlfZ2JsX25hbWVzcGFjZV9jYWNoZSwgbm9kZSk7CisKKwlBQ1BJX01FTV9UUkFDS0lORyhhY3BpX2dibF9uc19ub2RlX2xpc3QtPnRvdGFsX2ZyZWVkKyspOworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsICJOb2RlICVwLCBSZW1haW5pbmcgJVhcbiIsCisJCQkgIG5vZGUsIGFjcGlfZ2JsX2N1cnJlbnRfbm9kZV9jb3VudCkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX3JlbW92ZV9ub2RlCisgKgorICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgICAgICAtIE5vZGUgdG8gYmUgcmVtb3ZlZC9kZWxldGVkCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogUmVtb3ZlICh1bmxpbmspIGFuZCBkZWxldGUgYSBuYW1lc3BhY2Ugbm9kZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYWNwaV9uc19yZW1vdmVfbm9kZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSkKK3sKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGFyZW50X25vZGU7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnByZXZfbm9kZTsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbmV4dF9ub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZGVsZXRlX25vZGUsIG5vZGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX3JlbW92ZV9ub2RlLCBub2RlKTsKIAogCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSk7CiAKQEAgLTE0MiwxMiArMTkzLDkgQEAKIAkJfQogCX0KIAotCUFDUElfTUVNX1RSQUNLSU5HKGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+dG90YWxfZnJlZWQrKyk7CisJLyogRGVsZXRlIHRoZSBub2RlIGFuZCBhbnkgYXR0YWNoZWQgb2JqZWN0cyAqLwogCi0JLyogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUsIHRoZW4gZGVsZXRlIHRoZSBub2RlICovCi0KLQlhY3BpX25zX2RldGFjaF9vYmplY3Qobm9kZSk7Ci0JKHZvaWQpYWNwaV9vc19yZWxlYXNlX29iamVjdChhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUsIG5vZGUpOworCWFjcGlfbnNfZGVsZXRlX25vZGUobm9kZSk7CiAJcmV0dXJuX1ZPSUQ7CiB9CiAKQEAgLTI3MywyNSArMzIxLDExIEBACiAJCQkJICAgIHBhcmVudF9ub2RlLCBjaGlsZF9ub2RlKSk7CiAJCX0KIAotCQkvKiBOb3cgd2UgY2FuIGZyZWUgdGhpcyBjaGlsZCBvYmplY3QgKi8KLQotCQlBQ1BJX01FTV9UUkFDS0lORyhhY3BpX2dibF9uc19ub2RlX2xpc3QtPnRvdGFsX2ZyZWVkKyspOwotCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsCi0JCQkJICAiT2JqZWN0ICVwLCBSZW1haW5pbmcgJVhcbiIsIGNoaWxkX25vZGUsCi0JCQkJICBhY3BpX2dibF9jdXJyZW50X25vZGVfY291bnQpKTsKLQotCQkvKiBEZXRhY2ggYW4gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSwgdGhlbiBmcmVlIHRoZSBjaGlsZCBub2RlICovCi0KLQkJYWNwaV9uc19kZXRhY2hfb2JqZWN0KGNoaWxkX25vZGUpOwotCi0JCS8qIE5vdyB3ZSBjYW4gZGVsZXRlIHRoZSBub2RlICovCi0KLQkJKHZvaWQpYWNwaV9vc19yZWxlYXNlX29iamVjdChhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUsCi0JCQkJCSAgICAgY2hpbGRfbm9kZSk7Ci0KLQkJLyogQW5kIG1vdmUgb24gdG8gdGhlIG5leHQgY2hpbGQgaW4gdGhlIGxpc3QgKi8KLQorCQkvKgorCQkgKiBEZWxldGUgdGhpcyBjaGlsZCBub2RlIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNoaWxkIGluIHRoZSBsaXN0LgorCQkgKiBObyBuZWVkIHRvIHVubGluayB0aGUgbm9kZSBzaW5jZSB3ZSBhcmUgZGVsZXRpbmcgdGhlIGVudGlyZSBicmFuY2guCisJCSAqLworCQlhY3BpX25zX2RlbGV0ZV9ub2RlKGNoaWxkX25vZGUpOwogCQljaGlsZF9ub2RlID0gbmV4dF9ub2RlOwogCiAJfSB3aGlsZSAoIShmbGFncyAmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QpKTsKQEAgLTQzMyw3ICs0NjcsNyBAQAogCiAJCWlmIChkZWxldGlvbl9ub2RlKSB7CiAJCQlhY3BpX25zX2RlbGV0ZV9jaGlsZHJlbihkZWxldGlvbl9ub2RlKTsKLQkJCWFjcGlfbnNfZGVsZXRlX25vZGUoZGVsZXRpb25fbm9kZSk7CisJCQlhY3BpX25zX3JlbW92ZV9ub2RlKGRlbGV0aW9uX25vZGUpOwogCQkJZGVsZXRpb25fbm9kZSA9IE5VTEw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXBkdi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXBkdi5jCmluZGV4IDQxOTk0ZmUuLjBmZTg3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wZHYuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMKQEAgLTcwLDcgKzcwLDYgQEAKIGFjcGlfbnNfZHVtcF9vbmVfZGV2aWNlKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsCiAJCQl1MzIgbGV2ZWwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR1cm5fdmFsdWUpCiB7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIGk7CkBAIC04MCwxNyArNzksMTUgQEAKIAlzdGF0dXMgPQogCSAgICBhY3BpX25zX2R1bXBfb25lX29iamVjdChvYmpfaGFuZGxlLCBsZXZlbCwgY29udGV4dCwgcmV0dXJuX3ZhbHVlKTsKIAotCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0xPQ0FMX0JVRkZFUjsKLQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhvYmpfaGFuZGxlLCAmYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhvYmpfaGFuZGxlLCAmaW5mbyk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCWluZm8gPSBidWZmZXIucG9pbnRlcjsKIAkJZm9yIChpID0gMDsgaSA8IGxldmVsOyBpKyspIHsKIAkJCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX1RBQkxFUywgIiAiKSk7CiAJCX0KIAogCQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9UQUJMRVMsCiAJCQkJICAgICAgIiAgICBISUQ6ICVzLCBBRFI6ICU4LjhYJTguOFgsIFN0YXR1czogJVhcbiIsCi0JCQkJICAgICAgaW5mby0+aGFyZHdhcmVfaWQudmFsdWUsCisJCQkJICAgICAgaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nLAogCQkJCSAgICAgIEFDUElfRk9STUFUX1VJTlQ2NChpbmZvLT5hZGRyZXNzKSwKIAkJCQkgICAgICBpbmZvLT5jdXJyZW50X3N0YXR1cykpOwogCQlBQ1BJX0ZSRUUoaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwppbmRleCA4ZTdkZWMxLi44NDZkMTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKQEAgLTUwLDYgKzUwLDExIEBACiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKIEFDUElfTU9EVUxFX05BTUUoIm5zZXZhbCIpCiAKKy8qIExvY2FsIHByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkCithY3BpX25zX2V4ZWNfbW9kdWxlX2NvZGUodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX29iaiwKKwkJCSBzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19ldmFsdWF0ZQpAQCAtNzYsNiArODEsNyBAQAogICogTVVURVg6ICAgICAgIExvY2tzIGludGVycHJldGVyCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogYWNwaV9zdGF0dXMgYWNwaV9uc19ldmFsdWF0ZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICogaW5mbykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC0yNzYsMyArMjgyLDEzNCBAQAogCSAqLwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2V4ZWNfbW9kdWxlX2NvZGVfbGlzdAorICoKKyAqIFBBUkFNRVRFUlM6ICBOb25lCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUuIEV4Y2VwdGlvbnMgZHVyaW5nIG1ldGhvZCBleGVjdXRpb24gYXJlIGlnbm9yZWQsIHNpbmNlCisgKiAgICAgICAgICAgICAgd2UgY2Fubm90IGFib3J0IGEgdGFibGUgbG9hZC4KKyAqCisgKiBERVNDUklQVElPTjogRXhlY3V0ZSBhbGwgZWxlbWVudHMgb2YgdGhlIGdsb2JhbCBtb2R1bGUtbGV2ZWwgY29kZSBsaXN0LgorICogICAgICAgICAgICAgIEVhY2ggZWxlbWVudCBpcyBleGVjdXRlZCBhcyBhIHNpbmdsZSBjb250cm9sIG1ldGhvZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGFjcGlfbnNfZXhlY19tb2R1bGVfY29kZV9saXN0KHZvaWQpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcHJldjsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpuZXh0OworCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CisJdTMyIG1ldGhvZF9jb3VudCA9IDA7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2V4ZWNfbW9kdWxlX2NvZGVfbGlzdCk7CisKKwkvKiBFeGl0IG5vdyBpZiB0aGUgbGlzdCBpcyBlbXB0eSAqLworCisJbmV4dCA9IGFjcGlfZ2JsX21vZHVsZV9jb2RlX2xpc3Q7CisJaWYgKCFuZXh0KSB7CisJCXJldHVybl9WT0lEOworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrICovCisKKwlpbmZvID0gQUNQSV9BTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbykpOworCWlmICghaW5mbykgeworCQlyZXR1cm5fVk9JRDsKKwl9CisKKwkvKiBXYWxrIHRoZSBsaXN0LCBleGVjdXRpbmcgZWFjaCAibWV0aG9kIiAqLworCisJd2hpbGUgKG5leHQpIHsKKwkJcHJldiA9IG5leHQ7CisJCW5leHQgPSBuZXh0LT5tZXRob2QubXV0ZXg7CisKKwkJLyogQ2xlYXIgdGhlIGxpbmsgZmllbGQgYW5kIGV4ZWN1dGUgdGhlIG1ldGhvZCAqLworCisJCXByZXYtPm1ldGhvZC5tdXRleCA9IE5VTEw7CisJCWFjcGlfbnNfZXhlY19tb2R1bGVfY29kZShwcmV2LCBpbmZvKTsKKwkJbWV0aG9kX2NvdW50Kys7CisKKwkJLyogRGVsZXRlIHRoZSAodGVtcG9yYXJ5KSBtZXRob2Qgb2JqZWN0ICovCisKKwkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHByZXYpOworCX0KKworCUFDUElfSU5GTygoQUVfSU5GTywKKwkJICAgIkV4ZWN1dGVkICV1IGJsb2NrcyBvZiBtb2R1bGUtbGV2ZWwgZXhlY3V0YWJsZSBBTUwgY29kZSIsCisJCSAgIG1ldGhvZF9jb3VudCkpOworCisJQUNQSV9GUkVFKGluZm8pOworCWFjcGlfZ2JsX21vZHVsZV9jb2RlX2xpc3QgPSBOVUxMOworCXJldHVybl9WT0lEOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2V4ZWNfbW9kdWxlX2NvZGUKKyAqCisgKiBQQVJBTUVURVJTOiAgbWV0aG9kX29iaiAgICAgICAgICAtIE9iamVjdCBjb250YWluZXIgZm9yIHRoZSBtb2R1bGUtbGV2ZWwgY29kZQorICogICAgICAgICAgICAgIEluZm8gICAgICAgICAgICAgICAgLSBJbmZvIGJsb2NrIGZvciBtZXRob2QgZXZhbHVhdGlvbgorICoKKyAqIFJFVFVSTjogICAgICBOb25lLiBFeGNlcHRpb25zIGR1cmluZyBtZXRob2QgZXhlY3V0aW9uIGFyZSBpZ25vcmVkLCBzaW5jZQorICogICAgICAgICAgICAgIHdlIGNhbm5vdCBhYm9ydCBhIHRhYmxlIGxvYWQuCisgKgorICogREVTQ1JJUFRJT046IEV4ZWN1dGUgYSBjb250cm9sIG1ldGhvZCBjb250YWluaW5nIGEgYmxvY2sgb2YgbW9kdWxlLWxldmVsCisgKiAgICAgICAgICAgICAgZXhlY3V0YWJsZSBBTUwgY29kZS4gVGhlIGNvbnRyb2wgbWV0aG9kIGlzIHRlbXBvcmFyaWx5CisgKiAgICAgICAgICAgICAgaW5zdGFsbGVkIHRvIHRoZSByb290IG5vZGUsIHRoZW4gZXZhbHVhdGVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCithY3BpX25zX2V4ZWNfbW9kdWxlX2NvZGUodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX29iaiwKKwkJCSBzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJvb3Rfb2JqOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZXhlY19tb2R1bGVfY29kZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrICovCisKKwlBQ1BJX01FTVNFVChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbykpOworCWluZm8tPnByZWZpeF9ub2RlID0gYWNwaV9nYmxfcm9vdF9ub2RlOworCisJLyoKKwkgKiBHZXQgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCByb290IG9iamVjdC4gQWRkIGEgcmVmZXJlbmNlLCBiZWNhdXNlIHRoZQorCSAqIHJlZiBjb3VudCB3aWxsIGJlIGRlY3JlYXNlZCB3aGVuIHRoZSBtZXRob2Qgb2JqZWN0IGlzIGluc3RhbGxlZCB0bworCSAqIHRoZSByb290IG5vZGUuCisJICovCisJcm9vdF9vYmogPSBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3QoYWNwaV9nYmxfcm9vdF9ub2RlKTsKKwlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uocm9vdF9vYmopOworCisJLyogSW5zdGFsbCB0aGUgbWV0aG9kIChtb2R1bGUtbGV2ZWwgY29kZSkgaW4gdGhlIHJvb3Qgbm9kZSAqLworCisJc3RhdHVzID0gYWNwaV9uc19hdHRhY2hfb2JqZWN0KGFjcGlfZ2JsX3Jvb3Rfbm9kZSwgbWV0aG9kX29iaiwKKwkJCQkgICAgICAgQUNQSV9UWVBFX01FVEhPRCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBFeGVjdXRlIHRoZSByb290IG5vZGUgYXMgYSBjb250cm9sIG1ldGhvZCAqLworCisJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5JVCwgIkV4ZWN1dGVkIG1vZHVsZS1sZXZlbCBjb2RlIGF0ICVwXG4iLAorCQkJICBtZXRob2Rfb2JqLT5tZXRob2QuYW1sX3N0YXJ0KSk7CisKKwkvKiBEZXRhY2ggdGhlIHRlbXBvcmFyeSBtZXRob2Qgb2JqZWN0ICovCisKKwlhY3BpX25zX2RldGFjaF9vYmplY3QoYWNwaV9nYmxfcm9vdF9ub2RlKTsKKworCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvb3Qgb2JqZWN0ICovCisKKwlzdGF0dXMgPQorCSAgICBhY3BpX25zX2F0dGFjaF9vYmplY3QoYWNwaV9nYmxfcm9vdF9ub2RlLCByb290X29iaiwKKwkJCQkgIEFDUElfVFlQRV9ERVZJQ0UpOworCisgICAgICBleGl0OgorCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyb290X29iaik7CisJcmV0dXJuX1ZPSUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwppbmRleCAyYWRmY2YzLi4xZDViMzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKQEAgLTE3MCw2ICsxNzAsMjEgQEAKIAkJZ290byBlcnJvcl9leGl0OwogCX0KIAorCS8qCisJICogRXhlY3V0ZSB0aGUgImdsb2JhbCIgX0lOSSBtZXRob2QgdGhhdCBtYXkgYXBwZWFyIGF0IHRoZSByb290LiBUaGlzCisJICogc3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgV2luZG93cyBjb21wYXRpYmlsaXR5IChWaXN0YSspIGFuZCBpcyBub3QKKwkgKiBwYXJ0IG9mIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uCisJICovCisJaW5mby5ldmFsdWF0ZV9pbmZvLT5wcmVmaXhfbm9kZSA9IGFjcGlfZ2JsX3Jvb3Rfbm9kZTsKKwlpbmZvLmV2YWx1YXRlX2luZm8tPnBhdGhuYW1lID0gTUVUSE9EX05BTUVfX0lOSTsKKwlpbmZvLmV2YWx1YXRlX2luZm8tPnBhcmFtZXRlcnMgPSBOVUxMOworCWluZm8uZXZhbHVhdGVfaW5mby0+ZmxhZ3MgPSBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUU7CisKKwlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlKGluZm8uZXZhbHVhdGVfaW5mbyk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCWluZm8ubnVtX0lOSSsrOworCX0KKwogCS8qIFdhbGsgbmFtZXNwYWNlIHRvIGV4ZWN1dGUgYWxsIF9JTklzIG9uIHByZXNlbnQgZGV2aWNlcyAqLwogCiAJc3RhdHVzID0gYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBBQ1BJX1JPT1RfT0JKRUNULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKaW5kZXggZGNkN2E2YS4uYTcyMzRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCkBAIC0yNzAsOCArMjcwLDcgQEAKIAogCS8qIE5vdyBkZWxldGUgdGhlIHN0YXJ0aW5nIG9iamVjdCwgYW5kIHdlIGFyZSBkb25lICovCiAKLQlhY3BpX25zX2RlbGV0ZV9ub2RlKGNoaWxkX2hhbmRsZSk7Ci0KKwlhY3BpX25zX3JlbW92ZV9ub2RlKGNoaWxkX2hhbmRsZSk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCmluZGV4IDdmOGUwNjYuLmY4NDI3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKQEAgLTQyLDYgKzQyLDggQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCisjZGVmaW5lIEFDUElfQ1JFQVRFX1BSRURFRklORURfVEFCTEUKKwogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgImFjY29tbW9uLmgiCiAjaW5jbHVkZSAiYWNuYW1lc3AuaCIKQEAgLTcyLDMwICs3NCwzMSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIExvY2FsIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19jaGVja19wYWNrYWdlKGNoYXIgKnBhdGhuYW1lLAotCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIsCi0JCSAgICAgIGNvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvICpwcmVkZWZpbmVkKTsKK2FjcGlfbnNfY2hlY2tfcGFja2FnZShzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0cik7CiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGNoYXIgKnBhdGhuYW1lLAorYWNwaV9uc19jaGVja19wYWNrYWdlX2xpc3Qoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnBhY2thZ2UsCisJCQkgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZWxlbWVudHMsIHUzMiBjb3VudCk7CisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKIAkJCSAgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZWxlbWVudHMsCiAJCQkgICAgICAgdTggdHlwZTEsCiAJCQkgICAgICAgdTMyIGNvdW50MSwKIAkJCSAgICAgICB1OCB0eXBlMiwgdTMyIGNvdW50MiwgdTMyIHN0YXJ0X2luZGV4KTsKIAogc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGNoYXIgKnBhdGhuYW1lLAorYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCiAJCQkgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0ciwKIAkJCSAgdTMyIGV4cGVjdGVkX2J0eXBlcywgdTMyIHBhY2thZ2VfaW5kZXgpOwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGNoYXIgKnBhdGhuYW1lLAorYWNwaV9uc19jaGVja19yZWZlcmVuY2Uoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAogCQkJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX29iamVjdCk7CiAKLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19yZXBhaXJfb2JqZWN0KHUzMiBleHBlY3RlZF9idHlwZXMsCi0JCSAgICAgIHUzMiBwYWNrYWdlX2luZGV4LAotCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIpOworc3RhdGljIHZvaWQgYWNwaV9uc19nZXRfZXhwZWN0ZWRfdHlwZXMoY2hhciAqYnVmZmVyLCB1MzIgZXhwZWN0ZWRfYnR5cGVzKTsKIAogLyoKICAqIE5hbWVzIGZvciB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYnkgdGhlIHByZWRlZmluZWQgb2JqZWN0cy4KQEAgLTEwOSwxMyArMTEyLDEzIEBACiAJIi9SZWZlcmVuY2UiLAogfTsKIAotI2RlZmluZSBBQ1BJX05PVF9QQUNLQUdFICAgIEFDUElfVUlOVDMyX01BWAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3ByZWRlZmluZWRfbmFtZXMKICAqCiAgKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAgIC0gTmFtZXNwYWNlIG5vZGUgZm9yIHRoZSBtZXRob2Qvb2JqZWN0CisgKiAgICAgICAgICAgICAgdXNlcl9wYXJhbV9jb3VudCAtIE51bWJlciBvZiBwYXJhbWV0ZXJzIGFjdHVhbGx5IHBhc3NlZAorICogICAgICAgICAgICAgIHJldHVybl9zdGF0dXMgICAtIFN0YXR1cyBmcm9tIHRoZSBvYmplY3QgZXZhbHVhdGlvbgogICogICAgICAgICAgICAgIHJldHVybl9vYmplY3RfcHRyIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvbiBvZiBhIG1ldGhvZCBvciBvYmplY3QKICAqCkBAIC0xMzUsMTIgKzEzOCwxMyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWNvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvICpwcmVkZWZpbmVkOwogCWNoYXIgKnBhdGhuYW1lOworCXN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YTsKIAogCS8qIE1hdGNoIHRoZSBuYW1lIGZvciB0aGlzIG1ldGhvZC9vYmplY3QgYWdhaW5zdCB0aGUgcHJlZGVmaW5lZCBsaXN0ICovCiAKIAlwcmVkZWZpbmVkID0gYWNwaV9uc19jaGVja19mb3JfcHJlZGVmaW5lZF9uYW1lKG5vZGUpOwogCi0JLyogR2V0IHRoZSBmdWxsIHBhdGhuYW1lIHRvIHRoZSBvYmplY3QsIGZvciB1c2UgaW4gZXJyb3IgbWVzc2FnZXMgKi8KKwkvKiBHZXQgdGhlIGZ1bGwgcGF0aG5hbWUgdG8gdGhlIG9iamVjdCwgZm9yIHVzZSBpbiB3YXJuaW5nIG1lc3NhZ2VzICovCiAKIAlwYXRobmFtZSA9IGFjcGlfbnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lKG5vZGUpOwogCWlmICghcGF0aG5hbWUpIHsKQEAgLTE1OCwyOCArMTYyLDE3IEBACiAJLyogSWYgbm90IGEgcHJlZGVmaW5lZCBuYW1lLCB3ZSBjYW5ub3QgdmFsaWRhdGUgdGhlIHJldHVybiBvYmplY3QgKi8KIAogCWlmICghcHJlZGVmaW5lZCkgewotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogSWYgdGhlIG1ldGhvZCBmYWlsZWQsIHdlIGNhbm5vdCB2YWxpZGF0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLwotCi0JaWYgKChyZXR1cm5fc3RhdHVzICE9IEFFX09LKSAmJiAocmV0dXJuX3N0YXR1cyAhPSBBRV9DVFJMX1JFVFVSTl9WQUxVRSkpIHsKLQkJZ290byBleGl0OworCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJLyoKLQkgKiBPbmx5IHZhbGlkYXRlIHRoZSByZXR1cm4gdmFsdWUgb24gdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgZXZhbHVhdGlvbiBvZgotCSAqIHRoZSBtZXRob2QuIFRoaXMgZW5zdXJlcyB0aGF0IGFueSB3YXJuaW5ncyB3aWxsIG9ubHkgYmUgZW1pdHRlZCBkdXJpbmcKLQkgKiB0aGUgdmVyeSBmaXJzdCBldmFsdWF0aW9uIG9mIHRoZSBtZXRob2Qvb2JqZWN0LgorCSAqIElmIHRoZSBtZXRob2QgZmFpbGVkIG9yIGRpZCBub3QgYWN0dWFsbHkgcmV0dXJuIGFuIG9iamVjdCwgd2UgY2Fubm90CisJICogdmFsaWRhdGUgdGhlIHJldHVybiBvYmplY3QKIAkgKi8KLQlpZiAobm9kZS0+ZmxhZ3MgJiBBTk9CSl9FVkFMVUFURUQpIHsKLQkJZ290byBleGl0OworCWlmICgocmV0dXJuX3N0YXR1cyAhPSBBRV9PSykgJiYgKHJldHVybl9zdGF0dXMgIT0gQUVfQ1RSTF9SRVRVUk5fVkFMVUUpKSB7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQkvKiBNYXJrIHRoZSBub2RlIGFzIGhhdmluZyBiZWVuIHN1Y2Nlc3NmdWxseSBldmFsdWF0ZWQgKi8KLQotCW5vZGUtPmZsYWdzIHw9IEFOT0JKX0VWQUxVQVRFRDsKLQogCS8qCiAJICogSWYgdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBjaGVjayBpZiB3ZSByZXF1aXJlIGEgcmV0dXJuIHZhbHVlIGZvcgogCSAqIHRoaXMgcHJlZGVmaW5lZCBuYW1lLiBFaXRoZXIgb25lIHJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCwgb3Igbm9uZSwKQEAgLTE5MCw0NiArMTgzLDY3IEBACiAJaWYgKCFyZXR1cm5fb2JqZWN0KSB7CiAJCWlmICgocHJlZGVmaW5lZC0+aW5mby5leHBlY3RlZF9idHlwZXMpICYmCiAJCSAgICAoIShwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfTk9ORSkpKSB7Ci0JCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiJXM6IE1pc3NpbmcgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIiwKLQkJCQkgICAgcGF0aG5hbWUpKTsKKwkJCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBwYXRobmFtZSwKKwkJCQkJICAgICAgQUNQSV9XQVJOX0FMV0FZUywKKwkJCQkJICAgICAgIk1pc3NpbmcgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIikpOwogCiAJCQlzdGF0dXMgPSBBRV9BTUxfTk9fUkVUVVJOX1ZBTFVFOwogCQl9Ci0JCWdvdG8gZXhpdDsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qCi0JICogV2UgaGF2ZSBhIHJldHVybiB2YWx1ZSwgYnV0IGlmIG9uZSB3YXNuJ3QgZXhwZWN0ZWQsIGp1c3QgZXhpdCwgdGhpcyBpcwotCSAqIG5vdCBhIHByb2JsZW0KKwkgKiAxKSBXZSBoYXZlIGEgcmV0dXJuIHZhbHVlLCBidXQgaWYgb25lIHdhc24ndCBleHBlY3RlZCwganVzdCBleGl0LCB0aGlzIGlzCisJICogbm90IGEgcHJvYmxlbS4gRm9yIGV4YW1wbGUsIGlmIHRoZSAiSW1wbGljaXQgUmV0dXJuIiBmZWF0dXJlIGlzCisJICogZW5hYmxlZCwgbWV0aG9kcyB3aWxsIGFsd2F5cyByZXR1cm4gYSB2YWx1ZS4KIAkgKgotCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgIkltcGxpY2l0IFJldHVybiIgZmVhdHVyZSBpcyBlbmFibGVkLCBtZXRob2RzIHdpbGwKLQkgKiBhbHdheXMgcmV0dXJuIGEgdmFsdWUKKwkgKiAyKSBJZiB0aGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBvZiBhbnkgdHlwZSwgdGhlbiB3ZSBjYW5ub3QgcGVyZm9ybSBhbnkKKwkgKiB2YWxpZGF0aW9uLCBleGl0LgogCSAqLwotCWlmICghcHJlZGVmaW5lZC0+aW5mby5leHBlY3RlZF9idHlwZXMpIHsKLQkJZ290byBleGl0OworCWlmICgoIXByZWRlZmluZWQtPmluZm8uZXhwZWN0ZWRfYnR5cGVzKSB8fAorCSAgICAocHJlZGVmaW5lZC0+aW5mby5leHBlY3RlZF9idHlwZXMgPT0gQUNQSV9SVFlQRV9BTEwpKSB7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKKwkvKiBDcmVhdGUgdGhlIHBhcmFtZXRlciBkYXRhIGJsb2NrIGZvciBvYmplY3QgdmFsaWRhdGlvbiAqLworCisJZGF0YSA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEpKTsKKwlpZiAoIWRhdGEpIHsKKwkJZ290byBjbGVhbnVwOworCX0KKwlkYXRhLT5wcmVkZWZpbmVkID0gcHJlZGVmaW5lZDsKKwlkYXRhLT5ub2RlX2ZsYWdzID0gbm9kZS0+ZmxhZ3M7CisJZGF0YS0+cGF0aG5hbWUgPSBwYXRobmFtZTsKKwogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIG9iamVjdCBpcyB3aGF0IGlzIGV4cGVjdGVkIGZvcgogCSAqIHRoaXMgcHJlZGVmaW5lZCBuYW1lCiAJICovCi0Jc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwgcmV0dXJuX29iamVjdF9wdHIsCisJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCByZXR1cm5fb2JqZWN0X3B0ciwKIAkJCQkJICAgcHJlZGVmaW5lZC0+aW5mby5leHBlY3RlZF9idHlwZXMsCi0JCQkJCSAgIEFDUElfTk9UX1BBQ0tBR0UpOworCQkJCQkgICBBQ1BJX05PVF9QQUNLQUdFX0VMRU1FTlQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIGV4aXQ7CisJCWdvdG8gY2hlY2tfdmFsaWRhdGlvbl9zdGF0dXM7CiAJfQogCiAJLyogRm9yIHJldHVybmVkIFBhY2thZ2Ugb2JqZWN0cywgY2hlY2sgdGhlIHR5cGUgb2YgYWxsIHN1Yi1vYmplY3RzICovCiAKIAlpZiAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZShwYXRobmFtZSwgcmV0dXJuX29iamVjdF9wdHIsCi0JCQkJCSAgcHJlZGVmaW5lZCk7CisJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcGFja2FnZShkYXRhLCByZXR1cm5fb2JqZWN0X3B0cik7CiAJfQogCi0gICAgICBleGl0OgorY2hlY2tfdmFsaWRhdGlvbl9zdGF0dXM6CisJLyoKKwkgKiBJZiB0aGUgb2JqZWN0IHZhbGlkYXRpb24gZmFpbGVkIG9yIGlmIHdlIHN1Y2Nlc3NmdWxseSByZXBhaXJlZCBvbmUKKwkgKiBvciBtb3JlIG9iamVjdHMsIG1hcmsgdGhlIHBhcmVudCBub2RlIHRvIHN1cHByZXNzIGZ1cnRoZXIgd2FybmluZworCSAqIG1lc3NhZ2VzIGR1cmluZyB0aGUgbmV4dCBldmFsdWF0aW9uIG9mIHRoZSBzYW1lIG1ldGhvZC9vYmplY3QuCisJICovCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8IChkYXRhLT5mbGFncyAmIEFDUElfT0JKRUNUX1JFUEFJUkVEKSkgeworCQlub2RlLT5mbGFncyB8PSBBTk9CSl9FVkFMVUFURUQ7CisJfQorCUFDUElfRlJFRShkYXRhKTsKKworY2xlYW51cDoKIAlBQ1BJX0ZSRUUocGF0aG5hbWUpOwogCXJldHVybiAoc3RhdHVzKTsKIH0KQEAgLTI2OCw2NCArMjgyLDU4IEBACiAJCXBhcmFtX2NvdW50ID0gbm9kZS0+b2JqZWN0LT5tZXRob2QucGFyYW1fY291bnQ7CiAJfQogCi0JLyogQXJndW1lbnQgY291bnQgY2hlY2sgZm9yIG5vbi1wcmVkZWZpbmVkIG1ldGhvZHMvb2JqZWN0cyAqLwotCiAJaWYgKCFwcmVkZWZpbmVkKSB7CiAJCS8qCisJCSAqIENoZWNrIHRoZSBwYXJhbWV0ZXIgY291bnQgZm9yIG5vbi1wcmVkZWZpbmVkIG1ldGhvZHMvb2JqZWN0cy4KKwkJICoKIAkJICogV2FybmluZyBpZiB0b28gZmV3IG9yIHRvbyBtYW55IGFyZ3VtZW50cyBoYXZlIGJlZW4gcGFzc2VkIGJ5IHRoZQogCQkgKiBjYWxsZXIuIEFuIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG1heSBub3QgY2F1c2UgdGhlIG1ldGhvZAogCQkgKiB0byBmYWlsLiBIb3dldmVyLCB0aGUgbWV0aG9kIHdpbGwgZmFpbCBpZiB0aGVyZSBhcmUgdG9vIGZldwogCQkgKiBhcmd1bWVudHMgYW5kIHRoZSBtZXRob2QgYXR0ZW1wdHMgdG8gdXNlIG9uZSBvZiB0aGUgbWlzc2luZyBvbmVzLgogCQkgKi8KIAkJaWYgKHVzZXJfcGFyYW1fY291bnQgPCBwYXJhbV9jb3VudCkgewotCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJCSAgICAgICIlczogSW5zdWZmaWNpZW50IGFyZ3VtZW50cyAtIG5lZWRzICVkLCBmb3VuZCAlZCIsCi0JCQkJICAgICAgcGF0aG5hbWUsIHBhcmFtX2NvdW50LCB1c2VyX3BhcmFtX2NvdW50KSk7CisJCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgcGF0aG5hbWUsCisJCQkJCSAgICAgIEFDUElfV0FSTl9BTFdBWVMsCisJCQkJCSAgICAgICJJbnN1ZmZpY2llbnQgYXJndW1lbnRzIC0gbmVlZHMgJXUsIGZvdW5kICV1IiwKKwkJCQkJICAgICAgcGFyYW1fY291bnQsIHVzZXJfcGFyYW1fY291bnQpKTsKIAkJfSBlbHNlIGlmICh1c2VyX3BhcmFtX2NvdW50ID4gcGFyYW1fY291bnQpIHsKLQkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAiJXM6IEV4Y2VzcyBhcmd1bWVudHMgLSBuZWVkcyAlZCwgZm91bmQgJWQiLAotCQkJCSAgICAgIHBhdGhuYW1lLCBwYXJhbV9jb3VudCwgdXNlcl9wYXJhbV9jb3VudCkpOworCQkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIHBhdGhuYW1lLAorCQkJCQkgICAgICBBQ1BJX1dBUk5fQUxXQVlTLAorCQkJCQkgICAgICAiRXhjZXNzIGFyZ3VtZW50cyAtIG5lZWRzICV1LCBmb3VuZCAldSIsCisJCQkJCSAgICAgIHBhcmFtX2NvdW50LCB1c2VyX3BhcmFtX2NvdW50KSk7CiAJCX0KIAkJcmV0dXJuOwogCX0KIAotCS8qIEFsbG93IHR3byBkaWZmZXJlbnQgbGVnYWwgYXJndW1lbnQgY291bnRzIChfU0NQLCBldGMuKSAqLwotCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgdXNlci1zdXBwbGllZCBwYXJhbWV0ZXIgY291bnQuCisJICogQWxsb3cgdHdvIGRpZmZlcmVudCBsZWdhbCBhcmd1bWVudCBjb3VudHMgKF9TQ1AsIGV0Yy4pCisJICovCiAJcmVxdWlyZWRfcGFyYW1zX2N1cnJlbnQgPSBwcmVkZWZpbmVkLT5pbmZvLnBhcmFtX2NvdW50ICYgMHgwRjsKIAlyZXF1aXJlZF9wYXJhbXNfb2xkID0gcHJlZGVmaW5lZC0+aW5mby5wYXJhbV9jb3VudCA+PiA0OwogCiAJaWYgKHVzZXJfcGFyYW1fY291bnQgIT0gQUNQSV9VSU5UMzJfTUFYKSB7Ci0KLQkJLyogVmFsaWRhdGUgdGhlIHVzZXItc3VwcGxpZWQgcGFyYW1ldGVyIGNvdW50ICovCi0KIAkJaWYgKCh1c2VyX3BhcmFtX2NvdW50ICE9IHJlcXVpcmVkX3BhcmFtc19jdXJyZW50KSAmJgogCQkgICAgKHVzZXJfcGFyYW1fY291bnQgIT0gcmVxdWlyZWRfcGFyYW1zX29sZCkpIHsKLQkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAiJXM6IFBhcmFtZXRlciBjb3VudCBtaXNtYXRjaCAtICIKLQkJCQkgICAgICAiY2FsbGVyIHBhc3NlZCAlZCwgQUNQSSByZXF1aXJlcyAlZCIsCi0JCQkJICAgICAgcGF0aG5hbWUsIHVzZXJfcGFyYW1fY291bnQsCi0JCQkJICAgICAgcmVxdWlyZWRfcGFyYW1zX2N1cnJlbnQpKTsKKwkJCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBwYXRobmFtZSwKKwkJCQkJICAgICAgQUNQSV9XQVJOX0FMV0FZUywKKwkJCQkJICAgICAgIlBhcmFtZXRlciBjb3VudCBtaXNtYXRjaCAtICIKKwkJCQkJICAgICAgImNhbGxlciBwYXNzZWQgJXUsIEFDUEkgcmVxdWlyZXMgJXUiLAorCQkJCQkgICAgICB1c2VyX3BhcmFtX2NvdW50LAorCQkJCQkgICAgICByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkpOwogCQl9CiAJfQogCiAJLyoKLQkgKiBPbmx5IHZhbGlkYXRlIHRoZSBhcmd1bWVudCBjb3VudCBvbiB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBldmFsdWF0aW9uIG9mCi0JICogdGhlIG1ldGhvZC4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHdhcm5pbmdzIHdpbGwgb25seSBiZSBlbWl0dGVkIGR1cmluZwotCSAqIHRoZSB2ZXJ5IGZpcnN0IGV2YWx1YXRpb24gb2YgdGhlIG1ldGhvZC9vYmplY3QuCi0JICovCi0JaWYgKG5vZGUtPmZsYWdzICYgQU5PQkpfRVZBTFVBVEVEKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgogCSAqIENoZWNrIHRoYXQgdGhlIEFTTC1kZWZpbmVkIHBhcmFtZXRlciBjb3VudCBpcyB3aGF0IGlzIGV4cGVjdGVkIGZvcgotCSAqIHRoaXMgcHJlZGVmaW5lZCBuYW1lLgorCSAqIHRoaXMgcHJlZGVmaW5lZCBuYW1lIChwYXJhbWV0ZXIgY291bnQgYXMgZGVmaW5lZCBieSB0aGUgQUNQSQorCSAqIHNwZWNpZmljYXRpb24pCiAJICovCiAJaWYgKChwYXJhbV9jb3VudCAhPSByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkgJiYKIAkgICAgKHBhcmFtX2NvdW50ICE9IHJlcXVpcmVkX3BhcmFtc19vbGQpKSB7Ci0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIlczogUGFyYW1ldGVyIGNvdW50IG1pc21hdGNoIC0gQVNMIGRlY2xhcmVkICVkLCBBQ1BJIHJlcXVpcmVzICVkIiwKLQkJCSAgICAgIHBhdGhuYW1lLCBwYXJhbV9jb3VudCwgcmVxdWlyZWRfcGFyYW1zX2N1cnJlbnQpKTsKKwkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIHBhdGhuYW1lLCBub2RlLT5mbGFncywKKwkJCQkgICAgICAiUGFyYW1ldGVyIGNvdW50IG1pc21hdGNoIC0gQVNMIGRlY2xhcmVkICV1LCBBQ1BJIHJlcXVpcmVzICV1IiwKKwkJCQkgICAgICBwYXJhbV9jb3VudCwgcmVxdWlyZWRfcGFyYW1zX2N1cnJlbnQpKTsKIAl9CiB9CiAKQEAgLTM1OCw5ICszNjYsNiBAQAogCXRoaXNfbmFtZSA9IHByZWRlZmluZWRfbmFtZXM7CiAJd2hpbGUgKHRoaXNfbmFtZS0+aW5mby5uYW1lWzBdKSB7CiAJCWlmIChBQ1BJX0NPTVBBUkVfTkFNRShub2RlLT5uYW1lLmFzY2lpLCB0aGlzX25hbWUtPmluZm8ubmFtZSkpIHsKLQotCQkJLyogUmV0dXJuIHBvaW50ZXIgdG8gdGhpcyB0YWJsZSBlbnRyeSAqLwotCiAJCQlyZXR1cm4gKHRoaXNfbmFtZSk7CiAJCX0KIApAQCAtMzc1LDE3ICszODAsMTYgQEAKIAkJdGhpc19uYW1lKys7CiAJfQogCi0JcmV0dXJuIChOVUxMKTsKKwlyZXR1cm4gKE5VTEwpOwkJLyogTm90IGZvdW5kICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZQogICoKLSAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBGdWxsIHBhdGhuYW1lIHRvIHRoZSBub2RlIChmb3IgZXJyb3IgbXNncykKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKICAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0X3B0ciAtIFBvaW50ZXIgdG8gdGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb24gb2YgYSBtZXRob2Qgb3Igb2JqZWN0Ci0gKiAgICAgICAgICAgICAgUHJlZGVmaW5lZCAgICAgIC0gUG9pbnRlciB0byBlbnRyeSBpbiBwcmVkZWZpbmVkIG5hbWUgdGFibGUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtMzk1LDMwICszOTksMjYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19jaGVja19wYWNrYWdlKGNoYXIgKnBhdGhuYW1lLAotCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIsCi0JCSAgICAgIGNvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvICpwcmVkZWZpbmVkKQorYWNwaV9uc19jaGVja19wYWNrYWdlKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKKwkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QgPSAqcmV0dXJuX29iamVjdF9wdHI7CiAJY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnBhY2thZ2U7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqc3ViX3BhY2thZ2U7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmVsZW1lbnRzOwotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipzdWJfZWxlbWVudHM7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXUzMiBleHBlY3RlZF9jb3VudDsKIAl1MzIgY291bnQ7CiAJdTMyIGk7Ci0JdTMyIGo7CiAKIAlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfY2hlY2tfcGFja2FnZSk7CiAKIAkvKiBUaGUgcGFja2FnZSBpbmZvIGZvciB0aGlzIG5hbWUgaXMgaW4gdGhlIG5leHQgdGFibGUgZW50cnkgKi8KIAotCXBhY2thZ2UgPSBwcmVkZWZpbmVkICsgMTsKKwlwYWNrYWdlID0gZGF0YS0+cHJlZGVmaW5lZCArIDE7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAogCQkJICAiJXMgVmFsaWRhdGluZyByZXR1cm4gUGFja2FnZSBvZiBUeXBlICVYLCBDb3VudCAlWFxuIiwKLQkJCSAgcGF0aG5hbWUsIHBhY2thZ2UtPnJldF9pbmZvLnR5cGUsCisJCQkgIGRhdGEtPnBhdGhuYW1lLCBwYWNrYWdlLT5yZXRfaW5mby50eXBlLAogCQkJICByZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmNvdW50KSk7CiAKIAkvKiBFeHRyYWN0IHBhY2thZ2UgY291bnQgYW5kIGVsZW1lbnRzIGFycmF5ICovCkBAIC00MjksOSArNDI5LDggQEAKIAkvKiBUaGUgcGFja2FnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQsIGVsc2UgaW52YWxpZCAqLwogCiAJaWYgKCFjb3VudCkgewotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkgICAgICAiJXM6IFJldHVybiBQYWNrYWdlIGhhcyBubyBlbGVtZW50cyAoZW1wdHkpIiwKLQkJCSAgICAgIHBhdGhuYW1lKSk7CisJCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwgZGF0YS0+bm9kZV9mbGFncywKKwkJCQkgICAgICAiUmV0dXJuIFBhY2thZ2UgaGFzIG5vIGVsZW1lbnRzIChlbXB0eSkiKSk7CiAKIAkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9WQUxVRSk7CiAJfQpAQCAtNDU2LDE1ICs0NTUsMTYgQEAKIAkJaWYgKGNvdW50IDwgZXhwZWN0ZWRfY291bnQpIHsKIAkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7CiAJCX0gZWxzZSBpZiAoY291bnQgPiBleHBlY3RlZF9jb3VudCkgewotCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJCSAgICAgICIlczogUmV0dXJuIFBhY2thZ2UgaXMgbGFyZ2VyIHRoYW4gbmVlZGVkIC0gIgotCQkJCSAgICAgICJmb3VuZCAldSwgZXhwZWN0ZWQgJXUiLCBwYXRobmFtZSwgY291bnQsCi0JCQkJICAgICAgZXhwZWN0ZWRfY291bnQpKTsKKwkJCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwKKwkJCQkJICAgICAgZGF0YS0+bm9kZV9mbGFncywKKwkJCQkJICAgICAgIlJldHVybiBQYWNrYWdlIGlzIGxhcmdlciB0aGFuIG5lZWRlZCAtICIKKwkJCQkJICAgICAgImZvdW5kICV1LCBleHBlY3RlZCAldSIsIGNvdW50LAorCQkJCQkgICAgICBleHBlY3RlZF9jb3VudCkpOwogCQl9CiAKIAkJLyogVmFsaWRhdGUgYWxsIGVsZW1lbnRzIG9mIHRoZSByZXR1cm5lZCBwYWNrYWdlICovCiAKLQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKHBhdGhuYW1lLCBlbGVtZW50cywKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGRhdGEsIGVsZW1lbnRzLAogCQkJCQkJCXBhY2thZ2UtPnJldF9pbmZvLgogCQkJCQkJCW9iamVjdF90eXBlMSwKIAkJCQkJCQlwYWNrYWdlLT5yZXRfaW5mby4KQEAgLTQ3Myw5ICs0NzMsNiBAQAogCQkJCQkJCW9iamVjdF90eXBlMiwKIAkJCQkJCQlwYWNrYWdlLT5yZXRfaW5mby4KIAkJCQkJCQljb3VudDIsIDApOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybiAoc3RhdHVzKTsKLQkJfQogCQlicmVhazsKIAogCWNhc2UgQUNQSV9QVFlQRTFfVkFSOgpAQCAtNDg1LDcgKzQ4Miw3IEBACiAJCSAqIGVsZW1lbnRzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZQogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUocGF0aG5hbWUsIGVsZW1lbnRzLAorCQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCBlbGVtZW50cywKIAkJCQkJCQkgICBwYWNrYWdlLT5yZXRfaW5mby4KIAkJCQkJCQkgICBvYmplY3RfdHlwZTEsIGkpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC01MTcsOCArNTE0LDcgQEAKIAkJCQkvKiBUaGVzZSBhcmUgdGhlIHJlcXVpcmVkIHBhY2thZ2UgZWxlbWVudHMgKDAsIDEsIG9yIDIpICovCiAKIAkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLAotCQkJCQkJCSAgICAgIGVsZW1lbnRzLAorCQkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIGVsZW1lbnRzLAogCQkJCQkJCSAgICAgIHBhY2thZ2UtPgogCQkJCQkJCSAgICAgIHJldF9pbmZvMy4KIAkJCQkJCQkgICAgICBvYmplY3RfdHlwZVtpXSwKQEAgLTUzMCw4ICs1MjYsNyBAQAogCQkJCS8qIFRoZXNlIGFyZSB0aGUgb3B0aW9uYWwgcGFja2FnZSBlbGVtZW50cyAqLwogCiAJCQkJc3RhdHVzID0KLQkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwKLQkJCQkJCQkgICAgICBlbGVtZW50cywKKwkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCBlbGVtZW50cywKIAkJCQkJCQkgICAgICBwYWNrYWdlLT4KIAkJCQkJCQkgICAgICByZXRfaW5mbzMuCiAJCQkJCQkJICAgICAgdGFpbF9vYmplY3RfdHlwZSwKQEAgLTU0NCwxMSArNTM5LDMwIEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIEFDUElfUFRZUEUyX1JFVl9GSVhFRDoKKworCQkvKiBGaXJzdCBlbGVtZW50IGlzIHRoZSAoSW50ZWdlcikgcmV2aXNpb24gKi8KKworCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIGVsZW1lbnRzLAorCQkJCQkJICAgQUNQSV9SVFlQRV9JTlRFR0VSLCAwKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKworCQllbGVtZW50cysrOworCQljb3VudC0tOworCisJCS8qIEV4YW1pbmUgdGhlIHN1Yi1wYWNrYWdlcyAqLworCisJCXN0YXR1cyA9CisJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfbGlzdChkYXRhLCBwYWNrYWdlLCBlbGVtZW50cywgY291bnQpOworCQlicmVhazsKKwogCWNhc2UgQUNQSV9QVFlQRTJfUEtHX0NPVU5UOgogCiAJCS8qIEZpcnN0IGVsZW1lbnQgaXMgdGhlIChJbnRlZ2VyKSBjb3VudCBvZiBzdWItcGFja2FnZXMgdG8gZm9sbG93ICovCiAKLQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwgZWxlbWVudHMsCisJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoZGF0YSwgZWxlbWVudHMsCiAJCQkJCQkgICBBQ1BJX1JUWVBFX0lOVEVHRVIsIDApOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKQEAgLTU2Niw5ICs1ODAsMTEgQEAKIAkJY291bnQgPSBleHBlY3RlZF9jb3VudDsKIAkJZWxlbWVudHMrKzsKIAotCQkvKiBOb3cgd2UgY2FuIHdhbGsgdGhlIHN1Yi1wYWNrYWdlcyAqLworCQkvKiBFeGFtaW5lIHRoZSBzdWItcGFja2FnZXMgKi8KIAotCQkvKmxpbnQgLWZhbGx0aHJvdWdoICovCisJCXN0YXR1cyA9CisJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfbGlzdChkYXRhLCBwYWNrYWdlLCBlbGVtZW50cywgY291bnQpOworCQlicmVhazsKIAogCWNhc2UgQUNQSV9QVFlQRTI6CiAJY2FzZSBBQ1BJX1BUWVBFMl9GSVhFRDoKQEAgLTU3NiwxNzYgKzU5MiwyNDAgQEAKIAljYXNlIEFDUElfUFRZUEUyX0NPVU5UOgogCiAJCS8qCi0JCSAqIFRoZXNlIHR5cGVzIGFsbCByZXR1cm4gYSBzaW5nbGUgcGFja2FnZSB0aGF0IGNvbnNpc3RzIG9mIGEgdmFyaWFibGUKLQkJICogbnVtYmVyIG9mIHN1Yi1wYWNrYWdlcworCQkgKiBUaGVzZSB0eXBlcyBhbGwgcmV0dXJuIGEgc2luZ2xlIFBhY2thZ2UgdGhhdCBjb25zaXN0cyBvZiBhCisJCSAqIHZhcmlhYmxlIG51bWJlciBvZiBzdWItUGFja2FnZXMuCisJCSAqCisJCSAqIEZpcnN0LCBlbnN1cmUgdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIHN1Yi1QYWNrYWdlLiBJZiBub3QsCisJCSAqIHRoZSBCSU9TIG1heSBoYXZlIGluY29ycmVjdGx5IHJldHVybmVkIHRoZSBvYmplY3QgYXMgYSBzaW5nbGUKKwkJICogcGFja2FnZSBpbnN0ZWFkIG9mIGEgUGFja2FnZSBvZiBQYWNrYWdlcyAoYSBjb21tb24gZXJyb3IgaWYKKwkJICogdGhlcmUgaXMgb25seSBvbmUgZW50cnkpLiBXZSBtYXkgYmUgYWJsZSB0byByZXBhaXIgdGhpcyBieQorCQkgKiB3cmFwcGluZyB0aGUgcmV0dXJuZWQgUGFja2FnZSB3aXRoIGEgbmV3IG91dGVyIFBhY2thZ2UuCiAJCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJc3ViX3BhY2thZ2UgPSAqZWxlbWVudHM7Ci0JCQlzdWJfZWxlbWVudHMgPSBzdWJfcGFja2FnZS0+cGFja2FnZS5lbGVtZW50czsKKwkJaWYgKCgqZWxlbWVudHMpLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgewogCi0JCQkvKiBFYWNoIHN1Yi1vYmplY3QgbXVzdCBiZSBvZiB0eXBlIFBhY2thZ2UgKi8KKwkJCS8qIENyZWF0ZSB0aGUgbmV3IG91dGVyIHBhY2thZ2UgYW5kIHBvcHVsYXRlIGl0ICovCiAKIAkJCXN0YXR1cyA9Ci0JCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwgJnN1Yl9wYWNrYWdlLAotCQkJCQkJICAgICAgQUNQSV9SVFlQRV9QQUNLQUdFLCBpKTsKKwkJCSAgICBhY3BpX25zX3JlcGFpcl9wYWNrYWdlX2xpc3QoZGF0YSwKKwkJCQkJCQlyZXR1cm5fb2JqZWN0X3B0cik7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCQl9CiAKLQkJCS8qIEV4YW1pbmUgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBzdWItcGFja2FnZXMgKi8KKwkJCS8qIFVwZGF0ZSBsb2NhbHMgdG8gcG9pbnQgdG8gdGhlIG5ldyBwYWNrYWdlIChvZiAxIGVsZW1lbnQpICovCiAKLQkJCXN3aXRjaCAocGFja2FnZS0+cmV0X2luZm8udHlwZSkgewotCQkJY2FzZSBBQ1BJX1BUWVBFMjoKLQkJCWNhc2UgQUNQSV9QVFlQRTJfUEtHX0NPVU5UOgotCi0JCQkJLyogRWFjaCBzdWJwYWNrYWdlIGhhcyBhIGZpeGVkIG51bWJlciBvZiBlbGVtZW50cyAqLwotCi0JCQkJZXhwZWN0ZWRfY291bnQgPQotCQkJCSAgICBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDEgKwotCQkJCSAgICBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDI7Ci0JCQkJaWYgKHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50ICE9Ci0JCQkJICAgIGV4cGVjdGVkX2NvdW50KSB7Ci0JCQkJCWNvdW50ID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQ7Ci0JCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7Ci0JCQkJfQotCi0JCQkJc3RhdHVzID0KLQkJCQkgICAgYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKHBhdGhuYW1lLAotCQkJCQkJCQkgICBzdWJfZWxlbWVudHMsCi0JCQkJCQkJCSAgIHBhY2thZ2UtPgotCQkJCQkJCQkgICByZXRfaW5mby4KLQkJCQkJCQkJICAgb2JqZWN0X3R5cGUxLAotCQkJCQkJCQkgICBwYWNrYWdlLT4KLQkJCQkJCQkJICAgcmV0X2luZm8uCi0JCQkJCQkJCSAgIGNvdW50MSwKLQkJCQkJCQkJICAgcGFja2FnZS0+Ci0JCQkJCQkJCSAgIHJldF9pbmZvLgotCQkJCQkJCQkgICBvYmplY3RfdHlwZTIsCi0JCQkJCQkJCSAgIHBhY2thZ2UtPgotCQkJCQkJCQkgICByZXRfaW5mby4KLQkJCQkJCQkJICAgY291bnQyLCAwKTsKLQkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQkJcmV0dXJuIChzdGF0dXMpOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBBQ1BJX1BUWVBFMl9GSVhFRDoKLQotCQkJCS8qIEVhY2ggc3ViLXBhY2thZ2UgaGFzIGEgZml4ZWQgbGVuZ3RoICovCi0KLQkJCQlleHBlY3RlZF9jb3VudCA9IHBhY2thZ2UtPnJldF9pbmZvMi5jb3VudDsKLQkJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgPCBleHBlY3RlZF9jb3VudCkgewotCQkJCQljb3VudCA9IHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50OwotCQkJCQlnb3RvIHBhY2thZ2VfdG9vX3NtYWxsOwotCQkJCX0KLQotCQkJCS8qIENoZWNrIHRoZSB0eXBlIG9mIGVhY2ggc3ViLXBhY2thZ2UgZWxlbWVudCAqLwotCi0JCQkJZm9yIChqID0gMDsgaiA8IGV4cGVjdGVkX2NvdW50OyBqKyspIHsKLQkJCQkJc3RhdHVzID0KLQkJCQkJICAgIGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUocGF0aG5hbWUsCi0JCQkJCQkmc3ViX2VsZW1lbnRzW2pdLAotCQkJCQkJcGFja2FnZS0+cmV0X2luZm8yLm9iamVjdF90eXBlW2pdLCBqKTsKLQkJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJCQlyZXR1cm4gKHN0YXR1cyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQUNQSV9QVFlQRTJfTUlOOgotCi0JCQkJLyogRWFjaCBzdWItcGFja2FnZSBoYXMgYSB2YXJpYWJsZSBidXQgbWluaW11bSBsZW5ndGggKi8KLQotCQkJCWV4cGVjdGVkX2NvdW50ID0gcGFja2FnZS0+cmV0X2luZm8uY291bnQxOwotCQkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7Ci0JCQkJCWNvdW50ID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQ7Ci0JCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7Ci0JCQkJfQotCi0JCQkJLyogQ2hlY2sgdGhlIHR5cGUgb2YgZWFjaCBzdWItcGFja2FnZSBlbGVtZW50ICovCi0KLQkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMocGF0aG5hbWUsCi0JCQkJCQkJCSAgIHN1Yl9lbGVtZW50cywKLQkJCQkJCQkJICAgcGFja2FnZS0+Ci0JCQkJCQkJCSAgIHJldF9pbmZvLgotCQkJCQkJCQkgICBvYmplY3RfdHlwZTEsCi0JCQkJCQkJCSAgIHN1Yl9wYWNrYWdlLT4KLQkJCQkJCQkJICAgcGFja2FnZS4KLQkJCQkJCQkJICAgY291bnQsIDAsIDAsCi0JCQkJCQkJCSAgIDApOwotCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCQlyZXR1cm4gKHN0YXR1cyk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIEFDUElfUFRZUEUyX0NPVU5UOgotCi0JCQkJLyogRmlyc3QgZWxlbWVudCBpcyB0aGUgKEludGVnZXIpIGNvdW50IG9mIGVsZW1lbnRzIHRvIGZvbGxvdyAqLwotCi0JCQkJc3RhdHVzID0KLQkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwKLQkJCQkJCQkgICAgICBzdWJfZWxlbWVudHMsCi0JCQkJCQkJICAgICAgQUNQSV9SVFlQRV9JTlRFR0VSLAotCQkJCQkJCSAgICAgIDApOwotCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCQlyZXR1cm4gKHN0YXR1cyk7Ci0JCQkJfQotCi0JCQkJLyogTWFrZSBzdXJlIHBhY2thZ2UgaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgQ291bnQgKi8KLQotCQkJCWV4cGVjdGVkX2NvdW50ID0KLQkJCQkgICAgKHUzMikgKCpzdWJfZWxlbWVudHMpLT5pbnRlZ2VyLnZhbHVlOwotCQkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7Ci0JCQkJCWNvdW50ID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQ7Ci0JCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7Ci0JCQkJfQotCi0JCQkJLyogQ2hlY2sgdGhlIHR5cGUgb2YgZWFjaCBzdWItcGFja2FnZSBlbGVtZW50ICovCi0KLQkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMocGF0aG5hbWUsCi0JCQkJCQkJCSAgIChzdWJfZWxlbWVudHMKLQkJCQkJCQkJICAgICsgMSksCi0JCQkJCQkJCSAgIHBhY2thZ2UtPgotCQkJCQkJCQkgICByZXRfaW5mby4KLQkJCQkJCQkJICAgb2JqZWN0X3R5cGUxLAotCQkJCQkJCQkgICAoZXhwZWN0ZWRfY291bnQKLQkJCQkJCQkJICAgIC0gMSksIDAsIDAsCi0JCQkJCQkJCSAgIDEpOwotCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCQlyZXR1cm4gKHN0YXR1cyk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCi0JCQllbGVtZW50cysrOworCQkJcmV0dXJuX29iamVjdCA9ICpyZXR1cm5fb2JqZWN0X3B0cjsKKwkJCWVsZW1lbnRzID0gcmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50czsKKwkJCWNvdW50ID0gMTsKIAkJfQorCisJCS8qIEV4YW1pbmUgdGhlIHN1Yi1wYWNrYWdlcyAqLworCisJCXN0YXR1cyA9CisJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfbGlzdChkYXRhLCBwYWNrYWdlLCBlbGVtZW50cywgY291bnQpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAKIAkJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBpZiBwcmVkZWZpbmVkIGluZm8gdGFibGUgaXMgY29ycmVjdCAqLwogCi0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIlczogSW52YWxpZCBpbnRlcm5hbCByZXR1cm4gdHlwZSBpbiB0YWJsZSBlbnRyeTogJVgiLAotCQkJICAgICAgcGF0aG5hbWUsIHBhY2thZ2UtPnJldF9pbmZvLnR5cGUpKTsKKwkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCSAgICAgICJJbnZhbGlkIGludGVybmFsIHJldHVybiB0eXBlIGluIHRhYmxlIGVudHJ5OiAlWCIsCisJCQkJICAgICAgcGFja2FnZS0+cmV0X2luZm8udHlwZSkpOwogCiAJCXJldHVybiAoQUVfQU1MX0lOVEVSTkFMKTsKIAl9CiAKLQlyZXR1cm4gKEFFX09LKTsKKwlyZXR1cm4gKHN0YXR1cyk7CiAKLSAgICAgIHBhY2thZ2VfdG9vX3NtYWxsOgorcGFja2FnZV90b29fc21hbGw6CiAKIAkvKiBFcnJvciBleGl0IGZvciB0aGUgY2FzZSB3aXRoIGFuIGluY29ycmVjdCBwYWNrYWdlIGNvdW50ICovCiAKLQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICIlczogUmV0dXJuIFBhY2thZ2UgaXMgdG9vIHNtYWxsIC0gIgotCQkgICAgICAiZm91bmQgJXUsIGV4cGVjdGVkICV1IiwgcGF0aG5hbWUsIGNvdW50LAotCQkgICAgICBleHBlY3RlZF9jb3VudCkpOworCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwgZGF0YS0+bm9kZV9mbGFncywKKwkJCSAgICAgICJSZXR1cm4gUGFja2FnZSBpcyB0b28gc21hbGwgLSBmb3VuZCAldSBlbGVtZW50cywgZXhwZWN0ZWQgJXUiLAorCQkJICAgICAgY291bnQsIGV4cGVjdGVkX2NvdW50KSk7CisKKwlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1ZBTFVFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19jaGVja19wYWNrYWdlX2xpc3QKKyAqCisgKiBQQVJBTUVURVJTOiAgRGF0YSAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgUGFja2FnZSAgICAgICAgIC0gUG9pbnRlciB0byBwYWNrYWdlLXNwZWNpZmljIGluZm8gZm9yIG1ldGhvZAorICogICAgICAgICAgICAgIEVsZW1lbnRzICAgICAgICAtIEVsZW1lbnQgbGlzdCBvZiBwYXJlbnQgcGFja2FnZS4gQWxsIGVsZW1lbnRzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBsaXN0IHNob3VsZCBiZSBvZiB0eXBlIFBhY2thZ2UuCisgKiAgICAgICAgICAgICAgQ291bnQgICAgICAgICAgIC0gQ291bnQgb2Ygc3VicGFja2FnZXMKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IEV4YW1pbmUgYSBsaXN0IG9mIHN1YnBhY2thZ2VzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX2NoZWNrX3BhY2thZ2VfbGlzdChzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCQkgICBjb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqcGFja2FnZSwKKwkJCSAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywgdTMyIGNvdW50KQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnN1Yl9wYWNrYWdlOworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipzdWJfZWxlbWVudHM7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXUzMiBleHBlY3RlZF9jb3VudDsKKwl1MzIgaTsKKwl1MzIgajsKKworCS8qIFZhbGlkYXRlIGVhY2ggc3ViLVBhY2thZ2UgaW4gdGhlIHBhcmVudCBQYWNrYWdlICovCisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdWJfcGFja2FnZSA9ICplbGVtZW50czsKKwkJc3ViX2VsZW1lbnRzID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHM7CisKKwkJLyogRWFjaCBzdWItb2JqZWN0IG11c3QgYmUgb2YgdHlwZSBQYWNrYWdlICovCisKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCAmc3ViX3BhY2thZ2UsCisJCQkJCQkgICBBQ1BJX1JUWVBFX1BBQ0tBR0UsIGkpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCisJCS8qIEV4YW1pbmUgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBleHBlY3RlZCBzdWItcGFja2FnZXMgKi8KKworCQlzd2l0Y2ggKHBhY2thZ2UtPnJldF9pbmZvLnR5cGUpIHsKKwkJY2FzZSBBQ1BJX1BUWVBFMjoKKwkJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6CisJCWNhc2UgQUNQSV9QVFlQRTJfUkVWX0ZJWEVEOgorCisJCQkvKiBFYWNoIHN1YnBhY2thZ2UgaGFzIGEgZml4ZWQgbnVtYmVyIG9mIGVsZW1lbnRzICovCisKKwkJCWV4cGVjdGVkX2NvdW50ID0KKwkJCSAgICBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDEgKyBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDI7CisJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgPCBleHBlY3RlZF9jb3VudCkgeworCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7CisJCQl9CisKKwkJCXN0YXR1cyA9CisJCQkgICAgYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGRhdGEsIHN1Yl9lbGVtZW50cywKKwkJCQkJCQkgICBwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQkgICBvYmplY3RfdHlwZTEsCisJCQkJCQkJICAgcGFja2FnZS0+cmV0X2luZm8uCisJCQkJCQkJICAgY291bnQxLAorCQkJCQkJCSAgIHBhY2thZ2UtPnJldF9pbmZvLgorCQkJCQkJCSAgIG9iamVjdF90eXBlMiwKKwkJCQkJCQkgICBwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQkgICBjb3VudDIsIDApOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBBQ1BJX1BUWVBFMl9GSVhFRDoKKworCQkJLyogRWFjaCBzdWItcGFja2FnZSBoYXMgYSBmaXhlZCBsZW5ndGggKi8KKworCQkJZXhwZWN0ZWRfY291bnQgPSBwYWNrYWdlLT5yZXRfaW5mbzIuY291bnQ7CisJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgPCBleHBlY3RlZF9jb3VudCkgeworCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7CisJCQl9CisKKwkJCS8qIENoZWNrIHRoZSB0eXBlIG9mIGVhY2ggc3ViLXBhY2thZ2UgZWxlbWVudCAqLworCisJCQlmb3IgKGogPSAwOyBqIDwgZXhwZWN0ZWRfY291bnQ7IGorKykgeworCQkJCXN0YXR1cyA9CisJCQkJICAgIGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoZGF0YSwKKwkJCQkJCQkgICAgICAmc3ViX2VsZW1lbnRzW2pdLAorCQkJCQkJCSAgICAgIHBhY2thZ2UtPgorCQkJCQkJCSAgICAgIHJldF9pbmZvMi4KKwkJCQkJCQkgICAgICBvYmplY3RfdHlwZVtqXSwKKwkJCQkJCQkgICAgICBqKTsKKwkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgQUNQSV9QVFlQRTJfTUlOOgorCisJCQkvKiBFYWNoIHN1Yi1wYWNrYWdlIGhhcyBhIHZhcmlhYmxlIGJ1dCBtaW5pbXVtIGxlbmd0aCAqLworCisJCQlleHBlY3RlZF9jb3VudCA9IHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MTsKKwkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7CisJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKKwkJCX0KKworCQkJLyogQ2hlY2sgdGhlIHR5cGUgb2YgZWFjaCBzdWItcGFja2FnZSBlbGVtZW50ICovCisKKwkJCXN0YXR1cyA9CisJCQkgICAgYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGRhdGEsIHN1Yl9lbGVtZW50cywKKwkJCQkJCQkgICBwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQkgICBvYmplY3RfdHlwZTEsCisJCQkJCQkJICAgc3ViX3BhY2thZ2UtPnBhY2thZ2UuCisJCQkJCQkJICAgY291bnQsIDAsIDAsIDApOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBBQ1BJX1BUWVBFMl9DT1VOVDoKKworCQkJLyoKKwkJCSAqIEZpcnN0IGVsZW1lbnQgaXMgdGhlIChJbnRlZ2VyKSBjb3VudCBvZiBlbGVtZW50cywgaW5jbHVkaW5nCisJCQkgKiB0aGUgY291bnQgZmllbGQuCisJCQkgKi8KKwkJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoZGF0YSwgc3ViX2VsZW1lbnRzLAorCQkJCQkJCSAgIEFDUElfUlRZUEVfSU5URUdFUiwKKwkJCQkJCQkgICAwKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSBwYWNrYWdlIGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIENvdW50IGFuZCBpcworCQkJICogaXMgYXMgbGFyZ2UgYXMgdGhlIG1pbmltdW0gc2l6ZQorCQkJICovCisJCQlleHBlY3RlZF9jb3VudCA9ICh1MzIpKCpzdWJfZWxlbWVudHMpLT5pbnRlZ2VyLnZhbHVlOworCQkJaWYgKHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50IDwgZXhwZWN0ZWRfY291bnQpIHsKKwkJCQlnb3RvIHBhY2thZ2VfdG9vX3NtYWxsOworCQkJfQorCQkJaWYgKHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50IDwKKwkJCSAgICBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDEpIHsKKwkJCQlleHBlY3RlZF9jb3VudCA9IHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MTsKKwkJCQlnb3RvIHBhY2thZ2VfdG9vX3NtYWxsOworCQkJfQorCisJCQkvKiBDaGVjayB0aGUgdHlwZSBvZiBlYWNoIHN1Yi1wYWNrYWdlIGVsZW1lbnQgKi8KKworCQkJc3RhdHVzID0KKwkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMoZGF0YSwKKwkJCQkJCQkgICAoc3ViX2VsZW1lbnRzICsgMSksCisJCQkJCQkJICAgcGFja2FnZS0+cmV0X2luZm8uCisJCQkJCQkJICAgb2JqZWN0X3R5cGUxLAorCQkJCQkJCSAgIChleHBlY3RlZF9jb3VudCAtIDEpLAorCQkJCQkJCSAgIDAsIDAsIDEpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSwgdHlwZSB3YXMgdmFsaWRhdGVkIGJ5IGNhbGxlciAqLworCisJCQlyZXR1cm4gKEFFX0FNTF9JTlRFUk5BTCk7CisJCX0KKworCQllbGVtZW50cysrOworCX0KKworCXJldHVybiAoQUVfT0spOworCitwYWNrYWdlX3Rvb19zbWFsbDoKKworCS8qIFRoZSBzdWItcGFja2FnZSBjb3VudCB3YXMgc21hbGxlciB0aGFuIHJlcXVpcmVkICovCisKKwlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkgICAgICAiUmV0dXJuIFN1Yi1QYWNrYWdlWyV1XSBpcyB0b28gc21hbGwgLSBmb3VuZCAldSBlbGVtZW50cywgZXhwZWN0ZWQgJXUiLAorCQkJICAgICAgaSwgc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQsIGV4cGVjdGVkX2NvdW50KSk7CiAKIAlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1ZBTFVFKTsKIH0KQEAgLTc1NCw3ICs4MzQsNyBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMKICAqCi0gKiBQQVJBTUVURVJTOiAgUGF0aG5hbWUgICAgICAgIC0gRnVsbCBwYXRobmFtZSB0byB0aGUgbm9kZSAoZm9yIGVycm9yIG1zZ3MpCisgKiBQQVJBTUVURVJTOiAgRGF0YSAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCiAgKiAgICAgICAgICAgICAgRWxlbWVudHMgICAgICAgIC0gUG9pbnRlciB0byB0aGUgcGFja2FnZSBlbGVtZW50cyBhcnJheQogICogICAgICAgICAgICAgIFR5cGUxICAgICAgICAgICAtIE9iamVjdCB0eXBlIGZvciBmaXJzdCBncm91cAogICogICAgICAgICAgICAgIENvdW50MSAgICAgICAgICAtIENvdW50IGZvciBmaXJzdCBncm91cApAQCAtNzcwLDcgKzg1MCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfY2hlY2tfcGFja2FnZV9lbGVtZW50cyhjaGFyICpwYXRobmFtZSwKK2FjcGlfbnNfY2hlY2tfcGFja2FnZV9lbGVtZW50cyhzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCiAJCQkgICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmVsZW1lbnRzLAogCQkJICAgICAgIHU4IHR5cGUxLAogCQkJICAgICAgIHUzMiBjb3VudDEsCkBAIC03ODYsNyArODY2LDcgQEAKIAkgKiBUaGUgc2Vjb25kIGdyb3VwIGNhbiBoYXZlIGEgY291bnQgb2YgemVyby4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY291bnQxOyBpKyspIHsKLQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwgdGhpc19lbGVtZW50LAorCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIHRoaXNfZWxlbWVudCwKIAkJCQkJCSAgIHR5cGUxLCBpICsgc3RhcnRfaW5kZXgpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKQEAgLTc5NSw3ICs4NzUsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDI7IGkrKykgewotCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCB0aGlzX2VsZW1lbnQsCisJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoZGF0YSwgdGhpc19lbGVtZW50LAogCQkJCQkJICAgdHlwZTIsCiAJCQkJCQkgICAoaSArIGNvdW50MSArIHN0YXJ0X2luZGV4KSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtODExLDEyICs4OTEsMTMgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZQogICoKLSAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBGdWxsIHBhdGhuYW1lIHRvIHRoZSBub2RlIChmb3IgZXJyb3IgbXNncykKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKICAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0X3B0ciAtIFBvaW50ZXIgdG8gdGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb24gb2YgYSBtZXRob2Qgb3Igb2JqZWN0CiAgKiAgICAgICAgICAgICAgZXhwZWN0ZWRfYnR5cGVzIC0gQml0bWFwIG9mIGV4cGVjdGVkIHJldHVybiB0eXBlKHMpCiAgKiAgICAgICAgICAgICAgcGFja2FnZV9pbmRleCAgIC0gSW5kZXggb2Ygb2JqZWN0IHdpdGhpbiBwYXJlbnQgcGFja2FnZSAoaWYKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIC0gQUNQSV9OT1RfUEFDS0FHRSBvdGhlcndpc2UpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSAtIEFDUElfTk9UX1BBQ0tBR0VfRUxFTUVOVAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSkKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtODI2LDcgKzkwNyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoY2hhciAqcGF0aG5hbWUsCithY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKIAkJCSAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyLAogCQkJICB1MzIgZXhwZWN0ZWRfYnR5cGVzLCB1MzIgcGFja2FnZV9pbmRleCkKIHsKQEAgLTgzNCw5ICs5MTUsNiBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXUzMiByZXR1cm5fYnR5cGU7CiAJY2hhciB0eXBlX2J1ZmZlcls0OF07CS8qIFJvb20gZm9yIDUgdHlwZXMgKi8KLQl1MzIgdGhpc19ydHlwZTsKLQl1MzIgaTsKLQl1MzIgajsKIAogCS8qCiAJICogSWYgd2UgZ2V0IGEgTlVMTCByZXR1cm5fb2JqZWN0IGhlcmUsIGl0IGlzIGEgTlVMTCBwYWNrYWdlIGVsZW1lbnQsCkBAIC04NDksMTAgKzkyNywxMSBAQAogCS8qIEEgTmFtZXNwYWNlIG5vZGUgc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IG1ha2Ugc3VyZSAqLwogCiAJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShyZXR1cm5fb2JqZWN0KSA9PSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgewotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkgICAgICAiJXM6IEludmFsaWQgcmV0dXJuIHR5cGUgLSBGb3VuZCBhIE5hbWVzcGFjZSBub2RlIFslNC40c10gdHlwZSAlcyIsCi0JCQkgICAgICBwYXRobmFtZSwgcmV0dXJuX29iamVjdC0+bm9kZS5uYW1lLmFzY2lpLAotCQkJICAgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKHJldHVybl9vYmplY3QtPm5vZGUudHlwZSkpKTsKKwkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCSAgICAgICJJbnZhbGlkIHJldHVybiB0eXBlIC0gRm91bmQgYSBOYW1lc3BhY2Ugbm9kZSBbJTQuNHNdIHR5cGUgJXMiLAorCQkJCSAgICAgIHJldHVybl9vYmplY3QtPm5vZGUubmFtZS5hc2NpaSwKKwkJCQkgICAgICBhY3BpX3V0X2dldF90eXBlX25hbWUocmV0dXJuX29iamVjdC0+bm9kZS4KKwkJCQkJCQkgICAgdHlwZSkpKTsKIAkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKIAl9CiAKQEAgLTg5NywxMCArOTc2LDExIEBACiAKIAkJLyogVHlwZSBtaXNtYXRjaCAtLSBhdHRlbXB0IHJlcGFpciBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0ICovCiAKLQkJc3RhdHVzID0gYWNwaV9uc19yZXBhaXJfb2JqZWN0KGV4cGVjdGVkX2J0eXBlcywgcGFja2FnZV9pbmRleCwKKwkJc3RhdHVzID0gYWNwaV9uc19yZXBhaXJfb2JqZWN0KGRhdGEsIGV4cGVjdGVkX2J0eXBlcywKKwkJCQkJICAgICAgIHBhY2thZ2VfaW5kZXgsCiAJCQkJCSAgICAgICByZXR1cm5fb2JqZWN0X3B0cik7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJcmV0dXJuIChzdGF0dXMpOworCQkJcmV0dXJuIChBRV9PSyk7CS8qIFJlcGFpciB3YXMgc3VjY2Vzc2Z1bCAqLwogCQl9CiAJCWdvdG8gdHlwZV9lcnJvcl9leGl0OwogCX0KQEAgLTkwOCw3ICs5ODgsNyBAQAogCS8qIEZvciByZWZlcmVuY2Ugb2JqZWN0cywgY2hlY2sgdGhhdCB0aGUgcmVmZXJlbmNlIHR5cGUgaXMgY29ycmVjdCAqLwogCiAJaWYgKHJldHVybl9vYmplY3QtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKLQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19yZWZlcmVuY2UocGF0aG5hbWUsIHJldHVybl9vYmplY3QpOworCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX3JlZmVyZW5jZShkYXRhLCByZXR1cm5fb2JqZWN0KTsKIAl9CiAKIAlyZXR1cm4gKHN0YXR1cyk7CkBAIC05MTcsMzMgKzk5NywxOSBAQAogCiAJLyogQ3JlYXRlIGEgc3RyaW5nIHdpdGggYWxsIGV4cGVjdGVkIHR5cGVzIGZvciB0aGlzIHByZWRlZmluZWQgb2JqZWN0ICovCiAKLQlqID0gMTsKLQl0eXBlX2J1ZmZlclswXSA9IDA7Ci0JdGhpc19ydHlwZSA9IEFDUElfUlRZUEVfSU5URUdFUjsKKwlhY3BpX25zX2dldF9leHBlY3RlZF90eXBlcyh0eXBlX2J1ZmZlciwgZXhwZWN0ZWRfYnR5cGVzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9SVFlQRVM7IGkrKykgewotCi0JCS8qIElmIG9uZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZXMsIGNvbmNhdGVuYXRlIHRoZSBuYW1lIG9mIHRoaXMgdHlwZSAqLwotCi0JCWlmIChleHBlY3RlZF9idHlwZXMgJiB0aGlzX3J0eXBlKSB7Ci0JCQlBQ1BJX1NUUkNBVCh0eXBlX2J1ZmZlciwgJmFjcGlfcnR5cGVfbmFtZXNbaV1bal0pOwotCQkJaiA9IDA7CS8qIFVzZSBuYW1lIHNlcGFyYXRvciBmcm9tIG5vdyBvbiAqLwotCQl9Ci0JCXRoaXNfcnR5cGUgPDw9IDE7CS8qIE5leHQgUnR5cGUgKi8KLQl9Ci0KLQlpZiAocGFja2FnZV9pbmRleCA9PSBBQ1BJX05PVF9QQUNLQUdFKSB7Ci0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIlczogUmV0dXJuIHR5cGUgbWlzbWF0Y2ggLSBmb3VuZCAlcywgZXhwZWN0ZWQgJXMiLAotCQkJICAgICAgcGF0aG5hbWUsCi0JCQkgICAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHJldHVybl9vYmplY3QpLAotCQkJICAgICAgdHlwZV9idWZmZXIpKTsKKwlpZiAocGFja2FnZV9pbmRleCA9PSBBQ1BJX05PVF9QQUNLQUdFX0VMRU1FTlQpIHsKKwkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCSAgICAgICJSZXR1cm4gdHlwZSBtaXNtYXRjaCAtIGZvdW5kICVzLCBleHBlY3RlZCAlcyIsCisJCQkJICAgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZQorCQkJCSAgICAgIChyZXR1cm5fb2JqZWN0KSwgdHlwZV9idWZmZXIpKTsKIAl9IGVsc2UgewotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkgICAgICAiJXM6IFJldHVybiBQYWNrYWdlIHR5cGUgbWlzbWF0Y2ggYXQgaW5kZXggJXUgLSAiCi0JCQkgICAgICAiZm91bmQgJXMsIGV4cGVjdGVkICVzIiwgcGF0aG5hbWUsIHBhY2thZ2VfaW5kZXgsCi0JCQkgICAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHJldHVybl9vYmplY3QpLAotCQkJICAgICAgdHlwZV9idWZmZXIpKTsKKwkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCSAgICAgICJSZXR1cm4gUGFja2FnZSB0eXBlIG1pc21hdGNoIGF0IGluZGV4ICV1IC0gIgorCQkJCSAgICAgICJmb3VuZCAlcywgZXhwZWN0ZWQgJXMiLCBwYWNrYWdlX2luZGV4LAorCQkJCSAgICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKKwkJCQkgICAgICAocmV0dXJuX29iamVjdCksIHR5cGVfYnVmZmVyKSk7CiAJfQogCiAJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKQEAgLTk1Myw3ICsxMDE5LDcgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19jaGVja19yZWZlcmVuY2UKICAqCi0gKiBQQVJBTUVURVJTOiAgUGF0aG5hbWUgICAgICAgIC0gRnVsbCBwYXRobmFtZSB0byB0aGUgbm9kZSAoZm9yIGVycm9yIG1zZ3MpCisgKiBQQVJBTUVURVJTOiAgRGF0YSAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCiAgKiAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgIC0gT2JqZWN0IHJldHVybmVkIGZyb20gdGhlIGV2YWx1YXRpb24gb2YgYQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBvciBvYmplY3QKICAqCkBAIC05NjYsNyArMTAzMiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGNoYXIgKnBhdGhuYW1lLAorYWNwaV9uc19jaGVja19yZWZlcmVuY2Uoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAogCQkJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX29iamVjdCkKIHsKIApAQCAtOTc5LDk0ICsxMDQ1LDQ2IEBACiAJCXJldHVybiAoQUVfT0spOwogCX0KIAotCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJICAgICAgIiVzOiBSZXR1cm4gdHlwZSBtaXNtYXRjaCAtICIKLQkJICAgICAgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIG9iamVjdCB0eXBlIFslc10gJTIuMlgiLAotCQkgICAgICBwYXRobmFtZSwgYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUocmV0dXJuX29iamVjdCksCi0JCSAgICAgIHJldHVybl9vYmplY3QtPnJlZmVyZW5jZS5jbGFzcykpOworCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwgZGF0YS0+bm9kZV9mbGFncywKKwkJCSAgICAgICJSZXR1cm4gdHlwZSBtaXNtYXRjaCAtIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIG9iamVjdCB0eXBlIFslc10gJTIuMlgiLAorCQkJICAgICAgYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUocmV0dXJuX29iamVjdCksCisJCQkgICAgICByZXR1cm5fb2JqZWN0LT5yZWZlcmVuY2UuY2xhc3MpKTsKIAogCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVFlQRSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVwYWlyX29iamVjdAorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZ2V0X2V4cGVjdGVkX3R5cGVzCiAgKgotICogUEFSQU1FVEVSUzogIFBhdGhuYW1lICAgICAgICAtIEZ1bGwgcGF0aG5hbWUgdG8gdGhlIG5vZGUgKGZvciBlcnJvciBtc2dzKQotICogICAgICAgICAgICAgIHBhY2thZ2VfaW5kZXggICAtIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBpbiBhIHBhY2thZ2UKLSAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0X3B0ciAtIFBvaW50ZXIgdG8gdGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb24gb2YgYSBtZXRob2Qgb3Igb2JqZWN0CisgKiBQQVJBTUVURVJTOiAgQnVmZmVyICAgICAgICAgIC0gUG9pbnRlciB0byB3aGVyZSB0aGUgc3RyaW5nIGlzIHJldHVybmVkCisgKiAgICAgICAgICAgICAgZXhwZWN0ZWRfYnR5cGVzIC0gQml0bWFwIG9mIGV4cGVjdGVkIHJldHVybiB0eXBlKHMpCiAgKgotICogUkVUVVJOOiAgICAgIFN0YXR1cy4gQUVfT0sgaWYgcmVwYWlyIHdhcyBzdWNjZXNzZnVsLgorICogUkVUVVJOOiAgICAgIEJ1ZmZlciBpcyBwb3B1bGF0ZWQgd2l0aCB0eXBlIG5hbWVzLgogICoKLSAqIERFU0NSSVBUSU9OOiBBdHRlbXB0IHRvIHJlcGFpci9jb252ZXJ0IGEgcmV0dXJuIG9iamVjdCBvZiBhIHR5cGUgdGhhdCB3YXMKLSAqICAgICAgICAgICAgICBub3QgZXhwZWN0ZWQuCisgKiBERVNDUklQVElPTjogVHJhbnNsYXRlIHRoZSBleHBlY3RlZCB0eXBlcyBiaXRtYXAgaW50byBhIHN0cmluZyBvZiBhc2NpaQorICogICAgICAgICAgICAgIG5hbWVzIG9mIGV4cGVjdGVkIHR5cGVzLCBmb3IgdXNlIGluIHdhcm5pbmcgbWVzc2FnZXMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX3JlcGFpcl9vYmplY3QodTMyIGV4cGVjdGVkX2J0eXBlcywKLQkJICAgICAgdTMyIHBhY2thZ2VfaW5kZXgsCi0JCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0cikKK3N0YXRpYyB2b2lkIGFjcGlfbnNfZ2V0X2V4cGVjdGVkX3R5cGVzKGNoYXIgKmJ1ZmZlciwgdTMyIGV4cGVjdGVkX2J0eXBlcykKIHsKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fb2JqZWN0ID0gKnJldHVybl9vYmplY3RfcHRyOwotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5ld19vYmplY3Q7Ci0JYWNwaV9zaXplIGxlbmd0aDsKKwl1MzIgdGhpc19ydHlwZTsKKwl1MzIgaTsKKwl1MzIgajsKIAotCXN3aXRjaCAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUpIHsKLQljYXNlIEFDUElfVFlQRV9CVUZGRVI6CisJaiA9IDE7CisJYnVmZmVyWzBdID0gMDsKKwl0aGlzX3J0eXBlID0gQUNQSV9SVFlQRV9JTlRFR0VSOwogCi0JCWlmICghKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfU1RSSU5HKSkgewotCQkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fUlRZUEVTOyBpKyspIHsKKworCQkvKiBJZiBvbmUgb2YgdGhlIGV4cGVjdGVkIHR5cGVzLCBjb25jYXRlbmF0ZSB0aGUgbmFtZSBvZiB0aGlzIHR5cGUgKi8KKworCQlpZiAoZXhwZWN0ZWRfYnR5cGVzICYgdGhpc19ydHlwZSkgeworCQkJQUNQSV9TVFJDQVQoYnVmZmVyLCAmYWNwaV9ydHlwZV9uYW1lc1tpXVtqXSk7CisJCQlqID0gMDsJLyogVXNlIG5hbWUgc2VwYXJhdG9yIGZyb20gbm93IG9uICovCiAJCX0KLQotCQkvKgotCQkgKiBIYXZlIGEgQnVmZmVyLCBleHBlY3RlZCBhIFN0cmluZywgY29udmVydC4gVXNlIGEgdG9fc3RyaW5nCi0JCSAqIGNvbnZlcnNpb24sIG5vIHRyYW5zZm9ybSBwZXJmb3JtZWQgb24gdGhlIGJ1ZmZlciBkYXRhLiBUaGUgYmVzdAotCQkgKiBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIF9CSUYgbWV0aG9kLCB3aGVyZSB0aGUgc3RyaW5nIGRhdGEgZnJvbQotCQkgKiB0aGUgYmF0dGVyeSBpcyBvZnRlbiAoaW5jb3JyZWN0bHkpIHJldHVybmVkIGFzIGJ1ZmZlciBvYmplY3QocykuCi0JCSAqLwotCQlsZW5ndGggPSAwOwotCQl3aGlsZSAoKGxlbmd0aCA8IHJldHVybl9vYmplY3QtPmJ1ZmZlci5sZW5ndGgpICYmCi0JCSAgICAgICAocmV0dXJuX29iamVjdC0+YnVmZmVyLnBvaW50ZXJbbGVuZ3RoXSkpIHsKLQkJCWxlbmd0aCsrOwotCQl9Ci0KLQkJLyogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLwotCi0JCW5ld19vYmplY3QgPSBhY3BpX3V0X2NyZWF0ZV9zdHJpbmdfb2JqZWN0KGxlbmd0aCk7Ci0JCWlmICghbmV3X29iamVjdCkgewotCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwotCQl9Ci0KLQkJLyoKLQkJICogQ29weSB0aGUgcmF3IGJ1ZmZlciBkYXRhIHdpdGggbm8gdHJhbnNmb3JtLiBTdHJpbmcgaXMgYWxyZWFkeSBOVUxMCi0JCSAqIHRlcm1pbmF0ZWQgYXQgTGVuZ3RoKzEuCi0JCSAqLwotCQlBQ1BJX01FTUNQWShuZXdfb2JqZWN0LT5zdHJpbmcucG9pbnRlciwKLQkJCSAgICByZXR1cm5fb2JqZWN0LT5idWZmZXIucG9pbnRlciwgbGVuZ3RoKTsKLQotCQkvKiBJbnN0YWxsIHRoZSBuZXcgcmV0dXJuIG9iamVjdCAqLwotCi0JCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fb2JqZWN0KTsKLQkJKnJldHVybl9vYmplY3RfcHRyID0gbmV3X29iamVjdDsKLQotCQkvKgotCQkgKiBJZiB0aGUgb2JqZWN0IGlzIGEgcGFja2FnZSBlbGVtZW50LCB3ZSBuZWVkIHRvOgotCQkgKiAxLiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb3JpZ25hbCBvYmplY3QsIGl0IHdhcwotCQkgKiAgICBpbmNyZW1lbnRlZCB3aGVuIGJ1aWxkaW5nIHRoZSBwYWNrYWdlCi0JCSAqIDIuIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBuZXcgb2JqZWN0LCBpdCB3aWxsIGJlCi0JCSAqICAgIGRlY3JlbWVudGVkIHdoZW4gcmVsZWFzaW5nIHRoZSBwYWNrYWdlCi0JCSAqLwotCQlpZiAocGFja2FnZV9pbmRleCAhPSBBQ1BJX05PVF9QQUNLQUdFKSB7Ci0JCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocmV0dXJuX29iamVjdCk7Ci0JCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2UobmV3X29iamVjdCk7Ci0JCX0KLQkJcmV0dXJuIChBRV9PSyk7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKKwkJdGhpc19ydHlwZSA8PD0gMTsJLyogTmV4dCBSdHlwZSAqLwogCX0KLQotCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVFlQRSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyYjJhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZHVsZSBOYW1lOiBuc3JlcGFpciAtIFJlcGFpciBmb3Igb2JqZWN0cyByZXR1cm5lZCBieSBwcmVkZWZpbmVkIG1ldGhvZHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA5LCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKyNpbmNsdWRlICJhY2NvbW1vbi5oIgorI2luY2x1ZGUgImFjbmFtZXNwLmgiCisjaW5jbHVkZSAiYWNwcmVkZWYuaCIKKworI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCitBQ1BJX01PRFVMRV9OQU1FKCJuc3JlcGFpciIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVwYWlyX29iamVjdAorICoKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgZXhwZWN0ZWRfYnR5cGVzICAgICAtIE9iamVjdCB0eXBlcyBleHBlY3RlZAorICogICAgICAgICAgICAgIHBhY2thZ2VfaW5kZXggICAgICAgLSBJbmRleCBvZiBvYmplY3Qgd2l0aGluIHBhcmVudCBwYWNrYWdlIChpZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIC0gQUNQSV9OT1RfUEFDS0FHRV9FTEVNRU5UCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSkKKyAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0X3B0ciAgIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb24gb2YgYSBtZXRob2Qgb3Igb2JqZWN0CisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cy4gQUVfT0sgaWYgcmVwYWlyIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqIERFU0NSSVBUSU9OOiBBdHRlbXB0IHRvIHJlcGFpci9jb252ZXJ0IGEgcmV0dXJuIG9iamVjdCBvZiBhIHR5cGUgdGhhdCB3YXMKKyAqICAgICAgICAgICAgICBub3QgZXhwZWN0ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9vYmplY3Qoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkgICAgICB1MzIgZXhwZWN0ZWRfYnR5cGVzLAorCQkgICAgICB1MzIgcGFja2FnZV9pbmRleCwKKwkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QgPSAqcmV0dXJuX29iamVjdF9wdHI7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29iamVjdDsKKwlhY3BpX3NpemUgbGVuZ3RoOworCisJc3dpdGNoIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSkgeworCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKKworCQkvKiBEb2VzIHRoZSBtZXRob2Qvb2JqZWN0IGxlZ2FsbHkgcmV0dXJuIGEgc3RyaW5nPyAqLworCisJCWlmICghKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfU1RSSU5HKSkgeworCQkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwkJfQorCisJCS8qCisJCSAqIEhhdmUgYSBCdWZmZXIsIGV4cGVjdGVkIGEgU3RyaW5nLCBjb252ZXJ0LiBVc2UgYSB0b19zdHJpbmcKKwkJICogY29udmVyc2lvbiwgbm8gdHJhbnNmb3JtIHBlcmZvcm1lZCBvbiB0aGUgYnVmZmVyIGRhdGEuIFRoZSBiZXN0CisJCSAqIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgX0JJRiBtZXRob2QsIHdoZXJlIHRoZSBzdHJpbmcgZGF0YSBmcm9tCisJCSAqIHRoZSBiYXR0ZXJ5IGlzIG9mdGVuIChpbmNvcnJlY3RseSkgcmV0dXJuZWQgYXMgYnVmZmVyIG9iamVjdChzKS4KKwkJICovCisJCWxlbmd0aCA9IDA7CisJCXdoaWxlICgobGVuZ3RoIDwgcmV0dXJuX29iamVjdC0+YnVmZmVyLmxlbmd0aCkgJiYKKwkJICAgICAgIChyZXR1cm5fb2JqZWN0LT5idWZmZXIucG9pbnRlcltsZW5ndGhdKSkgeworCQkJbGVuZ3RoKys7CisJCX0KKworCQkvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCisKKwkJbmV3X29iamVjdCA9IGFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QobGVuZ3RoKTsKKwkJaWYgKCFuZXdfb2JqZWN0KSB7CisJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CisJCX0KKworCQkvKgorCQkgKiBDb3B5IHRoZSByYXcgYnVmZmVyIGRhdGEgd2l0aCBubyB0cmFuc2Zvcm0uIFN0cmluZyBpcyBhbHJlYWR5IE5VTEwKKwkJICogdGVybWluYXRlZCBhdCBMZW5ndGgrMS4KKwkJICovCisJCUFDUElfTUVNQ1BZKG5ld19vYmplY3QtPnN0cmluZy5wb2ludGVyLAorCQkJICAgIHJldHVybl9vYmplY3QtPmJ1ZmZlci5wb2ludGVyLCBsZW5ndGgpOworCisJCS8qCisJCSAqIElmIHRoZSBvcmlnaW5hbCBvYmplY3QgaXMgYSBwYWNrYWdlIGVsZW1lbnQsIHdlIG5lZWQgdG86CisJCSAqIDEuIFNldCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBuZXcgb2JqZWN0IHRvIG1hdGNoIHRoZQorCQkgKiAgICByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9sZCBvYmplY3QuCisJCSAqIDIuIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvcmlnaW5hbCBvYmplY3QuCisJCSAqLworCQlpZiAocGFja2FnZV9pbmRleCAhPSBBQ1BJX05PVF9QQUNLQUdFX0VMRU1FTlQpIHsKKwkJCW5ld19vYmplY3QtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQgPQorCQkJICAgIHJldHVybl9vYmplY3QtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQ7CisKKwkJCWlmIChyZXR1cm5fb2JqZWN0LT5jb21tb24ucmVmZXJlbmNlX2NvdW50ID4gMSkgeworCQkJCXJldHVybl9vYmplY3QtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQtLTsKKwkJCX0KKworCQkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLAorCQkJCQkgICAgICBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCQkgICAgICAiQ29udmVydGVkIEJ1ZmZlciB0byBleHBlY3RlZCBTdHJpbmcgYXQgaW5kZXggJXUiLAorCQkJCQkgICAgICBwYWNrYWdlX2luZGV4KSk7CisJCX0gZWxzZSB7CisJCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsCisJCQkJCSAgICAgIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkJCSAgICAgICJDb252ZXJ0ZWQgQnVmZmVyIHRvIGV4cGVjdGVkIFN0cmluZyIpKTsKKwkJfQorCisJCS8qIERlbGV0ZSBvbGQgb2JqZWN0LCBpbnN0YWxsIHRoZSBuZXcgcmV0dXJuIG9iamVjdCAqLworCisJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fb2JqZWN0KTsKKwkJKnJldHVybl9vYmplY3RfcHRyID0gbmV3X29iamVjdDsKKwkJZGF0YS0+ZmxhZ3MgfD0gQUNQSV9PQkpFQ1RfUkVQQUlSRUQ7CisJCXJldHVybiAoQUVfT0spOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfcGFja2FnZV9saXN0CisgKgorICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICBvYmpfZGVzY19wdHIgICAgICAgIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHRvIHJlcGFpci4gVGhlIG5ldworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9iamVjdCBpcyByZXR1cm5lZCBoZXJlLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGluZyB0aGUgb2xkIG9iamVjdC4KKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzLCBuZXcgb2JqZWN0IGluICpvYmpfZGVzY19wdHIKKyAqCisgKiBERVNDUklQVElPTjogUmVwYWlyIGEgY29tbW9uIHByb2JsZW0gd2l0aCBvYmplY3RzIHRoYXQgYXJlIGRlZmluZWQgdG8gcmV0dXJuCisgKiAgICAgICAgICAgICAgYSB2YXJpYWJsZS1sZW5ndGggUGFja2FnZSBvZiBQYWNrYWdlcy4gSWYgdGhlIHZhcmlhYmxlLWxlbmd0aAorICogICAgICAgICAgICAgIGlzIG9uZSwgc29tZSBCSU9TIGNvZGUgbWlzdGFrZW5seSBzaW1wbHkgZGVjbGFyZXMgYSBzaW5nbGUKKyAqICAgICAgICAgICAgICBQYWNrYWdlIGluc3RlYWQgb2YgYSBQYWNrYWdlIHdpdGggb25lIHN1Yi1QYWNrYWdlLiBUaGlzCisgKiAgICAgICAgICAgICAgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gcmVwYWlyIHRoaXMgZXJyb3IgYnkgd3JhcHBpbmcgYSBQYWNrYWdlCisgKiAgICAgICAgICAgICAgb2JqZWN0IGFyb3VuZCB0aGUgb3JpZ2luYWwgUGFja2FnZSwgY3JlYXRpbmcgdGhlIGNvcnJlY3QKKyAqICAgICAgICAgICAgICBQYWNrYWdlIHdpdGggb25lIHN1Yi1QYWNrYWdlLgorICoKKyAqICAgICAgICAgICAgICBOYW1lcyB0aGF0IGNhbiBiZSByZXBhaXJlZCBpbiB0aGlzIG1hbm5lciBpbmNsdWRlOgorICogICAgICAgICAgICAgIF9BTFIsIF9DU0QsIF9IUFgsIF9NTFMsIF9QUlQsIF9QU1MsIF9UUlQsIFRTUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9wYWNrYWdlX2xpc3Qoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipvYmpfZGVzY19wdHIpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcGtnX29ial9kZXNjOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIG5ldyBvdXRlciBwYWNrYWdlIGFuZCBwb3B1bGF0ZSBpdC4gVGhlIG5ldyBwYWNrYWdlIHdpbGwKKwkgKiBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHRoZSBsb25lIHN1YnBhY2thZ2UuCisJICovCisJcGtnX29ial9kZXNjID0gYWNwaV91dF9jcmVhdGVfcGFja2FnZV9vYmplY3QoMSk7CisJaWYgKCFwa2dfb2JqX2Rlc2MpIHsKKwkJcmV0dXJuIChBRV9OT19NRU1PUlkpOworCX0KKworCXBrZ19vYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50c1swXSA9ICpvYmpfZGVzY19wdHI7CisKKwkvKiBSZXR1cm4gdGhlIG5ldyBvYmplY3QgaW4gdGhlIG9iamVjdCBwb2ludGVyICovCisKKwkqb2JqX2Rlc2NfcHRyID0gcGtnX29ial9kZXNjOworCWRhdGEtPmZsYWdzIHw9IEFDUElfT0JKRUNUX1JFUEFJUkVEOworCisJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJICAgICAgIkluY29ycmVjdGx5IGZvcm1lZCBQYWNrYWdlLCBhdHRlbXB0aW5nIHJlcGFpciIpKTsKKworCXJldHVybiAoQUVfT0spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwppbmRleCA3ODI3N2VkLi5lYTU1YWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwpAQCAtODgsNyArODgsOCBAQAogCiAJCS8qIFRoZXJlIGlzIGEgbm9uLWFzY2lpIGNoYXJhY3RlciBpbiB0aGUgbmFtZSAqLwogCi0JCUFDUElfTU9WRV8zMl9UT18zMigmYmFkX25hbWUsIGludGVybmFsX25hbWUpOworCQlBQ1BJX01PVkVfMzJfVE9fMzIoJmJhZF9uYW1lLAorCQkJCSAgIEFDUElfQ0FTVF9QVFIodTMyLCBpbnRlcm5hbF9uYW1lKSk7CiAJCWFjcGlfb3NfcHJpbnRmKCJbMHglNC40WF0gKE5PTi1BU0NJSSkiLCBiYWRfbmFtZSk7CiAJfSBlbHNlIHsKIAkJLyogQ29udmVydCBwYXRoIHRvIGV4dGVybmFsIGZvcm1hdCAqLwpAQCAtODM2LDcgKzgzNyw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWNoYXIgKmludGVybmFsX3BhdGg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihuc19nZXRfbm9kZSwgcGF0aG5hbWUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2dldF9ub2RlLCBBQ1BJX0NBU1RfUFRSKGNoYXIsIHBhdGhuYW1lKSk7CiAKIAlpZiAoIXBhdGhuYW1lKSB7CiAJCSpyZXR1cm5fbm9kZSA9IHByZWZpeF9ub2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCmluZGV4IGRhZjRhZDMuLjQ5MjlkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKQEAgLTUzNSwxMCArNTM1LDExIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXUzMiBmbGFnczsKLQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBoaWQ7Ci0Jc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWQ7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKmhpZDsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWQ7CiAJdTMyIGk7Ci0JaW50IGZvdW5kOworCXU4IGZvdW5kOworCWludCBub19tYXRjaDsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtNTgyLDEwICs1ODMsMTQgQEAKIAkJCXJldHVybiAoQUVfQ1RSTF9ERVBUSCk7CiAJCX0KIAotCQlpZiAoQUNQSV9TVFJOQ01QKGhpZC52YWx1ZSwgaW5mby0+aGlkLCBzaXplb2YoaGlkLnZhbHVlKSkgIT0gMCkgeworCQlub19tYXRjaCA9IEFDUElfU1RSQ01QKGhpZC0+c3RyaW5nLCBpbmZvLT5oaWQpOworCQlBQ1BJX0ZSRUUoaGlkKTsKIAotCQkJLyogR2V0IHRoZSBsaXN0IG9mIENvbXBhdGlibGUgSURzICovCi0KKwkJaWYgKG5vX21hdGNoKSB7CisJCQkvKgorCQkJICogSElEIGRvZXMgbm90IG1hdGNoLCBhdHRlbXB0IG1hdGNoIHdpdGhpbiB0aGUKKwkJCSAqIGxpc3Qgb2YgQ29tcGF0aWJsZSBJRHMgKENJRHMpCisJCQkgKi8KIAkJCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9DSUQobm9kZSwgJmNpZCk7CiAJCQlpZiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgewogCQkJCXJldHVybiAoQUVfT0spOwpAQCAtNTk3LDEwICs2MDIsOCBAQAogCiAJCQlmb3VuZCA9IDA7CiAJCQlmb3IgKGkgPSAwOyBpIDwgY2lkLT5jb3VudDsgaSsrKSB7Ci0JCQkJaWYgKEFDUElfU1RSTkNNUChjaWQtPmlkW2ldLnZhbHVlLCBpbmZvLT5oaWQsCi0JCQkJCQkgc2l6ZW9mKHN0cnVjdAotCQkJCQkJCWFjcGlfY29tcGF0aWJsZV9pZCkpID09Ci0JCQkJICAgIDApIHsKKwkJCQlpZiAoQUNQSV9TVFJDTVAoY2lkLT5pZHNbaV0uc3RyaW5nLCBpbmZvLT5oaWQpCisJCQkJICAgID09IDApIHsKIAkJCQkJZm91bmQgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMKaW5kZXggZjIzNTkzZC4uZGRjODRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYwpAQCAtNTEsNiArNTEsMTEgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnN4Zm5hbWUiKQogCisvKiBMb2NhbCBwcm90b3R5cGVzICovCitzdGF0aWMgY2hhciAqYWNwaV9uc19jb3B5X2RldmljZV9pZChzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqZGVzdCwKKwkJCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKnNvdXJjZSwKKwkJCQkgICAgY2hhciAqc3RyaW5nX2FyZWEpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2hhbmRsZQpAQCAtNjgsNiArNzMsNyBAQAogICogICAgICAgICAgICAgIG5hbWVzcGFjZSBoYW5kbGUuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X2hhbmRsZShhY3BpX2hhbmRsZSBwYXJlbnQsCiAJCWFjcGlfc3RyaW5nIHBhdGhuYW1lLCBhY3BpX2hhbmRsZSAqIHJldF9oYW5kbGUpCkBAIC0yMTAsMTAgKzIxNiwzOCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY29weV9kZXZpY2VfaWQKKyAqCisgKiBQQVJBTUVURVJTOiAgRGVzdCAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIERFVklDRV9JRAorICogICAgICAgICAgICAgIFNvdXJjZSAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBzb3VyY2UgREVWSUNFX0lECisgKiAgICAgICAgICAgICAgc3RyaW5nX2FyZWEgICAgICAgICAtIFBvaW50ZXIgdG8gd2hlcmUgdG8gY29weSB0aGUgZGVzdCBzdHJpbmcKKyAqCisgKiBSRVRVUk46ICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBzdHJpbmcgYXJlYQorICoKKyAqIERFU0NSSVBUSU9OOiBDb3B5IGEgc2luZ2xlIERFVklDRV9JRCwgaW5jbHVkaW5nIHRoZSBzdHJpbmcgZGF0YS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNoYXIgKmFjcGlfbnNfY29weV9kZXZpY2VfaWQoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKmRlc3QsCisJCQkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICpzb3VyY2UsCisJCQkJICAgIGNoYXIgKnN0cmluZ19hcmVhKQoreworCS8qIENyZWF0ZSB0aGUgZGVzdGluYXRpb24gREVWSUNFX0lEICovCisKKwlkZXN0LT5zdHJpbmcgPSBzdHJpbmdfYXJlYTsKKwlkZXN0LT5sZW5ndGggPSBzb3VyY2UtPmxlbmd0aDsKKworCS8qIENvcHkgYWN0dWFsIHN0cmluZyBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV4dCBzdHJpbmcgYXJlYSAqLworCisJQUNQSV9NRU1DUFkoc3RyaW5nX2FyZWEsIHNvdXJjZS0+c3RyaW5nLCBzb3VyY2UtPmxlbmd0aCk7CisJcmV0dXJuIChzdHJpbmdfYXJlYSArIHNvdXJjZS0+bGVuZ3RoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9vYmplY3RfaW5mbwogICoKLSAqIFBBUkFNRVRFUlM6ICBIYW5kbGUgICAgICAgICAgLSBPYmplY3QgSGFuZGxlCi0gKiAgICAgICAgICAgICAgQnVmZmVyICAgICAgICAgIC0gV2hlcmUgdGhlIGluZm8gaXMgcmV0dXJuZWQKKyAqIFBBUkFNRVRFUlM6ICBIYW5kbGUgICAgICAgICAgICAgIC0gT2JqZWN0IEhhbmRsZQorICogICAgICAgICAgICAgIHJldHVybl9idWZmZXIgICAgICAgLSBXaGVyZSB0aGUgaW5mbyBpcyByZXR1cm5lZAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC0yMjEsMzMgKzI1NSwzNyBAQAogICogICAgICAgICAgICAgIG5hbWVzcGFjZSBub2RlIGFuZCBwb3NzaWJseSBieSBydW5uaW5nIHNldmVyYWwgc3RhbmRhcmQKICAqICAgICAgICAgICAgICBjb250cm9sIG1ldGhvZHMgKFN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgYSBkZXZpY2UuKQogICoKKyAqIEZvciBEZXZpY2UgYW5kIFByb2Nlc3NvciBvYmplY3RzLCBydW4gdGhlIERldmljZSBfSElELCBfVUlELCBfQ0lELCBfU1RBLAorICogX0FEUiwgX3N4X3csIGFuZCBfc3hfZCBtZXRob2RzLgorICoKKyAqIE5vdGU6IEFsbG9jYXRlcyB0aGUgcmV0dXJuIGJ1ZmZlciwgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIGFjcGlfc3RhdHVzCi1hY3BpX2dldF9vYmplY3RfaW5mbyhhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1ZmZlciAqIGJ1ZmZlcikKK2FjcGlfZ2V0X29iamVjdF9pbmZvKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqKnJldHVybl9idWZmZXIpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICpyZXR1cm5faW5mbzsKLQlzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgKmNpZF9saXN0ID0gTlVMTDsKLQlhY3BpX3NpemUgc2l6ZTsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IE5VTEw7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKmhpZCA9IE5VTEw7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKnVpZCA9IE5VTEw7CisJY2hhciAqbmV4dF9pZF9zdHJpbmc7CisJYWNwaV9vYmplY3RfdHlwZSB0eXBlOworCWFjcGlfbmFtZSBuYW1lOworCXU4IHBhcmFtX2NvdW50ID0gMDsKKwl1OCB2YWxpZCA9IDA7CisJdTMyIGluZm9fc2l6ZTsKKwl1MzIgaTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCi0JaWYgKCFoYW5kbGUgfHwgIWJ1ZmZlcikgeworCWlmICghaGFuZGxlIHx8ICFyZXR1cm5fYnVmZmVyKSB7CiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV91dF92YWxpZGF0ZV9idWZmZXIoYnVmZmVyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0KLQotCWluZm8gPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlX2luZm8pKTsKLQlpZiAoIWluZm8pIHsKLQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwotCX0KLQogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlnb3RvIGNsZWFudXA7CkBAIC0yNTYsNjYgKzI5NCw5MSBAQAogCW5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShoYW5kbGUpOwogCWlmICghbm9kZSkgewogCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKLQkJZ290byBjbGVhbnVwOworCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCS8qIEluaXQgcmV0dXJuIHN0cnVjdHVyZSAqLworCS8qIEdldCB0aGUgbmFtZXNwYWNlIG5vZGUgZGF0YSB3aGlsZSB0aGUgbmFtZXNwYWNlIGlzIGxvY2tlZCAqLwogCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyk7Ci0KLQlpbmZvLT50eXBlID0gbm9kZS0+dHlwZTsKLQlpbmZvLT5uYW1lID0gbm9kZS0+bmFtZS5pbnRlZ2VyOwotCWluZm8tPnZhbGlkID0gMDsKKwlpbmZvX3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlX2luZm8pOworCXR5cGUgPSBub2RlLT50eXBlOworCW5hbWUgPSBub2RlLT5uYW1lLmludGVnZXI7CiAKIAlpZiAobm9kZS0+dHlwZSA9PSBBQ1BJX1RZUEVfTUVUSE9EKSB7Ci0JCWluZm8tPnBhcmFtX2NvdW50ID0gbm9kZS0+b2JqZWN0LT5tZXRob2QucGFyYW1fY291bnQ7CisJCXBhcmFtX2NvdW50ID0gbm9kZS0+b2JqZWN0LT5tZXRob2QucGFyYW1fY291bnQ7CiAJfQogCiAJc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gY2xlYW51cDsKKwkJcmV0dXJuIChzdGF0dXMpOwogCX0KIAotCS8qIElmIG5vdCBhIGRldmljZSwgd2UgYXJlIGFsbCBkb25lICovCi0KLQlpZiAoaW5mby0+dHlwZSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB7CisJaWYgKCh0eXBlID09IEFDUElfVFlQRV9ERVZJQ0UpIHx8ICh0eXBlID09IEFDUElfVFlQRV9QUk9DRVNTT1IpKSB7CiAJCS8qCi0JCSAqIEdldCBleHRyYSBpbmZvIGZvciBBQ1BJIERldmljZXMgb2JqZWN0cyBvbmx5OgotCQkgKiBSdW4gdGhlIERldmljZSBfSElELCBfVUlELCBfQ0lELCBfU1RBLCBfQURSIGFuZCBfc3hfZCBtZXRob2RzLgorCQkgKiBHZXQgZXh0cmEgaW5mbyBmb3IgQUNQSSBEZXZpY2UvUHJvY2Vzc29yIG9iamVjdHMgb25seToKKwkJICogUnVuIHRoZSBEZXZpY2UgX0hJRCwgX1VJRCwgYW5kIF9DSUQgbWV0aG9kcy4KIAkJICoKIAkJICogTm90ZTogbm9uZSBvZiB0aGVzZSBtZXRob2RzIGFyZSByZXF1aXJlZCwgc28gdGhleSBtYXkgb3IgbWF5Ci0JCSAqIG5vdCBiZSBwcmVzZW50IGZvciB0aGlzIGRldmljZS4gIFRoZSBJbmZvLT5WYWxpZCBiaXRmaWVsZCBpcyB1c2VkCi0JCSAqIHRvIGluZGljYXRlIHdoaWNoIG1ldGhvZHMgd2VyZSBmb3VuZCBhbmQgcmFuIHN1Y2Nlc3NmdWxseS4KKwkJICogbm90IGJlIHByZXNlbnQgZm9yIHRoaXMgZGV2aWNlLiBUaGUgSW5mby0+VmFsaWQgYml0ZmllbGQgaXMgdXNlZAorCQkgKiB0byBpbmRpY2F0ZSB3aGljaCBtZXRob2RzIHdlcmUgZm91bmQgYW5kIHJ1biBzdWNjZXNzZnVsbHkuCiAJCSAqLwogCiAJCS8qIEV4ZWN1dGUgdGhlIERldmljZS5fSElEIG1ldGhvZCAqLwogCi0JCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9ISUQobm9kZSwgJmluZm8tPmhhcmR3YXJlX2lkKTsKKwkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX0hJRChub2RlLCAmaGlkKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCQlpbmZvLT52YWxpZCB8PSBBQ1BJX1ZBTElEX0hJRDsKKwkJCWluZm9fc2l6ZSArPSBoaWQtPmxlbmd0aDsKKwkJCXZhbGlkIHw9IEFDUElfVkFMSURfSElEOwogCQl9CiAKIAkJLyogRXhlY3V0ZSB0aGUgRGV2aWNlLl9VSUQgbWV0aG9kICovCiAKLQkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX1VJRChub2RlLCAmaW5mby0+dW5pcXVlX2lkKTsKKwkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX1VJRChub2RlLCAmdWlkKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCQlpbmZvLT52YWxpZCB8PSBBQ1BJX1ZBTElEX1VJRDsKKwkJCWluZm9fc2l6ZSArPSB1aWQtPmxlbmd0aDsKKwkJCXZhbGlkIHw9IEFDUElfVkFMSURfVUlEOwogCQl9CiAKIAkJLyogRXhlY3V0ZSB0aGUgRGV2aWNlLl9DSUQgbWV0aG9kICovCiAKIAkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX0NJRChub2RlLCAmY2lkX2xpc3QpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCXNpemUgKz0gY2lkX2xpc3QtPnNpemU7Ci0JCQlpbmZvLT52YWxpZCB8PSBBQ1BJX1ZBTElEX0NJRDsKKworCQkJLyogQWRkIHNpemUgb2YgQ0lEIHN0cmluZ3MgYW5kIENJRCBwb2ludGVyIGFycmF5ICovCisKKwkJCWluZm9fc2l6ZSArPQorCQkJICAgIChjaWRfbGlzdC0+bGlzdF9zaXplIC0KKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QpKTsKKwkJCXZhbGlkIHw9IEFDUElfVkFMSURfQ0lEOwogCQl9CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSB2YXJpYWJsZS1sZW5ndGggZGF0YSwgd2UgY2FuIGFsbG9jYXRlIHRoZQorCSAqIHJldHVybiBidWZmZXIKKwkgKi8KKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoaW5mb19zaXplKTsKKwlpZiAoIWluZm8pIHsKKwkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogR2V0IHRoZSBmaXhlZC1sZW5ndGggZGF0YSAqLworCisJaWYgKCh0eXBlID09IEFDUElfVFlQRV9ERVZJQ0UpIHx8ICh0eXBlID09IEFDUElfVFlQRV9QUk9DRVNTT1IpKSB7CisJCS8qCisJCSAqIEdldCBleHRyYSBpbmZvIGZvciBBQ1BJIERldmljZS9Qcm9jZXNzb3Igb2JqZWN0cyBvbmx5OgorCQkgKiBSdW4gdGhlIF9TVEEsIF9BRFIgYW5kLCBzeF93LCBhbmQgX3N4X2QgbWV0aG9kcy4KKwkJICoKKwkJICogTm90ZTogbm9uZSBvZiB0aGVzZSBtZXRob2RzIGFyZSByZXF1aXJlZCwgc28gdGhleSBtYXkgb3IgbWF5CisJCSAqIG5vdCBiZSBwcmVzZW50IGZvciB0aGlzIGRldmljZS4gVGhlIEluZm8tPlZhbGlkIGJpdGZpZWxkIGlzIHVzZWQKKwkJICogdG8gaW5kaWNhdGUgd2hpY2ggbWV0aG9kcyB3ZXJlIGZvdW5kIGFuZCBydW4gc3VjY2Vzc2Z1bGx5LgorCQkgKi8KIAogCQkvKiBFeGVjdXRlIHRoZSBEZXZpY2UuX1NUQSBtZXRob2QgKi8KIAogCQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfU1RBKG5vZGUsICZpbmZvLT5jdXJyZW50X3N0YXR1cyk7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJaW5mby0+dmFsaWQgfD0gQUNQSV9WQUxJRF9TVEE7CisJCQl2YWxpZCB8PSBBQ1BJX1ZBTElEX1NUQTsKIAkJfQogCiAJCS8qIEV4ZWN1dGUgdGhlIERldmljZS5fQURSIG1ldGhvZCAqLwpAQCAtMzIzLDM2ICszODYsMTAwIEBACiAJCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfbnVtZXJpY19vYmplY3QoTUVUSE9EX05BTUVfX0FEUiwgbm9kZSwKIAkJCQkJCQkgJmluZm8tPmFkZHJlc3MpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCWluZm8tPnZhbGlkIHw9IEFDUElfVkFMSURfQURSOworCQkJdmFsaWQgfD0gQUNQSV9WQUxJRF9BRFI7CisJCX0KKworCQkvKiBFeGVjdXRlIHRoZSBEZXZpY2UuX3N4X3cgbWV0aG9kcyAqLworCisJCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9wb3dlcl9tZXRob2RzKG5vZGUsCisJCQkJCQkgICAgICAgYWNwaV9nYmxfbG93ZXN0X2RzdGF0ZV9uYW1lcywKKwkJCQkJCSAgICAgICBBQ1BJX05VTV9zeF93X01FVEhPRFMsCisJCQkJCQkgICAgICAgaW5mby0+bG93ZXN0X2RzdGF0ZXMpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCXZhbGlkIHw9IEFDUElfVkFMSURfU1hXUzsKIAkJfQogCiAJCS8qIEV4ZWN1dGUgdGhlIERldmljZS5fc3hfZCBtZXRob2RzICovCiAKLQkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX3N4ZHMobm9kZSwgaW5mby0+aGlnaGVzdF9kc3RhdGVzKTsKKwkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX3Bvd2VyX21ldGhvZHMobm9kZSwKKwkJCQkJCSAgICAgICBhY3BpX2dibF9oaWdoZXN0X2RzdGF0ZV9uYW1lcywKKwkJCQkJCSAgICAgICBBQ1BJX05VTV9zeF9kX01FVEhPRFMsCisJCQkJCQkgICAgICAgaW5mby0+aGlnaGVzdF9kc3RhdGVzKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCQlpbmZvLT52YWxpZCB8PSBBQ1BJX1ZBTElEX1NYRFM7CisJCQl2YWxpZCB8PSBBQ1BJX1ZBTElEX1NYRFM7CiAJCX0KIAl9CiAKLQkvKiBWYWxpZGF0ZS9BbGxvY2F0ZS9DbGVhciBjYWxsZXIgYnVmZmVyICovCisJLyoKKwkgKiBDcmVhdGUgYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgYXJlYSBvZiB0aGUgcmV0dXJuIGJ1ZmZlci4KKwkgKiBQb2ludCB0byB0aGUgZW5kIG9mIHRoZSBiYXNlIHN0cnVjdCBhY3BpX2RldmljZV9pbmZvIHN0cnVjdHVyZS4KKwkgKi8KKwluZXh0X2lkX3N0cmluZyA9IEFDUElfQ0FTVF9QVFIoY2hhciwgaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmlkcyk7CisJaWYgKGNpZF9saXN0KSB7CiAKLQlzdGF0dXMgPSBhY3BpX3V0X2luaXRpYWxpemVfYnVmZmVyKGJ1ZmZlciwgc2l6ZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gY2xlYW51cDsKKwkJLyogUG9pbnQgcGFzdCB0aGUgQ0lEIERFVklDRV9JRCBhcnJheSAqLworCisJCW5leHRfaWRfc3RyaW5nICs9CisJCSAgICAoKGFjcGlfc2l6ZSkgY2lkX2xpc3QtPmNvdW50ICoKKwkJICAgICBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpKTsKIAl9CiAKLQkvKiBQb3B1bGF0ZSB0aGUgcmV0dXJuIGJ1ZmZlciAqLworCS8qCisJICogQ29weSB0aGUgSElELCBVSUQsIGFuZCBDSURzIHRvIHRoZSByZXR1cm4gYnVmZmVyLiBUaGUgdmFyaWFibGUtbGVuZ3RoCisJICogc3RyaW5ncyBhcmUgY29waWVkIHRvIHRoZSByZXNlcnZlZCBhcmVhIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkgKgorCSAqIEZvciBISUQgYW5kIENJRCwgY2hlY2sgaWYgdGhlIElEIGlzIGEgUENJIFJvb3QgQnJpZGdlLgorCSAqLworCWlmIChoaWQpIHsKKwkJbmV4dF9pZF9zdHJpbmcgPSBhY3BpX25zX2NvcHlfZGV2aWNlX2lkKCZpbmZvLT5oYXJkd2FyZV9pZCwKKwkJCQkJCQloaWQsIG5leHRfaWRfc3RyaW5nKTsKIAotCXJldHVybl9pbmZvID0gYnVmZmVyLT5wb2ludGVyOwotCUFDUElfTUVNQ1BZKHJldHVybl9pbmZvLCBpbmZvLCBzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlX2luZm8pKTsKKwkJaWYgKGFjcGlfdXRfaXNfcGNpX3Jvb3RfYnJpZGdlKGhpZC0+c3RyaW5nKSkgeworCQkJaW5mby0+ZmxhZ3MgfD0gQUNQSV9QQ0lfUk9PVF9CUklER0U7CisJCX0KKwl9CisKKwlpZiAodWlkKSB7CisJCW5leHRfaWRfc3RyaW5nID0gYWNwaV9uc19jb3B5X2RldmljZV9pZCgmaW5mby0+dW5pcXVlX2lkLAorCQkJCQkJCXVpZCwgbmV4dF9pZF9zdHJpbmcpOworCX0KIAogCWlmIChjaWRfbGlzdCkgewotCQlBQ1BJX01FTUNQWSgmcmV0dXJuX2luZm8tPmNvbXBhdGliaWxpdHlfaWQsIGNpZF9saXN0LAotCQkJICAgIGNpZF9saXN0LT5zaXplKTsKKwkJaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0LmNvdW50ID0gY2lkX2xpc3QtPmNvdW50OworCQlpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplID0gY2lkX2xpc3QtPmxpc3Rfc2l6ZTsKKworCQkvKiBDb3B5IGVhY2ggQ0lEICovCisKKwkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7CisJCQluZXh0X2lkX3N0cmluZyA9CisJCQkgICAgYWNwaV9uc19jb3B5X2RldmljZV9pZCgmaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0LgorCQkJCQkJICAgaWRzW2ldLCAmY2lkX2xpc3QtPmlkc1tpXSwKKwkJCQkJCSAgIG5leHRfaWRfc3RyaW5nKTsKKworCQkJaWYgKGFjcGlfdXRfaXNfcGNpX3Jvb3RfYnJpZGdlKGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKSkgeworCQkJCWluZm8tPmZsYWdzIHw9IEFDUElfUENJX1JPT1RfQlJJREdFOworCQkJfQorCQl9CiAJfQogCisJLyogQ29weSB0aGUgZml4ZWQtbGVuZ3RoIGRhdGEgKi8KKworCWluZm8tPmluZm9fc2l6ZSA9IGluZm9fc2l6ZTsKKwlpbmZvLT50eXBlID0gdHlwZTsKKwlpbmZvLT5uYW1lID0gbmFtZTsKKwlpbmZvLT5wYXJhbV9jb3VudCA9IHBhcmFtX2NvdW50OworCWluZm8tPnZhbGlkID0gdmFsaWQ7CisKKwkqcmV0dXJuX2J1ZmZlciA9IGluZm87CisJc3RhdHVzID0gQUVfT0s7CisKICAgICAgIGNsZWFudXA6Ci0JQUNQSV9GUkVFKGluZm8pOworCWlmIChoaWQpIHsKKwkJQUNQSV9GUkVFKGhpZCk7CisJfQorCWlmICh1aWQpIHsKKwkJQUNQSV9GUkVFKHVpZCk7CisJfQogCWlmIChjaWRfbGlzdCkgewogCQlBQ1BJX0ZSRUUoY2lkX2xpc3QpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jCmluZGV4IGM1ZjZjZTEuLmNkNzk5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2xvb3AuYwpAQCAtODYsNiArODYsOSBAQAogYWNwaV9wc19jb21wbGV0ZV9maW5hbF9vcChzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlLAogCQkJICB1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3AsIGFjcGlfc3RhdHVzIHN0YXR1cyk7CiAKK3N0YXRpYyB2b2lkCithY3BpX3BzX2xpbmtfbW9kdWxlX2NvZGUodTggKmFtbF9zdGFydCwgdTMyIGFtbF9sZW5ndGgsIGFjcGlfb3duZXJfaWQgb3duZXJfaWQpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3BzX2dldF9hbWxfb3Bjb2RlCkBAIC0zOTAsNiArMzkzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYXJnID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyAqb3BfaW5mbzsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHBzX2dldF9hcmd1bWVudHMsIHdhbGtfc3RhdGUpOwogCkBAIC00NDksMTMgKzQ1MywxMSBAQAogCQkJSU5DUkVNRU5UX0FSR19MSVNUKHdhbGtfc3RhdGUtPmFyZ190eXBlcyk7CiAJCX0KIAotCQkvKiBTcGVjaWFsIHByb2Nlc3NpbmcgZm9yIGNlcnRhaW4gb3Bjb2RlcyAqLwotCi0JCS8qIFRCRCAocmVtb3ZlKTogVGVtcG9yYXJ5IG1lY2hhbmlzbSB0byBkaXNhYmxlIHRoaXMgY29kZSBpZiBuZWVkZWQgKi8KLQotI2lmZGVmIEFDUElfRU5BQkxFX01PRFVMRV9MRVZFTF9DT0RFCi0KLQkJaWYgKCh3YWxrX3N0YXRlLT5wYXNzX251bWJlciA8PSBBQ1BJX0lNT0RFX0xPQURfUEFTUzEpICYmCisJCS8qCisJCSAqIEhhbmRsZSBleGVjdXRhYmxlIGNvZGUgYXQgIm1vZHVsZS1sZXZlbCIuIFRoaXMgcmVmZXJzIHRvCisJCSAqIGV4ZWN1dGFibGUgb3Bjb2RlcyB0aGF0IGFwcGVhciBvdXRzaWRlIG9mIGFueSBjb250cm9sIG1ldGhvZC4KKwkJICovCisJCWlmICgod2Fsa19zdGF0ZS0+cGFzc19udW1iZXIgPD0gQUNQSV9JTU9ERV9MT0FEX1BBU1MyKSAmJgogCQkgICAgKCh3YWxrX3N0YXRlLT5wYXJzZV9mbGFncyAmIEFDUElfUEFSU0VfRElTQVNTRU1CTEUpID09IDApKSB7CiAJCQkvKgogCQkJICogV2Ugd2FudCB0byBza2lwIElmL0Vsc2UvV2hpbGUgY29uc3RydWN0cyBkdXJpbmcgUGFzczEgYmVjYXVzZSB3ZQpAQCAtNDY5LDYgKzQ3MSwyMyBAQAogCQkJY2FzZSBBTUxfRUxTRV9PUDoKIAkJCWNhc2UgQU1MX1dISUxFX09QOgogCisJCQkJLyoKKwkJCQkgKiBDdXJyZW50bHkgc3VwcG9ydGVkIG1vZHVsZS1sZXZlbCBvcGNvZGVzIGFyZToKKwkJCQkgKiBJRi9FTFNFL1dISUxFLiBUaGVzZSBhcHBlYXIgdG8gYmUgdGhlIG1vc3QgY29tbW9uLAorCQkJCSAqIGFuZCBlYXNpZXN0IHRvIHN1cHBvcnQgc2luY2UgdGhleSBvcGVuIGFuIEFNTAorCQkJCSAqIHBhY2thZ2UuCisJCQkJICovCisJCQkJaWYgKHdhbGtfc3RhdGUtPnBhc3NfbnVtYmVyID09CisJCQkJICAgIEFDUElfSU1PREVfTE9BRF9QQVNTMSkgeworCQkJCQlhY3BpX3BzX2xpbmtfbW9kdWxlX2NvZGUoYW1sX29wX3N0YXJ0LAorCQkJCQkJCQkgd2Fsa19zdGF0ZS0+CisJCQkJCQkJCSBwYXJzZXJfc3RhdGUuCisJCQkJCQkJCSBwa2dfZW5kIC0KKwkJCQkJCQkJIGFtbF9vcF9zdGFydCwKKwkJCQkJCQkJIHdhbGtfc3RhdGUtPgorCQkJCQkJCQkgb3duZXJfaWQpOworCQkJCX0KKwogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCiAJCQkJCQkgICJQYXNzMTogU2tpcHBpbmcgYW4gSWYvRWxzZS9XaGlsZSBib2R5XG4iKSk7CiAKQEAgLTQ4MCwxMCArNDk5LDM0IEBACiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBDaGVjayBmb3IgYW4gdW5zdXBwb3J0ZWQgZXhlY3V0YWJsZSBvcGNvZGUgYXQgbW9kdWxlCisJCQkJICogbGV2ZWwuIFdlIG11c3QgYmUgaW4gUEFTUzEsIHRoZSBwYXJlbnQgbXVzdCBiZSBhIFNDT1BFLAorCQkJCSAqIFRoZSBvcGNvZGUgY2xhc3MgbXVzdCBiZSBFWEVDVVRFLCBhbmQgdGhlIG9wY29kZSBtdXN0CisJCQkJICogbm90IGJlIGFuIGFyZ3VtZW50IHRvIGFub3RoZXIgb3Bjb2RlLgorCQkJCSAqLworCQkJCWlmICgod2Fsa19zdGF0ZS0+cGFzc19udW1iZXIgPT0KKwkJCQkgICAgIEFDUElfSU1PREVfTE9BRF9QQVNTMSkKKwkJCQkgICAgJiYgKG9wLT5jb21tb24ucGFyZW50LT5jb21tb24uYW1sX29wY29kZSA9PQorCQkJCQlBTUxfU0NPUEVfT1ApKSB7CisJCQkJCW9wX2luZm8gPQorCQkJCQkgICAgYWNwaV9wc19nZXRfb3Bjb2RlX2luZm8ob3AtPmNvbW1vbi4KKwkJCQkJCQkJICAgIGFtbF9vcGNvZGUpOworCQkJCQlpZiAoKG9wX2luZm8tPmNsYXNzID09CisJCQkJCSAgICAgQU1MX0NMQVNTX0VYRUNVVEUpICYmICghYXJnKSkgeworCQkJCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJCQkJCSAgICAgICJEZXRlY3RlZCBhbiB1bnN1cHBvcnRlZCBleGVjdXRhYmxlIG9wY29kZSAiCisJCQkJCQkJICAgICAgImF0IG1vZHVsZS1sZXZlbDogWzB4JS40WF0gYXQgdGFibGUgb2Zmc2V0IDB4JS40WCIsCisJCQkJCQkJICAgICAgb3AtPmNvbW1vbi5hbWxfb3Bjb2RlLAorCQkJCQkJCSAgICAgICh1MzIpKChhbWxfb3Bfc3RhcnQgLSB3YWxrX3N0YXRlLT5wYXJzZXJfc3RhdGUuYW1sX3N0YXJ0KQorCQkJCQkJCQkrIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKSkpOworCQkJCQl9CisJCQkJfQogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0jZW5kaWYKKworCQkvKiBTcGVjaWFsIHByb2Nlc3NpbmcgZm9yIGNlcnRhaW4gb3Bjb2RlcyAqLwogCiAJCXN3aXRjaCAob3AtPmNvbW1vbi5hbWxfb3Bjb2RlKSB7CiAJCWNhc2UgQU1MX01FVEhPRF9PUDoKQEAgLTU1Myw2ICs1OTYsNjYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9wc19saW5rX21vZHVsZV9jb2RlCisgKgorICogUEFSQU1FVEVSUzogIGFtbF9zdGFydCAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBBTUwKKyAqICAgICAgICAgICAgICBhbWxfbGVuZ3RoICAgICAgICAgIC0gTGVuZ3RoIG9mIGV4ZWN1dGFibGUgQU1MCisgKiAgICAgICAgICAgICAgb3duZXJfaWQgICAgICAgICAgICAtIG93bmVyX2lkIG9mIG1vZHVsZSBsZXZlbCBjb2RlCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUuCisgKgorICogREVTQ1JJUFRJT046IFdyYXAgdGhlIG1vZHVsZS1sZXZlbCBjb2RlIHdpdGggYSBtZXRob2Qgb2JqZWN0IGFuZCBsaW5rIHRoZQorICogICAgICAgICAgICAgIG9iamVjdCB0byB0aGUgZ2xvYmFsIGxpc3QuIE5vdGUsIHRoZSBtdXRleCBmaWVsZCBvZiB0aGUgbWV0aG9kCisgKiAgICAgICAgICAgICAgb2JqZWN0IGlzIHVzZWQgdG8gbGluayBtdWx0aXBsZSBtb2R1bGUtbGV2ZWwgY29kZSBvYmplY3RzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCithY3BpX3BzX2xpbmtfbW9kdWxlX2NvZGUodTggKmFtbF9zdGFydCwgdTMyIGFtbF9sZW5ndGgsIGFjcGlfb3duZXJfaWQgb3duZXJfaWQpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcHJldjsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpuZXh0OworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm1ldGhvZF9vYmo7CisKKwkvKiBHZXQgdGhlIHRhaWwgb2YgdGhlIGxpc3QgKi8KKworCXByZXYgPSBuZXh0ID0gYWNwaV9nYmxfbW9kdWxlX2NvZGVfbGlzdDsKKwl3aGlsZSAobmV4dCkgeworCQlwcmV2ID0gbmV4dDsKKwkJbmV4dCA9IG5leHQtPm1ldGhvZC5tdXRleDsKKwl9CisKKwkvKgorCSAqIEluc2VydCB0aGUgbW9kdWxlIGxldmVsIGNvZGUgaW50byB0aGUgbGlzdC4gTWVyZ2UgaXQgaWYgaXQgaXMKKwkgKiBhZGphY2VudCB0byB0aGUgcHJldmlvdXMgZWxlbWVudC4KKwkgKi8KKwlpZiAoIXByZXYgfHwKKwkgICAgKChwcmV2LT5tZXRob2QuYW1sX3N0YXJ0ICsgcHJldi0+bWV0aG9kLmFtbF9sZW5ndGgpICE9IGFtbF9zdGFydCkpIHsKKworCQkvKiBDcmVhdGUsIGluaXRpYWxpemUsIGFuZCBsaW5rIGEgbmV3IHRlbXBvcmFyeSBtZXRob2Qgb2JqZWN0ICovCisKKwkJbWV0aG9kX29iaiA9IGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfTUVUSE9EKTsKKwkJaWYgKCFtZXRob2Rfb2JqKSB7CisJCQlyZXR1cm47CisJCX0KKworCQltZXRob2Rfb2JqLT5tZXRob2QuYW1sX3N0YXJ0ID0gYW1sX3N0YXJ0OworCQltZXRob2Rfb2JqLT5tZXRob2QuYW1sX2xlbmd0aCA9IGFtbF9sZW5ndGg7CisJCW1ldGhvZF9vYmotPm1ldGhvZC5vd25lcl9pZCA9IG93bmVyX2lkOworCQltZXRob2Rfb2JqLT5tZXRob2QuZmxhZ3MgfD0gQU9QT0JKX01PRFVMRV9MRVZFTDsKKworCQlpZiAoIXByZXYpIHsKKwkJCWFjcGlfZ2JsX21vZHVsZV9jb2RlX2xpc3QgPSBtZXRob2Rfb2JqOworCQl9IGVsc2UgeworCQkJcHJldi0+bWV0aG9kLm11dGV4ID0gbWV0aG9kX29iajsKKwkJfQorCX0gZWxzZSB7CisJCXByZXYtPm1ldGhvZC5hbWxfbGVuZ3RoICs9IGFtbF9sZW5ndGg7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3BzX2NvbXBsZXRlX29wCiAgKgogICogUEFSQU1FVEVSUzogIHdhbGtfc3RhdGUgICAgICAgICAgLSBDdXJyZW50IHN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzeGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCmluZGV4IGZmMDYwMzIuLmRkOTczMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCkBAIC0yODAsNiArMjgwLDEwIEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKKwlpZiAoaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5mbGFncyAmIEFPUE9CSl9NT0RVTEVfTEVWRUwpIHsKKwkJd2Fsa19zdGF0ZS0+cGFyc2VfZmxhZ3MgfD0gQUNQSV9QQVJTRV9NT0RVTEVfTEVWRUw7CisJfQorCiAJLyogSW52b2tlIGFuIGludGVybmFsIG1ldGhvZCBpZiBuZWNlc3NhcnkgKi8KIAogCWlmIChpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfSU5URVJOQUxfT05MWSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKaW5kZXggODJiMDJkYy4uYzAxNjMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCkBAIC0yNzUsNyArMjc1LDYgQEAKIAogdm9pZCBhY3BpX3RiX2NyZWF0ZV9sb2NhbF9mYWR0KHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUsIHUzMiBsZW5ndGgpCiB7Ci0KIAkvKgogCSAqIENoZWNrIGlmIHRoZSBGQURUIGlzIGxhcmdlciB0aGFuIHRoZSBsYXJnZXN0IHRhYmxlIHRoYXQgd2UgZXhwZWN0CiAJICogKHRoZSBBQ1BJIDIuMC8zLjAgdmVyc2lvbikuIElmIHNvLCB0cnVuY2F0ZSB0aGUgdGFibGUsIGFuZCBpc3N1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwppbmRleCBlZjdkMmMyLi4xZjE1NDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwpAQCAtNDksNiArNDksMTIgQEAKIEFDUElfTU9EVUxFX05BTUUoInRidXRpbHMiKQogCiAvKiBMb2NhbCBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBhY3BpX3RiX2ZpeF9zdHJpbmcoY2hhciAqc3RyaW5nLCBhY3BpX3NpemUgbGVuZ3RoKTsKKworc3RhdGljIHZvaWQKK2FjcGlfdGJfY2xlYW51cF90YWJsZV9oZWFkZXIoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpvdXRfaGVhZGVyLAorCQkJICAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlcik7CisKIHN0YXRpYyBhY3BpX3BoeXNpY2FsX2FkZHJlc3MKIGFjcGlfdGJfZ2V0X3Jvb3RfdGFibGVfZW50cnkodTggKnRhYmxlX2VudHJ5LCB1MzIgdGFibGVfZW50cnlfc2l6ZSk7CiAKQEAgLTE2MSw2ICsxNjcsNTkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV90Yl9maXhfc3RyaW5nCisgKgorICogUEFSQU1FVEVSUzogIFN0cmluZyAgICAgICAgICAgICAgLSBTdHJpbmcgdG8gYmUgcmVwYWlyZWQKKyAqICAgICAgICAgICAgICBMZW5ndGggICAgICAgICAgICAgIC0gTWF4aW11bSBsZW5ndGgKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZQorICoKKyAqIERFU0NSSVBUSU9OOiBSZXBsYWNlIGV2ZXJ5IG5vbi1wcmludGFibGUgb3Igbm9uLWFzY2lpIGJ5dGUgaW4gdGhlIHN0cmluZworICogICAgICAgICAgICAgIHdpdGggYSBxdWVzdGlvbiBtYXJrICc/Jy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhY3BpX3RiX2ZpeF9zdHJpbmcoY2hhciAqc3RyaW5nLCBhY3BpX3NpemUgbGVuZ3RoKQoreworCisJd2hpbGUgKGxlbmd0aCAmJiAqc3RyaW5nKSB7CisJCWlmICghQUNQSV9JU19QUklOVCgqc3RyaW5nKSkgeworCQkJKnN0cmluZyA9ICc/JzsKKwkJfQorCQlzdHJpbmcrKzsKKwkJbGVuZ3RoLS07CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX2NsZWFudXBfdGFibGVfaGVhZGVyCisgKgorICogUEFSQU1FVEVSUzogIG91dF9oZWFkZXIgICAgICAgICAgLSBXaGVyZSB0aGUgY2xlYW5lZCBoZWFkZXIgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgICAgICBIZWFkZXIgICAgICAgICAgICAgIC0gSW5wdXQgQUNQSSB0YWJsZSBoZWFkZXIKKyAqCisgKiBSRVRVUk46ICAgICAgUmV0dXJucyB0aGUgY2xlYW5lZCBoZWFkZXIgaW4gb3V0X2hlYWRlcgorICoKKyAqIERFU0NSSVBUSU9OOiBDb3B5IHRoZSB0YWJsZSBoZWFkZXIgYW5kIGVuc3VyZSB0aGF0IGFsbCAic3RyaW5nIiBmaWVsZHMgaW4KKyAqICAgICAgICAgICAgICB0aGUgaGVhZGVyIGNvbnNpc3Qgb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2FjcGlfdGJfY2xlYW51cF90YWJsZV9oZWFkZXIoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpvdXRfaGVhZGVyLAorCQkJICAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlcikKK3sKKworCUFDUElfTUVNQ1BZKG91dF9oZWFkZXIsIGhlYWRlciwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCisJYWNwaV90Yl9maXhfc3RyaW5nKG91dF9oZWFkZXItPnNpZ25hdHVyZSwgQUNQSV9OQU1FX1NJWkUpOworCWFjcGlfdGJfZml4X3N0cmluZyhvdXRfaGVhZGVyLT5vZW1faWQsIEFDUElfT0VNX0lEX1NJWkUpOworCWFjcGlfdGJfZml4X3N0cmluZyhvdXRfaGVhZGVyLT5vZW1fdGFibGVfaWQsIEFDUElfT0VNX1RBQkxFX0lEX1NJWkUpOworCWFjcGlfdGJfZml4X3N0cmluZyhvdXRfaGVhZGVyLT5hc2xfY29tcGlsZXJfaWQsIEFDUElfTkFNRV9TSVpFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9wcmludF90YWJsZV9oZWFkZXIKICAqCiAgKiBQQVJBTUVURVJTOiAgQWRkcmVzcyAgICAgICAgICAgICAtIFRhYmxlIHBoeXNpY2FsIGFkZHJlc3MKQEAgLTE3Niw2ICsyMzUsNyBAQAogYWNwaV90Yl9wcmludF90YWJsZV9oZWFkZXIoYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlcikKIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgbG9jYWxfaGVhZGVyOwogCiAJLyoKIAkgKiBUaGUgcmVhc29uIHRoYXQgdGhlIEFkZHJlc3MgaXMgY2FzdCB0byBhIHZvaWQgcG9pbnRlciBpcyBzbyB0aGF0IHdlCkBAIC0xOTIsNiArMjUyLDExIEBACiAKIAkJLyogUlNEUCBoYXMgbm8gY29tbW9uIGZpZWxkcyAqLwogCisJCUFDUElfTUVNQ1BZKGxvY2FsX2hlYWRlci5vZW1faWQsCisJCQkgICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwLAorCQkJCQkgIGhlYWRlciktPm9lbV9pZCwgQUNQSV9PRU1fSURfU0laRSk7CisJCWFjcGlfdGJfZml4X3N0cmluZyhsb2NhbF9oZWFkZXIub2VtX2lkLCBBQ1BJX09FTV9JRF9TSVpFKTsKKwogCQlBQ1BJX0lORk8oKEFFX0lORk8sICJSU0RQICVwICUwNVggKHYlLjJkICU2LjZzKSIsCiAJCQkgICBBQ1BJX0NBU1RfUFRSICh2b2lkLCBhZGRyZXNzKSwKIAkJCSAgIChBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAsIGhlYWRlciktPgpAQCAtMjAwLDE4ICsyNjUsMjEgQEAKIAkJCQkJICAgICAgIGhlYWRlciktPmxlbmd0aCA6IDIwLAogCQkJICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwLAogCQkJCQkgaGVhZGVyKS0+cmV2aXNpb24sCi0JCQkgICBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAsCi0JCQkJCSBoZWFkZXIpLT5vZW1faWQpKTsKKwkJCSAgIGxvY2FsX2hlYWRlci5vZW1faWQpKTsKIAl9IGVsc2UgewogCQkvKiBTdGFuZGFyZCBBQ1BJIHRhYmxlIHdpdGggZnVsbCBjb21tb24gaGVhZGVyICovCiAKKwkJYWNwaV90Yl9jbGVhbnVwX3RhYmxlX2hlYWRlcigmbG9jYWxfaGVhZGVyLCBoZWFkZXIpOworCiAJCUFDUElfSU5GTygoQUVfSU5GTywKIAkJCSAgICIlNC40cyAlcCAlMDVYICh2JS4yZCAlNi42cyAlOC44cyAlMDhYICU0LjRzICUwOFgpIiwKLQkJCSAgIGhlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX0NBU1RfUFRSICh2b2lkLCBhZGRyZXNzKSwKLQkJCSAgIGhlYWRlci0+bGVuZ3RoLCBoZWFkZXItPnJldmlzaW9uLCBoZWFkZXItPm9lbV9pZCwKLQkJCSAgIGhlYWRlci0+b2VtX3RhYmxlX2lkLCBoZWFkZXItPm9lbV9yZXZpc2lvbiwKLQkJCSAgIGhlYWRlci0+YXNsX2NvbXBpbGVyX2lkLAotCQkJICAgaGVhZGVyLT5hc2xfY29tcGlsZXJfcmV2aXNpb24pKTsKKwkJCSAgIGxvY2FsX2hlYWRlci5zaWduYXR1cmUsIEFDUElfQ0FTVF9QVFIodm9pZCwgYWRkcmVzcyksCisJCQkgICBsb2NhbF9oZWFkZXIubGVuZ3RoLCBsb2NhbF9oZWFkZXIucmV2aXNpb24sCisJCQkgICBsb2NhbF9oZWFkZXIub2VtX2lkLCBsb2NhbF9oZWFkZXIub2VtX3RhYmxlX2lkLAorCQkJICAgbG9jYWxfaGVhZGVyLm9lbV9yZXZpc2lvbiwKKwkJCSAgIGxvY2FsX2hlYWRlci5hc2xfY29tcGlsZXJfaWQsCisJCQkgICBsb2NhbF9oZWFkZXIuYXNsX2NvbXBpbGVyX3JldmlzaW9uKSk7CisKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYwppbmRleCBiYzE3MTAzLi45NmUyNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCkBAIC0yMTUsNiArMjE1LDEyIEBACiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsCiAJCQkJICAiKioqKiogUmVnaW9uICVwXG4iLCBvYmplY3QpKTsKIAorCQkvKiBJbnZhbGlkYXRlIHRoZSByZWdpb24gYWRkcmVzcy9sZW5ndGggdmlhIHRoZSBob3N0IE9TICovCisKKwkJYWNwaV9vc19pbnZhbGlkYXRlX2FkZHJlc3Mob2JqZWN0LT5yZWdpb24uc3BhY2VfaWQsCisJCQkJCSAgb2JqZWN0LT5yZWdpb24uYWRkcmVzcywKKwkJCQkJICAoYWNwaV9zaXplKSBvYmplY3QtPnJlZ2lvbi5sZW5ndGgpOworCiAJCXNlY29uZF9kZXNjID0gYWNwaV9uc19nZXRfc2Vjb25kYXJ5X29iamVjdChvYmplY3QpOwogCQlpZiAoc2Vjb25kX2Rlc2MpIHsKIAkJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYwppbmRleCAwMDZiMTZjLi41ZDU0ZTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKQEAgLTQ0LDE5ICs0NCwxMCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgImFjY29tbW9uLmgiCiAjaW5jbHVkZSAiYWNuYW1lc3AuaCIKLSNpbmNsdWRlICJhY2ludGVycC5oIgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9VVElMSVRJRVMKIEFDUElfTU9EVUxFX05BTUUoInV0ZXZhbCIpCiAKLS8qIExvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkCi1hY3BpX3V0X2NvcHlfaWRfc3RyaW5nKGNoYXIgKmRlc3RpbmF0aW9uLCBjaGFyICpzb3VyY2UsIGFjcGlfc2l6ZSBtYXhfbGVuZ3RoKTsKLQotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3RyYW5zbGF0ZV9vbmVfY2lkKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAotCQkJICBzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkICpvbmVfY2lkKTsKLQogLyoKICAqIFN0cmluZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBfT1NJIHByZWRlZmluZWQgKGludGVybmFsKSBtZXRob2QuCiAgKgpAQCAtNzgsNiArNjksOSBAQAogCXsiV2luZG93cyAyMDAxIFNQMiIsIEFDUElfT1NJX1dJTl9YUF9TUDJ9LAkvKiBXaW5kb3dzIFhQIFNQMiAqLwogCXsiV2luZG93cyAyMDAxLjEgU1AxIiwgQUNQSV9PU0lfV0lOU1JWXzIwMDNfU1AxfSwJLyogV2luZG93cyBTZXJ2ZXIgMjAwMyBTUDEgLSBBZGRlZCAwMy8yMDA2ICovCiAJeyJXaW5kb3dzIDIwMDYiLCBBQ1BJX09TSV9XSU5fVklTVEF9LAkvKiBXaW5kb3dzIFZpc3RhIC0gQWRkZWQgMDMvMjAwNiAqLworCXsiV2luZG93cyAyMDA2LjEiLCBBQ1BJX09TSV9XSU5TUlZfMjAwOH0sCS8qIFdpbmRvd3MgU2VydmVyIDIwMDggLSBBZGRlZCAwOS8yMDA5ICovCisJeyJXaW5kb3dzIDIwMDYgU1AxIiwgQUNQSV9PU0lfV0lOX1ZJU1RBX1NQMX0sCS8qIFdpbmRvd3MgVmlzdGEgU1AxIC0gQWRkZWQgMDkvMjAwOSAqLworCXsiV2luZG93cyAyMDA5IiwgQUNQSV9PU0lfV0lOXzd9LAkvKiBXaW5kb3dzIDcgYW5kIFNlcnZlciAyMDA4IFIyIC0gQWRkZWQgMDkvMjAwOSAqLwogCiAJLyogRmVhdHVyZSBHcm91cCBTdHJpbmdzICovCiAKQEAgLTIxMyw3ICsyMDcsNyBAQAogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBFdmFsdWF0ZXMgYSBuYW1lc3BhY2Ugb2JqZWN0IGFuZCB2ZXJpZmllcyB0aGUgdHlwZSBvZiB0aGUKLSAqICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LiAgQ29tbW9uIGNvZGUgdGhhdCBzaW1wbGlmaWVzIGFjY2Vzc2luZyBvYmplY3RzCisgKiAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC4gQ29tbW9uIGNvZGUgdGhhdCBzaW1wbGlmaWVzIGFjY2Vzc2luZyBvYmplY3RzCiAgKiAgICAgICAgICAgICAgdGhhdCBoYXZlIHJlcXVpcmVkIHJldHVybiBvYmplY3RzIG9mIGZpeGVkIHR5cGVzLgogICoKICAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KQEAgLTI5OCw3ICsyOTIsNyBAQAogCiAJaWYgKChhY3BpX2dibF9lbmFibGVfaW50ZXJwcmV0ZXJfc2xhY2spICYmICghZXhwZWN0ZWRfcmV0dXJuX2J0eXBlcykpIHsKIAkJLyoKLQkJICogV2UgcmVjZWl2ZWQgYSByZXR1cm4gb2JqZWN0LCBidXQgb25lIHdhcyBub3QgZXhwZWN0ZWQuICBUaGlzIGNhbgorCQkgKiBXZSByZWNlaXZlZCBhIHJldHVybiBvYmplY3QsIGJ1dCBvbmUgd2FzIG5vdCBleHBlY3RlZC4gVGhpcyBjYW4KIAkJICogaGFwcGVuIGZyZXF1ZW50bHkgaWYgdGhlICJpbXBsaWNpdCByZXR1cm4iIGZlYXR1cmUgaXMgZW5hYmxlZC4KIAkJICogSnVzdCBkZWxldGUgdGhlIHJldHVybiBvYmplY3QgYW5kIHJldHVybiBBRV9PSy4KIAkJICovCkBAIC0zNDAsMTIgKzMzNCwxMiBAQAogICoKICAqIFBBUkFNRVRFUlM6ICBvYmplY3RfbmFtZSAgICAgICAgIC0gT2JqZWN0IG5hbWUgdG8gYmUgZXZhbHVhdGVkCiAgKiAgICAgICAgICAgICAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKLSAqICAgICAgICAgICAgICBBZGRyZXNzICAgICAgICAgICAgIC0gV2hlcmUgdGhlIHZhbHVlIGlzIHJldHVybmVkCisgKiAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAtIFdoZXJlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogRXZhbHVhdGVzIGEgbnVtZXJpYyBuYW1lc3BhY2Ugb2JqZWN0IGZvciBhIHNlbGVjdGVkIGRldmljZQotICogICAgICAgICAgICAgIGFuZCBzdG9yZXMgcmVzdWx0IGluICpBZGRyZXNzLgorICogICAgICAgICAgICAgIGFuZCBzdG9yZXMgcmVzdWx0IGluICpWYWx1ZS4KICAqCiAgKiAgICAgICAgICAgICAgTk9URTogSW50ZXJuYWwgZnVuY3Rpb24sIG5vIHBhcmFtZXRlciB2YWxpZGF0aW9uCiAgKgpAQCAtMzU0LDcgKzM0OCw3IEBACiBhY3BpX3N0YXR1cwogYWNwaV91dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdChjaGFyICpvYmplY3RfbmFtZSwKIAkJCQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCi0JCQkJYWNwaV9pbnRlZ2VyICogYWRkcmVzcykKKwkJCQlhY3BpX2ludGVnZXIgKnZhbHVlKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTM2OSwyOTUgKzM2Myw3IEBACiAKIAkvKiBHZXQgdGhlIHJldHVybmVkIEludGVnZXIgKi8KIAotCSphZGRyZXNzID0gb2JqX2Rlc2MtPmludGVnZXIudmFsdWU7Ci0KLQkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLwotCi0JYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF9jb3B5X2lkX3N0cmluZwotICoKLSAqIFBBUkFNRVRFUlM6ICBEZXN0aW5hdGlvbiAgICAgICAgIC0gV2hlcmUgdG8gY29weSB0aGUgc3RyaW5nCi0gKiAgICAgICAgICAgICAgU291cmNlICAgICAgICAgICAgICAtIFNvdXJjZSBzdHJpbmcKLSAqICAgICAgICAgICAgICBtYXhfbGVuZ3RoICAgICAgICAgIC0gTGVuZ3RoIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLSAqCi0gKiBSRVRVUk46ICAgICAgTm9uZQotICoKLSAqIERFU0NSSVBUSU9OOiBDb3BpZXMgYW4gSUQgc3RyaW5nIGZvciB0aGUgX0hJRCwgX0NJRCwgYW5kIF9VSUQgbWV0aG9kcy4KLSAqICAgICAgICAgICAgICBQZXJmb3JtcyByZW1vdmFsIG9mIGEgbGVhZGluZyBhc3RlcmlzayBpZiBwcmVzZW50IC0tIHdvcmthcm91bmQKLSAqICAgICAgICAgICAgICBmb3IgYSBrbm93biBpc3N1ZSBvbiBhIGJ1bmNoIG9mIG1hY2hpbmVzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCi1hY3BpX3V0X2NvcHlfaWRfc3RyaW5nKGNoYXIgKmRlc3RpbmF0aW9uLCBjaGFyICpzb3VyY2UsIGFjcGlfc2l6ZSBtYXhfbGVuZ3RoKQotewotCi0JLyoKLQkgKiBXb3JrYXJvdW5kIGZvciBJRCBzdHJpbmdzIHRoYXQgaGF2ZSBhIGxlYWRpbmcgYXN0ZXJpc2suIFRoaXMgY29uc3RydWN0Ci0JICogaXMgbm90IGFsbG93ZWQgYnkgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiAgKElEIHN0cmluZ3MgbXVzdCBiZQotCSAqIGFscGhhbnVtZXJpYyksIGJ1dCBlbm91Z2ggZXhpc3RpbmcgbWFjaGluZXMgaGF2ZSB0aGlzIGVtYmVkZGVkIGluIHRoZWlyCi0JICogSUQgc3RyaW5ncyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VmdWwuCi0JICovCi0JaWYgKCpzb3VyY2UgPT0gJyonKSB7Ci0JCXNvdXJjZSsrOwotCX0KLQotCS8qIERvIHRoZSBhY3R1YWwgY29weSAqLwotCi0JQUNQSV9TVFJOQ1BZKGRlc3RpbmF0aW9uLCBzb3VyY2UsIG1heF9sZW5ndGgpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2V4ZWN1dGVfSElECi0gKgotICogUEFSQU1FVEVSUzogIGRldmljZV9ub2RlICAgICAgICAgLSBOb2RlIGZvciB0aGUgZGV2aWNlCi0gKiAgICAgICAgICAgICAgSGlkICAgICAgICAgICAgICAgICAtIFdoZXJlIHRoZSBISUQgaXMgcmV0dXJuZWQKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IEV4ZWN1dGVzIHRoZSBfSElEIGNvbnRyb2wgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgaGFyZHdhcmUKLSAqICAgICAgICAgICAgICBJRCBvZiB0aGUgZGV2aWNlLgotICoKLSAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cwotYWNwaV91dF9leGVjdXRlX0hJRChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCi0JCSAgICBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqaGlkKQotewotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9ISUQpOwotCi0Jc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19ISUQsCi0JCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORywKLQkJCQkJICZvYmpfZGVzYyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKLQotCQkvKiBDb252ZXJ0IHRoZSBOdW1lcmljIEhJRCB0byBzdHJpbmcgKi8KLQotCQlhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKCh1MzIpIG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlLAotCQkJCQkgIGhpZC0+dmFsdWUpOwotCX0gZWxzZSB7Ci0JCS8qIENvcHkgdGhlIFN0cmluZyBISUQgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0ICovCi0KLQkJYWNwaV91dF9jb3B5X2lkX3N0cmluZyhoaWQtPnZhbHVlLCBvYmpfZGVzYy0+c3RyaW5nLnBvaW50ZXIsCi0JCQkJICAgICAgIHNpemVvZihoaWQtPnZhbHVlKSk7Ci0JfQotCi0JLyogT24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIHJldHVybiBvYmplY3QgKi8KLQotCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShvYmpfZGVzYyk7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfdHJhbnNsYXRlX29uZV9jaWQKLSAqCi0gKiBQQVJBTUVURVJTOiAgb2JqX2Rlc2MgICAgICAgICAgICAtIF9DSUQgb2JqZWN0LCBtdXN0IGJlIGludGVnZXIgb3Igc3RyaW5nCi0gKiAgICAgICAgICAgICAgb25lX2NpZCAgICAgICAgICAgICAtIFdoZXJlIHRoZSBDSUQgc3RyaW5nIGlzIHJldHVybmVkCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBSZXR1cm4gYSBudW1lcmljIG9yIHN0cmluZyBfQ0lEIHZhbHVlIGFzIGEgc3RyaW5nLgotICogICAgICAgICAgICAgIChDb21wYXRpYmxlIElEKQotICoKLSAqICAgICAgICAgICAgICBOT1RFOiAgQXNzdW1lcyBhIG1heGltdW0gX0NJRCBzdHJpbmcgbGVuZ3RoIG9mCi0gKiAgICAgICAgICAgICAgICAgICAgIEFDUElfTUFYX0NJRF9MRU5HVEguCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3RyYW5zbGF0ZV9vbmVfY2lkKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAotCQkJICBzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkICpvbmVfY2lkKQotewotCi0Jc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKLQljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgotCi0JCS8qIENvbnZlcnQgdGhlIE51bWVyaWMgQ0lEIHRvIHN0cmluZyAqLwotCi0JCWFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoKHUzMikgb2JqX2Rlc2MtPmludGVnZXIudmFsdWUsCi0JCQkJCSAgb25lX2NpZC0+dmFsdWUpOwotCQlyZXR1cm4gKEFFX09LKTsKLQotCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKLQotCQlpZiAob2JqX2Rlc2MtPnN0cmluZy5sZW5ndGggPiBBQ1BJX01BWF9DSURfTEVOR1RIKSB7Ci0JCQlyZXR1cm4gKEFFX0FNTF9TVFJJTkdfTElNSVQpOwotCQl9Ci0KLQkJLyogQ29weSB0aGUgU3RyaW5nIENJRCBmcm9tIHRoZSByZXR1cm5lZCBvYmplY3QgKi8KLQotCQlhY3BpX3V0X2NvcHlfaWRfc3RyaW5nKG9uZV9jaWQtPnZhbHVlLCBvYmpfZGVzYy0+c3RyaW5nLnBvaW50ZXIsCi0JCQkJICAgICAgIEFDUElfTUFYX0NJRF9MRU5HVEgpOwotCQlyZXR1cm4gKEFFX09LKTsKLQotCWRlZmF1bHQ6Ci0KLQkJcmV0dXJuIChBRV9UWVBFKTsKLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9DSUQKLSAqCi0gKiBQQVJBTUVURVJTOiAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKLSAqICAgICAgICAgICAgICByZXR1cm5fY2lkX2xpc3QgICAgIC0gV2hlcmUgdGhlIENJRCBsaXN0IGlzIHJldHVybmVkCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBFeGVjdXRlcyB0aGUgX0NJRCBjb250cm9sIG1ldGhvZCB0aGF0IHJldHVybnMgb25lIG9yIG1vcmUKLSAqICAgICAgICAgICAgICBjb21wYXRpYmxlIGhhcmR3YXJlIElEcyBmb3IgdGhlIGRldmljZS4KLSAqCi0gKiAgICAgICAgICAgICAgTk9URTogSW50ZXJuYWwgZnVuY3Rpb24sIG5vIHBhcmFtZXRlciB2YWxpZGF0aW9uCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWNwaV9zdGF0dXMKLWFjcGlfdXRfZXhlY3V0ZV9DSUQoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKiBkZXZpY2Vfbm9kZSwKLQkJICAgIHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqKiByZXR1cm5fY2lkX2xpc3QpCi17Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXUzMiBjb3VudDsKLQl1MzIgc2l6ZTsKLQlzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgKmNpZF9saXN0OwotCXUzMiBpOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX0NJRCk7Ci0KLQkvKiBFdmFsdWF0ZSB0aGUgX0NJRCBtZXRob2QgZm9yIHRoaXMgZGV2aWNlICovCi0KLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChkZXZpY2Vfbm9kZSwgTUVUSE9EX05BTUVfX0NJRCwKLQkJCQkJIEFDUElfQlRZUEVfSU5URUdFUiB8IEFDUElfQlRZUEVfU1RSSU5HCi0JCQkJCSB8IEFDUElfQlRZUEVfUEFDS0FHRSwgJm9ial9kZXNjKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JLyogR2V0IHRoZSBudW1iZXIgb2YgX0NJRHMgcmV0dXJuZWQgKi8KLQotCWNvdW50ID0gMTsKLQlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7Ci0JCWNvdW50ID0gb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQ7Ci0JfQotCi0JLyogQWxsb2NhdGUgYSB3b3JzdC1jYXNlIGJ1ZmZlciBmb3IgdGhlIF9DSURzICovCi0KLQlzaXplID0gKCgoY291bnQgLSAxKSAqIHNpemVvZihzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkKSkgKwotCQlzaXplb2Yoc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0KSk7Ci0KLQljaWRfbGlzdCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIHNpemUpOwotCWlmICghY2lkX2xpc3QpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7Ci0JfQotCi0JLyogSW5pdCBDSUQgbGlzdCAqLwotCi0JY2lkX2xpc3QtPmNvdW50ID0gY291bnQ7Ci0JY2lkX2xpc3QtPnNpemUgPSBzaXplOwotCi0JLyoKLQkgKiAgQSBfQ0lEIGNhbiByZXR1cm4gZWl0aGVyIGEgc2luZ2xlIGNvbXBhdGlibGUgSUQgb3IgYSBwYWNrYWdlIG9mCi0JICogIGNvbXBhdGlibGUgSURzLiAgRWFjaCBjb21wYXRpYmxlIElEIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLQkgKiAgMSkgSW50ZWdlciAoMzIgYml0IGNvbXByZXNzZWQgRUlTQSBJRCkgb3IKLQkgKiAgMikgU3RyaW5nIChQQ0kgSUQgZm9ybWF0LCBlLmcuICJQQ0lcVkVOX3Z2dnYmREVWX2RkZGQmU1VCU1lTX3Nzc3Nzc3NzIikKLQkgKi8KLQotCS8qIFRoZSBfQ0lEIG9iamVjdCBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIENJRCBvciBhIHBhY2thZ2UgKGxpc3QpIG9mIENJRHMgKi8KLQotCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQotCQkvKiBUcmFuc2xhdGUgZWFjaCBwYWNrYWdlIGVsZW1lbnQgKi8KLQotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJc3RhdHVzID0KLQkJCSAgICBhY3BpX3V0X3RyYW5zbGF0ZV9vbmVfY2lkKG9ial9kZXNjLT5wYWNrYWdlLgotCQkJCQkJICAgICAgZWxlbWVudHNbaV0sCi0JCQkJCQkgICAgICAmY2lkX2xpc3QtPmlkW2ldKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJLyogT25seSBvbmUgQ0lELCB0cmFuc2xhdGUgdG8gYSBzdHJpbmcgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3V0X3RyYW5zbGF0ZV9vbmVfY2lkKG9ial9kZXNjLCBjaWRfbGlzdC0+aWQpOwotCX0KLQotCS8qIENsZWFudXAgb24gZXJyb3IgKi8KLQotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0ZSRUUoY2lkX2xpc3QpOwotCX0gZWxzZSB7Ci0JCSpyZXR1cm5fY2lkX2xpc3QgPSBjaWRfbGlzdDsKLQl9Ci0KLQkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgX0NJRCByZXR1cm4gb2JqZWN0ICovCi0KLQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uob2JqX2Rlc2MpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2V4ZWN1dGVfVUlECi0gKgotICogUEFSQU1FVEVSUzogIGRldmljZV9ub2RlICAgICAgICAgLSBOb2RlIGZvciB0aGUgZGV2aWNlCi0gKiAgICAgICAgICAgICAgVWlkICAgICAgICAgICAgICAgICAtIFdoZXJlIHRoZSBVSUQgaXMgcmV0dXJuZWQKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IEV4ZWN1dGVzIHRoZSBfVUlEIGNvbnRyb2wgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgaGFyZHdhcmUKLSAqICAgICAgICAgICAgICBJRCBvZiB0aGUgZGV2aWNlLgotICoKLSAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cwotYWNwaV91dF9leGVjdXRlX1VJRChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCi0JCSAgICBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqdWlkKQotewotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9VSUQpOwotCi0Jc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19VSUQsCi0JCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORywKLQkJCQkJICZvYmpfZGVzYyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKLQotCQkvKiBDb252ZXJ0IHRoZSBOdW1lcmljIFVJRCB0byBzdHJpbmcgKi8KLQotCQlhY3BpX2V4X3Vuc2lnbmVkX2ludGVnZXJfdG9fc3RyaW5nKG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlLAotCQkJCQkJICAgdWlkLT52YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJLyogQ29weSB0aGUgU3RyaW5nIFVJRCBmcm9tIHRoZSByZXR1cm5lZCBvYmplY3QgKi8KLQotCQlhY3BpX3V0X2NvcHlfaWRfc3RyaW5nKHVpZC0+dmFsdWUsIG9ial9kZXNjLT5zdHJpbmcucG9pbnRlciwKLQkJCQkgICAgICAgc2l6ZW9mKHVpZC0+dmFsdWUpKTsKLQl9CisJKnZhbHVlID0gb2JqX2Rlc2MtPmludGVnZXIudmFsdWU7CiAKIAkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLwogCkBAIC03MTYsNjAgKzQyMiw2NCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2V4ZWN1dGVfU3hkcworICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9wb3dlcl9tZXRob2RzCiAgKgogICogUEFSQU1FVEVSUzogIGRldmljZV9ub2RlICAgICAgICAgLSBOb2RlIGZvciB0aGUgZGV2aWNlCi0gKiAgICAgICAgICAgICAgRmxhZ3MgICAgICAgICAgICAgICAtIFdoZXJlIHRoZSBzdGF0dXMgZmxhZ3MgYXJlIHJldHVybmVkCisgKiAgICAgICAgICAgICAgbWV0aG9kX25hbWVzICAgICAgICAtIEFycmF5IG9mIHBvd2VyIG1ldGhvZCBuYW1lcworICogICAgICAgICAgICAgIG1ldGhvZF9jb3VudCAgICAgICAgLSBOdW1iZXIgb2YgbWV0aG9kcyB0byBleGVjdXRlCisgKiAgICAgICAgICAgICAgb3V0X3ZhbHVlcyAgICAgICAgICAtIFdoZXJlIHRoZSBwb3dlciBtZXRob2QgdmFsdWVzIGFyZSByZXR1cm5lZAogICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqIFJFVFVSTjogICAgICBTdGF0dXMsIG91dF92YWx1ZXMKICAqCi0gKiBERVNDUklQVElPTjogRXhlY3V0ZXMgX1NUQSBmb3Igc2VsZWN0ZWQgZGV2aWNlIGFuZCBzdG9yZXMgcmVzdWx0cyBpbgotICogICAgICAgICAgICAgICpGbGFncy4KKyAqIERFU0NSSVBUSU9OOiBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIHBvd2VyIG1ldGhvZHMgZm9yIHRoZSBkZXZpY2UgYW5kIHJldHVybnMKKyAqICAgICAgICAgICAgICB0aGUgcmVzdWx0KHMpLgogICoKICAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV91dF9leGVjdXRlX3N4ZHMoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLCB1OCAqIGhpZ2hlc3QpCithY3BpX3V0X2V4ZWN1dGVfcG93ZXJfbWV0aG9kcyhzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCisJCQkgICAgICBjb25zdCBjaGFyICoqbWV0aG9kX25hbWVzLAorCQkJICAgICAgdTggbWV0aG9kX2NvdW50LCB1OCAqb3V0X3ZhbHVlcykKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9zdGF0dXMgZmluYWxfc3RhdHVzID0gQUVfTk9UX0ZPVU5EOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX3N4ZHMpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9wb3dlcl9tZXRob2RzKTsKIAotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaGlnaGVzdFtpXSA9IDB4RkY7CisJZm9yIChpID0gMDsgaSA8IG1ldGhvZF9jb3VudDsgaSsrKSB7CisJCS8qCisJCSAqIEV4ZWN1dGUgdGhlIHBvd2VyIG1ldGhvZCAoX3N4X2Qgb3IgX3N4X3cpLiBUaGUgb25seSBhbGxvd2FibGUKKwkJICogcmV0dXJuIHR5cGUgaXMgYW4gSW50ZWdlci4KKwkJICovCiAJCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KGRldmljZV9ub2RlLAogCQkJCQkJIEFDUElfQ0FTVF9QVFIoY2hhciwKLQkJCQkJCQkgICAgICAgYWNwaV9nYmxfaGlnaGVzdF9kc3RhdGVfbmFtZXMKLQkJCQkJCQkgICAgICAgW2ldKSwKKwkJCQkJCQkgICAgICAgbWV0aG9kX25hbWVzW2ldKSwKIAkJCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIsICZvYmpfZGVzYyk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJaWYgKHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpIHsKLQkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJCQkgICIlcyBvbiBEZXZpY2UgJTQuNHMsICVzXG4iLAotCQkJCQkJICBBQ1BJX0NBU1RfUFRSKGNoYXIsCi0JCQkJCQkJCWFjcGlfZ2JsX2hpZ2hlc3RfZHN0YXRlX25hbWVzCi0JCQkJCQkJCVtpXSksCi0JCQkJCQkgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZQotCQkJCQkJICAoZGV2aWNlX25vZGUpLAotCQkJCQkJICBhY3BpX2Zvcm1hdF9leGNlcHRpb24KLQkJCQkJCSAgKHN0YXR1cykpKTsKLQotCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogRXh0cmFjdCB0aGUgRHN0YXRlIHZhbHVlICovCi0KLQkJCWhpZ2hlc3RbaV0gPSAodTgpIG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCW91dF92YWx1ZXNbaV0gPSAodTgpb2JqX2Rlc2MtPmludGVnZXIudmFsdWU7CiAKIAkJCS8qIERlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLwogCiAJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uob2JqX2Rlc2MpOworCQkJZmluYWxfc3RhdHVzID0gQUVfT0s7CS8qIEF0IGxlYXN0IG9uZSB2YWx1ZSBpcyB2YWxpZCAqLworCQkJY29udGludWU7CiAJCX0KKworCQlvdXRfdmFsdWVzW2ldID0gQUNQSV9VSU5UOF9NQVg7CisJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CisJCQljb250aW51ZTsJLyogSWdub3JlIGlmIG5vdCBmb3VuZCAqLworCQl9CisKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAorCQkJCSAgIkZhaWxlZCAlcyBvbiBEZXZpY2UgJTQuNHMsICVzXG4iLAorCQkJCSAgQUNQSV9DQVNUX1BUUihjaGFyLCBtZXRob2RfbmFtZXNbaV0pLAorCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKGRldmljZV9ub2RlKSwKKwkJCQkgIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKSk7CiAJfQogCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoZmluYWxfc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYwppbmRleCA1OWU0NmYyLi4zZjJjNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCkBAIC05MCw3ICs5MCwxNSBAQAogCSJcXF9TNV8iCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9oaWdoZXN0X2RzdGF0ZV9uYW1lc1s0XSA9IHsKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX2xvd2VzdF9kc3RhdGVfbmFtZXNbQUNQSV9OVU1fc3hfd19NRVRIT0RTXSA9IHsKKwkiX1MwVyIsCisJIl9TMVciLAorCSJfUzJXIiwKKwkiX1MzVyIsCisJIl9TNFciCit9OworCitjb25zdCBjaGFyICphY3BpX2dibF9oaWdoZXN0X2RzdGF0ZV9uYW1lc1tBQ1BJX05VTV9zeF9kX01FVEhPRFNdID0gewogCSJfUzFEIiwKIAkiX1MyRCIsCiAJIl9TM0QiLApAQCAtMzUxLDYgKzM1OSw3IEBACiAJIlNNQnVzIiwKIAkiU3lzdGVtQ01PUyIsCiAJIlBDSUJBUlRhcmdldCIsCisJIklQTUkiLAogCSJEYXRhVGFibGUiCiB9OwogCkBAIC03OTgsNiArODA3LDcgQEAKIAogCS8qIE5hbWVzcGFjZSAqLwogCisJYWNwaV9nYmxfbW9kdWxlX2NvZGVfbGlzdCA9IE5VTEw7CiAJYWNwaV9nYmxfcm9vdF9ub2RlID0gTlVMTDsKIAlhY3BpX2dibF9yb290X25vZGVfc3RydWN0Lm5hbWUuaW50ZWdlciA9IEFDUElfUk9PVF9OQU1FOwogCWFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3QuZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfTkFNRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aWRzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlYWFlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYwpAQCAtMCwwICsxLDM4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZHVsZSBOYW1lOiB1dGlkcyAtIHN1cHBvcnQgZm9yIGRldmljZSBJRHMgLSBISUQsIFVJRCwgQ0lECisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOSwgSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisjaW5jbHVkZSAiYWNjb21tb24uaCIKKyNpbmNsdWRlICJhY2ludGVycC5oIgorCisjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9VVElMSVRJRVMKK0FDUElfTU9EVUxFX05BTUUoInV0aWRzIikKKworLyogTG9jYWwgcHJvdG90eXBlcyAqLworc3RhdGljIHZvaWQgYWNwaV91dF9jb3B5X2lkX3N0cmluZyhjaGFyICpkZXN0aW5hdGlvbiwgY2hhciAqc291cmNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV91dF9jb3B5X2lkX3N0cmluZworICoKKyAqIFBBUkFNRVRFUlM6ICBEZXN0aW5hdGlvbiAgICAgICAgIC0gV2hlcmUgdG8gY29weSB0aGUgc3RyaW5nCisgKiAgICAgICAgICAgICAgU291cmNlICAgICAgICAgICAgICAtIFNvdXJjZSBzdHJpbmcKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZQorICoKKyAqIERFU0NSSVBUSU9OOiBDb3BpZXMgYW4gSUQgc3RyaW5nIGZvciB0aGUgX0hJRCwgX0NJRCwgYW5kIF9VSUQgbWV0aG9kcy4KKyAqICAgICAgICAgICAgICBQZXJmb3JtcyByZW1vdmFsIG9mIGEgbGVhZGluZyBhc3RlcmlzayBpZiBwcmVzZW50IC0tIHdvcmthcm91bmQKKyAqICAgICAgICAgICAgICBmb3IgYSBrbm93biBpc3N1ZSBvbiBhIGJ1bmNoIG9mIG1hY2hpbmVzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGFjcGlfdXRfY29weV9pZF9zdHJpbmcoY2hhciAqZGVzdGluYXRpb24sIGNoYXIgKnNvdXJjZSkKK3sKKworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgSUQgc3RyaW5ncyB0aGF0IGhhdmUgYSBsZWFkaW5nIGFzdGVyaXNrLiBUaGlzIGNvbnN0cnVjdAorCSAqIGlzIG5vdCBhbGxvd2VkIGJ5IHRoZSBBQ1BJIHNwZWNpZmljYXRpb24gIChJRCBzdHJpbmdzIG11c3QgYmUKKwkgKiBhbHBoYW51bWVyaWMpLCBidXQgZW5vdWdoIGV4aXN0aW5nIG1hY2hpbmVzIGhhdmUgdGhpcyBlbWJlZGRlZCBpbiB0aGVpcgorCSAqIElEIHN0cmluZ3MgdGhhdCB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZnVsLgorCSAqLworCWlmICgqc291cmNlID09ICcqJykgeworCQlzb3VyY2UrKzsKKwl9CisKKwkvKiBEbyB0aGUgYWN0dWFsIGNvcHkgKi8KKworCUFDUElfU1RSQ1BZKGRlc3RpbmF0aW9uLCBzb3VyY2UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2V4ZWN1dGVfSElECisgKgorICogUEFSQU1FVEVSUzogIGRldmljZV9ub2RlICAgICAgICAgLSBOb2RlIGZvciB0aGUgZGV2aWNlCisgKiAgICAgICAgICAgICAgcmV0dXJuX2lkICAgICAgICAgICAtIFdoZXJlIHRoZSBzdHJpbmcgSElEIGlzIHJldHVybmVkCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBFeGVjdXRlcyB0aGUgX0hJRCBjb250cm9sIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIGhhcmR3YXJlCisgKiAgICAgICAgICAgICAgSUQgb2YgdGhlIGRldmljZS4gVGhlIEhJRCBpcyBlaXRoZXIgYW4gMzItYml0IGVuY29kZWQgRUlTQUlECisgKiAgICAgICAgICAgICAgSW50ZWdlciBvciBhIFN0cmluZy4gQSBzdHJpbmcgaXMgYWx3YXlzIHJldHVybmVkLiBBbiBFSVNBSUQKKyAqICAgICAgICAgICAgICBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuCisgKgorICogICAgICAgICAgICAgIE5PVEU6IEludGVybmFsIGZ1bmN0aW9uLCBubyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2V4ZWN1dGVfSElEKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKKwkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICoqcmV0dXJuX2lkKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICpoaWQ7CisJdTMyIGxlbmd0aDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfSElEKTsKKworCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KGRldmljZV9ub2RlLCBNRVRIT0RfTkFNRV9fSElELAorCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSIHwgQUNQSV9CVFlQRV9TVFJJTkcsCisJCQkJCSAmb2JqX2Rlc2MpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkvKiBHZXQgdGhlIHNpemUgb2YgdGhlIFN0cmluZyB0byBiZSByZXR1cm5lZCwgaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdG9yICovCisKKwlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCWxlbmd0aCA9IEFDUElfRUlTQUlEX1NUUklOR19TSVpFOworCX0gZWxzZSB7CisJCWxlbmd0aCA9IG9ial9kZXNjLT5zdHJpbmcubGVuZ3RoICsgMTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIEhJRCAqLworCisJaGlkID0KKwkgICAgQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkKSArCisJCQkJIChhY3BpX3NpemUpIGxlbmd0aCk7CisJaWYgKCFoaWQpIHsKKwkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogQXJlYSBmb3IgdGhlIHN0cmluZyBzdGFydHMgYWZ0ZXIgREVWSUNFX0lEIHN0cnVjdCAqLworCisJaGlkLT5zdHJpbmcgPSBBQ1BJX0FERF9QVFIoY2hhciwgaGlkLCBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpKTsKKworCS8qIENvbnZlcnQgRUlTQUlEIHRvIGEgc3RyaW5nIG9yIHNpbXBseSBjb3B5IGV4aXN0aW5nIHN0cmluZyAqLworCisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKGhpZC0+c3RyaW5nLCBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSk7CisJfSBlbHNlIHsKKwkJYWNwaV91dF9jb3B5X2lkX3N0cmluZyhoaWQtPnN0cmluZywgb2JqX2Rlc2MtPnN0cmluZy5wb2ludGVyKTsKKwl9CisKKwloaWQtPmxlbmd0aCA9IGxlbmd0aDsKKwkqcmV0dXJuX2lkID0gaGlkOworCitjbGVhbnVwOgorCisJLyogT24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIHJldHVybiBvYmplY3QgKi8KKworCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShvYmpfZGVzYyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9VSUQKKyAqCisgKiBQQVJBTUVURVJTOiAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKKyAqICAgICAgICAgICAgICByZXR1cm5faWQgICAgICAgICAgIC0gV2hlcmUgdGhlIHN0cmluZyBVSUQgaXMgcmV0dXJuZWQKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IEV4ZWN1dGVzIHRoZSBfVUlEIGNvbnRyb2wgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgdW5pcXVlCisgKiAgICAgICAgICAgICAgSUQgb2YgdGhlIGRldmljZS4gVGhlIFVJRCBpcyBlaXRoZXIgYSA2NC1iaXQgSW50ZWdlciAoTk9UIGFuCisgKiAgICAgICAgICAgICAgRUlTQUlEKSBvciBhIHN0cmluZy4gQWx3YXlzIHJldHVybnMgYSBzdHJpbmcuIEEgNjQtYml0IGludGVnZXIKKyAqICAgICAgICAgICAgICBpcyBjb252ZXJ0ZWQgdG8gYSBkZWNpbWFsIHN0cmluZy4KKyAqCisgKiAgICAgICAgICAgICAgTk9URTogSW50ZXJuYWwgZnVuY3Rpb24sIG5vIHBhcmFtZXRlciB2YWxpZGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfZXhlY3V0ZV9VSUQoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLAorCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKipyZXR1cm5faWQpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKnVpZDsKKwl1MzIgbGVuZ3RoOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9VSUQpOworCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19VSUQsCisJCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORywKKwkJCQkJICZvYmpfZGVzYyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCS8qIEdldCB0aGUgc2l6ZSBvZiB0aGUgU3RyaW5nIHRvIGJlIHJldHVybmVkLCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0b3IgKi8KKworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJbGVuZ3RoID0gQUNQSV9NQVg2NF9ERUNJTUFMX0RJR0lUUyArIDE7CisJfSBlbHNlIHsKKwkJbGVuZ3RoID0gb2JqX2Rlc2MtPnN0cmluZy5sZW5ndGggKyAxOworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUgVUlEICovCisKKwl1aWQgPQorCSAgICBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpICsKKwkJCQkgKGFjcGlfc2l6ZSkgbGVuZ3RoKTsKKwlpZiAoIXVpZCkgeworCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBBcmVhIGZvciB0aGUgc3RyaW5nIHN0YXJ0cyBhZnRlciBERVZJQ0VfSUQgc3RydWN0ICovCisKKwl1aWQtPnN0cmluZyA9IEFDUElfQUREX1BUUihjaGFyLCB1aWQsIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOworCisJLyogQ29udmVydCBhbiBJbnRlZ2VyIHRvIHN0cmluZywgb3IganVzdCBjb3B5IGFuIGV4aXN0aW5nIHN0cmluZyAqLworCisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlhY3BpX2V4X2ludGVnZXJfdG9fc3RyaW5nKHVpZC0+c3RyaW5nLCBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSk7CisJfSBlbHNlIHsKKwkJYWNwaV91dF9jb3B5X2lkX3N0cmluZyh1aWQtPnN0cmluZywgb2JqX2Rlc2MtPnN0cmluZy5wb2ludGVyKTsKKwl9CisKKwl1aWQtPmxlbmd0aCA9IGxlbmd0aDsKKwkqcmV0dXJuX2lkID0gdWlkOworCitjbGVhbnVwOgorCisJLyogT24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIHJldHVybiBvYmplY3QgKi8KKworCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShvYmpfZGVzYyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9DSUQKKyAqCisgKiBQQVJBTUVURVJTOiAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKKyAqICAgICAgICAgICAgICByZXR1cm5fY2lkX2xpc3QgICAgIC0gV2hlcmUgdGhlIENJRCBsaXN0IGlzIHJldHVybmVkCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cywgbGlzdCBvZiBDSUQgc3RyaW5ncworICoKKyAqIERFU0NSSVBUSU9OOiBFeGVjdXRlcyB0aGUgX0NJRCBjb250cm9sIG1ldGhvZCB0aGF0IHJldHVybnMgb25lIG9yIG1vcmUKKyAqICAgICAgICAgICAgICBjb21wYXRpYmxlIGhhcmR3YXJlIElEcyBmb3IgdGhlIGRldmljZS4KKyAqCisgKiAgICAgICAgICAgICAgTk9URTogSW50ZXJuYWwgZnVuY3Rpb24sIG5vIHBhcmFtZXRlciB2YWxpZGF0aW9uCisgKgorICogQSBfQ0lEIG1ldGhvZCBjYW4gcmV0dXJuIGVpdGhlciBhIHNpbmdsZSBjb21wYXRpYmxlIElEIG9yIGEgcGFja2FnZSBvZgorICogY29tcGF0aWJsZSBJRHMuIEVhY2ggY29tcGF0aWJsZSBJRCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKiAxKSBJbnRlZ2VyICgzMiBiaXQgY29tcHJlc3NlZCBFSVNBIElEKSBvcgorICogMikgU3RyaW5nIChQQ0kgSUQgZm9ybWF0LCBlLmcuICJQQ0lcVkVOX3Z2dnYmREVWX2RkZGQmU1VCU1lTX3Nzc3Nzc3NzIikKKyAqCisgKiBUaGUgSW50ZWdlciBDSURzIGFyZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIGZvcm1hdCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2V4ZWN1dGVfQ0lEKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKKwkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKipyZXR1cm5fY2lkX2xpc3QpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmNpZF9vYmplY3RzOworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OworCWNoYXIgKm5leHRfaWRfc3RyaW5nOworCXUzMiBzdHJpbmdfYXJlYV9zaXplOworCXUzMiBsZW5ndGg7CisJdTMyIGNpZF9saXN0X3NpemU7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXUzMiBjb3VudDsKKwl1MzIgaTsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9DSUQpOworCisJLyogRXZhbHVhdGUgdGhlIF9DSUQgbWV0aG9kIGZvciB0aGlzIGRldmljZSAqLworCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19DSUQsCisJCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORworCQkJCQkgfCBBQ1BJX0JUWVBFX1BBQ0tBR0UsICZvYmpfZGVzYyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCS8qCisJICogR2V0IHRoZSBjb3VudCBhbmQgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgX0NJRHMuIF9DSUQgY2FuIHJldHVybiBlaXRoZXIKKwkgKiBhIFBhY2thZ2Ugb2YgSW50ZWdlcnMvU3RyaW5ncyBvciBhIHNpbmdsZSBJbnRlZ2VyIG9yIFN0cmluZy4KKwkgKiBOb3RlOiBUaGlzIHNlY3Rpb24gYWxzbyB2YWxpZGF0ZXMgdGhhdCBhbGwgQ0lEIGVsZW1lbnRzIGFyZSBvZiB0aGUKKwkgKiBjb3JyZWN0IHR5cGUgKEludGVnZXIgb3IgU3RyaW5nKS4KKwkgKi8KKwlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJCWNvdW50ID0gb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQ7CisJCWNpZF9vYmplY3RzID0gb2JqX2Rlc2MtPnBhY2thZ2UuZWxlbWVudHM7CisJfSBlbHNlIHsJCS8qIFNpbmdsZSBJbnRlZ2VyIG9yIFN0cmluZyBDSUQgKi8KKworCQljb3VudCA9IDE7CisJCWNpZF9vYmplY3RzID0gJm9ial9kZXNjOworCX0KKworCXN0cmluZ19hcmVhX3NpemUgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisKKwkJLyogU3RyaW5nIGxlbmd0aHMgaW5jbHVkZSBudWxsIHRlcm1pbmF0b3IgKi8KKworCQlzd2l0Y2ggKGNpZF9vYmplY3RzW2ldLT5jb21tb24udHlwZSkgeworCQljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgorCQkJc3RyaW5nX2FyZWFfc2l6ZSArPSBBQ1BJX0VJU0FJRF9TVFJJTkdfU0laRTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKKwkJCXN0cmluZ19hcmVhX3NpemUgKz0gY2lkX29iamVjdHNbaV0tPnN0cmluZy5sZW5ndGggKyAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXN0YXR1cyA9IEFFX1RZUEU7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGtub3cgdGhlIGxlbmd0aCBvZiB0aGUgQ0lEcywgYWxsb2NhdGUgcmV0dXJuIGJ1ZmZlcjoKKwkgKiAxKSBTaXplIG9mIHRoZSBiYXNlIHN0cnVjdHVyZSArCisJICogMikgU2l6ZSBvZiB0aGUgQ0lEIERFVklDRV9JRCBhcnJheSArCisJICogMykgU2l6ZSBvZiB0aGUgYWN0dWFsIENJRCBzdHJpbmdzCisJICovCisJY2lkX2xpc3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0KSArCisJICAgICgoY291bnQgLSAxKSAqIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpICsgc3RyaW5nX2FyZWFfc2l6ZTsKKworCWNpZF9saXN0ID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoY2lkX2xpc3Rfc2l6ZSk7CisJaWYgKCFjaWRfbGlzdCkgeworCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBBcmVhIGZvciBDSUQgc3RyaW5ncyBzdGFydHMgYWZ0ZXIgdGhlIENJRCBERVZJQ0VfSUQgYXJyYXkgKi8KKworCW5leHRfaWRfc3RyaW5nID0gQUNQSV9DQVNUX1BUUihjaGFyLCBjaWRfbGlzdC0+aWRzKSArCisJICAgICgoYWNwaV9zaXplKSBjb3VudCAqIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOworCisJLyogQ29weS9jb252ZXJ0IHRoZSBDSURzIHRvIHRoZSByZXR1cm4gYnVmZmVyICovCisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoY2lkX29iamVjdHNbaV0tPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisKKwkJCS8qIENvbnZlcnQgdGhlIEludGVnZXIgKEVJU0FJRCkgQ0lEIHRvIGEgc3RyaW5nICovCisKKwkJCWFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcobmV4dF9pZF9zdHJpbmcsCisJCQkJCQkgIGNpZF9vYmplY3RzW2ldLT5pbnRlZ2VyLgorCQkJCQkJICB2YWx1ZSk7CisJCQlsZW5ndGggPSBBQ1BJX0VJU0FJRF9TVFJJTkdfU0laRTsKKwkJfSBlbHNlIHsJLyogQUNQSV9UWVBFX1NUUklORyAqLworCisJCQkvKiBDb3B5IHRoZSBTdHJpbmcgQ0lEIGZyb20gdGhlIHJldHVybmVkIG9iamVjdCAqLworCisJCQlhY3BpX3V0X2NvcHlfaWRfc3RyaW5nKG5leHRfaWRfc3RyaW5nLAorCQkJCQkgICAgICAgY2lkX29iamVjdHNbaV0tPnN0cmluZy5wb2ludGVyKTsKKwkJCWxlbmd0aCA9IGNpZF9vYmplY3RzW2ldLT5zdHJpbmcubGVuZ3RoICsgMTsKKwkJfQorCisJCWNpZF9saXN0LT5pZHNbaV0uc3RyaW5nID0gbmV4dF9pZF9zdHJpbmc7CisJCWNpZF9saXN0LT5pZHNbaV0ubGVuZ3RoID0gbGVuZ3RoOworCQluZXh0X2lkX3N0cmluZyArPSBsZW5ndGg7CisJfQorCisJLyogRmluaXNoIHRoZSBDSUQgbGlzdCAqLworCisJY2lkX2xpc3QtPmNvdW50ID0gY291bnQ7CisJY2lkX2xpc3QtPmxpc3Rfc2l6ZSA9IGNpZF9saXN0X3NpemU7CisJKnJldHVybl9jaWRfbGlzdCA9IGNpZF9saXN0OworCitjbGVhbnVwOgorCisJLyogT24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIF9DSUQgcmV0dXJuIG9iamVjdCAqLworCisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aW5pdC5jCmluZGV4IGE1NGNhODQuLjlkMDkxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYwpAQCAtOTksMzMgKzk5LDE5IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfdXRfc3Vic3lzdGVtX3NodXRkb3duCiAgKgotICogUEFSQU1FVEVSUzogIG5vbmUKKyAqIFBBUkFNRVRFUlM6ICBOb25lCiAgKgotICogUkVUVVJOOiAgICAgIG5vbmUKKyAqIFJFVFVSTjogICAgICBOb25lCiAgKgotICogREVTQ1JJUFRJT046IFNodXRkb3duIHRoZSB2YXJpb3VzIHN1YnN5c3RlbXMuICBEb24ndCBkZWxldGUgdGhlIG11dGV4Ci0gKiAgICAgICAgICAgICAgb2JqZWN0cyBoZXJlIC0tIGJlY2F1c2UgdGhlIEFNTCBkZWJ1Z2dlciBtYXkgYmUgc3RpbGwgcnVubmluZy4KKyAqIERFU0NSSVBUSU9OOiBTaHV0ZG93biB0aGUgdmFyaW91cyBjb21wb25lbnRzLiBEbyBub3QgZGVsZXRlIHRoZSBtdXRleAorICogICAgICAgICAgICAgIG9iamVjdHMgaGVyZSwgYmVjYXVzZSB0aGUgQU1MIGRlYnVnZ2VyIG1heSBiZSBzdGlsbCBydW5uaW5nLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQgYWNwaV91dF9zdWJzeXN0ZW1fc2h1dGRvd24odm9pZCkKIHsKLQogCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfc3Vic3lzdGVtX3NodXRkb3duKTsKIAotCS8qIEp1c3QgZXhpdCBpZiBzdWJzeXN0ZW0gaXMgYWxyZWFkeSBzaHV0ZG93biAqLwotCi0JaWYgKGFjcGlfZ2JsX3NodXRkb3duKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJBQ1BJIFN1YnN5c3RlbSBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQiKSk7Ci0JCXJldHVybl9WT0lEOwotCX0KLQotCS8qIFN1YnN5c3RlbSBhcHBlYXJzIGFjdGl2ZSwgZ28gYWhlYWQgYW5kIHNodXQgaXQgZG93biAqLwotCi0JYWNwaV9nYmxfc2h1dGRvd24gPSBUUlVFOwotCWFjcGlfZ2JsX3N0YXJ0dXBfZmxhZ3MgPSAwOwotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlNodXR0aW5nIGRvd24gQUNQSSBTdWJzeXN0ZW1cbiIpKTsKLQogI2lmbmRlZiBBQ1BJX0FTTF9DT01QSUxFUgogCiAJLyogQ2xvc2UgdGhlIGFjcGlfZXZlbnQgSGFuZGxpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCmluZGV4IGZiZTc4MjMuLjYxZjYzMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYwpAQCAtNTAsNiArNTAsMTEgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwogQUNQSV9NT0RVTEVfTkFNRSgidXRtaXNjIikKIAorLyoKKyAqIENvbW1vbiBzdWZmaXggZm9yIG1lc3NhZ2VzCisgKi8KKyNkZWZpbmUgQUNQSV9DT01NT05fTVNHX1NVRkZJWCBcCisJYWNwaV9vc19wcmludGYoIiAoJTguOFgvJXMtJXUpXG4iLCBBQ1BJX0NBX1ZFUlNJT04sIG1vZHVsZV9uYW1lLCBsaW5lX251bWJlcikKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfdXRfdmFsaWRhdGVfZXhjZXB0aW9uCkBAIC0xMjAsNiArMTI1LDM0IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfaXNfcGNpX3Jvb3RfYnJpZGdlCisgKgorICogUEFSQU1FVEVSUzogIElkICAgICAgICAgICAgICAtIFRoZSBISUQvQ0lEIGluIHN0cmluZyBmb3JtYXQKKyAqCisgKiBSRVRVUk46ICAgICAgVFJVRSBpZiB0aGUgSWQgaXMgYSBtYXRjaCBmb3IgYSBQQ0kvUENJLUV4cHJlc3MgUm9vdCBCcmlkZ2UKKyAqCisgKiBERVNDUklQVElPTjogRGV0ZXJtaW5lIGlmIHRoZSBpbnB1dCBJRCBpcyBhIFBDSSBSb290IEJyaWRnZSBJRC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit1OCBhY3BpX3V0X2lzX3BjaV9yb290X2JyaWRnZShjaGFyICppZCkKK3sKKworCS8qCisJICogQ2hlY2sgaWYgdGhpcyBpcyBhIFBDSSByb290IGJyaWRnZS4KKwkgKiBBQ1BJIDMuMCs6IGNoZWNrIGZvciBhIFBDSSBFeHByZXNzIHJvb3QgYWxzby4KKwkgKi8KKwlpZiAoIShBQ1BJX1NUUkNNUChpZCwKKwkJCSAgUENJX1JPT1RfSElEX1NUUklORykpIHx8CisJICAgICEoQUNQSV9TVFJDTVAoaWQsIFBDSV9FWFBSRVNTX1JPT1RfSElEX1NUUklORykpKSB7CisJCXJldHVybiAoVFJVRSk7CisJfQorCisJcmV0dXJuIChGQUxTRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfdXRfaXNfYW1sX3RhYmxlCiAgKgogICogUEFSQU1FVEVSUzogIFRhYmxlICAgICAgICAgICAgICAgLSBBbiBBQ1BJIHRhYmxlCkBAIC0xMDM3LDggKzEwNzAsNyBAQAogCiAJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKIAlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKLQlhY3BpX29zX3ByaW50ZigiICU4LjhYICVzLSV1XG4iLCBBQ1BJX0NBX1ZFUlNJT04sIG1vZHVsZV9uYW1lLAotCQkgICAgICAgbGluZV9udW1iZXIpOworCUFDUElfQ09NTU9OX01TR19TVUZGSVg7CiAJdmFfZW5kKGFyZ3MpOwogfQogCkBAIC0xMDUyLDggKzEwODQsNyBAQAogCiAJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKIAlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKLQlhY3BpX29zX3ByaW50ZigiICU4LjhYICVzLSV1XG4iLCBBQ1BJX0NBX1ZFUlNJT04sIG1vZHVsZV9uYW1lLAotCQkgICAgICAgbGluZV9udW1iZXIpOworCUFDUElfQ09NTU9OX01TR19TVUZGSVg7CiAJdmFfZW5kKGFyZ3MpOwogfQogCkBAIC0xMDY2LDggKzEwOTcsNyBAQAogCiAJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKIAlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKLQlhY3BpX29zX3ByaW50ZigiICU4LjhYICVzLSV1XG4iLCBBQ1BJX0NBX1ZFUlNJT04sIG1vZHVsZV9uYW1lLAotCQkgICAgICAgbGluZV9udW1iZXIpOworCUFDUElfQ09NTU9OX01TR19TVUZGSVg7CiAJdmFfZW5kKGFyZ3MpOwogfQogCkBAIC0xMDg4LDMgKzExMTgsNDYgQEAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2V4Y2VwdGlvbikKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3dhcm5pbmcpCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbmZvKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3ByZWRlZmluZWRfd2FybmluZworICoKKyAqIFBBUkFNRVRFUlM6ICBtb2R1bGVfbmFtZSAgICAgLSBDYWxsZXIncyBtb2R1bGUgbmFtZSAoZm9yIGVycm9yIG91dHB1dCkKKyAqICAgICAgICAgICAgICBsaW5lX251bWJlciAgICAgLSBDYWxsZXIncyBsaW5lIG51bWJlciAoZm9yIGVycm9yIG91dHB1dCkKKyAqICAgICAgICAgICAgICBQYXRobmFtZSAgICAgICAgLSBGdWxsIHBhdGhuYW1lIHRvIHRoZSBub2RlCisgKiAgICAgICAgICAgICAgbm9kZV9mbGFncyAgICAgIC0gRnJvbSBOYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIG1ldGhvZC9vYmplY3QKKyAqICAgICAgICAgICAgICBGb3JtYXQgICAgICAgICAgLSBQcmludGYgZm9ybWF0IHN0cmluZyArIGFkZGl0aW9uYWwgYXJncworICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IFdhcm5pbmdzIGZvciB0aGUgcHJlZGVmaW5lZCB2YWxpZGF0aW9uIG1vZHVsZS4gTWVzc2FnZXMgYXJlCisgKiAgICAgICAgICAgICAgb25seSBlbWl0dGVkIHRoZSBmaXJzdCB0aW1lIGEgcHJvYmxlbSB3aXRoIGEgcGFydGljdWxhcgorICogICAgICAgICAgICAgIG1ldGhvZC9vYmplY3QgaXMgZGV0ZWN0ZWQuIFRoaXMgcHJldmVudHMgYSBmbG9vZCBvZiBlcnJvcgorICogICAgICAgICAgICAgIG1lc3NhZ2VzIGZvciBtZXRob2RzIHRoYXQgYXJlIHJlcGVhdGVkbHkgZXZhbHVhdGVkLgorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQorYWNwaV91dF9wcmVkZWZpbmVkX3dhcm5pbmcoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsCisJCQkgICB1MzIgbGluZV9udW1iZXIsCisJCQkgICBjaGFyICpwYXRobmFtZSwKKwkJCSAgIHU4IG5vZGVfZmxhZ3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCS8qCisJICogV2FybmluZyBtZXNzYWdlcyBmb3IgdGhpcyBtZXRob2Qvb2JqZWN0IHdpbGwgYmUgZGlzYWJsZWQgYWZ0ZXIgdGhlCisJICogZmlyc3QgdGltZSBhIHZhbGlkYXRpb24gZmFpbHMgb3IgYW4gb2JqZWN0IGlzIHN1Y2Nlc3NmdWxseSByZXBhaXJlZC4KKwkgKi8KKwlpZiAobm9kZV9mbGFncyAmIEFOT0JKX0VWQUxVQVRFRCkgeworCQlyZXR1cm47CisJfQorCisJYWNwaV9vc19wcmludGYoIkFDUEkgV2FybmluZyBmb3IgJXM6ICIsIHBhdGhuYW1lKTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisJYWNwaV9vc192cHJpbnRmKGZvcm1hdCwgYXJncyk7CisJQUNQSV9DT01NT05fTVNHX1NVRkZJWDsKKwl2YV9lbmQoYXJncyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCmluZGV4IDA3OGEyMjcuLmIxZjVmNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCkBAIC0yNTEsNiArMjUxLDE2IEBACiAJfQogCiAJLyoKKwkgKiBFeGVjdXRlIGFueSBtb2R1bGUtbGV2ZWwgY29kZSB0aGF0IHdhcyBkZXRlY3RlZCBkdXJpbmcgdGhlIHRhYmxlIGxvYWQKKwkgKiBwaGFzZS4gQWx0aG91Z2ggaWxsZWdhbCBzaW5jZSBBQ1BJIDIuMCwgdGhlcmUgYXJlIG1hbnkgbWFjaGluZXMgdGhhdAorCSAqIGNvbnRhaW4gdGhpcyB0eXBlIG9mIGNvZGUuIEVhY2ggYmxvY2sgb2YgZGV0ZWN0ZWQgZXhlY3V0YWJsZSBBTUwgY29kZQorCSAqIG91dHNpZGUgb2YgYW55IGNvbnRyb2wgbWV0aG9kIGlzIHdyYXBwZWQgd2l0aCBhIHRlbXBvcmFyeSBjb250cm9sCisJICogbWV0aG9kIG9iamVjdCBhbmQgcGxhY2VkIG9uIGEgZ2xvYmFsIGxpc3QuIFRoZSBtZXRob2RzIG9uIHRoaXMgbGlzdAorCSAqIGFyZSBleGVjdXRlZCBiZWxvdy4KKwkgKi8KKwlhY3BpX25zX2V4ZWNfbW9kdWxlX2NvZGVfbGlzdCgpOworCisJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBvYmplY3RzIHRoYXQgcmVtYWluIHVuaW5pdGlhbGl6ZWQuIFRoaXMgcnVucyB0aGUKIAkgKiBleGVjdXRhYmxlIEFNTCB0aGF0IG1heSBiZSBwYXJ0IG9mIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGVzZSBvYmplY3RzOgogCSAqIG9wZXJhdGlvbl9yZWdpb25zLCBidWZmZXJfZmllbGRzLCBCdWZmZXJzLCBhbmQgUGFja2FnZXMuCkBAIC0zMTgsNyArMzI4LDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IFNodXRkb3duIHRoZSBBQ1BJIHN1YnN5c3RlbS4gIFJlbGVhc2UgYWxsIHJlc291cmNlcy4KKyAqIERFU0NSSVBUSU9OOiBTaHV0ZG93biB0aGUgQUNQSUNBIHN1YnN5c3RlbSBhbmQgcmVsZWFzZSBhbGwgcmVzb3VyY2VzLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cyBhY3BpX3Rlcm1pbmF0ZSh2b2lkKQpAQCAtMzI3LDYgKzMzNywxOSBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3Rlcm1pbmF0ZSk7CiAKKwkvKiBKdXN0IGV4aXQgaWYgc3Vic3lzdGVtIGlzIGFscmVhZHkgc2h1dGRvd24gKi8KKworCWlmIChhY3BpX2dibF9zaHV0ZG93bikgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQUNQSSBTdWJzeXN0ZW0gaXMgYWxyZWFkeSB0ZXJtaW5hdGVkIikpOworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCX0KKworCS8qIFN1YnN5c3RlbSBhcHBlYXJzIGFjdGl2ZSwgZ28gYWhlYWQgYW5kIHNodXQgaXQgZG93biAqLworCisJYWNwaV9nYmxfc2h1dGRvd24gPSBUUlVFOworCWFjcGlfZ2JsX3N0YXJ0dXBfZmxhZ3MgPSAwOworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlNodXR0aW5nIGRvd24gQUNQSSBTdWJzeXN0ZW1cbiIpKTsKKwogCS8qIFRlcm1pbmF0ZSB0aGUgQU1MIERlYnVnZ2VyIGlmIHByZXNlbnQgKi8KIAogCUFDUElfREVCVUdHRVJfRVhFQyhhY3BpX2dibF9kYl90ZXJtaW5hdGVfdGhyZWFkcyA9IFRSVUUpOwpAQCAtMzUzLDYgKzM3Niw3IEBACiB9CiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3Rlcm1pbmF0ZSkKKwogI2lmbmRlZiBBQ1BJX0FTTF9DT01QSUxFUgogI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggNThiNDUxNy4uM2Y0NjAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGU19QT1dFUgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KQEAgLTQ1LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNlbmRpZgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOIDB4RkZGRkZGRkYKIAogI2RlZmluZSBBQ1BJX0JBVFRFUllfQ0xBU1MJCSJiYXR0ZXJ5IgpAQCAtODUsNiArODgsMTAgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBiYXR0ZXJ5X2RldmljZV9pZHMpOwogCisvKiBGb3IgYnVnZ3kgRFNEVHMgdGhhdCByZXBvcnQgbmVnYXRpdmUgMTYtYml0IHZhbHVlcyBmb3IgZWl0aGVyIGNoYXJnaW5nCisgKiBvciBkaXNjaGFyZ2luZyBjdXJyZW50IGFuZC9vciByZXBvcnQgMCBhcyA2NTUzNiBkdWUgdG8gYmFkIG1hdGguCisgKi8KKyNkZWZpbmUgUVVJUktfU0lHTkVEMTZfQ1VSUkVOVCAweDAwMDEKIAogc3RydWN0IGFjcGlfYmF0dGVyeSB7CiAJc3RydWN0IG11dGV4IGxvY2s7CkBAIC0xMTIsNiArMTE5LDcgQEAKIAlpbnQgc3RhdGU7CiAJaW50IHBvd2VyX3VuaXQ7CiAJdTggYWxhcm1fcHJlc2VudDsKKwlsb25nIHF1aXJrczsKIH07CiAKICNkZWZpbmUgdG9fYWNwaV9iYXR0ZXJ5KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBiYXQpOwpAQCAtMzkwLDYgKzM5OCwxMSBAQAogCQkJCSBzdGF0ZV9vZmZzZXRzLCBBUlJBWV9TSVpFKHN0YXRlX29mZnNldHMpKTsKIAliYXR0ZXJ5LT51cGRhdGVfdGltZSA9IGppZmZpZXM7CiAJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCisJaWYgKChiYXR0ZXJ5LT5xdWlya3MgJiBRVUlSS19TSUdORUQxNl9DVVJSRU5UKSAmJgorCSAgICBiYXR0ZXJ5LT5yYXRlX25vdyAhPSAtMSkKKwkJYmF0dGVyeS0+cmF0ZV9ub3cgPSBhYnMoKHMxNiliYXR0ZXJ5LT5yYXRlX25vdyk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC00OTUsNiArNTA4LDE0IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgYWNwaV9iYXR0ZXJ5X3F1aXJrcyhzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQoreworCWJhdHRlcnktPnF1aXJrcyA9IDA7CisJaWYgKGRtaV9uYW1lX2luX3ZlbmRvcnMoIkFjZXIiKSAmJiBiYXR0ZXJ5LT5wb3dlcl91bml0KSB7CisJCWJhdHRlcnktPnF1aXJrcyB8PSBRVUlSS19TSUdORUQxNl9DVVJSRU5UOworCX0KK30KKwogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfdXBkYXRlKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCiB7CiAJaW50IHJlc3VsdCwgb2xkX3ByZXNlbnQgPSBhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KTsKQEAgLTUxMyw2ICs1MzQsNyBAQAogCQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X2luZm8oYmF0dGVyeSk7CiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OworCQlhY3BpX2JhdHRlcnlfcXVpcmtzKGJhdHRlcnkpOwogCQlhY3BpX2JhdHRlcnlfaW5pdF9hbGFybShiYXR0ZXJ5KTsKIAl9CiAjaWZkZWYgQ09ORklHX0FDUElfU1lTRlNfUE9XRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYyBiL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYwppbmRleCAwYzRjYTRkLi5lNTZiMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogZW51bSBhY3BpX2JsYWNrbGlzdF9wcmVkaWNhdGVzIHsKIAlhbGxfdmVyc2lvbnMsCiAJbGVzc190aGFuX29yX2VxdWFsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDI4NzZmYzcuLjEzNWZiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTE0MSw3ICsxNDIsNyBAQAogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19nZXRfc3RhdHVzKTsKIAogdm9pZCBhY3BpX2J1c19wcml2YXRlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSBoYW5kbGUsCi0JCQkJICAgdTMyIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KQorCQkJCSAgIHZvaWQgKmNvbnRleHQpCiB7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IDkxOTVkZWJhOS4uZDI5NWJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfQlVUVE9OX0NMQVNTCQkiYnV0dG9uIgogI2RlZmluZSBBQ1BJX0JVVFRPTl9GSUxFX0lORk8JCSJpbmZvIgogI2RlZmluZSBBQ1BJX0JVVFRPTl9GSUxFX1NUQVRFCQkic3RhdGUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvY21fc2JzLmMgYi9kcml2ZXJzL2FjcGkvY21fc2JzLmMKaW5kZXggMzMyZmU0Yi4uNmM5ZWU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2NtX3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9jbV9zYnMuYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiBBQ1BJX01PRFVMRV9OQU1FKCJjbV9zYnMiKTsKICNkZWZpbmUgQUNQSV9BQ19DTEFTUwkJImFjX2FkYXB0ZXIiCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9DTEFTUwkiYmF0dGVyeSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYyBiL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYwppbmRleCBmZTBjZGY4Li42NDJiYjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvY29udGFpbmVyLmMKKysrIGIvZHJpdmVycy9hY3BpL2NvbnRhaW5lci5jCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2NvbnRhaW5lci5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfQ09OVEFJTkVSX0RFVklDRV9OQU1FCSJBQ1BJIGNvbnRhaW5lciBkZXZpY2UiCiAjZGVmaW5lIEFDUElfQ09OVEFJTkVSX0NMQVNTCQkiY29udGFpbmVyIgogCkBAIC0yMDAsMjAgKzIwMiwxNyBAQAogCQkJICAgIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKIHsKIAljaGFyICpoaWQgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWludCAqYWN0aW9uID0gY29udGV4dDsKIAotCi0Jc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgIWJ1ZmZlci5wb2ludGVyKSB7CisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmaW5mbyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybiBBRV9PSzsKIAl9CiAKLQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7CiAJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpCi0JCWhpZCA9IGluZm8tPmhhcmR3YXJlX2lkLnZhbHVlOworCQloaWQgPSBpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmc7CiAKIAlpZiAoaGlkID09IE5VTEwpIHsKIAkJZ290byBlbmQ7CkBAIC0yNDAsNyArMjM5LDcgQEAKIAl9CiAKICAgICAgIGVuZDoKLQlrZnJlZShidWZmZXIucG9pbnRlcik7CisJa2ZyZWUoaW5mbyk7CiAKIAlyZXR1cm4gQUVfT0s7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGVidWcuYyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCmluZGV4IGE4Mjg3YmUuLjhhNjkwYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMDEsNzIgKzIwMiw1NCBAQAogI2RlZmluZSBBQ1BJX1NZU1RFTV9GSUxFX0RFQlVHX0xBWUVSCSJkZWJ1Z19sYXllciIKICNkZWZpbmUgQUNQSV9TWVNURU1fRklMRV9ERUJVR19MRVZFTAkJImRlYnVnX2xldmVsIgogCi1zdGF0aWMgaW50Ci1hY3BpX3N5c3RlbV9yZWFkX2RlYnVnKGNoYXIgKnBhZ2UsCi0JCSAgICAgICBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYWNwaV9zeXN0ZW1fZGVidWdfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyICpwID0gcGFnZTsKLQlpbnQgc2l6ZSA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAob2ZmICE9IDApCi0JCWdvdG8gZW5kOworCXNlcV9wcmludGYobSwgIiUtMjVzXHRIZXggICAgICAgIFNFVFxuIiwgIkRlc2NyaXB0aW9uIik7CiAKLQlwICs9IHNwcmludGYocCwgIiUtMjVzXHRIZXggICAgICAgIFNFVFxuIiwgIkRlc2NyaXB0aW9uIik7Ci0KLQlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKWRhdGEpIHsKKwlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKW0tPnByaXZhdGUpIHsKIAljYXNlIDA6CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFjcGlfZGVidWdfbGF5ZXJzKTsgaSsrKSB7Ci0JCQlwICs9IHNwcmludGYocCwgIiUtMjVzXHQweCUwOGxYIFslY11cbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTI1c1x0MHglMDhsWCBbJWNdXG4iLAogCQkJCSAgICAgYWNwaV9kZWJ1Z19sYXllcnNbaV0ubmFtZSwKIAkJCQkgICAgIGFjcGlfZGVidWdfbGF5ZXJzW2ldLnZhbHVlLAogCQkJCSAgICAgKGFjcGlfZGJnX2xheWVyICYgYWNwaV9kZWJ1Z19sYXllcnNbaV0uCiAJCQkJICAgICAgdmFsdWUpID8gJyonIDogJyAnKTsKIAkJfQotCQlwICs9IHNwcmludGYocCwgIiUtMjVzXHQweCUwOFggWyVjXVxuIiwgIkFDUElfQUxMX0RSSVZFUlMiLAorCQlzZXFfcHJpbnRmKG0sICIlLTI1c1x0MHglMDhYIFslY11cbiIsICJBQ1BJX0FMTF9EUklWRVJTIiwKIAkJCSAgICAgQUNQSV9BTExfRFJJVkVSUywKIAkJCSAgICAgKGFjcGlfZGJnX2xheWVyICYgQUNQSV9BTExfRFJJVkVSUykgPT0KIAkJCSAgICAgQUNQSV9BTExfRFJJVkVSUyA/ICcqJyA6IChhY3BpX2RiZ19sYXllciAmCiAJCQkJCQkgICAgICAgQUNQSV9BTExfRFJJVkVSUykgPT0KIAkJCSAgICAgMCA/ICcgJyA6ICctJyk7Ci0JCXAgKz0gc3ByaW50ZihwLAorCQlzZXFfcHJpbnRmKG0sCiAJCQkgICAgICItLVxuZGVidWdfbGF5ZXIgPSAweCUwOFggKCogPSBlbmFibGVkLCAtID0gcGFydGlhbClcbiIsCiAJCQkgICAgIGFjcGlfZGJnX2xheWVyKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhY3BpX2RlYnVnX2xldmVscyk7IGkrKykgewotCQkJcCArPSBzcHJpbnRmKHAsICIlLTI1c1x0MHglMDhsWCBbJWNdXG4iLAorCQkJc2VxX3ByaW50ZihtLCAiJS0yNXNcdDB4JTA4bFggWyVjXVxuIiwKIAkJCQkgICAgIGFjcGlfZGVidWdfbGV2ZWxzW2ldLm5hbWUsCiAJCQkJICAgICBhY3BpX2RlYnVnX2xldmVsc1tpXS52YWx1ZSwKIAkJCQkgICAgIChhY3BpX2RiZ19sZXZlbCAmIGFjcGlfZGVidWdfbGV2ZWxzW2ldLgogCQkJCSAgICAgIHZhbHVlKSA/ICcqJyA6ICcgJyk7CiAJCX0KLQkJcCArPSBzcHJpbnRmKHAsICItLVxuZGVidWdfbGV2ZWwgPSAweCUwOFggKCogPSBlbmFibGVkKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiLS1cbmRlYnVnX2xldmVsID0gMHglMDhYICgqID0gZW5hYmxlZClcbiIsCiAJCQkgICAgIGFjcGlfZGJnX2xldmVsKTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcCArPSBzcHJpbnRmKHAsICJJbnZhbGlkIGRlYnVnIG9wdGlvblxuIik7Ci0JCWJyZWFrOwogCX0KLQotICAgICAgZW5kOgotCXNpemUgPSAocCAtIHBhZ2UpOwotCWlmIChzaXplIDw9IG9mZiArIGNvdW50KQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXNpemUgLT0gb2ZmOwotCWlmIChzaXplID4gY291bnQpCi0JCXNpemUgPSBjb3VudDsKLQlpZiAoc2l6ZSA8IDApCi0JCXNpemUgPSAwOwotCi0JcmV0dXJuIHNpemU7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWFjcGlfc3lzdGVtX3dyaXRlX2RlYnVnKHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBhY3BpX3N5c3RlbV9kZWJ1Z19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfc3lzdGVtX2RlYnVnX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfc3lzdGVtX2RlYnVnX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQljb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKLQkJCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgZGVidWdfc3RyaW5nWzEyXSA9IHsgJ1wwJyB9OwogCkBAIC0yNzksNyArMjYyLDcgQEAKIAogCWRlYnVnX3N0cmluZ1tjb3VudF0gPSAnXDAnOwogCi0Jc3dpdGNoICgodW5zaWduZWQgbG9uZylkYXRhKSB7CisJc3dpdGNoICgodW5zaWduZWQgbG9uZylQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGEpIHsKIAljYXNlIDA6CiAJCWFjcGlfZGJnX2xheWVyID0gc2ltcGxlX3N0cnRvdWwoZGVidWdfc3RyaW5nLCBOVUxMLCAwKTsKIAkJYnJlYWs7CkBAIC0yOTIsNiArMjc1LDE1IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfc3lzdGVtX2RlYnVnX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gYWNwaV9zeXN0ZW1fZGVidWdfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGFjcGlfc3lzdGVtX2RlYnVnX3Byb2Nfd3JpdGUsCit9OwogI2VuZGlmCiAKIGludCBfX2luaXQgYWNwaV9kZWJ1Z19pbml0KHZvaWQpCkBAIC0zMDMsMjQgKzI5NSwxOCBAQAogCiAJLyogJ2RlYnVnX2xheWVyJyBbUi9XXSAqLwogCW5hbWUgPSBBQ1BJX1NZU1RFTV9GSUxFX0RFQlVHX0xBWUVSOwotCWVudHJ5ID0KLQkgICAgY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkJICAgYWNwaV9yb290X2RpciwgYWNwaV9zeXN0ZW1fcmVhZF9kZWJ1ZywKLQkJCQkgICAodm9pZCAqKTApOwotCWlmIChlbnRyeSkKLQkJZW50cnktPndyaXRlX3Byb2MgPSBhY3BpX3N5c3RlbV93cml0ZV9kZWJ1ZzsKLQllbHNlCisJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQkgYWNwaV9yb290X2RpciwgJmFjcGlfc3lzdGVtX2RlYnVnX3Byb2NfZm9wcywKKwkJCQkgKHZvaWQgKikwKTsKKwlpZiAoIWVudHJ5KQogCQlnb3RvIEVycm9yOwogCiAJLyogJ2RlYnVnX2xldmVsJyBbUi9XXSAqLwogCW5hbWUgPSBBQ1BJX1NZU1RFTV9GSUxFX0RFQlVHX0xFVkVMOwotCWVudHJ5ID0KLQkgICAgY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkJICAgYWNwaV9yb290X2RpciwgYWNwaV9zeXN0ZW1fcmVhZF9kZWJ1ZywKLQkJCQkgICAodm9pZCAqKTEpOwotCWlmIChlbnRyeSkKLQkJZW50cnktPndyaXRlX3Byb2MgPSBhY3BpX3N5c3RlbV93cml0ZV9kZWJ1ZzsKLQllbHNlCisJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQkgYWNwaV9yb290X2RpciwgJmFjcGlfc3lzdGVtX2RlYnVnX3Byb2NfZm9wcywKKwkJCQkgKHZvaWQgKikxKTsKKwlpZiAoIWVudHJ5KQogCQlnb3RvIEVycm9yOwogCiAgICAgICBEb25lOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggZWZiOTU5ZC4uM2EyY2ZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RvY2suYworKysgYi9kcml2ZXJzL2FjcGkvZG9jay5jCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9ET0NLX0RSSVZFUl9ERVNDUklQVElPTiAiQUNQSSBEb2NrIFN0YXRpb24gRHJpdmVyIgogCiBBQ1BJX01PRFVMRV9OQU1FKCJkb2NrIik7CkBAIC0yMzEsMTggKzIzMywxNiBAQAogc3RhdGljIGludCBpc19iYXR0ZXJ5KGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKIAlpbnQgcmV0ID0gMTsKIAotCWlmICghQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcikpKQorCWlmICghQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pKSkKIAkJcmV0dXJuIDA7Ci0JaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwogCWlmICghKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpKQogCQlyZXQgPSAwOwogCWVsc2UKLQkJcmV0ID0gIXN0cmNtcCgiUE5QMEMwQSIsIGluZm8tPmhhcmR3YXJlX2lkLnZhbHVlKTsKKwkJcmV0ID0gIXN0cmNtcCgiUE5QMEMwQSIsIGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZyk7CiAKLQlrZnJlZShidWZmZXIucG9pbnRlcik7CisJa2ZyZWUoaW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCAzOTFmMzMxLi5mNzA3OTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtNDIsMTIgKzQyLDEyIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNkZWZpbmUgQUNQSV9FQ19DTEFTUwkJCSJlbWJlZGRlZF9jb250cm9sbGVyIgogI2RlZmluZSBBQ1BJX0VDX0RFVklDRV9OQU1FCQkiRW1iZWRkZWQgQ29udHJvbGxlciIKICNkZWZpbmUgQUNQSV9FQ19GSUxFX0lORk8JCSJpbmZvIgogCi0jdW5kZWYgUFJFRklYCiAjZGVmaW5lIFBSRUZJWAkJCQkiQUNQSTogRUM6ICIKIAogLyogRUMgc3RhdHVzIHJlZ2lzdGVyICovCkBAIC02OCwxNSArNjgsMTMgQEAKICNkZWZpbmUgQUNQSV9FQ19ERUxBWQkJNTAwCS8qIFdhaXQgNTAwbXMgbWF4LiBkdXJpbmcgRUMgb3BzICovCiAjZGVmaW5lIEFDUElfRUNfVURFTEFZX0dMSwkxMDAwCS8qIFdhaXQgMW1zIG1heC4gdG8gZ2V0IGdsb2JhbCBsb2NrICovCiAjZGVmaW5lIEFDUElfRUNfQ0RFTEFZCQkxMAkvKiBXYWl0IDEwdXMgYmVmb3JlIHBvbGxpbmcgRUMgKi8KKyNkZWZpbmUgQUNQSV9FQ19NU0lfVURFTEFZCTU1MAkvKiBXYWl0IDU1MHVzIGZvciBNU0kgRUMgKi8KIAogI2RlZmluZSBBQ1BJX0VDX1NUT1JNX1RIUkVTSE9MRCA4CS8qIG51bWJlciBvZiBmYWxzZSBpbnRlcnJ1cHRzCiAJCQkJCSAgIHBlciBvbmUgdHJhbnNhY3Rpb24gKi8KIAogZW51bSB7CiAJRUNfRkxBR1NfUVVFUllfUEVORElORywJCS8qIFF1ZXJ5IGlzIHBlbmRpbmcgKi8KLQlFQ19GTEFHU19HUEVfTU9ERSwJCS8qIEV4cGVjdCBHUEUgdG8gYmUgc2VudAotCQkJCQkgKiBmb3Igc3RhdHVzIGNoYW5nZSAqLwotCUVDX0ZMQUdTX05PX0dQRSwJCS8qIERvbid0IHVzZSBHUEUgbW9kZSAqLwogCUVDX0ZMQUdTX0dQRV9TVE9STSwJCS8qIEdQRSBzdG9ybSBkZXRlY3RlZCAqLwogCUVDX0ZMQUdTX0hBTkRMRVJTX0lOU1RBTExFRAkvKiBIYW5kbGVycyBmb3IgR1BFIGFuZAogCQkJCQkgKiBPcFJlZyBhcmUgaW5zdGFsbGVkICovCkBAIC0xNzAsNyArMTY4LDcgQEAKIAlhY3BpX2VjX3dyaXRlX2NtZChlYywgZWMtPmN1cnItPmNvbW1hbmQpOwogfQogCi1zdGF0aWMgdm9pZCBncGVfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBhZHZhbmNlX3RyYW5zYWN0aW9uKHN0cnVjdCBhY3BpX2VjICplYywgdTggc3RhdHVzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKQEAgLTIwMSwyOSArMTk5LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlYy0+Y3Vycl9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9lY193YWl0KHN0cnVjdCBhY3BpX2VjICplYykKLXsKLQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGVjLT53YWl0LCBlY190cmFuc2FjdGlvbl9kb25lKGVjKSwKLQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKEFDUElfRUNfREVMQVkpKSkKLQkJcmV0dXJuIDA7Ci0JLyogdHJ5IHJlc3RhcnQgY29tbWFuZCBpZiB3ZSBnZXQgYW55IGZhbHNlIGludGVycnVwdHMgKi8KLQlpZiAoZWMtPmN1cnItPmlycV9jb3VudCAmJgotCSAgICAoYWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfSUJGKSA9PSAwKSB7Ci0JCXByX2RlYnVnKFBSRUZJWCAiY29udHJvbGxlciByZXNldCwgcmVzdGFydCB0cmFuc2FjdGlvblxuIik7Ci0JCXN0YXJ0X3RyYW5zYWN0aW9uKGVjKTsKLQkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChlYy0+d2FpdCwgZWNfdHJhbnNhY3Rpb25fZG9uZShlYyksCi0JCQkJCW1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSkpKQotCQkJcmV0dXJuIDA7Ci0JfQotCS8qIG1pc3NpbmcgR1BFcywgc3dpdGNoIGJhY2sgdG8gcG9sbCBtb2RlICovCi0JaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJcHJfaW5mbyhQUkVGSVggIm1pc3NpbmcgY29uZmlybWF0aW9ucywgIgotCQkJCSJzd2l0Y2ggb2ZmIGludGVycnVwdCBtb2RlLlxuIik7Ci0Jc2V0X2JpdChFQ19GTEFHU19OT19HUEUsICZlYy0+ZmxhZ3MpOwotCWNsZWFyX2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncyk7Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIGFjcGlfZWNfZ3BlX3F1ZXJ5KHZvaWQgKmVjX2N4dCk7CiAKIHN0YXRpYyBpbnQgZWNfY2hlY2tfc2NpKHN0cnVjdCBhY3BpX2VjICplYywgdTggc3RhdGUpCkBAIC0yMzYsNDMgKzIxMSw1MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBlY19kZWxheSh2b2lkKQotewotCS8qIEVDIGluIE1TSSBub3RlYm9va3MgZG9uJ3QgdG9sZXJhdGUgZGVsYXlzIG90aGVyIHRoYW4gNTUwIHVzZWMgKi8KLQlpZiAoRUNfRkxBR1NfTVNJKQotCQl1ZGVsYXkoQUNQSV9FQ19ERUxBWSk7Ci0JZWxzZQotCQkvKiBVc2Ugc2hvcnRlc3Qgc2xlZXAgYXZhaWxhYmxlICovCi0JCW1zbGVlcCgxKTsKLX0KLQogc3RhdGljIGludCBlY19wb2xsKHN0cnVjdCBhY3BpX2VjICplYykKIHsKLQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSk7Ci0JdWRlbGF5KEFDUElfRUNfQ0RFTEFZKTsKLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVsYXkpKSB7Ci0JCWdwZV90cmFuc2FjdGlvbihlYywgYWNwaV9lY19yZWFkX3N0YXR1cyhlYykpOwotCQllY19kZWxheSgpOwotCQlpZiAoZWNfdHJhbnNhY3Rpb25fZG9uZShlYykpCi0JCQlyZXR1cm4gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXBlYXQgPSAyOyAvKiBudW1iZXIgb2YgY29tbWFuZCByZXN0YXJ0cyAqLworCXdoaWxlIChyZXBlYXQtLSkgeworCQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gamlmZmllcyArCisJCQltc2Vjc190b19qaWZmaWVzKEFDUElfRUNfREVMQVkpOworCQlkbyB7CisJCQkvKiBkb24ndCBzbGVlcCB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgKi8KKwkJCWlmIChFQ19GTEFHU19NU0kgfHwgaXJxc19kaXNhYmxlZCgpKSB7CisJCQkJdWRlbGF5KEFDUElfRUNfTVNJX1VERUxBWSk7CisJCQkJaWYgKGVjX3RyYW5zYWN0aW9uX2RvbmUoZWMpKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChlYy0+d2FpdCwKKwkJCQkJCWVjX3RyYW5zYWN0aW9uX2RvbmUoZWMpLAorCQkJCQkJbXNlY3NfdG9famlmZmllcygxKSkpCisJCQkJCXJldHVybiAwOworCQkJfQorCQkJYWR2YW5jZV90cmFuc2FjdGlvbihlYywgYWNwaV9lY19yZWFkX3N0YXR1cyhlYykpOworCQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWxheSkpOworCQlpZiAoIWVjLT5jdXJyLT5pcnFfY291bnQgfHwKKwkJICAgIChhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19JQkYpKQorCQkJYnJlYWs7CisJCS8qIHRyeSByZXN0YXJ0IGNvbW1hbmQgaWYgd2UgZ2V0IGFueSBmYWxzZSBpbnRlcnJ1cHRzICovCisJCXByX2RlYnVnKFBSRUZJWCAiY29udHJvbGxlciByZXNldCwgcmVzdGFydCB0cmFuc2FjdGlvblxuIik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZlYy0+Y3Vycl9sb2NrLCBmbGFncyk7CisJCXN0YXJ0X3RyYW5zYWN0aW9uKGVjKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWMtPmN1cnJfbG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gLUVUSU1FOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoc3RydWN0IGFjcGlfZWMgKmVjLAotCQkJCQlzdHJ1Y3QgdHJhbnNhY3Rpb24gKnQsCi0JCQkJCWludCBmb3JjZV9wb2xsKQorCQkJCQlzdHJ1Y3QgdHJhbnNhY3Rpb24gKnQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IHJldCA9IDA7CiAJcHJfZGVidWcoUFJFRklYICJ0cmFuc2FjdGlvbiBzdGFydFxuIik7CiAJLyogZGlzYWJsZSBHUEUgZHVyaW5nIHRyYW5zYWN0aW9uIGlmIHN0b3JtIGlzIGRldGVjdGVkICovCiAJaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9TVE9STSwgJmVjLT5mbGFncykpIHsKLQkJY2xlYXJfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKTsKIAkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKIAl9CiAJaWYgKEVDX0ZMQUdTX01TSSkKLQkJdWRlbGF5KEFDUElfRUNfREVMQVkpOworCQl1ZGVsYXkoQUNQSV9FQ19NU0lfVURFTEFZKTsKIAkvKiBzdGFydCB0cmFuc2FjdGlvbiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZlYy0+Y3Vycl9sb2NrLCB0bXApOwogCS8qIGZvbGxvd2luZyB0d28gYWN0aW9ucyBzaG91bGQgYmUga2VwdCBhdG9taWMgKi8KQEAgLTI4MSwxMSArMjY0LDcgQEAKIAlpZiAoZWMtPmN1cnItPmNvbW1hbmQgPT0gQUNQSV9FQ19DT01NQU5EX1FVRVJZKQogCQljbGVhcl9iaXQoRUNfRkxBR1NfUVVFUllfUEVORElORywgJmVjLT5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWMtPmN1cnJfbG9jaywgdG1wKTsKLQkvKiBpZiB3ZSBzZWxlY3RlZCBwb2xsIG1vZGUgb3IgZmFpbGVkIGluIEdQRS1tb2RlIGRvIGEgcG9sbCBsb29wICovCi0JaWYgKGZvcmNlX3BvbGwgfHwKLQkgICAgIXRlc3RfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKSB8fAotCSAgICBhY3BpX2VjX3dhaXQoZWMpKQotCQlyZXQgPSBlY19wb2xsKGVjKTsKKwlyZXQgPSBlY19wb2xsKGVjKTsKIAlwcl9kZWJ1ZyhQUkVGSVggInRyYW5zYWN0aW9uIGVuZFxuIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIHRtcCk7CiAJZWMtPmN1cnIgPSBOVUxMOwpAQCAtMjk1LDggKzI3NCw3IEBACiAJCWVjX2NoZWNrX3NjaShlYywgYWNwaV9lY19yZWFkX3N0YXR1cyhlYykpOwogCQkvKiBpdCBpcyBzYWZlIHRvIGVuYWJsZSBHUEUgb3V0c2lkZSBvZiB0cmFuc2FjdGlvbiAqLwogCQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7Ci0JfSBlbHNlIGlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncykgJiYKLQkJICAgdC0+aXJxX2NvdW50ID4gQUNQSV9FQ19TVE9STV9USFJFU0hPTEQpIHsKKwl9IGVsc2UgaWYgKHQtPmlycV9jb3VudCA+IEFDUElfRUNfU1RPUk1fVEhSRVNIT0xEKSB7CiAJCXByX2luZm8oUFJFRklYICJHUEUgc3Rvcm0gZGV0ZWN0ZWQsICIKIAkJCSJ0cmFuc2FjdGlvbnMgd2lsbCB1c2UgcG9sbGluZyBtb2RlXG4iKTsKIAkJc2V0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpOwpAQCAtMzE0LDE2ICsyOTIsMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGRlbGF5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSk7CiAJLyogaW50ZXJydXB0IHdhaXQgbWFudWFsbHkgaWYgR1BFIG1vZGUgaXMgbm90IGFjdGl2ZSAqLwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKSA/Ci0JCW1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSkgOiBtc2Vjc190b19qaWZmaWVzKDEpOwogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWxheSkpCi0JCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoZWMtPndhaXQsIGVjX2NoZWNrX2liZjAoZWMpLCB0aW1lb3V0KSkKKwkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChlYy0+d2FpdCwgZWNfY2hlY2tfaWJmMChlYyksCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMSkpKQogCQkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FVElNRTsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX3RyYW5zYWN0aW9uKHN0cnVjdCBhY3BpX2VjICplYywgc3RydWN0IHRyYW5zYWN0aW9uICp0LAotCQkJICAgICAgIGludCBmb3JjZV9wb2xsKQorc3RhdGljIGludCBhY3BpX2VjX3RyYW5zYWN0aW9uKHN0cnVjdCBhY3BpX2VjICplYywgc3RydWN0IHRyYW5zYWN0aW9uICp0KQogewogCWludCBzdGF0dXM7CiAJdTMyIGdsazsKQEAgLTM0NSw3ICszMjEsNyBAQAogCQlzdGF0dXMgPSAtRVRJTUU7CiAJCWdvdG8gZW5kOwogCX0KLQlzdGF0dXMgPSBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKGVjLCB0LCBmb3JjZV9wb2xsKTsKKwlzdGF0dXMgPSBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKGVjLCB0KTsKIGVuZDoKIAlpZiAoZWMtPmdsb2JhbF9sb2NrKQogCQlhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soZ2xrKTsKQEAgLTM1NCwxMCArMzMwLDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKgotICogTm90ZTogc2Ftc3VuZyBudjUwMDAgZG9lc24ndCB3b3JrIHdpdGggZWMgYnVyc3QgbW9kZS4KLSAqIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD00OTgwCi0gKi8KIHN0YXRpYyBpbnQgYWNwaV9lY19idXJzdF9lbmFibGUoc3RydWN0IGFjcGlfZWMgKmVjKQogewogCXU4IGQ7CkBAIC0zNjUsNyArMzM3LDcgQEAKIAkJCQkud2RhdGEgPSBOVUxMLCAucmRhdGEgPSAmZCwKIAkJCQkud2xlbiA9IDAsIC5ybGVuID0gMX07CiAKLQlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQsIDApOworCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCk7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19idXJzdF9kaXNhYmxlKHN0cnVjdCBhY3BpX2VjICplYykKQEAgLTM3NSw3ICszNDcsNyBAQAogCQkJCS53bGVuID0gMCwgLnJsZW4gPSAwfTsKIAogCXJldHVybiAoYWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfQlVSU1QpID8KLQkJCQlhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCwgMCkgOiAwOworCQkJCWFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0KSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19yZWFkKHN0cnVjdCBhY3BpX2VjICplYywgdTggYWRkcmVzcywgdTggKiBkYXRhKQpAQCAtMzg2LDcgKzM1OCw3IEBACiAJCQkJLndkYXRhID0gJmFkZHJlc3MsIC5yZGF0YSA9ICZkLAogCQkJCS53bGVuID0gMSwgLnJsZW4gPSAxfTsKIAotCXJlc3VsdCA9IGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0LCAwKTsKKwlyZXN1bHQgPSBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCk7CiAJKmRhdGEgPSBkOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0zOTgsNyArMzcwLDcgQEAKIAkJCQkud2RhdGEgPSB3ZGF0YSwgLnJkYXRhID0gTlVMTCwKIAkJCQkud2xlbiA9IDIsIC5ybGVuID0gMH07CiAKLQlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQsIDApOworCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCk7CiB9CiAKIC8qCkBAIC00NjYsNyArNDM4LDcgQEAKIAlpZiAoIWZpcnN0X2VjKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGZpcnN0X2VjLCAmdCwgZm9yY2VfcG9sbCk7CisJcmV0dXJuIGFjcGlfZWNfdHJhbnNhY3Rpb24oZmlyc3RfZWMsICZ0KTsKIH0KIAogRVhQT1JUX1NZTUJPTChlY190cmFuc2FjdGlvbik7CkBAIC00ODcsNyArNDU5LDcgQEAKIAkgKiBiaXQgdG8gYmUgY2xlYXJlZCAoYW5kIHRodXMgY2xlYXJpbmcgdGhlIGludGVycnVwdCBzb3VyY2UpLgogCSAqLwogCi0JcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQsIDApOworCXJlc3VsdCA9IGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0KTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCkBAIC01NzAsMjggKzU0MiwxMCBAQAogCXByX2RlYnVnKFBSRUZJWCAifn5+PiBpbnRlcnJ1cHRcbiIpOwogCXN0YXR1cyA9IGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpOwogCi0JaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKSkgewotCQlncGVfdHJhbnNhY3Rpb24oZWMsIHN0YXR1cyk7Ci0JCWlmIChlY190cmFuc2FjdGlvbl9kb25lKGVjKSAmJgotCQkgICAgKHN0YXR1cyAmIEFDUElfRUNfRkxBR19JQkYpID09IDApCi0JCQl3YWtlX3VwKCZlYy0+d2FpdCk7Ci0JfQotCisJYWR2YW5jZV90cmFuc2FjdGlvbihlYywgc3RhdHVzKTsKKwlpZiAoZWNfdHJhbnNhY3Rpb25fZG9uZShlYykgJiYgKHN0YXR1cyAmIEFDUElfRUNfRkxBR19JQkYpID09IDApCisJCXdha2VfdXAoJmVjLT53YWl0KTsKIAllY19jaGVja19zY2koZWMsIHN0YXR1cyk7Ci0JaWYgKCF0ZXN0X2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KEVDX0ZMQUdTX05PX0dQRSwgJmVjLT5mbGFncykpIHsKLQkJLyogdGhpcyBpcyBub24tcXVlcnksIG11c3QgYmUgY29uZmlybWF0aW9uICovCi0JCWlmICghdGVzdF9iaXQoRUNfRkxBR1NfR1BFX1NUT1JNLCAmZWMtPmZsYWdzKSkgewotCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJCQlwcl9pbmZvKFBSRUZJWCAibm9uLXF1ZXJ5IGludGVycnVwdCByZWNlaXZlZCwiCi0JCQkJCSIgc3dpdGNoaW5nIHRvIGludGVycnVwdCBtb2RlXG4iKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGh1c2gsIFNUT1JNIHN3aXRjaGVzIHRoZSBtb2RlIGV2ZXJ5IHRyYW5zYWN0aW9uICovCi0JCQlwcl9kZWJ1ZyhQUkVGSVggIm5vbi1xdWVyeSBpbnRlcnJ1cHQgcmVjZWl2ZWQsIgotCQkJCSIgc3dpdGNoaW5nIHRvIGludGVycnVwdCBtb2RlXG4iKTsKLQkJfQotCQlzZXRfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKTsKLQl9CiAJcmV0dXJuIEFDUElfSU5URVJSVVBUX0hBTkRMRUQ7CiB9CiAKQEAgLTYxNyw3ICs1NzEsOCBAQAogCWlmIChiaXRzICE9IDggJiYgYWNwaV9zdHJpY3QpCiAJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOwogCi0JYWNwaV9lY19idXJzdF9lbmFibGUoZWMpOworCWlmIChFQ19GTEFHU19NU0kpCisJCWFjcGlfZWNfYnVyc3RfZW5hYmxlKGVjKTsKIAogCWlmIChmdW5jdGlvbiA9PSBBQ1BJX1JFQUQpIHsKIAkJcmVzdWx0ID0gYWNwaV9lY19yZWFkKGVjLCBhZGRyZXNzLCAmdGVtcCk7CkBAIC02MzgsNyArNTkzLDggQEAKIAkJfQogCX0KIAotCWFjcGlfZWNfYnVyc3RfZGlzYWJsZShlYyk7CisJaWYgKEVDX0ZMQUdTX01TSSkKKwkJYWNwaV9lY19idXJzdF9kaXNhYmxlKGVjKTsKIAogCXN3aXRjaCAocmVzdWx0KSB7CiAJY2FzZSAtRUlOVkFMOgpAQCAtNzg4LDEwNiArNzQ0LDYgQEAKIAlyZXR1cm4gQUVfQ1RSTF9URVJNSU5BVEU7CiB9CiAKLXN0YXRpYyB2b2lkIGVjX3JlbW92ZV9oYW5kbGVycyhzdHJ1Y3QgYWNwaV9lYyAqZWMpCi17Ci0JaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKLQkJCQlBQ1BJX0FEUl9TUEFDRV9FQywgJmFjcGlfZWNfc3BhY2VfaGFuZGxlcikpKQotCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIHNwYWNlIGhhbmRsZXJcbiIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZSwKLQkJCQkmYWNwaV9lY19ncGVfaGFuZGxlcikpKQotCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIGdwZSBoYW5kbGVyXG4iKTsKLQljbGVhcl9iaXQoRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVELCAmZWMtPmZsYWdzKTsKLX0KLQotc3RhdGljIGludCBhY3BpX2VjX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBOVUxMOwotCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOwotCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfRUNfREVWSUNFX05BTUUpOwotCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX0VDX0NMQVNTKTsKLQotCS8qIENoZWNrIGZvciBib290IEVDICovCi0JaWYgKGJvb3RfZWMgJiYKLQkgICAgKGJvb3RfZWMtPmhhbmRsZSA9PSBkZXZpY2UtPmhhbmRsZSB8fAotCSAgICAgYm9vdF9lYy0+aGFuZGxlID09IEFDUElfUk9PVF9PQkpFQ1QpKSB7Ci0JCWVjID0gYm9vdF9lYzsKLQkJYm9vdF9lYyA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJZWMgPSBtYWtlX2FjcGlfZWMoKTsKLQkJaWYgKCFlYykKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQlpZiAoZWNfcGFyc2VfZGV2aWNlKGRldmljZS0+aGFuZGxlLCAwLCBlYywgTlVMTCkgIT0KLQkJQUVfQ1RSTF9URVJNSU5BVEUpIHsKLQkJCWtmcmVlKGVjKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWVjLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKLQotCS8qIEZpbmQgYW5kIHJlZ2lzdGVyIGFsbCBxdWVyeSBtZXRob2RzICovCi0JYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfTUVUSE9ELCBlYy0+aGFuZGxlLCAxLAotCQkJICAgIGFjcGlfZWNfcmVnaXN0ZXJfcXVlcnlfbWV0aG9kcywgZWMsIE5VTEwpOwotCi0JaWYgKCFmaXJzdF9lYykKLQkJZmlyc3RfZWMgPSBlYzsKLQlkZXZpY2UtPmRyaXZlcl9kYXRhID0gZWM7Ci0JYWNwaV9lY19hZGRfZnMoZGV2aWNlKTsKLQlwcl9pbmZvKFBSRUZJWCAiR1BFID0gMHglbHgsIEkvTzogY29tbWFuZC9zdGF0dXMgPSAweCVseCwgZGF0YSA9IDB4JWx4XG4iLAotCQkJICBlYy0+Z3BlLCBlYy0+Y29tbWFuZF9hZGRyLCBlYy0+ZGF0YV9hZGRyKTsKLQlwcl9pbmZvKFBSRUZJWCAiZHJpdmVyIHN0YXJ0ZWQgaW4gJXMgbW9kZVxuIiwKLQkJKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKSk/ImludGVycnVwdCI6InBvbGwiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhY3BpX2VjX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGFjcGlfZWMgKmVjOwotCXN0cnVjdCBhY3BpX2VjX3F1ZXJ5X2hhbmRsZXIgKmhhbmRsZXIsICp0bXA7Ci0KLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQltdXRleF9sb2NrKCZlYy0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhbmRsZXIsIHRtcCwgJmVjLT5saXN0LCBub2RlKSB7Ci0JCWxpc3RfZGVsKCZoYW5kbGVyLT5ub2RlKTsKLQkJa2ZyZWUoaGFuZGxlcik7Ci0JfQotCW11dGV4X3VubG9jaygmZWMtPmxvY2spOwotCWFjcGlfZWNfcmVtb3ZlX2ZzKGRldmljZSk7Ci0JZGV2aWNlLT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JaWYgKGVjID09IGZpcnN0X2VjKQotCQlmaXJzdF9lYyA9IE5VTEw7Ci0Ja2ZyZWUoZWMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWVjX3BhcnNlX2lvX3BvcnRzKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBjb250ZXh0OwotCi0JaWYgKHJlc291cmNlLT50eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9JTykKLQkJcmV0dXJuIEFFX09LOwotCi0JLyoKLQkgKiBUaGUgZmlyc3QgYWRkcmVzcyByZWdpb24gcmV0dXJuZWQgaXMgdGhlIGRhdGEgcG9ydCwgYW5kCi0JICogdGhlIHNlY29uZCBhZGRyZXNzIHJlZ2lvbiByZXR1cm5lZCBpcyB0aGUgc3RhdHVzL2NvbW1hbmQKLQkgKiBwb3J0LgotCSAqLwotCWlmIChlYy0+ZGF0YV9hZGRyID09IDApCi0JCWVjLT5kYXRhX2FkZHIgPSByZXNvdXJjZS0+ZGF0YS5pby5taW5pbXVtOwotCWVsc2UgaWYgKGVjLT5jb21tYW5kX2FkZHIgPT0gMCkKLQkJZWMtPmNvbW1hbmRfYWRkciA9IHJlc291cmNlLT5kYXRhLmlvLm1pbmltdW07Ci0JZWxzZQotCQlyZXR1cm4gQUVfQ1RSTF9URVJNSU5BVEU7Ci0KLQlyZXR1cm4gQUVfT0s7Ci19Ci0KIHN0YXRpYyBpbnQgZWNfaW5zdGFsbF9oYW5kbGVycyhzdHJ1Y3QgYWNwaV9lYyAqZWMpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtOTI0LDE4ICs3ODAsNTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHZvaWQgZWNfcmVtb3ZlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKIHsKLQlzdHJ1Y3QgYWNwaV9lYyAqZWM7Ci0JaW50IHJldCA9IDA7CisJaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKKwkJCQlBQ1BJX0FEUl9TUEFDRV9FQywgJmFjcGlfZWNfc3BhY2VfaGFuZGxlcikpKQorCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIHNwYWNlIGhhbmRsZXJcbiIpOworCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZSwKKwkJCQkmYWNwaV9lY19ncGVfaGFuZGxlcikpKQorCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIGdwZSBoYW5kbGVyXG4iKTsKKwljbGVhcl9iaXQoRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVELCAmZWMtPmZsYWdzKTsKK30KIAotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKK3N0YXRpYyBpbnQgYWNwaV9lY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGFjcGlfZWMgKmVjID0gTlVMTDsKKwlpbnQgcmV0OwogCi0JZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9FQ19ERVZJQ0VfTkFNRSk7CisJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfRUNfQ0xBU1MpOwogCi0JaWYgKCFlYykKLQkJcmV0dXJuIC1FSU5WQUw7CisJLyogQ2hlY2sgZm9yIGJvb3QgRUMgKi8KKwlpZiAoYm9vdF9lYyAmJgorCSAgICAoYm9vdF9lYy0+aGFuZGxlID09IGRldmljZS0+aGFuZGxlIHx8CisJICAgICBib290X2VjLT5oYW5kbGUgPT0gQUNQSV9ST09UX09CSkVDVCkpIHsKKwkJZWMgPSBib290X2VjOworCQlib290X2VjID0gTlVMTDsKKwl9IGVsc2UgeworCQllYyA9IG1ha2VfYWNwaV9lYygpOworCQlpZiAoIWVjKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmIChlY19wYXJzZV9kZXZpY2UoZGV2aWNlLT5oYW5kbGUsIDAsIGVjLCBOVUxMKSAhPQorCQlBRV9DVFJMX1RFUk1JTkFURSkgeworCQkJa2ZyZWUoZWMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZWMtPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOworCisJLyogRmluZCBhbmQgcmVnaXN0ZXIgYWxsIHF1ZXJ5IG1ldGhvZHMgKi8KKwlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9NRVRIT0QsIGVjLT5oYW5kbGUsIDEsCisJCQkgICAgYWNwaV9lY19yZWdpc3Rlcl9xdWVyeV9tZXRob2RzLCBlYywgTlVMTCk7CisKKwlpZiAoIWZpcnN0X2VjKQorCQlmaXJzdF9lYyA9IGVjOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBlYzsKKwlhY3BpX2VjX2FkZF9mcyhkZXZpY2UpOworCXByX2luZm8oUFJFRklYICJHUEUgPSAweCVseCwgSS9POiBjb21tYW5kL3N0YXR1cyA9IDB4JWx4LCBkYXRhID0gMHglbHhcbiIsCisJCQkgIGVjLT5ncGUsIGVjLT5jb21tYW5kX2FkZHIsIGVjLT5kYXRhX2FkZHIpOwogCiAJcmV0ID0gZWNfaW5zdGFsbF9oYW5kbGVycyhlYyk7CiAKQEAgLTk0NCwxOSArODM2LDUzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX3N0b3Aoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQorc3RhdGljIGludCBhY3BpX2VjX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjOworCXN0cnVjdCBhY3BpX2VjX3F1ZXJ5X2hhbmRsZXIgKmhhbmRsZXIsICp0bXA7CisKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JaWYgKCFlYykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWNfcmVtb3ZlX2hhbmRsZXJzKGVjKTsKIAorCWVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCWVjX3JlbW92ZV9oYW5kbGVycyhlYyk7CisJbXV0ZXhfbG9jaygmZWMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShoYW5kbGVyLCB0bXAsICZlYy0+bGlzdCwgbm9kZSkgeworCQlsaXN0X2RlbCgmaGFuZGxlci0+bm9kZSk7CisJCWtmcmVlKGhhbmRsZXIpOworCX0KKwltdXRleF91bmxvY2soJmVjLT5sb2NrKTsKKwlhY3BpX2VjX3JlbW92ZV9mcyhkZXZpY2UpOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWlmIChlYyA9PSBmaXJzdF9lYykKKwkJZmlyc3RfZWMgPSBOVUxMOworCWtmcmVlKGVjKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGFjcGlfc3RhdHVzCitlY19wYXJzZV9pb19wb3J0cyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfZWMgKmVjID0gY29udGV4dDsKKworCWlmIChyZXNvdXJjZS0+dHlwZSAhPSBBQ1BJX1JFU09VUkNFX1RZUEVfSU8pCisJCXJldHVybiBBRV9PSzsKKworCS8qCisJICogVGhlIGZpcnN0IGFkZHJlc3MgcmVnaW9uIHJldHVybmVkIGlzIHRoZSBkYXRhIHBvcnQsIGFuZAorCSAqIHRoZSBzZWNvbmQgYWRkcmVzcyByZWdpb24gcmV0dXJuZWQgaXMgdGhlIHN0YXR1cy9jb21tYW5kCisJICogcG9ydC4KKwkgKi8KKwlpZiAoZWMtPmRhdGFfYWRkciA9PSAwKQorCQllYy0+ZGF0YV9hZGRyID0gcmVzb3VyY2UtPmRhdGEuaW8ubWluaW11bTsKKwllbHNlIGlmIChlYy0+Y29tbWFuZF9hZGRyID09IDApCisJCWVjLT5jb21tYW5kX2FkZHIgPSByZXNvdXJjZS0+ZGF0YS5pby5taW5pbXVtOworCWVsc2UKKwkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOworCisJcmV0dXJuIEFFX09LOworfQorCiBpbnQgX19pbml0IGFjcGlfYm9vdF9lY19lbmFibGUodm9pZCkKIHsKIAlpZiAoIWJvb3RfZWMgfHwgdGVzdF9iaXQoRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVELCAmYm9vdF9lYy0+ZmxhZ3MpKQpAQCAtMTA1NCw4ICs5ODAsNiBAQAogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAkvKiBTdG9wIHVzaW5nIEdQRSAqLwotCXNldF9iaXQoRUNfRkxBR1NfTk9fR1BFLCAmZWMtPmZsYWdzKTsKLQljbGVhcl9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpOwogCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDY0LDggKzk4OCw2IEBACiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCS8qIEVuYWJsZSB1c2Ugb2YgR1BFIGJhY2sgKi8KLQljbGVhcl9iaXQoRUNfRkxBR1NfTk9fR1BFLCAmZWMtPmZsYWdzKTsKLQlzZXRfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKTsKIAlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDc3LDggKzk5OSw2IEBACiAJLm9wcyA9IHsKIAkJLmFkZCA9IGFjcGlfZWNfYWRkLAogCQkucmVtb3ZlID0gYWNwaV9lY19yZW1vdmUsCi0JCS5zdGFydCA9IGFjcGlfZWNfc3RhcnQsCi0JCS5zdG9wID0gYWNwaV9lY19zdG9wLAogCQkuc3VzcGVuZCA9IGFjcGlfZWNfc3VzcGVuZCwKIAkJLnJlc3VtZSA9IGFjcGlfZWNfcmVzdW1lLAogCQl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50LmMgYi9kcml2ZXJzL2FjcGkvZXZlbnQuYwppbmRleCBhZWI3ZTVmLi5jNTExMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnQuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnQuYwpAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1NZU1RFTV9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoImV2ZW50Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9mYW4uYyBiL2RyaXZlcnMvYWNwaS9mYW4uYwppbmRleCA1MzY5OGVhLi5mNDE5ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZmFuLmMKKysrIGIvZHJpdmVycy9hY3BpL2Zhbi5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9GQU5fQ0xBU1MJCQkiZmFuIgogI2RlZmluZSBBQ1BJX0ZBTl9GSUxFX1NUQVRFCQkic3RhdGUiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IGE4YTVjMjkuLmM2NjQ1ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogI2RlZmluZSBBQ1BJX0dMVUVfREVCVUcJMAogI2lmIEFDUElfR0xVRV9ERUJVRwogI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKFBSRUZJWCB4KQpAQCAtOTMsMTUgKzk1LDEzIEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RydWN0IGFjcGlfZmluZF9jaGlsZCAqZmluZCA9IGNvbnRleHQ7CiAKLQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7CiAJCWlmIChpbmZvLT5hZGRyZXNzID09IGZpbmQtPmFkZHJlc3MpCiAJCQlmaW5kLT5oYW5kbGUgPSBoYW5kbGU7Ci0JCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJa2ZyZWUoaW5mbyk7CiAJfQogCXJldHVybiBBRV9PSzsKIH0KQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAvKiBMaW5rIEFDUEkgZGV2aWNlcyB3aXRoIHBoeXNpY2FsIGRldmljZXMgKi8KIHN0YXRpYyB2b2lkIGFjcGlfZ2x1ZV9kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLAotCQkJCSAgIHUzMiBmdW5jdGlvbiwgdm9pZCAqY29udGV4dCkKKwkJCQkgICB2b2lkICpjb250ZXh0KQogewogCS8qIHdlIHByb3ZpZGUgYW4gZW1wdHkgaGFuZGxlciAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmggYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAppbmRleCAxMWE2OWI1Li4wNzRjZjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaApAQCAtMSw0ICsxLDI0IEBACi0vKiBGb3IgdXNlIGJ5IExpbnV4L0FDUEkgaW5mcmFzdHJ1Y3R1cmUsIG5vdCBkcml2ZXJzICovCisvKgorICogYWNwaS9pbnRlcm5hbC5oCisgKiBGb3IgdXNlIGJ5IExpbnV4L0FDUEkgaW5mcmFzdHJ1Y3R1cmUsIG5vdCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCiAKIGludCBpbml0X2FjcGlfZGV2aWNlX25vdGlmeSh2b2lkKTsKIGludCBhY3BpX3NjYW5faW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hLmMgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCmluZGV4IGQ0NDBjY2QuLjIwMmRkMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9udW1hLmMKKysrIGIvZHJpdmVycy9hY3BpL251bWEuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9OVU1BCTB4ODAwMDAwMDAKICNkZWZpbmUgX0NPTVBPTkVOVAlBQ1BJX05VTUEKIEFDUElfTU9EVUxFX05BTUUoIm51bWEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCA1NjkxZjE2Li41NjA3MWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC01OCw2ICs1OCw3IEBACiAJYWNwaV9vc2RfZXhlY19jYWxsYmFjayBmdW5jdGlvbjsKIAl2b2lkICpjb250ZXh0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCWludCB3YWl0OwogfTsKIAogI2lmZGVmIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUCkBAIC04OCw2ICs4OSw3IEBACiAJY2hhciBuYW1lWzVdOyAgIC8qIG9ubHkgY2FuIGhhdmUgYSBsZW5ndGggb2YgNCBjaGFycywgbWFrZSB1c2Ugb2YgdGhpcwogCQkJICAgb25lIGluc3RlYWQgb2YgcmVzLT5uYW1lLCBubyBuZWVkIHRvIGthbGxvYyB0aGVuICovCiAJc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZV9saXN0OworCWludCBjb3VudDsKIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQocmVzb3VyY2VfbGlzdF9oZWFkKTsKQEAgLTY5NywzMSArNjk5LDEyIEBACiBzdGF0aWMgdm9pZCBhY3BpX29zX2V4ZWN1dGVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBhY3BpX29zX2RwYyAqZHBjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhY3BpX29zX2RwYywgd29yayk7Ci0JaWYgKCFkcGMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCAoTlVMTCkgY29udGV4dFxuIik7Ci0JCXJldHVybjsKLQl9CisKKwlpZiAoZHBjLT53YWl0KQorCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwogCiAJZHBjLT5mdW5jdGlvbihkcGMtPmNvbnRleHQpOwogCWtmcmVlKGRwYyk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfb3NfZXhlY3V0ZV9ocF9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGFjcGlfb3NfZHBjICpkcGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFjcGlfb3NfZHBjLCB3b3JrKTsKLQlpZiAoIWRwYykgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIChOVUxMKSBjb250ZXh0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7Ci0KLQlkcGMtPmZ1bmN0aW9uKGRwYy0+Y29udGV4dCk7Ci0Ja2ZyZWUoZHBjKTsKLQotCXJldHVybjsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc0NSwxNSArNzI4LDExIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfb3NfZHBjICpkcGM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnF1ZXVlOwotCXdvcmtfZnVuY190IGZ1bmM7CiAJaW50IHJldDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCiAJCQkgICJTY2hlZHVsaW5nIGZ1bmN0aW9uIFslcCglcCldIGZvciBkZWZlcnJlZCBleGVjdXRpb24uXG4iLAogCQkJICBmdW5jdGlvbiwgY29udGV4dCkpOwogCi0JaWYgKCFmdW5jdGlvbikKLQkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7Ci0KIAkvKgogCSAqIEFsbG9jYXRlL2luaXRpYWxpemUgRFBDIHN0cnVjdHVyZS4gIE5vdGUgdGhhdCB0aGlzIG1lbW9yeSB3aWxsIGJlCiAJICogZnJlZWQgYnkgdGhlIGNhbGxlZS4gIFRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgd29ya19zdHJ1Y3QgbGlzdCAgaW4gYQpAQCAtNzc4LDggKzc1Nyw4IEBACiAJICovCiAJcXVldWUgPSBocCA/IGthY3BpX2hvdHBsdWdfd3EgOgogCQkodHlwZSA9PSBPU0xfTk9USUZZX0hBTkRMRVIgPyBrYWNwaV9ub3RpZnlfd3EgOiBrYWNwaWRfd3EpOwotCWZ1bmMgPSBocCA/IGFjcGlfb3NfZXhlY3V0ZV9ocF9kZWZlcnJlZCA6IGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZDsKLQlJTklUX1dPUksoJmRwYy0+d29yaywgZnVuYyk7CisJZHBjLT53YWl0ID0gaHAgPyAxIDogMDsKKwlJTklUX1dPUksoJmRwYy0+d29yaywgYWNwaV9vc19leGVjdXRlX2RlZmVycmVkKTsKIAlyZXQgPSBxdWV1ZV93b3JrKHF1ZXVlLCAmZHBjLT53b3JrKTsKIAogCWlmICghcmV0KSB7CkBAIC0xMzU4LDYgKzEzMzcsODkgQEAKIAlyZXR1cm4gQUVfU1VQUE9SVDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYWNwaV9yZXNfbGlzdF9hZGQoc3RydWN0IGFjcGlfcmVzX2xpc3QgKnJlcykKK3sKKwlzdHJ1Y3QgYWNwaV9yZXNfbGlzdCAqcmVzX2xpc3RfZWxlbTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzX2xpc3RfZWxlbSwgJnJlc291cmNlX2xpc3RfaGVhZCwKKwkJCSAgICByZXNvdXJjZV9saXN0KSB7CisKKwkJaWYgKHJlcy0+cmVzb3VyY2VfdHlwZSA9PSByZXNfbGlzdF9lbGVtLT5yZXNvdXJjZV90eXBlICYmCisJCSAgICByZXMtPnN0YXJ0ID09IHJlc19saXN0X2VsZW0tPnN0YXJ0ICYmCisJCSAgICByZXMtPmVuZCA9PSByZXNfbGlzdF9lbGVtLT5lbmQpIHsKKworCQkJLyoKKwkJCSAqIFRoZSBSZWdpb24oYWRkcixsZW4pIGFscmVhZHkgZXhpc3QgaW4gdGhlIGxpc3QsCisJCQkgKiBqdXN0IGluY3JlYXNlIHRoZSBjb3VudAorCQkJICovCisKKwkJCXJlc19saXN0X2VsZW0tPmNvdW50Kys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJlcy0+Y291bnQgPSAxOworCWxpc3RfYWRkKCZyZXMtPnJlc291cmNlX2xpc3QsICZyZXNvdXJjZV9saXN0X2hlYWQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yZXNfbGlzdF9kZWwoc3RydWN0IGFjcGlfcmVzX2xpc3QgKnJlcykKK3sKKwlzdHJ1Y3QgYWNwaV9yZXNfbGlzdCAqcmVzX2xpc3RfZWxlbTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzX2xpc3RfZWxlbSwgJnJlc291cmNlX2xpc3RfaGVhZCwKKwkJCSAgICByZXNvdXJjZV9saXN0KSB7CisKKwkJaWYgKHJlcy0+cmVzb3VyY2VfdHlwZSA9PSByZXNfbGlzdF9lbGVtLT5yZXNvdXJjZV90eXBlICYmCisJCSAgICByZXMtPnN0YXJ0ID09IHJlc19saXN0X2VsZW0tPnN0YXJ0ICYmCisJCSAgICByZXMtPmVuZCA9PSByZXNfbGlzdF9lbGVtLT5lbmQpIHsKKworCQkJLyoKKwkJCSAqIElmIHRoZSByZXMgY291bnQgaXMgZGVjcmVhc2VkIHRvIDAsCisJCQkgKiByZW1vdmUgYW5kIGZyZWUgaXQKKwkJCSAqLworCisJCQlpZiAoLS1yZXNfbGlzdF9lbGVtLT5jb3VudCA9PSAwKSB7CisJCQkJbGlzdF9kZWwoJnJlc19saXN0X2VsZW0tPnJlc291cmNlX2xpc3QpOworCQkJCWtmcmVlKHJlc19saXN0X2VsZW0pOworCQkJfQorCQkJcmV0dXJuOworCQl9CisJfQorfQorCithY3BpX3N0YXR1cworYWNwaV9vc19pbnZhbGlkYXRlX2FkZHJlc3MoCisgICAgdTggICAgICAgICAgICAgICAgICAgc3BhY2VfaWQsCisgICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgYWRkcmVzcywKKyAgICBhY3BpX3NpemUgICAgICAgICAgICAgICBsZW5ndGgpCit7CisJc3RydWN0IGFjcGlfcmVzX2xpc3QgcmVzOworCisJc3dpdGNoIChzcGFjZV9pZCkgeworCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOgorCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWToKKwkJLyogT25seSBpbnRlcmZlcmVuY2UgY2hlY2tzIGFnYWluc3QgU3lzdGVtSU8gYW5kIFN5dGVtTWVtb3J5CisJCSAgIGFyZSBuZWVkZWQgKi8KKwkJcmVzLnN0YXJ0ID0gYWRkcmVzczsKKwkJcmVzLmVuZCA9IGFkZHJlc3MgKyBsZW5ndGggLSAxOworCQlyZXMucmVzb3VyY2VfdHlwZSA9IHNwYWNlX2lkOworCQlzcGluX2xvY2soJmFjcGlfcmVzX2xvY2spOworCQlhY3BpX3Jlc19saXN0X2RlbCgmcmVzKTsKKwkJc3Bpbl91bmxvY2soJmFjcGlfcmVzX2xvY2spOworCQlicmVhazsKKwljYXNlIEFDUElfQURSX1NQQUNFX1BDSV9DT05GSUc6CisJY2FzZSBBQ1BJX0FEUl9TUEFDRV9FQzoKKwljYXNlIEFDUElfQURSX1NQQUNFX1NNQlVTOgorCWNhc2UgQUNQSV9BRFJfU1BBQ0VfQ01PUzoKKwljYXNlIEFDUElfQURSX1NQQUNFX1BDSV9CQVJfVEFSR0VUOgorCWNhc2UgQUNQSV9BRFJfU1BBQ0VfREFUQV9UQUJMRToKKwljYXNlIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFOgorCQlicmVhazsKKwl9CisJcmV0dXJuIEFFX09LOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfb3NfdmFsaWRhdGVfYWRkcmVzcwpAQCAtMTM4Miw2ICsxNDQ0LDcgQEAKICAgICBjaGFyICpuYW1lKQogewogCXN0cnVjdCBhY3BpX3Jlc19saXN0ICpyZXM7CisJaW50IGFkZGVkOwogCWlmIChhY3BpX2VuZm9yY2VfcmVzb3VyY2VzID09IEVORk9SQ0VfUkVTT1VSQ0VTX05PKQogCQlyZXR1cm4gQUVfT0s7CiAKQEAgLTEzOTksMTQgKzE0NjIsMTcgQEAKIAkJcmVzLT5lbmQgPSBhZGRyZXNzICsgbGVuZ3RoIC0gMTsKIAkJcmVzLT5yZXNvdXJjZV90eXBlID0gc3BhY2VfaWQ7CiAJCXNwaW5fbG9jaygmYWNwaV9yZXNfbG9jayk7Ci0JCWxpc3RfYWRkKCZyZXMtPnJlc291cmNlX2xpc3QsICZyZXNvdXJjZV9saXN0X2hlYWQpOworCQlhZGRlZCA9IGFjcGlfcmVzX2xpc3RfYWRkKHJlcyk7CiAJCXNwaW5fdW5sb2NrKCZhY3BpX3Jlc19sb2NrKTsKLQkJcHJfZGVidWcoIkFkZGVkICVzIHJlc291cmNlOiBzdGFydDogMHglbGx4LCBlbmQ6IDB4JWxseCwgIgotCQkJICJuYW1lOiAlc1xuIiwgKHNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykKKwkJcHJfZGVidWcoIiVzICVzIHJlc291cmNlOiBzdGFydDogMHglbGx4LCBlbmQ6IDB4JWxseCwgIgorCQkJICJuYW1lOiAlc1xuIiwgYWRkZWQgPyAiQWRkZWQiIDogIkFscmVhZHkgZXhpc3QiLAorCQkJIChzcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8pCiAJCQkgPyAiU3lzdGVtSU8iIDogIlN5c3RlbSBNZW1vcnkiLAogCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKIAkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAogCQkJIHJlcy0+bmFtZSk7CisJCWlmICghYWRkZWQpCisJCQlrZnJlZShyZXMpOwogCQlicmVhazsKIAljYXNlIEFDUElfQURSX1NQQUNFX1BDSV9DT05GSUc6CiAJY2FzZSBBQ1BJX0FEUl9TUEFDRV9FQzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCmluZGV4IGI3OTRlYjguLjg0MzY5OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUENJX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgicGNpX2lycSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYyBiL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jCmluZGV4IDE2ZTBmOWQuLjM5NGFlODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgX0NPTVBPTkVOVAkJCUFDUElfUENJX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgicGNpX2xpbmsiKTsKICNkZWZpbmUgQUNQSV9QQ0lfTElOS19DTEFTUwkJInBjaV9pcnFfcm91dGluZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggMzFiOTYxYy4uMzExMjIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1BDSV9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInBjaV9yb290Iik7CiAjZGVmaW5lIEFDUElfUENJX1JPT1RfQ0xBU1MJCSJwY2lfYnJpZGdlIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9zbG90LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Nsb3QuYwppbmRleCAxMjE1OGUwLi40NWRhMmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Nsb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Nsb3QuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogc3RhdGljIGludCBkZWJ1ZzsKIHN0YXRpYyBpbnQgY2hlY2tfc3RhX2JlZm9yZV9zdW47CkBAIC01Nyw3ICs1OCw3IEBACiAJCQkJTVlfTkFNRSAsICMjIGFyZyk7CQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBTTE9UX05BTUVfU0laRSAyMAkJLyogSW5zcGlyZWQgYnkgI2RlZmluZSBpbiBhY3BpcGhwLmggKi8KKyNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgMjEJCS8qIEluc3BpcmVkIGJ5ICNkZWZpbmUgaW4gYWNwaXBocC5oICovCiAKIHN0cnVjdCBhY3BpX3BjaV9zbG90IHsKIAlhY3BpX2hhbmRsZSByb290X2hhbmRsZTsJLyogaGFuZGxlIG9mIHRoZSByb290IGJyaWRnZSAqLwpAQCAtMTQ5LDcgKzE1MCw3IEBACiAJCXJldHVybiBBRV9PSzsKIAl9CiAKLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIldSIsICh1MzIpc3VuKTsKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlbGx1Iiwgc3VuKTsKIAlwY2lfc2xvdCA9IHBjaV9jcmVhdGVfc2xvdChwY2lfYnVzLCBkZXZpY2UsIG5hbWUsIE5VTEwpOwogCWlmIChJU19FUlIocGNpX3Nsb3QpKSB7CiAJCWVycigicGNpX2NyZWF0ZV9zbG90IHJldHVybmVkICVsZFxuIiwgUFRSX0VSUihwY2lfc2xvdCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwppbmRleCA1YTA5YmYzLi4yMmIyOTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwpAQCAtNDMsOSArNDMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgotCiAjaW5jbHVkZSAic2xlZXAuaCIKIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBfQ09NUE9ORU5UCQkJQUNQSV9QT1dFUl9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInBvd2VyIik7CiAjZGVmaW5lIEFDUElfUE9XRVJfQ0xBU1MJCSJwb3dlcl9yZXNvdXJjZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiZmQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jCkBAIC0wLDAgKzEsMTAxOCBAQAorLyoKKyAqIEEgaHdtb24gZHJpdmVyIGZvciBBQ1BJIDQuMCBwb3dlciBtZXRlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJQk0KKyAqCisgKiBBdXRob3I6IERhcnJpY2sgSi4gV29uZyA8ZGp3b25nQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisKKyNkZWZpbmUgQUNQSV9QT1dFUl9NRVRFUl9OQU1FCQkicG93ZXJfbWV0ZXIiCitBQ1BJX01PRFVMRV9OQU1FKEFDUElfUE9XRVJfTUVURVJfTkFNRSk7CisjZGVmaW5lIEFDUElfUE9XRVJfTUVURVJfREVWSUNFX05BTUUJIlBvd2VyIE1ldGVyIgorI2RlZmluZSBBQ1BJX1BPV0VSX01FVEVSX0NMQVNTCQkicG93ZXJfbWV0ZXJfcmVzb3VyY2UiCisKKyNkZWZpbmUgTlVNX1NFTlNPUlMJCQkxNworCisjZGVmaW5lIFBPV0VSX01FVEVSX0NBTl9NRUFTVVJFCSgxIDw8IDApCisjZGVmaW5lIFBPV0VSX01FVEVSX0NBTl9UUklQCSgxIDw8IDEpCisjZGVmaW5lIFBPV0VSX01FVEVSX0NBTl9DQVAJKDEgPDwgMikKKyNkZWZpbmUgUE9XRVJfTUVURVJfQ0FOX05PVElGWQkoMSA8PCAzKQorI2RlZmluZSBQT1dFUl9NRVRFUl9JU19CQVRURVJZCSgxIDw8IDgpCisjZGVmaW5lIFVOS05PV05fSFlTVEVSRVNJUwkweEZGRkZGRkZGCisKKyNkZWZpbmUgTUVURVJfTk9USUZZX0NPTkZJRwkweDgwCisjZGVmaW5lIE1FVEVSX05PVElGWV9UUklQCTB4ODEKKyNkZWZpbmUgTUVURVJfTk9USUZZX0NBUAkweDgyCisjZGVmaW5lIE1FVEVSX05PVElGWV9DQVBQSU5HCTB4ODMKKyNkZWZpbmUgTUVURVJfTk9USUZZX0lOVEVSVkFMCTB4ODQKKworI2RlZmluZSBQT1dFUl9BVkVSQUdFX05BTUUJInBvd2VyMV9hdmVyYWdlIgorI2RlZmluZSBQT1dFUl9DQVBfTkFNRQkJInBvd2VyMV9jYXAiCisjZGVmaW5lIFBPV0VSX0FWR19JTlRFUlZBTF9OQU1FCSJwb3dlcjFfYXZlcmFnZV9pbnRlcnZhbCIKKyNkZWZpbmUgUE9XRVJfQUxBUk1fTkFNRQkicG93ZXIxX2FsYXJtIgorCitzdGF0aWMgaW50IGNhcF9pbl9oYXJkd2FyZTsKK3N0YXRpYyBpbnQgZm9yY2VfY2FwX29uOworCitzdGF0aWMgaW50IGNhbl9jYXBfaW5faGFyZHdhcmUodm9pZCkKK3sKKwlyZXR1cm4gZm9yY2VfY2FwX29uIHx8IGNhcF9pbl9oYXJkd2FyZTsKK30KKworc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZV9pZCBwb3dlcl9tZXRlcl9pZHNbXSA9IHsKKwl7IkFDUEkwMDBEIiwgMH0sCisJeyIiLCAwfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHBvd2VyX21ldGVyX2lkcyk7CisKK3N0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX2NhcGFiaWxpdGllcyB7CisJYWNwaV9pbnRlZ2VyCQlmbGFnczsKKwlhY3BpX2ludGVnZXIJCXVuaXRzOworCWFjcGlfaW50ZWdlcgkJdHlwZTsKKwlhY3BpX2ludGVnZXIJCWFjY3VyYWN5OworCWFjcGlfaW50ZWdlcgkJc2FtcGxpbmdfdGltZTsKKwlhY3BpX2ludGVnZXIJCW1pbl9hdmdfaW50ZXJ2YWw7CisJYWNwaV9pbnRlZ2VyCQltYXhfYXZnX2ludGVydmFsOworCWFjcGlfaW50ZWdlcgkJaHlzdGVyZXNpczsKKwlhY3BpX2ludGVnZXIJCWNvbmZpZ3VyYWJsZV9jYXA7CisJYWNwaV9pbnRlZ2VyCQltaW5fY2FwOworCWFjcGlfaW50ZWdlcgkJbWF4X2NhcDsKK307CisKK3N0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlIHsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UJKmFjcGlfZGV2OworCWFjcGlfYnVzX2lkCQluYW1lOworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3QgZGV2aWNlCQkqaHdtb25fZGV2OworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX2NhcGFiaWxpdGllcwljYXBzOworCWFjcGlfc3RyaW5nCQltb2RlbF9udW1iZXI7CisJYWNwaV9zdHJpbmcJCXNlcmlhbF9udW1iZXI7CisJYWNwaV9zdHJpbmcJCW9lbV9pbmZvOworCWFjcGlfaW50ZWdlcgkJcG93ZXI7CisJYWNwaV9pbnRlZ2VyCQljYXA7CisJYWNwaV9pbnRlZ2VyCQlhdmdfaW50ZXJ2YWw7CisJaW50CQkJc2Vuc29yc192YWxpZDsKKwl1bnNpZ25lZCBsb25nCQlzZW5zb3JzX2xhc3RfdXBkYXRlZDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUJc2Vuc29yc1tOVU1fU0VOU09SU107CisJaW50CQkJbnVtX3NlbnNvcnM7CisJaW50CQkJdHJpcFsyXTsKKwlpbnQJCQludW1fZG9tYWluX2RldmljZXM7CisJc3RydWN0IGFjcGlfZGV2aWNlCSoqZG9tYWluX2RldmljZXM7CisJc3RydWN0IGtvYmplY3QJCSpob2xkZXJzX2RpcjsKK307CisKK3N0cnVjdCByb19zZW5zb3JfdGVtcGxhdGUgeworCWNoYXIgKmxhYmVsOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNoYXIgKmJ1Zik7CisJaW50IGluZGV4OworfTsKKworc3RydWN0IHJ3X3NlbnNvcl90ZW1wbGF0ZSB7CisJY2hhciAqbGFiZWw7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJY2hhciAqYnVmKTsKKwlzc2l6ZV90ICgqc2V0KShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKwlpbnQgaW5kZXg7Cit9OworCisvKiBBdmVyYWdpbmcgaW50ZXJ2YWwgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX2F2Z19pbnRlcnZhbChzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGRhdGE7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHJlc291cmNlLT5hY3BpX2Rldi0+aGFuZGxlLCAiX0dBSSIsCisJCQkJICAgICAgIE5VTEwsICZkYXRhKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV2YWx1YXRpbmcgX0dBSSIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmVzb3VyY2UtPmF2Z19pbnRlcnZhbCA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXZnX2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisKKwltdXRleF9sb2NrKCZyZXNvdXJjZS0+bG9jayk7CisJdXBkYXRlX2F2Z19pbnRlcnZhbChyZXNvdXJjZSk7CisJbXV0ZXhfdW5sb2NrKCZyZXNvdXJjZS0+bG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCByZXNvdXJjZS0+YXZnX2ludGVydmFsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2F2Z19pbnRlcnZhbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gYWNwaV9kZXYtPmRyaXZlcl9kYXRhOworCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzAgPSB7IEFDUElfVFlQRV9JTlRFR0VSIH07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJncyA9IHsgMSwgJmFyZzAgfTsKKwlpbnQgcmVzOworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGF0YTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlyZXMgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdGVtcCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCWlmICh0ZW1wID4gcmVzb3VyY2UtPmNhcHMubWF4X2F2Z19pbnRlcnZhbCB8fAorCSAgICB0ZW1wIDwgcmVzb3VyY2UtPmNhcHMubWluX2F2Z19pbnRlcnZhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYXJnMC5pbnRlZ2VyLnZhbHVlID0gdGVtcDsKKworCW11dGV4X2xvY2soJnJlc291cmNlLT5sb2NrKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfUEFJIiwKKwkJCQkgICAgICAgJmFyZ3MsICZkYXRhKTsKKwlpZiAoIUFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXNvdXJjZS0+YXZnX2ludGVydmFsID0gdGVtcDsKKwltdXRleF91bmxvY2soJnJlc291cmNlLT5sb2NrKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUEFJIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBfUEFJIHJldHVybnMgMCBvbiBzdWNjZXNzLCBub256ZXJvIG90aGVyd2lzZSAqLworCWlmIChkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjb3VudDsKK30KKworLyogQ2FwIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCB1cGRhdGVfY2FwKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGF0YTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfR0hMIiwKKwkJCQkgICAgICAgTlVMTCwgJmRhdGEpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfR0hMIikpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXNvdXJjZS0+Y2FwID0gZGF0YTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19jYXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gYWNwaV9kZXYtPmRyaXZlcl9kYXRhOworCisJbXV0ZXhfbG9jaygmcmVzb3VyY2UtPmxvY2spOworCXVwZGF0ZV9jYXAocmVzb3VyY2UpOworCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPmxvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgcmVzb3VyY2UtPmNhcCAqIDEwMDApOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfY2FwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OworCWludCByZXM7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXJlcyA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ0ZW1wKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJdGVtcCAvPSAxMDAwOworCWlmICh0ZW1wID4gcmVzb3VyY2UtPmNhcHMubWF4X2NhcCB8fCB0ZW1wIDwgcmVzb3VyY2UtPmNhcHMubWluX2NhcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYXJnMC5pbnRlZ2VyLnZhbHVlID0gdGVtcDsKKworCW11dGV4X2xvY2soJnJlc291cmNlLT5sb2NrKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfU0hMIiwKKwkJCQkgICAgICAgJmFyZ3MsICZkYXRhKTsKKwlpZiAoIUFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXNvdXJjZS0+Y2FwID0gdGVtcDsKKwltdXRleF91bmxvY2soJnJlc291cmNlLT5sb2NrKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfU0hMIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBfU0hMIHJldHVybnMgMCBvbiBzdWNjZXNzLCBub256ZXJvIG90aGVyd2lzZSAqLworCWlmIChkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjb3VudDsKK30KKworLyogUG93ZXIgbWV0ZXIgdHJpcCBwb2ludHMgKi8KK3N0YXRpYyBpbnQgc2V0X2FjcGlfdHJpcChzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJdW5pb24gYWNwaV9vYmplY3QgYXJnX29ianNbXSA9IHsKKwkJe0FDUElfVFlQRV9JTlRFR0VSfSwKKwkJe0FDUElfVFlQRV9JTlRFR0VSfQorCX07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJncyA9IHsgMiwgYXJnX29ianMgfTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGF0YTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwkvKiBCb3RoIHRyaXAgbGV2ZWxzIG11c3QgYmUgc2V0ICovCisJaWYgKHJlc291cmNlLT50cmlwWzBdIDwgMCB8fCByZXNvdXJjZS0+dHJpcFsxXSA8IDApCisJCXJldHVybiAwOworCisJLyogVGhpcyBkcml2ZXIgc3RvcmVzIG1pbiwgbWF4OyBBQ1BJIHdhbnRzIG1heCwgbWluLiAqLworCWFyZ19vYmpzWzBdLmludGVnZXIudmFsdWUgPSByZXNvdXJjZS0+dHJpcFsxXTsKKwlhcmdfb2Jqc1sxXS5pbnRlZ2VyLnZhbHVlID0gcmVzb3VyY2UtPnRyaXBbMF07CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfUFRQIiwKKwkJCQkgICAgICAgJmFyZ3MsICZkYXRhKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV2YWx1YXRpbmcgX1BUUCIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF90cmlwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gYWNwaV9kZXYtPmRyaXZlcl9kYXRhOworCWludCByZXM7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJcmVzID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnRlbXApOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwl0ZW1wIC89IDEwMDA7CisJaWYgKHRlbXAgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnJlc291cmNlLT5sb2NrKTsKKwlyZXNvdXJjZS0+dHJpcFthdHRyLT5pbmRleCAtIDddID0gdGVtcDsKKwlyZXMgPSBzZXRfYWNwaV90cmlwKHJlc291cmNlKTsKKwltdXRleF91bmxvY2soJnJlc291cmNlLT5sb2NrKTsKKworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIFBvd2VyIG1ldGVyICovCitzdGF0aWMgaW50IHVwZGF0ZV9tZXRlcihzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGRhdGE7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9jYWxfamlmZmllcyA9IGppZmZpZXM7CisKKwlpZiAodGltZV9iZWZvcmUobG9jYWxfamlmZmllcywgcmVzb3VyY2UtPnNlbnNvcnNfbGFzdF91cGRhdGVkICsKKwkJCW1zZWNzX3RvX2ppZmZpZXMocmVzb3VyY2UtPmNhcHMuc2FtcGxpbmdfdGltZSkpICYmCisJCQlyZXNvdXJjZS0+c2Vuc29yc192YWxpZCkKKwkJcmV0dXJuIDA7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfUE1NIiwKKwkJCQkgICAgICAgTlVMTCwgJmRhdGEpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUE1NIikpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXNvdXJjZS0+cG93ZXIgPSBkYXRhOworCXJlc291cmNlLT5zZW5zb3JzX3ZhbGlkID0gMTsKKwlyZXNvdXJjZS0+c2Vuc29yc19sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisKKwltdXRleF9sb2NrKCZyZXNvdXJjZS0+bG9jayk7CisJdXBkYXRlX21ldGVyKHJlc291cmNlKTsKKwltdXRleF91bmxvY2soJnJlc291cmNlLT5sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHJlc291cmNlLT5wb3dlciAqIDEwMDApOworfQorCisvKiBNaXNjZWxsYW5lb3VzICovCitzdGF0aWMgc3NpemVfdCBzaG93X3N0cihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gYWNwaV9kZXYtPmRyaXZlcl9kYXRhOworCWFjcGlfc3RyaW5nIHZhbDsKKworCXN3aXRjaCAoYXR0ci0+aW5kZXgpIHsKKwljYXNlIDA6CisJCXZhbCA9IHJlc291cmNlLT5tb2RlbF9udW1iZXI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gcmVzb3VyY2UtPnNlcmlhbF9udW1iZXI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdmFsID0gcmVzb3VyY2UtPm9lbV9pbmZvOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd192YWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSA9IGFjcGlfZGV2LT5kcml2ZXJfZGF0YTsKKwlhY3BpX2ludGVnZXIgdmFsID0gMDsKKworCXN3aXRjaCAoYXR0ci0+aW5kZXgpIHsKKwljYXNlIDA6CisJCXZhbCA9IHJlc291cmNlLT5jYXBzLm1pbl9hdmdfaW50ZXJ2YWw7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gcmVzb3VyY2UtPmNhcHMubWF4X2F2Z19pbnRlcnZhbDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSByZXNvdXJjZS0+Y2Fwcy5taW5fY2FwICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl2YWwgPSByZXNvdXJjZS0+Y2Fwcy5tYXhfY2FwICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocmVzb3VyY2UtPmNhcHMuaHlzdGVyZXNpcyA9PSBVTktOT1dOX0hZU1RFUkVTSVMpCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKKworCQl2YWwgPSByZXNvdXJjZS0+Y2Fwcy5oeXN0ZXJlc2lzICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlpZiAocmVzb3VyY2UtPmNhcHMuZmxhZ3MgJiBQT1dFUl9NRVRFUl9JU19CQVRURVJZKQorCQkJdmFsID0gMTsKKwkJZWxzZQorCQkJdmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlpZiAocmVzb3VyY2UtPnBvd2VyID4gcmVzb3VyY2UtPmNhcCkKKwkJCXZhbCA9IDE7CisJCWVsc2UKKwkJCXZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgNzoKKwljYXNlIDg6CisJCWlmIChyZXNvdXJjZS0+dHJpcFthdHRyLT5pbmRleCAtIDddIDwgMCkKKwkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd25cbiIpOworCisJCXZhbCA9IHJlc291cmNlLT50cmlwW2F0dHItPmluZGV4IC0gN10gKiAxMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2FjY3VyYWN5KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgaW50IGFjYyA9IHJlc291cmNlLT5jYXBzLmFjY3VyYWN5OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXUuJXUlJVxuIiwgYWNjIC8gMTAwMCwgYWNjICUgMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBBQ1BJX1BPV0VSX01FVEVSX05BTUUpOworfQorCisvKiBTZW5zb3IgZGVzY3JpcHRpb25zLiAgSWYgeW91IGFkZCBhIHNlbnNvciwgdXBkYXRlIE5VTV9TRU5TT1JTIGFib3ZlISAqLworc3RhdGljIHN0cnVjdCByb19zZW5zb3JfdGVtcGxhdGUgbWV0ZXJfcm9fYXR0cnNbXSA9IHsKK3tQT1dFUl9BVkVSQUdFX05BTUUsIHNob3dfcG93ZXIsIDB9LAoreyJwb3dlcjFfYWNjdXJhY3kiLCBzaG93X2FjY3VyYWN5LCAwfSwKK3sicG93ZXIxX2F2ZXJhZ2VfaW50ZXJ2YWxfbWluIiwgc2hvd192YWwsIDB9LAoreyJwb3dlcjFfYXZlcmFnZV9pbnRlcnZhbF9tYXgiLCBzaG93X3ZhbCwgMX0sCit7InBvd2VyMV9pc19iYXR0ZXJ5Iiwgc2hvd192YWwsIDV9LAore05VTEwsIE5VTEwsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCByd19zZW5zb3JfdGVtcGxhdGUgbWV0ZXJfcndfYXR0cnNbXSA9IHsKK3tQT1dFUl9BVkdfSU5URVJWQUxfTkFNRSwgc2hvd19hdmdfaW50ZXJ2YWwsIHNldF9hdmdfaW50ZXJ2YWwsIDB9LAore05VTEwsIE5VTEwsIE5VTEwsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCByb19zZW5zb3JfdGVtcGxhdGUgbWlzY19jYXBfYXR0cnNbXSA9IHsKK3sicG93ZXIxX2NhcF9taW4iLCBzaG93X3ZhbCwgMn0sCit7InBvd2VyMV9jYXBfbWF4Iiwgc2hvd192YWwsIDN9LAoreyJwb3dlcjFfY2FwX2h5c3QiLCBzaG93X3ZhbCwgNH0sCit7UE9XRVJfQUxBUk1fTkFNRSwgc2hvd192YWwsIDZ9LAore05VTEwsIE5VTEwsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCByb19zZW5zb3JfdGVtcGxhdGUgcm9fY2FwX2F0dHJzW10gPSB7Cit7UE9XRVJfQ0FQX05BTUUsIHNob3dfY2FwLCAwfSwKK3tOVUxMLCBOVUxMLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgcndfc2Vuc29yX3RlbXBsYXRlIHJ3X2NhcF9hdHRyc1tdID0gewore1BPV0VSX0NBUF9OQU1FLCBzaG93X2NhcCwgc2V0X2NhcCwgMH0sCit7TlVMTCwgTlVMTCwgTlVMTCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IHJ3X3NlbnNvcl90ZW1wbGF0ZSB0cmlwX2F0dHJzW10gPSB7Cit7InBvd2VyMV9hdmVyYWdlX21pbiIsIHNob3dfdmFsLCBzZXRfdHJpcCwgN30sCit7InBvd2VyMV9hdmVyYWdlX21heCIsIHNob3dfdmFsLCBzZXRfdHJpcCwgOH0sCit7TlVMTCwgTlVMTCwgTlVMTCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IHJvX3NlbnNvcl90ZW1wbGF0ZSBtaXNjX2F0dHJzW10gPSB7Cit7Im5hbWUiLCBzaG93X25hbWUsIDB9LAoreyJwb3dlcjFfbW9kZWxfbnVtYmVyIiwgc2hvd19zdHIsIDB9LAoreyJwb3dlcjFfb2VtX2luZm8iLCBzaG93X3N0ciwgMn0sCit7InBvd2VyMV9zZXJpYWxfbnVtYmVyIiwgc2hvd19zdHIsIDF9LAore05VTEwsIE5VTEwsIDB9LAorfTsKKworLyogUmVhZCBwb3dlciBkb21haW4gZGF0YSAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2RvbWFpbl9kZXZpY2VzKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwlpbnQgaTsKKworCWlmICghcmVzb3VyY2UtPm51bV9kb21haW5fZGV2aWNlcykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJlc291cmNlLT5udW1fZG9tYWluX2RldmljZXM7IGkrKykgeworCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKm9iaiA9IHJlc291cmNlLT5kb21haW5fZGV2aWNlc1tpXTsKKwkJaWYgKCFvYmopCisJCQljb250aW51ZTsKKworCQlzeXNmc19yZW1vdmVfbGluayhyZXNvdXJjZS0+aG9sZGVyc19kaXIsCisJCQkJICBrb2JqZWN0X25hbWUoJm9iai0+ZGV2LmtvYmopKTsKKwkJcHV0X2RldmljZSgmb2JqLT5kZXYpOworCX0KKworCWtmcmVlKHJlc291cmNlLT5kb21haW5fZGV2aWNlcyk7CisJa29iamVjdF9wdXQocmVzb3VyY2UtPmhvbGRlcnNfZGlyKTsKK30KKworc3RhdGljIGludCByZWFkX2RvbWFpbl9kZXZpY2VzKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwlpbnQgcmVzID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXVuaW9uIGFjcGlfb2JqZWN0ICpwc3M7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfUE1EIiwgTlVMTCwKKwkJCQkgICAgICAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV2YWx1YXRpbmcgX1BNRCIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHNzID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKCFwc3MgfHwKKwkgICAgcHNzLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJCWRldl9lcnIoJnJlc291cmNlLT5hY3BpX2Rldi0+ZGV2LCBBQ1BJX1BPV0VSX01FVEVSX05BTUUKKwkJCSJJbnZhbGlkIF9QTUQgZGF0YVxuIik7CisJCXJlcyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KKworCWlmICghcHNzLT5wYWNrYWdlLmNvdW50KQorCQlnb3RvIGVuZDsKKworCXJlc291cmNlLT5kb21haW5fZGV2aWNlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZSAqKSAqCisJCQkJCSAgIHBzcy0+cGFja2FnZS5jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNvdXJjZS0+ZG9tYWluX2RldmljZXMpIHsKKwkJcmVzID0gLUVOT01FTTsKKwkJZ290byBlbmQ7CisJfQorCisJcmVzb3VyY2UtPmhvbGRlcnNfZGlyID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgibWVhc3VyZXMiLAorCQkJCQkmcmVzb3VyY2UtPmFjcGlfZGV2LT5kZXYua29iaik7CisJaWYgKCFyZXNvdXJjZS0+aG9sZGVyc19kaXIpIHsKKwkJcmVzID0gLUVOT01FTTsKKwkJZ290byBleGl0X2ZyZWU7CisJfQorCisJcmVzb3VyY2UtPm51bV9kb21haW5fZGV2aWNlcyA9IHBzcy0+cGFja2FnZS5jb3VudDsKKworCWZvciAoaSA9IDA7IGkgPCBwc3MtPnBhY2thZ2UuY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKm9iajsKKwkJdW5pb24gYWNwaV9vYmplY3QgKmVsZW1lbnQgPSAmKHBzcy0+cGFja2FnZS5lbGVtZW50c1tpXSk7CisKKwkJLyogUmVmdXNlIG5vbi1yZWZlcmVuY2VzICovCisJCWlmIChlbGVtZW50LT50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpCisJCQljb250aW51ZTsKKworCQkvKiBDcmVhdGUgYSBzeW1saW5rIHRvIGRvbWFpbiBvYmplY3RzICovCisJCXJlc291cmNlLT5kb21haW5fZGV2aWNlc1tpXSA9IE5VTEw7CisJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9kZXZpY2UoZWxlbWVudC0+cmVmZXJlbmNlLmhhbmRsZSwKKwkJCQkJICAgICAmcmVzb3VyY2UtPmRvbWFpbl9kZXZpY2VzW2ldKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJY29udGludWU7CisKKwkJb2JqID0gcmVzb3VyY2UtPmRvbWFpbl9kZXZpY2VzW2ldOworCQlnZXRfZGV2aWNlKCZvYmotPmRldik7CisKKwkJcmVzID0gc3lzZnNfY3JlYXRlX2xpbmsocmVzb3VyY2UtPmhvbGRlcnNfZGlyLCAmb2JqLT5kZXYua29iaiwKKwkJCQkgICAgICBrb2JqZWN0X25hbWUoJm9iai0+ZGV2LmtvYmopKTsKKwkJaWYgKHJlcykgeworCQkJcHV0X2RldmljZSgmb2JqLT5kZXYpOworCQkJcmVzb3VyY2UtPmRvbWFpbl9kZXZpY2VzW2ldID0gTlVMTDsKKwkJfQorCX0KKworCXJlcyA9IDA7CisJZ290byBlbmQ7CisKK2V4aXRfZnJlZToKKwlrZnJlZShyZXNvdXJjZS0+ZG9tYWluX2RldmljZXMpOworZW5kOgorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gcmVzOworfQorCisvKiBSZWdpc3RyYXRpb24gYW5kIGRlcmVnaXN0cmF0aW9uICovCitzdGF0aWMgaW50IHJlZ2lzdGVyX3JvX2F0dHJzKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSwKKwkJCSAgICAgc3RydWN0IHJvX3NlbnNvcl90ZW1wbGF0ZSAqcm8pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJlc291cmNlLT5hY3BpX2Rldi0+ZGV2OworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29ycyA9CisJCSZyZXNvdXJjZS0+c2Vuc29yc1tyZXNvdXJjZS0+bnVtX3NlbnNvcnNdOworCWludCByZXMgPSAwOworCisJd2hpbGUgKHJvLT5sYWJlbCkgeworCQlzZW5zb3JzLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSByby0+bGFiZWw7CisJCXNlbnNvcnMtPmRldl9hdHRyLmF0dHIubW9kZSA9IFNfSVJVR087CisJCXNlbnNvcnMtPmRldl9hdHRyLnNob3cgPSByby0+c2hvdzsKKwkJc2Vuc29ycy0+aW5kZXggPSByby0+aW5kZXg7CisKKwkJcmVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNlbnNvcnMtPmRldl9hdHRyKTsKKwkJaWYgKHJlcykgeworCQkJc2Vuc29ycy0+ZGV2X2F0dHIuYXR0ci5uYW1lID0gTlVMTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJc2Vuc29ycysrOworCQlyZXNvdXJjZS0+bnVtX3NlbnNvcnMrKzsKKwkJcm8rKzsKKwl9CisKK2Vycm9yOgorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcndfYXR0cnMoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlLAorCQkJICAgICBzdHJ1Y3Qgcndfc2Vuc29yX3RlbXBsYXRlICpydykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmVzb3VyY2UtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JzID0KKwkJJnJlc291cmNlLT5zZW5zb3JzW3Jlc291cmNlLT5udW1fc2Vuc29yc107CisJaW50IHJlcyA9IDA7CisKKwl3aGlsZSAocnctPmxhYmVsKSB7CisJCXNlbnNvcnMtPmRldl9hdHRyLmF0dHIubmFtZSA9IHJ3LT5sYWJlbDsKKwkJc2Vuc29ycy0+ZGV2X2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1I7CisJCXNlbnNvcnMtPmRldl9hdHRyLnNob3cgPSBydy0+c2hvdzsKKwkJc2Vuc29ycy0+ZGV2X2F0dHIuc3RvcmUgPSBydy0+c2V0OworCQlzZW5zb3JzLT5pbmRleCA9IHJ3LT5pbmRleDsKKworCQlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2Vuc29ycy0+ZGV2X2F0dHIpOworCQlpZiAocmVzKSB7CisJCQlzZW5zb3JzLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBOVUxMOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlzZW5zb3JzKys7CisJCXJlc291cmNlLT5udW1fc2Vuc29ycysrOworCQlydysrOworCX0KKworZXJyb3I6CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2F0dHJzKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZXNvdXJjZS0+bnVtX3NlbnNvcnM7IGkrKykgeworCQlpZiAoIXJlc291cmNlLT5zZW5zb3JzW2ldLmRldl9hdHRyLmF0dHIubmFtZSkKKwkJCWNvbnRpbnVlOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnJlc291cmNlLT5hY3BpX2Rldi0+ZGV2LAorCQkJCSAgICZyZXNvdXJjZS0+c2Vuc29yc1tpXS5kZXZfYXR0cik7CisJfQorCisJcmVtb3ZlX2RvbWFpbl9kZXZpY2VzKHJlc291cmNlKTsKKworCXJlc291cmNlLT5udW1fc2Vuc29ycyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfYXR0cnMoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlKQoreworCWludCByZXMgPSAwOworCisJcmVzID0gcmVhZF9kb21haW5fZGV2aWNlcyhyZXNvdXJjZSk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCWlmIChyZXNvdXJjZS0+Y2Fwcy5mbGFncyAmIFBPV0VSX01FVEVSX0NBTl9NRUFTVVJFKSB7CisJCXJlcyA9IHJlZ2lzdGVyX3JvX2F0dHJzKHJlc291cmNlLCBtZXRlcl9yb19hdHRycyk7CisJCWlmIChyZXMpCisJCQlnb3RvIGVycm9yOworCQlyZXMgPSByZWdpc3Rlcl9yd19hdHRycyhyZXNvdXJjZSwgbWV0ZXJfcndfYXR0cnMpOworCQlpZiAocmVzKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAocmVzb3VyY2UtPmNhcHMuZmxhZ3MgJiBQT1dFUl9NRVRFUl9DQU5fQ0FQKSB7CisJCWlmICghY2FuX2NhcF9pbl9oYXJkd2FyZSgpKSB7CisJCQlkZXZfZXJyKCZyZXNvdXJjZS0+YWNwaV9kZXYtPmRldiwKKwkJCQkiSWdub3JpbmcgdW5zYWZlIHNvZnR3YXJlIHBvd2VyIGNhcCFcbiIpOworCQkJZ290byBza2lwX3Vuc2FmZV9jYXA7CisJCX0KKworCQlpZiAocmVzb3VyY2UtPmNhcHMuY29uZmlndXJhYmxlX2NhcCkgeworCQkJcmVzID0gcmVnaXN0ZXJfcndfYXR0cnMocmVzb3VyY2UsIHJ3X2NhcF9hdHRycyk7CisJCQlpZiAocmVzKQorCQkJCWdvdG8gZXJyb3I7CisJCX0gZWxzZSB7CisJCQlyZXMgPSByZWdpc3Rlcl9yb19hdHRycyhyZXNvdXJjZSwgcm9fY2FwX2F0dHJzKTsKKwkJCWlmIChyZXMpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCQlyZXMgPSByZWdpc3Rlcl9yb19hdHRycyhyZXNvdXJjZSwgbWlzY19jYXBfYXR0cnMpOworCQlpZiAocmVzKQorCQkJZ290byBlcnJvcjsKKwl9Citza2lwX3Vuc2FmZV9jYXA6CisKKwlpZiAocmVzb3VyY2UtPmNhcHMuZmxhZ3MgJiBQT1dFUl9NRVRFUl9DQU5fVFJJUCkgeworCQlyZXMgPSByZWdpc3Rlcl9yd19hdHRycyhyZXNvdXJjZSwgdHJpcF9hdHRycyk7CisJCWlmIChyZXMpCisJCQlnb3RvIGVycm9yOworCX0KKworCXJlcyA9IHJlZ2lzdGVyX3JvX2F0dHJzKHJlc291cmNlLCBtaXNjX2F0dHJzKTsKKwlpZiAocmVzKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIHJlczsKK2Vycm9yOgorCXJlbW92ZV9kb21haW5fZGV2aWNlcyhyZXNvdXJjZSk7CisJcmVtb3ZlX2F0dHJzKHJlc291cmNlKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJYWNwaV9zdHJpbmcgKnN0cjsKKwlpbnQgaTsKKworCXN0ciA9ICZyZXNvdXJjZS0+bW9kZWxfbnVtYmVyOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIHN0cisrKQorCQlrZnJlZSgqc3RyKTsKK30KKworc3RhdGljIGludCByZWFkX2NhcGFiaWxpdGllcyhzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJaW50IHJlcyA9IDA7CisJaW50IGk7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgc3RhdGUgPSB7IDAsIE5VTEwgfTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgZm9ybWF0ID0geyBzaXplb2YoIk5OTk5OTk5OTk5OIiksICJOTk5OTk5OTk5OTiIgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqcHNzOworCWFjcGlfc3RyaW5nICpzdHI7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfUE1DIiwgTlVMTCwKKwkJCQkgICAgICAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV2YWx1YXRpbmcgX1BNQyIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHNzID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKCFwc3MgfHwKKwkgICAgcHNzLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFIHx8CisJICAgIHBzcy0+cGFja2FnZS5jb3VudCAhPSAxNCkgeworCQlkZXZfZXJyKCZyZXNvdXJjZS0+YWNwaV9kZXYtPmRldiwgQUNQSV9QT1dFUl9NRVRFUl9OQU1FCisJCQkiSW52YWxpZCBfUE1DIGRhdGFcbiIpOworCQlyZXMgPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBHcmFiIGFsbCB0aGUgaW50ZWdlciBkYXRhIGF0IG9uY2UgKi8KKwlzdGF0ZS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfY2FwYWJpbGl0aWVzKTsKKwlzdGF0ZS5wb2ludGVyID0gJnJlc291cmNlLT5jYXBzOworCisJc3RhdHVzID0gYWNwaV9leHRyYWN0X3BhY2thZ2UocHNzLCAmZm9ybWF0LCAmc3RhdGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiSW52YWxpZCBkYXRhIikpOworCQlyZXMgPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAocmVzb3VyY2UtPmNhcHMudW5pdHMpIHsKKwkJZGV2X2VycigmcmVzb3VyY2UtPmFjcGlfZGV2LT5kZXYsIEFDUElfUE9XRVJfTUVURVJfTkFNRQorCQkJIlVua25vd24gdW5pdHMgJWxsdS5cbiIsCisJCQlyZXNvdXJjZS0+Y2Fwcy51bml0cyk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gZW5kOworCX0KKworCS8qIEdyYWIgdGhlIHN0cmluZyBkYXRhICovCisJc3RyID0gJnJlc291cmNlLT5tb2RlbF9udW1iZXI7CisKKwlmb3IgKGkgPSAxMTsgaSA8IDE0OyBpKyspIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKmVsZW1lbnQgPSAmKHBzcy0+cGFja2FnZS5lbGVtZW50c1tpXSk7CisKKwkJaWYgKGVsZW1lbnQtPnR5cGUgIT0gQUNQSV9UWVBFX1NUUklORykgeworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkqc3RyID0ga3phbGxvYyhzaXplb2YodTgpICogKGVsZW1lbnQtPnN0cmluZy5sZW5ndGggKyAxKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCEqc3RyKSB7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXN0cm5jcHkoKnN0ciwgZWxlbWVudC0+c3RyaW5nLnBvaW50ZXIsIGVsZW1lbnQtPnN0cmluZy5sZW5ndGgpOworCQlzdHIrKzsKKwl9CisKKwlkZXZfaW5mbygmcmVzb3VyY2UtPmFjcGlfZGV2LT5kZXYsICJGb3VuZCBBQ1BJIHBvd2VyIG1ldGVyLlxuIik7CisJZ290byBlbmQ7CitlcnJvcjoKKwlzdHIgPSAmcmVzb3VyY2UtPm1vZGVsX251bWJlcjsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrLCBzdHIrKykKKwkJa2ZyZWUoKnN0cik7CitlbmQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiByZXM7Cit9CisKKy8qIEhhbmRsZSBBQ1BJIGV2ZW50IG5vdGlmaWNhdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGFjcGlfcG93ZXJfbWV0ZXJfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCit7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlOworCWludCByZXM7CisKKwlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQorCQlyZXR1cm47CisKKwlyZXNvdXJjZSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKworCW11dGV4X2xvY2soJnJlc291cmNlLT5sb2NrKTsKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNRVRFUl9OT1RJRllfQ09ORklHOgorCQlmcmVlX2NhcGFiaWxpdGllcyhyZXNvdXJjZSk7CisJCXJlcyA9IHJlYWRfY2FwYWJpbGl0aWVzKHJlc291cmNlKTsKKwkJaWYgKHJlcykKKwkJCWJyZWFrOworCisJCXJlbW92ZV9hdHRycyhyZXNvdXJjZSk7CisJCXNldHVwX2F0dHJzKHJlc291cmNlKTsKKwkJYnJlYWs7CisJY2FzZSBNRVRFUl9OT1RJRllfVFJJUDoKKwkJc3lzZnNfbm90aWZ5KCZkZXZpY2UtPmRldi5rb2JqLCBOVUxMLCBQT1dFUl9BVkVSQUdFX05BTUUpOworCQl1cGRhdGVfbWV0ZXIocmVzb3VyY2UpOworCQlicmVhazsKKwljYXNlIE1FVEVSX05PVElGWV9DQVA6CisJCXN5c2ZzX25vdGlmeSgmZGV2aWNlLT5kZXYua29iaiwgTlVMTCwgUE9XRVJfQ0FQX05BTUUpOworCQl1cGRhdGVfY2FwKHJlc291cmNlKTsKKwkJYnJlYWs7CisJY2FzZSBNRVRFUl9OT1RJRllfSU5URVJWQUw6CisJCXN5c2ZzX25vdGlmeSgmZGV2aWNlLT5kZXYua29iaiwgTlVMTCwgUE9XRVJfQVZHX0lOVEVSVkFMX05BTUUpOworCQl1cGRhdGVfYXZnX2ludGVydmFsKHJlc291cmNlKTsKKwkJYnJlYWs7CisJY2FzZSBNRVRFUl9OT1RJRllfQ0FQUElORzoKKwkJc3lzZnNfbm90aWZ5KCZkZXZpY2UtPmRldi5rb2JqLCBOVUxMLCBQT1dFUl9BTEFSTV9OQU1FKTsKKwkJZGV2X2luZm8oJmRldmljZS0+ZGV2LCAiQ2FwcGluZyBpbiBwcm9ncmVzcy5cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyZXNvdXJjZS0+bG9jayk7CisKKwlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KEFDUElfUE9XRVJfTUVURVJfQ0xBU1MsCisJCQkJCWRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LCAwKTsKK30KKworc3RhdGljIGludCBhY3BpX3Bvd2VyX21ldGVyX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmVzOworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZTsKKworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlc291cmNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UpLAorCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNvdXJjZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXNvdXJjZS0+c2Vuc29yc192YWxpZCA9IDA7CisJcmVzb3VyY2UtPmFjcGlfZGV2ID0gZGV2aWNlOworCW11dGV4X2luaXQoJnJlc291cmNlLT5sb2NrKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1BPV0VSX01FVEVSX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9QT1dFUl9NRVRFUl9DTEFTUyk7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IHJlc291cmNlOworCisJZnJlZV9jYXBhYmlsaXRpZXMocmVzb3VyY2UpOworCXJlcyA9IHJlYWRfY2FwYWJpbGl0aWVzKHJlc291cmNlKTsKKwlpZiAocmVzKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCXJlc291cmNlLT50cmlwWzBdID0gcmVzb3VyY2UtPnRyaXBbMV0gPSAtMTsKKworCXJlcyA9IHNldHVwX2F0dHJzKHJlc291cmNlKTsKKwlpZiAocmVzKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCXJlc291cmNlLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmRldmljZS0+ZGV2KTsKKwlpZiAoSVNfRVJSKHJlc291cmNlLT5od21vbl9kZXYpKSB7CisJCXJlcyA9IFBUUl9FUlIocmVzb3VyY2UtPmh3bW9uX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCisJcmVzID0gMDsKKwlnb3RvIGV4aXQ7CisKK2V4aXRfcmVtb3ZlOgorCXJlbW92ZV9hdHRycyhyZXNvdXJjZSk7CitleGl0X2ZyZWU6CisJa2ZyZWUocmVzb3VyY2UpOworZXhpdDoKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGFjcGlfcG93ZXJfbWV0ZXJfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2U7CisKKwlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlc291cmNlID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHJlc291cmNlLT5od21vbl9kZXYpOworCisJZnJlZV9jYXBhYmlsaXRpZXMocmVzb3VyY2UpOworCXJlbW92ZV9hdHRycyhyZXNvdXJjZSk7CisKKwlrZnJlZShyZXNvdXJjZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wb3dlcl9tZXRlcl9yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlOworCisJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXNvdXJjZSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKwlmcmVlX2NhcGFiaWxpdGllcyhyZXNvdXJjZSk7CisJcmVhZF9jYXBhYmlsaXRpZXMocmVzb3VyY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9wb3dlcl9tZXRlcl9kcml2ZXIgPSB7CisJLm5hbWUgPSAicG93ZXJfbWV0ZXIiLAorCS5jbGFzcyA9IEFDUElfUE9XRVJfTUVURVJfQ0xBU1MsCisJLmlkcyA9IHBvd2VyX21ldGVyX2lkcywKKwkub3BzID0geworCQkuYWRkID0gYWNwaV9wb3dlcl9tZXRlcl9hZGQsCisJCS5yZW1vdmUgPSBhY3BpX3Bvd2VyX21ldGVyX3JlbW92ZSwKKwkJLnJlc3VtZSA9IGFjcGlfcG93ZXJfbWV0ZXJfcmVzdW1lLAorCQkubm90aWZ5ID0gYWNwaV9wb3dlcl9tZXRlcl9ub3RpZnksCisJCX0sCit9OworCisvKiBNb2R1bGUgaW5pdC9leGl0IHJvdXRpbmVzICovCitzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfY2FwX2tub2JzKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkKQoreworCWNhcF9pbl9oYXJkd2FyZSA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIHBtX2RtaV90YWJsZVtdID0geworCXsKKwkJZW5hYmxlX2NhcF9rbm9icywgIklCTSBBY3RpdmUgRW5lcmd5IE1hbmFnZXIiLAorCQl7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJJQk0iKQorCQl9LAorCX0sCisJe30KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfcG93ZXJfbWV0ZXJfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkbWlfY2hlY2tfc3lzdGVtKHBtX2RtaV90YWJsZSk7CisKKwlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcG93ZXJfbWV0ZXJfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFjcGlfcG93ZXJfbWV0ZXJfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3Bvd2VyX21ldGVyX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkRhcnJpY2sgSi4gV29uZyA8ZGp3b25nQHVzLmlibS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgNC4wIHBvd2VyIG1ldGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZm9yY2VfY2FwX29uLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfY2FwX29uLCAiRW5hYmxlIHBvd2VyIGNhcCBldmVuIGl0IGlzIHVuc2FmZSB0byBkbyBzby4iKTsKKworbW9kdWxlX2luaXQoYWNwaV9wb3dlcl9tZXRlcl9pbml0KTsKK21vZHVsZV9leGl0KGFjcGlfcG93ZXJfbWV0ZXJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDJjYzRiMzAuLmMyZDRkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC01OSw2ICs1OSw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0NMQVNTCQkicHJvY2Vzc29yIgogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9ERVZJQ0VfTkFNRQkiUHJvY2Vzc29yIgogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9GSUxFX0lORk8JImluZm8iCkBAIC03OSw5ICs4MSwxMCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisjZW5kaWYKIHN0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KTsKIHN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3Byb2Nlc3Nvcl9ob3RhZGRfaW5pdChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqcF9jcHUpOwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9oYW5kbGVfZWplY3Qoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CkBAIC0xMDEsNyArMTA0LDYgQEAKIAkub3BzID0gewogCQkuYWRkID0gYWNwaV9wcm9jZXNzb3JfYWRkLAogCQkucmVtb3ZlID0gYWNwaV9wcm9jZXNzb3JfcmVtb3ZlLAotCQkuc3RhcnQgPSBhY3BpX3Byb2Nlc3Nvcl9zdGFydCwKIAkJLnN1c3BlbmQgPSBhY3BpX3Byb2Nlc3Nvcl9zdXNwZW5kLAogCQkucmVzdW1lID0gYWNwaV9wcm9jZXNzb3JfcmVzdW1lLAogCQkubm90aWZ5ID0gYWNwaV9wcm9jZXNzb3Jfbm90aWZ5LApAQCAtMTEwLDcgKzExMiw3IEBACiAKICNkZWZpbmUgSU5TVEFMTF9OT1RJRllfSEFORExFUgkJMQogI2RlZmluZSBVTklOU1RBTExfTk9USUZZX0hBTkRMRVIJMgotCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3Byb2Nlc3Nvcl9pbmZvX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3Byb2Nlc3Nvcl9pbmZvX29wZW5fZnMsCkBAIC0xMTgsNiArMTIwLDcgQEAKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OworI2VuZGlmCiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqLCBwcm9jZXNzb3JzKTsKIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEgZXJyYXRhIF9fcmVhZF9tb3N0bHk7CkBAIC0zMTYsNiArMzE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTIEludGVyZmFjZSAoL3Byb2MpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICphY3BpX3Byb2Nlc3Nvcl9kaXIgPSBOVUxMOwogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2luZm9fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKQEAgLTM4OCw3ICszOTIsNiBAQAogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KLQogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9yZW1vdmVfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAKQEAgLTQwNSw2ICs0MDgsMTYgQEAKIAogCXJldHVybiAwOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfcHJvY2Vzc29yX2FkZF9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfcHJvY2Vzc29yX3JlbW92ZV9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiBVc2UgdGhlIGFjcGlpZCBpbiBNQURUIHRvIG1hcCBjcHVzIGluIGNhc2Ugb2YgU01QICovCiAKQEAgLTY5OCw5MiArNzExLDYgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHZvaWQgKiwgcHJvY2Vzc29yX2RldmljZV9hcnJheSk7CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IGFjcGlfcHJvY2Vzc29yX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQotewotCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7Ci0Jc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKLQotCXByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCi0JcmVzdWx0ID0gYWNwaV9wcm9jZXNzb3JfZ2V0X2luZm8oZGV2aWNlKTsKLQlpZiAocmVzdWx0KSB7Ci0JCS8qIFByb2Nlc3NvciBpcyBwaHlzaWNhbGx5IG5vdCBwcmVzZW50ICovCi0JCXJldHVybiAwOwotCX0KLQotCUJVR19PTigocHItPmlkID49IG5yX2NwdV9pZHMpIHx8IChwci0+aWQgPCAwKSk7Ci0KLQkvKgotCSAqIEJ1Z2d5IEJJT1MgY2hlY2sKLQkgKiBBQ1BJIGlkIG9mIHByb2Nlc3NvcnMgY2FuIGJlIHJlcG9ydGVkIHdyb25nbHkgYnkgdGhlIEJJT1MuCi0JICogRG9uJ3QgdHJ1c3QgaXQgYmxpbmRseQotCSAqLwotCWlmIChwZXJfY3B1KHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXksIHByLT5pZCkgIT0gTlVMTCAmJgotCSAgICBwZXJfY3B1KHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXksIHByLT5pZCkgIT0gZGV2aWNlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgcmVwb3J0ZWQgd3JvbmcgQUNQSSBpZCAiCi0JCQkiZm9yIHRoZSBwcm9jZXNzb3JcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcGVyX2NwdShwcm9jZXNzb3JfZGV2aWNlX2FycmF5LCBwci0+aWQpID0gZGV2aWNlOwotCi0JcGVyX2NwdShwcm9jZXNzb3JzLCBwci0+aWQpID0gcHI7Ci0KLQlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9hZGRfZnMoZGV2aWNlKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGVuZDsKLQotCXN5c2RldiA9IGdldF9jcHVfc3lzZGV2KHByLT5pZCk7Ci0JaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLCAmc3lzZGV2LT5rb2JqLCAic3lzZGV2IikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyogX1BEQyBjYWxsIHNob3VsZCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlIChpZiByZXFkLikuICovCi0JYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyhwcik7Ci0JYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhwcik7Ci0JYXJjaF9hY3BpX3Byb2Nlc3Nvcl9jbGVhbnVwX3BkYyhwcik7Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKLQlhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQocHIpOwotI2VuZGlmCi0JYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyhwcik7Ci0JYWNwaV9wcm9jZXNzb3JfZ2V0X2xpbWl0X2luZm8ocHIpOwotCi0KLQlhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0KHByLCBkZXZpY2UpOwotCi0JcHItPmNkZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKCJQcm9jZXNzb3IiLCBkZXZpY2UsCi0JCQkJCQkmcHJvY2Vzc29yX2Nvb2xpbmdfb3BzKTsKLQlpZiAoSVNfRVJSKHByLT5jZGV2KSkgewotCQlyZXN1bHQgPSBQVFJfRVJSKHByLT5jZGV2KTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JZGV2X2luZm8oJmRldmljZS0+ZGV2LCAicmVnaXN0ZXJlZCBhcyBjb29saW5nX2RldmljZSVkXG4iLAotCQkgcHItPmNkZXYtPmlkKTsKLQotCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLAotCQkJCSAgICZwci0+Y2Rldi0+ZGV2aWNlLmtvYmosCi0JCQkJICAgInRoZXJtYWxfY29vbGluZyIpOwotCWlmIChyZXN1bHQpCi0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkNyZWF0ZSBzeXNmcyBsaW5rXG4iKTsKLQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmcHItPmNkZXYtPmRldmljZS5rb2JqLAotCQkJCSAgICZkZXZpY2UtPmRldi5rb2JqLAotCQkJCSAgICJkZXZpY2UiKTsKLQlpZiAocmVzdWx0KQotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDcmVhdGUgc3lzZnMgbGlua1xuIik7Ci0KLQlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKHN1cHBvcnRzIiwKLQkJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwotCQlwcmludGsoIiAlZCB0aHJvdHRsaW5nIHN0YXRlcyIsIHByLT50aHJvdHRsaW5nLnN0YXRlX2NvdW50KTsKLQkJcHJpbnRrKCIpXG4iKTsKLQl9Ci0KLSAgICAgIGVuZDoKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CkBAIC04NDYsMTAgKzc3Myw4IEBACiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKLQotCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXY7CiAKIAlwciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciksIEdGUF9LRVJORUwpOwogCWlmICghcHIpCkBAIC04NjUsNyArNzkwLDEwMCBAQAogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1BST0NFU1NPUl9DTEFTUyk7CiAJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IHByOwogCisJcmVzdWx0ID0gYWNwaV9wcm9jZXNzb3JfZ2V0X2luZm8oZGV2aWNlKTsKKwlpZiAocmVzdWx0KSB7CisJCS8qIFByb2Nlc3NvciBpcyBwaHlzaWNhbGx5IG5vdCBwcmVzZW50ICovCisJCXJldHVybiAwOworCX0KKworCUJVR19PTigocHItPmlkID49IG5yX2NwdV9pZHMpIHx8IChwci0+aWQgPCAwKSk7CisKKwkvKgorCSAqIEJ1Z2d5IEJJT1MgY2hlY2sKKwkgKiBBQ1BJIGlkIG9mIHByb2Nlc3NvcnMgY2FuIGJlIHJlcG9ydGVkIHdyb25nbHkgYnkgdGhlIEJJT1MuCisJICogRG9uJ3QgdHJ1c3QgaXQgYmxpbmRseQorCSAqLworCWlmIChwZXJfY3B1KHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXksIHByLT5pZCkgIT0gTlVMTCAmJgorCSAgICBwZXJfY3B1KHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXksIHByLT5pZCkgIT0gZGV2aWNlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgcmVwb3J0ZWQgd3JvbmcgQUNQSSBpZCAiCisJCQkiZm9yIHRoZSBwcm9jZXNzb3JcbiIpOworCQlyZXN1bHQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2NwdW1hc2s7CisJfQorCXBlcl9jcHUocHJvY2Vzc29yX2RldmljZV9hcnJheSwgcHItPmlkKSA9IGRldmljZTsKKworCXBlcl9jcHUocHJvY2Vzc29ycywgcHItPmlkKSA9IHByOworCisJcmVzdWx0ID0gYWNwaV9wcm9jZXNzb3JfYWRkX2ZzKGRldmljZSk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBlcnJfZnJlZV9jcHVtYXNrOworCisJc3lzZGV2ID0gZ2V0X2NwdV9zeXNkZXYocHItPmlkKTsKKwlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosICZzeXNkZXYtPmtvYmosICJzeXNkZXYiKSkgeworCQlyZXN1bHQgPSAtRUZBVUxUOworCQlnb3RvIGVycl9yZW1vdmVfZnM7CisJfQorCisJLyogX1BEQyBjYWxsIHNob3VsZCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlIChpZiByZXFkLikuICovCisJYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyhwcik7CisJYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhwcik7CisJYXJjaF9hY3BpX3Byb2Nlc3Nvcl9jbGVhbnVwX3BkYyhwcik7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQocHIpOworI2VuZGlmCisJYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyhwcik7CisJYWNwaV9wcm9jZXNzb3JfZ2V0X2xpbWl0X2luZm8ocHIpOworCisKKwlhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0KHByLCBkZXZpY2UpOworCisJcHItPmNkZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKCJQcm9jZXNzb3IiLCBkZXZpY2UsCisJCQkJCQkmcHJvY2Vzc29yX2Nvb2xpbmdfb3BzKTsKKwlpZiAoSVNfRVJSKHByLT5jZGV2KSkgeworCQlyZXN1bHQgPSBQVFJfRVJSKHByLT5jZGV2KTsKKwkJZ290byBlcnJfcG93ZXJfZXhpdDsKKwl9CisKKwlkZXZfaW5mbygmZGV2aWNlLT5kZXYsICJyZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCisJCSBwci0+Y2Rldi0+aWQpOworCisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosCisJCQkJICAgJnByLT5jZGV2LT5kZXZpY2Uua29iaiwKKwkJCQkgICAidGhlcm1hbF9jb29saW5nIik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDcmVhdGUgc3lzZnMgbGlua1xuIik7CisJCWdvdG8gZXJyX3RoZXJtYWxfdW5yZWdpc3RlcjsKKwl9CisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJnByLT5jZGV2LT5kZXZpY2Uua29iaiwKKwkJCQkgICAmZGV2aWNlLT5kZXYua29iaiwKKwkJCQkgICAiZGV2aWNlIik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDcmVhdGUgc3lzZnMgbGlua1xuIik7CisJCWdvdG8gZXJyX3JlbW92ZV9zeXNmczsKKwl9CisKKwlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKHN1cHBvcnRzIiwKKwkJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOworCQlwcmludGsoIiAlZCB0aHJvdHRsaW5nIHN0YXRlcyIsIHByLT50aHJvdHRsaW5nLnN0YXRlX2NvdW50KTsKKwkJcHJpbnRrKCIpXG4iKTsKKwl9CisKIAlyZXR1cm4gMDsKKworZXJyX3JlbW92ZV9zeXNmczoKKwlzeXNmc19yZW1vdmVfbGluaygmZGV2aWNlLT5kZXYua29iaiwgInRoZXJtYWxfY29vbGluZyIpOworZXJyX3RoZXJtYWxfdW5yZWdpc3RlcjoKKwl0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIocHItPmNkZXYpOworZXJyX3Bvd2VyX2V4aXQ6CisJYWNwaV9wcm9jZXNzb3JfcG93ZXJfZXhpdChwciwgZGV2aWNlKTsKK2Vycl9yZW1vdmVfZnM6CisJYWNwaV9wcm9jZXNzb3JfcmVtb3ZlX2ZzKGRldmljZSk7CitlcnJfZnJlZV9jcHVtYXNrOgorCWZyZWVfY3B1bWFza192YXIocHItPnRocm90dGxpbmcuc2hhcmVkX2NwdV9tYXApOworCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQpAQCAtOTQyLDcgKzk2MCw2IEBACiB7CiAJYWNwaV9oYW5kbGUgcGhhbmRsZTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKIAogCiAJaWYgKGFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwaGFuZGxlKSkgewpAQCAtOTU3LDE1ICs5NzQsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlhY3BpX2J1c19zdGFydCgqZGV2aWNlKTsKLQotCXByID0gYWNwaV9kcml2ZXJfZGF0YSgqZGV2aWNlKTsKLQlpZiAoIXByKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICgocHItPmlkID49IDApICYmIChwci0+aWQgPCBucl9jcHVfaWRzKSkgewotCQlrb2JqZWN0X3VldmVudCgmKCpkZXZpY2UpLT5kZXYua29iaiwgS09CSl9PTkxJTkUpOwotCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTk1LDI1ICsxMDAzLDYgQEAKIAkJCQkJICAgICJVbmFibGUgdG8gYWRkIHRoZSBkZXZpY2VcbiIpOwogCQkJYnJlYWs7CiAJCX0KLQotCQlwciA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQkJaWYgKCFwcikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRHJpdmVyIGRhdGEgaXMgTlVMTFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChwci0+aWQgPj0gMCAmJiAocHItPmlkIDwgbnJfY3B1X2lkcykpIHsKLQkJCWtvYmplY3RfdWV2ZW50KCZkZXZpY2UtPmRldi5rb2JqLCBLT0JKX09GRkxJTkUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9zdGFydChkZXZpY2UpOwotCQlpZiAoKCFyZXN1bHQpICYmICgocHItPmlkID49IDApICYmIChwci0+aWQgPCBucl9jcHVfaWRzKSkpIHsKLQkJCWtvYmplY3RfdWV2ZW50KCZkZXZpY2UtPmRldi5rb2JqLCBLT0JKX09OTElORSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJEZXZpY2UgWyVzXSBmYWlsZWQgdG8gc3RhcnRcbiIsCi0JCQkJICAgIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpKTsKLQkJfQogCQlicmVhazsKIAljYXNlIEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1Q6CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKQEAgLTEwMzAsOSArMTAxOSw2IEBACiAJCQkJICAgICJEcml2ZXIgZGF0YSBpcyBOVUxMLCBkcm9wcGluZyBFSkVDVFxuIik7CiAJCQlyZXR1cm47CiAJCX0KLQotCQlpZiAoKHByLT5pZCA8IG5yX2NwdV9pZHMpICYmIChjcHVfcHJlc2VudChwci0+aWQpKSkKLQkJCWtvYmplY3RfdWV2ZW50KCZkZXZpY2UtPmRldi5rb2JqLCBLT0JKX09GRkxJTkUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCkBAIC0xMTYxLDExICsxMTQ3LDExIEBACiAJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmbWFkdCkpKQogCQltYWR0ID0gTlVMTDsKICNlbmRpZgotCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJYWNwaV9wcm9jZXNzb3JfZGlyID0gcHJvY19ta2RpcihBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX3Byb2Nlc3Nvcl9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwotCisjZW5kaWYKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBETUkgdGFibGUuIElmIHllcywgT1NQTQogCSAqIHNob3VsZCBub3QgdXNlIG13YWl0IGZvciBDUFUtc3RhdGVzLgpAQCAtMTE5Myw3ICsxMTc5LDkgQEAKIAljcHVpZGxlX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2lkbGVfZHJpdmVyKTsKIAogb3V0X3Byb2M6CisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9QUk9DRVNTT1JfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOworI2VuZGlmCiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTIxMyw3ICsxMjAxLDkgQEAKIAogCWNwdWlkbGVfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfaWRsZV9kcml2ZXIpOwogCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9QUk9DRVNTT1JfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOworI2VuZGlmCiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCmluZGV4IDY2MzkzZDUuLmNjNjFhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCkBAIC02MCw2ICs2MCw4IEBACiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ0xBU1MgICAgICAgICAgICAicHJvY2Vzc29yIgogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgICAgICBBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInByb2Nlc3Nvcl9pZGxlIik7CkBAIC02ODAsNiArNjgyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBzZXEtPnByaXZhdGU7CkBAIC03NTksNyArNzYyLDcgQEAKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwotCisjZW5kaWYKIAogLyoqCiAgKiBhY3BpX2lkbGVfYm1fY2hlY2sgLSBjaGVja3MgaWYgYnVzIG1hc3RlciBhY3Rpdml0eSB3YXMgZGV0ZWN0ZWQKQEAgLTExNjAsNyArMTE2Myw5IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKIAlzdGF0aWMgaW50IGZpcnN0X3J1bjsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyNlbmRpZgogCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKGJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGUpCkBAIC0xMjE3LDcgKzEyMjIsNyBAQAogCQkJCSAgICAgICBwci0+cG93ZXIuc3RhdGVzW2ldLnR5cGUpOwogCQlwcmludGsoIilcbiIpOwogCX0KLQorI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCS8qICdwb3dlcicgW1JdICovCiAJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKEFDUElfUFJPQ0VTU09SX0ZJTEVfUE9XRVIsCiAJCQkJIFNfSVJVR08sIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLApAQCAtMTIyNSw2ICsxMjMwLDcgQEAKIAkJCQkgYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC0xMjM3LDkgKzEyNDMsMTEgQEAKIAljcHVpZGxlX3VucmVnaXN0ZXJfZGV2aWNlKCZwci0+cG93ZXIuZGV2KTsKIAlwci0+ZmxhZ3MucG93ZXJfc2V0dXBfZG9uZSA9IDA7CiAKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlpZiAoYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfUFJPQ0VTU09SX0ZJTEVfUE9XRVIsCiAJCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CisjZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwppbmRleCA2MGU1NDNkLi4xMTA4OGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9DTEFTUwkJInByb2Nlc3NvciIKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfRklMRV9QRVJGT1JNQU5DRQkicGVyZm9ybWFuY2UiCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwppbmRleCAzMWFkZGExLi4xNDBjNWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9DTEFTUyAgICAgICAgICAgICJwcm9jZXNzb3IiCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgICAgIEFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgicHJvY2Vzc29yX3RoZXJtYWwiKTsKQEAgLTQzOCw3ICs0NDAsNyBAQAogfTsKIAogLyogL3Byb2MgaW50ZXJmYWNlICovCi0KKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfbGltaXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqKXNlcS0+cHJpdmF0ZTsKQEAgLTUxNywzICs1MTksNCBAQAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggYWUzOTc5Ny4uY2U3Y2YzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ0xBU1MgICAgICAgICAgICAicHJvY2Vzc29yIgogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgICAgICBBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInByb2Nlc3Nvcl90aHJvdHRsaW5nIik7CkBAIC0xMjE2LDcgKzEyMTgsNyBAQAogfQogCiAvKiBwcm9jIGludGVyZmFjZSAqLwotCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsCiAJCQkJCSAgICAgIHZvaWQgKm9mZnNldCkKIHsKQEAgLTEzMjQsMyArMTMyNiw0IEBACiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IDRiMjE0YjcuLjUyYjlkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTQ2LDYgKzQ2LDggQEAKIAogI2luY2x1ZGUgInNic2hjLmgiCiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9TQlNfQ0xBU1MJCQkic2JzIgogI2RlZmluZSBBQ1BJX0FDX0NMQVNTCQkJImFjX2FkYXB0ZXIiCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9DTEFTUwkJImJhdHRlcnkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzaGMuYyBiL2RyaXZlcnMvYWNwaS9zYnNoYy5jCmluZGV4IDA2MTk3MzQuLmQ5MzM5ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnNoYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnNoYy5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSAic2JzaGMuaCIKIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX1NNQl9IQ19DTEFTUwkic21idXNfaG9zdF9jb250cm9sbGVyIgogI2RlZmluZSBBQ1BJX1NNQl9IQ19ERVZJQ0VfTkFNRQkiQUNQSSBTTUJ1cyBIQyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggMzE4YjFlYS4uNDA4ZWJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC02MCwxMyArNjAsMTMgQEAKIAl9CiAKIAlpZiAoYWNwaV9kZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkX2xpc3Q7CisJCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwogCQlpbnQgaTsKIAogCQljaWRfbGlzdCA9IGFjcGlfZGV2LT5wbnAuY2lkX2xpc3Q7CiAJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewogCQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCi0JCQkJCSBjaWRfbGlzdC0+aWRbaV0udmFsdWUpOworCQkJCQkgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpOwogCQkJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+PSBzaXplKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJXMgY2lkWyVpXSBleGNlZWRzIGV2ZW50IGJ1ZmZlciBzaXplIiwKIAkJCQkgICAgICAgYWNwaV9kZXYtPnBucC5kZXZpY2VfbmFtZSwgaSk7CkBAIC0yODcsMTQgKzI4NywxNCBAQAogCX0KIAogCWlmIChkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkX2xpc3QgPSBkZXZpY2UtPnBucC5jaWRfbGlzdDsKKwkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3QgPSBkZXZpY2UtPnBucC5jaWRfbGlzdDsKIAkJaW50IGk7CiAKIAkJZm9yIChpZCA9IGlkczsgaWQtPmlkWzBdOyBpZCsrKSB7CiAJCQkvKiBjb21wYXJlIG11bHRpcGxlIF9DSUQgZW50cmllcyBhZ2FpbnN0IGRyaXZlciBpZHMgKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewogCQkJCWlmICghc3RyY21wKChjaGFyKilpZC0+aWQsCi0JCQkJCSAgICBjaWRfbGlzdC0+aWRbaV0udmFsdWUpKQorCQkJCQkgICAgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpKQogCQkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMzA5LDYgKzMwOSwxMCBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOwogCiAJa2ZyZWUoYWNwaV9kZXYtPnBucC5jaWRfbGlzdCk7CisJaWYgKGFjcGlfZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkKKwkJa2ZyZWUoYWNwaV9kZXYtPnBucC5oYXJkd2FyZV9pZCk7CisJaWYgKGFjcGlfZGV2LT5mbGFncy51bmlxdWVfaWQpCisJCWtmcmVlKGFjcGlfZGV2LT5wbnAudW5pcXVlX2lkKTsKIAlrZnJlZShhY3BpX2Rldik7CiB9CiAKQEAgLTM2Niw3ICszNzAsOCBAQAogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gZGF0YTsKIAotCWFjcGlfZGV2aWNlX25vdGlmeShkZXZpY2UtPmhhbmRsZSwgQUNQSV9GSVhFRF9IQVJEV0FSRV9FVkVOVCwgZGV2aWNlKTsKKwkvKiBGaXhlZCBoYXJkd2FyZSBkZXZpY2VzIGhhdmUgbm8gaGFuZGxlcyAqLworCWFjcGlfZGV2aWNlX25vdGlmeShOVUxMLCBBQ1BJX0ZJWEVEX0hBUkRXQVJFX0VWRU5ULCBkZXZpY2UpOwogCXJldHVybiBBRV9PSzsKIH0KIApAQCAtNDI2LDkgKzQzMSw2IEBACiAJCWlmIChhY3BpX2Rydi0+b3BzLm5vdGlmeSkgewogCQkJcmV0ID0gYWNwaV9kZXZpY2VfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihhY3BpX2Rldik7CiAJCQlpZiAocmV0KSB7Ci0JCQkJaWYgKGFjcGlfZHJ2LT5vcHMuc3RvcCkKLQkJCQkJYWNwaV9kcnYtPm9wcy5zdG9wKGFjcGlfZGV2LAotCQkJCQkJICAgYWNwaV9kZXYtPnJlbW92YWxfdHlwZSk7CiAJCQkJaWYgKGFjcGlfZHJ2LT5vcHMucmVtb3ZlKQogCQkJCQlhY3BpX2Rydi0+b3BzLnJlbW92ZShhY3BpX2RldiwKIAkJCQkJCSAgICAgYWNwaV9kZXYtPnJlbW92YWxfdHlwZSk7CkBAIC00NTIsOCArNDU0LDYgQEAKIAlpZiAoYWNwaV9kcnYpIHsKIAkJaWYgKGFjcGlfZHJ2LT5vcHMubm90aWZ5KQogCQkJYWNwaV9kZXZpY2VfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGFjcGlfZGV2KTsKLQkJaWYgKGFjcGlfZHJ2LT5vcHMuc3RvcCkKLQkJCWFjcGlfZHJ2LT5vcHMuc3RvcChhY3BpX2RldiwgYWNwaV9kZXYtPnJlbW92YWxfdHlwZSk7CiAJCWlmIChhY3BpX2Rydi0+b3BzLnJlbW92ZSkKIAkJCWFjcGlfZHJ2LT5vcHMucmVtb3ZlKGFjcGlfZGV2LCBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKIAl9CkBAIC02ODcsNyArNjg3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfYnVzX2dldF9lamQpOwogCi12b2lkIGFjcGlfYnVzX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmdW5jdGlvbiwgdm9pZCAqY29udGV4dCkKK3ZvaWQgYWNwaV9idXNfZGF0YV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwgdm9pZCAqY29udGV4dCkKIHsKIAogCS8qIFRCRCAqLwpAQCAtMTAwMCwzMyArMTAwMCw4OSBAQAogCXJldHVybiBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRENLIiwgJnRtcCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0KgorYWNwaV9hZGRfY2lkKAorCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICAgICAgICAgKmluZm8sCisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgICAgICAgICAqbmV3X2NpZCkKK3sKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICAgICpjaWQ7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dF9pZF9zdHJpbmc7CisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBjaWRfbGVuZ3RoOworCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NpZF9sZW5ndGg7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworCisKKwkvKiBBbGxvY2F0ZSBuZXcgQ0lEIGxpc3Qgd2l0aCByb29tIGZvciB0aGUgbmV3IENJRCAqLworCisJaWYgKCFuZXdfY2lkKQorCQluZXdfY2lkX2xlbmd0aCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemU7CisJZWxzZSBpZiAoaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmxpc3Rfc2l6ZSkKKwkJbmV3X2NpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplICsKKwkJCW5ld19jaWQtPmxlbmd0aCArIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCk7CisJZWxzZQorCQluZXdfY2lkX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0KSArIG5ld19jaWQtPmxlbmd0aDsKKworCWNpZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKG5ld19jaWRfbGVuZ3RoKTsKKwlpZiAoIWNpZCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljaWQtPmxpc3Rfc2l6ZSA9IG5ld19jaWRfbGVuZ3RoOworCWNpZC0+Y291bnQgPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuY291bnQ7CisJaWYgKG5ld19jaWQpCisJCWNpZC0+Y291bnQrKzsKKwluZXh0X2lkX3N0cmluZyA9IChjaGFyICopIGNpZC0+aWRzICsgKGNpZC0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpKTsKKworCS8qIENvcHkgYWxsIGV4aXN0aW5nIENJRHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuY291bnQ7IGkrKykgeworCQljaWRfbGVuZ3RoID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmlkc1tpXS5sZW5ndGg7CisJCWNpZC0+aWRzW2ldLnN0cmluZyA9IG5leHRfaWRfc3RyaW5nOworCQljaWQtPmlkc1tpXS5sZW5ndGggPSBjaWRfbGVuZ3RoOworCisJCUFDUElfTUVNQ1BZKG5leHRfaWRfc3RyaW5nLCBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuaWRzW2ldLnN0cmluZywKKwkJCWNpZF9sZW5ndGgpOworCisJCW5leHRfaWRfc3RyaW5nICs9IGNpZF9sZW5ndGg7CisJfQorCisJLyogQXBwZW5kIHRoZSBuZXcgQ0lEICovCisKKwlpZiAobmV3X2NpZCkgeworCQljaWQtPmlkc1tpXS5zdHJpbmcgPSBuZXh0X2lkX3N0cmluZzsKKwkJY2lkLT5pZHNbaV0ubGVuZ3RoID0gbmV3X2NpZC0+bGVuZ3RoOworCisJCUFDUElfTUVNQ1BZKG5leHRfaWRfc3RyaW5nLCBuZXdfY2lkLT5zdHJpbmcsIG5ld19jaWQtPmxlbmd0aCk7CisJfQorCisJcmV0dXJuIGNpZDsKK30KKwogc3RhdGljIHZvaWQgYWNwaV9kZXZpY2Vfc2V0X2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsCiAJCQkgICAgICAgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbyA9IE5VTEw7CiAJY2hhciAqaGlkID0gTlVMTDsKIAljaGFyICp1aWQgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkX2xpc3QgPSBOVUxMOwotCWNvbnN0IGNoYXIgKmNpZF9hZGQgPSBOVUxMOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gTlVMTDsKKwljaGFyICpjaWRfYWRkID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFDUElfQlVTX1RZUEVfREVWSUNFOgotCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpOworCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICIlczogRXJyb3IgcmVhZGluZyBkZXZpY2UgaW5mb1xuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkKLQkJCWhpZCA9IGluZm8tPmhhcmR3YXJlX2lkLnZhbHVlOworCQkJaGlkID0gaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nOwogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX1VJRCkKLQkJCXVpZCA9IGluZm8tPnVuaXF1ZV9pZC52YWx1ZTsKKwkJCXVpZCA9IGluZm8tPnVuaXF1ZV9pZC5zdHJpbmc7CiAJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQ0lEKQotCQkJY2lkX2xpc3QgPSAmaW5mby0+Y29tcGF0aWJpbGl0eV9pZDsKKwkJCWNpZF9saXN0ID0gJmluZm8tPmNvbXBhdGlibGVfaWRfbGlzdDsKIAkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9BRFIpIHsKIAkJCWRldmljZS0+cG5wLmJ1c19hZGRyZXNzID0gaW5mby0+YWRkcmVzczsKIAkJCWRldmljZS0+ZmxhZ3MuYnVzX2FkZHJlc3MgPSAxOwpAQCAtMTA3Nyw1NSArMTEzMyw0NiBAQAogCX0KIAogCWlmIChoaWQpIHsKLQkJc3RyY3B5KGRldmljZS0+cG5wLmhhcmR3YXJlX2lkLCBoaWQpOwotCQlkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkID0gMTsKLQl9Ci0JaWYgKHVpZCkgewotCQlzdHJjcHkoZGV2aWNlLT5wbnAudW5pcXVlX2lkLCB1aWQpOwotCQlkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCA9IDE7Ci0JfQotCWlmIChjaWRfbGlzdCB8fCBjaWRfYWRkKSB7Ci0JCXN0cnVjdCAgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgKmxpc3Q7Ci0JCWludCBzaXplID0gMDsKLQkJaW50IGNvdW50ID0gMDsKLQotCQlpZiAoY2lkX2xpc3QpIHsKLQkJCXNpemUgPSBjaWRfbGlzdC0+c2l6ZTsKLQkJfSBlbHNlIGlmIChjaWRfYWRkKSB7Ci0JCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCk7Ci0JCQljaWRfbGlzdCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIHNpemUpOwotCQkJaWYgKCFjaWRfbGlzdCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQkJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQkJCQlyZXR1cm47Ci0JCQl9IGVsc2UgewotCQkJCWNpZF9saXN0LT5jb3VudCA9IDA7Ci0JCQkJY2lkX2xpc3QtPnNpemUgPSBzaXplOwotCQkJfQorCQlkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHN0cmxlbiAoaGlkKSArIDEpOworCQlpZiAoZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQpIHsKKwkJCXN0cmNweShkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCwgaGlkKTsKKwkJCWRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQgPSAxOwogCQl9Ci0JCWlmIChjaWRfYWRkKQotCQkJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCk7Ci0JCWxpc3QgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCX0KKwlpZiAoIWRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQpCisJCWRldmljZS0+cG5wLmhhcmR3YXJlX2lkID0gIiI7CisKKwlpZiAodWlkKSB7CisJCWRldmljZS0+cG5wLnVuaXF1ZV9pZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHN0cmxlbiAodWlkKSArIDEpOworCQlpZiAoZGV2aWNlLT5wbnAudW5pcXVlX2lkKSB7CisJCQlzdHJjcHkoZGV2aWNlLT5wbnAudW5pcXVlX2lkLCB1aWQpOworCQkJZGV2aWNlLT5mbGFncy51bmlxdWVfaWQgPSAxOworCQl9CisJfQorCWlmICghZGV2aWNlLT5mbGFncy51bmlxdWVfaWQpCisJCWRldmljZS0+cG5wLnVuaXF1ZV9pZCA9ICIiOworCisJaWYgKGNpZF9saXN0IHx8IGNpZF9hZGQpIHsKKwkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqbGlzdDsKKworCQlpZiAoY2lkX2FkZCkgeworCQkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgY2lkOworCQkJY2lkLmxlbmd0aCA9IHN0cmxlbiAoY2lkX2FkZCkgKyAxOworCQkJY2lkLnN0cmluZyA9IGNpZF9hZGQ7CisKKwkJCWxpc3QgPSBhY3BpX2FkZF9jaWQoaW5mbywgJmNpZCk7CisJCX0gZWxzZSB7CisJCQlsaXN0ID0gYWNwaV9hZGRfY2lkKGluZm8sIE5VTEwpOworCQl9CiAKIAkJaWYgKGxpc3QpIHsKLQkJCWlmIChjaWRfbGlzdCkgewotCQkJCW1lbWNweShsaXN0LCBjaWRfbGlzdCwgY2lkX2xpc3QtPnNpemUpOwotCQkJCWNvdW50ID0gY2lkX2xpc3QtPmNvdW50OwotCQkJfQotCQkJaWYgKGNpZF9hZGQpIHsKLQkJCQlzdHJuY3B5KGxpc3QtPmlkW2NvdW50XS52YWx1ZSwgY2lkX2FkZCwKLQkJCQkJQUNQSV9NQVhfQ0lEX0xFTkdUSCk7Ci0JCQkJY291bnQrKzsKLQkJCQlkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzID0gMTsKLQkJCX0KLQkJCWxpc3QtPnNpemUgPSBzaXplOwotCQkJbGlzdC0+Y291bnQgPSBjb3VudDsKIAkJCWRldmljZS0+cG5wLmNpZF9saXN0ID0gbGlzdDsKLQkJfSBlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisJCQlpZiAoY2lkX2FkZCkKKwkJCQlkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzID0gMTsKKwkJfQogCX0KIAotCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlrZnJlZShpbmZvKTsKIH0KIAogc3RhdGljIGludCBhY3BpX2RldmljZV9zZXRfY29udGV4dChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCkBAIC0xMjY1LDE2ICsxMzEyLDYgQEAKIAlhY3BpX2RldmljZV9zZXRfaWQoZGV2aWNlLCBwYXJlbnQsIGhhbmRsZSwgdHlwZSk7CiAKIAkvKgotCSAqIFRoZSBBQ1BJIGRldmljZSBpcyBhdHRhY2hlZCB0byBhY3BpIGhhbmRsZSBiZWZvcmUgZ2V0dGluZwotCSAqIHRoZSBwb3dlci93YWtldXAvcGVmb3JtYW5jZSBmbGFncy4gT3RoZXJ3aXNlIE9TIGNhbid0IGdldAotCSAqIHRoZSBjb3JyZXNwb25kaW5nIEFDUEkgZGV2aWNlIGJ5IHRoZSBhY3BpIGhhbmRsZSBpbiB0aGUgY291cnNlCi0JICogb2YgZ2V0dGluZyB0aGUgcG93ZXIvd2FrZXVwL3BlcmZvcm1hbmNlIGZsYWdzLgotCSAqLwotCXJlc3VsdCA9IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KGRldmljZSwgdHlwZSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBlbmQ7Ci0KLQkvKgogCSAqIFBvd2VyIE1hbmFnZW1lbnQKIAkgKiAtLS0tLS0tLS0tLS0tLS0tCiAJICovCkBAIC0xMzA0LDYgKzEzNDEsOCBAQAogCQkJZ290byBlbmQ7CiAJfQogCisJaWYgKChyZXN1bHQgPSBhY3BpX2RldmljZV9zZXRfY29udGV4dChkZXZpY2UsIHR5cGUpKSkKKwkJZ290byBlbmQ7CiAKIAlyZXN1bHQgPSBhY3BpX2RldmljZV9yZWdpc3RlcihkZXZpY2UsIHBhcmVudCk7CiAKQEAgLTEzMTgsMTAgKzEzNTcsOCBAQAogZW5kOgogCWlmICghcmVzdWx0KQogCQkqY2hpbGQgPSBkZXZpY2U7Ci0JZWxzZSB7Ci0JCWtmcmVlKGRldmljZS0+cG5wLmNpZF9saXN0KTsKLQkJa2ZyZWUoZGV2aWNlKTsKLQl9CisJZWxzZQorCQlhY3BpX2RldmljZV9yZWxlYXNlKCZkZXZpY2UtPmRldik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCBmZWVjZTY5Li5hOTBhZmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtNDA1LDYgKzQwNSwxNCBAQAogCQl9LAogCX0sCiAJeworCS5jYWxsYmFjayA9IGluaXRfc2V0X3NjaV9lbl9vbl9yZXN1bWUsCisJLmlkZW50ID0gIkhld2xldHQtUGFja2FyZCBIUCBQYXZpbGlvbiBkdjMgTm90ZWJvb2sgUEMiLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjMgTm90ZWJvb2sgUEMiKSwKKwkJfSwKKwl9LAorCXsKIAkuY2FsbGJhY2sgPSBpbml0X29sZF9zdXNwZW5kX29yZGVyaW5nLAogCS5pZGVudCA9ICJQYW5hc29uaWMgQ0Y1MS0yTCIsCiAJLm1hdGNoZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKaW5kZXggOWM2MWFiMi4uZDExMjgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwpAQCAtMzEsNiArMzEsOCBAQAogCiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1NZU1RFTV9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInN5c3RlbSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggNjQ2ZDM5Yy4uZjMzNmJjYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKQEAgLTIxMyw2ICsyMTMsOSBAQAogCXVuc2lnbmVkIGxvbmcgdGFibGVfZW5kOwogCWFjcGlfc2l6ZSB0Ymxfc2l6ZTsKIAorCWlmIChhY3BpX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICghaGFuZGxlcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTI3Nyw2ICsyODAsOSBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOwogCWFjcGlfc2l6ZSB0Ymxfc2l6ZTsKIAorCWlmIChhY3BpX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICghaGFuZGxlcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCmluZGV4IDU2NGVhMTQuLjY1ZjY3ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwpAQCAtNDcsNiArNDcsOCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfVEhFUk1BTF9DTEFTUwkJInRoZXJtYWxfem9uZSIKICNkZWZpbmUgQUNQSV9USEVSTUFMX0RFVklDRV9OQU1FCSJUaGVybWFsIFpvbmUiCiAjZGVmaW5lIEFDUElfVEhFUk1BTF9GSUxFX1NUQVRFCQkic3RhdGUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS91dGlscy5jCmluZGV4IGY4NDQ5NDEuLjgxMWZlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlscy5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQlVTX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgidXRpbHMiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCA2MGVhOTg0Li45NGIxYTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNDAsMTAgKzQwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX1ZJREVPX0NMQVNTCQkidmlkZW8iCiAjZGVmaW5lIEFDUElfVklERU9fQlVTX05BTUUJCSJWaWRlbyBCdXMiCiAjZGVmaW5lIEFDUElfVklERU9fREVWSUNFX05BTUUJCSJWaWRlbyBEZXZpY2UiCkBAIC0xOTgsNyArMjAwLDcgQEAKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzcyAqYnJpZ2h0bmVzczsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OwotCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2OworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjb29saW5nX2RldjsKIAlzdHJ1Y3Qgb3V0cHV0X2RldmljZSAqb3V0cHV0X2RldjsKIH07CiAKQEAgLTM4NywyMCArMzg5LDIwIEBACiAKIAogLyogdGhlcm1hbCBjb29saW5nIGRldmljZSBjYWxsYmFja3MgKi8KLXN0YXRpYyBpbnQgdmlkZW9fZ2V0X21heF9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQKK3N0YXRpYyBpbnQgdmlkZW9fZ2V0X21heF9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY29vbGluZ19kZXYsIHVuc2lnbmVkCiAJCQkgICAgICAgbG9uZyAqc3RhdGUpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY29vbGluZ19kZXYtPmRldmRhdGE7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2aWRlbyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCSpzdGF0ZSA9IHZpZGVvLT5icmlnaHRuZXNzLT5jb3VudCAtIDM7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkZW9fZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQKK3N0YXRpYyBpbnQgdmlkZW9fZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY29vbGluZ19kZXYsIHVuc2lnbmVkCiAJCQkgICAgICAgbG9uZyAqc3RhdGUpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY29vbGluZ19kZXYtPmRldmRhdGE7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2aWRlbyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbGV2ZWw7CiAJaW50IG9mZnNldDsKQEAgLTQxNyw5ICs0MTksOSBAQAogfQogCiBzdGF0aWMgaW50Ci12aWRlb19zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBsb25nIHN0YXRlKQordmlkZW9fc2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY29vbGluZ19kZXYsIHVuc2lnbmVkIGxvbmcgc3RhdGUpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY29vbGluZ19kZXYtPmRldmRhdGE7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2aWRlbyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlpbnQgbGV2ZWw7CiAKQEAgLTYwMyw2ICs2MDUsNyBAQAogCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgKmxldmVsKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWludCBpOwogCiAJaWYgKGRldmljZS0+Y2FwLl9CUUMgfHwgZGV2aWNlLT5jYXAuX0JDUSkgewogCQljaGFyICpidWYgPSBkZXZpY2UtPmNhcC5fQlFDID8gIl9CUUMiIDogIl9CQ1EiOwpAQCAtNjE4LDggKzYyMSwxNSBAQAogCiAJCQl9CiAJCQkqbGV2ZWwgKz0gYnFjX29mZnNldF9hbWxfYnVnX3dvcmthcm91bmQ7Ci0JCQlkZXZpY2UtPmJyaWdodG5lc3MtPmN1cnIgPSAqbGV2ZWw7Ci0JCQlyZXR1cm4gMDsKKwkJCWZvciAoaSA9IDI7IGkgPCBkZXZpY2UtPmJyaWdodG5lc3MtPmNvdW50OyBpKyspCisJCQkJaWYgKGRldmljZS0+YnJpZ2h0bmVzcy0+bGV2ZWxzW2ldID09ICpsZXZlbCkgeworCQkJCQlkZXZpY2UtPmJyaWdodG5lc3MtPmN1cnIgPSAqbGV2ZWw7CisJCQkJCXJldHVybiAwOworCQkJfQorCQkJLyogQlFDIHJldHVybmVkIGFuIGludmFsaWQgbGV2ZWwuIFN0b3AgdXNpbmcgaXQuICAqLworCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiJXMgcmV0dXJuZWQgYW4gaW52YWxpZCBsZXZlbCIsCisJCQkJCQlidWYpKTsKKwkJCWRldmljZS0+Y2FwLl9CUUMgPSBkZXZpY2UtPmNhcC5fQkNRID0gMDsKIAkJfSBlbHNlIHsKIAkJCS8qIEZpeG1lOgogCQkJICogc2hvdWxkIHdlIHJldHVybiBhbiBlcnJvciBvciBpZ25vcmUgdGhpcyBmYWlsdXJlPwpAQCAtODcwLDcgKzg4MCw3IEBACiAJYnItPmZsYWdzLl9CQ01fdXNlX2luZGV4ID0gYnItPmZsYWdzLl9CQ0xfdXNlX2luZGV4OwogCiAJLyogX0JRQyB1c2VzIElOREVYIHdoaWxlIF9CQ0wgdXNlcyBWQUxVRSBpbiBzb21lIGxhcHRvcHMgKi8KLQlici0+Y3VyciA9IGxldmVsX29sZCA9IG1heF9sZXZlbDsKKwlici0+Y3VyciA9IGxldmVsID0gbWF4X2xldmVsOwogCiAJaWYgKCFkZXZpY2UtPmNhcC5fQlFDKQogCQlnb3RvIHNldF9sZXZlbDsKQEAgLTg5MiwxNSArOTAyLDI1IEBACiAKIAlici0+ZmxhZ3MuX0JRQ191c2VfaW5kZXggPSAobGV2ZWwgPT0gbWF4X2xldmVsID8gMCA6IDEpOwogCi0JaWYgKCFici0+ZmxhZ3MuX0JRQ191c2VfaW5kZXgpCisJaWYgKCFici0+ZmxhZ3MuX0JRQ191c2VfaW5kZXgpIHsKKwkJLyoKKwkJICogU2V0IHRoZSBiYWNrbGlnaHQgdG8gdGhlIGluaXRpYWwgc3RhdGUuCisJCSAqIE9uIHNvbWUgYnVnZ3kgbGFwdG9wcywgX0JRQyByZXR1cm5zIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUKKwkJICogd2hlbiBpbnZva2VkIGZvciB0aGUgZmlyc3QgdGltZSwgaS5lLiBsZXZlbF9vbGQgaXMgaW52YWxpZC4KKwkJICogc2V0IHRoZSBiYWNrbGlnaHQgdG8gbWF4X2xldmVsIGluIHRoaXMgY2FzZQorCQkgKi8KKwkJZm9yIChpID0gMjsgaSA8IGJyLT5jb3VudDsgaSsrKQorCQkJaWYgKGxldmVsX29sZCA9PSBici0+bGV2ZWxzW2ldKQorCQkJCWxldmVsID0gbGV2ZWxfb2xkOwogCQlnb3RvIHNldF9sZXZlbDsKKwl9CiAKIAlpZiAoYnItPmZsYWdzLl9CQ0xfcmV2ZXJzZWQpCiAJCWxldmVsX29sZCA9IChici0+Y291bnQgLSAxKSAtIGxldmVsX29sZDsKLQlsZXZlbF9vbGQgPSBici0+bGV2ZWxzW2xldmVsX29sZF07CisJbGV2ZWwgPSBici0+bGV2ZWxzW2xldmVsX29sZF07CiAKIHNldF9sZXZlbDoKLQlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKGRldmljZSwgbGV2ZWxfb2xkKTsKKwlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKGRldmljZSwgbGV2ZWwpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gb3V0X2ZyZWVfbGV2ZWxzOwogCkBAIC05MzQsOSArOTU0LDYgQEAKIHsKIAlhY3BpX2hhbmRsZSBoX2R1bW15MTsKIAotCi0JbWVtc2V0KCZkZXZpY2UtPmNhcCwgMCwgc2l6ZW9mKGRldmljZS0+Y2FwKSk7Ci0KIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0FEUiIsICZoX2R1bW15MSkpKSB7CiAJCWRldmljZS0+Y2FwLl9BRFIgPSAxOwogCX0KQEAgLTk5MCwxOSArMTAwNywyOSBAQAogCQlpZiAocmVzdWx0KQogCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiQ3JlYXRlIHN5c2ZzIGxpbmtcbiIpOwogCi0JCWRldmljZS0+Y2RldiA9IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoIkxDRCIsCisJCWRldmljZS0+Y29vbGluZ19kZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKCJMQ0QiLAogCQkJCQlkZXZpY2UtPmRldiwgJnZpZGVvX2Nvb2xpbmdfb3BzKTsKLQkJaWYgKElTX0VSUihkZXZpY2UtPmNkZXYpKQorCQlpZiAoSVNfRVJSKGRldmljZS0+Y29vbGluZ19kZXYpKSB7CisJCQkvKgorCQkJICogU2V0IGNvb2xpbmdfZGV2IHRvIE5VTEwgc28gd2UgZG9uJ3QgY3Jhc2ggdHJ5aW5nIHRvCisJCQkgKiBmcmVlIGl0LgorCQkJICogQWxzbywgd2h5IHRoZSBoZWxsIHdlIGFyZSByZXR1cm5pbmcgZWFybHkgYW5kCisJCQkgKiBub3QgYXR0ZW1wdCB0byByZWdpc3RlciB2aWRlbyBvdXRwdXQgaWYgY29vbGluZworCQkJICogZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQ/CisJCQkgKiAtLSBkdG9yCisJCQkgKi8KKwkJCWRldmljZS0+Y29vbGluZ19kZXYgPSBOVUxMOwogCQkJcmV0dXJuOworCQl9CiAKIAkJZGV2X2luZm8oJmRldmljZS0+ZGV2LT5kZXYsICJyZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCi0JCQkgZGV2aWNlLT5jZGV2LT5pZCk7CisJCQkgZGV2aWNlLT5jb29saW5nX2Rldi0+aWQpOwogCQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2aWNlLT5kZXYtPmRldi5rb2JqLAotCQkJCSZkZXZpY2UtPmNkZXYtPmRldmljZS5rb2JqLAorCQkJCSZkZXZpY2UtPmNvb2xpbmdfZGV2LT5kZXZpY2Uua29iaiwKIAkJCQkidGhlcm1hbF9jb29saW5nIik7CiAJCWlmIChyZXN1bHQpCiAJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDcmVhdGUgc3lzZnMgbGlua1xuIik7Ci0JCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmNkZXYtPmRldmljZS5rb2JqLAorCQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2aWNlLT5jb29saW5nX2Rldi0+ZGV2aWNlLmtvYmosCiAJCQkJJmRldmljZS0+ZGV2LT5kZXYua29iaiwgImRldmljZSIpOwogCQlpZiAocmVzdWx0KQogCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiQ3JlYXRlIHN5c2ZzIGxpbmtcbiIpOwpAQCAtMTAzOSw3ICsxMDY2LDYgQEAKIHsKIAlhY3BpX2hhbmRsZSBoX2R1bW15MTsKIAotCW1lbXNldCgmdmlkZW8tPmNhcCwgMCwgc2l6ZW9mKHZpZGVvLT5jYXApKTsKIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZSh2aWRlby0+ZGV2aWNlLT5oYW5kbGUsICJfRE9TIiwgJmhfZHVtbXkxKSkpIHsKIAkJdmlkZW8tPmNhcC5fRE9TID0gMTsKIAl9CkBAIC0yMDA5LDEzICsyMDM1LDEzIEBACiAJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UtPmJhY2tsaWdodCk7CiAJCWRldmljZS0+YmFja2xpZ2h0ID0gTlVMTDsKIAl9Ci0JaWYgKGRldmljZS0+Y2RldikgeworCWlmIChkZXZpY2UtPmNvb2xpbmdfZGV2KSB7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXZpY2UtPmRldi0+ZGV2LmtvYmosCiAJCQkJICAidGhlcm1hbF9jb29saW5nIik7Ci0JCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXZpY2UtPmNkZXYtPmRldmljZS5rb2JqLAorCQlzeXNmc19yZW1vdmVfbGluaygmZGV2aWNlLT5jb29saW5nX2Rldi0+ZGV2aWNlLmtvYmosCiAJCQkJICAiZGV2aWNlIik7Ci0JCXRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UtPmNkZXYpOwotCQlkZXZpY2UtPmNkZXYgPSBOVUxMOworCQl0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlLT5jb29saW5nX2Rldik7CisJCWRldmljZS0+Y29vbGluZ19kZXYgPSBOVUxMOwogCX0KIAl2aWRlb19vdXRwdXRfdW5yZWdpc3RlcihkZXZpY2UtPm91dHB1dF9kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKaW5kZXggN2NkMmI2My4uNzAzMmYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiBBQ1BJX01PRFVMRV9OQU1FKCJ2aWRlbyIpOwogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1ZJREVPX0NPTVBPTkVOVAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCAxMjJjNzg2Li5kMGE3ZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTYyNCw3ICs2MjQsNyBAQAogfTsKIAogLyoqCi0gKglodHAzN3hfY2xvY2tfc2xvdAktCVR1cm4gdGltaW5nIHRvIFBDIGNsb2NrIGVudHJ5CisgKglocHQzN3hfY2xvY2tfc2xvdAktCVR1cm4gdGltaW5nIHRvIFBDIGNsb2NrIGVudHJ5CiAgKglAZnJlcTogUmVwb3J0ZWQgZnJlcXVlbmN5IHRpbWluZwogICoJQGJhc2U6IEJhc2UgdGltaW5nCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggMzkwZTY2NC4uNmJlZTZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC0xNjYsMTMgKzE2NiwxNiBAQAogCWlmIChNQUpPUihkZXYtPmRldnQpKSB7CiAJCWNvbnN0IGNoYXIgKnRtcDsKIAkJY29uc3QgY2hhciAqbmFtZTsKKwkJbW9kZV90IG1vZGUgPSAwOwogCiAJCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1BSk9SPSV1IiwgTUFKT1IoZGV2LT5kZXZ0KSk7CiAJCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1JTk9SPSV1IiwgTUlOT1IoZGV2LT5kZXZ0KSk7Ci0JCW5hbWUgPSBkZXZpY2VfZ2V0X25vZGVuYW1lKGRldiwgJnRtcCk7CisJCW5hbWUgPSBkZXZpY2VfZ2V0X2Rldm5vZGUoZGV2LCAmbW9kZSwgJnRtcCk7CiAJCWlmIChuYW1lKSB7CiAJCQlhZGRfdWV2ZW50X3ZhcihlbnYsICJERVZOQU1FPSVzIiwgbmFtZSk7CiAJCQlrZnJlZSh0bXApOworCQkJaWYgKG1vZGUpCisJCQkJYWRkX3VldmVudF92YXIoZW52LCAiREVWTU9ERT0lI28iLCBtb2RlICYgMDc3Nyk7CiAJCX0KIAl9CiAKQEAgLTExNDgsOCArMTE1MSw5IEBACiB9CiAKIC8qKgotICogZGV2aWNlX2dldF9ub2RlbmFtZSAtIHBhdGggb2YgZGV2aWNlIG5vZGUgZmlsZQorICogZGV2aWNlX2dldF9kZXZub2RlIC0gcGF0aCBvZiBkZXZpY2Ugbm9kZSBmaWxlCiAgKiBAZGV2OiBkZXZpY2UKKyAqIEBtb2RlOiByZXR1cm5lZCBmaWxlIGFjY2VzcyBtb2RlCiAgKiBAdG1wOiBwb3NzaWJseSBhbGxvY2F0ZWQgc3RyaW5nCiAgKgogICogUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIG9mIGEgcG9zc2libGUgZGV2aWNlIG5vZGUuCkBAIC0xMTU3LDIxICsxMTYxLDIyIEBACiAgKiBhIG5hbWUuIFRoaXMgbWVtb3J5IGlzIHJldHVybmVkIGluIHRtcCBhbmQgbmVlZHMgdG8gYmUKICAqIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCiAgKi8KLWNvbnN0IGNoYXIgKmRldmljZV9nZXRfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICoqdG1wKQorY29uc3QgY2hhciAqZGV2aWNlX2dldF9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBtb2RlX3QgKm1vZGUsIGNvbnN0IGNoYXIgKip0bXApCiB7CiAJY2hhciAqczsKIAogCSp0bXAgPSBOVUxMOwogCiAJLyogdGhlIGRldmljZSB0eXBlIG1heSBwcm92aWRlIGEgc3BlY2lmaWMgbmFtZSAqLwotCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5ub2RlbmFtZSkKLQkJKnRtcCA9IGRldi0+dHlwZS0+bm9kZW5hbWUoZGV2KTsKKwlpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+ZGV2bm9kZSkKKwkJKnRtcCA9IGRldi0+dHlwZS0+ZGV2bm9kZShkZXYsIG1vZGUpOwogCWlmICgqdG1wKQogCQlyZXR1cm4gKnRtcDsKIAogCS8qIHRoZSBjbGFzcyBtYXkgcHJvdmlkZSBhIHNwZWNpZmljIG5hbWUgKi8KLQlpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5ub2RlbmFtZSkKLQkJKnRtcCA9IGRldi0+Y2xhc3MtPm5vZGVuYW1lKGRldik7CisJaWYgKGRldi0+Y2xhc3MgJiYgZGV2LT5jbGFzcy0+ZGV2bm9kZSkKKwkJKnRtcCA9IGRldi0+Y2xhc3MtPmRldm5vZGUoZGV2LCBtb2RlKTsKIAlpZiAoKnRtcCkKIAkJcmV0dXJuICp0bXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKaW5kZXggZmQ0ODhhZC4uYTFjYjVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKKysrIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKQEAgLTYsOSArNiwxMCBAQAogICogRHVyaW5nIGJvb3R1cCwgYmVmb3JlIGFueSBkcml2ZXIgY29yZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwKICAqIGRldnRtcGZzLCBhIHRtcGZzLWJhc2VkIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4gRXZlcnkgZHJpdmVyLWNvcmUKICAqIGRldmljZSB3aGljaCByZXF1ZXN0cyBhIGRldmljZSBub2RlLCB3aWxsIGFkZCBhIG5vZGUgaW4gdGhpcwotICogZmlsZXN5c3RlbS4gVGhlIG5vZGUgaXMgbmFtZWQgYWZ0ZXIgdGhlIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2UsCi0gKiBvciB0aGUgc3VzYnN5dGVtIGNhbiBwcm92aWRlIGEgY3VzdG9tIG5hbWUuIEFsbCBkZXZpY2VzIGFyZQotICogb3duZWQgYnkgcm9vdCBhbmQgaGF2ZSBhIG1vZGUgb2YgMDYwMC4KKyAqIGZpbGVzeXN0ZW0uCisgKiBCeSBkZWZhdWx0LCBhbGwgZGV2aWNlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHRoZSBuYW1lIG9mIHRoZQorICogZGV2aWNlLCBvd25lZCBieSByb290IGFuZCBoYXZlIGEgZGVmYXVsdCBtb2RlIG9mIDA2MDAuIFN1YnN5c3RlbXMKKyAqIGNhbiBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgc2V0dGluZyBpZiBuZWVkZWQuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmVkLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqZGV2X21udDsKQEAgLTEzNCw3ICsxMzYsNyBAQAogCWNvbnN0IGNoYXIgKnRtcCA9IE5VTEw7CiAJY29uc3QgY2hhciAqbm9kZW5hbWU7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmN1cnJfY3JlZDsKLQltb2RlX3QgbW9kZTsKKwltb2RlX3QgbW9kZSA9IDA7CiAJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycjsKQEAgLTE0MiwxNCArMTQ0LDE2IEBACiAJaWYgKCFkZXZfbW50KQogCQlyZXR1cm4gMDsKIAotCW5vZGVuYW1lID0gZGV2aWNlX2dldF9ub2RlbmFtZShkZXYsICZ0bXApOworCW5vZGVuYW1lID0gZGV2aWNlX2dldF9kZXZub2RlKGRldiwgJm1vZGUsICZ0bXApOwogCWlmICghbm9kZW5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKG1vZGUgPT0gMCkKKwkJbW9kZSA9IDA2MDA7CiAJaWYgKGlzX2Jsb2NrZGV2KGRldikpCi0JCW1vZGUgPSBTX0lGQkxLfDA2MDA7CisJCW1vZGUgfD0gU19JRkJMSzsKIAllbHNlCi0JCW1vZGUgPSBTX0lGQ0hSfDA2MDA7CisJCW1vZGUgfD0gU19JRkNIUjsKIAogCWN1cnJfY3JlZCA9IG92ZXJyaWRlX2NyZWRzKCZpbml0X2NyZWQpOwogCWVyciA9IHZmc19wYXRoX2xvb2t1cChkZXZfbW50LT5tbnRfcm9vdCwgZGV2X21udCwKQEAgLTE2NSw4ICsxNjksMTIgQEAKIAogCWRlbnRyeSA9IGxvb2t1cF9jcmVhdGUoJm5kLCAwKTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKSB7CisJCWludCB1bWFzazsKKworCQl1bWFzayA9IHN5c191bWFzaygwMDAwKTsKIAkJZXJyID0gdmZzX21rbm9kKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLAogCQkJCWRlbnRyeSwgbW9kZSwgZGV2LT5kZXZ0KTsKKwkJc3lzX3VtYXNrKHVtYXNrKTsKIAkJLyogbWFyayBhcyBrZXJuZWwgY3JlYXRlZCBpbm9kZSAqLwogCQlpZiAoIWVycikKIAkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlID0gJmRldl9tbnQ7CkBAIC0yNzEsNyArMjc5LDcgQEAKIAlpZiAoIWRldl9tbnQpCiAJCXJldHVybiAwOwogCi0Jbm9kZW5hbWUgPSBkZXZpY2VfZ2V0X25vZGVuYW1lKGRldiwgJnRtcCk7CisJbm9kZW5hbWUgPSBkZXZpY2VfZ2V0X2Rldm5vZGUoZGV2LCBOVUxMLCAmdG1wKTsKIAlpZiAoIW5vZGVuYW1lKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggOTFkNDA4Ny4uMWZlNTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC04NSw2ICs4NSw4IEBACiAJCSAgICAgICAiTm9kZSAlZCBGaWxlUGFnZXM6ICAgICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgTWFwcGVkOiAgICAgICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIEFub25QYWdlczogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBTaG1lbTogICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgS2VybmVsU3RhY2s6ICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIFBhZ2VUYWJsZXM6ICAgICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBORlNfVW5zdGFibGU6ICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgQm91bmNlOiAgICAgICAgICU4bHUga0JcbiIKQEAgLTExNiw2ICsxMTgsOSBAQAogCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0ZJTEVfUEFHRVMpKSwKIAkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9GSUxFX01BUFBFRCkpLAogCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FOT05fUEFHRVMpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9TSE1FTSkpLAorCQkgICAgICAgbmlkLCBub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9LRVJORUxfU1RBQ0spICoKKwkJCQlUSFJFQURfU0laRSAvIDEwMjQsCiAJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfUEFHRVRBQkxFKSksCiAJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfVU5TVEFCTEVfTkZTKSksCiAJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQk9VTkNFKSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCAxZTZiN2MxLi42ZmE3YjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIERBQzk2MF9CbG9ja0RldmljZU9wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIERBQzk2MF9CbG9ja0RldmljZU9wZXJhdGlvbnMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gREFDOTYwX29wZW4sCiAJLmdldGdlbwkJCT0gREFDOTYwX2dldGdlbywKQEAgLTY1NjIsNyArNjU2Miw3IEBACiAgIGlmIChjb3B5X2Zyb21fdXNlcihDb21tYW5kQnVmZmVyLCBCdWZmZXIsIENvdW50KSkgcmV0dXJuIC1FRkFVTFQ7CiAgIENvbW1hbmRCdWZmZXJbQ291bnRdID0gJ1wwJzsKICAgTGVuZ3RoID0gc3RybGVuKENvbW1hbmRCdWZmZXIpOwotICBpZiAoQ29tbWFuZEJ1ZmZlcltMZW5ndGgtMV0gPT0gJ1xuJykKKyAgaWYgKExlbmd0aCA+IDAgJiYgQ29tbWFuZEJ1ZmZlcltMZW5ndGgtMV0gPT0gJ1xuJykKICAgICBDb21tYW5kQnVmZmVyWy0tTGVuZ3RoXSA9ICdcMCc7CiAgIGlmIChDb250cm9sbGVyLT5GaXJtd2FyZVR5cGUgPT0gREFDOTYwX1YxX0NvbnRyb2xsZXIpCiAgICAgcmV0dXJuIChEQUM5NjBfVjFfRXhlY3V0ZVVzZXJDb21tYW5kKENvbnRyb2xsZXIsIENvbW1hbmRCdWZmZXIpCkBAIC02NjUzLDcgKzY2NTMsNyBAQAogCWVsc2UgRXJyb3JDb2RlID0gZ2V0X3VzZXIoQ29udHJvbGxlck51bWJlciwKIAkJCSAgICAgJlVzZXJTcGFjZUNvbnRyb2xsZXJJbmZvLT5Db250cm9sbGVyTnVtYmVyKTsKIAlpZiAoRXJyb3JDb2RlICE9IDApCi0JCWJyZWFrOzsKKwkJYnJlYWs7CiAJRXJyb3JDb2RlID0gLUVOWElPOwogCWlmIChDb250cm9sbGVyTnVtYmVyIDwgMCB8fAogCSAgICBDb250cm9sbGVyTnVtYmVyID4gREFDOTYwX0NvbnRyb2xsZXJDb3VudCAtIDEpIHsKQEAgLTY2NjEsNyArNjY2MSw3IEBACiAJfQogCUNvbnRyb2xsZXIgPSBEQUM5NjBfQ29udHJvbGxlcnNbQ29udHJvbGxlck51bWJlcl07CiAJaWYgKENvbnRyb2xsZXIgPT0gTlVMTCkKLQkJYnJlYWs7OworCQlicmVhazsKIAltZW1zZXQoJkNvbnRyb2xsZXJJbmZvLCAwLCBzaXplb2YoREFDOTYwX0NvbnRyb2xsZXJJbmZvX1QpKTsKIAlDb250cm9sbGVySW5mby5Db250cm9sbGVyTnVtYmVyID0gQ29udHJvbGxlck51bWJlcjsKIAlDb250cm9sbGVySW5mby5GaXJtd2FyZVR5cGUgPSBDb250cm9sbGVyLT5GaXJtd2FyZVR5cGU7CkBAIC03MjEwLDcgKzcyMTAsNyBAQAogCS5yZW1vdmUJCT0gREFDOTYwX1JlbW92ZSwKIH07CiAKLXN0YXRpYyBpbnQgREFDOTYwX2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBEQUM5NjBfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgcmV0OwogCkBAIC03MjIyLDcgKzcyMjIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIERBQzk2MF9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IERBQzk2MF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYyBiL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jCmluZGV4IDJmMDdiN2MuLjA1NTIyNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jCkBAIC0xNjMyLDcgKzE2MzIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gZmxvcHB5X29wZW4sCiAJLnJlbGVhc2UJPSBmbG9wcHlfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKaW5kZXggYjZjZDU3MS4uM2FmOTdkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGFvZV9iZG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYW9lX2Jkb3BzID0gewogCS5vcGVuID0gYW9lYmxrX29wZW4sCiAJLnJlbGVhc2UgPSBhb2VibGtfcmVsZWFzZSwKIAkuZ2V0Z2VvID0gYW9lYmxrX2dldGdlbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNoci5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMKaW5kZXggMTk4ODgzNS4uNjIxNDFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNoYXIgKmFvZV9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqYW9lX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiZXRoZXJkLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CkBAIC0yODgsNyArMjg4LDcgQEAKIAkJdW5yZWdpc3Rlcl9jaHJkZXYoQU9FX01BSk9SLCAiYW9lY2hyIik7CiAJCXJldHVybiBQVFJfRVJSKGFvZV9jbGFzcyk7CiAJfQotCWFvZV9jbGFzcy0+bm9kZW5hbWUgPSBhb2Vfbm9kZW5hbWU7CisJYW9lX2NsYXNzLT5kZXZub2RlID0gYW9lX2Rldm5vZGU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFyZGV2cyk7ICsraSkKIAkJZGV2aWNlX2NyZWF0ZShhb2VfY2xhc3MsIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYyBiL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jCmluZGV4IDNmZjAyOTQuLjg0N2E5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jCkBAIC0xODU2LDcgKzE4NTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gZmxvcHB5X29wZW4sCiAJLnJlbGVhc2UJPSBmbG9wcHlfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYnJkLmMgYi9kcml2ZXJzL2Jsb2NrL2JyZC5jCmluZGV4IDRiZjg3MDUuLjRmNjg4NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYnJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9icmQuYwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGJyZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBicmRfZm9wcyA9IHsKIAkub3duZXIgPQkJVEhJU19NT0RVTEUsCiAJLmxvY2tlZF9pb2N0bCA9CQlicmRfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfWElQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggZDgzNzJiNC4uMjRjM2UyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJCQkgICAgICB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBjY2lzc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBjY2lzc19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gY2Npc3Nfb3BlbiwKIAkucmVsZWFzZSA9IGNjaXNzX3JlbGVhc2UsCkBAIC0zNjMsNyArMzYzLDcgQEAKIAloLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjY2lzc19zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjY2lzc19zZXFfb3BzID0gewogCS5zdGFydCA9IGNjaXNzX3NlcV9zdGFydCwKIAkuc2hvdyAgPSBjY2lzc19zZXFfc2hvdywKIAkubmV4dCAgPSBjY2lzc19zZXFfbmV4dCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwppbmRleCA0NGZhMjAxLi5iODJkNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKKysrIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkYV9mb3BzICA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRhX2ZvcHMgID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBpZGFfb3BlbiwKIAkucmVsZWFzZQk9IGlkYV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggMmIzODdjMi4uNWMwMWY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0zOTA3LDcgKzM5MDcsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCQk9IGZsb3BweV9vcGVuLAogCS5yZWxlYXNlCQk9IGZsb3BweV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9oZC5jIGIvZHJpdmVycy9ibG9jay9oZC5jCmluZGV4IGY5ZDAxNjAuLmQ1Y2RjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svaGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKQEAgLTY5Miw3ICs2OTIsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBoZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBoZF9mb3BzID0gewogCS5nZXRnZW8gPQloZF9nZXRnZW8sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IGJiYjc5NDQuLmVkZGE5ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC0xNDM4LDcgKzE0MzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJbG9fb3BlbiwKIAkucmVsZWFzZSA9CWxvX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCmluZGV4IDZkN2ZiYWEuLmUwMzM5YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCkBAIC03NzUsNyArNzc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZ19kaXNrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWdfZGlza19vcHMgPSB7CiAJLmdldGdlbyA9IG1nX2dldGdlbwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggNWQyM2ZmYS4uY2M5MjNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC03MjIsNyArNzIyLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9CiB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxvY2tlZF9pb2N0bCA9CW5iZF9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svb3NkYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL29zZGJsay5jCmluZGV4IDEzYzFhZWUuLmE4MDhiMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svb3NkYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9vc2RibGsuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKGN0bF9tdXRleCk7CS8qIFNlcmlhbGl6ZSBvcGVuL2Nsb3NlL3NldHVwL3RlYXJkb3duICovCiBzdGF0aWMgTElTVF9IRUFEKG9zZGJsa2Rldl9saXN0KTsKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBvc2RibGtfYmRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBvc2RibGtfYmRfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKaW5kZXggOWYzNTE4Yy4uODg2NmNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJldHVybiBjZHJvbV9tZWRpYV9jaGFuZ2VkKCZjZC0+aW5mbyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcGNkX2Jkb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwY2RfYmRvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHBjZF9ibG9ja19vcGVuLAogCS5yZWxlYXNlCT0gcGNkX2Jsb2NrX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwppbmRleCBiZjU5NTViLi41NjllMzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKQEAgLTgwNyw3ICs4MDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBkX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHBkX29wZW4sCiAJLnJlbGVhc2UJPSBwZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKaW5kZXggNjhhOTA4My4uZWE1NGVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAogLyoga2VybmVsIGdsdWUgc3RydWN0dXJlcyAqLwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBmX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBmX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHBmX29wZW4sCiAJLnJlbGVhc2UJPSBwZl9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCA5NWYxMWNkLi4yZGRmMDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtMjg0OSw3ICsyODQ5LDcgQEAKIAlyZXR1cm4gYXR0YWNoZWRfZGlzay0+Zm9wcy0+bWVkaWFfY2hhbmdlZChhdHRhY2hlZF9kaXNrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwa3RjZHZkX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcGt0Y2R2ZF9vcHMgPSB7CiAJLm93bmVyID0JCVRISVNfTU9EVUxFLAogCS5vcGVuID0JCQlwa3Rfb3BlbiwKIAkucmVsZWFzZSA9CQlwa3RfY2xvc2UsCkBAIC0yODU3LDcgKzI4NTcsNyBAQAogCS5tZWRpYV9jaGFuZ2VkID0JcGt0X21lZGlhX2NoYW5nZWQsCiB9OwogCi1zdGF0aWMgY2hhciAqcGt0Y2R2ZF9ub2RlbmFtZShzdHJ1Y3QgZ2VuZGlzayAqZ2QpCitzdGF0aWMgY2hhciAqcGt0Y2R2ZF9kZXZub2RlKHN0cnVjdCBnZW5kaXNrICpnZCwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInBrdGNkdmQvJXMiLCBnZC0+ZGlza19uYW1lKTsKIH0KQEAgLTI5MTQsNyArMjkxNCw3IEBACiAJZGlzay0+Zm9wcyA9ICZwa3RjZHZkX29wczsKIAlkaXNrLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKIAlzdHJjcHkoZGlzay0+ZGlza19uYW1lLCBwZC0+bmFtZSk7Ci0JZGlzay0+bm9kZW5hbWUgPSBwa3RjZHZkX25vZGVuYW1lOworCWRpc2stPmRldm5vZGUgPSBwa3RjZHZkX2Rldm5vZGU7CiAJZGlzay0+cHJpdmF0ZV9kYXRhID0gcGQ7CiAJZGlzay0+cXVldWUgPSBibGtfYWxsb2NfcXVldWUoR0ZQX0tFUk5FTCk7CiAJaWYgKCFkaXNrLT5xdWV1ZSkKQEAgLTMwNzAsNyArMzA3MCw3IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcGt0X21pc2MgPSB7CiAJLm1pbm9yIAkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCiAJLm5hbWUgIAkJPSBEUklWRVJfTkFNRSwKLQkubmFtZSAgCQk9ICJwa3RjZHZkL2NvbnRyb2wiLAorCS5ub2RlbmFtZQk9ICJwa3RjZHZkL2NvbnRyb2wiLAogCS5mb3BzICAJCT0gJnBrdF9jdGxfZm9wcwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wczNkaXNrLmMgYi9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYwppbmRleCAzNGNiYjdmLi4wM2ExMzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYworKysgYi9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYwpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIGludCBwczNkaXNrX21ham9yOwogCiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcHMzZGlza19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwczNkaXNrX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wczN2cmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYwppbmRleCBjODc1M2E5Li4zYmI3YzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYwpAQCAtODgsNyArODgsNyBAQAogc3RhdGljIGludCBwczN2cmFtX21ham9yOwogCiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcHMzdnJhbV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwczN2cmFtX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zdW52ZGMuYyBiL2RyaXZlcnMvYmxvY2svc3VudmRjLmMKaW5kZXggY2JmZDljMC4uNDExZjA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zdW52ZGMuYworKysgYi9kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB2ZGNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgdmRjX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5nZXRnZW8JCT0gdmRjX2dldGdlbywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCmluZGV4IGNmNzg3N2YuLjhmNTY5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCkBAIC03NDgsNyArNzQ4LDcgQEAKIAlyZXR1cm4gIWZzLT5kaXNrX2luOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKIAkub3duZXIJCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkgPSBmbG9wcHlfb3BlbiwKIAkucmVsZWFzZQkgPSBmbG9wcHlfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwppbmRleCA4MGRmOTNlLi42MzgwYWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCkBAIC05OTgsNyArOTk4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKIAkub3BlbgkJPSBmbG9wcHlfb3BlbiwKIAkucmVsZWFzZQk9IGZsb3BweV9yZWxlYXNlLAogCS5sb2NrZWRfaW9jdGwJPSBmbG9wcHlfaW9jdGwsCkBAIC0xMDYyLDcgKzEwNjIsNyBAQAogCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KIAlmcy0+c3dpbTNfaW50ciA9IG1hY2lvX2lycShtZGV2LCAwKTsKLQlmcy0+ZG1hX2ludHIgPSBtYWNpb19pcnEobWRldiwgMSk7OworCWZzLT5kbWFfaW50ciA9IG1hY2lvX2lycShtZGV2LCAxKTsKIAlmcy0+Y3VyX2N5bCA9IC0xOwogCWZzLT5jdXJfc2VjdG9yID0gLTE7CiAJZnMtPnNlY3BlcmN5bCA9IDM2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zeDguYyBiL2RyaXZlcnMvYmxvY2svc3g4LmMKaW5kZXggZjVjZDJlOC4uYTdjNDE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zeDguYworKysgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCkBAIC00MjMsNyArNDIzLDcgQEAKIAkucmVtb3ZlCQk9IGNhcm1fcmVtb3ZlX29uZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgY2FybV9iZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGNhcm1fYmRfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZ2V0Z2VvCQk9IGNhcm1fYmRldl9nZXRnZW8sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IGNjNTQ0NzMuLmM3MzliMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTE3ODksNyArMTc4OSw3IEBACiAJcmV0dXJuIGx1bi0+Y2hhbmdlZDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB1Yl9iZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB1Yl9iZF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSB1Yl9iZF9vcGVuLAogCS5yZWxlYXNlCT0gdWJfYmRfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdW1lbS5jIGIvZHJpdmVycy9ibG9jay91bWVtLmMKaW5kZXggODU4YzM0ZC4uYWQxYmEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91bWVtLmMKKysrIGIvZHJpdmVycy9ibG9jay91bWVtLmMKQEAgLTE0MCw3ICsxNDAsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjYXJkaW5mbyBjYXJkc1tNTV9NQVhDQVJEU107Ci1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1tX2ZvcHM7CiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgYmF0dGVyeV90aW1lcjsKIAogc3RhdGljIGludCBudW1fY2FyZHM7CkBAIC03ODksNyArNzg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtbV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtbV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZ2V0Z2VvCQk9IG1tX2dldGdlbywKIAkucmV2YWxpZGF0ZV9kaXNrID0gbW1fcmV2YWxpZGF0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggYjQ0MWNlMy4uYThjOGI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogLyoKICAqIE91ciBmaWxlIG9wZXJhdGlvbnMgdGFibGUKICAqLwotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB2aW9kYXNkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZpb2Rhc2RfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHZpb2Rhc2Rfb3BlbiwKIAkucmVsZWFzZSA9IHZpb2Rhc2RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggYWExYTNkNS4uNDNmMTkzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2Jsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKQEAgLTkxLDE1ICs5MiwyNiBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAl2YnItPnJlcSA9IHJlcTsKLQlpZiAoYmxrX2ZzX3JlcXVlc3QodmJyLT5yZXEpKSB7CisJc3dpdGNoIChyZXEtPmNtZF90eXBlKSB7CisJY2FzZSBSRVFfVFlQRV9GUzoKIAkJdmJyLT5vdXRfaGRyLnR5cGUgPSAwOwogCQl2YnItPm91dF9oZHIuc2VjdG9yID0gYmxrX3JxX3Bvcyh2YnItPnJlcSk7CiAJCXZici0+b3V0X2hkci5pb3ByaW8gPSByZXFfZ2V0X2lvcHJpbyh2YnItPnJlcSk7Ci0JfSBlbHNlIGlmIChibGtfcGNfcmVxdWVzdCh2YnItPnJlcSkpIHsKKwkJYnJlYWs7CisJY2FzZSBSRVFfVFlQRV9CTE9DS19QQzoKIAkJdmJyLT5vdXRfaGRyLnR5cGUgPSBWSVJUSU9fQkxLX1RfU0NTSV9DTUQ7CiAJCXZici0+b3V0X2hkci5zZWN0b3IgPSAwOwogCQl2YnItPm91dF9oZHIuaW9wcmlvID0gcmVxX2dldF9pb3ByaW8odmJyLT5yZXEpOwotCX0gZWxzZSB7CisJCWJyZWFrOworCWNhc2UgUkVRX1RZUEVfTElOVVhfQkxPQ0s6CisJCWlmIChyZXEtPmNtZFswXSA9PSBSRVFfTEJfT1BfRkxVU0gpIHsKKwkJCXZici0+b3V0X2hkci50eXBlID0gVklSVElPX0JMS19UX0ZMVVNIOworCQkJdmJyLT5vdXRfaGRyLnNlY3RvciA9IDA7CisJCQl2YnItPm91dF9oZHIuaW9wcmlvID0gcmVxX2dldF9pb3ByaW8odmJyLT5yZXEpOworCQkJYnJlYWs7CisJCX0KKwkJLypGQUxMVEhSVSovCisJZGVmYXVsdDoKIAkJLyogV2UgZG9uJ3QgcHV0IGFueXRoaW5nIGVsc2UgaW4gdGhlIHF1ZXVlLiAqLwogCQlCVUcoKTsKIAl9CkBAIC0xMzksNyArMTUxLDcgQEAKIAkJfQogCX0KIAotCWlmICh2YmxrLT52cS0+dnFfb3BzLT5hZGRfYnVmKHZibGstPnZxLCB2YmxrLT5zZywgb3V0LCBpbiwgdmJyKSkgeworCWlmICh2YmxrLT52cS0+dnFfb3BzLT5hZGRfYnVmKHZibGstPnZxLCB2YmxrLT5zZywgb3V0LCBpbiwgdmJyKSA8IDApIHsKIAkJbWVtcG9vbF9mcmVlKHZiciwgdmJsay0+cG9vbCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xOTksNiArMjExLDEyIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdmlydGJsa19wcmVwYXJlX2ZsdXNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKKwlyZXEtPmNtZFswXSA9IFJFUV9MQl9PUF9GTFVTSDsKK30KKwogc3RhdGljIGludCB2aXJ0YmxrX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCSB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTI0Myw3ICsyNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZpcnRibGtfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgdmlydGJsa19mb3BzID0gewogCS5sb2NrZWRfaW9jdGwgPSB2aXJ0YmxrX2lvY3RsLAogCS5vd25lciAgPSBUSElTX01PRFVMRSwKIAkuZ2V0Z2VvID0gdmlydGJsa19nZXRnZW8sCkBAIC0zMzcsNyArMzU1LDEwIEBACiAJaW5kZXgrKzsKIAogCS8qIElmIGJhcnJpZXJzIGFyZSBzdXBwb3J0ZWQsIHRlbGwgYmxvY2sgbGF5ZXIgdGhhdCBxdWV1ZSBpcyBvcmRlcmVkICovCi0JaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfQkFSUklFUikpCisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfRkxVU0gpKQorCQlibGtfcXVldWVfb3JkZXJlZCh2YmxrLT5kaXNrLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKKwkJCQkgIHZpcnRibGtfcHJlcGFyZV9mbHVzaCk7CisJZWxzZSBpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9CQVJSSUVSKSkKIAkJYmxrX3F1ZXVlX29yZGVyZWQodmJsay0+ZGlzay0+cXVldWUsIFFVRVVFX09SREVSRURfVEFHLCBOVUxMKTsKIAogCS8qIElmIGRpc2sgaXMgcmVhZC1vbmx5IGluIHRoZSBob3N0LCB0aGUgZ3Vlc3Qgc2hvdWxkIG9iZXkgKi8KQEAgLTQyNCw3ICs0NDUsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewogCVZJUlRJT19CTEtfRl9CQVJSSUVSLCBWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLAogCVZJUlRJT19CTEtfRl9HRU9NRVRSWSwgVklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCi0JVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9JREVOVElGWQorCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfSURFTlRJRlksIFZJUlRJT19CTEtfRl9GTFVTSAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGQuYyBiL2RyaXZlcnMvYmxvY2sveGQuYwppbmRleCBjZTI0MjkyLi4wODc3ZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hkLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZC5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAogc3RhdGljIGludCB4ZF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHhkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHhkX2ZvcHMgPSB7CiAJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLmxvY2tlZF9pb2N0bAk9IHhkX2lvY3RsLAogCS5nZXRnZW8gPSB4ZF9nZXRnZW8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwppbmRleCBlNTMyODQ3Li5iODU3OGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKQEAgLTY1LDcgKzY1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZyYW1lW0JMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVF07CiB9OwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHhsdmJkX2Jsb2NrX2ZvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHhsdmJkX2Jsb2NrX2ZvcHM7CiAKICNkZWZpbmUgQkxLX1JJTkdfU0laRSBfX1JJTkdfU0laRSgoc3RydWN0IGJsa2lmX3NyaW5nICopMCwgUEFHRV9TSVpFKQogCkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHhsdmJkX2Jsb2NrX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB4bHZiZF9ibG9ja19mb3BzID0KIHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGJsa2lmX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCmluZGV4IGIyMGFiZTEwLi5lNWM1NDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwpAQCAtOTQxLDcgKzk0MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYWNlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGFjZV9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNlX29wZW4sCiAJLnJlbGVhc2UgPSBhY2VfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svejJyYW0uYyBiL2RyaXZlcnMvYmxvY2svejJyYW0uYwppbmRleCBiMjU5MDQwLi42NGY5NDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3oycmFtLmMKKysrIGIvZHJpdmVycy9ibG9jay96MnJhbS5jCkBAIC02NCw3ICs2NCw2IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soejJyYW1fbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgejJfZm9wczsKIHN0YXRpYyBzdHJ1Y3QgZ2VuZGlzayAqejJyYW1fZ2VuZGlzazsKIAogc3RhdGljIHZvaWQgZG9fejJfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKQEAgLTMxNSw3ICszMTQsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHoyX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6Ml9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gejJfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwppbmRleCBiNTYyMWYyLi5hNzYyMjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCkBAIC01MTIsNyArNTEyLDcgQEAKIAlyZXR1cm4gY2Ryb21faW9jdGwoZ2QuY2RfaW5mbywgYmRldiwgbW9kZSwgY21kLCBhcmcpOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGdkcm9tX2Jkb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBnZHJvbV9iZG9wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkJPSBnZHJvbV9iZG9wc19vcGVuLAogCS5yZWxlYXNlCQk9IGdkcm9tX2Jkb3BzX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggMGZmZjY0Ni4uNTdjYTY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIGNkcm9tX21lZGlhX2NoYW5nZWQoJmRpLT52aW9jZF9pbmZvKTsKIH0KIAotc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZpb2NkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZpb2NkX2ZvcHMgPSB7CiAJLm93bmVyID0JCVRISVNfTU9EVUxFLAogCS5vcGVuID0JCQl2aW9jZF9ibGtfb3BlbiwKIAkucmVsZWFzZSA9CQl2aW9jZF9ibGtfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKaW5kZXggYWQ4Nzc1My4uYTU2Y2EwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTExNCw5ICsxMTQsOSBAQAogCWxvbmcgbWVtb3J5LCBpbmRleCwgcmVzdWx0OwogCiAjaWYgUEFHRV9TSElGVCA8IDIwCi0JbWVtb3J5ID0gbnVtX3BoeXNwYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKTsKKwltZW1vcnkgPSB0b3RhbHJhbV9wYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKTsKICNlbHNlCi0JbWVtb3J5ID0gbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVCAtIDIwKTsKKwltZW1vcnkgPSB0b3RhbHJhbV9wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDIwKTsKICNlbmRpZgogCWluZGV4ID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKaW5kZXggNTAxZTI5My4uOTA0N2IyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCkBAIC00NzYsNyArNDc2LDYgQEAKIHsKIAlhY3BpX2hhbmRsZSBoYW5kbGUsIHBhcmVudDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKIAl1NjQgbGJhX2hwYSwgc2JhX2hwYSwgbGVuZ3RoOwogCWludCBtYXRjaDsKQEAgLTQ4OCwxMyArNDg3LDExIEBACiAJLyogTG9vayBmb3IgYW4gZW5jbG9zaW5nIElPQyBzY29wZSBhbmQgZmluZCBpdHMgQ1NSIHNwYWNlICovCiAJaGFuZGxlID0gb2JqOwogCWRvIHsKLQkJYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSOwotCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpOworCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCQkvKiBUQkQgY2hlY2sgX0NJRCBhbHNvICovCi0JCQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7Ci0JCQlpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZVtzaXplb2YoaW5mby0+aGFyZHdhcmVfaWQpLTFdID0gJ1wwJzsKLQkJCW1hdGNoID0gKHN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwgIkhXUDAwMDEiKSA9PSAwKTsKKwkJCWluZm8tPmhhcmR3YXJlX2lkLnN0cmluZ1tzaXplb2YoaW5mby0+aGFyZHdhcmVfaWQubGVuZ3RoKS0xXSA9ICdcMCc7CisJCQltYXRjaCA9IChzdHJjbXAoaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nLCAiSFdQMDAwMSIpID09IDApOwogCQkJa2ZyZWUoaW5mbyk7CiAJCQlpZiAobWF0Y2gpIHsKIAkJCQlzdGF0dXMgPSBocF9hY3BpX2Nzcl9zcGFjZShoYW5kbGUsICZzYmFfaHBhLCAmbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCmluZGV4IDIwZWYxYmYuLjcwMzk1OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAKIAlpZiAoKHVuaW5vcnRoX3JldiA+PSAweDMwKSAmJiAodW5pbm9ydGhfcmV2IDw9IDB4MzMpKSB7CiAJCS8qCi0JCSAqIFdlIG5lZWQgdG8gdG8gc2V0IFJFUV9ERVBUSCB0byA3IGZvciBVMyB2ZXJzaW9ucyAxLjAsIDIuMSwKKwkJICogV2UgbmVlZCB0byBzZXQgUkVRX0RFUFRIIHRvIDcgZm9yIFUzIHZlcnNpb25zIDEuMCwgMi4xLAogCQkgKiAyLjIgYW5kIDIuMywgRGFyd2luIGRvIHNvLgogCQkgKi8KIAkJaWYgKChjb21tYW5kID4+IEFHUFNUQVRfUlFfREVQVEhfU0hJRlQpID4gNykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKaW5kZXggMmRhZmMyZC4uZGY1MDM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKQEAgLTExLDcgKzExLDcgQEAKICAqIEluaXRpYWxseSB3cml0dGVuIGJ5IFJhbmRvbHBoIEJlbnRzb24gPGJlbnRzb25AZ3JpZWcuc2Vhc2x1Zy5vcmc+LgogICogTW9kaWZpZWQgYW5kIG1haW50YWluZWQgYnkgTWFyY2lvIFNhaXRvIDxtYXJjaW9AY3ljbGFkZXMuY29tPi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CiAgKgogICogTXVjaCBvZiB0aGUgZGVzaWduIGFuZCBzb21lIG9mIHRoZSBjb2RlIGNhbWUgZnJvbSBzZXJpYWwuYwogICogd2hpY2ggd2FzIGNvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMuICBJdCB3YXMKQEAgLTE5LDU3NyArMTksOSBAQAogICogYW5kIHRoZW4gZml4ZWQgYXMgc3VnZ2VzdGVkIGJ5IE1pY2hhZWwgSy4gSm9obnNvbiAxMi8xMi85Mi4KICAqIENvbnZlcnRlZCB0byBwY2kgcHJvYmluZyBhbmQgY2xlYW5lZCB1cCBieSBKaXJpIFNsYWJ5LgogICoKLSAqIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBzaGFyZWQgSVJRJ3MgKG9ubHkgZm9yIFBDSSBib2FyZHMpLgotICoKLSAqIFByZXZlbnQgdXNlcnMgZnJvbSBvcGVuaW5nIG5vbi1leGlzdGluZyBaIHBvcnRzLgotICoKLSAqIFJldmlzaW9uIDIuMy4yLjggICAyMDAwLzA3LzA2IDE4OjE0OjE2IGl2YW4KLSAqIEZpeGVkIHRoZSBQQ0kgZGV0ZWN0aW9uIGZ1bmN0aW9uIHRvIHdvcmsgcHJvcGVybHkgb24gQWxwaGEgc3lzdGVtcy4KLSAqIEltcGxlbWVudGVkIHN1cHBvcnQgZm9yIFRJT0NTRVJHRVRMU1IgaW9jdGwuCi0gKiBJbXBsZW1lbnRlZCBmdWxsIHN1cHBvcnQgZm9yIG5vbi1zdGFuZGFyZCBiYXVkIHJhdGVzLgotICoKLSAqIFJldmlzaW9uIDIuMy4yLjcgICAyMDAwLzA2LzAxIDE4OjI2OjM0IGl2YW4KLSAqIFJlcXVlc3QgUExYIEkvTyByZWdpb24sIGFsdGhvdWdoIGRyaXZlciBkb2Vzbid0IHVzZSBpdCwgdG8gYXZvaWQKLSAqIHByb2JsZW1zIHdpdGggb3RoZXIgZHJpdmVycyBhY2Nlc3NpbmcgaXQuCi0gKiBSZW1vdmVkIGNvdW50IGZvciBvbi1ib2FyZCBidWZmZXIgY2hhcmFjdGVycyBpbiBjeV9jaGFyc19pbl9idWZmZXIKLSAqIChDeWNsYWRlcy1aIG9ubHkpLgotICoKLSAqIFJldmlzaW9uIDIuMy4yLjYgICAyMDAwLzA1LzA1IDEzOjU2OjA1IGl2YW4KLSAqIERyaXZlciBub3cgcmVwb3J0cyBwaHlzaWNhbCBpbnN0ZWFkIG9mIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3Nlcy4KLSAqIE1hc2tzIHdlcmUgYWRkZWQgdG8gc29tZSBDeWNsYWRlcy1aIHJlYWQgYWNjZXNzZXMuCi0gKiBJbXBsZW1lbnRlZCB3b3JrYXJvdW5kIGZvciBQTFg5MDUwIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIGEgc3lzdGVtIGxvY2t1cAotICogaW4gY2VydGFpbiBzeXN0ZW1zLCBkZXBlbmRpbmcgb24gdGhlIE1NSU8gYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUKLSAqIGJvYXJkLgotICogQ2hhbmdlZCB0aGUgVHggaW50ZXJydXB0IHByb2dyYW1taW5nIGluIHRoZSBDRDE0MDAgY2hpcHMgdG8gYm9vc3QgdXAKLSAqIHBlcmZvcm1hbmNlIChDeWNsb20tWSBvbmx5KS4KLSAqIENvZGUgaXMgbm93IGNvbXBsaWFudCB3aXRoIHRoZSBuZXcgbW9kdWxlIGludGVyZmFjZSAobW9kdWxlX1tpbml0fGV4aXRdKS4KLSAqIE1ha2UgdXNlIG9mIHRoZSBQQ0kgaGVscGVyIGZ1bmN0aW9ucyB0byBhY2Nlc3MgUENJIHJlc291cmNlcy4KLSAqIERpZCBzb21lIGNvZGUgImhvdXNla2VlcGluZyIuCi0gKgotICogUmV2aXNpb24gMi4zLjIuNSAgIDIwMDAvMDEvMTkgMTQ6MzU6MzMgaXZhbgotICogRml4ZWQgYnVnIGluIGN5X3NldF90ZXJtaW9zIG9uIENSVFNDVFMgZmxhZyB0dXJub2ZmLgotICoKLSAqIFJldmlzaW9uIDIuMy4yLjQgICAyMDAwLzAxLzE3IDA5OjE5OjQwIGl2YW4KLSAqIEZpeGVkIFNNUCBsb2NraW5nIGluIEN5Y2xvbS1ZIGludGVycnVwdCBoYW5kbGVyLgotICoKLSAqIFJldmlzaW9uIDIuMy4yLjMgICAxOTk5LzEyLzI4IDEyOjExOjM5IGl2YW4KLSAqIEFkZGVkIGEgbmV3IGN5Y2xhZGVzX2NhcmQgZmllbGQgY2FsbGVkIG5wb3J0cyB0byBhbGxvdyB0aGUgZHJpdmVyIHRvCi0gKiBrbm93IHRoZSBleGFjdCBudW1iZXIgb2YgcG9ydHMgZm91bmQgYnkgdGhlIFogZmlybXdhcmUgYWZ0ZXIgaXRzIGxvYWQ7Ci0gKiBSWCBidWZmZXIgY29udGVudGlvbiBwcmV2ZW50aW9uIGxvZ2ljIG9uIGludGVycnVwdCBvcCBtb2RlIHJldmlzaXRlZAotICogKEN5Y2xhZGVzLVogb25seSk7Ci0gKiBSZXZpc2l0ZWQgcHJpbnRrJ3MgZm9yIFogZGVidWc7Ci0gKiBEcml2ZXIgbm93IG1ha2VzIHN1cmUgdGhhdCB0aGUgY29uc3RhbnQgU0VSSUFMX1hNSVRfU0laRSBpcyBkZWZpbmVkOwotICoKLSAqIFJldmlzaW9uIDIuMy4yLjIgICAxOTk5LzEwLzAxIDExOjI3OjQzIGl2YW4KLSAqIEZpeGVkIGJ1ZyBpbiBjeXpfcG9sbCB0aGF0IHdvdWxkIG1ha2UgYWxsIHBvcnRzIGJ1dCBwb3J0IDAKLSAqIHVuYWJsZSB0byB0cmFuc21pdC9yZWNlaXZlIGRhdGEgKEN5Y2xhZGVzLVogb25seSk7Ci0gKiBJbXBsZW1lbnRlZCBsb2dpYyB0byBwcmV2ZW50IHRoZSBSWCBidWZmZXIgZnJvbSBiZWluZyBzdHVjayB3aXRoIGRhdGEKLSAqIGR1ZSB0byBhIGRyaXZlciAvIGZpcm13YXJlIHJhY2UgY29uZGl0aW9uIGluIGludGVycnVwdCBvcCBtb2RlCi0gKiAoQ3ljbGFkZXMtWiBvbmx5KTsKLSAqIEZpeGVkIGJ1ZyBpbiBibG9ja190aWxfcmVhZHkgbG9naWMgdGhhdCB3b3VsZCBsZWFkIHRvIGEgc3lzdGVtIGNyYXNoOwotICogUmV2aXNpdGVkIGN5X2Nsb3NlIHNwaW5sb2NrIHVzYWdlOwotICoKLSAqIFJldmlzaW9uIDIuMy4yLjEgICAxOTk5LzA5LzI4IDExOjAxOjIyIGl2YW4KLSAqIFJldmlzaXRlZCBDT05GSUdfUENJIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciBQQ0kgYm9hcmQgc3VwcG9ydDsKLSAqIEltcGxlbWVudGVkIFRJT0NHSUNPVU5UIGFuZCBUSU9DTUlXQUlUIGlvY3RsIHN1cHBvcnQ7Ci0gKiBfTWFqb3JfIGNsZWFudXAgb24gdGhlIEN5Y2xhZGVzLVogaW50ZXJydXB0IHN1cHBvcnQgY29kZSAvIGxvZ2ljOwotICogUmVtb3ZlZCBDVFMgaGFuZGxpbmcgZnJvbSB0aGUgZHJpdmVyIC0tIHRoaXMgaXMgbm93IGNvbXBsZXRlbHkgaGFuZGxlZAotICogYnkgdGhlIGZpcm13YXJlIChDeWNsYWRlcy1aIG9ubHkpOwotICogRmx1c2ggUlggb24tYm9hcmQgYnVmZmVycyBvbiBhIHBvcnQgb3BlbiAoQ3ljbGFkZXMtWiBvbmx5KTsKLSAqIEZpeGVkIGhhbmRsaW5nIG9mIEFTWU5DX1NQRF8qIFRUWSBmbGFnczsKLSAqIE1vZHVsZSB1bmxvYWQgbm93IHVubWFwcyBhbGwgbWVtb3J5IGFyZWEgYWxsb2NhdGVkIGJ5IGlvcmVtYXA7Ci0gKgotICogUmV2aXNpb24gMi4zLjEuMSAgIDE5OTkvMDcvMTUgMTY6NDU6NTMgaXZhbgotICogUmVtb3ZlZCBDWV9QUk9DIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uOwotICogSW1wbGVtZW50ZWQgU01QLWF3YXJlbmVzcyBmb3IgdGhlIGRyaXZlcjsKLSAqIEltcGxlbWVudGVkIGEgbmV3IElTQSBJUlEgYXV0b3Byb2JlIHRoYXQgdXNlcyB0aGUgaXJxX3Byb2JlX1tvbnxvZmZdCi0gKiBmdW5jdGlvbnM7Ci0gKiBUaGUgZHJpdmVyIG5vdyBhY2NlcHRzIG1lbW9yeSBhZGRyZXNzZXMgKG1hZGRyPTB4TU1NTU0pIGFuZCBJUlFzCi0gKiAoaXJxPU5OKSBhcyBwYXJhbWV0ZXJzIChvbmx5IGZvciBJU0EgYm9hcmRzKTsKLSAqIEZpeGVkIGJ1ZyBpbiBzZXRfbGluZV9jaGFyIHRoYXQgd291bGQgcHJldmVudCB0aGUgQ3ljbGFkZXMtWgotICogcG9ydHMgZnJvbSBiZWluZyBjb25maWd1cmVkIGF0IHNwZWVkcyBhYm92ZSAxMTUuMkticHM7Ci0gKiBGaXhlZCBidWcgaW4gY3lfc2V0X3Rlcm1pb3MgdGhhdCB3b3VsZCBwcmV2ZW50IFhPTi9YT0ZGIGZsb3cgY29udHJvbAotICogc3dpdGNoaW5nIGZyb20gd29ya2luZyBwcm9wZXJseTsKLSAqIFRoZSBkcml2ZXIgbm93IG9ubHkgcHJpbnRzIElSUSBpbmZvIGZvciB0aGUgQ3ljbGFkZXMtWiBpZiBpdCdzCi0gKiBjb25maWd1cmVkIHRvIHdvcmsgaW4gaW50ZXJydXB0IG1vZGU7Ci0gKgotICogUmV2aXNpb24gMi4yLjIuMyAgIDE5OTkvMDYvMjggMTE6MTM6MjkgaXZhbgotICogQWRkZWQgc3VwcG9ydCBmb3IgaW50ZXJydXB0IG1vZGUgb3BlcmF0aW9uIGZvciB0aGUgWiBjYXJkczsKLSAqIFJlbW92ZWQgdGhlIGRyaXZlciBpbmFjdGl2aXR5IGNvbnRyb2wgZm9yIHRoZSBaOwotICogQWRkZWQgYSBtaXNzaW5nIE1PRF9ERUNfVVNFX0NPVU5UIGluIHRoZSBjeV9vcGVuIGZ1bmN0aW9uIGZvciB3aGVuCi0gKiB0aGUgWiBmaXJtd2FyZSBpcyBub3QgbG9hZGVkIHlldDsKLSAqIFJlcGxhY2VkIHRoZSAibWFudWFsIiBaIFR4IGZsdXNoIGJ1ZmZlciBieSBhIGNhbGwgdG8gYSBGVyBjb21tYW5kIG9mCi0gKiBzYW1lIGZ1bmN0aW9uYWxpdHk7Ci0gKiBJbXBsZW1lbnRlZCB3b3JrYXJvdW5kIGZvciBJUlEgc2V0dGluZyBsb3NzIG9uIHRoZSBQQ0kgY29uZmlndXJhdGlvbgotICogcmVnaXN0ZXJzIGFmdGVyIGEgUENJIGJyaWRnZSBFRVBST00gcmVsb2FkIChhZmZlY3RzIFBMWDkwNjAgb25seSk7Ci0gKgotICogUmV2aXNpb24gMi4yLjIuMiAgMTk5OS8wNS8xNCAxNzoxODoxNSBpdmFuCi0gKiAvcHJvYyBlbnRyeSBsb2NhdGlvbiBjaGFuZ2VkIHRvIC9wcm9jL3R0eS9kcml2ZXIvY3ljbGFkZXM7Ci0gKiBBZGRlZCBzdXBwb3J0IHRvIHNoYXJlZCBJUlEncyAob25seSBmb3IgUENJIGJvYXJkcyk7Ci0gKiBBZGRlZCBzdXBwb3J0IGZvciBDb2JhbHQgUXViZTIgc3lzdGVtczsKLSAqIElSUSBbZGVdYWxsb2NhdGlvbiBzY2hlbWUgcmV2aXNpdGVkOwotICogQlJFQUsgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiB0aGUgJ2JyZWFrX2N0bCcKLSAqIFRUWSBmYWNpbGl0eTsKLSAqIEZpeGVkIHR5cG8gaW4gVFRZIHN0cnVjdHVyZSBmaWVsZCAnZHJpdmVyX25hbWUnOwotICogSW5jbHVkZWQgYSBQQ0kgYnJpZGdlIHJlc2V0IGFuZCBFRVBST00gcmVsb2FkIGluIHRoZSBib2FyZAotICogaW5pdGlhbGl6YXRpb24gY29kZSAoZm9yIGJvdGggWSBhbmQgWiBzZXJpZXMpLgotICoKLSAqIFJldmlzaW9uIDIuMi4yLjEgIDE5OTkvMDQvMDggMTY6MTc6NDMgaXZhbgotICogRml4ZWQgYSBidWcgaW4gY3lfd2FpdF91bnRpbF9zZW50IHRoYXQgd2FzIHByZXZlbnRpbmcgdGhlIHBvcnQgdG8gYmUKLSAqIGNsb3NlZCBwcm9wZXJseSBhZnRlciBhIFNJR0lOVDsKLSAqIE1vZHVsZSB1c2FnZSBjb3VudGVyIHNjaGVtZSByZXZpc2l0ZWQ7Ci0gKiBBZGRlZCBzdXBwb3J0IHRvIHRoZSB1cGNvbWluZyBZIFBDSSBib2FyZHMgKGkuZS4sIHN1cHBvcnQgdG8gYWRkaXRpb25hbAotICogUENJIERldmljZSBJRCdzKS4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS4xMCAxOTk5LzAxLzIwIDE2OjE0OjI5IGl2YW4KLSAqIFJlbW92ZWQgYWxsIHVubmVjZXNzYXJ5IHBhZ2UtYWxpZ25lbWVudCBvcGVyYXRpb25zIGluIGlvcmVtYXAgY2FsbHMKLSAqIChpb3JlbWFwIGlzIGN1cnJlbnRseSBzYWZlIGZvciB0aGVzZSBvcGVyYXRpb25zKS4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS45ICAxOTk4LzEyLzMwIDE4OjE4OjMwIGl2YW4KLSAqIENoYW5nZWQgYWNjZXNzIHRvIFBMWCBQQ0kgYnJpZGdlIHJlZ2lzdGVycyBmcm9tIEkvTyB0byBNTUlPLCBpbgotICogb3JkZXIgdG8gbWFrZSBQTFg5MDUwLWJhc2VkIGJvYXJkcyB3b3JrIHdpdGggY2VydGFpbiBtb3RoZXJib2FyZHMuCi0gKgotICogUmV2aXNpb24gMi4yLjEuOCAgMTk5OC8xMS8xMyAxMjo0NjoyMCBpdmFuCi0gKiBjeV9jbG9zZSBmdW5jdGlvbiBub3cgcmVzZXRzIChjb3JyZWN0bHkpIHRoZSB0dHktPmNsb3NpbmcgZmxhZzsKLSAqIEpJRkZJRVNfRElGRiBtYWNybyBmaXhlZC4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS43ICAxOTk4LzA5LzAzIDEyOjA3OjI4IGl2YW4KLSAqIEZpeGVkIGJ1ZyBpbiBjeV9jbG9zZSBmdW5jdGlvbiwgd2hpY2ggd2FzIG5vdCBpbmZvcm1pbmcgSFcgb2YKLSAqIHdoaWNoIHBvcnQgc2hvdWxkIGhhdmUgdGhlIHJlY2VwdGlvbiBkaXNhYmxlZCBiZWZvcmUgZG9pbmcgc287Ci0gKiBmaXhlZCBDeWNsb20tOFlvUCBoYXJkd2FyZSBkZXRlY3Rpb24gYnVnLgotICoKLSAqIFJldmlzaW9uIDIuMi4xLjYgIDE5OTgvMDgvMjAgMTc6MTU6MzkgaXZhbgotICogRml4ZWQgYnVnIGluIGN5X2Nsb3NlIGZ1bmN0aW9uLCB3aGljaCBjYXVzZXMgbWFsZnVuY3Rpb24KLSAqIG9mIG9uZSBvZiB0aGUgZmlyc3QgNCBwb3J0cyB3aGVuIGEgaGlnaGVyIHBvcnQgaXMgY2xvc2VkCi0gKiAoQ3ljbG9tLVkgb25seSkuCi0gKgotICogUmV2aXNpb24gMi4yLjEuNSAgMTk5OC8wOC8xMCAxODoxMDoyOCBpdmFuCi0gKiBGaXhlZCBDeWNsb20tNFlvIGhhcmR3YXJlIGRldGVjdGlvbiBidWcuCi0gKgotICogUmV2aXNpb24gMi4yLjEuNCAgMTk5OC8wOC8wNCAxMTowMjo1MCBpdmFuCi0gKiAvcHJvYy9jeWNsYWRlcyBpbXBsZW1lbnRhdGlvbiB3aXRoIGdyZWF0IGNvbGxhYm9yYXRpb24gb2YKLSAqIE1hcmMgTGV3aXMgPG1hcmNAYmxhcmcubmV0PjsKLSAqIGN5eV9pbnRlcnJ1cHQgd2FzIGNoYW5nZWQgdG8gYXZvaWQgb2NjdXJyZW5jZSBvZiBrZXJuZWwgb29wc2VzCi0gKiBkdXJpbmcgUFBQIG9wZXJhdGlvbi4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS4zICAxOTk4LzA2LzAxIDEyOjA5OjEwIGl2YW4KLSAqIEdlbmVyYWwgY29kZSByZXZpZXcgaW4gb3JkZXIgdG8gY29tcGx5IHdpdGggMi4xIGtlcm5lbCBzdGFuZGFyZHM7Ci0gKiBkYXRhIGxvc3MgcHJldmVudGlvbiBmb3Igc2xvdyBkZXZpY2VzIHJldmlzaXRlZCAoY3lfd2FpdF91bnRpbF9zZW50Ci0gKiB3YXMgY3JlYXRlZCk7Ci0gKiByZW1vdmVkIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciBuZXcvb2xkIFBDSSBzdHJ1Y3R1cmUgc3VwcG9ydAotICogKG5vdyB0aGUgZHJpdmVyIG9ubHkgc3VwcG9ydHMgdGhlIG5ldyBQQ0kgc3RydWN0dXJlKS4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS4xICAxOTk4LzAzLzE5IDE2OjQzOjEyIGl2YW4KLSAqIGFkZGVkIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciBuZXcvb2xkIFBDSSBzdHJ1Y3R1cmUgc3VwcG9ydDsKLSAqIHJlbW92ZWQga2VybmVsIHNlcmllcyAoMi4wLnggLyAyLjEueCkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCi0gKgotICogUmV2aXNpb24gMi4xLjEuMyAgMTk5OC8wMy8xNiAxODowMToxMiBpdmFuCi0gKiBjbGVhbmVkIHVwIHRoZSBkYXRhIGxvc3MgZml4OwotICogZml4ZWQgWE9OL1hPRkYgaGFuZGxpbmcgb25jZSBtb3JlIChDeWNsYWRlcy1aKTsKLSAqIGdlbmVyYWwgcmV2aWV3IG9mIHRoZSBkcml2ZXIgcm91dGluZXM7Ci0gKiBpbnRyb2R1Y3Rpb24gb2YgYSBtZWNoYW5pc20gdG8gcHJldmVudCBkYXRhIGxvc3Mgd2l0aCBzbG93Ci0gKiBwcmludGVycywgYnkgZm9yY2luZyBhIGRlbGF5IGJlZm9yZSBjbG9zaW5nIHRoZSBwb3J0LgotICoKLSAqIFJldmlzaW9uIDIuMS4xLjIgIDE5OTgvMDIvMTcgMTY6NTA6MDAgaXZhbgotICogZml4ZWQgZGV0ZWN0aW9uL2hhbmRsaW5nIG9mIG5ldyBDRDE0MDAgaW4gWWUgYm9hcmRzOwotICogZml4ZWQgWE9OL1hPRkYgaGFuZGxpbmcgKEN5Y2xhZGVzLVopOwotICogZml4ZWQgZGF0YSBsb3NzIGNhdXNlZCBieSBhIHByZW1hdHVyZSBwb3J0IGNsb3NlOwotICogaW50cm9kdWN0aW9uIG9mIGEgZmxhZyB0aGF0IGhvbGRzIHRoZSBDRDE0MDAgdmVyc2lvbiBJRCBwZXIgcG9ydAotICogKHVzZWQgYnkgdGhlIENZR0VUQ0QxNDAwVkVSIG5ldyBpb2N0bCkuCi0gKgotICogUmV2aXNpb24gMi4xLjEuMSAgMTk5Ny8xMi8wMyAxNzozMToxOSBpdmFuCi0gKiBDb2RlIHJldmlldyBmb3IgdGhlIG1vZHVsZSBjbGVhbnVwIHJvdXRpbmU7Ci0gKiBmaXhlZCBSVFMgYW5kIERUUiBzdGF0dXMgcmVwb3J0IGZvciBuZXcgQ0QxNDAwJ3MgaW4gZ2V0X21vZGVtX2luZm87Ci0gKiBpbmNsdWRlcyBhbm9ueW1vdXMgY2hhbmdlcyByZWdhcmRpbmcgc2lnbmFsX3BlbmRpbmcuCi0gKgotICogUmV2aXNpb24gMi4xICAxOTk3LzExLzAxIDE3OjQyOjQxIGl2YW4KLSAqIENoYW5nZXMgaW4gdGhlIGRyaXZlciB0byBzdXBwb3J0IEFscGhhIHN5c3RlbXMgKGV4Y2VwdCA4Wm8gVl8xKTsKLSAqIEJSRUFLIGZpeCBmb3IgdGhlIEN5Y2xhZGVzLVogYm9hcmRzOwotICogZHJpdmVyIGluYWN0aXZpdHkgY29udHJvbCBieSBGVyBpbXBsZW1lbnRlZDsKLSAqIGludHJvZHVjdGlvbiBvZiBmbGFnIHRoYXQgYWxsb3dzIGRyaXZlciB0byB0YWtlIGFkdmFudGFnZSBvZgotICogYSBzcGVjaWFsIENEMTQwMCBmZWF0dXJlIHJlbGF0ZWQgdG8gSFcgZmxvdyBjb250cm9sOwotICogYWRkZWQgc3VwcG9ydCBmb3IgdGhlIENEMTQwMCAgcmV2LiBKIChDeWNsb20tWSBib2FyZHMpOwotICogaW50cm9kdWN0aW9uIG9mIGlvY3RscyB0bzoKLSAqICAtIGNvbnRyb2wgdGhlIHJ0c2R0cl9pbnYgZmxhZyAoQ3ljbG9tLVkpOwotICogIC0gY29udHJvbCB0aGUgcmZsb3cgZmxhZyAoQ3ljbG9tLVkpOwotICogIC0gYWRqdXN0IHRoZSBwb2xsaW5nIGludGVydmFsIChDeWNsYWRlcy1aKTsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMzMgIDE5OTcvMDYvMjcgMTk6MDA6MDAgIGl2YW4KLSAqIEZpeGVzIHJlbGF0ZWQgdG8ga2VybmVsIHZlcnNpb24gY29uZGl0aW9uYWwKLSAqIGNvbXBpbGF0aW9uLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4zMiAgMTk5Ny8wNi8xNCAxOTozMDowMCAgaXZhbgotICogQ29tcGF0aWJpbGl0eSBpc3N1ZXMgYmV0d2VlbiBrZXJuZWxzIDIuMC54IGFuZAotICogMi4xLnggKG1haW5seSByZWxhdGVkIHRvIGNsZWFyX2JpdCBmdW5jdGlvbikuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjMxICAxOTk3LzA2LzAzIDE1OjMwOjAwICBpdmFuCi0gKiBDaGFuZ2VzIHRvIGRlZmluZSB0aGUgbWVtb3J5IHdpbmRvdyBhY2NvcmRpbmcgdG8gdGhlCi0gKiBib2FyZCB0eXBlLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4zMCAgMTk5Ny8wNS8xNiAxNTozMDowMCAgZGFuaWVsCi0gKiBDaGFuZ2VzIHRvIHN1cHBvcnQgbmV3IGN5Y2xhZGVzWiBib2FyZHMuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjI5ICAxOTk3LzA1LzEyIDExOjMwOjAwICBkYW5pZWwKLSAqIE1lcmdlIG9mIEJlbnRzb24ncyBhbmQgRGFuaWVsJ3MgdmVyc2lvbiAxLjM2LjQuMjguCi0gKiBDb3JyZWN0cyBidWcgaW4gY3lfZGV0ZWN0X3BjaTogY2hlY2sgaWYgdGhlcmUgYXJlIG1vcmUKLSAqIHBvcnRzIHRoYW4gdGhlIG51bWJlciBvZiBzdGF0aWMgc3RydWN0cyBhbGxvY2F0ZWQuCi0gKiBXYXJuaW5nIG1lc3NhZ2UgZHVyaW5nIGluaXRpYWxpemF0aW9uIGlmIHRoaXMgZHJpdmVyIGlzCi0gKiB1c2VkIHdpdGggdGhlIG5ldyBnZW5lcmF0aW9uIG9mIGN5Y2xhZGVzWiBib2FyZHMuICBUaG9zZQotICogd2lsbCBiZSBzdXBwb3J0ZWQgb25seSBpbiBuZXh0IHJlbGVhc2Ugb2YgdGhlIGRyaXZlci4KLSAqIENvcnJlY3RzIGJ1ZyBpbiBjeV9kZXRlY3RfcGNpIGFuZCBjeV9kZXRlY3RfaXNhIHRoYXQKLSAqIHJldHVybmVkIHdyb25nIG51bWJlciBvZiBWQUxJRCBib2FyZHMsIHdoZW4gYSBjeWNsb21ZCi0gKiB3YXMgZm91bmQgd2l0aCBubyBzZXJpYWwgbW9kdWxlcyBjb25uZWN0ZWQuCi0gKiBDaGFuZ2VzIHRvIHVzZSBjdXJyZW50ICgyLjEueCkga2VybmVsIHN1YnJvdXRpbmUgbmFtZXMKLSAqIGFuZCBjcmVhdGVkIG1hY3JvcyBmb3IgY29tcGlsYXRpb24gd2l0aCAyLjAueCBrZXJuZWwsCi0gKiBpbnN0ZWFkIG9mIHRoZSBvdGhlciB3YXkgYXJvdW5kLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yOCAgMTk5Ny8wNS8/PyA/PzowMDowMCAgYmVudHNvbgotICogQ2hhbmdlIHF1ZXVlX3Rhc2tfaXJxX29mZiB0byBxdWV1ZV90YXNrX2lycS4KLSAqIFRoZSBpbmxpbmUgZnVuY3Rpb24gcXVldWVfdGFza19pcnFfb2ZmICh0cXVldWUuaCkKLSAqIHdhcyByZW1vdmVkIGZyb20gbGF0ZXN0IHJlbGVhc2VzIG9mIDIuMS54IGtlcm5lbC4KLSAqIFVzZSBvZiBtYWNybyBfX2luaXQgdG8gbWFyayB0aGUgaW5pdGlhbGl6YXRpb24KLSAqIHJvdXRpbmVzLCBzbyBtZW1vcnkgY2FuIGJlIHJldXNlZC4KLSAqIEFsc28gaW5jb3Jwb3JhdGUgaW1wbGVtZW50YXRpb24gb2YgY3JpdGljYWwgcmVnaW9uCi0gKiBpbiBmdW5jdGlvbiBjbGVhbnVwX21vZHVsZSgpIGNyZWF0ZWQgYnkgYW5vbnltb3VzCi0gKiBsaW51eGVyLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yOCAgMTk5Ny8wNC8yNSAxNjowMDowMCAgZGFuaWVsCi0gKiBDaGFuZ2UgdG8gc3VwcG9ydCBuZXcgZmlybXdhcmUgdGhhdCBzb2x2ZXMgRENEIHByb2JsZW06Ci0gKiBhcHBsaWNhdGlvbiBjb3VsZCBmYWlsIHRvIHJlY2VpdmUgU0lHSFVQIHNpZ25hbCB3aGVuIERDRAotICogdmFyeWluZyB0b28gZmFzdC4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMjcgIDE5OTcvMDMvMjYgMTA6MzA6MDAgIGRhbmllbAotICogQ2hhbmdlZCBmb3Igc3VwcG9ydCBsaW51eCB2ZXJzaW9ucyAyLjEuWC4KLSAqIEJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBsaW51eCB2ZXJzaW9ucyAyLjAuWC4KLSAqIENvcnJlY3RlZCBpbGxlZ2FsIHVzZSBvZiBmaWxsZXIgZmllbGQgaW4KLSAqIENIX0NUUkwgc3RydWN0LgotICogRGVsZXRlZCBzb21lIGRlYnVnIG1lc3NhZ2VzLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yNiAgMTk5Ny8wMi8yNyAxMjowMDowMCAgZGFuaWVsCi0gKiBJbmNsdWRlZCBjaGVjayBmb3IgTlVMTCB0dHkgcG9pbnRlciBpbiBjeXpfcG9sbC4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMjUgIDE5OTcvMDIvMjYgMTY6Mjg6MzAgIGJlbnRzb24KLSAqIEJpbGwgRm9zdGVyIGF0IEJsYXJnISBPbmxpbmUgc2VydmljZXMgbm90aWNlZCB0aGF0Ci0gKiBzb21lIG9mIHRoZSBzd2l0Y2ggZWxlbWVudHMgb2YgLVogbW9kZW0gY29udHJvbAotICogbGFja2VkIGEgY2xvc2luZyAiYnJlYWs7IgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yNCAgMTk5Ny8wMi8yNCAxMTowMDowMCAgZGFuaWVsCi0gKiBDaGFuZ2VkIGxvdyB3YXRlciB0aHJlc2hvbGQgZm9yIGJ1ZmZlciB4bWl0X2J1ZgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yMyAgMTk5Ni8xMi8wMiAyMTo1MDoxNiAgYmVudHNvbgotICogTWFyY2lvIHByb3ZpZGVkIGZpeCB0byBtb2RlbSBzdGF0dXMgZmV0Y2ggZm9yIC1aCi0gKgotICogUmV2aXNpb24gMS4zNi40LjIyICAxOTk2LzEwLzI4IDIyOjQxOjE3ICBiZW50c29uCi0gKiBpbXByb3ZlIG1hcHBpbmcgb2YgLVogY29udHJvbCBwYWdlICh0aGFua3MgdG8gU3RldmUKLSAqIFByaWNlIDxzdGV2ZXBAZmEudGRrdGNhLmNvbT4gZm9yIGhlbHAgb24gdGhpcykKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMjEgIDE5OTYvMDkvMTAgMTc6MDA6MTAgIGJlbnRzb24KLSAqIHNoaWZ0IGZyb20gQ1BVLWJvdW5kIHRvIG1lbWNvcHkgaW4gY3l6X3BvbGxpbmcgb3BlcmF0aW9uCi0gKgotICogUmV2aXNpb24gMS4zNi40LjIwICAxOTk2LzA5LzA5IDE4OjMwOjMyICBCZW50c29uCi0gKiBBZGRlZCBzdXBwb3J0IHRvIHNldCBhbmQgcmVwb3J0IGhpZ2hlciBzcGVlZHMuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjE5YyAgMTk5Ni8wOC8wOSAxMDowMDowMCAgTWFyY2lvIFNhaXRvCi0gKiBTb21lIGZpeGVzIGluIHRoZSBIVyBmbG93IGNvbnRyb2wgZm9yIHRoZSBCRVRBIHJlbGVhc2UuCi0gKiBEb24ndCB0cnkgdG8gcmVnaXN0ZXIgdGhlIElSUS4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTkgIDE5OTYvMDgvMDggMTY6MjM6MTggIEJlbnRzb24KLSAqIG1ha2Ugc3VyZSAiY3ljIiBhcHBlYXJzIGluIGFsbCBrZXJuZWwgbWVzc2FnZXM7IGFsbCBzb2Z0IGludGVycnVwdHMKLSAqIGhhbmRsZWQgYnkgc2FtZSByb3V0aW5lOyByZWNvZ25pemUgb3V0LW9mLWJhbmQgcmVjZXB0aW9uOyBjb21tZW50Ci0gKiBvdXQgc29tZSBkaWFnbm9zdGljIG1lc3NhZ2VzOyBsZWF2ZSBSVFMvQ1RTIGZsb3cgY29udHJvbCB0byBoYXJkd2FyZTsKLSAqIGZpeCByYWNlIGNvbmRpdGlvbiBpbiAtWiBidWZmZXIgbWFuYWdlbWVudDsgb25seSAtWSBuZWVkcyB0byBleHBsaWNpdGx5Ci0gKiBmbHVzaCBjaGFyczsgdGlkeSB1cCBzb21lIHN0YXJ0dXAgbWVzc2FnZXM7Ci0gKgotICogUmV2aXNpb24gMS4zNi40LjE4ICAxOTk2LzA3LzI1IDE4OjU3OjMxICBiZW50c29uCi0gKiBzaGlmdCBNT0RfSU5DX1VTRV9DT1VOVCBsb2NhdGlvbiB0byBtYXRjaAotICogc2VyaWFsLmM7IHB1cmdlIHNvbWUgZGlhZ25vc3RpYyBtZXNzYWdlczsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTcgIDE5OTYvMDcvMjUgMTg6MDE6MDggIGJlbnRzb24KLSAqIGVuYWJsZSBtb2RlbSBzdGF0dXMgbWVzc2FnZXMgYW5kIGZldGNoICYgcHJvY2VzcyB0aGVtOyBub3RlCi0gKiB0aW1lIG9mIGxhc3QgYWN0aXZpdHkgdHlwZSBmb3IgZWFjaCBwb3J0OyBzZXRfbGluZV9jaGFyIG5vdwotICogc3VwcG9ydHMgbW9yZSB0aGFuIGxpbmUgMCBhbmQgdHJlYXRzIDAgYmF1ZCBjb3JyZWN0bHk7Ci0gKiBnZXRfbW9kZW1faW5mbyBzZW5zZXMgcnNfc3RhdHVzOwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xNiAgMTk5Ni8wNy8yMCAwODo0MzoxNSAgYmVudHNvbgotICogYmFyZWx5IHdvcmtzLS1ub3cncyB0aW1lIHRvIHR1cm4gb24KLSAqIG1vcmUgZmVhdHVyZXMgJ3RpbCBpdCBicmVha3MKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTUgIDE5OTYvMDcvMTkgMjI6MzA6MDYgIGJlbnRzb24KLSAqIGNoZWNrIG1vcmUgLVogYm9hcmQgc3RhdHVzOyBzaG9ydGVuIGJvb3QgbWVzc2FnZQotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xNCAgMTk5Ni8wNy8xOSAyMjoyMDozNyAgYmVudHNvbgotICogZml4IHJlZmVyZW5jZSB0byBjaF9jdHJsIGluIHN0YXJ0dXA7IHZlcmlmeSByZXR1cm4KLSAqIHZhbHVlcyBmcm9tIGN5el9pc3N1ZV9jbWQgYW5kIGN5el91cGRhdGVfY2hhbm5lbDsKLSAqIG1vcmUgc3R1ZmYgdG8gZ2V0IG1vZGVtIGNvbnRyb2wgY29ycmVjdDsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTMgIDE5OTYvMDcvMTEgMTk6NTM6MzMgIGJlbnRzb24KLSAqIG1vcmUgLVogc3R1ZmYgZm9sZGVkIGluOyByZS1vcmRlciBjaGFuZ2VzIHRvIHB1dCAtWiBzdHVmZgotICogYWZ0ZXIgLVkgc3R1ZmYgKHRvIG1ha2UgY2hhbmdlcyBjbGVhcmVyKQotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xMiAgMTk5Ni8wNy8xMSAxNTo0MDo1NSAgYmVudHNvbgotICogQWRkIGNvZGUgdG8gcG9sbCBDeWNsYWRlcy1aLiAgQWRkIGNvZGUgdG8gZ2V0ICYgc2V0IFJTLTIzMiBjb250cm9sLgotICogQWRkIGNvZGUgdG8gc2VuZCBicmVhay4gIENsZWFyIGZpcm13YXJlIElEIHdvcmQgYXQgc3RhcnR1cCAoc28KLSAqIHRoYXQgb3RoZXIgY29kZSB3b24ndCB0YWxrIHRvIGluYWN0aXZlIGJvYXJkKS4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTEgIDE5OTYvMDcvMDkgMDU6Mjg6MjkgIGJlbnRzb24KLSAqIGFkZCBjb2RlIGZvciAtWiBpbiBzZXRfbGluZV9jaGFyCi0gKgotICogUmV2aXNpb24gMS4zNi40LjEwICAxOTk2LzA3LzA4IDE5OjI4OjM3ICBiZW50c29uCi0gKiBmb2xkIG1vcmUgLVogc3R1ZmYgKG9yIGluIHNvbWUgY2FzZXMsIGVycm9yIG1lc3NhZ2VzKQotICogaW50byBkcml2ZXI7IGFkZCB0ZXh0IHRvICJkb24ndCBrbm93IHdoYXQgdG8gZG8iIG1lc3NhZ2VzLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC45ICAxOTk2LzA3LzA4IDE4OjM4OjM4ICBiZW50c29uCi0gKiBtb3ZlZCBjb21waWxlLXRpbWUgZmxhZ3MgbmVhciB0b3Agb2YgZmlsZTsgY29zbWV0aWMgY2hhbmdlcwotICogdG8gbmFycm93IHRleHQgKHRvIGFsbG93IDItdXAgcHJpbnRpbmcpOyBjaGFuZ2VkIG1hbnkgZGVjbGFyYXRpb25zCi0gKiB0byAic3RhdGljIiB0byBsaW1pdCBleHRlcm5hbCBzeW1ib2xzOyBzaHVmZmxlZCBjb2RlIG9yZGVyIHRvCi0gKiBjb2FsZXNjZSAtWSBhbmQgLVogc3BlY2lmaWMgY29kZSwgYWxzbyB0byBwdXQgaW50ZXJuYWwgZnVuY3Rpb25zCi0gKiBpbiBvcmRlciBvZiB0dHlfZHJpdmVyIHN0cnVjdHVyZTsgYWRkZWQgY29kZSB0byByZWNvZ25pemUgLVoKLSAqIHBvcnRzIChhbmQgZm9yIG1vbWVudCwgZG8gbm90aGluZyBvciByZXBvcnQgZXJyb3IpOyBhZGQgY3lfc3RhcnR1cAotICogdG8gcGFyc2UgYm9vdCBjb21tYW5kIGxpbmUgZm9yIGV4dHJhIGJhc2UgYWRkcmVzc2VzIGZvciBJU0EgcHJvYmVzOwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC44ICAxOTk2LzA2LzI1IDE3OjQwOjE5ICBiZW50c29uCi0gKiByZW9yZGVyIHNvbWUgY29kZSwgZml4IHR5cGVzIG9mIHNvbWUgdmFycyAoaW50IHZzLiBsb25nKSwKLSAqIGFkZCBjeV9zZXR1cCB0byBzdXBwb3J0IHVzZXIgZGVjbGFyZWQgSVNBIGFkZHJlc3NlcwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC43ICAxOTk2LzA2LzIxIDIzOjA2OjE4ICBiZW50c29uCi0gKiBkdW1wIGlvY3RsIGJhc2VkIGZpcm13YXJlIGxvYWQgKGl0J3Mgbm93IGEgdXNlciBsZXZlbAotICogcHJvZ3JhbSk7IGVuc3VyZSB1bmluaXRpYWx6ZWQgcG9ydHMgY2Fubm90IGJlIHVzZWQKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuNiAgMTk5Ni8wNi8yMCAyMzoxNzoxOSAgYmVudHNvbgotICogcmVuYW1lIHZhcnMgYW5kIHJlc3RydWN0dXJlIHNvbWUgY29kZQotICoKLSAqIFJldmlzaW9uIDEuMzYuNC41ICAxOTk2LzA2LzE0IDE1OjA5OjQ0ICBiZW50c29uCi0gKiBnZXQgcmlnaHQgc3RhdHVzIGJhY2sgYWZ0ZXIgYm9vdCBsb2FkCi0gKgotICogUmV2aXNpb24gMS4zNi40LjQgIDE5OTYvMDYvMTMgMTk6NTE6NDQgIGJlbnRzb24KLSAqIHN1Y2Nlc3NmdWxseSBsb2FkcyBmaXJtd2FyZQotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4zICAxOTk2LzA2LzEzIDA2OjA4OjMzICBiZW50c29uCi0gKiBhZGQgbW9yZSBvZiB0aGUgY29kZSBmb3IgdGhlIGJvb3QvbG9hZCBpb2N0bHMKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMiAgMTk5Ni8wNi8xMSAyMTowMDo1MSAgYmVudHNvbgotICogc3RhcnQgdG8gYWRkIFogZnVuY3Rpb25hbGl0eS0tc3RhcnRpbmcgd2l0aCBpb2N0bAotICogZm9yIGxvYWRpbmcgZmlybXdhcmUKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMSAgMTk5Ni8wNi8xMCAxODowMzowMiAgYmVudHNvbgotICogYWRkZWQgY29kZSB0byByZWNvZ25pemUgWi9QQ0kgY2FyZCBhdCBpbml0aWFsaXphdGlvbjsgcmVwb3J0Ci0gKiBwcmVzZW5jZSwgYnV0IGNhcmQgaXMgbm90IGluaXRpYWxpemVkIChiZWNhdXNlIGZpcm13YXJlIG5lZWRzCi0gKiB0byBiZSBsb2FkZWQpCi0gKgotICogUmV2aXNpb24gMS4zNi4zLjggIDE5OTYvMDYvMDcgMTY6Mjk6MDAgIGJlbnRzb24KLSAqIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBhdCB6ZXJvOyBhZGRlZCBtaXNzaW5nIHZlcmlmeV9hcmVhCi0gKiBhcyBub3RlZCBieSBIZWlrbyBFacOfZmVsZHQgPGhlaWtvQGNvbG9zc3VzLmVzY2FwZS5kZT4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjMuNyAgMTk5Ni8wNC8xOSAyMTowNjoxOCAgYmVudHNvbgotICogcmVtb3ZlIHVubmVlZGVkIGJvb3QgbWVzc2FnZSAmIGZpeCBDTE9DQUwgaGFyZHdhcmUgZmxvdwotICogY29udHJvbCAoTWlxdWVsIHZhbiBTbW9vcmVuYnVyZyA8bWlxdWVsc0BRLmNpc3Ryb24ubmw+KTsKLSAqIHJlbW92ZSB1bnVzZWQgZGlhZ25vc3RpYyBzdGF0ZW1lbnRzOyBtaW5vciAwIGlzIGZpcnN0OwotICoKLSAqIFJldmlzaW9uIDEuMzYuMy42ICAxOTk2LzAzLzEzIDEzOjIxOjE3ICBtYXJjaW8KLSAqIFRoZSBrZXJuZWwgZnVuY3Rpb24gdnJlbWFwIChhdmFpbGFibGUgb25seSBpbiBsYXRlciAxLjMueHgga2VybmVscykKLSAqIGFsbG93cyB0aGUgYWNjZXNzIHRvIG1lbW9yeSBhZGRyZXNzZXMgYWJvdmUgdGhlIFJBTS4gVGhpcyByZXZpc2lvbgotICogb2YgdGhlIGRyaXZlciBzdXBwb3J0cyBQQ0kgYm9hcmRzIGJlbG93IDFNYiAoZGV2aWNlIGlkIDB4MTAwKSBhbmQKLSAqIGFib3ZlIDFNYiAoZGV2aWNlIGlkIDB4MTAxKS4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjMuNSAgMTk5Ni8wMy8wNyAxNToyMDoxNyAgYmVudHNvbgotICogU29tZSBnbG9iYWwgY2hhbmdlcyB0byBpbnRlcnJ1cHQgaGFuZGxpbmcgc3BpbGxlZCBpbnRvCi0gKiB0aGlzIGRyaXZlci0tbW9zdGx5IHVudXNlZCBhcmd1bWVudHMgaW4gc3lzdGVtIGZ1bmN0aW9uCi0gKiBjYWxscy4gIEFsc28gYWRkZWQgY2hhbmdlIGJ5IE1hcmNpbyBTYWl0byB3aGljaCBzaG91bGQKLSAqIHJlZHVjZSBsb3N0IGludGVycnVwdHMgYXQgc3RhcnR1cCBieSBmYXN0IHByb2Nlc3NvcnMuCi0gKgotICogUmV2aXNpb24gMS4zNi4zLjQgIDE5OTUvMTEvMTMgIDIwOjQ1OjEwICBiZW50c29uCi0gKiBDaGFuZ2VzIGJ5IENvcmV5IE1pbnlhcmQgPG1pbnlhcmRAd2YtcmNoLmNpcnIuY29tPiBkaXN0cmlidXRlZAotICogaW4gMS4zLjQxIGtlcm5lbCB0byByZW1vdmUgYSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiwgZXh0ZW5kCi0gKiBzb21lIGVycm9yIG1lc3NhZ2VzLCBhbmQgbGV0IHRoZSBkcml2ZXIgcnVuIGFzIGEgbG9hZGFibGUgbW9kdWxlCi0gKiBDaGFuZ2UgYnkgQWxhbiBXZW5kdCA8YWxhbkBlejAuZXpsaW5rLmNvbT4gdG8gcmVtb3ZlIGEKLSAqIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uLgotICogQ2hhbmdlIGJ5IE1hcmNpbyBTYWl0byA8bWFyY2lvQGN5Y2xhZGVzLmNvbT4gdG8gZml4IFBDSSBhZGRyZXNzaW5nLgotICoKLSAqIFJldmlzaW9uIDEuMzYuMy4zICAxOTk1LzExLzEzICAxOTo0NDo0OCAgYmVudHNvbgotICogQ2hhbmdlcyBieSBMaW51cyBUb3J2YWxkcyBpbiAxLjMuMzMga2VybmVsIGRpc3RyaWJ1dGlvbgotICogcmVxdWlyZWQgZHVlIHRvIHJlb3JkZXJpbmcgb2YgZHJpdmVyIGluaXRpYWxpemF0aW9uLgotICogRHJpdmVycyBhcmUgbm93IGluaXRpYWxpemVkICphZnRlciogbWVtb3J5IG1hbmFnZW1lbnQuCi0gKgotICogUmV2aXNpb24gMS4zNi4zLjIgIDE5OTUvMDkvMDggIDIyOjA3OjE0ICBiZW50c29uCi0gKiByZW1vdmUgcHJpbnRrIGZyb20gSVNSOyBmaXggdHlwbwotICoKLSAqIFJldmlzaW9uIDEuMzYuMy4xICAxOTk1LzA5LzAxICAxMjowMDo0MiAgbWFyY2lvCi0gKiBNaW5vciBmaXhlcyBpbiB0aGUgUENJIGJvYXJkIHN1cHBvcnQuIFBDSSBmdW5jdGlvbiBjYWxscyBpbgotICogY29uZGl0aW9uYWwgY29tcGlsYXRpb24gKENPTkZJR19QQ0kpLiBUaGFua3MgdG8gSmltIER1bmNhbgotICogPGR1bmNhbkBva2F5LmNvbT4uICJiYWQgc2VyaWFsIGNvdW50IiBtZXNzYWdlIHJlbW92ZWQuCi0gKgotICogUmV2aXNpb24gMS4zNi4zICAxOTk1LzA4LzIyICAwOToxOTo0MiAgbWFyY2lvCi0gKiBDeWNsb20tWS9QQ0kgc3VwcG9ydCBhZGRlZC4gQ2hhbmdlcyBpbiB0aGUgY3lfaW5pdCByb3V0aW5lIGFuZAotICogYm9hcmQgaW5pdGlhbGl6YXRpb24uIENoYW5nZXMgaW4gdGhlIGJvb3QgbWVzc2FnZXMuIFRoZSBkcml2ZXIKLSAqIHN1cHBvcnRzIHVwIHRvIDQgYm9hcmRzIGFuZCA2NCBwb3J0cyBieSBkZWZhdWx0LgotICoKLSAqIFJldmlzaW9uIDEuMzYuMS40ICAxOTk1LzAzLzI5ICAwNjoxNDoxNCAgYmVudHNvbgotICogZGlzYW1iaWd1YXRlIGJldHdlZW4gQ3ljbG9tLTE2WSBhbmQgQ3ljbG9tLTMyWWU7Ci0gKgotICogUmV2aXNpb24gMS4zNi4xLjMgIDE5OTUvMDMvMjMgIDIyOjE1OjM1ICBiZW50c29uCi0gKiBhZGQgbWlzc2luZyBicmVhayBpbiBtb2RlbSBjb250cm9sIGJsb2NrIGluIGlvY3RsIHN3aXRjaCBzdGF0ZW1lbnQKLSAqIChkaXNjb3ZlcmVkIGJ5IE1pY2hhZWwgRWR3YXJkIENoYXN0YWluIDxtZWNAam9iZS5zaGVsbC5wb3J0YWwuY29tPik7Ci0gKgotICogUmV2aXNpb24gMS4zNi4xLjIgIDE5OTUvMDMvMjIgIDE5OjE2OjIyICBiZW50c29uCi0gKiBtYWtlIHN1cmUgQ1RTIGZsb3cgY29udHJvbCBpcyBzZXQgYXMgc29vbiBhcyBwb3NzaWJsZSAodGhhbmtzCi0gKiB0byBub3RlIGZyb20gRGF2aWQgTGFtYmVydCA8bGFtYmVydEBjaGVzYXBlYWtlLnJwcy5zbGIuY29tPik7Ci0gKgotICogUmV2aXNpb24gMS4zNi4xLjEgIDE5OTUvMDMvMTMgIDE1OjQ0OjQzICBiZW50c29uCi0gKiBpbml0aWFsaXplIGRlZmF1bHRzIGZvciByZWNlaXZlIHRocmVzaG9sZCBhbmQgc3RhbGUgZGF0YSB0aW1lb3V0OwotICogY29zbWV0aWMgY2hhbmdlczsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2ICAxOTk1LzAzLzEwICAyMzozMzo1MyAgYmVudHNvbgotICogYWRkZWQgc3VwcG9ydCBvZiBjaGlwcyA0LTcgaW4gMzIgcG9ydCBDeWNsb20tWWU7Ci0gKiBmaXggY3lfaW50ZXJydXB0IHBvaW50ZXIgZGVyZWZlcmVuY2UgcHJvYmxlbQotICogKEpvZSBQb3J0bWFuIDxiYXJvbkBhYS5uZXQ+KTsKLSAqIGdpdmUgYmV0dGVyIGVycm9yIHJlc3BvbnNlIGlmIG9wZW4gaXMgYXR0ZW1wdGVkIG9uIG5vbi1leGlzdGVudCBwb3J0Ci0gKiAoWmFjaGFyaWFoIFZhdW0gPGpjaHJ5c2xyQG5ldGNvbS5jb20+KTsKLSAqIGNvcnJlY3QgY29tbWFuZCB0aW1lb3V0IChLZW5uZXRoIExlcm1hbiA8bGVybWFuQEBzZWx0ZC5uZXduZXQuY29tPik7Ci0gKiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmb3IgLTE2WSBvbiBzeXN0ZW1zIHdpdGggZmFzdCwgbm9pc3kgYnVzOwotICogY29tbWVudCBvdXQgZGlhZ25vc3RpYyBwcmludCBmdW5jdGlvbjsKLSAqIGNsZWFuZWQgdXAgdGFibGUgb2YgYmFzZSBhZGRyZXNzZXM7Ci0gKiBzZXQgcmVjZWl2ZXIgdGltZS1vdXQgcGVyaW9kIHJlZ2lzdGVyIHRvIGNvcnJlY3QgdmFsdWUsCi0gKiBzZXQgcmVjZWl2ZSB0aHJlc2hvbGQgdG8gYmV0dGVyIGRlZmF1bHQgdmFsdWVzLAotICogc2V0IGNoaXAgdGltZXIgdG8gbW9yZSBhY2N1cmF0ZSAyMDAgSHogdGlja2luZywKLSAqIGFkZCBjb2RlIHRvIG1vbml0b3IgYW5kIG1vZGlmeSByZWNlaXZlIHBhcmFtZXRlcnMKLSAqIChSaWsgRmFpdGggPGZhaXRoQGNzLnVuYy5lZHU+IE5pY2sgU2ltaWNpY2gKLSAqIDxuanNAc2NpZmkuZW1pLm5ldD4pOwotICoKLSAqIFJldmlzaW9uIDEuMzUgIDE5OTQvMTIvMTYgIDEzOjU0OjE4ICBzdGVmZmVuCi0gKiBhZGRpdGlvbmFsIHBhdGNoIGJ5IE1hcmNpbyBTYWl0byBmb3IgYm9hcmQgZGV0ZWN0aW9uCi0gKiBBY2NpZGVudGx5IGxlZnQgb3V0IGluIDEuMzQKLSAqCi0gKiBSZXZpc2lvbiAxLjM0ICAxOTk0LzEyLzEwICAxMjozNzoxMiAgc3RlZmZlbgotICogVGhpcyBpcyB0aGUgY29ycmVjdGVkIHZlcnNpb24gYXMgc3VnZ2VzdGVkIGJ5IE1hcmNpbyBTYWl0bwotICoKLSAqIFJldmlzaW9uIDEuMzMgIDE5OTQvMTIvMDEgIDIyOjQxOjE4ICBiZW50c29uCi0gKiBhZGQgaG9va3MgdG8gc3VwcG9ydCBtb3JlIGhpZ2ggc3BlZWRzIGRpcmVjdGx5OyBhZGQgdHl0c28KLSAqIHBhdGNoIHJlZ2FyZGluZyBDTE9DQUwgd2FrZXVwcwotICoKLSAqIFJldmlzaW9uIDEuMzIgIDE5OTQvMTEvMjMgIDE5OjUwOjA0ICBiZW50c29uCi0gKiBhbGxvdyBkaXJlY3Qga2VybmVsIGNvbnRyb2wgb2YgaGlnaGVyIHNpZ25hbGxpbmcgcmF0ZXM7Ci0gKiBsb29rIGZvciBjYXJkcyBhdCBhZGRpdGlvbmFsIGxvY2F0aW9ucwotICoKLSAqIFJldmlzaW9uIDEuMzEgIDE5OTQvMTEvMTYgIDA0OjMzOjI4ICBiZW50c29uCi0gKiBBTk9USEVSIGZpeCBmcm9tIENvcmV5IE1pbnlhcmQsIG1pbnlhcmRAd2YtcmNoLmNpcnIuY29tLS0KLSAqIGEgcHJvYmxlbSBpbiBjaGFyc19pbl9idWZmZXIgaGFzIGJlZW4gcmVzb2x2ZWQgYnkgc29tZQotICogc21hbGwgY2hhbmdlczsgIHRoaXMgc2hvdWxkIHlpZWxkIHNtb290aGVyIG91dHB1dAotICoKLSAqIFJldmlzaW9uIDEuMzAgIDE5OTQvMTEvMTYgIDA0OjI4OjA1ICBiZW50c29uCi0gKiBGaXggZnJvbSBDb3JleSBNaW55YXJkLCBJbnRlcm5ldDogbWlueWFyZEBtZXRyb25ldC5jb20sCi0gKiBVVUNQOiBtaW55YXJkQHdmLXJjaC5jaXJyLmNvbSwgV09SSzogbWlueWFyZGJuci5jYSwgdG8KLSAqIGN5X2hhbmd1cCB0aGF0IGFwcGVhcnMgdG8gY2xlYXIgdXAgbXVjaCAoYWxsPykgb2YgdGhlCi0gKiBEVFIgZ2xpdGNoZXM7IGFsc28gaGUncyBhZGRlZC9jbGVhbmVkLXVwIGRpYWdub3N0aWMgbWVzc2FnZXMKLSAqCi0gKiBSZXZpc2lvbiAxLjI5ICAxOTk0LzExLzE2ICAwNDoxNjowNyAgYmVudHNvbgotICogYWRkIGNoYW5nZSBwcm9wb3NlZCBieSBSYWxwaCBTaW1zLCByYWxwaHNAaGFsY3lvbi5jb20sIHRvCi0gKiBvcGVyYXRlIGhpZ2hlciBzcGVlZHMgaW4gc2FtZSB3YXkgYXMgb3RoZXIgc2VyaWFsIHBvcnRzOwotICogYWRkIG1vcmUgc2VyaWFsIHBvcnRzIChmb3IgdXAgdG8gdHdvIDE2LXBvcnQgbXV4ZXMpLgotICoKLSAqIFJldmlzaW9uIDEuMjggIDE5OTQvMTEvMDQgIDAwOjEzOjE2ICByb290Ci0gKiB0dXJuIG9mZiBkaWFnbm9zdGljIG1lc3NhZ2VzCi0gKgotICogUmV2aXNpb24gMS4yNyAgMTk5NC8xMS8wMyAgMjM6NDY6MzcgIHJvb3QKLSAqIGJ1bmNoIG9mIGNoYW5nZXMgdG8gYnJpbmcgZHJpdmVyIGludG8gZ3JlYXRlciBjb25mb3JtYW5jZQotICogd2l0aCB0aGUgc2VyaWFsLmMgZHJpdmVyIChsb29raW5nIGZvciBtaXNzZWQgZml4ZXMpCi0gKgotICogUmV2aXNpb24gMS4yNiAgMTk5NC8xMS8wMyAgMjI6NDA6MzYgIHJvb3QKLSAqIGF1dG9tYXRpYyBpbnRlcnJ1cHQgcHJvYmluZyBmaXhlZC4KLSAqCi0gKiBSZXZpc2lvbiAxLjI1ICAxOTk0LzExLzAzICAyMDoxNzowMiAgcm9vdAotICogc3RhcnQgdG8gaW1wbGVtZW50IGF1dG8taXJxCi0gKgotICogUmV2aXNpb24gMS4yNCAgMTk5NC8xMS8wMyAgMTg6MDE6NTUgIHJvb3QKLSAqIHN0aWxsIHdvcmtpbmcgb24gbW9kZW0gc2lnbmFscy0tdHJ5aW5nIG5vdCB0byBkcm9wIERUUgotICogZHVyaW5nIHRoZSBnZXR0eS9sb2dpbiBwcm9jZXNzZXMKLSAqCi0gKiBSZXZpc2lvbiAxLjIzICAxOTk0LzExLzAzICAxNzo1MTozNiAgcm9vdAotICogZXh0ZW5kIGJhdWQgcmF0ZSBzdXBwb3J0OyBzZXQgcmVjZWl2ZSB0aHJlc2hvbGQgYXMgZnVuY3Rpb24KLSAqIG9mIGJhdWQgcmF0ZTsgZml4IHNvbWUgcHJvYmxlbXMgd2l0aCBSVFMvQ1RTOwotICoKLSAqIFJldmlzaW9uIDEuMjIgIDE5OTQvMTEvMDIgIDE4OjA1OjM1ICByb290Ci0gKiBjaGFuZ2VkIGFyZ3VtZW50cyB0byB1ZGVsYXkgdG8gdHlwZSBsb25nIHRvIGdldAotICogZGVsYXlzIHRvIGJlIG9mIGNvcnJlY3QgZHVyYXRpb24KLSAqCi0gKiBSZXZpc2lvbiAxLjIxICAxOTk0LzExLzAyICAxNzozNzozMCAgcm9vdAotICogZW1wbG95IHVkZWxheSAoYWZ0ZXIgY2FsaWJyYXRpbmcgbG9vcHNfcGVyX3NlY29uZCBlYXJsaWVyCi0gKiBpbiBpbml0L21haW4uYykgaW5zdGVhZCBvZiB1c2luZyBob21lLWdyb3duIGRlbGF5IHJvdXRpbmVzCi0gKgotICogUmV2aXNpb24gMS4yMCAgMTk5NC8xMS8wMiAgMDM6MTE6MzggIHJvb3QKLSAqIGN5X2NoYXJzX2luX2J1ZmZlciBmb3JjZXMgYSByZXR1cm4gdmFsdWUgb2YgMCB0byBsZXQKLSAqIGxvZ2luIHdvcmsgKGRvbid0IGtub3cgd2h5IGl0IGRvZXMpOyBzb21lIGZ1bmN0aW9ucwotICogdGhhdCB3ZXJlIHJldHVybmluZyBFRkFVTFQsIG5vdyBleGVjdXRlcyB0aGUgY29kZTsKLSAqIG1vcmUgd29yayBvbiBkZWNpZGluZyB3aGVuIHRvIGRpc2FibGUgeG1pdCBpbnRlcnJ1cHRzOwotICoKLSAqIFJldmlzaW9uIDEuMTkgIDE5OTQvMTEvMDEgIDIwOjEwOjE0ICByb290Ci0gKiBkZWZpbmUgcm91dGluZSB0byBzdGFydCB0cmFuc21pc3Npb24gaW50ZXJydXB0cyAoYnkgZW5hYmxpbmcKLSAqIHRyYW5zbWl0IGludGVycnVwdHMpOyBkaXJlY3RseSBlbmFibGUvZGlzYWJsZSBtb2RlbSBpbnRlcnJ1cHRzOwotICoKLSAqIFJldmlzaW9uIDEuMTggIDE5OTQvMTEvMDEgIDE4OjQwOjQ1ICBiZW50c29uCi0gKiBEb24ndCBhbHdheXMgZW5hYmxlIHRyYW5zbWl0IGludGVycnVwdHMgaW4gc3RhcnR1cDsgaW50ZXJydXB0IG9uCi0gKiBUeE1wdHkgaW5zdGVhZCBvZiBUeFJkeSB0byBoZWxwIGNoYXJhY3RlcnMgZ2V0IG91dCBiZWZvcmUgc2h1dGRvd247Ci0gKiByZXN0cnVjdHVyZSB4bWl0IGludGVycnVwdCB0byBjaGVjayBmb3IgY2hhcnMgZmlyc3QgYW5kIHF1aXQgaWYKLSAqIG5vbmUgYXJlIHJlYWR5IHRvIGdvOyBtb2RlbSBzdGF0dXMgKE1YVlJ4KSBpcyB1cHJpZ2h0LCBfbm90XyBpbnZlcnRlZAotICogKHRvIG15IHZpZXcpOwotICoKLSAqIFJldmlzaW9uIDEuMTcgIDE5OTQvMTAvMzAgIDA0OjM5OjQ1ICBiZW50c29uCi0gKiByZW5hbWUgc2VyaWFsX2RyaXZlciBhbmQgY2FsbG91dF9kcml2ZXIgdG8gY3lfc2VyaWFsX2RyaXZlciBhbmQKLSAqIGN5X2NhbGxvdXRfZHJpdmVyIHRvIGF2b2lkIGxpbmthZ2UgaW50ZXJmZXJlbmNlOyBpbml0aWFsaXplCi0gKiBpbmZvLT50eXBlIHRvIFBPUlRfQ0lSUlVTOyBydWdnZWRpemUgcGFyYW5vaWEgdGVzdDsgZWxpZGUgLT5wb3J0Ci0gKiBmcm9tIGN5Y2xhZGVzX3BvcnQgc3RydWN0dXJlOyBhZGQgcGFyYW5vaWEgY2hlY2sgdG8gY3lfY2xvc2U7Ci0gKgotICogUmV2aXNpb24gMS4xNiAgMTk5NC8xMC8zMCAgMDE6MTQ6MzMgIGJlbnRzb24KLSAqIGNoYW5nZSBtYWpvciBudW1iZXJzOyBhZGQgc29tZSBfZWFybHlfIHJldHVybiBzdGF0ZW1lbnRzOwotICoKLSAqIFJldmlzaW9uIDEuMTUgIDE5OTQvMTAvMjkgIDA2OjQzOjE1ICBiZW50c29uCi0gKiBmaW5hbCB0aWR5aW5nIHVwIGZvciBjbGVhbiBjb21waWxlOyAgZW5hYmxlIHNvbWUgZXJyb3IgcmVwb3J0aW5nCi0gKgotICogUmV2aXNpb24gMS4xNCAgMTk5NC8xMC8yOCAgMjA6MzA6MjIgIEJlbnRzb24KLSAqIGxvdHMgb2YgY2hhbmdlcyB0byBkcmFnIHRoZSBkcml2ZXIgdG93YXJkcyB0aGUgbmV3IHR0eV9pbwotICogc3RydWN0dXJlcyBhbmQgb3BlcmF0aW9uLiAgbm90IGV4cGVjdGVkIHRvIHdvcmssIGJ1dCBtYXkKLSAqIGNvbXBpbGUgY2xlYW5seS4KLSAqCi0gKiBSZXZpc2lvbiAxLjEzICAxOTk0LzA3LzIxICAyMzowODo1NyAgQmVudHNvbgotICogYWRkIHNvbWUgZGlhZ25vc3RpYyBjcnVmdDsgc3VwcG9ydCAyNCBsaW5lcyAoZm9yIHRlc3RpbmcKLSAqIGJvdGggLThZIGFuZCAtMTZZIGNhcmRzOyBiZSBtb3JlIHRob3JvdWdoIGluIHNlcnZpY2luZyBhbGwKLSAqIGNoaXBzIGR1cmluZyBpbnRlcnJ1cHQ7IGFkZCAidm9sYXRpbGUiIGEgZmV3IHBsYWNlcyB0bwotICogY2lyY3VtdmVudCBjb21waWxlciBvcHRpbWl6YXRpb25zOyBmaXggYmFzZSAmIG9mZnNldAotICogY29tcHV0YXRpb25zIGluIGJsb2NrX3RpbF9yZWFkeSAod2FzIGNhdXNpbmcgY2hpcCAwIHRvCi0gKiBzdG9wIG9wZXJhdGlvbikKLSAqCi0gKiBSZXZpc2lvbiAxLjEyICAxOTk0LzA3LzE5ICAxNjo0MjoxMSAgQmVudHNvbgotICogYWRkIHNvbWUgaGFja2VyeSBmb3Iga2VybmVsIHZlcnNpb24gMS4xLjg7IGV4cGFuZAotICogZXJyb3IgbWVzc2FnZXM7IHJlZmluZSB0aW1pbmcgZm9yIGRlbGF5IGxvb3BzIGFuZAotICogZGVjbGFyZSBsb29wIHBhcmFtcyB2b2xhdGlsZQotICoKLSAqIFJldmlzaW9uIDEuMTEgIDE5OTQvMDYvMTEgIDIxOjUzOjEwICBiZW50c29uCi0gKiBnZXQgdXNlIG9mIHNhdmVfY2FyIHJpZ2h0IGluIHRyYW5zbWl0IGludGVycnVwdCBzZXJ2aWNlCi0gKgotICogUmV2aXNpb24gMS4xMC4xLjEgIDE5OTQvMDYvMTEgIDIxOjMxOjE4ICBiZW50c29uCi0gKiBhZGQgc29tZSBkaWFnbm9zdGljIHByaW50aW5nOyB0cnkgdG8gZml4IHNhdmVfY2FyIHN0dWZmCi0gKgotICogUmV2aXNpb24gMS4xMCAgMTk5NC8wNi8xMSAgMjA6MzY6MDggIGJlbnRzb24KLSAqIGNsZWFuIHVwIGNvbXBpbGVyIHdhcm5pbmdzCi0gKgotICogUmV2aXNpb24gMS45ICAxOTk0LzA2LzExICAxOTo0Mjo0NiAgYmVudHNvbgotICogYWRkZWQgYSBidW5jaCBvZiBjb2RlIHRvIHN1cHBvcnQgbW9kZW0gc2lnbmFsbGluZwotICoKLSAqIFJldmlzaW9uIDEuOCAgMTk5NC8wNi8xMSAgMTc6NTc6MDcgIGJlbnRzb24KLSAqIHJlY29nbml6ZSBicmVhayAmIHBhcml0eSBlcnJvcgotICoKLSAqIFJldmlzaW9uIDEuNyAgMTk5NC8wNi8wNSAgMDU6NTE6MzQgIGJlbnRzb24KLSAqIFJlb3JkZXIgYmF1ZCB0YWJsZSB0byBiZSBtb25vdG9uaWM7IGFkZCBjbGkgdG8gQ1A7IGRpc2NhcmQKLSAqIGluY29taW5nIGNoYXJhY3RlcnMgYW5kIHN0YXR1cyBpZiB0aGUgbGluZSBpc24ndCBvcGVuOyBzdGFydCB0bwotICogZm9sZCBjb2RlIGludG8gY3lfdGhyb3R0bGU7IHN0YXJ0IHRvIHBvcnQgZ2V0X3NlcmlhbF9pbmZvLAotICogc2V0X3NlcmlhbF9pbmZvLCBnZXRfbW9kZW1faW5mbywgc2V0X21vZGVtX2luZm8sIGFuZCBzZW5kX2JyZWFrCi0gKiBmcm9tIHNlcmlhbC5jOyBleHBhbmQgY3lfaW9jdGw7IHJlbG9jYXRlIGFuZCBleHBhbmQgY29uZmlnX3NldHVwOwotICogZ2V0IGZsb3cgY29udHJvbCBjaGFyYWN0ZXJzIGZyb20gdHR5IHN0cnVjdDsgaW52YWxpZGF0ZSBwb3J0cyB3L28KLSAqIGhhcmR3YXJlOwotICoKLSAqIFJldmlzaW9uIDEuNiAgMTk5NC8wNS8zMSAgMTg6NDI6MjEgIGJlbnRzb24KLSAqIGFkZCBhIGxvb3AtYnJlYWtlciBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZTsKLSAqIG5vdGUgd2hlbiBwb3J0IGlzIGluaXRpYWxpemVkIHNvIHRoYXQgaXQgY2FuIGJlIHNodXQKLSAqIGRvd24gdW5kZXIgdGhlIHJpZ2h0IGNvbmRpdGlvbnM7IHJlY2VpdmUgd29ya3Mgd2l0aG91dAotICogYW55IG9idmlvdXMgZXJyb3JzCi0gKgotICogUmV2aXNpb24gMS41ICAxOTk0LzA1LzMwICAwMDo1NTowMiAgYmVudHNvbgotICogdHJhbnNtaXQgd29ya3Mgd2l0aG91dCBvYnZpb3VzIGVycm9ycwotICoKLSAqIFJldmlzaW9uIDEuNCAgMTk5NC8wNS8yNyAgMTg6NDY6MjcgIGJlbnRzb24KLSAqIGluY29ycG9yYXRlZCBtb3JlIGNvZGUgZnJvbSBsaWJfeS5jOyBjYW4gbm93IHByaW50IHNob3J0Ci0gKiBzdHJpbmdzIHVuZGVyIGludGVycnVwdCBjb250cm9sIHRvIHBvcnQgemVybzsgc2VlbXMgdG8KLSAqIHNlbGVjdCBwb3J0cy9jaGFubmVscy9saW5lcyBjb3JyZWN0bHkKLSAqCi0gKiBSZXZpc2lvbiAxLjMgIDE5OTQvMDUvMjUgIDIyOjEyOjQ0ICBiZW50c29uCi0gKiBzaGlmdGluZyBmcm9tIG11bHRpLXBvcnQgb24gYSBjYXJkIHRvIHByb3BlciBtdWx0aXBsZXhvcgotICogZGF0YSBzdHJ1Y3R1cmVzOyAgYWRkZWQgc2tlbGV0b25zIG9mIG1vc3Qgcm91dGluZXMKLSAqCi0gKiBSZXZpc2lvbiAxLjIgIDE5OTQvMDUvMTkgIDEzOjIxOjQzICBiZW50c29uCi0gKiBzdGFydCB0byBjcmliIGZyb20gb3RoZXIgc291cmNlcwotICoKICAqLwogCi0jZGVmaW5lIENZX1ZFUlNJT04JIjIuNSIKKyNkZWZpbmUgQ1lfVkVSU0lPTgkiMi42IgogCiAvKiBJZiB5b3UgbmVlZCB0byBpbnN0YWxsIG1vcmUgYm9hcmRzIHRoYW4gTlJfQ0FSRFMsIGNoYW5nZSB0aGUgY29uc3RhbnQKICAgIGluIHRoZSBkZWZpbml0aW9uIGJlbG93LiBObyBvdGhlciBjaGFuZ2UgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgdXAgdG8KQEAgLTY0OCw5ICs4MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTY2MCwxMyArOTAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAotc3RhdGljIHZvaWQgY3lfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBjeV9zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwogCiAjaWZuZGVmIFNFUklBTF9YTUlUX1NJWkUKICNkZWZpbmUJU0VSSUFMX1hNSVRfU0laRQkobWluKFBBR0VfU0laRSwgNDA5NikpCiAjZW5kaWYKLSNkZWZpbmUgV0FLRVVQX0NIQVJTCQkyNTYKIAogI2RlZmluZSBTVERfQ09NX0ZMQUdTICgwKQogCkBAIC03NTYsMjUgKzE4NCwyNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJICAgICAgICAgICAgVkhJCiAgKiAgICAgMjAKICAqLwotc3RhdGljIGludCBiYXVkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgaW50IGJhdWRfdGFibGVbXSA9IHsKIAkwLCA1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsIDEyMDAsCiAJMTgwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgNzY4MDAsIDExNTIwMCwgMTUwMDAwLAogCTIzMDQwMCwgMAogfTsKIAotc3RhdGljIGNoYXIgYmF1ZF9jb18yNVtdID0gewkvKiAyNSBNSHogY2xvY2sgb3B0aW9uIHRhYmxlICovCitzdGF0aWMgY29uc3QgY2hhciBiYXVkX2NvXzI1W10gPSB7CS8qIDI1IE1IeiBjbG9jayBvcHRpb24gdGFibGUgKi8KIAkvKiB2YWx1ZSA9PiAgICAwMCAgICAwMSAgIDAyICAgIDAzICAgIDA0ICovCiAJLyogZGl2aWRlIGJ5ICAgIDggICAgMzIgICAxMjggICA1MTIgIDIwNDggKi8KIAkweDAwLCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDAzLCAweDAzLCAweDAzLCAweDAyLAogCTB4MDIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKIH07CiAKLXN0YXRpYyBjaGFyIGJhdWRfYnByXzI1W10gPSB7CS8qIDI1IE1IeiBiYXVkIHJhdGUgcGVyaW9kIHRhYmxlICovCitzdGF0aWMgY29uc3QgY2hhciBiYXVkX2Jwcl8yNVtdID0gewkvKiAyNSBNSHogYmF1ZCByYXRlIHBlcmlvZCB0YWJsZSAqLwogCTB4MDAsIDB4ZjUsIDB4YTMsIDB4NmYsIDB4NWMsIDB4NTEsIDB4ZjUsIDB4YTMsIDB4NTEsIDB4YTMsCiAJMHg2ZCwgMHg1MSwgMHhhMywgMHg1MSwgMHhhMywgMHg1MSwgMHgzNiwgMHgyOSwgMHgxYiwgMHgxNQogfTsKIAotc3RhdGljIGNoYXIgYmF1ZF9jb182MFtdID0gewkvKiA2MCBNSHogY2xvY2sgb3B0aW9uIHRhYmxlIChDRDE0MDAgSikgKi8KK3N0YXRpYyBjb25zdCBjaGFyIGJhdWRfY29fNjBbXSA9IHsJLyogNjAgTUh6IGNsb2NrIG9wdGlvbiB0YWJsZSAoQ0QxNDAwIEopICovCiAJLyogdmFsdWUgPT4gICAgMDAgICAgMDEgICAwMiAgICAwMyAgICAwNCAqLwogCS8qIGRpdmlkZSBieSAgICA4ICAgIDMyICAgMTI4ICAgNTEyICAyMDQ4ICovCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwMywgMHgwMywKQEAgLTc4MiwxMyArMjEwLDEzIEBACiAJMHgwMAogfTsKIAotc3RhdGljIGNoYXIgYmF1ZF9icHJfNjBbXSA9IHsJLyogNjAgTUh6IGJhdWQgcmF0ZSBwZXJpb2QgdGFibGUgKENEMTQwMCBKKSAqLworc3RhdGljIGNvbnN0IGNoYXIgYmF1ZF9icHJfNjBbXSA9IHsJLyogNjAgTUh6IGJhdWQgcmF0ZSBwZXJpb2QgdGFibGUgKENEMTQwMCBKKSAqLwogCTB4MDAsIDB4ODIsIDB4MjEsIDB4ZmYsIDB4ZGIsIDB4YzMsIDB4OTIsIDB4NjIsIDB4YzMsIDB4NjIsCiAJMHg0MSwgMHhjMywgMHg2MiwgMHhjMywgMHg2MiwgMHhjMywgMHg4MiwgMHg2MiwgMHg0MSwgMHgzMiwKIAkweDIxCiB9OwogCi1zdGF0aWMgY2hhciBiYXVkX2NvcjNbXSA9IHsJLyogcmVjZWl2ZSB0aHJlc2hvbGQgKi8KK3N0YXRpYyBjb25zdCBjaGFyIGJhdWRfY29yM1tdID0gewkvKiByZWNlaXZlIHRocmVzaG9sZCAqLwogCTB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCiAJMHgwYSwgMHgwYSwgMHgwYSwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwNywKIAkweDA3CkBAIC04MDUsNyArMjMzLDcgQEAKICAqIGNhYmxlcy4KICAqLwogCi1zdGF0aWMgY2hhciByZmxvd190aHJbXSA9IHsJLyogcmZsb3cgdGhyZXNob2xkICovCitzdGF0aWMgY29uc3QgY2hhciByZmxvd190aHJbXSA9IHsJLyogcmZsb3cgdGhyZXNob2xkICovCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLAogCTB4MGEKQEAgLTgxNCw3ICsyNDIsNyBAQAogLyogIFRoZSBDeWNsb20tWWUgaGFzIHBsYWNlZCB0aGUgc2VxdWVudGlhbCBjaGlwcyBpbiBub24tc2VxdWVudGlhbAogICogIGFkZHJlc3Mgb3JkZXIuICBUaGlzIGxvb2stdXAgdGFibGUgb3ZlcmNvbWVzIHRoYXQgcHJvYmxlbS4KICAqLwotc3RhdGljIGludCBjeV9jaGlwX29mZnNldFtdID0geyAweDAwMDAsCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGN5X2NoaXBfb2Zmc2V0W10gPSB7IDB4MDAwMCwKIAkweDA0MDAsCiAJMHgwODAwLAogCTB4MEMwMCwKQEAgLTgyNyw3ICsyNTUsNyBAQAogLyogUENJIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeV9wY2lfZGV2X2lkW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeV9wY2lfZGV2X2lkW10gPSB7CiAJLyogUENJIDwgMU1iICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ1lDTEFERVMsIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8pIH0sCiAJLyogUENJID4gMU1iICovCkBAIC04NTAsNyArMjc4LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBjeV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKLXN0YXRpYyB2b2lkIHNldF9saW5lX2NoYXIoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKik7CitzdGF0aWMgdm9pZCBjeV9zZXRfbGluZV9jaGFyKHN0cnVjdCBjeWNsYWRlc19wb3J0ICosIHN0cnVjdCB0dHlfc3RydWN0ICopOwogc3RhdGljIGludCBjeXpfaXNzdWVfY21kKHN0cnVjdCBjeWNsYWRlc19jYXJkICosIF9fdTMyLCBfX3U4LCBfX3UzMik7CiAjaWZkZWYgQ09ORklHX0lTQQogc3RhdGljIHVuc2lnbmVkIGRldGVjdF9pc2FfaXJxKHZvaWQgX19pb21lbSAqKTsKQEAgLTg2OSw2ICsyOTcsMjAgQEAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBjeXpfcnhfZnVsbF90aW1lcltOUl9QT1JUU107CiAjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeXlfd3JpdGViKHN0cnVjdCBjeWNsYWRlc19wb3J0ICpwb3J0LCB1MzIgcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQgPSBwb3J0LT5jYXJkOworCisJY3lfd3JpdGViKHBvcnQtPnUuY3l5LmJhc2VfYWRkciArIChyZWcgPDwgY2FyZC0+YnVzX2luZGV4KSwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1OCBjeXlfcmVhZGIoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKnBvcnQsIHUzMiByZWcpCit7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQgPSBwb3J0LT5jYXJkOworCisJcmV0dXJuIHJlYWRiKHBvcnQtPnUuY3l5LmJhc2VfYWRkciArIChyZWcgPDwgY2FyZC0+YnVzX2luZGV4KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBjeV9pc19aKHN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkKQogewogCXJldHVybiBjYXJkLT5udW1fY2hpcHMgPT0gKHVuc2lnbmVkIGludCktMTsKQEAgLTg5Myw3ICszMzUsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZXJpYWxfcGFyYW5vaWFfY2hlY2soc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCWNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCisJCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCiB7CiAjaWZkZWYgU0VSSUFMX1BBUkFOT0lBX0NIRUNLCiAJaWYgKCFpbmZvKSB7CkBAIC05MDksNyArMzUxLDcgQEAKIAl9CiAjZW5kaWYKIAlyZXR1cm4gMDsKLX0JCQkJLyogc2VyaWFsX3BhcmFub2lhX2NoZWNrICovCit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKiogU3RhcnQgb2YgYmxvY2sgb2YgQ3ljbG9tLVkgc3BlY2lmaWMgY29kZSAqKioqKioqKi8KQEAgLTkyMSwxMyArMzYzLDE0IEBACiAKICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSBpbnNpZGUgc3BpbmxvY2stcHJvdGVjdGVkIGNvZGUuCiAgKi8KLXN0YXRpYyBpbnQgY3l5X2lzc3VlX2NtZCh2b2lkIF9faW9tZW0gKmJhc2VfYWRkciwgdV9jaGFyIGNtZCwgaW50IGluZGV4KQorc3RhdGljIGludCBfX2N5eV9pc3N1ZV9jbWQodm9pZCBfX2lvbWVtICpiYXNlX2FkZHIsIHU4IGNtZCwgaW50IGluZGV4KQogeworCXZvaWQgX19pb21lbSAqY2NyID0gYmFzZV9hZGRyICsgKEN5Q0NSIDw8IGluZGV4KTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwcmV2aW91cyBjb21tYW5kIGhhcyBjb21wbGV0ZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJaWYgKHJlYWRiKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCkpID09IDApCisJCWlmIChyZWFkYihjY3IpID09IDApCiAJCQlicmVhazsKIAkJdWRlbGF5KDEwTCk7CiAJfQpAQCAtOTM3LDEwICszODAsMTYgQEAKIAkJcmV0dXJuIC0xOwogCiAJLyogSXNzdWUgdGhlIG5ldyBjb21tYW5kICovCi0JY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCksIGNtZCk7CisJY3lfd3JpdGViKGNjciwgY21kKTsKIAogCXJldHVybiAwOwotfQkJCQkvKiBjeXlfaXNzdWVfY21kICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGN5eV9pc3N1ZV9jbWQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKnBvcnQsIHU4IGNtZCkKK3sKKwlyZXR1cm4gX19jeXlfaXNzdWVfY21kKHBvcnQtPnUuY3l5LmJhc2VfYWRkciwgY21kLAorCQkJcG9ydC0+Y2FyZC0+YnVzX2luZGV4KTsKK30KIAogI2lmZGVmIENPTkZJR19JU0EKIC8qIElTQSBpbnRlcnJ1cHQgZGV0ZWN0aW9uIGNvZGUgKi8KQEAgLTk2MCwxMiArNDA5LDEyIEBACiAKIAlpcnFzID0gcHJvYmVfaXJxX29uKCk7CiAJLyogV2FpdCAuLi4gKi8KLQl1ZGVsYXkoNTAwMEwpOworCW1zbGVlcCg1KTsKIAogCS8qIEVuYWJsZSB0aGUgVHggaW50ZXJydXB0cyBvbiB0aGUgQ0QxNDAwICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWN5X3dyaXRlYihhZGRyZXNzICsgKEN5Q0FSIDw8IGluZGV4KSwgMCk7Ci0JY3l5X2lzc3VlX2NtZChhZGRyZXNzLCBDeUNIQU5fQ1RMIHwgQ3lFTkJfWE1UUiwgaW5kZXgpOworCV9fY3l5X2lzc3VlX2NtZChhZGRyZXNzLCBDeUNIQU5fQ1RMIHwgQ3lFTkJfWE1UUiwgaW5kZXgpOwogCiAJY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lDQVIgPDwgaW5kZXgpLCAwKTsKIAljeV93cml0ZWIoYWRkcmVzcyArIChDeVNSRVIgPDwgaW5kZXgpLApAQCAtOTczLDcgKzQyMiw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogV2FpdCAuLi4gKi8KLQl1ZGVsYXkoNTAwMEwpOworCW1zbGVlcCg1KTsKIAogCS8qIENoZWNrIHdoaWNoIGludGVycnVwdCBpcyBpbiB1c2UgKi8KIAlpcnEgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOwpAQCAtOTk5LDcgKzQ0OCw3IEBACiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgbGVuLCBpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7Ci0JdTggc2F2ZV94aXIsIGNoYW5uZWwsIHNhdmVfY2FyLCBkYXRhLCBjaGFyX2NvdW50OworCXU4IGl2ciwgc2F2ZV94aXIsIGNoYW5uZWwsIHNhdmVfY2FyLCBkYXRhLCBjaGFyX2NvdW50OwogCiAjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwogCXByaW50ayhLRVJOX0RFQlVHICJjeXlfaW50ZXJydXB0OiByY3ZkIGludHIsIGNoaXAgJWRcbiIsIGNoaXApOwpAQCAtMTAwOCwyNiArNDU3LDI1IEBACiAJc2F2ZV94aXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSSVIgPDwgaW5kZXgpKTsKIAljaGFubmVsID0gc2F2ZV94aXIgJiBDeUlSQ2hhbm5lbDsKIAlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsICsgY2hpcCAqIDRdOwotCXNhdmVfY2FyID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSk7Ci0JY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKKwlzYXZlX2NhciA9IGN5eV9yZWFkYihpbmZvLCBDeUNBUik7CisJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgc2F2ZV94aXIpOworCWl2ciA9IGN5eV9yZWFkYihpbmZvLCBDeVJJVlIpICYgQ3lJVlJNYXNrOwogCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmaW5mby0+cG9ydCk7CiAJLyogaWYgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgdGhlIGRhdGEsIGRpc2NhcmQgaXQgKi8KLQlpZiAoaW5mby0+cG9ydC50dHkgPT0gTlVMTCkgewotCQlpZiAoKHJlYWRiKGJhc2VfYWRkciArIChDeVJJVlIgPDwgaW5kZXgpKSAmIEN5SVZSTWFzaykgPT0KLQkJCQlDeUlWUlJ4RXgpIHsJLyogZXhjZXB0aW9uICovCi0JCQlkYXRhID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOworCWlmICh0dHkgPT0gTlVMTCkgeworCQlpZiAoaXZyID09IEN5SVZSUnhFeCkgewkvKiBleGNlcHRpb24gKi8KKwkJCWRhdGEgPSBjeXlfcmVhZGIoaW5mbywgQ3lSRFNSKTsKIAkJfSBlbHNlIHsJLyogbm9ybWFsIGNoYXJhY3RlciByZWNlcHRpb24gKi8KLQkJCWNoYXJfY291bnQgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRENSIDw8IGluZGV4KSk7CisJCQljaGFyX2NvdW50ID0gY3l5X3JlYWRiKGluZm8sIEN5UkRDUik7CiAJCQl3aGlsZSAoY2hhcl9jb3VudC0tKQotCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7CisJCQkJZGF0YSA9IGN5eV9yZWFkYihpbmZvLCBDeVJEU1IpOwogCQl9CiAJCWdvdG8gZW5kOwogCX0KIAkvKiB0aGVyZSBpcyBhbiBvcGVuIHBvcnQgZm9yIHRoaXMgZGF0YSAqLwotCXR0eSA9IGluZm8tPnBvcnQudHR5OwotCWlmICgocmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYgQ3lJVlJNYXNrKSA9PQotCQkJQ3lJVlJSeEV4KSB7CS8qIGV4Y2VwdGlvbiAqLwotCQlkYXRhID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOworCWlmIChpdnIgPT0gQ3lJVlJSeEV4KSB7CS8qIGV4Y2VwdGlvbiAqLworCQlkYXRhID0gY3l5X3JlYWRiKGluZm8sIEN5UkRTUik7CiAKIAkJLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLwogCQlpZiAoZGF0YSAmIEN5QlJFQUspCkBAIC0xMDQxLDI4ICs0ODksMjkgQEAKIAogCQlpZiAoZGF0YSAmIGluZm8tPmlnbm9yZV9zdGF0dXNfbWFzaykgewogCQkJaW5mby0+aWNvdW50LnJ4Kys7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCAxKSkgewogCQkJaWYgKGRhdGEgJiBpbmZvLT5yZWFkX3N0YXR1c19tYXNrKSB7CiAJCQkJaWYgKGRhdGEgJiBDeUJSRUFLKSB7CiAJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKLQkJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwKLQkJCQkJCQlpbmRleCkpLCBUVFlfQlJFQUspOworCQkJCQkJY3l5X3JlYWRiKGluZm8sIEN5UkRTUiksCisJCQkJCQlUVFlfQlJFQUspOwogCQkJCQlpbmZvLT5pY291bnQucngrKzsKIAkJCQkJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TQUspCiAJCQkJCQlkb19TQUsodHR5KTsKIAkJCQl9IGVsc2UgaWYgKGRhdGEgJiBDeUZSQU1FKSB7CiAJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKLQkJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwKLQkJCQkJCQlpbmRleCkpLCBUVFlfRlJBTUUpOworCQkJCQkJY3l5X3JlYWRiKGluZm8sIEN5UkRTUiksCisJCQkJCQlUVFlfRlJBTUUpOwogCQkJCQlpbmZvLT5pY291bnQucngrKzsKIAkJCQkJaW5mby0+aWRsZV9zdGF0cy5mcmFtZV9lcnJzKys7CiAJCQkJfSBlbHNlIGlmIChkYXRhICYgQ3lQQVJJVFkpIHsKIAkJCQkJLyogUGllY2VzIG9mIHNldmVuLi4uICovCiAJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKLQkJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwKLQkJCQkJCQlpbmRleCkpLCBUVFlfUEFSSVRZKTsKKwkJCQkJCWN5eV9yZWFkYihpbmZvLCBDeVJEU1IpLAorCQkJCQkJVFRZX1BBUklUWSk7CiAJCQkJCWluZm8tPmljb3VudC5yeCsrOwogCQkJCQlpbmZvLT5pZGxlX3N0YXRzLnBhcml0eV9lcnJzKys7CiAJCQkJfSBlbHNlIGlmIChkYXRhICYgQ3lPVkVSUlVOKSB7CkBAIC0xMDc0LDggKzUyMyw4IEBACiAJCQkJCSAgIHRoZSBuZXh0IGluY29taW5nIGNoYXJhY3Rlci4KIAkJCQkJICovCiAJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKLQkJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwKLQkJCQkJCQlpbmRleCkpLCBUVFlfRlJBTUUpOworCQkJCQkJY3l5X3JlYWRiKGluZm8sIEN5UkRTUiksCisJCQkJCQlUVFlfRlJBTUUpOwogCQkJCQlpbmZvLT5pY291bnQucngrKzsKIAkJCQkJaW5mby0+aWRsZV9zdGF0cy5vdmVycnVucysrOwogCQkJCS8qIFRoZXNlIHR3byBjb25kaXRpb25zIG1heSBpbXBseSAqLwpAQCAtMTA5OSw3ICs1NDgsNyBAQAogCQl9CiAJfSBlbHNlIHsJLyogbm9ybWFsIGNoYXJhY3RlciByZWNlcHRpb24gKi8KIAkJLyogbG9hZCAjIGNoYXJzIGF2YWlsYWJsZSBmcm9tIHRoZSBjaGlwICovCi0JCWNoYXJfY291bnQgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRENSIDw8IGluZGV4KSk7CisJCWNoYXJfY291bnQgPSBjeXlfcmVhZGIoaW5mbywgQ3lSRENSKTsKIAogI2lmZGVmIENZX0VOQUJMRV9NT05JVE9SSU5HCiAJCSsraW5mby0+bW9uLmludF9jb3VudDsKQEAgLTExMTAsNyArNTU5LDcgQEAKICNlbmRpZgogCQlsZW4gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGNoYXJfY291bnQpOwogCQl3aGlsZSAobGVuLS0pIHsKLQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7CisJCQlkYXRhID0gY3l5X3JlYWRiKGluZm8sIEN5UkRTUik7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGEsIFRUWV9OT1JNQUwpOwogCQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2J5dGVzKys7CiAJCQlpbmZvLT5pY291bnQucngrKzsKQEAgLTExMjEsMTYgKzU3MCwxOCBAQAogCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSA9IGppZmZpZXM7CiAJfQogCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiBlbmQ6CiAJLyogZW5kIG9mIHNlcnZpY2UgKi8KLQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UklSIDw8IGluZGV4KSwgc2F2ZV94aXIgJiAweDNmKTsKLQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV9jYXIpOworCWN5eV93cml0ZWIoaW5mbywgQ3lSSVIsIHNhdmVfeGlyICYgMHgzZik7CisJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgc2F2ZV9jYXIpOwogfQogCiBzdGF0aWMgdm9pZCBjeXlfY2hpcF90eChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8sIHVuc2lnbmVkIGludCBjaGlwLAogCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcikKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBjaGFyX2NvdW50LCBpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CiAJdTggc2F2ZV94aXIsIGNoYW5uZWwsIHNhdmVfY2FyLCBvdXRjaDsKIApAQCAtMTE1NCw5ICs2MDUsOSBAQAogCQlnb3RvIGVuZDsKIAl9CiAJaW5mbyA9ICZjaW5mby0+cG9ydHNbY2hhbm5lbCArIGNoaXAgKiA0XTsKLQlpZiAoaW5mby0+cG9ydC50dHkgPT0gTlVMTCkgewotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkgIHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIH5DeVR4UmR5KTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZpbmZvLT5wb3J0KTsKKwlpZiAodHR5ID09IE5VTEwpIHsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVNSRVIsIGN5eV9yZWFkYihpbmZvLCBDeVNSRVIpICYgfkN5VHhSZHkpOwogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTExNjUsNyArNjE2LDcgQEAKIAogCWlmIChpbmZvLT54X2NoYXIpIHsJLyogc2VuZCBzcGVjaWFsIGNoYXIgKi8KIAkJb3V0Y2ggPSBpbmZvLT54X2NoYXI7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCBvdXRjaCk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lURFIsIG91dGNoKTsKIAkJY2hhcl9jb3VudC0tOwogCQlpbmZvLT5pY291bnQudHgrKzsKIAkJaW5mby0+eF9jaGFyID0gMDsKQEAgLTExNzMsMTQgKzYyNCwxNCBAQAogCiAJaWYgKGluZm8tPmJyZWFrb24gfHwgaW5mby0+YnJlYWtvZmYpIHsKIAkJaWYgKGluZm8tPmJyZWFrb24pIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAwKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAweDgxKTsKKwkJCWN5eV93cml0ZWIoaW5mbywgQ3lURFIsIDApOworCQkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgMHg4MSk7CiAJCQlpbmZvLT5icmVha29uID0gMDsKIAkJCWNoYXJfY291bnQgLT0gMjsKIAkJfQogCQlpZiAoaW5mby0+YnJlYWtvZmYpIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAwKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAweDgzKTsKKwkJCWN5eV93cml0ZWIoaW5mbywgQ3lURFIsIDApOworCQkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgMHg4Myk7CiAJCQlpbmZvLT5icmVha29mZiA9IDA7CiAJCQljaGFyX2NvdW50IC09IDI7CiAJCX0KQEAgLTExODgsMjcgKzYzOSwyMyBAQAogCiAJd2hpbGUgKGNoYXJfY291bnQtLSA+IDApIHsKIAkJaWYgKCFpbmZvLT54bWl0X2NudCkgewotCQkJaWYgKHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIEN5VHhNcHR5KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgotCQkJCQkJfkN5VHhNcHR5KTsKKwkJCWlmIChjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIEN5VHhNcHR5KSB7CisJCQkJY3l5X3dyaXRlYihpbmZvLCBDeVNSRVIsCisJCQkJCWN5eV9yZWFkYihpbmZvLCBDeVNSRVIpICYgfkN5VHhNcHR5KTsKIAkJCX0gZWxzZSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCQkocmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKLQkJCQkJCX5DeVR4UmR5KSB8IEN5VHhNcHR5KTsKKwkJCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwgQ3lUeE1wdHkgfAorCQkJCQkoY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgJiB+Q3lUeFJkeSkpOwogCQkJfQogCQkJZ290byBkb25lOwogCQl9CiAJCWlmIChpbmZvLT5wb3J0LnhtaXRfYnVmID09IE5VTEwpIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgotCQkJCQl+Q3lUeFJkeSk7CisJCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwKKwkJCQljeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIH5DeVR4UmR5KTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQlpZiAoaW5mby0+cG9ydC50dHktPnN0b3BwZWQgfHwgaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgotCQkJCQl+Q3lUeFJkeSk7CisJCWlmICh0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkKSB7CisJCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwKKwkJCQljeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIH5DeVR4UmR5KTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQkvKiBCZWNhdXNlIHRoZSBFbWJlZGRlZCBUcmFuc21pdCBDb21tYW5kcyBoYXZlIGJlZW4gZW5hYmxlZCwKQEAgLTEyMjUsMTUgKzY3MiwxNSBAQAogCQkJaW5mby0+eG1pdF9jbnQtLTsKIAkJCWluZm8tPnhtaXRfdGFpbCA9IChpbmZvLT54bWl0X3RhaWwgKyAxKSAmCiAJCQkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgb3V0Y2gpOworCQkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgb3V0Y2gpOwogCQkJaW5mby0+aWNvdW50LnR4Kys7CiAJCX0gZWxzZSB7CiAJCQlpZiAoY2hhcl9jb3VudCA+IDEpIHsKIAkJCQlpbmZvLT54bWl0X2NudC0tOwogCQkJCWluZm8tPnhtaXRfdGFpbCA9IChpbmZvLT54bWl0X3RhaWwgKyAxKSAmCiAJCQkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIG91dGNoKTsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgMCk7CisJCQkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgb3V0Y2gpOworCQkJCWN5eV93cml0ZWIoaW5mbywgQ3lURFIsIDApOwogCQkJCWluZm8tPmljb3VudC50eCsrOwogCQkJCWNoYXJfY291bnQtLTsKIAkJCX0KQEAgLTEyNDEsMTcgKzY4OCwxOSBAQAogCX0KIAogZG9uZToKLQl0dHlfd2FrZXVwKGluZm8tPnBvcnQudHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiBlbmQ6CiAJLyogZW5kIG9mIHNlcnZpY2UgKi8KLQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VElSIDw8IGluZGV4KSwgc2F2ZV94aXIgJiAweDNmKTsKLQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV9jYXIpOworCWN5eV93cml0ZWIoaW5mbywgQ3lUSVIsIHNhdmVfeGlyICYgMHgzZik7CisJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgc2F2ZV9jYXIpOwogfQogCiBzdGF0aWMgdm9pZCBjeXlfY2hpcF9tb2RlbShzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8sIGludCBjaGlwLAogCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcikKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CiAJdTggc2F2ZV94aXIsIGNoYW5uZWwsIHNhdmVfY2FyLCBtZG1fY2hhbmdlLCBtZG1fc3RhdHVzOwogCkBAIC0xMjU5LDEzICs3MDgsMTQgQEAKIAlzYXZlX3hpciA9IHJlYWRiKGJhc2VfYWRkciArIChDeU1JUiA8PCBpbmRleCkpOwogCWNoYW5uZWwgPSBzYXZlX3hpciAmIEN5SVJDaGFubmVsOwogCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07Ci0Jc2F2ZV9jYXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKLQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOworCXNhdmVfY2FyID0gY3l5X3JlYWRiKGluZm8sIEN5Q0FSKTsKKwljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBzYXZlX3hpcik7CiAKLQltZG1fY2hhbmdlID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TUlTUiA8PCBpbmRleCkpOwotCW1kbV9zdGF0dXMgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpOworCW1kbV9jaGFuZ2UgPSBjeXlfcmVhZGIoaW5mbywgQ3lNSVNSKTsKKwltZG1fc3RhdHVzID0gY3l5X3JlYWRiKGluZm8sIEN5TVNWUjEpOwogCi0JaWYgKCFpbmZvLT5wb3J0LnR0eSkKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZpbmZvLT5wb3J0KTsKKwlpZiAoIXR0eSkKIAkJZ290byBlbmQ7CiAKIAlpZiAobWRtX2NoYW5nZSAmIEN5QU5ZX0RFTFRBKSB7CkBAIC0xMjc5LDM1ICs3MjksMzIgQEAKIAkJaWYgKG1kbV9jaGFuZ2UgJiBDeVJJKQogCQkJaW5mby0+aWNvdW50LnJuZysrOwogCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCX0KIAogCWlmICgobWRtX2NoYW5nZSAmIEN5RENEKSAmJiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSkgewotCQlpZiAoIShtZG1fc3RhdHVzICYgQ3lEQ0QpKSB7Ci0JCQl0dHlfaGFuZ3VwKGluZm8tPnBvcnQudHR5KTsKLQkJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JCX0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CisJCWlmIChtZG1fc3RhdHVzICYgQ3lEQ0QpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKKwkJZWxzZQorCQkJdHR5X2hhbmd1cCh0dHkpOwogCX0KIAlpZiAoKG1kbV9jaGFuZ2UgJiBDeUNUUykgJiYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykpIHsKLQkJaWYgKGluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKSB7CisJCWlmICh0dHktPmh3X3N0b3BwZWQpIHsKIAkJCWlmIChtZG1fc3RhdHVzICYgQ3lDVFMpIHsKIAkJCQkvKiBjeV9zdGFydCBpc24ndCB1c2VkCiAJCQkJICAgYmVjYXVzZS4uLiAhISEgKi8KLQkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDA7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfAotCQkJCQkJQ3lUeFJkeSk7Ci0JCQkJdHR5X3dha2V1cChpbmZvLT5wb3J0LnR0eSk7CisJCQkJdHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwKKwkJCQkJY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgfCBDeVR4UmR5KTsKKwkJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIShtZG1fc3RhdHVzICYgQ3lDVFMpKSB7CiAJCQkJLyogY3lfc3RvcCBpc24ndCB1c2VkCiAJCQkJICAgYmVjYXVzZSAuLi4gISEhICovCi0JCQkJaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQgPSAxOwotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKLQkJCQkJCX5DeVR4UmR5KTsKKwkJCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLAorCQkJCQljeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIH5DeVR4UmR5KTsKIAkJCX0KIAkJfQogCX0KQEAgLTEzMTUsMTAgKzc2MiwxMSBAQAogCX0KIAlpZiAobWRtX2NoYW5nZSAmIEN5UkkpIHsKIAl9Ki8KKwl0dHlfa3JlZl9wdXQodHR5KTsKIGVuZDoKIAkvKiBlbmQgb2Ygc2VydmljZSAqLwotCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNSVIgPDwgaW5kZXgpLCBzYXZlX3hpciAmIDB4M2YpOwotCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBzYXZlX2Nhcik7CisJY3l5X3dyaXRlYihpbmZvLCBDeU1JUiwgc2F2ZV94aXIgJiAweDNmKTsKKwljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBzYXZlX2Nhcik7CiB9CiAKIC8qIFRoZSByZWFsIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgaXMgY2FsbGVkCkBAIC0xMzg5LDYgKzgzNyw1NiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0JCQkJLyogY3l5X2ludGVycnVwdCAqLwogCitzdGF0aWMgdm9pZCBjeXlfY2hhbmdlX3J0c19kdHIoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGludCBzZXQsCisJCXVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IGluZm8tPmNhcmQ7CisJaW50IGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwl1MzIgcnRzLCBkdHIsIG1zdnJyLCBtc3ZyZDsKKworCWNoYW5uZWwgJj0gMHgwMzsKKworCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CisJCW1zdnJyID0gQ3lNU1ZSMjsKKwkJbXN2cmQgPSBDeU1TVlIxOworCQlydHMgPSBDeURUUjsKKwkJZHRyID0gQ3lSVFM7CisJfSBlbHNlIHsKKwkJbXN2cnIgPSBDeU1TVlIxOworCQltc3ZyZCA9IEN5TVNWUjI7CisJCXJ0cyA9IEN5UlRTOworCQlkdHIgPSBDeURUUjsKKwl9CisJaWYgKHNldCAmIFRJT0NNX1JUUykgeworCQljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBtc3ZyciwgcnRzKTsKKwl9CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwpOworCQljeXlfd3JpdGViKGluZm8sIG1zdnJyLCB+cnRzKTsKKwl9CisJaWYgKHNldCAmIFRJT0NNX0RUUikgeworCQljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBtc3ZyZCwgZHRyKTsKKyNpZmRlZiBDWV9ERUJVR19EVFIKKwkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbW9kZW1faW5mbyByYWlzaW5nIERUUlxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKKwkJCWN5eV9yZWFkYihpbmZvLCBDeU1TVlIxKSwKKwkJCWN5eV9yZWFkYihpbmZvLCBDeU1TVlIyKSk7CisjZW5kaWYKKwl9CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKSB7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwpOworCQljeXlfd3JpdGViKGluZm8sIG1zdnJkLCB+ZHRyKTsKKyNpZmRlZiBDWV9ERUJVR19EVFIKKwkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbW9kZW1faW5mbyBkcm9wcGluZyBEVFJcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCisJCQljeXlfcmVhZGIoaW5mbywgQ3lNU1ZSMSksCisJCQljeXlfcmVhZGIoaW5mbywgQ3lNU1ZSMikpOworI2VuZGlmCisJfQorfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqIEVuZCBvZiBibG9jayBvZiBDeWNsb20tWSBzcGVjaWZpYyBjb2RlICoqKioqKioqKiovCiAvKioqKioqKiogU3RhcnQgb2YgYmxvY2sgb2YgQ3ljbGFkZXMtWiBzcGVjaWZpYyBjb2RlICoqKioqKiovCkBAIC0xMzk4LDE1ICs4OTYsOSBAQAogY3l6X2ZldGNoX21zZyhzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8sCiAJCV9fdTMyICpjaGFubmVsLCBfX3U4ICpjbWQsIF9fdTMyICpwYXJhbSkKIHsKLQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOworCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmwgPSBjaW5mby0+Ym9hcmRfY3RybDsKIAl1bnNpZ25lZCBsb25nIGxvY19kb29yYmVsbDsKIAotCWZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKyAocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCiAJbG9jX2Rvb3JiZWxsID0gcmVhZGwoJmNpbmZvLT5jdGxfYWRkci5wOTA2MC0+bG9jX2Rvb3JiZWxsKTsKIAlpZiAobG9jX2Rvb3JiZWxsKSB7CiAJCSpjbWQgPSAoY2hhcikoMHhmZiAmIGxvY19kb29yYmVsbCk7CkBAIC0xNDIyLDE5ICs5MTQsMTMgQEAKIGN5el9pc3N1ZV9jbWQoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvLAogCQlfX3UzMiBjaGFubmVsLCBfX3U4IGNtZCwgX191MzIgcGFyYW0pCiB7Ci0Jc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0Jc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKKwlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsID0gY2luZm8tPmJvYXJkX2N0cmw7CiAJX191MzIgX19pb21lbSAqcGNpX2Rvb3JiZWxsOwogCXVuc2lnbmVkIGludCBpbmRleDsKIAotCWZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKIAlpZiAoIWN5el9pc19sb2FkZWQoY2luZm8pKQogCQlyZXR1cm4gLTE7CiAKLQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKyAocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCiAJaW5kZXggPSAwOwogCXBjaV9kb29yYmVsbCA9ICZjaW5mby0+Y3RsX2FkZHIucDkwNjAtPnBjaV9kb29yYmVsbDsKIAl3aGlsZSAoKHJlYWRsKHBjaV9kb29yYmVsbCkgJiAweGZmKSAhPSAwKSB7CkBAIC0xNDQ5LDExICs5MzUsMTAgQEAKIAlyZXR1cm4gMDsKIH0JCQkJLyogY3l6X2lzc3VlX2NtZCAqLwogCi1zdGF0aWMgdm9pZCBjeXpfaGFuZGxlX3J4KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAotCQlzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmwpCitzdGF0aWMgdm9pZCBjeXpfaGFuZGxlX3J4KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybCA9IGluZm8tPnUuY3l6LmJ1Zl9jdHJsOwogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBjaGFyX2NvdW50OwogCWludCBsZW47CiAjaWZkZWYgQkxPQ0tNT1ZFCkBAIC0xNTQyLDExICsxMDI3LDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBjeXpfaGFuZGxlX3R4KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAotCQlzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmwpCitzdGF0aWMgdm9pZCBjeXpfaGFuZGxlX3R4KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybCA9IGluZm8tPnUuY3l6LmJ1Zl9jdHJsOwogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogCXU4IGRhdGE7CiAJdW5zaWduZWQgaW50IGNoYXJfY291bnQ7CiAjaWZkZWYgQkxPQ0tNT1ZFCkBAIC0xNjIxLDM0ICsxMTA1LDI0IEBACiAKIHN0YXRpYyB2b2lkIGN5el9oYW5kbGVfY21kKHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbykKIHsKKwlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsID0gY2luZm8tPmJvYXJkX2N0cmw7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKLQlzdGF0aWMgc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLQlzdGF0aWMgc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCXN0YXRpYyBzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotCXN0YXRpYyBzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwotCXN0YXRpYyBzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmw7CiAJX191MzIgY2hhbm5lbCwgcGFyYW0sIGZ3X3ZlcjsKIAlfX3U4IGNtZDsKIAlpbnQgc3BlY2lhbF9jb3VudDsKIAlpbnQgZGVsdGFfY291bnQ7CiAKLQlmaXJtX2lkID0gY2luZm8tPmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsgKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKIAlmd192ZXIgPSByZWFkbCgmYm9hcmRfY3RybC0+ZndfdmVyc2lvbik7CiAKIAl3aGlsZSAoY3l6X2ZldGNoX21zZyhjaW5mbywgJmNoYW5uZWwsICZjbWQsICZwYXJhbSkgPT0gMSkgewogCQlzcGVjaWFsX2NvdW50ID0gMDsKIAkJZGVsdGFfY291bnQgPSAwOwogCQlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsXTsKLQkJdHR5ID0gaW5mby0+cG9ydC50dHk7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmluZm8tPnBvcnQpOwogCQlpZiAodHR5ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAotCQljaF9jdHJsID0gJih6ZndfY3RybC0+Y2hfY3RybFtjaGFubmVsXSk7Ci0JCWJ1Zl9jdHJsID0gJih6ZndfY3RybC0+YnVmX2N0cmxbY2hhbm5lbF0pOwotCiAJCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgQ19DTV9QUl9FUlJPUjoKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX1BBUklUWSk7CkBAIC0xNjY5LDE1ICsxMTQzLDEyIEBACiAJCQlpbmZvLT5pY291bnQuZGNkKys7CiAJCQlkZWx0YV9jb3VudCsrOwogCQkJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgewotCQkJCWlmICgoZndfdmVyID4gMjQxID8gKCh1X2xvbmcpIHBhcmFtKSA6Ci0JCQkJCQlyZWFkbCgmY2hfY3RybC0+cnNfc3RhdHVzKSkgJgotCQkJCQkJQ19SU19EQ0QpIHsKKwkJCQl1MzIgZGNkID0gZndfdmVyID4gMjQxID8gcGFyYW0gOgorCQkJCQlyZWFkbCgmaW5mby0+dS5jeXouY2hfY3RybC0+cnNfc3RhdHVzKTsKKwkJCQlpZiAoZGNkICYgQ19SU19EQ0QpCiAJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXR0eV9oYW5ndXAoaW5mby0+cG9ydC50dHkpOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKLQkJCQkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQkJCQl9CisJCQkJZWxzZQorCQkJCQl0dHlfaGFuZ3VwKHR0eSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBDX0NNX01DVFM6CkBAIC0xNzA2LDcgKzExNzcsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5el9pbnRlcnJ1cHQ6IHJjdmQgaW50ciwgY2FyZCAlZCwgIgogCQkJCQkicG9ydCAlbGRcbiIsIGluZm8tPmNhcmQsIGNoYW5uZWwpOwogI2VuZGlmCi0JCQljeXpfaGFuZGxlX3J4KGluZm8sIGJ1Zl9jdHJsKTsKKwkJCWN5el9oYW5kbGVfcngoaW5mbywgdHR5KTsKIAkJCWJyZWFrOwogCQljYXNlIENfQ01fVFhCRU1QVFk6CiAJCWNhc2UgQ19DTV9UWExPV1dNOgpAQCAtMTcxNiw3ICsxMTg3LDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICJjeXpfaW50ZXJydXB0OiB4bWl0IGludHIsIGNhcmQgJWQsICIKIAkJCQkJInBvcnQgJWxkXG4iLCBpbmZvLT5jYXJkLCBjaGFubmVsKTsKICNlbmRpZgotCQkJY3l6X2hhbmRsZV90eChpbmZvLCBidWZfY3RybCk7CisJCQljeXpfaGFuZGxlX3R4KGluZm8sIHR0eSk7CiAJCQlicmVhazsKICNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KIAkJY2FzZSBDX0NNX0ZBVEFMOgpAQCAtMTcyNiw5ICsxMTk3LDEwIEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoZGVsdGFfY291bnQpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJCWlmIChzcGVjaWFsX2NvdW50KQogCQkJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJfQogfQogCkBAIC0xNzc0LDEwICsxMjQ2LDYgQEAKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm87CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLQlzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmw7CiAJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gamlmZmllcyArIEhaOwogCXVuc2lnbmVkIGludCBwb3J0LCBjYXJkOwogCkBAIC0xNzg5LDEwICsxMjU3LDYgQEAKIAkJaWYgKCFjeXpfaXNfbG9hZGVkKGNpbmZvKSkKIAkJCWNvbnRpbnVlOwogCi0JCWZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQkJemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsKLQkJCQkocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQogCS8qIFNraXAgZmlyc3QgcG9sbGluZyBjeWNsZSB0byBhdm9pZCByYWNpbmcgY29uZGl0aW9ucyB3aXRoIHRoZSBGVyAqLwogCQlpZiAoIWNpbmZvLT5pbnRyX2VuYWJsZWQpIHsKIAkJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAxOwpAQCAtMTgwMiwxMyArMTI2NiwxNyBAQAogCQljeXpfaGFuZGxlX2NtZChjaW5mbyk7CiAKIAkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGNpbmZvLT5ucG9ydHM7IHBvcnQrKykgeworCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwogCQkJaW5mbyA9ICZjaW5mby0+cG9ydHNbcG9ydF07Ci0JCQl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKLQkJCWJ1Zl9jdHJsID0gJih6ZndfY3RybC0+YnVmX2N0cmxbcG9ydF0pOworCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmaW5mby0+cG9ydCk7CisJCQkvKiBPSyB0byBwYXNzIE5VTEwgdG8gdGhlIGhhbmRsZSBmdW5jdGlvbnMgYmVsb3cuCisJCQkgICBUaGV5IG5lZWQgdG8gZHJvcCB0aGUgZGF0YSBpbiB0aGF0IGNhc2UuICovCiAKIAkJCWlmICghaW5mby0+dGhyb3R0bGUpCi0JCQkJY3l6X2hhbmRsZV9yeChpbmZvLCBidWZfY3RybCk7Ci0JCQljeXpfaGFuZGxlX3R4KGluZm8sIGJ1Zl9jdHJsKTsKKwkJCQljeXpfaGFuZGxlX3J4KGluZm8sIHR0eSk7CisJCQljeXpfaGFuZGxlX3R4KGluZm8sIHR0eSk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJfQogCQkvKiBwb2xsIGV2ZXJ5ICdjeXpfcG9sbGluZ19jeWNsZScgcGVyaW9kICovCiAJCWV4cGlyZXMgPSBqaWZmaWVzICsgY3l6X3BvbGxpbmdfY3ljbGU7CkBAIC0xODI0LDEzICsxMjkyLDEyIEBACiAvKiBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciBhIHBvcnQgYmVjb21lcyBhY3RpdmU7CiAgICBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFuZCBEVFIgJiBSVFMgYXJlIHR1cm5lZCBvbi4KICAqLwotc3RhdGljIGludCBzdGFydHVwKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQorc3RhdGljIGludCBjeV9zdGFydHVwKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbCA9IDA7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCBjaGFubmVsOwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwpAQCAtMTg0MiwxNSArMTMwOSwxMSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewotCQlmcmVlX3BhZ2UocGFnZSk7CisJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKIAkJZ290byBlcnJvdXQ7Ci0JfQogCiAJaWYgKCFpbmZvLT50eXBlKSB7Ci0JCWlmIChpbmZvLT5wb3J0LnR0eSkKLQkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKLQkJZnJlZV9wYWdlKHBhZ2UpOworCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCQlnb3RvIGVycm91dDsKIAl9CiAKQEAgLTE4NjEsOTYgKzEzMjQsNTMgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCi0Jc2V0X2xpbmVfY2hhcihpbmZvKTsKKwljeV9zZXRfbGluZV9jaGFyKGluZm8sIHR0eSk7CiAKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKIAkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotI2lmZGVmIENZX0RFQlVHX09QRU4KLQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzdGFydHVwIGNhcmQgJWQsIGNoaXAgJWQsIGNoYW5uZWwgJWQsICIKLQkJCQkiYmFzZV9hZGRyICVwXG4iLAotCQkJCWNhcmQsIGNoaXAsIGNoYW5uZWwsIGJhc2VfYWRkcik7Ci0jZW5kaWYKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCi0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCk7CiAKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpLAorCQljeXlfd3JpdGViKGluZm8sIEN5UlRQUiwKIAkJCShpbmZvLT5kZWZhdWx0X3RpbWVvdXQgPyBpbmZvLT5kZWZhdWx0X3RpbWVvdXQgOiAweDAyKSk7CiAJCS8qIDEwbXMgcnggdGltZW91dCAqLwogCi0JCWN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLCBDeUNIQU5fQ1RMIHwgQ3lFTkJfUkNWUiB8IEN5RU5CX1hNVFIsCi0JCQkJaW5kZXgpOworCQljeXlfaXNzdWVfY21kKGluZm8sIEN5Q0hBTl9DVEwgfCBDeUVOQl9SQ1ZSIHwgQ3lFTkJfWE1UUik7CiAKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLCBDeVJUUyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksIEN5RFRSKTsKKwkJY3l5X2NoYW5nZV9ydHNfZHRyKGluZm8sIFRJT0NNX1JUUyB8IFRJT0NNX0RUUiwgMCk7CiAKLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzdGFydHVwIHJhaXNpbmcgRFRSXG4iKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKLQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwotI2VuZGlmCi0KLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpIHwgQ3lSeERhdGEpOwotCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwotCi0JCWlmIChpbmZvLT5wb3J0LnR0eSkKLQkJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwotCQlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7Ci0JCWluZm8tPmJyZWFrb24gPSBpbmZvLT5icmVha29mZiA9IDA7Ci0JCW1lbXNldCgoY2hhciAqKSZpbmZvLT5pZGxlX3N0YXRzLCAwLCBzaXplb2YoaW5mby0+aWRsZV9zdGF0cykpOwotCQlpbmZvLT5pZGxlX3N0YXRzLmluX3VzZSA9Ci0JCWluZm8tPmlkbGVfc3RhdHMucmVjdl9pZGxlID0KLQkJaW5mby0+aWRsZV9zdGF0cy54bWl0X2lkbGUgPSBqaWZmaWVzOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCisJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLCBjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSB8IEN5UnhEYXRhKTsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0JCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0JCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7CisJCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmwgPSBpbmZvLT51LmN5ei5jaF9jdHJsOwogCi0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkcjsKLQotCQlmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKIAkJaWYgKCFjeXpfaXNfbG9hZGVkKGNhcmQpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJemZ3X2N0cmwgPSBjYXJkLT5iYXNlX2FkZHIgKwotCQkJCShyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0KICNpZmRlZiBDWV9ERUJVR19PUEVOCiAJCXByaW50ayhLRVJOX0RFQlVHICJjeWMgc3RhcnR1cCBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsICIKLQkJCSJiYXNlX2FkZHIgJXBcbiIsIGNhcmQsIGNoYW5uZWwsIGJhc2VfYWRkcik7CisJCQkiYmFzZV9hZGRyICVwXG4iLCBjYXJkLCBjaGFubmVsLCBjYXJkLT5iYXNlX2FkZHIpOwogI2VuZGlmCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAotCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ub3BfbW9kZSwgQ19DSF9FTkFCTEUpOworCQljeV93cml0ZWwoJmNoX2N0cmwtPm9wX21vZGUsIENfQ0hfRU5BQkxFKTsKICNpZmRlZiBaX1dBS0UKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLmludHJfZW5hYmxlLAorCQljeV93cml0ZWwoJmNoX2N0cmwtPmludHJfZW5hYmxlLAogCQkJICBDX0lOX1RYQkVNUFRZIHwgQ19JTl9UWExPV1dNIHwgQ19JTl9SWEhJV00gfAogCQkJICBDX0lOX1JYTk5EVCB8IENfSU5fSU9DVExXIHwgQ19JTl9NRENEKTsKICNlbHNlCi0JCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5pbnRyX2VuYWJsZSwKKwkJY3lfd3JpdGVsKCZjaF9jdHJsLT5pbnRyX2VuYWJsZSwKIAkJCSAgQ19JTl9JT0NUTFcgfCBDX0lOX01EQ0QpOwogI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLwogI2Vsc2UKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLmludHJfZW5hYmxlLAorCQljeV93cml0ZWwoJmNoX2N0cmwtPmludHJfZW5hYmxlLAogCQkJICBDX0lOX1RYQkVNUFRZIHwgQ19JTl9UWExPV1dNIHwgQ19JTl9SWEhJV00gfAogCQkJICBDX0lOX1JYTk5EVCB8IENfSU5fTURDRCk7CiAjZWxzZQotCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0uaW50cl9lbmFibGUsIENfSU5fTURDRCk7CisJCWN5X3dyaXRlbCgmY2hfY3RybC0+aW50cl9lbmFibGUsIENfSU5fTURDRCk7CiAjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAjZW5kaWYJCQkJLyogWl9XQUtFICovCiAKQEAgLTE5NjksMzMgKzEzODksMjMgQEAKIAogCQkvKiBzZXQgdGltZW91dCAhISEgKi8KIAkJLyogc2V0IFJUUyBhbmQgRFRSICEhISAqLwotCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCXJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpIHwgQ19SU19SVFMgfAotCQkJQ19SU19EVFIpOwotCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKGNhcmQsIGNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7Ci0JCWlmIChyZXR2YWwgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6c3RhcnR1cCgzKSByZXR2YWwgb24gdHR5QyVkIHdhcyAiCi0JCQkJIiV4XG4iLCBpbmZvLT5saW5lLCByZXR2YWwpOwotCQl9Ci0jaWZkZWYgQ1lfREVCVUdfRFRSCi0JCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c3RhcnR1cCByYWlzaW5nIFogRFRSXG4iKTsKLSNlbmRpZgorCQl0dHlfcG9ydF9yYWlzZV9kdHJfcnRzKCZpbmZvLT5wb3J0KTsKIAogCQkvKiBlbmFibGUgc2VuZCwgcmVjdiwgbW9kZW0gISEhICovCi0KLQkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKLQkJaWYgKGluZm8tPnBvcnQudHR5KQotCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7Ci0JCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKLQkJaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKLQkJbWVtc2V0KChjaGFyICopJmluZm8tPmlkbGVfc3RhdHMsIDAsIHNpemVvZihpbmZvLT5pZGxlX3N0YXRzKSk7Ci0JCWluZm8tPmlkbGVfc3RhdHMuaW5fdXNlID0KLQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPQotCQlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfaWRsZSA9IGppZmZpZXM7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogCisJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKKworCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKKwlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CisJaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKKwltZW1zZXQoKGNoYXIgKikmaW5mby0+aWRsZV9zdGF0cywgMCwgc2l6ZW9mKGluZm8tPmlkbGVfc3RhdHMpKTsKKwlpbmZvLT5pZGxlX3N0YXRzLmluX3VzZSA9CisJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPQorCWluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlID0gamlmZmllczsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCiAjaWZkZWYgQ1lfREVCVUdfT1BFTgogCXByaW50ayhLRVJOX0RFQlVHICJjeWMgc3RhcnR1cCBkb25lXG4iKTsKICNlbmRpZgpAQCAtMjAwMywyOCArMTQxMywyMCBAQAogCiBlcnJvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisJZnJlZV9wYWdlKHBhZ2UpOwogCXJldHVybiByZXR2YWw7CiB9CQkJCS8qIHN0YXJ0dXAgKi8KIAogc3RhdGljIHZvaWQgc3RhcnRfeG1pdChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbykKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IGluZm8tPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAotCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBjaGFubmVsKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpIHwgQ3lUeFJkeSk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwgJiAweDAzKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVNSRVIsIGN5eV9yZWFkYihpbmZvLCBDeVNSRVIpIHwgQ3lUeFJkeSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX0NZWl9JTlRSCkBAIC0yMDQ3LDEyICsxNDQ5LDExIEBACiAgKiBUaGlzIHJvdXRpbmUgc2h1dHMgZG93biBhIHNlcmlhbCBwb3J0OyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKICAqIGFuZCBEVFIgaXMgZHJvcHBlZCBpZiB0aGUgaGFuZ3VwIG9uIGNsb3NlIHRlcm1pbyBmbGFnIGlzIG9uLgogICovCi1zdGF0aWMgdm9pZCBzaHV0ZG93bihzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbykKK3N0YXRpYyB2b2lkIGN5X3NodXRkb3duKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCBjaGFubmVsOwogCiAJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwpAQCAtMjA2MCwyMSArMTQ2MSwxMCBAQAogCWNhcmQgPSBpbmZvLT5jYXJkOwogCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQotI2lmZGVmIENZX0RFQlVHX09QRU4KLQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzaHV0ZG93biBZIGNhcmQgJWQsIGNoaXAgJWQsICIKLQkJCQkiY2hhbm5lbCAlZCwgYmFzZV9hZGRyICVwXG4iLAotCQkJCWNhcmQsIGNoaXAsIGNoYW5uZWwsIGJhc2VfYWRkcik7Ci0jZW5kaWYKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAkJLyogQ2xlYXIgZGVsdGFfbXNyX3dhaXQgcXVldWUgdG8gYXZvaWQgbWVtIGxlYWtzLiAqLwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAogCQlpZiAoaW5mby0+cG9ydC54bWl0X2J1ZikgewogCQkJdW5zaWduZWQgY2hhciAqdGVtcDsKQEAgLTIwODIsNDcgKzE0NzIsMjUgQEAKIAkJCWluZm8tPnBvcnQueG1pdF9idWYgPSBOVUxMOwogCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRlbXApOwogCQl9Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKLQkJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksIH5DeVJUUyk7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLCB+Q3lEVFIpOwotI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzaHV0ZG93biBkcm9wcGluZyBEVFJcbiIpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCi0JCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7Ci0jZW5kaWYKLQkJfQotCQljeXlfaXNzdWVfY21kKGJhc2VfYWRkciwgQ3lDSEFOX0NUTCB8IEN5RElTX1JDVlIsIGluZGV4KTsKKwkJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKQorCQkJY3l5X2NoYW5nZV9ydHNfZHRyKGluZm8sIDAsIFRJT0NNX1JUUyB8IFRJT0NNX0RUUik7CisKKwkJY3l5X2lzc3VlX2NtZChpbmZvLCBDeUNIQU5fQ1RMIHwgQ3lESVNfUkNWUik7CiAJCS8qIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjbGVhciBfWE1JVCBhdAogCQkgICBzb21lIGxhdGVyIGRhdGUgKGFmdGVyIHRlc3RpbmcpISEhICovCiAKLQkJaWYgKGluZm8tPnBvcnQudHR5KQotCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLQkJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwotCQlpbnQgcmV0dmFsOwotCi0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkcjsKICNpZmRlZiBDWV9ERUJVR19PUEVOCiAJCXByaW50ayhLRVJOX0RFQlVHICJjeWMgc2h1dGRvd24gWiBjYXJkICVkLCBjaGFubmVsICVkLCAiCi0JCQkiYmFzZV9hZGRyICVwXG4iLCBjYXJkLCBjaGFubmVsLCBiYXNlX2FkZHIpOworCQkJImJhc2VfYWRkciAlcFxuIiwgY2FyZCwgY2hhbm5lbCwgY2FyZC0+YmFzZV9hZGRyKTsKICNlbmRpZgogCi0JCWZpcm1faWQgPSBiYXNlX2FkZHIgKyBJRF9BRERSRVNTOwogCQlpZiAoIWN5el9pc19sb2FkZWQoY2FyZCkpCiAJCQlyZXR1cm47CiAKLQkJemZ3X2N0cmwgPSBjYXJkLT5iYXNlX2FkZHIgKwotCQkJCShyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChpbmZvLT5wb3J0LnhtaXRfYnVmKSB7CkBAIC0yMTMyLDIzICsxNTAwLDEwIEBACiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGVtcCk7CiAJCX0KIAotCQlpZiAoIWluZm8tPnBvcnQudHR5IHx8IChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSkgewotCQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0JCQkJKF9fdTMyKShyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSAmCi0JCQkJCX4oQ19SU19SVFMgfCBDX1JTX0RUUikpKTsKLQkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoaW5mby0+Y2FyZCwgY2hhbm5lbCwKLQkJCQkJQ19DTV9JT0NUTE0sIDBMKTsKLQkJCWlmIChyZXR2YWwgIT0gMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiJjeWM6c2h1dGRvd24gcmV0dmFsIG9uIHR0eUMlZCAiCi0JCQkJCSJ3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7Ci0JCQl9Ci0jaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNodXRkb3duIGRyb3BwaW5nIFogRFRSXG4iKTsKLSNlbmRpZgotCQl9CisJCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkKKwkJCXR0eV9wb3J0X2xvd2VyX2R0cl9ydHMoJmluZm8tPnBvcnQpOwogCi0JCWlmIChpbmZvLT5wb3J0LnR0eSkKLQkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CkBAIC0yMTY1LDE5OSArMTUyMCw2IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1zdGF0aWMgaW50Ci1ibG9ja190aWxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKLQlpbnQgcmV0dmFsOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCi0JY2luZm8gPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2luZm8tPmZpcnN0X2xpbmU7Ci0KLQkvKgotCSAqIElmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZyBjbG9zZWQsIHRoZW4gYmxvY2sKLQkgKiB1bnRpbCBpdCdzIGRvbmUsIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KLQkgKi8KLQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbmZvLT5wb3J0LmNsb3NlX3dhaXQsCi0JCQkJIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykpOwotCQlyZXR1cm4gKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/IC1FQUdBSU46IC1FUkVTVEFSVFNZUzsKLQl9Ci0KLQkvKgotCSAqIElmIG5vbi1ibG9ja2luZyBtb2RlIGlzIHNldCwgdGhlbiBtYWtlIHRoZSBjaGVjayB1cCBmcm9udAotCSAqIGFuZCB0aGVuIGV4aXQuCi0JICovCi0JaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKLQkJCQkJKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgewotCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKLQkgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgotCSAqIHRoaXMgbG9vcCwgaW5mby0+cG9ydC5jb3VudCBpcyBkcm9wcGVkIGJ5IG9uZSwgc28gdGhhdAotCSAqIGN5X2Nsb3NlKCkga25vd3Mgd2hlbiB0byBmcmVlIHRoaW5ncy4gIFdlIHJlc3RvcmUgaXQgdXBvbgotCSAqIGV4aXQsIGVpdGhlciBub3JtYWwgb3IgYWJub3JtYWwuCi0JICovCi0JcmV0dmFsID0gMDsKLQlhZGRfd2FpdF9xdWV1ZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKLSNpZmRlZiBDWV9ERUJVR19PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcgImN5YyBibG9ja190aWxfcmVhZHkgYmVmb3JlIGJsb2NrOiB0dHlDJWQsICIKLQkJImNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwotI2VuZGlmCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCi0JCWluZm8tPnBvcnQuY291bnQtLTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0jaWZkZWYgQ1lfREVCVUdfQ09VTlQKLQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeTogKCVkKTogZGVjcmVtZW50aW5nIGNvdW50IHRvICIKLQkJIiVkXG4iLCBjdXJyZW50LT5waWQsIGluZm8tPnBvcnQuY291bnQpOwotI2VuZGlmCi0JaW5mby0+cG9ydC5ibG9ja2VkX29wZW4rKzsKLQotCWlmICghY3lfaXNfWihjaW5mbykpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCi0JCXdoaWxlICgxKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJaWYgKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAotCQkJCQkgIEN5UlRTKTsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIEN5RFRSKTsKLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmJsb2NrX3RpbF9yZWFkeSByYWlzaW5nICIKLQkJCQkJIkRUUlxuIik7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKLSNlbmRpZgotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCi0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKLQkJCQkJIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7Ci0JCQkJcmV0dmFsID0gKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwotCQkJCQkgIC1FQUdBSU4gOiAtRVJFU1RBUlRTWVMpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCi0JCQkJICAodV9jaGFyKSBjaGFubmVsKTsKLQkJCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJiAoQ19DTE9DQUwodHR5KSB8fAotCQkJCQkocmVhZGIoYmFzZV9hZGRyICsKLQkJCQkJCShDeU1TVlIxIDw8IGluZGV4KSkgJiBDeURDRCkpKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCi0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWZkZWYgQ1lfREVCVUdfT1BFTgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6ICIKLQkJCQkidHR5QyVkLCBjb3VudCA9ICVkXG4iLAotCQkJCWluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwotI2VuZGlmCi0JCQlzY2hlZHVsZSgpOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLQkJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwotCi0JCWJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHI7Ci0JCWZpcm1faWQgPSBiYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotCQlpZiAoIWN5el9pc19sb2FkZWQoY2luZm8pKSB7Ci0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJemZ3X2N0cmwgPSBiYXNlX2FkZHIgKyAocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikKLQkJCQkJCQkJJiAweGZmZmZmKTsKLQkJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKLQkJY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOwotCi0JCXdoaWxlICgxKSB7Ci0JCQlpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSkgewotCQkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotCQkJCQlyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSB8Ci0JCQkJCUNfUlNfUlRTIHwgQ19SU19EVFIpOwotCQkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2luZm8sCi0JCQkJCWNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7Ci0JCQkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiY3ljOmJsb2NrX3RpbF9yZWFkeSAiCi0JCQkJCQkicmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCQkJCQlpbmZvLT5saW5lLCByZXR2YWwpOwotCQkJCX0KLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmJsb2NrX3RpbF9yZWFkeSByYWlzaW5nICIKLQkJCQkJIlogRFRSXG4iKTsKLSNlbmRpZgotCQkJfQotCi0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKLQkJCQkJIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7Ci0JCQkJcmV0dmFsID0gKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwotCQkJCQkgIC1FQUdBSU4gOiAtRVJFU1RBUlRTWVMpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmIChDX0NMT0NBTCh0dHkpIHx8Ci0JCQkJCShyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19zdGF0dXMpICYKLQkJCQkJCUNfUlNfRENEKSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJCQlicmVhazsKLQkJCX0KLSNpZmRlZiBDWV9ERUJVR19PUEVOCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBibG9ja2luZzogIgotCQkJCSJ0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0JCQkJaW5mby0+bGluZSwgaW5mby0+cG9ydC5jb3VudCk7Ci0jZW5kaWYKLQkJCXNjaGVkdWxlKCk7Ci0JCX0KLQl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwotCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQlpbmZvLT5wb3J0LmNvdW50Kys7Ci0jaWZkZWYgQ1lfREVCVUdfQ09VTlQKLQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpibG9ja190aWxfcmVhZHkgKCVkKTogaW5jcmVtZW50aW5nICIKLQkJCSJjb3VudCB0byAlZFxuIiwgY3VycmVudC0+cGlkLCBpbmZvLT5wb3J0LmNvdW50KTsKLSNlbmRpZgotCX0KLQlpbmZvLT5wb3J0LmJsb2NrZWRfb3Blbi0tOwotI2lmZGVmIENZX0RFQlVHX09QRU4KLQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmJsb2NrX3RpbF9yZWFkeSBhZnRlciBibG9ja2luZzogdHR5QyVkLCAiCi0JCSJjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKLSNlbmRpZgotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0JaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwotCXJldHVybiAwOwotfQkJCQkvKiBibG9ja190aWxfcmVhZHkgKi8KLQogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBzZXJpYWwgcG9ydCBpcyBvcGVuZWQuICBJdAogICogcGVyZm9ybXMgdGhlIHNlcmlhbC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHR0eSBzdHJ1Y3R1cmUuCkBAIC0yNDM2LDcgKzE1OTgsNiBAQAogCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfb3BlbiB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwogI2VuZGlmCiAJdHR5LT5kcml2ZXJfZGF0YSA9IGluZm87Ci0JaW5mby0+cG9ydC50dHkgPSB0dHk7CiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9vcGVuIikpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0yNDYyLDExICsxNjIzLDExIEBACiAJLyoKIAkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydAogCSAqLwotCXJldHZhbCA9IHN0YXJ0dXAoaW5mbyk7CisJcmV0dmFsID0gY3lfc3RhcnR1cChpbmZvLCB0dHkpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR2YWwgPSBibG9ja190aWxfcmVhZHkodHR5LCBmaWxwLCBpbmZvKTsKKwlyZXR2YWwgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJmluZm8tPnBvcnQsIHR0eSwgZmlscCk7CiAJaWYgKHJldHZhbCkgewogI2lmZGVmIENZX0RFQlVHX09QRU4KIAkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9vcGVuIHJldHVybmluZyBhZnRlciBibG9ja190aWxfcmVhZHkgIgpAQCAtMjQ3Niw2ICsxNjM3LDcgQEAKIAl9CiAKIAlpbmZvLT50aHJvdHRsZSA9IDA7CisJdHR5X3BvcnRfdHR5X3NldCgmaW5mby0+cG9ydCwgdHR5KTsKIAogI2lmZGVmIENZX0RFQlVHX09QRU4KIAlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X29wZW4gZG9uZVxuIik7CkBAIC0yNDkwLDggKzE2NTIsNiBAQAogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBvcmlnX2ppZmZpZXM7CiAJaW50IGNoYXJfdGltZTsKIApAQCAtMjUzNSwxMyArMTY5NSw4IEBACiAJCXRpbWVvdXQsIGNoYXJfdGltZSwgamlmZmllcyk7CiAjZW5kaWYKIAljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGNhcmQtPmZpcnN0X2xpbmUpOwogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCQl3aGlsZSAocmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgQ3lUeFJkeSkgeworCQl3aGlsZSAoY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgJiBDeVR4UmR5KSB7CiAjaWZkZWYgQ1lfREVCVUdfV0FJVF9VTlRJTF9TRU5UCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiTm90IGNsZWFuIChqaWZmPSVsdSkuLi4iLCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMjU5NSwxMDMgKzE3NTAsMzcgQEAKIH0JCQkJLyogY3lfZmx1c2hfYnVmZmVyICovCiAKIAotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZSBpcyBjbG9zZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGN5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgY3lfZG9fY2xvc2Uoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCwKKwkJCQkJCQkJcG9ydCk7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotI2lmZGVmIENZX0RFQlVHX09USEVSCi0JcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jbG9zZSB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwotI2VuZGlmCi0KLQlpZiAoIWluZm8gfHwgc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X2Nsb3NlIikpCi0JCXJldHVybjsKKwlpbnQgY2hhbm5lbDsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCS8qIElmIHRoZSBUVFkgaXMgYmVpbmcgaHVuZyB1cCwgbm90aGluZyB0byBkbyAqLwotCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotI2lmZGVmIENZX0RFQlVHX09QRU4KLQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2Nsb3NlIHR0eUMlZCwgY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwKLQkJaW5mby0+cG9ydC5jb3VudCk7Ci0jZW5kaWYKLQlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKGluZm8tPnBvcnQuY291bnQgIT0gMSkpIHsKLQkJLyoKLQkJICogVWgsIG9oLiAgdHR5LT5jb3VudCBpcyAxLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0dHkKLQkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBJbmZvLT5jb3VudCBzaG91bGQgYWx3YXlzCi0JCSAqIGJlIG9uZSBpbiB0aGVzZSBjb25kaXRpb25zLiAgSWYgaXQncyBncmVhdGVyIHRoYW4KLQkJICogb25lLCB3ZSd2ZSBnb3QgcmVhbCBwcm9ibGVtcywgc2luY2UgaXQgbWVhbnMgdGhlCi0JCSAqIHNlcmlhbCBwb3J0IHdvbid0IGJlIHNodXRkb3duLgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6Y3lfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgIgotCQkJInR0eS0+Y291bnQgaXMgMSwgaW5mby0+cG9ydC5jb3VudCBpcyAlZFxuIiwgaW5mby0+cG9ydC5jb3VudCk7Ci0JCWluZm8tPnBvcnQuY291bnQgPSAxOwotCX0KLSNpZmRlZiBDWV9ERUJVR19DT1VOVAotCXByaW50ayhLRVJOX0RFQlVHICAiY3ljOmN5X2Nsb3NlIGF0ICglZCk6IGRlY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKLQkJY3VycmVudC0+cGlkLCBpbmZvLT5wb3J0LmNvdW50IC0gMSk7Ci0jZW5kaWYKLQlpZiAoLS1pbmZvLT5wb3J0LmNvdW50IDwgMCkgewotI2lmZGVmIENZX0RFQlVHX0NPVU5UCi0JCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3ljX2Nsb3NlIHNldHRpbmcgY291bnQgdG8gMFxuIik7Ci0jZW5kaWYKLQkJaW5mby0+cG9ydC5jb3VudCA9IDA7Ci0JfQotCWlmIChpbmZvLT5wb3J0LmNvdW50KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKLQotCS8qCi0JICogTm93IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gY2xlYXI7IGFuZCB3ZSBub3RpZnkKLQkgKiB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIG9ubHkgcHJvY2VzcyBYT04vWE9GRiBjaGFyYWN0ZXJzLgotCSAqLwotCXR0eS0+Y2xvc2luZyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JaWYgKGluZm8tPnBvcnQuY2xvc2luZ193YWl0ICE9IENZX0NMT1NJTkdfV0FJVF9OT05FKQotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQpOwotCisJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwotCQlpbnQgaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsKLQkJCShjeV9jaGlwX29mZnNldFtjaGFubmVsID4+IDJdIDw8IGluZGV4KTsKIAkJLyogU3RvcCBhY2NlcHRpbmcgaW5wdXQgKi8KLQkJY2hhbm5lbCAmPSAweDAzOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHVfY2hhcikgY2hhbm5lbCk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCSAgcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgfkN5UnhEYXRhKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCAmIDB4MDMpOworCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwgY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgJiB+Q3lSeERhdGEpOwogCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCQkvKiBXYWl0aW5nIGZvciBvbi1ib2FyZCBidWZmZXJzIHRvIGJlIGVtcHR5IGJlZm9yZQogCQkJICAgY2xvc2luZyB0aGUgcG9ydCAqLwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQljeV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT50aW1lb3V0KTsKKwkJCWN5X3dhaXRfdW50aWxfc2VudChwb3J0LT50dHksIGluZm8tPnRpbWVvdXQpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9CiAJfSBlbHNlIHsKICNpZmRlZiBaX1dBS0UKIAkJLyogV2FpdGluZyBmb3Igb24tYm9hcmQgYnVmZmVycyB0byBiZSBlbXB0eSBiZWZvcmUgY2xvc2luZwogCQkgICB0aGUgcG9ydCAqLwotCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkcjsKLQkJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZCA9IGJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybCA9Ci0JCSAgICBiYXNlX2FkZHIgKyAocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOwotCQlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOworCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsID0gaW5mby0+dS5jeXouY2hfY3RybDsKIAkJaW50IHJldHZhbDsKIAotCQlpZiAocmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0uZmxvd19zdGF0dXMpICE9IENfRlNfVFhJRExFKSB7CisJCWlmIChyZWFkbCgmY2hfY3RybC0+Zmxvd19zdGF0dXMpICE9IENfRlNfVFhJRExFKSB7CiAJCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKGNhcmQsIGNoYW5uZWwsIENfQ01fSU9DVExXLCAwTCk7CiAJCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2Nsb3NlIHJldHZhbCBvbiAiCkBAIC0yNzAzLDMyICsxNzkyLDE5IEBACiAJCX0KICNlbmRpZgogCX0KLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCXNodXRkb3duKGluZm8pOwotCWN5X2ZsdXNoX2J1ZmZlcih0dHkpOwotCXR0eV9sZGlzY19mbHVzaCh0dHkpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwljeV9zaHV0ZG93bihpbmZvLCBwb3J0LT50dHkpOworfQogCi0JdHR5LT5jbG9zaW5nID0gMDsKLQlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7Ci0JaWYgKGluZm8tPnBvcnQuYmxvY2tlZF9vcGVuKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQlpZiAoaW5mby0+cG9ydC5jbG9zZV9kZWxheSkgewotCQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcwotCQkJCQkJKGluZm8tPnBvcnQuY2xvc2VfZGVsYXkpKTsKLQkJfQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCX0KLQlpbmZvLT5wb3J0LmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRSB8IEFTWU5DX0NMT1NJTkcpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5jbG9zZV93YWl0KTsKLQotI2lmZGVmIENZX0RFQlVHX09USEVSCi0JcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jbG9zZSBkb25lXG4iKTsKLSNlbmRpZgotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisvKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGEgcGFydGljdWxhciB0dHkgZGV2aWNlIGlzIGNsb3NlZC4KKyAqLworc3RhdGljIHZvaWQgY3lfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCWlmICghaW5mbyB8fCBzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfY2xvc2UiKSkKKwkJcmV0dXJuOworCXR0eV9wb3J0X2Nsb3NlKCZpbmZvLT5wb3J0LCB0dHksIGZpbHApOwogfQkJCQkvKiBjeV9jbG9zZSAqLwogCiAvKiBUaGlzIHJvdXRpbmUgZ2V0cyBjYWxsZWQgd2hlbiB0dHlfd3JpdGUgaGFzIHB1dCBzb21ldGhpbmcgaW50bwpAQCAtMjg3MSwxOCArMTk0NywxMyBAQAogCiBzdGF0aWMgaW50IGN5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQgY2hhbm5lbDsKIAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfY2hhcnNfaW5fYnVmZmVyIikpCiAJCXJldHVybiAwOwogCi0JY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjYXJkLT5maXJzdF9saW5lKTsKLQogI2lmZGVmIFpfRVhUX0NIQVJTX0lOX0JVRkZFUgotCWlmICghY3lfaXNfWihjYXJkKSkgeworCWlmICghY3lfaXNfWihpbmZvLT5jYXJkKSkgewogI2VuZGlmCQkJCS8qIFpfRVhUX0NIQVJTX0lOX0JVRkZFUiAqLwogI2lmZGVmIENZX0RFQlVHX0lPCiAJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfY2hhcnNfaW5fYnVmZmVyIHR0eUMlZCAlZFxuIiwKQEAgLTI4OTEsMjAgKzE5NjIsMTEgQEAKIAkJcmV0dXJuIGluZm8tPnhtaXRfY250OwogI2lmZGVmIFpfRVhUX0NIQVJTX0lOX0JVRkZFUgogCX0gZWxzZSB7Ci0JCXN0YXRpYyBzdHJ1Y3QgRklSTV9JRCAqZmlybV9pZDsKLQkJc3RhdGljIHN0cnVjdCBaRldfQ1RSTCAqemZ3X2N0cmw7Ci0JCXN0YXRpYyBzdHJ1Y3QgQ0hfQ1RSTCAqY2hfY3RybDsKLQkJc3RhdGljIHN0cnVjdCBCVUZfQ1RSTCAqYnVmX2N0cmw7CisJCXN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybCA9IGluZm8tPnUuY3l6LmJ1Zl9jdHJsOwogCQlpbnQgY2hhcl9jb3VudDsKIAkJX191MzIgdHhfcHV0LCB0eF9nZXQsIHR4X2J1ZnNpemU7CiAKIAkJbG9ja19rZXJuZWwoKTsKLQkJZmlybV9pZCA9IGNhcmQtPmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCXpmd19jdHJsID0gY2FyZC0+YmFzZV9hZGRyICsKLQkJCShyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCQljaF9jdHJsID0gJih6ZndfY3RybC0+Y2hfY3RybFtjaGFubmVsXSk7Ci0JCWJ1Zl9jdHJsID0gJih6ZndfY3RybC0+YnVmX2N0cmxbY2hhbm5lbF0pOwotCiAJCXR4X2dldCA9IHJlYWRsKCZidWZfY3RybC0+dHhfZ2V0KTsKIAkJdHhfcHV0ID0gcmVhZGwoJmJ1Zl9jdHJsLT50eF9wdXQpOwogCQl0eF9idWZzaXplID0gcmVhZGwoJmJ1Zl9jdHJsLT50eF9idWZzaXplKTsKQEAgLTI5NTcsNDggKzIwMTksNDQgQEAKICAqIFRoaXMgcm91dGluZSBmaW5kcyBvciBjb21wdXRlcyB0aGUgdmFyaW91cyBsaW5lIGNoYXJhY3RlcmlzdGljcy4KICAqIEl0IHVzZWQgdG8gYmUgY2FsbGVkIGNvbmZpZ19zZXR1cAogICovCi1zdGF0aWMgdm9pZCBzZXRfbGluZV9jaGFyKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQorc3RhdGljIHZvaWQgY3lfc2V0X2xpbmVfY2hhcihzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKKwlpbnQgY2hhbm5lbDsKIAl1bnNpZ25lZCBjZmxhZywgaWZsYWc7CiAJaW50IGJhdWQsIGJhdWRfcmF0ZSA9IDA7CiAJaW50IGk7CiAKLQlpZiAoIWluZm8tPnBvcnQudHR5IHx8ICFpbmZvLT5wb3J0LnR0eS0+dGVybWlvcykKKwlpZiAoIXR0eS0+dGVybWlvcykgLyogWFhYIGNhbiB0aGlzIGhhcHBlbiBhdCBhbGw/ICovCiAJCXJldHVybjsKIAogCWlmIChpbmZvLT5saW5lID09IC0xKQogCQlyZXR1cm47CiAKLQljZmxhZyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCWlmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CiAKIAkvKgogCSAqIFNldCB1cCB0aGUgdHR5LT5hbHRfc3BlZWQga2x1ZGdlCiAJICovCi0JaWYgKGluZm8tPnBvcnQudHR5KSB7Ci0JCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCi0JCQlpbmZvLT5wb3J0LnR0eS0+YWx0X3NwZWVkID0gNTc2MDA7Ci0JCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfVkhJKQotCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKLQkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCi0JCQlpbmZvLT5wb3J0LnR0eS0+YWx0X3NwZWVkID0gMjMwNDAwOwotCQlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCi0JCQlpbmZvLT5wb3J0LnR0eS0+YWx0X3NwZWVkID0gNDYwODAwOwotCX0KKwlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0hJKQorCQl0dHktPmFsdF9zcGVlZCA9IDU3NjAwOworCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfVkhJKQorCQl0dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKKwlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1NISSkKKwkJdHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CisJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQorCQl0dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwogCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAogCWlmICghY3lfaXNfWihjYXJkKSkgewotCi0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OworCQl1MzIgY2ZsYWdzOwogCiAJCS8qIGJhdWQgcmF0ZSAqLwotCQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHkpOworCQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKIAkJaWYgKGJhdWQgPT0gMzg0MDAgJiYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KIAkJCQlBU1lOQ19TUERfQ1VTVCkgewogCQkJaWYgKGluZm8tPmN1c3RvbV9kaXZpc29yKQpAQCAtMzEwNywxMjQgKzIxNjUsNjggQEAKIAkgICAgY2FibGUuICBDb250YWN0IE1hcmNpbyBTYWl0byBmb3IgZGV0YWlscy4KIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKIAkJY2hhbm5lbCAmPSAweDAzOwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsKTsKIAogCQkvKiB0eCBhbmQgcnggYmF1ZCByYXRlICovCiAKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVRDT1IgPDwgaW5kZXgpLCBpbmZvLT50Y28pOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VEJQUiA8PCBpbmRleCksIGluZm8tPnRicHIpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UkNPUiA8PCBpbmRleCksIGluZm8tPnJjbyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lSQlBSIDw8IGluZGV4KSwgaW5mby0+cmJwcik7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lUQ09SLCBpbmZvLT50Y28pOworCQljeXlfd3JpdGViKGluZm8sIEN5VEJQUiwgaW5mby0+dGJwcik7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lSQ09SLCBpbmZvLT5yY28pOworCQljeXlfd3JpdGViKGluZm8sIEN5UkJQUiwgaW5mby0+cmJwcik7CiAKIAkJLyogc2V0IGxpbmUgY2hhcmFjdGVyaXN0aWNzICBhY2NvcmRpbmcgY29uZmlndXJhdGlvbiAqLwogCi0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTQ0hSMSA8PCBpbmRleCksCi0JCQkgIFNUQVJUX0NIQVIoaW5mby0+cG9ydC50dHkpKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNDSFIyIDw8IGluZGV4KSwgU1RPUF9DSEFSKGluZm8tPnBvcnQudHR5KSk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDT1IxIDw8IGluZGV4KSwgaW5mby0+Y29yMSk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDT1IyIDw8IGluZGV4KSwgaW5mby0+Y29yMik7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDT1IzIDw8IGluZGV4KSwgaW5mby0+Y29yMyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDT1I0IDw8IGluZGV4KSwgaW5mby0+Y29yNCk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDT1I1IDw8IGluZGV4KSwgaW5mby0+Y29yNSk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lTQ0hSMSwgU1RBUlRfQ0hBUih0dHkpKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVNDSFIyLCBTVE9QX0NIQVIodHR5KSk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDT1IxLCBpbmZvLT5jb3IxKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNPUjIsIGluZm8tPmNvcjIpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q09SMywgaW5mby0+Y29yMyk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDT1I0LCBpbmZvLT5jb3I0KTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNPUjUsIGluZm8tPmNvcjUpOwogCi0JCWN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLCBDeUNPUl9DSEFOR0UgfCBDeUNPUjFjaCB8IEN5Q09SMmNoIHwKLQkJCQlDeUNPUjNjaCwgaW5kZXgpOworCQljeXlfaXNzdWVfY21kKGluZm8sIEN5Q09SX0NIQU5HRSB8IEN5Q09SMWNoIHwgQ3lDT1IyY2ggfAorCQkJCUN5Q09SM2NoKTsKIAogCQkvKiAhISEgSXMgdGhpcyBuZWVkZWQ/ICovCi0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpLAorCQljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVJUUFIsCiAJCQkoaW5mby0+ZGVmYXVsdF90aW1lb3V0ID8gaW5mby0+ZGVmYXVsdF90aW1lb3V0IDogMHgwMikpOwogCQkvKiAxMG1zIHJ4IHRpbWVvdXQgKi8KIAotCQlpZiAoQ19DTE9DQUwoaW5mby0+cG9ydC50dHkpKSB7Ci0JCQkvKiB3aXRob3V0IG1vZGVtIGludHIgKi8KLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeU1kbUNoKTsKLQkJCS8qIGFjdCBvbiAxLT4wIG1vZGVtIHRyYW5zaXRpb25zICovCi0JCQlpZiAoKGNmbGFnICYgQ1JUU0NUUykgJiYgaW5mby0+cmZsb3cpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjEgPDwgaW5kZXgpLAotCQkJCQkgIChDeUNUUyB8IHJmbG93X3RocltpXSkpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjEgPDwgaW5kZXgpLAotCQkJCQkgIEN5Q1RTKTsKLQkJCX0KLQkJCS8qIGFjdCBvbiAwLT4xIG1vZGVtIHRyYW5zaXRpb25zICovCi0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjIgPDwgaW5kZXgpLCBDeUNUUyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiB3aXRob3V0IG1vZGVtIGludHIgKi8KLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQkgIHJlYWRiKGJhc2VfYWRkciArCi0JCQkJCSAgIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5TWRtQ2gpOwotCQkJLyogYWN0IG9uIDEtPjAgbW9kZW0gdHJhbnNpdGlvbnMgKi8KLQkJCWlmICgoY2ZsYWcgJiBDUlRTQ1RTKSAmJiBpbmZvLT5yZmxvdykgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNQ09SMSA8PCBpbmRleCksCi0JCQkJCSAgKEN5RFNSIHwgQ3lDVFMgfCBDeVJJIHwgQ3lEQ0QgfAotCQkJCQkgICByZmxvd190aHJbaV0pKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1DT1IxIDw8IGluZGV4KSwKLQkJCQkJICBDeURTUiB8IEN5Q1RTIHwgQ3lSSSB8IEN5RENEKTsKLQkJCX0KLQkJCS8qIGFjdCBvbiAwLT4xIG1vZGVtIHRyYW5zaXRpb25zICovCi0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjIgPDwgaW5kZXgpLAotCQkJCSAgQ3lEU1IgfCBDeUNUUyB8IEN5UkkgfCBDeURDRCk7Ci0JCX0KKwkJY2ZsYWdzID0gQ3lDVFM7CisJCWlmICghQ19DTE9DQUwodHR5KSkKKwkJCWNmbGFncyB8PSBDeURTUiB8IEN5UkkgfCBDeURDRDsKKwkJLyogd2l0aG91dCBtb2RlbSBpbnRyICovCisJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLCBjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSB8IEN5TWRtQ2gpOworCQkvKiBhY3Qgb24gMS0+MCBtb2RlbSB0cmFuc2l0aW9ucyAqLworCQlpZiAoKGNmbGFnICYgQ1JUU0NUUykgJiYgaW5mby0+cmZsb3cpCisJCQljeXlfd3JpdGViKGluZm8sIEN5TUNPUjEsIGNmbGFncyB8IHJmbG93X3RocltpXSk7CisJCWVsc2UKKwkJCWN5eV93cml0ZWIoaW5mbywgQ3lNQ09SMSwgY2ZsYWdzKTsKKwkJLyogYWN0IG9uIDAtPjEgbW9kZW0gdHJhbnNpdGlvbnMgKi8KKwkJY3l5X3dyaXRlYihpbmZvLCBDeU1DT1IyLCBjZmxhZ3MpOwogCi0JCWlmIChpID09IDApIHsJLyogYmF1ZCByYXRlIGlzIHplcm8sIHR1cm4gb2ZmIGxpbmUgKi8KLQkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKLQkJCQkJICB+Q3lSVFMpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIH5DeURUUik7Ci0JCQl9Ci0jaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNldF9saW5lX2NoYXIgZHJvcHBpbmcgRFRSXG4iKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgQ3lSVFMpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIEN5RFRSKTsKLQkJCX0KLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X2xpbmVfY2hhciByYWlzaW5nIERUUlxuIik7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKLSNlbmRpZgotCQl9CisJCWlmIChpID09IDApCS8qIGJhdWQgcmF0ZSBpcyB6ZXJvLCB0dXJuIG9mZiBsaW5lICovCisJCQljeXlfY2hhbmdlX3J0c19kdHIoaW5mbywgMCwgVElPQ01fRFRSKTsKKwkJZWxzZQorCQkJY3l5X2NoYW5nZV9ydHNfZHRyKGluZm8sIFRJT0NNX0RUUiwgMCk7CiAKLQkJaWYgKGluZm8tPnBvcnQudHR5KQotCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAl9IGVsc2UgewotCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0JCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7CisJCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmwgPSBpbmZvLT51LmN5ei5jaF9jdHJsOwogCQlfX3UzMiBzd19mbG93OwogCQlpbnQgcmV0dmFsOwogCi0JCWZpcm1faWQgPSBjYXJkLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwogCQlpZiAoIWN5el9pc19sb2FkZWQoY2FyZCkpCiAJCQlyZXR1cm47CiAKLQkJemZ3X2N0cmwgPSBjYXJkLT5iYXNlX2FkZHIgKwotCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JCWNoX2N0cmwgPSAmKHpmd19jdHJsLT5jaF9jdHJsW2NoYW5uZWxdKTsKLQogCQkvKiBiYXVkIHJhdGUgKi8KLQkJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnBvcnQudHR5KTsKKwkJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAJCWlmIChiYXVkID09IDM4NDAwICYmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09CiAJCQkJQVNZTkNfU1BEX0NVU1QpIHsKIAkJCWlmIChpbmZvLT5jdXN0b21fZGl2aXNvcikKQEAgLTMzMzUsNDUgKzIzMzcsMzggQEAKIAkJCQkid2FzICV4XG4iLCBpbmZvLT5saW5lLCByZXR2YWwpOwogCQl9CiAKLQkJaWYgKGluZm8tPnBvcnQudHR5KQotCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAl9CiB9CQkJCS8qIHNldF9saW5lX2NoYXIgKi8KIAotc3RhdGljIGludAotZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAorc3RhdGljIGludCBjeV9nZXRfc2VyaWFsX2luZm8oc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCiAJCXN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKIHsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKLQotCWlmICghcmV0aW5mbykKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKLQl0bXAudHlwZSA9IGluZm8tPnR5cGU7Ci0JdG1wLmxpbmUgPSBpbmZvLT5saW5lOwotCXRtcC5wb3J0ID0gKGluZm8tPmNhcmQgLSBjeV9jYXJkKSAqIDB4MTAwICsgaW5mby0+bGluZSAtCi0JCWNpbmZvLT5maXJzdF9saW5lOwotCXRtcC5pcnEgPSBjaW5mby0+aXJxOwotCXRtcC5mbGFncyA9IGluZm8tPnBvcnQuZmxhZ3M7Ci0JdG1wLmNsb3NlX2RlbGF5ID0gaW5mby0+cG9ydC5jbG9zZV9kZWxheTsKLQl0bXAuY2xvc2luZ193YWl0ID0gaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQ7Ci0JdG1wLmJhdWRfYmFzZSA9IGluZm8tPmJhdWQ7Ci0JdG1wLmN1c3RvbV9kaXZpc29yID0gaW5mby0+Y3VzdG9tX2Rpdmlzb3I7Ci0JdG1wLmh1YjYgPSAwOwkJLyohISEgKi8KKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXAgPSB7CisJCS50eXBlID0gaW5mby0+dHlwZSwKKwkJLmxpbmUgPSBpbmZvLT5saW5lLAorCQkucG9ydCA9IChpbmZvLT5jYXJkIC0gY3lfY2FyZCkgKiAweDEwMCArIGluZm8tPmxpbmUgLQorCQkJY2luZm8tPmZpcnN0X2xpbmUsCisJCS5pcnEgPSBjaW5mby0+aXJxLAorCQkuZmxhZ3MgPSBpbmZvLT5wb3J0LmZsYWdzLAorCQkuY2xvc2VfZGVsYXkgPSBpbmZvLT5wb3J0LmNsb3NlX2RlbGF5LAorCQkuY2xvc2luZ193YWl0ID0gaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQsCisJCS5iYXVkX2Jhc2UgPSBpbmZvLT5iYXVkLAorCQkuY3VzdG9tX2Rpdmlzb3IgPSBpbmZvLT5jdXN0b21fZGl2aXNvciwKKwkJLmh1YjYgPSAwLAkJLyohISEgKi8KKwl9OwogCXJldHVybiBjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkgPyAtRUZBVUxUIDogMDsKLX0JCQkJLyogZ2V0X3NlcmlhbF9pbmZvICovCit9CiAKIHN0YXRpYyBpbnQKLXNldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKK2N5X3NldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpuZXdfaW5mbykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBuZXdfc2VyaWFsOwotCXN0cnVjdCBjeWNsYWRlc19wb3J0IG9sZF9pbmZvOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2VyaWFsLCBuZXdfaW5mbywgc2l6ZW9mKG5ld19zZXJpYWwpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0Jb2xkX2luZm8gPSAqaW5mbzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewogCQlpZiAobmV3X3NlcmlhbC5jbG9zZV9kZWxheSAhPSBpbmZvLT5wb3J0LmNsb3NlX2RlbGF5IHx8CkBAIC0zNDAzLDEwICsyMzk4LDEwIEBACiAKIGNoZWNrX2FuZF9leGl0OgogCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKLQkJc2V0X2xpbmVfY2hhcihpbmZvKTsKKwkJY3lfc2V0X2xpbmVfY2hhcihpbmZvLCB0dHkpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlyZXR1cm4gc3RhcnR1cChpbmZvKTsKKwkJcmV0dXJuIGN5X3N0YXJ0dXAoaW5mbywgdHR5KTsKIAl9CiB9CQkJCS8qIHNldF9zZXJpYWxfaW5mbyAqLwogCkBAIC0zNDIyLDI0ICsyNDE3LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQgPSBpbmZvLT5jYXJkOwogCXVuc2lnbmVkIGludCByZXN1bHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwl1OCBzdGF0dXM7CiAKLQljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGNhcmQtPmZpcnN0X2xpbmUpOwogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJc3RhdHVzID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKLQkJCQkoQ3lUeFJkeSB8IEN5VHhNcHR5KTsKKwkJc3RhdHVzID0gY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgJiAoQ3lUeFJkeSB8IEN5VHhNcHR5KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCXJlc3VsdCA9IChzdGF0dXMgPyAwIDogVElPQ1NFUl9URU1UKTsKIAl9IGVsc2UgewpAQCAtMzQ1MywzNCArMjQzOCwyMyBAQAogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIGxzdGF0dXM7Ci0JdW5zaWduZWQgaW50IHJlc3VsdDsKLQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7CisJaW50IHJlc3VsdDsKIAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCBfX2Z1bmNfXykpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKworCWxvY2tfa2VybmVsKCk7CiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCBjaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CisJCXU4IHN0YXR1czsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKLQkJc3RhdHVzID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKTsKLQkJc3RhdHVzIHw9IHJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwgJiAweDAzKTsKKwkJc3RhdHVzID0gY3l5X3JlYWRiKGluZm8sIEN5TVNWUjEpOworCQlzdGF0dXMgfD0gY3l5X3JlYWRiKGluZm8sIEN5TVNWUjIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewpAQCAtMzQ5NSwyNyArMjQ2OSwyMiBAQAogCQkJKChzdGF0dXMgJiBDeURTUikgPyBUSU9DTV9EU1IgOiAwKSB8CiAJCQkoKHN0YXR1cyAmIEN5Q1RTKSA/IFRJT0NNX0NUUyA6IDApOwogCX0gZWxzZSB7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkcjsKLQkJZmlybV9pZCA9IGNhcmQtPmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCWlmIChjeXpfaXNfbG9hZGVkKGNhcmQpKSB7Ci0JCQl6ZndfY3RybCA9IGNhcmQtPmJhc2VfYWRkciArCi0JCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCQkJY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOwotCQkJbHN0YXR1cyA9IHJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX3N0YXR1cyk7Ci0JCQlyZXN1bHQgPSAoKGxzdGF0dXMgJiBDX1JTX1JUUykgPyBUSU9DTV9SVFMgOiAwKSB8Ci0JCQkJKChsc3RhdHVzICYgQ19SU19EVFIpID8gVElPQ01fRFRSIDogMCkgfAotCQkJCSgobHN0YXR1cyAmIENfUlNfRENEKSA/IFRJT0NNX0NBUiA6IDApIHwKLQkJCQkoKGxzdGF0dXMgJiBDX1JTX1JJKSA/IFRJT0NNX1JORyA6IDApIHwKLQkJCQkoKGxzdGF0dXMgJiBDX1JTX0RTUikgPyBUSU9DTV9EU1IgOiAwKSB8Ci0JCQkJKChsc3RhdHVzICYgQ19SU19DVFMpID8gVElPQ01fQ1RTIDogMCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXN1bHQgPSAwOwotCQkJdW5sb2NrX2tlcm5lbCgpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJCXUzMiBsc3RhdHVzOworCisJCWlmICghY3l6X2lzX2xvYWRlZChjYXJkKSkgeworCQkJcmVzdWx0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZW5kOwogCQl9CiAKKwkJbHN0YXR1cyA9IHJlYWRsKCZpbmZvLT51LmN5ei5jaF9jdHJsLT5yc19zdGF0dXMpOworCQlyZXN1bHQgPSAoKGxzdGF0dXMgJiBDX1JTX1JUUykgPyBUSU9DTV9SVFMgOiAwKSB8CisJCQkoKGxzdGF0dXMgJiBDX1JTX0RUUikgPyBUSU9DTV9EVFIgOiAwKSB8CisJCQkoKGxzdGF0dXMgJiBDX1JTX0RDRCkgPyBUSU9DTV9DQVIgOiAwKSB8CisJCQkoKGxzdGF0dXMgJiBDX1JTX1JJKSA/IFRJT0NNX1JORyA6IDApIHwKKwkJCSgobHN0YXR1cyAmIENfUlNfRFNSKSA/IFRJT0NNX0RTUiA6IDApIHwKKwkJCSgobHN0YXR1cyAmIENfUlNfQ1RTKSA/IFRJT0NNX0NUUyA6IDApOwogCX0KK2VuZDoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0JCQkJLyogY3lfdGlvbWdldCAqLwpAQCAtMzUyNiwxNTAgKzI0OTUsNTMgQEAKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0Jc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwotCWludCByZXR2YWw7CiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgX19mdW5jX18pKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY2FyZC0+Zmlyc3RfbGluZSk7CiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwkJY3l5X2NoYW5nZV9ydHNfZHRyKGluZm8sIHNldCwgY2xlYXIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsID0gaW5mby0+dS5jeXouY2hfY3RybDsKKwkJaW50IHJldHZhbCwgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOworCQl1MzIgcnM7CiAKLQkJaWYgKHNldCAmIFRJT0NNX1JUUykgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCi0JCQkJICAodV9jaGFyKSBjaGFubmVsKTsKLQkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKLQkJCQkJICBDeURUUik7Ci0JCQl9IGVsc2UgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgQ3lSVFMpOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCX0KLQkJaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwotCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIH5DeURUUik7Ci0JCQl9IGVsc2UgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgfkN5UlRTKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQl9CisJCWlmICghY3l6X2lzX2xvYWRlZChjYXJkKSkKKwkJCXJldHVybiAtRU5PREVWOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwkJcnMgPSByZWFkbCgmY2hfY3RybC0+cnNfY29udHJvbCk7CisJCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCQlycyB8PSBDX1JTX1JUUzsKKwkJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQkJcnMgJj0gfkNfUlNfUlRTOwogCQlpZiAoc2V0ICYgVElPQ01fRFRSKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwotCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAotCQkJCQkgIEN5UlRTKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKLQkJCQkJICBDeURUUik7Ci0JCQl9CisJCQlycyB8PSBDX1JTX0RUUjsKICNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gcmFpc2luZyBEVFJcbiIpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCi0JCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNldF9tb2RlbV9pbmZvIHJhaXNpbmcgWiBEVFJcbiIpOwogI2VuZGlmCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJfQogCQlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAotCQkJCSAgKHVfY2hhcikgY2hhbm5lbCk7Ci0JCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgfkN5UlRTKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKLQkJCQkJICB+Q3lEVFIpOwotCQkJfQotCisJCQlycyAmPSB+Q19SU19EVFI7CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNldF9tb2RlbV9pbmZvIGRyb3BwaW5nIERUUlxuIik7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gY2xlYXJpbmcgIgorCQkJCSJaIERUUlxuIik7CiAjZW5kaWYKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9Ci0JfSBlbHNlIHsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyOwotCi0JCWZpcm1faWQgPSBjYXJkLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotCQlpZiAoY3l6X2lzX2xvYWRlZChjYXJkKSkgewotCQkJemZ3X2N0cmwgPSBjYXJkLT5iYXNlX2FkZHIgKwotCQkJCShyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCQkJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKLQkJCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKLQotCQkJaWYgKHNldCAmIFRJT0NNX1JUUykgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCQkJcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgfAotCQkJCQlDX1JTX1JUUyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQl9Ci0JCQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0JCQkJCXJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpICYKLQkJCQkJfkNfUlNfUlRTKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCX0KLQkJCWlmIChzZXQgJiBUSU9DTV9EVFIpIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0JCQkJCXJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpIHwKLQkJCQkJQ19SU19EVFIpOwotI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gcmFpc2luZyAiCi0JCQkJCSJaIERUUlxuIik7Ci0jZW5kaWYKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCX0KLQkJCWlmIChjbGVhciAmIFRJT0NNX0RUUikgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCQkJcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgJgotCQkJCQl+Q19SU19EVFIpOwotI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gY2xlYXJpbmcgIgotCQkJCQkiWiBEVFJcbiIpOwotI2VuZGlmCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisJCWN5X3dyaXRlbCgmY2hfY3RybC0+cnNfY29udHJvbCwgcnMpOwogCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKGNhcmQsIGNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiY3ljOnNldF9tb2RlbV9pbmZvIHJldHZhbCBvbiB0dHlDJWQgIgogCQkJCSJ3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwotfQkJCQkvKiBjeV90aW9jbXNldCAqLworfQogCiAvKgogICogY3lfYnJlYWsoKSAtLS0gcm91dGluZSB3aGljaCB0dXJucyB0aGUgYnJlYWsgaGFuZGxpbmcgb24gb3Igb2ZmCkBAIC0zNzM0LDQxICsyNjA2LDE4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0JCQkJLyogY3lfYnJlYWsgKi8KIAotc3RhdGljIGludCBnZXRfbW9uX2luZm8oc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCQkJc3RydWN0IGN5Y2xhZGVzX21vbml0b3IgX191c2VyICptb24pCi17Ci0KLQlpZiAoY29weV90b191c2VyKG1vbiwgJmluZm8tPm1vbiwgc2l6ZW9mKHN0cnVjdCBjeWNsYWRlc19tb25pdG9yKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWluZm8tPm1vbi5pbnRfY291bnQgPSAwOwotCWluZm8tPm1vbi5jaGFyX2NvdW50ID0gMDsKLQlpbmZvLT5tb24uY2hhcl9tYXggPSAwOwotCWluZm8tPm1vbi5jaGFyX2xhc3QgPSAwOwotCXJldHVybiAwOwotfQkJCQkvKiBnZXRfbW9uX2luZm8gKi8KLQogc3RhdGljIGludCBzZXRfdGhyZXNob2xkKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGFubmVsLCBjaGlwLCBpbmRleDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IGluZm8tPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0KLQkJICAgIGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KIAkJaW5mby0+Y29yMyAmPSB+Q3lSRUNfRklGTzsKIAkJaW5mby0+Y29yMyB8PSB2YWx1ZSAmIEN5UkVDX0ZJRk87CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMyA8PCBpbmRleCksIGluZm8tPmNvcjMpOwotCQljeXlfaXNzdWVfY21kKGJhc2VfYWRkciwgQ3lDT1JfQ0hBTkdFIHwgQ3lDT1IzY2gsIGluZGV4KTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNPUjMsIGluZm8tPmNvcjMpOworCQljeXlfaXNzdWVfY21kKGluZm8sIEN5Q09SX0NIQU5HRSB8IEN5Q09SM2NoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwpAQCAtMzc3Nyw1NSArMjYyNiwyMyBAQAogc3RhdGljIGludCBnZXRfdGhyZXNob2xkKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAogCQkJCQkJdW5zaWduZWQgbG9uZyBfX3VzZXIgKnZhbHVlKQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGFubmVsLCBjaGlwLCBpbmRleDsKLQl1bnNpZ25lZCBsb25nIHRtcDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IGluZm8tPmNhcmQ7CiAKLQljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KLQkJdG1wID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5Q09SMyA8PCBpbmRleCkpICYgQ3lSRUNfRklGTzsKKwkJdTggdG1wID0gY3l5X3JlYWRiKGluZm8sIEN5Q09SMykgJiBDeVJFQ19GSUZPOwogCQlyZXR1cm4gcHV0X3VzZXIodG1wLCB2YWx1ZSk7CiAJfQogCXJldHVybiAwOwogfQkJCQkvKiBnZXRfdGhyZXNob2xkICovCiAKLXN0YXRpYyBpbnQgc2V0X2RlZmF1bHRfdGhyZXNob2xkKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAotCQkJCQkJCXVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0JaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQgPSB2YWx1ZSAmIDB4MGY7Ci0JcmV0dXJuIDA7Ci19CQkJCS8qIHNldF9kZWZhdWx0X3RocmVzaG9sZCAqLwotCi1zdGF0aWMgaW50IGdldF9kZWZhdWx0X3RocmVzaG9sZChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKLQkJCQkJCXVuc2lnbmVkIGxvbmcgX191c2VyICp2YWx1ZSkKLXsKLQlyZXR1cm4gcHV0X3VzZXIoaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQsIHZhbHVlKTsKLX0JCQkJLyogZ2V0X2RlZmF1bHRfdGhyZXNob2xkICovCi0KIHN0YXRpYyBpbnQgc2V0X3RpbWVvdXQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoYW5uZWwsIGNoaXAsIGluZGV4OworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkID0gaW5mby0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpLCB2YWx1ZSAmIDB4ZmYpOworCQljeXlfd3JpdGViKGluZm8sIEN5UlRQUiwgdmFsdWUgJiAweGZmKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwpAQCAtMzgzNCwzNiArMjY1MSwzNSBAQAogc3RhdGljIGludCBnZXRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKIAkJCQkJCXVuc2lnbmVkIGxvbmcgX191c2VyICp2YWx1ZSkKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hhbm5lbCwgY2hpcCwgaW5kZXg7Ci0JdW5zaWduZWQgbG9uZyB0bXA7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQgPSBpbmZvLT5jYXJkOwogCi0JY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCi0JCXRtcCA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpKTsKKwkJdTggdG1wID0gY3l5X3JlYWRiKGluZm8sIEN5UlRQUik7CiAJCXJldHVybiBwdXRfdXNlcih0bXAsIHZhbHVlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CQkJCS8qIGdldF90aW1lb3V0ICovCiAKLXN0YXRpYyBpbnQgc2V0X2RlZmF1bHRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3N0YXRpYyBpbnQgY3lfY2ZsYWdzX2NoYW5nZWQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGxvbmcgYXJnLAorCQlzdHJ1Y3QgY3ljbGFkZXNfaWNvdW50ICpjcHJldikKIHsKLQlpbmZvLT5kZWZhdWx0X3RpbWVvdXQgPSB2YWx1ZSAmIDB4ZmY7Ci0JcmV0dXJuIDA7Ci19CQkJCS8qIHNldF9kZWZhdWx0X3RpbWVvdXQgKi8KKwlzdHJ1Y3QgY3ljbGFkZXNfaWNvdW50IGNub3c7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCi1zdGF0aWMgaW50IGdldF9kZWZhdWx0X3RpbWVvdXQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCQkJCXVuc2lnbmVkIGxvbmcgX191c2VyICp2YWx1ZSkKLXsKLQlyZXR1cm4gcHV0X3VzZXIoaW5mby0+ZGVmYXVsdF90aW1lb3V0LCB2YWx1ZSk7Ci19CQkJCS8qIGdldF9kZWZhdWx0X3RpbWVvdXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisJY25vdyA9IGluZm8tPmljb3VudDsJLyogYXRvbWljIGNvcHkgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKworCXJldCA9CSgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYtPnJuZykpIHx8CisJCSgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYtPmRzcikpIHx8CisJCSgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYtPmRjZCkpIHx8CisJCSgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYtPmN0cykpOworCisJKmNwcmV2ID0gY25vdzsKKworCXJldHVybiByZXQ7Cit9CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgYWxsb3dzIHRoZSB0dHkgZHJpdmVyIHRvIGltcGxlbWVudCBkZXZpY2UtCkBAIC0zODc1LDggKzI2OTEsNyBAQAogCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGN5Y2xhZGVzX2ljb3VudCBjcHJldiwgY25vdzsJLyoga2VybmVsIGNvdW50ZXIgdGVtcHMgKi8KLQlzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCBfX3VzZXIgKnBfY3VzZXI7CS8qIHVzZXIgc3BhY2UgKi8KKwlzdHJ1Y3QgY3ljbGFkZXNfaWNvdW50IGNub3c7CS8qIGtlcm5lbCBjb3VudGVyIHRlbXBzICovCiAJaW50IHJldF92YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC0zODkyLDcgKzI3MDcsMTEgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDWUdFVE1PTjoKLQkJcmV0X3ZhbCA9IGdldF9tb25faW5mbyhpbmZvLCBhcmdwKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+bW9uLCBzaXplb2YoaW5mby0+bW9uKSkpIHsKKwkJCXJldF92YWwgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJbWVtc2V0KCZpbmZvLT5tb24sIDAsIHNpemVvZihpbmZvLT5tb24pKTsKIAkJYnJlYWs7CiAJY2FzZSBDWUdFVFRIUkVTSDoKIAkJcmV0X3ZhbCA9IGdldF90aHJlc2hvbGQoaW5mbywgYXJncCk7CkBAIC0zOTAxLDEwICsyNzIwLDExIEBACiAJCXJldF92YWwgPSBzZXRfdGhyZXNob2xkKGluZm8sIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgQ1lHRVRERUZUSFJFU0g6Ci0JCXJldF92YWwgPSBnZXRfZGVmYXVsdF90aHJlc2hvbGQoaW5mbywgYXJncCk7CisJCXJldF92YWwgPSBwdXRfdXNlcihpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCwKKwkJCQkodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmdwKTsKIAkJYnJlYWs7CiAJY2FzZSBDWVNFVERFRlRIUkVTSDoKLQkJcmV0X3ZhbCA9IHNldF9kZWZhdWx0X3RocmVzaG9sZChpbmZvLCBhcmcpOworCQlpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCA9IGFyZyAmIDB4MGY7CiAJCWJyZWFrOwogCWNhc2UgQ1lHRVRUSU1FT1VUOgogCQlyZXRfdmFsID0gZ2V0X3RpbWVvdXQoaW5mbywgYXJncCk7CkBAIC0zOTEzLDIxICsyNzMzLDIwIEBACiAJCXJldF92YWwgPSBzZXRfdGltZW91dChpbmZvLCBhcmcpOwogCQlicmVhazsKIAljYXNlIENZR0VUREVGVElNRU9VVDoKLQkJcmV0X3ZhbCA9IGdldF9kZWZhdWx0X3RpbWVvdXQoaW5mbywgYXJncCk7CisJCXJldF92YWwgPSBwdXRfdXNlcihpbmZvLT5kZWZhdWx0X3RpbWVvdXQsCisJCQkJKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgQ1lTRVRERUZUSU1FT1VUOgotCQlyZXRfdmFsID0gc2V0X2RlZmF1bHRfdGltZW91dChpbmZvLCBhcmcpOworCQlpbmZvLT5kZWZhdWx0X3RpbWVvdXQgPSBhcmcgJiAweGZmOwogCQlicmVhazsKIAljYXNlIENZU0VUUkZMT1c6CiAJCWluZm8tPnJmbG93ID0gKGludClhcmc7Ci0JCXJldF92YWwgPSAwOwogCQlicmVhazsKIAljYXNlIENZR0VUUkZMT1c6CiAJCXJldF92YWwgPSBpbmZvLT5yZmxvdzsKIAkJYnJlYWs7CiAJY2FzZSBDWVNFVFJUU0RUUl9JTlY6CiAJCWluZm8tPnJ0c2R0cl9pbnYgPSAoaW50KWFyZzsKLQkJcmV0X3ZhbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQ1lHRVRSVFNEVFJfSU5WOgogCQlyZXRfdmFsID0gaW5mby0+cnRzZHRyX2ludjsKQEAgLTM5MzgsNyArMjc1Nyw2IEBACiAjaWZuZGVmIENPTkZJR19DWVpfSU5UUgogCWNhc2UgQ1laU0VUUE9MTENZQ0xFOgogCQljeXpfcG9sbGluZ19jeWNsZSA9IChhcmcgKiBIWikgLyAxMDAwOwotCQlyZXRfdmFsID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBDWVpHRVRQT0xMQ1lDTEU6CiAJCXJldF92YWwgPSAoY3l6X3BvbGxpbmdfY3ljbGUgKiAxMDAwKSAvIEhaOwpAQCAtMzk0NiwxNiArMjc2NCwxNSBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLwogCWNhc2UgQ1lTRVRXQUlUOgogCQlpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCA9ICh1bnNpZ25lZCBzaG9ydClhcmcgKiBIWiAvIDEwMDsKLQkJcmV0X3ZhbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQ1lHRVRXQUlUOgogCQlyZXRfdmFsID0gaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQgLyAoSFogLyAxMDApOwogCQlicmVhazsKIAljYXNlIFRJT0NHU0VSSUFMOgotCQlyZXRfdmFsID0gZ2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOworCQlyZXRfdmFsID0gY3lfZ2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOwogCQlicmVhazsKIAljYXNlIFRJT0NTU0VSSUFMOgotCQlyZXRfdmFsID0gc2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOworCQlyZXRfdmFsID0gY3lfc2V0X3NlcmlhbF9pbmZvKGluZm8sIHR0eSwgYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgVElPQ1NFUkdFVExTUjoJLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCiAJCXJldF92YWwgPSBnZXRfbHNyX2luZm8oaW5mbywgYXJncCk7CkBAIC0zOTcxLDE3ICsyNzg4LDggQEAKIAkJLyogbm90ZSB0aGUgY291bnRlcnMgb24gZW50cnkgKi8KIAkJY25vdyA9IGluZm8tPmljb3VudDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCXJldF92YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+ZGVsdGFfbXNyX3dhaXQsICh7Ci0JCQljcHJldiA9IGNub3c7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQljbm93ID0gaW5mby0+aWNvdW50OwkvKiBhdG9taWMgY29weSAqLwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0KLQkJCSgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKLQkJCSgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKLQkJCSgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKLQkJCSgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYuY3RzKSk7Ci0JCX0pKTsKKwkJcmV0X3ZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbmZvLT5wb3J0LmRlbHRhX21zcl93YWl0LAorCQkJCWN5X2NmbGFnc19jaGFuZ2VkKGluZm8sIGFyZywgJmNub3cpKTsKIAkJYnJlYWs7CiAKIAkJLyoKQEAgLTM5OTAsNDYgKzI3OTgsMjkgQEAKIAkJICogTkI6IGJvdGggMS0+MCBhbmQgMC0+MSB0cmFuc2l0aW9ucyBhcmUgY291bnRlZCBleGNlcHQgZm9yCiAJCSAqICAgICBSSSB3aGVyZSBvbmx5IDAtPjEgaXMgY291bnRlZC4KIAkJICovCi0JY2FzZSBUSU9DR0lDT1VOVDoKKwljYXNlIFRJT0NHSUNPVU5UOiB7CisJCXN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0IHNpYyA9IHsgfTsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCWNub3cgPSBpbmZvLT5pY291bnQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQlwX2N1c2VyID0gYXJncDsKLQkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cuY3RzLCAmcF9jdXNlci0+Y3RzKTsKLQkJaWYgKHJldF92YWwpCi0JCQlicmVhazsKLQkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cuZHNyLCAmcF9jdXNlci0+ZHNyKTsKLQkJaWYgKHJldF92YWwpCi0JCQlicmVhazsKLQkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cucm5nLCAmcF9jdXNlci0+cm5nKTsKLQkJaWYgKHJldF92YWwpCi0JCQlicmVhazsKLQkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cuZGNkLCAmcF9jdXNlci0+ZGNkKTsKLQkJaWYgKHJldF92YWwpCi0JCQlicmVhazsKLQkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cucngsICZwX2N1c2VyLT5yeCk7Ci0JCWlmIChyZXRfdmFsKQotCQkJYnJlYWs7Ci0JCXJldF92YWwgPSBwdXRfdXNlcihjbm93LnR4LCAmcF9jdXNlci0+dHgpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5mcmFtZSwgJnBfY3VzZXItPmZyYW1lKTsKLQkJaWYgKHJldF92YWwpCi0JCQlicmVhazsKLQkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cub3ZlcnJ1biwgJnBfY3VzZXItPm92ZXJydW4pOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5wYXJpdHksICZwX2N1c2VyLT5wYXJpdHkpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5icmssICZwX2N1c2VyLT5icmspOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5idWZfb3ZlcnJ1biwgJnBfY3VzZXItPmJ1Zl9vdmVycnVuKTsKLQkJaWYgKHJldF92YWwpCi0JCQlicmVhazsKLQkJcmV0X3ZhbCA9IDA7CisKKwkJc2ljLmN0cyA9IGNub3cuY3RzOworCQlzaWMuZHNyID0gY25vdy5kc3I7CisJCXNpYy5ybmcgPSBjbm93LnJuZzsKKwkJc2ljLmRjZCA9IGNub3cuZGNkOworCQlzaWMucnggPSBjbm93LnJ4OworCQlzaWMudHggPSBjbm93LnR4OworCQlzaWMuZnJhbWUgPSBjbm93LmZyYW1lOworCQlzaWMub3ZlcnJ1biA9IGNub3cub3ZlcnJ1bjsKKwkJc2ljLnBhcml0eSA9IGNub3cucGFyaXR5OworCQlzaWMuYnJrID0gY25vdy5icms7CisJCXNpYy5idWZfb3ZlcnJ1biA9IGNub3cuYnVmX292ZXJydW47CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmc2ljLCBzaXplb2Yoc2ljKSkpCisJCQlyZXRfdmFsID0gLUVGQVVMVDsKIAkJYnJlYWs7CisJfQogCWRlZmF1bHQ6CiAJCXJldF92YWwgPSAtRU5PSU9DVExDTUQ7CiAJfQpAQCAtNDA1NSw3ICsyODQ2LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X3NldF90ZXJtaW9zIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAotCXNldF9saW5lX2NoYXIoaW5mbyk7CisJY3lfc2V0X2xpbmVfY2hhcihpbmZvLCB0dHkpOwogCiAJaWYgKChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpICYmCiAJCQkhKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpKSB7CkBAIC00MTEyLDggKzI5MDMsNiBAQAogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAogI2lmZGVmIENZX0RFQlVHX1RIUk9UVExFCiAJY2hhciBidWZbNjRdOwpAQCAtNDEzNSwyNCArMjkyNCw5IEBACiAJfQogCiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKLQkJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCQlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCQljaGFubmVsICY9IDB4MDM7Ci0JCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArCi0JCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCi0JCQkJICAodV9jaGFyKSBjaGFubmVsKTsKLQkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKLQkJCQkJICB+Q3lEVFIpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAotCQkJCQkgIH5DeVJUUyk7Ci0JCQl9CisJCQljeXlfY2hhbmdlX3J0c19kdHIoaW5mbywgMCwgVElPQ01fUlRTKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJaW5mby0+dGhyb3R0bGUgPSAxOwpAQCAtNDE3MCw4ICsyOTQ0LDYgQEAKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAKICNpZmRlZiBDWV9ERUJVR19USFJPVFRMRQogCWNoYXIgYnVmWzY0XTsKQEAgLTQxOTIsMjQgKzI5NjQsOSBAQAogCiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKIAkJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAkJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQkJY2hhbm5lbCAmPSAweDAzOwotCQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKwotCQkJCShjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAotCQkJCSAgKHVfY2hhcikgY2hhbm5lbCk7Ci0JCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksCi0JCQkJCSAgQ3lEVFIpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAotCQkJCQkgIEN5UlRTKTsKLQkJCX0KKwkJCWN5eV9jaGFuZ2VfcnRzX2R0cihpbmZvLCBUSU9DTV9SVFMsIDApOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCX0gZWxzZSB7CiAJCQlpbmZvLT50aHJvdHRsZSA9IDA7CkBAIC00MjI0LDggKzI5ODEsNyBAQAogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCBjaGFubmVsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgpAQCAtNDIzOCwxNiArMjk5NCw5IEBACiAJY2luZm8gPSBpbmZvLT5jYXJkOwogCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2luZm8tPmZpcnN0X2xpbmU7CiAJaWYgKCFjeV9pc19aKGNpbmZvKSkgewotCQlpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCi0JCQkodV9jaGFyKShjaGFubmVsICYgMHgwMDAzKSk7IC8qIGluZGV4IGNoYW5uZWwgKi8KLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lUeFJkeSk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwgJiAweDAzKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVNSRVIsIGN5eV9yZWFkYihpbmZvLCBDeVNSRVIpICYgfkN5VHhSZHkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogfQkJCQkvKiBjeV9zdG9wICovCkBAIC00MjU2LDggKzMwMDUsNyBAQAogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCBjaGFubmVsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgpAQCAtNDI2OSwxNyArMzAxNywxMCBAQAogCiAJY2luZm8gPSBpbmZvLT5jYXJkOwogCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2luZm8tPmZpcnN0X2xpbmU7Ci0JaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OwogCWlmICghY3lfaXNfWihjaW5mbykpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQliYXNlX2FkZHIgPSBjaW5mby0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCSh1X2NoYXIpIChjaGFubmVsICYgMHgwMDAzKSk7CS8qIGluZGV4IGNoYW5uZWwgKi8KLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeVR4UmR5KTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCAmIDB4MDMpOworCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwgY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgfCBDeVR4UmR5KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0KIH0JCQkJLyogY3lfc3RhcnQgKi8KQEAgLTQyOTksMTcgKzMwNDAsODQgQEAKIAkJcmV0dXJuOwogCiAJY3lfZmx1c2hfYnVmZmVyKHR0eSk7Ci0Jc2h1dGRvd24oaW5mbyk7Ci0JaW5mby0+cG9ydC5jb3VudCA9IDA7Ci0jaWZkZWYgQ1lfREVCVUdfQ09VTlQKLQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2hhbmd1cCAoJWQpOiBzZXR0aW5nIGNvdW50IHRvIDBcbiIsCi0JCWN1cnJlbnQtPnBpZCk7Ci0jZW5kaWYKLQlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7Ci0JaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKKwljeV9zaHV0ZG93bihpbmZvLCB0dHkpOworCXR0eV9wb3J0X2hhbmd1cCgmaW5mby0+cG9ydCk7CiB9CQkJCS8qIGN5X2hhbmd1cCAqLwogCitzdGF0aWMgaW50IGN5eV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGN5Y2xhZGVzX3BvcnQsCisJCQlwb3J0KTsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSBpbmZvLT5jYXJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2luZm8tPmZpcnN0X2xpbmU7CisJdTMyIGNkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsICYgMHgwMyk7CisJY2QgPSBjeXlfcmVhZGIoaW5mbywgQ3lNU1ZSMSkgJiBDeURDRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY2Q7Cit9CisKK3N0YXRpYyB2b2lkIGN5eV9kdHJfcnRzKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwgaW50IHJhaXNlKQoreworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBjeWNsYWRlc19wb3J0LAorCQkJcG9ydCk7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwljeXlfY2hhbmdlX3J0c19kdHIoaW5mbywgcmFpc2UgPyBUSU9DTV9SVFMgfCBUSU9DTV9EVFIgOiAwLAorCQkJcmFpc2UgPyAwIDogVElPQ01fUlRTIHwgVElPQ01fRFRSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY3l6X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCwKKwkJCXBvcnQpOworCisJcmV0dXJuIHJlYWRsKCZpbmZvLT51LmN5ei5jaF9jdHJsLT5yc19zdGF0dXMpICYgQ19SU19EQ0Q7Cit9CisKK3N0YXRpYyB2b2lkIGN5el9kdHJfcnRzKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwgaW50IHJhaXNlKQoreworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBjeWNsYWRlc19wb3J0LAorCQkJcG9ydCk7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKKwlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsID0gaW5mby0+dS5jeXouY2hfY3RybDsKKwlpbnQgcmV0LCBjaGFubmVsID0gaW5mby0+bGluZSAtIGNpbmZvLT5maXJzdF9saW5lOworCXUzMiByczsKKworCXJzID0gcmVhZGwoJmNoX2N0cmwtPnJzX2NvbnRyb2wpOworCWlmIChyYWlzZSkKKwkJcnMgfD0gQ19SU19SVFMgfCBDX1JTX0RUUjsKKwllbHNlCisJCXJzICY9IH4oQ19SU19SVFMgfCBDX1JTX0RUUik7CisJY3lfd3JpdGVsKCZjaF9jdHJsLT5yc19jb250cm9sLCBycyk7CisJcmV0ID0gY3l6X2lzc3VlX2NtZChjaW5mbywgY2hhbm5lbCwgQ19DTV9JT0NUTE0sIDBMKTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAorCQkJCV9fZnVuY19fLCBpbmZvLT5saW5lLCByZXQpOworI2lmZGVmIENZX0RFQlVHX0RUUgorCXByaW50ayhLRVJOX0RFQlVHICIlczogcmFpc2luZyBaIERUUlxuIiwgX19mdW5jX18pOworI2VuZGlmCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBjeXlfcG9ydF9vcHMgPSB7CisJLmNhcnJpZXJfcmFpc2VkID0gY3l5X2NhcnJpZXJfcmFpc2VkLAorCS5kdHJfcnRzID0gY3l5X2R0cl9ydHMsCisJLnNodXRkb3duID0gY3lfZG9fY2xvc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgY3l6X3BvcnRfb3BzID0geworCS5jYXJyaWVyX3JhaXNlZCA9IGN5el9jYXJyaWVyX3JhaXNlZCwKKwkuZHRyX3J0cyA9IGN5el9kdHJfcnRzLAorCS5zaHV0ZG93biA9IGN5X2RvX2Nsb3NlLAorfTsKKwogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogY3lfaW5pdCgpIGFuZCBmcmllbmRzCkBAIC00MzIxLDggKzMxMjksNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgY3lfaW5pdF9jYXJkKHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbykKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKLQl1bnNpZ25lZCBpbnQgcG9ydDsKLQl1bnNpZ25lZCBzaG9ydCBjaGlwX251bWJlcjsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgcG9ydDsKIAogCXNwaW5fbG9ja19pbml0KCZjaW5mby0+Y2FyZF9sb2NrKTsKIAljaW5mby0+aW50cl9lbmFibGVkID0gMDsKQEAgLTQzMzQsOSArMzE0MSw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWZvciAocG9ydCA9IGNpbmZvLT5maXJzdF9saW5lOyBwb3J0IDwgY2luZm8tPmZpcnN0X2xpbmUgKyBjaW5mby0+bnBvcnRzOwotCQkJcG9ydCsrKSB7Ci0JCWluZm8gPSAmY2luZm8tPnBvcnRzW3BvcnQgLSBjaW5mby0+Zmlyc3RfbGluZV07CisJZm9yIChjaGFubmVsID0gMCwgcG9ydCA9IGNpbmZvLT5maXJzdF9saW5lOyBjaGFubmVsIDwgY2luZm8tPm5wb3J0czsKKwkJCWNoYW5uZWwrKywgcG9ydCsrKSB7CisJCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWxdOwogCQl0dHlfcG9ydF9pbml0KCZpbmZvLT5wb3J0KTsKIAkJaW5mby0+bWFnaWMgPSBDWUNMQURFU19NQUdJQzsKIAkJaW5mby0+Y2FyZCA9IGNpbmZvOwpAQCAtNDM0NiwxMCArMzE1MywxOSBAQAogCQlpbmZvLT5wb3J0LmNsb3NlX2RlbGF5ID0gNSAqIEhaIC8gMTA7CiAJCWluZm8tPnBvcnQuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTOwogCQlpbml0X2NvbXBsZXRpb24oJmluZm8tPnNodXRkb3duX3dhaXQpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkJaWYgKGN5X2lzX1ooY2luZm8pKSB7CisJCQlzdHJ1Y3QgRklSTV9JRCAqZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCQkJc3RydWN0IFpGV19DVFJMICp6ZndfY3RybDsKKworCQkJaW5mby0+cG9ydC5vcHMgPSAmY3l6X3BvcnRfb3BzOwogCQkJaW5mby0+dHlwZSA9IFBPUlRfU1RBUlRFQ0g7CisKKwkJCXpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArCisJCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CisJCQlpbmZvLT51LmN5ei5jaF9jdHJsID0gJnpmd19jdHJsLT5jaF9jdHJsW2NoYW5uZWxdOworCQkJaW5mby0+dS5jeXouYnVmX2N0cmwgPSAmemZ3X2N0cmwtPmJ1Zl9jdHJsW2NoYW5uZWxdOworCiAJCQlpZiAoY2luZm8tPmh3X3ZlciA9PSBaT19WMSkKIAkJCQlpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9IENZWl9GSUZPX1NJWkU7CiAJCQllbHNlCkBAIC00MzU5LDE3ICszMTc1LDIwIEBACiAJCQkJY3l6X3J4X3Jlc3RhcnQsICh1bnNpZ25lZCBsb25nKWluZm8pOwogI2VuZGlmCiAJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBzaG9ydCBjaGlwX251bWJlcjsKIAkJCWludCBpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CisKKwkJCWluZm8tPnBvcnQub3BzID0gJmN5eV9wb3J0X29wczsKIAkJCWluZm8tPnR5cGUgPSBQT1JUX0NJUlJVUzsKIAkJCWluZm8tPnhtaXRfZmlmb19zaXplID0gQ3lNQVhfQ0hBUl9GSUZPOwogCQkJaW5mby0+Y29yMSA9IEN5UEFSSVRZX05PTkUgfCBDeV8xX1NUT1AgfCBDeV84X0JJVFM7CiAJCQlpbmZvLT5jb3IyID0gQ3lFVEM7CiAJCQlpbmZvLT5jb3IzID0gMHgwODsJLyogX3ZlcnlfIHNtYWxsIHJjdiB0aHJlc2hvbGQgKi8KIAotCQkJY2hpcF9udW1iZXIgPSAocG9ydCAtIGNpbmZvLT5maXJzdF9saW5lKSAvIDQ7Ci0JCQlpbmZvLT5jaGlwX3JldiA9IHJlYWRiKGNpbmZvLT5iYXNlX2FkZHIgKwotCQkJCSAgICAgIChjeV9jaGlwX29mZnNldFtjaGlwX251bWJlcl0gPDwgaW5kZXgpICsKLQkJCQkgICAgICAoQ3lHRlJDUiA8PCBpbmRleCkpOworCQkJY2hpcF9udW1iZXIgPSBjaGFubmVsIC8gQ3lQT1JUU19QRVJfQ0hJUDsKKwkJCWluZm8tPnUuY3l5LmJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHIgKworCQkJCShjeV9jaGlwX29mZnNldFtjaGlwX251bWJlcl0gPDwgaW5kZXgpOworCQkJaW5mby0+Y2hpcF9yZXYgPSBjeXlfcmVhZGIoaW5mbywgQ3lHRlJDUik7CiAKIAkJCWlmIChpbmZvLT5jaGlwX3JldiA+PSBDRDE0MDBfUkVWX0opIHsKIAkJCQkvKiBJdCBpcyBhIENEMTQwMCByZXYuIEogb3IgbGF0ZXIgKi8KQEAgLTUwNjAsOCArMzg3OSwxNCBAQAogCQl9CiAJCWN5X2NhcmRbY2FyZF9ub10ubnVtX2NoaXBzID0gbmNoYW4gLyBDeVBPUlRTX1BFUl9DSElQOwogCX0gZWxzZSB7CisJCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQgPSBhZGRyMiArIElEX0FERFJFU1M7CisJCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKKworCQl6ZndfY3RybCA9IGFkZHIyICsgKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CisKIAkJY3lfY2FyZFtjYXJkX25vXS5od192ZXIgPSBtYWlsYm94OwogCQljeV9jYXJkW2NhcmRfbm9dLm51bV9jaGlwcyA9ICh1bnNpZ25lZCBpbnQpLTE7CisJCWN5X2NhcmRbY2FyZF9ub10uYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKIAkJLyogYWxsb2NhdGUgSVJRIG9ubHkgaWYgYm9hcmQgaGFzIGFuIElSUSAqLwogCQlpZiAoaXJxICE9IDAgJiYgaXJxICE9IDI1NSkgewpAQCAtNTE5MSwxOCArNDAxNiwzMCBAQAogCQlmb3IgKGogPSAwOyBqIDwgY3lfY2FyZFtpXS5ucG9ydHM7IGorKykgewogCQkJaW5mbyA9ICZjeV9jYXJkW2ldLnBvcnRzW2pdOwogCi0JCQlpZiAoaW5mby0+cG9ydC5jb3VudCkKKwkJCWlmIChpbmZvLT5wb3J0LmNvdW50KSB7CisJCQkJLyogWFhYIGlzIHRoZSBsZGlzYyBudW0gd29ydGggdGhpcz8gKi8KKwkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCQkJCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCQkJCWludCBudW0gPSAwOworCQkJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmluZm8tPnBvcnQpOworCQkJCWlmICh0dHkpIHsKKwkJCQkJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJCQkJCWlmIChsZCkgeworCQkJCQkJbnVtID0gbGQtPm9wcy0+bnVtOworCQkJCQkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKwkJCQkJfQorCQkJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJCQl9CiAJCQkJc2VxX3ByaW50ZihtLCAiJTNkICU4bHUgJTEwbHUgJThsdSAiCi0JCQkJCSIlMTBsdSAlOGx1ICU5bHUgJTZsZFxuIiwgaW5mby0+bGluZSwKKwkJCQkJIiUxMGx1ICU4bHUgJTlsdSAlNmRcbiIsIGluZm8tPmxpbmUsCiAJCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMuaW5fdXNlKSAvCiAJCQkJCUhaLCBpbmZvLT5pZGxlX3N0YXRzLnhtaXRfYnl0ZXMsCiAJCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlKS8KIAkJCQkJSFosIGluZm8tPmlkbGVfc3RhdHMucmVjdl9ieXRlcywKIAkJCQkJKGN1cl9qaWZzIC0gaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUpLwogCQkJCQlIWiwgaW5mby0+aWRsZV9zdGF0cy5vdmVycnVucywKLQkJCQkJLyogRklYTUU6IGRvdWJsZSBjaGVjayBsb2NraW5nICovCi0JCQkJCShsb25nKWluZm8tPnBvcnQudHR5LT5sZGlzYy0+b3BzLT5udW0pOwotCQkJZWxzZQorCQkJCQludW0pOworCQkJfSBlbHNlCiAJCQkJc2VxX3ByaW50ZihtLCAiJTNkICU4bHUgJTEwbHUgJThsdSAiCiAJCQkJCSIlMTBsdSAlOGx1ICU5bHUgJTZsZFxuIiwKIAkJCQkJaW5mby0+bGluZSwgMEwsIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggZmY2NDdjYS4uOWQ1ODllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0yMjM5LDcgKzIyMzksNyBAQAogCXN0cnVjdCBjaGFubmVsICpjaCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2hhbm5lbCwgdHF1ZXVlKTsKIAkvKiBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2RlbSBjaGFuZ2UgZXZlbnQgKi8KIAlpZiAoY2ggJiYgY2gtPm1hZ2ljID09IEVQQ0FfTUFHSUMpIHsKLQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmNoLT5wb3J0KTs7CisJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZjaC0+cG9ydCk7CiAKIAkJaWYgKHR0eSAmJiB0dHktPmRyaXZlcl9kYXRhKSB7CiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEVQQ0FfRVZFTlRfSEFOR1VQLCAmY2gtPmV2ZW50KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VzcC5jIGIvZHJpdmVycy9jaGFyL2VzcC5jCmluZGV4IGE1YzU5ZmMuLmIxOWQ0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lc3AuYworKysgYi9kcml2ZXJzL2NoYXIvZXNwLmMKQEAgLTU3Miw3ICs1NzIsNyBAQAogCQkJaW5mby0+aWNvdW50LmRjZCsrOwogCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENUUykKIAkJCWluZm8tPmljb3VudC5jdHMrKzsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCiAJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmIChzdGF0dXMgJiBVQVJUX01TUl9ERENEKSkgewpAQCAtOTI3LDcgKzkyNyw3IEBACiAJICogY2xlYXIgZGVsdGFfbXNyX3dhaXQgcXVldWUgdG8gYXZvaWQgbWVtIGxlYWtzOiB3ZSBtYXkgZnJlZSB0aGUgaXJxCiAJICogaGVyZSBzbyB0aGUgcXVldWUgbWlnaHQgbmV2ZXIgYmUgd2FrZW4gdXAKIAkgKi8KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+YnJlYWtfd2FpdCk7CiAKIAkvKiBzdG9wIGEgRE1BIHRyYW5zZmVyIG9uIHRoZSBwb3J0IGJlaW5nIGNsb3NlZCAqLwpAQCAtMTgwMCw3ICsxODAwLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCQl3aGlsZSAoMSkgewogCQkJLyogRklYTUU6IGNvbnZlcnQgdG8gbmV3IHN0eWxlIHdha2V1cCAqLwotCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTI0NTIsNyArMjQ1Miw2IEBACiAJCWluZm8tPmNvbmZpZy5mbG93X29mZiA9IGZsb3dfb2ZmOwogCQlpbmZvLT5jb25maWcucGlvX3RocmVzaG9sZCA9IHBpb190aHJlc2hvbGQ7CiAJCWluZm8tPm5leHRfcG9ydCA9IHBvcnRzOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmJyZWFrX3dhaXQpOwogCQlwb3J0cyA9IGluZm87CiAJCXByaW50ayhLRVJOX0lORk8gInR0eVAlZCBhdCAweCUwNHggKGlycSA9ICVkKSBpcyBhbiBFU1AgIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vY29yZS5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMKaW5kZXggZmM5M2UyZi4uMTU3M2FlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHJuZ19taXNjZGV2ID0gewogCS5taW5vcgkJPSBSTkdfTUlTQ0RFVl9NSU5PUiwKIAkubmFtZQkJPSBSTkdfTU9EVUxFX05BTUUsCi0JLmRldm5vZGUJPSAiaHdybmciLAorCS5ub2RlbmFtZQk9ICJod3JuZyIsCiAJLmZvcHMJCT0gJnJuZ19jaHJkZXZfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aXJ0aW8tcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYwppbmRleCAzMjIxNmI2Li45NjI5NjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX3JuZy5oPgogCiAvKiBUaGUgaG9zdCB3aWxsIGZpbGwgYW55IGJ1ZmZlciB3ZSBnaXZlIGl0IHdpdGggc3dlZXQsIHN3ZWV0IHJhbmRvbW5lc3MuICBXZQpAQCAtNTEsNyArNTIsNyBAQAogCiAJc2dfaW5pdF9vbmUoJnNnLCByYW5kb21fZGF0YStkYXRhX2xlZnQsIFJBTkRPTV9EQVRBX1NJWkUtZGF0YV9sZWZ0KTsKIAkvKiBUaGVyZSBzaG91bGQgYWx3YXlzIGJlIHJvb20gZm9yIG9uZSBidWZmZXIuICovCi0JaWYgKHZxLT52cV9vcHMtPmFkZF9idWYodnEsICZzZywgMCwgMSwgcmFuZG9tX2RhdGEpICE9IDApCisJaWYgKHZxLT52cV9vcHMtPmFkZF9idWYodnEsICZzZywgMCwgMSwgcmFuZG9tX2RhdGEpIDwgMCkKIAkJQlVHKCk7CiAJdnEtPnZxX29wcy0+a2ljayh2cSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKaW5kZXggYTI2MWJkNy4uMmU2NmI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYwpAQCAtNjkxLDcgKzY5MSw3IEBACiAvKgogICogU3RhcnR1cCBhbmQgc2h1dGRvd24gZnVuY3Rpb25zLgogICovCi1zdGF0aWMgaW50IGlwbWlfcG93ZXJvZmZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaXBtaV9wb3dlcm9mZl9pbml0KHZvaWQpCiB7CiAJaW50IHJ2OwogCkBAIC03MjUsNyArNzI1LDcgQEAKIH0KIAogI2lmZGVmIE1PRFVMRQotc3RhdGljIF9fZXhpdCB2b2lkIGlwbWlfcG93ZXJvZmZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlwbWlfcG93ZXJvZmZfY2xlYW51cCh2b2lkKQogewogCWludCBydjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCmluZGV4IDRmMWY0Y2QuLjQyNmJmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc2ljb20uYworKysgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKQEAgLTg0NiwzNyArODQ2LDUzIEBACiAJcmV0dXJuIChpcC0+c3RhdHVzICYgSVNJX0RDRCk/MSA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgaXNpY29tX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgc3RydWN0IHR0eV9wb3J0ICppc2ljb21fZmluZF9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGlzaV9wb3J0ICpwb3J0OwogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQ7CiAJdW5zaWduZWQgaW50IGJvYXJkOwotCWludCBlcnJvciwgbGluZTsKKwlpbnQgbGluZSA9IHR0eS0+aW5kZXg7CiAKLQlsaW5lID0gdHR5LT5pbmRleDsKIAlpZiAobGluZSA8IDAgfHwgbGluZSA+IFBPUlRfQ09VTlQtMSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBOVUxMOwogCWJvYXJkID0gQk9BUkQobGluZSk7CiAJY2FyZCA9ICZpc2lfY2FyZFtib2FyZF07CiAKIAlpZiAoIShjYXJkLT5zdGF0dXMgJiBGSVJNV0FSRV9MT0FERUQpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKiAgb3BlbiBvbiBhIHBvcnQgZ3JlYXRlciB0aGFuIHRoZSBwb3J0IGNvdW50IGZvciB0aGUgY2FyZCAhISEgKi8KIAlpZiAobGluZSA+ICgoYm9hcmQgKiAxNikgKyBjYXJkLT5wb3J0X2NvdW50IC0gMSkpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gTlVMTDsKIAogCXBvcnQgPSAmaXNpX3BvcnRzW2xpbmVdOwogCWlmIChpc2ljb21fcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAiaXNpY29tX29wZW4iKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBOVUxMOwogCisJcmV0dXJuICZwb3J0LT5wb3J0OworfQorCQorc3RhdGljIGludCBpc2ljb21fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgaXNpX3BvcnQgKnBvcnQ7CisJc3RydWN0IGlzaV9ib2FyZCAqY2FyZDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnRwb3J0OworCWludCBlcnJvciA9IDA7CisKKwl0cG9ydCA9IGlzaWNvbV9maW5kX3BvcnQodHR5KTsKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcG9ydCA9IGNvbnRhaW5lcl9vZih0cG9ydCwgc3RydWN0IGlzaV9wb3J0LCBwb3J0KTsKKwljYXJkID0gJmlzaV9jYXJkW0JPQVJEKHR0eS0+aW5kZXgpXTsKIAlpc2ljb21fc2V0dXBfYm9hcmQoY2FyZCk7CiAKIAkvKiBGSVhNRTogbG9ja2luZyBvbiBwb3J0LmNvdW50IGV0YyAqLwogCXBvcnQtPnBvcnQuY291bnQrKzsKIAl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKIAl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCB0dHkpOwotCWVycm9yID0gaXNpY29tX3NldHVwX3BvcnQodHR5KTsKKwkvKiBGSVhNRTogTG9ja2luZyBvbiBJbml0aWFsaXplZCBmbGFnICovCisJaWYgKCF0ZXN0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZ0cG9ydC0+ZmxhZ3MpKQorCQllcnJvciA9IGlzaWNvbV9zZXR1cF9wb3J0KHR0eSk7CiAJaWYgKGVycm9yID09IDApCiAJCWVycm9yID0gdHR5X3BvcnRfYmxvY2tfdGlsX3JlYWR5KCZwb3J0LT5wb3J0LCB0dHksIGZpbHApOwogCXJldHVybiBlcnJvcjsKQEAgLTk1MiwxOSArOTY4LDEyIEBACiAJdHR5X3dha2V1cCh0dHkpOwogfQogCi1zdGF0aWMgdm9pZCBpc2ljb21fY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBpc2ljb21fY2xvc2VfcG9ydChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGlzaV9wb3J0ICppcCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJmlwLT5wb3J0OwotCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQ7CisJc3RydWN0IGlzaV9wb3J0ICppcCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgaXNpX3BvcnQsIHBvcnQpOworCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBpcC0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JQlVHX09OKCFpcCk7Ci0KLQljYXJkID0gaXAtPmNhcmQ7Ci0JaWYgKGlzaWNvbV9wYXJhbm9pYV9jaGVjayhpcCwgdHR5LT5uYW1lLCAiaXNpY29tX2Nsb3NlIikpCi0JCXJldHVybjsKLQogCS8qIGluZGljYXRlIHRvIHRoZSBjYXJkIHRoYXQgbm8gbW9yZSBkYXRhIGNhbiBiZSByZWNlaXZlZAogCSAgIG9uIHRoaXMgcG9ydCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKQEAgLTk3NCw5ICs5ODMsMTkgQEAKIAl9CiAJaXNpY29tX3NodXRkb3duX3BvcnQoaXApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworfQogCitzdGF0aWMgdm9pZCBpc2ljb21fY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGlzaV9wb3J0ICppcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJmlwLT5wb3J0OworCWlmIChpc2ljb21fcGFyYW5vaWFfY2hlY2soaXAsIHR0eS0+bmFtZSwgImlzaWNvbV9jbG9zZSIpKQorCQlyZXR1cm47CisKKwlpZiAodHR5X3BvcnRfY2xvc2Vfc3RhcnQocG9ydCwgdHR5LCBmaWxwKSA9PSAwKQorCQlyZXR1cm47CisJaXNpY29tX2Nsb3NlX3BvcnQocG9ydCk7CiAJaXNpY29tX2ZsdXNoX2J1ZmZlcih0dHkpOwotCQogCXR0eV9wb3J0X2Nsb3NlX2VuZChwb3J0LCB0dHkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggMDQ5MWNkZi4uMGFlZGUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtODY2LDI0ICs4NjYsMjUgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYgewogCWNvbnN0IGNoYXIgKm5hbWU7CisJbW9kZV90IG1vZGU7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqZGV2X2luZm87CiB9IGRldmxpc3RbXSA9IHsKLQlbIDFdID0geyAibWVtIiwgJm1lbV9mb3BzLCAmZGlyZWN0bHlfbWFwcGFibGVfY2Rldl9iZGkgfSwKKwkgWzFdID0geyAibWVtIiwgMCwgJm1lbV9mb3BzLCAmZGlyZWN0bHlfbWFwcGFibGVfY2Rldl9iZGkgfSwKICNpZmRlZiBDT05GSUdfREVWS01FTQotCVsgMl0gPSB7ICJrbWVtIiwgJmttZW1fZm9wcywgJmRpcmVjdGx5X21hcHBhYmxlX2NkZXZfYmRpIH0sCisJIFsyXSA9IHsgImttZW0iLCAwLCAma21lbV9mb3BzLCAmZGlyZWN0bHlfbWFwcGFibGVfY2Rldl9iZGkgfSwKICNlbmRpZgotCVsgM10gPSB7Im51bGwiLCAmbnVsbF9mb3BzLCBOVUxMIH0sCisJIFszXSA9IHsgIm51bGwiLCAwNjY2LCAmbnVsbF9mb3BzLCBOVUxMIH0sCiAjaWZkZWYgQ09ORklHX0RFVlBPUlQKLQlbIDRdID0geyAicG9ydCIsICZwb3J0X2ZvcHMsIE5VTEwgfSwKKwkgWzRdID0geyAicG9ydCIsIDAsICZwb3J0X2ZvcHMsIE5VTEwgfSwKICNlbmRpZgotCVsgNV0gPSB7ICJ6ZXJvIiwgJnplcm9fZm9wcywgJnplcm9fYmRpIH0sCi0JWyA3XSA9IHsgImZ1bGwiLCAmZnVsbF9mb3BzLCBOVUxMIH0sCi0JWyA4XSA9IHsgInJhbmRvbSIsICZyYW5kb21fZm9wcywgTlVMTCB9LAotCVsgOV0gPSB7ICJ1cmFuZG9tIiwgJnVyYW5kb21fZm9wcywgTlVMTCB9LAotCVsxMV0gPSB7ICJrbXNnIiwgJmttc2dfZm9wcywgTlVMTCB9LAorCSBbNV0gPSB7ICJ6ZXJvIiwgMDY2NiwgJnplcm9fZm9wcywgJnplcm9fYmRpIH0sCisJIFs3XSA9IHsgImZ1bGwiLCAwNjY2LCAmZnVsbF9mb3BzLCBOVUxMIH0sCisJIFs4XSA9IHsgInJhbmRvbSIsIDA2NjYsICZyYW5kb21fZm9wcywgTlVMTCB9LAorCSBbOV0gPSB7ICJ1cmFuZG9tIiwgMDY2NiwgJnVyYW5kb21fZm9wcywgTlVMTCB9LAorCVsxMV0gPSB7ICJrbXNnIiwgMCwgJmttc2dfZm9wcywgTlVMTCB9LAogI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCi0JWzEyXSA9IHsgIm9sZG1lbSIsICZvbGRtZW1fZm9wcywgTlVMTCB9LAorCVsxMl0gPSB7ICJvbGRtZW0iLCAwLCAmb2xkbWVtX2ZvcHMsIE5VTEwgfSwKICNlbmRpZgogfTsKIApAQCAtOTIwLDYgKzkyMSwxMyBAQAogCS5vcGVuCQk9IG1lbW9yeV9vcGVuLAogfTsKIAorc3RhdGljIGNoYXIgKm1lbV9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQoreworCWlmIChtb2RlICYmIGRldmxpc3RbTUlOT1IoZGV2LT5kZXZ0KV0ubW9kZSkKKwkJKm1vZGUgPSBkZXZsaXN0W01JTk9SKGRldi0+ZGV2dCldLm1vZGU7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKm1lbV9jbGFzczsKIAogc3RhdGljIGludCBfX2luaXQgY2hyX2Rldl9pbml0KHZvaWQpCkBAIC05MzUsNiArOTQzLDcgQEAKIAkJcHJpbnRrKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBtZW1vcnkgZGV2c1xuIiwgTUVNX01BSk9SKTsKIAogCW1lbV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgIm1lbSIpOworCW1lbV9jbGFzcy0+ZGV2bm9kZSA9IG1lbV9kZXZub2RlOwogCWZvciAobWlub3IgPSAxOyBtaW5vciA8IEFSUkFZX1NJWkUoZGV2bGlzdCk7IG1pbm9yKyspIHsKIAkJaWYgKCFkZXZsaXN0W21pbm9yXS5uYW1lKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWlzYy5jIGIvZHJpdmVycy9jaGFyL21pc2MuYwppbmRleCA2MmM5OWZhLi4wN2ZhNjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci9taXNjLmMKQEAgLTkxLDcgKzkxLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIG1pc2Nfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbWlzY19zZXFfb3BzID0gewogCS5zdGFydCA9IG1pc2Nfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IG1pc2Nfc2VxX25leHQsCiAJLnN0b3AgID0gbWlzY19zZXFfc3RvcCwKQEAgLTI2MywxMiArMjYzLDE0IEBACiBFWFBPUlRfU1lNQk9MKG1pc2NfcmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChtaXNjX2RlcmVnaXN0ZXIpOwogCi1zdGF0aWMgY2hhciAqbWlzY19ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqbWlzY19kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXN0cnVjdCBtaXNjZGV2aWNlICpjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoYy0+ZGV2bm9kZSkKLQkJcmV0dXJuIGtzdHJkdXAoYy0+ZGV2bm9kZSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1vZGUgJiYgYy0+bW9kZSkKKwkJKm1vZGUgPSBjLT5tb2RlOworCWlmIChjLT5ub2RlbmFtZSkKKwkJcmV0dXJuIGtzdHJkdXAoYy0+bm9kZW5hbWUsIEdGUF9LRVJORUwpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yODcsNyArMjg5LDcgQEAKIAllcnIgPSAtRUlPOwogCWlmIChyZWdpc3Rlcl9jaHJkZXYoTUlTQ19NQUpPUiwibWlzYyIsJm1pc2NfZm9wcykpCiAJCWdvdG8gZmFpbF9wcmludGs7Ci0JbWlzY19jbGFzcy0+bm9kZW5hbWUgPSBtaXNjX25vZGVuYW1lOworCW1pc2NfY2xhc3MtPmRldm5vZGUgPSBtaXNjX2Rldm5vZGU7CiAJcmV0dXJuIDA7CiAKIGZhaWxfcHJpbnRrOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL214c2VyLmMgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwppbmRleCBkYmY4ZDUyLi41ZTI4ZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXhzZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwpAQCAtNDgsNyArNDgsNyBAQAogCiAjaW5jbHVkZSAibXhzZXIuaCIKIAotI2RlZmluZQlNWFNFUl9WRVJTSU9OCSIyLjAuNCIJCS8qIDEuMTIgKi8KKyNkZWZpbmUJTVhTRVJfVkVSU0lPTgkiMi4wLjUiCQkvKiAxLjE0ICovCiAjZGVmaW5lCU1YU0VSTUFKT1IJIDE3NAogCiAjZGVmaW5lIE1YU0VSX0JPQVJEUwkJNAkvKiBNYXguIGJvYXJkcyAqLwpAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BPUzEwNFVMCTB4MTA0NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCMTA4CTB4MTA4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NQMTAyVUYJMHgxMDIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1AxMTJVTAkweDExMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQjExNAkweDExNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DUDExNFVMCTB4MTE0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCMTM0SQkweDEzNDEKQEAgLTEzOSw3ICsxNDAsOCBAQAogCXsgIkNQLTEzOFUgc2VyaWVzIiwJOCwgfSwKIAl7ICJQT1MtMTA0VUwgc2VyaWVzIiwJNCwgfSwKIAl7ICJDUC0xMTRVTCBzZXJpZXMiLAk0LCB9LAotLyozMCovCXsgIkNQLTEwMlVGIHNlcmllcyIsCTIsIH0KKy8qMzAqLwl7ICJDUC0xMDJVRiBzZXJpZXMiLAkyLCB9LAorCXsgIkNQLTExMlVMIHNlcmllcyIsCTIsIH0sCiB9OwogCiAvKiBkcml2ZXJfZGF0YSBjb3JyZXNwb25kIHRvIHRoZSBsaW5lcyBpbiB0aGUgc3RydWN0dXJlIGFib3ZlCkBAIC0xNzAsNiArMTcyLDcgQEAKIAl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfUE9TMTA0VUwpLAkuZHJpdmVyX2RhdGEgPSAyOCB9LAogCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9DUDExNFVMKSwJLmRyaXZlcl9kYXRhID0gMjkgfSwKIAl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfQ1AxMDJVRiksCS5kcml2ZXJfZGF0YSA9IDMwIH0sCisJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX0NQMTEyVUwpLAkuZHJpdmVyX2RhdGEgPSAzMSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBteHNlcl9wY2licmRzKTsKQEAgLTI1OCw3ICsyNjEsNiBAQAogCXN0cnVjdCBteHNlcl9tb24gbW9uX2RhdGE7CiAKIAlzcGlubG9ja190IHNsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OwogfTsKIAogc3RydWN0IG14c2VyX2JvYXJkIHsKQEAgLTgxOCw3ICs4MjAsNyBAQAogCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ1RTKQogCQlwb3J0LT5pY291bnQuY3RzKys7CiAJcG9ydC0+bW9uX2RhdGEubW9kZW1fc3RhdHVzID0gc3RhdHVzOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAlpZiAoKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgJiYgKHN0YXR1cyAmIFVBUlRfTVNSX0REQ0QpKSB7CiAJCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ0QpCkBAIC05NzMsNyArOTc1LDcgQEAKIAkgKiBjbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3M6IHdlIG1heSBmcmVlIHRoZSBpcnEKIAkgKiBoZXJlIHNvIHRoZSBxdWV1ZSBtaWdodCBuZXZlciBiZSB3YWtlbiB1cAogCSAqLwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkvKgogCSAqIEZyZWUgdGhlIElSUSwgaWYgbmVjZXNzYXJ5CkBAIC0xMDczLDM0ICsxMDc1LDE3IEBACiB9CiAKIAotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsIHBvcnQgZ2V0cyBjbG9zZWQuICBGaXJzdCwgd2UKLSAqIHdhaXQgZm9yIHRoZSBsYXN0IHJlbWFpbmluZyBkYXRhIHRvIGJlIHNlbnQuICBUaGVuLCB3ZSB1bmxpbmsgaXRzCi0gKiBhc3luYyBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW50ZXJydXB0IGNoYWluIGlmIG5lY2Vzc2FyeSwgYW5kIHdlIGZyZWUKLSAqIHRoYXQgSVJRIGlmIG5vdGhpbmcgaXMgbGVmdCBpbiB0aGUgY2hhaW4uCi0gKi8KLXN0YXRpYyB2b2lkIG14c2VyX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgbXhzZXJfY2xvc2VfcG9ydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZpbmZvLT5wb3J0OwotCisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG14c2VyX3BvcnQsIHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCWlmICh0dHktPmluZGV4ID09IE1YU0VSX1BPUlRTKQotCQlyZXR1cm47Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm47Ci0KLQlpZiAodHR5X3BvcnRfY2xvc2Vfc3RhcnQocG9ydCwgdHR5LCBmaWxwKSA9PSAwKQotCQlyZXR1cm47Ci0KIAkvKgogCSAqIFNhdmUgdGhlIHRlcm1pb3Mgc3RydWN0dXJlLCBzaW5jZSB0aGlzIHBvcnQgbWF5IGhhdmUKIAkgKiBzZXBhcmF0ZSB0ZXJtaW9zIGZvciBjYWxsb3V0IGFuZCBkaWFsaW4uCiAJICoKIAkgKiBGSVhNRTogQ2FuIHRoaXMgZ28gPwogCSAqLwotCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfTk9STUFMX0FDVElWRSkKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19OT1JNQUxfQUNUSVZFKQogCQlpbmZvLT5ub3JtYWxfdGVybWlvcyA9ICp0dHktPnRlcm1pb3M7CiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IHdlIHN0b3AgYWNjZXB0aW5nIGlucHV0LiAgVG8gZG8gdGhpcywgd2UKQEAgLTExMTIsNyArMTA5Nyw3IEBACiAJaWYgKGluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpCiAJCWluZm8tPklFUiAmPSB+TU9YQV9NVVNUX1JFQ1ZfSVNSOwogCi0JaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCW91dGIoaW5mby0+SUVSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CiAJCS8qCiAJCSAqIEJlZm9yZSB3ZSBkcm9wIERUUiwgbWFrZSBzdXJlIHRoZSBVQVJUIHRyYW5zbWl0dGVyCkBAIC0xMTI3LDggKzExMTIsMjYgQEAKIAkJfQogCX0KIAlteHNlcl9zaHV0ZG93bih0dHkpOwotCW14c2VyX2ZsdXNoX2J1ZmZlcih0dHkpOwogCit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gdGhlIHNlcmlhbCBwb3J0IGdldHMgY2xvc2VkLiAgRmlyc3QsIHdlCisgKiB3YWl0IGZvciB0aGUgbGFzdCByZW1haW5pbmcgZGF0YSB0byBiZSBzZW50LiAgVGhlbiwgd2UgdW5saW5rIGl0cworICogYXN5bmMgc3RydWN0dXJlIGZyb20gdGhlIGludGVycnVwdCBjaGFpbiBpZiBuZWNlc3NhcnksIGFuZCB3ZSBmcmVlCisgKiB0aGF0IElSUSBpZiBub3RoaW5nIGlzIGxlZnQgaW4gdGhlIGNoYWluLgorICovCitzdGF0aWMgdm9pZCBteHNlcl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJmluZm8tPnBvcnQ7CisKKwlpZiAodHR5LT5pbmRleCA9PSBNWFNFUl9QT1JUUykKKwkJcmV0dXJuOworCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydChwb3J0LCB0dHksIGZpbHApID09IDApCisJCXJldHVybjsKKwlteHNlcl9jbG9zZV9wb3J0KHR0eSwgcG9ydCk7CisJbXhzZXJfZmx1c2hfYnVmZmVyKHR0eSk7CiAJLyogUmlnaHQgbm93IHRoZSB0dHlfcG9ydCBzZXQgaXMgZG9uZSBvdXRzaWRlIG9mIHRoZSBjbG9zZV9lbmQgaGVscGVyCiAJICAgYXMgd2UgZG9uJ3QgeWV0IGhhdmUgZXZlcnlvbmUgdXNpbmcgcmVmY291bnRzICovCQogCXR0eV9wb3J0X2Nsb3NlX2VuZChwb3J0LCB0dHkpOwpAQCAtMTc2MSw3ICsxNzY0LDcgQEAKIAkJY25vdyA9IGluZm8tPmljb3VudDsJLyogbm90ZSB0aGUgY291bnRlcnMgb24gZW50cnkgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAotCQlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPmRlbHRhX21zcl93YWl0LAorCQlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPnBvcnQuZGVsdGFfbXNyX3dhaXQsCiAJCQkJbXhzZXJfY2ZsYWdzX2NoYW5nZWQoaW5mbywgYXJnLCAmY25vdykpOwogCS8qCiAJICogR2V0IGNvdW50ZXIgb2YgaW5wdXQgc2VyaWFsIGxpbmUgaW50ZXJydXB0cyAoRENELFJJLERTUixDVFMpCkBAIC0xODAzLDcgKzE4MDYsNyBAQAogCiAJCWxvY2tfa2VybmVsKCk7CiAJCWxlbiA9IG14c2VyX2NoYXJzX2luX2J1ZmZlcih0dHkpOwotCQlsc3IgPSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9MU1IpICYgVUFSVF9MU1JfVEVNVDsKKwkJbHNyID0gaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RIUkU7CiAJCWxlbiArPSAobHNyID8gMCA6IDEpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAKQEAgLTI0MTMsNyArMjQxNiw2IEBACiAJCWluZm8tPnBvcnQuY2xvc2VfZGVsYXkgPSA1ICogSFogLyAxMDsKIAkJaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQgPSAzMCAqIEhaOwogCQlpbmZvLT5ub3JtYWxfdGVybWlvcyA9IG14dmFyX3Nkcml2ZXItPmluaXRfdGVybWlvczsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwogCQltZW1zZXQoJmluZm8tPm1vbl9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IG14c2VyX21vbikpOwogCQlpbmZvLT5lcnJfc2hhZG93ID0gMDsKIAkJc3Bpbl9sb2NrX2luaXQoJmluZm8tPnNsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3R0eS5jIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKaW5kZXggNGUyOGIzNS4uMmU1MGY0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25fdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKQEAgLTI3Miw3ICsyNzIsOCBAQAogICoKICAqCVRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG9uZSBvdXRwdXQgY2hhcmFjdGVyCiAgKgkoaW5jbHVkaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIFRBQiwgQ1IsIExGLCBldGMuKSwKLSAqCXB1dHRpbmcgdGhlIHJlc3VsdHMgaW4gdGhlIHR0eSBkcml2ZXIncyB3cml0ZSBidWZmZXIuCisgKglkb2luZyBPUE9TVCBwcm9jZXNzaW5nIGFuZCBwdXR0aW5nIHRoZSByZXN1bHRzIGluIHRoZQorICoJdHR5IGRyaXZlcidzIHdyaXRlIGJ1ZmZlci4KICAqCiAgKglOb3RlIHRoYXQgTGludXggY3VycmVudGx5IGlnbm9yZXMgVEFCRExZLCBDUkRMWSwgVlRETFksIEZGRExZCiAgKglhbmQgTkxETFkuICBUaGV5IHNpbXBseSBhcmVuJ3QgcmVsZXZhbnQgaW4gdGhlIHdvcmxkIHRvZGF5LgpAQCAtMzUwLDggKzM1MSw5IEBACiAgKglAYzogY2hhcmFjdGVyIChvciBwYXJ0aWFsIHVuaWNvZGUgc3ltYm9sKQogICoJQHR0eTogdGVybWluYWwgZGV2aWNlCiAgKgotICoJUGVyZm9ybSBPUE9TVCBwcm9jZXNzaW5nLiAgUmV0dXJucyAtMSB3aGVuIHRoZSBvdXRwdXQgZGV2aWNlIGlzCi0gKglmdWxsIGFuZCB0aGUgY2hhcmFjdGVyIG11c3QgYmUgcmV0cmllZC4KKyAqCU91dHB1dCBvbmUgY2hhcmFjdGVyIHdpdGggT1BPU1QgcHJvY2Vzc2luZy4KKyAqCVJldHVybnMgLTEgd2hlbiB0aGUgb3V0cHV0IGRldmljZSBpcyBmdWxsIGFuZCB0aGUgY2hhcmFjdGVyCisgKgltdXN0IGJlIHJldHJpZWQuCiAgKgogICoJTG9ja2luZzogb3V0cHV0X2xvY2sgdG8gcHJvdGVjdCBjb2x1bW4gc3RhdGUgYW5kIHNwYWNlIGxlZnQKICAqCQkgKGFsc28sIHRoaXMgaXMgY2FsbGVkIGZyb20gbl90dHlfd3JpdGUgdW5kZXIgdGhlCkBAIC0zNzcsOCArMzc5LDExIEBACiAvKioKICAqCXByb2Nlc3Nfb3V0cHV0X2Jsb2NrCQktCWJsb2NrIHBvc3QgcHJvY2Vzc29yCiAgKglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKLSAqCUBpbmJ1ZjogdXNlciBidWZmZXIKLSAqCUBucjogbnVtYmVyIG9mIGJ5dGVzCisgKglAYnVmOiBjaGFyYWN0ZXIgYnVmZmVyCisgKglAbnI6IG51bWJlciBvZiBieXRlcyB0byBvdXRwdXQKKyAqCisgKglPdXRwdXQgYSBibG9jayBvZiBjaGFyYWN0ZXJzIHdpdGggT1BPU1QgcHJvY2Vzc2luZy4KKyAqCVJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG91dHB1dC4KICAqCiAgKglUaGlzIHBhdGggaXMgdXNlZCB0byBzcGVlZCB1cCBibG9jayBjb25zb2xlIHdyaXRlcywgYW1vbmcgb3RoZXIKICAqCXRoaW5ncyB3aGVuIHByb2Nlc3NpbmcgYmxvY2tzIG9mIG91dHB1dCBkYXRhLiBJdCBoYW5kbGVzIG9ubHkKQEAgLTU3MSwzMyArNTc2LDIzIEBACiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJaWYgKGlzY250cmwob3ApKSB7Ci0JCQkJCWlmIChMX0VDSE9DVEwodHR5KSkgewotCQkJCQkJLyoKLQkJCQkJCSAqIEVuc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UKLQkJCQkJCSAqIGZvciB0aGUgd2hvbGUgY3RybCBwYWlyLgotCQkJCQkJICovCi0JCQkJCQlpZiAoc3BhY2UgPCAyKSB7Ci0JCQkJCQkJbm9fc3BhY2VfbGVmdCA9IDE7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQl0dHlfcHV0X2NoYXIodHR5LCAnXicpOwotCQkJCQkJdHR5X3B1dF9jaGFyKHR0eSwgb3AgXiAwMTAwKTsKLQkJCQkJCXR0eS0+Y29sdW1uICs9IDI7Ci0JCQkJCQlzcGFjZSAtPSAyOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaWYgKCFzcGFjZSkgewotCQkJCQkJCW5vX3NwYWNlX2xlZnQgPSAxOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQkJdHR5X3B1dF9jaGFyKHR0eSwgb3ApOwotCQkJCQkJc3BhY2UtLTsKLQkJCQkJfQotCQkJCX0KIAkJCQkvKgotCQkJCSAqIElmIGFib3ZlIGZhbGxzIHRocm91Z2gsIHRoaXMgd2FzIGFuCi0JCQkJICogdW5kZWZpbmVkIG9wLgorCQkJCSAqIElmIHRoZSBvcCBpcyBub3QgYSBzcGVjaWFsIGJ5dGUgY29kZSwKKwkJCQkgKiBpdCBpcyBhIGN0cmwgY2hhciB0YWdnZWQgdG8gYmUgZWNob2VkCisJCQkJICogYXMgIl5YIiAod2hlcmUgWCBpcyB0aGUgbGV0dGVyCisJCQkJICogcmVwcmVzZW50aW5nIHRoZSBjb250cm9sIGNoYXIpLgorCQkJCSAqIE5vdGUgdGhhdCB3ZSBtdXN0IGVuc3VyZSB0aGVyZSBpcworCQkJCSAqIGVub3VnaCBzcGFjZSBmb3IgdGhlIHdob2xlIGN0cmwgcGFpci4KKwkJCQkgKgogCQkJCSAqLworCQkJCWlmIChzcGFjZSA8IDIpIHsKKwkJCQkJbm9fc3BhY2VfbGVmdCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl0dHlfcHV0X2NoYXIodHR5LCAnXicpOworCQkJCXR0eV9wdXRfY2hhcih0dHksIG9wIF4gMDEwMCk7CisJCQkJdHR5LT5jb2x1bW4gKz0gMjsKKwkJCQlzcGFjZSAtPSAyOwogCQkJCWNwICs9IDI7CiAJCQkJbnIgLT0gMjsKIAkJCX0KQEAgLTYwNSwxMiArNjAwLDE4IEBACiAJCQlpZiAobm9fc3BhY2VfbGVmdCkKIAkJCQlicmVhazsKIAkJfSBlbHNlIHsKLQkJCWludCByZXR2YWw7Ci0KLQkJCXJldHZhbCA9IGRvX291dHB1dF9jaGFyKGMsIHR0eSwgc3BhY2UpOwotCQkJaWYgKHJldHZhbCA8IDApCi0JCQkJYnJlYWs7Ci0JCQlzcGFjZSAtPSByZXR2YWw7CisJCQlpZiAoT19PUE9TVCh0dHkpICYmCisJCQkgICAgISh0ZXN0X2JpdChUVFlfSFdfQ09PS19PVVQsICZ0dHktPmZsYWdzKSkpIHsKKwkJCQlpbnQgcmV0dmFsID0gZG9fb3V0cHV0X2NoYXIoYywgdHR5LCBzcGFjZSk7CisJCQkJaWYgKHJldHZhbCA8IDApCisJCQkJCWJyZWFrOworCQkJCXNwYWNlIC09IHJldHZhbDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFzcGFjZSkKKwkJCQkJYnJlYWs7CisJCQkJdHR5X3B1dF9jaGFyKHR0eSwgYyk7CisJCQkJc3BhY2UgLT0gMTsKKwkJCX0KIAkJCWNwICs9IDE7CiAJCQluciAtPSAxOwogCQl9CkBAIC03OTgsOCArNzk5LDggQEAKICAqCUVjaG8gdXNlciBpbnB1dCBiYWNrIG9udG8gdGhlIHNjcmVlbi4gVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4KICAqCUxfRUNITyh0dHkpIGlzIHRydWUuIENhbGxlZCBmcm9tIHRoZSBkcml2ZXIgcmVjZWl2ZV9idWYgcGF0aC4KICAqCi0gKglUaGlzIHZhcmlhbnQgdGFncyBjb250cm9sIGNoYXJhY3RlcnMgdG8gYmUgcG9zc2libHkgZWNob2VkIGFzCi0gKglhcyAiXlgiICh3aGVyZSBYIGlzIHRoZSBsZXR0ZXIgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sIGNoYXIpLgorICoJVGhpcyB2YXJpYW50IHRhZ3MgY29udHJvbCBjaGFyYWN0ZXJzIHRvIGJlIGVjaG9lZCBhcyAiXlgiCisgKgkod2hlcmUgWCBpcyB0aGUgbGV0dGVyIHJlcHJlc2VudGluZyB0aGUgY29udHJvbCBjaGFyKS4KICAqCiAgKglMb2NraW5nOiBlY2hvX2xvY2sgdG8gcHJvdGVjdCB0aGUgZWNobyBidWZmZXIKICAqLwpAQCAtODEyLDcgKzgxMyw3IEBACiAJCWFkZF9lY2hvX2J5dGUoRUNIT19PUF9TVEFSVCwgdHR5KTsKIAkJYWRkX2VjaG9fYnl0ZShFQ0hPX09QX1NUQVJULCB0dHkpOwogCX0gZWxzZSB7Ci0JCWlmIChpc2NudHJsKGMpICYmIGMgIT0gJ1x0JykKKwkJaWYgKExfRUNIT0NUTCh0dHkpICYmIGlzY250cmwoYykgJiYgYyAhPSAnXHQnKQogCQkJYWRkX2VjaG9fYnl0ZShFQ0hPX09QX1NUQVJULCB0dHkpOwogCQlhZGRfZWNob19ieXRlKGMsIHR0eSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKaW5kZXggODgxOTM0Yy4uYzI1MGEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCkBAIC0xMDE3LDcgKzEwMTcsNyBAQAogCQl9CiAJfQogCi0JaWYgKGRldi0+cHJvdG8gPT0gMCAmJiBjb3VudCA+IGRldi0+cmxlbiAtIGRldi0+cnBvcykgeworCWlmIChkZXYtPnByb3RvID09IDAgJiYgY291bnQgPiBkZXYtPnJsZW4gLSBkZXYtPnJwb3MgJiYgaSkgewogCQlERUJVR1AoNCwgZGV2LCAiVD0wIGFuZCBjb3VudCA+IGJ1ZmZlclxuIik7CiAJCWRldi0+cmJ1ZltpXSA9IGRldi0+cmJ1ZltpIC0gMV07CiAJCWRldi0+cmJ1ZltpIC0gMV0gPSBkZXYtPnByb2NieXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IDQwMjY4ZGIuLjY0YWNkMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNkZXYgcmF3X2NkZXY7CiAKLXN0YXRpYyBjaGFyICpyYXdfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKnJhd19kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInJhdy8lcyIsIGRldl9uYW1lKGRldikpOwogfQpAQCAtMjg5LDcgKzI4OSw3IEBACiAJCXJldCA9IFBUUl9FUlIocmF3X2NsYXNzKTsKIAkJZ290byBlcnJvcl9yZWdpb247CiAJfQotCXJhd19jbGFzcy0+bm9kZW5hbWUgPSByYXdfbm9kZW5hbWU7CisJcmF3X2NsYXNzLT5kZXZub2RlID0gcmF3X2Rldm5vZGU7CiAJZGV2aWNlX2NyZWF0ZShyYXdfY2xhc3MsIE5VTEwsIE1LREVWKFJBV19NQUpPUiwgMCksIE5VTEwsICJyYXdjdGwiKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguYyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKaW5kZXggMTcxNzExYS4uM2NmYTIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguYworKysgYi9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCkBAIC0zNDMsNyArMzQzLDcgQEAKIAlpZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogI2lmZGVmIFJDX1JFUE9SVF9PVkVSUlVOCiAJc3RhdHVzID0gcmNfaW4oYnAsIENEMTgwX1JDU1IpOwpAQCAtMzU1LDE4ICszNTUsMTggQEAKICNlbmRpZgogCWNoID0gcmNfaW4oYnAsIENEMTgwX1JEUik7CiAJaWYgKCFzdGF0dXMpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJaWYgKHN0YXR1cyAmIFJDU1JfVE9VVCkgIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicmMlZDogcG9ydCAlZDogUmVjZWl2ZXIgdGltZW91dC4gIgogCQkJCSAgICAiSGFyZHdhcmUgcHJvYmxlbXMgP1xuIiwKIAkJICAgICAgIGJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIFJDU1JfQlJFQUspICB7CiAJCXByaW50ayhLRVJOX0lORk8gInJjJWQ6IHBvcnQgJWQ6IEhhbmRsaW5nIGJyZWFrLi4uXG4iLAogCQkgICAgICAgYm9hcmRfTm8oYnApLCBwb3J0X05vKHBvcnQpKTsKIAkJZmxhZyA9IFRUWV9CUkVBSzsKLQkJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TQUspCisJCWlmICh0dHkgJiYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TQUspKQogCQkJZG9fU0FLKHR0eSk7CiAKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIFJDU1JfUEUpCkBAIC0zODAsOCArMzgwLDEyIEBACiAJZWxzZQogCQlmbGFnID0gVFRZX05PUk1BTDsKIAotCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsYWcpOwotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJaWYgKHR0eSkgeworCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CitvdXQ6CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJjX3JlY2VpdmUoc3RydWN0IHJpc2NvbV9ib2FyZCBjb25zdCAqYnApCkBAIC0zOTQsNyArMzk4LDcgQEAKIAlpZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCWNvdW50ID0gcmNfaW4oYnAsIENEMTgwX1JEQ1IpOwogCkBAIC00MDMsMTUgKzQwNywxNCBAQAogI2VuZGlmCiAKIAl3aGlsZSAoY291bnQtLSkgIHsKLQkJaWYgKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgMSkgPT0gMCkgIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInJjJWQ6IHBvcnQgJWQ6IFdvcmtpbmcgYXJvdW5kICIKLQkJCQkJICAgICJmbGlwIGJ1ZmZlciBvdmVyZmxvdy5cbiIsCi0JCQkgICAgICAgYm9hcmRfTm8oYnApLCBwb3J0X05vKHBvcnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgcmNfaW4oYnAsIENEMTgwX1JEUiksIFRUWV9OT1JNQUwpOworCQl1OCBjaCA9IHJjX2luKGJwLCBDRDE4MF9SRFIpOworCQlpZiAodHR5KQorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgVFRZX05PUk1BTCk7CiAJfQotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJaWYgKHR0eSkgeworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJjX3RyYW5zbWl0KHN0cnVjdCByaXNjb21fYm9hcmQgY29uc3QgKmJwKQpAQCAtNDI0LDIyICs0MjcsMjIgQEAKIAlpZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCWlmIChwb3J0LT5JRVIgJiBJRVJfVFhFTVBUWSkgewogCQkvKiBGSUZPIGRyYWluZWQgKi8KIAkJcmNfb3V0KGJwLCBDRDE4MF9DQVIsIHBvcnRfTm8ocG9ydCkpOwogCQlwb3J0LT5JRVIgJj0gfklFUl9UWEVNUFRZOwogCQlyY19vdXQoYnAsIENEMTgwX0lFUiwgcG9ydC0+SUVSKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoKHBvcnQtPnhtaXRfY250IDw9IDAgJiYgIXBvcnQtPmJyZWFrX2xlbmd0aCkKLQkgICAgfHwgdHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCkgIHsKKwkgICAgfHwgKHR0eSAmJiAodHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCkpKSAgewogCQlyY19vdXQoYnAsIENEMTgwX0NBUiwgcG9ydF9Obyhwb3J0KSk7CiAJCXBvcnQtPklFUiAmPSB+SUVSX1RYUkRZOwogCQlyY19vdXQoYnAsIENEMTgwX0lFUiwgcG9ydC0+SUVSKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocG9ydC0+YnJlYWtfbGVuZ3RoKSAgewpAQCAtNDY0LDcgKzQ2Nyw3IEBACiAJCQlyY19vdXQoYnAsIENEMTgwX0NDUiwgQ0NSX0NPUkNIRzIpOwogCQkJcG9ydC0+YnJlYWtfbGVuZ3RoID0gMDsKIAkJfQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAogCWNvdW50ID0gQ0QxODBfTkZJRk87CkBAIC00ODAsOCArNDgzLDEwIEBACiAJCXBvcnQtPklFUiAmPSB+SUVSX1RYUkRZOwogCQlyY19vdXQoYnAsIENEMTgwX0lFUiwgcG9ydC0+SUVSKTsKIAl9Ci0JaWYgKHBvcnQtPnhtaXRfY250IDw9IHBvcnQtPndha2V1cF9jaGFycykKKwlpZiAodHR5ICYmIHBvcnQtPnhtaXRfY250IDw9IHBvcnQtPndha2V1cF9jaGFycykKIAkJdHR5X3dha2V1cCh0dHkpOworb3V0OgorCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZCByY19jaGVja19tb2RlbShzdHJ1Y3QgcmlzY29tX2JvYXJkIGNvbnN0ICpicCkKQEAgLTQ5NCwzNyArNDk5LDQzIEBACiAJaWYgKHBvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAKIAltY3IgPSByY19pbihicCwgQ0QxODBfTUNSKTsKIAlpZiAobWNyICYgTUNSX0NEQ0hHKSB7CiAJCWlmIChyY19pbihicCwgQ0QxODBfTVNWUikgJiBNU1ZSX0NEKQogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7Ci0JCWVsc2UKKwkJZWxzZSBpZiAodHR5KQogCQkJdHR5X2hhbmd1cCh0dHkpOwogCX0KIAogI2lmZGVmIFJJU0NPTV9CUkFJTl9EQU1BR0VEX0NUUwogCWlmIChtY3IgJiBNQ1JfQ1RTQ0hHKSAgewogCQlpZiAocmNfaW4oYnAsIENEMTgwX01TVlIpICYgTVNWUl9DVFMpICB7Ci0JCQl0dHktPmh3X3N0b3BwZWQgPSAwOwogCQkJcG9ydC0+SUVSIHw9IElFUl9UWFJEWTsKLQkJCWlmIChwb3J0LT54bWl0X2NudCA8PSBwb3J0LT53YWtldXBfY2hhcnMpCi0JCQkJdHR5X3dha2V1cCh0dHkpOworCQkJaWYgKHR0eSkgeworCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJaWYgKHBvcnQtPnhtaXRfY250IDw9IHBvcnQtPndha2V1cF9jaGFycykKKwkJCQkJdHR5X3dha2V1cCh0dHkpOworCQkJfQogCQl9IGVsc2UgIHsKLQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQlpZiAodHR5KQorCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQlwb3J0LT5JRVIgJj0gfklFUl9UWFJEWTsKIAkJfQogCQlyY19vdXQoYnAsIENEMTgwX0lFUiwgcG9ydC0+SUVSKTsKIAl9CiAJaWYgKG1jciAmIE1DUl9EU1JDSEcpICB7CiAJCWlmIChyY19pbihicCwgQ0QxODBfTVNWUikgJiBNU1ZSX0RTUikgIHsKLQkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCQlwb3J0LT5JRVIgfD0gSUVSX1RYUkRZOwotCQkJaWYgKHBvcnQtPnhtaXRfY250IDw9IHBvcnQtPndha2V1cF9jaGFycykKLQkJCQl0dHlfd2FrZXVwKHR0eSk7CisJCQlpZiAodHR5KSB7CisJCQkJdHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQlpZiAocG9ydC0+eG1pdF9jbnQgPD0gcG9ydC0+d2FrZXVwX2NoYXJzKQorCQkJCQl0dHlfd2FrZXVwKHR0eSk7CisJCQl9CiAJCX0gZWxzZSAgewotCQkJdHR5LT5od19zdG9wcGVkID0gMTsKKwkJCWlmICh0dHkpCisJCQkJdHR5LT5od19zdG9wcGVkID0gMTsKIAkJCXBvcnQtPklFUiAmPSB+SUVSX1RYUkRZOwogCQl9CiAJCXJjX291dChicCwgQ0QxODBfSUVSLCBwb3J0LT5JRVIpOwpAQCAtNTMzLDYgKzU0NCw3IEBACiAKIAkvKiBDbGVhciBjaGFuZ2UgYml0cyAqLwogCXJjX291dChicCwgQ0QxODBfTUNSLCAwKTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAogLyogVGhlIG1haW4gaW50ZXJydXB0IHByb2Nlc3Npbmcgcm91dGluZSAqLwpAQCAtNjMyLDkgKzY0NCw5IEBACiAgKiBTZXR0aW5nIHVwIHBvcnQgY2hhcmFjdGVyaXN0aWNzLgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzCiAgKi8KLXN0YXRpYyB2b2lkIHJjX2NoYW5nZV9zcGVlZChzdHJ1Y3QgcmlzY29tX2JvYXJkICpicCwgc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgcmNfY2hhbmdlX3NwZWVkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCByaXNjb21fYm9hcmQgKmJwLAorCQkJCQkJc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBsb25nIGJhdWQ7CiAJbG9uZyB0bXA7CiAJdW5zaWduZWQgY2hhciBjb3IxID0gMCwgY29yMyA9IDA7CkBAIC03ODEsNyArNzkzLDggQEAKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLXN0YXRpYyBpbnQgcmNfc2V0dXBfcG9ydChzdHJ1Y3QgcmlzY29tX2JvYXJkICpicCwgc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0KQorc3RhdGljIGludCByY19zZXR1cF9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCByaXNjb21fYm9hcmQgKmJwLAorCQkJCQkJc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTc5MywxMSArODA2LDExIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAotCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT5wb3J0LnR0eS0+ZmxhZ3MpOworCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAlpZiAocG9ydC0+cG9ydC5jb3VudCA9PSAxKQogCQlicC0+Y291bnQrKzsKIAlwb3J0LT54bWl0X2NudCA9IHBvcnQtPnhtaXRfaGVhZCA9IHBvcnQtPnhtaXRfdGFpbCA9IDA7Ci0JcmNfY2hhbmdlX3NwZWVkKGJwLCBwb3J0KTsKKwlyY19jaGFuZ2Vfc3BlZWQodHR5LCBicCwgcG9ydCk7CiAJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7CkBAIC04OTgsOSArOTExLDkgQEAKIAogCXBvcnQtPnBvcnQuY291bnQrKzsKIAl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKLQlwb3J0LT5wb3J0LnR0eSA9IHR0eTsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCB0dHkpOwogCi0JZXJyb3IgPSByY19zZXR1cF9wb3J0KGJwLCBwb3J0KTsKKwllcnJvciA9IHJjX3NldHVwX3BvcnQodHR5LCBicCwgcG9ydCk7CiAJaWYgKGVycm9yID09IDApCiAJCWVycm9yID0gdHR5X3BvcnRfYmxvY2tfdGlsX3JlYWR5KCZwb3J0LT5wb3J0LCB0dHksIGZpbHApOwogCXJldHVybiBlcnJvcjsKQEAgLTkyMSwyMCArOTM0LDEyIEBACiAJdHR5X3dha2V1cCh0dHkpOwogfQogCi1zdGF0aWMgdm9pZCByY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIHJjX2Nsb3NlX3BvcnQoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQogewotCXN0cnVjdCByaXNjb21fcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHJpc2NvbV9ib2FyZCAqYnA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmlzY29tX3BvcnQgKnJwID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCByaXNjb21fcG9ydCwgcG9ydCk7CisJc3RydWN0IHJpc2NvbV9ib2FyZCAqYnAgPSBwb3J0X0JvYXJkKHJwKTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQlpZiAoIXBvcnQgfHwgcmNfcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAiY2xvc2UiKSkKLQkJcmV0dXJuOwotCi0JYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwotCQotCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydCgmcG9ydC0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKQotCQlyZXR1cm47CiAJCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IHdlIHN0b3AgYWNjZXB0aW5nIGlucHV0LiAgVG8gZG8gdGhpcywgd2UKQEAgLTk0NCwzMSArOTQ5LDM3IEBACiAJICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKLQlwb3J0LT5JRVIgJj0gfklFUl9SWEQ7Ci0JaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewotCQlwb3J0LT5JRVIgJj0gfklFUl9UWFJEWTsKLQkJcG9ydC0+SUVSIHw9IElFUl9UWEVNUFRZOwotCQlyY19vdXQoYnAsIENEMTgwX0NBUiwgcG9ydF9Obyhwb3J0KSk7Ci0JCXJjX291dChicCwgQ0QxODBfSUVSLCBwb3J0LT5JRVIpOworCXJwLT5JRVIgJj0gfklFUl9SWEQ7CisJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwkJcnAtPklFUiAmPSB+SUVSX1RYUkRZOworCQlycC0+SUVSIHw9IElFUl9UWEVNUFRZOworCQlyY19vdXQoYnAsIENEMTgwX0NBUiwgcG9ydF9ObyhycCkpOworCQlyY19vdXQoYnAsIENEMTgwX0lFUiwgcnAtPklFUik7CiAJCS8qCiAJCSAqIEJlZm9yZSB3ZSBkcm9wIERUUiwgbWFrZSBzdXJlIHRoZSBVQVJUIHRyYW5zbWl0dGVyCiAJCSAqIGhhcyBjb21wbGV0ZWx5IGRyYWluZWQ7IHRoaXMgaXMgZXNwZWNpYWxseQogCQkgKiBpbXBvcnRhbnQgaWYgdGhlcmUgaXMgYSB0cmFuc21pdCBGSUZPIQogCQkgKi8KIAkJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKLQkJd2hpbGUgKHBvcnQtPklFUiAmIElFUl9UWEVNUFRZKSB7CisJCXdoaWxlIChycC0+SUVSICYgSUVSX1RYRU1QVFkpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7Ci0JCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKHBvcnQtPnRpbWVvdXQpKTsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MocnAtPnRpbWVvdXQpKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZyaXNjb21fbG9jaywgZmxhZ3MpOwogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCiAJCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmNfc2h1dGRvd25fcG9ydCh0dHksIGJwLCBwb3J0KTsKLQlyY19mbHVzaF9idWZmZXIodHR5KTsKKwlyY19zaHV0ZG93bl9wb3J0KHBvcnQtPnR0eSwgYnAsIHJwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaXNjb21fbG9jaywgZmxhZ3MpOworfQogCi0JdHR5X3BvcnRfY2xvc2VfZW5kKCZwb3J0LT5wb3J0LCB0dHkpOworc3RhdGljIHZvaWQgcmNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghcG9ydCB8fCByY19wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJjbG9zZSIpKQorCQlyZXR1cm47CisJdHR5X3BvcnRfY2xvc2UoJnBvcnQtPnBvcnQsIHR0eSwgZmlscCk7CiB9CiAKIHN0YXRpYyBpbnQgcmNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTExNzAsNyArMTE4MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmNfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCByaXNjb21fcG9ydCAqcG9ydCwKK3N0YXRpYyBpbnQgcmNfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCByaXNjb21fcG9ydCAqcG9ydCwKIAkJCQkgICAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqbmV3aW5mbykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CkBAIC0xMTgwLDE3ICsxMTkxLDYgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgbmV3aW5mbywgc2l6ZW9mKHRtcCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotI2lmIDAKLQlpZiAoKHRtcC5pcnEgIT0gYnAtPmlycSkgfHwKLQkgICAgKHRtcC5wb3J0ICE9IGJwLT5iYXNlKSB8fAotCSAgICAodG1wLnR5cGUgIT0gUE9SVF9DSVJSVVMpIHx8Ci0JICAgICh0bXAuYmF1ZF9iYXNlICE9IChSQ19PU0NGUkVRICsgQ0QxODBfVFBDLzIpIC8gQ0QxODBfVFBDKSB8fAotCSAgICAodG1wLmN1c3RvbV9kaXZpc29yICE9IDApIHx8Ci0JICAgICh0bXAueG1pdF9maWZvX3NpemUgIT0gQ0QxODBfTkZJRk8pIHx8Ci0JICAgICh0bXAuZmxhZ3MgJiB+UklTQ09NX0xFR0FMX0ZMQUdTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLQogCWNoYW5nZV9zcGVlZCA9ICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQogCQkJKHRtcC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSk7CiAKQEAgLTEyMTIsNyArMTIxMiw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7Ci0JCXJjX2NoYW5nZV9zcGVlZChicCwgcG9ydCk7CisJCXJjX2NoYW5nZV9zcGVlZCh0dHksIGJwLCBwb3J0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogCQlicmVhazsKIAljYXNlIFRJT0NTU0VSSUFMOgogCQlsb2NrX2tlcm5lbCgpOwotCQlyZXR2YWwgPSByY19zZXRfc2VyaWFsX2luZm8ocG9ydCwgYXJncCk7CisJCXJldHZhbCA9IHJjX3NldF9zZXJpYWxfaW5mbyh0dHksIHBvcnQsIGFyZ3ApOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMzUwLDIxICsxMzUwLDEyIEBACiBzdGF0aWMgdm9pZCByY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCByaXNjb21fYm9hcmQgKmJwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocmNfcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAicmNfaGFuZ3VwIikpCiAJCXJldHVybjsKIAotCWJwID0gcG9ydF9Cb2FyZChwb3J0KTsKLQotCXJjX3NodXRkb3duX3BvcnQodHR5LCBicCwgcG9ydCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnQubG9jaywgZmxhZ3MpOwotCXBvcnQtPnBvcnQuY291bnQgPSAwOwotCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JcG9ydC0+cG9ydC50dHkgPSBOVUxMOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnQubG9jaywgZmxhZ3MpOworCXJjX3NodXRkb3duX3BvcnQodHR5LCBwb3J0X0JvYXJkKHBvcnQpLCBwb3J0KTsKKwl0dHlfcG9ydF9oYW5ndXAoJnBvcnQtPnBvcnQpOwogfQogCiBzdGF0aWMgdm9pZCByY19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtMTM3Nyw3ICsxMzY4LDcgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7Ci0JcmNfY2hhbmdlX3NwZWVkKHBvcnRfQm9hcmQocG9ydCksIHBvcnQpOworCXJjX2NoYW5nZV9zcGVlZCh0dHksIHBvcnRfQm9hcmQocG9ydCksIHBvcnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKQEAgLTE0MTAsNiArMTQwMSw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyByaXNjb21fcG9ydF9vcHMgPSB7CiAJLmNhcnJpZXJfcmFpc2VkID0gY2Fycmllcl9yYWlzZWQsCisJLnNodXRkb3duID0gcmNfY2xvc2VfcG9ydCwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5c3JxLmMgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwppbmRleCA1MGVlY2ZlLi40NDIwM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CkBAIC0yNTIsNyArMjUyLDcgQEAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwogCWlmIChyZWdzKQogCQlzaG93X3JlZ3MocmVncyk7Ci0JcGVyZl9jb3VudGVyX3ByaW50X2RlYnVnKCk7CisJcGVyZl9ldmVudF9wcmludF9kZWJ1ZygpOwogfQogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfc2hvd3JlZ3Nfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfc2hvd3JlZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCBiMDYwM2IyLi40NWQ1ODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCiAJY21kLmhlYWRlci5pbiA9IHBjcnJlYWRfaGVhZGVyOwogCWNtZC5wYXJhbXMucGNycmVhZF9pbi5wY3JfaWR4ID0gY3B1X3RvX2JlMzIocGNyX2lkeCk7Ci0JQlVJTERfQlVHX09OKGNtZC5oZWFkZXIuaW4ubGVuZ3RoID4gUkVBRF9QQ1JfUkVTVUxUX1NJWkUpOworCUJVR19PTihjbWQuaGVhZGVyLmluLmxlbmd0aCA+IFJFQURfUENSX1JFU1VMVF9TSVpFKTsKIAlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBjbWQuaGVhZGVyLmluLmxlbmd0aCwKIAkJCSAgImF0dGVtcHRpbmcgdG8gcmVhZCBhIHBjciB2YWx1ZSIpOwogCkBAIC03NDIsNyArNzQyLDcgQEAKICAqIHRoZSBtb2R1bGUgdXNhZ2UgY291bnQuCiAgKi8KICNkZWZpbmUgVFBNX09SRF9QQ1JfRVhURU5EIGNwdV90b19iZTMyKDIwKQotI2RlZmluZSBFWFRFTkRfUENSX1NJWkUgMzQKKyNkZWZpbmUgRVhURU5EX1BDUl9SRVNVTFRfU0laRSAzNAogc3RhdGljIHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHBjcmV4dGVuZF9oZWFkZXIgPSB7CiAJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCiAJLmxlbmd0aCA9IGNwdV90b19iZTMyKDM0KSwKQEAgLTc2MCwxMCArNzYwLDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljbWQuaGVhZGVyLmluID0gcGNyZXh0ZW5kX2hlYWRlcjsKLQlCVUlMRF9CVUdfT04oYmUzMl90b19jcHUoY21kLmhlYWRlci5pbi5sZW5ndGgpID4gRVhURU5EX1BDUl9TSVpFKTsKIAljbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5wY3JfaWR4ID0gY3B1X3RvX2JlMzIocGNyX2lkeCk7CiAJbWVtY3B5KGNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLmhhc2gsIGhhc2gsIFRQTV9ESUdFU1RfU0laRSk7Ci0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgRVhURU5EX1BDUl9SRVNVTFRfU0laRSwKIAkJCSAgImF0dGVtcHRpbmcgZXh0ZW5kIGEgUENSIHZhbHVlIik7CiAKIAltb2R1bGVfcHV0KGNoaXAtPmRldi0+ZHJpdmVyLT5vd25lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9iaW9zLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9iaW9zLmMKaW5kZXggMGMyZjU1YS4uYmYyMTcwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYmlvcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2Jpb3MuYwpAQCAtMzQzLDE0ICszNDMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB0cG1fYXNjaWlfYl9tZWFzdXJtZW50c19zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRwbV9hc2NpaV9iX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSB0cG1fYmlvc19tZWFzdXJlbWVudHNfc3RhcnQsCiAJLm5leHQgPSB0cG1fYmlvc19tZWFzdXJlbWVudHNfbmV4dCwKIAkuc3RvcCA9IHRwbV9iaW9zX21lYXN1cmVtZW50c19zdG9wLAogCS5zaG93ID0gdHBtX2FzY2lpX2Jpb3NfbWVhc3VyZW1lbnRzX3Nob3csCiB9OwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRwbV9iaW5hcnlfYl9tZWFzdXJtZW50c19zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRwbV9iaW5hcnlfYl9tZWFzdXJtZW50c19zZXFvcHMgPSB7CiAJLnN0YXJ0ID0gdHBtX2Jpb3NfbWVhc3VyZW1lbnRzX3N0YXJ0LAogCS5uZXh0ID0gdHBtX2Jpb3NfbWVhc3VyZW1lbnRzX25leHQsCiAJLnN0b3AgPSB0cG1fYmlvc19tZWFzdXJlbWVudHNfc3RvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBhM2FmYTBjLi5lYTE4YTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0xMTg0LDYgKzExODQsNyBAQAogCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUodHR5LT50ZXJtaW9zKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9pbml0X3Rlcm1pb3MpOwogCiAvKioKICAqCXR0eV9kcml2ZXJfaW5zdGFsbF90dHkoKSAtIGluc3RhbGwgYSB0dHkgZW50cnkgaW4gdGhlIGRyaXZlcgpAQCAtMTM4NiwxMCArMTM4NywxNCBAQAogICoJCXR0eV9tdXRleCAtIHNvbWV0aW1lcyBvbmx5CiAgKgkJdGFrZXMgdGhlIGZpbGUgbGlzdCBsb2NrIGludGVybmFsbHkgd2hlbiB3b3JraW5nIG9uIHRoZSBsaXN0CiAgKglvZiB0dHlzIHRoYXQgdGhlIGRyaXZlciBrZWVwcy4KKyAqCisgKglUaGlzIG1ldGhvZCBnZXRzIGNhbGxlZCBmcm9tIGEgd29yayBxdWV1ZSBzbyB0aGF0IHRoZSBkcml2ZXIgcHJpdmF0ZQorICoJc2h1dGRvd24gb3BzIGNhbiBzbGVlcCAobmVlZGVkIGZvciBVU0IgYXQgbGVhc3QpCiAgKi8KLXN0YXRpYyB2b2lkIHJlbGVhc2Vfb25lX3R0eShzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIHJlbGVhc2Vfb25lX3R0eShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgdHR5X3N0cnVjdCwga3JlZik7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHR5X3N0cnVjdCwgaGFuZ3VwX3dvcmspOwogCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIgPSB0dHktPmRyaXZlcjsKIAogCWlmICh0dHktPm9wcy0+c2h1dGRvd24pCkBAIC0xNDA3LDYgKzE0MTIsMTUgQEAKIAlmcmVlX3R0eV9zdHJ1Y3QodHR5KTsKIH0KIAorc3RhdGljIHZvaWQgcXVldWVfcmVsZWFzZV9vbmVfdHR5KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHR0eV9zdHJ1Y3QsIGtyZWYpOworCS8qIFRoZSBoYW5ndXAgcXVldWUgaXMgbm93IGZyZWUgc28gd2UgY2FuIHJldXNlIGl0IHJhdGhlciB0aGFuCisJICAgd2FzdGUgYSBjaHVuayBvZiBtZW1vcnkgZm9yIGVhY2ggcG9ydCAqLworCUlOSVRfV09SSygmdHR5LT5oYW5ndXBfd29yaywgcmVsZWFzZV9vbmVfdHR5KTsKKwlzY2hlZHVsZV93b3JrKCZ0dHktPmhhbmd1cF93b3JrKTsKK30KKwogLyoqCiAgKgl0dHlfa3JlZl9wdXQJCS0JcmVsZWFzZSBhIHR0eSBrcmVmCiAgKglAdHR5OiB0dHkgZGV2aWNlCkBAIC0xNDE4LDcgKzE0MzIsNyBAQAogdm9pZCB0dHlfa3JlZl9wdXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAodHR5KQotCQlrcmVmX3B1dCgmdHR5LT5rcmVmLCByZWxlYXNlX29uZV90dHkpOworCQlrcmVmX3B1dCgmdHR5LT5rcmVmLCBxdWV1ZV9yZWxlYXNlX29uZV90dHkpOwogfQogRVhQT1JUX1NZTUJPTCh0dHlfa3JlZl9wdXQpOwogCkBAIC0yMDg1LDcgKzIwOTksNyBAQAogICoJdGhlIGdlbmVyaWMgZnVuY3Rpb25hbGl0eSBleGlzdGVkLiBUaGlzIHBpZWNlIG9mIGhpc3RvcnkgaXMgcHJlc2VydmVkCiAgKglpbiB0aGUgZXhwZWN0ZWQgdHR5IEFQSSBvZiBwb3NpeCBPUydzLgogICoKLSAqCUxvY2tpbmc6IG5vbmUsIHRoZSBvcGVuIGZsZSBoYW5kbGUgZW5zdXJlcyBpdCB3b24ndCBnbyBhd2F5LgorICoJTG9ja2luZzogbm9uZSwgdGhlIG9wZW4gZmlsZSBoYW5kbGUgZW5zdXJlcyBpdCB3b24ndCBnbyBhd2F5LgogICovCiAKIHN0YXRpYyBpbnQgZmlvbmJpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IF9fdXNlciAqcCkKQEAgLTMwNTYsMTEgKzMwNzAsMjIgQEAKIAl9CiB9CiAKK3N0YXRpYyBjaGFyICp0dHlfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKK3sKKwlpZiAoIW1vZGUpCisJCXJldHVybiBOVUxMOworCWlmIChkZXYtPmRldnQgPT0gTUtERVYoVFRZQVVYX01BSk9SLCAwKSB8fAorCSAgICBkZXYtPmRldnQgPT0gTUtERVYoVFRZQVVYX01BSk9SLCAyKSkKKwkJKm1vZGUgPSAwNjY2OworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW50IF9faW5pdCB0dHlfY2xhc3NfaW5pdCh2b2lkKQogewogCXR0eV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInR0eSIpOwogCWlmIChJU19FUlIodHR5X2NsYXNzKSkKIAkJcmV0dXJuIFBUUl9FUlIodHR5X2NsYXNzKTsKKwl0dHlfY2xhc3MtPmRldm5vZGUgPSB0dHlfZGV2bm9kZTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCmluZGV4IGFkNmJhNGUuLjhlNjdkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKQEAgLTM5Myw5ICszOTMsNyBAQAogCQl0ZXJtaW9zLT5jX2NmbGFnIHw9IChCT1RIRVIgPDwgSUJTSElGVCk7CiAjZWxzZQogCWlmIChpZm91bmQgPT0gLTEgfHwgb2ZvdW5kID09IC0xKSB7Ci0JCXN0YXRpYyBpbnQgd2FybmVkOwotCQlpZiAoIXdhcm5lZCsrKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidHR5OiBVbmFibGUgdG8gcmV0dXJuIGNvcnJlY3QgIgorCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgInR0eTogVW5hYmxlIHRvIHJldHVybiBjb3JyZWN0ICIKIAkJCSAgInNwZWVkIGRhdGEgYXMgeW91ciBhcmNoaXRlY3R1cmUgbmVlZHMgdXBkYXRpbmcuXG4iKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwppbmRleCBlNDhhZjlmLi5hYWZkYmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCkBAIC0xNDUsNDggKzE0NSwzMyBAQAogfQogRVhQT1JUX1NZTUJPTCh0dHlfdW5yZWdpc3Rlcl9sZGlzYyk7CiAKLQotLyoqCi0gKgl0dHlfbGRpc2NfdHJ5X2dldAktCXRyeSBhbmQgcmVmZXJlbmNlIGFuIGxkaXNjCi0gKglAZGlzYzogbGRpc2MgbnVtYmVyCi0gKgotICoJQXR0ZW1wdCB0byBvcGVuIGFuZCBsb2NrIGEgbGluZSBkaXNjaXBsaW5lIGludG8gcGxhY2UuIFJldHVybgotICoJdGhlIGxpbmUgZGlzY2lwbGluZSByZWZjb3VudGVkIG9yIGFuIGVycm9yLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfdHJ5X2dldChpbnQgZGlzYykKK3N0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqZ2V0X2xkb3BzKGludCBkaXNjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHR0eV9sZGlzYyAqbGQ7Ci0Jc3RydWN0IHR0eV9sZGlzY19vcHMgKmxkb3BzOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JbGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHR5X2xkaXNjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGxkID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXN0cnVjdCB0dHlfbGRpc2Nfb3BzICpsZG9wcywgKnJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCWxkLT5vcHMgPSBOVUxMOworCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJbGRvcHMgPSB0dHlfbGRpc2NzW2Rpc2NdOwotCS8qIENoZWNrIHRoZSBlbnRyeSBpcyBkZWZpbmVkICovCiAJaWYgKGxkb3BzKSB7Ci0JCS8qIElmIHRoZSBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQgd2UgY2FuJ3QgdXNlIGl0ICovCi0JCWlmICghdHJ5X21vZHVsZV9nZXQobGRvcHMtPm93bmVyKSkKLQkJCWVyciA9IC1FQUdBSU47Ci0JCWVsc2UgewotCQkJLyogbG9jayBpdCAqLworCQlyZXQgPSBFUlJfUFRSKC1FQUdBSU4pOworCQlpZiAodHJ5X21vZHVsZV9nZXQobGRvcHMtPm93bmVyKSkgewogCQkJbGRvcHMtPnJlZmNvdW50Kys7Ci0JCQlsZC0+b3BzID0gbGRvcHM7Ci0JCQlhdG9taWNfc2V0KCZsZC0+dXNlcnMsIDEpOwotCQkJZXJyID0gMDsKKwkJCXJldCA9IGxkb3BzOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci0JaWYgKGVycikgewotCQlrZnJlZShsZCk7Ci0JCXJldHVybiBFUlJfUFRSKGVycik7Ci0JfQotCXJldHVybiBsZDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwdXRfbGRvcHMoc3RydWN0IHR0eV9sZGlzY19vcHMgKmxkb3BzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwlsZG9wcy0+cmVmY291bnQtLTsKKwltb2R1bGVfcHV0KGxkb3BzLT5vd25lcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0yMDUsMTQgKzE5MCwzMSBAQAogc3RhdGljIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19nZXQoaW50IGRpc2MpCiB7CiAJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJc3RydWN0IHR0eV9sZGlzY19vcHMgKmxkb3BzOwogCiAJaWYgKGRpc2MgPCBOX1RUWSB8fCBkaXNjID49IE5SX0xESVNDUykKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JbGQgPSB0dHlfbGRpc2NfdHJ5X2dldChkaXNjKTsKLQlpZiAoSVNfRVJSKGxkKSkgeworCisJLyoKKwkgKiBHZXQgdGhlIGxkaXNjIG9wcyAtIHdlIG1heSBuZWVkIHRvIHJlcXVlc3QgdGhlbSB0byBiZSBsb2FkZWQKKwkgKiBkeW5hbWljYWxseSBhbmQgdHJ5IGFnYWluLgorCSAqLworCWxkb3BzID0gZ2V0X2xkb3BzKGRpc2MpOworCWlmIChJU19FUlIobGRvcHMpKSB7CiAJCXJlcXVlc3RfbW9kdWxlKCJ0dHktbGRpc2MtJWQiLCBkaXNjKTsKLQkJbGQgPSB0dHlfbGRpc2NfdHJ5X2dldChkaXNjKTsKKwkJbGRvcHMgPSBnZXRfbGRvcHMoZGlzYyk7CisJCWlmIChJU19FUlIobGRvcHMpKQorCQkJcmV0dXJuIEVSUl9DQVNUKGxkb3BzKTsKIAl9CisKKwlsZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dHlfbGRpc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAobGQgPT0gTlVMTCkgeworCQlwdXRfbGRvcHMobGRvcHMpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlsZC0+b3BzID0gbGRvcHM7CisJYXRvbWljX3NldCgmbGQtPnVzZXJzLCAxKTsKIAlyZXR1cm4gbGQ7CiB9CiAKQEAgLTIzNCwxMyArMjM2LDEzIEBACiBzdGF0aWMgaW50IHR0eV9sZGlzY3Nfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWludCBpID0gKihsb2ZmX3QgKil2OwotCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCXN0cnVjdCB0dHlfbGRpc2Nfb3BzICpsZG9wczsKIAotCWxkID0gdHR5X2xkaXNjX3RyeV9nZXQoaSk7Ci0JaWYgKElTX0VSUihsZCkpCisJbGRvcHMgPSBnZXRfbGRvcHMoaSk7CisJaWYgKElTX0VSUihsZG9wcykpCiAJCXJldHVybiAwOwotCXNlcV9wcmludGYobSwgIiUtMTBzICUyZFxuIiwgbGQtPm9wcy0+bmFtZSA/IGxkLT5vcHMtPm5hbWUgOiAiPz8/IiwgaSk7Ci0JcHV0X2xkaXNjKGxkKTsKKwlzZXFfcHJpbnRmKG0sICIlLTEwcyAlMmRcbiIsIGxkb3BzLT5uYW1lID8gbGRvcHMtPm5hbWUgOiAiPz8/IiwgaSk7CisJcHV0X2xkb3BzKGxkb3BzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9wb3J0LmMgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwppbmRleCA5NzY5YjExLi5hNGJiYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwpAQCAtMjMsNiArMjMsNyBAQAogCW1lbXNldChwb3J0LCAwLCBzaXplb2YoKnBvcnQpKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5vcGVuX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPmNsb3NlX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPmRlbHRhX21zcl93YWl0KTsKIAltdXRleF9pbml0KCZwb3J0LT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCXBvcnQtPmNsb3NlX2RlbGF5ID0gKDUwICogSFopIC8gMTAwOwpAQCAtOTYsNiArOTcsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3BvcnRfdHR5X3NldCk7CiAKK3N0YXRpYyB2b2lkIHR0eV9wb3J0X3NodXRkb3duKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+b3BzLT5zaHV0ZG93biAmJgorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+ZmxhZ3MpKQorCQkJcG9ydC0+b3BzLT5zaHV0ZG93bihwb3J0KTsKKworfQorCiAvKioKICAqCXR0eV9wb3J0X2hhbmd1cAkJLQloYW5ndXAgaGVscGVyCiAgKglAcG9ydDogdHR5IHBvcnQKQEAgLTExNiw2ICsxMjUsOCBAQAogCXBvcnQtPnR0eSA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+b3Blbl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmRlbHRhX21zcl93YWl0KTsKKwl0dHlfcG9ydF9zaHV0ZG93bihwb3J0KTsKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3BvcnRfaGFuZ3VwKTsKIApAQCAtMjk2LDE1ICszMDcsMTcgQEAKIAogCWlmIChwb3J0LT5jb3VudCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJCWlmIChwb3J0LT5vcHMtPmRyb3ApCisJCQlwb3J0LT5vcHMtPmRyb3AocG9ydCk7CiAJCXJldHVybiAwOwogCX0KLQlwb3J0LT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOworCXNldF9iaXQoQVNZTkNCX0NMT1NJTkcsICZwb3J0LT5mbGFncyk7CiAJdHR5LT5jbG9zaW5nID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJLyogRG9uJ3QgYmxvY2sgb24gYSBzdGFsbGVkIHBvcnQsIGp1c3QgcHVsbCB0aGUgY2hhaW4gKi8KIAlpZiAodHR5LT5mbG93X3N0b3BwZWQpCiAJCXR0eV9kcml2ZXJfZmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQgJiYKKwlpZiAodGVzdF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+ZmxhZ3MpICYmCiAJCQlwb3J0LT5jbG9zaW5nX3dhaXQgIT0gQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUpCiAJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBwb3J0LT5jbG9zaW5nX3dhaXQpOwogCWlmIChwb3J0LT5kcmFpbl9kZWxheSkgewpAQCAtMzE4LDYgKzMzMSw5IEBACiAJCQl0aW1lb3V0ID0gMiAqIEhaOwogCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7CiAJfQorCS8qIERvbid0IGNhbGwgcG9ydC0+ZHJvcCBmb3IgdGhlIGxhc3QgcmVmZXJlbmNlLiBDYWxsZXJzIHdpbGwgd2FudAorCSAgIHRvIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSBpbiAtPnNodXRkb3duKCkgb3IgdGhlIHR0eQorCSAgIHNodXRkb3duIHBhdGggKi8KIAlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3BvcnRfY2xvc2Vfc3RhcnQpOwpAQCAtMzQ4LDMgKzM2NCwxNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3BvcnRfY2xvc2VfZW5kKTsKKwordm9pZCB0dHlfcG9ydF9jbG9zZShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCQkJc3RydWN0IGZpbGUgKmZpbHApCit7CisJaWYgKHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KHBvcnQsIHR0eSwgZmlscCkgPT0gMCkKKwkJcmV0dXJuOworCXR0eV9wb3J0X3NodXRkb3duKHBvcnQpOworCXR0eV9wb3J0X2Nsb3NlX2VuZChwb3J0LCB0dHkpOworCXR0eV9wb3J0X3R0eV9zZXQocG9ydCwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9wb3J0X2Nsb3NlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggYzc0ZGFjZi4uMGQzMjhiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CiAjaW5jbHVkZSAiaHZjX2NvbnNvbGUuaCIKIApAQCAtNjUsNyArNjYsNyBAQAogCiAJLyogYWRkX2J1ZiB3YW50cyBhIHRva2VuIHRvIGlkZW50aWZ5IHRoaXMgYnVmZmVyOiB3ZSBoYW5kIGl0IGFueQogCSAqIG5vbi1OVUxMIHBvaW50ZXIsIHNpbmNlIHRoZXJlJ3Mgb25seSBldmVyIG9uZSBidWZmZXIuICovCi0JaWYgKG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsICh2b2lkICopMSkgPT0gMCkgeworCWlmIChvdXRfdnEtPnZxX29wcy0+YWRkX2J1ZihvdXRfdnEsIHNnLCAxLCAwLCAodm9pZCAqKTEpID49IDApIHsKIAkJLyogVGVsbCBIb3N0IHRvIGdvISAqLwogCQlvdXRfdnEtPnZxX29wcy0+a2ljayhvdXRfdnEpOwogCQkvKiBDaGlsbCBvdXQgdW50aWwgaXQncyBkb25lIHdpdGggdGhlIGJ1ZmZlci4gKi8KQEAgLTg1LDcgKzg2LDcgQEAKIAlzZ19pbml0X29uZShzZywgaW5idWYsIFBBR0VfU0laRSk7CiAKIAkvKiBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWRkIG9uZSBidWZmZXIgdG8gYW4gZW1wdHkgcXVldWUuICovCi0JaWYgKGluX3ZxLT52cV9vcHMtPmFkZF9idWYoaW5fdnEsIHNnLCAwLCAxLCBpbmJ1ZikgIT0gMCkKKwlpZiAoaW5fdnEtPnZxX29wcy0+YWRkX2J1Zihpbl92cSwgc2csIDAsIDEsIGluYnVmKSA8IDApCiAJCUJVRygpOwogCWluX3ZxLT52cV9vcHMtPmtpY2soaW5fdnEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCA2YWE4OGY1Li4wYzgwYzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtMjUyLDcgKzI1Miw2IEBACiAJc3RydWN0IHZ0X25vdGlmaWVyX3BhcmFtIHBhcmFtID0geyAudmMgPSB2YyB9OwogCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZ2dF9ub3RpZmllcl9saXN0LCBWVF9VUERBVEUsICZwYXJhbSk7CiB9Ci0KIC8qCiAgKglMb3ctTGV2ZWwgRnVuY3Rpb25zCiAgKi8KQEAgLTkzNSw2ICs5MzQsNyBAQAogCiAJaWYgKENPTl9JU19WSVNJQkxFKHZjKSkKIAkJdXBkYXRlX3NjcmVlbih2Yyk7CisJdnRfZXZlbnRfcG9zdChWVF9FVkVOVF9SRVNJWkUsIHZjLT52Y19udW0sIHZjLT52Y19udW0pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIxMjksMTEgKzIxMjksNyBAQAogCWN1cnJjb25zID0gdmMtPnZjX251bTsKIAlpZiAoIXZjX2NvbnNfYWxsb2NhdGVkKGN1cnJjb25zKSkgewogCSAgICAvKiBjb3VsZCB0aGlzIGhhcHBlbj8gKi8KLQkgICAgc3RhdGljIGludCBlcnJvciA9IDA7Ci0JICAgIGlmICghZXJyb3IpIHsKLQkJZXJyb3IgPSAxOwotCQlwcmludGsoImNvbl93cml0ZTogdHR5ICVkIG5vdCBhbGxvY2F0ZWRcbiIsIGN1cnJjb25zKzEpOwotCSAgICB9CisJCXByaW50a19vbmNlKCJjb25fd3JpdGU6IHR0eSAlZCBub3QgYWxsb2NhdGVkXG4iLCBjdXJyY29ucysxKTsKIAkgICAgcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCSAgICByZXR1cm4gMDsKIAl9CkBAIC0yOTEwLDYgKzI5MDYsOSBAQAogCS5mbHVzaF9jaGFycyA9IGNvbl9mbHVzaF9jaGFycywKIAkuY2hhcnNfaW5fYnVmZmVyID0gY29uX2NoYXJzX2luX2J1ZmZlciwKIAkuaW9jdGwgPSB2dF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IHZ0X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogCS5zdG9wID0gY29uX3N0b3AsCiAJLnN0YXJ0ID0gY29uX3N0YXJ0LAogCS50aHJvdHRsZSA9IGNvbl90aHJvdHRsZSwKQEAgLTI5NTUsNyArMjk1NCw2IEBACiB9CiAKICNpZm5kZWYgVlRfU0lOR0xFX0RSSVZFUgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiBzdGF0aWMgc3RydWN0IGNsYXNzICp2dGNvbnNvbGVfY2xhc3M7CiAKQEAgLTM2MzgsNiArMzYzNiw3IEBACiAJCWJsYW5rX3N0YXRlID0gYmxhbmtfdmVzYV93YWl0OwogCQltb2RfdGltZXIoJmNvbnNvbGVfdGltZXIsIGppZmZpZXMgKyB2ZXNhX29mZl9pbnRlcnZhbCk7CiAJfQorCXZ0X2V2ZW50X3Bvc3QoVlRfRVZFTlRfQkxBTkssIHZjLT52Y19udW0sIHZjLT52Y19udW0pOwogfQogRVhQT1JUX1NZTUJPTChkb19ibGFua19zY3JlZW4pOwogCkBAIC0zNjgyLDYgKzM2ODEsNyBAQAogCQljb25zb2xlX2JsYW5rX2hvb2soMCk7CiAJc2V0X3BhbGV0dGUodmMpOwogCXNldF9jdXJzb3IodmMpOworCXZ0X2V2ZW50X3Bvc3QoVlRfRVZFTlRfVU5CTEFOSywgdmMtPnZjX251bSwgdmMtPnZjX251bSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRvX3VuYmxhbmtfc2NyZWVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwppbmRleCA5NTE4OWYyLi4yOWM2NTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2QuaD4KICNpbmNsdWRlIDxsaW51eC92dC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNjIsNiArNjQsMTMzIEBACiBzdGF0aWMgdm9pZCBjb21wbGV0ZV9jaGFuZ2VfY29uc29sZShzdHJ1Y3QgdmNfZGF0YSAqdmMpOwogCiAvKgorICoJVXNlciBzcGFjZSBWVF9FVkVOVCBoYW5kbGVycworICovCisKK3N0cnVjdCB2dF9ldmVudF93YWl0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHZ0X2V2ZW50IGV2ZW50OworCWludCBkb25lOworfTsKKworc3RhdGljIExJU1RfSEVBRCh2dF9ldmVudHMpOworc3RhdGljIERFRklORV9TUElOTE9DSyh2dF9ldmVudF9sb2NrKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh2dF9ldmVudF93YWl0cXVldWUpOworCisvKioKKyAqCXZ0X2V2ZW50X3Bvc3QKKyAqCUBldmVudDogdGhlIGV2ZW50IHRoYXQgb2NjdXJyZWQKKyAqCUBvbGQ6IG9sZCBjb25zb2xlCisgKglAbmV3OiBuZXcgY29uc29sZQorICoKKyAqCVBvc3QgYW4gVlQgZXZlbnQgdG8gaW50ZXJlc3RlZCBWVCBoYW5kbGVycworICovCisKK3ZvaWQgdnRfZXZlbnRfcG9zdCh1bnNpZ25lZCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBvbGQsIHVuc2lnbmVkIGludCBuZXcpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqaGVhZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB3YWtlID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2dF9ldmVudF9sb2NrLCBmbGFncyk7CisJaGVhZCA9ICZ2dF9ldmVudHM7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgeworCQlzdHJ1Y3QgdnRfZXZlbnRfd2FpdCAqdmUgPSBsaXN0X2VudHJ5KHBvcywKKwkJCQkJCXN0cnVjdCB2dF9ldmVudF93YWl0LCBsaXN0KTsKKwkJaWYgKCEodmUtPmV2ZW50LmV2ZW50ICYgZXZlbnQpKQorCQkJY29udGludWU7CisJCXZlLT5ldmVudC5ldmVudCA9IGV2ZW50OworCQkvKiBrZXJuZWwgdmlldyBpcyBjb25zb2xlcyAwLi5uLTEsIHVzZXIgc3BhY2UgdmlldyBpcworCQkgICBjb25zb2xlIDEuLm4gd2l0aCAwIG1lYW5pbmcgY3VycmVudCwgc28gd2UgbXVzdCBiaWFzICovCisJCXZlLT5ldmVudC5vbGQgPSBvbGQgKyAxOworCQl2ZS0+ZXZlbnQubmV3ID0gbmV3ICsgMTsKKwkJd2FrZSA9IDE7CisJCXZlLT5kb25lID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnRfZXZlbnRfbG9jaywgZmxhZ3MpOworCWlmICh3YWtlKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZ0X2V2ZW50X3dhaXRxdWV1ZSk7Cit9CisKKy8qKgorICoJdnRfZXZlbnRfd2FpdAkJLQl3YWl0IGZvciBhbiBldmVudAorICoJQHZ3OiBvdXIgZXZlbnQKKyAqCisgKglXYWl0cyBmb3IgYW4gZXZlbnQgdG8gb2NjdXIgd2hpY2ggY29tcGxldGVzIG91ciB2dF9ldmVudF93YWl0CisgKglzdHJ1Y3R1cmUuIE9uIHJldHVybiB0aGUgc3RydWN0dXJlIGhhcyB3di0+ZG9uZSBzZXQgdG8gMSBmb3Igc3VjY2VzcworICoJb3IgMCBpZiBzb21lIGV2ZW50IHN1Y2ggYXMgYSBzaWduYWwgZW5kZWQgdGhlIHdhaXQuCisgKi8KKworc3RhdGljIHZvaWQgdnRfZXZlbnRfd2FpdChzdHJ1Y3QgdnRfZXZlbnRfd2FpdCAqdncpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiBQcmVwYXJlIHRoZSBldmVudCAqLworCUlOSVRfTElTVF9IRUFEKCZ2dy0+bGlzdCk7CisJdnctPmRvbmUgPSAwOworCS8qIFF1ZXVlIG91ciBldmVudCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ2dF9ldmVudF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJnZ3LT5saXN0LCAmdnRfZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2dF9ldmVudF9sb2NrLCBmbGFncyk7CisJLyogV2FpdCBmb3IgaXQgdG8gcGFzcyAqLworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh2dF9ldmVudF93YWl0cXVldWUsIHZ3LT5kb25lKTsKKwkvKiBEZXF1ZXVlIGl0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZ0X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmdnctPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZ0X2V2ZW50X2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKgl2dF9ldmVudF93YWl0X2lvY3RsCS0JZXZlbnQgaW9jdGwgaGFuZGxlcgorICoJQGFyZzogYXJndW1lbnQgdG8gaW9jdGwKKyAqCisgKglJbXBsZW1lbnQgdGhlIFZUX1dBSVRFVkVOVCBpb2N0bCB1c2luZyB0aGUgVlQgZXZlbnQgaW50ZXJmYWNlCisgKi8KKworc3RhdGljIGludCB2dF9ldmVudF93YWl0X2lvY3RsKHN0cnVjdCB2dF9ldmVudCBfX3VzZXIgKmV2ZW50KQoreworCXN0cnVjdCB2dF9ldmVudF93YWl0IHZ3OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ2dy5ldmVudCwgZXZlbnQsIHNpemVvZihzdHJ1Y3QgdnRfZXZlbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogSGlnaGVzdCBzdXBwb3J0ZWQgZXZlbnQgZm9yIG5vdyAqLworCWlmICh2dy5ldmVudC5ldmVudCAmIH5WVF9NQVhfRVZFTlQpCisJCXJldHVybiAtRUlOVkFMOworCisJdnRfZXZlbnRfd2FpdCgmdncpOworCS8qIElmIGl0IG9jY3VycmVkIHJlcG9ydCBpdCAqLworCWlmICh2dy5kb25lKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoZXZlbnQsICZ2dy5ldmVudCwgc2l6ZW9mKHN0cnVjdCB2dF9ldmVudCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlRSOworfQorCisvKioKKyAqCXZ0X3dhaXRhY3RpdmUJLQlhY3RpdmUgY29uc29sZSB3YWl0CisgKglAZXZlbnQ6IGV2ZW50IGNvZGUKKyAqCUBuOiBuZXcgY29uc29sZQorICoKKyAqCUhlbHBlciBmb3IgZXZlbnQgd2FpdHMuIFVzZWQgdG8gaW1wbGVtZW50IHRoZSBsZWdhY3kKKyAqCWV2ZW50IHdhaXRpbmcgaW9jdGxzIGluIHRlcm1zIG9mIGV2ZW50cworICovCisKK2ludCB2dF93YWl0YWN0aXZlKGludCBuKQoreworCXN0cnVjdCB2dF9ldmVudF93YWl0IHZ3OworCWRvIHsKKwkJaWYgKG4gPT0gZmdfY29uc29sZSArIDEpCisJCQlicmVhazsKKwkJdncuZXZlbnQuZXZlbnQgPSBWVF9FVkVOVF9TV0lUQ0g7CisJCXZ0X2V2ZW50X3dhaXQoJnZ3KTsKKwkJaWYgKHZ3LmRvbmUgPT0gMCkKKwkJCXJldHVybiAtRUlOVFI7CisJfSB3aGlsZSAodncuZXZlbnQubmV3ICE9IG4pOworCXJldHVybiAwOworfQorCisvKgogICogdGhlc2UgYXJlIHRoZSB2YWxpZCBpL28gcG9ydHMgd2UncmUgYWxsb3dlZCB0byBjaGFuZ2UuIHRoZXkgbWFwIGFsbCB0aGUKICAqIHZpZGVvIHBvcnRzCiAgKi8KQEAgLTM2MCw2ICs0ODksOCBAQAogCXJldHVybiAwOwogfQogCisKKwogLyoKICAqIFdlIGhhbmRsZSB0aGUgY29uc29sZS1zcGVjaWZpYyBpb2N0bCdzIGhlcmUuICBXZSBhbGxvdyB0aGUKICAqIGNhcGFiaWxpdHkgdG8gbW9kaWZ5IGFueSBjb25zb2xlLCBub3QganVzdCB0aGUgZmdfY29uc29sZS4gCkBAIC04NDIsNiArOTczLDQxIEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIFZUX1NFVEFDVElWQVRFOgorCXsKKwkJc3RydWN0IHZ0X3NldGFjdGl2YXRlIHZzYTsKKworCQlpZiAoIXBlcm0pCisJCQlnb3RvIGVwZXJtOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdnNhLCAoc3RydWN0IHZ0X3NldGFjdGl2YXRlIF9fdXNlciAqKWFyZywKKwkJCQkJCXNpemVvZihzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodnNhLmNvbnNvbGUgPT0gMCB8fCB2c2EuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKKwkJCXJldCA9IC1FTlhJTzsKKwkJZWxzZSB7CisJCQl2c2EuY29uc29sZS0tOworCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJcmV0ID0gdmNfYWxsb2NhdGUodnNhLmNvbnNvbGUpOworCQkJaWYgKHJldCA9PSAwKSB7CisJCQkJc3RydWN0IHZjX2RhdGEgKm52YzsKKwkJCQkvKiBUaGlzIGlzIHNhZmUgcHJvdmlkaW5nIHdlIGRvbid0IGRyb3AgdGhlCisJCQkJICAgY29uc29sZSBzZW0gYmV0d2VlbiB2Y19hbGxvY2F0ZSBhbmQKKwkJCQkgICBmaW5pc2hpbmcgcmVmZXJlbmNpbmcgbnZjICovCisJCQkJbnZjID0gdmNfY29uc1t2c2EuY29uc29sZV0uZDsKKwkJCQludmMtPnZ0X21vZGUgPSB2c2EubW9kZTsKKwkJCQludmMtPnZ0X21vZGUuZnJzaWcgPSAwOworCQkJCXB1dF9waWQobnZjLT52dF9waWQpOworCQkJCW52Yy0+dnRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7CisJCQl9CisJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJLyogQ29tbWVuY2Ugc3dpdGNoIGFuZCBsb2NrICovCisJCQlzZXRfY29uc29sZShhcmcpOworCQl9CisJfQorCiAJLyoKIAkgKiB3YWl0IHVudGlsIHRoZSBzcGVjaWZpZWQgVlQgaGFzIGJlZW4gYWN0aXZhdGVkCiAJICovCkBAIC04NTEsNyArMTAxNyw3IEBACiAJCWlmIChhcmcgPT0gMCB8fCBhcmcgPiBNQVhfTlJfQ09OU09MRVMpCiAJCQlyZXQgPSAtRU5YSU87CiAJCWVsc2UKLQkJCXJldCA9IHZ0X3dhaXRhY3RpdmUoYXJnIC0gMSk7CisJCQlyZXQgPSB2dF93YWl0YWN0aXZlKGFyZyk7CiAJCWJyZWFrOwogCiAJLyoKQEAgLTExNTksNiArMTMyNSw5IEBACiAJCXJldCA9IHB1dF91c2VyKHZjLT52Y19oaV9mb250X21hc2ssCiAJCQkJCSh1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKilhcmcpOwogCQlicmVhazsKKwljYXNlIFZUX1dBSVRFVkVOVDoKKwkJcmV0ID0gdnRfZXZlbnRfd2FpdF9pb2N0bCgoc3RydWN0IHZ0X2V2ZW50IF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9JT0NUTENNRDsKIAl9CkBAIC0xMTcwLDU0ICsxMzM5LDYgQEAKIAlnb3RvIG91dDsKIH0KIAotLyoKLSAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHdhaXQgdW50aWwgYSBwYXJ0aWN1bGFyIFZUIGhhcyBiZWVuIGFjdGl2YXRlZC4gV2UKLSAqIGRvIGl0IGluIGEgdmVyeSBzaW1wbGUgbWFubmVyLiBFdmVyeWJvZHkgd2FpdHMgb24gYSBzaW5nbGUgcXVldWUgYW5kCi0gKiBnZXQgd29rZW4gdXAgYXQgb25jZS4gVGhvc2UgdGhhdCBhcmUgc2F0aXNmaWVkIGdvIG9uIHdpdGggdGhlaXIgYnVzaW5lc3MsCi0gKiB3aGlsZSB0aG9zZSBub3QgcmVhZHkgZ28gYmFjayB0byBzbGVlcC4gU2VlbXMgb3ZlcmtpbGwgdG8gYWRkIGEgd2FpdAotICogdG8gZWFjaCB2dCBqdXN0IGZvciB0aGlzIC0gdXN1YWxseSB0aGlzIGRvZXMgbm90aGluZyEKLSAqLwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHZ0X2FjdGl2YXRlX3F1ZXVlKTsKLQotLyoKLSAqIFNsZWVwcyB1bnRpbCBhIHZ0IGlzIGFjdGl2YXRlZCwgb3IgdGhlIHRhc2sgaXMgaW50ZXJydXB0ZWQuIFJldHVybnMKLSAqIDAgaWYgYWN0aXZhdGlvbiwgLUVJTlRSIGlmIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGhhbmRsZXIuCi0gKi8KLWludCB2dF93YWl0YWN0aXZlKGludCB2dCkKLXsKLQlpbnQgcmV0dmFsOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JYWRkX3dhaXRfcXVldWUoJnZ0X2FjdGl2YXRlX3F1ZXVlLCAmd2FpdCk7Ci0JZm9yICg7OykgewotCQlyZXR2YWwgPSAwOwotCi0JCS8qCi0JCSAqIFN5bmNocm9uaXplIHdpdGggcmVkcmF3X3NjcmVlbigpLiBCeSBhY3F1aXJpbmcgdGhlIGNvbnNvbGUKLQkJICogc2VtYXBob3JlIHdlIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25zb2xlIHN3aXRjaCBpcyBjb21wbGV0ZWQKLQkJICogYmVmb3JlIHdlIHJldHVybi4gSWYgd2UgZGlkbid0IHdhaXQgZm9yIHRoZSBzZW1hcGhvcmUsIHdlCi0JCSAqIGNvdWxkIHJldHVybiBhdCBhIHBvaW50IHdoZXJlIGZnX2NvbnNvbGUgaGFzIGFscmVhZHkgYmVlbgotCQkgKiB1cGRhdGVkLCBidXQgdGhlIGNvbnNvbGUgc3dpdGNoIGhhc24ndCBiZWVuIGNvbXBsZXRlZC4KLQkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHZ0ID09IGZnX2NvbnNvbGUpIHsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dmFsID0gLUVSRVNUQVJUTk9IQU5EOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlicmVhazsKLQkJc2NoZWR1bGUoKTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnZ0X2FjdGl2YXRlX3F1ZXVlLCAmd2FpdCk7Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLSNkZWZpbmUgdnRfd2FrZV93YWl0YWN0aXZlKCkgd2FrZV91cCgmdnRfYWN0aXZhdGVfcXVldWUpCi0KIHZvaWQgcmVzZXRfdmMoc3RydWN0IHZjX2RhdGEgKnZjKQogewogCXZjLT52Y19tb2RlID0gS0RfVEVYVDsKQEAgLTEyNTYsMTIgKzEzNzcsMjE2IEBACiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCitzdHJ1Y3QgY29tcGF0X2NvbnNvbGVmb250ZGVzYyB7CisJdW5zaWduZWQgc2hvcnQgY2hhcmNvdW50OyAgICAgICAvKiBjaGFyYWN0ZXJzIGluIGZvbnQgKDI1NiBvciA1MTIpICovCisJdW5zaWduZWQgc2hvcnQgY2hhcmhlaWdodDsgICAgICAvKiBzY2FuIGxpbmVzIHBlciBjaGFyYWN0ZXIgKDEtMzIpICovCisJY29tcGF0X2NhZGRyX3QgY2hhcmRhdGE7CS8qIGZvbnQgZGF0YSBpbiBleHBhbmRlZCBmb3JtICovCit9OworCitzdGF0aWMgaW5saW5lIGludAorY29tcGF0X2ZvbnR4X2lvY3RsKGludCBjbWQsIHN0cnVjdCBjb21wYXRfY29uc29sZWZvbnRkZXNjIF9fdXNlciAqdXNlcl9jZmQsCisJCQkgaW50IHBlcm0sIHN0cnVjdCBjb25zb2xlX2ZvbnRfb3AgKm9wKQoreworCXN0cnVjdCBjb21wYXRfY29uc29sZWZvbnRkZXNjIGNmZGFyZzsKKwlpbnQgaTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY2ZkYXJnLCB1c2VyX2NmZCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfY29uc29sZWZvbnRkZXNjKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBJT19GT05UWDoKKwkJaWYgKCFwZXJtKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJb3AtPm9wID0gS0RfRk9OVF9PUF9TRVQ7CisJCW9wLT5mbGFncyA9IEtEX0ZPTlRfRkxBR19PTEQ7CisJCW9wLT53aWR0aCA9IDg7CisJCW9wLT5oZWlnaHQgPSBjZmRhcmcuY2hhcmhlaWdodDsKKwkJb3AtPmNoYXJjb3VudCA9IGNmZGFyZy5jaGFyY291bnQ7CisJCW9wLT5kYXRhID0gY29tcGF0X3B0cihjZmRhcmcuY2hhcmRhdGEpOworCQlyZXR1cm4gY29uX2ZvbnRfb3AodmNfY29uc1tmZ19jb25zb2xlXS5kLCBvcCk7CisJY2FzZSBHSU9fRk9OVFg6CisJCW9wLT5vcCA9IEtEX0ZPTlRfT1BfR0VUOworCQlvcC0+ZmxhZ3MgPSBLRF9GT05UX0ZMQUdfT0xEOworCQlvcC0+d2lkdGggPSA4OworCQlvcC0+aGVpZ2h0ID0gY2ZkYXJnLmNoYXJoZWlnaHQ7CisJCW9wLT5jaGFyY291bnQgPSBjZmRhcmcuY2hhcmNvdW50OworCQlvcC0+ZGF0YSA9IGNvbXBhdF9wdHIoY2ZkYXJnLmNoYXJkYXRhKTsKKwkJaSA9IGNvbl9mb250X29wKHZjX2NvbnNbZmdfY29uc29sZV0uZCwgb3ApOworCQlpZiAoaSkKKwkJCXJldHVybiBpOworCQljZmRhcmcuY2hhcmhlaWdodCA9IG9wLT5oZWlnaHQ7CisJCWNmZGFyZy5jaGFyY291bnQgPSBvcC0+Y2hhcmNvdW50OworCQlpZiAoY29weV90b191c2VyKHVzZXJfY2ZkLCAmY2ZkYXJnLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9jb25zb2xlZm9udGRlc2MpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0cnVjdCBjb21wYXRfY29uc29sZV9mb250X29wIHsKKwljb21wYXRfdWludF90IG9wOyAgICAgICAgLyogb3BlcmF0aW9uIGNvZGUgS0RfRk9OVF9PUF8qICovCisJY29tcGF0X3VpbnRfdCBmbGFnczsgICAgIC8qIEtEX0ZPTlRfRkxBR18qICovCisJY29tcGF0X3VpbnRfdCB3aWR0aCwgaGVpZ2h0OyAgICAgLyogZm9udCBzaXplICovCisJY29tcGF0X3VpbnRfdCBjaGFyY291bnQ7CisJY29tcGF0X2NhZGRyX3QgZGF0YTsgICAgLyogZm9udCBkYXRhIHdpdGggaGVpZ2h0IGZpeGVkIHRvIDMyICovCit9OworCitzdGF0aWMgaW5saW5lIGludAorY29tcGF0X2tkZm9udG9wX2lvY3RsKHN0cnVjdCBjb21wYXRfY29uc29sZV9mb250X29wIF9fdXNlciAqZm9udG9wLAorCQkJIGludCBwZXJtLCBzdHJ1Y3QgY29uc29sZV9mb250X29wICpvcCwgc3RydWN0IHZjX2RhdGEgKnZjKQoreworCWludCBpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKG9wLCBmb250b3AsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2NvbnNvbGVfZm9udF9vcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoIXBlcm0gJiYgb3AtPm9wICE9IEtEX0ZPTlRfT1BfR0VUKQorCQlyZXR1cm4gLUVQRVJNOworCW9wLT5kYXRhID0gY29tcGF0X3B0cigoKHN0cnVjdCBjb21wYXRfY29uc29sZV9mb250X29wICopb3ApLT5kYXRhKTsKKwlvcC0+ZmxhZ3MgfD0gS0RfRk9OVF9GTEFHX09MRDsKKwlpID0gY29uX2ZvbnRfb3AodmMsIG9wKTsKKwlpZiAoaSkKKwkJcmV0dXJuIGk7CisJKChzdHJ1Y3QgY29tcGF0X2NvbnNvbGVfZm9udF9vcCAqKW9wKS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKW9wLT5kYXRhOworCWlmIChjb3B5X3RvX3VzZXIoZm9udG9wLCBvcCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfY29uc29sZV9mb250X29wKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY29tcGF0X3VuaW1hcGRlc2MgeworCXVuc2lnbmVkIHNob3J0IGVudHJ5X2N0OworCWNvbXBhdF9jYWRkcl90IGVudHJpZXM7Cit9OworCitzdGF0aWMgaW5saW5lIGludAorY29tcGF0X3VuaW1hcF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgY29tcGF0X3VuaW1hcGRlc2MgX191c2VyICp1c2VyX3VkLAorCQkJIGludCBwZXJtLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJc3RydWN0IGNvbXBhdF91bmltYXBkZXNjIHRtcDsKKwlzdHJ1Y3QgdW5pcGFpciBfX3VzZXIgKnRtcF9lbnRyaWVzOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXJfdWQsIHNpemVvZiB0bXApKQorCQlyZXR1cm4gLUVGQVVMVDsKKwl0bXBfZW50cmllcyA9IGNvbXBhdF9wdHIodG1wLmVudHJpZXMpOworCWlmICh0bXBfZW50cmllcykKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bXBfZW50cmllcywKKwkJCQl0bXAuZW50cnlfY3Qqc2l6ZW9mKHN0cnVjdCB1bmlwYWlyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUElPX1VOSU1BUDoKKwkJaWYgKCFwZXJtKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJcmV0dXJuIGNvbl9zZXRfdW5pbWFwKHZjLCB0bXAuZW50cnlfY3QsIHRtcF9lbnRyaWVzKTsKKwljYXNlIEdJT19VTklNQVA6CisJCWlmICghcGVybSAmJiBmZ19jb25zb2xlICE9IHZjLT52Y19udW0pCisJCQlyZXR1cm4gLUVQRVJNOworCQlyZXR1cm4gY29uX2dldF91bmltYXAodmMsIHRtcC5lbnRyeV9jdCwgJih1c2VyX3VkLT5lbnRyeV9jdCksIHRtcF9lbnRyaWVzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2xvbmcgdnRfY29tcGF0X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKKwkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB2Y19kYXRhICp2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGNvbnNvbGVfZm9udF9vcCBvcDsJLyogdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMgaGVyZSAqLworCXN0cnVjdCBrYmRfc3RydWN0ICprYmQ7CisJdW5zaWduZWQgaW50IGNvbnNvbGU7CisJdm9pZCBfX3VzZXIgKnVwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBwZXJtOworCWludCByZXQgPSAwOworCisJY29uc29sZSA9IHZjLT52Y19udW07CisKKwlsb2NrX2tlcm5lbCgpOworCisJaWYgKCF2Y19jb25zX2FsbG9jYXRlZChjb25zb2xlKSkgeyAJLyogaW1wb3NzaWJsZT8gKi8KKwkJcmV0ID0gLUVOT0lPQ1RMQ01EOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRvIGhhdmUgcGVybWlzc2lvbnMgdG8gZG8gbW9zdCBvZiB0aGUgdnQgaW9jdGxzLCB3ZSBlaXRoZXIgaGF2ZQorCSAqIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgdHR5LCBvciBoYXZlIENBUF9TWVNfVFRZX0NPTkZJRy4KKwkgKi8KKwlwZXJtID0gMDsKKwlpZiAoY3VycmVudC0+c2lnbmFsLT50dHkgPT0gdHR5IHx8IGNhcGFibGUoQ0FQX1NZU19UVFlfQ09ORklHKSkKKwkJcGVybSA9IDE7CisKKwlrYmQgPSBrYmRfdGFibGUgKyBjb25zb2xlOworCXN3aXRjaCAoY21kKSB7CisJLyoKKwkgKiB0aGVzZSBuZWVkIHNwZWNpYWwgaGFuZGxlcnMgZm9yIGluY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMKKwkgKi8KKwljYXNlIFBJT19GT05UWDoKKwljYXNlIEdJT19GT05UWDoKKwkJcmV0ID0gY29tcGF0X2ZvbnR4X2lvY3RsKGNtZCwgdXAsIHBlcm0sICZvcCk7CisJCWJyZWFrOworCisJY2FzZSBLREZPTlRPUDoKKwkJcmV0ID0gY29tcGF0X2tkZm9udG9wX2lvY3RsKHVwLCBwZXJtLCAmb3AsIHZjKTsKKwkJYnJlYWs7CisKKwljYXNlIFBJT19VTklNQVA6CisJY2FzZSBHSU9fVU5JTUFQOgorCQlyZXQgPSBkb191bmltYXBfaW9jdGwoY21kLCB1cCwgcGVybSwgdmMpOworCQlicmVhazsKKworCS8qCisJICogYWxsIHRoZXNlIHRyZWF0ICdhcmcnIGFzIGFuIGludGVnZXIKKwkgKi8KKwljYXNlIEtJT0NTT1VORDoKKwljYXNlIEtETUtUT05FOgorI2lmZGVmIENPTkZJR19YODYKKwljYXNlIEtEQURESU86CisJY2FzZSBLRERFTElPOgorI2VuZGlmCisJY2FzZSBLRFNFVE1PREU6CisJY2FzZSBLRE1BUERJU1A6CisJY2FzZSBLRFVOTUFQRElTUDoKKwljYXNlIEtEU0tCTU9ERToKKwljYXNlIEtEU0tCTUVUQToKKwljYXNlIEtEU0tCTEVEOgorCWNhc2UgS0RTRVRMRUQ6CisJY2FzZSBLRFNJR0FDQ0VQVDoKKwljYXNlIFZUX0FDVElWQVRFOgorCWNhc2UgVlRfV0FJVEFDVElWRToKKwljYXNlIFZUX1JFTERJU1A6CisJY2FzZSBWVF9ESVNBTExPQ0FURToKKwljYXNlIFZUX1JFU0laRToKKwljYXNlIFZUX1JFU0laRVg6CisJCWdvdG8gZmFsbGJhY2s7CisKKwkvKgorCSAqIHRoZSByZXN0IGhhcyBhIGNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmUgYmVoaW5kIGFyZywKKwkgKiBidXQgd2UgaGF2ZSB0byBjb252ZXJ0IGl0IHRvIGEgcHJvcGVyIDY0IGJpdCBwb2ludGVyLgorCSAqLworCWRlZmF1bHQ6CisJCWFyZyA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKTsKKwkJZ290byBmYWxsYmFjazsKKwl9CitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CisKK2ZhbGxiYWNrOgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gdnRfaW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7Cit9CisKKworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKworCiAvKgotICogUGVyZm9ybXMgdGhlIGJhY2sgZW5kIG9mIGEgdnQgc3dpdGNoCisgKiBQZXJmb3JtcyB0aGUgYmFjayBlbmQgb2YgYSB2dCBzd2l0Y2guIENhbGxlZCB1bmRlciB0aGUgY29uc29sZQorICogc2VtYXBob3JlLgogICovCiBzdGF0aWMgdm9pZCBjb21wbGV0ZV9jaGFuZ2VfY29uc29sZShzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJdW5zaWduZWQgY2hhciBvbGRfdmNfbW9kZTsKKwlpbnQgb2xkID0gZmdfY29uc29sZTsKIAogCWxhc3RfY29uc29sZSA9IGZnX2NvbnNvbGU7CiAKQEAgLTEzMjUsNyArMTY1MCw3IEBACiAJLyoKIAkgKiBXYWtlIGFueW9uZSB3YWl0aW5nIGZvciB0aGVpciBWVCB0byBhY3RpdmF0ZQogCSAqLwotCXZ0X3dha2Vfd2FpdGFjdGl2ZSgpOworCXZ0X2V2ZW50X3Bvc3QoVlRfRVZFTlRfU1dJVENILCBvbGQsIHZjLT52Y19udW0pOwogCXJldHVybjsKIH0KIApAQCAtMTM5OCwzICsxNzIzLDU4IEBACiAKIAljb21wbGV0ZV9jaGFuZ2VfY29uc29sZShuZXdfdmMpOwogfQorCisvKiBQZXJmb3JtIGEga2VybmVsIHRyaWdnZXJlZCBWVCBzd2l0Y2ggZm9yIHN1c3BlbmQvcmVzdW1lICovCisKK3N0YXRpYyBpbnQgZGlzYWJsZV92dF9zd2l0Y2g7CisKK2ludCB2dF9tb3ZlX3RvX2NvbnNvbGUodW5zaWduZWQgaW50IHZ0LCBpbnQgYWxsb2MpCit7CisJaW50IHByZXY7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJLyogR3JhcGhpY3MgbW9kZSAtIHVwIHRvIFggKi8KKwlpZiAoZGlzYWJsZV92dF9zd2l0Y2gpIHsKKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR1cm4gMDsKKwl9CisJcHJldiA9IGZnX2NvbnNvbGU7CisKKwlpZiAoYWxsb2MgJiYgdmNfYWxsb2NhdGUodnQpKSB7CisJCS8qIHdlIGNhbid0IGhhdmUgYSBmcmVlIFZDIGZvciBub3cuIFRvbyBiYWQsCisJCSAqIHdlIGRvbid0IHdhbnQgdG8gbWVzcyB0aGUgc2NyZWVuIGZvciBub3cuICovCisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJaWYgKHNldF9jb25zb2xlKHZ0KSkgeworCQkvKgorCQkgKiBXZSdyZSB1bmFibGUgdG8gc3dpdGNoIHRvIHRoZSBTVVNQRU5EX0NPTlNPTEUuCisJCSAqIExldCB0aGUgY2FsbGluZyBmdW5jdGlvbiBrbm93IHNvIGl0IGNhbiBkZWNpZGUKKwkJICogd2hhdCB0byBkby4KKwkJICovCisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlpZiAodnRfd2FpdGFjdGl2ZSh2dCArIDEpKSB7CisJCXByX2RlYnVnKCJTdXNwZW5kOiBDYW4ndCBzd2l0Y2ggVkNzLiIpOworCQlyZXR1cm4gLUVJTlRSOworCX0KKwlyZXR1cm4gcHJldjsKK30KKworLyoKKyAqIE5vcm1hbGx5IGR1cmluZyBhIHN1c3BlbmQsIHdlIGFsbG9jYXRlIGEgbmV3IGNvbnNvbGUgYW5kIHN3aXRjaCB0byBpdC4KKyAqIFdoZW4gd2UgcmVzdW1lLCB3ZSBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwgY29uc29sZS4gIFRoaXMgc3dpdGNoCisgKiBjYW4gYmUgc2xvdywgc28gb24gc3lzdGVtcyB3aGVyZSB0aGUgZnJhbWVidWZmZXIgY2FuIGhhbmRsZSByZXN0b3JhdGlvbgorICogb2YgdmlkZW8gcmVnaXN0ZXJzIGFueXdheXMsIHRoZXJlJ3MgbGl0dGxlIHBvaW50IGluIGRvaW5nIHRoZSBjb25zb2xlCisgKiBzd2l0Y2guICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nIGl0ICcwJy4KKyAqLwordm9pZCBwbV9zZXRfdnRfc3dpdGNoKGludCBkb19zd2l0Y2gpCit7CisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWRpc2FibGVfdnRfc3dpdGNoID0gIWRvX3N3aXRjaDsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Cit9CitFWFBPUlRfU1lNQk9MKHBtX3NldF92dF9zd2l0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCmluZGV4IDg1ZTVkYzAuLmFiZjRhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKQEAgLTEzOSw2ICsxMzksMzEgQEAKIAljbl9uZXRsaW5rX3NlbmQobXNnLCBDTl9JRFhfUFJPQywgR0ZQX0tFUk5FTCk7CiB9CiAKK3ZvaWQgcHJvY19zaWRfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgY25fbXNnICptc2c7CisJc3RydWN0IHByb2NfZXZlbnQgKmV2OworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlfX3U4IGJ1ZmZlcltDTl9QUk9DX01TR19TSVpFXTsKKworCWlmIChhdG9taWNfcmVhZCgmcHJvY19ldmVudF9udW1fbGlzdGVuZXJzKSA8IDEpCisJCXJldHVybjsKKworCW1zZyA9IChzdHJ1Y3QgY25fbXNnICopYnVmZmVyOworCWV2ID0gKHN0cnVjdCBwcm9jX2V2ZW50ICopbXNnLT5kYXRhOworCWdldF9zZXEoJm1zZy0+c2VxLCAmZXYtPmNwdSk7CisJa3RpbWVfZ2V0X3RzKCZ0cyk7IC8qIGdldCBoaWdoIHJlcyBtb25vdG9uaWMgdGltZXN0YW1wICovCisJcHV0X3VuYWxpZ25lZCh0aW1lc3BlY190b19ucygmdHMpLCAoX191NjQgKikmZXYtPnRpbWVzdGFtcF9ucyk7CisJZXYtPndoYXQgPSBQUk9DX0VWRU5UX1NJRDsKKwlldi0+ZXZlbnRfZGF0YS5zaWQucHJvY2Vzc19waWQgPSB0YXNrLT5waWQ7CisJZXYtPmV2ZW50X2RhdGEuc2lkLnByb2Nlc3NfdGdpZCA9IHRhc2stPnRnaWQ7CisKKwltZW1jcHkoJm1zZy0+aWQsICZjbl9wcm9jX2V2ZW50X2lkLCBzaXplb2YobXNnLT5pZCkpOworCW1zZy0+YWNrID0gMDsgLyogbm90IHVzZWQgKi8KKwltc2ctPmxlbiA9IHNpemVvZigqZXYpOworCWNuX25ldGxpbmtfc2VuZChtc2csIENOX0lEWF9QUk9DLCBHRlBfS0VSTkVMKTsKK30KKwogdm9pZCBwcm9jX2V4aXRfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3QgY25fbXNnICptc2c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwppbmRleCA4NTA0YTIxLi5hZDQxZjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CiAKICNpbmNsdWRlICJjcHVpZGxlLmgiCiAKQEAgLTkxLDYgKzkyLDcgQEAKIAkvKiBnaXZlIHRoZSBnb3Zlcm5vciBhbiBvcHBvcnR1bml0eSB0byByZWZsZWN0IG9uIHRoZSBvdXRjb21lICovCiAJaWYgKGNwdWlkbGVfY3Vycl9nb3Zlcm5vci0+cmVmbGVjdCkKIAkJY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5yZWZsZWN0KGRldik7CisJdHJhY2VfcG93ZXJfZW5kKDApOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKaW5kZXggZjFkZjU5Zi4uNjgxMDQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKQEAgLTIsOCArMiwxMiBAQAogICogbWVudS5jIC0gdGhlIG1lbnUgaWRsZSBnb3Zlcm5vcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IEFkYW0gQmVsYXkgPGFiZWxheUBub3ZlbGwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6CisgKiAgICAgICAgQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW5AbGludXguaW50ZWwuY29tPgogICoKLSAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyIGFzIGRlc2NyaWJlZAorICogaW4gdGhlIENPUFlJTkcgZmlsZSB0aGF0IGFjb21wYW5pZXMgdGhlIExpbnV4IEtlcm5lbC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMywyMiArMTcsMTU4IEBACiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNkZWZpbmUgQlJFQUtfRlVaWgk0CS8qIDQgdXMgKi8KLSNkZWZpbmUgUFJFRF9ISVNUT1JZX1BDVAk1MAorI2RlZmluZSBCVUNLRVRTIDEyCisjZGVmaW5lIFJFU09MVVRJT04gMTAyNAorI2RlZmluZSBERUNBWSA0CisjZGVmaW5lIE1BWF9JTlRFUkVTVElORyA1MDAwMAorCisvKgorICogQ29uY2VwdHMgYW5kIGlkZWFzIGJlaGluZCB0aGUgbWVudSBnb3Zlcm5vcgorICoKKyAqIEZvciB0aGUgbWVudSBnb3Zlcm5vciwgdGhlcmUgYXJlIDMgZGVjaXNpb24gZmFjdG9ycyBmb3IgcGlja2luZyBhIEMKKyAqIHN0YXRlOgorICogMSkgRW5lcmd5IGJyZWFrIGV2ZW4gcG9pbnQKKyAqIDIpIFBlcmZvcm1hbmNlIGltcGFjdAorICogMykgTGF0ZW5jeSB0b2xlcmFuY2UgKGZyb20gcG1xb3MgaW5mcmFzdHJ1Y3R1cmUpCisgKiBUaGVzZSB0aGVzZSB0aHJlZSBmYWN0b3JzIGFyZSB0cmVhdGVkIGluZGVwZW5kZW50bHkuCisgKgorICogRW5lcmd5IGJyZWFrIGV2ZW4gcG9pbnQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDIHN0YXRlIGVudHJ5IGFuZCBleGl0IGhhdmUgYW4gZW5lcmd5IGNvc3QsIGFuZCBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgaW4KKyAqIHRoZSAgQyBzdGF0ZSBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBicmVhayBldmVuIG9uIHRoaXMgY29zdC4gQ1BVSURMRQorICogcHJvdmlkZXMgdXMgdGhpcyBkdXJhdGlvbiBpbiB0aGUgInRhcmdldF9yZXNpZGVuY3kiIGZpZWxkLiBTbyBhbGwgdGhhdCB3ZQorICogbmVlZCBpcyBhIGdvb2QgcHJlZGljdGlvbiBvZiBob3cgbG9uZyB3ZSdsbCBiZSBpZGxlLiBMaWtlIHRoZSB0cmFkaXRpb25hbAorICogbWVudSBnb3Zlcm5vciwgd2Ugc3RhcnQgd2l0aCB0aGUgYWN0dWFsIGtub3duICJuZXh0IHRpbWVyIGV2ZW50IiB0aW1lLgorICoKKyAqIFNpbmNlIHRoZXJlIGFyZSBvdGhlciBzb3VyY2Ugb2Ygd2FrZXVwcyAoaW50ZXJydXB0cyBmb3IgZXhhbXBsZSkgdGhhbgorICogdGhlIG5leHQgdGltZXIgZXZlbnQsIHRoaXMgZXN0aW1hdGlvbiBpcyByYXRoZXIgb3B0aW1pc3RpYy4gVG8gZ2V0IGEKKyAqIG1vcmUgcmVhbGlzdGljIGVzdGltYXRlLCBhIGNvcnJlY3Rpb24gZmFjdG9yIGlzIGFwcGxpZWQgdG8gdGhlIGVzdGltYXRlLAorICogdGhhdCBpcyBiYXNlZCBvbiBoaXN0b3JpYyBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIGlmIGluIHRoZSBwYXN0IHRoZSBhY3R1YWwKKyAqIGR1cmF0aW9uIGFsd2F5cyB3YXMgNTAlIG9mIHRoZSBuZXh0IHRpbWVyIHRpY2ssIHRoZSBjb3JyZWN0aW9uIGZhY3RvciB3aWxsCisgKiBiZSAwLjUuCisgKgorICogbWVudSB1c2VzIGEgcnVubmluZyBhdmVyYWdlIGZvciB0aGlzIGNvcnJlY3Rpb24gZmFjdG9yLCBob3dldmVyIGl0IHVzZXMgYQorICogc2V0IG9mIGZhY3RvcnMsIG5vdCBqdXN0IGEgc2luZ2xlIGZhY3Rvci4gVGhpcyBzdGVtcyBmcm9tIHRoZSByZWFsaXphdGlvbgorICogdGhhdCB0aGUgcmF0aW8gaXMgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBvZiBtYWduaXR1ZGUgb2YgdGhlIGV4cGVjdGVkCisgKiBkdXJhdGlvbjsgaWYgd2UgZXhwZWN0IDUwMCBtaWxsaXNlY29uZHMgb2YgaWRsZSB0aW1lIHRoZSBsaWtlbGlob29kIG9mCisgKiBnZXR0aW5nIGFuIGludGVycnVwdCB2ZXJ5IGVhcmx5IGlzIG11Y2ggaGlnaGVyIHRoYW4gaWYgd2UgZXhwZWN0IDUwIG1pY3JvCisgKiBzZWNvbmRzIG9mIGlkbGUgdGltZS4gQSBzZWNvbmQgaW5kZXBlbmRlbnQgZmFjdG9yIHRoYXQgaGFzIGJpZyBpbXBhY3Qgb24KKyAqIHRoZSBhY3R1YWwgZmFjdG9yIGlzIGlmIHRoZXJlIGlzIChkaXNrKSBJTyBvdXRzdGFuZGluZyBvciBub3QuCisgKiAoYXMgYSBzcGVjaWFsIHR3aXN0LCB3ZSBjb25zaWRlciBldmVyeSBzbGVlcCBsb25nZXIgdGhhbiA1MCBtaWxsaXNlY29uZHMKKyAqIGFzIHBlcmZlY3Q7IHRoZXJlIGFyZSBubyBwb3dlciBnYWlucyBmb3Igc2xlZXBpbmcgbG9uZ2VyIHRoYW4gdGhpcykKKyAqCisgKiBGb3IgdGhlc2UgdHdvIHJlYXNvbnMgd2Uga2VlcCBhbiBhcnJheSBvZiAxMiBpbmRlcGVuZGVudCBmYWN0b3JzLCB0aGF0IGdldHMKKyAqIGluZGV4ZWQgYmFzZWQgb24gdGhlIG1hZ25pdHVkZSBvZiB0aGUgZXhwZWN0ZWQgZHVyYXRpb24gYXMgd2VsbCBhcyB0aGUKKyAqICJpcyBJTyBvdXRzdGFuZGluZyIgcHJvcGVydHkuCisgKgorICogTGltaXRpbmcgUGVyZm9ybWFuY2UgSW1wYWN0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEMgc3RhdGVzLCBlc3BlY2lhbGx5IHRob3NlIHdpdGggbGFyZ2UgZXhpdCBsYXRlbmNpZXMsIGNhbiBoYXZlIGEgcmVhbAorICogbm90aWNhYmxlIGltcGFjdCBvbiB3b3JrbG9hZHMsIHdoaWNoIGlzIG5vdCBhY2NlcHRhYmxlIGZvciBtb3N0IHN5c2FkbWlucywKKyAqIGFuZCBpbiBhZGRpdGlvbiwgbGVzcyBwZXJmb3JtYW5jZSBoYXMgYSBwb3dlciBwcmljZSBvZiBpdHMgb3duLgorICoKKyAqIEFzIGEgZ2VuZXJhbCBydWxlIG9mIHRodW1iLCBtZW51IGFzc3VtZXMgdGhhdCB0aGUgZm9sbG93aW5nIGhldXJpc3RpYworICogaG9sZHM6CisgKiAgICAgVGhlIGJ1c2llciB0aGUgc3lzdGVtLCB0aGUgbGVzcyBpbXBhY3Qgb2YgQyBzdGF0ZXMgaXMgYWNjZXB0YWJsZQorICoKKyAqIFRoaXMgcnVsZS1vZi10aHVtYiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHBlcmZvcm1hbmNlLW11bHRpcGxpZXI6CisgKiBJZiB0aGUgZXhpdCBsYXRlbmN5IHRpbWVzIHRoZSBwZXJmb3JtYW5jZSBtdWx0aXBsaWVyIGlzIGxvbmdlciB0aGFuCisgKiB0aGUgcHJlZGljdGVkIGR1cmF0aW9uLCB0aGUgQyBzdGF0ZSBpcyBub3QgY29uc2lkZXJlZCBhIGNhbmRpZGF0ZQorICogZm9yIHNlbGVjdGlvbiBkdWUgdG8gYSB0b28gaGlnaCBwZXJmb3JtYW5jZSBpbXBhY3QuIFNvIHRoZSBoaWdoZXIKKyAqIHRoaXMgbXVsdGlwbGllciBpcywgdGhlIGxvbmdlciB3ZSBuZWVkIHRvIGJlIGlkbGUgdG8gcGljayBhIGRlZXAgQworICogc3RhdGUsIGFuZCB0aHVzIHRoZSBsZXNzIGxpa2VseSBhIGJ1c3kgQ1BVIHdpbGwgaGl0IHN1Y2ggYSBkZWVwCisgKiBDIHN0YXRlLgorICoKKyAqIFR3byBmYWN0b3JzIGFyZSB1c2VkIGluIGRldGVybWluZyB0aGlzIG11bHRpcGxpZXI6CisgKiBhIHZhbHVlIG9mIDEwIGlzIGFkZGVkIGZvciBlYWNoIHBvaW50IG9mICJwZXIgY3B1IGxvYWQgYXZlcmFnZSIgd2UgaGF2ZS4KKyAqIGEgdmFsdWUgb2YgNSBwb2ludHMgaXMgYWRkZWQgZm9yIGVhY2ggcHJvY2VzcyB0aGF0IGlzIHdhaXRpbmcgZm9yCisgKiBJTyBvbiB0aGlzIENQVS4KKyAqICh0aGVzZSB2YWx1ZXMgYXJlIGV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQpCisgKgorICogVGhlIGxvYWQgYXZlcmFnZSBmYWN0b3IgZ2l2ZXMgYSBsb25nZXIgdGVybSAoZmV3IHNlY29uZHMpIGlucHV0IHRvIHRoZQorICogZGVjaXNpb24sIHdoaWxlIHRoZSBpb3dhaXQgdmFsdWUgZ2l2ZXMgYSBjcHUgbG9jYWwgaW5zdGFudGFuaW91cyBpbnB1dC4KKyAqIFRoZSBpb3dhaXQgZmFjdG9yIG1heSBsb29rIGxvdywgYnV0IHJlYWxpemUgdGhhdCB0aGlzIGlzIGFsc28gYWxyZWFkeQorICogcmVwcmVzZW50ZWQgaW4gdGhlIHN5c3RlbSBsb2FkIGF2ZXJhZ2UuCisgKgorICovCiAKIHN0cnVjdCBtZW51X2RldmljZSB7CiAJaW50CQlsYXN0X3N0YXRlX2lkeDsKKwlpbnQgICAgICAgICAgICAgbmVlZHNfdXBkYXRlOwogCiAJdW5zaWduZWQgaW50CWV4cGVjdGVkX3VzOwotCXVuc2lnbmVkIGludAlwcmVkaWN0ZWRfdXM7Ci0JdW5zaWduZWQgaW50ICAgIGN1cnJlbnRfcHJlZGljdGVkX3VzOwotCXVuc2lnbmVkIGludAlsYXN0X21lYXN1cmVkX3VzOwotCXVuc2lnbmVkIGludAllbGFwc2VkX3VzOworCXU2NAkJcHJlZGljdGVkX3VzOworCXVuc2lnbmVkIGludAltZWFzdXJlZF91czsKKwl1bnNpZ25lZCBpbnQJZXhpdF91czsKKwl1bnNpZ25lZCBpbnQJYnVja2V0OworCXU2NAkJY29ycmVjdGlvbl9mYWN0b3JbQlVDS0VUU107CiB9OwogCisKKyNkZWZpbmUgTE9BRF9JTlQoeCkgKCh4KSA+PiBGU0hJRlQpCisjZGVmaW5lIExPQURfRlJBQyh4KSBMT0FEX0lOVCgoKHgpICYgKEZJWEVEXzEtMSkpICogMTAwKQorCitzdGF0aWMgaW50IGdldF9sb2FkYXZnKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0aGlzID0gdGhpc19jcHVfbG9hZCgpOworCisKKwlyZXR1cm4gTE9BRF9JTlQodGhpcykgKiAxMCArIExPQURfRlJBQyh0aGlzKSAvIDEwOworfQorCitzdGF0aWMgaW5saW5lIGludCB3aGljaF9idWNrZXQodW5zaWduZWQgaW50IGR1cmF0aW9uKQoreworCWludCBidWNrZXQgPSAwOworCisJLyoKKwkgKiBXZSBrZWVwIHR3byBncm91cHMgb2Ygc3RhdHM7IG9uZSB3aXRoIG5vCisJICogSU8gcGVuZGluZywgb25lIHdpdGhvdXQuCisJICogVGhpcyBhbGxvd3MgdXMgdG8gY2FsY3VsYXRlCisJICogRShkdXJhdGlvbil8aW93YWl0CisJICovCisJaWYgKG5yX2lvd2FpdF9jcHUoKSkKKwkJYnVja2V0ID0gQlVDS0VUUy8yOworCisJaWYgKGR1cmF0aW9uIDwgMTApCisJCXJldHVybiBidWNrZXQ7CisJaWYgKGR1cmF0aW9uIDwgMTAwKQorCQlyZXR1cm4gYnVja2V0ICsgMTsKKwlpZiAoZHVyYXRpb24gPCAxMDAwKQorCQlyZXR1cm4gYnVja2V0ICsgMjsKKwlpZiAoZHVyYXRpb24gPCAxMDAwMCkKKwkJcmV0dXJuIGJ1Y2tldCArIDM7CisJaWYgKGR1cmF0aW9uIDwgMTAwMDAwKQorCQlyZXR1cm4gYnVja2V0ICsgNDsKKwlyZXR1cm4gYnVja2V0ICsgNTsKK30KKworLyoKKyAqIFJldHVybiBhIG11bHRpcGxpZXIgZm9yIHRoZSBleGl0IGxhdGVuY3kgdGhhdCBpcyBpbnRlbmRlZAorICogdG8gdGFrZSBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgaW50byBhY2NvdW50LgorICogVGhlIG1vcmUgcGVyZm9ybWFuY2UgY3JpdGljYWwgd2UgZXN0aW1hdGUgdGhlIHN5c3RlbQorICogdG8gYmUsIHRoZSBoaWdoZXIgdGhpcyBtdWx0aXBsaWVyLCBhbmQgdGh1cyB0aGUgaGlnaGVyCisgKiB0aGUgYmFycmllciB0byBnbyB0byBhbiBleHBlbnNpdmUgQyBzdGF0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGVyZm9ybWFuY2VfbXVsdGlwbGllcih2b2lkKQoreworCWludCBtdWx0ID0gMTsKKworCS8qIGZvciBoaWdoZXIgbG9hZGF2Zywgd2UgYXJlIG1vcmUgcmVsdWN0YW50ICovCisKKwltdWx0ICs9IDIgKiBnZXRfbG9hZGF2ZygpOworCisJLyogZm9yIElPIHdhaXQgdGFza3MgKHBlciBjcHUhKSB3ZSBhZGQgNXggZWFjaCAqLworCW11bHQgKz0gMTAgKiBucl9pb3dhaXRfY3B1KCk7CisKKwlyZXR1cm4gbXVsdDsKK30KKwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtZW51X2RldmljZSwgbWVudV9kZXZpY2VzKTsKIAorc3RhdGljIHZvaWQgbWVudV91cGRhdGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpOworCiAvKioKICAqIG1lbnVfc2VsZWN0IC0gc2VsZWN0cyB0aGUgbmV4dCBpZGxlIHN0YXRlIHRvIGVudGVyCiAgKiBAZGV2OiB0aGUgQ1BVCkBAIC0zOCw0MSArMTc4LDY4IEBACiAJc3RydWN0IG1lbnVfZGV2aWNlICpkYXRhID0gJl9fZ2V0X2NwdV92YXIobWVudV9kZXZpY2VzKTsKIAlpbnQgbGF0ZW5jeV9yZXEgPSBwbV9xb3NfcmVxdWlyZW1lbnQoUE1fUU9TX0NQVV9ETUFfTEFURU5DWSk7CiAJaW50IGk7CisJaW50IG11bHRpcGxpZXI7CiAKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlbiB1c2VyIGhhcyBzZXQgdmVyeSBzdHJpY3QgbGF0ZW5jeSByZXF1aXJlbWVudCAqLwotCWlmICh1bmxpa2VseShsYXRlbmN5X3JlcSA9PSAwKSkgewotCQlkYXRhLT5sYXN0X3N0YXRlX2lkeCA9IDA7Ci0JCXJldHVybiAwOworCWRhdGEtPmxhc3Rfc3RhdGVfaWR4ID0gMDsKKwlkYXRhLT5leGl0X3VzID0gMDsKKworCWlmIChkYXRhLT5uZWVkc191cGRhdGUpIHsKKwkJbWVudV91cGRhdGUoZGV2KTsKKwkJZGF0YS0+bmVlZHNfdXBkYXRlID0gMDsKIAl9CiAKLQkvKiBkZXRlcm1pbmUgdGhlIGV4cGVjdGVkIHJlc2lkZW5jeSB0aW1lICovCi0JZGF0YS0+ZXhwZWN0ZWRfdXMgPQotCQkodTMyKSBrdGltZV90b19ucyh0aWNrX25vaHpfZ2V0X3NsZWVwX2xlbmd0aCgpKSAvIDEwMDA7CisJLyogU3BlY2lhbCBjYXNlIHdoZW4gdXNlciBoYXMgc2V0IHZlcnkgc3RyaWN0IGxhdGVuY3kgcmVxdWlyZW1lbnQgKi8KKwlpZiAodW5saWtlbHkobGF0ZW5jeV9yZXEgPT0gMCkpCisJCXJldHVybiAwOwogCi0JLyogUmVjYWxjdWxhdGUgcHJlZGljdGVkX3VzIGJhc2VkIG9uIHByZWRpY3Rpb25faGlzdG9yeV9wY3QgKi8KLQlkYXRhLT5wcmVkaWN0ZWRfdXMgKj0gUFJFRF9ISVNUT1JZX1BDVDsKLQlkYXRhLT5wcmVkaWN0ZWRfdXMgKz0gKDEwMCAtIFBSRURfSElTVE9SWV9QQ1QpICoKLQkJCQlkYXRhLT5jdXJyZW50X3ByZWRpY3RlZF91czsKLQlkYXRhLT5wcmVkaWN0ZWRfdXMgLz0gMTAwOworCS8qIGRldGVybWluZSB0aGUgZXhwZWN0ZWQgcmVzaWRlbmN5IHRpbWUsIHJvdW5kIHVwICovCisJZGF0YS0+ZXhwZWN0ZWRfdXMgPQorCSAgICBESVZfUk9VTkRfVVAoKHUzMilrdGltZV90b19ucyh0aWNrX25vaHpfZ2V0X3NsZWVwX2xlbmd0aCgpKSwgMTAwMCk7CisKKworCWRhdGEtPmJ1Y2tldCA9IHdoaWNoX2J1Y2tldChkYXRhLT5leHBlY3RlZF91cyk7CisKKwltdWx0aXBsaWVyID0gcGVyZm9ybWFuY2VfbXVsdGlwbGllcigpOworCisJLyoKKwkgKiBpZiB0aGUgY29ycmVjdGlvbiBmYWN0b3IgaXMgMCAoZWcgZmlyc3QgdGltZSBpbml0IG9yIGNwdSBob3RwbHVnCisJICogZXRjKSwgd2UgYWN0dWFsbHkgd2FudCB0byBzdGFydCBvdXQgd2l0aCBhIHVuaXR5IGZhY3Rvci4KKwkgKi8KKwlpZiAoZGF0YS0+Y29ycmVjdGlvbl9mYWN0b3JbZGF0YS0+YnVja2V0XSA9PSAwKQorCQlkYXRhLT5jb3JyZWN0aW9uX2ZhY3RvcltkYXRhLT5idWNrZXRdID0gUkVTT0xVVElPTiAqIERFQ0FZOworCisJLyogTWFrZSBzdXJlIHRvIHJvdW5kIHVwIGZvciBoYWxmIG1pY3Jvc2Vjb25kcyAqLworCWRhdGEtPnByZWRpY3RlZF91cyA9IERJVl9ST1VORF9DTE9TRVNUKAorCQlkYXRhLT5leHBlY3RlZF91cyAqIGRhdGEtPmNvcnJlY3Rpb25fZmFjdG9yW2RhdGEtPmJ1Y2tldF0sCisJCVJFU09MVVRJT04gKiBERUNBWSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8gZGVmYXVsdCB0byBDMSAoaGx0KSwgbm90IHRvIGJ1c3kgcG9sbGluZworCSAqIHVubGVzcyB0aGUgdGltZXIgaXMgaGFwcGVuaW5nIHJlYWxseSByZWFsbHkgc29vbi4KKwkgKi8KKwlpZiAoZGF0YS0+ZXhwZWN0ZWRfdXMgPiA1KQorCQlkYXRhLT5sYXN0X3N0YXRlX2lkeCA9IENQVUlETEVfRFJJVkVSX1NUQVRFX1NUQVJUOworCiAKIAkvKiBmaW5kIHRoZSBkZWVwZXN0IGlkbGUgc3RhdGUgdGhhdCBzYXRpc2ZpZXMgb3VyIGNvbnN0cmFpbnRzICovCi0JZm9yIChpID0gQ1BVSURMRV9EUklWRVJfU1RBVEVfU1RBUlQgKyAxOyBpIDwgZGV2LT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJZm9yIChpID0gQ1BVSURMRV9EUklWRVJfU1RBVEVfU1RBUlQ7IGkgPCBkZXYtPnN0YXRlX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IGNwdWlkbGVfc3RhdGUgKnMgPSAmZGV2LT5zdGF0ZXNbaV07CiAKLQkJaWYgKHMtPnRhcmdldF9yZXNpZGVuY3kgPiBkYXRhLT5leHBlY3RlZF91cykKLQkJCWJyZWFrOwogCQlpZiAocy0+dGFyZ2V0X3Jlc2lkZW5jeSA+IGRhdGEtPnByZWRpY3RlZF91cykKIAkJCWJyZWFrOwogCQlpZiAocy0+ZXhpdF9sYXRlbmN5ID4gbGF0ZW5jeV9yZXEpCiAJCQlicmVhazsKKwkJaWYgKHMtPmV4aXRfbGF0ZW5jeSAqIG11bHRpcGxpZXIgPiBkYXRhLT5wcmVkaWN0ZWRfdXMpCisJCQlicmVhazsKKwkJZGF0YS0+ZXhpdF91cyA9IHMtPmV4aXRfbGF0ZW5jeTsKKwkJZGF0YS0+bGFzdF9zdGF0ZV9pZHggPSBpOwogCX0KIAotCWRhdGEtPmxhc3Rfc3RhdGVfaWR4ID0gaSAtIDE7Ci0JcmV0dXJuIGkgLSAxOworCXJldHVybiBkYXRhLT5sYXN0X3N0YXRlX2lkeDsKIH0KIAogLyoqCi0gKiBtZW51X3JlZmxlY3QgLSBhdHRlbXB0cyB0byBndWVzcyB3aGF0IGhhcHBlbmVkIGFmdGVyIGVudHJ5CisgKiBtZW51X3JlZmxlY3QgLSByZWNvcmRzIHRoYXQgZGF0YSBzdHJ1Y3R1cmVzIG5lZWQgdXBkYXRlCiAgKiBAZGV2OiB0aGUgQ1BVCiAgKgogICogTk9URTogaXQncyBpbXBvcnRhbnQgdG8gYmUgZmFzdCBoZXJlIGJlY2F1c2UgdGhpcyBvcGVyYXRpb24gd2lsbCBhZGQgdG8KQEAgLTgxLDM5ICsyNDgsNjMgQEAKIHN0YXRpYyB2b2lkIG1lbnVfcmVmbGVjdChzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWVudV9kZXZpY2UgKmRhdGEgPSAmX19nZXRfY3B1X3ZhcihtZW51X2RldmljZXMpOworCWRhdGEtPm5lZWRzX3VwZGF0ZSA9IDE7Cit9CisKKy8qKgorICogbWVudV91cGRhdGUgLSBhdHRlbXB0cyB0byBndWVzcyB3aGF0IGhhcHBlbmVkIGFmdGVyIGVudHJ5CisgKiBAZGV2OiB0aGUgQ1BVCisgKi8KK3N0YXRpYyB2b2lkIG1lbnVfdXBkYXRlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZW51X2RldmljZSAqZGF0YSA9ICZfX2dldF9jcHVfdmFyKG1lbnVfZGV2aWNlcyk7CiAJaW50IGxhc3RfaWR4ID0gZGF0YS0+bGFzdF9zdGF0ZV9pZHg7CiAJdW5zaWduZWQgaW50IGxhc3RfaWRsZV91cyA9IGNwdWlkbGVfZ2V0X2xhc3RfcmVzaWRlbmN5KGRldik7CiAJc3RydWN0IGNwdWlkbGVfc3RhdGUgKnRhcmdldCA9ICZkZXYtPnN0YXRlc1tsYXN0X2lkeF07CiAJdW5zaWduZWQgaW50IG1lYXN1cmVkX3VzOworCXU2NCBuZXdfZmFjdG9yOwogCiAJLyoKIAkgKiBVZ2gsIHRoaXMgaWRsZSBzdGF0ZSBkb2Vzbid0IHN1cHBvcnQgcmVzaWRlbmN5IG1lYXN1cmVtZW50cywgc28gd2UKIAkgKiBhcmUgYmFzaWNhbGx5IGxvc3QgaW4gdGhlIGRhcmsuICBBcyBhIGNvbXByb21pc2UsIGFzc3VtZSB3ZSBzbGVwdAotCSAqIGZvciBvbmUgZnVsbCBzdGFuZGFyZCB0aW1lciB0aWNrLiAgSG93ZXZlciwgYmUgYXdhcmUgdGhhdCB0aGlzCi0JICogY291bGQgcG90ZW50aWFsbHkgcmVzdWx0IGluIGEgc3Vib3B0aW1hbCBzdGF0ZSB0cmFuc2l0aW9uLgorCSAqIGZvciB0aGUgd2hvbGUgZXhwZWN0ZWQgdGltZS4KIAkgKi8KIAlpZiAodW5saWtlbHkoISh0YXJnZXQtPmZsYWdzICYgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQpKSkKLQkJbGFzdF9pZGxlX3VzID0gVVNFQ19QRVJfU0VDIC8gSFo7CisJCWxhc3RfaWRsZV91cyA9IGRhdGEtPmV4cGVjdGVkX3VzOworCisKKwltZWFzdXJlZF91cyA9IGxhc3RfaWRsZV91czsKIAogCS8qCi0JICogbWVhc3VyZWRfdXMgYW5kIGVsYXBzZWRfdXMgYXJlIHRoZSBjdW11bGF0aXZlIGlkbGUgdGltZSwgc2luY2UgdGhlCi0JICogbGFzdCB0aW1lIHdlIHdlcmUgd29rZW4gb3V0IG9mIGlkbGUgYnkgYW4gaW50ZXJydXB0LgorCSAqIFdlIGNvcnJlY3QgZm9yIHRoZSBleGl0IGxhdGVuY3k7IHdlIGFyZSBhc3N1bWluZyBoZXJlIHRoYXQgdGhlCisJICogZXhpdCBsYXRlbmN5IGhhcHBlbnMgYWZ0ZXIgdGhlIGV2ZW50IHRoYXQgd2UncmUgaW50ZXJlc3RlZCBpbi4KIAkgKi8KLQlpZiAoZGF0YS0+ZWxhcHNlZF91cyA8PSBkYXRhLT5lbGFwc2VkX3VzICsgbGFzdF9pZGxlX3VzKQotCQltZWFzdXJlZF91cyA9IGRhdGEtPmVsYXBzZWRfdXMgKyBsYXN0X2lkbGVfdXM7CisJaWYgKG1lYXN1cmVkX3VzID4gZGF0YS0+ZXhpdF91cykKKwkJbWVhc3VyZWRfdXMgLT0gZGF0YS0+ZXhpdF91czsKKworCisJLyogdXBkYXRlIG91ciBjb3JyZWN0aW9uIHJhdGlvICovCisKKwluZXdfZmFjdG9yID0gZGF0YS0+Y29ycmVjdGlvbl9mYWN0b3JbZGF0YS0+YnVja2V0XQorCQkJKiAoREVDQVkgLSAxKSAvIERFQ0FZOworCisJaWYgKGRhdGEtPmV4cGVjdGVkX3VzID4gMCAmJiBkYXRhLT5tZWFzdXJlZF91cyA8IE1BWF9JTlRFUkVTVElORykKKwkJbmV3X2ZhY3RvciArPSBSRVNPTFVUSU9OICogbWVhc3VyZWRfdXMgLyBkYXRhLT5leHBlY3RlZF91czsKIAllbHNlCi0JCW1lYXN1cmVkX3VzID0gLTE7CisJCS8qCisJCSAqIHdlIHdlcmUgaWRsZSBzbyBsb25nIHRoYXQgd2UgY291bnQgaXQgYXMgYSBwZXJmZWN0CisJCSAqIHByZWRpY3Rpb24KKwkJICovCisJCW5ld19mYWN0b3IgKz0gUkVTT0xVVElPTjsKIAotCS8qIFByZWRpY3QgdGltZSB1bnRpbCBuZXh0IGJyZWFrIGV2ZW50ICovCi0JZGF0YS0+Y3VycmVudF9wcmVkaWN0ZWRfdXMgPSBtYXgobWVhc3VyZWRfdXMsIGRhdGEtPmxhc3RfbWVhc3VyZWRfdXMpOworCS8qCisJICogV2UgZG9uJ3Qgd2FudCAwIGFzIGZhY3Rvcjsgd2UgYWx3YXlzIHdhbnQgYXQgbGVhc3QKKwkgKiBhIHRpbnkgYml0IG9mIGVzdGltYXRlZCB0aW1lLgorCSAqLworCWlmIChuZXdfZmFjdG9yID09IDApCisJCW5ld19mYWN0b3IgPSAxOwogCi0JaWYgKGxhc3RfaWRsZV91cyArIEJSRUFLX0ZVWlogPAotCSAgICBkYXRhLT5leHBlY3RlZF91cyAtIHRhcmdldC0+ZXhpdF9sYXRlbmN5KSB7Ci0JCWRhdGEtPmxhc3RfbWVhc3VyZWRfdXMgPSBtZWFzdXJlZF91czsKLQkJZGF0YS0+ZWxhcHNlZF91cyA9IDA7Ci0JfSBlbHNlIHsKLQkJZGF0YS0+ZWxhcHNlZF91cyA9IG1lYXN1cmVkX3VzOwotCX0KKwlkYXRhLT5jb3JyZWN0aW9uX2ZhY3RvcltkYXRhLT5idWNrZXRdID0gbmV3X2ZhY3RvcjsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggODcxYzEzYi4uMTJmMzU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtMjg2LDcgKzI4Niw3IEBACiAgKgkJCWlzIGlycmVzcGVjdGl2ZSBvZiB0aGUgbWVtb3J5IGRldmljZXMgYmVpbmcgbW91bnRlZAogICoJCQlvbiBib3RoIHNpZGVzIG9mIHRoZSBtZW1vcnkgc3RpY2suCiAgKgotICogU29ja2V0IHNldDoJCUFsbCBvZiB0aGUgbWVtb3J5IHN0aWNrcyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgZm9yCisgKiBTb2NrZXQgc2V0OgkJQWxsIG9mIHRoZSBtZW1vcnkgc3RpY2tzIHRoYXQgYXJlIHJlcXVpcmVkIGZvcgogICoJCQlhIHNpbmdsZSBtZW1vcnkgYWNjZXNzIG9yIGFsbCBvZiB0aGUgbWVtb3J5IHN0aWNrcwogICoJCQlzcGFubmVkIGJ5IGEgY2hpcC1zZWxlY3Qgcm93LiAgQSBzaW5nbGUgc29ja2V0IHNldAogICoJCQloYXMgdHdvIGNoaXAtc2VsZWN0IHJvd3MgYW5kIGlmIGRvdWJsZS1zaWRlZCBzdGlja3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCmluZGV4IGY3NGVkYWUuLmU0ODY0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYwpAQCAtNDQ0LDE2ICs0NDQsMTMgQEAKIAljYXJkLT5ndWlkID0gZ3VpZDsKIAogCW11dGV4X2xvY2soJmNhcmRfbXV0ZXgpOwotCWNvbmZpZ19yb20gPSBnZW5lcmF0ZV9jb25maWdfcm9tKGNhcmQsICZsZW5ndGgpOwotCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxpbmssICZjYXJkX2xpc3QpOwotCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CiAKKwljb25maWdfcm9tID0gZ2VuZXJhdGVfY29uZmlnX3JvbShjYXJkLCAmbGVuZ3RoKTsKIAlyZXQgPSBjYXJkLT5kcml2ZXItPmVuYWJsZShjYXJkLCBjb25maWdfcm9tLCBsZW5ndGgpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW11dGV4X2xvY2soJmNhcmRfbXV0ZXgpOwotCQlsaXN0X2RlbCgmY2FyZC0+bGluayk7Ci0JCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7Ci0JfQorCWlmIChyZXQgPT0gMCkKKwkJbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGluaywgJmNhcmRfbGlzdCk7CisKKwltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKaW5kZXggNDc5YjIyZi4uZGE2MjhjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKQEAgLTgzNCw3ICs4MzQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciB0b3BvbG9neV9tYXAgPSB7Ci0JLmxlbmd0aAkJCT0gMHgyMDAsCisJLmxlbmd0aAkJCT0gMHg0MDAsCiAJLmFkZHJlc3NfY2FsbGJhY2sJPSBoYW5kbGVfdG9wb2xvZ3lfbWFwLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaAppbmRleCA2MDUyODE2Li43ZmY2ZTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaApAQCAtOTYsNiArOTYsMjAgQEAKIGludCBmd19jb21wdXRlX2Jsb2NrX2NyYyh1MzIgKmJsb2NrKTsKIHZvaWQgZndfc2NoZWR1bGVfYm1fd29yayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBkZWxheSk7CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X2NhcmQgKmZ3X2NhcmRfZ2V0KHN0cnVjdCBmd19jYXJkICpjYXJkKQoreworCWtyZWZfZ2V0KCZjYXJkLT5rcmVmKTsKKworCXJldHVybiBjYXJkOworfQorCit2b2lkIGZ3X2NhcmRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmd19jYXJkX3B1dChzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3sKKwlrcmVmX3B1dCgmY2FyZC0+a3JlZiwgZndfY2FyZF9yZWxlYXNlKTsKK30KKwogCiAvKiAtY2RldiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IDc2YjMyMWIuLjVkNTI0MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCkBAIC0xMjc5LDggKzEyNzksOCBAQAogCSAqIHRoZSBpbnZlcnRlZCBxdWFkbGV0cyBhbmQgYSBoZWFkZXIgcXVhZGxldCwgd2Ugc2hpZnQgb25lCiAJICogYml0IGV4dHJhIHRvIGdldCB0aGUgYWN0dWFsIG51bWJlciBvZiBzZWxmIElEcy4KIAkgKi8KLQlzZWxmX2lkX2NvdW50ID0gKHJlZyA+PiAzKSAmIDB4M2ZmOwotCWlmIChzZWxmX2lkX2NvdW50ID09IDApIHsKKwlzZWxmX2lkX2NvdW50ID0gKHJlZyA+PiAzKSAmIDB4ZmY7CisJaWYgKHNlbGZfaWRfY291bnQgPT0gMCB8fCBzZWxmX2lkX2NvdW50ID4gMjUyKSB7CiAJCWZ3X25vdGlmeSgiaW5jb25zaXN0ZW50IHNlbGYgSURzXG4iKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKaW5kZXggZTVkZjgyMi4uNTBmMDE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKQEAgLTM1NCw4ICszNTQsNyBAQAogCS8qIERWaUNPIE1vbW9iYXkgRlgtM0Egd2l0aCBUU0I0MkFBOUEgYnJpZGdlICovIHsKIAkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI4MDAsCiAJCS5tb2RlbAkJCT0gMHgwMDAwMDAsCi0JCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfREVMQVlfSU5RVUlSWSB8Ci0JCQkJCSAgU0JQMl9XT1JLQVJPVU5EX1BPV0VSX0NPTkRJVElPTiwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9QT1dFUl9DT05ESVRJT04sCiAJfSwKIAkvKiBJbml0aW8gYnJpZGdlcywgYWN0dWFsbHkgb25seSBuZWVkZWQgZm9yIHNvbWUgb2xkZXIgb25lcyAqLyB7CiAJCS5maXJtd2FyZV9yZXZpc2lvbgk9IDB4MDAwMjAwLApAQCAtNDI1LDE5ICs0MjQsMjAgQEAKIAlzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1ID0gY2FsbGJhY2tfZGF0YTsKIAlzdHJ1Y3Qgc2JwMl9vcmIgKm9yYjsKIAlzdHJ1Y3Qgc2JwMl9zdGF0dXMgc3RhdHVzOwotCXNpemVfdCBoZWFkZXJfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHRjb2RlICE9IFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1QgfHwKLQkgICAgbGVuZ3RoID09IDAgfHwgbGVuZ3RoID4gc2l6ZW9mKHN0YXR1cykpIHsKKwkgICAgbGVuZ3RoIDwgOCB8fCBsZW5ndGggPiBzaXplb2Yoc3RhdHVzKSkgewogCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX1RZUEVfRVJST1IpOwogCQlyZXR1cm47CiAJfQogCi0JaGVhZGVyX3NpemUgPSBtaW4obGVuZ3RoLCAyICogc2l6ZW9mKHUzMikpOwotCWZ3X21lbWNweV9mcm9tX2JlMzIoJnN0YXR1cywgcGF5bG9hZCwgaGVhZGVyX3NpemUpOwotCWlmIChsZW5ndGggPiBoZWFkZXJfc2l6ZSkKLQkJbWVtY3B5KHN0YXR1cy5kYXRhLCBwYXlsb2FkICsgOCwgbGVuZ3RoIC0gaGVhZGVyX3NpemUpOworCXN0YXR1cy5zdGF0dXMgID0gYmUzMl90b19jcHVwKHBheWxvYWQpOworCXN0YXR1cy5vcmJfbG93ID0gYmUzMl90b19jcHVwKHBheWxvYWQgKyA0KTsKKwltZW1zZXQoc3RhdHVzLmRhdGEsIDAsIHNpemVvZihzdGF0dXMuZGF0YSkpOworCWlmIChsZW5ndGggPiA4KQorCQltZW1jcHkoc3RhdHVzLmRhdGEsIHBheWxvYWQgKyA4LCBsZW5ndGggLSA4KTsKKwogCWlmIChTVEFUVVNfR0VUX1NPVVJDRShzdGF0dXMpID09IDIgfHwgU1RBVFVTX0dFVF9TT1VSQ0Uoc3RhdHVzKSA9PSAzKSB7CiAJCWZ3X25vdGlmeSgibm9uLW9yYiByZWxhdGVkIHN0YXR1cyB3cml0ZSwgbm90IGhhbmRsZWRcbiIpOwogCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTVBMRVRFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMgYi9kcml2ZXJzL2Zpcm13YXJlL21lbW1hcC5jCmluZGV4IGQ1ZWE4YTYuLjU2ZjkyMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9tZW1tYXAuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiB7CiAJc3RydWN0IGZpcm13YXJlX21hcF9lbnRyeSAqZW50cnk7CiAKLQllbnRyeSA9IGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZihzdHJ1Y3QgZmlybXdhcmVfbWFwX2VudHJ5KSk7CisJZW50cnkgPSBhbGxvY19ib290bWVtKHNpemVvZihzdHJ1Y3QgZmlybXdhcmVfbWFwX2VudHJ5KSk7CiAJaWYgKFdBUk5fT04oIWVudHJ5KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggNmI0YzQ4NC4uMmFkMDEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTE2Miw2ICsxNjIsMTYgQEAKIAkgIFNheSB5ZXMgaGVyZSB0byBhY2Nlc3MgdGhlIEdQSU8gc2lnbmFscyBvZiBXTTgzMXggcG93ZXIgbWFuYWdlbWVudAogCSAgY2hpcHMgZnJvbSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MuCiAKK2NvbmZpZyBHUElPX0FEUDU1MjAKKwl0cmlzdGF0ZSAiR1BJTyBTdXBwb3J0IGZvciBBRFA1NTIwIFBNSUMiCisJZGVwZW5kcyBvbiBQTUlDX0FEUDU1MjAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG9uLWNoaXAgR1BJTyBmb3VuZAorCSAgb24gQW5hbG9nIERldmljZXMgQURQNTUyMCBQTUlDcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYWRwNTUyMC1ncGlvLgorCiBjb21tZW50ICJQQ0kgR1BJTyBleHBhbmRlcnM6IgogCiBjb25maWcgR1BJT19CVDhYWApAQCAtMTgwLDYgKzE5MCwxMiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgR1BJT19MQU5HV0VMTAorCWJvb2wgIkludGVsIE1vb3Jlc3Rvd24gUGxhdGZvcm0gTGFuZ3dlbGwgR1BJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IEludGVsIE1vb3Jlc3Rvd24gcGxhdGZvcm0gR1BJTy4KKwogY29tbWVudCAiU1BJIEdQSU8gZXhwYW5kZXJzOiIKIAogY29uZmlnIEdQSU9fTUFYNzMwMQpAQCAtMTk1LDQgKzIxMSwyMyBAQAogCSAgU1BJIGRyaXZlciBmb3IgTWljcm9jaGlwIE1DUDIzUzA4IEkvTyBleHBhbmRlci4gIFRoaXMgcHJvdmlkZXMKIAkgIGEgR1BJTyBpbnRlcmZhY2Ugc3VwcG9ydGluZyBpbnB1dHMgYW5kIG91dHB1dHMuCiAKK2NvbmZpZyBHUElPX01DMzM4ODAKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1DMzM4ODAgaGlnaC1zaWRlL2xvdy1zaWRlIHN3aXRjaCIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIKKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBGcmVlc2NhbGUgTUMzMzg4MCBoaWdoLXNpZGUvbG93LXNpZGUgc3dpdGNoLgorCSAgVGhpcyBwcm92aWRlcyBHUElPIGludGVyZmFjZSBzdXBwb3J0aW5nIGlucHV0cyBhbmQgb3V0cHV0cy4KKworY29tbWVudCAiQUM5NyBHUElPIGV4cGFuZGVyczoiCisKK2NvbmZpZyBHUElPX1VDQjE0MDAKKwlib29sICJQaGlsaXBzIFVDQjE0MDAgR1BJTyIKKwlkZXBlbmRzIG9uIFVDQjE0MDBfQ09SRQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBVQ0IxNDAwIEdQSU8gcGlucy4KKwkgIFRoZSBVQ0IxNDAwIGlzIGFuIEFDOTcgYXVkaW8gY29kZWMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVjYjE0MDBfZ3Bpby4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZSBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQppbmRleCBlYTdjNzQ1Li4wMGE1MzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCkBAIC00LDEzICs0LDE3IEBACiAKIG9iai0kKENPTkZJR19HUElPTElCKQkJKz0gZ3Bpb2xpYi5vCiAKK29iai0kKENPTkZJR19HUElPX0FEUDU1MjApCSs9IGFkcDU1MjAtZ3Bpby5vCitvYmotJChDT05GSUdfR1BJT19MQU5HV0VMTCkJKz0gbGFuZ3dlbGxfZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19NQVg3MzAxKQkrPSBtYXg3MzAxLm8KIG9iai0kKENPTkZJR19HUElPX01BWDczMlgpCSs9IG1heDczMngubworb2JqLSQoQ09ORklHX0dQSU9fTUMzMzg4MCkJKz0gbWMzMzg4MC5vCiBvYmotJChDT05GSUdfR1BJT19NQ1AyM1MwOCkJKz0gbWNwMjNzMDgubwogb2JqLSQoQ09ORklHX0dQSU9fUENBOTUzWCkJKz0gcGNhOTUzeC5vCiBvYmotJChDT05GSUdfR1BJT19QQ0Y4NTdYKQkrPSBwY2Y4NTd4Lm8KIG9iai0kKENPTkZJR19HUElPX1BMMDYxKQkrPSBwbDA2MS5vCiBvYmotJChDT05GSUdfR1BJT19UV0w0MDMwKQkrPSB0d2w0MDMwLWdwaW8ubworb2JqLSQoQ09ORklHX0dQSU9fVUNCMTQwMCkJKz0gdWNiMTQwMF9ncGlvLm8KIG9iai0kKENPTkZJR19HUElPX1hJTElOWCkJKz0geGlsaW54X2dwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fQlQ4WFgpCSs9IGJ0OHh4Z3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19WUjQxWFgpCSs9IHZyNDF4eF9naXUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2FkcDU1MjAtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2FkcDU1MjAtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDViYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vYWRwNTUyMC1ncGlvLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBHUElPIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgQURQNTUyMCBNRkQgUE1JQ3MKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworc3RydWN0IGFkcDU1MjBfZ3BpbyB7CisJc3RydWN0IGRldmljZSAqbWFzdGVyOworCXN0cnVjdCBncGlvX2NoaXAgZ3Bpb19jaGlwOworCXVuc2lnbmVkIGNoYXIgbHV0W0FEUDU1MjBfTUFYR1BJT1NdOworCXVuc2lnbmVkIGxvbmcgb3V0cHV0OworfTsKKworc3RhdGljIGludCBhZHA1NTIwX2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZikKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ncGlvICpkZXY7CisJdWludDhfdCByZWdfdmFsOworCisJZGV2ID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhZHA1NTIwX2dwaW8sIGdwaW9fY2hpcCk7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBkZWRpY2F0ZWQgcmVnaXN0ZXJzIGZvciBHUElPIElOL09VVC4KKwkgKiBNYWtlIHN1cmUgd2UgcmV0dXJuIHRoZSByaWdodCB2YWx1ZSwgZXZlbiB3aGVuIGNvbmZpZ3VyZWQgYXMgb3V0cHV0CisJICovCisKKwlpZiAodGVzdF9iaXQob2ZmLCAmZGV2LT5vdXRwdXQpKQorCQlhZHA1NTIwX3JlYWQoZGV2LT5tYXN0ZXIsIEdQSU9fT1VULCAmcmVnX3ZhbCk7CisJZWxzZQorCQlhZHA1NTIwX3JlYWQoZGV2LT5tYXN0ZXIsIEdQSU9fSU4sICZyZWdfdmFsKTsKKworCXJldHVybiAhIShyZWdfdmFsICYgZGV2LT5sdXRbb2ZmXSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkcDU1MjBfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJdW5zaWduZWQgb2ZmLCBpbnQgdmFsKQoreworCXN0cnVjdCBhZHA1NTIwX2dwaW8gKmRldjsKKwlkZXYgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFkcDU1MjBfZ3BpbywgZ3Bpb19jaGlwKTsKKworCWlmICh2YWwpCisJCWFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fT1VULCBkZXYtPmx1dFtvZmZdKTsKKwllbHNlCisJCWFkcDU1MjBfY2xyX2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fT1VULCBkZXYtPmx1dFtvZmZdKTsKK30KKworc3RhdGljIGludCBhZHA1NTIwX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZikKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ncGlvICpkZXY7CisJZGV2ID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhZHA1NTIwX2dwaW8sIGdwaW9fY2hpcCk7CisKKwljbGVhcl9iaXQob2ZmLCAmZGV2LT5vdXRwdXQpOworCisJcmV0dXJuIGFkcDU1MjBfY2xyX2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fQ0ZHXzIsIGRldi0+bHV0W29mZl0pOworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCXVuc2lnbmVkIG9mZiwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ncGlvICpkZXY7CisJaW50IHJldCA9IDA7CisJZGV2ID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhZHA1NTIwX2dwaW8sIGdwaW9fY2hpcCk7CisKKwlzZXRfYml0KG9mZiwgJmRldi0+b3V0cHV0KTsKKworCWlmICh2YWwpCisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldi0+bWFzdGVyLCBHUElPX09VVCwgZGV2LT5sdXRbb2ZmXSk7CisJZWxzZQorCQlyZXQgfD0gYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgR1BJT19PVVQsIGRldi0+bHV0W29mZl0pOworCisJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fQ0ZHXzIsIGRldi0+bHV0W29mZl0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYWRwNTUyMF9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkcDU1MjBfZ3Bpb19wbGF0ZnJvbV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBhZHA1NTIwX2dwaW8gKmRldjsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKKwlpbnQgcmV0LCBpLCBncGlvczsKKwl1bnNpZ25lZCBjaGFyIGN0bF9tYXNrID0gMDsKKworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwZGV2LT5pZCAhPSBJRF9BRFA1NTIwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm9ubHkgQURQNTUyMCBzdXBwb3J0cyBHUElPXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5tYXN0ZXIgPSBwZGV2LT5kZXYucGFyZW50OworCisJZm9yIChncGlvcyA9IDAsIGkgPSAwOyBpIDwgQURQNTUyMF9NQVhHUElPUzsgaSsrKQorCQlpZiAocGRhdGEtPmdwaW9fZW5fbWFzayAmICgxIDw8IGkpKQorCQkJZGV2LT5sdXRbZ3Bpb3MrK10gPSAxIDw8IGk7CisKKwlpZiAoZ3Bpb3MgPCAxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWdjID0gJmRldi0+Z3Bpb19jaGlwOworCWdjLT5kaXJlY3Rpb25faW5wdXQgID0gYWRwNTUyMF9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IGFkcDU1MjBfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCWdjLT5nZXQgPSBhZHA1NTIwX2dwaW9fZ2V0X3ZhbHVlOworCWdjLT5zZXQgPSBhZHA1NTIwX2dwaW9fc2V0X3ZhbHVlOworCWdjLT5jYW5fc2xlZXAgPSAxOworCisJZ2MtPmJhc2UgPSBwZGF0YS0+Z3Bpb19zdGFydDsKKwlnYy0+bmdwaW8gPSBncGlvczsKKwlnYy0+bGFiZWwgPSBwZGV2LT5uYW1lOworCWdjLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJcmV0ID0gYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgR1BJT19DRkdfMSwKKwkJcGRhdGEtPmdwaW9fZW5fbWFzayk7CisKKwlpZiAocGRhdGEtPmdwaW9fZW5fbWFzayAmIEdQSU9fQzMpCisJCWN0bF9tYXNrIHw9IEMzX01PREU7CisKKwlpZiAocGRhdGEtPmdwaW9fZW5fbWFzayAmIEdQSU9fUjMpCisJCWN0bF9tYXNrIHw9IFIzX01PREU7CisKKwlpZiAoY3RsX21hc2spCisJCXJldCA9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIExFRF9DT05UUk9MLAorCQkJY3RsX21hc2spOworCisJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fUFVMTFVQLAorCQlwZGF0YS0+Z3Bpb19wdWxsdXBfbWFzayk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byB3cml0ZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGdwaW9jaGlwX2FkZCgmZGV2LT5ncGlvX2NoaXApOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTUyMF9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHA1NTIwX2dwaW8gKmRldjsKKwlpbnQgcmV0OworCisJZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZkZXYtPmdwaW9fY2hpcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBmYWlsZWQsICVkXG4iLAorCQkJCSJncGlvY2hpcF9yZW1vdmUoKSIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWRwNTUyMF9ncGlvX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJhZHA1NTIwLWdwaW8iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBhZHA1NTIwX2dwaW9fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZHA1NTIwX2dwaW9fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkcDU1MjBfZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWRwNTUyMF9ncGlvX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhZHA1NTIwX2dwaW9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA1NTIwX2dwaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhZHA1NTIwX2dwaW9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFkcDU1MjBfZ3Bpb19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1BJTyBBRFA1NTIwIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphZHA1NTIwLWdwaW8iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYwppbmRleCA5ODRiNTg3Li4yNTU5ZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCkBAIC00Niw4ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQotI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAvKiBTdGVhbCB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgYnR0diBkcml2ZXIuICovCiAjaW5jbHVkZSAiLi4vbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4NDguaCIKQEAgLTMzMSwxMyArMzMwLDEzIEBACiAJLnJlc3VtZQkJPSBidDh4eGdwaW9fcmVzdW1lLAogfTsKIAotc3RhdGljIGludCBidDh4eGdwaW9faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYnQ4eHhncGlvX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYnQ4eHhncGlvX3BjaV9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoYnQ4eHhncGlvX2luaXQpCiAKLXN0YXRpYyB2b2lkIGJ0OHh4Z3Bpb19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYnQ4eHhncGlvX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJ0OHh4Z3Bpb19wY2lfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDUxYThkNDEuLmJiMTFhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNyw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAKIAogLyogT3B0aW9uYWwgaW1wbGVtZW50YXRpb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIEdQSU8gaW50ZXJmYWNlcy4KQEAgLTQ5LDYgKzUxLDEzIEBACiAjZGVmaW5lIEZMQUdfUkVTRVJWRUQJMgogI2RlZmluZSBGTEFHX0VYUE9SVAkzCS8qIHByb3RlY3RlZCBieSBzeXNmc19sb2NrICovCiAjZGVmaW5lIEZMQUdfU1lTRlMJNAkvKiBleHBvcnRlZCB2aWEgL3N5cy9jbGFzcy9ncGlvL2NvbnRyb2wgKi8KKyNkZWZpbmUgRkxBR19UUklHX0ZBTEwJNQkvKiB0cmlnZ2VyIG9uIGZhbGxpbmcgZWRnZSAqLworI2RlZmluZSBGTEFHX1RSSUdfUklTRQk2CS8qIHRyaWdnZXIgb24gcmlzaW5nIGVkZ2UgKi8KKworI2RlZmluZSBQREVTQ19JRF9TSElGVAkxNgkvKiBhZGQgbmV3IGZsYWdzIGJlZm9yZSB0aGlzIG9uZSAqLworCisjZGVmaW5lIEdQSU9fRkxBR1NfTUFTSwkJKCgxIDw8IFBERVNDX0lEX1NISUZUKSAtIDEpCisjZGVmaW5lIEdQSU9fVFJJR0dFUl9NQVNLCShCSVQoRkxBR19UUklHX0ZBTEwpIHwgQklUKEZMQUdfVFJJR19SSVNFKSkKIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwogCWNvbnN0IGNoYXIJCSpsYWJlbDsKQEAgLTU2LDYgKzY1LDE1IEBACiB9Owogc3RhdGljIHN0cnVjdCBncGlvX2Rlc2MgZ3Bpb19kZXNjW0FSQ0hfTlJfR1BJT1NdOwogCisjaWZkZWYgQ09ORklHX0dQSU9fU1lTRlMKK3N0cnVjdCBwb2xsX2Rlc2MgeworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCBzeXNmc19kaXJlbnQJKnZhbHVlX3NkOworfTsKKworc3RhdGljIHN0cnVjdCBpZHIgcGRlc2NfaWRyOworI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXNjX3NldF9sYWJlbChzdHJ1Y3QgZ3Bpb19kZXNjICpkLCBjb25zdCBjaGFyICpsYWJlbCkKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKQEAgLTE4OCwxMCArMjA2LDEwIEBACiAgKiAgIC92YWx1ZQogICogICAgICAqIGFsd2F5cyByZWFkYWJsZSwgc3ViamVjdCB0byBoYXJkd2FyZSBiZWhhdmlvcgogICogICAgICAqIG1heSBiZSB3cml0YWJsZSwgYXMgemVyby9ub256ZXJvCi0gKgotICogUkVWSVNJVCB0aGVyZSB3aWxsIGxpa2VseSBiZSBhbiBhdHRyaWJ1dGUgZm9yIGNvbmZpZ3VyaW5nIGFzeW5jCi0gKiBub3RpZmljYXRpb25zLCBlLmcuIHRvIHNwZWNpZnkgcG9sbGluZyBpbnRlcnZhbCBvciBJUlEgdHJpZ2dlciB0eXBlCi0gKiB0aGF0IHdvdWxkIGZvciBleGFtcGxlIHRyaWdnZXIgYSBwb2xsKCkgb24gdGhlICJ2YWx1ZSIuCisgKiAgIC9lZGdlCisgKiAgICAgICogY29uZmlndXJlcyBiZWhhdmlvciBvZiBwb2xsKDIpIG9uIC92YWx1ZQorICogICAgICAqIGF2YWlsYWJsZSBvbmx5IGlmIHBpbiBjYW4gZ2VuZXJhdGUgSVJRcyBvbiBpbnB1dAorICogICAgICAqIGlzIHJlYWQvd3JpdGUgYXMgIm5vbmUiLCAiZmFsbGluZyIsICJyaXNpbmciLCBvciAiYm90aCIKICAqLwogCiBzdGF0aWMgc3NpemVfdCBncGlvX2RpcmVjdGlvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI4OCw2ICszMDYsMTc1IEBACiBzdGF0aWMgLypjb25zdCovIERFVklDRV9BVFRSKHZhbHVlLCAwNjQ0LAogCQlncGlvX3ZhbHVlX3Nob3csIGdwaW9fdmFsdWVfc3RvcmUpOwogCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb19zeXNmc19pcnEoaW50IGlycSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJKndvcmsgPSBwcml2OworCisJc2NoZWR1bGVfd29yayh3b3JrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fbm90aWZ5X3N5c2ZzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcG9sbF9kZXNjCSpwZGVzYzsKKworCXBkZXNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwb2xsX2Rlc2MsIHdvcmspOworCXN5c2ZzX25vdGlmeV9kaXJlbnQocGRlc2MtPnZhbHVlX3NkKTsKK30KKworc3RhdGljIGludCBncGlvX3NldHVwX2lycShzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGxvbmcgZ3Bpb19mbGFncykKK3sKKwlzdHJ1Y3QgcG9sbF9kZXNjCSpwZGVzYzsKKwl1bnNpZ25lZCBsb25nCQlpcnFfZmxhZ3M7CisJaW50CQkJcmV0LCBpcnEsIGlkOworCisJaWYgKChkZXNjLT5mbGFncyAmIEdQSU9fVFJJR0dFUl9NQVNLKSA9PSBncGlvX2ZsYWdzKQorCQlyZXR1cm4gMDsKKworCWlycSA9IGdwaW9fdG9faXJxKGRlc2MgLSBncGlvX2Rlc2MpOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlkID0gZGVzYy0+ZmxhZ3MgPj4gUERFU0NfSURfU0hJRlQ7CisJcGRlc2MgPSBpZHJfZmluZCgmcGRlc2NfaWRyLCBpZCk7CisJaWYgKHBkZXNjKSB7CisJCWZyZWVfaXJxKGlycSwgJnBkZXNjLT53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmcGRlc2MtPndvcmspOworCX0KKworCWRlc2MtPmZsYWdzICY9IH5HUElPX1RSSUdHRVJfTUFTSzsKKworCWlmICghZ3Bpb19mbGFncykgeworCQlyZXQgPSAwOworCQlnb3RvIGZyZWVfc2Q7CisJfQorCisJaXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisJaWYgKHRlc3RfYml0KEZMQUdfVFJJR19GQUxMLCAmZ3Bpb19mbGFncykpCisJCWlycV9mbGFncyB8PSBJUlFGX1RSSUdHRVJfRkFMTElORzsKKwlpZiAodGVzdF9iaXQoRkxBR19UUklHX1JJU0UsICZncGlvX2ZsYWdzKSkKKwkJaXJxX2ZsYWdzIHw9IElSUUZfVFJJR0dFUl9SSVNJTkc7CisKKwlpZiAoIXBkZXNjKSB7CisJCXBkZXNjID0ga21hbGxvYyhzaXplb2YoKnBkZXNjKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGRlc2MpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQlkbyB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJaWYgKGlkcl9wcmVfZ2V0KCZwZGVzY19pZHIsIEdGUF9LRVJORUwpKQorCQkJCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZwZGVzY19pZHIsCisJCQkJCQlwZGVzYywgMSwgJmlkKTsKKwkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOworCisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWVfbWVtOworCisJCWRlc2MtPmZsYWdzICY9IEdQSU9fRkxBR1NfTUFTSzsKKwkJZGVzYy0+ZmxhZ3MgfD0gKHVuc2lnbmVkIGxvbmcpaWQgPDwgUERFU0NfSURfU0hJRlQ7CisKKwkJaWYgKGRlc2MtPmZsYWdzID4+IFBERVNDX0lEX1NISUZUICE9IGlkKSB7CisJCQlyZXQgPSAtRVJBTkdFOworCQkJZ290byBmcmVlX2lkOworCQl9CisKKwkJcGRlc2MtPnZhbHVlX3NkID0gc3lzZnNfZ2V0X2RpcmVudChkZXYtPmtvYmouc2QsICJ2YWx1ZSIpOworCQlpZiAoIXBkZXNjLT52YWx1ZV9zZCkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZnJlZV9pZDsKKwkJfQorCQlJTklUX1dPUksoJnBkZXNjLT53b3JrLCBncGlvX25vdGlmeV9zeXNmcyk7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX3N5c2ZzX2lycSwgaXJxX2ZsYWdzLAorCQkJImdwaW9saWIiLCAmcGRlc2MtPndvcmspOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zZDsKKworCWRlc2MtPmZsYWdzIHw9IGdwaW9fZmxhZ3M7CisJcmV0dXJuIDA7CisKK2ZyZWVfc2Q6CisJc3lzZnNfcHV0KHBkZXNjLT52YWx1ZV9zZCk7CitmcmVlX2lkOgorCWlkcl9yZW1vdmUoJnBkZXNjX2lkciwgaWQpOworCWRlc2MtPmZsYWdzICY9IEdQSU9fRkxBR1NfTUFTSzsKK2ZyZWVfbWVtOgorCWtmcmVlKHBkZXNjKTsKK2Vycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfSB0cmlnZ2VyX3R5cGVzW10gPSB7CisJeyAibm9uZSIsICAgIDAgfSwKKwl7ICJmYWxsaW5nIiwgQklUKEZMQUdfVFJJR19GQUxMKSB9LAorCXsgInJpc2luZyIsICBCSVQoRkxBR19UUklHX1JJU0UpIH0sCisJeyAiYm90aCIsICAgIEJJVChGTEFHX1RSSUdfRkFMTCkgfCBCSVQoRkxBR19UUklHX1JJU0UpIH0sCit9OworCitzdGF0aWMgc3NpemVfdCBncGlvX2VkZ2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJY29uc3Qgc3RydWN0IGdwaW9fZGVzYwkqZGVzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QJCQlzdGF0dXM7CisKKwltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKKworCWlmICghdGVzdF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncykpCisJCXN0YXR1cyA9IC1FSU87CisJZWxzZSB7CisJCWludCBpOworCisJCXN0YXR1cyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyaWdnZXJfdHlwZXMpOyBpKyspCisJCQlpZiAoKGRlc2MtPmZsYWdzICYgR1BJT19UUklHR0VSX01BU0spCisJCQkJCT09IHRyaWdnZXJfdHlwZXNbaV0uZmxhZ3MpIHsKKwkJCQlzdGF0dXMgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkJCQkJIHRyaWdnZXJfdHlwZXNbaV0ubmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3NpemVfdCBncGlvX2VkZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdAkJCXN0YXR1czsKKwlpbnQJCQlpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHJpZ2dlcl90eXBlcyk7IGkrKykKKwkJaWYgKHN5c2ZzX3N0cmVxKHRyaWdnZXJfdHlwZXNbaV0ubmFtZSwgYnVmKSkKKwkJCWdvdG8gZm91bmQ7CisJcmV0dXJuIC1FSU5WQUw7CisKK2ZvdW5kOgorCW11dGV4X2xvY2soJnN5c2ZzX2xvY2spOworCisJaWYgKCF0ZXN0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKSkKKwkJc3RhdHVzID0gLUVJTzsKKwllbHNlIHsKKwkJc3RhdHVzID0gZ3Bpb19zZXR1cF9pcnEoZGVzYywgZGV2LCB0cmlnZ2VyX3R5cGVzW2ldLmZsYWdzKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlzdGF0dXMgPSBzaXplOworCX0KKworCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZWRnZSwgMDY0NCwgZ3Bpb19lZGdlX3Nob3csIGdwaW9fZWRnZV9zdG9yZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpncGlvX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2RpcmVjdGlvbi5hdHRyLAogCSZkZXZfYXR0cl92YWx1ZS5hdHRyLApAQCAtNDczLDcgKzY2MCw3IEBACiAJCXN0cnVjdCBkZXZpY2UJKmRldjsKIAogCQlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBkZXNjLT5jaGlwLT5kZXYsIE1LREVWKDAsIDApLAotCQkJCSAgICBkZXNjLCBpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyVkIiwgZ3Bpbyk7CisJCQkJZGVzYywgaW9uYW1lID8gaW9uYW1lIDogImdwaW8lZCIsIGdwaW8pOwogCQlpZiAoZGV2KSB7CiAJCQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpCiAJCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCkBAIC00ODEsNiArNjY4LDE0IEBACiAJCQllbHNlCiAJCQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKIAkJCQkJCSZkZXZfYXR0cl92YWx1ZSk7CisKKwkJCWlmICghc3RhdHVzICYmIGdwaW9fdG9faXJxKGdwaW8pID49IDAKKwkJCQkJJiYgKGRpcmVjdGlvbl9tYXlfY2hhbmdlCisJCQkJCQl8fCAhdGVzdF9iaXQoRkxBR19JU19PVVQsCisJCQkJCQkJJmRlc2MtPmZsYWdzKSkpCisJCQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJCSZkZXZfYXR0cl9lZGdlKTsKKwogCQkJaWYgKHN0YXR1cyAhPSAwKQogCQkJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJCX0gZWxzZQpAQCAtNTA1LDYgKzcwMCw1MSBAQAogfQogCiAvKioKKyAqIGdwaW9fZXhwb3J0X2xpbmsgLSBjcmVhdGUgYSBzeXNmcyBsaW5rIHRvIGFuIGV4cG9ydGVkIEdQSU8gbm9kZQorICogQGRldjogZGV2aWNlIHVuZGVyIHdoaWNoIHRvIGNyZWF0ZSBzeW1saW5rCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgc3ltbGluaworICogQGdwaW86IGdwaW8gdG8gY3JlYXRlIHN5bWxpbmsgdG8sIGFscmVhZHkgZXhwb3J0ZWQKKyAqCisgKiBTZXQgdXAgYSBzeW1saW5rIGZyb20gL3N5cy8uLi4vZGV2L25hbWUgdG8gL3N5cy9jbGFzcy9ncGlvL2dwaW9OCisgKiBub2RlLiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVubGlua2luZy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBhbiBlcnJvci4KKyAqLworaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBncGlvKQoreworCXN0cnVjdCBncGlvX2Rlc2MJKmRlc2M7CisJaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkKKwkJZ290byBkb25lOworCisJbXV0ZXhfbG9jaygmc3lzZnNfbG9jayk7CisKKwlkZXNjID0gJmdwaW9fZGVzY1tncGlvXTsKKworCWlmICh0ZXN0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKSkgeworCQlzdHJ1Y3QgZGV2aWNlICp0ZGV2OworCisJCXRkZXYgPSBjbGFzc19maW5kX2RldmljZSgmZ3Bpb19jbGFzcywgTlVMTCwgZGVzYywgbWF0Y2hfZXhwb3J0KTsKKwkJaWYgKHRkZXYgIT0gTlVMTCkgeworCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+a29iaiwgJnRkZXYtPmtvYmosCisJCQkJCQluYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnN5c2ZzX2xvY2spOworCitkb25lOgorCWlmIChzdGF0dXMpCisJCXByX2RlYnVnKCIlczogZ3BpbyVkIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIGdwaW8sIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb19leHBvcnRfbGluayk7CisKKy8qKgogICogZ3Bpb191bmV4cG9ydCAtIHJldmVyc2UgZWZmZWN0IG9mIGdwaW9fZXhwb3J0KCkKICAqIEBncGlvOiBncGlvIHRvIG1ha2UgdW5hdmFpbGFibGUKICAqCkBAIC01MjcsNiArNzY3LDcgQEAKIAogCQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmZ3Bpb19jbGFzcywgTlVMTCwgZGVzYywgbWF0Y2hfZXhwb3J0KTsKIAkJaWYgKGRldikgeworCQkJZ3Bpb19zZXR1cF9pcnEoZGVzYywgZGV2LCAwKTsKIAkJCWNsZWFyX2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKTsKIAkJCXB1dF9kZXZpY2UoZGV2KTsKIAkJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CkBAIC02MTEsNiArODUyLDggQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXVuc2lnbmVkCWdwaW87CiAKKwlpZHJfaW5pdCgmcGRlc2NfaWRyKTsKKwogCXN0YXR1cyA9IGNsYXNzX3JlZ2lzdGVyKCZncGlvX2NsYXNzKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTFjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0wLDAgKzEsMjk3IEBACisvKiBsYW5nd2VsbF9ncGlvLmMgTW9vcmVzdG93biBwbGF0Zm9ybSBMYW5nd2VsbCBjaGlwIEdQSU8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDA5LCAgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogU3VwcG9ydHM6CisgKiBNb29yZXN0b3duIHBsYXRmb3JtIExhbmd3ZWxsIGNoaXAuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdHJ1Y3QgbG53X2dwaW9fcmVnaXN0ZXIgeworCXUzMglHUExSWzJdOworCXUzMglHUERSWzJdOworCXUzMglHUFNSWzJdOworCXUzMglHUENSWzJdOworCXUzMglHUkVSWzJdOworCXUzMglHRkVSWzJdOworCXUzMglHRURSWzJdOworfTsKKworc3RydWN0IGxud19ncGlvIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCQljaGlwOworCXN0cnVjdCBsbndfZ3Bpb19yZWdpc3RlciAJKnJlZ19iYXNlOworCXNwaW5sb2NrX3QJCQlsb2NrOworCXVuc2lnbmVkCQkJaXJxX2Jhc2U7Cit9OworCitzdGF0aWMgaW50IGxud19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGxud19ncGlvICpsbncgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGxud19ncGlvLCBjaGlwKTsKKwl1OCByZWcgPSBvZmZzZXQgLyAzMjsKKwl2b2lkIF9faW9tZW0gKmdwbHI7CisKKwlncGxyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R1BMUltyZWddKTsKKwlyZXR1cm4gcmVhZGwoZ3BscikgJiBCSVQob2Zmc2V0ICUgMzIpOworfQorCitzdGF0aWMgdm9pZCBsbndfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGxud19ncGlvICpsbncgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGxud19ncGlvLCBjaGlwKTsKKwl1OCByZWcgPSBvZmZzZXQgLyAzMjsKKwl2b2lkIF9faW9tZW0gKmdwc3IsICpncGNyOworCisJaWYgKHZhbHVlKSB7CisJCWdwc3IgPSAodm9pZCBfX2lvbWVtICopKCZsbnctPnJlZ19iYXNlLT5HUFNSW3JlZ10pOworCQl3cml0ZWwoQklUKG9mZnNldCAlIDMyKSwgZ3Bzcik7CisJfSBlbHNlIHsKKwkJZ3BjciA9ICh2b2lkIF9faW9tZW0gKikoJmxudy0+cmVnX2Jhc2UtPkdQQ1JbcmVnXSk7CisJCXdyaXRlbChCSVQob2Zmc2V0ICUgMzIpLCBncGNyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG53X2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbG53X2dwaW8sIGNoaXApOworCXU4IHJlZyA9IG9mZnNldCAvIDMyOworCXUzMiB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgX19pb21lbSAqZ3BkcjsKKworCWdwZHIgPSAodm9pZCBfX2lvbWVtICopKCZsbnctPnJlZ19iYXNlLT5HUERSW3JlZ10pOworCXNwaW5fbG9ja19pcnFzYXZlKCZsbnctPmxvY2ssIGZsYWdzKTsKKwl2YWx1ZSA9IHJlYWRsKGdwZHIpOworCXZhbHVlICY9IH5CSVQob2Zmc2V0ICUgMzIpOworCXdyaXRlbCh2YWx1ZSwgZ3Bkcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG53LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG53X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGxud19ncGlvICpsbncgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGxud19ncGlvLCBjaGlwKTsKKwl1OCByZWcgPSBvZmZzZXQgLyAzMjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgX19pb21lbSAqZ3BkcjsKKworCWxud19ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlncGRyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R1BEUltyZWddKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG53LT5sb2NrLCBmbGFncyk7CisJdmFsdWUgPSByZWFkbChncGRyKTsKKwl2YWx1ZSB8PSBCSVQob2Zmc2V0ICUgMzIpOzsKKwl3cml0ZWwodmFsdWUsIGdwZHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxudy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxud19ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGxud19ncGlvICpsbncgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGxud19ncGlvLCBjaGlwKTsKKwlyZXR1cm4gbG53LT5pcnFfYmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIGludCBsbndfaXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0eXBlKQoreworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1MzIgZ3BpbyA9IGlycSAtIGxudy0+aXJxX2Jhc2U7CisJdTggcmVnID0gZ3BpbyAvIDMyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbHVlOworCXZvaWQgX19pb21lbSAqZ3JlciA9ICh2b2lkIF9faW9tZW0gKikoJmxudy0+cmVnX2Jhc2UtPkdSRVJbcmVnXSk7CisJdm9pZCBfX2lvbWVtICpnZmVyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R0ZFUltyZWddKTsKKworCWlmIChncGlvIDwgMCB8fCBncGlvID4gbG53LT5jaGlwLm5ncGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG53LT5sb2NrLCBmbGFncyk7CisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJdmFsdWUgPSByZWFkbChncmVyKSB8IEJJVChncGlvICUgMzIpOworCWVsc2UKKwkJdmFsdWUgPSByZWFkbChncmVyKSAmICh+QklUKGdwaW8gJSAzMikpOworCXdyaXRlbCh2YWx1ZSwgZ3Jlcik7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJdmFsdWUgPSByZWFkbChnZmVyKSB8IEJJVChncGlvICUgMzIpOworCWVsc2UKKwkJdmFsdWUgPSByZWFkbChnZmVyKSAmICh+QklUKGdwaW8gJSAzMikpOworCXdyaXRlbCh2YWx1ZSwgZ2Zlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG53LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyB2b2lkIGxud19pcnFfdW5tYXNrKHVuc2lnbmVkIGlycSkKK3sKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJdTMyIGdwaW8gPSBpcnEgLSBsbnctPmlycV9iYXNlOworCXU4IHJlZyA9IGdwaW8gLyAzMjsKKwl2b2lkIF9faW9tZW0gKmdlZHI7CisKKwlnZWRyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R0VEUltyZWddKTsKKwl3cml0ZWwoQklUKGdwaW8gJSAzMiksIGdlZHIpOworfTsKKworc3RhdGljIHZvaWQgbG53X2lycV9tYXNrKHVuc2lnbmVkIGlycSkKK3sKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbG53X2lycWNoaXAgPSB7CisJLm5hbWUJCT0gIkxOVy1HUElPIiwKKwkubWFzawkJPSBsbndfaXJxX21hc2ssCisJLnVubWFzawkJPSBsbndfaXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBsbndfaXJxX3R5cGUsCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbG53X2dwaW9faWRzW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDgwZikgfSwKKwl7IDAsIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbG53X2dwaW9faWRzKTsKKworc3RhdGljIHZvaWQgbG53X2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gKHN0cnVjdCBsbndfZ3BpbyAqKWdldF9pcnFfZGF0YShpcnEpOworCXUzMiByZWcsIGdwaW87CisJdm9pZCBfX2lvbWVtICpnZWRyOworCXUzMiBnZWRyX3Y7CisKKwkvKiBjaGVjayBHUElPIGNvbnRyb2xsZXIgdG8gY2hlY2sgd2hpY2ggcGluIHRyaWdnZXJlZCB0aGUgaW50ZXJydXB0ICovCisJZm9yIChyZWcgPSAwOyByZWcgPCBsbnctPmNoaXAubmdwaW8gLyAzMjsgcmVnKyspIHsKKwkJZ2VkciA9ICh2b2lkIF9faW9tZW0gKikoJmxudy0+cmVnX2Jhc2UtPkdFRFJbcmVnXSk7CisJCWdlZHJfdiA9IHJlYWRsKGdlZHIpOworCQlpZiAoIWdlZHJfdikKKwkJCWNvbnRpbnVlOworCQlmb3IgKGdwaW8gPSByZWcqMzI7IGdwaW8gPCByZWcqMzIrMzI7IGdwaW8rKykgeworCQkJZ2Vkcl92ID0gcmVhZGwoZ2Vkcik7CisJCQlpZiAoZ2Vkcl92ICYgQklUKGdwaW8gJSAzMikpIHsKKwkJCQlwcl9kZWJ1ZygicGluICVkIHRyaWdnZXJlZFxuIiwgZ3Bpbyk7CisJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGxudy0+aXJxX2Jhc2UgKyBncGlvKTsKKwkJCX0KKwkJfQorCQkvKiBjbGVhciB0aGUgZWRnZSBkZXRlY3Qgc3RhdHVzIGJpdCAqLworCQl3cml0ZWwoZ2Vkcl92LCBnZWRyKTsKKwl9CisJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGxud19ncGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXZvaWQgKmJhc2U7CisJaW50IGk7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBsZW47CisJc3RydWN0IGxud19ncGlvICpsbnc7CisJdTMyIGlycV9iYXNlOworCXUzMiBncGlvX2Jhc2U7CisJaW50IHJldHZhbCA9IDA7CisKKwlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJsYW5nd2VsbF9ncGlvIik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciByZXF1ZXN0aW5nIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyMjsKKwl9CisJLyogZ2V0IHRoZSBpcnFfYmFzZSBmcm9tIGJhcjEgKi8KKwlzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwlsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOworCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUoc3RhcnQsIGxlbik7CisJaWYgKCFiYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIG1hcHBpbmcgYmFyMVxuIik7CisJCWdvdG8gZXJyMzsKKwl9CisJaXJxX2Jhc2UgPSAqKHUzMiAqKWJhc2U7CisJZ3Bpb19iYXNlID0gKigodTMyICopYmFzZSArIDEpOworCS8qIHJlbGVhc2UgdGhlIElPIG1hcHBpbmcsIHNpbmNlIHdlIGFscmVhZHkgZ2V0IHRoZSBpbmZvIGZyb20gYmFyMSAqLworCWlvdW5tYXAoYmFzZSk7CisJLyogZ2V0IHRoZSByZWdpc3RlciBiYXNlIGZyb20gYmFyMCAqLworCXN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWxlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShzdGFydCwgbGVuKTsKKwlpZiAoIWJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgbWFwcGluZyBiYXIwXG4iKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBlcnIzOworCX0KKworCWxudyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbndfZ3BpbyksIEdGUF9LRVJORUwpOworCWlmICghbG53KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFsbG9jYXRlIGxhbmd3ZWxsX2dwaW8gY2hpcCBkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnI0OworCX0KKwlsbnctPnJlZ19iYXNlID0gYmFzZTsKKwlsbnctPmlycV9iYXNlID0gaXJxX2Jhc2U7CisJbG53LT5jaGlwLmxhYmVsID0gZGV2X25hbWUoJnBkZXYtPmRldik7CisJbG53LT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IGxud19ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlsbnctPmNoaXAuZGlyZWN0aW9uX291dHB1dCA9IGxud19ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJbG53LT5jaGlwLmdldCA9IGxud19ncGlvX2dldDsKKwlsbnctPmNoaXAuc2V0ID0gbG53X2dwaW9fc2V0OworCWxudy0+Y2hpcC50b19pcnEgPSBsbndfZ3Bpb190b19pcnE7CisJbG53LT5jaGlwLmJhc2UgPSBncGlvX2Jhc2U7CisJbG53LT5jaGlwLm5ncGlvID0gNjQ7CisJbG53LT5jaGlwLmNhbl9zbGVlcCA9IDA7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGxudyk7CisJcmV0dmFsID0gZ3Bpb2NoaXBfYWRkKCZsbnctPmNoaXApOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibGFuZ3dlbGwgZ3Bpb2NoaXBfYWRkIGVycm9yICVkXG4iLCByZXR2YWwpOworCQlnb3RvIGVycjU7CisJfQorCXNldF9pcnFfZGF0YShwZGV2LT5pcnEsIGxudyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIocGRldi0+aXJxLCBsbndfaXJxX2hhbmRsZXIpOworCWZvciAoaSA9IDA7IGkgPCBsbnctPmNoaXAubmdwaW87IGkrKykgeworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpICsgbG53LT5pcnFfYmFzZSwgJmxud19pcnFjaGlwLAorCQkJCQloYW5kbGVfc2ltcGxlX2lycSwgImRlbXV4Iik7CisJCXNldF9pcnFfY2hpcF9kYXRhKGkgKyBsbnctPmlycV9iYXNlLCBsbncpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZsbnctPmxvY2spOworCWdvdG8gZG9uZTsKK2VycjU6CisJa2ZyZWUobG53KTsKK2VycjQ6CisJaW91bm1hcChiYXNlKTsKK2VycjM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2VycjI6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbG53X2dwaW9fZHJpdmVyID0geworCS5uYW1lCQk9ICJsYW5nd2VsbF9ncGlvIiwKKwkuaWRfdGFibGUJPSBsbndfZ3Bpb19pZHMsCisJLnByb2JlCQk9IGxud19ncGlvX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbG53X2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZsbndfZ3Bpb19kcml2ZXIpOworfQorCitkZXZpY2VfaW5pdGNhbGwobG53X2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jIGIvZHJpdmVycy9ncGlvL21heDczMDEuYwppbmRleCA3YjgyZWFhLi40ODA5NTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKQEAgLTMzOSwzICszMzksNCBAQAogTU9EVUxFX0FVVEhPUigiSnVlcmdlbiBCZWlzZXJ0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDczMDEgU1BJIGJhc2VkIEdQSU8tRXhwYW5kZXIiKTsKK01PRFVMRV9BTElBUygic3BpOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21jMzM4ODAuYyBiL2RyaXZlcnMvZ3Bpby9tYzMzODgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkMDFiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9tYzMzODgwLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBtYzMzODgwLmMgTUMzMzg4MCBoaWdoLXNpZGUvbG93LXNpZGUgc3dpdGNoIEdQSU8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIEZyZWVzY2FsZSBNQzMzODgwIGhpZ2gtc2lkZS9sb3ctc2lkZSBzd2l0Y2gKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9tYzMzODgwLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJtYzMzODgwIgorCisvKgorICogUGluIGNvbmZpZ3VyYXRpb25zLCBzZWUgTUFYNzMwMSBkYXRhc2hlZXQgcGFnZSA2CisgKi8KKyNkZWZpbmUgUElOX0NPTkZJR19NQVNLIDB4MDMKKyNkZWZpbmUgUElOX0NPTkZJR19JTl9QVUxMVVAgMHgwMworI2RlZmluZSBQSU5fQ09ORklHX0lOX1dPX1BVTExVUCAweDAyCisjZGVmaW5lIFBJTl9DT05GSUdfT1VUIDB4MDEKKworI2RlZmluZSBQSU5fTlVNQkVSIDgKKworCisvKgorICogU29tZSByZWdpc3RlcnMgbXVzdCBiZSByZWFkIGJhY2sgdG8gbW9kaWZ5LgorICogVG8gc2F2ZSB0aW1lIHdlIGNhY2hlIHRoZW0gaGVyZSBpbiBtZW1vcnkKKyAqLworc3RydWN0IG1jMzM4ODAgeworCXN0cnVjdCBtdXRleAlsb2NrOwkvKiBwcm90ZWN0IGZyb20gc2ltdWx0YW5vdXMgYWNjZXNzZXMgKi8KKwl1OAkJcG9ydF9jb25maWc7CisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7Cit9OworCitzdGF0aWMgaW50IG1jMzM4ODBfd3JpdGVfY29uZmlnKHN0cnVjdCBtYzMzODgwICptYykKK3sKKwlyZXR1cm4gc3BpX3dyaXRlKG1jLT5zcGksICZtYy0+cG9ydF9jb25maWcsIHNpemVvZihtYy0+cG9ydF9jb25maWcpKTsKK30KKworCitzdGF0aWMgaW50IF9fbWMzMzg4MF9zZXQoc3RydWN0IG1jMzM4ODAgKm1jLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlpZiAodmFsdWUpCisJCW1jLT5wb3J0X2NvbmZpZyB8PSAxIDw8IG9mZnNldDsKKwllbHNlCisJCW1jLT5wb3J0X2NvbmZpZyAmPSB+KDEgPDwgb2Zmc2V0KTsKKworCXJldHVybiBtYzMzODgwX3dyaXRlX2NvbmZpZyhtYyk7Cit9CisKKworc3RhdGljIHZvaWQgbWMzMzg4MF9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1jMzM4ODAgKm1jID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYzMzODgwLCBjaGlwKTsKKworCW11dGV4X2xvY2soJm1jLT5sb2NrKTsKKworCV9fbWMzMzg4MF9zZXQobWMsIG9mZnNldCwgdmFsdWUpOworCisJbXV0ZXhfdW5sb2NrKCZtYy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1jMzM4ODBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbWMzMzg4MCAqbWM7CisJc3RydWN0IG1jMzM4ODBfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IHJldDsKKworCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+YmFzZSkgeworCQlkZXZfZGJnKCZzcGktPmRldiwgImluY29ycmVjdCBvciBtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIGJpdHNfcGVyX3dvcmQgY2Fubm90IGJlIGNvbmZpZ3VyZWQgaW4gcGxhdGZvcm0gZGF0YQorCSAqLworCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW1jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jMzM4ODApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2luaXQoJm1jLT5sb2NrKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIG1jKTsKKworCW1jLT5zcGkgPSBzcGk7CisKKwltYy0+Y2hpcC5sYWJlbCA9IERSSVZFUl9OQU1FLAorCW1jLT5jaGlwLnNldCA9IG1jMzM4ODBfc2V0OworCW1jLT5jaGlwLmJhc2UgPSBwZGF0YS0+YmFzZTsKKwltYy0+Y2hpcC5uZ3BpbyA9IFBJTl9OVU1CRVI7CisJbWMtPmNoaXAuY2FuX3NsZWVwID0gMTsKKwltYy0+Y2hpcC5kZXYgPSAmc3BpLT5kZXY7CisJbWMtPmNoaXAub3duZXIgPSBUSElTX01PRFVMRTsKKworCW1jLT5wb3J0X2NvbmZpZyA9IDB4MDA7CisJLyogd3JpdGUgdHdpY2UsIGJlY2F1c2UgZHVyaW5nIGluaXRpYWxpc2F0aW9uIHRoZSBmaXJzdCBzZXR0aW5nCisJICogaXMganVzdCBmb3IgdGVzdGluZyBTUEkgY29tbXVuaWNhdGlvbiwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlCisJICogInJlYWwiIGNvbmZpZ3VyYXRpb24KKwkgKi8KKwlyZXQgPSBtYzMzODgwX3dyaXRlX2NvbmZpZyhtYyk7CisJbWMtPnBvcnRfY29uZmlnID0gMHgwMDsKKwlpZiAoIXJldCkKKwkJcmV0ID0gbWMzMzg4MF93cml0ZV9jb25maWcobWMpOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB3cml0aW5nIHRvICIgRFJJVkVSX05BTUUgIjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXhpdF9kZXN0cm95OworCX0KKworCXJldCA9IGdwaW9jaGlwX2FkZCgmbWMtPmNoaXApOworCWlmIChyZXQpCisJCWdvdG8gZXhpdF9kZXN0cm95OworCisJcmV0dXJuIHJldDsKKworZXhpdF9kZXN0cm95OgorCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCW11dGV4X2Rlc3Ryb3koJm1jLT5sb2NrKTsKKwlrZnJlZShtYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYzMzODgwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtYzMzODgwICptYzsKKwlpbnQgcmV0OworCisJbWMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKwlpZiAobWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmbWMtPmNoaXApOworCWlmICghcmV0KSB7CisJCW11dGV4X2Rlc3Ryb3koJm1jLT5sb2NrKTsKKwkJa2ZyZWUobWMpOworCX0gZWxzZQorCQlkZXZfZXJyKCZzcGktPmRldiwgIkZhaWxlZCB0byByZW1vdmUgdGhlIEdQSU8gY29udHJvbGxlcjogJWRcbiIsCisJCQlyZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG1jMzM4ODBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWMzMzg4MF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1jMzM4ODBfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jMzM4ODBfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtYzMzODgwX2RyaXZlcik7Cit9CisvKiByZWdpc3RlciBhZnRlciBzcGkgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChtYzMzODgwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWMzMzg4MF9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZtYzMzODgwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYzMzODgwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIDxpbmZvQG1vY2Vhbi1sYWJzLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21jcDIzczA4LmMgYi9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYwppbmRleCBmNmZhZTBlLi5jZDY1MWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYworKysgYi9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYwpAQCAtNiwxMiArNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9tY3AyM3MwOC5oPgogCi0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLQogCiAvKiBSZWdpc3RlcnMgYXJlIGFsbCA4IGJpdHMgd2lkZS4KICAqCkBAIC00MzMsMyArNDMxLDQgQEAKIG1vZHVsZV9leGl0KG1jcDIzczA4X2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTptY3AyM3MwOCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggY2RiNjU3NC4uNmEyZmIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYworKysgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CiAjaWZkZWYgQ09ORklHX09GX0dQSU8KQEAgLTIwLDggKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0KICNkZWZpbmUgUENBOTUzWF9JTlBVVCAgICAgICAgICAwCiAjZGVmaW5lIFBDQTk1M1hfT1VUUFVUICAgICAgICAgMQogI2RlZmluZSBQQ0E5NTNYX0lOVkVSVCAgICAgICAgIDIKQEAgLTQwLDYgKzM5LDcgQEAKIAl7ICJwY2E5NTU3IiwgOCwgfSwKIAogCXsgIm1heDczMTAiLCA4LCB9LAorCXsgIm1heDczMTUiLCA4LCB9LAogCXsgInBjYTYxMDciLCA4LCB9LAogCXsgInRjYTY0MDgiLCA4LCB9LAogCXsgInRjYTY0MTYiLCAxNiwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMgYi9kcml2ZXJzL2dwaW8vcGNmODU3eC5jCmluZGV4IDk1MjU3MjQuLjI5ZjE5Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjZjg1N3guYwpAQCAtMjAsMTQgKzIwLDE0IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2Y4NTd4Lmg+CiAKLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwY2Y4NTd4X2lkW10gPSB7CiAJeyAicGNmODU3NCIsIDggfSwKKwl7ICJwY2Y4NTc0YSIsIDggfSwKIAl7ICJwY2E4NTc0IiwgOCB9LAogCXsgInBjYTk2NzAiLCA4IH0sCiAJeyAicGNhOTY3MiIsIDggfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby91Y2IxNDAwX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby91Y2IxNDAwX2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGU2YmQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL3VjYjE0MDBfZ3Bpby5jCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogUGhpbGlwcyBVQ0IxNDAwIEdQSU8gZHJpdmVyCisgKgorICogQXV0aG9yOiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CisKK3N0cnVjdCB1Y2IxNDAwX2dwaW9fZGF0YSAqdWNiZGF0YTsKKworc3RhdGljIGludCB1Y2IxNDAwX2dwaW9fZGlyX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmYpCit7CisJc3RydWN0IHVjYjE0MDBfZ3BpbyAqZ3BpbzsKKwlncGlvID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgdWNiMTQwMF9ncGlvLCBnYyk7CisJdWNiMTQwMF9ncGlvX3NldF9kaXJlY3Rpb24oZ3Bpby0+YWM5Nywgb2ZmLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y2IxNDAwX2dwaW9fZGlyX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2ZmLCBpbnQgdmFsKQoreworCXN0cnVjdCB1Y2IxNDAwX2dwaW8gKmdwaW87CisJZ3BpbyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHVjYjE0MDBfZ3BpbywgZ2MpOworCXVjYjE0MDBfZ3Bpb19zZXRfZGlyZWN0aW9uKGdwaW8tPmFjOTcsIG9mZiwgMSk7CisJdWNiMTQwMF9ncGlvX3NldF92YWx1ZShncGlvLT5hYzk3LCBvZmYsIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNiMTQwMF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2ZmKQoreworCXN0cnVjdCB1Y2IxNDAwX2dwaW8gKmdwaW87CisJZ3BpbyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHVjYjE0MDBfZ3BpbywgZ2MpOworCXJldHVybiB1Y2IxNDAwX2dwaW9fZ2V0X3ZhbHVlKGdwaW8tPmFjOTcsIG9mZik7Cit9CisKK3N0YXRpYyB2b2lkIHVjYjE0MDBfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZiwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgdWNiMTQwMF9ncGlvICpncGlvOworCWdwaW8gPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCB1Y2IxNDAwX2dwaW8sIGdjKTsKKwl1Y2IxNDAwX2dwaW9fc2V0X3ZhbHVlKGdwaW8tPmFjOTcsIG9mZiwgdmFsKTsKK30KKworc3RhdGljIGludCB1Y2IxNDAwX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1Y2IxNDAwX2dwaW8gKnVjYiA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoISh1Y2JkYXRhICYmIHVjYmRhdGEtPmdwaW9fb2Zmc2V0KSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHVjYik7CisKKwl1Y2ItPmdjLmxhYmVsID0gInVjYjE0MDBfZ3BpbyI7CisJdWNiLT5nYy5iYXNlID0gdWNiZGF0YS0+Z3Bpb19vZmZzZXQ7CisJdWNiLT5nYy5uZ3BpbyA9IDEwOworCXVjYi0+Z2Mub3duZXIgPSBUSElTX01PRFVMRTsKKworCXVjYi0+Z2MuZGlyZWN0aW9uX2lucHV0ID0gdWNiMTQwMF9ncGlvX2Rpcl9pbjsKKwl1Y2ItPmdjLmRpcmVjdGlvbl9vdXRwdXQgPSB1Y2IxNDAwX2dwaW9fZGlyX291dDsKKwl1Y2ItPmdjLmdldCA9IHVjYjE0MDBfZ3Bpb19nZXQ7CisJdWNiLT5nYy5zZXQgPSB1Y2IxNDAwX2dwaW9fc2V0OworCXVjYi0+Z2MuY2FuX3NsZWVwID0gMTsKKworCWVyciA9IGdwaW9jaGlwX2FkZCgmdWNiLT5nYyk7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwlpZiAodWNiZGF0YSAmJiB1Y2JkYXRhLT5ncGlvX3NldHVwKQorCQllcnIgPSB1Y2JkYXRhLT5ncGlvX3NldHVwKCZkZXYtPmRldiwgdWNiLT5nYy5uZ3Bpbyk7CisKK2VycjoKKwlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyBpbnQgdWNiMTQwMF9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHVjYjE0MDBfZ3BpbyAqdWNiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICh1Y2JkYXRhICYmIHVjYmRhdGEtPmdwaW9fdGVhcmRvd24pIHsKKwkJZXJyID0gdWNiZGF0YS0+Z3Bpb190ZWFyZG93bigmZGV2LT5kZXYsIHVjYi0+Z2MubmdwaW8pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBncGlvY2hpcF9yZW1vdmUoJnVjYi0+Z2MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVjYjE0MDBfZ3Bpb19kcml2ZXIgPSB7CisJLnByb2JlCT0gdWNiMTQwMF9ncGlvX3Byb2JlLAorCS5yZW1vdmUJPSB1Y2IxNDAwX2dwaW9fcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInVjYjE0MDBfZ3BpbyIKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdWNiMTQwMF9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1Y2IxNDAwX2dwaW9fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVjYjE0MDBfZ3Bpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnVjYjE0MDBfZ3Bpb19kcml2ZXIpOworfQorCit2b2lkIF9faW5pdCB1Y2IxNDAwX2dwaW9fc2V0X2RhdGEoc3RydWN0IHVjYjE0MDBfZ3Bpb19kYXRhICpkYXRhKQoreworCXVjYmRhdGEgPSBkYXRhOworfQorCittb2R1bGVfaW5pdCh1Y2IxNDAwX2dwaW9faW5pdCk7Cittb2R1bGVfZXhpdCh1Y2IxNDAwX2dwaW9fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBVQ0IxNDAwIEdQSU8gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDM5YjM5M2QuLmU0ZDk3MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0xOCw2ICsxOCwxNCBAQAogCSAgZGV0YWlscy4gIFlvdSBzaG91bGQgYWxzbyBzZWxlY3QgYW5kIGNvbmZpZ3VyZSBBR1AKIAkgICgvZGV2L2FncGdhcnQpIHN1cHBvcnQuCiAKK2NvbmZpZyBEUk1fS01TX0hFTFBFUgorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBEUk0KKwlzZWxlY3QgRkIKKwlzZWxlY3QgRlJBTUVCVUZGRVJfQ09OU09MRSBpZiAhRU1CRURERUQKKwloZWxwCisJICBGQiBhbmQgQ1JUQyBoZWxwZXJzIGZvciBLTVMgZHJpdmVycy4KKwogY29uZmlnIERSTV9UVE0KIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gRFJNCkBAIC0zNiw2ICs0NCw3IEBACiBjb25maWcgRFJNX1IxMjgKIAl0cmlzdGF0ZSAiQVRJIFJhZ2UgMTI4IgogCWRlcGVuZHMgb24gRFJNICYmIFBDSQorCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gQVRJIFJhZ2UgMTI4IGdyYXBoaWNzIGNhcmQuICBJZiBNCiAJICBpcyBzZWxlY3RlZCwgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByMTI4LiAgQUdQIHN1cHBvcnQgZm9yCkBAIC00Nyw4ICs1Niw5IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAotCXNlbGVjdCBGQgotCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFIGlmICFFTUJFRERFRAorCXNlbGVjdCBGV19MT0FERVIKKyAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSCisgICAgICAgIHNlbGVjdCBEUk1fVFRNCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIEFUSSBSYWRlb24gZ3JhcGhpY3MgY2FyZC4gIFRoZXJlCiAJICBhcmUgYm90aCBQQ0kgYW5kIEFHUCB2ZXJzaW9ucy4gIFlvdSBkb24ndCBuZWVkIHRvIGNob29zZSB0aGlzIHRvCkBAIC04MiwxMSArOTIsMTAgQEAKIGNvbmZpZyBEUk1fSTkxNQogCXRyaXN0YXRlICJpOTE1IGRyaXZlciIKIAlkZXBlbmRzIG9uIEFHUF9JTlRFTAorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLQlzZWxlY3QgRkIKLQlzZWxlY3QgRlJBTUVCVUZGRVJfQ09OU09MRSBpZiAhRU1CRURERUQKIAkjIGk5MTUgZGVwZW5kcyBvbiBBQ1BJX1ZJREVPIHdoZW4gQUNQSSBpcyBlbmFibGVkCiAJIyBidXQgZm9yIHNlbGVjdCB0byB3b3JrLCBuZWVkIHRvIHNlbGVjdCBBQ1BJX1ZJREVPJ3MgZGVwZW5kZW5jaWVzLCBpY2sKIAlzZWxlY3QgVklERU9fT1VUUFVUX0NPTlRST0wgaWYgQUNQSQpAQCAtMTE2LDYgKzEyNSw3IEBACiBjb25maWcgRFJNX01HQQogCXRyaXN0YXRlICJNYXRyb3ggZzIwMC9nNDAwIgogCWRlcGVuZHMgb24gRFJNCisJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIE1hdHJveCBHMjAwLCBHNDAwIG9yIEc0NTAgZ3JhcGhpY3MKIAkgIGNhcmQuICBJZiBNIGlzIHNlbGVjdGVkLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1nYS4gIEFHUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGZlMjNmMjkuLjNjODgyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTEwLDExICsxMCwxNSBAQAogCQlkcm1fbG9jay5vIGRybV9tZW1vcnkubyBkcm1fcHJvYy5vIGRybV9zdHViLm8gZHJtX3ZtLm8gXAogCQlkcm1fYWdwc3VwcG9ydC5vIGRybV9zY2F0dGVyLm8gYXRpX3BjaWdhcnQubyBkcm1fcGNpLm8gXAogCQlkcm1fc3lzZnMubyBkcm1faGFzaHRhYi5vIGRybV9zbWFuLm8gZHJtX21tLm8gXAotCQlkcm1fY3J0Yy5vIGRybV9jcnRjX2hlbHBlci5vIGRybV9tb2Rlcy5vIGRybV9lZGlkLm8gXAotCQlkcm1faW5mby5vIGRybV9kZWJ1Z2ZzLm8KKwkJZHJtX2NydGMubyBkcm1fbW9kZXMubyBkcm1fZWRpZC5vIFwKKwkJZHJtX2luZm8ubyBkcm1fZGVidWdmcy5vIGRybV9lbmNvZGVyX3NsYXZlLm8KIAogZHJtLSQoQ09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KIAorZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fZmJfaGVscGVyLm8gZHJtX2NydGNfaGVscGVyLm8KKworb2JqLSQoQ09ORklHX0RSTV9LTVNfSEVMUEVSKSArPSBkcm1fa21zX2hlbHBlci5vCisKIG9iai0kKENPTkZJR19EUk0pCSs9IGRybS5vCiBvYmotJChDT05GSUdfRFJNX1RUTSkJKz0gdHRtLwogb2JqLSQoQ09ORklHX0RSTV9UREZYKQkrPSB0ZGZ4LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYwppbmRleCA2MjQ2ZTNmLi4zZDA5ZTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYwpAQCAtMzEwLDEwICszMTAsMTAgQEAKIAkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPm9mZnNldCwgbWFwLT5zaXplKTsKIAogCQlicmVhazsKLQljYXNlIF9EUk1fR0VNOgotCQlEUk1fRVJST1IoInRyaWVkIHRvIHJtbWFwIEdFTSBvYmplY3RcbiIpOwotCQlicmVhazsKIAl9CisJY2FzZSBfRFJNX0dFTToKKwkJRFJNX0VSUk9SKCJ0cmllZCB0byBhZGRtYXAgR0VNIG9iamVjdFxuIik7CisJCWJyZWFrOwogCWNhc2UgX0RSTV9TQ0FUVEVSX0dBVEhFUjoKIAkJaWYgKCFkZXYtPnNnKSB7CiAJCQlrZnJlZShtYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCmluZGV4IDBlOTk0YTAuLjBlM2JkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMKQEAgLTQ1LDYgKzQ1LDIzIEBACiAJCWNsZmx1c2gocGFnZV92aXJ0dWFsICsgaSk7CiAJa3VubWFwX2F0b21pYyhwYWdlX3ZpcnR1YWwsIEtNX1VTRVIwKTsKIH0KKworc3RhdGljIHZvaWQgZHJtX2NhY2hlX2ZsdXNoX2NsZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2VzW10sCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCW1iKCk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKQorCQlkcm1fY2xmbHVzaF9wYWdlKCpwYWdlcysrKTsKKwltYigpOworfQorCitzdGF0aWMgdm9pZAorZHJtX2NsZmx1c2hfaXBpX2hhbmRsZXIodm9pZCAqbnVsbCkKK3sKKwl3YmludmQoKTsKK30KICNlbmRpZgogCiB2b2lkCkBAIC01MywxNyArNzAsMzAgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1g4NikKIAlpZiAoY3B1X2hhc19jbGZsdXNoKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaTsKLQotCQltYigpOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpCi0JCQlkcm1fY2xmbHVzaF9wYWdlKCpwYWdlcysrKTsKLQkJbWIoKTsKLQorCQlkcm1fY2FjaGVfZmx1c2hfY2xmbHVzaChwYWdlcywgbnVtX3BhZ2VzKTsKIAkJcmV0dXJuOwogCX0KIAotCXdiaW52ZCgpOworCWlmIChvbl9lYWNoX2NwdShkcm1fY2xmbHVzaF9pcGlfaGFuZGxlciwgTlVMTCwgMSkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgY2FjaGUgZmx1c2guXG4iKTsKKworI2VsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKKwl1bnNpZ25lZCBsb25nIGk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbaV07CisJCXZvaWQgKnBhZ2VfdmlydHVhbDsKKworCQlpZiAodW5saWtlbHkocGFnZSA9PSBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCXBhZ2VfdmlydHVhbCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXBhZ2VfdmlydHVhbCwKKwkJCQkgICAodW5zaWduZWQgbG9uZylwYWdlX3ZpcnR1YWwgKyBQQUdFX1NJWkUpOworCQlrdW5tYXBfYXRvbWljKHBhZ2VfdmlydHVhbCwgS01fVVNFUjApOworCX0KKyNlbHNlCisJcHJpbnRrKEtFUk5fRVJSICJBcmNoaXRlY3R1cmUgaGFzIG5vIGRybV9jYWNoZS5jIHN1cHBvcnRcbiIpOworCVdBUk5fT05fT05DRSgxKTsKICNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChkcm1fY2xmbHVzaF9wYWdlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IDJmNjMxYzcuLmJhNzI4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC02OCwxMCArNjgsMTAgQEAKICAqLwogc3RhdGljIHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZHJtX3NjYWxpbmdfbW9kZV9lbnVtX2xpc3RbXSA9CiB7Ci0JeyBEUk1fTU9ERV9TQ0FMRV9OT05fR1BVLCAiTm9uLUdQVSIgfSwKLQl7IERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4sICJGdWxsc2NyZWVuIiB9LAotCXsgRFJNX01PREVfU0NBTEVfTk9fU0NBTEUsICJObyBzY2FsZSIgfSwKLQl7IERSTV9NT0RFX1NDQUxFX0FTUEVDVCwgIkFzcGVjdCIgfSwKKwl7IERSTV9NT0RFX1NDQUxFX05PTkUsICJOb25lIiB9LAorCXsgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTiwgIkZ1bGwiIH0sCisJeyBEUk1fTU9ERV9TQ0FMRV9DRU5URVIsICJDZW50ZXIiIH0sCisJeyBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1QsICJGdWxsIGFzcGVjdCIgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV9kaXRoZXJpbmdfbW9kZV9lbnVtX2xpc3RbXSA9CkBAIC0xMDgsNiArMTA4LDcgQEAKIAl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUsICJDb21wb3NpdGUiIH0sIC8qIFRWLW91dCAqLwogCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NWSURFTywgICAgIlNWSURFTyIgICAgfSwgLyogVFYtb3V0ICovCiAJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQ29tcG9uZW50LCAiQ29tcG9uZW50IiB9LCAvKiBUVi1vdXQgKi8KKwl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TQ0FSVCwgICAgICJTQ0FSVCIgICAgIH0sIC8qIFRWLW91dCAqLwogfTsKIAogRFJNX0VOVU1fTkFNRV9GTihkcm1fZ2V0X3R2X3NlbGVjdF9uYW1lLCBkcm1fdHZfc2VsZWN0X2VudW1fbGlzdCkKQEAgLTExOCw2ICsxMTksNyBAQAogCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvc2l0ZSwgIkNvbXBvc2l0ZSIgfSwgLyogVFYtb3V0ICovCiAJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPLCAgICAiU1ZJREVPIiAgICB9LCAvKiBUVi1vdXQgKi8KIAl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb25lbnQsICJDb21wb25lbnQiIH0sIC8qIFRWLW91dCAqLworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NDQVJULCAgICAgIlNDQVJUIiAgICAgfSwgLyogVFYtb3V0ICovCiB9OwogCiBEUk1fRU5VTV9OQU1FX0ZOKGRybV9nZXRfdHZfc3ViY29ubmVjdG9yX25hbWUsCkBAIC0xNDYsNiArMTQ4LDcgQEAKIAl7IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCwgIkRpc3BsYXlQb3J0IiwgMCB9LAogCXsgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBLCAiSERNSSBUeXBlIEEiLCAwIH0sCiAJeyBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIsICJIRE1JIFR5cGUgQiIsIDAgfSwKKwl7IERSTV9NT0RFX0NPTk5FQ1RPUl9UViwgIlRWIiwgMCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZHJtX2VuY29kZXJfZW51bV9saXN0W10gPQpAQCAtMTY1LDYgKzE2OCw3IEBACiAJCSBlbmNvZGVyLT5iYXNlLmlkKTsKIAlyZXR1cm4gYnVmOwogfQorRVhQT1JUX1NZTUJPTChkcm1fZ2V0X2VuY29kZXJfbmFtZSk7CiAKIGNoYXIgKmRybV9nZXRfY29ubmVjdG9yX25hbWUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKQEAgLTY5OSw2ICs3MDMsNDIgQEAKIAkJZHJtX3Byb3BlcnR5X2FkZF9lbnVtKGRldi0+bW9kZV9jb25maWcudHZfbW9kZV9wcm9wZXJ0eSwgaSwKIAkJCQkgICAgICBpLCBtb2Rlc1tpXSk7CiAKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2JyaWdodG5lc3NfcHJvcGVydHkgPQorCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwKKwkJCQkgICAgImJyaWdodG5lc3MiLCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2JyaWdodG5lc3NfcHJvcGVydHktPnZhbHVlc1swXSA9IDA7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9icmlnaHRuZXNzX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxMDA7CisKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2NvbnRyYXN0X3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsCisJCQkJICAgICJjb250cmFzdCIsIDIpOworCWRldi0+bW9kZV9jb25maWcudHZfY29udHJhc3RfcHJvcGVydHktPnZhbHVlc1swXSA9IDA7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9jb250cmFzdF9wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTAwOworCisJZGV2LT5tb2RlX2NvbmZpZy50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLAorCQkJCSAgICAiZmxpY2tlciByZWR1Y3Rpb24iLCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAwOworCWRldi0+bW9kZV9jb25maWcudHZfZmxpY2tlcl9yZWR1Y3Rpb25fcHJvcGVydHktPnZhbHVlc1sxXSA9IDEwMDsKKworCWRldi0+bW9kZV9jb25maWcudHZfb3ZlcnNjYW5fcHJvcGVydHkgPQorCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwKKwkJCQkgICAgIm92ZXJzY2FuIiwgMik7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9vdmVyc2Nhbl9wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X292ZXJzY2FuX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxMDA7CisKKwlkZXYtPm1vZGVfY29uZmlnLnR2X3NhdHVyYXRpb25fcHJvcGVydHkgPQorCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwKKwkJCQkgICAgInNhdHVyYXRpb24iLCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X3NhdHVyYXRpb25fcHJvcGVydHktPnZhbHVlc1swXSA9IDA7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9zYXR1cmF0aW9uX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxMDA7CisKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2h1ZV9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLAorCQkJCSAgICAiaHVlIiwgMik7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9odWVfcHJvcGVydHktPnZhbHVlc1swXSA9IDA7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9odWVfcHJvcGVydHktPnZhbHVlc1sxXSA9IDEwMDsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jcmVhdGVfdHZfcHJvcGVydGllcyk7CkBAIC0xMDQ0LDcgKzEwODQsNyBAQAogCQlpZiAoZmlsZV9wcml2LT5tYXN0ZXItPm1pbm9yLT50eXBlID09IERSTV9NSU5PUl9DT05UUk9MKSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwKIAkJCQkJICAgIGhlYWQpIHsKLQkJCQlEUk1fREVCVUcoIkNSVEMgSUQgaXMgJWRcbiIsIGNydGMtPmJhc2UuaWQpOworCQkJCURSTV9ERUJVR19LTVMoIkNSVEMgSUQgaXMgJWRcbiIsIGNydGMtPmJhc2UuaWQpOwogCQkJCWlmIChwdXRfdXNlcihjcnRjLT5iYXNlLmlkLCBjcnRjX2lkICsgY29waWVkKSkgewogCQkJCQlyZXQgPSAtRUZBVUxUOwogCQkJCQlnb3RvIG91dDsKQEAgLTEwNzIsNyArMTExMiw3IEBACiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsCiAJCQkJCSAgICAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsCiAJCQkJCSAgICBoZWFkKSB7Ci0JCQkJRFJNX0RFQlVHKCJFTkNPREVSIElEIGlzICVkXG4iLAorCQkJCURSTV9ERUJVR19LTVMoIkVOQ09ERVIgSUQgaXMgJWRcbiIsCiAJCQkJCSAgZW5jb2Rlci0+YmFzZS5pZCk7CiAJCQkJaWYgKHB1dF91c2VyKGVuY29kZXItPmJhc2UuaWQsIGVuY29kZXJfaWQgKwogCQkJCQkgICAgIGNvcGllZCkpIHsKQEAgLTExMDMsNyArMTE0Myw3IEBACiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwKIAkJCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAogCQkJCQkgICAgaGVhZCkgewotCQkJCURSTV9ERUJVRygiQ09OTkVDVE9SIElEIGlzICVkXG4iLAorCQkJCURSTV9ERUJVR19LTVMoIkNPTk5FQ1RPUiBJRCBpcyAlZFxuIiwKIAkJCQkJICBjb25uZWN0b3ItPmJhc2UuaWQpOwogCQkJCWlmIChwdXRfdXNlcihjb25uZWN0b3ItPmJhc2UuaWQsCiAJCQkJCSAgICAgY29ubmVjdG9yX2lkICsgY29waWVkKSkgewpAQCAtMTEyNyw3ICsxMTY3LDcgQEAKIAl9CiAJY2FyZF9yZXMtPmNvdW50X2Nvbm5lY3RvcnMgPSBjb25uZWN0b3JfY291bnQ7CiAKLQlEUk1fREVCVUcoIkNvdW50ZWQgJWQgJWQgJWRcbiIsIGNhcmRfcmVzLT5jb3VudF9jcnRjcywKKwlEUk1fREVCVUdfS01TKCJDb3VudGVkICVkICVkICVkXG4iLCBjYXJkX3Jlcy0+Y291bnRfY3J0Y3MsCiAJCSAgY2FyZF9yZXMtPmNvdW50X2Nvbm5lY3RvcnMsIGNhcmRfcmVzLT5jb3VudF9lbmNvZGVycyk7CiAKIG91dDoKQEAgLTEyMzAsNyArMTI3MCw3IEBACiAKIAltZW1zZXQoJnVfbW9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbykpOwogCi0JRFJNX0RFQlVHKCJjb25uZWN0b3IgaWQgJWQ6XG4iLCBvdXRfcmVzcC0+Y29ubmVjdG9yX2lkKTsKKwlEUk1fREVCVUdfS01TKCJjb25uZWN0b3IgaWQgJWQ6XG4iLCBvdXRfcmVzcC0+Y29ubmVjdG9yX2lkKTsKIAogCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCkBAIC0xNDA2LDcgKzE0NDYsNyBAQAogCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgY3J0Y19yZXEtPmNydGNfaWQsCiAJCQkJICAgRFJNX01PREVfT0JKRUNUX0NSVEMpOwogCWlmICghb2JqKSB7Ci0JCURSTV9ERUJVRygiVW5rbm93biBDUlRDIElEICVkXG4iLCBjcnRjX3JlcS0+Y3J0Y19pZCk7CisJCURSTV9ERUJVR19LTVMoIlVua25vd24gQ1JUQyBJRCAlZFxuIiwgY3J0Y19yZXEtPmNydGNfaWQpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNDE5LDcgKzE0NTksOCBAQAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjZmIsCiAJCQkJCSAgICAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJCQlpZiAoY3J0Y2ZiID09IGNydGMpIHsKLQkJCQkJRFJNX0RFQlVHKCJVc2luZyBjdXJyZW50IGZiIGZvciBzZXRtb2RlXG4iKTsKKwkJCQkJRFJNX0RFQlVHX0tNUygiVXNpbmcgY3VycmVudCBmYiBmb3IgIgorCQkJCQkJCSJzZXRtb2RlXG4iKTsKIAkJCQkJZmIgPSBjcnRjLT5mYjsKIAkJCQl9CiAJCQl9CkBAIC0xNDI3LDcgKzE0NjgsOCBAQAogCQkJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBjcnRjX3JlcS0+ZmJfaWQsCiAJCQkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfRkIpOwogCQkJaWYgKCFvYmopIHsKLQkJCQlEUk1fREVCVUcoIlVua25vd24gRkIgSUQlZFxuIiwgY3J0Y19yZXEtPmZiX2lkKTsKKwkJCQlEUk1fREVCVUdfS01TKCJVbmtub3duIEZCIElEJWRcbiIsCisJCQkJCQljcnRjX3JlcS0+ZmJfaWQpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0xNDQwLDEzICsxNDgyLDEzIEBACiAJfQogCiAJaWYgKGNydGNfcmVxLT5jb3VudF9jb25uZWN0b3JzID09IDAgJiYgbW9kZSkgewotCQlEUk1fREVCVUcoIkNvdW50IGNvbm5lY3RvcnMgaXMgMCBidXQgbW9kZSBzZXRcbiIpOworCQlEUk1fREVCVUdfS01TKCJDb3VudCBjb25uZWN0b3JzIGlzIDAgYnV0IG1vZGUgc2V0XG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKGNydGNfcmVxLT5jb3VudF9jb25uZWN0b3JzID4gMCAmJiAoIW1vZGUgfHwgIWZiKSkgewotCQlEUk1fREVCVUcoIkNvdW50IGNvbm5lY3RvcnMgaXMgJWQgYnV0IG5vIG1vZGUgb3IgZmIgc2V0XG4iLAorCQlEUk1fREVCVUdfS01TKCJDb3VudCBjb25uZWN0b3JzIGlzICVkIGJ1dCBubyBtb2RlIG9yIGZiIHNldFxuIiwKIAkJCSAgY3J0Y19yZXEtPmNvdW50X2Nvbm5lY3RvcnMpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTE0NzksNyArMTUyMSw4IEBACiAJCQlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIG91dF9pZCwKIAkJCQkJCSAgIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IpOwogCQkJaWYgKCFvYmopIHsKLQkJCQlEUk1fREVCVUcoIkNvbm5lY3RvciBpZCAlZCB1bmtub3duXG4iLCBvdXRfaWQpOworCQkJCURSTV9ERUJVR19LTVMoIkNvbm5lY3RvciBpZCAlZCB1bmtub3duXG4iLAorCQkJCQkJb3V0X2lkKTsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtMTUxMiw3ICsxNTU1LDcgQEAKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IHJldCA9IDA7CiAKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlmICghcmVxLT5mbGFncykgewogCQlEUk1fRVJST1IoIm5vIG9wZXJhdGlvbiBzZXRcbiIpOwpAQCAtMTUyMiw3ICsxNTY1LDcgQEAKIAltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIHJlcS0+Y3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMpOwogCWlmICghb2JqKSB7Ci0JCURSTV9ERUJVRygiVW5rbm93biBDUlRDIElEICVkXG4iLCByZXEtPmNydGNfaWQpOworCQlEUk1fREVCVUdfS01TKCJVbmtub3duIENSVEMgSUQgJWRcbiIsIHJlcS0+Y3J0Y19pZCk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwppbmRleCA2YWFhMmNiLi5mZTg2OTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC0zMywxNSArMzMsNiBAQAogI2luY2x1ZGUgImRybV9jcnRjLmgiCiAjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCiAKLS8qCi0gKiBEZXRhaWxlZCBtb2RlIGluZm8gZm9yIDgwMHg2MDBANjBIegotICovCi1zdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgc3RkX21vZGVzW10gPSB7Ci0JeyBEUk1fTU9ERSgiODAweDYwMCIsIERSTV9NT0RFX1RZUEVfREVGQVVMVCwgNDAwMDAsIDgwMCwgODQwLAotCQkgICA5NjgsIDEwNTYsIDAsIDYwMCwgNjAxLCA2MDUsIDYyOCwgMCwKLQkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLX07Ci0KIHN0YXRpYyB2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX2ZsYWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgICBpbnQgZmxhZ3MpCiB7CkBAIC05NCw3ICs4NSw3IEBACiAJaW50IGNvdW50ID0gMDsKIAlpbnQgbW9kZV9mbGFncyA9IDA7CiAKLQlEUk1fREVCVUcoIiVzXG4iLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCURSTV9ERUJVR19LTVMoIiVzXG4iLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCS8qIHNldCBhbGwgbW9kZXMgdG8gdGhlIHVudmVyaWZpZWQgc3RhdGUgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCiAJCW1vZGUtPnN0YXR1cyA9IE1PREVfVU5WRVJJRklFRDsKQEAgLTEwMiwxNSArOTMsMTcgQEAKIAljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOwogCiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7Ci0JCURSTV9ERUJVRygiJXMgaXMgZGlzY29ubmVjdGVkXG4iLAorCQlEUk1fREVCVUdfS01TKCIlcyBpcyBkaXNjb25uZWN0ZWRcbiIsCiAJCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JCS8qIFRPRE8gc2V0IEVESUQgdG8gTlVMTCAqLwotCQlyZXR1cm4gMDsKKwkJZ290byBwcnVuZTsKIAl9CiAKIAljb3VudCA9ICgqY29ubmVjdG9yX2Z1bmNzLT5nZXRfbW9kZXMpKGNvbm5lY3Rvcik7Ci0JaWYgKCFjb3VudCkKLQkJcmV0dXJuIDA7CisJaWYgKCFjb3VudCkgeworCQljb3VudCA9IGRybV9hZGRfbW9kZXNfbm9lZGlkKGNvbm5lY3RvciwgODAwLCA2MDApOworCQlpZiAoIWNvdW50KQorCQkJcmV0dXJuIDA7CisJfQogCiAJZHJtX21vZGVfY29ubmVjdG9yX2xpc3RfdXBkYXRlKGNvbm5lY3Rvcik7CiAKQEAgLTEzMCw3ICsxMjMsNyBAQAogCQkJCQkJCQkgICBtb2RlKTsKIAl9CiAKLQorcHJ1bmU6CiAJZHJtX21vZGVfcHJ1bmVfaW52YWxpZChkZXYsICZjb25uZWN0b3ItPm1vZGVzLCB0cnVlKTsKIAogCWlmIChsaXN0X2VtcHR5KCZjb25uZWN0b3ItPm1vZGVzKSkKQEAgLTEzOCw3ICsxMzEsOCBAQAogCiAJZHJtX21vZGVfc29ydCgmY29ubmVjdG9yLT5tb2Rlcyk7CiAKLQlEUk1fREVCVUcoIlByb2JlZCBtb2RlcyBmb3IgJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJRFJNX0RFQlVHX0tNUygiUHJvYmVkIG1vZGVzIGZvciAlc1xuIiwKKwkJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgewogCQltb2RlLT52cmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwogCkBAIC0xNjUsMzkgKzE1OSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9oZWxwZXJfcHJvYmVfY29ubmVjdG9yX21vZGVzKTsKIAotc3RhdGljIHZvaWQgZHJtX2hlbHBlcl9hZGRfc3RkX21vZGVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLCAqdDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0ZF9tb2Rlcyk7IGkrKykgewotCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqc3RkbW9kZTsKLQotCQkvKgotCQkgKiBXaGVuIG5vIHZhbGlkIEVESUQgbW9kZXMgYXJlIGF2YWlsYWJsZSB3ZSBlbmQgdXAKLQkJICogaGVyZSBhbmQgYmFpbGVkIGluIHRoZSBwYXN0LCBub3cgd2UgYWRkIHNvbWUgc3RhbmRhcmQKLQkJICogbW9kZXMgYW5kIG1vdmUgb24uCi0JCSAqLwotCQlzdGRtb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgJnN0ZF9tb2Rlc1tpXSk7Ci0JCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBzdGRtb2RlKTsKLQkJZHJtX21vZGVfbGlzdF9jb25jYXQoJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLAotCQkJCSAgICAgJmNvbm5lY3Rvci0+bW9kZXMpOwotCi0JCURSTV9ERUJVRygiQWRkaW5nIG1vZGUgJXMgdG8gJXNcbiIsIHN0ZG1vZGUtPm5hbWUsCi0JCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JfQotCWRybV9tb2RlX3NvcnQoJmNvbm5lY3Rvci0+bW9kZXMpOwotCi0JRFJNX0RFQlVHKCJBZGRlZCBzdGQgbW9kZXMgb24gJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7Ci0JCW1vZGUtPnZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7Ci0KLQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwotCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKG1vZGUpOwotCX0KLX0KLQogLyoqCiAgKiBkcm1faGVscGVyX2VuY29kZXJfaW5fdXNlIC0gY2hlY2sgaWYgYSBnaXZlbiBlbmNvZGVyIGlzIGluIHVzZQogICogQGVuY29kZXI6IGVuY29kZXIgdG8gY2hlY2sKQEAgLTI1OCwxMyArMjE5LDI3IEBACiB2b2lkIGRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIpCisJCQljb250aW51ZTsKKwkJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKQorCQkJY29ubmVjdG9yLT5lbmNvZGVyID0gTlVMTDsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7Ci0JCWlmICghZHJtX2hlbHBlcl9lbmNvZGVyX2luX3VzZShlbmNvZGVyKSkKLQkJCSgqZW5jb2Rlcl9mdW5jcy0+ZHBtcykoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCQlpZiAoIWRybV9oZWxwZXJfZW5jb2Rlcl9pbl91c2UoZW5jb2RlcikpIHsKKwkJCWlmIChlbmNvZGVyX2Z1bmNzLT5kaXNhYmxlKQorCQkJCSgqZW5jb2Rlcl9mdW5jcy0+ZGlzYWJsZSkoZW5jb2Rlcik7CisJCQllbHNlCisJCQkJKCplbmNvZGVyX2Z1bmNzLT5kcG1zKShlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJCQkvKiBkaXNjb25uZWN0b3IgZW5jb2RlciBmcm9tIGFueSBjb25uZWN0b3IgKi8KKwkJCWVuY29kZXItPmNydGMgPSBOVUxMOworCQl9CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKQEAgLTMxMiw3ICsyODcsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CiAJCWVuYWJsZWRbaV0gPSBkcm1fY29ubmVjdG9yX2VuYWJsZWQoY29ubmVjdG9yLCB0cnVlKTsKLQkJRFJNX0RFQlVHKCJjb25uZWN0b3IgJWQgZW5hYmxlZD8gJXNcbiIsIGNvbm5lY3Rvci0+YmFzZS5pZCwKKwkJRFJNX0RFQlVHX0tNUygiY29ubmVjdG9yICVkIGVuYWJsZWQ/ICVzXG4iLCBjb25uZWN0b3ItPmJhc2UuaWQsCiAJCQkgIGVuYWJsZWRbaV0gPyAieWVzIiA6ICJubyIpOwogCQlhbnlfZW5hYmxlZCB8PSBlbmFibGVkW2ldOwogCQlpKys7CkBAIC0zNDIsNyArMzE3LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJRFJNX0RFQlVHKCJsb29raW5nIGZvciBwcmVmZXJyZWQgbW9kZSBvbiBjb25uZWN0b3IgJWRcbiIsCisJCURSTV9ERUJVR19LTVMoImxvb2tpbmcgZm9yIHByZWZlcnJlZCBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKIAkJCSAgY29ubmVjdG9yLT5iYXNlLmlkKTsKIAogCQltb2Rlc1tpXSA9IGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTM1MSw3ICszMjYsNyBAQAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2Rlc1tpXSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCiAJCQkJYnJlYWs7CiAJCX0KLQkJRFJNX0RFQlVHKCJmb3VuZCBtb2RlICVzXG4iLCBtb2Rlc1tpXSA/IG1vZGVzW2ldLT5uYW1lIDoKKwkJRFJNX0RFQlVHX0tNUygiZm91bmQgbW9kZSAlc1xuIiwgbW9kZXNbaV0gPyBtb2Rlc1tpXS0+bmFtZSA6CiAJCQkgICJub25lIik7CiAJCWkrKzsKIAl9CkBAIC00MDksNyArMzg0LDcgQEAKIAljID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCi0JCWlmICgoY29ubmVjdG9yLT5lbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyAmICgxIDw8IGMpKSA9PSAwKSB7CisJCWlmICgoZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgJiAoMSA8PCBjKSkgPT0gMCkgewogCQkJYysrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTQ1Miw3ICs0MjcsNyBAQAogCWludCB3aWR0aCwgaGVpZ2h0OwogCWludCBpLCByZXQ7CiAKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCXdpZHRoID0gZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGg7CiAJaGVpZ2h0ID0gZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0OwpAQCAtNDc1LDcgKzQ1MCw3IEBACiAJaWYgKCFyZXQpCiAJCURSTV9FUlJPUigiVW5hYmxlIHRvIGZpbmQgaW5pdGlhbCBtb2Rlc1xuIik7CiAKLQlEUk1fREVCVUcoInBpY2tpbmcgQ1JUQ3MgZm9yICVkeCVkIGNvbmZpZ1xuIiwgd2lkdGgsIGhlaWdodCk7CisJRFJNX0RFQlVHX0tNUygicGlja2luZyBDUlRDcyBmb3IgJWR4JWQgY29uZmlnXG4iLCB3aWR0aCwgaGVpZ2h0KTsKIAogCWRybV9waWNrX2NydGNzKGRldiwgY3J0Y3MsIG1vZGVzLCAwLCB3aWR0aCwgaGVpZ2h0KTsKIApAQCAtNDkwLDEyICs0NjUsMTQgQEAKIAkJfQogCiAJCWlmIChtb2RlICYmIGNydGMpIHsKLQkJCURSTV9ERUJVRygiZGVzaXJlZCBtb2RlICVzIHNldCBvbiBjcnRjICVkXG4iLAorCQkJRFJNX0RFQlVHX0tNUygiZGVzaXJlZCBtb2RlICVzIHNldCBvbiBjcnRjICVkXG4iLAogCQkJCSAgbW9kZS0+bmFtZSwgY3J0Yy0+YmFzZS5pZCk7CiAJCQljcnRjLT5kZXNpcmVkX21vZGUgPSBtb2RlOwogCQkJY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjID0gY3J0YzsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQljb25uZWN0b3ItPmVuY29kZXItPmNydGMgPSBOVUxMOworCQkJY29ubmVjdG9yLT5lbmNvZGVyID0gTlVMTDsKKwkJfQogCQlpKys7CiAJfQogCkBAIC03MDIsMTggKzY3OSwxNyBAQAogaW50IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBkcm1fY3J0YyAqKnNhdmVfY3J0Y3MsICpuZXdfY3J0YzsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKipzYXZlX2VuY29kZXJzLCAqbmV3X2VuY29kZXI7CisJc3RydWN0IGRybV9jcnRjICpzYXZlX2NydGNzLCAqbmV3X2NydGMsICpjcnRjOworCXN0cnVjdCBkcm1fZW5jb2RlciAqc2F2ZV9lbmNvZGVycywgKm5ld19lbmNvZGVyLCAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIgPSBOVUxMOwotCWJvb2wgc2F2ZV9lbmFibGVkOwogCWJvb2wgbW9kZV9jaGFuZ2VkID0gZmFsc2U7IC8qIGlmIHRydWUgZG8gYSBmdWxsIG1vZGUgc2V0ICovCiAJYm9vbCBmYl9jaGFuZ2VkID0gZmFsc2U7IC8qIGlmIHRydWUgYW5kICFtb2RlX2NoYW5nZWQganVzdCBkbyBhIGZsaXAgKi8KLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpzYXZlX2Nvbm5lY3RvcnMsICpjb25uZWN0b3I7CiAJaW50IGNvdW50ID0gMCwgcm8sIGZhaWwgPSAwOwogCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3M7CiAJaW50IHJldCA9IDA7CiAKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlmICghc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTcyNiwzNyArNzAyLDYwIEBACiAKIAljcnRjX2Z1bmNzID0gc2V0LT5jcnRjLT5oZWxwZXJfcHJpdmF0ZTsKIAotCURSTV9ERUJVRygiY3J0YzogJXAgJWQgZmI6ICVwIGNvbm5lY3RvcnM6ICVwIG51bV9jb25uZWN0b3JzOiAlZCAoeCwgeSkgKCVpLCAlaSlcbiIsCisJRFJNX0RFQlVHX0tNUygiY3J0YzogJXAgJWQgZmI6ICVwIGNvbm5lY3RvcnM6ICVwIG51bV9jb25uZWN0b3JzOiIKKwkJCSIgJWQgKHgsIHkpICglaSwgJWkpXG4iLAogCQkgIHNldC0+Y3J0Yywgc2V0LT5jcnRjLT5iYXNlLmlkLCBzZXQtPmZiLCBzZXQtPmNvbm5lY3RvcnMsCiAJCSAgKGludClzZXQtPm51bV9jb25uZWN0b3JzLCBzZXQtPngsIHNldC0+eSk7CiAKIAlkZXYgPSBzZXQtPmNydGMtPmRldjsKIAotCS8qIHNhdmUgcHJldmlvdXMgY29uZmlnICovCi0Jc2F2ZV9lbmFibGVkID0gc2V0LT5jcnRjLT5lbmFibGVkOwotCi0JLyoKLQkgKiBXZSBkbyBtb2RlX2NvbmZpZy5udW1fY29ubmVjdG9ycyBoZXJlIHNpbmNlIHdlJ2xsIGxvb2sgYXQgdGhlCi0JICogQ1JUQyBhbmQgZW5jb2RlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBjb25uZWN0b3IgbGF0ZXIuCi0JICovCi0Jc2F2ZV9jcnRjcyA9IGt6YWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yICoKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY3J0YyAqKSwgR0ZQX0tFUk5FTCk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBiYWNrdXAgb2YgYWxsIChub24tcG9pbnRlcikgY3J0YywgZW5jb2RlciBhbmQKKwkgKiBjb25uZWN0b3IgZGF0YS4gKi8KKwlzYXZlX2NydGNzID0ga3phbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY3J0YyksIEdGUF9LRVJORUwpOwogCWlmICghc2F2ZV9jcnRjcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzYXZlX2VuY29kZXJzID0ga3phbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IgKgotCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2VuY29kZXJzICopLCBHRlBfS0VSTkVMKTsKKwlzYXZlX2VuY29kZXJzID0ga3phbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9lbmNvZGVyICoKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9lbmNvZGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYXZlX2VuY29kZXJzKSB7CiAJCWtmcmVlKHNhdmVfY3J0Y3MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlzYXZlX2Nvbm5lY3RvcnMgPSBremFsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciAqCisJCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlX2Nvbm5lY3RvcnMpIHsKKwkJa2ZyZWUoc2F2ZV9jcnRjcyk7CisJCWtmcmVlKHNhdmVfZW5jb2RlcnMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBDb3B5IGRhdGEuIE5vdGUgdGhhdCBkcml2ZXIgcHJpdmF0ZSBkYXRhIGlzIG5vdCBhZmZlY3RlZC4KKwkgKiBTaG91bGQgYW55dGhpbmcgYmFkIGhhcHBlbiBvbmx5IHRoZSBleHBlY3RlZCBzdGF0ZSBpcworCSAqIHJlc3RvcmVkLCBub3QgdGhlIGRyaXZlcnMgcGVyc29uYWwgYm9va2tlZXBpbmcuCisJICovCisJY291bnQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCXNhdmVfY3J0Y3NbY291bnQrK10gPSAqY3J0YzsKKwl9CisKKwljb3VudCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJc2F2ZV9lbmNvZGVyc1tjb3VudCsrXSA9ICplbmNvZGVyOworCX0KKworCWNvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJc2F2ZV9jb25uZWN0b3JzW2NvdW50KytdID0gKmNvbm5lY3RvcjsKKwl9CisKIAkvKiBXZSBzaG91bGQgYmUgYWJsZSB0byBjaGVjayBoZXJlIGlmIHRoZSBmYiBoYXMgdGhlIHNhbWUgcHJvcGVydGllcwogCSAqIGFuZCB0aGVuIGp1c3QgZmxpcF9vcl9tb3ZlIGl0ICovCiAJaWYgKHNldC0+Y3J0Yy0+ZmIgIT0gc2V0LT5mYikgewogCQkvKiBJZiB3ZSBoYXZlIG5vIGZiIHRoZW4gdHJlYXQgaXQgYXMgYSBmdWxsIG1vZGUgc2V0ICovCiAJCWlmIChzZXQtPmNydGMtPmZiID09IE5VTEwpIHsKLQkJCURSTV9ERUJVRygiY3J0YyBoYXMgbm8gZmIsIGZ1bGwgbW9kZSBzZXRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiY3J0YyBoYXMgbm8gZmIsIGZ1bGwgbW9kZSBzZXRcbiIpOwogCQkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKIAkJfSBlbHNlIGlmIChzZXQtPmZiID09IE5VTEwpIHsKIAkJCW1vZGVfY2hhbmdlZCA9IHRydWU7CkBAIC03NzIsNyArNzcxLDcgQEAKIAkJZmJfY2hhbmdlZCA9IHRydWU7CiAKIAlpZiAoc2V0LT5tb2RlICYmICFkcm1fbW9kZV9lcXVhbChzZXQtPm1vZGUsICZzZXQtPmNydGMtPm1vZGUpKSB7Ci0JCURSTV9ERUJVRygibW9kZXMgYXJlIGRpZmZlcmVudCwgZnVsbCBtb2RlIHNldFxuIik7CisJCURSTV9ERUJVR19LTVMoIm1vZGVzIGFyZSBkaWZmZXJlbnQsIGZ1bGwgbW9kZSBzZXRcbiIpOwogCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKCZzZXQtPmNydGMtPm1vZGUpOwogCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHNldC0+bW9kZSk7CiAJCW1vZGVfY2hhbmdlZCA9IHRydWU7CkBAIC03ODMsNyArNzgyLDYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzICpjb25uZWN0b3JfZnVuY3MgPQogCQkJY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZTsKLQkJc2F2ZV9lbmNvZGVyc1tjb3VudCsrXSA9IGNvbm5lY3Rvci0+ZW5jb2RlcjsKIAkJbmV3X2VuY29kZXIgPSBjb25uZWN0b3ItPmVuY29kZXI7CiAJCWZvciAocm8gPSAwOyBybyA8IHNldC0+bnVtX2Nvbm5lY3RvcnM7IHJvKyspIHsKIAkJCWlmIChzZXQtPmNvbm5lY3RvcnNbcm9dID09IGNvbm5lY3RvcikgewpAQCAtNzk4LDE1ICs3OTYsMjAgQEAKIAkJfQogCiAJCWlmIChuZXdfZW5jb2RlciAhPSBjb25uZWN0b3ItPmVuY29kZXIpIHsKLQkJCURSTV9ERUJVRygiZW5jb2RlciBjaGFuZ2VkLCBmdWxsIG1vZGUgc3dpdGNoXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoImVuY29kZXIgY2hhbmdlZCwgZnVsbCBtb2RlIHN3aXRjaFxuIik7CiAJCQltb2RlX2NoYW5nZWQgPSB0cnVlOworCQkJLyogSWYgdGhlIGVuY29kZXIgaXMgcmV1c2VkIGZvciBhbm90aGVyIGNvbm5lY3RvciwgdGhlbgorCQkJICogdGhlIGFwcHJvcHJpYXRlIGNydGMgd2lsbCBiZSBzZXQgbGF0ZXIuCisJCQkgKi8KKwkJCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCisJCQkJY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjID0gTlVMTDsKIAkJCWNvbm5lY3Rvci0+ZW5jb2RlciA9IG5ld19lbmNvZGVyOwogCQl9CiAJfQogCiAJaWYgKGZhaWwpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBmYWlsX25vX2VuY29kZXI7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAljb3VudCA9IDA7CkBAIC04MTQsOCArODE3LDYgQEAKIAkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIpCiAJCQljb250aW51ZTsKIAotCQlzYXZlX2NydGNzW2NvdW50KytdID0gY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjOwotCiAJCWlmIChjb25uZWN0b3ItPmVuY29kZXItPmNydGMgPT0gc2V0LT5jcnRjKQogCQkJbmV3X2NydGMgPSBOVUxMOwogCQllbHNlCkBAIC04MzAsMTQgKzgzMSwxNCBAQAogCQlpZiAobmV3X2NydGMgJiYKIAkJICAgICFkcm1fZW5jb2Rlcl9jcnRjX29rKGNvbm5lY3Rvci0+ZW5jb2RlciwgbmV3X2NydGMpKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBmYWlsX3NldF9tb2RlOworCQkJZ290byBmYWlsOwogCQl9CiAJCWlmIChuZXdfY3J0YyAhPSBjb25uZWN0b3ItPmVuY29kZXItPmNydGMpIHsKLQkJCURSTV9ERUJVRygiY3J0YyBjaGFuZ2VkLCBmdWxsIG1vZGUgc3dpdGNoXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoImNydGMgY2hhbmdlZCwgZnVsbCBtb2RlIHN3aXRjaFxuIik7CiAJCQltb2RlX2NoYW5nZWQgPSB0cnVlOwogCQkJY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjID0gbmV3X2NydGM7CiAJCX0KLQkJRFJNX0RFQlVHKCJzZXR0aW5nIGNvbm5lY3RvciAlZCBjcnRjIHRvICVwXG4iLAorCQlEUk1fREVCVUdfS01TKCJzZXR0aW5nIGNvbm5lY3RvciAlZCBjcnRjIHRvICVwXG4iLAogCQkJICBjb25uZWN0b3ItPmJhc2UuaWQsIG5ld19jcnRjKTsKIAl9CiAKQEAgLTg1MCw3ICs4NTEsOCBAQAogCQlzZXQtPmNydGMtPmZiID0gc2V0LT5mYjsKIAkJc2V0LT5jcnRjLT5lbmFibGVkID0gKHNldC0+bW9kZSAhPSBOVUxMKTsKIAkJaWYgKHNldC0+bW9kZSAhPSBOVUxMKSB7Ci0JCQlEUk1fREVCVUcoImF0dGVtcHRpbmcgdG8gc2V0IG1vZGUgZnJvbSB1c2Vyc3BhY2VcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiYXR0ZW1wdGluZyB0byBzZXQgbW9kZSBmcm9tIgorCQkJCQkiIHVzZXJzcGFjZVxuIik7CiAJCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHNldC0+bW9kZSk7CiAJCQlpZiAoIWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShzZXQtPmNydGMsIHNldC0+bW9kZSwKIAkJCQkJCSAgICAgIHNldC0+eCwgc2V0LT55LApAQCAtODU4LDcgKzg2MCw3IEBACiAJCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IG1vZGUgb24gY3J0YyAlcFxuIiwKIAkJCQkJICBzZXQtPmNydGMpOwogCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBmYWlsX3NldF9tb2RlOworCQkJCWdvdG8gZmFpbDsKIAkJCX0KIAkJCS8qIFRPRE8gYXJlIHRoZXNlIG5lZWRlZD8gKi8KIAkJCXNldC0+Y3J0Yy0+ZGVzaXJlZF94ID0gc2V0LT54OwpAQCAtODY3LDQzICs4NjksNTAgQEAKIAkJfQogCQlkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyhkZXYpOwogCX0gZWxzZSBpZiAoZmJfY2hhbmdlZCkgeworCQlzZXQtPmNydGMtPnggPSBzZXQtPng7CisJCXNldC0+Y3J0Yy0+eSA9IHNldC0+eTsKKwogCQlvbGRfZmIgPSBzZXQtPmNydGMtPmZiOwogCQlpZiAoc2V0LT5jcnRjLT5mYiAhPSBzZXQtPmZiKQogCQkJc2V0LT5jcnRjLT5mYiA9IHNldC0+ZmI7CiAJCXJldCA9IGNydGNfZnVuY3MtPm1vZGVfc2V0X2Jhc2Uoc2V0LT5jcnRjLAogCQkJCQkJc2V0LT54LCBzZXQtPnksIG9sZF9mYik7CiAJCWlmIChyZXQgIT0gMCkKLQkJICAgIGdvdG8gZmFpbF9zZXRfbW9kZTsKKwkJCWdvdG8gZmFpbDsKIAl9CiAKKwlrZnJlZShzYXZlX2Nvbm5lY3RvcnMpOwogCWtmcmVlKHNhdmVfZW5jb2RlcnMpOwogCWtmcmVlKHNhdmVfY3J0Y3MpOwogCXJldHVybiAwOwogCi1mYWlsX3NldF9tb2RlOgotCXNldC0+Y3J0Yy0+ZW5hYmxlZCA9IHNhdmVfZW5hYmxlZDsKLQlzZXQtPmNydGMtPmZiID0gb2xkX2ZiOworZmFpbDoKKwkvKiBSZXN0b3JlIGFsbCBwcmV2aW91cyBkYXRhLiAqLwogCWNvdW50ID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKLQkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIpCi0JCQljb250aW51ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQkqY3J0YyA9IHNhdmVfY3J0Y3NbY291bnQrK107CisJfQogCi0JCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9IHNhdmVfY3J0Y3NbY291bnQrK107CisJY291bnQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCSplbmNvZGVyID0gc2F2ZV9lbmNvZGVyc1tjb3VudCsrXTsKIAl9Ci1mYWlsX25vX2VuY29kZXI6Ci0Ja2ZyZWUoc2F2ZV9jcnRjcyk7CisKIAljb3VudCA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Ci0JCWNvbm5lY3Rvci0+ZW5jb2RlciA9IHNhdmVfZW5jb2RlcnNbY291bnQrK107CisJCSpjb25uZWN0b3IgPSBzYXZlX2Nvbm5lY3RvcnNbY291bnQrK107CiAJfQorCisJa2ZyZWUoc2F2ZV9jb25uZWN0b3JzKTsKIAlrZnJlZShzYXZlX2VuY29kZXJzKTsKKwlrZnJlZShzYXZlX2NydGNzKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZyk7CiAKIGJvb2wgZHJtX2hlbHBlcl9wbHVnZ2VkX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlkcm1faGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhkZXYsIGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoLAogCQkJCQkgZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0KTsKQEAgLTkzMiw3ICs5NDEsNiBAQAogICovCiBib29sIGRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCWludCBjb3VudCA9IDA7CiAKIAljb3VudCA9IGRybV9oZWxwZXJfcHJvYmVfY29ubmVjdG9yX21vZGVzKGRldiwKQEAgLTk0MCwxNiArOTQ4LDkgQEAKIAkJCQkJCSBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQpOwogCiAJLyoKLQkgKiBOb25lIG9mIHRoZSBhdmFpbGFibGUgY29ubmVjdG9ycyBoYWQgYW55IG1vZGVzLCBzbyBhZGQgc29tZQotCSAqIGFuZCB0cnkgdG8gbGlnaHQgdGhlbSB1cCBhbnl3YXkKKwkgKiB3ZSBzaG91bGRuJ3QgZW5kIHVwIHdpdGggbm8gbW9kZXMgaGVyZS4KIAkgKi8KLQlpZiAoIWNvdW50KSB7Ci0JCURSTV9FUlJPUigiY29ubmVjdG9ycyBoYXZlIG5vIG1vZGVzLCB1c2luZyBzdGFuZGFyZCBtb2Rlc1xuIik7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLAotCQkJCSAgICAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwKLQkJCQkgICAgaGVhZCkKLQkJCWRybV9oZWxwZXJfYWRkX3N0ZF9tb2RlcyhkZXYsIGNvbm5lY3Rvcik7Ci0JfQorCVdBUk4oIWNvdW50LCAiQ29ubmVjdGVkIGNvbm5lY3RvciB3aXRoIDAgbW9kZXNcbiIpOwogCiAJZHJtX3NldHVwX2NydGNzKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IGIzOWQ3YmYuLmE3NWNhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtNjMsMTIgKzYzLDEyIEBACiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VUX01BUCwgZHJtX2dldG1hcCwgMCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VUX0NMSUVOVCwgZHJtX2dldGNsaWVudCwgMCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VUX1NUQVRTLCBkcm1fZ2V0c3RhdHMsIDApLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NFVF9WRVJTSU9OLCBkcm1fc2V0dmVyc2lvbiwgRFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9TRVRfVkVSU0lPTiwgZHJtX3NldHZlcnNpb24sIERSTV9NQVNURVIpLAogCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfU0VUX1VOSVFVRSwgZHJtX3NldHVuaXF1ZSwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9CTE9DSywgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfVU5CTE9DSywgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfQVVUSF9NQUdJQywgZHJtX2F1dGhtYWdpYywgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9BVVRIX01BR0lDLCBkcm1fYXV0aG1hZ2ljLCBEUk1fQVVUSHxEUk1fTUFTVEVSKSwKIAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0FERF9NQVAsIGRybV9hZGRtYXBfaW9jdGwsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfUk1fTUFQLCBkcm1fcm1tYXBfaW9jdGwsIERSTV9BVVRIKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggN2YyNzI4Yi4uOTBkNzZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTYwLDYgKzYwLDEyIEBACiAjZGVmaW5lIEVESURfUVVJUktfRklSU1RfREVUQUlMRURfUFJFRkVSUkVECSgxIDw8IDUpCiAvKiB1c2UgK2hzeW5jICt2c3luYyBmb3IgZGV0YWlsZWQgbW9kZSAqLwogI2RlZmluZSBFRElEX1FVSVJLX0RFVEFJTEVEX1NZTkNfUFAJCSgxIDw8IDYpCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBFeHRlbnNpb24gRURJRCBibG9jayAqLworI2RlZmluZSBNQVhfRURJRF9FWFRfTlVNIDQKKworI2RlZmluZSBMRVZFTF9ETVQJMAorI2RlZmluZSBMRVZFTF9HVEYJMQorI2RlZmluZSBMRVZFTF9DVlQJMgogCiBzdGF0aWMgc3RydWN0IGVkaWRfcXVpcmsgewogCWNoYXIgKnZlbmRvcjsKQEAgLTIzNywyOCArMjQzLDI5MSBAQAogCXByZWZlcnJlZF9tb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwogfQogCisvKgorICogQWRkIHRoZSBBdXRvZ2VuZXJhdGVkIGZyb20gdGhlIERNVCBzcGVjLgorICogVGhpcyB0YWJsZSBpcyBjb3BpZWQgZnJvbSB4ZnJlZTg2L21vZGVzL3hmODZFZGlkTW9kZXMuYy4KKyAqIEJ1dCB0aGUgbW9kZSB3aXRoIFJlZHVjZWQgYmxhbmsgZmVhdHVyZSBpcyBkZWxldGVkLgorICovCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgZHJtX2RtdF9tb2Rlc1tdID0geworCS8qIDY0MHgzNTBAODVIeiAqLworCXsgRFJNX01PREUoIjY0MHgzNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzE1MDAsIDY0MCwgNjcyLAorCQkgICA3MzYsIDgzMiwgMCwgMzUwLCAzODIsIDM4NSwgNDQ1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LAorCS8qIDY0MHg0MDBAODVIeiAqLworCXsgRFJNX01PREUoIjY0MHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzE1MDAsIDY0MCwgNjcyLAorCQkgICA3MzYsIDgzMiwgMCwgNDAwLCA0MDEsIDQwNCwgNDQ1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDcyMHg0MDBAODVIeiAqLworCXsgRFJNX01PREUoIjcyMHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzU1MDAsIDcyMCwgNzU2LAorCQkgICA4MjgsIDkzNiwgMCwgNDAwLCA0MDEsIDQwNCwgNDQ2LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDY0MHg0ODBANjBIeiAqLworCXsgRFJNX01PREUoIjY0MHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjUxNzUsIDY0MCwgNjU2LAorCQkgICA3NTIsIDgwMCwgMCwgNDgwLCA0ODksIDQ5MiwgNTI1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LAorCS8qIDY0MHg0ODBANzJIeiAqLworCXsgRFJNX01PREUoIjY0MHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzE1MDAsIDY0MCwgNjY0LAorCQkgICA3MDQsIDgzMiwgMCwgNDgwLCA0ODksIDQ5MiwgNTIwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LAorCS8qIDY0MHg0ODBANzVIeiAqLworCXsgRFJNX01PREUoIjY0MHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzE1MDAsIDY0MCwgNjU2LAorCQkgICA3MjAsIDg0MCwgMCwgNDgwLCA0ODEsIDQ4NCwgNTAwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LAorCS8qIDY0MHg0ODBAODVIeiAqLworCXsgRFJNX01PREUoIjY0MHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzYwMDAsIDY0MCwgNjk2LAorCQkgICA3NTIsIDgzMiwgMCwgNDgwLCA0ODEsIDQ4NCwgNTA5LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LAorCS8qIDgwMHg2MDBANTZIeiAqLworCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzYwMDAsIDgwMCwgODI0LAorCQkgICA4OTYsIDEwMjQsIDAsIDYwMCwgNjAxLCA2MDMsIDYyNSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiA4MDB4NjAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDQwMDAwLCA4MDAsIDg0MCwKKwkJICAgOTY4LCAxMDU2LCAwLCA2MDAsIDYwMSwgNjA1LCA2MjgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogODAweDYwMEA3Mkh6ICovCisJeyBEUk1fTU9ERSgiODAweDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1MDAwMCwgODAwLCA4NTYsCisJCSAgIDk3NiwgMTA0MCwgMCwgNjAwLCA2MzcsIDY0MywgNjY2LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDgwMHg2MDBANzVIeiAqLworCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNDk1MDAsIDgwMCwgODE2LAorCQkgICA4OTYsIDEwNTYsIDAsIDYwMCwgNjAxLCA2MDQsIDYyNSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiA4MDB4NjAwQDg1SHogKi8KKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU2MjUwLCA4MDAsIDgzMiwKKwkJICAgODk2LCAxMDQ4LCAwLCA2MDAsIDYwMSwgNjA0LCA2MzEsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogODQ4eDQ4MEA2MEh6ICovCisJeyBEUk1fTU9ERSgiODQ4eDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMzc1MCwgODQ4LCA4NjQsCisJCSAgIDk3NiwgMTA4OCwgMCwgNDgwLCA0ODYsIDQ5NCwgNTE3LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEwMjR4NzY4QDQzSHosIGludGVybGFjZSAqLworCXsgRFJNX01PREUoIjEwMjR4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDQ0OTAwLCAxMDI0LCAxMDMyLAorCQkgICAxMjA4LCAxMjY0LCAwLCA3NjgsIDc2OCwgNzcyLCA4MTcsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMgfAorCQkJRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpIH0sCisJLyogMTAyNHg3NjhANjBIeiAqLworCXsgRFJNX01PREUoIjEwMjR4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDY1MDAwLCAxMDI0LCAxMDQ4LAorCQkgICAxMTg0LCAxMzQ0LCAwLCA3NjgsIDc3MSwgNzc3LCA4MDYsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogMTAyNHg3NjhANzBIeiAqLworCXsgRFJNX01PREUoIjEwMjR4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDc1MDAwLCAxMDI0LCAxMDQ4LAorCQkgICAxMTg0LCAxMzI4LCAwLCA3NjgsIDc3MSwgNzc3LCA4MDYsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogMTAyNHg3NjhANzVIeiAqLworCXsgRFJNX01PREUoIjEwMjR4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDc4NzUwLCAxMDI0LCAxMDQwLAorCQkgICAxMTM2LCAxMzEyLCAwLCA3NjgsIDc2OSwgNzcyLCA4MDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTAyNHg3NjhAODVIeiAqLworCXsgRFJNX01PREUoIjEwMjR4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDk0NTAwLCAxMDI0LCAxMDcyLAorCQkgICAxMDcyLCAxMzc2LCAwLCA3NjgsIDc2OSwgNzcyLCA4MDgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTE1Mng4NjRANzVIeiAqLworCXsgRFJNX01PREUoIjExNTJ4ODY0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEwODAwMCwgMTE1MiwgMTIxNiwKKwkJICAgMTM0NCwgMTYwMCwgMCwgODY0LCA4NjUsIDg2OCwgOTAwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEyODB4NzY4QDYwSHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA3OTUwMCwgMTI4MCwgMTM0NCwKKwkJICAgMTQ3MiwgMTY2NCwgMCwgNzY4LCA3NzEsIDc3OCwgNzk4LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEyODB4NzY4QDc1SHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMDIyNTAsIDEyODAsIDEzNjAsCisJCSAgIDE0ODgsIDE2OTYsIDAsIDc2OCwgNzcxLCA3NzgsIDgwNSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwKKwkvKiAxMjgweDc2OEA4NUh6ICovCisJeyBEUk1fTU9ERSgiMTI4MHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTE3NTAwLCAxMjgwLCAxMzYwLAorCQkgICAxNDk2LCAxNzEyLCAwLCA3NjgsIDc3MSwgNzc4LCA4MDksIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHg4MDBANjBIeiAqLworCXsgRFJNX01PREUoIjEyODB4ODAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDgzNTAwLCAxMjgwLCAxMzUyLAorCQkgICAxNDgwLCAxNjgwLCAwLCA4MDAsIDgwMywgODA5LCA4MzEsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogMTI4MHg4MDBANzVIeiAqLworCXsgRFJNX01PREUoIjEyODB4ODAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEwNjUwMCwgMTI4MCwgMTM2MCwKKwkJICAgMTQ4OCwgMTY5NiwgMCwgODAwLCA4MDMsIDgwOSwgODM4LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEyODB4ODAwQDg1SHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDgwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMjI1MDAsIDEyODAsIDEzNjAsCisJCSAgIDE0OTYsIDE3MTIsIDAsIDgwMCwgODAzLCA4MDksIDg0MywgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMjgweDk2MEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTI4MHg5NjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTA4MDAwLCAxMjgwLCAxMzc2LAorCQkgICAxNDg4LCAxODAwLCAwLCA5NjAsIDk2MSwgOTY0LCAxMDAwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEyODB4OTYwQDg1SHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDk2MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNDg1MDAsIDEyODAsIDEzNDQsCisJCSAgIDE1MDQsIDE3MjgsIDAsIDk2MCwgOTYxLCA5NjQsIDEwMTEsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHgxMDI0QDYwSHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDEwMjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTA4MDAwLCAxMjgwLCAxMzI4LAorCQkgICAxNDQwLCAxNjg4LCAwLCAxMDI0LCAxMDI1LCAxMDI4LCAxMDY2LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEyODB4MTAyNEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTI4MHgxMDI0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEzNTAwMCwgMTI4MCwgMTI5NiwKKwkJICAgMTQ0MCwgMTY4OCwgMCwgMTAyNCwgMTAyNSwgMTAyOCwgMTA2NiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMjgweDEwMjRAODVIeiAqLworCXsgRFJNX01PREUoIjEyODB4MTAyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNTc1MDAsIDEyODAsIDEzNDQsCisJCSAgIDE1MDQsIDE3MjgsIDAsIDEwMjQsIDEwMjUsIDEwMjgsIDEwNzIsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTM2MHg3NjhANjBIeiAqLworCXsgRFJNX01PREUoIjEzNjB4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDg1NTAwLCAxMzYwLCAxNDI0LAorCQkgICAxNTM2LCAxNzkyLCAwLCA3NjgsIDc3MSwgNzc3LCA3OTUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTQ0MHgxMDUwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxNDAweDEwNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTIxNzUwLCAxNDAwLCAxNDg4LAorCQkgICAxNjMyLCAxODY0LCAwLCAxMDUwLCAxMDUzLCAxMDU3LCAxMDg5LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE0NDB4MTA1MEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTQwMHgxMDUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE1NjAwMCwgMTQwMCwgMTUwNCwKKwkJICAgMTY0OCwgMTg5NiwgMCwgMTA1MCwgMTA1MywgMTA1NywgMTA5OSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNDQweDEwNTBAODVIeiAqLworCXsgRFJNX01PREUoIjE0MDB4MTA1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNzk1MDAsIDE0MDAsIDE1MDQsCisJCSAgIDE2NTYsIDE5MTIsIDAsIDEwNTAsIDEwNTMsIDEwNTcsIDExMDUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTQ0MHg5MDBANjBIeiAqLworCXsgRFJNX01PREUoIjE0NDB4OTAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEwNjUwMCwgMTQ0MCwgMTUyMCwKKwkJICAgMTY3MiwgMTkwNCwgMCwgOTAwLCA5MDMsIDkwOSwgOTM0LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE0NDB4OTAwQDc1SHogKi8KKwl7IERSTV9NT0RFKCIxNDQweDkwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMzY3NTAsIDE0NDAsIDE1MzYsCisJCSAgIDE2ODgsIDE5MzYsIDAsIDkwMCwgOTAzLCA5MDksIDk0MiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNDQweDkwMEA4NUh6ICovCisJeyBEUk1fTU9ERSgiMTQ0MHg5MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTU3MDAwLCAxNDQwLCAxNTQ0LAorCQkgICAxNjk2LCAxOTUyLCAwLCA5MDAsIDkwMywgOTA5LCA5NDgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTYwMHgxMjAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxNjAweDEyMDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTYyMDAwLCAxNjAwLCAxNjY0LAorCQkgICAxODU2LCAyMTYwLCAwLCAxMjAwLCAxMjAxLCAxMjA0LCAxMjUwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE2MDB4MTIwMEA2NUh6ICovCisJeyBEUk1fTU9ERSgiMTYwMHgxMjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE3NTUwMCwgMTYwMCwgMTY2NCwKKwkJICAgMTg1NiwgMjE2MCwgMCwgMTIwMCwgMTIwMSwgMTIwNCwgMTI1MCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNjAweDEyMDBANzBIeiAqLworCXsgRFJNX01PREUoIjE2MDB4MTIwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxODkwMDAsIDE2MDAsIDE2NjQsCisJCSAgIDE4NTYsIDIxNjAsIDAsIDEyMDAsIDEyMDEsIDEyMDQsIDEyNTAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTYwMHgxMjAwQDc1SHogKi8KKwl7IERSTV9NT0RFKCIxNjAweDEyMDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjAyNTAwMCwgMTYwMCwgMTY2NCwKKwkJICAgMTg1NiwgMjE2MCwgMCwgMTIwMCwgMTIwMSwgMTIwNCwgMTI1MCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNjAweDEyMDBAODVIeiAqLworCXsgRFJNX01PREUoIjE2MDB4MTIwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMjk1MDAsIDE2MDAsIDE2NjQsCisJCSAgIDE4NTYsIDIxNjAsIDAsIDEyMDAsIDEyMDEsIDEyMDQsIDEyNTAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTY4MHgxMDUwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxNjgweDEwNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTQ2MjUwLCAxNjgwLCAxNzg0LAorCQkgICAxOTYwLCAyMjQwLCAwLCAxMDUwLCAxMDUzLCAxMDU5LCAxMDg5LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE2ODB4MTA1MEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTY4MHgxMDUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE4NzAwMCwgMTY4MCwgMTgwMCwKKwkJICAgMTk3NiwgMjI3MiwgMCwgMTA1MCwgMTA1MywgMTA1OSwgMTA5OSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNjgweDEwNTBAODVIeiAqLworCXsgRFJNX01PREUoIjE2ODB4MTA1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMTQ3NTAsIDE2ODAsIDE4MDgsCisJCSAgIDE5ODQsIDIyODgsIDAsIDEwNTAsIDEwNTMsIDEwNTksIDExMDUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTc5MngxMzQ0QDYwSHogKi8KKwl7IERSTV9NT0RFKCIxNzkyeDEzNDQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjA0NzUwLCAxNzkyLCAxOTIwLAorCQkgICAyMTIwLCAyNDQ4LCAwLCAxMzQ0LCAxMzQ1LCAxMzQ4LCAxMzk0LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE3Mjl4MTM0NEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTc5MngxMzQ0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI2MTAwMCwgMTc5MiwgMTg4OCwKKwkJICAgMjEwNCwgMjQ1NiwgMCwgMTM0NCwgMTM0NSwgMTM0OCwgMTQxNywgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxODUzeDEzOTJANjBIeiAqLworCXsgRFJNX01PREUoIjE4NTZ4MTM5MiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMTgyNTAsIDE4NTYsIDE5NTIsCisJCSAgIDIxNzYsIDI1MjgsIDAsIDEzOTIsIDEzOTMsIDEzOTYsIDE0MzksIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTg1NngxMzkyQDc1SHogKi8KKwl7IERSTV9NT0RFKCIxODU2eDEzOTIiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjg4MDAwLCAxODU2LCAxOTg0LAorCQkgICAyMjA4LCAyNTYwLCAwLCAxMzkyLCAxMzk1LCAxMzk5LCAxNTAwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE5MjB4MTIwMEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTkyMHgxMjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE5MzI1MCwgMTkyMCwgMjA1NiwKKwkJICAgMjI1NiwgMjU5MiwgMCwgMTIwMCwgMTIwMywgMTIwOSwgMTI0NSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxOTIweDEyMDBANzVIeiAqLworCXsgRFJNX01PREUoIjE5MjB4MTIwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNDUyNTAsIDE5MjAsIDIwNTYsCisJCSAgIDIyNjQsIDI2MDgsIDAsIDEyMDAsIDEyMDMsIDEyMDksIDEyNTUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTkyMHgxMjAwQDg1SHogKi8KKwl7IERSTV9NT0RFKCIxOTIweDEyMDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjgxMjUwLCAxOTIwLCAyMDY0LAorCQkgICAyMjcyLCAyNjI0LCAwLCAxMjAwLCAxMjAzLCAxMjA5LCAxMjYyLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE5MjB4MTQ0MEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTkyMHgxNDQwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIzNDAwMCwgMTkyMCwgMjA0OCwKKwkJICAgMjI1NiwgMjYwMCwgMCwgMTQ0MCwgMTQ0MSwgMTQ0NCwgMTUwMCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxOTIweDE0NDBANzVIeiAqLworCXsgRFJNX01PREUoIjE5MjB4MTQ0MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTcwMDAsIDE5MjAsIDIwNjQsCisJCSAgIDIyODgsIDI2NDAsIDAsIDE0NDAsIDE0NDEsIDE0NDQsIDE1MDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMjU2MHgxNjAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIyNTYweDE2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzQ4NTAwLCAyNTYwLCAyNzUyLAorCQkgICAzMDMyLCAzNTA0LCAwLCAxNjAwLCAxNjAzLCAxNjA5LCAxNjU4LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDI1NjB4MTYwMEA3NUhaICovCisJeyBEUk1fTU9ERSgiMjU2MHgxNjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDQ0MzI1MCwgMjU2MCwgMjc2OCwKKwkJICAgMzA0OCwgMzUzNiwgMCwgMTYwMCwgMTYwMywgMTYwOSwgMTY3MiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAyNTYweDE2MDBAODVIWiAqLworCXsgRFJNX01PREUoIjI1NjB4MTYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1MDUyNTAsIDI1NjAsIDI3NjgsCisJCSAgIDMwNDgsIDM1MzYsIDAsIDE2MDAsIDE2MDMsIDE2MDksIDE2ODIsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9maW5kX2RtdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJaW50IGhzaXplLCBpbnQgdnNpemUsIGludCBmcmVzaCkKK3sKKwlpbnQgaSwgY291bnQ7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnB0ciwgKm1vZGU7CisKKwljb3VudCA9IHNpemVvZihkcm1fZG10X21vZGVzKSAvIHNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSk7CisJbW9kZSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcHRyID0gJmRybV9kbXRfbW9kZXNbaV07CisJCWlmIChoc2l6ZSA9PSBwdHItPmhkaXNwbGF5ICYmCisJCQl2c2l6ZSA9PSBwdHItPnZkaXNwbGF5ICYmCisJCQlmcmVzaCA9PSBkcm1fbW9kZV92cmVmcmVzaChwdHIpKSB7CisJCQkvKiBnZXQgdGhlIGV4cGVjdGVkIGRlZmF1bHQgbW9kZSAqLworCQkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIHB0cik7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gbW9kZTsKK30KIC8qKgogICogZHJtX21vZGVfc3RkIC0gY29udmVydCBzdGFuZGFyZCBtb2RlIGluZm8gKHdpZHRoLCBoZWlnaHQsIHJlZnJlc2gpIGludG8gbW9kZQogICogQHQ6IHN0YW5kYXJkIHRpbWluZyBwYXJhbXMKKyAqIEB0aW1pbmdfbGV2ZWw6IHN0YW5kYXJkIHRpbWluZyBsZXZlbAogICoKICAqIFRha2UgdGhlIHN0YW5kYXJkIHRpbWluZyBwYXJhbXMgKGluIHRoaXMgY2FzZSB3aWR0aCwgYXNwZWN0LCBhbmQgcmVmcmVzaCkKLSAqIGFuZCBjb252ZXJ0IHRoZW0gaW50byBhIHJlYWwgbW9kZSB1c2luZyBDVlQuCisgKiBhbmQgY29udmVydCB0aGVtIGludG8gYSByZWFsIG1vZGUgdXNpbmcgQ1ZUL0dURi9ETVQuCiAgKgogICogUHVudHMgZm9yIG5vdywgYnV0IHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUgRkIgbGF5ZXIncyBDVlQgYmFzZWQgbW9kZQogICogZ2VuZXJhdGlvbiBjb2RlLgogICovCiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGVfc3RkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgICAgc3RydWN0IHN0ZF90aW1pbmcgKnQpCisJCQkJICAgICAgc3RydWN0IHN0ZF90aW1pbmcgKnQsCisJCQkJICAgICAgaW50IHRpbWluZ19sZXZlbCkKIHsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQlpbnQgaHNpemUgPSB0LT5oc2l6ZSAqIDggKyAyNDgsIHZzaXplOworCWludCBoc2l6ZSwgdnNpemU7CisJaW50IHZyZWZyZXNoX3JhdGU7CiAJdW5zaWduZWQgYXNwZWN0X3JhdGlvID0gKHQtPnZmcmVxX2FzcGVjdCAmIEVESURfVElNSU5HX0FTUEVDVF9NQVNLKQogCQk+PiBFRElEX1RJTUlOR19BU1BFQ1RfU0hJRlQ7CisJdW5zaWduZWQgdmZyZXEgPSAodC0+dmZyZXFfYXNwZWN0ICYgRURJRF9USU1JTkdfVkZSRVFfTUFTSykKKwkJPj4gRURJRF9USU1JTkdfVkZSRVFfU0hJRlQ7CiAKLQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7Ci0JaWYgKCFtb2RlKQotCQlyZXR1cm4gTlVMTDsKLQorCS8qIEFjY29yZGluZyB0byB0aGUgRURJRCBzcGVjLCB0aGUgaGRpc3BsYXkgPSBoc2l6ZSAqIDggKyAyNDggKi8KKwloc2l6ZSA9IHQtPmhzaXplICogOCArIDI0ODsKKwkvKiB2cmVmcmVzaF9yYXRlID0gdmZyZXEgKyA2MCAqLworCXZyZWZyZXNoX3JhdGUgPSB2ZnJlcSArIDYwOworCS8qIHRoZSB2ZGlzcGxheSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBhc3BlY3QgcmF0aW8gKi8KIAlpZiAoYXNwZWN0X3JhdGlvID09IDApCiAJCXZzaXplID0gKGhzaXplICogMTApIC8gMTY7CiAJZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDEpCkBAIC0yNjcsOSArNTM2LDMwIEBACiAJCXZzaXplID0gKGhzaXplICogNCkgLyA1OwogCWVsc2UKIAkJdnNpemUgPSAoaHNpemUgKiA5KSAvIDE2OworCS8qIEhEVFYgaGFjayAqLworCWlmIChoc2l6ZSA9PSAxMzYwICYmIHZzaXplID09IDc2NSAmJiB2cmVmcmVzaF9yYXRlID09IDYwKSB7CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDApOworCQltb2RlLT5oZGlzcGxheSA9IDEzNjY7CisJCW1vZGUtPnZzeW5jX3N0YXJ0ID0gbW9kZS0+dnN5bmNfc3RhcnQgLSAxOworCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19lbmQgLSAxOworCQlyZXR1cm4gbW9kZTsKKwl9CisJbW9kZSA9IE5VTEw7CisJLyogY2hlY2sgd2hldGhlciBpdCBjYW4gYmUgZm91bmQgaW4gZGVmYXVsdCBtb2RlIHRhYmxlICovCisJbW9kZSA9IGRybV9maW5kX2RtdChkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSk7CisJaWYgKG1vZGUpCisJCXJldHVybiBtb2RlOwogCi0JZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Ci0KKwlzd2l0Y2ggKHRpbWluZ19sZXZlbCkgeworCWNhc2UgTEVWRUxfRE1UOgorCQlicmVhazsKKwljYXNlIExFVkVMX0dURjoKKwkJbW9kZSA9IGRybV9ndGZfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgTEVWRUxfQ1ZUOgorCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwKTsKKwkJYnJlYWs7CisJfQogCXJldHVybiBtb2RlOwogfQogCkBAIC00NTEsNiArNzQxLDE5IEBACiAKIAlyZXR1cm4gbW9kZXM7CiB9CisvKioKKyAqIHN0YW5hcmRfdGltaW5nX2xldmVsIC0gZ2V0IHN0ZC4gdGltaW5nIGxldmVsKENWVC9HVEYvRE1UKQorICogQGVkaWQ6IEVESUQgYmxvY2sgdG8gc2NhbgorICovCitzdGF0aWMgaW50IHN0YW5kYXJkX3RpbWluZ19sZXZlbChzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwlpZiAoZWRpZC0+cmV2aXNpb24gPj0gMikgeworCQlpZiAoZWRpZC0+cmV2aXNpb24gPj0gNCAmJiAoZWRpZC0+ZmVhdHVyZXMgJiBEUk1fRURJRF9GRUFUVVJFX0RFRkFVTFRfR1RGKSkKKwkJCXJldHVybiBMRVZFTF9DVlQ7CisJCXJldHVybiBMRVZFTF9HVEY7CisJfQorCXJldHVybiBMRVZFTF9ETVQ7Cit9CiAKIC8qKgogICogYWRkX3N0YW5kYXJkX21vZGVzIC0gZ2V0IHN0ZC4gbW9kZXMgZnJvbSBFRElEIGFuZCBhZGQgdGhlbQpAQCAtNDYzLDYgKzc2Niw5IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCWludCBpLCBtb2RlcyA9IDA7CisJaW50IHRpbWluZ19sZXZlbDsKKworCXRpbWluZ19sZXZlbCA9IHN0YW5kYXJkX3RpbWluZ19sZXZlbChlZGlkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFRElEX1NURF9USU1JTkdTOyBpKyspIHsKIAkJc3RydWN0IHN0ZF90aW1pbmcgKnQgPSAmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1tpXTsKQEAgLTQ3Miw3ICs3NzgsOCBAQAogCQlpZiAodC0+aHNpemUgPT0gMSAmJiB0LT52ZnJlcV9hc3BlY3QgPT0gMSkKIAkJCWNvbnRpbnVlOwogCi0JCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCAmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1tpXSk7CisJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCAmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1tpXSwKKwkJCQkJdGltaW5nX2xldmVsKTsKIAkJaWYgKG5ld21vZGUpIHsKIAkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKIAkJCW1vZGVzKys7CkBAIC00OTYsNiArODAzLDkgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJaW50IGksIGosIG1vZGVzID0gMDsKKwlpbnQgdGltaW5nX2xldmVsOworCisJdGltaW5nX2xldmVsID0gc3RhbmRhcmRfdGltaW5nX2xldmVsKGVkaWQpOwogCiAJZm9yIChpID0gMDsgaSA8IEVESURfREVUQUlMRURfVElNSU5HUzsgaSsrKSB7CiAJCXN0cnVjdCBkZXRhaWxlZF90aW1pbmcgKnRpbWluZyA9ICZlZGlkLT5kZXRhaWxlZF90aW1pbmdzW2ldOwpAQCAtNTI1LDcgKzgzNSw4IEBACiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwogCiAJCQkJCXN0ZCA9ICZkYXRhLT5kYXRhLnRpbWluZ3Nbal07Ci0JCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQpOworCQkJCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgc3RkLAorCQkJCQkJCSAgICAgICB0aW1pbmdfbGV2ZWwpOwogCQkJCQlpZiAobmV3bW9kZSkgewogCQkJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwogCQkJCQkJbW9kZXMrKzsKQEAgLTU1MSw2ICs4NjIsMTIyIEBACiAKIAlyZXR1cm4gbW9kZXM7CiB9CisvKioKKyAqIGFkZF9kZXRhaWxlZF9tb2RlX2VlZGlkIC0gZ2V0IGRldGFpbGVkIG1vZGUgaW5mbyBmcm9tIGFkZHRpb25hbCB0aW1pbmcKKyAqIAkJCUVESUQgYmxvY2sKKyAqIEBjb25uZWN0b3I6IGF0dGFjaGVkIGNvbm5lY3RvcgorICogQGVkaWQ6IEVESUQgYmxvY2sgdG8gc2NhbihJdCBpcyBvbmx5IHRvIGdldCBhZGR0aW9uYWwgdGltaW5nIEVESUQgYmxvY2spCisgKiBAcXVpcmtzOiBxdWlya3MgdG8gYXBwbHkKKyAqCisgKiBTb21lIG9mIHRoZSBkZXRhaWxlZCB0aW1pbmcgc2VjdGlvbnMgbWF5IGNvbnRhaW4gbW9kZSBpbmZvcm1hdGlvbi4gIEdyYWIKKyAqIGl0IGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgYWRkX2RldGFpbGVkX2luZm9fZWVkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgc3RydWN0IGVkaWQgKmVkaWQsIHUzMiBxdWlya3MpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCWludCBpLCBqLCBtb2RlcyA9IDA7CisJY2hhciAqZWRpZF9leHQgPSBOVUxMOworCXN0cnVjdCBkZXRhaWxlZF90aW1pbmcgKnRpbWluZzsKKwlzdHJ1Y3QgZGV0YWlsZWRfbm9uX3BpeGVsICpkYXRhOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOworCWludCBlZGlkX2V4dF9udW07CisJaW50IHN0YXJ0X29mZnNldCwgZW5kX29mZnNldDsKKwlpbnQgdGltaW5nX2xldmVsOworCisJaWYgKGVkaWQtPnZlcnNpb24gPT0gMSAmJiBlZGlkLT5yZXZpc2lvbiA8IDMpIHsKKwkJLyogSWYgdGhlIEVESUQgdmVyc2lvbiBpcyBsZXNzIHRoYW4gMS4zLCB0aGVyZSBpcyBubworCQkgKiBleHRlbnNpb24gRURJRC4KKwkJICovCisJCXJldHVybiAwOworCX0KKwlpZiAoIWVkaWQtPmV4dGVuc2lvbnMpIHsKKwkJLyogaWYgdGhlcmUgaXMgbm8gZXh0ZW5zaW9uIEVESUQsIGl0IGlzIHVubmVjZXNzYXJ5IHRvCisJCSAqIHBhcnNlIHRoZSBFLUVESUQgdG8gZ2V0IGRldGFpbGVkIGluZm8KKwkJICovCisJCXJldHVybiAwOworCX0KKworCS8qIENob3NlIHJlYWwgRURJRCBleHRlbnNpb24gbnVtYmVyICovCisJZWRpZF9leHRfbnVtID0gZWRpZC0+ZXh0ZW5zaW9ucyA+IE1BWF9FRElEX0VYVF9OVU0gPworCQkgICAgICAgTUFYX0VESURfRVhUX05VTSA6IGVkaWQtPmV4dGVuc2lvbnM7CisKKwkvKiBGaW5kIENFQSBleHRlbnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZWRpZF9leHRfbnVtOyBpKyspIHsKKwkJZWRpZF9leHQgPSAoY2hhciAqKWVkaWQgKyBFRElEX0xFTkdUSCAqIChpICsgMSk7CisJCS8qIFRoaXMgYmxvY2sgaXMgQ0VBIGV4dGVuc2lvbiAqLworCQlpZiAoZWRpZF9leHRbMF0gPT0gMHgwMikKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IGVkaWRfZXh0X251bSkgeworCQkvKiBpZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFsIHRpbWluZyBFRElEIGJsb2NrLCByZXR1cm4gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogR2V0IHRoZSBzdGFydCBvZmZzZXQgb2YgZGV0YWlsZWQgdGltaW5nIGJsb2NrICovCisJc3RhcnRfb2Zmc2V0ID0gZWRpZF9leHRbMl07CisJaWYgKHN0YXJ0X29mZnNldCA9PSAwKSB7CisJCS8qIElmIHRoZSBzdGFydF9vZmZzZXQgaXMgemVybywgaXQgbWVhbnMgdGhhdCBuZWl0aGVyIGRldGFpbGVkCisJCSAqIGluZm8gbm9yIGRhdGEgYmxvY2sgZXhpc3QuIEluIHN1Y2ggY2FzZSBpdCBpcyBhbHNvCisJCSAqIHVubmVjZXNzYXJ5IHRvIHBhcnNlIHRoZSBkZXRhaWxlZCB0aW1pbmcgaW5mby4KKwkJICovCisJCXJldHVybiAwOworCX0KKworCXRpbWluZ19sZXZlbCA9IHN0YW5kYXJkX3RpbWluZ19sZXZlbChlZGlkKTsKKwllbmRfb2Zmc2V0ID0gRURJRF9MRU5HVEg7CisJZW5kX29mZnNldCAtPSBzaXplb2Yoc3RydWN0IGRldGFpbGVkX3RpbWluZyk7CisJZm9yIChpID0gc3RhcnRfb2Zmc2V0OyBpIDwgZW5kX29mZnNldDsKKwkJCWkgKz0gc2l6ZW9mKHN0cnVjdCBkZXRhaWxlZF90aW1pbmcpKSB7CisJCXRpbWluZyA9IChzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICopKGVkaWRfZXh0ICsgaSk7CisJCWRhdGEgPSAmdGltaW5nLT5kYXRhLm90aGVyX2RhdGE7CisJCS8qIERldGFpbGVkIG1vZGUgdGltaW5nICovCisJCWlmICh0aW1pbmctPnBpeGVsX2Nsb2NrKSB7CisJCQluZXdtb2RlID0gZHJtX21vZGVfZGV0YWlsZWQoZGV2LCBlZGlkLCB0aW1pbmcsIHF1aXJrcyk7CisJCQlpZiAoIW5ld21vZGUpCisJCQkJY29udGludWU7CisKKwkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKKworCQkJbW9kZXMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogT3RoZXIgdGltaW5nIG9yIGluZm8gKi8KKwkJc3dpdGNoIChkYXRhLT50eXBlKSB7CisJCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9TRVJJQUw6CisJCQlicmVhazsKKwkJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX1NUUklORzoKKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfUkFOR0U6CisJCQkvKiBHZXQgbW9uaXRvciByYW5nZSBkYXRhICovCisJCQlicmVhazsKKwkJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX05BTUU6CisJCQlicmVhazsKKwkJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX0NQREFUQToKKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX1NURF9NT0RFUzoKKwkJCS8qIEZpdmUgbW9kZXMgcGVyIGRldGFpbGVkIHNlY3Rpb24gKi8KKwkJCWZvciAoaiA9IDA7IGogPCA1OyBpKyspIHsKKwkJCQlzdHJ1Y3Qgc3RkX3RpbWluZyAqc3RkOworCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOworCisJCQkJc3RkID0gJmRhdGEtPmRhdGEudGltaW5nc1tqXTsKKwkJCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgc3RkLCB0aW1pbmdfbGV2ZWwpOworCQkJCWlmIChuZXdtb2RlKSB7CisJCQkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKKwkJCQkJbW9kZXMrKzsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIG1vZGVzOworfQogCiAjZGVmaW5lIEREQ19BRERSIDB4NTAKIC8qKgpAQCAtNTg0LDcgKzEwMTEsNiBAQAogCWlmIChpMmNfdHJhbnNmZXIoYWRhcHRlciwgbXNncywgMikgPT0gMikKIAkJcmV0dXJuIDA7CiAKLQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAidW5hYmxlIHRvIHJlYWQgRURJRCBibG9jay5cbiIpOwogCXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2RvX3Byb2JlX2RkY19lZGlkKTsKQEAgLTU5Nyw4ICsxMDIzLDYgQEAKIAogCXJldCA9IGRybV9kb19wcm9iZV9kZGNfZWRpZChhZGFwdGVyLCBidWYsIGxlbik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9pbmZvKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IG5vIEVESUQgZGF0YVxuIiwKLQkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCQlnb3RvIGVuZDsKIAl9CiAJaWYgKCFlZGlkX2lzX3ZhbGlkKChzdHJ1Y3QgZWRpZCAqKWJ1ZikpIHsKQEAgLTYxMCw3ICsxMDM0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZGVmaW5lIE1BWF9FRElEX0VYVF9OVU0gNAogLyoqCiAgKiBkcm1fZ2V0X2VkaWQgLSBnZXQgRURJRCBkYXRhLCBpZiBhdmFpbGFibGUKICAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB3ZSdyZSBwcm9iaW5nCkBAIC03NjMsNiArMTE4Niw3IEBACiAJbnVtX21vZGVzICs9IGFkZF9lc3RhYmxpc2hlZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwogCW51bV9tb2RlcyArPSBhZGRfc3RhbmRhcmRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKIAludW1fbW9kZXMgKz0gYWRkX2RldGFpbGVkX2luZm8oY29ubmVjdG9yLCBlZGlkLCBxdWlya3MpOworCW51bV9tb2RlcyArPSBhZGRfZGV0YWlsZWRfaW5mb19lZWRpZChjb25uZWN0b3IsIGVkaWQsIHF1aXJrcyk7CiAKIAlpZiAocXVpcmtzICYgKEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzYwIHwgRURJRF9RVUlSS19QUkVGRVJfTEFSR0VfNzUpKQogCQllZGlkX2ZpeHVwX3ByZWZlcnJlZChjb25uZWN0b3IsIHF1aXJrcyk7CkBAIC03ODgsMyArMTIxMiw0OSBAQAogCXJldHVybiBudW1fbW9kZXM7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9hZGRfZWRpZF9tb2Rlcyk7CisKKy8qKgorICogZHJtX2FkZF9tb2Rlc19ub2VkaWQgLSBhZGQgbW9kZXMgZm9yIHRoZSBjb25uZWN0b3JzIHdpdGhvdXQgRURJRAorICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHdlJ3JlIHByb2JpbmcKKyAqIEBoZGlzcGxheTogdGhlIGhvcml6b250YWwgZGlzcGxheSBsaW1pdAorICogQHZkaXNwbGF5OiB0aGUgdmVydGljYWwgZGlzcGxheSBsaW1pdAorICoKKyAqIEFkZCB0aGUgc3BlY2lmaWVkIG1vZGVzIHRvIHRoZSBjb25uZWN0b3IncyBtb2RlIGxpc3QuIE9ubHkgd2hlbiB0aGUKKyAqIGhkaXNwbGF5L3ZkaXNwbGF5IGlzIG5vdCBiZXlvbmQgdGhlIGdpdmVuIGxpbWl0LCBpdCB3aWxsIGJlIGFkZGVkLgorICoKKyAqIFJldHVybiBudW1iZXIgb2YgbW9kZXMgYWRkZWQgb3IgMCBpZiB3ZSBjb3VsZG4ndCBmaW5kIGFueS4KKyAqLworaW50IGRybV9hZGRfbW9kZXNfbm9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQlpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSkKK3sKKwlpbnQgaSwgY291bnQsIG51bV9tb2RlcyA9IDA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsICpwdHI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCisJY291bnQgPSBzaXplb2YoZHJtX2RtdF9tb2RlcykgLyBzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpOworCWlmIChoZGlzcGxheSA8IDApCisJCWhkaXNwbGF5ID0gMDsKKwlpZiAodmRpc3BsYXkgPCAwKQorCQl2ZGlzcGxheSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlwdHIgPSAmZHJtX2RtdF9tb2Rlc1tpXTsKKwkJaWYgKGhkaXNwbGF5ICYmIHZkaXNwbGF5KSB7CisJCQkvKgorCQkJICogT25seSB3aGVuIHR3byBhcmUgdmFsaWQsIHRoZXkgd2lsbCBiZSB1c2VkIHRvIGNoZWNrCisJCQkgKiB3aGV0aGVyIHRoZSBtb2RlIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbW9kZSBsaXN0IG9mCisJCQkgKiB0aGUgY29ubmVjdG9yLgorCQkJICovCisJCQlpZiAocHRyLT5oZGlzcGxheSA+IGhkaXNwbGF5IHx8CisJCQkJCXB0ci0+dmRpc3BsYXkgPiB2ZGlzcGxheSkKKwkJCQljb250aW51ZTsKKwkJfQorCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgcHRyKTsKKwkJaWYgKG1vZGUpIHsKKwkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKKwkJCW51bV9tb2RlcysrOworCQl9CisJfQorCXJldHVybiBudW1fbW9kZXM7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hZGRfbW9kZXNfbm9lZGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZW5jb2Rlcl9zbGF2ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lbmNvZGVyX3NsYXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxODQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZW5jb2Rlcl9zbGF2ZS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZyYW5jaXNjbyBKZXJlei4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisgKiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJkcm1fZW5jb2Rlcl9zbGF2ZS5oIgorCisvKioKKyAqIGRybV9pMmNfZW5jb2Rlcl9pbml0IC0gSW5pdGlhbGl6ZSBhbiBJMkMgc2xhdmUgZW5jb2RlcgorICogQGRldjoJRFJNIGRldmljZS4KKyAqIEBlbmNvZGVyOiAgICBFbmNvZGVyIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBJMkMgZGV2aWNlLiBZb3UgYXJlbid0CisgKgkJcmVxdWlyZWQgdG8gaGF2ZSBjYWxsZWQgZHJtX2VuY29kZXJfaW5pdCgpIGJlZm9yZS4KKyAqIEBhZGFwOglJMkMgYWRhcHRlciB0aGF0IHdpbGwgYmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoCisgKgkJdGhlIGRldmljZS4KKyAqIEBpbmZvOglJbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIEkyQyBkZXZpY2UuCisgKgkJUmVxdWlyZWQgZmllbGRzIGFyZSBAYWRkciBhbmQgQHR5cGUuCisgKgorICogQ3JlYXRlIGFuIEkyQyBkZXZpY2Ugb24gdGhlIHNwZWNpZmllZCBidXMgKHRoZSBtb2R1bGUgY29udGFpbmluZyBpdHMKKyAqIGRyaXZlciBpcyB0cmFuc3BhcmVudGx5IGxvYWRlZCkgYW5kIGF0dGFjaCBpdCB0byB0aGUgc3BlY2lmaWVkCisgKiAmZHJtX2VuY29kZXJfc2xhdmUuIFRoZSBAc2xhdmVfZnVuY3MgZmllbGQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoCisgKiB0aGUgaG9va3MgcHJvdmlkZWQgYnkgdGhlIHNsYXZlIGRyaXZlci4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUsIGluIHBhcnRpY3VsYXIsCisgKiAtRU5PREVWIGlzIHJldHVybmVkIHdoZW4gbm8gbWF0Y2hpbmcgZHJpdmVyIGlzIGZvdW5kLgorICovCitpbnQgZHJtX2kyY19lbmNvZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmUgKmVuY29kZXIsCisJCQkgc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwljaGFyIG1vZGFsaWFzW3NpemVvZihJMkNfTU9EVUxFX1BSRUZJWCkKKwkJICAgICAgKyBJMkNfTkFNRV9TSVpFXTsKKwlzdHJ1Y3QgbW9kdWxlICptb2R1bGUgPSBOVUxMOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGRybV9pMmNfZW5jb2Rlcl9kcml2ZXIgKmVuY29kZXJfZHJ2OworCWludCBlcnIgPSAwOworCisJc25wcmludGYobW9kYWxpYXMsIHNpemVvZihtb2RhbGlhcyksCisJCSAiJXMlcyIsIEkyQ19NT0RVTEVfUFJFRklYLCBpbmZvLT50eXBlKTsKKwlyZXF1ZXN0X21vZHVsZShtb2RhbGlhcyk7CisKKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwLCBpbmZvKTsKKwlpZiAoIWNsaWVudCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKCFjbGllbnQtPmRyaXZlcikgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfdW5yZWdpc3RlcjsKKwl9CisKKwltb2R1bGUgPSBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyOworCWlmICghdHJ5X21vZHVsZV9nZXQobW9kdWxlKSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfdW5yZWdpc3RlcjsKKwl9CisKKwllbmNvZGVyLT5idXNfcHJpdiA9IGNsaWVudDsKKworCWVuY29kZXJfZHJ2ID0gdG9fZHJtX2kyY19lbmNvZGVyX2RyaXZlcihjbGllbnQtPmRyaXZlcik7CisKKwllcnIgPSBlbmNvZGVyX2Rydi0+ZW5jb2Rlcl9pbml0KGNsaWVudCwgZGV2LCBlbmNvZGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfdW5yZWdpc3RlcjsKKworCXJldHVybiAwOworCitmYWlsX3VucmVnaXN0ZXI6CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJbW9kdWxlX3B1dChtb2R1bGUpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChkcm1faTJjX2VuY29kZXJfaW5pdCk7CisKKy8qKgorICogZHJtX2kyY19lbmNvZGVyX2Rlc3Ryb3kgLSBVbnJlZ2lzdGVyIHRoZSBJMkMgZGV2aWNlIGJhY2tpbmcgYW4gZW5jb2RlcgorICogQGRybV9lbmNvZGVyOglFbmNvZGVyIHRvIGJlIHVucmVnaXN0ZXJlZC4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgQGRlc3Ryb3kgbWV0aG9kIG9mIGFuIEkyQyBzbGF2ZQorICogZW5jb2RlciBkcml2ZXIgb25jZSBJMkMgYWNjZXNzIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgKi8KK3ZvaWQgZHJtX2kyY19lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmUgKmVuY29kZXIgPSB0b19lbmNvZGVyX3NsYXZlKGRybV9lbmNvZGVyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZHJtX2kyY19lbmNvZGVyX2dldF9jbGllbnQoZHJtX2VuY29kZXIpOworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSA9IGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXI7CisKKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwllbmNvZGVyLT5idXNfcHJpdiA9IE5VTEw7CisKKwltb2R1bGVfcHV0KG1vZHVsZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9pMmNfZW5jb2Rlcl9kZXN0cm95KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDY3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICoKKyAqIERSTSBmcmFtZWJ1ZmZlciBoZWxwZXIgZnVuY3Rpb25zCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAorICogdGhhdCB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucworICogYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgKiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQorICogT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgICBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqICAgICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm1fY3J0Yy5oIgorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKworTU9EVUxFX0FVVEhPUigiRGF2aWQgQWlybGllLCBKZXNzZSBCYXJuZXMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRFJNIEtNUyBoZWxwZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CisKK3N0YXRpYyBMSVNUX0hFQUQoa2VybmVsX2ZiX2hlbHBlcl9saXN0KTsKKworYm9vbCBkcm1fZmJfaGVscGVyX2ZvcmNlX2tlcm5lbF9tb2RlKHZvaWQpCit7CisJaW50IGkgPSAwOworCWJvb2wgcmV0LCBlcnJvciA9IGZhbHNlOworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXI7CisKKwlpZiAobGlzdF9lbXB0eSgma2VybmVsX2ZiX2hlbHBlcl9saXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoZWxwZXIsICZrZXJuZWxfZmJfaGVscGVyX2xpc3QsIGtlcm5lbF9mYl9saXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBoZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQgPSAmaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7CisJCQlyZXQgPSBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZyhtb2RlX3NldCk7CisJCQlpZiAocmV0KQorCQkJCWVycm9yID0gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBkcm1fZmJfaGVscGVyX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwgdW5zaWduZWQgbG9uZyB1bnVuc2VkLAorCQkJdm9pZCAqcGFuaWNfc3RyKQoreworCURSTV9FUlJPUigicGFuaWMgb2NjdXJyZWQsIHN3aXRjaGluZyBiYWNrIHRvIHRleHQgY29uc29sZVxuIik7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfZm9yY2Vfa2VybmVsX21vZGUoKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9wYW5pYyk7CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNlZCA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGRybV9mYl9oZWxwZXJfcGFuaWMsCit9OworCisvKioKKyAqIGRybV9mYl9oZWxwZXJfcmVzdG9yZSAtIHJlc3RvcmUgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgKGtlcm5lbCkgY29uZmlnCisgKgorICogUmVzdG9yZSdzIHRoZSBrZXJuZWwncyBmYmNvbiBtb2RlLCB1c2VkIGZvciBsYXN0Y2xvc2UgJiBwYW5pYyBwYXRocy4KKyAqLwordm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCkKK3sKKwlib29sIHJldDsKKwlyZXQgPSBkcm1fZmJfaGVscGVyX2ZvcmNlX2tlcm5lbF9tb2RlKCk7CisJaWYgKHJldCA9PSB0cnVlKQorCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXN0b3JlIGNydGMgY29uZmlndXJhdGlvblxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcmVzdG9yZSk7CisKK3N0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKK3sKKwlkcm1fZmJfaGVscGVyX3Jlc3RvcmUoKTsKK30KK3N0YXRpYyBERUNMQVJFX1dPUksoZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX3dvcmssIGRybV9mYl9oZWxwZXJfcmVzdG9yZV93b3JrX2ZuKTsKKworc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9zeXNycShpbnQgZHVtbXkxLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqZHVtbXkzKQoreworCXNjaGVkdWxlX3dvcmsoJmRybV9mYl9oZWxwZXJfcmVzdG9yZV93b3JrKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX29wID0geworCS5oYW5kbGVyID0gZHJtX2ZiX2hlbHBlcl9zeXNycSwKKwkuaGVscF9tc2cgPSAiZm9yY2UtZmIoVikiLAorCS5hY3Rpb25fbXNnID0gIlJlc3RvcmUgZnJhbWVidWZmZXIgY29uc29sZSIsCit9OworCitzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX29uKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJaW50IGk7CisKKwkvKgorCSAqIEZvciBlYWNoIENSVEMgaW4gdGhpcyBmYiwgdHVybiB0aGUgY3J0YyBvbiB0aGVuLAorCSAqIGZpbmQgYWxsIGFzc29jaWF0ZWQgZW5jb2RlcnMgYW5kIHR1cm4gdGhlbSBvbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPQorCQkJCWNydGMtPmhlbHBlcl9wcml2YXRlOworCisJCQkvKiBPbmx5IG1lc3Mgd2l0aCBDUlRDcyBpbiB0aGlzIGZiICovCisJCQlpZiAoY3J0Yy0+YmFzZS5pZCAhPSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkIHx8CisJCQkgICAgIWNydGMtPmVuYWJsZWQpCisJCQkJY29udGludWU7CisKKwkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09OKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwkJCS8qIEZvdW5kIGEgQ1JUQyBvbiB0aGlzIGZiLCBub3cgZmluZCBlbmNvZGVycyAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSB7CisJCQkJCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7CisKKwkJCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQkJCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCQkJZW5jb2Rlcl9mdW5jcy0+ZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09OKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfb2ZmKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZHBtc19tb2RlKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJaW50IGk7CisKKwkvKgorCSAqIEZvciBlYWNoIENSVEMgaW4gdGhpcyBmYiwgZmluZCBhbGwgYXNzb2NpYXRlZCBlbmNvZGVycworCSAqIGFuZCB0dXJuIHRoZW0gb2ZmLCB0aGVuIHR1cm4gb2ZmIHRoZSBDUlRDLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9CisJCQkJY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisKKwkJCS8qIE9ubHkgbWVzcyB3aXRoIENSVENzIGluIHRoaXMgZmIgKi8KKwkJCWlmIChjcnRjLT5iYXNlLmlkICE9IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLmNydGNfaWQgfHwKKwkJCSAgICAhY3J0Yy0+ZW5hYmxlZCkKKwkJCQljb250aW51ZTsKKworCQkJLyogRm91bmQgYSBDUlRDIG9uIHRoaXMgZmIsIG5vdyBmaW5kIGVuY29kZXJzICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQkJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKKwkJCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKworCQkJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCQkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIGRwbXNfbW9kZSk7CisJCQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQkJfQorCQkJfQorCQkJaWYgKGRwbXNfbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09GRikgeworCQkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgZHBtc19tb2RlKTsKKwkJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJfQorCQl9CisJfQorfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN3aXRjaCAoYmxhbmspIHsKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCWRybV9mYl9oZWxwZXJfb24oaW5mbyk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCQlkcm1fZmJfaGVscGVyX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NUQU5EQlkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCWRybV9mYl9oZWxwZXJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1RBTkRCWSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwkJZHJtX2ZiX2hlbHBlcl9vZmYoaW5mbywgRFJNX01PREVfRFBNU19TVVNQRU5EKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCWRybV9mYl9oZWxwZXJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2JsYW5rKTsKKworc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9jcnRjX2ZyZWUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBoZWxwZXItPmNydGNfY291bnQ7IGkrKykKKwkJa2ZyZWUoaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuY29ubmVjdG9ycyk7CisJa2ZyZWUoaGVscGVyLT5jcnRjX2luZm8pOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwgaW50IGNydGNfY291bnQsIGludCBtYXhfY29ubl9jb3VudCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaGVscGVyLT5kZXY7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWludCByZXQgPSAwOworCWludCBpOworCisJaGVscGVyLT5jcnRjX2luZm8gPSBrY2FsbG9jKGNydGNfY291bnQsIHNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZWxwZXItPmNydGNfaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZWxwZXItPmNydGNfY291bnQgPSBjcnRjX2NvdW50OworCisJZm9yIChpID0gMDsgaSA8IGNydGNfY291bnQ7IGkrKykgeworCQloZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5jb25uZWN0b3JzID0KKwkJCWtjYWxsb2MobWF4X2Nvbm5fY291bnQsCisJCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yICopLAorCQkJCUdGUF9LRVJORUwpOworCisJCWlmICghaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuY29ubmVjdG9ycykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwkJaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQubnVtX2Nvbm5lY3RvcnMgPSAwOworCX0KKworCWkgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWhlbHBlci0+Y3J0Y19pbmZvW2ldLmNydGNfaWQgPSBjcnRjLT5iYXNlLmlkOworCQloZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5jcnRjID0gY3J0YzsKKwkJaSsrOworCX0KKwloZWxwZXItPmNvbm5fbGltaXQgPSBtYXhfY29ubl9jb3VudDsKKwlyZXR1cm4gMDsKK291dF9mcmVlOgorCWRybV9mYl9oZWxwZXJfY3J0Y19mcmVlKGhlbHBlcik7CisJcmV0dXJuIC1FTk9NRU07Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KTsKKworaW50IGRybV9mYl9oZWxwZXJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLAorCQkJICAgIHVuc2lnbmVkIHJlZCwKKwkJCSAgICB1bnNpZ25lZCBncmVlbiwKKwkJCSAgICB1bnNpZ25lZCBibHVlLAorCQkJICAgIHVuc2lnbmVkIHRyYW5zcCwKKwkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7CisKKwkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CisJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IGZiX2hlbHBlci0+Y3J0Y19jb3VudCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZWdubyA+IDI1NSkKKwkJCXJldHVybiAxOworCisJCWlmIChmYi0+ZGVwdGggPT0gOCkgeworCQkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCXN3aXRjaCAoZmItPmRlcHRoKSB7CisJCQljYXNlIDE1OgorCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAorCQkJCQkoKGdyZWVuICYgMHhmODAwKSA+PiAgNikgfAorCQkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6CisJCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKKwkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKKwkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOworCQkJCWJyZWFrOworCQkJY2FzZSAyNDoKKwkJCWNhc2UgMzI6CisJCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9CisJCQkJCSgoKHJlZCA+PiA4KSAmIDB4ZmYpIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkJCSgoKGdyZWVuID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAorCQkJCQkoKChibHVlID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcpOworCitpbnQgZHJtX2ZiX2hlbHBlcl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7CisJaW50IGRlcHRoOworCisJaWYgKHZhci0+cGl4Y2xvY2sgPT0gLTEgfHwgIXZhci0+cGl4Y2xvY2spCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTmVlZCB0byByZXNpemUgdGhlIGZiIG9iamVjdCAhISEgKi8KKwlpZiAodmFyLT54cmVzID4gZmItPndpZHRoIHx8IHZhci0+eXJlcyA+IGZiLT5oZWlnaHQpIHsKKwkJRFJNX0VSUk9SKCJSZXF1ZXN0ZWQgd2lkdGgvaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZiICIKKwkJCSAgICJvYmplY3QgJWR4JWQgPiAlZHglZFxuIiwgdmFyLT54cmVzLCB2YXItPnlyZXMsCisJCQkgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOworCQlEUk1fRVJST1IoIk5lZWQgcmVzaXppbmcgY29kZS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE2OgorCQlkZXB0aCA9ICh2YXItPmdyZWVuLmxlbmd0aCA9PSA2KSA/IDE2IDogMTU7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRlcHRoID0gKHZhci0+dHJhbnNwLmxlbmd0aCA+IDApID8gMzIgOiAyNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGRlcHRoKSB7CisJY2FzZSA4OgorCQl2YXItPnJlZC5vZmZzZXQgPSAwOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIDE1OgorCQl2YXItPnJlZC5vZmZzZXQgPSAxMDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA1OworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMTU7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhci0+cmVkLm9mZnNldCA9IDExOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIDI0OgorCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyKTsKKworLyogdGhpcyB3aWxsIGxldCBmYmNvbiBkbyB0aGUgbW9kZSBpbml0ICovCitpbnQgZHJtX2ZiX2hlbHBlcl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWlmICh2YXItPnBpeGNsb2NrICE9IC0xKSB7CisJCURSTV9FUlJPUigiUElYRUwgQ0xDT0sgU0VUXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKKwkJCWlmIChjcnRjLT5iYXNlLmlkID09IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLmNydGNfaWQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gZmJfaGVscGVyLT5jcnRjX2NvdW50KQorCQkJY29udGludWU7CisKKwkJaWYgKGNydGMtPmZiID09IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmZiKSB7CisJCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKCZmYl9oZWxwZXItPmNydGNfaW5mby0+bW9kZV9zZXQpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9zZXRfcGFyKTsKKworaW50IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0uY3J0Y19pZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpID09IGZiX2hlbHBlci0+Y3J0Y19jb3VudCkKKwkJCWNvbnRpbnVlOworCisJCW1vZGVzZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7CisKKwkJbW9kZXNldC0+eCA9IHZhci0+eG9mZnNldDsKKwkJbW9kZXNldC0+eSA9IHZhci0+eW9mZnNldDsKKworCQlpZiAobW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMpIHsKKwkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcobW9kZXNldCk7CisJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJaWYgKCFyZXQpIHsKKwkJCQlpbmZvLT52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKKwkJCQlpbmZvLT52YXIueW9mZnNldCA9IHZhci0+eW9mZnNldDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5KTsKKworaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBpbnQgKCpmYl9jcmVhdGUpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQkgICB1aW50MzJfdCBmYl93aWR0aCwKKwkJCQkJCSAgIHVpbnQzMl90IGZiX2hlaWdodCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKKwkJCQkJCSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKipmYl9wdHIpKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXVuc2lnbmVkIGludCBmYl93aWR0aCA9ICh1bnNpZ25lZCktMSwgZmJfaGVpZ2h0ID0gKHVuc2lnbmVkKS0xOworCXVuc2lnbmVkIGludCBzdXJmYWNlX3dpZHRoID0gMCwgc3VyZmFjZV9oZWlnaHQgPSAwOworCWludCBuZXdfZmIgPSAwOworCWludCBjcnRjX2NvdW50ID0gMDsKKwlpbnQgcmV0LCBpLCBjb25uX2NvdW50ID0gMDsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyOworCisJLyogZmlyc3QgdXAgZ2V0IGEgY291bnQgb2YgY3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpIHsKKwkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUpIHsKKwkJCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheSA8IGZiX3dpZHRoKQorCQkJCQlmYl93aWR0aCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXk7CisKKwkJCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheSA8IGZiX2hlaWdodCkKKwkJCQkJZmJfaGVpZ2h0ID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheTsKKworCQkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5ID4gc3VyZmFjZV93aWR0aCkKKwkJCQkJc3VyZmFjZV93aWR0aCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXk7CisKKwkJCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheSA+IHN1cmZhY2VfaGVpZ2h0KQorCQkJCQlzdXJmYWNlX2hlaWdodCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXk7CisJCQl9CisJCQljcnRjX2NvdW50Kys7CisJCX0KKwl9CisKKwlpZiAoY3J0Y19jb3VudCA9PSAwIHx8IGZiX3dpZHRoID09IC0xIHx8IGZiX2hlaWdodCA9PSAtMSkgeworCQkvKiBobW0gZXZlcnlvbmUgd2VudCBhd2F5IC0gYXNzdW1lIFZHQSBjYWJsZSBqdXN0IGZlbGwgb3V0CisJCSAgIGFuZCB3aWxsIGNvbWUgYmFjayBsYXRlci4gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogZG8gd2UgaGF2ZSBhbiBmYiBhbHJlYWR5PyAqLworCWlmIChsaXN0X2VtcHR5KCZkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0KSkgeworCQlyZXQgPSAoKmZiX2NyZWF0ZSkoZGV2LCBmYl93aWR0aCwgZmJfaGVpZ2h0LCBzdXJmYWNlX3dpZHRoLAorCQkJCSAgIHN1cmZhY2VfaGVpZ2h0LCAmZmIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW5ld19mYiA9IDE7CisJfSBlbHNlIHsKKwkJZmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0LAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIsIGZpbHBfaGVhZCk7CisKKwkJLyogaWYgc29tZW9uZSBob3RwbHVncyBzb21ldGhpbmcgYmlnZ2VyIHRoYW4gd2UgaGF2ZSBhbHJlYWR5IGFsbG9jYXRlZCwgd2UgYXJlIHB3bmVkLgorCQkgICBBcyByZWFsbHkgd2UgY2FuJ3QgcmVzaXplIGFuIGZiZGV2IHRoYXQgaXMgaW4gdGhlIHdpbGQgY3VycmVudGx5IGR1ZSB0byBmYmRldgorCQkgICBub3QgcmVhbGx5IGJlaW5nIGRlc2lnbmVkIGZvciB0aGUgbG93ZXIgbGF5ZXJzIG1vdmluZyBzdHVmZiBhcm91bmQgdW5kZXIgaXQuCisJCSAgIC0gc28gaW4gdGhlIGdyYW5kIHN0eWxlIG9mIHRoaW5ncyAtIHB1bnQuICovCisJCWlmICgoZmItPndpZHRoIDwgc3VyZmFjZV93aWR0aCkgfHwKKwkJICAgIChmYi0+aGVpZ2h0IDwgc3VyZmFjZV9oZWlnaHQpKSB7CisJCQlEUk1fRVJST1IoIkZyYW1lYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2ggdG8gc2NhbGUgY29uc29sZSBvbnRvLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWluZm8gPSBmYi0+ZmJkZXY7CisJZmJfaGVscGVyID0gaW5mby0+cGFyOworCisJY3J0Y19jb3VudCA9IDA7CisJLyogb2theSB3ZSBuZWVkIHRvIHNldHVwIG5ldyBjb25uZWN0b3Igc2V0cyBpbiB0aGUgY3J0Y3MgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQltb2Rlc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2NydGNfY291bnRdLm1vZGVfc2V0OworCQltb2Rlc2V0LT5mYiA9IGZiOworCQljb25uX2NvdW50ID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyKQorCQkJCWlmIChjb25uZWN0b3ItPmVuY29kZXItPmNydGMgPT0gbW9kZXNldC0+Y3J0YykgeworCQkJCQltb2Rlc2V0LT5jb25uZWN0b3JzW2Nvbm5fY291bnRdID0gY29ubmVjdG9yOworCQkJCQljb25uX2NvdW50Kys7CisJCQkJCWlmIChjb25uX2NvdW50ID4gZmJfaGVscGVyLT5jb25uX2xpbWl0KQorCQkJCQkJQlVHKCk7CisJCQkJfQorCQl9CisKKwkJZm9yIChpID0gY29ubl9jb3VudDsgaSA8IGZiX2hlbHBlci0+Y29ubl9saW1pdDsgaSsrKQorCQkJbW9kZXNldC0+Y29ubmVjdG9yc1tpXSA9IE5VTEw7CisKKwkJbW9kZXNldC0+Y3J0YyA9IGNydGM7CisJCWNydGNfY291bnQrKzsKKworCQltb2Rlc2V0LT5udW1fY29ubmVjdG9ycyA9IGNvbm5fY291bnQ7CisJCWlmIChtb2Rlc2V0LT5jcnRjLT5kZXNpcmVkX21vZGUpIHsKKwkJCWlmIChtb2Rlc2V0LT5tb2RlKQorCQkJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2Rlc2V0LT5tb2RlKTsKKwkJCW1vZGVzZXQtPm1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LAorCQkJCQkJCSAgIG1vZGVzZXQtPmNydGMtPmRlc2lyZWRfbW9kZSk7CisJCX0KKwl9CisJZmJfaGVscGVyLT5jcnRjX2NvdW50ID0gY3J0Y19jb3VudDsKKwlmYl9oZWxwZXItPmZiID0gZmI7CisKKwlpZiAobmV3X2ZiKSB7CisJCWluZm8tPnZhci5waXhjbG9jayA9IC0xOworCQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJZHJtX2ZiX2hlbHBlcl9zZXRfcGFyKGluZm8pOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBpbmZvLT5ub2RlLAorCSAgICAgICBpbmZvLT5maXguaWQpOworCisJLyogU3dpdGNoIGJhY2sgdG8ga2VybmVsIGNvbnNvbGUgb24gcGFuaWMgKi8KKwkvKiBtdWx0aSBjYXJkIGxpbmtlZCBsaXN0IG1heWJlICovCisJaWYgKGxpc3RfZW1wdHkoJmtlcm5lbF9mYl9oZWxwZXJfbGlzdCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmVnaXN0ZXJlZCBwYW5pYyBub3RpZmllclxuIik7CisJCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKKwkJCQkJICAgICAgICZwYW5pY2VkKTsKKwkJcmVnaXN0ZXJfc3lzcnFfa2V5KCd2JywgJnN5c3JxX2RybV9mYl9oZWxwZXJfcmVzdG9yZV9vcCk7CisJfQorCWxpc3RfYWRkKCZmYl9oZWxwZXItPmtlcm5lbF9mYl9saXN0LCAma2VybmVsX2ZiX2hlbHBlcl9saXN0KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUpOworCit2b2lkIGRybV9mYl9oZWxwZXJfZnJlZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyKQoreworCWxpc3RfZGVsKCZoZWxwZXItPmtlcm5lbF9mYl9saXN0KTsKKwlpZiAobGlzdF9lbXB0eSgma2VybmVsX2ZiX2hlbHBlcl9saXN0KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJ1bnJlZ2lzdGVyZWQgcGFuaWMgbm90aWZpZXJcbiIpOworCQlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKKwkJCQkJCSAmcGFuaWNlZCk7CisJCXVucmVnaXN0ZXJfc3lzcnFfa2V5KCd2JywgJnN5c3JxX2RybV9mYl9oZWxwZXJfcmVzdG9yZV9vcCk7CisJfQorCWRybV9mYl9oZWxwZXJfY3J0Y19mcmVlKGhlbHBlcik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZnJlZSk7CisKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgcGl0Y2gpCit7CisJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJaW5mby0+Zml4LnR5cGVfYXV4ID0gMDsKKwlpbmZvLT5maXgueHBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLworCWluZm8tPmZpeC55cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCisJaW5mby0+Zml4Lnl3cmFwc3RlcCA9IDA7CisJaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKKwlpbmZvLT5maXgudHlwZV9hdXggPSAwOworCisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gcGl0Y2g7CisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2ZpbGxfZml4KTsKKwordm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICB1aW50MzJfdCBmYl93aWR0aCwgdWludDMyX3QgZmJfaGVpZ2h0KQoreworCWluZm8tPnBzZXVkb19wYWxldHRlID0gZmItPnBzZXVkb19wYWxldHRlOworCWluZm8tPnZhci54cmVzX3ZpcnR1YWwgPSBmYi0+d2lkdGg7CisJaW5mby0+dmFyLnlyZXNfdmlydHVhbCA9IGZiLT5oZWlnaHQ7CisJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gZmItPmJpdHNfcGVyX3BpeGVsOworCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKKwlpbmZvLT52YXIueW9mZnNldCA9IDA7CisJaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworCWluZm8tPnZhci5oZWlnaHQgPSAtMTsKKwlpbmZvLT52YXIud2lkdGggPSAtMTsKKworCXN3aXRjaCAoZmItPmRlcHRoKSB7CisJY2FzZSA4OgorCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSAwOworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOworCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7IC8qIDhiaXQgREFDICovCisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OworCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxMDsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDU7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gNTsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDU7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDU7CisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMTU7CisJCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxMTsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDU7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gNTsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDY7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDU7CisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxNjsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDg7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOworCQlicmVhazsKKwljYXNlIDMyOgorCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDE2OworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAyNDsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpbmZvLT52YXIueHJlcyA9IGZiX3dpZHRoOworCWluZm8tPnZhci55cmVzID0gZmJfaGVpZ2h0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IGZmZThmNDMuLjIzMGM5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgKiBSZW1vdmVzIHRoZSBtYXBwaW5nIGZyb20gaGFuZGxlIHRvIGZpbHAgZm9yIHRoaXMgb2JqZWN0LgogICovCiBzdGF0aWMgaW50Ci1kcm1fZ2VtX2hhbmRsZV9kZWxldGUoc3RydWN0IGRybV9maWxlICpmaWxwLCBpbnQgaGFuZGxlKQorZHJtX2dlbV9oYW5kbGVfZGVsZXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwgdTMyIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwpAQCAtMjA3LDcgKzIwNyw3IEBACiBpbnQKIGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkgICAgICAgaW50ICpoYW5kbGVwKQorCQkgICAgICAgdTMyICpoYW5kbGVwKQogewogCWludAlyZXQ7CiAKQEAgLTIyMSw3ICsyMjEsNyBAQAogCiAJLyogZG8gdGhlIGFsbG9jYXRpb24gdW5kZXIgb3VyIHNwaW5sb2NrICovCiAJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOwotCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZmaWxlX3ByaXYtPm9iamVjdF9pZHIsIG9iaiwgMSwgaGFuZGxlcCk7CisJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwgb2JqLCAxLCAoaW50ICopaGFuZGxlcCk7CiAJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CiAJaWYgKHJldCA9PSAtRUFHQUlOKQogCQlnb3RvIGFnYWluOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAvKiogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG5hbWVkIGJ5IHRoZSBoYW5kbGUuICovCiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgogZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKLQkJICAgICAgaW50IGhhbmRsZSkKKwkJICAgICAgdTMyIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJc3RydWN0IGRybV9nZW1fb3BlbiAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJaW50IHJldDsKLQlpbnQgaGFuZGxlOworCXUzMiBoYW5kbGU7CiAKIAlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTM5LDcgKzUzOSw2IEBACiAJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRCB8IFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORDsKIAl2bWEtPnZtX29wcyA9IG9iai0+ZGV2LT5kcml2ZXItPmdlbV92bV9vcHM7CiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXAtPmhhbmRsZTsKLQkvKiBGSVhNRTogdXNlIHBncHJvdF93cml0ZWNvbWJpbmUgd2hlbiBhdmFpbGFibGUgKi8KIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3QpOwogCiAJLyogVGFrZSBhIHJlZiBmb3IgdGhpcyBtYXBwaW5nIG9mIHRoZSBvYmplY3QsIHNvIHRoYXQgdGhlIGZhdWx0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCBmODVhYWYyLi4wYTZmMGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBGb3IgdGFzayBxdWV1ZSBzdXBwb3J0ICovCiAKKyNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KIC8qKgogICogR2V0IGludGVycnVwdCBmcm9tIGJ1cyBpZC4KICAqCkBAIC0xNzEsNiArMTcyLDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfaW5pdCk7CiAKK3N0YXRpYyB2b2lkIGRybV9pcnFfdmdhYXJiX25va21zKHZvaWQgKmNvb2tpZSwgYm9vbCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29va2llOworCisJaWYgKGRldi0+ZHJpdmVyLT52Z2FhcmJfaXJxKSB7CisJCWRldi0+ZHJpdmVyLT52Z2FhcmJfaXJxKGRldiwgc3RhdGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkZXYtPmlycV9lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoc3RhdGUpCisJCWRldi0+ZHJpdmVyLT5pcnFfdW5pbnN0YWxsKGRldik7CisJZWxzZSB7CisJCWRldi0+ZHJpdmVyLT5pcnFfcHJlaW5zdGFsbChkZXYpOworCQlkZXYtPmRyaXZlci0+aXJxX3Bvc3RpbnN0YWxsKGRldik7CisJfQorfQorCiAvKioKICAqIEluc3RhbGwgSVJRIGhhbmRsZXIuCiAgKgpAQCAtMjMxLDYgKzI1Miw5IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgKHZvaWQgKilkZXYsIGRybV9pcnFfdmdhYXJiX25va21zLCBOVUxMKTsKKwogCS8qIEFmdGVyIGluc3RhbGxpbmcgaGFuZGxlciAqLwogCXJldCA9IGRldi0+ZHJpdmVyLT5pcnFfcG9zdGluc3RhbGwoZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMjc5LDYgKzMwMyw5IEBACiAKIAlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5wZGV2LT5pcnEpOwogCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CisKIAlkZXYtPmRyaXZlci0+aXJxX3VuaW5zdGFsbChkZXYpOwogCiAJZnJlZV9pcnEoZGV2LT5wZGV2LT5pcnEsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggM2U0Nzg2OS4uYzg2MWQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm1fbW0uaCIKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogI2RlZmluZSBNTV9VTlVTRURfVEFSR0VUIDQKIApAQCAtMzcwLDMgKzM3MSwyMyBAQAogCUJVR19PTihtbS0+bnVtX3VudXNlZCAhPSAwKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX21tX3Rha2Vkb3duKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQoraW50IGRybV9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9tbSAqbW0pCit7CisJc3RydWN0IGRybV9tbV9ub2RlICplbnRyeTsKKwlpbnQgdG90YWxfdXNlZCA9IDAsIHRvdGFsX2ZyZWUgPSAwLCB0b3RhbCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbW0tPm1sX2VudHJ5LCBtbF9lbnRyeSkgeworCQlzZXFfcHJpbnRmKG0sICIweCUwOGx4LTB4JTA4bHg6IDB4JTA4bHg6ICVzXG4iLCBlbnRyeS0+c3RhcnQsIGVudHJ5LT5zdGFydCArIGVudHJ5LT5zaXplLCBlbnRyeS0+c2l6ZSwgZW50cnktPmZyZWUgPyAiZnJlZSIgOiAidXNlZCIpOworCQl0b3RhbCArPSBlbnRyeS0+c2l6ZTsKKwkJaWYgKGVudHJ5LT5mcmVlKQorCQkJdG90YWxfZnJlZSArPSBlbnRyeS0+c2l6ZTsKKwkJZWxzZQorCQkJdG90YWxfdXNlZCArPSBlbnRyeS0+c2l6ZTsKKwl9CisJc2VxX3ByaW50ZihtLCAidG90YWw6ICVkLCB1c2VkICVkIGZyZWUgJWRcbiIsIHRvdGFsLCB0b3RhbF9mcmVlLCB0b3RhbF91c2VkKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21tX2R1bXBfdGFibGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKaW5kZXggNzkxNDA5Ny4uNDk0MDRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwpAQCAtOCw2ICs4LDggQEAKICAqIENvcHlyaWdodCDCqSAyMDA3IERhdmUgQWlybGllCiAgKiBDb3B5cmlnaHQgwqkgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uCiAgKiAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAyMDA1LTIwMDYgTHVjIFZlcmhhZWdlbgorICogQ29weXJpZ2h0IChjKSAyMDAxLCBBbmR5IFJpdGdlciAgYXJpdGdlckBudmlkaWEuY29tCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCkBAIC0zOCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKIAotI2RlZmluZSBEUk1fTU9ERVNFVF9ERUJVRwkiZHJtX21vZGUiCiAvKioKICAqIGRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUgLSBkZWJ1ZyBwcmludCBhIG1vZGUKICAqIEBkZXY6IERSTSBkZXZpY2UKQEAgLTUxLDggKzUyLDggQEAKICAqLwogdm9pZCBkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewotCURSTV9ERUJVR19NT0RFKERSTV9NT0RFU0VUX0RFQlVHLAotCQkiTW9kZWxpbmUgJWQ6XCIlc1wiICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkIDB4JXggMHgleFxuIiwKKwlEUk1fREVCVUdfS01TKCJNb2RlbGluZSAlZDpcIiVzXCIgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgIgorCQkJIjB4JXggMHgleFxuIiwKIAkJbW9kZS0+YmFzZS5pZCwgbW9kZS0+bmFtZSwgbW9kZS0+dnJlZnJlc2gsIG1vZGUtPmNsb2NrLAogCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+aHN5bmNfc3RhcnQsCiAJCW1vZGUtPmhzeW5jX2VuZCwgbW9kZS0+aHRvdGFsLApAQCAtNjIsNiArNjMsNDIwIEBACiBFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUpOwogCiAvKioKKyAqIGRybV9jdnRfbW9kZSAtY3JlYXRlIGEgbW9kZWxpbmUgYmFzZWQgb24gQ1ZUIGFsZ29yaXRobQorICogQGRldjogRFJNIGRldmljZQorICogQGhkaXNwbGF5OiBoZGlzcGxheSBzaXplCisgKiBAdmRpc3BsYXk6IHZkaXNwbGF5IHNpemUKKyAqIEB2cmVmcmVzaCAgOiB2cmVmcmVzaCByYXRlCisgKiBAcmVkdWNlZCA6IFdoZXRoZXIgdGhlIEdURiBjYWxjdWxhdGlvbiBpcyBzaW1wbGlmaWVkCisgKiBAaW50ZXJsYWNlZDpXaGV0aGVyIHRoZSBpbnRlcmxhY2UgaXMgc3VwcG9ydGVkCisgKgorICogTE9DS0lORzoKKyAqIG5vbmUuCisgKgorICogcmV0dXJuIHRoZSBtb2RlbGluZSBiYXNlZCBvbiBDVlQgYWxnb3JpdGhtCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZ2VuZXJhdGUgdGhlIG1vZGVsaW5lIGJhc2VkIG9uIENWVCBhbGdvcml0aG0KKyAqIGFjY29yZGluZyB0byB0aGUgaGRpc3BsYXksIHZkaXNwbGF5LCB2cmVmcmVzaC4KKyAqIEl0IGlzIGJhc2VkIGZyb20gdGhlIFZFU0EoVE0pIENvb3JkaW5hdGVkIFZpZGVvIFRpbWluZyBHZW5lcmF0b3IgYnkKKyAqIEdyYWhhbSBMb3ZlcmlkZ2UgQXByaWwgOSwgMjAwMyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cudmVzYS5vcmcvcHVibGljL0NWVC9DVlRkNnIxLnhscworICoKKyAqIEFuZCBpdCBpcyBjb3BpZWQgZnJvbSB4Zjg2Q1ZUbW9kZSBpbiB4c2VydmVyL2h3L3hmcmVlODYvbW9kZXMveGY4NmN2dC5jLgorICogV2hhdCBJIGhhdmUgZG9uZSBpcyB0byB0cmFuc2xhdGUgaXQgYnkgdXNpbmcgaW50ZWdlciBjYWxjdWxhdGlvbi4KKyAqLworI2RlZmluZSBIVl9GQUNUT1IJCQkxMDAwCitzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2N2dF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBoZGlzcGxheSwKKwkJCQkgICAgICBpbnQgdmRpc3BsYXksIGludCB2cmVmcmVzaCwKKwkJCQkgICAgICBib29sIHJlZHVjZWQsIGJvb2wgaW50ZXJsYWNlZCkKK3sKKwkvKiAxKSB0b3AvYm90dG9tIG1hcmdpbiBzaXplICglIG9mIGhlaWdodCkgLSBkZWZhdWx0OiAxLjgsICovCisjZGVmaW5lCUNWVF9NQVJHSU5fUEVSQ0VOVEFHRQkJMTgKKwkvKiAyKSBjaGFyYWN0ZXIgY2VsbCBob3Jpem9udGFsIGdyYW51bGFyaXR5IChwaXhlbHMpIC0gZGVmYXVsdCA4ICovCisjZGVmaW5lCUNWVF9IX0dSQU5VTEFSSVRZCQk4CisJLyogMykgTWluaW11bSB2ZXJ0aWNhbCBwb3JjaCAobGluZXMpIC0gZGVmYXVsdCAzICovCisjZGVmaW5lCUNWVF9NSU5fVl9QT1JDSAkJCTMKKwkvKiA0KSBNaW5pbXVtIG51bWJlciBvZiB2ZXJ0aWNhbCBiYWNrIHBvcmNoIGxpbmVzIC0gZGVmYXVsdCA2ICovCisjZGVmaW5lCUNWVF9NSU5fVl9CUE9SQ0gJCTYKKwkvKiBQaXhlbCBDbG9jayBzdGVwIChrSHopICovCisjZGVmaW5lIENWVF9DTE9DS19TVEVQCQkJMjUwCisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlOworCWJvb2wgbWFyZ2lucyA9IGZhbHNlOworCXVuc2lnbmVkIGludCB2ZmllbGRyYXRlLCBocGVyaW9kOworCWludCBoZGlzcGxheV9ybmQsIGhtYXJnaW4sIHZkaXNwbGF5X3JuZCwgdm1hcmdpbiwgdnN5bmM7CisJaW50IGludGVybGFjZTsKKworCS8qIGFsbG9jYXRlIHRoZSBkcm1fZGlzcGxheV9tb2RlIHN0cnVjdHVyZS4gSWYgZmFpbHVyZSwgd2Ugd2lsbAorCSAqIHJldHVybiBkaXJlY3RseQorCSAqLworCWRybV9tb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7CisJaWYgKCFkcm1fbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiB0aGUgQ1ZUIGRlZmF1bHQgcmVmcmVzaCByYXRlIGlzIDYwSHogKi8KKwlpZiAoIXZyZWZyZXNoKQorCQl2cmVmcmVzaCA9IDYwOworCisJLyogdGhlIHJlcXVpcmVkIGZpZWxkIGZyZXNoIHJhdGUgKi8KKwlpZiAoaW50ZXJsYWNlZCkKKwkJdmZpZWxkcmF0ZSA9IHZyZWZyZXNoICogMjsKKwllbHNlCisJCXZmaWVsZHJhdGUgPSB2cmVmcmVzaDsKKworCS8qIGhvcml6b250YWwgcGl4ZWxzICovCisJaGRpc3BsYXlfcm5kID0gaGRpc3BsYXkgLSAoaGRpc3BsYXkgJSBDVlRfSF9HUkFOVUxBUklUWSk7CisKKwkvKiBkZXRlcm1pbmUgdGhlIGxlZnQmcmlnaHQgYm9yZGVycyAqLworCWhtYXJnaW4gPSAwOworCWlmIChtYXJnaW5zKSB7CisJCWhtYXJnaW4gPSBoZGlzcGxheV9ybmQgKiBDVlRfTUFSR0lOX1BFUkNFTlRBR0UgLyAxMDAwOworCQlobWFyZ2luIC09IGhtYXJnaW4gJSBDVlRfSF9HUkFOVUxBUklUWTsKKwl9CisJLyogZmluZCB0aGUgdG90YWwgYWN0aXZlIHBpeGVscyAqLworCWRybV9tb2RlLT5oZGlzcGxheSA9IGhkaXNwbGF5X3JuZCArIDIgKiBobWFyZ2luOworCisJLyogZmluZCB0aGUgbnVtYmVyIG9mIGxpbmVzIHBlciBmaWVsZCAqLworCWlmIChpbnRlcmxhY2VkKQorCQl2ZGlzcGxheV9ybmQgPSB2ZGlzcGxheSAvIDI7CisJZWxzZQorCQl2ZGlzcGxheV9ybmQgPSB2ZGlzcGxheTsKKworCS8qIGZpbmQgdGhlIHRvcCAmIGJvdHRvbSBib3JkZXJzICovCisJdm1hcmdpbiA9IDA7CisJaWYgKG1hcmdpbnMpCisJCXZtYXJnaW4gPSB2ZGlzcGxheV9ybmQgKiBDVlRfTUFSR0lOX1BFUkNFTlRBR0UgLyAxMDAwOworCisJZHJtX21vZGUtPnZkaXNwbGF5ID0gdmRpc3BsYXkgKyAyICogdm1hcmdpbjsKKworCS8qIEludGVybGFjZWQgKi8KKwlpZiAoaW50ZXJsYWNlZCkKKwkJaW50ZXJsYWNlID0gMTsKKwllbHNlCisJCWludGVybGFjZSA9IDA7CisKKwkvKiBEZXRlcm1pbmUgVlN5bmMgV2lkdGggZnJvbSBhc3BlY3QgcmF0aW8gKi8KKwlpZiAoISh2ZGlzcGxheSAlIDMpICYmICgodmRpc3BsYXkgKiA0IC8gMykgPT0gaGRpc3BsYXkpKQorCQl2c3luYyA9IDQ7CisJZWxzZSBpZiAoISh2ZGlzcGxheSAlIDkpICYmICgodmRpc3BsYXkgKiAxNiAvIDkpID09IGhkaXNwbGF5KSkKKwkJdnN5bmMgPSA1OworCWVsc2UgaWYgKCEodmRpc3BsYXkgJSAxMCkgJiYgKCh2ZGlzcGxheSAqIDE2IC8gMTApID09IGhkaXNwbGF5KSkKKwkJdnN5bmMgPSA2OworCWVsc2UgaWYgKCEodmRpc3BsYXkgJSA0KSAmJiAoKHZkaXNwbGF5ICogNSAvIDQpID09IGhkaXNwbGF5KSkKKwkJdnN5bmMgPSA3OworCWVsc2UgaWYgKCEodmRpc3BsYXkgJSA5KSAmJiAoKHZkaXNwbGF5ICogMTUgLyA5KSA9PSBoZGlzcGxheSkpCisJCXZzeW5jID0gNzsKKwllbHNlIC8qIGN1c3RvbSAqLworCQl2c3luYyA9IDEwOworCisJaWYgKCFyZWR1Y2VkKSB7CisJCS8qIHNpbXBsaWZ5IHRoZSBHVEYgY2FsY3VsYXRpb24gKi8KKwkJLyogNCkgTWluaW11bSB0aW1lIG9mIHZlcnRpY2FsIHN5bmMgKyBiYWNrIHBvcmNoIGludGVydmFsICjCtXMpCisJCSAqIGRlZmF1bHQgNTUwLjAKKwkJICovCisJCWludCB0bXAxLCB0bXAyOworI2RlZmluZSBDVlRfTUlOX1ZTWU5DX0JQCTU1MAorCQkvKiAzKSBOb21pbmFsIEhTeW5jIHdpZHRoICglIG9mIGxpbmUgcGVyaW9kKSAtIGRlZmF1bHQgOCAqLworI2RlZmluZSBDVlRfSFNZTkNfUEVSQ0VOVEFHRQk4CisJCXVuc2lnbmVkIGludCBoYmxhbmtfcGVyY2VudGFnZTsKKwkJaW50IHZzeW5jYW5kYmFja19wb3JjaCwgdmJhY2tfcG9yY2gsIGhibGFuazsKKworCQkvKiBlc3RpbWF0ZWQgdGhlIGhvcml6b250YWwgcGVyaW9kICovCisJCXRtcDEgPSBIVl9GQUNUT1IgKiAxMDAwMDAwICAtCisJCQkJQ1ZUX01JTl9WU1lOQ19CUCAqIEhWX0ZBQ1RPUiAqIHZmaWVsZHJhdGU7CisJCXRtcDIgPSAodmRpc3BsYXlfcm5kICsgMiAqIHZtYXJnaW4gKyBDVlRfTUlOX1ZfUE9SQ0gpICogMiArCisJCQkJaW50ZXJsYWNlOworCQlocGVyaW9kID0gdG1wMSAqIDIgLyAodG1wMiAqIHZmaWVsZHJhdGUpOworCisJCXRtcDEgPSBDVlRfTUlOX1ZTWU5DX0JQICogSFZfRkFDVE9SIC8gaHBlcmlvZCArIDE7CisJCS8qIDkuIEZpbmQgbnVtYmVyIG9mIGxpbmVzIGluIHN5bmMgKyBiYWNrcG9yY2ggKi8KKwkJaWYgKHRtcDEgPCAodnN5bmMgKyBDVlRfTUlOX1ZfUE9SQ0gpKQorCQkJdnN5bmNhbmRiYWNrX3BvcmNoID0gdnN5bmMgKyBDVlRfTUlOX1ZfUE9SQ0g7CisJCWVsc2UKKwkJCXZzeW5jYW5kYmFja19wb3JjaCA9IHRtcDE7CisJCS8qIDEwLiBGaW5kIG51bWJlciBvZiBsaW5lcyBpbiBiYWNrIHBvcmNoICovCisJCXZiYWNrX3BvcmNoID0gdnN5bmNhbmRiYWNrX3BvcmNoIC0gdnN5bmM7CisJCWRybV9tb2RlLT52dG90YWwgPSB2ZGlzcGxheV9ybmQgKyAyICogdm1hcmdpbiArCisJCQkJdnN5bmNhbmRiYWNrX3BvcmNoICsgQ1ZUX01JTl9WX1BPUkNIOworCQkvKiA1KSBEZWZpbml0aW9uIG9mIEhvcml6b250YWwgYmxhbmtpbmcgdGltZSBsaW1pdGF0aW9uICovCisJCS8qIEdyYWRpZW50ICglL2tIeikgLSBkZWZhdWx0IDYwMCAqLworI2RlZmluZSBDVlRfTV9GQUNUT1IJNjAwCisJCS8qIE9mZnNldCAoJSkgLSBkZWZhdWx0IDQwICovCisjZGVmaW5lIENWVF9DX0ZBQ1RPUgk0MAorCQkvKiBCbGFua2luZyB0aW1lIHNjYWxpbmcgZmFjdG9yIC0gZGVmYXVsdCAxMjggKi8KKyNkZWZpbmUgQ1ZUX0tfRkFDVE9SCTEyOAorCQkvKiBTY2FsaW5nIGZhY3RvciB3ZWlnaHRpbmcgLSBkZWZhdWx0IDIwICovCisjZGVmaW5lIENWVF9KX0ZBQ1RPUgkyMAorI2RlZmluZSBDVlRfTV9QUklNRQkoQ1ZUX01fRkFDVE9SICogQ1ZUX0tfRkFDVE9SIC8gMjU2KQorI2RlZmluZSBDVlRfQ19QUklNRQkoKENWVF9DX0ZBQ1RPUiAtIENWVF9KX0ZBQ1RPUikgKiBDVlRfS19GQUNUT1IgLyAyNTYgKyBcCisJCQkgQ1ZUX0pfRkFDVE9SKQorCQkvKiAxMi4gRmluZCBpZGVhbCBibGFua2luZyBkdXR5IGN5Y2xlIGZyb20gZm9ybXVsYSAqLworCQloYmxhbmtfcGVyY2VudGFnZSA9IENWVF9DX1BSSU1FICogSFZfRkFDVE9SIC0gQ1ZUX01fUFJJTUUgKgorCQkJCQlocGVyaW9kIC8gMTAwMDsKKwkJLyogMTMuIEJsYW5raW5nIHRpbWUgKi8KKwkJaWYgKGhibGFua19wZXJjZW50YWdlIDwgMjAgKiBIVl9GQUNUT1IpCisJCQloYmxhbmtfcGVyY2VudGFnZSA9IDIwICogSFZfRkFDVE9SOworCQloYmxhbmsgPSBkcm1fbW9kZS0+aGRpc3BsYXkgKiBoYmxhbmtfcGVyY2VudGFnZSAvCisJCQkgKDEwMCAqIEhWX0ZBQ1RPUiAtIGhibGFua19wZXJjZW50YWdlKTsKKwkJaGJsYW5rIC09IGhibGFuayAlICgyICogQ1ZUX0hfR1JBTlVMQVJJVFkpOworCQkvKiAxNC4gZmluZCB0aGUgdG90YWwgcGl4ZXMgcGVyIGxpbmUgKi8KKwkJZHJtX21vZGUtPmh0b3RhbCA9IGRybV9tb2RlLT5oZGlzcGxheSArIGhibGFuazsKKwkJZHJtX21vZGUtPmhzeW5jX2VuZCA9IGRybV9tb2RlLT5oZGlzcGxheSArIGhibGFuayAvIDI7CisJCWRybV9tb2RlLT5oc3luY19zdGFydCA9IGRybV9tb2RlLT5oc3luY19lbmQgLQorCQkJKGRybV9tb2RlLT5odG90YWwgKiBDVlRfSFNZTkNfUEVSQ0VOVEFHRSkgLyAxMDA7CisJCWRybV9tb2RlLT5oc3luY19zdGFydCArPSBDVlRfSF9HUkFOVUxBUklUWSAtCisJCQlkcm1fbW9kZS0+aHN5bmNfc3RhcnQgJSBDVlRfSF9HUkFOVUxBUklUWTsKKwkJLyogZmlsbCB0aGUgVnN5bmMgdmFsdWVzICovCisJCWRybV9tb2RlLT52c3luY19zdGFydCA9IGRybV9tb2RlLT52ZGlzcGxheSArIENWVF9NSU5fVl9QT1JDSDsKKwkJZHJtX21vZGUtPnZzeW5jX2VuZCA9IGRybV9tb2RlLT52c3luY19zdGFydCArIHZzeW5jOworCX0gZWxzZSB7CisJCS8qIFJlZHVjZWQgYmxhbmtpbmcgKi8KKwkJLyogTWluaW11bSB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnZhbCB0aW1lICjCtXMpLSBkZWZhdWx0IDQ2MCAqLworI2RlZmluZSBDVlRfUkJfTUlOX1ZCTEFOSwk0NjAKKwkJLyogRml4ZWQgbnVtYmVyIG9mIGNsb2NrcyBmb3IgaG9yaXpvbnRhbCBzeW5jICovCisjZGVmaW5lIENWVF9SQl9IX1NZTkMJCTMyCisJCS8qIEZpeGVkIG51bWJlciBvZiBjbG9ja3MgZm9yIGhvcml6b250YWwgYmxhbmtpbmcgKi8KKyNkZWZpbmUgQ1ZUX1JCX0hfQkxBTksJCTE2MAorCQkvKiBGaXhlZCBudW1iZXIgb2YgbGluZXMgZm9yIHZlcnRpY2FsIGZyb250IHBvcmNoIC0gZGVmYXVsdCAzKi8KKyNkZWZpbmUgQ1ZUX1JCX1ZGUE9SQ0gJCTMKKwkJaW50IHZiaWxpbmVzOworCQlpbnQgdG1wMSwgdG1wMjsKKwkJLyogOC4gRXN0aW1hdGUgSG9yaXpvbnRhbCBwZXJpb2QuICovCisJCXRtcDEgPSBIVl9GQUNUT1IgKiAxMDAwMDAwIC0KKwkJCUNWVF9SQl9NSU5fVkJMQU5LICogSFZfRkFDVE9SICogdmZpZWxkcmF0ZTsKKwkJdG1wMiA9IHZkaXNwbGF5X3JuZCArIDIgKiB2bWFyZ2luOworCQlocGVyaW9kID0gdG1wMSAvICh0bXAyICogdmZpZWxkcmF0ZSk7CisJCS8qIDkuIEZpbmQgbnVtYmVyIG9mIGxpbmVzIGluIHZlcnRpY2FsIGJsYW5raW5nICovCisJCXZiaWxpbmVzID0gQ1ZUX1JCX01JTl9WQkxBTksgKiBIVl9GQUNUT1IgLyBocGVyaW9kICsgMTsKKwkJLyogMTAuIENoZWNrIGlmIHZlcnRpY2FsIGJsYW5raW5nIGlzIHN1ZmZpY2llbnQgKi8KKwkJaWYgKHZiaWxpbmVzIDwgKENWVF9SQl9WRlBPUkNIICsgdnN5bmMgKyBDVlRfTUlOX1ZfQlBPUkNIKSkKKwkJCXZiaWxpbmVzID0gQ1ZUX1JCX1ZGUE9SQ0ggKyB2c3luYyArIENWVF9NSU5fVl9CUE9SQ0g7CisJCS8qIDExLiBGaW5kIHRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiB2ZXJ0aWNhbCBmaWVsZCAqLworCQlkcm1fbW9kZS0+dnRvdGFsID0gdmRpc3BsYXlfcm5kICsgMiAqIHZtYXJnaW4gKyB2YmlsaW5lczsKKwkJLyogMTIuIEZpbmQgdG90YWwgbnVtYmVyIG9mIHBpeGVscyBpbiBhIGxpbmUgKi8KKwkJZHJtX21vZGUtPmh0b3RhbCA9IGRybV9tb2RlLT5oZGlzcGxheSArIENWVF9SQl9IX0JMQU5LOworCQkvKiBGaWxsIGluIEhTeW5jIHZhbHVlcyAqLworCQlkcm1fbW9kZS0+aHN5bmNfZW5kID0gZHJtX21vZGUtPmhkaXNwbGF5ICsgQ1ZUX1JCX0hfQkxBTksgLyAyOworCQlkcm1fbW9kZS0+aHN5bmNfc3RhcnQgPSBkcm1fbW9kZS0+aHN5bmNfZW5kID0gQ1ZUX1JCX0hfU1lOQzsKKwl9CisJLyogMTUvMTMuIEZpbmQgcGl4ZWwgY2xvY2sgZnJlcXVlbmN5IChrSHogZm9yIHhmODYpICovCisJZHJtX21vZGUtPmNsb2NrID0gZHJtX21vZGUtPmh0b3RhbCAqIEhWX0ZBQ1RPUiAqIDEwMDAgLyBocGVyaW9kOworCWRybV9tb2RlLT5jbG9jayAtPSBkcm1fbW9kZS0+Y2xvY2sgJSBDVlRfQ0xPQ0tfU1RFUDsKKwkvKiAxOC8xNi4gRmluZCBhY3R1YWwgdmVydGljYWwgZnJhbWUgZnJlcXVlbmN5ICovCisJLyogaWdub3JlIC0ganVzdCBzZXQgdGhlIG1vZGUgZmxhZyBmb3IgaW50ZXJsYWNlZCAqLworCWlmIChpbnRlcmxhY2VkKQorCQlkcm1fbW9kZS0+dnRvdGFsICo9IDI7CisJLyogRmlsbCB0aGUgbW9kZSBsaW5lIG5hbWUgKi8KKwlkcm1fbW9kZV9zZXRfbmFtZShkcm1fbW9kZSk7CisJaWYgKHJlZHVjZWQpCisJCWRybV9tb2RlLT5mbGFncyB8PSAoRFJNX01PREVfRkxBR19QSFNZTkMgfAorCQkJCQlEUk1fTU9ERV9GTEFHX05WU1lOQyk7CisJZWxzZQorCQlkcm1fbW9kZS0+ZmxhZ3MgfD0gKERSTV9NT0RFX0ZMQUdfUFZTWU5DIHwKKwkJCQkJRFJNX01PREVfRkxBR19OSFNZTkMpOworCWlmIChpbnRlcmxhY2VkKQorCQlkcm1fbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19JTlRFUkxBQ0U7CisKKyAgICByZXR1cm4gZHJtX21vZGU7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9jdnRfbW9kZSk7CisKKy8qKgorICogZHJtX2d0Zl9tb2RlIC0gY3JlYXRlIHRoZSBtb2RlbGluZSBiYXNlZCBvbiBHVEYgYWxnb3JpdGhtCisgKgorICogQGRldgkJOmRybSBkZXZpY2UKKyAqIEBoZGlzcGxheQk6aGRpc3BsYXkgc2l6ZQorICogQHZkaXNwbGF5CTp2ZGlzcGxheSBzaXplCisgKiBAdnJlZnJlc2gJOnZyZWZyZXNoIHJhdGUuCisgKiBAaW50ZXJsYWNlZAk6d2hldGhlciB0aGUgaW50ZXJsYWNlIGlzIHN1cHBvcnRlZAorICogQG1hcmdpbnMJOndoZXRoZXIgdGhlIG1hcmdpbiBpcyBzdXBwb3J0ZWQKKyAqCisgKiBMT0NLSU5HLgorICogbm9uZS4KKyAqCisgKiByZXR1cm4gdGhlIG1vZGVsaW5lIGJhc2VkIG9uIEdURiBhbGdvcml0aG0KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNyZWF0ZSB0aGUgbW9kZWxpbmUgYmFzZWQgb24gdGhlIEdURiBhbGdvcml0aG0uCisgKiBHZW5lcmFsaXplZCBUaW1pbmcgRm9ybXVsYSBpcyBkZXJpdmVkIGZyb206CisgKglHVEYgU3ByZWFkc2hlZXQgYnkgQW5keSBNb3JyaXNoICgxLzUvOTcpCisgKglhdmFpbGFibGUgYXQgaHR0cDovL3d3dy52ZXNhLm9yZworICoKKyAqIEFuZCBpdCBpcyBjb3BpZWQgZnJvbSB0aGUgZmlsZSBvZiB4c2VydmVyL2h3L3hmcmVlODYvbW9kZXMveGY4Nmd0Zi5jLgorICogV2hhdCBJIGhhdmUgZG9uZSBpcyB0byB0cmFuc2xhdGUgaXQgYnkgdXNpbmcgaW50ZWdlciBjYWxjdWxhdGlvbi4KKyAqIEkgYWxzbyByZWZlciB0byB0aGUgZnVuY3Rpb24gb2YgZmJfZ2V0X21vZGUgaW4gdGhlIGZpbGUgb2YKKyAqIGRyaXZlcnMvdmlkZW8vZmJtb24uYworICovCitzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2d0Zl9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBoZGlzcGxheSwKKwkJCQkgICAgICBpbnQgdmRpc3BsYXksIGludCB2cmVmcmVzaCwKKwkJCQkgICAgICBib29sIGludGVybGFjZWQsIGludCBtYXJnaW5zKQoreworCS8qIDEpIHRvcC9ib3R0b20gbWFyZ2luIHNpemUgKCUgb2YgaGVpZ2h0KSAtIGRlZmF1bHQ6IDEuOCwgKi8KKyNkZWZpbmUJR1RGX01BUkdJTl9QRVJDRU5UQUdFCQkxOAorCS8qIDIpIGNoYXJhY3RlciBjZWxsIGhvcml6b250YWwgZ3JhbnVsYXJpdHkgKHBpeGVscykgLSBkZWZhdWx0IDggKi8KKyNkZWZpbmUJR1RGX0NFTExfR1JBTgkJCTgKKwkvKiAzKSBNaW5pbXVtIHZlcnRpY2FsIHBvcmNoIChsaW5lcykgLSBkZWZhdWx0IDMgKi8KKyNkZWZpbmUJR1RGX01JTl9WX1BPUkNICQkJMQorCS8qIHdpZHRoIG9mIHZzeW5jIGluIGxpbmVzICovCisjZGVmaW5lIFZfU1lOQ19SUUQJCQkzCisJLyogd2lkdGggb2YgaHN5bmMgYXMgJSBvZiB0b3RhbCBsaW5lICovCisjZGVmaW5lIEhfU1lOQ19QRVJDRU5UCQkJOAorCS8qIG1pbiB0aW1lIG9mIHZzeW5jICsgYmFjayBwb3JjaCAobWljcm9zZWMpICovCisjZGVmaW5lIE1JTl9WU1lOQ19QTFVTX0JQCQk1NTAKKwkvKiBibGFua2luZyBmb3JtdWxhIGdyYWRpZW50ICovCisjZGVmaW5lIEdURl9NCQkJCTYwMAorCS8qIGJsYW5raW5nIGZvcm11bGEgb2Zmc2V0ICovCisjZGVmaW5lIEdURl9DCQkJCTQwCisJLyogYmxhbmtpbmcgZm9ybXVsYSBzY2FsaW5nIGZhY3RvciAqLworI2RlZmluZSBHVEZfSwkJCQkxMjgKKwkvKiBibGFua2luZyBmb3JtdWxhIHNjYWxpbmcgZmFjdG9yICovCisjZGVmaW5lIEdURl9KCQkJCTIwCisJLyogQycgYW5kIE0nIGFyZSBwYXJ0IG9mIHRoZSBCbGFua2luZyBEdXR5IEN5Y2xlIGNvbXB1dGF0aW9uICovCisjZGVmaW5lIEdURl9DX1BSSU1FCQkoKChHVEZfQyAtIEdURl9KKSAqIEdURl9LIC8gMjU2KSArIEdURl9KKQorI2RlZmluZSBHVEZfTV9QUklNRQkJKEdURl9LICogR1RGX00gLyAyNTYpCisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlOworCXVuc2lnbmVkIGludCBoZGlzcGxheV9ybmQsIHZkaXNwbGF5X3JuZCwgdmZpZWxkcmF0ZV9ycWQ7CisJaW50IHRvcF9tYXJnaW4sIGJvdHRvbV9tYXJnaW47CisJaW50IGludGVybGFjZTsKKwl1bnNpZ25lZCBpbnQgaGZyZXFfZXN0OworCWludCB2c3luY19wbHVzX2JwLCB2YmFja19wb3JjaDsKKwl1bnNpZ25lZCBpbnQgdnRvdGFsX2xpbmVzLCB2ZmllbGRyYXRlX2VzdCwgaHBlcmlvZDsKKwl1bnNpZ25lZCBpbnQgdmZpZWxkX3JhdGUsIHZmcmFtZV9yYXRlOworCWludCBsZWZ0X21hcmdpbiwgcmlnaHRfbWFyZ2luOworCXVuc2lnbmVkIGludCB0b3RhbF9hY3RpdmVfcGl4ZWxzLCBpZGVhbF9kdXR5X2N5Y2xlOworCXVuc2lnbmVkIGludCBoYmxhbmssIHRvdGFsX3BpeGVscywgcGl4ZWxfZnJlcTsKKwlpbnQgaHN5bmMsIGhmcm9udF9wb3JjaCwgdm9kZF9mcm9udF9wb3JjaF9saW5lczsKKwl1bnNpZ25lZCBpbnQgdG1wMSwgdG1wMjsKKworCWRybV9tb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7CisJaWYgKCFkcm1fbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiAxLiBJbiBvcmRlciB0byBnaXZlIGNvcnJlY3QgcmVzdWx0cywgdGhlIG51bWJlciBvZiBob3Jpem9udGFsCisJICogcGl4ZWxzIHJlcXVlc3RlZCBpcyBmaXJzdCBwcm9jZXNzZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgZGl2aXNpYmxlCisJICogYnkgdGhlIGNoYXJhY3RlciBzaXplLCBieSByb3VuZGluZyBpdCB0byB0aGUgbmVhcmVzdCBjaGFyYWN0ZXIKKwkgKiBjZWxsIGJvdW5kYXJ5OgorCSAqLworCWhkaXNwbGF5X3JuZCA9IChoZGlzcGxheSArIEdURl9DRUxMX0dSQU4gLyAyKSAvIEdURl9DRUxMX0dSQU47CisJaGRpc3BsYXlfcm5kID0gaGRpc3BsYXlfcm5kICogR1RGX0NFTExfR1JBTjsKKworCS8qIDIuIElmIGludGVybGFjZSBpcyByZXF1ZXN0ZWQsIHRoZSBudW1iZXIgb2YgdmVydGljYWwgbGluZXMgYXNzdW1lZAorCSAqIGJ5IHRoZSBjYWxjdWxhdGlvbiBtdXN0IGJlIGhhbHZlZCwgYXMgdGhlIGNvbXB1dGF0aW9uIGNhbGN1bGF0ZXMKKwkgKiB0aGUgbnVtYmVyIG9mIHZlcnRpY2FsIGxpbmVzIHBlciBmaWVsZC4KKwkgKi8KKwlpZiAoaW50ZXJsYWNlZCkKKwkJdmRpc3BsYXlfcm5kID0gdmRpc3BsYXkgLyAyOworCWVsc2UKKwkJdmRpc3BsYXlfcm5kID0gdmRpc3BsYXk7CisKKwkvKiAzLiBGaW5kIHRoZSBmcmFtZSByYXRlIHJlcXVpcmVkOiAqLworCWlmIChpbnRlcmxhY2VkKQorCQl2ZmllbGRyYXRlX3JxZCA9IHZyZWZyZXNoICogMjsKKwllbHNlCisJCXZmaWVsZHJhdGVfcnFkID0gdnJlZnJlc2g7CisKKwkvKiA0LiBGaW5kIG51bWJlciBvZiBsaW5lcyBpbiBUb3AgbWFyZ2luOiAqLworCXRvcF9tYXJnaW4gPSAwOworCWlmIChtYXJnaW5zKQorCQl0b3BfbWFyZ2luID0gKHZkaXNwbGF5X3JuZCAqIEdURl9NQVJHSU5fUEVSQ0VOVEFHRSArIDUwMCkgLworCQkJCTEwMDA7CisJLyogNS4gRmluZCBudW1iZXIgb2YgbGluZXMgaW4gYm90dG9tIG1hcmdpbjogKi8KKwlib3R0b21fbWFyZ2luID0gdG9wX21hcmdpbjsKKworCS8qIDYuIElmIGludGVybGFjZSBpcyByZXF1aXJlZCwgdGhlbiBzZXQgdmFyaWFibGUgaW50ZXJsYWNlOiAqLworCWlmIChpbnRlcmxhY2VkKQorCQlpbnRlcmxhY2UgPSAxOworCWVsc2UKKwkJaW50ZXJsYWNlID0gMDsKKworCS8qIDcuIEVzdGltYXRlIHRoZSBIb3Jpem9udGFsIGZyZXF1ZW5jeSAqLworCXsKKwkJdG1wMSA9ICgxMDAwMDAwICAtIE1JTl9WU1lOQ19QTFVTX0JQICogdmZpZWxkcmF0ZV9ycWQpIC8gNTAwOworCQl0bXAyID0gKHZkaXNwbGF5X3JuZCArIDIgKiB0b3BfbWFyZ2luICsgR1RGX01JTl9WX1BPUkNIKSAqCisJCQkJMiArIGludGVybGFjZTsKKwkJaGZyZXFfZXN0ID0gKHRtcDIgKiAxMDAwICogdmZpZWxkcmF0ZV9ycWQpIC8gdG1wMTsKKwl9CisKKwkvKiA4LiBGaW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gViBzeW5jICsgYmFjayBwb3JjaCAqLworCS8qIFtWIFNZTkMrQlBdID0gUklOVCgoW01JTiBWU1lOQytCUF0gKiBoZnJlcV9lc3QgLyAxMDAwMDAwKSkgKi8KKwl2c3luY19wbHVzX2JwID0gTUlOX1ZTWU5DX1BMVVNfQlAgKiBoZnJlcV9lc3QgLyAxMDAwOworCXZzeW5jX3BsdXNfYnAgPSAodnN5bmNfcGx1c19icCArIDUwMCkgLyAxMDAwOworCS8qICA5LiBGaW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gViBiYWNrIHBvcmNoIGFsb25lOiAqLworCXZiYWNrX3BvcmNoID0gdnN5bmNfcGx1c19icCAtIFZfU1lOQ19SUUQ7CisJLyogIDEwLiBGaW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgbGluZXMgaW4gVmVydGljYWwgZmllbGQgcGVyaW9kOiAqLworCXZ0b3RhbF9saW5lcyA9IHZkaXNwbGF5X3JuZCArIHRvcF9tYXJnaW4gKyBib3R0b21fbWFyZ2luICsKKwkJCXZzeW5jX3BsdXNfYnAgKyBHVEZfTUlOX1ZfUE9SQ0g7CisJLyogIDExLiBFc3RpbWF0ZSB0aGUgVmVydGljYWwgZmllbGQgZnJlcXVlbmN5OiAqLworCXZmaWVsZHJhdGVfZXN0ID0gaGZyZXFfZXN0IC8gdnRvdGFsX2xpbmVzOworCS8qICAxMi4gRmluZCB0aGUgYWN0dWFsIGhvcml6b250YWwgcGVyaW9kOiAqLworCWhwZXJpb2QgPSAxMDAwMDAwIC8gKHZmaWVsZHJhdGVfcnFkICogdnRvdGFsX2xpbmVzKTsKKworCS8qICAxMy4gRmluZCB0aGUgYWN0dWFsIFZlcnRpY2FsIGZpZWxkIGZyZXF1ZW5jeTogKi8KKwl2ZmllbGRfcmF0ZSA9IGhmcmVxX2VzdCAvIHZ0b3RhbF9saW5lczsKKwkvKiAgMTQuIEZpbmQgdGhlIFZlcnRpY2FsIGZyYW1lIGZyZXF1ZW5jeTogKi8KKwlpZiAoaW50ZXJsYWNlZCkKKwkJdmZyYW1lX3JhdGUgPSB2ZmllbGRfcmF0ZSAvIDI7CisJZWxzZQorCQl2ZnJhbWVfcmF0ZSA9IHZmaWVsZF9yYXRlOworCS8qICAxNS4gRmluZCBudW1iZXIgb2YgcGl4ZWxzIGluIGxlZnQgbWFyZ2luOiAqLworCWlmIChtYXJnaW5zKQorCQlsZWZ0X21hcmdpbiA9IChoZGlzcGxheV9ybmQgKiBHVEZfTUFSR0lOX1BFUkNFTlRBR0UgKyA1MDApIC8KKwkJCQkxMDAwOworCWVsc2UKKwkJbGVmdF9tYXJnaW4gPSAwOworCisJLyogMTYuRmluZCBudW1iZXIgb2YgcGl4ZWxzIGluIHJpZ2h0IG1hcmdpbjogKi8KKwlyaWdodF9tYXJnaW4gPSBsZWZ0X21hcmdpbjsKKwkvKiAxNy5GaW5kIHRvdGFsIG51bWJlciBvZiBhY3RpdmUgcGl4ZWxzIGluIGltYWdlIGFuZCBsZWZ0IGFuZCByaWdodCAqLworCXRvdGFsX2FjdGl2ZV9waXhlbHMgPSBoZGlzcGxheV9ybmQgKyBsZWZ0X21hcmdpbiArIHJpZ2h0X21hcmdpbjsKKwkvKiAxOC5GaW5kIHRoZSBpZGVhbCBibGFua2luZyBkdXR5IGN5Y2xlIGZyb20gYmxhbmtpbmcgZHV0eSBjeWNsZSAqLworCWlkZWFsX2R1dHlfY3ljbGUgPSBHVEZfQ19QUklNRSAqIDEwMDAgLQorCQkJCShHVEZfTV9QUklNRSAqIDEwMDAwMDAgLyBoZnJlcV9lc3QpOworCS8qIDE5LkZpbmQgdGhlIG51bWJlciBvZiBwaXhlbHMgaW4gdGhlIGJsYW5raW5nIHRpbWUgdG8gdGhlIG5lYXJlc3QKKwkgKiBkb3VibGUgY2hhcmFjdGVyIGNlbGw6ICovCisJaGJsYW5rID0gdG90YWxfYWN0aXZlX3BpeGVscyAqIGlkZWFsX2R1dHlfY3ljbGUgLworCQkJKDEwMDAwMCAtIGlkZWFsX2R1dHlfY3ljbGUpOworCWhibGFuayA9IChoYmxhbmsgKyBHVEZfQ0VMTF9HUkFOKSAvICgyICogR1RGX0NFTExfR1JBTik7CisJaGJsYW5rID0gaGJsYW5rICogMiAqIEdURl9DRUxMX0dSQU47CisJLyogMjAuRmluZCB0b3RhbCBudW1iZXIgb2YgcGl4ZWxzOiAqLworCXRvdGFsX3BpeGVscyA9IHRvdGFsX2FjdGl2ZV9waXhlbHMgKyBoYmxhbms7CisJLyogMjEuRmluZCBwaXhlbCBjbG9jayBmcmVxdWVuY3k6ICovCisJcGl4ZWxfZnJlcSA9IHRvdGFsX3BpeGVscyAqIGhmcmVxX2VzdCAvIDEwMDA7CisJLyogU3RhZ2UgMSBjb21wdXRhdGlvbnMgYXJlIG5vdyBjb21wbGV0ZTsgSSBzaG91bGQgcmVhbGx5IHBhc3MKKwkgKiB0aGUgcmVzdWx0cyB0byBhbm90aGVyIGZ1bmN0aW9uIGFuZCBkbyB0aGUgU3RhZ2UgMiBjb21wdXRhdGlvbnMsCisJICogYnV0IEkgb25seSBuZWVkIGEgZmV3IG1vcmUgdmFsdWVzIHNvIEknbGwganVzdCBhcHBlbmQgdGhlCisJICogY29tcHV0YXRpb25zIGhlcmUgZm9yIG5vdyAqLworCS8qIDE3LiBGaW5kIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGluIHRoZSBob3Jpem9udGFsIHN5bmMgcGVyaW9kOiAqLworCWhzeW5jID0gSF9TWU5DX1BFUkNFTlQgKiB0b3RhbF9waXhlbHMgLyAxMDA7CisJaHN5bmMgPSAoaHN5bmMgKyBHVEZfQ0VMTF9HUkFOIC8gMikgLyBHVEZfQ0VMTF9HUkFOOworCWhzeW5jID0gaHN5bmMgKiBHVEZfQ0VMTF9HUkFOOworCS8qIDE4LiBGaW5kIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGluIGhvcml6b250YWwgZnJvbnQgcG9yY2ggcGVyaW9kICovCisJaGZyb250X3BvcmNoID0gaGJsYW5rIC8gMiAtIGhzeW5jOworCS8qICAzNi4gRmluZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBvZGQgZnJvbnQgcG9yY2ggcGVyaW9kOiAqLworCXZvZGRfZnJvbnRfcG9yY2hfbGluZXMgPSBHVEZfTUlOX1ZfUE9SQ0ggOworCisJLyogZmluYWxseSwgcGFjayB0aGUgcmVzdWx0cyBpbiB0aGUgbW9kZSBzdHJ1Y3QgKi8KKwlkcm1fbW9kZS0+aGRpc3BsYXkgPSBoZGlzcGxheV9ybmQ7CisJZHJtX21vZGUtPmhzeW5jX3N0YXJ0ID0gaGRpc3BsYXlfcm5kICsgaGZyb250X3BvcmNoOworCWRybV9tb2RlLT5oc3luY19lbmQgPSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQgKyBoc3luYzsKKwlkcm1fbW9kZS0+aHRvdGFsID0gdG90YWxfcGl4ZWxzOworCWRybV9tb2RlLT52ZGlzcGxheSA9IHZkaXNwbGF5X3JuZDsKKwlkcm1fbW9kZS0+dnN5bmNfc3RhcnQgPSB2ZGlzcGxheV9ybmQgKyB2b2RkX2Zyb250X3BvcmNoX2xpbmVzOworCWRybV9tb2RlLT52c3luY19lbmQgPSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQgKyBWX1NZTkNfUlFEOworCWRybV9tb2RlLT52dG90YWwgPSB2dG90YWxfbGluZXM7CisKKwlkcm1fbW9kZS0+Y2xvY2sgPSBwaXhlbF9mcmVxOworCisJZHJtX21vZGVfc2V0X25hbWUoZHJtX21vZGUpOworCWRybV9tb2RlLT5mbGFncyA9IERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkM7CisKKwlpZiAoaW50ZXJsYWNlZCkgeworCQlkcm1fbW9kZS0+dnRvdGFsICo9IDI7CisJCWRybV9tb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKKwl9CisKKwlyZXR1cm4gZHJtX21vZGU7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9ndGZfbW9kZSk7CisvKioKICAqIGRybV9tb2RlX3NldF9uYW1lIC0gc2V0IHRoZSBuYW1lIG9uIGEgbW9kZQogICogQG1vZGU6IG5hbWUgd2lsbCBiZSBzZXQgaW4gdGhpcyBtb2RlCiAgKgpAQCAtMTUxLDcgKzU2Niw5IEBACiAgKiBGSVhNRTogd2h5IGlzIHRoaXMgbmVlZGVkPyAgc2hvdWxkbid0IHZyZWZyZXNoIGJlIHNldCBhbHJlYWR5PwogICoKICAqIFJFVFVSTlM6Ci0gKiBWZXJ0aWNhbCByZWZyZXNoIHJhdGUgb2YgQG1vZGUgeCAxMDAwLiBGb3IgcHJlY2lzaW9uIHJlYXNvbnMuCisgKiBWZXJ0aWNhbCByZWZyZXNoIHJhdGUuIEl0IHdpbGwgYmUgdGhlIHJlc3VsdCBvZiBhY3R1YWwgdmFsdWUgcGx1cyAwLjUuCisgKiBJZiBpdCBpcyA3MC4yODgsIGl0IHdpbGwgcmV0dXJuIDcwSHouCisgKiBJZiBpdCBpcyA1OS42LCBpdCB3aWxsIHJldHVybiA2MEh6LgogICovCiBpbnQgZHJtX21vZGVfdnJlZnJlc2goc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CkBAIC0xNjEsMTQgKzU3OCwxMyBAQAogCWlmIChtb2RlLT52cmVmcmVzaCA+IDApCiAJCXJlZnJlc2ggPSBtb2RlLT52cmVmcmVzaDsKIAllbHNlIGlmIChtb2RlLT5odG90YWwgPiAwICYmIG1vZGUtPnZ0b3RhbCA+IDApIHsKKwkJaW50IHZ0b3RhbDsKKwkJdnRvdGFsID0gbW9kZS0+dnRvdGFsOwogCQkvKiB3b3JrIG91dCB2cmVmcmVzaCB0aGUgdmFsdWUgd2lsbCBiZSB4MTAwMCAqLwogCQljYWxjX3ZhbCA9IChtb2RlLT5jbG9jayAqIDEwMDApOwotCiAJCWNhbGNfdmFsIC89IG1vZGUtPmh0b3RhbDsKLQkJY2FsY192YWwgKj0gMTAwMDsKLQkJY2FsY192YWwgLz0gbW9kZS0+dnRvdGFsOworCQlyZWZyZXNoID0gKGNhbGNfdmFsICsgdnRvdGFsIC8gMikgLyB2dG90YWw7CiAKLQkJcmVmcmVzaCA9IGNhbGNfdmFsOwogCQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKIAkJCXJlZnJlc2ggKj0gMjsKIAkJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQpAQCAtNDAzLDggKzgxOSw3IEBACiAJCQlsaXN0X2RlbCgmbW9kZS0+aGVhZCk7CiAJCQlpZiAodmVyYm9zZSkgewogCQkJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUobW9kZSk7Ci0JCQkJRFJNX0RFQlVHX01PREUoRFJNX01PREVTRVRfREVCVUcsCi0JCQkJCSJOb3QgdXNpbmcgJXMgbW9kZSAlZFxuIiwKKwkJCQlEUk1fREVCVUdfS01TKCJOb3QgdXNpbmcgJXMgbW9kZSAlZFxuIiwKIAkJCQkJbW9kZS0+bmFtZSwgbW9kZS0+c3RhdHVzKTsKIAkJCX0KIAkJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKaW5kZXggYmJkNGIzZC4uZDM3OWM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKQEAgLTEwNiwyMCArMTA2LDI1IEBACiAJCQljb250aW51ZTsKIAogCQl0bXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksIEdGUF9LRVJORUwpOwotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShmaWxlc1tpXS5uYW1lLCBTX0lGUkVHIHwgU19JUlVHTywgcm9vdCk7CisJCWlmICh0bXAgPT0gTlVMTCkgeworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJdG1wLT5taW5vciA9IG1pbm9yOworCQl0bXAtPmluZm9fZW50ID0gJmZpbGVzW2ldOworCQlsaXN0X2FkZCgmdG1wLT5saXN0LCAmbWlub3ItPnByb2Nfbm9kZXMubGlzdCk7CisKKwkJZW50ID0gcHJvY19jcmVhdGVfZGF0YShmaWxlc1tpXS5uYW1lLCBTX0lSVUdPLCByb290LAorCQkJCSAgICAgICAmZHJtX3Byb2NfZm9wcywgdG1wKTsKIAkJaWYgKCFlbnQpIHsKIAkJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvJXMvJXNcbiIsCiAJCQkJICBuYW1lLCBmaWxlc1tpXS5uYW1lKTsKKwkJCWxpc3RfZGVsKCZ0bXAtPmxpc3QpOwogCQkJa2ZyZWUodG1wKTsKIAkJCXJldCA9IC0xOwogCQkJZ290byBmYWlsOwogCQl9CiAKLQkJZW50LT5wcm9jX2ZvcHMgPSAmZHJtX3Byb2NfZm9wczsKLQkJZW50LT5kYXRhID0gdG1wOwotCQl0bXAtPm1pbm9yID0gbWlub3I7Ci0JCXRtcC0+aW5mb19lbnQgPSAmZmlsZXNbaV07Ci0JCWxpc3RfYWRkKCYodG1wLT5saXN0KSwgJihtaW5vci0+cHJvY19ub2Rlcy5saXN0KSk7CiAJfQogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggZjdhNjE1Yi4uN2U0MmI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCisjaW5jbHVkZSAiZHJtX3N5c2ZzLmgiCiAjaW5jbHVkZSAiZHJtX2NvcmUuaCIKICNpbmNsdWRlICJkcm1QLmgiCiAKQEAgLTc2LDcgKzc3LDcgQEAKIAkJICAgICAgIENPUkVfTUlOT1IsIENPUkVfUEFUQ0hMRVZFTCwgQ09SRV9EQVRFKTsKIH0KIAotc3RhdGljIGNoYXIgKmRybV9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqZHJtX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiZHJpLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CkBAIC0xMTIsNyArMTEzLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfY2xhc3M7CiAKLQljbGFzcy0+bm9kZW5hbWUgPSBkcm1fbm9kZW5hbWU7CisJY2xhc3MtPmRldm5vZGUgPSBkcm1fZGV2bm9kZTsKIAogCXJldHVybiBjbGFzczsKIApAQCAtMjUzLDYgKzI1NCw3IEBACiAJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZToKIAkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPOgogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb25lbnQ6CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1RWOgogCQkJcHJvcCA9IGRldi0+bW9kZV9jb25maWcudHZfc3ViY29ubmVjdG9yX3Byb3BlcnR5OwogCQkJaXNfdHYgPSAxOwogCQkJYnJlYWs7CkBAIC0yOTMsNiArMjk1LDcgQEAKIAkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlOgogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU86CiAJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudDoKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVFY6CiAJCQlwcm9wID0gZGV2LT5tb2RlX2NvbmZpZy50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5OwogCQkJaXNfdHYgPSAxOwogCQkJYnJlYWs7CkBAIC0zOTEsNiArMzk0LDcgQEAKIAkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlOgogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU86CiAJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudDoKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVFY6CiAJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb25uZWN0b3JfYXR0cnNfb3B0MSk7IGkrKykgewogCQkJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmY29ubmVjdG9yLT5rZGV2LCAmY29ubmVjdG9yX2F0dHJzX29wdDFbaV0pOwogCQkJCWlmIChyZXQpCkBAIC01MTksMyArNTIzLDI3IEBACiB7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1pbm9yLT5rZGV2KTsKIH0KKworCisvKioKKyAqIGRybV9jbGFzc19kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciBhIHN0cnVjdCBkZXZpY2UgaW4gdGhlIGRybSBjbGFzcy4KKyAqCisgKiBAZGV2OiBwb2ludGVyIHRvIHN0cnVjdCBkZXZpY2UgdG8gcmVnaXN0ZXIuCisgKgorICogQGRldiBzaG91bGQgaGF2ZSBhbGwgcmVsZXZhbnQgbWVtYmVycyBwcmUtZmlsbGVkIHdpdGggdGhlIGV4Y2VwdGlvbgorICogb2YgdGhlIGNsYXNzIG1lbWJlci4gSW4gcGFydGljdWxhciwgdGhlIGRldmljZV90eXBlIG1lbWJlciBtdXN0CisgKiBiZSBzZXQuCisgKi8KKworaW50IGRybV9jbGFzc19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldi0+Y2xhc3MgPSBkcm1fY2xhc3M7CisJcmV0dXJuIGRldmljZV9yZWdpc3RlcihkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2NsYXNzX2RldmljZV9yZWdpc3Rlcik7CisKK3ZvaWQgZHJtX2NsYXNzX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9jbGFzc19kZXZpY2VfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDMwZDZiOTkuLjUyNjlkZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC00LDEwICs0LDEwIEBACiAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiBpOTE1LXkgOj0gaTkxNV9kcnYubyBpOTE1X2RtYS5vIGk5MTVfaXJxLm8gaTkxNV9tZW0ubyBcCisJICBpOTE1X2RlYnVnZnMubyBcCiAgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAogCSAgaTkxNV9nZW0ubyBcCiAJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKLQkgIGk5MTVfZ2VtX2RlYnVnZnMubyBcCiAJICBpOTE1X2dlbV90aWxpbmcubyBcCiAJICBpbnRlbF9kaXNwbGF5Lm8gXAogCSAgaW50ZWxfY3J0Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTNiZGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCisjZGVmaW5lIERSTV9JOTE1X1JJTkdfREVCVUcgMQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKworI2RlZmluZSBBQ1RJVkVfTElTVAkxCisjZGVmaW5lIEZMVVNISU5HX0xJU1QJMgorI2RlZmluZSBJTkFDVElWRV9MSVNUCTMKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9waW5fZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYpCit7CisJaWYgKG9ial9wcml2LT51c2VyX3Bpbl9jb3VudCA+IDApCisJCXJldHVybiAiUCI7CisJZWxzZSBpZiAob2JqX3ByaXYtPnBpbl9jb3VudCA+IDApCisJCXJldHVybiAicCI7CisJZWxzZQorCQlyZXR1cm4gIiAiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RpbGluZ19mbGFnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdikKK3sKKyAgICBzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBJOTE1X1RJTElOR19OT05FOiByZXR1cm4gIiAiOworICAgIGNhc2UgSTkxNV9USUxJTkdfWDogcmV0dXJuICJYIjsKKyAgICBjYXNlIEk5MTVfVElMSU5HX1k6IHJldHVybiAiWSI7CisgICAgfQorfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJdWludHB0cl90IGxpc3QgPSAodWludHB0cl90KSBub2RlLT5pbmZvX2VudC0+ZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzcGlubG9ja190ICpsb2NrID0gTlVMTDsKKworCXN3aXRjaCAobGlzdCkgeworCWNhc2UgQUNUSVZFX0xJU1Q6CisJCXNlcV9wcmludGYobSwgIkFjdGl2ZTpcbiIpOworCQlsb2NrID0gJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrOworCQloZWFkID0gJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdDsKKwkJYnJlYWs7CisJY2FzZSBJTkFDVElWRV9MSVNUOgorCQlzZXFfcHJpbnRmKG0sICJJbmFjdGl2ZTpcbiIpOworCQloZWFkID0gJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0OworCQlicmVhazsKKwljYXNlIEZMVVNISU5HX0xJU1Q6CisJCXNlcV9wcmludGYobSwgIkZsdXNoaW5nOlxuIik7CisJCWhlYWQgPSAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9JTkZPKCJPb29wcywgdW5leHBlY3RlZCBsaXN0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxvY2spCisJCXNwaW5fbG9jayhsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCBoZWFkLCBsaXN0KQorCXsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCXNlcV9wcmludGYobSwgIiAgICAlcDogJXMgJTA4eCAlMDh4ICVkIiwKKwkJCSAgIG9iaiwKKwkJCSAgIGdldF9waW5fZmxhZyhvYmpfcHJpdiksCisJCQkgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCisJCWlmIChvYmotPm5hbWUpCisJCQlzZXFfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIG9iai0+bmFtZSk7CisJCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCisJCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZCkiLCBvYmpfcHJpdi0+ZmVuY2VfcmVnKTsKKwkJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgIT0gTlVMTCkKKwkJCXNlcV9wcmludGYobSwgIiAoZ3R0X29mZnNldDogJTA4eCkiLCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwl9CisKKwlpZiAobG9jaykKKwkgICAgc3Bpbl91bmxvY2sobG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7CisKKwlzZXFfcHJpbnRmKG0sICJSZXF1ZXN0OlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShnZW1fcmVxdWVzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsIGxpc3QpIHsKKwkJc2VxX3ByaW50ZihtLCAiICAgICVkIEAgJWRcbiIsCisJCQkgICBnZW1fcmVxdWVzdC0+c2Vxbm8sCisJCQkgICAoaW50KSAoamlmZmllcyAtIGdlbV9yZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgeworCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiAlZFxuIiwKKwkJCSAgIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKwl9IGVsc2UgeworCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiBod3MgdW5pbml0aWFsaXplZFxuIik7CisJfQorCXNlcV9wcmludGYobSwgIldhaXRlciBzZXF1ZW5jZTogICVkXG4iLAorCQkJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlzZXFfcHJpbnRmKG0sICJJUlEgc2VxdWVuY2U6ICAgICAlZFxuIiwgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaTkxNV9pbnRlcnJ1cHRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICghSVNfSUdETkcoZGV2KSkgeworCQlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgZW5hYmxlOiAgICAlMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKElFUikpOworCQlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgaWRlbnRpdHk6ICAlMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKElJUikpOworCQlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgbWFzazogICAgICAlMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKElNUikpOworCQlzZXFfcHJpbnRmKG0sICJQaXBlIEEgc3RhdDogICAgICAgICAlMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKFBJUEVBU1RBVCkpOworCQlzZXFfcHJpbnRmKG0sICJQaXBlIEIgc3RhdDogICAgICAgICAlMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKFBJUEVCU1RBVCkpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYobSwgIk5vcnRoIERpc3BsYXkgSW50ZXJydXB0IGVuYWJsZToJCSUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoREVJRVIpKTsKKwkJc2VxX3ByaW50ZihtLCAiTm9ydGggRGlzcGxheSBJbnRlcnJ1cHQgaWRlbnRpdHk6CSUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoREVJSVIpKTsKKwkJc2VxX3ByaW50ZihtLCAiTm9ydGggRGlzcGxheSBJbnRlcnJ1cHQgbWFzazoJCSUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoREVJTVIpKTsKKwkJc2VxX3ByaW50ZihtLCAiU291dGggRGlzcGxheSBJbnRlcnJ1cHQgZW5hYmxlOgkJJTA4eFxuIiwKKwkJCSAgIEk5MTVfUkVBRChTREVJRVIpKTsKKwkJc2VxX3ByaW50ZihtLCAiU291dGggRGlzcGxheSBJbnRlcnJ1cHQgaWRlbnRpdHk6CSUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoU0RFSUlSKSk7CisJCXNlcV9wcmludGYobSwgIlNvdXRoIERpc3BsYXkgSW50ZXJydXB0IG1hc2s6CQklMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKFNERUlNUikpOworCQlzZXFfcHJpbnRmKG0sICJHcmFwaGljcyBJbnRlcnJ1cHQgZW5hYmxlOgkJJTA4eFxuIiwKKwkJCSAgIEk5MTVfUkVBRChHVElFUikpOworCQlzZXFfcHJpbnRmKG0sICJHcmFwaGljcyBJbnRlcnJ1cHQgaWRlbnRpdHk6CQklMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKEdUSUlSKSk7CisJCXNlcV9wcmludGYobSwgIkdyYXBoaWNzIEludGVycnVwdCBtYXNrOgkJJTA4eFxuIiwKKwkJCSAgIEk5MTVfUkVBRChHVElNUikpOworCX0KKwlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHRzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKKwlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlICE9IE5VTEwpIHsKKwkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCisJCQkgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJfSBlbHNlIHsKKwkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZTogICAgaHdzIHVuaW5pdGlhbGl6ZWRcbiIpOworCX0KKwlzZXFfcHJpbnRmKG0sICJXYWl0ZXIgc2VxdWVuY2U6ICAgICAlZFxuIiwKKwkJICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlzZXFfcHJpbnRmKG0sICJJUlEgc2VxdWVuY2U6ICAgICAgICAlZFxuIiwKKwkJICAgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCXNlcV9wcmludGYobSwgIlJlc2VydmVkIGZlbmNlcyA9ICVkXG4iLCBkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0KTsKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBmZW5jZXMgPSAlZFxuIiwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXS5vYmo7CisKKwkJaWYgKG9iaiA9PSBOVUxMKSB7CisJCQlzZXFfcHJpbnRmKG0sICJGZW5jZWQgb2JqZWN0WyUyZF0gPSB1bnVzZWRcbiIsIGkpOworCQl9IGVsc2UgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJCQlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJCQlzZXFfcHJpbnRmKG0sICJGZW5jZWQgb2JqZWN0WyUyZF0gPSAlcDogJXMgIgorCQkJCSAgICIlMDh4ICUwOHp4ICUwOHggJXMgJTA4eCAlMDh4ICVkIiwKKwkJCQkgICBpLCBvYmosIGdldF9waW5fZmxhZyhvYmpfcHJpdiksCisJCQkJICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkJICAgb2JqLT5zaXplLCBvYmpfcHJpdi0+c3RyaWRlLAorCQkJCSAgIGdldF90aWxpbmdfZmxhZyhvYmpfcHJpdiksCisJCQkJICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCQlpZiAob2JqLT5uYW1lKQorCQkJCXNlcV9wcmludGYobSwgIiAobmFtZTogJWQpIiwgb2JqLT5uYW1lKTsKKwkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2h3c19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXZvbGF0aWxlIHUzMiAqaHdzOworCisJaHdzID0gKHZvbGF0aWxlIHUzMiAqKWRldl9wcml2LT5od19zdGF0dXNfcGFnZTsKKwlpZiAoaHdzID09IE5VTEwpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IDQwOTYgLyBzaXplb2YodTMyKSAvIDQ7IGkgKz0gNCkgeworCQlzZXFfcHJpbnRmKG0sICIweCUwOHg6IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCSAgIGkgKiA0LAorCQkJICAgaHdzW2ldLCBod3NbaSArIDFdLCBod3NbaSArIDJdLCBod3NbaSArIDNdKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfZHVtcF9wYWdlcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBwYWdlX2NvdW50KQoreworCWludCBwYWdlLCBpOworCXVpbnQzMl90ICptZW07CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgcGFnZV9jb3VudDsgcGFnZSsrKSB7CisJCW1lbSA9IGttYXAocGFnZXNbcGFnZV0pOworCQlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFOyBpICs9IDQpCisJCQlzZXFfcHJpbnRmKG0sICIlMDh4IDogICUwOHhcbiIsIGksIG1lbVtpIC8gNF0pOworCQlrdW5tYXAocGFnZXNbcGFnZV0pOworCX0KK30KKworc3RhdGljIGludCBpOTE1X2JhdGNoYnVmZmVyX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCByZXQ7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQpIHsKKwkJICAgIHJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwkJICAgIGlmIChyZXQpIHsKKwkJCSAgICBEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgcGFnZXM6ICVkXG4iLCByZXQpOworCQkJICAgIHNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisJCQkgICAgcmV0dXJuIHJldDsKKwkJICAgIH0KKworCQkgICAgc2VxX3ByaW50ZihtLCAiLS0tIGd0dF9vZmZzZXQgPSAweCUwOHhcbiIsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKwkJICAgIGk5MTVfZHVtcF9wYWdlcyhtLCBvYmpfcHJpdi0+cGFnZXMsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CisKKwkJICAgIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3JpbmdidWZmZXJfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1OCAqdmlydDsKKwl1aW50MzJfdCAqcHRyLCBvZmY7CisKKwlpZiAoIWRldl9wcml2LT5yaW5nLnJpbmdfb2JqKSB7CisJCXNlcV9wcmludGYobSwgIk5vIHJpbmdidWZmZXIgc2V0dXBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl2aXJ0ID0gZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydDsKKworCWZvciAob2ZmID0gMDsgb2ZmIDwgZGV2X3ByaXYtPnJpbmcuU2l6ZTsgb2ZmICs9IDQpIHsKKwkJcHRyID0gKHVpbnQzMl90ICopKHZpcnQgKyBvZmYpOworCQlzZXFfcHJpbnRmKG0sICIlMDh4IDogICUwOHhcbiIsIG9mZiwgKnB0cik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9yaW5nYnVmZmVyX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgaW50IGhlYWQsIHRhaWw7CisKKwloZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CisJdGFpbCA9IEk5MTVfUkVBRChQUkIwX1RBSUwpICYgVEFJTF9BRERSOworCisJc2VxX3ByaW50ZihtLCAiUmluZ0hlYWQgOiAgJTA4eFxuIiwgaGVhZCk7CisJc2VxX3ByaW50ZihtLCAiUmluZ1RhaWwgOiAgJTA4eFxuIiwgdGFpbCk7CisJc2VxX3ByaW50ZihtLCAiUmluZ1NpemUgOiAgJTA4bHhcbiIsIGRldl9wcml2LT5yaW5nLlNpemUpOworCXNlcV9wcmludGYobSwgIkFjdGhkIDogICAgICUwOHhcbiIsIEk5MTVfUkVBRChJU19JOTY1RyhkZXYpID8gQUNUSERfSTk2NSA6IEFDVEhEKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2Vycm9yX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7CisJaWYgKCFkZXZfcHJpdi0+Zmlyc3RfZXJyb3IpIHsKKwkJc2VxX3ByaW50ZihtLCAibm8gZXJyb3Igc3RhdGUgY29sbGVjdGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyb3IgPSBkZXZfcHJpdi0+Zmlyc3RfZXJyb3I7CisKKwlzZXFfcHJpbnRmKG0sICJUaW1lOiAlbGQgcyAlbGQgdXNcbiIsIGVycm9yLT50aW1lLnR2X3NlYywKKwkJICAgZXJyb3ItPnRpbWUudHZfdXNlYyk7CisJc2VxX3ByaW50ZihtLCAiRUlSOiAweCUwOHhcbiIsIGVycm9yLT5laXIpOworCXNlcV9wcmludGYobSwgIiAgUEdUQkxfRVI6IDB4JTA4eFxuIiwgZXJyb3ItPnBndGJsX2VyKTsKKwlzZXFfcHJpbnRmKG0sICIgIElOU1RQTTogMHglMDh4XG4iLCBlcnJvci0+aW5zdHBtKTsKKwlzZXFfcHJpbnRmKG0sICIgIElQRUlSOiAweCUwOHhcbiIsIGVycm9yLT5pcGVpcik7CisJc2VxX3ByaW50ZihtLCAiICBJUEVIUjogMHglMDh4XG4iLCBlcnJvci0+aXBlaHIpOworCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkU6IDB4JTA4eFxuIiwgZXJyb3ItPmluc3Rkb25lKTsKKwlzZXFfcHJpbnRmKG0sICIgIEFDVEhEOiAweCUwOHhcbiIsIGVycm9yLT5hY3RoZCk7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJc2VxX3ByaW50ZihtLCAiICBJTlNUUFM6IDB4JTA4eFxuIiwgZXJyb3ItPmluc3Rwcyk7CisJCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkUxOiAweCUwOHhcbiIsIGVycm9yLT5pbnN0ZG9uZTEpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3JlZ2lzdGVyc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkgeworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgcmVnOworCisjZGVmaW5lIERVTVBfUkFOR0Uoc3RhcnQsIGVuZCkgXAorCWZvciAocmVnPXN0YXJ0OyByZWcgPCBlbmQ7IHJlZyArPSA0KSBcCisJc2VxX3ByaW50ZihtLCAiJTA4eFx0JTA4eFxuIiwgcmVnLCBJOTE1X1JFQUQocmVnKSk7CisKKwlEVU1QX1JBTkdFKDB4MDAwMDAsIDB4MDBmZmYpOyAgIC8qIFZHQSByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MDIwMDAsIDB4MDJmZmYpOyAgIC8qIGluc3RydWN0aW9uLCBtZW1vcnksIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycyAqLworCURVTVBfUkFOR0UoMHgwMzAwMCwgMHgwMzFmZik7ICAgLyogRkVOQ0UgYW5kIFBQR1RUIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDAzMjAwLCAweDAzZmZmKTsgICAvKiBmcmFtZSBidWZmZXIgY29tcHJlc3Npb24gcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDA1MDAwLCAweDA1ZmZmKTsgICAvKiBJL08gY29udHJvbCByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MDYwMDAsIDB4MDZmZmYpOyAgIC8qIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDA3MDAwLCAweDA3ZmZmKTsgICAvKiAzRCBpbnRlcm5hbCBkZWJ1ZyByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MDc0MDAsIDB4MDg4ZmYpOyAgIC8qIEdQRSBkZWJ1ZyByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MGEwMDAsIDB4MGFmZmYpOyAgIC8qIGRpc3BsYXkgcGFsZXR0ZSByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MTAwMDAsIDB4MTNmZmYpOyAgIC8qIE1NSU8gTUNIQkFSICovCisJRFVNUF9SQU5HRSgweDMwMDAwLCAweDNmZmZmKTsgICAvKiBvdmVybGF5IHJlZ2lzdGVycyAqLworCURVTVBfUkFOR0UoMHg2MDAwMCwgMHg2ZmZmZik7ICAgLyogZGlzcGxheSBlbmdpbmUgcGlwZWxpbmUgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDcwMDAwLCAweDcyZmZmKTsgICAvKiBkaXNwbGF5IGFuZCBjdXJzb3IgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDczMDAwLCAweDczZmZmKTsgICAvKiBwZXJmb3JtYW5jZSBjb3VudGVycyAqLworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGk5MTVfZGVidWdmc19saXN0W10gPSB7CisJeyJpOTE1X3JlZ3MiLCBpOTE1X3JlZ2lzdGVyc19pbmZvLCAwfSwKKwl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEFDVElWRV9MSVNUfSwKKwl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgRkxVU0hJTkdfTElTVH0sCisJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIElOQUNUSVZFX0xJU1R9LAorCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mbywgMH0sCisJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm8sIDB9LAorCXsiaTkxNV9nZW1fZmVuY2VfcmVncyIsIGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbywgMH0sCisJeyJpOTE1X2dlbV9pbnRlcnJ1cHQiLCBpOTE1X2ludGVycnVwdF9pbmZvLCAwfSwKKwl7Imk5MTVfZ2VtX2h3cyIsIGk5MTVfaHdzX2luZm8sIDB9LAorCXsiaTkxNV9yaW5nYnVmZmVyX2RhdGEiLCBpOTE1X3JpbmdidWZmZXJfZGF0YSwgMH0sCisJeyJpOTE1X3JpbmdidWZmZXJfaW5mbyIsIGk5MTVfcmluZ2J1ZmZlcl9pbmZvLCAwfSwKKwl7Imk5MTVfYmF0Y2hidWZmZXJzIiwgaTkxNV9iYXRjaGJ1ZmZlcl9pbmZvLCAwfSwKKwl7Imk5MTVfZXJyb3Jfc3RhdGUiLCBpOTE1X2Vycm9yX3N0YXRlLCAwfSwKK307CisjZGVmaW5lIEk5MTVfREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9kZWJ1Z2ZzX2xpc3QpCisKK2ludCBpOTE1X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKGk5MTVfZGVidWdmc19saXN0LAorCQkJCQlJOTE1X0RFQlVHRlNfRU5UUklFUywKKwkJCQkJbWlub3ItPmRlYnVnZnNfcm9vdCwgbWlub3IpOworfQorCit2b2lkIGk5MTVfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhpOTE1X2RlYnVnZnNfbGlzdCwKKwkJCQkgSTkxNV9ERUJVR0ZTX0VOVFJJRVMsIG1pbm9yKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA1MGQxZjc4Li41YTQ5YTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTI5LDExICsyOSwxMSBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgotCi0jZGVmaW5lIEk5MTVfRFJWCSJpOTE1X2RydiIKKyNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KIAogLyogUmVhbGx5IHdhbnQgYW4gT1MtaW5kZXBlbmRlbnQgcmVzZXR0YWJsZSB0aW1lci4gIFdvdWxkIGxpa2UgdG8gaGF2ZQogICogdGhpcyBsb29wIHJ1biBmb3IgKGVnKSAzIHNlYywgYnV0IGhhdmUgdGhlIHRpbWVyIHJlc2V0IGV2ZXJ5IHRpbWUKQEAgLTgwLDYgKzgwLDM0IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAorLyogQXMgYSByaW5nYnVmZmVyIGlzIG9ubHkgYWxsb3dlZCB0byB3cmFwIGJldHdlZW4gaW5zdHJ1Y3Rpb25zLCBmaWxsCisgKiB0aGUgdGFpbCB3aXRoIE5PT1BzLgorICovCitpbnQgaTkxNV93cmFwX3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnZpcnQ7CisJaW50IHJlbTsKKworCXJlbSA9IGRldl9wcml2LT5yaW5nLlNpemUgLSBkZXZfcHJpdi0+cmluZy50YWlsOworCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8IHJlbSkgeworCQlpbnQgcmV0ID0gaTkxNV93YWl0X3JpbmcoZGV2LCByZW0sIF9fZnVuY19fKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCWRldl9wcml2LT5yaW5nLnNwYWNlIC09IHJlbTsKKworCXZpcnQgPSAodW5zaWduZWQgaW50ICopCisJCShkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ICsgZGV2X3ByaXYtPnJpbmcudGFpbCk7CisJcmVtIC89IDQ7CisJd2hpbGUgKHJlbS0tKQorCQkqdmlydCsrID0gTUlfTk9PUDsKKworCWRldl9wcml2LT5yaW5nLnRhaWwgPSAwOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogU2V0cyB1cCB0aGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2UgZm9yIGRldmljZXMgdGhhdCBuZWVkIGEgcGh5c2ljYWwgYWRkcmVzcwogICogaW4gdGhlIHJlZ2lzdGVyLgpAQCAtMTAxLDcgKzEyOSw3IEBACiAJbWVtc2V0KGRldl9wcml2LT5od19zdGF0dXNfcGFnZSwgMCwgUEFHRV9TSVpFKTsKIAogCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7Ci0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwgIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOworCURSTV9ERUJVR19EUklWRVIoIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xODcsOCArMjE1LDcgQEAKIAkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYgPSAoZHJtX2k5MTVfc2FyZWFfdCAqKQogCQkJKCh1OCAqKW1hc3Rlcl9wcml2LT5zYXJlYS0+aGFuZGxlICsgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOwogCX0gZWxzZSB7Ci0JCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsCi0JCQkJInNhcmVhIG5vdCBmb3VuZCBhc3N1bWluZyBEUkkyIHVzZXJzcGFjZVxuIik7CisJCURSTV9ERUJVR19EUklWRVIoInNhcmVhIG5vdCBmb3VuZCBhc3N1bWluZyBEUkkyIHVzZXJzcGFjZVxuIik7CiAJfQogCiAJaWYgKGluaXQtPnJpbmdfc2l6ZSAhPSAwKSB7CkBAIC0yMDAsNyArMjI3LDYgQEAKIAkJfQogCiAJCWRldl9wcml2LT5yaW5nLlNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0JCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IGRldl9wcml2LT5yaW5nLlNpemUgLSAxOwogCiAJCWRldl9wcml2LT5yaW5nLm1hcC5vZmZzZXQgPSBpbml0LT5yaW5nX3N0YXJ0OwogCQlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKQEAgLTIzOCw3ICsyNjQsNyBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAiJXNcbiIsIF9fZnVuY19fKTsKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgpAQCAtMjUxLDE0ICsyNzcsMTQgQEAKIAkJRFJNX0VSUk9SKCJDYW4gbm90IGZpbmQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwgImh3IHN0YXR1cyBwYWdlIEAgJXBcbiIsCisJRFJNX0RFQlVHX0RSSVZFUigiaHcgc3RhdHVzIHBhZ2UgQCAlcFxuIiwKIAkJCQlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOwogCiAJaWYgKGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgIT0gMCkKIAkJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKIAllbHNlCiAJCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7Ci0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwgIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOworCURSTV9ERUJVR19EUklWRVIoIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NTIsNyArNTc4LDcgQEAKIAlpZiAoIW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsICIlczogcGFnZT0lZCBwZkN1cnJlbnRQYWdlPSVkXG4iLAorCURSTV9ERUJVR19EUklWRVIoIiVzOiBwYWdlPSVkIHBmQ3VycmVudFBhZ2U9JWRcbiIsCiAJCQkgIF9fZnVuY19fLAogCQkJIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsCiAJCQkgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CkBAIC02MzMsOCArNjU5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwKLQkJCSJpOTE1IGJhdGNoYnVmZmVyLCBzdGFydCAleCB1c2VkICVkIGNsaXByZWN0cyAlZFxuIiwKKwlEUk1fREVCVUdfRFJJVkVSKCJpOTE1IGJhdGNoYnVmZmVyLCBzdGFydCAleCB1c2VkICVkIGNsaXByZWN0cyAlZFxuIiwKIAkJCWJhdGNoLT5zdGFydCwgYmF0Y2gtPnVzZWQsIGJhdGNoLT5udW1fY2xpcHJlY3RzKTsKIAogCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKQEAgLTY4MSw4ICs3MDYsNyBAQAogCXZvaWQgKmJhdGNoX2RhdGE7CiAJaW50IHJldDsKIAotCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsCi0JCQkiaTkxNSBjbWRidWZmZXIsIGJ1ZiAlcCBzeiAlZCBjbGlwcmVjdHMgJWRcbiIsCisJRFJNX0RFQlVHX0RSSVZFUigiaTkxNSBjbWRidWZmZXIsIGJ1ZiAlcCBzeiAlZCBjbGlwcmVjdHMgJWRcbiIsCiAJCQljbWRidWYtPmJ1ZiwgY21kYnVmLT5zeiwgY21kYnVmLT5udW1fY2xpcHJlY3RzKTsKIAogCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKQEAgLTczNSw3ICs3NTksNyBAQAogewogCWludCByZXQ7CiAKLQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAiJXNcbiIsIF9fZnVuY19fKTsKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOwogCiAJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCkBAIC03NzgsNyArODAyLDcgQEAKIAkJdmFsdWUgPSBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3MgLSBkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAiVW5rbm93biBwYXJhbWV0ZXIgJWRcbiIsCisJCURSTV9ERUJVR19EUklWRVIoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLAogCQkJCQlwYXJhbS0+cGFyYW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04MTksNyArODQzLDcgQEAKIAkJZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydCA9IHBhcmFtLT52YWx1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwgInVua25vd24gcGFyYW1ldGVyICVkXG4iLAorCQlEUk1fREVCVUdfRFJJVkVSKCJ1bmtub3duIHBhcmFtZXRlciAlZFxuIiwKIAkJCQkJcGFyYW0tPnBhcmFtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODQ2LDcgKzg3MCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCURSTV9ERUJVRygic2V0IHN0YXR1cyBwYWdlIGFkZHIgMHglMDh4XG4iLCAodTMyKWh3cy0+YWRkcik7CisJRFJNX0RFQlVHX0RSSVZFUigic2V0IHN0YXR1cyBwYWdlIGFkZHIgMHglMDh4XG4iLCAodTMyKWh3cy0+YWRkcik7CiAKIAlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gaHdzLT5hZGRyICYgKDB4MWZmZmY8PDEyKTsKIApAQCAtODY4LDEzICs4OTIsMjUgQEAKIAogCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CiAJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKLQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAibG9hZCBod3MgSFdTX1BHQSB3aXRoIGdmeCBtZW0gMHgleFxuIiwKKwlEUk1fREVCVUdfRFJJVkVSKCJsb2FkIGh3cyBIV1NfUEdBIHdpdGggZ2Z4IG1lbSAweCV4XG4iLAogCQkJCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwotCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsICJsb2FkIGh3cyBhdCAlcFxuIiwKKwlEUk1fREVCVUdfRFJJVkVSKCJsb2FkIGh3cyBhdCAlcFxuIiwKIAkJCQlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGk5MTVfZ2V0X2JyaWRnZV9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJZGV2X3ByaXYtPmJyaWRnZV9kZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwwKSk7CisJaWYgKCFkZXZfcHJpdi0+YnJpZGdlX2RldikgeworCQlEUk1fRVJST1IoImJyaWRnZSBkZXZpY2Ugbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBpOTE1X3Byb2JlX2FncCAtIGdldCBBR1AgYm9vdHVwIGNvbmZpZ3VyYXRpb24KICAqIEBwZGV2OiBQQ0kgZGV2aWNlCkBAIC04ODgsMjAgKzkyNCwxMyBAQAogc3RhdGljIGludCBpOTE1X3Byb2JlX2FncChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCAqYXBlcnR1cmVfc2l6ZSwKIAkJCSAgdWludDMyX3QgKnByZWFsbG9jYXRlZF9zaXplKQogewotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2VfZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTE2IHRtcCA9IDA7CiAJdW5zaWduZWQgbG9uZyBvdmVyaGVhZDsKIAl1bnNpZ25lZCBsb25nIHN0b2xlbjsKIAotCWJyaWRnZV9kZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwwKSk7Ci0JaWYgKCFicmlkZ2VfZGV2KSB7Ci0JCURSTV9FUlJPUigiYnJpZGdlIGRldmljZSBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCiAJLyogR2V0IHRoZSBmYiBhcGVydHVyZSBzaXplIGFuZCAic3RvbGVuIiBtZW1vcnkgYW1vdW50LiAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZV9kZXYsIElOVEVMX0dNQ0hfQ1RSTCwgJnRtcCk7Ci0JcGNpX2Rldl9wdXQoYnJpZGdlX2Rldik7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIElOVEVMX0dNQ0hfQ1RSTCwgJnRtcCk7CiAKIAkqYXBlcnR1cmVfc2l6ZSA9IDEwMjQgKiAxMDI0OwogCSpwcmVhbGxvY2F0ZWRfc2l6ZSA9IDEwMjQgKiAxMDI0OwpAQCAtOTg0LDYgKzEwMTMsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogdHJ1ZSA9IGVuYWJsZSBkZWNvZGUsIGZhbHNlID0gZGlzYWJsZSBkZWNvZGVyICovCitzdGF0aWMgdW5zaWduZWQgaW50IGk5MTVfdmdhX3NldF9kZWNvZGUodm9pZCAqY29va2llLCBib29sIHN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb29raWU7CisKKwlpbnRlbF9tb2Rlc2V0X3ZnYV9zZXRfc3RhdGUoZGV2LCBzdGF0ZSk7CisJaWYgKHN0YXRlKQorCQlyZXR1cm4gVkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JTUkNfTEVHQUNZX01FTSB8CisJCSAgICAgICBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOworCWVsc2UKKwkJcmV0dXJuIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07Cit9CisKIHN0YXRpYyBpbnQgaTkxNV9sb2FkX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgdW5zaWduZWQgbG9uZyBwcmVhbGxvY19zaXplLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhZ3Bfc2l6ZSkKQEAgLTEwMjksNiArMTA3MSwxMSBAQAogCWlmIChyZXQpCiAJCURSTV9JTkZPKCJmYWlsZWQgdG8gZmluZCBWQklPUyB0YWJsZXNcbiIpOwogCisJLyogaWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIGRpc2FibGUgdGhlIHJhZGVvbiBWR0EgcmVzb3VyY2VzICovCisJcmV0ID0gdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIGRldiwgTlVMTCwgaTkxNV92Z2Ffc2V0X2RlY29kZSk7CisJaWYgKHJldCkKKwkJZ290byBkZXN0cm95X3JpbmdidWZmZXI7CisKIAlyZXQgPSBkcm1faXJxX2luc3RhbGwoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKQEAgLTExNTMsMTEgKzEyMDAsMTYgQEAKIAliYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIG1taW9fYmFyKTsKIAlzaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCBtbWlvX2Jhcik7CiAKKwlpZiAoaTkxNV9nZXRfYnJpZGdlX2RldihkZXYpKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZnJlZV9wcml2OworCX0KKwogCWRldl9wcml2LT5yZWdzID0gaW9yZW1hcChiYXNlLCBzaXplKTsKIAlpZiAoIWRldl9wcml2LT5yZWdzKSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnNcbiIpOwogCQlyZXQgPSAtRUlPOwotCQlnb3RvIGZyZWVfcHJpdjsKKwkJZ290byBwdXRfYnJpZGdlOwogCX0KIAogICAgICAgICBkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcgPQpAQCAtMTI2OSw2ICsxMzIxLDggQEAKIAlpb19tYXBwaW5nX2ZyZWUoZGV2X3ByaXYtPm1tLmd0dF9tYXBwaW5nKTsKIG91dF9ybW1hcDoKIAlpb3VubWFwKGRldl9wcml2LT5yZWdzKTsKK3B1dF9icmlkZ2U6CisJcGNpX2Rldl9wdXQoZGV2X3ByaXYtPmJyaWRnZV9kZXYpOwogZnJlZV9wcml2OgogCWtmcmVlKGRldl9wcml2KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTI4OSw2ICsxMzQzLDcgQEAKIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CiAJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAl9CiAKIAlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKQEAgLTEzMTIsNiArMTM2Nyw3IEBACiAJCWk5MTVfZ2VtX2xhc3RjbG9zZShkZXYpOwogCX0KIAorCXBjaV9kZXZfcHV0KGRldl9wcml2LT5icmlkZ2VfZGV2KTsKIAlrZnJlZShkZXYtPmRldl9wcml2YXRlKTsKIAogCXJldHVybiAwOwpAQCAtMTMyMSw3ICsxMzc3LDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdjsKIAotCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsICJcbiIpOworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CiAJaTkxNV9maWxlX3ByaXYgPSAoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqKQogCSAgICBrbWFsbG9jKHNpemVvZigqaTkxNV9maWxlX3ByaXYpLCBHRlBfS0VSTkVMKTsKIApAQCAtMTM1Miw3ICsxNDA4LDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmICghZGV2X3ByaXYgfHwgZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlpbnRlbGZiX3Jlc3RvcmUoKTsKKwkJZHJtX2ZiX2hlbHBlcl9yZXN0b3JlKCk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGZjNGI2OGEuLmRiZTU2OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMzcsMTIgKzM3LDE1IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgogCi1zdGF0aWMgdW5zaWduZWQgaW50IGk5MTVfbW9kZXNldCA9IC0xOworc3RhdGljIGludCBpOTE1X21vZGVzZXQgPSAtMTsKIG1vZHVsZV9wYXJhbV9uYW1lZChtb2Rlc2V0LCBpOTE1X21vZGVzZXQsIGludCwgMDQwMCk7CiAKIHVuc2lnbmVkIGludCBpOTE1X2ZicGVyY3J0YyA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZmJwZXJjcnRjLCBpOTE1X2ZicGVyY3J0YywgaW50LCAwNDAwKTsKIAordW5zaWduZWQgaW50IGk5MTVfcG93ZXJzYXZlID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChwb3dlcnNhdmUsIGk5MTVfcG93ZXJzYXZlLCBpbnQsIDA0MDApOworCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CkBAIC0xODgsOCArMTkxLDggQEAKIAkubWFzdGVyX2NyZWF0ZSA9IGk5MTVfbWFzdGVyX2NyZWF0ZSwKIAkubWFzdGVyX2Rlc3Ryb3kgPSBpOTE1X21hc3Rlcl9kZXN0cm95LAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQotCS5kZWJ1Z2ZzX2luaXQgPSBpOTE1X2dlbV9kZWJ1Z2ZzX2luaXQsCi0JLmRlYnVnZnNfY2xlYW51cCA9IGk5MTVfZ2VtX2RlYnVnZnNfY2xlYW51cCwKKwkuZGVidWdmc19pbml0ID0gaTkxNV9kZWJ1Z2ZzX2luaXQsCisJLmRlYnVnZnNfY2xlYW51cCA9IGk5MTVfZGVidWdmc19jbGVhbnVwLAogI2VuZGlmCiAJLmdlbV9pbml0X29iamVjdCA9IGk5MTVfZ2VtX2luaXRfb2JqZWN0LAogCS5nZW1fZnJlZV9vYmplY3QgPSBpOTE1X2dlbV9mcmVlX29iamVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDViNGY4N2UuLmEwNjMyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtODUsNyArODUsNiBAQAogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3JpbmdfYnVmZmVyIHsKLQlpbnQgdGFpbF9tYXNrOwogCXVuc2lnbmVkIGxvbmcgU2l6ZTsKIAl1OCAqdmlydHVhbF9zdGFydDsKIAlpbnQgaGVhZDsKQEAgLTE1Niw2ICsxNTUsNyBAQAogCiAJdm9pZCBfX2lvbWVtICpyZWdzOwogCisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXY7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCByaW5nOwogCiAJZHJtX2RtYV9oYW5kbGVfdCAqc3RhdHVzX3BhZ2VfZG1haDsKQEAgLTMxMSw3ICszMTEsNyBAQAogCXUzMiBzYXZlSU1SOwogCXUzMiBzYXZlQ0FDSEVfTU9ERV8wOwogCXUzMiBzYXZlRF9TVEFURTsKLQl1MzIgc2F2ZUNHXzJEX0RJUzsKKwl1MzIgc2F2ZURTUENMS19HQVRFX0Q7CiAJdTMyIHNhdmVNSV9BUkJfU1RBVEU7CiAJdTMyIHNhdmVTV0YwWzE2XTsKIAl1MzIgc2F2ZVNXRjFbMTZdOwpAQCAtNDQzLDYgKzQ0MywxNCBAQAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BoeXNfb2JqZWN0ICpwaHlzX29ianNbSTkxNV9NQVhfUEhZU19PQkpFQ1RdOwogCX0gbW07CiAJc3RydWN0IHNkdm9fZGV2aWNlX21hcHBpbmcgc2R2b19tYXBwaW5nc1syXTsKKworCS8qIFJlY2xvY2tpbmcgc3VwcG9ydCAqLworCWJvb2wgcmVuZGVyX3JlY2xvY2tfYXZhaWw7CisJYm9vbCBsdmRzX2Rvd25jbG9ja19hdmFpbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaWRsZV93b3JrOworCXN0cnVjdCB0aW1lcl9saXN0IGlkbGVfdGltZXI7CisJYm9vbCBidXN5OworCXUxNiBvcmlnX2Nsb2NrOwogfSBkcm1faTkxNV9wcml2YXRlX3Q7CiAKIC8qKiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXR0YWNoZWQgdG8gZWFjaCBkcm1fZ2VtX29iamVjdCAqLwpAQCAtNTc1LDYgKzU4Myw3IEBACiBleHRlcm4gc3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVfaW9jdGxzW107CiBleHRlcm4gaW50IGk5MTVfbWF4X2lvY3RsOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X2ZicGVyY3J0YzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9wb3dlcnNhdmU7CiAKIGV4dGVybiBpbnQgaTkxNV9tYXN0ZXJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwogZXh0ZXJuIHZvaWQgaTkxNV9tYXN0ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKQEAgLTczMCw4ICs3MzksOCBAQAogdm9pZCBpOTE1X2R1bXBfbHJ1KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKndoZXJlKTsKIAogLyogaTkxNV9kZWJ1Z2ZzLmMgKi8KLWludCBpOTE1X2dlbV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwotdm9pZCBpOTE1X2dlbV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworaW50IGk5MTVfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKK3ZvaWQgaTkxNV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogCiAvKiBpOTE1X3N1c3BlbmQuYyAqLwogZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC03NTcsNiArNzY2LDcgQEAKIC8qIG1vZGVzZXR0aW5nICovCiBleHRlcm4gdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpbnRlbF9tb2Rlc2V0X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGludGVsX21vZGVzZXRfdmdhX3NldF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHN0YXRlKTsKIAogLyoqCiAgKiBMb2NrIHRlc3QgZm9yIHdoZW4gaXQncyBqdXN0IGZvciBzeW5jaHJvbml6YXRpb24gb2YgcmluZyBhY2Nlc3MuCkBAIC03ODEsMzMgKzc5MSwzMiBAQAogCiAjZGVmaW5lIEk5MTVfVkVSQk9TRSAwCiAKLSNkZWZpbmUgUklOR19MT0NBTFMJdW5zaWduZWQgaW50IG91dHJpbmcsIHJpbmdtYXNrLCBvdXRjb3VudDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgY2hhciAqdmlydDsKKyNkZWZpbmUgUklOR19MT0NBTFMJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpyaW5nX3ZpcnRfXzsKIAotI2RlZmluZSBCRUdJTl9MUF9SSU5HKG4pIGRvIHsJCQkJXAotCWlmIChJOTE1X1ZFUkJPU0UpCQkJCVwKLQkJRFJNX0RFQlVHKCJCRUdJTl9MUF9SSU5HKCVkKVxuIiwgKG4pKTsJXAotCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8IChuKSo0KQkJXAotCQlpOTE1X3dhaXRfcmluZyhkZXYsIChuKSo0LCBfX2Z1bmNfXyk7CQlcCi0Jb3V0Y291bnQgPSAwOwkJCQkJXAotCW91dHJpbmcgPSBkZXZfcHJpdi0+cmluZy50YWlsOwkJCVwKLQlyaW5nbWFzayA9IGRldl9wcml2LT5yaW5nLnRhaWxfbWFzazsJCVwKLQl2aXJ0ID0gZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydDsJCVwKKyNkZWZpbmUgQkVHSU5fTFBfUklORyhuKSBkbyB7CQkJCQkJXAorCWludCBieXRlc19fID0gNCoobik7CQkJCQkJXAorCWlmIChJOTE1X1ZFUkJPU0UpIERSTV9ERUJVRygiQkVHSU5fTFBfUklORyglZClcbiIsIChuKSk7CVwKKwkvKiBhIHdyYXAgbXVzdCBvY2N1ciBiZXR3ZWVuIGluc3RydWN0aW9ucyBzbyBwYWQgYmVmb3JlaGFuZCAqLwlcCisJaWYgKHVubGlrZWx5IChkZXZfcHJpdi0+cmluZy50YWlsICsgYnl0ZXNfXyA+IGRldl9wcml2LT5yaW5nLlNpemUpKSBcCisJCWk5MTVfd3JhcF9yaW5nKGRldik7CQkJCQlcCisJaWYgKHVubGlrZWx5IChkZXZfcHJpdi0+cmluZy5zcGFjZSA8IGJ5dGVzX18pKQkJCVwKKwkJaTkxNV93YWl0X3JpbmcoZGV2LCBieXRlc19fLCBfX2Z1bmNfXyk7CQkJXAorCXJpbmdfdmlydF9fID0gKHVuc2lnbmVkIGludCAqKQkJCQkJXAorCSAgICAgICAgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgKyBkZXZfcHJpdi0+cmluZy50YWlsKTsJXAorCWRldl9wcml2LT5yaW5nLnRhaWwgKz0gYnl0ZXNfXzsJCQkJCVwKKwlkZXZfcHJpdi0+cmluZy50YWlsICY9IGRldl9wcml2LT5yaW5nLlNpemUgLSAxOwkJCVwKKwlkZXZfcHJpdi0+cmluZy5zcGFjZSAtPSBieXRlc19fOwkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIE9VVF9SSU5HKG4pIGRvIHsJCQkJCVwKKyNkZWZpbmUgT1VUX1JJTkcobikgZG8gewkJCQkJCVwKIAlpZiAoSTkxNV9WRVJCT1NFKSBEUk1fREVCVUcoIiAgIE9VVF9SSU5HICV4XG4iLCAoaW50KShuKSk7CVwKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh2aXJ0ICsgb3V0cmluZykgPSAobik7CVwKLSAgICAgICAgb3V0Y291bnQrKzsJCQkJCQlcCi0Jb3V0cmluZyArPSA0OwkJCQkJCVwKLQlvdXRyaW5nICY9IHJpbmdtYXNrOwkJCQkJXAorCSpyaW5nX3ZpcnRfXysrID0gKG4pOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQURWQU5DRV9MUF9SSU5HKCkgZG8gewkJCQkJCVwKLQlpZiAoSTkxNV9WRVJCT1NFKSBEUk1fREVCVUcoIkFEVkFOQ0VfTFBfUklORyAleFxuIiwgb3V0cmluZyk7CVwKLQlkZXZfcHJpdi0+cmluZy50YWlsID0gb3V0cmluZzsJCQkJCVwKLQlkZXZfcHJpdi0+cmluZy5zcGFjZSAtPSBvdXRjb3VudCAqIDQ7CQkJCVwKLQlJOTE1X1dSSVRFKFBSQjBfVEFJTCwgb3V0cmluZyk7CQkJXAorCWlmIChJOTE1X1ZFUkJPU0UpCQkJCQkJXAorCQlEUk1fREVCVUcoIkFEVkFOQ0VfTFBfUklORyAleFxuIiwgZGV2X3ByaXYtPnJpbmcudGFpbCk7CVwKKwlJOTE1X1dSSVRFKFBSQjBfVEFJTCwgZGV2X3ByaXYtPnJpbmcudGFpbCk7CQkJXAogfSB3aGlsZSgwKQogCiAvKioKQEAgLTgzMCw2ICs4MzksNyBAQAogI2RlZmluZSBJOTE1X0dFTV9IV1NfSU5ERVgJCTB4MjAKICNkZWZpbmUgSTkxNV9CUkVBRENSVU1CX0lOREVYCQkweDIxCiAKK2V4dGVybiBpbnQgaTkxNV93cmFwX3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGludCBpOTE1X3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcik7CiAKICNkZWZpbmUgSVNfSTgzMChkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDM1NzcpCkBAIC05MDMsNiArOTEzLDkgQEAKIC8qIGRzcGFyYiBjb250cm9sbGVkIGJ5IGh3IG9ubHkgKi8KICNkZWZpbmUgRFNQQVJCX0hXQ09OVFJPTChkZXYpIChJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQogCisjZGVmaW5lIEhBU19GV19CTEMoZGV2KSAoSVNfSTlYWChkZXYpIHx8IElTX0c0WChkZXYpIHx8IElTX0lHRE5HKGRldikpCisjZGVmaW5lIEhBU19QSVBFX0NYU1IoZGV2KSAoSVNfRzRYKGRldikgfHwgSVNfSUdETkcoZGV2KSkKKwogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCA4MGU1YmE0Li5jNjczMTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCkBAIC0xMTEsNyArMTEyLDggQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0JaW50IGhhbmRsZSwgcmV0OworCWludCByZXQ7CisJdTMyIGhhbmRsZTsKIAogCWFyZ3MtPnNpemUgPSByb3VuZHVwKGFyZ3MtPnNpemUsIFBBR0VfU0laRSk7CiAKQEAgLTk4MSw2ICs5ODMsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CiAJdWludDMyX3QgcmVhZF9kb21haW5zID0gYXJncy0+cmVhZF9kb21haW5zOwogCXVpbnQzMl90IHdyaXRlX2RvbWFpbiA9IGFyZ3MtPndyaXRlX2RvbWFpbjsKIAlpbnQgcmV0OwpAQCAtMTAwNCwxNSArMTAwNywxNyBAQAogCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKIAlpZiAob2JqID09IE5VTEwpCiAJCXJldHVybiAtRUJBREY7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaW50ZWxfbWFya19idXN5KGRldiwgb2JqKTsKKwogI2lmIFdBVENIX0JVRgogCURSTV9JTkZPKCJzZXRfZG9tYWluX2lvY3RsICVwKCV6ZCksICUwOHggJTA4eFxuIiwKIAkJIG9iaiwgb2JqLT5zaXplLCByZWFkX2RvbWFpbnMsIHdyaXRlX2RvbWFpbik7CiAjZW5kaWYKIAlpZiAocmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0dUVCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwotCiAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIHdyaXRlX2RvbWFpbiAhPSAwKTsKIAogCQkvKiBVcGRhdGUgdGhlIExSVSBvbiB0aGUgZmVuY2UgZm9yIHRoZSBDUFUgYWNjZXNzIHRoYXQncwpAQCAtMjc3Niw2ICsyNzgxLDggQEAKIAlCVUdfT04ob2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpOwogCUJVR19PTihvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9DUFUpOwogCisJaW50ZWxfbWFya19idXN5KGRldiwgb2JqKTsKKwogI2lmIFdBVENIX0JVRgogCURSTV9JTkZPKCIlczogb2JqZWN0ICVwIHJlYWQgJTA4eCAtPiAlMDh4IHdyaXRlICUwOHggLT4gJTA4eFxuIiwKIAkJIF9fZnVuY19fLCBvYmosCkBAIC00MDkzLDcgKzQxMDAsNiBAQAogCiAJLyogU2V0IHVwIHRoZSBrZXJuZWwgbWFwcGluZyBmb3IgdGhlIHJpbmcuICovCiAJcmluZy0+U2l6ZSA9IG9iai0+c2l6ZTsKLQlyaW5nLT50YWlsX21hc2sgPSBvYmotPnNpemUgLSAxOwogCiAJcmluZy0+bWFwLm9mZnNldCA9IGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAJcmluZy0+bWFwLnNpemUgPSBvYmotPnNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiM2I5NzQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWdmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLSAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAiZHJtLmgiCi0jaW5jbHVkZSAiaTkxNV9kcm0uaCIKLSNpbmNsdWRlICJpOTE1X2Rydi5oIgotCi0jZGVmaW5lIERSTV9JOTE1X1JJTkdfREVCVUcgMQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKLQotI2RlZmluZSBBQ1RJVkVfTElTVAkxCi0jZGVmaW5lIEZMVVNISU5HX0xJU1QJMgotI2RlZmluZSBJTkFDVElWRV9MSVNUCTMKLQotc3RhdGljIGNvbnN0IGNoYXIgKmdldF9waW5fZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYpCi17Ci0JaWYgKG9ial9wcml2LT51c2VyX3Bpbl9jb3VudCA+IDApCi0JCXJldHVybiAiUCI7Ci0JZWxzZSBpZiAob2JqX3ByaXYtPnBpbl9jb3VudCA+IDApCi0JCXJldHVybiAicCI7Ci0JZWxzZQotCQlyZXR1cm4gIiAiOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RpbGluZ19mbGFnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdikKLXsKLSAgICBzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgewotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSBJOTE1X1RJTElOR19OT05FOiByZXR1cm4gIiAiOwotICAgIGNhc2UgSTkxNV9USUxJTkdfWDogcmV0dXJuICJYIjsKLSAgICBjYXNlIEk5MTVfVElMSU5HX1k6IHJldHVybiAiWSI7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7Ci0JdWludHB0cl90IGxpc3QgPSAodWludHB0cl90KSBub2RlLT5pbmZvX2VudC0+ZGF0YTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlzcGlubG9ja190ICpsb2NrID0gTlVMTDsKLQotCXN3aXRjaCAobGlzdCkgewotCWNhc2UgQUNUSVZFX0xJU1Q6Ci0JCXNlcV9wcmludGYobSwgIkFjdGl2ZTpcbiIpOwotCQlsb2NrID0gJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrOwotCQloZWFkID0gJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdDsKLQkJYnJlYWs7Ci0JY2FzZSBJTkFDVElWRV9MSVNUOgotCQlzZXFfcHJpbnRmKG0sICJJbmFjdGl2ZTpcbiIpOwotCQloZWFkID0gJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0OwotCQlicmVhazsKLQljYXNlIEZMVVNISU5HX0xJU1Q6Ci0JCXNlcV9wcmludGYobSwgIkZsdXNoaW5nOlxuIik7Ci0JCWhlYWQgPSAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9JTkZPKCJPb29wcywgdW5leHBlY3RlZCBsaXN0XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGxvY2spCi0JCXNwaW5fbG9jayhsb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCBoZWFkLCBsaXN0KQotCXsKLQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOwotCi0JCXNlcV9wcmludGYobSwgIiAgICAlcDogJXMgJTA4eCAlMDh4ICVkIiwKLQkJCSAgIG9iaiwKLQkJCSAgIGdldF9waW5fZmxhZyhvYmpfcHJpdiksCi0JCQkgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCi0JCQkgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCi0JCWlmIChvYmotPm5hbWUpCi0JCQlzZXFfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIG9iai0+bmFtZSk7Ci0JCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCi0JCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZCkiLCBvYmpfcHJpdi0+ZmVuY2VfcmVnKTsKLQkJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgIT0gTlVMTCkKLQkJCXNlcV9wcmludGYobSwgIiAoZ3R0X29mZnNldDogJTA4eCkiLCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiXG4iKTsKLQl9Ci0KLQlpZiAobG9jaykKLQkgICAgc3Bpbl91bmxvY2sobG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7Ci0KLQlzZXFfcHJpbnRmKG0sICJSZXF1ZXN0OlxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShnZW1fcmVxdWVzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsIGxpc3QpIHsKLQkJc2VxX3ByaW50ZihtLCAiICAgICVkIEAgJWRcbiIsCi0JCQkgICBnZW1fcmVxdWVzdC0+c2Vxbm8sCi0JCQkgICAoaW50KSAoamlmZmllcyAtIGdlbV9yZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMpKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgewotCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiAlZFxuIiwKLQkJCSAgIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKLQl9IGVsc2UgewotCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiBod3MgdW5pbml0aWFsaXplZFxuIik7Ci0JfQotCXNlcV9wcmludGYobSwgIldhaXRlciBzZXF1ZW5jZTogICVkXG4iLAotCQkJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKLQlzZXFfcHJpbnRmKG0sICJJUlEgc2VxdWVuY2U6ICAgICAlZFxuIiwgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaTkxNV9pbnRlcnJ1cHRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCXNlcV9wcmludGYobSwgIkludGVycnVwdCBlbmFibGU6ICAgICUwOHhcbiIsCi0JCSAgIEk5MTVfUkVBRChJRVIpKTsKLQlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgaWRlbnRpdHk6ICAlMDh4XG4iLAotCQkgICBJOTE1X1JFQUQoSUlSKSk7Ci0Jc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0IG1hc2s6ICAgICAgJTA4eFxuIiwKLQkJICAgSTkxNV9SRUFEKElNUikpOwotCXNlcV9wcmludGYobSwgIlBpcGUgQSBzdGF0OiAgICAgICAgICUwOHhcbiIsCi0JCSAgIEk5MTVfUkVBRChQSVBFQVNUQVQpKTsKLQlzZXFfcHJpbnRmKG0sICJQaXBlIEIgc3RhdDogICAgICAgICAlMDh4XG4iLAotCQkgICBJOTE1X1JFQUQoUElQRUJTVEFUKSk7Ci0Jc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0cyByZWNlaXZlZDogJWRcbiIsCi0JCSAgIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkKSk7Ci0JaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSAhPSBOVUxMKSB7Ci0JCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6ICAgICVkXG4iLAotCQkJICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6ICAgIGh3cyB1bmluaXRpYWxpemVkXG4iKTsKLQl9Ci0Jc2VxX3ByaW50ZihtLCAiV2FpdGVyIHNlcXVlbmNlOiAgICAgJWRcbiIsCi0JCSAgIGRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7Ci0Jc2VxX3ByaW50ZihtLCAiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCi0JCSAgIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpOTE1X2dlbV9mZW5jZV9yZWdzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGk7Ci0KLQlzZXFfcHJpbnRmKG0sICJSZXNlcnZlZCBmZW5jZXMgPSAlZFxuIiwgZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydCk7Ci0Jc2VxX3ByaW50ZihtLCAiVG90YWwgZmVuY2VzID0gJWRcbiIsIGRldl9wcml2LT5udW1fZmVuY2VfcmVncyk7Ci0JZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV0ub2JqOwotCi0JCWlmIChvYmogPT0gTlVMTCkgewotCQkJc2VxX3ByaW50ZihtLCAiRmVuY2VkIG9iamVjdFslMmRdID0gdW51c2VkXG4iLCBpKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQotCQkJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwotCQkJc2VxX3ByaW50ZihtLCAiRmVuY2VkIG9iamVjdFslMmRdID0gJXA6ICVzICIKLQkJCQkgICAiJTA4eCAlMDh6eCAlMDh4ICVzICUwOHggJTA4eCAlZCIsCi0JCQkJICAgaSwgb2JqLCBnZXRfcGluX2ZsYWcob2JqX3ByaXYpLAotCQkJCSAgIG9ial9wcml2LT5ndHRfb2Zmc2V0LAotCQkJCSAgIG9iai0+c2l6ZSwgb2JqX3ByaXYtPnN0cmlkZSwKLQkJCQkgICBnZXRfdGlsaW5nX2ZsYWcob2JqX3ByaXYpLAotCQkJCSAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKLQkJCQkgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQkJaWYgKG9iai0+bmFtZSkKLQkJCQlzZXFfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIG9iai0+bmFtZSk7Ci0JCQlzZXFfcHJpbnRmKG0sICJcbiIpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9od3NfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgaTsKLQl2b2xhdGlsZSB1MzIgKmh3czsKLQotCWh3cyA9ICh2b2xhdGlsZSB1MzIgKilkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7Ci0JaWYgKGh3cyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWZvciAoaSA9IDA7IGkgPCA0MDk2IC8gc2l6ZW9mKHUzMikgLyA0OyBpICs9IDQpIHsKLQkJc2VxX3ByaW50ZihtLCAiMHglMDh4OiAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCi0JCQkgICBpICogNCwKLQkJCSAgIGh3c1tpXSwgaHdzW2kgKyAxXSwgaHdzW2kgKyAyXSwgaHdzW2kgKyAzXSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X2R1bXBfcGFnZXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgcGFnZV9jb3VudCkKLXsKLQlpbnQgcGFnZSwgaTsKLQl1aW50MzJfdCAqbWVtOwotCi0JZm9yIChwYWdlID0gMDsgcGFnZSA8IHBhZ2VfY291bnQ7IHBhZ2UrKykgewotCQltZW0gPSBrbWFwKHBhZ2VzW3BhZ2VdKTsKLQkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRTsgaSArPSA0KQotCQkJc2VxX3ByaW50ZihtLCAiJTA4eCA6ICAlMDh4XG4iLCBpLCBtZW1baSAvIDRdKTsKLQkJa3VubWFwKHBhZ2VzW3BhZ2VdKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9iYXRjaGJ1ZmZlcl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBsaXN0KSB7Ci0JCW9iaiA9IG9ial9wcml2LT5vYmo7Ci0JCWlmIChvYmotPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EKSB7Ci0JCSAgICByZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7Ci0JCSAgICBpZiAocmV0KSB7Ci0JCQkgICAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IHBhZ2VzOiAlZFxuIiwgcmV0KTsKLQkJCSAgICBzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwotCQkJICAgIHJldHVybiByZXQ7Ci0JCSAgICB9Ci0KLQkJICAgIHNlcV9wcmludGYobSwgIi0tLSBndHRfb2Zmc2V0ID0gMHglMDh4XG4iLCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7Ci0JCSAgICBpOTE1X2R1bXBfcGFnZXMobSwgb2JqX3ByaXYtPnBhZ2VzLCBvYmotPnNpemUgLyBQQUdFX1NJWkUpOwotCi0JCSAgICBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9yaW5nYnVmZmVyX2RhdGEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTggKnZpcnQ7Ci0JdWludDMyX3QgKnB0ciwgb2ZmOwotCi0JaWYgKCFkZXZfcHJpdi0+cmluZy5yaW5nX29iaikgewotCQlzZXFfcHJpbnRmKG0sICJObyByaW5nYnVmZmVyIHNldHVwXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JdmlydCA9IGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQ7Ci0KLQlmb3IgKG9mZiA9IDA7IG9mZiA8IGRldl9wcml2LT5yaW5nLlNpemU7IG9mZiArPSA0KSB7Ci0JCXB0ciA9ICh1aW50MzJfdCAqKSh2aXJ0ICsgb2ZmKTsKLQkJc2VxX3ByaW50ZihtLCAiJTA4eCA6ICAlMDh4XG4iLCBvZmYsICpwdHIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGk5MTVfcmluZ2J1ZmZlcl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsLCBtYXNrOwotCi0JaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOwotCXRhaWwgPSBJOTE1X1JFQUQoUFJCMF9UQUlMKSAmIFRBSUxfQUREUjsKLQltYXNrID0gZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrOwotCi0Jc2VxX3ByaW50ZihtLCAiUmluZ0hlYWQgOiAgJTA4eFxuIiwgaGVhZCk7Ci0Jc2VxX3ByaW50ZihtLCAiUmluZ1RhaWwgOiAgJTA4eFxuIiwgdGFpbCk7Ci0Jc2VxX3ByaW50ZihtLCAiUmluZ01hc2sgOiAgJTA4eFxuIiwgbWFzayk7Ci0Jc2VxX3ByaW50ZihtLCAiUmluZ1NpemUgOiAgJTA4bHhcbiIsIGRldl9wcml2LT5yaW5nLlNpemUpOwotCXNlcV9wcmludGYobSwgIkFjdGhkIDogICAgICUwOHhcbiIsIEk5MTVfUkVBRChJU19JOTY1RyhkZXYpID8gQUNUSERfSTk2NSA6IEFDVEhEKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpOTE1X2Vycm9yX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQotewotCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7Ci0JaWYgKCFkZXZfcHJpdi0+Zmlyc3RfZXJyb3IpIHsKLQkJc2VxX3ByaW50ZihtLCAibm8gZXJyb3Igc3RhdGUgY29sbGVjdGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyb3IgPSBkZXZfcHJpdi0+Zmlyc3RfZXJyb3I7Ci0KLQlzZXFfcHJpbnRmKG0sICJUaW1lOiAlbGQgcyAlbGQgdXNcbiIsIGVycm9yLT50aW1lLnR2X3NlYywKLQkJICAgZXJyb3ItPnRpbWUudHZfdXNlYyk7Ci0Jc2VxX3ByaW50ZihtLCAiRUlSOiAweCUwOHhcbiIsIGVycm9yLT5laXIpOwotCXNlcV9wcmludGYobSwgIiAgUEdUQkxfRVI6IDB4JTA4eFxuIiwgZXJyb3ItPnBndGJsX2VyKTsKLQlzZXFfcHJpbnRmKG0sICIgIElOU1RQTTogMHglMDh4XG4iLCBlcnJvci0+aW5zdHBtKTsKLQlzZXFfcHJpbnRmKG0sICIgIElQRUlSOiAweCUwOHhcbiIsIGVycm9yLT5pcGVpcik7Ci0Jc2VxX3ByaW50ZihtLCAiICBJUEVIUjogMHglMDh4XG4iLCBlcnJvci0+aXBlaHIpOwotCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkU6IDB4JTA4eFxuIiwgZXJyb3ItPmluc3Rkb25lKTsKLQlzZXFfcHJpbnRmKG0sICIgIEFDVEhEOiAweCUwOHhcbiIsIGVycm9yLT5hY3RoZCk7Ci0JaWYgKElTX0k5NjVHKGRldikpIHsKLQkJc2VxX3ByaW50ZihtLCAiICBJTlNUUFM6IDB4JTA4eFxuIiwgZXJyb3ItPmluc3Rwcyk7Ci0JCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkUxOiAweCUwOHhcbiIsIGVycm9yLT5pbnN0ZG9uZTEpOwotCX0KLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGk5MTVfZ2VtX2RlYnVnZnNfbGlzdFtdID0gewotCXsiaTkxNV9nZW1fYWN0aXZlIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgQUNUSVZFX0xJU1R9LAotCXsiaTkxNV9nZW1fZmx1c2hpbmciLCBpOTE1X2dlbV9vYmplY3RfbGlzdF9pbmZvLCAwLCAodm9pZCAqKSBGTFVTSElOR19MSVNUfSwKLQl7Imk5MTVfZ2VtX2luYWN0aXZlIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgSU5BQ1RJVkVfTElTVH0sCi0JeyJpOTE1X2dlbV9yZXF1ZXN0IiwgaTkxNV9nZW1fcmVxdWVzdF9pbmZvLCAwfSwKLQl7Imk5MTVfZ2VtX3NlcW5vIiwgaTkxNV9nZW1fc2Vxbm9faW5mbywgMH0sCi0JeyJpOTE1X2dlbV9mZW5jZV9yZWdzIiwgaTkxNV9nZW1fZmVuY2VfcmVnc19pbmZvLCAwfSwKLQl7Imk5MTVfZ2VtX2ludGVycnVwdCIsIGk5MTVfaW50ZXJydXB0X2luZm8sIDB9LAotCXsiaTkxNV9nZW1faHdzIiwgaTkxNV9od3NfaW5mbywgMH0sCi0JeyJpOTE1X3JpbmdidWZmZXJfZGF0YSIsIGk5MTVfcmluZ2J1ZmZlcl9kYXRhLCAwfSwKLQl7Imk5MTVfcmluZ2J1ZmZlcl9pbmZvIiwgaTkxNV9yaW5nYnVmZmVyX2luZm8sIDB9LAotCXsiaTkxNV9iYXRjaGJ1ZmZlcnMiLCBpOTE1X2JhdGNoYnVmZmVyX2luZm8sIDB9LAotCXsiaTkxNV9lcnJvcl9zdGF0ZSIsIGk5MTVfZXJyb3Jfc3RhdGUsIDB9LAotfTsKLSNkZWZpbmUgSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9nZW1fZGVidWdmc19saXN0KQotCi1pbnQgaTkxNV9nZW1fZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQotewotCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoaTkxNV9nZW1fZGVidWdmc19saXN0LAotCQkJCQlJOTE1X0dFTV9ERUJVR0ZTX0VOVFJJRVMsCi0JCQkJCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKLX0KLQotdm9pZCBpOTE1X2dlbV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpCi17Ci0JZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKGk5MTVfZ2VtX2RlYnVnZnNfbGlzdCwKLQkJCQkgSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTLCBtaW5vcik7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCBhMmQ1MjdiLi4yMDBlMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtOTQsMjMgKzk0LDE1IEBACiBzdGF0aWMgaW50CiBpbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7CiAJdTMyIHRlbXBfbG8sIHRlbXBfaGkgPSAwOwogCXU2NCBtY2hiYXJfYWRkcjsKIAlpbnQgcmV0ID0gMDsKIAotCWJyaWRnZV9kZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwwKSk7Ci0JaWYgKCFicmlkZ2VfZGV2KSB7Ci0JCURSTV9ERUJVRygibm8gYnJpZGdlIGRldj8hXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKElTX0k5NjVHKGRldikpCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCByZWcgKyA0LCAmdGVtcF9oaSk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIHJlZywgJnRlbXBfbG8pOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsICZ0ZW1wX2hpKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywgJnRlbXBfbG8pOwogCW1jaGJhcl9hZGRyID0gKCh1NjQpdGVtcF9oaSA8PCAzMikgfCB0ZW1wX2xvOwogCiAJLyogSWYgQUNQSSBkb2Vzbid0IGhhdmUgaXQsIGFzc3VtZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGl0IG91cnNlbHZlcyAqLwpAQCAtMTE4LDMwICsxMTAsMjggQEAKIAlpZiAobWNoYmFyX2FkZHIgJiYKIAkgICAgcG5wX3JhbmdlX3Jlc2VydmVkKG1jaGJhcl9hZGRyLCBtY2hiYXJfYWRkciArIE1DSEJBUl9TSVpFKSkgewogCQlyZXQgPSAwOwotCQlnb3RvIG91dF9wdXQ7CisJCWdvdG8gb3V0OwogCX0KICNlbmRpZgogCiAJLyogR2V0IHNvbWUgc3BhY2UgZm9yIGl0ICovCi0JcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShicmlkZ2VfZGV2LT5idXMsICZkZXZfcHJpdi0+bWNoX3JlcywKKwlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKGRldl9wcml2LT5icmlkZ2VfZGV2LT5idXMsICZkZXZfcHJpdi0+bWNoX3JlcywKIAkJCQkgICAgIE1DSEJBUl9TSVpFLCBNQ0hCQVJfU0laRSwKIAkJCQkgICAgIFBDSUJJT1NfTUlOX01FTSwKIAkJCQkgICAgIDAsICAgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSwKLQkJCQkgICAgIGJyaWRnZV9kZXYpOworCQkJCSAgICAgZGV2X3ByaXYtPmJyaWRnZV9kZXYpOwogCWlmIChyZXQpIHsKIAkJRFJNX0RFQlVHKCJmYWlsZWQgYnVzIGFsbG9jOiAlZFxuIiwgcmV0KTsKIAkJZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQgPSAwOwotCQlnb3RvIG91dF9wdXQ7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChJU19JOTY1RyhkZXYpKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIHJlZyArIDQsCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsCiAJCQkJICAgICAgIHVwcGVyXzMyX2JpdHMoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpKTsKIAotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgcmVnLAorCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywKIAkJCSAgICAgICBsb3dlcl8zMl9iaXRzKGRldl9wcml2LT5tY2hfcmVzLnN0YXJ0KSk7Ci1vdXRfcHV0OgotCXBjaV9kZXZfcHV0KGJyaWRnZV9kZXYpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xNTAsNDQgKzE0MCwzNiBAQAogc3RhdGljIGJvb2wKIGludGVsX3NldHVwX21jaGJhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2VfZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBtY2hiYXJfcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7CiAJdTMyIHRlbXA7CiAJYm9vbCBuZWVkX2Rpc2FibGUgPSBmYWxzZSwgZW5hYmxlZDsKIAotCWJyaWRnZV9kZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwwKSk7Ci0JaWYgKCFicmlkZ2VfZGV2KSB7Ci0JCURSTV9ERUJVRygibm8gYnJpZGdlIGRldj8hXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIERFVkVOX1JFRywgJnRlbXApOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOX1JFRywgJnRlbXApOwogCQllbmFibGVkID0gISEodGVtcCAmIERFVkVOX01DSEJBUl9FTik7CiAJfSBlbHNlIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7CiAJCWVuYWJsZWQgPSB0ZW1wICYgMTsKIAl9CiAKIAkvKiBJZiBpdCdzIGFscmVhZHkgZW5hYmxlZCwgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyAqLwogCWlmIChlbmFibGVkKQotCQlnb3RvIG91dF9wdXQ7CisJCWdvdG8gb3V0OwogCiAJaWYgKGludGVsX2FsbG9jX21jaGJhcl9yZXNvdXJjZShkZXYpKQotCQlnb3RvIG91dF9wdXQ7CisJCWdvdG8gb3V0OwogCiAJbmVlZF9kaXNhYmxlID0gdHJ1ZTsKIAogCS8qIFNwYWNlIGlzIGFsbG9jYXRlZCBvciByZXNlcnZlZCwgc28gZW5hYmxlIGl0LiAqLwogCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgREVWRU5fUkVHLAorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsCiAJCQkJICAgICAgIHRlbXAgfCBERVZFTl9NQ0hCQVJfRU4pOwogCX0gZWxzZSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgbWNoYmFyX3JlZywgdGVtcCB8IDEpOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgdGVtcCB8IDEpOwogCX0KLW91dF9wdXQ6Ci0JcGNpX2Rldl9wdXQoYnJpZGdlX2Rldik7CiBvdXQ6CiAJcmV0dXJuIG5lZWRfZGlzYWJsZTsKIH0KQEAgLTE5NiwyNSArMTc4LDE4IEBACiBpbnRlbF90ZWFyZG93bl9tY2hiYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBkaXNhYmxlKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2VfZGV2OwogCWludCBtY2hiYXJfcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7CiAJdTMyIHRlbXA7CiAKLQlicmlkZ2VfZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsMCkpOwotCWlmICghYnJpZGdlX2RldikgewotCQlEUk1fREVCVUcoIm5vIGJyaWRnZSBkZXY/IVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAoZGlzYWJsZSkgewogCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgewotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIERFVkVOX1JFRywgJnRlbXApOworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKIAkJCXRlbXAgJj0gfkRFVkVOX01DSEJBUl9FTjsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgREVWRU5fUkVHLCB0ZW1wKTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOX1JFRywgdGVtcCk7CiAJCX0gZWxzZSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7CiAJCQl0ZW1wICY9IH4xOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCB0ZW1wKTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsIHRlbXApOwogCQl9CiAJfQogCkBAIC0yMzQsNyArMjA5LDEzIEBACiAJdWludDMyX3Qgc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJYm9vbCBuZWVkX2Rpc2FibGU7CiAKLQlpZiAoIUlTX0k5WFgoZGV2KSkgeworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCS8qIE9uIElHRE5HIHdoYXRldmVyIERSQU0gY29uZmlnLCBHUFUgYWx3YXlzIGRvCisJCSAqIHNhbWUgc3dpenpsaW5nIHNldHVwLgorCQkgKi8KKwkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA7CisJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85OworCX0gZWxzZSBpZiAoIUlTX0k5WFgoZGV2KSkgewogCQkvKiBBcyBmYXIgYXMgd2Uga25vdywgdGhlIDg2NSBkb2Vzbid0IGhhdmUgdGhlc2UgYml0IDYKIAkJICogc3dpenpsaW5nIGlzc3Vlcy4KIAkJICovCkBAIC0zMTcsMTMgKzI5OCw2IEBACiAJCX0KIAl9CiAKLQkvKiBGSVhNRTogY2hlY2sgd2l0aCBtZW1vcnkgY29uZmlnIG9uIElHRE5HICovCi0JaWYgKElTX0lHRE5HKGRldikpIHsKLQkJRFJNX0VSUk9SKCJkaXNhYmxlIHRpbGluZyBvbiBJR0RORy4uLlxuIik7Ci0JCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwotCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKLQl9Ci0KIAlkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94ID0gc3dpenpsZV94OwogCWRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3kgPSBzd2l6emxlX3k7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA3ZWJjODRjLi42Yzg5ZjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTU2NSw2ICs1NjUsMjcgQEAKIAogCQkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfU1RBVCwgaG90cGx1Z19zdGF0dXMpOwogCQkJSTkxNV9SRUFEKFBPUlRfSE9UUExVR19TVEFUKTsKKworCQkJLyogRU9TIGludGVycnVwdHMgb2NjdXJzICovCisJCQlpZiAoSVNfSUdEKGRldikgJiYKKwkJCQkoaG90cGx1Z19zdGF0dXMgJiBDUlRfRU9TX0lOVF9TVEFUVVMpKSB7CisJCQkJdTMyIHRlbXA7CisKKwkJCQlEUk1fREVCVUcoIkVPUyBpbnRlcnJ1cHQgb2NjdXJzXG4iKTsKKwkJCQkvKiBzdGF0dXMgaXMgYWxyZWFkeSBjbGVhcmVkICovCisJCQkJdGVtcCA9IEk5MTVfUkVBRChBRFBBKTsKKwkJCQl0ZW1wICY9IH5BRFBBX0RBQ19FTkFCTEU7CisJCQkJSTkxNV9XUklURShBRFBBLCB0ZW1wKTsKKworCQkJCXRlbXAgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKKwkJCQl0ZW1wICY9IH5DUlRfRU9TX0lOVF9FTjsKKwkJCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19FTiwgdGVtcCk7CisKKwkJCQl0ZW1wID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19TVEFUKTsKKwkJCQlpZiAodGVtcCAmIENSVF9FT1NfSU5UX1NUQVRVUykKKwkJCQkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfU1RBVCwKKwkJCQkJCUNSVF9FT1NfSU5UX1NUQVRVUyk7CisJCQl9CiAJCX0KIAogCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDI5NTUwODMuLjNmNzk2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMzAsNiArMzAsNyBAQAogICogZmIgYXBlcnR1cmUgc2l6ZSBhbmQgdGhlIGFtb3VudCBvZiBwcmUtcmVzZXJ2ZWQgbWVtb3J5LgogICovCiAjZGVmaW5lIElOVEVMX0dNQ0hfQ1RSTAkJMHg1MgorI2RlZmluZSBJTlRFTF9HTUNIX1ZHQV9ESVNBQkxFICAoMSA8PCAxKQogI2RlZmluZSBJTlRFTF9HTUNIX0VOQUJMRUQJMHg0CiAjZGVmaW5lIElOVEVMX0dNQ0hfTUVNX01BU0sJMHgxCiAjZGVmaW5lIElOVEVMX0dNQ0hfTUVNXzY0TQkweDEKQEAgLTU1LDcgKzU2LDcgQEAKIC8qIFBDSSBjb25maWcgc3BhY2UgKi8KIAogI2RlZmluZSBIUExMQ0MJMHhjMCAvKiA4NTUgb25seSAqLwotI2RlZmluZSAgIEdDX0NMT0NLX0NPTlRST0xfTUFTSwkJKDMgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS19DT05UUk9MX01BU0sJCSgweGYgPDwgMCkKICNkZWZpbmUgICBHQ19DTE9DS18xMzNfMjAwCQkoMCA8PCAwKQogI2RlZmluZSAgIEdDX0NMT0NLXzEwMF8yMDAJCSgxIDw8IDApCiAjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzEzMwkJKDIgPDwgMCkKQEAgLTY1LDYgKzY2LDI1IEBACiAjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkoMCA8PCA0KQogI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkoNCA8PCA0KQogI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfTUFTSwkJKDcgPDwgNCkKKyNkZWZpbmUgICBHTTQ1X0dDX1JFTkRFUl9DTE9DS19NQVNLCSgweGYgPDwgMCkKKyNkZWZpbmUgICBHTTQ1X0dDX1JFTkRFUl9DTE9DS18yNjZfTUhaCSg4IDw8IDApCisjZGVmaW5lICAgR000NV9HQ19SRU5ERVJfQ0xPQ0tfMzIwX01IWgkoOSA8PCAwKQorI2RlZmluZSAgIEdNNDVfR0NfUkVOREVSX0NMT0NLXzQwMF9NSFoJKDB4YiA8PCAwKQorI2RlZmluZSAgIEdNNDVfR0NfUkVOREVSX0NMT0NLXzUzM19NSFoJKDB4YyA8PCAwKQorI2RlZmluZSAgIEk5NjVfR0NfUkVOREVSX0NMT0NLX01BU0sJKDB4ZiA8PCAwKQorI2RlZmluZSAgIEk5NjVfR0NfUkVOREVSX0NMT0NLXzI2N19NSFoJKDIgPDwgMCkKKyNkZWZpbmUgICBJOTY1X0dDX1JFTkRFUl9DTE9DS18zMzNfTUhaCSgzIDw8IDApCisjZGVmaW5lICAgSTk2NV9HQ19SRU5ERVJfQ0xPQ0tfNDQ0X01IWgkoNCA8PCAwKQorI2RlZmluZSAgIEk5NjVfR0NfUkVOREVSX0NMT0NLXzUzM19NSFoJKDUgPDwgMCkKKyNkZWZpbmUgICBJOTQ1X0dDX1JFTkRFUl9DTE9DS19NQVNLCSg3IDw8IDApCisjZGVmaW5lICAgSTk0NV9HQ19SRU5ERVJfQ0xPQ0tfMTY2X01IWgkoMCA8PCAwKQorI2RlZmluZSAgIEk5NDVfR0NfUkVOREVSX0NMT0NLXzIwMF9NSFoJKDEgPDwgMCkKKyNkZWZpbmUgICBJOTQ1X0dDX1JFTkRFUl9DTE9DS18yNTBfTUhaCSgzIDw8IDApCisjZGVmaW5lICAgSTk0NV9HQ19SRU5ERVJfQ0xPQ0tfNDAwX01IWgkoNSA8PCAwKQorI2RlZmluZSAgIEk5MTVfR0NfUkVOREVSX0NMT0NLX01BU0sJKDcgPDwgMCkKKyNkZWZpbmUgICBJOTE1X0dDX1JFTkRFUl9DTE9DS18xNjZfTUhaCSgwIDw8IDApCisjZGVmaW5lICAgSTkxNV9HQ19SRU5ERVJfQ0xPQ0tfMjAwX01IWgkoMSA8PCAwKQorI2RlZmluZSAgIEk5MTVfR0NfUkVOREVSX0NMT0NLXzMzM19NSFoJKDQgPDwgMCkKICNkZWZpbmUgTEJCCTB4ZjQKIAogLyogVkdBIHN0dWZmICovCkBAIC01NTMsOSArNTczLDExOCBAQAogI2RlZmluZSAgIERQTExBX1RFU1RfTV9CWVBBU1MJCSgxIDw8IDIpCiAjZGVmaW5lICAgRFBMTEFfSU5QVVRfQlVGRkVSX0VOQUJMRQkoMSA8PCAwKQogI2RlZmluZSBEX1NUQVRFCQkweDYxMDQKLSNkZWZpbmUgQ0dfMkRfRElTCTB4NjIwMAotI2RlZmluZSBEUENVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkoMSA8PCAyNCkKLSNkZWZpbmUgQ0dfM0RfRElTCTB4NjIwNAorI2RlZmluZSAgRFNUQVRFX1BMTF9EM19PRkYJCQkoMTw8MykKKyNkZWZpbmUgIERTVEFURV9HRlhfQ0xPQ0tfR0FUSU5HCQkoMTw8MSkKKyNkZWZpbmUgIERTVEFURV9ET1RfQ0xPQ0tfR0FUSU5HCQkoMTw8MCkKKyNkZWZpbmUgRFNQQ0xLX0dBVEVfRAkJMHg2MjAwCisjIGRlZmluZSBEUFVOSVRfQl9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDMwKSAvKiA5NjUgKi8KKyMgZGVmaW5lIFZTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI5KSAvKiA5NjUgKi8KKyMgZGVmaW5lIFZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyOCkgLyogOTY1ICovCisjIGRlZmluZSBWUkRVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjcpIC8qIDk2NSAqLworIyBkZWZpbmUgQVVEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI2KSAvKiA5NjUgKi8KKyMgZGVmaW5lIERQVU5JVF9BX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjUpIC8qIDk2NSAqLworIyBkZWZpbmUgRFBDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI0KSAvKiA5NjUgKi8KKyMgZGVmaW5lIFRWUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMykgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgVFZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIyKSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBUVkZVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjEpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIFRWRVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMCkgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgRFZTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE5KSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBEU1NVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTgpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIEREQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxNykgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgRFBSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE2KSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBEUEZVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTUpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIERQQk1VTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTQpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIERQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTMpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIERQTFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMikgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgRFBPVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDExKQorIyBkZWZpbmUgRFBCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDEwKQorIyBkZWZpbmUgRENVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgOSkKKyMgZGVmaW5lIERQVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDgpCisjIGRlZmluZSBWUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA3KSAvKiA5MTUrOiByZXNlcnZlZCAqLworIyBkZWZpbmUgT1ZIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDYpIC8qIDgzMC04NjUgKi8KKyMgZGVmaW5lIERQSU9VTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNikgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgT1ZGVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDUpCisjIGRlZmluZSBPVkJVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNCkKKy8qKgorICogVGhpcyBiaXQgbXVzdCBiZSBzZXQgb24gdGhlIDgzMCB0byBwcmV2ZW50IGhhbmdzIHdoZW4gdHVybmluZyBvZmYgdGhlCisgKiBvdmVybGF5IHNjYWxlci4KKyAqLworIyBkZWZpbmUgT1ZSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDMpCisjIGRlZmluZSBPVkNVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMikKKyMgZGVmaW5lIE9WVVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxKQorIyBkZWZpbmUgWlZVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMCkgLyogODMwICovCisjIGRlZmluZSBPVkxVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMCkgLyogODQ1LDg2NSAqLworCisjZGVmaW5lIFJFTkNMS19HQVRFX0QxCQkweDYyMDQKKyMgZGVmaW5lIEJMSVRURVJfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMykgLyogOTQ1R00gb25seSAqLworIyBkZWZpbmUgTVBFR19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDEyKSAvKiA5NDVHTSBvbmx5ICovCisjIGRlZmluZSBQQ19GRV9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDExKQorIyBkZWZpbmUgUENfQkVfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMCkKKyMgZGVmaW5lIFdJTkRPV0VSX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgOSkKKyMgZGVmaW5lIElOVEVSUE9MQVRPUl9DTE9DS19HQVRFX0RJU0FCTEUJKDEgPDwgOCkKKyMgZGVmaW5lIENPTE9SX0NBTENVTEFUT1JfQ0xPQ0tfR0FURV9ESVNBQkxFCSgxIDw8IDcpCisjIGRlZmluZSBNT1RJT05fQ09NUF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDYpCisjIGRlZmluZSBNQUdfQ0xPQ0tfR0FURV9ESVNBQkxFCQkJKDEgPDwgNSkKKy8qKiBUaGlzIGJpdCBtdXN0IGJlIHVuc2V0IG9uIDg1NSw4NjUgKi8KKyMgZGVmaW5lIE1FQ0lfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA0KQorIyBkZWZpbmUgRENNUF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDMpCisjIGRlZmluZSBNRUNfQ0xPQ0tfR0FURV9ESVNBQkxFCQkJKDEgPDwgMikKKyMgZGVmaW5lIE1FQ09fQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxKQorLyoqIFRoaXMgYml0IG11c3QgYmUgc2V0IG9uIDg1NSw4NjUuICovCisjIGRlZmluZSBTVl9DTE9DS19HQVRFX0RJU0FCTEUJCQkoMSA8PCAwKQorIyBkZWZpbmUgSTkxNV9NUEVHX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTYpCisjIGRlZmluZSBJOTE1X1ZMRF9JUF9QUl9DTE9DS19HQVRFX0RJU0FCTEUJKDEgPDwgMTUpCisjIGRlZmluZSBJOTE1X01PVElPTl9DT01QX0NMT0NLX0dBVEVfRElTQUJMRQkoMSA8PCAxNCkKKyMgZGVmaW5lIEk5MTVfQkRfQkZfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMykKKyMgZGVmaW5lIEk5MTVfU0ZfU0VfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMikKKyMgZGVmaW5lIEk5MTVfV01fQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMSkKKyMgZGVmaW5lIEk5MTVfSVpfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMCkKKyMgZGVmaW5lIEk5MTVfUElfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA5KQorIyBkZWZpbmUgSTkxNV9ESV9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDgpCisjIGRlZmluZSBJOTE1X1NIX1NWX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNykKKyMgZGVmaW5lIEk5MTVfUExfREdfUUNfRlRfQ0xPQ0tfR0FURV9ESVNBQkxFCSgxIDw8IDYpCisjIGRlZmluZSBJOTE1X1NDX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNSkKKyMgZGVmaW5lIEk5MTVfRkxfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA0KQorIyBkZWZpbmUgSTkxNV9ETV9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDMpCisjIGRlZmluZSBJOTE1X1BTX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMikKKyMgZGVmaW5lIEk5MTVfQ0NfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxKQorIyBkZWZpbmUgSTkxNV9CWV9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDApCisKKyMgZGVmaW5lIEk5NjVfUkNaX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMzApCisvKiogVGhpcyBiaXQgbXVzdCBhbHdheXMgYmUgc2V0IG9uIDk2NUcvOTY1R00gKi8KKyMgZGVmaW5lIEk5NjVfUkNDX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjkpCisjIGRlZmluZSBJOTY1X1JDUEJfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyOCkKKyMgZGVmaW5lIEk5NjVfREFQX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjcpCisjIGRlZmluZSBJOTY1X1JPQ19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI2KQorIyBkZWZpbmUgSTk2NV9HV19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI1KQorIyBkZWZpbmUgSTk2NV9URF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI0KQorLyoqIFRoaXMgYml0IG11c3QgYWx3YXlzIGJlIHNldCBvbiA5NjVHICovCisjIGRlZmluZSBJOTY1X0lTQ19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIzKQorIyBkZWZpbmUgSTk2NV9JQ19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIyKQorIyBkZWZpbmUgSTk2NV9FVV9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIxKQorIyBkZWZpbmUgSTk2NV9JRl9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIwKQorIyBkZWZpbmUgSTk2NV9UQ19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE5KQorIyBkZWZpbmUgSTk2NV9TT19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE3KQorIyBkZWZpbmUgSTk2NV9GQkNfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxNikKKyMgZGVmaW5lIEk5NjVfTUFSSV9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE1KQorIyBkZWZpbmUgSTk2NV9NQVNGX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTQpCisjIGRlZmluZSBJOTY1X01BV0JfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMykKKyMgZGVmaW5lIEk5NjVfRU1fQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMikKKyMgZGVmaW5lIEk5NjVfVUNfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMSkKKyMgZGVmaW5lIEk5NjVfU0lfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA2KQorIyBkZWZpbmUgSTk2NV9NVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDUpCisjIGRlZmluZSBJOTY1X1BMX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNCkKKyMgZGVmaW5lIEk5NjVfREdfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAzKQorIyBkZWZpbmUgSTk2NV9RQ19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIpCisjIGRlZmluZSBJOTY1X0ZUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMSkKKyMgZGVmaW5lIEk5NjVfRE1fQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAwKQorCisjZGVmaW5lIFJFTkNMS19HQVRFX0QyCQkweDYyMDgKKyNkZWZpbmUgVkZfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDkpCisjZGVmaW5lIEdTX1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA3KQorI2RlZmluZSBDTF9VTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNikKKyNkZWZpbmUgUkFNQ0xLX0dBVEVfRAkJMHg2MjEwCQkvKiBDUkwgb25seSAqLworI2RlZmluZSBERVVDCQkJMHg2MjE0ICAgICAgICAgIC8qIENSTCBvbmx5ICovCiAKIC8qCiAgKiBQYWxldHRlIHJlZ3MKQEAgLTY4Myw2ICs4MTIsNyBAQAogI2RlZmluZSAgIFNEVk9CX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjYpCiAjZGVmaW5lICAgU0RWT0NfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAyNSkKICNkZWZpbmUgICBUVl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDE4KQorI2RlZmluZSAgIENSVF9FT1NfSU5UX0VOCQkJKDEgPDwgMTApCiAjZGVmaW5lICAgQ1JUX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgOSkKICNkZWZpbmUgICBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1QJCSgxIDw8IDMpCiAjZGVmaW5lIENSVF9IT1RQTFVHX0FDVElWQVRJT05fUEVSSU9EXzMyCSgwIDw8IDgpCkBAIC03MTcsNiArODQ3LDcgQEAKICNkZWZpbmUgICBEUENfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCAyOCkKICNkZWZpbmUgICBIRE1JRF9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDI3KQogI2RlZmluZSAgIERQRF9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDI3KQorI2RlZmluZSAgIENSVF9FT1NfSU5UX1NUQVRVUwkJCSgxIDw8IDEyKQogI2RlZmluZSAgIENSVF9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDExKQogI2RlZmluZSAgIFRWX0hPVFBMVUdfSU5UX1NUQVRVUwkJCSgxIDw8IDEwKQogI2RlZmluZSAgIENSVF9IT1RQTFVHX01PTklUT1JfTUFTSwkJKDMgPDwgOCkKQEAgLTE1ODYsNiArMTcxNyw3IEBACiAjZGVmaW5lICAgUElQRUNPTkZfUFJPR1JFU1NJVkUJKDAgPDwgMjEpCiAjZGVmaW5lICAgUElQRUNPTkZfSU5URVJMQUNFX1dfRklFTERfSU5ESUNBVElPTgkoNiA8PCAyMSkKICNkZWZpbmUgICBQSVBFQ09ORl9JTlRFUkxBQ0VfRklFTERfMF9PTkxZCQkoNyA8PCAyMSkKKyNkZWZpbmUgICBQSVBFQ09ORl9DWFNSX0RPV05DTE9DSwkoMTw8MTYpCiAjZGVmaW5lIFBJUEVBU1RBVAkJMHg3MDAyNAogI2RlZmluZSAgIFBJUEVfRklGT19VTkRFUlJVTl9TVEFUVVMJCSgxVUw8PDMxKQogI2RlZmluZSAgIFBJUEVfQ1JDX0VSUk9SX0VOQUJMRQkJCSgxVUw8PDI5KQpAQCAtMTczMyw2ICsxODY1LDcgQEAKICNkZWZpbmUgICBESVNQUExBTkVfTk9fTElORV9ET1VCTEUJCTAKICNkZWZpbmUgICBESVNQUExBTkVfU1RFUkVPX1BPTEFSSVRZX0ZJUlNUCTAKICNkZWZpbmUgICBESVNQUExBTkVfU1RFUkVPX1BPTEFSSVRZX1NFQ09ORAkoMTw8MTgpCisjZGVmaW5lICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFCSgxPDwxNCkgLyogSUdETkcgKi8KICNkZWZpbmUgICBESVNQUExBTkVfVElMRUQJCQkoMTw8MTApCiAjZGVmaW5lIERTUEFBRERSCQkweDcwMTg0CiAjZGVmaW5lIERTUEFTVFJJREUJCTB4NzAxODgKQEAgLTE5MTMsNiArMjA0Niw5IEBACiAjZGVmaW5lIEdUSUlSICAgMHg0NDAxOAogI2RlZmluZSBHVElFUiAgIDB4NDQwMWMKIAorI2RlZmluZSBESVNQX0FSQl9DVEwJMHg0NTAwMAorI2RlZmluZSAgRElTUF9USUxFX1NVUkZBQ0VfU1dJWlpMSU5HCSgxPDwxMykKKwogLyogUENIICovCiAKIC8qIHNvdXRoIGRpc3BsYXkgZW5naW5lIGludGVycnVwdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwppbmRleCAxZDA0ZTE5Li4yMGQ0ZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAKIAkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KIAlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7Ci0JZGV2X3ByaXYtPnNhdmVDR18yRF9ESVMgPSBJOTE1X1JFQUQoQ0dfMkRfRElTKTsKKwlkZXZfcHJpdi0+c2F2ZURTUENMS19HQVRFX0QgPSBJOTE1X1JFQUQoRFNQQ0xLX0dBVEVfRCk7CiAKIAkvKiBDYWNoZSBtb2RlIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVDQUNIRV9NT0RFXzAgPSBJOTE1X1JFQUQoQ0FDSEVfTU9ERV8wKTsKQEAgLTU4OCw3ICs1ODgsNyBAQAogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKLQlJOTE1X1dSSVRFIChDR18yRF9ESVMsIGRldl9wcml2LT5zYXZlQ0dfMkRfRElTKTsKKwlJOTE1X1dSSVRFIChEU1BDTEtfR0FURV9ELCBkZXZfcHJpdi0+c2F2ZURTUENMS19HQVRFX0QpOwogCiAJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwogCUk5MTVfV1JJVEUgKENBQ0hFX01PREVfMCwgZGV2X3ByaXYtPnNhdmVDQUNIRV9NT0RFXzAgfCAweGZmZmYwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwppbmRleCBmODA2ZmNjLi4xZTI4YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCkBAIC0zNTUsOCArMzU1LDE0IEBACiAJfQogCiAJZHJpdmVyID0gZmluZF9zZWN0aW9uKGJkYiwgQkRCX0RSSVZFUl9GRUFUVVJFUyk7Ci0JaWYgKGRyaXZlciAmJiBkcml2ZXItPmx2ZHNfY29uZmlnID09IEJEQl9EUklWRVJfRkVBVFVSRV9FRFApCisJaWYgKCFkcml2ZXIpCisJCXJldHVybjsKKworCWlmIChkcml2ZXItPmx2ZHNfY29uZmlnID09IEJEQl9EUklWRVJfRkVBVFVSRV9FRFApCiAJCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDE7CisKKwlpZiAoZHJpdmVyLT5kdWFsX2ZyZXF1ZW5jeSkKKwkJZGV2X3ByaXYtPnJlbmRlcl9yZWNsb2NrX2F2YWlsID0gdHJ1ZTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDU5MGY4MWMuLjg4ODE0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC02NCw2ICs2NCwzNCBAQAogCX0KIAogCUk5MTVfV1JJVEUocmVnLCB0ZW1wKTsKKworCWlmIChJU19JR0QoZGV2KSkgeworCQlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09GRikgeworCQkJLyogdHVybiBvZmYgREFDICovCisJCQl0ZW1wID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19FTik7CisJCQl0ZW1wICY9IH5DUlRfRU9TX0lOVF9FTjsKKwkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX0VOLCB0ZW1wKTsKKworCQkJdGVtcCA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfU1RBVCk7CisJCQlpZiAodGVtcCAmIENSVF9FT1NfSU5UX1NUQVRVUykKKwkJCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULAorCQkJCQlDUlRfRU9TX0lOVF9TVEFUVVMpOworCQl9IGVsc2UgeworCQkJLyogdHVybiBvbiBEQUMuIEVPUyBpbnRlcnJ1cHQgbXVzdCBiZSBlbmFibGVkIGFmdGVyIERBQworCQkJICogaXMgZW5hYmxlZCwgc28gaXQgc291bmRzIG5vdCBnb29kIHRvIGVuYWJsZSBpdCBpbgorCQkJICogaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKCkKKwkJCSAqIHdhaXQgMTIuNW1zIGFmdGVyIERBQyBpcyBlbmFibGVkCisJCQkgKi8KKwkJCW1zbGVlcCgxMyk7CisJCQl0ZW1wID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19TVEFUKTsKKwkJCWlmICh0ZW1wICYgQ1JUX0VPU19JTlRfU1RBVFVTKQorCQkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX1NUQVQsCisJCQkJCUNSVF9FT1NfSU5UX1NUQVRVUyk7CisJCQl0ZW1wID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19FTik7CisJCQl0ZW1wIHw9IENSVF9FT1NfSU5UX0VOOworCQkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIHRlbXApOworCQl9CisJfQogfQogCiBzdGF0aWMgaW50IGludGVsX2NydF9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNzQ4ZWQ1MC4uMDIyN2IxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMzgsNiArMzgsNyBAQAogCiBib29sIGludGVsX3BpcGVfaGFzX3R5cGUgKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHR5cGUpOwogc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX3dhdGVybWFya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBpbnRlbF9pbmNyZWFzZV9wbGxjbG9jayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wgc2NoZWR1bGUpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyogZ2l2ZW4gdmFsdWVzICovCkBAIC02Nyw2ICs2OCw4IEBACiAgICAgaW50ZWxfcDJfdAkgICAgcDI7CiAgICAgYm9vbCAoKiBmaW5kX3BsbCkoY29uc3QgaW50ZWxfbGltaXRfdCAqLCBzdHJ1Y3QgZHJtX2NydGMgKiwKIAkJICAgICAgaW50LCBpbnQsIGludGVsX2Nsb2NrX3QgKik7CisgICAgYm9vbCAoKiBmaW5kX3JlZHVjZWRfcGxsKShjb25zdCBpbnRlbF9saW1pdF90ICosIHN0cnVjdCBkcm1fY3J0YyAqLAorCQkJICAgICAgaW50LCBpbnQsIGludGVsX2Nsb2NrX3QgKik7CiB9OwogCiAjZGVmaW5lIEk4WFhfRE9UX01JTgkJICAyNTAwMApAQCAtMjYxLDYgKzI2NCw5IEBACiBpbnRlbF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKTsKIHN0YXRpYyBib29sCitpbnRlbF9maW5kX2Jlc3RfcmVkdWNlZF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKTsKK3N0YXRpYyBib29sCiBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7CiBzdGF0aWMgYm9vbApAQCAtMjg2LDYgKzI5Miw3IEBACiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk4WFhfUDJfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSThYWF9QMl9TTE9XLAkucDJfZmFzdCA9IEk4WFhfUDJfRkFTVCB9LAogCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCisJLmZpbmRfcmVkdWNlZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfcmVkdWNlZF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaTh4eF9sdmRzID0gewpAQCAtMzAwLDYgKzMwNyw3IEBACiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk4WFhfUDJfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSThYWF9QMl9MVkRTX1NMT1csCS5wMl9mYXN0ID0gSThYWF9QMl9MVkRTX0ZBU1QgfSwKIAkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZmluZF9iZXN0X3JlZHVjZWRfUExMLAogfTsKIAkKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pOXh4X3Nkdm8gPSB7CkBAIC0zMTQsNiArMzIyLDcgQEAKIAkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9TRFZPX0RBQ19GQVNUIH0sCiAJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9yZWR1Y2VkX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9yZWR1Y2VkX1BMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pOXh4X2x2ZHMgPSB7CkBAIC0zMzEsNiArMzQwLDcgQEAKIAkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9MVkRTX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk5WFhfUDJfTFZEU19TTE9XLAkucDJfZmFzdCA9IEk5WFhfUDJfTFZEU19GQVNUIH0sCiAJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9yZWR1Y2VkX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9yZWR1Y2VkX1BMTCwKIH07CiAKICAgICAvKiBiZWxvdyBwYXJhbWV0ZXIgYW5kIGZ1bmN0aW9uIGlzIGZvciBHNFggQ2hpcHNldCBGYW1pbHkqLwpAQCAtMzQ4LDYgKzM1OCw3IEBACiAJCSAucDJfZmFzdCA9IEc0WF9QMl9TRFZPX0ZBU1QKIAl9LAogCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfZzR4X2hkbWkgPSB7CkBAIC0zNjQsNiArMzc1LDcgQEAKIAkJIC5wMl9mYXN0ID0gRzRYX1AyX0hETUlfREFDX0ZBU1QKIAl9LAogCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHMgPSB7CkBAIC0zODgsNiArNDAwLDcgQEAKIAkJIC5wMl9mYXN0ID0gRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfRkFTVAogCX0sCiAJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCisJLmZpbmRfcmVkdWNlZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVsX2x2ZHMgPSB7CkBAIC00MTIsNiArNDI1LDcgQEAKIAkJIC5wMl9mYXN0ID0gRzRYX1AyX0RVQUxfQ0hBTk5FTF9MVkRTX0ZBU1QKIAl9LAogCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfZzR4X2Rpc3BsYXlfcG9ydCA9IHsKQEAgLTQ0OSw2ICs0NjMsNyBAQAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk5WFhfUDJfU0RWT19EQUNfU0xPVywJLnAyX2Zhc3QgPSBJOVhYX1AyX1NEVk9fREFDX0ZBU1QgfSwKIAkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZmluZF9iZXN0X3JlZHVjZWRfUExMLAogfTsKIAogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2lnZF9sdmRzID0gewpAQCAtNDY0LDYgKzQ3OSw3IEBACiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk5WFhfUDJfTFZEU19TTE9XX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX0xWRFNfU0xPVywJLnAyX2Zhc3QgPSBJOVhYX1AyX0xWRFNfU0xPVyB9LAogCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCisJLmZpbmRfcmVkdWNlZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfcmVkdWNlZF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaWdkbmdfc2R2byA9IHsKQEAgLTY4OCwxNSArNzA0LDE2IEBACiAKIAltZW1zZXQgKGJlc3RfY2xvY2ssIDAsIHNpemVvZiAoKmJlc3RfY2xvY2spKTsKIAotCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OyBjbG9jay5tMSsrKSB7Ci0JCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOyBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7Ci0JCQkvKiBtMSBpcyBhbHdheXMgMCBpbiBJR0QgKi8KLQkJCWlmIChjbG9jay5tMiA+PSBjbG9jay5tMSAmJiAhSVNfSUdEKGRldikpCi0JCQkJYnJlYWs7Ci0JCQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OwotCQkJICAgICBjbG9jay5uKyspIHsKLQkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1pbjsKLQkJCQkgICAgIGNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKKwlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgeworCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKKwkJICAgICBjbG9jay5tMSsrKSB7CisJCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1pbjsKKwkJCSAgICAgY2xvY2subTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgeworCQkJCS8qIG0xIGlzIGFsd2F5cyAwIGluIElHRCAqLworCQkJCWlmIChjbG9jay5tMiA+PSBjbG9jay5tMSAmJiAhSVNfSUdEKGRldikpCisJCQkJCWJyZWFrOworCQkJCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsKKwkJCQkgICAgIGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OyBjbG9jay5uKyspIHsKIAkJCQkJaW50IHRoaXNfZXJyOwogCiAJCQkJCWludGVsX2Nsb2NrKGRldiwgcmVmY2xrLCAmY2xvY2spOwpAQCAtNzE3LDYgKzczNCw0NiBAQAogCXJldHVybiAoZXJyICE9IHRhcmdldCk7CiB9CiAKKworc3RhdGljIGJvb2wKK2ludGVsX2ZpbmRfYmVzdF9yZWR1Y2VkX1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spCisKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCWludGVsX2Nsb2NrX3QgY2xvY2s7CisJaW50IGVyciA9IHRhcmdldDsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwltZW1jcHkoJmNsb2NrLCBiZXN0X2Nsb2NrLCBzaXplb2YoaW50ZWxfY2xvY2tfdCkpOworCisJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5taW47IGNsb2NrLm0xIDw9IGxpbWl0LT5tMS5tYXg7IGNsb2NrLm0xKyspIHsKKwkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47IGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKKwkJCS8qIG0xIGlzIGFsd2F5cyAwIGluIElHRCAqLworCQkJaWYgKGNsb2NrLm0yID49IGNsb2NrLm0xICYmICFJU19JR0QoZGV2KSkKKwkJCQlicmVhazsKKwkJCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBsaW1pdC0+bi5tYXg7CisJCQkgICAgIGNsb2NrLm4rKykgeworCQkJCWludCB0aGlzX2VycjsKKworCQkJCWludGVsX2Nsb2NrKGRldiwgcmVmY2xrLCAmY2xvY2spOworCisJCQkJaWYgKCFpbnRlbF9QTExfaXNfdmFsaWQoY3J0YywgJmNsb2NrKSkKKwkJCQkJY29udGludWU7CisKKwkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOworCQkJCWlmICh0aGlzX2VyciA8IGVycikgeworCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCQllcnIgPSB0aGlzX2VycjsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBmb3VuZDsKK30KKwogc3RhdGljIGJvb2wKIGludGVsX2c0eF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQlpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQpAQCAtNzQ3LDcgKzgwNCw3IEBACiAJbWF4X24gPSBsaW1pdC0+bi5tYXg7CiAJLyogYmFzZWQgb24gaGFyZHdhcmUgcmVxdXJpbWVudCBwcmVmZXIgc21hbGxlciBuIHRvIHByZWNpc2lvbiAqLwogCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7Ci0JCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcm1lbnQgcHJlZmVyZSBsYXJnZXIgbTEsbTIsIHAxICovCisJCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcm1lbnQgcHJlZmVyZSBsYXJnZXIgbTEsbTIgKi8KIAkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5tYXg7CiAJCSAgICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgewogCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5tYXg7CkBAIC04MzIsMTUgKzg4OSwxNCBAQAogCiAJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwogCW1heF9uID0gbGltaXQtPm4ubWF4OwotCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVyaW1lbnQgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KLQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247IGNsb2NrLm4rKykgewotCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yLCBwMSAqLwotCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKLQkJICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7Ci0JCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1heDsKLQkJCSAgICAgY2xvY2subTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkgewotCQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OwotCQkJCSAgICAgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgeworCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSA+PSBsaW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7CisJCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVyaW1lbnQgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KKwkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKKwkJCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcm1lbnQgcHJlZmVyZSBsYXJnZXIgbTEsbTIgKi8KKwkJCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWF4OworCQkJICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7CisJCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5tYXg7CisJCQkJICAgICBjbG9jay5tMiA+PSBsaW1pdC0+bTIubWluOyBjbG9jay5tMi0tKSB7CiAJCQkJCWludCB0aGlzX2VycjsKIAogCQkJCQlpbnRlbF9jbG9jayhkZXYsIHJlZmNsaywgJmNsb2NrKTsKQEAgLTEwMDgsNiArMTA2NCwxMCBAQAogCQkJZHNwY250ciAmPSB+RElTUFBMQU5FX1RJTEVEOwogCX0KIAorCWlmIChJU19JR0RORyhkZXYpKQorCQkvKiBtdXN0IGRpc2FibGUgKi8KKwkJZHNwY250ciB8PSBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7CisKIAlJOTE1X1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyKTsKIAogCVN0YXJ0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CkBAIC0xMDMwLDggKzEwOTAsMTEgQEAKIAogCWlmIChvbGRfZmIpIHsKIAkJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihvbGRfZmIpOworCQlvYmpfcHJpdiA9IGludGVsX2ZiLT5vYmotPmRyaXZlcl9wcml2YXRlOwogCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oaW50ZWxfZmItPm9iaik7CiAJfQorCWludGVsX2luY3JlYXNlX3BsbGNsb2NrKGNydGMsIHRydWUpOworCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpZiAoIWRldi0+cHJpbWFyeS0+bWFzdGVyKQpAQCAtMTU4MSw2ICsxNjQ0LDggQEAKIAllbHNlCiAJCWk5eHhfY3J0Y19kcG1zKGNydGMsIG1vZGUpOwogCisJaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gbW9kZTsKKwogCWlmICghZGV2LT5wcmltYXJ5LT5tYXN0ZXIpCiAJCXJldHVybjsKIApAQCAtMTYwMyw4ICsxNjY4LDYgQEAKIAkJRFJNX0VSUk9SKCJDYW4ndCB1cGRhdGUgcGlwZSAlZCBpbiBTQVJFQVxuIiwgcGlwZSk7CiAJCWJyZWFrOwogCX0KLQotCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IG1vZGU7CiB9CiAKIHN0YXRpYyB2b2lkIGludGVsX2NydGNfcHJlcGFyZSAoc3RydWN0IGRybV9jcnRjICpjcnRjKQpAQCAtMjA1NCw2ICsyMTE3LDE4IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKK3N0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBmd19ibGNfc2VsZiA9IEk5MTVfUkVBRChGV19CTENfU0VMRik7CisKKwlpZiAoaTkxNV9wb3dlcnNhdmUpCisJCWZ3X2JsY19zZWxmIHw9IEZXX0JMQ19TRUxGX0VOOworCWVsc2UKKwkJZndfYmxjX3NlbGYgJj0gfkZXX0JMQ19TRUxGX0VOOworCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIGZ3X2JsY19zZWxmKTsKK30KKwogc3RhdGljIHZvaWQgaTk2NV91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjEwNSw3ICsyMTgwLDggQEAKIAljd20gPSAyOwogCiAJLyogQ2FsYyBzciBlbnRyaWVzIGZvciBvbmUgcGxhbmUgY29uZmlncyAqLwotCWlmIChzcl9oZGlzcGxheSAmJiAoIXBsYW5lYV9jbG9jayB8fCAhcGxhbmViX2Nsb2NrKSkgeworCWlmIChIQVNfRldfQkxDKGRldikgJiYgc3JfaGRpc3BsYXkgJiYKKwkgICAgKCFwbGFuZWFfY2xvY2sgfHwgIXBsYW5lYl9jbG9jaykpIHsKIAkJLyogc2VsZi1yZWZyZXNoIGhhcyBtdWNoIGhpZ2hlciBsYXRlbmN5ICovCiAJCWNvbnN0IHN0YXRpYyBpbnQgc3JfbGF0ZW5jeV9ucyA9IDYwMDA7CiAKQEAgLTIxMjAsOCArMjE5Niw3IEBACiAJCXNyd20gPSB0b3RhbF9zaXplIC0gc3JfZW50cmllczsKIAkJaWYgKHNyd20gPCAwKQogCQkJc3J3bSA9IDE7Ci0JCWlmIChJU19JOVhYKGRldikpCi0JCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCAoc3J3bSAmIDB4M2YpKTsKKwkJSTkxNV9XUklURShGV19CTENfU0VMRiwgRldfQkxDX1NFTEZfRU4gfCAoc3J3bSAmIDB4M2YpKTsKIAl9CiAKIAlEUk1fREVCVUcoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkLCBDOiAlZCwgU1IgJWRcbiIsCkBAIC0yMTk1LDkgKzIyNzAsNiBAQAogCXVuc2lnbmVkIGxvbmcgcGxhbmVhX2Nsb2NrID0gMCwgcGxhbmViX2Nsb2NrID0gMCwgc3JfY2xvY2sgPSAwOwogCWludCBlbmFibGVkID0gMCwgcGl4ZWxfc2l6ZSA9IDA7CiAKLQlpZiAoRFNQQVJCX0hXQ09OVFJPTChkZXYpKQotCQlyZXR1cm47Ci0KIAkvKiBHZXQgdGhlIGNsb2NrIGNvbmZpZyBmcm9tIGJvdGggcGxhbmVzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CkBAIC0yMjMwLDcgKzIzMDIsOSBAQAogCWVsc2UgaWYgKElTX0lHRChkZXYpKQogCQlpZ2RfZGlzYWJsZV9jeHNyKGRldik7CiAKLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfRzRYKGRldikpCisJCWc0eF91cGRhdGVfd20oZGV2KTsKKwllbHNlIGlmIChJU19JOTY1RyhkZXYpKQogCQlpOTY1X3VwZGF0ZV93bShkZXYpOwogCWVsc2UgaWYgKElTX0k5WFgoZGV2KSB8fCBJU19NT0JJTEUoZGV2KSkKIAkJaTl4eF91cGRhdGVfd20oZGV2LCBwbGFuZWFfY2xvY2ssIHBsYW5lYl9jbG9jaywgc3JfaGRpc3BsYXksCkBAIC0yMjY0LDkgKzIzMzgsOSBAQAogCWludCBkc3Bwb3NfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBUE9TIDogRFNQQlBPUzsKIAlpbnQgcGlwZXNyY19yZWcgPSAocGlwZSA9PSAwKSA/IFBJUEVBU1JDIDogUElQRUJTUkM7CiAJaW50IHJlZmNsaywgbnVtX291dHB1dHMgPSAwOwotCWludGVsX2Nsb2NrX3QgY2xvY2s7Ci0JdTMyIGRwbGwgPSAwLCBmcCA9IDAsIGRzcGNudHIsIHBpcGVjb25mOwotCWJvb2wgb2ssIGlzX3Nkdm8gPSBmYWxzZSwgaXNfZHZvID0gZmFsc2U7CisJaW50ZWxfY2xvY2tfdCBjbG9jaywgcmVkdWNlZF9jbG9jazsKKwl1MzIgZHBsbCA9IDAsIGZwID0gMCwgZnAyID0gMCwgZHNwY250ciwgcGlwZWNvbmY7CisJYm9vbCBvaywgaGFzX3JlZHVjZWRfY2xvY2sgPSBmYWxzZSwgaXNfc2R2byA9IGZhbHNlLCBpc19kdm8gPSBmYWxzZTsKIAlib29sIGlzX2NydCA9IGZhbHNlLCBpc19sdmRzID0gZmFsc2UsIGlzX3R2ID0gZmFsc2UsIGlzX2RwID0gZmFsc2U7CiAJYm9vbCBpc19lZHAgPSBmYWxzZTsKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwpAQCAtMjM0OSw2ICsyNDIzLDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChsaW1pdC0+ZmluZF9yZWR1Y2VkX3BsbCAmJiBkZXZfcHJpdi0+bHZkc19kb3duY2xvY2tfYXZhaWwpIHsKKwkJbWVtY3B5KCZyZWR1Y2VkX2Nsb2NrLCAmY2xvY2ssIHNpemVvZihpbnRlbF9jbG9ja190KSk7CisJCWhhc19yZWR1Y2VkX2Nsb2NrID0gbGltaXQtPmZpbmRfcmVkdWNlZF9wbGwobGltaXQsIGNydGMsCisJCQkJCQkJICAgIChhZGp1c3RlZF9tb2RlLT5jbG9jayozLzQpLAorCQkJCQkJCSAgICByZWZjbGssCisJCQkJCQkJICAgICZyZWR1Y2VkX2Nsb2NrKTsKKwl9CisKIAkvKiBTRFZPIFRWIGhhcyBmaXhlZCBQTEwgdmFsdWVzIGRlcGVuZCBvbiBpdHMgY2xvY2sgcmFuZ2UsCiAJICAgdGhpcyBtaXJyb3JzIHZiaW9zIHNldHRpbmcuICovCiAJaWYgKGlzX3Nkdm8gJiYgaXNfdHYpIHsKQEAgLTIzOTQsMTAgKzI0NzYsMTcgQEAKIAkJCQkgIGxpbmtfYncsICZtX24pOwogCX0KIAotCWlmIChJU19JR0QoZGV2KSkKKwlpZiAoSVNfSUdEKGRldikpIHsKIAkJZnAgPSAoMSA8PCBjbG9jay5uKSA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKLQllbHNlCisJCWlmIChoYXNfcmVkdWNlZF9jbG9jaykKKwkJCWZwMiA9ICgxIDw8IHJlZHVjZWRfY2xvY2subikgPDwgMTYgfAorCQkJCXJlZHVjZWRfY2xvY2subTEgPDwgOCB8IHJlZHVjZWRfY2xvY2subTI7CisJfSBlbHNlIHsKIAkJZnAgPSBjbG9jay5uIDw8IDE2IHwgY2xvY2subTEgPDwgOCB8IGNsb2NrLm0yOworCQlpZiAoaGFzX3JlZHVjZWRfY2xvY2spCisJCQlmcDIgPSByZWR1Y2VkX2Nsb2NrLm4gPDwgMTYgfCByZWR1Y2VkX2Nsb2NrLm0xIDw8IDggfAorCQkJCXJlZHVjZWRfY2xvY2subTI7CisJfQogCiAJaWYgKCFJU19JR0RORyhkZXYpKQogCQlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7CkBAIC0yNDI2LDYgKzI1MTUsOCBAQAogCQkJLyogYWxzbyBGUEExICovCiAJCQlpZiAoSVNfSUdETkcoZGV2KSkKIAkJCQlkcGxsIHw9ICgxIDw8IChjbG9jay5wMSAtIDEpKSA8PCBEUExMX0ZQQTFfUDFfUE9TVF9ESVZfU0hJRlQ7CisJCQlpZiAoSVNfRzRYKGRldikgJiYgaGFzX3JlZHVjZWRfY2xvY2spCisJCQkJZHBsbCB8PSAoMSA8PCAocmVkdWNlZF9jbG9jay5wMSAtIDEpKSA8PCBEUExMX0ZQQTFfUDFfUE9TVF9ESVZfU0hJRlQ7CiAJCX0KIAkJc3dpdGNoIChjbG9jay5wMikgewogCQljYXNlIDU6CkBAIC0yNTczLDYgKzI2NjQsMjIgQEAKIAkJdWRlbGF5KDE1MCk7CiAJfQogCisJaWYgKGlzX2x2ZHMgJiYgaGFzX3JlZHVjZWRfY2xvY2sgJiYgaTkxNV9wb3dlcnNhdmUpIHsKKwkJSTkxNV9XUklURShmcF9yZWcgKyA0LCBmcDIpOworCQlpbnRlbF9jcnRjLT5sb3dmcmVxX2F2YWlsID0gdHJ1ZTsKKwkJaWYgKEhBU19QSVBFX0NYU1IoZGV2KSkgeworCQkJRFJNX0RFQlVHKCJlbmFibGluZyBDeFNSIGRvd25jbG9ja2luZ1xuIik7CisJCQlwaXBlY29uZiB8PSBQSVBFQ09ORl9DWFNSX0RPV05DTE9DSzsKKwkJfQorCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUoZnBfcmVnICsgNCwgZnApOworCQlpbnRlbF9jcnRjLT5sb3dmcmVxX2F2YWlsID0gZmFsc2U7CisJCWlmIChIQVNfUElQRV9DWFNSKGRldikpIHsKKwkJCURSTV9ERUJVRygiZGlzYWJsaW5nIEN4U1IgZG93bmNsb2NraW5nXG4iKTsKKwkJCXBpcGVjb25mICY9IH5QSVBFQ09ORl9DWFNSX0RPV05DTE9DSzsKKwkJfQorCX0KKwogCUk5MTVfV1JJVEUoaHRvdF9yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgfAogCQkgICAoKGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsIC0gMSkgPDwgMTYpKTsKIAlJOTE1X1dSSVRFKGhibGFua19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19zdGFydCAtIDEpIHwKQEAgLTI2MTYsNiArMjcyMywxMiBAQAogCiAJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CiAKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQkvKiBlbmFibGUgYWRkcmVzcyBzd2l6emxlIGZvciB0aWxpbmcgYnVmZmVyICovCisJCXRlbXAgPSBJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKTsKKwkJSTkxNV9XUklURShESVNQX0FSQl9DVEwsIHRlbXAgfCBESVNQX1RJTEVfU1VSRkFDRV9TV0laWkxJTkcpOworCX0KKwogCUk5MTVfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOwogCiAJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KQEAgLTI3NjksMTAgKzI4ODIsMTYgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CiAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwogCXVpbnQzMl90IHRlbXAgPSAwOwogCXVpbnQzMl90IGFkZGVyOwogCisJaWYgKGNydGMtPmZiKSB7CisJCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoY3J0Yy0+ZmIpOworCQlpbnRlbF9tYXJrX2J1c3koZGV2LCBpbnRlbF9mYi0+b2JqKTsKKwl9CisKIAlpZiAoeCA8IDApIHsKIAkJdGVtcCB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1hfU0hJRlQ7CiAJCXggPSAteDsKQEAgLTMwNzAsMTIgKzMxODksMzE5IEBACiAJcmV0dXJuIG1vZGU7CiB9CiAKKyNkZWZpbmUgR1BVX0lETEVfVElNRU9VVCA1MDAgLyogbXMgKi8KKworLyogV2hlbiB0aGlzIHRpbWVyIGZpcmVzLCB3ZSd2ZSBiZWVuIGlkbGUgZm9yIGF3aGlsZSAqLworc3RhdGljIHZvaWQgaW50ZWxfZ3B1X2lkbGVfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWFyZzsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVRygiaWRsZSB0aW1lciBmaXJlZCwgZG93bmNsb2NraW5nXG4iKTsKKworCWRldl9wcml2LT5idXN5ID0gZmFsc2U7CisKKwlxdWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5pZGxlX3dvcmspOworfQorCit2b2lkIGludGVsX2luY3JlYXNlX3JlbmRlcmNsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgc2NoZWR1bGUpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKCFkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwpIHsKKwkJRFJNX0RFQlVHKCJub3QgcmVjbG9ja2luZyByZW5kZXIgY2xvY2tcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogUmVzdG9yZSByZW5kZXIgY2xvY2sgZnJlcXVlbmN5IHRvIG9yaWdpbmFsIHZhbHVlICovCisJaWYgKElTX0c0WChkZXYpIHx8IElTX0k5WFgoZGV2KSkKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGRldl9wcml2LT5vcmlnX2Nsb2NrKTsKKwllbHNlIGlmIChJU19JODVYKGRldikpCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgZGV2X3ByaXYtPm9yaWdfY2xvY2spOworCURSTV9ERUJVRygiaW5jcmVhc2luZyByZW5kZXIgY2xvY2sgZnJlcXVlbmN5XG4iKTsKKworCS8qIFNjaGVkdWxlIGRvd25jbG9jayAqLworCWlmIChzY2hlZHVsZSkKKwkJbW9kX3RpbWVyKCZkZXZfcHJpdi0+aWRsZV90aW1lciwgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoR1BVX0lETEVfVElNRU9VVCkpOworfQorCit2b2lkIGludGVsX2RlY3JlYXNlX3JlbmRlcmNsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKCFkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwpIHsKKwkJRFJNX0RFQlVHKCJub3QgcmVjbG9ja2luZyByZW5kZXIgY2xvY2tcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKElTX0c0WChkZXYpKSB7CisJCXUxNiBnY2ZnYzsKKworCQkvKiBBZGp1c3QgcmVuZGVyIGNsb2NrLi4uICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZnY2ZnYyk7CisKKwkJLyogRG93biB0byBtaW5pbXVtLi4uICovCisJCWdjZmdjICY9IH5HTTQ1X0dDX1JFTkRFUl9DTE9DS19NQVNLOworCQlnY2ZnYyB8PSBHTTQ1X0dDX1JFTkRFUl9DTE9DS18yNjZfTUhaOworCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCBnY2ZnYyk7CisJfSBlbHNlIGlmIChJU19JOTY1RyhkZXYpKSB7CisJCXUxNiBnY2ZnYzsKKworCQkvKiBBZGp1c3QgcmVuZGVyIGNsb2NrLi4uICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZnY2ZnYyk7CisKKwkJLyogRG93biB0byBtaW5pbXVtLi4uICovCisJCWdjZmdjICY9IH5JOTY1X0dDX1JFTkRFUl9DTE9DS19NQVNLOworCQlnY2ZnYyB8PSBJOTY1X0dDX1JFTkRFUl9DTE9DS18yNjdfTUhaOworCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCBnY2ZnYyk7CisJfSBlbHNlIGlmIChJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpKSB7CisJCXUxNiBnY2ZnYzsKKworCQkvKiBBZGp1c3QgcmVuZGVyIGNsb2NrLi4uICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZnY2ZnYyk7CisKKwkJLyogRG93biB0byBtaW5pbXVtLi4uICovCisJCWdjZmdjICY9IH5JOTQ1X0dDX1JFTkRFUl9DTE9DS19NQVNLOworCQlnY2ZnYyB8PSBJOTQ1X0dDX1JFTkRFUl9DTE9DS18xNjZfTUhaOworCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCBnY2ZnYyk7CisJfSBlbHNlIGlmIChJU19JOTE1RyhkZXYpKSB7CisJCXUxNiBnY2ZnYzsKKworCQkvKiBBZGp1c3QgcmVuZGVyIGNsb2NrLi4uICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZnY2ZnYyk7CisKKwkJLyogRG93biB0byBtaW5pbXVtLi4uICovCisJCWdjZmdjICY9IH5JOTE1X0dDX1JFTkRFUl9DTE9DS19NQVNLOworCQlnY2ZnYyB8PSBJOTE1X0dDX1JFTkRFUl9DTE9DS18xNjZfTUhaOworCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCBnY2ZnYyk7CisJfSBlbHNlIGlmIChJU19JODVYKGRldikpIHsKKwkJdTE2IGhwbGxjYzsKKworCQkvKiBBZGp1c3QgcmVuZGVyIGNsb2NrLi4uICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgSFBMTENDLCAmaHBsbGNjKTsKKworCQkvKiBVcCB0byBtYXhpbXVtLi4uICovCisJCWhwbGxjYyAmPSB+R0NfQ0xPQ0tfQ09OVFJPTF9NQVNLOworCQlocGxsY2MgfD0gR0NfQ0xPQ0tfMTMzXzIwMDsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBIUExMQ0MsIGhwbGxjYyk7CisJfQorCURSTV9ERUJVRygiZGVjcmVhc2luZyByZW5kZXIgY2xvY2sgZnJlcXVlbmN5XG4iKTsKK30KKworLyogTm90ZSB0aGF0IG5vIGluY3JlYXNlIGZ1bmN0aW9uIGlzIG5lZWRlZCBmb3IgdGhpcyAtIGluY3JlYXNlX3JlbmRlcmNsb2NrKCkKKyAqICB3aWxsIGFsc28gcmV3cml0ZSB0aGVzZSBiaXRzCisgKi8KK3ZvaWQgaW50ZWxfZGVjcmVhc2VfZGlzcGxheWNsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaWYgKElTX0lHRE5HKGRldikpCisJCXJldHVybjsKKworCWlmIChJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpIHx8IElTX0k5MTVHKGRldikgfHwKKwkgICAgSVNfSTkxNUdNKGRldikpIHsKKwkJdTE2IGdjZmdjOworCisJCS8qIEFkanVzdCByZW5kZXIgY2xvY2suLi4gKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgJmdjZmdjKTsKKworCQkvKiBEb3duIHRvIG1pbmltdW0uLi4gKi8KKwkJZ2NmZ2MgJj0gfjB4ZjA7CisJCWdjZmdjIHw9IDB4ODA7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGdjZmdjKTsKKwl9Cit9CisKKyNkZWZpbmUgQ1JUQ19JRExFX1RJTUVPVVQgMTAwMCAvKiBtcyAqLworCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2lkbGVfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSAoc3RydWN0IGludGVsX2NydGMgKilhcmc7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJmludGVsX2NydGMtPmJhc2U7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUcoImlkbGUgdGltZXIgZmlyZWQsIGRvd25jbG9ja2luZ1xuIik7CisKKwlpbnRlbF9jcnRjLT5idXN5ID0gZmFsc2U7CisKKwlxdWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5pZGxlX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9pbmNyZWFzZV9wbGxjbG9jayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wgc2NoZWR1bGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCWludCBkcGxsX3JlZyA9IChwaXBlID09IDApID8gRFBMTF9BIDogRFBMTF9COworCWludCBkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKKworCWlmIChJU19JR0RORyhkZXYpKQorCQlyZXR1cm47CisKKwlpZiAoIWRldl9wcml2LT5sdmRzX2Rvd25jbG9ja19hdmFpbCkKKwkJcmV0dXJuOworCisJaWYgKCFIQVNfUElQRV9DWFNSKGRldikgJiYgKGRwbGwgJiBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEpKSB7CisJCURSTV9ERUJVRygidXBjbG9ja2luZyBMVkRTXG4iKTsKKworCQkvKiBVbmxvY2sgcGFuZWwgcmVncyAqLworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIEk5MTVfUkVBRChQUF9DT05UUk9MKSB8ICgweGFiY2QgPDwgMTYpKTsKKworCQlkcGxsICY9IH5ESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTE7CisJCUk5MTVfV1JJVEUoZHBsbF9yZWcsIGRwbGwpOworCQlkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisJCWRwbGwgPSBJOTE1X1JFQUQoZHBsbF9yZWcpOworCQlpZiAoZHBsbCAmIERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMSkKKwkJCURSTV9ERUJVRygiZmFpbGVkIHRvIHVwY2xvY2sgTFZEUyFcbiIpOworCisJCS8qIC4uLmFuZCBsb2NrIHRoZW0gYWdhaW4gKi8KKwkJSTkxNV9XUklURShQUF9DT05UUk9MLCBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgJiAweDMpOworCX0KKworCS8qIFNjaGVkdWxlIGRvd25jbG9jayAqLworCWlmIChzY2hlZHVsZSkKKwkJbW9kX3RpbWVyKCZpbnRlbF9jcnRjLT5pZGxlX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhDUlRDX0lETEVfVElNRU9VVCkpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9kZWNyZWFzZV9wbGxjbG9jayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCWludCBkcGxsX3JlZyA9IChwaXBlID09IDApID8gRFBMTF9BIDogRFBMTF9COworCWludCBkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKKworCWlmIChJU19JR0RORyhkZXYpKQorCQlyZXR1cm47CisKKwlpZiAoIWRldl9wcml2LT5sdmRzX2Rvd25jbG9ja19hdmFpbCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGlzIGNhbGxlZCBieSBhIHRpbWVyLCB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgaW4KKwkgKiB0aGUgbWFudWFsIGNhc2UuCisJICovCisJaWYgKCFIQVNfUElQRV9DWFNSKGRldikgJiYgaW50ZWxfY3J0Yy0+bG93ZnJlcV9hdmFpbCkgeworCQlEUk1fREVCVUcoImRvd25jbG9ja2luZyBMVkRTXG4iKTsKKworCQkvKiBVbmxvY2sgcGFuZWwgcmVncyAqLworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIEk5MTVfUkVBRChQUF9DT05UUk9MKSB8ICgweGFiY2QgPDwgMTYpKTsKKworCQlkcGxsIHw9IERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMTsKKwkJSTkxNV9XUklURShkcGxsX3JlZywgZHBsbCk7CisJCWRwbGwgPSBJOTE1X1JFQUQoZHBsbF9yZWcpOworCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKwkJZHBsbCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CisJCWlmICghKGRwbGwgJiBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEpKQorCQkJRFJNX0RFQlVHKCJmYWlsZWQgdG8gZG93bmNsb2NrIExWRFMhXG4iKTsKKworCQkvKiAuLi5hbmQgbG9jayB0aGVtIGFnYWluICovCisJCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgSTkxNV9SRUFEKFBQX0NPTlRST0wpICYgMHgzKTsKKwl9CisKK30KKworLyoqCisgKiBpbnRlbF9pZGxlX3VwZGF0ZSAtIGFkanVzdCBjbG9ja3MgZm9yIGlkbGVuZXNzCisgKiBAd29yazogd29yayBzdHJ1Y3QKKyAqCisgKiBFaXRoZXIgdGhlIEdQVSBvciBkaXNwbGF5IChvciBib3RoKSB3ZW50IGlkbGUuICBDaGVjayB0aGUgYnVzeSBzdGF0dXMKKyAqIGhlcmUgYW5kIGFkanVzdCB0aGUgQ1JUQyBhbmQgR1BVIGNsb2NrcyBhcyBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyB2b2lkIGludGVsX2lkbGVfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gY29udGFpbmVyX29mKHdvcmssIGRybV9pOTE1X3ByaXZhdGVfdCwKKwkJCQkJCSAgICBpZGxlX3dvcmspOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKKworCWlmICghaTkxNV9wb3dlcnNhdmUpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCS8qIEdQVSBpc24ndCBwcm9jZXNzaW5nLCBkb3duY2xvY2sgaXQuICovCisJaWYgKCFkZXZfcHJpdi0+YnVzeSkgeworCQlpbnRlbF9kZWNyZWFzZV9yZW5kZXJjbG9jayhkZXYpOworCQlpbnRlbF9kZWNyZWFzZV9kaXNwbGF5Y2xvY2soZGV2KTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQkvKiBTa2lwIGluYWN0aXZlIENSVENzICovCisJCWlmICghY3J0Yy0+ZmIpCisJCQljb250aW51ZTsKKworCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwkJaWYgKCFpbnRlbF9jcnRjLT5idXN5KQorCQkJaW50ZWxfZGVjcmVhc2VfcGxsY2xvY2soY3J0Yyk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKKy8qKgorICogaW50ZWxfbWFya19idXN5IC0gbWFyayB0aGUgR1BVIGFuZCBwb3NzaWJseSB0aGUgZGlzcGxheSBidXN5CisgKiBAZGV2OiBkcm0gZGV2aWNlCisgKiBAb2JqOiBvYmplY3Qgd2UncmUgb3BlcmF0aW5nIG9uCisgKgorICogQ2FsbGVycyBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5kaWNhdGUgdGhhdCB0aGUgR1BVIGlzIGJ1c3kgcHJvY2Vzc2luZworICogY29tbWFuZHMuICBJZiBAb2JqIG1hdGNoZXMgb25lIG9mIHRoZSBDUlRDIG9iamVjdHMgKGkuZS4gaXQncyBhIHNjYW5vdXQKKyAqIGJ1ZmZlciksIHdlJ2xsIGFsc28gbWFyayB0aGUgZGlzcGxheSBhcyBidXN5LCBzbyB3ZSBrbm93IHRvIGluY3JlYXNlIGl0cworICogY2xvY2sgZnJlcXVlbmN5LgorICovCit2b2lkIGludGVsX21hcmtfYnVzeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBOVUxMOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CisKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCXJldHVybjsKKworCWRldl9wcml2LT5idXN5ID0gdHJ1ZTsKKwlpbnRlbF9pbmNyZWFzZV9yZW5kZXJjbG9jayhkZXYsIHRydWUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCFjcnRjLT5mYikKKwkJCWNvbnRpbnVlOworCisJCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCQlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKKwkJaWYgKGludGVsX2ZiLT5vYmogPT0gb2JqKSB7CisJCQlpZiAoIWludGVsX2NydGMtPmJ1c3kpIHsKKwkJCQkvKiBOb24tYnVzeSAtPiBidXN5LCB1cGNsb2NrICovCisJCQkJaW50ZWxfaW5jcmVhc2VfcGxsY2xvY2soY3J0YywgdHJ1ZSk7CisJCQkJaW50ZWxfY3J0Yy0+YnVzeSA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCS8qIEJ1c3kgLT4gYnVzeSwgcHV0IG9mZiB0aW1lciAqLworCQkJCW1vZF90aW1lcigmaW50ZWxfY3J0Yy0+aWRsZV90aW1lciwgamlmZmllcyArCisJCQkJCSAgbXNlY3NfdG9famlmZmllcyhDUlRDX0lETEVfVElNRU9VVCkpOworCQkJfQorCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAotCWlmIChpbnRlbF9jcnRjLT5tb2RlX3NldC5tb2RlKQotCQlkcm1fbW9kZV9kZXN0cm95KGNydGMtPmRldiwgaW50ZWxfY3J0Yy0+bW9kZV9zZXQubW9kZSk7CiAJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKIAlrZnJlZShpbnRlbF9jcnRjKTsKIH0KQEAgLTMxMjIsMTUgKzM1NDgsMTAgQEAKIAlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKIAlkcm1fY3J0Y19oZWxwZXJfYWRkKCZpbnRlbF9jcnRjLT5iYXNlLCAmaW50ZWxfaGVscGVyX2Z1bmNzKTsKIAotCWludGVsX2NydGMtPm1vZGVfc2V0LmNydGMgPSAmaW50ZWxfY3J0Yy0+YmFzZTsKLQlpbnRlbF9jcnRjLT5tb2RlX3NldC5jb25uZWN0b3JzID0gKHN0cnVjdCBkcm1fY29ubmVjdG9yICoqKShpbnRlbF9jcnRjICsgMSk7Ci0JaW50ZWxfY3J0Yy0+bW9kZV9zZXQubnVtX2Nvbm5lY3RvcnMgPSAwOworCWludGVsX2NydGMtPmJ1c3kgPSBmYWxzZTsKIAotCWlmIChpOTE1X2ZicGVyY3J0YykgewotCi0KLQotCX0KKwlzZXR1cF90aW1lcigmaW50ZWxfY3J0Yy0+aWRsZV90aW1lciwgaW50ZWxfY3J0Y19pZGxlX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpaW50ZWxfY3J0Yyk7CiB9CiAKIGludCBpbnRlbF9nZXRfcGlwZV9mcm9tX2NydGNfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTMxMzgsMzAgKzM1NTksMjYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkICpwaXBlX2Zyb21fY3J0Y19pZCA9IGRhdGE7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjID0gTlVMTDsKLQlpbnQgcGlwZSA9IC0xOworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKmRybW1vZGVfb2JqOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwogCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBwaXBlX2Zyb21fY3J0Y19pZC0+Y3J0Y19pZCkgewotCQkJcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlkcm1tb2RlX29iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgcGlwZV9mcm9tX2NydGNfaWQtPmNydGNfaWQsCisJCQlEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAKLQlpZiAocGlwZSA9PSAtMSkgeworCWlmICghZHJtbW9kZV9vYmopIHsKIAkJRFJNX0VSUk9SKCJubyBzdWNoIENSVEMgaWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwaXBlX2Zyb21fY3J0Y19pZC0+cGlwZSA9IHBpcGU7CisJY3J0YyA9IHRvX2ludGVsX2NydGMob2JqX3RvX2NydGMoZHJtbW9kZV9vYmopKTsKKwlwaXBlX2Zyb21fY3J0Y19pZC0+cGlwZSA9IGNydGMtPnBpcGU7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGRybV9jcnRjICppbnRlbF9nZXRfY3J0Y19mcm9tX3BpcGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCkBAIC0zMzYyLDggKzM3NzksNTYgQEAKIAkuZmJfY2hhbmdlZCA9IGludGVsZmJfcHJvYmUsCiB9OwogCit2b2lkIGludGVsX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCS8qCisJICogRGlzYWJsZSBjbG9jayBnYXRpbmcgcmVwb3J0ZWQgdG8gd29yayBpbmNvcnJlY3RseSBhY2NvcmRpbmcgdG8gdGhlCisJICogc3BlY3MsIGJ1dCBlbmFibGUgYXMgbXVjaCBlbHNlIGFzIHdlIGNhbi4KKwkgKi8KKwlpZiAoSVNfRzRYKGRldikpIHsKKwkJdWludDMyX3QgZHNwY2xrX2dhdGU7CisJCUk5MTVfV1JJVEUoUkVOQ0xLX0dBVEVfRDEsIDApOworCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QyLCBWRl9VTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8CisJCSAgICAgICBHU19VTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8CisJCSAgICAgICBDTF9VTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJCUk5MTVfV1JJVEUoUkFNQ0xLX0dBVEVfRCwgMCk7CisJCWRzcGNsa19nYXRlID0gVlJIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJT1ZSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJT1ZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CisJCWlmIChJU19HTTQ1KGRldikpCisJCQlkc3BjbGtfZ2F0ZSB8PSBEU1NVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKKwkJSTkxNV9XUklURShEU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7CisJfSBlbHNlIGlmIChJU19JOTY1R00oZGV2KSkgeworCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QxLCBJOTY1X1JDQ19DTE9DS19HQVRFX0RJU0FCTEUpOworCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QyLCAwKTsKKwkJSTkxNV9XUklURShEU1BDTEtfR0FURV9ELCAwKTsKKwkJSTkxNV9XUklURShSQU1DTEtfR0FURV9ELCAwKTsKKwkJSTkxNV9XUklURTE2KERFVUMsIDApOworCX0gZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QxLCBJOTY1X1JDWl9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICAgICAgSTk2NV9SQ0NfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgICAgIEk5NjVfUkNQQl9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICAgICAgSTk2NV9JU0NfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgICAgIEk5NjVfRkJDX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJCUk5MTVfV1JJVEUoUkVOQ0xLX0dBVEVfRDIsIDApOworCX0gZWxzZSBpZiAoSVNfSTlYWChkZXYpKSB7CisJCXUzMiBkc3RhdGUgPSBJOTE1X1JFQUQoRF9TVEFURSk7CisKKwkJZHN0YXRlIHw9IERTVEFURV9QTExfRDNfT0ZGIHwgRFNUQVRFX0dGWF9DTE9DS19HQVRJTkcgfAorCQkJRFNUQVRFX0RPVF9DTE9DS19HQVRJTkc7CisJCUk5MTVfV1JJVEUoRF9TVEFURSwgZHN0YXRlKTsKKwl9IGVsc2UgaWYgKElTX0k4NTUoZGV2KSB8fCBJU19JODY1RyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoUkVOQ0xLX0dBVEVfRDEsIFNWX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJfSBlbHNlIGlmIChJU19JODMwKGRldikpIHsKKwkJSTkxNV9XUklURShEU1BDTEtfR0FURV9ELCBPVlJVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJfQorfQorCiB2b2lkIGludGVsX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IG51bV9waXBlOwogCWludCBpOwogCkBAIC0zMzk4LDE1ICszODYzLDQ3IEBACiAJRFJNX0RFQlVHKCIlZCBkaXNwbGF5IHBpcGUlcyBhdmFpbGFibGUuXG4iLAogCQkgIG51bV9waXBlLCBudW1fcGlwZSA+IDEgPyAicyIgOiAiIik7CiAKKwlpZiAoSVNfSTg1WChkZXYpKQorCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgJmRldl9wcml2LT5vcmlnX2Nsb2NrKTsKKwllbHNlIGlmIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikpCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZkZXZfcHJpdi0+b3JpZ19jbG9jayk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGU7IGkrKykgewogCQlpbnRlbF9jcnRjX2luaXQoZGV2LCBpKTsKIAl9CiAKIAlpbnRlbF9zZXR1cF9vdXRwdXRzKGRldik7CisKKwlpbnRlbF9pbml0X2Nsb2NrX2dhdGluZyhkZXYpOworCisJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aWRsZV93b3JrLCBpbnRlbF9pZGxlX3VwZGF0ZSk7CisJc2V0dXBfdGltZXIoJmRldl9wcml2LT5pZGxlX3RpbWVyLCBpbnRlbF9ncHVfaWRsZV90aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CiB9CiAKIHZvaWQgaW50ZWxfbW9kZXNldF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQkvKiBTa2lwIGluYWN0aXZlIENSVENzICovCisJCWlmICghY3J0Yy0+ZmIpCisJCQljb250aW51ZTsKKworCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwkJaW50ZWxfaW5jcmVhc2VfcGxsY2xvY2soY3J0YywgZmFsc2UpOworCQlkZWxfdGltZXJfc3luYygmaW50ZWxfY3J0Yy0+aWRsZV90aW1lcik7CisJfQorCisJaW50ZWxfaW5jcmVhc2VfcmVuZGVyY2xvY2soZGV2LCBmYWxzZSk7CisJZGVsX3RpbWVyX3N5bmMoJmRldl9wcml2LT5pZGxlX3RpbWVyKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKIH0KIApAQCAtMzQyMCwzICszOTE3LDIwIEBACiAKIAlyZXR1cm4gJmludGVsX291dHB1dC0+ZW5jOwogfQorCisvKgorICogc2V0IHZnYSBkZWNvZGUgc3RhdGUgLSB0cnVlID09IGVuYWJsZSBWR0EgZGVjb2RlCisgKi8KK2ludCBpbnRlbF9tb2Rlc2V0X3ZnYV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUxNiBnbWNoX2N0cmw7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgSU5URUxfR01DSF9DVFJMLCAmZ21jaF9jdHJsKTsKKwlpZiAoc3RhdGUpCisJCWdtY2hfY3RybCAmPSB+SU5URUxfR01DSF9WR0FfRElTQUJMRTsKKwllbHNlCisJCWdtY2hfY3RybCB8PSBJTlRFTF9HTUNIX1ZHQV9ESVNBQkxFOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgSU5URUxfR01DSF9DVFJMLCBnbWNoX2N0cmwpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggMmI5MTRkNy4uZjQ4NTZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAlmb3IgKHRyeSA9IDA7IHRyeSA8IDU7IHRyeSsrKSB7CiAJCS8qIExvYWQgdGhlIHNlbmQgZGF0YSBpbnRvIHRoZSBhdXggY2hhbm5lbCBkYXRhIHJlZ2lzdGVycyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgc2VuZF9ieXRlczsgaSArPSA0KSB7Ci0JCQl1aW50MzJfdCAgICBkID0gcGFja19hdXgoc2VuZCArIGksIHNlbmRfYnl0ZXMgLSBpKTs7CisJCQl1aW50MzJfdCAgICBkID0gcGFja19hdXgoc2VuZCArIGksIHNlbmRfYnl0ZXMgLSBpKTsKIAkKIAkJCUk5MTVfV1JJVEUoY2hfZGF0YSArIGksIGQpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDI2YTYyMjcuLjNlYmJiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xMTcsOSArMTE3LDkgQEAKIAl1aW50MzJfdCBjdXJzb3JfYWRkcjsKIAl1OCBsdXRfclsyNTZdLCBsdXRfZ1syNTZdLCBsdXRfYlsyNTZdOwogCWludCBkcG1zX21vZGU7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpmYmRldl9mYjsKLQkvKiBhIG1vZGVfc2V0IGZvciBmYmRldiB1c2VycyBvbiB0aGlzIGNydGMgKi8KLQlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVfc2V0OworCWJvb2wgYnVzeTsgLyogaXMgc2Nhbm91dCBidWZmZXIgYmVpbmcgdXBkYXRlZCBmcmVxdWVudGx5PyAqLworCXN0cnVjdCB0aW1lcl9saXN0IGlkbGVfdGltZXI7CisJYm9vbCBsb3dmcmVxX2F2YWlsOwogfTsKIAogI2RlZmluZSB0b19pbnRlbF9jcnRjKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaW50ZWxfY3J0YywgYmFzZSkKQEAgLTEzOCw2ICsxMzgsNyBAQAogZXh0ZXJuIGJvb2wgaW50ZWxfc2R2b19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRwdXRfZGV2aWNlKTsKIGV4dGVybiB2b2lkIGludGVsX2R2b19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaW50ZWxfdHZfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGludGVsX21hcmtfYnVzeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBleHRlcm4gdm9pZCBpbnRlbF9sdmRzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpbnRlbF9kcF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBkcF9yZWcpOwogdm9pZApAQCAtMTc4LDQgKzE3OSw1IEBACiAJCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgKm1vZGVfY21kLAogCQkJCSAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmIsCiAJCQkJICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwogI2VuZGlmIC8qIF9fSU5URUxfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKaW5kZXggMWQzMDgwMi4uN2JhNGEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCkBAIC0zOSwzMzkgKzM5LDM0IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAiZHJtX2ZiX2hlbHBlci5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAogc3RydWN0IGludGVsZmJfcGFyIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpvdXJfbW9kZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciBoZWxwZXI7CiAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKLQlpbnQgY3J0Y19jb3VudDsKLQkvKiBjcnRjIGN1cnJlbnRseSBib3VuZCB0byB0aGlzICovCi0JdWludDMyX3QgY3J0Y19pZHNbMl07CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm91cl9tb2RlOwogfTsKIAotc3RhdGljIGludCBpbnRlbGZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKLQkJCXVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKLQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwYXItPmRldjsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IGk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Ci0JCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSAmaW50ZWxfY3J0Yy0+bW9kZV9zZXQ7Ci0JCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbW9kZXNldC0+ZmI7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHBhci0+Y3J0Y19jb3VudDsgaSsrKQotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKLQkJCQlicmVhazsKLQotCQlpZiAoaSA9PSBwYXItPmNydGNfY291bnQpCi0JCQljb250aW51ZTsKLQotCi0JCWlmIChyZWdubyA+IDI1NSkKLQkJCXJldHVybiAxOwotCi0JCWlmIChmYi0+ZGVwdGggPT0gOCkgewotCQkJaW50ZWxfY3J0Y19mYl9nYW1tYV9zZXQoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8pOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAocmVnbm8gPCAxNikgewotCQkJc3dpdGNoIChmYi0+ZGVwdGgpIHsKLQkJCWNhc2UgMTU6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9ICgocmVkICYgMHhmODAwKSA+PiAxKSB8Ci0JCQkJCSgoZ3JlZW4gJiAweGY4MDApID4+ICA2KSB8Ci0JCQkJCSgoYmx1ZSAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxNjoKLQkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKHJlZCAmIDB4ZjgwMCkgfAotCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAotCQkJCQkoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI0OgotCQkJY2FzZSAzMjoKLQkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKChyZWQgJiAweGZmMDApIDw8IDgpIHwKLQkJCQkJKGdyZWVuICYgMHhmZjAwKSB8Ci0JCQkJCSgoYmx1ZSAgJiAweGZmMDApID4+IDgpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGludGVsZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGludGVsZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHBhci0+aW50ZWxfZmI7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSAmaW50ZWxfZmItPmJhc2U7Ci0JaW50IGRlcHRoOwotCi0JaWYgKHZhci0+cGl4Y2xvY2sgPT0gLTEgfHwgIXZhci0+cGl4Y2xvY2spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTmVlZCB0byByZXNpemUgdGhlIGZiIG9iamVjdCAhISEgKi8KLQlpZiAodmFyLT54cmVzID4gZmItPndpZHRoIHx8IHZhci0+eXJlcyA+IGZiLT5oZWlnaHQpIHsKLQkJRFJNX0VSUk9SKCJSZXF1ZXN0ZWQgd2lkdGgvaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZiIG9iamVjdCAlZHglZCA+ICVkeCVkXG4iLHZhci0+eHJlcyx2YXItPnlyZXMsZmItPndpZHRoLGZiLT5oZWlnaHQpOwotCQlEUk1fRVJST1IoIk5lZWQgcmVzaXppbmcgY29kZS5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKLQljYXNlIDE2OgotCQlkZXB0aCA9ICh2YXItPmdyZWVuLmxlbmd0aCA9PSA2KSA/IDE2IDogMTU7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWRlcHRoID0gKHZhci0+dHJhbnNwLmxlbmd0aCA+IDApID8gMzIgOiAyNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGRlcHRoKSB7Ci0JY2FzZSA4OgotCQl2YXItPnJlZC5vZmZzZXQgPSAwOwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA4OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIDE1OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxMDsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA1OwotCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMTU7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDExOwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA1OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA1OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIDI0OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gODsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OwotCQl2YXItPmJsdWUubGVuZ3RoID0gODsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogdGhpcyB3aWxsIGxldCBmYmNvbiBkbyB0aGUgbW9kZSBpbml0ICovCi0vKiBGSVhNRTogdGFrZSBtb2RlIGNvbmZpZyBsb2NrPyAqLwotc3RhdGljIGludCBpbnRlbGZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGludGVsZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBhci0+ZGV2OwotCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKLQlpbnQgaTsKLQotCURSTV9ERUJVRygiJWQgJWRcbiIsIHZhci0+eHJlcywgdmFyLT5waXhjbG9jayk7Ci0KLQlpZiAodmFyLT5waXhjbG9jayAhPSAtMSkgewotCi0JCURSTV9FUlJPUigiUElYRUwgQ0xPQ0sgU0VUXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGRybV9jcnRjICpjcnRjOwotCQlpbnQgcmV0OwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBwYXItPmNydGNfY291bnQ7IGkrKykKLQkJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBwYXItPmNydGNfaWRzW2ldKQotCQkJCQlicmVhazsKLQotCQkJaWYgKGkgPT0gcGFyLT5jcnRjX2NvdW50KQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoY3J0Yy0+ZmIgPT0gaW50ZWxfY3J0Yy0+bW9kZV9zZXQuZmIpIHsKLQkJCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmaW50ZWxfY3J0Yy0+bW9kZV9zZXQpOwotCQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGFyLT5kZXY7Ci0Jc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7Ci0JaW50IHJldCA9IDA7Ci0JaW50IGk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlmb3IgKGkgPSAwOyBpIDwgcGFyLT5jcnRjX2NvdW50OyBpKyspCi0JCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBwYXItPmNydGNfaWRzW2ldKQotCQkJCWJyZWFrOwotCi0JCWlmIChpID09IHBhci0+Y3J0Y19jb3VudCkKLQkJCWNvbnRpbnVlOwotCi0JCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCQltb2Rlc2V0ID0gJmludGVsX2NydGMtPm1vZGVfc2V0OwotCi0JCW1vZGVzZXQtPnggPSB2YXItPnhvZmZzZXQ7Ci0JCW1vZGVzZXQtPnkgPSB2YXItPnlvZmZzZXQ7Ci0KLQkJaWYgKG1vZGVzZXQtPm51bV9jb25uZWN0b3JzKSB7Ci0JCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKG1vZGVzZXQpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCWlmICghcmV0KSB7Ci0JCQkJaW5mby0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7Ci0JCQkJaW5mby0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbGZiX29uKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwYXItPmRldjsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCWludCBpOwotCi0JLyoKLQkgKiBGb3IgZWFjaCBDUlRDIGluIHRoaXMgZmIsIGZpbmQgYWxsIGFzc29jaWF0ZWQgZW5jb2RlcnMKLQkgKiBhbmQgdHVybiB0aGVtIG9mZiwgdGhlbiB0dXJuIG9mZiB0aGUgQ1JUQy4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHBhci0+Y3J0Y19jb3VudDsgaSsrKQotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKLQkJCQlicmVhazsKLQotCQljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOwotCi0JCS8qIEZvdW5kIGEgQ1JUQyBvbiB0aGlzIGZiLCBub3cgZmluZCBlbmNvZGVycyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewotCQkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewotCQkJCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7Ci0JCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOwotCQkJCWVuY29kZXJfZnVuY3MtPmRwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PTik7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsZmJfb2ZmKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZHBtc19tb2RlKQotewotCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwYXItPmRldjsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCWludCBpOwotCi0JLyoKLQkgKiBGb3IgZWFjaCBDUlRDIGluIHRoaXMgZmIsIGZpbmQgYWxsIGFzc29jaWF0ZWQgZW5jb2RlcnMKLQkgKiBhbmQgdHVybiB0aGVtIG9mZiwgdGhlbiB0dXJuIG9mZiB0aGUgQ1JUQy4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHBhci0+Y3J0Y19jb3VudDsgaSsrKQotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKLQkJCQlicmVhazsKLQotCQkvKiBGb3VuZCBhIENSVEMgb24gdGhpcyBmYiwgbm93IGZpbmQgZW5jb2RlcnMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKLQkJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKLQkJCQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2Z1bmNzOwotCQkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKLQkJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIGRwbXNfbW9kZSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGRwbXNfbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09GRikKLQkJCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgZHBtc19tb2RlKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN3aXRjaCAoYmxhbmspIHsKLQljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCWludGVsZmJfb24oaW5mbyk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfTk9STUFMOgotCQlpbnRlbGZiX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NUQU5EQlkpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0JCWludGVsZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1RBTkRCWSk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLQkJaW50ZWxmYl9vZmYoaW5mbywgRFJNX01PREVfRFBNU19TVVNQRU5EKTsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9CTEFOS19QT1dFUkRPV046Ci0JCWludGVsZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGZiX29wcyBpbnRlbGZiX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuZmJfY2hlY2tfdmFyID0gaW50ZWxmYl9jaGVja192YXIsCi0JLmZiX3NldF9wYXIgPSBpbnRlbGZiX3NldF9wYXIsCi0JLmZiX3NldGNvbHJlZyA9IGludGVsZmJfc2V0Y29scmVnLAorCS5mYl9jaGVja192YXIgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnID0gZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcsCiAJLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKLQkuZmJfcGFuX2Rpc3BsYXkgPSBpbnRlbGZiX3Bhbl9kaXNwbGF5LAotCS5mYl9ibGFuayA9IGludGVsZmJfYmxhbmssCisJLmZiX3Bhbl9kaXNwbGF5ID0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAogfTsKIAorc3RhdGljIHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIGludGVsX2ZiX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2FtbWFfc2V0ID0gaW50ZWxfY3J0Y19mYl9nYW1tYV9zZXQsCit9OworCisKIC8qKgogICogQ3VycmV0bHkgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBvbGQgZnJhbWVidWZmZXIgaXMgcmV1c2VkLgogICoKQEAgLTQxMiwyNSArMTA3LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGludGVsZmJfcmVzaXplKTsKIAotc3RhdGljIHN0cnVjdCBkcm1fbW9kZV9zZXQga2VybmVsZmJfbW9kZTsKLQotc3RhdGljIGludCBpbnRlbGZiX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwgdW5zaWduZWQgbG9uZyB1bnVuc2VkLAotCQkJIHZvaWQgKnBhbmljX3N0cikKLXsKLQlEUk1fRVJST1IoInBhbmljIG9jY3VycmVkLCBzd2l0Y2hpbmcgYmFjayB0byB0ZXh0IGNvbnNvbGVcbiIpOwotCi0JaW50ZWxmYl9yZXN0b3JlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNlZCA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGludGVsZmJfcGFuaWMsCi19OwotCiBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJICB1aW50MzJfdCBmYl9oZWlnaHQsIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCiAJCQkgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAotCQkJICBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKippbnRlbF9mYl9wKQorCQkJICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhcjsKQEAgLTQ3OSw3ICsxNTksNyBAQAogCWxpc3RfYWRkKCZmYi0+ZmlscF9oZWFkLCAmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCk7CiAKIAlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKLQkqaW50ZWxfZmJfcCA9IGludGVsX2ZiOworCSpmYl9wID0gZmI7CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbGZiX3BhciksIGRldmljZSk7CiAJaWYgKCFpbmZvKSB7CkBAIC00ODksMjEgKzE2OSwxOSBAQAogCiAJcGFyID0gaW5mby0+cGFyOwogCisJcGFyLT5oZWxwZXIuZnVuY3MgPSAmaW50ZWxfZmJfaGVscGVyX2Z1bmNzOworCXBhci0+aGVscGVyLmRldiA9IGRldjsKKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCgmcGFyLT5oZWxwZXIsIDIsCisJCQkJCSAgICBJTlRFTEZCX0NPTk5fTElNSVQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VucmVmOworCiAJc3RyY3B5KGluZm8tPmZpeC5pZCwgImludGVsZHJtZmIiKTsKLQlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKLQlpbmZvLT5maXgudHlwZV9hdXggPSAwOwotCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCi0JaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KLQlpbmZvLT5maXgueXdyYXBzdGVwID0gMDsKLQlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9JODMwOwotCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CiAKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOwogCiAJaW5mby0+ZmJvcHMgPSAmaW50ZWxmYl9vcHM7CiAKLQlpbmZvLT5maXgubGluZV9sZW5ndGggPSBmYi0+cGl0Y2g7CiAKIAkvKiBzZXR1cCBhcGVydHVyZSBiYXNlL3NpemUgZm9yIHZlc2FmYiB0YWtlb3ZlciAqLwogCWluZm8tPmFwZXJ0dXJlX2Jhc2UgPSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2U7CkBAIC01MjcsMTggKzIwNSw4IEBACiAKIC8vCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CiAKLQlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGZiLT5wc2V1ZG9fcGFsZXR0ZTsKLQlpbmZvLT52YXIueHJlc192aXJ0dWFsID0gZmItPndpZHRoOwotCWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBmYi0+aGVpZ2h0OwotCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IGZiLT5iaXRzX3Blcl9waXhlbDsKLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSAwOwotCWluZm8tPnZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKLQlpbmZvLT52YXIuaGVpZ2h0ID0gLTE7Ci0JaW5mby0+dmFyLndpZHRoID0gLTE7Ci0KLQlpbmZvLT52YXIueHJlcyA9IGZiX3dpZHRoOwotCWluZm8tPnZhci55cmVzID0gZmJfaGVpZ2h0OworCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoKTsKKwlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGluZm8sIGZiLCBmYl93aWR0aCwgZmJfaGVpZ2h0KTsKIAogCS8qIEZJWE1FOiB3ZSByZWFsbHkgc2hvdWxkbid0IGV4cG9zZSBtbWlvIHNwYWNlIGF0IGFsbCAqLwogCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgbW1pb19iYXIpOwpAQCAtNTUwLDY0ICsyMTgsOSBAQAogCWluZm8tPnBpeG1hcC5mbGFncyA9IEZCX1BJWE1BUF9TWVNURU07CiAJaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gPSAxOwogCi0Jc3dpdGNoKGZiLT5kZXB0aCkgewotCWNhc2UgODoKLQkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OyAvKiA4Yml0IERBQyAqLwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMTU6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTA7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA1OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDU7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDE1OwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTE7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA1OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDU7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA2OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTY7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxNjsKLQkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMjQ7Ci0JCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCiAJZmItPmZiZGV2ID0gaW5mbzsKIAogCXBhci0+aW50ZWxfZmIgPSBpbnRlbF9mYjsKLQlwYXItPmRldiA9IGRldjsKIAogCS8qIFRvIGFsbG93IHJlc2l6ZWluZyB3aXRob3V0IHN3YXBwaW5nIGJ1ZmZlcnMgKi8KIAlEUk1fREVCVUcoImFsbG9jYXRlZCAlZHglZCBmYjogMHglMDh4LCBibyAlcFxuIiwgaW50ZWxfZmItPmJhc2Uud2lkdGgsCkBAIC02MjUsMzA3ICsyMzgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGludGVsZmJfbXVsdGlfZmJfcHJvYmVfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhcjsKLQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0OwotCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OwotCWludCBuZXdfZmIgPSAwOwotCWludCByZXQsIGksIGNvbm5fY291bnQ7Ci0KLQlpZiAoIWRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpCi0JCXJldHVybiAwOwotCi0JaWYgKCFjcnRjLT5kZXNpcmVkX21vZGUpCi0JCXJldHVybiAwOwotCi0Jd2lkdGggPSBjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5OwotCWhlaWdodCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXk7Ci0KLQkvKiBpcyB0aGVyZSBhbiBmYiBib3VuZCB0byB0aGlzIGNydGMgYWxyZWFkeSAqLwotCWlmICghaW50ZWxfY3J0Yy0+bW9kZV9zZXQuZmIpIHsKLQkJcmV0ID0gaW50ZWxmYl9jcmVhdGUoZGV2LCB3aWR0aCwgaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCAmaW50ZWxfZmIpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW5ld19mYiA9IDE7Ci0JfSBlbHNlIHsKLQkJZmIgPSBpbnRlbF9jcnRjLT5tb2RlX3NldC5mYjsKLQkJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Ci0JCWlmICgoaW50ZWxfZmItPmJhc2Uud2lkdGggPCB3aWR0aCkgfHwgKGludGVsX2ZiLT5iYXNlLmhlaWdodCA8IGhlaWdodCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpbmZvID0gaW50ZWxfZmItPmJhc2UuZmJkZXY7Ci0JcGFyID0gaW5mby0+cGFyOwotCi0JbW9kZXNldCA9ICZpbnRlbF9jcnRjLT5tb2RlX3NldDsKLQltb2Rlc2V0LT5mYiA9ICZpbnRlbF9mYi0+YmFzZTsKLQljb25uX2NvdW50ID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKLQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlcikKLQkJCWlmIChjb25uZWN0b3ItPmVuY29kZXItPmNydGMgPT0gbW9kZXNldC0+Y3J0YykgewotCQkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbY29ubl9jb3VudF0gPSBjb25uZWN0b3I7Ci0JCQkJY29ubl9jb3VudCsrOwotCQkJCWlmIChjb25uX2NvdW50ID4gSU5URUxGQl9DT05OX0xJTUlUKQotCQkJCQlCVUcoKTsKLQkJCX0KLQl9Ci0KLQlmb3IgKGkgPSBjb25uX2NvdW50OyBpIDwgSU5URUxGQl9DT05OX0xJTUlUOyBpKyspCi0JCW1vZGVzZXQtPmNvbm5lY3RvcnNbaV0gPSBOVUxMOwotCi0JcGFyLT5jcnRjX2lkc1swXSA9IGNydGMtPmJhc2UuaWQ7Ci0KLQltb2Rlc2V0LT5udW1fY29ubmVjdG9ycyA9IGNvbm5fY291bnQ7Ci0JaWYgKG1vZGVzZXQtPmNydGMtPmRlc2lyZWRfbW9kZSkgewotCQlpZiAobW9kZXNldC0+bW9kZSkKLQkJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2Rlc2V0LT5tb2RlKTsKLQkJbW9kZXNldC0+bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsCi0JCQkJCQkgICBtb2Rlc2V0LT5jcnRjLT5kZXNpcmVkX21vZGUpOwotCX0KLQotCXBhci0+Y3J0Y19jb3VudCA9IDE7Ci0KLQlpZiAobmV3X2ZiKSB7Ci0JCWluZm8tPnZhci5waXhjbG9jayA9IC0xOwotCQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JCWludGVsZmJfc2V0X3BhcihpbmZvKTsKLQotCURSTV9JTkZPKCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBpbmZvLT5ub2RlLAotCSAgICAgICBpbmZvLT5maXguaWQpOwotCi0JLyogU3dpdGNoIGJhY2sgdG8ga2VybmVsIGNvbnNvbGUgb24gcGFuaWMgKi8KLQlrZXJuZWxmYl9tb2RlID0gKm1vZGVzZXQ7Ci0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNlZCk7Ci0JRFJNX0RFQlVHKCJyZWdpc3RlcmVkIHBhbmljIG5vdGlmaWVyXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGludGVsZmJfbXVsdGlfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlpbnQgcmV0ID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXJldCA9IGludGVsZmJfbXVsdGlfZmJfcHJvYmVfY3J0YyhkZXYsIGNydGMpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpbnRlbGZiX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXVuc2lnbmVkIGludCBmYl93aWR0aCA9ICh1bnNpZ25lZCktMSwgZmJfaGVpZ2h0ID0gKHVuc2lnbmVkKS0xOwotCXVuc2lnbmVkIGludCBzdXJmYWNlX3dpZHRoID0gMCwgc3VyZmFjZV9oZWlnaHQgPSAwOwotCWludCBuZXdfZmIgPSAwOwotCWludCBjcnRjX2NvdW50ID0gMDsKLQlpbnQgcmV0LCBpLCBjb25uX2NvdW50ID0gMDsKLQlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiOwotCXN0cnVjdCBmYl9pbmZvICppbmZvOwotCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyOwotCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSBOVUxMOwotCi0JRFJNX0RFQlVHKCJcbiIpOwotCi0JLyogR2V0IGEgY291bnQgb2YgY3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJaWYgKCFkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpKQotCQkJY29udGludWU7Ci0KLQkJY3J0Y19jb3VudCsrOwotCQlpZiAoIWNydGMtPmRlc2lyZWRfbW9kZSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFNtYWxsZXN0IG1vZGUgZGV0ZXJtaW5lcyBjb25zb2xlIHNpemUuLi4gKi8KLQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXkgPCBmYl93aWR0aCkKLQkJCWZiX3dpZHRoID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheTsKLQotCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheSA8IGZiX2hlaWdodCkKLQkJCWZiX2hlaWdodCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXk7Ci0KLQkJLyogLi4uIGJ1dCBsYXJnZXN0IGZvciBtZW1vcnkgYWxsb2NhdGlvbiBkaW1lbnNpb25zICovCi0JCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5ID4gc3VyZmFjZV93aWR0aCkKLQkJCXN1cmZhY2Vfd2lkdGggPSBjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5OwotCi0JCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5ID4gc3VyZmFjZV9oZWlnaHQpCi0JCQlzdXJmYWNlX2hlaWdodCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXk7Ci0JfQotCi0JaWYgKGNydGNfY291bnQgPT0gMCB8fCBmYl93aWR0aCA9PSAtMSB8fCBmYl9oZWlnaHQgPT0gLTEpIHsKLQkJLyogaG1tIGV2ZXJ5b25lIHdlbnQgYXdheSAtIGFzc3VtZSBWR0EgY2FibGUganVzdCBmZWxsIG91dAotCQkgICBhbmQgd2lsbCBjb21lIGJhY2sgbGF0ZXIuICovCi0JCURSTV9ERUJVRygibm8gQ1JUQ3MgYXZhaWxhYmxlP1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotLy9mYWlsCi0JLyogRmluZCB0aGUgZmIgZm9yIG91ciBuZXcgY29uZmlnICovCi0JaWYgKGxpc3RfZW1wdHkoJmRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QpKSB7Ci0JCURSTV9ERUJVRygiY3JlYXRpbmcgbmV3IGZiIChjb25zb2xlIHNpemUgJWR4JWQsICIKLQkJCSAgImJ1ZmZlciBzaXplICVkeCVkKVxuIiwgZmJfd2lkdGgsIGZiX2hlaWdodCwKLQkJCSAgc3VyZmFjZV93aWR0aCwgc3VyZmFjZV9oZWlnaHQpOwotCQlyZXQgPSBpbnRlbGZiX2NyZWF0ZShkZXYsIGZiX3dpZHRoLCBmYl9oZWlnaHQsIHN1cmZhY2Vfd2lkdGgsCi0JCQkJICAgICBzdXJmYWNlX2hlaWdodCwgJmludGVsX2ZiKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQluZXdfZmIgPSAxOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCi0JCWZiID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCwKLQkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyLCBmaWxwX2hlYWQpOwotCQlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKLQotCQkvKiBpZiBzb21lb25lIGhvdHBsdWdzIHNvbWV0aGluZyBiaWdnZXIgdGhhbiB3ZSBoYXZlIGFscmVhZHkKLQkJICogYWxsb2NhdGVkLCB3ZSBhcmUgcHduZWQuICBBcyByZWFsbHkgd2UgY2FuJ3QgcmVzaXplIGFuCi0JCSAqIGZiZGV2IHRoYXQgaXMgaW4gdGhlIHdpbGQgY3VycmVudGx5IGR1ZSB0byBmYmRldiBub3QgcmVhbGx5Ci0JCSAqIGJlaW5nIGRlc2lnbmVkIGZvciB0aGUgbG93ZXIgbGF5ZXJzIG1vdmluZyBzdHVmZiBhcm91bmQKLQkJICogdW5kZXIgaXQuCi0JCSAqIC0gc28gaW4gdGhlIGdyYW5kIHN0eWxlIG9mIHRoaW5ncyAtIHB1bnQuCi0JCSAqLwotCQlpZiAoKGZiLT53aWR0aCA8IHN1cmZhY2Vfd2lkdGgpIHx8Ci0JCSAgICAoZmItPmhlaWdodCA8IHN1cmZhY2VfaGVpZ2h0KSkgewotCQkJRFJNX0VSUk9SKCJmYiBub3QgbGFyZ2UgZW5vdWdoIGZvciBjb25zb2xlXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotLy8gZmFpbAotCi0JaW5mbyA9IGludGVsX2ZiLT5iYXNlLmZiZGV2OwotCXBhciA9IGluZm8tPnBhcjsKLQotCWNydGNfY291bnQgPSAwOwotCS8qCi0JICogRm9yIGVhY2ggQ1JUQywgc2V0IHVwIHRoZSBjb25uZWN0b3IgbGlzdCBmb3IgdGhlIENSVEMncyBtb2RlCi0JICogc2V0IGNvbmZpZ3VyYXRpb24uCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0JCW1vZGVzZXQgPSAmaW50ZWxfY3J0Yy0+bW9kZV9zZXQ7Ci0JCW1vZGVzZXQtPmZiID0gJmludGVsX2ZiLT5iYXNlOwotCQljb25uX2NvdW50ID0gMDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAotCQkJCSAgICBoZWFkKSB7Ci0JCQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2RlcikKLQkJCQljb250aW51ZTsKLQotCQkJaWYoY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjID09IG1vZGVzZXQtPmNydGMpIHsKLQkJCQltb2Rlc2V0LT5jb25uZWN0b3JzW2Nvbm5fY291bnQrK10gPSBjb25uZWN0b3I7Ci0JCQkJaWYgKGNvbm5fY291bnQgPiBJTlRFTEZCX0NPTk5fTElNSVQpCi0JCQkJCUJVRygpOwotCQkJfQotCQl9Ci0KLQkJLyogWmVybyBvdXQgcmVtYWluaW5nIGNvbm5lY3RvciBwb2ludGVycyAqLwotCQlmb3IgKGkgPSBjb25uX2NvdW50OyBpIDwgSU5URUxGQl9DT05OX0xJTUlUOyBpKyspCi0JCQltb2Rlc2V0LT5jb25uZWN0b3JzW2ldID0gTlVMTDsKLQotCQlwYXItPmNydGNfaWRzW2NydGNfY291bnQrK10gPSBjcnRjLT5iYXNlLmlkOwotCi0JCW1vZGVzZXQtPm51bV9jb25uZWN0b3JzID0gY29ubl9jb3VudDsKLQkJaWYgKG1vZGVzZXQtPmNydGMtPmRlc2lyZWRfbW9kZSkgewotCQkJaWYgKG1vZGVzZXQtPm1vZGUpCi0JCQkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGVzZXQtPm1vZGUpOwotCQkJbW9kZXNldC0+bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsCi0JCQkJCQkJICAgbW9kZXNldC0+Y3J0Yy0+ZGVzaXJlZF9tb2RlKTsKLQkJfQotCX0KLQlwYXItPmNydGNfY291bnQgPSBjcnRjX2NvdW50OwotCi0JaWYgKG5ld19mYikgewotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSAtMTsKLQkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlpbnRlbGZiX3NldF9wYXIoaW5mbyk7Ci0KLQlEUk1fSU5GTygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwKLQkgICAgICAgaW5mby0+Zml4LmlkKTsKLQotCS8qIFN3aXRjaCBiYWNrIHRvIGtlcm5lbCBjb25zb2xlIG9uIHBhbmljICovCi0Ja2VybmVsZmJfbW9kZSA9ICptb2Rlc2V0OwotCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOwotCURSTV9ERUJVRygicmVnaXN0ZXJlZCBwYW5pYyBub3RpZmllclxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpbnRlbGZiX3Jlc3RvcmUgLSByZXN0b3JlIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIChrZXJuZWwpIGNvbmZpZwotICoKLSAqIFJlc3RvcmUncyB0aGUga2VybmVsJ3MgZmJjb24gbW9kZSwgdXNlZCBmb3IgbGFzdGNsb3NlICYgcGFuaWMgcGF0aHMuCi0gKi8KLXZvaWQgaW50ZWxmYl9yZXN0b3JlKHZvaWQpCi17Ci0JaW50IHJldDsKLQlpZiAoKHJldCA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKCZrZXJuZWxmYl9tb2RlKSkgIT0gMCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXN0b3JlIGNydGMgY29uZmlndXJhdGlvbjogJWRcbiIsCi0JCQkgIHJldCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpbnRlbGZiX3Jlc3RvcmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCi17Ci0JaW50ZWxmYl9yZXN0b3JlKCk7Ci19Ci1zdGF0aWMgREVDTEFSRV9XT1JLKGludGVsZmJfcmVzdG9yZV93b3JrLCBpbnRlbGZiX3Jlc3RvcmVfd29ya19mbik7Ci0KLXN0YXRpYyB2b2lkIGludGVsZmJfc3lzcnEoaW50IGR1bW15MSwgc3RydWN0IHR0eV9zdHJ1Y3QgKmR1bW15MykKLXsKLSAgICAgICAgc2NoZWR1bGVfd29yaygmaW50ZWxmYl9yZXN0b3JlX3dvcmspOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9pbnRlbGZiX3Jlc3RvcmVfb3AgPSB7Ci0gICAgICAgIC5oYW5kbGVyID0gaW50ZWxmYl9zeXNycSwKLSAgICAgICAgLmhlbHBfbXNnID0gImZvcmNlLWZiKFYpIiwKLSAgICAgICAgLmFjdGlvbl9tc2cgPSAiUmVzdG9yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIiwKLX07Ci0KIGludCBpbnRlbGZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIAogCURSTV9ERUJVRygiXG4iKTsKLQotCS8qIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBpbiB0aGUgbG93ZXIgbGV2ZWxzIG9mIGhlbGwgLSBkZWFsIHdpdGggaXQKLQkgICBoZXJlICovCi0KLQkvKiB0d28gbW9kZXMgOiBhKSAxIGZiIHRvIHJ1bGUgYWxsIGNydGNzLgotCSAgICAgICAgICAgICAgIGIpIG9uZSBmYiBwZXIgY3J0Yy4KLQkgICB0d28gYWN0aW9ucyAxKSBuZXcgY29ubmVjdGVkIGRldmljZQotCSAgICAgICAgICAgICAgIDIpIGRldmljZSByZW1vdmVkLgotCSAgIGNhc2UgYS8xIDogaWYgdGhlIGZiIHN1cmZhY2UgaXNuJ3QgYmlnIGVub3VnaCAtIHJlc2l6ZSB0aGUgc3VyZmFjZSBmYi4KLQkgICAgICAgICAgICAgIGlmIHRoZSBmYiBzaXplIGlzbid0IGJpZyBlbm91Z2ggLSByZXNpemUgZmIgaW50byBzdXJmYWNlLgotCQkgICAgICBpZiBldmVyeXRoaW5nIGJpZyBlbm91Z2ggY29uZmlndXJlIHRoZSBuZXcgY3J0Yy9ldGMuCi0JICAgY2FzZSBhLzIgOiB1bmRvIHRoZSBjb25maWd1cmF0aW9uCi0JICAgICAgICAgICAgICBwb3NzaWJseSByZXNpemUgZG93biB0aGUgZmIgdG8gZml0IHRoZSBuZXcgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgY2FzZSBiLzEgOiBzZWUgaWYgaXQgaXMgb24gYSBuZXcgY3J0YyAtIHNldHVwIGEgbmV3IGZiIGFuZCBhZGQgaXQuCi0JICAgY2FzZSBiLzIgOiB0ZWFyZG93biB0aGUgbmV3IGZiLgotCSovCi0KLQkvKiBtb2RlIGEgZmlyc3QgKi8KLQkvKiBzZWFyY2ggZm9yIGFuIGZiICovCi0JaWYgKGk5MTVfZmJwZXJjcnRjID09IDEpIHsKLQkJcmV0ID0gaW50ZWxmYl9tdWx0aV9mYl9wcm9iZShkZXYpOwotCX0gZWxzZSB7Ci0JCXJldCA9IGludGVsZmJfc2luZ2xlX2ZiX3Byb2JlKGRldik7Ci0JfQotCi0JcmVnaXN0ZXJfc3lzcnFfa2V5KCd2JywgJnN5c3JxX2ludGVsZmJfcmVzdG9yZV9vcCk7Ci0KKwlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsIGludGVsZmJfY3JlYXRlKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpbnRlbGZiX3Byb2JlKTsKQEAgLTk0MCwxMyArMjU4LDE0IEBACiAJaW5mbyA9IGZiLT5mYmRldjsKIAogCWlmIChpbmZvKSB7CisJCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKKwkJaWYgKGluZm8tPnBhcikKKwkJCWRybV9mYl9oZWxwZXJfZnJlZSgmcGFyLT5oZWxwZXIpOwogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCX0KIAotCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNlZCk7Ci0JbWVtc2V0KCZrZXJuZWxmYl9tb2RlLCAwLCBzaXplb2Yoc3RydWN0IGRybV9tb2RlX3NldCkpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpbnRlbGZiX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCmluZGV4IDYyYjhiZWEuLmM3ZWFiNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCkBAIC00MiwxMSArNDIsMTEgQEAKIAlpZiAoIUlTX0lHRChkZXYpKQogCQlyZXR1cm47CiAJaWYgKGVuYWJsZSkKLQkJSTkxNV9XUklURShDR18yRF9ESVMsCi0JCQlJOTE1X1JFQUQoQ0dfMkRfRElTKSB8IERQQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwkJSTkxNV9XUklURShEU1BDTEtfR0FURV9ELAorCQkJSTkxNV9SRUFEKERTUENMS19HQVRFX0QpIHwgRFBDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCWVsc2UKLQkJSTkxNV9XUklURShDR18yRF9ESVMsCi0JCQlJOTE1X1JFQUQoQ0dfMkRfRElTKSAmICh+RFBDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpKTsKKwkJSTkxNV9XUklURShEU1BDTEtfR0FURV9ELAorCQkJSTkxNV9SRUFEKERTUENMS19HQVRFX0QpICYgKH5EUENVTklUX0NMT0NLX0dBVEVfRElTQUJMRSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDhkZjAyZWYuLmRhZmMwZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTM4LDE2ICszOCw2IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKLSNkZWZpbmUgSTkxNV9MVkRTICJpOTE1X2x2ZHMiCi0KLS8qCi0gKiB0aGUgZm9sbG93aW5nIGZvdXIgc2NhbGluZyBvcHRpb25zIGFyZSBkZWZpbmVkLgotICogI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9OT05fR1BVCTAKLSAqICNkZWZpbmUgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTgkxCi0gKiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX05PX1NDQUxFCTIKLSAqICNkZWZpbmUgRFJNX01PREVfU0NBTEVfQVNQRUNUCTMKLSAqLwotCiAvKiBQcml2YXRlIHN0cnVjdHVyZSBmb3IgdGhlIGludGVncmF0ZWQgTFZEUyBzdXBwb3J0ICovCiBzdHJ1Y3QgaW50ZWxfbHZkc19wcml2IHsKIAlpbnQgZml0dGluZ19tb2RlOwpAQCAtMzM2LDcgKzMyNiw3IEBACiAJSTkxNV9XUklURShCQ0xSUEFUX0IsIDApOwogCiAJc3dpdGNoIChsdmRzX3ByaXYtPmZpdHRpbmdfbW9kZSkgewotCWNhc2UgRFJNX01PREVfU0NBTEVfTk9fU0NBTEU6CisJY2FzZSBEUk1fTU9ERV9TQ0FMRV9DRU5URVI6CiAJCS8qCiAJCSAqIEZvciBjZW50ZXJlZCBtb2Rlcywgd2UgaGF2ZSB0byBjYWxjdWxhdGUgYm9yZGVyIHdpZHRocyAmCiAJCSAqIGhlaWdodHMgYW5kIG1vZGlmeSB0aGUgdmFsdWVzIHByb2dyYW1tZWQgaW50byB0aGUgQ1JUQy4KQEAgLTY3Miw5ICs2NjIsOCBAQAogCQkJCWNvbm5lY3Rvci0+ZW5jb2RlcikgewogCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBjb25uZWN0b3ItPmVuY29kZXItPmNydGM7CiAJCXN0cnVjdCBpbnRlbF9sdmRzX3ByaXYgKmx2ZHNfcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7Ci0JCWlmICh2YWx1ZSA9PSBEUk1fTU9ERV9TQ0FMRV9OT05fR1BVKSB7Ci0JCQlEUk1fREVCVUdfS01TKEk5MTVfTFZEUywKLQkJCQkJIm5vbl9HUFUgcHJvcGVydHkgaXMgdW5zdXBwb3J0ZWRcbiIpOworCQlpZiAodmFsdWUgPT0gRFJNX01PREVfU0NBTEVfTk9ORSkgeworCQkJRFJNX0RFQlVHX0tNUygibm8gc2NhbGluZyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChsdmRzX3ByaXYtPmZpdHRpbmdfbW9kZSA9PSB2YWx1ZSkgewpAQCAtNzMxLDggKzcyMCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGludGVsX25vX2x2ZHNfZG1pX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKLQlEUk1fREVCVUdfS01TKEk5MTVfTFZEUywKLQkJICAgICAgIlNraXBwaW5nIExWRFMgaW5pdGlhbGl6YXRpb24gZm9yICVzXG4iLCBpZC0+aWRlbnQpOworCURSTV9ERUJVR19LTVMoIlNraXBwaW5nIExWRFMgaW5pdGlhbGl6YXRpb24gZm9yICVzXG4iLCBpZC0+aWRlbnQpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDI3LDcgKzEwMTUsNyBAQAogCXJldHVybjsKIAogZmFpbGVkOgotCURSTV9ERUJVR19LTVMoSTkxNV9MVkRTLCAiTm8gTFZEUyBtb2RlcyBmb3VuZCwgZGlzYWJsaW5nLlxuIik7CisJRFJNX0RFQlVHX0tNUygiTm8gTFZEUyBtb2RlcyBmb3VuZCwgZGlzYWJsaW5nLlxuIik7CiAJaWYgKGludGVsX291dHB1dC0+ZGRjX2J1cykKIAkJaW50ZWxfaTJjX2Rlc3Ryb3koaW50ZWxfb3V0cHV0LT5kZGNfYnVzKTsKIAlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCBkM2I3NGJhLi4wYmYyOGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0zNyw3ICszNywxOSBAQAogI2luY2x1ZGUgImludGVsX3Nkdm9fcmVncy5oIgogCiAjdW5kZWYgU0RWT19ERUJVRwotI2RlZmluZSBJOTE1X1NEVk8JImk5MTVfc2R2byIKKworc3RhdGljIGNoYXIgKnR2X2Zvcm1hdF9uYW1lc1tdID0geworCSJOVFNDX00iICAgLCAiTlRTQ19KIiAgLCAiTlRTQ180NDMiLAorCSJQQUxfQiIgICAgLCAiUEFMX0QiICAgLCAiUEFMX0ciICAgLAorCSJQQUxfSCIgICAgLCAiUEFMX0kiICAgLCAiUEFMX00iICAgLAorCSJQQUxfTiIgICAgLCAiUEFMX05DIiAgLCAiUEFMXzYwIiAgLAorCSJTRUNBTV9CIiAgLCAiU0VDQU1fRCIgLCAiU0VDQU1fRyIgLAorCSJTRUNBTV9LIiAgLCAiU0VDQU1fSzEiLCAiU0VDQU1fTCIgLAorCSJTRUNBTV82MCIKK307CisKKyNkZWZpbmUgVFZfRk9STUFUX05VTSAgKHNpemVvZih0dl9mb3JtYXRfbmFtZXMpIC8gc2l6ZW9mKCp0dl9mb3JtYXRfbmFtZXMpKQorCiBzdHJ1Y3QgaW50ZWxfc2R2b19wcml2IHsKIAl1OCBzbGF2ZV9hZGRyOwogCkBAIC03MSw2ICs4MywxNSBAQAogCSAqLwogCWJvb2wgaXNfdHY7CiAKKwkvKiBUaGlzIGlzIGZvciBjdXJyZW50IHR2IGZvcm1hdCBuYW1lICovCisJY2hhciAqdHZfZm9ybWF0X25hbWU7CisKKwkvKiBUaGlzIGNvbnRhaW5zIGFsbCBjdXJyZW50IHN1cHBvcnRlZCBUViBmb3JtYXQgKi8KKwljaGFyICp0dl9mb3JtYXRfc3VwcG9ydGVkW1RWX0ZPUk1BVF9OVU1dOworCWludCAgIGZvcm1hdF9zdXBwb3J0ZWRfbnVtOworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X2Zvcm1hdF9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9mb3JtYXRfbmFtZV9wcm9wZXJ0eVtUVl9GT1JNQVRfTlVNXTsKKwogCS8qKgogCSAqIFRoaXMgaXMgc2V0IGlmIHdlIHRyZWF0IHRoZSBkZXZpY2UgYXMgSERNSSwgaW5zdGVhZCBvZiBEVkkuCiAJICovCkBAIC05NywxNCArMTE4LDYgQEAKIAkgKi8KIAlzdHJ1Y3QgaW50ZWxfc2R2b19zZHR2X3Jlc29sdXRpb25fcmVwbHkgc2R0dl9yZXNvbHV0aW9uczsKIAotCS8qKgotCSAqIEN1cnJlbnQgc2VsZWN0ZWQgVFYgZm9ybWF0LgotCSAqCi0JICogVGhpcyBpcyBzdG9yZWQgaW4gdGhlIHNhbWUgc3RydWN0dXJlIHRoYXQncyBwYXNzZWQgdG8gdGhlIGRldmljZSwgZm9yCi0JICogY29udmVuaWVuY2UuCi0JICovCi0Jc3RydWN0IGludGVsX3Nkdm9fdHZfZm9ybWF0IHR2X2Zvcm1hdDsKLQogCS8qCiAJICogc3VwcG9ydGVkIGVuY29kaW5nIG1vZGUsIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgSERNSSBpcwogCSAqIHN1cHBvcnRlZApAQCAtMTE0LDYgKzEyNyw5IEBACiAJLyogRERDIGJ1cyB1c2VkIGJ5IHRoaXMgU0RWTyBvdXRwdXQgKi8KIAl1aW50OF90IGRkY19idXM7CiAKKwkvKiBNYWMgbWluaSBoYWNrIC0tIHVzZSB0aGUgc2FtZSBEREMgYXMgdGhlIGFuYWxvZyBjb25uZWN0b3IgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFuYWxvZ19kZGNfYnVzOworCiAJaW50IHNhdmVfc2R2b19tdWx0OwogCXUxNiBzYXZlX2FjdGl2ZV9vdXRwdXRzOwogCXN0cnVjdCBpbnRlbF9zZHZvX2R0ZCBzYXZlX2lucHV0X2R0ZF8xLCBzYXZlX2lucHV0X2R0ZF8yOwpAQCAtMTg4LDcgKzIwNCw3IEBACiAJCXJldHVybiB0cnVlOwogCX0KIAotCURSTV9ERUJVRygiaTJjIHRyYW5zZmVyIHJldHVybmVkICVkXG4iLCByZXQpOworCURSTV9ERUJVR19LTVMoImkyYyB0cmFuc2ZlciByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI5OCw3ICszMTQsNyBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAJaW50IGk7CiAKLQlEUk1fREVCVUdfS01TKEk5MTVfU0RWTywgIiVzOiBXOiAlMDJYICIsCisJRFJNX0RFQlVHX0tNUygiJXM6IFc6ICUwMlggIiwKIAkJCQlTRFZPX05BTUUoc2R2b19wcml2KSwgY21kKTsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnc19sZW47IGkrKykKIAkJRFJNX0xPR19LTVMoIiUwMlggIiwgKCh1OCAqKWFyZ3MpW2ldKTsKQEAgLTM1MSw3ICszNjcsNyBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAJaW50IGk7CiAKLQlEUk1fREVCVUdfS01TKEk5MTVfU0RWTywgIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CisJRFJNX0RFQlVHX0tNUygiJXM6IFI6ICIsIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKIAlmb3IgKGkgPSAwOyBpIDwgcmVzcG9uc2VfbGVuOyBpKyspCiAJCURSTV9MT0dfS01TKCIlMDJYICIsICgodTggKilyZXNwb25zZSlbaV0pOwogCWZvciAoOyBpIDwgODsgaSsrKQpAQCAtNjY4LDEwICs2ODQsMTAgQEAKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsIDEpOwogCiAJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykgewotCQlEUk1fREVCVUcoIkNvdWxkbid0IGdldCBTRFZPIGNsb2NrIHJhdGUgbXVsdGlwbGllclxuIik7CisJCURSTV9ERUJVR19LTVMoIkNvdWxkbid0IGdldCBTRFZPIGNsb2NrIHJhdGUgbXVsdGlwbGllclxuIik7CiAJCXJldHVybiBTRFZPX0NMT0NLX1JBVEVfTVVMVF8xWDsKIAl9IGVsc2UgewotCQlEUk1fREVCVUcoIkN1cnJlbnQgY2xvY2sgcmF0ZSBtdWx0aXBsaWVyOiAlZFxuIiwgcmVzcG9uc2UpOworCQlEUk1fREVCVUdfS01TKCJDdXJyZW50IGNsb2NrIHJhdGUgbXVsdGlwbGllcjogJWRcbiIsIHJlc3BvbnNlKTsKIAl9CiAKIAlyZXR1cm4gcmVzcG9uc2U7CkBAIC05NDUsMjMgKzk2MSwyOCBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX3NldF90dl9mb3JtYXQoc3RydWN0IGludGVsX291dHB1dCAqb3V0cHV0KQogewotCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IG91dHB1dC0+ZGV2X3ByaXY7Ci0Jc3RydWN0IGludGVsX3Nkdm9fdHZfZm9ybWF0ICpmb3JtYXQsIHVuc2V0OwotCXU4IHN0YXR1czsKIAotCWZvcm1hdCA9ICZzZHZvX3ByaXYtPnR2X2Zvcm1hdDsKLQltZW1zZXQoJnVuc2V0LCAwLCBzaXplb2YodW5zZXQpKTsKLQlpZiAobWVtY21wKGZvcm1hdCwgJnVuc2V0LCBzaXplb2YoKmZvcm1hdCkpKSB7Ci0JCURSTV9ERUJVRygiJXM6IENob29zaW5nIGRlZmF1bHQgVFYgZm9ybWF0IG9mIE5UU0MtTVxuIiwKLQkJCQlTRFZPX05BTUUoc2R2b19wcml2KSk7Ci0JCWZvcm1hdC0+bnRzY19tID0gMTsKLQkJaW50ZWxfc2R2b193cml0ZV9jbWQob3V0cHV0LCBTRFZPX0NNRF9TRVRfVFZfRk9STUFULCBmb3JtYXQsCi0JCQkJc2l6ZW9mKCpmb3JtYXQpKTsKLQkJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKG91dHB1dCwgTlVMTCwgMCk7Ci0JCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCi0JCQlEUk1fREVCVUcoIiVzOiBGYWlsZWQgdG8gc2V0IFRWIGZvcm1hdFxuIiwKLQkJCQkJU0RWT19OQU1FKHNkdm9fcHJpdikpOwotCX0KKwlzdHJ1Y3QgaW50ZWxfc2R2b190dl9mb3JtYXQgZm9ybWF0OworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IG91dHB1dC0+ZGV2X3ByaXY7CisJdWludDMyX3QgZm9ybWF0X21hcCwgaTsKKwl1aW50OF90IHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBUVl9GT1JNQVRfTlVNOyBpKyspCisJCWlmICh0dl9mb3JtYXRfbmFtZXNbaV0gPT0gc2R2b19wcml2LT50dl9mb3JtYXRfbmFtZSkKKwkJCWJyZWFrOworCisJZm9ybWF0X21hcCA9IDEgPDwgaTsKKwltZW1zZXQoJmZvcm1hdCwgMCwgc2l6ZW9mKGZvcm1hdCkpOworCW1lbWNweSgmZm9ybWF0LCAmZm9ybWF0X21hcCwgc2l6ZW9mKGZvcm1hdF9tYXApID4gc2l6ZW9mKGZvcm1hdCkgPworCQkJc2l6ZW9mKGZvcm1hdCkgOiBzaXplb2YoZm9ybWF0X21hcCkpOworCisJaW50ZWxfc2R2b193cml0ZV9jbWQob3V0cHV0LCBTRFZPX0NNRF9TRVRfVFZfRk9STUFULCAmZm9ybWF0X21hcCwKKwkJCSAgICAgc2l6ZW9mKGZvcm1hdCkpOworCisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKG91dHB1dCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJRFJNX0RFQlVHKCIlczogRmFpbGVkIHRvIHNldCBUViBmb3JtYXRcbiIsCisJCQkgIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKIH0KIAogc3RhdGljIGJvb2wgaW50ZWxfc2R2b19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKQEAgLTEyMzAsOCArMTI1MSw4IEBACiAJCSAqIGEgZ2l2ZW4gaXQgdGhlIHN0YXR1cyBpcyBhIHN1Y2Nlc3MsIHdlIHN1Y2NlZWRlZC4KIAkJICovCiAJCWlmIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MgJiYgIWlucHV0MSkgewotCQkJRFJNX0RFQlVHKCJGaXJzdCAlcyBvdXRwdXQgcmVwb3J0ZWQgZmFpbHVyZSB0byBzeW5jXG4iLAotCQkJCSAgIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKKwkJCURSTV9ERUJVR19LTVMoIkZpcnN0ICVzIG91dHB1dCByZXBvcnRlZCBmYWlsdXJlIHRvICIKKwkJCQkJInN5bmNcbiIsIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKIAkJfQogCiAJCWlmICgwKQpAQCAtMTMyNiw4ICsxMzQ3LDggQEAKIAkJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYpOwogCQlzdGF0dXMgPSBpbnRlbF9zZHZvX2dldF90cmFpbmVkX2lucHV0cyhpbnRlbF9vdXRwdXQsICZpbnB1dDEsICZpbnB1dDIpOwogCQlpZiAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTICYmICFpbnB1dDEpCi0JCQlEUk1fREVCVUcoIkZpcnN0ICVzIG91dHB1dCByZXBvcnRlZCBmYWlsdXJlIHRvIHN5bmNcbiIsCi0JCQkJICAgU0RWT19OQU1FKHNkdm9fcHJpdikpOworCQkJRFJNX0RFQlVHX0tNUygiRmlyc3QgJXMgb3V0cHV0IHJlcG9ydGVkIGZhaWx1cmUgdG8gIgorCQkJCQkic3luY1xuIiwgU0RWT19OQU1FKHNkdm9fcHJpdikpOwogCX0KIAogCWludGVsX3Nkdm9fc2V0X2FjdGl2ZV9vdXRwdXRzKGludGVsX291dHB1dCwgc2R2b19wcml2LT5zYXZlX2FjdGl2ZV9vdXRwdXRzKTsKQEAgLTE0MDUsNyArMTQyNiw3IEBACiAJdTggcmVzcG9uc2VbMl07CiAJdTggc3RhdHVzOwogCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dDsKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlmICghY29ubmVjdG9yKQogCQlyZXR1cm4gMDsKQEAgLTE0NzgsNiArMTQ5OSwzNiBAQAogCXJldHVybiAoY2FwcyA+IDEpOwogfQogCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3IgKgoraW50ZWxfZmluZF9hbmFsb2dfY29ubmVjdG9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJCWlmIChpbnRlbF9vdXRwdXQtPnR5cGUgPT0gSU5URUxfT1VUUFVUX0FOQUxPRykKKwkJCXJldHVybiBjb25uZWN0b3I7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitpbnRlbF9hbmFsb2dfaXNfY29ubmVjdGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmFuYWxvZ19jb25uZWN0b3I7CisJYW5hbG9nX2Nvbm5lY3RvciA9IGludGVsX2ZpbmRfYW5hbG9nX2Nvbm5lY3RvcihkZXYpOworCisJaWYgKCFhbmFsb2dfY29ubmVjdG9yKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoYW5hbG9nX2Nvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChhbmFsb2dfY29ubmVjdG9yKSA9PQorCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCiBpbnRlbF9zZHZvX2hkbWlfc2lua19kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTE2IHJlc3BvbnNlKQogewpAQCAtMTQ4OCw2ICsxNTM5LDE1IEBACiAKIAllZGlkID0gZHJtX2dldF9lZGlkKCZpbnRlbF9vdXRwdXQtPmJhc2UsCiAJCQkgICAgaW50ZWxfb3V0cHV0LT5kZGNfYnVzKTsKKworCS8qIHdoZW4gdGhlcmUgaXMgbm8gZWRpZCBhbmQgbm8gbW9uaXRvciBpcyBjb25uZWN0ZWQgd2l0aCBWR0EKKwkgKiBwb3J0LCB0cnkgdG8gdXNlIHRoZSBDUlQgZGRjIHRvIHJlYWQgdGhlIEVESUQgZm9yIERWSS1jb25uZWN0b3IKKwkgKi8KKwlpZiAoZWRpZCA9PSBOVUxMICYmCisJICAgIHNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMgJiYKKwkgICAgIWludGVsX2FuYWxvZ19pc19jb25uZWN0ZWQoaW50ZWxfb3V0cHV0LT5iYXNlLmRldikpCisJCWVkaWQgPSBkcm1fZ2V0X2VkaWQoJmludGVsX291dHB1dC0+YmFzZSwKKwkJCQkgICAgc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyk7CiAJaWYgKGVkaWQgIT0gTlVMTCkgewogCQkvKiBEb24ndCByZXBvcnQgdGhlIG91dHB1dCBhcyBjb25uZWN0ZWQgaWYgaXQncyBhIERWSS1JCiAJCSAqIGNvbm5lY3RvciB3aXRoIGEgbm9uLWRpZ2l0YWwgRURJRCBjb21pbmcgb3V0LgpAQCAtMTUxNiwxMCArMTU3NiwxMSBAQAogCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOwogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAKLQlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX0dFVF9BVFRBQ0hFRF9ESVNQTEFZUywgTlVMTCwgMCk7CisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LAorCQkJICAgICBTRFZPX0NNRF9HRVRfQVRUQUNIRURfRElTUExBWVMsIE5VTEwsIDApOwogCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9vdXRwdXQsICZyZXNwb25zZSwgMik7CiAKLQlEUk1fREVCVUcoIlNEVk8gcmVzcG9uc2UgJWQgJWRcbiIsIHJlc3BvbnNlICYgMHhmZiwgcmVzcG9uc2UgPj4gOCk7CisJRFJNX0RFQlVHX0tNUygiU0RWTyByZXNwb25zZSAlZCAlZFxuIiwgcmVzcG9uc2UgJiAweGZmLCByZXNwb25zZSA+PiA4KTsKIAogCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247CkBAIC0xNTQwLDUwICsxNjAxLDMyIEBACiBzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX2dldF9kZGNfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCWludCBudW1fbW9kZXM7CiAKIAkvKiBzZXQgdGhlIGJ1cyBzd2l0Y2ggYW5kIGdldCB0aGUgbW9kZXMgKi8KLQlpbnRlbF9kZGNfZ2V0X21vZGVzKGludGVsX291dHB1dCk7CisJbnVtX21vZGVzID0gaW50ZWxfZGRjX2dldF9tb2RlcyhpbnRlbF9vdXRwdXQpOwogCi0jaWYgMAotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQkvKiBNYWMgbWluaSBoYWNrLiAgT24gdGhpcyBkZXZpY2UsIEkgZ2V0IEREQyB0aHJvdWdoIHRoZSBhbmFsb2csIHdoaWNoCi0JICogbG9hZC1kZXRlY3RzIGFzIGRpc2Nvbm5lY3RlZC4gIEkgZmFpbCB0byBEREMgdGhyb3VnaCB0aGUgU0RWTyBEREMsCi0JICogYnV0IGl0IGRvZXMgbG9hZC1kZXRlY3QgYXMgY29ubmVjdGVkLiAgU28sIGp1c3Qgc3RlYWwgdGhlIEREQyBiaXRzCi0JICogZnJvbSBhbmFsb2cgd2hlbiB3ZSBmYWlsIGF0IGZpbmRpbmcgaXQgdGhlIHJpZ2h0IHdheS4KKwkvKgorCSAqIE1hYyBtaW5pIGhhY2suICBPbiB0aGlzIGRldmljZSwgdGhlIERWSS1JIGNvbm5lY3RvciBzaGFyZXMgb25lIEREQworCSAqIGxpbmsgYmV0d2VlbiBhbmFsb2cgYW5kIGRpZ2l0YWwgb3V0cHV0cy4gU28sIGlmIHRoZSByZWd1bGFyIFNEVk8KKwkgKiBEREMgZmFpbHMsIGNoZWNrIHRvIHNlZSBpZiB0aGUgYW5hbG9nIG91dHB1dCBpcyBkaXNjb25uZWN0ZWQsIGluCisJICogd2hpY2ggY2FzZSB3ZSdsbCBsb29rIHRoZXJlIGZvciB0aGUgZGlnaXRhbCBEREMgZGF0YS4KIAkgKi8KLQljcnQgPSB4Zjg2X2NvbmZpZy0+b3V0cHV0WzBdOwotCWludGVsX291dHB1dCA9IGNydC0+ZHJpdmVyX3ByaXZhdGU7Ci0JaWYgKGludGVsX291dHB1dC0+dHlwZSA9PSBJODMwX09VVFBVVF9BTkFMT0cgJiYKLQkgICAgY3J0LT5mdW5jcy0+ZGV0ZWN0KGNydCkgPT0gWEY4Nk91dHB1dFN0YXR1c0Rpc2Nvbm5lY3RlZCkgewotCQlJODMwSTJDSW5pdChwU2NybiwgJmludGVsX291dHB1dC0+cEREQ0J1cywgR1BJT0EsICJDUlRERENfQSIpOwotCQllZGlkX21vbiA9IHhmODZPdXRwdXRHZXRFRElEKGNydCwgaW50ZWxfb3V0cHV0LT5wRERDQnVzKTsKLQkJeGY4NkRlc3Ryb3lJMkNCdXNSZWMoaW50ZWxfb3V0cHV0LT5wRERDQnVzLCB0cnVlLCB0cnVlKTsKKwlpZiAobnVtX21vZGVzID09IDAgJiYKKwkgICAgc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyAmJgorCSAgICAhaW50ZWxfYW5hbG9nX2lzX2Nvbm5lY3RlZChpbnRlbF9vdXRwdXQtPmJhc2UuZGV2KSkgeworCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpZ2l0YWxfZGRjX2J1czsKKworCQkvKiBTd2l0Y2ggdG8gdGhlIGFuYWxvZyBkZGMgYnVzIGFuZCB0cnkgdGhhdAorCQkgKi8KKwkJZGlnaXRhbF9kZGNfYnVzID0gaW50ZWxfb3V0cHV0LT5kZGNfYnVzOworCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBzZHZvX3ByaXYtPmFuYWxvZ19kZGNfYnVzOworCisJCSh2b2lkKSBpbnRlbF9kZGNfZ2V0X21vZGVzKGludGVsX291dHB1dCk7CisKKwkJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gZGlnaXRhbF9kZGNfYnVzOwogCX0KLQlpZiAoZWRpZF9tb24pIHsKLQkJeGY4Nk91dHB1dFNldEVESUQob3V0cHV0LCBlZGlkX21vbik7Ci0JCW1vZGVzID0geGY4Nk91dHB1dEdldEVESURNb2RlcyhvdXRwdXQpOwotCX0KLSNlbmRpZgotfQotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBjdXJyZW50IFRWIGZvcm1hdCwgYW5kIGNob29zZXMgYSBkZWZhdWx0IGlmCi0gKiBpdCBoYXNuJ3QgYmVlbiBzZXQuCi0gKi8KLXN0YXRpYyB2b2lkCi1pbnRlbF9zZHZvX2NoZWNrX3R2X2Zvcm1hdChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQpCi17Ci0Jc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqZGV2X3ByaXYgPSBvdXRwdXQtPmRldl9wcml2OwotCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCBmb3JtYXQ7Ci0JdWludDhfdCBzdGF0dXM7Ci0KLQlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9UVl9GT1JNQVQsIE5VTEwsIDApOwotCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShvdXRwdXQsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKTsKLQlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQotCQlyZXR1cm47Ci0KLQltZW1jcHkoJmRldl9wcml2LT50dl9mb3JtYXQsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKTsKIH0KIAogLyoKQEAgLTE2NTYsMTcgKzE2OTksMjYgQEAKIAlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKIAlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBvdXRwdXQtPmRldl9wcml2OwogCXN0cnVjdCBpbnRlbF9zZHZvX3NkdHZfcmVzb2x1dGlvbl9yZXF1ZXN0IHR2X3JlczsKLQl1aW50MzJfdCByZXBseSA9IDA7CisJdWludDMyX3QgcmVwbHkgPSAwLCBmb3JtYXRfbWFwID0gMDsKKwlpbnQgaTsKIAl1aW50OF90IHN0YXR1czsKLQlpbnQgaSA9IDA7CiAKLQlpbnRlbF9zZHZvX2NoZWNrX3R2X2Zvcm1hdChvdXRwdXQpOwogCiAJLyogUmVhZCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW5wdXQgcmVzb2x1dGlvbnMgZm9yIHRoZSBzZWxlY3RlZCBUVgogCSAqIGZvcm1hdC4KIAkgKi8KLQltZW1zZXQoJnR2X3JlcywgMCwgc2l6ZW9mKHR2X3JlcykpOwotCW1lbWNweSgmdHZfcmVzLCAmc2R2b19wcml2LT50dl9mb3JtYXQsIHNpemVvZih0dl9yZXMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgVFZfRk9STUFUX05VTTsgaSsrKQorCQlpZiAodHZfZm9ybWF0X25hbWVzW2ldID09ICBzZHZvX3ByaXYtPnR2X2Zvcm1hdF9uYW1lKQorCQkJYnJlYWs7CisKKwlmb3JtYXRfbWFwID0gKDEgPDwgaSk7CisJbWVtY3B5KCZ0dl9yZXMsICZmb3JtYXRfbWFwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGludGVsX3Nkdm9fc2R0dl9yZXNvbHV0aW9uX3JlcXVlc3QpID4KKwkgICAgICAgc2l6ZW9mKGZvcm1hdF9tYXApID8gc2l6ZW9mKGZvcm1hdF9tYXApIDoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbnRlbF9zZHZvX3NkdHZfcmVzb2x1dGlvbl9yZXF1ZXN0KSk7CisKKwlpbnRlbF9zZHZvX3NldF90YXJnZXRfb3V0cHV0KG91dHB1dCwgc2R2b19wcml2LT5jb250cm9sbGVkX291dHB1dCk7CisKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9TRFRWX1JFU09MVVRJT05fU1VQUE9SVCwKIAkJCSAgICAgJnR2X3Jlcywgc2l6ZW9mKHR2X3JlcykpOwogCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShvdXRwdXQsICZyZXBseSwgMyk7CkBAIC0xNjgxLDYgKzE3MzMsNyBAQAogCQkJaWYgKG5tb2RlKQogCQkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBubW9kZSk7CiAJCX0KKwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX2dldF9sdmRzX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCkBAIC0xNzQ4LDE3ICsxODAxLDYyIEBACiAJCWludGVsX2kyY19kZXN0cm95KGludGVsX291dHB1dC0+aTJjX2J1cyk7CiAJaWYgKGludGVsX291dHB1dC0+ZGRjX2J1cykKIAkJaW50ZWxfaTJjX2Rlc3Ryb3koaW50ZWxfb3V0cHV0LT5kZGNfYnVzKTsKKwlpZiAoc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cykKKwkJaW50ZWxfaTJjX2Rlc3Ryb3koc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyk7CiAKIAlpZiAoc2R2b19wcml2LT5zZHZvX2x2ZHNfZml4ZWRfbW9kZSAhPSBOVUxMKQogCQlkcm1fbW9kZV9kZXN0cm95KGNvbm5lY3Rvci0+ZGV2LAogCQkJCSBzZHZvX3ByaXYtPnNkdm9fbHZkc19maXhlZF9tb2RlKTsKIAorCWlmIChzZHZvX3ByaXYtPnR2X2Zvcm1hdF9wcm9wZXJ0eSkKKwkJZHJtX3Byb3BlcnR5X2Rlc3Ryb3koY29ubmVjdG9yLT5kZXYsCisJCQkJICAgICBzZHZvX3ByaXYtPnR2X2Zvcm1hdF9wcm9wZXJ0eSk7CisKIAlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwogCiAJa2ZyZWUoaW50ZWxfb3V0cHV0KTsKIH0KIAorc3RhdGljIGludAoraW50ZWxfc2R2b19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJdWludDY0X3QgdmFsKQoreworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmludGVsX291dHB1dC0+ZW5jOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29kZXItPmNydGM7CisJaW50IHJldCA9IDA7CisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3Byb3BlcnR5X3NldF92YWx1ZShjb25uZWN0b3IsIHByb3BlcnR5LCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChwcm9wZXJ0eSA9PSBzZHZvX3ByaXYtPnR2X2Zvcm1hdF9wcm9wZXJ0eSkgeworCQlpZiAodmFsID49IFRWX0ZPUk1BVF9OVU0pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoc2R2b19wcml2LT50dl9mb3JtYXRfbmFtZSA9PQorCQkgICAgc2R2b19wcml2LT50dl9mb3JtYXRfc3VwcG9ydGVkW3ZhbF0pCisJCQlnb3RvIG91dDsKKworCQlzZHZvX3ByaXYtPnR2X2Zvcm1hdF9uYW1lID0gc2R2b19wcml2LT50dl9mb3JtYXRfc3VwcG9ydGVkW3ZhbF07CisJCWNoYW5nZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjaGFuZ2VkICYmIGNydGMpCisJCWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShjcnRjLCAmY3J0Yy0+bW9kZSwgY3J0Yy0+eCwKKwkJCQljcnRjLT55LCBjcnRjLT5mYik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgaW50ZWxfc2R2b19oZWxwZXJfZnVuY3MgPSB7CiAJLmRwbXMgPSBpbnRlbF9zZHZvX2RwbXMsCiAJLm1vZGVfZml4dXAgPSBpbnRlbF9zZHZvX21vZGVfZml4dXAsCkBAIC0xNzczLDYgKzE4NzEsNyBAQAogCS5yZXN0b3JlID0gaW50ZWxfc2R2b19yZXN0b3JlLAogCS5kZXRlY3QgPSBpbnRlbF9zZHZvX2RldGVjdCwKIAkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuc2V0X3Byb3BlcnR5ID0gaW50ZWxfc2R2b19zZXRfcHJvcGVydHksCiAJLmRlc3Ryb3kgPSBpbnRlbF9zZHZvX2Rlc3Ryb3ksCiB9OwogCkBAIC0yMDEzLDEwICsyMTEyLDkgQEAKIAogCQlzZHZvX3ByaXYtPmNvbnRyb2xsZWRfb3V0cHV0ID0gMDsKIAkJbWVtY3B5KGJ5dGVzLCAmc2R2b19wcml2LT5jYXBzLm91dHB1dF9mbGFncywgMik7Ci0JCURSTV9ERUJVR19LTVMoSTkxNV9TRFZPLAotCQkJCSIlczogVW5rbm93biBTRFZPIG91dHB1dCB0eXBlICgweCUwMnglMDJ4KVxuIiwKLQkJCQkgIFNEVk9fTkFNRShzZHZvX3ByaXYpLAotCQkJCSAgYnl0ZXNbMF0sIGJ5dGVzWzFdKTsKKwkJRFJNX0RFQlVHX0tNUygiJXM6IFVua25vd24gU0RWTyBvdXRwdXQgdHlwZSAoMHglMDJ4JTAyeClcbiIsCisJCQkgICAgICBTRFZPX05BTUUoc2R2b19wcml2KSwKKwkJCSAgICAgIGJ5dGVzWzBdLCBieXRlc1sxXSk7CiAJCXJldCA9IGZhbHNlOwogCX0KIAlpbnRlbF9vdXRwdXQtPmNydGNfbWFzayA9ICgxIDw8IDApIHwgKDEgPDwgMSk7CkBAIC0yMDI5LDYgKzIxMjcsNTUgQEAKIAogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX3R2X2NyZWF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworICAgICAgc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfc2R2b190dl9mb3JtYXQgZm9ybWF0OworCXVpbnQzMl90IGZvcm1hdF9tYXAsIGk7CisJdWludDhfdCBzdGF0dXM7CisKKwlpbnRlbF9zZHZvX3NldF90YXJnZXRfb3V0cHV0KGludGVsX291dHB1dCwKKwkJCQkgICAgIHNkdm9fcHJpdi0+Y29udHJvbGxlZF9vdXRwdXQpOworCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LAorCQkJICAgICBTRFZPX0NNRF9HRVRfU1VQUE9SVEVEX1RWX0ZPUk1BVFMsIE5VTEwsIDApOworCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9vdXRwdXQsCisJCQkJCSAgJmZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkpOworCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybjsKKworCW1lbWNweSgmZm9ybWF0X21hcCwgJmZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkgPiBzaXplb2YoZm9ybWF0X21hcCkgPworCSAgICAgICBzaXplb2YoZm9ybWF0X21hcCkgOiBzaXplb2YoZm9ybWF0KSk7CisKKwlpZiAoZm9ybWF0X21hcCA9PSAwKQorCQlyZXR1cm47CisKKwlzZHZvX3ByaXYtPmZvcm1hdF9zdXBwb3J0ZWRfbnVtID0gMDsKKwlmb3IgKGkgPSAwIDsgaSA8IFRWX0ZPUk1BVF9OVU07IGkrKykKKwkJaWYgKGZvcm1hdF9tYXAgJiAoMSA8PCBpKSkgeworCQkJc2R2b19wcml2LT50dl9mb3JtYXRfc3VwcG9ydGVkCisJCQlbc2R2b19wcml2LT5mb3JtYXRfc3VwcG9ydGVkX251bSsrXSA9CisJCQl0dl9mb3JtYXRfbmFtZXNbaV07CisJCX0KKworCisJc2R2b19wcml2LT50dl9mb3JtYXRfcHJvcGVydHkgPQorCQkJZHJtX3Byb3BlcnR5X2NyZWF0ZSgKKwkJCQljb25uZWN0b3ItPmRldiwgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCSJtb2RlIiwgc2R2b19wcml2LT5mb3JtYXRfc3VwcG9ydGVkX251bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2R2b19wcml2LT5mb3JtYXRfc3VwcG9ydGVkX251bTsgaSsrKQorCQlkcm1fcHJvcGVydHlfYWRkX2VudW0oCisJCQkJc2R2b19wcml2LT50dl9mb3JtYXRfcHJvcGVydHksIGksCisJCQkJaSwgc2R2b19wcml2LT50dl9mb3JtYXRfc3VwcG9ydGVkW2ldKTsKKworCXNkdm9fcHJpdi0+dHZfZm9ybWF0X25hbWUgPSBzZHZvX3ByaXYtPnR2X2Zvcm1hdF9zdXBwb3J0ZWRbMF07CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoCisJCQljb25uZWN0b3IsIHNkdm9fcHJpdi0+dHZfZm9ybWF0X3Byb3BlcnR5LCAwKTsKKworfQorCiBib29sIGludGVsX3Nkdm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb3V0cHV0X2RldmljZSkKIHsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwpAQCAtMjA2NiwxOCArMjIxMywyMiBAQAogCS8qIFJlYWQgdGhlIHJlZ3MgdG8gdGVzdCBpZiB3ZSBjYW4gdGFsayB0byB0aGUgZGV2aWNlICovCiAJZm9yIChpID0gMDsgaSA8IDB4NDA7IGkrKykgewogCQlpZiAoIWludGVsX3Nkdm9fcmVhZF9ieXRlKGludGVsX291dHB1dCwgaSwgJmNoW2ldKSkgewotCQkJRFJNX0RFQlVHX0tNUyhJOTE1X1NEVk8sCi0JCQkJCSJObyBTRFZPIGRldmljZSBmb3VuZCBvbiBTRFZPJWNcbiIsCisJCQlEUk1fREVCVUdfS01TKCJObyBTRFZPIGRldmljZSBmb3VuZCBvbiBTRFZPJWNcbiIsCiAJCQkJCW91dHB1dF9kZXZpY2UgPT0gU0RWT0IgPyAnQicgOiAnQycpOwogCQkJZ290byBlcnJfaTJjOwogCQl9CiAJfQogCiAJLyogc2V0dXAgdGhlIEREQyBidXMuICovCi0JaWYgKG91dHB1dF9kZXZpY2UgPT0gU0RWT0IpCisJaWYgKG91dHB1dF9kZXZpY2UgPT0gU0RWT0IpIHsKIAkJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gaW50ZWxfaTJjX2NyZWF0ZShkZXYsIEdQSU9FLCAiU0RWT0IgRERDIEJVUyIpOwotCWVsc2UKKwkJc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPQSwKKwkJCQkJCSJTRFZPQi9WR0EgRERDIEJVUyIpOworCX0gZWxzZSB7CiAJCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPRSwgIlNEVk9DIEREQyBCVVMiKTsKKwkJc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPQSwKKwkJCQkJCSJTRFZPQy9WR0EgRERDIEJVUyIpOworCX0KIAogCWlmIChpbnRlbF9vdXRwdXQtPmRkY19idXMgPT0gTlVMTCkKIAkJZ290byBlcnJfaTJjOwpAQCAtMjA5MCw3ICsyMjQxLDcgQEAKIAogCWlmIChpbnRlbF9zZHZvX291dHB1dF9zZXR1cChpbnRlbF9vdXRwdXQsCiAJCQkJICAgIHNkdm9fcHJpdi0+Y2Fwcy5vdXRwdXRfZmxhZ3MpICE9IHRydWUpIHsKLQkJRFJNX0RFQlVHKCJTRFZPIG91dHB1dCBmYWlsZWQgdG8gc2V0dXAgb24gU0RWTyVjXG4iLAorCQlEUk1fREVCVUdfS01TKCJTRFZPIG91dHB1dCBmYWlsZWQgdG8gc2V0dXAgb24gU0RWTyVjXG4iLAogCQkJICBvdXRwdXRfZGV2aWNlID09IFNEVk9CID8gJ0InIDogJ0MnKTsKIAkJZ290byBlcnJfaTJjOwogCX0KQEAgLTIxMTEsNiArMjI2Miw4IEBACiAJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmaW50ZWxfb3V0cHV0LT5lbmMsICZpbnRlbF9zZHZvX2hlbHBlcl9mdW5jcyk7CiAKIAlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmludGVsX291dHB1dC0+YmFzZSwgJmludGVsX291dHB1dC0+ZW5jKTsKKwlpZiAoc2R2b19wcml2LT5pc190dikKKwkJaW50ZWxfc2R2b190dl9jcmVhdGVfcHJvcGVydHkoY29ubmVjdG9yKTsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOwogCiAJaW50ZWxfc2R2b19zZWxlY3RfZGRjX2J1cyhzZHZvX3ByaXYpOwpAQCAtMjEyMyw3ICsyMjc2LDcgQEAKIAkJCQkJICAgICAgICZzZHZvX3ByaXYtPnBpeGVsX2Nsb2NrX21heCk7CiAKIAotCURSTV9ERUJVR19LTVMoSTkxNV9TRFZPLCAiJXMgZGV2aWNlIFZJRC9ESUQ6ICUwMlg6JTAyWC4lMDJYLCAiCisJRFJNX0RFQlVHX0tNUygiJXMgZGV2aWNlIFZJRC9ESUQ6ICUwMlg6JTAyWC4lMDJYLCAiCiAJCQkiY2xvY2sgcmFuZ2UgJWRNSHogLSAlZE1IeiwgIgogCQkJImlucHV0IDE6ICVjLCBpbnB1dCAyOiAlYywgIgogCQkJIm91dHB1dCAxOiAlYywgb3V0cHV0IDI6ICVjXG4iLApAQCAtMjE0Myw2ICsyMjk2LDggQEAKIAlyZXR1cm4gdHJ1ZTsKIAogZXJyX2kyYzoKKwlpZiAoc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyAhPSBOVUxMKQorCQlpbnRlbF9pMmNfZGVzdHJveShzZHZvX3ByaXYtPmFuYWxvZ19kZGNfYnVzKTsKIAlpZiAoaW50ZWxfb3V0cHV0LT5kZGNfYnVzICE9IE5VTEwpCiAJCWludGVsX2kyY19kZXN0cm95KGludGVsX291dHB1dC0+ZGRjX2J1cyk7CiAJaWYgKGludGVsX291dHB1dC0+aTJjX2J1cyAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKaW5kZXggNWIxYzllOS4uYzY0ZWFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCkBAIC0xNDM3LDYgKzE0MzcsMzUgQEAKIAlyZXR1cm4gdHlwZTsKIH0KIAorLyoKKyAqIEhlcmUgd2Ugc2V0IGFjY3VyYXRlIHR2IGZvcm1hdCBhY2NvcmRpbmcgdG8gY29ubmVjdG9yIHR5cGUKKyAqIGkuZSBDb21wb25lbnQgVFYgc2hvdWxkIG5vdCBiZSBhc3NpZ25lZCBieSBOVFNDIG9yIFBBTAorICovCitzdGF0aWMgdm9pZCBpbnRlbF90dl9maW5kX2JldHRlcl9mb3JtYXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfdHZfcHJpdiAqdHZfcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJY29uc3Qgc3RydWN0IHR2X21vZGUgKnR2X21vZGUgPSBpbnRlbF90dl9tb2RlX2ZpbmQoaW50ZWxfb3V0cHV0KTsKKwlpbnQgaTsKKworCWlmICgodHZfcHJpdi0+dHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50KSA9PQorCQl0dl9tb2RlLT5jb21wb25lbnRfb25seSkKKwkJcmV0dXJuOworCisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHR2X21vZGVzKSAvIHNpemVvZigqdHZfbW9kZXMpOyBpKyspIHsKKwkJdHZfbW9kZSA9IHR2X21vZGVzICsgaTsKKworCQlpZiAoKHR2X3ByaXYtPnR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudCkgPT0KKwkJCXR2X21vZGUtPmNvbXBvbmVudF9vbmx5KQorCQkJYnJlYWs7CisJfQorCisJdHZfcHJpdi0+dHZfZm9ybWF0ID0gdHZfbW9kZS0+bmFtZTsKKwlkcm1fY29ubmVjdG9yX3Byb3BlcnR5X3NldF92YWx1ZShjb25uZWN0b3IsCisJCWNvbm5lY3Rvci0+ZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5LCBpKTsKK30KKwogLyoqCiAgKiBEZXRlY3QgdGhlIFRWIGNvbm5lY3Rpb24uCiAgKgpAQCAtMTQ3Myw2ICsxNTAyLDcgQEAKIAlpZiAodHlwZSA8IDApCiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAorCWludGVsX3R2X2ZpbmRfYmV0dGVyX2Zvcm1hdChjb25uZWN0b3IpOwogCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYwppbmRleCA2YzY3YTAyLi4zYzkxN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KIAkgICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGRldl9wcml2KTsKKwl1bnNpZ25lZCBpbnQgd2FycF9zaXplID0gTUdBX1dBUlBfVUNPREVfU0laRTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIG9mZnNldDsKIAljb25zdCB1bnNpZ25lZCBzZWNvbmRhcnlfc2l6ZSA9IGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9jb3VudApAQCAtNjE5LDcgKzYxOSw3IEBACiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KIAkgICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGRldl9wcml2KTsKKwl1bnNpZ25lZCBpbnQgd2FycF9zaXplID0gTUdBX1dBUlBfVUNPREVfU0laRTsKIAl1bnNpZ25lZCBpbnQgcHJpbWFyeV9zaXplOwogCXVuc2lnbmVkIGludCBiaW5fY291bnQ7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKaW5kZXggM2QyNjRmMjguLmJlNmM2YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCkBAIC0xNzcsNyArMTc3LDYgQEAKIGV4dGVybiBpbnQgbWdhX2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9idWYgKiBidWYpOwogCiAJCQkJLyogbWdhX3dhcnAuYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBtZ2Ffd2FycF9taWNyb2NvZGVfc2l6ZShjb25zdCBkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKIGV4dGVybiBpbnQgbWdhX3dhcnBfaW5zdGFsbF9taWNyb2NvZGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiBleHRlcm4gaW50IG1nYV93YXJwX2luaXQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCmluZGV4IGI3MTBmYWIuLmE1M2I4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiAJCSAgTUdBX1dSMzQsIDB4MDAwMDAwMDAsCiAJCSAgTUdBX1dSNDIsIDB4MDAwMGZmZmYsIE1HQV9XUjYwLCAweDAwMDBmZmZmKTsKIAotCS8qIFBhZGRpbmcgcmVxdWlyZWQgdG8gdG8gaGFyZHdhcmUgYnVnLgorCS8qIFBhZGRpbmcgcmVxdWlyZWQgZHVlIHRvIGhhcmR3YXJlIGJ1Zy4KIAkgKi8KIAlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHhmZmZmZmZmZiwKIAkJICBNR0FfRE1BUEFELCAweGZmZmZmZmZmLApAQCAtMzE3LDcgKzMxNyw3IEBACiAJCSAgTUdBX1dSNTIsIE1HQV9HNDAwX1dSX01BR0lDLAkvKiB0ZXgxIHdpZHRoICAgICAgICAqLwogCQkgIE1HQV9XUjYwLCBNR0FfRzQwMF9XUl9NQUdJQyk7CS8qIHRleDEgaGVpZ2h0ICAgICAgICovCiAKLQkvKiBQYWRkaW5nIHJlcXVpcmVkIHRvIHRvIGhhcmR3YXJlIGJ1ZyAqLworCS8qIFBhZGRpbmcgcmVxdWlyZWQgZHVlIHRvIGhhcmR3YXJlIGJ1ZyAqLwogCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweGZmZmZmZmZmLAogCQkgIE1HQV9ETUFQQUQsIDB4ZmZmZmZmZmYsCiAJCSAgTUdBX0RNQVBBRCwgMHhmZmZmZmZmZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3Vjb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV91Y29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjExZTI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3Vjb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTY0NSArMCwwIEBACi0vKiBtZ2FfdWNvZGUuaCAtLSBNYXRyb3ggRzIwMC9HNDAwIFdBUlAgZW5naW5lIG1pY3JvY29kZSAtKi0gbGludXgtYyAtKi0KLSAqIENyZWF0ZWQ6IFRodSBKYW4gMTEgMjE6MjA6NDMgMjAwMSBieSBnYXJldGhAdmFsaW51eC5jb20KLSAqCi0gKiBDb3B5cmlnaHQgMTk5OSBNYXRyb3ggR3JhcGhpY3MgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0gKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIE1BVFJPWCBHUkFQSElDUyBJTkMuLCBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAotICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCi0gKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUKLSAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEtlcm5lbC1iYXNlZCBXQVJQIGVuZ2luZSBtYW5hZ2VtZW50OgotICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgotICovCi0KLS8qCi0gKiBXQVJQIHBpcGVzIGFyZSBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9ucyB0aGV5IHBlcmZvcm0sIHdoZXJlOgotICoKLSAqICAgLSBUIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdGV4dHVyZSBzdGFnZSAwCi0gKiAgIC0gVDIgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBib3RoIHRleHR1cmUgc3RhZ2UgMCBhbmQgdGV4dHVyZSBzdGFnZSAxCi0gKiAgIC0gRyBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHRyaWFuZ2xlIGludGVuc2l0eSAoR291cmF1ZCBpbnRlcnBvbGF0aW9uKQotICogICAtIFogc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBaIGJ1ZmZlciBpbnRlcnBvbGF0aW9uCi0gKiAgIC0gUyBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHNwZWN1bGFyIGhpZ2hsaWdodAotICogICAtIEEgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB0aGUgYWxwaGEgY2hhbm5lbAotICogICAtIEYgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB2ZXJ0ZXggZm9nIGludGVycG9sYXRpb24KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6W10gPSB7Ci0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDk4LCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDgxLCAweDA0LAotCTB4ODksIDB4MDQsCi0JMHgwMSwgMHgwNCwKLQkweDA5LCAweDA0LAotCi0JMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDExLCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDQxLCAweENDLCAweDQxLCAweENELAotCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCi0KLQkweEQxLCAweDQxLCAweEMwLCAweEVDLAotCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCi0KLQkweDgwLCAweDA0LAotCTB4MTAsIDB4MDQsCi0JMHgwOCwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLQkweEQxLCAweDQ5LCAweEMwLCAweEVDLAotCi0JMHg4QSwgMHgxRiwgMHgyMCwgMHhFOSwKLQkweDhCLCAweDNGLCAweDIwLCAweEU5LAotCi0JMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLQkweDQ5LCAweDNDLCAweDQ5LCAweEFELAotCi0JMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLQkweDA4LCAweENDLCAweDA4LCAweENELAotCi0JMHhCOSwgMHg0MSwgMHg0OSwgMHhCQiwKLQkweDFGLCAweEYwLCAweDQxLCAweENELAotCi0JMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLQkweDAwLCAweDk4LCAweDgwLCAweEU5LAotCi0JMHg3MiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDFGLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDFELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKLQkweDM0LCAweDUzLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHgzMCwKLQkweDFELCAweDMwLAotCTB4NTgsIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQotCTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4NzIsCi0JMHgwOSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4NzIsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHg5NywgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLQkweDk4LCAweEUxLAotCTB4QjUsIDB4MDUsCi0KLQkweEJELCAweDA1LAotCTB4MkUsIDB4MzAsCi0JMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0JMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKLQotCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0JMHgzMiwgMHg2QSwKLQkweDJBLCAweDMwLAotCi0JMHgyMCwgMHg3MywKLQkweDMzLCAweDZBLAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHg3MywKLQotCTB4MUMsIDB4NzIsCi0JMHg4MywgMHhFMiwKLQkweDYwLCAweDgwLCAweDE1LCAweEVBLAotCi0JMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLQkweDMwLCAweDM1LCAweDIwLCAweERGLAotCi0JMHg0MCwgMHgzMCwKLQkweDAwLCAweEUwLAotCTB4Q0MsIDB4RTIsCi0JMHg2NCwgMHg3MiwKLQotCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKLQotCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0JMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKLQotCTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCi0JMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKLQotCTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDczLAotCi0JMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLQkweDMwLCAweDMwLCAweDQwLCAweEFGLAotCi0JMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLQkweDFELCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgyQywgMHgxRiwgMHgyQywgMHhERiwKLQkweDFBLCAweDMzLCAweDIwLCAweEU5LAotCi0JMHhCMCwgMHgxMCwKLQkweDA4LCAweEUzLAotCTB4NDAsIDB4MTAsCi0JMHhCOCwgMHgxMCwKLQotCTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCi0JMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKLQotCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4QTYsIDB4MjAsCi0JMHg4OCwgMHhFMiwKLQkweDAwLCAweEUwLAotCTB4QUYsIDB4MjAsCi0KLQkweDI4LCAweDJBLCAweDI2LCAweEFGLAotCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDFGLCAweDM0LCAweERGLAotCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCi0KLQkweDI4LCAweDMwLCAweDgwLCAweEJGLAotCTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCi0KLQkweDQ3LCAweDI0LCAweDQ3LCAweERGLAotCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCi0KLQkweDRGLCAweDJDLCAweDRGLCAweERGLAotCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCi0KLQkweDI4LCAweDE1LCAweDI4LCAweERGLAotCTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCi0KLQkweDU3LCAweDM0LCAweDU3LCAweERGLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHgwNSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4OSwgMHhFMiwKLQkweDJCLCAweDMwLAotCi0JMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg2OCwKLQkweEJGLCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIwLCAweEMwLCAweDIwLCAweEFGLAotCTB4MjgsIDB4MDUsCi0JMHg5NywgMHg3NCwKLQotCTB4MDAsIDB4RTAsCi0JMHgyQSwgMHgxMCwKLQkweDE2LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDhDLCAweEUyLAotCTB4OTUsIDB4MDUsCi0KLQkweDI4LCAweEMxLCAweDI4LCAweEFELAotCTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEE4LCAweDY3LAotCTB4OUYsIDB4NkIsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0JMHgxRCwgMHgyNSwKLQkweDIwLCAweDA1LAotCi0JMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLQkweDQwLCAweDJBLCAweDQwLCAweEJELAotCi0JMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDIwLCAweDMzLCAweDIwLCAweEFELAotCi0JMHgyMCwgMHg3MywKLQkweDAwLCAweEUwLAotCTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCi0KLQkweDI2LCAweDJGLCAweEIwLCAweEU4LAotCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDIwLCAweDM1LCAweERGLAotCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCi0KLQkweDE1LCAweDIwLCAweDE1LCAweERGLAotCTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCi0KLQkweDI2LCAweEQwLCAweDI2LCAweENELAotCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCi0KLQkweDI2LCAweDQwLCAweDgwLCAweEJELAotCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCi0KLQkweDNFLCAweDU0LCAweDU3LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg4MiwgMHhFMSwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjYsIDB4MzAsCi0JMHgyOSwgMHgzMCwKLQkweDQ4LCAweDNDLCAweDQ4LCAweEFELAotCi0JMHgyQiwgMHg3MiwKLQkweEMyLCAweEUxLAotCTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCi0KLQkweDA1LCAweDI0LCAweDM0LCAweEJGLAotCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCi0KLQkweDJELCAweDQ2LCAweDRFLCAweEJGLAotCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDIwLCAweDFELCAweDZGLCAweDhGLAotCTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHgzMCwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKLQotCTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCi0JMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKLQotCTB4MzMsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweDNFLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0KLQkweDg0LCAweDNFLCAweDU4LCAweEU5LAotCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDA1LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKLQotCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0JMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKLQotCTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKLQotCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0JMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKLQotCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0JMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKLQotCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCi0JMHgwOSwgMHhFMywKLQkweDNCLCAweDA1LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDNCLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4QUMsIDB4MjAsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI0LAotCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCi0KLQkweDI1LCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDAsIDB4RTAsCi0JMHhDOCwgMHgzMCwKLQotCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0JMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKLQotCTB4MDAsIDB4RTAsCi0JMHgyNSwgMHgyMCwKLQkweDM4LCAweDJDLCAweDRGLCAweEU5LAotCi0JMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKLQkweDM4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgyOCwgMHg3NCwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIwLAotCTB4MkQsIDB4MjAsCi0JMHg5QiwgMHgxMCwKLQotCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0JMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKLQotCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0JMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCi0JMHgzNCwgMHgyMCwKLQkweDJBLCAweDMwLAotCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCTB4MzIsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQotCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKLQotCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDZBLAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDM3LCAweDFFLCAweDRGLCAweEU5LAotCi0JMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLQkweDAwLCAweEUwLAotCTB4MzIsIDB4MDAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCi0KLQkweDM2LCAweDFGLCAweDRGLCAweEU5LAotCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCi0KLQkweDM3LCAweDFCLCAweDM3LCAweEJGLAotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0KLQkweDNFLCAweDE3LCAweDRGLCAweEU5LAotCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDM0LCAweDFGLCAweDM0LCAweEFGLAotCTB4MkIsIDB4MDUsCi0JMHhBNywgMHgyMCwKLQotCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0JMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDMsIDB4ODAsIDB4MEEsIDB4RUEsCi0JMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QjMsIDB4NjgsCi0JMHg5NywgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLQkweDNDLCAweDI3LCAweDRGLCAweEU5LAotCi0JMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKLQkweDI4LCAweDE5LCAweDYwLCAweEVDLAotCi0JMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKLQkweDFELCAweDNCLCAweDIwLCAweEU5LAotCi0JMHhCMywgMHgwNSwKLQkweDAwLCAweEUwLAotCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0KLQkweDIzLCAweDNCLCAweDMzLCAweEFELAotCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0KLQkweDFDLCAweDgwLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4OTAsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQotCTB4ODUsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNSwgMHgzMCwKLQkweDJELCAweDMwLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4ODQsIDB4RkYsIDB4MEEsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0JMHg0MiwgMHhFMSwKLQkweDAwLCAweEUwLAotCi0JMHg4MiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg3RiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6YVtdID0gewotCi0JMHgwMCwgMHg5OCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg4MSwgMHgwNCwKLQkweDg5LCAweDA0LAotCTB4MDEsIDB4MDQsCi0JMHgwOSwgMHgwNCwKLQotCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgxMSwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLQkweDQ5LCAweENDLCAweDQ5LCAweENELAotCi0JMHhEMSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDUxLCAweENDLCAweDUxLCAweENELAotCi0JMHg4MCwgMHgwNCwKLQkweDEwLCAweDA0LAotCTB4MDgsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4MDAsIDB4Q0MsIDB4QzAsIDB4Q0QsCi0JMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKLQotCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0JMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKLQotCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0JMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKLQotCTB4MTAsIDB4Q0MsIDB4MTAsIDB4Q0QsCi0JMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKLQotCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0JMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKLQotCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKLQotCTB4N0QsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0JMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4MzAsCi0JMHgxRCwgMHgzMCwKLQkweDU4LCAweEUzLAotCTB4MDAsIDB4RTAsCi0KLQkweEI1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDI0LCAweDQzLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDcyLAotCTB4MDksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDcyLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0JMHg5OCwgMHhFMSwKLQkweEI1LCAweDA1LAotCi0JMHhCRCwgMHgwNSwKLQkweDJFLCAweDMwLAotCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweEEwLCAweEU4LAotCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCi0KLQkweDQwLCAweDNDLCAweDQwLCAweEFELAotCTB4MzIsIDB4NkEsCi0JMHgyQSwgMHgzMCwKLQotCTB4MjAsIDB4NzMsCi0JMHgzMywgMHg2QSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4NzMsCi0KLQkweDFDLCAweDcyLAotCTB4ODMsIDB4RTIsCi0JMHg2QiwgMHg4MCwgMHgxNSwgMHhFQSwKLQotCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0JMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKLQotCTB4NDAsIDB4MzAsCi0JMHgwMCwgMHhFMCwKLQkweENDLCAweEUyLAotCTB4NjQsIDB4NzIsCi0KLQkweDI1LCAweDQyLCAweDUyLCAweEJGLAotCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCi0KLQkweDMwLCAweDJFLCAweDMwLCAweERGLAotCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCi0KLQkweDE4LCAweDFELCAweDQ1LCAweEU5LAotCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCi0KLQkweDJCLCAweDQ5LCAweDUxLCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHg3MywKLQotCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0JMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKLQotCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0JMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0JMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKLQotCTB4QjAsIDB4MTAsCi0JMHgwOCwgMHhFMywKLQkweDQwLCAweDEwLAotCTB4QjgsIDB4MTAsCi0KLQkweDI2LCAweEYwLCAweDMwLCAweENELAotCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCi0KLQkweDJCLCAweDgwLCAweDIwLCAweEU5LAotCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweEE2LCAweDIwLAotCTB4ODgsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLQkweDIwLCAweDJBLCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLQkweDQ2LCAweDI0LCAweDQ2LCAweERGLAotCi0JMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLQkweDIwLCAweDM4LCAweDgwLCAweEJGLAotCi0JMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLQkweDRFLCAweDJDLCAweDRFLCAweERGLAotCi0JMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLQkweDU2LCAweDM0LCAweDU2LCAweERGLAotCi0JMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLQkweDIwLCAweDFELCAweDIwLCAweERGLAotCi0JMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4MDUsCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4ODksIDB4RTIsCi0JMHgyQiwgMHgzMCwKLQotCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4NjgsCi0JMHhCRiwgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLQkweDI4LCAweDA1LAotCTB4OTcsIDB4NzQsCi0KLQkweDAwLCAweEUwLAotCTB4MkEsIDB4MTAsCi0JMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4QywgMHhFMiwKLQkweDk1LCAweDA1LAotCi0JMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLQkweDFGLCAweEMxLCAweDE1LCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBOCwgMHg2NywKLQkweDlGLCAweDZCLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI4LCAweEMwLCAweDI4LCAweEFELAotCTB4MUQsIDB4MjUsCi0JMHgyMCwgMHgwNSwKLQotCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0JMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKLQotCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKLQotCTB4MjAsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweEI2LCAweDQ5LCAweDUxLCAweEJCLAotCi0JMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLQkweDE5LCAweDIwLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLQkweDNELCAweDIwLCAweDNELCAweERGLAotCi0JMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLQkweDFELCAweDIwLCAweDFELCAweERGLAotCi0JMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLQkweDI5LCAweDQ5LCAweDJBLCAweEI4LAotCi0JMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLQkweDNCLCAweDQ4LCAweDUwLCAweEJELAotCi0JMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4ODIsIDB4RTEsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI2LCAweDMwLAotCTB4MjksIDB4MzAsCi0JMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKLQotCTB4MkIsIDB4NzIsCi0JMHhDMiwgMHhFMSwKLQkweDJDLCAweEMwLCAweDQ0LCAweEMyLAotCi0JMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLQkweDBELCAweDI0LCAweDJDLCAweEJGLAotCi0JMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDI1LCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDMyLCAweDNFLCAweDVGLCAweEU5LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4MzAsCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIyLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCi0KLQkweDE5LCAweEMwLCAweEIwLCAweEU4LAotCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCi0KLQkweDMzLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCi0JMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLQkweDI4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCi0KLQkweDlCLCAweDNCLCAweDMzLCAweERGLAotCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCi0KLQkweDMwLCAweDQyLCAweDU2LCAweDlGLAotCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCi0KLQkweDI4LCAweDI4LCAweDI0LCAweEFGLAotCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDA1LCAweDQ3LCAweDU3LCAweEJGLAotCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCi0KLQkweDg4LCAweDgwLCAweDU4LCAweEU5LAotCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCi0KLQkweDMwLCAweDFELCAweDZGLCAweDhGLAotCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDFDLCAweDMwLCAweDI2LCAweERGLAotCTB4MDksIDB4RTMsCi0JMHgzQiwgMHgwNSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweEFDLCAweDIwLAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDJDLCAweDFDLCAweEMwLCAweEFGLAotCi0JMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAwLCAweEUwLAotCTB4QzgsIDB4MzAsCi0KLQkweDMwLCAweDQ2LCAweDMwLCAweEFGLAotCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCi0KLQkweDAwLCAweEUwLAotCTB4MjUsIDB4MjAsCi0JMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKLQotCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MjgsIDB4NzQsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDQ0LCAweDRDLCAweEIwLAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDJELCAweDIwLAotCTB4OUIsIDB4MTAsCi0KLQkweDgyLCAweDNFLCAweDU3LCAweEU5LAotCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCi0KLQkweDFFLCAweEJELCAweDU5LCAweDlGLAotCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDQ3LCAweDM4LCAweEFGLAotCTB4MzQsIDB4MjAsCi0JMHgyQSwgMHgzMCwKLQotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQkweDMyLCAweDIwLAotCTB4MDUsIDB4MjAsCi0KLQkweDg3LCAweDgwLCAweDU3LCAweEU5LAotCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCi0KLQkweDE3LCAweDQyLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHg2QSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweDMyLCAweDAwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI3LCAweEMwLCAweDQ0LCAweEMwLAotCi0JMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDFGLCAweDI2LCAweERGLAotCi0JMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCi0JMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweDNGLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLQkweDJCLCAweDA1LAotCTB4QTcsIDB4MjAsCi0KLQkweDMzLCAweDJCLCAweDM3LCAweERGLAotCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI2LAotCTB4MjUsIDB4NDQsIDB4NTQsIDB4QjYsCi0KLQkweDAzLCAweDgwLCAweDJBLCAweEVBLAotCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCi0KLQkweDJELCAweDIwLAotCTB4MjUsIDB4MjAsCi0JMHgwNywgMHhDMCwgMHg0NCwgMHhDNiwKLQotCTB4QjMsIDB4NjgsCi0JMHg5NywgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLQkweDNDLCAweDI3LCAweDRGLCAweEU5LAotCi0JMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzRiwgMHgzRCwgMHg1RCwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MDcsIDB4MjAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjgsIDB4MTksIDB4NjAsIDB4RUMsCi0KLQkweEIzLCAweDA1LAotCTB4MDAsIDB4RTAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MUYsIDB4MjYsIDB4MUYsIDB4REYsCi0JMHg5RCwgMHgxRiwgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHg5RSwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MDcsIDB4MDcsIDB4MUYsIDB4QUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4OUMsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKLQotCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0JMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHg5MCwgMHhFMiwKLQkweDAwLCAweEUwLAotCi0JMHg3QSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDE5LCAweEM4LCAweEMxLCAweENELAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDJELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI1LCAweDMwLAotCTB4MkQsIDB4MzAsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg3OSwgMHhGRiwgMHgwQSwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKLQkweDQyLCAweEUxLAotCTB4MDAsIDB4RTAsCi0KLQkweDc3LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM4LCAweDQwLCAweEMwLCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDc0LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3phZltdID0gewotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg5OCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg4MSwgMHgwNCwKLQkweDg5LCAweDA0LAotCTB4MDEsIDB4MDQsCi0JMHgwOSwgMHgwNCwKLQotCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgxMSwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLQkweDQ5LCAweENDLCAweDQ5LCAweENELAotCi0JMHhEMSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDUxLCAweENDLCAweDUxLCAweENELAotCi0JMHg4MCwgMHgwNCwKLQkweDEwLCAweDA0LAotCTB4MDgsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4MDAsIDB4Q0MsIDB4QzAsIDB4Q0QsCi0JMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKLQotCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0JMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKLQotCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0JMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKLQotCTB4MTAsIDB4Q0MsIDB4MTAsIDB4Q0QsCi0JMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKLQotCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0JMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKLQotCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKLQotCTB4ODMsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKLQotCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0JMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKLQotCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0JMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4MzAsCi0JMHgxRCwgMHgzMCwKLQkweDU4LCAweEUzLAotCTB4MDAsIDB4RTAsCi0KLQkweEI1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDI0LCAweDQzLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDcyLAotCTB4MDksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDcyLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0JMHg5OCwgMHhFMSwKLQkweEI1LCAweDA1LAotCi0JMHhCRCwgMHgwNSwKLQkweDJFLCAweDMwLAotCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweEEwLCAweEU4LAotCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCi0KLQkweDQwLCAweDNDLCAweDQwLCAweEFELAotCTB4MzIsIDB4NkEsCi0JMHgyQSwgMHgzMCwKLQotCTB4MjAsIDB4NzMsCi0JMHgzMywgMHg2QSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4NzMsCi0KLQkweDFDLCAweDcyLAotCTB4ODMsIDB4RTIsCi0JMHg2RiwgMHg4MCwgMHgxNSwgMHhFQSwKLQotCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0JMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKLQotCTB4NDAsIDB4MzAsCi0JMHgwMCwgMHhFMCwKLQkweENDLCAweEUyLAotCTB4NjQsIDB4NzIsCi0KLQkweDI1LCAweDQyLCAweDUyLCAweEJGLAotCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCi0KLQkweDMwLCAweDJFLCAweDMwLCAweERGLAotCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCi0KLQkweDE4LCAweDFELCAweDQ1LCAweEU5LAotCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCi0KLQkweDJCLCAweDQ5LCAweDUxLCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHg3MywKLQotCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0JMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKLQotCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0JMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0JMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKLQotCTB4QjAsIDB4MTAsCi0JMHgwOCwgMHhFMywKLQkweDQwLCAweDEwLAotCTB4QjgsIDB4MTAsCi0KLQkweDI2LCAweEYwLCAweDMwLCAweENELAotCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCi0KLQkweDJCLCAweDgwLCAweDIwLCAweEU5LAotCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweEE2LCAweDIwLAotCTB4ODgsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLQkweDIwLCAweDJBLCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLQkweDQ2LCAweDI0LCAweDQ2LCAweERGLAotCi0JMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLQkweDIwLCAweDM4LCAweDgwLCAweEJGLAotCi0JMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLQkweDRFLCAweDJDLCAweDRFLCAweERGLAotCi0JMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLQkweDU2LCAweDM0LCAweDU2LCAweERGLAotCi0JMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLQkweDIwLCAweDFELCAweDIwLCAweERGLAotCi0JMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4MDUsCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4ODksIDB4RTIsCi0JMHgyQiwgMHgzMCwKLQotCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4NjgsCi0JMHhCRiwgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLQkweDI4LCAweDA1LAotCTB4OTcsIDB4NzQsCi0KLQkweDAwLCAweEUwLAotCTB4MkEsIDB4MTAsCi0JMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4QywgMHhFMiwKLQkweDk1LCAweDA1LAotCi0JMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLQkweDFGLCAweEMxLCAweDE1LCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBOCwgMHg2NywKLQkweDlGLCAweDZCLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI4LCAweEMwLCAweDI4LCAweEFELAotCTB4MUQsIDB4MjUsCi0JMHgyMCwgMHgwNSwKLQotCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0JMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKLQotCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKLQotCTB4MjAsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweEI2LCAweDQ5LCAweDUxLCAweEJCLAotCi0JMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLQkweDE5LCAweDIwLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLQkweDNELCAweDIwLCAweDNELCAweERGLAotCi0JMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLQkweDFELCAweDIwLCAweDFELCAweERGLAotCi0JMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLQkweDI5LCAweDQ5LCAweDJBLCAweEI4LAotCi0JMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLQkweDNCLCAweDQ4LCAweDUwLCAweEJELAotCi0JMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4ODIsIDB4RTEsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI2LCAweDMwLAotCTB4MjksIDB4MzAsCi0JMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKLQotCTB4MkIsIDB4NzIsCi0JMHhDMiwgMHhFMSwKLQkweDJDLCAweEMwLCAweDQ0LCAweEMyLAotCi0JMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLQkweDBELCAweDI0LCAweDJDLCAweEJGLAotCi0JMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDI1LCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDMyLCAweDNFLCAweDVGLCAweEU5LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4MzAsCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIyLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCi0KLQkweDE5LCAweEMwLCAweEIwLCAweEU4LAotCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCi0KLQkweDMzLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCi0JMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLQkweDI4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCi0KLQkweDlCLCAweDNCLCAweDMzLCAweERGLAotCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCi0KLQkweDMwLCAweDQyLCAweDU2LCAweDlGLAotCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCi0KLQkweDI4LCAweDI4LCAweDI0LCAweEFGLAotCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDA1LCAweDQ3LCAweDU3LCAweEJGLAotCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCi0KLQkweDg4LCAweDgwLCAweDU4LCAweEU5LAotCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCi0KLQkweDMwLCAweDFELCAweDZGLCAweDhGLAotCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDFDLCAweDMwLCAweDI2LCAweERGLAotCTB4MDksIDB4RTMsCi0JMHgzQiwgMHgwNSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweEFDLCAweDIwLAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDJDLCAweDFDLCAweEMwLCAweEFGLAotCi0JMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAwLCAweEUwLAotCTB4QzgsIDB4MzAsCi0KLQkweDMwLCAweDQ2LCAweDMwLCAweEFGLAotCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCi0KLQkweDAwLCAweEUwLAotCTB4MjUsIDB4MjAsCi0JMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKLQotCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MjgsIDB4NzQsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDQ0LCAweDRDLCAweEIwLAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDJELCAweDIwLAotCTB4OUIsIDB4MTAsCi0KLQkweDgyLCAweDNFLCAweDU3LCAweEU5LAotCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCi0KLQkweDFFLCAweEJELCAweDU5LCAweDlGLAotCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDQ3LCAweDM4LCAweEFGLAotCTB4MzQsIDB4MjAsCi0JMHgyQSwgMHgzMCwKLQotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQkweDMyLCAweDIwLAotCTB4MDUsIDB4MjAsCi0KLQkweDg3LCAweDgwLCAweDU3LCAweEU5LAotCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCi0KLQkweDE3LCAweDQyLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHg2QSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweDMyLCAweDAwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI3LCAweEMwLCAweDQ0LCAweEMwLAotCi0JMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDFGLCAweDI2LCAweERGLAotCi0JMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCi0JMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweDNGLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLQkweDJCLCAweDA1LAotCTB4QTcsIDB4MjAsCi0KLQkweDMzLCAweDJCLCAweDM3LCAweERGLAotCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBELCAweDIxLCAweDFBLCAweEI2LAotCTB4MDUsIDB4MjEsIDB4MzEsIDB4QjYsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI2LAotCTB4MjUsIDB4NDQsIDB4NTQsIDB4QjYsCi0KLQkweDAzLCAweDgwLCAweDJBLCAweEVBLAotCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCi0KLQkweDBELCAweDIwLAotCTB4MDUsIDB4MjAsCi0JMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKLQotCTB4QjMsIDB4NjgsCi0JMHg5NywgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLQkweDNDLCAweDI3LCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHhFMCwKLQkweDI1LCAweDIwLAotCTB4MDcsIDB4QzAsIDB4NDQsIDB4QzYsCi0KLQkweDE3LCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHgyMCwKLQotCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDJGLCAweDIwLAotCi0JMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MDcsIDB4MjAsCi0KLQkweDNGLCAweDNELCAweDVELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjgsIDB4MTksIDB4NjAsIDB4RUMsCi0KLQkweEIzLCAweDA1LAotCTB4MDAsIDB4RTAsCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQotCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0JMHgzNSwgMHgxNywgMHg0RiwgMHhFOSwKLQotCTB4MUYsIDB4MjYsIDB4MUYsIDB4REYsCi0JMHg5RCwgMHgxRiwgMHg0RiwgMHhFOSwKLQotCTB4OUUsIDB4M0YsIDB4NEYsIDB4RTksCi0JMHgzOSwgMHgzNywgMHg0RiwgMHhFOSwKLQotCTB4MkYsIDB4MkYsIDB4MTcsIDB4QUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDcsIDB4MDcsIDB4MUYsIDB4QUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzEsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4OUMsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKLQotCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0JMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHg5MCwgMHhFMiwKLQkweDAwLCAweEUwLAotCi0JMHg3NCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDE5LCAweEM4LCAweEMxLCAweENELAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDJELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI1LCAweDMwLAotCTB4MkQsIDB4MzAsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg3MywgMHhGRiwgMHgwQSwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKLQkweDQyLCAweEUxLAotCTB4MDAsIDB4RTAsCi0KLQkweDcxLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM4LCAweDQwLCAweEMwLCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDZFLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3pmW10gPSB7Ci0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDk4LCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDgxLCAweDA0LAotCTB4ODksIDB4MDQsCi0JMHgwMSwgMHgwNCwKLQkweDA5LCAweDA0LAotCi0JMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDExLCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDQxLCAweENDLCAweDQxLCAweENELAotCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCi0KLQkweEQxLCAweDQxLCAweEMwLCAweEVDLAotCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCi0KLQkweDgwLCAweDA0LAotCTB4MTAsIDB4MDQsCi0JMHgwOCwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLQkweEQxLCAweDQ5LCAweEMwLCAweEVDLAotCi0JMHg4QSwgMHgxRiwgMHgyMCwgMHhFOSwKLQkweDhCLCAweDNGLCAweDIwLCAweEU5LAotCi0JMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLQkweDQ5LCAweDNDLCAweDQ5LCAweEFELAotCi0JMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLQkweDA4LCAweENDLCAweDA4LCAweENELAotCi0JMHhCOSwgMHg0MSwgMHg0OSwgMHhCQiwKLQkweDFGLCAweEYwLCAweDQxLCAweENELAotCi0JMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLQkweDAwLCAweDk4LCAweDgwLCAweEU5LAotCi0JMHg3RiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDFGLCAweDIwLCAweEU5LAotCi0JMHgyMSwgMHg0NSwgMHg4MCwgMHhFOCwKLQkweDFBLCAweDRELCAweDgwLCAweEU4LAotCi0JMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDFELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKLQkweDM0LCAweDUzLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHgzMCwKLQkweDFELCAweDMwLAotCTB4NTgsIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQotCTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4NzIsCi0JMHgwOSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4NzIsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHg5NywgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLQkweDk4LCAweEUxLAotCTB4QjUsIDB4MDUsCi0KLQkweEJELCAweDA1LAotCTB4MkUsIDB4MzAsCi0JMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0JMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKLQotCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0JMHgzMiwgMHg2QSwKLQkweDJBLCAweDMwLAotCi0JMHgyMCwgMHg3MywKLQkweDMzLCAweDZBLAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHg3MywKLQotCTB4MUMsIDB4NzIsCi0JMHg4MywgMHhFMiwKLQkweDZCLCAweDgwLCAweDE1LCAweEVBLAotCi0JMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLQkweDMwLCAweDM1LCAweDIwLCAweERGLAotCi0JMHg0MCwgMHgzMCwKLQkweDAwLCAweEUwLAotCTB4Q0MsIDB4RTIsCi0JMHg2NCwgMHg3MiwKLQotCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKLQotCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0JMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKLQotCTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCi0JMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKLQotCTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDczLAotCi0JMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLQkweDMwLCAweDMwLCAweDQwLCAweEFGLAotCi0JMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLQkweDFELCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgyQywgMHgxRiwgMHgyQywgMHhERiwKLQkweDFBLCAweDMzLCAweDIwLCAweEU5LAotCi0JMHhCMCwgMHgxMCwKLQkweDA4LCAweEUzLAotCTB4NDAsIDB4MTAsCi0JMHhCOCwgMHgxMCwKLQotCTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCi0JMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKLQotCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4QTYsIDB4MjAsCi0JMHg4OCwgMHhFMiwKLQkweDAwLCAweEUwLAotCTB4QUYsIDB4MjAsCi0KLQkweDI4LCAweDJBLCAweDI2LCAweEFGLAotCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDFGLCAweDM0LCAweERGLAotCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCi0KLQkweDI4LCAweDMwLCAweDgwLCAweEJGLAotCTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCi0KLQkweDQ3LCAweDI0LCAweDQ3LCAweERGLAotCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCi0KLQkweDRGLCAweDJDLCAweDRGLCAweERGLAotCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCi0KLQkweDI4LCAweDE1LCAweDI4LCAweERGLAotCTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCi0KLQkweDU3LCAweDM0LCAweDU3LCAweERGLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHgwNSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4OSwgMHhFMiwKLQkweDJCLCAweDMwLAotCi0JMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg2OCwKLQkweEJGLCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIwLCAweEMwLCAweDIwLCAweEFGLAotCTB4MjgsIDB4MDUsCi0JMHg5NywgMHg3NCwKLQotCTB4MDAsIDB4RTAsCi0JMHgyQSwgMHgxMCwKLQkweDE2LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDhDLCAweEUyLAotCTB4OTUsIDB4MDUsCi0KLQkweDI4LCAweEMxLCAweDI4LCAweEFELAotCTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEE4LCAweDY3LAotCTB4OUYsIDB4NkIsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0JMHgxRCwgMHgyNSwKLQkweDIwLCAweDA1LAotCi0JMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLQkweDQwLCAweDJBLCAweDQwLCAweEJELAotCi0JMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDIwLCAweDMzLCAweDIwLCAweEFELAotCi0JMHgyMCwgMHg3MywKLQkweDAwLCAweEUwLAotCTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCi0KLQkweDI2LCAweDJGLCAweEIwLCAweEU4LAotCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDIwLCAweDM1LCAweERGLAotCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCi0KLQkweDE1LCAweDIwLCAweDE1LCAweERGLAotCTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCi0KLQkweDI2LCAweEQwLCAweDI2LCAweENELAotCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCi0KLQkweDI2LCAweDQwLCAweDgwLCAweEJELAotCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCi0KLQkweDNFLCAweDU0LCAweDU3LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg4MiwgMHhFMSwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjYsIDB4MzAsCi0JMHgyOSwgMHgzMCwKLQkweDQ4LCAweDNDLCAweDQ4LCAweEFELAotCi0JMHgyQiwgMHg3MiwKLQkweEMyLCAweEUxLAotCTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCi0KLQkweDA1LCAweDI0LCAweDM0LCAweEJGLAotCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCi0KLQkweDJELCAweDQ2LCAweDRFLCAweEJGLAotCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDIwLCAweDFELCAweDZGLCAweDhGLAotCTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHgzMCwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKLQotCTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCi0JMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKLQotCTB4MzMsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweDNFLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0KLQkweDg0LCAweDNFLCAweDU4LCAweEU5LAotCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDA1LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKLQotCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0JMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKLQotCTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKLQotCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0JMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKLQotCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0JMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKLQotCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCi0JMHgwOSwgMHhFMywKLQkweDNCLCAweDA1LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDNCLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4QUMsIDB4MjAsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI0LAotCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCi0KLQkweDI1LCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDAsIDB4RTAsCi0JMHhDOCwgMHgzMCwKLQotCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0JMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKLQotCTB4MDAsIDB4RTAsCi0JMHgyNSwgMHgyMCwKLQkweDM4LCAweDJDLCAweDRGLCAweEU5LAotCi0JMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKLQkweDM4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgyOCwgMHg3NCwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIwLAotCTB4MkQsIDB4MjAsCi0JMHg5QiwgMHgxMCwKLQotCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0JMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKLQotCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0JMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCi0JMHgzNCwgMHgyMCwKLQkweDJBLCAweDMwLAotCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCTB4MzIsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQotCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKLQotCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDZBLAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDM3LCAweDFFLCAweDRGLCAweEU5LAotCi0JMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLQkweDAwLCAweEUwLAotCTB4MzIsIDB4MDAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCi0KLQkweDM2LCAweDFGLCAweDRGLCAweEU5LAotCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCi0KLQkweDM3LCAweDFCLCAweDM3LCAweEJGLAotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0KLQkweDNFLCAweDE3LCAweDRGLCAweEU5LAotCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDM0LCAweDFGLCAweDM0LCAweEFGLAotCTB4MkIsIDB4MDUsCi0JMHhBNywgMHgyMCwKLQotCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0JMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjYsCi0JMHgwNSwgMHgyMSwgMHgzMSwgMHhCNiwKLQotCTB4MDMsIDB4ODAsIDB4MkEsIDB4RUEsCi0JMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKLQotCTB4MEQsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQkweDJGLCAweEMwLCAweDIxLCAweEM2LAotCi0JMHhCMywgMHg2OCwKLQkweDk3LCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweDMzLCAweEFGLAotCTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCi0KLQkweDE3LCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDM3LCAweDBGLCAweDVDLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgyRiwgMHgyMCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKLQotCTB4QjMsIDB4MDUsCi0JMHgwMCwgMHhFMCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQkweDM1LCAweDE3LCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDM5LCAweDM3LCAweDRGLCAweEU5LAotCi0JMHgyRiwgMHgyRiwgMHgxNywgMHhBRiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMSwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDU3LCAweDM5LCAweDIwLCAweEU5LAotCi0JMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDNCLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKLQkweDJCLCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLQkweDU3LCAweDM2LCAweDIwLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDkwLCAweEUyLAotCTB4MDAsIDB4RTAsCi0KLQkweDc4LCAweEZGLCAweDIwLCAweEVBLAotCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDlGLCAweDQxLCAweDQ5LCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDBELCAweDgwLCAweDA3LCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDM1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjUsIDB4MzAsCi0JMHgyRCwgMHgzMCwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweEE3LCAweDVCLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDc3LCAweEZGLCAweDBBLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM5LCAweDQxLCAweEM4LCAweEVDLAotCTB4NDIsIDB4RTEsCi0JMHgwMCwgMHhFMCwKLQotCTB4NzUsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NzIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RnenNbXSA9IHsKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4ODEsIDB4MDQsCi0JMHg4OSwgMHgwNCwKLQkweDAxLCAweDA0LAotCTB4MDksIDB4MDQsCi0KLQkweEM5LCAweDQxLCAweEMwLCAweEVDLAotCTB4MTEsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4NDEsIDB4Q0MsIDB4NDEsIDB4Q0QsCi0JMHg0OSwgMHhDQywgMHg0OSwgMHhDRCwKLQotCTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKLQotCTB4ODAsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQkweDA4LCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDAwLCAweENDLCAweEMwLCAweENELAotCTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCi0KLQkweDhBLCAweDFGLCAweDIwLCAweEU5LAotCTB4OEIsIDB4M0YsIDB4MjAsIDB4RTksCi0KLQkweDQxLCAweDNDLCAweDQxLCAweEFELAotCTB4NDksIDB4M0MsIDB4NDksIDB4QUQsCi0KLQkweDEwLCAweENDLCAweDEwLCAweENELAotCTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCi0KLQkweEI5LCAweDQxLCAweDQ5LCAweEJCLAotCTB4MUYsIDB4RjAsIDB4NDEsIDB4Q0QsCi0KLQkweDUxLCAweDNDLCAweDUxLCAweEFELAotCTB4MDAsIDB4OTgsIDB4ODAsIDB4RTksCi0KLQkweDhCLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCi0KLQkweDIxLCAweDQ1LCAweDgwLCAweEU4LAotCTB4MUEsIDB4NEQsIDB4ODAsIDB4RTgsCi0KLQkweDMxLCAweDU1LCAweDgwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDJFLCAweDQxLCAweDJBLCAweEI4LAotCTB4MzQsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDMwLAotCTB4MUQsIDB4MzAsCi0JMHg1OCwgMHhFMywKLQkweDAwLCAweEUwLAotCi0JMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgyNCwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHg3MiwKLQkweDA5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHg3MiwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweDk3LCAweDU3LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDZDLCAweDY0LCAweEM4LCAweEVDLAotCTB4OTgsIDB4RTEsCi0JMHhCNSwgMHgwNSwKLQotCTB4QkQsIDB4MDUsCi0JMHgyRSwgMHgzMCwKLQkweDMyLCAweEMwLCAweEEwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHhBMCwgMHhFOCwKLQkweDc0LCAweDY0LCAweEM4LCAweEVDLAotCi0JMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKLQkweDMyLCAweDZBLAotCTB4MkEsIDB4MzAsCi0KLQkweDIwLCAweDczLAotCTB4MzMsIDB4NkEsCi0JMHgwMCwgMHhFMCwKLQkweDI4LCAweDczLAotCi0JMHgxQywgMHg3MiwKLQkweDgzLCAweEUyLAotCTB4NzcsIDB4ODAsIDB4MTUsIDB4RUEsCi0KLQkweEI4LCAweDNELCAweDI4LCAweERGLAotCTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCi0KLQkweDQwLCAweDMwLAotCTB4MDAsIDB4RTAsCi0JMHhDQywgMHhFMiwKLQkweDY0LCAweDcyLAotCi0JMHgyNSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDJELCAweDQyLCAweDRBLCAweEJGLAotCi0JMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKLQkweDM4LCAweDJFLCAweDM4LCAweERGLAotCi0JMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKLQkweDFFLCAweDE1LCAweDQ1LCAweEU5LAotCi0JMHgyQiwgMHg0OSwgMHg1MSwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4MUYsIDB4NzMsCi0KLQkweDM4LCAweDM4LCAweDQwLCAweEFGLAotCTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCi0KLQkweDI0LCAweDFGLCAweDI0LCAweERGLAotCTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCi0KLQkweDJDLCAweDFGLCAweDJDLCAweERGLAotCTB4MUEsIDB4MzMsIDB4MjAsIDB4RTksCi0KLQkweEIwLCAweDEwLAotCTB4MDgsIDB4RTMsCi0JMHg0MCwgMHgxMCwKLQkweEI4LCAweDEwLAotCi0JMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKLQkweDJGLCAweEYwLCAweDM4LCAweENELAotCi0JMHgyQiwgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDJBLCAweDgwLCAweDIwLCAweEU5LAotCi0JMHhBNiwgMHgyMCwKLQkweDg4LCAweEUyLAotCTB4MDAsIDB4RTAsCi0JMHhBRiwgMHgyMCwKLQotCTB4MjgsIDB4MkEsIDB4MjYsIDB4QUYsCi0JMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCi0JMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKLQotCTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCi0JMHgyMCwgMHgzOCwgMHg4MCwgMHhCRiwKLQotCTB4NDcsIDB4MjQsIDB4NDcsIDB4REYsCi0JMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKLQotCTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCi0JMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKLQotCTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCi0JMHgyMCwgMHgxRCwgMHgyMCwgMHhERiwKLQotCTB4NTcsIDB4MzQsIDB4NTcsIDB4REYsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDA1LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDg5LCAweEUyLAotCTB4MkIsIDB4MzAsCi0KLQkweDNGLCAweEMxLCAweDFELCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEEwLCAweDY4LAotCTB4QkYsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCi0JMHgyOCwgMHgwNSwKLQkweDk3LCAweDc0LAotCi0JMHgwMCwgMHhFMCwKLQkweDJBLCAweDEwLAotCTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4OEMsIDB4RTIsCi0JMHg5NSwgMHgwNSwKLQotCTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCi0JMHgxRiwgMHhDMSwgMHgxNSwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTgsIDB4NjcsCi0JMHg5RiwgMHg2QiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKLQkweDFELCAweDI1LAotCTB4MjAsIDB4MDUsCi0KLQkweDI4LCAweDMyLCAweDgwLCAweEFELAotCTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCi0KLQkweDFDLCAweDgwLCAweDIwLCAweEU5LAotCTB4MjAsIDB4MzMsIDB4MjAsIDB4QUQsCi0KLQkweDIwLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKLQotCTB4MjYsIDB4MkYsIDB4QjAsIDB4RTgsCi0JMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCi0JMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKLQotCTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCi0JMHgxRCwgMHgyMCwgMHgxRCwgMHhERiwKLQotCTB4MjYsIDB4RDAsIDB4MjYsIDB4Q0QsCi0JMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKLQotCTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCi0JMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKLQotCTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDgyLCAweEUxLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNiwgMHgzMCwKLQkweDI5LCAweDMwLAotCTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCi0KLQkweDJCLCAweDcyLAotCTB4QzIsIDB4RTEsCi0JMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKLQotCTB4MDUsIDB4MjQsIDB4MzQsIDB4QkYsCi0JMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKLQotCTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzMiwgMHgzRSwgMHg1RiwgMHhFOSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDMwLAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDMzLCAweDFFLCAweDVGLCAweEU5LAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDBELCAweDQ0LCAweDRDLCAweEIyLAotCi0JMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKLQkweDM0LCAweEMwLCAweDQ0LCAweEM0LAotCi0JMHgzMywgMHg3MywKLQkweDAwLCAweEUwLAotCTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQotCTB4ODQsIDB4M0UsIDB4NTgsIDB4RTksCi0JMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MDUsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweDg1LCAweDFFLCAweDU4LCAweEU5LAotCi0JMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKLQkweDIwLCAweDIwLCAweDQyLCAweEFGLAotCi0JMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKLQkweDgwLCAweDNFLCAweDU3LCAweEU5LAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDMwLCAweDgwLCAweDVGLCAweEU5LAotCi0JMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKLQkweDgxLCAweDFFLCAweDU3LCAweEU5LAotCi0JMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDBELCAweDQ3LCAweDRGLCAweEJGLAotCi0JMHg4OCwgMHg4MCwgMHg1OCwgMHhFOSwKLQkweDFCLCAweDI5LCAweDFCLCAweERGLAotCi0JMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDNBLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKLQkweDA5LCAweEUzLAotCTB4M0IsIDB4MDUsCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4M0IsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHhBQywgMHgyMCwKLQotCTB4MkQsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKLQotCTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgwMCwgMHhFMCwKLQkweEM4LCAweDMwLAotCi0JMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKLQkweDFCLCAweDFCLCAweDQ4LCAweEFGLAotCi0JMHgwMCwgMHhFMCwKLQkweDI1LCAweDIwLAotCTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCi0KLQkweDg2LCAweDgwLCAweDU3LCAweEU5LAotCTB4MzgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDI4LCAweDc0LAotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjAsCi0JMHgyRCwgMHgyMCwKLQkweDlCLCAweDEwLAotCi0JMHg4MiwgMHgzRSwgMHg1NywgMHhFOSwKLQkweDMyLCAweEYwLCAweDFCLCAweENELAotCi0JMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKLQkweDgzLCAweDFFLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKLQkweDM0LCAweDIwLAotCTB4MkEsIDB4MzAsCi0KLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0JMHgzMiwgMHgyMCwKLQkweDA1LCAweDIwLAotCi0JMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKLQkweDFGLCAweDU0LCAweDU3LCAweDlGLAotCi0JMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4NkEsCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzcsIDB4MUUsIDB4NEYsIDB4RTksCi0KLQkweDM3LCAweDMyLCAweDJBLCAweEFGLAotCTB4MDAsIDB4RTAsCi0JMHgzMiwgMHgwMCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKLQotCTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCi0JMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKLQotCTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQotCTB4M0UsIDB4MTcsIDB4NEYsIDB4RTksCi0JMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCi0JMHgyQiwgMHgwNSwKLQkweEE3LCAweDIwLAotCi0JMHgzMywgMHgyQiwgMHgzNywgMHhERiwKLQkweDI3LCAweDE3LCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyRCwgMHgyMSwgMHgxQSwgMHhCMCwKLQkweDI1LCAweDIxLCAweDMxLCAweEIwLAotCi0JMHgwRCwgMHgyMSwgMHgxQSwgMHhCMiwKLQkweDA1LCAweDIxLCAweDMxLCAweEIyLAotCi0JMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKLQkweDE3LCAweEMxLCAweDJCLCAweEJELAotCi0JMHgyRCwgMHgyMCwKLQkweDI1LCAweDIwLAotCTB4MDUsIDB4MjAsCi0JMHgwRCwgMHgyMCwKLQotCTB4QjMsIDB4NjgsCi0JMHg5NywgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLQkweDJGLCAweEMwLCAweDIxLCAweEMwLAotCi0JMHgxNiwgMHg0MiwgMHg1NiwgMHg5RiwKLQkweDNDLCAweDI3LCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNSwgMHgyMSwgMHgzMSwgMHhCNCwKLQkweDJELCAweDIxLCAweDFBLCAweEI0LAotCi0JMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMywgMHgwNSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4MTksIDB4NjAsIDB4RUMsCi0KLQkweDM3LCAweDBGLCAweDVDLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgyRiwgMHgyMCwKLQotCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0JMHgxRSwgMHgyNiwgMHgxRSwgMHhERiwKLQotCTB4QTcsIDB4MUUsIDB4NEYsIDB4RTksCi0JMHgxNywgMHgyNiwgMHgxNiwgMHhERiwKLQotCTB4MkQsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweEE4LCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgyRiwgMHgyRiwgMHgxRSwgMHhBRiwKLQkweDI1LCAweDIwLAotCTB4MDAsIDB4RTAsCi0KLQkweEE0LCAweDE2LCAweDRGLCAweEU5LAotCTB4MEYsIDB4QzAsIDB4MjEsIDB4QzIsCi0KLQkweEE2LCAweDgwLCAweDRGLCAweEU5LAotCTB4MUYsIDB4NjIsIDB4NTcsIDB4OUYsCi0KLQkweDNGLCAweDJGLCAweDVELCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg4RiwgMHgyMCwKLQotCTB4QTUsIDB4MzcsIDB4NEYsIDB4RTksCi0JMHgwRiwgMHgxNywgMHgwRiwgMHhBRiwKLQotCTB4MDYsIDB4QzAsIDB4MjEsIDB4QzQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHhBMywgMHg4MCwgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDI2LCAweDFGLCAweERGLAotCi0JMHhBMSwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweEEyLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwNiwgMHgwNiwgMHgxRiwgMHhBRiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDU3LCAweDM5LCAweDIwLCAweEU5LAotCi0JMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDNCLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKLQkweDJCLCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLQkweDU3LCAweDM2LCAweDIwLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDkwLCAweEUyLAotCTB4MDAsIDB4RTAsCi0KLQkweDZDLCAweEZGLCAweDIwLCAweEVBLAotCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDlGLCAweDQxLCAweDQ5LCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDBELCAweDgwLCAweDA3LCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDM1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjUsIDB4MzAsCi0JMHgyRCwgMHgzMCwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweEE3LCAweDVCLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDZCLCAweEZGLCAweDBBLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM5LCAweDQxLCAweEM4LCAweEVDLAotCTB4NDIsIDB4RTEsCi0JMHgwMCwgMHhFMCwKLQotCTB4NjksIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjYsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RnenNhW10gPSB7Ci0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDk4LCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDgxLCAweDA0LAotCTB4ODksIDB4MDQsCi0JMHgwMSwgMHgwNCwKLQkweDA5LCAweDA0LAotCi0JMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDExLCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDQxLCAweENDLCAweDQxLCAweENELAotCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCi0KLQkweEQxLCAweDQxLCAweEMwLCAweEVDLAotCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCi0KLQkweDgwLCAweDA0LAotCTB4MTAsIDB4MDQsCi0JMHgwOCwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLQkweEQxLCAweDQ5LCAweEMwLCAweEVDLAotCi0JMHg4QSwgMHgxRiwgMHgyMCwgMHhFOSwKLQkweDhCLCAweDNGLCAweDIwLCAweEU5LAotCi0JMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLQkweDQ5LCAweDNDLCAweDQ5LCAweEFELAotCi0JMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLQkweDA4LCAweENDLCAweDA4LCAweENELAotCi0JMHhCOSwgMHg0MSwgMHg0OSwgMHhCQiwKLQkweDFGLCAweEYwLCAweDQxLCAweENELAotCi0JMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLQkweDAwLCAweDk4LCAweDgwLCAweEU5LAotCi0JMHg4RiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDFGLCAweDIwLCAweEU5LAotCi0JMHgyMSwgMHg0NSwgMHg4MCwgMHhFOCwKLQkweDFBLCAweDRELCAweDgwLCAweEU4LAotCi0JMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDFELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKLQkweDM0LCAweDUzLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHgzMCwKLQkweDFELCAweDMwLAotCTB4NTgsIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQotCTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4NzIsCi0JMHgwOSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4NzIsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHg5NywgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLQkweDk4LCAweEUxLAotCTB4QjUsIDB4MDUsCi0KLQkweEJELCAweDA1LAotCTB4MkUsIDB4MzAsCi0JMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0JMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKLQotCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0JMHgzMiwgMHg2QSwKLQkweDJBLCAweDMwLAotCi0JMHgyMCwgMHg3MywKLQkweDMzLCAweDZBLAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHg3MywKLQotCTB4MUMsIDB4NzIsCi0JMHg4MywgMHhFMiwKLQkweDdCLCAweDgwLCAweDE1LCAweEVBLAotCi0JMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLQkweDMwLCAweDM1LCAweDIwLCAweERGLAotCi0JMHg0MCwgMHgzMCwKLQkweDAwLCAweEUwLAotCTB4Q0MsIDB4RTIsCi0JMHg2NCwgMHg3MiwKLQotCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKLQotCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0JMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKLQotCTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCi0JMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKLQotCTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDczLAotCi0JMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLQkweDMwLCAweDMwLCAweDQwLCAweEFGLAotCi0JMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLQkweDFELCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgyQywgMHgxRiwgMHgyQywgMHhERiwKLQkweDFBLCAweDMzLCAweDIwLCAweEU5LAotCi0JMHhCMCwgMHgxMCwKLQkweDA4LCAweEUzLAotCTB4NDAsIDB4MTAsCi0JMHhCOCwgMHgxMCwKLQotCTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCi0JMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKLQotCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4QTYsIDB4MjAsCi0JMHg4OCwgMHhFMiwKLQkweDAwLCAweEUwLAotCTB4QUYsIDB4MjAsCi0KLQkweDI4LCAweDJBLCAweDI2LCAweEFGLAotCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDFGLCAweDM0LCAweERGLAotCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCi0KLQkweDI4LCAweDMwLCAweDgwLCAweEJGLAotCTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCi0KLQkweDQ3LCAweDI0LCAweDQ3LCAweERGLAotCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCi0KLQkweDRGLCAweDJDLCAweDRGLCAweERGLAotCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCi0KLQkweDI4LCAweDE1LCAweDI4LCAweERGLAotCTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCi0KLQkweDU3LCAweDM0LCAweDU3LCAweERGLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHgwNSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4OSwgMHhFMiwKLQkweDJCLCAweDMwLAotCi0JMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg2OCwKLQkweEJGLCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIwLCAweEMwLCAweDIwLCAweEFGLAotCTB4MjgsIDB4MDUsCi0JMHg5NywgMHg3NCwKLQotCTB4MDAsIDB4RTAsCi0JMHgyQSwgMHgxMCwKLQkweDE2LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDhDLCAweEUyLAotCTB4OTUsIDB4MDUsCi0KLQkweDI4LCAweEMxLCAweDI4LCAweEFELAotCTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEE4LCAweDY3LAotCTB4OUYsIDB4NkIsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0JMHgxRCwgMHgyNSwKLQkweDIwLCAweDA1LAotCi0JMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLQkweDQwLCAweDJBLCAweDQwLCAweEJELAotCi0JMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDIwLCAweDMzLCAweDIwLCAweEFELAotCi0JMHgyMCwgMHg3MywKLQkweDAwLCAweEUwLAotCTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCi0KLQkweDI2LCAweDJGLCAweEIwLCAweEU4LAotCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDIwLCAweDM1LCAweERGLAotCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCi0KLQkweDE1LCAweDIwLCAweDE1LCAweERGLAotCTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCi0KLQkweDI2LCAweEQwLCAweDI2LCAweENELAotCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCi0KLQkweDI2LCAweDQwLCAweDgwLCAweEJELAotCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCi0KLQkweDNFLCAweDU0LCAweDU3LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg4MiwgMHhFMSwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjYsIDB4MzAsCi0JMHgyOSwgMHgzMCwKLQkweDQ4LCAweDNDLCAweDQ4LCAweEFELAotCi0JMHgyQiwgMHg3MiwKLQkweEMyLCAweEUxLAotCTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCi0KLQkweDA1LCAweDI0LCAweDM0LCAweEJGLAotCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCi0KLQkweDJELCAweDQ2LCAweDRFLCAweEJGLAotCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDIwLCAweDFELCAweDZGLCAweDhGLAotCTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHgzMCwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKLQotCTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCi0JMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKLQotCTB4MzMsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweDNFLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0KLQkweDg0LCAweDNFLCAweDU4LCAweEU5LAotCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDA1LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKLQotCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0JMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKLQotCTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKLQotCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0JMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKLQotCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0JMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKLQotCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCi0JMHgwOSwgMHhFMywKLQkweDNCLCAweDA1LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDNCLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4QUMsIDB4MjAsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI0LAotCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCi0KLQkweDI1LCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDAsIDB4RTAsCi0JMHhDOCwgMHgzMCwKLQotCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0JMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKLQotCTB4MDAsIDB4RTAsCi0JMHgyNSwgMHgyMCwKLQkweDM4LCAweDJDLCAweDRGLCAweEU5LAotCi0JMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKLQkweDM4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgyOCwgMHg3NCwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIwLAotCTB4MkQsIDB4MjAsCi0JMHg5QiwgMHgxMCwKLQotCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0JMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKLQotCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0JMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCi0JMHgzNCwgMHgyMCwKLQkweDJBLCAweDMwLAotCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCTB4MzIsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQotCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKLQotCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDZBLAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDM3LCAweDFFLCAweDRGLCAweEU5LAotCi0JMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLQkweDAwLCAweEUwLAotCTB4MzIsIDB4MDAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCi0KLQkweDM2LCAweDFGLCAweDRGLCAweEU5LAotCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCi0KLQkweDM3LCAweDFCLCAweDM3LCAweEJGLAotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0KLQkweDNFLCAweDE3LCAweDRGLCAweEU5LAotCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDM0LCAweDFGLCAweDM0LCAweEFGLAotCTB4MkIsIDB4MDUsCi0JMHhBNywgMHgyMCwKLQotCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0JMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCi0JMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKLQotCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCi0JMHgwNSwgMHgyMSwgMHgzMSwgMHhCMiwKLQotCTB4MDMsIDB4ODAsIDB4MkEsIDB4RUEsCi0JMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKLQotCTB4MkQsIDB4MjAsCi0JMHgyNSwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MEQsIDB4MjAsCi0KLQkweEIzLCAweDY4LAotCTB4OTcsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0JMHgyRiwgMHhDMCwgMHgyMSwgMHhDMCwKLQotCTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjQsCi0JMHgyRCwgMHgyMSwgMHgxQSwgMHhCNCwKLQotCTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4MDUsCi0JMHgwMCwgMHhFMCwKLQkweDI4LCAweDE5LCAweDYwLCAweEVDLAotCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCNiwKLQkweDA1LCAweDQ0LCAweDU0LCAweEI2LAotCi0JMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MkYsIDB4MjAsCi0KLQkweDIzLCAweDNCLCAweDMzLCAweEFELAotCTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCi0KLQkweEE3LCAweDFFLCAweDRGLCAweEU5LAotCTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCi0KLQkweDJELCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHhBOCwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCi0JMHgyNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCi0JMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKLQkweDBGLCAweEMwLCAweDIxLCAweEMyLAotCi0JMHhBNiwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgwRCwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDNGLCAweDJGLCAweDVELCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgwRiwgMHgyMCwKLQotCTB4MTcsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHhBNSwgMHgzNywgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4QzAsIDB4MjEsIDB4QzQsCi0JMHgwRiwgMHgxNywgMHgwRiwgMHhBRiwKLQotCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MkYsIDB4QzAsIDB4NDQsIDB4QzYsCi0JMHhBMywgMHg4MCwgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDI2LCAweDFGLCAweERGLAotCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQkweDlELCAweDE3LCAweDRGLCAweEU5LAotCi0JMHhBMSwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweEEyLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgwNiwgMHgwNiwgMHgxRiwgMHhBRiwKLQkweDAwLCAweEUwLAotCTB4QUYsIDB4MjAsCi0KLQkweDlFLCAweDM3LCAweDRGLCAweEU5LAotCTB4MkYsIDB4MTcsIDB4MkYsIDB4QUYsCi0KLQkweEEwLCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4OUMsIDB4ODAsIDB4NEYsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCi0KLQkweDE2LCAweDI4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDJCLCAweDIwLCAweEU5LAotCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCi0KLQkweDFDLCAweDIzLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4OTAsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQotCTB4NjgsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNSwgMHgzMCwKLQkweDJELCAweDMwLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjcsIDB4RkYsIDB4MEEsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0JMHg0MiwgMHhFMSwKLQkweDAwLCAweEUwLAotCi0JMHg2NSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2MiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6c2FmW10gPSB7Ci0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDk4LCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDgxLCAweDA0LAotCTB4ODksIDB4MDQsCi0JMHgwMSwgMHgwNCwKLQkweDA5LCAweDA0LAotCi0JMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDExLCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDQxLCAweENDLCAweDQxLCAweENELAotCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCi0KLQkweEQxLCAweDQxLCAweEMwLCAweEVDLAotCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCi0KLQkweDgwLCAweDA0LAotCTB4MTAsIDB4MDQsCi0JMHgwOCwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLQkweEQxLCAweDQ5LCAweEMwLCAweEVDLAotCi0JMHg4QSwgMHgxRiwgMHgyMCwgMHhFOSwKLQkweDhCLCAweDNGLCAweDIwLCAweEU5LAotCi0JMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLQkweDQ5LCAweDNDLCAweDQ5LCAweEFELAotCi0JMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLQkweDA4LCAweENDLCAweDA4LCAweENELAotCi0JMHhCOSwgMHg0MSwgMHg0OSwgMHhCQiwKLQkweDFGLCAweEYwLCAweDQxLCAweENELAotCi0JMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLQkweDAwLCAweDk4LCAweDgwLCAweEU5LAotCi0JMHg5NCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDFGLCAweDIwLCAweEU5LAotCi0JMHgyMSwgMHg0NSwgMHg4MCwgMHhFOCwKLQkweDFBLCAweDRELCAweDgwLCAweEU4LAotCi0JMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDFELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKLQkweDM0LCAweDUzLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHgzMCwKLQkweDFELCAweDMwLAotCTB4NTgsIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQotCTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4NzIsCi0JMHgwOSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4NzIsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHg5NywgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLQkweDk4LCAweEUxLAotCTB4QjUsIDB4MDUsCi0KLQkweEJELCAweDA1LAotCTB4MkUsIDB4MzAsCi0JMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0JMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKLQotCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0JMHgzMiwgMHg2QSwKLQkweDJBLCAweDMwLAotCi0JMHgyMCwgMHg3MywKLQkweDMzLCAweDZBLAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHg3MywKLQotCTB4MUMsIDB4NzIsCi0JMHg4MywgMHhFMiwKLQkweDgwLCAweDgwLCAweDE1LCAweEVBLAotCi0JMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLQkweDMwLCAweDM1LCAweDIwLCAweERGLAotCi0JMHg0MCwgMHgzMCwKLQkweDAwLCAweEUwLAotCTB4Q0MsIDB4RTIsCi0JMHg2NCwgMHg3MiwKLQotCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKLQotCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0JMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKLQotCTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCi0JMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKLQotCTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDczLAotCi0JMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLQkweDMwLCAweDMwLCAweDQwLCAweEFGLAotCi0JMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLQkweDFELCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgyQywgMHgxRiwgMHgyQywgMHhERiwKLQkweDFBLCAweDMzLCAweDIwLCAweEU5LAotCi0JMHhCMCwgMHgxMCwKLQkweDA4LCAweEUzLAotCTB4NDAsIDB4MTAsCi0JMHhCOCwgMHgxMCwKLQotCTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCi0JMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKLQotCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4QTYsIDB4MjAsCi0JMHg4OCwgMHhFMiwKLQkweDAwLCAweEUwLAotCTB4QUYsIDB4MjAsCi0KLQkweDI4LCAweDJBLCAweDI2LCAweEFGLAotCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDFGLCAweDM0LCAweERGLAotCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCi0KLQkweDI4LCAweDMwLCAweDgwLCAweEJGLAotCTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCi0KLQkweDQ3LCAweDI0LCAweDQ3LCAweERGLAotCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCi0KLQkweDRGLCAweDJDLCAweDRGLCAweERGLAotCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCi0KLQkweDI4LCAweDE1LCAweDI4LCAweERGLAotCTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCi0KLQkweDU3LCAweDM0LCAweDU3LCAweERGLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHgwNSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4OSwgMHhFMiwKLQkweDJCLCAweDMwLAotCi0JMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg2OCwKLQkweEJGLCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIwLCAweEMwLCAweDIwLCAweEFGLAotCTB4MjgsIDB4MDUsCi0JMHg5NywgMHg3NCwKLQotCTB4MDAsIDB4RTAsCi0JMHgyQSwgMHgxMCwKLQkweDE2LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDhDLCAweEUyLAotCTB4OTUsIDB4MDUsCi0KLQkweDI4LCAweEMxLCAweDI4LCAweEFELAotCTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEE4LCAweDY3LAotCTB4OUYsIDB4NkIsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0JMHgxRCwgMHgyNSwKLQkweDIwLCAweDA1LAotCi0JMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLQkweDQwLCAweDJBLCAweDQwLCAweEJELAotCi0JMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDIwLCAweDMzLCAweDIwLCAweEFELAotCi0JMHgyMCwgMHg3MywKLQkweDAwLCAweEUwLAotCTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCi0KLQkweDI2LCAweDJGLCAweEIwLCAweEU4LAotCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDIwLCAweDM1LCAweERGLAotCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCi0KLQkweDE1LCAweDIwLCAweDE1LCAweERGLAotCTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCi0KLQkweDI2LCAweEQwLCAweDI2LCAweENELAotCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCi0KLQkweDI2LCAweDQwLCAweDgwLCAweEJELAotCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCi0KLQkweDNFLCAweDU0LCAweDU3LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg4MiwgMHhFMSwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjYsIDB4MzAsCi0JMHgyOSwgMHgzMCwKLQkweDQ4LCAweDNDLCAweDQ4LCAweEFELAotCi0JMHgyQiwgMHg3MiwKLQkweEMyLCAweEUxLAotCTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCi0KLQkweDA1LCAweDI0LCAweDM0LCAweEJGLAotCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCi0KLQkweDJELCAweDQ2LCAweDRFLCAweEJGLAotCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDIwLCAweDFELCAweDZGLCAweDhGLAotCTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHgzMCwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKLQotCTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCi0JMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKLQotCTB4MzMsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweDNFLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0KLQkweDg0LCAweDNFLCAweDU4LCAweEU5LAotCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDA1LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKLQotCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0JMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKLQotCTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKLQotCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0JMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKLQotCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0JMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKLQotCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCi0JMHgwOSwgMHhFMywKLQkweDNCLCAweDA1LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDNCLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4QUMsIDB4MjAsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI0LAotCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCi0KLQkweDI1LCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDAsIDB4RTAsCi0JMHhDOCwgMHgzMCwKLQotCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0JMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKLQotCTB4MDAsIDB4RTAsCi0JMHgyNSwgMHgyMCwKLQkweDM4LCAweDJDLCAweDRGLCAweEU5LAotCi0JMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKLQkweDM4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgyOCwgMHg3NCwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIwLAotCTB4MkQsIDB4MjAsCi0JMHg5QiwgMHgxMCwKLQotCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0JMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKLQotCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0JMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCi0JMHgzNCwgMHgyMCwKLQkweDJBLCAweDMwLAotCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCTB4MzIsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQotCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKLQotCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDZBLAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDM3LCAweDFFLCAweDRGLCAweEU5LAotCi0JMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLQkweDAwLCAweEUwLAotCTB4MzIsIDB4MDAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCi0KLQkweDM2LCAweDFGLCAweDRGLCAweEU5LAotCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCi0KLQkweDM3LCAweDFCLCAweDM3LCAweEJGLAotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0KLQkweDNFLCAweDE3LCAweDRGLCAweEU5LAotCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDM0LCAweDFGLCAweDM0LCAweEFGLAotCTB4MkIsIDB4MDUsCi0JMHhBNywgMHgyMCwKLQotCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0JMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCi0JMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKLQotCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCi0JMHgwNSwgMHgyMSwgMHgzMSwgMHhCMiwKLQotCTB4MDMsIDB4ODAsIDB4MkEsIDB4RUEsCi0JMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKLQotCTB4MkQsIDB4MjAsCi0JMHgyNSwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MEQsIDB4MjAsCi0KLQkweEIzLCAweDY4LAotCTB4OTcsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0JMHgyRiwgMHhDMCwgMHgyMSwgMHhDMCwKLQotCTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjQsCi0JMHgyRCwgMHgyMSwgMHgxQSwgMHhCNCwKLQotCTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4MDUsCi0JMHgwMCwgMHhFMCwKLQkweDI4LCAweDE5LCAweDYwLCAweEVDLAotCi0JMHgwRCwgMHgyMSwgMHgxQSwgMHhCNiwKLQkweDA1LCAweDIxLCAweDMxLCAweEI2LAotCi0JMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MkYsIDB4MjAsCi0KLQkweDIzLCAweDNCLCAweDMzLCAweEFELAotCTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCi0KLQkweEE3LCAweDFFLCAweDRGLCAweEU5LAotCTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCi0KLQkweDJELCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHhBOCwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCi0JMHgyNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCi0JMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKLQkweDBGLCAweEMwLCAweDIxLCAweEMyLAotCi0JMHhBNiwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgwRCwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzYsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI2LAotCTB4MjUsIDB4NDQsIDB4NTQsIDB4QjYsCi0KLQkweDNGLCAweDJGLCAweDVELCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgwRiwgMHgyMCwKLQotCTB4MkQsIDB4MjAsCi0JMHgyNSwgMHgyMCwKLQkweDA3LCAweEMwLCAweDQ0LCAweEM2LAotCi0JMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKLQkweEE1LCAweDM3LCAweDRGLCAweEU5LAotCi0JMHgwNiwgMHhDMCwgMHgyMSwgMHhDNCwKLQkweDBGLCAweDE3LCAweDBGLCAweEFGLAotCi0JMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzRSwgMHgzRCwgMHg1RCwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MDcsIDB4MjAsCi0KLQkweDJGLCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHhBMywgMHgwRiwgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDI2LCAweDFGLCAweERGLAotCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQkweEExLCAweDFGLCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHgyNiwgMHgxRSwgMHhERiwKLQkweDlELCAweDFFLCAweDRGLCAweEU5LAotCi0JMHgzNSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweEEyLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgwNiwgMHgwNiwgMHgxRiwgMHhBRiwKLQkweDM5LCAweDM3LCAweDRGLCAweEU5LAotCi0JMHgyRiwgMHgyRiwgMHgxNywgMHhBRiwKLQkweDA3LCAweDA3LCAweDFFLCAweEFGLAotCi0JMHhBMCwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDlFLCAweDNFLCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDlDLCAweDgwLCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDU3LCAweDM5LCAweDIwLCAweEU5LAotCi0JMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDNCLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKLQkweDJCLCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLQkweDU3LCAweDM2LCAweDIwLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDkwLCAweEUyLAotCTB4MDAsIDB4RTAsCi0KLQkweDYzLCAweEZGLCAweDIwLCAweEVBLAotCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDlGLCAweDQxLCAweDQ5LCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDBELCAweDgwLCAweDA3LCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDM1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjUsIDB4MzAsCi0JMHgyRCwgMHgzMCwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweEE3LCAweDVCLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDYyLCAweEZGLCAweDBBLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM5LCAweDQxLCAweEM4LCAweEVDLAotCTB4NDIsIDB4RTEsCi0JMHgwMCwgMHhFMCwKLQotCTB4NjAsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NUQsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RnenNmW10gPSB7Ci0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDk4LCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDgxLCAweDA0LAotCTB4ODksIDB4MDQsCi0JMHgwMSwgMHgwNCwKLQkweDA5LCAweDA0LAotCi0JMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDExLCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDQxLCAweENDLCAweDQxLCAweENELAotCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCi0KLQkweEQxLCAweDQxLCAweEMwLCAweEVDLAotCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCi0KLQkweDgwLCAweDA0LAotCTB4MTAsIDB4MDQsCi0JMHgwOCwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLQkweEQxLCAweDQ5LCAweEMwLCAweEVDLAotCi0JMHg4QSwgMHgxRiwgMHgyMCwgMHhFOSwKLQkweDhCLCAweDNGLCAweDIwLCAweEU5LAotCi0JMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLQkweDQ5LCAweDNDLCAweDQ5LCAweEFELAotCi0JMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLQkweDA4LCAweENDLCAweDA4LCAweENELAotCi0JMHhCOSwgMHg0MSwgMHg0OSwgMHhCQiwKLQkweDFGLCAweEYwLCAweDQxLCAweENELAotCi0JMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLQkweDAwLCAweDk4LCAweDgwLCAweEU5LAotCi0JMHg4RiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDFGLCAweDIwLCAweEU5LAotCi0JMHgyMSwgMHg0NSwgMHg4MCwgMHhFOCwKLQkweDFBLCAweDRELCAweDgwLCAweEU4LAotCi0JMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDFELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKLQkweDM0LCAweDUzLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHgzMCwKLQkweDFELCAweDMwLAotCTB4NTgsIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQotCTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4NzIsCi0JMHgwOSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4NzIsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHg5NywgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLQkweDk4LCAweEUxLAotCTB4QjUsIDB4MDUsCi0KLQkweEJELCAweDA1LAotCTB4MkUsIDB4MzAsCi0JMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0JMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKLQotCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0JMHgzMiwgMHg2QSwKLQkweDJBLCAweDMwLAotCi0JMHgyMCwgMHg3MywKLQkweDMzLCAweDZBLAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHg3MywKLQotCTB4MUMsIDB4NzIsCi0JMHg4MywgMHhFMiwKLQkweDdCLCAweDgwLCAweDE1LCAweEVBLAotCi0JMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLQkweDMwLCAweDM1LCAweDIwLCAweERGLAotCi0JMHg0MCwgMHgzMCwKLQkweDAwLCAweEUwLAotCTB4Q0MsIDB4RTIsCi0JMHg2NCwgMHg3MiwKLQotCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKLQotCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0JMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKLQotCTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCi0JMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKLQotCTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDczLAotCi0JMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLQkweDMwLCAweDMwLCAweDQwLCAweEFGLAotCi0JMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLQkweDFELCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgyQywgMHgxRiwgMHgyQywgMHhERiwKLQkweDFBLCAweDMzLCAweDIwLCAweEU5LAotCi0JMHhCMCwgMHgxMCwKLQkweDA4LCAweEUzLAotCTB4NDAsIDB4MTAsCi0JMHhCOCwgMHgxMCwKLQotCTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCi0JMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKLQotCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4QTYsIDB4MjAsCi0JMHg4OCwgMHhFMiwKLQkweDAwLCAweEUwLAotCTB4QUYsIDB4MjAsCi0KLQkweDI4LCAweDJBLCAweDI2LCAweEFGLAotCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDFGLCAweDM0LCAweERGLAotCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCi0KLQkweDI4LCAweDMwLCAweDgwLCAweEJGLAotCTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCi0KLQkweDQ3LCAweDI0LCAweDQ3LCAweERGLAotCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCi0KLQkweDRGLCAweDJDLCAweDRGLCAweERGLAotCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCi0KLQkweDI4LCAweDE1LCAweDI4LCAweERGLAotCTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCi0KLQkweDU3LCAweDM0LCAweDU3LCAweERGLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHgwNSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4OSwgMHhFMiwKLQkweDJCLCAweDMwLAotCi0JMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg2OCwKLQkweEJGLCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIwLCAweEMwLCAweDIwLCAweEFGLAotCTB4MjgsIDB4MDUsCi0JMHg5NywgMHg3NCwKLQotCTB4MDAsIDB4RTAsCi0JMHgyQSwgMHgxMCwKLQkweDE2LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDhDLCAweEUyLAotCTB4OTUsIDB4MDUsCi0KLQkweDI4LCAweEMxLCAweDI4LCAweEFELAotCTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEE4LCAweDY3LAotCTB4OUYsIDB4NkIsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0JMHgxRCwgMHgyNSwKLQkweDIwLCAweDA1LAotCi0JMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLQkweDQwLCAweDJBLCAweDQwLCAweEJELAotCi0JMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDIwLCAweDMzLCAweDIwLCAweEFELAotCi0JMHgyMCwgMHg3MywKLQkweDAwLCAweEUwLAotCTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCi0KLQkweDI2LCAweDJGLCAweEIwLCAweEU4LAotCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDIwLCAweDM1LCAweERGLAotCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCi0KLQkweDE1LCAweDIwLCAweDE1LCAweERGLAotCTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCi0KLQkweDI2LCAweEQwLCAweDI2LCAweENELAotCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCi0KLQkweDI2LCAweDQwLCAweDgwLCAweEJELAotCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCi0KLQkweDNFLCAweDU0LCAweDU3LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg4MiwgMHhFMSwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjYsIDB4MzAsCi0JMHgyOSwgMHgzMCwKLQkweDQ4LCAweDNDLCAweDQ4LCAweEFELAotCi0JMHgyQiwgMHg3MiwKLQkweEMyLCAweEUxLAotCTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCi0KLQkweDA1LCAweDI0LCAweDM0LCAweEJGLAotCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCi0KLQkweDJELCAweDQ2LCAweDRFLCAweEJGLAotCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDIwLCAweDFELCAweDZGLCAweDhGLAotCTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHgzMCwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKLQotCTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCi0JMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKLQotCTB4MzMsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweDNFLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0KLQkweDg0LCAweDNFLCAweDU4LCAweEU5LAotCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDA1LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKLQotCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0JMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKLQotCTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKLQotCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0JMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKLQotCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0JMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKLQotCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCi0JMHgwOSwgMHhFMywKLQkweDNCLCAweDA1LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDNCLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4QUMsIDB4MjAsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI0LAotCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCi0KLQkweDI1LCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDAsIDB4RTAsCi0JMHhDOCwgMHgzMCwKLQotCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0JMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKLQotCTB4MDAsIDB4RTAsCi0JMHgyNSwgMHgyMCwKLQkweDM4LCAweDJDLCAweDRGLCAweEU5LAotCi0JMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKLQkweDM4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgyOCwgMHg3NCwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIwLAotCTB4MkQsIDB4MjAsCi0JMHg5QiwgMHgxMCwKLQotCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0JMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKLQotCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0JMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCi0JMHgzNCwgMHgyMCwKLQkweDJBLCAweDMwLAotCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCTB4MzIsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQotCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKLQotCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDZBLAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDM3LCAweDFFLCAweDRGLCAweEU5LAotCi0JMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLQkweDAwLCAweEUwLAotCTB4MzIsIDB4MDAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCi0KLQkweDM2LCAweDFGLCAweDRGLCAweEU5LAotCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCi0KLQkweDM3LCAweDFCLCAweDM3LCAweEJGLAotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0KLQkweDNFLCAweDE3LCAweDRGLCAweEU5LAotCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDM0LCAweDFGLCAweDM0LCAweEFGLAotCTB4MkIsIDB4MDUsCi0JMHhBNywgMHgyMCwKLQotCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0JMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCi0JMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKLQotCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCi0JMHgwNSwgMHgyMSwgMHgzMSwgMHhCMiwKLQotCTB4MDMsIDB4ODAsIDB4MkEsIDB4RUEsCi0JMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKLQotCTB4MkQsIDB4MjAsCi0JMHgyNSwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MEQsIDB4MjAsCi0KLQkweEIzLCAweDY4LAotCTB4OTcsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0JMHgyRiwgMHhDMCwgMHgyMSwgMHhDMCwKLQotCTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjQsCi0JMHgyRCwgMHgyMSwgMHgxQSwgMHhCNCwKLQotCTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4MDUsCi0JMHgwMCwgMHhFMCwKLQkweDI4LCAweDE5LCAweDYwLCAweEVDLAotCi0JMHgwRCwgMHgyMSwgMHgxQSwgMHhCNiwKLQkweDA1LCAweDIxLCAweDMxLCAweEI2LAotCi0JMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MkYsIDB4MjAsCi0KLQkweDIzLCAweDNCLCAweDMzLCAweEFELAotCTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCi0KLQkweEE3LCAweDFFLCAweDRGLCAweEU5LAotCTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCi0KLQkweDJELCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHhBOCwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCi0JMHgyNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCi0JMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKLQkweDBGLCAweEMwLCAweDIxLCAweEMyLAotCi0JMHhBNiwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgwRCwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzYsCi0KLQkweDNGLCAweDJGLCAweDVELCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgwRiwgMHgyMCwKLQotCTB4MTcsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHhBNSwgMHgzNywgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4QzAsIDB4MjEsIDB4QzQsCi0JMHgwRiwgMHgxNywgMHgwRiwgMHhBRiwKLQotCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MkYsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweEEzLCAweDgwLCAweDRGLCAweEU5LAotCi0JMHgwNiwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4MUYsIDB4MjYsIDB4MUYsIDB4REYsCi0KLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCTB4MzUsIDB4MTcsIDB4NEYsIDB4RTksCi0KLQkweEExLCAweDFGLCAweDRGLCAweEU5LAotCTB4QTIsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDA2LCAweDA2LCAweDFGLCAweEFGLAotCTB4MzksIDB4MzcsIDB4NEYsIDB4RTksCi0KLQkweDJGLCAweDJGLCAweDE3LCAweEFGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEEwLCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMxLCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCi0KLQkweDE2LCAweDI4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDJCLCAweDIwLCAweEU5LAotCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCi0KLQkweDFDLCAweDIzLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4OTAsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQotCTB4NjgsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNSwgMHgzMCwKLQkweDJELCAweDMwLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjcsIDB4RkYsIDB4MEEsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0JMHg0MiwgMHhFMSwKLQkweDAwLCAweEUwLAotCi0JMHg2NSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2MiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdDJneltdID0gewotCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDYwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDYxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweEQzLCAweDZCLAotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDUxLCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDYxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg3OCwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDEwLCAweDA0LAotCTB4MjAsIDB4MDQsCi0KLQkweDYxLCAweDUxLCAweEUwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0JMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0JMHg5NywgMHhFMiwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0JMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0JMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKLQotCTB4NjksIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MDAsCi0JMHgzRCwgMHgwMCwKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0JMHgzNSwgMHgyMCwKLQkweDNELCAweDIwLAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAotCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCi0KLQkweDY4LCAweDM1LCAweDY4LCAweEJGLAotCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCi0KLQkweDU5LCAweDNELCAweDU5LCAweEJGLAotCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCi0KLQkweDYzLCAweDYzLCAweDJELCAweERGLAotCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCi0KLQkweDU5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCi0JMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDUwLCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDU2LCAweDNGLCAweDU2LCAweERGLAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDY2LCAweDNELCAweDY2LCAweERGLAotCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQkweDY3LCAweDNELCAweDY3LCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNGLCAweDU3LCAweERGLAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU5LCAweDNGLCAweDU5LCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDY5LCAweDNELCAweDY5LCAweERGLAotCi0JMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLQkweDU4LCAweDNGLCAweDU4LCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLQkweDQ5LCAweDM3LCAweDQ5LCAweERGLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM0LCAweDgwLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEIwLAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEIyLAotCi0JMHgyNSwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMyLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDY2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDAyLCAweDQ3LCAweDY3LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLQkweDFBLCAweDQzLCAweDYzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLQkweDAyLCAweDQ4LCAweDY4LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLQkweDFBLCAweDQ5LCAweDY5LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweEJGLCAweEVBLAotCi0JMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDgxLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLQkweDg2LCAweDc4LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc5LCAweDU3LCAweEU5LAotCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQkweDhBLCAweDM0LCAweDIwLCAweEU5LAotCi0JMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLQkweDM3LCAweDUwLCAweDYwLCAweEJELAotCi0JMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLQkweDM1LCAweDUxLCAweDYxLCAweEJELAotCi0JMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MEUsIDB4NzcsCi0KLQkweDI0LCAweDUxLCAweDIwLCAweEU5LAotCTB4OUYsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDBFLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDBCLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY2LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU3LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDU3LCAweDgwLCAweDU3LCAweENGLAotCi0JMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDY3LCAweDNCLCAweDY3LCAweENGLAotCi0JMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU4LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ5LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY5LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0JMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0JMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKLQotCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0JMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKLQotCTB4QkUsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0JMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKLQotCTB4N0QsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3phW10gPSB7Ci0KLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBBLCAweDQwLCAweDUwLCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDUxLCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4RDMsIDB4NkIsCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NTEsIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NjEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDdDLCAweDgwLCAweDE1LCAweEVBLAotCTB4MTAsIDB4MDQsCi0JMHgyMCwgMHgwNCwKLQotCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDBGLCAweDUyLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLQkweDFFLCAweDUxLCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDBFLCAweDYxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDYwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDYxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLQkweDk3LCAweEUyLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLQkweDNELCAweDU5LCAweEIxLCAweEU4LAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQkweDY3LCAweDM5LCAweDY3LCAweEJGLAotCi0JMHg2RCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgwMCwKLQkweDNELCAweDAwLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweDhELCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLQkweDM1LCAweDIwLAotCTB4M0QsIDB4MjAsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDBFLCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0JMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKLQotCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0JMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKLQotCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKLQotCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0JMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKLQotCTB4NTksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0KLQkweDNGLCAweDUzLCAweEEwLCAweEU4LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDUwLCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDBGLCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU5LCAweDc4LCAweEY4LCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCi0KLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCi0KLQkweDQ4LCAweDM3LCAweDQ4LCAweERGLAotCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDY4LCAweDNELCAweDY4LCAweERGLAotCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCi0KLQkweDI5LCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlDLCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEI0LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEI2LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM4LCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MEEsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCi0JMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCi0JMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKLQotCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0JMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKLQotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0JMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKLQotCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0JMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKLQotCTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCi0JMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKLQotCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDBFLCAweDc3LAotCi0JMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLQkweDlCLCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU2LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY3LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKLQotCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKLQotCTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNDLCAweEQ3LCAweDNDLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM0LCAweDgwLCAweDM0LCAweEJELAotCTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ4LCAweDgwLCAweDQ4LCAweENGLAotCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCi0KLQkweDY4LCAweDMzLCAweDY4LCAweENGLAotCTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCi0KLQkweEJBLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU4LCAweDMzLCAweDU4LCAweENGLAotCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCi0KLQkweDc5LCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6YWZbXSA9IHsKLQotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhEMywgMHg2QiwKLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDIzLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg1MSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg2MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDM5LCAweDY3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDYxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4ODEsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgxMCwgMHgwNCwKLQkweDIwLCAweDA0LAotCi0JMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDYyLCAweEJGLAotCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDUwLCAweEJELAotCTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDUxLCAweEJELAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDBFLCAweEJELAotCTB4OTcsIDB4RTIsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDM1LCAweDQ4LCAweEIxLCAweEU4LAotCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDY2LCAweDMxLCAweDY2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCi0KLQkweDcyLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDAwLAotCTB4M0QsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDc1LCAweEY4LCAweEVDLAotCTB4MzUsIDB4MjAsCi0JMHgzRCwgMHgyMCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLQkweDU4LCAweDM1LCAweDU4LCAweEJGLAotCi0JMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKLQkweDQ5LCAweDNELCAweDQ5LCAweEJGLAotCi0JMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKLQkweDY5LCAweDNELCAweDY5LCAweEJGLAotCi0JMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLQkweDRELCAweDdELCAweEY4LCAweEVDLAotCi0JMHg1OSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQotCTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKLQotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0JMHg2NywgMHgzRCwgMHg2NywgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRiwgMHg1NywgMHhERiwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKLQotCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0JMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCi0JMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKLQotCTB4MkUsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMyLAotCTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4OUMsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjQsCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEI2LAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjYsCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NSwgMHhDNiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NSwgMHg1NSwgMHhCNiwKLQkweDAyLCAweDQ1LCAweDY1LCAweEI2LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHgzRCwgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDU2LCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCi0KLQkweDBBLCAweDQ3LCAweDU3LCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzYsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDUzLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzUsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzksIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ4LCAweDU4LCAweEJGLAotCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDJBLCAweDQ5LCAweDU5LCAweEJGLAotCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCi0KLQkweDgwLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDgyLCAweDMxLCAweDU3LCAweEU5LAotCTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM5LCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCi0KLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCi0KLQkweDhCLCAweDNDLCAweDIwLCAweEU5LAotCTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCi0KLQkweDU3LCAweDBELCAweDIwLCAweEU5LAotCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCi0KLQkweDJCLCAweDUwLCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgwRSwgMHg3NywKLQotCTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCi0JMHg5NiwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCi0KLQkweDY2LCAweDMzLCAweDY2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCi0KLQkweDBCLCAweDQ4LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY4LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU5LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM0LCAweEQ3LCAweDM0LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzQywgMHhENywgMHgzQywgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLQkweDNDLCAweDgwLCAweDNDLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKLQkweDU5LCAweDgwLCAweDU5LCAweENGLAotCi0JMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLQkweDQ5LCAweDNCLCAweDQ5LCAweENGLAotCi0JMHhCNSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKLQkweDY5LCAweDNCLCAweDY5LCAweENGLAotCi0JMHg3NCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdDJnemZbXSA9IHsKLQotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhEMywgMHg2QiwKLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDIzLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg1MSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg2MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDM5LCAweDY3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDYxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4N0QsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgxMCwgMHgwNCwKLQkweDIwLCAweDA0LAotCi0JMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDYyLCAweEJGLAotCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDUwLCAweEJELAotCTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDUxLCAweEJELAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDBFLCAweEJELAotCTB4OTcsIDB4RTIsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDM1LCAweDQ4LCAweEIxLCAweEU4LAotCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDY2LCAweDMxLCAweDY2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCi0KLQkweDZFLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDAwLAotCTB4M0QsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDc1LCAweEY4LCAweEVDLAotCTB4MzUsIDB4MjAsCi0JMHgzRCwgMHgyMCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLQkweDU4LCAweDM1LCAweDU4LCAweEJGLAotCi0JMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKLQkweDQ5LCAweDNELCAweDQ5LCAweEJGLAotCi0JMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKLQkweDY5LCAweDNELCAweDY5LCAweEJGLAotCi0JMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLQkweDRELCAweDdELCAweEY4LCAweEVDLAotCi0JMHg1OSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQotCTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKLQotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0JMHg2NywgMHgzRCwgMHg2NywgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRiwgMHg1NywgMHhERiwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKLQotCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0JMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCi0JMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MEYsIDB4Q0YsIDB4NzUsIDB4QzYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKLQotCTB4MjgsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzEsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjQsCi0KLQkweDJBLCAweDQ1LCAweDU1LCAweEI2LAotCTB4MUEsIDB4NDUsIDB4NjUsIDB4QjYsCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDAyLCAweDQ3LCAweDY3LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDY2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM2LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLQkweDFBLCAweDQzLCAweDYzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM1LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM5LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLQkweDAyLCAweDQ4LCAweDY4LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLQkweDFBLCAweDQ5LCAweDY5LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweEJGLCAweEVBLAotCi0JMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDgxLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLQkweDg2LCAweDc4LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc5LCAweDU3LCAweEU5LAotCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQkweDhBLCAweDM0LCAweDIwLCAweEU5LAotCi0JMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLQkweDM3LCAweDUwLCAweDYwLCAweEJELAotCi0JMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLQkweDM1LCAweDUxLCAweDYxLCAweEJELAotCi0JMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MEUsIDB4NzcsCi0KLQkweDI0LCAweDUxLCAweDIwLCAweEU5LAotCTB4OUEsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDBFLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDBCLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY2LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU3LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDU3LCAweDgwLCAweDU3LCAweENGLAotCi0JMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDY3LCAweDNCLCAweDY3LCAweENGLAotCi0JMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU4LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ5LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY5LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0JMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0JMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKLQotCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0JMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKLQotCTB4QkIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0JMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKLQotCTB4NzgsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3pzW10gPSB7Ci0KLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBBLCAweDQwLCAweDUwLCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDUxLCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4RDMsIDB4NkIsCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NTEsIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NjEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDg1LCAweDgwLCAweDE1LCAweEVBLAotCTB4MTAsIDB4MDQsCi0JMHgyMCwgMHgwNCwKLQotCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDBGLCAweDUyLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLQkweDFFLCAweDUxLCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDBFLCAweDYxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDYwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDYxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLQkweDk3LCAweEUyLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLQkweDNELCAweDU5LCAweEIxLCAweEU4LAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQkweDY3LCAweDM5LCAweDY3LCAweEJGLAotCi0JMHg3NiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgwMCwKLQkweDNELCAweDAwLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweDhELCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLQkweDM1LCAweDIwLAotCTB4M0QsIDB4MjAsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDBFLCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0JMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKLQotCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0JMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKLQotCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKLQotCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0JMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKLQotCTB4NTksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0KLQkweDNGLCAweDUzLCAweEEwLCAweEU4LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDUwLCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDBGLCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU5LCAweDc4LCAweEY4LCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCi0KLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCi0KLQkweDQ4LCAweDM3LCAweDQ4LCAweERGLAotCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCi0KLQkweDY4LCAweDNELCAweDY4LCAweERGLAotCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDBGLCAweENGLCAweDc0LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzgsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCi0KLQkweDMxLCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MEYsIDB4Q0YsIDB4NzUsIDB4QzAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKLQkweDM3LCAweENGLCAweDc1LCAweEM0LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE2LCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEEzLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDFBLCAweDQ0LCAweDY0LCAweEI0LAotCi0JMHgwQSwgMHg0NSwgMHg1NSwgMHhCMCwKLQkweDAyLCAweDQ1LCAweDY1LCAweEIwLAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEEwLCAweDM3LCAweDIwLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDUsIDB4NTUsIDB4QjIsCi0JMHgxQSwgMHg0NSwgMHg2NSwgMHhCMiwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjQsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCNCwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDU2LCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ3LCAweDU3LCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDUzLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4QTIsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ4LCAweDU4LCAweEJGLAotCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDJBLCAweDQ5LCAweDU5LCAweEJGLAotCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCi0KLQkweDgwLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDgyLCAweDMxLCAweDU3LCAweEU5LAotCTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM5LCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCi0KLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCi0KLQkweDhCLCAweDNDLCAweDIwLCAweEU5LAotCTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCi0KLQkweDU3LCAweDBELCAweDIwLCAweEU5LAotCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCi0KLQkweDJCLCAweDUwLCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgwRSwgMHg3NywKLQotCTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCi0JMHg5MiwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCi0KLQkweDY2LCAweDMzLCAweDY2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCi0KLQkweDBCLCAweDQ4LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY4LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU5LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM0LCAweEQ3LCAweDM0LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzQywgMHhENywgMHgzQywgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLQkweDNDLCAweDgwLCAweDNDLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKLQkweDU5LCAweDgwLCAweDU5LCAweENGLAotCi0JMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLQkweDQ5LCAweDNCLCAweDQ5LCAweENGLAotCi0JMHhCMiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKLQkweDY5LCAweDNCLCAweDY5LCAweENGLAotCi0JMHg3MCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdDJnenNhW10gPSB7Ci0KLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBBLCAweDQwLCAweDUwLCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDUxLCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4RDMsIDB4NkIsCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NTEsIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NjEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDhBLCAweDgwLCAweDE1LCAweEVBLAotCTB4MTAsIDB4MDQsCi0JMHgyMCwgMHgwNCwKLQotCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDBGLCAweDUyLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLQkweDFFLCAweDUxLCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDBFLCAweDYxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDYwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDYxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLQkweDk3LCAweEUyLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLQkweDNELCAweDU5LCAweEIxLCAweEU4LAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQkweDY3LCAweDM5LCAweDY3LCAweEJGLAotCi0JMHg3QiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgwMCwKLQkweDNELCAweDAwLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweDhELCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLQkweDM1LCAweDIwLAotCTB4M0QsIDB4MjAsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDBFLCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0JMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKLQotCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0JMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKLQotCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKLQotCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0JMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKLQotCTB4NTksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0KLQkweDNGLCAweDUzLCAweEEwLCAweEU4LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDUwLCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDBGLCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU5LCAweDc4LCAweEY4LCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCi0KLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCi0KLQkweDQ4LCAweDM3LCAweDQ4LCAweERGLAotCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCi0KLQkweDY4LCAweDNELCAweDY4LCAweERGLAotCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDBGLCAweENGLCAweDc0LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzgsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCi0KLQkweDM2LCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MEYsIDB4Q0YsIDB4NzUsIDB4QzAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKLQkweDM3LCAweENGLCAweDc1LCAweEM0LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE2LCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEEzLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDFBLCAweDQ0LCAweDY0LCAweEI0LAotCi0JMHgwQSwgMHg0NSwgMHg1NSwgMHhCMCwKLQkweDAyLCAweDQ1LCAweDY1LCAweEIwLAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEEwLCAweDM3LCAweDIwLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDUsIDB4NTUsIDB4QjIsCi0JMHgxQSwgMHg0NSwgMHg2NSwgMHhCMiwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjQsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCNCwKLQotCTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4OUMsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEI2LAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCi0JMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCi0JMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKLQotCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0JMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKLQotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0JMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKLQotCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0JMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKLQotCTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCi0JMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKLQotCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDBFLCAweDc3LAotCi0JMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLQkweDhELCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU2LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY3LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKLQotCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKLQotCTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNDLCAweEQ3LCAweDNDLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM0LCAweDgwLCAweDM0LCAweEJELAotCTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ4LCAweDgwLCAweDQ4LCAweENGLAotCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCi0KLQkweDY4LCAweDMzLCAweDY4LCAweENGLAotCTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCi0KLQkweEFELCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU4LCAweDMzLCAweDU4LCAweENGLAotCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCi0KLQkweDZCLCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6c2FmW10gPSB7Ci0KLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBBLCAweDQwLCAweDUwLCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDUxLCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4RDMsIDB4NkIsCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NTEsIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NjEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDhFLCAweDgwLCAweDE1LCAweEVBLAotCTB4MTAsIDB4MDQsCi0JMHgyMCwgMHgwNCwKLQotCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDBGLCAweDUyLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLQkweDFFLCAweDUxLCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDBFLCAweDYxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDYwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDYxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLQkweDk3LCAweEUyLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLQkweDNELCAweDU5LCAweEIxLCAweEU4LAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQkweDY3LCAweDM5LCAweDY3LCAweEJGLAotCi0JMHg3RiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgwMCwKLQkweDNELCAweDAwLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweDhELCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLQkweDM1LCAweDIwLAotCTB4M0QsIDB4MjAsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDBFLCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0JMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKLQotCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0JMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKLQotCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKLQotCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0JMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKLQotCTB4NTksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0KLQkweDNGLCAweDUzLCAweEEwLCAweEU4LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDUwLCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDBGLCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU5LCAweDc4LCAweEY4LCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCi0KLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCi0KLQkweDQ4LCAweDM3LCAweDQ4LCAweERGLAotCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCi0KLQkweDY4LCAweDNELCAweDY4LCAweERGLAotCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDBGLCAweENGLCAweDc0LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzgsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCi0KLQkweDNBLCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MEYsIDB4Q0YsIDB4NzUsIDB4QzAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKLQkweDM3LCAweENGLCAweDc1LCAweEM0LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE2LCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEEzLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDFBLCAweDQ0LCAweDY0LCAweEI0LAotCi0JMHgwQSwgMHg0NSwgMHg1NSwgMHhCMCwKLQkweDAyLCAweDQ1LCAweDY1LCAweEIwLAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEEwLCAweDM3LCAweDIwLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDUsIDB4NTUsIDB4QjIsCi0JMHgxQSwgMHg0NSwgMHg2NSwgMHhCMiwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjQsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCNCwKLQotCTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4OUMsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEI2LAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ1LCAweDU1LCAweEI2LAotCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjYsCi0KLQkweDNELCAweENGLCAweDc1LCAweEM2LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4M0QsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDAyLCAweDQ3LCAweDY3LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweEExLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweEEyLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlELCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDlFLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLQkweDFBLCAweDQzLCAweDYzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM1LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM5LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLQkweDAyLCAweDQ4LCAweDY4LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLQkweDFBLCAweDQ5LCAweDY5LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweEJGLCAweEVBLAotCi0JMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDgxLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLQkweDg2LCAweDc4LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc5LCAweDU3LCAweEU5LAotCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQkweDhBLCAweDM0LCAweDIwLCAweEU5LAotCi0JMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLQkweDM3LCAweDUwLCAweDYwLCAweEJELAotCi0JMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLQkweDM1LCAweDUxLCAweDYxLCAweEJELAotCi0JMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MEUsIDB4NzcsCi0KLQkweDI0LCAweDUxLCAweDIwLCAweEU5LAotCTB4ODksIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDBFLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDBCLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY2LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU3LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDU3LCAweDgwLCAweDU3LCAweENGLAotCi0JMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDY3LCAweDNCLCAweDY3LCAweENGLAotCi0JMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU4LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ5LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY5LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0JMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0JMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKLQotCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0JMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKLQotCTB4QTksIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0JMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKLQotCTB4NjcsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3pzZltdID0gewotCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDYwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDYxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweEQzLCAweDZCLAotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDUxLCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDYxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg4QSwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDEwLCAweDA0LAotCTB4MjAsIDB4MDQsCi0KLQkweDYxLCAweDUxLCAweEUwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0JMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0JMHg5NywgMHhFMiwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0JMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0JMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKLQotCTB4N0IsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MDAsCi0JMHgzRCwgMHgwMCwKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0JMHgzNSwgMHgyMCwKLQkweDNELCAweDIwLAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAotCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCi0KLQkweDY4LCAweDM1LCAweDY4LCAweEJGLAotCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCi0KLQkweDU5LCAweDNELCAweDU5LCAweEJGLAotCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCi0KLQkweDYzLCAweDYzLCAweDJELCAweERGLAotCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCi0KLQkweDU5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCi0JMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDUwLCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDU2LCAweDNGLCAweDU2LCAweERGLAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDY2LCAweDNELCAweDY2LCAweERGLAotCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQkweDY3LCAweDNELCAweDY3LCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNGLCAweDU3LCAweERGLAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU5LCAweDNGLCAweDU5LCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDY5LCAweDNELCAweDY5LCAweERGLAotCi0JMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLQkweDU4LCAweDNGLCAweDU4LCAweERGLAotCi0JMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLQkweDQ5LCAweDM3LCAweDQ5LCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM4LCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEIyLAotCi0JMHgzNiwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDBGLCAweENGLCAweDc1LCAweEMwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNiwgMHgwRiwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDU1LCAweEIyLAotCTB4MUEsIDB4NDUsIDB4NjUsIDB4QjIsCi0KLQkweDBBLCAweDQ1LCAweDU1LCAweEI0LAotCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCi0KLQkweDBGLCAweENGLCAweDc1LCAweEM2LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDMxLCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE4LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NSwgMHg1NSwgMHhCNiwKLQkweDFBLCAweDQ1LCAweDY1LCAweEI2LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDU2LCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ3LCAweDU3LCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTIsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDUzLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzUsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzksIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ4LCAweDU4LCAweEJGLAotCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDJBLCAweDQ5LCAweDU5LCAweEJGLAotCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCi0KLQkweDgwLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDgyLCAweDMxLCAweDU3LCAweEU5LAotCTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM5LCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCi0KLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCi0KLQkweDhCLCAweDNDLCAweDIwLCAweEU5LAotCTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCi0KLQkweDU3LCAweDBELCAweDIwLCAweEU5LAotCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCi0KLQkweDJCLCAweDUwLCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgwRSwgMHg3NywKLQotCTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCi0JMHg4RCwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCi0KLQkweDY2LCAweDMzLCAweDY2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCi0KLQkweDBCLCAweDQ4LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY4LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU5LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM0LCAweEQ3LCAweDM0LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzQywgMHhENywgMHgzQywgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLQkweDNDLCAweDgwLCAweDNDLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKLQkweDU5LCAweDgwLCAweDU5LCAweENGLAotCi0JMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLQkweDQ5LCAweDNCLCAweDQ5LCAweENGLAotCi0JMHhBRCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKLQkweDY5LCAweDNCLCAweDY5LCAweENGLAotCi0JMHg2QiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6W10gPSB7Ci0KLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIyLCAweDQwLCAweDQ4LCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDQ5LCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4Q0IsIDB4NkIsCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NDksIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NTEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDU4LCAweDgwLCAweDE1LCAweEVBLAotCTB4MDgsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQotCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLQkweDI3LCAweDRBLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDFFLCAweDQ5LCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDI2LCAweDUxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDUwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDUxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDRFLCAweDMxLCAweDRFLCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCi0JMHg0QSwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQkweDAwLCAweEUwLAotCTB4NTksIDB4RTMsCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRCwgMHg1NywgMHhERiwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQotCTB4MUQsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEI0LAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjQsCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKLQotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0JMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKLQotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0JMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKLQotCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDI2LCAweDc3LAotCi0JMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKLQkweEFGLCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDIzLCAweDRFLCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQkweDFELCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDU3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDY1LAotCTB4MjMsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHg2NSwKLQkweDI0LCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgyMywgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4RDYsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0JMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKLQotCTB4OUQsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3RnemFbXSA9IHsKLQotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhDQiwgMHg2QiwKLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDI5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg0OSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg1MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDM5LCAweDU3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEMwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4NUMsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgwOCwgMHgwNCwKLQkweDEwLCAweDA0LAotCi0JMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDRBLCAweEJGLAotCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDQ4LCAweEJELAotCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDQ5LCAweEJELAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDI2LCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDRGLCAweDM5LCAweDRGLCAweEJGLAotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0KLQkweDRFLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDQyLCAweDczLCAweEY4LCAweEVDLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweEE1LCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDRCLCAweDRCLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCTB4MDAsIDB4RTAsCi0JMHg1OSwgMHhFMywKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDQ4LCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU2LCAweDNELCAweDU2LCAweERGLAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDRFLCAweDNGLCAweDRFLCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDRGLCAweDNGLCAweDRGLCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNELCAweDU3LCAweERGLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM0LCAweDgwLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyNywgMHhDRiwgMHg3NCwgMHhDNiwKLQkweDNELCAweENGLCAweDc0LCAweEMyLAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEIwLAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEIyLAotCi0JMHgyMCwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5QywgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCNCwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDBBLCAweDQ3LCAweDRGLCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ2LCAweDRFLCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzYsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDRCLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDM3LCAweDQ4LCAweDUwLCAweEJELAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCi0KLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCi0KLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0KLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCi0KLQkweDJCLCAweDQ4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgyNiwgMHg3NywKLQotCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0JMHhBQiwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MUMsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0JMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDAwLAotCTB4MjQsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHg2NSwKLQkweDIzLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4NjUsCi0JMHgyNCwgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDIzLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDFDLCAweDJCLCAweERFLCAweEU4LAotCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDFDLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweEQzLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDRFLCAweDMzLCAweDRFLCAweENGLAotCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCi0KLQkweDk5LCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3phZltdID0gewotCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDUwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDUxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweENCLCAweDZCLAotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDQ5LCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDUxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDQ5LCAweDQxLCAweEMwLCAweEVDLAotCTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg2MSwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDA4LCAweDA0LAotCTB4MTAsIDB4MDQsCi0KLQkweDUxLCAweDQ5LCAweEMwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NEEsIDB4QkYsCi0JMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQotCTB4NTMsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDI2LCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0JMHgwMCwgMHhFMCwKLQkweDU5LCAweEUzLAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDNGLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDQ4LCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDI3LCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDBBLCAweDQ0LCAweDRDLCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCi0KLQkweDI2LCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDI3LCAweENGLCAweDc0LCAweEM2LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlDLCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEI0LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCNiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEI2LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM4LCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDUsIDB4NEQsIDB4QjYsCi0JMHgwMiwgMHg0NSwgMHg1NSwgMHhCNiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4M0QsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLQkweDAyLCAweDQ3LCAweDU3LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlELCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDlFLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLQkweDFBLCAweDQzLCAweDUzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM1LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM5LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweDIwLCAweEU5LAotCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQkweDM1LCAweDQ5LCAweDUxLCAweEJELAotCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQkweDU3LCAweDI1LCAweDIwLCAweEU5LAotCi0JMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MjYsIDB4NzcsCi0KLQkweDI0LCAweDQ5LCAweDIwLCAweEU5LAotCTB4QTYsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDI2LCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDFDLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDU2LCAweEEwLCAweEU4LAotCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDI0LCAweDRGLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHgwMCwKLQkweDI0LCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4NjUsCi0JMHgyMywgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDY1LAotCTB4MjQsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHgyMywgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDFELCAweDI0LCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgxQywgMHgyQiwgMHhERSwgMHhFOCwKLQkweDIzLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgxQywgMHhCRCwKLQkweDNCLCAweEQ3LCAweDIzLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDRGLCAweDgwLCAweDRGLCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHhDRCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg0RSwgMHgzMywgMHg0RSwgMHhDRiwKLQkweDU3LCAweDNCLCAweDU3LCAweENGLAotCi0JMHg5NCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6ZltdID0gewotCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDUwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDUxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweENCLCAweDZCLAotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDQ5LCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDUxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDQ5LCAweDQxLCAweEMwLCAweEVDLAotCTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg1RCwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDA4LCAweDA0LAotCTB4MTAsIDB4MDQsCi0KLQkweDUxLCAweDQ5LCAweEMwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NEEsIDB4QkYsCi0JMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQotCTB4NEYsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDI2LCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0JMHgwMCwgMHhFMCwKLQkweDU5LCAweEUzLAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDNGLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDQ4LCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDI3LCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI3LCAweENGLCAweDc1LCAweEM2LAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDQ0LCAweDRDLCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCi0KLQkweDIwLCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDMxLCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEI0LAotCi0JMHgyQSwgMHg0NSwgMHg0RCwgMHhCNiwKLQkweDFBLCAweDQ1LCAweDU1LCAweEI2LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM4LCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzOSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKLQotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0JMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKLQotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0JMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKLQotCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDI2LCAweDc3LAotCi0JMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKLQkweEFBLCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDIzLCAweDRFLCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQkweDFELCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDU3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDY1LAotCTB4MjMsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHg2NSwKLQkweDI0LCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgyMywgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4RDMsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0JMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKLQotCTB4OTgsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3RnenNbXSA9IHsKLQotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhDQiwgMHg2QiwKLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDI5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg0OSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg1MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDM5LCAweDU3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEMwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4NjUsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgwOCwgMHgwNCwKLQkweDEwLCAweDA0LAotCi0JMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDRBLCAweEJGLAotCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDQ4LCAweEJELAotCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDQ5LCAweEJELAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDI2LCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDRGLCAweDM5LCAweDRGLCAweEJGLAotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0KLQkweDU3LCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDQyLCAweDczLCAweEY4LCAweEVDLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweEE1LCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDRCLCAweDRCLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCTB4MDAsIDB4RTAsCi0JMHg1OSwgMHhFMywKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDQ4LCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU2LCAweDNELCAweDU2LCAweERGLAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDRFLCAweDNGLCAweDRFLCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDRGLCAweDNGLCAweDRGLCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNELCAweDU3LCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHgyNywgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM4LCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEIyLAotCi0JMHgyOSwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDI3LCAweENGLCAweDc1LCAweEMwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNiwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQotCTB4MEEsIDB4NDUsIDB4NEQsIDB4QjAsCi0JMHgwMiwgMHg0NSwgMHg1NSwgMHhCMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDRELCAweEIyLAotCTB4MUEsIDB4NDUsIDB4NTUsIDB4QjIsCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEI0LAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjQsCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweEE3LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweEE4LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLQkweDAyLCAweDQ3LCAweDU3LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE0LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE1LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLQkweDFBLCAweDQzLCAweDUzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweEExLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweEEyLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweDIwLCAweEU5LAotCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQkweDM1LCAweDQ5LCAweDUxLCAweEJELAotCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQkweDU3LCAweDI1LCAweDIwLCAweEU5LAotCi0JMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MjYsIDB4NzcsCi0KLQkweDI0LCAweDQ5LCAweDIwLCAweEU5LAotCTB4QTIsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDI2LCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDFDLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDU2LCAweEEwLCAweEU4LAotCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDI0LCAweDRGLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHgwMCwKLQkweDI0LCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4NjUsCi0JMHgyMywgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDY1LAotCTB4MjQsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHgyMywgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDFELCAweDI0LCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgxQywgMHgyQiwgMHhERSwgMHhFOCwKLQkweDIzLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgxQywgMHhCRCwKLQkweDNCLCAweEQ3LCAweDIzLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDRGLCAweDgwLCAweDRGLCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHhDQSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg0RSwgMHgzMywgMHg0RSwgMHhDRiwKLQkweDU3LCAweDNCLCAweDU3LCAweENGLAotCi0JMHg5MCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6c2FbXSA9IHsKLQotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhDQiwgMHg2QiwKLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDI5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg0OSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg1MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDM5LCAweDU3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEMwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4NkEsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgwOCwgMHgwNCwKLQkweDEwLCAweDA0LAotCi0JMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDRBLCAweEJGLAotCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDQ4LCAweEJELAotCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDQ5LCAweEJELAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDI2LCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDRGLCAweDM5LCAweDRGLCAweEJGLAotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0KLQkweDVDLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDQyLCAweDczLCAweEY4LCAweEVDLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweEE1LCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDRCLCAweDRCLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCTB4MDAsIDB4RTAsCi0JMHg1OSwgMHhFMywKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDQ4LCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU2LCAweDNELCAweDU2LCAweERGLAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDRFLCAweDNGLCAweDRFLCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDRGLCAweDNGLCAweDRGLCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNELCAweDU3LCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHgyNywgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM4LCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEIyLAotCi0JMHgyRSwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDI3LCAweENGLCAweDc1LCAweEMwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNiwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQotCTB4MEEsIDB4NDUsIDB4NEQsIDB4QjAsCi0JMHgwMiwgMHg0NSwgMHg1NSwgMHhCMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDRELCAweEIyLAotCTB4MUEsIDB4NDUsIDB4NTUsIDB4QjIsCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEI0LAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjQsCi0KLQkweDI3LCAweENGLCAweDc0LCAweEM2LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlDLCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE4LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCNiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEI2LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDRFLCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ3LCAweDRGLCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTIsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDRCLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDM3LCAweDQ4LCAweDUwLCAweEJELAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCi0KLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCi0KLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0KLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCi0KLQkweDJCLCAweDQ4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgyNiwgMHg3NywKLQotCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0JMHg5RCwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MUMsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0JMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDAwLAotCTB4MjQsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHg2NSwKLQkweDIzLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4NjUsCi0JMHgyNCwgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDIzLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDFDLCAweDJCLCAweERFLCAweEU4LAotCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDFDLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweEM1LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDRFLCAweDMzLCAweDRFLCAweENGLAotCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCi0KLQkweDhCLCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3pzYWZbXSA9IHsKLQotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhDQiwgMHg2QiwKLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDI5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg0OSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg1MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDM5LCAweDU3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEMwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4NkUsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgwOCwgMHgwNCwKLQkweDEwLCAweDA0LAotCi0JMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDRBLCAweEJGLAotCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDQ4LCAweEJELAotCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDQ5LCAweEJELAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDI2LCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDRGLCAweDM5LCAweDRGLCAweEJGLAotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0KLQkweDYwLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDQyLCAweDczLCAweEY4LCAweEVDLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweEE1LCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDRCLCAweDRCLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCTB4MDAsIDB4RTAsCi0JMHg1OSwgMHhFMywKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDQ4LCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU2LCAweDNELCAweDU2LCAweERGLAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDRFLCAweDNGLCAweDRFLCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDRGLCAweDNGLCAweDRGLCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNELCAweDU3LCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHgyNywgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM4LCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEIyLAotCi0JMHgzMiwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDI3LCAweENGLCAweDc1LCAweEMwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNiwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQotCTB4MEEsIDB4NDUsIDB4NEQsIDB4QjAsCi0JMHgwMiwgMHg0NSwgMHg1NSwgMHhCMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDRELCAweEIyLAotCTB4MUEsIDB4NDUsIDB4NTUsIDB4QjIsCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEI0LAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjQsCi0KLQkweDI3LCAweENGLCAweDc0LCAweEM2LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlDLCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE4LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCNiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEI2LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NSwgMHg0RCwgMHhCNiwKLQkweDAyLCAweDQ1LCAweDU1LCAweEI2LAotCi0JMHgzRCwgMHhDRiwgMHg3NSwgMHhDNiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDRFLCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDNELCAweDIwLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzOSwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKLQotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0JMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKLQotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0JMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKLQotCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDI2LCAweDc3LAotCi0JMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKLQkweDk5LCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDIzLCAweDRFLCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQkweDFELCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDU3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDY1LAotCTB4MjMsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHg2NSwKLQkweDI0LCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgyMywgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4QzEsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0JMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKLQotCTB4ODcsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3RnenNmW10gPSB7Ci0KLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIyLCAweDQwLCAweDQ4LCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDQ5LCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4Q0IsIDB4NkIsCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NDksIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NTEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDZBLCAweDgwLCAweDE1LCAweEVBLAotCTB4MDgsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQotCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLQkweDI3LCAweDRBLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDFFLCAweDQ5LCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDI2LCAweDUxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDUwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDUxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDRFLCAweDMxLCAweDRFLCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCi0JMHg1QywgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQkweDAwLCAweEUwLAotCTB4NTksIDB4RTMsCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRCwgMHg1NywgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQotCTB4MkUsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgyNywgMHhDRiwgMHg3NSwgMHhDMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDNELCAweENGLCAweDc1LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEI0LAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjQsCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEIwLAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NSwgMHg0RCwgMHhCMiwKLQkweDFBLCAweDQ1LCAweDU1LCAweEIyLAotCi0JMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKLQkweDAyLCAweDQ1LCAweDU1LCAweEI0LAotCi0JMHgyNywgMHhDRiwgMHg3NSwgMHhDNiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEE3LCAweDMwLCAweDRGLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzMSwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDUsIDB4NEQsIDB4QjYsCi0JMHgxQSwgMHg0NSwgMHg1NSwgMHhCNiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE0LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE1LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLQkweDAyLCAweDQ3LCAweDU3LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEExLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEEyLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLQkweDFBLCAweDQzLCAweDUzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM1LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM5LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweDIwLCAweEU5LAotCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQkweDM1LCAweDQ5LCAweDUxLCAweEJELAotCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQkweDU3LCAweDI1LCAweDIwLCAweEU5LAotCi0JMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MjYsIDB4NzcsCi0KLQkweDI0LCAweDQ5LCAweDIwLCAweEU5LAotCTB4OUQsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDI2LCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDFDLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDU2LCAweEEwLCAweEU4LAotCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDI0LCAweDRGLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHgwMCwKLQkweDI0LCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4NjUsCi0JMHgyMywgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDY1LAotCTB4MjQsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHgyMywgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDFELCAweDI0LCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgxQywgMHgyQiwgMHhERSwgMHhFOCwKLQkweDIzLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgxQywgMHhCRCwKLQkweDNCLCAweEQ3LCAweDIzLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDRGLCAweDgwLCAweDRGLCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHhDNSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg0RSwgMHgzMywgMHg0RSwgMHhDRiwKLQkweDU3LCAweDNCLCAweDU3LCAweENGLAotCi0JMHg4QiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffd2FycC5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffd2FycC5jCmluZGV4IDY1MWI5M2MuLjlhYWQ0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3dhcnAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV93YXJwLmMKQEAgLTI3LDEzMiArMjcsMTA4IEBACiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaWhleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgIm1nYV9kcm0uaCIKICNpbmNsdWRlICJtZ2FfZHJ2LmgiCi0jaW5jbHVkZSAibWdhX3Vjb2RlLmgiCisKKyNkZWZpbmUgRklSTVdBUkVfRzIwMCAibWF0cm94L2cyMDBfd2FycC5mdyIKKyNkZWZpbmUgRklSTVdBUkVfRzQwMCAibWF0cm94L2c0MDBfd2FycC5mdyIKKworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX0cyMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX0c0MDApOwogCiAjZGVmaW5lIE1HQV9XQVJQX0NPREVfQUxJR04JCTI1NgkvKiBpbiBieXRlcyAqLwogCi0jZGVmaW5lIFdBUlBfVUNPREVfU0laRSggd2hpY2ggKQkJCQkJXAotCSgoc2l6ZW9mKHdoaWNoKSAvIE1HQV9XQVJQX0NPREVfQUxJR04gKyAxKSAqIE1HQV9XQVJQX0NPREVfQUxJR04pCi0KLSNkZWZpbmUgV0FSUF9VQ09ERV9JTlNUQUxMKCB3aGljaCwgd2hlcmUgKQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCURSTV9ERUJVRyggIiBwY2Jhc2UgPSAweCUwOGx4ICB2Y2Jhc2UgPSAlcFxuIiwgcGNiYXNlLCB2Y2Jhc2UgKTtcCi0JZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzW3doZXJlXSA9IHBjYmFzZTsJCQlcCi0JbWVtY3B5KCB2Y2Jhc2UsIHdoaWNoLCBzaXplb2Yod2hpY2gpICk7CQkJCVwKLQlwY2Jhc2UgKz0gV0FSUF9VQ09ERV9TSVpFKCB3aGljaCApOwkJCQlcCi0JdmNiYXNlICs9IFdBUlBfVUNPREVfU0laRSggd2hpY2ggKTsJCQkJXAotfSB3aGlsZSAoMCkKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZ2Ffd2FycF9nNDAwX21pY3JvY29kZV9zaXplID0KLSAgICAoV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3opICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3phKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6YWYpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3pmKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6cykgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnenNhKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6c2FmKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6c2YpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6KSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnemEpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6YWYpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6ZikgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3pzKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnenNhKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnenNhZikgKyBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3pzZikpOwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1nYV93YXJwX2cyMDBfbWljcm9jb2RlX3NpemUgPQotICAgIChXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RneikgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnemEpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3phZikgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnemYpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3pzKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6c2EpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3pzYWYpICsgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3pzZikpOwotCi11bnNpZ25lZCBpbnQgbWdhX3dhcnBfbWljcm9jb2RlX3NpemUoY29uc3QgZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKLXsKLQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JY2FzZSBNR0FfQ0FSRF9UWVBFX0c0MDA6Ci0JY2FzZSBNR0FfQ0FSRF9UWVBFX0c1NTA6Ci0JCXJldHVybiBQQUdFX0FMSUdOKG1nYV93YXJwX2c0MDBfbWljcm9jb2RlX3NpemUpOwotCWNhc2UgTUdBX0NBUkRfVFlQRV9HMjAwOgotCQlyZXR1cm4gUEFHRV9BTElHTihtZ2Ffd2FycF9nMjAwX21pY3JvY29kZV9zaXplKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbWdhX3dhcnBfaW5zdGFsbF9nNDAwX21pY3JvY29kZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQotewotCXVuc2lnbmVkIGNoYXIgKnZjYmFzZSA9IGRldl9wcml2LT53YXJwLT5oYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBwY2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+b2Zmc2V0OwotCi0JbWVtc2V0KGRldl9wcml2LT53YXJwX3BpcGVfcGh5cywgMCwgc2l6ZW9mKGRldl9wcml2LT53YXJwX3BpcGVfcGh5cykpOwotCi0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3osIE1HQV9XQVJQX1RHWik7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3pmLCBNR0FfV0FSUF9UR1pGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3RnemEsIE1HQV9XQVJQX1RHWkEpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6YWYsIE1HQV9XQVJQX1RHWkFGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3RnenMsIE1HQV9XQVJQX1RHWlMpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6c2YsIE1HQV9XQVJQX1RHWlNGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3RnenNhLCBNR0FfV0FSUF9UR1pTQSk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3pzYWYsIE1HQV9XQVJQX1RHWlNBRik7Ci0KLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3osIE1HQV9XQVJQX1QyR1opOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnemYsIE1HQV9XQVJQX1QyR1pGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3phLCBNR0FfV0FSUF9UMkdaQSk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Mmd6YWYsIE1HQV9XQVJQX1QyR1pBRik7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Mmd6cywgTUdBX1dBUlBfVDJHWlMpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnenNmLCBNR0FfV0FSUF9UMkdaU0YpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnenNhLCBNR0FfV0FSUF9UMkdaU0EpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnenNhZiwgTUdBX1dBUlBfVDJHWlNBRik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtZ2Ffd2FycF9pbnN0YWxsX2cyMDBfbWljcm9jb2RlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCi17Ci0JdW5zaWduZWQgY2hhciAqdmNiYXNlID0gZGV2X3ByaXYtPndhcnAtPmhhbmRsZTsKLQl1bnNpZ25lZCBsb25nIHBjYmFzZSA9IGRldl9wcml2LT53YXJwLT5vZmZzZXQ7Ci0KLQltZW1zZXQoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzLCAwLCBzaXplb2YoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzKSk7Ci0KLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nMjAwX3RneiwgTUdBX1dBUlBfVEdaKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nMjAwX3RnemYsIE1HQV9XQVJQX1RHWkYpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2cyMDBfdGd6YSwgTUdBX1dBUlBfVEdaQSk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzIwMF90Z3phZiwgTUdBX1dBUlBfVEdaQUYpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2cyMDBfdGd6cywgTUdBX1dBUlBfVEdaUyk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzIwMF90Z3pzZiwgTUdBX1dBUlBfVEdaU0YpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2cyMDBfdGd6c2EsIE1HQV9XQVJQX1RHWlNBKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nMjAwX3RnenNhZiwgTUdBX1dBUlBfVEdaU0FGKTsKLQotCXJldHVybiAwOwotfQorI2RlZmluZSBXQVJQX1VDT0RFX1NJWkUoc2l6ZSkJCUFMSUdOKHNpemUsIE1HQV9XQVJQX0NPREVfQUxJR04pCiAKIGludCBtZ2Ffd2FycF9pbnN0YWxsX21pY3JvY29kZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotCWNvbnN0IHVuc2lnbmVkIGludCBzaXplID0gbWdhX3dhcnBfbWljcm9jb2RlX3NpemUoZGV2X3ByaXYpOworCXVuc2lnbmVkIGNoYXIgKnZjYmFzZSA9IGRldl9wcml2LT53YXJwLT5oYW5kbGU7CisJdW5zaWduZWQgbG9uZyBwY2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+b2Zmc2V0OworCWNvbnN0IGNoYXIgKmZpcm13YXJlX25hbWU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKnJlYzsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlpbnQgbl9waXBlcywgd2hlcmU7CisJaW50IHJjID0gMDsKIAorCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIE1HQV9DQVJEX1RZUEVfRzQwMDoKKwljYXNlIE1HQV9DQVJEX1RZUEVfRzU1MDoKKwkJZmlybXdhcmVfbmFtZSA9IEZJUk1XQVJFX0c0MDA7CisJCW5fcGlwZXMgPSBNR0FfTUFYX0c0MDBfUElQRVM7CisJCWJyZWFrOworCWNhc2UgTUdBX0NBUkRfVFlQRV9HMjAwOgorCQlmaXJtd2FyZV9uYW1lID0gRklSTVdBUkVfRzIwMDsKKwkJbl9waXBlcyA9IE1HQV9NQVhfRzIwMF9QSVBFUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1nYV93YXJwIiwgMCwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihwZGV2KSkgeworCQlEUk1fRVJST1IoIm1nYTogRmFpbGVkIHRvIHJlZ2lzdGVyIG1pY3JvY29kZVxuIik7CisJCXJldHVybiBQVFJfRVJSKHBkZXYpOworCX0KKwlyYyA9IHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsIGZpcm13YXJlX25hbWUsICZwZGV2LT5kZXYpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCWlmIChyYykgeworCQlEUk1fRVJST1IoIm1nYTogRmFpbGVkIHRvIGxvYWQgbWljcm9jb2RlIFwiJXNcIlxuIiwKKwkJCSAgZmlybXdhcmVfbmFtZSk7CisJCXJldHVybiByYzsKKwl9CisKKwlzaXplID0gMDsKKwl3aGVyZSA9IDA7CisJZm9yIChyZWMgPSAoY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICopZnctPmRhdGE7CisJICAgICByZWM7CisJICAgICByZWMgPSBpaGV4X25leHRfYmlucmVjKHJlYykpIHsKKwkJc2l6ZSArPSBXQVJQX1VDT0RFX1NJWkUoYmUxNl90b19jcHUocmVjLT5sZW4pKTsKKwkJd2hlcmUrKzsKKwl9CisKKwlpZiAod2hlcmUgIT0gbl9waXBlcykgeworCQlEUk1fRVJST1IoIm1nYTogSW52YWxpZCBtaWNyb2NvZGUgXCIlc1wiXG4iLCBmaXJtd2FyZV9uYW1lKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJRFJNX0RFQlVHKCJNR0EgdWNvZGUgc2l6ZSA9ICVkIGJ5dGVzXG4iLCBzaXplKTsKIAlpZiAoc2l6ZSA+IGRldl9wcml2LT53YXJwLT5zaXplKSB7CiAJCURSTV9FUlJPUigibWljcm9jb2RlIHRvbyBsYXJnZSEgKCV1ID4gJWx1KVxuIiwKIAkJCSAgc2l6ZSwgZGV2X3ByaXYtPndhcnAtPnNpemUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CiAKLQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JY2FzZSBNR0FfQ0FSRF9UWVBFX0c0MDA6Ci0JY2FzZSBNR0FfQ0FSRF9UWVBFX0c1NTA6Ci0JCXJldHVybiBtZ2Ffd2FycF9pbnN0YWxsX2c0MDBfbWljcm9jb2RlKGRldl9wcml2KTsKLQljYXNlIE1HQV9DQVJEX1RZUEVfRzIwMDoKLQkJcmV0dXJuIG1nYV93YXJwX2luc3RhbGxfZzIwMF9taWNyb2NvZGUoZGV2X3ByaXYpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCW1lbXNldChkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMsIDAsIHNpemVvZihkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMpKTsKKworCXdoZXJlID0gMDsKKwlmb3IgKHJlYyA9IChjb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKilmdy0+ZGF0YTsKKwkgICAgIHJlYzsKKwkgICAgIHJlYyA9IGloZXhfbmV4dF9iaW5yZWMocmVjKSkgeworCQl1bnNpZ25lZCBpbnQgc3JjX3NpemUsIGRzdF9zaXplOworCisJCURSTV9ERUJVRygiIHBjYmFzZSA9IDB4JTA4bHggIHZjYmFzZSA9ICVwXG4iLCBwY2Jhc2UsIHZjYmFzZSk7CisJCWRldl9wcml2LT53YXJwX3BpcGVfcGh5c1t3aGVyZV0gPSBwY2Jhc2U7CisJCXNyY19zaXplID0gYmUxNl90b19jcHUocmVjLT5sZW4pOworCQlkc3Rfc2l6ZSA9IFdBUlBfVUNPREVfU0laRShzcmNfc2l6ZSk7CisJCW1lbWNweSh2Y2Jhc2UsIHJlYy0+ZGF0YSwgc3JjX3NpemUpOworCQlwY2Jhc2UgKz0gZHN0X3NpemU7CisJCXZjYmFzZSArPSBkc3Rfc2l6ZTsKKwkJd2hlcmUrKzsKIAl9CisKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gcmM7CiB9CiAKICNkZWZpbmUgV01JU0NfRVhQRUNURUQJCShNR0FfV1VDT0RFQ0FDSEVfRU5BQkxFIHwgTUdBX1dNQVNURVJfRU5BQkxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9jY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMKaW5kZXggYzc1ZmQzNS4uNGMzOWE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9jY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5jCkBAIC0yOSw2ICsyOSw5IEBACiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAicjEyOF9kcm0uaCIKQEAgLTM2LDUwICszOSw5IEBACiAKICNkZWZpbmUgUjEyOF9GSUZPX0RFQlVHCQkwCiAKLS8qIENDRSBtaWNyb2NvZGUgKGZyb20gQVRJKSAqLwotc3RhdGljIHUzMiByMTI4X2NjZV9taWNyb2NvZGVbXSA9IHsKLQkwLCAyNzY4Mzg0MDAsIDAsIDI2ODQ0OTc5MiwgMiwgMTQyLCAyLCAxNDUsIDAsIDEwNzY3NjU3MzEsIDAsCi0JMTYxNzAzOTk1MSwgMCwgNzc0NTkyODc3LCAwLCAxOTg3NTQwMjg2LCAwLCAyMzA3NDkwOTQ2VSwgMCwKLQk1OTk1NTg5MjUsIDAsIDU4OTUwNTMxNSwgMCwgNTk2NDg3MDkyLCAwLCA1ODk1MDUzMTUsIDEsCi0JMTE1NDQ1NzYsIDEsIDIwNjg0OCwgMSwgMzExMjk2LCAxLCAxOTg2NTYsIDIsIDkxMjI3MzQyMiwgMTEsCi0JMjYyMTQ0LCAwLCAwLCAxLCAzMzU1OTgzNywgMSwgNzQzOCwgMSwgMTQ4MDksIDEsIDY2MTUsIDEyLCAyOCwKLQkxLCA2NjE0LCAxMiwgMjgsIDIsIDIzLCAxMSwgMTg4NzQzNjgsIDAsIDE2NzkwOTIyLCAxLCA0MDk2MDAsIDksCi0JMzAsIDEsIDE0Nzg1NDc3MiwgMTYsIDQyMDQ4MzA3MiwgMywgODE5MiwgMCwgMTAyNDAsIDEsIDE5ODY1NiwKLQkxLCAxNTYzMCwgMSwgNTEyMDAsIDEwLCAzNDg1OCwgOSwgNDIsIDEsIDMzNTU5ODIzLCAyLCAxMDI3NiwgMSwKLQkxNTcxNywgMSwgMTU3MTgsIDIsIDQzLCAxLCAxNTkzNjk0OCwgMSwgNTcwNDgwODMxLCAxLCAxNDcxNTA3MSwKLQkxMiwgMzIyMTIzODMxLCAxLCAzMzk1MzEyNSwgMTIsIDU1LCAxLCAzMzU1OTkwOCwgMSwgMTU3MTgsIDIsCi0JNDYsIDQsIDIwOTkyNTgsIDEsIDUyNjMzNiwgMSwgNDQyNjIzLCA0LCA0MTk0MzY1LCAxLCA1MDk5NTIsIDEsCi0JNDU5MDA3LCAzLCAwLCAxMiwgOTIsIDIsIDQ2LCAxMiwgMTc2LCAxLCAxNTczNCwgMSwgMjA2ODQ4LCAxLAotCTE4NDMyLCAxLCAxMzMxMjAsIDEsIDEwMDY3MDczNCwgMSwgMTQ5NTA0LCAxLCAxNjU4ODgsIDEsCi0JMTU5NzU5MjgsIDEsIDEwNDg1NzYsIDYsIDMxNDU4MDYsIDEsIDE1NzE1LCAxNiwgMjE1MDY0NTIzMlUsIDIsCi0JMjY4NDQ5ODU5LCAyLCAxMDMwNywgMTIsIDE3NiwgMSwgMTU3MzQsIDEsIDE1NzM1LCAxLCAxNTYzMCwgMSwKLQkxNTYzMSwgMSwgNTI1MzEyMCwgNiwgMzE0NTgxMCwgMTYsIDIxNTA2NDUyMzJVLCAxLCAxNTg2NCwgMiwgODIsCi0JMSwgMzQzMzEwLCAxLCAxMDY0MjA3LCAyLCAzMTQ1ODEzLCAxLCAxNTcyOCwgMSwgNzgxNywgMSwgMTU3MjksCi0JMywgMTU3MzAsIDEyLCA5MiwgMiwgOTgsIDEsIDE2MTY4LCAxLCAxNjE2NywgMSwgMTYwMDIsIDEsIDE2MDA4LAotCTEsIDE1OTc0LCAxLCAxNTk3NSwgMSwgMTU5OTAsIDEsIDE1OTc2LCAxLCAxNTk3NywgMSwgMTU5ODAsIDAsCi0JMTU5ODEsIDEsIDEwMjQwLCAxLCA1MjUzMTIwLCAxLCAxNTcyMCwgMSwgMTk4NjU2LCA2LCAxMTAsIDEsCi0JMTgwMjI0LCAxLCAxMDM4MjQ3MzgsIDIsIDExMiwgMiwgMzE0NTgzOSwgMCwgNTM2ODg1NDQwLCAxLAotCTExNDg4MCwgMTQsIDEyNSwgMTIsIDIwNjk3NSwgMSwgMzM1NTk5OTUsIDEyLCAxOTg3ODQsIDAsCi0JMzM1NzAyMzYsIDEsIDE1ODAzLCAwLCAxNTgwNCwgMywgMjk0OTEyLCAxLCAyOTQ5MTIsIDMsIDQ0MjM3MCwKLQkxLCAxMTU0NDU3NiwgMCwgODExNjEyMTYwLCAxLCAxMjU5MzE1MiwgMSwgMTE1MzYzODQsIDEsCi0JMTQwMjQ3MDQsIDcsIDMxMDM4MjcyNiwgMCwgMTAyNDAsIDEsIDE0Nzk2LCAxLCAxNDc5NywgMSwgMTQ3OTMsCi0JMSwgMTQ3OTQsIDAsIDE0Nzk1LCAxLCAyNjg2NzkxNjgsIDEsIDk0MzcxODQsIDEsIDI2ODQ0OTc5MiwgMSwKLQkxOTg2NTYsIDEsIDk0NTI4MjcsIDEsIDEwNzU4NTQ2MDIsIDEsIDEwNzU4NTQ2MDMsIDEsIDU1NzA1NiwgMSwKLQkxMTQ4ODAsIDE0LCAxNTksIDEyLCAxOTg3ODQsIDEsIDExMDk0MDkyMTMsIDEyLCAxOTg3ODMsIDEsCi0JMTEwNzMxMjA1OSwgMTIsIDE5ODc4NCwgMSwgMTEwOTQwOTIxMiwgMiwgMTYyLCAxLCAxMDc1ODU0NzgxLCAxLAotCTEwNzM3NTc2MjcsIDEsIDEwNzU4NTQ3ODAsIDEsIDU0MDY3MiwgMSwgMTA0ODU3NjAsIDYsIDMxNDU4OTQsCi0JMTYsIDI3NDc0MTI0OCwgOSwgMTY4LCAzLCA0MTk0MzA0LCAzLCA0MjA5OTQ5LCAwLCAwLCAwLCAyNTYsIDE0LAotCTE3NCwgMSwgMTE0ODU3LCAxLCAzMzU2MDAwNywgMTIsIDE3NiwgMCwgMTAyNDAsIDEsIDExNDg1OCwgMSwKLQkzMzU2MDAxOCwgMSwgMTE0ODU3LCAzLCAzMzU2MDAwNywgMSwgMTYwMDgsIDEsIDExNDg3NCwgMSwKLQkzMzU2MDM2MCwgMSwgMTE0ODc1LCAxLCAzMzU2MDE1NCwgMCwgMTU5NjMsIDAsIDI1NiwgMCwgNDA5NiwgMSwKLQk0MDk2MTEsIDksIDE4OCwgMCwgMTAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLX07CisjZGVmaW5lIEZJUk1XQVJFX05BTUUJCSJyMTI4L3IxMjhfY2NlLmJpbiIKKworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX05BTUUpOwogCiBzdGF0aWMgaW50IFIxMjhfUkVBRF9QTEwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKQogewpAQCAtMTc2LDIwICsxMzgsNTAgQEAKICAqLwogCiAvKiBMb2FkIHRoZSBtaWNyb2NvZGUgZm9yIHRoZSBDQ0UgKi8KLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2xvYWRfbWljcm9jb2RlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIGludCByMTI4X2NjZV9sb2FkX21pY3JvY29kZShkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQogewotCWludCBpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBfX2JlMzIgKmZ3X2RhdGE7CisJaW50IHJjLCBpOwogCiAJRFJNX0RFQlVHKCJcbiIpOwogCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInIxMjhfY2NlIiwgMCwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihwZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgInIxMjhfY2NlOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKKwl9CisJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgRklSTVdBUkVfTkFNRSwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAicjEyOF9jY2U6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIEZJUk1XQVJFX05BTUUpOworCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKGZ3LT5zaXplICE9IDI1NiAqIDgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicjEyOF9jY2U6IEJvZ3VzIGxlbmd0aCAlenUgaW4gZmlybXdhcmUgXCIlc1wiXG4iLAorCQkgICAgICAgZnctPnNpemUsIEZJUk1XQVJFX05BTUUpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCiAJcjEyOF9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKIAorCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopZnctPmRhdGE7CiAJUjEyOF9XUklURShSMTI4X1BNNF9NSUNST0NPREVfQUREUiwgMCk7CiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCVIxMjhfV1JJVEUoUjEyOF9QTTRfTUlDUk9DT0RFX0RBVEFILCByMTI4X2NjZV9taWNyb2NvZGVbaSAqIDJdKTsKKwkJUjEyOF9XUklURShSMTI4X1BNNF9NSUNST0NPREVfREFUQUgsCisJCQkgICBiZTMyX3RvX2NwdXAoJmZ3X2RhdGFbaSAqIDJdKSk7CiAJCVIxMjhfV1JJVEUoUjEyOF9QTTRfTUlDUk9DT0RFX0RBVEFMLAotCQkJICAgcjEyOF9jY2VfbWljcm9jb2RlW2kgKiAyICsgMV0pOworCQkJICAgYmUzMl90b19jcHVwKCZmd19kYXRhW2kgKiAyICsgMV0pKTsKIAl9CisKK291dF9yZWxlYXNlOgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCXJldHVybiByYzsKIH0KIAogLyogRmx1c2ggYW55IHBlbmRpbmcgY29tbWFuZHMgdG8gdGhlIENDRS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBqdXN0CkBAIC0zNTAsOSArMzQyLDE1IEBACiBzdGF0aWMgaW50IHIxMjhfZG9faW5pdF9jY2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGRybV9yMTI4X2luaXRfdCAqIGluaXQpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdjsKKwlpbnQgcmM7CiAKIAlEUk1fREVCVUcoIlxuIik7CiAKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlEUk1fREVCVUcoImNhbGxlZCB3aGVuIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlkZXZfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKGRybV9yMTI4X3ByaXZhdGVfdCksIEdGUF9LRVJORUwpOwogCWlmIChkZXZfcHJpdiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU3NSwxMyArNTczLDE4IEBACiAjZW5kaWYKIAogCXIxMjhfY2NlX2luaXRfcmluZ19idWZmZXIoZGV2LCBkZXZfcHJpdik7Ci0JcjEyOF9jY2VfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOworCXJjID0gcjEyOF9jY2VfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOwogCiAJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAKIAlyMTI4X2RvX2VuZ2luZV9yZXNldChkZXYpOwogCi0JcmV0dXJuIDA7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUhXG4iKTsKKwkJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOworCX0KKworCXJldHVybiByYzsKIH0KIAogaW50IHIxMjhfZG9fY2xlYW51cF9jY2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCkBAIC02NDksNiArNjUyLDggQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwogCWlmIChkZXZfcHJpdi0+Y2NlX3J1bm5pbmcgfHwgZGV2X3ByaXYtPmNjZV9tb2RlID09IFIxMjhfUE00X05PTlBNNCkgewogCQlEUk1fREVCVUcoIndoaWxlIENDRSBydW5uaW5nXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC02NzEsNiArNjc2LDggQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwogCS8qIEZsdXNoIGFueSBwZW5kaW5nIENDRSBjb21tYW5kcy4gIFRoaXMgZW5zdXJlcyBhbnkgb3V0c3RhbmRpbmcKIAkgKiBjb21tYW5kcyBhcmUgZXhlY3R1dGVkIGJ5IHRoZSBlbmdpbmUgYmVmb3JlIHdlIHR1cm4gaXQgb2ZmLgogCSAqLwpAQCAtNzA4LDEwICs3MTUsNyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0RFQlVHKCJjYWxsZWQgYmVmb3JlIGluaXQgZG9uZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCXIxMjhfZG9fY2NlX3Jlc2V0KGRldl9wcml2KTsKIApAQCAtNzI4LDYgKzczMiw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlpZiAoZGV2X3ByaXYtPmNjZV9ydW5uaW5nKSB7CiAJCXIxMjhfZG9fY2NlX2ZsdXNoKGRldl9wcml2KTsKIAl9CkBAIC03NDEsNiArNzQ3LDggQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldi0+ZGV2X3ByaXZhdGUpOworCiAJcmV0dXJuIHIxMjhfZG9fZW5naW5lX3Jlc2V0KGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCmluZGV4IDc5N2EyNmMuLjNjNjA4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaApAQCAtNDIyLDYgKzQyMiwxNCBAQAogICogTWlzYyBoZWxwZXIgbWFjcm9zCiAgKi8KIAorI2RlZmluZSBERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKF9kZXZfcHJpdikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoIV9kZXZfcHJpdikgewkJCQkJCVwKKwkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWRybV9yMTI4X3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmc7IGludCBpOwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCmluZGV4IDAyNmE0OGMuLmFmMjY2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKQEAgLTEyNDQsMTQgKzEyNDQsMTggQEAKIHN0YXRpYyBpbnQgcjEyOF9jY2VfY2xlYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXY7CiAJZHJtX3IxMjhfY2xlYXJfdCAqY2xlYXIgPSBkYXRhOwogCURSTV9ERUJVRygiXG4iKTsKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwogCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKKwlzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisKIAlpZiAoc2FyZWFfcHJpdi0+bmJveCA+IFIxMjhfTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlzYXJlYV9wcml2LT5uYm94ID0gUjEyOF9OUl9TQVJFQV9DTElQUkVDVFM7CiAKQEAgLTEzMTIsNiArMTMxNiw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJaWYgKCFkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykKQEAgLTEzMzEsNiArMTMzNyw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBSMTI4X05SX1NBUkVBX0NMSVBSRUNUUykKQEAgLTEzNTQsMTAgKzEzNjIsNyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCURSTV9ERUJVRygicGlkPSVkIGluZGV4PSVkIGNvdW50PSVkIGRpc2NhcmQ9JWRcbiIsCiAJCSAgRFJNX0NVUlJFTlRQSUQsIHZlcnRleC0+aWR4LCB2ZXJ0ZXgtPmNvdW50LCB2ZXJ0ZXgtPmRpc2NhcmQpOwpAQCAtMTQxMCwxMCArMTQxNSw3IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JaWYgKCFkZXZfcHJpdikgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJRFJNX0RFQlVHKCJwaWQ9JWQgYnVmPSVkIHM9JWQgZT0lZCBkPSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCwKIAkJICBlbHRzLT5pZHgsIGVsdHMtPnN0YXJ0LCBlbHRzLT5lbmQsIGVsdHMtPmRpc2NhcmQpOwpAQCAtMTQ3Niw2ICsxNDc4LDggQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwogCURSTV9ERUJVRygicGlkPSVkIGluZGV4PSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCwgYmxpdC0+aWR4KTsKIAogCWlmIChibGl0LT5pZHggPCAwIHx8IGJsaXQtPmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgewpAQCAtMTUwMSw2ICsxNTA1LDggQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwogCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKIAlyZXQgPSAtRUlOVkFMOwpAQCAtMTUzMSw2ICsxNTM3LDggQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwogCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJm1hc2ssIHN0aXBwbGUtPm1hc2ssIDMyICogc2l6ZW9mKHUzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTU1NSwxMCArMTU2Myw3IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JaWYgKCFkZXZfcHJpdikgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJRFJNX0RFQlVHKCJpZHg9JWQgcz0lZCBlPSVkIGQ9JWRcbiIsCiAJCSAgaW5kaXJlY3QtPmlkeCwgaW5kaXJlY3QtPnN0YXJ0LCBpbmRpcmVjdC0+ZW5kLApAQCAtMTYyMCwxMCArMTYyNSw3IEBACiAJZHJtX3IxMjhfZ2V0cGFyYW1fdCAqcGFyYW0gPSBkYXRhOwogCWludCB2YWx1ZTsKIAotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCURSTV9ERUJVRygicGlkPSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwppbmRleCAyMTY4ZDY3Li41OTgyMzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIERSTV9SQURFT05fS01TCiAJYm9vbCAiRW5hYmxlIG1vZGVzZXR0aW5nIG9uIHJhZGVvbiBieSBkZWZhdWx0IgogCWRlcGVuZHMgb24gRFJNX1JBREVPTgotCXNlbGVjdCBEUk1fVFRNCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGtlcm5lbCBtb2Rlc2V0dGluZyBlbmFibGVkIGJ5IGRlZmF1bHQsCiAJICBhbmQgeW91IGhhdmUgYSBuZXcgZW5vdWdoIHVzZXJzcGFjZSB0byBzdXBwb3J0IHRoaXMuIFJ1bm5pbmcgb2xkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCAwMTNkMzgwLi4wOWEyODkyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCkBAIC0zLDE4ICszLDUzIEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQorCitob3N0cHJvZ3MteSA6PSBta3JlZ3RhYmxlCisKK3F1aWV0X2NtZF9ta3JlZ3RhYmxlID0gTUtSRUdUQUJMRSAkQAorICAgICAgY21kX21rcmVndGFibGUgPSAkKG9iaikvbWtyZWd0YWJsZSAkPCA+ICRACisKKyQob2JqKS9ybjUwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9ybjUwICQob2JqKS9ta3JlZ3RhYmxlCisJJChjYWxsIGlmX2NoYW5nZWQsbWtyZWd0YWJsZSkKKworJChvYmopL3IxMDBfcmVnX3NhZmUuaDogJChzcmMpL3JlZ19zcmNzL3IxMDAgJChvYmopL21rcmVndGFibGUKKwkkKGNhbGwgaWZfY2hhbmdlZCxta3JlZ3RhYmxlKQorCiskKG9iaikvcjIwMF9yZWdfc2FmZS5oOiAkKHNyYykvcmVnX3NyY3MvcjIwMCAkKG9iaikvbWtyZWd0YWJsZQorCSQoY2FsbCBpZl9jaGFuZ2VkLG1rcmVndGFibGUpCisKKyQob2JqKS9ydjUxNV9yZWdfc2FmZS5oOiAkKHNyYykvcmVnX3NyY3MvcnY1MTUgJChvYmopL21rcmVndGFibGUKKwkkKGNhbGwgaWZfY2hhbmdlZCxta3JlZ3RhYmxlKQorCiskKG9iaikvcjMwMF9yZWdfc2FmZS5oOiAkKHNyYykvcmVnX3NyY3MvcjMwMCAkKG9iaikvbWtyZWd0YWJsZQorCSQoY2FsbCBpZl9jaGFuZ2VkLG1rcmVndGFibGUpCisKKyQob2JqKS9yczYwMF9yZWdfc2FmZS5oOiAkKHNyYykvcmVnX3NyY3MvcnM2MDAgJChvYmopL21rcmVndGFibGUKKwkkKGNhbGwgaWZfY2hhbmdlZCxta3JlZ3RhYmxlKQorCiskKG9iaikvcjEwMC5vOiAkKG9iaikvcjEwMF9yZWdfc2FmZS5oICQob2JqKS9ybjUwX3JlZ19zYWZlLmgKKworJChvYmopL3IyMDAubzogJChvYmopL3IyMDBfcmVnX3NhZmUuaAorCiskKG9iaikvcnY1MTUubzogJChvYmopL3J2NTE1X3JlZ19zYWZlLmgKKworJChvYmopL3IzMDAubzogJChvYmopL3IzMDBfcmVnX3NhZmUuaAorCiskKG9iaikvcnM2MDAubzogJChvYmopL3JzNjAwX3JlZ19zYWZlLmgKKwogcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyBcCiAJcmFkZW9uX2lycS5vIHIzMDBfY21kYnVmLm8gcjYwMF9jcC5vCi0KLXJhZGVvbi0kKENPTkZJR19EUk1fUkFERU9OX0tNUykgKz0gcmFkZW9uX2RldmljZS5vIHJhZGVvbl9rbXMubyBcCisjIGFkZCBLTVMgZHJpdmVyCityYWRlb24teSArPSByYWRlb25fZGV2aWNlLm8gcmFkZW9uX2ttcy5vIFwKIAlyYWRlb25fYXRvbWJpb3MubyByYWRlb25fYWdwLm8gYXRvbWJpb3NfY3J0Yy5vIHJhZGVvbl9jb21iaW9zLm8gXAogCWF0b20ubyByYWRlb25fZmVuY2UubyByYWRlb25fdHRtLm8gcmFkZW9uX29iamVjdC5vIHJhZGVvbl9nYXJ0Lm8gXAogCXJhZGVvbl9sZWdhY3lfY3J0Yy5vIHJhZGVvbl9sZWdhY3lfZW5jb2RlcnMubyByYWRlb25fY29ubmVjdG9ycy5vIFwKIAlyYWRlb25fZW5jb2RlcnMubyByYWRlb25fZGlzcGxheS5vIHJhZGVvbl9jdXJzb3IubyByYWRlb25faTJjLm8gXAogCXJhZGVvbl9jbG9ja3MubyByYWRlb25fZmIubyByYWRlb25fZ2VtLm8gcmFkZW9uX3JpbmcubyByYWRlb25faXJxX2ttcy5vIFwKIAlyYWRlb25fY3MubyByYWRlb25fYmlvcy5vIHJhZGVvbl9iZW5jaG1hcmsubyByMTAwLm8gcjMwMC5vIHI0MjAubyBcCi0JcnM0MDAubyByczYwMC5vIHJzNjkwLm8gcnY1MTUubyByNTIwLm8gcjYwMC5vIHJzNzgwLm8gcnY3NzAubyBcCi0JcmFkZW9uX3Rlc3QubworCXJzNDAwLm8gcnM2MDAubyByczY5MC5vIHJ2NTE1Lm8gcjUyMC5vIHI2MDAubyBydjc3MC5vIHJhZGVvbl90ZXN0Lm8gXAorCXIyMDAubyByYWRlb25fbGVnYWN5X3R2Lm8gcjYwMF9jcy5vIHI2MDBfYmxpdC5vIHI2MDBfYmxpdF9zaGFkZXJzLm8gXAorCXI2MDBfYmxpdF9rbXMubwogCiByYWRlb24tJChDT05GSUdfQ09NUEFUKSArPSByYWRlb25faW9jMzIubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKaW5kZXggY2Y2NzkyOC4uNWQ0MDIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaApAQCAtMjM3NCw2ICsyMzc0LDE3IEBACiAJQVRPTV9NT0RFX1RJTUlORyBhTW9kZVRpbWluZ3NbTUFYX1NVUFBPUlRFRF9UVl9USU1JTkddOwogfSBBVE9NX0FOQUxPR19UVl9JTkZPOwogCisjZGVmaW5lIE1BWF9TVVBQT1JURURfVFZfVElNSU5HX1YxXzIgICAgMworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9BTkFMT0dfVFZfSU5GT19WMV8yIHsKKwlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNUVl9TdXBwb3J0ZWRTdGFuZGFyZDsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNUVl9Cb290VXBEZWZhdWx0U3RhbmRhcmQ7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjRXh0X1RWX0FTSUNfSUQ7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjRXh0X1RWX0FTSUNfU2xhdmVBZGRyOworCUFUT01fRFREX0ZPUk1BVCAgICAgICAgICBhTW9kZVRpbWluZ3NbTUFYX1NVUFBPUlRFRF9UVl9USU1JTkddOworfSBBVE9NX0FOQUxPR19UVl9JTkZPX1YxXzI7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBWUkFNIHVzYWdlIGFuZCB0aGVpciBkZWZpbnRpb25zICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKaW5kZXggNzRkMDM0Zi4uNmEwMTU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKQEAgLTMxLDYgKzMxLDEwIEBACiAjaW5jbHVkZSAiYXRvbS5oIgogI2luY2x1ZGUgImF0b20tYml0cy5oIgogCisvKiBldmlsIGJ1dCBpbmNsdWRpbmcgYXRvbWJpb3MuaCBpcyBtdWNoIHdvcnNlICovCitib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCisJCQkJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqY3J0Y190aW1pbmcsCisJCQkJaW50MzJfdCAqcGl4ZWxfY2xvY2spOwogc3RhdGljIHZvaWQgYXRvbWJpb3Nfb3ZlcnNjYW5fc2V0dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCkBAIC04OSwxNyArOTMsMzIgQEAKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CiAJRU5BQkxFX1NDQUxFUl9QU19BTExPQ0FUSU9OIGFyZ3M7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgRW5hYmxlU2NhbGVyKTsKKwogCS8qIGZpeG1lIC0gZmlsbCBpbiBlbmNfcHJpdiBmb3IgYXRvbSBkYWMgKi8KIAllbnVtIHJhZGVvbl90dl9zdGQgdHZfc3RkID0gVFZfU1REX05UU0M7CisJYm9vbCBpc190diA9IGZhbHNlLCBpc19jdiA9IGZhbHNlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAogCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSAmJiByYWRlb25fY3J0Yy0+Y3J0Y19pZCkKIAkJcmV0dXJuOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJLyogZmluZCB0diBzdGQgKi8KKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkgeworCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCXR2X3N0ZCA9IHR2X2RhYy0+dHZfc3RkOworCQkJCWlzX3R2ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKwogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCWFyZ3MudWNTY2FsZXIgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKIAotCWlmIChyYWRlb25fY3J0Yy0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkgeworCWlmIChpc190dikgewogCQlzd2l0Y2ggKHR2X3N0ZCkgewogCQljYXNlIFRWX1NURF9OVFNDOgogCQlkZWZhdWx0OgpAQCAtMTI4LDcgKzE0Nyw3IEBACiAJCQlicmVhazsKIAkJfQogCQlhcmdzLnVjRW5hYmxlID0gU0NBTEVSX0VOQUJMRV9NVUxUSVRBUF9NT0RFOwotCX0gZWxzZSBpZiAocmFkZW9uX2NydGMtPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpIHsKKwl9IGVsc2UgaWYgKGlzX2N2KSB7CiAJCWFyZ3MudWNUVlN0YW5kYXJkID0gQVRPTV9UVl9DVjsKIAkJYXJncy51Y0VuYWJsZSA9IFNDQUxFUl9FTkFCTEVfTVVMVElUQVBfTU9ERTsKIAl9IGVsc2UgewpAQCAtMTUxLDkgKzE3MCw5IEBACiAJCX0KIAl9CiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Ci0JaWYgKHJhZGVvbl9jcnRjLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9UVl9TVVBQT1JUKQotCSAgICAmJiByZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSAmJiByZGV2LT5mYW1pbHkgPD0gQ0hJUF9SVjU3MCkgewotCQlhdG9tX3J2NTE1X2ZvcmNlX3R2X3NjYWxlcihyZGV2KTsKKwlpZiAoKGlzX3R2IHx8IGlzX2N2KQorCSAgICAmJiByZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSAmJiByZGV2LT5mYW1pbHkgPD0gQ0hJUF9SNTgwKSB7CisJCWF0b21fcnY1MTVfZm9yY2VfdHZfc2NhbGVyKHJkZXYsIHJhZGVvbl9jcnRjKTsKIAl9CiB9CiAKQEAgLTM3MCw2ICszODksNyBAQAogCQkJCQlwbGxfZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCX0KIAkJCXJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtNDY4LDYgKzQ4OCwxMSBAQAogCX0KIAogCXN3aXRjaCAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlmYl9mb3JtYXQgPQorCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfOEJQUCB8CisJCSAgICBBVklWT19EMUdSUEhfQ09OVFJPTF84QlBQX0lOREVYRUQ7CisJCWJyZWFrOwogCWNhc2UgMTU6CiAJCWZiX2Zvcm1hdCA9CiAJCSAgICBBVklWT19EMUdSUEhfQ09OVFJPTF9ERVBUSF8xNkJQUCB8CkBAIC01NTEsNDIgKzU3Niw2OCBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBjcnRjX3RpbWluZzsKKwlpbnQgbmVlZF90dl90aW1pbmdzID0gMDsKKwlib29sIHJldDsKIAogCS8qIFRPRE8gY29sb3IgdGlsaW5nICovCiAJbWVtc2V0KCZjcnRjX3RpbWluZywgMCwgc2l6ZW9mKGNydGNfdGltaW5nKSk7CiAKLQkvKiBUT0RPIHR2ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJLyogZmluZCB0diBzdGQgKi8KKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCisJCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiBBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSB7CisJCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCQkJaWYgKHR2X2RhYykgeworCQkJCQlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkJCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkJCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSkKKwkJCQkJCW5lZWRfdHZfdGltaW5ncyA9IDE7CisJCQkJCWVsc2UKKwkJCQkJCW5lZWRfdHZfdGltaW5ncyA9IDI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQogCX0KIAogCWNydGNfdGltaW5nLnVjQ1JUQyA9IHJhZGVvbl9jcnRjLT5jcnRjX2lkOwotCWNydGNfdGltaW5nLnVzSF9Ub3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsOwotCWNydGNfdGltaW5nLnVzSF9EaXNwID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQljcnRjX3RpbWluZy51c0hfU3luY1N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQljcnRjX3RpbWluZy51c0hfU3luY1dpZHRoID0KLQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0OworCWlmIChuZWVkX3R2X3RpbWluZ3MpIHsKKwkJcmV0ID0gcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgbmVlZF90dl90aW1pbmdzIC0gMSwKKwkJCQkJCSAmY3J0Y190aW1pbmcsICZhZGp1c3RlZF9tb2RlLT5jbG9jayk7CisJCWlmIChyZXQgPT0gZmFsc2UpCisJCQluZWVkX3R2X3RpbWluZ3MgPSAwOworCX0KIAotCWNydGNfdGltaW5nLnVzVl9Ub3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsOwotCWNydGNfdGltaW5nLnVzVl9EaXNwID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQljcnRjX3RpbWluZy51c1ZfU3luY1N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQljcnRjX3RpbWluZy51c1ZfU3luY1dpZHRoID0KLQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OworCWlmICghbmVlZF90dl90aW1pbmdzKSB7CisJCWNydGNfdGltaW5nLnVzSF9Ub3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsOworCQljcnRjX3RpbWluZy51c0hfRGlzcCA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7CisJCWNydGNfdGltaW5nLnVzSF9TeW5jU3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0OworCQljcnRjX3RpbWluZy51c0hfU3luY1dpZHRoID0KKwkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKIAotCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9WU1lOQ19QT0xBUklUWTsKKwkJY3J0Y190aW1pbmcudXNWX1RvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWw7CisJCWNydGNfdGltaW5nLnVzVl9EaXNwID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKKwkJY3J0Y190aW1pbmcudXNWX1N5bmNTdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQ7CisJCWNydGNfdGltaW5nLnVzVl9TeW5jV2lkdGggPQorCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OwogCi0JaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX0hTWU5DX1BPTEFSSVRZOworCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKKwkJCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX1ZTWU5DX1BPTEFSSVRZOwogCi0JaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19DU1lOQykKLQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKIAotCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQotCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9JTlRFUkxBQ0U7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfQ1NZTkMpCisJCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9DT01QT1NJVEVTWU5DOwogCi0JaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQotCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9JTlRFUkxBQ0U7CisKKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fRE9VQkxFX0NMT0NLX01PREU7CisJfQogCiAJYXRvbWJpb3NfY3J0Y19zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwogCWF0b21iaW9zX2NydGNfc2V0X3RpbWluZyhjcnRjLCAmY3J0Y190aW1pbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiOTJjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBBVklWT0RfSAorI2RlZmluZSBBVklWT0RfSAorCisKKyNkZWZpbmUJRDFDUlRDX0NPTlRST0wJCQkJCTB4NjA4MAorI2RlZmluZQkJQ1JUQ19FTgkJCQkJCSgxIDw8IDApCisjZGVmaW5lCUQxQ1JUQ19VUERBVEVfTE9DSwkJCQkweDYwRTgKKyNkZWZpbmUJRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTCQkJMHg2MTEwCisjZGVmaW5lCUQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTCQkweDYxMTgKKworI2RlZmluZQlEMkNSVENfQ09OVFJPTAkJCQkJMHg2ODgwCisjZGVmaW5lCUQyQ1JUQ19VUERBVEVfTE9DSwkJCQkweDY4RTgKKyNkZWZpbmUJRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTCQkJMHg2OTEwCisjZGVmaW5lCUQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTCQkweDY5MTgKKworI2RlZmluZQlEMVZHQV9DT05UUk9MCQkJCQkweDAzMzAKKyNkZWZpbmUJCURWR0FfQ09OVFJPTF9NT0RFX0VOQUJMRQkJCSgxIDw8IDApCisjZGVmaW5lCQlEVkdBX0NPTlRST0xfVElNSU5HX1NFTEVDVAkJCSgxIDw8IDgpCisjZGVmaW5lCQlEVkdBX0NPTlRST0xfU1lOQ19QT0xBUklUWV9TRUxFQ1QJCSgxIDw8IDkpCisjZGVmaW5lCQlEVkdBX0NPTlRST0xfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVAkJKDEgPDwgMTApCisjZGVmaW5lCQlEVkdBX0NPTlRST0xfT1ZFUlNDQU5fQ09MT1JfRU4JCQkoMSA8PCAxNikKKyNkZWZpbmUJCURWR0FfQ09OVFJPTF9ST1RBVEUJCQkJKDEgPDwgMjQpCisjZGVmaW5lIEQyVkdBX0NPTlRST0wJCQkJCTB4MDMzOAorCisjZGVmaW5lCVZHQV9IRFBfQ09OVFJPTAkJCQkJMHgzMjgKKyNkZWZpbmUJCVZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4JCQkJKDEgPDwgMCkKKyNkZWZpbmUJCVZHQV9NRU1PUllfRElTQUJMRQkJCQkoMSA8PCA0KQorI2RlZmluZQkJVkdBX1JCQk1fTE9DS19ESVNBQkxFCQkJCSgxIDw8IDgpCisjZGVmaW5lCQlWR0FfU09GVF9SRVNFVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lCVZHQV9NRU1PUllfQkFTRV9BRERSRVNTCQkJCTB4MDMxMAorI2RlZmluZQlWR0FfUkVOREVSX0NPTlRST0wJCQkJMHgwMzAwCisjZGVmaW5lCQlWR0FfVlNUQVRVU19DTlRMX01BU0sJCQkJMHgwMDAzMDAwMAorCisvKiBBVklWTyBkaXNhYmxlIFZHQSByZW5kZXJpbmcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB2Z2FfcmVuZGVyOworCXZnYV9yZW5kZXIgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKKwl2Z2FfcmVuZGVyICY9IH5WR0FfVlNUQVRVU19DTlRMX01BU0s7CisJV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgdmdhX3JlbmRlcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL21rcmVndGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIxMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKQEAgLTAsMCArMSw3MjAgQEAKKy8qIHV0aWxpdHkgdG8gY3JlYXRlIHRoZSByZWdpc3RlciBjaGVjayB0YWJsZXMKKyAqIHRoaXMgaW5jbHVkZXMgaW5saW5lZCBsaXN0Lmggc2FmZSBmb3IgdXNlcnNwYWNlLgorICoKKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UKKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAJSmVyb21lIEdsaXNzZQorICogCURhdmUgQWlybGllCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKworI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKKy8qKgorICogY29udGFpbmVyX29mIC0gY2FzdCBhIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvdXQgdG8gdGhlIGNvbnRhaW5pbmcgc3RydWN0dXJlCisgKiBAcHRyOiAgICB0aGUgcG9pbnRlciB0byB0aGUgbWVtYmVyLgorICogQHR5cGU6ICAgdGhlIHR5cGUgb2YgdGhlIGNvbnRhaW5lciBzdHJ1Y3QgdGhpcyBpcyBlbWJlZGRlZCBpbi4KKyAqIEBtZW1iZXI6IHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICovCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsgICAgICAgICAgXAorCWNvbnN0IHR5cGVvZigoKHR5cGUgKikwKS0+bWVtYmVyKSpfX21wdHIgPSAocHRyKTsgICAgXAorCQkgICAgICh0eXBlICopKChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSwgbWVtYmVyKSk7IH0pCisKKy8qCisgKiBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uLgorICoKKyAqIFNvbWUgb2YgdGhlIGludGVybmFsIGZ1bmN0aW9ucyAoIl9feHh4IikgYXJlIHVzZWZ1bCB3aGVuCisgKiBtYW5pcHVsYXRpbmcgd2hvbGUgbGlzdHMgcmF0aGVyIHRoYW4gc2luZ2xlIGVudHJpZXMsIGFzCisgKiBzb21ldGltZXMgd2UgYWxyZWFkeSBrbm93IHRoZSBuZXh0L3ByZXYgZW50cmllcyBhbmQgd2UgY2FuCisgKiBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBieSB1c2luZyB0aGVtIGRpcmVjdGx5IHJhdGhlciB0aGFuCisgKiB1c2luZyB0aGUgZ2VuZXJpYyBzaW5nbGUtZW50cnkgcm91dGluZXMuCisgKi8KKworc3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9OworCisjZGVmaW5lIExJU1RfSEVBRF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9CisKKyNkZWZpbmUgTElTVF9IRUFEKG5hbWUpIFwKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5hbWUgPSBMSVNUX0hFQURfSU5JVChuYW1lKQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVF9MSVNUX0hFQUQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlsaXN0LT5uZXh0ID0gbGlzdDsKKwlsaXN0LT5wcmV2ID0gbGlzdDsKK30KKworLyoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBjb25zZWN1dGl2ZSBlbnRyaWVzLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KKyNpZm5kZWYgQ09ORklHX0RFQlVHX0xJU1QKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCit7CisJbmV4dC0+cHJldiA9IG5ldzsKKwluZXctPm5leHQgPSBuZXh0OworCW5ldy0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IG5ldzsKK30KKyNlbHNlCitleHRlcm4gdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywKKwkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpOworI2VuZGlmCisKKy8qKgorICogbGlzdF9hZGQgLSBhZGQgYSBuZXcgZW50cnkKKyAqIEBuZXc6IG5ldyBlbnRyeSB0byBiZSBhZGRlZAorICogQGhlYWQ6IGxpc3QgaGVhZCB0byBhZGQgaXQgYWZ0ZXIKKyAqCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBoZWFkLgorICogVGhpcyBpcyBnb29kIGZvciBpbXBsZW1lbnRpbmcgc3RhY2tzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCV9fbGlzdF9hZGQobmV3LCBoZWFkLCBoZWFkLT5uZXh0KTsKK30KKworLyoqCisgKiBsaXN0X2FkZF90YWlsIC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAbmV3OiBuZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBoZWFkOiBsaXN0IGhlYWQgdG8gYWRkIGl0IGJlZm9yZQorICoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZWZvcmUgdGhlIHNwZWNpZmllZCBoZWFkLgorICogVGhpcyBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBxdWV1ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZF90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlfX2xpc3RfYWRkKG5ldywgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKKy8qCisgKiBEZWxldGUgYSBsaXN0IGVudHJ5IGJ5IG1ha2luZyB0aGUgcHJldi9uZXh0IGVudHJpZXMKKyAqIHBvaW50IHRvIGVhY2ggb3RoZXIuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqcHJldiwgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0gbmV4dDsKK30KKworLyoqCisgKiBsaXN0X2RlbCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0LgorICogQGVudHJ5OiB0aGUgZWxlbWVudCB0byBkZWxldGUgZnJvbSB0aGUgbGlzdC4KKyAqIE5vdGU6IGxpc3RfZW1wdHkoKSBvbiBlbnRyeSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLCB0aGUgZW50cnkgaXMKKyAqIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KKyAqLworI2lmbmRlZiBDT05GSUdfREVCVUdfTElTVAorc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwllbnRyeS0+bmV4dCA9ICh2b2lkICopMHhERUFEQkVFRjsKKwllbnRyeS0+cHJldiA9ICh2b2lkICopMHhCRUVGREVBRDsKK30KKyNlbHNlCitleHRlcm4gdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSk7CisjZW5kaWYKKworLyoqCisgKiBsaXN0X3JlcGxhY2UgLSByZXBsYWNlIG9sZCBlbnRyeSBieSBuZXcgb25lCisgKiBAb2xkIDogdGhlIGVsZW1lbnQgdG8gYmUgcmVwbGFjZWQKKyAqIEBuZXcgOiB0aGUgbmV3IGVsZW1lbnQgdG8gaW5zZXJ0CisgKgorICogSWYgQG9sZCB3YXMgZW1wdHksIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3JlcGxhY2Uoc3RydWN0IGxpc3RfaGVhZCAqb2xkLCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXcpCit7CisJbmV3LT5uZXh0ID0gb2xkLT5uZXh0OworCW5ldy0+bmV4dC0+cHJldiA9IG5ldzsKKwluZXctPnByZXYgPSBvbGQtPnByZXY7CisJbmV3LT5wcmV2LT5uZXh0ID0gbmV3OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9yZXBsYWNlX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqb2xkLAorCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbmV3KQoreworCWxpc3RfcmVwbGFjZShvbGQsIG5ldyk7CisJSU5JVF9MSVNUX0hFQUQob2xkKTsKK30KKworLyoqCisgKiBsaXN0X2RlbF9pbml0IC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QgYW5kIHJlaW5pdGlhbGl6ZSBpdC4KKyAqIEBlbnRyeTogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlJTklUX0xJU1RfSEVBRChlbnRyeSk7Cit9CisKKy8qKgorICogbGlzdF9tb3ZlIC0gZGVsZXRlIGZyb20gb25lIGxpc3QgYW5kIGFkZCBhcyBhbm90aGVyJ3MgaGVhZAorICogQGxpc3Q6IHRoZSBlbnRyeSB0byBtb3ZlCisgKiBAaGVhZDogdGhlIGhlYWQgdGhhdCB3aWxsIHByZWNlZGUgb3VyIGVudHJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworCWxpc3RfYWRkKGxpc3QsIGhlYWQpOworfQorCisvKioKKyAqIGxpc3RfbW92ZV90YWlsIC0gZGVsZXRlIGZyb20gb25lIGxpc3QgYW5kIGFkZCBhcyBhbm90aGVyJ3MgdGFpbAorICogQGxpc3Q6IHRoZSBlbnRyeSB0byBtb3ZlCisgKiBAaGVhZDogdGhlIGhlYWQgdGhhdCB3aWxsIGZvbGxvdyBvdXIgZW50cnkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfbW92ZV90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCV9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisJbGlzdF9hZGRfdGFpbChsaXN0LCBoZWFkKTsKK30KKworLyoqCisgKiBsaXN0X2lzX2xhc3QgLSB0ZXN0cyB3aGV0aGVyIEBsaXN0IGlzIHRoZSBsYXN0IGVudHJ5IGluIGxpc3QgQGhlYWQKKyAqIEBsaXN0OiB0aGUgZW50cnkgdG8gdGVzdAorICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxpc3RfaXNfbGFzdChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGxpc3QtPm5leHQgPT0gaGVhZDsKK30KKworLyoqCisgKiBsaXN0X2VtcHR5IC0gdGVzdHMgd2hldGhlciBhIGxpc3QgaXMgZW1wdHkKKyAqIEBoZWFkOiB0aGUgbGlzdCB0byB0ZXN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBsaXN0X2VtcHR5KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGhlYWQtPm5leHQgPT0gaGVhZDsKK30KKworLyoqCisgKiBsaXN0X2VtcHR5X2NhcmVmdWwgLSB0ZXN0cyB3aGV0aGVyIGEgbGlzdCBpcyBlbXB0eSBhbmQgbm90IGJlaW5nIG1vZGlmaWVkCisgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVzdAorICoKKyAqIERlc2NyaXB0aW9uOgorICogdGVzdHMgd2hldGhlciBhIGxpc3QgaXMgZW1wdHkgX2FuZF8gY2hlY2tzIHRoYXQgbm8gb3RoZXIgQ1BVIG1pZ2h0IGJlCisgKiBpbiB0aGUgcHJvY2VzcyBvZiBtb2RpZnlpbmcgZWl0aGVyIG1lbWJlciAobmV4dCBvciBwcmV2KQorICoKKyAqIE5PVEU6IHVzaW5nIGxpc3RfZW1wdHlfY2FyZWZ1bCgpIHdpdGhvdXQgc3luY2hyb25pemF0aW9uCisgKiBjYW4gb25seSBiZSBzYWZlIGlmIHRoZSBvbmx5IGFjdGl2aXR5IHRoYXQgY2FuIGhhcHBlbgorICogdG8gdGhlIGxpc3QgZW50cnkgaXMgbGlzdF9kZWxfaW5pdCgpLiBFZy4gaXQgY2Fubm90IGJlIHVzZWQKKyAqIGlmIGFub3RoZXIgQ1BVIGNvdWxkIHJlLWxpc3RfYWRkKCkgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxpc3RfZW1wdHlfY2FyZWZ1bChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQgPSBoZWFkLT5uZXh0OworCXJldHVybiAobmV4dCA9PSBoZWFkKSAmJiAobmV4dCA9PSBoZWFkLT5wcmV2KTsKK30KKworLyoqCisgKiBsaXN0X2lzX3Npbmd1bGFyIC0gdGVzdHMgd2hldGhlciBhIGxpc3QgaGFzIGp1c3Qgb25lIGVudHJ5LgorICogQGhlYWQ6IHRoZSBsaXN0IHRvIHRlc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxpc3RfaXNfc2luZ3VsYXIoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoaGVhZCkgJiYgKGhlYWQtPm5leHQgPT0gaGVhZC0+cHJldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfY3V0X3Bvc2l0aW9uKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKm5ld19maXJzdCA9IGVudHJ5LT5uZXh0OworCWxpc3QtPm5leHQgPSBoZWFkLT5uZXh0OworCWxpc3QtPm5leHQtPnByZXYgPSBsaXN0OworCWxpc3QtPnByZXYgPSBlbnRyeTsKKwllbnRyeS0+bmV4dCA9IGxpc3Q7CisJaGVhZC0+bmV4dCA9IG5ld19maXJzdDsKKwluZXdfZmlyc3QtPnByZXYgPSBoZWFkOworfQorCisvKioKKyAqIGxpc3RfY3V0X3Bvc2l0aW9uIC0gY3V0IGEgbGlzdCBpbnRvIHR3bworICogQGxpc3Q6IGEgbmV3IGxpc3QgdG8gYWRkIGFsbCByZW1vdmVkIGVudHJpZXMKKyAqIEBoZWFkOiBhIGxpc3Qgd2l0aCBlbnRyaWVzCisgKiBAZW50cnk6IGFuIGVudHJ5IHdpdGhpbiBoZWFkLCBjb3VsZCBiZSB0aGUgaGVhZCBpdHNlbGYKKyAqCWFuZCBpZiBzbyB3ZSB3b24ndCBjdXQgdGhlIGxpc3QKKyAqCisgKiBUaGlzIGhlbHBlciBtb3ZlcyB0aGUgaW5pdGlhbCBwYXJ0IG9mIEBoZWFkLCB1cCB0byBhbmQKKyAqIGluY2x1ZGluZyBAZW50cnksIGZyb20gQGhlYWQgdG8gQGxpc3QuIFlvdSBzaG91bGQKKyAqIHBhc3Mgb24gQGVudHJ5IGFuIGVsZW1lbnQgeW91IGtub3cgaXMgb24gQGhlYWQuIEBsaXN0CisgKiBzaG91bGQgYmUgYW4gZW1wdHkgbGlzdCBvciBhIGxpc3QgeW91IGRvIG5vdCBjYXJlIGFib3V0CisgKiBsb3NpbmcgaXRzIGRhdGEuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9jdXRfcG9zaXRpb24oc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJcmV0dXJuOworCWlmIChsaXN0X2lzX3Npbmd1bGFyKGhlYWQpICYmIChoZWFkLT5uZXh0ICE9IGVudHJ5ICYmIGhlYWQgIT0gZW50cnkpKQorCQlyZXR1cm47CisJaWYgKGVudHJ5ID09IGhlYWQpCisJCUlOSVRfTElTVF9IRUFEKGxpc3QpOworCWVsc2UKKwkJX19saXN0X2N1dF9wb3NpdGlvbihsaXN0LCBoZWFkLCBlbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3Rfc3BsaWNlKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0LT5uZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgKmxhc3QgPSBsaXN0LT5wcmV2OworCisJZmlyc3QtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBmaXJzdDsKKworCWxhc3QtPm5leHQgPSBuZXh0OworCW5leHQtPnByZXYgPSBsYXN0OworfQorCisvKioKKyAqIGxpc3Rfc3BsaWNlIC0gam9pbiB0d28gbGlzdHMsIHRoaXMgaXMgZGVzaWduZWQgZm9yIHN0YWNrcworICogQGxpc3Q6IHRoZSBuZXcgbGlzdCB0byBhZGQuCisgKiBAaGVhZDogdGhlIHBsYWNlIHRvIGFkZCBpdCBpbiB0aGUgZmlyc3QgbGlzdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfc3BsaWNlKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlpZiAoIWxpc3RfZW1wdHkobGlzdCkpCisJCV9fbGlzdF9zcGxpY2UobGlzdCwgaGVhZCwgaGVhZC0+bmV4dCk7Cit9CisKKy8qKgorICogbGlzdF9zcGxpY2VfdGFpbCAtIGpvaW4gdHdvIGxpc3RzLCBlYWNoIGxpc3QgYmVpbmcgYSBxdWV1ZQorICogQGxpc3Q6IHRoZSBuZXcgbGlzdCB0byBhZGQuCisgKiBAaGVhZDogdGhlIHBsYWNlIHRvIGFkZCBpdCBpbiB0aGUgZmlyc3QgbGlzdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfc3BsaWNlX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlpZiAoIWxpc3RfZW1wdHkobGlzdCkpCisJCV9fbGlzdF9zcGxpY2UobGlzdCwgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKKy8qKgorICogbGlzdF9zcGxpY2VfaW5pdCAtIGpvaW4gdHdvIGxpc3RzIGFuZCByZWluaXRpYWxpc2UgdGhlIGVtcHRpZWQgbGlzdC4KKyAqIEBsaXN0OiB0aGUgbmV3IGxpc3QgdG8gYWRkLgorICogQGhlYWQ6IHRoZSBwbGFjZSB0byBhZGQgaXQgaW4gdGhlIGZpcnN0IGxpc3QuCisgKgorICogVGhlIGxpc3QgYXQgQGxpc3QgaXMgcmVpbml0aWFsaXNlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9zcGxpY2VfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWlmICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQsIGhlYWQtPm5leHQpOworCQlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwl9Cit9CisKKy8qKgorICogbGlzdF9zcGxpY2VfdGFpbF9pbml0IC0gam9pbiB0d28gbGlzdHMgYW5kIHJlaW5pdGlhbGlzZSB0aGUgZW1wdGllZCBsaXN0CisgKiBAbGlzdDogdGhlIG5ldyBsaXN0IHRvIGFkZC4KKyAqIEBoZWFkOiB0aGUgcGxhY2UgdG8gYWRkIGl0IGluIHRoZSBmaXJzdCBsaXN0LgorICoKKyAqIEVhY2ggb2YgdGhlIGxpc3RzIGlzIGEgcXVldWUuCisgKiBUaGUgbGlzdCBhdCBAbGlzdCBpcyByZWluaXRpYWxpc2VkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3NwbGljZV90YWlsX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJaWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CisJCV9fbGlzdF9zcGxpY2UobGlzdCwgaGVhZC0+cHJldiwgaGVhZCk7CisJCUlOSVRfTElTVF9IRUFEKGxpc3QpOworCX0KK30KKworLyoqCisgKiBsaXN0X2VudHJ5IC0gZ2V0IHRoZSBzdHJ1Y3QgZm9yIHRoaXMgZW50cnkKKyAqIEBwdHI6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCBwb2ludGVyLgorICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBzdHJ1Y3QgdGhpcyBpcyBlbWJlZGRlZCBpbi4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQorCisvKioKKyAqIGxpc3RfZmlyc3RfZW50cnkgLSBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhIGxpc3QKKyAqIEBwdHI6CXRoZSBsaXN0IGhlYWQgdG8gdGFrZSB0aGUgZWxlbWVudCBmcm9tLgorICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBzdHJ1Y3QgdGhpcyBpcyBlbWJlZGRlZCBpbi4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBOb3RlLCB0aGF0IGxpc3QgaXMgZXhwZWN0ZWQgdG8gYmUgbm90IGVtcHR5LgorICovCisjZGVmaW5lIGxpc3RfZmlyc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwlsaXN0X2VudHJ5KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaAktCWl0ZXJhdGUgb3ZlciBhIGxpc3QKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IHByZWZldGNoKHBvcy0+bmV4dCksIHBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gcG9zLT5uZXh0KQorCisvKioKKyAqIF9fbGlzdF9mb3JfZWFjaAktCWl0ZXJhdGUgb3ZlciBhIGxpc3QKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICoKKyAqIFRoaXMgdmFyaWFudCBkaWZmZXJzIGZyb20gbGlzdF9mb3JfZWFjaCgpIGluIHRoYXQgaXQncyB0aGUKKyAqIHNpbXBsZXN0IHBvc3NpYmxlIGxpc3QgaXRlcmF0aW9uIGNvZGUsIG5vIHByZWZldGNoaW5nIGlzIGRvbmUuCisgKiBVc2UgdGhpcyBmb3IgY29kZSB0aGF0IGtub3dzIHRoZSBsaXN0IHRvIGJlIHZlcnkgc2hvcnQgKGVtcHR5CisgKiBvciAxIGVudHJ5KSBtb3N0IG9mIHRoZSB0aW1lLgorICovCisjZGVmaW5lIF9fbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcG9zICE9IChoZWFkKTsgcG9zID0gcG9zLT5uZXh0KQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfcHJldgktCWl0ZXJhdGUgb3ZlciBhIGxpc3QgYmFja3dhcmRzCisgKiBAcG9zOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3ByZXYocG9zLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPnByZXY7IHByZWZldGNoKHBvcy0+cHJldiksIHBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gcG9zLT5wcmV2KQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfc2FmZSAtIGl0ZXJhdGUgb3ZlciBhIGxpc3Qgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG46CQlhbm90aGVyICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0LCBuID0gcG9zLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IG4sIG4gPSBwb3MtPm5leHQpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9wcmV2X3NhZmUgLSBpdGVyYXRlIG92ZXIgYSBsaXN0IGJhY2t3YXJkcyBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVudHJ5CisgKiBAcG9zOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAbjoJCWFub3RoZXIgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZShwb3MsIG4sIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+cHJldiwgbiA9IHBvcy0+cHJldjsgXAorCSAgICAgcHJlZmV0Y2gocG9zLT5wcmV2KSwgcG9zICE9IChoZWFkKTsgXAorCSAgICAgcG9zID0gbiwgbiA9IHBvcy0+cHJldikKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5CS0JaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBtZW1iZXIpCQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAlcCisJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UgLSBpdGVyYXRlIGJhY2t3YXJkcyBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZS4KKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UocG9zLCBoZWFkLCBtZW1iZXIpCQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgcHJlZmV0Y2gocG9zLT5tZW1iZXIucHJldiksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAlcCisJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X3ByZXBhcmVfZW50cnkgLSBwcmVwYXJlIGEgcG9zIGVudHJ5IGZvciB1c2UgaW4gbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSgpCisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIHN0YXJ0IHBvaW50CisgKiBAaGVhZDoJdGhlIGhlYWQgb2YgdGhlIGxpc3QKKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBQcmVwYXJlcyBhIHBvcyBlbnRyeSBmb3IgdXNlIGFzIGEgc3RhcnQgcG9pbnQgaW4gbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSgpLgorICovCisjZGVmaW5lIGxpc3RfcHJlcGFyZV9lbnRyeShwb3MsIGhlYWQsIG1lbWJlcikgXAorCSgocG9zKSA/IDogbGlzdF9lbnRyeShoZWFkLCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSAtIGNvbnRpbnVlIGl0ZXJhdGlvbiBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIENvbnRpbnVlIHRvIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUsIGNvbnRpbnVpbmcgYWZ0ZXIKKyAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocG9zLCBoZWFkLCBtZW1iZXIpIAkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLm5leHQpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCisJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2UgLSBpdGVyYXRlIGJhY2t3YXJkcyBmcm9tIHRoZSBnaXZlbiBwb2ludAorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIFN0YXJ0IHRvIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgYmFja3dhcmRzLCBjb250aW51aW5nIGFmdGVyCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2UocG9zLCBoZWFkLCBtZW1iZXIpCQlcCisJZm9yIChwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgcHJlZmV0Y2gocG9zLT5tZW1iZXIucHJldiksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIucHJldiwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgZnJvbSB0aGUgY3VycmVudCBwb2ludAorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIEl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUsIGNvbnRpbnVpbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShwb3MsIGhlYWQsIG1lbWJlcikgCQkJXAorCWZvciAoOyBwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAorCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIC0gaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVudHJ5CisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG46CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sIGhlYWQsIG1lbWJlcikJCQlcCisJZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpLAlcCisJCW4gPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgCQkJCQlcCisJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAbjoJCWFub3RoZXIgdHlwZSAqIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICogSXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSwgY29udGludWluZyBhZnRlciBjdXJyZW50IHBvaW50LAorICogc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeS4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUocG9zLCBuLCBoZWFkLCBtZW1iZXIpIAkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlciksIAkJXAorCQluID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CQlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwkJCQkJCVwKKwkgICAgIHBvcyA9IG4sIG4gPSBsaXN0X2VudHJ5KG4tPm1lbWJlci5uZXh0LCB0eXBlb2YoKm4pLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9mcm9tCisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG46CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIEl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgZnJvbSBjdXJyZW50IHBvaW50LCBzYWZlIGFnYWluc3QKKyAqIHJlbW92YWwgb2YgbGlzdCBlbnRyeS4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbShwb3MsIG4sIGhlYWQsIG1lbWJlcikgCQkJXAorCWZvciAobiA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwkJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJCQkJCQlcCisJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBJdGVyYXRlIGJhY2t3YXJkcyBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSwgc2FmZSBhZ2FpbnN0IHJlbW92YWwKKyAqIG9mIGxpc3QgZW50cnkuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UocG9zLCBuLCBoZWFkLCBtZW1iZXIpCQlcCisJZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+cHJldiwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpLAlcCisJCW4gPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgCQkJCQlcCisJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIucHJldiwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKKworc3RydWN0IG9mZnNldCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIG9mZnNldDsKK307CisKK3N0cnVjdCB0YWJsZSB7CisJc3RydWN0IGxpc3RfaGVhZCBvZmZzZXRzOworCXVuc2lnbmVkIG9mZnNldF9tYXg7CisJdW5zaWduZWQgbmVudHJ5OworCXVuc2lnbmVkICp0YWJsZTsKKwljaGFyICpncHVfcHJlZml4OworfTsKKworc3RydWN0IG9mZnNldCAqb2Zmc2V0X25ldyh1bnNpZ25lZCBvKQoreworCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKKworCW9mZnNldCA9IChzdHJ1Y3Qgb2Zmc2V0ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2Zmc2V0KSk7CisJaWYgKG9mZnNldCkgeworCQlJTklUX0xJU1RfSEVBRCgmb2Zmc2V0LT5saXN0KTsKKwkJb2Zmc2V0LT5vZmZzZXQgPSBvOworCX0KKwlyZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIHRhYmxlX29mZnNldF9hZGQoc3RydWN0IHRhYmxlICp0LCBzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQpCit7CisJbGlzdF9hZGRfdGFpbCgmb2Zmc2V0LT5saXN0LCAmdC0+b2Zmc2V0cyk7Cit9CisKK3ZvaWQgdGFibGVfaW5pdChzdHJ1Y3QgdGFibGUgKnQpCit7CisJSU5JVF9MSVNUX0hFQUQoJnQtPm9mZnNldHMpOworCXQtPm9mZnNldF9tYXggPSAwOworCXQtPm5lbnRyeSA9IDA7CisJdC0+dGFibGUgPSBOVUxMOworfQorCit2b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKK3sKKwl1bnNpZ25lZCBubGxvb3AsIGksIGosIG4sIGMsIGlkOworCisJbmxsb29wID0gKHQtPm5lbnRyeSArIDMpIC8gNDsKKwljID0gdC0+bmVudHJ5OworCXByaW50Zigic3RhdGljIGNvbnN0IHVuc2lnbmVkICVzX3JlZ19zYWZlX2JtWyVkXSA9IHtcbiIsIHQtPmdwdV9wcmVmaXgsCisJICAgICAgIHQtPm5lbnRyeSk7CisJZm9yIChpID0gMCwgaWQgPSAwOyBpIDwgbmxsb29wOyBpKyspIHsKKwkJbiA9IDQ7CisJCWlmIChuID4gYykKKwkJCW4gPSBjOworCQljIC09IG47CisJCWZvciAoaiA9IDA7IGogPCBuOyBqKyspIHsKKwkJCWlmIChqID09IDApCisJCQkJcHJpbnRmKCJcdCIpOworCQkJZWxzZQorCQkJCXByaW50ZigiICIpOworCQkJcHJpbnRmKCIweCUwOFgsIiwgdC0+dGFibGVbaWQrK10pOworCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisJcHJpbnRmKCJ9O1xuIik7Cit9CisKK2ludCB0YWJsZV9idWlsZChzdHJ1Y3QgdGFibGUgKnQpCit7CisJc3RydWN0IG9mZnNldCAqb2Zmc2V0OworCXVuc2lnbmVkIGksIG07CisKKwl0LT5uZW50cnkgPSAoKHQtPm9mZnNldF9tYXggPj4gMikgKyAzMSkgLyAzMjsKKwl0LT50YWJsZSA9ICh1bnNpZ25lZCAqKW1hbGxvYyhzaXplb2YodW5zaWduZWQpICogdC0+bmVudHJ5KTsKKwlpZiAodC0+dGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCW1lbXNldCh0LT50YWJsZSwgMHhmZiwgc2l6ZW9mKHVuc2lnbmVkKSAqIHQtPm5lbnRyeSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvZmZzZXQsICZ0LT5vZmZzZXRzLCBsaXN0KSB7CisJCWkgPSAob2Zmc2V0LT5vZmZzZXQgPj4gMikgLyAzMjsKKwkJbSA9IChvZmZzZXQtPm9mZnNldCA+PiAyKSAmIDMxOworCQltID0gMSA8PCBtOworCQl0LT50YWJsZVtpXSBePSBtOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgZ3B1X25hbWVbMTBdOworaW50IHBhcnNlcl9hdXRoKHN0cnVjdCB0YWJsZSAqdCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJRklMRSAqZmlsZTsKKwlyZWdleF90IG1hc2tfcmV4OworCXJlZ21hdGNoX3QgbWF0Y2hbNF07CisJY2hhciBidWZbMTAyNF07CisJc2l6ZV90IGVuZDsKKwlpbnQgbGVuOworCWludCBkb25lID0gMDsKKwlpbnQgcjsKKwl1bnNpZ25lZCBvOworCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKKwljaGFyIGxhc3RfcmVnX3NbMTBdOworCWludCBsYXN0X3JlZzsKKworCWlmIChyZWdjb21wCisJICAgICgmbWFza19yZXgsICIoMHhbMC05YS1mQS1GXSopICooW19hLXpBLVowLTldKikiLCBSRUdfRVhURU5ERUQpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNvbXBpbGUgcmVndWxhciBleHByZXNzaW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKGZpbGUgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuOiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCWZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKTsKKwllbmQgPSBmdGVsbChmaWxlKTsKKwlmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCk7CisKKwkvKiBnZXQgaGVhZGVyICovCisJaWYgKGZnZXRzKGJ1ZiwgMTAyNCwgZmlsZSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJLyogZmlyc3QgbGluZSB3aWxsIGNvbnRhaW4gdGhlIGxhc3QgcmVnaXN0ZXIKKwkgKiBhbmQgZ3B1IG5hbWUgKi8KKwlzc2NhbmYoYnVmLCAiJXMgJXMiLCBncHVfbmFtZSwgbGFzdF9yZWdfcyk7CisJdC0+Z3B1X3ByZWZpeCA9IGdwdV9uYW1lOworCWxhc3RfcmVnID0gc3RydG9sKGxhc3RfcmVnX3MsIE5VTEwsIDE2KTsKKworCWRvIHsKKwkJaWYgKGZnZXRzKGJ1ZiwgMTAyNCwgZmlsZSkgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJbGVuID0gc3RybGVuKGJ1Zik7CisJCWlmIChmdGVsbChmaWxlKSA9PSBlbmQpCisJCQlkb25lID0gMTsKKwkJaWYgKGxlbikgeworCQkJciA9IHJlZ2V4ZWMoJm1hc2tfcmV4LCBidWYsIDQsIG1hdGNoLCAwKTsKKwkJCWlmIChyID09IFJFR19OT01BVENIKSB7CisJCQl9IGVsc2UgaWYgKHIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIkVycm9yIG1hdGNoaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiAlZCBpbiAlc1xuIiwKKwkJCQkJciwgZmlsZW5hbWUpOworCQkJCXJldHVybiAtMTsKKwkJCX0gZWxzZSB7CisJCQkJYnVmW21hdGNoWzBdLnJtX2VvXSA9IDA7CisJCQkJYnVmW21hdGNoWzFdLnJtX2VvXSA9IDA7CisJCQkJYnVmW21hdGNoWzJdLnJtX2VvXSA9IDA7CisJCQkJbyA9IHN0cnRvbCgmYnVmW21hdGNoWzFdLnJtX3NvXSwgTlVMTCwgMTYpOworCQkJCW9mZnNldCA9IG9mZnNldF9uZXcobyk7CisJCQkJdGFibGVfb2Zmc2V0X2FkZCh0LCBvZmZzZXQpOworCQkJCWlmIChvID4gdC0+b2Zmc2V0X21heCkKKwkJCQkJdC0+b2Zmc2V0X21heCA9IG87CisJCQl9CisJCX0KKwl9IHdoaWxlICghZG9uZSk7CisJZmNsb3NlKGZpbGUpOworCWlmICh0LT5vZmZzZXRfbWF4IDwgbGFzdF9yZWcpCisJCXQtPm9mZnNldF9tYXggPSBsYXN0X3JlZzsKKwlyZXR1cm4gdGFibGVfYnVpbGQodCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHRhYmxlIHQ7CisKKwlpZiAoYXJnYyAhPSAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxhdXRoZmlsZT5cbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwl0YWJsZV9pbml0KCZ0KTsKKwlpZiAocGFyc2VyX2F1dGgoJnQsIGFyZ3ZbMV0pKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHBhcnNlIGZpbGUgJXNcbiIsIGFyZ3ZbMV0pOworCQlyZXR1cm4gLTE7CisJfQorCXRhYmxlX3ByaW50KCZ0KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggNjhlNzI4ZS4uYmU1MWM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTI5LDE1ICsyOSw0MSBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCi0jaW5jbHVkZSAicmFkZW9uX21pY3JvY29kZS5oIgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyMTAwZC5oIgorCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInIxMDBfcmVnX3NhZmUuaCIKKyNpbmNsdWRlICJybjUwX3JlZ19zYWZlLmgiCisKKy8qIEZpcm13YXJlIE5hbWVzICovCisjZGVmaW5lIEZJUk1XQVJFX1IxMDAJCSJyYWRlb24vUjEwMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1IyMDAJCSJyYWRlb24vUjIwMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1IzMDAJCSJyYWRlb24vUjMwMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1I0MjAJCSJyYWRlb24vUjQyMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1JTNjkwCQkicmFkZW9uL1JTNjkwX2NwLmJpbiIKKyNkZWZpbmUgRklSTVdBUkVfUlM2MDAJCSJyYWRlb24vUlM2MDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SNTIwCQkicmFkZW9uL1I1MjBfY3AuYmluIgorCitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjEwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjIwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjMwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjQyMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUlM2OTApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1JTNjAwKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SNTIwKTsKKworI2luY2x1ZGUgInIxMDBfdHJhY2suaCIKIAogLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzoKICAqIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MAogICoKICAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCiAgKi8KK2ludCByMjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtNTgsMjMgKzg0LDI4IEBACiAJICogY291bGQgZW5kIHVwIGluIHdyb25nIGFkZHJlc3MuICovCiB9CiAKK2ludCByMTAwX3BjaV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS5yYW0ucHRyKSB7CisJCVdBUk4oMSwgIlIxMDAgUENJIEdBUlQgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyogSW5pdGlhbGl6ZSBjb21tb24gZ2FydCBzdHJ1Y3R1cmUgKi8KKwlyID0gcmFkZW9uX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogNDsKKwlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2U7CisJcmV0dXJuIHJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9hbGxvYyhyZGV2KTsKK30KKwogaW50IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKIAotCS8qIEluaXRpYWxpemUgY29tbW9uIGdhcnQgc3RydWN0dXJlICovCi0JciA9IHJhZGVvbl9nYXJ0X2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnJhbS5wdHIgPT0gTlVMTCkgewotCQlyZGV2LT5nYXJ0LnRhYmxlX3NpemUgPSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA0OwotCQlyID0gcmFkZW9uX2dhcnRfdGFibGVfcmFtX2FsbG9jKHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQl9CiAJLyogZGlzY2FyZCBtZW1vcnkgcmVxdWVzdCBvdXRzaWRlIG9mIGNvbmZpZ3VyZWQgcmFuZ2UgKi8KIAl0bXAgPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSB8IFJBREVPTl9ESVNfT1VUX09GX1BDSV9HQVJUX0FDQ0VTUzsKIAlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCB0bXApOwpAQCAtMTE0LDEzICsxNDUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHIxMDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHIxMDBfcGNpX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiByMTAwX3BjaV9nYXJ0X2VuYWJsZShyZGV2KTsKKwlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJcmFkZW9uX2dhcnRfdGFibGVfcmFtX2ZyZWUocmRldik7CisJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAogCkBAIC0yNDcsOSArMjc2LDYgQEAKIAogdm9pZCByMTAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKIApAQCAtMjczLDYgKzI5OSwxNyBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHIxMDBfaXJxX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKworCVdSRUczMihSXzAwMDA0MF9HRU5fSU5UX0NOVEwsIDApOworCS8qIFdhaXQgYW5kIGFja25vd2xlZGdlIGlycSAqLworCW1kZWxheSgxKTsKKwl0bXAgPSBSUkVHMzIoUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMpOworCVdSRUczMihSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUywgdG1wKTsKK30KKwogc3RhdGljIGlubGluZSB1aW50MzJfdCByMTAwX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgaXJxcyA9IFJSRUczMihSQURFT05fR0VOX0lOVF9TVEFUVVMpOwpAQCAtMjkzLDYgKzMzMCw5IEBACiAJaWYgKCFzdGF0dXMpIHsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KKwlpZiAocmRldi0+c2h1dGRvd24pIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KIAl3aGlsZSAoc3RhdHVzKSB7CiAJCS8qIFNXIGludGVycnVwdCAqLwogCQlpZiAoc3RhdHVzICYgUkFERU9OX1NXX0lOVF9URVNUKSB7CkBAIC0zNjcsMTQgKzQwNywyMSBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAl9Ci0JV1JFRzMyKDB4Nzc0LCByZGV2LT53Yi5ncHVfYWRkcik7Ci0JV1JFRzMyKDB4NzBDLCByZGV2LT53Yi5ncHVfYWRkciArIDEwMjQpOwotCVdSRUczMigweDc3MCwgMHhmZik7CisJV1JFRzMyKFJfMDAwNzc0X1NDUkFUQ0hfQUREUiwgcmRldi0+d2IuZ3B1X2FkZHIpOworCVdSRUczMihSXzAwMDcwQ19DUF9SQl9SUFRSX0FERFIsCisJCVNfMDAwNzBDX1JCX1JQVFJfQUREUigocmRldi0+d2IuZ3B1X2FkZHIgKyAxMDI0KSA+PiAyKSk7CisJV1JFRzMyKFJfMDAwNzcwX1NDUkFUQ0hfVU1TSywgMHhmZik7CiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgcjEwMF93Yl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihSXzAwMDc3MF9TQ1JBVENIX1VNU0ssIDApOworfQorCiB2b2lkIHIxMDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CiAJaWYgKHJkZXYtPndiLndiX29iaikgewogCQlyYWRlb25fb2JqZWN0X2t1bm1hcChyZGV2LT53Yi53Yl9vYmopOwogCQlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPndiLndiX29iaik7CkBAIC00NjEsNiArNTA4LDIxIEBACiAvKgogICogQ1AKICAqLworc3RhdGljIGludCByMTAwX2NwX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdW5zaWduZWQgaTsKKwl1MzIgdG1wOworCisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCXRtcCA9IFJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyk7CisJCWlmICghR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHRtcCkpIHsKKwkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxKTsKKwl9CisJcmV0dXJuIC0xOworfQorCiB2b2lkIHIxMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKQEAgLTQ3OCwzMyArNTQwLDMzIEBACiAJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgcjEwMF9jcF9sb2FkX21pY3JvY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKKworLyogTG9hZCB0aGUgbWljcm9jb2RlIGZvciB0aGUgQ1AgKi8KK3N0YXRpYyBpbnQgcjEwMF9jcF9pbml0X21pY3JvY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IGNoYXIgKmZ3X25hbWUgPSBOVUxMOworCWludCBlcnI7CiAKLQlpZiAocjEwMF9ndWlfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBHVUkgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CisJRFJNX0RFQlVHKCJcbiIpOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJhZGVvbl9jcCIsIDAsIE5VTEwsIDApOworCWVyciA9IElTX0VSUihwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFkZW9uX2NwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9BRERSLCAwKTsKIAlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1IxMDApIHx8IChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjEwMCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMjAwKSB8fCAocmRldi0+ZmFtaWx5ID09IENISVBfUlMxMDApIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzIwMCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjEwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFILCBSMTAwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwgUjEwMF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQl9CisJCWZ3X25hbWUgPSBGSVJNV0FSRV9SMTAwOwogCX0gZWxzZSBpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApIHx8CiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjI1MCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMjgwKSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlMzMDApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIyMDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwgUjIwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsIFIyMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUjIwMDsKIAl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMzAwKSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUjM1MCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzUwKSB8fApAQCAtNTEyLDMxICs1NzQsMTkgQEAKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDAwKSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM0ODApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIzMDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwgUjMwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsIFIzMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUjMwMDsKIAl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIwKSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMykgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSNDAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsIFI0MjBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFMLCBSNDIwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1I0MjA7CiAJfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTApIHx8CiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUlM2OTAvUlM3NDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwgUlM2OTBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFMLCBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQl9CisJCWZ3X25hbWUgPSBGSVJNV0FSRV9SUzY5MDsKIAl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsIFJTNjAwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwgUlM2MDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUlM2MDA7CiAJfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY1MTUpIHx8CiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNTIwKSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY1MzApIHx8CkBAIC01NDQsOSArNTk0LDQzIEBACiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjU2MCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNTcwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSNTAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsIFI1MjBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFMLCBSNTIwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCWZ3X25hbWUgPSBGSVJNV0FSRV9SNTIwOworCX0KKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnJkZXYtPm1lX2Z3LCBmd19uYW1lLCAmcGRldi0+ZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFkZW9uX2NwOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICBmd19uYW1lKTsKKwl9IGVsc2UgaWYgKHJkZXYtPm1lX2Z3LT5zaXplICUgOCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyYWRlb25fY3A6IEJvZ3VzIGxlbmd0aCAlenUgaW4gZmlybXdhcmUgXCIlc1wiXG4iLAorCQkgICAgICAgcmRldi0+bWVfZnctPnNpemUsIGZ3X25hbWUpOworCQllcnIgPSAtRUlOVkFMOworCQlyZWxlYXNlX2Zpcm13YXJlKHJkZXYtPm1lX2Z3KTsKKwkJcmRldi0+bWVfZncgPSBOVUxMOworCX0KKwlyZXR1cm4gZXJyOworfQorc3RhdGljIHZvaWQgcjEwMF9jcF9sb2FkX21pY3JvY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwljb25zdCBfX2JlMzIgKmZ3X2RhdGE7CisJaW50IGksIHNpemU7CisKKwlpZiAocjEwMF9ndWlfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBHVUkgaWRsZSB3aGlsZSAiCisJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CisJfQorCisJaWYgKHJkZXYtPm1lX2Z3KSB7CisJCXNpemUgPSByZGV2LT5tZV9mdy0+c2l6ZSAvIDQ7CisJCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopJnJkZXYtPm1lX2Z3LT5kYXRhWzBdOworCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9BRERSLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gMikgeworCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCisJCQkgICAgICAgYmUzMl90b19jcHVwKCZmd19kYXRhW2ldKSk7CisJCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKKwkJCSAgICAgICBiZTMyX3RvX2NwdXAoJmZ3X2RhdGFbaSArIDFdKSk7CiAJCX0KIAl9CiB9CkBAIC01ODUsNiArNjY5LDE1IEBACiAJfSBlbHNlIHsKIAkJRFJNX0lORk8oInJhZGVvbjogY3AgaWRsZSAoMHglMDhYKVxuIiwgdG1wKTsKIAl9CisKKwlpZiAoIXJkZXYtPm1lX2Z3KSB7CisJCXIgPSByMTAwX2NwX2luaXRfbWljcm9jb2RlKHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSFcbiIpOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisKIAkvKiBBbGlnbiByaW5nIHNpemUgKi8KIAlyYl9idWZzeiA9IGRybV9vcmRlcihyaW5nX3NpemUgLyA4KTsKIAlyaW5nX3NpemUgPSAoMSA8PCAocmJfYnVmc3ogKyAxKSkgKiA0OwpAQCAtNjU4LDkgKzc1MSwxMSBAQAogCiB2b2lkIHIxMDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlpZiAocjEwMF9jcF93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCURSTV9FUlJPUigiV2FpdCBmb3IgQ1AgaWRsZSB0aW1lb3V0LCBzaHV0dGluZyBkb3duIENQLlxuIik7CisJfQogCS8qIERpc2FibGUgcmluZyAqLwotCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7Ci0JV1JFRzMyKFJBREVPTl9DUF9DU1FfQ05UTCwgMCk7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOwogCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CiAJRFJNX0lORk8oInJhZGVvbjogY3AgZmluYWxpemVkXG4iKTsKIH0KQEAgLTcxMCw2ICs4MDUsMTIgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3ZvaWQgcjEwMF9jcF9jb21taXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJV1JFRzMyKFJBREVPTl9DUF9SQl9XUFRSLCByZGV2LT5jcC53cHRyKTsKKwkodm9pZClSUkVHMzIoUkFERU9OX0NQX1JCX1dQVFIpOworfQorCiAKIC8qCiAgKiBDUyBmdW5jdGlvbnMKQEAgLTk2OCwxNDcgKzEwNjksMzU2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcjEwMF9nZXRfdnR4X3NpemUodWludDMyX3QgdnR4X2ZtdCkKK3sKKwlpbnQgdnR4X3NpemU7CisJdnR4X3NpemUgPSAyOworCS8qIG9yZGVyZWQgYWNjb3JkaW5nIHRvIGJpdHMgaW4gc3BlYyAqLworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfVzApCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9GUENPTE9SKQorCQl2dHhfc2l6ZSArPSAzOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfRlBBTFBIQSkKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1BLQ09MT1IpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9GUFNQRUMpCisJCXZ0eF9zaXplICs9IDM7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9GUEZPRykKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1BLU1BFQykKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1NUMCkKKwkJdnR4X3NpemUgKz0gMjsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1NUMSkKKwkJdnR4X3NpemUgKz0gMjsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1ExKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfU1QyKQorCQl2dHhfc2l6ZSArPSAyOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfUTIpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9TVDMpCisJCXZ0eF9zaXplICs9IDI7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9RMykKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1EwKQorCQl2dHhfc2l6ZSsrOworCS8qIGJsZW5kIHdlaWdodCAqLworCWlmICh2dHhfZm10ICYgKDB4NyA8PCAxNSkpCisJCXZ0eF9zaXplICs9ICh2dHhfZm10ID4+IDE1KSAmIDB4NzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX04wKQorCQl2dHhfc2l6ZSArPSAzOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfWFkxKQorCQl2dHhfc2l6ZSArPSAyOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfWjEpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9XMSkKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX04xKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfWikKKwkJdnR4X3NpemUrKzsKKwlyZXR1cm4gdnR4X3NpemU7Cit9CisKIHN0YXRpYyBpbnQgcjEwMF9wYWNrZXQwX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAotCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCkKKwkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkgICAgICB1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZykKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKKwlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCXVpbnQzMl90IHRtcDsKLQl1bnNpZ25lZCByZWc7Ci0JdW5zaWduZWQgaTsKLQl1bnNpZ25lZCBpZHg7Ci0JYm9vbCBvbmVyZWc7CiAJaW50IHI7CisJaW50IGksIGZhY2U7CiAJdTMyIHRpbGVfZmxhZ3MgPSAwOwogCiAJaWIgPSBwLT5pYi0+cHRyOwogCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwotCWlkeCA9IHBrdC0+aWR4ICsgMTsKLQlyZWcgPSBwa3QtPnJlZzsKLQlvbmVyZWcgPSBmYWxzZTsKLQlpZiAoQ1BfUEFDS0VUMF9HRVRfT05FX1JFR19XUihpYl9jaHVuay0+a2RhdGFbcGt0LT5pZHhdKSkgewotCQlvbmVyZWcgPSB0cnVlOwotCX0KLQlmb3IgKGkgPSAwOyBpIDw9IHBrdC0+Y291bnQ7IGkrKywgaWR4KyssIHJlZyArPSA0KSB7Ci0JCXN3aXRjaCAocmVnKSB7Ci0JCWNhc2UgUkFERU9OX0NSVENfR1VJX1RSSUdfVkxJTkU6Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCi0JCQkJCQlpZHgsIHJlZyk7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiByOwotCQkJfQotCQkJYnJlYWs7CisJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKKwkJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHApOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWJyZWFrOwogCQkvKiBGSVhNRTogb25seSBhbGxvdyBQQUNLRVQzIGJsaXQ/IGVhc2llciB0byBjaGVjayBmb3Igb3V0IG9mCiAJCSAqIHJhbmdlIGFjY2VzcyAqLwotCQljYXNlIFJBREVPTl9EU1RfUElUQ0hfT0ZGU0VUOgotCQljYXNlIFJBREVPTl9TUkNfUElUQ0hfT0ZGU0VUOgotCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCWlmIChyKSB7Ci0JCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKLQkJCQkJICBpZHgsIHJlZyk7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiByOwotCQkJfQotCQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDAwM2ZmZmZmOwotCQkJdG1wICs9ICgoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSA+PiAxMCk7CisJY2FzZSBSQURFT05fRFNUX1BJVENIX09GRlNFVDoKKwljYXNlIFJBREVPTl9TUkNfUElUQ0hfT0ZGU0VUOgorCQlyID0gcjEwMF9yZWxvY19waXRjaF9vZmZzZXQocCwgcGt0LCBpZHgsIHJlZyk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfREVQVEhPRkZTRVQ6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQl0cmFjay0+Y2JbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+Y2JbMF0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlicmVhazsKKwljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8wOgorCWNhc2UgUkFERU9OX1BQX1RYT0ZGU0VUXzE6CisJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMjoKKwkJaSA9IChyZWcgLSBSQURFT05fUFBfVFhPRkZTRVRfMCkgLyAyNDsKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QwXzA6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QwXzE6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QwXzI6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QwXzM6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QwXzQ6CisJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wKSAvIDQ7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPnRleHR1cmVzWzBdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQlicmVhazsKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMDoKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMToKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMjoKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMzoKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfNDoKKwkJaSA9IChyZWcgLSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzApIC8gNDsKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQl0cmFjay0+dGV4dHVyZXNbMV0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8wOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8xOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8yOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8zOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl80OgorCQlpID0gKHJlZyAtIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMCkgLyA0OworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgorCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX0NPTE9SUElUQ0g6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KIAotCQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCi0JCQkJdGlsZV9mbGFncyB8PSBSQURFT05fRFNUX1RJTEVfTUFDUk87Ci0JCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykgewotCQkJCWlmIChyZWcgPT0gUkFERU9OX1NSQ19QSVRDSF9PRkZTRVQpIHsKLQkJCQkJRFJNX0VSUk9SKCJDYW5ub3Qgc3JjIGJsaXQgZnJvbSBtaWNyb3RpbGVkIHN1cmZhY2VcbiIpOwotCQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9EU1RfVElMRV9NSUNSTzsKLQkJCX0KKwkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCisJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9USUxFX0VOQUJMRTsKKwkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCisJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9NSUNST1RJTEVfRU5BQkxFOwogCi0JCQl0bXAgfD0gdGlsZV9mbGFnczsKLQkJCWliW2lkeF0gPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNmYzAwMDAwKSB8IHRtcDsKKwkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCB8PSB0aWxlX2ZsYWdzOworCQlpYltpZHhdID0gdG1wOworCisJCXRyYWNrLT5jYlswXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgorCQl0cmFjay0+emIucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfQ05UTDoKKwkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKKwkJY2FzZSA3OgorCQljYXNlIDg6CisJCWNhc2UgOToKKwkJY2FzZSAxMToKKwkJY2FzZSAxMjoKKwkJCXRyYWNrLT5jYlswXS5jcHAgPSAxOwogCQkJYnJlYWs7Ci0JCWNhc2UgUkFERU9OX1JCM0RfREVQVEhPRkZTRVQ6Ci0JCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQ6Ci0JCWNhc2UgUjMwMF9SQjNEX0NPTE9ST0ZGU0VUMDoKLQkJY2FzZSBSMzAwX1pCX0RFUFRIT0ZGU0VUOgotCQljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMDoKLQkJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzE6Ci0JCWNhc2UgUjIwMF9QUF9UWE9GRlNFVF8yOgotCQljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMzoKLQkJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzQ6Ci0JCWNhc2UgUjIwMF9QUF9UWE9GRlNFVF81OgotCQljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8wOgotCQljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8xOgotCQljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8yOgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzA6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs0OgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArODoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzEyOgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArMTY6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCsyMDoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzI0OgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArMjg6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCszMjoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzM2OgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArNDA6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs0NDoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzQ4OgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArNTI6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs1NjoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzYwOgotCQkJLyogcm41MCBoYXMgbm8gM0QgZW5naW5lIHNvIGZhaWwgb24gYW55IDNkIHNldHVwICovCi0JCQlpZiAoQVNJQ19JU19STjUwKHAtPnJkZXYpKSB7Ci0JCQkJRFJNX0VSUk9SKCJhdHRlbXB0IHRvIHVzZSBSTjUwIDNEIGVuZ2luZSBmYWlsZWRcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCWlmIChyKSB7Ci0JCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKLQkJCQkJICBpZHgsIHJlZyk7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiByOwotCQkJfQotCQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWNhc2UgMzoKKwkJY2FzZSA0OgorCQljYXNlIDE1OgorCQkJdHJhY2stPmNiWzBdLmNwcCA9IDI7CiAJCQlicmVhazsKLQkJY2FzZSBSMzAwX1JCM0RfQ09MT1JQSVRDSDA6Ci0JCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JQSVRDSDoKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCi0JCQkJCSAgaWR4LCByZWcpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQotCQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCi0JCQkJdGlsZV9mbGFncyB8PSBSQURFT05fQ09MT1JfVElMRV9FTkFCTEU7Ci0JCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKLQkJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9NSUNST1RJTEVfRU5BQkxFOwotCi0JCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIH4oMHg3IDw8IDE2KTsKLQkJCXRtcCB8PSB0aWxlX2ZsYWdzOwotCQkJaWJbaWR4XSA9IHRtcDsKLQkJCWJyZWFrOwotCQljYXNlIFJBREVPTl9SQjNEX1pQQVNTX0FERFI6Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAotCQkJCQkgIGlkeCwgcmVnKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJY2FzZSA2OgorCQkJdHJhY2stPmNiWzBdLmNwcCA9IDQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCS8qIEZJWE1FOiB3ZSBkb24ndCB3YW50IHRvIGFsbG93IGFueW90aGVycyBwYWNrZXQgKi8KKwkJCURSTV9FUlJPUigiSW52YWxpZCBjb2xvciBidWZmZXIgZm9ybWF0ICglZCkgIVxuIiwKKwkJCQkgICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMOgorCQlzd2l0Y2ggKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHhmKSB7CisJCWNhc2UgMDoKKwkJCXRyYWNrLT56Yi5jcHAgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQljYXNlIDQ6CisJCWNhc2UgNToKKwkJY2FzZSA5OgorCQljYXNlIDExOgorCQkJdHJhY2stPnpiLmNwcCA9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChvbmVyZWcpIHsKLQkJCS8qIEZJWE1FOiBmb3JiaWQgb25lcmVnIHdyaXRlIHRvIHJlZ2lzdGVyIG9uIHJlbG9jYXRlICovCisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfWlBBU1NfQUREUjoKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfQ05UTDoKKwkJeworCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCisJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOworCQl9CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlicmVhazsKKwljYXNlIFJBREVPTl9TRV9WVFhfRk1UOgorCQl0cmFjay0+dnR4X3NpemUgPSByMTAwX2dldF92dHhfc2l6ZShpYl9jaHVuay0+a2RhdGFbaWR4XSk7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1BQX1RFWF9TSVpFXzA6CisJY2FzZSBSQURFT05fUFBfVEVYX1NJWkVfMToKKwljYXNlIFJBREVPTl9QUF9URVhfU0laRV8yOgorCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfU0laRV8wKSAvIDg7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9URVhfVVNJWkVfTUFTSykgKyAxOworCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9URVhfVlNJWkVfTUFTSykgPj4gUkFERU9OX1RFWF9WU0laRV9TSElGVCkgKyAxOworCQlicmVhazsKKwljYXNlIFJBREVPTl9QUF9URVhfUElUQ0hfMDoKKwljYXNlIFJBREVPTl9QUF9URVhfUElUQ0hfMToKKwljYXNlIFJBREVPTl9QUF9URVhfUElUQ0hfMjoKKwkJaSA9IChyZWcgLSBSQURFT05fUFBfVEVYX1BJVENIXzApIC8gODsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAzMjsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMDoKKwljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8xOgorCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzI6CisJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gMjQ7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9NQVhfTUlQX0xFVkVMX01BU0spCisJCQkJCQkgPj4gUkFERU9OX01BWF9NSVBfTEVWRUxfU0hJRlQpOworCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjMpICYgMHg3OworCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCisJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF93ID0gZmFsc2U7CisJCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNykgJiAweDc7CisJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMDoKKwljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8xOgorCWNhc2UgUkFERU9OX1BQX1RYRk9STUFUXzI6CisJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYRk9STUFUXzApIC8gMjQ7CisJCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9OT05fUE9XRVIyKSB7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gMTsKKwkJfSBlbHNlIHsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAwOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9UWEZPUk1BVF9XSURUSF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfV0lEVEhfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX0hFSUdIVF9NQVNLKTsKKwkJfQorCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfQ1VCSUNfTUFQX0VOQUJMRSkKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS50ZXhfY29vcmRfdHlwZSA9IDI7CisJCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgeworCQljYXNlIFJBREVPTl9UWEZPUk1BVF9JODoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCMzMyOgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9ZODoKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0FJODg6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0FSR0IxNTU1OgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9SR0I1NjU6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0FSR0I0NDQ0OgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9WWVVZNDIyOgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9ZVllVNDIyOgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9EWFQxOgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9TSEFET1cxNjoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfTERVRFY2NTU6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0RVRFY4ODoKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0FSR0I4ODg4OgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9SR0JBODg4ODoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfRFhUMjM6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0RYVDQ1OgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9TSEFET1czMjoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfTERVRFVWODg4ODoKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQlicmVhazsKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18wOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzE6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMjoKKwkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzApIC8gNDsKKwkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgeworCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS5oZWlnaHQgPSAxIDw8ICgodG1wID4+ICgoZmFjZSAqIDgpICsgNCkpICYgMHhmKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCisJCSAgICAgICByZWcsIGlkeCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExMzcsNiArMTQ0Nyw3IEBACiB7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXVuc2lnbmVkIGlkeDsKIAl1bnNpZ25lZCBpLCBjOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKQEAgLTExNDUsOSArMTQ1NiwxMSBAQAogCWliID0gcC0+aWItPnB0cjsKIAlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeCArIDE7CisJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKIAlzd2l0Y2ggKHBrdC0+b3Bjb2RlKSB7CiAJY2FzZSBQQUNLRVQzXzNEX0xPQURfVkJQTlRSOgogCQljID0gaWJfY2h1bmstPmtkYXRhW2lkeCsrXTsKKwkJdHJhY2stPm51bV9hcnJheXMgPSBjOwogCQlmb3IgKGkgPSAwOyBpIDwgKGMgLSAxKTsgaSArPSAyLCBpZHggKz0gMykgewogCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAkJCWlmIChyKSB7CkBAIC0xMTU3LDYgKzE0NzAsOSBAQAogCQkJCXJldHVybiByOwogCQkJfQogCQkJaWJbaWR4KzFdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsxXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQkJdHJhY2stPmFycmF5c1tpICsgMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA4OworCQkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgJj0gMHg3RjsKIAkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJCQlpZiAocikgewogCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCkBAIC0xMTY1LDYgKzE0ODEsOSBAQAogCQkJCXJldHVybiByOwogCQkJfQogCQkJaWJbaWR4KzJdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQkJdHJhY2stPmFycmF5c1tpICsgMV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNDsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDFdLmVzaXplICY9IDB4N0Y7CiAJCX0KIAkJaWYgKGMgJiAxKSB7CiAJCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTE3NSw2ICsxNDk0LDkgQEAKIAkJCQlyZXR1cm4gcjsKIAkJCX0KIAkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX0lORFhfQlVGRkVSOgpAQCAtMTE5MSw3ICsxNTEzLDYgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIDB4MjM6Ci0JCS8qIEZJWE1FOiBjbGVhbnVwICovCiAJCS8qIDNEX1JORFJfR0VOX0lORFhfUFJJTSBvbiByMTAwL3IyMDAgKi8KIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAkJaWYgKHIpIHsKQEAgLTEyMDAsMTggKzE1MjEsNzEgQEAKIAkJCXJldHVybiByOwogCQl9CiAJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+bnVtX2FycmF5cyA9IDE7CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKGliX2NodW5rLT5rZGF0YVtpZHgrMl0pOworCisJCXRyYWNrLT5hcnJheXNbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzWzBdLmVzaXplID0gdHJhY2stPnZ0eF9zaXplOworCisJCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCszXTsKKwkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudCAtIDE7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU1NRDoKKwkJaWYgKCgoaWJfY2h1bmstPmtkYXRhW2lkeCsxXSA+PiA0KSAmIDB4MykgIT0gMykgeworCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCsxXTsKKwkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudCAtIDE7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU1NRF8yOgorCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA0KSAmIDB4MykgIT0gMykgeworCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQ7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgorCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyBvZiB2ZXJ0ZXggYnVmZmVycyBzZXR1cCBlbHNld2hlcmUgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYXzI6CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIHVzaW5nIGluZGljZXMgdG8gdmVydGV4IGJ1ZmZlciAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUY6CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHggKyAxXTsKKwkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyBvZiB2ZXJ0ZXggYnVmZmVycyBzZXR1cCBlbHNld2hlcmUgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYOgorCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW5kaWNlcyB0byB2ZXJ0ZXggYnVmZmVyICovCiAJY2FzZSBQQUNLRVQzX05PUDoKIAkJYnJlYWs7CkBAIC0xMjI1LDggKzE1OTksMTIgQEAKIGludCByMTAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQogewogCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHBrdDsKKwlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJaW50IHI7CiAKKwl0cmFjayA9IGt6YWxsb2Moc2l6ZW9mKCp0cmFjayksIEdGUF9LRVJORUwpOworCXIxMDBfY3NfdHJhY2tfY2xlYXIocC0+cmRldiwgdHJhY2spOworCXAtPnRyYWNrID0gdHJhY2s7CiAJZG8gewogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJnBrdCwgcC0+aWR4KTsKIAkJaWYgKHIpIHsKQEAgLTEyMzUsNyArMTYxMywxNiBAQAogCQlwLT5pZHggKz0gcGt0LmNvdW50ICsgMjsKIAkJc3dpdGNoIChwa3QudHlwZSkgewogCQkJY2FzZSBQQUNLRVRfVFlQRTA6Ci0JCQkJciA9IHIxMDBfcGFja2V0MF9jaGVjayhwLCAmcGt0KTsKKwkJCQlpZiAocC0+cmRldi0+ZmFtaWx5ID49IENISVBfUjIwMCkKKwkJCQkJciA9IHIxMDBfY3NfcGFyc2VfcGFja2V0MChwLCAmcGt0LAorCQkJCQkJCQkgIHAtPnJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtLAorCQkJCQkJCQkgIHAtPnJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtX3NpemUsCisJCQkJCQkJCSAgJnIyMDBfcGFja2V0MF9jaGVjayk7CisJCQkJZWxzZQorCQkJCQlyID0gcjEwMF9jc19wYXJzZV9wYWNrZXQwKHAsICZwa3QsCisJCQkJCQkJCSAgcC0+cmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm0sCisJCQkJCQkJCSAgcC0+cmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSwKKwkJCQkJCQkJICAmcjEwMF9wYWNrZXQwX2NoZWNrKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgUEFDS0VUX1RZUEUyOgogCQkJCWJyZWFrOwpAQCAtMTU2OCw2ICsxOTU1LDIwIEBACiAJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwogfQogCit2b2lkIHIxMDBfdmdhX3NldF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBzdGF0ZSkKK3sKKwl1aW50MzJfdCB0ZW1wOworCisJdGVtcCA9IFJSRUczMihSQURFT05fQ09ORklHX0NOVEwpOworCWlmIChzdGF0ZSA9PSBmYWxzZSkgeworCQl0ZW1wICY9IH4oMTw8OCk7CisJCXRlbXAgfD0gKDE8PDkpOworCX0gZWxzZSB7CisJCXRlbXAgJj0gfigxPDw5KTsKKwl9CisJV1JFRzMyKFJBREVPTl9DT05GSUdfQ05UTCwgdGVtcCk7Cit9CisKIHZvaWQgcjEwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcjEwMF92cmFtX2dldF90eXBlKHJkZXYpOwpAQCAtMTYzNCw2ICsyMDM1LDE1IEBACiAKIGludCByMTAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJaWYgKEFTSUNfSVNfUk41MChyZGV2KSkgeworCQlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibSA9IHJuNTBfcmVnX3NhZmVfYm07CisJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHJuNTBfcmVnX3NhZmVfYm0pOworCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9SMjAwKSB7CisJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjEwMF9yZWdfc2FmZV9ibTsKKwkJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjEwMF9yZWdfc2FmZV9ibSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHIyMDBfaW5pdChyZGV2KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MzksNiArMjI0OSwxMSBAQAogCQkJZmxhZ3MgfD0gUjMwMF9TVVJGX1RJTEVfTUlDUk87CiAJfQogCisJaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfU1dBUF8xNkJJVCkKKwkJZmxhZ3MgfD0gUkFERU9OX1NVUkZfQVAwX1NXUF8xNkJQUCB8IFJBREVPTl9TVVJGX0FQMV9TV1BfMTZCUFA7CisJaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfU1dBUF8zMkJJVCkKKwkJZmxhZ3MgfD0gUkFERU9OX1NVUkZfQVAwX1NXUF8zMkJQUCB8IFJBREVPTl9TVVJGX0FQMV9TV1BfMzJCUFA7CisKIAlEUk1fREVCVUcoIndyaXRpbmcgc3VyZmFjZSAlZCAlZCAleCAleFxuIiwgcmVnLCBmbGFncywgb2Zmc2V0LCBvZmZzZXQrb2JqX3NpemUtMSk7CiAJV1JFRzMyKFJBREVPTl9TVVJGQUNFMF9JTkZPICsgc3VyZl9pbmRleCwgZmxhZ3MpOwogCVdSRUczMihSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKyBzdXJmX2luZGV4LCBvZmZzZXQpOwpAQCAtMjMzNCwzICsyNzQ5LDQ2MCBAQAogCQkJICAodW5zaWduZWQgaW50KVJSRUczMihSQURFT05fR1JQSDJfQlVGRkVSX0NOVEwpKTsKIAl9CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByMTAwX2NzX3RyYWNrX3RleHR1cmVfcHJpbnQoc3RydWN0IHIxMDBfY3NfdHJhY2tfdGV4dHVyZSAqdCkKK3sKKwlEUk1fRVJST1IoInBpdGNoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5waXRjaCk7CisJRFJNX0VSUk9SKCJ3aWR0aCAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+d2lkdGgpOworCURSTV9FUlJPUigiaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmhlaWdodCk7CisJRFJNX0VSUk9SKCJudW0gbGV2ZWxzICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+bnVtX2xldmVscyk7CisJRFJNX0VSUk9SKCJkZXB0aCAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+dHhkZXB0aCk7CisJRFJNX0VSUk9SKCJicHAgICAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+Y3BwKTsKKwlEUk1fRVJST1IoImNvb3JkaW5hdGUgdHlwZSAgICAgICAgICAgICVkXG4iLCB0LT50ZXhfY29vcmRfdHlwZSk7CisJRFJNX0VSUk9SKCJ3aWR0aCByb3VuZCB0byBwb3dlciBvZiAyICAlZFxuIiwgdC0+cm91bmR1cF93KTsKKwlEUk1fRVJST1IoImhlaWdodCByb3VuZCB0byBwb3dlciBvZiAyICVkXG4iLCB0LT5yb3VuZHVwX2gpOworfQorCitzdGF0aWMgaW50IHIxMDBfY3NfdHJhY2tfY3ViZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCSAgICAgIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjaywgdW5zaWduZWQgaWR4KQoreworCXVuc2lnbmVkIGZhY2UsIHcsIGg7CisJc3RydWN0IHJhZGVvbl9vYmplY3QgKmN1YmVfcm9iajsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlmb3IgKGZhY2UgPSAwOyBmYWNlIDwgNTsgZmFjZSsrKSB7CisJCWN1YmVfcm9iaiA9IHRyYWNrLT50ZXh0dXJlc1tpZHhdLmN1YmVfaW5mb1tmYWNlXS5yb2JqOworCQl3ID0gdHJhY2stPnRleHR1cmVzW2lkeF0uY3ViZV9pbmZvW2ZhY2VdLndpZHRoOworCQloID0gdHJhY2stPnRleHR1cmVzW2lkeF0uY3ViZV9pbmZvW2ZhY2VdLmhlaWdodDsKKworCQlzaXplID0gdyAqIGg7CisJCXNpemUgKj0gdHJhY2stPnRleHR1cmVzW2lkeF0uY3BwOworCisJCXNpemUgKz0gdHJhY2stPnRleHR1cmVzW2lkeF0uY3ViZV9pbmZvW2ZhY2VdLm9mZnNldDsKKworCQlpZiAoc2l6ZSA+IHJhZGVvbl9vYmplY3Rfc2l6ZShjdWJlX3JvYmopKSB7CisJCQlEUk1fRVJST1IoIkN1YmUgdGV4dHVyZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9iamVjdCBzaXplICVsdSAlbHVcbiIsCisJCQkJICBzaXplLCByYWRlb25fb2JqZWN0X3NpemUoY3ViZV9yb2JqKSk7CisJCQlyMTAwX2NzX3RyYWNrX3RleHR1cmVfcHJpbnQoJnRyYWNrLT50ZXh0dXJlc1tpZHhdKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByMTAwX2NzX3RyYWNrX3RleHR1cmVfY2hlY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJICAgICAgIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjaykKK3sKKwlzdHJ1Y3QgcmFkZW9uX29iamVjdCAqcm9iajsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgdSwgaSwgdywgaDsKKwlpbnQgcmV0OworCisJZm9yICh1ID0gMDsgdSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgdSsrKSB7CisJCWlmICghdHJhY2stPnRleHR1cmVzW3VdLmVuYWJsZWQpCisJCQljb250aW51ZTsKKwkJcm9iaiA9IHRyYWNrLT50ZXh0dXJlc1t1XS5yb2JqOworCQlpZiAocm9iaiA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIk5vIHRleHR1cmUgYm91bmQgdG8gdW5pdCAldVxuIiwgdSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzaXplID0gMDsKKwkJZm9yIChpID0gMDsgaSA8PSB0cmFjay0+dGV4dHVyZXNbdV0ubnVtX2xldmVsczsgaSsrKSB7CisJCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnVzZV9waXRjaCkgeworCQkJCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1IzMDApCisJCQkJCXcgPSAodHJhY2stPnRleHR1cmVzW3VdLnBpdGNoIC8gdHJhY2stPnRleHR1cmVzW3VdLmNwcCkgLyAoMSA8PCBpKTsKKwkJCQllbHNlCisJCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ucGl0Y2ggLyAoMSA8PCBpKTsKKwkJCX0gZWxzZSB7CisJCQkJdyA9IHRyYWNrLT50ZXh0dXJlc1t1XS53aWR0aCAvICgxIDw8IGkpOworCQkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKKwkJCQkJdyB8PSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGhfMTE7CisJCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX3cpCisJCQkJCXcgPSByb3VuZHVwX3Bvd19vZl90d28odyk7CisJCQl9CisJCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodCAvICgxIDw8IGkpOworCQkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1KQorCQkJCWggfD0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodF8xMTsKKwkJCWlmICh0cmFjay0+dGV4dHVyZXNbdV0ucm91bmR1cF9oKQorCQkJCWggPSByb3VuZHVwX3Bvd19vZl90d28oaCk7CisJCQlzaXplICs9IHcgKiBoOworCQl9CisJCXNpemUgKj0gdHJhY2stPnRleHR1cmVzW3VdLmNwcDsKKwkJc3dpdGNoICh0cmFjay0+dGV4dHVyZXNbdV0udGV4X2Nvb3JkX3R5cGUpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNpemUgKj0gKDEgPDwgdHJhY2stPnRleHR1cmVzW3VdLnR4ZGVwdGgpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmICh0cmFjay0+c2VwYXJhdGVfY3ViZSkgeworCQkJCXJldCA9IHIxMDBfY3NfdHJhY2tfY3ViZShyZGV2LCB0cmFjaywgdSk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0gZWxzZQorCQkJCXNpemUgKj0gNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHRleHR1cmUgY29vcmRpbmF0ZSB0eXBlICV1IGZvciB1bml0ICIKKwkJCQkgICIldVxuIiwgdHJhY2stPnRleHR1cmVzW3VdLnRleF9jb29yZF90eXBlLCB1KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHJvYmopKSB7CisJCQlEUk1fRVJST1IoIlRleHR1cmUgb2YgdW5pdCAldSBuZWVkcyAlbHUgYnl0ZXMgYnV0IGlzICIKKwkJCQkgICIlbHVcbiIsIHUsIHNpemUsIHJhZGVvbl9vYmplY3Rfc2l6ZShyb2JqKSk7CisJCQlyMTAwX2NzX3RyYWNrX3RleHR1cmVfcHJpbnQoJnRyYWNrLT50ZXh0dXJlc1t1XSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHIxMDBfY3NfdHJhY2tfY2hlY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjaykKK3sKKwl1bnNpZ25lZCBpOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBwcmltX3dhbGs7CisJdW5zaWduZWQgbnZlcnRzOworCisJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fY2I7IGkrKykgeworCQlpZiAodHJhY2stPmNiW2ldLnJvYmogPT0gTlVMTCkgeworCQkJRFJNX0VSUk9SKCJbZHJtXSBObyBidWZmZXIgZm9yIGNvbG9yIGJ1ZmZlciAlZCAhXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXNpemUgPSB0cmFjay0+Y2JbaV0ucGl0Y2ggKiB0cmFjay0+Y2JbaV0uY3BwICogdHJhY2stPm1heHk7CisJCXNpemUgKz0gdHJhY2stPmNiW2ldLm9mZnNldDsKKwkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmNiW2ldLnJvYmopKSB7CisJCQlEUk1fRVJST1IoIltkcm1dIEJ1ZmZlciB0b28gc21hbGwgZm9yIGNvbG9yIGJ1ZmZlciAlZCAiCisJCQkJICAiKG5lZWQgJWx1IGhhdmUgJWx1KSAhXG4iLCBpLCBzaXplLAorCQkJCSAgcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5jYltpXS5yb2JqKSk7CisJCQlEUk1fRVJST1IoIltkcm1dIGNvbG9yIGJ1ZmZlciAlZCAoJXUgJXUgJXUgJXUpXG4iLAorCQkJCSAgaSwgdHJhY2stPmNiW2ldLnBpdGNoLCB0cmFjay0+Y2JbaV0uY3BwLAorCQkJCSAgdHJhY2stPmNiW2ldLm9mZnNldCwgdHJhY2stPm1heHkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKHRyYWNrLT56X2VuYWJsZWQpIHsKKwkJaWYgKHRyYWNrLT56Yi5yb2JqID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiW2RybV0gTm8gYnVmZmVyIGZvciB6IGJ1ZmZlciAhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXNpemUgPSB0cmFjay0+emIucGl0Y2ggKiB0cmFjay0+emIuY3BwICogdHJhY2stPm1heHk7CisJCXNpemUgKz0gdHJhY2stPnpiLm9mZnNldDsKKwkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPnpiLnJvYmopKSB7CisJCQlEUk1fRVJST1IoIltkcm1dIEJ1ZmZlciB0b28gc21hbGwgZm9yIHogYnVmZmVyICIKKwkJCQkgICIobmVlZCAlbHUgaGF2ZSAlbHUpICFcbiIsIHNpemUsCisJCQkJICByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPnpiLnJvYmopKTsKKwkJCURSTV9FUlJPUigiW2RybV0gemJ1ZmZlciAoJXUgJXUgJXUgJXUpXG4iLAorCQkJCSAgdHJhY2stPnpiLnBpdGNoLCB0cmFjay0+emIuY3BwLAorCQkJCSAgdHJhY2stPnpiLm9mZnNldCwgdHJhY2stPm1heHkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcHJpbV93YWxrID0gKHRyYWNrLT52YXBfdmZfY250bCA+PiA0KSAmIDB4MzsKKwludmVydHMgPSAodHJhY2stPnZhcF92Zl9jbnRsID4+IDE2KSAmIDB4RkZGRjsKKwlzd2l0Y2ggKHByaW1fd2FsaykgeworCWNhc2UgMToKKwkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fYXJyYXlzOyBpKyspIHsKKwkJCXNpemUgPSB0cmFjay0+YXJyYXlzW2ldLmVzaXplICogdHJhY2stPm1heF9pbmR4ICogNDsKKwkJCWlmICh0cmFjay0+YXJyYXlzW2ldLnJvYmogPT0gTlVMTCkgeworCQkJCURSTV9FUlJPUigiKFBXICV1KSBWZXJ0ZXggYXJyYXkgJXUgbm8gYnVmZmVyICIKKwkJCQkJICAiYm91bmRcbiIsIHByaW1fd2FsaywgaSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoc2l6ZSA+IHJhZGVvbl9vYmplY3Rfc2l6ZSh0cmFjay0+YXJyYXlzW2ldLnJvYmopKSB7CisJCQkJRFJNX0VSUk9SKCIoUFcgJXUpIFZlcnRleCBhcnJheSAldSBuZWVkICVsdSBkd29yZHMgIgorCQkJCQkgICAiaGF2ZSAlbHUgZHdvcmRzXG4iLCBwcmltX3dhbGssIGksCisJCQkJCSAgIHNpemUgPj4gMiwKKwkJCQkJICAgcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5hcnJheXNbaV0ucm9iaikgPj4gMik7CisJCQkJRFJNX0VSUk9SKCJNYXggaW5kaWNlcyAldVxuIiwgdHJhY2stPm1heF9pbmR4KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIDI6CisJCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2FycmF5czsgaSsrKSB7CisJCQlzaXplID0gdHJhY2stPmFycmF5c1tpXS5lc2l6ZSAqIChudmVydHMgLSAxKSAqIDQ7CisJCQlpZiAodHJhY2stPmFycmF5c1tpXS5yb2JqID09IE5VTEwpIHsKKwkJCQlEUk1fRVJST1IoIihQVyAldSkgVmVydGV4IGFycmF5ICV1IG5vIGJ1ZmZlciAiCisJCQkJCSAgImJvdW5kXG4iLCBwcmltX3dhbGssIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmFycmF5c1tpXS5yb2JqKSkgeworCQkJCURSTV9FUlJPUigiKFBXICV1KSBWZXJ0ZXggYXJyYXkgJXUgbmVlZCAlbHUgZHdvcmRzICIKKwkJCQkJICAgImhhdmUgJWx1IGR3b3Jkc1xuIiwgcHJpbV93YWxrLCBpLCBzaXplID4+IDIsCisJCQkJCSAgIHJhZGVvbl9vYmplY3Rfc2l6ZSh0cmFjay0+YXJyYXlzW2ldLnJvYmopID4+IDIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc2l6ZSA9IHRyYWNrLT52dHhfc2l6ZSAqIG52ZXJ0czsKKwkJaWYgKHNpemUgIT0gdHJhY2stPmltbWRfZHdvcmRzKSB7CisJCQlEUk1fRVJST1IoIklNTUQgZHJhdyAldSBkd29ycyBidXQgbmVlZHMgJWx1IGR3b3Jkc1xuIiwKKwkJCQkgIHRyYWNrLT5pbW1kX2R3b3Jkcywgc2l6ZSk7CisJCQlEUk1fRVJST1IoIlZBUF9WRl9DTlRMLk5VTV9WRVJUSUNFUyAldSwgVlRYX1NJWkUgJXVcbiIsCisJCQkJICBudmVydHMsIHRyYWNrLT52dHhfc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIltkcm1dIEludmFsaWQgcHJpbWl0aXZlIHdhbGsgJWQgZm9yIFZBUF9WRl9DTlRMXG4iLAorCQkJICBwcmltX3dhbGspOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9jaGVjayhyZGV2LCB0cmFjayk7Cit9CisKK3ZvaWQgcjEwMF9jc190cmFja19jbGVhcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrKQoreworCXVuc2lnbmVkIGksIGZhY2U7CisKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9SMzAwKSB7CisJCXRyYWNrLT5udW1fY2IgPSAxOworCQlpZiAocmRldi0+ZmFtaWx5IDw9IENISVBfUlMyMDApCisJCQl0cmFjay0+bnVtX3RleHR1cmUgPSAzOworCQllbHNlCisJCQl0cmFjay0+bnVtX3RleHR1cmUgPSA2OworCQl0cmFjay0+bWF4eSA9IDIwNDg7CisJCXRyYWNrLT5zZXBhcmF0ZV9jdWJlID0gMTsKKwl9IGVsc2UgeworCQl0cmFjay0+bnVtX2NiID0gNDsKKwkJdHJhY2stPm51bV90ZXh0dXJlID0gMTY7CisJCXRyYWNrLT5tYXh5ID0gNDA5NjsKKwkJdHJhY2stPnNlcGFyYXRlX2N1YmUgPSAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2NiOyBpKyspIHsKKwkJdHJhY2stPmNiW2ldLnJvYmogPSBOVUxMOworCQl0cmFjay0+Y2JbaV0ucGl0Y2ggPSA4MTkyOworCQl0cmFjay0+Y2JbaV0uY3BwID0gMTY7CisJCXRyYWNrLT5jYltpXS5vZmZzZXQgPSAwOworCX0KKwl0cmFjay0+el9lbmFibGVkID0gdHJ1ZTsKKwl0cmFjay0+emIucm9iaiA9IE5VTEw7CisJdHJhY2stPnpiLnBpdGNoID0gODE5MjsKKwl0cmFjay0+emIuY3BwID0gNDsKKwl0cmFjay0+emIub2Zmc2V0ID0gMDsKKwl0cmFjay0+dnR4X3NpemUgPSAweDdGOworCXRyYWNrLT5pbW1kX2R3b3JkcyA9IDB4RkZGRkZGRkZVTDsKKwl0cmFjay0+bnVtX2FycmF5cyA9IDExOworCXRyYWNrLT5tYXhfaW5keCA9IDB4MDBGRkZGRkZVTDsKKwlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9hcnJheXM7IGkrKykgeworCQl0cmFjay0+YXJyYXlzW2ldLnJvYmogPSBOVUxMOworCQl0cmFjay0+YXJyYXlzW2ldLmVzaXplID0gMHg3RjsKKwl9CisJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKSB7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IDE2NTM2OworCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxNjUzNjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDE2NTM2OworCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGhfMTEgPSAxIDw8IDExOworCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0XzExID0gMSA8PCAxMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLm51bV9sZXZlbHMgPSAxMjsKKwkJaWYgKHJkZXYtPmZhbWlseSA8PSBDSElQX1JTMjAwKSB7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAwOworCQkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSAwOworCQl9IGVsc2UgeworCQkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSAxNjsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS50ZXhfY29vcmRfdHlwZSA9IDE7CisJCX0KKwkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDY0OworCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IE5VTEw7CisJCS8qIENTIElCIGVtaXNzaW9uIGNvZGUgbWFrZXMgc3VyZSB0ZXh0dXJlIHVuaXQgYXJlIGRpc2FibGVkICovCisJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gZmFsc2U7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSB0cnVlOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gdHJ1ZTsKKwkJaWYgKHRyYWNrLT5zZXBhcmF0ZV9jdWJlKQorCQkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDU7IGZhY2UrKykgeworCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ucm9iaiA9IE5VTEw7CisJCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDE2NTM2OworCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0uaGVpZ2h0ID0gMTY1MzY7CisJCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS5vZmZzZXQgPSAwOworCQkJfQorCX0KK30KKworaW50IHIxMDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQzMl90IHNjcmF0Y2g7CisJdWludDMyX3QgdG1wID0gMDsKKwl1bnNpZ25lZCBpOworCWludCByOworCisJciA9IHJhZGVvbl9zY3JhdGNoX2dldChyZGV2LCAmc2NyYXRjaCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGNwIGZhaWxlZCB0byBnZXQgc2NyYXRjaCByZWcgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJV1JFRzMyKHNjcmF0Y2gsIDB4Q0FGRURFQUQpOworCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIDIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBjcCBmYWlsZWQgdG8gbG9jayByaW5nICglZCkuXG4iLCByKTsKKwkJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKKwkJcmV0dXJuIHI7CisJfQorCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoc2NyYXRjaCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4REVBREJFRUYpOworCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7CisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCXRtcCA9IFJSRUczMihzY3JhdGNoKTsKKwkJaWYgKHRtcCA9PSAweERFQURCRUVGKSB7CisJCQlicmVhazsKKwkJfQorCQlEUk1fVURFTEFZKDEpOworCX0KKwlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgeworCQlEUk1fSU5GTygicmluZyB0ZXN0IHN1Y2NlZWRlZCBpbiAlZCB1c2Vjc1xuIiwgaSk7CisJfSBlbHNlIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IHJpbmcgdGVzdCBmYWlsZWQgKHNyYWN0aCgweCUwNFgpPTB4JTA4WClcbiIsCisJCQkgIHNjcmF0Y2gsIHRtcCk7CisJCXIgPSAtRUlOVkFMOworCX0KKwlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHNjcmF0Y2gpOworCXJldHVybiByOworfQorCit2b2lkIHIxMDBfcmluZ19pYl9leGVjdXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYikKK3sKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9DUF9JQl9CQVNFLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmdwdV9hZGRyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBpYi0+bGVuZ3RoX2R3KTsKK30KKworaW50IHIxMDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2liICppYjsKKwl1aW50MzJfdCBzY3JhdGNoOworCXVpbnQzMl90IHRtcCA9IDA7CisJdW5zaWduZWQgaTsKKwlpbnQgcjsKKworCXIgPSByYWRlb25fc2NyYXRjaF9nZXQocmRldiwgJnNjcmF0Y2gpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCVdSRUczMihzY3JhdGNoLCAweENBRkVERUFEKTsKKwlyID0gcmFkZW9uX2liX2dldChyZGV2LCAmaWIpOworCWlmIChyKSB7CisJCXJldHVybiByOworCX0KKwlpYi0+cHRyWzBdID0gUEFDS0VUMChzY3JhdGNoLCAwKTsKKwlpYi0+cHRyWzFdID0gMHhERUFEQkVFRjsKKwlpYi0+cHRyWzJdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzNdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzRdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzVdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzZdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzddID0gUEFDS0VUMigwKTsKKwlpYi0+bGVuZ3RoX2R3ID0gODsKKwlyID0gcmFkZW9uX2liX3NjaGVkdWxlKHJkZXYsIGliKTsKKwlpZiAocikgeworCQlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHNjcmF0Y2gpOworCQlyYWRlb25faWJfZnJlZShyZGV2LCAmaWIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHJhZGVvbl9mZW5jZV93YWl0KGliLT5mZW5jZSwgZmFsc2UpOworCWlmIChyKSB7CisJCXJldHVybiByOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJdG1wID0gUlJFRzMyKHNjcmF0Y2gpOworCQlpZiAodG1wID09IDB4REVBREJFRUYpIHsKKwkJCWJyZWFrOworCQl9CisJCURSTV9VREVMQVkoMSk7CisJfQorCWlmIChpIDwgcmRldi0+dXNlY190aW1lb3V0KSB7CisJCURSTV9JTkZPKCJpYiB0ZXN0IHN1Y2NlZWRlZCBpbiAldSB1c2Vjc1xuIiwgaSk7CisJfSBlbHNlIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGliIHRlc3QgZmFpbGVkIChzcmFjdGgoMHglMDRYKT0weCUwOFgpXG4iLAorCQkJICBzY3JhdGNoLCB0bXApOworCQlyID0gLUVJTlZBTDsKKwl9CisJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKKwlyYWRlb25faWJfZnJlZShyZGV2LCAmaWIpOworCXJldHVybiByOworfQorCit2b2lkIHIxMDBfaWJfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyYWRlb25faWJfcG9vbF9maW5pKHJkZXYpOworfQorCitpbnQgcjEwMF9pYl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJciA9IHJhZGVvbl9pYl9wb29sX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfaWJfdGVzdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHIxMDBfbWNfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfbWNfc2F2ZSAqc2F2ZSkKK3sKKwkvKiBTaHV0ZG93biBDUCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBkbyB0aGF0IGJ1dCBiZXR0ZXIgYmUgc2FmZSB0aGFuCisJICogc29ycnkKKwkgKi8KKwlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOworCVdSRUczMihSXzAwMDc0MF9DUF9DU1FfQ05UTCwgMCk7CisKKwkvKiBTYXZlIGZldyBDUlRDIHJlZ2lzdGVycyAqLworCXNhdmUtPkdFTk1PX1dUID0gUlJFRzMyKFJfMDAwM0MwX0dFTk1PX1dUKTsKKwlzYXZlLT5DUlRDX0VYVF9DTlRMID0gUlJFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwpOworCXNhdmUtPkNSVENfR0VOX0NOVEwgPSBSUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCk7CisJc2F2ZS0+Q1VSX09GRlNFVCA9IFJSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VUKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKKwkJc2F2ZS0+Q1JUQzJfR0VOX0NOVEwgPSBSUkVHMzIoUl8wMDAzRjhfQ1JUQzJfR0VOX0NOVEwpOworCQlzYXZlLT5DVVIyX09GRlNFVCA9IFJSRUczMihSXzAwMDM2MF9DVVIyX09GRlNFVCk7CisJfQorCisJLyogRGlzYWJsZSBWR0EgYXBlcnR1cmUgYWNjZXNzICovCisJV1JFRzMyKFJfMDAwM0MwX0dFTk1PX1dULCBDXzAwMDNDMF9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOworCS8qIERpc2FibGUgY3Vyc29yLCBvdmVybGF5LCBjcnRjICovCisJV1JFRzMyKFJfMDAwMjYwX0NVUl9PRkZTRVQsIHNhdmUtPkNVUl9PRkZTRVQgfCBTXzAwMDI2MF9DVVJfTE9DSygxKSk7CisJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwgfAorCQkJCQlTXzAwMDA1NF9DUlRDX0RJU1BMQVlfRElTKDEpKTsKKwlXUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCwKKwkJCShDXzAwMDA1MF9DUlRDX0NVUl9FTiAmIHNhdmUtPkNSVENfR0VOX0NOVEwpIHwKKwkJCVNfMDAwMDUwX0NSVENfRElTUF9SRVFfRU5fQigxKSk7CisJV1JFRzMyKFJfMDAwNDIwX09WMF9TQ0FMRV9DTlRMLAorCQlDXzAwMDQyMF9PVjBfT1ZFUkxBWV9FTiAmIFJSRUczMihSXzAwMDQyMF9PVjBfU0NBTEVfQ05UTCkpOworCVdSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VULCBDXzAwMDI2MF9DVVJfTE9DSyAmIHNhdmUtPkNVUl9PRkZTRVQpOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKSkgeworCQlXUkVHMzIoUl8wMDAzNjBfQ1VSMl9PRkZTRVQsIHNhdmUtPkNVUjJfT0ZGU0VUIHwKKwkJCQkJCVNfMDAwMzYwX0NVUjJfTE9DSygxKSk7CisJCVdSRUczMihSXzAwMDNGOF9DUlRDMl9HRU5fQ05UTCwKKwkJCShDXzAwMDNGOF9DUlRDMl9DVVJfRU4gJiBzYXZlLT5DUlRDMl9HRU5fQ05UTCkgfAorCQkJU18wMDAzRjhfQ1JUQzJfRElTUExBWV9ESVMoMSkgfAorCQkJU18wMDAzRjhfQ1JUQzJfRElTUF9SRVFfRU5fQigxKSk7CisJCVdSRUczMihSXzAwMDM2MF9DVVIyX09GRlNFVCwKKwkJCUNfMDAwMzYwX0NVUjJfTE9DSyAmIHNhdmUtPkNVUjJfT0ZGU0VUKTsKKwl9Cit9CisKK3ZvaWQgcjEwMF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX21jX3NhdmUgKnNhdmUpCit7CisJLyogVXBkYXRlIGJhc2UgYWRkcmVzcyBmb3IgY3J0YyAqLworCVdSRUczMihSXzAwMDIzQ19ESVNQTEFZX0JBU0VfQUREUiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7CisJCVdSRUczMihSXzAwMDMzQ19DUlRDMl9ESVNQTEFZX0JBU0VfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKKwl9CisJLyogUmVzdG9yZSBDUlRDIHJlZ2lzdGVycyAqLworCVdSRUczMihSXzAwMDNDMF9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUczMihSXzAwMDA1NF9DUlRDX0VYVF9DTlRMLCBzYXZlLT5DUlRDX0VYVF9DTlRMKTsKKwlXUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCwgc2F2ZS0+Q1JUQ19HRU5fQ05UTCk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7CisJCVdSRUczMihSXzAwMDNGOF9DUlRDMl9HRU5fQ05UTCwgc2F2ZS0+Q1JUQzJfR0VOX0NOVEwpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhODJlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCkBAIC0wLDAgKzEsMTI0IEBACisKKyNkZWZpbmUgUjEwMF9UUkFDS19NQVhfVEVYVFVSRSAzCisjZGVmaW5lIFIyMDBfVFJBQ0tfTUFYX1RFWFRVUkUgNgorI2RlZmluZSBSMzAwX1RSQUNLX01BWF9URVhUVVJFIDE2CisKKyNkZWZpbmUgUjEwMF9NQVhfQ0IgMQorI2RlZmluZSBSMzAwX01BWF9DQiA0CisKKy8qCisgKiBDUyBmdW5jdGlvbnMKKyAqLworc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgeworCXN0cnVjdCByYWRlb25fb2JqZWN0CSpyb2JqOworCXVuc2lnbmVkCQlwaXRjaDsKKwl1bnNpZ25lZAkJY3BwOworCXVuc2lnbmVkCQlvZmZzZXQ7Cit9OworCitzdHJ1Y3QgcjEwMF9jc190cmFja19hcnJheSB7CisJc3RydWN0IHJhZGVvbl9vYmplY3QJKnJvYmo7CisJdW5zaWduZWQJCWVzaXplOworfTsKKworc3RydWN0IHIxMDBfY3NfY3ViZV9pbmZvIHsKKwlzdHJ1Y3QgcmFkZW9uX29iamVjdAkqcm9iajsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICBvZmZzZXQ7CisJdW5zaWduZWQJCXdpZHRoOworCXVuc2lnbmVkCQloZWlnaHQ7Cit9OworCitzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlIHsKKwlzdHJ1Y3QgcmFkZW9uX29iamVjdAkqcm9iajsKKwlzdHJ1Y3QgcjEwMF9jc19jdWJlX2luZm8gY3ViZV9pbmZvWzVdOyAvKiBpbmZvIGZvciA1IG5vbi1wcmltYXJ5IGZhY2VzICovCisJdW5zaWduZWQJCXBpdGNoOworCXVuc2lnbmVkCQl3aWR0aDsKKwl1bnNpZ25lZAkJaGVpZ2h0OworCXVuc2lnbmVkCQludW1fbGV2ZWxzOworCXVuc2lnbmVkCQljcHA7CisJdW5zaWduZWQJCXRleF9jb29yZF90eXBlOworCXVuc2lnbmVkCQl0eGRlcHRoOworCXVuc2lnbmVkCQl3aWR0aF8xMTsKKwl1bnNpZ25lZAkJaGVpZ2h0XzExOworCWJvb2wJCQl1c2VfcGl0Y2g7CisJYm9vbAkJCWVuYWJsZWQ7CisJYm9vbAkJCXJvdW5kdXBfdzsKKwlib29sCQkJcm91bmR1cF9oOworfTsKKworc3RydWN0IHIxMDBfY3NfdHJhY2tfbGltaXRzIHsKKwl1bnNpZ25lZCBudW1fY2I7CisJdW5zaWduZWQgbnVtX3RleHR1cmU7CisJdW5zaWduZWQgbWF4X2xldmVsczsKK307CisKK3N0cnVjdCByMTAwX2NzX3RyYWNrIHsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldjsKKwl1bnNpZ25lZAkJCW51bV9jYjsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgIG51bV90ZXh0dXJlOworCXVuc2lnbmVkCQkJbWF4eTsKKwl1bnNpZ25lZAkJCXZ0eF9zaXplOworCXVuc2lnbmVkCQkJdmFwX3ZmX2NudGw7CisJdW5zaWduZWQJCQlpbW1kX2R3b3JkczsKKwl1bnNpZ25lZAkJCW51bV9hcnJheXM7CisJdW5zaWduZWQJCQltYXhfaW5keDsKKwlzdHJ1Y3QgcjEwMF9jc190cmFja19hcnJheQlhcnJheXNbMTFdOworCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAljYltSMzAwX01BWF9DQl07CisJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCXpiOworCXN0cnVjdCByMTAwX2NzX3RyYWNrX3RleHR1cmUJdGV4dHVyZXNbUjMwMF9UUkFDS19NQVhfVEVYVFVSRV07CisJYm9vbAkJCQl6X2VuYWJsZWQ7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZV9jdWJlOworCit9OworCitpbnQgcjEwMF9jc190cmFja19jaGVjayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrKTsKK3ZvaWQgcjEwMF9jc190cmFja19jbGVhcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrKTsKK2ludCByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKK3ZvaWQgcjEwMF9jc19kdW1wX3BhY2tldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KTsKKworaW50IHIxMDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKKworaW50IHIyMDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJICAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCSAgICAgICB1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHIxMDBfcmVsb2NfcGl0Y2hfb2Zmc2V0KHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCQkgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJCSAgdW5zaWduZWQgaWR4LAorCQkJCQkgIHVuc2lnbmVkIHJlZykKK3sKKwlpbnQgcjsKKwl1MzIgdGlsZV9mbGFncyA9IDA7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKKwlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKKworCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCisJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJICBpZHgsIHJlZyk7CisJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJcmV0dXJuIHI7CisJfQorCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMDNmZmZmZjsKKwl0bXAgKz0gKCgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpID4+IDEwKTsKKworCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01BQ1JPKQorCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9EU1RfVElMRV9NQUNSTzsKKwlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykgeworCQlpZiAocmVnID09IFJBREVPTl9TUkNfUElUQ0hfT0ZGU0VUKSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBzcmMgYmxpdCBmcm9tIG1pY3JvdGlsZWQgc3VyZmFjZVxuIik7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9EU1RfVElMRV9NSUNSTzsKKwl9CisKKwl0bXAgfD0gdGlsZV9mbGFnczsKKwlwLT5pYi0+cHRyW2lkeF0gPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNmYzAwMDAwKSB8IHRtcDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGIyNTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCkBAIC0wLDAgKzEsNjA3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1IxMDBEX0hfXworI2RlZmluZSBfX1IxMDBEX0hfXworCisjZGVmaW5lIENQX1BBQ0tFVDAJCQkweDAwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQwX0JBU0VfSU5ERVhfU0hJRlQJMAorI2RlZmluZQkJUEFDS0VUMF9CQVNFX0lOREVYX01BU0sJCSgweDFmZmZmIDw8IDApCisjZGVmaW5lCQlQQUNLRVQwX0NPVU5UX1NISUZUCQkxNgorI2RlZmluZQkJUEFDS0VUMF9DT1VOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQorI2RlZmluZSBDUF9QQUNLRVQxCQkJMHg0MDAwMDAwMAorI2RlZmluZSBDUF9QQUNLRVQyCQkJMHg4MDAwMDAwMAorI2RlZmluZQkJUEFDS0VUMl9QQURfU0hJRlQJCTAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX01BU0sJCSgweDNmZmZmZmZmIDw8IDApCisjZGVmaW5lIENQX1BBQ0tFVDMJCQkweEMwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQzX0lUX09QQ09ERV9TSElGVAkJOAorI2RlZmluZQkJUEFDS0VUM19JVF9PUENPREVfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJCVBBQ0tFVDNfQ09VTlRfU0hJRlQJCTE2CisjZGVmaW5lCQlQQUNLRVQzX0NPVU5UX01BU0sJCSgweDNmZmYgPDwgMTYpCisvKiBQQUNLRVQzIG9wIGNvZGUgKi8KKyNkZWZpbmUJCVBBQ0tFVDNfTk9QCQkJMHgxMAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUYJCTB4MjgKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1ECQkweDI5CisjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU5EWAkJMHgyQQorI2RlZmluZQkJUEFDS0VUM18zRF9MT0FEX1ZCUE5UUgkJMHgyRgorI2RlZmluZQkJUEFDS0VUM19JTkRYX0JVRkZFUgkJMHgzMworI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUZfMgkJMHgzNAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lNTURfMgkJMHgzNQorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFhfMgkJMHgzNgorI2RlZmluZQkJUEFDS0VUM19CSVRCTFRfTVVMVEkJCTB4OUIKKworI2RlZmluZSBQQUNLRVQwKHJlZywgbikJKENQX1BBQ0tFVDAgfAkJCQkJXAorCQkJIFJFR19TRVQoUEFDS0VUMF9CQVNFX0lOREVYLCAocmVnKSA+PiAyKSB8CVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDBfQ09VTlQsIChuKSkpCisjZGVmaW5lIFBBQ0tFVDIodikJKENQX1BBQ0tFVDIgfCBSRUdfU0VUKFBBQ0tFVDJfUEFELCAodikpKQorI2RlZmluZSBQQUNLRVQzKG9wLCBuKQkoQ1BfUEFDS0VUMyB8CQkJCQlcCisJCQkgUkVHX1NFVChQQUNLRVQzX0lUX09QQ09ERSwgKG9wKSkgfAkJXAorCQkJIFJFR19TRVQoUEFDS0VUM19DT1VOVCwgKG4pKSkKKworI2RlZmluZQlQQUNLRVRfVFlQRTAJMAorI2RlZmluZQlQQUNLRVRfVFlQRTEJMQorI2RlZmluZQlQQUNLRVRfVFlQRTIJMgorI2RlZmluZQlQQUNLRVRfVFlQRTMJMworCisjZGVmaW5lIENQX1BBQ0tFVF9HRVRfVFlQRShoKSAoKChoKSA+PiAzMCkgJiAzKQorI2RlZmluZSBDUF9QQUNLRVRfR0VUX0NPVU5UKGgpICgoKGgpID4+IDE2KSAmIDB4M0ZGRikKKyNkZWZpbmUgQ1BfUEFDS0VUMF9HRVRfUkVHKGgpICgoKGgpICYgMHgxRkZGKSA8PCAyKQorI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCisjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDA0MF9HRU5fSU5UX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MAorI2RlZmluZSAgIFNfMDAwMDQwX0NSVENfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVENfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVENfVkJMQU5LICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA0MF9DUlRDX1ZMSU5FKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDA0MF9DUlRDX1ZMSU5FKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9DUlRDX1ZMSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwNDBfQ1JUQ19WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDAwNDBfQ1JUQ19WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfQ1JUQ19WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwMDQwX1NOQVBTSE9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDQwX1NOQVBTSE9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1NOQVBTSE9UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDA0MF9GUF9ERVRFQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDA0MF9GUF9ERVRFQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9GUF9ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwNDBfQ1JUQzJfVkxJTkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwNDBfQ1JUQzJfVkxJTkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfQ1JUQzJfVkxJTkUgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMF9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDBfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgwX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZTWU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZTWU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZTWU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDA0MF9TTkFQU0hPVDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDA0MF9TTkFQU0hPVDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9TTkFQU0hPVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwNDBfQ1JUQzJfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwNDBfQ1JUQzJfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfQ1JUQzJfVkJMQU5LICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwMDQwX0ZQMl9ERVRFQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDA0MF9GUDJfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRlAyX0RFVEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDA0MF9WU1lOQ19ESUZGX09WRVJfTElNSVQoeCkgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVlNZTkNfRElGRl9PVkVSX0xJTUlUICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMV9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDFfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgxX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMl9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDJfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgyX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIM19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgzX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0kyQ19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDA0MF9JMkNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfSTJDX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dVSV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDA0MF9HVUlfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR1VJX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZJUEhfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDA0MF9WSVBIX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVklQSF9JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1NXX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDA0MF9TV19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfU1dfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dFWVNFUlZJTExFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDA0MF9HRVlTRVJWSUxMRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR0VZU0VSVklMTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0hEQ1BfQVVUSE9SSVpFRF9JTlQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDA0MF9IRENQX0FVVEhPUklaRURfSU5UKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfSERDUF9BVVRIT1JJWkVEX0lOVCAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RWSV9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDA0MF9EVklfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRFZJX0kyQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dVSURNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDA0MF9HVUlETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR1VJRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZJRERNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDA0MF9WSURETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVklERE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0NAorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVENfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVENfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVENfVkJMQU5LX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDX1ZCTEFOS19TVEFUX0FLKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDX1ZCTEFOS19TVEFUX0FLKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDX1ZCTEFOS19TVEFUX0FLICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQ19WTElORV9TVEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQ19WTElORV9TVEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQ19WTElORV9TVEFUICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVENfVkxJTkVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVENfVkxJTkVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVENfVkxJTkVfU1RBVF9BSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDX1ZTWU5DX1NUQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDX1ZTWU5DX1NUQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDX1ZTWU5DX1NUQVQgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQ19WU1lOQ19TVEFUX0FLKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQ19WU1lOQ19TVEFUX0FLKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQ19WU1lOQ19TVEFUX0FLICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwMDQ0X1NOQVBTSE9UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDQ0X1NOQVBTSE9UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NOQVBTSE9UX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDA0NF9TTkFQU0hPVF9TVEFUX0FLKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDA0NF9TTkFQU0hPVF9TVEFUX0FLKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9TTkFQU0hPVF9TVEFUX0FLICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwNDRfRlBfREVURUNUX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwNDRfRlBfREVURUNUX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRlBfREVURUNUX1NUQVQgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDAwMDQ0X0ZQX0RFVEVDVF9TVEFUX0FLKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDQ0X0ZQX0RFVEVDVF9TVEFUX0FLKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0ZQX0RFVEVDVF9TVEFUX0FLICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDMl9WTElORV9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDMl9WTElORV9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDMl9WTElORV9TVEFUICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkRGCisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQzJfVkxJTkVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQzJfVkxJTkVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQzJfVkxJTkVfU1RBVF9BSyAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVEMyX1ZTWU5DX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVEMyX1ZTWU5DX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVEMyX1ZTWU5DX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDMl9WU1lOQ19TVEFUX0FLKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDMl9WU1lOQ19TVEFUX0FLKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDMl9WU1lOQ19TVEFUX0FLICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwNDRfU05BUFNIT1QyX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAwNDRfU05BUFNIT1QyX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU05BUFNIT1QyX1NUQVQgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDAwMDQ0X1NOQVBTSE9UMl9TVEFUX0FLKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA3KQorI2RlZmluZSAgIEdfMDAwMDQ0X1NOQVBTSE9UMl9TVEFUX0FLKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NOQVBTSE9UMl9TVEFUX0FLICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGN0YKKyNkZWZpbmUgICBTXzAwMDA0NF9DQVAwX0lOVF9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDA0NF9DQVAwX0lOVF9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DQVAwX0lOVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQzJfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQzJfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQzJfVkJMQU5LX1NUQVQgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVEMyX1ZCTEFOS19TVEFUX0FLKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVEMyX1ZCTEFOS19TVEFUX0FLKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVEMyX1ZCTEFOS19TVEFUX0FLICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDA0NF9GUDJfREVURUNUX1NUQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwNDRfRlAyX0RFVEVDVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0ZQMl9ERVRFQ1RfU1RBVCAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9GUDJfREVURUNUX1NUQVRfQUsoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwNDRfRlAyX0RFVEVDVF9TVEFUX0FLKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0ZQMl9ERVRFQ1RfU1RBVF9BSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WU1lOQ19ESUZGX09WRVJfTElNSVRfU1RBVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwNDRfVlNZTkNfRElGRl9PVkVSX0xJTUlUX1NUQVQoeCkgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVF9TVEFUICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WU1lOQ19ESUZGX09WRVJfTElNSVRfU1RBVF9BSyh4KSAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwNDRfVlNZTkNfRElGRl9PVkVSX0xJTUlUX1NUQVRfQUsoeCkgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVF9TVEFUX0FLICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDBfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgwX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDBfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgwX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMF9JTlRfQUsgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDFfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgxX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMV9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDFfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgxX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMV9JTlRfQUsgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDJfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgyX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMl9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDJfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgyX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMl9JTlRfQUsgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgzX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIM19JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDNfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgzX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIM19JTlRfQUsgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDRfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0kyQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JMkNfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDRfSTJDX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0kyQ19JTlRfQUsgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlfSURMRV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDRfR1VJX0lETEVfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSV9JRExFX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlfSURMRV9TVEFUX0FLKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDRfR1VJX0lETEVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSV9JRExFX1NUQVRfQUsgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSVBIX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDRfVklQSF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJUEhfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlRfQUsoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVF9BSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HRVlTRVJWSUxMRV9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDRfR0VZU0VSVklMTEVfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dFWVNFUlZJTExFX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HRVlTRVJWSUxMRV9TVEFUX0FLKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDRfR0VZU0VSVklMTEVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dFWVNFUlZJTExFX1NUQVRfQUsgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9IRENQX0FVVEhPUklaRURfSU5UX1NUQVQoeCkgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwNDRfSERDUF9BVVRIT1JJWkVEX0lOVF9TVEFUKHgpICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0hEQ1BfQVVUSE9SSVpFRF9JTlRfU1RBVCAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9IRENQX0FVVEhPUklaRURfSU5UX0FLKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwNDRfSERDUF9BVVRIT1JJWkVEX0lOVF9BSyh4KSAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0hEQ1BfQVVUSE9SSVpFRF9JTlRfQUsgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9EVklfSTJDX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwNDRfRFZJX0kyQ19JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RWSV9JMkNfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9EVklfSTJDX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwNDRfRFZJX0kyQ19JTlRfQUsoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RWSV9JMkNfSU5UX0FLICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDRfR1VJRE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSURNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlETUFfQUsoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDRfR1VJRE1BX0FLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSURNQV9BSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSURETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDRfVklERE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJRERNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSURETUFfQUsoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDRfVklERE1BX0FLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJRERNQV9BSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNTAKKyNkZWZpbmUgICBTXzAwMDA1MF9DUlRDX0RCTF9TQ0FOX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0RCTF9TQ0FOX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0RCTF9TQ0FOX0VOICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19JTlRFUkxBQ0VfRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwNTBfQ1JUQ19JTlRFUkxBQ0VfRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19JTlRFUkxBQ0VfRU4gICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfQ19TWU5DX0VOKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfQ19TWU5DX0VOKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDUwX0NSVENfQ19TWU5DX0VOICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDA1MF9DUlRDX1BJWF9XSURUSCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX1BJWF9XSURUSCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX1BJWF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMEZGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19JQ09OX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfSUNPTl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0lDT05fRU4gICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19DVVJfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfQ1VSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0NVUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19WU1RBVF9NT0RFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfVlNUQVRfTU9ERSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX1ZTVEFUX01PREUgICAgICAgICAgICAgICAgICAgICAweEZGRjlGRkZGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19DVVJfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfQ1VSX01PREUoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0NVUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAweEZGOEZGRkZGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19FWFRfRElTUF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfRVhUX0RJU1BfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0VYVF9ESVNQX0VOICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19ESVNQX1JFUV9FTl9CKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfRElTUF9SRVFfRU5fQih4KSAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0RJU1BfUkVRX0VOX0IgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lIFJfMDAwMDU0X0NSVENfRVhUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDU0CisjZGVmaW5lICAgU18wMDAwNTRfQ1JUQ19WR0FfWE9WRVJTQ0FOKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNTRfQ1JUQ19WR0FfWE9WRVJTQ0FOKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTRfQ1JUQ19WR0FfWE9WRVJTQ0FOICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDU0X1ZHQV9CTElOS19SQVRFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDU0X1ZHQV9CTElOS19SQVRFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMDU0X1ZHQV9CTElOS19SQVRFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjkKKyNkZWZpbmUgICBTXzAwMDA1NF9WR0FfQVRJX0xJTkVBUih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDA1NF9WR0FfQVRJX0xJTkVBUih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9WR0FfQVRJX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwNTRfVkdBXzEyOEtBUF9QQUdJTkcoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwNTRfVkdBXzEyOEtBUF9QQUdJTkcoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTRfVkdBXzEyOEtBUF9QQUdJTkcgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDAwMDU0X1ZHQV9URVhUXzEzMih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMDU0X1ZHQV9URVhUXzEzMih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X1ZHQV9URVhUXzEzMiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGREYKKyNkZWZpbmUgICBTXzAwMDA1NF9WR0FfWENSVF9DTlRfRU4oeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDA1NF9WR0FfWENSVF9DTlRfRU4oeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9WR0FfWENSVF9DTlRfRU4gICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwNTRfQ1JUQ19IU1lOQ19ESVMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwNTRfQ1JUQ19IU1lOQ19ESVMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTRfQ1JUQ19IU1lOQ19ESVMgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDU0X0NSVENfVlNZTkNfRElTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVENfVlNZTkNfRElTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVENfVlNZTkNfRElTICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDA1NF9DUlRDX0RJU1BMQVlfRElTKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwNTRfQ1JUQ19ESVNQTEFZX0RJUyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVENfRElTUExBWV9ESVMgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9DUlRDX1NZTkNfVFJJU1RBVEUoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwNTRfQ1JUQ19TWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVENfU1lOQ19UUklTVEFURSAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDA1NF9DUlRDX0hTWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNTRfQ1JUQ19IU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVENfSFNZTkNfVFJJU1RBVEUgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9DUlRDX1ZTWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNTRfQ1JUQ19WU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVENfVlNZTkNfVFJJU1RBVEUgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9DUlRfT04oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNTRfQ1JUX09OKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVF9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9WR0FfQ1VSX0JfVEVTVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNTRfVkdBX0NVUl9CX1RFU1QoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X1ZHQV9DVVJfQl9URVNUICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9WR0FfUEFDS19ESVMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwNTRfVkdBX1BBQ0tfRElTKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X1ZHQV9QQUNLX0RJUyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9WR0FfTUVNX1BTX0VOKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNTRfVkdBX01FTV9QU19FTih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X1ZHQV9NRU1fUFNfRU4gICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9WQ1JUQ19JRFhfTUFTVEVSKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDU0X1ZDUlRDX0lEWF9NQVNURVIoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4N0YpCisjZGVmaW5lICAgQ18wMDAwNTRfVkNSVENfSURYX01BU1RFUiAgICAgICAgICAgICAgICAgICAgMHg4MEZGRkZGRgorI2RlZmluZSBSXzAwMDIzQ19ESVNQTEFZX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAweDAwMDIzQworI2RlZmluZSAgIFNfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDIzQ19ESVNQTEFZX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAyM0NfRElTUExBWV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDI2MF9DVVJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDI2MAorI2RlZmluZSAgIFNfMDAwMjYwX0NVUl9PRkZTRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMjYwX0NVUl9PRkZTRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGRkZGKQorI2RlZmluZSAgIENfMDAwMjYwX0NVUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjgwMDAwMDAKKyNkZWZpbmUgICBTXzAwMDI2MF9DVVJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAyNjBfQ1VSX0xPQ0soeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMjYwX0NVUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAzM0NfQ1JUQzJfRElTUExBWV9CQVNFX0FERFIgICAgICAgICAgICAgMHgwMDAzM0MKKyNkZWZpbmUgICBTXzAwMDMzQ19DUlRDMl9ESVNQTEFZX0JBU0VfQUREUih4KSAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAzM0NfQ1JUQzJfRElTUExBWV9CQVNFX0FERFIoeCkgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMzNDX0NSVEMyX0RJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAzNjBfQ1VSMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzNjAKKyNkZWZpbmUgICBTXzAwMDM2MF9DVVIyX09GRlNFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDM2MF9DVVIyX09GRlNFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDM2MF9DVVIyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweEY4MDAwMDAwCisjZGVmaW5lICAgU18wMDAzNjBfQ1VSMl9MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwMzYwX0NVUjJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDM2MF9DVVIyX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwM0MwX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCisjZGVmaW5lICAgU18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgICBHXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDNDMF9WR0FfQ0tTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYzCisjZGVmaW5lICAgU18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9IU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMF9WR0FfVlNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lIFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0Y4CisjZGVmaW5lICAgU18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4gICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0lOVEVSTEFDRV9FTih4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwM0Y4X0NSVEMyX0lOVEVSTEFDRV9FTih4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0lOVEVSTEFDRV9FTiAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9TWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9TWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNGOF9DUlRDMl9TWU5DX1RSSVNUQVRFICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAzRjhfQ1JUQzJfSFNZTkNfVFJJU1RBVEUoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfSFNZTkNfVFJJU1RBVEUoeCkgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfSFNZTkNfVFJJU1RBVEUgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX1ZTWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwM0Y4X0NSVEMyX1ZTWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX1ZTWU5DX1RSSVNUQVRFICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlQyX09OKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlQyX09OKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNGOF9DUlQyX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAzRjhfQ1JUQzJfUElYX1dJRFRIKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDgpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfUElYX1dJRFRIKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfUElYX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjBGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0lDT05fRU4oeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9JQ09OX0VOKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfSUNPTl9FTiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0NVUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9DVVJfRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfQ1VSX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0NVUl9NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9DVVJfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfQ1VSX01PREUgICAgICAgICAgICAgICAgICAgICAgMHhGRjhGRkZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0RJU1BMQVlfRElTKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9ESVNQTEFZX0RJUyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfRElTUExBWV9ESVMgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0RJU1BfUkVRX0VOX0IoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9ESVNQX1JFUV9FTl9CKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfRElTUF9SRVFfRU5fQiAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0NfU1lOQ19FTih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9DX1NZTkNfRU4oeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfQ19TWU5DX0VOICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0hTWU5DX0RJUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9IU1lOQ19ESVMoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfSFNZTkNfRElTICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX1ZTWU5DX0RJUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9WU1lOQ19ESVMoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfVlNZTkNfRElTICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSBSXzAwMDQyMF9PVjBfU0NBTEVfQ05UTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQyMAorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9OT19SRUFEX0JFSElORF9TQ0FOKHgpICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9OT19SRUFEX0JFSElORF9TQ0FOKHgpICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwNDIwX09WMF9OT19SRUFEX0JFSElORF9TQ0FOICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDQyMF9PVjBfSE9SWl9QSUNLX05FQVJFU1QoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfSE9SWl9QSUNLX05FQVJFU1QoeCkgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfSE9SWl9QSUNLX05FQVJFU1QgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX1ZFUlRfUElDS19ORUFSRVNUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA0MjBfT1YwX1ZFUlRfUElDS19ORUFSRVNUKHgpICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX1ZFUlRfUElDS19ORUFSRVNUICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwNDIwX09WMF9TSUdORURfVVYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9TSUdORURfVVYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwNDIwX09WMF9TSUdORURfVVYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDQyMF9PVjBfR0FNTUFfU0VMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfR0FNTUFfU0VMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfR0FNTUFfU0VMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjFGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX1NVUkZBQ0VfRk9STUFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDgpCisjZGVmaW5lICAgR18wMDA0MjBfT1YwX1NVUkZBQ0VfRk9STUFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX1NVUkZBQ0VfRk9STUFUICAgICAgICAgICAgICAgICAgMHhGRkZGRjBGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9BREFQVElWRV9ERUlOVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfQURBUFRJVkVfREVJTlQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0FEQVBUSVZFX0RFSU5UICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9DUlRDX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfQ1JUQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0NSVENfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9CVVJTVF9QRVJfUExBTkUoeCkgICAgICAgICAgICAgICgoKHgpICYgMHg3RikgPDwgMTYpCisjZGVmaW5lICAgR18wMDA0MjBfT1YwX0JVUlNUX1BFUl9QTEFORSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfQlVSU1RfUEVSX1BMQU5FICAgICAgICAgICAgICAgICAweEZGODBGRkZGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX0RPVUJMRV9CVUZGRVJfUkVHUyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9ET1VCTEVfQlVGRkVSX1JFR1MoeCkgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfRE9VQkxFX0JVRkZFUl9SRUdTICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX0JBTkRXSURUSCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9CQU5EV0lEVEgoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfQkFORFdJRFRIICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX0xJTl9UUkFOU19CWVBBU1MoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9MSU5fVFJBTlNfQllQQVNTKHgpICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfTElOX1RSQU5TX0JZUEFTUyAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX0lOVF9FTVUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9JTlRfRU1VKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfSU5UX0VNVSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX09WRVJMQVlfRU4oeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9PVkVSTEFZX0VOKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfT1ZFUkxBWV9FTiAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX1NPRlRfUkVTRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9TT0ZUX1JFU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwNzBDX0NQX1JCX1JQVFJfQUREUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzBDCisjZGVmaW5lICAgU18wMDA3MENfUkJfUlBUUl9TV0FQKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lICAgR18wMDA3MENfUkJfUlBUUl9TV0FQKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDMpCisjZGVmaW5lICAgQ18wMDA3MENfUkJfUlBUUl9TV0FQICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQworI2RlZmluZSAgIFNfMDAwNzBDX1JCX1JQVFJfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRkZGRkZGRikgPDwgMikKKyNkZWZpbmUgICBHXzAwMDcwQ19SQl9SUFRSX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4M0ZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDA3MENfUkJfUlBUUl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBSXzAwMDc0MF9DUF9DU1FfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDc0MAorI2RlZmluZSAgIFNfMDAwNzQwX0NTUV9DTlRfUFJJTUFSWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDc0MF9DU1FfQ05UX1BSSU1BUlkoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDA3NDBfQ1NRX0NOVF9QUklNQVJZICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwMAorI2RlZmluZSAgIFNfMDAwNzQwX0NTUV9DTlRfSU5ESVJFQ1QoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDc0MF9DU1FfQ05UX0lORElSRUNUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDA3NDBfQ1NRX0NOVF9JTkRJUkVDVCAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDBGRgorI2RlZmluZSAgIFNfMDAwNzQwX0NTUV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDc0MF9DU1FfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDA3NDBfQ1NRX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkZGRgorI2RlZmluZSBSXzAwMDc3MF9TQ1JBVENIX1VNU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDc3MAorI2RlZmluZSAgIFNfMDAwNzcwX1NDUkFUQ0hfVU1TSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDc3MF9TQ1JBVENIX1VNU0soeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4M0YpCisjZGVmaW5lICAgQ18wMDA3NzBfU0NSQVRDSF9VTVNLICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZDMAorI2RlZmluZSAgIFNfMDAwNzcwX1NDUkFUQ0hfU1dBUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDc3MF9TQ1JBVENIX1NXQVAoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDMpCisjZGVmaW5lICAgQ18wMDA3NzBfU0NSQVRDSF9TV0FQICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZDRkZGRgorI2RlZmluZSBSXzAwMDc3NF9TQ1JBVENIX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDc3NAorI2RlZmluZSAgIFNfMDAwNzc0X1NDUkFUQ0hfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGRkZGKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwNzc0X1NDUkFUQ0hfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHg3RkZGRkZGKQorI2RlZmluZSAgIENfMDAwNzc0X1NDUkFUQ0hfQUREUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1NFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9TRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfU0VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4Yzc0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJtLmgiCisjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgorI2luY2x1ZGUgInJhZGVvbi5oIgorCisjaW5jbHVkZSAicjIwMF9yZWdfc2FmZS5oIgorCisjaW5jbHVkZSAicjEwMF90cmFjay5oIgorCitzdGF0aWMgaW50IHIyMDBfZ2V0X3Z0eF9zaXplXzAodWludDMyX3QgdnR4X2ZtdF8wKQoreworCWludCB2dHhfc2l6ZSwgaTsKKwl2dHhfc2l6ZSA9IDI7CisKKwlpZiAodnR4X2ZtdF8wICYgUjIwMF9WVFhfWjApCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1cwKQorCQl2dHhfc2l6ZSsrOworCS8qIGJsZW5kIHdlaWdodCAqLworCWlmICh2dHhfZm10XzAgJiAoMHg3IDw8IFIyMDBfVlRYX1dFSUdIVF9DT1VOVF9TSElGVCkpCisJCXZ0eF9zaXplICs9ICh2dHhfZm10XzAgPj4gUjIwMF9WVFhfV0VJR0hUX0NPVU5UX1NISUZUKSAmIDB4NzsKKwlpZiAodnR4X2ZtdF8wICYgUjIwMF9WVFhfUFZfTUFUUklYX1NFTCkKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdF8wICYgUjIwMF9WVFhfTjApCisJCXZ0eF9zaXplICs9IDM7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1BPSU5UX1NJWkUpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX0RJU0NSRVRFX0ZPRykKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdF8wICYgUjIwMF9WVFhfU0hJTklORVNTXzApCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1NISU5JTkVTU18xKQorCQl2dHhfc2l6ZSsrOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaW50IGNvbG9yX3NpemUgPSAodnR4X2ZtdF8wID4+ICgxMSArIDIqaSkpICYgMHgzOworCQlzd2l0Y2ggKGNvbG9yX3NpemUpIHsKKwkJY2FzZSAwOiBicmVhazsKKwkJY2FzZSAxOiB2dHhfc2l6ZSsrOyBicmVhazsKKwkJY2FzZSAyOiB2dHhfc2l6ZSArPSAzOyBicmVhazsKKwkJY2FzZSAzOiB2dHhfc2l6ZSArPSA0OyBicmVhazsKKwkJfQorCX0KKwlpZiAodnR4X2ZtdF8wICYgUjIwMF9WVFhfWFkxKQorCQl2dHhfc2l6ZSArPSAyOworCWlmICh2dHhfZm10XzAgJiBSMjAwX1ZUWF9aMSkKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdF8wICYgUjIwMF9WVFhfVzEpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX04xKQorCQl2dHhfc2l6ZSArPSAzOworCXJldHVybiB2dHhfc2l6ZTsKK30KKworc3RhdGljIGludCByMjAwX2dldF92dHhfc2l6ZV8xKHVpbnQzMl90IHZ0eF9mbXRfMSkKK3sKKwlpbnQgdnR4X3NpemUsIGksIHRleF9zaXplOworCXZ0eF9zaXplID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCXRleF9zaXplID0gKHZ0eF9mbXRfMSA+PiAoaSAqIDMpKSAmIDB4NzsKKwkJaWYgKHRleF9zaXplID4gNCkKKwkJCWNvbnRpbnVlOworCQl2dHhfc2l6ZSArPSB0ZXhfc2l6ZTsKKwl9CisJcmV0dXJuIHZ0eF9zaXplOworfQorCitpbnQgcjIwMF9wYWNrZXQwX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkgICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJICAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOworCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOworCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CisJdWludDMyX3QgdG1wOworCWludCByOworCWludCBpOworCWludCBmYWNlOworCXUzMiB0aWxlX2ZsYWdzID0gMDsKKworCWliID0gcC0+aWItPnB0cjsKKwlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgorCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJYnJlYWs7CisJCS8qIEZJWE1FOiBvbmx5IGFsbG93IFBBQ0tFVDMgYmxpdD8gZWFzaWVyIHRvIGNoZWNrIGZvciBvdXQgb2YKKwkJICogcmFuZ2UgYWNjZXNzICovCisJY2FzZSBSQURFT05fRFNUX1BJVENIX09GRlNFVDoKKwljYXNlIFJBREVPTl9TUkNfUElUQ0hfT0ZGU0VUOgorCQlyID0gcjEwMF9yZWxvY19waXRjaF9vZmZzZXQocCwgcGt0LCBpZHgsIHJlZyk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfREVQVEhPRkZTRVQ6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQl0cmFjay0+Y2JbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+Y2JbMF0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlicmVhazsKKwljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMDoKKwljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMToKKwljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMjoKKwljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMzoKKwljYXNlIFIyMDBfUFBfVFhPRkZTRVRfNDoKKwljYXNlIFIyMDBfUFBfVFhPRkZTRVRfNToKKwkJaSA9IChyZWcgLSBSMjAwX1BQX1RYT0ZGU0VUXzApIC8gMjQ7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCWJyZWFrOworCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzA6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM18wOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfMDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzA6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8xOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfMToKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzE6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF8xOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfMToKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzI6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl8yOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfMjoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzI6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV8yOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMzoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzM6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM18zOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfMzoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzM6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV80OgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfNDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzQ6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF80OgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfNDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzU6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl81OgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfNToKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzU6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV81OgorCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhPRkZTRVRfMCkgLyAyNDsKKwkJZmFjZSA9IChyZWcgLSAoKGkgKiAyNCkgKyBSMjAwX1BQX1RYT0ZGU0VUXzApKSAvIDQ7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2UgLSAxXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JFX1dJRFRIX0hFSUdIVDoKKwkJdHJhY2stPm1heHkgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDB4N0ZGKTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgorCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisKKwkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCisJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9USUxFX0VOQUJMRTsKKwkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCisJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9NSUNST1RJTEVfRU5BQkxFOworCisJCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgfD0gdGlsZV9mbGFnczsKKwkJaWJbaWR4XSA9IHRtcDsKKworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9DT0xPUlBJVENIX01BU0s7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfREVQVEhQSVRDSDoKKwkJdHJhY2stPnpiLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX0NOVEw6CisJCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CisJCWNhc2UgNzoKKwkJY2FzZSA4OgorCQljYXNlIDk6CisJCWNhc2UgMTE6CisJCWNhc2UgMTI6CisJCQl0cmFjay0+Y2JbMF0uY3BwID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJY2FzZSAxNToKKwkJCXRyYWNrLT5jYlswXS5jcHAgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCXRyYWNrLT5jYlswXS5jcHAgPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCisJCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fREVQVEhYWV9PRkZTRVRfRU5BQkxFKSB7CisJCQlEUk1fRVJST1IoIk5vIHN1cHBvcnQgZm9yIGRlcHRoIHh5IG9mZnNldCBpbiBrbXNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQl0cmFjay0+el9lbmFibGVkID0gISEoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fWl9FTkFCTEUpOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKKwkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQljYXNlIDA6CisJCQl0cmFjay0+emIuY3BwID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJY2FzZSA0OgorCQljYXNlIDU6CisJCWNhc2UgOToKKwkJY2FzZSAxMToKKwkJCXRyYWNrLT56Yi5jcHAgPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX1pQQVNTX0FERFI6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1BQX0NOVEw6CisJCXsKKwkJCXVpbnQzMl90IHRlbXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA0OworCQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKQorCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gISEodGVtcCAmICgxIDw8IGkpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFJBREVPTl9TRV9WRl9DTlRMOgorCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJYnJlYWs7CisJY2FzZSAweDIxMGM6CisJCS8qIFZBUF9WRl9NQVhfVlRYX0lORFggKi8KKwkJdHJhY2stPm1heF9pbmR4ID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDAwRkZGRkZGVUw7CisJCWJyZWFrOworCWNhc2UgUjIwMF9TRV9WVFhfRk1UXzA6CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIyMDBfZ2V0X3Z0eF9zaXplXzAoaWJfY2h1bmstPmtkYXRhW2lkeF0pOworCQlicmVhazsKKwljYXNlIFIyMDBfU0VfVlRYX0ZNVF8xOgorCQl0cmFjay0+dnR4X3NpemUgKz0gcjIwMF9nZXRfdnR4X3NpemVfMShpYl9jaHVuay0+a2RhdGFbaWR4XSk7CisJCWJyZWFrOworCWNhc2UgUjIwMF9QUF9UWFNJWkVfMDoKKwljYXNlIFIyMDBfUFBfVFhTSVpFXzE6CisJY2FzZSBSMjAwX1BQX1RYU0laRV8yOgorCWNhc2UgUjIwMF9QUF9UWFNJWkVfMzoKKwljYXNlIFIyMDBfUFBfVFhTSVpFXzQ6CisJY2FzZSBSMjAwX1BQX1RYU0laRV81OgorCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhTSVpFXzApIC8gMzI7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9URVhfVVNJWkVfTUFTSykgKyAxOworCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9URVhfVlNJWkVfTUFTSykgPj4gUkFERU9OX1RFWF9WU0laRV9TSElGVCkgKyAxOworCQlicmVhazsKKwljYXNlIFIyMDBfUFBfVFhQSVRDSF8wOgorCWNhc2UgUjIwMF9QUF9UWFBJVENIXzE6CisJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMjoKKwljYXNlIFIyMDBfUFBfVFhQSVRDSF8zOgorCWNhc2UgUjIwMF9QUF9UWFBJVENIXzQ6CisJY2FzZSBSMjAwX1BQX1RYUElUQ0hfNToKKwkJaSA9IChyZWcgLSBSMjAwX1BQX1RYUElUQ0hfMCkgLyAzMjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAzMjsKKwkJYnJlYWs7CisJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzA6CisJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzE6CisJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzI6CisJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzM6CisJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzQ6CisJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzU6CisJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZJTFRFUl8wKSAvIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSMjAwX01BWF9NSVBfTEVWRUxfTUFTSykKKwkJCQkJCSA+PiBSMjAwX01BWF9NSVBfTEVWRUxfU0hJRlQpOworCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjMpICYgMHg3OworCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCisJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF93ID0gZmFsc2U7CisJCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNykgJiAweDc7CisJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzA6CisJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzE6CisJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzI6CisJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzM6CisJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzQ6CisJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzU6CisJCWkgPSAocmVnIC0gUjIwMF9QUF9UWE1VTFRJX0NUTF8wKSAvIDMyOworCQlicmVhazsKKwljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF8wOgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzE6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUX1hfMjoKKwljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF8zOgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzQ6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUX1hfNToKKwkJaSA9IChyZWcgLSBSMjAwX1BQX1RYRk9STUFUX1hfMCkgLyAzMjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4NzsKKwkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDB4MzsKKwkJLyogMkQsIDNELCBDVUJFICovCisJCXN3aXRjaCAodG1wKSB7CisJCWNhc2UgMDoKKwkJY2FzZSA1OgorCQljYXNlIDY6CisJCWNhc2UgNzoKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS50ZXhfY29vcmRfdHlwZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAyOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzA6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzE6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzI6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzM6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzQ6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzU6CisJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF8wKSAvIDMyOworCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSMjAwX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAxOworCQl9IGVsc2UgeworCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDA7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOworCQl9CisJCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgeworCQljYXNlIFIyMDBfVFhGT1JNQVRfSTg6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9SR0IzMzI6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9ZODoKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9EWFQxOgorCQljYXNlIFIyMDBfVFhGT1JNQVRfQUk4ODoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0FSR0IxNTU1OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfUkdCNTY1OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfQVJHQjQ0NDQ6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9WWVVZNDIyOgorCQljYXNlIFIyMDBfVFhGT1JNQVRfWVZZVTQyMjoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0xEVkRVNjU1OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfRFZEVTg4OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfQVZZVTQ0NDQ6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFIyMDBfVFhGT1JNQVRfQVJHQjg4ODg6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9SR0JBODg4ODoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0FCR1I4ODg4OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfQkdSMTExMTEwOgorCQljYXNlIFIyMDBfVFhGT1JNQVRfTERWRFU4ODg4OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfRFhUMjM6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9EWFQ0NToKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OworCQkJYnJlYWs7CisJCX0KKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQlicmVhazsKKwljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMToKKwljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMjoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMzoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNToKKwkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWkgPSAocmVnIC0gUjIwMF9QUF9DVUJJQ19GQUNFU18wKSAvIDMyOworCQlmb3IgKGZhY2UgPSAwOyBmYWNlIDwgNDsgZmFjZSsrKSB7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLndpZHRoID0gMSA8PCAoKHRtcCA+PiAoZmFjZSAqIDgpKSAmIDB4Zik7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLmhlaWdodCA9IDEgPDwgKCh0bXAgPj4gKChmYWNlICogOCkgKyA0KSkgJiAweGYpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZFxuIiwKKwkJICAgICAgIHJlZywgaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjIwMF9yZWdfc2FmZV9ibTsKKwlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyMjAwX3JlZ19zYWZlX2JtKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggMDUxYmNhNi4uYmIxNTFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTMxLDcgKzMxLDEwIEBACiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKLSNpbmNsdWRlICJyYWRlb25fc2hhcmUuaCIKKyNpbmNsdWRlICJyMTAwX3RyYWNrLmgiCisjaW5jbHVkZSAicjMwMGQuaCIKKworI2luY2x1ZGUgInIzMDBfcmVnX3NhZmUuaCIKIAogLyogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwIGRlcGVuZHMgb24gOiAqLwogdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0zOSw3ICs0Miw2IEBACiBpbnQgcjEwMF9yYjJkX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2NwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CiBpbnQgcjEwMF9wY2lfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX3BjaV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtNDcsMTQgKzQ5LDEwIEBACiAJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCSB1bnNpZ25lZCBpZHgpOwogaW50IHIxMDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKLWludCByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAotCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKIGludCByMTAwX2NzX3BhcnNlX3BhY2tldDAoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCQkgIGNvbnN0IHVuc2lnbmVkICphdXRoLCB1bnNpZ25lZCBuLAogCQkJICByYWRlb25fcGFja2V0MF9jaGVja190IGNoZWNrKTsKLXZvaWQgcjEwMF9jc19kdW1wX3BhY2tldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KTsKIGludCByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCQkgc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmopOwpAQCAtODcsMjYgKzg1LDU3IEBACiAJbWIoKTsKIH0KIAoraW50IHJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCit7CisJdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7CisKKwlpZiAoaSA8IDAgfHwgaSA+IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcykgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYWRkciA9IChsb3dlcl8zMl9iaXRzKGFkZHIpID4+IDgpIHwKKwkgICAgICAgKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgMjQpIHwKKwkgICAgICAgMHhjOworCS8qIG9uIHg4NiB3ZSB3YW50IHRoaXMgdG8gYmUgQ1BVIGVuZGlhbiwgb24gcG93ZXJwYworCSAqIG9uIHBvd2VycGMgd2l0aG91dCBIVyBzd2FwcGVycywgaXQnbGwgZ2V0IHN3YXBwZWQgb24gd2F5CisJICogaW50byBWUkFNIC0gc28gbm8gbmVlZCBmb3IgY3B1X3RvX2xlMzIgb24gVlJBTSB0YWJsZXMgKi8KKwl3cml0ZWwoYWRkciwgKCh2b2lkIF9faW9tZW0gKilwdHIpICsgKGkgKiA0KSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydjM3MF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaikgeworCQlXQVJOKDEsICJSVjM3MCBQQ0lFIEdBUlQgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyogSW5pdGlhbGl6ZSBjb21tb24gZ2FydCBzdHJ1Y3R1cmUgKi8KKwlyID0gcmFkZW9uX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2MzcwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChyZGV2KTsKKwlpZiAocikKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBQQ0lFIGdhcnQgIVxuIik7CisJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogNDsKKwlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOworCXJldHVybiByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHJkZXYpOworfQorCiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0YWJsZV9hZGRyOwogCXVpbnQzMl90IHRtcDsKIAlpbnQgcjsKIAotCS8qIEluaXRpYWxpemUgY29tbW9uIGdhcnQgc3RydWN0dXJlICovCi0JciA9IHJhZGVvbl9nYXJ0X2luaXQocmRldik7Ci0JaWYgKHIpIHsKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmogPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIk5vIFZSQU0gb2JqZWN0IGZvciBQQ0lFIEdBUlQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKKwlpZiAocikKIAkJcmV0dXJuIHI7Ci0JfQotCXIgPSBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBQQ0lFIGdhcnQgIVxuIik7Ci0JfQotCXJkZXYtPmdhcnQudGFibGVfc2l6ZSA9IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyAqIDQ7Ci0JciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fYWxsb2MocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQogCS8qIGRpc2NhcmQgbWVtb3J5IHJlcXVlc3Qgb3V0c2lkZSBvZiBjb25maWd1cmVkIHJhbmdlICovCiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7CkBAIC0xMjgsNyArMTU3LDcgQEAKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7CiAJcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaChyZGV2KTsKIAlEUk1fSU5GTygiUENJRSBHQVJUIG9mICV1TSBlbmFibGVkICh0YWJsZSBhdCAweCUwOFgpLlxuIiwKLQkJIHJkZXYtPm1jLmd0dF9zaXplID4+IDIwLCB0YWJsZV9hZGRyKTsKKwkJICh1bnNpZ25lZCkocmRldi0+bWMuZ3R0X3NpemUgPj4gMjApLCB0YWJsZV9hZGRyKTsKIAlyZGV2LT5nYXJ0LnJlYWR5ID0gdHJ1ZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0Niw0NSArMTc1LDEzIEBACiAJfQogfQogCi1pbnQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcikKK3ZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0Jdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7Ci0KLQlpZiAoaSA8IDAgfHwgaSA+IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcykgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JYWRkciA9IChsb3dlcl8zMl9iaXRzKGFkZHIpID4+IDgpIHwKLQkgICAgICAgKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgMjQpIHwKLQkgICAgICAgMHhjOwotCS8qIG9uIHg4NiB3ZSB3YW50IHRoaXMgdG8gYmUgQ1BVIGVuZGlhbiwgb24gcG93ZXJwYwotCSAqIG9uIHBvd2VycGMgd2l0aG91dCBIVyBzd2FwcGVycywgaXQnbGwgZ2V0IHN3YXBwZWQgb24gd2F5Ci0JICogaW50byBWUkFNIC0gc28gbm8gbmVlZCBmb3IgY3B1X3RvX2xlMzIgb24gVlJBTSB0YWJsZXMgKi8KLQl3cml0ZWwoYWRkciwgKCh2b2lkIF9faW9tZW0gKilwdHIpICsgKGkgKiA0KSk7Ci0JcmV0dXJuIDA7CisJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9mcmVlKHJkZXYpOworCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKLWludCByMzAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotI2lmIF9fT1NfSEFTX0FHUAotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUlYzNTApIHsKLQkJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCQl9IGVsc2UgewotCQkJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7Ci0JCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKLQkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaDsKLQkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2U7Ci0JCXJldHVybiBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOwotCX0KLQlyZXR1cm4gcjEwMF9wY2lfZ2FydF9lbmFibGUocmRldik7Ci19Ci0KLQogLyoKICAqIE1DCiAgKi8KQEAgLTIzMiwxNCArMjI5LDYgQEAKIAogdm9pZCByMzAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKLQkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKLQl9IGVsc2UgewotCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOwotCX0KLQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCiAKQEAgLTcwNCwzMDcgKzY5MywxMyBAQAogLyoKICAqIENTIGZ1bmN0aW9ucwogICovCi1zdHJ1Y3QgcjMwMF9jc190cmFja19jYiB7Ci0Jc3RydWN0IHJhZGVvbl9vYmplY3QJKnJvYmo7Ci0JdW5zaWduZWQJCXBpdGNoOwotCXVuc2lnbmVkCQljcHA7Ci0JdW5zaWduZWQJCW9mZnNldDsKLX07Ci0KLXN0cnVjdCByMzAwX2NzX3RyYWNrX2FycmF5IHsKLQlzdHJ1Y3QgcmFkZW9uX29iamVjdAkqcm9iajsKLQl1bnNpZ25lZAkJZXNpemU7Ci19OwotCi1zdHJ1Y3QgcjMwMF9jc190cmFja190ZXh0dXJlIHsKLQlzdHJ1Y3QgcmFkZW9uX29iamVjdAkqcm9iajsKLQl1bnNpZ25lZAkJcGl0Y2g7Ci0JdW5zaWduZWQJCXdpZHRoOwotCXVuc2lnbmVkCQloZWlnaHQ7Ci0JdW5zaWduZWQJCW51bV9sZXZlbHM7Ci0JdW5zaWduZWQJCWNwcDsKLQl1bnNpZ25lZAkJdGV4X2Nvb3JkX3R5cGU7Ci0JdW5zaWduZWQJCXR4ZGVwdGg7Ci0JdW5zaWduZWQJCXdpZHRoXzExOwotCXVuc2lnbmVkCQloZWlnaHRfMTE7Ci0JYm9vbAkJCXVzZV9waXRjaDsKLQlib29sCQkJZW5hYmxlZDsKLQlib29sCQkJcm91bmR1cF93OwotCWJvb2wJCQlyb3VuZHVwX2g7Ci19OwotCi1zdHJ1Y3QgcjMwMF9jc190cmFjayB7Ci0JdW5zaWduZWQJCQludW1fY2I7Ci0JdW5zaWduZWQJCQltYXh5OwotCXVuc2lnbmVkCQkJdnR4X3NpemU7Ci0JdW5zaWduZWQJCQl2YXBfdmZfY250bDsKLQl1bnNpZ25lZAkJCWltbWRfZHdvcmRzOwotCXVuc2lnbmVkCQkJbnVtX2FycmF5czsKLQl1bnNpZ25lZAkJCW1heF9pbmR4OwotCXN0cnVjdCByMzAwX2NzX3RyYWNrX2FycmF5CWFycmF5c1sxMV07Ci0Jc3RydWN0IHIzMDBfY3NfdHJhY2tfY2IgCWNiWzRdOwotCXN0cnVjdCByMzAwX2NzX3RyYWNrX2NiIAl6YjsKLQlzdHJ1Y3QgcjMwMF9jc190cmFja190ZXh0dXJlCXRleHR1cmVzWzE2XTsKLQlib29sCQkJCXpfZW5hYmxlZDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByMzAwX2NzX3RyYWNrX3RleHR1cmVfcHJpbnQoc3RydWN0IHIzMDBfY3NfdHJhY2tfdGV4dHVyZSAqdCkKLXsKLQlEUk1fRVJST1IoInBpdGNoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5waXRjaCk7Ci0JRFJNX0VSUk9SKCJ3aWR0aCAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+d2lkdGgpOwotCURSTV9FUlJPUigiaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmhlaWdodCk7Ci0JRFJNX0VSUk9SKCJudW0gbGV2ZWxzICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+bnVtX2xldmVscyk7Ci0JRFJNX0VSUk9SKCJkZXB0aCAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+dHhkZXB0aCk7Ci0JRFJNX0VSUk9SKCJicHAgICAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+Y3BwKTsKLQlEUk1fRVJST1IoImNvb3JkaW5hdGUgdHlwZSAgICAgICAgICAgICVkXG4iLCB0LT50ZXhfY29vcmRfdHlwZSk7Ci0JRFJNX0VSUk9SKCJ3aWR0aCByb3VuZCB0byBwb3dlciBvZiAyICAlZFxuIiwgdC0+cm91bmR1cF93KTsKLQlEUk1fRVJST1IoImhlaWdodCByb3VuZCB0byBwb3dlciBvZiAyICVkXG4iLCB0LT5yb3VuZHVwX2gpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByMzAwX2NzX3RyYWNrX3RleHR1cmVfY2hlY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCi0JCQkJCSAgICAgIHN0cnVjdCByMzAwX2NzX3RyYWNrICp0cmFjaykKLXsKLQlzdHJ1Y3QgcmFkZW9uX29iamVjdCAqcm9iajsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgdSwgaSwgdywgaDsKLQotCWZvciAodSA9IDA7IHUgPCAxNjsgdSsrKSB7Ci0JCWlmICghdHJhY2stPnRleHR1cmVzW3VdLmVuYWJsZWQpCi0JCQljb250aW51ZTsKLQkJcm9iaiA9IHRyYWNrLT50ZXh0dXJlc1t1XS5yb2JqOwotCQlpZiAocm9iaiA9PSBOVUxMKSB7Ci0JCQlEUk1fRVJST1IoIk5vIHRleHR1cmUgYm91bmQgdG8gdW5pdCAldVxuIiwgdSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzaXplID0gMDsKLQkJZm9yIChpID0gMDsgaSA8PSB0cmFjay0+dGV4dHVyZXNbdV0ubnVtX2xldmVsczsgaSsrKSB7Ci0JCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnVzZV9waXRjaCkgewotCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ucGl0Y2ggLyAoMSA8PCBpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdyA9IHRyYWNrLT50ZXh0dXJlc1t1XS53aWR0aCAvICgxIDw8IGkpOwotCQkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKLQkJCQkJdyB8PSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGhfMTE7Ci0JCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX3cpCi0JCQkJCXcgPSByb3VuZHVwX3Bvd19vZl90d28odyk7Ci0JCQl9Ci0JCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodCAvICgxIDw8IGkpOwotCQkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1KQotCQkJCWggfD0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodF8xMTsKLQkJCWlmICh0cmFjay0+dGV4dHVyZXNbdV0ucm91bmR1cF9oKQotCQkJCWggPSByb3VuZHVwX3Bvd19vZl90d28oaCk7Ci0JCQlzaXplICs9IHcgKiBoOwotCQl9Ci0JCXNpemUgKj0gdHJhY2stPnRleHR1cmVzW3VdLmNwcDsKLQkJc3dpdGNoICh0cmFjay0+dGV4dHVyZXNbdV0udGV4X2Nvb3JkX3R5cGUpIHsKLQkJY2FzZSAwOgotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXNpemUgKj0gKDEgPDwgdHJhY2stPnRleHR1cmVzW3VdLnR4ZGVwdGgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXNpemUgKj0gNjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHRleHR1cmUgY29vcmRpbmF0ZSB0eXBlICV1IGZvciB1bml0ICIKLQkJCQkgICIldVxuIiwgdHJhY2stPnRleHR1cmVzW3VdLnRleF9jb29yZF90eXBlLCB1KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHJvYmopKSB7Ci0JCQlEUk1fRVJST1IoIlRleHR1cmUgb2YgdW5pdCAldSBuZWVkcyAlbHUgYnl0ZXMgYnV0IGlzICIKLQkJCQkgICIlbHVcbiIsIHUsIHNpemUsIHJhZGVvbl9vYmplY3Rfc2l6ZShyb2JqKSk7Ci0JCQlyMzAwX2NzX3RyYWNrX3RleHR1cmVfcHJpbnQoJnRyYWNrLT50ZXh0dXJlc1t1XSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHIzMDBfY3NfdHJhY2tfY2hlY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMzAwX2NzX3RyYWNrICp0cmFjaykKLXsKLQl1bnNpZ25lZCBpOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBwcmltX3dhbGs7Ci0JdW5zaWduZWQgbnZlcnRzOwotCi0JZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fY2I7IGkrKykgewotCQlpZiAodHJhY2stPmNiW2ldLnJvYmogPT0gTlVMTCkgewotCQkJRFJNX0VSUk9SKCJbZHJtXSBObyBidWZmZXIgZm9yIGNvbG9yIGJ1ZmZlciAlZCAhXG4iLCBpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXNpemUgPSB0cmFjay0+Y2JbaV0ucGl0Y2ggKiB0cmFjay0+Y2JbaV0uY3BwICogdHJhY2stPm1heHk7Ci0JCXNpemUgKz0gdHJhY2stPmNiW2ldLm9mZnNldDsKLQkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmNiW2ldLnJvYmopKSB7Ci0JCQlEUk1fRVJST1IoIltkcm1dIEJ1ZmZlciB0b28gc21hbGwgZm9yIGNvbG9yIGJ1ZmZlciAlZCAiCi0JCQkJICAiKG5lZWQgJWx1IGhhdmUgJWx1KSAhXG4iLCBpLCBzaXplLAotCQkJCSAgcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5jYltpXS5yb2JqKSk7Ci0JCQlEUk1fRVJST1IoIltkcm1dIGNvbG9yIGJ1ZmZlciAlZCAoJXUgJXUgJXUgJXUpXG4iLAotCQkJCSAgaSwgdHJhY2stPmNiW2ldLnBpdGNoLCB0cmFjay0+Y2JbaV0uY3BwLAotCQkJCSAgdHJhY2stPmNiW2ldLm9mZnNldCwgdHJhY2stPm1heHkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0JaWYgKHRyYWNrLT56X2VuYWJsZWQpIHsKLQkJaWYgKHRyYWNrLT56Yi5yb2JqID09IE5VTEwpIHsKLQkJCURSTV9FUlJPUigiW2RybV0gTm8gYnVmZmVyIGZvciB6IGJ1ZmZlciAhXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXNpemUgPSB0cmFjay0+emIucGl0Y2ggKiB0cmFjay0+emIuY3BwICogdHJhY2stPm1heHk7Ci0JCXNpemUgKz0gdHJhY2stPnpiLm9mZnNldDsKLQkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPnpiLnJvYmopKSB7Ci0JCQlEUk1fRVJST1IoIltkcm1dIEJ1ZmZlciB0b28gc21hbGwgZm9yIHogYnVmZmVyICIKLQkJCQkgICIobmVlZCAlbHUgaGF2ZSAlbHUpICFcbiIsIHNpemUsCi0JCQkJICByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPnpiLnJvYmopKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCXByaW1fd2FsayA9ICh0cmFjay0+dmFwX3ZmX2NudGwgPj4gNCkgJiAweDM7Ci0JbnZlcnRzID0gKHRyYWNrLT52YXBfdmZfY250bCA+PiAxNikgJiAweEZGRkY7Ci0Jc3dpdGNoIChwcmltX3dhbGspIHsKLQljYXNlIDE6Ci0JCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2FycmF5czsgaSsrKSB7Ci0JCQlzaXplID0gdHJhY2stPmFycmF5c1tpXS5lc2l6ZSAqIHRyYWNrLT5tYXhfaW5keCAqIDQ7Ci0JCQlpZiAodHJhY2stPmFycmF5c1tpXS5yb2JqID09IE5VTEwpIHsKLQkJCQlEUk1fRVJST1IoIihQVyAldSkgVmVydGV4IGFycmF5ICV1IG5vIGJ1ZmZlciAiCi0JCQkJCSAgImJvdW5kXG4iLCBwcmltX3dhbGssIGkpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmFycmF5c1tpXS5yb2JqKSkgewotCQkJCURSTV9FUlJPUigiKFBXICV1KSBWZXJ0ZXggYXJyYXkgJXUgbmVlZCAlbHUgZHdvcmRzICIKLQkJCQkJICAgImhhdmUgJWx1IGR3b3Jkc1xuIiwgcHJpbV93YWxrLCBpLAotCQkJCQkgICBzaXplID4+IDIsCi0JCQkJCSAgIHJhZGVvbl9vYmplY3Rfc2l6ZSh0cmFjay0+YXJyYXlzW2ldLnJvYmopID4+IDIpOwotCQkJCURSTV9FUlJPUigiTWF4IGluZGljZXMgJXVcbiIsIHRyYWNrLT5tYXhfaW5keCk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9hcnJheXM7IGkrKykgewotCQkJc2l6ZSA9IHRyYWNrLT5hcnJheXNbaV0uZXNpemUgKiAobnZlcnRzIC0gMSkgKiA0OwotCQkJaWYgKHRyYWNrLT5hcnJheXNbaV0ucm9iaiA9PSBOVUxMKSB7Ci0JCQkJRFJNX0VSUk9SKCIoUFcgJXUpIFZlcnRleCBhcnJheSAldSBubyBidWZmZXIgIgotCQkJCQkgICJib3VuZFxuIiwgcHJpbV93YWxrLCBpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5hcnJheXNbaV0ucm9iaikpIHsKLQkJCQlEUk1fRVJST1IoIihQVyAldSkgVmVydGV4IGFycmF5ICV1IG5lZWQgJWx1IGR3b3JkcyAiCi0JCQkJCSAgICJoYXZlICVsdSBkd29yZHNcbiIsIHByaW1fd2FsaywgaSwgc2l6ZSA+PiAyLAotCQkJCQkgICByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmFycmF5c1tpXS5yb2JqKSA+PiAyKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIDM6Ci0JCXNpemUgPSB0cmFjay0+dnR4X3NpemUgKiBudmVydHM7Ci0JCWlmIChzaXplICE9IHRyYWNrLT5pbW1kX2R3b3JkcykgewotCQkJRFJNX0VSUk9SKCJJTU1EIGRyYXcgJXUgZHdvcnMgYnV0IG5lZWRzICVsdSBkd29yZHNcbiIsCi0JCQkJICB0cmFjay0+aW1tZF9kd29yZHMsIHNpemUpOwotCQkJRFJNX0VSUk9SKCJWQVBfVkZfQ05UTC5OVU1fVkVSVElDRVMgJXUsIFZUWF9TSVpFICV1XG4iLAotCQkJCSAgbnZlcnRzLCB0cmFjay0+dnR4X3NpemUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJbZHJtXSBJbnZhbGlkIHByaW1pdGl2ZSB3YWxrICVkIGZvciBWQVBfVkZfQ05UTFxuIiwKLQkJCSAgcHJpbV93YWxrKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiByMzAwX2NzX3RyYWNrX3RleHR1cmVfY2hlY2socmRldiwgdHJhY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcjMwMF9jc190cmFja19jbGVhcihzdHJ1Y3QgcjMwMF9jc190cmFjayAqdHJhY2spCi17Ci0JdW5zaWduZWQgaTsKLQotCXRyYWNrLT5udW1fY2IgPSA0OwotCXRyYWNrLT5tYXh5ID0gNDA5NjsKLQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9jYjsgaSsrKSB7Ci0JCXRyYWNrLT5jYltpXS5yb2JqID0gTlVMTDsKLQkJdHJhY2stPmNiW2ldLnBpdGNoID0gODE5MjsKLQkJdHJhY2stPmNiW2ldLmNwcCA9IDE2OwotCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gMDsKLQl9Ci0JdHJhY2stPnpfZW5hYmxlZCA9IHRydWU7Ci0JdHJhY2stPnpiLnJvYmogPSBOVUxMOwotCXRyYWNrLT56Yi5waXRjaCA9IDgxOTI7Ci0JdHJhY2stPnpiLmNwcCA9IDQ7Ci0JdHJhY2stPnpiLm9mZnNldCA9IDA7Ci0JdHJhY2stPnZ0eF9zaXplID0gMHg3RjsKLQl0cmFjay0+aW1tZF9kd29yZHMgPSAweEZGRkZGRkZGVUw7Ci0JdHJhY2stPm51bV9hcnJheXMgPSAxMTsKLQl0cmFjay0+bWF4X2luZHggPSAweDAwRkZGRkZGVUw7Ci0JZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fYXJyYXlzOyBpKyspIHsKLQkJdHJhY2stPmFycmF5c1tpXS5yb2JqID0gTlVMTDsKLQkJdHJhY2stPmFycmF5c1tpXS5lc2l6ZSA9IDB4N0Y7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IDE2NTM2OwotCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxNjUzNjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDE2NTM2OwotCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGhfMTEgPSAxIDw8IDExOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0XzExID0gMSA8PCAxMTsKLQkJdHJhY2stPnRleHR1cmVzW2ldLm51bV9sZXZlbHMgPSAxMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSAxNjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDY0OwotCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAxOwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IE5VTEw7Ci0JCS8qIENTIElCIGVtaXNzaW9uIGNvZGUgbWFrZXMgc3VyZSB0ZXh0dXJlIHVuaXQgYXJlIGRpc2FibGVkICovCi0JCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gZmFsc2U7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSB0cnVlOwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gdHJ1ZTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCByMzAwX3JlZ19zYWZlX2JtWzE1OV0gPSB7Ci0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweDE3RkYxRkZGLCAweEZGRkZGRkZDLCAweEZGRkZGRkZGLCAweEZGMzBGRkJGLAotCTB4RkZGRkZGRjgsIDB4QzNFNkZGRkYsIDB4RkZGRkY2REYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkYwM0YsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZFRkNFLCAweEYwMEVCRkZGLCAweDAwN0MwMDAwLAotCTB4RjAwMDAwNzgsIDB4RkYwMDAwMDksIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkY3RkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZDNzgsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkUsIDB4RkZGRkZGRkYsCi0JMHgzOEZGOEY1MCwgMHhGRkY4ODA4MiwgMHhGMDAwMDAwQywgMHhGQUUwMDlGRiwKLQkweDAwMDBGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMEMxMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweEZGRkYwMDAwLCAweEZGRkZGRkZGLCAweEZGODBGRkZGLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAzRkMwMSwgMHhGRkZGRkNGOCwgMHhGRjgwMEIxOSwKLX07Ci0KIHN0YXRpYyBpbnQgcjMwMF9wYWNrZXQwX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQl1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZykKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKLQlzdHJ1Y3QgcjMwMF9jc190cmFjayAqdHJhY2s7CisJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1aW50MzJfdCB0bXAsIHRpbGVfZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGk7CkBAIC0xMDEyLDcgKzcwNyw3IEBACiAKIAlpYiA9IHAtPmliLT5wdHI7CiAJaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07Ci0JdHJhY2sgPSAoc3RydWN0IHIzMDBfY3NfdHJhY2sqKXAtPnRyYWNrOworCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoKHJlZykgewogCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgpAQCAtMTAyNiwyOCArNzIxLDkgQEAKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fRFNUX1BJVENIX09GRlNFVDoKIAljYXNlIFJBREVPTl9TUkNfUElUQ0hfT0ZGU0VUOgotCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKLQkJCQkJaWR4LCByZWcpOwotCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQlyID0gcjEwMF9yZWxvY19waXRjaF9vZmZzZXQocCwgcGt0LCBpZHgsIHJlZyk7CisJCWlmIChyKQogCQkJcmV0dXJuIHI7Ci0JCX0KLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDAwM2ZmZmZmOwotCQl0bXAgKz0gKCgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpID4+IDEwKTsKLQotCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKLQkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0RTVF9USUxFX01BQ1JPOwotCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykgewotCQkJaWYgKHJlZyA9PSBSQURFT05fU1JDX1BJVENIX09GRlNFVCkgewotCQkJCURSTV9FUlJPUigiQ2Fubm90IHNyYyBibGl0IGZyb20gbWljcm90aWxlZCBzdXJmYWNlXG4iKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9EU1RfVElMRV9NSUNSTzsKLQkJfQotCQl0bXAgfD0gdGlsZV9mbGFnczsKLQkJaWJbaWR4XSA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4M2ZjMDAwMDApIHwgdG1wOwogCQlicmVhazsKIAljYXNlIFIzMDBfUkIzRF9DT0xPUk9GRlNFVDA6CiAJY2FzZSBSMzAwX1JCM0RfQ09MT1JPRkZTRVQxOgpAQCAtMTI1Niw0MiArOTMyLDQxIEBACiAJCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNSkgJiAweDM7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS50ZXhfY29vcmRfdHlwZSA9IHRtcDsKIAkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDFGKSkgewotCQljYXNlIDA6Ci0JCWNhc2UgMjoKLQkJY2FzZSA1OgotCQljYXNlIDE4OgotCQljYXNlIDIwOgotCQljYXNlIDIxOgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1g4OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1k0WDQ6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjNZM1gyOgogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CiAJCQlicmVhazsKLQkJY2FzZSAxOgotCQljYXNlIDM6Ci0JCWNhc2UgNjoKLQkJY2FzZSA3OgotCQljYXNlIDEwOgotCQljYXNlIDExOgotCQljYXNlIDE5OgotCQljYXNlIDIyOgotCQljYXNlIDI0OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1gxNjoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZOFg4OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1o1WTZYNToKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aNlk1WDU6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfVzRaNFk0WDQ6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfVzFaNVk1WDU6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRFhUMToKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EM0RNRlRfQ3hWOFU4OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0I4RzhfQjhHODoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9HOFI4X0c4Qjg6CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMjsKIAkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCWNhc2UgODoKLQkJY2FzZSA5OgotCQljYXNlIDEyOgotCQljYXNlIDEzOgotCQljYXNlIDIzOgotCQljYXNlIDI1OgotCQljYXNlIDI3OgotCQljYXNlIDMwOgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1kxNlgxNjoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aMTFZMTFYMTA6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjEwWTExWDExOgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1c4WjhZOFg4OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1cyWjEwWTEwWDEwOgorCQljYXNlIDB4MTc6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRkxfSTMyOgorCQljYXNlIDB4MWU6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRFhUMzoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EWFQ1OgogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDQ7CiAJCQlicmVhazsKLQkJY2FzZSAxNDoKLQkJY2FzZSAyNjoKLQkJY2FzZSAyODoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9XMTZaMTZZMTZYMTY6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRkxfUjE2RzE2QjE2QTE2OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0ZMX0kzMkEzMjoKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA4OwogCQkJYnJlYWs7Ci0JCWNhc2UgMjk6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRkxfUjMyRzMyQjMyQTMyOgogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE2OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xMzE5LDExICs5OTQsMTEgQEAKIAljYXNlIDB4NDQzQzoKIAkJLyogVFhfRklMVEVSMF9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ0MDApID4+IDI7Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHg3OzsKKwkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfdyA9IGZhbHNlOwogCQl9Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAzKSAmIDB4Nzs7CisJCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAzKSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA0IHx8IHRtcCA9PSA2KSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CiAJCX0KQEAgLTE0MTEsOCArMTA4Niw5IEBACiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewogCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOworCiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7Ci0Jc3RydWN0IHIzMDBfY3NfdHJhY2sgKnRyYWNrOworCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CiAJdW5zaWduZWQgaWR4OwogCXVuc2lnbmVkIGksIGM7CkBAIC0xNDIxLDcgKzEwOTcsNyBAQAogCWliID0gcC0+aWItPnB0cjsKIAlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeCArIDE7Ci0JdHJhY2sgPSAoc3RydWN0IHIzMDBfY3NfdHJhY2sqKXAtPnRyYWNrOworCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoKHBrdC0+b3Bjb2RlKSB7CiAJY2FzZSBQQUNLRVQzXzNEX0xPQURfVkJQTlRSOgogCQljID0gaWJfY2h1bmstPmtkYXRhW2lkeCsrXSAmIDB4MUY7CkBAIC0xNDg4LDcgKzExNjQsNyBAQAogCQl9CiAJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwotCQlyID0gcjMwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CkBAIC0xNTAzLDM1ICsxMTc5LDM1IEBACiAJCX0KIAkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQ7Ci0JCXIgPSByMzAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRjoKIAkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOwotCQlyID0gcjMwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUZfMjoKIAkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCXIgPSByMzAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKIAkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOwotCQlyID0gcjMwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKIAkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCXIgPSByMzAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KQEAgLTE1NDgsMTEgKzEyMjQsMTIgQEAKIGludCByMzAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQogewogCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHBrdDsKLQlzdHJ1Y3QgcjMwMF9jc190cmFjayB0cmFjazsKKwlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJaW50IHI7CiAKLQlyMzAwX2NzX3RyYWNrX2NsZWFyKCZ0cmFjayk7Ci0JcC0+dHJhY2sgPSAmdHJhY2s7CisJdHJhY2sgPSBremFsbG9jKHNpemVvZigqdHJhY2spLCBHRlBfS0VSTkVMKTsKKwlyMTAwX2NzX3RyYWNrX2NsZWFyKHAtPnJkZXYsIHRyYWNrKTsKKwlwLT50cmFjayA9IHRyYWNrOwogCWRvIHsKIAkJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlKHAsICZwa3QsIHAtPmlkeCk7CiAJCWlmIChyKSB7CkBAIC0xNTgyLDkgKzEyNTksNDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHIzMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjMwMF9zZXRfcmVnX3NhZmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSByMzAwX3JlZ19zYWZlX2JtOwogCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHIzMDBfcmVnX3NhZmVfYm0pOworfQorCitpbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIzMDBfc2V0X3JlZ19zYWZlKHJkZXYpOwogCXJldHVybiAwOwogfQorCit2b2lkIHIzMDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcjEwMF9tY19zYXZlIHNhdmU7CisJaW50IHI7CisKKwlyID0gcjEwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgcjEwMF9tYyBkZWJ1Z2ZzIGZpbGUuXG4iKTsKKwl9CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXIxMDBfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlXUkVHMzIoUl8wMDAxNENfTUNfQUdQX0xPQ0FUSU9OLAorCQkJU18wMDAxNENfTUNfQUdQX1NUQVJUKHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNikgfAorCQkJU18wMDAxNENfTUNfQUdQX1RPUChyZGV2LT5tYy5ndHRfZW5kID4+IDE2KSk7CisJCVdSRUczMihSXzAwMDE3MF9BR1BfQkFTRSwgbG93ZXJfMzJfYml0cyhyZGV2LT5tYy5hZ3BfYmFzZSkpOworCQlXUkVHMzIoUl8wMDAxNUNfQUdQX0JBU0VfMiwKKwkJCXVwcGVyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpICYgMHhmZik7CisJfSBlbHNlIHsKKwkJV1JFRzMyKFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7CisJCVdSRUczMihSXzAwMDE3MF9BR1BfQkFTRSwgMCk7CisJCVdSRUczMihSXzAwMDE1Q19BR1BfQkFTRV8yLCAwKTsKKwl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyMzAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCURSTV9JTkZPKCJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIGJlZm9yZSBwcm9ncmFtbWluZyBNQy5cbiIpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4NmI0ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KLSAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczogRGF2ZSBBaXJsaWUKLSAqICAgICAgICAgIEFsZXggRGV1Y2hlcgotICogICAgICAgICAgSmVyb21lIEdsaXNzZQotICovCi0jaWZuZGVmIFIzMDBfSAotI2RlZmluZSBSMzAwX0gKLQotc3RydWN0IHIzMDBfYXNpYyB7Ci0JY29uc3QgdW5zaWduZWQJKnJlZ19zYWZlX2JtOwotCXVuc2lnbmVkCXJlZ19zYWZlX2JtX3NpemU7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZhM2ViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1IzMDBEX0hfXworI2RlZmluZSBfX1IzMDBEX0hfXworCisjZGVmaW5lIENQX1BBQ0tFVDAJCQkweDAwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQwX0JBU0VfSU5ERVhfU0hJRlQJMAorI2RlZmluZQkJUEFDS0VUMF9CQVNFX0lOREVYX01BU0sJCSgweDFmZmZmIDw8IDApCisjZGVmaW5lCQlQQUNLRVQwX0NPVU5UX1NISUZUCQkxNgorI2RlZmluZQkJUEFDS0VUMF9DT1VOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQorI2RlZmluZSBDUF9QQUNLRVQxCQkJMHg0MDAwMDAwMAorI2RlZmluZSBDUF9QQUNLRVQyCQkJMHg4MDAwMDAwMAorI2RlZmluZQkJUEFDS0VUMl9QQURfU0hJRlQJCTAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX01BU0sJCSgweDNmZmZmZmZmIDw8IDApCisjZGVmaW5lIENQX1BBQ0tFVDMJCQkweEMwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQzX0lUX09QQ09ERV9TSElGVAkJOAorI2RlZmluZQkJUEFDS0VUM19JVF9PUENPREVfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJCVBBQ0tFVDNfQ09VTlRfU0hJRlQJCTE2CisjZGVmaW5lCQlQQUNLRVQzX0NPVU5UX01BU0sJCSgweDNmZmYgPDwgMTYpCisvKiBQQUNLRVQzIG9wIGNvZGUgKi8KKyNkZWZpbmUJCVBBQ0tFVDNfTk9QCQkJMHgxMAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUYJCTB4MjgKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1ECQkweDI5CisjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU5EWAkJMHgyQQorI2RlZmluZQkJUEFDS0VUM18zRF9MT0FEX1ZCUE5UUgkJMHgyRgorI2RlZmluZQkJUEFDS0VUM19JTkRYX0JVRkZFUgkJMHgzMworI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUZfMgkJMHgzNAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lNTURfMgkJMHgzNQorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFhfMgkJMHgzNgorI2RlZmluZQkJUEFDS0VUM19CSVRCTFRfTVVMVEkJCTB4OUIKKworI2RlZmluZSBQQUNLRVQwKHJlZywgbikJKENQX1BBQ0tFVDAgfAkJCQkJXAorCQkJIFJFR19TRVQoUEFDS0VUMF9CQVNFX0lOREVYLCAocmVnKSA+PiAyKSB8CVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDBfQ09VTlQsIChuKSkpCisjZGVmaW5lIFBBQ0tFVDIodikJKENQX1BBQ0tFVDIgfCBSRUdfU0VUKFBBQ0tFVDJfUEFELCAodikpKQorI2RlZmluZSBQQUNLRVQzKG9wLCBuKQkoQ1BfUEFDS0VUMyB8CQkJCQlcCisJCQkgUkVHX1NFVChQQUNLRVQzX0lUX09QQ09ERSwgKG9wKSkgfAkJXAorCQkJIFJFR19TRVQoUEFDS0VUM19DT1VOVCwgKG4pKSkKKworI2RlZmluZQlQQUNLRVRfVFlQRTAJMAorI2RlZmluZQlQQUNLRVRfVFlQRTEJMQorI2RlZmluZQlQQUNLRVRfVFlQRTIJMgorI2RlZmluZQlQQUNLRVRfVFlQRTMJMworCisjZGVmaW5lIENQX1BBQ0tFVF9HRVRfVFlQRShoKSAoKChoKSA+PiAzMCkgJiAzKQorI2RlZmluZSBDUF9QQUNLRVRfR0VUX0NPVU5UKGgpICgoKGgpID4+IDE2KSAmIDB4M0ZGRikKKyNkZWZpbmUgQ1BfUEFDS0VUMF9HRVRfUkVHKGgpICgoKGgpICYgMHgxRkZGKSA8PCAyKQorI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCisjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0OAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNENfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNEMKKyNkZWZpbmUgICBTXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNENfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTRDX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMTVDX0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTVDCisjZGVmaW5lICAgU18wMDAxNUNfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNUNfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxNUNfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorI2RlZmluZSBSXzAwMDE3MF9BR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE3MAorI2RlZmluZSAgIFNfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE3MF9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAxNzBfQUdQX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwppbmRleCA5NzQyNmE2Li40OWEyZmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwpAQCAtMjksNDcgKzI5LDEzIEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAicjQyMGQuaCIKIAotLyogcjQyMCxyNDIzLHJ2NDEwIGRlcGVuZHMgb24gOiAqLwotdm9pZCByMTAwX3BjaV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfbWNfc2V0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCBydjM3MF9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG8gOgotICogcjQyMCxyNDIzLHJ2NDEwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByNDIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNDIwX2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotCi0vKgotICogTUMKLSAqLwogaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0JaWYgKHI0MjBfZGVidWdmc19waXBlc19pbmZvX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKLQl9Ci0KLQlyNDIwX2dwdV9pbml0KHJkZXYpOwotCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewotCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQl9Ci0KIAkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCiAJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKIAlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CkBAIC04NywzMyArNTMsOSBAQAogCWlmIChyKSB7CiAJCXJldHVybiByOwogCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHJkZXYpOwotCWlmIChyMzAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCXIxMDBfbWNfc2V0dXAocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcjQyMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKLQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHI0MjBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCiB2b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCB0bXA7CkBAIC0xMjIsNiArNjQsMTEgQEAKIAogCS8qIEdBX0VOSEFOQ0Ugd29ya2Fyb3VuZCBUQ0wgZGVhZGxvY2sgaXNzdWUgKi8KIAlXUkVHMzIoMHg0Mjc0LCAoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKSk7CisJLyogYWRkIGlkbGUgd2FpdCBhcyBwZXIgZnJlZWRlc2t0b3Aub3JnIGJ1ZyAyNDA0MSAqLworCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKKwkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKKwl9CiAJLyogZ2V0IG1heCBudW1iZXIgb2YgcGlwZXMgKi8KIAlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwogCW51bV9waXBlcyA9ICgoZ2JfcGlwZV9zZWxlY3QgPj4gMTIpICYgMykgKyAxOwpAQCAtMTc5LDI1ICsxMjYsMjM5IEBACiAJCSByZGV2LT5udW1fZ2JfcGlwZXMsIHJkZXYtPm51bV96X3BpcGVzKTsKIH0KIAotdm9pZCByNDIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordTMyIHI0MjBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZykKIHsKLQlyMTAwX2hkcF9yZXNldChyZGV2KTsKLQlyNDIwX3BpcGVzX2luaXQocmRldik7Ci0JaWYgKHIzMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKKwl1MzIgcjsKKworCVdSRUczMihSXzAwMDFGOF9NQ19JTkRfSU5ERVgsIFNfMDAwMUY4X01DX0lORF9BRERSKHJlZykpOworCXIgPSBSUkVHMzIoUl8wMDAxRkNfTUNfSU5EX0RBVEEpOworCXJldHVybiByOworfQorCit2b2lkIHI0MjBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZywgdTMyIHYpCit7CisJV1JFRzMyKFJfMDAwMUY4X01DX0lORF9JTkRFWCwgU18wMDAxRjhfTUNfSU5EX0FERFIocmVnKSB8CisJCVNfMDAwMUY4X01DX0lORF9XUl9FTigxKSk7CisJV1JFRzMyKFJfMDAwMUZDX01DX0lORF9EQVRBLCB2KTsKK30KKworc3RhdGljIHZvaWQgcjQyMF9kZWJ1Z2ZzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKKwl9CisJaWYgKHI0MjBfZGVidWdmc19waXBlc19pbmZvX2luaXQocmRldikpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKIAl9CiB9CiAKLQotLyoKLSAqIHI0MjAscjQyMyxydjQxMCBWUkFNIGluZm8KLSAqLwotdm9pZCByNDIwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyB2b2lkIHI0MjBfY2xvY2tfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXIzMDBfdnJhbV9pbmZvKHJkZXYpOworCXUzMiBzY2xrX2NudGw7CisJc2Nsa19jbnRsID0gUlJFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwpOworCXNjbGtfY250bCB8PSBTXzAwMDAwRF9GT1JDRV9DUCgxKSB8IFNfMDAwMDBEX0ZPUkNFX1ZJUCgxKTsKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMCkKKwkJc2Nsa19jbnRsIHw9IFNfMDAwMDBEX0ZPUkNFX1BYKDEpIHwgU18wMDAwMERfRk9SQ0VfVFgoMSk7CisJV1JFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwsIHNjbGtfY250bCk7CiB9CiAKK3N0YXRpYyBpbnQgcjQyMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcjMwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCisJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlyNDIwX3BpcGVzX2luaXQocmRldik7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXIxMDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwl9CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcjQyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlyNDIwX2Nsb2NrX3Jlc3VtZShyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCX0gZWxzZSB7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlyNDIwX2Nsb2NrX3Jlc3VtZShyZGV2KTsKKworCXJldHVybiByNDIwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByNDIwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyMTAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjQyMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKKwlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwl9IGVsc2UgeworCQlyYWRlb25fY29tYmlvc19maW5pKHJkZXYpOworCX0KKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHI0MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJkZXYtPm5ld19pbml0X3BhdGggPSB0cnVlOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0gZWxzZSB7CisJCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCQl9IGVsc2UgeworCQkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCQl9CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIzMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisJcjQyMF9kZWJ1Z2ZzKHJkZXYpOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKSB7CisJCXJldHVybiByOworCX0KKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkgeworCQlyID0gcjEwMF9wY2lfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlyMzAwX3NldF9yZWdfc2FmZShyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjQyMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXI0MjBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCQlydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2FncF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCXJldHVybiAwOworfQogCiAvKgogICogRGVidWdmcyBpbmZvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4YTdkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMGQuaApAQCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgUjQyMERfSAorI2RlZmluZSBSNDIwRF9ICisKKyNkZWZpbmUgUl8wMDAxRjhfTUNfSU5EX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxRjgKKyNkZWZpbmUgICBTXzAwMDFGOF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDAxRjhfTUNfSU5EX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwMUY4X01DX0lORF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMDFGOF9NQ19JTkRfV1JfRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDFGOF9NQ19JTkRfV1JfRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDFGOF9NQ19JTkRfV1JfRU4gICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lIFJfMDAwMUZDX01DX0lORF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUZDCisjZGVmaW5lICAgU18wMDAxRkNfTUNfSU5EX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMUZDX01DX0lORF9EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDFGQ19NQ19JTkRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisvKiBDTEsgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IGViZDZiMGYuLmQ0YjBiOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC0yOCwxMiArMjgsOSBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCi0jaW5jbHVkZSAicmFkZW9uX3NoYXJlLmgiCiAKIC8qIHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MCBkZXBlbmRzIG9uIDogKi8KIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCBydjM3MF9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTExOSw5ICsxMTYsNiBAQAogCiB2b2lkIHI1MjBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7Ci0JcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IDUzOGNkOTAuLmVhYjMxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC0yNSwxMiArMjUsNDUgQEAKICAqICAgICAgICAgIEFsZXggRGV1Y2hlcgogICogICAgICAgICAgSmVyb21lIEdsaXNzZQogICovCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJyYWRlb25fcmVnLmgiCisjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgInJhZGVvbl9tb2RlLmgiCisjaW5jbHVkZSAicjYwMGQuaCIKKyNpbmNsdWRlICJhdml2b2QuaCIKKyNpbmNsdWRlICJhdG9tLmgiCiAKLS8qIHI2MDAscnY2MTAscnY2MzAscnY2MjAscnY2MzUscnY2NzAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisjZGVmaW5lIFBGUF9VQ09ERV9TSVpFIDU3NgorI2RlZmluZSBQTTRfVUNPREVfU0laRSAxNzkyCisjZGVmaW5lIFI3MDBfUEZQX1VDT0RFX1NJWkUgODQ4CisjZGVmaW5lIFI3MDBfUE00X1VDT0RFX1NJWkUgMTM2MAorCisvKiBGaXJtd2FyZSBOYW1lcyAqLworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUjYwMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SNjAwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MTBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MTBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYzMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYzMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjIwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjIwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzVfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzVfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjY3MF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjY3MF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JTNzgwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JTNzgwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3NzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3NzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjczMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjczMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzEwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzEwX21lLmJpbiIpOworCitpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86CiAgKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwCkBAIC0zOSw4NyArNzIsMjkzIEBACiAgKi8KIGludCByNjAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcjYwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogCiAvKgotICogTUMKKyAqIFI2MDAgUENJRSBHQVJUCiAgKi8KLWludCByNjAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgcjYwMF9nYXJ0X2NsZWFyX3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpKQogewotCXVpbnQzMl90IHRtcDsKKwl2b2lkIF9faW9tZW0gKnB0ciA9ICh2b2lkICopcmRldi0+Z2FydC50YWJsZS52cmFtLnB0cjsKKwl1NjQgcHRlOwogCi0JcjYwMF9ncHVfaW5pdChyZGV2KTsKLQotCS8qIHNldHVwIHRoZSBnYXJ0IGJlZm9yZSBjaGFuZ2luZyBsb2NhdGlvbiBzbyB3ZSBjYW4gYXNrIHRvCi0JICogZGlzY2FyZCB1bm1hcHBlZCBtYyByZXF1ZXN0Ci0JICovCi0JLyogRklYTUU6IGRpc2FibGUgb3V0IG9mIGdhcnQgYWNjZXNzICovCi0JdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uIC8gNDA5NjsKLQl0bXAgPSBSRUdfU0VUKFI2MDBfTE9HSUNBTF9QQUdFX05VTUJFUiwgdG1wKTsKLQlXUkVHMzIoUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIHRtcCk7Ci0JdG1wID0gKHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplKSAvIDQwOTY7Ci0JdG1wID0gUkVHX1NFVChSNjAwX0xPR0lDQUxfUEFHRV9OVU1CRVIsIHRtcCk7Ci0JV1JFRzMyKFI2MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgdG1wKTsKLQotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUjYwMF9NQ19GQl9UT1AsIHRtcCA+PiAyNCk7Ci0JdG1wIHw9IFJFR19TRVQoUjYwMF9NQ19GQl9CQVNFLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDI0KTsKLQlXUkVHMzIoUjYwMF9NQ19WTV9GQl9MT0NBVElPTiwgdG1wKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSNjAwX01DX0FHUF9UT1AsIHRtcCA+PiAyMik7Ci0JV1JFRzMyKFI2MDBfTUNfVk1fQUdQX1RPUCwgdG1wKTsKLQl0bXAgPSBSRUdfU0VUKFI2MDBfTUNfQUdQX0JPVCwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uID4+IDIyKTsKLQlXUkVHMzIoUjYwMF9NQ19WTV9BR1BfQk9ULCB0bXApOworCWlmIChpIDwgMCB8fCBpID4gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwdGUgPSAwOworCXdyaXRlcShwdGUsICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogOCkpOwogCXJldHVybiAwOwogfQogCi12b2lkIHI2MDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KKwl1bnNpZ25lZCBpOworCXUzMiB0bXA7CisKKwlXUkVHMzIoVk1fQ09OVEVYVDBfSU5WQUxJREFUSU9OX0xPV19BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9JTlZBTElEQVRJT05fSElHSF9BRERSLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUkVRVUVTVF9SRVNQT05TRSwgUkVRVUVTVF9UWVBFKDEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJLyogcmVhZCBNQ19TVEFUVVMgKi8KKwkJdG1wID0gUlJFRzMyKFZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UpOworCQl0bXAgPSAodG1wICYgUkVTUE9OU0VfVFlQRV9NQVNLKSA+PiBSRVNQT05TRV9UWVBFX1NISUZUOworCQlpZiAodG1wID09IDIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIHI2MDAgZmx1c2ggVExCIGZhaWxlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHRtcCkgeworCQkJcmV0dXJuOworCQl9CisJCXVkZWxheSgxKTsKKwl9CiB9CiAKLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KLXZvaWQgcjYwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgcjYwMF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKKwlpbnQgcjsKKworCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaikgeworCQlXQVJOKDEsICJSNjAwIFBDSUUgR0FSVCBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7CisJCXJldHVybiAwOworCX0KKwkvKiBJbml0aWFsaXplIGNvbW1vbiBnYXJ0IHN0cnVjdHVyZSAqLworCXIgPSByYWRlb25fZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZGV2LT5nYXJ0LnRhYmxlX3NpemUgPSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA4OworCXJldHVybiByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHJkZXYpOworfQorCitpbnQgcjYwMF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IHIsIGk7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmogPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIk5vIFZSQU0gb2JqZWN0IGZvciBQQ0lFIEdBUlQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUXzAoMCkgfCBCQU5LX1NFTEVDVF8xKDEpKTsKKwkvKiBTZXR1cCBUTEIgY29udHJvbCAqLworCXRtcCA9IEVOQUJMRV9MMV9UTEIgfCBFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTIHwKKwkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSkgfAorCQlFTkFCTEVfV0FJVF9MMl9RVUVSWTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9IRFBfQ05UTCwgdG1wIHwgRU5BQkxFX0wxX1NUUklDVF9PUkRFUklORyk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfSERQX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9SRF9CX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfV1JfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1BETUFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCByZGV2LT5nYXJ0LnRhYmxlX2FkZHIgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9DTlRMLCBFTkFCTEVfQ09OVEVYVCB8IFBBR0VfVEFCTEVfREVQVEgoMCkgfAorCQkJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQpOworCVdSRUczMihWTV9DT05URVhUMF9QUk9URUNUSU9OX0ZBVUxUX0RFRkFVTFRfQUREUiwKKwkJCSh1MzIpKHJkZXYtPmR1bW15X3BhZ2UuYWRkciA+PiAxMikpOworCWZvciAoaSA9IDE7IGkgPCA3OyBpKyspCisJCVdSRUczMihWTV9DT05URVhUMF9DTlRMICsgKGkgKiA0KSwgMCk7CisKKwlyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gocmRldik7CisJcmRldi0+Z2FydC5yZWFkeSA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjYwMF9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCWludCBpOworCisJLyogRGlzYWJsZSBhbGwgdGFibGVzICovCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKKworCS8qIERpc2FibGUgTDIgY2FjaGUgKi8KKwlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQkJCUVGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDcpKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUXzAoMCkgfCBCQU5LX1NFTEVDVF8xKDEpKTsKKwkvKiBTZXR1cCBMMSBUTEIgY29udHJvbCAqLworCXRtcCA9IEVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpIHwKKwkJRU5BQkxFX1dBSVRfTDJfUVVFUlk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9SRF9CX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfV1JfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1BETUFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU0VNX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU0VNX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU1lTX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU1lTX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfSERQX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfSERQX0NOVEwsIHRtcCk7CisJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKSB7CisJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKKwkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJfQorfQorCit2b2lkIHI2MDBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjYwMF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7CisJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAogaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCi0JcmV0dXJuIDA7CisJdW5zaWduZWQgaTsKKwl1MzIgdG1wOworCisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCS8qIHJlYWQgTUNfU1RBVFVTICovCisJCXRtcCA9IFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykgJiAweDNGMDA7CisJCWlmICghdG1wKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgxKTsKKwl9CisJcmV0dXJuIC0xOwogfQogCi12b2lkIHI2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByNjAwX21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7CisJdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOworCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7CisJdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7CisJdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7CisJdTY0IG9sZF92cmFtX3N0YXJ0OworCXUzMiB0bXA7CisJaW50IGksIGo7CisKKwkvKiBJbml0aWFsaXplIEhEUCAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKywgaiArPSAweDE4KSB7CisJCVdSRUczMigoMHgyYzE0ICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMxOCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMWMgKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzIwICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyNCArIGopLCAweDAwMDAwMDAwKTsKKwl9CisJV1JFRzMyKEhEUF9SRUdfQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDApOworCisJZDF2Z2FfY29udHJvbCA9IFJSRUczMihEMVZHQV9DT05UUk9MKTsKKwlkMnZnYV9jb250cm9sID0gUlJFRzMyKEQyVkdBX0NPTlRST0wpOworCXZnYV9yZW5kZXJfY29udHJvbCA9IFJSRUczMihWR0FfUkVOREVSX0NPTlRST0wpOworCXZnYV9oZHBfY29udHJvbCA9IFJSRUczMihWR0FfSERQX0NPTlRST0wpOworCWQxY3J0Y19jb250cm9sID0gUlJFRzMyKEQxQ1JUQ19DT05UUk9MKTsKKwlkMmNydGNfY29udHJvbCA9IFJSRUczMihEMkNSVENfQ09OVFJPTCk7CisJb2xkX3ZyYW1fc3RhcnQgPSAodTY0KShSUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04pICYgMHhGRkZGKSA8PCAyNDsKKwluZXdfZDFncnBoX3ByaW1hcnkgPSBSUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKTsKKwluZXdfZDFncnBoX3NlY29uZGFyeSA9IFJSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyk7CisJbmV3X2QxZ3JwaF9wcmltYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKKwluZXdfZDFncnBoX3NlY29uZGFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7CisJbmV3X2QyZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7CisJbmV3X2QyZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOworCW5ld19kMmdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7CisJbmV3X2QyZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OworCisJLyogU3RvcCBhbGwgdmlkZW8gKi8KKwlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQyVkdBX0NPTlRST0wsIDApOworCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIDApOworCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMUNSVENfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKKwlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKKworCW1kZWxheSgxKTsKKwlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCX0KKworCS8qIExvY2tvdXQgYWNjZXNzIHRocm91Z2ggVkdBIGFwZXJ0dXJlKi8KKwlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCBWR0FfTUVNT1JZX0RJU0FCTEUpOworCisJLyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gKi8KKwlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKKwlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgKHJkZXYtPm1jLnZyYW1fZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSLCAwKTsKKwl0bXAgPSAoKChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDI0KSAmIDB4RkZGRikgPDwgMTY7CisJdG1wIHw9ICgocmRldi0+bWMudnJhbV9zdGFydCA+PiAyNCkgJiAweEZGRkYpOworCVdSRUczMihNQ19WTV9GQl9MT0NBVElPTiwgdG1wKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfQkFTRSwgKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gOCkpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9JTkZPLCAoMiA8PCA3KSk7CisJV1JFRzMyKEhEUF9OT05TVVJGQUNFX1NJWkUsIChyZGV2LT5tYy5tY192cmFtX3NpemUgLSAxKSB8IDB4M0ZGKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMihNQ19WTV9BR1BfVE9QLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDE2KTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9CT1QsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNik7CisJCVdSRUczMihNQ19WTV9BR1BfQkFTRSwgcmRldi0+bWMuYWdwX2Jhc2UgPj4gMjIpOworCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9BR1BfQkFTRSwgMCk7CisJCVdSRUczMihNQ19WTV9BR1BfVE9QLCAweDBGRkZGRkZGKTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9CT1QsIDB4MEZGRkZGRkYpOworCX0KKwlXUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3ByaW1hcnkpOworCVdSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9zZWNvbmRhcnkpOworCVdSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfcHJpbWFyeSk7CisJV1JFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3NlY29uZGFyeSk7CisJV1JFRzMyKFZHQV9NRU1PUllfQkFTRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKworCS8qIFVubG9jayBob3N0IGFjY2VzcyAqLworCVdSRUczMihWR0FfSERQX0NPTlRST0wsIHZnYV9oZHBfY29udHJvbCk7CisKKwltZGVsYXkoMSk7CisJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwl9CisKKwkvKiBSZXN0b3JlIHZpZGVvIHN0YXRlICovCisJV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKEQxQ1JUQ19DT05UUk9MLCBkMWNydGNfY29udHJvbCk7CisJV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCBkMmNydGNfY29udHJvbCk7CisJV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKEQxVkdBX0NPTlRST0wsIGQxdmdhX2NvbnRyb2wpOworCVdSRUczMihEMlZHQV9DT05UUk9MLCBkMnZnYV9jb250cm9sKTsKKwlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCB2Z2FfcmVuZGVyX2NvbnRyb2wpOworCisJLyogd2UgbmVlZCB0byBvd24gVlJBTSwgc28gdHVybiBvZmYgdGhlIFZHQSByZW5kZXJlciBoZXJlCisJICogdG8gc3RvcCBpdCBvdmVyd3JpdGluZyBvdXIgb2JqZWN0cyAqLworCXJhZGVvbl9hdml2b192Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiB9CiAKLQotLyoKLSAqIFZSQU0gaW5mbwotICovCi12b2lkIHI2MDBfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCByNjAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3QgdG1wOworCWZpeGVkMjBfMTIgYTsKKwl1MzIgdG1wOwogCWludCBjaGFuc2l6ZTsKKwlpbnQgcjsKIAorCS8qIEdldCBWUkFNIGluZm9ybWF0aW9ucyAqLwogCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAxMjg7CiAJcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOwotCi0JdG1wID0gUlJFRzMyKFI2MDBfUkFNQ0ZHKTsKLQlpZiAodG1wICYgUjYwMF9DSEFOU0laRV9PVkVSUklERSkgeworCXRtcCA9IFJSRUczMihSQU1DRkcpOworCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgewogCQljaGFuc2l6ZSA9IDE2OwotCX0gZWxzZSBpZiAodG1wICYgUjYwMF9DSEFOU0laRSkgeworCX0gZWxzZSBpZiAodG1wICYgQ0hBTlNJWkVfTUFTSykgewogCQljaGFuc2l6ZSA9IDY0OwogCX0gZWxzZSB7CiAJCWNoYW5zaXplID0gMzI7CkBAIC0xMzUsMzYgKzM3NCwxNDU5IEBACiAJCQkocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzUpKSB7CiAJCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAyICogY2hhbnNpemU7CiAJfQotfQotCi12b2lkIHI2MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXI2MDBfdnJhbV9nZXRfdHlwZShyZGV2KTsKLQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihSNjAwX0NPTkZJR19NRU1TSVpFKTsKLQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZTsKLQogCS8qIENvdWxkIGFwZXIgc2l6ZSByZXBvcnQgMCA/ICovCiAJcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKIAlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJcmRldi0+bWMubWNfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKKwlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQkvKiBndHRfc2l6ZSBpcyBzZXR1cCBieSByYWRlb25fYWdwX2luaXQgKi8KKwkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7CisJCXRtcCA9IDB4RkZGRkZGRkZVTCAtIHJkZXYtPm1jLmFncF9iYXNlIC0gcmRldi0+bWMuZ3R0X3NpemU7CisJCS8qIFRyeSB0byBwdXQgdnJhbSBiZWZvcmUgb3IgYWZ0ZXIgQUdQIGJlY2F1c2Ugd2UKKwkJICogd2Ugd2FudCBTWVNURU1fQVBFUlRVUkUgdG8gY292ZXIgYm90aCBWUkFNIGFuZAorCQkgKiBBR1Agc28gdGhhdCBHUFUgY2FuIGNhdGNoIG91dCBvZiBWUkFNL0FHUCBhY2Nlc3MKKwkJICovCisJCWlmIChyZGV2LT5tYy5ndHRfbG9jYXRpb24gPiByZGV2LT5tYy5tY192cmFtX3NpemUpIHsKKwkJCS8qIEVub3VnaHQgcGxhY2UgYmVmb3JlICovCisJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uIC0KKwkJCQkJCQlyZGV2LT5tYy5tY192cmFtX3NpemU7CisJCX0gZWxzZSBpZiAodG1wID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7CisJCQkvKiBFbm91Z2h0IHBsYWNlIGFmdGVyICovCisJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsKKwkJCQkJCQlyZGV2LT5tYy5ndHRfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCS8qIFRyeSB0byBzZXR1cCBWUkFNIHRoZW4gQUdQIG1pZ2h0IG5vdAorCQkJICogbm90IHdvcmsgb24gc29tZSBjYXJkCisJCQkgKi8KKwkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7CisJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODAgfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM4ODApIHsKKwkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmCisJCQkJCQkJCTB4RkZGRikgPDwgMjQ7CisJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCQlpZiAoKDB4RkZGRkZGRkZVTCAtIHRtcCkgPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKKwkJCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgdnJhbSAqLworCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKKwkJCX0gZWxzZSBpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgeworCQkJCS8qIEVub3VnaCBwbGFjZSBiZWZvcmUgdnJhbSAqLworCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCS8qIE5vdCBlbm91Z2ggcGxhY2UgYWZ0ZXIgb3IgYmVmb3JlIHNocmluaworCQkJCSAqIGdhcnQgc2l6ZQorCQkJCSAqLworCQkJCWlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID4gKDB4RkZGRkZGRkZVTCAtIHRtcCkpIHsKKwkJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKKwkJCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOworCQkJCX0gZWxzZSB7CisJCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKKwkJCQkJcmRldi0+bWMuZ3R0X3NpemUgPSAweEZGRkZGRkZGVUwgLSB0bXA7CisJCQkJfQorCQkJfQorCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOworCQl9IGVsc2UgeworCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4MDAwMDAwMDBVTDsKKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCQl9CisJfQorCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOworCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy5ndHRfc3RhcnQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb247CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplOworCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgorCSAqIGRlZmF1bHQgc2V0dXAKKwkgKi8KKwlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTAwKTsKKwlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrKTsKKwlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOworCXJldHVybiAwOwogfQogCisvKiBXZSBkb2Vzbid0IGNoZWNrIHRoYXQgdGhlIEdQVSByZWFsbHkgbmVlZHMgYSByZXNldCB3ZSBzaW1wbHkgZG8gdGhlCisgKiByZXNldCwgaXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIGRldGVybWluZSBpZiB0aGUgR1BVIG5lZWRzIG9uZS4gV2UKKyAqIG1pZ2h0IGFkZCBhbiBoZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGhhdC4KKyAqLworaW50IHI2MDBfZ3B1X3NvZnRfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIGdyYm1fYnVzeV9tYXNrID0gU18wMDgwMTBfVkNfQlVTWSgxKSB8IFNfMDA4MDEwX1ZHVF9CVVNZX05PX0RNQSgxKSB8CisJCQkJU18wMDgwMTBfVkdUX0JVU1koMSkgfCBTXzAwODAxMF9UQTAzX0JVU1koMSkgfAorCQkJCVNfMDA4MDEwX1RDX0JVU1koMSkgfCBTXzAwODAxMF9TWF9CVVNZKDEpIHwKKwkJCQlTXzAwODAxMF9TSF9CVVNZKDEpIHwgU18wMDgwMTBfU1BJMDNfQlVTWSgxKSB8CisJCQkJU18wMDgwMTBfU01YX0JVU1koMSkgfCBTXzAwODAxMF9TQ19CVVNZKDEpIHwKKwkJCQlTXzAwODAxMF9QQV9CVVNZKDEpIHwgU18wMDgwMTBfREIwM19CVVNZKDEpIHwKKwkJCQlTXzAwODAxMF9DUl9CVVNZKDEpIHwgU18wMDgwMTBfQ0IwM19CVVNZKDEpIHwKKwkJCQlTXzAwODAxMF9HVUlfQUNUSVZFKDEpOworCXUzMiBncmJtMl9idXN5X21hc2sgPSBTXzAwODAxNF9TUEkwX0JVU1koMSkgfCBTXzAwODAxNF9TUEkxX0JVU1koMSkgfAorCQkJU18wMDgwMTRfU1BJMl9CVVNZKDEpIHwgU18wMDgwMTRfU1BJM19CVVNZKDEpIHwKKwkJCVNfMDA4MDE0X1RBMF9CVVNZKDEpIHwgU18wMDgwMTRfVEExX0JVU1koMSkgfAorCQkJU18wMDgwMTRfVEEyX0JVU1koMSkgfCBTXzAwODAxNF9UQTNfQlVTWSgxKSB8CisJCQlTXzAwODAxNF9EQjBfQlVTWSgxKSB8IFNfMDA4MDE0X0RCMV9CVVNZKDEpIHwKKwkJCVNfMDA4MDE0X0RCMl9CVVNZKDEpIHwgU18wMDgwMTRfREIzX0JVU1koMSkgfAorCQkJU18wMDgwMTRfQ0IwX0JVU1koMSkgfCBTXzAwODAxNF9DQjFfQlVTWSgxKSB8CisJCQlTXzAwODAxNF9DQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0NCM19CVVNZKDEpOworCXUzMiBzcmJtX3Jlc2V0ID0gMDsKKworCS8qIERpc2FibGUgQ1AgcGFyc2luZy9wcmVmZXRjaGluZyAqLworCVdSRUczMihSXzAwODZEOF9DUF9NRV9DTlRMLCBTXzAwODZEOF9DUF9NRV9IQUxUKDB4ZmYpKTsKKwkvKiBDaGVjayBpZiBhbnkgb2YgdGhlIHJlbmRlcmluZyBibG9jayBpcyBidXN5IGFuZCByZXNldCBpdCAqLworCWlmICgoUlJFRzMyKFJfMDA4MDEwX0dSQk1fU1RBVFVTKSAmIGdyYm1fYnVzeV9tYXNrKSB8fAorCSAgICAoUlJFRzMyKFJfMDA4MDE0X0dSQk1fU1RBVFVTMikgJiBncmJtMl9idXN5X21hc2spKSB7CisJCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIFNfMDA4MDIwX1NPRlRfUkVTRVRfQ1IoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9EQigxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0NCKDEpIHwKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfUEEoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9TQygxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1NNWCgxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1NQSSgxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1NYKDEpIHwKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfU0goMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9UQygxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1RBKDEpIHwKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkMoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WR1QoMSkpOworCQkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKKwkJdWRlbGF5KDUwKTsKKwkJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgMCk7CisJCSh2b2lkKVJSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQpOworCX0KKwkvKiBSZXNldCBDUCAod2UgYWx3YXlzIHJlc2V0IENQKSAqLworCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIFNfMDA4MDIwX1NPRlRfUkVTRVRfQ1AoMSkpOworCSh2b2lkKVJSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQpOworCXVkZWxheSg1MCk7CisJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgMCk7CisJKHZvaWQpUlJFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCk7CisJLyogUmVzZXQgb3RoZXJzIEdQVSBibG9jayBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoR18wMDBFNTBfUkxDX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9STEMoMSk7CisJaWYgKEdfMDAwRTUwX0dSQk1fUlFfUEVORElORyhSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKKwkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX0dSQk0oMSk7CisJaWYgKEdfMDAwRTUwX0hJX1JRX1BFTkRJTkcoUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9JSCgxKTsKKwlpZiAoR18wMDBFNTBfVk1DX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9WTUMoMSk7CisJaWYgKEdfMDAwRTUwX01DQl9CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfTUMoMSk7CisJaWYgKEdfMDAwRTUwX01DRFpfQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKKwkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX01DKDEpOworCWlmIChHXzAwMEU1MF9NQ0RZX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9NQygxKTsKKwlpZiAoR18wMDBFNTBfTUNEWF9CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfTUMoMSk7CisJaWYgKEdfMDAwRTUwX01DRFdfQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKKwkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX01DKDEpOworCWlmIChHXzAwMEU1MF9STENfQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKKwkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX1JMQygxKTsKKwlpZiAoR18wMDBFNTBfU0VNX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9TRU0oMSk7CisJV1JFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCwgc3JibV9yZXNldCk7CisJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CisJdWRlbGF5KDUwKTsKKwlXUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VULCAwKTsKKwkodm9pZClSUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUKTsKKwkvKiBXYWl0IGEgbGl0dGxlIGZvciB0aGluZ3MgdG8gc2V0dGxlIGRvd24gKi8KKwl1ZGVsYXkoNTApOworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmV0dXJuIHI2MDBfZ3B1X3NvZnRfcmVzZXQocmRldik7Cit9CisKK3N0YXRpYyB1MzIgcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKKwkJCQkJICAgICB1MzIgbnVtX2JhY2tlbmRzLAorCQkJCQkgICAgIHUzMiBiYWNrZW5kX2Rpc2FibGVfbWFzaykKK3sKKwl1MzIgYmFja2VuZF9tYXAgPSAwOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX21hc2s7CisJdTMyIGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJdTMyIGN1cl9waXBlOworCXUzMiBzd2l6emxlX3BpcGVbUjZYWF9NQVhfUElQRVNdOworCXUzMiBjdXJfYmFja2VuZDsKKwl1MzIgaTsKKworCWlmIChudW1fdGlsZV9waXBlcyA+IFI2WFhfTUFYX1BJUEVTKQorCQludW1fdGlsZV9waXBlcyA9IFI2WFhfTUFYX1BJUEVTOworCWlmIChudW1fdGlsZV9waXBlcyA8IDEpCisJCW51bV90aWxlX3BpcGVzID0gMTsKKwlpZiAobnVtX2JhY2tlbmRzID4gUjZYWF9NQVhfQkFDS0VORFMpCisJCW51bV9iYWNrZW5kcyA9IFI2WFhfTUFYX0JBQ0tFTkRTOworCWlmIChudW1fYmFja2VuZHMgPCAxKQorCQludW1fYmFja2VuZHMgPSAxOworCisJZW5hYmxlZF9iYWNrZW5kc19tYXNrID0gMDsKKwllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUjZYWF9NQVhfQkFDS0VORFM7ICsraSkgeworCQlpZiAoKChiYWNrZW5kX2Rpc2FibGVfbWFzayA+PiBpKSAmIDEpID09IDApIHsKKwkJCWVuYWJsZWRfYmFja2VuZHNfbWFzayB8PSAoMSA8PCBpKTsKKwkJCSsrZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKwkJfQorCQlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSBudW1fYmFja2VuZHMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSAwKSB7CisJCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDE7CisJCWVuYWJsZWRfYmFja2VuZHNfY291bnQgPSAxOworCX0KKworCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKKwkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKworCW1lbXNldCgodWludDhfdCAqKSZzd2l6emxlX3BpcGVbMF0sIDAsIHNpemVvZih1MzIpICogUjZYWF9NQVhfUElQRVMpOworCXN3aXRjaCAobnVtX3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCWJyZWFrOworCWNhc2UgNToKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJc3dpenpsZV9waXBlWzNdID0gMzsKKwkJc3dpenpsZV9waXBlWzRdID0gNDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA1OworCQlzd2l6emxlX3BpcGVbNF0gPSAxOworCQlzd2l6emxlX3BpcGVbNV0gPSAzOworCQlicmVhazsKKwljYXNlIDc6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDU7CisJCWJyZWFrOworCWNhc2UgODoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJc3dpenpsZV9waXBlWzRdID0gMTsKKwkJc3dpenpsZV9waXBlWzVdID0gMzsKKwkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJc3dpenpsZV9waXBlWzddID0gNzsKKwkJYnJlYWs7CisJfQorCisJY3VyX2JhY2tlbmQgPSAwOworCWZvciAoY3VyX3BpcGUgPSAwOyBjdXJfcGlwZSA8IG51bV90aWxlX3BpcGVzOyArK2N1cl9waXBlKSB7CisJCXdoaWxlICgoKDEgPDwgY3VyX2JhY2tlbmQpICYgZW5hYmxlZF9iYWNrZW5kc19tYXNrKSA9PSAwKQorCQkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCisJCWJhY2tlbmRfbWFwIHw9ICh1MzIpKCgoY3VyX2JhY2tlbmQgJiAzKSA8PCAoc3dpenpsZV9waXBlW2N1cl9waXBlXSAqIDIpKSk7CisKKwkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCX0KKworCXJldHVybiBiYWNrZW5kX21hcDsKK30KKworaW50IHI2MDBfY291bnRfcGlwZV9iaXRzKHVpbnQzMl90IHZhbCkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCXJldCArPSB2YWwgJiAxOworCQl2YWwgPj49IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcjYwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdGlsaW5nX2NvbmZpZzsKKwl1MzIgcmFtY2ZnOworCXUzMiB0bXA7CisJaW50IGksIGo7CisJdTMyIHNxX2NvbmZpZzsKKwl1MzIgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IDA7CisJdTMyIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAwOworCXUzMiBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IDA7CisJdTMyIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IDA7CisJdTMyIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IDA7CisKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUjYwMDoKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3RpbGVfcGlwZXMgPSA4OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfc2ltZHMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfZ3BycyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3RocmVhZHMgPSAxOTI7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9zdGFja19lbnRyaWVzID0gMjU2OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfZ3NfdGhyZWFkcyA9IDE2OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3FfbnVtX2NmX2luc3RzID0gMjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3BpcGVzID0gMjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3RpbGVfcGlwZXMgPSAyOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfc2ltZHMgPSAzOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMgPSAxOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfZ3BycyA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3RocmVhZHMgPSAxOTI7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9zdGFja19lbnRyaWVzID0gMTI4OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfZ3NfdGhyZWFkcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTI4OworCQlyZGV2LT5jb25maWcucjYwMC5zcV9udW1fY2ZfaW5zdHMgPSAyOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9waXBlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzID0gMTsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3NpbWRzID0gMjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2JhY2tlbmRzID0gMTsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2dwcnMgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF90aHJlYWRzID0gMTkyOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2h3X2NvbnRleHRzID0gNDsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2dzX3RocmVhZHMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3FfbnVtX2NmX2luc3RzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjcwOgorCQlyZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfdGlsZV9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9zaW1kcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9iYWNrZW5kcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9ncHJzID0gMTkyOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfdGhyZWFkcyA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9od19jb250ZXh0cyA9IDg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9nc190aHJlYWRzID0gMTY7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTI4OworCQlyZGV2LT5jb25maWcucjYwMC5zcV9udW1fY2ZfaW5zdHMgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBJbml0aWFsaXplIEhEUCAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKywgaiArPSAweDE4KSB7CisJCVdSRUczMigoMHgyYzE0ICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMxOCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMWMgKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzIwICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyNCArIGopLCAweDAwMDAwMDAwKTsKKwl9CisKKwlXUkVHMzIoR1JCTV9DTlRMLCBHUkJNX1JFQURfVElNRU9VVCgweGZmKSk7CisKKwkvKiBTZXR1cCB0aWxpbmcgKi8KKwl0aWxpbmdfY29uZmlnID0gMDsKKwlyYW1jZmcgPSBSUkVHMzIoUkFNQ0ZHKTsKKwlzd2l0Y2ggKHJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzKSB7CisJY2FzZSAxOgorCQl0aWxpbmdfY29uZmlnIHw9IFBJUEVfVElMSU5HKDApOworCQlicmVhazsKKwljYXNlIDI6CisJCXRpbGluZ19jb25maWcgfD0gUElQRV9USUxJTkcoMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdGlsaW5nX2NvbmZpZyB8PSBQSVBFX1RJTElORygyKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl0aWxpbmdfY29uZmlnIHw9IFBJUEVfVElMSU5HKDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygocmFtY2ZnICYgTk9PRkJBTktfTUFTSykgPj4gTk9PRkJBTktfU0hJRlQpOworCXRpbGluZ19jb25maWcgfD0gR1JPVVBfU0laRSgwKTsKKwl0bXAgPSAocmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgPj4gTk9PRlJPV1NfU0hJRlQ7CisJaWYgKHRtcCA+IDMpIHsKKwkJdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOworCQl0aWxpbmdfY29uZmlnIHw9IFNBTVBMRV9TUExJVCgzKTsKKwl9IGVsc2UgeworCQl0aWxpbmdfY29uZmlnIHw9IFJPV19USUxJTkcodG1wKTsKKwkJdGlsaW5nX2NvbmZpZyB8PSBTQU1QTEVfU1BMSVQodG1wKTsKKwl9CisJdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1NXQVBTKDEpOworCXRtcCA9IHI2MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChyZGV2LT5jb25maWcucjYwMC5tYXhfdGlsZV9waXBlcywKKwkJCQkJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9iYWNrZW5kcywKKwkJCQkJCSgweGZmIDw8IHJkZXYtPmNvbmZpZy5yNjAwLm1heF9iYWNrZW5kcykgJiAweGZmKTsKKwl0aWxpbmdfY29uZmlnIHw9IEJBQ0tFTkRfTUFQKHRtcCk7CisJV1JFRzMyKEdCX1RJTElOR19DT05GSUcsIHRpbGluZ19jb25maWcpOworCVdSRUczMihEQ1BfVElMSU5HX0NPTkZJRywgdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZik7CisJV1JFRzMyKEhEUF9USUxJTkdfQ09ORklHLCB0aWxpbmdfY29uZmlnICYgMHhmZmZmKTsKKworCXRtcCA9IEJBQ0tFTkRfRElTQUJMRSgoUjZYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMpICYgUjZYWF9NQVhfQkFDS0VORFNfTUFTSyk7CisJV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgdG1wKTsKKworCS8qIFNldHVwIHBpcGVzICovCisJdG1wID0gSU5BQ1RJVkVfUURfUElQRVMoKFI2WFhfTUFYX1BJUEVTX01BU0sgPDwgcmRldi0+Y29uZmlnLnI2MDAubWF4X3BpcGVzKSAmIFI2WFhfTUFYX1BJUEVTX01BU0spOworCXRtcCB8PSBJTkFDVElWRV9TSU1EUygoUjZYWF9NQVhfU0lNRFNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfc2ltZHMpICYgUjZYWF9NQVhfU0lNRFNfTUFTSyk7CisJV1JFRzMyKENDX0dDX1NIQURFUl9QSVBFX0NPTkZJRywgdG1wKTsKKwlXUkVHMzIoR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIHRtcCk7CisKKwl0bXAgPSBSNlhYX01BWF9CQUNLRU5EUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKHRtcCAmIElOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCVdSRUczMihWR1RfT1VUX0RFQUxMT0NfQ05UTCwgKHRtcCAqIDQpICYgREVBTExPQ19ESVNUX01BU0spOworCVdSRUczMihWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwsICgodG1wICogNCkgLSAyKSAmIFZUWF9SRVVTRV9ERVBUSF9NQVNLKTsKKworCS8qIFNldHVwIHNvbWUgQ1Agc3RhdGVzICovCisJV1JFRzMyKENQX1FVRVVFX1RIUkVTSE9MRFMsIChST1FfSUIxX1NUQVJUKDB4MTYpIHwgUk9RX0lCMl9TVEFSVCgweDJiKSkpOworCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgKE1FUV9FTkQoMHg0MCkgfCBST1FfRU5EKDB4NDApKSk7CisKKwlXUkVHMzIoVEFfQ05UTF9BVVgsIChESVNBQkxFX0NVQkVfQU5JU08gfCBTWU5DX0dSQURJRU5UIHwKKwkJCSAgICAgU1lOQ19XQUxLRVIgfCBTWU5DX0FMSUdORVIpKTsKKwkvKiBTZXR1cCB2YXJpb3VzIEdQVSBzdGF0ZXMgKi8KKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2NzApCisJCVdSRUczMihBUkJfR0RFQ19SRF9DTlRMLCAweDAwMDAwMDIxKTsKKworCXRtcCA9IFJSRUczMihTWF9ERUJVR18xKTsKKwl0bXAgfD0gU01YX0VWRU5UX1JFTEVBU0U7CisJaWYgKChyZGV2LT5mYW1pbHkgPiBDSElQX1I2MDApKQorCQl0bXAgfD0gRU5BQkxFX05FV19TTVhfQUREUkVTUzsKKwlXUkVHMzIoU1hfREVCVUdfMSwgdG1wKTsKKworCWlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SNjAwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYzMCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJV1JFRzMyKERCX0RFQlVHLCBQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyKERCX0RFQlVHLCAwKTsKKwl9CisJV1JFRzMyKERCX1dBVEVSTUFSS1MsIChERVBUSF9GUkVFKDQpIHwgREVQVEhfQ0FDSEVMSU5FX0ZSRUUoMTYpIHwKKwkJCSAgICAgICBERVBUSF9GTFVTSCgxNikgfCBERVBUSF9QRU5ESU5HX0ZSRUUoNCkpKTsKKworCVdSRUczMihQQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCVdSRUczMihWR1RfTlVNX0lOU1RBTkNFUywgMCk7CisKKwlXUkVHMzIoU1BJX0NPTkZJR19DTlRMLCBHUFJfV1JJVEVfUFJJT1JJVFkoMCkpOworCVdSRUczMihTUElfQ09ORklHX0NOVExfMSwgVlRYX0RPTkVfREVMQVkoMCkpOworCisJdG1wID0gUlJFRzMyKFNRX01TX0ZJRk9fU0laRVMpOworCWlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCQl0bXAgPSAoQ0FDSEVfRklGT19TSVpFKDB4YSkgfAorCQkgICAgICAgRkVUQ0hfRklGT19ISVdBVEVSKDB4YSkgfAorCQkgICAgICAgRE9ORV9GSUZPX0hJV0FURVIoMHhlMCkgfAorCQkgICAgICAgQUxVX1VQREFURV9GSUZPX0hJV0FURVIoMHg4KSk7CisJfSBlbHNlIGlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SNjAwKSB8fAorCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYzMCkpIHsKKwkJdG1wICY9IH5ET05FX0ZJRk9fSElXQVRFUigweGZmKTsKKwkJdG1wIHw9IERPTkVfRklGT19ISVdBVEVSKDB4NCk7CisJfQorCVdSRUczMihTUV9NU19GSUZPX1NJWkVTLCB0bXApOworCisJLyogU1FfQ09ORklHLCBTUV9HUFJfUkVTT1VSQ0VfTUdNVCwgU1FfVEhSRUFEX1JFU09VUkNFX01HTVQsIFNRX1NUQUNLX1JFU09VUkNFX01HTVQKKwkgKiBzaG91bGQgYmUgYWRqdXN0ZWQgYXMgbmVlZGVkIGJ5IHRoZSAyRC8zRCBkcml2ZXJzLiAgVGhpcyBqdXN0IHNldHMgZGVmYXVsdCB2YWx1ZXMKKwkgKi8KKwlzcV9jb25maWcgPSBSUkVHMzIoU1FfQ09ORklHKTsKKwlzcV9jb25maWcgJj0gfihQU19QUklPKDMpIHwKKwkJICAgICAgIFZTX1BSSU8oMykgfAorCQkgICAgICAgR1NfUFJJTygzKSB8CisJCSAgICAgICBFU19QUklPKDMpKTsKKwlzcV9jb25maWcgfD0gKERYOV9DT05TVFMgfAorCQkgICAgICBWQ19FTkFCTEUgfAorCQkgICAgICBQU19QUklPKDApIHwKKwkJICAgICAgVlNfUFJJTygxKSB8CisJCSAgICAgIEdTX1BSSU8oMikgfAorCQkgICAgICBFU19QUklPKDMpKTsKKworCWlmICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1I2MDApIHsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfR1BSUygxMjQpIHwKKwkJCQkJICBOVU1fVlNfR1BSUygxMjQpIHwKKwkJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyg0KSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMoMCkgfAorCQkJCQkgIE5VTV9FU19HUFJTKDApKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMoMTM2KSB8CisJCQkJCSAgIE5VTV9WU19USFJFQURTKDQ4KSB8CisJCQkJCSAgIE5VTV9HU19USFJFQURTKDQpIHwKKwkJCQkJICAgTlVNX0VTX1RIUkVBRFMoNCkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMoMTI4KSB8CisJCQkJCSAgICBOVU1fVlNfU1RBQ0tfRU5UUklFUygxMjgpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19TVEFDS19FTlRSSUVTKDApIHwKKwkJCQkJICAgIE5VTV9FU19TVEFDS19FTlRSSUVTKDApKTsKKwl9IGVsc2UgaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAorCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJCS8qIG5vIHZlcnRleCBjYWNoZSAqLworCQlzcV9jb25maWcgJj0gflZDX0VOQUJMRTsKKworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19HUFJTKDQ0KSB8CisJCQkJCSAgTlVNX1ZTX0dQUlMoNDQpIHwKKwkJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUygyKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMoMTcpIHwKKwkJCQkJICBOVU1fRVNfR1BSUygxNykpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChOVU1fUFNfVEhSRUFEUyg3OSkgfAorCQkJCQkgICBOVU1fVlNfVEhSRUFEUyg3OCkgfAorCQkJCQkgICBOVU1fR1NfVEhSRUFEUyg0KSB8CisJCQkJCSAgIE5VTV9FU19USFJFQURTKDMxKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyg0MCkgfAorCQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMoNDApKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19TVEFDS19FTlRSSUVTKDMyKSB8CisJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUygxNikpOworCX0gZWxzZSBpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MzApIHx8CisJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjM1KSkgeworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19HUFJTKDQ0KSB8CisJCQkJCSAgTlVNX1ZTX0dQUlMoNDQpIHwKKwkJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUygyKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMoMTgpIHwKKwkJCQkJICBOVU1fRVNfR1BSUygxOCkpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChOVU1fUFNfVEhSRUFEUyg3OSkgfAorCQkJCQkgICBOVU1fVlNfVEhSRUFEUyg3OCkgfAorCQkJCQkgICBOVU1fR1NfVEhSRUFEUyg0KSB8CisJCQkJCSAgIE5VTV9FU19USFJFQURTKDMxKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyg0MCkgfAorCQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMoNDApKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19TVEFDS19FTlRSSUVTKDMyKSB8CisJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUygxNikpOworCX0gZWxzZSBpZiAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjY3MCkgeworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19HUFJTKDQ0KSB8CisJCQkJCSAgTlVNX1ZTX0dQUlMoNDQpIHwKKwkJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUygyKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMoMTcpIHwKKwkJCQkJICBOVU1fRVNfR1BSUygxNykpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChOVU1fUFNfVEhSRUFEUyg3OSkgfAorCQkJCQkgICBOVU1fVlNfVEhSRUFEUyg3OCkgfAorCQkJCQkgICBOVU1fR1NfVEhSRUFEUyg0KSB8CisJCQkJCSAgIE5VTV9FU19USFJFQURTKDMxKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMoNjQpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19TVEFDS19FTlRSSUVTKDY0KSB8CisJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUyg2NCkpOworCX0KKworCVdSRUczMihTUV9DT05GSUcsIHNxX2NvbmZpZyk7CisJV1JFRzMyKFNRX0dQUl9SRVNPVVJDRV9NR01UXzEsICBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xKTsKKwlXUkVHMzIoU1FfR1BSX1JFU09VUkNFX01HTVRfMiwgIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOworCVdSRUczMihTUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCVdSRUczMihTUV9TVEFDS19SRVNPVVJDRV9NR01UXzEsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7CisJV1JFRzMyKFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKKworCWlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFRDX09OTFkpKTsKKwl9IGVsc2UgeworCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFZDX0FORF9UQykpOworCX0KKworCS8qIE1vcmUgZGVmYXVsdCB2YWx1ZXMuIDJELzNEIGRyaXZlciBzaG91bGQgYWRqdXN0IGFzIG5lZWRlZCAqLworCVdSRUczMihQQV9TQ19BQV9TQU1QTEVfTE9DU18yUywgKFMwX1goMHhjKSB8IFMwX1koMHg0KSB8CisJCQkJCSBTMV9YKDB4NCkgfCBTMV9ZKDB4YykpKTsKKwlXUkVHMzIoUEFfU0NfQUFfU0FNUExFX0xPQ1NfNFMsIChTMF9YKDB4ZSkgfCBTMF9ZKDB4ZSkgfAorCQkJCQkgUzFfWCgweDIpIHwgUzFfWSgweDIpIHwKKwkJCQkJIFMyX1goMHhhKSB8IFMyX1koMHg2KSB8CisJCQkJCSBTM19YKDB4NikgfCBTM19ZKDB4YSkpKTsKKwlXUkVHMzIoUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QwLCAoUzBfWCgweGUpIHwgUzBfWSgweGIpIHwKKwkJCQkJICAgICBTMV9YKDB4NCkgfCBTMV9ZKDB4YykgfAorCQkJCQkgICAgIFMyX1goMHgxKSB8IFMyX1koMHg2KSB8CisJCQkJCSAgICAgUzNfWCgweGEpIHwgUzNfWSgweGUpKSk7CisJV1JFRzMyKFBBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMSwgKFM0X1goMHg2KSB8IFM0X1koMHgxKSB8CisJCQkJCSAgICAgUzVfWCgweDApIHwgUzVfWSgweDApIHwKKwkJCQkJICAgICBTNl9YKDB4YikgfCBTNl9ZKDB4NCkgfAorCQkJCQkgICAgIFM3X1goMHg3KSB8IFM3X1koMHg4KSkpOworCisJV1JFRzMyKFZHVF9TVFJNT1VUX0VOLCAwKTsKKwl0bXAgPSByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgKiAxNjsKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SVjYxMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JWNjIwOgorCQl0bXAgKz0gMzI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDoKKwkJdG1wICs9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmICh0bXAgPiAyNTYpIHsKKwkJdG1wID0gMjU2OworCX0KKwlXUkVHMzIoVkdUX0VTX1BFUl9HUywgMTI4KTsKKwlXUkVHMzIoVkdUX0dTX1BFUl9FUywgdG1wKTsKKwlXUkVHMzIoVkdUX0dTX1BFUl9WUywgMik7CisJV1JFRzMyKFZHVF9HU19WRVJURVhfUkVVU0UsIDE2KTsKKworCS8qIG1vcmUgZGVmYXVsdCB2YWx1ZXMuIDJELzNEIGRyaXZlciBzaG91bGQgYWRqdXN0IGFzIG5lZWRlZCAqLworCVdSRUczMihQQV9TQ19MSU5FX1NUSVBQTEVfU1RBVEUsIDApOworCVdSRUczMihWR1RfU1RSTU9VVF9FTiwgMCk7CisJV1JFRzMyKFNYX01JU0MsIDApOworCVdSRUczMihQQV9TQ19NT0RFX0NOVEwsIDApOworCVdSRUczMihQQV9TQ19BQV9DT05GSUcsIDApOworCVdSRUczMihQQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVdSRUczMihTUElfSU5QVVRfWiwgMCk7CisJV1JFRzMyKFNQSV9QU19JTl9DT05UUk9MXzAsIE5VTV9JTlRFUlAoMikpOworCVdSRUczMihDQl9DT0xPUjdfRlJBRywgMCk7CisKKwkvKiBDbGVhciByZW5kZXIgYnVmZmVyIGJhc2UgYWRkcmVzc2VzICovCisJV1JFRzMyKENCX0NPTE9SMF9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1IxX0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjJfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SM19CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1I0X0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjVfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SNl9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1I3X0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjdfRlJBRywgMCk7CisKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SVjYxMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JWNjIwOgorCQl0bXAgPSBUQ19MMl9TSVpFKDgpOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MzA6CisJY2FzZSBDSElQX1JWNjM1OgorCQl0bXAgPSBUQ19MMl9TSVpFKDQpOworCQlicmVhazsKKwljYXNlIENISVBfUjYwMDoKKwkJdG1wID0gVENfTDJfU0laRSgwKSB8IEwyX0RJU0FCTEVfTEFURV9ISVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcCA9IFRDX0wyX1NJWkUoMCk7CisJCWJyZWFrOworCX0KKwlXUkVHMzIoVENfQ05UTCwgdG1wKTsKKworCXRtcCA9IFJSRUczMihIRFBfSE9TVF9QQVRIX0NOVEwpOworCVdSRUczMihIRFBfSE9TVF9QQVRIX0NOVEwsIHRtcCk7CisKKwl0bXAgPSBSUkVHMzIoQVJCX1BPUCk7CisJdG1wIHw9IEVOQUJMRV9UQzEyODsKKwlXUkVHMzIoQVJCX1BPUCwgdG1wKTsKKworCVdSRUczMihQQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCVdSRUczMihQQV9DTF9FTkhBTkNFLCAoQ0xJUF9WVFhfUkVPUkRFUl9FTkEgfAorCQkJICAgICAgIE5VTV9DTElQX1NFUSgzKSkpOworCVdSRUczMihQQV9TQ19FTkhBTkNFLCBGT1JDRV9FT1ZfTUFYX0NMS19DTlQoNDA5NSkpOworfQorCisKIC8qCiAgKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKICAqLwotdWludDMyX3QgcjYwMF9wY2llcF9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpCit1MzIgcjYwMF9wY2llcF9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnKQogewotCXVpbnQzMl90IHI7CisJdTMyIHI7CiAKLQlXUkVHMzIoUjYwMF9QQ0lFX1BPUlRfSU5ERVgsICgocmVnKSAmIDB4ZmYpKTsKLQkodm9pZClSUkVHMzIoUjYwMF9QQ0lFX1BPUlRfSU5ERVgpOwotCXIgPSBSUkVHMzIoUjYwMF9QQ0lFX1BPUlRfREFUQSk7CisJV1JFRzMyKFBDSUVfUE9SVF9JTkRFWCwgKChyZWcpICYgMHhmZikpOworCSh2b2lkKVJSRUczMihQQ0lFX1BPUlRfSU5ERVgpOworCXIgPSBSUkVHMzIoUENJRV9QT1JUX0RBVEEpOwogCXJldHVybiByOwogfQogCi12b2lkIHI2MDBfcGNpZXBfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KQordm9pZCByNjAwX3BjaWVwX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KQogewotCVdSRUczMihSNjAwX1BDSUVfUE9SVF9JTkRFWCwgKChyZWcpICYgMHhmZikpOwotCSh2b2lkKVJSRUczMihSNjAwX1BDSUVfUE9SVF9JTkRFWCk7Ci0JV1JFRzMyKFI2MDBfUENJRV9QT1JUX0RBVEEsICh2KSk7Ci0JKHZvaWQpUlJFRzMyKFI2MDBfUENJRV9QT1JUX0RBVEEpOworCVdSRUczMihQQ0lFX1BPUlRfSU5ERVgsICgocmVnKSAmIDB4ZmYpKTsKKwkodm9pZClSUkVHMzIoUENJRV9QT1JUX0lOREVYKTsKKwlXUkVHMzIoUENJRV9QT1JUX0RBVEEsICh2KSk7CisJKHZvaWQpUlJFRzMyKFBDSUVfUE9SVF9EQVRBKTsKK30KKworCisvKgorICogQ1AgJiBSaW5nCisgKi8KK3ZvaWQgcjYwMF9jcF9zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihSXzAwODZEOF9DUF9NRV9DTlRMLCBTXzAwODZEOF9DUF9NRV9IQUxUKDEpKTsKK30KKworaW50IHI2MDBfY3BfaW5pdF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwljb25zdCBjaGFyICpjaGlwX25hbWU7CisJc2l6ZV90IHBmcF9yZXFfc2l6ZSwgbWVfcmVxX3NpemU7CisJY2hhciBmd19uYW1lWzMwXTsKKwlpbnQgZXJyOworCisJRFJNX0RFQlVHKCJcbiIpOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJhZGVvbl9jcCIsIDAsIE5VTEwsIDApOworCWVyciA9IElTX0VSUihwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFkZW9uX2NwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SNjAwOiBjaGlwX25hbWUgPSAiUjYwMCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjYxMDogY2hpcF9uYW1lID0gIlJWNjEwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNjMwOiBjaGlwX25hbWUgPSAiUlY2MzAiOyBicmVhazsKKwljYXNlIENISVBfUlY2MjA6IGNoaXBfbmFtZSA9ICJSVjYyMCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjYzNTogY2hpcF9uYW1lID0gIlJWNjM1IjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNjcwOiBjaGlwX25hbWUgPSAiUlY2NzAiOyBicmVhazsKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JTODgwOiBjaGlwX25hbWUgPSAiUlM3ODAiOyBicmVhazsKKwljYXNlIENISVBfUlY3NzA6IGNoaXBfbmFtZSA9ICJSVjc3MCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjczMDoKKwljYXNlIENISVBfUlY3NDA6IGNoaXBfbmFtZSA9ICJSVjczMCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjcxMDogY2hpcF9uYW1lID0gIlJWNzEwIjsgYnJlYWs7CisJZGVmYXVsdDogQlVHKCk7CisJfQorCisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKSB7CisJCXBmcF9yZXFfc2l6ZSA9IFI3MDBfUEZQX1VDT0RFX1NJWkUgKiA0OworCQltZV9yZXFfc2l6ZSA9IFI3MDBfUE00X1VDT0RFX1NJWkUgKiA0OworCX0gZWxzZSB7CisJCXBmcF9yZXFfc2l6ZSA9IFBGUF9VQ09ERV9TSVpFICogNDsKKwkJbWVfcmVxX3NpemUgPSBQTTRfVUNPREVfU0laRSAqIDEyOworCX0KKworCURSTV9JTkZPKCJMb2FkaW5nICVzIENQIE1pY3JvY29kZVxuIiwgY2hpcF9uYW1lKTsKKworCXNucHJpbnRmKGZ3X25hbWUsIHNpemVvZihmd19uYW1lKSwgInJhZGVvbi8lc19wZnAuYmluIiwgY2hpcF9uYW1lKTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZyZGV2LT5wZnBfZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmIChyZGV2LT5wZnBfZnctPnNpemUgIT0gcGZwX3JlcV9zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInI2MDBfY3A6IEJvZ3VzIGxlbmd0aCAlenUgaW4gZmlybXdhcmUgXCIlc1wiXG4iLAorCQkgICAgICAgcmRldi0+cGZwX2Z3LT5zaXplLCBmd19uYW1lKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJc25wcmludGYoZndfbmFtZSwgc2l6ZW9mKGZ3X25hbWUpLCAicmFkZW9uLyVzX21lLmJpbiIsIGNoaXBfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcmRldi0+bWVfZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmIChyZGV2LT5tZV9mdy0+c2l6ZSAhPSBtZV9yZXFfc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyNjAwX2NwOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIHJkZXYtPm1lX2Z3LT5zaXplLCBmd19uYW1lKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CitvdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJyNjAwX2NwOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQkgICAgICAgZndfbmFtZSk7CisJCXJlbGVhc2VfZmlybXdhcmUocmRldi0+cGZwX2Z3KTsKKwkJcmRldi0+cGZwX2Z3ID0gTlVMTDsKKwkJcmVsZWFzZV9maXJtd2FyZShyZGV2LT5tZV9mdyk7CisJCXJkZXYtPm1lX2Z3ID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByNjAwX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKKwlpbnQgaTsKKworCWlmICghcmRldi0+bWVfZncgfHwgIXJkZXYtPnBmcF9mdykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyNjAwX2NwX3N0b3AocmRldik7CisKKwlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgUkJfQkxLU1ooMTUpIHwgUkJfQlVGU1ooMykpOworCisJLyogUmVzZXQgY3AgKi8KKwlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JFU0VUX0NQKTsKKwlSUkVHMzIoR1JCTV9TT0ZUX1JFU0VUKTsKKwltZGVsYXkoMTUpOworCVdSRUczMihHUkJNX1NPRlRfUkVTRVQsIDApOworCisJV1JFRzMyKENQX01FX1JBTV9XQUREUiwgMCk7CisKKwlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKXJkZXYtPm1lX2Z3LT5kYXRhOworCVdSRUczMihDUF9NRV9SQU1fV0FERFIsIDApOworCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRSAqIDM7IGkrKykKKwkJV1JFRzMyKENQX01FX1JBTV9EQVRBLAorCQkgICAgICAgYmUzMl90b19jcHVwKGZ3X2RhdGErKykpOworCisJZndfZGF0YSA9IChjb25zdCBfX2JlMzIgKilyZGV2LT5wZnBfZnctPmRhdGE7CisJV1JFRzMyKENQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJV1JFRzMyKENQX1BGUF9VQ09ERV9EQVRBLAorCQkgICAgICAgYmUzMl90b19jcHVwKGZ3X2RhdGErKykpOworCisJV1JFRzMyKENQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwlXUkVHMzIoQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwlXUkVHMzIoQ1BfTUVfUkFNX1JBRERSLCAwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfY3Bfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisJdWludDMyX3QgY3BfbWU7CisKKwlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCA3KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfTUVfSU5JVElBTElaRSwgNSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4MSk7CisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUlY3NzApIHsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgzKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgcmRldi0+Y29uZmlnLnI2MDAubWF4X2h3X2NvbnRleHRzIC0gMSk7CisJfSBlbHNlIHsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9od19jb250ZXh0cyAtIDEpOworCX0KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzX01FX0lOSVRJQUxJWkVfREVWSUNFX0lEKDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOworCisJY3BfbWUgPSAweGZmOworCVdSRUczMihSXzAwODZEOF9DUF9NRV9DTlRMLCBjcF9tZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByNjAwX2NwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCXUzMiByYl9idWZzejsKKwlpbnQgcjsKKworCS8qIFJlc2V0IGNwICovCisJV1JFRzMyKEdSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9DUCk7CisJUlJFRzMyKEdSQk1fU09GVF9SRVNFVCk7CisJbWRlbGF5KDE1KTsKKwlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCS8qIFNldCByaW5nIGJ1ZmZlciBzaXplICovCisJcmJfYnVmc3ogPSBkcm1fb3JkZXIocmRldi0+Y3AucmluZ19zaXplIC8gOCk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJV1JFRzMyKENQX1JCX0NOVEwsIEJVRl9TV0FQXzMyQklUIHwgUkJfTk9fVVBEQVRFIHwKKwkJKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOworI2Vsc2UKKwlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOworI2VuZGlmCisJV1JFRzMyKENQX1NFTV9XQUlUX1RJTUVSLCAweDQpOworCisJLyogU2V0IHRoZSB3cml0ZSBwb2ludGVyIGRlbGF5ICovCisJV1JFRzMyKENQX1JCX1dQVFJfREVMQVksIDApOworCisJLyogSW5pdGlhbGl6ZSB0aGUgcmluZyBidWZmZXIncyByZWFkIGFuZCB3cml0ZSBwb2ludGVycyAqLworCXRtcCA9IFJSRUczMihDUF9SQl9DTlRMKTsKKwlXUkVHMzIoQ1BfUkJfQ05UTCwgdG1wIHwgUkJfUlBUUl9XUl9FTkEpOworCVdSRUczMihDUF9SQl9SUFRSX1dSLCAwKTsKKwlXUkVHMzIoQ1BfUkJfV1BUUiwgMCk7CisJV1JFRzMyKENQX1JCX1JQVFJfQUREUiwgcmRldi0+Y3AuZ3B1X2FkZHIgJiAweEZGRkZGRkZGKTsKKwlXUkVHMzIoQ1BfUkJfUlBUUl9BRERSX0hJLCB1cHBlcl8zMl9iaXRzKHJkZXYtPmNwLmdwdV9hZGRyKSk7CisJbWRlbGF5KDEpOworCVdSRUczMihDUF9SQl9DTlRMLCB0bXApOworCisJV1JFRzMyKENQX1JCX0JBU0UsIHJkZXYtPmNwLmdwdV9hZGRyID4+IDgpOworCVdSRUczMihDUF9ERUJVRywgKDEgPDwgMjcpIHwgKDEgPDwgMjgpKTsKKworCXJkZXYtPmNwLnJwdHIgPSBSUkVHMzIoQ1BfUkJfUlBUUik7CisJcmRldi0+Y3Aud3B0ciA9IFJSRUczMihDUF9SQl9XUFRSKTsKKworCXI2MDBfY3Bfc3RhcnQocmRldik7CisJcmRldi0+Y3AucmVhZHkgPSB0cnVlOworCXIgPSByYWRlb25fcmluZ190ZXN0KHJkZXYpOworCWlmIChyKSB7CisJCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCByNjAwX2NwX2NvbW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlXUkVHMzIoQ1BfUkJfV1BUUiwgcmRldi0+Y3Aud3B0cik7CisJKHZvaWQpUlJFRzMyKENQX1JCX1dQVFIpOworfQorCit2b2lkIHI2MDBfcmluZ19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpCit7CisJdTMyIHJiX2J1ZnN6OworCisJLyogQWxpZ24gcmluZyBzaXplICovCisJcmJfYnVmc3ogPSBkcm1fb3JkZXIocmluZ19zaXplIC8gOCk7CisJcmluZ19zaXplID0gKDEgPDwgKHJiX2J1ZnN6ICsgMSkpICogNDsKKwlyZGV2LT5jcC5yaW5nX3NpemUgPSByaW5nX3NpemU7CisJcmRldi0+Y3AuYWxpZ25fbWFzayA9IDE2IC0gMTsKK30KKworCisvKgorICogR1BVIHNjcmF0Y2ggcmVnaXN0ZXJzIGhlbHBlcnMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgcjYwMF9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IGk7CisKKwlyZGV2LT5zY3JhdGNoLm51bV9yZWcgPSA3OworCWZvciAoaSA9IDA7IGkgPCByZGV2LT5zY3JhdGNoLm51bV9yZWc7IGkrKykgeworCQlyZGV2LT5zY3JhdGNoLmZyZWVbaV0gPSB0cnVlOworCQlyZGV2LT5zY3JhdGNoLnJlZ1tpXSA9IFNDUkFUQ0hfUkVHMCArIChpICogNCk7CisJfQorfQorCitpbnQgcjYwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdWludDMyX3Qgc2NyYXRjaDsKKwl1aW50MzJfdCB0bXAgPSAwOworCXVuc2lnbmVkIGk7CisJaW50IHI7CisKKwlyID0gcmFkZW9uX3NjcmF0Y2hfZ2V0KHJkZXYsICZzY3JhdGNoKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGdldCBzY3JhdGNoIHJlZyAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlXUkVHMzIoc2NyYXRjaCwgMHhDQUZFREVBRCk7CisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgMyk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGNwIGZhaWxlZCB0byBsb2NrIHJpbmcgKCVkKS5cbiIsIHIpOworCQlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHNjcmF0Y2gpOworCQlyZXR1cm4gcjsKKwl9CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKChzY3JhdGNoIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweERFQURCRUVGKTsKKwlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOworCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQl0bXAgPSBSUkVHMzIoc2NyYXRjaCk7CisJCWlmICh0bXAgPT0gMHhERUFEQkVFRikKKwkJCWJyZWFrOworCQlEUk1fVURFTEFZKDEpOworCX0KKwlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgeworCQlEUk1fSU5GTygicmluZyB0ZXN0IHN1Y2NlZWRlZCBpbiAlZCB1c2Vjc1xuIiwgaSk7CisJfSBlbHNlIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IHJpbmcgdGVzdCBmYWlsZWQgKHNjcmF0Y2goMHglMDRYKT0weCUwOFgpXG4iLAorCQkJICBzY3JhdGNoLCB0bXApOworCQlyID0gLUVJTlZBTDsKKwl9CisJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIFdyaXRlYmFjaworICovCitpbnQgcjYwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJaWYgKHJkZXYtPndiLndiX29iaiA9PSBOVUxMKSB7CisJCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCA0MDk2LAorCQkJCQkgdHJ1ZSwKKwkJCQkJIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKKwkJCQkJIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLAorCQkJCSAgICAgIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKKwkJCQkgICAgICAmcmRldi0+d2IuZ3B1X2FkZHIpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBwaW4gV0IgYnVmZmVyICglZCkuXG4iLCByKTsKKwkJCXJldHVybiByOworCQl9CisJCXIgPSByYWRlb25fb2JqZWN0X2ttYXAocmRldi0+d2Iud2Jfb2JqLCAodm9pZCAqKikmcmRldi0+d2Iud2IpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBtYXAgV0IgYnVmZmVyICglZCkuXG4iLCByKTsKKwkJCXJldHVybiByOworCQl9CisJfQorCVdSRUczMihTQ1JBVENIX0FERFIsIChyZGV2LT53Yi5ncHVfYWRkciA+PiA4KSAmIDB4RkZGRkZGRkYpOworCVdSRUczMihDUF9SQl9SUFRSX0FERFIsIChyZGV2LT53Yi5ncHVfYWRkciArIDEwMjQpICYgMHhGRkZGRkZGQyk7CisJV1JFRzMyKENQX1JCX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhyZGV2LT53Yi5ncHVfYWRkciArIDEwMjQpICYgMHhGRik7CisJV1JFRzMyKFNDUkFUQ0hfVU1TSywgMHhmZik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyZGV2LT53Yi53Yl9vYmopIHsKKwkJcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+d2Iud2Jfb2JqKTsKKwkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT53Yi53Yl9vYmopOworCQlyYWRlb25fb2JqZWN0X3VucmVmKCZyZGV2LT53Yi53Yl9vYmopOworCQlyZGV2LT53Yi53YiA9IE5VTEw7CisJCXJkZXYtPndiLndiX29iaiA9IE5VTEw7CisJfQorfQorCisKKy8qCisgKiBDUworICovCit2b2lkIHI2MDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKK3sKKwkvKiBFbWl0IGZlbmNlIHNlcXVlbmNlICYgZmlyZSBJUlEgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoKHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZmVuY2UtPnNlcSk7Cit9CisKK2ludCByNjAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkgIHVpbnQ2NF90IHNyY19vZmZzZXQsCisJCSAgdWludDY0X3QgZHN0X29mZnNldCwKKwkJICB1bnNpZ25lZCBudW1fcGFnZXMsCisJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCit7CisJLyogRklYTUU6IGltcGxlbWVudCAqLworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9jb3B5X2JsaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCSAgIHVpbnQ2NF90IHNyY19vZmZzZXQsIHVpbnQ2NF90IGRzdF9vZmZzZXQsCisJCSAgIHVuc2lnbmVkIG51bV9wYWdlcywgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCit7CisJcjYwMF9ibGl0X3ByZXBhcmVfY29weShyZGV2LCBudW1fcGFnZXMgKiA0MDk2KTsKKwlyNjAwX2ttc19ibGl0X2NvcHkocmRldiwgc3JjX29mZnNldCwgZHN0X29mZnNldCwgbnVtX3BhZ2VzICogNDA5Nik7CisJcjYwMF9ibGl0X2RvbmVfY29weShyZGV2LCBmZW5jZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmV0dXJuIDA7Cit9CisKK2ludCByNjAwX3NldF9zdXJmYWNlX3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHJlZywKKwkJCSB1aW50MzJfdCB0aWxpbmdfZmxhZ3MsIHVpbnQzMl90IHBpdGNoLAorCQkJIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgb2JqX3NpemUpCit7CisJLyogRklYTUU6IGltcGxlbWVudCAqLworCXJldHVybiAwOworfQorCit2b2lkIHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcpCit7CisJLyogRklYTUU6IGltcGxlbWVudCAqLworfQorCisKK2Jvb2wgcjYwMF9jYXJkX3Bvc3RlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1aW50MzJfdCByZWc7CisKKwkvKiBmaXJzdCBjaGVjayBDUlRDcyAqLworCXJlZyA9IFJSRUczMihEMUNSVENfQ09OVFJPTCkgfAorCQlSUkVHMzIoRDJDUlRDX0NPTlRST0wpOworCWlmIChyZWcgJiBDUlRDX0VOKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHRoZW4gY2hlY2sgTUVNX1NJWkUsIGluIGNhc2UgdGhlIGNydGNzIGFyZSBvZmYgKi8KKwlpZiAoUlJFRzMyKENPTkZJR19NRU1TSVpFKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCByNjAwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyNjAwX2dwdV9yZXNldChyZGV2KTsKKwlyNjAwX21jX3Jlc3VtZShyZGV2KTsKKwlyID0gcjYwMF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyNjAwX2dwdV9pbml0KHJkZXYpOworCisJciA9IHJhZGVvbl9vYmplY3RfcGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLAorCQkJICAgICAgJnJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBibGl0IG9iamVjdCAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKworCXIgPSByYWRlb25fcmluZ19pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByNjAwX2NwX2xvYWRfbWljcm9jb2RlKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcjYwMF9jcF9yZXN1bWUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByNjAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiAwOworfQorCit2b2lkIHI2MDBfdmdhX3NldF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBzdGF0ZSkKK3sKKwl1aW50MzJfdCB0ZW1wOworCisJdGVtcCA9IFJSRUczMihDT05GSUdfQ05UTCk7CisJaWYgKHN0YXRlID09IGZhbHNlKSB7CisJCXRlbXAgJj0gfigxPDwwKTsKKwkJdGVtcCB8PSAoMTw8MSk7CisJfSBlbHNlIHsKKwkJdGVtcCAmPSB+KDE8PDEpOworCX0KKwlXUkVHMzIoQ09ORklHX0NOVEwsIHRlbXApOworfQorCitpbnQgcjYwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLworCX0KKwkvKiBwb3N0IGNhcmQgKi8KKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCX0gZWxzZSB7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOworCWlmIChyKSB7CisJCXJldHVybiByOworCX0KKworCXIgPSByNjAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyNjAwIHN0YXJ0dXAgZmFpbGVkIG9uIHJlc3VtZVxuIik7CisJCXJldHVybiByOworCX0KKworCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiByOworfQorCisKK2ludCByNjAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCisJcjYwMF9jcF9zdG9wKHJkZXYpOworCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisKKwlyNjAwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KKwlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKKwlyZXR1cm4gMDsKK30KKworLyogUGxhbiBpcyB0byBtb3ZlIGluaXRpYWxpemF0aW9uIGluIHRoYXQgZnVuY3Rpb24gYW5kIHVzZQorICogaGVscGVyIGZ1bmN0aW9uIHNvIHRoYXQgcmFkZW9uX2RldmljZV9pbml0IHByZXR0eSBtdWNoCisgKiBkbyBub3RoaW5nIG1vcmUgdGhhbiBjYWxsaW5nIGFzaWMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMKKyAqIHNob3VsZCBhbHNvIGFsbG93IHRvIHJlbW92ZSBhIGJ1bmNoIG9mIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBsaWtlIHZyYW1faW5mby4KKyAqLworaW50IHI2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJkZXYtPm5ld19pbml0X3BhdGggPSB0cnVlOworCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlpZiAocjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChyZGV2KSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIG1jICFcbiIpOworCX0KKwkvKiBUaGlzIGRvbid0IGRvIG11Y2ggKi8KKwlyID0gcmFkZW9uX2dlbV9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBSZWFkIEJJT1MgKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBNdXN0IGJlIGFuIEFUT01CSU9TICovCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpCisJCXJldHVybiAtRUlOVkFMOworCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogUG9zdCBjYXJkIGlmIG5lY2Vzc2FyeSAqLworCWlmICghcjYwMF9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLworCXI2MDBfc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcjYwMF9tY19pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJCS8qIFJldHJ5IHdpdGggZGlzYWJsaW5nIEFHUCAqLworCQkJcjYwMF9maW5pKHJkZXYpOworCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJCQlyZXR1cm4gcjYwMF9pbml0KHJkZXYpOworCQl9CisJCXJldHVybiByOworCX0KKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJkZXYtPmNwLnJpbmdfb2JqID0gTlVMTDsKKwlyNjAwX3JpbmdfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisKKwlpZiAoIXJkZXYtPm1lX2Z3IHx8ICFyZGV2LT5wZnBfZncpIHsKKwkJciA9IHI2MDBfY3BfaW5pdF9taWNyb2NvZGUocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIVxuIik7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0KKworCXIgPSByNjAwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCBibGl0dGVyICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCisJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KKwkJCXI2MDBfZmluaShyZGV2KTsKKwkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKKwkJfQorCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CisJCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOworCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCQl9CisJCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOworCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCQl9CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHI2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBTdXNwZW5kIG9wZXJhdGlvbnMgKi8KKwlyNjAwX3N1c3BlbmQocmRldik7CisKKwlyNjAwX2JsaXRfZmluaShyZGV2KTsKKwlyYWRlb25fcmluZ19maW5pKHJkZXYpOworCXI2MDBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2dlbV9maW5pKHJkZXYpOworCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKKwlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7CisjaWYgX19PU19IQVNfQUdQCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKKwkJcmFkZW9uX2FncF9maW5pKHJkZXYpOworI2VuZGlmCisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCisJCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWVsc2UKKwkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKKwlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOworfQorCisKKy8qCisgKiBDUyBzdHVmZgorICovCit2b2lkIHI2MDBfcmluZ19pYl9leGVjdXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYikKK3sKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5ncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOworfQorCitpbnQgcjYwMF9pYl90ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25faWIgKmliOworCXVpbnQzMl90IHNjcmF0Y2g7CisJdWludDMyX3QgdG1wID0gMDsKKwl1bnNpZ25lZCBpOworCWludCByOworCisJciA9IHJhZGVvbl9zY3JhdGNoX2dldChyZGV2LCAmc2NyYXRjaCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBnZXQgc2NyYXRjaCByZWcgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJV1JFRzMyKHNjcmF0Y2gsIDB4Q0FGRURFQUQpOworCXIgPSByYWRlb25faWJfZ2V0KHJkZXYsICZpYik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBnZXQgaWIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJaWItPnB0clswXSA9IFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSk7CisJaWItPnB0clsxXSA9ICgoc2NyYXRjaCAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlpYi0+cHRyWzJdID0gMHhERUFEQkVFRjsKKwlpYi0+cHRyWzNdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzRdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzVdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzZdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzddID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzhdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzldID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzEwXSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0clsxMV0gPSBQQUNLRVQyKDApOworCWliLT5wdHJbMTJdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzEzXSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0clsxNF0gPSBQQUNLRVQyKDApOworCWliLT5wdHJbMTVdID0gUEFDS0VUMigwKTsKKwlpYi0+bGVuZ3RoX2R3ID0gMTY7CisJciA9IHJhZGVvbl9pYl9zY2hlZHVsZShyZGV2LCBpYik7CisJaWYgKHIpIHsKKwkJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKKwkJcmFkZW9uX2liX2ZyZWUocmRldiwgJmliKTsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBzY2hlZHVsZSBpYiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcmFkZW9uX2ZlbmNlX3dhaXQoaWItPmZlbmNlLCBmYWxzZSk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZlbmNlIHdhaXQgZmFpbGVkICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQl0bXAgPSBSUkVHMzIoc2NyYXRjaCk7CisJCWlmICh0bXAgPT0gMHhERUFEQkVFRikKKwkJCWJyZWFrOworCQlEUk1fVURFTEFZKDEpOworCX0KKwlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgeworCQlEUk1fSU5GTygiaWIgdGVzdCBzdWNjZWVkZWQgaW4gJXUgdXNlY3NcbiIsIGkpOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBpYiB0ZXN0IGZhaWxlZCAoc3JhY3RoKDB4JTA0WCk9MHglMDhYKVxuIiwKKwkJCSAgc2NyYXRjaCwgdG1wKTsKKwkJciA9IC1FSU5WQUw7CisJfQorCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgc2NyYXRjaCk7CisJcmFkZW9uX2liX2ZyZWUocmRldiwgJmliKTsKKwlyZXR1cm4gcjsKK30KKworCisKKworLyoKKyAqIERlYnVnZnMgaW5mbworICovCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKK3N0YXRpYyBpbnQgcjYwMF9kZWJ1Z2ZzX2NwX3JpbmdfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgcmRwLCB3ZHA7CisJdW5zaWduZWQgY291bnQsIGksIGo7CisKKwlyYWRlb25fcmluZ19mcmVlX3NpemUocmRldik7CisJcmRwID0gUlJFRzMyKENQX1JCX1JQVFIpOworCXdkcCA9IFJSRUczMihDUF9SQl9XUFRSKTsKKwljb3VudCA9IChyZHAgKyByZGV2LT5jcC5yaW5nX3NpemUgLSB3ZHApICYgcmRldi0+Y3AucHRyX21hc2s7CisJc2VxX3ByaW50ZihtLCAiQ1BfU1RBVCAweCUwOHhcbiIsIFJSRUczMihDUF9TVEFUKSk7CisJc2VxX3ByaW50ZihtLCAiQ1BfUkJfV1BUUiAweCUwOHhcbiIsIHdkcCk7CisJc2VxX3ByaW50ZihtLCAiQ1BfUkJfUlBUUiAweCUwOHhcbiIsIHJkcCk7CisJc2VxX3ByaW50ZihtLCAiJXUgZnJlZSBkd29yZHMgaW4gcmluZ1xuIiwgcmRldi0+Y3AucmluZ19mcmVlX2R3KTsKKwlzZXFfcHJpbnRmKG0sICIldSBkd29yZHMgaW4gcmluZ1xuIiwgY291bnQpOworCWZvciAoaiA9IDA7IGogPD0gY291bnQ7IGorKykgeworCQlpID0gKHJkcCArIGopICYgcmRldi0+Y3AucHRyX21hc2s7CisJCXNlcV9wcmludGYobSwgInJbJTA0ZF09MHglMDh4XG4iLCBpLCByZGV2LT5jcC5yaW5nW2ldKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJRFJFRzMyX1NZUyhtLCByZGV2LCBSXzAwMEU1MF9TUkJNX1NUQVRVUyk7CisJRFJFRzMyX1NZUyhtLCByZGV2LCBWTV9MMl9TVEFUVVMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcjYwMF9tY19pbmZvX2xpc3RbXSA9IHsKKwl7InI2MDBfbWNfaW5mbyIsIHI2MDBfZGVidWdmc19tY19pbmZvLCAwLCBOVUxMfSwKKwl7InI2MDBfcmluZ19pbmZvIiwgcjYwMF9kZWJ1Z2ZzX2NwX3JpbmdfaW5mbywgMCwgTlVMTH0sCit9OworI2VuZGlmCisKK2ludCByNjAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcjYwMF9tY19pbmZvX2xpc3QsIEFSUkFZX1NJWkUocjYwMF9tY19pbmZvX2xpc3QpKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODhlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCkBAIC0wLDAgKzEsODUwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgIEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJtLmgiCisjaW5jbHVkZSAicmFkZW9uX2Rydi5oIgorCisjaW5jbHVkZSAicjYwMF9ibGl0X3NoYWRlcnMuaCIKKworI2RlZmluZSBESV9QVF9SRUNUTElTVCAgICAgICAgMHgxMQorI2RlZmluZSBESV9JTkRFWF9TSVpFXzE2X0JJVCAgMHgwCisjZGVmaW5lIERJX1NSQ19TRUxfQVVUT19JTkRFWCAweDIKKworI2RlZmluZSBGTVRfOCAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIEZNVF81XzZfNSAgICAgICAgICAgICAweDgKKyNkZWZpbmUgRk1UXzhfOF84XzggICAgICAgICAgIDB4MWEKKyNkZWZpbmUgQ09MT1JfOCAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBDT0xPUl81XzZfNSAgICAgICAgICAgMHg4CisjZGVmaW5lIENPTE9SXzhfOF84XzggICAgICAgICAweDFhCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X3JlbmRlcl90YXJnZXQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgZm9ybWF0LCBpbnQgdywgaW50IGgsIHU2NCBncHVfYWRkcikKK3sKKwl1MzIgY2JfY29sb3JfaW5mbzsKKwlpbnQgcGl0Y2gsIHNsaWNlOworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCWggPSAoaCArIDcpICYgfjc7CisJaWYgKGggPCA4KQorCQloID0gODsKKworCWNiX2NvbG9yX2luZm8gPSAoKGZvcm1hdCA8PCAyKSB8ICgxIDw8IDI3KSk7CisJcGl0Y2ggPSAodyAvIDgpIC0gMTsKKwlzbGljZSA9ICgodyAqIGgpIC8gNjQpIC0gMTsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1I2MDApICYmCisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA8IENISVBfUlY3NzApKSB7CisJCUJFR0lOX1JJTkcoMjEgKyAyKTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCQlPVVRfUklORygoUjYwMF9DQl9DT0xPUjBfQkFTRSAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJCU9VVF9SSU5HKGdwdV9hZGRyID4+IDgpOworCQlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU1VSRkFDRV9CQVNFX1VQREFURSwgMCkpOworCQlPVVRfUklORygyIDw8IDApOworCX0gZWxzZSB7CisJCUJFR0lOX1JJTkcoMjEpOworCQlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJCU9VVF9SSU5HKChSNjAwX0NCX0NPTE9SMF9CQVNFIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwkJT1VUX1JJTkcoZ3B1X2FkZHIgPj4gOCk7CisJfQorCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX0NCX0NPTE9SMF9TSVpFIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygocGl0Y2ggPDwgMCkgfCAoc2xpY2UgPDwgMTApKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlPVVRfUklORygoUjYwMF9DQl9DT0xPUjBfVklFVyAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoMCk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfQ0JfQ09MT1IwX0lORk8gLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKGNiX2NvbG9yX2luZm8pOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX0NCX0NPTE9SMF9USUxFIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygwKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlPVVRfUklORygoUjYwMF9DQl9DT0xPUjBfRlJBRyAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoMCk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfQ0JfQ09MT1IwX01BU0sgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKDApOworCisJQURWQU5DRV9SSU5HKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3Bfc2V0X3N1cmZhY2Vfc3luYyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCisJCSAgICB1MzIgc3luY190eXBlLCB1MzIgc2l6ZSwgdTY0IG1jX2FkZHIpCit7CisJdTMyIGNwX2NvaGVyX3NpemU7CisJUklOR19MT0NBTFM7CisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKHNpemUgPT0gMHhmZmZmZmZmZikKKwkJY3BfY29oZXJfc2l6ZSA9IDB4ZmZmZmZmZmY7CisJZWxzZQorCQljcF9jb2hlcl9zaXplID0gKChzaXplICsgMjU1KSA+PiA4KTsKKworCUJFR0lOX1JJTkcoNSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NVUkZBQ0VfU1lOQywgMykpOworCU9VVF9SSU5HKHN5bmNfdHlwZSk7CisJT1VUX1JJTkcoY3BfY29oZXJfc2l6ZSk7CisJT1VUX1JJTkcoKG1jX2FkZHIgPj4gOCkpOworCU9VVF9SSU5HKDEwKTsgLyogcG9sbCBpbnRlcnZhbCAqLworCUFEVkFOQ0VfUklORygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9zaGFkZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1NjQgZ3B1X2FkZHI7CisJaW50IGk7CisJdTMyICp2cywgKnBzOworCXVpbnQzMl90IHNxX3BnbV9yZXNvdXJjZXM7CisJUklOR19MT0NBTFM7CisJRFJNX0RFQlVHKCJcbiIpOworCisJLyogbG9hZCBzaGFkZXJzICovCisJdnMgPSAodTMyICopICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArIGRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQpOworCXBzID0gKHUzMiAqKSAoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKyBkZXZfcHJpdi0+YmxpdF92Yi0+b2Zmc2V0ICsgMjU2KTsKKworCWZvciAoaSA9IDA7IGkgPCByNnh4X3ZzX3NpemU7IGkrKykKKwkJdnNbaV0gPSByNnh4X3ZzW2ldOworCWZvciAoaSA9IDA7IGkgPCByNnh4X3BzX3NpemU7IGkrKykKKwkJcHNbaV0gPSByNnh4X3BzW2ldOworCisJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgPSA1MTI7CisKKwlncHVfYWRkciA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsgZGV2X3ByaXYtPmJsaXRfdmItPm9mZnNldDsKKworCS8qIHNldHVwIHNoYWRlciByZWdzICovCisJc3FfcGdtX3Jlc291cmNlcyA9ICgxIDw8IDApOworCisJQkVHSU5fUklORyg5ICsgMTIpOworCS8qIFZTICovCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1NRX1BHTV9TVEFSVF9WUyAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoZ3B1X2FkZHIgPj4gOCk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfU1FfUEdNX1JFU09VUkNFU19WUyAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoc3FfcGdtX3Jlc291cmNlcyk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfU1FfUEdNX0NGX09GRlNFVF9WUyAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoMCk7CisKKwkvKiBQUyAqLworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlPVVRfUklORygoUjYwMF9TUV9QR01fU1RBUlRfUFMgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKChncHVfYWRkciArIDI1NikgPj4gOCk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfU1FfUEdNX1JFU09VUkNFU19QUyAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoc3FfcGdtX3Jlc291cmNlcyB8ICgxIDw8IDI4KSk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfU1FfUEdNX0VYUE9SVFNfUFMgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKDIpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1NRX1BHTV9DRl9PRkZTRVRfUFMgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKDApOworCUFEVkFOQ0VfUklORygpOworCisJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKKwkJCSAgICBSNjAwX1NIX0FDVElPTl9FTkEsIDUxMiwgZ3B1X2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF92dHhfcmVzb3VyY2UoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1NjQgZ3B1X2FkZHIpCit7CisJdWludDMyX3Qgc3FfdnR4X2NvbnN0YW50X3dvcmQyOworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCXNxX3Z0eF9jb25zdGFudF93b3JkMiA9ICgoKGdwdV9hZGRyID4+IDMyKSAmIDB4ZmYpIHwgKDE2IDw8IDgpKTsKKworCUJFR0lOX1JJTkcoOSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9SRVNPVVJDRSwgNykpOworCU9VVF9SSU5HKDB4NDYwKTsKKwlPVVRfUklORyhncHVfYWRkciAmIDB4ZmZmZmZmZmYpOworCU9VVF9SSU5HKDQ4IC0gMSk7CisJT1VUX1JJTkcoc3FfdnR4X2NvbnN0YW50X3dvcmQyKTsKKwlPVVRfUklORygxIDw8IDApOworCU9VVF9SSU5HKDApOworCU9VVF9SSU5HKDApOworCU9VVF9SSU5HKFI2MDBfU1FfVEVYX1ZUWF9WQUxJRF9CVUZGRVIgPDwgMzApOworCUFEVkFOQ0VfUklORygpOworCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjEwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3ODApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTODgwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjcxMCkpCisJCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCisJCQkJICAgIFI2MDBfVENfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKKwllbHNlCisJCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCisJCQkJICAgIFI2MDBfVkNfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfdGV4X3Jlc291cmNlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwKKwkJIGludCBmb3JtYXQsIGludCB3LCBpbnQgaCwgaW50IHBpdGNoLCB1NjQgZ3B1X2FkZHIpCit7CisJdWludDMyX3Qgc3FfdGV4X3Jlc291cmNlX3dvcmQwLCBzcV90ZXhfcmVzb3VyY2Vfd29yZDEsIHNxX3RleF9yZXNvdXJjZV93b3JkNDsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlpZiAoaCA8IDEpCisJCWggPSAxOworCisJc3FfdGV4X3Jlc291cmNlX3dvcmQwID0gKDEgPDwgMCk7CisJc3FfdGV4X3Jlc291cmNlX3dvcmQwIHw9ICgoKChwaXRjaCA+PiAzKSAtIDEpIDw8IDgpIHwKKwkJCQkgICgodyAtIDEpIDw8IDE5KSk7CisKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoZm9ybWF0IDw8IDI2KTsKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgfD0gKChoIC0gMSkgPDwgMCk7CisKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDQgPSAoKDEgPDwgMTQpIHwKKwkJCQkgKDAgPDwgMTYpIHwKKwkJCQkgKDEgPDwgMTkpIHwKKwkJCQkgKDIgPDwgMjIpIHwKKwkJCQkgKDMgPDwgMjUpKTsKKworCUJFR0lOX1JJTkcoOSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9SRVNPVVJDRSwgNykpOworCU9VVF9SSU5HKDApOworCU9VVF9SSU5HKHNxX3RleF9yZXNvdXJjZV93b3JkMCk7CisJT1VUX1JJTkcoc3FfdGV4X3Jlc291cmNlX3dvcmQxKTsKKwlPVVRfUklORyhncHVfYWRkciA+PiA4KTsKKwlPVVRfUklORyhncHVfYWRkciA+PiA4KTsKKwlPVVRfUklORyhzcV90ZXhfcmVzb3VyY2Vfd29yZDQpOworCU9VVF9SSU5HKDApOworCU9VVF9SSU5HKFI2MDBfU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFIDw8IDMwKTsKKwlBRFZBTkNFX1JJTkcoKTsKKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9zY2lzc29ycyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlCRUdJTl9SSU5HKDEyKTsKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAyKSk7CisJT1VUX1JJTkcoKFI2MDBfUEFfU0NfU0NSRUVOX1NDSVNTT1JfVEwgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKCh4MSA8PCAwKSB8ICh5MSA8PCAxNikpOworCU9VVF9SSU5HKCh4MiA8PCAwKSB8ICh5MiA8PCAxNikpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMikpOworCU9VVF9SSU5HKChSNjAwX1BBX1NDX0dFTkVSSUNfU0NJU1NPUl9UTCAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoKHgxIDw8IDApIHwgKHkxIDw8IDE2KSB8ICgxIDw8IDMxKSk7CisJT1VUX1JJTkcoKHgyIDw8IDApIHwgKHkyIDw8IDE2KSk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAyKSk7CisJT1VUX1JJTkcoKFI2MDBfUEFfU0NfV0lORE9XX1NDSVNTT1JfVEwgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKCh4MSA8PCAwKSB8ICh5MSA8PCAxNikgfCAoMSA8PCAzMSkpOworCU9VVF9SSU5HKCh4MiA8PCAwKSB8ICh5MiA8PCAxNikpOworCUFEVkFOQ0VfUklORygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RyYXdfYXV0byhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJUklOR19MT0NBTFM7CisJRFJNX0RFQlVHKCJcbiIpOworCisJQkVHSU5fUklORygxMCk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfVkdUX1BSSU1JVElWRV9UWVBFIC0gUjYwMF9TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKERJX1BUX1JFQ1RMSVNUKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9JTkRFWF9UWVBFLCAwKSk7CisJT1VUX1JJTkcoRElfSU5ERVhfU0laRV8xNl9CSVQpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX05VTV9JTlNUQU5DRVMsIDApKTsKKwlPVVRfUklORygxKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9EUkFXX0lOREVYX0FVVE8sIDEpKTsKKwlPVVRfUklORygzKTsKKwlPVVRfUklORyhESV9TUkNfU0VMX0FVVE9fSU5ERVgpOworCisJQURWQU5DRV9SSU5HKCk7CisJQ09NTUlUX1JJTkcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfZGVmYXVsdF9zdGF0ZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGk7CisJdTMyIHNxX2NvbmZpZywgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMjsKKwl1MzIgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yOworCWludCBudW1fcHNfZ3BycywgbnVtX3ZzX2dwcnMsIG51bV90ZW1wX2dwcnMsIG51bV9nc19ncHJzLCBudW1fZXNfZ3ByczsKKwlpbnQgbnVtX3BzX3RocmVhZHMsIG51bV92c190aHJlYWRzLCBudW1fZ3NfdGhyZWFkcywgbnVtX2VzX3RocmVhZHM7CisJaW50IG51bV9wc19zdGFja19lbnRyaWVzLCBudW1fdnNfc3RhY2tfZW50cmllcywgbnVtX2dzX3N0YWNrX2VudHJpZXMsIG51bV9lc19zdGFja19lbnRyaWVzOworCVJJTkdfTE9DQUxTOworCisJc3dpdGNoICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSkgeworCWNhc2UgQ0hJUF9SNjAwOgorCQludW1fcHNfZ3BycyA9IDE5MjsKKwkJbnVtX3ZzX2dwcnMgPSA1NjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDEzNjsKKwkJbnVtX3ZzX3RocmVhZHMgPSA0ODsKKwkJbnVtX2dzX3RocmVhZHMgPSA0OworCQludW1fZXNfdGhyZWFkcyA9IDQ7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gMTI4OworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAwOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDA7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYzMDoKKwljYXNlIENISVBfUlY2MzU6CisJCW51bV9wc19ncHJzID0gODQ7CisJCW51bV92c19ncHJzID0gMzY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxNDQ7CisJCW51bV92c190aHJlYWRzID0gNDA7CisJCW51bV9nc190aHJlYWRzID0gNDsKKwkJbnVtX2VzX3RocmVhZHMgPSA0OworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDMyOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDE2OworCQlicmVhazsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CisJZGVmYXVsdDoKKwkJbnVtX3BzX2dwcnMgPSA4NDsKKwkJbnVtX3ZzX2dwcnMgPSAzNjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDEzNjsKKwkJbnVtX3ZzX3RocmVhZHMgPSA0ODsKKwkJbnVtX2dzX3RocmVhZHMgPSA0OworCQludW1fZXNfdGhyZWFkcyA9IDQ7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDA7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gNDA7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMzI7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMTY7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDoKKwkJbnVtX3BzX2dwcnMgPSAxNDQ7CisJCW51bV92c19ncHJzID0gNDA7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxMzY7CisJCW51bV92c190aHJlYWRzID0gNDg7CisJCW51bV9nc190aHJlYWRzID0gNDsKKwkJbnVtX2VzX3RocmVhZHMgPSA0OworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDMyOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDE2OworCQlicmVhazsKKwljYXNlIENISVBfUlY3NzA6CisJCW51bV9wc19ncHJzID0gMTkyOworCQludW1fdnNfZ3BycyA9IDU2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTg4OworCQludW1fdnNfdGhyZWFkcyA9IDYwOworCQludW1fZ3NfdGhyZWFkcyA9IDA7CisJCW51bV9lc190aHJlYWRzID0gMDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gMjU2OworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDA7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjc0MDoKKwkJbnVtX3BzX2dwcnMgPSA4NDsKKwkJbnVtX3ZzX2dwcnMgPSAzNjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDE4ODsKKwkJbnVtX3ZzX3RocmVhZHMgPSA2MDsKKwkJbnVtX2dzX3RocmVhZHMgPSAwOworCQludW1fZXNfdGhyZWFkcyA9IDA7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gMTI4OworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAwOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDA7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjcxMDoKKwkJbnVtX3BzX2dwcnMgPSAxOTI7CisJCW51bV92c19ncHJzID0gNTY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxNDQ7CisJCW51bV92c190aHJlYWRzID0gNDg7CisJCW51bV9nc190aHJlYWRzID0gMDsKKwkJbnVtX2VzX3RocmVhZHMgPSAwOworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMDsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAwOworCQlicmVhazsKKwl9CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MTApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjIwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM4ODApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzEwKSkKKwkJc3FfY29uZmlnID0gMDsKKwllbHNlCisJCXNxX2NvbmZpZyA9IFI2MDBfVkNfRU5BQkxFOworCisJc3FfY29uZmlnIHw9IChSNjAwX0RYOV9DT05TVFMgfAorCQkgICAgICBSNjAwX0FMVV9JTlNUX1BSRUZFUl9WRUNUT1IgfAorCQkgICAgICBSNjAwX1BTX1BSSU8oMCkgfAorCQkgICAgICBSNjAwX1ZTX1BSSU8oMSkgfAorCQkgICAgICBSNjAwX0dTX1BSSU8oMikgfAorCQkgICAgICBSNjAwX0VTX1BSSU8oMykpOworCisJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19HUFJTKG51bV9wc19ncHJzKSB8CisJCQkJICBSNjAwX05VTV9WU19HUFJTKG51bV92c19ncHJzKSB8CisJCQkJICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKG51bV90ZW1wX2dwcnMpKTsKKwlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX0dQUlMobnVtX2dzX2dwcnMpIHwKKwkJCQkgIFI2MDBfTlVNX0VTX0dQUlMobnVtX2VzX2dwcnMpKTsKKwlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChSNjAwX05VTV9QU19USFJFQURTKG51bV9wc190aHJlYWRzKSB8CisJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUyhudW1fdnNfdGhyZWFkcykgfAorCQkJCSAgIFI2MDBfTlVNX0dTX1RIUkVBRFMobnVtX2dzX3RocmVhZHMpIHwKKwkJCQkgICBSNjAwX05VTV9FU19USFJFQURTKG51bV9lc190aHJlYWRzKSk7CisJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX1NUQUNLX0VOVFJJRVMobnVtX3BzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkgICAgUjYwMF9OVU1fVlNfU1RBQ0tfRU5UUklFUyhudW1fdnNfc3RhY2tfZW50cmllcykpOworCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19TVEFDS19FTlRSSUVTKG51bV9nc19zdGFja19lbnRyaWVzKSB8CisJCQkJICAgIFI2MDBfTlVNX0VTX1NUQUNLX0VOVFJJRVMobnVtX2VzX3N0YWNrX2VudHJpZXMpKTsKKworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKSB7CisJCUJFR0lOX1JJTkcocjd4eF9kZWZhdWx0X3NpemUgKyAxMCk7CisJCWZvciAoaSA9IDA7IGkgPCByN3h4X2RlZmF1bHRfc2l6ZTsgaSsrKQorCQkJT1VUX1JJTkcocjd4eF9kZWZhdWx0X3N0YXRlW2ldKTsKKwl9IGVsc2UgeworCQlCRUdJTl9SSU5HKHI2eHhfZGVmYXVsdF9zaXplICsgMTApOworCQlmb3IgKGkgPSAwOyBpIDwgcjZ4eF9kZWZhdWx0X3NpemU7IGkrKykKKwkJCU9VVF9SSU5HKHI2eHhfZGVmYXVsdF9zdGF0ZVtpXSk7CisJfQorCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9FVkVOVF9XUklURSwgMCkpOworCU9VVF9SSU5HKFI2MDBfQ0FDSEVfRkxVU0hfQU5EX0lOVl9FVkVOVCk7CisJLyogU1EgY29uZmlnICovCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCA2KSk7CisJT1VUX1JJTkcoKFI2MDBfU1FfQ09ORklHIC0gUjYwMF9TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKHNxX2NvbmZpZyk7CisJT1VUX1JJTkcoc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7CisJT1VUX1JJTkcoc3FfZ3ByX3Jlc291cmNlX21nbXRfMik7CisJT1VUX1JJTkcoc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCU9VVF9SSU5HKHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7CisJT1VUX1JJTkcoc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKKwlBRFZBTkNFX1JJTkcoKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBpMmYodWludDMyX3QgaW5wdXQpCit7CisJdTMyIHJlc3VsdCwgaSwgZXhwb25lbnQsIGZyYWN0aW9uOworCisJaWYgKChpbnB1dCAmIDB4M2ZmZikgPT0gMCkKKwkJcmVzdWx0ID0gMDsgLyogMCBpcyBhIHNwZWNpYWwgY2FzZSAqLworCWVsc2UgeworCQlleHBvbmVudCA9IDE0MDsgLyogZXhwb25lbnQgYmlhc2VkIGJ5IDEyNzsgKi8KKwkJZnJhY3Rpb24gPSAoaW5wdXQgJiAweDNmZmYpIDw8IDEwOyAvKiBjaGVhdCBhbmQgb25seQorCQkJCQkJICAgICAgaGFuZGxlIG51bWJlcnMgYmVsb3cgMl5eMTUgKi8KKwkJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJCWlmIChmcmFjdGlvbiAmIDB4ODAwMDAwKQorCQkJCWJyZWFrOworCQkJZWxzZSB7CisJCQkJZnJhY3Rpb24gPSBmcmFjdGlvbiA8PCAxOyAvKiBrZWVwCisJCQkJCQkJICAgICBzaGlmdGluZyBsZWZ0IHVudGlsIHRvcCBiaXQgPSAxICovCisJCQkJZXhwb25lbnQgPSBleHBvbmVudCAtIDE7CisJCQl9CisJCX0KKwkJcmVzdWx0ID0gZXhwb25lbnQgPDwgMjMgfCAoZnJhY3Rpb24gJiAweDdmZmZmZik7IC8qIG1hc2sKKwkJCQkJCQkJICAgIG9mZiB0b3AgYml0OyBhc3N1bWVkIDEgKi8KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCByNjAwX25vbW1fZ2V0X3ZiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkZXZfcHJpdi0+YmxpdF92YiA9IHJhZGVvbl9mcmVlbGlzdF9nZXQoZGV2KTsKKwlpZiAoIWRldl9wcml2LT5ibGl0X3ZiKSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIHZlcnRleCBidWZmZXIgZm9yIGJsaXRcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByNjAwX25vbW1fcHV0X3ZiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkID0gMDsKKwlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBkZXZfcHJpdi0+YmxpdF92Yi0+ZmlsZV9wcml2LT5tYXN0ZXIsIGRldl9wcml2LT5ibGl0X3ZiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpyNjAwX25vbW1fZ2V0X3ZiX3B0cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJcmV0dXJuICgoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKworCQkgZGV2X3ByaXYtPmJsaXRfdmItPm9mZnNldCArIGRldl9wcml2LT5ibGl0X3ZiLT51c2VkKSk7Cit9CisKK2ludAorcjYwMF9wcmVwYXJlX2JsaXRfY29weShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCURSTV9ERUJVRygiXG4iKTsKKworCXI2MDBfbm9tbV9nZXRfdmIoZGV2KTsKKworCWRldl9wcml2LT5ibGl0X3ZiLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7CisKKwlzZXRfZGVmYXVsdF9zdGF0ZShkZXZfcHJpdik7CisJc2V0X3NoYWRlcnMoZGV2KTsKKworCXJldHVybiAwOworfQorCisKK3ZvaWQKK3I2MDBfZG9uZV9ibGl0X2NvcHkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCUJFR0lOX1JJTkcoNSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0VWRU5UX1dSSVRFLCAwKSk7CisJT1VUX1JJTkcoUjYwMF9DQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKKwkvKiB3YWl0IGZvciAzRCBpZGxlIGNsZWFuICovCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfV0FJVF9VTlRJTCAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORyhSQURFT05fV0FJVF8zRF9JRExFIHwgUkFERU9OX1dBSVRfM0RfSURMRUNMRUFOKTsKKworCUFEVkFOQ0VfUklORygpOworCUNPTU1JVF9SSU5HKCk7CisKKwlyNjAwX25vbW1fcHV0X3ZiKGRldik7Cit9CisKK3ZvaWQKK3I2MDBfYmxpdF9jb3B5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgIHVpbnQ2NF90IHNyY19ncHVfYWRkciwgdWludDY0X3QgZHN0X2dwdV9hZGRyLAorCSAgICAgICBpbnQgc2l6ZV9ieXRlcykKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBtYXhfYnl0ZXM7CisJdTY0IHZiX2FkZHI7CisJdTMyICp2YjsKKworCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKKworCWlmICgoc2l6ZV9ieXRlcyAmIDMpIHx8IChzcmNfZ3B1X2FkZHIgJiAzKSB8fCAoZHN0X2dwdV9hZGRyICYgMykpIHsKKwkJbWF4X2J5dGVzID0gODE5MjsKKworCQl3aGlsZSAoc2l6ZV9ieXRlcykgeworCQkJaW50IGN1cl9zaXplID0gc2l6ZV9ieXRlczsKKwkJCWludCBzcmNfeCA9IHNyY19ncHVfYWRkciAmIDI1NTsKKwkJCWludCBkc3RfeCA9IGRzdF9ncHVfYWRkciAmIDI1NTsKKwkJCWludCBoID0gMTsKKwkJCXNyY19ncHVfYWRkciA9IHNyY19ncHVfYWRkciAmIH4yNTU7CisJCQlkc3RfZ3B1X2FkZHIgPSBkc3RfZ3B1X2FkZHIgJiB+MjU1OworCisJCQlpZiAoIXNyY194ICYmICFkc3RfeCkgeworCQkJCWggPSAoY3VyX3NpemUgLyBtYXhfYnl0ZXMpOworCQkJCWlmIChoID4gODE5MikKKwkJCQkJaCA9IDgxOTI7CisJCQkJaWYgKGggPT0gMCkKKwkJCQkJaCA9IDE7CisJCQkJZWxzZQorCQkJCQljdXJfc2l6ZSA9IG1heF9ieXRlczsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGN1cl9zaXplID4gbWF4X2J5dGVzKQorCQkJCQljdXJfc2l6ZSA9IG1heF9ieXRlczsKKwkJCQlpZiAoY3VyX3NpemUgPiAobWF4X2J5dGVzIC0gZHN0X3gpKQorCQkJCQljdXJfc2l6ZSA9IChtYXhfYnl0ZXMgLSBkc3RfeCk7CisJCQkJaWYgKGN1cl9zaXplID4gKG1heF9ieXRlcyAtIHNyY194KSkKKwkJCQkJY3VyX3NpemUgPSAobWF4X2J5dGVzIC0gc3JjX3gpOworCQkJfQorCisJCQlpZiAoKGRldl9wcml2LT5ibGl0X3ZiLT51c2VkICsgNDgpID4gZGV2X3ByaXYtPmJsaXRfdmItPnRvdGFsKSB7CisKKwkJCQlyNjAwX25vbW1fcHV0X3ZiKGRldik7CisJCQkJcjYwMF9ub21tX2dldF92YihkZXYpOworCQkJCWlmICghZGV2X3ByaXYtPmJsaXRfdmIpCisJCQkJCXJldHVybjsKKwkJCQlzZXRfc2hhZGVycyhkZXYpOworCQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKKwkJCX0KKworCQkJdmJbMF0gPSBpMmYoZHN0X3gpOworCQkJdmJbMV0gPSAwOworCQkJdmJbMl0gPSBpMmYoc3JjX3gpOworCQkJdmJbM10gPSAwOworCisJCQl2Yls0XSA9IGkyZihkc3RfeCk7CisJCQl2Yls1XSA9IGkyZihoKTsKKwkJCXZiWzZdID0gaTJmKHNyY194KTsKKwkJCXZiWzddID0gaTJmKGgpOworCisJCQl2Yls4XSA9IGkyZihkc3RfeCArIGN1cl9zaXplKTsKKwkJCXZiWzldID0gaTJmKGgpOworCQkJdmJbMTBdID0gaTJmKHNyY194ICsgY3VyX3NpemUpOworCQkJdmJbMTFdID0gaTJmKGgpOworCisJCQkvKiBzcmMgKi8KKwkJCXNldF90ZXhfcmVzb3VyY2UoZGV2X3ByaXYsIEZNVF84LAorCQkJCQkgc3JjX3ggKyBjdXJfc2l6ZSwgaCwgc3JjX3ggKyBjdXJfc2l6ZSwKKwkJCQkJIHNyY19ncHVfYWRkcik7CisKKwkJCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCisJCQkJCSAgICBSNjAwX1RDX0FDVElPTl9FTkEsIChzcmNfeCArIGN1cl9zaXplICogaCksIHNyY19ncHVfYWRkcik7CisKKwkJCS8qIGRzdCAqLworCQkJc2V0X3JlbmRlcl90YXJnZXQoZGV2X3ByaXYsIENPTE9SXzgsCisJCQkJCSAgZHN0X3ggKyBjdXJfc2l6ZSwgaCwKKwkJCQkJICBkc3RfZ3B1X2FkZHIpOworCisJCQkvKiBzY2lzc29ycyAqLworCQkJc2V0X3NjaXNzb3JzKGRldl9wcml2LCBkc3RfeCwgMCwgZHN0X3ggKyBjdXJfc2l6ZSwgaCk7CisKKwkJCS8qIFZlcnRleCBidWZmZXIgc2V0dXAgKi8KKwkJCXZiX2FkZHIgPSBkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCArCisJCQkJZGV2X3ByaXYtPmJsaXRfdmItPm9mZnNldCArCisJCQkJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQ7CisJCQlzZXRfdnR4X3Jlc291cmNlKGRldl9wcml2LCB2Yl9hZGRyKTsKKworCQkJLyogZHJhdyAqLworCQkJZHJhd19hdXRvKGRldl9wcml2KTsKKworCQkJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKKwkJCQkJICAgIFI2MDBfQ0JfQUNUSU9OX0VOQSB8IFI2MDBfQ0IwX0RFU1RfQkFTRV9FTkEsCisJCQkJCSAgICBjdXJfc2l6ZSAqIGgsIGRzdF9ncHVfYWRkcik7CisKKwkJCXZiICs9IDEyOworCQkJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKz0gMTIgKiA0OworCisJCQlzcmNfZ3B1X2FkZHIgKz0gY3VyX3NpemUgKiBoOworCQkJZHN0X2dwdV9hZGRyICs9IGN1cl9zaXplICogaDsKKwkJCXNpemVfYnl0ZXMgLT0gY3VyX3NpemUgKiBoOworCQl9CisJfSBlbHNlIHsKKwkJbWF4X2J5dGVzID0gODE5MiAqIDQ7CisKKwkJd2hpbGUgKHNpemVfYnl0ZXMpIHsKKwkJCWludCBjdXJfc2l6ZSA9IHNpemVfYnl0ZXM7CisJCQlpbnQgc3JjX3ggPSAoc3JjX2dwdV9hZGRyICYgMjU1KTsKKwkJCWludCBkc3RfeCA9IChkc3RfZ3B1X2FkZHIgJiAyNTUpOworCQkJaW50IGggPSAxOworCQkJc3JjX2dwdV9hZGRyID0gc3JjX2dwdV9hZGRyICYgfjI1NTsKKwkJCWRzdF9ncHVfYWRkciA9IGRzdF9ncHVfYWRkciAmIH4yNTU7CisKKwkJCWlmICghc3JjX3ggJiYgIWRzdF94KSB7CisJCQkJaCA9IChjdXJfc2l6ZSAvIG1heF9ieXRlcyk7CisJCQkJaWYgKGggPiA4MTkyKQorCQkJCQloID0gODE5MjsKKwkJCQlpZiAoaCA9PSAwKQorCQkJCQloID0gMTsKKwkJCQllbHNlCisJCQkJCWN1cl9zaXplID0gbWF4X2J5dGVzOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY3VyX3NpemUgPiBtYXhfYnl0ZXMpCisJCQkJCWN1cl9zaXplID0gbWF4X2J5dGVzOworCQkJCWlmIChjdXJfc2l6ZSA+IChtYXhfYnl0ZXMgLSBkc3RfeCkpCisJCQkJCWN1cl9zaXplID0gKG1heF9ieXRlcyAtIGRzdF94KTsKKwkJCQlpZiAoY3VyX3NpemUgPiAobWF4X2J5dGVzIC0gc3JjX3gpKQorCQkJCQljdXJfc2l6ZSA9IChtYXhfYnl0ZXMgLSBzcmNfeCk7CisJCQl9CisKKwkJCWlmICgoZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKyA0OCkgPiBkZXZfcHJpdi0+YmxpdF92Yi0+dG90YWwpIHsKKwkJCQlyNjAwX25vbW1fcHV0X3ZiKGRldik7CisJCQkJcjYwMF9ub21tX2dldF92YihkZXYpOworCQkJCWlmICghZGV2X3ByaXYtPmJsaXRfdmIpCisJCQkJCXJldHVybjsKKworCQkJCXNldF9zaGFkZXJzKGRldik7CisJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOworCQkJfQorCisJCQl2YlswXSA9IGkyZihkc3RfeCAvIDQpOworCQkJdmJbMV0gPSAwOworCQkJdmJbMl0gPSBpMmYoc3JjX3ggLyA0KTsKKwkJCXZiWzNdID0gMDsKKworCQkJdmJbNF0gPSBpMmYoZHN0X3ggLyA0KTsKKwkJCXZiWzVdID0gaTJmKGgpOworCQkJdmJbNl0gPSBpMmYoc3JjX3ggLyA0KTsKKwkJCXZiWzddID0gaTJmKGgpOworCisJCQl2Yls4XSA9IGkyZigoZHN0X3ggKyBjdXJfc2l6ZSkgLyA0KTsKKwkJCXZiWzldID0gaTJmKGgpOworCQkJdmJbMTBdID0gaTJmKChzcmNfeCArIGN1cl9zaXplKSAvIDQpOworCQkJdmJbMTFdID0gaTJmKGgpOworCisJCQkvKiBzcmMgKi8KKwkJCXNldF90ZXhfcmVzb3VyY2UoZGV2X3ByaXYsIEZNVF84XzhfOF84LAorCQkJCQkgKHNyY194ICsgY3VyX3NpemUpIC8gNCwKKwkJCQkJIGgsIChzcmNfeCArIGN1cl9zaXplKSAvIDQsCisJCQkJCSBzcmNfZ3B1X2FkZHIpOworCisJCQljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAorCQkJCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCAoc3JjX3ggKyBjdXJfc2l6ZSAqIGgpLCBzcmNfZ3B1X2FkZHIpOworCisJCQkvKiBkc3QgKi8KKwkJCXNldF9yZW5kZXJfdGFyZ2V0KGRldl9wcml2LCBDT0xPUl84XzhfOF84LAorCQkJCQkgIChkc3RfeCArIGN1cl9zaXplKSAvIDQsIGgsCisJCQkJCSAgZHN0X2dwdV9hZGRyKTsKKworCQkJLyogc2Npc3NvcnMgKi8KKwkJCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgKGRzdF94IC8gNCksIDAsIChkc3RfeCArIGN1cl9zaXplIC8gNCksIGgpOworCisJCQkvKiBWZXJ0ZXggYnVmZmVyIHNldHVwICovCisJCQl2Yl9hZGRyID0gZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgKworCQkJCWRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQgKworCQkJCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkOworCQkJc2V0X3Z0eF9yZXNvdXJjZShkZXZfcHJpdiwgdmJfYWRkcik7CisKKwkJCS8qIGRyYXcgKi8KKwkJCWRyYXdfYXV0byhkZXZfcHJpdik7CisKKwkJCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCisJCQkJCSAgICBSNjAwX0NCX0FDVElPTl9FTkEgfCBSNjAwX0NCMF9ERVNUX0JBU0VfRU5BLAorCQkJCQkgICAgY3VyX3NpemUgKiBoLCBkc3RfZ3B1X2FkZHIpOworCisJCQl2YiArPSAxMjsKKwkJCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkICs9IDEyICogNDsKKworCQkJc3JjX2dwdV9hZGRyICs9IGN1cl9zaXplICogaDsKKwkJCWRzdF9ncHVfYWRkciArPSBjdXJfc2l6ZSAqIGg7CisJCQlzaXplX2J5dGVzIC09IGN1cl9zaXplICogaDsKKwkJfQorCX0KK30KKwordm9pZAorcjYwMF9ibGl0X3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkgICAgICAgdWludDY0X3Qgc3JjX2dwdV9hZGRyLCB1aW50NjRfdCBkc3RfZ3B1X2FkZHIsCisJICAgICAgIGludCBzeCwgaW50IHN5LCBpbnQgZHgsIGludCBkeSwKKwkgICAgICAgaW50IHcsIGludCBoLCBpbnQgc3JjX3BpdGNoLCBpbnQgZHN0X3BpdGNoLCBpbnQgY3BwKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGNiX2Zvcm1hdCwgdGV4X2Zvcm1hdDsKKwl1NjQgdmJfYWRkcjsKKwl1MzIgKnZiOworCisJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOworCisJaWYgKChkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCArIDQ4KSA+IGRldl9wcml2LT5ibGl0X3ZiLT50b3RhbCkgeworCisJCXI2MDBfbm9tbV9wdXRfdmIoZGV2KTsKKwkJcjYwMF9ub21tX2dldF92YihkZXYpOworCQlpZiAoIWRldl9wcml2LT5ibGl0X3ZiKQorCQkJcmV0dXJuOworCisJCXNldF9zaGFkZXJzKGRldik7CisJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKKwl9CisKKwlpZiAoY3BwID09IDQpIHsKKwkJY2JfZm9ybWF0ID0gQ09MT1JfOF84XzhfODsKKwkJdGV4X2Zvcm1hdCA9IEZNVF84XzhfOF84OworCX0gZWxzZSBpZiAoY3BwID09IDIpIHsKKwkJY2JfZm9ybWF0ID0gQ09MT1JfNV82XzU7CisJCXRleF9mb3JtYXQgPSBGTVRfNV82XzU7CisJfSBlbHNlIHsKKwkJY2JfZm9ybWF0ID0gQ09MT1JfODsKKwkJdGV4X2Zvcm1hdCA9IEZNVF84OworCX0KKworCXZiWzBdID0gaTJmKGR4KTsKKwl2YlsxXSA9IGkyZihkeSk7CisJdmJbMl0gPSBpMmYoc3gpOworCXZiWzNdID0gaTJmKHN5KTsKKworCXZiWzRdID0gaTJmKGR4KTsKKwl2Yls1XSA9IGkyZihkeSArIGgpOworCXZiWzZdID0gaTJmKHN4KTsKKwl2Yls3XSA9IGkyZihzeSArIGgpOworCisJdmJbOF0gPSBpMmYoZHggKyB3KTsKKwl2Yls5XSA9IGkyZihkeSArIGgpOworCXZiWzEwXSA9IGkyZihzeCArIHcpOworCXZiWzExXSA9IGkyZihzeSArIGgpOworCisJLyogc3JjICovCisJc2V0X3RleF9yZXNvdXJjZShkZXZfcHJpdiwgdGV4X2Zvcm1hdCwKKwkJCSBzcmNfcGl0Y2ggLyBjcHAsCisJCQkgc3kgKyBoLCBzcmNfcGl0Y2ggLyBjcHAsCisJCQkgc3JjX2dwdV9hZGRyKTsKKworCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCisJCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCAoc3JjX3BpdGNoICogKHN5ICsgaCkpLCBzcmNfZ3B1X2FkZHIpOworCisJLyogZHN0ICovCisJc2V0X3JlbmRlcl90YXJnZXQoZGV2X3ByaXYsIGNiX2Zvcm1hdCwKKwkJCSAgZHN0X3BpdGNoIC8gY3BwLCBkeSArIGgsCisJCQkgIGRzdF9ncHVfYWRkcik7CisKKwkvKiBzY2lzc29ycyAqLworCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHgsIGR5LCBkeCArIHcsIGR5ICsgaCk7CisKKwkvKiBWZXJ0ZXggYnVmZmVyIHNldHVwICovCisJdmJfYWRkciA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsKKwkJZGV2X3ByaXYtPmJsaXRfdmItPm9mZnNldCArCisJCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkOworCXNldF92dHhfcmVzb3VyY2UoZGV2X3ByaXYsIHZiX2FkZHIpOworCisJLyogZHJhdyAqLworCWRyYXdfYXV0byhkZXZfcHJpdik7CisKKwljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAorCQkJICAgIFI2MDBfQ0JfQUNUSU9OX0VOQSB8IFI2MDBfQ0IwX0RFU1RfQkFTRV9FTkEsCisJCQkgICAgZHN0X3BpdGNoICogKGR5ICsgaCksIGRzdF9ncHVfYWRkcik7CisKKwlkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCArPSAxMiAqIDQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWUzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpAQCAtMCwwICsxLDgwNSBAQAorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJtLmgiCisjaW5jbHVkZSAicmFkZW9uLmgiCisKKyNpbmNsdWRlICJyNjAwZC5oIgorI2luY2x1ZGUgInI2MDBfYmxpdF9zaGFkZXJzLmgiCisKKyNkZWZpbmUgRElfUFRfUkVDVExJU1QgICAgICAgIDB4MTEKKyNkZWZpbmUgRElfSU5ERVhfU0laRV8xNl9CSVQgIDB4MAorI2RlZmluZSBESV9TUkNfU0VMX0FVVE9fSU5ERVggMHgyCisKKyNkZWZpbmUgRk1UXzggICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBGTVRfNV82XzUgICAgICAgICAgICAgMHg4CisjZGVmaW5lIEZNVF84XzhfOF84ICAgICAgICAgICAweDFhCisjZGVmaW5lIENPTE9SXzggICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgQ09MT1JfNV82XzUgICAgICAgICAgIDB4OAorI2RlZmluZSBDT0xPUl84XzhfOF84ICAgICAgICAgMHgxYQorCisvKiBlbWl0cyAyMSBvbiBydjc3MCssIDIzIG9uIHI2MDAgKi8KK3N0YXRpYyB2b2lkCitzZXRfcmVuZGVyX3RhcmdldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGZvcm1hdCwKKwkJICBpbnQgdywgaW50IGgsIHU2NCBncHVfYWRkcikKK3sKKwl1MzIgY2JfY29sb3JfaW5mbzsKKwlpbnQgcGl0Y2gsIHNsaWNlOworCisJaCA9IChoICsgNykgJiB+NzsKKwlpZiAoaCA8IDgpCisJCWggPSA4OworCisJY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjcpKTsKKwlwaXRjaCA9ICh3IC8gOCkgLSAxOworCXNsaWNlID0gKCh3ICogaCkgLyA2NCkgLSAxOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChDQl9DT0xPUjBfQkFTRSAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgPj4gOCk7CisKKwlpZiAocmRldi0+ZmFtaWx5ID4gQ0hJUF9SNjAwICYmIHJkZXYtPmZhbWlseSA8IENISVBfUlY3NzApIHsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NVUkZBQ0VfQkFTRV9VUERBVEUsIDApKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMiA8PCAwKTsKKwl9CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKENCX0NPTE9SMF9TSVpFIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAocGl0Y2ggPDwgMCkgfCAoc2xpY2UgPDwgMTApKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoQ0JfQ09MT1IwX1ZJRVcgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChDQl9DT0xPUjBfSU5GTyAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgY2JfY29sb3JfaW5mbyk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKENCX0NPTE9SMF9USUxFIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoQ0JfQ09MT1IwX0ZSQUcgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChDQl9DT0xPUjBfTUFTSyAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Cit9CisKKy8qIGVtaXRzIDVkdyAqLworc3RhdGljIHZvaWQKK2NwX3NldF9zdXJmYWNlX3N5bmMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCSAgICB1MzIgc3luY190eXBlLCB1MzIgc2l6ZSwKKwkJICAgIHU2NCBtY19hZGRyKQoreworCXUzMiBjcF9jb2hlcl9zaXplOworCisJaWYgKHNpemUgPT0gMHhmZmZmZmZmZikKKwkJY3BfY29oZXJfc2l6ZSA9IDB4ZmZmZmZmZmY7CisJZWxzZQorCQljcF9jb2hlcl9zaXplID0gKChzaXplICsgMjU1KSA+PiA4KTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TVVJGQUNFX1NZTkMsIDMpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzeW5jX3R5cGUpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGNwX2NvaGVyX3NpemUpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIG1jX2FkZHIgPj4gOCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMTApOyAvKiBwb2xsIGludGVydmFsICovCit9CisKKy8qIGVtaXRzIDIxZHcgKyAxIHN1cmZhY2Ugc3luYyA9IDI2ZHcgKi8KK3N0YXRpYyB2b2lkCitzZXRfc2hhZGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1NjQgZ3B1X2FkZHI7CisJdTMyIHNxX3BnbV9yZXNvdXJjZXM7CisKKwkvKiBzZXR1cCBzaGFkZXIgcmVncyAqLworCXNxX3BnbV9yZXNvdXJjZXMgPSAoMSA8PCAwKTsKKworCS8qIFZTICovCisJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldDsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX1BHTV9TVEFSVF9WUyAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgPj4gOCk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX1BHTV9SRVNPVVJDRVNfVlMgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3BnbV9yZXNvdXJjZXMpOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9QR01fQ0ZfT0ZGU0VUX1ZTIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKworCS8qIFBTICovCisJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldDsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX1BHTV9TVEFSVF9QUyAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgPj4gOCk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX1BHTV9SRVNPVVJDRVNfUFMgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3BnbV9yZXNvdXJjZXMgfCAoMSA8PCAyOCkpOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9QR01fRVhQT1JUU19QUyAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMik7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX1BHTV9DRl9PRkZTRVRfUFMgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworCisJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldDsKKwljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsIFBBQ0tFVDNfU0hfQUNUSU9OX0VOQSwgNTEyLCBncHVfYWRkcik7Cit9CisKKy8qIGVtaXRzIDkgKyAxIHN5bmMgKDUpID0gMTQqLworc3RhdGljIHZvaWQKK3NldF92dHhfcmVzb3VyY2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHU2NCBncHVfYWRkcikKK3sKKwl1MzIgc3FfdnR4X2NvbnN0YW50X3dvcmQyOworCisJc3FfdnR4X2NvbnN0YW50X3dvcmQyID0gKCh1cHBlcl8zMl9iaXRzKGdwdV9hZGRyKSAmIDB4ZmYpIHwgKDE2IDw8IDgpKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfUkVTT1VSQ0UsIDcpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDQ2MCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgJiAweGZmZmZmZmZmKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCA0OCAtIDEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3Z0eF9jb25zdGFudF93b3JkMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSA8PCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBTUV9URVhfVlRYX1ZBTElEX0JVRkZFUiA8PCAzMCk7CisKKwlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjEwKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MjApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3MTApKQorCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCisJCQkJICAgIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKKwllbHNlCisJCWNwX3NldF9zdXJmYWNlX3N5bmMocmRldiwKKwkJCQkgICAgUEFDS0VUM19WQ19BQ1RJT05fRU5BLCA0OCwgZ3B1X2FkZHIpOworfQorCisvKiBlbWl0cyA5ICovCitzdGF0aWMgdm9pZAorc2V0X3RleF9yZXNvdXJjZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJIGludCBmb3JtYXQsIGludCB3LCBpbnQgaCwgaW50IHBpdGNoLAorCQkgdTY0IGdwdV9hZGRyKQoreworCXVpbnQzMl90IHNxX3RleF9yZXNvdXJjZV93b3JkMCwgc3FfdGV4X3Jlc291cmNlX3dvcmQxLCBzcV90ZXhfcmVzb3VyY2Vfd29yZDQ7CisKKwlpZiAoaCA8IDEpCisJCWggPSAxOworCisJc3FfdGV4X3Jlc291cmNlX3dvcmQwID0gKDEgPDwgMCk7CisJc3FfdGV4X3Jlc291cmNlX3dvcmQwIHw9ICgoKChwaXRjaCA+PiAzKSAtIDEpIDw8IDgpIHwKKwkJCQkgICgodyAtIDEpIDw8IDE5KSk7CisKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoZm9ybWF0IDw8IDI2KTsKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgfD0gKChoIC0gMSkgPDwgMCk7CisKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDQgPSAoKDEgPDwgMTQpIHwKKwkJCQkgKDAgPDwgMTYpIHwKKwkJCQkgKDEgPDwgMTkpIHwKKwkJCQkgKDIgPDwgMjIpIHwKKwkJCQkgKDMgPDwgMjUpKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfUkVTT1VSQ0UsIDcpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90ZXhfcmVzb3VyY2Vfd29yZDApOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RleF9yZXNvdXJjZV93b3JkMSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgPj4gOCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgPj4gOCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGV4X3Jlc291cmNlX3dvcmQ0KTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBTUV9URVhfVlRYX1ZBTElEX1RFWFRVUkUgPDwgMzApOworfQorCisvKiBlbWl0cyAxMiAqLworc3RhdGljIHZvaWQKK3NldF9zY2lzc29ycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHgxLCBpbnQgeTEsCisJICAgICBpbnQgeDIsIGludCB5MikKK3sKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFBBX1NDX1NDUkVFTl9TQ0lTU09SX1RMIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDEgPDwgMCkgfCAoeTEgPDwgMTYpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDIgPDwgMCkgfCAoeTIgPDwgMTYpKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoUEFfU0NfR0VORVJJQ19TQ0lTU09SX1RMIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDEgPDwgMCkgfCAoeTEgPDwgMTYpIHwgKDEgPDwgMzEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDIgPDwgMCkgfCAoeTIgPDwgMTYpKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoUEFfU0NfV0lORE9XX1NDSVNTT1JfVEwgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICh4MSA8PCAwKSB8ICh5MSA8PCAxNikgfCAoMSA8PCAzMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICh4MiA8PCAwKSB8ICh5MiA8PCAxNikpOworfQorCisvKiBlbWl0cyAxMCAqLworc3RhdGljIHZvaWQKK2RyYXdfYXV0byhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoVkdUX1BSSU1JVElWRV9UWVBFIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIERJX1BUX1JFQ1RMSVNUKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRFWF9UWVBFLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfSU5ERVhfU0laRV8xNl9CSVQpOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX05VTV9JTlNUQU5DRVMsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19EUkFXX0lOREVYX0FVVE8sIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAzKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9TUkNfU0VMX0FVVE9fSU5ERVgpOworCit9CisKKy8qIGVtaXRzIDE0ICovCitzdGF0aWMgdm9pZAorc2V0X2RlZmF1bHRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHNxX2NvbmZpZywgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMjsKKwl1MzIgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yOworCWludCBudW1fcHNfZ3BycywgbnVtX3ZzX2dwcnMsIG51bV90ZW1wX2dwcnMsIG51bV9nc19ncHJzLCBudW1fZXNfZ3ByczsKKwlpbnQgbnVtX3BzX3RocmVhZHMsIG51bV92c190aHJlYWRzLCBudW1fZ3NfdGhyZWFkcywgbnVtX2VzX3RocmVhZHM7CisJaW50IG51bV9wc19zdGFja19lbnRyaWVzLCBudW1fdnNfc3RhY2tfZW50cmllcywgbnVtX2dzX3N0YWNrX2VudHJpZXMsIG51bV9lc19zdGFja19lbnRyaWVzOworCXU2NCBncHVfYWRkcjsKKwlpbnQgZHdvcmRzOworCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUjYwMDoKKwkJbnVtX3BzX2dwcnMgPSAxOTI7CisJCW51bV92c19ncHJzID0gNTY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxMzY7CisJCW51bV92c190aHJlYWRzID0gNDg7CisJCW51bV9nc190aHJlYWRzID0gNDsKKwkJbnVtX2VzX3RocmVhZHMgPSA0OworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMDsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MzA6CisJY2FzZSBDSElQX1JWNjM1OgorCQludW1fcHNfZ3BycyA9IDg0OworCQludW1fdnNfZ3BycyA9IDM2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTQ0OworCQludW1fdnNfdGhyZWFkcyA9IDQwOworCQludW1fZ3NfdGhyZWFkcyA9IDQ7CisJCW51bV9lc190aHJlYWRzID0gNDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAzMjsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjEwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JTODgwOgorCWRlZmF1bHQ6CisJCW51bV9wc19ncHJzID0gODQ7CisJCW51bV92c19ncHJzID0gMzY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxMzY7CisJCW51bV92c190aHJlYWRzID0gNDg7CisJCW51bV9nc190aHJlYWRzID0gNDsKKwkJbnVtX2VzX3RocmVhZHMgPSA0OworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDMyOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDE2OworCQlicmVhazsKKwljYXNlIENISVBfUlY2NzA6CisJCW51bV9wc19ncHJzID0gMTQ0OworCQludW1fdnNfZ3BycyA9IDQwOworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTM2OworCQludW1fdnNfdGhyZWFkcyA9IDQ4OworCQludW1fZ3NfdGhyZWFkcyA9IDQ7CisJCW51bV9lc190aHJlYWRzID0gNDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAzMjsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzcwOgorCQludW1fcHNfZ3BycyA9IDE5MjsKKwkJbnVtX3ZzX2dwcnMgPSA1NjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDE4ODsKKwkJbnVtX3ZzX3RocmVhZHMgPSA2MDsKKwkJbnVtX2dzX3RocmVhZHMgPSAwOworCQludW1fZXNfdGhyZWFkcyA9IDA7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gMjU2OworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAwOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDA7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjczMDoKKwljYXNlIENISVBfUlY3NDA6CisJCW51bV9wc19ncHJzID0gODQ7CisJCW51bV92c19ncHJzID0gMzY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxODg7CisJCW51bV92c190aHJlYWRzID0gNjA7CisJCW51bV9nc190aHJlYWRzID0gMDsKKwkJbnVtX2VzX3RocmVhZHMgPSAwOworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMDsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJCW51bV9wc19ncHJzID0gMTkyOworCQludW1fdnNfZ3BycyA9IDU2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTQ0OworCQludW1fdnNfdGhyZWFkcyA9IDQ4OworCQludW1fZ3NfdGhyZWFkcyA9IDA7CisJCW51bV9lc190aHJlYWRzID0gMDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gMTI4OworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDA7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzEwKSkKKwkJc3FfY29uZmlnID0gMDsKKwllbHNlCisJCXNxX2NvbmZpZyA9IFZDX0VOQUJMRTsKKworCXNxX2NvbmZpZyB8PSAoRFg5X0NPTlNUUyB8CisJCSAgICAgIEFMVV9JTlNUX1BSRUZFUl9WRUNUT1IgfAorCQkgICAgICBQU19QUklPKDApIHwKKwkJICAgICAgVlNfUFJJTygxKSB8CisJCSAgICAgIEdTX1BSSU8oMikgfAorCQkgICAgICBFU19QUklPKDMpKTsKKworCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX0dQUlMobnVtX3BzX2dwcnMpIHwKKwkJCQkgIE5VTV9WU19HUFJTKG51bV92c19ncHJzKSB8CisJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7CisJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfR1BSUyhudW1fZ3NfZ3BycykgfAorCQkJCSAgTlVNX0VTX0dQUlMobnVtX2VzX2dwcnMpKTsKKwlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChOVU1fUFNfVEhSRUFEUyhudW1fcHNfdGhyZWFkcykgfAorCQkJCSAgIE5VTV9WU19USFJFQURTKG51bV92c190aHJlYWRzKSB8CisJCQkJICAgTlVNX0dTX1RIUkVBRFMobnVtX2dzX3RocmVhZHMpIHwKKwkJCQkgICBOVU1fRVNfVEhSRUFEUyhudW1fZXNfdGhyZWFkcykpOworCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyhudW1fcHNfc3RhY2tfZW50cmllcykgfAorCQkJCSAgICBOVU1fVlNfU1RBQ0tfRU5UUklFUyhudW1fdnNfc3RhY2tfZW50cmllcykpOworCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfU1RBQ0tfRU5UUklFUyhudW1fZ3Nfc3RhY2tfZW50cmllcykgfAorCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUyhudW1fZXNfc3RhY2tfZW50cmllcykpOworCisJLyogZW1pdCBhbiBJQiBwb2ludGluZyBhdCBkZWZhdWx0IHN0YXRlICovCisJZHdvcmRzID0gKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKyAweGYpICYgfjB4ZjsKKwlncHVfYWRkciA9IHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0OworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhGRik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHdvcmRzKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19FVkVOVF9XUklURSwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIENBQ0hFX0ZMVVNIX0FORF9JTlZfRVZFTlQpOworCS8qIFNRIGNvbmZpZyAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgNikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9DT05GSUcgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfY29uZmlnKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9ncHJfcmVzb3VyY2VfbWdtdF8yKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzIpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGkyZih1aW50MzJfdCBpbnB1dCkKK3sKKwl1MzIgcmVzdWx0LCBpLCBleHBvbmVudCwgZnJhY3Rpb247CisKKwlpZiAoKGlucHV0ICYgMHgzZmZmKSA9PSAwKQorCQlyZXN1bHQgPSAwOyAvKiAwIGlzIGEgc3BlY2lhbCBjYXNlICovCisJZWxzZSB7CisJCWV4cG9uZW50ID0gMTQwOyAvKiBleHBvbmVudCBiaWFzZWQgYnkgMTI3OyAqLworCQlmcmFjdGlvbiA9IChpbnB1dCAmIDB4M2ZmZikgPDwgMTA7IC8qIGNoZWF0IGFuZCBvbmx5CisJCQkJCQkgICAgICBoYW5kbGUgbnVtYmVycyBiZWxvdyAyXl4xNSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJaWYgKGZyYWN0aW9uICYgMHg4MDAwMDApCisJCQkJYnJlYWs7CisJCQllbHNlIHsKKwkJCQlmcmFjdGlvbiA9IGZyYWN0aW9uIDw8IDE7IC8qIGtlZXAKKwkJCQkJCQkgICAgIHNoaWZ0aW5nIGxlZnQgdW50aWwgdG9wIGJpdCA9IDEgKi8KKwkJCQlleHBvbmVudCA9IGV4cG9uZW50IC0gMTsKKwkJCX0KKwkJfQorCQlyZXN1bHQgPSBleHBvbmVudCA8PCAyMyB8IChmcmFjdGlvbiAmIDB4N2ZmZmZmKTsgLyogbWFzaworCQkJCQkJCQkgICAgb2ZmIHRvcCBiaXQ7IGFzc3VtZWQgMSAqLworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgcjYwMF9ibGl0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIG9ial9zaXplOworCWludCByLCBkd29yZHM7CisJdm9pZCAqcHRyOworCXUzMiBwYWNrZXQyc1sxNl07CisJaW50IG51bV9wYWNrZXQycyA9IDA7CisKKwlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKKworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkKKwkJcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IHI3eHhfZGVmYXVsdF9zaXplOworCWVsc2UKKwkJcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IHI2eHhfZGVmYXVsdF9zaXplOworCisJZHdvcmRzID0gcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbjsKKwl3aGlsZSAoZHdvcmRzICYgMHhmKSB7CisJCXBhY2tldDJzW251bV9wYWNrZXQycysrXSA9IFBBQ0tFVDIoMCk7CisJCWR3b3JkcysrOworCX0KKworCW9ial9zaXplID0gZHdvcmRzICogNDsKKwlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOworCisJcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCA9IG9ial9zaXplOworCW9ial9zaXplICs9IHI2eHhfdnNfc2l6ZSAqIDQ7CisJb2JqX3NpemUgPSBBTElHTihvYmpfc2l6ZSwgMjU2KTsKKworCXJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgPSBvYmpfc2l6ZTsKKwlvYmpfc2l6ZSArPSByNnh4X3BzX3NpemUgKiA0OworCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CisKKwlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgb2JqX3NpemUsCisJCQkJIHRydWUsIFJBREVPTl9HRU1fRE9NQUlOX1ZSQU0sCisJCQkJIGZhbHNlLCAmcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicjYwMCBmYWlsZWQgdG8gYWxsb2NhdGUgc2hhZGVyXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJRFJNX0RFQlVHKCJyNnh4IGJsaXQgYWxsb2NhdGVkIGJvICUwOHggdnMgJTA4eCBwcyAlMDh4XG4iLAorCQkgIG9ial9zaXplLAorCQkgIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQsIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQpOworCisJciA9IHJhZGVvbl9vYmplY3Rfa21hcChyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgJnB0cik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIGJsaXQgb2JqZWN0ICVkXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkJICAgIHI3eHhfZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCWVsc2UKKwkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJCSAgICByNnh4X2RlZmF1bHRfc3RhdGUsIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KTsKKwlpZiAobnVtX3BhY2tldDJzKQorCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKKwkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisKKworCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0LCByNnh4X3ZzLCByNnh4X3ZzX3NpemUgKiA0KTsKKwltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCwgcjZ4eF9wcywgcjZ4eF9wc19zaXplICogNCk7CisKKwlyYWRlb25fb2JqZWN0X2t1bm1hcChyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjYwMF9ibGl0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CisJcmFkZW9uX29iamVjdF91bnJlZigmcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOworfQorCitpbnQgcjYwMF92Yl9pYl9nZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisJciA9IHJhZGVvbl9pYl9nZXQocmRldiwgJnJkZXYtPnI2MDBfYmxpdC52Yl9pYik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IElCIGZvciB2ZXJ0ZXggYnVmZmVyXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJcmRldi0+cjYwMF9ibGl0LnZiX3RvdGFsID0gNjQqMTAyNDsKKwlyZGV2LT5yNjAwX2JsaXQudmJfdXNlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjYwMF92Yl9pYl9wdXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmFkZW9uX2ZlbmNlX2VtaXQocmRldiwgcmRldi0+cjYwMF9ibGl0LnZiX2liLT5mZW5jZSk7CisJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmcmRldi0+cjYwMF9ibGl0LnZiX2liLT5saXN0LCAmcmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzKTsKKwltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCXJhZGVvbl9pYl9mcmVlKHJkZXYsICZyZGV2LT5yNjAwX2JsaXQudmJfaWIpOworfQorCitpbnQgcjYwMF9ibGl0X3ByZXBhcmVfY29weShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHNpemVfYnl0ZXMpCit7CisJaW50IHI7CisJaW50IHJpbmdfc2l6ZSwgbGluZV9zaXplOworCWludCBtYXhfc2l6ZTsKKwkvKiBsb29wcyBvZiBlbWl0cyA2NCArIGZlbmNlIGVtaXQgcG9zc2libGUgKi8KKwlpbnQgZHdvcmRzX3Blcl9sb29wID0gNzYsIG51bV9sb29wczsKKworCXIgPSByNjAwX3ZiX2liX2dldChyZGV2KTsKKwlXQVJOX09OKHIpOworCisJLyogc2V0X3JlbmRlcl90YXJnZXQgZW1pdHMgMiBleHRyYSBkd29yZHMgb24gcnY2eHggKi8KKwlpZiAocmRldi0+ZmFtaWx5ID4gQ0hJUF9SNjAwICYmIHJkZXYtPmZhbWlseSA8IENISVBfUlY3NzApCisJCWR3b3Jkc19wZXJfbG9vcCArPSAyOworCisJLyogOCBicHAgdnMgMzIgYnBwIGZvciB4ZmVyIHVuaXQgKi8KKwlpZiAoc2l6ZV9ieXRlcyAmIDMpCisJCWxpbmVfc2l6ZSA9IDgxOTI7CisJZWxzZQorCQlsaW5lX3NpemUgPSA4MTkyKjQ7CisKKwltYXhfc2l6ZSA9IDgxOTIgKiBsaW5lX3NpemU7CisKKwkvKiBtYWpvciBsb29wcyBjb3ZlciB0aGUgbWF4IHNpemUgdHJhbnNmZXIgKi8KKwludW1fbG9vcHMgPSAoKHNpemVfYnl0ZXMgKyBtYXhfc2l6ZSkgLyBtYXhfc2l6ZSk7CisJLyogbWlub3IgbG9vcHMgY292ZXIgdGhlIGV4dHJhIG5vbiBhbGlnbmVkIGJpdHMgKi8KKwludW1fbG9vcHMgKz0gKChzaXplX2J5dGVzICUgbGluZV9zaXplKSA/IDEgOiAwKTsKKwkvKiBjYWxjdWxhdGUgbnVtYmVyIG9mIGxvb3BzIGNvcnJlY3RseSAqLworCXJpbmdfc2l6ZSA9IG51bV9sb29wcyAqIGR3b3Jkc19wZXJfbG9vcDsKKwkvKiBzZXQgZGVmYXVsdCAgKyBzaGFkZXJzICovCisJcmluZ19zaXplICs9IDQwOyAvKiBzaGFkZXJzICsgZGVmIHN0YXRlICovCisJcmluZ19zaXplICs9IDM7IC8qIGZlbmNlIGVtaXQgZm9yIFZCIElCICovCisJcmluZ19zaXplICs9IDU7IC8qIGRvbmUgY29weSAqLworCXJpbmdfc2l6ZSArPSAzOyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KKwlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCByaW5nX3NpemUpOworCVdBUk5fT04ocik7CisKKwlzZXRfZGVmYXVsdF9zdGF0ZShyZGV2KTsgLyogMTQgKi8KKwlzZXRfc2hhZGVycyhyZGV2KTsgLyogMjYgKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCByNjAwX2JsaXRfZG9uZV9jb3B5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKK3sKKwlpbnQgcjsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19FVkVOVF9XUklURSwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIENBQ0hFX0ZMVVNIX0FORF9JTlZfRVZFTlQpOworCS8qIHdhaXQgZm9yIDNEIGlkbGUgY2xlYW4gKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoV0FJVF9VTlRJTCAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBXQUlUXzNEX0lETEVfYml0IHwgV0FJVF8zRF9JRExFQ0xFQU5fYml0KTsKKworCWlmIChyZGV2LT5yNjAwX2JsaXQudmJfaWIpCisJCXI2MDBfdmJfaWJfcHV0KHJkZXYpOworCisJaWYgKGZlbmNlKQorCQlyID0gcmFkZW9uX2ZlbmNlX2VtaXQocmRldiwgZmVuY2UpOworCisJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKK30KKwordm9pZCByNjAwX2ttc19ibGl0X2NvcHkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQl1NjQgc3JjX2dwdV9hZGRyLCB1NjQgZHN0X2dwdV9hZGRyLAorCQkJaW50IHNpemVfYnl0ZXMpCit7CisJaW50IG1heF9ieXRlczsKKwl1NjQgdmJfZ3B1X2FkZHI7CisJdTMyICp2YjsKKworCURSTV9ERUJVRygiZW1pdHRpbmcgY29weSAlMTZsbHggJTE2bGx4ICVkICVkXG4iLCBzcmNfZ3B1X2FkZHIsIGRzdF9ncHVfYWRkciwKKwkJICBzaXplX2J5dGVzLCByZGV2LT5yNjAwX2JsaXQudmJfdXNlZCk7CisJdmIgPSAodTMyICopKHJkZXYtPnI2MDBfYmxpdC52Yl9pYi0+cHRyICsgcmRldi0+cjYwMF9ibGl0LnZiX3VzZWQpOworCWlmICgoc2l6ZV9ieXRlcyAmIDMpIHx8IChzcmNfZ3B1X2FkZHIgJiAzKSB8fCAoZHN0X2dwdV9hZGRyICYgMykpIHsKKwkJbWF4X2J5dGVzID0gODE5MjsKKworCQl3aGlsZSAoc2l6ZV9ieXRlcykgeworCQkJaW50IGN1cl9zaXplID0gc2l6ZV9ieXRlczsKKwkJCWludCBzcmNfeCA9IHNyY19ncHVfYWRkciAmIDI1NTsKKwkJCWludCBkc3RfeCA9IGRzdF9ncHVfYWRkciAmIDI1NTsKKwkJCWludCBoID0gMTsKKwkJCXNyY19ncHVfYWRkciA9IHNyY19ncHVfYWRkciAmIH4yNTU7CisJCQlkc3RfZ3B1X2FkZHIgPSBkc3RfZ3B1X2FkZHIgJiB+MjU1OworCisJCQlpZiAoIXNyY194ICYmICFkc3RfeCkgeworCQkJCWggPSAoY3VyX3NpemUgLyBtYXhfYnl0ZXMpOworCQkJCWlmIChoID4gODE5MikKKwkJCQkJaCA9IDgxOTI7CisJCQkJaWYgKGggPT0gMCkKKwkJCQkJaCA9IDE7CisJCQkJZWxzZQorCQkJCQljdXJfc2l6ZSA9IG1heF9ieXRlczsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGN1cl9zaXplID4gbWF4X2J5dGVzKQorCQkJCQljdXJfc2l6ZSA9IG1heF9ieXRlczsKKwkJCQlpZiAoY3VyX3NpemUgPiAobWF4X2J5dGVzIC0gZHN0X3gpKQorCQkJCQljdXJfc2l6ZSA9IChtYXhfYnl0ZXMgLSBkc3RfeCk7CisJCQkJaWYgKGN1cl9zaXplID4gKG1heF9ieXRlcyAtIHNyY194KSkKKwkJCQkJY3VyX3NpemUgPSAobWF4X2J5dGVzIC0gc3JjX3gpOworCQkJfQorCisJCQlpZiAoKHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkICsgNDgpID4gcmRldi0+cjYwMF9ibGl0LnZiX3RvdGFsKSB7CisJCQkJV0FSTl9PTigxKTsKKworI2lmIDAKKwkJCQlyNjAwX3ZiX2liX3B1dChyZGV2KTsKKworCQkJCXI2MDBfbm9tbV9wdXRfdmIoZGV2KTsKKwkJCQlyNjAwX25vbW1fZ2V0X3ZiKGRldik7CisJCQkJaWYgKCFkZXZfcHJpdi0+YmxpdF92YikKKwkJCQkJcmV0dXJuOworCQkJCXNldF9zaGFkZXJzKGRldik7CisJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOworI2VuZGlmCisJCQl9CisKKwkJCXZiWzBdID0gaTJmKGRzdF94KTsKKwkJCXZiWzFdID0gMDsKKwkJCXZiWzJdID0gaTJmKHNyY194KTsKKwkJCXZiWzNdID0gMDsKKworCQkJdmJbNF0gPSBpMmYoZHN0X3gpOworCQkJdmJbNV0gPSBpMmYoaCk7CisJCQl2Yls2XSA9IGkyZihzcmNfeCk7CisJCQl2Yls3XSA9IGkyZihoKTsKKworCQkJdmJbOF0gPSBpMmYoZHN0X3ggKyBjdXJfc2l6ZSk7CisJCQl2Yls5XSA9IGkyZihoKTsKKwkJCXZiWzEwXSA9IGkyZihzcmNfeCArIGN1cl9zaXplKTsKKwkJCXZiWzExXSA9IGkyZihoKTsKKworCQkJLyogc3JjIDkgKi8KKwkJCXNldF90ZXhfcmVzb3VyY2UocmRldiwgRk1UXzgsCisJCQkJCSBzcmNfeCArIGN1cl9zaXplLCBoLCBzcmNfeCArIGN1cl9zaXplLAorCQkJCQkgc3JjX2dwdV9hZGRyKTsKKworCQkJLyogNSAqLworCQkJY3Bfc2V0X3N1cmZhY2Vfc3luYyhyZGV2LAorCQkJCQkgICAgUEFDS0VUM19UQ19BQ1RJT05fRU5BLCAoc3JjX3ggKyBjdXJfc2l6ZSAqIGgpLCBzcmNfZ3B1X2FkZHIpOworCisJCQkvKiBkc3QgMjMgKi8KKwkJCXNldF9yZW5kZXJfdGFyZ2V0KHJkZXYsIENPTE9SXzgsCisJCQkJCSAgZHN0X3ggKyBjdXJfc2l6ZSwgaCwKKwkJCQkJICBkc3RfZ3B1X2FkZHIpOworCisJCQkvKiBzY2lzc29ycyAxMiAqLworCQkJc2V0X3NjaXNzb3JzKHJkZXYsIGRzdF94LCAwLCBkc3RfeCArIGN1cl9zaXplLCBoKTsKKworCQkJLyogMTQgKi8KKwkJCXZiX2dwdV9hZGRyID0gcmRldi0+cjYwMF9ibGl0LnZiX2liLT5ncHVfYWRkciArIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkOworCQkJc2V0X3Z0eF9yZXNvdXJjZShyZGV2LCB2Yl9ncHVfYWRkcik7CisKKwkJCS8qIGRyYXcgMTAgKi8KKwkJCWRyYXdfYXV0byhyZGV2KTsKKworCQkJLyogNSAqLworCQkJY3Bfc2V0X3N1cmZhY2Vfc3luYyhyZGV2LAorCQkJCQkgICAgUEFDS0VUM19DQl9BQ1RJT05fRU5BIHwgUEFDS0VUM19DQjBfREVTVF9CQVNFX0VOQSwKKwkJCQkJICAgIGN1cl9zaXplICogaCwgZHN0X2dwdV9hZGRyKTsKKworCQkJdmIgKz0gMTI7CisJCQlyZGV2LT5yNjAwX2JsaXQudmJfdXNlZCArPSAxMiAqIDQ7CisKKwkJCXNyY19ncHVfYWRkciArPSBjdXJfc2l6ZSAqIGg7CisJCQlkc3RfZ3B1X2FkZHIgKz0gY3VyX3NpemUgKiBoOworCQkJc2l6ZV9ieXRlcyAtPSBjdXJfc2l6ZSAqIGg7CisJCX0KKwl9IGVsc2UgeworCQltYXhfYnl0ZXMgPSA4MTkyICogNDsKKworCQl3aGlsZSAoc2l6ZV9ieXRlcykgeworCQkJaW50IGN1cl9zaXplID0gc2l6ZV9ieXRlczsKKwkJCWludCBzcmNfeCA9IChzcmNfZ3B1X2FkZHIgJiAyNTUpOworCQkJaW50IGRzdF94ID0gKGRzdF9ncHVfYWRkciAmIDI1NSk7CisJCQlpbnQgaCA9IDE7CisJCQlzcmNfZ3B1X2FkZHIgPSBzcmNfZ3B1X2FkZHIgJiB+MjU1OworCQkJZHN0X2dwdV9hZGRyID0gZHN0X2dwdV9hZGRyICYgfjI1NTsKKworCQkJaWYgKCFzcmNfeCAmJiAhZHN0X3gpIHsKKwkJCQloID0gKGN1cl9zaXplIC8gbWF4X2J5dGVzKTsKKwkJCQlpZiAoaCA+IDgxOTIpCisJCQkJCWggPSA4MTkyOworCQkJCWlmIChoID09IDApCisJCQkJCWggPSAxOworCQkJCWVsc2UKKwkJCQkJY3VyX3NpemUgPSBtYXhfYnl0ZXM7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdXJfc2l6ZSA+IG1heF9ieXRlcykKKwkJCQkJY3VyX3NpemUgPSBtYXhfYnl0ZXM7CisJCQkJaWYgKGN1cl9zaXplID4gKG1heF9ieXRlcyAtIGRzdF94KSkKKwkJCQkJY3VyX3NpemUgPSAobWF4X2J5dGVzIC0gZHN0X3gpOworCQkJCWlmIChjdXJfc2l6ZSA+IChtYXhfYnl0ZXMgLSBzcmNfeCkpCisJCQkJCWN1cl9zaXplID0gKG1heF9ieXRlcyAtIHNyY194KTsKKwkJCX0KKworCQkJaWYgKChyZGV2LT5yNjAwX2JsaXQudmJfdXNlZCArIDQ4KSA+IHJkZXYtPnI2MDBfYmxpdC52Yl90b3RhbCkgeworCQkJCVdBUk5fT04oMSk7CisJCQl9CisjaWYgMAorCQkJaWYgKChyZGV2LT5ibGl0X3ZiLT51c2VkICsgNDgpID4gcmRldi0+YmxpdF92Yi0+dG90YWwpIHsKKwkJCQlyNjAwX25vbW1fcHV0X3ZiKGRldik7CisJCQkJcjYwMF9ub21tX2dldF92YihkZXYpOworCQkJCWlmICghcmRldi0+YmxpdF92YikKKwkJCQkJcmV0dXJuOworCisJCQkJc2V0X3NoYWRlcnMoZGV2KTsKKwkJCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CisJCQl9CisjZW5kaWYKKworCQkJdmJbMF0gPSBpMmYoZHN0X3ggLyA0KTsKKwkJCXZiWzFdID0gMDsKKwkJCXZiWzJdID0gaTJmKHNyY194IC8gNCk7CisJCQl2YlszXSA9IDA7CisKKwkJCXZiWzRdID0gaTJmKGRzdF94IC8gNCk7CisJCQl2Yls1XSA9IGkyZihoKTsKKwkJCXZiWzZdID0gaTJmKHNyY194IC8gNCk7CisJCQl2Yls3XSA9IGkyZihoKTsKKworCQkJdmJbOF0gPSBpMmYoKGRzdF94ICsgY3VyX3NpemUpIC8gNCk7CisJCQl2Yls5XSA9IGkyZihoKTsKKwkJCXZiWzEwXSA9IGkyZigoc3JjX3ggKyBjdXJfc2l6ZSkgLyA0KTsKKwkJCXZiWzExXSA9IGkyZihoKTsKKworCQkJLyogc3JjIDkgKi8KKwkJCXNldF90ZXhfcmVzb3VyY2UocmRldiwgRk1UXzhfOF84XzgsCisJCQkJCSAoc3JjX3ggKyBjdXJfc2l6ZSkgLyA0LAorCQkJCQkgaCwgKHNyY194ICsgY3VyX3NpemUpIC8gNCwKKwkJCQkJIHNyY19ncHVfYWRkcik7CisJCQkvKiA1ICovCisJCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCisJCQkJCSAgICBQQUNLRVQzX1RDX0FDVElPTl9FTkEsIChzcmNfeCArIGN1cl9zaXplICogaCksIHNyY19ncHVfYWRkcik7CisKKwkJCS8qIGRzdCAyMyAqLworCQkJc2V0X3JlbmRlcl90YXJnZXQocmRldiwgQ09MT1JfOF84XzhfOCwKKwkJCQkJICAoZHN0X3ggKyBjdXJfc2l6ZSkgLyA0LCBoLAorCQkJCQkgIGRzdF9ncHVfYWRkcik7CisKKwkJCS8qIHNjaXNzb3JzIDEyICAqLworCQkJc2V0X3NjaXNzb3JzKHJkZXYsIChkc3RfeCAvIDQpLCAwLCAoZHN0X3ggKyBjdXJfc2l6ZSAvIDQpLCBoKTsKKworCQkJLyogVmVydGV4IGJ1ZmZlciBzZXR1cCAxNCAqLworCQkJdmJfZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQudmJfaWItPmdwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnZiX3VzZWQ7CisJCQlzZXRfdnR4X3Jlc291cmNlKHJkZXYsIHZiX2dwdV9hZGRyKTsKKworCQkJLyogZHJhdyAxMCAqLworCQkJZHJhd19hdXRvKHJkZXYpOworCisJCQkvKiA1ICovCisJCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCisJCQkJCSAgICBQQUNLRVQzX0NCX0FDVElPTl9FTkEgfCBQQUNLRVQzX0NCMF9ERVNUX0JBU0VfRU5BLAorCQkJCQkgICAgY3VyX3NpemUgKiBoLCBkc3RfZ3B1X2FkZHIpOworCisJCQkvKiA3OCByaW5nIGR3b3JkcyBwZXIgbG9vcCAqLworCQkJdmIgKz0gMTI7CisJCQlyZGV2LT5yNjAwX2JsaXQudmJfdXNlZCArPSAxMiAqIDQ7CisKKwkJCXNyY19ncHVfYWRkciArPSBjdXJfc2l6ZSAqIGg7CisJCQlkc3RfZ3B1X2FkZHIgKz0gY3VyX3NpemUgKiBoOworCQkJc2l6ZV9ieXRlcyAtPSBjdXJfc2l6ZSAqIGg7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ1ZTgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCkBAIC0wLDAgKzEsMTA3MiBAQAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworY29uc3QgdTMyIHI2eHhfZGVmYXVsdF9zdGF0ZVtdID0KK3sKKwkweGMwMDAyNDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxMjgwMCwKKwkweDgwMDAwMDAwLAorCTB4ODAwMDAwMDAsCisJMHhjMDAwNDYwMCwKKwkweDAwMDAwMDE2LAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDAxMCwKKwkweDAwMDI4MDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDAxMCwKKwkweDAwMDA4MDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDU0MiwKKwkweDA3MDAwMDAzLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDVjNSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDM2MywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDYwYywKKwkweDgyMDAwMDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDYwZSwKKwkweDAxMDIwMjA0LAorCTB4YzAwMTZmMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTZmMDAsCisJMHgwMDAwMDAwMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwOTY5MDAsCisJMHgwMDAwMDIyYSwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwMDQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwMGEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwMGIsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMGMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMGQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzNDMsCisJMHgwMDAwMDA2MCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzNDQsCisJMHgwMDAwMDA0MCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzNTEsCisJMHgwMDAwYWEwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMDQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMGUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDQ2OTAwLAorCTB4MDAwMDAxMDUsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDM2OTAwLAorCTB4MDAwMDAxMDksCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDA0NjkwMCwKKwkweDAwMDAwMzBjLAorCTB4MDEwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDA0NjkwMCwKKwkweDAwMDAwMDQ4LAorCTB4M2Y4MDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDhlLAorCTB4MDAwMDAwMGYsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDgwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDgzLAorCTB4MDAwMGZmZmYsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDg0LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDg1LAorCTB4MjAwMDIwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDg2LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDg3LAorCTB4MjAwMDIwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDg4LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDg5LAorCTB4MjAwMDIwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDhhLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDhiLAorCTB4MjAwMDIwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDhjLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk0LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk1LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGI0LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTYsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTcsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYjYsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5OCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5OSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiOCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDlhLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDliLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGJhLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWMsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWQsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYmMsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5ZSwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5ZiwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiZSwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGEwLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGExLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGMwLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTIsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTMsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYzIsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhNCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhNSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjNCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE2LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE3LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGM2LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTgsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTksCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYzgsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhYSwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhYiwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjYSwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFjLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFkLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGNjLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWUsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWYsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwY2UsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBiMCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBiMSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBkMCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGIyLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGIzLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGQyLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOTMsCisJMHgwMDAwNDAxMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzMDEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzMTIsCisJMHhmZmZmZmZmZiwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzMDcsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzMDgsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOTIsCisJMHgwMDAwMDAwMCwKKwkweGMwMDY2OTAwLAorCTB4MDAwMDAxMGYsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjA2LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjA3LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjA4LAorCTB4MDAwMDAwMDAsCisJMHhjMDA0NjkwMCwKKwkweDAwMDAwMzAzLAorCTB4M2Y4MDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjA1LAorCTB4MDAwMDAwMDQsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjgwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjgxLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzdlLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzgyLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzgwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzgzLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzgxLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjgyLAorCTB4MDAwMDAwMDgsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzAyLAorCTB4MDAwMDAwMmQsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzdmLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWIyLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWI2LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWI3LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWI4LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWI5LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjI1LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjI5LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjM3LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTAwLAorCTB4MDAwMDA4MDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTAxLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTAyLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmE4LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmE5LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTAzLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjg0LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjkwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjg1LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjg2LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjg3LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjg4LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjg5LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjhhLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjhiLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjhjLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjhkLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjhlLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjhmLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmExLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmE1LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmFjLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmFkLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmFlLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmM4LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjA2LAorCTB4MDAwMDAxMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjA0LAorCTB4MDAwMTAwMDAsCisJMHhjMDAzNmUwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMTIsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4ZiwKKwkweDAwMDAwMDBmLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFlOCwKKwkweDAwMDAwMDAxLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwMiwKKwkweDAwY2MwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNSwKKwkweDAwMDAwMjQ0LAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwMywKKwkweDAwMDAwMjEwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDE4NSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiMywKKwkweDAwMDAwMDAxLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiNCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDE5MSwKKwkweDAwMDAwYjAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiNSwKKwkweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyIHI3eHhfZGVmYXVsdF9zdGF0ZVtdID0KK3sKKwkweGMwMDEyODAwLAorCTB4ODAwMDAwMDAsCisJMHg4MDAwMDAwMCwKKwkweGMwMDA0NjAwLAorCTB4MDAwMDAwMTYsCisJMHhjMDAxNjgwMCwKKwkweDAwMDAwMDEwLAorCTB4MDAwMjgwMDAsCisJMHhjMDAxNjgwMCwKKwkweDAwMDAwMDEwLAorCTB4MDAwMDgwMDAsCisJMHhjMDAxNjgwMCwKKwkweDAwMDAwNTQyLAorCTB4MDcwMDAwMDIsCisJMHhjMDAxNjgwMCwKKwkweDAwMDAwNWM1LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjgwMCwKKwkweDAwMDAwMzYzLAorCTB4MDAwMDQwMDAsCisJMHhjMDAxNjgwMCwKKwkweDAwMDAwNjBjLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjgwMCwKKwkweDAwMDAwNjBlLAorCTB4MDA0MjAyMDQsCisJMHhjMDAxNmYwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNmYwMCwKKwkweDAwMDAwMDAxLAorCTB4MDAwMDAwMDAsCisJMHhjMDA5NjkwMCwKKwkweDAwMDAwMjJhLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDAwNCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDAwYSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDAwYiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwYywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwZCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM0MywKKwkweDAwMDAwMDYwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM0NCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM1MSwKKwkweDAwMDBhYTAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwNCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwZSwKKwkweDAwMDAwMDAwLAorCTB4YzAwNDY5MDAsCisJMHgwMDAwMDEwNSwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwNDY5MDAsCisJMHgwMDAwMDMwYywKKwkweDAxMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4ZSwKKwkweDAwMDAwMDBmLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4MywKKwkweDAwMDBmZmZmLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NywKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4OCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4OSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4YSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4YiwKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4YywKKwkweGFhYWFhYWFhLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5NCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5NSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiNCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk2LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk3LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGI2LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTgsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTksCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYjgsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5YSwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5YiwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiYSwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDljLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDlkLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGJjLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWUsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWYsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYmUsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhMCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhMSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjMCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGEyLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGEzLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGMyLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTQsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTUsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYzQsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhNiwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhNywKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjNiwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE4LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE5LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGM4LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWEsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWIsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwY2EsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhYywKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhZCwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjYywKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFlLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFmLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGNlLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYjAsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYjEsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwZDAsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBiMiwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBiMywKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBkMiwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjkzLAorCTB4MDA1MTQwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzAxLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzEyLAorCTB4ZmZmZmZmZmYsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzA3LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzA4LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjgzLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjkyLAorCTB4MDAwMDAwMDAsCisJMHhjMDA2NjkwMCwKKwkweDAwMDAwMTBmLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwNDY5MDAsCisJMHgwMDAwMDMwMywKKwkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNSwKKwkweDAwMDAwMDA0LAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4MSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM3ZSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4MiwKKwkweDAwMDAwMDA4LAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDMwMiwKKwkweDAwMDAwMDJkLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM3ZiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiMiwKKwkweDAwMDAwMDAxLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiNiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiNywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiOSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIyNSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIyOSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIzNywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMCwKKwkweDAwMDAwODAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhOSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI5MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4OCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4OSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4YSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4YiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4YywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4ZCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4ZSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4ZiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhNSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhYywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhZCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhZSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJjOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNiwKKwkweDAwMDAwMTAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNCwKKwkweDAwMDEwMDAwLAorCTB4YzAwMzZlMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDEyLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOGYsCisJMHgwMDAwMDAwZiwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxZTgsCisJMHgwMDAwMDAwMSwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDIsCisJMHgwMGNjMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDUsCisJMHgwMDAwMDI0NCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDMsCisJMHgwMDAwMDIxMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxODUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjMsCisJMHgwMDAwMDAwMSwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxOTEsCisJMHgwMDAwMGIwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjUsCisJMHgwMDAwMDAwMCwKK307CisKKy8qIHNhbWUgZm9yIHI2eHgvcjd4eCAqLworY29uc3QgdTMyIHI2eHhfdnNbXSA9Cit7CisJMHgwMDAwMDAwNCwKKwkweDgxMDAwMDAwLAorCTB4MDAwMDIwM2MsCisJMHg5NDAwMGIwOCwKKwkweDAwMDA0MDAwLAorCTB4MTQyMDBiMWEsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4M2MwMDAwMDAsCisJMHg2OGNkMTAwMCwKKwkweDAwMDgwMDAwLAorCTB4MDAwMDAwMDAsCit9OworCitjb25zdCB1MzIgcjZ4eF9wc1tdID0KK3sKKwkweDAwMDAwMDAyLAorCTB4ODA4MDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDk0MjAwNjg4LAorCTB4MDAwMDAwMTAsCisJMHgwMDBkMTAwMCwKKwkweGIwODAwMDAwLAorCTB4MDAwMDAwMDAsCit9OworCitjb25zdCB1MzIgcjZ4eF9wc19zaXplID0gQVJSQVlfU0laRShyNnh4X3BzKTsKK2NvbnN0IHUzMiByNnh4X3ZzX3NpemUgPSBBUlJBWV9TSVpFKHI2eHhfdnMpOworY29uc3QgdTMyIHI2eHhfZGVmYXVsdF9zaXplID0gQVJSQVlfU0laRShyNnh4X2RlZmF1bHRfc3RhdGUpOworY29uc3QgdTMyIHI3eHhfZGVmYXVsdF9zaXplID0gQVJSQVlfU0laRShyN3h4X2RlZmF1bHRfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzNiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmgKQEAgLTAsMCArMSwxNCBAQAorCisjaWZuZGVmIFI2MDBfQkxJVF9TSEFERVJTX0gKKyNkZWZpbmUgUjYwMF9CTElUX1NIQURFUlNfSAorCitleHRlcm4gY29uc3QgdTMyIHI2eHhfcHNbXTsKK2V4dGVybiBjb25zdCB1MzIgcjZ4eF92c1tdOworZXh0ZXJuIGNvbnN0IHUzMiByN3h4X2RlZmF1bHRfc3RhdGVbXTsKK2V4dGVybiBjb25zdCB1MzIgcjZ4eF9kZWZhdWx0X3N0YXRlW107CisKKworZXh0ZXJuIGNvbnN0IHUzMiByNnh4X3BzX3NpemUsIHI2eHhfdnNfc2l6ZTsKK2V4dGVybiBjb25zdCB1MzIgcjZ4eF9kZWZhdWx0X3NpemUsIHI3eHhfZGVmYXVsdF9zaXplOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKaW5kZXggMjBmMTc5MC4uNmQ1YTcxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTMxLDcgKzMxLDM4IEBACiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcnYuaCIKIAotI2luY2x1ZGUgInI2MDBfbWljcm9jb2RlLmgiCisjZGVmaW5lIFBGUF9VQ09ERV9TSVpFIDU3NgorI2RlZmluZSBQTTRfVUNPREVfU0laRSAxNzkyCisjZGVmaW5lIFI3MDBfUEZQX1VDT0RFX1NJWkUgODQ4CisjZGVmaW5lIFI3MDBfUE00X1VDT0RFX1NJWkUgMTM2MAorCisvKiBGaXJtd2FyZSBOYW1lcyAqLworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUjYwMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SNjAwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MTBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MTBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYzMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYzMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjIwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjIwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzVfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzVfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjY3MF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjY3MF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JTNzgwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JTNzgwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3NzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3NzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjczMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjczMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzEwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzEwX21lLmJpbiIpOworCisKK2ludCByNjAwX2NzX2xlZ2FjeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQl1bnNpZ25lZCBmYW1pbHksIHUzMiAqaWIsIGludCAqbCk7Cit2b2lkIHI2MDBfY3NfbGVnYWN5X2luaXQodm9pZCk7CisKIAogIyBkZWZpbmUgQVRJX1BDSUdBUlRfUEFHRV9TSVpFCQk0MDk2CS8qKjwgUENJIEdBUlQgcGFnZSBzaXplICovCiAjIGRlZmluZSBBVElfUENJR0FSVF9QQUdFX01BU0sJCSh+KEFUSV9QQ0lHQVJUX1BBR0VfU0laRS0xKSkKQEAgLTI3NSwxMSArMzA2LDkzIEBACiAJcjYwMF92bV9mbHVzaF9nYXJ0X3JhbmdlKGRldik7CiB9CiAKLS8qIGxvYWQgcjYwMCBtaWNyb2NvZGUgKi8KK3N0YXRpYyBpbnQgcjYwMF9jcF9pbml0X21pY3JvY29kZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwljb25zdCBjaGFyICpjaGlwX25hbWU7CisJc2l6ZV90IHBmcF9yZXFfc2l6ZSwgbWVfcmVxX3NpemU7CisJY2hhciBmd19uYW1lWzMwXTsKKwlpbnQgZXJyOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInI2MDBfY3AiLCAwLCBOVUxMLCAwKTsKKwllcnIgPSBJU19FUlIocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInI2MDBfY3A6IEZhaWxlZCB0byByZWdpc3RlciBmaXJtd2FyZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1I2MDA6ICBjaGlwX25hbWUgPSAiUjYwMCI7ICBicmVhazsKKwljYXNlIENISVBfUlY2MTA6IGNoaXBfbmFtZSA9ICJSVjYxMCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjYzMDogY2hpcF9uYW1lID0gIlJWNjMwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNjIwOiBjaGlwX25hbWUgPSAiUlY2MjAiOyBicmVhazsKKwljYXNlIENISVBfUlY2MzU6IGNoaXBfbmFtZSA9ICJSVjYzNSI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDogY2hpcF9uYW1lID0gIlJWNjcwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDogY2hpcF9uYW1lID0gIlJTNzgwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNzcwOiBjaGlwX25hbWUgPSAiUlY3NzAiOyBicmVhazsKKwljYXNlIENISVBfUlY3MzA6CisJY2FzZSBDSElQX1JWNzQwOiBjaGlwX25hbWUgPSAiUlY3MzAiOyBicmVhazsKKwljYXNlIENISVBfUlY3MTA6IGNoaXBfbmFtZSA9ICJSVjcxMCI7IGJyZWFrOworCWRlZmF1bHQ6ICAgICAgICAgQlVHKCk7CisJfQorCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApIHsKKwkJcGZwX3JlcV9zaXplID0gUjcwMF9QRlBfVUNPREVfU0laRSAqIDQ7CisJCW1lX3JlcV9zaXplID0gUjcwMF9QTTRfVUNPREVfU0laRSAqIDQ7CisJfSBlbHNlIHsKKwkJcGZwX3JlcV9zaXplID0gUEZQX1VDT0RFX1NJWkUgKiA0OworCQltZV9yZXFfc2l6ZSA9IFBNNF9VQ09ERV9TSVpFICogMTI7CisJfQorCisJRFJNX0lORk8oIkxvYWRpbmcgJXMgQ1AgTWljcm9jb2RlXG4iLCBjaGlwX25hbWUpOworCisJc25wcmludGYoZndfbmFtZSwgc2l6ZW9mKGZ3X25hbWUpLCAicmFkZW9uLyVzX3BmcC5iaW4iLCBjaGlwX25hbWUpOworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmRldl9wcml2LT5wZnBfZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmIChkZXZfcHJpdi0+cGZwX2Z3LT5zaXplICE9IHBmcF9yZXFfc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyNjAwX2NwOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIGRldl9wcml2LT5wZnBfZnctPnNpemUsIGZ3X25hbWUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzbnByaW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfbWUuYmluIiwgY2hpcF9uYW1lKTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZkZXZfcHJpdi0+bWVfZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmIChkZXZfcHJpdi0+bWVfZnctPnNpemUgIT0gbWVfcmVxX3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicjYwMF9jcDogQm9ndXMgbGVuZ3RoICV6dSBpbiBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bWVfZnctPnNpemUsIGZ3X25hbWUpOworCQllcnIgPSAtRUlOVkFMOworCX0KK291dDoKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKworCWlmIChlcnIpIHsKKwkJaWYgKGVyciAhPSAtRUlOVkFMKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgInI2MDBfY3A6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCSAgICAgICBmd19uYW1lKTsKKwkJcmVsZWFzZV9maXJtd2FyZShkZXZfcHJpdi0+cGZwX2Z3KTsKKwkJZGV2X3ByaXYtPnBmcF9mdyA9IE5VTEw7CisJCXJlbGVhc2VfZmlybXdhcmUoZGV2X3ByaXYtPm1lX2Z3KTsKKwkJZGV2X3ByaXYtPm1lX2Z3ID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHZvaWQgcjYwMF9jcF9sb2FkX21pY3JvY29kZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CisJY29uc3QgX19iZTMyICpmd19kYXRhOwogCWludCBpOwogCisJaWYgKCFkZXZfcHJpdi0+bWVfZncgfHwgIWRldl9wcml2LT5wZnBfZncpCisJCXJldHVybjsKKwogCXI2MDBfZG9fY3Bfc3RvcChkZXZfcHJpdik7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLApAQCAtMjkyLDExNSArNDA1LDE4IEBACiAJRFJNX1VERUxBWSgxNTAwMCk7CiAJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKIAorCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopZGV2X3ByaXYtPm1lX2Z3LT5kYXRhOwogCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFICogMzsgaSsrKQorCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCSAgICAgYmUzMl90b19jcHVwKGZ3X2RhdGErKykpOwogCi0JaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I2MDApKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFI2MDAgQ1AgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUjYwMF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSNjAwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFI2MDBfY3BfbWljcm9jb2RlW2ldWzJdKTsKLQkJfQorCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopZGV2X3ByaXYtPnBmcF9mdy0+ZGF0YTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLAorCQkJICAgICBiZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CiAKLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSNjAwIFBGUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSNjAwX3BmcF9taWNyb2NvZGVbaV0pOwotCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MTApKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIENQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsyXSk7Ci0JCX0KLQotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIFBGUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYxMF9wZnBfbWljcm9jb2RlW2ldKTsKLQl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSkgewotCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMl0pOwotCQl9Ci0KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBQRlAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2MzBfcGZwX21pY3JvY29kZVtpXSk7Ci0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkpIHsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgQ1AgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzJdKTsKLQkJfQotCi0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgUEZQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjIwX3BmcF9taWNyb2NvZGVbaV0pOwotCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MzUpKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IENQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsyXSk7Ci0JCX0KLQotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IFBGUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYzNV9wZnBfbWljcm9jb2RlW2ldKTsKLQl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjcwKSkgewotCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMl0pOwotCQl9Ci0KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBQRlAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2NzBfcGZwX21pY3JvY29kZVtpXSk7Ci0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc4MCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM4ODApKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJTNzgwL1JTODgwIENQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJTNzgwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJTNzgwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJTNzgwX2NwX21pY3JvY29kZVtpXVsyXSk7Ci0JCX0KLQotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJTNzgwL1JTODgwIFBGUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSUzc4MF9wZnBfbWljcm9jb2RlW2ldKTsKLQl9CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwogCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1JBRERSLCAwKTsKQEAgLTQ1OSwxMSArNDc1LDE0IEBACiAJcjYwMF92bV9mbHVzaF9nYXJ0X3JhbmdlKGRldik7CiB9CiAKLS8qIGxvYWQgcjYwMCBtaWNyb2NvZGUgKi8KIHN0YXRpYyB2b2lkIHI3MDBfY3BfbG9hZF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQogeworCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKIAlpbnQgaTsKIAorCWlmICghZGV2X3ByaXYtPm1lX2Z3IHx8ICFkZXZfcHJpdi0+cGZwX2Z3KQorCQlyZXR1cm47CisKIAlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKQEAgLTQ3Niw0OCArNDk1LDE4IEBACiAJRFJNX1VERUxBWSgxNTAwMCk7CiAJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKIAorCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopZGV2X3ByaXYtPnBmcF9mdy0+ZGF0YTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IFI3MDBfUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIGJlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CiAKLQlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3NzApKSB7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY3NzAvUlY3OTAgUEZQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY3NzBfcGZwX21pY3JvY29kZVtpXSk7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKWRldl9wcml2LT5tZV9mdy0+ZGF0YTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BNNF9VQ09ERV9TSVpFOyBpKyspCisJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLCBiZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKIAotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjc3MC9SVjc5MCBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsIFJWNzcwX2NwX21pY3JvY29kZVtpXSk7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7Ci0KLQl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzMwKSB8fAotCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc0MCkpIHsKLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjczMC9SVjc0MCBQRlAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFI3MDBfUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjczMF9wZnBfbWljcm9jb2RlW2ldKTsKLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCi0JCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNzMwL1JWNzQwIENQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BNNF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwgUlY3MzBfY3BfbWljcm9jb2RlW2ldKTsKLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKLQotCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApKSB7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY3MTAgUEZQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY3MTBfcGZwX21pY3JvY29kZVtpXSk7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjcxMCBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsIFJWNzEwX2NwX21pY3JvY29kZVtpXSk7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7Ci0KLQl9CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwogCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1JBRERSLCAwKTsKQEAgLTE4NzQsNiArMTg2Myw4IEBACiAKIAlEUk1fREVCVUcoIlxuIik7CiAKKwltdXRleF9pbml0KCZkZXZfcHJpdi0+Y3NfbXV0ZXgpOworCXI2MDBfY3NfbGVnYWN5X2luaXQoKTsKIAkvKiBpZiB3ZSByZXF1aXJlIG5ldyBtZW1vcnkgbWFwIGJ1dCB3ZSBkb24ndCBoYXZlIGl0IGZhaWwgKi8KIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9ORVdfTUVNTUFQKSAmJiAhZGV2X3ByaXYtPm5ld19tZW1tYXApIHsKIAkJRFJNX0VSUk9SKCJDYW5ub3QgaW5pdGlhbGlzZSBEUk0gb24gdGhpcyBjYXJkXG5UaGlzIGNhcmQgcmVxdWlyZXMgYSBuZXcgWC5vcmcgRERYIGZvciAzRFxuIik7CkBAIC0xOTA1LDcgKzE4OTYsNyBAQAogCS8qIEVuYWJsZSB2Ymxhbmsgb24gQ1JUQzEgZm9yIG9sZGVyIFggc2VydmVycwogCSAqLwogCWRldl9wcml2LT52YmxhbmtfY3J0YyA9IERSTV9SQURFT05fVkJMQU5LX0NSVEMxOwotCisJZGV2X3ByaXYtPmRvX2JveGVzID0gMDsKIAlkZXZfcHJpdi0+Y3BfbW9kZSA9IGluaXQtPmNwX21vZGU7CiAKIAkvKiBXZSBkb24ndCBzdXBwb3J0IGFueXRoaW5nIG90aGVyIHRoYW4gYnVzLW1hc3RlcmluZyByaW5nIG1vZGUsCkBAIC0xOTkxLDExICsxOTgyLDExIEBACiAJfSBlbHNlCiAjZW5kaWYKIAl7Ci0JCWRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgPSAodm9pZCAqKWRldl9wcml2LT5jcF9yaW5nLT5vZmZzZXQ7CisJCWRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jcF9yaW5nLT5vZmZzZXQ7CiAJCWRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSA9Ci0JCSAgICAodm9pZCAqKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKKwkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OwogCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKIAogCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCiAJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOwpAQCAtMjE0Nyw2ICsyMTM4LDE0IEBACiAJCQlyNjAwX3ZtX2luaXQoZGV2KTsKIAl9CiAKKwlpZiAoIWRldl9wcml2LT5tZV9mdyB8fCAhZGV2X3ByaXYtPnBmcF9mdykgeworCQlpbnQgZXJyID0gcjYwMF9jcF9pbml0X21pY3JvY29kZShkZXZfcHJpdik7CisJCWlmIChlcnIpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUhXG4iKTsKKwkJCXI2MDBfZG9fY2xlYW51cF9jcChkZXYpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KIAlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApKQogCQlyNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKIAllbHNlCkBAIC0yMjkxLDMgKzIyOTAsMjM5IEBACiAKIAlyZXR1cm4gMDsKIH0KKwordm9pZCByNjAwX2NwX2Rpc3BhdGNoX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gZmlsZV9wcml2LT5tYXN0ZXI7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gbWFzdGVyLT5kcml2ZXJfcHJpdjsKKwlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdjsKKwlpbnQgbmJveCA9IHNhcmVhX3ByaXYtPm5ib3g7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKnBib3ggPSBzYXJlYV9wcml2LT5ib3hlczsKKwlpbnQgaSwgY3BwLCBzcmNfcGl0Y2gsIGRzdF9waXRjaDsKKwl1aW50NjRfdCBzcmMsIGRzdDsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlpZiAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA9PSBSQURFT05fQ09MT1JfRk9STUFUX0FSR0I4ODg4KQorCQljcHAgPSA0OworCWVsc2UKKwkJY3BwID0gMjsKKworCWlmIChzYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID09IDApIHsKKwkJc3JjX3BpdGNoID0gZGV2X3ByaXYtPmJhY2tfcGl0Y2g7CisJCWRzdF9waXRjaCA9IGRldl9wcml2LT5mcm9udF9waXRjaDsKKwkJc3JjID0gZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCQlkc3QgPSBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCX0gZWxzZSB7CisJCXNyY19waXRjaCA9IGRldl9wcml2LT5mcm9udF9waXRjaDsKKwkJZHN0X3BpdGNoID0gZGV2X3ByaXYtPmJhY2tfcGl0Y2g7CisJCXNyYyA9IGRldl9wcml2LT5mcm9udF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CisJCWRzdCA9IGRldl9wcml2LT5iYWNrX29mZnNldCArIGRldl9wcml2LT5mYl9sb2NhdGlvbjsKKwl9CisKKwlpZiAocjYwMF9wcmVwYXJlX2JsaXRfY29weShkZXYsIGZpbGVfcHJpdikpIHsKKwkJRFJNX0VSUk9SKCJ1bmFibGUgdG8gYWxsb2NhdGUgdmVydGV4IGJ1ZmZlciBmb3Igc3dhcCBidWZmZXJcbiIpOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsKKwkJaW50IHggPSBwYm94W2ldLngxOworCQlpbnQgeSA9IHBib3hbaV0ueTE7CisJCWludCB3ID0gcGJveFtpXS54MiAtIHg7CisJCWludCBoID0gcGJveFtpXS55MiAtIHk7CisKKwkJRFJNX0RFQlVHKCIlZCwlZC0lZCwlZFxuIiwgeCwgeSwgdywgaCk7CisKKwkJcjYwMF9ibGl0X3N3YXAoZGV2LAorCQkJICAgICAgIHNyYywgZHN0LAorCQkJICAgICAgIHgsIHksIHgsIHksIHcsIGgsCisJCQkgICAgICAgc3JjX3BpdGNoLCBkc3RfcGl0Y2gsIGNwcCk7CisJfQorCXI2MDBfZG9uZV9ibGl0X2NvcHkoZGV2KTsKKworCS8qIEluY3JlbWVudCB0aGUgZnJhbWUgY291bnRlci4gIFRoZSBjbGllbnQtc2lkZSAzRCBkcml2ZXIgbXVzdAorCSAqIHRocm90dGxlIHRoZSBmcmFtZXJhdGUgYnkgd2FpdGluZyBmb3IgdGhpcyB2YWx1ZSBiZWZvcmUKKwkgKiBwZXJmb3JtaW5nIHRoZSBzd2FwYnVmZmVyIGlvY3RsLgorCSAqLworCXNhcmVhX3ByaXYtPmxhc3RfZnJhbWUrKzsKKworCUJFR0lOX1JJTkcoMyk7CisJUjYwMF9GUkFNRV9BR0Uoc2FyZWFfcHJpdi0+bGFzdF9mcmFtZSk7CisJQURWQU5DRV9SSU5HKCk7Cit9CisKK2ludCByNjAwX2NwX2Rpc3BhdGNoX3RleHR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkgICAgIGRybV9yYWRlb25fdGV4dHVyZV90ICp0ZXgsCisJCQkgICAgIGRybV9yYWRlb25fdGV4X2ltYWdlX3QgKmltYWdlKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9idWYgKmJ1ZjsKKwl1MzIgKmJ1ZmZlcjsKKwljb25zdCB1OCBfX3VzZXIgKmRhdGE7CisJaW50IHNpemUsIHBhc3Nfc2l6ZTsKKwl1NjQgc3JjX29mZnNldCwgZHN0X29mZnNldDsKKworCWlmICghcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgdGV4LT5vZmZzZXQpKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBkZXN0aW5hdGlvbiBvZmZzZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB0aGlzIG1pZ2h0IGZhaWwgZm9yIHplcm8tc2l6ZWQgdXBsb2FkcyAtIGFyZSB0aG9zZSBpbGxlZ2FsPyAqLworCWlmICghcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgdGV4LT5vZmZzZXQgKyB0ZXgtPmhlaWdodCAqIHRleC0+cGl0Y2ggLSAxKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgZmluYWwgZGVzdGluYXRpb24gb2Zmc2V0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2l6ZSA9IHRleC0+aGVpZ2h0ICogdGV4LT5waXRjaDsKKworCWlmIChzaXplID09IDApCisJCXJldHVybiAwOworCisJZHN0X29mZnNldCA9IHRleC0+b2Zmc2V0OworCisJaWYgKHI2MDBfcHJlcGFyZV9ibGl0X2NvcHkoZGV2LCBmaWxlX3ByaXYpKSB7CisJCURSTV9FUlJPUigidW5hYmxlIHRvIGFsbG9jYXRlIHZlcnRleCBidWZmZXIgZm9yIHN3YXAgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWRvIHsKKwkJZGF0YSA9IChjb25zdCB1OCBfX3VzZXIgKilpbWFnZS0+ZGF0YTsKKwkJcGFzc19zaXplID0gc2l6ZTsKKworCQlidWYgPSByYWRlb25fZnJlZWxpc3RfZ2V0KGRldik7CisJCWlmICghYnVmKSB7CisJCQlEUk1fREVCVUcoIkVBR0FJTlxuIik7CisJCQlpZiAoRFJNX0NPUFlfVE9fVVNFUih0ZXgtPmltYWdlLCBpbWFnZSwgc2l6ZW9mKCppbWFnZSkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKworCQlpZiAocGFzc19zaXplID4gYnVmLT50b3RhbCkKKwkJCXBhc3Nfc2l6ZSA9IGJ1Zi0+dG90YWw7CisKKwkJLyogRGlzcGF0Y2ggdGhlIGluZGlyZWN0IGJ1ZmZlci4KKwkJICovCisJCWJ1ZmZlciA9CisJCSAgICAodTMyICopICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArIGJ1Zi0+b2Zmc2V0KTsKKworCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGJ1ZmZlciwgZGF0YSwgcGFzc19zaXplKSkgeworCQkJRFJNX0VSUk9SKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwgcGFzc19zaXplKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJYnVmLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7CisJCWJ1Zi0+dXNlZCA9IHBhc3Nfc2l6ZTsKKwkJc3JjX29mZnNldCA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsgYnVmLT5vZmZzZXQ7CisKKwkJcjYwMF9ibGl0X2NvcHkoZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBwYXNzX3NpemUpOworCisJCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZpbGVfcHJpdi0+bWFzdGVyLCBidWYpOworCisJCS8qIFVwZGF0ZSB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgbmV4dCB0aW1lICovCisJCWltYWdlLT5kYXRhID0gKGNvbnN0IHU4IF9fdXNlciAqKWltYWdlLT5kYXRhICsgcGFzc19zaXplOworCQlkc3Rfb2Zmc2V0ICs9IHBhc3Nfc2l6ZTsKKwkJc2l6ZSAtPSBwYXNzX3NpemU7CisJfSB3aGlsZSAoc2l6ZSA+IDApOworCXI2MDBfZG9uZV9ibGl0X2NvcHkoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogTGVnYWN5IGNzIGlvY3RsCisgKi8KK3N0YXRpYyB1MzIgcmFkZW9uX2NzX2lkX2dldChzdHJ1Y3QgZHJtX3JhZGVvbl9wcml2YXRlICpyYWRlb24pCit7CisJLyogRklYTUU6IGNoZWNrIGlmIHdyYXAgYWZmZWN0IGxhc3QgcmVwb3J0ZWQgd3JhcCAmIHNlcXVlbmNlICovCisJcmFkZW9uLT5jc19pZF9zY250ID0gKHJhZGVvbi0+Y3NfaWRfc2NudCArIDEpICYgMHgwMEZGRkZGRjsKKwlpZiAoIXJhZGVvbi0+Y3NfaWRfc2NudCkgeworCQkvKiBpbmNyZW1lbnQgd3JhcCBjb3VudGVyICovCisJCXJhZGVvbi0+Y3NfaWRfd2NudCArPSAweDAxMDAwMDAwOworCQkvKiB2YWxpZCBzZXF1ZW5jZSBjb3VudGVyIHN0YXJ0IGF0IDEgKi8KKwkJcmFkZW9uLT5jc19pZF9zY250ID0gMTsKKwl9CisJcmV0dXJuIChyYWRlb24tPmNzX2lkX3NjbnQgfCByYWRlb24tPmNzX2lkX3djbnQpOworfQorCitzdGF0aWMgdm9pZCByNjAwX2NzX2lkX2VtaXQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgKmlkKQoreworCVJJTkdfTE9DQUxTOworCisJKmlkID0gcmFkZW9uX2NzX2lkX2dldChkZXZfcHJpdik7CisKKwkvKiBTQ1JBVENIIDIgKi8KKwlCRUdJTl9SSU5HKDMpOworCVI2MDBfQ0xFQVJfQUdFKCppZCk7CisJQURWQU5DRV9SSU5HKCk7CisJQ09NTUlUX1JJTkcoKTsKK30KKworc3RhdGljIGludCByNjAwX2liX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGRybV9maWxlICpmcHJpdiwKKwkJCXN0cnVjdCBkcm1fYnVmICoqYnVmZmVyKQoreworCXN0cnVjdCBkcm1fYnVmICpidWY7CisKKwkqYnVmZmVyID0gTlVMTDsKKwlidWYgPSByYWRlb25fZnJlZWxpc3RfZ2V0KGRldik7CisJaWYgKCFidWYpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJYnVmLT5maWxlX3ByaXYgPSBmcHJpdjsKKwkqYnVmZmVyID0gYnVmOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByNjAwX2liX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9idWYgKmJ1ZiwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZnByaXYsIGludCBsLCBpbnQgcikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGJ1ZikgeworCQlpZiAoIXIpCisJCQlyNjAwX2NwX2Rpc3BhdGNoX2luZGlyZWN0KGRldiwgYnVmLCAwLCBsICogNCk7CisJCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZwcml2LT5tYXN0ZXIsIGJ1Zik7CisJCUNPTU1JVF9SSU5HKCk7CisJfQorfQorCitpbnQgcjYwMF9jc19sZWdhY3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9yYWRlb25fY3MgKmNzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOworCXVuc2lnbmVkIGZhbWlseTsKKwlpbnQgbCwgciA9IDA7CisJdTMyICppYiwgY3NfaWQgPSAwOworCisJaWYgKGRldl9wcml2ID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmYW1pbHkgPSBkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0s7CisJaWYgKGZhbWlseSA8IENISVBfUjYwMCkgeworCQlEUk1fRVJST1IoImNzIGlvY3RsIHZhbGlkIG9ubHkgZm9yIFI2WFggJiBSN1hYIGluIGxlZ2FjeSBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW11dGV4X2xvY2soJmRldl9wcml2LT5jc19tdXRleCk7CisJLyogZ2V0IGliICovCisJciA9IHI2MDBfaWJfZ2V0KGRldiwgZnByaXYsICZidWYpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiaWJfZ2V0IGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlpYiA9IGRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArIGJ1Zi0+b2Zmc2V0OworCS8qIG5vdyBwYXJzZSBjb21tYW5kIHN0cmVhbSAqLworCXIgPSByNjAwX2NzX2xlZ2FjeShkZXYsIGRhdGEsICBmcHJpdiwgZmFtaWx5LCBpYiwgJmwpOworCWlmIChyKSB7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXI2MDBfaWJfZnJlZShkZXYsIGJ1ZiwgZnByaXYsIGwsIHIpOworCS8qIGVtaXQgY3MgaWQgc2VxdWVuY2UgKi8KKwlyNjAwX2NzX2lkX2VtaXQoZGV2X3ByaXYsICZjc19pZCk7CisJY3MtPmNzX2lkID0gY3NfaWQ7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Y3NfbXV0ZXgpOworCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I4OWNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTAsMCArMSw2NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgInI2MDBkLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCisKK3N0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKK3N0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19ub21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpOwordHlwZWRlZiBpbnQgKCpuZXh0X3JlbG9jX3QpKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyKiwgc3RydWN0IHJhZGVvbl9jc19yZWxvYyoqKTsKK3N0YXRpYyBuZXh0X3JlbG9jX3QgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyA9ICZyNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tOworCisvKioKKyAqIHI2MDBfY3NfcGFja2V0X3BhcnNlKCkgLSBwYXJzZSBjcCBwYWNrZXQgYW5kIHBvaW50IGliIGluZGV4IHRvIG5leHQgcGFja2V0CisgKiBAcGFyc2VyOglwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICogQHBrdDoJd2hlcmUgdG8gc3RvcmUgcGFja2V0IGluZm9ybWF0aW9ucworICoKKyAqIEFzc3VtZSB0aGF0IGNodW5rX2liX2luZGV4IGlzIHByb3Blcmx5IHNldC4gV2lsbCByZXR1cm4gLUVJTlZBTAorICogaWYgcGFja2V0IGlzIGJpZ2dlciB0aGFuIHJlbWFpbmluZyBpYiBzaXplLiBvciBpZiBwYWNrZXRzIGlzIHVua25vd24uCisgKiovCitpbnQgcjYwMF9jc19wYWNrZXRfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkJdW5zaWduZWQgaWR4KQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXVpbnQzMl90IGhlYWRlcjsKKworCWlmIChpZHggPj0gaWJfY2h1bmstPmxlbmd0aF9kdykgeworCQlEUk1fRVJST1IoIkNhbiBub3QgcGFyc2UgcGFja2V0IGF0ICVkIGFmdGVyIENTIGVuZCAlZCAhXG4iLAorCQkJICBpZHgsIGliX2NodW5rLT5sZW5ndGhfZHcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaGVhZGVyID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJcGt0LT5pZHggPSBpZHg7CisJcGt0LT50eXBlID0gQ1BfUEFDS0VUX0dFVF9UWVBFKGhlYWRlcik7CisJcGt0LT5jb3VudCA9IENQX1BBQ0tFVF9HRVRfQ09VTlQoaGVhZGVyKTsKKwlwa3QtPm9uZV9yZWdfd3IgPSAwOworCXN3aXRjaCAocGt0LT50eXBlKSB7CisJY2FzZSBQQUNLRVRfVFlQRTA6CisJCXBrdC0+cmVnID0gQ1BfUEFDS0VUMF9HRVRfUkVHKGhlYWRlcik7CisJCWJyZWFrOworCWNhc2UgUEFDS0VUX1RZUEUzOgorCQlwa3QtPm9wY29kZSA9IENQX1BBQ0tFVDNfR0VUX09QQ09ERShoZWFkZXIpOworCQlicmVhazsKKwljYXNlIFBBQ0tFVF9UWVBFMjoKKwkJcGt0LT5jb3VudCA9IC0xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVua25vd24gcGFja2V0IHR5cGUgJWQgYXQgJWQgIVxuIiwgcGt0LT50eXBlLCBpZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKChwa3QtPmNvdW50ICsgMSArIHBrdC0+aWR4KSA+PSBpYl9jaHVuay0+bGVuZ3RoX2R3KSB7CisJCURSTV9FUlJPUigiUGFja2V0ICglZDolZDolZCkgZW5kIGFmdGVyIENTIGJ1ZmZlciAoJWQpICFcbiIsCisJCQkgIHBrdC0+aWR4LCBwa3QtPnR5cGUsIHBrdC0+Y291bnQsIGliX2NodW5rLT5sZW5ndGhfZHcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbSgpIC0gcGFyc2UgbmV4dCBwYWNrZXQgd2hpY2ggc2hvdWxkIGJlIHJlbG9jIHBhY2tldDMKKyAqIEBwYXJzZXI6CQlwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICogQGRhdGE6CQlwb2ludGVyIHRvIHJlbG9jYXRpb24gZGF0YQorICogQG9mZnNldF9zdGFydDoJc3RhcnRpbmcgb2Zmc2V0CisgKiBAb2Zmc2V0X21hc2s6CW9mZnNldCBtYXNrICh0byBhbGlnbiBzdGFydCBvZmZzZXQgb24pCisgKiBAcmVsb2M6CQlyZWxvYyBpbmZvcm1hdGlvbnMKKyAqCisgKiBDaGVjayBuZXh0IHBhY2tldCBpcyByZWxvY2F0aW9uIHBhY2tldDMsIGRvIGJvIHZhbGlkYXRpb24gYW5kIGNvbXB1dGUKKyAqIEdQVSBvZmZzZXQgdXNpbmcgdGhlIHByb3ZpZGVkIHN0YXJ0LgorICoqLworc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpCit7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqcmVsb2NzX2NodW5rOworCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHAzcmVsb2M7CisJdW5zaWduZWQgaWR4OworCWludCByOworCisJaWYgKHAtPmNodW5rX3JlbG9jc19pZHggPT0gLTEpIHsKKwkJRFJNX0VSUk9SKCJObyByZWxvY2F0aW9uIGNodW5rICFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJKmNzX3JlbG9jID0gTlVMTDsKKwlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlyZWxvY3NfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX3JlbG9jc19pZHhdOworCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisJcC0+aWR4ICs9IHAzcmVsb2MuY291bnQgKyAyOworCWlmIChwM3JlbG9jLnR5cGUgIT0gUEFDS0VUX1RZUEUzIHx8IHAzcmVsb2Mub3Bjb2RlICE9IFBBQ0tFVDNfTk9QKSB7CisJCURSTV9FUlJPUigiTm8gcGFja2V0MyBmb3IgcmVsb2NhdGlvbiBmb3IgcGFja2V0IGF0ICVkLlxuIiwKKwkJCSAgcDNyZWxvYy5pZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWYgKGlkeCA+PSByZWxvY3NfY2h1bmstPmxlbmd0aF9kdykgeworCQlEUk1fRVJST1IoIlJlbG9jcyBhdCAlZCBhZnRlciByZWxvY2F0aW9ucyBjaHVuayBlbmQgJWQgIVxuIiwKKwkJCSAgaWR4LCByZWxvY3NfY2h1bmstPmxlbmd0aF9kdyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBGSVhNRTogd2UgYXNzdW1lIHJlbG9jIHNpemUgaXMgNCBkd29yZHMgKi8KKwkqY3NfcmVsb2MgPSBwLT5yZWxvY3NfcHRyWyhpZHggLyA0KV07CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19ub21tKCkgLSBwYXJzZSBuZXh0IHBhY2tldCB3aGljaCBzaG91bGQgYmUgcmVsb2MgcGFja2V0MworICogQHBhcnNlcjoJCXBhcnNlciBzdHJ1Y3R1cmUgaG9sZGluZyBwYXJzaW5nIGNvbnRleHQuCisgKiBAZGF0YToJCXBvaW50ZXIgdG8gcmVsb2NhdGlvbiBkYXRhCisgKiBAb2Zmc2V0X3N0YXJ0OglzdGFydGluZyBvZmZzZXQKKyAqIEBvZmZzZXRfbWFzazoJb2Zmc2V0IG1hc2sgKHRvIGFsaWduIHN0YXJ0IG9mZnNldCBvbikKKyAqIEByZWxvYzoJCXJlbG9jIGluZm9ybWF0aW9ucworICoKKyAqIENoZWNrIG5leHQgcGFja2V0IGlzIHJlbG9jYXRpb24gcGFja2V0MywgZG8gYm8gdmFsaWRhdGlvbiBhbmQgY29tcHV0ZQorICogR1BVIG9mZnNldCB1c2luZyB0aGUgcHJvdmlkZWQgc3RhcnQuCisgKiovCitzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKnJlbG9jc19jaHVuazsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jOworCXVuc2lnbmVkIGlkeDsKKwlpbnQgcjsKKworCWlmIChwLT5jaHVua19yZWxvY3NfaWR4ID09IC0xKSB7CisJCURSTV9FUlJPUigiTm8gcmVsb2NhdGlvbiBjaHVuayAhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSpjc19yZWxvYyA9IE5VTEw7CisJaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJcmVsb2NzX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19yZWxvY3NfaWR4XTsKKwlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCk7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQorCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKKwlpZiAocDNyZWxvYy50eXBlICE9IFBBQ0tFVF9UWVBFMyB8fCBwM3JlbG9jLm9wY29kZSAhPSBQQUNLRVQzX05PUCkgeworCQlEUk1fRVJST1IoIk5vIHBhY2tldDMgZm9yIHJlbG9jYXRpb24gZm9yIHBhY2tldCBhdCAlZC5cbiIsCisJCQkgIHAzcmVsb2MuaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlkeCA9IGliX2NodW5rLT5rZGF0YVtwM3JlbG9jLmlkeCArIDFdOworCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKKwkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCisJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJKmNzX3JlbG9jID0gJnAtPnJlbG9jc1swXTsKKwkoKmNzX3JlbG9jKS0+bG9iai5ncHVfb2Zmc2V0ID0gKHU2NClyZWxvY3NfY2h1bmstPmtkYXRhW2lkeCArIDNdIDw8IDMyOworCSgqY3NfcmVsb2MpLT5sb2JqLmdwdV9vZmZzZXQgfD0gcmVsb2NzX2NodW5rLT5rZGF0YVtpZHggKyAwXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByNjAwX3BhY2tldDBfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQl1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKKwljYXNlIEFWSVZPX0QyTU9ERV9WTElORV9TVEFSVF9FTkQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZFxuIiwKKwkJICAgICAgIHJlZywgaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHI2MDBfY3NfcGFyc2VfcGFja2V0MChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQoreworCXVuc2lnbmVkIHJlZywgaTsKKwl1bnNpZ25lZCBpZHg7CisJaW50IHI7CisKKwlpZHggPSBwa3QtPmlkeCArIDE7CisJcmVnID0gcGt0LT5yZWc7CisJZm9yIChpID0gMDsgaSA8PSBwa3QtPmNvdW50OyBpKyssIGlkeCsrLCByZWcgKz0gNCkgeworCQlyID0gcjYwMF9wYWNrZXQwX2NoZWNrKHAsIHBrdCwgaWR4LCByZWcpOworCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjYwMF9wYWNrZXQzX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QpCit7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CisJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJdm9sYXRpbGUgdTMyICppYjsKKwl1bnNpZ25lZCBpZHg7CisJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCBzdGFydF9yZWcsIGVuZF9yZWcsIHJlZzsKKwlpbnQgcjsKKworCWliID0gcC0+aWItPnB0cjsKKwlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpZHggPSBwa3QtPmlkeCArIDE7CisJc3dpdGNoIChwa3QtPm9wY29kZSkgeworCWNhc2UgUEFDS0VUM19TVEFSVF8zRF9DTURCVUY6CisJCWlmIChwLT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCB8fCBwa3QtPmNvdW50KSB7CisJCQlEUk1fRVJST1IoImJhZCBTVEFSVF8zRFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfQ09OVEVYVF9DT05UUk9MOgorCQlpZiAocGt0LT5jb3VudCAhPSAxKSB7CisJCQlEUk1fRVJST1IoImJhZCBDT05URVhUX0NPTlRST0xcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX0lOREVYX1RZUEU6CisJY2FzZSBQQUNLRVQzX05VTV9JTlNUQU5DRVM6CisJCWlmIChwa3QtPmNvdW50KSB7CisJCQlEUk1fRVJST1IoImJhZCBJTkRFWF9UWVBFL05VTV9JTlNUQU5DRVNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVg6CisJCWlmIChwa3QtPmNvdW50ICE9IDMpIHsKKwkJCURSTV9FUlJPUigiYmFkIERSQVdfSU5ERVhcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiYmFkIERSQVdfSU5ERVhcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWJbaWR4KzBdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKKwkJaWJbaWR4KzFdID0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19EUkFXX0lOREVYX0FVVE86CisJCWlmIChwa3QtPmNvdW50ICE9IDEpIHsKKwkJCURSTV9FUlJPUigiYmFkIERSQVdfSU5ERVhfQVVUT1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfRFJBV19JTkRFWF9JTU1EX0JFOgorCWNhc2UgUEFDS0VUM19EUkFXX0lOREVYX0lNTUQ6CisJCWlmIChwa3QtPmNvdW50IDwgMikgeworCQkJRFJNX0VSUk9SKCJiYWQgRFJBV19JTkRFWF9JTU1EXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19XQUlUX1JFR19NRU06CisJCWlmIChwa3QtPmNvdW50ICE9IDUpIHsKKwkJCURSTV9FUlJPUigiYmFkIFdBSVRfUkVHX01FTVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBiaXQgNCBpcyByZWcgKDApIG9yIG1lbSAoMSkgKi8KKwkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHgrMF0gJiAweDEwKSB7CisJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQkJaWYgKHIpIHsKKwkJCQlEUk1fRVJST1IoImJhZCBXQUlUX1JFR19NRU1cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWJbaWR4KzFdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKKwkJCWliW2lkeCsyXSA9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19TVVJGQUNFX1NZTkM6CisJCWlmIChwa3QtPmNvdW50ICE9IDMpIHsKKwkJCURSTV9FUlJPUigiYmFkIFNVUkZBQ0VfU1lOQ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiAweGZmZmZmZmZmLzB4MCBpcyBmbHVzaCBhbGwgY2FjaGUgZmxhZyAqLworCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeCsxXSAhPSAweGZmZmZmZmZmIHx8CisJCSAgICBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICE9IDApIHsKKwkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQlpZiAocikgeworCQkJCURSTV9FUlJPUigiYmFkIFNVUkZBQ0VfU1lOQ1xuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpYltpZHgrMl0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfRVZFTlRfV1JJVEU6CisJCWlmIChwa3QtPmNvdW50ICE9IDIgJiYgcGt0LT5jb3VudCAhPSAwKSB7CisJCQlEUk1fRVJST1IoImJhZCBFVkVOVF9XUklURVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocGt0LT5jb3VudCkgeworCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCWlmIChyKSB7CisJCQkJRFJNX0VSUk9SKCJiYWQgRVZFTlRfV1JJVEVcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWJbaWR4KzFdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKKwkJCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfRVZFTlRfV1JJVEVfRU9QOgorCQlpZiAocGt0LT5jb3VudCAhPSA0KSB7CisJCQlEUk1fRVJST1IoImJhZCBFVkVOVF9XUklURV9FT1BcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiYmFkIEVWRU5UX1dSSVRFXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHOgorCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQ7CisJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CisJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpIHx8CisJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfRU5EKSB8fAorCQkgICAgKGVuZF9yZWcgPj0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19FTkQpKSB7CisJCQlEUk1fRVJST1IoImJhZCBQQUNLRVQzX1NFVF9DT05GSUdfUkVHXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKKwkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7CisJCQlzd2l0Y2ggKHJlZykgeworCQkJY2FzZSBDUF9DT0hFUl9CQVNFOgorCQkJCS8qIHVzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQyAqLworCQkJCXJldHVybiAtRUlOVkFMOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHOgorCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgfHwKKwkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfRU5EKSB8fAorCQkgICAgKGVuZF9yZWcgPj0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHBrdC0+Y291bnQ7IGkrKykgeworCQkJcmVnID0gc3RhcnRfcmVnICsgKDQgKiBpKTsKKwkJCXN3aXRjaCAocmVnKSB7CisJCQljYXNlIERCX0RFUFRIX0JBU0U6CisJCQljYXNlIENCX0NPTE9SMF9CQVNFOgorCQkJY2FzZSBDQl9DT0xPUjFfQkFTRToKKwkJCWNhc2UgQ0JfQ09MT1IyX0JBU0U6CisJCQljYXNlIENCX0NPTE9SM19CQVNFOgorCQkJY2FzZSBDQl9DT0xPUjRfQkFTRToKKwkJCWNhc2UgQ0JfQ09MT1I1X0JBU0U6CisJCQljYXNlIENCX0NPTE9SNl9CQVNFOgorCQkJY2FzZSBDQl9DT0xPUjdfQkFTRToKKwkJCWNhc2UgU1FfUEdNX1NUQVJUX0ZTOgorCQkJY2FzZSBTUV9QR01fU1RBUlRfRVM6CisJCQljYXNlIFNRX1BHTV9TVEFSVF9WUzoKKwkJCWNhc2UgU1FfUEdNX1NUQVJUX0dTOgorCQkJY2FzZSBTUV9QR01fU1RBUlRfUFM6CisJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCQlpZiAocikgeworCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfQ09OVEVYVF9SRUcgIgorCQkJCQkJCSIweCUwNFhcbiIsIHJlZyk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlpYltpZHgrMStpXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQkJCWJyZWFrOworCQkJY2FzZSBWR1RfRE1BX0JBU0U6CisJCQljYXNlIFZHVF9ETUFfQkFTRV9ISToKKwkJCQkvKiBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBieSBEUkFXX0lOREVYIHBhY2tldCAzICovCisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzA6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzE6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzI6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzM6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzA6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzE6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzI6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzM6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzA6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzE6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzI6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzM6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMDoKKwkJCWNhc2UgVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8xOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzI6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMzoKKwkJCQkvKiBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBieSBTVFJNT1VUX0JVRkZFUiBwYWNrZXQgMyAqLworCQkJCURSTV9FUlJPUigiYmFkIGNvbnRleHQgcmVnOiAweCUwOHhcbiIsIHJlZyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19TRVRfUkVTT1VSQ0U6CisJCWlmIChwa3QtPmNvdW50ICUgNykgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1JFU09VUkNFXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9SRVNPVVJDRV9PRkZTRVQ7CisJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CisJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfUkVTT1VSQ0VfT0ZGU0VUKSB8fAorCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9SRVNPVVJDRV9FTkQpIHx8CisJCSAgICAoZW5kX3JlZyA+PSBQQUNLRVQzX1NFVF9SRVNPVVJDRV9FTkQpKSB7CisJCQlEUk1fRVJST1IoImJhZCBTRVRfUkVTT1VSQ0VcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IChwa3QtPmNvdW50IC8gNyk7IGkrKykgeworCQkJc3dpdGNoIChHX19TUV9WVFhfQ09OU1RBTlRfVFlQRShpYltpZHgrKGkqNykrNisxXSkpIHsKKwkJCWNhc2UgU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFOgorCQkJCS8qIHRleCBiYXNlICovCisJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCQlpZiAocikgeworCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfUkVTT1VSQ0VcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJaWJbaWR4KzErKGkqNykrMl0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCQkvKiB0ZXggbWlwIGJhc2UgKi8KKwkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQkJCWlmIChyKSB7CisJCQkJCURSTV9FUlJPUigiYmFkIFNFVF9SRVNPVVJDRVxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlpYltpZHgrMSsoaSo3KSszXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQkJCWJyZWFrOworCQkJY2FzZSBTUV9URVhfVlRYX1ZBTElEX0JVRkZFUjoKKwkJCQkvKiB2dHggYmFzZSAqLworCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQkJaWYgKHIpIHsKKwkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1JFU09VUkNFXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWliW2lkeCsxKyhpKjcpKzBdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmZmZmZmZmYpOworCQkJCWliW2lkeCsxKyhpKjcpKzJdIHw9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQkJCWJyZWFrOworCQkJY2FzZSBTUV9URVhfVlRYX0lOVkFMSURfVEVYVFVSRToKKwkJCWNhc2UgU1FfVEVYX1ZUWF9JTlZBTElEX0JVRkZFUjoKKwkJCWRlZmF1bHQ6CisJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1JFU09VUkNFXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU0VUX0FMVV9DT05TVDoKKwkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9PRkZTRVQ7CisJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CisJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQUxVX0NPTlNUX09GRlNFVCkgfHwKKwkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQUxVX0NPTlNUX0VORCkgfHwKKwkJICAgIChlbmRfcmVnID49IFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9FTkQpKSB7CisJCQlEUk1fRVJST1IoImJhZCBTRVRfQUxVX0NPTlNUXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19TRVRfQk9PTF9DT05TVDoKKwkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUKSB8fAorCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX0VORCkgfHwKKwkJICAgIChlbmRfcmVnID49IFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0JPT0xfQ09OU1RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX1NFVF9MT09QX0NPTlNUOgorCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfTE9PUF9DT05TVF9PRkZTRVQ7CisJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CisJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfTE9PUF9DT05TVF9PRkZTRVQpIHx8CisJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfRU5EKSB8fAorCQkgICAgKGVuZF9yZWcgPj0gUEFDS0VUM19TRVRfTE9PUF9DT05TVF9FTkQpKSB7CisJCQlEUk1fRVJST1IoImJhZCBTRVRfTE9PUF9DT05TVFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU0VUX0NUTF9DT05TVDoKKwkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NUTF9DT05TVF9PRkZTRVQ7CisJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CisJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVCkgfHwKKwkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ1RMX0NPTlNUX0VORCkgfHwKKwkJICAgIChlbmRfcmVnID49IFBBQ0tFVDNfU0VUX0NUTF9DT05TVF9FTkQpKSB7CisJCQlEUk1fRVJST1IoImJhZCBTRVRfQ1RMX0NPTlNUXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19TRVRfU0FNUExFUjoKKwkJaWYgKHBrdC0+Y291bnQgJSAzKSB7CisJCQlEUk1fRVJST1IoImJhZCBTRVRfU0FNUExFUlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQ7CisJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CisJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQpIHx8CisJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX1NBTVBMRVJfRU5EKSB8fAorCQkgICAgKGVuZF9yZWcgPj0gUEFDS0VUM19TRVRfU0FNUExFUl9FTkQpKSB7CisJCQlEUk1fRVJST1IoImJhZCBTRVRfU0FNUExFUlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU1VSRkFDRV9CQVNFX1VQREFURToKKwkJaWYgKHAtPmZhbWlseSA+PSBDSElQX1JWNzcwIHx8IHAtPmZhbWlseSA9PSBDSElQX1I2MDApIHsKKwkJCURSTV9FUlJPUigiYmFkIFNVUkZBQ0VfQkFTRV9VUERBVEVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHBrdC0+Y291bnQpIHsKKwkJCURSTV9FUlJPUigiYmFkIFNVUkZBQ0VfQkFTRV9VUERBVEVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX05PUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJQYWNrZXQzIG9wY29kZSAleCBub3Qgc3VwcG9ydGVkXG4iLCBwa3QtPm9wY29kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfY3NfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApCit7CisJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcGt0OworCWludCByOworCisJZG8geworCQlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2UocCwgJnBrdCwgcC0+aWR4KTsKKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CisJCXAtPmlkeCArPSBwa3QuY291bnQgKyAyOworCQlzd2l0Y2ggKHBrdC50eXBlKSB7CisJCWNhc2UgUEFDS0VUX1RZUEUwOgorCQkJciA9IHI2MDBfY3NfcGFyc2VfcGFja2V0MChwLCAmcGt0KTsKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9UWVBFMjoKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9UWVBFMzoKKwkJCXIgPSByNjAwX3BhY2tldDNfY2hlY2socCwgJnBrdCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiVW5rbm93biBwYWNrZXQgdHlwZSAlZCAhXG4iLCBwa3QudHlwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KKwl9IHdoaWxlIChwLT5pZHggPCBwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XS5sZW5ndGhfZHcpOworI2lmIDAKKwlmb3IgKHIgPSAwOyByIDwgcC0+aWItPmxlbmd0aF9kdzsgcisrKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiUwNWQgIDB4JTA4WFxuIiwgciwgcC0+aWItPnB0cltyXSk7CisJCW1kZWxheSgxKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByNjAwX2NzX3BhcnNlcl9yZWxvY3NfbGVnYWN5KHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCWlmIChwLT5jaHVua19yZWxvY3NfaWR4ID09IC0xKSB7CisJCXJldHVybiAwOworCX0KKwlwLT5yZWxvY3MgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHAtPnJlbG9jcyA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjc19wYXJzZXJfZmluaSgpIC0gY2xlYW4gcGFyc2VyIHN0YXRlcworICogQHBhcnNlcjoJcGFyc2VyIHN0cnVjdHVyZSBob2xkaW5nIHBhcnNpbmcgY29udGV4dC4KKyAqIEBlcnJvcjoJZXJyb3IgbnVtYmVyCisgKgorICogSWYgZXJyb3IgaXMgc2V0IHRoYW4gdW52YWxpZGF0ZSBidWZmZXIsIG90aGVyd2lzZSBqdXN0IGZyZWUgbWVtb3J5CisgKiB1c2VkIGJ5IHBhcnNpbmcgY29udGV4dC4KKyAqKi8KK3N0YXRpYyB2b2lkIHI2MDBfY3NfcGFyc2VyX2Zpbmkoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnBhcnNlciwgaW50IGVycm9yKQoreworCXVuc2lnbmVkIGk7CisKKwlrZnJlZShwYXJzZXItPnJlbG9jcyk7CisJZm9yIChpID0gMDsgaSA8IHBhcnNlci0+bmNodW5rczsgaSsrKSB7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtkYXRhKTsKKwl9CisJa2ZyZWUocGFyc2VyLT5jaHVua3MpOworCWtmcmVlKHBhcnNlci0+Y2h1bmtzX2FycmF5KTsKK30KKworaW50IHI2MDBfY3NfbGVnYWN5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGZhbWlseSwgdTMyICppYiwgaW50ICpsKQoreworCXN0cnVjdCByYWRlb25fY3NfcGFyc2VyIHBhcnNlcjsKKwlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKKwlzdHJ1Y3QgcmFkZW9uX2liCWZha2VfaWI7CisJaW50IHI7CisKKwkvKiBpbml0aWFsaXplIHBhcnNlciAqLworCW1lbXNldCgmcGFyc2VyLCAwLCBzaXplb2Yoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIpKTsKKwlwYXJzZXIuZmlscCA9IGZpbHA7CisJcGFyc2VyLnJkZXYgPSBOVUxMOworCXBhcnNlci5mYW1pbHkgPSBmYW1pbHk7CisJcGFyc2VyLmliID0gJmZha2VfaWI7CisJZmFrZV9pYi5wdHIgPSBpYjsKKwlyID0gcmFkZW9uX2NzX3BhcnNlcl9pbml0KCZwYXJzZXIsIGRhdGEpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgcGFyc2VyICFcbiIpOworCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHI2MDBfY3NfcGFyc2VyX3JlbG9jc19sZWdhY3koJnBhcnNlcik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcGFyc2UgcmVsb2NhdGlvbiAhXG4iKTsKKwkJcjYwMF9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCS8qIENvcHkgdGhlIHBhY2tldCBpbnRvIHRoZSBJQiwgdGhlIHBhcnNlciB3aWxsIHJlYWQgZnJvbSB0aGUKKwkgKiBpbnB1dCBtZW1vcnkgKGNhY2hlZCkgYW5kIHdyaXRlIHRvIHRoZSBJQiAod2hpY2ggY2FuIGJlCisJICogdW5jYWNoZWQpLiAqLworCWliX2NodW5rID0gJnBhcnNlci5jaHVua3NbcGFyc2VyLmNodW5rX2liX2lkeF07CisJcGFyc2VyLmliLT5sZW5ndGhfZHcgPSBpYl9jaHVuay0+bGVuZ3RoX2R3OworCW1lbWNweSgodm9pZCAqKXBhcnNlci5pYi0+cHRyLCBpYl9jaHVuay0+a2RhdGEsIGliX2NodW5rLT5sZW5ndGhfZHcqNCk7CisJKmwgPSBwYXJzZXIuaWItPmxlbmd0aF9kdzsKKwlyID0gcjYwMF9jc19wYXJzZSgmcGFyc2VyKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIkludmFsaWQgY29tbWFuZCBzdHJlYW0gIVxuIik7CisJCXI2MDBfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCXJldHVybiByOworCX0KKwlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOworCXJldHVybiByOworfQorCit2b2lkIHI2MDBfY3NfbGVnYWN5X2luaXQodm9pZCkKK3sKKwlyNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jID0gJnI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4YzhiNGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX21pY3JvY29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMyOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4LTIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRQotICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBSNjAwX01JQ1JPQ09ERV9ICi0jZGVmaW5lIFI2MDBfTUlDUk9DT0RFX0gKLQotc3RhdGljIGNvbnN0IGludCBNRV9KVU1QX1RBQkxFX1NUQVJUID0gMTc2NDsKLXN0YXRpYyBjb25zdCBpbnQgTUVfSlVNUF9UQUJMRV9FTkQgICA9IDE3OTI7Ci0KLSNkZWZpbmUgUEZQX1VDT0RFX1NJWkUgNTc2Ci0jZGVmaW5lIFBNNF9VQ09ERV9TSVpFIDE3OTIKLSNkZWZpbmUgUjcwMF9QRlBfVUNPREVfU0laRSA4NDgKLSNkZWZpbmUgUjcwMF9QTTRfVUNPREVfU0laRSAxMzYwCi0KLXN0YXRpYyBjb25zdCB1MzIgUjYwMF9jcF9taWNyb2NvZGVbXVszXSA9IHsKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAotICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKLSAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgwIH0sCi0gICAgeyAweDAwMDAwMDJlLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4NyB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmUsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDg3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZTEgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHhjMDQwMzYyMCwgMHgwOTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDhlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA4ZCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOGYgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDhmIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5NSB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDA5ZCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWEgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDljIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5YyB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE0IH0sCi0gICAgeyAweDAwMDAwMDFjLCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCi0gICAgeyAweDAwMDAwMDFiLCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI4YyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyOCB9LAotICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYzUgfSwKLSAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkNCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBjZiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGNlIH0sCi0gICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkMCB9LAotICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDAgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkNiB9LAotICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwZmYwMDAwLCAweDAwMjg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmUsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWU3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWEgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGYxIH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjEgfSwKLSAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY2IH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwNCB9LAotICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZmQgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTA0IH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTA0IH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDMgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTA0IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTAgfSwKLSAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMjcgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNTEgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYTQgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmM5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE1MSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYTQgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmM5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGQgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxODkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE0IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOGMgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxNzMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE2ZiB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTg0IH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmU0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTY1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4MSB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTg4IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMjggfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDYwMGUyZCwgMHgxYWEgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDA2MDBlMmQsIDB4MWFhIH0sCi0gICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWE2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDJmZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWNkIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFjOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZDYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWM1IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFiZSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWQ2IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkMiB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJhNCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlNSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MWYyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgxZjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJhNCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyYzkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMDYgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDFmZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM1IH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDJmZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTg5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOGMgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIxZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMWMgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmU0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YjIgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjM1IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyNjUgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNTMgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjQ4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjRiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhYSB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVhIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI1ZiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZSB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNWYgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmQyIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyM2YgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyOGMgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjdiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMjggfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI4NiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyYzUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmMyIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyYzIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJjNSB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJjNSB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyYzUgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyYzUgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmM3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI5ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmM3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI5MCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyYzcgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwODAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMDEgfSwKLSAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzM0IH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzM2QgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM1MSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzVlIH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM1NSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDA0MDQ4MTEsIDB4MzQ5IH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzNDkgfSwKLSAgICB7IDB4MDAwMDIxMDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA0OSwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzYwIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwODAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM3NiB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzgwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOGMgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5OCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzk4IH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5ZiB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDA4MDAwMDAwLCAweDAwMjkwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHhjMDIyMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzODIgfSwKLSAgICB7IDB4MDAwMDIxMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOGUgfSwKLSAgICB7IDB4MDAwMDIxMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2I5IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNhYiB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYmUgfSwKLSAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNjYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzY2YgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNkMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZDUgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKLSAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHgzZmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNlMiB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNlYSB9LAotICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDNmZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHgzZmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKLSAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNlNSB9LAotICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCi0gICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZTUgfSwKLSAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNlNSB9LAotICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0M2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ0NCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NGQgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg0NDkgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg0NGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDU0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0NmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ2ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ1ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDZkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDYzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ2ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDZkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDc3IH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDNjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0OGEgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NDhiIH0sCi0gICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NDk3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YWUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg0YTkgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg0YWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGI5IH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YmIgfSwKLSAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0ZWIgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRkYSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0Y2UgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MSB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhlMDAwMDAwMCwgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRmMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NGY2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJlLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg5ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4NDAyMTRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDk2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjIyMjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAxNGE4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDEwMDAwMDAwLCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHhlZmZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTM4Y2UsIDB4NjAyIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAzMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1NDEgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjAwMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU0OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTViIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NDkgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU0ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTViIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NTkgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg1NTQgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg1NTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTViIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTVkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVhNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZkIH0sCi0gICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU2YiB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3ZCB9LAotICAgIHsgMHgwMDAwYTJiYiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1N2IgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OGQgfSwKLSAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThiIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTkgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDMwNGEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg1OWYgfSwKLSAgICB7IDB4YTQwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NWI3IH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVhNCB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDViYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YSwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWUxIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNWUgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDVkYyB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzVlIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDBmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMyB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDQwNGMxMSwgMHg1ZjkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDM4YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDMwMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwNjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDYxMiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjIsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDA0MDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2MTQgfSwKLSAgICB7IDB4OWYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2MTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDEzMzA0ZWYsIDB4MDU5YjAyMzksIDB4MDAwIH0sCi0gICAgeyAweDAxYjAwMTU5LCAweDA0MjUwNTliLCAweDAwMCB9LAotICAgIHsgMHgwMjEyMDFmNiwgMHgwMjM5MDE0MiwgMHgwMDAgfSwKLSAgICB7IDB4MDIxMDAyMmUsIDB4MDI4OTAyMmEsIDB4MDAwIH0sCi0gICAgeyAweDAzYzIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAotICAgIHsgMHgwNWNkMDVjZSwgMHgwMzA4MDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1YTAsIDB4MDMwOTAzMjksIDB4MDAwIH0sCi0gICAgeyAweDAzMTMwMjZiLCAweDAzMmIwMzFkLCAweDAwMCB9LAotICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1MmMsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDAzYTUwNTliLCAweDA0YTIwMzJkLCAweDAwMCB9LAotICAgIHsgMHgwNDgxMDQzMywgMHgwNDIzMDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDRiYjA0ZWQsIDB4MDQyNzA0YzgsIDB4MDAwIH0sCi0gICAgeyAweDA0MzMwNGY0LCAweDAzM2EwMzY1LCAweDAwMCB9LAotICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNTliLCAweDA1YjkwNWEyLCAweDAwMCB9LAotICAgIHsgMHgwNTliMDU5YiwgMHgwMDA3MDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAotICAgIHsgMHgwM2UzMDNkOCwgMHgwM2YzMDNmMSwgMHgwMDAgfSwKLSAgICB7IDB4MDNmOTAzZjUsIDB4MDNmNzAzZmIsIDB4MDAwIH0sCi0gICAgeyAweDA0MDcwNDAzLCAweDA0MGYwNDBiLCAweDAwMCB9LAotICAgIHsgMHgwNDE3MDQxMywgMHgwNDFmMDQxYiwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAotICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjA2MDAsIDB4MDYxOTAwMDYsIDB4MDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFI2MDBfcGZwX21pY3JvY29kZVtdID0gewotMHhkNDAwNzEsCi0weGQ0MDA3MiwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ODAwMDAzLAotMHhjYTA0MDAsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjNDE4MzgsCi0weGNhMjQwMCwKLTB4Y2EyODAwLAotMHg5NTgxYTgsCi0weGM0MWMzYSwKLTB4YzNjMDAwLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4N2M3NDRiLAotMHhjMjAwMDUsCi0weDk5YzAwMCwKLTB4YzQxYzNhLAotMHg3Yzc0NGMsCi0weGMwZmZmMCwKLTB4MDQyYzA0LAotMHgzMDkwMDIsCi0weDdkMjUwMCwKLTB4MzUxNDAyLAotMHg3ZDM1MGIsCi0weDI1NTQwMywKLTB4N2NkNTgwLAotMHgyNTljMDMsCi0weDk1YzAwNCwKLTB4ZDUwMDFiLAotMHg3ZWRkYzEsCi0weDdkOWQ4MCwKLTB4ZDY4MDFiLAotMHhkNTgwMWIsCi0weGQ0NDAxZSwKLTB4ZDU0MDFlLAotMHhkNjQwMWUsCi0weGQ2ODAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDk3ODNkNCwKLTB4ZDVjMDFlLAotMHhjYTA4MDAsCi0weDgwMDAxYiwKLTB4Y2EwYzAwLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ODAwMDBkLAotMHhjNDE4MzgsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGQsCi0weGM0MTgzOCwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTE4MDAsCi0weGQ0NDAxZSwKLTB4ZDU4MDFlLAotMHg4MDAwNTQsCi0weGQ0MDA3MywKLTB4ZDQ0MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDgwMTksCi0weGQ0YzAxOCwKLTB4ZDUwMDE3LAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhlMjAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4ZDQ4MDYwLAotMHhkNDQwMWUsCi0weDgwMDAwMiwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGQ0ODA2MSwKLTB4ZDQ0MDFlLAotMHg4MDAwMDIsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ZDQ4MDE2LAotMHhkNGMwMTYsCi0weGQ0ODAxZSwKLTB4ODAwMWI5LAotMHhkNGMwMWUsCi0weGM2MDgzZSwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODAwNCwKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weGQ0MjAxMywKLTB4ZDU2MDY1LAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZDU2MDFjLAotMHg4MDAwMDIsCi0weDA2MjAwMSwKLTB4YzYwODNlLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4M2Y3LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ODAwMDdhLAotMHhkNDIwMTMsCi0weGM2MDgzZSwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk4ODNlZiwKLTB4Y2ExNDAwLAotMHhkNDAwNjQsCi0weDgwMDA4ZSwKLTB4MDAwMDAwLAotMHhjNDE0MzIsCi0weGM2MTgzZSwKLTB4YzQwODJmLAotMHg5NTQwMDUsCi0weGM0MGMzMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDIsCi0weGVlMDAxZSwKLTB4OTU4M2Y1LAotMHhjNDEwMzEsCi0weGQ0NDAzMywKLTB4ZDUyMDY1LAotMHhkNGEwMWMsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhkNDAwNzMsCi0weGU0MDE1ZSwKLTB4ZDQwMDFlLAotMHg4MDAxYjksCi0weDA2MjAwMSwKLTB4MGEyMDAxLAotMHhkNjAwNzQsCi0weGM0MDgzNiwKLTB4YzYxMDQwLAotMHg5ODgwMDcsCi0weGNjMzgzNSwKLTB4OTUwMTBmLAotMHhkNDAwMWYsCi0weGQ0NjA2MiwKLTB4ODAwMDAyLAotMHhkNDIwNjIsCi0weGNjMTQzMywKLTB4ODQwMWJjLAotMHhkNDAwNzAsCi0weGQ1NDAxZSwKLTB4ODAwMDAyLAotMHhlZTAwMWUsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNGMwMWEsCi0weDg0MDFiYywKLTB4ZDUwMDFhLAotMHhjYzA0NDMsCi0weDM1MTAxZiwKLTB4MmM5NDAxLAotMHg3ZDA5OGIsCi0weDk4NDAwNSwKLTB4N2QxNWNiLAotMHhkNDAwMWEsCi0weDgwMDFiOSwKLTB4ZDQwMDZkLAotMHgzNDQ0MDEsCi0weGNjMGM0NCwKLTB4OTg0MDNhLAotMHhjYzJjNDYsCi0weDk1ODAwNCwKLTB4Y2MwNDQ1LAotMHg4MDAxYjksCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHgyODI4MDEsCi0weDg0MDBmMywKLTB4Y2MxMDAzLAotMHg5ODgwMWIsCi0weDA0MzgwYywKLTB4ODQwMGYzLAotMHhjYzEwMDMsCi0weDk4ODAxNywKLTB4MDQzODA4LAotMHg4NDAwZjMsCi0weGNjMTAwMywKLTB4OTg4MDEzLAotMHgwNDM4MDQsCi0weDg0MDBmMywKLTB4Y2MxMDAzLAotMHg5ODgwMTQsCi0weGNjMTA0NywKLTB4OWE4MDA5LAotMHhjYzE0NDgsCi0weDk4NDBkYSwKLTB4ZDQwMDZkLAotMHhjYzE4NDQsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHg4MDAwY2MsCi0weGQ1ODAxYSwKLTB4OTZjMGQzLAotMHhkNDAwNmQsCi0weDgwMDFiOSwKLTB4ZDQwMDZlLAotMHg5YWMwMDMsCi0weGQ0MDA2ZCwKLTB4ZDQwMDZlLAotMHg4MDAwMDIsCi0weGVjMDA3ZiwKLTB4OWFjMGNhLAotMHhkNDAwNmQsCi0weDgwMDFiOSwKLTB4ZDQwMDZlLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHg3ZDkxMDMsCi0weDdkZDU4MywKLTB4N2QxOTBjLAotMHgzNWNjMWYsCi0weDM1NzAxZiwKLTB4N2NmMGNiLAotMHg3Y2QwOGIsCi0weDg4MDAwMCwKLTB4N2U4ZThiLAotMHg5NWMwMDQsCi0weGQ0MDA2ZSwKLTB4ODAwMWI5LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMTAwMywKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4Y2MyNDAzLAotMHhjYzI4MDMsCi0weDM1YzQxZiwKLTB4MzZiMDFmLAotMHg3YzcwNGIsCi0weDM0ZjAxZiwKLTB4N2M3MDRiLAotMHgzNTcwMWYsCi0weDdjNzA0YiwKLTB4N2Q4ODgxLAotMHg3ZGNjYzEsCi0weDdlNTEwMSwKLTB4N2U5NTQxLAotMHg3YzkwODIsCi0weDdjZDRjMiwKLTB4N2M4NDhiLAotMHg5YWMwMDMsCi0weDdjOGM4YiwKLTB4MmM4ODAxLAotMHg5ODgwOWMsCi0weGQ0MDA2ZCwKLTB4OTg0MDlhLAotMHhkNDAwNmUsCi0weGNjMDg0NywKLTB4Y2MwYzQ4LAotMHhjYzEwNDQsCi0weGQ0ODAxYSwKLTB4ZDRjMDFhLAotMHg4MDAxMDQsCi0weGQ1MDAxYSwKLTB4Y2MwODMyLAotMHhkNDAwMzIsCi0weDk0ODJkOCwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weDgwMDAwMiwKLTB4ZDQwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ0MDFlLAotMHhjYTE0MDAsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4ZDU0MDM0LAotMHg4MDAwMDIsCi0weGVlMDAxZSwKLTB4MjgwNDA0LAotMHhlMjAwMWEsCi0weGUyMDAxYSwKLTB4ZDQ0MDFhLAotMHhjYTM4MDAsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4OTg4MmJjLAotMHgwMDAwMDAsCi0weDg0MDFiYywKLTB4ZDc4MDZmLAotMHg4MDAwMDIsCi0weGVlMDAxZiwKLTB4Y2EwNDAwLAotMHhjMmZmMDAsCi0weGNjMDgzNCwKLTB4YzEzZmZmLAotMHg3Yzc0Y2IsCi0weDdjYzkwYiwKLTB4N2QwMTBmLAotMHg5OTAyYWYsCi0weDdjNzM4YiwKLTB4ODQwMWJjLAotMHhkNzgwNmYsCi0weDgwMDAwMiwKLTB4ZWUwMDFmLAotMHhjYTA4MDAsCi0weDI4MTkwMCwKLTB4N2Q4OThiLAotMHg5NTgwMTQsCi0weDI4MTQwNCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGNhMWMwMCwKLTB4Y2EyNDAwLAotMHhlMjAwMWYsCi0weGQ0YzAxYSwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weGNjMTgwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4N2RhNThiLAotMHg3ZDljNDcsCi0weDk4NDI5NiwKLTB4MDAwMDAwLAotMHg4MDAxNjQsCi0weGQ0YzAxYSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMiwKLTB4ZWUwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHgyNDhjMDYsCi0weDBjY2MwNiwKLTB4OThjMDA2LAotMHhjYzEwNDksCi0weDk5MDAwNCwKLTB4ZDQwMDcxLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMiwKLTB4ZWUwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4MzRkMDE4LAotMHgyNTEwMDEsCi0weDk1MDAxZiwKLTB4YzE3ZmZmLAotMHhjYTEwMDAsCi0weGNhMTQwMCwKLTB4Y2ExODAwLAotMHhkNDgwMWQsCi0weGQ0YzAxZCwKLTB4N2RiMThiLAotMHhjMTQyMDIsCi0weGMyYzAwMSwKLTB4ZDU4MDFkLAotMHgzNGRjMGUsCi0weDdkNWQ0YywKLTB4N2Y3MzRjLAotMHhkNzQwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhjMTQyMDAsCi0weGMyYzAwMCwKLTB4MDk5YzAxLAotMHgzMWRjMTAsCi0weDdmNWY0YywKLTB4N2Y3MzRjLAotMHg3ZDgzODAsCi0weGQ1ODA2ZiwKLTB4ZDU4MDY2LAotMHhkNzQwMWUsCi0weGVjMDA1ZSwKLTB4YzgyNDAyLAotMHg4MDAxYjksCi0weGQ2MDA3NCwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ODAwMDAyLAotMHhlZTAwMWUsCi0weDgwMDAwMiwKLTB4ZWUwMDFmLAotMHhkNDAwMWYsCi0weDgwMDAwMiwKLTB4ZDQwMDFmLAotMHhkNDAwMWYsCi0weDg4MDAwMCwKLTB4ZDQwMDFmLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDEwMTc0LAotMHgwMjAxN2IsCi0weDAzMDA5MCwKLTB4MDQwMDgwLAotMHgwNTAwMDUsCi0weDA2MDA0MCwKLTB4MDcwMDMzLAotMHgwODAxMmYsCi0weDA5MDA0NywKLTB4MGEwMDM3LAotMHgxMDAxYjcsCi0weDE3MDBhNCwKLTB4MjIwMTNkLAotMHgyMzAxNGMsCi0weDIwMDBiNSwKLTB4MjQwMTI4LAotMHgyNzAwNGUsCi0weDI4MDA2YiwKLTB4MmEwMDYxLAotMHgyYjAwNTMsCi0weDJmMDA2NiwKLTB4MzIwMDg4LAotMHgzNDAxODIsCi0weDNjMDE1OSwKLTB4M2YwMDczLAotMHg0MTAxOGYsCi0weDQ0MDEzMSwKLTB4NTUwMTc2LAotMHg1NjAxN2QsCi0weDYwMDAwYywKLTB4NjEwMDM1LAotMHg2MjAwMzksCi0weDYzMDAzOSwKLTB4NjQwMDM5LAotMHg2NTAwMzksCi0weDY2MDAzOSwKLTB4NjcwMDM5LAotMHg2ODAwM2IsCi0weDY5MDA0MiwKLTB4NmEwMDQ5LAotMHg2YjAwNDksCi0weDZjMDA0OSwKLTB4NmQwMDQ5LAotMHg2ZTAwNDksCi0weDZmMDA0OSwKLTB4NzMwMWI3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjYxMF9jcF9taWNyb2NvZGVbXVszXSA9IHsKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAotICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKLSAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAotICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKLSAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCi0gICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAotICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY1IH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCi0gICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2OGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAotICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweGMwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMGEyMiwgMHgzNGIgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM1NCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzY0IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmEgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YzAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzODYgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiMSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I1IH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWMgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzkyIH0sCi0gICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzllIH0sCi0gICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNhZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2NlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjMCB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKLSAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKLSAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAotICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjkwYzQwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjEwMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0NDUgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4YzA0OTRhMjAsIDB4NDQ2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwMiwgMHg0NGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMjAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDYxIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjQsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ2NiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDUsIDB4NjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDk5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQ1OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGEzIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDRhNCB9LAotICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRiMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGFjIH0sCi0gICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMzIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGM3IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNlIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZDAgfSwKLSAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg1MDAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRlZiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0ZTMgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhYSB9LAotICAgIHsgMHgwMDAwMDAyYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4YjUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiOTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDAyODBlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1MTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUyZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmUwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZjFmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweGMwMjIwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHg0MDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAotICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAotICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDY3YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTY2IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3YyB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3YyB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTdhIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTdjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTdlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThmIH0sCi0gICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OGQgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTAgfSwKLSAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5ZSB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDViMSB9LAotICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFmIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWJlIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWM0IH0sCi0gICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWM5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWQwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDQwMzYyMSwgMHg1ZTMgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NWUzIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTA5MywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmMgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmMgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYwNSB9LAotICAgIHsgMHgwMDAwYTA5MiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDkzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYjYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiYSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmJlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxZmYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwZSB9LAotICAgIHsgMHgwMDA0YTAwMywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEzIH0sCi0gICAgeyAweDAwMDRhMDEwLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJiIH0sCi0gICAgeyAweDAwMDRhMDExLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEyLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEzLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE1LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE2LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE3LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAxNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDYzZCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2M2IgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM5IH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjQxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwNDgxMSwgMHg2MmQgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4NjJkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NjU2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2OGMgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2OGIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhkIH0sCi0gICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjkwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OTIgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDE0MjA1MDIsIDB4MDVjMDAyNTAsIDB4MDAwIH0sCi0gICAgeyAweDAxYzMwMTY4LCAweDA0M2YwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKLSAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCi0gICAgeyAweDAzZDcwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNjQ5MDY0YSwgMHgwMzFmMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzUsIDB4MDMyMDAzNDAsIDB4MDAwIH0sCi0gICAgeyAweDAzMmEwMjgyLCAweDAzNDIwMzM0LCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1NTEsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDAzYmEwNWMwLCAweDA0YmIwMzQ0LCAweDAwMCB9LAotICAgIHsgMHgwNDlhMDQ1MCwgMHgwNDNkMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDRkMDA1YzAsIDB4MDQ0MTA0ZGQsIDB4MDAwIH0sCi0gICAgeyAweDA0NTAwNTA3LCAweDAzNTEwMzc1LCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA2M2YwNWM3LCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwMDA3MDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCi0gICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAotICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDQzODA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjA2NzksIDB4MDY5NzAwMDYsIDB4MDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNjEwX3BmcF9taWNyb2NvZGVbXSA9IHsKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4N2MwMzhiLAotMHg4MDAxYjgsCi0weDdjMDM4YiwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGM0MTgzOCwKLTB4Y2EyNDAwLAotMHhjYTI4MDAsCi0weDk1ODFhOCwKLTB4YzQxYzNhLAotMHhjM2MwMDAsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHg3Yzc0NGIsCi0weGMyMDAwNSwKLTB4OTljMDAwLAotMHhjNDFjM2EsCi0weDdjNzQ0YywKLTB4YzBmZmYwLAotMHgwNDJjMDQsCi0weDMwOTAwMiwKLTB4N2QyNTAwLAotMHgzNTE0MDIsCi0weDdkMzUwYiwKLTB4MjU1NDAzLAotMHg3Y2Q1ODAsCi0weDI1OWMwMywKLTB4OTVjMDA0LAotMHhkNTAwMWIsCi0weDdlZGRjMSwKLTB4N2Q5ZDgwLAotMHhkNjgwMWIsCi0weGQ1ODAxYiwKLTB4ZDQ0MDFlLAotMHhkNTQwMWUsCi0weGQ2NDAxZSwKLTB4ZDY4MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4OTc4M2QzLAotMHhkNWMwMWUsCi0weGNhMDgwMCwKLTB4ODAwMDFhLAotMHhjYTBjMDAsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMTgwMCwKLTB4ZDQ0MDFlLAotMHhkNTgwMWUsCi0weDgwMDA1MywKLTB4ZDQwMDc1LAotMHhkNDQwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0ODAxOSwKLTB4ZDRjMDE4LAotMHhkNTAwMTcsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGUyMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHhkNDgwNjAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4ZDQ4MDYxLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHhkNDgwMTYsCi0weGQ0YzAxNiwKLTB4ZDQ4MDFlLAotMHg4MDAxYjgsCi0weGQ0YzAxZSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4MDA0LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ZDQyMDEzLAotMHhkNTYwNjUsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhkNTYwMWMsCi0weDgwMDAwMCwKLTB4MDYyMDAxLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgzZjcsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHg4MDAwNzksCi0weGQ0MjAxMywKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTg4M2VmLAotMHhjYTE0MDAsCi0weGQ0MDA2NCwKLTB4ODAwMDhkLAotMHgwMDAwMDAsCi0weGM0MTQzMiwKLTB4YzYxODQzLAotMHhjNDA4MmYsCi0weDk1NDAwNSwKLTB4YzQwYzMwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHg5NTgzZjUsCi0weGM0MTAzMSwKLTB4ZDQ0MDMzLAotMHhkNTIwNjUsCi0weGQ0YTAxYywKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGU0MDE1ZSwKLTB4ZDQwMDFlLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4Y2ExODAwLAotMHgwYTIwMDEsCi0weGQ2MDA3NiwKLTB4YzQwODM2LAotMHg5ODgwMDcsCi0weGM2MTA0NSwKLTB4OTUwMTEwLAotMHhkNDAwMWYsCi0weGQ0NjA2MiwKLTB4ODAwMDAwLAotMHhkNDIwNjIsCi0weGNjMzgzNSwKLTB4Y2MxNDMzLAotMHg4NDAxYmIsCi0weGQ0MDA3MiwKLTB4ZDU0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTIwMDFhLAotMHg4NDAxYmIsCi0weGUyMDAxYSwKLTB4Y2MxMDRiLAotMHhjYzA0NDcsCi0weDJjOTQwMSwKLTB4N2QwOThiLAotMHg5ODQwMDUsCi0weDdkMTVjYiwKLTB4ZDQwMDFhLAotMHg4MDAxYjgsCi0weGQ0MDA2ZCwKLTB4MzQ0NDAxLAotMHhjYzBjNDgsCi0weDk4NDAzYSwKLTB4Y2MyYzRhLAotMHg5NTgwMDQsCi0weGNjMDQ0OSwKLTB4ODAwMWI4LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4MjgyODAxLAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDFiLAotMHgwNDM4MGMsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTcsCi0weDA0MzgwOCwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxMywKLTB4MDQzODA0LAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDE0LAotMHhjYzEwNGMsCi0weDlhODAwOSwKLTB4Y2MxNDRkLAotMHg5ODQwZGMsCi0weGQ0MDA2ZCwKLTB4Y2MxODQ4LAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4ODAwMGM5LAotMHhkNTgwMWEsCi0weDk2YzBkNSwKLTB4ZDQwMDZkLAotMHg4MDAxYjgsCi0weGQ0MDA2ZSwKLTB4OWFjMDAzLAotMHhkNDAwNmQsCi0weGQ0MDA2ZSwKLTB4ODAwMDAwLAotMHhlYzAwN2YsCi0weDlhYzBjYywKLTB4ZDQwMDZkLAotMHg4MDAxYjgsCi0weGQ0MDA2ZSwKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4N2Q5MTAzLAotMHg3ZGQ1ODMsCi0weDdkMTkwYywKLTB4MzVjYzFmLAotMHgzNTcwMWYsCi0weDdjZjBjYiwKLTB4N2NkMDhiLAotMHg4ODAwMDAsCi0weDdlOGU4YiwKLTB4OTVjMDA0LAotMHhkNDAwNmUsCi0weDgwMDFiOCwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzEwMDMsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weGNjMjQwMywKLTB4Y2MyODAzLAotMHgzNWM0MWYsCi0weDM2YjAxZiwKLTB4N2M3MDRiLAotMHgzNGYwMWYsCi0weDdjNzA0YiwKLTB4MzU3MDFmLAotMHg3YzcwNGIsCi0weDdkODg4MSwKLTB4N2RjY2MxLAotMHg3ZTUxMDEsCi0weDdlOTU0MSwKLTB4N2M5MDgyLAotMHg3Y2Q0YzIsCi0weDdjODQ4YiwKLTB4OWFjMDAzLAotMHg3YzhjOGIsCi0weDJjODgwMSwKLTB4OTg4MDllLAotMHhkNDAwNmQsCi0weDk4NDA5YywKLTB4ZDQwMDZlLAotMHhjYzA4NGMsCi0weGNjMGM0ZCwKLTB4Y2MxMDQ4LAotMHhkNDgwMWEsCi0weGQ0YzAxYSwKLTB4ODAwMTAxLAotMHhkNTAwMWEsCi0weGNjMDgzMiwKLTB4ZDQwMDMyLAotMHg5NDgyZDksCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0MDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0NDAxZSwKLTB4Y2ExNDAwLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGQ1NDAzNCwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDI4MDQwNCwKLTB4ZTIwMDFhLAotMHhlMjAwMWEsCi0weGQ0NDAxYSwKLTB4Y2EzODAwLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weDk4ODJiZCwKLTB4MDAwMDAwLAotMHg4NDAxYmIsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDQwMCwKLTB4YzJmZjAwLAotMHhjYzA4MzQsCi0weGMxM2ZmZiwKLTB4N2M3NGNiLAotMHg3Y2M5MGIsCi0weDdkMDEwZiwKLTB4OTkwMmIwLAotMHg3YzczOGIsCi0weDg0MDFiYiwKLTB4ZDdhMDZmLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4Y2EwODAwLAotMHgyODE5MDAsCi0weDdkODk4YiwKLTB4OTU4MDE0LAotMHgyODE0MDQsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhjYTFjMDAsCi0weGNhMjQwMCwKLTB4ZTIwMDFmLAotMHhkNGMwMWEsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHhjYzE4MDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weDdkYTU4YiwKLTB4N2Q5YzQ3LAotMHg5ODQyOTcsCi0weDAwMDAwMCwKLTB4ODAwMTYxLAotMHhkNGMwMWEsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4MjQ4YzA2LAotMHgwY2NjMDYsCi0weDk4YzAwNiwKLTB4Y2MxMDRlLAotMHg5OTAwMDQsCi0weGQ0MDA3MywKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDM0ZDAxOCwKLTB4MjUxMDAxLAotMHg5NTAwMjEsCi0weGMxN2ZmZiwKLTB4Y2ExMDAwLAotMHhjYTE0MDAsCi0weGNhMTgwMCwKLTB4ZDQ4MDFkLAotMHhkNGMwMWQsCi0weDdkYjE4YiwKLTB4YzE0MjAyLAotMHhjMmMwMDEsCi0weGQ1ODAxZCwKLTB4MzRkYzBlLAotMHg3ZDVkNGMsCi0weDdmNzM0YywKLTB4ZDc0MDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4YzE0MjAwLAotMHhjMmMwMDAsCi0weDA5OWMwMSwKLTB4MzFkYzEwLAotMHg3ZjVmNGMsCi0weDdmNzM0YywKLTB4MDQyODAyLAotMHg3ZDgzODAsCi0weGQ1YTg2ZiwKLTB4ZDU4MDY2LAotMHhkNzQwMWUsCi0weGVjMDA1ZSwKLTB4YzgyNDAyLAotMHhjODI0MDIsCi0weDgwMDFiOCwKLTB4ZDYwMDc2LAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGQ0MDAxZiwKLTB4ODAwMDAwLAotMHhkNDAwMWYsCi0weGQ0MDAxZiwKLTB4ODgwMDAwLAotMHhkNDAwMWYsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAxMDE3MSwKLTB4MDIwMTc4LAotMHgwMzAwOGYsCi0weDA0MDA3ZiwKLTB4MDUwMDAzLAotMHgwNjAwM2YsCi0weDA3MDAzMiwKLTB4MDgwMTJjLAotMHgwOTAwNDYsCi0weDBhMDAzNiwKLTB4MTAwMWI2LAotMHgxNzAwYTIsCi0weDIyMDEzYSwKLTB4MjMwMTQ5LAotMHgyMDAwYjQsCi0weDI0MDEyNSwKLTB4MjcwMDRkLAotMHgyODAwNmEsCi0weDJhMDA2MCwKLTB4MmIwMDUyLAotMHgyZjAwNjUsCi0weDMyMDA4NywKLTB4MzQwMTdmLAotMHgzYzAxNTYsCi0weDNmMDA3MiwKLTB4NDEwMThjLAotMHg0NDAxMmUsCi0weDU1MDE3MywKLTB4NTYwMTdhLAotMHg2MDAwMGIsCi0weDYxMDAzNCwKLTB4NjIwMDM4LAotMHg2MzAwMzgsCi0weDY0MDAzOCwKLTB4NjUwMDM4LAotMHg2NjAwMzgsCi0weDY3MDAzOCwKLTB4NjgwMDNhLAotMHg2OTAwNDEsCi0weDZhMDA0OCwKLTB4NmIwMDQ4LAotMHg2YzAwNDgsCi0weDZkMDA0OCwKLTB4NmUwMDQ4LAotMHg2ZjAwNDgsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY2MjBfY3BfbWljcm9jb2RlW11bM10gPSB7Ci0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKLSAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCi0gICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKLSAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCi0gICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAotICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKLSAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCi0gICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAotICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKLSAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWMwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAotICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAotICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCi0gICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCi0gICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKLSAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMDIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDQ1IH0sCi0gICAgeyAweDAwODAwMDAwLCAweGMwNDk0YTIwLCAweDQ0NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDRiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2MSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjYgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMyB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTQgfSwKLSAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YjAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhYyB9LAotICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjZSB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGQwIH0sCi0gICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NTAwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUzIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2N2IgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2NiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3YSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4ZiB9LAotICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThkIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWEwIH0sCi0gICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWUgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YjEgfSwKLSAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhZiB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViZSB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjNCB9LAotICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVkMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUzIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDUgfSwKLSAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGUgfSwKLSAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMyB9LAotICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAotICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2QgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjNiIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjOSB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY0MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJkIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjhiIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4ZCB9LAotICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5MCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjkyIH0sCi0gICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4Njk1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxNDIwNTAyLCAweDA1YzAwMjUwLCAweDAwMCB9LAotICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCi0gICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAotICAgIHsgMHgwM2Q3MDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDY0OTA2NGEsIDB4MDMxZjA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWM1LCAweDAzMjAwMzQwLCAweDAwMCB9LAotICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNTUxLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwM2JhMDVjMCwgMHgwNGJiMDM0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDQ5YTA0NTAsIDB4MDQzZDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA0ZDAwNWMwLCAweDA0NDEwNGRkLCAweDAwMCB9LAotICAgIHsgMHgwNDUwMDUwNywgMHgwMzUxMDM3NSwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNjNmMDVjNywgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDAwNzA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCi0gICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAotICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA0MzgwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwNjc5LCAweDA2OTcwMDA2LCAweDAwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjYyMF9wZnBfbWljcm9jb2RlW10gPSB7Ci0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weDdjMDM4YiwKLTB4ODAwMWI4LAotMHg3YzAzOGIsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjNDE4MzgsCi0weGNhMjQwMCwKLTB4Y2EyODAwLAotMHg5NTgxYTgsCi0weGM0MWMzYSwKLTB4YzNjMDAwLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4N2M3NDRiLAotMHhjMjAwMDUsCi0weDk5YzAwMCwKLTB4YzQxYzNhLAotMHg3Yzc0NGMsCi0weGMwZmZmMCwKLTB4MDQyYzA0LAotMHgzMDkwMDIsCi0weDdkMjUwMCwKLTB4MzUxNDAyLAotMHg3ZDM1MGIsCi0weDI1NTQwMywKLTB4N2NkNTgwLAotMHgyNTljMDMsCi0weDk1YzAwNCwKLTB4ZDUwMDFiLAotMHg3ZWRkYzEsCi0weDdkOWQ4MCwKLTB4ZDY4MDFiLAotMHhkNTgwMWIsCi0weGQ0NDAxZSwKLTB4ZDU0MDFlLAotMHhkNjQwMWUsCi0weGQ2ODAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDk3ODNkMywKLTB4ZDVjMDFlLAotMHhjYTA4MDAsCi0weDgwMDAxYSwKLTB4Y2EwYzAwLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTE4MDAsCi0weGQ0NDAxZSwKLTB4ZDU4MDFlLAotMHg4MDAwNTMsCi0weGQ0MDA3NSwKLTB4ZDQ0MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDgwMTksCi0weGQ0YzAxOCwKLTB4ZDUwMDE3LAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhlMjAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4ZDQ4MDYwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGQ0ODA2MSwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ZDQ4MDE2LAotMHhkNGMwMTYsCi0weGQ0ODAxZSwKLTB4ODAwMWI4LAotMHhkNGMwMWUsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODAwNCwKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weGQ0MjAxMywKLTB4ZDU2MDY1LAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZDU2MDFjLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4M2Y3LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ODAwMDc5LAotMHhkNDIwMTMsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk4ODNlZiwKLTB4Y2ExNDAwLAotMHhkNDAwNjQsCi0weDgwMDA4ZCwKLTB4MDAwMDAwLAotMHhjNDE0MzIsCi0weGM2MTg0MywKLTB4YzQwODJmLAotMHg5NTQwMDUsCi0weGM0MGMzMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4OTU4M2Y1LAotMHhjNDEwMzEsCi0weGQ0NDAzMywKLTB4ZDUyMDY1LAotMHhkNGEwMWMsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhlNDAxNWUsCi0weGQ0MDAxZSwKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGNhMTgwMCwKLTB4MGEyMDAxLAotMHhkNjAwNzYsCi0weGM0MDgzNiwKLTB4OTg4MDA3LAotMHhjNjEwNDUsCi0weDk1MDExMCwKLTB4ZDQwMDFmLAotMHhkNDYwNjIsCi0weDgwMDAwMCwKLTB4ZDQyMDYyLAotMHhjYzM4MzUsCi0weGNjMTQzMywKLTB4ODQwMWJiLAotMHhkNDAwNzIsCi0weGQ1NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGUyMDAxYSwKLTB4ODQwMWJiLAotMHhlMjAwMWEsCi0weGNjMTA0YiwKLTB4Y2MwNDQ3LAotMHgyYzk0MDEsCi0weDdkMDk4YiwKLTB4OTg0MDA1LAotMHg3ZDE1Y2IsCi0weGQ0MDAxYSwKLTB4ODAwMWI4LAotMHhkNDAwNmQsCi0weDM0NDQwMSwKLTB4Y2MwYzQ4LAotMHg5ODQwM2EsCi0weGNjMmM0YSwKLTB4OTU4MDA0LAotMHhjYzA0NDksCi0weDgwMDFiOCwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weDI4MjgwMSwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxYiwKLTB4MDQzODBjLAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDE3LAotMHgwNDM4MDgsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTMsCi0weDA0MzgwNCwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxNCwKLTB4Y2MxMDRjLAotMHg5YTgwMDksCi0weGNjMTQ0ZCwKLTB4OTg0MGRjLAotMHhkNDAwNmQsCi0weGNjMTg0OCwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weDgwMDBjOSwKLTB4ZDU4MDFhLAotMHg5NmMwZDUsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weDlhYzAwMywKLTB4ZDQwMDZkLAotMHhkNDAwNmUsCi0weDgwMDAwMCwKLTB4ZWMwMDdmLAotMHg5YWMwY2MsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weDdkOTEwMywKLTB4N2RkNTgzLAotMHg3ZDE5MGMsCi0weDM1Y2MxZiwKLTB4MzU3MDFmLAotMHg3Y2YwY2IsCi0weDdjZDA4YiwKLTB4ODgwMDAwLAotMHg3ZThlOGIsCi0weDk1YzAwNCwKLTB4ZDQwMDZlLAotMHg4MDAxYjgsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MxMDAzLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHhjYzI0MDMsCi0weGNjMjgwMywKLTB4MzVjNDFmLAotMHgzNmIwMWYsCi0weDdjNzA0YiwKLTB4MzRmMDFmLAotMHg3YzcwNGIsCi0weDM1NzAxZiwKLTB4N2M3MDRiLAotMHg3ZDg4ODEsCi0weDdkY2NjMSwKLTB4N2U1MTAxLAotMHg3ZTk1NDEsCi0weDdjOTA4MiwKLTB4N2NkNGMyLAotMHg3Yzg0OGIsCi0weDlhYzAwMywKLTB4N2M4YzhiLAotMHgyYzg4MDEsCi0weDk4ODA5ZSwKLTB4ZDQwMDZkLAotMHg5ODQwOWMsCi0weGQ0MDA2ZSwKLTB4Y2MwODRjLAotMHhjYzBjNGQsCi0weGNjMTA0OCwKLTB4ZDQ4MDFhLAotMHhkNGMwMWEsCi0weDgwMDEwMSwKLTB4ZDUwMDFhLAotMHhjYzA4MzIsCi0weGQ0MDAzMiwKLTB4OTQ4MmQ5LAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDQwMWUsCi0weGNhMTQwMCwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhkNTQwMzQsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHgyODA0MDQsCi0weGUyMDAxYSwKLTB4ZTIwMDFhLAotMHhkNDQwMWEsCi0weGNhMzgwMCwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHg5ODgyYmQsCi0weDAwMDAwMCwKLTB4ODQwMWJiLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA0MDAsCi0weGMyZmYwMCwKLTB4Y2MwODM0LAotMHhjMTNmZmYsCi0weDdjNzRjYiwKLTB4N2NjOTBiLAotMHg3ZDAxMGYsCi0weDk5MDJiMCwKLTB4N2M3MzhiLAotMHg4NDAxYmIsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDgwMCwKLTB4MjgxOTAwLAotMHg3ZDg5OGIsCi0weDk1ODAxNCwKLTB4MjgxNDA0LAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4Y2ExYzAwLAotMHhjYTI0MDAsCi0weGUyMDAxZiwKLTB4ZDRjMDFhLAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4Y2MxODAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHg3ZGE1OGIsCi0weDdkOWM0NywKLTB4OTg0Mjk3LAotMHgwMDAwMDAsCi0weDgwMDE2MSwKLTB4ZDRjMDFhLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weDI0OGMwNiwKLTB4MGNjYzA2LAotMHg5OGMwMDYsCi0weGNjMTA0ZSwKLTB4OTkwMDA0LAotMHhkNDAwNzMsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHgzNGQwMTgsCi0weDI1MTAwMSwKLTB4OTUwMDIxLAotMHhjMTdmZmYsCi0weGNhMTAwMCwKLTB4Y2ExNDAwLAotMHhjYTE4MDAsCi0weGQ0ODAxZCwKLTB4ZDRjMDFkLAotMHg3ZGIxOGIsCi0weGMxNDIwMiwKLTB4YzJjMDAxLAotMHhkNTgwMWQsCi0weDM0ZGMwZSwKLTB4N2Q1ZDRjLAotMHg3ZjczNGMsCi0weGQ3NDAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGMxNDIwMCwKLTB4YzJjMDAwLAotMHgwOTljMDEsCi0weDMxZGMxMCwKLTB4N2Y1ZjRjLAotMHg3ZjczNGMsCi0weDA0MjgwMiwKLTB4N2Q4MzgwLAotMHhkNWE4NmYsCi0weGQ1ODA2NiwKLTB4ZDc0MDFlLAotMHhlYzAwNWUsCi0weGM4MjQwMiwKLTB4YzgyNDAyLAotMHg4MDAxYjgsCi0weGQ2MDA3NiwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhkNDAwMWYsCi0weDgwMDAwMCwKLTB4ZDQwMDFmLAotMHhkNDAwMWYsCi0weDg4MDAwMCwKLTB4ZDQwMDFmLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMTAxNzEsCi0weDAyMDE3OCwKLTB4MDMwMDhmLAotMHgwNDAwN2YsCi0weDA1MDAwMywKLTB4MDYwMDNmLAotMHgwNzAwMzIsCi0weDA4MDEyYywKLTB4MDkwMDQ2LAotMHgwYTAwMzYsCi0weDEwMDFiNiwKLTB4MTcwMGEyLAotMHgyMjAxM2EsCi0weDIzMDE0OSwKLTB4MjAwMGI0LAotMHgyNDAxMjUsCi0weDI3MDA0ZCwKLTB4MjgwMDZhLAotMHgyYTAwNjAsCi0weDJiMDA1MiwKLTB4MmYwMDY1LAotMHgzMjAwODcsCi0weDM0MDE3ZiwKLTB4M2MwMTU2LAotMHgzZjAwNzIsCi0weDQxMDE4YywKLTB4NDQwMTJlLAotMHg1NTAxNzMsCi0weDU2MDE3YSwKLTB4NjAwMDBiLAotMHg2MTAwMzQsCi0weDYyMDAzOCwKLTB4NjMwMDM4LAotMHg2NDAwMzgsCi0weDY1MDAzOCwKLTB4NjYwMDM4LAotMHg2NzAwMzgsCi0weDY4MDAzYSwKLTB4NjkwMDQxLAotMHg2YTAwNDgsCi0weDZiMDA0OCwKLTB4NmMwMDQ4LAotMHg2ZDAwNDgsCi0weDZlMDA0OCwKLTB4NmYwMDQ4LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNjMwX2NwX21pY3JvY29kZVtdWzNdID0gewotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCi0gICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAotICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1OSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCi0gICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAotICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKLSAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCi0gICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjIgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAotICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKLSAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCi0gICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjQgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDViZCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA0OSwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzcwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwODAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4NiB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2IxIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjUgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5YyB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5MCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDA4MDAwMDAwLCAweDAwMjkwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHhjMDIyMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOTIgfSwKLSAgICB7IDB4MDAwMDIxMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOWUgfSwKLSAgICB7IDB4MDAwMDIxMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2FlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MwIH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTcwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNkMyB9LAotICAgIHsgMHg4YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4NDAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHg0MDAwMDAwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2UxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAxODAwLCAweDNlNCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjYsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2U3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAxYzAwLCAweDNlYSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjcsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODIwYzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDk0OGU4LCAweDAwMCB9LAotICAgIHsgMHhhNTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHhjMDIxMDIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2Y3IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA0ODEyMjAsIDB4M2ZmIH0sCi0gICAgeyAweGE3ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ODMsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4YTk4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBjMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhYjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFkODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjg4MCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YjM4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhZjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGIxODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTQ4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDExODIwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAyMThhMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMzE4YzAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDQxOGY4ZTAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA1MThmODgwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNjE4ZTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDcxOGYwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA4MThmM2ZjLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ0OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDU2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NWUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDYzIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2OGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2UgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDhkIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDU2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGExIH0sCi0gICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGFkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YTkgfSwKLSAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGE3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YzAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY4ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YzQgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2IgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjZCB9LAotICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRmZCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGVjIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGE3IH0sCi0gICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUxNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHg5ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4NDAyMTRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDk2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjIyMjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAxNGE4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDEwMDAwMDAwLCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHhlZmZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTM4Y2UsIDB4Njc4IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAzMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1NjMgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjAwMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTc5IH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmIgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTc5IH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzcgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY4ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMWMxMCwgMHg1NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg1N2IgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OGMgfSwKLSAgICB7IDB4MDAwMGEyYjcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTJjNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4YSB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU5ZCB9LAotICAgIHsgMHgwMDAwYTJiYiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTliIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWFlIH0sCi0gICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEyYzYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YWMgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmMzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEyYzcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YmIgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDMwNGEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg1YzEgfSwKLSAgICB7IDB4YTQwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIxLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1Y2QgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwNDAzNjIxLCAweDVlMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZTAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTA5MiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDkzLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyOSB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyOSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjAyIH0sCi0gICAgeyAweDAwMDBhMDkyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwOTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmJhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDFmZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjBiIH0sCi0gICAgeyAweDAwMDRhMDAzLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAwMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTAgfSwKLSAgICB7IDB4MDAwNGEwMTAsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjggfSwKLSAgICB7IDB4MDAwNGEwMTEsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDExLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDEyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDEzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDE1LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTYsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDE2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTcsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDE3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwODAwNjJkLCAweDAwMCB9LAotICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NjNhIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYzOCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzYgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2M2UgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDYyYSB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg2MmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4OSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDQwNGMxMSwgMHg2NmYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDM4YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDMwMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwNjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDY4OCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjIsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDA0MDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGEgfSwKLSAgICB7IDB4OWYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4ZiB9LAotICAgIHsgMHg5ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTQyMDRmZiwgMHgwNWJkMDI1MCwgMHgwMDAgfSwKLSAgICB7IDB4MDFjMzAxNjgsIDB4MDQzZjA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAotICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDNkNzA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA2NDYwNjQ3LCAweDAzMWYwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDVjMiwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDU0ZSwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDNiYTA1YmQsIDB4MDRiODAzNDQsIDB4MDAwIH0sCi0gICAgeyAweDA0OTcwNDRkLCAweDA0M2QwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNGNkMDViZCwgMHgwNDQxMDRkYSwgMHgwMDAgfSwKLSAgICB7IDB4MDQ0ZDA1MDQsIDB4MDM1MTAzNzUsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDYzYzA1YzQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDAwMDcwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDAzZjgwM2VkLCAweDA0MDgwNDA2LCAweDAwMCB9LAotICAgIHsgMHgwNDBlMDQwYSwgMHgwNDBjMDQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDQxYzA0MTgsIDB4MDQyNDA0MjAsIDB4MDAwIH0sCi0gICAgeyAweDA0MmMwNDI4LCAweDA0MzQwNDMwLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNDM4MDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDY3NiwgMHgwNjk0MDAwNiwgMHgwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY2MzBfcGZwX21pY3JvY29kZVtdID0gewotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHg3YzAzOGIsCi0weDgwMDFiOCwKLTB4N2MwMzhiLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4YzQxODM4LAotMHhjYTI0MDAsCi0weGNhMjgwMCwKLTB4OTU4MWE4LAotMHhjNDFjM2EsCi0weGMzYzAwMCwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDdjNzQ0YiwKLTB4YzIwMDA1LAotMHg5OWMwMDAsCi0weGM0MWMzYSwKLTB4N2M3NDRjLAotMHhjMGZmZjAsCi0weDA0MmMwNCwKLTB4MzA5MDAyLAotMHg3ZDI1MDAsCi0weDM1MTQwMiwKLTB4N2QzNTBiLAotMHgyNTU0MDMsCi0weDdjZDU4MCwKLTB4MjU5YzAzLAotMHg5NWMwMDQsCi0weGQ1MDAxYiwKLTB4N2VkZGMxLAotMHg3ZDlkODAsCi0weGQ2ODAxYiwKLTB4ZDU4MDFiLAotMHhkNDQwMWUsCi0weGQ1NDAxZSwKLTB4ZDY0MDFlLAotMHhkNjgwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg5NzgzZDMsCi0weGQ1YzAxZSwKLTB4Y2EwODAwLAotMHg4MDAwMWEsCi0weGNhMGMwMCwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2ExODAwLAotMHhkNDQwMWUsCi0weGQ1ODAxZSwKLTB4ODAwMDUzLAotMHhkNDAwNzUsCi0weGQ0NDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ4MDE5LAotMHhkNGMwMTgsCi0weGQ1MDAxNywKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZTIwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weGQ0ODA2MCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhkNDgwNjEsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weGQ0ODAxNiwKLTB4ZDRjMDE2LAotMHhkNDgwMWUsCi0weDgwMDFiOCwKLTB4ZDRjMDFlLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgwMDQsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHhkNDIwMTMsCi0weGQ1NjA2NSwKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGQ1NjAxYywKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODNmNywKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weDgwMDA3OSwKLTB4ZDQyMDEzLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5ODgzZWYsCi0weGNhMTQwMCwKLTB4ZDQwMDY0LAotMHg4MDAwOGQsCi0weDAwMDAwMCwKLTB4YzQxNDMyLAotMHhjNjE4NDMsCi0weGM0MDgyZiwKLTB4OTU0MDA1LAotMHhjNDBjMzAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDk1ODNmNSwKLTB4YzQxMDMxLAotMHhkNDQwMzMsCi0weGQ1MjA2NSwKLTB4ZDRhMDFjLAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZTQwMTVlLAotMHhkNDAwMWUsCi0weDgwMDAwMCwKLTB4MDYyMDAxLAotMHhjYTE4MDAsCi0weDBhMjAwMSwKLTB4ZDYwMDc2LAotMHhjNDA4MzYsCi0weDk4ODAwNywKLTB4YzYxMDQ1LAotMHg5NTAxMTAsCi0weGQ0MDAxZiwKLTB4ZDQ2MDYyLAotMHg4MDAwMDAsCi0weGQ0MjA2MiwKLTB4Y2MzODM1LAotMHhjYzE0MzMsCi0weDg0MDFiYiwKLTB4ZDQwMDcyLAotMHhkNTQwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhlMjAwMWEsCi0weDg0MDFiYiwKLTB4ZTIwMDFhLAotMHhjYzEwNGIsCi0weGNjMDQ0NywKLTB4MmM5NDAxLAotMHg3ZDA5OGIsCi0weDk4NDAwNSwKLTB4N2QxNWNiLAotMHhkNDAwMWEsCi0weDgwMDFiOCwKLTB4ZDQwMDZkLAotMHgzNDQ0MDEsCi0weGNjMGM0OCwKLTB4OTg0MDNhLAotMHhjYzJjNGEsCi0weDk1ODAwNCwKLTB4Y2MwNDQ5LAotMHg4MDAxYjgsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHgyODI4MDEsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMWIsCi0weDA0MzgwYywKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxNywKLTB4MDQzODA4LAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDEzLAotMHgwNDM4MDQsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTQsCi0weGNjMTA0YywKLTB4OWE4MDA5LAotMHhjYzE0NGQsCi0weDk4NDBkYywKLTB4ZDQwMDZkLAotMHhjYzE4NDgsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHg4MDAwYzksCi0weGQ1ODAxYSwKLTB4OTZjMGQ1LAotMHhkNDAwNmQsCi0weDgwMDFiOCwKLTB4ZDQwMDZlLAotMHg5YWMwMDMsCi0weGQ0MDA2ZCwKLTB4ZDQwMDZlLAotMHg4MDAwMDAsCi0weGVjMDA3ZiwKLTB4OWFjMGNjLAotMHhkNDAwNmQsCi0weDgwMDFiOCwKLTB4ZDQwMDZlLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHg3ZDkxMDMsCi0weDdkZDU4MywKLTB4N2QxOTBjLAotMHgzNWNjMWYsCi0weDM1NzAxZiwKLTB4N2NmMGNiLAotMHg3Y2QwOGIsCi0weDg4MDAwMCwKLTB4N2U4ZThiLAotMHg5NWMwMDQsCi0weGQ0MDA2ZSwKLTB4ODAwMWI4LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMTAwMywKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4Y2MyNDAzLAotMHhjYzI4MDMsCi0weDM1YzQxZiwKLTB4MzZiMDFmLAotMHg3YzcwNGIsCi0weDM0ZjAxZiwKLTB4N2M3MDRiLAotMHgzNTcwMWYsCi0weDdjNzA0YiwKLTB4N2Q4ODgxLAotMHg3ZGNjYzEsCi0weDdlNTEwMSwKLTB4N2U5NTQxLAotMHg3YzkwODIsCi0weDdjZDRjMiwKLTB4N2M4NDhiLAotMHg5YWMwMDMsCi0weDdjOGM4YiwKLTB4MmM4ODAxLAotMHg5ODgwOWUsCi0weGQ0MDA2ZCwKLTB4OTg0MDljLAotMHhkNDAwNmUsCi0weGNjMDg0YywKLTB4Y2MwYzRkLAotMHhjYzEwNDgsCi0weGQ0ODAxYSwKLTB4ZDRjMDFhLAotMHg4MDAxMDEsCi0weGQ1MDAxYSwKLTB4Y2MwODMyLAotMHhkNDAwMzIsCi0weDk0ODJkOSwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ0MDFlLAotMHhjYTE0MDAsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4ZDU0MDM0LAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4MjgwNDA0LAotMHhlMjAwMWEsCi0weGUyMDAxYSwKLTB4ZDQ0MDFhLAotMHhjYTM4MDAsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4OTg4MmJkLAotMHgwMDAwMDAsCi0weDg0MDFiYiwKLTB4ZDdhMDZmLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4Y2EwNDAwLAotMHhjMmZmMDAsCi0weGNjMDgzNCwKLTB4YzEzZmZmLAotMHg3Yzc0Y2IsCi0weDdjYzkwYiwKLTB4N2QwMTBmLAotMHg5OTAyYjAsCi0weDdjNzM4YiwKLTB4ODQwMWJiLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA4MDAsCi0weDI4MTkwMCwKLTB4N2Q4OThiLAotMHg5NTgwMTQsCi0weDI4MTQwNCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGNhMWMwMCwKLTB4Y2EyNDAwLAotMHhlMjAwMWYsCi0weGQ0YzAxYSwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weGNjMTgwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4N2RhNThiLAotMHg3ZDljNDcsCi0weDk4NDI5NywKLTB4MDAwMDAwLAotMHg4MDAxNjEsCi0weGQ0YzAxYSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHgyNDhjMDYsCi0weDBjY2MwNiwKLTB4OThjMDA2LAotMHhjYzEwNGUsCi0weDk5MDAwNCwKLTB4ZDQwMDczLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4MzRkMDE4LAotMHgyNTEwMDEsCi0weDk1MDAyMSwKLTB4YzE3ZmZmLAotMHhjYTEwMDAsCi0weGNhMTQwMCwKLTB4Y2ExODAwLAotMHhkNDgwMWQsCi0weGQ0YzAxZCwKLTB4N2RiMThiLAotMHhjMTQyMDIsCi0weGMyYzAwMSwKLTB4ZDU4MDFkLAotMHgzNGRjMGUsCi0weDdkNWQ0YywKLTB4N2Y3MzRjLAotMHhkNzQwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhjMTQyMDAsCi0weGMyYzAwMCwKLTB4MDk5YzAxLAotMHgzMWRjMTAsCi0weDdmNWY0YywKLTB4N2Y3MzRjLAotMHgwNDI4MDIsCi0weDdkODM4MCwKLTB4ZDVhODZmLAotMHhkNTgwNjYsCi0weGQ3NDAxZSwKLTB4ZWMwMDVlLAotMHhjODI0MDIsCi0weGM4MjQwMiwKLTB4ODAwMWI4LAotMHhkNjAwNzYsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4ZDQwMDFmLAotMHg4MDAwMDAsCi0weGQ0MDAxZiwKLTB4ZDQwMDFmLAotMHg4ODAwMDAsCi0weGQ0MDAxZiwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDEwMTcxLAotMHgwMjAxNzgsCi0weDAzMDA4ZiwKLTB4MDQwMDdmLAotMHgwNTAwMDMsCi0weDA2MDAzZiwKLTB4MDcwMDMyLAotMHgwODAxMmMsCi0weDA5MDA0NiwKLTB4MGEwMDM2LAotMHgxMDAxYjYsCi0weDE3MDBhMiwKLTB4MjIwMTNhLAotMHgyMzAxNDksCi0weDIwMDBiNCwKLTB4MjQwMTI1LAotMHgyNzAwNGQsCi0weDI4MDA2YSwKLTB4MmEwMDYwLAotMHgyYjAwNTIsCi0weDJmMDA2NSwKLTB4MzIwMDg3LAotMHgzNDAxN2YsCi0weDNjMDE1NiwKLTB4M2YwMDcyLAotMHg0MTAxOGMsCi0weDQ0MDEyZSwKLTB4NTUwMTczLAotMHg1NjAxN2EsCi0weDYwMDAwYiwKLTB4NjEwMDM0LAotMHg2MjAwMzgsCi0weDYzMDAzOCwKLTB4NjQwMDM4LAotMHg2NTAwMzgsCi0weDY2MDAzOCwKLTB4NjcwMDM4LAotMHg2ODAwM2EsCi0weDY5MDA0MSwKLTB4NmEwMDQ4LAotMHg2YjAwNDgsCi0weDZjMDA0OCwKLTB4NmQwMDQ4LAotMHg2ZTAwNDgsCi0weDZmMDA0OCwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjYzNV9jcF9taWNyb2NvZGVbXVszXSA9IHsKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAotICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKLSAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAotICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKLSAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCi0gICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAotICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCi0gICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAotICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweGMwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMGEyMiwgMHgzNGIgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM1NCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzY0IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmEgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmQgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzODYgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiMSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I1IH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWMgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzkyIH0sCi0gICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzllIH0sCi0gICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNhZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2NlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjMCB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKLSAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKLSAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAotICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjkwYzQwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwMiwgMHg0NDggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMjAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDVlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjQsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ2MyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDUsIDB4NjhmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ4ZCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDk2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQ1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGEwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDRhMSB9LAotICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGE5IH0sCi0gICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGM0IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNiIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2QgfSwKLSAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0ZmQgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRlYyB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0ZTAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAotICAgIHsgMHgwMDAwMDAyYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MDIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4YjUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiOTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDAyODBlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1MTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUyYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmUwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZjFmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweGMwMjIwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHg0MDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAotICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAotICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDY3OCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTYzIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc3IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTdiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThjIH0sCi0gICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OGEgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OWQgfSwKLSAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5YiB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAotICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWJiIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWMxIH0sCi0gICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWNkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDQwMzYyMSwgMHg1ZTAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NWUwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTA5MywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYwMiB9LAotICAgIHsgMHgwMDAwYTA5MiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDkzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYjYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiYSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmJlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxZmYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwYiB9LAotICAgIHsgMHgwMDA0YTAwMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEwIH0sCi0gICAgeyAweDAwMDRhMDEwLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCi0gICAgeyAweDAwMDRhMDExLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEyLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEzLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE1LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE2LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE3LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDYzYSB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MzggfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2M2UgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM2IH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjNlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwNDgxMSwgMHg2MmEgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1OSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NjUzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2ODggfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhhIH0sCi0gICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGYgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDE0MjA0ZmYsIDB4MDViZDAyNTAsIDB4MDAwIH0sCi0gICAgeyAweDAxYzMwMTY4LCAweDA0M2YwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKLSAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCi0gICAgeyAweDAzZDcwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNjQ2MDY0NywgMHgwMzFmMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YzIsIDB4MDMyMDAzNDAsIDB4MDAwIH0sCi0gICAgeyAweDAzMmEwMjgyLCAweDAzNDIwMzM0LCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1NGUsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDAzYmEwNWJkLCAweDA0YjgwMzQ0LCAweDAwMCB9LAotICAgIHsgMHgwNDk3MDQ0ZCwgMHgwNDNkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDRjZDA1YmQsIDB4MDQ0MTA0ZGEsIDB4MDAwIH0sCi0gICAgeyAweDA0NGQwNTA0LCAweDAzNTEwMzc1LCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA2M2MwNWM0LCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwMDA3MDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCi0gICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAotICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDQzODA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjA2NzYsIDB4MDY5NDAwMDYsIDB4MDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNjM1X3BmcF9taWNyb2NvZGVbXSA9IHsKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4N2MwMzhiLAotMHg4MDAxYjgsCi0weDdjMDM4YiwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGM0MTgzOCwKLTB4Y2EyNDAwLAotMHhjYTI4MDAsCi0weDk1ODFhOCwKLTB4YzQxYzNhLAotMHhjM2MwMDAsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHg3Yzc0NGIsCi0weGMyMDAwNSwKLTB4OTljMDAwLAotMHhjNDFjM2EsCi0weDdjNzQ0YywKLTB4YzBmZmYwLAotMHgwNDJjMDQsCi0weDMwOTAwMiwKLTB4N2QyNTAwLAotMHgzNTE0MDIsCi0weDdkMzUwYiwKLTB4MjU1NDAzLAotMHg3Y2Q1ODAsCi0weDI1OWMwMywKLTB4OTVjMDA0LAotMHhkNTAwMWIsCi0weDdlZGRjMSwKLTB4N2Q5ZDgwLAotMHhkNjgwMWIsCi0weGQ1ODAxYiwKLTB4ZDQ0MDFlLAotMHhkNTQwMWUsCi0weGQ2NDAxZSwKLTB4ZDY4MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4OTc4M2QzLAotMHhkNWMwMWUsCi0weGNhMDgwMCwKLTB4ODAwMDFhLAotMHhjYTBjMDAsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMTgwMCwKLTB4ZDQ0MDFlLAotMHhkNTgwMWUsCi0weDgwMDA1MywKLTB4ZDQwMDc1LAotMHhkNDQwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0ODAxOSwKLTB4ZDRjMDE4LAotMHhkNTAwMTcsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGUyMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHhkNDgwNjAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4ZDQ4MDYxLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHhkNDgwMTYsCi0weGQ0YzAxNiwKLTB4ZDQ4MDFlLAotMHg4MDAxYjgsCi0weGQ0YzAxZSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4MDA0LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ZDQyMDEzLAotMHhkNTYwNjUsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhkNTYwMWMsCi0weDgwMDAwMCwKLTB4MDYyMDAxLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgzZjcsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHg4MDAwNzksCi0weGQ0MjAxMywKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTg4M2VmLAotMHhjYTE0MDAsCi0weGQ0MDA2NCwKLTB4ODAwMDhkLAotMHgwMDAwMDAsCi0weGM0MTQzMiwKLTB4YzYxODQzLAotMHhjNDA4MmYsCi0weDk1NDAwNSwKLTB4YzQwYzMwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHg5NTgzZjUsCi0weGM0MTAzMSwKLTB4ZDQ0MDMzLAotMHhkNTIwNjUsCi0weGQ0YTAxYywKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGU0MDE1ZSwKLTB4ZDQwMDFlLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4Y2ExODAwLAotMHgwYTIwMDEsCi0weGQ2MDA3NiwKLTB4YzQwODM2LAotMHg5ODgwMDcsCi0weGM2MTA0NSwKLTB4OTUwMTEwLAotMHhkNDAwMWYsCi0weGQ0NjA2MiwKLTB4ODAwMDAwLAotMHhkNDIwNjIsCi0weGNjMzgzNSwKLTB4Y2MxNDMzLAotMHg4NDAxYmIsCi0weGQ0MDA3MiwKLTB4ZDU0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTIwMDFhLAotMHg4NDAxYmIsCi0weGUyMDAxYSwKLTB4Y2MxMDRiLAotMHhjYzA0NDcsCi0weDJjOTQwMSwKLTB4N2QwOThiLAotMHg5ODQwMDUsCi0weDdkMTVjYiwKLTB4ZDQwMDFhLAotMHg4MDAxYjgsCi0weGQ0MDA2ZCwKLTB4MzQ0NDAxLAotMHhjYzBjNDgsCi0weDk4NDAzYSwKLTB4Y2MyYzRhLAotMHg5NTgwMDQsCi0weGNjMDQ0OSwKLTB4ODAwMWI4LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4MjgyODAxLAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDFiLAotMHgwNDM4MGMsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTcsCi0weDA0MzgwOCwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxMywKLTB4MDQzODA0LAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDE0LAotMHhjYzEwNGMsCi0weDlhODAwOSwKLTB4Y2MxNDRkLAotMHg5ODQwZGMsCi0weGQ0MDA2ZCwKLTB4Y2MxODQ4LAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4ODAwMGM5LAotMHhkNTgwMWEsCi0weDk2YzBkNSwKLTB4ZDQwMDZkLAotMHg4MDAxYjgsCi0weGQ0MDA2ZSwKLTB4OWFjMDAzLAotMHhkNDAwNmQsCi0weGQ0MDA2ZSwKLTB4ODAwMDAwLAotMHhlYzAwN2YsCi0weDlhYzBjYywKLTB4ZDQwMDZkLAotMHg4MDAxYjgsCi0weGQ0MDA2ZSwKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4N2Q5MTAzLAotMHg3ZGQ1ODMsCi0weDdkMTkwYywKLTB4MzVjYzFmLAotMHgzNTcwMWYsCi0weDdjZjBjYiwKLTB4N2NkMDhiLAotMHg4ODAwMDAsCi0weDdlOGU4YiwKLTB4OTVjMDA0LAotMHhkNDAwNmUsCi0weDgwMDFiOCwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzEwMDMsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weGNjMjQwMywKLTB4Y2MyODAzLAotMHgzNWM0MWYsCi0weDM2YjAxZiwKLTB4N2M3MDRiLAotMHgzNGYwMWYsCi0weDdjNzA0YiwKLTB4MzU3MDFmLAotMHg3YzcwNGIsCi0weDdkODg4MSwKLTB4N2RjY2MxLAotMHg3ZTUxMDEsCi0weDdlOTU0MSwKLTB4N2M5MDgyLAotMHg3Y2Q0YzIsCi0weDdjODQ4YiwKLTB4OWFjMDAzLAotMHg3YzhjOGIsCi0weDJjODgwMSwKLTB4OTg4MDllLAotMHhkNDAwNmQsCi0weDk4NDA5YywKLTB4ZDQwMDZlLAotMHhjYzA4NGMsCi0weGNjMGM0ZCwKLTB4Y2MxMDQ4LAotMHhkNDgwMWEsCi0weGQ0YzAxYSwKLTB4ODAwMTAxLAotMHhkNTAwMWEsCi0weGNjMDgzMiwKLTB4ZDQwMDMyLAotMHg5NDgyZDksCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0MDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0NDAxZSwKLTB4Y2ExNDAwLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGQ1NDAzNCwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDI4MDQwNCwKLTB4ZTIwMDFhLAotMHhlMjAwMWEsCi0weGQ0NDAxYSwKLTB4Y2EzODAwLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weDk4ODJiZCwKLTB4MDAwMDAwLAotMHg4NDAxYmIsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDQwMCwKLTB4YzJmZjAwLAotMHhjYzA4MzQsCi0weGMxM2ZmZiwKLTB4N2M3NGNiLAotMHg3Y2M5MGIsCi0weDdkMDEwZiwKLTB4OTkwMmIwLAotMHg3YzczOGIsCi0weDg0MDFiYiwKLTB4ZDdhMDZmLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4Y2EwODAwLAotMHgyODE5MDAsCi0weDdkODk4YiwKLTB4OTU4MDE0LAotMHgyODE0MDQsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhjYTFjMDAsCi0weGNhMjQwMCwKLTB4ZTIwMDFmLAotMHhkNGMwMWEsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHhjYzE4MDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weDdkYTU4YiwKLTB4N2Q5YzQ3LAotMHg5ODQyOTcsCi0weDAwMDAwMCwKLTB4ODAwMTYxLAotMHhkNGMwMWEsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4MjQ4YzA2LAotMHgwY2NjMDYsCi0weDk4YzAwNiwKLTB4Y2MxMDRlLAotMHg5OTAwMDQsCi0weGQ0MDA3MywKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDM0ZDAxOCwKLTB4MjUxMDAxLAotMHg5NTAwMjEsCi0weGMxN2ZmZiwKLTB4Y2ExMDAwLAotMHhjYTE0MDAsCi0weGNhMTgwMCwKLTB4ZDQ4MDFkLAotMHhkNGMwMWQsCi0weDdkYjE4YiwKLTB4YzE0MjAyLAotMHhjMmMwMDEsCi0weGQ1ODAxZCwKLTB4MzRkYzBlLAotMHg3ZDVkNGMsCi0weDdmNzM0YywKLTB4ZDc0MDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4YzE0MjAwLAotMHhjMmMwMDAsCi0weDA5OWMwMSwKLTB4MzFkYzEwLAotMHg3ZjVmNGMsCi0weDdmNzM0YywKLTB4MDQyODAyLAotMHg3ZDgzODAsCi0weGQ1YTg2ZiwKLTB4ZDU4MDY2LAotMHhkNzQwMWUsCi0weGVjMDA1ZSwKLTB4YzgyNDAyLAotMHhjODI0MDIsCi0weDgwMDFiOCwKLTB4ZDYwMDc2LAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGQ0MDAxZiwKLTB4ODAwMDAwLAotMHhkNDAwMWYsCi0weGQ0MDAxZiwKLTB4ODgwMDAwLAotMHhkNDAwMWYsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAxMDE3MSwKLTB4MDIwMTc4LAotMHgwMzAwOGYsCi0weDA0MDA3ZiwKLTB4MDUwMDAzLAotMHgwNjAwM2YsCi0weDA3MDAzMiwKLTB4MDgwMTJjLAotMHgwOTAwNDYsCi0weDBhMDAzNiwKLTB4MTAwMWI2LAotMHgxNzAwYTIsCi0weDIyMDEzYSwKLTB4MjMwMTQ5LAotMHgyMDAwYjQsCi0weDI0MDEyNSwKLTB4MjcwMDRkLAotMHgyODAwNmEsCi0weDJhMDA2MCwKLTB4MmIwMDUyLAotMHgyZjAwNjUsCi0weDMyMDA4NywKLTB4MzQwMTdmLAotMHgzYzAxNTYsCi0weDNmMDA3MiwKLTB4NDEwMThjLAotMHg0NDAxMmUsCi0weDU1MDE3MywKLTB4NTYwMTdhLAotMHg2MDAwMGIsCi0weDYxMDAzNCwKLTB4NjIwMDM4LAotMHg2MzAwMzgsCi0weDY0MDAzOCwKLTB4NjUwMDM4LAotMHg2NjAwMzgsCi0weDY3MDAzOCwKLTB4NjgwMDNhLAotMHg2OTAwNDEsCi0weDZhMDA0OCwKLTB4NmIwMDQ4LAotMHg2YzAwNDgsCi0weDZkMDA0OCwKLTB4NmUwMDQ4LAotMHg2ZjAwNDgsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY2NzBfY3BfbWljcm9jb2RlW11bM10gPSB7Ci0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjI0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKLSAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCi0gICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjRkIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKLSAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCi0gICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAotICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKLSAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1NiB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCi0gICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAotICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY3YiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjdiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzggfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKLSAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2MiB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4MzZhIH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NiB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVkIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YjMgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YyB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzODIgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2FmIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTggfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhNCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E0IH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOGMgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzhlIH0sCi0gICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzlhIH0sCi0gICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNhYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzQgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2I4IH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYzkgfSwKLSAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNkNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZGEgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNkZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKLSAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MDggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNlZCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmNSB9LAotICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQwOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MDggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKLSAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmMCB9LAotICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCi0gICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZjAgfSwKLSAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmMCB9LAotICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjkwYzQwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwMiwgMHg0M2UgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ0YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMjAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDU0IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjQsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ1OSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDUsIDB4NjgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2MCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDY1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDhjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQ0YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NDk2IH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDQ5NyB9LAotICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDlmIH0sCi0gICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGI2IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2ODEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGJhIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMxIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YzMgfSwKLSAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0ZjMgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRlMiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0ZDYgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5ZCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4YjUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiOTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDAyODBlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1MGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUyMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmUwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZjFmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweGMwMjIwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHg0MDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAotICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAotICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDY2YSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTU5IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU2ZiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTYxIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU2ZiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZkIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2ODEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTcxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTgyIH0sCi0gICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1ODAgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OTMgfSwKLSAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5MSB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhNCB9LAotICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWEyIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWIxIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWI3IH0sCi0gICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWJjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWMzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDQwMzYyMSwgMHg1ZDYgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NWQ2IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTIsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTA5MywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MWYgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MWYgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVmOCB9LAotICAgIHsgMHgwMDAwYTA5MiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDkzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYjYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiYSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmJlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxZmYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwMSB9LAotICAgIHsgMHgwMDA0YTAwMywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjA2IH0sCi0gICAgeyAweDAwMDRhMDEwLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFlIH0sCi0gICAgeyAweDAwMDRhMDExLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEyLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEzLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE0LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE1LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE2LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE3LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTAxNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDYzMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWJjIH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjM0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwNDgxMSwgMHg2MjAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4NjIwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0ZCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZhIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY0NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY3YiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDQwNGMxMSwgMHg2NjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDM4YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDMwMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwNjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDY3YSB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjIsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDA0MDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2N2MgfSwKLSAgICB7IDB4OWYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2N2YgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4MSB9LAotICAgIHsgMHg5ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY4NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxNDIwNGY1LCAweDA1YjMwMjUwLCAweDAwMCB9LAotICAgIHsgMHgwMWMzMDE2OCwgMHgwNDM1MDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCi0gICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAotICAgIHsgMHgwM2NkMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDYzYzA2M2QsIDB4MDMxZjA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWI4LCAweDAzMjAwMzQwLCAweDAwMCB9LAotICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKLSAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNTQ0LCAweDA1YjMwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwM2IyMDViMywgMHgwNGFlMDM0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDQ4ZDA0NDMsIDB4MDQzMzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDA0YzMwNWIzLCAweDA0MzcwNGQwLCAweDAwMCB9LAotICAgIHsgMHgwNDQzMDRmYSwgMHgwMzUxMDM3MSwgMHgwMDAgfSwKLSAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDViMywgMHgwNjMyMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDViMzA1YjMsIDB4MDAwNzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDNlZTAzZTMsIDB4MDNmZTAzZmMsIDB4MDAwIH0sCi0gICAgeyAweDA0MDQwNDAwLCAweDA0MDIwNDA2LCAweDAwMCB9LAotICAgIHsgMHgwNDEyMDQwZSwgMHgwNDFhMDQxNiwgMHgwMDAgfSwKLSAgICB7IDB4MDQyMjA0MWUsIDB4MDQyYTA0MjYsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWIzLCAweDA0MmUwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwNjY4LCAweDA2ODYwMDA2LCAweDAwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjY3MF9wZnBfbWljcm9jb2RlW10gPSB7Ci0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weDdjMDM4YiwKLTB4ODAwMWI4LAotMHg3YzAzOGIsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjNDE4MzgsCi0weGNhMjQwMCwKLTB4Y2EyODAwLAotMHg5NTgxYTgsCi0weGM0MWMzYSwKLTB4YzNjMDAwLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4N2M3NDRiLAotMHhjMjAwMDUsCi0weDk5YzAwMCwKLTB4YzQxYzNhLAotMHg3Yzc0NGMsCi0weGMwZmZmMCwKLTB4MDQyYzA0LAotMHgzMDkwMDIsCi0weDdkMjUwMCwKLTB4MzUxNDAyLAotMHg3ZDM1MGIsCi0weDI1NTQwMywKLTB4N2NkNTgwLAotMHgyNTljMDMsCi0weDk1YzAwNCwKLTB4ZDUwMDFiLAotMHg3ZWRkYzEsCi0weDdkOWQ4MCwKLTB4ZDY4MDFiLAotMHhkNTgwMWIsCi0weGQ0NDAxZSwKLTB4ZDU0MDFlLAotMHhkNjQwMWUsCi0weGQ2ODAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDk3ODNkMywKLTB4ZDVjMDFlLAotMHhjYTA4MDAsCi0weDgwMDAxYSwKLTB4Y2EwYzAwLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTE4MDAsCi0weGQ0NDAxZSwKLTB4ZDU4MDFlLAotMHg4MDAwNTMsCi0weGQ0MDA3NSwKLTB4ZDQ0MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDgwMTksCi0weGQ0YzAxOCwKLTB4ZDUwMDE3LAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhlMjAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4ZDQ4MDYwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGQ0ODA2MSwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ZDQ4MDE2LAotMHhkNGMwMTYsCi0weGQ0ODAxZSwKLTB4ODAwMWI4LAotMHhkNGMwMWUsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODAwNCwKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weGQ0MjAxMywKLTB4ZDU2MDY1LAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZDU2MDFjLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4M2Y3LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ODAwMDc5LAotMHhkNDIwMTMsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk4ODNlZiwKLTB4Y2ExNDAwLAotMHhkNDAwNjQsCi0weDgwMDA4ZCwKLTB4MDAwMDAwLAotMHhjNDE0MzIsCi0weGM2MTg0MywKLTB4YzQwODJmLAotMHg5NTQwMDUsCi0weGM0MGMzMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4OTU4M2Y1LAotMHhjNDEwMzEsCi0weGQ0NDAzMywKLTB4ZDUyMDY1LAotMHhkNGEwMWMsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhlNDAxNWUsCi0weGQ0MDAxZSwKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGNhMTgwMCwKLTB4MGEyMDAxLAotMHhkNjAwNzYsCi0weGM0MDgzNiwKLTB4OTg4MDA3LAotMHhjNjEwNDUsCi0weDk1MDExMCwKLTB4ZDQwMDFmLAotMHhkNDYwNjIsCi0weDgwMDAwMCwKLTB4ZDQyMDYyLAotMHhjYzM4MzUsCi0weGNjMTQzMywKLTB4ODQwMWJiLAotMHhkNDAwNzIsCi0weGQ1NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGUyMDAxYSwKLTB4ODQwMWJiLAotMHhlMjAwMWEsCi0weGNjMTA0YiwKLTB4Y2MwNDQ3LAotMHgyYzk0MDEsCi0weDdkMDk4YiwKLTB4OTg0MDA1LAotMHg3ZDE1Y2IsCi0weGQ0MDAxYSwKLTB4ODAwMWI4LAotMHhkNDAwNmQsCi0weDM0NDQwMSwKLTB4Y2MwYzQ4LAotMHg5ODQwM2EsCi0weGNjMmM0YSwKLTB4OTU4MDA0LAotMHhjYzA0NDksCi0weDgwMDFiOCwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weDI4MjgwMSwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxYiwKLTB4MDQzODBjLAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDE3LAotMHgwNDM4MDgsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTMsCi0weDA0MzgwNCwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxNCwKLTB4Y2MxMDRjLAotMHg5YTgwMDksCi0weGNjMTQ0ZCwKLTB4OTg0MGRjLAotMHhkNDAwNmQsCi0weGNjMTg0OCwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weDgwMDBjOSwKLTB4ZDU4MDFhLAotMHg5NmMwZDUsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weDlhYzAwMywKLTB4ZDQwMDZkLAotMHhkNDAwNmUsCi0weDgwMDAwMCwKLTB4ZWMwMDdmLAotMHg5YWMwY2MsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weDdkOTEwMywKLTB4N2RkNTgzLAotMHg3ZDE5MGMsCi0weDM1Y2MxZiwKLTB4MzU3MDFmLAotMHg3Y2YwY2IsCi0weDdjZDA4YiwKLTB4ODgwMDAwLAotMHg3ZThlOGIsCi0weDk1YzAwNCwKLTB4ZDQwMDZlLAotMHg4MDAxYjgsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MxMDAzLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHhjYzI0MDMsCi0weGNjMjgwMywKLTB4MzVjNDFmLAotMHgzNmIwMWYsCi0weDdjNzA0YiwKLTB4MzRmMDFmLAotMHg3YzcwNGIsCi0weDM1NzAxZiwKLTB4N2M3MDRiLAotMHg3ZDg4ODEsCi0weDdkY2NjMSwKLTB4N2U1MTAxLAotMHg3ZTk1NDEsCi0weDdjOTA4MiwKLTB4N2NkNGMyLAotMHg3Yzg0OGIsCi0weDlhYzAwMywKLTB4N2M4YzhiLAotMHgyYzg4MDEsCi0weDk4ODA5ZSwKLTB4ZDQwMDZkLAotMHg5ODQwOWMsCi0weGQ0MDA2ZSwKLTB4Y2MwODRjLAotMHhjYzBjNGQsCi0weGNjMTA0OCwKLTB4ZDQ4MDFhLAotMHhkNGMwMWEsCi0weDgwMDEwMSwKLTB4ZDUwMDFhLAotMHhjYzA4MzIsCi0weGQ0MDAzMiwKLTB4OTQ4MmQ5LAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDQwMWUsCi0weGNhMTQwMCwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhkNTQwMzQsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHgyODA0MDQsCi0weGUyMDAxYSwKLTB4ZTIwMDFhLAotMHhkNDQwMWEsCi0weGNhMzgwMCwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHg5ODgyYmQsCi0weDAwMDAwMCwKLTB4ODQwMWJiLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA0MDAsCi0weGMyZmYwMCwKLTB4Y2MwODM0LAotMHhjMTNmZmYsCi0weDdjNzRjYiwKLTB4N2NjOTBiLAotMHg3ZDAxMGYsCi0weDk5MDJiMCwKLTB4N2M3MzhiLAotMHg4NDAxYmIsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDgwMCwKLTB4MjgxOTAwLAotMHg3ZDg5OGIsCi0weDk1ODAxNCwKLTB4MjgxNDA0LAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4Y2ExYzAwLAotMHhjYTI0MDAsCi0weGUyMDAxZiwKLTB4ZDRjMDFhLAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4Y2MxODAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHg3ZGE1OGIsCi0weDdkOWM0NywKLTB4OTg0Mjk3LAotMHgwMDAwMDAsCi0weDgwMDE2MSwKLTB4ZDRjMDFhLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weDI0OGMwNiwKLTB4MGNjYzA2LAotMHg5OGMwMDYsCi0weGNjMTA0ZSwKLTB4OTkwMDA0LAotMHhkNDAwNzMsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHgzNGQwMTgsCi0weDI1MTAwMSwKLTB4OTUwMDIxLAotMHhjMTdmZmYsCi0weGNhMTAwMCwKLTB4Y2ExNDAwLAotMHhjYTE4MDAsCi0weGQ0ODAxZCwKLTB4ZDRjMDFkLAotMHg3ZGIxOGIsCi0weGMxNDIwMiwKLTB4YzJjMDAxLAotMHhkNTgwMWQsCi0weDM0ZGMwZSwKLTB4N2Q1ZDRjLAotMHg3ZjczNGMsCi0weGQ3NDAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGMxNDIwMCwKLTB4YzJjMDAwLAotMHgwOTljMDEsCi0weDMxZGMxMCwKLTB4N2Y1ZjRjLAotMHg3ZjczNGMsCi0weDA0MjgwMiwKLTB4N2Q4MzgwLAotMHhkNWE4NmYsCi0weGQ1ODA2NiwKLTB4ZDc0MDFlLAotMHhlYzAwNWUsCi0weGM4MjQwMiwKLTB4YzgyNDAyLAotMHg4MDAxYjgsCi0weGQ2MDA3NiwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhkNDAwMWYsCi0weDgwMDAwMCwKLTB4ZDQwMDFmLAotMHhkNDAwMWYsCi0weDg4MDAwMCwKLTB4ZDQwMDFmLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMTAxNzEsCi0weDAyMDE3OCwKLTB4MDMwMDhmLAotMHgwNDAwN2YsCi0weDA1MDAwMywKLTB4MDYwMDNmLAotMHgwNzAwMzIsCi0weDA4MDEyYywKLTB4MDkwMDQ2LAotMHgwYTAwMzYsCi0weDEwMDFiNiwKLTB4MTcwMGEyLAotMHgyMjAxM2EsCi0weDIzMDE0OSwKLTB4MjAwMGI0LAotMHgyNDAxMjUsCi0weDI3MDA0ZCwKLTB4MjgwMDZhLAotMHgyYTAwNjAsCi0weDJiMDA1MiwKLTB4MmYwMDY1LAotMHgzMjAwODcsCi0weDM0MDE3ZiwKLTB4M2MwMTU2LAotMHgzZjAwNzIsCi0weDQxMDE4YywKLTB4NDQwMTJlLAotMHg1NTAxNzMsCi0weDU2MDE3YSwKLTB4NjAwMDBiLAotMHg2MTAwMzQsCi0weDYyMDAzOCwKLTB4NjMwMDM4LAotMHg2NDAwMzgsCi0weDY1MDAzOCwKLTB4NjYwMDM4LAotMHg2NzAwMzgsCi0weDY4MDAzYSwKLTB4NjkwMDQxLAotMHg2YTAwNDgsCi0weDZiMDA0OCwKLTB4NmMwMDQ4LAotMHg2ZDAwNDgsCi0weDZlMDA0OCwKLTB4NmYwMDQ4LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJTNzgwX2NwX21pY3JvY29kZVtdWzNdID0gewotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCi0gICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAotICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmMyB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCi0gICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAotICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKLSAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCi0gICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWY5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZmMgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAotICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKLSAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MjEgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYyMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZmYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWY2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCi0gICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweGMwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMGEyMiwgMHgzNTUgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM1ZSB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZjIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNzQgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzcwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNjcgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDViYSB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzY3IH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA0OSwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4Mzc2IH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwODAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4YyB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I3IH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjkgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhMiB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2FlIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYWUgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5NiB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDA4MDAwMDAwLCAweDAwMjkwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHhjMDIyMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOTggfSwKLSAgICB7IDB4MDAwMDIxMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYTQgfSwKLSAgICB7IDB4MDAwMDIxMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2I0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzIgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTcwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNkMyB9LAotICAgIHsgMHg4YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4NDAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHg0MDAwMDAwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2UxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAxODAwLCAweDNlNCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjYsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2U3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAxYzAwLCAweDNlYSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjcsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODIwYzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDk0OGU4LCAweDAwMCB9LAotICAgIHsgMHhhNTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHhjMDIxMDIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2Y3IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA0ODEyMjAsIDB4M2ZmIH0sCi0gICAgeyAweGE3ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ODMsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4YTk4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBjMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhYjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFkODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjg4MCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YjM4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhZjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGIxODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTQ4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDExODIwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAyMThhMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMzE4YzAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDQxOGY4ZTAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA1MThmODgwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNjE4ZTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDcxOGYwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA4MThmM2ZjLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMywgMHhjMDMwMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDM0NDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMDIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDQ3IH0sCi0gICAgeyAweDAwODAwMDAwLCAweGMwNDk0YTIwLCAweDQ0OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDUwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDUwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0NjEgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDIwMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2OSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NmUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDYyNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDhlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0OGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDhlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDhlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0OGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OTggfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDRhMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhYiB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YWMgfSwKLSAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiNCB9LAotICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjYiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjI3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjZiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2MjIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkNiB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGQ4IH0sCi0gICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NTA4IH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZjcgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGViIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YjIgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTBkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTIxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg5ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4NDAyMTRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDk2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjIyMjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAxNGE4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDEwMDAwMDAwLCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHhlZmZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTM4Y2UsIDB4NjEwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAzMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1NmMgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjAwMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTgyIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzQgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1ODIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTgyIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1ODAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDYyNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMWMxMCwgMHg1ODIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg1ODQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWMzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OTIgfSwKLSAgICB7IDB4MDAwMGEyYjcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMjYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5MCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhMCB9LAotICAgIHsgMHgwMDAwYTJiYiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjAyNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTllIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWFlIH0sCi0gICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDI2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YWMgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmMzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDI2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YjggfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDMwNGEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg1YmUgfSwKLSAgICB7IDB4YTQwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YzMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NWQ2IH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjMyB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVkYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NWNkIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDVjZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZjMgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM3NCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg1ZWQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNzQgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MjEgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjA3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2MjAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjIyIH0sCi0gICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2MjcgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2MmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTQyMDUwYSwgMHgwNWJhMDI1MCwgMHgwMDAgfSwKLSAgICB7IDB4MDFjMzAxNjgsIDB4MDQ0MTA1YmEsIDB4MDAwIH0sCi0gICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAotICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDNkNzA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCi0gICAgeyAweDA1ZTIwNWUzLCAweDAzMWYwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwMzIwMDViZiwgMHgwMzIwMDM0YSwgMHgwMDAgfSwKLSAgICB7IDB4MDMzNDAyODIsIDB4MDM0YzAzM2UsIDB4MDAwIH0sCi0gICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDU1NywgMHgwNWJhMDMyYSwgMHgwMDAgfSwKLSAgICB7IDB4MDNiYzA1YmEsIDB4MDRjMzAzNGUsIDB4MDAwIH0sCi0gICAgeyAweDA0YTIwNDU1LCAweDA0M2YwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwNGQ4MDViYSwgMHgwNDQzMDRlNSwgMHgwMDAgfSwKLSAgICB7IDB4MDQ1NTA1MGYsIDB4MDM1YjAzN2IsIDB4MDAwIH0sCi0gICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDViYTA1YmEsIDB4MDVkODA1YzEsIDB4MDAwIH0sCi0gICAgeyAweDA1YmEwNWJhLCAweDAwMDcwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCi0gICAgeyAweDAzZjgwM2VkLCAweDA0MDgwNDA2LCAweDAwMCB9LAotICAgIHsgMHgwNDBlMDQwYSwgMHgwNDBjMDQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDQxYzA0MTgsIDB4MDQyNDA0MjAsIDB4MDAwIH0sCi0gICAgeyAweDA0MmMwNDI4LCAweDA0MzQwNDMwLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDViYSwgMHgwNDNhMDQzOCwgMHgwMDAgfSwKLSAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCi0gICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDYwZSwgMHgwNjJjMDAwNiwgMHgwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlM3ODBfcGZwX21pY3JvY29kZVtdID0gewotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHg3YzAzOGIsCi0weDgwMDFkYiwKLTB4N2MwMzhiLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4YzQxODM4LAotMHhjYTI0MDAsCi0weGNhMjgwMCwKLTB4OTU4MWNiLAotMHhjNDFjM2EsCi0weGMzYzAwMCwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDdjNzQ0YiwKLTB4YzIwMDA1LAotMHg5OWMwMDAsCi0weGM0MWMzYSwKLTB4N2M3NDRjLAotMHhjMGZmZTAsCi0weDA0MmMwOCwKLTB4MzA5MDAyLAotMHg3ZDI1MDAsCi0weDM1MTQwMiwKLTB4N2QzNTBiLAotMHgyNTU0MDcsCi0weDdjZDU4MCwKLTB4MjU5YzA3LAotMHg5NWMwMDQsCi0weGQ1MDAxYiwKLTB4N2VkZGMxLAotMHg3ZDlkODAsCi0weGQ2ODAxYiwKLTB4ZDU4MDFiLAotMHhkNDQwMWUsCi0weGQ1NDAxZSwKLTB4ZDY0MDFlLAotMHhkNjgwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg5NzgzZDMsCi0weGQ1YzAxZSwKLTB4Y2EwODAwLAotMHg4MDAwMWEsCi0weGNhMGMwMCwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDgwMDFkYiwKLTB4ZDQ4MDI0LAotMHhjYTA4MDAsCi0weDdjMDBjMCwKLTB4YzgxNDI1LAotMHhjODE4MjQsCi0weDdjOTQ4OCwKLTB4N2M5ODgwLAotMHhjMjAwMDMsCi0weGQ0MDA3NSwKLTB4N2M3NDRjLAotMHg4MDAwNjQsCi0weGQ0NDAxZSwKLTB4Y2ExODAwLAotMHhkNDQwMWUsCi0weGQ1ODAxZSwKLTB4ODAwMDYyLAotMHhkNDAwNzUsCi0weGQ0NDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ4MDE5LAotMHhkNGMwMTgsCi0weGQ1MDAxNywKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZTIwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhkNDAwNzUsCi0weGQ0NDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ4MDE5LAotMHhkNGMwMTgsCi0weGQ1MDAxNywKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weDI0OGMwMSwKLTB4ZDQ4MDYwLAotMHg5NGMwMDMsCi0weDA0MTAwMSwKLTB4MDQxMDAyLAotMHhkNTAwMjUsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4ZDQ4MDYxLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHhkNDgwMTYsCi0weGQ0YzAxNiwKLTB4ZDQ4MDFlLAotMHg4MDAxZGIsCi0weGQ0YzAxZSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4MDA0LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ZDQyMDEzLAotMHhkNTYwNjUsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhkNTYwMWMsCi0weDgwMDAwMCwKLTB4MDYyMDAxLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgzZjcsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHg4MDAwOWMsCi0weGQ0MjAxMywKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTg4M2VmLAotMHhjYTE0MDAsCi0weGQ0MDA2NCwKLTB4ODAwMGIwLAotMHgwMDAwMDAsCi0weGM0MTQzMiwKLTB4YzYxODQzLAotMHhjNDA4MmYsCi0weDk1NDAwNSwKLTB4YzQwYzMwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHg5NTgzZjUsCi0weGM0MTAzMSwKLTB4ZDQ0MDMzLAotMHhkNTIwNjUsCi0weGQ0YTAxYywKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGU0MDE1ZSwKLTB4ZDQwMDFlLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4Y2ExODAwLAotMHgwYTIwMDEsCi0weGQ2MDA3NiwKLTB4YzQwODM2LAotMHg5ODgwMDcsCi0weGM2MTA0NSwKLTB4OTUwMTEwLAotMHhkNDAwMWYsCi0weGQ0NjA2MiwKLTB4ODAwMDAwLAotMHhkNDIwNjIsCi0weGNjMzgzNSwKLTB4Y2MxNDMzLAotMHg4NDAxZGUsCi0weGQ0MDA3MiwKLTB4ZDU0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTIwMDFhLAotMHg4NDAxZGUsCi0weGUyMDAxYSwKLTB4Y2MxMDRiLAotMHhjYzA0NDcsCi0weDJjOTQwMSwKLTB4N2QwOThiLAotMHg5ODQwMDUsCi0weDdkMTVjYiwKLTB4ZDQwMDFhLAotMHg4MDAxZGIsCi0weGQ0MDA2ZCwKLTB4MzQ0NDAxLAotMHhjYzBjNDgsCi0weDk4NDAzYSwKLTB4Y2MyYzRhLAotMHg5NTgwMDQsCi0weGNjMDQ0OSwKLTB4ODAwMWRiLAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4MjgyODAxLAotMHg4NDAxMTMsCi0weGNjMTAwMywKLTB4OTg4MDFiLAotMHgwNDM4MGMsCi0weDg0MDExMywKLTB4Y2MxMDAzLAotMHg5ODgwMTcsCi0weDA0MzgwOCwKLTB4ODQwMTEzLAotMHhjYzEwMDMsCi0weDk4ODAxMywKLTB4MDQzODA0LAotMHg4NDAxMTMsCi0weGNjMTAwMywKLTB4OTg4MDE0LAotMHhjYzEwNGMsCi0weDlhODAwOSwKLTB4Y2MxNDRkLAotMHg5ODQwZGMsCi0weGQ0MDA2ZCwKLTB4Y2MxODQ4LAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4ODAwMGVjLAotMHhkNTgwMWEsCi0weDk2YzBkNSwKLTB4ZDQwMDZkLAotMHg4MDAxZGIsCi0weGQ0MDA2ZSwKLTB4OWFjMDAzLAotMHhkNDAwNmQsCi0weGQ0MDA2ZSwKLTB4ODAwMDAwLAotMHhlYzAwN2YsCi0weDlhYzBjYywKLTB4ZDQwMDZkLAotMHg4MDAxZGIsCi0weGQ0MDA2ZSwKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4N2Q5MTAzLAotMHg3ZGQ1ODMsCi0weDdkMTkwYywKLTB4MzVjYzFmLAotMHgzNTcwMWYsCi0weDdjZjBjYiwKLTB4N2NkMDhiLAotMHg4ODAwMDAsCi0weDdlOGU4YiwKLTB4OTVjMDA0LAotMHhkNDAwNmUsCi0weDgwMDFkYiwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzEwMDMsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weGNjMjQwMywKLTB4Y2MyODAzLAotMHgzNWM0MWYsCi0weDM2YjAxZiwKLTB4N2M3MDRiLAotMHgzNGYwMWYsCi0weDdjNzA0YiwKLTB4MzU3MDFmLAotMHg3YzcwNGIsCi0weDdkODg4MSwKLTB4N2RjY2MxLAotMHg3ZTUxMDEsCi0weDdlOTU0MSwKLTB4N2M5MDgyLAotMHg3Y2Q0YzIsCi0weDdjODQ4YiwKLTB4OWFjMDAzLAotMHg3YzhjOGIsCi0weDJjODgwMSwKLTB4OTg4MDllLAotMHhkNDAwNmQsCi0weDk4NDA5YywKLTB4ZDQwMDZlLAotMHhjYzA4NGMsCi0weGNjMGM0ZCwKLTB4Y2MxMDQ4LAotMHhkNDgwMWEsCi0weGQ0YzAxYSwKLTB4ODAwMTI0LAotMHhkNTAwMWEsCi0weGNjMDgzMiwKLTB4ZDQwMDMyLAotMHg5NDgyYjYsCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0MDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0NDAxZSwKLTB4Y2ExNDAwLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGQ1NDAzNCwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDI4MDQwNCwKLTB4ZTIwMDFhLAotMHhlMjAwMWEsCi0weGQ0NDAxYSwKLTB4Y2EzODAwLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weDk4ODI5YSwKLTB4MDAwMDAwLAotMHg4NDAxZGUsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDQwMCwKLTB4YzJmZjAwLAotMHhjYzA4MzQsCi0weGMxM2ZmZiwKLTB4N2M3NGNiLAotMHg3Y2M5MGIsCi0weDdkMDEwZiwKLTB4OTkwMjhkLAotMHg3YzczOGIsCi0weDg0MDFkZSwKLTB4ZDdhMDZmLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4Y2EwODAwLAotMHgyODE5MDAsCi0weDdkODk4YiwKLTB4OTU4MDE0LAotMHgyODE0MDQsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhjYTFjMDAsCi0weGNhMjQwMCwKLTB4ZTIwMDFmLAotMHhkNGMwMWEsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHhjYzE4MDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weDdkYTU4YiwKLTB4N2Q5YzQ3LAotMHg5ODQyNzQsCi0weDAwMDAwMCwKLTB4ODAwMTg0LAotMHhkNGMwMWEsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4MjQ4YzA2LAotMHgwY2NjMDYsCi0weDk4YzAwNiwKLTB4Y2MxMDRlLAotMHg5OTAwMDQsCi0weGQ0MDA3MywKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDM0ZDAxOCwKLTB4MjUxMDAxLAotMHg5NTAwMjEsCi0weGMxN2ZmZiwKLTB4Y2ExMDAwLAotMHhjYTE0MDAsCi0weGNhMTgwMCwKLTB4ZDQ4MDFkLAotMHhkNGMwMWQsCi0weDdkYjE4YiwKLTB4YzE0MjAyLAotMHhjMmMwMDEsCi0weGQ1ODAxZCwKLTB4MzRkYzBlLAotMHg3ZDVkNGMsCi0weDdmNzM0YywKLTB4ZDc0MDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4YzE0MjAwLAotMHhjMmMwMDAsCi0weDA5OWMwMSwKLTB4MzFkYzEwLAotMHg3ZjVmNGMsCi0weDdmNzM0YywKLTB4MDQyODAyLAotMHg3ZDgzODAsCi0weGQ1YTg2ZiwKLTB4ZDU4MDY2LAotMHhkNzQwMWUsCi0weGVjMDA1ZSwKLTB4YzgyNDAyLAotMHhjODI0MDIsCi0weDgwMDFkYiwKLTB4ZDYwMDc2LAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGQ0MDAxZiwKLTB4ODAwMDAwLAotMHhkNDAwMWYsCi0weGQ0MDAxZiwKLTB4ODgwMDAwLAotMHhkNDAwMWYsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDEwMTk0LAotMHgwMjAxOWIsCi0weDAzMDBiMiwKLTB4MDQwMGEyLAotMHgwNTAwMDMsCi0weDA2MDAzZiwKLTB4MDcwMDMyLAotMHgwODAxNGYsCi0weDA5MDA0NiwKLTB4MGEwMDM2LAotMHgxMDAxZDksCi0weDE3MDBjNSwKLTB4MjIwMTVkLAotMHgyMzAxNmMsCi0weDIwMDBkNywKLTB4MjQwMTQ4LAotMHgyNjAwNGQsCi0weDI3MDA1YywKLTB4MjgwMDhkLAotMHgyOTAwNTEsCi0weDJhMDA3ZSwKLTB4MmIwMDYxLAotMHgyZjAwODgsCi0weDMyMDBhYSwKLTB4MzQwMWEyLAotMHgzNjAwNmYsCi0weDNjMDE3OSwKLTB4M2YwMDk1LAotMHg0MTAxYWYsCi0weDQ0MDE1MSwKLTB4NTUwMTk2LAotMHg1NjAxOWQsCi0weDYwMDAwYiwKLTB4NjEwMDM0LAotMHg2MjAwMzgsCi0weDYzMDAzOCwKLTB4NjQwMDM4LAotMHg2NTAwMzgsCi0weDY2MDAzOCwKLTB4NjcwMDM4LAotMHg2ODAwM2EsCi0weDY5MDA0MSwKLTB4NmEwMDQ4LAotMHg2YjAwNDgsCi0weDZjMDA0OCwKLTB4NmQwMDQ4LAotMHg2ZTAwNDgsCi0weDZmMDA0OCwKLTB4NzMwMWQ5LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjc3MF9jcF9taWNyb2NvZGVbXSA9IHsKLTB4Y2MwMDAzZWEsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDgwMDAwMDAxLAotMHhkMDQwMDA3ZiwKLTB4ODAwMDAwMDEsCi0weGNjNDAwMDQxLAotMHg3YzQwYzAwMCwKLTB4YzAxNjAwMDQsCi0weDMwZDAzZmZmLAotMHg3ZDE1MDAwYywKLTB4Y2MxMTAwMDAsCi0weDI4ZDgwMDFlLAotMHgzMTk4MDAwMSwKLTB4MjhkYzAwMWYsCi0weGM4MjAwMDA0LAotMHg5NWMwMDAwNiwKLTB4N2M0MjQwMDAsCi0weGNjMDAwMDYyLAotMHg3ZTU2ODAwYywKLTB4Y2MyOTAwMDAsCi0weGM4MjQwMDA0LAotMHg3ZTI2MDAwYiwKLTB4OTU4MDAwMDYsCi0weDdjNDJjMDAwLAotMHhjYzAwMDA2MiwKLTB4N2VkNzAwMGMsCi0weGNjMzEwMDAwLAotMHhjODJjMDAwNCwKLTB4N2UyZTAwMGMsCi0weGNjMDAwMDYyLAotMHgzMTEwM2ZmZiwKLTB4ODAwMDAwMDEsCi0weGNlMTEwMDAwLAotMHg3YzQwYzAwMCwKLTB4ODAwMDAwMDEsCi0weGNjNDAwMDQwLAotMHg4MDAwMDAwMSwKLTB4Y2M0MTIyNTcsCi0weDdjNDE4MDAwLAotMHhjYzQwMDA0NSwKLTB4Y2M0MDAwNDgsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4Y2M0MDAwNDUsCi0weGNjNDAwMDQ4LAotMHg3YzQwYzAwMCwKLTB4Y2M0MTIyNWMsCi0weGNjNDFhMWZjLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhjYzAwMDA0NSwKLTB4Y2MwMDAwNDgsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4MDQwY2ExZmQsCi0weGMwMTIwMDAxLAotMHhjYzAwMDA0NSwKLTB4Y2MwMDAwNDgsCi0weDdjZDBjMDBjLAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weGQwNGQwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg4MDAwMDAwMSwKLTB4Y2M0MTIyNWQsCi0weDdjNDA4MDAwLAotMHg3YzQwYzAwMCwKLTB4YzAyYTAwMDIsCi0weDdjNDEwMDAwLAotMHg3ZDI5MDAwYywKLTB4MzA5NDAwMDEsCi0weDMwOTgwMDA2LAotMHgzMDljMDMwMCwKLTB4MjlkYzAwMDgsCi0weDdjNDIwMDAwLAotMHg3YzQyNDAwMCwKLTB4OTU0MDAwMGYsCi0weGMwMmUwMDA0LAotMHgwNWYwMjI1OCwKLTB4N2YyZjAwMGMsCi0weGNjMzEwMDAwLAotMHhjODI4MDAwNCwKLTB4Y2NjMTIxNjksCi0weGNkMDEyMTZhLAotMHhjZTgxMjE2YiwKLTB4MGRiNDAwMDIsCi0weGNjMDEyMTZjLAotMHg5NzQwMDAwZSwKLTB4MGRiNDAwMDAsCi0weDgwMDAwMDdiLAotMHhjODM0MDAwYSwKLTB4MGRiNDAwMDIsCi0weDk3NDAwMDA5LAotMHgwZGI0MDAwMCwKLTB4YzAyZTAwMDQsCi0weDA1ZjAyMjU4LAotMHg3ZjJmMDAwYywKLTB4Y2MzMTAwMDAsCi0weGM4MjgwMDA0LAotMHg4MDAwMDA3YiwKLTB4YzgzNDAwMGEsCi0weDk3NDAwMDA0LAotMHg3ZTAyODAwMCwKLTB4ODAwMDAwN2IsCi0weGM4MzQwMDBhLAotMHgwZGI0MDAwNCwKLTB4OTc0MGZmOGMsCi0weDAwMDAwMDAwLAotMHhjZTAxMjE2ZCwKLTB4Y2U0MTIxNmUsCi0weGM4MjgwMDAzLAotMHhjODM0MDAwYSwKLTB4OWI0MDAwMDQsCi0weDA0M2MwMDA1LAotMHg4NDAwMDI2ZCwKLTB4Y2MwMDAwNjIsCi0weDBkZjQwMDAwLAotMHg5NzQwMDAwYiwKLTB4YzgyYzAzZTYsCi0weGNlODFhMmI3LAotMHhjMDMwMDAwNiwKLTB4N2VmMzQwMjgsCi0weGMwMzAwMDIwLAotMHg3ZjZiODAyMCwKLTB4N2ZiM2MwMjksCi0weGNmODFhMmM0LAotMHg4MDAwMDAwMSwKLTB4Y2ZjMWEyZDEsCi0weDBkZjQwMDAxLAotMHg5NzQwMDAwYiwKLTB4YzgyYzAzZTcsCi0weGNlODFhMmJiLAotMHhjMDMwMDAwNiwKLTB4N2VmMzQwMjgsCi0weGMwMzAwMDIwLAotMHg3ZjZiODAyMCwKLTB4N2ZiM2MwMjksCi0weGNmODFhMmM1LAotMHg4MDAwMDAwMSwKLTB4Y2ZjMWEyZDIsCi0weDBkZjQwMDAyLAotMHg5NzQwMDAwYiwKLTB4YzgyYzAzZTgsCi0weGNlODFhMmJmLAotMHhjMDMwMDAwNiwKLTB4N2VmMzQwMjgsCi0weGMwMzAwMDIwLAotMHg3ZjZiODAyMCwKLTB4N2ZiM2MwMjksCi0weGNmODFhMmM2LAotMHg4MDAwMDAwMSwKLTB4Y2ZjMWEyZDMsCi0weGM4MmMwM2U5LAotMHhjZTgxYTJjMywKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNywKLTB4ODAwMDAwMDEsCi0weGNmYzFhMmQ0LAotMHg4MDAwMDAwMSwKLTB4Y2M0MDAwNDIsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4MjkxNDAwMWQsCi0weDMxNTQwMDAxLAotMHg5OTQwMDAwZCwKLTB4MzExODEwMDAsCi0weGM4MWMwMDExLAotMHgwOWRjMDAwMSwKLTB4OTVjMGZmZmYsCi0weGM4MWMwMDExLAotMHhjY2MxMjEwMCwKLTB4Y2QwMTIxMDEsCi0weGNjYzEyMTAyLAotMHhjZDAxMjEwMywKLTB4MDQxODAwMDQsCi0weDgwMDAwMzlmLAotMHhjZDgxYTJhNCwKLTB4YzAyYTAwMDQsCi0weDk1ODAwMDA4LAotMHgzNmE4MjFhMywKLTB4Y2MyOTAwMDAsCi0weGM4MjgwMDA0LAotMHhjODFjMDAxMSwKLTB4MGRlNDAwNDAsCi0weDk2NDBmZmZmLAotMHhjODFjMDAxMSwKLTB4Y2NjMTIxNzAsCi0weGNkMDEyMTcxLAotMHhjODIwMDAxMiwKLTB4OTYwMDAwMDAsCi0weGM4MjAwMDEyLAotMHg4MDAwMDM5ZiwKLTB4Y2MwMDAwNjQsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHg0MGQ0MDAwMywKLTB4Y2Q0MTIyNWMsCi0weGNkMDFhMWZjLAotMHhjMDFhMDAwMSwKLTB4MDQxY2ExZmQsCi0weDdkZDljMDBjLAotMHg3YzQyMDAwMCwKLTB4MDhjYzAwMDEsCi0weDA2MjQwMDAxLAotMHgwNjI4MDAwMiwKLTB4Y2UxZDAwMDAsCi0weGNlNWQwMDAwLAotMHg5OGMwZmZmYSwKLTB4Y2U5ZDAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDdjNDBjMDAwLAotMHgzMGQwMDAwMSwKLTB4MjhjYzAwMDEsCi0weDdjNDE0MDAwLAotMHg5NTAwMDAwNiwKLTB4N2M0MTgwMDAsCi0weGNkNDEyMTZkLAotMHhjZDgxMjE2ZSwKLTB4ODAwMDAwZjMsCi0weGM4MWMwMDAzLAotMHhjMDIyMDAwNCwKLTB4N2UxNjAwMGMsCi0weGNjMjEwMDAwLAotMHhjODFjMDAwNCwKLTB4N2M0MjQwMDAsCi0weDk4YzAwMDA0LAotMHg3YzQyODAwMCwKLTB4ODAwMDAwMDEsCi0weGNkZTUwMDAwLAotMHhjZTQxMjE2OSwKLTB4Y2U4MTIxNmEsCi0weGNkYzEyMTZiLAotMHg4MDAwMDAwMSwKLTB4Y2MwMTIxNmMsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHg3YzQxYzAwMCwKLTB4MjhhNDAwMDgsCi0weDMyNjQwMGZmLAotMHgwZTY4MDAzYywKLTB4OTY4MDAwMGEsCi0weDdjMDIwMDAwLAotMHg3YzQyMDAwMCwKLTB4MWUzMDAwMDMsCi0weGNjMDAwMDZhLAotMHg5YjAwMDAwMywKLTB4NDIyMDAwMDUsCi0weDA0MjAwMDQwLAotMHg4MDAwMDExMCwKLTB4N2MwMjQwMDAsCi0weDdlMDI0MDAwLAotMHg5YTQwMDAwMCwKLTB4MGE2NDAwMDEsCi0weDMwZWMwMDEwLAotMHg5YWMwMDAwYSwKLTB4Y2MwMDAwNjIsCi0weGMwMmEwMDA0LAotMHhjODJjMDAyMSwKLTB4N2U5MjgwMGMsCi0weGNjMDAwMDQxLAotMHhjYzI5MDAwMCwKLTB4Y2VjMDAwMjEsCi0weDgwMDAwMTIwLAotMHhjODMwMDAwNCwKLTB4Y2QwMTIxNmQsCi0weGNkNDEyMTZlLAotMHhjODMwMDAwMywKLTB4N2YxZjAwMGIsCi0weDMwZjQwMDA3LAotMHgyNzc4MDAwMSwKLTB4OTc0MDAwMmEsCi0weDA3YjgwMTI1LAotMHg5ZjgwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDgwMDAwMTM1LAotMHg3ZjFiODAwNCwKLTB4ODAwMDAxMzksCi0weDdmMWI4MDA1LAotMHg4MDAwMDEzZCwKLTB4N2YxYjgwMDIsCi0weDgwMDAwMTQxLAotMHg3ZjFiODAwMywKLTB4ODAwMDAxNDUsCi0weDdmMWI4MDA3LAotMHg4MDAwMDE0OSwKLTB4N2YxYjgwMDYsCi0weDgwMDAwMTRlLAotMHgyOGE0MDAwOCwKLTB4OWI4MDAwMTksCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZSwKLTB4MzI2NDAwZmYsCi0weDliODAwMDE1LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWUsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAxMSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVlLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMGQsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZSwKLTB4MzI2NDAwZmYsCi0weDliODAwMDA5LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWUsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAwNSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVlLAotMHgzMjY0MDBmZiwKLTB4MjhhNDAwMDgsCi0weDMyNjQwMGZmLAotMHgwZTY4MDAzYywKLTB4OWE4MGZlYjEsCi0weDI4ZWMwMDA4LAotMHg3YzQzNDAwMCwKLTB4N2M0MzgwMDAsCi0weDdjNDNjMDAwLAotMHg5NmMwMDAwNywKLTB4Y2MwMDAwNjIsCi0weGNmNDEyMTY5LAotMHhjZjgxMjE2YSwKLTB4Y2ZjMTIxNmIsCi0weDgwMDAwMDAxLAotMHhjYzAxMjE2YywKLTB4ODAwMDAwMDEsCi0weGNmZjUwMDAwLAotMHhjYzAwMDA2YiwKLTB4ODQwMDAzYTIsCi0weDBlNjgwMDNjLAotMHg5YTgwMDAwNCwKLTB4YzgyODAwMTUsCi0weDgwMDAwMDAxLAotMHhkMDQwMDA3ZiwKLTB4OTY4MGZmYWIsCi0weDdlMDI0MDAwLAotMHg4NDAwMDIzYiwKLTB4YzAwZTAwMDIsCi0weGNjMDAwMDQxLAotMHg4MDAwMDIzOSwKLTB4Y2NjMTMwNGEsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4YzAxZTAwMDEsCi0weDI5MjQwMDEyLAotMHhjMDIyMDAwMiwKLTB4OTY0MDAwMDUsCi0weGMwMjYwMDA0LAotMHhjMDI3ZmZmYiwKLTB4N2QyNTAwMGIsCi0weGMwMjYwMDAwLAotMHg3ZGQyODAwYiwKLTB4N2UxMmMwMGIsCi0weDdkMjUwMDBjLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzEyMTY5LAotMHg5YTgwMDAwYSwKLTB4Y2QwMTIxNmEsCi0weGNkNDEyMTZiLAotMHg5NmMwZmU4MiwKLTB4Y2Q4MTIxNmMsCi0weGM4MzAwMDE4LAotMHg5NzAwMDAwMCwKLTB4YzgzMDAwMTgsCi0weDgwMDAwMDAxLAotMHhjYzAwMDAxOCwKLTB4ODQwMDAzYTIsCi0weGNjMDAwMDdmLAotMHhjODE0MDAxMywKLTB4YzgxODAwMTQsCi0weGNkNDEyMTZiLAotMHg5NmMwZmU3NiwKLTB4Y2Q4MTIxNmMsCi0weDgwMDAwMTgyLAotMHhjODMwMDAxOCwKLTB4YzgwYzAwMDgsCi0weDk4YzAwMDAwLAotMHhjODBjMDAwOCwKLTB4N2M0MTAwMDAsCi0weDk1MDAwMDAyLAotMHgwMDAwMDAwMCwKLTB4N2M0MTQwMDAsCi0weGM4MjAwMDA5LAotMHhjYzQwMDA0MywKLTB4Y2UwMWExZjQsCi0weGNjNDAwMDQ0LAotMHhjMDBlODAwMCwKLTB4N2M0MjQwMDAsCi0weDdjNDI4MDAwLAotMHgyYWFjMDAxZiwKLTB4OTZjMGZlNjMsCi0weGMwMzVmMDAwLAotMHhjZTQwMDNlMiwKLTB4MzI3ODAwMDMsCi0weDI2N2MwMDA4LAotMHg3ZmY3YzAwYiwKLTB4N2ZmYmMwMGMsCi0weDJhNzgwMDE4LAotMHhjZmMwMDNlMywKLTB4Y2Y4MDAzZTQsCi0weDI2YjAwMDAyLAotMHg3ZjNmMDAwMCwKLTB4Y2YwMDAzZTUsCi0weDgwMDAwMzFmLAotMHg3YzgwYzAwMCwKLTB4N2M0MGMwMDAsCi0weDI4ZDAwMDA4LAotMHgzMTEwMDAwZiwKLTB4OTUwMDAwMGYsCi0weDI1MjgwMDAxLAotMHgwNmE4MDFiMywKLTB4OWU4MDAwMDAsCi0weDAwMDAwMDAwLAotMHg4MDAwMDFkNCwKLTB4YzAxMjA4MDAsCi0weDgwMDAwMWUyLAotMHhjODE0MDAwZiwKLTB4ODAwMDAxZTksCi0weGM4MTQwMDEwLAotMHg4MDAwMDFmMCwKLTB4Y2NjMWEyYTQsCi0weDgwMDAwMWY5LAotMHhjODE0MDAxMSwKLTB4MzBkMDAwM2YsCi0weDBkMjgwMDE1LAotMHg5YTgwMDAxMiwKLTB4MGQyODAwMWUsCi0weDlhODAwMDFlLAotMHgwZDI4MDAyMCwKLTB4OWE4MDAwMjMsCi0weDBkMjQwMDBmLAotMHgwZDI4MDAxMCwKLTB4N2U2YTgwMGMsCi0weDlhODAwMDI2LAotMHgwZDIwMDAwNCwKLTB4MGQyNDAwMTQsCi0weDBkMjgwMDI4LAotMHg3ZTYyNDAwYywKLTB4N2VhNjgwMGMsCi0weDlhODAwMDJhLAotMHhjODE0MDAxMSwKLTB4ODAwMDAwMDEsCi0weGNjYzFhMmE0LAotMHhjMDEyMDgwMCwKLTB4N2M0MTQwMDAsCi0weDdkMGNjMDBjLAotMHhjMDEyMDAwOCwKLTB4Mjk1ODAwMDMsCi0weDI5NWMwMDBjLAotMHg3YzQyMDAwMCwKLTB4N2RkMWMwMGIsCi0weDI2MjAwMDE0LAotMHg3ZTFlNDAwYywKLTB4N2U0ZTgwMGMsCi0weGNlODFhMmE0LAotMHg4MDAwMDAwMSwKLTB4Y2Q4MWExZmUsCi0weGM4MTQwMDBmLAotMHgwNDEwMjEwZSwKLTB4OTU0MDAwMDAsCi0weGM4MTQwMDBmLAotMHhkMDUxMDAwMCwKLTB4ODAwMDAwMDEsCi0weGNjYzFhMmE0LAotMHhjODE0MDAxMCwKLTB4MDQxMDIxMDgsCi0weDk1NDAwMDAwLAotMHhjODE0MDAxMCwKLTB4ZDA1MTAwMDAsCi0weDgwMDAwMDAxLAotMHhjY2MxYTJhNCwKLTB4Y2NjMWEyYTQsCi0weDA0MTAwMDAxLAotMHhjZDAwMDAxOSwKLTB4ODQwMDAzYTIsCi0weGNjMDAwMDdmLAotMHhjODEwMDAxOSwKLTB4OTkwMDAwMDAsCi0weGM4MTAwMDE5LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weDA0MTAyMTAwLAotMHgwOTU0MDAwMSwKLTB4OTU0MGZmZmYsCi0weGM4MTQwMDExLAotMHhkMDUxMDAwMCwKLTB4ODAwMDAzOWYsCi0weGNjYzFhMmE0LAotMHg3YzQwYzAwMCwKLTB4Y2M0MDAwMGQsCi0weDk0YzBmZGZmLAotMHhjYzQwMDAwZSwKLTB4N2M0MTAwMDAsCi0weDk1MDAwMDA1LAotMHgwOGNjMDAwMSwKLTB4YzgxNDAwMDUsCi0weDk5NDAwMDE0LAotMHgwMDAwMDAwMCwKLTB4OThjMGZmZmIsCi0weDdjNDEwMDAwLAotMHg4MDAwMDAwMiwKLTB4N2QwMDgwMDAsCi0weGM4MTQwMDA1LAotMHg3YzQwYzAwMCwKLTB4OTk0MDAwMGMsCi0weGM4MTgwMDBjLAotMHg3YzQxMDAwMCwKLTB4OTU4MGZkZWUsCi0weGM4MjAwMDBlLAotMHhjODFjMDAwZCwKLTB4NjYyMDAwMjAsCi0weDdlMWUwMDJjLAotMHgyNTI0MDAwMiwKLTB4N2U2MjQwMjAsCi0weDgwMDAwMDAxLAotMHhjY2U2MDAwMCwKLTB4N2M0MTAwMDAsCi0weGNjMDAwMDZjLAotMHhjYzAwMDA2ZCwKLTB4YzgxODAwMWYsCi0weGM4MWMwMDFlLAotMHg2NTk4MDAyMCwKLTB4N2RkOWMwMmMsCi0weDdjZDRjMDBjLAotMHhjY2RlMDAwMCwKLTB4NDVkYzAwMDQsCi0weGM4MjgwMDE3LAotMHg5NjgwMDAwZiwKLTB4YzAwZTAwMDEsCi0weDI4NjgwMDA4LAotMHgyYWFjMDAxNiwKLTB4MzJhODAwZmYsCi0weDBlYjAwMDQ5LAotMHg3ZjJmMDAwYiwKLTB4OTcwMDAwMDYsCi0weDAwMDAwMDAwLAotMHhjODE0MDAwNSwKLTB4N2M0MGMwMDAsCi0weDgwMDAwMjIzLAotMHg3YzQxMDAwMCwKLTB4ODAwMDAyMjYsCi0weGQwNDAwMDdmLAotMHg4NDAwMDIzYiwKLTB4Y2MwMDAwNDEsCi0weGNjYzEzMDRhLAotMHg5NDAwMDAwMCwKLTB4YzgzYzAwMWEsCi0weDA0M2MwMDA1LAotMHhjZmMxYTJhNCwKLTB4YzAzNjFmOTAsCi0weGMwMzg3ZmZmLAotMHg3YzAzYzAxMCwKLTB4N2Y3YjQwMGMsCi0weGNmNDEyMTdjLAotMHhjZmMxMjE3ZCwKLTB4Y2MwMTIxN2UsCi0weGMwM2EwMDA0LAotMHgwNDM0MjE3ZiwKLTB4N2Y3YjQwMGMsCi0weGNjMzUwMDAwLAotMHhjODNjMDAwNCwKLTB4MmJmYzAwMWYsCi0weDA0MzgwMDIwLAotMHg5N2MwMDAwNSwKLTB4Y2MwMDAwNjIsCi0weDliODAwMDAwLAotMHgwYmI4MDAwMSwKLTB4ODAwMDAyNDcsCi0weGNjMDAwMDcxLAotMHhjYzAxYTFmNCwKLTB4MDQzODAwMTYsCi0weGMwMzYwMDAyLAotMHhjZjgxYTJhNCwKLTB4ODgwMDAwMDAsCi0weGNmNDEyMDEwLAotMHg3YzQwYzAwMCwKLTB4MjhkMDAwMWMsCi0weDk1MDAwMDA1LAotMHgwNGQ0MDAwMSwKLTB4Y2Q0MDAwNjUsCi0weDgwMDAwMDAxLAotMHhjZDQwMDA2OCwKLTB4MDk1NDAwMDIsCi0weDgwMDAwMDAxLAotMHhjZDQwMDA2NiwKLTB4ODQwMDAyNmMsCi0weGM4MTgwM2VhLAotMHg3YzQwYzAwMCwKLTB4OTk4MGZkOWQsCi0weGM4MTQwMDE2LAotMHgwOGQwMDAwMSwKLTB4OTk0MDAwMmIsCi0weGNkMDAwMDY4LAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHgwNDNjMDAwNSwKLTB4Y2ZjMWEyYTQsCi0weGNjMDFhMWY0LAotMHg4NDAwMDNhMiwKLTB4Y2MwMDAwNDYsCi0weDg4MDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4ODQwMDAyN2UsCi0weGM4MTgwM2VhLAotMHg3YzQwYzAwMCwKLTB4OTk4MGZkOGIsCi0weGM4MTQwMDE2LAotMHgwOGQwMDAwMSwKLTB4OTk0MDAwMTksCi0weGNkMDAwMDY4LAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHgwNDNjMDAyMiwKLTB4Y2ZjMWEyYTQsCi0weDg0MDAwM2EyLAotMHhjYzAwMDA0NywKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHhjODEwMDAxNiwKLTB4OTkwMDAwMGQsCi0weGNjNDAwMDY3LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weGM4MTgwM2VhLAotMHg5OTgwZmQ3NywKLTB4N2M0MGMwMDAsCi0weDk0YzAwMDAzLAotMHhjODEwMDAxNiwKLTB4OTkwMDAwMDQsCi0weGNjYzAwMDY4LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weDg0MDAwMjNiLAotMHhjMDE0ODAwMCwKLTB4Y2MwMDAwNDEsCi0weGNkNDEzMDRhLAotMHhjMDE0ODAwMCwKLTB4OTkwMDAwMDAsCi0weGM4MTAwMDE2LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weGMwMTIwMDAxLAotMHg3YzUxNDAwYywKLTB4ODAwMDAwMDEsCi0weGQwNTUwMDAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4MjkxYzAwMWYsCi0weGNjYzAwMDRhLAotMHhjZDAwMDA0YiwKLTB4OTVjMDAwMDMsCi0weGMwMWM4MDAwLAotMHhjZGMxMjAxMCwKLTB4ZGQ4MzAwMDAsCi0weDA1NWMyMDAwLAotMHhjYzAwMDA2MiwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNGMsCi0weGNkMDAwMDRkLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2EwMDAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDRlLAotMHhjZDAwMDA0ZiwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNjMDAwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1MCwKLTB4Y2QwMDAwNTEsCi0weGRkODMwMDAwLAotMHgwNTVjZjhlMCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTIsCi0weGNkMDAwMDUzLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2Y4ODAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDU0LAotMHhjZDAwMDA1NSwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNlMDAwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1NiwKLTB4Y2QwMDAwNTcsCi0weGRkODMwMDAwLAotMHgwNTVjZjAwMCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTgsCi0weGNkMDAwMDU5LAotMHhkZDgzMDAwMCwKLTB4MDU1Y2YzZmMsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4ZDA0MzIwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNhMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzYzAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2Y4ZTAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmODgwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZTAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2YwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmM2ZjLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhjODE0MDNlMCwKLTB4Y2M0MzAwMDAsCi0weGNjNDMwMDAwLAotMHhjYzQzMDAwMCwKLTB4N2Q0NWMwMDAsCi0weGNkYzMwMDAwLAotMHhkMDQzMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4N2M0MGMwMDAsCi0weGM4MTAwM2UyLAotMHhjODE0MDNlNSwKLTB4YzgxODAzZTMsCi0weGM4MWMwM2U0LAotMHhjZDgxMjE2OSwKLTB4Y2RjMTIxNmEsCi0weGNjYzEyMTZiLAotMHhjYzAxMjE2YywKLTB4MDQyMDAwMDQsCi0weDdkYTE4MDAwLAotMHg3ZDk2NDAwMiwKLTB4OTY0MGZjZDcsCi0weGNkODAwM2UzLAotMHgzMTI4MDAwMywKLTB4YzAyZGYwMDAsCi0weDI1MTgwMDA4LAotMHg3ZGFkODAwYiwKLTB4N2RhOTgwMGMsCi0weDgwMDAwMDAxLAotMHhjZDgwMDNlMywKLTB4MzA4Y2ZmZmYsCi0weGQwNGQwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDI5MjQwMDE4LAotMHgzMjY0MDAwMSwKLTB4OWE0MDAwMTMsCi0weGM4MTQwMDIwLAotMHgxNTU4MDAwMiwKLTB4OTU4MGZmZmYsCi0weGM4MTQwMDIwLAotMHhjYzAwMDA2ZSwKLTB4Y2NjMTIxODAsCi0weGNkMDEyMThkLAotMHhjYzQxMjE4MSwKLTB4MjkxNDAwMWYsCi0weDM0NTg4MDAwLAotMHhjZDgxMjE4YywKLTB4OTU0MGZjYjksCi0weGNjNDEyMTgyLAotMHhjODE0MDAyMCwKLTB4OTk0MGZmZmYsCi0weGM4MTQwMDIwLAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4N2M0MWMwMDAsCi0weDY1YjQwMDIwLAotMHg3ZjU3NDAyYywKLTB4ZDQzNzgxMDAsCi0weDQ3NzQwMDA0LAotMHhkNDM3ODEwMCwKLTB4NDc3NDAwMDQsCi0weGQ0Mzc4MTAwLAotMHg0Nzc0MDAwNCwKLTB4MDlkYzAwMDQsCi0weGQ0Mzc4MTAwLAotMHg5OWMwZmZmOCwKLTB4NDc3NDAwMDQsCi0weDI5MjQwMDFmLAotMHhjMDM4MDAxOSwKLTB4OTY0MGZjYTEsCi0weGMwM2UwMDA0LAotMHhjZjgxMjFmOCwKLTB4MzdlMDIxZjksCi0weGNjMjEwMDAwLAotMHhjODIwMDAwNCwKLTB4MmEyMDAwMTgsCi0weDMyMjAwMDAxLAotMHg5YTAwZmZmYiwKLTB4Y2Y4MTIxZjgsCi0weDgwMDAwMDAyLAotMHg3YzQwODAwMCwKLTB4N2M0MGMwMDAsCi0weDI4ZDAwMDE4LAotMHgzMTEwMDAwMSwKLTB4YzAxNjAwODAsCi0weDk1MDAwMDAzLAotMHhjMDJhMDAwNCwKLTB4N2NkNGMwMGMsCi0weGNjYzEyMTdjLAotMHhjYzQxMjE3ZCwKLTB4Y2M0MTIxN2UsCi0weDdjNDE4MDAwLAotMHgxZGIwMDAwMywKLTB4MzZhMDIxN2YsCi0weDliMDAwMDAzLAotMHg0MTljMDAwNSwKLTB4MDQxYzAwNDAsCi0weDk5YzAwMDAwLAotMHgwOWRjMDAwMSwKLTB4Y2MyMTAwMDAsCi0weGM4MjQwMDA0LAotMHgyYTZjMDAxZiwKLTB4NDE5YzAwMDUsCi0weDlhYzBmZmZhLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHg3YzQwYzAwMCwKLTB4MDRkNDAzZTYsCi0weDgwMDAwMDAxLAotMHhjYzU0MDAwMCwKLTB4ODAwMDAzOWYsCi0weGNjNDAwM2VhLAotMHhjMDFjODAwMCwKLTB4MDQ0Y2EwMDAsCi0weGNkYzEyMDEwLAotMHg3YzQxMDAwMCwKLTB4YzgxNDAwMDksCi0weDA0MTgwMDAwLAotMHgwNDFjMDAwOCwKLTB4Y2Q4MDAwNzEsCi0weDA5ZGMwMDAxLAotMHgwNTk4MDAwMSwKLTB4Y2QwZDAwMDAsCi0weDk5YzBmZmZjLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAzOWYsCi0weGNkNDAwMDcxLAotMHhjMDBlMDEwMCwKLTB4Y2MwMDAwNDEsCi0weGNjYzEzMDRhLAotMHhjODNjMDA3ZiwKLTB4Y2MwMDAwN2YsCi0weDgwMDAwMDAxLAotMHhjYzAwMDA3ZiwKLTB4Y2MwMDAwN2YsCi0weDg4MDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAxMDMzMywKLTB4MDAxMDAwMDQsCi0weDAwMTcwMDA2LAotMHgwMDIxMDAwOCwKLTB4MDAyNzAwMjgsCi0weDAwMjgwMDIzLAotMHgwMDI5MDAyOSwKLTB4MDAyYTAwMjYsCi0weDAwMmIwMDI5LAotMHgwMDJkMDAzOCwKLTB4MDAyZTAwM2YsCi0weDAwMmYwMDRhLAotMHgwMDM0MDA0YywKLTB4MDAzNjAwMzAsCi0weDAwMzkwMGFmLAotMHgwMDNhMDBkMCwKLTB4MDAzYjAwZTUsCi0weDAwM2MwMGZkLAotMHgwMDNkMDE2YywKLTB4MDAzZjAwYWQsCi0weDAwNDEwMzM4LAotMHgwMDQzMDM2YywKLTB4MDA0NDAxOGYsCi0weDAwNDUwMGZkLAotMHgwMDQ2MDFhZCwKLTB4MDA0NzAxYWQsCi0weDAwNDgwMjAwLAotMHgwMDQ5MDIwZSwKLTB4MDA0YTAyNTcsCi0weDAwNGIwMjg0LAotMHgwMDUyMDI2MSwKLTB4MDA1MzAyNzMsCi0weDAwNTQwMjg5LAotMHgwMDU3MDI5YiwKLTB4MDA2MDAyOWYsCi0weDAwNjEwMmFlLAotMHgwMDYyMDJiOCwKLTB4MDA2MzAyYzIsCi0weDAwNjQwMmNjLAotMHgwMDY1MDJkNiwKLTB4MDA2NjAyZTAsCi0weDAwNjcwMmVhLAotMHgwMDY4MDJmNCwKLTB4MDA2OTAyZjgsCi0weDAwNmEwMmZjLAotMHgwMDZiMDMwMCwKLTB4MDA2YzAzMDQsCi0weDAwNmQwMzA4LAotMHgwMDZlMDMwYywKLTB4MDA2ZjAzMTAsCi0weDAwNzAwMzE0LAotMHgwMDcyMDM4NiwKLTB4MDA3NDAzOGMsCi0weDAwNzkwMzhhLAotMHgwMDdjMDMxZSwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNzcwX3BmcF9taWNyb2NvZGVbXSA9IHsKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ODAwMDAwMDAsCi0weGRjMDMwMDAwLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGM4MTgwMDBlLAotMHgzMTk4MDAwMSwKLTB4N2M0MjQwMDAsCi0weDk1ODAwMjUyLAotMHg3YzQyODAwMCwKLTB4YzgxYzAwMWMsCi0weGMwMzdjMDAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjYjQ4MDBiLAotMHhjMDM2MDAwMywKLTB4OTljMDAwMDAsCi0weGM4MWMwMDFjLAotMHg3Y2I0ODAwYywKLTB4MjRkNDAwMDIsCi0weDdkNjU0MDAwLAotMHhjZDQwMDA0MywKLTB4Y2U4MDAwNDMsCi0weGNkMDAwMDQzLAotMHhjYzgwMDA0MCwKLTB4Y2U0MDAwNDAsCi0weGNlODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ZGMzYTAwMDAsCi0weDk3ODBmZmRlLAotMHhjZDAwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDgwMDAwMDE4LAotMHg3YzQxMDAwMCwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4YzgxODAwMGUsCi0weDgwMDAwMDBjLAotMHgzMTk4MDAwMiwKLTB4ZDQwMDAzYzAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4YzgxODAwMGUsCi0weDI4OGMwMDA4LAotMHgzMGNjMDAwZiwKLTB4MzQxMDAwMDEsCi0weDdkMGQwMDA4LAotMHg4MDAwMDAwYywKLTB4N2Q5MTgwMGIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhkNDAwMDNjMCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGNjNDAwM2Y5LAotMHg4MDAwMDI2MSwKLTB4Y2M0MDAzZjgsCi0weGM4MjAwM2Y4LAotMHhjODFjMDNmOSwKLTB4YzgxODAzZmIsCi0weGMwMzdmZmZmLAotMHg3YzQxNDAwMCwKLTB4Y2Y0MWEyOWUsCi0weDY2MjAwMDIwLAotMHg3ZGUxYzAyYywKLTB4N2Q1OGMwMDgsCi0weDdjZGNjMDIwLAotMHg2OGQwMDAyMCwKLTB4YzAzNjAwMDMsCi0weGNjMDAwMDU0LAotMHg3Y2I0ODAwYywKLTB4ODAwMDAwNmEsCi0weGNjODAwMDQwLAotMHg3YzQxODAwMCwKLTB4Y2Q4MWEyOWUsCi0weGNjODAwMDQwLAotMHhjZDgwMDA0MCwKLTB4ODAwMDAwNjgsCi0weGNjMDAwMDU0LAotMHhjMDE5ZmZmZiwKLTB4Y2M4MDAwNDAsCi0weGNkODFhMjllLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHhjY2MxYTFmYSwKLTB4Y2QwMWExZjksCi0weGNkNDFhMjlkLAotMHhjY2MwMDA0MCwKLTB4Y2QwMDAwNDAsCi0weGNkNDAwMDQwLAotMHhjYzQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4Y2MwMDAwNTQsCi0weGNjODAwMDQwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHhjY2MxYTFmYSwKLTB4Y2QwMWExZjksCi0weGNkNDFhMjlkLAotMHhjY2MwMDA0MCwKLTB4Y2QwMDAwNDAsCi0weGNkNDAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4N2M0MGMwMDAsCi0weDMwZDAwMDAxLAotMHhjY2MxYTI5ZiwKLTB4OTUwMDAwMDMsCi0weDA0MTQwMDAxLAotMHgwNDE0MDAwMiwKLTB4Y2Q0MDAzZmIsCi0weGNjODAwMDQwLAotMHg4MDAwMDAwMCwKLTB4Y2NjMDAwNDAsCi0weDdjNDBjMDAwLAotMHhjYzgwMDA0MCwKLTB4Y2NjMWEyYTIsCi0weDgwMDAwMDAwLAotMHhjY2MwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDI4ZDQwMDFmLAotMHhjYzgwMDA0MCwKLTB4OTU0MDAwMDMsCi0weDdjNDEwMDAwLAotMHhjY2MwMDA1NywKLTB4MjkxODAwMWYsCi0weGNjYzAwMDQwLAotMHg5NTgwMDAwMywKLTB4Y2QwMDAwNDAsCi0weGNkMDAwMDU4LAotMHg4MDAwMDI2MSwKLTB4Y2MwMDAwN2YsCi0weGM4MjAwMDE3LAotMHhjODMwMDAyMiwKLTB4OWEwMDAwMDYsCi0weDBlMjgwMDAxLAotMHhjODI0MDAxZSwKLTB4MGE2NDAwMDEsCi0weGQ0MDAxMjQwLAotMHhjZTQwMDA0MCwKLTB4YzAzNmMwMDAsCi0weDk2ODAwMDA3LAotMHgzNzc0NzkwMCwKLTB4MDQxYzAwMDEsCi0weGNmNDAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2YwMDAzZmEsCi0weDdjMDMwMDAwLAotMHhjYTBjMDAxMCwKLTB4N2M0MTAwMDAsCi0weDk0YzAwMDA0LAotMHg3YzQxNDAwMCwKLTB4ZDQyMDAyYzQsCi0weGNkZTAwMDQ0LAotMHg5YjAwMDAwYiwKLTB4N2M0MTgwMDAsCi0weGNjMDAwMDRiLAotMHhjZGEwMDA0OSwKLTB4Y2QyMDAwNDEsCi0weGNkNjAwMDQxLAotMHhjZGEwMDA0MSwKLTB4MDYyMDAwMDEsCi0weGNlMDAwMDU2LAotMHg4MDAwMDI2MSwKLTB4Y2MwMDAwN2YsCi0weGM4MjgwMDIwLAotMHhjODJjMDAyMSwKLTB4Y2MwMDAwNjMsCi0weDdlZWE0MDAxLAotMHg2NTc0MDAyMCwKLTB4N2Y1MzQwMmMsCi0weDI2OWMwMDAyLAotMHg3ZGY1YzAyMCwKLTB4NjlmODAwMjAsCi0weGNlODAwMDRiLAotMHhjZTYwMDA0OSwKLTB4Y2RlMDAwNDEsCi0weGNmYTAwMDQxLAotMHhjZTYwMDA0MSwKLTB4MjcxYzAwMDIsCi0weDdkZjVjMDIwLAotMHg2OWY4MDAyMCwKLTB4N2RiMjQwMDEsCi0weGNmMDAwMDRiLAotMHhjZTYwMDA0OSwKLTB4Y2RlMDAwNDEsCi0weGNmYTAwMDQxLAotMHg4MDAwMDBiZCwKLTB4Y2U2MDAwNDEsCi0weGM4MjAwMDE3LAotMHhjODMwMDAyMiwKLTB4OWEwMDAwMDYsCi0weDBlMjgwMDAxLAotMHhjODI0MDAxZSwKLTB4MGE2NDAwMDEsCi0weGQ0MDAxMjQwLAotMHhjZTQwMDA0MCwKLTB4Y2EwYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5NGMwMDAwYiwKLTB4YzAzNmMwMDAsCi0weDk2ODAwMDA3LAotMHgzNzc0NzkwMCwKLTB4MDQxYzAwMDEsCi0weGNmNDAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2YwMDAzZmEsCi0weDdjMDMwMDAwLAotMHg4MDAwMDBiNiwKLTB4N2M0MTQwMDAsCi0weGNjMDAwMDQ4LAotMHg4MDAwMDBlZiwKLTB4MDAwMDAwMDAsCi0weGM4MjAwMDE3LAotMHhjODFjMDAyMywKLTB4MGUyNDAwMDIsCi0weDk5YzAwMDE1LAotMHg3YzQxODAwMCwKLTB4MGEyMDAwMDEsCi0weGNlMDAwMDU2LAotMHhkNDAwMDQ0MCwKLTB4Y2MwMDAwNDAsCi0weGMwMzZjMDAwLAotMHhjYTE0MDAxMywKLTB4OTY0MDAwMDcsCi0weDM3NzQ3OTAwLAotMHhjZjQwMDA0MCwKLTB4Y2MwMDAwNDAsCi0weGM4MzAwM2ZhLAotMHg4MDAwMDEwNCwKLTB4Y2YwMDAwMjIsCi0weGNjMDAwMDIyLAotMHg5NTQwMDE1ZCwKLTB4Y2MwMDAwN2YsCi0weGNjYTAwMDQ2LAotMHg4MDAwMDAwMCwKLTB4Y2MyMDAwNDYsCi0weDgwMDAwMjYxLAotMHhjYzAwMDA2NCwKLTB4YzgyMDAwMTcsCi0weGM4MTAwMDFmLAotMHg5NjAwMDAwNSwKLTB4MDkxMDAwMDEsCi0weGQ0MDAwNDQwLAotMHhjZDAwMDA0MCwKLTB4Y2QwMDAwMjIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4YzgwYzAwMjUsCi0weDk0YzBmZWViLAotMHhjODEwMDAwOCwKLTB4Y2QwMDAwNDAsCi0weGQ0MDAwZmMwLAotMHg4MDAwMDAwMCwKLTB4ZDQwMDBmYTIsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2NjMDAzZmQsCi0weGNkMDAwM2ZjLAotMHhjY2MwMDA0MiwKLTB4Y2QwMDAwNDIsCi0weDI5MTQwMDFmLAotMHgyOTE4MDAxMCwKLTB4MzE5ODAwMDcsCi0weDNiNWMwMDAxLAotMHg3ZDc2MDAwYiwKLTB4OTk4MDAwMDUsCi0weDdkNWU0MDBiLAotMHhjYzAwMDA0MiwKLTB4ODAwMDAyNjEsCi0weGNjMDAwMDRkLAotMHgyOTk4MDAwMSwKLTB4MjkyYzAwMDgsCi0weDk5ODAwMDNkLAotMHgzMmVjMDAwMSwKLTB4OTYwMDAwMDQsCi0weDI5MzAwMDBjLAotMHg4MDAwMDI2MSwKLTB4Y2MwMDAwNDIsCi0weDA0MTQwMDEwLAotMHhjZDQwMDA0MiwKLTB4MzMzMDAwMDEsCi0weDM0MjgwMDAxLAotMHg4NDAwMDE1ZSwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDFiLAotMHgwNDM4MDAwYywKLTB4ODQwMDAxNWUsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxNywKLTB4MDQzODAwMDgsCi0weDg0MDAwMTVlLAotMHhjODE0MDAwMywKLTB4OWI0MDAwMTMsCi0weDA0MzgwMDA0LAotMHg4NDAwMDE1ZSwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDE1LAotMHhjODBjMDNmZCwKLTB4OWE4MDAwMDksCi0weGM4MTAwM2ZjLAotMHg5YjAwMDExOCwKLTB4Y2MwMDAwNGQsCi0weDA0MTQwMDEwLAotMHhjY2MwMDA0MiwKLTB4Y2QwMDAwNDIsCi0weDgwMDAwMTM2LAotMHhjZDQwMDA0MiwKLTB4OTZjMDAxMTEsCi0weGNjMDAwMDRkLAotMHg4MDAwMDI2MSwKLTB4Y2MwMDAwNGUsCi0weDlhYzAwMDAzLAotMHhjYzAwMDA0ZCwKLTB4Y2MwMDAwNGUsCi0weGRmODMwMDAwLAotMHg4MDAwMDAwMCwKLTB4ZDgwMzAxZmYsCi0weDlhYzAwMTA3LAotMHhjYzAwMDA0ZCwKLTB4ODAwMDAyNjEsCi0weGNjMDAwMDRlLAotMHhjODE4MDAwMywKLTB4YzgxYzAwMDMsCi0weGM4MjAwMDAzLAotMHg3ZDVkNDAwMywKLTB4N2RhMWMwMDMsCi0weDdkNWQ0MDBjLAotMHgyYTEwMDAxZiwKLTB4Mjk5YzAwMWYsCi0weDdkMWQwMDBiLAotMHg3ZDE3NDAwYiwKLTB4ODgwMDAwMDAsCi0weDdlOTI4MDBiLAotMHg5NjQwMDAwNCwKLTB4Y2MwMDAwNGUsCi0weDgwMDAwMjYxLAotMHhjYzAwMDA0MiwKLTB4MDQzODAwMDgsCi0weGNmODAwMDQyLAotMHhjODA4MDAwMywKLTB4YzgwYzAwMDMsCi0weGM4MTAwMDAzLAotMHhjODE0MDAwMywKLTB4YzgxODAwMDMsCi0weGM4MWMwMDAzLAotMHhjODI0MDAwMywKLTB4YzgyODAwMDMsCi0weDI5ZmMwMDFmLAotMHgyYWIwMDAxZiwKLTB4N2ZmM2MwMGIsCi0weDI4ZjAwMDFmLAotMHg3ZmYzYzAwYiwKLTB4Mjk3MDAwMWYsCi0weDdmZjNjMDBiLAotMHg3ZDg4ODAwMSwKLTB4N2RjY2MwMDEsCi0weDdlNTEwMDAxLAotMHg3ZTk1NDAwMSwKLTB4N2M5MDgwMDIsCi0weDdjZDRjMDAyLAotMHg3Y2JjODAwYiwKLTB4OWFjMDAwMDMsCi0weDdjOGY0MDBiLAotMHgzOGI0MDAwMSwKLTB4OWI0MDAwZDgsCi0weGNjMDAwMDRkLAotMHg5YmMwMDBkNiwKLTB4Y2MwMDAwNGUsCi0weGM4MGMwM2ZkLAotMHhjODEwMDNmYywKLTB4Y2NjMDAwNDIsCi0weDgwMDAwMTZmLAotMHhjZDAwMDA0MiwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGNjNDAwMDQwLAotMHhjYzQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weDdjNDBjMDAwLAotMHhjY2MwMDA0MCwKLTB4Y2NjMDAwMGQsCi0weDgwMDAwMDAwLAotMHhkMDQwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg2NTE0MDAyMCwKLTB4N2Q0ZDQwMmMsCi0weDI0NTgwMDAyLAotMHg3ZDU5ODAyMCwKLTB4N2M0MWMwMDAsCi0weGNkODAwMDQyLAotMHg2OTk4MDAyMCwKLTB4Y2Q4MDAwNDIsCi0weGNkYzAwMDQyLAotMHhjMDIzYzAwMCwKLTB4MDVlNDAwMDIsCi0weDdjYTA4MDBiLAotMHgyNjY0MDAxMCwKLTB4N2NhNDgwMGMsCi0weGNjODAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weDk1YzAwMDBlLAotMHhjZDAwMDA0MCwKLTB4MDlkYzAwMDEsCi0weGM4MjgwMDAzLAotMHg5NjgwMDAwOCwKLTB4Y2U4MDAwNDAsCi0weGM4MzQwMDFkLAotMHg5NzQwMDAwMCwKLTB4YzgzNDAwMWQsCi0weDI2YTgwMDA4LAotMHg4NDAwMDI2NCwKLTB4Y2MyYjAwMDAsCi0weDk5YzBmZmY3LAotMHgwOWRjMDAwMSwKLTB4ZGMzYTAwMDAsCi0weDk3ODAwMDA0LAotMHg3YzQxODAwMCwKLTB4ODAwMDAxYTMsCi0weDI1OTgwMDAyLAotMHhhMDAwMDAwMCwKLTB4N2Q4MDgwMDAsCi0weGM4MTgwMDFkLAotMHg3YzQwYzAwMCwKLTB4NjRkMDAwMDgsCi0weDk1ODAwMDAwLAotMHhjODE4MDAxZCwKLTB4Y2MxMzAwMDAsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGNjNDAwMDQwLAotMHhjODEwMDAxZiwKLTB4N2M0MGMwMDAsCi0weGNjODAwMDQwLAotMHg3Y2QxNDAwYywKLTB4Y2Q0MDAwNDAsCi0weDA1MTgwMDAxLAotMHg4MDAwMDAwMCwKLTB4Y2Q4MDAwMjIsCi0weDdjNDBjMDAwLAotMHg2NDUwMDAyMCwKLTB4ODQwMDAyNjQsCi0weGNjMDAwMDYxLAotMHg3Y2QwYzAyYywKLTB4YzgyMDAwMTcsCi0weGM4ZDYwMDAwLAotMHg5OTQwMDAwOCwKLTB4N2M0MzgwMDAsCi0weGRmODMwMDAwLAotMHhjZmEwMDA0ZiwKLTB4ODQwMDAyNjQsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMjYxLAotMHhjYzAwMDA2MiwKLTB4ODQwMDAyNjQsCi0weGNjMDAwMDYxLAotMHhjODIwMDAxNywKLTB4N2M0MGMwMDAsCi0weGMwMzZmZjAwLAotMHhjODEwMDAwZCwKLTB4YzAzMDNmZmYsCi0weDdjZjU0MDBiLAotMHg3ZDUxODAwYiwKLTB4N2Q4MTgwMGYsCi0weDk5ODAwMDA4LAotMHg3Y2YzODAwYiwKLTB4ZGY4MzAwMDAsCi0weGNmYTAwMDRmLAotMHg4NDAwMDI2NCwKLTB4Y2MwMDAwNjIsCi0weDgwMDAwMDAwLAotMHhkMDQwMDA3ZiwKLTB4ODAwMDAyNjEsCi0weGNjMDAwMDYyLAotMHg4NDAwMDI2NCwKLTB4N2M0MGMwMDAsCi0weDI4ZGMwMDA4LAotMHg5NWMwMDAxOSwKLTB4MzBkYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5OWMwMDAwNCwKLTB4NjQ1NDAwMjAsCi0weDgwMDAwMjA5LAotMHhjOTFkMDAwMCwKLTB4N2QxNTAwMmMsCi0weGM5MWUwMDAwLAotMHg3YzQyMDAwMCwKLTB4N2M0MjQwMDAsCi0weDdjNDE4MDAwLAotMHg3ZGU1YzAwYiwKLTB4N2RlMjgwMDcsCi0weDlhODAwMDBlLAotMHg0MWFjMDAwNSwKLTB4OWFjMDAwMDAsCi0weDBhZWMwMDAxLAotMHgzMGRjMDAxMCwKLTB4OTljMDAwMDQsCi0weDAwMDAwMDAwLAotMHg4MDAwMDIwYywKLTB4YzkxZDAwMDAsCi0weDgwMDAwMjBjLAotMHhjOTFlMDAwMCwKLTB4Y2M4MDAwNDAsCi0weGNjYzAwMDQwLAotMHhkMDQwMDA0MCwKLTB4YzgwYzAwMjUsCi0weDk0YzBmZGUzLAotMHhjODEwMDAwOCwKLTB4Y2QwMDAwNDAsCi0weGQ0MDAwZmMwLAotMHg4MDAwMDAwMCwKLTB4ZDQwMDBmYTIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ZDQwMDAzYzAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHg3YzQwYzAwMCwKLTB4MzBkMDAwMDYsCi0weDBkMTAwMDA2LAotMHg5OTAwMDAwNywKLTB4YzgxNDAwMTUsCi0weDk5NDAwMDA1LAotMHhjYzAwMDA1MiwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGNjYzAwMDQwLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwNDAsCi0weDdjNDBjMDAwLAotMHhjYzRkMDAwMCwKLTB4ZGMzYTAwMDAsCi0weDk3ODBmZGJjLAotMHgwNGNjMDAwMSwKLTB4ODAwMDAyNDMsCi0weGNjNGQwMDAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDI5MjQwMDE4LAotMHgzMjY0MDAwMSwKLTB4OTY0MDAwMGYsCi0weGNjODAwMDQwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weDdjNDFjMDAwLAotMHhjY2MwMDA0MywKLTB4Y2QwMDAwNDMsCi0weDMxZGM3ZmZmLAotMHhjZGMwMDA0MywKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHhjZDQwMDA0MCwKLTB4Y2Q4MDAwNDAsCi0weDgwMDAwMDAwLAotMHhjZGMwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwNDAsCi0weDgwMDAwMDAwLAotMHhkMDQwMDA3ZiwKLTB4Y2MwMDAwN2YsCi0weDgwMDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4Y2MwMDAwN2YsCi0weDg4MDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMzAyMjMsCi0weDAwMDQwMjJiLAotMHgwMDA1MDBhMCwKLTB4MDAwMjAwMDMsCi0weDAwMDYwMDNjLAotMHgwMDA3MDAyNywKLTB4MDAwODAxOTIsCi0weDAwMDkwMDQ0LAotMHgwMDBhMDAyZCwKLTB4MDAxMDAyNWYsCi0weDAwMTcwMGYxLAotMHgwMDIyMDFkOCwKLTB4MDAyMzAxZTksCi0weDAwMjYwMDRjLAotMHgwMDI3MDA1ZiwKLTB4MDAyMDAxMWIsCi0weDAwMjgwMDkzLAotMHgwMDI5MDA0ZiwKLTB4MDAyYTAwODQsCi0weDAwMmIwMDY1LAotMHgwMDJmMDA4ZSwKLTB4MDAzMjAwZDksCi0weDAwMzQwMjMzLAotMHgwMDM2MDA3NSwKLTB4MDAzOTAxMGIsCi0weDAwM2MwMWZkLAotMHgwMDNmMDBhMCwKLTB4MDA0MTAyNDgsCi0weDAwNDQwMTk1LAotMHgwMDQ4MDE5ZSwKLTB4MDA0OTAxYzYsCi0weDAwNGEwMWQwLAotMHgwMDU1MDIyNiwKLTB4MDA1NjAyMmUsCi0weDAwNjAwMDBhLAotMHgwMDYxMDAyYSwKLTB4MDA2MjAwMzAsCi0weDAwNjMwMDMwLAotMHgwMDY0MDAzMCwKLTB4MDA2NTAwMzAsCi0weDAwNjYwMDMwLAotMHgwMDY3MDAzMCwKLTB4MDA2ODAwMzcsCi0weDAwNjkwMDNmLAotMHgwMDZhMDA0NywKLTB4MDA2YjAwNDcsCi0weDAwNmMwMDQ3LAotMHgwMDZkMDA0NywKLTB4MDA2ZTAwNDcsCi0weDAwNmYwMDQ3LAotMHgwMDcwMDA0NywKLTB4MDA3MzAyNWYsCi0weDAwN2IwMjQxLAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjczMF9wZnBfbWljcm9jb2RlW10gPSB7Ci0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weDgwMDAwMDAwLAotMHhkYzAzMDAwMCwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhjODE4MDAwZSwKLTB4MzE5ODAwMDEsCi0weDdjNDI0MDAwLAotMHg5NTgwMDIzYSwKLTB4N2M0MjgwMDAsCi0weGM4MWMwMDFjLAotMHhjMDM3YzAwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3Y2I0ODAwYiwKLTB4YzAzNjAwMDMsCi0weDk5YzAwMDAwLAotMHhjODFjMDAxYywKLTB4N2NiNDgwMGMsCi0weDI0ZDQwMDAyLAotMHg3ZDY1NDAwMCwKLTB4Y2Q0MDAwNDMsCi0weGNlODAwMDQzLAotMHhjZDAwMDA0MywKLTB4Y2M4MDAwNDAsCi0weGNlNDAwMDQwLAotMHhjZTgwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weGRjM2EwMDAwLAotMHg5NzgwZmZkZSwKLTB4Y2QwMDAwNDAsCi0weDdjNDBjMDAwLAotMHg4MDAwMDAxOCwKLTB4N2M0MTAwMDAsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGM4MTgwMDBlLAotMHg4MDAwMDAwYywKLTB4MzE5ODAwMDIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGM4MTgwMDBlLAotMHgyODhjMDAwOCwKLTB4MzBjYzAwMGYsCi0weDM0MTAwMDAxLAotMHg3ZDBkMDAwOCwKLTB4ODAwMDAwMGMsCi0weDdkOTE4MDBiLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ZDQwMDAzYzAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhjYzQwMDNmOSwKLTB4ODAwMDAyNDksCi0weGNjNDAwM2Y4LAotMHhjMDM3ZmZmZiwKLTB4N2M0MTQwMDAsCi0weGNmNDFhMjllLAotMHhjODIwMDNmOCwKLTB4YzgxYzAzZjksCi0weDY2MjAwMDIwLAotMHhjODE4MDNmYiwKLTB4N2RlMWMwMmMsCi0weDdkNThjMDA4LAotMHg3Y2RjYzAyMCwKLTB4NjkxMDAwMjAsCi0weGMwMzYwMDAzLAotMHhjYzAwMDA1NCwKLTB4N2NiNDgwMGMsCi0weDgwMDAwMDY5LAotMHhjYzgwMDA0MCwKLTB4N2M0MTgwMDAsCi0weGNkODFhMjllLAotMHhjYzgwMDA0MCwKLTB4ODAwMDAwNjcsCi0weGNkODAwMDQwLAotMHhjMDE5ZmZmZiwKLTB4Y2M4MDAwNDAsCi0weGNkODFhMjllLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHhjY2MxYTFmYSwKLTB4Y2QwMWExZjksCi0weGNkNDFhMjlkLAotMHhjY2MwMDA0MCwKLTB4Y2QwMDAwNDAsCi0weGNkNDAwMDQwLAotMHhjYzQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4Y2MwMDAwNTQsCi0weGNjODAwMDQwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHhjY2MxYTFmYSwKLTB4Y2QwMWExZjksCi0weGNkNDFhMjlkLAotMHhjY2MwMDA0MCwKLTB4Y2QwMDAwNDAsCi0weGNkNDAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4N2M0MGMwMDAsCi0weDMwZDAwMDAxLAotMHhjY2MxYTI5ZiwKLTB4OTUwMDAwMDMsCi0weDA0MTQwMDAxLAotMHgwNDE0MDAwMiwKLTB4Y2Q0MDAzZmIsCi0weGNjODAwMDQwLAotMHg4MDAwMDAwMCwKLTB4Y2NjMDAwNDAsCi0weDdjNDBjMDAwLAotMHhjYzgwMDA0MCwKLTB4Y2NjMWEyYTIsCi0weDgwMDAwMDAwLAotMHhjY2MwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDI4ZDQwMDFmLAotMHhjYzgwMDA0MCwKLTB4OTU0MDAwMDMsCi0weDdjNDEwMDAwLAotMHhjY2MwMDA1NywKLTB4MjkxODAwMWYsCi0weGNjYzAwMDQwLAotMHg5NTgwMDAwMywKLTB4Y2QwMDAwNDAsCi0weGNkMDAwMDU4LAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwN2YsCi0weGM4MjAwMDE3LAotMHhjODMwMDAyMiwKLTB4OWEwMDAwMDYsCi0weDBlMjgwMDAxLAotMHhjODI0MDAxZSwKLTB4MGE2NDAwMDEsCi0weGQ0MDAxMjQwLAotMHhjZTQwMDA0MCwKLTB4YzAzNmMwMDAsCi0weDk2ODAwMDA3LAotMHgzNzc0NzkwMCwKLTB4MDQxYzAwMDEsCi0weGNmNDAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2YwMDAzZmEsCi0weDdjMDMwMDAwLAotMHhjYTBjMDAxMCwKLTB4N2M0MTAwMDAsCi0weDk0YzAwMDA0LAotMHg3YzQxNDAwMCwKLTB4ZDQyMDAyYzQsCi0weGNkZTAwMDQ0LAotMHg5YjAwMDAwYiwKLTB4N2M0MTgwMDAsCi0weGNjMDAwMDRiLAotMHhjZGEwMDA0OSwKLTB4Y2QyMDAwNDEsCi0weGNkNjAwMDQxLAotMHhjZGEwMDA0MSwKLTB4MDYyMDAwMDEsCi0weGNlMDAwMDU2LAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwN2YsCi0weGM4MjgwMDIwLAotMHhjODJjMDAyMSwKLTB4Y2MwMDAwNjMsCi0weDdlZWE0MDAxLAotMHg2NTc0MDAyMCwKLTB4N2Y1MzQwMmMsCi0weDI2OWMwMDAyLAotMHg3ZGY1YzAyMCwKLTB4NjlmODAwMjAsCi0weGNlODAwMDRiLAotMHhjZTYwMDA0OSwKLTB4Y2RlMDAwNDEsCi0weGNmYTAwMDQxLAotMHhjZTYwMDA0MSwKLTB4MjcxYzAwMDIsCi0weDdkZjVjMDIwLAotMHg2OWY4MDAyMCwKLTB4N2RiMjQwMDEsCi0weGNmMDAwMDRiLAotMHhjZTYwMDA0OSwKLTB4Y2RlMDAwNDEsCi0weGNmYTAwMDQxLAotMHg4MDAwMDBiYywKLTB4Y2U2MDAwNDEsCi0weGM4MjAwMDE3LAotMHhjODMwMDAyMiwKLTB4OWEwMDAwMDYsCi0weDBlMjgwMDAxLAotMHhjODI0MDAxZSwKLTB4MGE2NDAwMDEsCi0weGQ0MDAxMjQwLAotMHhjZTQwMDA0MCwKLTB4Y2EwYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5NGMwMDAwYiwKLTB4YzAzNmMwMDAsCi0weDk2ODAwMDA3LAotMHgzNzc0NzkwMCwKLTB4MDQxYzAwMDEsCi0weGNmNDAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2YwMDAzZmEsCi0weDdjMDMwMDAwLAotMHg4MDAwMDBiNSwKLTB4N2M0MTQwMDAsCi0weGNjMDAwMDQ4LAotMHg4MDAwMDBlZSwKLTB4MDAwMDAwMDAsCi0weGM4MjAwMDE3LAotMHhjODFjMDAyMywKLTB4MGUyNDAwMDIsCi0weDk5YzAwMDE1LAotMHg3YzQxODAwMCwKLTB4MGEyMDAwMDEsCi0weGNlMDAwMDU2LAotMHhkNDAwMDQ0MCwKLTB4Y2MwMDAwNDAsCi0weGMwMzZjMDAwLAotMHhjYTE0MDAxMywKLTB4OTY0MDAwMDcsCi0weDM3NzQ3OTAwLAotMHhjZjQwMDA0MCwKLTB4Y2MwMDAwNDAsCi0weGM4MzAwM2ZhLAotMHg4MDAwMDEwMywKLTB4Y2YwMDAwMjIsCi0weGNjMDAwMDIyLAotMHg5NTQwMDE0NiwKLTB4Y2MwMDAwN2YsCi0weGNjYTAwMDQ2LAotMHg4MDAwMDAwMCwKLTB4Y2MyMDAwNDYsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA2NCwKLTB4YzgyMDAwMTcsCi0weGM4MTAwMDFmLAotMHg5NjAwMDAwNSwKLTB4MDkxMDAwMDEsCi0weGQ0MDAwNDQwLAotMHhjZDAwMDA0MCwKLTB4Y2QwMDAwMjIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4YzgwYzAwMjUsCi0weDk0YzBmZWVjLAotMHhjODEwMDAwOCwKLTB4Y2QwMDAwNDAsCi0weGQ0MDAwZmMwLAotMHg4MDAwMDAwMCwKLTB4ZDQwMDBmYTIsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2NjMDAzZmQsCi0weGNkMDAwM2ZjLAotMHhjY2MwMDA0MiwKLTB4Y2QwMDAwNDIsCi0weDI5MTQwMDFmLAotMHgyOTE4MDAxMCwKLTB4MzE5ODAwMDcsCi0weDNiNWMwMDAxLAotMHg3ZDc2MDAwYiwKLTB4OTk4MDAwMDUsCi0weDdkNWU0MDBiLAotMHhjYzAwMDA0MiwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDRkLAotMHgyOTk4MDAwMSwKLTB4MjkyYzAwMDgsCi0weDk5ODAwMDNkLAotMHgzMmVjMDAwMSwKLTB4OTYwMDAwMDQsCi0weDI5MzAwMDBjLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNDIsCi0weDA0MTQwMDEwLAotMHhjZDQwMDA0MiwKLTB4MzMzMDAwMDEsCi0weDM0MjgwMDAxLAotMHg4NDAwMDE1ZCwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDFiLAotMHgwNDM4MDAwYywKLTB4ODQwMDAxNWQsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxNywKLTB4MDQzODAwMDgsCi0weDg0MDAwMTVkLAotMHhjODE0MDAwMywKLTB4OWI0MDAwMTMsCi0weDA0MzgwMDA0LAotMHg4NDAwMDE1ZCwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDE1LAotMHhjODBjMDNmZCwKLTB4OWE4MDAwMDksCi0weGM4MTAwM2ZjLAotMHg5YjAwMDEwMSwKLTB4Y2MwMDAwNGQsCi0weDA0MTQwMDEwLAotMHhjY2MwMDA0MiwKLTB4Y2QwMDAwNDIsCi0weDgwMDAwMTM1LAotMHhjZDQwMDA0MiwKLTB4OTZjMDAwZmEsCi0weGNjMDAwMDRkLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNGUsCi0weDlhYzAwMDAzLAotMHhjYzAwMDA0ZCwKLTB4Y2MwMDAwNGUsCi0weGRmODMwMDAwLAotMHg4MDAwMDAwMCwKLTB4ZDgwMzAxZmYsCi0weDlhYzAwMGYwLAotMHhjYzAwMDA0ZCwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDRlLAotMHhjODE4MDAwMywKLTB4YzgxYzAwMDMsCi0weGM4MjAwMDAzLAotMHg3ZDVkNDAwMywKLTB4N2RhMWMwMDMsCi0weDdkNWQ0MDBjLAotMHgyYTEwMDAxZiwKLTB4Mjk5YzAwMWYsCi0weDdkMWQwMDBiLAotMHg3ZDE3NDAwYiwKLTB4ODgwMDAwMDAsCi0weDdlOTI4MDBiLAotMHg5NjQwMDAwNCwKLTB4Y2MwMDAwNGUsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA0MiwKLTB4MDQzODAwMDgsCi0weGNmODAwMDQyLAotMHhjODA4MDAwMywKLTB4YzgwYzAwMDMsCi0weGM4MTAwMDAzLAotMHhjODE0MDAwMywKLTB4YzgxODAwMDMsCi0weGM4MWMwMDAzLAotMHhjODI0MDAwMywKLTB4YzgyODAwMDMsCi0weDI5ZmMwMDFmLAotMHgyYWIwMDAxZiwKLTB4N2ZmM2MwMGIsCi0weDI4ZjAwMDFmLAotMHg3ZmYzYzAwYiwKLTB4Mjk3MDAwMWYsCi0weDdmZjNjMDBiLAotMHg3ZDg4ODAwMSwKLTB4N2RjY2MwMDEsCi0weDdlNTEwMDAxLAotMHg3ZTk1NDAwMSwKLTB4N2M5MDgwMDIsCi0weDdjZDRjMDAyLAotMHg3Y2JjODAwYiwKLTB4OWFjMDAwMDMsCi0weDdjOGY0MDBiLAotMHgzOGI0MDAwMSwKLTB4OWI0MDAwYzEsCi0weGNjMDAwMDRkLAotMHg5YmMwMDBiZiwKLTB4Y2MwMDAwNGUsCi0weGM4MGMwM2ZkLAotMHhjODEwMDNmYywKLTB4Y2NjMDAwNDIsCi0weDgwMDAwMTZlLAotMHhjZDAwMDA0MiwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGNjNDAwMDQwLAotMHhjYzQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weDdjNDBjMDAwLAotMHhjY2MwMDA0MCwKLTB4Y2NjMDAwMGQsCi0weDgwMDAwMDAwLAotMHhkMDQwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg2NTE0MDAyMCwKLTB4N2Q0ZDQwMmMsCi0weDI0NTgwMDAyLAotMHg3ZDU5ODAyMCwKLTB4N2M0MWMwMDAsCi0weGNkODAwMDQyLAotMHg2OTk4MDAyMCwKLTB4Y2Q4MDAwNDIsCi0weGNkYzAwMDQyLAotMHhjMDIzYzAwMCwKLTB4MDVlNDAwMDIsCi0weDdjYTA4MDBiLAotMHgyNjY0MDAxMCwKLTB4N2NhNDgwMGMsCi0weGNjODAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weDk1YzAwMDBlLAotMHhjZDAwMDA0MCwKLTB4MDlkYzAwMDEsCi0weGM4MjgwMDAzLAotMHg5NjgwMDAwOCwKLTB4Y2U4MDAwNDAsCi0weGM4MzQwMDFkLAotMHg5NzQwMDAwMCwKLTB4YzgzNDAwMWQsCi0weDI2YTgwMDA4LAotMHg4NDAwMDI0YywKLTB4Y2MyYjAwMDAsCi0weDk5YzBmZmY3LAotMHgwOWRjMDAwMSwKLTB4ZGMzYTAwMDAsCi0weDk3ODAwMDA0LAotMHg3YzQxODAwMCwKLTB4ODAwMDAxYTIsCi0weDI1OTgwMDAyLAotMHhhMDAwMDAwMCwKLTB4N2Q4MDgwMDAsCi0weGM4MTgwMDFkLAotMHg3YzQwYzAwMCwKLTB4NjRkMDAwMDgsCi0weDk1ODAwMDAwLAotMHhjODE4MDAxZCwKLTB4Y2MxMzAwMDAsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGNjNDAwMDQwLAotMHhjODEwMDAxZiwKLTB4N2M0MGMwMDAsCi0weGNjODAwMDQwLAotMHg3Y2QxNDAwYywKLTB4Y2Q0MDAwNDAsCi0weDA1MTgwMDAxLAotMHg4MDAwMDAwMCwKLTB4Y2Q4MDAwMjIsCi0weDdjNDBjMDAwLAotMHg2NDUwMDAyMCwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYxLAotMHg3Y2QwYzAyYywKLTB4YzgyMDAwMTcsCi0weGM4ZDYwMDAwLAotMHg5OTQwMDAwOCwKLTB4N2M0MzgwMDAsCi0weGRmODMwMDAwLAotMHhjZmEwMDA0ZiwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA2MiwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYxLAotMHhjODIwMDAxNywKLTB4N2M0MGMwMDAsCi0weGMwMzZmZjAwLAotMHhjODEwMDAwZCwKLTB4YzAzMDNmZmYsCi0weDdjZjU0MDBiLAotMHg3ZDUxODAwYiwKLTB4N2Q4MTgwMGYsCi0weDk5ODAwMDA4LAotMHg3Y2YzODAwYiwKLTB4ZGY4MzAwMDAsCi0weGNmYTAwMDRmLAotMHg4NDAwMDI0YywKLTB4Y2MwMDAwNjIsCi0weDgwMDAwMDAwLAotMHhkMDQwMDA3ZiwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDYyLAotMHg4NDAwMDI0YywKLTB4N2M0MGMwMDAsCi0weDI4ZGMwMDA4LAotMHg5NWMwMDAxOSwKLTB4MzBkYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5OWMwMDAwNCwKLTB4NjQ1NDAwMjAsCi0weDgwMDAwMjA4LAotMHhjOTFkMDAwMCwKLTB4N2QxNTAwMmMsCi0weGM5MWUwMDAwLAotMHg3YzQyMDAwMCwKLTB4N2M0MjQwMDAsCi0weDdjNDE4MDAwLAotMHg3ZGU1YzAwYiwKLTB4N2RlMjgwMDcsCi0weDlhODAwMDBlLAotMHg0MWFjMDAwNSwKLTB4OWFjMDAwMDAsCi0weDBhZWMwMDAxLAotMHgzMGRjMDAxMCwKLTB4OTljMDAwMDQsCi0weDAwMDAwMDAwLAotMHg4MDAwMDIwYiwKLTB4YzkxZDAwMDAsCi0weDgwMDAwMjBiLAotMHhjOTFlMDAwMCwKLTB4Y2M4MDAwNDAsCi0weGNjYzAwMDQwLAotMHhkMDQwMDA0MCwKLTB4YzgwYzAwMjUsCi0weDk0YzBmZGU0LAotMHhjODEwMDAwOCwKLTB4Y2QwMDAwNDAsCi0weGQ0MDAwZmMwLAotMHg4MDAwMDAwMCwKLTB4ZDQwMDBmYTIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ZDQwMDAzYzAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHg3YzQwYzAwMCwKLTB4MzBkMDAwMDYsCi0weDBkMTAwMDA2LAotMHg5OTAwMDAwNywKLTB4YzgxNDAwMTUsCi0weDk5NDAwMDA1LAotMHhjYzAwMDA1MiwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGNjYzAwMDQwLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwNDAsCi0weDdjNDBjMDAwLAotMHhjYzRkMDAwMCwKLTB4ZGMzYTAwMDAsCi0weDk3ODBmZGJkLAotMHgwNGNjMDAwMSwKLTB4ODAwMDAyNDIsCi0weGNjNGQwMDAwLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weGNjMDAwMDdmLAotMHg4MDAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weGNjMDAwMDdmLAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDMwMjIyLAotMHgwMDA0MDIyYSwKLTB4MDAwNTAwOWYsCi0weDAwMDIwMDAzLAotMHgwMDA2MDAzYywKLTB4MDAwNzAwMjcsCi0weDAwMDgwMTkxLAotMHgwMDA5MDA0NCwKLTB4MDAwYTAwMmQsCi0weDAwMTAwMjQ3LAotMHgwMDE3MDBmMCwKLTB4MDAyMjAxZDcsCi0weDAwMjMwMWU4LAotMHgwMDI2MDA0YywKLTB4MDAyNzAwNWYsCi0weDAwMjAwMTFhLAotMHgwMDI4MDA5MiwKLTB4MDAyOTAwNGYsCi0weDAwMmEwMDgzLAotMHgwMDJiMDA2NCwKLTB4MDAyZjAwOGQsCi0weDAwMzIwMGQ4LAotMHgwMDM0MDIzMiwKLTB4MDAzNjAwNzQsCi0weDAwMzkwMTBhLAotMHgwMDNjMDFmYywKLTB4MDAzZjAwOWYsCi0weDAwNDEwMDA1LAotMHgwMDQ0MDE5NCwKLTB4MDA0ODAxOWQsCi0weDAwNDkwMWM1LAotMHgwMDRhMDFjZiwKLTB4MDA1NTAyMjUsCi0weDAwNTYwMjJkLAotMHgwMDYwMDAwYSwKLTB4MDA2MTAwMmEsCi0weDAwNjIwMDMwLAotMHgwMDYzMDAzMCwKLTB4MDA2NDAwMzAsCi0weDAwNjUwMDMwLAotMHgwMDY2MDAzMCwKLTB4MDA2NzAwMzAsCi0weDAwNjgwMDM3LAotMHgwMDY5MDAzZiwKLTB4MDA2YTAwNDcsCi0weDAwNmIwMDQ3LAotMHgwMDZjMDA0NywKLTB4MDA2ZDAwNDcsCi0weDAwNmUwMDQ3LAotMHgwMDZmMDA0NywKLTB4MDA3MDAwNDcsCi0weDAwNzMwMjQ3LAotMHgwMDdiMDI0MCwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY3MzBfY3BfbWljcm9jb2RlW10gPSB7Ci0weGNjMDAwM2VhLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg4MDAwMDAwMSwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMDAxLAotMHhjYzQwMDA0MSwKLTB4N2M0MGMwMDAsCi0weGMwMTYwMDA0LAotMHgzMGQwM2ZmZiwKLTB4N2QxNTAwMGMsCi0weGNjMTEwMDAwLAotMHgyOGQ4MDAxZSwKLTB4MzE5ODAwMDEsCi0weDI4ZGMwMDFmLAotMHhjODIwMDAwNCwKLTB4OTVjMDAwMDYsCi0weDdjNDI0MDAwLAotMHhjYzAwMDA2MiwKLTB4N2U1NjgwMGMsCi0weGNjMjkwMDAwLAotMHhjODI0MDAwNCwKLTB4N2UyNjAwMGIsCi0weDk1ODAwMDA2LAotMHg3YzQyYzAwMCwKLTB4Y2MwMDAwNjIsCi0weDdlZDcwMDBjLAotMHhjYzMxMDAwMCwKLTB4YzgyYzAwMDQsCi0weDdlMmUwMDBjLAotMHhjYzAwMDA2MiwKLTB4MzExMDNmZmYsCi0weDgwMDAwMDAxLAotMHhjZTExMDAwMCwKLTB4N2M0MGMwMDAsCi0weDgwMDAwMDAxLAotMHhjYzQwMDA0MCwKLTB4ODAwMDAwMDEsCi0weGNjNDEyMjU3LAotMHg3YzQxODAwMCwKLTB4Y2M0MDAwNDUsCi0weGNjNDAwMDQ4LAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGNjNDAwMDQ1LAotMHhjYzQwMDA0OCwKLTB4N2M0MGMwMDAsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDA0MGNhMWZkLAotMHhjMDEyMDAwMSwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHg3Y2QwYzAwYywKLTB4Y2M0MTIyNWMsCi0weGNjNDFhMWZjLAotMHhkMDRkMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAwMDEsCi0weGNjNDEyMjVkLAotMHg3YzQwODAwMCwKLTB4N2M0MGMwMDAsCi0weGMwMmEwMDAyLAotMHg3YzQxMDAwMCwKLTB4N2QyOTAwMGMsCi0weDMwOTQwMDAxLAotMHgzMDk4MDAwNiwKLTB4MzA5YzAzMDAsCi0weDI5ZGMwMDA4LAotMHg3YzQyMDAwMCwKLTB4N2M0MjQwMDAsCi0weDk1NDAwMDBmLAotMHhjMDJlMDAwNCwKLTB4MDVmMDIyNTgsCi0weDdmMmYwMDBjLAotMHhjYzMxMDAwMCwKLTB4YzgyODAwMDQsCi0weGNjYzEyMTY5LAotMHhjZDAxMjE2YSwKLTB4Y2U4MTIxNmIsCi0weDBkYjQwMDAyLAotMHhjYzAxMjE2YywKLTB4OTc0MDAwMGUsCi0weDBkYjQwMDAwLAotMHg4MDAwMDA3YiwKLTB4YzgzNDAwMGEsCi0weDBkYjQwMDAyLAotMHg5NzQwMDAwOSwKLTB4MGRiNDAwMDAsCi0weGMwMmUwMDA0LAotMHgwNWYwMjI1OCwKLTB4N2YyZjAwMGMsCi0weGNjMzEwMDAwLAotMHhjODI4MDAwNCwKLTB4ODAwMDAwN2IsCi0weGM4MzQwMDBhLAotMHg5NzQwMDAwNCwKLTB4N2UwMjgwMDAsCi0weDgwMDAwMDdiLAotMHhjODM0MDAwYSwKLTB4MGRiNDAwMDQsCi0weDk3NDBmZjhjLAotMHgwMDAwMDAwMCwKLTB4Y2UwMTIxNmQsCi0weGNlNDEyMTZlLAotMHhjODI4MDAwMywKLTB4YzgzNDAwMGEsCi0weDliNDAwMDA0LAotMHgwNDNjMDAwNSwKLTB4ODQwMDAyNmIsCi0weGNjMDAwMDYyLAotMHgwZGY0MDAwMCwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U2LAotMHhjZTgxYTJiNywKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNCwKLTB4ODAwMDAwMDEsCi0weGNmYzFhMmQxLAotMHgwZGY0MDAwMSwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U3LAotMHhjZTgxYTJiYiwKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNSwKLTB4ODAwMDAwMDEsCi0weGNmYzFhMmQyLAotMHgwZGY0MDAwMiwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U4LAotMHhjZTgxYTJiZiwKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNiwKLTB4ODAwMDAwMDEsCi0weGNmYzFhMmQzLAotMHhjODJjMDNlOSwKLTB4Y2U4MWEyYzMsCi0weGMwMzAwMDA2LAotMHg3ZWYzNDAyOCwKLTB4YzAzMDAwMjAsCi0weDdmNmI4MDIwLAotMHg3ZmIzYzAyOSwKLTB4Y2Y4MWEyYzcsCi0weDgwMDAwMDAxLAotMHhjZmMxYTJkNCwKLTB4ODAwMDAwMDEsCi0weGNjNDAwMDQyLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDI5MTQwMDFkLAotMHgzMTU0MDAwMSwKLTB4OTk0MDAwMGMsCi0weDMxMTgxMDAwLAotMHhjODFjMDAxMSwKLTB4OTVjMDAwMDAsCi0weGM4MWMwMDExLAotMHhjY2MxMjEwMCwKLTB4Y2QwMTIxMDEsCi0weGNjYzEyMTAyLAotMHhjZDAxMjEwMywKLTB4MDQxODAwMDQsCi0weDgwMDAwMzdjLAotMHhjZDgxYTJhNCwKLTB4YzAyYTAwMDQsCi0weDk1ODAwMDA4LAotMHgzNmE4MjFhMywKLTB4Y2MyOTAwMDAsCi0weGM4MjgwMDA0LAotMHhjODFjMDAxMSwKLTB4MGRlNDAwNDAsCi0weDk2NDBmZmZmLAotMHhjODFjMDAxMSwKLTB4Y2NjMTIxNzAsCi0weGNkMDEyMTcxLAotMHhjODIwMDAxMiwKLTB4OTYwMDAwMDAsCi0weGM4MjAwMDEyLAotMHg4MDAwMDM3YywKLTB4Y2MwMDAwNjQsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHg0MGQ0MDAwMywKLTB4Y2Q0MTIyNWMsCi0weGNkMDFhMWZjLAotMHhjMDFhMDAwMSwKLTB4MDQxY2ExZmQsCi0weDdkZDljMDBjLAotMHg3YzQyMDAwMCwKLTB4MDhjYzAwMDEsCi0weDA2MjQwMDAxLAotMHgwNjI4MDAwMiwKLTB4Y2UxZDAwMDAsCi0weGNlNWQwMDAwLAotMHg5OGMwZmZmYSwKLTB4Y2U5ZDAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDdjNDBjMDAwLAotMHgzMGQwMDAwMSwKLTB4MjhjYzAwMDEsCi0weDdjNDE0MDAwLAotMHg5NTAwMDAwNiwKLTB4N2M0MTgwMDAsCi0weGNkNDEyMTZkLAotMHhjZDgxMjE2ZSwKLTB4ODAwMDAwZjIsCi0weGM4MWMwMDAzLAotMHhjMDIyMDAwNCwKLTB4N2UxNjAwMGMsCi0weGNjMjEwMDAwLAotMHhjODFjMDAwNCwKLTB4N2M0MjQwMDAsCi0weDk4YzAwMDA0LAotMHg3YzQyODAwMCwKLTB4ODAwMDAwMDEsCi0weGNkZTUwMDAwLAotMHhjZTQxMjE2OSwKLTB4Y2U4MTIxNmEsCi0weGNkYzEyMTZiLAotMHg4MDAwMDAwMSwKLTB4Y2MwMTIxNmMsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHg3YzQxYzAwMCwKLTB4MjhhNDAwMDgsCi0weDMyNjQwMGZmLAotMHgwZTY4MDAzYywKLTB4OTY4MDAwMGEsCi0weDdjMDIwMDAwLAotMHg3YzQyMDAwMCwKLTB4MWUzMDAwMDMsCi0weGNjMDAwMDZhLAotMHg5YjAwMDAwMywKLTB4NDIyMDAwMDUsCi0weDA0MjAwMDQwLAotMHg4MDAwMDEwZiwKLTB4N2MwMjQwMDAsCi0weDdlMDI0MDAwLAotMHg5YTQwMDAwMCwKLTB4MGE2NDAwMDEsCi0weDMwZWMwMDEwLAotMHg5YWMwMDAwYSwKLTB4Y2MwMDAwNjIsCi0weGMwMmEwMDA0LAotMHhjODJjMDAyMSwKLTB4N2U5MjgwMGMsCi0weGNjMDAwMDQxLAotMHhjYzI5MDAwMCwKLTB4Y2VjMDAwMjEsCi0weDgwMDAwMTFmLAotMHhjODMwMDAwNCwKLTB4Y2QwMTIxNmQsCi0weGNkNDEyMTZlLAotMHhjODMwMDAwMywKLTB4N2YxZjAwMGIsCi0weDMwZjQwMDA3LAotMHgyNzc4MDAwMSwKLTB4OTc0MDAwMmEsCi0weDA3YjgwMTI0LAotMHg5ZjgwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDgwMDAwMTM0LAotMHg3ZjFiODAwNCwKLTB4ODAwMDAxMzgsCi0weDdmMWI4MDA1LAotMHg4MDAwMDEzYywKLTB4N2YxYjgwMDIsCi0weDgwMDAwMTQwLAotMHg3ZjFiODAwMywKLTB4ODAwMDAxNDQsCi0weDdmMWI4MDA3LAotMHg4MDAwMDE0OCwKLTB4N2YxYjgwMDYsCi0weDgwMDAwMTRkLAotMHgyOGE0MDAwOCwKLTB4OWI4MDAwMTksCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZCwKLTB4MzI2NDAwZmYsCi0weDliODAwMDE1LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWQsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAxMSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVkLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMGQsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZCwKLTB4MzI2NDAwZmYsCi0weDliODAwMDA5LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWQsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAwNSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVkLAotMHgzMjY0MDBmZiwKLTB4MjhhNDAwMDgsCi0weDMyNjQwMGZmLAotMHgwZTY4MDAzYywKLTB4OWE4MGZlYjIsCi0weDI4ZWMwMDA4LAotMHg3YzQzNDAwMCwKLTB4N2M0MzgwMDAsCi0weDdjNDNjMDAwLAotMHg5NmMwMDAwNywKLTB4Y2MwMDAwNjIsCi0weGNmNDEyMTY5LAotMHhjZjgxMjE2YSwKLTB4Y2ZjMTIxNmIsCi0weDgwMDAwMDAxLAotMHhjYzAxMjE2YywKLTB4ODAwMDAwMDEsCi0weGNmZjUwMDAwLAotMHhjYzAwMDA2YiwKLTB4ODQwMDAzN2YsCi0weDBlNjgwMDNjLAotMHg5YTgwMDAwNCwKLTB4YzgyODAwMTUsCi0weDgwMDAwMDAxLAotMHhkMDQwMDA3ZiwKLTB4OTY4MGZmYWIsCi0weDdlMDI0MDAwLAotMHg4NDAwMDIzOSwKLTB4YzAwZTAwMDIsCi0weGNjMDAwMDQxLAotMHg4MDAwMDIzNywKLTB4Y2NjMTMwNGEsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4YzAxZTAwMDEsCi0weDI5MjQwMDEyLAotMHhjMDIyMDAwMiwKLTB4OTY0MDAwMDUsCi0weGMwMjYwMDA0LAotMHhjMDI3ZmZmYiwKLTB4N2QyNTAwMGIsCi0weGMwMjYwMDAwLAotMHg3ZGQyODAwYiwKLTB4N2UxMmMwMGIsCi0weDdkMjUwMDBjLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzEyMTY5LAotMHg5YTgwMDAwYSwKLTB4Y2QwMTIxNmEsCi0weGNkNDEyMTZiLAotMHg5NmMwZmU4MywKLTB4Y2Q4MTIxNmMsCi0weGM4MzAwMDE4LAotMHg5NzAwMDAwMCwKLTB4YzgzMDAwMTgsCi0weDgwMDAwMDAxLAotMHhjYzAwMDAxOCwKLTB4ODQwMDAzN2YsCi0weGNjMDAwMDdmLAotMHhjODE0MDAxMywKLTB4YzgxODAwMTQsCi0weGNkNDEyMTZiLAotMHg5NmMwZmU3NywKLTB4Y2Q4MTIxNmMsCi0weDgwMDAwMTgxLAotMHhjODMwMDAxOCwKLTB4YzgwYzAwMDgsCi0weDk4YzAwMDAwLAotMHhjODBjMDAwOCwKLTB4N2M0MTAwMDAsCi0weDk1MDAwMDAyLAotMHgwMDAwMDAwMCwKLTB4N2M0MTQwMDAsCi0weGM4MjAwMDA5LAotMHhjYzQwMDA0MywKLTB4Y2UwMWExZjQsCi0weGNjNDAwMDQ0LAotMHhjMDBlODAwMCwKLTB4N2M0MjQwMDAsCi0weDdjNDI4MDAwLAotMHgyYWFjMDAxZiwKLTB4OTZjMGZlNjQsCi0weGMwMzVmMDAwLAotMHhjZTQwMDNlMiwKLTB4MzI3ODAwMDMsCi0weDI2N2MwMDA4LAotMHg3ZmY3YzAwYiwKLTB4N2ZmYmMwMGMsCi0weDJhNzgwMDE4LAotMHhjZmMwMDNlMywKLTB4Y2Y4MDAzZTQsCi0weDI2YjAwMDAyLAotMHg3ZjNmMDAwMCwKLTB4Y2YwMDAzZTUsCi0weDgwMDAwMzFkLAotMHg3YzgwYzAwMCwKLTB4N2M0MGMwMDAsCi0weDI4ZDAwMDA4LAotMHgzMTEwMDAwZiwKLTB4OTUwMDAwMGYsCi0weDI1MjgwMDAxLAotMHgwNmE4MDFiMiwKLTB4OWU4MDAwMDAsCi0weDAwMDAwMDAwLAotMHg4MDAwMDFkMywKLTB4YzAxMjA4MDAsCi0weDgwMDAwMWUxLAotMHhjODE0MDAwZiwKLTB4ODAwMDAxZTgsCi0weGM4MTQwMDEwLAotMHg4MDAwMDFlZiwKLTB4Y2NjMWEyYTQsCi0weDgwMDAwMWY4LAotMHhjODE0MDAxMSwKLTB4MzBkMDAwM2YsCi0weDBkMjgwMDE1LAotMHg5YTgwMDAxMiwKLTB4MGQyODAwMWUsCi0weDlhODAwMDFlLAotMHgwZDI4MDAyMCwKLTB4OWE4MDAwMjMsCi0weDBkMjQwMDBmLAotMHgwZDI4MDAxMCwKLTB4N2U2YTgwMGMsCi0weDlhODAwMDI2LAotMHgwZDIwMDAwNCwKLTB4MGQyNDAwMTQsCi0weDBkMjgwMDI4LAotMHg3ZTYyNDAwYywKLTB4N2VhNjgwMGMsCi0weDlhODAwMDJhLAotMHhjODE0MDAxMSwKLTB4ODAwMDAwMDEsCi0weGNjYzFhMmE0LAotMHhjMDEyMDgwMCwKLTB4N2M0MTQwMDAsCi0weDdkMGNjMDBjLAotMHhjMDEyMDAwOCwKLTB4Mjk1ODAwMDMsCi0weDI5NWMwMDBjLAotMHg3YzQyMDAwMCwKLTB4N2RkMWMwMGIsCi0weDI2MjAwMDE0LAotMHg3ZTFlNDAwYywKLTB4N2U0ZTgwMGMsCi0weGNlODFhMmE0LAotMHg4MDAwMDAwMSwKLTB4Y2Q4MWExZmUsCi0weGM4MTQwMDBmLAotMHgwNDEwMjEwZSwKLTB4OTU0MDAwMDAsCi0weGM4MTQwMDBmLAotMHhkMDUxMDAwMCwKLTB4ODAwMDAwMDEsCi0weGNjYzFhMmE0LAotMHhjODE0MDAxMCwKLTB4MDQxMDIxMDgsCi0weDk1NDAwMDAwLAotMHhjODE0MDAxMCwKLTB4ZDA1MTAwMDAsCi0weDgwMDAwMDAxLAotMHhjY2MxYTJhNCwKLTB4Y2NjMWEyYTQsCi0weDA0MTAwMDAxLAotMHhjZDAwMDAxOSwKLTB4ODQwMDAzN2YsCi0weGNjMDAwMDdmLAotMHhjODEwMDAxOSwKLTB4OTkwMDAwMDAsCi0weGM4MTAwMDE5LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weDA0MTAyMTAwLAotMHg5NTQwMDAwMCwKLTB4YzgxNDAwMTEsCi0weGQwNTEwMDAwLAotMHg4MDAwMDM3YywKLTB4Y2NjMWEyYTQsCi0weDdjNDBjMDAwLAotMHhjYzQwMDAwZCwKLTB4OTRjMGZlMDEsCi0weGNjNDAwMDBlLAotMHg3YzQxMDAwMCwKLTB4OTUwMDAwMDUsCi0weDA4Y2MwMDAxLAotMHhjODE0MDAwNSwKLTB4OTk0MDAwMTQsCi0weDAwMDAwMDAwLAotMHg5OGMwZmZmYiwKLTB4N2M0MTAwMDAsCi0weDgwMDAwMDAyLAotMHg3ZDAwODAwMCwKLTB4YzgxNDAwMDUsCi0weDdjNDBjMDAwLAotMHg5OTQwMDAwYywKLTB4YzgxODAwMGMsCi0weDdjNDEwMDAwLAotMHg5NTgwZmRmMCwKLTB4YzgyMDAwMGUsCi0weGM4MWMwMDBkLAotMHg2NjIwMDAyMCwKLTB4N2UxZTAwMmMsCi0weDI1MjQwMDAyLAotMHg3ZTYyNDAyMCwKLTB4ODAwMDAwMDEsCi0weGNjZTYwMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2MwMDAwNmMsCi0weGNjMDAwMDZkLAotMHhjODE4MDAxZiwKLTB4YzgxYzAwMWUsCi0weDY1OTgwMDIwLAotMHg3ZGQ5YzAyYywKLTB4N2NkNGMwMGMsCi0weGNjZGUwMDAwLAotMHg0NWRjMDAwNCwKLTB4YzgyODAwMTcsCi0weDk2ODAwMDBmLAotMHhjMDBlMDAwMSwKLTB4Mjg2ODAwMDgsCi0weDJhYWMwMDE2LAotMHgzMmE4MDBmZiwKLTB4MGViMDAwNDksCi0weDdmMmYwMDBiLAotMHg5NzAwMDAwNiwKLTB4MDAwMDAwMDAsCi0weGM4MTQwMDA1LAotMHg3YzQwYzAwMCwKLTB4ODAwMDAyMjEsCi0weDdjNDEwMDAwLAotMHg4MDAwMDIyNCwKLTB4ZDA0MDAwN2YsCi0weDg0MDAwMjM5LAotMHhjYzAwMDA0MSwKLTB4Y2NjMTMwNGEsCi0weDk0MDAwMDAwLAotMHhjODNjMDAxYSwKLTB4MDQzYzAwMDUsCi0weGNmYzFhMmE0LAotMHhjMDM2MWY5MCwKLTB4YzAzODdmZmYsCi0weDdjMDNjMDEwLAotMHg3ZjdiNDAwYywKLTB4Y2Y0MTIxN2MsCi0weGNmYzEyMTdkLAotMHhjYzAxMjE3ZSwKLTB4YzAzYTAwMDQsCi0weDA0MzQyMTdmLAotMHg3ZjdiNDAwYywKLTB4Y2MzNTAwMDAsCi0weGM4M2MwMDA0LAotMHgyYmZjMDAxZiwKLTB4MDQzODAwMjAsCi0weDk3YzAwMDA1LAotMHhjYzAwMDA2MiwKLTB4OWI4MDAwMDAsCi0weDBiYjgwMDAxLAotMHg4MDAwMDI0NSwKLTB4Y2MwMDAwNzEsCi0weGNjMDFhMWY0LAotMHgwNDM4MDAxNiwKLTB4YzAzNjAwMDIsCi0weGNmODFhMmE0LAotMHg4ODAwMDAwMCwKLTB4Y2Y0MTIwMTAsCi0weDdjNDBjMDAwLAotMHgyOGQwMDAxYywKLTB4OTUwMDAwMDUsCi0weDA0ZDQwMDAxLAotMHhjZDQwMDA2NSwKLTB4ODAwMDAwMDEsCi0weGNkNDAwMDY4LAotMHgwOTU0MDAwMiwKLTB4ODAwMDAwMDEsCi0weGNkNDAwMDY2LAotMHg4NDAwMDI2YSwKLTB4YzgxODAzZWEsCi0weDdjNDBjMDAwLAotMHg5OTgwZmQ5ZiwKLTB4YzgxNDAwMTYsCi0weDA4ZDAwMDAxLAotMHg5OTQwMDAyYiwKLTB4Y2QwMDAwNjgsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDA0M2MwMDA1LAotMHhjZmMxYTJhNCwKLTB4Y2MwMWExZjQsCi0weDg0MDAwMzdmLAotMHhjYzAwMDA0NiwKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHg4NDAwMDI3YywKLTB4YzgxODAzZWEsCi0weDdjNDBjMDAwLAotMHg5OTgwZmQ4ZCwKLTB4YzgxNDAwMTYsCi0weDA4ZDAwMDAxLAotMHg5OTQwMDAxOSwKLTB4Y2QwMDAwNjgsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDA0M2MwMDIyLAotMHhjZmMxYTJhNCwKLTB4ODQwMDAzN2YsCi0weGNjMDAwMDQ3LAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weGM4MTAwMDE2LAotMHg5OTAwMDAwZCwKLTB4Y2M0MDAwNjcsCi0weDgwMDAwMDAyLAotMHg3YzQwODAwMCwKLTB4YzgxODAzZWEsCi0weDk5ODBmZDc5LAotMHg3YzQwYzAwMCwKLTB4OTRjMDAwMDMsCi0weGM4MTAwMDE2LAotMHg5OTAwMDAwNCwKLTB4Y2NjMDAwNjgsCi0weDgwMDAwMDAyLAotMHg3YzQwODAwMCwKLTB4ODQwMDAyMzksCi0weGMwMTQ4MDAwLAotMHhjYzAwMDA0MSwKLTB4Y2Q0MTMwNGEsCi0weGMwMTQ4MDAwLAotMHg5OTAwMDAwMCwKLTB4YzgxMDAwMTYsCi0weDgwMDAwMDAyLAotMHg3YzQwODAwMCwKLTB4YzAxMjAwMDEsCi0weDdjNTE0MDBjLAotMHg4MDAwMDAwMSwKLTB4ZDA1NTAwMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHgyOTFjMDAxZiwKLTB4Y2NjMDAwNGEsCi0weGNkMDAwMDRiLAotMHg5NWMwMDAwMywKLTB4YzAxYzgwMDAsCi0weGNkYzEyMDEwLAotMHhkZDgzMDAwMCwKLTB4MDU1YzIwMDAsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA0YywKLTB4Y2QwMDAwNGQsCi0weGRkODMwMDAwLAotMHgwNTVjYTAwMCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNGUsCi0weGNkMDAwMDRmLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2MwMDAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDUwLAotMHhjZDAwMDA1MSwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmOGUwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1MiwKLTB4Y2QwMDAwNTMsCi0weGRkODMwMDAwLAotMHgwNTVjZjg4MCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTQsCi0weGNkMDAwMDU1LAotMHhkZDgzMDAwMCwKLTB4MDU1Y2UwMDAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDU2LAotMHhjZDAwMDA1NywKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmMDAwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1OCwKLTB4Y2QwMDAwNTksCi0weGRkODMwMDAwLAotMHgwNTVjZjNmYywKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHhkMDQzMjAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2EwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNjMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjhlMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2Y4ODAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNlMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2YzZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGM4MTQwM2UwLAotMHhjYzQzMDAwMCwKLTB4Y2M0MzAwMDAsCi0weGNjNDMwMDAwLAotMHg3ZDQ1YzAwMCwKLTB4Y2RjMzAwMDAsCi0weGQwNDMwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg3YzQwYzAwMCwKLTB4YzgxMDAzZTIsCi0weGM4MTQwM2U1LAotMHhjODE4MDNlMywKLTB4YzgxYzAzZTQsCi0weGNkODEyMTY5LAotMHhjZGMxMjE2YSwKLTB4Y2NjMTIxNmIsCi0weGNjMDEyMTZjLAotMHgwNDIwMDAwNCwKLTB4N2RhMTgwMDAsCi0weDdkOTY0MDAyLAotMHg5NjQwZmNkOSwKLTB4Y2Q4MDAzZTMsCi0weDMxMjgwMDAzLAotMHhjMDJkZjAwMCwKLTB4MjUxODAwMDgsCi0weDdkYWQ4MDBiLAotMHg3ZGE5ODAwYywKLTB4ODAwMDAwMDEsCi0weGNkODAwM2UzLAotMHgzMDhjZmZmZiwKLTB4ZDA0ZDAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGM4MTQwMDIwLAotMHgxNTU4MDAwMiwKLTB4OTU4MGZmZmYsCi0weGM4MTQwMDIwLAotMHhjYzAwMDA2ZSwKLTB4Y2M0MTIxODAsCi0weDdjNDBjMDAwLAotMHhjY2MxMjE4ZCwKLTB4Y2M0MTIxODEsCi0weDI4ZDAwMDFmLAotMHgzNDU4ODAwMCwKLTB4Y2Q4MTIxOGMsCi0weDk1MDBmY2JmLAotMHhjYzQxMjE4MiwKLTB4YzgxNDAwMjAsCi0weDk5NDBmZmZmLAotMHhjODE0MDAyMCwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHg3YzQwYzAwMCwKLTB4MjhkMDAwMTgsCi0weDMxMTAwMDAxLAotMHhjMDE2MDA4MCwKLTB4OTUwMDAwMDMsCi0weGMwMmEwMDA0LAotMHg3Y2Q0YzAwYywKLTB4Y2NjMTIxN2MsCi0weGNjNDEyMTdkLAotMHhjYzQxMjE3ZSwKLTB4N2M0MTgwMDAsCi0weDFkYjAwMDAzLAotMHgzNmEwMjE3ZiwKLTB4OWIwMDAwMDMsCi0weDQxOWMwMDA1LAotMHgwNDFjMDA0MCwKLTB4OTljMDAwMDAsCi0weDA5ZGMwMDAxLAotMHhjYzIxMDAwMCwKLTB4YzgyNDAwMDQsCi0weDJhNmMwMDFmLAotMHg0MTljMDAwNSwKLTB4OWFjMGZmZmEsCi0weGNjODAwMDYyLAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weDdjNDBjMDAwLAotMHgwNGQ0MDNlNiwKLTB4ODAwMDAwMDEsCi0weGNjNTQwMDAwLAotMHg4MDAwMDM3YywKLTB4Y2M0MDAzZWEsCi0weGMwMWM4MDAwLAotMHgwNDRjYTAwMCwKLTB4Y2RjMTIwMTAsCi0weDdjNDEwMDAwLAotMHhjODE0MDAwOSwKLTB4MDQxODAwMDAsCi0weDA0MWMwMDA4LAotMHhjZDgwMDA3MSwKLTB4MDlkYzAwMDEsCi0weDA1OTgwMDAxLAotMHhjZDBkMDAwMCwKLTB4OTljMGZmZmMsCi0weGNjODAwMDYyLAotMHg4MDAwMDM3YywKLTB4Y2Q0MDAwNzEsCi0weGMwMGUwMTAwLAotMHhjYzAwMDA0MSwKLTB4Y2NjMTMwNGEsCi0weGM4M2MwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODAwMDAwMDEsCi0weGNjMDAwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMTAzMzEsCi0weDAwMTAwMDA0LAotMHgwMDE3MDAwNiwKLTB4MDAyMTAwMDgsCi0weDAwMjcwMDI4LAotMHgwMDI4MDAyMywKLTB4MDAyOTAwMjksCi0weDAwMmEwMDI2LAotMHgwMDJiMDAyOSwKLTB4MDAyZDAwMzgsCi0weDAwMmUwMDNmLAotMHgwMDJmMDA0YSwKLTB4MDAzNDAwNGMsCi0weDAwMzYwMDMwLAotMHgwMDM5MDBhZiwKLTB4MDAzYTAwY2YsCi0weDAwM2IwMGU0LAotMHgwMDNjMDBmYywKLTB4MDAzZDAxNmIsCi0weDAwM2YwMGFkLAotMHgwMDQxMDMzNiwKLTB4MDA0MzAzNDksCi0weDAwNDQwMThlLAotMHgwMDQ1MDBmYywKLTB4MDA0NjAxYWMsCi0weDAwNDcwMWFjLAotMHgwMDQ4MDFmZSwKLTB4MDA0OTAyMGMsCi0weDAwNGEwMjU1LAotMHgwMDRiMDI4MiwKLTB4MDA1MjAyNWYsCi0weDAwNTMwMjcxLAotMHgwMDU0MDI4NywKLTB4MDA1NzAyOTksCi0weDAwNjAwMjlkLAotMHgwMDYxMDJhYywKLTB4MDA2MjAyYjYsCi0weDAwNjMwMmMwLAotMHgwMDY0MDJjYSwKLTB4MDA2NTAyZDQsCi0weDAwNjYwMmRlLAotMHgwMDY3MDJlOCwKLTB4MDA2ODAyZjIsCi0weDAwNjkwMmY2LAotMHgwMDZhMDJmYSwKLTB4MDA2YjAyZmUsCi0weDAwNmMwMzAyLAotMHgwMDZkMDMwNiwKLTB4MDA2ZTAzMGEsCi0weDAwNmYwMzBlLAotMHgwMDcwMDMxMiwKLTB4MDA3MjAzNjMsCi0weDAwNzQwMzY5LAotMHgwMDc5MDM2NywKLTB4MDA3YzAzMWMsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjcxMF9wZnBfbWljcm9jb2RlW10gPSB7Ci0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weDgwMDAwMDAwLAotMHhkYzAzMDAwMCwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhjODE4MDAwZSwKLTB4MzE5ODAwMDEsCi0weDdjNDI0MDAwLAotMHg5NTgwMDIzYSwKLTB4N2M0MjgwMDAsCi0weGM4MWMwMDFjLAotMHhjMDM3YzAwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3Y2I0ODAwYiwKLTB4YzAzNjAwMDMsCi0weDk5YzAwMDAwLAotMHhjODFjMDAxYywKLTB4N2NiNDgwMGMsCi0weDI0ZDQwMDAyLAotMHg3ZDY1NDAwMCwKLTB4Y2Q0MDAwNDMsCi0weGNlODAwMDQzLAotMHhjZDAwMDA0MywKLTB4Y2M4MDAwNDAsCi0weGNlNDAwMDQwLAotMHhjZTgwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weGRjM2EwMDAwLAotMHg5NzgwZmZkZSwKLTB4Y2QwMDAwNDAsCi0weDdjNDBjMDAwLAotMHg4MDAwMDAxOCwKLTB4N2M0MTAwMDAsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGM4MTgwMDBlLAotMHg4MDAwMDAwYywKLTB4MzE5ODAwMDIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGM4MTgwMDBlLAotMHgyODhjMDAwOCwKLTB4MzBjYzAwMGYsCi0weDM0MTAwMDAxLAotMHg3ZDBkMDAwOCwKLTB4ODAwMDAwMGMsCi0weDdkOTE4MDBiLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ZDQwMDAzYzAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhjYzQwMDNmOSwKLTB4ODAwMDAyNDksCi0weGNjNDAwM2Y4LAotMHhjMDM3ZmZmZiwKLTB4N2M0MTQwMDAsCi0weGNmNDFhMjllLAotMHhjODIwMDNmOCwKLTB4YzgxYzAzZjksCi0weDY2MjAwMDIwLAotMHhjODE4MDNmYiwKLTB4N2RlMWMwMmMsCi0weDdkNThjMDA4LAotMHg3Y2RjYzAyMCwKLTB4NjkxMDAwMjAsCi0weGMwMzYwMDAzLAotMHhjYzAwMDA1NCwKLTB4N2NiNDgwMGMsCi0weDgwMDAwMDY5LAotMHhjYzgwMDA0MCwKLTB4N2M0MTgwMDAsCi0weGNkODFhMjllLAotMHhjYzgwMDA0MCwKLTB4ODAwMDAwNjcsCi0weGNkODAwMDQwLAotMHhjMDE5ZmZmZiwKLTB4Y2M4MDAwNDAsCi0weGNkODFhMjllLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHhjY2MxYTFmYSwKLTB4Y2QwMWExZjksCi0weGNkNDFhMjlkLAotMHhjY2MwMDA0MCwKLTB4Y2QwMDAwNDAsCi0weGNkNDAwMDQwLAotMHhjYzQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4Y2MwMDAwNTQsCi0weGNjODAwMDQwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHhjY2MxYTFmYSwKLTB4Y2QwMWExZjksCi0weGNkNDFhMjlkLAotMHhjY2MwMDA0MCwKLTB4Y2QwMDAwNDAsCi0weGNkNDAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4N2M0MGMwMDAsCi0weDMwZDAwMDAxLAotMHhjY2MxYTI5ZiwKLTB4OTUwMDAwMDMsCi0weDA0MTQwMDAxLAotMHgwNDE0MDAwMiwKLTB4Y2Q0MDAzZmIsCi0weGNjODAwMDQwLAotMHg4MDAwMDAwMCwKLTB4Y2NjMDAwNDAsCi0weDdjNDBjMDAwLAotMHhjYzgwMDA0MCwKLTB4Y2NjMWEyYTIsCi0weDgwMDAwMDAwLAotMHhjY2MwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDI4ZDQwMDFmLAotMHhjYzgwMDA0MCwKLTB4OTU0MDAwMDMsCi0weDdjNDEwMDAwLAotMHhjY2MwMDA1NywKLTB4MjkxODAwMWYsCi0weGNjYzAwMDQwLAotMHg5NTgwMDAwMywKLTB4Y2QwMDAwNDAsCi0weGNkMDAwMDU4LAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwN2YsCi0weGM4MjAwMDE3LAotMHhjODMwMDAyMiwKLTB4OWEwMDAwMDYsCi0weDBlMjgwMDAxLAotMHhjODI0MDAxZSwKLTB4MGE2NDAwMDEsCi0weGQ0MDAxMjQwLAotMHhjZTQwMDA0MCwKLTB4YzAzNmMwMDAsCi0weDk2ODAwMDA3LAotMHgzNzc0NzkwMCwKLTB4MDQxYzAwMDEsCi0weGNmNDAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2YwMDAzZmEsCi0weDdjMDMwMDAwLAotMHhjYTBjMDAxMCwKLTB4N2M0MTAwMDAsCi0weDk0YzAwMDA0LAotMHg3YzQxNDAwMCwKLTB4ZDQyMDAyYzQsCi0weGNkZTAwMDQ0LAotMHg5YjAwMDAwYiwKLTB4N2M0MTgwMDAsCi0weGNjMDAwMDRiLAotMHhjZGEwMDA0OSwKLTB4Y2QyMDAwNDEsCi0weGNkNjAwMDQxLAotMHhjZGEwMDA0MSwKLTB4MDYyMDAwMDEsCi0weGNlMDAwMDU2LAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwN2YsCi0weGM4MjgwMDIwLAotMHhjODJjMDAyMSwKLTB4Y2MwMDAwNjMsCi0weDdlZWE0MDAxLAotMHg2NTc0MDAyMCwKLTB4N2Y1MzQwMmMsCi0weDI2OWMwMDAyLAotMHg3ZGY1YzAyMCwKLTB4NjlmODAwMjAsCi0weGNlODAwMDRiLAotMHhjZTYwMDA0OSwKLTB4Y2RlMDAwNDEsCi0weGNmYTAwMDQxLAotMHhjZTYwMDA0MSwKLTB4MjcxYzAwMDIsCi0weDdkZjVjMDIwLAotMHg2OWY4MDAyMCwKLTB4N2RiMjQwMDEsCi0weGNmMDAwMDRiLAotMHhjZTYwMDA0OSwKLTB4Y2RlMDAwNDEsCi0weGNmYTAwMDQxLAotMHg4MDAwMDBiYywKLTB4Y2U2MDAwNDEsCi0weGM4MjAwMDE3LAotMHhjODMwMDAyMiwKLTB4OWEwMDAwMDYsCi0weDBlMjgwMDAxLAotMHhjODI0MDAxZSwKLTB4MGE2NDAwMDEsCi0weGQ0MDAxMjQwLAotMHhjZTQwMDA0MCwKLTB4Y2EwYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5NGMwMDAwYiwKLTB4YzAzNmMwMDAsCi0weDk2ODAwMDA3LAotMHgzNzc0NzkwMCwKLTB4MDQxYzAwMDEsCi0weGNmNDAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2YwMDAzZmEsCi0weDdjMDMwMDAwLAotMHg4MDAwMDBiNSwKLTB4N2M0MTQwMDAsCi0weGNjMDAwMDQ4LAotMHg4MDAwMDBlZSwKLTB4MDAwMDAwMDAsCi0weGM4MjAwMDE3LAotMHhjODFjMDAyMywKLTB4MGUyNDAwMDIsCi0weDk5YzAwMDE1LAotMHg3YzQxODAwMCwKLTB4MGEyMDAwMDEsCi0weGNlMDAwMDU2LAotMHhkNDAwMDQ0MCwKLTB4Y2MwMDAwNDAsCi0weGMwMzZjMDAwLAotMHhjYTE0MDAxMywKLTB4OTY0MDAwMDcsCi0weDM3NzQ3OTAwLAotMHhjZjQwMDA0MCwKLTB4Y2MwMDAwNDAsCi0weGM4MzAwM2ZhLAotMHg4MDAwMDEwMywKLTB4Y2YwMDAwMjIsCi0weGNjMDAwMDIyLAotMHg5NTQwMDE0NiwKLTB4Y2MwMDAwN2YsCi0weGNjYTAwMDQ2LAotMHg4MDAwMDAwMCwKLTB4Y2MyMDAwNDYsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA2NCwKLTB4YzgyMDAwMTcsCi0weGM4MTAwMDFmLAotMHg5NjAwMDAwNSwKLTB4MDkxMDAwMDEsCi0weGQ0MDAwNDQwLAotMHhjZDAwMDA0MCwKLTB4Y2QwMDAwMjIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4YzgwYzAwMjUsCi0weDk0YzBmZWVjLAotMHhjODEwMDAwOCwKLTB4Y2QwMDAwNDAsCi0weGQ0MDAwZmMwLAotMHg4MDAwMDAwMCwKLTB4ZDQwMDBmYTIsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2NjMDAzZmQsCi0weGNkMDAwM2ZjLAotMHhjY2MwMDA0MiwKLTB4Y2QwMDAwNDIsCi0weDI5MTQwMDFmLAotMHgyOTE4MDAxMCwKLTB4MzE5ODAwMDcsCi0weDNiNWMwMDAxLAotMHg3ZDc2MDAwYiwKLTB4OTk4MDAwMDUsCi0weDdkNWU0MDBiLAotMHhjYzAwMDA0MiwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDRkLAotMHgyOTk4MDAwMSwKLTB4MjkyYzAwMDgsCi0weDk5ODAwMDNkLAotMHgzMmVjMDAwMSwKLTB4OTYwMDAwMDQsCi0weDI5MzAwMDBjLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNDIsCi0weDA0MTQwMDEwLAotMHhjZDQwMDA0MiwKLTB4MzMzMDAwMDEsCi0weDM0MjgwMDAxLAotMHg4NDAwMDE1ZCwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDFiLAotMHgwNDM4MDAwYywKLTB4ODQwMDAxNWQsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxNywKLTB4MDQzODAwMDgsCi0weDg0MDAwMTVkLAotMHhjODE0MDAwMywKLTB4OWI0MDAwMTMsCi0weDA0MzgwMDA0LAotMHg4NDAwMDE1ZCwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDE1LAotMHhjODBjMDNmZCwKLTB4OWE4MDAwMDksCi0weGM4MTAwM2ZjLAotMHg5YjAwMDEwMSwKLTB4Y2MwMDAwNGQsCi0weDA0MTQwMDEwLAotMHhjY2MwMDA0MiwKLTB4Y2QwMDAwNDIsCi0weDgwMDAwMTM1LAotMHhjZDQwMDA0MiwKLTB4OTZjMDAwZmEsCi0weGNjMDAwMDRkLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNGUsCi0weDlhYzAwMDAzLAotMHhjYzAwMDA0ZCwKLTB4Y2MwMDAwNGUsCi0weGRmODMwMDAwLAotMHg4MDAwMDAwMCwKLTB4ZDgwMzAxZmYsCi0weDlhYzAwMGYwLAotMHhjYzAwMDA0ZCwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDRlLAotMHhjODE4MDAwMywKLTB4YzgxYzAwMDMsCi0weGM4MjAwMDAzLAotMHg3ZDVkNDAwMywKLTB4N2RhMWMwMDMsCi0weDdkNWQ0MDBjLAotMHgyYTEwMDAxZiwKLTB4Mjk5YzAwMWYsCi0weDdkMWQwMDBiLAotMHg3ZDE3NDAwYiwKLTB4ODgwMDAwMDAsCi0weDdlOTI4MDBiLAotMHg5NjQwMDAwNCwKLTB4Y2MwMDAwNGUsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA0MiwKLTB4MDQzODAwMDgsCi0weGNmODAwMDQyLAotMHhjODA4MDAwMywKLTB4YzgwYzAwMDMsCi0weGM4MTAwMDAzLAotMHhjODE0MDAwMywKLTB4YzgxODAwMDMsCi0weGM4MWMwMDAzLAotMHhjODI0MDAwMywKLTB4YzgyODAwMDMsCi0weDI5ZmMwMDFmLAotMHgyYWIwMDAxZiwKLTB4N2ZmM2MwMGIsCi0weDI4ZjAwMDFmLAotMHg3ZmYzYzAwYiwKLTB4Mjk3MDAwMWYsCi0weDdmZjNjMDBiLAotMHg3ZDg4ODAwMSwKLTB4N2RjY2MwMDEsCi0weDdlNTEwMDAxLAotMHg3ZTk1NDAwMSwKLTB4N2M5MDgwMDIsCi0weDdjZDRjMDAyLAotMHg3Y2JjODAwYiwKLTB4OWFjMDAwMDMsCi0weDdjOGY0MDBiLAotMHgzOGI0MDAwMSwKLTB4OWI0MDAwYzEsCi0weGNjMDAwMDRkLAotMHg5YmMwMDBiZiwKLTB4Y2MwMDAwNGUsCi0weGM4MGMwM2ZkLAotMHhjODEwMDNmYywKLTB4Y2NjMDAwNDIsCi0weDgwMDAwMTZlLAotMHhjZDAwMDA0MiwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGNjNDAwMDQwLAotMHhjYzQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weDdjNDBjMDAwLAotMHhjY2MwMDA0MCwKLTB4Y2NjMDAwMGQsCi0weDgwMDAwMDAwLAotMHhkMDQwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg2NTE0MDAyMCwKLTB4N2Q0ZDQwMmMsCi0weDI0NTgwMDAyLAotMHg3ZDU5ODAyMCwKLTB4N2M0MWMwMDAsCi0weGNkODAwMDQyLAotMHg2OTk4MDAyMCwKLTB4Y2Q4MDAwNDIsCi0weGNkYzAwMDQyLAotMHhjMDIzYzAwMCwKLTB4MDVlNDAwMDIsCi0weDdjYTA4MDBiLAotMHgyNjY0MDAxMCwKLTB4N2NhNDgwMGMsCi0weGNjODAwMDQwLAotMHhjZGMwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weDk1YzAwMDBlLAotMHhjZDAwMDA0MCwKLTB4MDlkYzAwMDEsCi0weGM4MjgwMDAzLAotMHg5NjgwMDAwOCwKLTB4Y2U4MDAwNDAsCi0weGM4MzQwMDFkLAotMHg5NzQwMDAwMCwKLTB4YzgzNDAwMWQsCi0weDI2YTgwMDA4LAotMHg4NDAwMDI0YywKLTB4Y2MyYjAwMDAsCi0weDk5YzBmZmY3LAotMHgwOWRjMDAwMSwKLTB4ZGMzYTAwMDAsCi0weDk3ODAwMDA0LAotMHg3YzQxODAwMCwKLTB4ODAwMDAxYTIsCi0weDI1OTgwMDAyLAotMHhhMDAwMDAwMCwKLTB4N2Q4MDgwMDAsCi0weGM4MTgwMDFkLAotMHg3YzQwYzAwMCwKLTB4NjRkMDAwMDgsCi0weDk1ODAwMDAwLAotMHhjODE4MDAxZCwKLTB4Y2MxMzAwMDAsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGNjNDAwMDQwLAotMHhjODEwMDAxZiwKLTB4N2M0MGMwMDAsCi0weGNjODAwMDQwLAotMHg3Y2QxNDAwYywKLTB4Y2Q0MDAwNDAsCi0weDA1MTgwMDAxLAotMHg4MDAwMDAwMCwKLTB4Y2Q4MDAwMjIsCi0weDdjNDBjMDAwLAotMHg2NDUwMDAyMCwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYxLAotMHg3Y2QwYzAyYywKLTB4YzgyMDAwMTcsCi0weGM4ZDYwMDAwLAotMHg5OTQwMDAwOCwKLTB4N2M0MzgwMDAsCi0weGRmODMwMDAwLAotMHhjZmEwMDA0ZiwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA2MiwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYxLAotMHhjODIwMDAxNywKLTB4N2M0MGMwMDAsCi0weGMwMzZmZjAwLAotMHhjODEwMDAwZCwKLTB4YzAzMDNmZmYsCi0weDdjZjU0MDBiLAotMHg3ZDUxODAwYiwKLTB4N2Q4MTgwMGYsCi0weDk5ODAwMDA4LAotMHg3Y2YzODAwYiwKLTB4ZGY4MzAwMDAsCi0weGNmYTAwMDRmLAotMHg4NDAwMDI0YywKLTB4Y2MwMDAwNjIsCi0weDgwMDAwMDAwLAotMHhkMDQwMDA3ZiwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDYyLAotMHg4NDAwMDI0YywKLTB4N2M0MGMwMDAsCi0weDI4ZGMwMDA4LAotMHg5NWMwMDAxOSwKLTB4MzBkYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5OWMwMDAwNCwKLTB4NjQ1NDAwMjAsCi0weDgwMDAwMjA4LAotMHhjOTFkMDAwMCwKLTB4N2QxNTAwMmMsCi0weGM5MWUwMDAwLAotMHg3YzQyMDAwMCwKLTB4N2M0MjQwMDAsCi0weDdjNDE4MDAwLAotMHg3ZGU1YzAwYiwKLTB4N2RlMjgwMDcsCi0weDlhODAwMDBlLAotMHg0MWFjMDAwNSwKLTB4OWFjMDAwMDAsCi0weDBhZWMwMDAxLAotMHgzMGRjMDAxMCwKLTB4OTljMDAwMDQsCi0weDAwMDAwMDAwLAotMHg4MDAwMDIwYiwKLTB4YzkxZDAwMDAsCi0weDgwMDAwMjBiLAotMHhjOTFlMDAwMCwKLTB4Y2M4MDAwNDAsCi0weGNjYzAwMDQwLAotMHhkMDQwMDA0MCwKLTB4YzgwYzAwMjUsCi0weDk0YzBmZGU0LAotMHhjODEwMDAwOCwKLTB4Y2QwMDAwNDAsCi0weGQ0MDAwZmMwLAotMHg4MDAwMDAwMCwKLTB4ZDQwMDBmYTIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ZDQwMDAzYzAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHg3YzQwYzAwMCwKLTB4MzBkMDAwMDYsCi0weDBkMTAwMDA2LAotMHg5OTAwMDAwNywKLTB4YzgxNDAwMTUsCi0weDk5NDAwMDA1LAotMHhjYzAwMDA1MiwKLTB4ZDQwMDAzNDAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGNjYzAwMDQwLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwNDAsCi0weDdjNDBjMDAwLAotMHhjYzRkMDAwMCwKLTB4ZGMzYTAwMDAsCi0weDk3ODBmZGJkLAotMHgwNGNjMDAwMSwKLTB4ODAwMDAyNDIsCi0weGNjNGQwMDAwLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weGNjMDAwMDdmLAotMHg4MDAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weGNjMDAwMDdmLAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDMwMjIyLAotMHgwMDA0MDIyYSwKLTB4MDAwNTAwOWYsCi0weDAwMDIwMDAzLAotMHgwMDA2MDAzYywKLTB4MDAwNzAwMjcsCi0weDAwMDgwMTkxLAotMHgwMDA5MDA0NCwKLTB4MDAwYTAwMmQsCi0weDAwMTAwMjQ3LAotMHgwMDE3MDBmMCwKLTB4MDAyMjAxZDcsCi0weDAwMjMwMWU4LAotMHgwMDI2MDA0YywKLTB4MDAyNzAwNWYsCi0weDAwMjAwMTFhLAotMHgwMDI4MDA5MiwKLTB4MDAyOTAwNGYsCi0weDAwMmEwMDgzLAotMHgwMDJiMDA2NCwKLTB4MDAyZjAwOGQsCi0weDAwMzIwMGQ4LAotMHgwMDM0MDIzMiwKLTB4MDAzNjAwNzQsCi0weDAwMzkwMTBhLAotMHgwMDNjMDFmYywKLTB4MDAzZjAwOWYsCi0weDAwNDEwMDA1LAotMHgwMDQ0MDE5NCwKLTB4MDA0ODAxOWQsCi0weDAwNDkwMWM1LAotMHgwMDRhMDFjZiwKLTB4MDA1NTAyMjUsCi0weDAwNTYwMjJkLAotMHgwMDYwMDAwYSwKLTB4MDA2MTAwMmEsCi0weDAwNjIwMDMwLAotMHgwMDYzMDAzMCwKLTB4MDA2NDAwMzAsCi0weDAwNjUwMDMwLAotMHgwMDY2MDAzMCwKLTB4MDA2NzAwMzAsCi0weDAwNjgwMDM3LAotMHgwMDY5MDAzZiwKLTB4MDA2YTAwNDcsCi0weDAwNmIwMDQ3LAotMHgwMDZjMDA0NywKLTB4MDA2ZDAwNDcsCi0weDAwNmUwMDQ3LAotMHgwMDZmMDA0NywKLTB4MDA3MDAwNDcsCi0weDAwNzMwMjQ3LAotMHgwMDdiMDI0MCwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY3MTBfY3BfbWljcm9jb2RlW10gPSB7Ci0weGNjMDAwM2VhLAotMHgwNDA4MDAwMywKLTB4Y2M4MDAwNDMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDgwMDAwMDAzLAotMHhkMDQwMDA3ZiwKLTB4ODAwMDAwMDMsCi0weGNjNDAwMDQxLAotMHg3YzQwYzAwMCwKLTB4YzAxNjAwMDQsCi0weDMwZDAzZmZmLAotMHg3ZDE1MDAwYywKLTB4Y2MxMTAwMDAsCi0weDI4ZDgwMDFlLAotMHgzMTk4MDAwMSwKLTB4MjhkYzAwMWYsCi0weGM4MjAwMDA0LAotMHg5NWMwMDAwNiwKLTB4N2M0MjQwMDAsCi0weGNjMDAwMDYyLAotMHg3ZTU2ODAwYywKLTB4Y2MyOTAwMDAsCi0weGM4MjQwMDA0LAotMHg3ZTI2MDAwYiwKLTB4OTU4MDAwMDYsCi0weDdjNDJjMDAwLAotMHhjYzAwMDA2MiwKLTB4N2VkNzAwMGMsCi0weGNjMzEwMDAwLAotMHhjODJjMDAwNCwKLTB4N2UyZTAwMGMsCi0weGNjMDAwMDYyLAotMHgzMTEwM2ZmZiwKLTB4ODAwMDAwMDMsCi0weGNlMTEwMDAwLAotMHg3YzQwYzAwMCwKLTB4ODAwMDAwMDMsCi0weGNjNDAwMDQwLAotMHg4MDAwMDAwMywKLTB4Y2M0MTIyNTcsCi0weDdjNDE4MDAwLAotMHhjYzQwMDA0NSwKLTB4Y2M0MDAwNDgsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4Y2M0MDAwNDUsCi0weGNjNDAwMDQ4LAotMHg3YzQwYzAwMCwKLTB4Y2M0MTIyNWMsCi0weGNjNDFhMWZjLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhjYzAwMDA0NSwKLTB4Y2MwMDAwNDgsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4MDQwY2ExZmQsCi0weGMwMTIwMDAxLAotMHhjYzAwMDA0NSwKLTB4Y2MwMDAwNDgsCi0weDdjZDBjMDBjLAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weGQwNGQwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg4MDAwMDAwMywKLTB4Y2M0MTIyNWQsCi0weDdjNDA4MDAwLAotMHg3YzQwYzAwMCwKLTB4YzAyYTAwMDIsCi0weDdjNDEwMDAwLAotMHg3ZDI5MDAwYywKLTB4MzA5NDAwMDEsCi0weDMwOTgwMDA2LAotMHgzMDljMDMwMCwKLTB4MjlkYzAwMDgsCi0weDdjNDIwMDAwLAotMHg3YzQyNDAwMCwKLTB4OTU0MDAwMGYsCi0weGMwMmUwMDA0LAotMHgwNWYwMjI1OCwKLTB4N2YyZjAwMGMsCi0weGNjMzEwMDAwLAotMHhjODI4MDAwNCwKLTB4Y2NjMTIxNjksCi0weGNkMDEyMTZhLAotMHhjZTgxMjE2YiwKLTB4MGRiNDAwMDIsCi0weGNjMDEyMTZjLAotMHg5NzQwMDAwZSwKLTB4MGRiNDAwMDAsCi0weDgwMDAwMDdkLAotMHhjODM0MDAwYSwKLTB4MGRiNDAwMDIsCi0weDk3NDAwMDA5LAotMHgwZGI0MDAwMCwKLTB4YzAyZTAwMDQsCi0weDA1ZjAyMjU4LAotMHg3ZjJmMDAwYywKLTB4Y2MzMTAwMDAsCi0weGM4MjgwMDA0LAotMHg4MDAwMDA3ZCwKLTB4YzgzNDAwMGEsCi0weDk3NDAwMDA0LAotMHg3ZTAyODAwMCwKLTB4ODAwMDAwN2QsCi0weGM4MzQwMDBhLAotMHgwZGI0MDAwNCwKLTB4OTc0MGZmOGMsCi0weDAwMDAwMDAwLAotMHhjZTAxMjE2ZCwKLTB4Y2U0MTIxNmUsCi0weGM4MjgwMDAzLAotMHhjODM0MDAwYSwKLTB4OWI0MDAwMDQsCi0weDA0M2MwMDA1LAotMHg4NDAwMDI2ZCwKLTB4Y2MwMDAwNjIsCi0weDBkZjQwMDAwLAotMHg5NzQwMDAwYiwKLTB4YzgyYzAzZTYsCi0weGNlODFhMmI3LAotMHhjMDMwMDAwNiwKLTB4N2VmMzQwMjgsCi0weGMwMzAwMDIwLAotMHg3ZjZiODAyMCwKLTB4N2ZiM2MwMjksCi0weGNmODFhMmM0LAotMHg4MDAwMDAwMywKLTB4Y2ZjMWEyZDEsCi0weDBkZjQwMDAxLAotMHg5NzQwMDAwYiwKLTB4YzgyYzAzZTcsCi0weGNlODFhMmJiLAotMHhjMDMwMDAwNiwKLTB4N2VmMzQwMjgsCi0weGMwMzAwMDIwLAotMHg3ZjZiODAyMCwKLTB4N2ZiM2MwMjksCi0weGNmODFhMmM1LAotMHg4MDAwMDAwMywKLTB4Y2ZjMWEyZDIsCi0weDBkZjQwMDAyLAotMHg5NzQwMDAwYiwKLTB4YzgyYzAzZTgsCi0weGNlODFhMmJmLAotMHhjMDMwMDAwNiwKLTB4N2VmMzQwMjgsCi0weGMwMzAwMDIwLAotMHg3ZjZiODAyMCwKLTB4N2ZiM2MwMjksCi0weGNmODFhMmM2LAotMHg4MDAwMDAwMywKLTB4Y2ZjMWEyZDMsCi0weGM4MmMwM2U5LAotMHhjZTgxYTJjMywKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNywKLTB4ODAwMDAwMDMsCi0weGNmYzFhMmQ0LAotMHg4MDAwMDAwMywKLTB4Y2M0MDAwNDIsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4MjkxNDAwMWQsCi0weDMxNTQwMDAxLAotMHg5OTQwMDAwYywKLTB4MzExODEwMDAsCi0weGM4MWMwMDExLAotMHg5NWMwMDAwMCwKLTB4YzgxYzAwMTEsCi0weGNjYzEyMTAwLAotMHhjZDAxMjEwMSwKLTB4Y2NjMTIxMDIsCi0weGNkMDEyMTAzLAotMHgwNDE4MDAwNCwKLTB4ODAwMDAzN2UsCi0weGNkODFhMmE0LAotMHhjMDJhMDAwNCwKLTB4OTU4MDAwMDgsCi0weDM2YTgyMWEzLAotMHhjYzI5MDAwMCwKLTB4YzgyODAwMDQsCi0weGM4MWMwMDExLAotMHgwZGU0MDA0MCwKLTB4OTY0MGZmZmYsCi0weGM4MWMwMDExLAotMHhjY2MxMjE3MCwKLTB4Y2QwMTIxNzEsCi0weGM4MjAwMDEyLAotMHg5NjAwMDAwMCwKLTB4YzgyMDAwMTIsCi0weDgwMDAwMzdlLAotMHhjYzAwMDA2NCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHhjYzAwMDA0NSwKLTB4Y2MwMDAwNDgsCi0weDQwZDQwMDAzLAotMHhjZDQxMjI1YywKLTB4Y2QwMWExZmMsCi0weGMwMWEwMDAxLAotMHgwNDFjYTFmZCwKLTB4N2RkOWMwMGMsCi0weDdjNDIwMDAwLAotMHgwOGNjMDAwMSwKLTB4MDYyNDAwMDEsCi0weDA2MjgwMDAyLAotMHhjZTFkMDAwMCwKLTB4Y2U1ZDAwMDAsCi0weDk4YzBmZmZhLAotMHhjZTlkMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4N2M0MGMwMDAsCi0weDMwZDAwMDAxLAotMHgyOGNjMDAwMSwKLTB4N2M0MTQwMDAsCi0weDk1MDAwMDA2LAotMHg3YzQxODAwMCwKLTB4Y2Q0MTIxNmQsCi0weGNkODEyMTZlLAotMHg4MDAwMDBmNCwKLTB4YzgxYzAwMDMsCi0weGMwMjIwMDA0LAotMHg3ZTE2MDAwYywKLTB4Y2MyMTAwMDAsCi0weGM4MWMwMDA0LAotMHg3YzQyNDAwMCwKLTB4OThjMDAwMDQsCi0weDdjNDI4MDAwLAotMHg4MDAwMDAwMywKLTB4Y2RlNTAwMDAsCi0weGNlNDEyMTY5LAotMHhjZTgxMjE2YSwKLTB4Y2RjMTIxNmIsCi0weDgwMDAwMDAzLAotMHhjYzAxMjE2YywKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weDdjNDFjMDAwLAotMHgyOGE0MDAwOCwKLTB4MzI2NDAwZmYsCi0weDBlNjgwMDNjLAotMHg5NjgwMDAwYSwKLTB4N2MwMjAwMDAsCi0weDdjNDIwMDAwLAotMHgxZTMwMDAwMywKLTB4Y2MwMDAwNmEsCi0weDliMDAwMDAzLAotMHg0MjIwMDAwNSwKLTB4MDQyMDAwNDAsCi0weDgwMDAwMTExLAotMHg3YzAyNDAwMCwKLTB4N2UwMjQwMDAsCi0weDlhNDAwMDAwLAotMHgwYTY0MDAwMSwKLTB4MzBlYzAwMTAsCi0weDlhYzAwMDBhLAotMHhjYzAwMDA2MiwKLTB4YzAyYTAwMDQsCi0weGM4MmMwMDIxLAotMHg3ZTkyODAwYywKLTB4Y2MwMDAwNDEsCi0weGNjMjkwMDAwLAotMHhjZWMwMDAyMSwKLTB4ODAwMDAxMjEsCi0weGM4MzAwMDA0LAotMHhjZDAxMjE2ZCwKLTB4Y2Q0MTIxNmUsCi0weGM4MzAwMDAzLAotMHg3ZjFmMDAwYiwKLTB4MzBmNDAwMDcsCi0weDI3NzgwMDAxLAotMHg5NzQwMDAyYSwKLTB4MDdiODAxMjYsCi0weDlmODAwMDAwLAotMHgwMDAwMDAwMCwKLTB4ODAwMDAxMzYsCi0weDdmMWI4MDA0LAotMHg4MDAwMDEzYSwKLTB4N2YxYjgwMDUsCi0weDgwMDAwMTNlLAotMHg3ZjFiODAwMiwKLTB4ODAwMDAxNDIsCi0weDdmMWI4MDAzLAotMHg4MDAwMDE0NiwKLTB4N2YxYjgwMDcsCi0weDgwMDAwMTRhLAotMHg3ZjFiODAwNiwKLTB4ODAwMDAxNGYsCi0weDI4YTQwMDA4LAotMHg5YjgwMDAxOSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVmLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMTUsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZiwKLTB4MzI2NDAwZmYsCi0weDliODAwMDExLAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWYsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAwZCwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVmLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMDksCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZiwKLTB4MzI2NDAwZmYsCi0weDliODAwMDA1LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWYsCi0weDMyNjQwMGZmLAotMHgyOGE0MDAwOCwKLTB4MzI2NDAwZmYsCi0weDBlNjgwMDNjLAotMHg5YTgwZmViMiwKLTB4MjhlYzAwMDgsCi0weDdjNDM0MDAwLAotMHg3YzQzODAwMCwKLTB4N2M0M2MwMDAsCi0weDk2YzAwMDA3LAotMHhjYzAwMDA2MiwKLTB4Y2Y0MTIxNjksCi0weGNmODEyMTZhLAotMHhjZmMxMjE2YiwKLTB4ODAwMDAwMDMsCi0weGNjMDEyMTZjLAotMHg4MDAwMDAwMywKLTB4Y2ZmNTAwMDAsCi0weGNjMDAwMDZiLAotMHg4NDAwMDM4MSwKLTB4MGU2ODAwM2MsCi0weDlhODAwMDA0LAotMHhjODI4MDAxNSwKLTB4ODAwMDAwMDMsCi0weGQwNDAwMDdmLAotMHg5NjgwZmZhYiwKLTB4N2UwMjQwMDAsCi0weDg0MDAwMjNiLAotMHhjMDBlMDAwMiwKLTB4Y2MwMDAwNDEsCi0weDgwMDAwMjM5LAotMHhjY2MxMzA0YSwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHhjMDFlMDAwMSwKLTB4MjkyNDAwMTIsCi0weGMwMjIwMDAyLAotMHg5NjQwMDAwNSwKLTB4YzAyNjAwMDQsCi0weGMwMjdmZmZiLAotMHg3ZDI1MDAwYiwKLTB4YzAyNjAwMDAsCi0weDdkZDI4MDBiLAotMHg3ZTEyYzAwYiwKLTB4N2QyNTAwMGMsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMTIxNjksCi0weDlhODAwMDBhLAotMHhjZDAxMjE2YSwKLTB4Y2Q0MTIxNmIsCi0weDk2YzBmZTgzLAotMHhjZDgxMjE2YywKLTB4YzgzMDAwMTgsCi0weDk3MDAwMDAwLAotMHhjODMwMDAxOCwKLTB4ODAwMDAwMDMsCi0weGNjMDAwMDE4LAotMHg4NDAwMDM4MSwKLTB4Y2MwMDAwN2YsCi0weGM4MTQwMDEzLAotMHhjODE4MDAxNCwKLTB4Y2Q0MTIxNmIsCi0weDk2YzBmZTc3LAotMHhjZDgxMjE2YywKLTB4ODAwMDAxODMsCi0weGM4MzAwMDE4LAotMHhjODBjMDAwOCwKLTB4OThjMDAwMDAsCi0weGM4MGMwMDA4LAotMHg3YzQxMDAwMCwKLTB4OTUwMDAwMDIsCi0weDAwMDAwMDAwLAotMHg3YzQxNDAwMCwKLTB4YzgyMDAwMDksCi0weGNjNDAwMDQzLAotMHhjZTAxYTFmNCwKLTB4Y2M0MDAwNDQsCi0weGMwMGU4MDAwLAotMHg3YzQyNDAwMCwKLTB4N2M0MjgwMDAsCi0weDJhYWMwMDFmLAotMHg5NmMwZmU2NCwKLTB4YzAzNWYwMDAsCi0weGNlNDAwM2UyLAotMHgzMjc4MDAwMywKLTB4MjY3YzAwMDgsCi0weDdmZjdjMDBiLAotMHg3ZmZiYzAwYywKLTB4MmE3ODAwMTgsCi0weGNmYzAwM2UzLAotMHhjZjgwMDNlNCwKLTB4MjZiMDAwMDIsCi0weDdmM2YwMDAwLAotMHhjZjAwMDNlNSwKLTB4ODAwMDAzMWYsCi0weDdjODBjMDAwLAotMHg3YzQwYzAwMCwKLTB4MjhkMDAwMDgsCi0weDMxMTAwMDBmLAotMHg5NTAwMDAwZiwKLTB4MjUyODAwMDEsCi0weDA2YTgwMWI0LAotMHg5ZTgwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDgwMDAwMWQ1LAotMHhjMDEyMDgwMCwKLTB4ODAwMDAxZTMsCi0weGM4MTQwMDBmLAotMHg4MDAwMDFlYSwKLTB4YzgxNDAwMTAsCi0weDgwMDAwMWYxLAotMHhjY2MxYTJhNCwKLTB4ODAwMDAxZmEsCi0weGM4MTQwMDExLAotMHgzMGQwMDAzZiwKLTB4MGQyODAwMTUsCi0weDlhODAwMDEyLAotMHgwZDI4MDAxZSwKLTB4OWE4MDAwMWUsCi0weDBkMjgwMDIwLAotMHg5YTgwMDAyMywKLTB4MGQyNDAwMGYsCi0weDBkMjgwMDEwLAotMHg3ZTZhODAwYywKLTB4OWE4MDAwMjYsCi0weDBkMjAwMDA0LAotMHgwZDI0MDAxNCwKLTB4MGQyODAwMjgsCi0weDdlNjI0MDBjLAotMHg3ZWE2ODAwYywKLTB4OWE4MDAwMmEsCi0weGM4MTQwMDExLAotMHg4MDAwMDAwMywKLTB4Y2NjMWEyYTQsCi0weGMwMTIwODAwLAotMHg3YzQxNDAwMCwKLTB4N2QwY2MwMGMsCi0weGMwMTIwMDA4LAotMHgyOTU4MDAwMywKLTB4Mjk1YzAwMGMsCi0weDdjNDIwMDAwLAotMHg3ZGQxYzAwYiwKLTB4MjYyMDAwMTQsCi0weDdlMWU0MDBjLAotMHg3ZTRlODAwYywKLTB4Y2U4MWEyYTQsCi0weDgwMDAwMDAzLAotMHhjZDgxYTFmZSwKLTB4YzgxNDAwMGYsCi0weDA0MTAyMTBlLAotMHg5NTQwMDAwMCwKLTB4YzgxNDAwMGYsCi0weGQwNTEwMDAwLAotMHg4MDAwMDAwMywKLTB4Y2NjMWEyYTQsCi0weGM4MTQwMDEwLAotMHgwNDEwMjEwOCwKLTB4OTU0MDAwMDAsCi0weGM4MTQwMDEwLAotMHhkMDUxMDAwMCwKLTB4ODAwMDAwMDMsCi0weGNjYzFhMmE0LAotMHhjY2MxYTJhNCwKLTB4MDQxMDAwMDEsCi0weGNkMDAwMDE5LAotMHg4NDAwMDM4MSwKLTB4Y2MwMDAwN2YsCi0weGM4MTAwMDE5LAotMHg5OTAwMDAwMCwKLTB4YzgxMDAwMTksCi0weDgwMDAwMDA0LAotMHg3YzQwODAwMCwKLTB4MDQxMDIxMDAsCi0weDk1NDAwMDAwLAotMHhjODE0MDAxMSwKLTB4ZDA1MTAwMDAsCi0weDgwMDAwMzdlLAotMHhjY2MxYTJhNCwKLTB4N2M0MGMwMDAsCi0weGNjNDAwMDBkLAotMHg5NGMwZmUwMSwKLTB4Y2M0MDAwMGUsCi0weDdjNDEwMDAwLAotMHg5NTAwMDAwNSwKLTB4MDhjYzAwMDEsCi0weGM4MTQwMDA1LAotMHg5OTQwMDAxNCwKLTB4MDAwMDAwMDAsCi0weDk4YzBmZmZiLAotMHg3YzQxMDAwMCwKLTB4ODAwMDAwMDQsCi0weDdkMDA4MDAwLAotMHhjODE0MDAwNSwKLTB4N2M0MGMwMDAsCi0weDk5NDAwMDBjLAotMHhjODE4MDAwYywKLTB4N2M0MTAwMDAsCi0weDk1ODBmZGYwLAotMHhjODIwMDAwZSwKLTB4YzgxYzAwMGQsCi0weDY2MjAwMDIwLAotMHg3ZTFlMDAyYywKLTB4MjUyNDAwMDIsCi0weDdlNjI0MDIwLAotMHg4MDAwMDAwMywKLTB4Y2NlNjAwMDAsCi0weDdjNDEwMDAwLAotMHhjYzAwMDA2YywKLTB4Y2MwMDAwNmQsCi0weGM4MTgwMDFmLAotMHhjODFjMDAxZSwKLTB4NjU5ODAwMjAsCi0weDdkZDljMDJjLAotMHg3Y2Q0YzAwYywKLTB4Y2NkZTAwMDAsCi0weDQ1ZGMwMDA0LAotMHhjODI4MDAxNywKLTB4OTY4MDAwMGYsCi0weGMwMGUwMDAxLAotMHgyODY4MDAwOCwKLTB4MmFhYzAwMTYsCi0weDMyYTgwMGZmLAotMHgwZWIwMDA0OSwKLTB4N2YyZjAwMGIsCi0weDk3MDAwMDA2LAotMHgwMDAwMDAwMCwKLTB4YzgxNDAwMDUsCi0weDdjNDBjMDAwLAotMHg4MDAwMDIyMywKLTB4N2M0MTAwMDAsCi0weDgwMDAwMjI2LAotMHhkMDQwMDA3ZiwKLTB4ODQwMDAyM2IsCi0weGNjMDAwMDQxLAotMHhjY2MxMzA0YSwKLTB4OTQwMDAwMDAsCi0weGM4M2MwMDFhLAotMHgwNDNjMDAwNSwKLTB4Y2ZjMWEyYTQsCi0weGMwMzYxZjkwLAotMHhjMDM4N2ZmZiwKLTB4N2MwM2MwMTAsCi0weDdmN2I0MDBjLAotMHhjZjQxMjE3YywKLTB4Y2ZjMTIxN2QsCi0weGNjMDEyMTdlLAotMHhjMDNhMDAwNCwKLTB4MDQzNDIxN2YsCi0weDdmN2I0MDBjLAotMHhjYzM1MDAwMCwKLTB4YzgzYzAwMDQsCi0weDJiZmMwMDFmLAotMHgwNDM4MDAyMCwKLTB4OTdjMDAwMDUsCi0weGNjMDAwMDYyLAotMHg5YjgwMDAwMCwKLTB4MGJiODAwMDEsCi0weDgwMDAwMjQ3LAotMHhjYzAwMDA3MSwKLTB4Y2MwMWExZjQsCi0weDA0MzgwMDE2LAotMHhjMDM2MDAwMiwKLTB4Y2Y4MWEyYTQsCi0weDg4MDAwMDAwLAotMHhjZjQxMjAxMCwKLTB4N2M0MGMwMDAsCi0weDI4ZDAwMDFjLAotMHg5NTAwMDAwNSwKLTB4MDRkNDAwMDEsCi0weGNkNDAwMDY1LAotMHg4MDAwMDAwMywKLTB4Y2Q0MDAwNjgsCi0weDA5NTQwMDAyLAotMHg4MDAwMDAwMywKLTB4Y2Q0MDAwNjYsCi0weDg0MDAwMjZjLAotMHhjODE4MDNlYSwKLTB4N2M0MGMwMDAsCi0weDk5ODBmZDlmLAotMHhjODE0MDAxNiwKLTB4MDhkMDAwMDEsCi0weDk5NDAwMDJiLAotMHhjZDAwMDA2OCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4MDQzYzAwMDUsCi0weGNmYzFhMmE0LAotMHhjYzAxYTFmNCwKLTB4ODQwMDAzODEsCi0weGNjMDAwMDQ2LAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weDg0MDAwMjdlLAotMHhjODE4MDNlYSwKLTB4N2M0MGMwMDAsCi0weDk5ODBmZDhkLAotMHhjODE0MDAxNiwKLTB4MDhkMDAwMDEsCi0weDk5NDAwMDE5LAotMHhjZDAwMDA2OCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4MDQzYzAwMjIsCi0weGNmYzFhMmE0LAotMHg4NDAwMDM4MSwKLTB4Y2MwMDAwNDcsCi0weDg4MDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4YzgxMDAwMTYsCi0weDk5MDAwMDBkLAotMHhjYzQwMDA2NywKLTB4ODAwMDAwMDQsCi0weDdjNDA4MDAwLAotMHhjODE4MDNlYSwKLTB4OTk4MGZkNzksCi0weDdjNDBjMDAwLAotMHg5NGMwMDAwMywKLTB4YzgxMDAwMTYsCi0weDk5MDAwMDA0LAotMHhjY2MwMDA2OCwKLTB4ODAwMDAwMDQsCi0weDdjNDA4MDAwLAotMHg4NDAwMDIzYiwKLTB4YzAxNDgwMDAsCi0weGNjMDAwMDQxLAotMHhjZDQxMzA0YSwKLTB4YzAxNDgwMDAsCi0weDk5MDAwMDAwLAotMHhjODEwMDAxNiwKLTB4ODAwMDAwMDQsCi0weDdjNDA4MDAwLAotMHhjMDEyMDAwMSwKLTB4N2M1MTQwMGMsCi0weDgwMDAwMDAzLAotMHhkMDU1MDAwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weDI5MWMwMDFmLAotMHhjY2MwMDA0YSwKLTB4Y2QwMDAwNGIsCi0weDk1YzAwMDAzLAotMHhjMDFjODAwMCwKLTB4Y2RjMTIwMTAsCi0weGRkODMwMDAwLAotMHgwNTVjMjAwMCwKLTB4Y2MwMDAwNjIsCi0weDgwMDAwMDAzLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDRjLAotMHhjZDAwMDA0ZCwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNhMDAwLAotMHg4MDAwMDAwMywKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA0ZSwKLTB4Y2QwMDAwNGYsCi0weGRkODMwMDAwLAotMHgwNTVjYzAwMCwKLTB4ODAwMDAwMDMsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTAsCi0weGNkMDAwMDUxLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2Y4ZTAsCi0weDgwMDAwMDAzLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDUyLAotMHhjZDAwMDA1MywKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmODgwLAotMHg4MDAwMDAwMywKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1NCwKLTB4Y2QwMDAwNTUsCi0weGRkODMwMDAwLAotMHgwNTVjZTAwMCwKLTB4ODAwMDAwMDMsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTYsCi0weGNkMDAwMDU3LAotMHhkZDgzMDAwMCwKLTB4MDU1Y2YwMDAsCi0weDgwMDAwMDAzLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDU4LAotMHhjZDAwMDA1OSwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmM2ZjLAotMHg4MDAwMDAwMywKLTB4ZDgxZjQxMDAsCi0weGQwNDMyMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzYTAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2MwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmOGUwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjg4MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2UwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjNmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4YzgxNDAzZTAsCi0weGNjNDMwMDAwLAotMHhjYzQzMDAwMCwKLTB4Y2M0MzAwMDAsCi0weDdkNDVjMDAwLAotMHhjZGMzMDAwMCwKLTB4ZDA0MzAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDdjNDBjMDAwLAotMHhjODEwMDNlMiwKLTB4YzgxNDAzZTUsCi0weGM4MTgwM2UzLAotMHhjODFjMDNlNCwKLTB4Y2Q4MTIxNjksCi0weGNkYzEyMTZhLAotMHhjY2MxMjE2YiwKLTB4Y2MwMTIxNmMsCi0weDA0MjAwMDA0LAotMHg3ZGExODAwMCwKLTB4N2Q5NjQwMDIsCi0weDk2NDBmY2Q5LAotMHhjZDgwMDNlMywKLTB4MzEyODAwMDMsCi0weGMwMmRmMDAwLAotMHgyNTE4MDAwOCwKLTB4N2RhZDgwMGIsCi0weDdkYTk4MDBjLAotMHg4MDAwMDAwMywKLTB4Y2Q4MDAzZTMsCi0weDMwOGNmZmZmLAotMHhkMDRkMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4YzgxNDAwMjAsCi0weDE1NTgwMDAyLAotMHg5NTgwZmZmZiwKLTB4YzgxNDAwMjAsCi0weGNjMDAwMDZlLAotMHhjYzQxMjE4MCwKLTB4N2M0MGMwMDAsCi0weGNjYzEyMThkLAotMHhjYzQxMjE4MSwKLTB4MjhkMDAwMWYsCi0weDM0NTg4MDAwLAotMHhjZDgxMjE4YywKLTB4OTUwMGZjYmYsCi0weGNjNDEyMTgyLAotMHhjODE0MDAyMCwKLTB4OTk0MGZmZmYsCi0weGM4MTQwMDIwLAotMHg4MDAwMDAwNCwKLTB4N2M0MDgwMDAsCi0weDdjNDBjMDAwLAotMHgyOGQwMDAxOCwKLTB4MzExMDAwMDEsCi0weGMwMTYwMDgwLAotMHg5NTAwMDAwMywKLTB4YzAyYTAwMDQsCi0weDdjZDRjMDBjLAotMHhjY2MxMjE3YywKLTB4Y2M0MTIxN2QsCi0weGNjNDEyMTdlLAotMHg3YzQxODAwMCwKLTB4MWRiMDAwMDMsCi0weDM2YTAyMTdmLAotMHg5YjAwMDAwMywKLTB4NDE5YzAwMDUsCi0weDA0MWMwMDQwLAotMHg5OWMwMDAwMCwKLTB4MDlkYzAwMDEsCi0weGNjMjEwMDAwLAotMHhjODI0MDAwNCwKLTB4MmE2YzAwMWYsCi0weDQxOWMwMDA1LAotMHg5YWMwZmZmYSwKLTB4Y2M4MDAwNjIsCi0weDgwMDAwMDA0LAotMHg3YzQwODAwMCwKLTB4N2M0MGMwMDAsCi0weDA0ZDQwM2U2LAotMHg4MDAwMDAwMywKLTB4Y2M1NDAwMDAsCi0weDgwMDAwMzdlLAotMHhjYzQwMDNlYSwKLTB4YzAxYzgwMDAsCi0weDA0NGNhMDAwLAotMHhjZGMxMjAxMCwKLTB4N2M0MTAwMDAsCi0weGM4MTQwMDA5LAotMHgwNDE4MDAwMCwKLTB4MDQxYzAwMDgsCi0weGNkODAwMDcxLAotMHgwOWRjMDAwMSwKLTB4MDU5ODAwMDEsCi0weGNkMGQwMDAwLAotMHg5OWMwZmZmYywKLTB4Y2M4MDAwNjIsCi0weDgwMDAwMzdlLAotMHhjZDQwMDA3MSwKLTB4YzAwZTAxMDAsCi0weGNjMDAwMDQxLAotMHhjY2MxMzA0YSwKLTB4YzgzYzAwN2YsCi0weGNjMDAwMDdmLAotMHg4MDAwMDAwMywKLTB4Y2MwMDAwN2YsCi0weGNjMDAwMDdmLAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMTAzMzMsCi0weDAwMTAwMDA2LAotMHgwMDE3MDAwOCwKLTB4MDAyMTAwMGEsCi0weDAwMjcwMDJhLAotMHgwMDI4MDAyNSwKLTB4MDAyOTAwMmIsCi0weDAwMmEwMDI4LAotMHgwMDJiMDAyYiwKLTB4MDAyZDAwM2EsCi0weDAwMmUwMDQxLAotMHgwMDJmMDA0YywKLTB4MDAzNDAwNGUsCi0weDAwMzYwMDMyLAotMHgwMDM5MDBiMSwKLTB4MDAzYTAwZDEsCi0weDAwM2IwMGU2LAotMHgwMDNjMDBmZSwKLTB4MDAzZDAxNmQsCi0weDAwM2YwMGFmLAotMHgwMDQxMDMzOCwKLTB4MDA0MzAzNGIsCi0weDAwNDQwMTkwLAotMHgwMDQ1MDBmZSwKLTB4MDA0NjAxYWUsCi0weDAwNDcwMWFlLAotMHgwMDQ4MDIwMCwKLTB4MDA0OTAyMGUsCi0weDAwNGEwMjU3LAotMHgwMDRiMDI4NCwKLTB4MDA1MjAyNjEsCi0weDAwNTMwMjczLAotMHgwMDU0MDI4OSwKLTB4MDA1NzAyOWIsCi0weDAwNjAwMjlmLAotMHgwMDYxMDJhZSwKLTB4MDA2MjAyYjgsCi0weDAwNjMwMmMyLAotMHgwMDY0MDJjYywKLTB4MDA2NTAyZDYsCi0weDAwNjYwMmUwLAotMHgwMDY3MDJlYSwKLTB4MDA2ODAyZjQsCi0weDAwNjkwMmY4LAotMHgwMDZhMDJmYywKLTB4MDA2YjAzMDAsCi0weDAwNmMwMzA0LAotMHgwMDZkMDMwOCwKLTB4MDA2ZTAzMGMsCi0weDAwNmYwMzEwLAotMHgwMDcwMDMxNCwKLTB4MDA3MjAzNjUsCi0weDAwNzQwMzZiLAotMHgwMDc5MDM2OSwKLTB4MDA3YzAzMWUsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5MDI4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaApAQCAtMCwwICsxLDY2MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBSNjAwRF9ICisjZGVmaW5lIFI2MDBEX0gKKworI2RlZmluZSBDUF9QQUNLRVQyCQkJMHg4MDAwMDAwMAorI2RlZmluZQkJUEFDS0VUMl9QQURfU0hJRlQJCTAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX01BU0sJCSgweDNmZmZmZmZmIDw8IDApCisKKyNkZWZpbmUgUEFDS0VUMih2KQkoQ1BfUEFDS0VUMiB8IFJFR19TRVQoUEFDS0VUMl9QQUQsICh2KSkpCisKKyNkZWZpbmUgUjZYWF9NQVhfU0hfR1BSUwkJCTI1NgorI2RlZmluZSBSNlhYX01BWF9URU1QX0dQUlMJCQkxNgorI2RlZmluZSBSNlhYX01BWF9TSF9USFJFQURTCQkJMjU2CisjZGVmaW5lIFI2WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMJCTQwOTYKKyNkZWZpbmUgUjZYWF9NQVhfQkFDS0VORFMJCQk4CisjZGVmaW5lIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0sJCQkweGZmCisjZGVmaW5lIFI2WFhfTUFYX1NJTURTCQkJCTgKKyNkZWZpbmUgUjZYWF9NQVhfU0lNRFNfTUFTSwkJCTB4ZmYKKyNkZWZpbmUgUjZYWF9NQVhfUElQRVMJCQkJOAorI2RlZmluZSBSNlhYX01BWF9QSVBFU19NQVNLCQkJMHhmZgorCisvKiBQVEUgZmxhZ3MgKi8KKyNkZWZpbmUgUFRFX1ZBTElECQkJCSgxIDw8IDApCisjZGVmaW5lIFBURV9TWVNURU0JCQkJKDEgPDwgMSkKKyNkZWZpbmUgUFRFX1NOT09QRUQJCQkJKDEgPDwgMikKKyNkZWZpbmUgUFRFX1JFQURBQkxFCQkJCSgxIDw8IDUpCisjZGVmaW5lIFBURV9XUklURUFCTEUJCQkJKDEgPDwgNikKKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lCUFSQl9QT1AJCQkJCQkweDI0MTgKKyNkZWZpbmUgCUVOQUJMRV9UQzEyOAkJCQkJKDEgPDwgMzApCisjZGVmaW5lCUFSQl9HREVDX1JEX0NOVEwJCQkJMHgyNDZDCisKKyNkZWZpbmUJQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHCQkJMHg4OTUwCisjZGVmaW5lCUNDX1JCX0JBQ0tFTkRfRElTQUJMRQkJCQkweDk4RjQKKyNkZWZpbmUJCUJBQ0tFTkRfRElTQUJMRSh4KQkJCQkoKHgpIDw8IDE2KQorCisjZGVmaW5lCUNCX0NPTE9SMF9CQVNFCQkJCQkweDI4MDQwCisjZGVmaW5lCUNCX0NPTE9SMV9CQVNFCQkJCQkweDI4MDQ0CisjZGVmaW5lCUNCX0NPTE9SMl9CQVNFCQkJCQkweDI4MDQ4CisjZGVmaW5lCUNCX0NPTE9SM19CQVNFCQkJCQkweDI4MDRDCisjZGVmaW5lCUNCX0NPTE9SNF9CQVNFCQkJCQkweDI4MDUwCisjZGVmaW5lCUNCX0NPTE9SNV9CQVNFCQkJCQkweDI4MDU0CisjZGVmaW5lCUNCX0NPTE9SNl9CQVNFCQkJCQkweDI4MDU4CisjZGVmaW5lCUNCX0NPTE9SN19CQVNFCQkJCQkweDI4MDVDCisjZGVmaW5lCUNCX0NPTE9SN19GUkFHCQkJCQkweDI4MEZDCisKKyNkZWZpbmUgQ0JfQ09MT1IwX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA2MAorI2RlZmluZSBDQl9DT0xPUjBfVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDgwCisjZGVmaW5lIENCX0NPTE9SMF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwYTAKKyNkZWZpbmUgQ0JfQ09MT1IwX1RJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBjMAorI2RlZmluZSBDQl9DT0xPUjBfRlJBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MGUwCisjZGVmaW5lIENCX0NPTE9SMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgxMDAKKworI2RlZmluZQlDT05GSUdfTUVNU0laRQkJCQkJMHg1NDI4CisjZGVmaW5lIENPTkZJR19DTlRMCQkJCQkweDU0MjQKKyNkZWZpbmUJQ1BfU1RBVAkJCQkJCTB4ODY4MAorI2RlZmluZQlDUF9DT0hFUl9CQVNFCQkJCQkweDg1RjgKKyNkZWZpbmUJQ1BfREVCVUcJCQkJCTB4QzFGQworI2RlZmluZQlSXzAwODZEOF9DUF9NRV9DTlRMCQkJMHg4NkQ4CisjZGVmaW5lCQlTXzAwODZEOF9DUF9NRV9IQUxUKHgpCQkJKCgoeCkgJiAxKTw8MjgpCisjZGVmaW5lCQlDXzAwODZEOF9DUF9NRV9IQUxUKHgpCQkJKCh4KSAmIDB4RUZGRkZGRkYpCisjZGVmaW5lCUNQX01FX1JBTV9EQVRBCQkJCQkweEMxNjAKKyNkZWZpbmUJQ1BfTUVfUkFNX1JBRERSCQkJCQkweEMxNTgKKyNkZWZpbmUJQ1BfTUVfUkFNX1dBRERSCQkJCQkweEMxNUMKKyNkZWZpbmUgQ1BfTUVRX1RIUkVTSE9MRFMJCQkJMHg4NzY0CisjZGVmaW5lCQlNRVFfRU5EKHgpCQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQkJUk9RX0VORCh4KQkJCQkJKCh4KSA8PCAyNCkKKyNkZWZpbmUJQ1BfUEVSRk1PTl9DTlRMCQkJCQkweDg3RkMKKyNkZWZpbmUJQ1BfUEZQX1VDT0RFX0FERFIJCQkJMHhDMTUwCisjZGVmaW5lCUNQX1BGUF9VQ09ERV9EQVRBCQkJCTB4QzE1NAorI2RlZmluZQlDUF9RVUVVRV9USFJFU0hPTERTCQkJCTB4ODc2MAorI2RlZmluZQkJUk9RX0lCMV9TVEFSVCh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlST1FfSUIyX1NUQVJUKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJQ1BfUkJfQkFTRQkJCQkJMHhDMTAwCisjZGVmaW5lCUNQX1JCX0NOVEwJCQkJCTB4QzEwNAorI2RlZmluZQkJUkJfQlVGU1ooeCkJCQkJCSgoeCk8PDApCisjZGVmaW5lCQlSQl9CTEtTWih4KQkJCQkJKCh4KTw8OCkKKyNkZWZpbmUJCVJCX05PX1VQREFURQkJCQkJKDE8PDI3KQorI2RlZmluZQkJUkJfUlBUUl9XUl9FTkEJCQkJCSgxPDwzMSkKKyNkZWZpbmUJCUJVRl9TV0FQXzMyQklUCQkJCQkoMiA8PCAxNikKKyNkZWZpbmUJQ1BfUkJfUlBUUgkJCQkJMHg4NzAwCisjZGVmaW5lCUNQX1JCX1JQVFJfQUREUgkJCQkJMHhDMTBDCisjZGVmaW5lCUNQX1JCX1JQVFJfQUREUl9ISQkJCQkweEMxMTAKKyNkZWZpbmUJQ1BfUkJfUlBUUl9XUgkJCQkJMHhDMTA4CisjZGVmaW5lCUNQX1JCX1dQVFIJCQkJCTB4QzExNAorI2RlZmluZQlDUF9SQl9XUFRSX0FERFIJCQkJCTB4QzExOAorI2RlZmluZQlDUF9SQl9XUFRSX0FERFJfSEkJCQkJMHhDMTFDCisjZGVmaW5lCUNQX1JCX1dQVFJfREVMQVkJCQkJMHg4NzA0CisjZGVmaW5lCUNQX1JPUV9JQjFfU1RBVAkJCQkJMHg4Nzg0CisjZGVmaW5lCUNQX1JPUV9JQjJfU1RBVAkJCQkJMHg4Nzg4CisjZGVmaW5lCUNQX1NFTV9XQUlUX1RJTUVSCQkJCTB4ODVCQworCisjZGVmaW5lCURCX0RFQlVHCQkJCQkweDk4MzAKKyNkZWZpbmUJCVBSRVpfTVVTVF9XQUlUX0ZPUl9QT1NUWl9ET05FCQkJKDEgPDwgMzEpCisjZGVmaW5lCURCX0RFUFRIX0JBU0UJCQkJCTB4MjgwMEMKKyNkZWZpbmUJREJfV0FURVJNQVJLUwkJCQkJMHg5ODM4CisjZGVmaW5lCQlERVBUSF9GUkVFKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlERVBUSF9GTFVTSCh4KQkJCQkJKCh4KSA8PCA1KQorI2RlZmluZQkJREVQVEhfUEVORElOR19GUkVFKHgpCQkJCSgoeCkgPDwgMTUpCisjZGVmaW5lCQlERVBUSF9DQUNIRUxJTkVfRlJFRSh4KQkJCQkoKHgpIDw8IDIwKQorCisjZGVmaW5lCURDUF9USUxJTkdfQ09ORklHCQkJCTB4NkNBMAorI2RlZmluZQkJUElQRV9USUxJTkcoeCkJCQkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgCUJBTktfVElMSU5HKHgpCQkJCQkoKHgpIDw8IDQpCisjZGVmaW5lCQlHUk9VUF9TSVpFKHgpCQkJCQkoKHgpIDw8IDYpCisjZGVmaW5lCQlST1dfVElMSU5HKHgpCQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCQlCQU5LX1NXQVBTKHgpCQkJCQkoKHgpIDw8IDExKQorI2RlZmluZQkJU0FNUExFX1NQTElUKHgpCQkJCQkoKHgpIDw8IDE0KQorI2RlZmluZQkJQkFDS0VORF9NQVAoeCkJCQkJCSgoeCkgPDwgMTYpCisKKyNkZWZpbmUgR0JfVElMSU5HX0NPTkZJRwkJCQkweDk4RjAKKworI2RlZmluZQlHQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRwkJCTB4ODk1NAorI2RlZmluZQkJSU5BQ1RJVkVfUURfUElQRVMoeCkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJSU5BQ1RJVkVfUURfUElQRVNfTUFTSwkJCQkweDAwMDBGRjAwCisjZGVmaW5lCQlJTkFDVElWRV9TSU1EUyh4KQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQkJSU5BQ1RJVkVfU0lNRFNfTUFTSwkJCQkweDAwRkYwMDAwCisKKyNkZWZpbmUgU1FfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMDAKKyMgICAgICAgZGVmaW5lIFZDX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgRVhQT1JUX1NSQ19DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBEWDlfQ09OU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyMgICAgICAgZGVmaW5lIEFMVV9JTlNUX1BSRUZFUl9WRUNUT1IgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorIyAgICAgICBkZWZpbmUgRFgxMF9DTEFNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjICAgICAgIGRlZmluZSBDTEFVU0VfU0VRX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUFNfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjICAgICAgIGRlZmluZSBWU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNikKKyMgICAgICAgZGVmaW5lIEdTX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI4KQorIyAgICAgICBkZWZpbmUgRVNfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMzApCisjZGVmaW5lIFNRX0dQUl9SRVNPVVJDRV9NR01UXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzA0CisjICAgICAgIGRlZmluZSBOVU1fUFNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgTlVNX1ZTX0dQUlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjICAgICAgIGRlZmluZSBOVU1fQ0xBVVNFX1RFTVBfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyNkZWZpbmUgU1FfR1BSX1JFU09VUkNFX01HTVRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMDgKKyMgICAgICAgZGVmaW5lIE5VTV9HU19HUFJTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBOVU1fRVNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgU1FfVEhSRUFEX1JFU09VUkNFX01HTVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMGMKKyMgICAgICAgZGVmaW5lIE5VTV9QU19USFJFQURTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBOVU1fVlNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgTlVNX0dTX1RIUkVBRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjICAgICAgIGRlZmluZSBOVU1fRVNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyNkZWZpbmUgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTAKKyMgICAgICAgZGVmaW5lIE5VTV9QU19TVEFDS19FTlRSSUVTKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBOVU1fVlNfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTQKKyMgICAgICAgZGVmaW5lIE5VTV9HU19TVEFDS19FTlRSSUVTKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBOVU1fRVNfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKworI2RlZmluZSBHUkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyMgICAgICAgZGVmaW5lIEdSQk1fUkVBRF9USU1FT1VUKHgpICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorI2RlZmluZQlHUkJNX1NUQVRVUwkJCQkJMHg4MDEwCisjZGVmaW5lCQlDTURGSUZPX0FWQUlMX01BU0sJCQkJMHgwMDAwMDAxRgorI2RlZmluZQkJR1VJX0FDVElWRQkJCQkJKDE8PDMxKQorI2RlZmluZQlHUkJNX1NUQVRVUzIJCQkJCTB4ODAxNAorI2RlZmluZQlHUkJNX1NPRlRfUkVTRVQJCQkJCTB4ODAyMAorI2RlZmluZQkJU09GVF9SRVNFVF9DUAkJCQkJKDE8PDApCisKKyNkZWZpbmUJSERQX0hPU1RfUEFUSF9DTlRMCQkJCTB4MkMwMAorI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9CQVNFCQkJCTB4MkMwNAorI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9JTkZPCQkJCTB4MkMwOAorI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9TSVpFCQkJCTB4MkMwQworI2RlZmluZSBIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMCQkJMHg1NEEwCisjZGVmaW5lCUhEUF9USUxJTkdfQ09ORklHCQkJCTB4MkYzQworCisjZGVmaW5lIE1DX1ZNX0FHUF9UT1AJCQkJCTB4MjE4NAorI2RlZmluZSBNQ19WTV9BR1BfQk9UCQkJCQkweDIxODgKKyNkZWZpbmUJTUNfVk1fQUdQX0JBU0UJCQkJCTB4MjE4QworI2RlZmluZSBNQ19WTV9GQl9MT0NBVElPTgkJCQkweDIxODAKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DRF9SRF9BX0NOVEwJCQkweDIxOUMKKyNkZWZpbmUgCUVOQUJMRV9MMV9UTEIJCQkJCSgxIDw8IDApCisjZGVmaW5lCQlFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORwkJCSgxIDw8IDEpCisjZGVmaW5lCQlFTkFCTEVfTDFfU1RSSUNUX09SREVSSU5HCQkJKDEgPDwgMikKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9NQVNLCQkJCTB4MDAwMDAwQzAKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9TSElGVAkJCTYKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9QQV9PTkxZCQkJKDAgPDwgNikKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUAkJCSgxIDw8IDYpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfSU5fU1lTCQkJKDIgPDwgNikKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTCQkJKDMgPDwgNikKKyNkZWZpbmUJCVNZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU19USFJVCSgwIDw8IDgpCisjZGVmaW5lCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX0RFRkFVTFRfUEFHRQkoMSA8PCA4KQorI2RlZmluZQkJRU5BQkxFX1NFTUFQSE9SRV9NT0RFCQkJCSgxIDw8IDEwKQorI2RlZmluZQkJRU5BQkxFX1dBSVRfTDJfUVVFUlkJCQkJKDEgPDwgMTEpCisjZGVmaW5lCQlFRkZFQ1RJVkVfTDFfVExCX1NJWkUoeCkJCQkoKCh4KSAmIDcpIDw8IDEyKQorI2RlZmluZQkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFX01BU0sJCQkweDAwMDA3MDAwCisjZGVmaW5lCQlFRkZFQ1RJVkVfTDFfVExCX1NJWkVfU0hJRlQJCQkxMgorI2RlZmluZQkJRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoeCkJCQkoKCh4KSAmIDcpIDw8IDE1KQorI2RlZmluZQkJRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkVfTUFTSwkJCTB4MDAwMzgwMDAKKyNkZWZpbmUJCUVGRkVDVElWRV9MMV9RVUVVRV9TSVpFX1NISUZUCQkJMTUKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DRF9SRF9CX0NOVEwJCQkweDIxQTAKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DQl9SRF9HRlhfQ05UTAkJCTB4MjFGQworI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNCX1JEX0hEUF9DTlRMCQkJMHgyMjA0CisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0JfUkRfUERNQV9DTlRMCQkJMHgyMjA4CisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU0VNX0NOVEwJCQkweDIyMEMKKyNkZWZpbmUJTUNfVk1fTDFfVExCX01DQl9SRF9TWVNfQ05UTAkJCTB4MjIwMAorI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNEX1dSX0FfQ05UTAkJCTB4MjFBNAorI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNEX1dSX0JfQ05UTAkJCTB4MjFBOAorI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNCX1dSX0dGWF9DTlRMCQkJMHgyMjEwCisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0JfV1JfSERQX0NOVEwJCQkweDIyMTgKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DQl9XUl9QRE1BX0NOVEwJCQkweDIyMUMKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DQl9XUl9TRU1fQ05UTAkJCTB4MjIyMAorI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNCX1dSX1NZU19DTlRMCQkJMHgyMjE0CisjZGVmaW5lIE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUgkJCTB4MjE5MAorI2RlZmluZQkJTE9HSUNBTF9QQUdFX05VTUJFUl9NQVNLCQkJMHgwMDBGRkZGRgorI2RlZmluZQkJTE9HSUNBTF9QQUdFX05VTUJFUl9TSElGVAkJCTAKKyNkZWZpbmUgTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUgkJCTB4MjE5NAorI2RlZmluZSBNQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSCQkweDIxOTgKKworI2RlZmluZQlQQV9DTF9FTkhBTkNFCQkJCQkweDhBMTQKKyNkZWZpbmUJCUNMSVBfVlRYX1JFT1JERVJfRU5BCQkJCSgxIDw8IDApCisjZGVmaW5lCQlOVU1fQ0xJUF9TRVEoeCkJCQkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgUEFfU0NfQUFfQ09ORklHCQkJCQkweDI4QzA0CisjZGVmaW5lCVBBX1NDX0FBX1NBTVBMRV9MT0NTXzJTCQkJCTB4OEI0MAorI2RlZmluZQlQQV9TQ19BQV9TQU1QTEVfTE9DU180UwkJCQkweDhCNDQKKyNkZWZpbmUJUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QwCQkJMHg4QjQ4CisjZGVmaW5lCVBBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMQkJCTB4OEI0QworI2RlZmluZQkJUzBfWCh4KQkJCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCVMwX1koeCkJCQkJCQkoKHgpIDw8IDQpCisjZGVmaW5lCQlTMV9YKHgpCQkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJUzFfWSh4KQkJCQkJCSgoeCkgPDwgMTIpCisjZGVmaW5lCQlTMl9YKHgpCQkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCVMyX1koeCkJCQkJCQkoKHgpIDw8IDIwKQorI2RlZmluZQkJUzNfWCh4KQkJCQkJCSgoeCkgPDwgMjQpCisjZGVmaW5lCQlTM19ZKHgpCQkJCQkJKCh4KSA8PCAyOCkKKyNkZWZpbmUJCVM0X1goeCkJCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlTNF9ZKHgpCQkJCQkJKCh4KSA8PCA0KQorI2RlZmluZQkJUzVfWCh4KQkJCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCVM1X1koeCkJCQkJCQkoKHgpIDw8IDEyKQorI2RlZmluZQkJUzZfWCh4KQkJCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCQlTNl9ZKHgpCQkJCQkJKCh4KSA8PCAyMCkKKyNkZWZpbmUJCVM3X1goeCkJCQkJCQkoKHgpIDw8IDI0KQorI2RlZmluZQkJUzdfWSh4KQkJCQkJCSgoeCkgPDwgMjgpCisjZGVmaW5lIFBBX1NDX0NMSVBSRUNUX1JVTEUJCQkJMHgyODIwYworI2RlZmluZQlQQV9TQ19FTkhBTkNFCQkJCQkweDhCRjAKKyNkZWZpbmUJCUZPUkNFX0VPVl9NQVhfQ0xLX0NOVCh4KQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCUZPUkNFX0VPVl9NQVhfVElMRV9DTlQoeCkJCQkoKHgpIDw8IDEyKQorI2RlZmluZSBQQV9TQ19MSU5FX1NUSVBQTEUJCQkJMHgyOEEwQworI2RlZmluZQlQQV9TQ19MSU5FX1NUSVBQTEVfU1RBVEUJCQkweDhCMTAKKyNkZWZpbmUgUEFfU0NfTU9ERV9DTlRMCQkJCQkweDI4QTRDCisjZGVmaW5lCVBBX1NDX01VTFRJX0NISVBfQ05UTAkJCQkweDhCMjAKKworI2RlZmluZSBQQV9TQ19TQ1JFRU5fU0NJU1NPUl9UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDMwCisjZGVmaW5lIFBBX1NDX0dFTkVSSUNfU0NJU1NPUl9UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyNDAKKyNkZWZpbmUgUEFfU0NfV0lORE9XX1NDSVNTT1JfVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODIwNAorCisjZGVmaW5lCVBDSUVfUE9SVF9JTkRFWAkJCQkJMHgwMDM4CisjZGVmaW5lCVBDSUVfUE9SVF9EQVRBCQkJCQkweDAwM0MKKworI2RlZmluZSBSQU1DRkcJCQkJCQkweDI0MDgKKyNkZWZpbmUJCU5PT0ZCQU5LX1NISUZUCQkJCQkwCisjZGVmaW5lCQlOT09GQkFOS19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lCQlOT09GUkFOS19TSElGVAkJCQkJMQorI2RlZmluZQkJTk9PRlJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMgorI2RlZmluZQkJTk9PRlJPV1NfU0hJRlQJCQkJCTIKKyNkZWZpbmUJCU5PT0ZST1dTX01BU0sJCQkJCTB4MDAwMDAwMUMKKyNkZWZpbmUJCU5PT0ZDT0xTX1NISUZUCQkJCQk1CisjZGVmaW5lCQlOT09GQ09MU19NQVNLCQkJCQkweDAwMDAwMDYwCisjZGVmaW5lCQlDSEFOU0laRV9TSElGVAkJCQkJNworI2RlZmluZQkJQ0hBTlNJWkVfTUFTSwkJCQkJMHgwMDAwMDA4MAorI2RlZmluZQkJQlVSU1RMRU5HVEhfU0hJRlQJCQkJOAorI2RlZmluZQkJQlVSU1RMRU5HVEhfTUFTSwkJCQkweDAwMDAwMTAwCisjZGVmaW5lCQlDSEFOU0laRV9PVkVSUklERQkJCQkoMSA8PCAxMCkKKworI2RlZmluZQlTQ1JBVENIX1JFRzAJCQkJCTB4ODUwMAorI2RlZmluZQlTQ1JBVENIX1JFRzEJCQkJCTB4ODUwNAorI2RlZmluZQlTQ1JBVENIX1JFRzIJCQkJCTB4ODUwOAorI2RlZmluZQlTQ1JBVENIX1JFRzMJCQkJCTB4ODUwQworI2RlZmluZQlTQ1JBVENIX1JFRzQJCQkJCTB4ODUxMAorI2RlZmluZQlTQ1JBVENIX1JFRzUJCQkJCTB4ODUxNAorI2RlZmluZQlTQ1JBVENIX1JFRzYJCQkJCTB4ODUxOAorI2RlZmluZQlTQ1JBVENIX1JFRzcJCQkJCTB4ODUxQworI2RlZmluZQlTQ1JBVENIX1VNU0sJCQkJCTB4ODU0MAorI2RlZmluZQlTQ1JBVENIX0FERFIJCQkJCTB4ODU0NAorCisjZGVmaW5lCVNQSV9DT05GSUdfQ05UTAkJCQkJMHg5MTAwCisjZGVmaW5lCQlHUFJfV1JJVEVfUFJJT1JJVFkoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJRElTQUJMRV9JTlRFUlBfMQkJCQkoMSA8PCA1KQorI2RlZmluZQlTUElfQ09ORklHX0NOVExfMQkJCQkweDkxM0MKKyNkZWZpbmUJCVZUWF9ET05FX0RFTEFZKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCUlOVEVSUF9PTkVfUFJJTV9QRVJfUk9XCQkJCSgxIDw8IDQpCisjZGVmaW5lCVNQSV9JTlBVVF9aCQkJCQkweDI4NkQ4CisjZGVmaW5lCVNQSV9QU19JTl9DT05UUk9MXzAJCQkJMHgyODZDQworI2RlZmluZQkJTlVNX0lOVEVSUCh4KQkJCQkJKCh4KTw8MCkKKyNkZWZpbmUJCVBPU0lUSU9OX0VOQQkJCQkJKDE8PDgpCisjZGVmaW5lCQlQT1NJVElPTl9DRU5UUk9JRAkJCQkoMTw8OSkKKyNkZWZpbmUJCVBPU0lUSU9OX0FERFIoeCkJCQkJKCh4KTw8MTApCisjZGVmaW5lCQlQQVJBTV9HRU4oeCkJCQkJCSgoeCk8PDE1KQorI2RlZmluZQkJUEFSQU1fR0VOX0FERFIoeCkJCQkJKCh4KTw8MTkpCisjZGVmaW5lCQlCQVJZQ19TQU1QTEVfQ05UTCh4KQkJCQkoKHgpPDwyNikKKyNkZWZpbmUJCVBFUlNQX0dSQURJRU5UX0VOQQkJCQkoMTw8MjgpCisjZGVmaW5lCQlMSU5FQVJfR1JBRElFTlRfRU5BCQkJCSgxPDwyOSkKKyNkZWZpbmUJCVBPU0lUSU9OX1NBTVBMRQkJCQkJKDE8PDMwKQorI2RlZmluZQkJQkFSWUNfQVRfU0FNUExFX0VOQQkJCQkoMTw8MzEpCisjZGVmaW5lCVNQSV9QU19JTl9DT05UUk9MXzEJCQkJMHgyODZEMAorI2RlZmluZQkJR0VOX0lOREVYX1BJWAkJCQkJKDE8PDApCisjZGVmaW5lCQlHRU5fSU5ERVhfUElYX0FERFIoeCkJCQkJKCh4KTw8MSkKKyNkZWZpbmUJCUZST05UX0ZBQ0VfRU5BCQkJCQkoMTw8OCkKKyNkZWZpbmUJCUZST05UX0ZBQ0VfQ0hBTih4KQkJCQkoKHgpPDw5KQorI2RlZmluZQkJRlJPTlRfRkFDRV9BTExfQklUUwkJCQkoMTw8MTEpCisjZGVmaW5lCQlGUk9OVF9GQUNFX0FERFIoeCkJCQkJKCh4KTw8MTIpCisjZGVmaW5lCQlGT0dfQUREUih4KQkJCQkJKCh4KTw8MTcpCisjZGVmaW5lCQlGSVhFRF9QVF9QT1NJVElPTl9FTkEJCQkJKDE8PDI0KQorI2RlZmluZQkJRklYRURfUFRfUE9TSVRJT05fQUREUih4KQkJCSgoeCk8PDI1KQorCisjZGVmaW5lCVNRX01TX0ZJRk9fU0laRVMJCQkJMHg4Q0YwCisjZGVmaW5lCQlDQUNIRV9GSUZPX1NJWkUoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJRkVUQ0hfRklGT19ISVdBVEVSKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCURPTkVfRklGT19ISVdBVEVSKHgpCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCQlBTFVfVVBEQVRFX0ZJRk9fSElXQVRFUih4KQkJCSgoeCkgPDwgMjQpCisjZGVmaW5lCVNRX1BHTV9TVEFSVF9FUwkJCQkJMHgyODg4MAorI2RlZmluZQlTUV9QR01fU1RBUlRfRlMJCQkJCTB4Mjg4OTQKKyNkZWZpbmUJU1FfUEdNX1NUQVJUX0dTCQkJCQkweDI4ODZDCisjZGVmaW5lCVNRX1BHTV9TVEFSVF9QUwkJCQkJMHgyODg0MAorI2RlZmluZSBTUV9QR01fUkVTT1VSQ0VTX1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODUwCisjZGVmaW5lIFNRX1BHTV9FWFBPUlRTX1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NTQKKyNkZWZpbmUgU1FfUEdNX0NGX09GRlNFVF9QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODhjYworI2RlZmluZQlTUV9QR01fU1RBUlRfVlMJCQkJCTB4Mjg4NTgKKyNkZWZpbmUgU1FfUEdNX1JFU09VUkNFU19WUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODg2OAorI2RlZmluZSBTUV9QR01fQ0ZfT0ZGU0VUX1ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4OGQwCisjZGVmaW5lCVNRX1ZUWF9DT05TVEFOVF9XT1JENl8wCQkJCTB4MzgwMTgKKyNkZWZpbmUJCVNfX1NRX1ZUWF9DT05TVEFOVF9UWVBFKHgpCQkJKCgoeCkgJiAzKSA8PCAzMCkKKyNkZWZpbmUJCUdfX1NRX1ZUWF9DT05TVEFOVF9UWVBFKHgpCQkJKCgoeCkgPj4gMzApICYgMykKKyNkZWZpbmUJCQlTUV9URVhfVlRYX0lOVkFMSURfVEVYVFVSRQkJCTB4MAorI2RlZmluZQkJCVNRX1RFWF9WVFhfSU5WQUxJRF9CVUZGRVIJCQkweDEKKyNkZWZpbmUJCQlTUV9URVhfVlRYX1ZBTElEX1RFWFRVUkUJCQkweDIKKyNkZWZpbmUJCQlTUV9URVhfVlRYX1ZBTElEX0JVRkZFUgkJCQkweDMKKworCisjZGVmaW5lCVNYX01JU0MJCQkJCQkweDI4MzUwCisjZGVmaW5lCVNYX0RFQlVHXzEJCQkJCTB4OTA1NAorI2RlZmluZQkJU01YX0VWRU5UX1JFTEVBU0UJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCUVOQUJMRV9ORVdfU01YX0FERFJFU1MJCQkJKDEgPDwgMTYpCisKKyNkZWZpbmUJVEFfQ05UTF9BVVgJCQkJCTB4OTUwOAorI2RlZmluZQkJRElTQUJMRV9DVUJFX1dSQVAJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCURJU0FCTEVfQ1VCRV9BTklTTwkJCQkoMSA8PCAxKQorI2RlZmluZQkJU1lOQ19HUkFESUVOVAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lCQlTWU5DX1dBTEtFUgkJCQkJKDEgPDwgMjUpCisjZGVmaW5lCQlTWU5DX0FMSUdORVIJCQkJCSgxIDw8IDI2KQorI2RlZmluZQkJQklMSU5FQVJfUFJFQ0lTSU9OXzZfQklUCQkJKDAgPDwgMzEpCisjZGVmaW5lCQlCSUxJTkVBUl9QUkVDSVNJT05fOF9CSVQJCQkoMSA8PCAzMSkKKworI2RlZmluZQlUQ19DTlRMCQkJCQkJMHg5NjA4CisjZGVmaW5lCQlUQ19MMl9TSVpFKHgpCQkJCQkoKHgpPDw1KQorI2RlZmluZQkJTDJfRElTQUJMRV9MQVRFX0hJVAkJCQkoMTw8OSkKKworCisjZGVmaW5lCVZHVF9DQUNIRV9JTlZBTElEQVRJT04JCQkJMHg4OEM0CisjZGVmaW5lCQlDQUNIRV9JTlZBTElEQVRJT04oeCkJCQkJKCh4KTw8MCkKKyNkZWZpbmUJCQlWQ19PTkxZCQkJCQkJMAorI2RlZmluZQkJCVRDX09OTFkJCQkJCQkxCisjZGVmaW5lCQkJVkNfQU5EX1RDCQkJCQkyCisjZGVmaW5lCVZHVF9ETUFfQkFTRQkJCQkJMHgyODdFOAorI2RlZmluZQlWR1RfRE1BX0JBU0VfSEkJCQkJCTB4Mjg3RTQKKyNkZWZpbmUJVkdUX0VTX1BFUl9HUwkJCQkJMHg4OENDCisjZGVmaW5lCVZHVF9HU19QRVJfRVMJCQkJCTB4ODhDOAorI2RlZmluZQlWR1RfR1NfUEVSX1ZTCQkJCQkweDg4RTgKKyNkZWZpbmUJVkdUX0dTX1ZFUlRFWF9SRVVTRQkJCQkweDg4RDQKKyNkZWZpbmUgVkdUX1BSSU1JVElWRV9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OTU4CisjZGVmaW5lCVZHVF9OVU1fSU5TVEFOQ0VTCQkJCTB4ODk3NAorI2RlZmluZQlWR1RfT1VUX0RFQUxMT0NfQ05UTAkJCQkweDI4QzVDCisjZGVmaW5lCQlERUFMTE9DX0RJU1RfTUFTSwkJCQkweDAwMDAwMDdGCisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzAJCQkweDI4QjEwCisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzEJCQkweDI4QjE0CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzIJCQkweDI4QjE4CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzMJCQkweDI4QjFjCisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzAJCQkweDI4QjQ0CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzEJCQkweDI4QjQ4CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzIJCQkweDI4QjRjCisjZGVmaW5lCVZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzMJCQkweDI4QjUwCisjZGVmaW5lCVZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzAJCQkweDI4QUQ4CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzEJCQkweDI4QUU4CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzIJCQkweDI4QUY4CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzMJCQkweDI4QjA4CisjZGVmaW5lCVZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMAkJCTB4MjhBREMKKyNkZWZpbmUJVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8xCQkJMHgyOEFFQworI2RlZmluZQlWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzIJCQkweDI4QUZDCisjZGVmaW5lCVZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMwkJCTB4MjhCMEMKKyNkZWZpbmUJVkdUX1NUUk1PVVRfRU4JCQkJCTB4MjhBQjAKKyNkZWZpbmUJVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMCQkJMHgyOEM1OAorI2RlZmluZQkJVlRYX1JFVVNFX0RFUFRIX01BU0sJCQkJMHgwMDAwMDBGRgorI2RlZmluZSBWR1RfRVZFTlRfSU5JVElBVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YTkwCisjICAgICAgIGRlZmluZSBDQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTYgPDwgMCkKKworI2RlZmluZSBWTV9DT05URVhUMF9DTlRMCQkJCTB4MTQxMAorI2RlZmluZQkJRU5BQkxFX0NPTlRFWFQJCQkJCSgxIDw8IDApCisjZGVmaW5lCQlQQUdFX1RBQkxFX0RFUFRIKHgpCQkJCSgoKHgpICYgMykgPDwgMSkKKyNkZWZpbmUJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQJCSgxIDw8IDQpCisjZGVmaW5lIFZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9MT1dfQUREUgkJMHgxNDkwCisjZGVmaW5lIFZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9ISUdIX0FERFIJCTB4MTRCMAorI2RlZmluZSBWTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUgkJMHgxNTc0CisjZGVmaW5lIFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUgkJMHgxNTk0CisjZGVmaW5lIFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIJCQkweDE1QjQKKyNkZWZpbmUgVk1fQ09OVEVYVDBfUFJPVEVDVElPTl9GQVVMVF9ERUZBVUxUX0FERFIJMHgxNTU0CisjZGVmaW5lIFZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UJCQkweDE0NzAKKyNkZWZpbmUJCVJFUVVFU1RfVFlQRSh4KQkJCQkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lCQlSRVNQT05TRV9UWVBFX01BU0sJCQkJMHgwMDAwMDBGMAorI2RlZmluZQkJUkVTUE9OU0VfVFlQRV9TSElGVAkJCQk0CisjZGVmaW5lIFZNX0wyX0NOVEwJCQkJCTB4MTQwMAorI2RlZmluZQkJRU5BQkxFX0wyX0NBQ0hFCQkJCQkoMSA8PCAwKQorI2RlZmluZQkJRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcJCQkoMSA8PCAxKQorI2RlZmluZQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFCQkoMSA8PCA5KQorI2RlZmluZQkJRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkJCQkoKCh4KSAmIDcpIDw8IDEzKQorI2RlZmluZSBWTV9MMl9DTlRMMgkJCQkJMHgxNDA0CisjZGVmaW5lCQlJTlZBTElEQVRFX0FMTF9MMV9UTEJTCQkJCSgxIDw8IDApCisjZGVmaW5lCQlJTlZBTElEQVRFX0wyX0NBQ0hFCQkJCSgxIDw8IDEpCisjZGVmaW5lIFZNX0wyX0NOVEwzCQkJCQkweDE0MDgKKyNkZWZpbmUJCUJBTktfU0VMRUNUXzAoeCkJCQkJKCgoeCkgJiAweDFmKSA8PCAwKQorI2RlZmluZQkJQkFOS19TRUxFQ1RfMSh4KQkJCQkoKCh4KSAmIDB4MWYpIDw8IDUpCisjZGVmaW5lCQlMMl9DQUNIRV9VUERBVEVfTU9ERSh4KQkJCQkoKCh4KSAmIDMpIDw8IDEwKQorI2RlZmluZQlWTV9MMl9TVEFUVVMJCQkJCTB4MTQwQworI2RlZmluZQkJTDJfQlVTWQkJCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJV0FJVF9VTlRJTAkJCQkJMHg4MDQwCisjZGVmaW5lICAgICAgICAgV0FJVF8yRF9JRExFX2JpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lICAgICAgICAgV0FJVF8zRF9JRExFX2JpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lICAgICAgICAgV0FJVF8yRF9JRExFQ0xFQU5fYml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lICAgICAgICAgV0FJVF8zRF9JRExFQ0xFQU5fYml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCisKKworCisvKgorICogUE00CisgKi8KKyNkZWZpbmUJUEFDS0VUX1RZUEUwCTAKKyNkZWZpbmUJUEFDS0VUX1RZUEUxCTEKKyNkZWZpbmUJUEFDS0VUX1RZUEUyCTIKKyNkZWZpbmUJUEFDS0VUX1RZUEUzCTMKKworI2RlZmluZSBDUF9QQUNLRVRfR0VUX1RZUEUoaCkgKCgoaCkgPj4gMzApICYgMykKKyNkZWZpbmUgQ1BfUEFDS0VUX0dFVF9DT1VOVChoKSAoKChoKSA+PiAxNikgJiAweDNGRkYpCisjZGVmaW5lIENQX1BBQ0tFVDBfR0VUX1JFRyhoKSAoKChoKSAmIDB4RkZGRikgPDwgMikKKyNkZWZpbmUgQ1BfUEFDS0VUM19HRVRfT1BDT0RFKGgpICgoKGgpID4+IDgpICYgMHhGRikKKyNkZWZpbmUgUEFDS0VUMChyZWcsIG4pCSgoUEFDS0VUX1RZUEUwIDw8IDMwKSB8CQkJCVwKKwkJCSAoKChyZWcpID4+IDIpICYgMHhGRkZGKSB8CQkJXAorCQkJICgobikgJiAweDNGRkYpIDw8IDE2KQorI2RlZmluZSBQQUNLRVQzKG9wLCBuKQkoKFBBQ0tFVF9UWVBFMyA8PCAzMCkgfAkJCQlcCisJCQkgKCgob3ApICYgMHhGRikgPDwgOCkgfAkJCQlcCisJCQkgKChuKSAmIDB4M0ZGRikgPDwgMTYpCisKKy8qIFBhY2tldCAzIHR5cGVzICovCisjZGVmaW5lCVBBQ0tFVDNfTk9QCQkJCQkweDEwCisjZGVmaW5lCVBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSX0VORAkJCTB4MTcKKyNkZWZpbmUJUEFDS0VUM19TRVRfUFJFRElDQVRJT04JCQkJMHgyMAorI2RlZmluZQlQQUNLRVQzX1JFR19STVcJCQkJCTB4MjEKKyNkZWZpbmUJUEFDS0VUM19DT05EX0VYRUMJCQkJMHgyMgorI2RlZmluZQlQQUNLRVQzX1BSRURfRVhFQwkJCQkweDIzCisjZGVmaW5lCVBBQ0tFVDNfU1RBUlRfM0RfQ01EQlVGCQkJCTB4MjQKKyNkZWZpbmUJUEFDS0VUM19EUkFXX0lOREVYXzIJCQkJMHgyNworI2RlZmluZQlQQUNLRVQzX0NPTlRFWFRfQ09OVFJPTAkJCQkweDI4CisjZGVmaW5lCVBBQ0tFVDNfRFJBV19JTkRFWF9JTU1EX0JFCQkJMHgyOQorI2RlZmluZQlQQUNLRVQzX0lOREVYX1RZUEUJCQkJMHgyQQorI2RlZmluZQlQQUNLRVQzX0RSQVdfSU5ERVgJCQkJMHgyQgorI2RlZmluZQlQQUNLRVQzX0RSQVdfSU5ERVhfQVVUTwkJCQkweDJECisjZGVmaW5lCVBBQ0tFVDNfRFJBV19JTkRFWF9JTU1ECQkJCTB4MkUKKyNkZWZpbmUJUEFDS0VUM19OVU1fSU5TVEFOQ0VTCQkJCTB4MkYKKyNkZWZpbmUJUEFDS0VUM19TVFJNT1VUX0JVRkZFUl9VUERBVEUJCQkweDM0CisjZGVmaW5lCVBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSX01QCQkJMHgzOAorI2RlZmluZQlQQUNLRVQzX01FTV9TRU1BUEhPUkUJCQkJMHgzOQorI2RlZmluZQlQQUNLRVQzX01QRUdfSU5ERVgJCQkJMHgzQQorI2RlZmluZQlQQUNLRVQzX1dBSVRfUkVHX01FTQkJCQkweDNDCisjZGVmaW5lCVBBQ0tFVDNfTUVNX1dSSVRFCQkJCTB4M0QKKyNkZWZpbmUJUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIJCQkJMHgzMgorI2RlZmluZQlQQUNLRVQzX0NQX0lOVEVSUlVQVAkJCQkweDQwCisjZGVmaW5lCVBBQ0tFVDNfU1VSRkFDRV9TWU5DCQkJCTB4NDMKKyMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX0NCMF9ERVNUX0JBU0VfRU5BICAgICgxIDw8IDYpCisjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19UQ19BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyMykKKyMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX1ZDX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDI0KQorIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfQ0JfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjUpCisjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19EQl9BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyNikKKyMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX1NIX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDI3KQorIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfU01YX0FDVElPTl9FTkEgICAgICAgKDEgPDwgMjgpCisjZGVmaW5lCVBBQ0tFVDNfTUVfSU5JVElBTElaRQkJCQkweDQ0CisjZGVmaW5lCQlQQUNLRVQzX01FX0lOSVRJQUxJWkVfREVWSUNFX0lEKHgpICgoeCkgPDwgMTYpCisjZGVmaW5lCVBBQ0tFVDNfQ09ORF9XUklURQkJCQkweDQ1CisjZGVmaW5lCVBBQ0tFVDNfRVZFTlRfV1JJVEUJCQkJMHg0NgorI2RlZmluZQlQQUNLRVQzX0VWRU5UX1dSSVRFX0VPUAkJCQkweDQ3CisjZGVmaW5lCVBBQ0tFVDNfT05FX1JFR19XUklURQkJCQkweDU3CisjZGVmaW5lCVBBQ0tFVDNfU0VUX0NPTkZJR19SRUcJCQkJMHg2OAorI2RlZmluZQkJUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQJCQkweDAwMDA4MDAwCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9DT05GSUdfUkVHX0VORAkJCTB4MDAwMGFjMDAKKyNkZWZpbmUJUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcJCQkJMHg2OQorI2RlZmluZQkJUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUCQkJMHgwMDAyODAwMAorI2RlZmluZQkJUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfRU5ECQkJMHgwMDAyOTAwMAorI2RlZmluZQlQQUNLRVQzX1NFVF9BTFVfQ09OU1QJCQkJMHg2QQorI2RlZmluZQkJUEFDS0VUM19TRVRfQUxVX0NPTlNUX09GRlNFVAkJCTB4MDAwMzAwMDAKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0FMVV9DT05TVF9FTkQJCQkweDAwMDMyMDAwCisjZGVmaW5lCVBBQ0tFVDNfU0VUX0JPT0xfQ09OU1QJCQkJMHg2QgorI2RlZmluZQkJUEFDS0VUM19TRVRfQk9PTF9DT05TVF9PRkZTRVQJCQkweDAwMDNlMzgwCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9CT09MX0NPTlNUX0VORAkJCTB4MDAwNDAwMDAKKyNkZWZpbmUJUEFDS0VUM19TRVRfTE9PUF9DT05TVAkJCQkweDZDCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9MT09QX0NPTlNUX09GRlNFVAkJCTB4MDAwM2UyMDAKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfRU5ECQkJMHgwMDAzZTM4MAorI2RlZmluZQlQQUNLRVQzX1NFVF9SRVNPVVJDRQkJCQkweDZECisjZGVmaW5lCQlQQUNLRVQzX1NFVF9SRVNPVVJDRV9PRkZTRVQJCQkweDAwMDM4MDAwCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9SRVNPVVJDRV9FTkQJCQkweDAwMDNjMDAwCisjZGVmaW5lCVBBQ0tFVDNfU0VUX1NBTVBMRVIJCQkJMHg2RQorI2RlZmluZQkJUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQJCQkweDAwMDNjMDAwCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9TQU1QTEVSX0VORAkJCQkweDAwMDNjZmYwCisjZGVmaW5lCVBBQ0tFVDNfU0VUX0NUTF9DT05TVAkJCQkweDZGCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9DVExfQ09OU1RfT0ZGU0VUCQkJMHgwMDAzY2ZmMAorI2RlZmluZQkJUEFDS0VUM19TRVRfQ1RMX0NPTlNUX0VORAkJCTB4MDAwM2UyMDAKKyNkZWZpbmUJUEFDS0VUM19TVVJGQUNFX0JBU0VfVVBEQVRFCQkJMHg3MworCisKKyNkZWZpbmUJUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUCQkweDgwMjAKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfQ1AoeCkJCSgoKHgpICYgMSkgPDwgMCkKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfQ0IoeCkJCSgoKHgpICYgMSkgPDwgMSkKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfQ1IoeCkJCSgoKHgpICYgMSkgPDwgMikKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfREIoeCkJCSgoKHgpICYgMSkgPDwgMykKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfUEEoeCkJCSgoKHgpICYgMSkgPDwgNSkKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfU0MoeCkJCSgoKHgpICYgMSkgPDwgNikKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfU01YKHgpCQkoKCh4KSAmIDEpIDw8IDcpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1NQSSh4KQkJKCgoeCkgJiAxKSA8PCA4KQorI2RlZmluZQkJU18wMDgwMjBfU09GVF9SRVNFVF9TSCh4KQkJKCgoeCkgJiAxKSA8PCA5KQorI2RlZmluZQkJU18wMDgwMjBfU09GVF9SRVNFVF9TWCh4KQkJKCgoeCkgJiAxKSA8PCAxMCkKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVEMoeCkJCSgoKHgpICYgMSkgPDwgMTEpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1RBKHgpCQkoKCh4KSAmIDEpIDw8IDEyKQorI2RlZmluZQkJU18wMDgwMjBfU09GVF9SRVNFVF9WQyh4KQkJKCgoeCkgJiAxKSA8PCAxMykKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkdUKHgpCQkoKCh4KSAmIDEpIDw8IDE0KQorI2RlZmluZQlSXzAwODAxMF9HUkJNX1NUQVRVUwkJCTB4ODAxMAorI2RlZmluZQkJU18wMDgwMTBfQ01ERklGT19BVkFJTCh4KQkJKCgoeCkgJiAweDFGKSA8PCAwKQorI2RlZmluZQkJU18wMDgwMTBfQ1BfUlFfUEVORElORyh4KQkJKCgoeCkgJiAxKSA8PCA2KQorI2RlZmluZQkJU18wMDgwMTBfQ0ZfUlFfUEVORElORyh4KQkJKCgoeCkgJiAxKSA8PCA3KQorI2RlZmluZQkJU18wMDgwMTBfUEZfUlFfUEVORElORyh4KQkJKCgoeCkgJiAxKSA8PCA4KQorI2RlZmluZQkJU18wMDgwMTBfR1JCTV9FRV9CVVNZKHgpCQkoKCh4KSAmIDEpIDw8IDEwKQorI2RlZmluZQkJU18wMDgwMTBfVkNfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMTEpCisjZGVmaW5lCQlTXzAwODAxMF9EQjAzX0NMRUFOKHgpCQkJKCgoeCkgJiAxKSA8PCAxMikKKyNkZWZpbmUJCVNfMDA4MDEwX0NCMDNfQ0xFQU4oeCkJCQkoKCh4KSAmIDEpIDw8IDEzKQorI2RlZmluZQkJU18wMDgwMTBfVkdUX0JVU1lfTk9fRE1BKHgpCQkoKCh4KSAmIDEpIDw8IDE2KQorI2RlZmluZQkJU18wMDgwMTBfVkdUX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE3KQorI2RlZmluZQkJU18wMDgwMTBfVEEwM19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxOCkKKyNkZWZpbmUJCVNfMDA4MDEwX1RDX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE5KQorI2RlZmluZQkJU18wMDgwMTBfU1hfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMjApCisjZGVmaW5lCQlTXzAwODAxMF9TSF9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyMSkKKyNkZWZpbmUJCVNfMDA4MDEwX1NQSTAzX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDIyKQorI2RlZmluZQkJU18wMDgwMTBfU01YX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDIzKQorI2RlZmluZQkJU18wMDgwMTBfU0NfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMjQpCisjZGVmaW5lCQlTXzAwODAxMF9QQV9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyNSkKKyNkZWZpbmUJCVNfMDA4MDEwX0RCMDNfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMjYpCisjZGVmaW5lCQlTXzAwODAxMF9DUl9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyNykKKyNkZWZpbmUJCVNfMDA4MDEwX0NQX0NPSEVSRU5DWV9CVVNZKHgpCQkoKCh4KSAmIDEpIDw8IDI4KQorI2RlZmluZQkJU18wMDgwMTBfQ1BfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMjkpCisjZGVmaW5lCQlTXzAwODAxMF9DQjAzX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDMwKQorI2RlZmluZQkJU18wMDgwMTBfR1VJX0FDVElWRSh4KQkJCSgoKHgpICYgMSkgPDwgMzEpCisjZGVmaW5lCQlHXzAwODAxMF9DTURGSUZPX0FWQUlMKHgpCQkoKCh4KSA+PiAwKSAmIDB4MUYpCisjZGVmaW5lCQlHXzAwODAxMF9DUF9SUV9QRU5ESU5HKHgpCQkoKCh4KSA+PiA2KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9DRl9SUV9QRU5ESU5HKHgpCQkoKCh4KSA+PiA3KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9QRl9SUV9QRU5ESU5HKHgpCQkoKCh4KSA+PiA4KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9HUkJNX0VFX0JVU1koeCkJCSgoKHgpID4+IDEwKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9WQ19CVVNZKHgpCQkJKCgoeCkgPj4gMTEpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX0RCMDNfQ0xFQU4oeCkJCQkoKCh4KSA+PiAxMikgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfQ0IwM19DTEVBTih4KQkJCSgoKHgpID4+IDEzKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9WR1RfQlVTWV9OT19ETUEoeCkJCSgoKHgpID4+IDE2KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9WR1RfQlVTWSh4KQkJCSgoKHgpID4+IDE3KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9UQTAzX0JVU1koeCkJCQkoKCh4KSA+PiAxOCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfVENfQlVTWSh4KQkJCSgoKHgpID4+IDE5KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9TWF9CVVNZKHgpCQkJKCgoeCkgPj4gMjApICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX1NIX0JVU1koeCkJCQkoKCh4KSA+PiAyMSkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfU1BJMDNfQlVTWSh4KQkJCSgoKHgpID4+IDIyKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9TTVhfQlVTWSh4KQkJCSgoKHgpID4+IDIzKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9TQ19CVVNZKHgpCQkJKCgoeCkgPj4gMjQpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX1BBX0JVU1koeCkJCQkoKCh4KSA+PiAyNSkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfREIwM19CVVNZKHgpCQkJKCgoeCkgPj4gMjYpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX0NSX0JVU1koeCkJCQkoKCh4KSA+PiAyNykgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfQ1BfQ09IRVJFTkNZX0JVU1koeCkJCSgoKHgpID4+IDI4KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9DUF9CVVNZKHgpCQkJKCgoeCkgPj4gMjkpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX0NCMDNfQlVTWSh4KQkJCSgoKHgpID4+IDMwKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9HVUlfQUNUSVZFKHgpCQkJKCgoeCkgPj4gMzEpICYgMSkKKyNkZWZpbmUJUl8wMDgwMTRfR1JCTV9TVEFUVVMyCQkJMHg4MDE0CisjZGVmaW5lCQlTXzAwODAxNF9DUl9DTEVBTih4KQkJCSgoKHgpICYgMSkgPDwgMCkKKyNkZWZpbmUJCVNfMDA4MDE0X1NNWF9DTEVBTih4KQkJCSgoKHgpICYgMSkgPDwgMSkKKyNkZWZpbmUJCVNfMDA4MDE0X1NQSTBfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgOCkKKyNkZWZpbmUJCVNfMDA4MDE0X1NQSTFfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgOSkKKyNkZWZpbmUJCVNfMDA4MDE0X1NQSTJfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMTApCisjZGVmaW5lCQlTXzAwODAxNF9TUEkzX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDExKQorI2RlZmluZQkJU18wMDgwMTRfVEEwX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDEyKQorI2RlZmluZQkJU18wMDgwMTRfVEExX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDEzKQorI2RlZmluZQkJU18wMDgwMTRfVEEyX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE0KQorI2RlZmluZQkJU18wMDgwMTRfVEEzX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE1KQorI2RlZmluZQkJU18wMDgwMTRfREIwX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE2KQorI2RlZmluZQkJU18wMDgwMTRfREIxX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE3KQorI2RlZmluZQkJU18wMDgwMTRfREIyX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE4KQorI2RlZmluZQkJU18wMDgwMTRfREIzX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDE5KQorI2RlZmluZQkJU18wMDgwMTRfQ0IwX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDIwKQorI2RlZmluZQkJU18wMDgwMTRfQ0IxX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDIxKQorI2RlZmluZQkJU18wMDgwMTRfQ0IyX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDIyKQorI2RlZmluZQkJU18wMDgwMTRfQ0IzX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDIzKQorI2RlZmluZQkJR18wMDgwMTRfQ1JfQ0xFQU4oeCkJCQkoKCh4KSA+PiAwKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9TTVhfQ0xFQU4oeCkJCQkoKCh4KSA+PiAxKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9TUEkwX0JVU1koeCkJCQkoKCh4KSA+PiA4KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9TUEkxX0JVU1koeCkJCQkoKCh4KSA+PiA5KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9TUEkyX0JVU1koeCkJCQkoKCh4KSA+PiAxMCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTRfU1BJM19CVVNZKHgpCQkJKCgoeCkgPj4gMTEpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X1RBMF9CVVNZKHgpCQkJKCgoeCkgPj4gMTIpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X1RBMV9CVVNZKHgpCQkJKCgoeCkgPj4gMTMpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X1RBMl9CVVNZKHgpCQkJKCgoeCkgPj4gMTQpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X1RBM19CVVNZKHgpCQkJKCgoeCkgPj4gMTUpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0RCMF9CVVNZKHgpCQkJKCgoeCkgPj4gMTYpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0RCMV9CVVNZKHgpCQkJKCgoeCkgPj4gMTcpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0RCMl9CVVNZKHgpCQkJKCgoeCkgPj4gMTgpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0RCM19CVVNZKHgpCQkJKCgoeCkgPj4gMTkpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0NCMF9CVVNZKHgpCQkJKCgoeCkgPj4gMjApICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0NCMV9CVVNZKHgpCQkJKCgoeCkgPj4gMjEpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0NCMl9CVVNZKHgpCQkJKCgoeCkgPj4gMjIpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X0NCM19CVVNZKHgpCQkJKCgoeCkgPj4gMjMpICYgMSkKKyNkZWZpbmUJUl8wMDBFNTBfU1JCTV9TVEFUVVMJCQkJMHgwRTUwCisjZGVmaW5lCQlHXzAwMEU1MF9STENfUlFfUEVORElORyh4KQkJKCgoeCkgPj4gMykgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfUkNVX1JRX1BFTkRJTkcoeCkJCSgoKHgpID4+IDQpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX0dSQk1fUlFfUEVORElORyh4KQkJKCgoeCkgPj4gNSkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfSElfUlFfUEVORElORyh4KQkJKCgoeCkgPj4gNikgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfSU9fRVhURVJOX1NJR05BTCh4KQkJKCgoeCkgPj4gNykgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfVk1DX0JVU1koeCkJCQkoKCh4KSA+PiA4KSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9NQ0JfQlVTWSh4KQkJCSgoKHgpID4+IDkpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX01DRFpfQlVTWSh4KQkJCSgoKHgpID4+IDEwKSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9NQ0RZX0JVU1koeCkJCQkoKCh4KSA+PiAxMSkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfTUNEWF9CVVNZKHgpCQkJKCgoeCkgPj4gMTIpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX01DRFdfQlVTWSh4KQkJCSgoKHgpID4+IDEzKSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9TRU1fQlVTWSh4KQkJCSgoKHgpID4+IDE0KSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9STENfQlVTWSh4KQkJCSgoKHgpID4+IDE1KSAmIDEpCisjZGVmaW5lCVJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVAkJCTB4MEU2MAorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9CSUYoeCkJCSgoKHgpICYgMSkgPDwgMSkKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfQ0coeCkJCSgoKHgpICYgMSkgPDwgMikKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfQ01DKHgpCQkoKCh4KSAmIDEpIDw8IDMpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0NTQyh4KQkJKCgoeCkgJiAxKSA8PCA0KQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9EQyh4KQkJKCgoeCkgJiAxKSA8PCA1KQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9HUkJNKHgpCQkoKCh4KSAmIDEpIDw8IDgpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0hEUCh4KQkJKCgoeCkgJiAxKSA8PCA5KQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9JSCh4KQkJKCgoeCkgJiAxKSA8PCAxMCkKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfTUMoeCkJCSgoKHgpICYgMSkgPDwgMTEpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX1JMQyh4KQkJKCgoeCkgJiAxKSA8PCAxMykKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfUk9NKHgpCQkoKCh4KSAmIDEpIDw8IDE0KQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9TRU0oeCkJCSgoKHgpICYgMSkgPDwgMTUpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX1RTQyh4KQkJKCgoeCkgJiAxKSA8PCAxNikKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfVk1DKHgpCQkoKCh4KSAmIDEpIDw8IDE3KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IGI1MTlmYjIuLjYzMTFiMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtNDksOSArNDksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAKKyNpbmNsdWRlICJyYWRlb25fZmFtaWx5LmgiCiAjaW5jbHVkZSAicmFkZW9uX21vZGUuaCIKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCi0jaW5jbHVkZSAicjMwMC5oIgogCiAvKgogICogTW9kdWxlcyBwYXJhbWV0ZXJzLgpAQCAtNjYsNiArNjYsNyBAQAogZXh0ZXJuIGludCByYWRlb25fYmVuY2htYXJraW5nOwogZXh0ZXJuIGludCByYWRlb25fdGVzdGluZzsKIGV4dGVybiBpbnQgcmFkZW9uX2Nvbm5lY3Rvcl90YWJsZTsKK2V4dGVybiBpbnQgcmFkZW9uX3R2OwogCiAvKgogICogQ29weSBmcm9tIHJhZGVvbl9kcnYuaCBzbyB3ZSBkb24ndCBoYXZlIHRvIGluY2x1ZGUgYm90aCBhbmQgaGF2ZSBjb25mbGljdGluZwpAQCAtNzUsNjMgKzc2LDcgQEAKICNkZWZpbmUgUkFERU9OX0lCX1BPT0xfU0laRQkJMTYKICNkZWZpbmUgUkFERU9OX0RFQlVHRlNfTUFYX05VTV9GSUxFUwkzMgogI2RlZmluZSBSQURFT05GQl9DT05OX0xJTUlUCQk0Ci0KLWVudW0gcmFkZW9uX2ZhbWlseSB7Ci0JQ0hJUF9SMTAwLAotCUNISVBfUlYxMDAsCi0JQ0hJUF9SUzEwMCwKLQlDSElQX1JWMjAwLAotCUNISVBfUlMyMDAsCi0JQ0hJUF9SMjAwLAotCUNISVBfUlYyNTAsCi0JQ0hJUF9SUzMwMCwKLQlDSElQX1JWMjgwLAotCUNISVBfUjMwMCwKLQlDSElQX1IzNTAsCi0JQ0hJUF9SVjM1MCwKLQlDSElQX1JWMzgwLAotCUNISVBfUjQyMCwKLQlDSElQX1I0MjMsCi0JQ0hJUF9SVjQxMCwKLQlDSElQX1JTNDAwLAotCUNISVBfUlM0ODAsCi0JQ0hJUF9SUzYwMCwKLQlDSElQX1JTNjkwLAotCUNISVBfUlM3NDAsCi0JQ0hJUF9SVjUxNSwKLQlDSElQX1I1MjAsCi0JQ0hJUF9SVjUzMCwKLQlDSElQX1JWNTYwLAotCUNISVBfUlY1NzAsCi0JQ0hJUF9SNTgwLAotCUNISVBfUjYwMCwKLQlDSElQX1JWNjEwLAotCUNISVBfUlY2MzAsCi0JQ0hJUF9SVjYyMCwKLQlDSElQX1JWNjM1LAotCUNISVBfUlY2NzAsCi0JQ0hJUF9SUzc4MCwKLQlDSElQX1JWNzcwLAotCUNISVBfUlY3MzAsCi0JQ0hJUF9SVjcxMCwKLQlDSElQX1JTODgwLAotCUNISVBfTEFTVCwKLX07Ci0KLWVudW0gcmFkZW9uX2NoaXBfZmxhZ3MgewotCVJBREVPTl9GQU1JTFlfTUFTSyA9IDB4MDAwMGZmZmZVTCwKLQlSQURFT05fRkxBR1NfTUFTSyA9IDB4ZmZmZjAwMDBVTCwKLQlSQURFT05fSVNfTU9CSUxJVFkgPSAweDAwMDEwMDAwVUwsCi0JUkFERU9OX0lTX0lHUCA9IDB4MDAwMjAwMDBVTCwKLQlSQURFT05fU0lOR0xFX0NSVEMgPSAweDAwMDQwMDAwVUwsCi0JUkFERU9OX0lTX0FHUCA9IDB4MDAwODAwMDBVTCwKLQlSQURFT05fSEFTX0hJRVJaID0gMHgwMDEwMDAwMFVMLAotCVJBREVPTl9JU19QQ0lFID0gMHgwMDIwMDAwMFVMLAotCVJBREVPTl9ORVdfTUVNTUFQID0gMHgwMDQwMDAwMFVMLAotCVJBREVPTl9JU19QQ0kgPSAweDAwODAwMDAwVUwsCi0JUkFERU9OX0lTX0lHUEdBUlQgPSAweDAxMDAwMDAwVUwsCi19OwotCisjZGVmaW5lIFJBREVPTl9CSU9TX05VTV9TQ1JBVENICQk4CiAKIC8qCiAgKiBFcnJhdGEgd29ya2Fyb3VuZHMuCkBAIC0xNTEsMTAgKzk2LDIxIEBACiAgKi8KIGJvb2wgcmFkZW9uX2dldF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAorCisvKgorICogRHVtbXkgcGFnZQorICovCitzdHJ1Y3QgcmFkZW9uX2R1bW15X3BhZ2UgeworCXN0cnVjdCBwYWdlCSpwYWdlOworCWRtYV9hZGRyX3QJYWRkcjsKK307CitpbnQgcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJhZGVvbl9kdW1teV9wYWdlX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisKIC8qCiAgKiBDbG9ja3MKICAqLwotCiBzdHJ1Y3QgcmFkZW9uX2Nsb2NrIHsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCBwMXBsbDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCBwMnBsbDsKQEAgLTE2NSw2ICsxMjEsNyBAQAogCXVpbnQzMl90IGRlZmF1bHRfc2NsazsKIH07CiAKKwogLyoKICAqIEZlbmNlcy4KICAqLwpAQCAtMzMxLDE0ICsyODgsMTggQEAKIAlyZXNvdXJjZV9zaXplX3QJCWFwZXJfc2l6ZTsKIAlyZXNvdXJjZV9zaXplX3QJCWFwZXJfYmFzZTsKIAlyZXNvdXJjZV9zaXplX3QJCWFncF9iYXNlOwotCXVuc2lnbmVkCQlndHRfbG9jYXRpb247Ci0JdW5zaWduZWQJCWd0dF9zaXplOwotCXVuc2lnbmVkCQl2cmFtX2xvY2F0aW9uOwogCS8qIGZvciBzb21lIGNoaXBzIHdpdGggPD0gMzJNQiB3ZSBuZWVkIHRvIGxpZQogCSAqIGFib3V0IHZyYW0gc2l6ZSBuZWFyIG1jIGZiIGxvY2F0aW9uICovCi0JdW5zaWduZWQJCW1jX3ZyYW1fc2l6ZTsKKwl1NjQJCQltY192cmFtX3NpemU7CisJdTY0CQkJZ3R0X2xvY2F0aW9uOworCXU2NAkJCWd0dF9zaXplOworCXU2NAkJCWd0dF9zdGFydDsKKwl1NjQJCQlndHRfZW5kOworCXU2NAkJCXZyYW1fbG9jYXRpb247CisJdTY0CQkJdnJhbV9zdGFydDsKKwl1NjQJCQl2cmFtX2VuZDsKIAl1bnNpZ25lZAkJdnJhbV93aWR0aDsKLQl1bnNpZ25lZAkJcmVhbF92cmFtX3NpemU7CisJdTY0CQkJcmVhbF92cmFtX3NpemU7CiAJaW50CQkJdnJhbV9tdHJyOwogCWJvb2wJCQl2cmFtX2lzX2RkcjsKIH07CkBAIC0zODUsNiArMzQ2LDEwIEBACiAJdWludDMyX3QJCWxlbmd0aF9kdzsKIH07CiAKKy8qCisgKiBsb2NraW5nIC0KKyAqIG11dGV4IHByb3RlY3RzIHNjaGVkdWxlZF9pYnMsIHJlYWR5LCBhbGxvY19ibQorICovCiBzdHJ1Y3QgcmFkZW9uX2liX3Bvb2wgewogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiAJc3RydWN0IHJhZGVvbl9vYmplY3QJKnJvYmo7CkBAIC00MTAsNiArMzc1LDE2IEBACiAJYm9vbAkJCXJlYWR5OwogfTsKIAorc3RydWN0IHI2MDBfYmxpdCB7CisJc3RydWN0IHJhZGVvbl9vYmplY3QJKnNoYWRlcl9vYmo7CisJdTY0IHNoYWRlcl9ncHVfYWRkcjsKKwl1MzIgdnNfb2Zmc2V0LCBwc19vZmZzZXQ7CisJdTMyIHN0YXRlX29mZnNldDsKKwl1MzIgc3RhdGVfbGVuOworCXUzMiB2Yl91c2VkLCB2Yl90b3RhbDsKKwlzdHJ1Y3QgcmFkZW9uX2liICp2Yl9pYjsKK307CisKIGludCByYWRlb25faWJfZ2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICoqaWIpOwogdm9pZCByYWRlb25faWJfZnJlZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqKmliKTsKIGludCByYWRlb25faWJfc2NoZWR1bGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKQEAgLTQ2Miw2ICs0MzcsNyBAQAogCWludAkJCWNodW5rX3JlbG9jc19pZHg7CiAJc3RydWN0IHJhZGVvbl9pYgkqaWI7CiAJdm9pZAkJCSp0cmFjazsKKwl1bnNpZ25lZAkJZmFtaWx5OwogfTsKIAogc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgewpAQCAtNTU4LDEzICs1MzQsMTkgQEAKICAqLwogc3RydWN0IHJhZGVvbl9hc2ljIHsKIAlpbnQgKCppbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJdm9pZCAoKmZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwlpbnQgKCpyZXN1bWUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKmVycmF0YSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCp2cmFtX2luZm8pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwl2b2lkICgqdmdhX3NldF9zdGF0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGJvb2wgc3RhdGUpOwogCWludCAoKmdwdV9yZXNldCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKm1jX2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqbWNfZmluaSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKndiX2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqd2JfZmluaSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCWludCAoKmdhcnRfaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCXZvaWQgKCpnYXJ0X2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCpnYXJ0X2VuYWJsZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpnYXJ0X2Rpc2FibGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqZ2FydF90bGJfZmx1c2gpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTU3Miw3ICs1NTQsMTEgQEAKIAlpbnQgKCpjcF9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKIAl2b2lkICgqY3BfZmluaSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpjcF9kaXNhYmxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJdm9pZCAoKmNwX2NvbW1pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpyaW5nX3N0YXJ0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJaW50ICgqcmluZ190ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJdm9pZCAoKnJpbmdfaWJfZXhlY3V0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKKwlpbnQgKCppYl90ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqaXJxX3NldCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKmlycV9wcm9jZXNzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdTMyICgqZ2V0X3ZibGFua19jb3VudGVyKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwpAQCAtNjA0LDggKzU5MCw2MCBAQAogCXZvaWQgKCpiYW5kd2lkdGhfdXBkYXRlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB9OwogCisvKgorICogQXNpYyBzdHJ1Y3R1cmVzCisgKi8KK3N0cnVjdCByMTAwX2FzaWMgeworCWNvbnN0IHVuc2lnbmVkCSpyZWdfc2FmZV9ibTsKKwl1bnNpZ25lZAlyZWdfc2FmZV9ibV9zaXplOworfTsKKworc3RydWN0IHIzMDBfYXNpYyB7CisJY29uc3QgdW5zaWduZWQJKnJlZ19zYWZlX2JtOworCXVuc2lnbmVkCXJlZ19zYWZlX2JtX3NpemU7Cit9OworCitzdHJ1Y3QgcjYwMF9hc2ljIHsKKwl1bnNpZ25lZCBtYXhfcGlwZXM7CisJdW5zaWduZWQgbWF4X3RpbGVfcGlwZXM7CisJdW5zaWduZWQgbWF4X3NpbWRzOworCXVuc2lnbmVkIG1heF9iYWNrZW5kczsKKwl1bnNpZ25lZCBtYXhfZ3ByczsKKwl1bnNpZ25lZCBtYXhfdGhyZWFkczsKKwl1bnNpZ25lZCBtYXhfc3RhY2tfZW50cmllczsKKwl1bnNpZ25lZCBtYXhfaHdfY29udGV4dHM7CisJdW5zaWduZWQgbWF4X2dzX3RocmVhZHM7CisJdW5zaWduZWQgc3hfbWF4X2V4cG9ydF9zaXplOworCXVuc2lnbmVkIHN4X21heF9leHBvcnRfcG9zX3NpemU7CisJdW5zaWduZWQgc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZTsKKwl1bnNpZ25lZCBzcV9udW1fY2ZfaW5zdHM7Cit9OworCitzdHJ1Y3QgcnY3NzBfYXNpYyB7CisJdW5zaWduZWQgbWF4X3BpcGVzOworCXVuc2lnbmVkIG1heF90aWxlX3BpcGVzOworCXVuc2lnbmVkIG1heF9zaW1kczsKKwl1bnNpZ25lZCBtYXhfYmFja2VuZHM7CisJdW5zaWduZWQgbWF4X2dwcnM7CisJdW5zaWduZWQgbWF4X3RocmVhZHM7CisJdW5zaWduZWQgbWF4X3N0YWNrX2VudHJpZXM7CisJdW5zaWduZWQgbWF4X2h3X2NvbnRleHRzOworCXVuc2lnbmVkIG1heF9nc190aHJlYWRzOworCXVuc2lnbmVkIHN4X21heF9leHBvcnRfc2l6ZTsKKwl1bnNpZ25lZCBzeF9tYXhfZXhwb3J0X3Bvc19zaXplOworCXVuc2lnbmVkIHN4X21heF9leHBvcnRfc214X3NpemU7CisJdW5zaWduZWQgc3FfbnVtX2NmX2luc3RzOworCXVuc2lnbmVkIHN4X251bV9vZl9zZXRzOworCXVuc2lnbmVkIHNjX3ByaW1fZmlmb19zaXplOworCXVuc2lnbmVkIHNjX2hpel90aWxlX2ZpZm9fc2l6ZTsKKwl1bnNpZ25lZCBzY19lYXJseXpfdGlsZV9maWZvX2ZpemU7Cit9OworCiB1bmlvbiByYWRlb25fYXNpY19jb25maWcgewogCXN0cnVjdCByMzAwX2FzaWMJcjMwMDsKKwlzdHJ1Y3QgcjEwMF9hc2ljCXIxMDA7CisJc3RydWN0IHI2MDBfYXNpYwlyNjAwOworCXN0cnVjdCBydjc3MF9hc2ljCXJ2NzcwOwogfTsKIAogCkBAIC02NDYsNiArNjg0LDcgQEAKIHR5cGVkZWYgdm9pZCAoKnJhZGVvbl93cmVnX3QpKHN0cnVjdCByYWRlb25fZGV2aWNlKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIAogc3RydWN0IHJhZGVvbl9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OwogCXN0cnVjdCBkcm1fZGV2aWNlCQkqZGRldjsKIAlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OwogCS8qIEFTSUMgKi8KQEAgLTY4OSwxMyArNzI4LDIwIEBACiAJc3RydWN0IHJhZGVvbl9hc2ljCQkqYXNpYzsKIAlzdHJ1Y3QgcmFkZW9uX2dlbQkJZ2VtOwogCXN0cnVjdCByYWRlb25fcG0JCXBtOworCXVpbnQzMl90CQkJYmlvc19zY3JhdGNoW1JBREVPTl9CSU9TX05VTV9TQ1JBVENIXTsKIAlzdHJ1Y3QgbXV0ZXgJCQljc19tdXRleDsKIAlzdHJ1Y3QgcmFkZW9uX3diCQl3YjsKKwlzdHJ1Y3QgcmFkZW9uX2R1bW15X3BhZ2UJZHVtbXlfcGFnZTsKIAlib29sCQkJCWdwdV9sb2NrdXA7CiAJYm9vbAkJCQlzaHV0ZG93bjsKIAlib29sCQkJCXN1c3BlbmQ7CiAJYm9vbAkJCQluZWVkX2RtYTMyOworCWJvb2wJCQkJbmV3X2luaXRfcGF0aDsKKwlib29sCQkJCWFjY2VsX3dvcmtpbmc7CiAJc3RydWN0IHJhZGVvbl9zdXJmYWNlX3JlZyBzdXJmYWNlX3JlZ3NbUkFERU9OX0dFTV9NQVhfU1VSRkFDRVNdOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqbWVfZnc7CS8qIGFsbCBmYW1pbHkgTUUgZmlybXdhcmUgKi8KKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnBmcF9mdzsJLyogcjYvNzAwIFBGUCBmaXJtd2FyZSAqLworCXN0cnVjdCByNjAwX2JsaXQgcjYwMF9ibGl0OwogfTsKIAogaW50IHJhZGVvbl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTcwNSw2ICs3NTEsMTMgQEAKIHZvaWQgcmFkZW9uX2RldmljZV9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByYWRlb25fZ3B1X3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCisvKiByNjAwIGJsaXQgKi8KK2ludCByNjAwX2JsaXRfcHJlcGFyZV9jb3B5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgc2l6ZV9ieXRlcyk7Cit2b2lkIHI2MDBfYmxpdF9kb25lX2NvcHkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKK3ZvaWQgcjYwMF9rbXNfYmxpdF9jb3B5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJdTY0IHNyY19ncHVfYWRkciwgdTY0IGRzdF9ncHVfYWRkciwKKwkJCWludCBzaXplX2J5dGVzKTsKKwogc3RhdGljIGlubGluZSB1aW50MzJfdCByMTAwX21tX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAlpZiAocmVnIDwgMHgxMDAwMCkKQEAgLTczMiw2ICs3ODUsNyBAQAogI2RlZmluZSBSUkVHOChyZWcpIHJlYWRiKCgodm9pZCBfX2lvbWVtICopcmRldi0+cm1taW8pICsgKHJlZykpCiAjZGVmaW5lIFdSRUc4KHJlZywgdikgd3JpdGViKHYsICgodm9pZCBfX2lvbWVtICopcmRldi0+cm1taW8pICsgKHJlZykpCiAjZGVmaW5lIFJSRUczMihyZWcpIHIxMDBfbW1fcnJlZyhyZGV2LCAocmVnKSkKKyNkZWZpbmUgRFJFRzMyKHJlZykgcHJpbnRrKEtFUk5fSU5GTyAiUkVHSVNURVI6ICIgI3JlZyAiIDogMHglMDhYXG4iLCByMTAwX21tX3JyZWcocmRldiwgKHJlZykpKQogI2RlZmluZSBXUkVHMzIocmVnLCB2KSByMTAwX21tX3dyZWcocmRldiwgKHJlZyksICh2KSkKICNkZWZpbmUgUkVHX1NFVChGSUVMRCwgdikgKCgodikgPDwgRklFTEQjI19TSElGVCkgJiBGSUVMRCMjX01BU0spCiAjZGVmaW5lIFJFR19HRVQoRklFTEQsIHYpICgoKHYpIDw8IEZJRUxEIyNfU0hJRlQpICYgRklFTEQjI19NQVNLKQpAQCAtNzU1LDYgKzgwOSw3IEBACiAJCXRtcF8gfD0gKCh2YWwpICYgfihtYXNrKSk7CQkJXAogCQlXUkVHMzJfUExMKHJlZywgdG1wXyk7CQkJCVwKIAl9IHdoaWxlICgwKQorI2RlZmluZSBEUkVHMzJfU1lTKHNxZiwgcmRldiwgcmVnKSBzZXFfcHJpbnRmKChzcWYpLCAjcmVnICIgOiAweCUwOFhcbiIsIHIxMDBfbW1fcnJlZygocmRldiksIChyZWcpKSkKIAogLyoKICAqIEluZGlyZWN0IHJlZ2lzdGVycyBhY2Nlc3NvcgpAQCAtODE5LDUxICs4NzQsNiBAQAogLyoKICAqIFJJTkcgaGVscGVycy4KICAqLwotI2RlZmluZSBDUF9QQUNLRVQwCQkJMHgwMDAwMDAwMAotI2RlZmluZQkJUEFDS0VUMF9CQVNFX0lOREVYX1NISUZUCTAKLSNkZWZpbmUJCVBBQ0tFVDBfQkFTRV9JTkRFWF9NQVNLCQkoMHgxZmZmZiA8PCAwKQotI2RlZmluZQkJUEFDS0VUMF9DT1VOVF9TSElGVAkJMTYKLSNkZWZpbmUJCVBBQ0tFVDBfQ09VTlRfTUFTSwkJKDB4M2ZmZiA8PCAxNikKLSNkZWZpbmUgQ1BfUEFDS0VUMQkJCTB4NDAwMDAwMDAKLSNkZWZpbmUgQ1BfUEFDS0VUMgkJCTB4ODAwMDAwMDAKLSNkZWZpbmUJCVBBQ0tFVDJfUEFEX1NISUZUCQkwCi0jZGVmaW5lCQlQQUNLRVQyX1BBRF9NQVNLCQkoMHgzZmZmZmZmZiA8PCAwKQotI2RlZmluZSBDUF9QQUNLRVQzCQkJMHhDMDAwMDAwMAotI2RlZmluZQkJUEFDS0VUM19JVF9PUENPREVfU0hJRlQJCTgKLSNkZWZpbmUJCVBBQ0tFVDNfSVRfT1BDT0RFX01BU0sJCSgweGZmIDw8IDgpCi0jZGVmaW5lCQlQQUNLRVQzX0NPVU5UX1NISUZUCQkxNgotI2RlZmluZQkJUEFDS0VUM19DT1VOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQotLyogUEFDS0VUMyBvcCBjb2RlICovCi0jZGVmaW5lCQlQQUNLRVQzX05PUAkJCTB4MTAKLSNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGCQkweDI4Ci0jZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU1NRAkJMHgyOQotI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFgJCTB4MkEKLSNkZWZpbmUJCVBBQ0tFVDNfM0RfTE9BRF9WQlBOVFIJCTB4MkYKLSNkZWZpbmUJCVBBQ0tFVDNfSU5EWF9CVUZGRVIJCTB4MzMKLSNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGXzIJCTB4MzQKLSNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1EXzIJCTB4MzUKLSNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTkRYXzIJCTB4MzYKLSNkZWZpbmUJCVBBQ0tFVDNfQklUQkxUX01VTFRJCQkweDlCCi0KLSNkZWZpbmUgUEFDS0VUMChyZWcsIG4pCShDUF9QQUNLRVQwIHwJCQkJCVwKLQkJCSBSRUdfU0VUKFBBQ0tFVDBfQkFTRV9JTkRFWCwgKHJlZykgPj4gMikgfAlcCi0JCQkgUkVHX1NFVChQQUNLRVQwX0NPVU5ULCAobikpKQotI2RlZmluZSBQQUNLRVQyKHYpCShDUF9QQUNLRVQyIHwgUkVHX1NFVChQQUNLRVQyX1BBRCwgKHYpKSkKLSNkZWZpbmUgUEFDS0VUMyhvcCwgbikJKENQX1BBQ0tFVDMgfAkJCQkJXAotCQkJIFJFR19TRVQoUEFDS0VUM19JVF9PUENPREUsIChvcCkpIHwJCVwKLQkJCSBSRUdfU0VUKFBBQ0tFVDNfQ09VTlQsIChuKSkpCi0KLSNkZWZpbmUJUEFDS0VUX1RZUEUwCTAKLSNkZWZpbmUJUEFDS0VUX1RZUEUxCTEKLSNkZWZpbmUJUEFDS0VUX1RZUEUyCTIKLSNkZWZpbmUJUEFDS0VUX1RZUEUzCTMKLQotI2RlZmluZSBDUF9QQUNLRVRfR0VUX1RZUEUoaCkgKCgoaCkgPj4gMzApICYgMykKLSNkZWZpbmUgQ1BfUEFDS0VUX0dFVF9DT1VOVChoKSAoKChoKSA+PiAxNikgJiAweDNGRkYpCi0jZGVmaW5lIENQX1BBQ0tFVDBfR0VUX1JFRyhoKSAoKChoKSAmIDB4MUZGRikgPDwgMikKLSNkZWZpbmUgQ1BfUEFDS0VUMF9HRVRfT05FX1JFR19XUihoKSAoKChoKSA+PiAxNSkgJiAxKQotI2RlZmluZSBDUF9QQUNLRVQzX0dFVF9PUENPREUoaCkgKCgoaCkgPj4gOCkgJiAweEZGKQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX3Jpbmdfd3JpdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHYpCiB7CiAjaWYgRFJNX0RFQlVHX0NPREUKQEAgLTg4MiwxNCArODkyLDIwIEBACiAgKiBBU0lDcyBtYWNyby4KICAqLwogI2RlZmluZSByYWRlb25faW5pdChyZGV2KSAocmRldiktPmFzaWMtPmluaXQoKHJkZXYpKQorI2RlZmluZSByYWRlb25fZmluaShyZGV2KSAocmRldiktPmFzaWMtPmZpbmkoKHJkZXYpKQorI2RlZmluZSByYWRlb25fcmVzdW1lKHJkZXYpIChyZGV2KS0+YXNpYy0+cmVzdW1lKChyZGV2KSkKKyNkZWZpbmUgcmFkZW9uX3N1c3BlbmQocmRldikgKHJkZXYpLT5hc2ljLT5zdXNwZW5kKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2NzX3BhcnNlKHApIHJkZXYtPmFzaWMtPmNzX3BhcnNlKChwKSkKICNkZWZpbmUgcmFkZW9uX2VycmF0YShyZGV2KSAocmRldiktPmFzaWMtPmVycmF0YSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl92cmFtX2luZm8ocmRldikgKHJkZXYpLT5hc2ljLT52cmFtX2luZm8oKHJkZXYpKQorI2RlZmluZSByYWRlb25fdmdhX3NldF9zdGF0ZShyZGV2LCBzdGF0ZSkgKHJkZXYpLT5hc2ljLT52Z2Ffc2V0X3N0YXRlKChyZGV2KSwgKHN0YXRlKSkKICNkZWZpbmUgcmFkZW9uX2dwdV9yZXNldChyZGV2KSAocmRldiktPmFzaWMtPmdwdV9yZXNldCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9tY19pbml0KHJkZXYpIChyZGV2KS0+YXNpYy0+bWNfaW5pdCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9tY19maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+bWNfZmluaSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl93Yl9pbml0KHJkZXYpIChyZGV2KS0+YXNpYy0+d2JfaW5pdCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl93Yl9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+d2JfZmluaSgocmRldikpCisjZGVmaW5lIHJhZGVvbl9ncHVfZ2FydF9pbml0KHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9pbml0KChyZGV2KSkKKyNkZWZpbmUgcmFkZW9uX2dwdV9nYXJ0X2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2ZpbmkoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2FydF9lbmFibGUocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2VuYWJsZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nYXJ0X2Rpc2FibGUocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2Rpc2FibGUoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2FydF90bGJfZmx1c2gocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCgocmRldikpCkBAIC04OTcsNyArOTEzLDExIEBACiAjZGVmaW5lIHJhZGVvbl9jcF9pbml0KHJkZXYscnNpemUpIChyZGV2KS0+YXNpYy0+Y3BfaW5pdCgocmRldiksIChyc2l6ZSkpCiAjZGVmaW5lIHJhZGVvbl9jcF9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZmluaSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZGlzYWJsZSgocmRldikpCisjZGVmaW5lIHJhZGVvbl9jcF9jb21taXQocmRldikgKHJkZXYpLT5hc2ljLT5jcF9jb21taXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ19zdGFydChyZGV2KSAocmRldiktPmFzaWMtPnJpbmdfc3RhcnQoKHJkZXYpKQorI2RlZmluZSByYWRlb25fcmluZ190ZXN0KHJkZXYpIChyZGV2KS0+YXNpYy0+cmluZ190ZXN0KChyZGV2KSkKKyNkZWZpbmUgcmFkZW9uX3JpbmdfaWJfZXhlY3V0ZShyZGV2LCBpYikgKHJkZXYpLT5hc2ljLT5yaW5nX2liX2V4ZWN1dGUoKHJkZXYpLCAoaWIpKQorI2RlZmluZSByYWRlb25faWJfdGVzdChyZGV2KSAocmRldiktPmFzaWMtPmliX3Rlc3QoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3NldChyZGV2KSAocmRldiktPmFzaWMtPmlycV9zZXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3Byb2Nlc3MocmRldikgKHJkZXYpLT5hc2ljLT5pcnFfcHJvY2VzcygocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIocmRldiwgY3J0YykgKHJkZXYpLT5hc2ljLT5nZXRfdmJsYW5rX2NvdW50ZXIoKHJkZXYpLCAoY3J0YykpCkBAIC05MTMsNCArOTMzLDg4IEBACiAjZGVmaW5lIHJhZGVvbl9jbGVhcl9zdXJmYWNlX3JlZyhyZGV2LCByKSAoKHJkZXYpLT5hc2ljLT5jbGVhcl9zdXJmYWNlX3JlZygocmRldiksIChyKSkpCiAjZGVmaW5lIHJhZGVvbl9iYW5kd2lkdGhfdXBkYXRlKHJkZXYpIChyZGV2KS0+YXNpYy0+YmFuZHdpZHRoX3VwZGF0ZSgocmRldikpCiAKKy8qIENvbW1vbiBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByYWRlb25fbW9kZXNldF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9tb2Rlc2V0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGJvb2wgcmFkZW9uX2NhcmRfcG9zdGVkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcmFkZW9uX2Nsb2Nrc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9jbG9ja3NfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByYWRlb25fc2NyYXRjaF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9zdXJmYWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByYWRlb25fY3NfcGFyc2VyX2luaXQoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIHZvaWQgKmRhdGEpOworCisvKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAgKi8KK3N0cnVjdCByMTAwX21jX3NhdmUgeworCXUzMglHRU5NT19XVDsKKwl1MzIJQ1JUQ19FWFRfQ05UTDsKKwl1MzIJQ1JUQ19HRU5fQ05UTDsKKwl1MzIJQ1JUQzJfR0VOX0NOVEw7CisJdTMyCUNVUl9PRkZTRVQ7CisJdTMyCUNVUjJfT0ZGU0VUOworfTsKK2V4dGVybiB2b2lkIHIxMDBfY3BfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfY3BfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKK2V4dGVybiB2b2lkIHIxMDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfcGNpX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX3BjaV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3BjaV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX3BjaV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3BjaV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CitleHRlcm4gaW50IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfaWJfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfaWJfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfbWNfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfbWNfc2F2ZSAqc2F2ZSk7CitleHRlcm4gdm9pZCByMTAwX21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfbWNfc2F2ZSAqc2F2ZSk7CitleHRlcm4gdm9pZCByMTAwX3ZyYW1faW5pdF9zaXplcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX3diX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworLyogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCitleHRlcm4gdm9pZCByMzAwX3NldF9yZWdfc2FmZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByNDIwLHI0MjMscnY0MTAgKi8KK2V4dGVybiB1MzIgcjQyMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnKTsKK2V4dGVybiB2b2lkIHI0MjBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZywgdTMyIHYpOworZXh0ZXJuIGludCByNDIwX2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworLyogcnY1MTUgKi8KK2V4dGVybiB2b2lkIHJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByczY5MCwgcnM3NDAgKi8KK2V4dGVybiB2b2lkIHJzNjkwX2xpbmVfYnVmZmVyX2FkanVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTIpOworCisvKiByNjAwLCBydjYxMCwgcnY2MzAsIHJ2NjIwLCBydjYzNSwgcnY2NzAsIHJzNzgwLCByczg4MCAqLworZXh0ZXJuIGJvb2wgcjYwMF9jYXJkX3Bvc3RlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNjAwX2NwX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF9yaW5nX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CitleHRlcm4gaW50IHI2MDBfY3BfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjYwMF9jb3VudF9waXBlX2JpdHModWludDMyX3QgdmFsKTsKK2V4dGVybiBpbnQgcjYwMF9nYXJ0X2NsZWFyX3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpKTsKK2V4dGVybiBpbnQgcjYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjYwMF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNjAwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX3JpbmdfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI2MDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNjAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX2JsaXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNjAwX2JsaXRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI2MDBfY3BfaW5pdF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IDkzZDhmODguLjg5NjhmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTQyLDIzICs0MiwyOCBAQAogICogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCiAgKi8KIGludCByMTAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCByMTAwX21tX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHIxMDBfbW1fd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcjEwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHIxMDBfdmdhX3NldF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBzdGF0ZSk7CiBpbnQgcjEwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKIGludCByMTAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHIxMDBfcGNpX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHIxMDBfcGNpX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjEwMF9wY2lfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3BjaV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9wY2lfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOwogaW50IHIxMDBfY3BfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKIHZvaWQgcjEwMF9jcF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9jcF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcjEwMF9jcF9jb21taXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC03NywyNCArODIsMzQgQEAKIAkJCSB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IG9ial9zaXplKTsKIGludCByMTAwX2NsZWFyX3N1cmZhY2VfcmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgcmVnKTsKIHZvaWQgcjEwMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcjEwMF9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKK2ludCByMTAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHIxMDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMTAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjEwMF9pbml0LAogCS5lcnJhdGEgPSAmcjEwMF9lcnJhdGEsCiAJLnZyYW1faW5mbyA9ICZyMTAwX3ZyYW1faW5mbywKKwkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMTAwX2dwdV9yZXNldCwKIAkubWNfaW5pdCA9ICZyMTAwX21jX2luaXQsCiAJLm1jX2ZpbmkgPSAmcjEwMF9tY19maW5pLAogCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKIAkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnIxMDBfZ2FydF9lbmFibGUsCisJLmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQsCisJLmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2ZpbmksCisJLmdhcnRfZW5hYmxlID0gJnIxMDBfcGNpX2dhcnRfZW5hYmxlLAogCS5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAogCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKIAkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCiAJLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjEwMF9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0xMjYsNyArMTQxLDkgQEAKIHZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKIGludCByMzAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKLWludCByMzAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjM3MF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2MzcwX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCBydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKQEAgLTE0MywxOSArMTYwLDI2IEBACiAJLmluaXQgPSAmcjMwMF9pbml0LAogCS5lcnJhdGEgPSAmcjMwMF9lcnJhdGEsCiAJLnZyYW1faW5mbyA9ICZyMzAwX3ZyYW1faW5mbywKKwkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKIAkubWNfaW5pdCA9ICZyMzAwX21jX2luaXQsCiAJLm1jX2ZpbmkgPSAmcjMwMF9tY19maW5pLAogCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKIAkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnIzMDBfZ2FydF9lbmFibGUsCisJLmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQsCisJLmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2ZpbmksCisJLmdhcnRfZW5hYmxlID0gJnIxMDBfcGNpX2dhcnRfZW5hYmxlLAogCS5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAogCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKIAkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCiAJLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0xNzYsMjcgKzIwMCwzNSBAQAogLyoKICAqIHI0MjAscjQyMyxydjQxMAogICovCi12b2lkIHI0MjBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjQyMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI0MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNDIwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNDIwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNDIwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHI0MjBfYXNpYyA9IHsKLQkuaW5pdCA9ICZyMzAwX2luaXQsCi0JLmVycmF0YSA9ICZyNDIwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnI0MjBfdnJhbV9pbmZvLAorCS5pbml0ID0gJnI0MjBfaW5pdCwKKwkuZmluaSA9ICZyNDIwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjQyMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjQyMF9yZXN1bWUsCisJLmVycmF0YSA9IE5VTEwsCisJLnZyYW1faW5mbyA9IE5VTEwsCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcjQyMF9tY19pbml0LAotCS5tY19maW5pID0gJnI0MjBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMzAwX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCisJLm1jX2luaXQgPSBOVUxMLAorCS5tY19maW5pID0gTlVMTCwKKwkud2JfaW5pdCA9IE5VTEwsCisJLndiX2ZpbmkgPSBOVUxMLAorCS5nYXJ0X2VuYWJsZSA9IE5VTEwsCisJLmdhcnRfZGlzYWJsZSA9IE5VTEwsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAorCS5jcF9pbml0ID0gTlVMTCwKKwkuY3BfZmluaSA9IE5VTEwsCisJLmNwX2Rpc2FibGUgPSBOVUxMLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9IE5VTEwsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0yMjIsNiArMjU0LDggQEAKIHZvaWQgcnM0MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczQwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM0MDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnM0MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcnM0MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczQwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNDAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTIzMiwxMSArMjY2LDE0IEBACiAJLmluaXQgPSAmcjMwMF9pbml0LAogCS5lcnJhdGEgPSAmcnM0MDBfZXJyYXRhLAogCS52cmFtX2luZm8gPSAmcnM0MDBfdnJhbV9pbmZvLAorCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAogCS5tY19pbml0ID0gJnJzNDAwX21jX2luaXQsCiAJLm1jX2ZpbmkgPSAmcnM0MDBfbWNfZmluaSwKIAkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCiAJLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAorCS5nYXJ0X2luaXQgPSAmcnM0MDBfZ2FydF9pbml0LAorCS5nYXJ0X2ZpbmkgPSAmcnM0MDBfZ2FydF9maW5pLAogCS5nYXJ0X2VuYWJsZSA9ICZyczQwMF9nYXJ0X2VuYWJsZSwKIAkuZ2FydF9kaXNhYmxlID0gJnJzNDAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM0MDBfZ2FydF90bGJfZmx1c2gsCkBAIC0yNDQsNyArMjgxLDExIEBACiAJLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAogCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKIAkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCisJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCisJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKKwkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAorCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyMTAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnIxMDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyMTAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTI2Niw3ICszMDcsNyBAQAogLyoKICAqIHJzNjAwLgogICovCi1pbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqZGV2KTsKK2ludCByczYwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM2MDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM2MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTI3NCw2ICszMTUsOCBAQAogaW50IHJzNjAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKK2ludCByczYwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByczYwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNjAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM2MDBfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM2MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMjg1LDExICszMjgsMTQgQEAKIAkuaW5pdCA9ICZyczYwMF9pbml0LAogCS5lcnJhdGEgPSAmcnM2MDBfZXJyYXRhLAogCS52cmFtX2luZm8gPSAmcnM2MDBfdnJhbV9pbmZvLAorCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAogCS5tY19pbml0ID0gJnJzNjAwX21jX2luaXQsCiAJLm1jX2ZpbmkgPSAmcnM2MDBfbWNfZmluaSwKIAkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCiAJLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAorCS5nYXJ0X2luaXQgPSAmcnM2MDBfZ2FydF9pbml0LAorCS5nYXJ0X2ZpbmkgPSAmcnM2MDBfZ2FydF9maW5pLAogCS5nYXJ0X2VuYWJsZSA9ICZyczYwMF9nYXJ0X2VuYWJsZSwKIAkuZ2FydF9kaXNhYmxlID0gJnJzNjAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM2MDBfZ2FydF90bGJfZmx1c2gsCkBAIC0yOTcsNyArMzQzLDExIEBACiAJLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAogCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKIAkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCisJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCisJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKKwkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAorCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyczYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyczYwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnJzNjAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTMyOCwxMSArMzc4LDE0IEBACiAJLmluaXQgPSAmcnM2MDBfaW5pdCwKIAkuZXJyYXRhID0gJnJzNjkwX2VycmF0YSwKIAkudnJhbV9pbmZvID0gJnJzNjkwX3ZyYW1faW5mbywKKwkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKIAkubWNfaW5pdCA9ICZyczY5MF9tY19pbml0LAogCS5tY19maW5pID0gJnJzNjkwX21jX2ZpbmksCiAJLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAogCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKKwkuZ2FydF9pbml0ID0gJnJzNDAwX2dhcnRfaW5pdCwKKwkuZ2FydF9maW5pID0gJnJzNDAwX2dhcnRfZmluaSwKIAkuZ2FydF9lbmFibGUgPSAmcnM0MDBfZ2FydF9lbmFibGUsCiAJLmdhcnRfZGlzYWJsZSA9ICZyczQwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLApAQCAtMzQwLDcgKzM5MywxMSBAQAogCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKIAkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCiAJLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0zNzgsMTkgKzQzNSwyNiBAQAogCS5pbml0ID0gJnJ2NTE1X2luaXQsCiAJLmVycmF0YSA9ICZydjUxNV9lcnJhdGEsCiAJLnZyYW1faW5mbyA9ICZydjUxNV92cmFtX2luZm8sCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcnY1MTVfZ3B1X3Jlc2V0LAogCS5tY19pbml0ID0gJnJ2NTE1X21jX2luaXQsCiAJLm1jX2ZpbmkgPSAmcnY1MTVfbWNfZmluaSwKIAkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCiAJLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMzAwX2dhcnRfZW5hYmxlLAorCS5nYXJ0X2luaXQgPSAmcnYzNzBfcGNpZV9nYXJ0X2luaXQsCisJLmdhcnRfZmluaSA9ICZydjM3MF9wY2llX2dhcnRfZmluaSwKKwkuZ2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZSwKIAkuZ2FydF9kaXNhYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKIAkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCiAJLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAogCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKKwkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnJ2NTE1X3Jpbmdfc3RhcnQsCisJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKKwkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAorCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyczYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyczYwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnJzNjAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTQyMSwxOSArNDg1LDI2IEBACiAJLmluaXQgPSAmcnY1MTVfaW5pdCwKIAkuZXJyYXRhID0gJnI1MjBfZXJyYXRhLAogCS52cmFtX2luZm8gPSAmcjUyMF92cmFtX2luZm8sCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcnY1MTVfZ3B1X3Jlc2V0LAogCS5tY19pbml0ID0gJnI1MjBfbWNfaW5pdCwKIAkubWNfZmluaSA9ICZyNTIwX21jX2ZpbmksCiAJLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAogCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcjMwMF9nYXJ0X2VuYWJsZSwKKwkuZ2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0LAorCS5nYXJ0X2ZpbmkgPSAmcnYzNzBfcGNpZV9nYXJ0X2ZpbmksCisJLmdhcnRfZW5hYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9lbmFibGUsCiAJLmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCiAJLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAogCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKIAkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCisJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZydjUxNV9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC00NTIsOSArNTIzLDEzMCBAQAogfTsKIAogLyoKLSAqIHI2MDAscnY2MTAscnY2MzAscnY2MjAscnY2MzUscnY2NzAscnM3ODAscnY3NzAscnY3MzAscnY3MTAKKyAqIHI2MDAscnY2MTAscnY2MzAscnY2MjAscnY2MzUscnY2NzAscnM3ODAscnM4ODAKICAqLworaW50IHI2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHI2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByNjAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHI2MDBfdmdhX3NldF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBzdGF0ZSk7CitpbnQgcjYwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcjYwMF9jcF9jb21taXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByNjAwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcjYwMF9wY2llcF9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogdm9pZCByNjAwX3BjaWVwX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CitpbnQgcjYwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7Cit2b2lkIHI2MDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CitpbnQgcjYwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJICB1aW50NjRfdCBzcmNfb2Zmc2V0LAorCQkgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCisJCSAgdW5zaWduZWQgbnVtX3BhZ2VzLAorCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKK2ludCByNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByNjAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI2MDBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByNjAwX3NldF9zdXJmYWNlX3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHJlZywKKwkJCSB1aW50MzJfdCB0aWxpbmdfZmxhZ3MsIHVpbnQzMl90IHBpdGNoLAorCQkJIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgb2JqX3NpemUpOworaW50IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcpOwordm9pZCByNjAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOworaW50IHI2MDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjYwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI2MDBfY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKKworc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNjAwX2FzaWMgPSB7CisJLmVycmF0YSA9IE5VTEwsCisJLmluaXQgPSAmcjYwMF9pbml0LAorCS5maW5pID0gJnI2MDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyNjAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyNjAwX3Jlc3VtZSwKKwkuY3BfY29tbWl0ID0gJnI2MDBfY3BfY29tbWl0LAorCS52cmFtX2luZm8gPSBOVUxMLAorCS52Z2Ffc2V0X3N0YXRlID0gJnI2MDBfdmdhX3NldF9zdGF0ZSwKKwkuZ3B1X3Jlc2V0ID0gJnI2MDBfZ3B1X3Jlc2V0LAorCS5tY19pbml0ID0gTlVMTCwKKwkubWNfZmluaSA9IE5VTEwsCisJLndiX2luaXQgPSAmcjYwMF93Yl9pbml0LAorCS53Yl9maW5pID0gJnI2MDBfd2JfZmluaSwKKwkuZ2FydF9lbmFibGUgPSBOVUxMLAorCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAorCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKKwkuY3BfaW5pdCA9IE5VTEwsCisJLmNwX2ZpbmkgPSBOVUxMLAorCS5jcF9kaXNhYmxlID0gTlVMTCwKKwkucmluZ19zdGFydCA9IE5VTEwsCisJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKKwkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5pYl90ZXN0ID0gJnI2MDBfaWJfdGVzdCwKKwkuaXJxX3NldCA9ICZyNjAwX2lycV9zZXQsCisJLmlycV9wcm9jZXNzID0gJnI2MDBfaXJxX3Byb2Nlc3MsCisJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKKwkuY3NfcGFyc2UgPSAmcjYwMF9jc19wYXJzZSwKKwkuY29weV9ibGl0ID0gJnI2MDBfY29weV9ibGl0LAorCS5jb3B5X2RtYSA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuY29weSA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKKwkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAorCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKKwkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnI1MjBfYmFuZHdpZHRoX3VwZGF0ZSwKK307CisKKy8qCisgKiBydjc3MCxydjczMCxydjcxMCxydjc0MAorICovCitpbnQgcnY3NzBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NzcwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJ2NzcwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJ2NzcwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnY3NzBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBydjc3MF9hc2ljID0geworCS5lcnJhdGEgPSBOVUxMLAorCS5pbml0ID0gJnJ2NzcwX2luaXQsCisJLmZpbmkgPSAmcnY3NzBfZmluaSwKKwkuc3VzcGVuZCA9ICZydjc3MF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnY3NzBfcmVzdW1lLAorCS5jcF9jb21taXQgPSAmcjYwMF9jcF9jb21taXQsCisJLnZyYW1faW5mbyA9IE5VTEwsCisJLmdwdV9yZXNldCA9ICZydjc3MF9ncHVfcmVzZXQsCisJLnZnYV9zZXRfc3RhdGUgPSAmcjYwMF92Z2Ffc2V0X3N0YXRlLAorCS5tY19pbml0ID0gTlVMTCwKKwkubWNfZmluaSA9IE5VTEwsCisJLndiX2luaXQgPSAmcjYwMF93Yl9pbml0LAorCS53Yl9maW5pID0gJnI2MDBfd2JfZmluaSwKKwkuZ2FydF9lbmFibGUgPSBOVUxMLAorCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAorCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKKwkuY3BfaW5pdCA9IE5VTEwsCisJLmNwX2ZpbmkgPSBOVUxMLAorCS5jcF9kaXNhYmxlID0gTlVMTCwKKwkucmluZ19zdGFydCA9IE5VTEwsCisJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKKwkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5pYl90ZXN0ID0gJnI2MDBfaWJfdGVzdCwKKwkuaXJxX3NldCA9ICZyNjAwX2lycV9zZXQsCisJLmlycV9wcm9jZXNzID0gJnI2MDBfaXJxX3Byb2Nlc3MsCisJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKKwkuY3NfcGFyc2UgPSAmcjYwMF9jc19wYXJzZSwKKwkuY29weV9ibGl0ID0gJnI2MDBfY29weV9ibGl0LAorCS5jb3B5X2RtYSA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuY29weSA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKKwkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAorCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKKwkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnI1MjBfYmFuZHdpZHRoX3VwZGF0ZSwKK307CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggZmNmZTVjMC4uNzQzNzQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJCQkgICAgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkJICAgICBpbnQgKmNvbm5lY3Rvcl90eXBlLAogCQkJCSAgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKLQkJCQkgICAgIHVpbnQ4X3QgKmxpbmVfbXV4KQorCQkJCSAgICAgdWludDE2X3QgKmxpbmVfbXV4KQogewogCiAJLyogQXN1cyBNMkEtVk0gSERNSSBib2FyZCBsaXN0cyB0aGUgRFZJIHBvcnQgYXMgSERNSSAqLwpAQCAtMTQzLDIwICsxNDMsMzEgQEAKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBzb21lIEJJT1NlcyBzZWVtIHRvIHJlcG9ydCBEQUMgb24gSERNSSAtIHRoZXkgaHVydCBtZSB3aXRoIHRoZWlyIGxpZXMgKi8KLQlpZiAoKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpIHx8Ci0JICAgICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkgewotCQlpZiAoc3VwcG9ydGVkX2RldmljZSAmIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQogCS8qIEFTVVMgSEQgMzYwMCBYVCBib2FyZCBsaXN0cyB0aGUgRFZJIHBvcnQgYXMgSERNSSAqLwogCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NTk4KSAmJgogCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTA0MykgJiYKIAkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAxZGEpKSB7Ci0JCWlmICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSB7Ci0JCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDsKKwkJaWYgKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpIHsKKwkJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOworCQl9CisJfQorCisJLyogQVNVUyBIRCAzNDUwIGJvYXJkIGxpc3RzIHRoZSBEVkkgcG9ydCBhcyBIRE1JICovCisJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1QzUpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDQzKSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDFlMikpIHsKKwkJaWYgKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpIHsKKwkJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOworCQl9CisJfQorCisJLyogc29tZSBCSU9TZXMgc2VlbSB0byByZXBvcnQgREFDIG9uIEhETUkgLSB1c3VhbGx5IHRoaXMgaXMgYSBib2FyZCB3aXRoCisJICogSERNSSArIFZHQSByZXBvcnRpbmcgYXMgSERNSQorCSAqLworCWlmICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKSB7CisJCWlmIChzdXBwb3J0ZWRfZGV2aWNlICYgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkgeworCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQTsKKwkJCSpsaW5lX211eCA9IDA7CiAJCX0KIAl9CiAKQEAgLTE5MiwxMSArMjAzLDExIEBACiAJRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZSwKIAlEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLAorCURSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLAogCURSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSwKIAlEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIsCi0JRFJNX01PREVfQ09OTkVDVE9SX0hETUlCLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAogCURSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLApAQCAtMjE4LDcgKzIyOSw3IEBACiAJQVRPTV9PQkpFQ1RfSEVBREVSICpvYmpfaGVhZGVyOwogCWludCBpLCBqLCBwYXRoX3NpemUsIGRldmljZV9zdXBwb3J0OwogCWludCBjb25uZWN0b3JfdHlwZTsKLQl1aW50MTZfdCBpZ3BfbGFuZV9pbmZvOworCXVpbnQxNl90IGlncF9sYW5lX2luZm8sIGNvbm5faWQ7CiAJYm9vbCBsaW5rYjsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjIGRkY19idXM7CiAKQEAgLTM3MCwxMCArMzgxLDYgQEAKIAkJCQkJCSAgICAgICAmJiByZWNvcmQtPgogCQkJCQkJICAgICAgIHVjUmVjb3JkVHlwZSA8PQogCQkJCQkJICAgICAgIEFUT01fTUFYX09CSkVDVF9SRUNPUkRfTlVNQkVSKSB7Ci0JCQkJCQkJRFJNX0VSUk9SCi0JCQkJCQkJICAgICgicmVjb3JkIHR5cGUgJWRcbiIsCi0JCQkJCQkJICAgICByZWNvcmQtPgotCQkJCQkJCSAgICAgdWNSZWNvcmRUeXBlKTsKIAkJCQkJCQlzd2l0Y2ggKHJlY29yZC0+CiAJCQkJCQkJCXVjUmVjb3JkVHlwZSkgewogCQkJCQkJCWNhc2UgQVRPTV9JMkNfUkVDT1JEX1RZUEU6CkBAIC00MDksOSArNDE2LDE1IEBACiAJCQllbHNlCiAJCQkJZGRjX2J1cyA9IHJhZGVvbl9sb29rdXBfZ3BpbyhkZXYsIGxpbmVfbXV4KTsKIAorCQkJY29ubl9pZCA9IGxlMTZfdG9fY3B1KHBhdGgtPnVzQ29ubk9iamVjdElkKTsKKworCQkJaWYgKCFyYWRlb25fYXRvbV9hcHBseV9xdWlya3MKKwkJCSAgICAoZGV2LCBsZTE2X3RvX2NwdShwYXRoLT51c0RldmljZVRhZyksICZjb25uZWN0b3JfdHlwZSwKKwkJCSAgICAgJmRkY19idXMsICZjb25uX2lkKSkKKwkJCQljb250aW51ZTsKKwogCQkJcmFkZW9uX2FkZF9hdG9tX2Nvbm5lY3RvcihkZXYsCi0JCQkJCQkgIGxlMTZfdG9fY3B1KHBhdGgtPgotCQkJCQkJCSAgICAgIHVzQ29ubk9iamVjdElkKSwKKwkJCQkJCSAgY29ubl9pZCwKIAkJCQkJCSAgbGUxNl90b19jcHUocGF0aC0+CiAJCQkJCQkJICAgICAgdXNEZXZpY2VUYWcpLAogCQkJCQkJICBjb25uZWN0b3JfdHlwZSwgJmRkY19idXMsCkBAIC00MjcsNyArNDQwLDcgQEAKIAogc3RydWN0IGJpb3NfY29ubmVjdG9yIHsKIAlib29sIHZhbGlkOwotCXVpbnQ4X3QgbGluZV9tdXg7CisJdWludDE2X3QgbGluZV9tdXg7CiAJdWludDE2X3QgZGV2aWNlczsKIAlpbnQgY29ubmVjdG9yX3R5cGU7CiAJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBkZGNfYnVzOwpAQCAtNDcxLDExICs0ODQsNiBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoaSA9PSBBVE9NX0RFVklDRV9UVjFfSU5ERVgpIHsKLQkJCURSTV9ERUJVRygiU2tpcHBpbmcgVFYgT3V0XG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJYmlvc19jb25uZWN0b3JzW2ldLmNvbm5lY3Rvcl90eXBlID0KIAkJICAgIHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9jb252ZXJ0W2NpLnN1Y0Nvbm5lY3RvckluZm8uCiAJCQkJCQkJc2JmQWNjZXNzLgpAQCAtNzExLDkgKzcxOSw4IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnJhZGVvbl9hdG9tYmlvc19nZXRfdG1kc19pbmZvKHN0cnVjdAotCQkJCQkJCSAgICAgIHJhZGVvbl9lbmNvZGVyCi0JCQkJCQkJICAgICAgKmVuY29kZXIpCitib29sIHJhZGVvbl9hdG9tYmlvc19nZXRfdG1kc19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnRtZHMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTcyNCw3ICs3MzEsNiBAQAogCXVpbnQ4X3QgZnJldiwgY3JldjsKIAl1aW50MTZfdCBtYXhmcmVxOwogCWludCBpOwotCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqdG1kcyA9IE5VTEw7CiAKIAlhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgTlVMTCwgJmZyZXYsCiAJCQkgICAgICAgJmNyZXYsICZkYXRhX29mZnNldCk7CkBAIC03MzQsMTIgKzc0MCw2IEBACiAJCQkJICAgICAgIGRhdGFfb2Zmc2V0KTsKIAogCWlmICh0bWRzX2luZm8pIHsKLQkJdG1kcyA9Ci0JCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMpLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoIXRtZHMpCi0JCQlyZXR1cm4gTlVMTDsKLQogCQltYXhmcmVxID0gbGUxNl90b19jcHUodG1kc19pbmZvLT51c01heEZyZXF1ZW5jeSk7CiAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCXRtZHMtPnRtZHNfcGxsW2ldLmZyZXEgPQpAQCAtNzY1LDggKzc2NSw5IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJcmV0dXJuIHRydWU7CiAJfQotCXJldHVybiB0bWRzOworCXJldHVybiBmYWxzZTsKIH0KIAogdW5pb24gbHZkc19pbmZvIHsKQEAgLTg1OCw2ICs4NTksNzIgQEAKIAlyZXR1cm4gcF9kYWM7CiB9CiAKK2Jvb2wgcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpbmRleCwKKwkJCQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OICpjcnRjX3RpbWluZywKKwkJCQlpbnQzMl90ICpwaXhlbF9jbG9jaykKK3sKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwlBVE9NX0FOQUxPR19UVl9JTkZPICp0dl9pbmZvOworCUFUT01fQU5BTE9HX1RWX0lORk9fVjFfMiAqdHZfaW5mb192MV8yOworCUFUT01fRFREX0ZPUk1BVCAqZHRkX3RpbWluZ3M7CisJaW50IGRhdGFfaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBbmFsb2dUVl9JbmZvKTsKKwl1OCBmcmV2LCBjcmV2OworCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCisJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgZGF0YV9pbmRleCwgTlVMTCwgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJc3dpdGNoIChjcmV2KSB7CisJY2FzZSAxOgorCQl0dl9pbmZvID0gKEFUT01fQU5BTE9HX1RWX0lORk8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisJCWlmIChpbmRleCA+IE1BWF9TVVBQT1JURURfVFZfVElNSU5HKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1RvdGFsKTsKKwkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKKwkJY3J0Y190aW1pbmctPnVzSF9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCk7CisJCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOworCisJCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1RvdGFsKTsKKwkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKKwkJY3J0Y190aW1pbmctPnVzVl9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCk7CisJCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOworCisJCWNydGNfdGltaW5nLT5zdXNNb2RlTWlzY0luZm8gPSB0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnN1c01vZGVNaXNjSW5mbzsKKworCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhblJpZ2h0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfT3ZlcnNjYW5SaWdodCk7CisJCWNydGNfdGltaW5nLT51Y092ZXJzY2FuTGVmdCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuTGVmdCk7CisJCWNydGNfdGltaW5nLT51Y092ZXJzY2FuQm90dG9tID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfT3ZlcnNjYW5Cb3R0b20pOworCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhblRvcCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuVG9wKTsKKwkJKnBpeGVsX2Nsb2NrID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c1BpeGVsQ2xvY2spICogMTA7CisKKwkJaWYgKGluZGV4ID09IDEpIHsKKwkJCS8qIFBBTCB0aW1pbmdzIGFwcGVhciB0byBoYXZlIHdyb25nIHZhbHVlcyBmb3IgdG90YWxzICovCisJCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsIC09IDE7CisJCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsIC09IDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0dl9pbmZvX3YxXzIgPSAoQVRPTV9BTkFMT0dfVFZfSU5GT19WMV8yICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOworCQlpZiAoaW5kZXggPiBNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR19WMV8yKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWR0ZF90aW1pbmdzID0gJnR2X2luZm9fdjFfMi0+YU1vZGVUaW1pbmdzW2luZGV4XTsKKwkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEJsYW5raW5nX1RpbWUpOworCQljcnRjX3RpbWluZy0+dXNIX0Rpc3AgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQWN0aXZlKTsKKwkJY3J0Y190aW1pbmctPnVzSF9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hTeW5jT2Zmc2V0KTsKKwkJY3J0Y190aW1pbmctPnVzSF9TeW5jV2lkdGggPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY1dpZHRoKTsKKwkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkJsYW5raW5nX1RpbWUpOworCQljcnRjX3RpbWluZy0+dXNWX0Rpc3AgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKTsKKwkJY3J0Y190aW1pbmctPnVzVl9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jT2Zmc2V0KTsKKwkJY3J0Y190aW1pbmctPnVzVl9TeW5jV2lkdGggPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY1dpZHRoKTsKKworCQljcnRjX3RpbWluZy0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7CisJCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1BpeENsaykgKiAxMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiB0cnVlOworfQorCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICoKIHJhZGVvbl9hdG9tYmlvc19nZXRfdHZfZGFjX2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKQogewpAQCAtOTQ4LDEwICsxMDE1LDEwIEBACiAJdWludDMyX3QgYmlvc18yX3NjcmF0Y2gsIGJpb3NfNl9zY3JhdGNoOwogCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKLQkJYmlvc18yX3NjcmF0Y2ggPSBSUkVHMzIoUjYwMF9CSU9TXzBfU0NSQVRDSCk7CisJCWJpb3NfMl9zY3JhdGNoID0gUlJFRzMyKFI2MDBfQklPU18yX1NDUkFUQ0gpOwogCQliaW9zXzZfc2NyYXRjaCA9IFJSRUczMihSNjAwX0JJT1NfNl9TQ1JBVENIKTsKIAl9IGVsc2UgewotCQliaW9zXzJfc2NyYXRjaCA9IFJSRUczMihSQURFT05fQklPU18wX1NDUkFUQ0gpOworCQliaW9zXzJfc2NyYXRjaCA9IFJSRUczMihSQURFT05fQklPU18yX1NDUkFUQ0gpOwogCQliaW9zXzZfc2NyYXRjaCA9IFJSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gpOwogCX0KIApAQCAtOTcxLDYgKzEwMzgsMzQgQEAKIAogfQogCit2b2lkIHJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQzMl90IHNjcmF0Y2hfcmVnOworCWludCBpOworCisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCXNjcmF0Y2hfcmVnID0gUjYwMF9CSU9TXzBfU0NSQVRDSDsKKwllbHNlCisJCXNjcmF0Y2hfcmVnID0gUkFERU9OX0JJT1NfMF9TQ1JBVENIOworCisJZm9yIChpID0gMDsgaSA8IFJBREVPTl9CSU9TX05VTV9TQ1JBVENIOyBpKyspCisJCXJkZXYtPmJpb3Nfc2NyYXRjaFtpXSA9IFJSRUczMihzY3JhdGNoX3JlZyArIChpICogNCkpOworfQorCit2b2lkIHJhZGVvbl9yZXN0b3JlX2Jpb3Nfc2NyYXRjaF9yZWdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQzMl90IHNjcmF0Y2hfcmVnOworCWludCBpOworCisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCXNjcmF0Y2hfcmVnID0gUjYwMF9CSU9TXzBfU0NSQVRDSDsKKwllbHNlCisJCXNjcmF0Y2hfcmVnID0gUkFERU9OX0JJT1NfMF9TQ1JBVENIOworCisJZm9yIChpID0gMDsgaSA8IFJBREVPTl9CSU9TX05VTV9TQ1JBVENIOyBpKyspCisJCVdSRUczMihzY3JhdGNoX3JlZyArIChpICogNCksIHJkZXYtPmJpb3Nfc2NyYXRjaFtpXSk7Cit9CisKIHZvaWQgcmFkZW9uX2F0b21fb3V0cHV0X2xvY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIGxvY2spCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggYTM3Y2JjZS4uMTUyZWVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKQEAgLTEwMiwxMCArMTAyLDEyIEBACiAJCQlwMXBsbC0+cmVmZXJlbmNlX2RpdiA9IDEyOwogCQlpZiAocDJwbGwtPnJlZmVyZW5jZV9kaXYgPCAyKQogCQkJcDJwbGwtPnJlZmVyZW5jZV9kaXYgPSAxMjsKLQkJaWYgKHNwbGwtPnJlZmVyZW5jZV9kaXYgPCAyKQotCQkJc3BsbC0+cmVmZXJlbmNlX2RpdiA9Ci0JCQkgICAgUlJFRzMyX1BMTChSQURFT05fTV9TUExMX1JFRl9GQl9ESVYpICYKLQkJCSAgICBSQURFT05fTV9TUExMX1JFRl9ESVZfTUFTSzsKKwkJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUlM2MDApIHsKKwkJCWlmIChzcGxsLT5yZWZlcmVuY2VfZGl2IDwgMikKKwkJCQlzcGxsLT5yZWZlcmVuY2VfZGl2ID0KKwkJCQkJUlJFRzMyX1BMTChSQURFT05fTV9TUExMX1JFRl9GQl9ESVYpICYKKwkJCQkJUkFERU9OX01fU1BMTF9SRUZfRElWX01BU0s7CisJCX0KIAkJaWYgKG1wbGwtPnJlZmVyZW5jZV9kaXYgPCAyKQogCQkJbXBsbC0+cmVmZXJlbmNlX2RpdiA9IHNwbGwtPnJlZmVyZW5jZV9kaXY7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCAyYTAyN2UwLi43NDgyNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC04NjMsOCArODYzLDEwIEBACiAJaW50IHRtcCwgaTsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfbHZkcyAqbHZkcyA9IE5VTEw7CiAKLQlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlyZXR1cm4gcmFkZW9uX2xlZ2FjeV9nZXRfbHZkc19pbmZvX2Zyb21fcmVncyhyZGV2KTsKKwlpZiAocmRldi0+YmlvcyA9PSBOVUxMKSB7CisJCWx2ZHMgPSByYWRlb25fbGVnYWN5X2dldF9sdmRzX2luZm9fZnJvbV9yZWdzKHJkZXYpOworCQlnb3RvIG91dDsKKwl9CiAKIAlsY2RfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfTENEX0lORk9fVEFCTEUpOwogCkBAIC05NjUsMTEgKzk2NywxMyBAQAogCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmZsYWdzID0gMDsKIAkJCX0KIAkJfQotCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCX0gZWxzZSB7CiAJCURSTV9JTkZPKCJObyBwYW5lbCBpbmZvIGZvdW5kIGluIEJJT1NcbiIpOwotCQlyZXR1cm4gcmFkZW9uX2xlZ2FjeV9nZXRfbHZkc19pbmZvX2Zyb21fcmVncyhyZGV2KTsKKwkJbHZkcyA9IHJhZGVvbl9sZWdhY3lfZ2V0X2x2ZHNfaW5mb19mcm9tX3JlZ3MocmRldik7CiAJfQorb3V0OgorCWlmIChsdmRzKQorCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCXJldHVybiBsdmRzOwogfQogCkBAIC05OTQsNDggKzk5OCwzNyBAQAogCXt7MTUwMDAsIDB4YjAxNTV9LCB7MHhmZmZmZmZmZiwgMHhiMDFjYn0sIHswLCAwfSwgezAsIDB9fSwJLyogQ0hJUF9SUzQ4MCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcwotICAgICpyYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV90YWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2Jvb2wgcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fdGFibGUoc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGk7Ci0Jc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzID0gTlVMTDsKLQotCXRtZHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghdG1kcykKLQkJcmV0dXJuIE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXRtZHMtPnRtZHNfcGxsW2ldLnZhbHVlID0KLQkJICAgIGRlZmF1bHRfdG1kc19wbGxbcmRldi0+ZmFtaWx5XVtpXS52YWx1ZTsKKwkJCWRlZmF1bHRfdG1kc19wbGxbcmRldi0+ZmFtaWx5XVtpXS52YWx1ZTsKIAkJdG1kcy0+dG1kc19wbGxbaV0uZnJlcSA9IGRlZmF1bHRfdG1kc19wbGxbcmRldi0+ZmFtaWx5XVtpXS5mcmVxOwogCX0KIAotCXJldHVybiB0bWRzOworCXJldHVybiB0cnVlOwogfQogCi1zdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnJhZGVvbl9jb21iaW9zX2dldF90bWRzX2luZm8oc3RydWN0Ci0JCQkJCQkJICAgICByYWRlb25fZW5jb2RlcgotCQkJCQkJCSAgICAgKmVuY29kZXIpCitib29sIHJhZGVvbl9sZWdhY3lfZ2V0X3RtZHNfaW5mb19mcm9tX2NvbWJpb3Moc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnRtZHMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MTZfdCB0bWRzX2luZm87CiAJaW50IGksIG47CiAJdWludDhfdCB2ZXI7Ci0Jc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzID0gTlVMTDsKIAogCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCXJldHVybiByYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV90YWJsZShyZGV2KTsKKwkJcmV0dXJuIGZhbHNlOwogCiAJdG1kc19pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19ERlBfSU5GT19UQUJMRSk7CiAKIAlpZiAodG1kc19pbmZvKSB7Ci0JCXRtZHMgPQotCQkgICAga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCF0bWRzKQotCQkJcmV0dXJuIE5VTEw7CiAKIAkJdmVyID0gUkJJT1M4KHRtZHNfaW5mbyk7CiAJCURSTV9JTkZPKCJERlAgdGFibGUgcmV2aXNpb246ICVkXG4iLCB2ZXIpOwpAQCAtMTA3Myw2ICsxMDY2LDIzIEBACiAJCX0KIAl9IGVsc2UKIAkJRFJNX0lORk8oIk5vIFRNRFMgaW5mbyBmb3VuZCBpbiBCSU9TXG4iKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICpyYWRlb25fY29tYmlvc19nZXRfdG1kc19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnRtZHMgPSBOVUxMOworCWJvb2wgcmV0OworCisJdG1kcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyksIEdGUF9LRVJORUwpOworCisJaWYgKCF0bWRzKQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9IHJhZGVvbl9sZWdhY3lfZ2V0X3RtZHNfaW5mb19mcm9tX2NvbWJpb3MoZW5jb2RlciwgdG1kcyk7CisJaWYgKHJldCA9PSBmYWxzZSkKKwkJcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fdGFibGUoZW5jb2RlciwgdG1kcyk7CisKIAlyZXR1cm4gdG1kczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IDcwZWRlNmEuLmFmMWQ1NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXRvbS5oIgogCiBleHRlcm4gdm9pZAogcmFkZW9uX2NvbWJpb3NfY29ubmVjdGVkX3NjcmF0Y2hfcmVncyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLApAQCAtMzgsNiArMzksMTUgQEAKIAkJCQkgICAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgICAgICBib29sIGNvbm5lY3RlZCk7CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9wcm9wZXJ0eV9jaGFuZ2VfbW9kZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZW5jb2Rlci0+Y3J0YzsKKworCWlmIChjcnRjICYmIGNydGMtPmVuYWJsZWQpIHsKKwkJZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKGNydGMsICZjcnRjLT5tb2RlLAorCQkJCQkgY3J0Yy0+eCwgY3J0Yy0+eSwgY3J0Yy0+ZmIpOworCX0KK30KIHN0YXRpYyB2b2lkCiByYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3Moc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMpCiB7CkBAIC03Nyw2ICs4NywyNyBAQAogCX0KIH0KIAorc3RydWN0IGRybV9lbmNvZGVyICpyYWRlb25fZmluZF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBlbmNvZGVyX3R5cGUpCit7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBEUk1fQ09OTkVDVE9SX01BWF9FTkNPREVSOyBpKyspIHsKKwkJaWYgKGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbaV0gPT0gMCkKKwkJCWJyZWFrOworCisJCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGNvbm5lY3Rvci0+ZGV2LCBjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldLCBEUk1fTU9ERV9PQkpFQ1RfRU5DT0RFUik7CisJCWlmICghb2JqKQorCQkJY29udGludWU7CisKKwkJZW5jb2RlciA9IG9ial90b19lbmNvZGVyKG9iaik7CisJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0gZW5jb2Rlcl90eXBlKQorCQkJcmV0dXJuIGVuY29kZXI7CisJfQorCXJldHVybiBOVUxMOworfQorCiBzdHJ1Y3QgZHJtX2VuY29kZXIgKnJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJaW50IGVuY19pZCA9IGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbMF07CkBAIC05NCw2ICsxMjUsNTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIHJhZGVvbl9jb25uZWN0b3JfYW5hbG9nX2VuY29kZXJfY29uZmxpY3Rfc29sdmUKKyAqIC0gc2VhcmNoIGZvciBvdGhlciBjb25uZWN0b3JzIHNoYXJpbmcgdGhpcyBlbmNvZGVyCisgKiAgIGlmIHByaW9yaXR5IGlzIHRydWUsIHRoZW4gc2V0IHRoZW0gZGlzY29ubmVjdGVkIGlmIHRoaXMgaXMgY29ubmVjdGVkCisgKiAgIGlmIHByaW9yaXR5IGlzIGZhbHNlLCBzZXQgdXMgZGlzY29ubmVjdGVkIGlmIHRoZXkgYXJlIGNvbm5lY3RlZAorICovCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworcmFkZW9uX2Nvbm5lY3Rvcl9hbmFsb2dfZW5jb2Rlcl9jb25mbGljdF9zb2x2ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgICAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgICAgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBjdXJyZW50X3N0YXR1cywKKwkJCQkJICAgICAgIGJvb2wgcHJpb3JpdHkpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25mbGljdDsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29uZmxpY3QsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlmIChjb25mbGljdCA9PSBjb25uZWN0b3IpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7CisJCQlpZiAoY29uZmxpY3QtPmVuY29kZXJfaWRzW2ldID09IDApCisJCQkJYnJlYWs7CisKKwkJCS8qIGlmIHRoZSBJRHMgbWF0Y2ggKi8KKwkJCWlmIChjb25mbGljdC0+ZW5jb2Rlcl9pZHNbaV0gPT0gZW5jb2Rlci0+YmFzZS5pZCkgeworCQkJCWlmIChjb25mbGljdC0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQorCQkJCQljb250aW51ZTsKKworCQkJCWlmIChwcmlvcml0eSA9PSB0cnVlKSB7CisJCQkJCURSTV9JTkZPKCIxOiBjb25mbGljdGluZyBlbmNvZGVycyBzd2l0Y2hpbmcgb2ZmICVzXG4iLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbmZsaWN0KSk7CisJCQkJCURSTV9JTkZPKCJpbiBmYXZvciBvZiAlc1xuIiwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJCQkJY29uZmxpY3QtPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQkJCQlyYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3MoY29uZmxpY3QsIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKTsKKwkJCQl9IGVsc2UgeworCQkJCQlEUk1fSU5GTygiMjogY29uZmxpY3RpbmcgZW5jb2RlcnMgc3dpdGNoaW5nIG9mZiAlc1xuIiwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJCQkJRFJNX0lORk8oImluIGZhdm9yIG9mICVzXG4iLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbmZsaWN0KSk7CisJCQkJCWN1cnJlbnRfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiBjdXJyZW50X3N0YXR1czsKKworfQorCiBzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnJhZGVvbl9mcF9uYXRpdmVfbW9kZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKQEAgLTEyNiwxMiArMjA0LDE3MSBAQAogCXJldHVybiBtb2RlOwogfQogCitzdGF0aWMgdm9pZCByYWRlb25fYWRkX2NvbW1vbl9tb2RlcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOworCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlpbnQgaTsKKwlzdHJ1Y3QgbW9kZV9zaXplIHsKKwkJaW50IHc7CisJCWludCBoOworCX0gY29tbW9uX21vZGVzWzE3XSA9IHsKKwkJeyA2NDAsICA0ODB9LAorCQl7IDcyMCwgIDQ4MH0sCisJCXsgODAwLCAgNjAwfSwKKwkJeyA4NDgsICA0ODB9LAorCQl7MTAyNCwgIDc2OH0sCisJCXsxMTUyLCAgNzY4fSwKKwkJezEyODAsICA3MjB9LAorCQl7MTI4MCwgIDgwMH0sCisJCXsxMjgwLCAgODU0fSwKKwkJezEyODAsICA5NjB9LAorCQl7MTI4MCwgMTAyNH0sCisJCXsxNDQwLCAgOTAwfSwKKwkJezE0MDAsIDEwNTB9LAorCQl7MTY4MCwgMTA1MH0sCisJCXsxNjAwLCAxMjAwfSwKKwkJezE5MjAsIDEwODB9LAorCQl7MTkyMCwgMTIwMH0KKwl9OworCisJZm9yIChpID0gMDsgaSA8IDE3OyBpKyspIHsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgeworCQkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53ID4gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgfHwKKwkJCSAgICBjb21tb25fbW9kZXNbaV0uaCA+IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzIHx8CisJCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICYmCisJCQkgICAgIGNvbW1vbl9tb2Rlc1tpXS5oID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPCAzMjAgfHwgY29tbW9uX21vZGVzW2ldLmggPCAyMDApCisJCQljb250aW51ZTsKKworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgY29tbW9uX21vZGVzW2ldLncsIGNvbW1vbl9tb2Rlc1tpXS5oLCA2MCwgZmFsc2UsIGZhbHNlKTsKKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCX0KK30KKwogaW50IHJhZGVvbl9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAogCQkJCSAgdWludDY0X3QgdmFsKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXI7CisKKwlpZiAocHJvcGVydHkgPT0gcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHkpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWc7CisKKwkJLyogbmVlZCB0byBmaW5kIGRpZ2l0YWwgZW5jb2RlciBvbiBjb25uZWN0b3IgKi8KKwkJZW5jb2RlciA9IHJhZGVvbl9maW5kX2VuY29kZXIoY29ubmVjdG9yLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOworCQlpZiAoIWVuY29kZXIpCisJCQlyZXR1cm4gMDsKKworCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCisJCWlmICghcmFkZW9uX2VuY29kZXItPmVuY19wcml2KQorCQkJcmV0dXJuIDA7CisKKwkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQlkaWctPmNvaGVyZW50X21vZGUgPSB2YWwgPyB0cnVlIDogZmFsc2U7CisJCXJhZGVvbl9wcm9wZXJ0eV9jaGFuZ2VfbW9kZSgmcmFkZW9uX2VuY29kZXItPmJhc2UpOworCX0KKworCWlmIChwcm9wZXJ0eSA9PSByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5KSB7CisJCWVuY29kZXIgPSByYWRlb25fZmluZF9lbmNvZGVyKGNvbm5lY3RvciwgRFJNX01PREVfRU5DT0RFUl9UVkRBQyk7CisJCWlmICghZW5jb2RlcikgeworCQkJZW5jb2RlciA9IHJhZGVvbl9maW5kX2VuY29kZXIoY29ubmVjdG9yLCBEUk1fTU9ERV9FTkNPREVSX0RBQyk7CisJCX0KKworCQlpZiAoIWVuY29kZXIpCisJCQlyZXR1cm4gMDsKKworCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQlpZiAoIXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdikKKwkJCXJldHVybiAwOworCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKmRhY19pbnQ7CisJCQlkYWNfaW50ID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJZGFjX2ludC0+dHZfc3RkID0gdmFsOworCQl9IGVsc2UgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqZGFjX2ludDsKKwkJCWRhY19pbnQgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCQlkYWNfaW50LT50dl9zdGQgPSB2YWw7CisJCX0KKwkJcmFkZW9uX3Byb3BlcnR5X2NoYW5nZV9tb2RlKCZyYWRlb25fZW5jb2Rlci0+YmFzZSk7CisJfQorCisJaWYgKHByb3BlcnR5ID09IHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSkgeworCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9CisJCQl0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwkJaWYgKHZhbCA9PSAwKQorCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gZmFsc2U7CisJCWVsc2UKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CisJfQorCisJaWYgKHByb3BlcnR5ID09IHJkZXYtPm1vZGVfaW5mby50bWRzX3BsbF9wcm9wZXJ0eSkgeworCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnRtZHMgPSBOVUxMOworCQlib29sIHJldCA9IGZhbHNlOworCQkvKiBuZWVkIHRvIGZpbmQgZGlnaXRhbCBlbmNvZGVyIG9uIGNvbm5lY3RvciAqLworCQllbmNvZGVyID0gcmFkZW9uX2ZpbmRfZW5jb2Rlcihjb25uZWN0b3IsIERSTV9NT0RFX0VOQ09ERVJfVE1EUyk7CisJCWlmICghZW5jb2RlcikKKwkJCXJldHVybiAwOworCisJCXJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisKKwkJdG1kcyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJaWYgKCF0bWRzKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHZhbCA9PSAwKSB7CisJCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKQorCQkJCXJldCA9IHJhZGVvbl9hdG9tYmlvc19nZXRfdG1kc19pbmZvKHJhZGVvbl9lbmNvZGVyLCB0bWRzKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSByYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV9jb21iaW9zKHJhZGVvbl9lbmNvZGVyLCB0bWRzKTsKKwkJfQorCQlpZiAodmFsID09IDEgfHwgcmV0ID09IGZhbHNlKSB7CisJCQlyYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV90YWJsZShyYWRlb25fZW5jb2RlciwgdG1kcyk7CisJCX0KKwkJcmFkZW9uX3Byb3BlcnR5X2NoYW5nZV9tb2RlKCZyYWRlb25fZW5jb2Rlci0+YmFzZSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9maXh1cF9sdmRzX25hdGl2ZV9tb2RlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPQl0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CisKKwkvKiBUcnkgdG8gZ2V0IG5hdGl2ZSBtb2RlIGRldGFpbHMgZnJvbSBFRElEIGlmIG5lY2Vzc2FyeSAqLworCWlmICghbmF0aXZlX21vZGUtPmRvdGNsb2NrKSB7CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0LCAqbW9kZTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7CisJCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgJiYKKwkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgeworCQkJCW5hdGl2ZV9tb2RlLT5oYmxhbmsgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oZGlzcGxheTsKKwkJCQluYXRpdmVfbW9kZS0+aG92ZXJwbHVzID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKKwkJCQluYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwkJCQluYXRpdmVfbW9kZS0+dmJsYW5rID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXk7CisJCQkJbmF0aXZlX21vZGUtPnZvdmVycGx1cyA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7CisJCQkJbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJCQkJbmF0aXZlX21vZGUtPmRvdGNsb2NrID0gbW9kZS0+Y2xvY2s7CisJCQkJRFJNX0lORk8oIkRldGVybWluZWQgTFZEUyBuYXRpdmUgbW9kZSBkZXRhaWxzIGZyb20gRURJRFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKCFuYXRpdmVfbW9kZS0+ZG90Y2xvY2spIHsKKwkJRFJNX0lORk8oIk5vIExWRFMgbmF0aXZlIG1vZGUgZGV0YWlscywgZGlzYWJsaW5nIFJNWFxuIik7CisJCXJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9IFJNWF9PRkY7CisJfQorfQogCiBzdGF0aWMgaW50IHJhZGVvbl9sdmRzX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewpAQCAtMTQzLDYgKzM4MCwxMiBAQAogCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7CiAJCXJldCA9IHJhZGVvbl9kZGNfZ2V0X21vZGVzKHJhZGVvbl9jb25uZWN0b3IpOwogCQlpZiAocmV0ID4gMCkgeworCQkJZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisJCQlpZiAoZW5jb2RlcikgeworCQkJCXJhZGVvbl9maXh1cF9sdmRzX25hdGl2ZV9tb2RlKGVuY29kZXIsIGNvbm5lY3Rvcik7CisJCQkJLyogYWRkIHNjYWxlZCBtb2RlcyAqLworCQkJCXJhZGVvbl9hZGRfY29tbW9uX21vZGVzKGVuY29kZXIsIGNvbm5lY3Rvcik7CisJCQl9CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMTU2LDcgKzM5OSwxMCBAQAogCWlmIChtb2RlKSB7CiAJCXJldCA9IDE7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKKwkJLyogYWRkIHNjYWxlZCBtb2RlcyAqLworCQlyYWRlb25fYWRkX2NvbW1vbl9tb2RlcyhlbmNvZGVyLCBjb25uZWN0b3IpOwogCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4Niw2ICs0MzIsNDIgQEAKIAlrZnJlZShjb25uZWN0b3IpOwogfQogCitzdGF0aWMgaW50IHJhZGVvbl9sdmRzX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJCQkgICAgdWludDY0X3QgdmFsdWUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXI7CisJZW51bSByYWRlb25fcm14X3R5cGUgcm14X3R5cGU7CisKKwlEUk1fREVCVUcoIlxuIik7CisJaWYgKHByb3BlcnR5ICE9IGRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5KQorCQlyZXR1cm4gMDsKKworCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCisJCXJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoY29ubmVjdG9yLT5lbmNvZGVyKTsKKwllbHNlIHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzICpjb25uZWN0b3JfZnVuY3MgPSBjb25uZWN0b3ItPmhlbHBlcl9wcml2YXRlOworCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGNvbm5lY3Rvcl9mdW5jcy0+YmVzdF9lbmNvZGVyKGNvbm5lY3RvcikpOworCX0KKworCXN3aXRjaCAodmFsdWUpIHsKKwljYXNlIERSTV9NT0RFX1NDQUxFX05PTkU6IHJteF90eXBlID0gUk1YX09GRjsgYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9TQ0FMRV9DRU5URVI6IHJteF90eXBlID0gUk1YX0NFTlRFUjsgYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1Q6IHJteF90eXBlID0gUk1YX0FTUEVDVDsgYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU46IHJteF90eXBlID0gUk1YX0ZVTEw7IGJyZWFrOworCX0KKwlpZiAocmFkZW9uX2VuY29kZXItPnJteF90eXBlID09IHJteF90eXBlKQorCQlyZXR1cm4gMDsKKworCXJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9IHJteF90eXBlOworCisJcmFkZW9uX3Byb3BlcnR5X2NoYW5nZV9tb2RlKCZyYWRlb25fZW5jb2Rlci0+YmFzZSk7CisJcmV0dXJuIDA7Cit9CisKKwogc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdldF9tb2RlcyA9IHJhZGVvbl9sdmRzX2dldF9tb2RlcywKIAkubW9kZV92YWxpZCA9IHJhZGVvbl9sdmRzX21vZGVfdmFsaWQsCkBAIC0xOTcsNyArNDc5LDcgQEAKIAkuZGV0ZWN0ID0gcmFkZW9uX2x2ZHNfZGV0ZWN0LAogCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAogCS5kZXN0cm95ID0gcmFkZW9uX2Nvbm5lY3Rvcl9kZXN0cm95LAotCS5zZXRfcHJvcGVydHkgPSByYWRlb25fY29ubmVjdG9yX3NldF9wcm9wZXJ0eSwKKwkuc2V0X3Byb3BlcnR5ID0gcmFkZW9uX2x2ZHNfc2V0X3Byb3BlcnR5LAogfTsKIAogc3RhdGljIGludCByYWRlb25fdmdhX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQpAQCAtMjEzLDcgKzQ5NSw2IEBACiBzdGF0aWMgaW50IHJhZGVvbl92Z2FfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7Ci0KIAlyZXR1cm4gTU9ERV9PSzsKIH0KIApAQCAtMjI1LDIyICs1MDYsMjQgQEAKIAlib29sIGRyZXQ7CiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAorCWVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOworCWlmICghZW5jb2RlcikKKwkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CiAJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwogCWlmIChkcmV0KQogCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAllbHNlIHsKLQkJLyogaWYgRURJRCBmYWlscyB0byBhIGxvYWQgZGV0ZWN0ICovCi0JCWVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOwotCQlpZiAoIWVuY29kZXIpCi0JCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQkJZWxzZSB7CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpIHsKIAkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOwogCQl9CiAJfQogCisJaWYgKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKKwkJcmV0ID0gcmFkZW9uX2Nvbm5lY3Rvcl9hbmFsb2dfZW5jb2Rlcl9jb25mbGljdF9zb2x2ZShjb25uZWN0b3IsIGVuY29kZXIsIHJldCwgdHJ1ZSk7CiAJcmFkZW9uX2Nvbm5lY3Rvcl91cGRhdGVfc2NyYXRjaF9yZWdzKGNvbm5lY3RvciwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjU5LDIxICs1NDIsOTcgQEAKIAkuc2V0X3Byb3BlcnR5ID0gcmFkZW9uX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCiB9OwogCitzdGF0aWMgaW50IHJhZGVvbl90dl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0dl9tb2RlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKworCWVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOworCWlmICghZW5jb2RlcikKKwkJcmV0dXJuIDA7CisKKwkvKiBhdml2byBjaGlwcyBjYW4gc2NhbGUgYW55IG1vZGUgKi8KKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlM2MDApCisJCS8qIGFkZCBzY2FsZWQgbW9kZXMgKi8KKwkJcmFkZW9uX2FkZF9jb21tb25fbW9kZXMoZW5jb2RlciwgY29ubmVjdG9yKTsKKwllbHNlIHsKKwkJLyogb25seSA4MDB4NjAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgb24gcHJlLWF2aXZvIGNoaXBzICovCisJCXR2X21vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCA4MDAsIDYwMCwgNjAsIGZhbHNlLCBmYWxzZSk7CisJCXR2X21vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgdHZfbW9kZSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJhZGVvbl90dl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJhZGVvbl90dl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpCisJCXJldHVybiByZXQ7CisKKwllbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKKwlpZiAoIWVuY29kZXIpCisJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCWVsc2UgeworCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOworCX0KKwlpZiAocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQorCQlyZXQgPSByYWRlb25fY29ubmVjdG9yX2FuYWxvZ19lbmNvZGVyX2NvbmZsaWN0X3NvbHZlKGNvbm5lY3RvciwgZW5jb2RlciwgcmV0LCBmYWxzZSk7CisJcmFkZW9uX2Nvbm5lY3Rvcl91cGRhdGVfc2NyYXRjaF9yZWdzKGNvbm5lY3RvciwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgcmFkZW9uX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHJhZGVvbl90dl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSByYWRlb25fdHZfbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIsCit9OworCitzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyByYWRlb25fdHZfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gcmFkZW9uX3R2X2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IHJhZGVvbl9jb25uZWN0b3JfZGVzdHJveSwKKwkuc2V0X3Byb3BlcnR5ID0gcmFkZW9uX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCit9OworCiBzdGF0aWMgaW50IHJhZGVvbl9kdmlfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CiAJaW50IHJldDsKIAogCXJldCA9IHJhZGVvbl9kZGNfZ2V0X21vZGVzKHJhZGVvbl9jb25uZWN0b3IpOwotCS8qIHJlc2V0IHNjcmF0Y2ggcmVncyBoZXJlIHNpbmNlIHJhZGVvbl9kdmlfZGV0ZWN0IGRvZXNuJ3QgY2hlY2sgZGlnaXRhbCBiaXQgKi8KLQlyYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3MoY29ubmVjdG9yLCBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCk7CiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIERWSSBpcyBjb21wbGljYXRlZAorICogRG8gYSBEREMgcHJvYmUsIGlmIEREQyBwcm9iZSBwYXNzZXMsIGdldCB0aGUgZnVsbCBFRElEIHNvCisgKiB3ZSBjYW4gZG8gYW5hbG9nL2RpZ2l0YWwgbW9uaXRvciBkZXRlY3Rpb24gYXQgdGhpcyBwb2ludC4KKyAqIElmIHRoZSBtb25pdG9yIGlzIGFuIGFuYWxvZyBtb25pdG9yIG9yIHdlIGdvdCBubyBEREMsCisgKiB3ZSBuZWVkIHRvIGZpbmQgdGhlIERBQyBlbmNvZGVyIG9iamVjdCBmb3IgdGhpcyBjb25uZWN0b3IuCisgKiBJZiB3ZSBnb3Qgbm8gRERDLCB3ZSBkbyBsb2FkIGRldGVjdGlvbiBvbiB0aGUgREFDIGVuY29kZXIgb2JqZWN0LgorICogSWYgd2UgZ290IGFuYWxvZyBEREMgb3IgbG9hZCBkZXRlY3Rpb24gcGFzc2VzIG9uIHRoZSBEQUMgZW5jb2RlcgorICogd2UgaGF2ZSB0byBjaGVjayBpZiB0aGlzIGFuYWxvZyBlbmNvZGVyIGlzIHNoYXJlZCB3aXRoIGFueW9uZSBlbHNlIChUVikKKyAqIGlmIGl0cyBzaGFyZWQgd2UgaGF2ZSB0byBzZXQgdGhlIG90aGVyIGNvbm5lY3RvciB0byBkaXNjb25uZWN0ZWQuCisgKi8KIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJhZGVvbl9kdmlfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CiAJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJaW50IGk7CkBAIC0yODMsOSArNjQyLDI5IEBACiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKLQlpZiAoZHJldCkKLQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JZWxzZSB7CisJaWYgKGRyZXQpIHsKKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKKworCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCURSTV9FUlJPUigiRERDIHJlc3BvbmRlZCBidXQgbm90IEVESUQgZm91bmQgZm9yICVzXG4iLAorCQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJfSBlbHNlIHsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gISEocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKKworCQkJLyogaWYgdGhpcyBpc24ndCBhIGRpZ2l0YWwgbW9uaXRvcgorCQkJICAgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGFueQorCQkJICAgVFYgY29uZmxpY3RzICovCisJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0KKworCWlmICgocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSAmJiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPT0gdHJ1ZSkpCisJCWdvdG8gb3V0OworCisJLyogZmluZCBhbmFsb2cgZW5jb2RlciAqLworCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpIHsKIAkJZm9yIChpID0gMDsgaSA8IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7IGkrKykgewogCQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbaV0gPT0gMCkKIAkJCQlicmVhazsKQEAgLTMwMCwxNSArNjc5LDIzIEBACiAKIAkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJCWlmIChlbmNvZGVyX2Z1bmNzLT5kZXRlY3QpIHsKLQkJCQlyZXQgPSBlbmNvZGVyX2Z1bmNzLT5kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKTsKLQkJCQlpZiAocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7Ci0JCQkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gMDsKLQkJCQkJYnJlYWs7CisJCQkJaWYgKHJldCAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgeworCQkJCQlyZXQgPSBlbmNvZGVyX2Z1bmNzLT5kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKTsKKwkJCQkJaWYgKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgeworCQkJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSBmYWxzZTsKKwkJCQkJfQogCQkJCX0KKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KIAorCWlmICgocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSAmJiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPT0gZmFsc2UpICYmCisJICAgIGVuY29kZXIpIHsKKwkJcmV0ID0gcmFkZW9uX2Nvbm5lY3Rvcl9hbmFsb2dfZW5jb2Rlcl9jb25mbGljdF9zb2x2ZShjb25uZWN0b3IsIGVuY29kZXIsIHJldCwgdHJ1ZSk7CisJfQorCitvdXQ6CiAJLyogdXBkYXRlZCBpbiBnZXQgbW9kZXMgYXMgd2VsbCBzaW5jZSB3ZSBuZWVkIHRvIGtub3cgaWYgaXQncyBhbmFsb2cgb3IgZGlnaXRhbCAqLwogCXJhZGVvbl9jb25uZWN0b3JfdXBkYXRlX3NjcmF0Y2hfcmVncyhjb25uZWN0b3IsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTMzMiw3ICs3MTksNyBAQAogCiAJCWVuY29kZXIgPSBvYmpfdG9fZW5jb2RlcihvYmopOwogCi0JCWlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCkgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPT0gdHJ1ZSkgewogCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSA9PSBEUk1fTU9ERV9FTkNPREVSX1RNRFMpCiAJCQkJcmV0dXJuIGVuY29kZXI7CiAJCX0gZWxzZSB7CkBAIC0zNzksMTYgKzc2NiwxNCBAQAogCQkJICBib29sIGxpbmtiLAogCQkJICB1aW50MzJfdCBpZ3BfbGFuZV9pbmZvKQogeworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpyYWRlb25fZGlnX2Nvbm5lY3RvcjsKIAl1aW50MzJfdCBzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsTm9uZTsKIAogCS8qIGZpeG1lIC0gdHYvY3YvZGluICovCi0JaWYgKChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikgfHwKLQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8pIHx8Ci0JICAgIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlKSB8fAotCSAgICAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU4pKQorCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKIAkJcmV0dXJuOwogCiAJLyogc2VlIGlmIHdlIGFscmVhZHkgYWRkZWQgaXQgKi8KQEAgLTQxNyw2ICs4MDIsOSBAQAogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCisJCQkJCSAgICAgIDEpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7CkBAIC00MjYsNiArODE0LDkgQEAKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgpAQCAtNDQzLDYgKzgzNCwxMiBAQAogCQkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCXN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxIb3Jpem9udGFsUkdCOworCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHksCisJCQkJCSAgICAgIDEpOworCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUI6CkBAIC00NTksNiArODU2LDkgQEAKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHksCisJCQkJCSAgICAgIDEpOwogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CkBAIC00ODAsNiArODgwLDEzIEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOOgorCQlpZiAocmFkZW9uX3R2ID09IDEpIHsKKwkJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOworCQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQl9CisJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCisJCQkJCSAgICAgIDEpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgogCQlyYWRlb25fZGlnX2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnKSwgR0ZQX0tFUk5FTCk7CkBAIC00OTUsNiArOTAyLDEwIEBACiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJZHJtX21vZGVfY3JlYXRlX3NjYWxpbmdfbW9kZV9wcm9wZXJ0eShkZXYpOworCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCisJCQkJCSAgICAgIERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4pOwogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKIAkJYnJlYWs7CiAJfQpAQCAtNTE3LDE1ICs5MjgsMTMgQEAKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cykKIHsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKIAl1aW50MzJfdCBzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsTm9uZTsKIAogCS8qIGZpeG1lIC0gdHYvY3YvZGluICovCi0JaWYgKChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikgfHwKLQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8pIHx8Ci0JICAgIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlKSB8fAotCSAgICAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU4pKQorCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKIAkJcmV0dXJuOwogCiAJLyogc2VlIGlmIHdlIGFscmVhZHkgYWRkZWQgaXQgKi8KQEAgLTU1NCw2ICs5NjMsOSBAQAogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCisJCQkJCSAgICAgIDEpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7CkBAIC01NjMsNiArOTc1LDkgQEAKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgpAQCAtNTcyLDEyICs5ODcsMjIgQEAKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKKwkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkJICAgICAgMSk7CiAJCX0KIAkJc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKKwkJaWYgKHJhZGVvbl90diA9PSAxKSB7CisJCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKKwkJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkJICAgICAgMSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKQEAgLTU4Nyw2ICsxMDEyLDkgQEAKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCisJCQkJCSAgICAgIERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4pOwogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggN2E1MmM0Ni4uNGY3YWZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC0zNiwxMCArMzYsMjUgQEAKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAjaW5jbHVkZSAicjMwMF9yZWcuaCIKIAotI2luY2x1ZGUgInJhZGVvbl9taWNyb2NvZGUuaCIKLQogI2RlZmluZSBSQURFT05fRklGT19ERUJVRwkwCiAKKy8qIEZpcm13YXJlIE5hbWVzICovCisjZGVmaW5lIEZJUk1XQVJFX1IxMDAJCSJyYWRlb24vUjEwMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1IyMDAJCSJyYWRlb24vUjIwMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1IzMDAJCSJyYWRlb24vUjMwMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1I0MjAJCSJyYWRlb24vUjQyMF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1JTNjkwCQkicmFkZW9uL1JTNjkwX2NwLmJpbiIKKyNkZWZpbmUgRklSTVdBUkVfUlM2MDAJCSJyYWRlb24vUlM2MDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SNTIwCQkicmFkZW9uL1I1MjBfY3AuYmluIgorCitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjEwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjIwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjMwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjQyMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUlM2OTApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1JTNjAwKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SNTIwKTsKKwogc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBzdGF0aWMgdm9pZCByYWRlb25fZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiAKQEAgLTQ2MCwzNyArNDc1LDM0IEBACiAgKi8KIAogLyogTG9hZCB0aGUgbWljcm9jb2RlIGZvciB0aGUgQ1AgKi8KLXN0YXRpYyB2b2lkIHJhZGVvbl9jcF9sb2FkX21pY3JvY29kZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIGludCByYWRlb25fY3BfaW5pdF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQogewotCWludCBpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3QgY2hhciAqZndfbmFtZSA9IE5VTEw7CisJaW50IGVycjsKKwogCURSTV9ERUJVRygiXG4iKTsKIAotCXJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmFkZW9uX2NwIiwgMCwgTlVMTCwgMCk7CisJZXJyID0gSVNfRVJSKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyYWRlb25fY3A6IEZhaWxlZCB0byByZWdpc3RlciBmaXJtd2FyZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0FERFIsIDApOwogCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SMTAwKSB8fAogCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjEwMCkgfHwKIAkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYyMDApIHx8CiAJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTMTAwKSB8fAogCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzIwMCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjEwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFILAotCQkJCSAgICAgUjEwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCi0JCQkJICAgICBSMTAwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1IxMDA7CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SMjAwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjI1MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYyODApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTMzAwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSMjAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCi0JCQkJICAgICBSMjAwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKLQkJCQkgICAgIFIyMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUjIwMDsKIAl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1IzMDApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1IzNTApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMzUwKSB8fApAQCAtNDk4LDM5ICs1MTAsMTkgQEAKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSMzAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCi0JCQkJICAgICBSMzAwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKLQkJCQkgICAgIFIzMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUjMwMDsKIAl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I0MjApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I0MjMpIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNDEwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSNDAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCi0JCQkJICAgICBSNDIwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKLQkJCQkgICAgIFI0MjBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUjQyMDsKIAl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUlM2OTAvUlM3NDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwKLQkJCQkgICAgIFJTNjkwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKLQkJCQkgICAgIFJTNjkwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1JTNjkwOwogCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSUzYwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFILAotCQkJCSAgICAgUlM2MDBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAotCQkJCSAgICAgUlM2MDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUlM2MDA7CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjUyMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MzApIHx8CkBAIC01MzgsMTEgKzUzMCw0MSBAQAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjU2MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1NzApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFI1MDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCWZ3X25hbWUgPSBGSVJNV0FSRV9SNTIwOworCX0KKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmRldl9wcml2LT5tZV9mdywgZndfbmFtZSwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInJhZGVvbl9jcDogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkgICAgICAgZndfbmFtZSk7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+bWVfZnctPnNpemUgJSA4KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInJhZGVvbl9jcDogQm9ndXMgbGVuZ3RoICV6dSBpbiBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bWVfZnctPnNpemUsIGZ3X25hbWUpOworCQllcnIgPSAtRUlOVkFMOworCQlyZWxlYXNlX2Zpcm13YXJlKGRldl9wcml2LT5tZV9mdyk7CisJCWRldl9wcml2LT5tZV9mdyA9IE5VTEw7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJhZGVvbl9jcF9sb2FkX21pY3JvY29kZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJY29uc3QgX19iZTMyICpmd19kYXRhOworCWludCBpLCBzaXplOworCisJcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOworCisJaWYgKGRldl9wcml2LT5tZV9mdykgeworCQlzaXplID0gZGV2X3ByaXYtPm1lX2Z3LT5zaXplIC8gNDsKKwkJZndfZGF0YSA9IChjb25zdCBfX2JlMzIgKikmZGV2X3ByaXYtPm1lX2Z3LT5kYXRhWzBdOworCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9BRERSLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gMikgewogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCi0JCQkJICAgICBSNTIwX2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQkJICAgICBiZTMyX3RvX2NwdXAoJmZ3X2RhdGFbaV0pKTsKIAkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAotCQkJCSAgICAgUjUyMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQkJCSAgICAgYmUzMl90b19jcHVwKCZmd19kYXRhW2kgKyAxXSkpOwogCQl9CiAJfQogfQpAQCAtNTk0LDYgKzYxNiwxOCBAQAogCiAJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAxOwogCisJLyogb24gcjQyMCwgYW55IERNQSBmcm9tIENQIHRvIHN5c3RlbSBtZW1vcnkgd2hpbGUgMkQgaXMgYWN0aXZlCisJICogY2FuIGNhdXNlIGEgaGFuZy4gIHdvcmthcm91bmQgaXMgdG8gcXVldWUgYSBDUCBSRVNZTkMgdG9rZW4KKwkgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIwKSB7CisJCUJFR0lOX1JJTkcoMyk7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUjMwMF9DUF9SRVNZTkNfQUREUiwgMSkpOworCQlPVVRfUklORyg1KTsgLyogc2NyYXRjaCByZWcgNSAqLworCQlPVVRfUklORygweGRlYWRiZWVmKTsKKwkJQURWQU5DRV9SSU5HKCk7CisJCUNPTU1JVF9SSU5HKCk7CisJfQorCiAJQkVHSU5fUklORyg4KTsKIAkvKiBpc3luYyBjYW4gb25seSBiZSB3cml0dGVuIHRocm91Z2ggY3Agb24gcjV4eCB3cml0ZSBpdCBoZXJlICovCiAJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fSVNZTkNfQ05UTCwgMCkpOwpAQCAtNjMxLDggKzY2NSwxOSBAQAogICovCiBzdGF0aWMgdm9pZCByYWRlb25fZG9fY3Bfc3RvcChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQogeworCVJJTkdfTE9DQUxTOwogCURSTV9ERUJVRygiXG4iKTsKIAorCS8qIGZpbmlzaCB0aGUgcGVuZGluZyBDUF9SRVNZTkMgdG9rZW4gKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIwKSB7CisJCUJFR0lOX1JJTkcoMik7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUjMwMF9SQjNEX0RTVENBQ0hFX0NUTFNUQVQsIDApKTsKKwkJT1VUX1JJTkcoUjMwMF9SQjNEX0RDX0ZJTklTSCk7CisJCUFEVkFOQ0VfUklORygpOworCQlDT01NSVRfUklORygpOworCQlyYWRlb25fZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CisJfQorCiAJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9DU1FfQ05UTCwgUkFERU9OX0NTUV9QUklESVNfSU5ERElTKTsKIAogCWRldl9wcml2LT5jcF9ydW5uaW5nID0gMDsKQEAgLTE0OTUsNiArMTU0MCwxNCBAQAogCQlyYWRlb25fc2V0X3BjaWdhcnQoZGV2X3ByaXYsIDEpOwogCX0KIAorCWlmICghZGV2X3ByaXYtPm1lX2Z3KSB7CisJCWludCBlcnIgPSByYWRlb25fY3BfaW5pdF9taWNyb2NvZGUoZGV2X3ByaXYpOworCQlpZiAoZXJyKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIVxuIik7CisJCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KIAlyYWRlb25fY3BfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOwogCXJhZGVvbl9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYsIGZpbGVfcHJpdik7CiAKQEAgLTE3NjQsNiArMTgxNywxNCBAQAogCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CiAJCWVsc2UKIAkJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CisJCWlmIChkZXZfcHJpdi0+bWVfZncpIHsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZGV2X3ByaXYtPm1lX2Z3KTsKKwkJCWRldl9wcml2LT5tZV9mdyA9IE5VTEw7CisJCX0KKwkJaWYgKGRldl9wcml2LT5wZnBfZncpIHsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZGV2X3ByaXYtPnBmcF9mdyk7CisJCQlkZXZfcHJpdi0+cGZwX2Z3ID0gTlVMTDsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXggYTE2OTA2Ny4uMTJmNTk5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJY2RhdGEgPSAodWludDMyX3QgKikodW5zaWduZWQgbG9uZyl1c2VyX2NodW5rLmNodW5rX2RhdGE7CiAKIAkJc2l6ZSA9IHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiBzaXplb2YodWludDMyX3QpOwotCQlwLT5jaHVua3NbaV0ua2RhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlwLT5jaHVua3NbaV0ua2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC0xODUsNiArMTg1LDcgQEAKIAkJCW11dGV4X3VubG9jaygmcGFyc2VyLT5yZGV2LT5kZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQl9CiAJfQorCWtmcmVlKHBhcnNlci0+dHJhY2spOwogCWtmcmVlKHBhcnNlci0+cmVsb2NzKTsKIAlrZnJlZShwYXJzZXItPnJlbG9jc19wdHIpOwogCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5jaHVua3M7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCA3NjkzZjdjLi5kYWY1ZGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+CisjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+CiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9hc2ljLmgiCkBAIC0zNyw3ICszOCw3IEBACiAvKgogICogQ2xlYXIgR1BVIHN1cmZhY2UgcmVnaXN0ZXJzLgogICovCi1zdGF0aWMgdm9pZCByYWRlb25fc3VyZmFjZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByYWRlb25fc3VyZmFjZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIEZJWE1FOiBjaGVjayB0aGlzIG91dCAqLwogCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1I2MDApIHsKQEAgLTU2LDcgKzU3LDcgQEAKIC8qCiAgKiBHUFUgc2NyYXRjaCByZWdpc3RlcnMgaGVscGVycyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmFkZW9uX3NjcmF0Y2hfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcmFkZW9uX3NjcmF0Y2hfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgaTsKIApAQCAtMTU2LDE2ICsxNTcsMTggQEAKIAkJdG1wID0gKHRtcCArIHJkZXYtPm1jLmd0dF9zaXplIC0gMSkgJiB+KHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7CiAJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKIAl9Ci0JRFJNX0lORk8oInJhZGVvbjogVlJBTSAldU1cbiIsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4+IDIwKTsKKwlyZGV2LT5tYy52cmFtX3N0YXJ0ID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOworCXJkZXYtPm1jLmd0dF9zdGFydCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKKwlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOworCURSTV9JTkZPKCJyYWRlb246IFZSQU0gJXVNXG4iLCAodW5zaWduZWQpKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+PiAyMCkpOwogCURSTV9JTkZPKCJyYWRlb246IFZSQU0gZnJvbSAweCUwOFggdG8gMHglMDhYXG4iLAotCQkgcmRldi0+bWMudnJhbV9sb2NhdGlvbiwKLQkJIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxKTsKLQlpZiAocmRldi0+bWMucmVhbF92cmFtX3NpemUgIT0gcmRldi0+bWMubWNfdnJhbV9zaXplKQotCQlEUk1fSU5GTygicmFkZW9uOiBWUkFNIGxlc3MgdGhhbiBhcGVydHVyZSB3b3JrYXJvdW5kIGVuYWJsZWRcbiIpOwotCURSTV9JTkZPKCJyYWRlb246IEdUVCAldU1cbiIsIHJkZXYtPm1jLmd0dF9zaXplID4+IDIwKTsKKwkJICh1bnNpZ25lZClyZGV2LT5tYy52cmFtX2xvY2F0aW9uLAorCQkgKHVuc2lnbmVkKShyZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSkpOworCURSTV9JTkZPKCJyYWRlb246IEdUVCAldU1cbiIsICh1bnNpZ25lZCkocmRldi0+bWMuZ3R0X3NpemUgPj4gMjApKTsKIAlEUk1fSU5GTygicmFkZW9uOiBHVFQgZnJvbSAweCUwOFggdG8gMHglMDhYXG4iLAotCQkgcmRldi0+bWMuZ3R0X2xvY2F0aW9uLAotCQkgcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKKwkJICh1bnNpZ25lZClyZGV2LT5tYy5ndHRfbG9jYXRpb24sCisJCSAodW5zaWduZWQpKHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMSkpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzMsNyArMTc2LDcgQEAKIC8qCiAgKiBHUFUgaGVscGVycyBmdW5jdGlvbi4KICAqLwotc3RhdGljIGJvb2wgcmFkZW9uX2NhcmRfcG9zdGVkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorYm9vbCByYWRlb25fY2FyZF9wb3N0ZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgcmVnOwogCkBAIC0yMDUsNiArMjA4LDMxIEBACiAKIH0KIAoraW50IHJhZGVvbl9kdW1teV9wYWdlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmRldi0+ZHVtbXlfcGFnZS5wYWdlID0gYWxsb2NfcGFnZShHRlBfRE1BMzIgfCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKHJkZXYtPmR1bW15X3BhZ2UucGFnZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZGV2LT5kdW1teV9wYWdlLmFkZHIgPSBwY2lfbWFwX3BhZ2UocmRldi0+cGRldiwgcmRldi0+ZHVtbXlfcGFnZS5wYWdlLAorCQkJCQkwLCBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKCFyZGV2LT5kdW1teV9wYWdlLmFkZHIpIHsKKwkJX19mcmVlX3BhZ2UocmRldi0+ZHVtbXlfcGFnZS5wYWdlKTsKKwkJcmRldi0+ZHVtbXlfcGFnZS5wYWdlID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHJhZGVvbl9kdW1teV9wYWdlX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJkZXYtPmR1bW15X3BhZ2UucGFnZSA9PSBOVUxMKQorCQlyZXR1cm47CisJcGNpX3VubWFwX3BhZ2UocmRldi0+cGRldiwgcmRldi0+ZHVtbXlfcGFnZS5hZGRyLAorCQkJUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCV9fZnJlZV9wYWdlKHJkZXYtPmR1bW15X3BhZ2UucGFnZSk7CisJcmRldi0+ZHVtbXlfcGFnZS5wYWdlID0gTlVMTDsKK30KKwogCiAvKgogICogUmVnaXN0ZXJzIGFjY2Vzc29ycyBmdW5jdGlvbnMuCkBAIC0yNDMsNiArMjcxLDEwIEBACiAJCXJkZXYtPnBsbF9ycmVnID0gJnIxMDBfcGxsX3JyZWc7CiAJCXJkZXYtPnBsbF93cmVnID0gJnIxMDBfcGxsX3dyZWc7CiAJfQorCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNDIwKSB7CisJCXJkZXYtPm1jX3JyZWcgPSAmcjQyMF9tY19ycmVnOworCQlyZGV2LT5tY193cmVnID0gJnI0MjBfbWNfd3JlZzsKKwl9CiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1KSB7CiAJCXJkZXYtPm1jX3JyZWcgPSAmcnY1MTVfbWNfcnJlZzsKIAkJcmRldi0+bWNfd3JlZyA9ICZydjUxNV9tY193cmVnOwpAQCAtMjg5LDYgKzMyMSwxNCBAQAogCWNhc2UgQ0hJUF9SVjM1MDoKIAljYXNlIENISVBfUlYzODA6CiAJCXJkZXYtPmFzaWMgPSAmcjMwMF9hc2ljOworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgeworCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OworCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOworCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKKwkJfQogCQlicmVhazsKIAljYXNlIENISVBfUjQyMDoKIAljYXNlIENISVBfUjQyMzoKQEAgLTMyMyw5ICszNjMsMTUgQEAKIAljYXNlIENISVBfUlY2MzU6CiAJY2FzZSBDSElQX1JWNjcwOgogCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CisJCXJkZXYtPmFzaWMgPSAmcjYwMF9hc2ljOworCQlicmVhazsKIAljYXNlIENISVBfUlY3NzA6CiAJY2FzZSBDSElQX1JWNzMwOgogCWNhc2UgQ0hJUF9SVjcxMDoKKwljYXNlIENISVBfUlY3NDA6CisJCXJkZXYtPmFzaWMgPSAmcnY3NzBfYXNpYzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogRklYTUU6IG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzQxLDcgKzM4Nyw2IEBACiB7CiAJaW50IHI7CiAKLQlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9zdGF0aWNfY2xvY2tzX2luaXQocmRldi0+ZGRldik7CiAJaWYgKHIpIHsKIAkJcmV0dXJuIHI7CkBAIC00MzYsMTAgKzQ4MSwxOCBAQAogewogfQogCi1pbnQgcmFkZW9uX21vZGVzZXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJhZGVvbl9tb2Rlc2V0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworLyogaWYgd2UgZ2V0IHRyYW5zaXRpb25lZCB0byBvbmx5IG9uZSBkZXZpY2UsIHRhayBWR0EgYmFjayAqLworc3RhdGljIHVuc2lnbmVkIGludCByYWRlb25fdmdhX3NldF9kZWNvZGUodm9pZCAqY29va2llLCBib29sIHN0YXRlKQoreworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY29va2llOwogCi0KKwlyYWRlb25fdmdhX3NldF9zdGF0ZShyZGV2LCBzdGF0ZSk7CisJaWYgKHN0YXRlKQorCQlyZXR1cm4gVkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JTUkNfTEVHQUNZX01FTSB8CisJCSAgICAgICBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOworCWVsc2UKKwkJcmV0dXJuIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07Cit9CiAvKgogICogUmFkZW9uIGRldmljZS4KICAqLwpAQCAtNDQ4LDExICs1MDEsMTIgQEAKIAkJICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkgICAgICAgdWludDMyX3QgZmxhZ3MpCiB7Ci0JaW50IHIsIHJldDsKKwlpbnQgcjsKIAlpbnQgZG1hX2JpdHM7CiAKIAlEUk1fSU5GTygicmFkZW9uOiBJbml0aWFsaXppbmcga2VybmVsIG1vZGVzZXR0aW5nLlxuIik7CiAJcmRldi0+c2h1dGRvd24gPSBmYWxzZTsKKwlyZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCXJkZXYtPmRkZXYgPSBkZGV2OwogCXJkZXYtPnBkZXYgPSBwZGV2OwogCXJkZXYtPmZsYWdzID0gZmxhZ3M7CkBAIC00NjEsMzUgKzUxNSw0NSBAQAogCXJkZXYtPnVzZWNfdGltZW91dCA9IFJBREVPTl9NQVhfVVNFQ19USU1FT1VUOwogCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwogCXJkZXYtPmdwdV9sb2NrdXAgPSBmYWxzZTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJLyogbXV0ZXggaW5pdGlhbGl6YXRpb24gYXJlIGFsbCBkb25lIGhlcmUgc28gd2UKIAkgKiBjYW4gcmVjYWxsIGZ1bmN0aW9uIHdpdGhvdXQgaGF2aW5nIGxvY2tpbmcgaXNzdWVzICovCiAJbXV0ZXhfaW5pdCgmcmRldi0+Y3NfbXV0ZXgpOwogCW11dGV4X2luaXQoJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogCW11dGV4X2luaXQoJnJkZXYtPmNwLm11dGV4KTsKIAlyd2xvY2tfaW5pdCgmcmRldi0+ZmVuY2VfZHJ2LmxvY2spOwotCi0JaWYgKHJhZGVvbl9hZ3Btb2RlID09IC0xKSB7Ci0JCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQlpZiAocmRldi0+ZmFtaWx5ID4gQ0hJUF9SVjUxNSB8fAotCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUlYzODAgfHwKLQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwIHx8Ci0JCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIzKSB7Ci0JCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKLQkJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOwotCQl9IGVsc2UgewotCQkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSSBtb2RlXG4iKTsKLQkJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0k7Ci0JCX0KLQl9CisJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmdlbS5vYmplY3RzKTsKIAogCS8qIFNldCBhc2ljIGZ1bmN0aW9ucyAqLwogCXIgPSByYWRlb25fYXNpY19pbml0KHJkZXYpOwogCWlmIChyKSB7CiAJCXJldHVybiByOwogCX0KLQlyID0gcmFkZW9uX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7CisKKwlpZiAocmFkZW9uX2FncG1vZGUgPT0gLTEpIHsKKwkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSB8fAorCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUlYzODAgfHwKKwkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwIHx8CisJCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIzKSB7CisJCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKKwkJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOworCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OworCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOworCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKKwkJfSBlbHNlIHsKKwkJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0kgbW9kZVxuIik7CisJCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOworCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnIxMDBfcGNpX2dhcnRfaW5pdDsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2Zpbmk7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2Rpc2FibGU7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKKwkJfQogCX0KIAogCS8qIHNldCBETUEgbWFzayArIG5lZWRfZG1hMzIgZmxhZ3MuCkBAIC01MjEsMTU2ICs1ODUsMTUwIEBACiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gYmFzZTogMHglMDhYXG4iLCAodWludDMyX3QpcmRldi0+cm1taW9fYmFzZSk7CiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gc2l6ZTogJXVcbiIsICh1bnNpZ25lZClyZGV2LT5ybW1pb19zaXplKTsKIAotCS8qIFNldHVwIGVycmF0YSBmbGFncyAqLwotCXJhZGVvbl9lcnJhdGEocmRldik7Ci0JLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLwotCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7Ci0JLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwotCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJcmRldi0+bmV3X2luaXRfcGF0aCA9IGZhbHNlOworCXIgPSByYWRlb25faW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CiAKLQkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLwotCS8qIEJJT1MqLwotCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7Ci0JCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJLyogaWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIGRpc2FibGUgdGhlIHJhZGVvbiBWR0EgcmVzb3VyY2VzICovCisJciA9IHZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgcmRldiwgTlVMTCwgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKTsKKwlpZiAocikgeworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKKworCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgeworCQkvKiBTZXR1cCBlcnJhdGEgZmxhZ3MgKi8KKwkJcmFkZW9uX2VycmF0YShyZGV2KTsKKwkJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLworCQlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCQkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisKKwkJLyogQklPUyovCisJCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0gZWxzZSB7Ci0JCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQl9Ci0JLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLwotCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7Ci0JCS8qIEZJWE1FOiB3aGF0IGRvIHdlIHdhbnQgdG8gZG8gaGVyZSA/ICovCi0JfQotCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCi0JaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgewotCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKIAkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCQlpZiAocikgeworCQkJCXJldHVybiByOworCQkJfQogCQl9IGVsc2UgewotCQkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCQkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCQlpZiAocikgeworCQkJCXJldHVybiByOworCQkJfQogCQl9Ci0JfQotCS8qIEluaXRpYWxpemUgY2xvY2tzICovCi0JciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0JLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCi0JcmFkZW9uX3ZyYW1faW5mbyhyZGV2KTsKKwkJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KKwkJfQorCQkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCQlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkJCX0gZWxzZSB7CisJCQkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCQkJfQorCQl9CisJCS8qIEdldCBjbG9jayAmIHZyYW0gaW5mb3JtYXRpb24gKi8KKwkJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCQlyYWRlb25fdnJhbV9pbmZvKHJkZXYpOworCQkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCQlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KIAotCS8qIEFkZCBhbiBNVFJSIGZvciB0aGUgVlJBTSAqLwotCXJkZXYtPm1jLnZyYW1fbXRyciA9IG10cnJfYWRkKHJkZXYtPm1jLmFwZXJfYmFzZSwgcmRldi0+bWMuYXBlcl9zaXplLAotCQkJCSAgICAgIE1UUlJfVFlQRV9XUkNPTUIsIDEpOwotCURSTV9JTkZPKCJEZXRlY3RlZCBWUkFNIFJBTT0ldU0sIEJBUj0ldU1cbiIsCi0JCSByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA+PiAyMCwKLQkJICh1bnNpZ25lZClyZGV2LT5tYy5hcGVyX3NpemUgPj4gMjApOwotCURSTV9JTkZPKCJSQU0gd2lkdGggJWRiaXRzICVjRFJcbiIsCi0JCSByZGV2LT5tYy52cmFtX3dpZHRoLCByZGV2LT5tYy52cmFtX2lzX2RkciA/ICdEJyA6ICdTJyk7Ci0JLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KLQlyID0gcmFkZW9uX21jX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCS8qIEZlbmNlIGRyaXZlciAqLwotCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQkvKiBNZW1vcnkgbWFuYWdlciAqLwotCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCi0JICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCi0JciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKLQlpZiAoIXIpIHsKLQkJciA9IHJhZGVvbl9nZW1faW5pdChyZGV2KTsKLQl9CisJCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJCXIgPSByYWRlb25fbWNfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CisJCS8qIEZlbmNlIGRyaXZlciAqLworCQlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KKwkJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyZXR1cm4gcjsKKwkJfQorCQkvKiBNZW1vcnkgbWFuYWdlciAqLworCQlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KKwkJciA9IHJhZGVvbl9ncHVfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCQkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwkJciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gMDsKKwkJCXIgPSByYWRlb25fZ2VtX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIDA7CiAKLQkvKiAxTSByaW5nIGJ1ZmZlciAqLwotCWlmICghcikgeworCQkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCQlyID0gcmFkZW9uX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwotCX0KLQlpZiAoIXIpIHsKKwkJaWYgKHIpCisJCQlyZXR1cm4gMDsKIAkJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwotCQlpZiAocikgeworCQlpZiAocikKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCX0KLQlpZiAoIXIpIHsKIAkJciA9IHJhZGVvbl9pYl9wb29sX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgcG9vbCAoJWQpLlxuIiwgcik7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCX0KLQlpZiAoIXIpIHsKKwkJaWYgKHIpCisJCQlyZXR1cm4gMDsKIAkJciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOwotCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7Ci0JCQlyZXR1cm4gcjsKLQkJfQorCQlpZiAocikKKwkJCXJldHVybiAwOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKIAl9Ci0JcmV0ID0gcjsKLQlyID0gcmFkZW9uX21vZGVzZXRfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0JaWYgKCFyZXQpIHsKLQkJRFJNX0lORk8oInJhZGVvbjoga2VybmVsIG1vZGVzZXR0aW5nIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC5cbiIpOwotCX0KKwlEUk1fSU5GTygicmFkZW9uOiBrZXJuZWwgbW9kZXNldHRpbmcgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLlxuIik7CiAJaWYgKHJhZGVvbl90ZXN0aW5nKSB7CiAJCXJhZGVvbl90ZXN0X21vdmVzKHJkZXYpOwogCX0KIAlpZiAocmFkZW9uX2JlbmNobWFya2luZykgewogCQlyYWRlb25fYmVuY2htYXJrKHJkZXYpOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiB2b2lkIHJhZGVvbl9kZXZpY2VfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpZiAocmRldiA9PSBOVUxMIHx8IHJkZXYtPnJtbWlvID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KIAlEUk1fSU5GTygicmFkZW9uOiBmaW5pc2hpbmcgZGV2aWNlLlxuIik7CiAJcmRldi0+c2h1dGRvd24gPSB0cnVlOwogCS8qIE9yZGVyIG1hdHRlciBzbyBiZWNhcmVmdWxsIGlmIHlvdSByZWFycmFuZ2UgYW55dGhpbmdzICovCi0JcmFkZW9uX21vZGVzZXRfZmluaShyZGV2KTsKLQlyYWRlb25faWJfcG9vbF9maW5pKHJkZXYpOwotCXJhZGVvbl9jcF9maW5pKHJkZXYpOwotCXJhZGVvbl93Yl9maW5pKHJkZXYpOwotCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKLQlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7Ci0JLyogbWNfZmluaSBtdXN0IGJlIGFmdGVyIG9iamVjdF9maW5pICovCi0JcmFkZW9uX21jX2ZpbmkocmRldik7CisJaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7CisJCXJhZGVvbl9pYl9wb29sX2ZpbmkocmRldik7CisJCXJhZGVvbl9jcF9maW5pKHJkZXYpOworCQlyYWRlb25fd2JfZmluaShyZGV2KTsKKwkJcmFkZW9uX2dwdV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwkJcmFkZW9uX21jX2ZpbmkocmRldik7CiAjaWYgX19PU19IQVNfQUdQCi0JcmFkZW9uX2FncF9maW5pKHJkZXYpOworCQlyYWRlb25fYWdwX2ZpbmkocmRldik7CiAjZW5kaWYKLQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwotCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKLQlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0JaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCQlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7CisJCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CisJCX0gZWxzZSB7CisJCQlyYWRlb25fY29tYmlvc19maW5pKHJkZXYpOworCQl9CisJCWtmcmVlKHJkZXYtPmJpb3MpOworCQlyZGV2LT5iaW9zID0gTlVMTDsKIAl9IGVsc2UgewotCQlyYWRlb25fY29tYmlvc19maW5pKHJkZXYpOworCQlyYWRlb25fZmluaShyZGV2KTsKIAl9Ci0Ja2ZyZWUocmRldi0+Ymlvcyk7Ci0JcmRldi0+YmlvcyA9IE5VTEw7CiAJaW91bm1hcChyZGV2LT5ybW1pbyk7CiAJcmRldi0+cm1taW8gPSBOVUxMOwogfQpAQCAtNzA4LDE1ICs3NjYsMTkgQEAKIAkvKiB3YWl0IGZvciBncHUgdG8gZmluaXNoIHByb2Nlc3NpbmcgY3VycmVudCBiYXRjaCAqLwogCXJhZGVvbl9mZW5jZV93YWl0X2xhc3QocmRldik7CiAKLQlyYWRlb25fY3BfZGlzYWJsZShyZGV2KTsKLQlyYWRlb25fZ2FydF9kaXNhYmxlKHJkZXYpOworCXJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCisJaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7CisJCXJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpOworCQlyYWRlb25fZ2FydF9kaXNhYmxlKHJkZXYpOworCQlyZGV2LT5pcnEuc3dfaW50ID0gZmFsc2U7CisJCXJhZGVvbl9pcnFfc2V0KHJkZXYpOworCX0gZWxzZSB7CisJCXJhZGVvbl9zdXNwZW5kKHJkZXYpOworCX0KIAkvKiBldmljdCByZW1haW5pbmcgdnJhbSBtZW1vcnkgKi8KIAlyYWRlb25fb2JqZWN0X2V2aWN0X3ZyYW0ocmRldik7CiAKLQlyZGV2LT5pcnEuc3dfaW50ID0gZmFsc2U7Ci0JcmFkZW9uX2lycV9zZXQocmRldik7Ci0KIAlwY2lfc2F2ZV9zdGF0ZShkZXYtPnBkZXYpOwogCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7CiAJCS8qIFNodXQgZG93biB0aGUgZGV2aWNlICovCkBAIC03NDMsMzggKzgwNSw0MyBAQAogCX0KIAlwY2lfc2V0X21hc3RlcihkZXYtPnBkZXYpOwogCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KLQkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgeworCQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KKwkJfQorCQkvKiBwb3N0IGNhcmQgKi8KKwkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJCX0gZWxzZSB7CisJCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJCX0KKwkJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwkJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCXJldHVybiByOworCQl9CisJCS8qIEVuYWJsZSBJUlEgKi8KKwkJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJCXJhZGVvbl9pcnFfc2V0KHJkZXYpOworCQkvKiBJbml0aWFsaXplIEdQVSBNZW1vcnkgQ29udHJvbGxlciAqLworCQlyID0gcmFkZW9uX21jX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyID0gcmFkZW9uX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikgeworCQkJZ290byBvdXQ7CisJCX0KKwkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7CisJCWlmIChyKSB7CisJCQlnb3RvIG91dDsKKwkJfQogCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9Ci0JLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KLQlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIHI7Ci0JfQotCS8qIEVuYWJsZSBJUlEgKi8KLQlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKLQlyYWRlb25faXJxX3NldChyZGV2KTsKLQkvKiBJbml0aWFsaXplIEdQVSBNZW1vcnkgQ29udHJvbGxlciAqLwotCXIgPSByYWRlb25fbWNfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlnb3RvIG91dDsKLQl9Ci0JciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKLQlpZiAocikgewotCQlnb3RvIG91dDsKLQl9Ci0JciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7Ci0JaWYgKHIpIHsKLQkJZ290byBvdXQ7CisJCXJhZGVvbl9yZXN1bWUocmRldik7CiAJfQogb3V0OgorCXJhZGVvbl9yZXN0b3JlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCWZiX3NldF9zdXNwZW5kKHJkZXYtPmZiZGV2X2luZm8sIDApOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGE4ZmExYmIuLjVkODE0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTE1OCw5ICsxNTgsNiBAQAogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAotCWlmIChyYWRlb25fY3J0Yy0+bW9kZV9zZXQubW9kZSkgewotCQlkcm1fbW9kZV9kZXN0cm95KGNydGMtPmRldiwgcmFkZW9uX2NydGMtPm1vZGVfc2V0Lm1vZGUpOwotCX0KIAlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwogCWtmcmVlKHJhZGVvbl9jcnRjKTsKIH0KQEAgLTE4OSw5ICsxODYsMTEgQEAKIAlyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9IGluZGV4OwogCXJkZXYtPm1vZGVfaW5mby5jcnRjc1tpbmRleF0gPSByYWRlb25fY3J0YzsKIAorI2lmIDAKIAlyYWRlb25fY3J0Yy0+bW9kZV9zZXQuY3J0YyA9ICZyYWRlb25fY3J0Yy0+YmFzZTsKIAlyYWRlb25fY3J0Yy0+bW9kZV9zZXQuY29ubmVjdG9ycyA9IChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKikocmFkZW9uX2NydGMgKyAxKTsKIAlyYWRlb25fY3J0Yy0+bW9kZV9zZXQubnVtX2Nvbm5lY3RvcnMgPSAwOworI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJcmFkZW9uX2NydGMtPmx1dF9yW2ldID0gaSA8PCAyOwpAQCAtMzEzLDcgKzMxMiw3IEBACiAJfQogfQogCi1ib29sIHJhZGVvbl9zZXR1cF9lbmNfY29ubihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGJvb2wgcmFkZW9uX3NldHVwX2VuY19jb25uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpkcm1fY29ubmVjdG9yOwpAQCAtMzQ3LDkgKzM0NiwxMyBAQAogCiAJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQlyZXR1cm4gLTE7Ci0JcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwotCWVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKLQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CisJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAxKTsKKwkJZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOworCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CisJfSBlbHNlCisJCWVkaWQgPSByYWRlb25fY29ubmVjdG9yLT5lZGlkOworCiAJaWYgKGVkaWQpIHsKIAkJLyogdXBkYXRlIGRpZ2l0YWwgYml0cyBoZXJlICovCiAJCWlmIChlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpCkBAIC0zNjIsNyArMzY1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCBOVUxMKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmFkZW9uX2RkY19kdW1wKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCkBAIC02MjAsNiArNjIzLDgzIEBACiAJLmZiX2NoYW5nZWQgPSByYWRlb25mYl9wcm9iZSwKIH07CiAKK3N0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgeworCWludCB0eXBlOworCWNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCByYWRlb25fdG1kc19wbGxfZW51bV9saXN0W10gPQorewl7IDAsICJkcml2ZXIiIH0sCisJeyAxLCAiYmlvcyIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IHJhZGVvbl90dl9zdGRfZW51bV9saXN0W10gPQorewl7IFRWX1NURF9OVFNDLCAibnRzYyIgfSwKKwl7IFRWX1NURF9QQUwsICJwYWwiIH0sCisJeyBUVl9TVERfUEFMX00sICJwYWwtbSIgfSwKKwl7IFRWX1NURF9QQUxfNjAsICJwYWwtNjAiIH0sCisJeyBUVl9TVERfTlRTQ19KLCAibnRzYy1qIiB9LAorCXsgVFZfU1REX1NDQVJUX1BBTCwgInNjYXJ0LXBhbCIgfSwKKwl7IFRWX1NURF9QQUxfQ04sICJwYWwtY24iIH0sCisJeyBUVl9TVERfU0VDQU0sICJzZWNhbSIgfSwKK307CisKK2ludCByYWRlb25fbW9kZXNldF9jcmVhdGVfcHJvcHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IGksIHN6OworCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyZGV2LT5tb2RlX2luZm8uY29oZXJlbnRfbW9kZV9wcm9wZXJ0eSA9CisJCQlkcm1fcHJvcGVydHlfY3JlYXRlKHJkZXYtPmRkZXYsCisJCQkJCSAgICBEUk1fTU9ERV9QUk9QX1JBTkdFLAorCQkJCQkgICAgImNvaGVyZW50IiwgMik7CisJCWlmICghcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHkpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZGV2LT5tb2RlX2luZm8uY29oZXJlbnRfbW9kZV9wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwkJcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHktPnZhbHVlc1swXSA9IDE7CisJfQorCisJaWYgKCFBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCXN6ID0gQVJSQVlfU0laRShyYWRlb25fdG1kc19wbGxfZW51bV9saXN0KTsKKwkJcmRldi0+bW9kZV9pbmZvLnRtZHNfcGxsX3Byb3BlcnR5ID0KKwkJCWRybV9wcm9wZXJ0eV9jcmVhdGUocmRldi0+ZGRldiwKKwkJCQkJICAgIERSTV9NT0RFX1BST1BfRU5VTSwKKwkJCQkJICAgICJ0bWRzX3BsbCIsIHN6KTsKKwkJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJCWRybV9wcm9wZXJ0eV9hZGRfZW51bShyZGV2LT5tb2RlX2luZm8udG1kc19wbGxfcHJvcGVydHksCisJCQkJCSAgICAgIGksCisJCQkJCSAgICAgIHJhZGVvbl90bWRzX3BsbF9lbnVtX2xpc3RbaV0udHlwZSwKKwkJCQkJICAgICAgcmFkZW9uX3RtZHNfcGxsX2VudW1fbGlzdFtpXS5uYW1lKTsKKwkJfQorCX0KKworCXJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUocmRldi0+ZGRldiwKKwkJCQkgICAgRFJNX01PREVfUFJPUF9SQU5HRSwKKwkJCQkgICAgImxvYWQgZGV0ZWN0aW9uIiwgMik7CisJaWYgKCFyZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHkpCisJCXJldHVybiAtRU5PTUVNOworCXJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwlyZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHktPnZhbHVlc1swXSA9IDE7CisKKwlkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2RlX3Byb3BlcnR5KHJkZXYtPmRkZXYpOworCisJc3ogPSBBUlJBWV9TSVpFKHJhZGVvbl90dl9zdGRfZW51bV9saXN0KTsKKwlyZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShyZGV2LT5kZGV2LAorCQkJCSAgICBEUk1fTU9ERV9QUk9QX0VOVU0sCisJCQkJICAgICJ0diBzdGFuZGFyZCIsIHN6KTsKKwlmb3IgKGkgPSAwOyBpIDwgc3o7IGkrKykgeworCQlkcm1fcHJvcGVydHlfYWRkX2VudW0ocmRldi0+bW9kZV9pbmZvLnR2X3N0ZF9wcm9wZXJ0eSwKKwkJCQkgICAgICBpLAorCQkJCSAgICAgIHJhZGVvbl90dl9zdGRfZW51bV9saXN0W2ldLnR5cGUsCisJCQkJICAgICAgcmFkZW9uX3R2X3N0ZF9lbnVtX2xpc3RbaV0ubmFtZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGludCByYWRlb25fbW9kZXNldF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCBudW1fY3J0YyA9IDIsIGk7CkBAIC02NDAsNiArNzIwLDEwIEBACiAKIAlyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlID0gcmRldi0+bWMuYXBlcl9iYXNlOwogCisJcmV0ID0gcmFkZW9uX21vZGVzZXRfY3JlYXRlX3Byb3BzKHJkZXYpOworCWlmIChyZXQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CiAJLyogYWxsb2NhdGUgY3J0Y3MgLSBUT0RPIHNpbmdsZSBjcnRjICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjOyBpKyspIHsKIAkJcmFkZW9uX2NydGNfaW5pdChyZGV2LT5kZGV2LCBpKTsKQEAgLTY3OCw3ICs3NjIsNiBAQAogCQkJY29udGludWU7CiAJCWlmIChmaXJzdCkgewogCQkJcmFkZW9uX2NydGMtPnJteF90eXBlID0gcmFkZW9uX2VuY29kZXItPnJteF90eXBlOwotCQkJcmFkZW9uX2NydGMtPmRldmljZXMgPSByYWRlb25fZW5jb2Rlci0+ZGV2aWNlczsKIAkJCW1lbWNweSgmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlLAogCQkJCSZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGUsCiAJCQkJc2l6ZW9mKHN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggMGJkNTg3OS4uNTBmY2U0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAKIAotI2lmIGRlZmluZWQoQ09ORklHX0RSTV9SQURFT05fS01TKQogLyoKICAqIEtNUyB3cmFwcGVyLgogICovCkBAIC03NywxMSArNzYsOSBAQAogaW50IHJhZGVvbl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogdm9pZCByYWRlb25fZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKICNlbmRpZgotI2VuZGlmCiAKIAogaW50IHJhZGVvbl9ub193YjsKLSNpZiBkZWZpbmVkKENPTkZJR19EUk1fUkFERU9OX0tNUykKIGludCByYWRlb25fbW9kZXNldCA9IC0xOwogaW50IHJhZGVvbl9keW5jbGtzID0gLTE7CiBpbnQgcmFkZW9uX3I0eHhfYXRvbSA9IDA7CkBAIC05MSwxMiArODgsMTEgQEAKIGludCByYWRlb25fYmVuY2htYXJraW5nID0gMDsKIGludCByYWRlb25fdGVzdGluZyA9IDA7CiBpbnQgcmFkZW9uX2Nvbm5lY3Rvcl90YWJsZSA9IDA7Ci0jZW5kaWYKK2ludCByYWRlb25fdHYgPSAxOwogCiBNT0RVTEVfUEFSTV9ERVNDKG5vX3diLCAiRGlzYWJsZSBBR1Agd3JpdGViYWNrIGZvciBzY3JhdGNoIHJlZ2lzdGVycyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vX3diLCByYWRlb25fbm9fd2IsIGludCwgMDQ0NCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EUk1fUkFERU9OX0tNUykKIE1PRFVMRV9QQVJNX0RFU0MobW9kZXNldCwgIkRpc2FibGUvRW5hYmxlIG1vZGVzZXR0aW5nIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQobW9kZXNldCwgcmFkZW9uX21vZGVzZXQsIGludCwgMDQwMCk7CiAKQEAgLTEyMyw3ICsxMTksOSBAQAogCiBNT0RVTEVfUEFSTV9ERVNDKGNvbm5lY3Rvcl90YWJsZSwgIkZvcmNlIGNvbm5lY3RvciB0YWJsZSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGNvbm5lY3Rvcl90YWJsZSwgcmFkZW9uX2Nvbm5lY3Rvcl90YWJsZSwgaW50LCAwNDQ0KTsKLSNlbmRpZgorCitNT0RVTEVfUEFSTV9ERVNDKHR2LCAiVFYgZW5hYmxlICgwID0gZGlzYWJsZSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZCh0diwgcmFkZW9uX3R2LCBpbnQsIDA0NDQpOwogCiBzdGF0aWMgaW50IHJhZGVvbl9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTIxNSw3ICsyMTMsNiBAQAogCS5wYXRjaGxldmVsID0gRFJJVkVSX1BBVENITEVWRUwsCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFJNX1JBREVPTl9LTVMpCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIga21zX2RyaXZlcjsKIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTI4OSw3ICsyODYsNyBAQAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJIC5jb21wYXRfaW9jdGwgPSBOVUxMLAorCQkgLmNvbXBhdF9pb2N0bCA9IHJhZGVvbl9rbXNfY29tcGF0X2lvY3RsLAogI2VuZGlmCiAJfSwKIApAQCAtMzA5LDcgKzMwNiw2IEBACiAJLm1pbm9yID0gS01TX0RSSVZFUl9NSU5PUiwKIAkucGF0Y2hsZXZlbCA9IEtNU19EUklWRVJfUEFUQ0hMRVZFTCwKIH07Ci0jZW5kaWYKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXI7CiAKQEAgLTMxNyw3ICszMTMsNiBAQAogewogCWRyaXZlciA9ICZkcml2ZXJfb2xkOwogCWRyaXZlci0+bnVtX2lvY3RscyA9IHJhZGVvbl9tYXhfaW9jdGw7Ci0jaWYgZGVmaW5lZChDT05GSUdfRFJNX1JBREVPTl9LTVMpCiAjaWZkZWYgQ09ORklHX1ZHQV9DT05TT0xFCiAJaWYgKHZnYWNvbl90ZXh0X2ZvcmNlKCkgJiYgcmFkZW9uX21vZGVzZXQgPT0gLTEpIHsKIAkJRFJNX0lORk8oIlZHQUNPTiBkaXNhYmxlIHJhZGVvbiBrZXJuZWwgbW9kZXNldHRpbmcuXG4iKTsKQEAgLTMyOCw4ICszMjMsMTMgQEAKICNlbmRpZgogCS8qIGlmIGVuYWJsZWQgYnkgZGVmYXVsdCAqLwogCWlmIChyYWRlb25fbW9kZXNldCA9PSAtMSkgewotCQlEUk1fSU5GTygicmFkZW9uIGRlZmF1bHQgdG8ga2VybmVsIG1vZGVzZXR0aW5nLlxuIik7CisjaWZkZWYgQ09ORklHX0RSTV9SQURFT05fS01TCisJCURSTV9JTkZPKCJyYWRlb24gZGVmYXVsdGluZyB0byBrZXJuZWwgbW9kZXNldHRpbmcuXG4iKTsKIAkJcmFkZW9uX21vZGVzZXQgPSAxOworI2Vsc2UKKwkJRFJNX0lORk8oInJhZGVvbiBkZWZhdWx0aW5nIHRvIHVzZXJzcGFjZSBtb2Rlc2V0dGluZy5cbiIpOworCQlyYWRlb25fbW9kZXNldCA9IDA7CisjZW5kaWYKIAl9CiAJaWYgKHJhZGVvbl9tb2Rlc2V0ID09IDEpIHsKIAkJRFJNX0lORk8oInJhZGVvbiBrZXJuZWwgbW9kZXNldHRpbmcgZW5hYmxlZC5cbiIpOwpAQCAtMzM5LDcgKzMzOSw2IEBACiAJfQogCS8qIGlmIHRoZSB2Z2EgY29uc29sZSBzZXR0aW5nIGlzIGVuYWJsZWQgc3RpbGwKIAkgKiBsZXQgbW9kcHJvYmUgb3ZlcnJpZGUgaXQgKi8KLSNlbmRpZgogCXJldHVybiBkcm1faW5pdChkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCmluZGV4IDZmYTMyZGEuLjM1MDk2MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCkBAIC0zMSw2ICszMSwxMSBAQAogI2lmbmRlZiBfX1JBREVPTl9EUlZfSF9fCiAjZGVmaW5lIF9fUkFERU9OX0RSVl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJyYWRlb25fZmFtaWx5LmgiCisKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwogCkBAIC0xMDYsNzUgKzExMSwxMiBAQAogI2RlZmluZSBEUklWRVJfTUlOT1IJCTMxCiAjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTAKIAotLyoKLSAqIFJhZGVvbiBjaGlwIGZhbWlsaWVzCi0gKi8KLWVudW0gcmFkZW9uX2ZhbWlseSB7Ci0JQ0hJUF9SMTAwLAotCUNISVBfUlYxMDAsCi0JQ0hJUF9SUzEwMCwKLQlDSElQX1JWMjAwLAotCUNISVBfUlMyMDAsCi0JQ0hJUF9SMjAwLAotCUNISVBfUlYyNTAsCi0JQ0hJUF9SUzMwMCwKLQlDSElQX1JWMjgwLAotCUNISVBfUjMwMCwKLQlDSElQX1IzNTAsCi0JQ0hJUF9SVjM1MCwKLQlDSElQX1JWMzgwLAotCUNISVBfUjQyMCwKLQlDSElQX1I0MjMsCi0JQ0hJUF9SVjQxMCwKLQlDSElQX1JTNDAwLAotCUNISVBfUlM0ODAsCi0JQ0hJUF9SUzYwMCwKLQlDSElQX1JTNjkwLAotCUNISVBfUlM3NDAsCi0JQ0hJUF9SVjUxNSwKLQlDSElQX1I1MjAsCi0JQ0hJUF9SVjUzMCwKLQlDSElQX1JWNTYwLAotCUNISVBfUlY1NzAsCi0JQ0hJUF9SNTgwLAotCUNISVBfUjYwMCwKLQlDSElQX1JWNjEwLAotCUNISVBfUlY2MzAsCi0JQ0hJUF9SVjYyMCwKLQlDSElQX1JWNjM1LAotCUNISVBfUlY2NzAsCi0JQ0hJUF9SUzc4MCwKLQlDSElQX1JTODgwLAotCUNISVBfUlY3NzAsCi0JQ0hJUF9SVjczMCwKLQlDSElQX1JWNzEwLAotCUNISVBfUlY3NDAsCi0JQ0hJUF9MQVNULAotfTsKLQogZW51bSByYWRlb25fY3BfbWljcm9jb2RlX3ZlcnNpb24gewogCVVDT0RFX1IxMDAsCiAJVUNPREVfUjIwMCwKIAlVQ09ERV9SMzAwLAogfTsKIAotLyoKLSAqIENoaXAgZmxhZ3MKLSAqLwotZW51bSByYWRlb25fY2hpcF9mbGFncyB7Ci0JUkFERU9OX0ZBTUlMWV9NQVNLID0gMHgwMDAwZmZmZlVMLAotCVJBREVPTl9GTEFHU19NQVNLID0gMHhmZmZmMDAwMFVMLAotCVJBREVPTl9JU19NT0JJTElUWSA9IDB4MDAwMTAwMDBVTCwKLQlSQURFT05fSVNfSUdQID0gMHgwMDAyMDAwMFVMLAotCVJBREVPTl9TSU5HTEVfQ1JUQyA9IDB4MDAwNDAwMDBVTCwKLQlSQURFT05fSVNfQUdQID0gMHgwMDA4MDAwMFVMLAotCVJBREVPTl9IQVNfSElFUlogPSAweDAwMTAwMDAwVUwsCi0JUkFERU9OX0lTX1BDSUUgPSAweDAwMjAwMDAwVUwsCi0JUkFERU9OX05FV19NRU1NQVAgPSAweDAwNDAwMDAwVUwsCi0JUkFERU9OX0lTX1BDSSA9IDB4MDA4MDAwMDBVTCwKLQlSQURFT05fSVNfSUdQR0FSVCA9IDB4MDEwMDAwMDBVTCwKLX07Ci0KIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZnJlZWxpc3QgewogCXVuc2lnbmVkIGludCBhZ2U7CiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKQEAgLTM1Myw2ICsyOTUsMTQgQEAKIAlpbnQgcjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemU7CiAJaW50IHI3MDBfc2NfZWFybHl6X3RpbGVfZmlmb19maXplOwogCisJc3RydWN0IG11dGV4IGNzX211dGV4OworCXUzMiBjc19pZF9zY250OworCXUzMiBjc19pZF93Y250OworCS8qIHI2eHgvcjd4eCBkcm0gYmxpdCB2ZXJ0ZXggYnVmZmVyICovCisJc3RydWN0IGRybV9idWYgKmJsaXRfdmI7CisKKwkvKiBmaXJtd2FyZSAqLworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqbWVfZncsICpwZnBfZnc7CiB9IGRybV9yYWRlb25fcHJpdmF0ZV90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2J1Zl9wcml2IHsKQEAgLTM5MSw2ICszNDEsOSBAQAogCQkob2ZmID49IGdhcnRfc3RhcnQgJiYgb2ZmIDw9IGdhcnRfZW5kKSk7CiB9CiAKKy8qIHJhZGVvbl9zdGF0ZS5jICovCitleHRlcm4gdm9pZCByYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlciwgc3RydWN0IGRybV9idWYgKmJ1Zik7CisKIAkJCQkvKiByYWRlb25fY3AuYyAqLwogZXh0ZXJuIGludCByYWRlb25fY3BfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IHJhZGVvbl9jcF9zdGFydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CkBAIC00NTcsNiArNDEwLDggQEAKIAkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBsb25nIHJhZGVvbl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGxvbmcgcmFkZW9uX2ttc19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogZXh0ZXJuIGludCByYWRlb25fbWFzdGVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9tYXN0ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKQEAgLTQ4Miw2ICs0MzcsMjIgQEAKIAkJCQkgICAgIHN0cnVjdCBkcm1fYnVmICpidWYsIGludCBzdGFydCwgaW50IGVuZCk7CiBleHRlcm4gaW50IHI2MDBfcGFnZV90YWJsZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9wYWdlX3RhYmxlX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICpnYXJ0X2luZm8pOworZXh0ZXJuIGludCByNjAwX2NzX2xlZ2FjeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZwcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfY3BfZGlzcGF0Y2hfc3dhcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHI2MDBfY3BfZGlzcGF0Y2hfdGV4dHVyZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgICAgZHJtX3JhZGVvbl90ZXh0dXJlX3QgKnRleCwKKwkJCQkgICAgZHJtX3JhZGVvbl90ZXhfaW1hZ2VfdCAqaW1hZ2UpOworLyogcjYwMF9ibGl0LmMgKi8KK2V4dGVybiBpbnQgcjYwMF9wcmVwYXJlX2JsaXRfY29weShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCByNjAwX2RvbmVfYmxpdF9jb3B5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF9ibGl0X2NvcHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgIHVpbnQ2NF90IHNyY19ncHVfYWRkciwgdWludDY0X3QgZHN0X2dwdV9hZGRyLAorCQkJICAgaW50IHNpemVfYnl0ZXMpOworZXh0ZXJuIHZvaWQgcjYwMF9ibGl0X3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgIHVpbnQ2NF90IHNyY19ncHVfYWRkciwgdWludDY0X3QgZHN0X2dwdV9hZGRyLAorCQkJICAgaW50IHN4LCBpbnQgc3ksIGludCBkeCwgaW50IGR5LAorCQkJICAgaW50IHcsIGludCBoLCBpbnQgc3JjX3BpdGNoLCBpbnQgZHN0X3BpdGNoLCBpbnQgY3BwKTsKIAogLyogRmxhZ3MgZm9yIHN0YXRzLmJveGVzCiAgKi8KQEAgLTEwNjcsNiArMTAzOCw5IEBACiAjCWRlZmluZSBSQURFT05fQ1NRX1BSSUJNX0lOREJNCQkoNCA8PCAyOCkKICMJZGVmaW5lIFJBREVPTl9DU1FfUFJJUElPX0lORFBJTwkJKDE1IDw8IDI4KQogCisjZGVmaW5lIFIzMDBfQ1BfUkVTWU5DX0FERFIJCTB4MDc3OAorI2RlZmluZSBSMzAwX0NQX1JFU1lOQ19EQVRBCQkweDA3N2MKKwogI2RlZmluZSBSQURFT05fQUlDX0NOVEwJCQkweDAxZDAKICMJZGVmaW5lIFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTgkoMSA8PCAwKQogIwlkZWZpbmUgUlM0MDBfTVNJX1JFQVJNCSAgICAgICAgICAgICAgICAoMSA8PCAzKQpAQCAtMTEwOSwxMyArMTA4Myw3MSBAQAogIwlkZWZpbmUgUkFERU9OX0NOVExfQklUQkxUX01VTFRJCQkweDAwMDA5QjAwCiAjCWRlZmluZSBSQURFT05fQ05UTF9TRVRfU0NJU1NPUlMJCTB4QzAwMDFFMDAKIAotIwlkZWZpbmUgUjYwMF9JVF9JTkRJUkVDVF9CVUZGRVIJCTB4MDAwMDMyMDAKLSMJZGVmaW5lIFI2MDBfSVRfTUVfSU5JVElBTElaRQkJMHgwMDAwNDQwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9JTkRJUkVDVF9CVUZGRVJfRU5EICAgICAgMHgwMDAwMTcwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TRVRfUFJFRElDQVRJT04gICAgICAgICAgMHgwMDAwMjAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9SRUdfUk1XICAgICAgICAgICAgICAgICAgMHgwMDAwMjEwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9DT05EX0VYRUMgICAgICAgICAgICAgICAgMHgwMDAwMjIwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9QUkVEX0VYRUMgICAgICAgICAgICAgICAgMHgwMDAwMjMwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TVEFSVF8zRF9DTURCVUYgICAgICAgICAgMHgwMDAwMjQwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9EUkFXX0lOREVYXzIgICAgICAgICAgICAgMHgwMDAwMjcwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9DT05URVhUX0NPTlRST0wgICAgICAgICAgMHgwMDAwMjgwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9EUkFXX0lOREVYX0lNTURfQkUgICAgICAgMHgwMDAwMjkwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9JTkRFWF9UWVBFICAgICAgICAgICAgICAgMHgwMDAwMkEwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9EUkFXX0lOREVYICAgICAgICAgICAgICAgMHgwMDAwMkIwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9EUkFXX0lOREVYX0FVVE8gICAgICAgICAgMHgwMDAwMkQwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9EUkFXX0lOREVYX0lNTUQgICAgICAgICAgMHgwMDAwMkUwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9OVU1fSU5TVEFOQ0VTICAgICAgICAgICAgMHgwMDAwMkYwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TVFJNT1VUX0JVRkZFUl9VUERBVEUgICAgMHgwMDAwMzQwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9JTkRJUkVDVF9CVUZGRVJfTVAgICAgICAgMHgwMDAwMzgwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9NRU1fU0VNQVBIT1JFICAgICAgICAgICAgMHgwMDAwMzkwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9NUEVHX0lOREVYICAgICAgICAgICAgICAgMHgwMDAwM0EwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9XQUlUX1JFR19NRU0gICAgICAgICAgICAgMHgwMDAwM0MwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9NRU1fV1JJVEUgICAgICAgICAgICAgICAgMHgwMDAwM0QwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9JTkRJUkVDVF9CVUZGRVIgICAgICAgICAgMHgwMDAwMzIwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9DUF9JTlRFUlJVUFQgICAgICAgICAgICAgMHgwMDAwNDAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TVVJGQUNFX1NZTkMgICAgICAgICAgICAgMHgwMDAwNDMwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfQ0IwX0RFU1RfQkFTRV9FTkEgICAgKDEgPDwgNikKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1RDX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDIzKQorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfVkNfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjQpCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9DQl9BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyNSkKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX0RCX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDI2KQorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0hfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjcpCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TTVhfQUNUSU9OX0VOQSAgICAgICAoMSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfTUVfSU5JVElBTElaRSAgICAgICAgICAgIDB4MDAwMDQ0MDAKICMJICAgICAgIGRlZmluZSBSNjAwX01FX0lOSVRJQUxJWkVfREVWSUNFX0lEKHgpICgoeCkgPDwgMTYpCi0jCWRlZmluZSBSNjAwX0lUX0VWRU5UX1dSSVRFCQkweDAwMDA0NjAwCi0jCWRlZmluZSBSNjAwX0lUX1NFVF9DT05GSUdfUkVHCQkweDAwMDA2ODAwCi0jCWRlZmluZSBSNjAwX1NFVF9DT05GSUdfUkVHX09GRlNFVCAgICAgICAweDAwMDA4MDAwCi0jCWRlZmluZSBSNjAwX1NFVF9DT05GSUdfUkVHX0VORCAgICAgICAgICAweDAwMDBhYzAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX0NPTkRfV1JJVEUgICAgICAgICAgICAgICAweDAwMDA0NTAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX0VWRU5UX1dSSVRFICAgICAgICAgICAgICAweDAwMDA0NjAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX0VWRU5UX1dSSVRFX0VPUCAgICAgICAgICAweDAwMDA0NzAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX09ORV9SRUdfV1JJVEUgICAgICAgICAgICAweDAwMDA1NzAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX1NFVF9DT05GSUdfUkVHICAgICAgICAgICAweDAwMDA2ODAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfQ09ORklHX1JFR19PRkZTRVQgMHgwMDAwODAwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfRU5EICAgMHgwMDAwYWMwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcgICAgICAgICAgMHgwMDAwNjkwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCAweDAwMDI4MDAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfQ09OVEVYVF9SRUdfRU5EICAweDAwMDI5MDAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX1NFVF9BTFVfQ09OU1QgICAgICAgICAgICAweDAwMDA2QTAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfQUxVX0NPTlNUX09GRlNFVCAweDAwMDMwMDAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfQUxVX0NPTlNUX0VORCAgICAweDAwMDMyMDAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX1NFVF9CT09MX0NPTlNUICAgICAgICAgICAweDAwMDA2QjAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfQk9PTF9DT05TVF9PRkZTRVQgMHgwMDAzZTM4MAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0JPT0xfQ09OU1RfRU5EICAgMHgwMDA0MDAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TRVRfTE9PUF9DT05TVCAgICAgICAgICAgMHgwMDAwNkMwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUIDB4MDAwM2UyMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9MT09QX0NPTlNUX0VORCAgIDB4MDAwM2UzODAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU0VUX1JFU09VUkNFICAgICAgICAgICAgIDB4MDAwMDZEMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9SRVNPVVJDRV9PRkZTRVQgIDB4MDAwMzgwMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9SRVNPVVJDRV9FTkQgICAgIDB4MDAwM2MwMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NRX1RFWF9WVFhfSU5WQUxJRF9URVhUVVJFICAweDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NRX1RFWF9WVFhfSU5WQUxJRF9CVUZGRVIgICAweDEKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NRX1RFWF9WVFhfVkFMSURfVEVYVFVSRSAgICAweDIKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NRX1RFWF9WVFhfVkFMSURfQlVGRkVSICAgICAweDMKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU0VUX1NBTVBMRVIgICAgICAgICAgICAgIDB4MDAwMDZFMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9TQU1QTEVSX09GRlNFVCAgIDB4MDAwM2MwMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9TQU1QTEVSX0VORCAgICAgIDB4MDAwM2NmZjAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU0VUX0NUTF9DT05TVCAgICAgICAgICAgIDB4MDAwMDZGMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9DVExfQ09OU1RfT0ZGU0VUIDB4MDAwM2NmZjAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9DVExfQ09OU1RfRU5EICAgIDB4MDAwM2UyMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU1VSRkFDRV9CQVNFX1VQREFURSAgICAgIDB4MDAwMDczMDAKIAogI2RlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BU0sJCTB4QzAwMDAwMDAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLCTB4M2ZmZjAwMDAKQEAgLTE1OTMsNiArMTYyNSw1MiBAQAogI2RlZmluZSBSNjAwX0NCX0NPTE9SN19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1YwogI2RlZmluZSBSNjAwX0NCX0NPTE9SN19GUkFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBmYwogCisjZGVmaW5lIFI2MDBfQ0JfQ09MT1IwX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDYwCisjZGVmaW5lIFI2MDBfQ0JfQ09MT1IwX1ZJRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDgwCisjZGVmaW5lIFI2MDBfQ0JfQ09MT1IwX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MGEwCisjZGVmaW5lIFI2MDBfQ0JfQ09MT1IwX1RJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MGMwCisjZGVmaW5lIFI2MDBfQ0JfQ09MT1IwX0ZSQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MGUwCisjZGVmaW5lIFI2MDBfQ0JfQ09MT1IwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MTAwCisKKyNkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjUzOAorI2RlZmluZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ZDM4CisjZGVmaW5lIFI2MDBfQ1BfQ09IRVJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1ZjgKKyNkZWZpbmUgUjYwMF9EQl9ERVBUSF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMGMKKyNkZWZpbmUgUjYwMF9TUV9QR01fU1RBUlRfRlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4OTQKKyNkZWZpbmUgUjYwMF9TUV9QR01fU1RBUlRfRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4ODAKKyNkZWZpbmUgUjYwMF9TUV9QR01fU1RBUlRfVlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NTgKKyNkZWZpbmUgUjYwMF9TUV9QR01fUkVTT1VSQ0VTX1ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NjgKKyNkZWZpbmUgUjYwMF9TUV9QR01fQ0ZfT0ZGU0VUX1ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4ZDAKKyNkZWZpbmUgUjYwMF9TUV9QR01fU1RBUlRfR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NmMKKyNkZWZpbmUgUjYwMF9TUV9QR01fU1RBUlRfUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NDAKKyNkZWZpbmUgUjYwMF9TUV9QR01fUkVTT1VSQ0VTX1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NTAKKyNkZWZpbmUgUjYwMF9TUV9QR01fRVhQT1JUU19QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NTQKKyNkZWZpbmUgUjYwMF9TUV9QR01fQ0ZfT0ZGU0VUX1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4Y2MKKyNkZWZpbmUgUjYwMF9WR1RfRE1BX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg3ZTgKKyNkZWZpbmUgUjYwMF9WR1RfRE1BX0JBU0VfSEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg3ZTQKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhiMTAKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhiMTQKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhiMTgKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhiMWMKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8wICAgICAgICAgICAgICAgICAgICAgIDB4MjhiNDQKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8xICAgICAgICAgICAgICAgICAgICAgIDB4MjhiNDgKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8yICAgICAgICAgICAgICAgICAgICAgIDB4MjhiNGMKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8zICAgICAgICAgICAgICAgICAgICAgIDB4MjhiNTAKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhZDgKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhZTgKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhZjgKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhiMDgKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhZGMKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzEgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhZWMKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhZmMKKyNkZWZpbmUgUjYwMF9WR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzMgICAgICAgICAgICAgICAgICAgICAgIDB4MjhiMGMKKworI2RlZmluZSBSNjAwX1ZHVF9QUklNSVRJVkVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OTU4CisKKyNkZWZpbmUgUjYwMF9QQV9TQ19TQ1JFRU5fU0NJU1NPUl9UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMzAKKyNkZWZpbmUgUjYwMF9QQV9TQ19HRU5FUklDX1NDSVNTT1JfVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyNDAKKyNkZWZpbmUgUjYwMF9QQV9TQ19XSU5ET1dfU0NJU1NPUl9UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMDQKKwogI2RlZmluZSBSNjAwX1RDX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NjA4CiAjICAgICAgIGRlZmluZSBSNjAwX1RDX0wyX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDUpCiAjICAgICAgIGRlZmluZSBSNjAwX0wyX0RJU0FCTEVfTEFURV9ISVQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKaW5kZXggMGE5MjcwNi4uNjIxNjQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCkBAIC0xMjYsNiArMTI2LDIzIEBACiAJfQogfQogCit2b2lkIHJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlmIChjb25uZWN0b3ItPmVuY29kZXIgPT0gZW5jb2RlcikgeworCQkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCQlyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSA9IHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlczsKKwkJCURSTV9ERUJVRygic2V0dGluZyBhY3RpdmUgZGV2aWNlIHRvICUwOHggZnJvbSAlMDh4ICUwOHggZm9yIGVuY29kZXIgJWRcbiIsCisJCQkJICByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSwgcmFkZW9uX2VuY29kZXItPmRldmljZXMsCisJCQkJICByYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzLCBlbmNvZGVyLT5lbmNvZGVyX3R5cGUpOworCQl9CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3IgKgogcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewpAQCAtMjI0LDkgKzI0MSwxMiBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlEQUNfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gYXJnczsKIAlpbnQgaW5kZXggPSAwLCBudW0gPSAwOwotCS8qIGZpeG1lIC0gZmlsbCBpbiBlbmNfcHJpdiBmb3IgYXRvbSBkYWMgKi8KKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKmRhY19pbmZvID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwogCWVudW0gcmFkZW9uX3R2X3N0ZCB0dl9zdGQgPSBUVl9TVERfTlRTQzsKIAorCWlmIChkYWNfaW5mby0+dHZfc3RkKQorCQl0dl9zdGQgPSBkYWNfaW5mby0+dHZfc3RkOworCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewpAQCAtMjQ0LDkgKzI2NCw5IEBACiAKIAlhcmdzLnVjQWN0aW9uID0gYWN0aW9uOwogCi0JaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkKKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1JUX1NVUFBPUlQpKQogCQlhcmdzLnVjRGFjU3RhbmRhcmQgPSBBVE9NX0RBQzFfUFMyOwotCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQlhcmdzLnVjRGFjU3RhbmRhcmQgPSBBVE9NX0RBQzFfQ1Y7CiAJZWxzZSB7CiAJCXN3aXRjaCAodHZfc3RkKSB7CkBAIC0yNzksMTYgKzI5OSwxOSBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlUVl9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IDA7Ci0JLyogZml4bWUgLSBmaWxsIGluIGVuY19wcml2IGZvciBhdG9tIGRhYyAqLworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqZGFjX2luZm8gPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CiAJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZCA9IFRWX1NURF9OVFNDOwogCisJaWYgKGRhY19pbmZvLT50dl9zdGQpCisJCXR2X3N0ZCA9IGRhY19pbmZvLT50dl9zdGQ7CisKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKIAlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFRWRW5jb2RlckNvbnRyb2wpOwogCiAJYXJncy5zVFZFbmNvZGVyLnVjQWN0aW9uID0gYWN0aW9uOwogCi0JaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJYXJncy5zVFZFbmNvZGVyLnVjVHZTdGFuZGFyZCA9IEFUT01fVFZfQ1Y7CiAJZWxzZSB7CiAJCXN3aXRjaCAodHZfc3RkKSB7CkBAIC01MjAsNiArNTQzLDcgQEAKIAogCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUI6IC8qIEhETUktQiBpcyBiYXNpY2FsbHkgREwtRFZJOyBhbmFsb2cgd29ya3MgZmluZSAqLwogCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwogCQllbHNlIGlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCkKQEAgLTUyOSw3ICs1NTMsNiBAQAogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOgogCWRlZmF1bHQ6CiAJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0hETUk7CkBAIC04MjUsMTAgKzg0OCwxMCBAQAogCiAJLyogWFhYOiBmaXggdXAgc2NyYXRjaCByZWcgaGFuZGxpbmcgKi8KIAl0ZW1wID0gUlJFRzMyKHJlZyk7Ci0JaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJV1JFRzMyKHJlZywgKEFUT01fUzNfVFYxX0FDVElWRSB8CiAJCQkgICAgIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA8PCAxOCkpKTsKLQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJV1JFRzMyKHJlZywgKEFUT01fUzNfQ1ZfQUNUSVZFIHwgKHJhZGVvbl9jcnRjLT5jcnRjX2lkIDw8IDI0KSkpOwogCWVsc2UKIAkJV1JFRzMyKHJlZywgMCk7CkBAIC04NTEsOSArODc0LDE5IEBACiAJRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IDA7CiAJYm9vbCBpc19kaWcgPSBmYWxzZTsKKwlpbnQgZGV2aWNlczsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAorCS8qIG9uIERQTVMgb2ZmIHdlIGhhdmUgbm8gaWRlYSBpZiBhY3RpdmUgZGV2aWNlIGlzIG1lYW5pbmdmdWwgKi8KKwlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OICYmICFyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSkKKwkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzOworCWVsc2UKKwkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlOworCisJRFJNX0RFQlVHKCJlbmNvZGVyIGRwbXMgJWQgdG8gbW9kZSAlZCwgZGV2aWNlcyAlMDh4LCBhY3RpdmVfZGV2aWNlcyAlMDh4XG4iLAorCQkgIHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkLCBtb2RlLCByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcywKKwkJICByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSk7CiAJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVE1EUzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfVE1EUzE6CkBAIC04ODEsMTggKzkxNCwxOCBAQAogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgVFYxT3V0cHV0Q29udHJvbCk7Ci0JCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQllbHNlIGlmIChkZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDVjFPdXRwdXRDb250cm9sKTsKIAkJZWxzZQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBEQUMxT3V0cHV0Q29udHJvbCk7CiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMjoKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCWlmIChkZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCWVsc2UgaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzJPdXRwdXRDb250cm9sKTsKQEAgLTk3OSwxOCArMTAxMiwxOCBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMxOgogCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJCQlhcmdzLnYxLnVjRGV2aWNlID0gQVRPTV9ERVZJQ0VfVFYxX0lOREVYOwotCQkJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJCQlhcmdzLnYxLnVjRGV2aWNlID0gQVRPTV9ERVZJQ0VfQ1ZfSU5ERVg7CiAJCQkJZWxzZQogCQkJCQlhcmdzLnYxLnVjRGV2aWNlID0gQVRPTV9ERVZJQ0VfQ1JUMV9JTkRFWDsKIAkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMjoKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzI6Ci0JCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCQkJYXJncy52MS51Y0RldmljZSA9IEFUT01fREVWSUNFX1RWMV9JTkRFWDsKLQkJCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJCQkJYXJncy52MS51Y0RldmljZSA9IEFUT01fREVWSUNFX0NWX0lOREVYOwogCQkJCWVsc2UKIAkJCQkJYXJncy52MS51Y0RldmljZSA9IEFUT01fREVWSUNFX0NSVDJfSU5ERVg7CkBAIC0xMDE5LDE3ICsxMDUyLDE3IEBACiAJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRDsKIAkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzE6Ci0JCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX1RWX0VOQ09ERVJfSUQ7Ci0JCQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9UVl9FTkNPREVSX0lEOwogCQkJCWVsc2UKIAkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RBQzFfRU5DT0RFUl9JRDsKIAkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzI6Ci0JCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX1RWX0VOQ09ERVJfSUQ7Ci0JCQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9UVl9FTkNPREVSX0lEOwogCQkJCWVsc2UKIAkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RBQzJfRU5DT0RFUl9JRDsKQEAgLTEwOTcsNyArMTEzMCw3IEBACiAJYXRvbWJpb3Nfc2V0X2VuY29kZXJfY3J0Y19zb3VyY2UoZW5jb2Rlcik7CiAKIAlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewotCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCB8IEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCB8IEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJYXRvbWJpb3NfeXV2X3NldHVwKGVuY29kZXIsIHRydWUpOwogCQllbHNlCiAJCQlhdG9tYmlvc195dXZfc2V0dXAoZW5jb2RlciwgZmFsc2UpOwpAQCAtMTEzNSw3ICsxMTY4LDcgQEAKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzI6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMjoKIAkJYXRvbWJpb3NfZGFjX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJCWF0b21iaW9zX3R2X3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTE0MywxMSArMTE3NiwxMiBAQAogfQogCiBzdGF0aWMgYm9vbAotYXRvbWJpb3NfZGFjX2xvYWRfZGV0ZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK2F0b21iaW9zX2RhY19sb2FkX2RldGVjdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQgfAogCQkJCSAgICAgICBBVE9NX0RFVklDRV9DVl9TVVBQT1JUIHwKQEAgLTExNjgsMTUgKzEyMDIsMTUgQEAKIAkJZWxzZQogCQkJYXJncy5zRGFjbG9hZC51Y0RhY1R5cGUgPSBBVE9NX0RBQ19COwogCi0JCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCkKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpCiAJCQlhcmdzLnNEYWNsb2FkLnVzRGV2aWNlSUQgPSBjcHVfdG9fbGUxNihBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpOwotCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCkKKwkJZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCkKIAkJCWFyZ3Muc0RhY2xvYWQudXNEZXZpY2VJRCA9IGNwdV90b19sZTE2KEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7Ci0JCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkgeworCQllbHNlIGlmIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkgewogCQkJYXJncy5zRGFjbG9hZC51c0RldmljZUlEID0gY3B1X3RvX2xlMTYoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCk7CiAJCQlpZiAoY3JldiA+PSAzKQogCQkJCWFyZ3Muc0RhY2xvYWQudWNNaXNjID0gREFDX0xPQURfTUlTQ19ZUHJQYjsKLQkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSB7CisJCX0gZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSB7CiAJCQlhcmdzLnNEYWNsb2FkLnVzRGV2aWNlSUQgPSBjcHVfdG9fbGUxNihBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCQlpZiAoY3JldiA+PSAzKQogCQkJCWFyZ3Muc0RhY2xvYWQudWNNaXNjID0gREFDX0xPQURfTUlTQ19ZUHJQYjsKQEAgLTExOTUsOSArMTIyOSwxMCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAl1aW50MzJfdCBiaW9zXzBfc2NyYXRjaDsKIAotCWlmICghYXRvbWJpb3NfZGFjX2xvYWRfZGV0ZWN0KGVuY29kZXIpKSB7CisJaWYgKCFhdG9tYmlvc19kYWNfbG9hZF9kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKSkgewogCQlEUk1fREVCVUcoImRldGVjdCByZXR1cm5lZCBmYWxzZSBcbiIpOwogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwogCX0KQEAgLTEyMDcsMTcgKzEyNDIsMjAgQEAKIAllbHNlCiAJCWJpb3NfMF9zY3JhdGNoID0gUlJFRzMyKFJBREVPTl9CSU9TXzBfU0NSQVRDSCk7CiAKLQlEUk1fREVCVUcoIkJpb3MgMCBzY3JhdGNoICV4XG4iLCBiaW9zXzBfc2NyYXRjaCk7Ci0JaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKSB7CisJRFJNX0RFQlVHKCJCaW9zIDAgc2NyYXRjaCAleCAlMDh4XG4iLCBiaW9zXzBfc2NyYXRjaCwgcmFkZW9uX2VuY29kZXItPmRldmljZXMpOworCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKSB7CiAJCWlmIChiaW9zXzBfc2NyYXRjaCAmIEFUT01fUzBfQ1JUMV9NQVNLKQogCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCX0gZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpIHsKKwl9CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpIHsKIAkJaWYgKGJpb3NfMF9zY3JhdGNoICYgQVRPTV9TMF9DUlQyX01BU0spCiAJCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NWX1NVUFBPUlQpIHsKKwl9CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSB7CiAJCWlmIChiaW9zXzBfc2NyYXRjaCAmIChBVE9NX1MwX0NWX01BU0t8QVRPTV9TMF9DVl9NQVNLX0EpKQogCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCX0gZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkgeworCX0KKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSB7CiAJCWlmIChiaW9zXzBfc2NyYXRjaCAmIChBVE9NX1MwX1RWMV9DT01QT1NJVEUgfCBBVE9NX1MwX1RWMV9DT01QT1NJVEVfQSkpCiAJCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7IC8qIENUViAqLwogCQllbHNlIGlmIChiaW9zXzBfc2NyYXRjaCAmIChBVE9NX1MwX1RWMV9TVklERU8gfCBBVE9NX1MwX1RWMV9TVklERU9fQSkpCkBAIC0xMjMwLDYgKzEyNjgsOCBAQAogewogCXJhZGVvbl9hdG9tX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9hdG9tX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisKKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTIzOCwxMiArMTI3OCwyMCBAQAogCXJhZGVvbl9hdG9tX291dHB1dF9sb2NrKGVuY29kZXIsIGZhbHNlKTsKIH0KIAorc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJcmFkZW9uX2F0b21fZW5jb2Rlcl9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwlyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSA9IDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHJhZGVvbl9hdG9tX2RpZ19oZWxwZXJfZnVuY3MgPSB7CiAJLmRwbXMgPSByYWRlb25fYXRvbV9lbmNvZGVyX2RwbXMsCiAJLm1vZGVfZml4dXAgPSByYWRlb25fYXRvbV9tb2RlX2ZpeHVwLAogCS5wcmVwYXJlID0gcmFkZW9uX2F0b21fZW5jb2Rlcl9wcmVwYXJlLAogCS5tb2RlX3NldCA9IHJhZGVvbl9hdG9tX2VuY29kZXJfbW9kZV9zZXQsCiAJLmNvbW1pdCA9IHJhZGVvbl9hdG9tX2VuY29kZXJfY29tbWl0LAorCS5kaXNhYmxlID0gcmFkZW9uX2F0b21fZW5jb2Rlcl9kaXNhYmxlLAogCS8qIG5vIGRldGVjdCBmb3IgVE1EUy9MVkRTIHlldCAqLwogfTsKIApAQCAtMTI2OCw2ICsxMzE2LDE4IEBACiAJLmRlc3Ryb3kgPSByYWRlb25fZW5jX2Rlc3Ryb3ksCiB9OwogCitzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKgorcmFkZW9uX2F0b21iaW9zX3NldF9kYWNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyKQoreworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqZGFjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRhYykKKwkJcmV0dXJuIE5VTEw7CisKKwlkYWMtPnR2X3N0ZCA9IFRWX1NURF9OVFNDOworCXJldHVybiBkYWM7Cit9CisKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqCiByYWRlb25fYXRvbWJpb3Nfc2V0X2RpZ19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIpCiB7CkBAIC0xMzM2LDYgKzEzOTYsNyBAQAogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMjoKIAkJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZyYWRlb25fYXRvbV9lbmNfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMpOworCQlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSByYWRlb25fYXRvbWJpb3Nfc2V0X2RhY19pbmZvKHJhZGVvbl9lbmNvZGVyKTsKIAkJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmcmFkZW9uX2F0b21fZGFjX2hlbHBlcl9mdW5jcyk7CiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfRFZPMToKQEAgLTEzNDUsOCArMTQwNiwxNCBAQAogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMToKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6Ci0JCWRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmcmFkZW9uX2F0b21fZW5jX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOwotCQlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSByYWRlb25fYXRvbWJpb3Nfc2V0X2RpZ19pbmZvKHJhZGVvbl9lbmNvZGVyKTsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgeworCQkJcmFkZW9uX2VuY29kZXItPnJteF90eXBlID0gUk1YX0ZVTEw7CisJCQlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnJhZGVvbl9hdG9tX2VuY19mdW5jcywgRFJNX01PREVfRU5DT0RFUl9MVkRTKTsKKwkJCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IHJhZGVvbl9hdG9tYmlvc19nZXRfbHZkc19pbmZvKHJhZGVvbl9lbmNvZGVyKTsKKwkJfSBlbHNlIHsKKwkJCWRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmcmFkZW9uX2F0b21fZW5jX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOworCQkJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gcmFkZW9uX2F0b21iaW9zX3NldF9kaWdfaW5mbyhyYWRlb25fZW5jb2Rlcik7CisJCX0KIAkJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmcmFkZW9uX2F0b21fZGlnX2hlbHBlcl9mdW5jcyk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3OTcyZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisKKy8qIHRoaXMgZmlsZSBkZWZpbmVzIHRoZSBDSElQXyAgYW5kIGZhbWlseSBmbGFncyB1c2VkIGluIHRoZSBwY2lpZHMsCisgKiBpdHMgaXMgY29tbW9uIGJldHdlZW4ga21zIGFuZCBub24ta21zIGJlY2F1c2UgZHVwbGljYXRpbmcgaXQgYW5kCisgKiBjaGFuZ2luZyBvbmUgcGxhY2UgaXMgZmFpbC4KKyAqLworI2lmbmRlZiBSQURFT05fRkFNSUxZX0gKKyNkZWZpbmUgUkFERU9OX0ZBTUlMWV9ICisvKgorICogUmFkZW9uIGNoaXAgZmFtaWxpZXMKKyAqLworZW51bSByYWRlb25fZmFtaWx5IHsKKwlDSElQX1IxMDAsCisJQ0hJUF9SVjEwMCwKKwlDSElQX1JTMTAwLAorCUNISVBfUlYyMDAsCisJQ0hJUF9SUzIwMCwKKwlDSElQX1IyMDAsCisJQ0hJUF9SVjI1MCwKKwlDSElQX1JTMzAwLAorCUNISVBfUlYyODAsCisJQ0hJUF9SMzAwLAorCUNISVBfUjM1MCwKKwlDSElQX1JWMzUwLAorCUNISVBfUlYzODAsCisJQ0hJUF9SNDIwLAorCUNISVBfUjQyMywKKwlDSElQX1JWNDEwLAorCUNISVBfUlM0MDAsCisJQ0hJUF9SUzQ4MCwKKwlDSElQX1JTNjAwLAorCUNISVBfUlM2OTAsCisJQ0hJUF9SUzc0MCwKKwlDSElQX1JWNTE1LAorCUNISVBfUjUyMCwKKwlDSElQX1JWNTMwLAorCUNISVBfUlY1NjAsCisJQ0hJUF9SVjU3MCwKKwlDSElQX1I1ODAsCisJQ0hJUF9SNjAwLAorCUNISVBfUlY2MTAsCisJQ0hJUF9SVjYzMCwKKwlDSElQX1JWNjcwLAorCUNISVBfUlY2MjAsCisJQ0hJUF9SVjYzNSwKKwlDSElQX1JTNzgwLAorCUNISVBfUlM4ODAsCisJQ0hJUF9SVjc3MCwKKwlDSElQX1JWNzMwLAorCUNISVBfUlY3MTAsCisJQ0hJUF9SVjc0MCwKKwlDSElQX0xBU1QsCit9OworCisvKgorICogQ2hpcCBmbGFncworICovCitlbnVtIHJhZGVvbl9jaGlwX2ZsYWdzIHsKKwlSQURFT05fRkFNSUxZX01BU0sgPSAweDAwMDBmZmZmVUwsCisJUkFERU9OX0ZMQUdTX01BU0sgPSAweGZmZmYwMDAwVUwsCisJUkFERU9OX0lTX01PQklMSVRZID0gMHgwMDAxMDAwMFVMLAorCVJBREVPTl9JU19JR1AgPSAweDAwMDIwMDAwVUwsCisJUkFERU9OX1NJTkdMRV9DUlRDID0gMHgwMDA0MDAwMFVMLAorCVJBREVPTl9JU19BR1AgPSAweDAwMDgwMDAwVUwsCisJUkFERU9OX0hBU19ISUVSWiA9IDB4MDAxMDAwMDBVTCwKKwlSQURFT05fSVNfUENJRSA9IDB4MDAyMDAwMDBVTCwKKwlSQURFT05fTkVXX01FTU1BUCA9IDB4MDA0MDAwMDBVTCwKKwlSQURFT05fSVNfUENJID0gMHgwMDgwMDAwMFVMLAorCVJBREVPTl9JU19JR1BHQVJUID0gMHgwMTAwMDAwMFVMLAorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKaW5kZXggZWMzODNlZC4uOTQ0ZTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCkBAIC0yOCwxNSArMjgsNyBAQAogICAgICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgpAQCAtNDUsMzc1ICszNywyNCBAQAogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb24uaCIKIAorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKKwogc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgewotCXN0cnVjdCByYWRlb25fZGV2aWNlCQkqcmRldjsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQkJKm1vZGU7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgaGVscGVyOwogCXN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIJKnJmYjsKLQlpbnQJCQkJY3J0Y19jb3VudDsKLQkvKiBjcnRjIGN1cnJlbnRseSBib3VuZCB0byB0aGlzICovCi0JdWludDMyX3QJCQljcnRjX2lkc1syXTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZQkJKnJkZXY7CiB9OwogCi1zdGF0aWMgaW50IHJhZGVvbmZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywKLQkJCSAgICAgIHVuc2lnbmVkIHJlZCwKLQkJCSAgICAgIHVuc2lnbmVkIGdyZWVuLAotCQkJICAgICAgdW5zaWduZWQgYmx1ZSwKLQkJCSAgICAgIHVuc2lnbmVkIHRyYW5zcCwKLQkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCByYWRlb25fZmJfZGV2aWNlICpyZmJkZXYgPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJmYmRldi0+cmRldi0+ZGRldjsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IGk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0JCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSAmcmFkZW9uX2NydGMtPm1vZGVfc2V0OwotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IG1vZGVzZXQtPmZiOwotCi0JCWZvciAoaSA9IDA7IGkgPCByZmJkZXYtPmNydGNfY291bnQ7IGkrKykgewotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcmZiZGV2LT5jcnRjX2lkc1tpXSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChpID09IHJmYmRldi0+Y3J0Y19jb3VudCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHJlZ25vID4gMjU1KSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAoZmItPmRlcHRoID09IDgpIHsKLQkJCXJhZGVvbl9jcnRjX2ZiX2dhbW1hX3NldChjcnRjLCByZWQsIGdyZWVuLCBibHVlLCByZWdubyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChyZWdubyA8IDE2KSB7Ci0JCQlzd2l0Y2ggKGZiLT5kZXB0aCkgewotCQkJY2FzZSAxNToKLQkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKChyZWQgJiAweGY4MDApID4+IDEpIHwKLQkJCQkJKChncmVlbiAmIDB4ZjgwMCkgPj4gIDYpIHwKLQkJCQkJKChibHVlICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE2OgotCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAocmVkICYgMHhmODAwKSB8Ci0JCQkJCSgoZ3JlZW4gJiAweGZjMDApID4+ICA1KSB8Ci0JCQkJCSgoYmx1ZSAgJiAweGY4MDApID4+IDExKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjQ6Ci0JCQljYXNlIDMyOgotCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPQotCQkJCQkoKChyZWQgPj4gOCkgJiAweGZmKSA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgfAotCQkJCQkoKChncmVlbiA+PiA4KSAmIDB4ZmYpIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKLQkJCQkJKCgoYmx1ZSA+PiA4KSAmIDB4ZmYpIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmFkZW9uZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyICpyZmIgPSByZmJkZXYtPnJmYjsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9ICZyZmItPmJhc2U7Ci0JaW50IGRlcHRoOwotCi0JaWYgKHZhci0+cGl4Y2xvY2sgPT0gLTEgfHwgIXZhci0+cGl4Y2xvY2spIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCS8qIE5lZWQgdG8gcmVzaXplIHRoZSBmYiBvYmplY3QgISEhICovCi0JaWYgKHZhci0+eHJlcyA+IGZiLT53aWR0aCB8fCB2YXItPnlyZXMgPiBmYi0+aGVpZ2h0KSB7Ci0JCURSTV9FUlJPUigiUmVxdWVzdGVkIHdpZHRoL2hlaWdodCBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBmYiAiCi0JCQkgICAib2JqZWN0ICVkeCVkID4gJWR4JWRcbiIsIHZhci0+eHJlcywgdmFyLT55cmVzLAotCQkJICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0KTsKLQkJRFJNX0VSUk9SKCJOZWVkIHJlc2l6aW5nIGNvZGUuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7Ci0JY2FzZSAxNjoKLQkJZGVwdGggPSAodmFyLT5ncmVlbi5sZW5ndGggPT0gNikgPyAxNiA6IDE1OwotCQlicmVhazsKLQljYXNlIDMyOgotCQlkZXB0aCA9ICh2YXItPnRyYW5zcC5sZW5ndGggPiAwKSA/IDMyIDogMjQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRlcHRoID0gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChkZXB0aCkgewotCWNhc2UgODoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gODsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OwotCQl2YXItPmJsdWUubGVuZ3RoID0gODsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOCi0JY2FzZSAxNToKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTA7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDU7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gNTsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDE7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDE1OwotCQlicmVhazsKLQljYXNlIDE2OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwotCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDE2OwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA4OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsKLQkJYnJlYWs7Ci0jZWxzZQotCWNhc2UgMjQ6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDg7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAyNDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gODsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OwotCQl2YXItPmJsdWUubGVuZ3RoID0gODsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gODsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAxNjsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDI0OwotCQl2YXItPnJlZC5sZW5ndGggPSA4OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogdGhpcyB3aWxsIGxldCBmYmNvbiBkbyB0aGUgbW9kZSBpbml0ICovCi1zdGF0aWMgaW50IHJhZGVvbmZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmZiZGV2LT5yZGV2LT5kZGV2OwotCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IHJldDsKLQlpbnQgaTsKLQotCWlmICh2YXItPnBpeGNsb2NrICE9IC0xKSB7Ci0JCURSTV9FUlJPUigiUElYRUwgQ0xDT0sgU0VUXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwotCi0JCWZvciAoaSA9IDA7IGkgPCByZmJkZXYtPmNydGNfY291bnQ7IGkrKykgewotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcmZiZGV2LT5jcnRjX2lkc1tpXSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChpID09IHJmYmRldi0+Y3J0Y19jb3VudCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNydGMtPmZiID09IHJhZGVvbl9jcnRjLT5tb2RlX3NldC5mYikgewotCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmcmFkZW9uX2NydGMtPm1vZGVfc2V0KTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByYWRlb25mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSAqcmZiZGV2ID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZmJkZXYtPnJkZXYtPmRkZXY7Ci0Jc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCByZmJkZXYtPmNydGNfY291bnQ7IGkrKykgewotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcmZiZGV2LT5jcnRjX2lkc1tpXSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKGkgPT0gcmZiZGV2LT5jcnRjX2NvdW50KSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0JCW1vZGVzZXQgPSAmcmFkZW9uX2NydGMtPm1vZGVfc2V0OwotCi0JCW1vZGVzZXQtPnggPSB2YXItPnhvZmZzZXQ7Ci0JCW1vZGVzZXQtPnkgPSB2YXItPnlvZmZzZXQ7Ci0KLQkJaWYgKG1vZGVzZXQtPm51bV9jb25uZWN0b3JzKSB7Ci0JCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKG1vZGVzZXQpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCWlmICghcmV0KSB7Ci0JCQkJaW5mby0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7Ci0JCQkJaW5mby0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgcmFkZW9uZmJfb24oc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmZiZGV2LT5yZGV2LT5kZGV2OwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0JaW50IGk7Ci0KLQkvKgotCSAqIEZvciBlYWNoIENSVEMgaW4gdGhpcyBmYiwgZmluZCBhbGwgYXNzb2NpYXRlZCBlbmNvZGVycwotCSAqIGFuZCB0dXJuIHRoZW0gb2ZmLCB0aGVuIHR1cm4gb2ZmIHRoZSBDUlRDLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgcmZiZGV2LT5jcnRjX2NvdW50OyBpKyspIHsKLQkJCWlmIChjcnRjLT5iYXNlLmlkID09IHJmYmRldi0+Y3J0Y19pZHNbaV0pIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOwotCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCi0JCS8qIEZvdW5kIGEgQ1JUQyBvbiB0aGlzIGZiLCBub3cgZmluZCBlbmNvZGVycyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewotCQkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewotCQkJCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7Ci0KLQkJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7Ci0JCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQkJZW5jb2Rlcl9mdW5jcy0+ZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09OKTsKLQkJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCByYWRlb25mYl9vZmYoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBkcG1zX21vZGUpCi17Ci0Jc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmZiZGV2LT5yZGV2LT5kZGV2OwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0JaW50IGk7Ci0KLQkvKgotCSAqIEZvciBlYWNoIENSVEMgaW4gdGhpcyBmYiwgZmluZCBhbGwgYXNzb2NpYXRlZCBlbmNvZGVycwotCSAqIGFuZCB0dXJuIHRoZW0gb2ZmLCB0aGVuIHR1cm4gb2ZmIHRoZSBDUlRDLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgcmZiZGV2LT5jcnRjX2NvdW50OyBpKyspIHsKLQkJCWlmIChjcnRjLT5iYXNlLmlkID09IHJmYmRldi0+Y3J0Y19pZHNbaV0pIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qIEZvdW5kIGEgQ1JUQyBvbiB0aGlzIGZiLCBub3cgZmluZCBlbmNvZGVycyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewotCQkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewotCQkJCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7Ci0KLQkJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7Ci0JCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQkJZW5jb2Rlcl9mdW5jcy0+ZHBtcyhlbmNvZGVyLCBkcG1zX21vZGUpOwotCQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGRwbXNfbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09GRikgewotCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIGRwbXNfbW9kZSk7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQl9Ci0JfQotfQotCi1pbnQgcmFkZW9uZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzd2l0Y2ggKGJsYW5rKSB7Ci0JY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotCQlyYWRlb25mYl9vbihpbmZvKTsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9CTEFOS19OT1JNQUw6Ci0JCXJhZGVvbmZiX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NUQU5EQlkpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0JCXJhZGVvbmZiX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NUQU5EQlkpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0JCXJhZGVvbmZiX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NVU1BFTkQpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKLQkJcmFkZW9uZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGZiX29wcyByYWRlb25mYl9vcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmZiX2NoZWNrX3ZhciA9IHJhZGVvbmZiX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3BhciA9IHJhZGVvbmZiX3NldF9wYXIsCi0JLmZiX3NldGNvbHJlZyA9IHJhZGVvbmZiX3NldGNvbHJlZywKKwkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZyA9IGRybV9mYl9oZWxwZXJfc2V0Y29scmVnLAogCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0JLmZiX3Bhbl9kaXNwbGF5ID0gcmFkZW9uZmJfcGFuX2Rpc3BsYXksCi0JLmZiX2JsYW5rID0gcmFkZW9uZmJfYmxhbmssCisJLmZiX3Bhbl9kaXNwbGF5ID0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAogfTsKIAogLyoqCkBAIC00NTYsMjEgKzk3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmFkZW9uZmJfcmVzaXplKTsKIAotc3RhdGljIHN0cnVjdCBkcm1fbW9kZV9zZXQgcGFuaWNfbW9kZTsKLQotaW50IHJhZGVvbmZiX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwgdW5zaWduZWQgbG9uZyB1bnVuc2VkLAotCQkgIHZvaWQgKnBhbmljX3N0cikKLXsKLQlEUk1fRVJST1IoInBhbmljIG9jY3VycmVkLCBzd2l0Y2hpbmcgYmFjayB0byB0ZXh0IGNvbnNvbGVcbiIpOwotCWRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKCZwYW5pY19tb2RlKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocmFkZW9uZmJfcGFuaWMpOwotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljZWQgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSByYWRlb25mYl9wYW5pYywKLX07Ci0KIHN0YXRpYyBpbnQgcmFkZW9uX2FsaWduX3BpdGNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgd2lkdGgsIGludCBicHAsIGJvb2wgdGlsZWQpCiB7CiAJaW50IGFsaWduZWQgPSB3aWR0aDsKQEAgLTQ5NSwxMSArMTIxLDE2IEBACiAJcmV0dXJuIGFsaWduZWQ7CiB9CiAKLWludCByYWRlb25mYl9jcmVhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCitzdGF0aWMgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgcmFkZW9uX2ZiX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2FtbWFfc2V0ID0gcmFkZW9uX2NydGNfZmJfZ2FtbWFfc2V0LAorfTsKKworaW50IHJhZGVvbmZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCwKIAkJICAgIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAotCQkgICAgc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciAqKnJmYl9wKQorCQkgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCByYWRlb25fZmJfZGV2aWNlICpyZmJkZXY7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBOVUxMOwpAQCAtNTEzLDYgKzE0NCw3IEBACiAJdm9pZCAqZmJwdHIgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWJvb2wgZmJfdGlsZWQgPSBmYWxzZTsgLyogdXNlZnVsIGZvciB0ZXN0aW5nICovCisJdTMyIHRpbGluZ19mbGFncyA9IDA7CiAKIAltb2RlX2NtZC53aWR0aCA9IHN1cmZhY2Vfd2lkdGg7CiAJbW9kZV9jbWQuaGVpZ2h0ID0gc3VyZmFjZV9oZWlnaHQ7CkBAIC01MzcsNyArMTY5LDIyIEBACiAJcm9iaiA9IGdvYmotPmRyaXZlcl9wcml2YXRlOwogCiAJaWYgKGZiX3RpbGVkKQotCQlyYWRlb25fb2JqZWN0X3NldF90aWxpbmdfZmxhZ3Mocm9iaiwgUkFERU9OX1RJTElOR19NQUNST3xSQURFT05fVElMSU5HX1NVUkZBQ0UsIG1vZGVfY21kLnBpdGNoKTsKKwkJdGlsaW5nX2ZsYWdzID0gUkFERU9OX1RJTElOR19NQUNSTzsKKworI2lmZGVmIF9fQklHX0VORElBTgorCXN3aXRjaCAobW9kZV9jbWQuYnBwKSB7CisJY2FzZSAzMjoKKwkJdGlsaW5nX2ZsYWdzIHw9IFJBREVPTl9USUxJTkdfU1dBUF8zMkJJVDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdGlsaW5nX2ZsYWdzIHw9IFJBREVPTl9USUxJTkdfU1dBUF8xNkJJVDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisjZW5kaWYKKworCWlmICh0aWxpbmdfZmxhZ3MpCisJCXJhZGVvbl9vYmplY3Rfc2V0X3RpbGluZ19mbGFncyhyb2JqLCB0aWxpbmdfZmxhZ3MgfCBSQURFT05fVElMSU5HX1NVUkZBQ0UsIG1vZGVfY21kLnBpdGNoKTsKIAltdXRleF9sb2NrKCZyZGV2LT5kZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWZiID0gcmFkZW9uX2ZyYW1lYnVmZmVyX2NyZWF0ZShyZGV2LT5kZGV2LCAmbW9kZV9jbWQsIGdvYmopOwogCWlmIChmYiA9PSBOVUxMKSB7CkBAIC01NTQsOCArMjAxLDggQEAKIAogCWxpc3RfYWRkKCZmYi0+ZmlscF9oZWFkLCAmcmRldi0+ZGRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QpOwogCisJKmZiX3AgPSBmYjsKIAlyZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoZmIpOwotCSpyZmJfcCA9IHJmYjsKIAlyZGV2LT5mYmRldl9yZmIgPSByZmI7CiAJcmRldi0+ZmJkZXZfcm9iaiA9IHJvYmo7CiAKQEAgLTU2NCw3ICsyMTEsMTUgQEAKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5yZWY7CiAJfQorCisJcmRldi0+ZmJkZXZfaW5mbyA9IGluZm87CiAJcmZiZGV2ID0gaW5mby0+cGFyOworCXJmYmRldi0+aGVscGVyLmZ1bmNzID0gJnJhZGVvbl9mYl9oZWxwZXJfZnVuY3M7CisJcmZiZGV2LT5oZWxwZXIuZGV2ID0gZGV2OworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KCZyZmJkZXYtPmhlbHBlciwgMiwKKwkJCQkJICAgIFJBREVPTkZCX0NPTk5fTElNSVQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VucmVmOwogCiAJaWYgKGZiX3RpbGVkKQogCQlyYWRlb25fb2JqZWN0X2NoZWNrX3RpbGluZyhyb2JqLCAwLCAwKTsKQEAgLTU3NywzMyArMjMyLDE5IEBACiAJbWVtc2V0X2lvKGZicHRyLCAwLCBhbGlnbmVkX3NpemUpOwogCiAJc3RyY3B5KGluZm8tPmZpeC5pZCwgInJhZGVvbmRybWZiIik7Ci0JaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0JaW5mby0+Zml4LnR5cGVfYXV4ID0gMDsKLQlpbmZvLT5maXgueHBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwotCWluZm8tPmZpeC55cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCi0JaW5mby0+Zml4Lnl3cmFwc3RlcCA9IDA7Ci0JaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKLQlpbmZvLT5maXgudHlwZV9hdXggPSAwOworCisJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gpOworCiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKIAlpbmZvLT5mYm9wcyA9ICZyYWRlb25mYl9vcHM7Ci0JaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gZmItPnBpdGNoOworCiAJdG1wID0gZmJfZ3B1YWRkciAtIHJkZXYtPm1jLnZyYW1fbG9jYXRpb247CiAJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSByZGV2LT5tYy5hcGVyX2Jhc2UgKyB0bXA7CiAJaW5mby0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGZicHRyOwogCWluZm8tPnNjcmVlbl9zaXplID0gc2l6ZTsKLQlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGZiLT5wc2V1ZG9fcGFsZXR0ZTsKLQlpbmZvLT52YXIueHJlc192aXJ0dWFsID0gZmItPndpZHRoOwotCWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBmYi0+aGVpZ2h0OwotCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IGZiLT5iaXRzX3Blcl9waXhlbDsKLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSAwOwotCWluZm8tPnZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKLQlpbmZvLT52YXIuaGVpZ2h0ID0gLTE7Ci0JaW5mby0+dmFyLndpZHRoID0gLTE7Ci0JaW5mby0+dmFyLnhyZXMgPSBmYl93aWR0aDsKLQlpbmZvLT52YXIueXJlcyA9IGZiX2hlaWdodDsKKworCWRybV9mYl9oZWxwZXJfZmlsbF92YXIoaW5mbywgZmIsIGZiX3dpZHRoLCBmYl9oZWlnaHQpOwogCiAJLyogc2V0dXAgYXBlcnR1cmUgYmFzZS9zaXplIGZvciB2ZXNhZmIgdGFrZW92ZXIgKi8KIAlpbmZvLT5hcGVydHVyZV9iYXNlID0gcmRldi0+ZGRldi0+bW9kZV9jb25maWcuZmJfYmFzZTsKQEAgLTYyNiw4MyArMjY3LDYgQEAKIAlEUk1fSU5GTygiZmIgZGVwdGggaXMgJWRcbiIsIGZiLT5kZXB0aCk7CiAJRFJNX0lORk8oIiAgIHBpdGNoIGlzICVkXG4iLCBmYi0+cGl0Y2gpOwogCi0Jc3dpdGNoIChmYi0+ZGVwdGgpIHsKLQljYXNlIDg6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsgLyogOGJpdCBEQUMgKi8KLQkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOwotCQlicmVhazsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KLQljYXNlIDE1OgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDEwOwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNTsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAxNTsKLQkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAxOwotCQlicmVhazsKLQljYXNlIDE2OgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDExOwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNjsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIDI0OgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDE2OwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTY7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDI0OwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDg7Ci0JCWJyZWFrOwotI2Vsc2UKLQljYXNlIDI0OgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDg7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSAxNjsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMjQ7Ci0JCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOwotCQlicmVhazsKLQljYXNlIDMyOgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDg7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSAxNjsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMjQ7Ci0JCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSA4OwotCQlicmVhazsKLQlkZWZhdWx0OgotI2VuZGlmCi0JCWJyZWFrOwotCX0KLQogCWZiLT5mYmRldiA9IGluZm87CiAJcmZiZGV2LT5yZmIgPSByZmI7CiAJcmZiZGV2LT5yZGV2ID0gcmRldjsKQEAgLTcyNiwxNDUgKzI5MCwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uZmJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXVuc2lnbmVkIGludCBmYl93aWR0aCA9ICh1bnNpZ25lZCktMSwgZmJfaGVpZ2h0ID0gKHVuc2lnbmVkKS0xOwotCXVuc2lnbmVkIGludCBzdXJmYWNlX3dpZHRoID0gMCwgc3VyZmFjZV9oZWlnaHQgPSAwOwotCWludCBuZXdfZmIgPSAwOwotCWludCBjcnRjX2NvdW50ID0gMDsKLQlpbnQgcmV0LCBpLCBjb25uX2NvdW50ID0gMDsKLQlzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyICpyZmI7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm87Ci0Jc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldjsKLQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0gTlVMTDsKLQotCS8qIGZpcnN0IHVwIGdldCBhIGNvdW50IG9mIGNydGNzIG5vdyBpbiB1c2UgYW5kIG5ldyBtaW4vbWF4ZXMgd2lkdGgvaGVpZ2h0cyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlpZiAoZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkgewotCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZSkgewotCQkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5IDwgZmJfd2lkdGgpCi0JCQkJCWZiX3dpZHRoID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheTsKLQotCQkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5IDwgZmJfaGVpZ2h0KQotCQkJCQlmYl9oZWlnaHQgPSBjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5OwotCi0JCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXkgPiBzdXJmYWNlX3dpZHRoKQotCQkJCQlzdXJmYWNlX3dpZHRoID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheTsKLQotCQkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5ID4gc3VyZmFjZV9oZWlnaHQpCi0JCQkJCXN1cmZhY2VfaGVpZ2h0ID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheTsKLQkJCX0KLQkJCWNydGNfY291bnQrKzsKLQkJfQotCX0KLQotCWlmIChjcnRjX2NvdW50ID09IDAgfHwgZmJfd2lkdGggPT0gLTEgfHwgZmJfaGVpZ2h0ID09IC0xKSB7Ci0JCS8qIGhtbSBldmVyeW9uZSB3ZW50IGF3YXkgLSBhc3N1bWUgVkdBIGNhYmxlIGp1c3QgZmVsbCBvdXQKLQkJICAgYW5kIHdpbGwgY29tZSBiYWNrIGxhdGVyLiAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBkbyB3ZSBoYXZlIGFuIGZiIGFscmVhZHk/ICovCi0JaWYgKGxpc3RfZW1wdHkoJnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0KSkgewotCQkvKiBjcmVhdGUgYW4gZmIgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgKi8KLQkJcmV0ID0gcmFkZW9uZmJfY3JlYXRlKHJkZXYsIGZiX3dpZHRoLCBmYl9oZWlnaHQsIHN1cmZhY2Vfd2lkdGgsIHN1cmZhY2VfaGVpZ2h0LCAmcmZiKTsKLQkJaWYgKHJldCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbmV3X2ZiID0gMTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKLQkJZmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciwgZmlscF9oZWFkKTsKLQkJcmZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKLQotCQkvKiBpZiBzb21lb25lIGhvdHBsdWdzIHNvbWV0aGluZyBiaWdnZXIgdGhhbiB3ZSBoYXZlIGFscmVhZHkgYWxsb2NhdGVkLCB3ZSBhcmUgcHduZWQuCi0JCSAgIEFzIHJlYWxseSB3ZSBjYW4ndCByZXNpemUgYW4gZmJkZXYgdGhhdCBpcyBpbiB0aGUgd2lsZCBjdXJyZW50bHkgZHVlIHRvIGZiZGV2Ci0JCSAgIG5vdCByZWFsbHkgYmVpbmcgZGVzaWduZWQgZm9yIHRoZSBsb3dlciBsYXllcnMgbW92aW5nIHN0dWZmIGFyb3VuZCB1bmRlciBpdC4KLQkJICAgLSBzbyBpbiB0aGUgZ3JhbmQgc3R5bGUgb2YgdGhpbmdzIC0gcHVudC4gKi8KLQkJaWYgKChmYi0+d2lkdGggPCBzdXJmYWNlX3dpZHRoKSB8fCAoZmItPmhlaWdodCA8IHN1cmZhY2VfaGVpZ2h0KSkgewotCQkJRFJNX0VSUk9SKCJGcmFtZWJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIHRvIHNjYWxlIGNvbnNvbGUgb250by5cbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlpbmZvID0gcmZiLT5iYXNlLmZiZGV2OwotCXJkZXYtPmZiZGV2X2luZm8gPSBpbmZvOwotCXJmYmRldiA9IGluZm8tPnBhcjsKLQotCWNydGNfY291bnQgPSAwOwotCS8qIG9rYXkgd2UgbmVlZCB0byBzZXR1cCBuZXcgY29ubmVjdG9yIHNldHMgaW4gdGhlIGNydGNzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmcmRldi0+ZGRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKLQkJbW9kZXNldCA9ICZyYWRlb25fY3J0Yy0+bW9kZV9zZXQ7Ci0JCW1vZGVzZXQtPmZiID0gJnJmYi0+YmFzZTsKLQkJY29ubl9jb3VudCA9IDA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmcmRldi0+ZGRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKLQkJCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCi0JCQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9PSBtb2Rlc2V0LT5jcnRjKSB7Ci0JCQkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbY29ubl9jb3VudF0gPSBjb25uZWN0b3I7Ci0JCQkJCWNvbm5fY291bnQrKzsKLQkJCQkJaWYgKGNvbm5fY291bnQgPiBSQURFT05GQl9DT05OX0xJTUlUKQotCQkJCQkJQlVHKCk7Ci0JCQkJfQotCQl9Ci0KLQkJZm9yIChpID0gY29ubl9jb3VudDsgaSA8IFJBREVPTkZCX0NPTk5fTElNSVQ7IGkrKykKLQkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbaV0gPSBOVUxMOwotCi0KLQkJcmZiZGV2LT5jcnRjX2lkc1tjcnRjX2NvdW50KytdID0gY3J0Yy0+YmFzZS5pZDsKLQotCQltb2Rlc2V0LT5udW1fY29ubmVjdG9ycyA9IGNvbm5fY291bnQ7Ci0JCWlmIChtb2Rlc2V0LT5jcnRjLT5kZXNpcmVkX21vZGUpIHsKLQkJCWlmIChtb2Rlc2V0LT5tb2RlKSB7Ci0JCQkJZHJtX21vZGVfZGVzdHJveShyZGV2LT5kZGV2LCBtb2Rlc2V0LT5tb2RlKTsKLQkJCX0KLQkJCW1vZGVzZXQtPm1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUocmRldi0+ZGRldiwKLQkJCQkJCQkgICBtb2Rlc2V0LT5jcnRjLT5kZXNpcmVkX21vZGUpOwotCQl9Ci0JfQotCXJmYmRldi0+Y3J0Y19jb3VudCA9IGNydGNfY291bnQ7Ci0KLQlpZiAobmV3X2ZiKSB7Ci0JCWluZm8tPnZhci5waXhjbG9jayA9IC0xOwotCQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uZmJfc2V0X3BhcihpbmZvKTsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwKLQkgICAgICAgaW5mby0+Zml4LmlkKTsKLQotCS8qIFN3aXRjaCBiYWNrIHRvIGtlcm5lbCBjb25zb2xlIG9uIHBhbmljICovCi0JcGFuaWNfbW9kZSA9ICptb2Rlc2V0OwotCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOwotCXByaW50ayhLRVJOX0lORk8gInJlZ2lzdGVyZWQgcGFuaWMgbm90aWZpZXJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCByYWRlb25mYl9wcm9iZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7Ci0KLQkvKiBzb21ldGhpbmcgaGFzIGNoYW5nZWQgaW4gdGhlIGxvd2VyIGxldmVscyBvZiBoZWxsIC0gZGVhbCB3aXRoIGl0Ci0JICAgaGVyZSAqLwotCi0JLyogdHdvIG1vZGVzIDogYSkgMSBmYiB0byBydWxlIGFsbCBjcnRjcy4KLQkgICAgICAgICAgICAgICBiKSBvbmUgZmIgcGVyIGNydGMuCi0JICAgdHdvIGFjdGlvbnMgMSkgbmV3IGNvbm5lY3RlZCBkZXZpY2UKLQkgICAgICAgICAgICAgICAyKSBkZXZpY2UgcmVtb3ZlZC4KLQkgICBjYXNlIGEvMSA6IGlmIHRoZSBmYiBzdXJmYWNlIGlzbid0IGJpZyBlbm91Z2ggLSByZXNpemUgdGhlIHN1cmZhY2UgZmIuCi0JICAgICAgICAgICAgICBpZiB0aGUgZmIgc2l6ZSBpc24ndCBiaWcgZW5vdWdoIC0gcmVzaXplIGZiIGludG8gc3VyZmFjZS4KLQkJICAgICAgaWYgZXZlcnl0aGluZyBiaWcgZW5vdWdoIGNvbmZpZ3VyZSB0aGUgbmV3IGNydGMvZXRjLgotCSAgIGNhc2UgYS8yIDogdW5kbyB0aGUgY29uZmlndXJhdGlvbgotCSAgICAgICAgICAgICAgcG9zc2libHkgcmVzaXplIGRvd24gdGhlIGZiIHRvIGZpdCB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgIGNhc2UgYi8xIDogc2VlIGlmIGl0IGlzIG9uIGEgbmV3IGNydGMgLSBzZXR1cCBhIG5ldyBmYiBhbmQgYWRkIGl0LgotCSAgIGNhc2UgYi8yIDogdGVhcmRvd24gdGhlIG5ldyBmYi4KLQkqLwotCXJldCA9IHJhZGVvbmZiX3NpbmdsZV9mYl9wcm9iZShkZXYtPmRldl9wcml2YXRlKTsKKwlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsICZyYWRlb25mYl9jcmVhdGUpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJhZGVvbmZiX3Byb2JlKTsKQEAgLTg4MCwxNiArMzA5LDE3IEBACiAJfQogCWluZm8gPSBmYi0+ZmJkZXY7CiAJaWYgKGluZm8pIHsKKwkJc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldiA9IGluZm8tPnBhcjsKIAkJcm9iaiA9IHJmYi0+b2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAkJcmFkZW9uX29iamVjdF9rdW5tYXAocm9iaik7CiAJCXJhZGVvbl9vYmplY3RfdW5waW4ocm9iaik7CisJCWRybV9mYl9oZWxwZXJfZnJlZSgmcmZiZGV2LT5oZWxwZXIpOwogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gInVucmVnaXN0ZXJlZCBwYW5pYyBub3RpZmllclxuIik7Ci0JYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY2VkKTsKLQltZW1zZXQoJnBhbmljX21vZGUsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfc2V0KSk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmFkZW9uZmJfcmVtb3ZlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCmluZGV4IGI0ZTQ4ZGQuLjNiZWIyNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYwpAQCAtNTMsOSArNTMsOSBAQAogCQkgKiBhd2F5CiAJCSAqLwogCQlXUkVHMzIocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnLCBmZW5jZS0+c2VxKTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlyYWRlb25fZmVuY2VfcmluZ19lbWl0KHJkZXYsIGZlbmNlKTsKLQl9CisKIAlmZW5jZS0+ZW1pdGVkID0gdHJ1ZTsKIAlmZW5jZS0+dGltZW91dCA9IGppZmZpZXMgKyAoKDIwMDAgKiBIWikgLyAxMDAwKTsKIAlsaXN0X2RlbCgmZmVuY2UtPmxpc3QpOwpAQCAtMTY4LDcgKzE2OCwzOCBAQAogCXJldHVybiBzaWduYWxlZDsKIH0KIAotaW50IHJhZGVvbl9mZW5jZV93YWl0KHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlLCBib29sIGludGVycnVwdGlibGUpCitpbnQgcjYwMF9mZW5jZV93YWl0KHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlLCAgYm9vbCBpbnRyLCBib29sIGxhenkpCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXY7CisJaW50IHJldCA9IDA7CisKKwlyZGV2ID0gZmVuY2UtPnJkZXY7CisKKwlfX3NldF9jdXJyZW50X3N0YXRlKGludHIgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAocmFkZW9uX2ZlbmNlX3NpZ25hbGVkKGZlbmNlKSkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGZlbmNlLT50aW1lb3V0KSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAobGF6eSkKKwkJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisKKwkJaWYgKGludHIgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9CisJfQorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZXR1cm4gcmV0OworfQorCisKK2ludCByYWRlb25fZmVuY2Vfd2FpdChzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSwgYm9vbCBpbnRyKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2OwogCXVuc2lnbmVkIGxvbmcgY3VyX2ppZmZpZXM7CkBAIC0xNzYsNyArMjA3LDYgQEAKIAlib29sIGV4cGlyZWQgPSBmYWxzZTsKIAlpbnQgcjsKIAotCiAJaWYgKGZlbmNlID09IE5VTEwpIHsKIAkJV0FSTigxLCAiUXVlcnlpbmcgYW4gaW52YWxpZCBmZW5jZSA6ICVwICFcbiIsIGZlbmNlKTsKIAkJcmV0dXJuIDA7CkBAIC0xODUsMTMgKzIxNSwyMiBAQAogCWlmIChyYWRlb25fZmVuY2Vfc2lnbmFsZWQoZmVuY2UpKSB7CiAJCXJldHVybiAwOwogCX0KKworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CisJCXIgPSByNjAwX2ZlbmNlX3dhaXQoZmVuY2UsIGludHIsIDApOworCQlpZiAociA9PSAtRVJFU1RBUlRTWVMpCisJCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gcjsKKwl9CisKIHJldHJ5OgogCWN1cl9qaWZmaWVzID0gamlmZmllczsKIAl0aW1lb3V0ID0gSFogLyAxMDA7CiAJaWYgKHRpbWVfYWZ0ZXIoZmVuY2UtPnRpbWVvdXQsIGN1cl9qaWZmaWVzKSkgewogCQl0aW1lb3V0ID0gZmVuY2UtPnRpbWVvdXQgLSBjdXJfamlmZmllczsKIAl9Ci0JaWYgKGludGVycnVwdGlibGUpIHsKKworCWlmIChpbnRyKSB7CiAJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChyZGV2LT5mZW5jZV9kcnYucXVldWUsCiAJCQkJcmFkZW9uX2ZlbmNlX3NpZ25hbGVkKGZlbmNlKSwgdGltZW91dCk7CiAJCWlmICh1bmxpa2VseShyID09IC1FUkVTVEFSVFNZUykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwppbmRleCAyOTc3NTM5Li5hOTMxYWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCkBAIC03NSw3ICs3NSw2IEBACiAKIGludCByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQ2NF90IGdwdV9hZGRyOwogCWludCByOwogCiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKQEAgLTg4LDYgKzg3LDE0IEBACiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQ2NF90IGdwdV9hZGRyOworCWludCByOworCiAJciA9IHJhZGVvbl9vYmplY3RfcGluKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqLAogCQkJICAgICAgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwgJmdwdV9hZGRyKTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMKaW5kZXggNTZkZWNkYS4uYTFiZjExZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jCkBAIC00MjIsMyArNDIyLDE4IEBACiAKIAlyZXR1cm4gcmV0OwogfQorCitsb25nIHJhZGVvbl9rbXNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBpbnQgbnIgPSBEUk1fSU9DVExfTlIoY21kKTsKKwlpbnQgcmV0OworCisJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSkKKwkJcmV0dXJuIGRybV9jb21wYXRfaW9jdGwoZmlscCwgY21kLCBhcmcpOworCisJbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCisJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwppbmRleCA5ODM2YzcwLi5iNzllY2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwpAQCAtMTg4LDYgKzE4OCw5IEBACiAJdTMyIHN0YXQ7CiAJdTMyIHI1MDBfZGlzcF9pbnQ7CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKIAkvKiBPbmx5IGNvbnNpZGVyIHRoZSBiaXRzIHdlJ3JlIGludGVyZXN0ZWQgaW4gLSBvdGhlcnMgY291bGQgYmUgdXNlZAogCSAqIG91dHNpZGUgdGhlIERSTQogCSAqLwpAQCAtMjg2LDYgKzI4OSw5IEBACiAJZHJtX3JhZGVvbl9pcnFfZW1pdF90ICplbWl0ID0gZGF0YTsKIAlpbnQgcmVzdWx0OwogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJaWYgKCFkZXZfcHJpdikgewpAQCAtMzE1LDYgKzMyMSw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIHJhZGVvbl93YWl0X2lycShkZXYsIGlycXdhaXQtPmlycV9zZXEpOwogfQogCkBAIC0zMjYsNiArMzM1LDkgQEAKIAkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIGR1bW15OwogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuOworCiAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCiAJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApCiAJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CkBAIC0zNDUsNiArMzU3LDkgQEAKIAogCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4MDAxZmZmZmY7CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gMDsKKwogCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX1NXX0lOVF9FTkFCTEUsIDEpOwogCiAJcmV0dXJuIDA7CkBAIC0zNTcsNiArMzcyLDkgQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm47CisKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwppbmRleCA5ODA1ZTRiLi4xODQxMTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCi0jaW5jbHVkZSAicmFkZW9uX21pY3JvY29kZS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCBkY2UwOWFkLi43MDliZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtNTQsMTIgKzU0LDIzIEBACiAJCWZsYWdzIHw9IFJBREVPTl9JU19QQ0k7CiAJfQogCisJLyogcmFkZW9uX2RldmljZV9pbml0IHNob3VsZCByZXBvcnQgb25seSBmYXRhbCBlcnJvcgorCSAqIGxpa2UgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBvciBpb21hcHBpbmcgZmFpbHVyZSwKKwkgKiBvciBtZW1vcnkgbWFuYWdlciBpbml0aWFsaXphdGlvbiBmYWlsdXJlLCBpdCBtdXN0CisJICogcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgR1BVIE1DIGNvbnRyb2xsZXIgYW5kIHBlcm1pdAorCSAqIFZSQU0gYWxsb2NhdGlvbgorCSAqLwogCXIgPSByYWRlb25fZGV2aWNlX2luaXQocmRldiwgZGV2LCBkZXYtPnBkZXYsIGZsYWdzKTsKIAlpZiAocikgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIHJhZGVvbiwgZGlzYWJsaW5nIElPQ1RMXG4iKTsKLQkJcmFkZW9uX2RldmljZV9maW5pKHJkZXYpOwotCQlrZnJlZShyZGV2KTsKLQkJZGV2LT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisJCURSTV9FUlJPUigiRmF0YWwgZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcmFkZW9uLlxuIik7CisJCXJldHVybiByOworCX0KKwkvKiBBZ2FpbiBtb2Rlc2V0X2luaXQgc2hvdWxkIGZhaWwgb25seSBvbiBmYXRhbCBlcnJvcgorCSAqIG90aGVyd2lzZSBpdCBzaG91bGQgcHJvdmlkZSBlbm91Z2ggZnVuY3Rpb25hbGl0aWVzCisJICogZm9yIHNoYWRvd2ZiIHRvIHJ1bgorCSAqLworCXIgPSByYWRlb25fbW9kZXNldF9pbml0KHJkZXYpOworCWlmIChyKSB7CiAJCXJldHVybiByOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY5LDYgKzgwLDkgQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwlpZiAocmRldiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlyYWRlb25fbW9kZXNldF9maW5pKHJkZXYpOwogCXJhZGVvbl9kZXZpY2VfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2KTsKIAlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKQEAgLTk4LDYgKzExMiw5IEBACiAJY2FzZSBSQURFT05fSU5GT19OVU1fWl9QSVBFUzoKIAkJdmFsdWUgPSByZGV2LT5udW1fel9waXBlczsKIAkJYnJlYWs7CisJY2FzZSBSQURFT05fSU5GT19BQ0NFTF9XT1JLSU5HOgorCQl2YWx1ZSA9IHJkZXYtPmFjY2VsX3dvcmtpbmc7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9ERUJVRygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCAwZGE3MmYxLi4yYjk5N2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxkcm0vcmFkZW9uX2RybS5oPgogI2luY2x1ZGUgInJhZGVvbl9maXhlZC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgImF0b20uaCIKIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9ybXhfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKQEAgLTM0MCw2ICszNDEsOSBAQAogCXVpbnQzMl90IGNydGNfcGl0Y2g7CiAKIAlzd2l0Y2ggKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJZm9ybWF0ID0gMjsKKwkJYnJlYWs7CiAJY2FzZSAxNTogICAgICAvKiAgNTU1ICovCiAJCWZvcm1hdCA9IDM7CiAJCWJyZWFrOwpAQCAtNDAwLDExICs0MDQsMzMgQEAKIAl1aW50MzJfdCBjcnRjX29mZnNldCwgY3J0Y19vZmZzZXRfY250bCwgY3J0Y190aWxlX3gwX3kwID0gMDsKIAl1aW50MzJfdCBjcnRjX3BpdGNoLCBwaXRjaF9waXhlbHM7CiAJdWludDMyX3QgdGlsaW5nX2ZsYWdzOworCWludCBmb3JtYXQ7CisJdWludDMyX3QgZ2VuX2NudGxfcmVnLCBnZW5fY250bF92YWw7CiAKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoY3J0Yy0+ZmIpOwogCisJc3dpdGNoIChjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWZvcm1hdCA9IDI7CisJCWJyZWFrOworCWNhc2UgMTU6ICAgICAgLyogIDU1NSAqLworCQlmb3JtYXQgPSAzOworCQlicmVhazsKKwljYXNlIDE2OiAgICAgIC8qICA1NjUgKi8KKwkJZm9ybWF0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSAyNDogICAgICAvKiAgUkdCICovCisJCWZvcm1hdCA9IDU7CisJCWJyZWFrOworCWNhc2UgMzI6ICAgICAgLyogeFJHQiAqLworCQlmb3JtYXQgPSA2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJb2JqID0gcmFkZW9uX2ZiLT5vYmo7CiAJaWYgKHJhZGVvbl9nZW1fb2JqZWN0X3BpbihvYmosIFJBREVPTl9HRU1fRE9NQUlOX1ZSQU0sICZiYXNlKSkgewogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ1Nyw2ICs0ODMsOSBAQAogCX0gZWxzZSB7CiAJCWludCBvZmZzZXQgPSB5ICogcGl0Y2hfcGl4ZWxzICsgeDsKIAkJc3dpdGNoIChjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwkJY2FzZSA4OgorCQkJb2Zmc2V0ICo9IDE7CisJCQlicmVhazsKIAkJY2FzZSAxNToKIAkJY2FzZSAxNjoKIAkJCW9mZnNldCAqPSAyOwpAQCAtNDc1LDYgKzUwNCwxNiBAQAogCiAJYmFzZSAmPSB+NzsKIAorCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAxKQorCQlnZW5fY250bF9yZWcgPSBSQURFT05fQ1JUQzJfR0VOX0NOVEw7CisJZWxzZQorCQlnZW5fY250bF9yZWcgPSBSQURFT05fQ1JUQ19HRU5fQ05UTDsKKworCWdlbl9jbnRsX3ZhbCA9IFJSRUczMihnZW5fY250bF9yZWcpOworCWdlbl9jbnRsX3ZhbCAmPSB+KDB4ZiA8PCA4KTsKKwlnZW5fY250bF92YWwgfD0gKGZvcm1hdCA8PCA4KTsKKwlXUkVHMzIoZ2VuX2NudGxfcmVnLCBnZW5fY250bF92YWwpOworCiAJY3J0Y19vZmZzZXQgPSAodTMyKWJhc2U7CiAKIAlXUkVHMzIoUkFERU9OX0RJU1BMQVlfQkFTRV9BRERSICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCByYWRlb25fY3J0Yy0+bGVnYWN5X2Rpc3BsYXlfYmFzZV9hZGRyKTsKQEAgLTUwMSw2ICs1NDAsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJaW50IGZvcm1hdDsKIAlpbnQgaHN5bmNfc3RhcnQ7CiAJaW50IGhzeW5jX3dpZDsKQEAgLTUwOSwxMCArNTQ5LDI0IEBACiAJdWludDMyX3QgY3J0Y19oX3N5bmNfc3RydF93aWQ7CiAJdWludDMyX3QgY3J0Y192X3RvdGFsX2Rpc3A7CiAJdWludDMyX3QgY3J0Y192X3N5bmNfc3RydF93aWQ7CisJYm9vbCBpc190diA9IGZhbHNlOwogCiAJRFJNX0RFQlVHKCJcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKKwkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIEFUT01fREVWSUNFX1RWX1NVUFBPUlQpIHsKKwkJCQlpc190diA9IHRydWU7CisJCQkJRFJNX0lORk8oImNydGMgJWQgaXMgY29ubmVjdGVkIHRvIGEgVFZcbiIsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAogCXN3aXRjaCAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlmb3JtYXQgPSAyOworCQlicmVhazsKIAljYXNlIDE1OiAgICAgIC8qICA1NTUgKi8KIAkJZm9ybWF0ID0gMzsKIAkJYnJlYWs7CkBAIC02NDIsNiArNjk2LDExIEBACiAJCVdSRUczMihSQURFT05fQ1JUQ19FWFRfQ05UTCwgY3J0Y19leHRfY250bCk7CiAJfQogCisJaWYgKGlzX3R2KQorCQlyYWRlb25fbGVnYWN5X3R2X2FkanVzdF9jcnRjX3JlZyhlbmNvZGVyLCAmY3J0Y19oX3RvdGFsX2Rpc3AsCisJCQkJCQkgJmNydGNfaF9zeW5jX3N0cnRfd2lkLCAmY3J0Y192X3RvdGFsX2Rpc3AsCisJCQkJCQkgJmNydGNfdl9zeW5jX3N0cnRfd2lkKTsKKwogCVdSRUczMihSQURFT05fQ1JUQ19IX1RPVEFMX0RJU1AgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGNydGNfaF90b3RhbF9kaXNwKTsKIAlXUkVHMzIoUkFERU9OX0NSVENfSF9TWU5DX1NUUlRfV0lEICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBjcnRjX2hfc3luY19zdHJ0X3dpZCk7CiAJV1JFRzMyKFJBREVPTl9DUlRDX1ZfVE9UQUxfRElTUCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgY3J0Y192X3RvdGFsX2Rpc3ApOwpAQCAtNjY4LDcgKzcyNyw3IEBACiAJdWludDMyX3QgcGxsX3JlZl9kaXYgPSAwOwogCXVpbnQzMl90IHBsbF9mYl9wb3N0X2RpdiA9IDA7CiAJdWludDMyX3QgaHRvdGFsX2NudGwgPSAwOwotCisJYm9vbCBpc190diA9IGZhbHNlOwogCXN0cnVjdCByYWRlb25fcGxsICpwbGw7CiAKIAlzdHJ1Y3QgewpAQCAtNzAzLDYgKzc2MiwxMyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCisJCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiBBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSB7CisJCQkJaXNfdHYgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCiAJCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9IERSTV9NT0RFX0VOQ09ERVJfREFDKQogCQkJCXBsbF9mbGFncyB8PSBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVjsKIAkJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0gRFJNX01PREVfRU5DT0RFUl9MVkRTKSB7CkBAIC03NjYsNiArODMyLDEyIEBACiAJCQkJCSAgfihSQURFT05fUElYMkNMS19TUkNfU0VMX01BU0spKSB8CiAJCQkJCSBSQURFT05fUElYMkNMS19TUkNfU0VMX1AyUExMQ0xLKTsKIAorCQlpZiAoaXNfdHYpIHsKKwkJCXJhZGVvbl9sZWdhY3lfdHZfYWRqdXN0X3BsbDIoZW5jb2RlciwgJmh0b3RhbF9jbnRsLAorCQkJCQkJICAgICAmcGxsX3JlZl9kaXYsICZwbGxfZmJfcG9zdF9kaXYsCisJCQkJCQkgICAgICZwaXhjbGtzX2NudGwpOworCQl9CisKIAkJV1JFRzMyX1BMTF9QKFJBREVPTl9QSVhDTEtTX0NOVEwsCiAJCQkgICAgIFJBREVPTl9QSVgyQ0xLX1NSQ19TRUxfQ1BVQ0xLLAogCQkJICAgICB+KFJBREVPTl9QSVgyQ0xLX1NSQ19TRUxfTUFTSykpOwpAQCAtODIwLDYgKzg5MiwxNSBAQAogCiAJCVdSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCwgcGl4Y2xrc19jbnRsKTsKIAl9IGVsc2UgeworCQl1aW50MzJfdCBwaXhjbGtzX2NudGw7CisKKworCQlpZiAoaXNfdHYpIHsKKwkJCXBpeGNsa3NfY250bCA9IFJSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCk7CisJCQlyYWRlb25fbGVnYWN5X3R2X2FkanVzdF9wbGwxKGVuY29kZXIsICZodG90YWxfY250bCwgJnBsbF9yZWZfZGl2LAorCQkJCQkJICAgICAmcGxsX2ZiX3Bvc3RfZGl2LCAmcGl4Y2xrc19jbnRsKTsKKwkJfQorCiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19NT0JJTElUWSkgewogCQkJLyogQSB0ZW1wb3JhbCB3b3JrYXJvdW5kIGZvciB0aGUgb2NjYXRpb25hbCBibGFua2luZyBvbiBjZXJ0YWluIGxhcHRvcCBwYW5lbHMuCiAJCQkgICBUaGlzIGFwcGVhcnMgdG8gcmVsYXRlZCB0byB0aGUgUExMIGRpdmlkZXIgcmVnaXN0ZXJzIChmYWlsIHRvIGxvY2s/KS4KQEAgLTkxNCw2ICs5OTUsOCBAQAogCQkJICAgICBSQURFT05fVkNMS19TUkNfU0VMX1BQTExDTEssCiAJCQkgICAgIH4oUkFERU9OX1ZDTEtfU1JDX1NFTF9NQVNLKSk7CiAKKwkJaWYgKGlzX3R2KQorCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCBwaXhjbGtzX2NudGwpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwppbmRleCA5MzIyNjc1Li5iMTU0N2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwpAQCAtMjksNiArMjksMTUgQEAKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJhdG9tLmgiCiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKworCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKKwllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwlyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSA9IDA7Cit9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfbHZkc19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCiB7CkBAIC05OCw2ICsxMDcsOCBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV9sdmRzX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfbHZkc19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTk1LDYgKzIwNiw3IEBACiAJLnByZXBhcmUgPSByYWRlb25fbGVnYWN5X2x2ZHNfcHJlcGFyZSwKIAkubW9kZV9zZXQgPSByYWRlb25fbGVnYWN5X2x2ZHNfbW9kZV9zZXQsCiAJLmNvbW1pdCA9IHJhZGVvbl9sZWdhY3lfbHZkc19jb21taXQsCisJLmRpc2FibGUgPSByYWRlb25fbGVnYWN5X2VuY29kZXJfZGlzYWJsZSwKIH07CiAKIApAQCAtMjYwLDYgKzI3Miw3IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC00MDIsNiArNDE1LDcgQEAKIAkubW9kZV9zZXQgPSByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX21vZGVfc2V0LAogCS5jb21taXQgPSByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2NvbW1pdCwKIAkuZGV0ZWN0ID0gcmFkZW9uX2xlZ2FjeV9wcmltYXJ5X2RhY19kZXRlY3QsCisJLmRpc2FibGUgPSByYWRlb25fbGVnYWN5X2VuY29kZXJfZGlzYWJsZSwKIH07CiAKIApAQCAtNDU0LDYgKzQ2OCw3IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3RtZHNfaW50X2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfaW50X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC01NjYsNiArNTgxLDcgQEAKIAkucHJlcGFyZSA9IHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfcHJlcGFyZSwKIAkubW9kZV9zZXQgPSByYWRlb25fbGVnYWN5X3RtZHNfaW50X21vZGVfc2V0LAogCS5jb21taXQgPSByYWRlb25fbGVnYWN5X3RtZHNfaW50X2NvbW1pdCwKKwkuZGlzYWJsZSA9IHJhZGVvbl9sZWdhY3lfZW5jb2Rlcl9kaXNhYmxlLAogfTsKIAogCkBAIC02MjAsNiArNjM2LDcgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdG1kc19leHRfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19leHRfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTcwNiw2ICs3MjMsNyBAQAogCS5wcmVwYXJlID0gcmFkZW9uX2xlZ2FjeV90bWRzX2V4dF9wcmVwYXJlLAogCS5tb2RlX3NldCA9IHJhZGVvbl9sZWdhY3lfdG1kc19leHRfbW9kZV9zZXQsCiAJLmNvbW1pdCA9IHJhZGVvbl9sZWdhY3lfdG1kc19leHRfY29tbWl0LAorCS5kaXNhYmxlID0gcmFkZW9uX2xlZ2FjeV9lbmNvZGVyX2Rpc2FibGUsCiB9OwogCiAKQEAgLTcyNywxNyArNzQ1LDIxIEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCXVpbnQzMl90IGZwMl9nZW5fY250bCA9IDAsIGNydGMyX2dlbl9jbnRsID0gMCwgdHZfZGFjX2NudGwgPSAwOwotCS8qIHVpbnQzMl90IHR2X21hc3Rlcl9jbnRsID0gMDsgKi8KLQorCXVpbnQzMl90IHR2X21hc3Rlcl9jbnRsID0gMDsKKwlib29sIGlzX3R2OwogCURSTV9ERUJVRygiXG4iKTsKIAorCWlzX3R2ID0gcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiBBVE9NX0RFVklDRV9UVl9TVVBQT1JUID8gdHJ1ZSA6IGZhbHNlOworCiAJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApCiAJCWZwMl9nZW5fY250bCA9IFJSRUczMihSQURFT05fRlAyX0dFTl9DTlRMKTsKIAllbHNlIHsKLQkJY3J0YzJfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMKTsKLQkJLyogIEZJWE1FIFRWICovCi0JCS8qIHR2X21hc3Rlcl9jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCk7ICovCisJCWlmIChpc190dikKKwkJCXR2X21hc3Rlcl9jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCk7CisJCWVsc2UKKwkJCWNydGMyX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCk7CiAJCXR2X2RhY19jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7CiAJfQogCkBAIC03NDYsMjAgKzc2OCwyMyBAQAogCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkgewogCQkJZnAyX2dlbl9jbnRsIHw9IChSQURFT05fRlAyX09OIHwgUkFERU9OX0ZQMl9EVk9fRU4pOwogCQl9IGVsc2UgewotCQkJY3J0YzJfZ2VuX2NudGwgfD0gUkFERU9OX0NSVEMyX0NSVDJfT047Ci0JCQkvKiB0dl9tYXN0ZXJfY250bCB8PSBSQURFT05fVFZfT047ICovCisJCQlpZiAoaXNfdHYpCisJCQkJdHZfbWFzdGVyX2NudGwgfD0gUkFERU9OX1RWX09OOworCQkJZWxzZQorCQkJCWNydGMyX2dlbl9jbnRsIHw9IFJBREVPTl9DUlRDMl9DUlQyX09OOworCiAJCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMCB8fAotCQkJCQlyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIzIHx8Ci0JCQkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwKQorCQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMgfHwKKwkJCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjQxMCkKIAkJCQl0dl9kYWNfY250bCAmPSB+KFI0MjBfVFZfREFDX1JEQUNQRCB8Ci0JCQkJCQlSNDIwX1RWX0RBQ19HREFDUEQgfAotCQkJCQkJUjQyMF9UVl9EQUNfQkRBQ1BEIHwKLQkJCQkJCVJBREVPTl9UVl9EQUNfQkdTTEVFUCk7CisJCQkJCQkgUjQyMF9UVl9EQUNfR0RBQ1BEIHwKKwkJCQkJCSBSNDIwX1RWX0RBQ19CREFDUEQgfAorCQkJCQkJIFJBREVPTl9UVl9EQUNfQkdTTEVFUCk7CiAJCQllbHNlCiAJCQkJdHZfZGFjX2NudGwgJj0gfihSQURFT05fVFZfREFDX1JEQUNQRCB8Ci0JCQkJCQlSQURFT05fVFZfREFDX0dEQUNQRCB8Ci0JCQkJCQlSQURFT05fVFZfREFDX0JEQUNQRCB8Ci0JCQkJCQlSQURFT05fVFZfREFDX0JHU0xFRVApOworCQkJCQkJIFJBREVPTl9UVl9EQUNfR0RBQ1BEIHwKKwkJCQkJCSBSQURFT05fVFZfREFDX0JEQUNQRCB8CisJCQkJCQkgUkFERU9OX1RWX0RBQ19CR1NMRUVQKTsKIAkJfQogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKQEAgLTc2OCw4ICs3OTMsMTEgQEAKIAkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApCiAJCQlmcDJfZ2VuX2NudGwgJj0gfihSQURFT05fRlAyX09OIHwgUkFERU9OX0ZQMl9EVk9fRU4pOwogCQllbHNlIHsKLQkJCWNydGMyX2dlbl9jbnRsICY9IH5SQURFT05fQ1JUQzJfQ1JUMl9PTjsKLQkJCS8qIHR2X21hc3Rlcl9jbnRsICY9IH5SQURFT05fVFZfT047ICovCisJCQlpZiAoaXNfdHYpCisJCQkJdHZfbWFzdGVyX2NudGwgJj0gflJBREVPTl9UVl9PTjsKKwkJCWVsc2UKKwkJCQljcnRjMl9nZW5fY250bCAmPSB+UkFERU9OX0NSVEMyX0NSVDJfT047CisKIAkJCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIwIHx8CiAJCQkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMgfHwKIAkJCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUlY0MTApCkBAIC03ODksOCArODE3LDEwIEBACiAJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApIHsKIAkJV1JFRzMyKFJBREVPTl9GUDJfR0VOX0NOVEwsIGZwMl9nZW5fY250bCk7CiAJfSBlbHNlIHsKLQkJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOwotCQkvKiBXUkVHMzIoUkFERU9OX1RWX01BU1RFUl9DTlRMLCB0dl9tYXN0ZXJfY250bCk7ICovCisJCWlmIChpc190dikKKwkJCVdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsIHR2X21hc3Rlcl9jbnRsKTsKKwkJZWxzZQorCQkJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOwogCQlXUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMLCB0dl9kYWNfY250bCk7CiAJfQogCkBAIC04MDksNiArODM5LDcgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdHZfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3R2X2RhY19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtODMxLDExICs4NjIsMTUgQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGVuY29kZXItPmNydGMpOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CiAJdWludDMyX3QgdHZfZGFjX2NudGwsIGdwaW9wYWRfYSA9IDAsIGRhYzJfY250bCwgZGlzcF9vdXRwdXRfY250bCA9IDA7Ci0JdWludDMyX3QgZGlzcF9od19kZWJ1ZyA9IDAsIGZwMl9nZW5fY250bCA9IDA7CisJdWludDMyX3QgZGlzcF9od19kZWJ1ZyA9IDAsIGZwMl9nZW5fY250bCA9IDAsIGRpc3BfdHZfb3V0X2NudGwgPSAwOworCWJvb2wgaXNfdHYgPSBmYWxzZTsKIAogCURSTV9ERUJVRygiXG4iKTsKIAorCWlzX3R2ID0gcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiBBVE9NX0RFVklDRV9UVl9TVVBQT1JUID8gdHJ1ZSA6IGZhbHNlOworCiAJaWYgKHJkZXYtPmZhbWlseSAhPSBDSElQX1IyMDApIHsKIAkJdHZfZGFjX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKIAkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjAgfHwKQEAgLTg1OCw3ICs4OTMsNyBAQAogCQl9CiAKIAkJLyogIEZJWE1FIFRWICovCi0JCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpIHsKKwkJaWYgKHR2X2RhYykgewogCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwogCQkJdHZfZGFjX2NudGwgfD0gKFJBREVPTl9UVl9EQUNfTkJMQU5LIHwKIAkJCQkJUkFERU9OX1RWX0RBQ19OSE9MRCB8CkBAIC04NzUsNDQgKzkxMCw5MyBAQAogCWlmIChBU0lDX0lTX1IzMDAocmRldikpIHsKIAkJZ3Bpb3BhZF9hID0gUlJFRzMyKFJBREVPTl9HUElPUEFEX0EpIHwgMTsKIAkJZGlzcF9vdXRwdXRfY250bCA9IFJSRUczMihSQURFT05fRElTUF9PVVRQVVRfQ05UTCk7Ci0JfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKQotCQlmcDJfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0ZQMl9HRU5fQ05UTCk7CisJfQorCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDAgfHwgQVNJQ19JU19SMzAwKHJkZXYpKQorCQlkaXNwX3R2X291dF9jbnRsID0gUlJFRzMyKFJBREVPTl9ESVNQX1RWX09VVF9DTlRMKTsKIAllbHNlCiAJCWRpc3BfaHdfZGVidWcgPSBSUkVHMzIoUkFERU9OX0RJU1BfSFdfREVCVUcpOwogCi0JZGFjMl9jbnRsID0gUlJFRzMyKFJBREVPTl9EQUNfQ05UTDIpIHwgUkFERU9OX0RBQzJfREFDMl9DTEtfU0VMOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKQorCQlmcDJfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0ZQMl9HRU5fQ05UTCk7CiAKLQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgewotCQlpZiAoQVNJQ19JU19SMzAwKHJkZXYpKSB7Ci0JCQlkaXNwX291dHB1dF9jbnRsICY9IH5SQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfTUFTSzsKLQkJCWRpc3Bfb3V0cHV0X2NudGwgfD0gUkFERU9OX0RJU1BfVFZEQUNfU09VUkNFX0NSVEM7Ci0JCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkgewotCQkJZnAyX2dlbl9jbnRsICY9IH4oUjIwMF9GUDJfU09VUkNFX1NFTF9NQVNLIHwKLQkJCQkJICBSQURFT05fRlAyX0RWT19SQVRFX1NFTF9TRFIpOwotCQl9IGVsc2UKLQkJCWRpc3BfaHdfZGVidWcgfD0gUkFERU9OX0NSVDJfRElTUDFfU0VMOworCWlmIChpc190dikgeworCQl1aW50MzJfdCBkYWNfY250bDsKKworCQlkYWNfY250bCA9IFJSRUczMihSQURFT05fREFDX0NOVEwpOworCQlkYWNfY250bCAmPSB+UkFERU9OX0RBQ19UVk9fRU47CisJCVdSRUczMihSQURFT05fREFDX0NOVEwsIGRhY19jbnRsKTsKKworCQlpZiAoQVNJQ19JU19SMzAwKHJkZXYpKQorCQkJZ3Bpb3BhZF9hID0gUlJFRzMyKFJBREVPTl9HUElPUEFEX0EpICYgfjE7CisKKwkJZGFjMl9jbnRsID0gUlJFRzMyKFJBREVPTl9EQUNfQ05UTDIpICYgflJBREVPTl9EQUMyX0RBQzJfQ0xLX1NFTDsKKwkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApIHsKKwkJCWlmIChBU0lDX0lTX1IzMDAocmRldikpIHsKKwkJCQlkaXNwX291dHB1dF9jbnRsICY9IH5SQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfTUFTSzsKKwkJCQlkaXNwX291dHB1dF9jbnRsIHw9IChSQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfQ1JUQyB8CisJCQkJCQkgICAgIFJBREVPTl9ESVNQX1RWX1NPVVJDRV9DUlRDKTsKKwkJCX0KKwkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SMjAwKSB7CisJCQkJZGlzcF90dl9vdXRfY250bCAmPSB+UkFERU9OX0RJU1BfVFZfUEFUSF9TUkNfQ1JUQzI7CisJCQl9IGVsc2UgeworCQkJCWRpc3BfaHdfZGVidWcgfD0gUkFERU9OX0NSVDJfRElTUDFfU0VMOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKEFTSUNfSVNfUjMwMChyZGV2KSkgeworCQkJCWRpc3Bfb3V0cHV0X2NudGwgJj0gflJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9NQVNLOworCQkJCWRpc3Bfb3V0cHV0X2NudGwgfD0gUkFERU9OX0RJU1BfVFZfU09VUkNFX0NSVEM7CisJCQl9CisJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjIwMCkgeworCQkJCWRpc3BfdHZfb3V0X2NudGwgfD0gUkFERU9OX0RJU1BfVFZfUEFUSF9TUkNfQ1JUQzI7CisJCQl9IGVsc2UgeworCQkJCWRpc3BfaHdfZGVidWcgJj0gflJBREVPTl9DUlQyX0RJU1AxX1NFTDsKKwkJCX0KKwkJfQorCQlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgZGFjMl9jbnRsKTsKIAl9IGVsc2UgewotCQlpZiAoQVNJQ19JU19SMzAwKHJkZXYpKSB7Ci0JCQlkaXNwX291dHB1dF9jbnRsICY9IH5SQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfTUFTSzsKLQkJCWRpc3Bfb3V0cHV0X2NudGwgfD0gUkFERU9OX0RJU1BfVFZEQUNfU09VUkNFX0NSVEMyOwotCQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApIHsKLQkJCWZwMl9nZW5fY250bCAmPSB+KFIyMDBfRlAyX1NPVVJDRV9TRUxfTUFTSyB8Ci0JCQkJCSAgUkFERU9OX0ZQMl9EVk9fUkFURV9TRUxfU0RSKTsKLQkJCWZwMl9nZW5fY250bCB8PSBSMjAwX0ZQMl9TT1VSQ0VfU0VMX0NSVEMyOwotCQl9IGVsc2UKLQkJCWRpc3BfaHdfZGVidWcgJj0gflJBREVPTl9DUlQyX0RJU1AxX1NFTDsKLQl9CiAKLQlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgZGFjMl9jbnRsKTsKKwkJZGFjMl9jbnRsID0gUlJFRzMyKFJBREVPTl9EQUNfQ05UTDIpIHwgUkFERU9OX0RBQzJfREFDMl9DTEtfU0VMOworCisJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7CisJCQlpZiAoQVNJQ19JU19SMzAwKHJkZXYpKSB7CisJCQkJZGlzcF9vdXRwdXRfY250bCAmPSB+UkFERU9OX0RJU1BfVFZEQUNfU09VUkNFX01BU0s7CisJCQkJZGlzcF9vdXRwdXRfY250bCB8PSBSQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfQ1JUQzsKKwkJCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkgeworCQkJCWZwMl9nZW5fY250bCAmPSB+KFIyMDBfRlAyX1NPVVJDRV9TRUxfTUFTSyB8CisJCQkJCQkgIFJBREVPTl9GUDJfRFZPX1JBVEVfU0VMX1NEUik7CisJCQl9IGVsc2UKKwkJCQlkaXNwX2h3X2RlYnVnIHw9IFJBREVPTl9DUlQyX0RJU1AxX1NFTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChBU0lDX0lTX1IzMDAocmRldikpIHsKKwkJCQlkaXNwX291dHB1dF9jbnRsICY9IH5SQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfTUFTSzsKKwkJCQlkaXNwX291dHB1dF9jbnRsIHw9IFJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9DUlRDMjsKKwkJCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkgeworCQkJCWZwMl9nZW5fY250bCAmPSB+KFIyMDBfRlAyX1NPVVJDRV9TRUxfTUFTSyB8CisJCQkJCQkgIFJBREVPTl9GUDJfRFZPX1JBVEVfU0VMX1NEUik7CisJCQkJZnAyX2dlbl9jbnRsIHw9IFIyMDBfRlAyX1NPVVJDRV9TRUxfQ1JUQzI7CisJCQl9IGVsc2UKKwkJCQlkaXNwX2h3X2RlYnVnICY9IH5SQURFT05fQ1JUMl9ESVNQMV9TRUw7CisJCX0KKwkJV1JFRzMyKFJBREVPTl9EQUNfQ05UTDIsIGRhYzJfY250bCk7CisJfQogCiAJaWYgKEFTSUNfSVNfUjMwMChyZGV2KSkgewogCQlXUkVHMzJfUChSQURFT05fR1BJT1BBRF9BLCBncGlvcGFkX2EsIH4xKTsKLQkJV1JFRzMyKFJBREVPTl9ESVNQX1RWX09VVF9DTlRMLCBkaXNwX291dHB1dF9jbnRsKTsKLQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApCi0JCVdSRUczMihSQURFT05fRlAyX0dFTl9DTlRMLCBmcDJfZ2VuX2NudGwpOworCQlXUkVHMzIoUkFERU9OX0RJU1BfT1VUUFVUX0NOVEwsIGRpc3Bfb3V0cHV0X2NudGwpOworCX0KKworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SMjAwKQorCQlXUkVHMzIoUkFERU9OX0RJU1BfVFZfT1VUX0NOVEwsIGRpc3BfdHZfb3V0X2NudGwpOwogCWVsc2UKIAkJV1JFRzMyKFJBREVPTl9ESVNQX0hXX0RFQlVHLCBkaXNwX2h3X2RlYnVnKTsKIAorCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKQorCQlXUkVHMzIoUkFERU9OX0ZQMl9HRU5fQ05UTCwgZnAyX2dlbl9jbnRsKTsKKworCWlmIChpc190dikKKwkJcmFkZW9uX2xlZ2FjeV90dl9tb2RlX3NldChlbmNvZGVyLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKKwogCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCiAJCXJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2NydGNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKIAllbHNlCkBAIC05MjAsNiArMTAwNCwxNDEgQEAKIAogfQogCitzdGF0aWMgYm9vbCByMzAwX2xlZ2FjeV90dl9kZXRlY3Qoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjcnRjMl9nZW5fY250bCwgdHZfZGFjX2NudGwsIGRhY19jbnRsMiwgZGFjX2V4dF9jbnRsOworCXVpbnQzMl90IGRpc3Bfb3V0cHV0X2NudGwsIGdwaW9wYWRfYSwgdG1wOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCS8qIHNhdmUgcmVncyBuZWVkZWQgKi8KKwlncGlvcGFkX2EgPSBSUkVHMzIoUkFERU9OX0dQSU9QQURfQSk7CisJZGFjX2NudGwyID0gUlJFRzMyKFJBREVPTl9EQUNfQ05UTDIpOworCWNydGMyX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCk7CisJZGFjX2V4dF9jbnRsID0gUlJFRzMyKFJBREVPTl9EQUNfRVhUX0NOVEwpOworCXR2X2RhY19jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7CisJZGlzcF9vdXRwdXRfY250bCA9IFJSRUczMihSQURFT05fRElTUF9PVVRQVVRfQ05UTCk7CisKKwlXUkVHMzJfUChSQURFT05fR1BJT1BBRF9BLCAwLCB+MSk7CisKKwlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgUkFERU9OX0RBQzJfREFDMl9DTEtfU0VMKTsKKworCVdSRUczMihSQURFT05fQ1JUQzJfR0VOX0NOVEwsCisJICAgICAgIFJBREVPTl9DUlRDMl9DUlQyX09OIHwgUkFERU9OX0NSVEMyX1ZTWU5DX1RSSVNUQVQpOworCisJdG1wID0gZGlzcF9vdXRwdXRfY250bCAmIH5SQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfTUFTSzsKKwl0bXAgfD0gUkFERU9OX0RJU1BfVFZEQUNfU09VUkNFX0NSVEMyOworCVdSRUczMihSQURFT05fRElTUF9PVVRQVVRfQ05UTCwgdG1wKTsKKworCVdSRUczMihSQURFT05fREFDX0VYVF9DTlRMLAorCSAgICAgICBSQURFT05fREFDMl9GT1JDRV9CTEFOS19PRkZfRU4gfAorCSAgICAgICBSQURFT05fREFDMl9GT1JDRV9EQVRBX0VOIHwKKwkgICAgICAgUkFERU9OX0RBQ19GT1JDRV9EQVRBX1NFTF9SR0IgfAorCSAgICAgICAoMHhlYyA8PCBSQURFT05fREFDX0ZPUkNFX0RBVEFfU0hJRlQpKTsKKworCVdSRUczMihSQURFT05fVFZfREFDX0NOVEwsCisJICAgICAgIFJBREVPTl9UVl9EQUNfU1REX05UU0MgfAorCSAgICAgICAoOCA8PCBSQURFT05fVFZfREFDX0JHQURKX1NISUZUKSB8CisJICAgICAgICg2IDw8IFJBREVPTl9UVl9EQUNfREFDQURKX1NISUZUKSk7CisKKwlSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKKwltZGVsYXkoNCk7CisKKwlXUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMLAorCSAgICAgICBSQURFT05fVFZfREFDX05CTEFOSyB8CisJICAgICAgIFJBREVPTl9UVl9EQUNfTkhPTEQgfAorCSAgICAgICBSQURFT05fVFZfTU9OSVRPUl9ERVRFQ1RfRU4gfAorCSAgICAgICBSQURFT05fVFZfREFDX1NURF9OVFNDIHwKKwkgICAgICAgKDggPDwgUkFERU9OX1RWX0RBQ19CR0FESl9TSElGVCkgfAorCSAgICAgICAoNiA8PCBSQURFT05fVFZfREFDX0RBQ0FESl9TSElGVCkpOworCisJUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7CisJbWRlbGF5KDYpOworCisJdG1wID0gUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7CisJaWYgKCh0bXAgJiBSQURFT05fVFZfREFDX0dEQUNERVQpICE9IDApIHsKKwkJZm91bmQgPSB0cnVlOworCQlEUk1fREVCVUcoIlMtdmlkZW8gVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CisJfSBlbHNlIGlmICgodG1wICYgUkFERU9OX1RWX0RBQ19CREFDREVUKSAhPSAwKSB7CisJCWZvdW5kID0gdHJ1ZTsKKwkJRFJNX0RFQlVHKCJDb21wb3NpdGUgVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CisJfQorCisJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdHZfZGFjX2NudGwpOworCVdSRUczMihSQURFT05fREFDX0VYVF9DTlRMLCBkYWNfZXh0X2NudGwpOworCVdSRUczMihSQURFT05fQ1JUQzJfR0VOX0NOVEwsIGNydGMyX2dlbl9jbnRsKTsKKwlXUkVHMzIoUkFERU9OX0RJU1BfT1VUUFVUX0NOVEwsIGRpc3Bfb3V0cHV0X2NudGwpOworCVdSRUczMihSQURFT05fREFDX0NOVEwyLCBkYWNfY250bDIpOworCVdSRUczMl9QKFJBREVPTl9HUElPUEFEX0EsIGdwaW9wYWRfYSwgfjEpOworCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIGJvb2wgcmFkZW9uX2xlZ2FjeV90dl9kZXRlY3Qoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHR2X2RhY19jbnRsLCBkYWNfY250bDI7CisJdWludDMyX3QgY29uZmlnX2NudGwsIHR2X3ByZV9kYWNfbXV4X2NudGwsIHR2X21hc3Rlcl9jbnRsLCB0bXA7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKEFTSUNfSVNfUjMwMChyZGV2KSkKKwkJcmV0dXJuIHIzMDBfbGVnYWN5X3R2X2RldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOworCisJZGFjX2NudGwyID0gUlJFRzMyKFJBREVPTl9EQUNfQ05UTDIpOworCXR2X21hc3Rlcl9jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCk7CisJdHZfZGFjX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKKwljb25maWdfY250bCA9IFJSRUczMihSQURFT05fQ09ORklHX0NOVEwpOworCXR2X3ByZV9kYWNfbXV4X2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX1BSRV9EQUNfTVVYX0NOVEwpOworCisJdG1wID0gZGFjX2NudGwyICYgflJBREVPTl9EQUMyX0RBQzJfQ0xLX1NFTDsKKwlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgdG1wKTsKKworCXRtcCA9IHR2X21hc3Rlcl9jbnRsIHwgUkFERU9OX1RWX09OOworCXRtcCAmPSB+KFJBREVPTl9UVl9BU1lOQ19SU1QgfAorCQkgUkFERU9OX1JFU1RBUlRfUEhBU0VfRklYIHwKKwkJIFJBREVPTl9DUlRfRklGT19DRV9FTiB8CisJCSBSQURFT05fVFZfRklGT19DRV9FTiB8CisJCSBSQURFT05fUkVfU1lOQ19OT1dfU0VMX01BU0spOworCXRtcCB8PSBSQURFT05fVFZfRklGT19BU1lOQ19SU1QgfCBSQURFT05fQ1JUX0FTWU5DX1JTVDsKKwlXUkVHMzIoUkFERU9OX1RWX01BU1RFUl9DTlRMLCB0bXApOworCisJdG1wID0gUkFERU9OX1RWX0RBQ19OQkxBTksgfCBSQURFT05fVFZfREFDX05IT0xEIHwKKwkJUkFERU9OX1RWX01PTklUT1JfREVURUNUX0VOIHwgUkFERU9OX1RWX0RBQ19TVERfTlRTQyB8CisJCSg4IDw8IFJBREVPTl9UVl9EQUNfQkdBREpfU0hJRlQpOworCisJaWYgKGNvbmZpZ19jbnRsICYgUkFERU9OX0NGR19BVElfUkVWX0lEX01BU0spCisJCXRtcCB8PSAoNCA8PCBSQURFT05fVFZfREFDX0RBQ0FESl9TSElGVCk7CisJZWxzZQorCQl0bXAgfD0gKDggPDwgUkFERU9OX1RWX0RBQ19EQUNBREpfU0hJRlQpOworCVdSRUczMihSQURFT05fVFZfREFDX0NOVEwsIHRtcCk7CisKKwl0bXAgPSBSQURFT05fQ19HUk5fRU4gfCBSQURFT05fQ01QX0JMVV9FTiB8CisJCVJBREVPTl9SRURfTVhfRk9SQ0VfREFDX0RBVEEgfAorCQlSQURFT05fR1JOX01YX0ZPUkNFX0RBQ19EQVRBIHwKKwkJUkFERU9OX0JMVV9NWF9GT1JDRV9EQUNfREFUQSB8CisJCSgweDEwOSA8PCBSQURFT05fVFZfRk9SQ0VfREFDX0RBVEFfU0hJRlQpOworCVdSRUczMihSQURFT05fVFZfUFJFX0RBQ19NVVhfQ05UTCwgdG1wKTsKKworCW1kZWxheSgzKTsKKwl0bXAgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKKwlpZiAodG1wICYgUkFERU9OX1RWX0RBQ19HREFDREVUKSB7CisJCWZvdW5kID0gdHJ1ZTsKKwkJRFJNX0RFQlVHKCJTLXZpZGVvIFRWIGNvbm5lY3Rpb24gZGV0ZWN0ZWRcbiIpOworCX0gZWxzZSBpZiAoKHRtcCAmIFJBREVPTl9UVl9EQUNfQkRBQ0RFVCkgIT0gMCkgeworCQlmb3VuZCA9IHRydWU7CisJCURSTV9ERUJVRygiQ29tcG9zaXRlIFRWIGNvbm5lY3Rpb24gZGV0ZWN0ZWRcbiIpOworCX0KKworCVdSRUczMihSQURFT05fVFZfUFJFX0RBQ19NVVhfQ05UTCwgdHZfcHJlX2RhY19tdXhfY250bCk7CisJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdHZfZGFjX2NudGwpOworCVdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsIHR2X21hc3Rlcl9jbnRsKTsKKwlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgZGFjX2NudGwyKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJhZGVvbl9sZWdhY3lfdHZfZGFjX2RldGVjdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewpAQCAtOTI4LDkgKzExNDcsMjkgQEAKIAl1aW50MzJfdCBjcnRjMl9nZW5fY250bCwgdHZfZGFjX2NudGwsIGRhY19jbnRsMiwgZGFjX2V4dF9jbnRsOwogCXVpbnQzMl90IGRpc3BfaHdfZGVidWcsIGRpc3Bfb3V0cHV0X2NudGwsIGdwaW9wYWRfYSwgcGl4Y2xrc19jbnRsLCB0bXA7CiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBmb3VuZCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CiAJYm9vbCBjb2xvciA9IHRydWU7CiAKLQkvKiAgRklYTUUgdHYgKi8KKwlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPIHx8CisJICAgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZSB8fAorCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOKSB7CisJCWJvb2wgdHZfZGV0ZWN0OworCisJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmJiAhKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKKwkJdHZfZGV0ZWN0ID0gcmFkZW9uX2xlZ2FjeV90dl9kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKTsKKwkJaWYgKHR2X2RldGVjdCAmJiB0dl9kYWMpCisJCQlmb3VuZCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQlyZXR1cm4gZm91bmQ7CisJfQorCisJLyogZG9uJ3QgcHJvYmUgaWYgdGhlIGVuY29kZXIgaXMgYmVpbmcgdXNlZCBmb3Igc29tZXRoaW5nIGVsc2Ugbm90IENSVCByZWxhdGVkICovCisJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYmICEocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiBBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpIHsKKwkJRFJNX0lORk8oIm5vdCBkZXRlY3RpbmcgZHVlIHRvICUwOHhcbiIsIHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlKTsKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCX0KIAogCS8qIHNhdmUgdGhlIHJlZ3Mgd2UgbmVlZCAqLwogCXBpeGNsa3NfY250bCA9IFJSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCk7CkBAIC0xMDEzLDggKzEyNTIsNyBAQAogCX0KIAlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHBpeGNsa3NfY250bCk7CiAKLQkvKiByZXR1cm4gZm91bmQ7ICovCi0JcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCXJldHVybiBmb3VuZDsKIAogfQogCkBAIC0xMDI1LDYgKzEyNjMsNyBAQAogCS5tb2RlX3NldCA9IHJhZGVvbl9sZWdhY3lfdHZfZGFjX21vZGVfc2V0LAogCS5jb21taXQgPSByYWRlb25fbGVnYWN5X3R2X2RhY19jb21taXQsCiAJLmRldGVjdCA9IHJhZGVvbl9sZWdhY3lfdHZfZGFjX2RldGVjdCwKKwkuZGlzYWJsZSA9IHJhZGVvbl9sZWdhY3lfZW5jb2Rlcl9kaXNhYmxlLAogfTsKIAogCkBAIC0xMDMyLDYgKzEyNzEsMzAgQEAKIAkuZGVzdHJveSA9IHJhZGVvbl9lbmNfZGVzdHJveSwKIH07CiAKKworc3RhdGljIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqdG1kcyA9IE5VTEw7CisJYm9vbCByZXQ7CisKKwl0bWRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXRtZHMpCisJCXJldHVybiBOVUxMOworCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykKKwkJcmV0ID0gcmFkZW9uX2F0b21iaW9zX2dldF90bWRzX2luZm8oZW5jb2RlciwgdG1kcyk7CisJZWxzZQorCQlyZXQgPSByYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV9jb21iaW9zKGVuY29kZXIsIHRtZHMpOworCisJaWYgKHJldCA9PSBmYWxzZSkKKwkJcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fdGFibGUoZW5jb2RlciwgdG1kcyk7CisKKwlyZXR1cm4gdG1kczsKK30KKwogdm9pZAogcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBlbmNvZGVyX2lkLCB1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlKQogewpAQCAtMTA3OCwxMCArMTM0MSw3IEBACiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9UTURTMToKIAkJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZyYWRlb25fbGVnYWN5X3RtZHNfaW50X2VuY19mdW5jcywgRFJNX01PREVfRU5DT0RFUl9UTURTKTsKIAkJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmcmFkZW9uX2xlZ2FjeV90bWRzX2ludF9oZWxwZXJfZnVuY3MpOwotCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKQotCQkJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gcmFkZW9uX2F0b21iaW9zX2dldF90bWRzX2luZm8ocmFkZW9uX2VuY29kZXIpOwotCQllbHNlCi0JCQlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSByYWRlb25fY29tYmlvc19nZXRfdG1kc19pbmZvKHJhZGVvbl9lbmNvZGVyKTsKKwkJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvKHJhZGVvbl9lbmNvZGVyKTsKIAkJYnJlYWs7CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMxOgogCQlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfZW5jX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX0RBQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV90di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTJiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYwpAQCAtMCwwICsxLDkwNCBAQAorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKworLyoKKyAqIEludGVncmF0ZWQgVFYgb3V0IHN1cHBvcnQgYmFzZWQgb24gdGhlIEdBVE9TIGNvZGUgYnkKKyAqIEZlZGVyaWNvIFVsaXZpIDxmdWxpdmlAbHljb3MuY29tPgorICovCisKKworLyoKKyAqIExpbWl0cyBvZiBoL3YgcG9zaXRpb25zIChoUG9zICYgdlBvcykKKyAqLworI2RlZmluZSBNQVhfSF9QT1NJVElPTiA1IC8qIFJhbmdlOiBbLTUuLjVdLCBuZWdhdGl2ZSBpcyBvbiB0aGUgbGVmdCwgMCBpcyBkZWZhdWx0LCBwb3NpdGl2ZSBpcyBvbiB0aGUgcmlnaHQgKi8KKyNkZWZpbmUgTUFYX1ZfUE9TSVRJT04gNSAvKiBSYW5nZTogWy01Li41XSwgbmVnYXRpdmUgaXMgdXAsIDAgaXMgZGVmYXVsdCwgcG9zaXRpdmUgaXMgZG93biAqLworCisvKgorICogVW5pdCBmb3IgaFBvcyAoaW4gVFYgY2xvY2sgcGVyaW9kcykKKyAqLworI2RlZmluZSBIX1BPU19VTklUIDEwCisKKy8qCisgKiBJbmRleGVzIGluIGguIGNvZGUgdGltaW5nIHRhYmxlIGZvciBob3Jpem9udGFsIGxpbmUgcG9zaXRpb24gYWRqdXN0bWVudAorICovCisjZGVmaW5lIEhfVEFCTEVfUE9TMSA2CisjZGVmaW5lIEhfVEFCTEVfUE9TMiA4CisKKy8qCisgKiBMaW1pdHMgb2YgaG9yLiBzaXplIChoU2l6ZSkKKyAqLworI2RlZmluZSBNQVhfSF9TSVpFIDUgLyogUmFuZ2U6IFstNS4uNV0sIG5lZ2F0aXZlIGlzIHNtYWxsZXIsIHBvc2l0aXZlIGlzIGxhcmdlciAqLworCisvKiB0diBzdGFuZGFyZCBjb25zdGFudHMgKi8KKyNkZWZpbmUgTlRTQ19UVl9DTE9DS19UIDIzMworI2RlZmluZSBOVFNDX1RWX1ZGVE9UQUwgMQorI2RlZmluZSBOVFNDX1RWX0xJTkVTX1BFUl9GUkFNRSA1MjUKKyNkZWZpbmUgTlRTQ19UVl9aRVJPX0hfU0laRSA0NzkxNjYKKyNkZWZpbmUgTlRTQ19UVl9IX1NJWkVfVU5JVCA5NDc4CisKKyNkZWZpbmUgUEFMX1RWX0NMT0NLX1QgMTg4CisjZGVmaW5lIFBBTF9UVl9WRlRPVEFMIDMKKyNkZWZpbmUgUEFMX1RWX0xJTkVTX1BFUl9GUkFNRSA2MjUKKyNkZWZpbmUgUEFMX1RWX1pFUk9fSF9TSVpFIDQ3MzIwMAorI2RlZmluZSBQQUxfVFZfSF9TSVpFX1VOSVQgOTM2MAorCisvKiB0diBwbGwgc2V0dGluZyBmb3IgMjcgbWh6IHJlZiBjbGsgKi8KKyNkZWZpbmUgTlRTQ19UVl9QTExfTV8yNyAyMgorI2RlZmluZSBOVFNDX1RWX1BMTF9OXzI3IDE3NQorI2RlZmluZSBOVFNDX1RWX1BMTF9QXzI3IDUKKworI2RlZmluZSBQQUxfVFZfUExMX01fMjcgMTEzCisjZGVmaW5lIFBBTF9UVl9QTExfTl8yNyA2NjgKKyNkZWZpbmUgUEFMX1RWX1BMTF9QXzI3IDMKKworLyogdHYgcGxsIHNldHRpbmcgZm9yIDE0IG1oeiByZWYgY2xrICovCisjZGVmaW5lIE5UU0NfVFZfUExMX01fMTQgMzMKKyNkZWZpbmUgTlRTQ19UVl9QTExfTl8xNCA2OTMKKyNkZWZpbmUgTlRTQ19UVl9QTExfUF8xNCA3CisKKyNkZWZpbmUgVkVSVF9MRUFEX0lOX0xJTkVTIDIKKyNkZWZpbmUgRlJBQ19CSVRTIDB4ZQorI2RlZmluZSBGUkFDX01BU0sgMHgzZmZmCisKK3N0cnVjdCByYWRlb25fdHZfbW9kZV9jb25zdGFudHMgeworCXVpbnQxNl90IGhvcl9yZXNvbHV0aW9uOworCXVpbnQxNl90IHZlcl9yZXNvbHV0aW9uOworCWVudW0gcmFkZW9uX3R2X3N0ZCBzdGFuZGFyZDsKKwl1aW50MTZfdCBob3JfdG90YWw7CisJdWludDE2X3QgdmVyX3RvdGFsOworCXVpbnQxNl90IGhvcl9zdGFydDsKKwl1aW50MTZfdCBob3Jfc3luY3N0YXJ0OworCXVpbnQxNl90IHZlcl9zeW5jc3RhcnQ7CisJdW5zaWduZWQgZGVmX3Jlc3RhcnQ7CisJdWludDE2X3QgY3J0Y1BMTF9OOworCXVpbnQ4X3QgIGNydGNQTExfTTsKKwl1aW50OF90ICBjcnRjUExMX3Bvc3RfZGl2OworCXVuc2lnbmVkIHBpeF90b190djsKK307CisKK3N0YXRpYyBjb25zdCB1aW50MTZfdCBob3JfdGltaW5nX05UU0NbXSA9IHsKKwkweDAwMDcsCisJMHgwMDNmLAorCTB4MDI2MywKKwkweDBhMjQsCisJMHgyYTZiLAorCTB4MGEzNiwKKwkweDEyNmQsIC8qIEhfVEFCTEVfUE9TMSAqLworCTB4MWJmZSwKKwkweDFhOGYsIC8qIEhfVEFCTEVfUE9TMiAqLworCTB4MWVjNywKKwkweDM4NjMsCisJMHgxYmZlLAorCTB4MWJmZSwKKwkweDFhMmEsCisJMHgxZTk1LAorCTB4MGUzMSwKKwkweDIwMWIsCisJMAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQxNl90IHZlcnRfdGltaW5nX05UU0NbXSA9IHsKKwkweDIwMDEsCisJMHgyMDBkLAorCTB4MTAwNiwKKwkweDBjMDYsCisJMHgxMDA2LAorCTB4MTgxOCwKKwkweDIxZTMsCisJMHgxMDA2LAorCTB4MGMwNiwKKwkweDEwMDYsCisJMHgxODE3LAorCTB4MjFkNCwKKwkweDAwMDIsCisJMAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQxNl90IGhvcl90aW1pbmdfUEFMW10gPSB7CisJMHgwMDA3LAorCTB4MDA1OCwKKwkweDAyN2MsCisJMHgwYTMxLAorCTB4MmE3NywKKwkweDBhOTUsCisJMHgxMjRmLCAvKiBIX1RBQkxFX1BPUzEgKi8KKwkweDFiZmUsCisJMHgxYjIyLCAvKiBIX1RBQkxFX1BPUzIgKi8KKwkweDFlZjksCisJMHgzODdjLAorCTB4MWJmZSwKKwkweDFiZmUsCisJMHgxYjMxLAorCTB4MWViNSwKKwkweDBlNDMsCisJMHgyMDFiLAorCTAKK307CisKK3N0YXRpYyBjb25zdCB1aW50MTZfdCB2ZXJ0X3RpbWluZ19QQUxbXSA9IAl7CisJMHgyMDAxLAorCTB4MjAwYywKKwkweDEwMDUsCisJMHgwYzA1LAorCTB4MTAwNSwKKwkweDE0MDEsCisJMHgxODIxLAorCTB4MjI0MCwKKwkweDEwMDUsCisJMHgwYzA1LAorCTB4MTAwNSwKKwkweDE0MDEsCisJMHgxODIyLAorCTB4MjIzMCwKKwkweDAwMDIsCisJMAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhdmFpbGFibGVNb2RlcworICoKKyAqIFRhYmxlIG9mIGFsbCBhbGxvd2VkIG1vZGVzIGZvciB0diBvdXRwdXQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmFkZW9uX3R2X21vZGVfY29uc3RhbnRzIGF2YWlsYWJsZV90dl9tb2Rlc1tdID0geworCXsgICAvKiBOVFNDIHRpbWluZyBmb3IgMjcgTWh6IHJlZiBjbGsgKi8KKwkJODAwLCAgICAgICAgICAgICAgICAvKiBob3JSZXNvbHV0aW9uICovCisJCTYwMCwgICAgICAgICAgICAgICAgLyogdmVyUmVzb2x1dGlvbiAqLworCQlUVl9TVERfTlRTQywgICAgICAgIC8qIHN0YW5kYXJkICovCisJCTk5MCwgICAgICAgICAgICAgICAgLyogaG9yVG90YWwgKi8KKwkJNzQwLCAgICAgICAgICAgICAgICAvKiB2ZXJUb3RhbCAqLworCQk4MTMsICAgICAgICAgICAgICAgIC8qIGhvclN0YXJ0ICovCisJCTgyNCwgICAgICAgICAgICAgICAgLyogaG9yU3luY1N0YXJ0ICovCisJCTYzMiwgICAgICAgICAgICAgICAgLyogdmVyU3luY1N0YXJ0ICovCisJCTYyNTU5MiwgICAgICAgICAgICAgLyogZGVmUmVzdGFydCAqLworCQk1OTIsICAgICAgICAgICAgICAgIC8qIGNydGNQTExfTiAqLworCQk5MSwgICAgICAgICAgICAgICAgIC8qIGNydGNQTExfTSAqLworCQk0LCAgICAgICAgICAgICAgICAgIC8qIGNydGNQTExfcG9zdERpdiAqLworCQkxMDIyLCAgICAgICAgICAgICAgIC8qIHBpeFRvVFYgKi8KKwl9LAorCXsgICAvKiBQQUwgdGltaW5nIGZvciAyNyBNaHogcmVmIGNsayAqLworCQk4MDAsICAgICAgICAgICAgICAgLyogaG9yUmVzb2x1dGlvbiAqLworCQk2MDAsICAgICAgICAgICAgICAgLyogdmVyUmVzb2x1dGlvbiAqLworCQlUVl9TVERfUEFMLCAgICAgICAgLyogc3RhbmRhcmQgKi8KKwkJMTE0NCwgICAgICAgICAgICAgIC8qIGhvclRvdGFsICovCisJCTcwNiwgICAgICAgICAgICAgICAvKiB2ZXJUb3RhbCAqLworCQk4MTIsICAgICAgICAgICAgICAgLyogaG9yU3RhcnQgKi8KKwkJODI0LCAgICAgICAgICAgICAgIC8qIGhvclN5bmNTdGFydCAqLworCQk2NjksICAgICAgICAgICAgICAgLyogdmVyU3luY1N0YXJ0ICovCisJCTY5NjcwMCwgICAgICAgICAgICAvKiBkZWZSZXN0YXJ0ICovCisJCTEzODIsICAgICAgICAgICAgICAvKiBjcnRjUExMX04gKi8KKwkJMjMxLCAgICAgICAgICAgICAgIC8qIGNydGNQTExfTSAqLworCQk0LCAgICAgICAgICAgICAgICAgLyogY3J0Y1BMTF9wb3N0RGl2ICovCisJCTc1OSwgICAgICAgICAgICAgICAvKiBwaXhUb1RWICovCisJfSwKKwl7ICAgLyogTlRTQyB0aW1pbmcgZm9yIDE0IE1oeiByZWYgY2xrICovCisJCTgwMCwgICAgICAgICAgICAgICAgLyogaG9yUmVzb2x1dGlvbiAqLworCQk2MDAsICAgICAgICAgICAgICAgIC8qIHZlclJlc29sdXRpb24gKi8KKwkJVFZfU1REX05UU0MsICAgICAgICAvKiBzdGFuZGFyZCAqLworCQkxMDE4LCAgICAgICAgICAgICAgIC8qIGhvclRvdGFsICovCisJCTcyNywgICAgICAgICAgICAgICAgLyogdmVyVG90YWwgKi8KKwkJODEzLCAgICAgICAgICAgICAgICAvKiBob3JTdGFydCAqLworCQk4NDAsICAgICAgICAgICAgICAgIC8qIGhvclN5bmNTdGFydCAqLworCQk2MzMsICAgICAgICAgICAgICAgIC8qIHZlclN5bmNTdGFydCAqLworCQk2MzA2MjcsICAgICAgICAgICAgIC8qIGRlZlJlc3RhcnQgKi8KKwkJMzQ3LCAgICAgICAgICAgICAgICAvKiBjcnRjUExMX04gKi8KKwkJMTQsICAgICAgICAgICAgICAgICAvKiBjcnRjUExMX00gKi8KKwkJCTgsICAgICAgICAgICAgICAgICAgLyogY3J0Y1BMTF9wb3N0RGl2ICovCisJCTEwMjIsICAgICAgICAgICAgICAgLyogcGl4VG9UViAqLworCX0sCit9OworCisjZGVmaW5lIE5fQVZBSUxBQkxFX01PREVTIEFSUkFZX1NJWkUoYXZhaWxhYmxlX3R2X21vZGVzKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJhZGVvbl90dl9tb2RlX2NvbnN0YW50cyAqcmFkZW9uX2xlZ2FjeV90dl9nZXRfc3RkX21vZGUoc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciwKKwkJCQkJCQkJCSAgICB1aW50MTZfdCAqcGxsX3JlZl9mcmVxKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGM7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCWNvbnN0IHN0cnVjdCByYWRlb25fdHZfbW9kZV9jb25zdGFudHMgKmNvbnN0X3B0cjsKKwlzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsOworCisJcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhyYWRlb25fZW5jb2Rlci0+YmFzZS5jcnRjKTsKKwlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMSkKKwkJcGxsID0gJnJkZXYtPmNsb2NrLnAycGxsOworCWVsc2UKKwkJcGxsID0gJnJkZXYtPmNsb2NrLnAxcGxsOworCisJaWYgKHBsbF9yZWZfZnJlcSkKKwkJKnBsbF9yZWZfZnJlcSA9IHBsbC0+cmVmZXJlbmNlX2ZyZXE7CisKKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pIHsKKwkJaWYgKHBsbC0+cmVmZXJlbmNlX2ZyZXEgPT0gMjcwMCkKKwkJCWNvbnN0X3B0ciA9ICZhdmFpbGFibGVfdHZfbW9kZXNbMF07CisJCWVsc2UKKwkJCWNvbnN0X3B0ciA9ICZhdmFpbGFibGVfdHZfbW9kZXNbMl07CisJfSBlbHNlIHsKKwkJaWYgKHBsbC0+cmVmZXJlbmNlX2ZyZXEgPT0gMjcwMCkKKwkJCWNvbnN0X3B0ciA9ICZhdmFpbGFibGVfdHZfbW9kZXNbMV07CisJCWVsc2UKKwkJCWNvbnN0X3B0ciA9ICZhdmFpbGFibGVfdHZfbW9kZXNbMV07IC8qIEZJWCBNRSAqLworCX0KKwlyZXR1cm4gY29uc3RfcHRyOworfQorCitzdGF0aWMgbG9uZyBZQ09FRl92YWx1ZVs1XSA9IHsgMiwgMiwgMCwgNCwgMCB9Oworc3RhdGljIGxvbmcgWUNPRUZfRU5fdmFsdWVbNV0gPSB7IDEsIDEsIDAsIDEsIDAgfTsKK3N0YXRpYyBsb25nIFNMT1BFX3ZhbHVlWzVdID0geyAxLCAyLCAyLCA0LCA4IH07CitzdGF0aWMgbG9uZyBTTE9QRV9saW1pdFs1XSA9IHsgNiwgNSwgNCwgMywgMiB9OworCitzdGF0aWMgdm9pZCByYWRlb25fd2FpdF9wbGxfbG9jayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHVuc2lnbmVkIG5fdGVzdHMsCisJCQkJIHVuc2lnbmVkIG5fd2FpdF9sb29wcywgdW5zaWduZWQgY250X3RocmVzaG9sZCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBzYXZlX3BsbF90ZXN0OworCXVuc2lnbmVkIGludCBpLCBqOworCisJV1JFRzMyKFJBREVPTl9URVNUX0RFQlVHX01VWCwgKFJSRUczMihSQURFT05fVEVTVF9ERUJVR19NVVgpICYgMHhmZmZmNjBmZikgfCAweDEwMCk7CisJc2F2ZV9wbGxfdGVzdCA9IFJSRUczMl9QTEwoUkFERU9OX1BMTF9URVNUX0NOVEwpOworCVdSRUczMl9QTEwoUkFERU9OX1BMTF9URVNUX0NOVEwsIHNhdmVfcGxsX3Rlc3QgJiB+UkFERU9OX1BMTF9NQVNLX1JFQURfQik7CisKKwlXUkVHOChSQURFT05fQ0xPQ0tfQ05UTF9JTkRFWCwgUkFERU9OX1BMTF9URVNUX0NOVEwpOworCWZvciAoaSA9IDA7IGkgPCBuX3Rlc3RzOyBpKyspIHsKKwkJV1JFRzgoUkFERU9OX0NMT0NLX0NOVExfREFUQSArIDMsIDApOworCQlmb3IgKGogPSAwOyBqIDwgbl93YWl0X2xvb3BzOyBqKyspCisJCQlpZiAoUlJFRzgoUkFERU9OX0NMT0NLX0NOVExfREFUQSArIDMpID49IGNudF90aHJlc2hvbGQpCisJCQkJYnJlYWs7CisJfQorCVdSRUczMl9QTEwoUkFERU9OX1BMTF9URVNUX0NOVEwsIHNhdmVfcGxsX3Rlc3QpOworCVdSRUczMihSQURFT05fVEVTVF9ERUJVR19NVVgsIFJSRUczMihSQURFT05fVEVTVF9ERUJVR19NVVgpICYgMHhmZmZmZTBmZik7Cit9CisKKworc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV90dl93cml0ZV9maWZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIsCisJCQkJCXVpbnQxNl90IGFkZHIsIHVpbnQzMl90IHZhbHVlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHRtcDsKKwlpbnQgaSA9IDA7CisKKwlXUkVHMzIoUkFERU9OX1RWX0hPU1RfV1JJVEVfREFUQSwgdmFsdWUpOworCisJV1JFRzMyKFJBREVPTl9UVl9IT1NUX1JEX1dUX0NOVEwsIGFkZHIpOworCVdSRUczMihSQURFT05fVFZfSE9TVF9SRF9XVF9DTlRMLCBhZGRyIHwgUkFERU9OX0hPU1RfRklGT19XVCk7CisKKwlkbyB7CisJCXRtcCA9IFJSRUczMihSQURFT05fVFZfSE9TVF9SRF9XVF9DTlRMKTsKKwkJaWYgKCh0bXAgJiBSQURFT05fSE9TVF9GSUZPX1dUX0FDSykgPT0gMCkKKwkJCWJyZWFrOworCQlpKys7CisJfSB3aGlsZSAoaSA8IDEwMDAwKTsKKwlXUkVHMzIoUkFERU9OX1RWX0hPU1RfUkRfV1RfQ05UTCwgMCk7Cit9CisKKyNpZiAwIC8qIGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MgKi8KK3N0YXRpYyB1aW50MzJfdCByYWRlb25fbGVnYWN5X3R2X3JlYWRfZmlmbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyLCB1aW50MTZfdCBhZGRyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHRtcDsKKwlpbnQgaSA9IDA7CisKKwlXUkVHMzIoUkFERU9OX1RWX0hPU1RfUkRfV1RfQ05UTCwgYWRkcik7CisJV1JFRzMyKFJBREVPTl9UVl9IT1NUX1JEX1dUX0NOVEwsIGFkZHIgfCBSQURFT05fSE9TVF9GSUZPX1JEKTsKKworCWRvIHsKKwkJdG1wID0gUlJFRzMyKFJBREVPTl9UVl9IT1NUX1JEX1dUX0NOVEwpOworCQlpZiAoKHRtcCAmIFJBREVPTl9IT1NUX0ZJRk9fUkRfQUNLKSA9PSAwKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9IHdoaWxlIChpIDwgMTAwMDApOworCVdSRUczMihSQURFT05fVFZfSE9TVF9SRF9XVF9DTlRMLCAwKTsKKwlyZXR1cm4gUlJFRzMyKFJBREVPTl9UVl9IT1NUX1JFQURfREFUQSk7Cit9CisjZW5kaWYKKworc3RhdGljIHVpbnQxNl90IHJhZGVvbl9nZXRfaHRpbWluZ190YWJsZXNfYWRkcih1aW50MzJfdCB0dl91dl9hZHIpCit7CisJdWludDE2X3QgaF90YWJsZTsKKworCXN3aXRjaCAoKHR2X3V2X2FkciAmIFJBREVPTl9IQ09ERV9UQUJMRV9TRUxfTUFTSykgPj4gUkFERU9OX0hDT0RFX1RBQkxFX1NFTF9TSElGVCkgeworCWNhc2UgMDoKKwkJaF90YWJsZSA9IFJBREVPTl9UVl9NQVhfRklGT19BRERSX0lOVEVSTkFMOworCQlicmVhazsKKwljYXNlIDE6CisJCWhfdGFibGUgPSAoKHR2X3V2X2FkciAmIFJBREVPTl9UQUJMRTFfQk9UX0FEUl9NQVNLKSA+PiBSQURFT05fVEFCTEUxX0JPVF9BRFJfU0hJRlQpICogMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQloX3RhYmxlID0gKCh0dl91dl9hZHIgJiBSQURFT05fVEFCTEUzX1RPUF9BRFJfTUFTSykgPj4gUkFERU9OX1RBQkxFM19UT1BfQURSX1NISUZUKSAqIDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWhfdGFibGUgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIGhfdGFibGU7Cit9CisKK3N0YXRpYyB1aW50MTZfdCByYWRlb25fZ2V0X3Z0aW1pbmdfdGFibGVzX2FkZHIodWludDMyX3QgdHZfdXZfYWRyKQoreworCXVpbnQxNl90IHZfdGFibGU7CisKKwlzd2l0Y2ggKCh0dl91dl9hZHIgJiBSQURFT05fVkNPREVfVEFCTEVfU0VMX01BU0spID4+IFJBREVPTl9WQ09ERV9UQUJMRV9TRUxfU0hJRlQpIHsKKwljYXNlIDA6CisJCXZfdGFibGUgPSAoKHR2X3V2X2FkciAmIFJBREVPTl9NQVhfVVZfQURSX01BU0spID4+IFJBREVPTl9NQVhfVVZfQURSX1NISUZUKSAqIDIgKyAxOworCQlicmVhazsKKwljYXNlIDE6CisJCXZfdGFibGUgPSAoKHR2X3V2X2FkciAmIFJBREVPTl9UQUJMRTFfQk9UX0FEUl9NQVNLKSA+PiBSQURFT05fVEFCTEUxX0JPVF9BRFJfU0hJRlQpICogMiArIDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdl90YWJsZSA9ICgodHZfdXZfYWRyICYgUkFERU9OX1RBQkxFM19UT1BfQURSX01BU0spID4+IFJBREVPTl9UQUJMRTNfVE9QX0FEUl9TSElGVCkgKiAyICsgMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdl90YWJsZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdl90YWJsZTsKK30KKworc3RhdGljIHZvaWQgcmFkZW9uX3Jlc3RvcmVfdHZfdGltaW5nX3RhYmxlcyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwl1aW50MTZfdCBoX3RhYmxlLCB2X3RhYmxlOworCXVpbnQzMl90IHRtcDsKKwlpbnQgaTsKKworCVdSRUczMihSQURFT05fVFZfVVZfQURSLCB0dl9kYWMtPnR2LnR2X3V2X2Fkcik7CisJaF90YWJsZSA9IHJhZGVvbl9nZXRfaHRpbWluZ190YWJsZXNfYWRkcih0dl9kYWMtPnR2LnR2X3V2X2Fkcik7CisJdl90YWJsZSA9IHJhZGVvbl9nZXRfdnRpbWluZ190YWJsZXNfYWRkcih0dl9kYWMtPnR2LnR2X3V2X2Fkcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hfQ09ERV9USU1JTkdfTEVOOyBpICs9IDIsIGhfdGFibGUtLSkgeworCQl0bXAgPSAoKHVpbnQzMl90KXR2X2RhYy0+dHYuaF9jb2RlX3RpbWluZ1tpXSA8PCAxNCkgfCAoKHVpbnQzMl90KXR2X2RhYy0+dHYuaF9jb2RlX3RpbWluZ1tpKzFdKTsKKwkJcmFkZW9uX2xlZ2FjeV90dl93cml0ZV9maWZvKHJhZGVvbl9lbmNvZGVyLCBoX3RhYmxlLCB0bXApOworCQlpZiAodHZfZGFjLT50di5oX2NvZGVfdGltaW5nW2ldID09IDAgfHwgdHZfZGFjLT50di5oX2NvZGVfdGltaW5nW2kgKyAxXSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhfVl9DT0RFX1RJTUlOR19MRU47IGkgKz0gMiwgdl90YWJsZSsrKSB7CisJCXRtcCA9ICgodWludDMyX3QpdHZfZGFjLT50di52X2NvZGVfdGltaW5nW2krMV0gPDwgMTQpIHwgKCh1aW50MzJfdCl0dl9kYWMtPnR2LnZfY29kZV90aW1pbmdbaV0pOworCQlyYWRlb25fbGVnYWN5X3R2X3dyaXRlX2ZpZm8ocmFkZW9uX2VuY29kZXIsIHZfdGFibGUsIHRtcCk7CisJCWlmICh0dl9kYWMtPnR2LnZfY29kZV90aW1pbmdbaV0gPT0gMCB8fCB0dl9kYWMtPnR2LnZfY29kZV90aW1pbmdbaSArIDFdID09IDApCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfd3JpdGVfdHZfcmVzdGFydHMoc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmFkZW9uX2VuY29kZXItPmJhc2UuZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJV1JFRzMyKFJBREVPTl9UVl9GUkVTVEFSVCwgdHZfZGFjLT50di5mcmVzdGFydCk7CisJV1JFRzMyKFJBREVPTl9UVl9IUkVTVEFSVCwgdHZfZGFjLT50di5ocmVzdGFydCk7CisJV1JFRzMyKFJBREVPTl9UVl9WUkVTVEFSVCwgdHZfZGFjLT50di52cmVzdGFydCk7Cit9CisKK3N0YXRpYyBib29sIHJhZGVvbl9sZWdhY3lfdHZfaW5pdF9yZXN0YXJ0cyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjOworCWludCByZXN0YXJ0OworCXVuc2lnbmVkIGludCBoX3RvdGFsLCB2X3RvdGFsLCBmX3RvdGFsOworCWludCB2X29mZnNldCwgaF9vZmZzZXQ7CisJdTE2IHAxLCBwMiwgaF9pbmM7CisJYm9vbCBoX2NoYW5nZWQ7CisJY29uc3Qgc3RydWN0IHJhZGVvbl90dl9tb2RlX2NvbnN0YW50cyAqY29uc3RfcHRyOworCXN0cnVjdCByYWRlb25fcGxsICpwbGw7CisKKwlyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKHJhZGVvbl9lbmNvZGVyLT5iYXNlLmNydGMpOworCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAxKQorCQlwbGwgPSAmcmRldi0+Y2xvY2sucDJwbGw7CisJZWxzZQorCQlwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7CisKKwljb25zdF9wdHIgPSByYWRlb25fbGVnYWN5X3R2X2dldF9zdGRfbW9kZShyYWRlb25fZW5jb2RlciwgTlVMTCk7CisJaWYgKCFjb25zdF9wdHIpCisJCXJldHVybiBmYWxzZTsKKworCWhfdG90YWwgPSBjb25zdF9wdHItPmhvcl90b3RhbDsKKwl2X3RvdGFsID0gY29uc3RfcHRyLT52ZXJfdG90YWw7CisKKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00gfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF82MCkKKwkJZl90b3RhbCA9IE5UU0NfVFZfVkZUT1RBTCArIDE7CisJZWxzZQorCQlmX3RvdGFsID0gUEFMX1RWX1ZGVE9UQUwgKyAxOworCisJLyogYWRqdXN0IHBvc2l0aW9ucyAxJjIgaW4gaG9yLiBjb2QgdGltaW5nIHRhYmxlICovCisJaF9vZmZzZXQgPSB0dl9kYWMtPmhfcG9zICogSF9QT1NfVU5JVDsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSkgeworCQloX29mZnNldCAtPSA1MDsKKwkJcDEgPSBob3JfdGltaW5nX05UU0NbSF9UQUJMRV9QT1MxXTsKKwkJcDIgPSBob3JfdGltaW5nX05UU0NbSF9UQUJMRV9QT1MyXTsKKwl9IGVsc2UgeworCQlwMSA9IGhvcl90aW1pbmdfUEFMW0hfVEFCTEVfUE9TMV07CisJCXAyID0gaG9yX3RpbWluZ19QQUxbSF9UQUJMRV9QT1MyXTsKKwl9CisKKwlwMSA9ICh1MTYpKChpbnQpcDEgKyBoX29mZnNldCk7CisJcDIgPSAodTE2KSgoaW50KXAyIC0gaF9vZmZzZXQpOworCisJaF9jaGFuZ2VkID0gKHAxICE9IHR2X2RhYy0+dHYuaF9jb2RlX3RpbWluZ1tIX1RBQkxFX1BPUzFdIHx8CisJCSAgICAgcDIgIT0gdHZfZGFjLT50di5oX2NvZGVfdGltaW5nW0hfVEFCTEVfUE9TMl0pOworCisJdHZfZGFjLT50di5oX2NvZGVfdGltaW5nW0hfVEFCTEVfUE9TMV0gPSBwMTsKKwl0dl9kYWMtPnR2LmhfY29kZV90aW1pbmdbSF9UQUJMRV9QT1MyXSA9IHAyOworCisJLyogQ29udmVydCBoT2Zmc2V0IGZyb20gbi4gb2YgVFYgY2xvY2sgcGVyaW9kcyB0byBuLiBvZiBDUlRDIGNsb2NrIHBlcmlvZHMgKENSVEMgcGl4ZWxzKSAqLworCWhfb2Zmc2V0ID0gKGhfb2Zmc2V0ICogKGludCkoY29uc3RfcHRyLT5waXhfdG9fdHYpKSAvIDEwMDA7CisKKwkvKiBhZGp1c3QgcmVzdGFydCAqLworCXJlc3RhcnQgPSBjb25zdF9wdHItPmRlZl9yZXN0YXJ0OworCisJLyoKKwkgKiBjb252ZXJ0IHZfcG9zIFRWIGxpbmVzIHRvIG4uIG9mIENSVEMgcGl4ZWxzCisJICovCisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF9NIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfNjApCisJCXZfb2Zmc2V0ID0gKChpbnQpKHZfdG90YWwgKiBoX3RvdGFsKSAqIDIgKiB0dl9kYWMtPnZfcG9zKSAvIChpbnQpKE5UU0NfVFZfTElORVNfUEVSX0ZSQU1FKTsKKwllbHNlCisJCXZfb2Zmc2V0ID0gKChpbnQpKHZfdG90YWwgKiBoX3RvdGFsKSAqIDIgKiB0dl9kYWMtPnZfcG9zKSAvIChpbnQpKFBBTF9UVl9MSU5FU19QRVJfRlJBTUUpOworCisJcmVzdGFydCAtPSB2X29mZnNldCArIGhfb2Zmc2V0OworCisJRFJNX0RFQlVHKCJjb21wdXRlX3Jlc3RhcnRzOiBkZWYgPSAldSBoID0gJWQgdiA9ICVkLCBwMSA9ICUwNHgsIHAyID0gJTA0eCwgcmVzdGFydCA9ICVkXG4iLAorCQkgIGNvbnN0X3B0ci0+ZGVmX3Jlc3RhcnQsIHR2X2RhYy0+aF9wb3MsIHR2X2RhYy0+dl9wb3MsIHAxLCBwMiwgcmVzdGFydCk7CisKKwl0dl9kYWMtPnR2LmhyZXN0YXJ0ID0gcmVzdGFydCAlIGhfdG90YWw7CisJcmVzdGFydCAvPSBoX3RvdGFsOworCXR2X2RhYy0+dHYudnJlc3RhcnQgPSByZXN0YXJ0ICUgdl90b3RhbDsKKwlyZXN0YXJ0IC89IHZfdG90YWw7CisJdHZfZGFjLT50di5mcmVzdGFydCA9IHJlc3RhcnQgJSBmX3RvdGFsOworCisJRFJNX0RFQlVHKCJjb21wdXRlX3Jlc3RhcnQ6IEYvSC9WPSV1LCV1LCV1XG4iLAorCQkgICh1bnNpZ25lZCl0dl9kYWMtPnR2LmZyZXN0YXJ0LAorCQkgICh1bnNpZ25lZCl0dl9kYWMtPnR2LnZyZXN0YXJ0LAorCQkgICh1bnNpZ25lZCl0dl9kYWMtPnR2LmhyZXN0YXJ0KTsKKworCS8qIGNvbXB1dGUgaF9pbmMgZnJvbSBoc2l6ZSAqLworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSkKKwkJaF9pbmMgPSAodTE2KSgoaW50KShjb25zdF9wdHItPmhvcl9yZXNvbHV0aW9uICogNDA5NiAqIE5UU0NfVFZfQ0xPQ0tfVCkgLworCQkJICAgICAgKHR2X2RhYy0+aF9zaXplICogKGludCkoTlRTQ19UVl9IX1NJWkVfVU5JVCkgKyAoaW50KShOVFNDX1RWX1pFUk9fSF9TSVpFKSkpOworCWVsc2UKKwkJaF9pbmMgPSAodTE2KSgoaW50KShjb25zdF9wdHItPmhvcl9yZXNvbHV0aW9uICogNDA5NiAqIFBBTF9UVl9DTE9DS19UKSAvCisJCQkgICAgICAodHZfZGFjLT5oX3NpemUgKiAoaW50KShQQUxfVFZfSF9TSVpFX1VOSVQpICsgKGludCkoUEFMX1RWX1pFUk9fSF9TSVpFKSkpOworCisJdHZfZGFjLT50di50aW1pbmdfY250bCA9ICh0dl9kYWMtPnR2LnRpbWluZ19jbnRsICYgflJBREVPTl9IX0lOQ19NQVNLKSB8CisJCSgodTMyKWhfaW5jIDw8IFJBREVPTl9IX0lOQ19TSElGVCk7CisKKwlEUk1fREVCVUcoImNvbXB1dGVfcmVzdGFydDogaF9zaXplID0gJWQgaF9pbmMgPSAlZFxuIiwgdHZfZGFjLT5oX3NpemUsIGhfaW5jKTsKKworCXJldHVybiBoX2NoYW5nZWQ7Cit9CisKK3ZvaWQgcmFkZW9uX2xlZ2FjeV90dl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwljb25zdCBzdHJ1Y3QgcmFkZW9uX3R2X21vZGVfY29uc3RhbnRzICpjb25zdF9wdHI7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKKwlpbnQgaTsKKwl1aW50MTZfdCBwbGxfcmVmX2ZyZXE7CisJdWludDMyX3QgdmVydF9zcGFjZSwgZmxpY2tlcl9yZW1vdmFsLCB0bXA7CisJdWludDMyX3QgdHZfbWFzdGVyX2NudGwsIHR2X3JnYl9jbnRsLCB0dl9kYWNfY250bDsKKwl1aW50MzJfdCB0dl9tb2R1bGF0b3JfY250bDEsIHR2X21vZHVsYXRvcl9jbnRsMjsKKwl1aW50MzJfdCB0dl92c2NhbGVyX2NudGwxLCB0dl92c2NhbGVyX2NudGwyOworCXVpbnQzMl90IHR2X3BsbF9jbnRsLCB0dl9wbGxfY250bDEsIHR2X2Z0b3RhbDsKKwl1aW50MzJfdCB0dl95X2ZhbGxfY250bCwgdHZfeV9yaXNlX2NudGwsIHR2X3lfc2F3X3Rvb3RoX2NudGw7CisJdWludDMyX3QgbSwgbiwgcDsKKwljb25zdCB1aW50MTZfdCAqaG9yX3RpbWluZzsKKwljb25zdCB1aW50MTZfdCAqdmVydF90aW1pbmc7CisKKwljb25zdF9wdHIgPSByYWRlb25fbGVnYWN5X3R2X2dldF9zdGRfbW9kZShyYWRlb25fZW5jb2RlciwgJnBsbF9yZWZfZnJlcSk7CisJaWYgKCFjb25zdF9wdHIpCisJCXJldHVybjsKKworCXJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisKKwl0dl9tYXN0ZXJfY250bCA9IChSQURFT05fVklOX0FTWU5DX1JTVCB8CisJCQkgIFJBREVPTl9DUlRfRklGT19DRV9FTiB8CisJCQkgIFJBREVPTl9UVl9GSUZPX0NFX0VOIHwKKwkJCSAgUkFERU9OX1RWX09OKTsKKworCWlmICghQVNJQ19JU19SMzAwKHJkZXYpKQorCQl0dl9tYXN0ZXJfY250bCB8PSBSQURFT05fVFZDTEtfQUxXQVlTX09OYjsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KKQorCQl0dl9tYXN0ZXJfY250bCB8PSBSQURFT05fUkVTVEFSVF9QSEFTRV9GSVg7CisKKwl0dl9tb2R1bGF0b3JfY250bDEgPSAoUkFERU9OX1NMRVdfUkFURV9MSU1JVCB8CisJCQkgICAgICBSQURFT05fU1lOQ19USVBfTEVWRUwgfAorCQkJICAgICAgUkFERU9OX1lGTFRfRU4gfAorCQkJICAgICAgUkFERU9OX1VWRkxUX0VOIHwKKwkJCSAgICAgICg2IDw8IFJBREVPTl9DWV9GSUxUX0JMRU5EX1NISUZUKSk7CisKKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSikgeworCQl0dl9tb2R1bGF0b3JfY250bDEgfD0gKDB4NDYgPDwgUkFERU9OX1NFVF9VUF9MRVZFTF9TSElGVCkgfAorCQkJKDB4M2IgPDwgUkFERU9OX0JMQU5LX0xFVkVMX1NISUZUKTsKKwkJdHZfbW9kdWxhdG9yX2NudGwyID0gKC0xMTEgJiBSQURFT05fVFZfVV9CVVJTVF9MRVZFTF9NQVNLKSB8CisJCQkoKDAgJiBSQURFT05fVFZfVl9CVVJTVF9MRVZFTF9NQVNLKSA8PCBSQURFT05fVFZfVl9CVVJTVF9MRVZFTF9TSElGVCk7CisJfSBlbHNlIGlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfU0NBUlRfUEFMKSB7CisJCXR2X21vZHVsYXRvcl9jbnRsMSB8PSBSQURFT05fQUxUX1BIQVNFX0VOOworCQl0dl9tb2R1bGF0b3JfY250bDIgPSAoMCAmIFJBREVPTl9UVl9VX0JVUlNUX0xFVkVMX01BU0spIHwKKwkJCSgoMCAmIFJBREVPTl9UVl9WX0JVUlNUX0xFVkVMX01BU0spIDw8IFJBREVPTl9UVl9WX0JVUlNUX0xFVkVMX1NISUZUKTsKKwl9IGVsc2UgeworCQl0dl9tb2R1bGF0b3JfY250bDEgfD0gUkFERU9OX0FMVF9QSEFTRV9FTiB8CisJCQkoMHgzYiA8PCBSQURFT05fU0VUX1VQX0xFVkVMX1NISUZUKSB8CisJCQkoMHgzYiA8PCBSQURFT05fQkxBTktfTEVWRUxfU0hJRlQpOworCQl0dl9tb2R1bGF0b3JfY250bDIgPSAoLTc4ICYgUkFERU9OX1RWX1VfQlVSU1RfTEVWRUxfTUFTSykgfAorCQkJKCg2MiAmIFJBREVPTl9UVl9WX0JVUlNUX0xFVkVMX01BU0spIDw8IFJBREVPTl9UVl9WX0JVUlNUX0xFVkVMX1NISUZUKTsKKwl9CisKKworCXR2X3JnYl9jbnRsID0gKFJBREVPTl9SR0JfRElUSEVSX0VOCisJCSAgICAgICB8IFJBREVPTl9UVk9VVF9TQ0FMRV9FTgorCQkgICAgICAgfCAoMHgwYiA8PCBSQURFT05fVVZSQU1fUkVBRF9NQVJHSU5fU0hJRlQpCisJCSAgICAgICB8ICgweDA3IDw8IFJBREVPTl9GSUZPUkFNX0ZGTUFDUk9fUkVBRF9NQVJHSU5fU0hJRlQpCisJCSAgICAgICB8IFJBREVPTl9SR0JfQVRURU5fU0VMKDB4MykKKwkJICAgICAgIHwgUkFERU9OX1JHQl9BVFRFTl9WQUwoMHhjKSk7CisKKwlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMSkKKwkJdHZfcmdiX2NudGwgfD0gUkFERU9OX1JHQl9TUkNfU0VMX0NSVEMyOworCWVsc2UgeworCQlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IFJNWF9PRkYpCisJCQl0dl9yZ2JfY250bCB8PSBSQURFT05fUkdCX1NSQ19TRUxfUk1YOworCQllbHNlCisJCQl0dl9yZ2JfY250bCB8PSBSQURFT05fUkdCX1NSQ19TRUxfQ1JUQzE7CisJfQorCisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF9NIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfNjApCisJCXZlcnRfc3BhY2UgPSBjb25zdF9wdHItPnZlcl90b3RhbCAqIDIgKiAxMDAwMCAvIE5UU0NfVFZfTElORVNfUEVSX0ZSQU1FOworCWVsc2UKKwkJdmVydF9zcGFjZSA9IGNvbnN0X3B0ci0+dmVyX3RvdGFsICogMiAqIDEwMDAwIC8gUEFMX1RWX0xJTkVTX1BFUl9GUkFNRTsKKworCXRtcCA9IFJSRUczMihSQURFT05fVFZfVlNDQUxFUl9DTlRMMSk7CisJdG1wICY9IDB4ZTNmZjAwMDA7CisJdG1wIHw9ICh2ZXJ0X3NwYWNlICogKDEgPDwgRlJBQ19CSVRTKSAvIDEwMDAwKTsKKwl0dl92c2NhbGVyX2NudGwxID0gdG1wOworCisJaWYgKHBsbF9yZWZfZnJlcSA9PSAyNzAwKQorCQl0dl92c2NhbGVyX2NudGwxIHw9IFJBREVPTl9SRVNUQVJUX0ZJRUxEOworCisJaWYgKGNvbnN0X3B0ci0+aG9yX3Jlc29sdXRpb24gPT0gMTAyNCkKKwkJdHZfdnNjYWxlcl9jbnRsMSB8PSAoNCA8PCBSQURFT05fWV9ERUxfV19TSUdfU0hJRlQpOworCWVsc2UKKwkJdHZfdnNjYWxlcl9jbnRsMSB8PSAoMiA8PCBSQURFT05fWV9ERUxfV19TSUdfU0hJRlQpOworCisJLyogc2NhbGUgdXAgZm9yIGludCBkaXZpZGUgKi8KKwl0bXAgPSBjb25zdF9wdHItPnZlcl90b3RhbCAqIDIgKiAxMDAwOworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMXzYwKSB7CisJCXRtcCAvPSBOVFNDX1RWX0xJTkVTX1BFUl9GUkFNRTsKKwl9IGVsc2UgeworCQl0bXAgLz0gUEFMX1RWX0xJTkVTX1BFUl9GUkFNRTsKKwl9CisJZmxpY2tlcl9yZW1vdmFsID0gKHRtcCArIDUwMCkgLyAxMDAwOworCisJaWYgKGZsaWNrZXJfcmVtb3ZhbCA8IDMpCisJCWZsaWNrZXJfcmVtb3ZhbCA9IDM7CisJZm9yIChpID0gMDsgaSA8IDY7ICsraSkgeworCQlpZiAoZmxpY2tlcl9yZW1vdmFsID09IFNMT1BFX2xpbWl0W2ldKQorCQkJYnJlYWs7CisJfQorCisJdHZfeV9zYXdfdG9vdGhfY250bCA9ICh2ZXJ0X3NwYWNlICogU0xPUEVfdmFsdWVbaV0gKiAoMSA8PCAoRlJBQ19CSVRTIC0gMSkpICsKKwkJCQk1MDAxKSAvIDEwMDAwIC8gOCB8ICgoU0xPUEVfdmFsdWVbaV0gKgorCQkJCSgxIDw8IChGUkFDX0JJVFMgLSAxKSkgLyA4KSA8PCAxNik7CisJdHZfeV9mYWxsX2NudGwgPQorCQkoWUNPRUZfRU5fdmFsdWVbaV0gPDwgMTcpIHwgKChZQ09FRl92YWx1ZVtpXSAqICgxIDw8IDgpIC8gOCkgPDwgMjQpIHwKKwkJUkFERU9OX1lfRkFMTF9QSU5HX1BPTkcgfCAoMjcyICogU0xPUEVfdmFsdWVbaV0gLyA4KSAqICgxIDw8IChGUkFDX0JJVFMgLSAxKSkgLworCQkxMDI0OworCXR2X3lfcmlzZV9jbnRsID0gUkFERU9OX1lfUklTRV9QSU5HX1BPTkd8CisJCShmbGlja2VyX3JlbW92YWwgKiAxMDI0IC0gMjcyKSAqIFNMT1BFX3ZhbHVlW2ldIC8gOCAqICgxIDw8IChGUkFDX0JJVFMgLSAxKSkgLyAxMDI0OworCisJdHZfdnNjYWxlcl9jbnRsMiA9IFJSRUczMihSQURFT05fVFZfVlNDQUxFUl9DTlRMMikgJiAweDAwZmZmZmYwOworCXR2X3ZzY2FsZXJfY250bDIgfD0gKDB4MTAgPDwgMjQpIHwKKwkJUkFERU9OX0RJVEhFUl9NT0RFIHwKKwkJUkFERU9OX1lfT1VUUFVUX0RJVEhFUl9FTiB8CisJCVJBREVPTl9VVl9PVVRQVVRfRElUSEVSX0VOIHwKKwkJUkFERU9OX1VWX1RPX0JVRl9ESVRIRVJfRU47CisKKwl0bXAgPSAodHZfdnNjYWxlcl9jbnRsMSA+PiBSQURFT05fVVZfSU5DX1NISUZUKSAmIFJBREVPTl9VVl9JTkNfTUFTSzsKKwl0bXAgPSAoKDE2Mzg0ICogMjU2ICogMTApIC8gdG1wICsgNSkgLyAxMDsKKwl0bXAgPSAodG1wIDw8IFJBREVPTl9VVl9PVVRQVVRfUE9TVF9TQ0FMRV9TSElGVCkgfCAweDAwMGIwMDAwOworCXR2X2RhYy0+dHYudGltaW5nX2NudGwgPSB0bXA7CisKKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00gfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF82MCkKKwkJdHZfZGFjX2NudGwgPSB0dl9kYWMtPm50c2NfdHZkYWNfYWRqOworCWVsc2UKKwkJdHZfZGFjX2NudGwgPSB0dl9kYWMtPnBhbF90dmRhY19hZGo7CisKKwl0dl9kYWNfY250bCB8PSBSQURFT05fVFZfREFDX05CTEFOSyB8IFJBREVPTl9UVl9EQUNfTkhPTEQ7CisKKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSikKKwkJdHZfZGFjX2NudGwgfD0gUkFERU9OX1RWX0RBQ19TVERfTlRTQzsKKwllbHNlCisJCXR2X2RhY19jbnRsIHw9IFJBREVPTl9UVl9EQUNfU1REX1BBTDsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KKSB7CisJCWlmIChwbGxfcmVmX2ZyZXEgPT0gMjcwMCkgeworCQkJbSA9IE5UU0NfVFZfUExMX01fMjc7CisJCQluID0gTlRTQ19UVl9QTExfTl8yNzsKKwkJCXAgPSBOVFNDX1RWX1BMTF9QXzI3OworCQl9IGVsc2UgeworCQkJbSA9IE5UU0NfVFZfUExMX01fMTQ7CisJCQluID0gTlRTQ19UVl9QTExfTl8xNDsKKwkJCXAgPSBOVFNDX1RWX1BMTF9QXzE0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHBsbF9yZWZfZnJlcSA9PSAyNzAwKSB7CisJCQltID0gUEFMX1RWX1BMTF9NXzI3OworCQkJbiA9IFBBTF9UVl9QTExfTl8yNzsKKwkJCXAgPSBQQUxfVFZfUExMX1BfMjc7CisJCX0gZWxzZSB7CisJCQltID0gUEFMX1RWX1BMTF9NXzI3OworCQkJbiA9IFBBTF9UVl9QTExfTl8yNzsKKwkJCXAgPSBQQUxfVFZfUExMX1BfMjc7CisJCX0KKwl9CisKKwl0dl9wbGxfY250bCA9IChtICYgUkFERU9OX1RWX00wTE9fTUFTSykgfAorCQkoKChtID4+IDgpICYgUkFERU9OX1RWX00wSElfTUFTSykgPDwgUkFERU9OX1RWX00wSElfU0hJRlQpIHwKKwkJKChuICYgUkFERU9OX1RWX04wTE9fTUFTSykgPDwgUkFERU9OX1RWX04wTE9fU0hJRlQpIHwKKwkJKCgobiA+PiA5KSAmIFJBREVPTl9UVl9OMEhJX01BU0spIDw8IFJBREVPTl9UVl9OMEhJX1NISUZUKSB8CisJCSgocCAmIFJBREVPTl9UVl9QX01BU0spIDw8IFJBREVPTl9UVl9QX1NISUZUKTsKKworCXR2X3BsbF9jbnRsMSA9ICgoKDQgJiBSQURFT05fVFZQQ1BfTUFTSykgPDwgUkFERU9OX1RWUENQX1NISUZUKSB8CisJCQkoKDQgJiBSQURFT05fVFZQVkdfTUFTSykgPDwgUkFERU9OX1RWUFZHX1NISUZUKSB8CisJCQkoKDEgJiBSQURFT05fVFZQRENfTUFTSykgPDwgUkFERU9OX1RWUERDX1NISUZUKSB8CisJCQlSQURFT05fVFZDTEtfU1JDX1NFTF9UVlBMTCB8CisJCQlSQURFT05fVFZQTExfVEVTVF9ESVMpOworCisJdHZfZGFjLT50di50dl91dl9hZHIgPSAweGM4OworCisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF9NIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfNjApIHsKKwkJdHZfZnRvdGFsID0gTlRTQ19UVl9WRlRPVEFMOworCQlob3JfdGltaW5nID0gaG9yX3RpbWluZ19OVFNDOworCQl2ZXJ0X3RpbWluZyA9IHZlcnRfdGltaW5nX05UU0M7CisJfSBlbHNlIHsKKwkJaG9yX3RpbWluZyA9IGhvcl90aW1pbmdfUEFMOworCQl2ZXJ0X3RpbWluZyA9IHZlcnRfdGltaW5nX1BBTDsKKwkJdHZfZnRvdGFsID0gUEFMX1RWX1ZGVE9UQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9IX0NPREVfVElNSU5HX0xFTjsgaSsrKSB7CisJCWlmICgodHZfZGFjLT50di5oX2NvZGVfdGltaW5nW2ldID0gaG9yX3RpbWluZ1tpXSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVl9DT0RFX1RJTUlOR19MRU47IGkrKykgeworCQlpZiAoKHR2X2RhYy0+dHYudl9jb2RlX3RpbWluZ1tpXSA9IHZlcnRfdGltaW5nW2ldKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJcmFkZW9uX2xlZ2FjeV90dl9pbml0X3Jlc3RhcnRzKGVuY29kZXIpOworCisJLyogcGxheSB3aXRoIERBQ19DTlRMICovCisJLyogcGxheSB3aXRoIEdQSU9QQURfQSAqLworCS8qIERJU1BfT1VUUFVUX0NOVEwgKi8KKwkvKiB1c2UgcmVmZXJlbmNlIGZyZXEgKi8KKworCS8qIHByb2dyYW0gdGhlIFRWIHJlZ2lzdGVycyAqLworCVdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsICh0dl9tYXN0ZXJfY250bCB8IFJBREVPTl9UVl9BU1lOQ19SU1QgfAorCQkJCSAgICAgICBSQURFT05fQ1JUX0FTWU5DX1JTVCB8IFJBREVPTl9UVl9GSUZPX0FTWU5DX1JTVCkpOworCisJdG1wID0gUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7CisJdG1wICY9IH5SQURFT05fVFZfREFDX05CTEFOSzsKKwl0bXAgfD0gUkFERU9OX1RWX0RBQ19CR1NMRUVQIHwKKwkJUkFERU9OX1RWX0RBQ19SREFDUEQgfAorCQlSQURFT05fVFZfREFDX0dEQUNQRCB8CisJCVJBREVPTl9UVl9EQUNfQkRBQ1BEOworCVdSRUczMihSQURFT05fVFZfREFDX0NOVEwsIHRtcCk7CisKKwkvKiBUViBQTEwgKi8KKwlXUkVHMzJfUExMX1AoUkFERU9OX1RWX1BMTF9DTlRMMSwgMCwgflJBREVPTl9UVkNMS19TUkNfU0VMX1RWUExMKTsKKwlXUkVHMzJfUExMKFJBREVPTl9UVl9QTExfQ05UTCwgdHZfcGxsX2NudGwpOworCVdSRUczMl9QTExfUChSQURFT05fVFZfUExMX0NOVEwxLCBSQURFT05fVFZQTExfUkVTRVQsIH5SQURFT05fVFZQTExfUkVTRVQpOworCisJcmFkZW9uX3dhaXRfcGxsX2xvY2soZW5jb2RlciwgMjAwLCA4MDAsIDEzNSk7CisKKwlXUkVHMzJfUExMX1AoUkFERU9OX1RWX1BMTF9DTlRMMSwgMCwgflJBREVPTl9UVlBMTF9SRVNFVCk7CisKKwlyYWRlb25fd2FpdF9wbGxfbG9jayhlbmNvZGVyLCAzMDAsIDE2MCwgMjcpOworCXJhZGVvbl93YWl0X3BsbF9sb2NrKGVuY29kZXIsIDIwMCwgODAwLCAxMzUpOworCisJV1JFRzMyX1BMTF9QKFJBREVPTl9UVl9QTExfQ05UTDEsIDAsIH4weGYpOworCVdSRUczMl9QTExfUChSQURFT05fVFZfUExMX0NOVEwxLCBSQURFT05fVFZDTEtfU1JDX1NFTF9UVlBMTCwgflJBREVPTl9UVkNMS19TUkNfU0VMX1RWUExMKTsKKworCVdSRUczMl9QTExfUChSQURFT05fVFZfUExMX0NOVEwxLCAoMSA8PCBSQURFT05fVFZQRENfU0hJRlQpLCB+UkFERU9OX1RWUERDX01BU0spOworCVdSRUczMl9QTExfUChSQURFT05fVFZfUExMX0NOVEwxLCAwLCB+UkFERU9OX1RWUExMX1NMRUVQKTsKKworCS8qIFRWIEhWICovCisJV1JFRzMyKFJBREVPTl9UVl9SR0JfQ05UTCwgdHZfcmdiX2NudGwpOworCVdSRUczMihSQURFT05fVFZfSFRPVEFMLCBjb25zdF9wdHItPmhvcl90b3RhbCAtIDEpOworCVdSRUczMihSQURFT05fVFZfSERJU1AsIGNvbnN0X3B0ci0+aG9yX3Jlc29sdXRpb24gLSAxKTsKKwlXUkVHMzIoUkFERU9OX1RWX0hTVEFSVCwgY29uc3RfcHRyLT5ob3Jfc3RhcnQpOworCisJV1JFRzMyKFJBREVPTl9UVl9WVE9UQUwsIGNvbnN0X3B0ci0+dmVyX3RvdGFsIC0gMSk7CisJV1JFRzMyKFJBREVPTl9UVl9WRElTUCwgY29uc3RfcHRyLT52ZXJfcmVzb2x1dGlvbiAtIDEpOworCVdSRUczMihSQURFT05fVFZfRlRPVEFMLCB0dl9mdG90YWwpOworCVdSRUczMihSQURFT05fVFZfVlNDQUxFUl9DTlRMMSwgdHZfdnNjYWxlcl9jbnRsMSk7CisJV1JFRzMyKFJBREVPTl9UVl9WU0NBTEVSX0NOVEwyLCB0dl92c2NhbGVyX2NudGwyKTsKKworCVdSRUczMihSQURFT05fVFZfWV9GQUxMX0NOVEwsIHR2X3lfZmFsbF9jbnRsKTsKKwlXUkVHMzIoUkFERU9OX1RWX1lfUklTRV9DTlRMLCB0dl95X3Jpc2VfY250bCk7CisJV1JFRzMyKFJBREVPTl9UVl9ZX1NBV19UT09USF9DTlRMLCB0dl95X3Nhd190b290aF9jbnRsKTsKKworCVdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsICh0dl9tYXN0ZXJfY250bCB8IFJBREVPTl9UVl9BU1lOQ19SU1QgfAorCQkJCSAgICAgICBSQURFT05fQ1JUX0FTWU5DX1JTVCkpOworCisJLyogVFYgcmVzdGFydHMgKi8KKwlyYWRlb25fbGVnYWN5X3dyaXRlX3R2X3Jlc3RhcnRzKHJhZGVvbl9lbmNvZGVyKTsKKworCS8qIHR2IHRpbWluZ3MgKi8KKwlyYWRlb25fcmVzdG9yZV90dl90aW1pbmdfdGFibGVzKHJhZGVvbl9lbmNvZGVyKTsKKworCVdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsICh0dl9tYXN0ZXJfY250bCB8IFJBREVPTl9UVl9BU1lOQ19SU1QpKTsKKworCS8qIHR2IHN0ZCAqLworCVdSRUczMihSQURFT05fVFZfU1lOQ19DTlRMLCAoUkFERU9OX1NZTkNfUFVCIHwgUkFERU9OX1RWX1NZTkNfSU9fRFJJVkUpKTsKKwlXUkVHMzIoUkFERU9OX1RWX1RJTUlOR19DTlRMLCB0dl9kYWMtPnR2LnRpbWluZ19jbnRsKTsKKwlXUkVHMzIoUkFERU9OX1RWX01PRFVMQVRPUl9DTlRMMSwgdHZfbW9kdWxhdG9yX2NudGwxKTsKKwlXUkVHMzIoUkFERU9OX1RWX01PRFVMQVRPUl9DTlRMMiwgdHZfbW9kdWxhdG9yX2NudGwyKTsKKwlXUkVHMzIoUkFERU9OX1RWX1BSRV9EQUNfTVVYX0NOVEwsIChSQURFT05fWV9SRURfRU4gfAorCQkJCQkgICAgUkFERU9OX0NfR1JOX0VOIHwKKwkJCQkJICAgIFJBREVPTl9DTVBfQkxVX0VOIHwKKwkJCQkJICAgIFJBREVPTl9EQUNfRElUSEVSX0VOKSk7CisKKwlXUkVHMzIoUkFERU9OX1RWX0NSQ19DTlRMLCAwKTsKKworCVdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsIHR2X21hc3Rlcl9jbnRsKTsKKworCVdSRUczMihSQURFT05fVFZfR0FJTl9MSU1JVF9TRVRUSU5HUywgKCgweDE3ZiA8PCBSQURFT05fVVZfR0FJTl9MSU1JVF9TSElGVCkgfAorCQkJCQkgICAgICAgKDB4NWZmIDw8IFJBREVPTl9ZX0dBSU5fTElNSVRfU0hJRlQpKSk7CisJV1JFRzMyKFJBREVPTl9UVl9MSU5FQVJfR0FJTl9TRVRUSU5HUywgKCgweDEwMCA8PCBSQURFT05fVVZfR0FJTl9TSElGVCkgfAorCQkJCQkJKDB4MTAwIDw8IFJBREVPTl9ZX0dBSU5fU0hJRlQpKSk7CisKKwlXUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMLCB0dl9kYWNfY250bCk7CisKK30KKwordm9pZCByYWRlb25fbGVnYWN5X3R2X2FkanVzdF9jcnRjX3JlZyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAgdWludDMyX3QgKmhfdG90YWxfZGlzcCwgdWludDMyX3QgKmhfc3luY19zdHJ0X3dpZCwKKwkJCQkgICAgICB1aW50MzJfdCAqdl90b3RhbF9kaXNwLCB1aW50MzJfdCAqdl9zeW5jX3N0cnRfd2lkKQoreworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwljb25zdCBzdHJ1Y3QgcmFkZW9uX3R2X21vZGVfY29uc3RhbnRzICpjb25zdF9wdHI7CisJdWludDMyX3QgdG1wOworCisJY29uc3RfcHRyID0gcmFkZW9uX2xlZ2FjeV90dl9nZXRfc3RkX21vZGUocmFkZW9uX2VuY29kZXIsIE5VTEwpOworCWlmICghY29uc3RfcHRyKQorCQlyZXR1cm47CisKKwkqaF90b3RhbF9kaXNwID0gKCgoY29uc3RfcHRyLT5ob3JfcmVzb2x1dGlvbiAvIDgpIC0gMSkgPDwgUkFERU9OX0NSVENfSF9ESVNQX1NISUZUKSB8CisJCSgoKGNvbnN0X3B0ci0+aG9yX3RvdGFsIC8gOCkgLSAxKSA8PCBSQURFT05fQ1JUQ19IX1RPVEFMX1NISUZUKTsKKworCXRtcCA9ICpoX3N5bmNfc3RydF93aWQ7CisJdG1wICY9IH4oUkFERU9OX0NSVENfSF9TWU5DX1NUUlRfUElYIHwgUkFERU9OX0NSVENfSF9TWU5DX1NUUlRfQ0hBUik7CisJdG1wIHw9ICgoKGNvbnN0X3B0ci0+aG9yX3N5bmNzdGFydCAvIDgpIC0gMSkgPDwgUkFERU9OX0NSVENfSF9TWU5DX1NUUlRfQ0hBUl9TSElGVCkgfAorCQkoY29uc3RfcHRyLT5ob3Jfc3luY3N0YXJ0ICYgNyk7CisJKmhfc3luY19zdHJ0X3dpZCA9IHRtcDsKKworCSp2X3RvdGFsX2Rpc3AgPSAoKGNvbnN0X3B0ci0+dmVyX3Jlc29sdXRpb24gLSAxKSA8PCBSQURFT05fQ1JUQ19WX0RJU1BfU0hJRlQpIHwKKwkJKChjb25zdF9wdHItPnZlcl90b3RhbCAtIDEpIDw8IFJBREVPTl9DUlRDX1ZfVE9UQUxfU0hJRlQpOworCisJdG1wID0gKnZfc3luY19zdHJ0X3dpZDsKKwl0bXAgJj0gflJBREVPTl9DUlRDX1ZfU1lOQ19TVFJUOworCXRtcCB8PSAoKGNvbnN0X3B0ci0+dmVyX3N5bmNzdGFydCAtIDEpIDw8IFJBREVPTl9DUlRDX1ZfU1lOQ19TVFJUX1NISUZUKTsKKwkqdl9zeW5jX3N0cnRfd2lkID0gdG1wOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfcG9zdF9kaXYoaW50IHZhbHVlKQoreworCWludCBwb3N0X2RpdjsKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSAxOiBwb3N0X2RpdiA9IDA7IGJyZWFrOworCWNhc2UgMjogcG9zdF9kaXYgPSAxOyBicmVhazsKKwljYXNlIDM6IHBvc3RfZGl2ID0gNDsgYnJlYWs7CisJY2FzZSA0OiBwb3N0X2RpdiA9IDI7IGJyZWFrOworCWNhc2UgNjogcG9zdF9kaXYgPSA2OyBicmVhazsKKwljYXNlIDg6IHBvc3RfZGl2ID0gMzsgYnJlYWs7CisJY2FzZSAxMjogcG9zdF9kaXYgPSA3OyBicmVhazsKKwljYXNlIDE2OgorCWRlZmF1bHQ6IHBvc3RfZGl2ID0gNTsgYnJlYWs7CisJfQorCXJldHVybiBwb3N0X2RpdjsKK30KKwordm9pZCByYWRlb25fbGVnYWN5X3R2X2FkanVzdF9wbGwxKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgIHVpbnQzMl90ICpodG90YWxfY250bCwgdWludDMyX3QgKnBwbGxfcmVmX2RpdiwKKwkJCQkgIHVpbnQzMl90ICpwcGxsX2Rpdl8zLCB1aW50MzJfdCAqcGl4Y2xrc19jbnRsKQoreworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwljb25zdCBzdHJ1Y3QgcmFkZW9uX3R2X21vZGVfY29uc3RhbnRzICpjb25zdF9wdHI7CisKKwljb25zdF9wdHIgPSByYWRlb25fbGVnYWN5X3R2X2dldF9zdGRfbW9kZShyYWRlb25fZW5jb2RlciwgTlVMTCk7CisJaWYgKCFjb25zdF9wdHIpCisJCXJldHVybjsKKworCSpodG90YWxfY250bCA9IChjb25zdF9wdHItPmhvcl90b3RhbCAmIDB4NykgfCBSQURFT05fSFRPVF9DTlRMX1ZHQV9FTjsKKworCSpwcGxsX3JlZl9kaXYgPSBjb25zdF9wdHItPmNydGNQTExfTTsKKworCSpwcGxsX2Rpdl8zID0gKGNvbnN0X3B0ci0+Y3J0Y1BMTF9OICYgMHg3ZmYpIHwgKGdldF9wb3N0X2Rpdihjb25zdF9wdHItPmNydGNQTExfcG9zdF9kaXYpIDw8IDE2KTsKKwkqcGl4Y2xrc19jbnRsICY9IH4oUkFERU9OX1BJWDJDTEtfU1JDX1NFTF9NQVNLIHwgUkFERU9OX1BJWENMS19UVl9TUkNfU0VMKTsKKwkqcGl4Y2xrc19jbnRsIHw9IFJBREVPTl9QSVgyQ0xLX1NSQ19TRUxfUDJQTExDTEs7Cit9CisKK3ZvaWQgcmFkZW9uX2xlZ2FjeV90dl9hZGp1c3RfcGxsMihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICB1aW50MzJfdCAqaHRvdGFsMl9jbnRsLCB1aW50MzJfdCAqcDJwbGxfcmVmX2RpdiwKKwkJCQkgIHVpbnQzMl90ICpwMnBsbF9kaXZfMCwgdWludDMyX3QgKnBpeGNsa3NfY250bCkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJY29uc3Qgc3RydWN0IHJhZGVvbl90dl9tb2RlX2NvbnN0YW50cyAqY29uc3RfcHRyOworCisJY29uc3RfcHRyID0gcmFkZW9uX2xlZ2FjeV90dl9nZXRfc3RkX21vZGUocmFkZW9uX2VuY29kZXIsIE5VTEwpOworCWlmICghY29uc3RfcHRyKQorCQlyZXR1cm47CisKKwkqaHRvdGFsMl9jbnRsID0gKGNvbnN0X3B0ci0+aG9yX3RvdGFsICYgMHg3KTsKKworCSpwMnBsbF9yZWZfZGl2ID0gY29uc3RfcHRyLT5jcnRjUExMX007CisKKwkqcDJwbGxfZGl2XzAgPSAoY29uc3RfcHRyLT5jcnRjUExMX04gJiAweDdmZikgfCAoZ2V0X3Bvc3RfZGl2KGNvbnN0X3B0ci0+Y3J0Y1BMTF9wb3N0X2RpdikgPDwgMTYpOworCSpwaXhjbGtzX2NudGwgJj0gflJBREVPTl9QSVgyQ0xLX1NSQ19TRUxfTUFTSzsKKwkqcGl4Y2xrc19jbnRsIHw9IFJBREVPTl9QSVgyQ0xLX1NSQ19TRUxfUDJQTExDTEsgfCBSQURFT05fUElYQ0xLX1RWX1NSQ19TRUw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21pY3JvY29kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbWljcm9jb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNDhjOWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbWljcm9jb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0gKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLSAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqLwotCi0jaWZuZGVmIFJBREVPTl9NSUNST0NPREVfSAotI2RlZmluZSBSQURFT05fTUlDUk9DT0RFX0gKLQotLyogcHJvZHVjdGlvbiByYWRlb24gdWNvZGUgcjF4eC1yNnh4ICovCi1zdGF0aWMgY29uc3QgdTMyIFIxMDBfY3BfbWljcm9jb2RlW11bMl0gPSB7Ci0gICAgeyAweDIxMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDIwMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMGI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGI4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDZmNWI0ZDRjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRjNGM0MjdmLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDViNTY4YTkyLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRjYTA5YzZkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGFkNGM0YzRjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRjZTFhZjNkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGQ4YWZhZmFmLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGQ2NGM0Y2RjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRjZDEwZDEwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGYwMDAwLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDM2MmYyNDJkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGYwMDAwLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDM2MmYyODJkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MGU3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyYzk3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGYwMDAxLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDMzM2EzNzMwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3N2VmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MDJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDA2N2UwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3N2UwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAzN2UxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDA2N2UxLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDA3N2UwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3N2UxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3N2UxLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweGZmZmZmZmZmLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDEwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MDJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDA2N2UwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDA3Njc1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDM4MDJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNjc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDAwMDJmLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDAwMDJmLCAweDAwMDAwMDE4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMDAwMDE4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAxNjA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDk4MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDY0YzA2MDNlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDgwMDAwLCAweDAwMDAwMDE2IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDA0MDAyNTFkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTgwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY3NTgxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNTgwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY3NTgxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDQ5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA1MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDE5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDExMDU1LCAweDAwMDAwMDE0IH0sCi0gICAgeyAweDAwMDAwMDU1LCAweDAwMDAwMDEyIH0sCi0gICAgeyAweDA0MDAyNTBmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA1MDRmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTY1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTY2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDU4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxZTY1NWI0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDQ0MDFiMGU0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxYzExMGU0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDI2NjY3MDY2LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MGMyNTY1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDY2LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MDAyNTY0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTY2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDVkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDAxMDY5LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMTAxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGQ4MGZmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwODAwMDZjLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMGY5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGUwMGZmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDAwMDhmLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDAwMDViLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDQxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDBjMDAzNTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDQ5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDUxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxZTc4NWY4LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMDdlLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDA3NTYzLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjA3NWYwLCAweDAwMDAwMDIxIH0sCi0gICAgeyAweDIwMDA3MDczLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA1MDczLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTc3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTBmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMDgzLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwNjA3NWYwLCAweDAwMDAwMDIxIH0sCi0gICAgeyAweDAwMDA3NWY4LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDgzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGE3NTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMjA3NTBmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMDg2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3NTcwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTcxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTcyLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTY4LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDk1LCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDU4MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDBjNjA3NTYyLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDk3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMDk2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMDA3MGU1LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MGU1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGE4LCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDY1MGFhLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MDAyNWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMGFiLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MDA3NWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3NWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDkwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDkwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGQ4MDAyLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDA3ODMyLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MGU3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyYzk3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3ODIxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3ODAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAxMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDIwMDc3MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDIwMDA3MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxMjA3NTFiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwNDA3NTBhLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwNDA3NTBiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMTEwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MGU1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGM2LCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDYxMGFiLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDg0NDA3NWJkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMGFhLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDg0MDA3NWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMGFiLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDg0NDA3NWJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGM5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDgwNDA3NWJkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwMDA3NWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwNDA3NWJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMTA4MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxNDAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMGNkLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDIwYzA3MDAwLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDAwMDAwMGNmLCAweDAwMDAwMDEyIH0sCi0gICAgeyAweDAwODAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwODA3NTFkLCAweDAwMDAwMDA2IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3NzVjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0NjAyNzVkLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDAwMDA0MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAxZTAwODMwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDIxMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDY0NjQ2MTRkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDY5Njg3NDIwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDczLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MGQwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWUwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NWUxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MGUwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyMzk0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA1MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFIyMDBfY3BfbWljcm9jb2RlW11bMl0gPSB7Ci0gICAgeyAweDIxMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDIwMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMGJmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGMzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDdhNjg1ZTVkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDVkNWQ1NTg4LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDY4NjU5MTk3LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDVkYTE5Zjc4LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDVkNWQ1ZDVkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDVkZWU1ZDUwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGYyYWNhY2FjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGU3NWRmOWU5LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGIxZGQwZTExLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGUyYWZhZmFmLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGYwMDAwLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDQ1MmYyMzJkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGYwMDAwLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDQ1MmYyNzJkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGYwMDAxLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDNlNGQ0YTM3LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3N2VmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDM4MDJhLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDA2N2UwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3N2UwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAzN2UxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDA2N2UxLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDA3N2UwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3N2UxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3N2UxLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweGZmZmZmZmZmLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDEwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDA3ZjAwN2YwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MDJhLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDA2N2UwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDM4MDJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQzLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDM4MDJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQzLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDM4MDJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNjc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MDJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQzLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDM4MDJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNzQzLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDAwMDJmLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDAwMDJmLCAweDAwMDAwMDE4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDAwMDM3LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDAwMDM3LCAweDAwMDAwMDE4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAxNjA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDk4MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDY0YzA2MDUxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDgwMDAwLCAweDAwMDAwMDE2IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDA0MDAyNTFkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTgwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY3NTgxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNTgwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY3NTgxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDVhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA1MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDE5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDExMDY0LCAweDAwMDAwMDE0IH0sCi0gICAgeyAweDAwMDAwMDY0LCAweDAwMDAwMDEyIH0sCi0gICAgeyAweDA0MDAyNTBmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA1MDVlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3NTY1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTY2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDY1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxZTY1NWI0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDQ0MDFiMGYwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxYzExMGYwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDI2NjY3MDcxLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MGMyNTY1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDcxLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MDAyNTY0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTY2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDY4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDAxMDc0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMTAxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGQ4MGZmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwODAwMDc3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMGY5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGUwMGZmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDAwMDY4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3NTc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDQxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDBjMDAzNTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDQ5MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDUxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxZTc4NWY4LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMDg3LCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDA3NTYzLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjA3NWYwLCAweDAwMDAwMDIxIH0sCi0gICAgeyAweDIwMDA3MDdjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA1MDdjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3NTc2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTc3LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTBmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMDhhLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwNjA3NWYwLCAweDAwMDAwMDIxIH0sCi0gICAgeyAweDAwMDA3NWY4LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDhhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGE3NTBlLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMjA3NTBmLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMDhkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3NTcwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTcxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTcyLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NTY4LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDk4LCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDU4MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDBjNjA3NTYyLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMDlhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNjAwMDk5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMDA3MGYxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MGYxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGE3LCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDY1MGE5LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MDAyNWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMGFhLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDA0MDA3NWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3NWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDkwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDkwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGQ4MDAyLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3ODIxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3ODAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODIxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3ODAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAxNjY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGEwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDY3MWNjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAyODZmMWNkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGI3LCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDIxMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMGJlLCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGEwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGIwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDM4MDY3MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMGEwMGJhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDIwMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAxMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDIwMDc3MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDIwMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxMjA3NTFiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwNDA3NTBhLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwNDA3NTBiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMTEwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MGYxLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGQxLCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDYxMGFhLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDg0NDA3NWJkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMGE5LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDg0MDA3NWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDYxMGFhLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDg0NDA3NWJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDgwNDA3NWJkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwMDA3NWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDgwNDA3NWJjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMTA4MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAxNDAwMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjAwMGQ4LCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDIwYzA3MDAwLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDAwMDAwMGRhLCAweDAwMDAwMDEyIH0sCi0gICAgeyAweDAwODAwMDAwLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwODA3NTFkLCAweDAwMDAwMDA2IH0sCi0gICAgeyAweDAwMDAyNWJiLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MGQ0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3NzVjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0NjAyNzVkLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDAwMDA0MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3OTk5LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwNjYxMDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0NjAyOTliLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDAwMDA0MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAxZTAwODMwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDIxMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDM4MDU2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDAyNWUwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3NWUxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDM4MGVkLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDA0MDA3Mzk0LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3OGM0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3OGM1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3OGM2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3OTI0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3OTI1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3OTI2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGYyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA3OTI0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3OTI1LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3OTI2LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDAwMGY5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFIzMDBfY3BfbWljcm9jb2RlW11bMl0gPSB7Ci0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMGFlLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMGIyLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDY3NTU0YjRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhNGE0NDc1LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDU1NTI3ZDgzLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhOGM4YjY1LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhZWY0YWY2LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhZTE0YTRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGU0OTc5Nzk3LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGRiNGFlYmRkLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDljY2M0YTRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGQxOTg5ODk4LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhMGY5YWQ2LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDEyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlOGI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlOGI2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFhLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFjLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFlLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDIwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODI1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDIyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMGMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMGMxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMDQxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJhLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJjLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJlLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDMwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDMyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzkzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzhhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzhlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDQzLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwY2NlODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDNhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDIwMDA0NTFkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlNTgxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0NTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlNTgxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDQ3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDIyMDUxLCAweDAwMDAwMDI4IH0sCi0gICAgeyAweDAwMDAwMDUxLCAweDAwMDAwMDI0IH0sCi0gICAgeyAweDA4MDA0NTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBhMDRiLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTY1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDUyLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAzY2NhNWI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1NDMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDIyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDRjY2NlMDVlLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4Mjc0NTY1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDVlLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDA0NTY0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDU1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwODAyMDYxLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMjAyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMGZmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxMDAwMDY0LCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMWYyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWMwMGZmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDAwMDAwMDU1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTc2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDEyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDgyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDE4MDA2NTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDkyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGEyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGYwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDc0LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDBlNTYzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwYzBlNWY5LCAweDAwMDAwMGMyIH0sCi0gICAgeyAweDAwMDAwMDY5LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDY5LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTc2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTc3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDc3LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwYzBlNWY5LCAweDAwMDAwMGMyIH0sCi0gICAgeyAweDAwMDAwMDc3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMTRlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDBlNTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwYzAwMDdhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTcwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTcxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTcyLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDg0LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMGIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDE4YzBlNTYyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDg2LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwYzAwMDg1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDcwMGUzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDkyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMGNhMDk0LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDA0NWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDk1LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDBlNWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlNWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMTIwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMTIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAyLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODJlLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAyY2NhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlMWNjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1MGRlMWNkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGE0LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwYzBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGExLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMGE2LCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMGFkLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTYwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDcwMGNlMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMGE5LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAyNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMGVlMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyNDBlNTFiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwODBlNTBhLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwODBlNTBiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMjIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDcwMGUzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGMwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMGMyMDk1LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4ODBlNWJkLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMGMyMDk0LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDBlNWJiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMGMyMDk1LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4ODBlNWJjLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDAwMGMzLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwODBlNWJkLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDBlNWJiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwODBlNWJjLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMjEwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyODAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwYzAwMGM3LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDQxODBlMDAwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDAwMGM5LCAweDAwMDAwMDI0IH0sCi0gICAgeyAweDAxMDAwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAxMDBlNTFkLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDA0NWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA4MGMzLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBmM2NlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1M2NmLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBmM2QyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1M2QzLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBmMzlkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1MzllLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAzYzAwODMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDIwMDA0NWUwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNWUxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDcwMGUwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDBlMzk0LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlOGM0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOGM1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOGM2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTJhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGU0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlOTI4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTJhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGViLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAyYzAyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDYwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGYzLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweGMwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWQwMDE4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWEwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGZiLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMDRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDA1MDBhMDRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFI0MjBfY3BfbWljcm9jb2RlW11bMl0gPSB7Ci0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDk5LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDlkLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDRhNTU0YjRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhNGE0NDY3LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDU1NTI2Zjc1LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhN2U3ZDY1LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGQ5ZDNkZmY2LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhYzU0YTRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGM4ODI4MjgyLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGJmNGFjZmMxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDg3YjA0YTRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGI1ODM4MzgzLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhMGY4NWJhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDEyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlOGI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlOGI2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFhLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFjLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFlLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDIwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODI1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDIyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMGMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMGMxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMDQxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJhLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJjLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJlLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDMwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDMyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzkzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzhhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzhlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDQzLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwY2NlODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDNhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDIwMDA0NTFkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlNTgxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0NTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlNTgxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDQ3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDIyMDUxLCAweDAwMDAwMDI4IH0sCi0gICAgeyAweDAwMDAwMDUxLCAweDAwMDAwMDI0IH0sCi0gICAgeyAweDA4MDA0NTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBhMDRiLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTY1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDUyLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAzY2NhNWI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1NDMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDIyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDRjY2NlMDVlLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4Mjc0NTY1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDVlLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDA0NTY0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDU1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwODAyMDYxLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMjAyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMGZmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxMDAwMDY0LCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMWYyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWMwMGZmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDAwMDcyLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDAwMDAwMDU1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTc2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTc3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDY5LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwYzBlNWY5LCAweDAwMDAwMGMyIH0sCi0gICAgeyAweDAwMDAwMDY5LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMTRlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDBlNTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwYzAwMDZjLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTcwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTcxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTcyLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDc2LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMGIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDE4YzBlNTYyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDc4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwYzAwMDc3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDcwMGM3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlNWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODJlLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAyY2NhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlMWNjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1MGRlMWNkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDhmLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwYzBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDhjLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDk4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTYwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDcwMGNlMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDk0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAyNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMGVlMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyNDBlNTFiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwODBlNTBhLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwODBlNTBiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMjIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDcwMGM3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGE0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwODBlNWJkLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDBlNWJiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwODBlNWJjLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMjEwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyODAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwYzAwMGFiLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDQxODBlMDAwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDAwMGFkLCAweDAwMDAwMDI0IH0sCi0gICAgeyAweDAxMDAwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAxMDBlNTFkLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDA0NWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA4MGE3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBmM2NlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1M2NmLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBmM2QyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1M2QzLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBmMzlkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1MzllLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAzYzAwODMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDIwMDA0NWUwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNWUxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDcwMGM0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDBlMzk0LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlOGM0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOGM1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOGM2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTJhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGM4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlOTI4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTJhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGNmLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAyYzAyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDYwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGQ3LCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweGMwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlMWNjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1MDBlMWNkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGRlLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMGRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMTllMWNjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1MDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0MWNkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGZiLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMDRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWQwMDE4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWEwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGZiLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMDRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDA1MDBhMDRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJTNjAwX2NwX21pY3JvY29kZVtdWzJdID0gewotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDBhMCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDBhNCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHg0YTU1NGI0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTRhNDQ2NywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg1NTUyNmY3NSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTdlN2Q2NSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YWU3NGFmNiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YWQzNGE0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhkNjg5ODk4OSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhjZDRhZGRjZiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg4ZWJlNGFlMiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhjMzhhOGE4YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTBmOGNjOCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZThiNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZThiNiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxYSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxYywgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxZSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgyNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyMCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgyNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgzMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjBjMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjBjMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjA0MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyYSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyYywgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyZSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzMCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM5MywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM4YSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM4ZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA0MywgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGNjZTgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDAzYSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgyMDAwNDUxZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDU4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA0NywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAzMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAyMjA1MSwgMHgwMDAwMDAyOCB9LAotICAgIHsgMHgwMDAwMDA1MSwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwODAwNDUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwYTA0YiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU2NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1MiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwM2NjYTViNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTQzMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAyMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0Y2NjZTA1ZSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODI3NDU2NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1ZSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwNDU2NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1NSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDgwMjA2MSwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDIwMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDBmZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTAwMDA2NCwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDFmMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFjMDBmZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwMDA3MiwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwMDAwMDA1NSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU3NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA2OSwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGMwZTVmOSwgMHgwMDAwMDBjMiB9LAotICAgIHsgMHgwMDAwMDA2OSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDE0ZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDQwZTUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGMwMDA2YywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU3MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3MiwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2OCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA3NiwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMDBiMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgxOGMwZTU2MiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA3OCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMGMwMDA3NywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDA3MDBkNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA4NCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDBjYTA4NiwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwNDViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjA4NywgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwZTViYywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTViYywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDEyMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDEyMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMiwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyZSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMmNjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTFjYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTBkZTFjZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA5NiwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGMwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA5MywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA5OCwgMHgwMDAwMDAyMCB9LAotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA5ZiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE2MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg3MDBjZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDA5YiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MDBlZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjQwZTUxYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDgwZTUwYSwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDgwZTUwYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDIyMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDA3MDBkNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBiMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDBjMjA4NywgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODgwZTViZCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDBjMjA4NiwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwZTViYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDBjMjA4NywgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODgwZTViYywgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwMDBiNSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDgwZTViZCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDgwZTViYywgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDIxMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjgwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGMwMDBiOSwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHg0MTgwZTAwMCwgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwMDBiYiwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMTAwZTUxZCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwNDViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwODBiNSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZjNjZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwOGMwNTNjZiwgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZjNkMiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwOGMwNTNkMywgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZjM5ZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwOGMwNTM5ZSwgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwM2MwMDgzMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgyMDAwNDVlMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTVlMSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDA3MDBkMiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwZTM5NCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZThjNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZThjNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZThjNiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyYSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBkNiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTkyOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyYSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBkZCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMGUwMDExNiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDA3MDBlMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDAxYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgyMDAwNTBlNywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTAxZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBlNCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMmMwMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDA2MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBlYiwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDBlOCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHhjMDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFkMDAxOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFhMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBmYiwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDA0YSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwNTAwYTA0YSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSUzY5MF9jcF9taWNyb2NvZGVbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDAwZGQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwZGYsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwYTAsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwYTQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4NGE1NTRiNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE0YTQ0NjcsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NTU1MjZmNzUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE3ZTdkNjUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGFkNzRhZjYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGFjOTRhNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4Y2M4OTg5ODksIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4YzM0YWQzYzUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4OGU0YTRhNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE4YThhOGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGEwZjhjNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwNDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOTMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDMsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjY2U4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwM2EsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MjAwMDQ1MWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwNTEsIDB4MDAwMDAwMjggfSwKLSAgICB7IDB4MDAwMDAwNTEsIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDgwMDQ1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGEwNGIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDNjY2E1YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDU0MzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NGNjY2UwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgyNzQ1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMDQ1NjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDA4MDIwNjEsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAyMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDEwMDAwNjQsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAxZjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYzAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDAwNzIsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNjksIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGU1ZjksIDB4MDAwMDAwYzIgfSwKLSAgICB7IDB4MDAwMDAwNjksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAxNGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwNmMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzIsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwYjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MThjMGU1NjIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDBjMDAwNzcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwNzAwY2IsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwODQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwY2EwODYsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMDQ1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwODcsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMGU1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAxMjAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAxMjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDIsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MmUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDJjY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2UxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwZGUxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwOTYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwOTMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwOTgsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwOWYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NzAwY2UwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwOWIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwZWUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAxMDAwMDAsIDB4MDAwMDAwMmMgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDgwMDQ1YzgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAyNDAwMDUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDRkMGIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MGU1MWIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA4MGU1MGEsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1MGIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNzAwY2IsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYjcsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwYzIwODcsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDg4MGU1YmQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwYzIwODYsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMGU1YmIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwYzIwODcsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDg4MGU1YmMsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMDAwYmEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDA4MGU1YmQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1YmMsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMTAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI4MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwYmUsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4NDE4MGUwMDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDAwYzAsIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDEwMGU1MWQsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDQ1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDgwYmEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDNjMDA4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MjAwMDQ1ZTAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ZTEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwNzAwYzgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMGUzOTQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4YzQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwY2MsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZDMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDJjMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZGIsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwZDgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4YzAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwZTEsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwZTEsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAyNTAwMWIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAyMzAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAyNTAwMDUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZTYsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAyNDQwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ1YzgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAyNDAwMDUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDRkMGIsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxZDAwMTgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYTAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZmIsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDUwMGEwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUjUyMF9jcF9taWNyb2NvZGVbXVsyXSA9IHsKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwOTksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwOWQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4NGE1NTRiNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE0YTQ0NjcsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NTU1MjZmNzUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE3ZTdkNjUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZTBkYWU2ZjYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGFjNTRhNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4Yzg4MjgyODIsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4YmY0YWNmYzEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ODdiMDRhZDUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4YjU4MzgzODMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGEwZjg1YmEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOTMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDMsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjY2U4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwM2EsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MjAwMDQ1MWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwNTEsIDB4MDAwMDAwMjggfSwKLSAgICB7IDB4MDAwMDAwNTEsIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDgwMDQ1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGEwNGIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDNjY2E1YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDU0MzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NGNjY2UwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgyNzQ1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMDQ1NjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDA4MDIwNjEsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAyMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDEwMDAwNjQsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAxZjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYzAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDAwNzIsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNjksIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGU1ZjksIDB4MDAwMDAwYzIgfSwKLSAgICB7IDB4MDAwMDAwNjksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAxNGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwNmMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzIsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwYjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MThjMGU1NjIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDBjMDAwNzcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwNzAwYzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MmUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDJjY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2UxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwZGUxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwOGYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwOGMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwOTgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NzAwY2UwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwOTQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwZWUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MGU1MWIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA4MGU1MGEsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1MGIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNzAwYzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYTQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDA4MGU1YmQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1YmMsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMTAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI4MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwYWIsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4NDE4MGUwMDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDAwYWQsIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDEwMGU1MWQsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDQ1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDgwYTcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGYzY2UsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzY2YsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGYzZDIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzZDMsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGYzOWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzOWUsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDNjMDA4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MjAwMDQ1ZTAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ZTEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwNzAwYzQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMGUzOTQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4YzQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYzgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwY2YsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4ZGVhZGJlZWYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAxMTYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwNzAwZDMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDUwZTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNzAwZDQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQwMWMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGUwMWQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDJjMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZGUsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwZGIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4YzAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGUxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwMGUxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZTUsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwZTEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAxOWUxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZmIsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxZDAwMTgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYTAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZmIsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDUwMGEwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLX07Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggM2IwOWExZi4uNTcwYTU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTc1LDYgKzE3NSwxNSBAQAogCWVudW0gcmFkZW9uX2Nvbm5lY3Rvcl90YWJsZSBjb25uZWN0b3JfdGFibGU7CiAJYm9vbCBtb2RlX2NvbmZpZ19pbml0aWFsaXplZDsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKmNydGNzWzJdOworCS8qIERWSS1JIHByb3BlcnRpZXMgKi8KKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpjb2hlcmVudF9tb2RlX3Byb3BlcnR5OworCS8qIERBQyBlbmFibGUgbG9hZCBkZXRlY3QgKi8KKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpsb2FkX2RldGVjdF9wcm9wZXJ0eTsKKwkvKiBUViBzdGFuZGFyZCBsb2FkIGRldGVjdCAqLworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X3N0ZF9wcm9wZXJ0eTsKKwkvKiBsZWdhY3kgVE1EUyBQTEwgZGV0ZWN0ICovCisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdG1kc19wbGxfcHJvcGVydHk7CisKIH07CiAKIHN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgewpAQCAtMTg4LDYgKzE5NywyMSBAQAogCXVpbnQzMl90IGZsYWdzOwogfTsKIAorI2RlZmluZSBNQVhfSF9DT0RFX1RJTUlOR19MRU4gMzIKKyNkZWZpbmUgTUFYX1ZfQ09ERV9USU1JTkdfTEVOIDMyCisKKy8qIG5lZWQgdG8gc3RvcmUgdGhlc2UgYXMgcmVhZGluZworICAgYmFjayBjb2RlIHRhYmxlcyBpcyBleGNlc3NpdmUgKi8KK3N0cnVjdCByYWRlb25fdHZfcmVncyB7CisJdWludDMyX3QgdHZfdXZfYWRyOworCXVpbnQzMl90IHRpbWluZ19jbnRsOworCXVpbnQzMl90IGhyZXN0YXJ0OworCXVpbnQzMl90IHZyZXN0YXJ0OworCXVpbnQzMl90IGZyZXN0YXJ0OworCXVpbnQxNl90IGhfY29kZV90aW1pbmdbTUFYX0hfQ09ERV9USU1JTkdfTEVOXTsKKwl1aW50MTZfdCB2X2NvZGVfdGltaW5nW01BWF9WX0NPREVfVElNSU5HX0xFTl07Cit9OworCiBzdHJ1Y3QgcmFkZW9uX2NydGMgewogCXN0cnVjdCBkcm1fY3J0YyBiYXNlOwogCWludCBjcnRjX2lkOwpAQCAtMTk1LDggKzIxOSw2IEBACiAJYm9vbCBlbmFibGVkOwogCWJvb2wgY2FuX3RpbGU7CiAJdWludDMyX3QgY3J0Y19vZmZzZXQ7Ci0Jc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciAqZmJkZXZfZmI7Ci0Jc3RydWN0IGRybV9tb2RlX3NldCBtb2RlX3NldDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmN1cnNvcl9ibzsKIAl1aW50NjRfdCBjdXJzb3JfYWRkcjsKIAlpbnQgY3Vyc29yX3dpZHRoOwpAQCAtMjA0LDcgKzIyNiw2IEBACiAJdWludDMyX3QgbGVnYWN5X2Rpc3BsYXlfYmFzZV9hZGRyOwogCXVpbnQzMl90IGxlZ2FjeV9jdXJzb3Jfb2Zmc2V0OwogCWVudW0gcmFkZW9uX3JteF90eXBlIHJteF90eXBlOwotCXVpbnQzMl90IGRldmljZXM7CiAJZml4ZWQyMF8xMiB2c2M7CiAJZml4ZWQyMF8xMiBoc2M7CiAJc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKQEAgLTIzNiw3ICsyNTcsMTMgQEAKIAl1aW50MzJfdCBudHNjX3R2ZGFjX2FkajsKIAl1aW50MzJfdCBwYWxfdHZkYWNfYWRqOwogCisJaW50ICAgICAgICAgICAgICAgaF9wb3M7CisJaW50ICAgICAgICAgICAgICAgdl9wb3M7CisJaW50ICAgICAgICAgICAgICAgaF9zaXplOworCWludCAgICAgICAgICAgICAgIHN1cHBvcnRlZF90dl9zdGRzOworCWJvb2wgICAgICAgICAgICAgIHR2X29uOwogCWVudW0gcmFkZW9uX3R2X3N0ZCB0dl9zdGQ7CisJc3RydWN0IHJhZGVvbl90dl9yZWdzIHR2OwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzIHsKQEAgLTI1NSwxMCArMjgyLDE1IEBACiAJc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKIH07CiAKK3N0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyB7CisJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZDsKK307CisKIHN0cnVjdCByYWRlb25fZW5jb2RlciB7CiAJc3RydWN0IGRybV9lbmNvZGVyIGJhc2U7CiAJdWludDMyX3QgZW5jb2Rlcl9pZDsKIAl1aW50MzJfdCBkZXZpY2VzOworCXVpbnQzMl90IGFjdGl2ZV9kZXZpY2U7CiAJdWludDMyX3QgZmxhZ3M7CiAJdWludDMyX3QgcGl4ZWxfY2xvY2s7CiAJZW51bSByYWRlb25fcm14X3R5cGUgcm14X3R5cGU7CkBAIC0yNzYsOCArMzA4LDEyIEBACiAJdWludDMyX3QgY29ubmVjdG9yX2lkOwogCXVpbnQzMl90IGRldmljZXM7CiAJc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqZGRjX2J1czsKLQlpbnQgdXNlX2RpZ2l0YWw7CisJYm9vbCB1c2VfZGlnaXRhbDsKKwkvKiB3ZSBuZWVkIHRvIG1pbmQgdGhlIEVESUQgYmV0d2VlbiBkZXRlY3QKKwkgICBhbmQgZ2V0IG1vZGVzIGR1ZSB0byBhbmFsb2cvZGlnaXRhbC90dmVuY29kZXIgKi8KKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKIAl2b2lkICpjb25fcHJpdjsKKwlib29sIGRhY19sb2FkX2RldGVjdDsKIH07CiAKIHN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgewpAQCAtMzEwLDYgKzM0Niw3IEBACiBzdHJ1Y3QgZHJtX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyX2xlZ2FjeV90bWRzX2V4dF9hZGQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGJpb3NfaW5kZXgpOwogZXh0ZXJuIHZvaWQgYXRvbWJpb3NfZXh0ZXJuYWxfdG1kc19zZXR1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBhY3Rpb24pOwogZXh0ZXJuIGludCBhdG9tYmlvc19nZXRfZW5jb2Rlcl9tb2RlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CitleHRlcm4gdm9pZCByYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogCiBleHRlcm4gdm9pZCByYWRlb25fY3J0Y19sb2FkX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogZXh0ZXJuIGludCBhdG9tYmlvc19jcnRjX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHgsIGludCB5LApAQCAtMzM3LDE2ICszNzQsMTggQEAKIGV4dGVybiBib29sIHJhZGVvbl9jb21iaW9zX2dldF9jbG9ja19pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqCiByYWRlb25fYXRvbWJpb3NfZ2V0X2x2ZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOwotZXh0ZXJuIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqCi1yYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOworYm9vbCByYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzKTsKK2Jvb2wgcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fY29tYmlvcyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIsCisJCQkJCSAgIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqdG1kcyk7Citib29sIHJhZGVvbl9sZWdhY3lfZ2V0X3RtZHNfaW5mb19mcm9tX3RhYmxlKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJICAgIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqdG1kcyk7CiBleHRlcm4gc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjICoKIHJhZGVvbl9hdG9tYmlvc19nZXRfcHJpbWFyeV9kYWNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOwogZXh0ZXJuIHN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKgogcmFkZW9uX2F0b21iaW9zX2dldF90dl9kYWNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOwogZXh0ZXJuIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9sdmRzICoKIHJhZGVvbl9jb21iaW9zX2dldF9sdmRzX2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKTsKLWV4dGVybiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKgotcmFkZW9uX2NvbWJpb3NfZ2V0X3RtZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbWJpb3NfZ2V0X2V4dF90bWRzX2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKTsKIGV4dGVybiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICoKIHJhZGVvbl9jb21iaW9zX2dldF90dl9kYWNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOwpAQCAtMzU2LDYgKzM5NSw4IEBACiBleHRlcm4gdm9pZCByYWRlb25fY29tYmlvc19pbml0aWFsaXplX2Jpb3Nfc2NyYXRjaF9yZWdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2F0b21fb3V0cHV0X2xvY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIGxvY2spOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2F0b21faW5pdGlhbGl6ZV9iaW9zX3NjcmF0Y2hfcmVncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9yZXN0b3JlX2Jpb3Nfc2NyYXRjaF9yZWdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkCiByYWRlb25fYXRvbWJpb3NfZW5jb2Rlcl9jcnRjX3NjcmF0Y2hfcmVncyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkCkBAIC0zOTYsNiArNDM3LDE5IEBACiBib29sIHJhZGVvbl9jcnRjX3NjYWxpbmdfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7Ci12b2lkIGF0b21fcnY1MTVfZm9yY2VfdHZfc2NhbGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgYXRvbV9ydjUxNV9mb3JjZV90dl9zY2FsZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMpOwogCisvKiBsZWdhY3kgdHYgKi8KK3ZvaWQgcmFkZW9uX2xlZ2FjeV90dl9hZGp1c3RfY3J0Y19yZWcoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgIHVpbnQzMl90ICpoX3RvdGFsX2Rpc3AsIHVpbnQzMl90ICpoX3N5bmNfc3RydF93aWQsCisJCQkJICAgICAgdWludDMyX3QgKnZfdG90YWxfZGlzcCwgdWludDMyX3QgKnZfc3luY19zdHJ0X3dpZCk7Cit2b2lkIHJhZGVvbl9sZWdhY3lfdHZfYWRqdXN0X3BsbDEoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgdWludDMyX3QgKmh0b3RhbF9jbnRsLCB1aW50MzJfdCAqcHBsbF9yZWZfZGl2LAorCQkJCSAgdWludDMyX3QgKnBwbGxfZGl2XzMsIHVpbnQzMl90ICpwaXhjbGtzX2NudGwpOwordm9pZCByYWRlb25fbGVnYWN5X3R2X2FkanVzdF9wbGwyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgIHVpbnQzMl90ICpodG90YWwyX2NudGwsIHVpbnQzMl90ICpwMnBsbF9yZWZfZGl2LAorCQkJCSAgdWludDMyX3QgKnAycGxsX2Rpdl8wLCB1aW50MzJfdCAqcGl4Y2xrc19jbnRsKTsKK3ZvaWQgcmFkZW9uX2xlZ2FjeV90dl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCmluZGV4IGI4NWZiODMuLjczYWY0NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCkBAIC0xODgsNiArMTg4LDcgQEAKIAlpZiAocHRyKSB7CiAJCSpwdHIgPSByb2JqLT5rcHRyOwogCX0KKwlyYWRlb25fb2JqZWN0X2NoZWNrX3RpbGluZyhyb2JqLCAwLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAwLDYgKzIwMSw3IEBACiAJfQogCXJvYmotPmtwdHIgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZyb2JqLT50b2JqLmxvY2spOworCXJhZGVvbl9vYmplY3RfY2hlY2tfdGlsaW5nKHJvYmosIDAsIDApOwogCXR0bV9ib19rdW5tYXAoJnJvYmotPmttYXApOwogfQogCkBAIC0zNjksNiArMzcxLDE0IEBACiAKIGludCByYWRlb25fb2JqZWN0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJLyogQWRkIGFuIE1UUlIgZm9yIHRoZSBWUkFNICovCisJcmRldi0+bWMudnJhbV9tdHJyID0gbXRycl9hZGQocmRldi0+bWMuYXBlcl9iYXNlLCByZGV2LT5tYy5hcGVyX3NpemUsCisJCQlNVFJSX1RZUEVfV1JDT01CLCAxKTsKKwlEUk1fSU5GTygiRGV0ZWN0ZWQgVlJBTSBSQU09JWxsdU0sIEJBUj0lbGx1TVxuIiwKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID4+IDIwLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPm1jLmFwZXJfc2l6ZSA+PiAyMCk7CisJRFJNX0lORk8oIlJBTSB3aWR0aCAlZGJpdHMgJWNEUlxuIiwKKwkJCXJkZXYtPm1jLnZyYW1fd2lkdGgsIHJkZXYtPm1jLnZyYW1faXNfZGRyID8gJ0QnIDogJ1MnKTsKIAlyZXR1cm4gcmFkZW9uX3R0bV9pbml0KHJkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oCmluZGV4IDQ3M2U0NzcuLjEwZThhZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oCkBAIC0zNyw2ICszNyw3IEBACiAgKiBUVE0uCiAgKi8KIHN0cnVjdCByYWRlb25fbW1hbiB7CisJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmICAgICAgICBib19nbG9iYWxfcmVmOwogCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZQltZW1fZ2xvYmFsX3JlZjsKIAlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZQkJYmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggNGRmNDNmNi4uMjFkYTg3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTE5NDUsNiArMTk0NSwxMSBAQAogIyAgICAgICBkZWZpbmUgUkFERU9OX1RYRk9STUFUX0RYVDEgICAgICAgICAgICAgICAoMTIgPDwgIDApCiAjICAgICAgIGRlZmluZSBSQURFT05fVFhGT1JNQVRfRFhUMjMgICAgICAgICAgICAgICgxNCA8PCAgMCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9UWEZPUk1BVF9EWFQ0NSAgICAgICAgICAgICAgKDE1IDw8ICAwKQorIwlkZWZpbmUgUkFERU9OX1RYRk9STUFUX1NIQURPVzE2ICAgICAgICAgICAoMTYgPDwgIDApCisjCWRlZmluZSBSQURFT05fVFhGT1JNQVRfU0hBRE9XMzIgICAgICAgICAgICgxNyA8PCAgMCkKKyMgICAgICAgZGVmaW5lIFJBREVPTl9UWEZPUk1BVF9EVURWODggICAgICAgICAgICAgKDE4IDw8ICAwKQorIyAgICAgICBkZWZpbmUgUkFERU9OX1RYRk9STUFUX0xEVURWNjU1ICAgICAgICAgICAoMTkgPDwgIDApCisjICAgICAgIGRlZmluZSBSQURFT05fVFhGT1JNQVRfTERVRFVWODg4OCAgICAgICAgICgyMCA8PCAgMCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSyAgICAgICAgKDMxIDw8ICAwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9TSElGVCAgICAgICAwCiAjICAgICAgIGRlZmluZSBSQURFT05fVFhGT1JNQVRfQVBQTEVfWVVWX01PREUgICAgICgxICA8PCAgNSkKQEAgLTIyMDMsNyArMjIwOCw3IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fUk9QX0VOQUJMRSAgICAgICAgICAgICAgICgxICA8PCAgNikKICMgICAgICAgZGVmaW5lIFJBREVPTl9TVEVOQ0lMX0VOQUJMRSAgICAgICAgICAgKDEgIDw8ICA3KQogIyAgICAgICBkZWZpbmUgUkFERU9OX1pfRU5BQkxFICAgICAgICAgICAgICAgICAoMSAgPDwgIDgpCi0jICAgICAgIGRlZmluZSBSQURFT05fREVQVEhfWFpfT0ZGRVNUX0VOQUJMRSAgICgxICA8PCAgOSkKKyMgICAgICAgZGVmaW5lIFJBREVPTl9ERVBUSFhZX09GRlNFVF9FTkFCTEUgICAgKDEgIDw8ICA5KQogIyAgICAgICBkZWZpbmUgUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUICAxMAogCiAjICAgICAgIGRlZmluZSBSQURFT05fQ09MT1JfRk9STUFUX0FSR0IxNTU1ICAgIDMKQEAgLTI3NzMsNyArMjc3OCwxMiBAQAogIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9EWFQxCQkoMTIgPDwgMCkKICMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfRFhUMjMJCSgxNCA8PCAwKQogIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9EWFQ0NQkJKDE1IDw8IDApCisjICAgICAgIGRlZmluZSBSMjAwX1RYRk9STUFUX0RWRFU4OAkJKDE4IDw8IDApCisjICAgICAgIGRlZmluZSBSMjAwX1RYRk9STUFUX0xEVkRVNjU1CQkoMTkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfTERWRFU4ODg4CQkoMjAgPDwgMCkKKyMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfR1IxNjE2CQkoMjEgPDwgMCkKICMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfQUJHUjg4ODgJCSgyMiA8PCAwKQorIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9CR1IxMTExMTAJCSgyMyA8PCAwKQogIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9GT1JNQVRfTUFTSwkoMzEgPDwJMCkKICMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfRk9STUFUX1NISUZUCTAKICMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfQUxQSEFfSU5fTUFQCSgxIDw8IDYpCkBAIC0yODE4LDYgKzI4MjgsMTMgQEAKICNkZWZpbmUgUjIwMF9QUF9UWFBJVENIXzQJCQkweDJjOTAgLyogTlBPVCBvbmx5ICovCiAjZGVmaW5lIFIyMDBfUFBfVFhQSVRDSF81CQkJMHgyY2IwIC8qIE5QT1Qgb25seSAqLwogCisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMAkJCTB4MmMxOAorI2RlZmluZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzEJCQkweDJjMzgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19GQUNFU18yCQkJMHgyYzU4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMwkJCTB4MmM3OAorI2RlZmluZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzQJCQkweDJjOTgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19GQUNFU181CQkJMHgyY2I4CisKICNkZWZpbmUgUjIwMF9QUF9UWE9GRlNFVF8wCQkJMHgyZDAwCiAjICAgICAgIGRlZmluZSBSMjAwX1RYT19FTkRJQU5fTk9fU1dBUAkJKDAgPDwgMCkKICMgICAgICAgZGVmaW5lIFIyMDBfVFhPX0VORElBTl9CWVRFX1NXQVAJKDEgPDwgMCkKQEAgLTI4MjksMTEgKzI4NDYsNDQgQEAKICMgICAgICAgZGVmaW5lIFIyMDBfVFhPX01JQ1JPX1RJTEUJCSgxIDw8IDMpCiAjICAgICAgIGRlZmluZSBSMjAwX1RYT19PRkZTRVRfTUFTSwkJMHhmZmZmZmZlMAogIyAgICAgICBkZWZpbmUgUjIwMF9UWE9fT0ZGU0VUX1NISUZUCQk1CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzAgICAgICAgICAweDJkMDQKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfMCAgICAgICAgIDB4MmQwOAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM18wICAgICAgICAgMHgyZDBjCisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzAgICAgICAgICAweDJkMTAKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfMCAgICAgICAgIDB4MmQxNAorCiAjZGVmaW5lIFIyMDBfUFBfVFhPRkZTRVRfMQkJCTB4MmQxOAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8xICAgICAgICAgMHgyZDFjCisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzEgICAgICAgICAweDJkMjAKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfMSAgICAgICAgIDB4MmQyNAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF8xICAgICAgICAgMHgyZDI4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzEgICAgICAgICAweDJkMmMKKwogI2RlZmluZSBSMjAwX1BQX1RYT0ZGU0VUXzIJCQkweDJkMzAKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMiAgICAgICAgIDB4MmQzNAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl8yICAgICAgICAgMHgyZDM4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzIgICAgICAgICAweDJkM2MKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfMiAgICAgICAgIDB4MmQ0MAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV8yICAgICAgICAgMHgyZDQ0CisKICNkZWZpbmUgUjIwMF9QUF9UWE9GRlNFVF8zCQkJMHgyZDQ4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzMgICAgICAgICAweDJkNGMKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfMyAgICAgICAgIDB4MmQ1MAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM18zICAgICAgICAgMHgyZDU0CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzMgICAgICAgICAweDJkNTgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfMyAgICAgICAgIDB4MmQ1YwogI2RlZmluZSBSMjAwX1BQX1RYT0ZGU0VUXzQJCQkweDJkNjAKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfNCAgICAgICAgIDB4MmQ2NAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl80ICAgICAgICAgMHgyZDY4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzQgICAgICAgICAweDJkNmMKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfNCAgICAgICAgIDB4MmQ3MAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV80ICAgICAgICAgMHgyZDc0CiAjZGVmaW5lIFIyMDBfUFBfVFhPRkZTRVRfNQkJCTB4MmQ3OAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV81ICAgICAgICAgMHgyZDdjCisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzUgICAgICAgICAweDJkODAKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfNSAgICAgICAgIDB4MmQ4NAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF81ICAgICAgICAgMHgyZDg4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzUgICAgICAgICAweDJkOGMKIAogI2RlZmluZSBSMjAwX1BQX1RGQUNUT1JfMAkJCTB4MmVlMAogI2RlZmluZSBSMjAwX1BQX1RGQUNUT1JfMQkJCTB4MmVlNApAQCAtMzE3NSw2ICszMjI1LDExIEBACiAjICAgICAgIGRlZmluZSBSMjAwX0ZPUkNFX0lOT1JERVJfUFJPQwkJKDE8PDMxKQogI2RlZmluZSBSMjAwX1BQX0NOVExfWAkJCQkweDJjYzQKICNkZWZpbmUgUjIwMF9QUF9UWE1VTFRJX0NUTF8wCQkJMHgyYzFjCisjZGVmaW5lIFIyMDBfUFBfVFhNVUxUSV9DVExfMQkJCTB4MmMzYworI2RlZmluZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzIJCQkweDJjNWMKKyNkZWZpbmUgUjIwMF9QUF9UWE1VTFRJX0NUTF8zCQkJMHgyYzdjCisjZGVmaW5lIFIyMDBfUFBfVFhNVUxUSV9DVExfNAkJCTB4MmM5YworI2RlZmluZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzUJCQkweDJjYmMKICNkZWZpbmUgUjIwMF9TRV9WVFhfU1RBVEVfQ05UTAkJCTB4MjE4MAogIyAgICAgICBkZWZpbmUgUjIwMF9VUERBVEVfVVNFUl9DT0xPUl8wX0VOQV9NQVNLICgxPDwxNikKIApAQCAtMzIwMCw2ICszMjU1LDI0IEBACiAjZGVmaW5lIFJBREVPTl9DUF9SQl9XUFRSICAgICAgICAgICAgICAgICAgIDB4MDcxNAogI2RlZmluZSBSQURFT05fQ1BfUkJfUlBUUl9XUiAgICAgICAgICAgICAgICAweDA3MWMKIAorI2RlZmluZSBSQURFT05fU0NSQVRDSF9VTVNLCQkgICAgMHgwNzcwCisjZGVmaW5lIFJBREVPTl9TQ1JBVENIX0FERFIJCSAgICAweDA3NzQKKworI2RlZmluZSBSNjAwX0NQX1JCX0JBU0UgICAgICAgICAgICAgICAgICAgICAweGMxMDAKKyNkZWZpbmUgUjYwMF9DUF9SQl9DTlRMICAgICAgICAgICAgICAgICAgICAgMHhjMTA0CisjICAgICAgIGRlZmluZSBSNjAwX1JCX0JVRlNaKHgpICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQkxLU1ooeCkgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9SQl9OT19VUERBVEUgICAgICAgICAgICAoMSA8PCAyNykKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfUlBUUl9XUl9FTkEgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUl9XUiAgICAgICAgICAgICAgICAgIDB4YzEwOAorI2RlZmluZSBSNjAwX0NQX1JCX1JQVFJfQUREUiAgICAgICAgICAgICAgICAweGMxMGMKKyNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSX0FERFJfSEkgICAgICAgICAgICAgMHhjMTEwCisjZGVmaW5lIFI2MDBfQ1BfUkJfV1BUUiAgICAgICAgICAgICAgICAgICAgIDB4YzExNAorI2RlZmluZSBSNjAwX0NQX1JCX1dQVFJfQUREUiAgICAgICAgICAgICAgICAweGMxMTgKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSX0FERFJfSEkgICAgICAgICAgICAgMHhjMTFjCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUiAgICAgICAgICAgICAgICAgICAgIDB4ODcwMAorI2RlZmluZSBSNjAwX0NQX1JCX1dQVFJfREVMQVkgICAgICAgICAgICAgICAweDg3MDQKKwogI2RlZmluZSBSQURFT05fQ1BfSUJfQkFTRSAgICAgICAgICAgICAgICAgICAweDA3MzgKICNkZWZpbmUgUkFERU9OX0NQX0lCX0JVRlNaICAgICAgICAgICAgICAgICAgMHgwNzNjCiAKQEAgLTM0MDcsNyArMzQ4MCw5IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fUkdCX0NPTlZFUlRfQllfUEFTUwkgICgxIDw8IDEwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX1VWUkFNX1JFQURfTUFSR0lOX1NISUZUCSAgMTYKICMgICAgICAgZGVmaW5lIFJBREVPTl9GSUZPUkFNX0ZGTUFDUk9fUkVBRF9NQVJHSU5fU0hJRlQJICAyMAotIwlkZWZpbmUgUkFERU9OX1RWT1VUX1NDQUxFX0VOCQkgICgxIDw8IDI2KQorIyAgICAgICBkZWZpbmUgUkFERU9OX1JHQl9BVFRFTl9TRUwoeCkgICAgICAgICAgICAoKHgpIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUkFERU9OX1RWT1VUX1NDQUxFX0VOICAgICAgICAgICAgICAoMSA8PCAyNikKKyMgICAgICAgZGVmaW5lIFJBREVPTl9SR0JfQVRURU5fVkFMKHgpICAgICAgICAgICAgKCh4KSA8PCAyOCkKICNkZWZpbmUgUkFERU9OX1RWX1NZTkNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODA4CiAjICAgICAgIGRlZmluZSBSQURFT05fU1lOQ19PRSAgICAgICAgICAgICAgICAgICAgICgxIDw8ICAwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX1NZTkNfT1VUICAgICAgICAgICAgICAgICAgICAoMSA8PCAgMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwppbmRleCA2MGQxNTkzLi43NDdiNGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCkBAIC01NiwxMCArNTYsMTIgQEAKIAkJc2V0X2JpdChpLCByZGV2LT5pYl9wb29sLmFsbG9jX2JtKTsKIAkJcmRldi0+aWJfcG9vbC5pYnNbaV0ubGVuZ3RoX2R3ID0gMDsKIAkJKmliID0gJnJkZXYtPmliX3Bvb2wuaWJzW2ldOworCQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKGxpc3RfZW1wdHkoJnJkZXYtPmliX3Bvb2wuc2NoZWR1bGVkX2licykpIHsKIAkJLyogd2UgZ28gZG8gbm90aGluZ3MgaGVyZSAqLworCQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogCQlEUk1fRVJST1IoImFsbCBJQiBhbGxvY2F0ZWQgbm9uZSBzY2hlZHVsZWQuXG4iKTsKIAkJciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtNjksMTAgKzcxLDEzIEBACiAJCQkgc3RydWN0IHJhZGVvbl9pYiwgbGlzdCk7CiAJaWYgKG5pYi0+ZmVuY2UgPT0gTlVMTCkgewogCQkvKiB3ZSBnbyBkbyBub3RoaW5ncyBoZXJlICovCisJCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJCURSTV9FUlJPUigiSUIgJWx1IHNjaGVkdWxlZCB3aXRob3V0IGEgZmVuY2UuXG4iLCBuaWItPmlkeCk7CiAJCXIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwogCXIgPSByYWRlb25fZmVuY2Vfd2FpdChuaWItPmZlbmNlLCBmYWxzZSk7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJyYWRlb246IElCKCVsdToweCUwMTZsWDoldSlcbiIsIG5pYi0+aWR4LApAQCAtODEsMTIgKzg2LDE3IEBACiAJCWdvdG8gb3V0OwogCX0KIAlyYWRlb25fZmVuY2VfdW5yZWYoJm5pYi0+ZmVuY2UpOworCiAJbmliLT5sZW5ndGhfZHcgPSAwOworCisJLyogc2NoZWR1bGVkIGxpc3QgaXMgYWNjZXNzZWQgaGVyZSAqLworCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogCWxpc3RfZGVsKCZuaWItPmxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZuaWItPmxpc3QpOworCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CisKIAkqaWIgPSBuaWI7CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAlpZiAocikgewogCQlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKIAl9IGVsc2UgewpAQCAtMTExLDQ3ICsxMjEsMzYgQEAKIAl9CiAJbGlzdF9kZWwoJnRtcC0+bGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnRtcC0+bGlzdCk7Ci0JaWYgKHRtcC0+ZmVuY2UpIHsKKwlpZiAodG1wLT5mZW5jZSkKIAkJcmFkZW9uX2ZlbmNlX3VucmVmKCZ0bXAtPmZlbmNlKTsKLQl9CisKIAl0bXAtPmxlbmd0aF9kdyA9IDA7CiAJY2xlYXJfYml0KHRtcC0+aWR4LCByZGV2LT5pYl9wb29sLmFsbG9jX2JtKTsKIAltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25faWJfYWxpZ24oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKQotewotCXdoaWxlICgoaWItPmxlbmd0aF9kdyAmIHJkZXYtPmNwLmFsaWduX21hc2spKSB7Ci0JCWliLT5wdHJbaWItPmxlbmd0aF9kdysrXSA9IFBBQ0tFVDIoMCk7Ci0JfQotfQotCiBpbnQgcmFkZW9uX2liX3NjaGVkdWxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYikKIHsKIAlpbnQgciA9IDA7CiAKLQltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQlyYWRlb25faWJfYWxpZ24ocmRldiwgaWIpOwogCWlmICghaWItPmxlbmd0aF9kdyB8fCAhcmRldi0+Y3AucmVhZHkpIHsKIAkJLyogVE9ETzogTm90aGluZ3MgaW4gdGhlIGliIHdlIHNob3VsZCByZXBvcnQuICovCi0JCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJCURSTV9FUlJPUigicmFkZW9uOiBjb3VsZG4ndCBzY2hlZHVsZSBJQiglbHUpLlxuIiwgaWItPmlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCS8qIDY0IGR3b3JkcyBzaG91bGQgYmUgZW5vdWdoIGZvciBmZW5jZSB0b28gKi8KIAlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCA2NCk7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJyYWRlb246IHNjaGVkdWxpbmcgSUIgZmFpbGxlZCAoJWQpLlxuIiwgcik7Ci0JCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJCXJldHVybiByOwogCX0KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9DUF9JQl9CQVNFLCAxKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmdwdV9hZGRyKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBpYi0+bGVuZ3RoX2R3KTsKKwlyYWRlb25fcmluZ19pYl9leGVjdXRlKHJkZXYsIGliKTsKIAlyYWRlb25fZmVuY2VfZW1pdChyZGV2LCBpYi0+ZmVuY2UpOwotCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7CisJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmaWItPmxpc3QsICZyZGV2LT5pYl9wb29sLnNjaGVkdWxlZF9pYnMpOwogCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CisJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyLDYgKzE2MSw4IEBACiAJaW50IGk7CiAJaW50IHIgPSAwOwogCisJaWYgKHJkZXYtPmliX3Bvb2wucm9iaikKKwkJcmV0dXJuIDA7CiAJLyogQWxsb2NhdGUgMU0gb2JqZWN0IGJ1ZmZlciAqLwogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5pYl9wb29sLnNjaGVkdWxlZF9pYnMpOwogCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCAgUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0LApAQCAtMjE1LDY5ICsyMTYsMTYgQEAKIAltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogfQogCi1pbnQgcmFkZW9uX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0Jc3RydWN0IHJhZGVvbl9pYiAqaWI7Ci0JdWludDMyX3Qgc2NyYXRjaDsKLQl1aW50MzJfdCB0bXAgPSAwOwotCXVuc2lnbmVkIGk7Ci0JaW50IHI7Ci0KLQlyID0gcmFkZW9uX3NjcmF0Y2hfZ2V0KHJkZXYsICZzY3JhdGNoKTsKLQlpZiAocikgewotCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIHRvIGdldCBzY3JhdGNoIHJlZyAoJWQpLlxuIiwgcik7Ci0JCXJldHVybiByOwotCX0KLQlXUkVHMzIoc2NyYXRjaCwgMHhDQUZFREVBRCk7Ci0JciA9IHJhZGVvbl9pYl9nZXQocmRldiwgJmliKTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0JaWItPnB0clswXSA9IFBBQ0tFVDAoc2NyYXRjaCwgMCk7Ci0JaWItPnB0clsxXSA9IDB4REVBREJFRUY7Ci0JaWItPnB0clsyXSA9IFBBQ0tFVDIoMCk7Ci0JaWItPnB0clszXSA9IFBBQ0tFVDIoMCk7Ci0JaWItPnB0cls0XSA9IFBBQ0tFVDIoMCk7Ci0JaWItPnB0cls1XSA9IFBBQ0tFVDIoMCk7Ci0JaWItPnB0cls2XSA9IFBBQ0tFVDIoMCk7Ci0JaWItPnB0cls3XSA9IFBBQ0tFVDIoMCk7Ci0JaWItPmxlbmd0aF9kdyA9IDg7Ci0JciA9IHJhZGVvbl9pYl9zY2hlZHVsZShyZGV2LCBpYik7Ci0JaWYgKHIpIHsKLQkJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKLQkJcmFkZW9uX2liX2ZyZWUocmRldiwgJmliKTsKLQkJcmV0dXJuIHI7Ci0JfQotCXIgPSByYWRlb25fZmVuY2Vfd2FpdChpYi0+ZmVuY2UsIGZhbHNlKTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7Ci0JCXRtcCA9IFJSRUczMihzY3JhdGNoKTsKLQkJaWYgKHRtcCA9PSAweERFQURCRUVGKSB7Ci0JCQlicmVhazsKLQkJfQotCQlEUk1fVURFTEFZKDEpOwotCX0KLQlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgewotCQlEUk1fSU5GTygiaWIgdGVzdCBzdWNjZWVkZWQgaW4gJXUgdXNlY3NcbiIsIGkpOwotCX0gZWxzZSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBpYiB0ZXN0IGZhaWxlZCAoc3JhY3RoKDB4JTA0WCk9MHglMDhYKVxuIiwKLQkJCSAgc2NyYXRjaCwgdG1wKTsKLQkJciA9IC1FSU5WQUw7Ci0JfQotCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgc2NyYXRjaCk7Ci0JcmFkZW9uX2liX2ZyZWUocmRldiwgJmliKTsKLQlyZXR1cm4gcjsKLX0KLQogCiAvKgogICogUmluZy4KICAqLwogdm9pZCByYWRlb25fcmluZ19mcmVlX3NpemUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcmRldi0+Y3AucnB0ciA9IFJSRUczMihSQURFT05fQ1BfUkJfUlBUUik7CisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCXJkZXYtPmNwLnJwdHIgPSBSUkVHMzIoUjYwMF9DUF9SQl9SUFRSKTsKKwllbHNlCisJCXJkZXYtPmNwLnJwdHIgPSBSUkVHMzIoUkFERU9OX0NQX1JCX1JQVFIpOwogCS8qIFRoaXMgd29ya3MgYmVjYXVzZSByaW5nX3NpemUgaXMgYSBwb3dlciBvZiAyICovCiAJcmRldi0+Y3AucmluZ19mcmVlX2R3ID0gKHJkZXYtPmNwLnJwdHIgKyAocmRldi0+Y3AucmluZ19zaXplIC8gNCkpOwogCXJkZXYtPmNwLnJpbmdfZnJlZV9kdyAtPSByZGV2LT5jcC53cHRyOwpAQCAtMzIwLDExICsyNjgsMTAgQEAKIAljb3VudF9kd19wYWQgPSAocmRldi0+Y3AuYWxpZ25fbWFzayArIDEpIC0KIAkJICAgICAgIChyZGV2LT5jcC53cHRyICYgcmRldi0+Y3AuYWxpZ25fbWFzayk7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50X2R3X3BhZDsgaSsrKSB7Ci0JCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDIoMCkpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAyIDw8IDMwKTsKIAl9CiAJRFJNX01FTU9SWUJBUlJJRVIoKTsKLQlXUkVHMzIoUkFERU9OX0NQX1JCX1dQVFIsIHJkZXYtPmNwLndwdHIpOwotCSh2b2lkKVJSRUczMihSQURFT05fQ1BfUkJfV1BUUik7CisJcmFkZW9uX2NwX2NvbW1pdChyZGV2KTsKIAltdXRleF91bmxvY2soJnJkZXYtPmNwLm11dGV4KTsKIH0KIApAQCAtMzM0LDQ2ICsyODEsNiBAQAogCW11dGV4X3VubG9jaygmcmRldi0+Y3AubXV0ZXgpOwogfQogCi1pbnQgcmFkZW9uX3JpbmdfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1aW50MzJfdCBzY3JhdGNoOwotCXVpbnQzMl90IHRtcCA9IDA7Ci0JdW5zaWduZWQgaTsKLQlpbnQgcjsKLQotCXIgPSByYWRlb25fc2NyYXRjaF9nZXQocmRldiwgJnNjcmF0Y2gpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBjcCBmYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnICglZCkuXG4iLCByKTsKLQkJcmV0dXJuIHI7Ci0JfQotCVdSRUczMihzY3JhdGNoLCAweENBRkVERUFEKTsKLQlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCAyKTsKLQlpZiAocikgewotCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7Ci0JCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgc2NyYXRjaCk7Ci0JCXJldHVybiByOwotCX0KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKHNjcmF0Y2gsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweERFQURCRUVGKTsKLQlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwotCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewotCQl0bXAgPSBSUkVHMzIoc2NyYXRjaCk7Ci0JCWlmICh0bXAgPT0gMHhERUFEQkVFRikgewotCQkJYnJlYWs7Ci0JCX0KLQkJRFJNX1VERUxBWSgxKTsKLQl9Ci0JaWYgKGkgPCByZGV2LT51c2VjX3RpbWVvdXQpIHsKLQkJRFJNX0lORk8oInJpbmcgdGVzdCBzdWNjZWVkZWQgaW4gJWQgdXNlY3NcbiIsIGkpOwotCX0gZWxzZSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiByaW5nIHRlc3QgZmFpbGVkIChzcmFjdGgoMHglMDRYKT0weCUwOFgpXG4iLAotCQkJICBzY3JhdGNoLCB0bXApOwotCQlyID0gLUVJTlZBTDsKLQl9Ci0JcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKLQlyZXR1cm4gcjsKLX0KLQogaW50IHJhZGVvbl9yaW5nX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSkKIHsKIAlpbnQgcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3NoYXJlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zaGFyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2E3NzM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3NoYXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IERhdmUgQWlybGllCi0gKiAgICAgICAgICBBbGV4IERldWNoZXIKLSAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKLSAqLwotI2lmbmRlZiBfX1JBREVPTl9TSEFSRV9IX18KLSNkZWZpbmUgX19SQURFT05fU0hBUkVfSF9fCi0KLXZvaWQgcjEwMF92cmFtX2luaXRfc2l6ZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi12b2lkIHJzNjkwX2xpbmVfYnVmZmVyX2FkanVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMSwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMik7Ci0KLXZvaWQgcnY1MTVfYmFuZHdpZHRoX2F2aXZvX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKaW5kZXggMjg4MmY0MC4uMzg1MzdkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCkBAIC0xNTQ2LDcgKzE1NDYsNyBAQAogCX0gd2hpbGUgKGkgPCBuYm94KTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBkcm1fYnVmICpidWYpCit2b2lkIHJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyLCBzdHJ1Y3QgZHJtX2J1ZiAqYnVmKQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gbWFzdGVyLT5kcml2ZXJfcHJpdjsKQEAgLTIyMTMsNyArMjIxMywxMCBAQAogCWlmIChzYXJlYV9wcml2LT5uYm94ID4gUkFERU9OX05SX1NBUkVBX0NMSVBSRUNUUykKIAkJc2FyZWFfcHJpdi0+bmJveCA9IFJBREVPTl9OUl9TQVJFQV9DTElQUkVDVFM7CiAKLQlyYWRlb25fY3BfZGlzcGF0Y2hfc3dhcChkZXYsIGZpbGVfcHJpdi0+bWFzdGVyKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2NwX2Rpc3BhdGNoX3N3YXAoZGV2LCBmaWxlX3ByaXYpOworCWVsc2UKKwkJcmFkZW9uX2NwX2Rpc3BhdGNoX3N3YXAoZGV2LCBmaWxlX3ByaXYtPm1hc3Rlcik7CiAJc2FyZWFfcHJpdi0+Y3R4X293bmVyID0gMDsKIAogCUNPTU1JVF9SSU5HKCk7CkBAIC0yNDEyLDcgKzI0MTUsMTAgQEAKIAlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCXJldCA9IHJhZGVvbl9jcF9kaXNwYXRjaF90ZXh0dXJlKGRldiwgZmlsZV9wcml2LCB0ZXgsICZpbWFnZSk7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0ID0gcjYwMF9jcF9kaXNwYXRjaF90ZXh0dXJlKGRldiwgZmlsZV9wcml2LCB0ZXgsICZpbWFnZSk7CisJZWxzZQorCQlyZXQgPSByYWRlb25fY3BfZGlzcGF0Y2hfdGV4dHVyZShkZXYsIGZpbGVfcHJpdiwgdGV4LCAmaW1hZ2UpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0OTUsOCArMjUwMSw5IEBACiAJCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpcmVjdChkZXYsIGJ1ZiwgaW5kaXJlY3QtPnN0YXJ0LCBpbmRpcmVjdC0+ZW5kKTsKIAl9CiAKLQlpZiAoaW5kaXJlY3QtPmRpc2NhcmQpCisJaWYgKGluZGlyZWN0LT5kaXNjYXJkKSB7CiAJCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZpbGVfcHJpdi0+bWFzdGVyLCBidWYpOworCX0KIAogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CkBAIC0zMDI3LDcgKzMwMzQsMTAgQEAKIAkJdmFsdWUgPSBHRVRfU0NSQVRDSChkZXZfcHJpdiwgMik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0lSUV9OUjoKLQkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJdmFsdWUgPSAwOworCQllbHNlCisJCQl2YWx1ZSA9IGRybV9kZXZfdG9faXJxKGRldik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0dBUlRfQkFTRToKIAkJdmFsdWUgPSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydDsKQEAgLTMyMjcsNyArMzIzNyw4IEBACiAJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0lSUV9XQUlULCByYWRlb25faXJxX3dhaXQsIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9SQURFT05fU0VUUEFSQU0sIHJhZGVvbl9jcF9zZXRwYXJhbSwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9TVVJGX0FMTE9DLCByYWRlb25fc3VyZmFjZV9hbGxvYywgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9TVVJGX0ZSRUUsIHJhZGVvbl9zdXJmYWNlX2ZyZWUsIERSTV9BVVRIKQorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9TVVJGX0ZSRUUsIHJhZGVvbl9zdXJmYWNlX2ZyZWUsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fQ1MsIHI2MDBfY3NfbGVnYWN5X2lvY3RsLCBEUk1fQVVUSCkKIH07CiAKIGludCByYWRlb25fbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUocmFkZW9uX2lvY3Rscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCmluZGV4IDE1YzM1MzEuLmFjZDg4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCkBAIC0zNSwxMSArMzUsMTQgQEAKICNpbmNsdWRlIDx0dG0vdHRtX21vZHVsZS5oPgogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8ZHJtL3JhZGVvbl9kcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKIAogI2RlZmluZSBEUk1fRklMRV9QQUdFX09GRlNFVCAoMHgxMDAwMDAwMDBVTEwgPj4gUEFHRV9TSElGVCkKIAorc3RhdGljIGludCByYWRlb25fdHRtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmFkZW9uX2dldF9yZGV2KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2KQogewogCXN0cnVjdCByYWRlb25fbW1hbiAqbW1hbjsKQEAgLTc3LDkgKzgwLDI1IEBACiAJZ2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZyYWRlb25fdHRtX21lbV9nbG9iYWxfcmVsZWFzZTsKIAlyID0gdHRtX2dsb2JhbF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKIAlpZiAociAhPSAwKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHJlZmVyZW5jaW5nIGEgZ2xvYmFsIFRUTSBtZW1vcnkgb2JqZWN0LlxuIik7CisJCURSTV9FUlJPUigiRmFpbGVkIHNldHRpbmcgdXAgVFRNIG1lbW9yeSBhY2NvdW50aW5nICIKKwkJCSAgInN1YnN5c3RlbS5cbiIpOwogCQlyZXR1cm4gcjsKIAl9CisKKwlyZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYubWVtX2dsb2IgPQorCQlyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmLm9iamVjdDsKKwlnbG9iYWxfcmVmID0gJnJkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5yZWY7CisJZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBUVE1fR0xPQkFMX1RUTV9CTzsKKwlnbG9iYWxfcmVmLT5zaXplID0gc2l6ZW9mKHN0cnVjdCB0dG1fYm9fZ2xvYmFsKTsKKwlnbG9iYWxfcmVmLT5pbml0ID0gJnR0bV9ib19nbG9iYWxfaW5pdDsKKwlnbG9iYWxfcmVmLT5yZWxlYXNlID0gJnR0bV9ib19nbG9iYWxfcmVsZWFzZTsKKwlyID0gdHRtX2dsb2JhbF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKKwlpZiAociAhPSAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHNldHRpbmcgdXAgVFRNIEJPIHN1YnN5c3RlbS5cbiIpOworCQl0dG1fZ2xvYmFsX2l0ZW1fdW5yZWYoJnJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWYpOworCQlyZXR1cm4gcjsKKwl9CisKIAlyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJlbmNlZCA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CkBAIC04Nyw2ICsxMDYsNyBAQAogc3RhdGljIHZvaWQgcmFkZW9uX3R0bV9nbG9iYWxfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpZiAocmRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZmVyZW5jZWQpIHsKKwkJdHRtX2dsb2JhbF9pdGVtX3VucmVmKCZyZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmKTsKIAkJdHRtX2dsb2JhbF9pdGVtX3VucmVmKCZyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmKTsKIAkJcmRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZmVyZW5jZWQgPSBmYWxzZTsKIAl9CkBAIC0yODYsOSArMzA2LDExIEBACiAJciA9IHR0bV9ib19tb3ZlX3R0bShibywgdHJ1ZSwgbm9fd2FpdCwgbmV3X21lbSk7CiBvdXRfY2xlYW51cDoKIAlpZiAodG1wX21lbS5tbV9ub2RlKSB7Ci0JCXNwaW5fbG9jaygmcmRldi0+bW1hbi5iZGV2LmxydV9sb2NrKTsKKwkJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSByZGV2LT5tbWFuLmJkZXYuZ2xvYjsKKworCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJZHJtX21tX3B1dF9ibG9jayh0bXBfbWVtLm1tX25vZGUpOwotCQlzcGluX3VubG9jaygmcmRldi0+bW1hbi5iZGV2LmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJcmV0dXJuIHI7CiAJfQogCXJldHVybiByOwpAQCAtMzIzLDkgKzM0NSwxMSBAQAogCX0KIG91dF9jbGVhbnVwOgogCWlmICh0bXBfbWVtLm1tX25vZGUpIHsKLQkJc3Bpbl9sb2NrKCZyZGV2LT5tbWFuLmJkZXYubHJ1X2xvY2spOworCQlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IHJkZXYtPm1tYW4uYmRldi5nbG9iOworCisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlkcm1fbW1fcHV0X2Jsb2NrKHRtcF9tZW0ubW1fbm9kZSk7Ci0JCXNwaW5fdW5sb2NrKCZyZGV2LT5tbWFuLmJkZXYubHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIHI7CkBAIC0zNTIsOSArMzc2LDggQEAKIAkJcmFkZW9uX21vdmVfbnVsbChibywgbmV3X21lbSk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIXJkZXYtPmNwLnJlYWR5KSB7CisJaWYgKCFyZGV2LT5jcC5yZWFkeSB8fCByZGV2LT5hc2ljLT5jb3B5ID09IE5VTEwpIHsKIAkJLyogdXNlIG1lbWNweSAqLwotCQlEUk1fRVJST1IoIkNQIGlzIG5vdCByZWFkeSB1c2UgbWVtY3B5LlxuIik7CiAJCWdvdG8gbWVtY3B5OwogCX0KIApAQCAtNDQ2LDcgKzQ2OSw3IEBACiAJfQogCS8qIE5vIG90aGVycyB1c2VyIG9mIGFkZHJlc3Mgc3BhY2Ugc28gc2V0IGl0IHRvIDAgKi8KIAlyID0gdHRtX2JvX2RldmljZV9pbml0KCZyZGV2LT5tbWFuLmJkZXYsCi0JCQkgICAgICAgcmRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZi5vYmplY3QsCisJCQkgICAgICAgcmRldi0+bW1hbi5ib19nbG9iYWxfcmVmLnJlZi5vYmplY3QsCiAJCQkgICAgICAgJnJhZGVvbl9ib19kcml2ZXIsIERSTV9GSUxFX1BBR0VfT0ZGU0VULAogCQkJICAgICAgIHJkZXYtPm5lZWRfZG1hMzIpOwogCWlmIChyKSB7CkBAIC00NzEsNyArNDk0LDcgQEAKIAkJcmV0dXJuIHI7CiAJfQogCURSTV9JTkZPKCJyYWRlb246ICV1TSBvZiBWUkFNIG1lbW9yeSByZWFkeVxuIiwKLQkJIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplIC8gKDEwMjQgKiAxMDI0KSk7CisJCSAodW5zaWduZWQpcmRldi0+bWMucmVhbF92cmFtX3NpemUgLyAoMTAyNCAqIDEwMjQpKTsKIAlyID0gdHRtX2JvX2luaXRfbW0oJnJkZXYtPm1tYW4uYmRldiwgVFRNX1BMX1RULCAwLAogCQkJICAgKChyZGV2LT5tYy5ndHRfc2l6ZSkgPj4gUEFHRV9TSElGVCkpOwogCWlmIChyKSB7CkBAIC00NzksMTAgKzUwMiwxNiBAQAogCQlyZXR1cm4gcjsKIAl9CiAJRFJNX0lORk8oInJhZGVvbjogJXVNIG9mIEdUVCBtZW1vcnkgcmVhZHkuXG4iLAotCQkgcmRldi0+bWMuZ3R0X3NpemUgLyAoMTAyNCAqIDEwMjQpKTsKKwkJICh1bnNpZ25lZCkocmRldi0+bWMuZ3R0X3NpemUgLyAoMTAyNCAqIDEwMjQpKSk7CiAJaWYgKHVubGlrZWx5KHJkZXYtPm1tYW4uYmRldi5kZXZfbWFwcGluZyA9PSBOVUxMKSkgewogCQlyZGV2LT5tbWFuLmJkZXYuZGV2X21hcHBpbmcgPSByZGV2LT5kZGV2LT5kZXZfbWFwcGluZzsKIAl9CisKKwlyID0gcmFkZW9uX3R0bV9kZWJ1Z2ZzX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdCBkZWJ1Z2ZzXG4iKTsKKwkJcmV0dXJuIHI7CisJfQogCXJldHVybiAwOwogfQogCkBAIC02NTcsMyArNjg2LDUwIEBACiAJZ3R0LT5ib3VuZCA9IGZhbHNlOwogCXJldHVybiAmZ3R0LT5iYWNrZW5kOwogfQorCisjZGVmaW5lIFJBREVPTl9ERUJVR0ZTX01FTV9UWVBFUyAyCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCByYWRlb25fbWVtX3R5cGVzX2xpc3RbUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTXTsKK3N0YXRpYyBjaGFyIHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTXVszMl07CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKK3N0YXRpYyBpbnQgcmFkZW9uX21tX2R1bXBfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX21tICptbSA9IChzdHJ1Y3QgZHJtX21tICopbm9kZS0+aW5mb19lbnQtPmRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSByZGV2LT5tbWFuLmJkZXYuZ2xvYjsKKworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCXJldCA9IGRybV9tbV9kdW1wX3RhYmxlKG0sIG1tKTsKKwlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludCByYWRlb25fdHRtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1bnNpZ25lZCBpOworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJZm9yIChpID0gMDsgaSA8IFJBREVPTl9ERUJVR0ZTX01FTV9UWVBFUzsgaSsrKSB7CisJCWlmIChpID09IDApCisJCQlzcHJpbnRmKHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbaV0sICJyYWRlb25fdnJhbV9tbSIpOworCQllbHNlCisJCQlzcHJpbnRmKHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbaV0sICJyYWRlb25fZ3R0X21tIik7CisJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5uYW1lID0gcmFkZW9uX21lbV90eXBlc19uYW1lc1tpXTsKKwkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLnNob3cgPSAmcmFkZW9uX21tX2R1bXBfdGFibGU7CisJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kcml2ZXJfZmVhdHVyZXMgPSAwOworCQlpZiAoaSA9PSAwKQorCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSAmcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVlJBTV0ubWFuYWdlcjsKKwkJZWxzZQorCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSAmcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVFRdLm1hbmFnZXI7CisKKwl9CisJcmV0dXJuIHJhZGVvbl9kZWJ1Z2ZzX2FkZF9maWxlcyhyZGV2LCByYWRlb25fbWVtX3R5cGVzX2xpc3QsIFJBREVPTl9ERUJVR0ZTX01FTV9UWVBFUyk7CisKKyNlbmRpZgorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMTAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMTAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZWUwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IxMDAKQEAgLTAsMCArMSwxMDUgQEAKK3IxMDAgMHgzMjk0CisweDE0MzQgU1JDX1lfWAorMHgxNDM4IERTVF9ZX1gKKzB4MTQzQyBEU1RfSEVJR0hUX1dJRFRICisweDE0NkMgRFBfR1VJX01BU1RFUl9DTlRMCisweDE0NzQgQlJVU0hfWV9YCisweDE0NzggRFBfQlJVU0hfQktHRF9DTFIKKzB4MTQ3QyBEUF9CUlVTSF9GUkdEX0NMUgorMHgxNDgwIEJSVVNIX0RBVEEwCisweDE0ODQgQlJVU0hfREFUQTEKKzB4MTU5OCBEU1RfV0lEVEhfSEVJR0hUCisweDE1QzAgQ0xSX0NNUF9DTlRMCisweDE1QzQgQ0xSX0NNUF9DTFJfU1JDCisweDE1QzggQ0xSX0NNUF9DTFJfRFNUCisweDE1Q0MgQ0xSX0NNUF9NU0sKKzB4MTVEOCBEUF9TUkNfRlJHRF9DTFIKKzB4MTVEQyBEUF9TUkNfQktHRF9DTFIKKzB4MTYwMCBEU1RfTElORV9TVEFSVAorMHgxNjA0IERTVF9MSU5FX0VORAorMHgxNjA4IERTVF9MSU5FX1BBVENPVU5UCisweDE2QzAgRFBfQ05UTAorMHgxNkNDIERQX1dSSVRFX01TSworMHgxNkQwIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUgorMHgxNkU4IERFRkFVTFRfU0NfQk9UVE9NX1JJR0hUCisweDE2RUMgU0NfVE9QX0xFRlQKKzB4MTZGMCBTQ19CT1RUT01fUklHSFQKKzB4MTZGNCBTUkNfU0NfQk9UVE9NX1JJR0hUCisweDE3MTQgRFNUQ0FDSEVfQ1RMU1RBVAorMHgxNzIwIFdBSVRfVU5USUwKKzB4MTcyQyBSQkJNX0dVSUNOVEwKKzB4MTgxMCBGT0dfM0RfVEFCTEVfU1RBUlQKKzB4MTgxNCBGT0dfM0RfVEFCTEVfRU5ECisweDFhMTQgRk9HX1RBQkxFX0lOREVYCisweDFhMTggRk9HX1RBQkxFX0RBVEEKKzB4MWMxNCBQUF9NSVNDCisweDFjMTggUFBfRk9HX0NPTE9SCisweDFjMWMgUkVfU09MSURfQ09MT1IKKzB4MWMyMCBSQjNEX0JMRU5EQ05UTAorMHgxYzRjIFNFX0NOVEwKKzB4MWM1MCBTRV9DT09SRF9GTVQKKzB4MWM2MCBQUF9UWENCTEVORF8wCisweDFjNjQgUFBfVFhBQkxFTkRfMAorMHgxYzY4IFBQX1RGQUNUT1JfMAorMHgxYzc4IFBQX1RYQ0JMRU5EXzEKKzB4MWM3YyBQUF9UWEFCTEVORF8xCisweDFjODAgUFBfVEZBQ1RPUl8xCisweDFjOTAgUFBfVFhDQkxFTkRfMgorMHgxYzk0IFBQX1RYQUJMRU5EXzIKKzB4MWM5OCBQUF9URkFDVE9SXzIKKzB4MWNjOCBSRV9TVElQUExFX0FERFIKKzB4MWNjYyBSRV9TVElQUExFX0RBVEEKKzB4MWNkMCBSRV9MSU5FX1BBVFRFUk4KKzB4MWNkNCBSRV9MSU5FX1NUQVRFCisweDFkNDAgUFBfQk9SREVSX0NPTE9SMAorMHgxZDQ0IFBQX0JPUkRFUl9DT0xPUjEKKzB4MWQ0OCBQUF9CT1JERVJfQ09MT1IyCisweDFkN2MgUkIzRF9TVEVOQ0lMUkVGTUFTSworMHgxZDgwIFJCM0RfUk9QQ05UTAorMHgxZDg0IFJCM0RfUExBTkVNQVNLCisweDFkOTggVkFQX1ZQT1JUX1hTQ0FMRQorMHgxZDlDIFZBUF9WUE9SVF9YT0ZGU0VUCisweDFkYTAgVkFQX1ZQT1JUX1lTQ0FMRQorMHgxZGE0IFZBUF9WUE9SVF9ZT0ZGU0VUCisweDFkYTggVkFQX1ZQT1JUX1pTQ0FMRQorMHgxZGFjIFZBUF9WUE9SVF9aT0ZGU0VUCisweDFkYjAgU0VfWkJJQVNfRkFDVE9SCisweDFkYjQgU0VfWkJJQVNfQ09OU1RBTlQKKzB4MWRiOCBTRV9MSU5FX1dJRFRICisweDIxNDAgU0VfQ05UTF9TVEFUVVMKKzB4MjIwMCBTRV9UQ0xfVkVDVE9SX0lORFhfUkVHCisweDIyMDQgU0VfVENMX1ZFQ1RPUl9EQVRBX1JFRworMHgyMjA4IFNFX1RDTF9TQ0FMQVJfSU5EWF9SRUcKKzB4MjIwYyBTRV9UQ0xfU0NBTEFSX0RBVEFfUkVHCisweDIyMTAgU0VfVENMX01BVEVSSUFMX0VNSVNTSVZFX1JFRAorMHgyMjE0IFNFX1RDTF9NQVRFUklBTF9FTUlTU0lWRV9HUkVFTgorMHgyMjE4IFNFX1RDTF9NQVRFUklBTF9FTUlTU0lWRV9CTFVFCisweDIyMWMgU0VfVENMX01BVEVSSUFMX0VNSVNTSVZFX0FMUEhBCisweDIyMjAgU0VfVENMX01BVEVSSUFMX0FNQklFTlRfUkVECisweDIyMjQgU0VfVENMX01BVEVSSUFMX0FNQklFTlRfR1JFRU4KKzB4MjIyOCBTRV9UQ0xfTUFURVJJQUxfQU1CSUVOVF9CTFVFCisweDIyMmMgU0VfVENMX01BVEVSSUFMX0FNQklFTlRfQUxQSEEKKzB4MjIzMCBTRV9UQ0xfTUFURVJJQUxfRElGRlVTRV9SRUQKKzB4MjIzNCBTRV9UQ0xfTUFURVJJQUxfRElGRlVTRV9HUkVFTgorMHgyMjM4IFNFX1RDTF9NQVRFUklBTF9ESUZGVVNFX0JMVUUKKzB4MjIzYyBTRV9UQ0xfTUFURVJJQUxfRElGRlVTRV9BTFBIQQorMHgyMjQwIFNFX1RDTF9NQVRFUklBTF9TUEVDVUxBUl9SRUQKKzB4MjI0NCBTRV9UQ0xfTUFURVJJQUxfU1BFQ1VMQVJfR1JFRU4KKzB4MjI0OCBTRV9UQ0xfTUFURVJJQUxfU1BFQ1VMQVJfQkxVRQorMHgyMjRjIFNFX1RDTF9NQVRFUklBTF9TUEVDVUxBUl9BTFBIQQorMHgyMjUwIFNFX1RDTF9TSElOSU5FU1MKKzB4MjI1NCBTRV9UQ0xfT1VUUFVUX1ZUWF9GTVQKKzB4MjI1OCBTRV9UQ0xfT1VUUFVUX1ZUWF9TRUwKKzB4MjI1YyBTRV9UQ0xfTUFUUklYX1NFTEVDVF8wCisweDIyNjAgU0VfVENMX01BVFJJWF9TRUxFQ1RfMQorMHgyMjY0IFNFX1RDTF9VQ1BfVkVSVF9CTEVORF9DTlRMCisweDIyNjggU0VfVENMX1RFWFRVUkVfUFJPQ19DVEwKKzB4MjI2YyBTRV9UQ0xfTElHSFRfTU9ERUxfQ1RMCisweDIyNzAgU0VfVENMX1BFUl9MSUdIVF9DVExfMAorMHgyMjc0IFNFX1RDTF9QRVJfTElHSFRfQ1RMXzEKKzB4MjI3OCBTRV9UQ0xfUEVSX0xJR0hUX0NUTF8yCisweDIyN2MgU0VfVENMX1BFUl9MSUdIVF9DVExfMworMHgyMjg0IFNFX1RDTF9TVEFURV9GTFVTSAorMHgyNmMwIFJFX1RPUF9MRUZUCisweDI2YzQgUkVfTUlTQworMHgzMjkwIFJCM0RfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMjAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMjAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMjFjODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IyMDAKQEAgLTAsMCArMSwxODQgQEAKK3IyMDAgMHgzMjk0CisweDE0MzQgU1JDX1lfWAorMHgxNDM4IERTVF9ZX1gKKzB4MTQzQyBEU1RfSEVJR0hUX1dJRFRICisweDE0NkMgRFBfR1VJX01BU1RFUl9DTlRMCisweDE0NzQgQlJVU0hfWV9YCisweDE0NzggRFBfQlJVU0hfQktHRF9DTFIKKzB4MTQ3QyBEUF9CUlVTSF9GUkdEX0NMUgorMHgxNDgwIEJSVVNIX0RBVEEwCisweDE0ODQgQlJVU0hfREFUQTEKKzB4MTU5OCBEU1RfV0lEVEhfSEVJR0hUCisweDE1QzAgQ0xSX0NNUF9DTlRMCisweDE1QzQgQ0xSX0NNUF9DTFJfU1JDCisweDE1QzggQ0xSX0NNUF9DTFJfRFNUCisweDE1Q0MgQ0xSX0NNUF9NU0sKKzB4MTVEOCBEUF9TUkNfRlJHRF9DTFIKKzB4MTVEQyBEUF9TUkNfQktHRF9DTFIKKzB4MTYwMCBEU1RfTElORV9TVEFSVAorMHgxNjA0IERTVF9MSU5FX0VORAorMHgxNjA4IERTVF9MSU5FX1BBVENPVU5UCisweDE2QzAgRFBfQ05UTAorMHgxNkNDIERQX1dSSVRFX01TSworMHgxNkQwIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUgorMHgxNkU4IERFRkFVTFRfU0NfQk9UVE9NX1JJR0hUCisweDE2RUMgU0NfVE9QX0xFRlQKKzB4MTZGMCBTQ19CT1RUT01fUklHSFQKKzB4MTZGNCBTUkNfU0NfQk9UVE9NX1JJR0hUCisweDE3MTQgRFNUQ0FDSEVfQ1RMU1RBVAorMHgxNzIwIFdBSVRfVU5USUwKKzB4MTcyQyBSQkJNX0dVSUNOVEwKKzB4MWMxNCBQUF9NSVNDCisweDFjMTggUFBfRk9HX0NPTE9SCisweDFjMWMgUkVfU09MSURfQ09MT1IKKzB4MWMyMCBSQjNEX0JMRU5EQ05UTAorMHgxYzRjIFNFX0NOVEwKKzB4MWM1MCBSRV9DTlRMCisweDFjYzggUkVfU1RJUFBMRV9BRERSCisweDFjY2MgUkVfU1RJUFBMRV9EQVRBCisweDFjZDAgUkVfTElORV9QQVRURVJOCisweDFjZDQgUkVfTElORV9TVEFURQorMHgxY2Q4IFJFX1NDSVNTT1JfVExfMAorMHgxY2RjIFJFX1NDSVNTT1JfQlJfMAorMHgxY2UwIFJFX1NDSVNTT1JfVExfMQorMHgxY2U0IFJFX1NDSVNTT1JfQlJfMQorMHgxY2U4IFJFX1NDSVNTT1JfVExfMgorMHgxY2VjIFJFX1NDSVNTT1JfQlJfMgorMHgxZDYwIFJCM0RfREVQVEhYWV9PRkZTRVQKKzB4MWQ3YyBSQjNEX1NURU5DSUxSRUZNQVNLCisweDFkODAgUkIzRF9ST1BDTlRMCisweDFkODQgUkIzRF9QTEFORU1BU0sKKzB4MWQ5OCBWQVBfVlBPUlRfWFNDQUxFCisweDFkOWMgVkFQX1ZQT1JUX1hPRkZTRVQKKzB4MWRhMCBWQVBfVlBPUlRfWVNDQUxFCisweDFkYTQgVkFQX1ZQT1JUX1lPRkZTRVQKKzB4MWRhOCBWQVBfVlBPUlRfWlNDQUxFCisweDFkYWMgVkFQX1ZQT1JUX1pPRkZTRVQKKzB4MWRiMCBTRV9aQklBU19GQUNUT1IKKzB4MWRiNCBTRV9aQklBU19DT05TVEFOVAorMHgxZGI4IFNFX0xJTkVfV0lEVEgKKzB4MjA4MCBTRV9WQVBfQ05UTAorMHgyMDkwIFNFX1RDTF9PVVRQVVRfVlRYX0ZNVF8wCisweDIwOTQgU0VfVENMX09VVFBVVF9WVFhfRk1UXzEKKzB4MjBiMCBTRV9WVEVfQ05UTAorMHgyMTQwIFNFX0NOVExfU1RBVFVTCisweDIxODAgU0VfVlRYX1NUQVRFX0NOVEwKKzB4MjIwMCBTRV9UQ0xfVkVDVE9SX0lORFhfUkVHCisweDIyMDQgU0VfVENMX1ZFQ1RPUl9EQVRBX1JFRworMHgyMjA4IFNFX1RDTF9TQ0FMQVJfSU5EWF9SRUcKKzB4MjIwYyBTRV9UQ0xfU0NBTEFSX0RBVEFfUkVHCisweDIyMzAgU0VfVENMX01BVFJJWF9TRUxfMAorMHgyMjM0IFNFX1RDTF9NQVRSSVhfU0VMXzEKKzB4MjIzOCBTRV9UQ0xfTUFUUklYX1NFTF8yCisweDIyM2MgU0VfVENMX01BVFJJWF9TRUxfMworMHgyMjQwIFNFX1RDTF9NQVRSSVhfU0VMXzQKKzB4MjI1MCBTRV9UQ0xfT1VUUFVUX1ZUWF9DT01QX1NFTAorMHgyMjU0IFNFX1RDTF9JTlBVVF9WVFhfVkVDVE9SX0FERFJfMAorMHgyMjU4IFNFX1RDTF9JTlBVVF9WVFhfVkVDVE9SX0FERFJfMQorMHgyMjVjIFNFX1RDTF9JTlBVVF9WVFhfVkVDVE9SX0FERFJfMgorMHgyMjYwIFNFX1RDTF9JTlBVVF9WVFhfVkVDVE9SX0FERFJfMworMHgyMjY4IFNFX1RDTF9MSUdIVF9NT0RFTF9DVExfMAorMHgyMjZjIFNFX1RDTF9MSUdIVF9NT0RFTF9DVExfMQorMHgyMjcwIFNFX1RDTF9QRVJfTElHSFRfQ1RMXzAKKzB4MjI3NCBTRV9UQ0xfUEVSX0xJR0hUX0NUTF8xCisweDIyNzggU0VfVENMX1BFUl9MSUdIVF9DVExfMgorMHgyMjdjIFNFX1RDTF9QRVJfTElHSFRfQ1RMXzMKKzB4MjI4NCBWQVBfUFZTX1NUQVRFX0ZMVVNIX1JFRworMHgyMmE4IFNFX1RDTF9URVhfUFJPQ19DVExfMgorMHgyMmFjIFNFX1RDTF9URVhfUFJPQ19DVExfMworMHgyMmIwIFNFX1RDTF9URVhfUFJPQ19DVExfMAorMHgyMmI0IFNFX1RDTF9URVhfUFJPQ19DVExfMQorMHgyMmI4IFNFX1RDTF9URVhfQ1lMX1dSQVBfQ1RMCisweDIyYzAgU0VfVENMX1VDUF9WRVJUX0JMRU5EX0NOVEwKKzB4MjJjNCBTRV9UQ0xfUE9JTlRfU1BSSVRFX0NOVEwKKzB4MjY0OCBSRV9QT0lOVFNJWkUKKzB4MjZjMCBSRV9UT1BfTEVGVAorMHgyNmM0IFJFX01JU0MKKzB4MjZmMCBSRV9BVVhfU0NJU1NPUl9DTlRMCisweDJjMTQgUFBfQk9SREVSX0NPTE9SXzAKKzB4MmMzNCBQUF9CT1JERVJfQ09MT1JfMQorMHgyYzU0IFBQX0JPUkRFUl9DT0xPUl8yCisweDJjNzQgUFBfQk9SREVSX0NPTE9SXzMKKzB4MmM5NCBQUF9CT1JERVJfQ09MT1JfNAorMHgyY2I0IFBQX0JPUkRFUl9DT0xPUl81CisweDJjYzQgUFBfQ05UTF9YCisweDJjZjggUFBfVFJJX1BFUkYKKzB4MmNmYyBQUF9QRVJGX0NOVEwKKzB4MmQ5YyBQUF9UQU1fREVCVUczCisweDJlZTAgUFBfVEZBQ1RPUl8wCisweDJlZTQgUFBfVEZBQ1RPUl8xCisweDJlZTggUFBfVEZBQ1RPUl8yCisweDJlZWMgUFBfVEZBQ1RPUl8zCisweDJlZjAgUFBfVEZBQ1RPUl80CisweDJlZjQgUFBfVEZBQ1RPUl81CisweDJlZjggUFBfVEZBQ1RPUl82CisweDJlZmMgUFBfVEZBQ1RPUl83CisweDJmMDAgUFBfVFhDQkxFTkRfMAorMHgyZjA0IFBQX1RYQ0JMRU5EMl8wCisweDJmMDggUFBfVFhBQkxFTkRfMAorMHgyZjBjIFBQX1RYQUJMRU5EMl8wCisweDJmMTAgUFBfVFhDQkxFTkRfMQorMHgyZjE0IFBQX1RYQ0JMRU5EMl8xCisweDJmMTggUFBfVFhBQkxFTkRfMQorMHgyZjFjIFBQX1RYQUJMRU5EMl8xCisweDJmMjAgUFBfVFhDQkxFTkRfMgorMHgyZjI0IFBQX1RYQ0JMRU5EMl8yCisweDJmMjggUFBfVFhBQkxFTkRfMgorMHgyZjJjIFBQX1RYQUJMRU5EMl8yCisweDJmMzAgUFBfVFhDQkxFTkRfMworMHgyZjM0IFBQX1RYQ0JMRU5EMl8zCisweDJmMzggUFBfVFhBQkxFTkRfMworMHgyZjNjIFBQX1RYQUJMRU5EMl8zCisweDJmNDAgUFBfVFhDQkxFTkRfNAorMHgyZjQ0IFBQX1RYQ0JMRU5EMl80CisweDJmNDggUFBfVFhBQkxFTkRfNAorMHgyZjRjIFBQX1RYQUJMRU5EMl80CisweDJmNTAgUFBfVFhDQkxFTkRfNQorMHgyZjU0IFBQX1RYQ0JMRU5EMl81CisweDJmNTggUFBfVFhBQkxFTkRfNQorMHgyZjVjIFBQX1RYQUJMRU5EMl81CisweDJmNjAgUFBfVFhDQkxFTkRfNgorMHgyZjY0IFBQX1RYQ0JMRU5EMl82CisweDJmNjggUFBfVFhBQkxFTkRfNgorMHgyZjZjIFBQX1RYQUJMRU5EMl82CisweDJmNzAgUFBfVFhDQkxFTkRfNworMHgyZjc0IFBQX1RYQ0JMRU5EMl83CisweDJmNzggUFBfVFhBQkxFTkRfNworMHgyZjdjIFBQX1RYQUJMRU5EMl83CisweDJmODAgUFBfVFhDQkxFTkRfOAorMHgyZjg0IFBQX1RYQ0JMRU5EMl84CisweDJmODggUFBfVFhBQkxFTkRfOAorMHgyZjhjIFBQX1RYQUJMRU5EMl84CisweDJmOTAgUFBfVFhDQkxFTkRfOQorMHgyZjk0IFBQX1RYQ0JMRU5EMl85CisweDJmOTggUFBfVFhBQkxFTkRfOQorMHgyZjljIFBQX1RYQUJMRU5EMl85CisweDJmYTAgUFBfVFhDQkxFTkRfMTAKKzB4MmZhNCBQUF9UWENCTEVORDJfMTAKKzB4MmZhOCBQUF9UWEFCTEVORF8xMAorMHgyZmFjIFBQX1RYQUJMRU5EMl8xMAorMHgyZmIwIFBQX1RYQ0JMRU5EXzExCisweDJmYjQgUFBfVFhDQkxFTkQyXzExCisweDJmYjggUFBfVFhBQkxFTkRfMTEKKzB4MmZiYyBQUF9UWEFCTEVORDJfMTEKKzB4MmZjMCBQUF9UWENCTEVORF8xMgorMHgyZmM0IFBQX1RYQ0JMRU5EMl8xMgorMHgyZmM4IFBQX1RYQUJMRU5EXzEyCisweDJmY2MgUFBfVFhBQkxFTkQyXzEyCisweDJmZDAgUFBfVFhDQkxFTkRfMTMKKzB4MmZkNCBQUF9UWENCTEVORDJfMTMKKzB4MmZkOCBQUF9UWEFCTEVORF8xMworMHgyZmRjIFBQX1RYQUJMRU5EMl8xMworMHgyZmUwIFBQX1RYQ0JMRU5EXzE0CisweDJmZTQgUFBfVFhDQkxFTkQyXzE0CisweDJmZTggUFBfVFhBQkxFTkRfMTQKKzB4MmZlYyBQUF9UWEFCTEVORDJfMTQKKzB4MmZmMCBQUF9UWENCTEVORF8xNQorMHgyZmY0IFBQX1RYQ0JMRU5EMl8xNQorMHgyZmY4IFBQX1RYQUJMRU5EXzE1CisweDJmZmMgUFBfVFhBQkxFTkQyXzE1CisweDMyMTggUkIzRF9CTEVOQ09MT1IKKzB4MzIxYyBSQjNEX0FCTEVORENOVEwKKzB4MzIyMCBSQjNEX0NCTEVORENOVEwKKzB4MzI5MCBSQjNEX1pQQVNTX0RBVEEKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzQ2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAKQEAgLTAsMCArMSw3MjkgQEAKK3IzMDAgMHg0ZjYwCisweDE0MzQgU1JDX1lfWAorMHgxNDM4IERTVF9ZX1gKKzB4MTQzQyBEU1RfSEVJR0hUX1dJRFRICisweDE0NkMgRFBfR1VJX01BU1RFUl9DTlRMCisweDE0NzQgQlJVU0hfWV9YCisweDE0NzggRFBfQlJVU0hfQktHRF9DTFIKKzB4MTQ3QyBEUF9CUlVTSF9GUkdEX0NMUgorMHgxNDgwIEJSVVNIX0RBVEEwCisweDE0ODQgQlJVU0hfREFUQTEKKzB4MTU5OCBEU1RfV0lEVEhfSEVJR0hUCisweDE1QzAgQ0xSX0NNUF9DTlRMCisweDE1QzQgQ0xSX0NNUF9DTFJfU1JDCisweDE1QzggQ0xSX0NNUF9DTFJfRFNUCisweDE1Q0MgQ0xSX0NNUF9NU0sKKzB4MTVEOCBEUF9TUkNfRlJHRF9DTFIKKzB4MTVEQyBEUF9TUkNfQktHRF9DTFIKKzB4MTYwMCBEU1RfTElORV9TVEFSVAorMHgxNjA0IERTVF9MSU5FX0VORAorMHgxNjA4IERTVF9MSU5FX1BBVENPVU5UCisweDE2QzAgRFBfQ05UTAorMHgxNkNDIERQX1dSSVRFX01TSworMHgxNkQwIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUgorMHgxNkU4IERFRkFVTFRfU0NfQk9UVE9NX1JJR0hUCisweDE2RUMgU0NfVE9QX0xFRlQKKzB4MTZGMCBTQ19CT1RUT01fUklHSFQKKzB4MTZGNCBTUkNfU0NfQk9UVE9NX1JJR0hUCisweDE3MTQgRFNUQ0FDSEVfQ1RMU1RBVAorMHgxNzIwIFdBSVRfVU5USUwKKzB4MTcyQyBSQkJNX0dVSUNOVEwKKzB4MUQ5OCBWQVBfVlBPUlRfWFNDQUxFCisweDFEOUMgVkFQX1ZQT1JUX1hPRkZTRVQKKzB4MURBMCBWQVBfVlBPUlRfWVNDQUxFCisweDFEQTQgVkFQX1ZQT1JUX1lPRkZTRVQKKzB4MURBOCBWQVBfVlBPUlRfWlNDQUxFCisweDFEQUMgVkFQX1ZQT1JUX1pPRkZTRVQKKzB4MjA4MCBWQVBfQ05UTAorMHgyMDkwIFZBUF9PVVRfVlRYX0ZNVF8wCisweDIwOTQgVkFQX09VVF9WVFhfRk1UXzEKKzB4MjBCMCBWQVBfVlRFX0NOVEwKKzB4MjEzOCBWQVBfVkZfTUlOX1ZUWF9JTkRYCisweDIxNDAgVkFQX0NOVExfU1RBVFVTCisweDIxNTAgVkFQX1BST0dfU1RSRUFNX0NOVExfMAorMHgyMTU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzEKKzB4MjE1OCBWQVBfUFJPR19TVFJFQU1fQ05UTF8yCisweDIxNUMgVkFQX1BST0dfU1RSRUFNX0NOVExfMworMHgyMTYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzQKKzB4MjE2NCBWQVBfUFJPR19TVFJFQU1fQ05UTF81CisweDIxNjggVkFQX1BST0dfU1RSRUFNX0NOVExfNgorMHgyMTZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzcKKzB4MjE4MCBWQVBfVlRYX1NUQVRFX0NOVEwKKzB4MjE4NCBWQVBfVlNNX1ZUWF9BU1NNCisweDIxODggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzAKKzB4MjE4QyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMQorMHgyMTkwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18yCisweDIxOTQgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzMKKzB4MjE5OCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNAorMHgyMTlDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR181CisweDIxQTAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzYKKzB4MjFBNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNworMHgyMUE4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR184CisweDIxQUMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzkKKzB4MjFCMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTAKKzB4MjFCNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTEKKzB4MjFCOCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTIKKzB4MjFCQyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTMKKzB4MjFDMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTQKKzB4MjFDNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTUKKzB4MjFEQyBWQVBfUFNDX1NHTl9OT1JNX0NOVEwKKzB4MjFFMCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMAorMHgyMUU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8xCisweDIxRTggVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzIKKzB4MjFFQyBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMworMHgyMUYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF80CisweDIxRjQgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzUKKzB4MjFGOCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNgorMHgyMUZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF83CisweDIyMDAgVkFQX1BWU19WRUNUT1JfSU5EWF9SRUcKKzB4MjIwNCBWQVBfUFZTX1ZFQ1RPUl9EQVRBX1JFRworMHgyMjA4IFZBUF9QVlNfVkVDVE9SX0RBVEFfUkVHXzEyOAorMHgyMjFDIFZBUF9DTElQX0NOVEwKKzB4MjIyMCBWQVBfR0JfVkVSVF9DTElQX0FESgorMHgyMjI0IFZBUF9HQl9WRVJUX0RJU0NfQURKCisweDIyMjggVkFQX0dCX0hPUlpfQ0xJUF9BREoKKzB4MjIyQyBWQVBfR0JfSE9SWl9ESVNDX0FESgorMHgyMjMwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzAKKzB4MjIzNCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xCisweDIyMzggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMgorMHgyMjNDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzMKKzB4MjI0MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU180CisweDIyNDQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNQorMHgyMjQ4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzYKKzB4MjI0QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU183CisweDIyNTAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfOAorMHgyMjU0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzkKKzB4MjI1OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMAorMHgyMjVDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzExCisweDIyNjAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTIKKzB4MjI2NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMworMHgyMjY4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzE0CisweDIyNkMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTUKKzB4MjI4NCBWQVBfUFZTX1NUQVRFX0ZMVVNIX1JFRworMHgyMjg4IFZBUF9QVlNfVlRYX1RJTUVPVVRfUkVHCisweDIyOTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8wCisweDIyOTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xCisweDIyOTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8yCisweDIyOUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8zCisweDIyQTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF80CisweDIyQTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF81CisweDIyQTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF82CisweDIyQUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF83CisweDIyQjAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF84CisweDIyQjQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF85CisweDIyQjggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMAorMHgyMkJDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTEKKzB4MjJDMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEyCisweDIyQzQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMworMHgyMkM4IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTQKKzB4MjJDQyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzE1CisweDIyRDAgVkFQX1BWU19DT0RFX0NOVExfMAorMHgyMkQ0IFZBUF9QVlNfQ09OU1RfQ05UTAorMHgyMkQ4IFZBUF9QVlNfQ09ERV9DTlRMXzEKKzB4MjJEQyBWQVBfUFZTX0ZMT1dfQ05UTF9PUEMKKzB4MzQyQyBSQjJEX0RTVENBQ0hFX0NUTFNUQVQKKzB4NDAwMCBHQl9WQVBfUkFTVEVSX1ZUWF9GTVRfMAorMHg0MDA0IEdCX1ZBUF9SQVNURVJfVlRYX0ZNVF8xCisweDQwMDggR0JfRU5BQkxFCisweDQwMUMgR0JfU0VMRUNUCisweDQwMjAgR0JfQUFfQ09ORklHCisweDQwMjQgR0JfRklGT19TSVpFCisweDQxMDAgVFhfSU5WQUxUQUdTCisweDQyMDAgR0FfUE9JTlRfUzAKKzB4NDIwNCBHQV9QT0lOVF9UMAorMHg0MjA4IEdBX1BPSU5UX1MxCisweDQyMEMgR0FfUE9JTlRfVDEKKzB4NDIxNCBHQV9UUklBTkdMRV9TVElQUExFCisweDQyMUMgR0FfUE9JTlRfU0laRQorMHg0MjMwIEdBX1BPSU5UX01JTk1BWAorMHg0MjM0IEdBX0xJTkVfQ05UTAorMHg0MjM4IEdBX0xJTkVfU1RJUFBMRV9DT05GSUcKKzB4NDI2MCBHQV9MSU5FX1NUSVBQTEVfVkFMVUUKKzB4NDI2NCBHQV9MSU5FX1MwCisweDQyNjggR0FfTElORV9TMQorMHg0Mjc4IEdBX0NPTE9SX0NPTlRST0wKKzB4NDI3QyBHQV9TT0xJRF9SRworMHg0MjgwIEdBX1NPTElEX0JBCisweDQyODggR0FfUE9MWV9NT0RFCisweDQyOEMgR0FfUk9VTkRfTU9ERQorMHg0MjkwIEdBX09GRlNFVAorMHg0Mjk0IEdBX0ZPR19TQ0FMRQorMHg0Mjk4IEdBX0ZPR19PRkZTRVQKKzB4NDJBMCBTVV9URVhfV1JBUAorMHg0MkE0IFNVX1BPTFlfT0ZGU0VUX0ZST05UX1NDQUxFCisweDQyQTggU1VfUE9MWV9PRkZTRVRfRlJPTlRfT0ZGU0VUCisweDQyQUMgU1VfUE9MWV9PRkZTRVRfQkFDS19TQ0FMRQorMHg0MkIwIFNVX1BPTFlfT0ZGU0VUX0JBQ0tfT0ZGU0VUCisweDQyQjQgU1VfUE9MWV9PRkZTRVRfRU5BQkxFCisweDQyQjggU1VfQ1VMTF9NT0RFCisweDQyQzAgU1VfREVQVEhfU0NBTEUKKzB4NDJDNCBTVV9ERVBUSF9PRkZTRVQKKzB4NDJDOCBTVV9SRUdfREVTVAorMHg0MzAwIFJTX0NPVU5UCisweDQzMDQgUlNfSU5TVF9DT1VOVAorMHg0MzEwIFJTX0lQXzAKKzB4NDMxNCBSU19JUF8xCisweDQzMTggUlNfSVBfMgorMHg0MzFDIFJTX0lQXzMKKzB4NDMyMCBSU19JUF80CisweDQzMjQgUlNfSVBfNQorMHg0MzI4IFJTX0lQXzYKKzB4NDMyQyBSU19JUF83CisweDQzMzAgUlNfSU5TVF8wCisweDQzMzQgUlNfSU5TVF8xCisweDQzMzggUlNfSU5TVF8yCisweDQzM0MgUlNfSU5TVF8zCisweDQzNDAgUlNfSU5TVF80CisweDQzNDQgUlNfSU5TVF81CisweDQzNDggUlNfSU5TVF82CisweDQzNEMgUlNfSU5TVF83CisweDQzNTAgUlNfSU5TVF84CisweDQzNTQgUlNfSU5TVF85CisweDQzNTggUlNfSU5TVF8xMAorMHg0MzVDIFJTX0lOU1RfMTEKKzB4NDM2MCBSU19JTlNUXzEyCisweDQzNjQgUlNfSU5TVF8xMworMHg0MzY4IFJTX0lOU1RfMTQKKzB4NDM2QyBSU19JTlNUXzE1CisweDQzQTQgU0NfSFlQRVJaX0VOCisweDQzQTggU0NfRURHRVJVTEUKKzB4NDNCMCBTQ19DTElQXzBfQQorMHg0M0I0IFNDX0NMSVBfMF9CCisweDQzQjggU0NfQ0xJUF8xX0EKKzB4NDNCQyBTQ19DTElQXzFfQgorMHg0M0MwIFNDX0NMSVBfMl9BCisweDQzQzQgU0NfQ0xJUF8yX0IKKzB4NDNDOCBTQ19DTElQXzNfQQorMHg0M0NDIFNDX0NMSVBfM19CCisweDQzRDAgU0NfQ0xJUF9SVUxFCisweDQzRTAgU0NfU0NJU1NPUjAKKzB4NDNFOCBTQ19TQ1JFRU5ET09SCisweDQ0NDAgVFhfRklMVEVSMV8wCisweDQ0NDQgVFhfRklMVEVSMV8xCisweDQ0NDggVFhfRklMVEVSMV8yCisweDQ0NEMgVFhfRklMVEVSMV8zCisweDQ0NTAgVFhfRklMVEVSMV80CisweDQ0NTQgVFhfRklMVEVSMV81CisweDQ0NTggVFhfRklMVEVSMV82CisweDQ0NUMgVFhfRklMVEVSMV83CisweDQ0NjAgVFhfRklMVEVSMV84CisweDQ0NjQgVFhfRklMVEVSMV85CisweDQ0NjggVFhfRklMVEVSMV8xMAorMHg0NDZDIFRYX0ZJTFRFUjFfMTEKKzB4NDQ3MCBUWF9GSUxURVIxXzEyCisweDQ0NzQgVFhfRklMVEVSMV8xMworMHg0NDc4IFRYX0ZJTFRFUjFfMTQKKzB4NDQ3QyBUWF9GSUxURVIxXzE1CisweDQ1ODAgVFhfQ0hST01BX0tFWV8wCisweDQ1ODQgVFhfQ0hST01BX0tFWV8xCisweDQ1ODggVFhfQ0hST01BX0tFWV8yCisweDQ1OEMgVFhfQ0hST01BX0tFWV8zCisweDQ1OTAgVFhfQ0hST01BX0tFWV80CisweDQ1OTQgVFhfQ0hST01BX0tFWV81CisweDQ1OTggVFhfQ0hST01BX0tFWV82CisweDQ1OUMgVFhfQ0hST01BX0tFWV83CisweDQ1QTAgVFhfQ0hST01BX0tFWV84CisweDQ1QTQgVFhfQ0hST01BX0tFWV85CisweDQ1QTggVFhfQ0hST01BX0tFWV8xMAorMHg0NUFDIFRYX0NIUk9NQV9LRVlfMTEKKzB4NDVCMCBUWF9DSFJPTUFfS0VZXzEyCisweDQ1QjQgVFhfQ0hST01BX0tFWV8xMworMHg0NUI4IFRYX0NIUk9NQV9LRVlfMTQKKzB4NDVCQyBUWF9DSFJPTUFfS0VZXzE1CisweDQ1QzAgVFhfQk9SREVSX0NPTE9SXzAKKzB4NDVDNCBUWF9CT1JERVJfQ09MT1JfMQorMHg0NUM4IFRYX0JPUkRFUl9DT0xPUl8yCisweDQ1Q0MgVFhfQk9SREVSX0NPTE9SXzMKKzB4NDVEMCBUWF9CT1JERVJfQ09MT1JfNAorMHg0NUQ0IFRYX0JPUkRFUl9DT0xPUl81CisweDQ1RDggVFhfQk9SREVSX0NPTE9SXzYKKzB4NDVEQyBUWF9CT1JERVJfQ09MT1JfNworMHg0NUUwIFRYX0JPUkRFUl9DT0xPUl84CisweDQ1RTQgVFhfQk9SREVSX0NPTE9SXzkKKzB4NDVFOCBUWF9CT1JERVJfQ09MT1JfMTAKKzB4NDVFQyBUWF9CT1JERVJfQ09MT1JfMTEKKzB4NDVGMCBUWF9CT1JERVJfQ09MT1JfMTIKKzB4NDVGNCBUWF9CT1JERVJfQ09MT1JfMTMKKzB4NDVGOCBUWF9CT1JERVJfQ09MT1JfMTQKKzB4NDVGQyBUWF9CT1JERVJfQ09MT1JfMTUKKzB4NDYwMCBVU19DT05GSUcKKzB4NDYwNCBVU19QSVhTSVpFCisweDQ2MDggVVNfQ09ERV9PRkZTRVQKKzB4NDYwQyBVU19SRVNFVAorMHg0NjEwIFVTX0NPREVfQUREUl8wCisweDQ2MTQgVVNfQ09ERV9BRERSXzEKKzB4NDYxOCBVU19DT0RFX0FERFJfMgorMHg0NjFDIFVTX0NPREVfQUREUl8zCisweDQ2MjAgVVNfVEVYX0lOU1RfMAorMHg0NjI0IFVTX1RFWF9JTlNUXzEKKzB4NDYyOCBVU19URVhfSU5TVF8yCisweDQ2MkMgVVNfVEVYX0lOU1RfMworMHg0NjMwIFVTX1RFWF9JTlNUXzQKKzB4NDYzNCBVU19URVhfSU5TVF81CisweDQ2MzggVVNfVEVYX0lOU1RfNgorMHg0NjNDIFVTX1RFWF9JTlNUXzcKKzB4NDY0MCBVU19URVhfSU5TVF84CisweDQ2NDQgVVNfVEVYX0lOU1RfOQorMHg0NjQ4IFVTX1RFWF9JTlNUXzEwCisweDQ2NEMgVVNfVEVYX0lOU1RfMTEKKzB4NDY1MCBVU19URVhfSU5TVF8xMgorMHg0NjU0IFVTX1RFWF9JTlNUXzEzCisweDQ2NTggVVNfVEVYX0lOU1RfMTQKKzB4NDY1QyBVU19URVhfSU5TVF8xNQorMHg0NjYwIFVTX1RFWF9JTlNUXzE2CisweDQ2NjQgVVNfVEVYX0lOU1RfMTcKKzB4NDY2OCBVU19URVhfSU5TVF8xOAorMHg0NjZDIFVTX1RFWF9JTlNUXzE5CisweDQ2NzAgVVNfVEVYX0lOU1RfMjAKKzB4NDY3NCBVU19URVhfSU5TVF8yMQorMHg0Njc4IFVTX1RFWF9JTlNUXzIyCisweDQ2N0MgVVNfVEVYX0lOU1RfMjMKKzB4NDY4MCBVU19URVhfSU5TVF8yNAorMHg0Njg0IFVTX1RFWF9JTlNUXzI1CisweDQ2ODggVVNfVEVYX0lOU1RfMjYKKzB4NDY4QyBVU19URVhfSU5TVF8yNworMHg0NjkwIFVTX1RFWF9JTlNUXzI4CisweDQ2OTQgVVNfVEVYX0lOU1RfMjkKKzB4NDY5OCBVU19URVhfSU5TVF8zMAorMHg0NjlDIFVTX1RFWF9JTlNUXzMxCisweDQ2QTQgVVNfT1VUX0ZNVF8wCisweDQ2QTggVVNfT1VUX0ZNVF8xCisweDQ2QUMgVVNfT1VUX0ZNVF8yCisweDQ2QjAgVVNfT1VUX0ZNVF8zCisweDQ2QjQgVVNfV19GTVQKKzB4NDZDMCBVU19BTFVfUkdCX0FERFJfMAorMHg0NkM0IFVTX0FMVV9SR0JfQUREUl8xCisweDQ2QzggVVNfQUxVX1JHQl9BRERSXzIKKzB4NDZDQyBVU19BTFVfUkdCX0FERFJfMworMHg0NkQwIFVTX0FMVV9SR0JfQUREUl80CisweDQ2RDQgVVNfQUxVX1JHQl9BRERSXzUKKzB4NDZEOCBVU19BTFVfUkdCX0FERFJfNgorMHg0NkRDIFVTX0FMVV9SR0JfQUREUl83CisweDQ2RTAgVVNfQUxVX1JHQl9BRERSXzgKKzB4NDZFNCBVU19BTFVfUkdCX0FERFJfOQorMHg0NkU4IFVTX0FMVV9SR0JfQUREUl8xMAorMHg0NkVDIFVTX0FMVV9SR0JfQUREUl8xMQorMHg0NkYwIFVTX0FMVV9SR0JfQUREUl8xMgorMHg0NkY0IFVTX0FMVV9SR0JfQUREUl8xMworMHg0NkY4IFVTX0FMVV9SR0JfQUREUl8xNAorMHg0NkZDIFVTX0FMVV9SR0JfQUREUl8xNQorMHg0NzAwIFVTX0FMVV9SR0JfQUREUl8xNgorMHg0NzA0IFVTX0FMVV9SR0JfQUREUl8xNworMHg0NzA4IFVTX0FMVV9SR0JfQUREUl8xOAorMHg0NzBDIFVTX0FMVV9SR0JfQUREUl8xOQorMHg0NzEwIFVTX0FMVV9SR0JfQUREUl8yMAorMHg0NzE0IFVTX0FMVV9SR0JfQUREUl8yMQorMHg0NzE4IFVTX0FMVV9SR0JfQUREUl8yMgorMHg0NzFDIFVTX0FMVV9SR0JfQUREUl8yMworMHg0NzIwIFVTX0FMVV9SR0JfQUREUl8yNAorMHg0NzI0IFVTX0FMVV9SR0JfQUREUl8yNQorMHg0NzI4IFVTX0FMVV9SR0JfQUREUl8yNgorMHg0NzJDIFVTX0FMVV9SR0JfQUREUl8yNworMHg0NzMwIFVTX0FMVV9SR0JfQUREUl8yOAorMHg0NzM0IFVTX0FMVV9SR0JfQUREUl8yOQorMHg0NzM4IFVTX0FMVV9SR0JfQUREUl8zMAorMHg0NzNDIFVTX0FMVV9SR0JfQUREUl8zMQorMHg0NzQwIFVTX0FMVV9SR0JfQUREUl8zMgorMHg0NzQ0IFVTX0FMVV9SR0JfQUREUl8zMworMHg0NzQ4IFVTX0FMVV9SR0JfQUREUl8zNAorMHg0NzRDIFVTX0FMVV9SR0JfQUREUl8zNQorMHg0NzUwIFVTX0FMVV9SR0JfQUREUl8zNgorMHg0NzU0IFVTX0FMVV9SR0JfQUREUl8zNworMHg0NzU4IFVTX0FMVV9SR0JfQUREUl8zOAorMHg0NzVDIFVTX0FMVV9SR0JfQUREUl8zOQorMHg0NzYwIFVTX0FMVV9SR0JfQUREUl80MAorMHg0NzY0IFVTX0FMVV9SR0JfQUREUl80MQorMHg0NzY4IFVTX0FMVV9SR0JfQUREUl80MgorMHg0NzZDIFVTX0FMVV9SR0JfQUREUl80MworMHg0NzcwIFVTX0FMVV9SR0JfQUREUl80NAorMHg0Nzc0IFVTX0FMVV9SR0JfQUREUl80NQorMHg0Nzc4IFVTX0FMVV9SR0JfQUREUl80NgorMHg0NzdDIFVTX0FMVV9SR0JfQUREUl80NworMHg0NzgwIFVTX0FMVV9SR0JfQUREUl80OAorMHg0Nzg0IFVTX0FMVV9SR0JfQUREUl80OQorMHg0Nzg4IFVTX0FMVV9SR0JfQUREUl81MAorMHg0NzhDIFVTX0FMVV9SR0JfQUREUl81MQorMHg0NzkwIFVTX0FMVV9SR0JfQUREUl81MgorMHg0Nzk0IFVTX0FMVV9SR0JfQUREUl81MworMHg0Nzk4IFVTX0FMVV9SR0JfQUREUl81NAorMHg0NzlDIFVTX0FMVV9SR0JfQUREUl81NQorMHg0N0EwIFVTX0FMVV9SR0JfQUREUl81NgorMHg0N0E0IFVTX0FMVV9SR0JfQUREUl81NworMHg0N0E4IFVTX0FMVV9SR0JfQUREUl81OAorMHg0N0FDIFVTX0FMVV9SR0JfQUREUl81OQorMHg0N0IwIFVTX0FMVV9SR0JfQUREUl82MAorMHg0N0I0IFVTX0FMVV9SR0JfQUREUl82MQorMHg0N0I4IFVTX0FMVV9SR0JfQUREUl82MgorMHg0N0JDIFVTX0FMVV9SR0JfQUREUl82MworMHg0N0MwIFVTX0FMVV9BTFBIQV9BRERSXzAKKzB4NDdDNCBVU19BTFVfQUxQSEFfQUREUl8xCisweDQ3QzggVVNfQUxVX0FMUEhBX0FERFJfMgorMHg0N0NDIFVTX0FMVV9BTFBIQV9BRERSXzMKKzB4NDdEMCBVU19BTFVfQUxQSEFfQUREUl80CisweDQ3RDQgVVNfQUxVX0FMUEhBX0FERFJfNQorMHg0N0Q4IFVTX0FMVV9BTFBIQV9BRERSXzYKKzB4NDdEQyBVU19BTFVfQUxQSEFfQUREUl83CisweDQ3RTAgVVNfQUxVX0FMUEhBX0FERFJfOAorMHg0N0U0IFVTX0FMVV9BTFBIQV9BRERSXzkKKzB4NDdFOCBVU19BTFVfQUxQSEFfQUREUl8xMAorMHg0N0VDIFVTX0FMVV9BTFBIQV9BRERSXzExCisweDQ3RjAgVVNfQUxVX0FMUEhBX0FERFJfMTIKKzB4NDdGNCBVU19BTFVfQUxQSEFfQUREUl8xMworMHg0N0Y4IFVTX0FMVV9BTFBIQV9BRERSXzE0CisweDQ3RkMgVVNfQUxVX0FMUEhBX0FERFJfMTUKKzB4NDgwMCBVU19BTFVfQUxQSEFfQUREUl8xNgorMHg0ODA0IFVTX0FMVV9BTFBIQV9BRERSXzE3CisweDQ4MDggVVNfQUxVX0FMUEhBX0FERFJfMTgKKzB4NDgwQyBVU19BTFVfQUxQSEFfQUREUl8xOQorMHg0ODEwIFVTX0FMVV9BTFBIQV9BRERSXzIwCisweDQ4MTQgVVNfQUxVX0FMUEhBX0FERFJfMjEKKzB4NDgxOCBVU19BTFVfQUxQSEFfQUREUl8yMgorMHg0ODFDIFVTX0FMVV9BTFBIQV9BRERSXzIzCisweDQ4MjAgVVNfQUxVX0FMUEhBX0FERFJfMjQKKzB4NDgyNCBVU19BTFVfQUxQSEFfQUREUl8yNQorMHg0ODI4IFVTX0FMVV9BTFBIQV9BRERSXzI2CisweDQ4MkMgVVNfQUxVX0FMUEhBX0FERFJfMjcKKzB4NDgzMCBVU19BTFVfQUxQSEFfQUREUl8yOAorMHg0ODM0IFVTX0FMVV9BTFBIQV9BRERSXzI5CisweDQ4MzggVVNfQUxVX0FMUEhBX0FERFJfMzAKKzB4NDgzQyBVU19BTFVfQUxQSEFfQUREUl8zMQorMHg0ODQwIFVTX0FMVV9BTFBIQV9BRERSXzMyCisweDQ4NDQgVVNfQUxVX0FMUEhBX0FERFJfMzMKKzB4NDg0OCBVU19BTFVfQUxQSEFfQUREUl8zNAorMHg0ODRDIFVTX0FMVV9BTFBIQV9BRERSXzM1CisweDQ4NTAgVVNfQUxVX0FMUEhBX0FERFJfMzYKKzB4NDg1NCBVU19BTFVfQUxQSEFfQUREUl8zNworMHg0ODU4IFVTX0FMVV9BTFBIQV9BRERSXzM4CisweDQ4NUMgVVNfQUxVX0FMUEhBX0FERFJfMzkKKzB4NDg2MCBVU19BTFVfQUxQSEFfQUREUl80MAorMHg0ODY0IFVTX0FMVV9BTFBIQV9BRERSXzQxCisweDQ4NjggVVNfQUxVX0FMUEhBX0FERFJfNDIKKzB4NDg2QyBVU19BTFVfQUxQSEFfQUREUl80MworMHg0ODcwIFVTX0FMVV9BTFBIQV9BRERSXzQ0CisweDQ4NzQgVVNfQUxVX0FMUEhBX0FERFJfNDUKKzB4NDg3OCBVU19BTFVfQUxQSEFfQUREUl80NgorMHg0ODdDIFVTX0FMVV9BTFBIQV9BRERSXzQ3CisweDQ4ODAgVVNfQUxVX0FMUEhBX0FERFJfNDgKKzB4NDg4NCBVU19BTFVfQUxQSEFfQUREUl80OQorMHg0ODg4IFVTX0FMVV9BTFBIQV9BRERSXzUwCisweDQ4OEMgVVNfQUxVX0FMUEhBX0FERFJfNTEKKzB4NDg5MCBVU19BTFVfQUxQSEFfQUREUl81MgorMHg0ODk0IFVTX0FMVV9BTFBIQV9BRERSXzUzCisweDQ4OTggVVNfQUxVX0FMUEhBX0FERFJfNTQKKzB4NDg5QyBVU19BTFVfQUxQSEFfQUREUl81NQorMHg0OEEwIFVTX0FMVV9BTFBIQV9BRERSXzU2CisweDQ4QTQgVVNfQUxVX0FMUEhBX0FERFJfNTcKKzB4NDhBOCBVU19BTFVfQUxQSEFfQUREUl81OAorMHg0OEFDIFVTX0FMVV9BTFBIQV9BRERSXzU5CisweDQ4QjAgVVNfQUxVX0FMUEhBX0FERFJfNjAKKzB4NDhCNCBVU19BTFVfQUxQSEFfQUREUl82MQorMHg0OEI4IFVTX0FMVV9BTFBIQV9BRERSXzYyCisweDQ4QkMgVVNfQUxVX0FMUEhBX0FERFJfNjMKKzB4NDhDMCBVU19BTFVfUkdCX0lOU1RfMAorMHg0OEM0IFVTX0FMVV9SR0JfSU5TVF8xCisweDQ4QzggVVNfQUxVX1JHQl9JTlNUXzIKKzB4NDhDQyBVU19BTFVfUkdCX0lOU1RfMworMHg0OEQwIFVTX0FMVV9SR0JfSU5TVF80CisweDQ4RDQgVVNfQUxVX1JHQl9JTlNUXzUKKzB4NDhEOCBVU19BTFVfUkdCX0lOU1RfNgorMHg0OERDIFVTX0FMVV9SR0JfSU5TVF83CisweDQ4RTAgVVNfQUxVX1JHQl9JTlNUXzgKKzB4NDhFNCBVU19BTFVfUkdCX0lOU1RfOQorMHg0OEU4IFVTX0FMVV9SR0JfSU5TVF8xMAorMHg0OEVDIFVTX0FMVV9SR0JfSU5TVF8xMQorMHg0OEYwIFVTX0FMVV9SR0JfSU5TVF8xMgorMHg0OEY0IFVTX0FMVV9SR0JfSU5TVF8xMworMHg0OEY4IFVTX0FMVV9SR0JfSU5TVF8xNAorMHg0OEZDIFVTX0FMVV9SR0JfSU5TVF8xNQorMHg0OTAwIFVTX0FMVV9SR0JfSU5TVF8xNgorMHg0OTA0IFVTX0FMVV9SR0JfSU5TVF8xNworMHg0OTA4IFVTX0FMVV9SR0JfSU5TVF8xOAorMHg0OTBDIFVTX0FMVV9SR0JfSU5TVF8xOQorMHg0OTEwIFVTX0FMVV9SR0JfSU5TVF8yMAorMHg0OTE0IFVTX0FMVV9SR0JfSU5TVF8yMQorMHg0OTE4IFVTX0FMVV9SR0JfSU5TVF8yMgorMHg0OTFDIFVTX0FMVV9SR0JfSU5TVF8yMworMHg0OTIwIFVTX0FMVV9SR0JfSU5TVF8yNAorMHg0OTI0IFVTX0FMVV9SR0JfSU5TVF8yNQorMHg0OTI4IFVTX0FMVV9SR0JfSU5TVF8yNgorMHg0OTJDIFVTX0FMVV9SR0JfSU5TVF8yNworMHg0OTMwIFVTX0FMVV9SR0JfSU5TVF8yOAorMHg0OTM0IFVTX0FMVV9SR0JfSU5TVF8yOQorMHg0OTM4IFVTX0FMVV9SR0JfSU5TVF8zMAorMHg0OTNDIFVTX0FMVV9SR0JfSU5TVF8zMQorMHg0OTQwIFVTX0FMVV9SR0JfSU5TVF8zMgorMHg0OTQ0IFVTX0FMVV9SR0JfSU5TVF8zMworMHg0OTQ4IFVTX0FMVV9SR0JfSU5TVF8zNAorMHg0OTRDIFVTX0FMVV9SR0JfSU5TVF8zNQorMHg0OTUwIFVTX0FMVV9SR0JfSU5TVF8zNgorMHg0OTU0IFVTX0FMVV9SR0JfSU5TVF8zNworMHg0OTU4IFVTX0FMVV9SR0JfSU5TVF8zOAorMHg0OTVDIFVTX0FMVV9SR0JfSU5TVF8zOQorMHg0OTYwIFVTX0FMVV9SR0JfSU5TVF80MAorMHg0OTY0IFVTX0FMVV9SR0JfSU5TVF80MQorMHg0OTY4IFVTX0FMVV9SR0JfSU5TVF80MgorMHg0OTZDIFVTX0FMVV9SR0JfSU5TVF80MworMHg0OTcwIFVTX0FMVV9SR0JfSU5TVF80NAorMHg0OTc0IFVTX0FMVV9SR0JfSU5TVF80NQorMHg0OTc4IFVTX0FMVV9SR0JfSU5TVF80NgorMHg0OTdDIFVTX0FMVV9SR0JfSU5TVF80NworMHg0OTgwIFVTX0FMVV9SR0JfSU5TVF80OAorMHg0OTg0IFVTX0FMVV9SR0JfSU5TVF80OQorMHg0OTg4IFVTX0FMVV9SR0JfSU5TVF81MAorMHg0OThDIFVTX0FMVV9SR0JfSU5TVF81MQorMHg0OTkwIFVTX0FMVV9SR0JfSU5TVF81MgorMHg0OTk0IFVTX0FMVV9SR0JfSU5TVF81MworMHg0OTk4IFVTX0FMVV9SR0JfSU5TVF81NAorMHg0OTlDIFVTX0FMVV9SR0JfSU5TVF81NQorMHg0OUEwIFVTX0FMVV9SR0JfSU5TVF81NgorMHg0OUE0IFVTX0FMVV9SR0JfSU5TVF81NworMHg0OUE4IFVTX0FMVV9SR0JfSU5TVF81OAorMHg0OUFDIFVTX0FMVV9SR0JfSU5TVF81OQorMHg0OUIwIFVTX0FMVV9SR0JfSU5TVF82MAorMHg0OUI0IFVTX0FMVV9SR0JfSU5TVF82MQorMHg0OUI4IFVTX0FMVV9SR0JfSU5TVF82MgorMHg0OUJDIFVTX0FMVV9SR0JfSU5TVF82MworMHg0OUMwIFVTX0FMVV9BTFBIQV9JTlNUXzAKKzB4NDlDNCBVU19BTFVfQUxQSEFfSU5TVF8xCisweDQ5QzggVVNfQUxVX0FMUEhBX0lOU1RfMgorMHg0OUNDIFVTX0FMVV9BTFBIQV9JTlNUXzMKKzB4NDlEMCBVU19BTFVfQUxQSEFfSU5TVF80CisweDQ5RDQgVVNfQUxVX0FMUEhBX0lOU1RfNQorMHg0OUQ4IFVTX0FMVV9BTFBIQV9JTlNUXzYKKzB4NDlEQyBVU19BTFVfQUxQSEFfSU5TVF83CisweDQ5RTAgVVNfQUxVX0FMUEhBX0lOU1RfOAorMHg0OUU0IFVTX0FMVV9BTFBIQV9JTlNUXzkKKzB4NDlFOCBVU19BTFVfQUxQSEFfSU5TVF8xMAorMHg0OUVDIFVTX0FMVV9BTFBIQV9JTlNUXzExCisweDQ5RjAgVVNfQUxVX0FMUEhBX0lOU1RfMTIKKzB4NDlGNCBVU19BTFVfQUxQSEFfSU5TVF8xMworMHg0OUY4IFVTX0FMVV9BTFBIQV9JTlNUXzE0CisweDQ5RkMgVVNfQUxVX0FMUEhBX0lOU1RfMTUKKzB4NEEwMCBVU19BTFVfQUxQSEFfSU5TVF8xNgorMHg0QTA0IFVTX0FMVV9BTFBIQV9JTlNUXzE3CisweDRBMDggVVNfQUxVX0FMUEhBX0lOU1RfMTgKKzB4NEEwQyBVU19BTFVfQUxQSEFfSU5TVF8xOQorMHg0QTEwIFVTX0FMVV9BTFBIQV9JTlNUXzIwCisweDRBMTQgVVNfQUxVX0FMUEhBX0lOU1RfMjEKKzB4NEExOCBVU19BTFVfQUxQSEFfSU5TVF8yMgorMHg0QTFDIFVTX0FMVV9BTFBIQV9JTlNUXzIzCisweDRBMjAgVVNfQUxVX0FMUEhBX0lOU1RfMjQKKzB4NEEyNCBVU19BTFVfQUxQSEFfSU5TVF8yNQorMHg0QTI4IFVTX0FMVV9BTFBIQV9JTlNUXzI2CisweDRBMkMgVVNfQUxVX0FMUEhBX0lOU1RfMjcKKzB4NEEzMCBVU19BTFVfQUxQSEFfSU5TVF8yOAorMHg0QTM0IFVTX0FMVV9BTFBIQV9JTlNUXzI5CisweDRBMzggVVNfQUxVX0FMUEhBX0lOU1RfMzAKKzB4NEEzQyBVU19BTFVfQUxQSEFfSU5TVF8zMQorMHg0QTQwIFVTX0FMVV9BTFBIQV9JTlNUXzMyCisweDRBNDQgVVNfQUxVX0FMUEhBX0lOU1RfMzMKKzB4NEE0OCBVU19BTFVfQUxQSEFfSU5TVF8zNAorMHg0QTRDIFVTX0FMVV9BTFBIQV9JTlNUXzM1CisweDRBNTAgVVNfQUxVX0FMUEhBX0lOU1RfMzYKKzB4NEE1NCBVU19BTFVfQUxQSEFfSU5TVF8zNworMHg0QTU4IFVTX0FMVV9BTFBIQV9JTlNUXzM4CisweDRBNUMgVVNfQUxVX0FMUEhBX0lOU1RfMzkKKzB4NEE2MCBVU19BTFVfQUxQSEFfSU5TVF80MAorMHg0QTY0IFVTX0FMVV9BTFBIQV9JTlNUXzQxCisweDRBNjggVVNfQUxVX0FMUEhBX0lOU1RfNDIKKzB4NEE2QyBVU19BTFVfQUxQSEFfSU5TVF80MworMHg0QTcwIFVTX0FMVV9BTFBIQV9JTlNUXzQ0CisweDRBNzQgVVNfQUxVX0FMUEhBX0lOU1RfNDUKKzB4NEE3OCBVU19BTFVfQUxQSEFfSU5TVF80NgorMHg0QTdDIFVTX0FMVV9BTFBIQV9JTlNUXzQ3CisweDRBODAgVVNfQUxVX0FMUEhBX0lOU1RfNDgKKzB4NEE4NCBVU19BTFVfQUxQSEFfSU5TVF80OQorMHg0QTg4IFVTX0FMVV9BTFBIQV9JTlNUXzUwCisweDRBOEMgVVNfQUxVX0FMUEhBX0lOU1RfNTEKKzB4NEE5MCBVU19BTFVfQUxQSEFfSU5TVF81MgorMHg0QTk0IFVTX0FMVV9BTFBIQV9JTlNUXzUzCisweDRBOTggVVNfQUxVX0FMUEhBX0lOU1RfNTQKKzB4NEE5QyBVU19BTFVfQUxQSEFfSU5TVF81NQorMHg0QUEwIFVTX0FMVV9BTFBIQV9JTlNUXzU2CisweDRBQTQgVVNfQUxVX0FMUEhBX0lOU1RfNTcKKzB4NEFBOCBVU19BTFVfQUxQSEFfSU5TVF81OAorMHg0QUFDIFVTX0FMVV9BTFBIQV9JTlNUXzU5CisweDRBQjAgVVNfQUxVX0FMUEhBX0lOU1RfNjAKKzB4NEFCNCBVU19BTFVfQUxQSEFfSU5TVF82MQorMHg0QUI4IFVTX0FMVV9BTFBIQV9JTlNUXzYyCisweDRBQkMgVVNfQUxVX0FMUEhBX0lOU1RfNjMKKzB4NEJDMCBGR19GT0dfQkxFTkQKKzB4NEJDNCBGR19GT0dfRkFDVE9SCisweDRCQzggRkdfRk9HX0NPTE9SX1IKKzB4NEJDQyBGR19GT0dfQ09MT1JfRworMHg0QkQwIEZHX0ZPR19DT0xPUl9CCisweDRCRDQgRkdfQUxQSEFfRlVOQworMHg0QkQ4IEZHX0RFUFRIX1NSQworMHg0QzAwIFVTX0FMVV9DT05TVF9SXzAKKzB4NEMwNCBVU19BTFVfQ09OU1RfR18wCisweDRDMDggVVNfQUxVX0NPTlNUX0JfMAorMHg0QzBDIFVTX0FMVV9DT05TVF9BXzAKKzB4NEMxMCBVU19BTFVfQ09OU1RfUl8xCisweDRDMTQgVVNfQUxVX0NPTlNUX0dfMQorMHg0QzE4IFVTX0FMVV9DT05TVF9CXzEKKzB4NEMxQyBVU19BTFVfQ09OU1RfQV8xCisweDRDMjAgVVNfQUxVX0NPTlNUX1JfMgorMHg0QzI0IFVTX0FMVV9DT05TVF9HXzIKKzB4NEMyOCBVU19BTFVfQ09OU1RfQl8yCisweDRDMkMgVVNfQUxVX0NPTlNUX0FfMgorMHg0QzMwIFVTX0FMVV9DT05TVF9SXzMKKzB4NEMzNCBVU19BTFVfQ09OU1RfR18zCisweDRDMzggVVNfQUxVX0NPTlNUX0JfMworMHg0QzNDIFVTX0FMVV9DT05TVF9BXzMKKzB4NEM0MCBVU19BTFVfQ09OU1RfUl80CisweDRDNDQgVVNfQUxVX0NPTlNUX0dfNAorMHg0QzQ4IFVTX0FMVV9DT05TVF9CXzQKKzB4NEM0QyBVU19BTFVfQ09OU1RfQV80CisweDRDNTAgVVNfQUxVX0NPTlNUX1JfNQorMHg0QzU0IFVTX0FMVV9DT05TVF9HXzUKKzB4NEM1OCBVU19BTFVfQ09OU1RfQl81CisweDRDNUMgVVNfQUxVX0NPTlNUX0FfNQorMHg0QzYwIFVTX0FMVV9DT05TVF9SXzYKKzB4NEM2NCBVU19BTFVfQ09OU1RfR182CisweDRDNjggVVNfQUxVX0NPTlNUX0JfNgorMHg0QzZDIFVTX0FMVV9DT05TVF9BXzYKKzB4NEM3MCBVU19BTFVfQ09OU1RfUl83CisweDRDNzQgVVNfQUxVX0NPTlNUX0dfNworMHg0Qzc4IFVTX0FMVV9DT05TVF9CXzcKKzB4NEM3QyBVU19BTFVfQ09OU1RfQV83CisweDRDODAgVVNfQUxVX0NPTlNUX1JfOAorMHg0Qzg0IFVTX0FMVV9DT05TVF9HXzgKKzB4NEM4OCBVU19BTFVfQ09OU1RfQl84CisweDRDOEMgVVNfQUxVX0NPTlNUX0FfOAorMHg0QzkwIFVTX0FMVV9DT05TVF9SXzkKKzB4NEM5NCBVU19BTFVfQ09OU1RfR185CisweDRDOTggVVNfQUxVX0NPTlNUX0JfOQorMHg0QzlDIFVTX0FMVV9DT05TVF9BXzkKKzB4NENBMCBVU19BTFVfQ09OU1RfUl8xMAorMHg0Q0E0IFVTX0FMVV9DT05TVF9HXzEwCisweDRDQTggVVNfQUxVX0NPTlNUX0JfMTAKKzB4NENBQyBVU19BTFVfQ09OU1RfQV8xMAorMHg0Q0IwIFVTX0FMVV9DT05TVF9SXzExCisweDRDQjQgVVNfQUxVX0NPTlNUX0dfMTEKKzB4NENCOCBVU19BTFVfQ09OU1RfQl8xMQorMHg0Q0JDIFVTX0FMVV9DT05TVF9BXzExCisweDRDQzAgVVNfQUxVX0NPTlNUX1JfMTIKKzB4NENDNCBVU19BTFVfQ09OU1RfR18xMgorMHg0Q0M4IFVTX0FMVV9DT05TVF9CXzEyCisweDRDQ0MgVVNfQUxVX0NPTlNUX0FfMTIKKzB4NENEMCBVU19BTFVfQ09OU1RfUl8xMworMHg0Q0Q0IFVTX0FMVV9DT05TVF9HXzEzCisweDRDRDggVVNfQUxVX0NPTlNUX0JfMTMKKzB4NENEQyBVU19BTFVfQ09OU1RfQV8xMworMHg0Q0UwIFVTX0FMVV9DT05TVF9SXzE0CisweDRDRTQgVVNfQUxVX0NPTlNUX0dfMTQKKzB4NENFOCBVU19BTFVfQ09OU1RfQl8xNAorMHg0Q0VDIFVTX0FMVV9DT05TVF9BXzE0CisweDRDRjAgVVNfQUxVX0NPTlNUX1JfMTUKKzB4NENGNCBVU19BTFVfQ09OU1RfR18xNQorMHg0Q0Y4IFVTX0FMVV9DT05TVF9CXzE1CisweDRDRkMgVVNfQUxVX0NPTlNUX0FfMTUKKzB4NEQwMCBVU19BTFVfQ09OU1RfUl8xNgorMHg0RDA0IFVTX0FMVV9DT05TVF9HXzE2CisweDREMDggVVNfQUxVX0NPTlNUX0JfMTYKKzB4NEQwQyBVU19BTFVfQ09OU1RfQV8xNgorMHg0RDEwIFVTX0FMVV9DT05TVF9SXzE3CisweDREMTQgVVNfQUxVX0NPTlNUX0dfMTcKKzB4NEQxOCBVU19BTFVfQ09OU1RfQl8xNworMHg0RDFDIFVTX0FMVV9DT05TVF9BXzE3CisweDREMjAgVVNfQUxVX0NPTlNUX1JfMTgKKzB4NEQyNCBVU19BTFVfQ09OU1RfR18xOAorMHg0RDI4IFVTX0FMVV9DT05TVF9CXzE4CisweDREMkMgVVNfQUxVX0NPTlNUX0FfMTgKKzB4NEQzMCBVU19BTFVfQ09OU1RfUl8xOQorMHg0RDM0IFVTX0FMVV9DT05TVF9HXzE5CisweDREMzggVVNfQUxVX0NPTlNUX0JfMTkKKzB4NEQzQyBVU19BTFVfQ09OU1RfQV8xOQorMHg0RDQwIFVTX0FMVV9DT05TVF9SXzIwCisweDRENDQgVVNfQUxVX0NPTlNUX0dfMjAKKzB4NEQ0OCBVU19BTFVfQ09OU1RfQl8yMAorMHg0RDRDIFVTX0FMVV9DT05TVF9BXzIwCisweDRENTAgVVNfQUxVX0NPTlNUX1JfMjEKKzB4NEQ1NCBVU19BTFVfQ09OU1RfR18yMQorMHg0RDU4IFVTX0FMVV9DT05TVF9CXzIxCisweDRENUMgVVNfQUxVX0NPTlNUX0FfMjEKKzB4NEQ2MCBVU19BTFVfQ09OU1RfUl8yMgorMHg0RDY0IFVTX0FMVV9DT05TVF9HXzIyCisweDRENjggVVNfQUxVX0NPTlNUX0JfMjIKKzB4NEQ2QyBVU19BTFVfQ09OU1RfQV8yMgorMHg0RDcwIFVTX0FMVV9DT05TVF9SXzIzCisweDRENzQgVVNfQUxVX0NPTlNUX0dfMjMKKzB4NEQ3OCBVU19BTFVfQ09OU1RfQl8yMworMHg0RDdDIFVTX0FMVV9DT05TVF9BXzIzCisweDREODAgVVNfQUxVX0NPTlNUX1JfMjQKKzB4NEQ4NCBVU19BTFVfQ09OU1RfR18yNAorMHg0RDg4IFVTX0FMVV9DT05TVF9CXzI0CisweDREOEMgVVNfQUxVX0NPTlNUX0FfMjQKKzB4NEQ5MCBVU19BTFVfQ09OU1RfUl8yNQorMHg0RDk0IFVTX0FMVV9DT05TVF9HXzI1CisweDREOTggVVNfQUxVX0NPTlNUX0JfMjUKKzB4NEQ5QyBVU19BTFVfQ09OU1RfQV8yNQorMHg0REEwIFVTX0FMVV9DT05TVF9SXzI2CisweDREQTQgVVNfQUxVX0NPTlNUX0dfMjYKKzB4NERBOCBVU19BTFVfQ09OU1RfQl8yNgorMHg0REFDIFVTX0FMVV9DT05TVF9BXzI2CisweDREQjAgVVNfQUxVX0NPTlNUX1JfMjcKKzB4NERCNCBVU19BTFVfQ09OU1RfR18yNworMHg0REI4IFVTX0FMVV9DT05TVF9CXzI3CisweDREQkMgVVNfQUxVX0NPTlNUX0FfMjcKKzB4NERDMCBVU19BTFVfQ09OU1RfUl8yOAorMHg0REM0IFVTX0FMVV9DT05TVF9HXzI4CisweDREQzggVVNfQUxVX0NPTlNUX0JfMjgKKzB4NERDQyBVU19BTFVfQ09OU1RfQV8yOAorMHg0REQwIFVTX0FMVV9DT05TVF9SXzI5CisweDRERDQgVVNfQUxVX0NPTlNUX0dfMjkKKzB4NEREOCBVU19BTFVfQ09OU1RfQl8yOQorMHg0RERDIFVTX0FMVV9DT05TVF9BXzI5CisweDRERTAgVVNfQUxVX0NPTlNUX1JfMzAKKzB4NERFNCBVU19BTFVfQ09OU1RfR18zMAorMHg0REU4IFVTX0FMVV9DT05TVF9CXzMwCisweDRERUMgVVNfQUxVX0NPTlNUX0FfMzAKKzB4NERGMCBVU19BTFVfQ09OU1RfUl8zMQorMHg0REY0IFVTX0FMVV9DT05TVF9HXzMxCisweDRERjggVVNfQUxVX0NPTlNUX0JfMzEKKzB4NERGQyBVU19BTFVfQ09OU1RfQV8zMQorMHg0RTA0IFJCM0RfQkxFTkRDTlRMX1IzCisweDRFMDggUkIzRF9BQkxFTkRDTlRMX1IzCisweDRFMEMgUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sKKzB4NEUxMCBSQjNEX0NPTlNUQU5UX0NPTE9SCisweDRFMTQgUkIzRF9DT0xPUl9DTEVBUl9WQUxVRQorMHg0RTE4IFJCM0RfUk9QQ05UTF9SMworMHg0RTFDIFJCM0RfQ0xSQ01QX0ZMSVBFX1IzCisweDRFMjAgUkIzRF9DTFJDTVBfQ0xSX1IzCisweDRFMjQgUkIzRF9DTFJDTVBfTVNLX1IzCisweDRFNDggUkIzRF9ERUJVR19DVEwKKzB4NEU0QyBSQjNEX0RTVENBQ0hFX0NUTFNUQVRfUjMKKzB4NEU1MCBSQjNEX0RJVEhFUl9DVEwKKzB4NEU1NCBSQjNEX0NNQVNLX09GRlNFVDAKKzB4NEU1OCBSQjNEX0NNQVNLX09GRlNFVDEKKzB4NEU1QyBSQjNEX0NNQVNLX09GRlNFVDIKKzB4NEU2MCBSQjNEX0NNQVNLX09GRlNFVDMKKzB4NEU2NCBSQjNEX0NNQVNLX1BJVENIMAorMHg0RTY4IFJCM0RfQ01BU0tfUElUQ0gxCisweDRFNkMgUkIzRF9DTUFTS19QSVRDSDIKKzB4NEU3MCBSQjNEX0NNQVNLX1BJVENIMworMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAorMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKKzB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKKzB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKKzB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAorMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAorMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAorMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAorMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAorMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCisweDRGMTQgWkJfWlRPUAorMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMUMgWkJfQldfQ05UTAorMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQorMHg0RjMwIFpCX1pNQVNLX09GRlNFVAorMHg0RjM0IFpCX1pNQVNLX1BJVENICisweDRGMzggWkJfWk1BU0tfV1JJTkRFWAorMHg0RjNDIFpCX1pNQVNLX0RXT1JECisweDRGNDAgWkJfWk1BU0tfUkRJTkRFWAorMHg0RjQ0IFpCX0hJWl9PRkZTRVQKKzB4NEY0OCBaQl9ISVpfV1JJTkRFWAorMHg0RjRDIFpCX0hJWl9EV09SRAorMHg0RjUwIFpCX0hJWl9SRElOREVYCisweDRGNTQgWkJfSElaX1BJVENICisweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ybjUwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ybjUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODdiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JuNTAKQEAgLTAsMCArMSwzMCBAQAorcm41MCAweDMyOTQKKzB4MTQzNCBTUkNfWV9YCisweDE0MzggRFNUX1lfWAorMHgxNDNDIERTVF9IRUlHSFRfV0lEVEgKKzB4MTQ2QyBEUF9HVUlfTUFTVEVSX0NOVEwKKzB4MTQ3NCBCUlVTSF9ZX1gKKzB4MTQ3OCBEUF9CUlVTSF9CS0dEX0NMUgorMHgxNDdDIERQX0JSVVNIX0ZSR0RfQ0xSCisweDE0ODAgQlJVU0hfREFUQTAKKzB4MTQ4NCBCUlVTSF9EQVRBMQorMHgxNTk4IERTVF9XSURUSF9IRUlHSFQKKzB4MTVDMCBDTFJfQ01QX0NOVEwKKzB4MTVDNCBDTFJfQ01QX0NMUl9TUkMKKzB4MTVDOCBDTFJfQ01QX0NMUl9EU1QKKzB4MTVDQyBDTFJfQ01QX01TSworMHgxNUQ4IERQX1NSQ19GUkdEX0NMUgorMHgxNURDIERQX1NSQ19CS0dEX0NMUgorMHgxNjAwIERTVF9MSU5FX1NUQVJUCisweDE2MDQgRFNUX0xJTkVfRU5ECisweDE2MDggRFNUX0xJTkVfUEFUQ09VTlQKKzB4MTZDMCBEUF9DTlRMCisweDE2Q0MgRFBfV1JJVEVfTVNLCisweDE2RDAgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SCisweDE2RTggREVGQVVMVF9TQ19CT1RUT01fUklHSFQKKzB4MTZFQyBTQ19UT1BfTEVGVAorMHgxNkYwIFNDX0JPVFRPTV9SSUdIVAorMHgxNkY0IFNSQ19TQ19CT1RUT01fUklHSFQKKzB4MTcxNCBEU1RDQUNIRV9DVExTVEFUCisweDE3MjAgV0FJVF9VTlRJTAorMHgxNzJDIFJCQk1fR1VJQ05UTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzYzBiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKQEAgLTAsMCArMSw3MjkgQEAKK3JzNjAwIDB4NmQ0MAorMHgxNDM0IFNSQ19ZX1gKKzB4MTQzOCBEU1RfWV9YCisweDE0M0MgRFNUX0hFSUdIVF9XSURUSAorMHgxNDZDIERQX0dVSV9NQVNURVJfQ05UTAorMHgxNDc0IEJSVVNIX1lfWAorMHgxNDc4IERQX0JSVVNIX0JLR0RfQ0xSCisweDE0N0MgRFBfQlJVU0hfRlJHRF9DTFIKKzB4MTQ4MCBCUlVTSF9EQVRBMAorMHgxNDg0IEJSVVNIX0RBVEExCisweDE1OTggRFNUX1dJRFRIX0hFSUdIVAorMHgxNUMwIENMUl9DTVBfQ05UTAorMHgxNUM0IENMUl9DTVBfQ0xSX1NSQworMHgxNUM4IENMUl9DTVBfQ0xSX0RTVAorMHgxNUNDIENMUl9DTVBfTVNLCisweDE1RDggRFBfU1JDX0ZSR0RfQ0xSCisweDE1REMgRFBfU1JDX0JLR0RfQ0xSCisweDE2MDAgRFNUX0xJTkVfU1RBUlQKKzB4MTYwNCBEU1RfTElORV9FTkQKKzB4MTYwOCBEU1RfTElORV9QQVRDT1VOVAorMHgxNkMwIERQX0NOVEwKKzB4MTZDQyBEUF9XUklURV9NU0sKKzB4MTZEMCBEUF9DTlRMX1hESVJfWURJUl9ZTUFKT1IKKzB4MTZFOCBERUZBVUxUX1NDX0JPVFRPTV9SSUdIVAorMHgxNkVDIFNDX1RPUF9MRUZUCisweDE2RjAgU0NfQk9UVE9NX1JJR0hUCisweDE2RjQgU1JDX1NDX0JPVFRPTV9SSUdIVAorMHgxNzE0IERTVENBQ0hFX0NUTFNUQVQKKzB4MTcyMCBXQUlUX1VOVElMCisweDE3MkMgUkJCTV9HVUlDTlRMCisweDFEOTggVkFQX1ZQT1JUX1hTQ0FMRQorMHgxRDlDIFZBUF9WUE9SVF9YT0ZGU0VUCisweDFEQTAgVkFQX1ZQT1JUX1lTQ0FMRQorMHgxREE0IFZBUF9WUE9SVF9ZT0ZGU0VUCisweDFEQTggVkFQX1ZQT1JUX1pTQ0FMRQorMHgxREFDIFZBUF9WUE9SVF9aT0ZGU0VUCisweDIwODAgVkFQX0NOVEwKKzB4MjA5MCBWQVBfT1VUX1ZUWF9GTVRfMAorMHgyMDk0IFZBUF9PVVRfVlRYX0ZNVF8xCisweDIwQjAgVkFQX1ZURV9DTlRMCisweDIxMzggVkFQX1ZGX01JTl9WVFhfSU5EWAorMHgyMTQwIFZBUF9DTlRMX1NUQVRVUworMHgyMTUwIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzAKKzB4MjE1NCBWQVBfUFJPR19TVFJFQU1fQ05UTF8xCisweDIxNTggVkFQX1BST0dfU1RSRUFNX0NOVExfMgorMHgyMTVDIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzMKKzB4MjE2MCBWQVBfUFJPR19TVFJFQU1fQ05UTF80CisweDIxNjQgVkFQX1BST0dfU1RSRUFNX0NOVExfNQorMHgyMTY4IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzYKKzB4MjE2QyBWQVBfUFJPR19TVFJFQU1fQ05UTF83CisweDIxODAgVkFQX1ZUWF9TVEFURV9DTlRMCisweDIxODQgVkFQX1ZTTV9WVFhfQVNTTQorMHgyMTg4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18wCisweDIxOEMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzEKKzB4MjE5MCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMgorMHgyMTk0IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18zCisweDIxOTggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzQKKzB4MjE5QyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNQorMHgyMUEwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR182CisweDIxQTQgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzcKKzB4MjFBOCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfOAorMHgyMUFDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR185CisweDIxQjAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzEwCisweDIxQjQgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzExCisweDIxQjggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzEyCisweDIxQkMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzEzCisweDIxQzAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzE0CisweDIxQzQgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzE1CisweDIxREMgVkFQX1BTQ19TR05fTk9STV9DTlRMCisweDIxRTAgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzAKKzB4MjFFNCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMQorMHgyMUU4IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8yCisweDIxRUMgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzMKKzB4MjFGMCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNAorMHgyMUY0IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF81CisweDIxRjggVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzYKKzB4MjFGQyBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNworMHgyMjAwIFZBUF9QVlNfVkVDVE9SX0lORFhfUkVHCisweDIyMDQgVkFQX1BWU19WRUNUT1JfREFUQV9SRUcKKzB4MjIwOCBWQVBfUFZTX1ZFQ1RPUl9EQVRBX1JFR18xMjgKKzB4MjIxQyBWQVBfQ0xJUF9DTlRMCisweDIyMjAgVkFQX0dCX1ZFUlRfQ0xJUF9BREoKKzB4MjIyNCBWQVBfR0JfVkVSVF9ESVNDX0FESgorMHgyMjI4IFZBUF9HQl9IT1JaX0NMSVBfQURKCisweDIyMkMgVkFQX0dCX0hPUlpfRElTQ19BREoKKzB4MjIzMCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18wCisweDIyMzQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMQorMHgyMjM4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzIKKzB4MjIzQyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18zCisweDIyNDAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNAorMHgyMjQ0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzUKKzB4MjI0OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU182CisweDIyNEMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNworMHgyMjUwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzgKKzB4MjI1NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU185CisweDIyNTggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTAKKzB4MjI1QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMQorMHgyMjYwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzEyCisweDIyNjQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTMKKzB4MjI2OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xNAorMHgyMjZDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzE1CisweDIyODQgVkFQX1BWU19TVEFURV9GTFVTSF9SRUcKKzB4MjI4OCBWQVBfUFZTX1ZUWF9USU1FT1VUX1JFRworMHgyMjkwIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMAorMHgyMjk0IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMQorMHgyMjk4IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMgorMHgyMjlDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMworMHgyMkEwIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfNAorMHgyMkE0IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfNQorMHgyMkE4IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfNgorMHgyMkFDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfNworMHgyMkIwIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfOAorMHgyMkI0IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfOQorMHgyMkI4IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTAKKzB4MjJCQyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzExCisweDIyQzAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMgorMHgyMkM0IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTMKKzB4MjJDOCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzE0CisweDIyQ0MgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xNQorMHgyMkQwIFZBUF9QVlNfQ09ERV9DTlRMXzAKKzB4MjJENCBWQVBfUFZTX0NPTlNUX0NOVEwKKzB4MjJEOCBWQVBfUFZTX0NPREVfQ05UTF8xCisweDIyREMgVkFQX1BWU19GTE9XX0NOVExfT1BDCisweDM0MkMgUkIyRF9EU1RDQUNIRV9DVExTVEFUCisweDQwMDAgR0JfVkFQX1JBU1RFUl9WVFhfRk1UXzAKKzB4NDAwNCBHQl9WQVBfUkFTVEVSX1ZUWF9GTVRfMQorMHg0MDA4IEdCX0VOQUJMRQorMHg0MDFDIEdCX1NFTEVDVAorMHg0MDIwIEdCX0FBX0NPTkZJRworMHg0MDI0IEdCX0ZJRk9fU0laRQorMHg0MTAwIFRYX0lOVkFMVEFHUworMHg0MjAwIEdBX1BPSU5UX1MwCisweDQyMDQgR0FfUE9JTlRfVDAKKzB4NDIwOCBHQV9QT0lOVF9TMQorMHg0MjBDIEdBX1BPSU5UX1QxCisweDQyMTQgR0FfVFJJQU5HTEVfU1RJUFBMRQorMHg0MjFDIEdBX1BPSU5UX1NJWkUKKzB4NDIzMCBHQV9QT0lOVF9NSU5NQVgKKzB4NDIzNCBHQV9MSU5FX0NOVEwKKzB4NDIzOCBHQV9MSU5FX1NUSVBQTEVfQ09ORklHCisweDQyNjAgR0FfTElORV9TVElQUExFX1ZBTFVFCisweDQyNjQgR0FfTElORV9TMAorMHg0MjY4IEdBX0xJTkVfUzEKKzB4NDI3OCBHQV9DT0xPUl9DT05UUk9MCisweDQyN0MgR0FfU09MSURfUkcKKzB4NDI4MCBHQV9TT0xJRF9CQQorMHg0Mjg4IEdBX1BPTFlfTU9ERQorMHg0MjhDIEdBX1JPVU5EX01PREUKKzB4NDI5MCBHQV9PRkZTRVQKKzB4NDI5NCBHQV9GT0dfU0NBTEUKKzB4NDI5OCBHQV9GT0dfT0ZGU0VUCisweDQyQTAgU1VfVEVYX1dSQVAKKzB4NDJBNCBTVV9QT0xZX09GRlNFVF9GUk9OVF9TQ0FMRQorMHg0MkE4IFNVX1BPTFlfT0ZGU0VUX0ZST05UX09GRlNFVAorMHg0MkFDIFNVX1BPTFlfT0ZGU0VUX0JBQ0tfU0NBTEUKKzB4NDJCMCBTVV9QT0xZX09GRlNFVF9CQUNLX09GRlNFVCAKKzB4NDJCNCBTVV9QT0xZX09GRlNFVF9FTkFCTEUKKzB4NDJCOCBTVV9DVUxMX01PREUKKzB4NDJDMCBTVV9ERVBUSF9TQ0FMRQorMHg0MkM0IFNVX0RFUFRIX09GRlNFVAorMHg0MkM4IFNVX1JFR19ERVNUCisweDQzMDAgUlNfQ09VTlQKKzB4NDMwNCBSU19JTlNUX0NPVU5UCisweDQzMTAgUlNfSVBfMAorMHg0MzE0IFJTX0lQXzEKKzB4NDMxOCBSU19JUF8yCisweDQzMUMgUlNfSVBfMworMHg0MzIwIFJTX0lQXzQKKzB4NDMyNCBSU19JUF81CisweDQzMjggUlNfSVBfNgorMHg0MzJDIFJTX0lQXzcKKzB4NDMzMCBSU19JTlNUXzAKKzB4NDMzNCBSU19JTlNUXzEKKzB4NDMzOCBSU19JTlNUXzIKKzB4NDMzQyBSU19JTlNUXzMKKzB4NDM0MCBSU19JTlNUXzQKKzB4NDM0NCBSU19JTlNUXzUKKzB4NDM0OCBSU19JTlNUXzYKKzB4NDM0QyBSU19JTlNUXzcKKzB4NDM1MCBSU19JTlNUXzgKKzB4NDM1NCBSU19JTlNUXzkKKzB4NDM1OCBSU19JTlNUXzEwCisweDQzNUMgUlNfSU5TVF8xMQorMHg0MzYwIFJTX0lOU1RfMTIKKzB4NDM2NCBSU19JTlNUXzEzCisweDQzNjggUlNfSU5TVF8xNAorMHg0MzZDIFJTX0lOU1RfMTUKKzB4NDNBNCBTQ19IWVBFUlpfRU4KKzB4NDNBOCBTQ19FREdFUlVMRQorMHg0M0IwIFNDX0NMSVBfMF9BCisweDQzQjQgU0NfQ0xJUF8wX0IKKzB4NDNCOCBTQ19DTElQXzFfQQorMHg0M0JDIFNDX0NMSVBfMV9CCisweDQzQzAgU0NfQ0xJUF8yX0EKKzB4NDNDNCBTQ19DTElQXzJfQgorMHg0M0M4IFNDX0NMSVBfM19BCisweDQzQ0MgU0NfQ0xJUF8zX0IKKzB4NDNEMCBTQ19DTElQX1JVTEUKKzB4NDNFMCBTQ19TQ0lTU09SMAorMHg0M0U4IFNDX1NDUkVFTkRPT1IKKzB4NDQ0MCBUWF9GSUxURVIxXzAKKzB4NDQ0NCBUWF9GSUxURVIxXzEKKzB4NDQ0OCBUWF9GSUxURVIxXzIKKzB4NDQ0QyBUWF9GSUxURVIxXzMKKzB4NDQ1MCBUWF9GSUxURVIxXzQKKzB4NDQ1NCBUWF9GSUxURVIxXzUKKzB4NDQ1OCBUWF9GSUxURVIxXzYKKzB4NDQ1QyBUWF9GSUxURVIxXzcKKzB4NDQ2MCBUWF9GSUxURVIxXzgKKzB4NDQ2NCBUWF9GSUxURVIxXzkKKzB4NDQ2OCBUWF9GSUxURVIxXzEwCisweDQ0NkMgVFhfRklMVEVSMV8xMQorMHg0NDcwIFRYX0ZJTFRFUjFfMTIKKzB4NDQ3NCBUWF9GSUxURVIxXzEzCisweDQ0NzggVFhfRklMVEVSMV8xNAorMHg0NDdDIFRYX0ZJTFRFUjFfMTUKKzB4NDU4MCBUWF9DSFJPTUFfS0VZXzAKKzB4NDU4NCBUWF9DSFJPTUFfS0VZXzEKKzB4NDU4OCBUWF9DSFJPTUFfS0VZXzIKKzB4NDU4QyBUWF9DSFJPTUFfS0VZXzMKKzB4NDU5MCBUWF9DSFJPTUFfS0VZXzQKKzB4NDU5NCBUWF9DSFJPTUFfS0VZXzUKKzB4NDU5OCBUWF9DSFJPTUFfS0VZXzYKKzB4NDU5QyBUWF9DSFJPTUFfS0VZXzcKKzB4NDVBMCBUWF9DSFJPTUFfS0VZXzgKKzB4NDVBNCBUWF9DSFJPTUFfS0VZXzkKKzB4NDVBOCBUWF9DSFJPTUFfS0VZXzEwCisweDQ1QUMgVFhfQ0hST01BX0tFWV8xMQorMHg0NUIwIFRYX0NIUk9NQV9LRVlfMTIKKzB4NDVCNCBUWF9DSFJPTUFfS0VZXzEzCisweDQ1QjggVFhfQ0hST01BX0tFWV8xNAorMHg0NUJDIFRYX0NIUk9NQV9LRVlfMTUKKzB4NDVDMCBUWF9CT1JERVJfQ09MT1JfMAorMHg0NUM0IFRYX0JPUkRFUl9DT0xPUl8xCisweDQ1QzggVFhfQk9SREVSX0NPTE9SXzIKKzB4NDVDQyBUWF9CT1JERVJfQ09MT1JfMworMHg0NUQwIFRYX0JPUkRFUl9DT0xPUl80CisweDQ1RDQgVFhfQk9SREVSX0NPTE9SXzUKKzB4NDVEOCBUWF9CT1JERVJfQ09MT1JfNgorMHg0NURDIFRYX0JPUkRFUl9DT0xPUl83CisweDQ1RTAgVFhfQk9SREVSX0NPTE9SXzgKKzB4NDVFNCBUWF9CT1JERVJfQ09MT1JfOQorMHg0NUU4IFRYX0JPUkRFUl9DT0xPUl8xMAorMHg0NUVDIFRYX0JPUkRFUl9DT0xPUl8xMQorMHg0NUYwIFRYX0JPUkRFUl9DT0xPUl8xMgorMHg0NUY0IFRYX0JPUkRFUl9DT0xPUl8xMworMHg0NUY4IFRYX0JPUkRFUl9DT0xPUl8xNAorMHg0NUZDIFRYX0JPUkRFUl9DT0xPUl8xNQorMHg0NjAwIFVTX0NPTkZJRworMHg0NjA0IFVTX1BJWFNJWkUKKzB4NDYwOCBVU19DT0RFX09GRlNFVAorMHg0NjBDIFVTX1JFU0VUCisweDQ2MTAgVVNfQ09ERV9BRERSXzAKKzB4NDYxNCBVU19DT0RFX0FERFJfMQorMHg0NjE4IFVTX0NPREVfQUREUl8yCisweDQ2MUMgVVNfQ09ERV9BRERSXzMKKzB4NDYyMCBVU19URVhfSU5TVF8wCisweDQ2MjQgVVNfVEVYX0lOU1RfMQorMHg0NjI4IFVTX1RFWF9JTlNUXzIKKzB4NDYyQyBVU19URVhfSU5TVF8zCisweDQ2MzAgVVNfVEVYX0lOU1RfNAorMHg0NjM0IFVTX1RFWF9JTlNUXzUKKzB4NDYzOCBVU19URVhfSU5TVF82CisweDQ2M0MgVVNfVEVYX0lOU1RfNworMHg0NjQwIFVTX1RFWF9JTlNUXzgKKzB4NDY0NCBVU19URVhfSU5TVF85CisweDQ2NDggVVNfVEVYX0lOU1RfMTAKKzB4NDY0QyBVU19URVhfSU5TVF8xMQorMHg0NjUwIFVTX1RFWF9JTlNUXzEyCisweDQ2NTQgVVNfVEVYX0lOU1RfMTMKKzB4NDY1OCBVU19URVhfSU5TVF8xNAorMHg0NjVDIFVTX1RFWF9JTlNUXzE1CisweDQ2NjAgVVNfVEVYX0lOU1RfMTYKKzB4NDY2NCBVU19URVhfSU5TVF8xNworMHg0NjY4IFVTX1RFWF9JTlNUXzE4CisweDQ2NkMgVVNfVEVYX0lOU1RfMTkKKzB4NDY3MCBVU19URVhfSU5TVF8yMAorMHg0Njc0IFVTX1RFWF9JTlNUXzIxCisweDQ2NzggVVNfVEVYX0lOU1RfMjIKKzB4NDY3QyBVU19URVhfSU5TVF8yMworMHg0NjgwIFVTX1RFWF9JTlNUXzI0CisweDQ2ODQgVVNfVEVYX0lOU1RfMjUKKzB4NDY4OCBVU19URVhfSU5TVF8yNgorMHg0NjhDIFVTX1RFWF9JTlNUXzI3CisweDQ2OTAgVVNfVEVYX0lOU1RfMjgKKzB4NDY5NCBVU19URVhfSU5TVF8yOQorMHg0Njk4IFVTX1RFWF9JTlNUXzMwCisweDQ2OUMgVVNfVEVYX0lOU1RfMzEKKzB4NDZBNCBVU19PVVRfRk1UXzAKKzB4NDZBOCBVU19PVVRfRk1UXzEKKzB4NDZBQyBVU19PVVRfRk1UXzIKKzB4NDZCMCBVU19PVVRfRk1UXzMKKzB4NDZCNCBVU19XX0ZNVAorMHg0NkMwIFVTX0FMVV9SR0JfQUREUl8wCisweDQ2QzQgVVNfQUxVX1JHQl9BRERSXzEKKzB4NDZDOCBVU19BTFVfUkdCX0FERFJfMgorMHg0NkNDIFVTX0FMVV9SR0JfQUREUl8zCisweDQ2RDAgVVNfQUxVX1JHQl9BRERSXzQKKzB4NDZENCBVU19BTFVfUkdCX0FERFJfNQorMHg0NkQ4IFVTX0FMVV9SR0JfQUREUl82CisweDQ2REMgVVNfQUxVX1JHQl9BRERSXzcKKzB4NDZFMCBVU19BTFVfUkdCX0FERFJfOAorMHg0NkU0IFVTX0FMVV9SR0JfQUREUl85CisweDQ2RTggVVNfQUxVX1JHQl9BRERSXzEwCisweDQ2RUMgVVNfQUxVX1JHQl9BRERSXzExCisweDQ2RjAgVVNfQUxVX1JHQl9BRERSXzEyCisweDQ2RjQgVVNfQUxVX1JHQl9BRERSXzEzCisweDQ2RjggVVNfQUxVX1JHQl9BRERSXzE0CisweDQ2RkMgVVNfQUxVX1JHQl9BRERSXzE1CisweDQ3MDAgVVNfQUxVX1JHQl9BRERSXzE2CisweDQ3MDQgVVNfQUxVX1JHQl9BRERSXzE3CisweDQ3MDggVVNfQUxVX1JHQl9BRERSXzE4CisweDQ3MEMgVVNfQUxVX1JHQl9BRERSXzE5CisweDQ3MTAgVVNfQUxVX1JHQl9BRERSXzIwCisweDQ3MTQgVVNfQUxVX1JHQl9BRERSXzIxCisweDQ3MTggVVNfQUxVX1JHQl9BRERSXzIyCisweDQ3MUMgVVNfQUxVX1JHQl9BRERSXzIzCisweDQ3MjAgVVNfQUxVX1JHQl9BRERSXzI0CisweDQ3MjQgVVNfQUxVX1JHQl9BRERSXzI1CisweDQ3MjggVVNfQUxVX1JHQl9BRERSXzI2CisweDQ3MkMgVVNfQUxVX1JHQl9BRERSXzI3CisweDQ3MzAgVVNfQUxVX1JHQl9BRERSXzI4CisweDQ3MzQgVVNfQUxVX1JHQl9BRERSXzI5CisweDQ3MzggVVNfQUxVX1JHQl9BRERSXzMwCisweDQ3M0MgVVNfQUxVX1JHQl9BRERSXzMxCisweDQ3NDAgVVNfQUxVX1JHQl9BRERSXzMyCisweDQ3NDQgVVNfQUxVX1JHQl9BRERSXzMzCisweDQ3NDggVVNfQUxVX1JHQl9BRERSXzM0CisweDQ3NEMgVVNfQUxVX1JHQl9BRERSXzM1CisweDQ3NTAgVVNfQUxVX1JHQl9BRERSXzM2CisweDQ3NTQgVVNfQUxVX1JHQl9BRERSXzM3CisweDQ3NTggVVNfQUxVX1JHQl9BRERSXzM4CisweDQ3NUMgVVNfQUxVX1JHQl9BRERSXzM5CisweDQ3NjAgVVNfQUxVX1JHQl9BRERSXzQwCisweDQ3NjQgVVNfQUxVX1JHQl9BRERSXzQxCisweDQ3NjggVVNfQUxVX1JHQl9BRERSXzQyCisweDQ3NkMgVVNfQUxVX1JHQl9BRERSXzQzCisweDQ3NzAgVVNfQUxVX1JHQl9BRERSXzQ0CisweDQ3NzQgVVNfQUxVX1JHQl9BRERSXzQ1CisweDQ3NzggVVNfQUxVX1JHQl9BRERSXzQ2CisweDQ3N0MgVVNfQUxVX1JHQl9BRERSXzQ3CisweDQ3ODAgVVNfQUxVX1JHQl9BRERSXzQ4CisweDQ3ODQgVVNfQUxVX1JHQl9BRERSXzQ5CisweDQ3ODggVVNfQUxVX1JHQl9BRERSXzUwCisweDQ3OEMgVVNfQUxVX1JHQl9BRERSXzUxCisweDQ3OTAgVVNfQUxVX1JHQl9BRERSXzUyCisweDQ3OTQgVVNfQUxVX1JHQl9BRERSXzUzCisweDQ3OTggVVNfQUxVX1JHQl9BRERSXzU0CisweDQ3OUMgVVNfQUxVX1JHQl9BRERSXzU1CisweDQ3QTAgVVNfQUxVX1JHQl9BRERSXzU2CisweDQ3QTQgVVNfQUxVX1JHQl9BRERSXzU3CisweDQ3QTggVVNfQUxVX1JHQl9BRERSXzU4CisweDQ3QUMgVVNfQUxVX1JHQl9BRERSXzU5CisweDQ3QjAgVVNfQUxVX1JHQl9BRERSXzYwCisweDQ3QjQgVVNfQUxVX1JHQl9BRERSXzYxCisweDQ3QjggVVNfQUxVX1JHQl9BRERSXzYyCisweDQ3QkMgVVNfQUxVX1JHQl9BRERSXzYzCisweDQ3QzAgVVNfQUxVX0FMUEhBX0FERFJfMAorMHg0N0M0IFVTX0FMVV9BTFBIQV9BRERSXzEKKzB4NDdDOCBVU19BTFVfQUxQSEFfQUREUl8yCisweDQ3Q0MgVVNfQUxVX0FMUEhBX0FERFJfMworMHg0N0QwIFVTX0FMVV9BTFBIQV9BRERSXzQKKzB4NDdENCBVU19BTFVfQUxQSEFfQUREUl81CisweDQ3RDggVVNfQUxVX0FMUEhBX0FERFJfNgorMHg0N0RDIFVTX0FMVV9BTFBIQV9BRERSXzcKKzB4NDdFMCBVU19BTFVfQUxQSEFfQUREUl84CisweDQ3RTQgVVNfQUxVX0FMUEhBX0FERFJfOQorMHg0N0U4IFVTX0FMVV9BTFBIQV9BRERSXzEwCisweDQ3RUMgVVNfQUxVX0FMUEhBX0FERFJfMTEKKzB4NDdGMCBVU19BTFVfQUxQSEFfQUREUl8xMgorMHg0N0Y0IFVTX0FMVV9BTFBIQV9BRERSXzEzCisweDQ3RjggVVNfQUxVX0FMUEhBX0FERFJfMTQKKzB4NDdGQyBVU19BTFVfQUxQSEFfQUREUl8xNQorMHg0ODAwIFVTX0FMVV9BTFBIQV9BRERSXzE2CisweDQ4MDQgVVNfQUxVX0FMUEhBX0FERFJfMTcKKzB4NDgwOCBVU19BTFVfQUxQSEFfQUREUl8xOAorMHg0ODBDIFVTX0FMVV9BTFBIQV9BRERSXzE5CisweDQ4MTAgVVNfQUxVX0FMUEhBX0FERFJfMjAKKzB4NDgxNCBVU19BTFVfQUxQSEFfQUREUl8yMQorMHg0ODE4IFVTX0FMVV9BTFBIQV9BRERSXzIyCisweDQ4MUMgVVNfQUxVX0FMUEhBX0FERFJfMjMKKzB4NDgyMCBVU19BTFVfQUxQSEFfQUREUl8yNAorMHg0ODI0IFVTX0FMVV9BTFBIQV9BRERSXzI1CisweDQ4MjggVVNfQUxVX0FMUEhBX0FERFJfMjYKKzB4NDgyQyBVU19BTFVfQUxQSEFfQUREUl8yNworMHg0ODMwIFVTX0FMVV9BTFBIQV9BRERSXzI4CisweDQ4MzQgVVNfQUxVX0FMUEhBX0FERFJfMjkKKzB4NDgzOCBVU19BTFVfQUxQSEFfQUREUl8zMAorMHg0ODNDIFVTX0FMVV9BTFBIQV9BRERSXzMxCisweDQ4NDAgVVNfQUxVX0FMUEhBX0FERFJfMzIKKzB4NDg0NCBVU19BTFVfQUxQSEFfQUREUl8zMworMHg0ODQ4IFVTX0FMVV9BTFBIQV9BRERSXzM0CisweDQ4NEMgVVNfQUxVX0FMUEhBX0FERFJfMzUKKzB4NDg1MCBVU19BTFVfQUxQSEFfQUREUl8zNgorMHg0ODU0IFVTX0FMVV9BTFBIQV9BRERSXzM3CisweDQ4NTggVVNfQUxVX0FMUEhBX0FERFJfMzgKKzB4NDg1QyBVU19BTFVfQUxQSEFfQUREUl8zOQorMHg0ODYwIFVTX0FMVV9BTFBIQV9BRERSXzQwCisweDQ4NjQgVVNfQUxVX0FMUEhBX0FERFJfNDEKKzB4NDg2OCBVU19BTFVfQUxQSEFfQUREUl80MgorMHg0ODZDIFVTX0FMVV9BTFBIQV9BRERSXzQzCisweDQ4NzAgVVNfQUxVX0FMUEhBX0FERFJfNDQKKzB4NDg3NCBVU19BTFVfQUxQSEFfQUREUl80NQorMHg0ODc4IFVTX0FMVV9BTFBIQV9BRERSXzQ2CisweDQ4N0MgVVNfQUxVX0FMUEhBX0FERFJfNDcKKzB4NDg4MCBVU19BTFVfQUxQSEFfQUREUl80OAorMHg0ODg0IFVTX0FMVV9BTFBIQV9BRERSXzQ5CisweDQ4ODggVVNfQUxVX0FMUEhBX0FERFJfNTAKKzB4NDg4QyBVU19BTFVfQUxQSEFfQUREUl81MQorMHg0ODkwIFVTX0FMVV9BTFBIQV9BRERSXzUyCisweDQ4OTQgVVNfQUxVX0FMUEhBX0FERFJfNTMKKzB4NDg5OCBVU19BTFVfQUxQSEFfQUREUl81NAorMHg0ODlDIFVTX0FMVV9BTFBIQV9BRERSXzU1CisweDQ4QTAgVVNfQUxVX0FMUEhBX0FERFJfNTYKKzB4NDhBNCBVU19BTFVfQUxQSEFfQUREUl81NworMHg0OEE4IFVTX0FMVV9BTFBIQV9BRERSXzU4CisweDQ4QUMgVVNfQUxVX0FMUEhBX0FERFJfNTkKKzB4NDhCMCBVU19BTFVfQUxQSEFfQUREUl82MAorMHg0OEI0IFVTX0FMVV9BTFBIQV9BRERSXzYxCisweDQ4QjggVVNfQUxVX0FMUEhBX0FERFJfNjIKKzB4NDhCQyBVU19BTFVfQUxQSEFfQUREUl82MworMHg0OEMwIFVTX0FMVV9SR0JfSU5TVF8wCisweDQ4QzQgVVNfQUxVX1JHQl9JTlNUXzEKKzB4NDhDOCBVU19BTFVfUkdCX0lOU1RfMgorMHg0OENDIFVTX0FMVV9SR0JfSU5TVF8zCisweDQ4RDAgVVNfQUxVX1JHQl9JTlNUXzQKKzB4NDhENCBVU19BTFVfUkdCX0lOU1RfNQorMHg0OEQ4IFVTX0FMVV9SR0JfSU5TVF82CisweDQ4REMgVVNfQUxVX1JHQl9JTlNUXzcKKzB4NDhFMCBVU19BTFVfUkdCX0lOU1RfOAorMHg0OEU0IFVTX0FMVV9SR0JfSU5TVF85CisweDQ4RTggVVNfQUxVX1JHQl9JTlNUXzEwCisweDQ4RUMgVVNfQUxVX1JHQl9JTlNUXzExCisweDQ4RjAgVVNfQUxVX1JHQl9JTlNUXzEyCisweDQ4RjQgVVNfQUxVX1JHQl9JTlNUXzEzCisweDQ4RjggVVNfQUxVX1JHQl9JTlNUXzE0CisweDQ4RkMgVVNfQUxVX1JHQl9JTlNUXzE1CisweDQ5MDAgVVNfQUxVX1JHQl9JTlNUXzE2CisweDQ5MDQgVVNfQUxVX1JHQl9JTlNUXzE3CisweDQ5MDggVVNfQUxVX1JHQl9JTlNUXzE4CisweDQ5MEMgVVNfQUxVX1JHQl9JTlNUXzE5CisweDQ5MTAgVVNfQUxVX1JHQl9JTlNUXzIwCisweDQ5MTQgVVNfQUxVX1JHQl9JTlNUXzIxCisweDQ5MTggVVNfQUxVX1JHQl9JTlNUXzIyCisweDQ5MUMgVVNfQUxVX1JHQl9JTlNUXzIzCisweDQ5MjAgVVNfQUxVX1JHQl9JTlNUXzI0CisweDQ5MjQgVVNfQUxVX1JHQl9JTlNUXzI1CisweDQ5MjggVVNfQUxVX1JHQl9JTlNUXzI2CisweDQ5MkMgVVNfQUxVX1JHQl9JTlNUXzI3CisweDQ5MzAgVVNfQUxVX1JHQl9JTlNUXzI4CisweDQ5MzQgVVNfQUxVX1JHQl9JTlNUXzI5CisweDQ5MzggVVNfQUxVX1JHQl9JTlNUXzMwCisweDQ5M0MgVVNfQUxVX1JHQl9JTlNUXzMxCisweDQ5NDAgVVNfQUxVX1JHQl9JTlNUXzMyCisweDQ5NDQgVVNfQUxVX1JHQl9JTlNUXzMzCisweDQ5NDggVVNfQUxVX1JHQl9JTlNUXzM0CisweDQ5NEMgVVNfQUxVX1JHQl9JTlNUXzM1CisweDQ5NTAgVVNfQUxVX1JHQl9JTlNUXzM2CisweDQ5NTQgVVNfQUxVX1JHQl9JTlNUXzM3CisweDQ5NTggVVNfQUxVX1JHQl9JTlNUXzM4CisweDQ5NUMgVVNfQUxVX1JHQl9JTlNUXzM5CisweDQ5NjAgVVNfQUxVX1JHQl9JTlNUXzQwCisweDQ5NjQgVVNfQUxVX1JHQl9JTlNUXzQxCisweDQ5NjggVVNfQUxVX1JHQl9JTlNUXzQyCisweDQ5NkMgVVNfQUxVX1JHQl9JTlNUXzQzCisweDQ5NzAgVVNfQUxVX1JHQl9JTlNUXzQ0CisweDQ5NzQgVVNfQUxVX1JHQl9JTlNUXzQ1CisweDQ5NzggVVNfQUxVX1JHQl9JTlNUXzQ2CisweDQ5N0MgVVNfQUxVX1JHQl9JTlNUXzQ3CisweDQ5ODAgVVNfQUxVX1JHQl9JTlNUXzQ4CisweDQ5ODQgVVNfQUxVX1JHQl9JTlNUXzQ5CisweDQ5ODggVVNfQUxVX1JHQl9JTlNUXzUwCisweDQ5OEMgVVNfQUxVX1JHQl9JTlNUXzUxCisweDQ5OTAgVVNfQUxVX1JHQl9JTlNUXzUyCisweDQ5OTQgVVNfQUxVX1JHQl9JTlNUXzUzCisweDQ5OTggVVNfQUxVX1JHQl9JTlNUXzU0CisweDQ5OUMgVVNfQUxVX1JHQl9JTlNUXzU1CisweDQ5QTAgVVNfQUxVX1JHQl9JTlNUXzU2CisweDQ5QTQgVVNfQUxVX1JHQl9JTlNUXzU3CisweDQ5QTggVVNfQUxVX1JHQl9JTlNUXzU4CisweDQ5QUMgVVNfQUxVX1JHQl9JTlNUXzU5CisweDQ5QjAgVVNfQUxVX1JHQl9JTlNUXzYwCisweDQ5QjQgVVNfQUxVX1JHQl9JTlNUXzYxCisweDQ5QjggVVNfQUxVX1JHQl9JTlNUXzYyCisweDQ5QkMgVVNfQUxVX1JHQl9JTlNUXzYzCisweDQ5QzAgVVNfQUxVX0FMUEhBX0lOU1RfMAorMHg0OUM0IFVTX0FMVV9BTFBIQV9JTlNUXzEKKzB4NDlDOCBVU19BTFVfQUxQSEFfSU5TVF8yCisweDQ5Q0MgVVNfQUxVX0FMUEhBX0lOU1RfMworMHg0OUQwIFVTX0FMVV9BTFBIQV9JTlNUXzQKKzB4NDlENCBVU19BTFVfQUxQSEFfSU5TVF81CisweDQ5RDggVVNfQUxVX0FMUEhBX0lOU1RfNgorMHg0OURDIFVTX0FMVV9BTFBIQV9JTlNUXzcKKzB4NDlFMCBVU19BTFVfQUxQSEFfSU5TVF84CisweDQ5RTQgVVNfQUxVX0FMUEhBX0lOU1RfOQorMHg0OUU4IFVTX0FMVV9BTFBIQV9JTlNUXzEwCisweDQ5RUMgVVNfQUxVX0FMUEhBX0lOU1RfMTEKKzB4NDlGMCBVU19BTFVfQUxQSEFfSU5TVF8xMgorMHg0OUY0IFVTX0FMVV9BTFBIQV9JTlNUXzEzCisweDQ5RjggVVNfQUxVX0FMUEhBX0lOU1RfMTQKKzB4NDlGQyBVU19BTFVfQUxQSEFfSU5TVF8xNQorMHg0QTAwIFVTX0FMVV9BTFBIQV9JTlNUXzE2CisweDRBMDQgVVNfQUxVX0FMUEhBX0lOU1RfMTcKKzB4NEEwOCBVU19BTFVfQUxQSEFfSU5TVF8xOAorMHg0QTBDIFVTX0FMVV9BTFBIQV9JTlNUXzE5CisweDRBMTAgVVNfQUxVX0FMUEhBX0lOU1RfMjAKKzB4NEExNCBVU19BTFVfQUxQSEFfSU5TVF8yMQorMHg0QTE4IFVTX0FMVV9BTFBIQV9JTlNUXzIyCisweDRBMUMgVVNfQUxVX0FMUEhBX0lOU1RfMjMKKzB4NEEyMCBVU19BTFVfQUxQSEFfSU5TVF8yNAorMHg0QTI0IFVTX0FMVV9BTFBIQV9JTlNUXzI1CisweDRBMjggVVNfQUxVX0FMUEhBX0lOU1RfMjYKKzB4NEEyQyBVU19BTFVfQUxQSEFfSU5TVF8yNworMHg0QTMwIFVTX0FMVV9BTFBIQV9JTlNUXzI4CisweDRBMzQgVVNfQUxVX0FMUEhBX0lOU1RfMjkKKzB4NEEzOCBVU19BTFVfQUxQSEFfSU5TVF8zMAorMHg0QTNDIFVTX0FMVV9BTFBIQV9JTlNUXzMxCisweDRBNDAgVVNfQUxVX0FMUEhBX0lOU1RfMzIKKzB4NEE0NCBVU19BTFVfQUxQSEFfSU5TVF8zMworMHg0QTQ4IFVTX0FMVV9BTFBIQV9JTlNUXzM0CisweDRBNEMgVVNfQUxVX0FMUEhBX0lOU1RfMzUKKzB4NEE1MCBVU19BTFVfQUxQSEFfSU5TVF8zNgorMHg0QTU0IFVTX0FMVV9BTFBIQV9JTlNUXzM3CisweDRBNTggVVNfQUxVX0FMUEhBX0lOU1RfMzgKKzB4NEE1QyBVU19BTFVfQUxQSEFfSU5TVF8zOQorMHg0QTYwIFVTX0FMVV9BTFBIQV9JTlNUXzQwCisweDRBNjQgVVNfQUxVX0FMUEhBX0lOU1RfNDEKKzB4NEE2OCBVU19BTFVfQUxQSEFfSU5TVF80MgorMHg0QTZDIFVTX0FMVV9BTFBIQV9JTlNUXzQzCisweDRBNzAgVVNfQUxVX0FMUEhBX0lOU1RfNDQKKzB4NEE3NCBVU19BTFVfQUxQSEFfSU5TVF80NQorMHg0QTc4IFVTX0FMVV9BTFBIQV9JTlNUXzQ2CisweDRBN0MgVVNfQUxVX0FMUEhBX0lOU1RfNDcKKzB4NEE4MCBVU19BTFVfQUxQSEFfSU5TVF80OAorMHg0QTg0IFVTX0FMVV9BTFBIQV9JTlNUXzQ5CisweDRBODggVVNfQUxVX0FMUEhBX0lOU1RfNTAKKzB4NEE4QyBVU19BTFVfQUxQSEFfSU5TVF81MQorMHg0QTkwIFVTX0FMVV9BTFBIQV9JTlNUXzUyCisweDRBOTQgVVNfQUxVX0FMUEhBX0lOU1RfNTMKKzB4NEE5OCBVU19BTFVfQUxQSEFfSU5TVF81NAorMHg0QTlDIFVTX0FMVV9BTFBIQV9JTlNUXzU1CisweDRBQTAgVVNfQUxVX0FMUEhBX0lOU1RfNTYKKzB4NEFBNCBVU19BTFVfQUxQSEFfSU5TVF81NworMHg0QUE4IFVTX0FMVV9BTFBIQV9JTlNUXzU4CisweDRBQUMgVVNfQUxVX0FMUEhBX0lOU1RfNTkKKzB4NEFCMCBVU19BTFVfQUxQSEFfSU5TVF82MAorMHg0QUI0IFVTX0FMVV9BTFBIQV9JTlNUXzYxCisweDRBQjggVVNfQUxVX0FMUEhBX0lOU1RfNjIKKzB4NEFCQyBVU19BTFVfQUxQSEFfSU5TVF82MworMHg0QkMwIEZHX0ZPR19CTEVORAorMHg0QkM0IEZHX0ZPR19GQUNUT1IKKzB4NEJDOCBGR19GT0dfQ09MT1JfUgorMHg0QkNDIEZHX0ZPR19DT0xPUl9HCisweDRCRDAgRkdfRk9HX0NPTE9SX0IKKzB4NEJENCBGR19BTFBIQV9GVU5DCisweDRCRDggRkdfREVQVEhfU1JDCisweDRDMDAgVVNfQUxVX0NPTlNUX1JfMAorMHg0QzA0IFVTX0FMVV9DT05TVF9HXzAKKzB4NEMwOCBVU19BTFVfQ09OU1RfQl8wCisweDRDMEMgVVNfQUxVX0NPTlNUX0FfMAorMHg0QzEwIFVTX0FMVV9DT05TVF9SXzEKKzB4NEMxNCBVU19BTFVfQ09OU1RfR18xCisweDRDMTggVVNfQUxVX0NPTlNUX0JfMQorMHg0QzFDIFVTX0FMVV9DT05TVF9BXzEKKzB4NEMyMCBVU19BTFVfQ09OU1RfUl8yCisweDRDMjQgVVNfQUxVX0NPTlNUX0dfMgorMHg0QzI4IFVTX0FMVV9DT05TVF9CXzIKKzB4NEMyQyBVU19BTFVfQ09OU1RfQV8yCisweDRDMzAgVVNfQUxVX0NPTlNUX1JfMworMHg0QzM0IFVTX0FMVV9DT05TVF9HXzMKKzB4NEMzOCBVU19BTFVfQ09OU1RfQl8zCisweDRDM0MgVVNfQUxVX0NPTlNUX0FfMworMHg0QzQwIFVTX0FMVV9DT05TVF9SXzQKKzB4NEM0NCBVU19BTFVfQ09OU1RfR180CisweDRDNDggVVNfQUxVX0NPTlNUX0JfNAorMHg0QzRDIFVTX0FMVV9DT05TVF9BXzQKKzB4NEM1MCBVU19BTFVfQ09OU1RfUl81CisweDRDNTQgVVNfQUxVX0NPTlNUX0dfNQorMHg0QzU4IFVTX0FMVV9DT05TVF9CXzUKKzB4NEM1QyBVU19BTFVfQ09OU1RfQV81CisweDRDNjAgVVNfQUxVX0NPTlNUX1JfNgorMHg0QzY0IFVTX0FMVV9DT05TVF9HXzYKKzB4NEM2OCBVU19BTFVfQ09OU1RfQl82CisweDRDNkMgVVNfQUxVX0NPTlNUX0FfNgorMHg0QzcwIFVTX0FMVV9DT05TVF9SXzcKKzB4NEM3NCBVU19BTFVfQ09OU1RfR183CisweDRDNzggVVNfQUxVX0NPTlNUX0JfNworMHg0QzdDIFVTX0FMVV9DT05TVF9BXzcKKzB4NEM4MCBVU19BTFVfQ09OU1RfUl84CisweDRDODQgVVNfQUxVX0NPTlNUX0dfOAorMHg0Qzg4IFVTX0FMVV9DT05TVF9CXzgKKzB4NEM4QyBVU19BTFVfQ09OU1RfQV84CisweDRDOTAgVVNfQUxVX0NPTlNUX1JfOQorMHg0Qzk0IFVTX0FMVV9DT05TVF9HXzkKKzB4NEM5OCBVU19BTFVfQ09OU1RfQl85CisweDRDOUMgVVNfQUxVX0NPTlNUX0FfOQorMHg0Q0EwIFVTX0FMVV9DT05TVF9SXzEwCisweDRDQTQgVVNfQUxVX0NPTlNUX0dfMTAKKzB4NENBOCBVU19BTFVfQ09OU1RfQl8xMAorMHg0Q0FDIFVTX0FMVV9DT05TVF9BXzEwCisweDRDQjAgVVNfQUxVX0NPTlNUX1JfMTEKKzB4NENCNCBVU19BTFVfQ09OU1RfR18xMQorMHg0Q0I4IFVTX0FMVV9DT05TVF9CXzExCisweDRDQkMgVVNfQUxVX0NPTlNUX0FfMTEKKzB4NENDMCBVU19BTFVfQ09OU1RfUl8xMgorMHg0Q0M0IFVTX0FMVV9DT05TVF9HXzEyCisweDRDQzggVVNfQUxVX0NPTlNUX0JfMTIKKzB4NENDQyBVU19BTFVfQ09OU1RfQV8xMgorMHg0Q0QwIFVTX0FMVV9DT05TVF9SXzEzCisweDRDRDQgVVNfQUxVX0NPTlNUX0dfMTMKKzB4NENEOCBVU19BTFVfQ09OU1RfQl8xMworMHg0Q0RDIFVTX0FMVV9DT05TVF9BXzEzCisweDRDRTAgVVNfQUxVX0NPTlNUX1JfMTQKKzB4NENFNCBVU19BTFVfQ09OU1RfR18xNAorMHg0Q0U4IFVTX0FMVV9DT05TVF9CXzE0CisweDRDRUMgVVNfQUxVX0NPTlNUX0FfMTQKKzB4NENGMCBVU19BTFVfQ09OU1RfUl8xNQorMHg0Q0Y0IFVTX0FMVV9DT05TVF9HXzE1CisweDRDRjggVVNfQUxVX0NPTlNUX0JfMTUKKzB4NENGQyBVU19BTFVfQ09OU1RfQV8xNQorMHg0RDAwIFVTX0FMVV9DT05TVF9SXzE2CisweDREMDQgVVNfQUxVX0NPTlNUX0dfMTYKKzB4NEQwOCBVU19BTFVfQ09OU1RfQl8xNgorMHg0RDBDIFVTX0FMVV9DT05TVF9BXzE2CisweDREMTAgVVNfQUxVX0NPTlNUX1JfMTcKKzB4NEQxNCBVU19BTFVfQ09OU1RfR18xNworMHg0RDE4IFVTX0FMVV9DT05TVF9CXzE3CisweDREMUMgVVNfQUxVX0NPTlNUX0FfMTcKKzB4NEQyMCBVU19BTFVfQ09OU1RfUl8xOAorMHg0RDI0IFVTX0FMVV9DT05TVF9HXzE4CisweDREMjggVVNfQUxVX0NPTlNUX0JfMTgKKzB4NEQyQyBVU19BTFVfQ09OU1RfQV8xOAorMHg0RDMwIFVTX0FMVV9DT05TVF9SXzE5CisweDREMzQgVVNfQUxVX0NPTlNUX0dfMTkKKzB4NEQzOCBVU19BTFVfQ09OU1RfQl8xOQorMHg0RDNDIFVTX0FMVV9DT05TVF9BXzE5CisweDRENDAgVVNfQUxVX0NPTlNUX1JfMjAKKzB4NEQ0NCBVU19BTFVfQ09OU1RfR18yMAorMHg0RDQ4IFVTX0FMVV9DT05TVF9CXzIwCisweDRENEMgVVNfQUxVX0NPTlNUX0FfMjAKKzB4NEQ1MCBVU19BTFVfQ09OU1RfUl8yMQorMHg0RDU0IFVTX0FMVV9DT05TVF9HXzIxCisweDRENTggVVNfQUxVX0NPTlNUX0JfMjEKKzB4NEQ1QyBVU19BTFVfQ09OU1RfQV8yMQorMHg0RDYwIFVTX0FMVV9DT05TVF9SXzIyCisweDRENjQgVVNfQUxVX0NPTlNUX0dfMjIKKzB4NEQ2OCBVU19BTFVfQ09OU1RfQl8yMgorMHg0RDZDIFVTX0FMVV9DT05TVF9BXzIyCisweDRENzAgVVNfQUxVX0NPTlNUX1JfMjMKKzB4NEQ3NCBVU19BTFVfQ09OU1RfR18yMworMHg0RDc4IFVTX0FMVV9DT05TVF9CXzIzCisweDREN0MgVVNfQUxVX0NPTlNUX0FfMjMKKzB4NEQ4MCBVU19BTFVfQ09OU1RfUl8yNAorMHg0RDg0IFVTX0FMVV9DT05TVF9HXzI0CisweDREODggVVNfQUxVX0NPTlNUX0JfMjQKKzB4NEQ4QyBVU19BTFVfQ09OU1RfQV8yNAorMHg0RDkwIFVTX0FMVV9DT05TVF9SXzI1CisweDREOTQgVVNfQUxVX0NPTlNUX0dfMjUKKzB4NEQ5OCBVU19BTFVfQ09OU1RfQl8yNQorMHg0RDlDIFVTX0FMVV9DT05TVF9BXzI1CisweDREQTAgVVNfQUxVX0NPTlNUX1JfMjYKKzB4NERBNCBVU19BTFVfQ09OU1RfR18yNgorMHg0REE4IFVTX0FMVV9DT05TVF9CXzI2CisweDREQUMgVVNfQUxVX0NPTlNUX0FfMjYKKzB4NERCMCBVU19BTFVfQ09OU1RfUl8yNworMHg0REI0IFVTX0FMVV9DT05TVF9HXzI3CisweDREQjggVVNfQUxVX0NPTlNUX0JfMjcKKzB4NERCQyBVU19BTFVfQ09OU1RfQV8yNworMHg0REMwIFVTX0FMVV9DT05TVF9SXzI4CisweDREQzQgVVNfQUxVX0NPTlNUX0dfMjgKKzB4NERDOCBVU19BTFVfQ09OU1RfQl8yOAorMHg0RENDIFVTX0FMVV9DT05TVF9BXzI4CisweDRERDAgVVNfQUxVX0NPTlNUX1JfMjkKKzB4NERENCBVU19BTFVfQ09OU1RfR18yOQorMHg0REQ4IFVTX0FMVV9DT05TVF9CXzI5CisweDREREMgVVNfQUxVX0NPTlNUX0FfMjkKKzB4NERFMCBVU19BTFVfQ09OU1RfUl8zMAorMHg0REU0IFVTX0FMVV9DT05TVF9HXzMwCisweDRERTggVVNfQUxVX0NPTlNUX0JfMzAKKzB4NERFQyBVU19BTFVfQ09OU1RfQV8zMAorMHg0REYwIFVTX0FMVV9DT05TVF9SXzMxCisweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKKzB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQorMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCisweDRFMDQgUkIzRF9CTEVORENOVExfUjMKKzB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKKzB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSworMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKKzB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCisweDRFMTggUkIzRF9ST1BDTlRMX1IzCisweDRFMUMgUkIzRF9DTFJDTVBfRkxJUEVfUjMKKzB4NEUyMCBSQjNEX0NMUkNNUF9DTFJfUjMKKzB4NEUyNCBSQjNEX0NMUkNNUF9NU0tfUjMKKzB4NEU0OCBSQjNEX0RFQlVHX0NUTAorMHg0RTRDIFJCM0RfRFNUQ0FDSEVfQ1RMU1RBVF9SMworMHg0RTUwIFJCM0RfRElUSEVSX0NUTAorMHg0RTU0IFJCM0RfQ01BU0tfT0ZGU0VUMAorMHg0RTU4IFJCM0RfQ01BU0tfT0ZGU0VUMQorMHg0RTVDIFJCM0RfQ01BU0tfT0ZGU0VUMgorMHg0RTYwIFJCM0RfQ01BU0tfT0ZGU0VUMworMHg0RTY0IFJCM0RfQ01BU0tfUElUQ0gwCisweDRFNjggUkIzRF9DTUFTS19QSVRDSDEKKzB4NEU2QyBSQjNEX0NNQVNLX1BJVENIMgorMHg0RTcwIFJCM0RfQ01BU0tfUElUQ0gzCisweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCisweDRFNzggUkIzRF9DTUFTS19EV09SRAorMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAorMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAorMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICisweDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCisweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECisweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECisweDRGMDQgWkJfWlNURU5DSUxDTlRMCisweDRGMDggWkJfU1RFTkNJTFJFRk1BU0sKKzB4NEYxNCBaQl9aVE9QCisweDRGMTggWkJfWkNBQ0hFX0NUTFNUQVQKKzB4NEYxQyBaQl9CV19DTlRMCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCisweDRGMzAgWkJfWk1BU0tfT0ZGU0VUCisweDRGMzQgWkJfWk1BU0tfUElUQ0gKKzB4NEYzOCBaQl9aTUFTS19XUklOREVYCisweDRGM0MgWkJfWk1BU0tfRFdPUkQKKzB4NEY0MCBaQl9aTUFTS19SRElOREVYCisweDRGNDQgWkJfSElaX09GRlNFVAorMHg0RjQ4IFpCX0hJWl9XUklOREVYCisweDRGNEMgWkJfSElaX0RXT1JECisweDRGNTAgWkJfSElaX1JESU5ERVgKKzB4NEY1NCBaQl9ISVpfUElUQ0gKKzB4NEY1OCBaQl9aUEFTU19EQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1IGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTAyYTBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQpAQCAtMCwwICsxLDQ4NiBAQAorcnY1MTUgMHg2ZDQwCisweDE0MzQgU1JDX1lfWAorMHgxNDM4IERTVF9ZX1gKKzB4MTQzQyBEU1RfSEVJR0hUX1dJRFRICisweDE0NkMgRFBfR1VJX01BU1RFUl9DTlRMCisweDE0NzQgQlJVU0hfWV9YCisweDE0NzggRFBfQlJVU0hfQktHRF9DTFIKKzB4MTQ3QyBEUF9CUlVTSF9GUkdEX0NMUgorMHgxNDgwIEJSVVNIX0RBVEEwCisweDE0ODQgQlJVU0hfREFUQTEKKzB4MTU5OCBEU1RfV0lEVEhfSEVJR0hUCisweDE1QzAgQ0xSX0NNUF9DTlRMCisweDE1QzQgQ0xSX0NNUF9DTFJfU1JDCisweDE1QzggQ0xSX0NNUF9DTFJfRFNUCisweDE1Q0MgQ0xSX0NNUF9NU0sKKzB4MTVEOCBEUF9TUkNfRlJHRF9DTFIKKzB4MTVEQyBEUF9TUkNfQktHRF9DTFIKKzB4MTYwMCBEU1RfTElORV9TVEFSVAorMHgxNjA0IERTVF9MSU5FX0VORAorMHgxNjA4IERTVF9MSU5FX1BBVENPVU5UCisweDE2QzAgRFBfQ05UTAorMHgxNkNDIERQX1dSSVRFX01TSworMHgxNkQwIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUgorMHgxNkU4IERFRkFVTFRfU0NfQk9UVE9NX1JJR0hUCisweDE2RUMgU0NfVE9QX0xFRlQKKzB4MTZGMCBTQ19CT1RUT01fUklHSFQKKzB4MTZGNCBTUkNfU0NfQk9UVE9NX1JJR0hUCisweDE3MTQgRFNUQ0FDSEVfQ1RMU1RBVAorMHgxNzIwIFdBSVRfVU5USUwKKzB4MTcyQyBSQkJNX0dVSUNOVEwKKzB4MUQ5OCBWQVBfVlBPUlRfWFNDQUxFCisweDFEOUMgVkFQX1ZQT1JUX1hPRkZTRVQKKzB4MURBMCBWQVBfVlBPUlRfWVNDQUxFCisweDFEQTQgVkFQX1ZQT1JUX1lPRkZTRVQKKzB4MURBOCBWQVBfVlBPUlRfWlNDQUxFCisweDFEQUMgVkFQX1ZQT1JUX1pPRkZTRVQKKzB4MjA4MCBWQVBfQ05UTAorMHgyMDkwIFZBUF9PVVRfVlRYX0ZNVF8wCisweDIwOTQgVkFQX09VVF9WVFhfRk1UXzEKKzB4MjBCMCBWQVBfVlRFX0NOVEwKKzB4MjEzOCBWQVBfVkZfTUlOX1ZUWF9JTkRYCisweDIxNDAgVkFQX0NOVExfU1RBVFVTCisweDIxNTAgVkFQX1BST0dfU1RSRUFNX0NOVExfMAorMHgyMTU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzEKKzB4MjE1OCBWQVBfUFJPR19TVFJFQU1fQ05UTF8yCisweDIxNUMgVkFQX1BST0dfU1RSRUFNX0NOVExfMworMHgyMTYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzQKKzB4MjE2NCBWQVBfUFJPR19TVFJFQU1fQ05UTF81CisweDIxNjggVkFQX1BST0dfU1RSRUFNX0NOVExfNgorMHgyMTZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzcKKzB4MjE4MCBWQVBfVlRYX1NUQVRFX0NOVEwKKzB4MjE4NCBWQVBfVlNNX1ZUWF9BU1NNCisweDIxODggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzAKKzB4MjE4QyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMQorMHgyMTkwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18yCisweDIxOTQgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzMKKzB4MjE5OCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNAorMHgyMTlDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR181CisweDIxQTAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzYKKzB4MjFBNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNworMHgyMUE4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR184CisweDIxQUMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzkKKzB4MjFCMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTAKKzB4MjFCNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTEKKzB4MjFCOCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTIKKzB4MjFCQyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTMKKzB4MjFDMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTQKKzB4MjFDNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTUKKzB4MjFEQyBWQVBfUFNDX1NHTl9OT1JNX0NOVEwKKzB4MjFFMCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMAorMHgyMUU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8xCisweDIxRTggVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzIKKzB4MjFFQyBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMworMHgyMUYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF80CisweDIxRjQgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzUKKzB4MjFGOCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNgorMHgyMUZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF83CisweDIyMDAgVkFQX1BWU19WRUNUT1JfSU5EWF9SRUcKKzB4MjIwNCBWQVBfUFZTX1ZFQ1RPUl9EQVRBX1JFRworMHgyMjA4IFZBUF9QVlNfVkVDVE9SX0RBVEFfUkVHXzEyOAorMHgyMjE4IFZBUF9URVhfVE9fQ09MT1JfQ05UTAorMHgyMjFDIFZBUF9DTElQX0NOVEwKKzB4MjIyMCBWQVBfR0JfVkVSVF9DTElQX0FESgorMHgyMjI0IFZBUF9HQl9WRVJUX0RJU0NfQURKCisweDIyMjggVkFQX0dCX0hPUlpfQ0xJUF9BREoKKzB4MjIyQyBWQVBfR0JfSE9SWl9ESVNDX0FESgorMHgyMjMwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzAKKzB4MjIzNCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xCisweDIyMzggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMgorMHgyMjNDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzMKKzB4MjI0MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU180CisweDIyNDQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNQorMHgyMjQ4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzYKKzB4MjI0QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU183CisweDIyNTAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfOAorMHgyMjU0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzkKKzB4MjI1OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMAorMHgyMjVDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzExCisweDIyNjAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTIKKzB4MjI2NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMworMHgyMjY4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzE0CisweDIyNkMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTUKKzB4MjI4NCBWQVBfUFZTX1NUQVRFX0ZMVVNIX1JFRworMHgyMjg4IFZBUF9QVlNfVlRYX1RJTUVPVVRfUkVHCisweDIyOTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8wCisweDIyOTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xCisweDIyOTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8yCisweDIyOUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8zCisweDIyQTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF80CisweDIyQTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF81CisweDIyQTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF82CisweDIyQUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF83CisweDIyQjAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF84CisweDIyQjQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF85CisweDIyQjggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMAorMHgyMkJDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTEKKzB4MjJDMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEyCisweDIyQzQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMworMHgyMkM4IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTQKKzB4MjJDQyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzE1CisweDIyRDAgVkFQX1BWU19DT0RFX0NOVExfMAorMHgyMkQ0IFZBUF9QVlNfQ09OU1RfQ05UTAorMHgyMkQ4IFZBUF9QVlNfQ09ERV9DTlRMXzEKKzB4MjJEQyBWQVBfUFZTX0ZMT1dfQ05UTF9PUEMKKzB4MjUwMCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV18wCisweDI1MDQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfMAorMHgyNTA4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzEKKzB4MjUwQyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV18xCisweDI1MTAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfMgorMHgyNTE0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzIKKzB4MjUxOCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV18zCisweDI1MUMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfMworMHgyNTIwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzQKKzB4MjUyNCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV180CisweDI1MjggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfNQorMHgyNTJDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzUKKzB4MjUzMCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV182CisweDI1MzQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfNgorMHgyNTM4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzcKKzB4MjUzQyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV183CisweDI1NDAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfOAorMHgyNTQ0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzgKKzB4MjU0OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV185CisweDI1NEMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfOQorMHgyNTUwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzEwCisweDI1NTQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfMTAKKzB4MjU1OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV18xMQorMHgyNTVDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzExCisweDI1NjAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfMTIKKzB4MjU2NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV18xMgorMHgyNTY4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzEzCisweDI1NkMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfMTMKKzB4MjU3MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV18xNAorMHgyNTc0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzE0CisweDI1NzggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfMTUKKzB4MjU3QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV18xNQorMHgzNDJDIFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVAorMHg0MDAwIEdCX1ZBUF9SQVNURVJfVlRYX0ZNVF8wCisweDQwMDQgR0JfVkFQX1JBU1RFUl9WVFhfRk1UXzEKKzB4NDAwOCBHQl9FTkFCTEUKKzB4NDAxQyBHQl9TRUxFQ1QKKzB4NDAyMCBHQl9BQV9DT05GSUcKKzB4NDAyNCBHQl9GSUZPX1NJWkUKKzB4NDEwMCBUWF9JTlZBTFRBR1MKKzB4NDIwMCBHQV9QT0lOVF9TMAorMHg0MjA0IEdBX1BPSU5UX1QwCisweDQyMDggR0FfUE9JTlRfUzEKKzB4NDIwQyBHQV9QT0lOVF9UMQorMHg0MjE0IEdBX1RSSUFOR0xFX1NUSVBQTEUKKzB4NDIxQyBHQV9QT0lOVF9TSVpFCisweDQyMzAgR0FfUE9JTlRfTUlOTUFYCisweDQyMzQgR0FfTElORV9DTlRMCisweDQyMzggR0FfTElORV9TVElQUExFX0NPTkZJRworMHg0MjYwIEdBX0xJTkVfU1RJUFBMRV9WQUxVRQorMHg0MjY0IEdBX0xJTkVfUzAKKzB4NDI2OCBHQV9MSU5FX1MxCisweDQyNzggR0FfQ09MT1JfQ09OVFJPTAorMHg0MjdDIEdBX1NPTElEX1JHCisweDQyODAgR0FfU09MSURfQkEKKzB4NDI4OCBHQV9QT0xZX01PREUKKzB4NDI4QyBHQV9ST1VORF9NT0RFCisweDQyOTAgR0FfT0ZGU0VUCisweDQyOTQgR0FfRk9HX1NDQUxFCisweDQyOTggR0FfRk9HX09GRlNFVAorMHg0MkEwIFNVX1RFWF9XUkFQCisweDQyQTQgU1VfUE9MWV9PRkZTRVRfRlJPTlRfU0NBTEUKKzB4NDJBOCBTVV9QT0xZX09GRlNFVF9GUk9OVF9PRkZTRVQKKzB4NDJBQyBTVV9QT0xZX09GRlNFVF9CQUNLX1NDQUxFCisweDQyQjAgU1VfUE9MWV9PRkZTRVRfQkFDS19PRkZTRVQKKzB4NDJCNCBTVV9QT0xZX09GRlNFVF9FTkFCTEUKKzB4NDJCOCBTVV9DVUxMX01PREUKKzB4NDJDMCBTVV9ERVBUSF9TQ0FMRQorMHg0MkM0IFNVX0RFUFRIX09GRlNFVAorMHg0MkM4IFNVX1JFR19ERVNUCisweDQzMDAgUlNfQ09VTlQKKzB4NDMwNCBSU19JTlNUX0NPVU5UCisweDQwNzQgUlNfSVBfMAorMHg0MDc4IFJTX0lQXzEKKzB4NDA3QyBSU19JUF8yCisweDQwODAgUlNfSVBfMworMHg0MDg0IFJTX0lQXzQKKzB4NDA4OCBSU19JUF81CisweDQwOEMgUlNfSVBfNgorMHg0MDkwIFJTX0lQXzcKKzB4NDA5NCBSU19JUF84CisweDQwOTggUlNfSVBfOQorMHg0MDlDIFJTX0lQXzEwCisweDQwQTAgUlNfSVBfMTEKKzB4NDBBNCBSU19JUF8xMgorMHg0MEE4IFJTX0lQXzEzCisweDQwQUMgUlNfSVBfMTQKKzB4NDBCMCBSU19JUF8xNQorMHg0MzIwIFJTX0lOU1RfMAorMHg0MzI0IFJTX0lOU1RfMQorMHg0MzI4IFJTX0lOU1RfMgorMHg0MzJDIFJTX0lOU1RfMworMHg0MzMwIFJTX0lOU1RfNAorMHg0MzM0IFJTX0lOU1RfNQorMHg0MzM4IFJTX0lOU1RfNgorMHg0MzNDIFJTX0lOU1RfNworMHg0MzQwIFJTX0lOU1RfOAorMHg0MzQ0IFJTX0lOU1RfOQorMHg0MzQ4IFJTX0lOU1RfMTAKKzB4NDM0QyBSU19JTlNUXzExCisweDQzNTAgUlNfSU5TVF8xMgorMHg0MzU0IFJTX0lOU1RfMTMKKzB4NDM1OCBSU19JTlNUXzE0CisweDQzNUMgUlNfSU5TVF8xNQorMHg0M0E0IFNDX0hZUEVSWl9FTgorMHg0M0E4IFNDX0VER0VSVUxFCisweDQzQjAgU0NfQ0xJUF8wX0EKKzB4NDNCNCBTQ19DTElQXzBfQgorMHg0M0I4IFNDX0NMSVBfMV9BCisweDQzQkMgU0NfQ0xJUF8xX0IKKzB4NDNDMCBTQ19DTElQXzJfQQorMHg0M0M0IFNDX0NMSVBfMl9CCisweDQzQzggU0NfQ0xJUF8zX0EKKzB4NDNDQyBTQ19DTElQXzNfQgorMHg0M0QwIFNDX0NMSVBfUlVMRQorMHg0M0UwIFNDX1NDSVNTT1IwCisweDQzRTggU0NfU0NSRUVORE9PUgorMHg0NDQwIFRYX0ZJTFRFUjFfMAorMHg0NDQ0IFRYX0ZJTFRFUjFfMQorMHg0NDQ4IFRYX0ZJTFRFUjFfMgorMHg0NDRDIFRYX0ZJTFRFUjFfMworMHg0NDUwIFRYX0ZJTFRFUjFfNAorMHg0NDU0IFRYX0ZJTFRFUjFfNQorMHg0NDU4IFRYX0ZJTFRFUjFfNgorMHg0NDVDIFRYX0ZJTFRFUjFfNworMHg0NDYwIFRYX0ZJTFRFUjFfOAorMHg0NDY0IFRYX0ZJTFRFUjFfOQorMHg0NDY4IFRYX0ZJTFRFUjFfMTAKKzB4NDQ2QyBUWF9GSUxURVIxXzExCisweDQ0NzAgVFhfRklMVEVSMV8xMgorMHg0NDc0IFRYX0ZJTFRFUjFfMTMKKzB4NDQ3OCBUWF9GSUxURVIxXzE0CisweDQ0N0MgVFhfRklMVEVSMV8xNQorMHg0NTgwIFRYX0NIUk9NQV9LRVlfMAorMHg0NTg0IFRYX0NIUk9NQV9LRVlfMQorMHg0NTg4IFRYX0NIUk9NQV9LRVlfMgorMHg0NThDIFRYX0NIUk9NQV9LRVlfMworMHg0NTkwIFRYX0NIUk9NQV9LRVlfNAorMHg0NTk0IFRYX0NIUk9NQV9LRVlfNQorMHg0NTk4IFRYX0NIUk9NQV9LRVlfNgorMHg0NTlDIFRYX0NIUk9NQV9LRVlfNworMHg0NUEwIFRYX0NIUk9NQV9LRVlfOAorMHg0NUE0IFRYX0NIUk9NQV9LRVlfOQorMHg0NUE4IFRYX0NIUk9NQV9LRVlfMTAKKzB4NDVBQyBUWF9DSFJPTUFfS0VZXzExCisweDQ1QjAgVFhfQ0hST01BX0tFWV8xMgorMHg0NUI0IFRYX0NIUk9NQV9LRVlfMTMKKzB4NDVCOCBUWF9DSFJPTUFfS0VZXzE0CisweDQ1QkMgVFhfQ0hST01BX0tFWV8xNQorMHg0NUMwIFRYX0JPUkRFUl9DT0xPUl8wCisweDQ1QzQgVFhfQk9SREVSX0NPTE9SXzEKKzB4NDVDOCBUWF9CT1JERVJfQ09MT1JfMgorMHg0NUNDIFRYX0JPUkRFUl9DT0xPUl8zCisweDQ1RDAgVFhfQk9SREVSX0NPTE9SXzQKKzB4NDVENCBUWF9CT1JERVJfQ09MT1JfNQorMHg0NUQ4IFRYX0JPUkRFUl9DT0xPUl82CisweDQ1REMgVFhfQk9SREVSX0NPTE9SXzcKKzB4NDVFMCBUWF9CT1JERVJfQ09MT1JfOAorMHg0NUU0IFRYX0JPUkRFUl9DT0xPUl85CisweDQ1RTggVFhfQk9SREVSX0NPTE9SXzEwCisweDQ1RUMgVFhfQk9SREVSX0NPTE9SXzExCisweDQ1RjAgVFhfQk9SREVSX0NPTE9SXzEyCisweDQ1RjQgVFhfQk9SREVSX0NPTE9SXzEzCisweDQ1RjggVFhfQk9SREVSX0NPTE9SXzE0CisweDQ1RkMgVFhfQk9SREVSX0NPTE9SXzE1CisweDQyNTAgR0FfVVNfVkVDVE9SX0lOREVYCisweDQyNTQgR0FfVVNfVkVDVE9SX0RBVEEKKzB4NDYwMCBVU19DT05GSUcKKzB4NDYwNCBVU19QSVhTSVpFCisweDQ2MjAgVVNfRkNfQk9PTF9DT05TVAorMHg0NjI0IFVTX0ZDX0NUUkwKKzB4NDYzMCBVU19DT0RFX0FERFIKKzB4NDYzNCBVU19DT0RFX1JBTkdFCisweDQ2MzggVVNfQ09ERV9PRkZTRVQKKzB4NDZBNCBVU19PVVRfRk1UXzAKKzB4NDZBOCBVU19PVVRfRk1UXzEKKzB4NDZBQyBVU19PVVRfRk1UXzIKKzB4NDZCMCBVU19PVVRfRk1UXzMKKzB4NDZCNCBVU19XX0ZNVAorMHg0QkMwIEZHX0ZPR19CTEVORAorMHg0QkM0IEZHX0ZPR19GQUNUT1IKKzB4NEJDOCBGR19GT0dfQ09MT1JfUgorMHg0QkNDIEZHX0ZPR19DT0xPUl9HCisweDRCRDAgRkdfRk9HX0NPTE9SX0IKKzB4NEJENCBGR19BTFBIQV9GVU5DCisweDRCRDggRkdfREVQVEhfU1JDCisweDRDMDAgVVNfQUxVX0NPTlNUX1JfMAorMHg0QzA0IFVTX0FMVV9DT05TVF9HXzAKKzB4NEMwOCBVU19BTFVfQ09OU1RfQl8wCisweDRDMEMgVVNfQUxVX0NPTlNUX0FfMAorMHg0QzEwIFVTX0FMVV9DT05TVF9SXzEKKzB4NEMxNCBVU19BTFVfQ09OU1RfR18xCisweDRDMTggVVNfQUxVX0NPTlNUX0JfMQorMHg0QzFDIFVTX0FMVV9DT05TVF9BXzEKKzB4NEMyMCBVU19BTFVfQ09OU1RfUl8yCisweDRDMjQgVVNfQUxVX0NPTlNUX0dfMgorMHg0QzI4IFVTX0FMVV9DT05TVF9CXzIKKzB4NEMyQyBVU19BTFVfQ09OU1RfQV8yCisweDRDMzAgVVNfQUxVX0NPTlNUX1JfMworMHg0QzM0IFVTX0FMVV9DT05TVF9HXzMKKzB4NEMzOCBVU19BTFVfQ09OU1RfQl8zCisweDRDM0MgVVNfQUxVX0NPTlNUX0FfMworMHg0QzQwIFVTX0FMVV9DT05TVF9SXzQKKzB4NEM0NCBVU19BTFVfQ09OU1RfR180CisweDRDNDggVVNfQUxVX0NPTlNUX0JfNAorMHg0QzRDIFVTX0FMVV9DT05TVF9BXzQKKzB4NEM1MCBVU19BTFVfQ09OU1RfUl81CisweDRDNTQgVVNfQUxVX0NPTlNUX0dfNQorMHg0QzU4IFVTX0FMVV9DT05TVF9CXzUKKzB4NEM1QyBVU19BTFVfQ09OU1RfQV81CisweDRDNjAgVVNfQUxVX0NPTlNUX1JfNgorMHg0QzY0IFVTX0FMVV9DT05TVF9HXzYKKzB4NEM2OCBVU19BTFVfQ09OU1RfQl82CisweDRDNkMgVVNfQUxVX0NPTlNUX0FfNgorMHg0QzcwIFVTX0FMVV9DT05TVF9SXzcKKzB4NEM3NCBVU19BTFVfQ09OU1RfR183CisweDRDNzggVVNfQUxVX0NPTlNUX0JfNworMHg0QzdDIFVTX0FMVV9DT05TVF9BXzcKKzB4NEM4MCBVU19BTFVfQ09OU1RfUl84CisweDRDODQgVVNfQUxVX0NPTlNUX0dfOAorMHg0Qzg4IFVTX0FMVV9DT05TVF9CXzgKKzB4NEM4QyBVU19BTFVfQ09OU1RfQV84CisweDRDOTAgVVNfQUxVX0NPTlNUX1JfOQorMHg0Qzk0IFVTX0FMVV9DT05TVF9HXzkKKzB4NEM5OCBVU19BTFVfQ09OU1RfQl85CisweDRDOUMgVVNfQUxVX0NPTlNUX0FfOQorMHg0Q0EwIFVTX0FMVV9DT05TVF9SXzEwCisweDRDQTQgVVNfQUxVX0NPTlNUX0dfMTAKKzB4NENBOCBVU19BTFVfQ09OU1RfQl8xMAorMHg0Q0FDIFVTX0FMVV9DT05TVF9BXzEwCisweDRDQjAgVVNfQUxVX0NPTlNUX1JfMTEKKzB4NENCNCBVU19BTFVfQ09OU1RfR18xMQorMHg0Q0I4IFVTX0FMVV9DT05TVF9CXzExCisweDRDQkMgVVNfQUxVX0NPTlNUX0FfMTEKKzB4NENDMCBVU19BTFVfQ09OU1RfUl8xMgorMHg0Q0M0IFVTX0FMVV9DT05TVF9HXzEyCisweDRDQzggVVNfQUxVX0NPTlNUX0JfMTIKKzB4NENDQyBVU19BTFVfQ09OU1RfQV8xMgorMHg0Q0QwIFVTX0FMVV9DT05TVF9SXzEzCisweDRDRDQgVVNfQUxVX0NPTlNUX0dfMTMKKzB4NENEOCBVU19BTFVfQ09OU1RfQl8xMworMHg0Q0RDIFVTX0FMVV9DT05TVF9BXzEzCisweDRDRTAgVVNfQUxVX0NPTlNUX1JfMTQKKzB4NENFNCBVU19BTFVfQ09OU1RfR18xNAorMHg0Q0U4IFVTX0FMVV9DT05TVF9CXzE0CisweDRDRUMgVVNfQUxVX0NPTlNUX0FfMTQKKzB4NENGMCBVU19BTFVfQ09OU1RfUl8xNQorMHg0Q0Y0IFVTX0FMVV9DT05TVF9HXzE1CisweDRDRjggVVNfQUxVX0NPTlNUX0JfMTUKKzB4NENGQyBVU19BTFVfQ09OU1RfQV8xNQorMHg0RDAwIFVTX0FMVV9DT05TVF9SXzE2CisweDREMDQgVVNfQUxVX0NPTlNUX0dfMTYKKzB4NEQwOCBVU19BTFVfQ09OU1RfQl8xNgorMHg0RDBDIFVTX0FMVV9DT05TVF9BXzE2CisweDREMTAgVVNfQUxVX0NPTlNUX1JfMTcKKzB4NEQxNCBVU19BTFVfQ09OU1RfR18xNworMHg0RDE4IFVTX0FMVV9DT05TVF9CXzE3CisweDREMUMgVVNfQUxVX0NPTlNUX0FfMTcKKzB4NEQyMCBVU19BTFVfQ09OU1RfUl8xOAorMHg0RDI0IFVTX0FMVV9DT05TVF9HXzE4CisweDREMjggVVNfQUxVX0NPTlNUX0JfMTgKKzB4NEQyQyBVU19BTFVfQ09OU1RfQV8xOAorMHg0RDMwIFVTX0FMVV9DT05TVF9SXzE5CisweDREMzQgVVNfQUxVX0NPTlNUX0dfMTkKKzB4NEQzOCBVU19BTFVfQ09OU1RfQl8xOQorMHg0RDNDIFVTX0FMVV9DT05TVF9BXzE5CisweDRENDAgVVNfQUxVX0NPTlNUX1JfMjAKKzB4NEQ0NCBVU19BTFVfQ09OU1RfR18yMAorMHg0RDQ4IFVTX0FMVV9DT05TVF9CXzIwCisweDRENEMgVVNfQUxVX0NPTlNUX0FfMjAKKzB4NEQ1MCBVU19BTFVfQ09OU1RfUl8yMQorMHg0RDU0IFVTX0FMVV9DT05TVF9HXzIxCisweDRENTggVVNfQUxVX0NPTlNUX0JfMjEKKzB4NEQ1QyBVU19BTFVfQ09OU1RfQV8yMQorMHg0RDYwIFVTX0FMVV9DT05TVF9SXzIyCisweDRENjQgVVNfQUxVX0NPTlNUX0dfMjIKKzB4NEQ2OCBVU19BTFVfQ09OU1RfQl8yMgorMHg0RDZDIFVTX0FMVV9DT05TVF9BXzIyCisweDRENzAgVVNfQUxVX0NPTlNUX1JfMjMKKzB4NEQ3NCBVU19BTFVfQ09OU1RfR18yMworMHg0RDc4IFVTX0FMVV9DT05TVF9CXzIzCisweDREN0MgVVNfQUxVX0NPTlNUX0FfMjMKKzB4NEQ4MCBVU19BTFVfQ09OU1RfUl8yNAorMHg0RDg0IFVTX0FMVV9DT05TVF9HXzI0CisweDREODggVVNfQUxVX0NPTlNUX0JfMjQKKzB4NEQ4QyBVU19BTFVfQ09OU1RfQV8yNAorMHg0RDkwIFVTX0FMVV9DT05TVF9SXzI1CisweDREOTQgVVNfQUxVX0NPTlNUX0dfMjUKKzB4NEQ5OCBVU19BTFVfQ09OU1RfQl8yNQorMHg0RDlDIFVTX0FMVV9DT05TVF9BXzI1CisweDREQTAgVVNfQUxVX0NPTlNUX1JfMjYKKzB4NERBNCBVU19BTFVfQ09OU1RfR18yNgorMHg0REE4IFVTX0FMVV9DT05TVF9CXzI2CisweDREQUMgVVNfQUxVX0NPTlNUX0FfMjYKKzB4NERCMCBVU19BTFVfQ09OU1RfUl8yNworMHg0REI0IFVTX0FMVV9DT05TVF9HXzI3CisweDREQjggVVNfQUxVX0NPTlNUX0JfMjcKKzB4NERCQyBVU19BTFVfQ09OU1RfQV8yNworMHg0REMwIFVTX0FMVV9DT05TVF9SXzI4CisweDREQzQgVVNfQUxVX0NPTlNUX0dfMjgKKzB4NERDOCBVU19BTFVfQ09OU1RfQl8yOAorMHg0RENDIFVTX0FMVV9DT05TVF9BXzI4CisweDRERDAgVVNfQUxVX0NPTlNUX1JfMjkKKzB4NERENCBVU19BTFVfQ09OU1RfR18yOQorMHg0REQ4IFVTX0FMVV9DT05TVF9CXzI5CisweDREREMgVVNfQUxVX0NPTlNUX0FfMjkKKzB4NERFMCBVU19BTFVfQ09OU1RfUl8zMAorMHg0REU0IFVTX0FMVV9DT05TVF9HXzMwCisweDRERTggVVNfQUxVX0NPTlNUX0JfMzAKKzB4NERFQyBVU19BTFVfQ09OU1RfQV8zMAorMHg0REYwIFVTX0FMVV9DT05TVF9SXzMxCisweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKKzB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQorMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCisweDRFMDQgUkIzRF9CTEVORENOVExfUjMKKzB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKKzB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSworMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKKzB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCisweDRFMTggUkIzRF9ST1BDTlRMX1IzCisweDRFMUMgUkIzRF9DTFJDTVBfRkxJUEVfUjMKKzB4NEUyMCBSQjNEX0NMUkNNUF9DTFJfUjMKKzB4NEUyNCBSQjNEX0NMUkNNUF9NU0tfUjMKKzB4NEU0OCBSQjNEX0RFQlVHX0NUTAorMHg0RTRDIFJCM0RfRFNUQ0FDSEVfQ1RMU1RBVF9SMworMHg0RTUwIFJCM0RfRElUSEVSX0NUTAorMHg0RTU0IFJCM0RfQ01BU0tfT0ZGU0VUMAorMHg0RTU4IFJCM0RfQ01BU0tfT0ZGU0VUMQorMHg0RTVDIFJCM0RfQ01BU0tfT0ZGU0VUMgorMHg0RTYwIFJCM0RfQ01BU0tfT0ZGU0VUMworMHg0RTY0IFJCM0RfQ01BU0tfUElUQ0gwCisweDRFNjggUkIzRF9DTUFTS19QSVRDSDEKKzB4NEU2QyBSQjNEX0NNQVNLX1BJVENIMgorMHg0RTcwIFJCM0RfQ01BU0tfUElUQ0gzCisweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCisweDRFNzggUkIzRF9DTUFTS19EV09SRAorMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAorMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAorMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICisweDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCisweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECisweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECisweDRFRjggUkIzRF9DT05TVEFOVF9DT0xPUl9BUgorMHg0RUZDIFJCM0RfQ09OU1RBTlRfQ09MT1JfR0IKKzB4NEYwNCBaQl9aU1RFTkNJTENOVEwKKzB4NEYwOCBaQl9TVEVOQ0lMUkVGTUFTSworMHg0RjE0IFpCX1pUT1AKKzB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAorMHg0RjFDIFpCX0JXX0NOVEwKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKKzB4NEYzMCBaQl9aTUFTS19PRkZTRVQKKzB4NEYzNCBaQl9aTUFTS19QSVRDSAorMHg0RjM4IFpCX1pNQVNLX1dSSU5ERVgKKzB4NEYzQyBaQl9aTUFTS19EV09SRAorMHg0RjQwIFpCX1pNQVNLX1JESU5ERVgKKzB4NEY0NCBaQl9ISVpfT0ZGU0VUCisweDRGNDggWkJfSElaX1dSSU5ERVgKKzB4NEY0QyBaQl9ISVpfRFdPUkQKKzB4NEY1MCBaQl9ISVpfUkRJTkRFWAorMHg0RjU0IFpCX0hJWl9QSVRDSAorMHg0RjU4IFpCX1pQQVNTX0RBVEEKKzB4NEZENCBaQl9TVEVOQ0lMUkVGTUFTS19CRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IGIyOWFmZmQuLmEzZmJkYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKLSNpbmNsdWRlICJyYWRlb25fc2hhcmUuaCIKIAogLyogcnM0MDAscnM0ODAgZGVwZW5kcyBvbiA6ICovCiB2b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTYzLDcgKzYyLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbmFibGUgdG8gdXNlIElHUCBHQVJUIHNpemUgJXVNXG4iLAotCQkJICByZGV2LT5tYy5ndHRfc2l6ZSA+PiAyMCk7CisJCQkgICh1bnNpZ25lZCkocmRldi0+bWMuZ3R0X3NpemUgPj4gMjApKTsKIAkJRFJNX0VSUk9SKCJWYWxpZCBHQVJUIHNpemUgZm9yIElHUCBhcmUgMzJNLDY0TSwxMjhNLDI1Nk0sNTEyTSwxRywyR1xuIik7CiAJCURSTV9FUlJPUigiRm9yY2luZyB0byAzMk0gR0FSVCBzaXplXG4iKTsKIAkJcmRldi0+bWMuZ3R0X3NpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwpAQCAtOTMsMjAgKzkyLDQxIEBACiAJV1JFRzMyX01DKFJTNDgwX0dBUlRfQ0FDSEVfQ05UUkwsIDApOwogfQogCitpbnQgcnM0MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJaWYgKHJkZXYtPmdhcnQudGFibGUucmFtLnB0cikgeworCQlXQVJOKDEsICJSUzQwMCBHQVJUIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIENoZWNrIGdhcnQgc2l6ZSAqLworCXN3aXRjaChyZGV2LT5tYy5ndHRfc2l6ZSAvICgxMDI0ICogMTAyNCkpIHsKKwljYXNlIDMyOgorCWNhc2UgNjQ6CisJY2FzZSAxMjg6CisJY2FzZSAyNTY6CisJY2FzZSA1MTI6CisJY2FzZSAxMDI0OgorCWNhc2UgMjA0ODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIEluaXRpYWxpemUgY29tbW9uIGdhcnQgc3RydWN0dXJlICovCisJciA9IHJhZGVvbl9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCWlmIChyczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQocmRldikpCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUlM0MDAgR0FSVCAhXG4iKTsKKwlyZGV2LT5nYXJ0LnRhYmxlX3NpemUgPSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA0OworCXJldHVybiByYWRlb25fZ2FydF90YWJsZV9yYW1fYWxsb2MocmRldik7Cit9CisKIGludCByczQwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCBzaXplX3JlZzsKIAl1aW50MzJfdCB0bXA7Ci0JaW50IHI7Ci0KLQkvKiBJbml0aWFsaXplIGNvbW1vbiBnYXJ0IHN0cnVjdHVyZSAqLwotCXIgPSByYWRlb25fZ2FydF9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQlpZiAocnM0MDBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUlM0MDAgR0FSVCAhXG4iKTsKLQl9CiAKIAl0bXAgPSBSUkVHMzJfTUMoUlM2OTBfQUlDX0NUUkxfU0NSQVRDSCk7CiAJdG1wIHw9IFJTNjkwX0RJU19PVVRfT0ZfUENJX0dBUlRfQUNDRVNTOwpAQCAtMTM3LDEzICsxNTcsNiBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAocmRldi0+Z2FydC50YWJsZS5yYW0ucHRyID09IE5VTEwpIHsKLQkJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogNDsKLQkJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9hbGxvYyhyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JfQogCS8qIEl0IHNob3VsZCBiZSBmaW5lIHRvIHByb2dyYW0gaXQgdG8gbWF4IHZhbHVlICovCiAJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwIHx8IChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJV1JFRzMyX01DKFJTNjkwX01DQ0ZHX0FHUF9CQVNFLCAweEZGRkZGRkZGKTsKQEAgLTIwMiw2ICsyMTUsMTMgQEAKIAlXUkVHMzJfTUMoUlM0ODBfQUdQX0FERFJFU1NfU1BBQ0VfU0laRSwgMCk7CiB9CiAKK3ZvaWQgcnM0MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyYWRlb25fZ2FydF90YWJsZV9yYW1fZnJlZShyZGV2KTsKKwlyYWRlb25fZ2FydF9maW5pKHJkZXYpOworfQorCiBpbnQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCiB7CiAJdWludDMyX3QgZW50cnk7CkBAIC0yNTYsMTQgKzI3NiwxMiBAQAogCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwogCVdSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwsIHRtcCk7CiAJKHZvaWQpUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7CisKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCByczQwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyYWRlb25fZ2FydF90YWJsZV9yYW1fZnJlZShyZGV2KTsKLQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCAwMmZkMTFhLi4wZTc5MWUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCisKKyNpbmNsdWRlICJyczYwMF9yZWdfc2FmZS5oIgogCiAvKiByczYwMCBkZXBlbmRzIG9uIDogKi8KIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtNjYsMjIgKzY5LDM1IEBACiAJdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKIH0KIAotaW50IHJzNjAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHJzNjAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCB0bXA7Ci0JaW50IGk7CiAJaW50IHI7CiAKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopIHsKKwkJV0FSTigxLCAiUlM2MDAgR0FSVCBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7CisJCXJldHVybiAwOworCX0KIAkvKiBJbml0aWFsaXplIGNvbW1vbiBnYXJ0IHN0cnVjdHVyZSAqLwogCXIgPSByYWRlb25fZ2FydF9pbml0KHJkZXYpOwogCWlmIChyKSB7CiAJCXJldHVybiByOwogCX0KIAlyZGV2LT5nYXJ0LnRhYmxlX3NpemUgPSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA4OwotCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOworCXJldHVybiByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHJkZXYpOworfQorCitpbnQgcnM2MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdWludDMyX3QgdG1wOworCWludCByLCBpOworCisJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJObyBWUkFNIG9iamVjdCBmb3IgUENJRSBHQVJULlxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwlyID0gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4ocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOwogCS8qIEZJWE1FOiBzZXR1cCBkZWZhdWx0IHBhZ2UgKi8KIAlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsCiAJCSAoUlM2MDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoNikgfApAQCAtMTM2LDggKzE1MiwxNyBAQAogCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSk7CiAJdG1wICY9IH5SUzYwMF9FTkFCTEVfUEFHRV9UQUJMRVM7CiAJV1JFRzMyX01DKFJTNjAwX01DX0NOVEwxLCB0bXApOwotCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKLQlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopIHsKKwkJcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOworCQlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKKwl9Cit9CisKK3ZvaWQgcnM2MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJzNjAwX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7CisJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAogI2RlZmluZSBSNjAwX1BURV9WQUxJRCAgICAgKDEgPDwgMCkKQEAgLTE3Myw2ICsxOTgsOCBAQAogCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAorCXJhZGVvbl9hdml2b192Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CisKIAl0bXAgPSBSUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCk7CiAJV1JFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wsIHRtcCAmIH5BVklWT19EVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUpOwogCXRtcCA9IFJSRUczMihBVklWT19EMlZHQV9DT05UUk9MKTsKQEAgLTIzMyw5ICsyNjAsNiBAQAogCiB2b2lkIHJzNjAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnM2MDBfZ2FydF9kaXNhYmxlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKLQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCiAKQEAgLTI1MSwxMSArMjc1LDkgQEAKIAkJdG1wIHw9IFJBREVPTl9TV19JTlRfRU5BQkxFOwogCX0KIAlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgewotCQl0bXAgfD0gQVZJVk9fRElTUExBWV9JTlRfU1RBVFVTOwogCQltb2RlX2ludCB8PSBBVklWT19EMU1PREVfSU5UX01BU0s7CiAJfQogCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdKSB7Ci0JCXRtcCB8PSBBVklWT19ESVNQTEFZX0lOVF9TVEFUVVM7CiAJCW1vZGVfaW50IHw9IEFWSVZPX0QyTU9ERV9JTlRfTUFTSzsKIAl9CiAJV1JFRzMyKFJBREVPTl9HRU5fSU5UX0NOVEwsIHRtcCk7CkBAIC00MTAsNjQgKzQzMiw2IEBACiAJV1JFRzMyKFJTNjAwX01DX0RBVEEsIHYpOwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgcnM2MDBfcmVnX3NhZmVfYm1bMjE5XSA9IHsKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4MTdGRjFGRkYsIDB4RkZGRkZGRkMsIDB4RkZGRkZGRkYsIDB4RkYzMEZGQkYsCi0JMHhGRkZGRkZGOCwgMHhDM0U2RkZGRiwgMHhGRkZGRjZERiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRjAzRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkVGQ0UsIDB4RjAwRUJGRkYsIDB4MDA3QzAwMDAsCi0JMHhGMDAwMDA3OCwgMHhGRjAwMDAwOSwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRjdGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkM3OCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRSwgMHhGRkZGRkZGRiwKLQkweDM4RkY4RjUwLCAweEZGRjg4MDgyLCAweEYwMDAwMDBDLCAweEZBRTAwOUZGLAotCTB4MDAwMEZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwQzEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4RkZGRjAwMDAsIDB4RkZGRkZGRkYsIDB4RkY4MEZGRkYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDNGQzAxLCAweEZGRkZGQ0Y4LCAweEZGODAwQjE5LCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotfTsKLQogaW50IHJzNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSByczYwMF9yZWdfc2FmZV9ibTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCA4Nzk4ODI1Li4wZjU4NWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC05NCw5ICs5NCw2IEBACiAKIHZvaWQgcnM2OTBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0JcmFkZW9uX2dhcnRfdGFibGVfcmFtX2ZyZWUocmRldik7Ci0JcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAogCkBAIC02NTIsNCArNjQ5LDMgQEAKIAlXUkVHMzIoUlM2OTBfTUNfREFUQSwgdik7CiAJV1JFRzMyKFJTNjkwX01DX0lOREVYLCBSUzY5MF9NQ19JTkRFWF9XUl9BQ0spOwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNzgwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNzgwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZmZjZmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczc4MC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KLSAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczogRGF2ZSBBaXJsaWUKLSAqICAgICAgICAgIEFsZXggRGV1Y2hlcgotICogICAgICAgICAgSmVyb21lIEdsaXNzZQotICovCi0jaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKLSNpbmNsdWRlICJyYWRlb24uaCIKLQotLyogcnM3ODAgIGRlcGVuZHMgb24gOiAqLwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgotICogcnM3ODAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCi1pbnQgcnM3ODBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNzgwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotCi0vKgotICogTUMKLSAqLwotaW50IHJzNzgwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcnM3ODBfZ3B1X2luaXQocmRldik7Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLwotCi0JcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHJkZXYpOwotCWlmIChyczc4MF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczc4MF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByczc4MF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcmRldi0+cGxsX2VycmF0YSA9IDA7Ci19Ci0KLWludCByczc4MF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczc4MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCi19Ci0KLQotLyoKLSAqIFZSQU0gaW5mbwotICovCi12b2lkIHJzNzgwX3ZyYW1fZ2V0X3R5cGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLwotfQotCi12b2lkIHJzNzgwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyczc4MF92cmFtX2dldF90eXBlKHJkZXYpOwotCi0JLyogRklYTUU6IGltcGxlbWVudCAqLwotCS8qIENvdWxkIGFwZXIgc2l6ZSByZXBvcnQgMCA/ICovCi0JcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKLQlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwppbmRleCAwNTY2ZmI2Li5mZDc5OTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCkBAIC0yNywxOCArMjcsMTYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJ2NTE1ci5oIgorI2luY2x1ZGUgInJ2NTE1ZC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotI2luY2x1ZGUgInJhZGVvbl9zaGFyZS5oIgogCisjaW5jbHVkZSAicnY1MTVfcmVnX3NhZmUuaCIKIC8qIHJ2NTE1IGRlcGVuZHMgb24gOiAqLwogdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9jcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9yYjJkX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2NwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjQyMF9waXBlc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTI2LDkgKzEyNCw2IEBACiAKIHZvaWQgcnY1MTVfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7Ci0JcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAogCkBAIC00NjQsMzAxICs0NTksMjQ0IEBACiAjZW5kaWYKIH0KIAotCiAvKgogICogQXNpYyBpbml0aWFsaXphdGlvbgogICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgcjUwMF9yZWdfc2FmZV9ibVsyMTldID0gewotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHgxN0ZGMUZGRiwgMHhGRkZGRkZGQywgMHhGRkZGRkZGRiwgMHhGRjMwRkZCRiwKLQkweEZGRkZGRkY4LCAweEMzRTZGRkZGLCAweEZGRkZGNkRGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGMDNGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRUZDRSwgMHhGMDBFQkZGRiwgMHgwMDdDMDAwMCwKLQkweEYwMDAwMDM4LCAweEZGMDAwMDA5LCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGN0ZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweDFGRkZGQzc4LCAweEZGRkZFMDAwLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGLAotCTB4MzhDRjhGNTAsIDB4RkZGODgwODIsIDB4RkYwMDAwRkMsIDB4RkFFMDA5RkYsCi0JMHgwMDAwRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCwKLQkweEZGRkY4Q0ZDLCAweEZGRkZDMUZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRjgwRkZGRiwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwM0ZDMDEsIDB4M0ZGRkZDRjgsIDB4RkY4MDBCMTksIDB4RkZERkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi19OwotCiBpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHI1MDBfcmVnX3NhZmVfYm07Ci0JcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjUwMF9yZWdfc2FmZV9ibSk7CisJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSBydjUxNV9yZWdfc2FmZV9ibTsKKwlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShydjUxNV9yZWdfc2FmZV9ibSk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYXRvbV9ydjUxNV9mb3JjZV90dl9zY2FsZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIGF0b21fcnY1MTVfZm9yY2VfdHZfc2NhbGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2NydGMgKmNydGMpCiB7CisJaW50IGluZGV4X3JlZyA9IDB4NjU3OCArIGNydGMtPmNydGNfb2Zmc2V0OworCWludCBkYXRhX3JlZyA9IDB4NjU3YyArIGNydGMtPmNydGNfb2Zmc2V0OwogCi0JV1JFRzMyKDB4NjU5QywgMHgwKTsKLQlXUkVHMzIoMHg2NTk0LCAweDcwNSk7Ci0JV1JFRzMyKDB4NjVBNCwgMHgxMDAwMSk7Ci0JV1JFRzMyKDB4NjVEOCwgMHgwKTsKLQlXUkVHMzIoMHg2NUIwLCAweDApOwotCVdSRUczMigweDY1QzAsIDB4MCk7Ci0JV1JFRzMyKDB4NjVENCwgMHgwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDApOwotCVdSRUczMigweDY1N0MsIDB4ODQxODgwQTgpOwotCVdSRUczMigweDY1NzgsIDB4MSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NDIwODY4MCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjg4MEIwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4M0Q4ODA4OCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgxMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODQ2MDg2ODApOwotCVdSRUczMigweDY1NzgsIDB4MTAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjA4MEQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4Mzk4ODA2OCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgyMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODRBMDg2ODApOwotCVdSRUczMigweDY1NzgsIDB4MjAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjA4MEY4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4MzU4ODA1OCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgzMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODRFMDg2NjApOwotCVdSRUczMigweDY1NzgsIDB4MzAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjg4MTIwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDQwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4MzE4ODA0MCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg0MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODUwMDg2NjApOwotCVdSRUczMigweDY1NzgsIDB4NDAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjg4MTUwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDUwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4MkQ4ODAzMCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg1MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODU0MDg2NDApOwotCVdSRUczMigweDY1NzgsIDB4NTAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjg4MTgwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDYwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4MkEwODAxOCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg2MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODU4MDg2MjApOwotCVdSRUczMigweDY1NzgsIDB4NjAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjA4MUI4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDcwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4MjYwODAxMCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg3MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODVBMDg2MDApOwotCVdSRUczMigweDY1NzgsIDB4NzAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MUYwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDgwMCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4MjI4QkZGOCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg4MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODVFMDg1RTApOwotCVdSRUczMigweDY1NzgsIDB4ODAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjg4MjI4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMDAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgyQThCRjAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMDAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgyQTA4Q0MwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMDAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDhCRUY4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgxRjBCRjI4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMTAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgzNjA4Q0EwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMTAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMThCRUQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgxNDhCRjM4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMjAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg0NDA4QzgwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMjAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDhCRUI4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwQjBCRjc4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMzAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg1MDA4QzIwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMzAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMjBCRUEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNDAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMjhCRjkwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNDAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg1RTA4QkMwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNDAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMThCRTkwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGQjhCRkIwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNTAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg2QzA4QjQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNTAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTBCRTkwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGNThCRkM4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNjAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg3QTA4QUEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNjAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTBCRTk4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGMTBCRkYwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNzAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg4NjA4OUUwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwNzAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMThCRUIwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwODAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJFRDhCRkU4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwODAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg5NDA4OTQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwODAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRThCRUQ4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMDAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMDAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDkwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMDAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMDAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMTAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhGRTBCRjcwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMTAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRTg4MEMwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMTAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMThCRkY4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMjAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhGODBCRjA4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMjAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRDA4MUEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMjAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjg4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTg4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMzAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhFRTBCRUMwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMzAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGQjA4MkEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMzAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNDAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTg4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNDAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhFMDBCRUEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNDAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGODg4M0MwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNDAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTg4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNTAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhEMDBCRTkwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNTAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGNTg4NTAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNTAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDA4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTg4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNjAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhCQzBCRTk4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNjAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGMzA4NjYwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNjAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDA4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNzAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhBODBCRUIwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNzAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGMDA4N0MwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwNzAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDA4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwODAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMTA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwODAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg5MjBCRUQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwODAyKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJFRDA4OTIwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwODAzKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMDAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDkwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMDAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgwMDA4MDAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhGRTBCRjkwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMTAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRjg4MEEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhGNjBCRjQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMjAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGRTg4MTgwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhFQzBCRjAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMzAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGQzg4MjgwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNDAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhERTBCRUUwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNDAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGQTA4M0EwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhDRTBCRUQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNTAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGNzg4NEUwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhCQTBCRUQ4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNjAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGNTA4NjQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDhBNjBCRUU4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwNzAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGMjA4N0EwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwODAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg5MDBCRjAwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwODAxKTsKLQlXUkVHMzIoMHg2NTdDLCAweEJGMDA4OTAwKTsKKwlXUkVHMzIoMHg2NTlDICsgY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4MCk7CisJV1JFRzMyKDB4NjU5NCArIGNydGMtPmNydGNfb2Zmc2V0LCAweDcwNSk7CisJV1JFRzMyKDB4NjVBNCArIGNydGMtPmNydGNfb2Zmc2V0LCAweDEwMDAxKTsKKwlXUkVHMzIoMHg2NUQ4ICsgY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4MCk7CisJV1JFRzMyKDB4NjVCMCArIGNydGMtPmNydGNfb2Zmc2V0LCAweDApOworCVdSRUczMigweDY1QzAgKyBjcnRjLT5jcnRjX29mZnNldCwgMHgwKTsKKwlXUkVHMzIoMHg2NUQ0ICsgY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODQxODgwQTgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg0MjA4NjgwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkY4ODBCMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDApOworCVdSRUczMihkYXRhX3JlZywgMHg4M0Q4ODA4OCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NDYwODY4MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkYwODBEMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDApOworCVdSRUczMihkYXRhX3JlZywgMHg4Mzk4ODA2OCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NEEwODY4MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkYwODBGOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MzU4ODA1OCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NEUwODY2MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkY4ODEyMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg0MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MzE4ODA0MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg0MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NTAwODY2MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg0MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkY4ODE1MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg1MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MkQ4ODAzMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg1MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NTQwODY0MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg1MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkY4ODE4MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg2MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MkEwODAxOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg2MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NTgwODYyMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg2MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkYwODFCOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg3MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MjYwODAxMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg3MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NUEwODYwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg3MDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODFGMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg4MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MjI4QkZGOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg4MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NUUwODVFMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHg4MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkY4ODIyOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDAwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgyQThCRjAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMDAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODJBMDhDQzApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAwMDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDA4QkVGOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDEwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgxRjBCRjI4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMTAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODM2MDhDQTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAxMDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDE4QkVEMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDIwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgxNDhCRjM4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMjAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODQ0MDhDODApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAyMDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDA4QkVCOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDMwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwQjBCRjc4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMzAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODUwMDhDMjApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAzMDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDIwQkVBMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDQwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMjhCRjkwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNDAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODVFMDhCQzApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA0MDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDE4QkU5MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDUwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGQjhCRkIwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNTAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODZDMDhCNDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA1MDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDEwQkU5MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDYwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGNThCRkM4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNjAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODdBMDhBQTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA2MDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDEwQkU5OCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDcwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGMTBCRkYwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNzAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODg2MDg5RTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA3MDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDE4QkVCMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDgwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJFRDhCRkU4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwODAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODk0MDg5NDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA4MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkU4QkVEOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDAwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMDAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OTAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAwMDIpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDAwMyk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMTAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAxMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAxMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4RkUwQkY3MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDEwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRTg4MEMwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMTAzKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAyMDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MDE4QkZGOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDIwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhGODBCRjA4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMjAyKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkZEMDgxQTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAyMDMpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkY4ODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDMwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMTg4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMzAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OEVFMEJFQzApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAzMDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkIwODJBMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDMwMyk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNDAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAxODgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA0MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4RTAwQkVBMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDQwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGODg4M0MwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNDAzKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA1MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MDE4ODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDUwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhEMDBCRTkwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNTAyKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkY1ODg1MDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA1MDMpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODAwOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDYwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMTg4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNjAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OEJDMEJFOTgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA2MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRjMwODY2MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDYwMyk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MDA4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNzAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAxMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA3MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4QTgwQkVCMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDcwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGMDA4N0MwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNzAzKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA4MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MDEwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDgwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg5MjBCRUQwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwODAyKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkVEMDg5MjApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA4MDMpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODAxMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDAwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDkwMDA4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMDAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzAxMDApOworCVdSRUczMihkYXRhX3JlZywgMHg4RkUwQkY5MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDEwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjg4MEEwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMjAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OEY2MEJGNDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzAyMDEpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkU4ODE4MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDMwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhFQzBCRjAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMzAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkZDODgyODApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzA0MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4REUwQkVFMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDQwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGQTA4M0EwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwNTAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OENFMEJFRDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzA1MDEpOworCVdSRUczMihkYXRhX3JlZywgMHhCRjc4ODRFMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDYwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhCQTBCRUQ4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwNjAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkY1MDg2NDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzA3MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4QTYwQkVFOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDcwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGMjA4N0EwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwODAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODkwMEJGMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzA4MDEpOworCVdSRUczMihkYXRhX3JlZywgMHhCRjAwODkwMCk7CiB9CiAKIHN0cnVjdCBydjUxNV93YXRlcm1hcmsgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1ZTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTVkLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlY1MTVEX0hfXworI2RlZmluZSBfX1JWNTE1RF9IX18KKworLyoKKyAqIFJWNTE1IHJlZ2lzdGVycworICovCisjZGVmaW5lIFBDSUVfSU5ERVgJCQkweDAwMzAKKyNkZWZpbmUgUENJRV9EQVRBCQkJMHgwMDM0CisjZGVmaW5lCU1DX0lORF9JTkRFWAkJCTB4MDA3MAorI2RlZmluZQkJTUNfSU5EX1dSX0VOCQkJCSgxIDw8IDI0KQorI2RlZmluZQlNQ19JTkRfREFUQQkJCTB4MDA3NAorI2RlZmluZQlSQkJNX1NPRlRfUkVTRVQJCQkweDAwRjAKKyNkZWZpbmUJQ09ORklHX01FTVNJWkUJCQkweDAwRjgKKyNkZWZpbmUgSERQX0ZCX0xPQ0FUSU9OCQkJMHgwMTM0CisjZGVmaW5lCUNQX0NTUV9DTlRMCQkJMHgwNzQwCisjZGVmaW5lCUNQX0NTUV9NT0RFCQkJMHgwNzQ0CisjZGVmaW5lCUNQX0NTUV9BRERSCQkJMHgwN0YwCisjZGVmaW5lCUNQX0NTUV9EQVRBCQkJMHgwN0Y0CisjZGVmaW5lCUNQX0NTUV9TVEFUCQkJMHgwN0Y4CisjZGVmaW5lCUNQX0NTUTJfU1RBVAkJCTB4MDdGQworI2RlZmluZQlSQkJNX1NUQVRVUwkJCTB4MEU0MAorI2RlZmluZQlEU1RfUElQRV9DT05GSUcJCQkweDE3MEMKKyNkZWZpbmUJV0FJVF9VTlRJTAkJCTB4MTcyMAorI2RlZmluZQkJV0FJVF8yRF9JRExFCQkJCSgxIDw8IDE0KQorI2RlZmluZQkJV0FJVF8zRF9JRExFCQkJCSgxIDw8IDE1KQorI2RlZmluZQkJV0FJVF8yRF9JRExFQ0xFQU4JCQkoMSA8PCAxNikKKyNkZWZpbmUJCVdBSVRfM0RfSURMRUNMRUFOCQkJKDEgPDwgMTcpCisjZGVmaW5lCUlTWU5DX0NOVEwJCQkweDE3MjQKKyNkZWZpbmUJCUlTWU5DX0FOWTJEX0lETEUzRAkJCSgxIDw8IDApCisjZGVmaW5lCQlJU1lOQ19BTlkzRF9JRExFMkQJCQkoMSA8PCAxKQorI2RlZmluZQkJSVNZTkNfVFJJRzJEX0lETEUzRAkJCSgxIDw8IDIpCisjZGVmaW5lCQlJU1lOQ19UUklHM0RfSURMRTJECQkJKDEgPDwgMykKKyNkZWZpbmUJCUlTWU5DX1dBSVRfSURMRUdVSQkJCSgxIDw8IDQpCisjZGVmaW5lCQlJU1lOQ19DUFNDUkFUQ0hfSURMRUdVSQkJCSgxIDw8IDUpCisjZGVmaW5lCVZBUF9JTkRFWF9PRkZTRVQJCTB4MjA4QworI2RlZmluZQlWQVBfUFZTX1NUQVRFX0ZMVVNIX1JFRwkJMHgyMjg0CisjZGVmaW5lCUdCX0VOQUJMRQkJCTB4NDAwOAorI2RlZmluZQlHQl9NU1BPUzAJCQkweDQwMTAKKyNkZWZpbmUJCU1TX1gwX1NISUZUCQkJCTAKKyNkZWZpbmUJCU1TX1kwX1NISUZUCQkJCTQKKyNkZWZpbmUJCU1TX1gxX1NISUZUCQkJCTgKKyNkZWZpbmUJCU1TX1kxX1NISUZUCQkJCTEyCisjZGVmaW5lCQlNU19YMl9TSElGVAkJCQkxNgorI2RlZmluZQkJTVNfWTJfU0hJRlQJCQkJMjAKKyNkZWZpbmUJCU1TQkQwX1lfU0hJRlQJCQkJMjQKKyNkZWZpbmUJCU1TQkQwX1hfU0hJRlQJCQkJMjgKKyNkZWZpbmUJR0JfTVNQT1MxCQkJMHg0MDE0CisjZGVmaW5lCQlNU19YM19TSElGVAkJCQkwCisjZGVmaW5lCQlNU19ZM19TSElGVAkJCQk0CisjZGVmaW5lCQlNU19YNF9TSElGVAkJCQk4CisjZGVmaW5lCQlNU19ZNF9TSElGVAkJCQkxMgorI2RlZmluZQkJTVNfWDVfU0hJRlQJCQkJMTYKKyNkZWZpbmUJCU1TX1k1X1NISUZUCQkJCTIwCisjZGVmaW5lCQlNU0JEMV9TSElGVAkJCQkyNAorI2RlZmluZSBHQl9USUxFX0NPTkZJRwkJCTB4NDAxOAorI2RlZmluZQkJRU5BQkxFX1RJTElORwkJCQkoMSA8PCAwKQorI2RlZmluZQkJUElQRV9DT1VOVF9NQVNLCQkJCTB4MDAwMDAwMEUKKyNkZWZpbmUJCVBJUEVfQ09VTlRfU0hJRlQJCQkxCisjZGVmaW5lCQlUSUxFX1NJWkVfOAkJCQkoMCA8PCA0KQorI2RlZmluZQkJVElMRV9TSVpFXzE2CQkJCSgxIDw8IDQpCisjZGVmaW5lCQlUSUxFX1NJWkVfMzIJCQkJKDIgPDwgNCkKKyNkZWZpbmUJCVNVQlBJWEVMXzFfMTIJCQkJKDAgPDwgMTYpCisjZGVmaW5lCQlTVUJQSVhFTF8xXzE2CQkJCSgxIDw8IDE2KQorI2RlZmluZQlHQl9TRUxFQ1QJCQkweDQwMUMKKyNkZWZpbmUJR0JfQUFfQ09ORklHCQkJMHg0MDIwCisjZGVmaW5lCUdCX1BJUEVfU0VMRUNUCQkJMHg0MDJDCisjZGVmaW5lCUdBX0VOSEFOQ0UJCQkweDQyNzQKKyNkZWZpbmUJCUdBX0RFQURMT0NLX0NOVEwJCQkoMSA8PCAwKQorI2RlZmluZQkJR0FfRkFTVFNZTkNfQ05UTAkJCSgxIDw8IDEpCisjZGVmaW5lCUdBX1BPTFlfTU9ERQkJCTB4NDI4OAorI2RlZmluZQkJRlJPTlRfUFRZUEVfUE9JTlQJCQkoMCA8PCA0KQorI2RlZmluZQkJRlJPTlRfUFRZUEVfTElORQkJCSgxIDw8IDQpCisjZGVmaW5lCQlGUk9OVF9QVFlQRV9UUklBTkdFCQkJKDIgPDwgNCkKKyNkZWZpbmUJCUJBQ0tfUFRZUEVfUE9JTlQJCQkoMCA8PCA3KQorI2RlZmluZQkJQkFDS19QVFlQRV9MSU5FCQkJCSgxIDw8IDcpCisjZGVmaW5lCQlCQUNLX1BUWVBFX1RSSUFOR0UJCQkoMiA8PCA3KQorI2RlZmluZQlHQV9ST1VORF9NT0RFCQkJMHg0MjhDCisjZGVmaW5lCQlHRU9NRVRSWV9ST1VORF9UUlVOQwkJCSgwIDw8IDApCisjZGVmaW5lCQlHRU9NRVRSWV9ST1VORF9ORUFSRVNUCQkJKDEgPDwgMCkKKyNkZWZpbmUJCUNPTE9SX1JPVU5EX1RSVU5DCQkJKDAgPDwgMikKKyNkZWZpbmUJCUNPTE9SX1JPVU5EX05FQVJFU1QJCQkoMSA8PCAyKQorI2RlZmluZQlTVV9SRUdfREVTVAkJCTB4NDJDOAorI2RlZmluZQlSQjNEX0RTVENBQ0hFX0NUTFNUQVQJCTB4NEU0QworI2RlZmluZQkJUkIzRF9EQ19GTFVTSAkJCQkoMiA8PCAwKQorI2RlZmluZQkJUkIzRF9EQ19GUkVFCQkJCSgyIDw8IDIpCisjZGVmaW5lCQlSQjNEX0RDX0ZJTklTSAkJCQkoMSA8PCA0KQorI2RlZmluZSBaQl9aQ0FDSEVfQ1RMU1RBVAkJMHg0RjE4CisjZGVmaW5lCQlaQ19GTFVTSAkJCQkoMSA8PCAwKQorI2RlZmluZQkJWkNfRlJFRQkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgRENfTEJfTUVNT1JZX1NQTElUCQkweDY1MjAKKyNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9NQVNLCQkJMHgwMDAwMDAwMworI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX1NISUZUCQkwCisjZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRgkwCisjZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfM1FfRDJfMVEJCTEKKyNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZCQkyCisjZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1EJCTMKKyNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9TSElGVF9NT0RFCQkoMSA8PCAyKQorI2RlZmluZQkJRENfTEJfRElTUDFfRU5EX0FEUl9TSElGVAkJNAorI2RlZmluZQkJRENfTEJfRElTUDFfRU5EX0FEUl9NQVNLCQkweDAwMDA3RkYwCisjZGVmaW5lIEQxTU9ERV9QUklPUklUWV9BX0NOVAkJMHg2NTQ4CisjZGVmaW5lCQlNT0RFX1BSSU9SSVRZX01BUktfTUFTSwkJCTB4MDAwMDdGRkYKKyNkZWZpbmUJCU1PREVfUFJJT1JJVFlfT0ZGCQkJKDEgPDwgMTYpCisjZGVmaW5lCQlNT0RFX1BSSU9SSVRZX0FMV0FZU19PTgkJCSgxIDw8IDIwKQorI2RlZmluZQkJTU9ERV9QUklPUklUWV9GT1JDRV9NQVNLCQkoMSA8PCAyNCkKKyNkZWZpbmUgRDFNT0RFX1BSSU9SSVRZX0JfQ05UCQkweDY1NEMKKyNkZWZpbmUgTEJfTUFYX1JFUV9PVVRTVEFORElORwkJMHg2RDU4CisjZGVmaW5lCQlMQl9EMV9NQVhfUkVRX09VVFNUQU5ESU5HX01BU0sJCTB4MDAwMDAwMEYKKyNkZWZpbmUJCUxCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkdfU0hJRlQJCTAKKyNkZWZpbmUJCUxCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkdfTUFTSwkJMHgwMDBGMDAwMAorI2RlZmluZQkJTEJfRDJfTUFYX1JFUV9PVVRTVEFORElOR19TSElGVAkJMTYKKyNkZWZpbmUgRDJNT0RFX1BSSU9SSVRZX0FfQ05UCQkweDZENDgKKyNkZWZpbmUgRDJNT0RFX1BSSU9SSVRZX0JfQ05UCQkweDZENEMKKworLyogaXhbTUNdIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQ19GQl9MT0NBVElPTgkJCTB4MDEKKyNkZWZpbmUJCU1DX0ZCX1NUQVJUX01BU0sJCQkweDAwMDBGRkZGCisjZGVmaW5lCQlNQ19GQl9TVEFSVF9TSElGVAkJCTAKKyNkZWZpbmUJCU1DX0ZCX1RPUF9NQVNLCQkJCTB4RkZGRjAwMDAKKyNkZWZpbmUJCU1DX0ZCX1RPUF9TSElGVAkJCQkxNgorI2RlZmluZSBNQ19BR1BfTE9DQVRJT04JCQkweDAyCisjZGVmaW5lCQlNQ19BR1BfU1RBUlRfTUFTSwkJCTB4MDAwMEZGRkYKKyNkZWZpbmUJCU1DX0FHUF9TVEFSVF9TSElGVAkJCTAKKyNkZWZpbmUJCU1DX0FHUF9UT1BfTUFTSwkJCQkweEZGRkYwMDAwCisjZGVmaW5lCQlNQ19BR1BfVE9QX1NISUZUCQkJMTYKKyNkZWZpbmUgTUNfQUdQX0JBU0UJCQkweDAzCisjZGVmaW5lIE1DX0FHUF9CQVNFXzIJCQkweDA0CisjZGVmaW5lCU1DX0NOVEwJCQkJMHg1CisjZGVmaW5lCQlNRU1fTlVNX0NIQU5ORUxTX01BU0sJCQkweDAwMDAwMDAzCisjZGVmaW5lCU1DX1NUQVRVUwkJCTB4MDgKKyNkZWZpbmUJCU1DX1NUQVRVU19JRExFCQkJCSgxIDw8IDQpCisjZGVmaW5lCU1DX01JU0NfTEFUX1RJTUVSCQkweDA5CisjZGVmaW5lCQlNQ19DUFJfSU5JVF9MQVRfTUFTSwkJCTB4MDAwMDAwMEYKKyNkZWZpbmUJCU1DX1ZGX0lOSVRfTEFUX01BU0sJCQkweDAwMDAwMEYwCisjZGVmaW5lCQlNQ19ESVNQMFJfSU5JVF9MQVRfTUFTSwkJCTB4MDAwMDBGMDAKKyNkZWZpbmUJCU1DX0RJU1AwUl9JTklUX0xBVF9TSElGVAkJOAorI2RlZmluZQkJTUNfRElTUDFSX0lOSVRfTEFUX01BU0sJCQkweDAwMDBGMDAwCisjZGVmaW5lCQlNQ19ESVNQMVJfSU5JVF9MQVRfU0hJRlQJCTEyCisjZGVmaW5lCQlNQ19GSVhFRF9JTklUX0xBVF9NQVNLCQkJMHgwMDBGMDAwMAorI2RlZmluZQkJTUNfRTJSX0lOSVRfTEFUX01BU0sJCQkweDAwRjAwMDAwCisjZGVmaW5lCQlTQU1FX1BBR0VfUFJJT19NQVNLCQkJMHgwRjAwMDAwMAorI2RlZmluZQkJTUNfR0xPQldfSU5JVF9MQVRfTUFTSwkJCTB4RjAwMDAwMDAKKworCisvKgorICogUE00IHBhY2tldAorICovCisjZGVmaW5lIENQX1BBQ0tFVDAJCQkweDAwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQwX0JBU0VfSU5ERVhfU0hJRlQJMAorI2RlZmluZQkJUEFDS0VUMF9CQVNFX0lOREVYX01BU0sJCSgweDFmZmZmIDw8IDApCisjZGVmaW5lCQlQQUNLRVQwX0NPVU5UX1NISUZUCQkxNgorI2RlZmluZQkJUEFDS0VUMF9DT1VOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQorI2RlZmluZSBDUF9QQUNLRVQxCQkJMHg0MDAwMDAwMAorI2RlZmluZSBDUF9QQUNLRVQyCQkJMHg4MDAwMDAwMAorI2RlZmluZQkJUEFDS0VUMl9QQURfU0hJRlQJCTAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX01BU0sJCSgweDNmZmZmZmZmIDw8IDApCisjZGVmaW5lIENQX1BBQ0tFVDMJCQkweEMwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQzX0lUX09QQ09ERV9TSElGVAkJOAorI2RlZmluZQkJUEFDS0VUM19JVF9PUENPREVfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJCVBBQ0tFVDNfQ09VTlRfU0hJRlQJCTE2CisjZGVmaW5lCQlQQUNLRVQzX0NPVU5UX01BU0sJCSgweDNmZmYgPDwgMTYpCisvKiBQQUNLRVQzIG9wIGNvZGUgKi8KKyNkZWZpbmUJCVBBQ0tFVDNfTk9QCQkJMHgxMAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUYJCTB4MjgKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1ECQkweDI5CisjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU5EWAkJMHgyQQorI2RlZmluZQkJUEFDS0VUM18zRF9MT0FEX1ZCUE5UUgkJMHgyRgorI2RlZmluZQkJUEFDS0VUM19JTkRYX0JVRkZFUgkJMHgzMworI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUZfMgkJMHgzNAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lNTURfMgkJMHgzNQorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFhfMgkJMHgzNgorI2RlZmluZQkJUEFDS0VUM19CSVRCTFRfTVVMVEkJCTB4OUIKKworI2RlZmluZSBQQUNLRVQwKHJlZywgbikJKENQX1BBQ0tFVDAgfAkJCQkJXAorCQkJIFJFR19TRVQoUEFDS0VUMF9CQVNFX0lOREVYLCAocmVnKSA+PiAyKSB8CVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDBfQ09VTlQsIChuKSkpCisjZGVmaW5lIFBBQ0tFVDIodikJKENQX1BBQ0tFVDIgfCBSRUdfU0VUKFBBQ0tFVDJfUEFELCAodikpKQorI2RlZmluZSBQQUNLRVQzKG9wLCBuKQkoQ1BfUEFDS0VUMyB8CQkJCQlcCisJCQkgUkVHX1NFVChQQUNLRVQzX0lUX09QQ09ERSwgKG9wKSkgfAkJXAorCQkJIFJFR19TRVQoUEFDS0VUM19DT1VOVCwgKG4pKSkKKworI2RlZmluZQlQQUNLRVRfVFlQRTAJMAorI2RlZmluZQlQQUNLRVRfVFlQRTEJMQorI2RlZmluZQlQQUNLRVRfVFlQRTIJMgorI2RlZmluZQlQQUNLRVRfVFlQRTMJMworCisjZGVmaW5lIENQX1BBQ0tFVF9HRVRfVFlQRShoKSAoKChoKSA+PiAzMCkgJiAzKQorI2RlZmluZSBDUF9QQUNLRVRfR0VUX0NPVU5UKGgpICgoKGgpID4+IDE2KSAmIDB4M0ZGRikKKyNkZWZpbmUgQ1BfUEFDS0VUMF9HRVRfUkVHKGgpICgoKGgpICYgMHgxRkZGKSA8PCAyKQorI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCisjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ci5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjZjg0MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KLSAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczogRGF2ZSBBaXJsaWUKLSAqICAgICAgICAgIEFsZXggRGV1Y2hlcgotICogICAgICAgICAgSmVyb21lIEdsaXNzZQotICovCi0jaWZuZGVmIFJWNTE1Ul9ICi0jZGVmaW5lIFJWNTE1Ul9ICi0KLS8qIFJWNTE1IHJlZ2lzdGVycyAqLwotI2RlZmluZSBQQ0lFX0lOREVYCQkJMHgwMDMwCi0jZGVmaW5lIFBDSUVfREFUQQkJCTB4MDAzNAotI2RlZmluZQlNQ19JTkRfSU5ERVgJCQkweDAwNzAKLSNkZWZpbmUJCU1DX0lORF9XUl9FTgkJCQkoMSA8PCAyNCkKLSNkZWZpbmUJTUNfSU5EX0RBVEEJCQkweDAwNzQKLSNkZWZpbmUJUkJCTV9TT0ZUX1JFU0VUCQkJMHgwMEYwCi0jZGVmaW5lCUNPTkZJR19NRU1TSVpFCQkJMHgwMEY4Ci0jZGVmaW5lIEhEUF9GQl9MT0NBVElPTgkJCTB4MDEzNAotI2RlZmluZQlDUF9DU1FfQ05UTAkJCTB4MDc0MAotI2RlZmluZQlDUF9DU1FfTU9ERQkJCTB4MDc0NAotI2RlZmluZQlDUF9DU1FfQUREUgkJCTB4MDdGMAotI2RlZmluZQlDUF9DU1FfREFUQQkJCTB4MDdGNAotI2RlZmluZQlDUF9DU1FfU1RBVAkJCTB4MDdGOAotI2RlZmluZQlDUF9DU1EyX1NUQVQJCQkweDA3RkMKLSNkZWZpbmUJUkJCTV9TVEFUVVMJCQkweDBFNDAKLSNkZWZpbmUJRFNUX1BJUEVfQ09ORklHCQkJMHgxNzBDCi0jZGVmaW5lCVdBSVRfVU5USUwJCQkweDE3MjAKLSNkZWZpbmUJCVdBSVRfMkRfSURMRQkJCQkoMSA8PCAxNCkKLSNkZWZpbmUJCVdBSVRfM0RfSURMRQkJCQkoMSA8PCAxNSkKLSNkZWZpbmUJCVdBSVRfMkRfSURMRUNMRUFOCQkJKDEgPDwgMTYpCi0jZGVmaW5lCQlXQUlUXzNEX0lETEVDTEVBTgkJCSgxIDw8IDE3KQotI2RlZmluZQlJU1lOQ19DTlRMCQkJMHgxNzI0Ci0jZGVmaW5lCQlJU1lOQ19BTlkyRF9JRExFM0QJCQkoMSA8PCAwKQotI2RlZmluZQkJSVNZTkNfQU5ZM0RfSURMRTJECQkJKDEgPDwgMSkKLSNkZWZpbmUJCUlTWU5DX1RSSUcyRF9JRExFM0QJCQkoMSA8PCAyKQotI2RlZmluZQkJSVNZTkNfVFJJRzNEX0lETEUyRAkJCSgxIDw8IDMpCi0jZGVmaW5lCQlJU1lOQ19XQUlUX0lETEVHVUkJCQkoMSA8PCA0KQotI2RlZmluZQkJSVNZTkNfQ1BTQ1JBVENIX0lETEVHVUkJCQkoMSA8PCA1KQotI2RlZmluZQlWQVBfSU5ERVhfT0ZGU0VUCQkweDIwOEMKLSNkZWZpbmUJVkFQX1BWU19TVEFURV9GTFVTSF9SRUcJCTB4MjI4NAotI2RlZmluZQlHQl9FTkFCTEUJCQkweDQwMDgKLSNkZWZpbmUJR0JfTVNQT1MwCQkJMHg0MDEwCi0jZGVmaW5lCQlNU19YMF9TSElGVAkJCQkwCi0jZGVmaW5lCQlNU19ZMF9TSElGVAkJCQk0Ci0jZGVmaW5lCQlNU19YMV9TSElGVAkJCQk4Ci0jZGVmaW5lCQlNU19ZMV9TSElGVAkJCQkxMgotI2RlZmluZQkJTVNfWDJfU0hJRlQJCQkJMTYKLSNkZWZpbmUJCU1TX1kyX1NISUZUCQkJCTIwCi0jZGVmaW5lCQlNU0JEMF9ZX1NISUZUCQkJCTI0Ci0jZGVmaW5lCQlNU0JEMF9YX1NISUZUCQkJCTI4Ci0jZGVmaW5lCUdCX01TUE9TMQkJCTB4NDAxNAotI2RlZmluZQkJTVNfWDNfU0hJRlQJCQkJMAotI2RlZmluZQkJTVNfWTNfU0hJRlQJCQkJNAotI2RlZmluZQkJTVNfWDRfU0hJRlQJCQkJOAotI2RlZmluZQkJTVNfWTRfU0hJRlQJCQkJMTIKLSNkZWZpbmUJCU1TX1g1X1NISUZUCQkJCTE2Ci0jZGVmaW5lCQlNU19ZNV9TSElGVAkJCQkyMAotI2RlZmluZQkJTVNCRDFfU0hJRlQJCQkJMjQKLSNkZWZpbmUgR0JfVElMRV9DT05GSUcJCQkweDQwMTgKLSNkZWZpbmUJCUVOQUJMRV9USUxJTkcJCQkJKDEgPDwgMCkKLSNkZWZpbmUJCVBJUEVfQ09VTlRfTUFTSwkJCQkweDAwMDAwMDBFCi0jZGVmaW5lCQlQSVBFX0NPVU5UX1NISUZUCQkJMQotI2RlZmluZQkJVElMRV9TSVpFXzgJCQkJKDAgPDwgNCkKLSNkZWZpbmUJCVRJTEVfU0laRV8xNgkJCQkoMSA8PCA0KQotI2RlZmluZQkJVElMRV9TSVpFXzMyCQkJCSgyIDw8IDQpCi0jZGVmaW5lCQlTVUJQSVhFTF8xXzEyCQkJCSgwIDw8IDE2KQotI2RlZmluZQkJU1VCUElYRUxfMV8xNgkJCQkoMSA8PCAxNikKLSNkZWZpbmUJR0JfU0VMRUNUCQkJMHg0MDFDCi0jZGVmaW5lCUdCX0FBX0NPTkZJRwkJCTB4NDAyMAotI2RlZmluZQlHQl9QSVBFX1NFTEVDVAkJCTB4NDAyQwotI2RlZmluZQlHQV9FTkhBTkNFCQkJMHg0Mjc0Ci0jZGVmaW5lCQlHQV9ERUFETE9DS19DTlRMCQkJKDEgPDwgMCkKLSNkZWZpbmUJCUdBX0ZBU1RTWU5DX0NOVEwJCQkoMSA8PCAxKQotI2RlZmluZQlHQV9QT0xZX01PREUJCQkweDQyODgKLSNkZWZpbmUJCUZST05UX1BUWVBFX1BPSU5UCQkJKDAgPDwgNCkKLSNkZWZpbmUJCUZST05UX1BUWVBFX0xJTkUJCQkoMSA8PCA0KQotI2RlZmluZQkJRlJPTlRfUFRZUEVfVFJJQU5HRQkJCSgyIDw8IDQpCi0jZGVmaW5lCQlCQUNLX1BUWVBFX1BPSU5UCQkJKDAgPDwgNykKLSNkZWZpbmUJCUJBQ0tfUFRZUEVfTElORQkJCQkoMSA8PCA3KQotI2RlZmluZQkJQkFDS19QVFlQRV9UUklBTkdFCQkJKDIgPDwgNykKLSNkZWZpbmUJR0FfUk9VTkRfTU9ERQkJCTB4NDI4QwotI2RlZmluZQkJR0VPTUVUUllfUk9VTkRfVFJVTkMJCQkoMCA8PCAwKQotI2RlZmluZQkJR0VPTUVUUllfUk9VTkRfTkVBUkVTVAkJCSgxIDw8IDApCi0jZGVmaW5lCQlDT0xPUl9ST1VORF9UUlVOQwkJCSgwIDw8IDIpCi0jZGVmaW5lCQlDT0xPUl9ST1VORF9ORUFSRVNUCQkJKDEgPDwgMikKLSNkZWZpbmUJU1VfUkVHX0RFU1QJCQkweDQyQzgKLSNkZWZpbmUJUkIzRF9EU1RDQUNIRV9DVExTVEFUCQkweDRFNEMKLSNkZWZpbmUJCVJCM0RfRENfRkxVU0gJCQkJKDIgPDwgMCkKLSNkZWZpbmUJCVJCM0RfRENfRlJFRQkJCQkoMiA8PCAyKQotI2RlZmluZQkJUkIzRF9EQ19GSU5JU0gJCQkJKDEgPDwgNCkKLSNkZWZpbmUgWkJfWkNBQ0hFX0NUTFNUQVQJCTB4NEYxOAotI2RlZmluZQkJWkNfRkxVU0gJCQkJKDEgPDwgMCkKLSNkZWZpbmUJCVpDX0ZSRUUJCQkJCSgxIDw8IDEpCi0jZGVmaW5lIERDX0xCX01FTU9SWV9TUExJVAkJMHg2NTIwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfTUFTSwkJCTB4MDAwMDAwMDMKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9TSElGVAkJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEYJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFRCQkxCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWQkJMgotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNRCQkzCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfU0hJRlRfTU9ERQkJKDEgPDwgMikKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfU0hJRlQJCTQKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfTUFTSwkJMHgwMDAwN0ZGMAotI2RlZmluZSBEMU1PREVfUFJJT1JJVFlfQV9DTlQJCTB4NjU0OAotI2RlZmluZQkJTU9ERV9QUklPUklUWV9NQVJLX01BU0sJCQkweDAwMDA3RkZGCi0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX09GRgkJCSgxIDw8IDE2KQotI2RlZmluZQkJTU9ERV9QUklPUklUWV9BTFdBWVNfT04JCQkoMSA8PCAyMCkKLSNkZWZpbmUJCU1PREVfUFJJT1JJVFlfRk9SQ0VfTUFTSwkJKDEgPDwgMjQpCi0jZGVmaW5lIEQxTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2NTRDCi0jZGVmaW5lIExCX01BWF9SRVFfT1VUU1RBTkRJTkcJCTB4NkQ1OAotI2RlZmluZQkJTEJfRDFfTUFYX1JFUV9PVVRTVEFORElOR19NQVNLCQkweDAwMDAwMDBGCi0jZGVmaW5lCQlMQl9EMV9NQVhfUkVRX09VVFNUQU5ESU5HX1NISUZUCQkwCi0jZGVmaW5lCQlMQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HX01BU0sJCTB4MDAwRjAwMDAKLSNkZWZpbmUJCUxCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkdfU0hJRlQJCTE2Ci0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9BX0NOVAkJMHg2RDQ4Ci0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2RDRDCi0KLS8qIGl4W01DXSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTUNfRkJfTE9DQVRJT04JCQkweDAxCi0jZGVmaW5lCQlNQ19GQl9TVEFSVF9NQVNLCQkJMHgwMDAwRkZGRgotI2RlZmluZQkJTUNfRkJfU1RBUlRfU0hJRlQJCQkwCi0jZGVmaW5lCQlNQ19GQl9UT1BfTUFTSwkJCQkweEZGRkYwMDAwCi0jZGVmaW5lCQlNQ19GQl9UT1BfU0hJRlQJCQkJMTYKLSNkZWZpbmUgTUNfQUdQX0xPQ0FUSU9OCQkJMHgwMgotI2RlZmluZQkJTUNfQUdQX1NUQVJUX01BU0sJCQkweDAwMDBGRkZGCi0jZGVmaW5lCQlNQ19BR1BfU1RBUlRfU0hJRlQJCQkwCi0jZGVmaW5lCQlNQ19BR1BfVE9QX01BU0sJCQkJMHhGRkZGMDAwMAotI2RlZmluZQkJTUNfQUdQX1RPUF9TSElGVAkJCTE2Ci0jZGVmaW5lIE1DX0FHUF9CQVNFCQkJMHgwMwotI2RlZmluZSBNQ19BR1BfQkFTRV8yCQkJMHgwNAotI2RlZmluZQlNQ19DTlRMCQkJCTB4NQotI2RlZmluZQkJTUVNX05VTV9DSEFOTkVMU19NQVNLCQkJMHgwMDAwMDAwMwotI2RlZmluZQlNQ19TVEFUVVMJCQkweDA4Ci0jZGVmaW5lCQlNQ19TVEFUVVNfSURMRQkJCQkoMSA8PCA0KQotI2RlZmluZQlNQ19NSVNDX0xBVF9USU1FUgkJMHgwOQotI2RlZmluZQkJTUNfQ1BSX0lOSVRfTEFUX01BU0sJCQkweDAwMDAwMDBGCi0jZGVmaW5lCQlNQ19WRl9JTklUX0xBVF9NQVNLCQkJMHgwMDAwMDBGMAotI2RlZmluZQkJTUNfRElTUDBSX0lOSVRfTEFUX01BU0sJCQkweDAwMDAwRjAwCi0jZGVmaW5lCQlNQ19ESVNQMFJfSU5JVF9MQVRfU0hJRlQJCTgKLSNkZWZpbmUJCU1DX0RJU1AxUl9JTklUX0xBVF9NQVNLCQkJMHgwMDAwRjAwMAotI2RlZmluZQkJTUNfRElTUDFSX0lOSVRfTEFUX1NISUZUCQkxMgotI2RlZmluZQkJTUNfRklYRURfSU5JVF9MQVRfTUFTSwkJCTB4MDAwRjAwMDAKLSNkZWZpbmUJCU1DX0UyUl9JTklUX0xBVF9NQVNLCQkJMHgwMEYwMDAwMAotI2RlZmluZQkJU0FNRV9QQUdFX1BSSU9fTUFTSwkJCTB4MEYwMDAwMDAKLSNkZWZpbmUJCU1DX0dMT0JXX0lOSVRfTEFUX01BU0sJCQkweEYwMDAwMDAwCi0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCAyMWQ4ZmZkLi5iNTc0YzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC0yNSwxMDAgKzI1LDEwMzggQEAKICAqICAgICAgICAgIEFsZXggRGV1Y2hlcgogICogICAgICAgICAgSmVyb21lIEdsaXNzZQogICovCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKKyNpbmNsdWRlICJydjc3MGQuaCIKKyNpbmNsdWRlICJhdml2b2QuaCIKKyNpbmNsdWRlICJhdG9tLmgiCiAKLS8qIHJ2NzcwLHJ2NzMwLHJ2NzEwICBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKyNkZWZpbmUgUjcwMF9QRlBfVUNPREVfU0laRSA4NDgKKyNkZWZpbmUgUjcwMF9QTTRfVUNPREVfU0laRSAxMzYwCiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiBydjc3MCxydjczMCxydjcxMAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCitzdGF0aWMgdm9pZCBydjc3MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NzcwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisKKy8qCisgKiBHQVJUCiAgKi8KLWludCBydjc3MF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnY3NzBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJ2NzcwX3BjaWVfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKwlpbnQgciwgaTsKKworCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaiA9PSBOVUxMKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiTm8gVlJBTSBvYmplY3QgZm9yIFBDSUUgR0FSVC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCByZGV2LT5nYXJ0LnRhYmxlX2FkZHIgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9DTlRMLCBFTkFCTEVfQ09OVEVYVCB8IFBBR0VfVEFCTEVfREVQVEgoMCkgfAorCQkJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQpOworCVdSRUczMihWTV9DT05URVhUMF9QUk9URUNUSU9OX0ZBVUxUX0RFRkFVTFRfQUREUiwKKwkJCSh1MzIpKHJkZXYtPmR1bW15X3BhZ2UuYWRkciA+PiAxMikpOworCWZvciAoaSA9IDE7IGkgPCA3OyBpKyspCisJCVdSRUczMihWTV9DT05URVhUMF9DTlRMICsgKGkgKiA0KSwgMCk7CisKKwlyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gocmRldik7CisJcmRldi0+Z2FydC5yZWFkeSA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnY3NzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKwlpbnQgaTsKKworCS8qIERpc2FibGUgYWxsIHRhYmxlcyAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCVdSRUczMihWTV9DT05URVhUMF9DTlRMICsgKGkgKiA0KSwgMCk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoNykpOworCVdSRUczMihWTV9MMl9DTlRMMiwgMCk7CisJV1JFRzMyKFZNX0wyX0NOVEwzLCBCQU5LX1NFTEVDVCgwKSB8IENBQ0hFX1VQREFURV9NT0RFKDIpKTsKKwkvKiBTZXR1cCBUTEIgY29udHJvbCAqLworCXRtcCA9IEVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKSB7CisJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKKwkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJfQorfQorCit2b2lkIHJ2NzcwX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKKwlyYWRlb25fZ2FydF9maW5pKHJkZXYpOworfQogCiAKIC8qCiAgKiBNQwogICovCi1pbnQgcnY3NzBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyB2b2lkIHJ2NzcwX21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCB0bXA7CisJdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7CisJdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOworCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7CisJdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7CisJdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7CisJdTY0IG9sZF92cmFtX3N0YXJ0OworCXUzMiB0bXA7CisJaW50IGksIGo7CiAKLQlydjc3MF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEhEUCAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKywgaiArPSAweDE4KSB7CisJCVdSRUczMigoMHgyYzE0ICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMxOCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMWMgKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzIwICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyNCArIGopLCAweDAwMDAwMDAwKTsKKwl9CisJV1JFRzMyKEhEUF9SRUdfQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDApOwogCi0JLyogc2V0dXAgdGhlIGdhcnQgYmVmb3JlIGNoYW5naW5nIGxvY2F0aW9uIHNvIHdlIGNhbiBhc2sgdG8KLQkgKiBkaXNjYXJkIHVubWFwcGVkIG1jIHJlcXVlc3QKLQkgKi8KLQkvKiBGSVhNRTogZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gLyA0MDk2OwotCXRtcCA9IFJFR19TRVQoUjcwMF9MT0dJQ0FMX1BBR0VfTlVNQkVSLCB0bXApOwotCVdSRUczMihSNzAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgdG1wKTsKLQl0bXAgPSAocmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUpIC8gNDA5NjsKLQl0bXAgPSBSRUdfU0VUKFI3MDBfTE9HSUNBTF9QQUdFX05VTUJFUiwgdG1wKTsKLQlXUkVHMzIoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCB0bXApOworCWQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoRDFWR0FfQ09OVFJPTCk7CisJZDJ2Z2FfY29udHJvbCA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKKwl2Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKKwl2Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKKwlkMWNydGNfY29udHJvbCA9IFJSRUczMihEMUNSVENfQ09OVFJPTCk7CisJZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDJDUlRDX0NPTlRST0wpOworCW9sZF92cmFtX3N0YXJ0ID0gKHU2NCkoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7CisJbmV3X2QxZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7CisJbmV3X2QxZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOworCW5ld19kMWdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7CisJbmV3X2QxZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OworCW5ld19kMmdycGhfcHJpbWFyeSA9IFJSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOworCW5ld19kMmdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKKwluZXdfZDJncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OworCW5ld19kMmdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKIAotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnY3NzBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKKwkvKiBTdG9wIGFsbCB2aWRlbyAqLworCVdSRUczMihEMVZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoRDJWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKEQxQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIDApOworCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCisJbWRlbGF5KDEpOworCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gTUMgbm90IGlkbGUgIVxuIik7CiAJfQogCi0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSNzAwX01DX0ZCX1RPUCwgdG1wID4+IDI0KTsKLQl0bXAgfD0gUkVHX1NFVChSNzAwX01DX0ZCX0JBU0UsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMjQpOwotCVdSRUczMihSNzAwX01DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKFI3MDBfTUNfQUdQX1RPUCwgdG1wID4+IDIyKTsKLQlXUkVHMzIoUjcwMF9NQ19WTV9BR1BfVE9QLCB0bXApOwotCXRtcCA9IFJFR19TRVQoUjcwMF9NQ19BR1BfQk9ULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMjIpOwotCVdSRUczMihSNzAwX01DX1ZNX0FHUF9CT1QsIHRtcCk7Ci0JcmV0dXJuIDA7Ci19CisJLyogTG9ja291dCBhY2Nlc3MgdGhyb3VnaCBWR0EgYXBlcnR1cmUqLworCVdSRUczMihWR0FfSERQX0NPTlRST0wsIFZHQV9NRU1PUllfRElTQUJMRSk7CiAKLXZvaWQgcnY3NzBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJLyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gKi8KKwlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKKwlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgKHJkZXYtPm1jLnZyYW1fZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSLCAwKTsKKwl0bXAgPSAoKChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDI0KSAmIDB4RkZGRikgPDwgMTY7CisJdG1wIHw9ICgocmRldi0+bWMudnJhbV9zdGFydCA+PiAyNCkgJiAweEZGRkYpOworCVdSRUczMihNQ19WTV9GQl9MT0NBVElPTiwgdG1wKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfQkFTRSwgKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gOCkpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9JTkZPLCAoMiA8PCA3KSk7CisJV1JFRzMyKEhEUF9OT05TVVJGQUNFX1NJWkUsIChyZGV2LT5tYy5tY192cmFtX3NpemUgLSAxKSB8IDB4M0ZGKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMihNQ19WTV9BR1BfVE9QLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDE2KTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9CT1QsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNik7CisJCVdSRUczMihNQ19WTV9BR1BfQkFTRSwgcmRldi0+bWMuYWdwX2Jhc2UgPj4gMjIpOworCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9BR1BfQkFTRSwgMCk7CisJCVdSRUczMihNQ19WTV9BR1BfVE9QLCAweDBGRkZGRkZGKTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9CT1QsIDB4MEZGRkZGRkYpOworCX0KKwlXUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3ByaW1hcnkpOworCVdSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9zZWNvbmRhcnkpOworCVdSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfcHJpbWFyeSk7CisJV1JFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3NlY29uZGFyeSk7CisJV1JFRzMyKFZHQV9NRU1PUllfQkFTRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKworCS8qIFVubG9jayBob3N0IGFjY2VzcyAqLworCVdSRUczMihWR0FfSERQX0NPTlRST0wsIHZnYV9oZHBfY29udHJvbCk7CisKKwltZGVsYXkoMSk7CisJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwl9CisKKwkvKiBSZXN0b3JlIHZpZGVvIHN0YXRlICovCisJV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKEQxQ1JUQ19DT05UUk9MLCBkMWNydGNfY29udHJvbCk7CisJV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCBkMmNydGNfY29udHJvbCk7CisJV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKEQxVkdBX0NPTlRST0wsIGQxdmdhX2NvbnRyb2wpOworCVdSRUczMihEMlZHQV9DT05UUk9MLCBkMnZnYV9jb250cm9sKTsKKwlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCB2Z2FfcmVuZGVyX2NvbnRyb2wpOworCisJLyogd2UgbmVlZCB0byBvd24gVlJBTSwgc28gdHVybiBvZmYgdGhlIFZHQSByZW5kZXJlciBoZXJlCisJICogdG8gc3RvcCBpdCBvdmVyd3JpdGluZyBvdXIgb2JqZWN0cyAqLworCXJhZGVvbl9hdml2b192Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiB9CiAKIAogLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCisgKiBDUC4KICAqLwotdm9pZCBydjc3MF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHI3MDBfY3Bfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKKwlXUkVHMzIoQ1BfTUVfQ05UTCwgKENQX01FX0hBTFQgfCBDUF9QRlBfSEFMVCkpOwogfQogCi1pbnQgcnY3NzBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKKworc3RhdGljIGludCBydjc3MF9jcF9sb2FkX21pY3JvY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJY29uc3QgX19iZTMyICpmd19kYXRhOworCWludCBpOworCisJaWYgKCFyZGV2LT5tZV9mdyB8fCAhcmRldi0+cGZwX2Z3KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXI3MDBfY3Bfc3RvcChyZGV2KTsKKwlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKDE1IDw8IDgpIHwgKDMgPDwgMCkpOworCisJLyogUmVzZXQgY3AgKi8KKwlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JFU0VUX0NQKTsKKwlSUkVHMzIoR1JCTV9TT0ZUX1JFU0VUKTsKKwltZGVsYXkoMTUpOworCVdSRUczMihHUkJNX1NPRlRfUkVTRVQsIDApOworCisJZndfZGF0YSA9IChjb25zdCBfX2JlMzIgKilyZGV2LT5wZnBfZnctPmRhdGE7CisJV1JFRzMyKENQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QRlBfVUNPREVfU0laRTsgaSsrKQorCQlXUkVHMzIoQ1BfUEZQX1VDT0RFX0RBVEEsIGJlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKKwlXUkVHMzIoQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCisJZndfZGF0YSA9IChjb25zdCBfX2JlMzIgKilyZGV2LT5tZV9mdy0+ZGF0YTsKKwlXUkVHMzIoQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQorCQlXUkVHMzIoQ1BfTUVfUkFNX0RBVEEsIGJlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKKworCVdSRUczMihDUF9QRlBfVUNPREVfQUREUiwgMCk7CisJV1JFRzMyKENQX01FX1JBTV9XQUREUiwgMCk7CisJV1JFRzMyKENQX01FX1JBTV9SQUREUiwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcnY3NzBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLwotfQotCiAKIC8qCi0gKiBWUkFNIGluZm8KKyAqIENvcmUgZnVuY3Rpb25zCiAgKi8KLXZvaWQgcnY3NzBfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyB1MzIgcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKKwkJCQkJCXUzMiBudW1fYmFja2VuZHMsCisJCQkJCQl1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCiB7Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLworCXUzMiBiYWNrZW5kX21hcCA9IDA7CisJdTMyIGVuYWJsZWRfYmFja2VuZHNfbWFzazsKKwl1MzIgZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKwl1MzIgY3VyX3BpcGU7CisJdTMyIHN3aXp6bGVfcGlwZVtSN1hYX01BWF9QSVBFU107CisJdTMyIGN1cl9iYWNrZW5kOworCXUzMiBpOworCisJaWYgKG51bV90aWxlX3BpcGVzID4gUjdYWF9NQVhfUElQRVMpCisJCW51bV90aWxlX3BpcGVzID0gUjdYWF9NQVhfUElQRVM7CisJaWYgKG51bV90aWxlX3BpcGVzIDwgMSkKKwkJbnVtX3RpbGVfcGlwZXMgPSAxOworCWlmIChudW1fYmFja2VuZHMgPiBSN1hYX01BWF9CQUNLRU5EUykKKwkJbnVtX2JhY2tlbmRzID0gUjdYWF9NQVhfQkFDS0VORFM7CisJaWYgKG51bV9iYWNrZW5kcyA8IDEpCisJCW51bV9iYWNrZW5kcyA9IDE7CisKKwllbmFibGVkX2JhY2tlbmRzX21hc2sgPSAwOworCWVuYWJsZWRfYmFja2VuZHNfY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBSN1hYX01BWF9CQUNLRU5EUzsgKytpKSB7CisJCWlmICgoKGJhY2tlbmRfZGlzYWJsZV9tYXNrID4+IGkpICYgMSkgPT0gMCkgeworCQkJZW5hYmxlZF9iYWNrZW5kc19tYXNrIHw9ICgxIDw8IGkpOworCQkJKytlbmFibGVkX2JhY2tlbmRzX2NvdW50OworCQl9CisJCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ID09IG51bV9iYWNrZW5kcykKKwkJCWJyZWFrOworCX0KKworCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ID09IDApIHsKKwkJZW5hYmxlZF9iYWNrZW5kc19tYXNrID0gMTsKKwkJZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9IDE7CisJfQorCisJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgIT0gbnVtX2JhY2tlbmRzKQorCQludW1fYmFja2VuZHMgPSBlbmFibGVkX2JhY2tlbmRzX2NvdW50OworCisJbWVtc2V0KCh1aW50OF90ICopJnN3aXp6bGVfcGlwZVswXSwgMCwgc2l6ZW9mKHUzMikgKiBSN1hYX01BWF9QSVBFUyk7CisJc3dpdGNoIChudW1fdGlsZV9waXBlcykgeworCWNhc2UgMToKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQlicmVhazsKKwljYXNlIDM6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDE7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gMzsKKwkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSAxOworCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQlicmVhazsKKwljYXNlIDY6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDU7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlzd2l6emxlX3BpcGVbNl0gPSA3OworCQlzd2l6emxlX3BpcGVbN10gPSA1OworCQlicmVhazsKKwl9CisKKwljdXJfYmFja2VuZCA9IDA7CisJZm9yIChjdXJfcGlwZSA9IDA7IGN1cl9waXBlIDwgbnVtX3RpbGVfcGlwZXM7ICsrY3VyX3BpcGUpIHsKKwkJd2hpbGUgKCgoMSA8PCBjdXJfYmFja2VuZCkgJiBlbmFibGVkX2JhY2tlbmRzX21hc2spID09IDApCisJCQljdXJfYmFja2VuZCA9IChjdXJfYmFja2VuZCArIDEpICUgUjdYWF9NQVhfQkFDS0VORFM7CisKKwkJYmFja2VuZF9tYXAgfD0gKHUzMikoKChjdXJfYmFja2VuZCAmIDMpIDw8IChzd2l6emxlX3BpcGVbY3VyX3BpcGVdICogMikpKTsKKworCQljdXJfYmFja2VuZCA9IChjdXJfYmFja2VuZCArIDEpICUgUjdYWF9NQVhfQkFDS0VORFM7CisJfQorCisJcmV0dXJuIGJhY2tlbmRfbWFwOwogfQogCi12b2lkIHJ2NzcwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyB2b2lkIHJ2NzcwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJ2NzcwX3ZyYW1fZ2V0X3R5cGUocmRldik7CisJaW50IGksIGosIG51bV9xZF9waXBlczsKKwl1MzIgc3hfZGVidWdfMTsKKwl1MzIgc214X2RjX2N0bDA7CisJdTMyIG51bV9nc192ZXJ0c19wZXJfdGhyZWFkOworCXUzMiB2Z3RfZ3NfcGVyX2VzOworCXUzMiBnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDA7CisJdTMyIHNxX21zX2ZpZm9fc2l6ZXM7CisJdTMyIHNxX2NvbmZpZzsKKwl1MzIgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQ7CisJdTMyIGhkcF9ob3N0X3BhdGhfY250bDsKKwl1MzIgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMDsKKwl1MzIgYmFja2VuZF9tYXA7CisJdTMyIGdiX3RpbGluZ19jb25maWcgPSAwOworCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGUgPSAwOworCXUzMiBjY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSAwOworCXUzMiBtY19hcmJfcmFtY2ZnOworCXUzMiBkYl9kZWJ1ZzQ7CiAKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJLyogc2V0dXAgY2hpcCBzcGVjcyAqLworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1JWNzcwOgorCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzID0gODsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9zaW1kcyA9IDEwOworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzID0gNDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3RocmVhZHMgPSAyNDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyA9IDUxMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9od19jb250ZXh0cyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3NfdGhyZWFkcyA9IDE2ICogMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgPSAxMTI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9udW1fb2Zfc2V0cyA9IDc7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4Rjk7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfZWFybHl6X3RpbGVfZmlmb19maXplID0gMHgxMzA7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjczMDoKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9waXBlcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc2ltZHMgPSA4OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzID0gMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzID0gMTI4OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3RocmVhZHMgPSAyNDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9od19jb250ZXh0cyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3NfdGhyZWFkcyA9IDE2ICogMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAzMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgPSAyMjQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9udW1fb2Zfc2V0cyA9IDc7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4Zjk7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfZWFybHl6X3RpbGVfZmlmb19maXplID0gMHgxMzA7CisJCWlmIChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA+IDE2KSB7CisJCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAtPSAxNjsKKwkJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NteF9zaXplICs9IDE2OworCQl9CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjcxMDoKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9waXBlcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc2ltZHMgPSAyOworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzID0gMTsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3RocmVhZHMgPSAxOTI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9od19jb250ZXh0cyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3NfdGhyZWFkcyA9IDggKiAyOworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDExMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNxX251bV9jZl9pbnN0cyA9IDE7CisKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X251bV9vZl9zZXRzID0gNzsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNjX3ByaW1fZmlmb19zaXplID0gMHg0MDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19lYXJseXpfdGlsZV9maWZvX2ZpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzQwOgorCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9zaW1kcyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfYmFja2VuZHMgPSA0OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGhyZWFkcyA9IDI0ODsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9zdGFja19lbnRyaWVzID0gNTEyOworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2h3X2NvbnRleHRzID0gODsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9nc190aHJlYWRzID0gMTYgKiAyOworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zaXplID0gMjU2OworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDMyOworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDIyNDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X251bV9vZl9zZXRzID0gNzsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNjX3ByaW1fZmlmb19zaXplID0gMHgxMDA7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfZWFybHl6X3RpbGVfZmlmb19maXplID0gMHgxMzA7CisKKwkJaWYgKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID4gMTYpIHsKKwkJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC09IDE2OworCQkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgKz0gMTY7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlXUkVHMzIoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCWogKz0gMHgxODsKKwl9CisKKwlXUkVHMzIoR1JCTV9DTlRMLCBHUkJNX1JFQURfVElNRU9VVCgweGZmKSk7CisKKwkvKiBzZXR1cCB0aWxpbmcsIHNpbWQsIHBpcGUgY29uZmlnICovCisJbWNfYXJiX3JhbWNmZyA9IFJSRUczMihNQ19BUkJfUkFNQ0ZHKTsKKworCXN3aXRjaCAocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzKSB7CisJY2FzZSAxOgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFBJUEVfVElMSU5HKDApOworCQlicmVhazsKKwljYXNlIDI6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUElQRV9USUxJTkcoMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBQSVBFX1RJTElORygyKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFBJUEVfVElMSU5HKDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3NzApCisJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoMSk7CisJZWxzZQorCQlnYl90aWxpbmdfY29uZmlnIHw9IEJBTktfVElMSU5HKChtY19hcmJfcmFtY2ZnICYgTk9PRkJBTktfU0hJRlQpID4+IE5PT0ZCQU5LX01BU0spOworCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBHUk9VUF9TSVpFKDApOworCisJaWYgKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spICYgTk9PRlJPV1NfU0hJRlQpID4gMykgeworCQlnYl90aWxpbmdfY29uZmlnIHw9IFJPV19USUxJTkcoMyk7CisJCWdiX3RpbGluZ19jb25maWcgfD0gU0FNUExFX1NQTElUKDMpOworCX0gZWxzZSB7CisJCWdiX3RpbGluZ19jb25maWcgfD0KKwkJCVJPV19USUxJTkcoKChtY19hcmJfcmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgPj4gTk9PRlJPV1NfU0hJRlQpKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PQorCQkJU0FNUExFX1NQTElUKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSk7CisJfQorCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1NXQVBTKDEpOworCisJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzLAorCQkJCQkJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfYmFja2VuZHMsCisJCQkJCQkJKDB4ZmYgPDwgcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcykgJiAweGZmKTsKKwlnYl90aWxpbmdfY29uZmlnIHw9IEJBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9CisJCUlOQUNUSVZFX1FEX1BJUEVTKChSN1hYX01BWF9QSVBFU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfcGlwZXMpICYgUjdYWF9NQVhfUElQRVNfTUFTSyk7CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CisJCUlOQUNUSVZFX1NJTURTKChSN1hYX01BWF9TSU1EU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc2ltZHMpICYgUjdYWF9NQVhfU0lNRFNfTUFTSyk7CisKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgPQorCQlCQUNLRU5EX0RJU0FCTEUoKFI3WFhfTUFYX0JBQ0tFTkRTX01BU0sgPDwgcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcykgJiBSN1hYX01BWF9CQUNLRU5EU19NQVNLKTsKKworCVdSRUczMihHQl9USUxJTkdfQ09ORklHLCBnYl90aWxpbmdfY29uZmlnKTsKKwlXUkVHMzIoRENQX1RJTElOR19DT05GSUcsIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CisJV1JFRzMyKEhEUF9USUxJTkdfQ09ORklHLCAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCisJV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgICAgICBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOworCVdSRUczMihDQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKwlXUkVHMzIoR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisKKwlXUkVHMzIoQ0NfU1lTX1JCX0JBQ0tFTkRfRElTQUJMRSwgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKKwlXUkVHMzIoQ0dUU19TWVNfVENDX0RJU0FCTEUsIDApOworCVdSRUczMihDR1RTX1RDQ19ESVNBQkxFLCAwKTsKKwlXUkVHMzIoQ0dUU19VU0VSX1NZU19UQ0NfRElTQUJMRSwgMCk7CisJV1JFRzMyKENHVFNfVVNFUl9UQ0NfRElTQUJMRSwgMCk7CisKKwludW1fcWRfcGlwZXMgPQorCQlSN1hYX01BWF9CQUNLRU5EUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyAmIElOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCVdSRUczMihWR1RfT1VUX0RFQUxMT0NfQ05UTCwgKG51bV9xZF9waXBlcyAqIDQpICYgREVBTExPQ19ESVNUX01BU0spOworCVdSRUczMihWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwsICgobnVtX3FkX3BpcGVzICogNCkgLSAyKSAmIFZUWF9SRVVTRV9ERVBUSF9NQVNLKTsKKworCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCisJV1JFRzMyKENQX1FVRVVFX1RIUkVTSE9MRFMsIChST1FfSUIxX1NUQVJUKDB4MTYpIHwKKwkJCQkJCVJPUV9JQjJfU1RBUlQoMHgyYikpKTsKKworCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgU1RRX1NQTElUKDB4MzApKTsKKworCVdSRUczMihUQV9DTlRMX0FVWCwgKERJU0FCTEVfQ1VCRV9BTklTTyB8CisJCQkJCVNZTkNfR1JBRElFTlQgfAorCQkJCQlTWU5DX1dBTEtFUiB8CisJCQkJCVNZTkNfQUxJR05FUikpOworCisJc3hfZGVidWdfMSA9IFJSRUczMihTWF9ERUJVR18xKTsKKwlzeF9kZWJ1Z18xIHw9IEVOQUJMRV9ORVdfU01YX0FERFJFU1M7CisJV1JFRzMyKFNYX0RFQlVHXzEsIHN4X2RlYnVnXzEpOworCisJc214X2RjX2N0bDAgPSBSUkVHMzIoU01YX0RDX0NUTDApOworCXNteF9kY19jdGwwICY9IH5DQUNIRV9ERVBUSCgweDFmZik7CisJc214X2RjX2N0bDAgfD0gQ0FDSEVfREVQVEgoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9udW1fb2Zfc2V0cyAqIDY0KSAtIDEpOworCVdSRUczMihTTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOworCisJV1JFRzMyKFNNWF9FVkVOVF9DVEwsIChFU19GTFVTSF9DVEwoNCkgfAorCQkJCQkgIEdTX0ZMVVNIX0NUTCg0KSB8CisJCQkJCSAgQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkJCSAgU1lOQ19GTFVTSF9DVEwpKTsKKworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKKwkJV1JFRzMyKERCX0RFQlVHMywgREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7CisJZWxzZSB7CisJCWRiX2RlYnVnNCA9IFJSRUczMihEQl9ERUJVRzQpOworCQlkYl9kZWJ1ZzQgfD0gRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVI7CisJCVdSRUczMihEQl9ERUJVRzQsIGRiX2RlYnVnNCk7CisJfQorCisJV1JFRzMyKFNYX0VYUE9SVF9CVUZGRVJfU0laRVMsIChDT0xPUl9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8CisJCQkJCQkgICBTTVhfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NteF9zaXplIC8gNCkgLSAxKSkpOworCisJV1JFRzMyKFBBX1NDX0ZJRk9fU0laRSwgKFNDX1BSSU1fRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19wcmltX2ZpZm9fc2l6ZSkgfAorCQkJCQkJIFNDX0hJWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcucnY3NzAuc2NfaGl6X3RpbGVfZmlmb19zaXplKSB8CisJCQkJCQkgU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CisKKwlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKKworCVdSRUczMihWR1RfTlVNX0lOU1RBTkNFUywgMSk7CisKKwlXUkVHMzIoU1BJX0NPTkZJR19DTlRMLCBHUFJfV1JJVEVfUFJJT1JJVFkoMCkpOworCisJV1JFRzMyKFNQSV9DT05GSUdfQ05UTF8xLCBWVFhfRE9ORV9ERUxBWSg0KSk7CisKKwlXUkVHMzIoQ1BfUEVSRk1PTl9DTlRMLCAwKTsKKworCXNxX21zX2ZpZm9fc2l6ZXMgPSAoQ0FDSEVfRklGT19TSVpFKDE2ICogcmRldi0+Y29uZmlnLnJ2NzcwLnNxX251bV9jZl9pbnN0cykgfAorCQkJICAgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKKwkJCSAgICBBTFVfVVBEQVRFX0ZJRk9fSElXQVRFUigweDgpKTsKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SVjc3MDoKKwkJc3FfbXNfZmlmb19zaXplcyB8PSBGRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjcxMDoKKwljYXNlIENISVBfUlY3NDA6CisJZGVmYXVsdDoKKwkJc3FfbXNfZmlmb19zaXplcyB8PSBGRVRDSF9GSUZPX0hJV0FURVIoMHg0KTsKKwkJYnJlYWs7CisJfQorCVdSRUczMihTUV9NU19GSUZPX1NJWkVTLCBzcV9tc19maWZvX3NpemVzKTsKKworCS8qIFNRX0NPTkZJRywgU1FfR1BSX1JFU09VUkNFX01HTVQsIFNRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBTUV9TVEFDS19SRVNPVVJDRV9NR01UCisJICogc2hvdWxkIGJlIGFkanVzdGVkIGFzIG5lZWRlZCBieSB0aGUgMkQvM0QgZHJpdmVycy4gIFRoaXMganVzdCBzZXRzIGRlZmF1bHQgdmFsdWVzCisJICovCisJc3FfY29uZmlnID0gUlJFRzMyKFNRX0NPTkZJRyk7CisJc3FfY29uZmlnICY9IH4oUFNfUFJJTygzKSB8CisJCSAgICAgICBWU19QUklPKDMpIHwKKwkJICAgICAgIEdTX1BSSU8oMykgfAorCQkgICAgICAgRVNfUFJJTygzKSk7CisJc3FfY29uZmlnIHw9IChEWDlfQ09OU1RTIHwKKwkJICAgICAgVkNfRU5BQkxFIHwKKwkJICAgICAgRVhQT1JUX1NSQ19DIHwKKwkJICAgICAgUFNfUFJJTygwKSB8CisJCSAgICAgIFZTX1BSSU8oMSkgfAorCQkgICAgICBHU19QUklPKDIpIHwKKwkJICAgICAgRVNfUFJJTygzKSk7CisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzEwKQorCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KKwkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CisKKwlXUkVHMzIoU1FfQ09ORklHLCBzcV9jb25maWcpOworCisJV1JFRzMyKFNRX0dQUl9SRVNPVVJDRV9NR01UXzEsICAoTlVNX1BTX0dQUlMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3BycyAqIDI0KS82NCkgfAorCQkJCQkgTlVNX1ZTX0dQUlMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3BycyAqIDI0KS82NCkgfAorCQkJCQkgTlVNX0NMQVVTRV9URU1QX0dQUlMoKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiAyNCkvNjQpLzIpKSk7CisKKwlXUkVHMzIoU1FfR1BSX1JFU09VUkNFX01HTVRfMiwgIChOVU1fR1NfR1BSUygocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzICogNykvNjQpIHwKKwkJCQkJIE5VTV9FU19HUFJTKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiA3KS82NCkpKTsKKworCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKE5VTV9QU19USFJFQURTKChyZGV2LT5jb25maWcucnY3NzAubWF4X3RocmVhZHMgKiA0KS84KSB8CisJCQkJICAgTlVNX1ZTX1RIUkVBRFMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGhyZWFkcyAqIDIpLzgpIHwKKwkJCQkgICBOVU1fRVNfVEhSRUFEUygocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aHJlYWRzICogMSkvOCkpOworCWlmICgoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGhyZWFkcyAqIDEpIC8gOCkgPiByZGV2LT5jb25maWcucnY3NzAubWF4X2dzX3RocmVhZHMpCisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210IHw9IE5VTV9HU19USFJFQURTKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3NfdGhyZWFkcyk7CisJZWxzZQorCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCB8PSBOVU1fR1NfVEhSRUFEUygocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9nc190aHJlYWRzICogMSkvOCk7CisJV1JFRzMyKFNRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCk7CisKKwlXUkVHMzIoU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCAoTlVNX1BTX1NUQUNLX0VOVFJJRVMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyAqIDEpLzQpIHwKKwkJCQkJCSAgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyAqIDEpLzQpKSk7CisKKwlXUkVHMzIoU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yLCAoTlVNX0dTX1NUQUNLX0VOVFJJRVMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyAqIDEpLzQpIHwKKwkJCQkJCSAgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyAqIDEpLzQpKSk7CisKKwlzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wID0gKFNJTURBX1JJTkcwKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiAzOCkvNjQpIHwKKwkJCQkgICAgIFNJTURBX1JJTkcxKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiAzOCkvNjQpIHwKKwkJCQkgICAgIFNJTURCX1JJTkcwKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiAzOCkvNjQpIHwKKwkJCQkgICAgIFNJTURCX1JJTkcxKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiAzOCkvNjQpKTsKKworCVdSRUczMihTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8wLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlXUkVHMzIoU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMSwgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMCk7CisJV1JFRzMyKFNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzIsIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzApOworCVdSRUczMihTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8zLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlXUkVHMzIoU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNCwgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMCk7CisJV1JFRzMyKFNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzUsIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzApOworCVdSRUczMihTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl82LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlXUkVHMzIoU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNywgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMCk7CisKKwlXUkVHMzIoUEFfU0NfRk9SQ0VfRU9WX01BWF9DTlRTLCAoRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpIHwKKwkJCQkJICBGT1JDRV9FT1ZfTUFYX1JFWl9DTlQoMjU1KSkpOworCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzEwKQorCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgKENBQ0hFX0lOVkFMSURBVElPTihUQ19PTkxZKSB8CisJCQkJCQlBVVRPX0lOVkxEX0VOKEVTX0FORF9HU19BVVRPKSkpOworCWVsc2UKKwkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChDQUNIRV9JTlZBTElEQVRJT04oVkNfQU5EX1RDKSB8CisJCQkJCQlBVVRPX0lOVkxEX0VOKEVTX0FORF9HU19BVVRPKSkpOworCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUlY3NzA6CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjc0MDoKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAzODQ7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjcxMDoKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAxMjg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW51bV9nc192ZXJ0c19wZXJfdGhyZWFkID0gcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9waXBlcyAqIDE2OworCXZndF9nc19wZXJfZXMgPSBnc19wcmltX2J1ZmZlcl9kZXB0aCArIG51bV9nc192ZXJ0c19wZXJfdGhyZWFkOworCS8qIE1heCB2YWx1ZSBmb3IgdGhpcyBpcyAyNTYgKi8KKwlpZiAodmd0X2dzX3Blcl9lcyA+IDI1NikKKwkJdmd0X2dzX3Blcl9lcyA9IDI1NjsKKworCVdSRUczMihWR1RfRVNfUEVSX0dTLCAxMjgpOworCVdSRUczMihWR1RfR1NfUEVSX0VTLCB2Z3RfZ3NfcGVyX2VzKTsKKwlXUkVHMzIoVkdUX0dTX1BFUl9WUywgMik7CisKKwkvKiBtb3JlIGRlZmF1bHQgdmFsdWVzLiAyRC8zRCBkcml2ZXIgc2hvdWxkIGFkanVzdCBhcyBuZWVkZWQgKi8KKwlXUkVHMzIoVkdUX0dTX1ZFUlRFWF9SRVVTRSwgMTYpOworCVdSRUczMihQQV9TQ19MSU5FX1NUSVBQTEVfU1RBVEUsIDApOworCVdSRUczMihWR1RfU1RSTU9VVF9FTiwgMCk7CisJV1JFRzMyKFNYX01JU0MsIDApOworCVdSRUczMihQQV9TQ19NT0RFX0NOVEwsIDApOworCVdSRUczMihQQV9TQ19FREdFUlVMRSwgMHhhYWFhYWFhYSk7CisJV1JFRzMyKFBBX1NDX0FBX0NPTkZJRywgMCk7CisJV1JFRzMyKFBBX1NDX0NMSVBSRUNUX1JVTEUsIDB4ZmZmZik7CisJV1JFRzMyKFBBX1NDX0xJTkVfU1RJUFBMRSwgMCk7CisJV1JFRzMyKFNQSV9JTlBVVF9aLCAwKTsKKwlXUkVHMzIoU1BJX1BTX0lOX0NPTlRST0xfMCwgTlVNX0lOVEVSUCgyKSk7CisJV1JFRzMyKENCX0NPTE9SN19GUkFHLCAwKTsKKworCS8qIGNsZWFyIHJlbmRlciBidWZmZXIgYmFzZSBhZGRyZXNzZXMgKi8KKwlXUkVHMzIoQ0JfQ09MT1IwX0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjFfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SMl9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1IzX0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjRfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SNV9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1I2X0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjdfQkFTRSwgMCk7CisKKwlXUkVHMzIoVENQX0NOVEwsIDApOworCisJaGRwX2hvc3RfcGF0aF9jbnRsID0gUlJFRzMyKEhEUF9IT1NUX1BBVEhfQ05UTCk7CisJV1JFRzMyKEhEUF9IT1NUX1BBVEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCVdSRUczMihQQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCisJV1JFRzMyKFBBX0NMX0VOSEFOQ0UsIChDTElQX1ZUWF9SRU9SREVSX0VOQSB8CisJCQkJCSAgTlVNX0NMSVBfU0VRKDMpKSk7CisKK30KKworaW50IHJ2NzcwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJZml4ZWQyMF8xMiBhOworCXUzMiB0bXA7CisJaW50IHI7CisKKwkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KKwkvKiBGSVhNRTogRG9uJ3Qga25vdyBob3cgdG8gZGV0ZXJtaW5lIHZyYW0gd2lkdGgsIG5lZWQgdG8gY2hlY2sKKwkgKiB2cmFtX3dpZHRoIHVzYWdlCisJICovCisJcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKKwlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CiAJLyogQ291bGQgYXBlciBzaXplIHJlcG9ydCAwID8gKi8KIAlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwogCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOworCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KKwlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCS8qIGd0dF9zaXplIGlzIHNldHVwIGJ5IHJhZGVvbl9hZ3BfaW5pdCAqLworCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKKwkJdG1wID0gMHhGRkZGRkZGRlVMIC0gcmRldi0+bWMuYWdwX2Jhc2UgLSByZGV2LT5tYy5ndHRfc2l6ZTsKKwkJLyogVHJ5IHRvIHB1dCB2cmFtIGJlZm9yZSBvciBhZnRlciBBR1AgYmVjYXVzZSB3ZQorCQkgKiB3ZSB3YW50IFNZU1RFTV9BUEVSVFVSRSB0byBjb3ZlciBib3RoIFZSQU0gYW5kCisJCSAqIEFHUCBzbyB0aGF0IEdQVSBjYW4gY2F0Y2ggb3V0IG9mIFZSQU0vQUdQIGFjY2VzcworCQkgKi8KKwkJaWYgKHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSkgeworCQkJLyogRW5vdWdodCBwbGFjZSBiZWZvcmUgKi8KKwkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gLQorCQkJCQkJCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJfSBlbHNlIGlmICh0bXAgPiByZGV2LT5tYy5tY192cmFtX3NpemUpIHsKKwkJCS8qIEVub3VnaHQgcGxhY2UgYWZ0ZXIgKi8KKwkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKworCQkJCQkJCXJkZXYtPm1jLmd0dF9zaXplOworCQl9IGVsc2UgeworCQkJLyogVHJ5IHRvIHNldHVwIFZSQU0gdGhlbiBBR1AgbWlnaHQgbm90CisJCQkgKiBub3Qgd29yayBvbiBzb21lIGNhcmQKKwkJCSAqLworCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4MDAwMDAwMDBVTDsKKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJfQorCX0gZWxzZSB7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7CisJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJfQorCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOworCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy5ndHRfc3RhcnQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb247CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplOworCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgorCSAqIGRlZmF1bHQgc2V0dXAKKwkgKi8KKwlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTAwKTsKKwlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrKTsKKwlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOworCXJldHVybiAwOworfQoraW50IHJ2NzcwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBGSVhNRTogaW1wbGVtZW50IGFueSBydjc3MCBzcGVjaWZpYyBiaXRzICovCisJcmV0dXJuIHI2MDBfZ3B1X3Jlc2V0KHJkZXYpOworfQorCitzdGF0aWMgaW50IHJ2NzcwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpOworCXJ2NzcwX21jX3Jlc3VtZShyZGV2KTsKKwlyID0gcnY3NzBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnY3NzBfZ3B1X2luaXQocmRldik7CisKKwlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIFJBREVPTl9HRU1fRE9NQUlOX1ZSQU0sCisJCQkgICAgICAmcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkcik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIGJsaXQgb2JqZWN0ICVkXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCisJciA9IHJhZGVvbl9yaW5nX2luaXQocmRldiwgcmRldi0+Y3AucmluZ19zaXplKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2NzcwX2NwX2xvYWRfbWljcm9jb2RlKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcjYwMF9jcF9yZXN1bWUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByNjAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiAwOworfQorCitpbnQgcnY3NzBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KKwl9CisJLyogcG9zdCBjYXJkICovCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9IGVsc2UgeworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gcnY3NzBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInI2MDAgc3RhcnR1cCBmYWlsZWQgb24gcmVzdW1lXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIHI7CisKK30KKworaW50IHJ2NzcwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCisJcjcwMF9jcF9zdG9wKHJkZXYpOworCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisJcnY3NzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisKKwkvKiB1bnBpbiBzaGFkZXJzIGJvICovCisgICAgICAgIHJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOworCXJldHVybiAwOworfQorCisvKiBQbGFuIGlzIHRvIG1vdmUgaW5pdGlhbGl6YXRpb24gaW4gdGhhdCBmdW5jdGlvbiBhbmQgdXNlCisgKiBoZWxwZXIgZnVuY3Rpb24gc28gdGhhdCByYWRlb25fZGV2aWNlX2luaXQgcHJldHR5IG11Y2gKKyAqIGRvIG5vdGhpbmcgbW9yZSB0aGFuIGNhbGxpbmcgYXNpYyBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcworICogc2hvdWxkIGFsc28gYWxsb3cgdG8gcmVtb3ZlIGEgYnVuY2ggb2YgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIGxpa2UgdnJhbV9pbmZvLgorICovCitpbnQgcnY3NzBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJkZXYtPm5ld19pbml0X3BhdGggPSB0cnVlOworCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBUaGlzIGRvbid0IGRvIG11Y2ggKi8KKwlyID0gcmFkZW9uX2dlbV9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBSZWFkIEJJT1MgKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBNdXN0IGJlIGFuIEFUT01CSU9TICovCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpCisJCXJldHVybiAtRUlOVkFMOworCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogUG9zdCBjYXJkIGlmIG5lY2Vzc2FyeSAqLworCWlmICghcjYwMF9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLworCXI2MDBfc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcnY3NzBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KKwkJCXJ2NzcwX2ZpbmkocmRldik7CisJCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKKwkJCXJldHVybiBydjc3MF9pbml0KHJkZXYpOworCQl9CisJCXJldHVybiByOworCX0KKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJkZXYtPmNwLnJpbmdfb2JqID0gTlVMTDsKKwlyNjAwX3JpbmdfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisKKwlpZiAoIXJkZXYtPm1lX2Z3IHx8ICFyZGV2LT5wZnBfZncpIHsKKwkJciA9IHI2MDBfY3BfaW5pdF9taWNyb2NvZGUocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIVxuIik7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0KKworCXIgPSByNjAwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCBibGl0dGVyICglZCkuXG4iLCByKTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKworCXIgPSBydjc3MF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJCS8qIFJldHJ5IHdpdGggZGlzYWJsaW5nIEFHUCAqLworCQkJcnY3NzBfZmluaShyZGV2KTsKKwkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQkJcmV0dXJuIHJ2NzcwX2luaXQocmRldik7CisJCX0KKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlpZiAocmRldi0+YWNjZWxfd29ya2luZykgeworCQlyID0gcmFkZW9uX2liX3Bvb2xfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKKwkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwkJfQorCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKKwkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBydjc3MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJ2NzcwX3N1c3BlbmQocmRldik7CisKKwlyNjAwX2JsaXRfZmluaShyZGV2KTsKKwlyYWRlb25fcmluZ19maW5pKHJkZXYpOworCXJ2NzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOworI2lmIF9fT1NfSEFTX0FHUAorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApCisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKyNlbmRpZgorCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCX0gZWxzZSB7CisJCXJhZGVvbl9jb21iaW9zX2ZpbmkocmRldik7CisJfQorCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworCXJhZGVvbl9kdW1teV9wYWdlX2ZpbmkocmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjljM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBSVjc3MF9ICisjZGVmaW5lIFJWNzcwX0gKKworI2RlZmluZSBSN1hYX01BWF9TSF9HUFJTICAgICAgICAgICAyNTYKKyNkZWZpbmUgUjdYWF9NQVhfVEVNUF9HUFJTICAgICAgICAgMTYKKyNkZWZpbmUgUjdYWF9NQVhfU0hfVEhSRUFEUyAgICAgICAgMjU2CisjZGVmaW5lIFI3WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMgIDQwOTYKKyNkZWZpbmUgUjdYWF9NQVhfQkFDS0VORFMgICAgICAgICAgOAorI2RlZmluZSBSN1hYX01BWF9CQUNLRU5EU19NQVNLICAgICAweGZmCisjZGVmaW5lIFI3WFhfTUFYX1NJTURTICAgICAgICAgICAgIDE2CisjZGVmaW5lIFI3WFhfTUFYX1NJTURTX01BU0sgICAgICAgIDB4ZmZmZgorI2RlZmluZSBSN1hYX01BWF9QSVBFUyAgICAgICAgICAgICA4CisjZGVmaW5lIFI3WFhfTUFYX1BJUEVTX01BU0sgICAgICAgIDB4ZmYKKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lCUNCX0NPTE9SMF9CQVNFCQkJCQkweDI4MDQwCisjZGVmaW5lCUNCX0NPTE9SMV9CQVNFCQkJCQkweDI4MDQ0CisjZGVmaW5lCUNCX0NPTE9SMl9CQVNFCQkJCQkweDI4MDQ4CisjZGVmaW5lCUNCX0NPTE9SM19CQVNFCQkJCQkweDI4MDRDCisjZGVmaW5lCUNCX0NPTE9SNF9CQVNFCQkJCQkweDI4MDUwCisjZGVmaW5lCUNCX0NPTE9SNV9CQVNFCQkJCQkweDI4MDU0CisjZGVmaW5lCUNCX0NPTE9SNl9CQVNFCQkJCQkweDI4MDU4CisjZGVmaW5lCUNCX0NPTE9SN19CQVNFCQkJCQkweDI4MDVDCisjZGVmaW5lCUNCX0NPTE9SN19GUkFHCQkJCQkweDI4MEZDCisKKyNkZWZpbmUJQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHCQkJMHg4OTUwCisjZGVmaW5lCUNDX1JCX0JBQ0tFTkRfRElTQUJMRQkJCQkweDk4RjQKKyNkZWZpbmUJCUJBQ0tFTkRfRElTQUJMRSh4KQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQlDQ19TWVNfUkJfQkFDS0VORF9ESVNBQkxFCQkJMHgzRjg4CisKKyNkZWZpbmUJQ0dUU19TWVNfVENDX0RJU0FCTEUJCQkJMHgzRjkwCisjZGVmaW5lCUNHVFNfVENDX0RJU0FCTEUJCQkJMHg5MTQ4CisjZGVmaW5lCUNHVFNfVVNFUl9TWVNfVENDX0RJU0FCTEUJCQkweDNGOTQKKyNkZWZpbmUJQ0dUU19VU0VSX1RDQ19ESVNBQkxFCQkJCTB4OTE0QworCisjZGVmaW5lCUNPTkZJR19NRU1TSVpFCQkJCQkweDU0MjgKKworI2RlZmluZQlDUF9NRV9DTlRMCQkJCQkweDg2RDgKKyNkZWZpbmUJCUNQX01FX0hBTFQJCQkJCSgxPDwyOCkKKyNkZWZpbmUJCUNQX1BGUF9IQUxUCQkJCQkoMTw8MjYpCisjZGVmaW5lCUNQX01FX1JBTV9EQVRBCQkJCQkweEMxNjAKKyNkZWZpbmUJQ1BfTUVfUkFNX1JBRERSCQkJCQkweEMxNTgKKyNkZWZpbmUJQ1BfTUVfUkFNX1dBRERSCQkJCQkweEMxNUMKKyNkZWZpbmUgQ1BfTUVRX1RIUkVTSE9MRFMJCQkJMHg4NzY0CisjZGVmaW5lCQlTVFFfU1BMSVQoeCkJCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJQ1BfUEVSRk1PTl9DTlRMCQkJCQkweDg3RkMKKyNkZWZpbmUJQ1BfUEZQX1VDT0RFX0FERFIJCQkJMHhDMTUwCisjZGVmaW5lCUNQX1BGUF9VQ09ERV9EQVRBCQkJCTB4QzE1NAorI2RlZmluZQlDUF9RVUVVRV9USFJFU0hPTERTCQkJCTB4ODc2MAorI2RlZmluZQkJUk9RX0lCMV9TVEFSVCh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlST1FfSUIyX1NUQVJUKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJQ1BfUkJfQ05UTAkJCQkJMHhDMTA0CisjZGVmaW5lCQlSQl9CVUZTWih4KQkJCQkJKCh4KTw8MCkKKyNkZWZpbmUJCVJCX0JMS1NaKHgpCQkJCQkoKHgpPDw4KQorI2RlZmluZQkJUkJfTk9fVVBEQVRFCQkJCQkoMTw8MjcpCisjZGVmaW5lCQlSQl9SUFRSX1dSX0VOQQkJCQkJKDE8PDMxKQorI2RlZmluZQkJQlVGX1NXQVBfMzJCSVQJCQkJCSgyIDw8IDE2KQorI2RlZmluZQlDUF9SQl9SUFRSCQkJCQkweDg3MDAKKyNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSCQkJCQkweEMxMEMKKyNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSX0hJCQkJCTB4QzExMAorI2RlZmluZQlDUF9SQl9SUFRSX1dSCQkJCQkweEMxMDgKKyNkZWZpbmUJQ1BfUkJfV1BUUgkJCQkJMHhDMTE0CisjZGVmaW5lCUNQX1JCX1dQVFJfQUREUgkJCQkJMHhDMTE4CisjZGVmaW5lCUNQX1JCX1dQVFJfQUREUl9ISQkJCQkweEMxMUMKKyNkZWZpbmUJQ1BfUkJfV1BUUl9ERUxBWQkJCQkweDg3MDQKKyNkZWZpbmUJQ1BfU0VNX1dBSVRfVElNRVIJCQkJMHg4NUJDCisKKyNkZWZpbmUJREJfREVCVUczCQkJCQkweDk4QjAKKyNkZWZpbmUJCURCX0NMS19PRkZfREVMQVkoeCkJCQkJKCh4KSA8PCAxMSkKKyNkZWZpbmUgREJfREVCVUc0CQkJCQkweDlCOEMKKyNkZWZpbmUJCURJU0FCTEVfVElMRV9DT1ZFUkVEX0ZPUl9QU19JVEVSCQkoMSA8PCA2KQorCisjZGVmaW5lCURDUF9USUxJTkdfQ09ORklHCQkJCTB4NkNBMAorI2RlZmluZQkJUElQRV9USUxJTkcoeCkJCQkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgCUJBTktfVElMSU5HKHgpCQkJCQkoKHgpIDw8IDQpCisjZGVmaW5lCQlHUk9VUF9TSVpFKHgpCQkJCQkoKHgpIDw8IDYpCisjZGVmaW5lCQlST1dfVElMSU5HKHgpCQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCQlCQU5LX1NXQVBTKHgpCQkJCQkoKHgpIDw8IDExKQorI2RlZmluZQkJU0FNUExFX1NQTElUKHgpCQkJCQkoKHgpIDw8IDE0KQorI2RlZmluZQkJQkFDS0VORF9NQVAoeCkJCQkJCSgoeCkgPDwgMTYpCisKKyNkZWZpbmUgR0JfVElMSU5HX0NPTkZJRwkJCQkweDk4RjAKKworI2RlZmluZQlHQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRwkJCTB4ODk1NAorI2RlZmluZQkJSU5BQ1RJVkVfUURfUElQRVMoeCkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJSU5BQ1RJVkVfUURfUElQRVNfTUFTSwkJCQkweDAwMDBGRjAwCisjZGVmaW5lCQlJTkFDVElWRV9TSU1EUyh4KQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQkJSU5BQ1RJVkVfU0lNRFNfTUFTSwkJCQkweDAwRkYwMDAwCisKKyNkZWZpbmUJR1JCTV9DTlRMCQkJCQkweDgwMDAKKyNkZWZpbmUJCUdSQk1fUkVBRF9USU1FT1VUKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJR1JCTV9TT0ZUX1JFU0VUCQkJCQkweDgwMjAKKyNkZWZpbmUJCVNPRlRfUkVTRVRfQ1AJCQkJCSgxPDwwKQorI2RlZmluZQlHUkJNX1NUQVRVUwkJCQkJMHg4MDEwCisjZGVmaW5lCQlDTURGSUZPX0FWQUlMX01BU0sJCQkJMHgwMDAwMDAwRgorI2RlZmluZQkJR1VJX0FDVElWRQkJCQkJKDE8PDMxKQorI2RlZmluZQlHUkJNX1NUQVRVUzIJCQkJCTB4ODAxNAorCisjZGVmaW5lCUhEUF9IT1NUX1BBVEhfQ05UTAkJCQkweDJDMDAKKyNkZWZpbmUJSERQX05PTlNVUkZBQ0VfQkFTRQkJCQkweDJDMDQKKyNkZWZpbmUJSERQX05PTlNVUkZBQ0VfSU5GTwkJCQkweDJDMDgKKyNkZWZpbmUJSERQX05PTlNVUkZBQ0VfU0laRQkJCQkweDJDMEMKKyNkZWZpbmUgSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTAkJCTB4NTRBMAorI2RlZmluZQlIRFBfVElMSU5HX0NPTkZJRwkJCQkweDJGM0MKKworI2RlZmluZQlNQ19BUkJfUkFNQ0ZHCQkJCQkweDI3NjAKKyNkZWZpbmUJCU5PT0ZCQU5LX1NISUZUCQkJCQkwCisjZGVmaW5lCQlOT09GQkFOS19NQVNLCQkJCQkweDAwMDAwMDAzCisjZGVmaW5lCQlOT09GUkFOS19TSElGVAkJCQkJMgorI2RlZmluZQkJTk9PRlJBTktfTUFTSwkJCQkJMHgwMDAwMDAwNAorI2RlZmluZQkJTk9PRlJPV1NfU0hJRlQJCQkJCTMKKyNkZWZpbmUJCU5PT0ZST1dTX01BU0sJCQkJCTB4MDAwMDAwMzgKKyNkZWZpbmUJCU5PT0ZDT0xTX1NISUZUCQkJCQk2CisjZGVmaW5lCQlOT09GQ09MU19NQVNLCQkJCQkweDAwMDAwMEMwCisjZGVmaW5lCQlDSEFOU0laRV9TSElGVAkJCQkJOAorI2RlZmluZQkJQ0hBTlNJWkVfTUFTSwkJCQkJMHgwMDAwMDEwMAorI2RlZmluZQkJQlVSU1RMRU5HVEhfU0hJRlQJCQkJOQorI2RlZmluZQkJQlVSU1RMRU5HVEhfTUFTSwkJCQkweDAwMDAwMjAwCisjZGVmaW5lCU1DX1ZNX0FHUF9UT1AJCQkJCTB4MjAyOAorI2RlZmluZQlNQ19WTV9BR1BfQk9UCQkJCQkweDIwMkMKKyNkZWZpbmUJTUNfVk1fQUdQX0JBU0UJCQkJCTB4MjAzMAorI2RlZmluZQlNQ19WTV9GQl9MT0NBVElPTgkJCQkweDIwMjQKKyNkZWZpbmUJTUNfVk1fTUJfTDFfVExCMF9DTlRMCQkJCTB4MjIzNAorI2RlZmluZQlNQ19WTV9NQl9MMV9UTEIxX0NOVEwJCQkJMHgyMjM4CisjZGVmaW5lCU1DX1ZNX01CX0wxX1RMQjJfQ05UTAkJCQkweDIyM0MKKyNkZWZpbmUJTUNfVk1fTUJfTDFfVExCM19DTlRMCQkJCTB4MjI0MAorI2RlZmluZQkJRU5BQkxFX0wxX1RMQgkJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCUVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HCQkJKDEgPDwgMSkKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9QQV9PTkxZCQkJKDAgPDwgMykKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUAkJCSgxIDw8IDMpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfSU5fU1lTCQkJKDIgPDwgMykKKyNkZWZpbmUJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTCQkJKDMgPDwgMykKKyNkZWZpbmUJCVNZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU19USFJVCSgwIDw8IDUpCisjZGVmaW5lCQlFRkZFQ1RJVkVfTDFfVExCX1NJWkUoeCkJCQkoKHgpPDwxNSkKKyNkZWZpbmUJCUVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpCQkJKCh4KTw8MTgpCisjZGVmaW5lCU1DX1ZNX01EX0wxX1RMQjBfQ05UTAkJCQkweDI2NTQKKyNkZWZpbmUJTUNfVk1fTURfTDFfVExCMV9DTlRMCQkJCTB4MjY1OAorI2RlZmluZQlNQ19WTV9NRF9MMV9UTEIyX0NOVEwJCQkJMHgyNjVDCisjZGVmaW5lCU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIJCTB4MjAzQworI2RlZmluZQlNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSCQkJMHgyMDM4CisjZGVmaW5lCU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUgkJCTB4MjAzNAorCisjZGVmaW5lCVBBX0NMX0VOSEFOQ0UJCQkJCTB4OEExNAorI2RlZmluZQkJQ0xJUF9WVFhfUkVPUkRFUl9FTkEJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCU5VTV9DTElQX1NFUSh4KQkJCQkJKCh4KSA8PCAxKQorI2RlZmluZSBQQV9TQ19BQV9DT05GSUcJCQkJCTB4MjhDMDQKKyNkZWZpbmUgUEFfU0NfQ0xJUFJFQ1RfUlVMRQkJCQkweDI4MjBDCisjZGVmaW5lCVBBX1NDX0VER0VSVUxFCQkJCQkweDI4MjMwCisjZGVmaW5lCVBBX1NDX0ZJRk9fU0laRQkJCQkJMHg4QkNDCisjZGVmaW5lCQlTQ19QUklNX0ZJRk9fU0laRSh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlTQ19ISVpfVElMRV9GSUZPX1NJWkUoeCkJCQkoKHgpIDw8IDEyKQorI2RlZmluZQlQQV9TQ19GT1JDRV9FT1ZfTUFYX0NOVFMJCQkweDhCMjQKKyNkZWZpbmUJCUZPUkNFX0VPVl9NQVhfQ0xLX0NOVCh4KQkJCSgoeCk8PDApCisjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX1JFWl9DTlQoeCkJCQkoKHgpPDwxNikKKyNkZWZpbmUgUEFfU0NfTElORV9TVElQUExFCQkJCTB4MjhBMEMKKyNkZWZpbmUJUEFfU0NfTElORV9TVElQUExFX1NUQVRFCQkJMHg4QjEwCisjZGVmaW5lIFBBX1NDX01PREVfQ05UTAkJCQkJMHgyOEE0QworI2RlZmluZQlQQV9TQ19NVUxUSV9DSElQX0NOVEwJCQkJMHg4QjIwCisjZGVmaW5lCQlTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUoeCkJCQkoKHgpIDw8IDIwKQorCisjZGVmaW5lCVNDUkFUQ0hfUkVHMAkJCQkJMHg4NTAwCisjZGVmaW5lCVNDUkFUQ0hfUkVHMQkJCQkJMHg4NTA0CisjZGVmaW5lCVNDUkFUQ0hfUkVHMgkJCQkJMHg4NTA4CisjZGVmaW5lCVNDUkFUQ0hfUkVHMwkJCQkJMHg4NTBDCisjZGVmaW5lCVNDUkFUQ0hfUkVHNAkJCQkJMHg4NTEwCisjZGVmaW5lCVNDUkFUQ0hfUkVHNQkJCQkJMHg4NTE0CisjZGVmaW5lCVNDUkFUQ0hfUkVHNgkJCQkJMHg4NTE4CisjZGVmaW5lCVNDUkFUQ0hfUkVHNwkJCQkJMHg4NTFDCisjZGVmaW5lCVNDUkFUQ0hfVU1TSwkJCQkJMHg4NTQwCisjZGVmaW5lCVNDUkFUQ0hfQUREUgkJCQkJMHg4NTQ0CisKKyNkZWZpbmUJU01YX0RDX0NUTDAJCQkJCTB4QTAyMAorI2RlZmluZQkJVVNFX0hBU0hfRlVOQ1RJT04JCQkJKDEgPDwgMCkKKyNkZWZpbmUJCUNBQ0hFX0RFUFRIKHgpCQkJCQkoKHgpIDw8IDEpCisjZGVmaW5lCQlGTFVTSF9BTExfT05fRVZFTlQJCQkJKDEgPDwgMTApCisjZGVmaW5lCQlTVEFMTF9PTl9FVkVOVAkJCQkJKDEgPDwgMTEpCisjZGVmaW5lCVNNWF9FVkVOVF9DVEwJCQkJCTB4QTAyQworI2RlZmluZQkJRVNfRkxVU0hfQ1RMKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlHU19GTFVTSF9DVEwoeCkJCQkJCSgoeCkgPDwgMykKKyNkZWZpbmUJCUFDS19GTFVTSF9DVEwoeCkJCQkJKCh4KSA8PCA2KQorI2RlZmluZQkJU1lOQ19GTFVTSF9DVEwJCQkJCSgxIDw8IDgpCisKKyNkZWZpbmUJU1BJX0NPTkZJR19DTlRMCQkJCQkweDkxMDAKKyNkZWZpbmUJCUdQUl9XUklURV9QUklPUklUWSh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlESVNBQkxFX0lOVEVSUF8xCQkJCSgxIDw8IDUpCisjZGVmaW5lCVNQSV9DT05GSUdfQ05UTF8xCQkJCTB4OTEzQworI2RlZmluZQkJVlRYX0RPTkVfREVMQVkoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJSU5URVJQX09ORV9QUklNX1BFUl9ST1cJCQkJKDEgPDwgNCkKKyNkZWZpbmUJU1BJX0lOUFVUX1oJCQkJCTB4Mjg2RDgKKyNkZWZpbmUJU1BJX1BTX0lOX0NPTlRST0xfMAkJCQkweDI4NkNDCisjZGVmaW5lCQlOVU1fSU5URVJQKHgpCQkJCQkoKHgpPDwwKQorI2RlZmluZQkJUE9TSVRJT05fRU5BCQkJCQkoMTw8OCkKKyNkZWZpbmUJCVBPU0lUSU9OX0NFTlRST0lECQkJCSgxPDw5KQorI2RlZmluZQkJUE9TSVRJT05fQUREUih4KQkJCQkoKHgpPDwxMCkKKyNkZWZpbmUJCVBBUkFNX0dFTih4KQkJCQkJKCh4KTw8MTUpCisjZGVmaW5lCQlQQVJBTV9HRU5fQUREUih4KQkJCQkoKHgpPDwxOSkKKyNkZWZpbmUJCUJBUllDX1NBTVBMRV9DTlRMKHgpCQkJCSgoeCk8PDI2KQorI2RlZmluZQkJUEVSU1BfR1JBRElFTlRfRU5BCQkJCSgxPDwyOCkKKyNkZWZpbmUJCUxJTkVBUl9HUkFESUVOVF9FTkEJCQkJKDE8PDI5KQorI2RlZmluZQkJUE9TSVRJT05fU0FNUExFCQkJCQkoMTw8MzApCisjZGVmaW5lCQlCQVJZQ19BVF9TQU1QTEVfRU5BCQkJCSgxPDwzMSkKKworI2RlZmluZQlTUV9DT05GSUcJCQkJCTB4OEMwMAorI2RlZmluZQkJVkNfRU5BQkxFCQkJCQkoMSA8PCAwKQorI2RlZmluZQkJRVhQT1JUX1NSQ19DCQkJCQkoMSA8PCAxKQorI2RlZmluZQkJRFg5X0NPTlNUUwkJCQkJKDEgPDwgMikKKyNkZWZpbmUJCUFMVV9JTlNUX1BSRUZFUl9WRUNUT1IJCQkJKDEgPDwgMykKKyNkZWZpbmUJCURYMTBfQ0xBTVAJCQkJCSgxIDw8IDQpCisjZGVmaW5lCQlDTEFVU0VfU0VRX1BSSU8oeCkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJUFNfUFJJTyh4KQkJCQkJKCh4KSA8PCAyNCkKKyNkZWZpbmUJCVZTX1BSSU8oeCkJCQkJCSgoeCkgPDwgMjYpCisjZGVmaW5lCQlHU19QUklPKHgpCQkJCQkoKHgpIDw8IDI4KQorI2RlZmluZQlTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8wCQkJMHg4REIwCisjZGVmaW5lCQlTSU1EQV9SSU5HMCh4KQkJCQkJKCh4KTw8MCkKKyNkZWZpbmUJCVNJTURBX1JJTkcxKHgpCQkJCQkoKHgpPDw4KQorI2RlZmluZQkJU0lNREJfUklORzAoeCkJCQkJCSgoeCk8PDE2KQorI2RlZmluZQkJU0lNREJfUklORzEoeCkJCQkJCSgoeCk8PDI0KQorI2RlZmluZQlTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8xCQkJMHg4REI0CisjZGVmaW5lCVNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzIJCQkweDhEQjgKKyNkZWZpbmUJU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMwkJCTB4OERCQworI2RlZmluZQlTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl80CQkJMHg4REMwCisjZGVmaW5lCVNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzUJCQkweDhEQzQKKyNkZWZpbmUJU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNgkJCTB4OERDOAorI2RlZmluZQlTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl83CQkJMHg4RENDCisjZGVmaW5lCQlFU19QUklPKHgpCQkJCQkoKHgpIDw8IDMwKQorI2RlZmluZQlTUV9HUFJfUkVTT1VSQ0VfTUdNVF8xCQkJCTB4OEMwNAorI2RlZmluZQkJTlVNX1BTX0dQUlMoeCkJCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCU5VTV9WU19HUFJTKHgpCQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQkJRFlOX0dQUl9FTkFCTEUJCQkJCSgxIDw8IDI3KQorI2RlZmluZQkJTlVNX0NMQVVTRV9URU1QX0dQUlMoeCkJCQkJKCh4KSA8PCAyOCkKKyNkZWZpbmUJU1FfR1BSX1JFU09VUkNFX01HTVRfMgkJCQkweDhDMDgKKyNkZWZpbmUJCU5VTV9HU19HUFJTKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlOVU1fRVNfR1BSUyh4KQkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJU1FfTVNfRklGT19TSVpFUwkJCQkweDhDRjAKKyNkZWZpbmUJCUNBQ0hFX0ZJRk9fU0laRSh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlGRVRDSF9GSUZPX0hJV0FURVIoeCkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJRE9ORV9GSUZPX0hJV0FURVIoeCkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCUFMVV9VUERBVEVfRklGT19ISVdBVEVSKHgpCQkJKCh4KSA8PCAyNCkKKyNkZWZpbmUJU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xCQkJMHg4QzEwCisjZGVmaW5lCQlOVU1fUFNfU1RBQ0tfRU5UUklFUyh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlOVU1fVlNfU1RBQ0tfRU5UUklFUyh4KQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQlTUV9TVEFDS19SRVNPVVJDRV9NR01UXzIJCQkweDhDMTQKKyNkZWZpbmUJCU5VTV9HU19TVEFDS19FTlRSSUVTKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCU5VTV9FU19TVEFDS19FTlRSSUVTKHgpCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCVNRX1RIUkVBRF9SRVNPVVJDRV9NR01UCQkJCTB4OEMwQworI2RlZmluZQkJTlVNX1BTX1RIUkVBRFMoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJTlVNX1ZTX1RIUkVBRFMoeCkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJTlVNX0dTX1RIUkVBRFMoeCkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCU5VTV9FU19USFJFQURTKHgpCQkJCSgoeCkgPDwgMjQpCisKKyNkZWZpbmUJU1hfREVCVUdfMQkJCQkJMHg5MDU4CisjZGVmaW5lCQlFTkFCTEVfTkVXX1NNWF9BRERSRVNTCQkJCSgxIDw8IDE2KQorI2RlZmluZQlTWF9FWFBPUlRfQlVGRkVSX1NJWkVTCQkJCTB4OTAwQworI2RlZmluZQkJQ09MT1JfQlVGRkVSX1NJWkUoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoeCkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJU01YX0JVRkZFUl9TSVpFKHgpCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCVNYX01JU0MJCQkJCQkweDI4MzUwCisKKyNkZWZpbmUJVEFfQ05UTF9BVVgJCQkJCTB4OTUwOAorI2RlZmluZQkJRElTQUJMRV9DVUJFX1dSQVAJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCURJU0FCTEVfQ1VCRV9BTklTTwkJCQkoMSA8PCAxKQorI2RlZmluZQkJU1lOQ19HUkFESUVOVAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lCQlTWU5DX1dBTEtFUgkJCQkJKDEgPDwgMjUpCisjZGVmaW5lCQlTWU5DX0FMSUdORVIJCQkJCSgxIDw8IDI2KQorI2RlZmluZQkJQklMSU5FQVJfUFJFQ0lTSU9OXzZfQklUCQkJKDAgPDwgMzEpCisjZGVmaW5lCQlCSUxJTkVBUl9QUkVDSVNJT05fOF9CSVQJCQkoMSA8PCAzMSkKKworI2RlZmluZQlUQ1BfQ05UTAkJCQkJMHg5NjEwCisKKyNkZWZpbmUJVkdUX0NBQ0hFX0lOVkFMSURBVElPTgkJCQkweDg4QzQKKyNkZWZpbmUJCUNBQ0hFX0lOVkFMSURBVElPTih4KQkJCQkoKHgpPDwwKQorI2RlZmluZQkJCVZDX09OTFkJCQkJCQkwCisjZGVmaW5lCQkJVENfT05MWQkJCQkJCTEKKyNkZWZpbmUJCQlWQ19BTkRfVEMJCQkJCTIKKyNkZWZpbmUJCUFVVE9fSU5WTERfRU4oeCkJCQkJKCh4KSA8PCA2KQorI2RlZmluZQkJCU5PX0FVVE8JCQkJCQkwCisjZGVmaW5lCQkJRVNfQVVUTwkJCQkJCTEKKyNkZWZpbmUJCQlHU19BVVRPCQkJCQkJMgorI2RlZmluZQkJCUVTX0FORF9HU19BVVRPCQkJCQkzCisjZGVmaW5lCVZHVF9FU19QRVJfR1MJCQkJCTB4ODhDQworI2RlZmluZQlWR1RfR1NfUEVSX0VTCQkJCQkweDg4QzgKKyNkZWZpbmUJVkdUX0dTX1BFUl9WUwkJCQkJMHg4OEU4CisjZGVmaW5lCVZHVF9HU19WRVJURVhfUkVVU0UJCQkJMHg4OEQ0CisjZGVmaW5lCVZHVF9OVU1fSU5TVEFOQ0VTCQkJCTB4ODk3NAorI2RlZmluZQlWR1RfT1VUX0RFQUxMT0NfQ05UTAkJCQkweDI4QzVDCisjZGVmaW5lCQlERUFMTE9DX0RJU1RfTUFTSwkJCQkweDAwMDAwMDdGCisjZGVmaW5lCVZHVF9TVFJNT1VUX0VOCQkJCQkweDI4QUIwCisjZGVmaW5lCVZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTAkJCTB4MjhDNTgKKyNkZWZpbmUJCVZUWF9SRVVTRV9ERVBUSF9NQVNLCQkJCTB4MDAwMDAwRkYKKworI2RlZmluZSBWTV9DT05URVhUMF9DTlRMCQkJCTB4MTQxMAorI2RlZmluZQkJRU5BQkxFX0NPTlRFWFQJCQkJCSgxIDw8IDApCisjZGVmaW5lCQlQQUdFX1RBQkxFX0RFUFRIKHgpCQkJCSgoKHgpICYgMykgPDwgMSkKKyNkZWZpbmUJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQJCSgxIDw8IDQpCisjZGVmaW5lCVZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSCQkweDE1M0MKKyNkZWZpbmUJVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUgkJCTB4MTU3QworI2RlZmluZQlWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIJCTB4MTU1QworI2RlZmluZSBWTV9DT05URVhUMF9QUk9URUNUSU9OX0ZBVUxUX0RFRkFVTFRfQUREUgkweDE1MTgKKyNkZWZpbmUgVk1fTDJfQ05UTAkJCQkJMHgxNDAwCisjZGVmaW5lCQlFTkFCTEVfTDJfQ0FDSEUJCQkJCSgxIDw8IDApCisjZGVmaW5lCQlFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORwkJCSgxIDw8IDEpCisjZGVmaW5lCQlFTkFCTEVfTDJfUFRFX0NBQ0hFX0xSVV9VUERBVEVfQllfV1JJVEUJCSgxIDw8IDkpCisjZGVmaW5lCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSh4KQkJCSgoKHgpICYgNykgPDwgMTQpCisjZGVmaW5lIFZNX0wyX0NOVEwyCQkJCQkweDE0MDQKKyNkZWZpbmUJCUlOVkFMSURBVEVfQUxMX0wxX1RMQlMJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCUlOVkFMSURBVEVfTDJfQ0FDSEUJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVk1fTDJfQ05UTDMJCQkJCTB4MTQwOAorI2RlZmluZQkJQkFOS19TRUxFQ1QoeCkJCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCUNBQ0hFX1VQREFURV9NT0RFKHgpCQkJCSgoeCkgPDwgNikKKyNkZWZpbmUJVk1fTDJfU1RBVFVTCQkJCQkweDE0MEMKKyNkZWZpbmUJCUwyX0JVU1kJCQkJCQkoMSA8PCAwKQorCisjZGVmaW5lCVdBSVRfVU5USUwJCQkJCTB4ODA0MAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCmluZGV4IGMyYjBkNzEuLjg3YzA2MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwpAQCAtNDQsNiArNDQsMzkgQEAKIAogc3RhdGljIGludCB0dG1fYm9fc2V0dXBfdm0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiBzdGF0aWMgaW50IHR0bV9ib19zd2Fwb3V0KHN0cnVjdCB0dG1fbWVtX3NocmluayAqc2hyaW5rKTsKK3N0YXRpYyB2b2lkIHR0bV9ib19nbG9iYWxfa29ial9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdHRtX2JvX2NvdW50ID0geworCS5uYW1lID0gImJvX2NvdW50IiwKKwkubW9kZSA9IFNfSVJVR08KK307CisKK3N0YXRpYyBzc2l6ZV90IHR0bV9ib19nbG9iYWxfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPQorCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHR0bV9ib19nbG9iYWwsIGtvYmopOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgUEFHRV9TSVpFLCAiJWx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpIGF0b21pY19yZWFkKCZnbG9iLT5ib19jb3VudCkpOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHRtX2JvX2dsb2JhbF9hdHRyc1tdID0geworCSZ0dG1fYm9fY291bnQsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgdHRtX2JvX2dsb2JhbF9vcHMgPSB7CisJLnNob3cgPSAmdHRtX2JvX2dsb2JhbF9zaG93Cit9OworCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSB0dG1fYm9fZ2xvYl9rb2JqX3R5cGUgID0geworCS5yZWxlYXNlID0gJnR0bV9ib19nbG9iYWxfa29ial9yZWxlYXNlLAorCS5zeXNmc19vcHMgPSAmdHRtX2JvX2dsb2JhbF9vcHMsCisJLmRlZmF1bHRfYXR0cnMgPSB0dG1fYm9fZ2xvYmFsX2F0dHJzCit9OworCiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgdHRtX2JvX3R5cGVfZmxhZ3ModW5zaWduZWQgdHlwZSkKIHsKQEAgLTY2LDEwICs5OSwxMSBAQAogCiAJaWYgKGJvLT50dG0pCiAJCXR0bV90dF9kZXN0cm95KGJvLT50dG0pOworCWF0b21pY19kZWMoJmJvLT5nbG9iLT5ib19jb3VudCk7CiAJaWYgKGJvLT5kZXN0cm95KQogCQliby0+ZGVzdHJveShibyk7CiAJZWxzZSB7Ci0JCXR0bV9tZW1fZ2xvYmFsX2ZyZWUoYmRldi0+bWVtX2dsb2IsIGJvLT5hY2Nfc2l6ZSwgZmFsc2UpOworCQl0dG1fbWVtX2dsb2JhbF9mcmVlKGJkZXYtPmdsb2ItPm1lbV9nbG9iLCBiby0+YWNjX3NpemUpOwogCQlrZnJlZShibyk7CiAJfQogfQpAQCAtMTA2LDcgKzE0MCw3IEBACiAJCWtyZWZfZ2V0KCZiby0+bGlzdF9rcmVmKTsKIAogCQlpZiAoYm8tPnR0bSAhPSBOVUxMKSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZiby0+c3dhcCwgJmJkZXYtPnN3YXBfbHJ1KTsKKwkJCWxpc3RfYWRkX3RhaWwoJmJvLT5zd2FwLCAmYm8tPmdsb2ItPnN3YXBfbHJ1KTsKIAkJCWtyZWZfZ2V0KCZiby0+bGlzdF9rcmVmKTsKIAkJfQogCX0KQEAgLTE0MSw3ICsxNzUsNyBAQAogCQkJICBib29sIGludGVycnVwdGlibGUsCiAJCQkgIGJvb2wgbm9fd2FpdCwgYm9vbCB1c2Vfc2VxdWVuY2UsIHVpbnQzMl90IHNlcXVlbmNlKQogewotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKIAlpbnQgcmV0OwogCiAJd2hpbGUgKHVubGlrZWx5KGF0b21pY19jbXB4Y2hnKCZiby0+cmVzZXJ2ZWQsIDAsIDEpICE9IDApKSB7CkBAIC0xNTMsOSArMTg3LDkgQEAKIAkJaWYgKG5vX3dhaXQpCiAJCQlyZXR1cm4gLUVCVVNZOwogCi0JCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCXJldCA9IHR0bV9ib193YWl0X3VucmVzZXJ2ZWQoYm8sIGludGVycnVwdGlibGUpOwotCQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTgxLDE2ICsyMTUsMTYgQEAKIAkJICAgYm9vbCBpbnRlcnJ1cHRpYmxlLAogCQkgICBib29sIG5vX3dhaXQsIGJvb2wgdXNlX3NlcXVlbmNlLCB1aW50MzJfdCBzZXF1ZW5jZSkKIHsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAJaW50IHB1dF9jb3VudCA9IDA7CiAJaW50IHJldDsKIAotCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCXJldCA9IHR0bV9ib19yZXNlcnZlX2xvY2tlZChibywgaW50ZXJydXB0aWJsZSwgbm9fd2FpdCwgdXNlX3NlcXVlbmNlLAogCQkJCSAgICBzZXF1ZW5jZSk7CiAJaWYgKGxpa2VseShyZXQgPT0gMCkpCiAJCXB1dF9jb3VudCA9IHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwotCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAogCXdoaWxlIChwdXRfY291bnQtLSkKIAkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWZfYnVnKTsKQEAgLTIwMCwxMyArMjM0LDEzIEBACiAKIHZvaWQgdHRtX2JvX3VucmVzZXJ2ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQogewotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKIAotCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCXR0bV9ib19hZGRfdG9fbHJ1KGJvKTsKIAlhdG9taWNfc2V0KCZiby0+cmVzZXJ2ZWQsIDApOwogCXdha2VfdXBfYWxsKCZiby0+ZXZlbnRfcXVldWUpOwotCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2JvX3VucmVzZXJ2ZSk7CiAKQEAgLTIxNyw2ICsyNTEsNyBAQAogc3RhdGljIGludCB0dG1fYm9fYWRkX3R0bShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBib29sIHplcm9fYWxsb2MpCiB7CiAJc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSBiby0+YmRldjsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJvLT5nbG9iOwogCWludCByZXQgPSAwOwogCXVpbnQzMl90IHBhZ2VfZmxhZ3MgPSAwOwogCkBAIC0yMzIsMTQgKzI2NywxNCBAQAogCQkJcGFnZV9mbGFncyB8PSBUVE1fUEFHRV9GTEFHX1pFUk9fQUxMT0M7CiAJY2FzZSB0dG1fYm9fdHlwZV9rZXJuZWw6CiAJCWJvLT50dG0gPSB0dG1fdHRfY3JlYXRlKGJkZXYsIGJvLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVCwKLQkJCQkJcGFnZV9mbGFncywgYmRldi0+ZHVtbXlfcmVhZF9wYWdlKTsKKwkJCQkJcGFnZV9mbGFncywgZ2xvYi0+ZHVtbXlfcmVhZF9wYWdlKTsKIAkJaWYgKHVubGlrZWx5KGJvLT50dG0gPT0gTlVMTCkpCiAJCQlyZXQgPSAtRU5PTUVNOwogCQlicmVhazsKIAljYXNlIHR0bV9ib190eXBlX3VzZXI6CiAJCWJvLT50dG0gPSB0dG1fdHRfY3JlYXRlKGJkZXYsIGJvLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVCwKIAkJCQkJcGFnZV9mbGFncyB8IFRUTV9QQUdFX0ZMQUdfVVNFUiwKLQkJCQkJYmRldi0+ZHVtbXlfcmVhZF9wYWdlKTsKKwkJCQkJZ2xvYi0+ZHVtbXlfcmVhZF9wYWdlKTsKIAkJaWYgKHVubGlrZWx5KGJvLT50dG0gPT0gTlVMTCkpCiAJCQlyZXQgPSAtRU5PTUVNOwogCQlicmVhazsKQEAgLTM2MCw2ICszOTUsNyBAQAogc3RhdGljIGludCB0dG1fYm9fY2xlYW51cF9yZWZzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIGJvb2wgcmVtb3ZlX2FsbCkKIHsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAJc3RydWN0IHR0bV9ib19kcml2ZXIgKmRyaXZlciA9IGJkZXYtPmRyaXZlcjsKIAlpbnQgcmV0OwogCkBAIC0zNzEsNyArNDA3LDcgQEAKIAogCQlzcGluX3VubG9jaygmYm8tPmxvY2spOwogCi0JCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJcmV0ID0gdHRtX2JvX3Jlc2VydmVfbG9ja2VkKGJvLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKIAkJQlVHX09OKHJldCk7CiAJCWlmIChiby0+dHRtKQpAQCAtMzg2LDcgKzQyMiw3IEBACiAJCQliby0+bWVtLm1tX25vZGUgPSBOVUxMOwogCQl9CiAJCXB1dF9jb3VudCA9IHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwotCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCiAJCWF0b21pY19zZXQoJmJvLT5yZXNlcnZlZCwgMCk7CiAKQEAgLTM5NiwxNCArNDMyLDE0IEBACiAJCXJldHVybiAwOwogCX0KIAotCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCWlmIChsaXN0X2VtcHR5KCZiby0+ZGRlc3Ryb3kpKSB7CiAJCXZvaWQgKnN5bmNfb2JqID0gYm8tPnN5bmNfb2JqOwogCQl2b2lkICpzeW5jX29ial9hcmcgPSBiby0+c3luY19vYmpfYXJnOwogCiAJCWtyZWZfZ2V0KCZiby0+bGlzdF9rcmVmKTsKIAkJbGlzdF9hZGRfdGFpbCgmYm8tPmRkZXN0cm95LCAmYmRldi0+ZGRlc3Ryb3kpOwotCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlzcGluX3VubG9jaygmYm8tPmxvY2spOwogCiAJCWlmIChzeW5jX29iaikKQEAgLTQxMyw3ICs0NDksNyBAQAogCQlyZXQgPSAwOwogCiAJfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKIAkJcmV0ID0gLUVCVVNZOwogCX0KQEAgLTQyOCwxMSArNDY0LDEyIEBACiAKIHN0YXRpYyBpbnQgdHRtX2JvX2RlbGF5ZWRfZGVsZXRlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCBib29sIHJlbW92ZV9hbGwpCiB7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiZGV2LT5nbG9iOwogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqZW50cnksICpuZW50cnk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKm5leHQ7CiAJaW50IHJldDsKIAotCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBuZXh0LCAmYmRldi0+ZGRlc3Ryb3kpIHsKIAkJZW50cnkgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCwgZGRlc3Ryb3kpOwogCQluZW50cnkgPSBOVUxMOwpAQCAtNDQ5LDE2ICs0ODYsMTYgQEAKIAkJfQogCQlrcmVmX2dldCgmZW50cnktPmxpc3Rfa3JlZik7CiAKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJcmV0ID0gdHRtX2JvX2NsZWFudXBfcmVmcyhlbnRyeSwgcmVtb3ZlX2FsbCk7CiAJCWtyZWZfcHV0KCZlbnRyeS0+bGlzdF9rcmVmLCB0dG1fYm9fcmVsZWFzZV9saXN0KTsKIAotCQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCWlmIChuZW50cnkpIHsKIAkJCWJvb2wgbmV4dF9vbmxpc3QgPSAhbGlzdF9lbXB0eShuZXh0KTsKLQkJCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQkJa3JlZl9wdXQoJm5lbnRyeS0+bGlzdF9rcmVmLCB0dG1fYm9fcmVsZWFzZV9saXN0KTsKLQkJCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCQkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCQkvKgogCQkJICogU29tZW9uZSBtaWdodCBoYXZlIHJhY2VkIHVzIGFuZCByZW1vdmVkIHRoZQogCQkJICogbmV4dCBlbnRyeSBmcm9tIHRoZSBsaXN0LiBXZSBkb24ndCBib3RoZXIgcmVzdGFydGluZwpAQCAtNDcyLDcgKzUwOSw3IEBACiAJCQlicmVhazsKIAl9CiAJcmV0ID0gIWxpc3RfZW1wdHkoJmJkZXYtPmRkZXN0cm95KTsKLQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTIyLDYgKzU1OSw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSBiby0+YmRldjsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJvLT5nbG9iOwogCXN0cnVjdCB0dG1fbWVtX3JlZyBldmljdF9tZW07CiAJdWludDMyX3QgcHJvcG9zZWRfcGxhY2VtZW50OwogCkBAIC01NzAsMTIgKzYwOCwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAlpZiAoZXZpY3RfbWVtLm1tX25vZGUpIHsKIAkJZHJtX21tX3B1dF9ibG9jayhldmljdF9tZW0ubW1fbm9kZSk7CiAJCWV2aWN0X21lbS5tbV9ub2RlID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCWJvLT5ldmljdGVkID0gdHJ1ZTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtNTkwLDYgKzYyOCw3IEBACiAJCQkJICB1aW50MzJfdCBtZW1fdHlwZSwKIAkJCQkgIGJvb2wgaW50ZXJydXB0aWJsZSwgYm9vbCBub193YWl0KQogeworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYmRldi0+Z2xvYjsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGU7CiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICplbnRyeTsKIAlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bbWVtX3R5cGVdOwpAQCAtNjAzLDcgKzY0Miw3IEBACiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIHJldDsKIAotCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCWRvIHsKIAkJbm9kZSA9IGRybV9tbV9zZWFyY2hfZnJlZSgmbWFuLT5tYW5hZ2VyLCBudW1fcGFnZXMsCiAJCQkJCSAgbWVtLT5wYWdlX2FsaWdubWVudCwgMSk7CkBAIC02MjQsNyArNjYzLDcgQEAKIAkJaWYgKGxpa2VseShyZXQgPT0gMCkpCiAJCQlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGVudHJ5KTsKIAotCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQlyZXR1cm4gcmV0OwpAQCAtNjQwLDIxICs2NzksMjEgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCX0gd2hpbGUgKDEpOwogCiAJaWYgKCFub2RlKSB7Ci0JCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCW5vZGUgPSBkcm1fbW1fZ2V0X2Jsb2NrX2F0b21pYyhub2RlLCBudW1fcGFnZXMsIG1lbS0+cGFnZV9hbGlnbm1lbnQpOwogCWlmICh1bmxpa2VseSghbm9kZSkpIHsKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJZ290byByZXRyeV9wcmVfZ2V0OwogCX0KIAotCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAltZW0tPm1tX25vZGUgPSBub2RlOwogCW1lbS0+bWVtX3R5cGUgPSBtZW1fdHlwZTsKIAlyZXR1cm4gMDsKQEAgLTcyMyw2ICs3NjIsNyBAQAogCQkgICAgIGJvb2wgaW50ZXJydXB0aWJsZSwgYm9vbCBub193YWl0KQogewogCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKIAlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbjsKIAogCXVpbnQzMl90IG51bV9wcmlvcyA9IGJkZXYtPmRyaXZlci0+bnVtX21lbV90eXBlX3ByaW87CkBAIC03NjIsMjAgKzgwMiwyMCBAQAogCQkJCWlmICh1bmxpa2VseShyZXQpKQogCQkJCQlyZXR1cm4gcmV0OwogCi0JCQkJc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCQkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCQkJbm9kZSA9IGRybV9tbV9zZWFyY2hfZnJlZSgmbWFuLT5tYW5hZ2VyLAogCQkJCQkJCSAgbWVtLT5udW1fcGFnZXMsCiAJCQkJCQkJICBtZW0tPnBhZ2VfYWxpZ25tZW50LAogCQkJCQkJCSAgMSk7CiAJCQkJaWYgKHVubGlrZWx5KCFub2RlKSkgewotCQkJCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQkJCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQkJbm9kZSA9IGRybV9tbV9nZXRfYmxvY2tfYXRvbWljKG5vZGUsCiAJCQkJCQkJICAgICAgIG1lbS0+bnVtX3BhZ2VzLAogCQkJCQkJCSAgICAgICBtZW0tPgogCQkJCQkJCSAgICAgICBwYWdlX2FsaWdubWVudCk7Ci0JCQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQkJfSB3aGlsZSAoIW5vZGUpOwogCQl9CiAJCWlmIChub2RlKQpAQCAtODQ4LDcgKzg4OCw3IEBACiAJCSAgICAgICB1aW50MzJfdCBwcm9wb3NlZF9wbGFjZW1lbnQsCiAJCSAgICAgICBib29sIGludGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdCkKIHsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHR0bV9tZW1fcmVnIG1lbTsKIApAQCAtODg0LDkgKzkyNCw5IEBACiAKIG91dF91bmxvY2s6CiAJaWYgKHJldCAmJiBtZW0ubW1fbm9kZSkgewotCQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCWRybV9tbV9wdXRfYmxvY2sobWVtLm1tX25vZGUpOwotCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTAyMiw2ICsxMDYyLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmYm8tPmRkZXN0cm95KTsKIAlJTklUX0xJU1RfSEVBRCgmYm8tPnN3YXApOwogCWJvLT5iZGV2ID0gYmRldjsKKwliby0+Z2xvYiA9IGJkZXYtPmdsb2I7CiAJYm8tPnR5cGUgPSB0eXBlOwogCWJvLT5udW1fcGFnZXMgPSBudW1fcGFnZXM7CiAJYm8tPm1lbS5tZW1fdHlwZSA9IFRUTV9QTF9TWVNURU07CkBAIC0xMDM0LDYgKzEwNzUsNyBAQAogCWJvLT5zZXFfdmFsaWQgPSBmYWxzZTsKIAliby0+cGVyc2lzdGFudF9zd2FwX3N0b3JhZ2UgPSBwZXJzaXN0YW50X3N3YXBfc3RvcmFnZTsKIAliby0+YWNjX3NpemUgPSBhY2Nfc2l6ZTsKKwlhdG9taWNfaW5jKCZiby0+Z2xvYi0+Ym9fY291bnQpOwogCiAJcmV0ID0gdHRtX2JvX2NoZWNrX3BsYWNlbWVudChibywgZmxhZ3MsIDBVTEwpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCkBAIC0xMDcyLDEzICsxMTE0LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9idWZmZXJfb2JqZWN0X2luaXQpOwogCi1zdGF0aWMgaW5saW5lIHNpemVfdCB0dG1fYm9fc2l6ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHR0bV9ib19zaXplKHN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iLAogCQkJCSB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKIHsKIAlzaXplX3QgcGFnZV9hcnJheV9zaXplID0gKG51bV9wYWdlcyAqIHNpemVvZih2b2lkICopICsgUEFHRV9TSVpFIC0gMSkgJgogCSAgICBQQUdFX01BU0s7CiAKLQlyZXR1cm4gYmRldi0+dHRtX2JvX3NpemUgKyAyICogcGFnZV9hcnJheV9zaXplOworCXJldHVybiBnbG9iLT50dG1fYm9fc2l6ZSArIDIgKiBwYWdlX2FycmF5X3NpemU7CiB9CiAKIGludCB0dG1fYnVmZmVyX29iamVjdF9jcmVhdGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCkBAIC0xMDkzLDE4ICsxMTM1LDE4IEBACiB7CiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKIAlpbnQgcmV0OwotCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2IgPSBiZGV2LT5tZW1fZ2xvYjsKKwlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iID0gYmRldi0+Z2xvYi0+bWVtX2dsb2I7CiAKIAlzaXplX3QgYWNjX3NpemUgPQotCSAgICB0dG1fYm9fc2l6ZShiZGV2LCAoc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpOwotCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKG1lbV9nbG9iLCBhY2Nfc2l6ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJICAgIHR0bV9ib19zaXplKGJkZXYtPmdsb2IsIChzaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVCk7CisJcmV0ID0gdHRtX21lbV9nbG9iYWxfYWxsb2MobWVtX2dsb2IsIGFjY19zaXplLCBmYWxzZSwgZmFsc2UpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7CiAKIAlibyA9IGt6YWxsb2Moc2l6ZW9mKCpibyksIEdGUF9LRVJORUwpOwogCiAJaWYgKHVubGlrZWx5KGJvID09IE5VTEwpKSB7Ci0JCXR0bV9tZW1fZ2xvYmFsX2ZyZWUobWVtX2dsb2IsIGFjY19zaXplLCBmYWxzZSk7CisJCXR0bV9tZW1fZ2xvYmFsX2ZyZWUobWVtX2dsb2IsIGFjY19zaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMTUwLDYgKzExOTIsNyBAQAogCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCiAJCQkJICAgdW5zaWduZWQgbWVtX3R5cGUsIGJvb2wgYWxsb3dfZXJyb3JzKQogeworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYmRldi0+Z2xvYjsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmVudHJ5OwogCWludCByZXQ7CiAJaW50IHB1dF9jb3VudDsKQEAgLTExNTgsMzAgKzEyMDEsMzEgQEAKIAkgKiBDYW4ndCB1c2Ugc3RhbmRhcmQgbGlzdCB0cmF2ZXJzYWwgc2luY2Ugd2UncmUgdW5sb2NraW5nLgogCSAqLwogCi0Jc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCwgbHJ1KTsKIAkJa3JlZl9nZXQoJmVudHJ5LT5saXN0X2tyZWYpOwogCQlyZXQgPSB0dG1fYm9fcmVzZXJ2ZV9sb2NrZWQoZW50cnksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDApOwogCQlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGVudHJ5KTsKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJd2hpbGUgKHB1dF9jb3VudC0tKQogCQkJa3JlZl9wdXQoJmVudHJ5LT5saXN0X2tyZWYsIHR0bV9ib19yZWZfYnVnKTsKIAkJQlVHX09OKHJldCk7CiAJCXJldCA9IHR0bV9ib19sZWF2ZV9saXN0KGVudHJ5LCBtZW1fdHlwZSwgYWxsb3dfZXJyb3JzKTsKIAkJdHRtX2JvX3VucmVzZXJ2ZShlbnRyeSk7CiAJCWtyZWZfcHV0KCZlbnRyeS0+bGlzdF9rcmVmLCB0dG1fYm9fcmVsZWFzZV9saXN0KTsKLQkJc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCX0KIAotCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAogCXJldHVybiAwOwogfQogCiBpbnQgdHRtX2JvX2NsZWFuX21tKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBtZW1fdHlwZSkKIHsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJkZXYtPmdsb2I7CiAJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW47CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTEyMDQsMTMgKzEyNDgsMTMgQEAKIAlpZiAobWVtX3R5cGUgPiAwKSB7CiAJCXR0bV9ib19mb3JjZV9saXN0X2NsZWFuKGJkZXYsICZtYW4tPmxydSwgbWVtX3R5cGUsIGZhbHNlKTsKIAotCQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCWlmIChkcm1fbW1fY2xlYW4oJm1hbi0+bWFuYWdlcikpCiAJCQlkcm1fbW1fdGFrZWRvd24oJm1hbi0+bWFuYWdlcik7CiAJCWVsc2UKIAkJCXJldCA9IC1FQlVTWTsKIAotCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMjg0LDExICsxMzI4LDgyIEBACiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9ib19pbml0X21tKTsKIAorc3RhdGljIHZvaWQgdHRtX2JvX2dsb2JhbF9rb2JqX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPQorCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHR0bV9ib19nbG9iYWwsIGtvYmopOworCisJdHRtX21lbV91bnJlZ2lzdGVyX3NocmluayhnbG9iLT5tZW1fZ2xvYiwgJmdsb2ItPnNocmluayk7CisJX19mcmVlX3BhZ2UoZ2xvYi0+ZHVtbXlfcmVhZF9wYWdlKTsKKwlrZnJlZShnbG9iKTsKK30KKwordm9pZCB0dG1fYm9fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCit7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSByZWYtPm9iamVjdDsKKworCWtvYmplY3RfZGVsKCZnbG9iLT5rb2JqKTsKKwlrb2JqZWN0X3B1dCgmZ2xvYi0+a29iaik7Cit9CitFWFBPUlRfU1lNQk9MKHR0bV9ib19nbG9iYWxfcmVsZWFzZSk7CisKK2ludCB0dG1fYm9fZ2xvYmFsX2luaXQoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCit7CisJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmICpib19yZWYgPQorCQljb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYsIHJlZik7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSByZWYtPm9iamVjdDsKKwlpbnQgcmV0OworCisJbXV0ZXhfaW5pdCgmZ2xvYi0+ZGV2aWNlX2xpc3RfbXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZnbG9iLT5scnVfbG9jayk7CisJZ2xvYi0+bWVtX2dsb2IgPSBib19yZWYtPm1lbV9nbG9iOworCWdsb2ItPmR1bW15X3JlYWRfcGFnZSA9IGFsbG9jX3BhZ2UoX19HRlBfWkVSTyB8IEdGUF9ETUEzMik7CisKKwlpZiAodW5saWtlbHkoZ2xvYi0+ZHVtbXlfcmVhZF9wYWdlID09IE5VTEwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX2RycDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmZ2xvYi0+c3dhcF9scnUpOworCUlOSVRfTElTVF9IRUFEKCZnbG9iLT5kZXZpY2VfbGlzdCk7CisKKwl0dG1fbWVtX2luaXRfc2hyaW5rKCZnbG9iLT5zaHJpbmssIHR0bV9ib19zd2Fwb3V0KTsKKwlyZXQgPSB0dG1fbWVtX3JlZ2lzdGVyX3NocmluayhnbG9iLT5tZW1fZ2xvYiwgJmdsb2ItPnNocmluayk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgVFRNX1BGWAorCQkgICAgICAgIkNvdWxkIG5vdCByZWdpc3RlciBidWZmZXIgb2JqZWN0IHN3YXBvdXQuXG4iKTsKKwkJZ290byBvdXRfbm9fc2hyaW5rOworCX0KKworCWdsb2ItPnR0bV9ib19leHRyYV9zaXplID0KKwkJdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHR0bV90dCkpICsKKwkJdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHR0bV9iYWNrZW5kKSk7CisKKwlnbG9iLT50dG1fYm9fc2l6ZSA9IGdsb2ItPnR0bV9ib19leHRyYV9zaXplICsKKwkJdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0KSk7CisKKwlhdG9taWNfc2V0KCZnbG9iLT5ib19jb3VudCwgMCk7CisKKwlrb2JqZWN0X2luaXQoJmdsb2ItPmtvYmosICZ0dG1fYm9fZ2xvYl9rb2JqX3R5cGUpOworCXJldCA9IGtvYmplY3RfYWRkKCZnbG9iLT5rb2JqLCB0dG1fZ2V0X2tvYmooKSwgImJ1ZmZlcl9vYmplY3RzIik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJa29iamVjdF9wdXQoJmdsb2ItPmtvYmopOworCXJldHVybiByZXQ7CitvdXRfbm9fc2hyaW5rOgorCV9fZnJlZV9wYWdlKGdsb2ItPmR1bW15X3JlYWRfcGFnZSk7CitvdXRfbm9fZHJwOgorCWtmcmVlKGdsb2IpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHR0bV9ib19nbG9iYWxfaW5pdCk7CisKKwogaW50IHR0bV9ib19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldikKIHsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpID0gVFRNX05VTV9NRU1fVFlQRVM7CiAJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW47CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiZGV2LT5nbG9iOwogCiAJd2hpbGUgKGktLSkgewogCQltYW4gPSAmYmRldi0+bWFuW2ldOwpAQCAtMTMwNCwxMDAgKzE0MTksNzQgQEAKIAkJfQogCX0KIAorCW11dGV4X2xvY2soJmdsb2ItPmRldmljZV9saXN0X211dGV4KTsKKwlsaXN0X2RlbCgmYmRldi0+ZGV2aWNlX2xpc3QpOworCW11dGV4X3VubG9jaygmZ2xvYi0+ZGV2aWNlX2xpc3RfbXV0ZXgpOworCiAJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZiZGV2LT53cSkpCiAJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAl3aGlsZSAodHRtX2JvX2RlbGF5ZWRfZGVsZXRlKGJkZXYsIHRydWUpKQogCQk7CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmYmRldi0+ZGRlc3Ryb3kpKQogCQlUVE1fREVCVUcoIkRlbGF5ZWQgZGVzdHJveSBsaXN0IHdhcyBjbGVhblxuIik7CiAKIAlpZiAobGlzdF9lbXB0eSgmYmRldi0+bWFuWzBdLmxydSkpCiAJCVRUTV9ERUJVRygiU3dhcCBsaXN0IHdhcyBjbGVhblxuIik7Ci0Jc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCi0JdHRtX21lbV91bnJlZ2lzdGVyX3NocmluayhiZGV2LT5tZW1fZ2xvYiwgJmJkZXYtPnNocmluayk7CiAJQlVHX09OKCFkcm1fbW1fY2xlYW4oJmJkZXYtPmFkZHJfc3BhY2VfbW0pKTsKIAl3cml0ZV9sb2NrKCZiZGV2LT52bV9sb2NrKTsKIAlkcm1fbW1fdGFrZWRvd24oJmJkZXYtPmFkZHJfc3BhY2VfbW0pOwogCXdyaXRlX3VubG9jaygmYmRldi0+dm1fbG9jayk7CiAKLQlfX2ZyZWVfcGFnZShiZGV2LT5kdW1teV9yZWFkX3BhZ2UpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9ib19kZXZpY2VfcmVsZWFzZSk7CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbiBkcm0gZHJpdmVyIGxvYWQuCi0gKiBJZiB5b3UgZGVjaWRlIHRvIGNhbGwgaXQgZnJvbSBmaXJzdG9wZW4sIHlvdSBtdXN0IHByb3RlY3QgdGhlIGNhbGwKLSAqIGZyb20gYSBwb3RlbnRpYWxseSByYWNpbmcgdHRtX2JvX2RyaXZlcl9maW5pc2ggaW4gbGFzdGNsb3NlLgotICogKFRoaXMgbWF5IGhhcHBlbiBvbiBYIHNlcnZlciByZXN0YXJ0KS4KLSAqLwotCiBpbnQgdHRtX2JvX2RldmljZV9pbml0KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAotCQkgICAgICAgc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYiwKLQkJICAgICAgIHN0cnVjdCB0dG1fYm9fZHJpdmVyICpkcml2ZXIsIHVpbnQ2NF90IGZpbGVfcGFnZV9vZmZzZXQsCisJCSAgICAgICBzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiwKKwkJICAgICAgIHN0cnVjdCB0dG1fYm9fZHJpdmVyICpkcml2ZXIsCisJCSAgICAgICB1aW50NjRfdCBmaWxlX3BhZ2Vfb2Zmc2V0LAogCQkgICAgICAgYm9vbCBuZWVkX2RtYTMyKQogewogCWludCByZXQgPSAtRUlOVkFMOwogCi0JYmRldi0+ZHVtbXlfcmVhZF9wYWdlID0gTlVMTDsKIAlyd2xvY2tfaW5pdCgmYmRldi0+dm1fbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmJkZXYtPmxydV9sb2NrKTsKLQogCWJkZXYtPmRyaXZlciA9IGRyaXZlcjsKLQliZGV2LT5tZW1fZ2xvYiA9IG1lbV9nbG9iOwogCiAJbWVtc2V0KGJkZXYtPm1hbiwgMCwgc2l6ZW9mKGJkZXYtPm1hbikpOwogCi0JYmRldi0+ZHVtbXlfcmVhZF9wYWdlID0gYWxsb2NfcGFnZShfX0dGUF9aRVJPIHwgR0ZQX0RNQTMyKTsKLQlpZiAodW5saWtlbHkoYmRldi0+ZHVtbXlfcmVhZF9wYWdlID09IE5VTEwpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2VycjA7Ci0JfQotCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0gbWVtb3J5IGJ1ZmZlciB0eXBlLgogCSAqIE90aGVyIHR5cGVzIG5lZWQgdG8gYmUgZHJpdmVyIC8gSU9DVEwgaW5pdGlhbGl6ZWQuCiAJICovCiAJcmV0ID0gdHRtX2JvX2luaXRfbW0oYmRldiwgVFRNX1BMX1NZU1RFTSwgMCwgMCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfZXJyMTsKKwkJZ290byBvdXRfbm9fc3lzOwogCiAJYmRldi0+YWRkcl9zcGFjZV9yYiA9IFJCX1JPT1Q7CiAJcmV0ID0gZHJtX21tX2luaXQoJmJkZXYtPmFkZHJfc3BhY2VfbW0sIGZpbGVfcGFnZV9vZmZzZXQsIDB4MTAwMDAwMDApOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjI7CisJCWdvdG8gb3V0X25vX2FkZHJfbW07CiAKIAlJTklUX0RFTEFZRURfV09SSygmYmRldi0+d3EsIHR0bV9ib19kZWxheWVkX3dvcmtxdWV1ZSk7CiAJYmRldi0+bmljZV9tb2RlID0gdHJ1ZTsKIAlJTklUX0xJU1RfSEVBRCgmYmRldi0+ZGRlc3Ryb3kpOwotCUlOSVRfTElTVF9IRUFEKCZiZGV2LT5zd2FwX2xydSk7CiAJYmRldi0+ZGV2X21hcHBpbmcgPSBOVUxMOworCWJkZXYtPmdsb2IgPSBnbG9iOwogCWJkZXYtPm5lZWRfZG1hMzIgPSBuZWVkX2RtYTMyOwotCXR0bV9tZW1faW5pdF9zaHJpbmsoJmJkZXYtPnNocmluaywgdHRtX2JvX3N3YXBvdXQpOwotCXJldCA9IHR0bV9tZW1fcmVnaXN0ZXJfc2hyaW5rKG1lbV9nbG9iLCAmYmRldi0+c2hyaW5rKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYCi0JCSAgICAgICAiQ291bGQgbm90IHJlZ2lzdGVyIGJ1ZmZlciBvYmplY3Qgc3dhcG91dC5cbiIpOwotCQlnb3RvIG91dF9lcnIyOwotCX0KIAotCWJkZXYtPnR0bV9ib19leHRyYV9zaXplID0KLQkJdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHR0bV90dCkpICsKLQkJdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHR0bV9iYWNrZW5kKSk7Ci0KLQliZGV2LT50dG1fYm9fc2l6ZSA9IGJkZXYtPnR0bV9ib19leHRyYV9zaXplICsKLQkJdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0KSk7CisJbXV0ZXhfbG9jaygmZ2xvYi0+ZGV2aWNlX2xpc3RfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJmJkZXYtPmRldmljZV9saXN0LCAmZ2xvYi0+ZGV2aWNlX2xpc3QpOworCW11dGV4X3VubG9jaygmZ2xvYi0+ZGV2aWNlX2xpc3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7Ci1vdXRfZXJyMjoKK291dF9ub19hZGRyX21tOgogCXR0bV9ib19jbGVhbl9tbShiZGV2LCAwKTsKLW91dF9lcnIxOgotCV9fZnJlZV9wYWdlKGJkZXYtPmR1bW15X3JlYWRfcGFnZSk7Ci1vdXRfZXJyMDoKK291dF9ub19zeXM6CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2JvX2RldmljZV9pbml0KTsKQEAgLTE2NDcsMjEgKzE3MzYsMjEgQEAKIAogc3RhdGljIGludCB0dG1fYm9fc3dhcG91dChzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgKnNocmluaykKIHsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9Ci0JICAgIGNvbnRhaW5lcl9vZihzaHJpbmssIHN0cnVjdCB0dG1fYm9fZGV2aWNlLCBzaHJpbmspOworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0KKwkgICAgY29udGFpbmVyX29mKHNocmluaywgc3RydWN0IHR0bV9ib19nbG9iYWwsIHNocmluayk7CiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKIAlpbnQgcmV0ID0gLUVCVVNZOwogCWludCBwdXRfY291bnQ7CiAJdWludDMyX3Qgc3dhcF9wbGFjZW1lbnQgPSAoVFRNX1BMX0ZMQUdfQ0FDSEVEIHwgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKIAotCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCXdoaWxlIChyZXQgPT0gLUVCVVNZKSB7Ci0JCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZiZGV2LT5zd2FwX2xydSkpKSB7Ci0JCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZ2xvYi0+c3dhcF9scnUpKSkgeworCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlibyA9IGxpc3RfZmlyc3RfZW50cnkoJmJkZXYtPnN3YXBfbHJ1LAorCQlibyA9IGxpc3RfZmlyc3RfZW50cnkoJmdsb2ItPnN3YXBfbHJ1LAogCQkJCSAgICAgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCwgc3dhcCk7CiAJCWtyZWZfZ2V0KCZiby0+bGlzdF9rcmVmKTsKIApAQCAtMTY3MywxNiArMTc2MiwxNiBAQAogCiAJCXJldCA9IHR0bV9ib19yZXNlcnZlX2xvY2tlZChibywgZmFsc2UsIHRydWUsIGZhbHNlLCAwKTsKIAkJaWYgKHVubGlrZWx5KHJldCA9PSAtRUJVU1kpKSB7Ci0JCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJCXR0bV9ib193YWl0X3VucmVzZXJ2ZWQoYm8sIGZhbHNlKTsKIAkJCWtyZWZfcHV0KCZiby0+bGlzdF9rcmVmLCB0dG1fYm9fcmVsZWFzZV9saXN0KTsKLQkJCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCQkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCX0KIAl9CiAKIAlCVUdfT04ocmV0ICE9IDApOwogCXB1dF9jb3VudCA9IHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwotCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAogCXdoaWxlIChwdXRfY291bnQtLSkKIAkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWZfYnVnKTsKQEAgLTE3MzYsNiArMTgyNSw2IEBACiAKIHZvaWQgdHRtX2JvX3N3YXBvdXRfYWxsKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2KQogewotCXdoaWxlICh0dG1fYm9fc3dhcG91dCgmYmRldi0+c2hyaW5rKSA9PSAwKQorCXdoaWxlICh0dG1fYm9fc3dhcG91dCgmYmRldi0+Z2xvYi0+c2hyaW5rKSA9PSAwKQogCQk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKaW5kZXggYWQ0YWRhMC4uYzcwOTI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwpAQCAtNDEsOSArNDEsOSBAQAogCXN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSA9ICZiby0+bWVtOwogCiAJaWYgKG9sZF9tZW0tPm1tX25vZGUpIHsKLQkJc3Bpbl9sb2NrKCZiby0+YmRldi0+bHJ1X2xvY2spOworCQlzcGluX2xvY2soJmJvLT5nbG9iLT5scnVfbG9jayk7CiAJCWRybV9tbV9wdXRfYmxvY2sob2xkX21lbS0+bW1fbm9kZSk7Ci0JCXNwaW5fdW5sb2NrKCZiby0+YmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmYm8tPmdsb2ItPmxydV9sb2NrKTsKIAl9CiAJb2xkX21lbS0+bW1fbm9kZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCmluZGV4IDBiMTRlYjEuLjU0MTc0NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCkBAIC03MSw3ICs3MSw3IEBACiAKIAltdXRleF9sb2NrKCZpdGVtLT5tdXRleCk7CiAJaWYgKGl0ZW0tPnJlZmNvdW50ID09IDApIHsKLQkJaXRlbS0+b2JqZWN0ID0ga21hbGxvYyhyZWYtPnNpemUsIEdGUF9LRVJORUwpOworCQlpdGVtLT5vYmplY3QgPSBremFsbG9jKHJlZi0+c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICh1bmxpa2VseShpdGVtLT5vYmplY3QgPT0gTlVMTCkpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF9lcnI7CkBAIC04OSw3ICs4OSw2IEBACiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CiAJcmV0dXJuIDA7CiBvdXRfZXJyOgotCWtmcmVlKGl0ZW0tPm9iamVjdCk7CiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CiAJaXRlbS0+b2JqZWN0ID0gTlVMTDsKIAlyZXR1cm4gcmV0OwpAQCAtMTA1LDcgKzEwNCw2IEBACiAJQlVHX09OKHJlZi0+b2JqZWN0ICE9IGl0ZW0tPm9iamVjdCk7CiAJaWYgKC0taXRlbS0+cmVmY291bnQgPT0gMCkgewogCQlyZWYtPnJlbGVhc2UocmVmKTsKLQkJa2ZyZWUoaXRlbS0+b2JqZWN0KTsKIAkJaXRlbS0+b2JqZWN0ID0gTlVMTDsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX21lbW9yeS5jCmluZGV4IDg3MzIzZDQuLjA3MmMyODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX21lbW9yeS5jCkBAIC0yNiwxNSArMjYsMTgwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJ0dG0vdHRtX21lbW9yeS5oIgorI2luY2x1ZGUgInR0bS90dG1fbW9kdWxlLmgiCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jZGVmaW5lIFRUTV9QRlggIltUVE1dICIKICNkZWZpbmUgVFRNX01FTU9SWV9BTExPQ19SRVRSSUVTIDQKIAorc3RydWN0IHR0bV9tZW1fem9uZSB7CisJc3RydWN0IGtvYmplY3Qga29iajsKKwlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2I7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1aW50NjRfdCB6b25lX21lbTsKKwl1aW50NjRfdCBlbWVyX21lbTsKKwl1aW50NjRfdCBtYXhfbWVtOworCXVpbnQ2NF90IHN3YXBfbGltaXQ7CisJdWludDY0X3QgdXNlZF9tZW07Cit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSB0dG1fbWVtX3N5cyA9IHsKKwkubmFtZSA9ICJ6b25lX21lbW9yeSIsCisJLm1vZGUgPSBTX0lSVUdPCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdHRtX21lbV9lbWVyID0geworCS5uYW1lID0gImVtZXJnZW5jeV9tZW1vcnkiLAorCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IKK307CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSB0dG1fbWVtX21heCA9IHsKKwkubmFtZSA9ICJhdmFpbGFibGVfbWVtb3J5IiwKKwkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdHRtX21lbV9zd2FwID0geworCS5uYW1lID0gInN3YXBfbGltaXQiLAorCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IKK307CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSB0dG1fbWVtX3VzZWQgPSB7CisJLm5hbWUgPSAidXNlZF9tZW1vcnkiLAorCS5tb2RlID0gU19JUlVHTworfTsKKworc3RhdGljIHZvaWQgdHRtX21lbV96b25lX2tvYmpfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lID0KKwkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB0dG1fbWVtX3pvbmUsIGtvYmopOworCisJcHJpbnRrKEtFUk5fSU5GTyBUVE1fUEZYCisJICAgICAgICJab25lICU3czogVXNlZCBtZW1vcnkgYXQgZXhpdDogJWxsdSBraUIuXG4iLAorCSAgICAgICB6b25lLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSB6b25lLT51c2VkX21lbSA+PiAxMCk7CisJa2ZyZWUoem9uZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHR0bV9tZW1fem9uZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZSA9CisJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdHRtX21lbV96b25lLCBrb2JqKTsKKwl1aW50NjRfdCB2YWwgPSAwOworCisJc3Bpbl9sb2NrKCZ6b25lLT5nbG9iLT5sb2NrKTsKKwlpZiAoYXR0ciA9PSAmdHRtX21lbV9zeXMpCisJCXZhbCA9IHpvbmUtPnpvbmVfbWVtOworCWVsc2UgaWYgKGF0dHIgPT0gJnR0bV9tZW1fZW1lcikKKwkJdmFsID0gem9uZS0+ZW1lcl9tZW07CisJZWxzZSBpZiAoYXR0ciA9PSAmdHRtX21lbV9tYXgpCisJCXZhbCA9IHpvbmUtPm1heF9tZW07CisJZWxzZSBpZiAoYXR0ciA9PSAmdHRtX21lbV9zd2FwKQorCQl2YWwgPSB6b25lLT5zd2FwX2xpbWl0OworCWVsc2UgaWYgKGF0dHIgPT0gJnR0bV9tZW1fdXNlZCkKKwkJdmFsID0gem9uZS0+dXNlZF9tZW07CisJc3Bpbl91bmxvY2soJnpvbmUtPmdsb2ItPmxvY2spOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgUEFHRV9TSVpFLCAiJWxsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCA+PiAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIHR0bV9jaGVja19zd2FwcGluZyhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IpOworCitzdGF0aWMgc3NpemVfdCB0dG1fbWVtX3pvbmVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJCSAgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJCSAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZSA9CisJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdHRtX21lbV96b25lLCBrb2JqKTsKKwlpbnQgY2hhcnM7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdWludDY0X3QgdmFsNjQ7CisKKwljaGFycyA9IHNzY2FuZihidWZmZXIsICIlbHUiLCAmdmFsKTsKKwlpZiAoY2hhcnMgPT0gMCkKKwkJcmV0dXJuIHNpemU7CisKKwl2YWw2NCA9IHZhbDsKKwl2YWw2NCA8PD0gMTA7CisKKwlzcGluX2xvY2soJnpvbmUtPmdsb2ItPmxvY2spOworCWlmICh2YWw2NCA+IHpvbmUtPnpvbmVfbWVtKQorCQl2YWw2NCA9IHpvbmUtPnpvbmVfbWVtOworCWlmIChhdHRyID09ICZ0dG1fbWVtX2VtZXIpIHsKKwkJem9uZS0+ZW1lcl9tZW0gPSB2YWw2NDsKKwkJaWYgKHpvbmUtPm1heF9tZW0gPiB2YWw2NCkKKwkJCXpvbmUtPm1heF9tZW0gPSB2YWw2NDsKKwl9IGVsc2UgaWYgKGF0dHIgPT0gJnR0bV9tZW1fbWF4KSB7CisJCXpvbmUtPm1heF9tZW0gPSB2YWw2NDsKKwkJaWYgKHpvbmUtPmVtZXJfbWVtIDwgdmFsNjQpCisJCQl6b25lLT5lbWVyX21lbSA9IHZhbDY0OworCX0gZWxzZSBpZiAoYXR0ciA9PSAmdHRtX21lbV9zd2FwKQorCQl6b25lLT5zd2FwX2xpbWl0ID0gdmFsNjQ7CisJc3Bpbl91bmxvY2soJnpvbmUtPmdsb2ItPmxvY2spOworCisJdHRtX2NoZWNrX3N3YXBwaW5nKHpvbmUtPmdsb2IpOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0dG1fbWVtX3pvbmVfYXR0cnNbXSA9IHsKKwkmdHRtX21lbV9zeXMsCisJJnR0bV9tZW1fZW1lciwKKwkmdHRtX21lbV9tYXgsCisJJnR0bV9tZW1fc3dhcCwKKwkmdHRtX21lbV91c2VkLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHR0bV9tZW1fem9uZV9vcHMgPSB7CisJLnNob3cgPSAmdHRtX21lbV96b25lX3Nob3csCisJLnN0b3JlID0gJnR0bV9tZW1fem9uZV9zdG9yZQorfTsKKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgdHRtX21lbV96b25lX2tvYmpfdHlwZSA9IHsKKwkucmVsZWFzZSA9ICZ0dG1fbWVtX3pvbmVfa29ial9yZWxlYXNlLAorCS5zeXNmc19vcHMgPSAmdHRtX21lbV96b25lX29wcywKKwkuZGVmYXVsdF9hdHRycyA9IHR0bV9tZW1fem9uZV9hdHRycywKK307CisKK3N0YXRpYyB2b2lkIHR0bV9tZW1fZ2xvYmFsX2tvYmpfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IgPQorCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHR0bV9tZW1fZ2xvYmFsLCBrb2JqKTsKKworCWtmcmVlKGdsb2IpOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSB0dG1fbWVtX2dsb2Jfa29ial90eXBlID0geworCS5yZWxlYXNlID0gJnR0bV9tZW1fZ2xvYmFsX2tvYmpfcmVsZWFzZSwKK307CisKK3N0YXRpYyBib29sIHR0bV96b25lc19hYm92ZV9zd2FwX3RhcmdldChzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCisJCQkJCWJvb2wgZnJvbV93cSwgdWludDY0X3QgZXh0cmEpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZTsKKwl1aW50NjRfdCB0YXJnZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ2xvYi0+bnVtX3pvbmVzOyArK2kpIHsKKwkJem9uZSA9IGdsb2ItPnpvbmVzW2ldOworCisJCWlmIChmcm9tX3dxKQorCQkJdGFyZ2V0ID0gem9uZS0+c3dhcF9saW1pdDsKKwkJZWxzZSBpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXRhcmdldCA9IHpvbmUtPmVtZXJfbWVtOworCQllbHNlCisJCQl0YXJnZXQgPSB6b25lLT5tYXhfbWVtOworCisJCXRhcmdldCA9IChleHRyYSA+IHRhcmdldCkgPyAwVUxMIDogdGFyZ2V0OworCisJCWlmICh6b25lLT51c2VkX21lbSA+IHRhcmdldCkKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qKgogICogQXQgdGhpcyBwb2ludCB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgc2hyaW5rIGNhbGxiYWNrLgogICogRXh0ZW5kIHRoaXMgaWYgbmVlZGVkLCBwZXJoYXBzIHVzaW5nIGEgbGlua2VkIGxpc3Qgb2YgY2FsbGJhY2tzLgpAQCAtNDIsMzQgKzIwNywxNyBAQAogICogbWFueSB0aHJlYWRzIG1heSB0cnkgdG8gc3dhcCBvdXQgYXQgYW55IGdpdmVuIHRpbWUuCiAgKi8KIAotc3RhdGljIHZvaWQgdHRtX3NocmluayhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsIGJvb2wgZnJvbV93b3JrcXVldWUsCitzdGF0aWMgdm9pZCB0dG1fc2hyaW5rKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwgYm9vbCBmcm9tX3dxLAogCQkgICAgICAgdWludDY0X3QgZXh0cmEpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgKnNocmluazsKLQl1aW50NjRfdCB0YXJnZXQ7Ci0JdWludDY0X3QgdG90YWxfdGFyZ2V0OwogCiAJc3Bpbl9sb2NrKCZnbG9iLT5sb2NrKTsKIAlpZiAoZ2xvYi0+c2hyaW5rID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGZyb21fd29ya3F1ZXVlKSB7Ci0JCXRhcmdldCA9IGdsb2ItPnN3YXBfbGltaXQ7Ci0JCXRvdGFsX3RhcmdldCA9IGdsb2ItPnRvdGFsX21lbW9yeV9zd2FwX2xpbWl0OwotCX0gZWxzZSBpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQl0b3RhbF90YXJnZXQgPSBnbG9iLT5lbWVyX3RvdGFsX21lbW9yeTsKLQkJdGFyZ2V0ID0gZ2xvYi0+ZW1lcl9tZW1vcnk7Ci0JfSBlbHNlIHsKLQkJdG90YWxfdGFyZ2V0ID0gZ2xvYi0+bWF4X3RvdGFsX21lbW9yeTsKLQkJdGFyZ2V0ID0gZ2xvYi0+bWF4X21lbW9yeTsKLQl9Ci0KLQl0b3RhbF90YXJnZXQgPSAoZXh0cmEgPj0gdG90YWxfdGFyZ2V0KSA/IDAgOiB0b3RhbF90YXJnZXQgLSBleHRyYTsKLQl0YXJnZXQgPSAoZXh0cmEgPj0gdGFyZ2V0KSA/IDAgOiB0YXJnZXQgLSBleHRyYTsKLQotCXdoaWxlIChnbG9iLT51c2VkX21lbW9yeSA+IHRhcmdldCB8fAotCSAgICAgICBnbG9iLT51c2VkX3RvdGFsX21lbW9yeSA+IHRvdGFsX3RhcmdldCkgeworCXdoaWxlICh0dG1fem9uZXNfYWJvdmVfc3dhcF90YXJnZXQoZ2xvYiwgZnJvbV93cSwgZXh0cmEpKSB7CiAJCXNocmluayA9IGdsb2ItPnNocmluazsKIAkJc3Bpbl91bmxvY2soJmdsb2ItPmxvY2spOwogCQlyZXQgPSBzaHJpbmstPmRvX3NocmluayhzaHJpbmspOwpAQCAtODEsNiArMjI5LDggQEAKIAlzcGluX3VubG9jaygmZ2xvYi0+bG9jayk7CiB9CiAKKworCiBzdGF0aWMgdm9pZCB0dG1fc2hyaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiA9CkBAIC04OSw2MyArMjM5LDE5OCBAQAogCXR0bV9zaHJpbmsoZ2xvYiwgdHJ1ZSwgMFVMTCk7CiB9CiAKK3N0YXRpYyBpbnQgdHRtX21lbV9pbml0X2tlcm5lbF96b25lKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN5c2luZm8gKnNpKQoreworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmUgPSBremFsbG9jKHNpemVvZigqem9uZSksIEdGUF9LRVJORUwpOworCXVpbnQ2NF90IG1lbTsKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KCF6b25lKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW0gPSBzaS0+dG90YWxyYW0gLSBzaS0+dG90YWxoaWdoOworCW1lbSAqPSBzaS0+bWVtX3VuaXQ7CisKKwl6b25lLT5uYW1lID0gImtlcm5lbCI7CisJem9uZS0+em9uZV9tZW0gPSBtZW07CisJem9uZS0+bWF4X21lbSA9IG1lbSA+PiAxOworCXpvbmUtPmVtZXJfbWVtID0gKG1lbSA+PiAxKSArIChtZW0gPj4gMik7CisJem9uZS0+c3dhcF9saW1pdCA9IHpvbmUtPm1heF9tZW0gLSAobWVtID4+IDMpOworCXpvbmUtPnVzZWRfbWVtID0gMDsKKwl6b25lLT5nbG9iID0gZ2xvYjsKKwlnbG9iLT56b25lX2tlcm5lbCA9IHpvbmU7CisJa29iamVjdF9pbml0KCZ6b25lLT5rb2JqLCAmdHRtX21lbV96b25lX2tvYmpfdHlwZSk7CisJcmV0ID0ga29iamVjdF9hZGQoJnpvbmUtPmtvYmosICZnbG9iLT5rb2JqLCB6b25lLT5uYW1lKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCWtvYmplY3RfcHV0KCZ6b25lLT5rb2JqKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZ2xvYi0+em9uZXNbZ2xvYi0+bnVtX3pvbmVzKytdID0gem9uZTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19ISUdITUVNCitzdGF0aWMgaW50IHR0bV9tZW1faW5pdF9oaWdobWVtX3pvbmUoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHN5c2luZm8gKnNpKQoreworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmUgPSBremFsbG9jKHNpemVvZigqem9uZSksIEdGUF9LRVJORUwpOworCXVpbnQ2NF90IG1lbTsKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KCF6b25lKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoc2ktPnRvdGFsaGlnaCA9PSAwKQorCQlyZXR1cm4gMDsKKworCW1lbSA9IHNpLT50b3RhbHJhbTsKKwltZW0gKj0gc2ktPm1lbV91bml0OworCisJem9uZS0+bmFtZSA9ICJoaWdobWVtIjsKKwl6b25lLT56b25lX21lbSA9IG1lbTsKKwl6b25lLT5tYXhfbWVtID0gbWVtID4+IDE7CisJem9uZS0+ZW1lcl9tZW0gPSAobWVtID4+IDEpICsgKG1lbSA+PiAyKTsKKwl6b25lLT5zd2FwX2xpbWl0ID0gem9uZS0+bWF4X21lbSAtIChtZW0gPj4gMyk7CisJem9uZS0+dXNlZF9tZW0gPSAwOworCXpvbmUtPmdsb2IgPSBnbG9iOworCWdsb2ItPnpvbmVfaGlnaG1lbSA9IHpvbmU7CisJa29iamVjdF9pbml0KCZ6b25lLT5rb2JqLCAmdHRtX21lbV96b25lX2tvYmpfdHlwZSk7CisJcmV0ID0ga29iamVjdF9hZGQoJnpvbmUtPmtvYmosICZnbG9iLT5rb2JqLCB6b25lLT5uYW1lKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCWtvYmplY3RfcHV0KCZ6b25lLT5rb2JqKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZ2xvYi0+em9uZXNbZ2xvYi0+bnVtX3pvbmVzKytdID0gem9uZTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IHR0bV9tZW1faW5pdF9kbWEzMl96b25lKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc3lzaW5mbyAqc2kpCit7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZSA9IGt6YWxsb2Moc2l6ZW9mKCp6b25lKSwgR0ZQX0tFUk5FTCk7CisJdWludDY0X3QgbWVtOworCWludCByZXQ7CisKKwlpZiAodW5saWtlbHkoIXpvbmUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHNpLT50b3RhbHJhbTsKKwltZW0gKj0gc2ktPm1lbV91bml0OworCisJLyoqCisJICogTm8gc3BlY2lhbCBkbWEzMiB6b25lIG5lZWRlZC4KKwkgKi8KKworCWlmIChtZW0gPD0gKCh1aW50NjRfdCkgMVVMTCA8PCAzMikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBMaW1pdCBtYXggZG1hMzIgbWVtb3J5IHRvIDRHQiBmb3Igbm93CisJICogdW50aWwgd2UgY2FuIGZpZ3VyZSBvdXQgaG93IGJpZyB0aGlzCisJICogem9uZSByZWFsbHkgaXMuCisJICovCisKKwltZW0gPSAoKHVpbnQ2NF90KSAxVUxMIDw8IDMyKTsKKwl6b25lLT5uYW1lID0gImRtYTMyIjsKKwl6b25lLT56b25lX21lbSA9IG1lbTsKKwl6b25lLT5tYXhfbWVtID0gbWVtID4+IDE7CisJem9uZS0+ZW1lcl9tZW0gPSAobWVtID4+IDEpICsgKG1lbSA+PiAyKTsKKwl6b25lLT5zd2FwX2xpbWl0ID0gem9uZS0+bWF4X21lbSAtIChtZW0gPj4gMyk7CisJem9uZS0+dXNlZF9tZW0gPSAwOworCXpvbmUtPmdsb2IgPSBnbG9iOworCWdsb2ItPnpvbmVfZG1hMzIgPSB6b25lOworCWtvYmplY3RfaW5pdCgmem9uZS0+a29iaiwgJnR0bV9tZW1fem9uZV9rb2JqX3R5cGUpOworCXJldCA9IGtvYmplY3RfYWRkKCZ6b25lLT5rb2JqLCAmZ2xvYi0+a29iaiwgem9uZS0+bmFtZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlrb2JqZWN0X3B1dCgmem9uZS0+a29iaik7CisJCXJldHVybiByZXQ7CisJfQorCWdsb2ItPnpvbmVzW2dsb2ItPm51bV96b25lcysrXSA9IHpvbmU7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogaW50IHR0bV9tZW1fZ2xvYmFsX2luaXQoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iKQogewogCXN0cnVjdCBzeXNpbmZvIHNpOwotCXVpbnQ2NF90IG1lbTsKKwlpbnQgcmV0OworCWludCBpOworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmU7CiAKIAlzcGluX2xvY2tfaW5pdCgmZ2xvYi0+bG9jayk7CiAJZ2xvYi0+c3dhcF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJ0dG1fc3dhcCIpOwogCUlOSVRfV09SSygmZ2xvYi0+d29yaywgdHRtX3Nocmlua193b3JrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZnbG9iLT5xdWV1ZSk7CisJa29iamVjdF9pbml0KCZnbG9iLT5rb2JqLCAmdHRtX21lbV9nbG9iX2tvYmpfdHlwZSk7CisJcmV0ID0ga29iamVjdF9hZGQoJmdsb2ItPmtvYmosCisJCQkgIHR0bV9nZXRfa29iaigpLAorCQkJICAibWVtb3J5X2FjY291bnRpbmciKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCWtvYmplY3RfcHV0KCZnbG9iLT5rb2JqKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlzaV9tZW1pbmZvKCZzaSk7CiAKLQltZW0gPSBzaS50b3RhbHJhbSAtIHNpLnRvdGFsaGlnaDsKLQltZW0gKj0gc2kubWVtX3VuaXQ7Ci0KLQlnbG9iLT5tYXhfbWVtb3J5ID0gbWVtID4+IDE7Ci0JZ2xvYi0+ZW1lcl9tZW1vcnkgPSAobWVtID4+IDEpICsgKG1lbSA+PiAyKTsKLQlnbG9iLT5zd2FwX2xpbWl0ID0gZ2xvYi0+bWF4X21lbW9yeSAtIChtZW0gPj4gMyk7Ci0JZ2xvYi0+dXNlZF9tZW1vcnkgPSAwOwotCWdsb2ItPnVzZWRfdG90YWxfbWVtb3J5ID0gMDsKLQlnbG9iLT5zaHJpbmsgPSBOVUxMOwotCi0JbWVtID0gc2kudG90YWxyYW07Ci0JbWVtICo9IHNpLm1lbV91bml0OwotCi0JZ2xvYi0+bWF4X3RvdGFsX21lbW9yeSA9IG1lbSA+PiAxOwotCWdsb2ItPmVtZXJfdG90YWxfbWVtb3J5ID0gKG1lbSA+PiAxKSArIChtZW0gPj4gMik7Ci0KLQlnbG9iLT50b3RhbF9tZW1vcnlfc3dhcF9saW1pdCA9IGdsb2ItPm1heF90b3RhbF9tZW1vcnkgLSAobWVtID4+IDMpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyBUVE1fUEZYICJUVE0gYXZhaWxhYmxlIGdyYXBoaWNzIG1lbW9yeTogJWxsdSBNaUJcbiIsCi0JICAgICAgIGdsb2ItPm1heF90b3RhbF9tZW1vcnkgPj4gMjApOwotCXByaW50ayhLRVJOX0lORk8gVFRNX1BGWCAiVFRNIGF2YWlsYWJsZSBvYmplY3QgbWVtb3J5OiAlbGx1IE1pQlxuIiwKLQkgICAgICAgZ2xvYi0+bWF4X21lbW9yeSA+PiAyMCk7Ci0KKwlyZXQgPSB0dG1fbWVtX2luaXRfa2VybmVsX3pvbmUoZ2xvYiwgJnNpKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9ub196b25lOworI2lmZGVmIENPTkZJR19ISUdITUVNCisJcmV0ID0gdHRtX21lbV9pbml0X2hpZ2htZW1fem9uZShnbG9iLCAmc2kpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X25vX3pvbmU7CisjZWxzZQorCXJldCA9IHR0bV9tZW1faW5pdF9kbWEzMl96b25lKGdsb2IsICZzaSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfbm9fem9uZTsKKyNlbmRpZgorCWZvciAoaSA9IDA7IGkgPCBnbG9iLT5udW1fem9uZXM7ICsraSkgeworCQl6b25lID0gZ2xvYi0+em9uZXNbaV07CisJCXByaW50ayhLRVJOX0lORk8gVFRNX1BGWAorCQkgICAgICAgIlpvbmUgJTdzOiBBdmFpbGFibGUgZ3JhcGhpY3MgbWVtb3J5OiAlbGx1IGtpQi5cbiIsCisJCSAgICAgICB6b25lLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSB6b25lLT5tYXhfbWVtID4+IDEwKTsKKwl9CiAJcmV0dXJuIDA7CitvdXRfbm9fem9uZToKKwl0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKGdsb2IpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9tZW1fZ2xvYmFsX2luaXQpOwogCiB2b2lkIHR0bV9tZW1fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iKQogewotCXByaW50ayhLRVJOX0lORk8gVFRNX1BGWCAiVXNlZCB0b3RhbCBtZW1vcnkgaXMgJWxsdSBieXRlcy5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2xvYi0+dXNlZF90b3RhbF9tZW1vcnkpOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmU7CisKIAlmbHVzaF93b3JrcXVldWUoZ2xvYi0+c3dhcF9xdWV1ZSk7CiAJZGVzdHJveV93b3JrcXVldWUoZ2xvYi0+c3dhcF9xdWV1ZSk7CiAJZ2xvYi0+c3dhcF9xdWV1ZSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGdsb2ItPm51bV96b25lczsgKytpKSB7CisJCXpvbmUgPSBnbG9iLT56b25lc1tpXTsKKwkJa29iamVjdF9kZWwoJnpvbmUtPmtvYmopOworCQlrb2JqZWN0X3B1dCgmem9uZS0+a29iaik7CisJfQorCWtvYmplY3RfZGVsKCZnbG9iLT5rb2JqKTsKKwlrb2JqZWN0X3B1dCgmZ2xvYi0+a29iaik7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9tZW1fZ2xvYmFsX3JlbGVhc2UpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgdHRtX2NoZWNrX3N3YXBwaW5nKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYikKK3N0YXRpYyB2b2lkIHR0bV9jaGVja19zd2FwcGluZyhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IpCiB7Ci0JYm9vbCBuZWVkc19zd2FwcGluZzsKKwlib29sIG5lZWRzX3N3YXBwaW5nID0gZmFsc2U7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZTsKIAogCXNwaW5fbG9jaygmZ2xvYi0+bG9jayk7Ci0JbmVlZHNfc3dhcHBpbmcgPSAoZ2xvYi0+dXNlZF9tZW1vcnkgPiBnbG9iLT5zd2FwX2xpbWl0IHx8Ci0JCQkgIGdsb2ItPnVzZWRfdG90YWxfbWVtb3J5ID4KLQkJCSAgZ2xvYi0+dG90YWxfbWVtb3J5X3N3YXBfbGltaXQpOworCWZvciAoaSA9IDA7IGkgPCBnbG9iLT5udW1fem9uZXM7ICsraSkgeworCQl6b25lID0gZ2xvYi0+em9uZXNbaV07CisJCWlmICh6b25lLT51c2VkX21lbSA+IHpvbmUtPnN3YXBfbGltaXQpIHsKKwkJCW5lZWRzX3N3YXBwaW5nID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJc3Bpbl91bmxvY2soJmdsb2ItPmxvY2spOwogCiAJaWYgKHVubGlrZWx5KG5lZWRzX3N3YXBwaW5nKSkKQEAgLTE1Myw0NCArNDM4LDYwIEBACiAKIH0KIAotdm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKLQkJCSB1aW50NjRfdCBhbW91bnQsIGJvb2wgaGltZW0pCitzdGF0aWMgdm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlX3pvbmUoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJCSAgICAgc3RydWN0IHR0bV9tZW1fem9uZSAqc2luZ2xlX3pvbmUsCisJCQkJICAgICB1aW50NjRfdCBhbW91bnQpCiB7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZTsKKwogCXNwaW5fbG9jaygmZ2xvYi0+bG9jayk7Ci0JZ2xvYi0+dXNlZF90b3RhbF9tZW1vcnkgLT0gYW1vdW50OwotCWlmICghaGltZW0pCi0JCWdsb2ItPnVzZWRfbWVtb3J5IC09IGFtb3VudDsKLQl3YWtlX3VwX2FsbCgmZ2xvYi0+cXVldWUpOworCWZvciAoaSA9IDA7IGkgPCBnbG9iLT5udW1fem9uZXM7ICsraSkgeworCQl6b25lID0gZ2xvYi0+em9uZXNbaV07CisJCWlmIChzaW5nbGVfem9uZSAmJiB6b25lICE9IHNpbmdsZV96b25lKQorCQkJY29udGludWU7CisJCXpvbmUtPnVzZWRfbWVtIC09IGFtb3VudDsKKwl9CiAJc3Bpbl91bmxvY2soJmdsb2ItPmxvY2spOwogfQogCit2b2lkIHR0bV9tZW1fZ2xvYmFsX2ZyZWUoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJIHVpbnQ2NF90IGFtb3VudCkKK3sKKwlyZXR1cm4gdHRtX21lbV9nbG9iYWxfZnJlZV96b25lKGdsb2IsIE5VTEwsIGFtb3VudCk7Cit9CisKIHN0YXRpYyBpbnQgdHRtX21lbV9nbG9iYWxfcmVzZXJ2ZShzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCi0JCQkJICB1aW50NjRfdCBhbW91bnQsIGJvb2wgaGltZW0sIGJvb2wgcmVzZXJ2ZSkKKwkJCQkgIHN0cnVjdCB0dG1fbWVtX3pvbmUgKnNpbmdsZV96b25lLAorCQkJCSAgdWludDY0X3QgYW1vdW50LCBib29sIHJlc2VydmUpCiB7CiAJdWludDY0X3QgbGltaXQ7Ci0JdWludDY0X3QgbG9tZW1fbGltaXQ7CiAJaW50IHJldCA9IC1FTk9NRU07CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZTsKIAogCXNwaW5fbG9jaygmZ2xvYi0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IGdsb2ItPm51bV96b25lczsgKytpKSB7CisJCXpvbmUgPSBnbG9iLT56b25lc1tpXTsKKwkJaWYgKHNpbmdsZV96b25lICYmIHpvbmUgIT0gc2luZ2xlX3pvbmUpCisJCQljb250aW51ZTsKIAotCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7Ci0JCWxpbWl0ID0gZ2xvYi0+ZW1lcl90b3RhbF9tZW1vcnk7Ci0JCWxvbWVtX2xpbWl0ID0gZ2xvYi0+ZW1lcl9tZW1vcnk7Ci0JfSBlbHNlIHsKLQkJbGltaXQgPSBnbG9iLT5tYXhfdG90YWxfbWVtb3J5OwotCQlsb21lbV9saW1pdCA9IGdsb2ItPm1heF9tZW1vcnk7CisJCWxpbWl0ID0gKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpID8KKwkJCXpvbmUtPmVtZXJfbWVtIDogem9uZS0+bWF4X21lbTsKKworCQlpZiAoem9uZS0+dXNlZF9tZW0gPiBsaW1pdCkKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpZiAodW5saWtlbHkoZ2xvYi0+dXNlZF90b3RhbF9tZW1vcnkgKyBhbW91bnQgPiBsaW1pdCkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQlpZiAodW5saWtlbHkoIWhpbWVtICYmIGdsb2ItPnVzZWRfbWVtb3J5ICsgYW1vdW50ID4gbG9tZW1fbGltaXQpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KIAlpZiAocmVzZXJ2ZSkgewotCQlnbG9iLT51c2VkX3RvdGFsX21lbW9yeSArPSBhbW91bnQ7Ci0JCWlmICghaGltZW0pCi0JCQlnbG9iLT51c2VkX21lbW9yeSArPSBhbW91bnQ7CisJCWZvciAoaSA9IDA7IGkgPCBnbG9iLT5udW1fem9uZXM7ICsraSkgeworCQkJem9uZSA9IGdsb2ItPnpvbmVzW2ldOworCQkJaWYgKHNpbmdsZV96b25lICYmIHpvbmUgIT0gc2luZ2xlX3pvbmUpCisJCQkJY29udGludWU7CisJCQl6b25lLT51c2VkX21lbSArPSBhbW91bnQ7CisJCX0KIAl9CisKIAlyZXQgPSAwOwogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmZ2xvYi0+bG9jayk7CkBAIC0xOTksMTIgKzUwMCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCB0dG1fbWVtX2dsb2JhbF9hbGxvYyhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsIHVpbnQ2NF90IG1lbW9yeSwKLQkJCSBib29sIG5vX3dhaXQsIGJvb2wgaW50ZXJydXB0aWJsZSwgYm9vbCBoaW1lbSkKKworc3RhdGljIGludCB0dG1fbWVtX2dsb2JhbF9hbGxvY196b25lKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKKwkJCQkgICAgIHN0cnVjdCB0dG1fbWVtX3pvbmUgKnNpbmdsZV96b25lLAorCQkJCSAgICAgdWludDY0X3QgbWVtb3J5LAorCQkJCSAgICAgYm9vbCBub193YWl0LCBib29sIGludGVycnVwdGlibGUpCiB7CiAJaW50IGNvdW50ID0gVFRNX01FTU9SWV9BTExPQ19SRVRSSUVTOwogCi0Jd2hpbGUgKHVubGlrZWx5KHR0bV9tZW1fZ2xvYmFsX3Jlc2VydmUoZ2xvYiwgbWVtb3J5LCBoaW1lbSwgdHJ1ZSkKKwl3aGlsZSAodW5saWtlbHkodHRtX21lbV9nbG9iYWxfcmVzZXJ2ZShnbG9iLAorCQkJCQkgICAgICAgc2luZ2xlX3pvbmUsCisJCQkJCSAgICAgICBtZW1vcnksIHRydWUpCiAJCQkhPSAwKSkgewogCQlpZiAobm9fd2FpdCkKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMjE2LDYgKzUyMiw1NiBAQAogCXJldHVybiAwOwogfQogCitpbnQgdHRtX21lbV9nbG9iYWxfYWxsb2Moc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLCB1aW50NjRfdCBtZW1vcnksCisJCQkgYm9vbCBub193YWl0LCBib29sIGludGVycnVwdGlibGUpCit7CisJLyoqCisJICogTm9ybWFsIGFsbG9jYXRpb25zIG9mIGtlcm5lbCBtZW1vcnkgYXJlIHJlZ2lzdGVyZWQgaW4KKwkgKiBhbGwgem9uZXMuCisJICovCisKKwlyZXR1cm4gdHRtX21lbV9nbG9iYWxfYWxsb2Nfem9uZShnbG9iLCBOVUxMLCBtZW1vcnksIG5vX3dhaXQsCisJCQkJCSBpbnRlcnJ1cHRpYmxlKTsKK30KKworaW50IHR0bV9tZW1fZ2xvYmFsX2FsbG9jX3BhZ2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICBib29sIG5vX3dhaXQsIGJvb2wgaW50ZXJydXB0aWJsZSkKK3sKKworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmUgPSBOVUxMOworCisJLyoqCisJICogUGFnZSBhbGxvY2F0aW9ucyBtYXkgYmUgcmVnaXN0ZWQgaW4gYSBzaW5nbGUgem9uZQorCSAqIG9ubHkgaWYgaGlnaG1lbSBvciAhZG1hMzIuCisJICovCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCWlmIChQYWdlSGlnaE1lbShwYWdlKSAmJiBnbG9iLT56b25lX2hpZ2htZW0gIT0gTlVMTCkKKwkJem9uZSA9IGdsb2ItPnpvbmVfaGlnaG1lbTsKKyNlbHNlCisJaWYgKGdsb2ItPnpvbmVfZG1hMzIgJiYgcGFnZV90b19wZm4ocGFnZSkgPiAweDAwMTAwMDAwVUwpCisJCXpvbmUgPSBnbG9iLT56b25lX2tlcm5lbDsKKyNlbmRpZgorCXJldHVybiB0dG1fbWVtX2dsb2JhbF9hbGxvY196b25lKGdsb2IsIHpvbmUsIFBBR0VfU0laRSwgbm9fd2FpdCwKKwkJCQkJIGludGVycnVwdGlibGUpOworfQorCit2b2lkIHR0bV9tZW1fZ2xvYmFsX2ZyZWVfcGFnZShzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmUgPSBOVUxMOworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkgJiYgZ2xvYi0+em9uZV9oaWdobWVtICE9IE5VTEwpCisJCXpvbmUgPSBnbG9iLT56b25lX2hpZ2htZW07CisjZWxzZQorCWlmIChnbG9iLT56b25lX2RtYTMyICYmIHBhZ2VfdG9fcGZuKHBhZ2UpID4gMHgwMDEwMDAwMFVMKQorCQl6b25lID0gZ2xvYi0+em9uZV9rZXJuZWw7CisjZW5kaWYKKwl0dG1fbWVtX2dsb2JhbF9mcmVlX3pvbmUoZ2xvYiwgem9uZSwgUEFHRV9TSVpFKTsKK30KKworCiBzaXplX3QgdHRtX3JvdW5kX3BvdChzaXplX3Qgc2l6ZSkKIHsKIAlpZiAoKHNpemUgJiAoc2l6ZSAtIDEpKSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tb2R1bGUuYwppbmRleCA1OWNlODE5Li45YTZlZGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tb2R1bGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tb2R1bGUuYwpAQCAtMjksMTYgKzI5LDcyIEBACiAgKiAJICAgIEplcm9tZSBHbGlzc2UKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPHR0bS90dG1fbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlICJ0dG0vdHRtX21vZHVsZS5oIgorI2luY2x1ZGUgImRybV9zeXNmcy5oIgorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZXhpdF9xKTsKK2F0b21pY190IGRldmljZV9yZWxlYXNlZDsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSB0dG1fZHJtX2NsYXNzX3R5cGUgPSB7CisJLm5hbWUgPSAidHRtIiwKKwkvKioKKwkgKiBBZGQgcG0gb3BzIGhlcmUuCisJICovCit9OworCitzdGF0aWMgdm9pZCB0dG1fZHJtX2NsYXNzX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlhdG9taWNfc2V0KCZkZXZpY2VfcmVsZWFzZWQsIDEpOworCXdha2VfdXBfYWxsKCZleGl0X3EpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSB0dG1fZHJtX2NsYXNzX2RldmljZSA9IHsKKwkudHlwZSA9ICZ0dG1fZHJtX2NsYXNzX3R5cGUsCisJLnJlbGVhc2UgPSAmdHRtX2RybV9jbGFzc19kZXZpY2VfcmVsZWFzZQorfTsKKworc3RydWN0IGtvYmplY3QgKnR0bV9nZXRfa29iaih2b2lkKQoreworCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJnR0bV9kcm1fY2xhc3NfZGV2aWNlLmtvYmo7CisJQlVHX09OKGtvYmogPT0gTlVMTCk7CisJcmV0dXJuIGtvYmo7Cit9CiAKIHN0YXRpYyBpbnQgX19pbml0IHR0bV9pbml0KHZvaWQpCiB7CisJaW50IHJldDsKKworCXJldCA9IGRldl9zZXRfbmFtZSgmdHRtX2RybV9jbGFzc19kZXZpY2UsICJ0dG0iKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCiAJdHRtX2dsb2JhbF9pbml0KCk7CisKKwlhdG9taWNfc2V0KCZkZXZpY2VfcmVsZWFzZWQsIDApOworCXJldCA9IGRybV9jbGFzc19kZXZpY2VfcmVnaXN0ZXIoJnR0bV9kcm1fY2xhc3NfZGV2aWNlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9ub19kZXZfcmVnOworCiAJcmV0dXJuIDA7CitvdXRfbm9fZGV2X3JlZzoKKwlhdG9taWNfc2V0KCZkZXZpY2VfcmVsZWFzZWQsIDEpOworCXdha2VfdXBfYWxsKCZleGl0X3EpOworCXR0bV9nbG9iYWxfcmVsZWFzZSgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0dG1fZXhpdCh2b2lkKQogeworCWRybV9jbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmdHRtX2RybV9jbGFzc19kZXZpY2UpOworCisJLyoqCisJICogUmVmdXNlIHRvIHVubG9hZCB1bnRpbCB0aGUgVFRNIGRldmljZSBpcyByZWxlYXNlZC4KKwkgKiBOb3Qgc3VyZSB0aGlzIGlzIDEwMCUgbmVlZGVkLgorCSAqLworCisJd2FpdF9ldmVudChleGl0X3EsIGF0b21pY19yZWFkKCZkZXZpY2VfcmVsZWFzZWQpID09IDEpOwogCXR0bV9nbG9iYWxfcmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCBiOGI2YzRhLi5hNTVlZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTM0LDc2ICszNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgImRybV9jYWNoZS5oIgogI2luY2x1ZGUgInR0bS90dG1fbW9kdWxlLmgiCiAjaW5jbHVkZSAidHRtL3R0bV9ib19kcml2ZXIuaCIKICNpbmNsdWRlICJ0dG0vdHRtX3BsYWNlbWVudC5oIgogCiBzdGF0aWMgaW50IHR0bV90dF9zd2FwaW4oc3RydWN0IHR0bV90dCAqdHRtKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4NikKLXN0YXRpYyB2b2lkIHR0bV90dF9jbGZsdXNoX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JdWludDhfdCAqcGFnZV92aXJ0dWFsOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKHVubGlrZWx5KHBhZ2UgPT0gTlVMTCkpCi0JCXJldHVybjsKLQotCXBhZ2VfdmlydHVhbCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJWkU7IGkgKz0gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplKQotCQljbGZsdXNoKHBhZ2VfdmlydHVhbCArIGkpOwotCi0Ja3VubWFwX2F0b21pYyhwYWdlX3ZpcnR1YWwsIEtNX1VTRVIwKTsKLX0KLQotc3RhdGljIHZvaWQgdHRtX3R0X2NhY2hlX2ZsdXNoX2NsZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2VzW10sCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCW1iKCk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgKytpKQotCQl0dG1fdHRfY2xmbHVzaF9wYWdlKCpwYWdlcysrKTsKLQltYigpOwotfQotI2VsaWYgIWRlZmluZWQoX19wb3dlcnBjX18pCi1zdGF0aWMgdm9pZCB0dG1fdHRfaXBpX2hhbmRsZXIodm9pZCAqbnVsbCkKLXsKLQk7Ci19Ci0jZW5kaWYKLQotdm9pZCB0dG1fdHRfY2FjaGVfZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2VzW10sIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQotewotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2KQotCWlmIChjcHVfaGFzX2NsZmx1c2gpIHsKLQkJdHRtX3R0X2NhY2hlX2ZsdXNoX2NsZmx1c2gocGFnZXMsIG51bV9wYWdlcyk7Ci0JCXJldHVybjsKLQl9Ci0jZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzW2ldOwotCQl2b2lkICpwYWdlX3ZpcnR1YWw7Ci0KLQkJaWYgKHVubGlrZWx5KHBhZ2UgPT0gTlVMTCkpCi0JCQljb250aW51ZTsKLQotCQlwYWdlX3ZpcnR1YWwgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgcGFnZV92aXJ0dWFsLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKSBwYWdlX3ZpcnR1YWwgKyBQQUdFX1NJWkUpOwotCQlrdW5tYXBfYXRvbWljKHBhZ2VfdmlydHVhbCwgS01fVVNFUjApOwotCX0KLSNlbHNlCi0JaWYgKG9uX2VhY2hfY3B1KHR0bV90dF9pcGlfaGFuZGxlciwgTlVMTCwgMSkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSIFRUTV9QRlgKLQkJICAgICAgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZHJtIGNhY2hlIGZsdXNoLlxuIik7Ci0jZW5kaWYKLX0KLQogLyoqCiAgKiBBbGxvY2F0ZXMgc3RvcmFnZSBmb3IgcG9pbnRlcnMgdG8gdGhlIHBhZ2VzIHRoYXQgYmFjayB0aGUgdHRtLgogICoKQEAgLTE3OSw3ICsxMTYsNyBAQAogCQkJc2V0X3BhZ2VfZGlydHlfbG9jayhwYWdlKTsKIAogCQl0dG0tPnBhZ2VzW2ldID0gTlVMTDsKLQkJdHRtX21lbV9nbG9iYWxfZnJlZSh0dG0tPmJkZXYtPm1lbV9nbG9iLCBQQUdFX1NJWkUsIGZhbHNlKTsKKwkJdHRtX21lbV9nbG9iYWxfZnJlZSh0dG0tPmdsb2ItPm1lbV9nbG9iLCBQQUdFX1NJWkUpOwogCQlwdXRfcGFnZShwYWdlKTsKIAl9CiAJdHRtLT5zdGF0ZSA9IHR0X3VucG9wdWxhdGVkOwpAQCAtMTkwLDggKzEyNyw3IEBACiBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fdHRtX3R0X2dldF9wYWdlKHN0cnVjdCB0dG1fdHQgKnR0bSwgaW50IGluZGV4KQogewogCXN0cnVjdCBwYWdlICpwOwotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gdHRtLT5iZGV2OwotCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2IgPSBiZGV2LT5tZW1fZ2xvYjsKKwlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iID0gdHRtLT5nbG9iLT5tZW1fZ2xvYjsKIAlpbnQgcmV0OwogCiAJd2hpbGUgKE5VTEwgPT0gKHAgPSB0dG0tPnBhZ2VzW2luZGV4XSkpIHsKQEAgLTIwMCwyMSArMTM2LDE0IEBACiAJCWlmICghcCkKIAkJCXJldHVybiBOVUxMOwogCi0JCWlmIChQYWdlSGlnaE1lbShwKSkgewotCQkJcmV0ID0KLQkJCSAgICB0dG1fbWVtX2dsb2JhbF9hbGxvYyhtZW1fZ2xvYiwgUEFHRV9TSVpFLAotCQkJCQkJIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7Ci0JCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJCWdvdG8gb3V0X2VycjsKKwkJcmV0ID0gdHRtX21lbV9nbG9iYWxfYWxsb2NfcGFnZShtZW1fZ2xvYiwgcCwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlpZiAoUGFnZUhpZ2hNZW0ocCkpCiAJCQl0dG0tPnBhZ2VzWy0tdHRtLT5maXJzdF9oaW1lbV9wYWdlXSA9IHA7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPQotCQkJICAgIHR0bV9tZW1fZ2xvYmFsX2FsbG9jKG1lbV9nbG9iLCBQQUdFX1NJWkUsCi0JCQkJCQkgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0JCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJCWdvdG8gb3V0X2VycjsKKwkJZWxzZQogCQkJdHRtLT5wYWdlc1srK3R0bS0+bGFzdF9sb21lbV9wYWdlXSA9IHA7Ci0JCX0KIAl9CiAJcmV0dXJuIHA7CiBvdXRfZXJyOgpAQCAtMzEwLDcgKzIzOSw3IEBACiAJfQogCiAJaWYgKHR0bS0+Y2FjaGluZ19zdGF0ZSA9PSB0dF9jYWNoZWQpCi0JCXR0bV90dF9jYWNoZV9mbHVzaCh0dG0tPnBhZ2VzLCB0dG0tPm51bV9wYWdlcyk7CisJCWRybV9jbGZsdXNoX3BhZ2VzKHR0bS0+cGFnZXMsIHR0bS0+bnVtX3BhZ2VzKTsKIAogCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgKytpKSB7CiAJCWN1cl9wYWdlID0gdHRtLT5wYWdlc1tpXTsKQEAgLTM2OCw4ICsyOTcsOCBAQAogCQkJCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYCiAJCQkJICAgICAgICJFcnJvbmVvdXMgcGFnZSBjb3VudC4gIgogCQkJCSAgICAgICAiTGVha2luZyBwYWdlcy5cbiIpOwotCQkJdHRtX21lbV9nbG9iYWxfZnJlZSh0dG0tPmJkZXYtPm1lbV9nbG9iLCBQQUdFX1NJWkUsCi0JCQkJCSAgICBQYWdlSGlnaE1lbShjdXJfcGFnZSkpOworCQkJdHRtX21lbV9nbG9iYWxfZnJlZV9wYWdlKHR0bS0+Z2xvYi0+bWVtX2dsb2IsCisJCQkJCQkgY3VyX3BhZ2UpOwogCQkJX19mcmVlX3BhZ2UoY3VyX3BhZ2UpOwogCQl9CiAJfQpAQCAtNDE0LDcgKzM0Myw3IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwogCWludCByZXQ7CiAJaW50IHdyaXRlID0gKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfV1JJVEUpICE9IDA7Ci0Jc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYiA9IHR0bS0+YmRldi0+bWVtX2dsb2I7CisJc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYiA9IHR0bS0+Z2xvYi0+bWVtX2dsb2I7CiAKIAlCVUdfT04obnVtX3BhZ2VzICE9IHR0bS0+bnVtX3BhZ2VzKTsKIAlCVUdfT04oKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfVVNFUikgPT0gMCk7CkBAIC00MjQsNyArMzUzLDcgQEAKIAkgKi8KIAogCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKG1lbV9nbG9iLCBudW1fcGFnZXMgKiBQQUdFX1NJWkUsCi0JCQkJICAgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQkJICAgZmFsc2UsIGZhbHNlKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwogCkBAIC00MzUsNyArMzY0LDcgQEAKIAogCWlmIChyZXQgIT0gbnVtX3BhZ2VzICYmIHdyaXRlKSB7CiAJCXR0bV90dF9mcmVlX3VzZXJfcGFnZXModHRtKTsKLQkJdHRtX21lbV9nbG9iYWxfZnJlZShtZW1fZ2xvYiwgbnVtX3BhZ2VzICogUEFHRV9TSVpFLCBmYWxzZSk7CisJCXR0bV9tZW1fZ2xvYmFsX2ZyZWUobWVtX2dsb2IsIG51bV9wYWdlcyAqIFBBR0VfU0laRSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNDU5LDggKzM4OCw3IEBACiAJaWYgKCF0dG0pCiAJCXJldHVybiBOVUxMOwogCi0JdHRtLT5iZGV2ID0gYmRldjsKLQorCXR0bS0+Z2xvYiA9IGJkZXYtPmdsb2I7CiAJdHRtLT5udW1fcGFnZXMgPSAoc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAJdHRtLT5maXJzdF9oaW1lbV9wYWdlID0gdHRtLT5udW1fcGFnZXM7CiAJdHRtLT5sYXN0X2xvbWVtX3BhZ2UgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDExMWFmYmUuLjI0ZDkwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtMjA1LDEzICsyMDUsNiBAQAogCVN1cHBvcnQgZm9yIE4tVHJpZyB0b3VjaCBzY3JlZW4uCiAKIGNvbmZpZyBISURfUEFOVEhFUkxPUkQKLQl0cmlzdGF0ZSAiUGFudGhlcmxvcmQgZGV2aWNlcyBzdXBwb3J0IiBpZiBFTUJFRERFRAotCWRlcGVuZHMgb24gVVNCX0hJRAotCWRlZmF1bHQgIUVNQkVEREVECi0JLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSBiYXNlZCBkZXZpY2Ugc3VwcG9ydC4KLQotY29uZmlnIEhJRF9QQU5USEVSTE9SRAogCXRyaXN0YXRlICJQYW50aGVybG9yZCBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRAogCWRlZmF1bHQgIUVNQkVEREVECmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCAzNDJiN2QzLi5iZTM0ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTEwODksOCArMTA4OSw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlidWYgPSBrbWFsbG9jKHNpemVvZihjaGFyKSAqIEhJRF9ERUJVR19CVUZTSVpFLAotCQkJaW50ZXJydXB0ID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogSElEX0RFQlVHX0JVRlNJWkUsIEdGUF9BVE9NSUMpOwogCiAJaWYgKCFidWYpIHsKIAkJcmVwb3J0ID0gaGlkX2dldF9yZXBvcnQocmVwb3J0X2VudW0sIGRhdGEpOwpAQCAtMTIzOCw2ICsxMjM3LDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfY29ubmVjdCk7CiAKK3ZvaWQgaGlkX2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKKwkJaGlkaW5wdXRfZGlzY29ubmVjdChoZGV2KTsKKwlpZiAoaGRldi0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFVikKKwkJaGRldi0+aGlkZGV2X2Rpc2Nvbm5lY3QoaGRldik7CisJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCisJCWhpZHJhd19kaXNjb25uZWN0KGhkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2Rpc2Nvbm5lY3QpOworCiAvKiBhIGxpc3Qgb2YgZGV2aWNlcyBmb3Igd2hpY2ggdGhlcmUgaXMgYSBzcGVjaWFsaXplZCBkcml2ZXIgb24gSElEIGJ1cyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF9ibGFja2xpc3RbXSA9IHsKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCAxYjBlMDdhLi4wM2JkNzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtMTA0MSwxMyArMTA0MSw2IEBACiAKIAloaWRfY2FuY2VsX2RlbGF5ZWRfc3R1ZmYodXNiaGlkKTsKIAotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKLQkJaGlkaW5wdXRfZGlzY29ubmVjdChoaWQpOwotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCi0JCWhpZGRldl9kaXNjb25uZWN0KGhpZCk7Ci0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRFJBVykKLQkJaGlkcmF3X2Rpc2Nvbm5lY3QoaGlkKTsKLQogCWhpZC0+Y2xhaW1lZCA9IDA7CiAKIAl1c2JfZnJlZV91cmIodXNiaGlkLT51cmJpbik7CkBAIC0xMDg1LDcgKzEwNzgsNyBAQAogCS5oaWRpbnB1dF9pbnB1dF9ldmVudCA9IHVzYl9oaWRpbnB1dF9pbnB1dF9ldmVudCwKIH07CiAKLXN0YXRpYyBpbnQgaGlkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHVzYmhpZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwpAQCAtMTExNyw2ICsxMTEwLDcgQEAKIAloaWQtPmZmX2luaXQgPSBoaWRfcGlkZmZfaW5pdDsKICNpZmRlZiBDT05GSUdfVVNCX0hJRERFVgogCWhpZC0+aGlkZGV2X2Nvbm5lY3QgPSBoaWRkZXZfY29ubmVjdDsKKwloaWQtPmhpZGRldl9kaXNjb25uZWN0ID0gaGlkZGV2X2Rpc2Nvbm5lY3Q7CiAJaGlkLT5oaWRkZXZfaGlkX2V2ZW50ID0gaGlkZGV2X2hpZF9ldmVudDsKIAloaWQtPmhpZGRldl9yZXBvcnRfZXZlbnQgPSBoaWRkZXZfcmVwb3J0X2V2ZW50OwogI2VuZGlmCkBAIC0xMTc3LDcgKzExNzEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIHZvaWQgdXNiaGlkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZDsKQEAgLTEzNTksOCArMTM1Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBoaWRfZHJpdmVyID0gewogCS5uYW1lID0JCSJ1c2JoaWQiLAotCS5wcm9iZSA9CWhpZF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CWhpZF9kaXNjb25uZWN0LAorCS5wcm9iZSA9CXVzYmhpZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYmhpZF9kaXNjb25uZWN0LAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kID0JaGlkX3N1c3BlbmQsCiAJLnJlc3VtZSA9CWhpZF9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKaW5kZXggNGQxZGMwYy4uOGI2ZWUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwpAQCAtODUyLDE0ICs4NTIsMTQgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGNoYXIgKmhpZGRldl9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqaGlkZGV2X2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAidXNiLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBoaWRkZXZfY2xhc3MgPSB7CiAJLm5hbWUgPQkJImhpZGRldiVkIiwKLQkubm9kZW5hbWUgPQloaWRkZXZfbm9kZW5hbWUsCisJLmRldm5vZGUgPQloaWRkZXZfZGV2bm9kZSwKIAkuZm9wcyA9CQkmaGlkZGV2X2ZvcHMsCiAJLm1pbm9yX2Jhc2UgPQlISURERVZfTUlOT1JfQkFTRSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggZWQ3NzExZC4uNjg1NzU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMzI1LDM0ICszMjUsNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgZjc1Mzc1cy4KIAotY29uZmlnIFNFTlNPUlNfRlNDSEVSCi0JdHJpc3RhdGUgIkZTQyBIZXJtZXMgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gWDg2ICYmIEkyQwotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgbmV3IG1lcmdlZCBmc2NobWQKLQkgICgiRlNDIFBvc2VpZG9uLCBTY3lsbGEsIEhlcm1lcywgSGVpbWRhbGwgYW5kIEhlcmFjbGVzIikgZHJpdmVyCi0JICBpbnN0ZWFkLgotCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRnVqaXRzdSBTaWVtZW5zCi0JICBDb21wdXRlcnMgSGVybWVzIHNlbnNvciBjaGlwcy4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgZnNjaGVyLgotCi1jb25maWcgU0VOU09SU19GU0NQT1MKLQl0cmlzdGF0ZSAiRlNDIFBvc2VpZG9uIChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIFg4NiAmJiBJMkMKLQloZWxwCi0JICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIG5ldyBtZXJnZWQgZnNjaG1kCi0JICAoIkZTQyBQb3NlaWRvbiwgU2N5bGxhLCBIZXJtZXMsIEhlaW1kYWxsIGFuZCBIZXJhY2xlcyIpIGRyaXZlcgotCSAgaW5zdGVhZC4KLQotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEZ1aml0c3UgU2llbWVucwotCSAgQ29tcHV0ZXJzIFBvc2VpZG9uIHNlbnNvciBjaGlwcy4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgZnNjcG9zLgotCiBjb25maWcgU0VOU09SU19GU0NITUQKIAl0cmlzdGF0ZSAiRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBzZW5zb3IgY2hpcHMiCiAJZGVwZW5kcyBvbiBYODYgJiYgSTJDCkBAIC00MDEsMTIgKzM3MywxMiBAQAogCSAgd2lsbCBiZSBjYWxsZWQgZ2w1MjBzbS4KIAogY29uZmlnIFNFTlNPUlNfQ09SRVRFTVAKLQl0cmlzdGF0ZSAiSW50ZWwgQ29yZSAoMikgRHVvL1NvbG8gdGVtcGVyYXR1cmUgc2Vuc29yIgorCXRyaXN0YXRlICJJbnRlbCBDb3JlL0NvcmUyL0F0b20gdGVtcGVyYXR1cmUgc2Vuc29yIgogCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgdGVtcGVyYXR1cmUKLQkgIHNlbnNvciBpbnNpZGUgeW91ciBDUFUuIFN1cHBvcnRlZCBhbGwgYXJlIGFsbCBrbm93biB2YXJpYW50cwotCSAgb2YgSW50ZWwgQ29yZSBmYW1pbHkuCisJICBzZW5zb3IgaW5zaWRlIHlvdXIgQ1BVLiBNb3N0IG9mIHRoZSBmYW1pbHkgNiBDUFVzCisJICBhcmUgc3VwcG9ydGVkLiBDaGVjayBkb2N1bWVudGF0aW9uL2RyaXZlciBmb3IgZGV0YWlscy4KIAogY29uZmlnIFNFTlNPUlNfSUJNQUVNCiAJdHJpc3RhdGUgIklCTSBBY3RpdmUgRW5lcmd5IE1hbmFnZXIgdGVtcGVyYXR1cmUvcG93ZXIgc2Vuc29ycyBhbmQgY29udHJvbCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGJjZjczYTkuLjlmNDZjYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtNDIsOSArNDIsNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfRjcxODA1RikJKz0gZjcxODA1Zi5vCiBvYmotJChDT05GSUdfU0VOU09SU19GNzE4ODJGRykJKz0gZjcxODgyZmcubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRjc1Mzc1UykJKz0gZjc1Mzc1cy5vCi1vYmotJChDT05GSUdfU0VOU09SU19GU0NIRVIpCSs9IGZzY2hlci5vCiBvYmotJChDT05GSUdfU0VOU09SU19GU0NITUQpCSs9IGZzY2htZC5vCi1vYmotJChDT05GSUdfU0VOU09SU19GU0NQT1MpCSs9IGZzY3Bvcy5vCiBvYmotJChDT05GSUdfU0VOU09SU19HNzYwQSkJKz0gZzc2MGEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfR0w1MThTTSkJKz0gZ2w1MThzbS5vCiBvYmotJChDT05GSUdfU0VOU09SU19HTDUyMFNNKQkrPSBnbDUyMHNtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRjeHguYyBiL2RyaXZlcnMvaHdtb24vYWRjeHguYwppbmRleCAyNDIyOTRkLi41ZTllMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkY3h4LmMKKysrIGIvZHJpdmVycy9od21vbi9hZGN4eC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogCiAjZGVmaW5lIERSVk5BTUUJCSJhZGN4eCIKQEAgLTE1Nyw4ICsxNTgsOSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZGN4eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgY2hhbm5lbHMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGN4eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogeworCWludCBjaGFubmVscyA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBhZGN4eCAqYWRjOwogCWludCBzdGF0dXM7CiAJaW50IGk7CkBAIC0yMDQsMjYgKzIwNiw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgYWRjeHgxc19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXJldHVybiBhZGN4eF9wcm9iZShzcGksIDEpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZGN4eDJzX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JcmV0dXJuIGFkY3h4X3Byb2JlKHNwaSwgMik7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGFkY3h4NHNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlyZXR1cm4gYWRjeHhfcHJvYmUoc3BpLCA0KTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgYWRjeHg4c19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXJldHVybiBhZGN4eF9wcm9iZShzcGksIDgpOwotfQotCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZGN4eF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWRjeHggKmFkYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwpAQCAtMjQxLDc5ICsyMjMsMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkY3h4MXNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gImFkY3h4MXMiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQk9IGFkY3h4MXNfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGFkY3h4X3JlbW92ZSksCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgYWRjeHhfaWRzW10gPSB7CisJeyAiYWRjeHgxcyIsIDEgfSwKKwl7ICJhZGN4eDJzIiwgMiB9LAorCXsgImFkY3h4NHMiLCA0IH0sCisJeyAiYWRjeHg4cyIsIDggfSwKKwl7IH0sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGFkY3h4X2lkcyk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZGN4eDJzX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZGN4eF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiYWRjeHgycyIsCisJCS5uYW1lCT0gImFkY3h4IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKLQkucHJvYmUJPSBhZGN4eDJzX3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChhZGN4eF9yZW1vdmUpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkY3h4NHNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gImFkY3h4NHMiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQk9IGFkY3h4NHNfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGFkY3h4X3JlbW92ZSksCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWRjeHg4c19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiYWRjeHg4cyIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCT0gYWRjeHg4c19wcm9iZSwKKwkuaWRfdGFibGUgPSBhZGN4eF9pZHMsCisJLnByb2JlCT0gYWRjeHhfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGFkY3h4X3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2FkY3h4KHZvaWQpCiB7Ci0JaW50IHN0YXR1czsKLQlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZGN4eDFzX2RyaXZlcik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byByZWdfMV9mYWlsZWQ7Ci0KLQlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZGN4eDJzX2RyaXZlcik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byByZWdfMl9mYWlsZWQ7Ci0KLQlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZGN4eDRzX2RyaXZlcik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byByZWdfNF9mYWlsZWQ7Ci0KLQlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZGN4eDhzX2RyaXZlcik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byByZWdfOF9mYWlsZWQ7Ci0KLQlyZXR1cm4gc3RhdHVzOwotCi1yZWdfOF9mYWlsZWQ6Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZGN4eDRzX2RyaXZlcik7Ci1yZWdfNF9mYWlsZWQ6Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZGN4eDJzX2RyaXZlcik7Ci1yZWdfMl9mYWlsZWQ6Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZGN4eDFzX2RyaXZlcik7Ci1yZWdfMV9mYWlsZWQ6Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWRjeHhfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfYWRjeHgodm9pZCkKIHsKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4MXNfZHJpdmVyKTsKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4MnNfZHJpdmVyKTsKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4NHNfZHJpdmVyKTsKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4OHNfZHJpdmVyKTsKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGluaXRfYWRjeHgpOwpAQCAtMzIyLDggKzI1OCwzIEBACiBNT0RVTEVfQVVUSE9SKCJNYXJjIFBpZ25hdCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOYXRpb25hbCBTZW1pY29uZHVjdG9yIGFkY3h4OHN4eHggTGludXggZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLU1PRFVMRV9BTElBUygiYWRjeHgxcyIpOwotTU9EVUxFX0FMSUFTKCJhZGN4eDJzIik7Ci1NT0RVTEVfQUxJQVMoImFkY3h4NHMiKTsKLU1PRFVMRV9BTElBUygiYWRjeHg4cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDIxLmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYwppbmRleCBiMTFlMDZmLi5hZmM1OTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYwpAQCAtODMsMTYgKzgzLDE0IEBACiAKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCWNoYXIgbG93X3Bvd2VyOwkJLyogIT0wIGlmIGRldmljZSBpbiBsb3cgcG93ZXIgbW9kZSAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKLQlzOCB0ZW1wX21heFsyXTsJCS8qIFJlZ2lzdGVyIHZhbHVlcyAqLwotCXM4IHRlbXBfbWluWzJdOwotCXM4IHRlbXBbMl07CisJaW50IHRlbXBfbWF4WzJdOwkJLyogUmVnaXN0ZXIgdmFsdWVzICovCisJaW50IHRlbXBfbWluWzJdOworCWludCB0ZW1wWzJdOwogCXU4IGFsYXJtczsKIAkvKiBTcGVjaWFsIHZhbHVlcyBmb3IgQURNMTAyMyBvbmx5ICovCi0JdTggcmVtb3RlX3RlbXBfcHJlYzsKLQl1OCByZW1vdGVfdGVtcF9vc19wcmVjOwotCXU4IHJlbW90ZV90ZW1wX2h5c3RfcHJlYzsKIAl1OCByZW1vdGVfdGVtcF9vZmZzZXQ7CiAJdTggcmVtb3RlX3RlbXBfb2Zmc2V0X3ByZWM7CiB9OwpAQCAtMTQxLDcgKzEzOSw3IEBACiAJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKIAlzdHJ1Y3QgYWRtMTAyMV9kYXRhICpkYXRhID0gYWRtMTAyMV91cGRhdGVfZGV2aWNlKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMTAwMCAqIGRhdGEtPnRlbXBbaW5kZXhdKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGVtcFtpbmRleF0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE1MCw3ICsxNDgsNyBAQAogCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CiAJc3RydWN0IGFkbTEwMjFfZGF0YSAqZGF0YSA9IGFkbTEwMjFfdXBkYXRlX2RldmljZShkZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDEwMDAgKiBkYXRhLT50ZW1wX21heFtpbmRleF0pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wX21heFtpbmRleF0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE1OSw3ICsxNTcsNyBAQAogCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CiAJc3RydWN0IGFkbTEwMjFfZGF0YSAqZGF0YSA9IGFkbTEwMjFfdXBkYXRlX2RldmljZShkZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDEwMDAgKiBkYXRhLT50ZW1wX21pbltpbmRleF0pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wX21pbltpbmRleF0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yMTYsNiArMjE0LDM1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2xvd19wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhZG0xMDIxX2RhdGEgKmRhdGEgPSBhZG0xMDIxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+bG93X3Bvd2VyKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2xvd19wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhZG0xMDIxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbG93X3Bvd2VyID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKSAhPSAwOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWlmIChsb3dfcG93ZXIgIT0gZGF0YS0+bG93X3Bvd2VyKSB7CisJCWludCBjb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoCisJCQljbGllbnQsIEFETTEwMjFfUkVHX0NPTkZJR19SKTsKKwkJZGF0YS0+bG93X3Bvd2VyID0gbG93X3Bvd2VyOworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURNMTAyMV9SRUdfQ09ORklHX1csCisJCQkoY29uZmlnICYgMHhCRikgfCAobG93X3Bvd2VyIDw8IDYpKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKIAkJCSAgc2V0X3RlbXBfbWF4LCAwKTsKQEAgLTIzMyw2ICsyNjAsNyBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXMsIFNfSVJVR08sIHNob3dfYWxhcm1zLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsb3dfcG93ZXIsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2xvd19wb3dlciwgc2V0X2xvd19wb3dlcik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZG0xMDIxX2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLApAQCAtMjQ3LDYgKzI3NSw3IEBACiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2ZhdWx0LmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCSZkZXZfYXR0cl9sb3dfcG93ZXIuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC00MTIsMjUgKzQ0MSwyNyBAQAogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGFkbTEwMjEgdXBkYXRlXG4iKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCQlkYXRhLT50ZW1wW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFETTEwMjFfUkVHX1RFTVAoaSkpOwotCQkJZGF0YS0+dGVtcF9tYXhbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURNMTAyMV9SRUdfVE9TX1IoaSkpOwotCQkJZGF0YS0+dGVtcF9taW5baV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURNMTAyMV9SRUdfVEhZU1RfUihpKSk7CisJCQlkYXRhLT50ZW1wW2ldID0gMTAwMCAqCisJCQkJKHM4KSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoCisJCQkJCWNsaWVudCwgQURNMTAyMV9SRUdfVEVNUChpKSk7CisJCQlkYXRhLT50ZW1wX21heFtpXSA9IDEwMDAgKgorCQkJCShzOCkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKAorCQkJCQljbGllbnQsIEFETTEwMjFfUkVHX1RPU19SKGkpKTsKKwkJCWRhdGEtPnRlbXBfbWluW2ldID0gMTAwMCAqCisJCQkJKHM4KSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoCisJCQkJCWNsaWVudCwgQURNMTAyMV9SRUdfVEhZU1RfUihpKSk7CiAJCX0KIAkJZGF0YS0+YWxhcm1zID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQkJCUFETTEwMjFfUkVHX1NUQVRVUykgJiAweDdjOwogCQlpZiAoZGF0YS0+dHlwZSA9PSBhZG0xMDIzKSB7Ci0JCQlkYXRhLT5yZW1vdGVfdGVtcF9wcmVjID0KLQkJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURNMTAyM19SRUdfUkVNX1RFTVBfUFJFQyk7Ci0JCQlkYXRhLT5yZW1vdGVfdGVtcF9vc19wcmVjID0KLQkJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURNMTAyM19SRUdfUkVNX1RPU19QUkVDKTsKLQkJCWRhdGEtPnJlbW90ZV90ZW1wX2h5c3RfcHJlYyA9Ci0JCQkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFETTEwMjNfUkVHX1JFTV9USFlTVF9QUkVDKTsKKwkJCS8qIFRoZSBBRE0xMDIzIHByb3ZpZGVzIDMgZXh0cmEgYml0cyBvZiBwcmVjaXNpb24gZm9yCisJCQkgKiB0aGUgcmVtb3RlIHNlbnNvciBpbiBleHRyYSByZWdpc3RlcnMuICovCisJCQlkYXRhLT50ZW1wWzFdICs9IDEyNSAqIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoCisJCQkJY2xpZW50LCBBRE0xMDIzX1JFR19SRU1fVEVNUF9QUkVDKSA+PiA1KTsKKwkJCWRhdGEtPnRlbXBfbWF4WzFdICs9IDEyNSAqIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoCisJCQkJY2xpZW50LCBBRE0xMDIzX1JFR19SRU1fVE9TX1BSRUMpID4+IDUpOworCQkJZGF0YS0+dGVtcF9taW5bMV0gKz0gMTI1ICogKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgKKwkJCQljbGllbnQsIEFETTEwMjNfUkVHX1JFTV9USFlTVF9QUkVDKSA+PiA1KTsKIAkJCWRhdGEtPnJlbW90ZV90ZW1wX29mZnNldCA9CiAJCQkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQkJCUFETTEwMjNfUkVHX1JFTV9PRkZTRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDMxLmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYwppbmRleCA3ODk0NDE4Li41NjkwNTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYwpAQCAtMzcsNiArMzcsNyBAQAogI2RlZmluZSBBRE0xMDMxX1JFR19QV00JCQkoMHgyMikKICNkZWZpbmUgQURNMTAzMV9SRUdfRkFOX01JTihucikJCSgweDEwICsgKG5yKSkKIAorI2RlZmluZSBBRE0xMDMxX1JFR19URU1QX09GRlNFVChucikJKDB4MGQgKyAobnIpKQogI2RlZmluZSBBRE0xMDMxX1JFR19URU1QX01BWChucikJKDB4MTQgKyA0ICogKG5yKSkKICNkZWZpbmUgQURNMTAzMV9SRUdfVEVNUF9NSU4obnIpCSgweDE1ICsgNCAqIChucikpCiAjZGVmaW5lIEFETTEwMzFfUkVHX1RFTVBfQ1JJVChucikJKDB4MTYgKyA0ICogKG5yKSkKQEAgLTkzLDYgKzk0LDcgQEAKIAl1OCBhdXRvX3RlbXBfbWluWzNdOwogCXU4IGF1dG9fdGVtcF9vZmZbM107CiAJdTggYXV0b190ZW1wX21heFszXTsKKwlzOCB0ZW1wX29mZnNldFszXTsKIAlzOCB0ZW1wX21pblszXTsKIAlzOCB0ZW1wX21heFszXTsKIAlzOCB0ZW1wX2NyaXRbM107CkBAIC0xNDUsNiArMTQ3LDEwIEBACiAKICNkZWZpbmUgVEVNUF9GUk9NX1JFR19FWFQodmFsLCBleHQpCShURU1QX0ZST01fUkVHKHZhbCkgKyAoZXh0KSAqIDEyNSkKIAorI2RlZmluZSBURU1QX09GRlNFVF9UT19SRUcodmFsKQkJKFRFTVBfVE9fUkVHKHZhbCkgJiAweDhmKQorI2RlZmluZSBURU1QX09GRlNFVF9GUk9NX1JFRyh2YWwpCVRFTVBfRlJPTV9SRUcoKHZhbCkgPCAwID8gXAorCQkJCQkJICAgICAgKHZhbCkgfCAweDcwIDogKHZhbCkpCisKICNkZWZpbmUgRkFOX0ZST01fUkVHKHJlZywgZGl2KQkJKChyZWcpID8gKDExMjUwICogNjApIC8gKChyZWcpICogKGRpdikpIDogMCkKIAogc3RhdGljIGludCBGQU5fVE9fUkVHKGludCByZWcsIGludCBkaXYpCkBAIC01ODUsNiArNTkxLDE0IEBACiAJICAgICgoKGRhdGEtPmV4dF90ZW1wW25yXSA+PiAoKG5yIC0gMSkgKiAzKSkgJiA3KSk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUdfRVhUKGRhdGEtPnRlbXBbbnJdLCBleHQpKTsKIH0KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgYWRtMTAzMV9kYXRhICpkYXRhID0gYWRtMTAzMV91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICBURU1QX09GRlNFVF9GUk9NX1JFRyhkYXRhLT50ZW1wX29mZnNldFtucl0pKTsKK30KIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9taW4oc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNjA2LDYgKzYyMCwyNCBAQAogCXN0cnVjdCBhZG0xMDMxX2RhdGEgKmRhdGEgPSBhZG0xMDMxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wX2NyaXRbbnJdKSk7CiB9CitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkbTEwMzFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJaW50IHZhbDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJdmFsID0gU0VOU09SU19MSU1JVCh2YWwsIC0xNTAwMCwgMTUwMDApOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT50ZW1wX29mZnNldFtucl0gPSBURU1QX09GRlNFVF9UT19SRUcodmFsKTsKKwlhZG0xMDMxX3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAzMV9SRUdfVEVNUF9PRkZTRVQobnIpLAorCQkJICAgIGRhdGEtPnRlbXBfb2Zmc2V0W25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CkBAIC02NjEsNiArNjkzLDggQEAKICNkZWZpbmUgdGVtcF9yZWcob2Zmc2V0KQkJCQkJCVwKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sCQlcCiAJCXNob3dfdGVtcCwgTlVMTCwgb2Zmc2V0IC0gMSk7CQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfb2Zmc2V0LCBTX0lSVUdPIHwgU19JV1VTUiwJXAorCQlzaG93X3RlbXBfb2Zmc2V0LCBzZXRfdGVtcF9vZmZzZXQsIG9mZnNldCAtIDEpOwkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wIyNvZmZzZXQjI19taW4sIFNfSVJVR08gfCBTX0lXVVNSLAlcCiAJCXNob3dfdGVtcF9taW4sIHNldF90ZW1wX21pbiwgb2Zmc2V0IC0gMSk7CQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCVwKQEAgLTcxNCw2ICs3NDgsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfYXV0b19mYW4xX2NoYW5uZWwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKQEAgLTcyMSw2ICs3NTYsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLApAQCAtNzU3LDYgKzc5Myw3IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9hdXRvX2ZhbjJfY2hhbm5lbC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLApAQCAtOTM3LDYgKzk3NCw5IEBACiAJCQl9CiAJCQlkYXRhLT50ZW1wW2NoYW5dID0gbmV3aDsKIAorCQkJZGF0YS0+dGVtcF9vZmZzZXRbY2hhbl0gPQorCQkJICAgIGFkbTEwMzFfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJCSAgICAgICBBRE0xMDMxX1JFR19URU1QX09GRlNFVChjaGFuKSk7CiAJCQlkYXRhLT50ZW1wX21pbltjaGFuXSA9CiAJCQkgICAgYWRtMTAzMV9yZWFkX3ZhbHVlKGNsaWVudCwKIAkJCQkJICAgICAgIEFETTEwMzFfUkVHX1RFTVBfTUlOKGNoYW4pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwppbmRleCA3NTNiMzQ4Li43ZWE2YThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKKysrIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCkBAIC0xNzgsNiArMTc4LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owogc3RhdGljIHMxNiByZXN0X3g7CiBzdGF0aWMgczE2IHJlc3RfeTsKK3N0YXRpYyB1OCBiYWNrbGlnaHRfc3RhdGVbMl07CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiBzdGF0aWMgc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKmFwcGxlc21jX2lkZXY7CiAKQEAgLTQ5NywxNyArNDk5LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXBwbGVzbWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKKy8qIFN5bmNocm9uaXplIGRldmljZSB3aXRoIG1lbW9yaXplZCBiYWNrbGlnaHQgc3RhdGUgKi8KK3N0YXRpYyBpbnQgYXBwbGVzbWNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gYXBwbGVzbWNfZGV2aWNlX2luaXQoKTsKKwltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKKwlpZiAoYXBwbGVzbWNfbGlnaHQpCisJCWFwcGxlc21jX3dyaXRlX2tleShCQUNLTElHSFRfS0VZLCBiYWNrbGlnaHRfc3RhdGUsIDIpOworCW11dGV4X3VubG9jaygmYXBwbGVzbWNfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKKy8qIFJlaW5pdGlhbGl6ZSBkZXZpY2Ugb24gcmVzdW1lIGZyb20gaGliZXJuYXRpb24gKi8KK3N0YXRpYyBpbnQgYXBwbGVzbWNfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IGFwcGxlc21jX2RldmljZV9pbml0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gYXBwbGVzbWNfcG1fcmVzdW1lKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBhcHBsZXNtY19wbV9vcHMgPSB7CisJLnJlc3VtZSA9IGFwcGxlc21jX3BtX3Jlc3VtZSwKKwkucmVzdG9yZSA9IGFwcGxlc21jX3BtX3Jlc3RvcmUsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhcHBsZXNtY19kcml2ZXIgPSB7CiAJLnByb2JlID0gYXBwbGVzbWNfcHJvYmUsCi0JLnJlc3VtZSA9IGFwcGxlc21jX3Jlc3VtZSwKIAkuZHJpdmVyCT0gewogCQkubmFtZSA9ICJhcHBsZXNtYyIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmYXBwbGVzbWNfcG1fb3BzLAogCX0sCiB9OwogCkBAIC04MDQsMTcgKzgyNSwxMCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotLyogU3RvcmUgdGhlIG5leHQgYmFja2xpZ2h0IHZhbHVlIHRvIGJlIHdyaXR0ZW4gYnkgdGhlIHdvcmsgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmFja2xpZ2h0X3ZhbHVlOwotCiBzdGF0aWMgdm9pZCBhcHBsZXNtY19iYWNrbGlnaHRfc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQl1OCBidWZmZXJbMl07Ci0KIAltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKLQlidWZmZXJbMF0gPSBiYWNrbGlnaHRfdmFsdWU7Ci0JYnVmZmVyWzFdID0gMHgwMDsKLQlhcHBsZXNtY193cml0ZV9rZXkoQkFDS0xJR0hUX0tFWSwgYnVmZmVyLCAyKTsKKwlhcHBsZXNtY193cml0ZV9rZXkoQkFDS0xJR0hUX0tFWSwgYmFja2xpZ2h0X3N0YXRlLCAyKTsKIAltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOwogfQogc3RhdGljIERFQ0xBUkVfV09SSyhiYWNrbGlnaHRfd29yaywgJmFwcGxlc21jX2JhY2tsaWdodF9zZXQpOwpAQCAtODI0LDcgKzgzOCw3IEBACiB7CiAJaW50IHJldDsKIAotCWJhY2tsaWdodF92YWx1ZSA9IHZhbHVlOworCWJhY2tsaWdodF9zdGF0ZVswXSA9IHZhbHVlOwogCXJldCA9IHF1ZXVlX3dvcmsoYXBwbGVzbWNfbGVkX3dxLCAmYmFja2xpZ2h0X3dvcmspOwogCiAJaWYgKGRlYnVnICYmICghcmV0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwppbmRleCA5M2MxNzIyLi5jYWVmMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKKysrIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCkBAIC0xNTcsMTcgKzE1NywyNiBAQAogCS8qIFRoZSAxMDBDIGlzIGRlZmF1bHQgZm9yIGJvdGggbW9iaWxlIGFuZCBub24gbW9iaWxlIENQVXMgKi8KIAogCWludCB0am1heCA9IDEwMDAwMDsKLQlpbnQgaXNtb2JpbGUgPSAxOworCWludCB0am1heF9lZSA9IDg1MDAwOworCWludCB1c2Vtc3JfZWUgPSAxOwogCWludCBlcnI7CiAJdTMyIGVheCwgZWR4OwogCiAJLyogRWFybHkgY2hpcHMgaGF2ZSBubyBNU1IgZm9yIFRqTWF4ICovCiAKIAlpZiAoKGMtPng4Nl9tb2RlbCA9PSAweGYpICYmIChjLT54ODZfbWFzayA8IDQpKSB7Ci0JCWlzbW9iaWxlID0gMDsKKwkJdXNlbXNyX2VlID0gMDsKIAl9CiAKLQlpZiAoKGMtPng4Nl9tb2RlbCA+IDB4ZSkgJiYgKGlzbW9iaWxlKSkgeworCS8qIEF0b21zIHNlZW1zIHRvIGhhdmUgVGpNYXggYXQgOTBDICovCisKKwlpZiAoYy0+eDg2X21vZGVsID09IDB4MWMpIHsKKwkJdXNlbXNyX2VlID0gMDsKKwkJdGptYXggPSA5MDAwMDsKKwl9CisKKwlpZiAoKGMtPng4Nl9tb2RlbCA+IDB4ZSkgJiYgKHVzZW1zcl9lZSkpIHsKKwkJdTggcGxhdGZvcm1faWQ7CiAKIAkJLyogTm93IHdlIGNhbiBkZXRlY3QgdGhlIG1vYmlsZSBDUFUgdXNpbmcgSW50ZWwgcHJvdmlkZWQgdGFibGUKIAkJICAgaHR0cDovL3NvZnR3YXJlY29tbXVuaXR5LmludGVsLmNvbS9XaWtpL01vYmlsaXR5LzcyMC5odG0KQEAgLTE3OSwxMyArMTg4LDI5IEBACiAJCQlkZXZfd2FybihkZXYsCiAJCQkJICJVbmFibGUgdG8gYWNjZXNzIE1TUiAweDE3LCBhc3N1bWluZyBkZXNrdG9wIgogCQkJCSAiIENQVVxuIik7Ci0JCQlpc21vYmlsZSA9IDA7Ci0JCX0gZWxzZSBpZiAoIShlYXggJiAweDEwMDAwMDAwKSkgewotCQkJaXNtb2JpbGUgPSAwOworCQkJdXNlbXNyX2VlID0gMDsKKwkJfSBlbHNlIGlmIChjLT54ODZfbW9kZWwgPCAweDE3ICYmICEoZWF4ICYgMHgxMDAwMDAwMCkpIHsKKwkJCS8qIFRydXN0IGJpdCAyOCB1cCB0byBQZW5yeW4sIEkgY291bGQgbm90IGZpbmQgYW55CisJCQkgICBkb2N1bWVudGF0aW9uIG9uIHRoYXQ7IGlmIHlvdSBoYXBwZW4gdG8ga25vdworCQkJICAgc29tZW9uZSBhdCBJbnRlbCBwbGVhc2UgYXNrICovCisJCQl1c2Vtc3JfZWUgPSAwOworCQl9IGVsc2UgeworCQkJLyogUGxhdGZvcm0gSUQgYml0cyA1Mjo1MCAoRURYIHN0YXJ0cyBhdCBiaXQgMzIpICovCisJCQlwbGF0Zm9ybV9pZCA9IChlZHggPj4gMTgpICYgMHg3OworCisJCQkvKiBNb2JpbGUgUGVucnluIENQVSBzZWVtcyB0byBiZSBwbGF0Zm9ybSBJRCA3IG9yIDUKKwkJCSAgKGd1ZXNzd29yaykgKi8KKwkJCWlmICgoYy0+eDg2X21vZGVsID09IDB4MTcpICYmCisJCQkgICAgKChwbGF0Zm9ybV9pZCA9PSA1KSB8fCAocGxhdGZvcm1faWQgPT0gNykpKSB7CisJCQkJLyogSWYgTVNSIEVFIGJpdCBpcyBzZXQsIHNldCBpdCB0byA5MCBkZWdyZWVzIEMsCisJCQkJICAgb3RoZXJ3aXNlIDEwNSBkZWdyZWVzIEMgKi8KKwkJCQl0am1heF9lZSA9IDkwMDAwOworCQkJCXRqbWF4ID0gMTA1MDAwOworCQkJfQogCQl9CiAJfQogCi0JaWYgKGlzbW9iaWxlKSB7CisJaWYgKHVzZW1zcl9lZSkgewogCiAJCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGlkLCAweGVlLCAmZWF4LCAmZWR4KTsKIAkJaWYgKGVycikgewpAQCAtMTkzLDkgKzIxOCwxMSBAQAogCQkJCSAiVW5hYmxlIHRvIGFjY2VzcyBNU1IgMHhFRSwgZm9yIFRqbWF4LCBsZWZ0IgogCQkJCSAiIGF0IGRlZmF1bHQiKTsKIAkJfSBlbHNlIGlmIChlYXggJiAweDQwMDAwMDAwKSB7Ci0JCQl0am1heCA9IDg1MDAwOworCQkJdGptYXggPSB0am1heF9lZTsKIAkJfQotCX0gZWxzZSB7CisJLyogaWYgd2UgZG9udCB1c2UgbXNyIEVFIGl0IG1lYW5zIHdlIGFyZSBkZXNrdG9wIENQVSAod2l0aCBleGVjZXB0aW9uCisJICAgb2YgQXRvbSkgKi8KKwl9IGVsc2UgaWYgKHRqbWF4ID09IDEwMDAwMCkgewogCQlkZXZfd2FybihkZXYsICJVc2luZyByZWxhdGl2ZSB0ZW1wZXJhdHVyZSBzY2FsZSFcbiIpOwogCX0KIApAQCAtMjQ4LDkgKzI3NSw5IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CiAKIAkvKiByZWFkIHRoZSBzdGlsbCB1bmRvY3VtZW50ZWQgSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgaXQgZXhpc3RzCi0JICAgb24gb2xkZXIgQ1BVcyBidXQgbm90IGluIHRoaXMgcmVnaXN0ZXIgKi8KKwkgICBvbiBvbGRlciBDUFVzIGJ1dCBub3QgaW4gdGhpcyByZWdpc3RlciwgQXRvbXMgZG9uJ3QgaGF2ZSBpdCBlaXRoZXIgKi8KIAotCWlmIChjLT54ODZfbW9kZWwgPiAweGUpIHsKKwlpZiAoKGMtPng4Nl9tb2RlbCA+IDB4ZSkgJiYgKGMtPng4Nl9tb2RlbCAhPSAweDFjKSkgewogCQllcnIgPSByZG1zcl9zYWZlX29uX2NwdShkYXRhLT5pZCwgMHgxYTIsICZlYXgsICZlZHgpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQiCkBAIC00MTMsMTEgKzQ0MCwxNSBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoaSk7CiAKLQkJLyogY2hlY2sgaWYgZmFtaWx5IDYsIG1vZGVscyAweGUsIDB4ZiwgMHgxNiwgMHgxNywgMHgxQSAqLworCQkvKiBjaGVjayBpZiBmYW1pbHkgNiwgbW9kZWxzIDB4ZSAoUGVudGl1bSBNIERDKSwKKwkJICAweGYgKENvcmUgMiBEQyA2NW5tKSwgMHgxNiAoQ29yZSAyIFNDIDY1bm0pLAorCQkgIDB4MTcgKFBlbnJ5biA0NW5tKSwgMHgxYSAoTmVoYWxlbSksIDB4MWMgKEF0b20pLAorCQkgIDB4MWUgKEx5bm5maWVsZCkgKi8KIAkJaWYgKChjLT5jcHVpZF9sZXZlbCA8IDApIHx8IChjLT54ODYgIT0gMHg2KSB8fAogCQkgICAgISgoYy0+eDg2X21vZGVsID09IDB4ZSkgfHwgKGMtPng4Nl9tb2RlbCA9PSAweGYpIHx8CiAJCQkoYy0+eDg2X21vZGVsID09IDB4MTYpIHx8IChjLT54ODZfbW9kZWwgPT0gMHgxNykgfHwKLQkJCShjLT54ODZfbW9kZWwgPT0gMHgxQSkpKSB7CisJCQkoYy0+eDg2X21vZGVsID09IDB4MWEpIHx8IChjLT54ODZfbW9kZWwgPT0gMHgxYykgfHwKKwkJCShjLT54ODZfbW9kZWwgPT0gMHgxZSkpKSB7CiAKIAkJCS8qIHN1cHBvcnRlZCBDUFUgbm90IGZvdW5kLCBidXQgcmVwb3J0IHRoZSB1bmtub3duCiAJCQkgICBmYW1pbHkgNiBDUFUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKaW5kZXggOTgxNGQ1MS4uMmMyY2IxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKKysrIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKQEAgLTExMzQsNyArMTEzNCw3IEBACiAJCXJlcyA9IFBXTV9GUkVRX0ZST01fUkVHKGRhdGEtPnB3bV9mcmVxW2l4XSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1BXTV9FTkFCTEU6Ci0JCWlmIChpeCA+IDMpIHsKKwkJaWYgKGl4ID49IDMpIHsKIAkJCXJlcyA9IDE7IC8qIHB3bVs1LTZdIGhhcmQtd2lyZWQgdG8gbWFudWFsIG1vZGUgKi8KIAkJfSBlbHNlIHsKIAkJCXJlcyA9IFBXTV9FTl9GUk9NX1JFRyhkYXRhLT5wd21fY29uZmlnW2l4XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2hlci5jIGIvZHJpdmVycy9od21vbi9mc2NoZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNzBlNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2hlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjgwICswLDAgQEAKLS8qCi0gKiBmc2NoZXIuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCi0gKiBtb25pdG9yaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgUmVpbmhhcmQgTmlzc2wgPHJuaXNzbEBnbXguZGU+Ci0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotLyogCi0gKiAgZnVqaXRzdSBzaWVtZW5zIGhlcm1lcyBjaGlwLCAKLSAqICBtb2R1bGUgYmFzZWQgb24gZnNjcG9zLmMgCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhlcm1hbm4gSnVuZyA8aGVqQG9kbi5kZT4KLSAqICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPgotICogIGFuZCBQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotCi0vKgotICogQWRkcmVzc2VzIHRvIHNjYW4KLSAqLwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDczLCBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKgotICogSW5zbW9kIHBhcmFtZXRlcnMKLSAqLwotCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGZzY2hlcik7Ci0KLS8qCi0gKiBUaGUgRlNDSEVSIHJlZ2lzdGVycwotICovCi0KLS8qIGNoaXAgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgRlNDSEVSX1JFR19JREVOVF8wCQkweDAwCi0jZGVmaW5lIEZTQ0hFUl9SRUdfSURFTlRfMQkJMHgwMQotI2RlZmluZSBGU0NIRVJfUkVHX0lERU5UXzIJCTB4MDIKLSNkZWZpbmUgRlNDSEVSX1JFR19SRVZJU0lPTgkJMHgwMwotCi0vKiBnbG9iYWwgY29udHJvbCBhbmQgc3RhdHVzICovCi0jZGVmaW5lIEZTQ0hFUl9SRUdfRVZFTlRfU1RBVEUJCTB4MDQKLSNkZWZpbmUgRlNDSEVSX1JFR19DT05UUk9MCQkweDA1Ci0KLS8qIHdhdGNoZG9nICovCi0jZGVmaW5lIEZTQ0hFUl9SRUdfV0RPR19QUkVTRVQJCTB4MjgKLSNkZWZpbmUgRlNDSEVSX1JFR19XRE9HX1NUQVRFCQkweDIzCi0jZGVmaW5lIEZTQ0hFUl9SRUdfV0RPR19DT05UUk9MCQkweDIxCi0KLS8qIGZhbiAwICovCi0jZGVmaW5lIEZTQ0hFUl9SRUdfRkFOMF9NSU4JCTB4NTUKLSNkZWZpbmUgRlNDSEVSX1JFR19GQU4wX0FDVAkJMHgwZQotI2RlZmluZSBGU0NIRVJfUkVHX0ZBTjBfU1RBVEUJCTB4MGQKLSNkZWZpbmUgRlNDSEVSX1JFR19GQU4wX1JJUFBMRQkJMHgwZgotCi0vKiBmYW4gMSAqLwotI2RlZmluZSBGU0NIRVJfUkVHX0ZBTjFfTUlOCQkweDY1Ci0jZGVmaW5lIEZTQ0hFUl9SRUdfRkFOMV9BQ1QJCTB4NmIKLSNkZWZpbmUgRlNDSEVSX1JFR19GQU4xX1NUQVRFCQkweDYyCi0jZGVmaW5lIEZTQ0hFUl9SRUdfRkFOMV9SSVBQTEUJCTB4NmYKLQotLyogZmFuIDIgKi8KLSNkZWZpbmUgRlNDSEVSX1JFR19GQU4yX01JTgkJMHhiNQotI2RlZmluZSBGU0NIRVJfUkVHX0ZBTjJfQUNUCQkweGJiCi0jZGVmaW5lIEZTQ0hFUl9SRUdfRkFOMl9TVEFURQkJMHhiMgotI2RlZmluZSBGU0NIRVJfUkVHX0ZBTjJfUklQUExFCQkweGJmCi0KLS8qIHZvbHRhZ2Ugc3VwZXJ2aXNpb24gKi8KLSNkZWZpbmUgRlNDSEVSX1JFR19WT0xUXzEyCQkweDQ1Ci0jZGVmaW5lIEZTQ0hFUl9SRUdfVk9MVF81CQkweDQyCi0jZGVmaW5lIEZTQ0hFUl9SRUdfVk9MVF9CQVRUCQkweDQ4Ci0KLS8qIHRlbXBlcmF0dXJlIDAgKi8KLSNkZWZpbmUgRlNDSEVSX1JFR19URU1QMF9BQ1QJCTB4NjQKLSNkZWZpbmUgRlNDSEVSX1JFR19URU1QMF9TVEFURQkJMHg3MQotCi0vKiB0ZW1wZXJhdHVyZSAxICovCi0jZGVmaW5lIEZTQ0hFUl9SRUdfVEVNUDFfQUNUCQkweDMyCi0jZGVmaW5lIEZTQ0hFUl9SRUdfVEVNUDFfU1RBVEUJCTB4ODEKLQotLyogdGVtcGVyYXR1cmUgMiAqLwotI2RlZmluZSBGU0NIRVJfUkVHX1RFTVAyX0FDVAkJMHgzNQotI2RlZmluZSBGU0NIRVJfUkVHX1RFTVAyX1NUQVRFCQkweDkxCi0KLS8qCi0gKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KLSAqLwotCi1zdGF0aWMgaW50IGZzY2hlcl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgZnNjaGVyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwotc3RhdGljIGludCBmc2NoZXJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotc3RhdGljIHN0cnVjdCBmc2NoZXJfZGF0YSAqZnNjaGVyX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGZzY2hlcl9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLQotc3RhdGljIGludCBmc2NoZXJfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOwotc3RhdGljIGludCBmc2NoZXJfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSk7Ci0KLS8qCi0gKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKQotICovCi0gCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZnNjaGVyX2lkW10gPSB7Ci0JeyAiZnNjaGVyIiwgZnNjaGVyIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZnNjaGVyX2RyaXZlciA9IHsKLQkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gImZzY2hlciIsCi0JfSwKLQkucHJvYmUJCT0gZnNjaGVyX3Byb2JlLAotCS5yZW1vdmUJCT0gZnNjaGVyX3JlbW92ZSwKLQkuaWRfdGFibGUJPSBmc2NoZXJfaWQsCi0JLmRldGVjdAkJPSBmc2NoZXJfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAotfTsKLQotLyoKLSAqIENsaWVudCBkYXRhIChlYWNoIGNsaWVudCBnZXRzIGl0cyBvd24pCi0gKi8KLQotc3RydWN0IGZzY2hlcl9kYXRhIHsKLQlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7Ci0Jc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwotCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLwotCi0JLyogcmVnaXN0ZXIgdmFsdWVzICovCi0JdTggcmV2aXNpb247CQkvKiByZXZpc2lvbiBvZiBjaGlwICovCi0JdTggZ2xvYmFsX2V2ZW50OwkvKiBnbG9iYWwgZXZlbnQgc3RhdHVzICovCi0JdTggZ2xvYmFsX2NvbnRyb2w7CS8qIGdsb2JhbCBjb250cm9sIHJlZ2lzdGVyICovCi0JdTggd2F0Y2hkb2dbM107CQkvKiB3YXRjaGRvZyAqLwotCXU4IHZvbHRbM107CQkvKiAxMiwgNSwgYmF0dGVyeSB2b2x0YWdlICovIAotCXU4IHRlbXBfYWN0WzNdOwkJLyogdGVtcGVyYXR1cmUgKi8KLQl1OCB0ZW1wX3N0YXR1c1szXTsJLyogc3RhdHVzIG9mIHNlbnNvciAqLwotCXU4IGZhbl9hY3RbM107CQkvKiBmYW5zIHJldm9sdXRpb25zIHBlciBzZWNvbmQgKi8KLQl1OCBmYW5fc3RhdHVzWzNdOwkvKiBmYW4gc3RhdHVzICovCi0JdTggZmFuX21pblszXTsJCS8qIGZhbiBtaW4gdmFsdWUgZm9yIHJwcyAqLwotCXU4IGZhbl9yaXBwbGVbM107CS8qIGRpdmlkZXIgZm9yIHJwcyAqLwotfTsKLQotLyoKLSAqIFN5c2ZzIHN0dWZmCi0gKi8KLQotI2RlZmluZSBzeXNmc19yKGtpbmQsIHN1Yiwgb2Zmc2V0LCByZWcpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNraW5kIyNzdWIgKHN0cnVjdCBmc2NoZXJfZGF0YSAqLCBjaGFyICosIGludCk7IFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNraW5kIyNvZmZzZXQjI3N1YiAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsgXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI2tpbmQjI29mZnNldCMjc3ViIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSA9IGZzY2hlcl91cGRhdGVfZGV2aWNlKGRldik7IFwKLQlyZXR1cm4gc2hvd18jI2tpbmQjI3N1YihkYXRhLCBidWYsIChvZmZzZXQpKTsgXAotfQotCi0jZGVmaW5lIHN5c2ZzX3coa2luZCwgc3ViLCBvZmZzZXQsIHJlZykgXAotc3RhdGljIHNzaXplX3Qgc2V0XyMja2luZCMjc3ViIChzdHJ1Y3QgaTJjX2NsaWVudCAqLCBzdHJ1Y3QgZnNjaGVyX2RhdGEgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGludCwgaW50KTsgXAotc3RhdGljIHNzaXplX3Qgc2V0XyMja2luZCMjb2Zmc2V0IyNzdWIgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsgXAotc3RhdGljIHNzaXplX3Qgc2V0XyMja2luZCMjb2Zmc2V0IyNzdWIgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCi17IFwKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOyBcCi0Jc3RydWN0IGZzY2hlcl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKLQlyZXR1cm4gc2V0XyMja2luZCMjc3ViKGNsaWVudCwgZGF0YSwgYnVmLCBjb3VudCwgKG9mZnNldCksIHJlZyk7IFwKLX0KLQotI2RlZmluZSBzeXNmc19yd19uKGtpbmQsIHN1Yiwgb2Zmc2V0LCByZWcpIFwKLXN5c2ZzX3Ioa2luZCwgc3ViLCBvZmZzZXQsIHJlZykgXAotc3lzZnNfdyhraW5kLCBzdWIsIG9mZnNldCwgcmVnKSBcCi1zdGF0aWMgREVWSUNFX0FUVFIoa2luZCMjb2Zmc2V0IyNzdWIsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93XyMja2luZCMjb2Zmc2V0IyNzdWIsIHNldF8jI2tpbmQjI29mZnNldCMjc3ViKTsKLQotI2RlZmluZSBzeXNmc19ydyhraW5kLCBzdWIsIHJlZykgXAotc3lzZnNfcihraW5kLCBzdWIsIDAsIHJlZykgXAotc3lzZnNfdyhraW5kLCBzdWIsIDAsIHJlZykgXAotc3RhdGljIERFVklDRV9BVFRSKGtpbmQjI3N1YiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfIyNraW5kIyMwIyNzdWIsIHNldF8jI2tpbmQjIzAjI3N1Yik7Ci0KLSNkZWZpbmUgc3lzZnNfcm9fbihraW5kLCBzdWIsIG9mZnNldCwgcmVnKSBcCi1zeXNmc19yKGtpbmQsIHN1Yiwgb2Zmc2V0LCByZWcpIFwKLXN0YXRpYyBERVZJQ0VfQVRUUihraW5kIyNvZmZzZXQjI3N1YiwgU19JUlVHTywgc2hvd18jI2tpbmQjI29mZnNldCMjc3ViLCBOVUxMKTsKLQotI2RlZmluZSBzeXNmc19ybyhraW5kLCBzdWIsIHJlZykgXAotc3lzZnNfcihraW5kLCBzdWIsIDAsIHJlZykgXAotc3RhdGljIERFVklDRV9BVFRSKGtpbmQsIFNfSVJVR08sIHNob3dfIyNraW5kIyMwIyNzdWIsIE5VTEwpOwotCi0jZGVmaW5lIHN5c2ZzX2ZhbihvZmZzZXQsIHJlZ19zdGF0dXMsIHJlZ19taW4sIHJlZ19yaXBwbGUsIHJlZ19hY3QpIFwKLXN5c2ZzX3J3X24ocHdtLCAgICAgICAgLCBvZmZzZXQsIHJlZ19taW4pIFwKLXN5c2ZzX3J3X24oZmFuLCBfc3RhdHVzLCBvZmZzZXQsIHJlZ19zdGF0dXMpIFwKLXN5c2ZzX3J3X24oZmFuLCBfZGl2ICAgLCBvZmZzZXQsIHJlZ19yaXBwbGUpIFwKLXN5c2ZzX3JvX24oZmFuLCBfaW5wdXQgLCBvZmZzZXQsIHJlZ19hY3QpCi0KLSNkZWZpbmUgc3lzZnNfdGVtcChvZmZzZXQsIHJlZ19zdGF0dXMsIHJlZ19hY3QpIFwKLXN5c2ZzX3J3X24odGVtcCwgX3N0YXR1cywgb2Zmc2V0LCByZWdfc3RhdHVzKSBcCi1zeXNmc19yb19uKHRlbXAsIF9pbnB1dCAsIG9mZnNldCwgcmVnX2FjdCkKLSAgICAKLSNkZWZpbmUgc3lzZnNfaW4ob2Zmc2V0LCByZWdfYWN0KSBcCi1zeXNmc19yb19uKGluLCBfaW5wdXQsIG9mZnNldCwgcmVnX2FjdCkKLQotI2RlZmluZSBzeXNmc19yZXZpc2lvbihyZWdfcmV2aXNpb24pIFwKLXN5c2ZzX3JvKHJldmlzaW9uLCAsIHJlZ19yZXZpc2lvbikKLQotI2RlZmluZSBzeXNmc19hbGFybXMocmVnX2V2ZW50cykgXAotc3lzZnNfcm8oYWxhcm1zLCAsIHJlZ19ldmVudHMpCi0KLSNkZWZpbmUgc3lzZnNfY29udHJvbChyZWdfY29udHJvbCkgXAotc3lzZnNfcncoY29udHJvbCwgLCByZWdfY29udHJvbCkKLQotI2RlZmluZSBzeXNmc193YXRjaGRvZyhyZWdfY29udHJvbCwgcmVnX3N0YXR1cywgcmVnX3ByZXNldCkgXAotc3lzZnNfcncod2F0Y2hkb2csIF9jb250cm9sLCByZWdfY29udHJvbCkgXAotc3lzZnNfcncod2F0Y2hkb2csIF9zdGF0dXMgLCByZWdfc3RhdHVzKSBcCi1zeXNmc19ydyh3YXRjaGRvZywgX3ByZXNldCAsIHJlZ19wcmVzZXQpCi0KLXN5c2ZzX2ZhbigxLCBGU0NIRVJfUkVHX0ZBTjBfU1RBVEUsIEZTQ0hFUl9SRUdfRkFOMF9NSU4sCi0JICAgICBGU0NIRVJfUkVHX0ZBTjBfUklQUExFLCBGU0NIRVJfUkVHX0ZBTjBfQUNUKQotc3lzZnNfZmFuKDIsIEZTQ0hFUl9SRUdfRkFOMV9TVEFURSwgRlNDSEVSX1JFR19GQU4xX01JTiwKLQkgICAgIEZTQ0hFUl9SRUdfRkFOMV9SSVBQTEUsIEZTQ0hFUl9SRUdfRkFOMV9BQ1QpCi1zeXNmc19mYW4oMywgRlNDSEVSX1JFR19GQU4yX1NUQVRFLCBGU0NIRVJfUkVHX0ZBTjJfTUlOLAotCSAgICAgRlNDSEVSX1JFR19GQU4yX1JJUFBMRSwgRlNDSEVSX1JFR19GQU4yX0FDVCkKLQotc3lzZnNfdGVtcCgxLCBGU0NIRVJfUkVHX1RFTVAwX1NUQVRFLCBGU0NIRVJfUkVHX1RFTVAwX0FDVCkKLXN5c2ZzX3RlbXAoMiwgRlNDSEVSX1JFR19URU1QMV9TVEFURSwgRlNDSEVSX1JFR19URU1QMV9BQ1QpCi1zeXNmc190ZW1wKDMsIEZTQ0hFUl9SRUdfVEVNUDJfU1RBVEUsIEZTQ0hFUl9SRUdfVEVNUDJfQUNUKQotCi1zeXNmc19pbigwLCBGU0NIRVJfUkVHX1ZPTFRfMTIpCi1zeXNmc19pbigxLCBGU0NIRVJfUkVHX1ZPTFRfNSkKLXN5c2ZzX2luKDIsIEZTQ0hFUl9SRUdfVk9MVF9CQVRUKQotCi1zeXNmc19yZXZpc2lvbihGU0NIRVJfUkVHX1JFVklTSU9OKQotc3lzZnNfYWxhcm1zKEZTQ0hFUl9SRUdfRVZFTlRTKQotc3lzZnNfY29udHJvbChGU0NIRVJfUkVHX0NPTlRST0wpCi1zeXNmc193YXRjaGRvZyhGU0NIRVJfUkVHX1dET0dfQ09OVFJPTCwgRlNDSEVSX1JFR19XRE9HX1NUQVRFLCBGU0NIRVJfUkVHX1dET0dfUFJFU0VUKQotICAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmc2NoZXJfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9yZXZpc2lvbi5hdHRyLAotCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKLQkmZGV2X2F0dHJfY29udHJvbC5hdHRyLAotCi0JJmRldl9hdHRyX3dhdGNoZG9nX3N0YXR1cy5hdHRyLAotCSZkZXZfYXR0cl93YXRjaGRvZ19jb250cm9sLmF0dHIsCi0JJmRldl9hdHRyX3dhdGNoZG9nX3ByZXNldC5hdHRyLAotCi0JJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9pbjFfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfaW4yX2lucHV0LmF0dHIsCi0KLQkmZGV2X2F0dHJfZmFuMV9zdGF0dXMuYXR0ciwKLQkmZGV2X2F0dHJfZmFuMV9kaXYuYXR0ciwKLQkmZGV2X2F0dHJfZmFuMV9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9wd20xLmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfc3RhdHVzLmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfZGl2LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfcHdtMi5hdHRyLAotCSZkZXZfYXR0cl9mYW4zX3N0YXR1cy5hdHRyLAotCSZkZXZfYXR0cl9mYW4zX2Rpdi5hdHRyLAotCSZkZXZfYXR0cl9mYW4zX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3B3bTMuYXR0ciwKLQotCSZkZXZfYXR0cl90ZW1wMV9zdGF0dXMuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDJfc3RhdHVzLmF0dHIsCi0JJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAzX3N0YXR1cy5hdHRyLAotCSZkZXZfYXR0cl90ZW1wM19pbnB1dC5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGZzY2hlcl9ncm91cCA9IHsKLQkuYXR0cnMgPSBmc2NoZXJfYXR0cmlidXRlcywKLX07Ci0KLS8qCi0gKiBSZWFsIGNvZGUKLSAqLwotCi0vKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgZnNjaGVyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwgaW50IGtpbmQsCi0JCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7Ci0KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogRG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24gdW5sZXNzIGZvcmNlIG9yIGZvcmNlX2ZzY2hlciBwYXJhbWV0ZXIgKi8KLQlpZiAoa2luZCA8IDApIHsKLQkJaWYgKChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwKLQkJICAgICBGU0NIRVJfUkVHX0lERU5UXzApICE9IDB4NDgpCS8qICdIJyAqLwotCQkgfHwgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LAotCQkgICAgIEZTQ0hFUl9SRUdfSURFTlRfMSkgIT0gMHg0NSkJLyogJ0UnICovCi0JCSB8fCAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsCi0JCSAgICAgRlNDSEVSX1JFR19JREVOVF8yKSAhPSAweDUyKSkJLyogJ1InICovCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlzdHJsY3B5KGluZm8tPnR5cGUsICJmc2NoZXIiLCBJMkNfTkFNRV9TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZzY2hlcl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNjaGVyX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0OwotCX0KLQotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQlkYXRhLT52YWxpZCA9IDA7Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JZnNjaGVyX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwotCi0JLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZmc2NoZXJfZ3JvdXApKSkKLQkJZ290byBleGl0X2ZyZWU7Ci0KLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXhpdF9yZW1vdmVfZmlsZXM6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmZzY2hlcl9ncm91cCk7Ci1leGl0X2ZyZWU6Ci0Ja2ZyZWUoZGF0YSk7Ci1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZnNjaGVyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZmc2NoZXJfZ3JvdXApOwotCi0Ja2ZyZWUoZGF0YSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZnNjaGVyX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQotewotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAicmVhZCByZWcgMHglMDJ4XG4iLCByZWcpOwotCi0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbnQgZnNjaGVyX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCi17Ci0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJ3cml0ZSByZWcgMHglMDJ4LCB2YWwgMHglMDJ4XG4iLAotCQlyZWcsIHZhbHVlKTsKLQotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLS8qIENhbGxlZCB3aGVuIHdlIGhhdmUgZm91bmQgYSBuZXcgRlNDIEhlcm1lcy4gKi8KLXN0YXRpYyB2b2lkIGZzY2hlcl9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JLyogUmVhZCByZXZpc2lvbiBmcm9tIGNoaXAgKi8KLQlkYXRhLT5yZXZpc2lvbiA9ICBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfUkVWSVNJT04pOwotfQotCi1zdGF0aWMgc3RydWN0IGZzY2hlcl9kYXRhICpmc2NoZXJfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIDIgKiBIWikgfHwgIWRhdGEtPnZhbGlkKSB7Ci0KLQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTdGFydGluZyBmc2NoZXIgdXBkYXRlXG4iKTsKLQotCQlkYXRhLT50ZW1wX2FjdFswXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19URU1QMF9BQ1QpOwotCQlkYXRhLT50ZW1wX2FjdFsxXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19URU1QMV9BQ1QpOwotCQlkYXRhLT50ZW1wX2FjdFsyXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19URU1QMl9BQ1QpOwotCQlkYXRhLT50ZW1wX3N0YXR1c1swXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19URU1QMF9TVEFURSk7Ci0JCWRhdGEtPnRlbXBfc3RhdHVzWzFdID0gZnNjaGVyX3JlYWRfdmFsdWUoY2xpZW50LCBGU0NIRVJfUkVHX1RFTVAxX1NUQVRFKTsKLQkJZGF0YS0+dGVtcF9zdGF0dXNbMl0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfVEVNUDJfU1RBVEUpOwotCi0JCWRhdGEtPnZvbHRbMF0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfVk9MVF8xMik7Ci0JCWRhdGEtPnZvbHRbMV0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfVk9MVF81KTsKLQkJZGF0YS0+dm9sdFsyXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19WT0xUX0JBVFQpOwotCi0JCWRhdGEtPmZhbl9hY3RbMF0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfRkFOMF9BQ1QpOwotCQlkYXRhLT5mYW5fYWN0WzFdID0gZnNjaGVyX3JlYWRfdmFsdWUoY2xpZW50LCBGU0NIRVJfUkVHX0ZBTjFfQUNUKTsKLQkJZGF0YS0+ZmFuX2FjdFsyXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19GQU4yX0FDVCk7Ci0JCWRhdGEtPmZhbl9zdGF0dXNbMF0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfRkFOMF9TVEFURSk7Ci0JCWRhdGEtPmZhbl9zdGF0dXNbMV0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfRkFOMV9TVEFURSk7Ci0JCWRhdGEtPmZhbl9zdGF0dXNbMl0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfRkFOMl9TVEFURSk7Ci0JCWRhdGEtPmZhbl9taW5bMF0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfRkFOMF9NSU4pOwotCQlkYXRhLT5mYW5fbWluWzFdID0gZnNjaGVyX3JlYWRfdmFsdWUoY2xpZW50LCBGU0NIRVJfUkVHX0ZBTjFfTUlOKTsKLQkJZGF0YS0+ZmFuX21pblsyXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19GQU4yX01JTik7Ci0JCWRhdGEtPmZhbl9yaXBwbGVbMF0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfRkFOMF9SSVBQTEUpOwotCQlkYXRhLT5mYW5fcmlwcGxlWzFdID0gZnNjaGVyX3JlYWRfdmFsdWUoY2xpZW50LCBGU0NIRVJfUkVHX0ZBTjFfUklQUExFKTsKLQkJZGF0YS0+ZmFuX3JpcHBsZVsyXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19GQU4yX1JJUFBMRSk7Ci0KLQkJZGF0YS0+d2F0Y2hkb2dbMF0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfV0RPR19QUkVTRVQpOwotCQlkYXRhLT53YXRjaGRvZ1sxXSA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwgRlNDSEVSX1JFR19XRE9HX1NUQVRFKTsKLQkJZGF0YS0+d2F0Y2hkb2dbMl0gPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfV0RPR19DT05UUk9MKTsKLQotCQlkYXRhLT5nbG9iYWxfZXZlbnQgPSBmc2NoZXJfcmVhZF92YWx1ZShjbGllbnQsIEZTQ0hFUl9SRUdfRVZFTlRfU1RBVEUpOwotCQlkYXRhLT5nbG9iYWxfY29udHJvbCA9IGZzY2hlcl9yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCQlGU0NIRVJfUkVHX0NPTlRST0wpOwotCi0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gMTsgICAgICAgICAgICAgICAgIAotCX0KLQotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLQotCi0jZGVmaW5lIEZBTl9JTkRFWF9GUk9NX05VTShucikJKChucikgLSAxKQotCi1zdGF0aWMgc3NpemVfdCBzZXRfZmFuX3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEsCi0JCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yLCBpbnQgcmVnKQotewotCS8qIGJpdHMgMC4uMSwgMy4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwNCAqLyAgCi0JdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiAweDA0OwotCQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5mYW5fc3RhdHVzW0ZBTl9JTkRFWF9GUk9NX05VTShucildICY9IH52OwotCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgdik7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9zdGF0dXMoc3RydWN0IGZzY2hlcl9kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQkvKiBiaXRzIDAuLjEsIDMuLjcgcmVzZXJ2ZWQgPT4gbWFzayB3aXRoIDB4MDQgKi8gIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5mYW5fc3RhdHVzW0ZBTl9JTkRFWF9GUk9NX05VTShucildICYgMHgwNCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9wd20oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGZzY2hlcl9kYXRhICpkYXRhLAotCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGludCBuciwgaW50IHJlZykKLXsKLQl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5mYW5fbWluW0ZBTl9JTkRFWF9GUk9NX05VTShucildID0gdiA+IDB4ZmYgPyAweGZmIDogdjsKLQlmc2NoZXJfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPmZhbl9taW5bRkFOX0lOREVYX0ZST01fTlVNKG5yKV0pOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19wd20oc3RydWN0IGZzY2hlcl9kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+ZmFuX21pbltGQU5fSU5ERVhfRlJPTV9OVU0obnIpXSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9mYW5fZGl2KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSwKLQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIsIGludCByZWcpCi17Ci0JLyogc3VwcG9ydGVkIHZhbHVlczogMiwgNCwgOCAqLwotCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCi0Jc3dpdGNoICh2KSB7Ci0JY2FzZSAyOiB2ID0gMTsgYnJlYWs7Ci0JY2FzZSA0OiB2ID0gMjsgYnJlYWs7Ci0JY2FzZSA4OiB2ID0gMzsgYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYW5fZGl2IHZhbHVlICVsZCBub3QgIgotCQkJICJzdXBwb3J0ZWQuIENob29zZSBvbmUgb2YgMiwgNCBvciA4IVxuIiwgdik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCS8qIGJpdHMgMi4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwMyAqLwotCWRhdGEtPmZhbl9yaXBwbGVbRkFOX0lOREVYX0ZST01fTlVNKG5yKV0gJj0gfjB4MDM7Ci0JZGF0YS0+ZmFuX3JpcHBsZVtGQU5fSU5ERVhfRlJPTV9OVU0obnIpXSB8PSB2OwotCi0JZnNjaGVyX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBkYXRhLT5mYW5fcmlwcGxlW0ZBTl9JTkRFWF9GUk9NX05VTShucildKTsKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfZmFuX2RpdihzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCS8qIGJpdHMgMi4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwMyAqLyAgCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIDEgPDwgKGRhdGEtPmZhbl9yaXBwbGVbRkFOX0lOREVYX0ZST01fTlVNKG5yKV0gJiAweDAzKSk7Ci19Ci0KLSNkZWZpbmUgUlBNX0ZST01fUkVHKHZhbCkJKHZhbCo2MCkKLQotc3RhdGljIHNzaXplX3Qgc2hvd19mYW5faW5wdXQgKHN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSwgY2hhciAqYnVmLCBpbnQgbnIpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIFJQTV9GUk9NX1JFRyhkYXRhLT5mYW5fYWN0W0ZBTl9JTkRFWF9GUk9NX05VTShucildKSk7Ci19Ci0KLQotCi0jZGVmaW5lIFRFTVBfSU5ERVhfRlJPTV9OVU0obnIpCQkoKG5yKSAtIDEpCi0KLXN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEsCi0JCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGludCBuciwgaW50IHJlZykKLXsKLQkvKiBiaXRzIDIuLjcgcmVzZXJ2ZWQsIDAgcmVhZCBvbmx5ID0+IG1hc2sgd2l0aCAweDAyICovICAKLQl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4MDI7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+dGVtcF9zdGF0dXNbVEVNUF9JTkRFWF9GUk9NX05VTShucildICY9IH52OwotCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgdik7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfc3RhdHVzKHN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSwgY2hhciAqYnVmLCBpbnQgbnIpCi17Ci0JLyogYml0cyAyLi43IHJlc2VydmVkID0+IG1hc2sgd2l0aCAweDAzICovCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPnRlbXBfc3RhdHVzW1RFTVBfSU5ERVhfRlJPTV9OVU0obnIpXSAmIDB4MDMpOwotfQotCi0jZGVmaW5lIFRFTVBfRlJPTV9SRUcodmFsKQkoKCh2YWwpIC0gMTI4KSAqIDEwMDApCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9pbnB1dChzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXBfYWN0W1RFTVBfSU5ERVhfRlJPTV9OVU0obnIpXSkpOwotfQotCi0vKgotICogVGhlIGZpbmFsIGNvbnZlcnNpb24gaXMgc3BlY2lmaWVkIGluIHNlbnNvcnMuY29uZiwgYXMgaXQgZGVwZW5kcyBvbgotICogbWFpbmJvYXJkIHNwZWNpZmljIHZhbHVlcy4gV2UgZXhwb3J0IHRoZSByZWdpc3RlcnMgY29udGVudHMgYXMKLSAqIHBzZXVkby1odW5kcmVkdGhzLW9mLVZvbHRzIChyYW5nZSAwViAtIDIuNTVWKS4gTm90IHRoYXQgaXQgbWFrZXMgbXVjaAotICogc2Vuc2UgcGVyIHNlLCBidXQgaXQgbWluaW1pemVzIHRoZSBjb252ZXJzaW9ucyBjb3VudCBhbmQga2VlcHMgdGhlCi0gKiB2YWx1ZXMgd2l0aGluIGEgdXN1YWwgcmFuZ2UuCi0gKi8KLSNkZWZpbmUgVk9MVF9GUk9NX1JFRyh2YWwpCSgodmFsKSAqIDEwKQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2luX2lucHV0KHN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSwgY2hhciAqYnVmLCBpbnQgbnIpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIFZPTFRfRlJPTV9SRUcoZGF0YS0+dm9sdFtucl0pKTsKLX0KLQotCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcmV2aXNpb24oc3RydWN0IGZzY2hlcl9kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+cmV2aXNpb24pOwotfQotCi0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXMoc3RydWN0IGZzY2hlcl9kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQkvKiBiaXRzIDIsIDUuLjYgcmVzZXJ2ZWQgPT4gbWFzayB3aXRoIDB4OWIgKi8KLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+Z2xvYmFsX2V2ZW50ICYgMHg5Yik7Ci19Ci0KLQotCi1zdGF0aWMgc3NpemVfdCBzZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEsCi0JCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yLCBpbnQgcmVnKQotewotCS8qIGJpdHMgMS4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwMSAqLyAgCi0JdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiAweDAxOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPmdsb2JhbF9jb250cm9sID0gdjsKLQlmc2NoZXJfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIHYpOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19jb250cm9sKHN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSwgY2hhciAqYnVmLCBpbnQgbnIpCi17Ci0JLyogYml0cyAxLi43IHJlc2VydmVkID0+IG1hc2sgd2l0aCAweDAxICovCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPmdsb2JhbF9jb250cm9sICYgMHgwMSk7Ci19Ci0KLQotCi1zdGF0aWMgc3NpemVfdCBzZXRfd2F0Y2hkb2dfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QKLQkJCQkgICAgZnNjaGVyX2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJCSAgICBpbnQgbnIsIGludCByZWcpCi17Ci0JLyogYml0cyAwLi4zIHJlc2VydmVkID0+IG1hc2sgd2l0aCAweGYwICovICAKLQl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4ZjA7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+d2F0Y2hkb2dbMl0gJj0gfjB4ZjA7Ci0JZGF0YS0+d2F0Y2hkb2dbMl0gfD0gdjsKLQlmc2NoZXJfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPndhdGNoZG9nWzJdKTsKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfd2F0Y2hkb2dfY29udHJvbChzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCS8qIGJpdHMgMC4uMyByZXNlcnZlZCwgYml0IDUgd3JpdGUgb25seSA9PiBtYXNrIHdpdGggMHhkMCAqLwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT53YXRjaGRvZ1syXSAmIDB4ZDApOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfd2F0Y2hkb2dfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSwKLQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yLCBpbnQgcmVnKQotewotCS8qIGJpdHMgMCwgMi4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwMiAqLyAgCi0JdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiAweDAyOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPndhdGNoZG9nWzFdICY9IH52OwotCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgdik7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3dhdGNoZG9nX3N0YXR1cyhzdHJ1Y3QgZnNjaGVyX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCS8qIGJpdHMgMCwgMi4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwMiAqLwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT53YXRjaGRvZ1sxXSAmIDB4MDIpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfd2F0Y2hkb2dfcHJlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSwKLQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yLCBpbnQgcmVnKQotewotCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApICYgMHhmZjsKLQkKLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+d2F0Y2hkb2dbMF0gPSB2OwotCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+d2F0Y2hkb2dbMF0pOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd193YXRjaGRvZ19wcmVzZXQoc3RydWN0IGZzY2hlcl9kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+d2F0Y2hkb2dbMF0pOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzZW5zb3JzX2ZzY2hlcl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZmc2NoZXJfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHNlbnNvcnNfZnNjaGVyX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZnNjaGVyX2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BVVRIT1IoIlJlaW5oYXJkIE5pc3NsIDxybmlzc2xAZ214LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJGU0MgSGVybWVzIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfaW5pdChzZW5zb3JzX2ZzY2hlcl9pbml0KTsKLW1vZHVsZV9leGl0KHNlbnNvcnNfZnNjaGVyX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mc2Nwb3MuYyBiL2RyaXZlcnMvaHdtb24vZnNjcG9zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhN2JjZjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9od21vbi9mc2Nwb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi0vKgotCWZzY3Bvcy5jIC0gS2VybmVsIG1vZHVsZSBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZyB3aXRoIEZTQyBQb3NlaWRvbiBjaGlwcwotCUNvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBTdGVmYW4gT3R0IDxzdGVmYW5AZGVzaXJlLmNoPgotCi0JVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0JKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0JTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0JR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0JYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLQlGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0KLS8qCi0JZnVqaXRzdSBzaWVtZW5zIHBvc2VpZG9uIGNoaXAsCi0JbW9kdWxlIGJhc2VkIG9uIHRoZSBvbGQgZnNjcG9zIG1vZHVsZSBieSBIZXJtYW5uIEp1bmcgPGhlakBvZG4uZGU+IGFuZAotCXRoZSBmc2NoZXIgbW9kdWxlIGJ5IFJlaW5oYXJkIE5pc3NsIDxybmlzc2xAZ214LmRlPgotCi0Jb3JpZ2luYWwgbW9kdWxlIGJhc2VkIG9uIGxtODAuYwotCUNvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+Ci0JYW5kIFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4KLQotCVRoYW5rcyB0byBKZWFuIERlbHZhcmUgZm9yIHJldmlld2luZyBteSBjb2RlIGFuZCBzdWdnZXN0aW5nIGEgbG90IG9mCi0JaW1wcm92ZW1lbnRzLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotCi0vKgotICogQWRkcmVzc2VzIHRvIHNjYW4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg3MywgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyoKLSAqIEluc21vZCBwYXJhbWV0ZXJzCi0gKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEoZnNjcG9zKTsKLQotLyoKLSAqIFRoZSBGU0NQT1MgcmVnaXN0ZXJzCi0gKi8KLQotLyogY2hpcCBpZGVudGlmaWNhdGlvbiAqLwotI2RlZmluZSBGU0NQT1NfUkVHX0lERU5UXzAJCTB4MDAKLSNkZWZpbmUgRlNDUE9TX1JFR19JREVOVF8xCQkweDAxCi0jZGVmaW5lIEZTQ1BPU19SRUdfSURFTlRfMgkJMHgwMgotI2RlZmluZSBGU0NQT1NfUkVHX1JFVklTSU9OCQkweDAzCi0KLS8qIGdsb2JhbCBjb250cm9sIGFuZCBzdGF0dXMgKi8KLSNkZWZpbmUgRlNDUE9TX1JFR19FVkVOVF9TVEFURQkJMHgwNAotI2RlZmluZSBGU0NQT1NfUkVHX0NPTlRST0wJCTB4MDUKLQotLyogd2F0Y2hkb2cgKi8KLSNkZWZpbmUgRlNDUE9TX1JFR19XRE9HX1BSRVNFVAkJMHgyOAotI2RlZmluZSBGU0NQT1NfUkVHX1dET0dfU1RBVEUJCTB4MjMKLSNkZWZpbmUgRlNDUE9TX1JFR19XRE9HX0NPTlRST0wJCTB4MjEKLQotLyogdm9sdGFnZXMgKi8KLSNkZWZpbmUgRlNDUE9TX1JFR19WT0xUXzEyCQkweDQ1Ci0jZGVmaW5lIEZTQ1BPU19SRUdfVk9MVF81CQkweDQyCi0jZGVmaW5lIEZTQ1BPU19SRUdfVk9MVF9CQVRUCQkweDQ4Ci0KLS8qIGZhbnMgLSB0aGUgY2hpcCBkb2VzIG5vdCBzdXBwb3J0IG1pbmltdW0gc3BlZWQgZm9yIGZhbjIgKi8KLXN0YXRpYyB1OCBGU0NQT1NfUkVHX1BXTVtdID0geyAweDU1LCAweDY1IH07Ci1zdGF0aWMgdTggRlNDUE9TX1JFR19GQU5fQUNUW10gPSB7IDB4MGUsIDB4NmIsIDB4YWIgfTsKLXN0YXRpYyB1OCBGU0NQT1NfUkVHX0ZBTl9TVEFURVtdID0geyAweDBkLCAweDYyLCAweGEyIH07Ci1zdGF0aWMgdTggRlNDUE9TX1JFR19GQU5fUklQUExFW10gPSB7IDB4MGYsIDB4NmYsIDB4YWYgfTsKLQotLyogdGVtcGVyYXR1cmVzICovCi1zdGF0aWMgdTggRlNDUE9TX1JFR19URU1QX0FDVFtdID0geyAweDY0LCAweDMyLCAweDM1IH07Ci1zdGF0aWMgdTggRlNDUE9TX1JFR19URU1QX1NUQVRFW10gPSB7IDB4NzEsIDB4ODEsIDB4OTEgfTsKLQotLyoKLSAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgotICovCi1zdGF0aWMgaW50IGZzY3Bvc19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgZnNjcG9zX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwotc3RhdGljIGludCBmc2Nwb3NfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotCi1zdGF0aWMgaW50IGZzY3Bvc19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZyk7Ci1zdGF0aWMgaW50IGZzY3Bvc193cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKTsKLXN0YXRpYyBzdHJ1Y3QgZnNjcG9zX2RhdGEgKmZzY3Bvc191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBmc2Nwb3NfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2Zhbl9hbGFybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbnIpOwotCi0vKgotICogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGZzY3Bvc19pZFtdID0gewotCXsgImZzY3BvcyIsIGZzY3BvcyB9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGZzY3Bvc19kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJmc2Nwb3MiLAotCX0sCi0JLnByb2JlCQk9IGZzY3Bvc19wcm9iZSwKLQkucmVtb3ZlCQk9IGZzY3Bvc19yZW1vdmUsCi0JLmlkX3RhYmxlCT0gZnNjcG9zX2lkLAotCS5kZXRlY3QJCT0gZnNjcG9zX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKLX07Ci0KLS8qCi0gKiBDbGllbnQgZGF0YSAoZWFjaCBjbGllbnQgZ2V0cyBpdHMgb3duKQotICovCi1zdHJ1Y3QgZnNjcG9zX2RhdGEgewotCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKLQlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7Ci0JY2hhciB2YWxpZDsgCQkvKiAwIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KLQotCS8qIHJlZ2lzdGVyIHZhbHVlcyAqLwotCXU4IHJldmlzaW9uOwkJLyogcmV2aXNpb24gb2YgY2hpcCAqLwotCXU4IGdsb2JhbF9ldmVudDsJLyogZ2xvYmFsIGV2ZW50IHN0YXR1cyAqLwotCXU4IGdsb2JhbF9jb250cm9sOwkvKiBnbG9iYWwgY29udHJvbCByZWdpc3RlciAqLwotCXU4IHdkb2dfY29udHJvbDsJLyogd2F0Y2hkb2cgY29udHJvbCAqLwotCXU4IHdkb2dfc3RhdGU7CQkvKiB3YXRjaGRvZyBzdGF0dXMgKi8KLQl1OCB3ZG9nX3ByZXNldDsJCS8qIHdhdGNoZG9nIHByZXNldCAqLwotCXU4IHZvbHRbM107CQkvKiAxMiwgNSwgYmF0dGVyeSBjdXJyZW50ICovCi0JdTggdGVtcF9hY3RbM107CQkvKiB0ZW1wZXJhdHVyZSAqLwotCXU4IHRlbXBfc3RhdHVzWzNdOwkvKiBzdGF0dXMgb2Ygc2Vuc29yICovCi0JdTggZmFuX2FjdFszXTsJCS8qIGZhbnMgcmV2b2x1dGlvbnMgcGVyIHNlY29uZCAqLwotCXU4IGZhbl9zdGF0dXNbM107CS8qIGZhbiBzdGF0dXMgKi8KLQl1OCBwd21bMl07CQkvKiBmYW4gbWluIHZhbHVlIGZvciBycHMgKi8KLQl1OCBmYW5fcmlwcGxlWzNdOwkvKiBkaXZpZGVyIGZvciBycHMgKi8KLX07Ci0KLS8qIFRlbXBlcmF0dXJlICovCi0jZGVmaW5lIFRFTVBfRlJPTV9SRUcodmFsKQkoKCh2YWwpIC0gMTI4KSAqIDEwMDApCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9pbnB1dChzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXBfYWN0W25yIC0gMV0pKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX3N0YXR1cyhzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCS8qIGJpdHMgMi4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwMyAqLwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT50ZW1wX3N0YXR1c1tuciAtIDFdICYgMHgwMyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9yZXNldChzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZnNjcG9zX2RhdGEKLQkJCSpkYXRhLCBjb25zdCBjaGFyICpidWYsCXNpemVfdCBjb3VudCwgaW50IG5yLCBpbnQgcmVnKQotewotCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCWlmICh2ICE9IDEpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ0ZW1wX3Jlc2V0IHZhbHVlICVsZCBub3Qgc3VwcG9ydGVkLiAiCi0JCQkJCSJVc2UgMSB0byByZXNldCB0aGUgYWxhcm0hXG4iLCB2KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiWW91IHVzZWQgdGhlIHRlbXBfcmVzZXQgZmVhdHVyZSB3aGljaCBoYXMgbm90ICIKLQkJCQkiYmVlbiBwcm9wbGVybHkgdGVzdGVkLiBQbGVhc2UgcmVwb3J0IHlvdXIgIgotCQkJCSJleHBlcmllbmNlIHRvIHRoZSBtb2R1bGUgYXV0aG9yLlxuIik7Ci0KLQkvKiBTdXBwb3J0ZWQgdmFsdWU6IDIgKGNsZWFycyB0aGUgc3RhdHVzKSAqLwotCWZzY3Bvc193cml0ZV92YWx1ZShjbGllbnQsIEZTQ1BPU19SRUdfVEVNUF9TVEFURVtuciAtIDFdLCAyKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIEZhbnMgKi8KLSNkZWZpbmUgUlBNX0ZST01fUkVHKHZhbCkJKCh2YWwpICogNjApCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfZmFuX3N0YXR1cyhzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IG5yKQotewotCS8qIGJpdHMgMC4uMSwgMy4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwNCAqLwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5mYW5fc3RhdHVzW25yIC0gMV0gJiAweDA0KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19mYW5faW5wdXQoc3RydWN0IGZzY3Bvc19kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgUlBNX0ZST01fUkVHKGRhdGEtPmZhbl9hY3RbbnIgLSAxXSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9yaXBwbGUoc3RydWN0IGZzY3Bvc19kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQkvKiBiaXRzIDIuLjcgcmVzZXJ2ZWQgPT4gbWFzayB3aXRoIDB4MDMgKi8KLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+ZmFuX3JpcHBsZVtuciAtIDFdICYgMHgwMyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9mYW5fcmlwcGxlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc2Nwb3NfZGF0YQotCQkJKmRhdGEsIGNvbnN0IGNoYXIgKmJ1ZiwJc2l6ZV90IGNvdW50LCBpbnQgbnIsIGludCByZWcpCi17Ci0JLyogc3VwcG9ydGVkIHZhbHVlczogMiwgNCwgOCAqLwotCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCi0Jc3dpdGNoICh2KSB7Ci0JCWNhc2UgMjogdiA9IDE7IGJyZWFrOwotCQljYXNlIDQ6IHYgPSAyOyBicmVhazsKLQkJY2FzZSA4OiB2ID0gMzsgYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYW5fcmlwcGxlIHZhbHVlICVsZCBub3Qgc3VwcG9ydGVkLiAiCi0JCQkJCSJNdXN0IGJlIG9uZSBvZiAyLCA0IG9yIDghXG4iLCB2KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQkvKiBiaXRzIDIuLjcgcmVzZXJ2ZWQgPT4gbWFzayB3aXRoIDB4MDMgKi8KLQlkYXRhLT5mYW5fcmlwcGxlW25yIC0gMV0gJj0gfjB4MDM7Ci0JZGF0YS0+ZmFuX3JpcHBsZVtuciAtIDFdIHw9IHY7Ci0JCi0JZnNjcG9zX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBkYXRhLT5mYW5fcmlwcGxlW25yIC0gMV0pOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19wd20oc3RydWN0IGZzY3Bvc19kYXRhICpkYXRhLCBjaGFyICpidWYsIGludCBucikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+cHdtW25yIC0gMV0pOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfcHdtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YSwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yLCBpbnQgcmVnKQotewotCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCi0JLyogUmFuZ2U6IDAuLjI1NSAqLwotCWlmICh2IDwgMCkgdiA9IDA7Ci0JaWYgKHYgPiAyNTUpIHYgPSAyNTU7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+cHdtW25yIC0gMV0gPSB2OwotCWZzY3Bvc193cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+cHdtW25yIC0gMV0pOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHZvaWQgcmVzZXRfZmFuX2FsYXJtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBucikKLXsKLQlmc2Nwb3Nfd3JpdGVfdmFsdWUoY2xpZW50LCBGU0NQT1NfUkVHX0ZBTl9TVEFURVtucl0sIDQpOwotfQotCi0vKiBWb2x0cyAqLwotI2RlZmluZSBWT0xUX0ZST01fUkVHKHZhbCwgbXVsdCkJKCh2YWwpICogKG11bHQpIC8gMjU1KQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3ZvbHRfMTIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YSA9IGZzY3Bvc191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIFZPTFRfRlJPTV9SRUcoZGF0YS0+dm9sdFswXSwgMTQyMDApKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd192b2x0XzUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YSA9IGZzY3Bvc191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIFZPTFRfRlJPTV9SRUcoZGF0YS0+dm9sdFsxXSwgNjYwMCkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3ZvbHRfYmF0dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGZzY3Bvc19kYXRhICpkYXRhID0gZnNjcG9zX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgVk9MVF9GUk9NX1JFRyhkYXRhLT52b2x0WzJdLCAzMzAwKSk7Ci19Ci0KLS8qIFdhdGNoZG9nICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3dkb2dfY29udHJvbChzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZikKLXsKLQkvKiBiaXRzIDAuLjMgcmVzZXJ2ZWQsIGJpdCA2IHdyaXRlIG9ubHkgPT4gbWFzayB3aXRoIDB4YjAgKi8KLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+d2RvZ19jb250cm9sICYgMHhiMCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF93ZG9nX2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGZzY3Bvc19kYXRhCi0JCQkJKmRhdGEsIGNvbnN0IGNoYXIgKmJ1ZiwJc2l6ZV90IGNvdW50LCBpbnQgcmVnKQotewotCS8qIGJpdHMgMC4uMyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHhmMCAqLwotCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApICYgMHhmMDsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT53ZG9nX2NvbnRyb2wgJj0gfjB4ZjA7Ci0JZGF0YS0+d2RvZ19jb250cm9sIHw9IHY7Ci0JZnNjcG9zX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBkYXRhLT53ZG9nX2NvbnRyb2wpOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd193ZG9nX3N0YXRlKHN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YSwgY2hhciAqYnVmKQotewotCS8qIGJpdHMgMCwgMi4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwMiAqLwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT53ZG9nX3N0YXRlICYgMHgwMik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF93ZG9nX3N0YXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc2Nwb3NfZGF0YQotCQkJCSpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IHJlZykKLXsKLQl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4MDI7Ci0KLQkvKiBWYWxpZCB2YWx1ZXM6IDIgKGNsZWFyKSAqLwotCWlmICh2ICE9IDIpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ3ZG9nX3N0YXRlIHZhbHVlICVsZCBub3Qgc3VwcG9ydGVkLiAiCi0JCQkJCSJNdXN0IGJlIDIgdG8gY2xlYXIgdGhlIHN0YXRlIVxuIiwgdik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT53ZG9nX3N0YXRlICY9IH52OwotCWZzY3Bvc193cml0ZV92YWx1ZShjbGllbnQsIHJlZywgdik7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3dkb2dfcHJlc2V0KHN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YSwgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT53ZG9nX3ByZXNldCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF93ZG9nX3ByZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZnNjcG9zX2RhdGEKLQkJCQkqZGF0YSwgY29uc3QgY2hhciAqYnVmLAlzaXplX3QgY291bnQsIGludCByZWcpCi17Ci0JdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiAweGZmOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPndkb2dfcHJlc2V0ID0gdjsKLQlmc2Nwb3Nfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPndkb2dfcHJlc2V0KTsKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIEV2ZW50ICovCi1zdGF0aWMgc3NpemVfdCBzaG93X2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQkvKiBiaXRzIDUuLjcgcmVzZXJ2ZWQgPT4gbWFzayB3aXRoIDB4MWYgKi8KLQlzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEgPSBmc2Nwb3NfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5nbG9iYWxfZXZlbnQgJiAweDliKTsKLX0KLQotLyoKLSAqIFN5c2ZzIHN0dWZmCi0gKi8KLSNkZWZpbmUgY3JlYXRlX2dldHRlcihraW5kLCBzdWIpIFwKLQlzdGF0aWMgc3NpemVfdCBzeXNmc19zaG93XyMja2luZCMjc3ViKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAotCXsgXAotCQlzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEgPSBmc2Nwb3NfdXBkYXRlX2RldmljZShkZXYpOyBcCi0JCXJldHVybiBzaG93XyMja2luZCMjc3ViKGRhdGEsIGJ1Zik7IFwKLQl9Ci0KLSNkZWZpbmUgY3JlYXRlX2dldHRlcl9uKGtpbmQsIG9mZnNldCwgc3ViKSBcCi0Jc3RhdGljIHNzaXplX3Qgc3lzZnNfc2hvd18jI2tpbmQjI29mZnNldCMjc3ViKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXJcCi0JCQkJCQkJCSAJKmJ1ZikgXAotCXsgXAotCQlzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEgPSBmc2Nwb3NfdXBkYXRlX2RldmljZShkZXYpOyBcCi0JCXJldHVybiBzaG93XyMja2luZCMjc3ViKGRhdGEsIGJ1Ziwgb2Zmc2V0KTsgXAotCX0KLQotI2RlZmluZSBjcmVhdGVfc2V0dGVyKGtpbmQsIHN1YiwgcmVnKSBcCi0Jc3RhdGljIHNzaXplX3Qgc3lzZnNfc2V0XyMja2luZCMjc3ViIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyIFwKLQkJCQkJCQkqYnVmLCBzaXplX3QgY291bnQpIFwKLQl7IFwKLQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAotCQlzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAotCQlyZXR1cm4gc2V0XyMja2luZCMjc3ViKGNsaWVudCwgZGF0YSwgYnVmLCBjb3VudCwgcmVnKTsgXAotCX0KLQotI2RlZmluZSBjcmVhdGVfc2V0dGVyX24oa2luZCwgb2Zmc2V0LCBzdWIsIHJlZykgXAotCXN0YXRpYyBzc2l6ZV90IHN5c2ZzX3NldF8jI2tpbmQjI29mZnNldCMjc3ViIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCi0JeyBcCi0JCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKLQkJc3RydWN0IGZzY3Bvc19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKLQkJcmV0dXJuIHNldF8jI2tpbmQjI3N1YihjbGllbnQsIGRhdGEsIGJ1ZiwgY291bnQsIG9mZnNldCwgcmVnKTtcCi0JfQotCi0jZGVmaW5lIGNyZWF0ZV9zeXNmc19kZXZpY2Vfcm8oa2luZCwgc3ViLCBvZmZzZXQpIFwKLQlzdGF0aWMgREVWSUNFX0FUVFIoa2luZCMjb2Zmc2V0IyNzdWIsIFNfSVJVR08sIFwKLQkJCQkJc3lzZnNfc2hvd18jI2tpbmQjI29mZnNldCMjc3ViLCBOVUxMKTsKLQotI2RlZmluZSBjcmVhdGVfc3lzZnNfZGV2aWNlX3J3KGtpbmQsIHN1Yiwgb2Zmc2V0KSBcCi0Jc3RhdGljIERFVklDRV9BVFRSKGtpbmQjI29mZnNldCMjc3ViLCBTX0lSVUdPIHwgU19JV1VTUiwgXAotCQlzeXNmc19zaG93XyMja2luZCMjb2Zmc2V0IyNzdWIsIHN5c2ZzX3NldF8jI2tpbmQjI29mZnNldCMjc3ViKTsKLQotI2RlZmluZSBzeXNmc19yb19uKGtpbmQsIHN1Yiwgb2Zmc2V0KSBcCi0JY3JlYXRlX2dldHRlcl9uKGtpbmQsIG9mZnNldCwgc3ViKTsgXAotCWNyZWF0ZV9zeXNmc19kZXZpY2Vfcm8oa2luZCwgc3ViLCBvZmZzZXQpOwotCi0jZGVmaW5lIHN5c2ZzX3J3X24oa2luZCwgc3ViLCBvZmZzZXQsIHJlZykgXAotCWNyZWF0ZV9nZXR0ZXJfbihraW5kLCBvZmZzZXQsIHN1Yik7IFwKLQljcmVhdGVfc2V0dGVyX24oa2luZCwgb2Zmc2V0LCBzdWIsIHJlZyk7IFwKLQljcmVhdGVfc3lzZnNfZGV2aWNlX3J3KGtpbmQsIHN1Yiwgb2Zmc2V0KTsKLQotI2RlZmluZSBzeXNmc19ydyhraW5kLCBzdWIsIHJlZykgXAotCWNyZWF0ZV9nZXR0ZXIoa2luZCwgc3ViKTsgXAotCWNyZWF0ZV9zZXR0ZXIoa2luZCwgc3ViLCByZWcpOyBcCi0JY3JlYXRlX3N5c2ZzX2RldmljZV9ydyhraW5kLCBzdWIsKTsKLQotI2RlZmluZSBzeXNmc19mYW5fd2l0aF9taW4ob2Zmc2V0LCByZWdfc3RhdHVzLCByZWdfcmlwcGxlLCByZWdfbWluKSBcCi0Jc3lzZnNfZmFuKG9mZnNldCwgcmVnX3N0YXR1cywgcmVnX3JpcHBsZSk7IFwKLQlzeXNmc19yd19uKHB3bSwsIG9mZnNldCwgcmVnX21pbik7Ci0KLSNkZWZpbmUgc3lzZnNfZmFuKG9mZnNldCwgcmVnX3N0YXR1cywgcmVnX3JpcHBsZSkgXAotCXN5c2ZzX3JvX24oZmFuLCBfaW5wdXQsIG9mZnNldCk7IFwKLQlzeXNmc19yb19uKGZhbiwgX3N0YXR1cywgb2Zmc2V0KTsgXAotCXN5c2ZzX3J3X24oZmFuLCBfcmlwcGxlLCBvZmZzZXQsIHJlZ19yaXBwbGUpOwotCi0jZGVmaW5lIHN5c2ZzX3RlbXAob2Zmc2V0LCByZWdfc3RhdHVzKSBcCi0Jc3lzZnNfcm9fbih0ZW1wLCBfaW5wdXQsIG9mZnNldCk7IFwKLQlzeXNmc19yb19uKHRlbXAsIF9zdGF0dXMsIG9mZnNldCk7IFwKLQlzeXNmc19yd19uKHRlbXAsIF9yZXNldCwgb2Zmc2V0LCByZWdfc3RhdHVzKTsKLQotI2RlZmluZSBzeXNmc193YXRjaGRvZyhyZWdfd2RvZ19wcmVzZXQsIHJlZ193ZG9nX3N0YXRlLCByZWdfd2RvZ19jb250cm9sKSBcCi0Jc3lzZnNfcncod2RvZywgX2NvbnRyb2wsIHJlZ193ZG9nX2NvbnRyb2wpOyBcCi0Jc3lzZnNfcncod2RvZywgX3ByZXNldCwgcmVnX3dkb2dfcHJlc2V0KTsgXAotCXN5c2ZzX3J3KHdkb2csIF9zdGF0ZSwgcmVnX3dkb2dfc3RhdGUpOwotCi1zeXNmc19mYW5fd2l0aF9taW4oMSwgRlNDUE9TX1JFR19GQU5fU1RBVEVbMF0sIEZTQ1BPU19SRUdfRkFOX1JJUFBMRVswXSwKLQkJCQkJCQlGU0NQT1NfUkVHX1BXTVswXSk7Ci1zeXNmc19mYW5fd2l0aF9taW4oMiwgRlNDUE9TX1JFR19GQU5fU1RBVEVbMV0sIEZTQ1BPU19SRUdfRkFOX1JJUFBMRVsxXSwKLQkJCQkJCQlGU0NQT1NfUkVHX1BXTVsxXSk7Ci1zeXNmc19mYW4oMywgRlNDUE9TX1JFR19GQU5fU1RBVEVbMl0sIEZTQ1BPU19SRUdfRkFOX1JJUFBMRVsyXSk7Ci0KLXN5c2ZzX3RlbXAoMSwgRlNDUE9TX1JFR19URU1QX1NUQVRFWzBdKTsKLXN5c2ZzX3RlbXAoMiwgRlNDUE9TX1JFR19URU1QX1NUQVRFWzFdKTsKLXN5c2ZzX3RlbXAoMywgRlNDUE9TX1JFR19URU1QX1NUQVRFWzJdKTsKLQotc3lzZnNfd2F0Y2hkb2coRlNDUE9TX1JFR19XRE9HX1BSRVNFVCwgRlNDUE9TX1JFR19XRE9HX1NUQVRFLAotCQkJCQkJRlNDUE9TX1JFR19XRE9HX0NPTlRST0wpOwotCi1zdGF0aWMgREVWSUNFX0FUVFIoZXZlbnQsIFNfSVJVR08sIHNob3dfZXZlbnQsIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGluMF9pbnB1dCwgU19JUlVHTywgc2hvd192b2x0XzEyLCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfdm9sdF81LCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfdm9sdF9iYXR0LCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZzY3Bvc19hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX2V2ZW50LmF0dHIsCi0JJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9pbjFfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfaW4yX2lucHV0LmF0dHIsCi0KLQkmZGV2X2F0dHJfd2RvZ19jb250cm9sLmF0dHIsCi0JJmRldl9hdHRyX3dkb2dfcHJlc2V0LmF0dHIsCi0JJmRldl9hdHRyX3dkb2dfc3RhdGUuYXR0ciwKLQotCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9zdGF0dXMuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfcmVzZXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDJfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDJfc3RhdHVzLmF0dHIsCi0JJmRldl9hdHRyX3RlbXAyX3Jlc2V0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAzX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAzX3N0YXR1cy5hdHRyLAotCSZkZXZfYXR0cl90ZW1wM19yZXNldC5hdHRyLAotCi0JJmRldl9hdHRyX2ZhbjFfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfZmFuMV9zdGF0dXMuYXR0ciwKLQkmZGV2X2F0dHJfZmFuMV9yaXBwbGUuYXR0ciwKLQkmZGV2X2F0dHJfcHdtMS5hdHRyLAotCSZkZXZfYXR0cl9mYW4yX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfc3RhdHVzLmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfcmlwcGxlLmF0dHIsCi0JJmRldl9hdHRyX3B3bTIuYXR0ciwKLQkmZGV2X2F0dHJfZmFuM19pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9mYW4zX3N0YXR1cy5hdHRyLAotCSZkZXZfYXR0cl9mYW4zX3JpcHBsZS5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGZzY3Bvc19ncm91cCA9IHsKLQkuYXR0cnMgPSBmc2Nwb3NfYXR0cmlidXRlcywKLX07Ci0KLS8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBmc2Nwb3NfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKLQkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBEbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbiB1bmxlc3MgZm9yY2Ugb3IgZm9yY2VfZnNjcG9zIHBhcmFtZXRlciAqLwotCWlmIChraW5kIDwgMCkgewotCQlpZiAoKGZzY3Bvc19yZWFkX3ZhbHVlKG5ld19jbGllbnQsIEZTQ1BPU19SRUdfSURFTlRfMCkKLQkJCSE9IDB4NTApIC8qICdQJyAqLwotCQl8fCAoZnNjcG9zX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgRlNDUE9TX1JFR19JREVOVF8xKQotCQkJIT0gMHg0NSkgLyogJ0UnICovCi0JCXx8IChmc2Nwb3NfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBGU0NQT1NfUkVHX0lERU5UXzIpCi0JCQkhPSAweDQ3KSkvKiAnRycgKi8KLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImZzY3BvcyIsIEkyQ19OQU1FX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZnNjcG9zX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LAotCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwotCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2Nwb3NfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOwotCWRhdGEtPnZhbGlkID0gMDsKLQltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQkvKiBJbml6aWFsaXplIHRoZSBmc2Nwb3MgY2hpcCAqLwotCWZzY3Bvc19pbml0X2NsaWVudChuZXdfY2xpZW50KTsKLQotCS8qIEFubm91bmNlIHRoYXQgdGhlIGNoaXAgd2FzIGZvdW5kICovCi0JZGV2X2luZm8oJm5ld19jbGllbnQtPmRldiwgIkZvdW5kIGZzY3BvcyBjaGlwLCByZXYgJXVcbiIsIGRhdGEtPnJldmlzaW9uKTsKLQotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmZnNjcG9zX2dyb3VwKSkpCi0JCWdvdG8gZXhpdF9mcmVlOwotCi0JZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWV4aXRfcmVtb3ZlX2ZpbGVzOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZmc2Nwb3NfZ3JvdXApOwotZXhpdF9mcmVlOgotCWtmcmVlKGRhdGEpOwotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGZzY3Bvc19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZnNjcG9zX2dyb3VwKTsKLQotCWtmcmVlKGRhdGEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZzY3Bvc19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlJlYWQgcmVnIDB4JTAyeFxuIiwgcmVnKTsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLX0KLQotc3RhdGljIGludCBmc2Nwb3Nfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIldyaXRlIHJlZyAweCUwMngsIHZhbCAweCUwMnhcbiIsIHJlZywgdmFsdWUpOwotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLS8qIENhbGxlZCB3aGVuIHdlIGhhdmUgZm91bmQgYSBuZXcgRlNDUE9TIGNoaXAgKi8KLXN0YXRpYyB2b2lkIGZzY3Bvc19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JLyogcmVhZCByZXZpc2lvbiBmcm9tIGNoaXAgKi8KLQlkYXRhLT5yZXZpc2lvbiA9IGZzY3Bvc19yZWFkX3ZhbHVlKGNsaWVudCwgRlNDUE9TX1JFR19SRVZJU0lPTik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNjcG9zX2RhdGEgKmZzY3Bvc191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBmc2Nwb3NfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgMiAqIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKLQkJaW50IGk7Ci0KLQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTdGFydGluZyBmc2Nwb3MgdXBkYXRlXG4iKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQlkYXRhLT50ZW1wX2FjdFtpXSA9IGZzY3Bvc19yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCUZTQ1BPU19SRUdfVEVNUF9BQ1RbaV0pOwotCQkJZGF0YS0+dGVtcF9zdGF0dXNbaV0gPSBmc2Nwb3NfcmVhZF92YWx1ZShjbGllbnQsCi0JCQkJCQlGU0NQT1NfUkVHX1RFTVBfU1RBVEVbaV0pOwotCQkJZGF0YS0+ZmFuX2FjdFtpXSA9IGZzY3Bvc19yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCUZTQ1BPU19SRUdfRkFOX0FDVFtpXSk7Ci0JCQlkYXRhLT5mYW5fc3RhdHVzW2ldID0gZnNjcG9zX3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJRlNDUE9TX1JFR19GQU5fU1RBVEVbaV0pOwotCQkJZGF0YS0+ZmFuX3JpcHBsZVtpXSA9IGZzY3Bvc19yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCUZTQ1BPU19SRUdfRkFOX1JJUFBMRVtpXSk7Ci0JCQlpZiAoaSA8IDIpIHsKLQkJCQkvKiBmYW4yX21pbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjaGlwICovCi0JCQkJZGF0YS0+cHdtW2ldID0gZnNjcG9zX3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJCUZTQ1BPU19SRUdfUFdNW2ldKTsKLQkJCX0KLQkJCS8qIHJlc2V0IGZhbiBzdGF0dXMgaWYgc3BlZWQgaXMgYmFjayB0byA+IDAgKi8KLQkJCWlmIChkYXRhLT5mYW5fc3RhdHVzW2ldICE9IDAgJiYgZGF0YS0+ZmFuX2FjdFtpXSA+IDApIHsKLQkJCQlyZXNldF9mYW5fYWxhcm0oY2xpZW50LCBpKTsKLQkJCX0KLQkJfQotCi0JCWRhdGEtPnZvbHRbMF0gPSBmc2Nwb3NfcmVhZF92YWx1ZShjbGllbnQsIEZTQ1BPU19SRUdfVk9MVF8xMik7Ci0JCWRhdGEtPnZvbHRbMV0gPSBmc2Nwb3NfcmVhZF92YWx1ZShjbGllbnQsIEZTQ1BPU19SRUdfVk9MVF81KTsKLQkJZGF0YS0+dm9sdFsyXSA9IGZzY3Bvc19yZWFkX3ZhbHVlKGNsaWVudCwgRlNDUE9TX1JFR19WT0xUX0JBVFQpOwotCi0JCWRhdGEtPndkb2dfcHJlc2V0ID0gZnNjcG9zX3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJCUZTQ1BPU19SRUdfV0RPR19QUkVTRVQpOwotCQlkYXRhLT53ZG9nX3N0YXRlID0gZnNjcG9zX3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJCUZTQ1BPU19SRUdfV0RPR19TVEFURSk7Ci0JCWRhdGEtPndkb2dfY29udHJvbCA9IGZzY3Bvc19yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCUZTQ1BPU19SRUdfV0RPR19DT05UUk9MKTsKLQotCQlkYXRhLT5nbG9iYWxfZXZlbnQgPSBmc2Nwb3NfcmVhZF92YWx1ZShjbGllbnQsCi0JCQkJCQlGU0NQT1NfUkVHX0VWRU5UX1NUQVRFKTsKLQotCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOwotCQlkYXRhLT52YWxpZCA9IDE7Ci0JfQotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzbV9mc2Nwb3NfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZnNjcG9zX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzbV9mc2Nwb3NfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZmc2Nwb3NfZHJpdmVyKTsKLX0KLQotTU9EVUxFX0FVVEhPUigiU3RlZmFuIE90dCA8c3RlZmFuQGRlc2lyZS5jaD4gYmFzZWQgb24gd29yayBmcm9tIEhlcm1hbm4gSnVuZyAiCi0JCQkJIjxoZWpAb2RuLmRlPiwgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiIKLQkJCQkiIGFuZCBQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImZ1aml0c3Ugc2llbWVucyBwb3NlaWRvbiBjaGlwIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfaW5pdChzbV9mc2Nwb3NfaW5pdCk7Ci1tb2R1bGVfZXhpdChzbV9mc2Nwb3NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwppbmRleCAyNzEzMzhiLi5jZjVhZmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKQEAgLTQ1NCw2ICs0NTQsMTUgQEAKIAkJCQkJKHAtPmNsaWNrX3RocmVzaF95IDw8IDQpKTsKIAkJfQogCisJCWlmIChwLT53YWtldXBfZmxhZ3MgJiYgKGRldi0+d2hvYW1pID09IExJU19TSU5HTEVfSUQpKSB7CisJCQlkZXYtPndyaXRlKGRldiwgRkZfV1VfQ0ZHXzEsIHAtPndha2V1cF9mbGFncyk7CisJCQlkZXYtPndyaXRlKGRldiwgRkZfV1VfVEhTXzEsIHAtPndha2V1cF90aHJlc2ggJiAweDdmKTsKKwkJCS8qIGRlZmF1bHQgdG8gMi41bXMgZm9yIG5vdyAqLworCQkJZGV2LT53cml0ZShkZXYsIEZGX1dVX0RVUkFUSU9OXzEsIDEpOworCQkJLyogZW5hYmxlIGhpZ2ggcGFzcyBmaWx0ZXIgZm9yIGJvdGggZnJlZS1mYWxsIHVuaXRzICovCisJCQlkZXYtPndyaXRlKGRldiwgQ1RSTF9SRUcyLCBIUF9GRl9XVTEgfCBIUF9GRl9XVTIpOworCQl9CisKIAkJaWYgKHAtPmlycV9jZmcpCiAJCQlkZXYtPndyaXRlKGRldiwgQ1RSTF9SRUczLCBwLT5pcnFfY2ZnKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuaAppbmRleCBlMzIwZTJmLi4zZTFmZjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmgKQEAgLTU4LDE1ICs1OCwxNyBAQAogCU9VVFpfTAkJPSAweDJDLAogCU9VVFpfSAkJPSAweDJELAogCU9VVFoJCT0gMHgyRCwKLQlGRl9XVV9DRkcJPSAweDMwLAotCUZGX1dVX1NSQwk9IDB4MzEsCi0JRkZfV1VfQUNLCT0gMHgzMiwKLQlGRl9XVV9USFNfTAk9IDB4MzQsCi0JRkZfV1VfVEhTX0gJPSAweDM1LAotCUZGX1dVX0RVUkFUSU9OCT0gMHgzNiwKIH07CiAKIGVudW0gbGlzMzAyZF9yZWcgeworCUZGX1dVX0NGR18xCT0gMHgzMCwKKwlGRl9XVV9TUkNfMQk9IDB4MzEsCisJRkZfV1VfVEhTXzEJPSAweDMyLAorCUZGX1dVX0RVUkFUSU9OXzEgPSAweDMzLAorCUZGX1dVX0NGR18yCT0gMHgzNCwKKwlGRl9XVV9TUkNfMgk9IDB4MzUsCisJRkZfV1VfVEhTXzIJPSAweDM2LAorCUZGX1dVX0RVUkFUSU9OXzIgPSAweDM3LAogCUNMSUNLX0NGRwk9IDB4MzgsCiAJQ0xJQ0tfU1JDCT0gMHgzOSwKIAlDTElDS19USFNZX1gJPSAweDNCLApAQCAtNzcsNiArNzksMTIgQEAKIH07CiAKIGVudW0gbGlzM2x2MDJkX3JlZyB7CisJRkZfV1VfQ0ZHCT0gMHgzMCwKKwlGRl9XVV9TUkMJPSAweDMxLAorCUZGX1dVX0FDSwk9IDB4MzIsCisJRkZfV1VfVEhTX0wJPSAweDM0LAorCUZGX1dVX1RIU19ICT0gMHgzNSwKKwlGRl9XVV9EVVJBVElPTgk9IDB4MzYsCiAJRERfQ0ZHCQk9IDB4MzgsCiAJRERfU1JDCQk9IDB4MzksCiAJRERfQUNLCQk9IDB4M0EsCkBAIC0xMDcsNiArMTE1LDEwIEBACiAJQ1RSTDJfRlMJPSAweDgwLCAvKiBGdWxsIFNjYWxlIHNlbGVjdGlvbiAqLwogfTsKIAorZW51bSBsaXMzMDJkX2N0cmwyIHsKKwlIUF9GRl9XVTIJPSAweDA4LAorCUhQX0ZGX1dVMQk9IDB4MDQsCit9OwogCiBlbnVtIGxpczNsdjAyZF9jdHJsMyB7CiAJQ1RSTDNfQ0ZTMAk9IDB4MDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCmluZGV4IDM4MjdmZjAuLmVjZDczOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCkBAIC02NiwxNyArNjYsMTYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWxpczNfZGV2LmJ1c19wcml2ID0gc3BpOwotCWxpczNfZGV2LmluaXQgPSBsaXMzX3NwaV9pbml0OwotCWxpczNfZGV2LnJlYWQgPSBsaXMzX3NwaV9yZWFkOwotCWxpczNfZGV2LndyaXRlID0gbGlzM19zcGlfd3JpdGU7Ci0JbGlzM19kZXYuaXJxID0gc3BpLT5pcnE7Ci0JbGlzM19kZXYuYWMgPSBsaXMzbHYwMmRfYXhpc19ub3JtYWw7Ci0JbGlzM19kZXYucGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWxpczNfZGV2LmJ1c19wcml2CT0gc3BpOworCWxpczNfZGV2LmluaXQJCT0gbGlzM19zcGlfaW5pdDsKKwlsaXMzX2Rldi5yZWFkCQk9IGxpczNfc3BpX3JlYWQ7CisJbGlzM19kZXYud3JpdGUJCT0gbGlzM19zcGlfd3JpdGU7CisJbGlzM19kZXYuaXJxCQk9IHNwaS0+aXJxOworCWxpczNfZGV2LmFjCQk9IGxpczNsdjAyZF9heGlzX25vcm1hbDsKKwlsaXMzX2Rldi5wZGF0YQkJPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwogCXNwaV9zZXRfZHJ2ZGF0YShzcGksICZsaXMzX2Rldik7CiAKLQlyZXQgPSBsaXMzbHYwMmRfaW5pdF9kZXZpY2UoJmxpczNfZGV2KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBsaXMzbHYwMmRfaW5pdF9kZXZpY2UoJmxpczNfZGV2KTsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgbGlzMzAyZGxfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtODcsNiArODYsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBsaXMzbHYwMmRfc3BpX3N1c3BlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IGxpczNsdjAyZCAqbGlzMyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJaWYgKCFsaXMzLT5wZGF0YS0+d2FrZXVwX2ZsYWdzKQorCQlsaXMzbHYwMmRfcG93ZXJvZmYoJmxpczNfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpczNsdjAyZF9zcGlfcmVzdW1lKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGxpczNsdjAyZCAqbGlzMyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJaWYgKCFsaXMzLT5wZGF0YS0+d2FrZXVwX2ZsYWdzKQorCQlsaXMzbHYwMmRfcG93ZXJvbihsaXMzKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBsaXMzbHYwMmRfc3BpX3N1c3BlbmQJTlVMTAorI2RlZmluZSBsaXMzbHYwMmRfc3BpX3Jlc3VtZQlOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxpczMwMmRsX3NwaV9kcml2ZXIgPSB7CiAJLmRyaXZlcgkgPSB7CiAJCS5uYW1lICAgPSBEUlZfTkFNRSwKQEAgLTk0LDYgKzExOSw4IEBACiAJfSwKIAkucHJvYmUJPSBsaXMzMDJkbF9zcGlfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGxpczMwMmRsX3NwaV9yZW1vdmUpLAorCS5zdXNwZW5kID0gbGlzM2x2MDJkX3NwaV9zdXNwZW5kLAorCS5yZXN1bWUgID0gbGlzM2x2MDJkX3NwaV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBsaXMzMDJkbF9pbml0KHZvaWQpCkBAIC0xMTIsNCArMTM5LDQgQEAKIE1PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImxpczNsdjAyZCBTUEkgZ2x1ZSBsYXllciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCitNT0RVTEVfQUxJQVMoInNwaToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03MC5jIGIvZHJpdmVycy9od21vbi9sbTcwLmMKaW5kZXggYWU2MjA0Zi4uYWI4YTVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTcwLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTcwLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKIApAQCAtMTMwLDExICsxMzEsMjAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgY29tbW9uX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBjaGlwKQorc3RhdGljIGludCBfX2RldmluaXQgbG03MF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogeworCWludCBjaGlwID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGxtNzAgKnBfbG03MDsKIAlpbnQgc3RhdHVzOwogCisJLyogc2lnbmFsaW5nIGlzIFNQSV9NT0RFXzAgZm9yIGJvdGggTE03MCBhbmQgVE1QMTIxICovCisJaWYgKHNwaS0+bW9kZSAmIChTUElfQ1BPTCB8IFNQSV9DUEhBKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiAzLXdpcmUgbGluayAoc2hhcmVkIFNJL1NPKSBmb3IgTE03MCAqLworCWlmIChjaGlwID09IExNNzBfQ0hJUF9MTTcwICYmICEoc3BpLT5tb2RlICYgU1BJXzNXSVJFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBOT1RFOiAgd2UgYXNzdW1lIDgtYml0IHdvcmRzLCBhbmQgY29udmVydCB0byAxNiBiaXRzIG1hbnVhbGx5ICovCiAKIAlwX2xtNzAgPSBremFsbG9jKHNpemVvZiAqcF9sbTcwLCBHRlBfS0VSTkVMKTsKQEAgLTE3MCwyNCArMTgwLDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBsbTcwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JLyogc2lnbmFsaW5nIGlzIFNQSV9NT0RFXzAgb24gYSAzLXdpcmUgbGluayAoc2hhcmVkIFNJL1NPKSAqLwotCWlmICgoc3BpLT5tb2RlICYgKFNQSV9DUE9MIHwgU1BJX0NQSEEpKSB8fCAhKHNwaS0+bW9kZSAmIFNQSV8zV0lSRSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGNvbW1vbl9wcm9iZShzcGksIExNNzBfQ0hJUF9MTTcwKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgdG1wMTIxX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JLyogc2lnbmFsaW5nIGlzIFNQSV9NT0RFXzAgd2l0aCBvbmx5IE1JU08gY29ubmVjdGVkICovCi0JaWYgKHNwaS0+bW9kZSAmIChTUElfQ1BPTCB8IFNQSV9DUEhBKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gY29tbW9uX3Byb2JlKHNwaSwgTE03MF9DSElQX1RNUDEyMSk7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZleGl0IGxtNzBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGxtNzAgKnBfbG03MCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwpAQCAtMjAxLDQxICsxOTMsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHRtcDEyMV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAidG1wMTIxIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJPSB0bXAxMjFfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGxtNzBfcmVtb3ZlKSwKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGxtNzBfaWRzW10gPSB7CisJeyAibG03MCIsICAgTE03MF9DSElQX0xNNzAgfSwKKwl7ICJ0bXAxMjEiLCBMTTcwX0NISVBfVE1QMTIxIH0sCisJeyB9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBsbTcwX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsbTcwX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsbTcwIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKKwkuaWRfdGFibGUgPSBsbTcwX2lkcywKIAkucHJvYmUJPSBsbTcwX3Byb2JlLAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcChsbTcwX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2xtNzAodm9pZCkKIHsKLQlpbnQgcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbG03MF9kcml2ZXIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ0bXAxMjFfZHJpdmVyKTsKLQlpZiAocmV0KQotCQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmxtNzBfZHJpdmVyKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmxtNzBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbG03MCh2b2lkKQogewogCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbG03MF9kcml2ZXIpOwotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmdG1wMTIxX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGluaXRfbG03MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYyBiL2RyaXZlcnMvaHdtb24vbHRjNDIxNS5jCmluZGV4IDkzODZlMmEuLjZjOWEwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbHRjNDIxNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbHRjNDIxNS5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBMVEM0MjE1IGNoaXAgKi8KLQkvKiBUT0RPICovCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExUQzQyMTVfRkFVTFQsIDB4MDApOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsdGM0MjE1X2dyb3VwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKaW5kZXggMDM0YjJjNS4uZTM4OTY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKKysrIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKQEAgLTM4Miw3ICszODIsOCBAQAogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIExUQzQyNDUgY2hpcCAqLwotCS8qIFRPRE8gKi8KKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTFRDNDI0NV9GQVVMVDEsIDB4MDApOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjQ1X0ZBVUxUMiwgMHgwMCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwogCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmx0YzQyNDVfZ3JvdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXgxMTExLmMgYi9kcml2ZXJzL2h3bW9uL21heDExMTEuYwppbmRleCBiZmFhNjY1Li45YWM0OTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDExMTEuYworKysgYi9kcml2ZXJzL2h3bW9uL21heDExMTEuYwpAQCAtMjQyLDMgKzI0Miw0IEBACiBNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTUFYMTExMSBBREMgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTptYXgxMTExIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKaW5kZXggNjI5MGEyNS4uMzAzYzAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zaHQxNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNodDE1X2F0dHJfZ3JvdXApOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAic3lzZnMgY3JlYXRlIGZhaWxlZCIpOwotCQlnb3RvIGVycl9mcmVlX2RhdGE7CisJCWdvdG8gZXJyX3JlbGVhc2VfZ3Bpb19kYXRhOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpLApAQCAtNTgxLDEwICs1ODEsMTIgQEAKIAlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoZGF0YS0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKIAkJcmV0ID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIGVycl9yZWxlYXNlX2dwaW9fZGF0YTsKKwkJZ290byBlcnJfcmVsZWFzZV9pcnE7CiAJfQogCXJldHVybiAwOwogCitlcnJfcmVsZWFzZV9pcnE6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSksIGRhdGEpOwogZXJyX3JlbGVhc2VfZ3Bpb19kYXRhOgogCWdwaW9fZnJlZShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKTsKIGVycl9yZWxlYXNlX2dwaW9fc2NrOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL0tjb25maWcKaW5kZXggNzExY2EwOC4uZDdlY2UxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9LY29uZmlnCkBAIC0yNyw2ICsyNywxNCBAQAogCWJvb2xlYW4KIAlkZWZhdWx0IHkKIAorY29uZmlnIEkyQ19DT01QQVQKKwlib29sZWFuICJFbmFibGUgY29tcGF0aWJpbGl0eSBiaXRzIGZvciBvbGQgdXNlci1zcGFjZSIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIGxtLXNlbnNvcnMgMy4xLjEgb3Igb2xkZXIsIG9yIGFueQorCSAgb3RoZXIgdXNlci1zcGFjZSBwYWNrYWdlIHdoaWNoIGV4cGVjdHMgaTJjIGFkYXB0ZXJzIHRvIGJlIGNsYXNzCisJICBkZXZpY2VzLiBJZiB5b3UgZG9uJ3Qga25vdywgc2F5IFkuCisKIGNvbmZpZyBJMkNfQ0hBUkRFVgogCXRyaXN0YXRlICJJMkMgZGV2aWNlIGludGVyZmFjZSIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDgyMDY0NDIuLjZiZWRkMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1pc2NoLgogCiBjb25maWcgSTJDX1BJSVg0Ci0JdHJpc3RhdGUgIkludGVsIFBJSVg0IGFuZCBjb21wYXRpYmxlIChBVEkvU2VydmVyd29ya3MvQnJvYWRjb20vU01TQykiCisJdHJpc3RhdGUgIkludGVsIFBJSVg0IGFuZCBjb21wYXRpYmxlIChBVEkvQU1EL1NlcnZlcndvcmtzL0Jyb2FkY29tL1NNU0MpIgogCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlIEludGVsCkBAIC0xMjgsNiArMTI4LDcgQEAKIAkgICAgQVRJIFNCNjAwCiAJICAgIEFUSSBTQjcwMAogCSAgICBBVEkgU0I4MDAKKwkgICAgQU1EIFNCOTAwCiAJICAgIFNlcnZlcndvcmtzIE9TQjQKIAkgICAgU2VydmVyd29ya3MgQ1NCNQogCSAgICBTZXJ2ZXJ3b3JrcyBDU0I2CkBAIC0yMzEsNiArMjMyLDIyIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtdmlhcHJvLgogCitpZiBBQ1BJCisKK2NvbW1lbnQgIkFDUEkgZHJpdmVycyIKKworY29uZmlnIEkyQ19TQ01JCisJdHJpc3RhdGUgIlNNQnVzIENvbnRyb2wgTWV0aG9kIEludGVyZmFjZSIKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU01CdXMgQ29udHJvbCBNZXRob2QgSW50ZXJmYWNlLiBJdCBuZWVkcyB0aGUKKwkgIEJJT1MgdG8gZGVjbGFyZSBBQ1BJIGNvbnRyb2wgbWV0aG9kcyBhcyBkZXNjcmliZWQgaW4gdGhlIFNNQnVzIENvbnRyb2wKKwkgIE1ldGhvZCBJbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaTJjLXNjbWkuCisKK2VuZGlmICMgQUNQSQorCiBjb21tZW50ICJNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBQUENfQ0hSUCB8fCBQUENfUE1BQwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKaW5kZXggZTY1NDI2M2IuLmZmOTM3YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTIsNiArMiw5IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgaTJjIGJ1cyBkcml2ZXJzLgogIwogCisjIEFDUEkgZHJpdmVycworb2JqLSQoQ09ORklHX0kyQ19TQ01JKQkJKz0gaTJjLXNjbWkubworCiAjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX0FMSTE1MzUpCSs9IGkyYy1hbGkxNTM1Lm8KIG9iai0kKENPTkZJR19JMkNfQUxJMTU2MykJKz0gaTJjLWFsaTE1NjMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKaW5kZXggMGI0ODZhNi4uNGFmYmEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCkBAIC02MDksMTMgKzYwOSwxMiBAQAogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmkyY19pbXhfZHJpdmVyLCBpMmNfaW14X3Byb2JlKTsKIH0KK3N1YnN5c19pbml0Y2FsbChpMmNfYWRhcF9pbXhfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpMmNfYWRhcF9pbXhfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpMmNfaW14X2RyaXZlcik7CiB9Ci0KLW1vZHVsZV9pbml0KGkyY19hZGFwX2lteF9pbml0KTsKIG1vZHVsZV9leGl0KGkyY19hZGFwX2lteF9leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYwppbmRleCBjMzg2OWQ5Li5iYmFiMGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYwpAQCAtMjkzLDEzICsyOTMsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBpcnFyZXR1cm5fdAogbXY2NHh4eF9pMmNfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IG12NjR4eHhfaTJjX2RhdGEJKmRydl9kYXRhID0gZGV2X2lkOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdTMyCQlzdGF0dXM7Ci0JaW50CQlyYyA9IElSUV9OT05FOworCWlycXJldHVybl90CXJjID0gSVJRX05PTkU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKIAl3aGlsZSAocmVhZGwoZHJ2X2RhdGEtPnJlZ19iYXNlICsgTVY2NFhYWF9JMkNfUkVHX0NPTlRST0wpICYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCAwMjQ5YTdkLi5hNzgyYzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC0yMiw2ICsyMiw3IEBACiAJSW50ZWwgUElJWDQsIDQ0ME1YCiAJU2VydmVyd29ya3MgT1NCNCwgQ1NCNSwgQ1NCNiwgSFQtMTAwMCwgSFQtMTEwMAogCUFUSSBJWFAyMDAsIElYUDMwMCwgSVhQNDAwLCBTQjYwMCwgU0I3MDAsIFNCODAwCisJQU1EIFNCOTAwCiAJU01TQyBWaWN0b3J5NjYKIAogICAgTm90ZTogd2UgYXNzdW1lIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBkZXZpY2UsIHdpdGggb25lIFNNQnVzIGludGVyZmFjZS4KQEAgLTQ3OSw2ICs0ODAsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKIAkJICAgICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCkBAIC00OTksOSArNTAxLDEwIEBACiB7CiAJaW50IHJldHZhbDsKIAotCWlmICgoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkpICYmCi0JICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FUSV9TQlgwMF9TTUJVUykgJiYKLQkgICAgKGRldi0+cmV2aXNpb24gPj0gMHg0MCkpCisJaWYgKChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FUSSAmJgorCSAgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMgJiYKKwkgICAgIGRldi0+cmV2aXNpb24gPj0gMHg0MCkgfHwKKwkgICAgZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQpCiAJCS8qIGJhc2UgYWRkcmVzcyBsb2NhdGlvbiBldGMgY2hhbmdlZCBpbiBTQjgwMCAqLwogCQlyZXR2YWwgPSBwaWl4NF9zZXR1cF9zYjgwMChkZXYsIGlkKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwppbmRleCBlYzE1Y2ZmLi42ZmY2YzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKQEAgLTU4Niw3ICs1ODYsOCBAQAogCWFsZ19kYXRhLT5taWYudGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWkyY19wbngtPmFkYXB0ZXI7CiAKIAkvKiBSZWdpc3RlciBJL08gcmVzb3VyY2UgKi8KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFLCBwZGV2LT5uYW1lKSkgeworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFLAorCQkJCXBkZXYtPm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJICAgICAgICJJL08gcmVnaW9uIDB4JTA4eCBmb3IgSTJDIGFscmVhZHkgaW4gdXNlLlxuIiwKIAkJICAgICAgIGFsZ19kYXRhLT5iYXNlKTsKQEAgLTY1MCw3ICs2NTEsNyBAQAogb3V0X3VubWFwOgogCWlvdW5tYXAoKHZvaWQgKilhbGdfZGF0YS0+aW9hZGRyKTsKIG91dF9yZWxlYXNlOgotCXJlbGVhc2VfcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpOwogb3V0X2RydmRhdGE6CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiBvdXQ6CkBAIC02NjcsNyArNjY4LDcgQEAKIAlpMmNfZGVsX2FkYXB0ZXIoYWRhcCk7CiAJaTJjX3BueC0+c2V0X2Nsb2NrX3N0b3AocGRldik7CiAJaW91bm1hcCgodm9pZCAqKWFsZ19kYXRhLT5pb2FkZHIpOwotCXJlbGVhc2VfcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NmEwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYwpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIFNNQnVzIGRyaXZlciBmb3IgQUNQSSBTTUJ1cyBDTUkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ3JhbmUgQ2FpIDxjcmFuZS5jYWlAYW1kLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2RlZmluZSBBQ1BJX1NNQlVTX0hDX0NMQVNTCQkic21idXMiCisjZGVmaW5lIEFDUElfU01CVVNfSENfREVWSUNFX05BTUUJImNtaSIKKworQUNQSV9NT0RVTEVfTkFNRSgic21idXNfY21pIik7CisKK3N0cnVjdCBzbWJ1c19tZXRob2RzX3QgeworCWNoYXIgKm10X2luZm87CisJY2hhciAqbXRfc2JyOworCWNoYXIgKm10X3NidzsKK307CisKK3N0cnVjdCBhY3BpX3NtYnVzX2NtaSB7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOworCXU4IGNhcF9pbmZvOjE7CisJdTggY2FwX3JlYWQ6MTsKKwl1OCBjYXBfd3JpdGU6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc21idXNfbWV0aG9kc190IHNtYnVzX21ldGhvZHMgPSB7CisJLm10X2luZm8gPSAiX1NCSSIsCisJLm10X3NiciAgPSAiX1NCUiIsCisJLm10X3NidyAgPSAiX1NCVyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGFjcGlfc21idXNfY21pX2lkc1tdID0geworCXsiU01CVVMwMSIsIDB9LAorCXsiIiwgMH0KK307CisKKyNkZWZpbmUgQUNQSV9TTUJVU19TVEFUVVNfT0sJCQkweDAwCisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX0ZBSUwJCQkweDA3CisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX0ROQUsJCQkweDEwCisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX0RFUlIJCQkweDExCisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX0NNRF9ERU5ZCQkweDEyCisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX1VOS05PV04JCTB4MTMKKyNkZWZpbmUgQUNQSV9TTUJVU19TVEFUVVNfQUNDX0RFTlkJCTB4MTcKKyNkZWZpbmUgQUNQSV9TTUJVU19TVEFUVVNfVElNRU9VVAkJMHgxOAorI2RlZmluZSBBQ1BJX1NNQlVTX1NUQVRVU19OT1RTVVAJCTB4MTkKKyNkZWZpbmUgQUNQSV9TTUJVU19TVEFUVVNfQlVTWQkJCTB4MWEKKyNkZWZpbmUgQUNQSV9TTUJVU19TVEFUVVNfUEVDCQkJMHgxZgorCisjZGVmaW5lIEFDUElfU01CVVNfUFJUQ0xfV1JJVEUJCQkweDAwCisjZGVmaW5lIEFDUElfU01CVVNfUFJUQ0xfUkVBRAkJCTB4MDEKKyNkZWZpbmUgQUNQSV9TTUJVU19QUlRDTF9RVUlDSwkJCTB4MDIKKyNkZWZpbmUgQUNQSV9TTUJVU19QUlRDTF9CWVRFCQkJMHgwNAorI2RlZmluZSBBQ1BJX1NNQlVTX1BSVENMX0JZVEVfREFUQQkJMHgwNgorI2RlZmluZSBBQ1BJX1NNQlVTX1BSVENMX1dPUkRfREFUQQkJMHgwOAorI2RlZmluZSBBQ1BJX1NNQlVTX1BSVENMX0JMT0NLX0RBVEEJCTB4MGEKKworCitzdGF0aWMgaW50CithY3BpX3NtYnVzX2NtaV9hY2Nlc3Moc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1MTYgYWRkciwgdW5zaWduZWQgc2hvcnQgZmxhZ3MsCisJCSAgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwgaW50IHNpemUsCisJCSAgIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBhY3BpX3NtYnVzX2NtaSAqc21idXNfY21pID0gYWRhcC0+YWxnb19kYXRhOworCXVuc2lnbmVkIGNoYXIgcHJvdG9jb2w7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bmlvbiBhY3BpX29iamVjdCBtdF9wYXJhbXNbNV07CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwa2c7CisJY2hhciAqbWV0aG9kOworCWludCBsZW4gPSAwOworCisJZGV2X2RiZygmYWRhcC0+ZGV2LCAiYWNjZXNzIHNpemU6ICVkICVzXG4iLCBzaXplLAorCQkocmVhZF93cml0ZSkgPyAiUkVBRCIgOiAiV1JJVEUiKTsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIEkyQ19TTUJVU19RVUlDSzoKKwkJcHJvdG9jb2wgPSBBQ1BJX1NNQlVTX1BSVENMX1FVSUNLOworCQljb21tYW5kID0gMDsKKwkJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1dSSVRFKSB7CisJCQltdF9wYXJhbXNbM10udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCQkJbXRfcGFyYW1zWzNdLmludGVnZXIudmFsdWUgPSAwOworCQkJbXRfcGFyYW1zWzRdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwkJCW10X3BhcmFtc1s0XS5pbnRlZ2VyLnZhbHVlID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSTJDX1NNQlVTX0JZVEU6CisJCXByb3RvY29sID0gQUNQSV9TTUJVU19QUlRDTF9CWVRFOworCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpIHsKKwkJCW10X3BhcmFtc1szXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJCQltdF9wYXJhbXNbM10uaW50ZWdlci52YWx1ZSA9IDA7CisJCQltdF9wYXJhbXNbNF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCQkJbXRfcGFyYW1zWzRdLmludGVnZXIudmFsdWUgPSAwOworCQl9IGVsc2UgeworCQkJY29tbWFuZCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEkyQ19TTUJVU19CWVRFX0RBVEE6CisJCXByb3RvY29sID0gQUNQSV9TTUJVU19QUlRDTF9CWVRFX0RBVEE7CisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkgeworCQkJbXRfcGFyYW1zWzNdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwkJCW10X3BhcmFtc1szXS5pbnRlZ2VyLnZhbHVlID0gMTsKKwkJCW10X3BhcmFtc1s0XS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJCQltdF9wYXJhbXNbNF0uaW50ZWdlci52YWx1ZSA9IGRhdGEtPmJ5dGU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEkyQ19TTUJVU19XT1JEX0RBVEE6CisJCXByb3RvY29sID0gQUNQSV9TTUJVU19QUlRDTF9XT1JEX0RBVEE7CisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkgeworCQkJbXRfcGFyYW1zWzNdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwkJCW10X3BhcmFtc1szXS5pbnRlZ2VyLnZhbHVlID0gMjsKKwkJCW10X3BhcmFtc1s0XS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJCQltdF9wYXJhbXNbNF0uaW50ZWdlci52YWx1ZSA9IGRhdGEtPndvcmQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEkyQ19TTUJVU19CTE9DS19EQVRBOgorCQlwcm90b2NvbCA9IEFDUElfU01CVVNfUFJUQ0xfQkxPQ0tfREFUQTsKKwkJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1dSSVRFKSB7CisJCQlsZW4gPSBkYXRhLT5ibG9ja1swXTsKKwkJCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBJMkNfU01CVVNfQkxPQ0tfTUFYKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbXRfcGFyYW1zWzNdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwkJCW10X3BhcmFtc1szXS5pbnRlZ2VyLnZhbHVlID0gbGVuOworCQkJbXRfcGFyYW1zWzRdLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOworCQkJbXRfcGFyYW1zWzRdLmJ1ZmZlci5wb2ludGVyID0gZGF0YS0+YmxvY2sgKyAxOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oJmFkYXAtPmRldiwgIlVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uICVkXG4iLCBzaXplKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7CisJCXByb3RvY29sIHw9IEFDUElfU01CVVNfUFJUQ0xfUkVBRDsKKwkJbWV0aG9kID0gc21idXNfbWV0aG9kcy5tdF9zYnI7CisJCWlucHV0LmNvdW50ID0gMzsKKwl9IGVsc2UgeworCQlwcm90b2NvbCB8PSBBQ1BJX1NNQlVTX1BSVENMX1dSSVRFOworCQltZXRob2QgPSBzbWJ1c19tZXRob2RzLm10X3NidzsKKwkJaW5wdXQuY291bnQgPSA1OworCX0KKworCWlucHV0LnBvaW50ZXIgPSBtdF9wYXJhbXM7CisJbXRfcGFyYW1zWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwltdF9wYXJhbXNbMF0uaW50ZWdlci52YWx1ZSA9IHByb3RvY29sOworCW10X3BhcmFtc1sxXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJbXRfcGFyYW1zWzFdLmludGVnZXIudmFsdWUgPSBhZGRyOworCW10X3BhcmFtc1syXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJbXRfcGFyYW1zWzJdLmludGVnZXIudmFsdWUgPSBjb21tYW5kOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3Qoc21idXNfY21pLT5oYW5kbGUsIG1ldGhvZCwgJmlucHV0LAorCQkJCSAgICAgICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiRXZhbHVhdGluZyAlczogJWkiLCBtZXRob2QsIHN0YXR1cykpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwa2cgPSBidWZmZXIucG9pbnRlcjsKKwlpZiAocGtnICYmIHBrZy0+dHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkKKwkJb2JqID0gcGtnLT5wYWNrYWdlLmVsZW1lbnRzOworCWVsc2UgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhcmd1bWVudCB0eXBlIikpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisJaWYgKG9iaiA9PSBOVUxMIHx8IG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhcmd1bWVudCB0eXBlIikpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXN1bHQgPSBvYmotPmludGVnZXIudmFsdWU7CisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiJXMgcmV0dXJuIHN0YXR1czogJWlcbiIsCisJCQkgIG1ldGhvZCwgcmVzdWx0KSk7CisKKwlzd2l0Y2ggKHJlc3VsdCkgeworCWNhc2UgQUNQSV9TTUJVU19TVEFUVVNfT0s6CisJCXJlc3VsdCA9IDA7CisJCWJyZWFrOworCWNhc2UgQUNQSV9TTUJVU19TVEFUVVNfQlVTWToKKwkJcmVzdWx0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwljYXNlIEFDUElfU01CVVNfU1RBVFVTX1RJTUVPVVQ6CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0OworCWNhc2UgQUNQSV9TTUJVU19TVEFUVVNfRE5BSzoKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUgfHwgc2l6ZSA9PSBJMkNfU01CVVNfUVVJQ0spCisJCWdvdG8gb3V0OworCisJb2JqID0gcGtnLT5wYWNrYWdlLmVsZW1lbnRzICsgMTsKKwlpZiAob2JqID09IE5VTEwgfHwgb2JqLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFyZ3VtZW50IHR5cGUiKSk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWxlbiA9IG9iai0+aW50ZWdlci52YWx1ZTsKKwlvYmogPSBwa2ctPnBhY2thZ2UuZWxlbWVudHMgKyAyOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgSTJDX1NNQlVTX0JZVEU6CisJY2FzZSBJMkNfU01CVVNfQllURV9EQVRBOgorCWNhc2UgSTJDX1NNQlVTX1dPUkRfREFUQToKKwkJaWYgKG9iaiA9PSBOVUxMIHx8IG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgYXJndW1lbnQgdHlwZSIpKTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAobGVuID09IDIpCisJCQlkYXRhLT53b3JkID0gb2JqLT5pbnRlZ2VyLnZhbHVlOworCQllbHNlCisJCQlkYXRhLT5ieXRlID0gb2JqLT5pbnRlZ2VyLnZhbHVlOworCQlicmVhazsKKwljYXNlIEkyQ19TTUJVU19CTE9DS19EQVRBOgorCQlpZiAob2JqID09IE5VTEwgfHwgb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFyZ3VtZW50IHR5cGUiKSk7CisJCQlyZXN1bHQgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGxlbiA9PSAwIHx8IGxlbiA+IEkyQ19TTUJVU19CTE9DS19NQVgpCisJCQlyZXR1cm4gLUVQUk9UTzsKKwkJZGF0YS0+YmxvY2tbMF0gPSBsZW47CisJCW1lbWNweShkYXRhLT5ibG9jayArIDEsIG9iai0+YnVmZmVyLnBvaW50ZXIsIGxlbik7CisJCWJyZWFrOworCX0KKworb3V0OgorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlkZXZfZGJnKCZhZGFwLT5kZXYsICJUcmFuc2FjdGlvbiBzdGF0dXM6ICVpXG4iLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB1MzIgYWNwaV9zbWJ1c19jbWlfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGFjcGlfc21idXNfY21pICpzbWJ1c19jbWkgPSBhZGFwdGVyLT5hbGdvX2RhdGE7CisJdTMyIHJldDsKKworCXJldCA9IHNtYnVzX2NtaS0+Y2FwX3JlYWQgfCBzbWJ1c19jbWktPmNhcF93cml0ZSA/CisJCUkyQ19GVU5DX1NNQlVTX1FVSUNLIDogMDsKKworCXJldCB8PSBzbWJ1c19jbWktPmNhcF9yZWFkID8KKwkJKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8CisJCUkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIHwKKwkJSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEgfAorCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEpIDogMDsKKworCXJldCB8PSBzbWJ1c19jbWktPmNhcF93cml0ZSA/CisJCShJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFIHwKKwkJSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBIHwKKwkJSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBIHwKKwkJSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSkgOiAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGFjcGlfc21idXNfY21pX2FsZ29yaXRobSA9IHsKKwkuc21idXNfeGZlciA9IGFjcGlfc21idXNfY21pX2FjY2VzcywKKwkuZnVuY3Rpb25hbGl0eSA9IGFjcGlfc21idXNfY21pX2Z1bmMsCit9OworCisKK3N0YXRpYyBpbnQgYWNwaV9zbWJ1c19jbWlfYWRkX2NhcChzdHJ1Y3QgYWNwaV9zbWJ1c19jbWkgKnNtYnVzX2NtaSwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWlmICghc3RyY21wKG5hbWUsIHNtYnVzX21ldGhvZHMubXRfaW5mbykpIHsKKwkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3Qoc21idXNfY21pLT5oYW5kbGUsCisJCQkJCXNtYnVzX21ldGhvZHMubXRfaW5mbywKKwkJCQkJTlVMTCwgJmJ1ZmZlcik7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkV2YWx1YXRpbmcgJXM6ICVpIiwKKwkJCQkgICBzbWJ1c19tZXRob2RzLm10X2luZm8sIHN0YXR1cykpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlvYmogPSBidWZmZXIucG9pbnRlcjsKKwkJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpCisJCQlvYmogPSBvYmotPnBhY2thZ2UuZWxlbWVudHM7CisJCWVsc2UgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgYXJndW1lbnQgdHlwZSIpKTsKKwkJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgYXJndW1lbnQgdHlwZSIpKTsKKwkJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJCXJldHVybiAtRUlPOworCQl9IGVsc2UKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlNNQnVzIENNSSBWZXJzaW9uICV4IgorCQkJCQkgICJcbiIsIChpbnQpb2JqLT5pbnRlZ2VyLnZhbHVlKSk7CisKKwkJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCQlzbWJ1c19jbWktPmNhcF9pbmZvID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgc21idXNfbWV0aG9kcy5tdF9zYnIpKQorCQlzbWJ1c19jbWktPmNhcF9yZWFkID0gMTsKKwllbHNlIGlmICghc3RyY21wKG5hbWUsIHNtYnVzX21ldGhvZHMubXRfc2J3KSkKKwkJc21idXNfY21pLT5jYXBfd3JpdGUgPSAxOworCWVsc2UKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiVW5zdXBwb3J0ZWQgQ01JIG1ldGhvZDogJXNcbiIsCisJCQkJIG5hbWUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9zbWJ1c19jbWlfcXVlcnlfbWV0aG9kcyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsZXZlbCwKKwkJCXZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR1cm5fdmFsdWUpCit7CisJY2hhciBub2RlX25hbWVbNV07CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgc2l6ZW9mKG5vZGVfbmFtZSksIG5vZGVfbmFtZSB9OworCXN0cnVjdCBhY3BpX3NtYnVzX2NtaSAqc21idXNfY21pID0gY29udGV4dDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9uYW1lKGhhbmRsZSwgQUNQSV9TSU5HTEVfTkFNRSwgJmJ1ZmZlcik7CisKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCWFjcGlfc21idXNfY21pX2FkZF9jYXAoc21idXNfY21pLCBub2RlX25hbWUpOworCisJcmV0dXJuIEFFX09LOworfQorCitzdGF0aWMgaW50IGFjcGlfc21idXNfY21pX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgYWNwaV9zbWJ1c19jbWkgKnNtYnVzX2NtaTsKKworCXNtYnVzX2NtaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3NtYnVzX2NtaSksIEdGUF9LRVJORUwpOworCWlmICghc21idXNfY21pKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNtYnVzX2NtaS0+aGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CisJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9TTUJVU19IQ19ERVZJQ0VfTkFNRSk7CisJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfU01CVVNfSENfQ0xBU1MpOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBzbWJ1c19jbWk7CisJc21idXNfY21pLT5jYXBfaW5mbyA9IDA7CisJc21idXNfY21pLT5jYXBfcmVhZCA9IDA7CisJc21idXNfY21pLT5jYXBfd3JpdGUgPSAwOworCisJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfTUVUSE9ELCBzbWJ1c19jbWktPmhhbmRsZSwgMSwKKwkJCSAgICBhY3BpX3NtYnVzX2NtaV9xdWVyeV9tZXRob2RzLCBzbWJ1c19jbWksIE5VTEwpOworCisJaWYgKHNtYnVzX2NtaS0+Y2FwX2luZm8gPT0gMCkKKwkJZ290byBlcnI7CisKKwlzbnByaW50ZihzbWJ1c19jbWktPmFkYXB0ZXIubmFtZSwgc2l6ZW9mKHNtYnVzX2NtaS0+YWRhcHRlci5uYW1lKSwKKwkJIlNNQnVzIENNSSBhZGFwdGVyICVzICglcykiLAorCQlhY3BpX2RldmljZV9uYW1lKGRldmljZSksCisJCWFjcGlfZGV2aWNlX3VpZChkZXZpY2UpKTsKKwlzbWJ1c19jbWktPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKKwlzbWJ1c19jbWktPmFkYXB0ZXIuYWxnbyA9ICZhY3BpX3NtYnVzX2NtaV9hbGdvcml0aG07CisJc21idXNfY21pLT5hZGFwdGVyLmFsZ29fZGF0YSA9IHNtYnVzX2NtaTsKKwlzbWJ1c19jbWktPmFkYXB0ZXIuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04gfCBJMkNfQ0xBU1NfU1BEOworCXNtYnVzX2NtaS0+YWRhcHRlci5kZXYucGFyZW50ID0gJmRldmljZS0+ZGV2OworCisJaWYgKGkyY19hZGRfYWRhcHRlcigmc21idXNfY21pLT5hZGFwdGVyKSkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIGFkYXB0ZXIhXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZShzbWJ1c19jbWkpOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGFjcGlfc21idXNfY21pX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCit7CisJc3RydWN0IGFjcGlfc21idXNfY21pICpzbWJ1c19jbWkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJnNtYnVzX2NtaS0+YWRhcHRlcik7CisJa2ZyZWUoc21idXNfY21pKTsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfc21idXNfY21pX2RyaXZlciA9IHsKKwkubmFtZSA9IEFDUElfU01CVVNfSENfREVWSUNFX05BTUUsCisJLmNsYXNzID0gQUNQSV9TTUJVU19IQ19DTEFTUywKKwkuaWRzID0gYWNwaV9zbWJ1c19jbWlfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBhY3BpX3NtYnVzX2NtaV9hZGQsCisJCS5yZW1vdmUgPSBhY3BpX3NtYnVzX2NtaV9yZW1vdmUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfc21idXNfY21pX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3NtYnVzX2NtaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9zbWJ1c19jbWlfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3NtYnVzX2NtaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhY3BpX3NtYnVzX2NtaV9pbml0KTsKK21vZHVsZV9leGl0KGFjcGlfc21idXNfY21pX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDcmFuZSBDYWkgPGNyYW5lLmNhaUBhbWQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFNNQnVzIENNSSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGFvcy1ldm0uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGFvcy1ldm0uYwppbmRleCAyMjRhYTEyLi5kZDM5YzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRhb3MtZXZtLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10YW9zLWV2bS5jCkBAIC0zMiwxMCArMzIsMTIgQEAKIAogI2RlZmluZSBUQU9TX1NUQVRFX0lOSVQJCTAKICNkZWZpbmUgVEFPU19TVEFURV9JRExFCQkxCi0jZGVmaW5lIFRBT1NfU1RBVEVfU0VORAkJMgorI2RlZmluZSBUQU9TX1NUQVRFX0VPRkYJCTIKICNkZWZpbmUgVEFPU19TVEFURV9SRUNWCQkzCiAKICNkZWZpbmUgVEFPU19DTURfUkVTRVQJCTB4MTIKKyNkZWZpbmUgVEFPU19DTURfRUNIT19PTgknKycKKyNkZWZpbmUgVEFPU19DTURfRUNIT19PRkYJJy0nCiAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3cSk7CiAKQEAgLTEwMiwxNyArMTA0LDkgQEAKIAogCS8qIFNlbmQgdGhlIHRyYW5zYWN0aW9uIHRvIHRoZSBUQU9TIEVWTSAqLwogCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkNvbW1hbmQgYnVmZmVyOiAlc1xuIiwgdGFvcy0+YnVmZmVyKTsKLQl0YW9zLT5wb3MgPSAwOwotCXRhb3MtPnN0YXRlID0gVEFPU19TVEFURV9TRU5EOwotCXNlcmlvX3dyaXRlKHNlcmlvLCB0YW9zLT5idWZmZXJbMF0pOwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCB0YW9zLT5zdGF0ZSA9PSBUQU9TX1NUQVRFX0lETEUsCi0JCQkJCSBtc2Vjc190b19qaWZmaWVzKDI1MCkpOwotCWlmICh0YW9zLT5zdGF0ZSAhPSBUQU9TX1NUQVRFX0lETEUpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiVHJhbnNhY3Rpb24gZmFpbGVkICIKLQkJCSIoc3RhdGU9JWQsIHBvcz0lZClcbiIsIHRhb3MtPnN0YXRlLCB0YW9zLT5wb3MpOwotCQl0YW9zLT5hZGRyID0gMDsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCWZvciAocCA9IHRhb3MtPmJ1ZmZlcjsgKnA7IHArKykKKwkJc2VyaW9fd3JpdGUoc2VyaW8sICpwKTsKKwogCXRhb3MtPmFkZHIgPSBhZGRyOwogCiAJLyogU3RhcnQgdGhlIHRyYW5zYWN0aW9uIGFuZCByZWFkIHRoZSBhbnN3ZXIgKi8KQEAgLTEyMiw3ICsxMTYsNyBAQAogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCB0YW9zLT5zdGF0ZSA9PSBUQU9TX1NUQVRFX0lETEUsCiAJCQkJCSBtc2Vjc190b19qaWZmaWVzKDE1MCkpOwogCWlmICh0YW9zLT5zdGF0ZSAhPSBUQU9TX1NUQVRFX0lETEUKLQkgfHwgdGFvcy0+cG9zICE9IDYpIHsKKwkgfHwgdGFvcy0+cG9zICE9IDUpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiVHJhbnNhY3Rpb24gdGltZW91dCAocG9zPSVkKVxuIiwKIAkJCXRhb3MtPnBvcyk7CiAJCXJldHVybiAtRUlPOwpAQCAtMTMwLDcgKzEyNCw3IEBACiAJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiQW5zd2VyIGJ1ZmZlcjogJXNcbiIsIHRhb3MtPmJ1ZmZlcik7CiAKIAkvKiBJbnRlcnByZXQgdGhlIHJldHVybmVkIHN0cmluZyAqLwotCXAgPSB0YW9zLT5idWZmZXIgKyAyOworCXAgPSB0YW9zLT5idWZmZXIgKyAxOwogCXBbM10gPSAnXDAnOwogCWlmICghc3RyY21wKHAsICJOQUsiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNzMsMTMgKzE2Nyw5IEBACiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJndxKTsKIAkJfQogCQlicmVhazsKLQljYXNlIFRBT1NfU1RBVEVfU0VORDoKLQkJaWYgKHRhb3MtPmJ1ZmZlclsrK3Rhb3MtPnBvc10pCi0JCQlzZXJpb193cml0ZShzZXJpbywgdGFvcy0+YnVmZmVyW3Rhb3MtPnBvc10pOwotCQllbHNlIHsKLQkJCXRhb3MtPnN0YXRlID0gVEFPU19TVEFURV9JRExFOwotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ3cSk7Ci0JCX0KKwljYXNlIFRBT1NfU1RBVEVfRU9GRjoKKwkJdGFvcy0+c3RhdGUgPSBUQU9TX1NUQVRFX0lETEU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmd3EpOwogCQlicmVhazsKIAljYXNlIFRBT1NfU1RBVEVfUkVDVjoKIAkJdGFvcy0+YnVmZmVyW3Rhb3MtPnBvcysrXSA9IGRhdGE7CkBAIC0yNTcsNiArMjQ3LDE5IEBACiAJfQogCXN0cmxjcHkoYWRhcHRlci0+bmFtZSwgbmFtZSwgc2l6ZW9mKGFkYXB0ZXItPm5hbWUpKTsKIAorCS8qIFR1cm4gZWNobyBvZmYgZm9yIGJldHRlciBwZXJmb3JtYW5jZSAqLworCXRhb3MtPnN0YXRlID0gVEFPU19TVEFURV9FT0ZGOworCXNlcmlvX3dyaXRlKHNlcmlvLCBUQU9TX0NNRF9FQ0hPX09GRik7CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgdGFvcy0+c3RhdGUgPT0gVEFPU19TVEFURV9JRExFLAorCQkJCQkgbXNlY3NfdG9famlmZmllcygyNTApKTsKKwlpZiAodGFvcy0+c3RhdGUgIT0gVEFPU19TVEFURV9JRExFKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkVjaG8gb2ZmIGZhaWxlZCAiCisJCQkiKHN0YXRlPSVkKVxuIiwgdGFvcy0+c3RhdGUpOworCQlnb3RvIGV4aXRfY2xvc2U7CisJfQorCiAJZXJyID0gaTJjX2FkZF9hZGFwdGVyKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9jbG9zZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCmluZGV4IDY0OGVjYzYuLmNmOTk0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYwpAQCAtMjE3LDggKzIxNywxMCBAQAogCXJldHVybjsKIAogIGVycm9yOgotCWRldl9lcnIoJmlmYWNlLT5hZGFwdGVyLmRldiwgIiVzIGluIHN0YXRlICVzXG4iLCBlcnJtc2csCi0JCXNjeDIwMF9hY2Jfc3RhdGVfbmFtZVtpZmFjZS0+c3RhdGVdKTsKKwlkZXZfZXJyKCZpZmFjZS0+YWRhcHRlci5kZXYsCisJCSIlcyBpbiBzdGF0ZSAlcyAoYWRkcj0weCUwMngsIGxlbj0lZCwgc3RhdHVzPTB4JTAyeClcbiIsIGVycm1zZywKKwkJc2N4MjAwX2FjYl9zdGF0ZV9uYW1lW2lmYWNlLT5zdGF0ZV0sIGlmYWNlLT5hZGRyZXNzX2J5dGUsCisJCWlmYWNlLT5sZW4sIHN0YXR1cyk7CiAKIAlpZmFjZS0+c3RhdGUgPSBzdGF0ZV9pZGxlOwogCWlmYWNlLT5yZXN1bHQgPSAtRUlPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKaW5kZXggMDJkNzQ2Yy4uZjk2MThmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCkBAIC0xNiw1NCArMTYsNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgZHMxNjgyLgogCi1jb25maWcgU0VOU09SU19QQ0Y4NTc0Ci0JdHJpc3RhdGUgIlBoaWxpcHMgUENGODU3NCBhbmQgUENGODU3NEEgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEdQSU9fUENGODU3WCA9ICJuIgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBQaGlsaXBzIFBDRjg1NzQgYW5kIAotCSAgUENGODU3NEEgY2hpcHMuIFRoZXNlIGNoaXBzIGFyZSA4LWJpdCBJL08gZXhwYW5kZXJzIGZvciB0aGUgSTJDIGJ1cy4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcGNmODU3NC4KLQotCSAgVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBkcm9wcGVkIHNvb24uIFVzZQotCSAgZHJpdmVycy9ncGlvL3BjZjg1N3guYyBpbnN0ZWFkLgotCi0JICBUaGVzZSBkZXZpY2VzIGFyZSBoYXJkIHRvIGRldGVjdCBhbmQgcmFyZWx5IGZvdW5kIG9uIG1haW5zdHJlYW0KLQkgIGhhcmR3YXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIFBDRjg1NzUKLQl0cmlzdGF0ZSAiUGhpbGlwcyBQQ0Y4NTc1IChERVBSRUNBVEVEKSIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIEdQSU9fUENGODU3WCA9ICJuIgotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBQaGlsaXBzIFBDRjg1NzUgY2hpcC4KLQkgIFRoaXMgY2hpcCBpcyBhIDE2LWJpdCBJL08gZXhwYW5kZXIgZm9yIHRoZSBJMkMgYnVzLiAgU2V2ZXJhbCBvdGhlcgotCSAgY2hpcCBtYW51ZmFjdHVyZXJzIHNlbGwgZXF1aXZhbGVudCBjaGlwcywgZS5nLiBUZXhhcyBJbnN0cnVtZW50cy4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcGNmODU3NS4KLQotCSAgVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBkcm9wcGVkIHNvb24uIFVzZQotCSAgZHJpdmVycy9ncGlvL3BjZjg1N3guYyBpbnN0ZWFkLgotCi0JICBUaGlzIGRldmljZSBpcyBoYXJkIHRvIGRldGVjdCBhbmQgaXMgcmFyZWx5IGZvdW5kIG9uIG1haW5zdHJlYW0KLQkgIGhhcmR3YXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIFNFTlNPUlNfUENBOTUzOQotCXRyaXN0YXRlICJQaGlsaXBzIFBDQTk1MzkgMTYtYml0IEkvTyBwb3J0IChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBHUElPX1BDQTk1M1ggPSAibiIKLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgUENBOTUzOQotCSAgMTYtYml0IEkvTyBwb3J0LgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBwY2E5NTM5LgotCi0JICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIGRyb3BwZWQgc29vbi4gVXNlCi0JICBkcml2ZXJzL2dwaW8vcGNhOTUzeC5jIGluc3RlYWQuCi0KIGNvbmZpZyBTRU5TT1JTX1RTTDI1NTAKIAl0cmlzdGF0ZSAiVGFvcyBUU0wyNTUwIGFtYmllbnQgbGlnaHQgc2Vuc29yIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCmluZGV4IGY0NjgwZDEuLjc0OWNmMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCkBAIC0xMSw5ICsxMSw2IEBACiAjCiAKIG9iai0kKENPTkZJR19EUzE2ODIpCQkrPSBkczE2ODIubwotb2JqLSQoQ09ORklHX1NFTlNPUlNfUENBOTUzOSkJKz0gcGNhOTUzOS5vCi1vYmotJChDT05GSUdfU0VOU09SU19QQ0Y4NTc0KQkrPSBwY2Y4NTc0Lm8KLW9iai0kKENPTkZJR19QQ0Y4NTc1KQkJKz0gcGNmODU3NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19UU0wyNTUwKQkrPSB0c2wyNTUwLm8KIAogaWZlcSAoJChDT05GSUdfSTJDX0RFQlVHX0NISVApLHkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2E5NTM5LmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9wY2E5NTM5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MGRlNGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvcGNhOTUzOS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gICAgcGNhOTUzOS5jIC0gMTYtYml0IEkvTyBwb3J0IHdpdGggaW50ZXJydXB0IGFuZCByZXNldAotCi0gICAgQ29weXJpZ2h0IChDKSAyMDA1IEJlbiBHYXJkbmVyIDxiZ2FyZG5lckB3YWJ0ZWMuY29tPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+Ci0KLS8qIEFkZHJlc3NlcyB0byBzY2FuOiBub25lLCBkZXZpY2UgaXMgbm90IGF1dG9kZXRlY3RlZCAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEocGNhOTUzOSk7Ci0KLWVudW0gcGNhOTUzOV9jbWQKLXsKLQlQQ0E5NTM5X0lOUFVUXzAJCT0gMCwKLQlQQ0E5NTM5X0lOUFVUXzEJCT0gMSwKLQlQQ0E5NTM5X09VVFBVVF8wCT0gMiwKLQlQQ0E5NTM5X09VVFBVVF8xCT0gMywKLQlQQ0E5NTM5X0lOVkVSVF8wCT0gNCwKLQlQQ0E5NTM5X0lOVkVSVF8xCT0gNSwKLQlQQ0E5NTM5X0RJUkVDVElPTl8wCT0gNiwKLQlQQ0E5NTM5X0RJUkVDVElPTl8xCT0gNywKLX07Ci0KLS8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwotc3RhdGljIHNzaXplX3QgcGNhOTUzOV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqcHNhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQkJICAgICBwc2EtPmluZGV4KSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBjYTk1Mzlfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpwc2EgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7Ci0JaWYgKHZhbCA+IDB4ZmYpCi0JCXJldHVybiAtRUlOVkFMOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBwc2EtPmluZGV4LCB2YWwpOwotCXJldHVybiBjb3VudDsKLX0KLQotLyogRGVmaW5lIHRoZSBkZXZpY2UgYXR0cmlidXRlcyAqLwotCi0jZGVmaW5lIFBDQTk1MzlfRU5UUllfUk8obmFtZSwgY21kX2lkeCkgXAotCXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgcGNhOTUzOV9zaG93LCBOVUxMLCBjbWRfaWR4KQotCi0jZGVmaW5lIFBDQTk1MzlfRU5UUllfUlcobmFtZSwgY21kX2lkeCkgXAotCXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIHBjYTk1Mzlfc2hvdywgXAotCQkJCSAgcGNhOTUzOV9zdG9yZSwgY21kX2lkeCkKLQotUENBOTUzOV9FTlRSWV9STyhpbnB1dDAsIFBDQTk1MzlfSU5QVVRfMCk7Ci1QQ0E5NTM5X0VOVFJZX1JPKGlucHV0MSwgUENBOTUzOV9JTlBVVF8xKTsKLVBDQTk1MzlfRU5UUllfUlcob3V0cHV0MCwgUENBOTUzOV9PVVRQVVRfMCk7Ci1QQ0E5NTM5X0VOVFJZX1JXKG91dHB1dDEsIFBDQTk1MzlfT1VUUFVUXzEpOwotUENBOTUzOV9FTlRSWV9SVyhpbnZlcnQwLCBQQ0E5NTM5X0lOVkVSVF8wKTsKLVBDQTk1MzlfRU5UUllfUlcoaW52ZXJ0MSwgUENBOTUzOV9JTlZFUlRfMSk7Ci1QQ0E5NTM5X0VOVFJZX1JXKGRpcmVjdGlvbjAsIFBDQTk1MzlfRElSRUNUSU9OXzApOwotUENBOTUzOV9FTlRSWV9SVyhkaXJlY3Rpb24xLCBQQ0E5NTM5X0RJUkVDVElPTl8xKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjYTk1MzlfYXR0cmlidXRlc1tdID0gewotCSZzZW5zb3JfZGV2X2F0dHJfaW5wdXQwLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbnB1dDEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX291dHB1dDAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX291dHB1dDEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ludmVydDAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ludmVydDEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2RpcmVjdGlvbjAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2RpcmVjdGlvbjEuZGV2X2F0dHIuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2E5NTM5X2RlZmF0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gcGNhOTUzOV9hdHRyaWJ1dGVzLAotfTsKLQotLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IHBjYTk1MzlfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgInBjYTk1MzkiLCBJMkNfTkFNRV9TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjYTk1MzlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAotCQkJCSAgJnBjYTk1MzlfZGVmYXR0cl9ncm91cCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGNhOTUzOV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwY2E5NTM5X2RlZmF0dHJfZ3JvdXApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcGNhOTUzOV9pZFtdID0gewotCXsgInBjYTk1MzkiLCAwIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcGNhOTUzOV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAicGNhOTUzOSIsCi0JfSwKLQkucHJvYmUJCT0gcGNhOTUzOV9wcm9iZSwKLQkucmVtb3ZlCQk9IHBjYTk1MzlfcmVtb3ZlLAotCS5pZF90YWJsZQk9IHBjYTk1MzlfaWQsCi0KLQkuZGV0ZWN0CQk9IHBjYTk1MzlfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcGNhOTUzOV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZwY2E5NTM5X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwY2E5NTM5X2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmcGNhOTUzOV9kcml2ZXIpOwotfQotCi1NT0RVTEVfQVVUSE9SKCJCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUENBOTUzOSBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQocGNhOTUzOV9pbml0KTsKLW1vZHVsZV9leGl0KHBjYTk1MzlfZXhpdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1NzQuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1NzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjMzA5OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTc0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKGMpIDIwMDAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAotICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERhbiBFYXRvbiA8ZGFuLmVhdG9uQHJvY2tldGxvZ2l4LmNvbT4KLSAgICBQb3J0ZWQgdG8gTGludXggMi42IGJ5IEF1cmVsaWVuIEphcm5vIDxhdXJlbDMyQGRlYmlhbi5vcmc+IHdpdGggCi0gICAgdGhlIGhlbHAgb2YgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+Ci0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICAgIAotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCi0vKiBBIGZldyBub3RlcyBhYm91dCB0aGUgUENGODU3NDoKLQotKiBUaGUgUENGODU3NCBpcyBhbiA4LWJpdCBJL08gZXhwYW5kZXIgZm9yIHRoZSBJMkMgYnVzIHByb2R1Y2VkIGJ5Ci0gIFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMuICBJdCBpcyBkZXNpZ25lZCB0byBwcm92aWRlIGEgYnl0ZSBJMkMKLSAgaW50ZXJmYWNlIHRvIHVwIHRvIDggc2VwYXJhdGUgZGV2aWNlcy4KLSAgCi0qIFRoZSBQQ0Y4NTc0IGFwcGVhcnMgYXMgYSB2ZXJ5IHNpbXBsZSBTTUJ1cyBkZXZpY2Ugd2hpY2ggY2FuIGJlCi0gIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIHdpdGggU01CVVMgYnl0ZSByZWFkL3dyaXRlIGFjY2Vzc2VzLgotCi0gIC0tRGFuCi0KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCi0vKiBBZGRyZXNzZXMgdG8gc2Nhbjogbm9uZSwgZGV2aWNlIGNhbid0IGJlIGRldGVjdGVkICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMihwY2Y4NTc0LCBwY2Y4NTc0YSk7Ci0KLS8qIEVhY2ggY2xpZW50IGhhcyB0aGlzIGFkZGl0aW9uYWwgZGF0YSAqLwotc3RydWN0IHBjZjg1NzRfZGF0YSB7Ci0JaW50IHdyaXRlOwkJCS8qIFJlbWVtYmVyIGxhc3Qgd3JpdHRlbiB2YWx1ZSAqLwotfTsKLQotc3RhdGljIHZvaWQgcGNmODU3NF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLQotLyogZm9sbG93aW5nIGFyZSB0aGUgc3lzZnMgY2FsbGJhY2sgZnVuY3Rpb25zICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KSk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihyZWFkLCBTX0lSVUdPLCBzaG93X3JlYWQsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGNmODU3NF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKHRvX2kyY19jbGllbnQoZGV2KSk7Ci0KLQlpZiAoZGF0YS0+d3JpdGUgPCAwKQotCQlyZXR1cm4gZGF0YS0+d3JpdGU7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+d3JpdGUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAotCQkJIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBwY2Y4NTc0X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCi0JaWYgKHZhbCA+IDB4ZmYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGF0YS0+d3JpdGUgPSB2YWw7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBkYXRhLT53cml0ZSk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIod3JpdGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3dyaXRlLCBzZXRfd3JpdGUpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGNmODU3NF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX3JlYWQuYXR0ciwKLQkmZGV2X2F0dHJfd3JpdGUuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2Y4NTc0X2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gcGNmODU3NF9hdHRyaWJ1dGVzLAotfTsKLQotLyoKLSAqIFJlYWwgY29kZQotICovCi0KLS8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBwY2Y4NTc0X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKLQljb25zdCBjaGFyICpjbGllbnRfbmFtZTsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogTm93LCB3ZSB3b3VsZCBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gQnV0IHRoZSBQQ0Y4NTc0IGlzIHBsYWlubHkKLQkgICBpbXBvc3NpYmxlIHRvIGRldGVjdCEgU3R1cGlkIGNoaXAuICovCi0KLQkvKiBEZXRlcm1pbmUgdGhlIGNoaXAgdHlwZSAqLwotCWlmIChraW5kIDw9IDApIHsKLQkJaWYgKGNsaWVudC0+YWRkciA+PSAweDM4ICYmIGNsaWVudC0+YWRkciA8PSAweDNmKQotCQkJa2luZCA9IHBjZjg1NzRhOwotCQllbHNlCi0JCQlraW5kID0gcGNmODU3NDsKLQl9Ci0KLQlpZiAoa2luZCA9PSBwY2Y4NTc0YSkKLQkJY2xpZW50X25hbWUgPSAicGNmODU3NGEiOwotCWVsc2UKLQkJY2xpZW50X25hbWUgPSAicGNmODU3NCI7Ci0Jc3RybGNweShpbmZvLT50eXBlLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2Y4NTc0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBwY2Y4NTc0X2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNmODU3NF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIFBDRjg1NzQgY2hpcCAqLwotCXBjZjg1NzRfaW5pdF9jbGllbnQoY2xpZW50KTsKLQotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGNmODU3NF9hdHRyX2dyb3VwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGV4aXRfZnJlZTsKLQlyZXR1cm4gMDsKLQotICAgICAgZXhpdF9mcmVlOgotCWtmcmVlKGRhdGEpOwotICAgICAgZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHBjZjg1NzRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGNmODU3NF9hdHRyX2dyb3VwKTsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIENhbGxlZCB3aGVuIHdlIGhhdmUgZm91bmQgYSBuZXcgUENGODU3NC4gKi8KLXN0YXRpYyB2b2lkIHBjZjg1NzRfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgcGNmODU3NF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JZGF0YS0+d3JpdGUgPSAtRUFHQUlOOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcGNmODU3NF9pZFtdID0gewotCXsgInBjZjg1NzQiLCAwIH0sCi0JeyAicGNmODU3NGEiLCAwIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcGNmODU3NF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAicGNmODU3NCIsCi0JfSwKLQkucHJvYmUJCT0gcGNmODU3NF9wcm9iZSwKLQkucmVtb3ZlCQk9IHBjZjg1NzRfcmVtb3ZlLAotCS5pZF90YWJsZQk9IHBjZjg1NzRfaWQsCi0KLQkuZGV0ZWN0CQk9IHBjZjg1NzRfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcGNmODU3NF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZwY2Y4NTc0X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwY2Y4NTc0X2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmcGNmODU3NF9kcml2ZXIpOwotfQotCi0KLU1PRFVMRV9BVVRIT1IKLSAgICAoIkZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sICIKLSAgICAgIlBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sICIKLSAgICAgIkRhbiBFYXRvbiA8ZGFuLmVhdG9uQHJvY2tldGxvZ2l4LmNvbT4gIgotICAgICAiYW5kIEF1cmVsaWVuIEphcm5vIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUENGODU3NCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQocGNmODU3NF9pbml0KTsKLW1vZHVsZV9leGl0KHBjZjg1NzRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTc1LmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTc1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZmQ3Y2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvcGNmODU3NS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gIHBjZjg1NzUuYwotCi0gIEFib3V0IHRoZSBQQ0Y4NTc1IGNoaXA6IHRoZSBQQ0Y4NTc1IGlzIGEgMTYtYml0IEkvTyBleHBhbmRlciBmb3IgdGhlIEkyQyBidXMKLSAgcHJvZHVjZWQgYnkgYS5vLiBQaGlsaXBzIFNlbWljb25kdWN0b3JzLgotCi0gIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEhlbm5lcmljaCwgQW5hbG9nIERldmljZXMgSW5jLgotICA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPgotICBCYXNlZCBvbiBwY2Y4NTc0LmMuCi0KLSAgQ29weXJpZ2h0IChjKSAyMDA3IEJhcnQgVmFuIEFzc2NoZSA8YmFydC52YW5hc3NjaGVAZ21haWwuY29tPi4KLSAgUG9ydGVkIHRoaXMgZHJpdmVyIGZyb20gdWNMaW51eCB0byB0aGUgbWFpbnN0cmVhbSBMaW51eCBrZXJuZWwuCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ICAvKiBremFsbG9jKCkgKi8KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPiAvKiBzeXNmc19jcmVhdGVfZ3JvdXAoKSAqLwotCi0vKiBBZGRyZXNzZXMgdG8gc2Nhbjogbm9uZSwgZGV2aWNlIGNhbid0IGJlIGRldGVjdGVkICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLQotLyogRWFjaCBjbGllbnQgaGFzIHRoaXMgYWRkaXRpb25hbCBkYXRhICovCi1zdHJ1Y3QgcGNmODU3NV9kYXRhIHsKLQlpbnQgd3JpdGU7CQkvKiBsYXN0IHdyaXR0ZW4gdmFsdWUsIG9yIGVycm9yIGNvZGUgKi8KLX07Ci0KLS8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgY2hhciAqYnVmKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0JdTE2IHZhbDsKLQl1OCBpb3Bpbl9zdGF0ZVsyXTsKLQotCWkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGlvcGluX3N0YXRlLCAyKTsKLQotCXZhbCA9IGlvcGluX3N0YXRlWzBdOwotCXZhbCB8PSBpb3Bpbl9zdGF0ZVsxXSA8PCA4OwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihyZWFkLCBTX0lSVUdPLCBzaG93X3JlYWQsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGNmODU3NV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGRhdGEtPndyaXRlIDwgMCkKLQkJcmV0dXJuIGRhdGEtPndyaXRlOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT53cml0ZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHBjZjg1NzVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci0JdTggaW9waW5fc3RhdGVbMl07Ci0KLQlpZiAodmFsID4gMHhmZmZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRhdGEtPndyaXRlID0gdmFsOwotCi0JaW9waW5fc3RhdGVbMF0gPSB2YWwgJiAweEZGOwotCWlvcGluX3N0YXRlWzFdID0gdmFsID4+IDg7Ci0KLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBpb3Bpbl9zdGF0ZSwgMik7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUih3cml0ZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfd3JpdGUsIHNldF93cml0ZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2Y4NTc1X2F0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfcmVhZC5hdHRyLAotCSZkZXZfYXR0cl93cml0ZS5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjZjg1NzVfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBwY2Y4NTc1X2F0dHJpYnV0ZXMsCi19OwotCi0vKgotICogUmVhbCBjb2RlCi0gKi8KLQotLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IHBjZjg1NzVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19JMkMpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGRldGVjdCB3aGV0aGVyIHRoZSBjaGlwIGF0IHRoZSBzcGVjaWZpZWQKLQkgICBhZGRyZXNzIHJlYWxseSBpcyBhIFBDRjg1NzUgY2hpcC4gSG93ZXZlciwgdGhlcmUgaXMgbm8gbWV0aG9kIGtub3duCi0JICAgdG8gZGV0ZWN0IHdoZXRoZXIgYW4gSTJDIGNoaXAgaXMgYSBQQ0Y4NTc1IG9yIGFueSBvdGhlciBJMkMgY2hpcC4gKi8KLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgInBjZjg1NzUiLCBJMkNfTkFNRV9TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjZjg1NzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHBjZjg1NzVfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwotCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2Y4NTc1X2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0OwotCX0KLQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwotCWRhdGEtPndyaXRlID0gLUVBR0FJTjsKLQotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGNmODU3NV9hdHRyX2dyb3VwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGV4aXRfZnJlZTsKLQotCXJldHVybiAwOwotCi1leGl0X2ZyZWU6Ci0Ja2ZyZWUoZGF0YSk7Ci1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcGNmODU3NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwY2Y4NTc1X2F0dHJfZ3JvdXApOwotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHBjZjg1NzVfaWRbXSA9IHsKLQl7ICJwY2Y4NTc1IiwgMCB9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBjZjg1NzVfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJwY2Y4NTc1IiwKLQl9LAotCS5wcm9iZQkJPSBwY2Y4NTc1X3Byb2JlLAotCS5yZW1vdmUJCT0gcGNmODU3NV9yZW1vdmUsCi0JLmlkX3RhYmxlCT0gcGNmODU3NV9pZCwKLQotCS5kZXRlY3QJCT0gcGNmODU3NV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwY2Y4NTc1X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnBjZjg1NzVfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHBjZjg1NzVfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZwY2Y4NTc1X2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSGVubmVyaWNoIDxoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmc+LCAiCi0JICAgICAgIkJhcnQgVmFuIEFzc2NoZSA8YmFydC52YW5hc3NjaGVAZ21haWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJwY2Y4NTc1IGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfaW5pdChwY2Y4NTc1X2luaXQpOwotbW9kdWxlX2V4aXQocGNmODU3NV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL3RzbDI1NTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RzbDI1NTAuYwppbmRleCBiOTZmMzAyLi5hYTk2YmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy90c2wyNTUwLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvdHNsMjU1MC5jCkBAIC0yNCwxMCArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNkZWZpbmUgVFNMMjU1MF9EUlZfTkFNRQkidHNsMjU1MCIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIxLjEuMiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIxLjIiCiAKIC8qCiAgKiBEZWZpbmVzCkBAIC05NiwzMiArOTUsMTMgQEAKIAogc3RhdGljIGludCB0c2wyNTUwX2dldF9hZGNfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY21kKQogewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCWludCBsb29wID0gMCwgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JLyoKLQkgKiBSZWFkIEFEQyBjaGFubmVsIHdhaXRpbmcgYXQgbW9zdCA0MDBtcyAoc2VlIGRhdGEgc2hlZXQgZm9yIGZ1cnRoZXIKLQkgKiBpbmZvKS4KLQkgKiBUbyBhdm9pZCBsb25nIGJ1c3kgd2FpdCB3ZSBzcGluIGZvciBmZXcgbWlsbGlzZWNvbmRzIHRoZW4KLQkgKiBzdGFydCBzbGVlcGluZy4KLQkgKi8KLQllbmQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg0MDApOwotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpKSB7Ci0JCWkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgY21kKTsKLQotCQlpZiAobG9vcCsrIDwgNSkKLQkJCW1kZWxheSgxKTsKLQkJZWxzZQotCQkJbXNsZWVwKDEpOwotCi0JCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCQllbHNlIGlmIChyZXQgJiAweDAwODApCi0JCQlicmVhazsKLQl9CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY21kKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlpZiAoIShyZXQgJiAweDgwKSkKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiByZXQgJiAweDdmOwkvKiByZW1vdmUgdGhlICJ2YWxpZCIgYml0ICovCiB9CiAKQEAgLTI4NSw4ICsyNjUsNiBAQAogCQlyZXR1cm4gcmV0OwogCWNoMCA9IHJldDsKIAotCW1kZWxheSgxKTsKLQogCXJldCA9IHRzbDI1NTBfZ2V0X2FkY192YWx1ZShjbGllbnQsIFRTTDI1NTBfUkVBRF9BREMxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTM0NSwxMSArMzIzLDEwIEBACiAJICogUHJvYmUgdGhlIGNoaXAuIFRvIGRvIHNvIHdlIHRyeSB0byBwb3dlciB1cCB0aGUgZGV2aWNlIGFuZCB0aGVuIHRvCiAJICogcmVhZCBiYWNrIHRoZSAweDAzIGNvZGUKIAkgKi8KLQllcnIgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIFRTTDI1NTBfUE9XRVJfVVApOworCWVyciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFRTTDI1NTBfUE9XRVJfVVApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCW1kZWxheSgxKTsKLQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpICE9IFRTTDI1NTBfUE9XRVJfVVApCisJaWYgKGVyciAhPSBUU0wyNTUwX1BPV0VSX1VQKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlkYXRhLT5wb3dlcl9zdGF0ZSA9IDE7CiAKQEAgLTM3NCw3ICszNTEsOCBAQAogCXN0cnVjdCB0c2wyNTUwX2RhdGEgKmRhdGE7CiAJaW50ICpvcG1vZGUsIGVyciA9IDA7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEUpKSB7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFCisJCQkJCSAgICB8IEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggMGU0NWMyOS4uOGQ4MGZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC00Niw2ICs0Niw3IEBACiBzdGF0aWMgREVGSU5FX0lEUihpMmNfYWRhcHRlcl9pZHIpOwogc3RhdGljIExJU1RfSEVBRCh1c2Vyc3BhY2VfZGV2aWNlcyk7CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgaTJjX2NsaWVudF90eXBlOwogc3RhdGljIGludCBpMmNfY2hlY2tfYWRkcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKTsKIHN0YXRpYyBpbnQgaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIpOwogCkBAIC02NCw5ICs2NSwxMyBAQAogCiBzdGF0aWMgaW50IGkyY19kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGkyY19kcml2ZXIJKmRyaXZlciA9IHRvX2kyY19kcml2ZXIoZHJ2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgaTJjX2RyaXZlcgkqZHJpdmVyOwogCisJaWYgKCFjbGllbnQpCisJCXJldHVybiAwOworCisJZHJpdmVyID0gdG9faTJjX2RyaXZlcihkcnYpOwogCS8qIG1hdGNoIG9uIGFuIGlkIHRhYmxlIGlmIHRoZXJlIGlzIG9uZSAqLwogCWlmIChkcml2ZXItPmlkX3RhYmxlKQogCQlyZXR1cm4gaTJjX21hdGNoX2lkKGRyaXZlci0+aWRfdGFibGUsIGNsaWVudCkgIT0gTlVMTDsKQEAgLTk0LDEwICs5OSwxNCBAQAogCiBzdGF0aWMgaW50IGkyY19kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGkyY19kcml2ZXIJKmRyaXZlciA9IHRvX2kyY19kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSBpMmNfdmVyaWZ5X2NsaWVudChkZXYpOworCXN0cnVjdCBpMmNfZHJpdmVyCSpkcml2ZXI7CiAJaW50IHN0YXR1czsKIAorCWlmICghY2xpZW50KQorCQlyZXR1cm4gMDsKKworCWRyaXZlciA9IHRvX2kyY19kcml2ZXIoZGV2LT5kcml2ZXIpOwogCWlmICghZHJpdmVyLT5wcm9iZSB8fCAhZHJpdmVyLT5pZF90YWJsZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2xpZW50LT5kcml2ZXIgPSBkcml2ZXI7CkBAIC0xMTQsMTEgKzEyMywxMSBAQAogCiBzdGF0aWMgaW50IGkyY19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSBpMmNfdmVyaWZ5X2NsaWVudChkZXYpOwogCXN0cnVjdCBpMmNfZHJpdmVyCSpkcml2ZXI7CiAJaW50CQkJc3RhdHVzOwogCi0JaWYgKCFkZXYtPmRyaXZlcikKKwlpZiAoIWNsaWVudCB8fCAhZGV2LT5kcml2ZXIpCiAJCXJldHVybiAwOwogCiAJZHJpdmVyID0gdG9faTJjX2RyaXZlcihkZXYtPmRyaXZlcik7CkBAIC0xMzYsMzcgKzE0NSw0MCBAQAogCiBzdGF0aWMgdm9pZCBpMmNfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyOwogCi0JaWYgKCFkZXYtPmRyaXZlcikKKwlpZiAoIWNsaWVudCB8fCAhZGV2LT5kcml2ZXIpCiAJCXJldHVybjsKIAlkcml2ZXIgPSB0b19pMmNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlpZiAoZHJpdmVyLT5zaHV0ZG93bikKLQkJZHJpdmVyLT5zaHV0ZG93bih0b19pMmNfY2xpZW50KGRldikpOworCQlkcml2ZXItPnNodXRkb3duKGNsaWVudCk7CiB9CiAKIHN0YXRpYyBpbnQgaTJjX2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7CiAJc3RydWN0IGkyY19kcml2ZXIgKmRyaXZlcjsKIAotCWlmICghZGV2LT5kcml2ZXIpCisJaWYgKCFjbGllbnQgfHwgIWRldi0+ZHJpdmVyKQogCQlyZXR1cm4gMDsKIAlkcml2ZXIgPSB0b19pMmNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlpZiAoIWRyaXZlci0+c3VzcGVuZCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGRyaXZlci0+c3VzcGVuZCh0b19pMmNfY2xpZW50KGRldiksIG1lc2cpOworCXJldHVybiBkcml2ZXItPnN1c3BlbmQoY2xpZW50LCBtZXNnKTsKIH0KIAogc3RhdGljIGludCBpMmNfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7CiAJc3RydWN0IGkyY19kcml2ZXIgKmRyaXZlcjsKIAotCWlmICghZGV2LT5kcml2ZXIpCisJaWYgKCFjbGllbnQgfHwgIWRldi0+ZHJpdmVyKQogCQlyZXR1cm4gMDsKIAlkcml2ZXIgPSB0b19pMmNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlpZiAoIWRyaXZlci0+cmVzdW1lKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gZHJpdmVyLT5yZXN1bWUodG9faTJjX2NsaWVudChkZXYpKTsKKwlyZXR1cm4gZHJpdmVyLT5yZXN1bWUoY2xpZW50KTsKIH0KIAogc3RhdGljIHZvaWQgaTJjX2NsaWVudF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0xNzUsMTAgKzE4NywxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotc2hvd19jbGllbnRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNsaWVudC0+bmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRldi0+dHlwZSA9PSAmaTJjX2NsaWVudF90eXBlID8KKwkJICAgICAgIHRvX2kyY19jbGllbnQoZGV2KS0+bmFtZSA6IHRvX2kyY19hZGFwdGVyKGRldiktPm5hbWUpOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtMTg4LDE4ICsyMDAsMjggQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlcyVzXG4iLCBJMkNfTU9EVUxFX1BSRUZJWCwgY2xpZW50LT5uYW1lKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGkyY19kZXZfYXR0cnNbXSA9IHsKLQlfX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19jbGllbnRfbmFtZSwgTlVMTCksCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgc2hvd19tb2RhbGlhcywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppMmNfZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX25hbWUuYXR0ciwKIAkvKiBtb2RhbGlhcyBoZWxwcyBjb2xkcGx1ZzogIG1vZHByb2JlICQoY2F0IC4uLi9tb2RhbGlhcykgKi8KLQlfX0FUVFIobW9kYWxpYXMsIFNfSVJVR08sIHNob3dfbW9kYWxpYXMsIE5VTEwpLAotCXsgfSwKKwkmZGV2X2F0dHJfbW9kYWxpYXMuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpMmNfZGV2X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzCQk9IGkyY19kZXZfYXR0cnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqaTJjX2Rldl9hdHRyX2dyb3Vwc1tdID0geworCSZpMmNfZGV2X2F0dHJfZ3JvdXAsCisJTlVMTAogfTsKIAogc3RydWN0IGJ1c190eXBlIGkyY19idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAiaTJjIiwKLQkuZGV2X2F0dHJzCT0gaTJjX2Rldl9hdHRycywKIAkubWF0Y2gJCT0gaTJjX2RldmljZV9tYXRjaCwKLQkudWV2ZW50CQk9IGkyY19kZXZpY2VfdWV2ZW50LAogCS5wcm9iZQkJPSBpMmNfZGV2aWNlX3Byb2JlLAogCS5yZW1vdmUJCT0gaTJjX2RldmljZV9yZW1vdmUsCiAJLnNodXRkb3duCT0gaTJjX2RldmljZV9zaHV0ZG93biwKQEAgLTIwOCw2ICsyMzAsMTIgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpMmNfYnVzX3R5cGUpOwogCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGkyY19jbGllbnRfdHlwZSA9IHsKKwkuZ3JvdXBzCQk9IGkyY19kZXZfYXR0cl9ncm91cHMsCisJLnVldmVudAkJPSBpMmNfZGV2aWNlX3VldmVudCwKKwkucmVsZWFzZQk9IGkyY19jbGllbnRfZGV2X3JlbGVhc2UsCit9OworCiAKIC8qKgogICogaTJjX3ZlcmlmeV9jbGllbnQgLSByZXR1cm4gcGFyYW1ldGVyIGFzIGkyY19jbGllbnQsIG9yIE5VTEwKQEAgLTIyMCw3ICsyNDgsNyBAQAogICovCiBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX3ZlcmlmeV9jbGllbnQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiAoZGV2LT5idXMgPT0gJmkyY19idXNfdHlwZSkKKwlyZXR1cm4gKGRldi0+dHlwZSA9PSAmaTJjX2NsaWVudF90eXBlKQogCQkJPyB0b19pMmNfY2xpZW50KGRldikKIAkJCTogTlVMTDsKIH0KQEAgLTI3Myw3ICszMDEsNyBAQAogCiAJY2xpZW50LT5kZXYucGFyZW50ID0gJmNsaWVudC0+YWRhcHRlci0+ZGV2OwogCWNsaWVudC0+ZGV2LmJ1cyA9ICZpMmNfYnVzX3R5cGU7Ci0JY2xpZW50LT5kZXYucmVsZWFzZSA9IGkyY19jbGllbnRfZGV2X3JlbGVhc2U7CisJY2xpZW50LT5kZXYudHlwZSA9ICZpMmNfY2xpZW50X3R5cGU7CiAKIAlkZXZfc2V0X25hbWUoJmNsaWVudC0+ZGV2LCAiJWQtJTA0eCIsIGkyY19hZGFwdGVyX2lkKGFkYXApLAogCQkgICAgIGNsaWVudC0+YWRkcik7CkBAIC0zNjgsMTMgKzM5Niw2IEBACiAJY29tcGxldGUoJmFkYXAtPmRldl9yZWxlYXNlZCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X2FkYXB0ZXJfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gdG9faTJjX2FkYXB0ZXIoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYWRhcC0+bmFtZSk7Ci19Ci0KIC8qCiAgKiBMZXQgdXNlcnMgaW5zdGFudGlhdGUgSTJDIGRldmljZXMgdGhyb3VnaCBzeXNmcy4gVGhpcyBjYW4gYmUgdXNlZCB3aGVuCiAgKiBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBjb2RlIGRvZXNuJ3QgY29udGFpbiB0aGUgcHJvcGVyIGRhdGEgZm9yCkBAIC00OTMsMTkgKzUxNCwzNCBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpMmNfYWRhcHRlcl9hdHRyc1tdID0gewotCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X2FkYXB0ZXJfbmFtZSwgTlVMTCksCi0JX19BVFRSKG5ld19kZXZpY2UsIFNfSVdVU1IsIE5VTEwsIGkyY19zeXNmc19uZXdfZGV2aWNlKSwKLQlfX0FUVFIoZGVsZXRlX2RldmljZSwgU19JV1VTUiwgTlVMTCwgaTJjX3N5c2ZzX2RlbGV0ZV9kZXZpY2UpLAotCXsgfSwKK3N0YXRpYyBERVZJQ0VfQVRUUihuZXdfZGV2aWNlLCBTX0lXVVNSLCBOVUxMLCBpMmNfc3lzZnNfbmV3X2RldmljZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsZXRlX2RldmljZSwgU19JV1VTUiwgTlVMTCwgaTJjX3N5c2ZzX2RlbGV0ZV9kZXZpY2UpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTJjX2FkYXB0ZXJfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAorCSZkZXZfYXR0cl9uZXdfZGV2aWNlLmF0dHIsCisJJmRldl9hdHRyX2RlbGV0ZV9kZXZpY2UuYXR0ciwKKwlOVUxMCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsYXNzIGkyY19hZGFwdGVyX2NsYXNzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9ICJpMmMtYWRhcHRlciIsCi0JLmRldl9hdHRycwkJPSBpMmNfYWRhcHRlcl9hdHRycywKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGkyY19hZGFwdGVyX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzCQk9IGkyY19hZGFwdGVyX2F0dHJzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmkyY19hZGFwdGVyX2F0dHJfZ3JvdXBzW10gPSB7CisJJmkyY19hZGFwdGVyX2F0dHJfZ3JvdXAsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBpMmNfYWRhcHRlcl90eXBlID0geworCS5ncm91cHMJCT0gaTJjX2FkYXB0ZXJfYXR0cl9ncm91cHMsCisJLnJlbGVhc2UJPSBpMmNfYWRhcHRlcl9kZXZfcmVsZWFzZSwKK307CisKKyNpZmRlZiBDT05GSUdfSTJDX0NPTVBBVAorc3RhdGljIHN0cnVjdCBjbGFzc19jb21wYXQgKmkyY19hZGFwdGVyX2NvbXBhdF9jbGFzczsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBpMmNfc2Nhbl9zdGF0aWNfYm9hcmRfaW5mbyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGkyY19kZXZpbmZvCSpkZXZpbmZvOwpAQCAtNTU1LDE0ICs1OTEsMjIgQEAKIAkJYWRhcC0+dGltZW91dCA9IEhaOwogCiAJZGV2X3NldF9uYW1lKCZhZGFwLT5kZXYsICJpMmMtJWQiLCBhZGFwLT5ucik7Ci0JYWRhcC0+ZGV2LnJlbGVhc2UgPSAmaTJjX2FkYXB0ZXJfZGV2X3JlbGVhc2U7Ci0JYWRhcC0+ZGV2LmNsYXNzID0gJmkyY19hZGFwdGVyX2NsYXNzOworCWFkYXAtPmRldi5idXMgPSAmaTJjX2J1c190eXBlOworCWFkYXAtPmRldi50eXBlID0gJmkyY19hZGFwdGVyX3R5cGU7CiAJcmVzID0gZGV2aWNlX3JlZ2lzdGVyKCZhZGFwLT5kZXYpOwogCWlmIChyZXMpCiAJCWdvdG8gb3V0X2xpc3Q7CiAKIAlkZXZfZGJnKCZhZGFwLT5kZXYsICJhZGFwdGVyIFslc10gcmVnaXN0ZXJlZFxuIiwgYWRhcC0+bmFtZSk7CiAKKyNpZmRlZiBDT05GSUdfSTJDX0NPTVBBVAorCXJlcyA9IGNsYXNzX2NvbXBhdF9jcmVhdGVfbGluayhpMmNfYWRhcHRlcl9jb21wYXRfY2xhc3MsICZhZGFwLT5kZXYsCisJCQkJICAgICAgIGFkYXAtPmRldi5wYXJlbnQpOworCWlmIChyZXMpCisJCWRldl93YXJuKCZhZGFwLT5kZXYsCisJCQkgIkZhaWxlZCB0byBjcmVhdGUgY29tcGF0aWJpbGl0eSBjbGFzcyBsaW5rXG4iKTsKKyNlbmRpZgorCiAJLyogY3JlYXRlIHByZS1kZWNsYXJlZCBkZXZpY2Ugbm9kZXMgKi8KIAlpZiAoYWRhcC0+bnIgPCBfX2kyY19maXJzdF9keW5hbWljX2J1c19udW0pCiAJCWkyY19zY2FuX3N0YXRpY19ib2FyZF9pbmZvKGFkYXApOwpAQCAtNzQxLDYgKzc4NSwxMSBAQAogCSAgIGNoZWNraW5nIHRoZSByZXR1cm5lZCB2YWx1ZS4gKi8KIAlyZXMgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmFkYXAtPmRldiwgTlVMTCwgX191bnJlZ2lzdGVyX2NsaWVudCk7CiAKKyNpZmRlZiBDT05GSUdfSTJDX0NPTVBBVAorCWNsYXNzX2NvbXBhdF9yZW1vdmVfbGluayhpMmNfYWRhcHRlcl9jb21wYXRfY2xhc3MsICZhZGFwLT5kZXYsCisJCQkJIGFkYXAtPmRldi5wYXJlbnQpOworI2VuZGlmCisKIAkvKiBjbGVhbiB1cCB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gKi8KIAlpbml0X2NvbXBsZXRpb24oJmFkYXAtPmRldl9yZWxlYXNlZCk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmFkYXAtPmRldik7CkBAIC03NjgsOSArODE3LDEzIEBACiAKIHN0YXRpYyBpbnQgX19hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoZGV2KTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IGkyY19kcml2ZXIgKmRyaXZlciA9IGRhdGE7CiAKKwlpZiAoZGV2LT50eXBlICE9ICZpMmNfYWRhcHRlcl90eXBlKQorCQlyZXR1cm4gMDsKKwlhZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoZGV2KTsKKwogCWkyY19kZXRlY3QoYWRhcHRlciwgZHJpdmVyKTsKIAogCS8qIExlZ2FjeSBkcml2ZXJzIHNjYW4gaTJjIGJ1c3NlcyBkaXJlY3RseSAqLwpAQCAtODA5LDggKzg2Miw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRyaXZlci0+Y2xpZW50cyk7CiAJLyogV2FsayB0aGUgYWRhcHRlcnMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50ICovCiAJbXV0ZXhfbG9jaygmY29yZV9sb2NrKTsKLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJmkyY19hZGFwdGVyX2NsYXNzLCBOVUxMLCBkcml2ZXIsCi0JCQkgICAgICBfX2F0dGFjaF9hZGFwdGVyKTsKKwlidXNfZm9yX2VhY2hfZGV2KCZpMmNfYnVzX3R5cGUsIE5VTEwsIGRyaXZlciwgX19hdHRhY2hfYWRhcHRlcik7CiAJbXV0ZXhfdW5sb2NrKCZjb3JlX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC04MTksMTAgKzg3MSwxNCBAQAogCiBzdGF0aWMgaW50IF9fZGV0YWNoX2FkYXB0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGRldik7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIgPSBkYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsICpfbjsKIAorCWlmIChkZXYtPnR5cGUgIT0gJmkyY19hZGFwdGVyX3R5cGUpCisJCXJldHVybiAwOworCWFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihkZXYpOworCiAJLyogUmVtb3ZlIHRoZSBkZXZpY2VzIHdlIGNyZWF0ZWQgb3Vyc2VsdmVzIGFzIHRoZSByZXN1bHQgb2YgaGFyZHdhcmUKIAkgKiBwcm9iaW5nICh1c2luZyBhIGRyaXZlcidzIGRldGVjdCBtZXRob2QpICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsaWVudCwgX24sICZkcml2ZXItPmNsaWVudHMsIGRldGVjdGVkKSB7CkBAIC04NTAsOCArOTA2LDcgQEAKIHZvaWQgaTJjX2RlbF9kcml2ZXIoc3RydWN0IGkyY19kcml2ZXIgKmRyaXZlcikKIHsKIAltdXRleF9sb2NrKCZjb3JlX2xvY2spOwotCWNsYXNzX2Zvcl9lYWNoX2RldmljZSgmaTJjX2FkYXB0ZXJfY2xhc3MsIE5VTEwsIGRyaXZlciwKLQkJCSAgICAgIF9fZGV0YWNoX2FkYXB0ZXIpOworCWJ1c19mb3JfZWFjaF9kZXYoJmkyY19idXNfdHlwZSwgTlVMTCwgZHJpdmVyLCBfX2RldGFjaF9hZGFwdGVyKTsKIAltdXRleF91bmxvY2soJmNvcmVfbG9jayk7CiAKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyLT5kcml2ZXIpOwpAQCAtOTQwLDE3ICs5OTUsMjMgQEAKIAlyZXR2YWwgPSBidXNfcmVnaXN0ZXIoJmkyY19idXNfdHlwZSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQlyZXR2YWwgPSBjbGFzc19yZWdpc3RlcigmaTJjX2FkYXB0ZXJfY2xhc3MpOwotCWlmIChyZXR2YWwpCisjaWZkZWYgQ09ORklHX0kyQ19DT01QQVQKKwlpMmNfYWRhcHRlcl9jb21wYXRfY2xhc3MgPSBjbGFzc19jb21wYXRfcmVnaXN0ZXIoImkyYy1hZGFwdGVyIik7CisJaWYgKCFpMmNfYWRhcHRlcl9jb21wYXRfY2xhc3MpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBidXNfZXJyOworCX0KKyNlbmRpZgogCXJldHZhbCA9IGkyY19hZGRfZHJpdmVyKCZkdW1teV9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gY2xhc3NfZXJyOwogCXJldHVybiAwOwogCiBjbGFzc19lcnI6Ci0JY2xhc3NfdW5yZWdpc3RlcigmaTJjX2FkYXB0ZXJfY2xhc3MpOworI2lmZGVmIENPTkZJR19JMkNfQ09NUEFUCisJY2xhc3NfY29tcGF0X3VucmVnaXN0ZXIoaTJjX2FkYXB0ZXJfY29tcGF0X2NsYXNzKTsKIGJ1c19lcnI6CisjZW5kaWYKIAlidXNfdW5yZWdpc3RlcigmaTJjX2J1c190eXBlKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtOTU4LDcgKzEwMTksOSBAQAogc3RhdGljIHZvaWQgX19leGl0IGkyY19leGl0KHZvaWQpCiB7CiAJaTJjX2RlbF9kcml2ZXIoJmR1bW15X2RyaXZlcik7Ci0JY2xhc3NfdW5yZWdpc3RlcigmaTJjX2FkYXB0ZXJfY2xhc3MpOworI2lmZGVmIENPTkZJR19JMkNfQ09NUEFUCisJY2xhc3NfY29tcGF0X3VucmVnaXN0ZXIoaTJjX2FkYXB0ZXJfY29tcGF0X2NsYXNzKTsKKyNlbmRpZgogCWJ1c191bnJlZ2lzdGVyKCZpMmNfYnVzX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCBjNTA5Yzk5Li5jMGNmNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTExNCw4ICsxMTQsNiBAQAogCXVuc2lnbmVkIGludCBidXMsIGRldm51bSwgZnVuYzsKIAlhY3BpX2ludGVnZXIgYWRkcjsKIAlhY3BpX2hhbmRsZSBkZXZfaGFuZGxlOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7Lmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSLAotCQkJCQkucG9pbnRlciA9IE5VTEx9OwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbwkqZGluZm8gPSBOVUxMOwogCWludCByZXQgPSAtRU5PREVWOwpAQCAtMTM0LDEyICsxMzIsMTEgQEAKIAkJZ290byBlcnI7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oZGV2X2hhbmRsZSwgJmJ1ZmZlcik7CisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oZGV2X2hhbmRsZSwgJmRpbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJREVCUFJJTlQoImdldF9vYmplY3RfaW5mbyBmb3IgZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyOwogCX0KLQlkaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwogCWlmIChkaW5mbyAmJiAoZGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9BRFIpICYmCiAJICAgIGRpbmZvLT5hZGRyZXNzID09IGFkZHIpIHsKIAkJKnBjaWRldmZuID0gYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggYjc5Y2E0MS4uNjQyMDdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTE2ODYsNyArMTY4Niw3IEBACiAJcmV0dXJuICAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZWNkX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlY2Rfb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCQk9IGlkZWNkX29wZW4sCiAJLnJlbGVhc2UJCT0gaWRlY2RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKaW5kZXggMjE0MTE5MC4uNzUzMjQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCXJldHVybiBkcml2ZS0+ZGlza19vcHMtPmlvY3RsKGRyaXZlLCBiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlX2dkX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlX2dkX29wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkJPSBpZGVfZ2Rfb3BlbiwKIAkucmVsZWFzZQkJPSBpZGVfZ2RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggOGRlNDQyYy4uNjNjNTNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTEyMTIsNyArMTIxMiw3IEBACiB7CiAJaW50IGlkeCA9IC1FTk9FTlQ7CiAJdTggYm9vdGFibGUgPSAoZCAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT05fQk9PVEFCTEUpKSA/IDAgOiAxOwotCXU4IGkgPSAoZCAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19RRF8yTkRfUE9SVCkpID8gMSA6IDA7OworCXU4IGkgPSAoZCAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19RRF8yTkRfUE9SVCkpID8gMSA6IDA7CiAKIAkvKgogCSAqIENsYWltIGFuIHVuYXNzaWduZWQgc2xvdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IDlkNmY2MmIuLjU4ZmM5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMTkxMyw3ICsxOTEzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZXRhcGVfYmxvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGV0YXBlX2Jsb2NrX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gaWRldGFwZV9vcGVuLAogCS5yZWxlYXNlCT0gaWRldGFwZV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdW1jODY3Mi5jIGIvZHJpdmVycy9pZGUvdW1jODY3Mi5jCmluZGV4IDA2MDhkNDEuLjYwZjkzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3VtYzg2NzIuYworKysgYi9kcml2ZXJzL2lkZS91bWM4NjcyLmMKQEAgLTE3MCw5ICsxNzAsOSBAQAogCQlnb3RvIG91dDsKIAogCWlmICh1bWM4NjcyX3Byb2JlKCkgPT0gMCkKLQkJcmV0dXJuIDA7OworCQlyZXR1cm4gMDsKIG91dDoKLQlyZXR1cm4gLUVOT0RFVjs7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIG1vZHVsZV9pbml0KHVtYzg2NzJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCmluZGV4IGRhNWY4ODIuLjBiYzNkNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCkBAIC0yMjcyLDggKzIyNzIsMTAgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JaWYgKCFtdXRleF90cnlsb2NrKCZmaS0+c3RhdGVfbXV0ZXgpKQorCWlmICghbXV0ZXhfdHJ5bG9jaygmZmktPnN0YXRlX211dGV4KSkgeworCQlmcmVlX3BlbmRpbmdfcmVxdWVzdChyZXEpOwogCQlyZXR1cm4gLUVBR0FJTjsKKwl9CiAKIAlzd2l0Y2ggKGZpLT5zdGF0ZSkgewogCWNhc2Ugb3BlbmVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCA1MmIyNWY4Li5mMTk5ODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtMzcyLDggKzM3Miw3IEBACiAJLyogRFZpQ08gTW9tb2JheSBGWC0zQSB3aXRoIFRTQjQyQUE5QSBicmlkZ2UgKi8gewogCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDAwMjgwMCwKIAkJLm1vZGVsCQkJPSAweDAwMDAwMCwKLQkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9ERUxBWV9JTlFVSVJZIHwKLQkJCQkJICBTQlAyX1dPUktBUk9VTkRfUE9XRVJfQ09ORElUSU9OLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EX1BPV0VSX0NPTkRJVElPTiwKIAl9LAogCS8qIEluaXRpbyBicmlkZ2VzLCBhY3R1YWxseSBvbmx5IG5lZWRlZCBmb3Igc29tZSBvbGRlciBvbmVzICovIHsKIAkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDAyMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jCmluZGV4IDc2NjNhMmEuLjc1NTBhNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jCkBAIC0yNDYzLDcgKzI0NjMsNyBAQAogCWludCByZXQ7CiAKIAllaGNhX21yX2xlbiA9IDA7Ci0JcmV0ID0gd2Fsa19tZW1vcnlfcmVzb3VyY2UoMCwgMVVMTCA8PCBNQVhfUEhZU01FTV9CSVRTLCBOVUxMLAorCXJldCA9IHdhbGtfc3lzdGVtX3JhbV9yYW5nZSgwLCAxVUxMIDw8IE1BWF9QSFlTTUVNX0JJVFMsIE5VTEwsCiAJCQkJICAgZWhjYV9jcmVhdGVfYnVzbWFwX2NhbGxiYWNrKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKaW5kZXggMDI4MzFhZC4uNGJkMzljOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCkBAIC04MDksNyArODA5LDcgQEAKICAqIGVycm9ycy4gIFdlIG9ubHkgYm90aGVyIHRvIGRvIHRoaXMgYXQgbG9hZCB0aW1lLCBiZWNhdXNlIGl0J3MgT0sgaWYKICAqIGl0IGhhcHBlbmVkIGJlZm9yZSB3ZSB3ZXJlIGxvYWRlZCAoZmlyc3QgdGltZSBhZnRlciBib290L3Jlc2V0KSwKICAqIGJ1dCBhbnkgdGltZSBhZnRlciB0aGF0LCBpdCdzIGZhdGFsIGFueXdheS4gIEFsc28gbmVlZCB0byBub3QgY2hlY2sKLSAqIGZvciBmb3IgdXBwZXIgYnl0ZSBlcnJvcnMgaWYgd2UgYXJlIGluIDggYml0IG1vZGUsIHNvIGZpZ3VyZSBvdXQKKyAqIGZvciB1cHBlciBieXRlIGVycm9ycyBpZiB3ZSBhcmUgaW4gOCBiaXQgbW9kZSwgc28gZmlndXJlIG91dAogICogb3VyIHdpZHRoLiAgRm9yIG5vdywgYXQgbGVhc3QsIGFsc28gY29tcGxhaW4gaWYgaXQncyA4IGJpdC4KICAqLwogc3RhdGljIHZvaWQgc2xhdmVfb3JfcHJpX2JsayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDg1MTc5MWQuLjU1NjUzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTEyNjUsMTQgKzEyNjUsMTQgQEAKIAkudWV2ZW50CQk9IGlucHV0X2Rldl91ZXZlbnQsCiB9OwogCi1zdGF0aWMgY2hhciAqaW5wdXRfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKmlucHV0X2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiaW5wdXQvJXMiLCBkZXZfbmFtZShkZXYpKTsKIH0KIAogc3RydWN0IGNsYXNzIGlucHV0X2NsYXNzID0gewogCS5uYW1lCQk9ICJpbnB1dCIsCi0JLm5vZGVuYW1lCT0gaW5wdXRfbm9kZW5hbWUsCisJLmRldm5vZGUJPSBpbnB1dF9kZXZub2RlLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlucHV0X2NsYXNzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCmluZGV4IGM5NTIzZTQuLmFkYjA5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogfTsKIAogLyoKLSAqIFN5c3RlbS1zcGVjaWZpYyBrZXR5bWFwIGZpeHVwIHJvdXRpbmUKKyAqIFN5c3RlbS1zcGVjaWZpYyBrZXltYXAgZml4dXAgcm91dGluZQogICovCiBzdGF0aWMgdm9pZCAoKmF0a2JkX3BsYXRmb3JtX2ZpeHVwKShzdHJ1Y3QgYXRrYmQgKiwgY29uc3Qgdm9pZCAqZGF0YSk7CiBzdGF0aWMgdm9pZCAqYXRrYmRfcGxhdGZvcm1fZml4dXBfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKaW5kZXggMWE1MGJlMy4uNzZkNjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKQEAgLTIyMiw2ICsyMjIsMjIgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNnaV9idG5zLgogCitjb25maWcgSU5QVVRfV0lOQk9ORF9DSVIKKwl0cmlzdGF0ZSAiV2luYm9uZCBJUiByZW1vdGUgY29udHJvbCIKKwlkZXBlbmRzIG9uIFg4NiAmJiBQTlAKKwlzZWxlY3QgTEVEU19DTEFTUworCXNlbGVjdCBCSVRSRVZFUlNFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIElSIHJlbW90ZSBmdW5jdGlvbmFsaXR5IGZvdW5kCisJICBpbiBzb21lIFdpbmJvbmQgU3VwZXJJL08gY2hpcHMuIEN1cnJlbnRseSBvbmx5IHRoZSBXUENEMzc2SQorCSAgY2hpcCBpcyBzdXBwb3J0ZWQgKGluY2x1ZGVkIGluIHNvbWUgSW50ZWwgTWVkaWEgc2VyaWVzIG1vdGhlcmJvYXJkcykuCisKKwkgIElSIFJlY2VpdmUgYW5kIHdha2Utb24tSVIgZnJvbSBzdXNwZW5kIGFuZCBwb3dlci1vZmYgaXMgY3VycmVudGx5CisJICBzdXBwb3J0ZWQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIHdpbmJvbmRfY2lyLgorCiBjb25maWcgSFBfU0RDX1JUQwogCXRyaXN0YXRlICJIUCBTREMgUmVhbCBUaW1lIENsb2NrIgogCWRlcGVuZHMgb24gKEdTQyB8fCBIUDMwMCkgJiYgU0VSSU8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQppbmRleCBiZjRkYjYyLi5hOGI4NDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBACiBvYmotJChDT05GSUdfSU5QVVRfU1BBUkNTUEtSKQkJKz0gc3BhcmNzcGtyLm8KIG9iai0kKENPTkZJR19JTlBVVF9UV0w0MDMwX1BXUkJVVFRPTikJKz0gdHdsNDAzMC1wd3JidXR0b24ubwogb2JqLSQoQ09ORklHX0lOUFVUX1VJTlBVVCkJCSs9IHVpbnB1dC5vCitvYmotJChDT05GSUdfSU5QVVRfV0lOQk9ORF9DSVIpCQkrPSB3aW5ib25kLWNpci5vCiBvYmotJChDT05GSUdfSU5QVVRfV0lTVFJPTl9CVE5TKQkrPSB3aXN0cm9uX2J0bnMubwogb2JqLSQoQ09ORklHX0lOUFVUX1dNODMxWF9PTikJCSs9IHdtODMxeC1vbi5vCiBvYmotJChDT05GSUdfSU5QVVRfWUVBTElOSykJCSs9IHllYWxpbmsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzMwOWZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMKQEAgLTAsMCArMSwxNjE0IEBACisvKgorICogIHdpbmJvbmQtY2lyLmMgLSBEcml2ZXIgZm9yIHRoZSBDb25zdW1lciBJUiBmdW5jdGlvbmFsaXR5IG9mIFdpbmJvbmQKKyAqICAgICAgICAgICAgICAgICAgU3VwZXJJL08gY2hpcHMuCisgKgorICogIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgV2luYm9uZCBXUENEMzc2aSBjaGlwIChQTlAgaWQgV0VDMTAyMiksIGJ1dAorICogIGNvdWxkIHByb2JhYmx5IHN1cHBvcnQgb3RoZXJzIChXaW5ib25kIFdFQzEwMlgsIE5hdFNlbWksIGV0YykKKyAqICB3aXRoIG1pbm9yIG1vZGlmaWNhdGlvbnMuCisgKgorICogIE9yaWdpbmFsIEF1dGhvcjogRGF2aWQgSORyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgorICogICAgIENvcHlyaWdodCAoQykgMjAwOSBEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CisgKgorICogIERlZGljYXRlZCB0byBNYXRpbGRhLCBteSBuZXdib3JuIGRhdWdodGVyLCB3aXRob3V0IHdob3NlIGxvdmluZyBhdHRlbnRpb24KKyAqICB0aGlzIGRyaXZlciB3b3VsZCBoYXZlIGJlZW4gZmluaXNoZWQgaW4gaGFsZiB0aGUgdGltZSBhbmQgd2l0aCBhIGZyYWN0aW9uCisgKiAgb2YgdGhlIGJ1Z3MuCisgKgorICogIFdyaXR0ZW4gdXNpbmc6CisgKiAgICBvIFdpbmJvbmQgV1BDRDM3NkkgZGF0YXNoZWV0IGhlbHBmdWxseSBwcm92aWRlZCBieSBKZXNzZSBCYXJuZXMgYXQgSW50ZWwKKyAqICAgIG8gTmF0U2VtaSBQQzg3MzM4L1BDOTczMzggZGF0YXNoZWV0IChmb3IgdGhlIHNlcmlhbCBwb3J0IHN0dWZmKQorICogICAgbyBEU0RUIGR1bXBzCisgKgorICogIFN1cHBvcnRlZCBmZWF0dXJlczoKKyAqICAgIG8gUkM2CisgKiAgICBvIFdha2UtT24tQ0lSIGZ1bmN0aW9uYWxpdHkKKyAqCisgKiAgVG8gZG86CisgKiAgICBvIFRlc3QgTkVDIGFuZCBSQzUKKyAqCisgKiAgTGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlcjoKKyAqICAgIG8gTGVhcm5pbmcgKEkgaGF2ZSBuZWl0aGVyIHRoZSBoYXJkd2FyZSwgbm9yIHRoZSBuZWVkKQorICogICAgbyBJUiBUcmFuc21pdCAoaWJpZCkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIERSVk5BTUUgIndpbmJvbmQtY2lyIgorCisvKiBDRUlSIFdha2UtVXAgUmVnaXN0ZXJzLCByZWxhdGl2ZSB0byBkYXRhLT53YmFzZSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ1RMCTB4MDMgLyogQ0VJUiBSZWNlaXZlciBDb250cm9sCQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfU1RTCTB4MDQgLyogQ0VJUiBSZWNlaXZlciBTdGF0dXMJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTgkweDA1IC8qIENFSVIgUmVjZWl2ZXIgRXZlbnQgRW5hYmxlCSovCisjZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9DTlRMCTB4MDYgLyogQ0VJUiBSZWNlaXZlciBDb3VudGVyIExvdwkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ05USAkweDA3IC8qIENFSVIgUmVjZWl2ZXIgQ291bnRlciBIaWdoCSovCisjZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWAkweDA4IC8qIENFSVIgUmVjZWl2ZXIgSW5kZXgJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9EQVRBCTB4MDkgLyogQ0VJUiBSZWNlaXZlciBEYXRhCQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ1NMCTB4MEEgLyogQ0VJUiBSZS4gQ29tcGFyZSBTdHJsZW4JCSovCisjZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9DRkcxCTB4MEIgLyogQ0VJUiBSZS4gQ29uZmlndXJhdGlvbiAxCSovCisjZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9DRkcyCTB4MEMgLyogQ0VJUiBSZS4gQ29uZmlndXJhdGlvbiAyCSovCisKKy8qIENFSVIgRW5oYW5jZWQgRnVuY3Rpb25hbGl0eSBSZWdpc3RlcnMsIHJlbGF0aXZlIHRvIGRhdGEtPmViYXNlICAgICAgICovCisjZGVmaW5lIFdCQ0lSX1JFR19FQ0VJUl9DVFMJMHgwMCAvKiBFbmhhbmNlZCBJUiBDb250cm9sIFN0YXR1cwkqLworI2RlZmluZSBXQkNJUl9SRUdfRUNFSVJfQ0NUTAkweDAxIC8qIEluZnJhcmVkIENvdW50ZXIgQ29udHJvbAkqLworI2RlZmluZSBXQkNJUl9SRUdfRUNFSVJfQ05UX0xPCTB4MDIgLyogSW5mcmFyZWQgQ291bnRlciBMU0IJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19FQ0VJUl9DTlRfSEkJMHgwMyAvKiBJbmZyYXJlZCBDb3VudGVyIE1TQgkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX0VDRUlSX0lSRU0JMHgwNCAvKiBJbmZyYXJlZCBFbWl0dGVyIFN0YXR1cwkJKi8KKworLyogU1AzIEJhbmtlZCBSZWdpc3RlcnMsIHJlbGF0aXZlIHRvIGRhdGEtPnNiYXNlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19CU1IJMHgwMyAvKiBCYW5rIFNlbGVjdCwgYWxsIGJhbmtzCQkqLworCQkJCSAgICAgIC8qIEJhbmsgMAkJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX1JYREFUQQkweDAwIC8qIEZJRk8gUlggZGF0YSAocikJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfVFhEQVRBCTB4MDAgLyogRklGTyBUWCBkYXRhICh3KQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JRVIJMHgwMSAvKiBJbnRlcnJ1cHQgRW5hYmxlCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX0VJUgkweDAyIC8qIEV2ZW50IElkZW50aWZpY2F0aW9uIChyKQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX0ZDUgkweDAyIC8qIEZJRk8gQ29udHJvbCAodykJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfTUNSCTB4MDQgLyogTW9kZSBDb250cm9sCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19MU1IJMHgwNSAvKiBMaW5rIFN0YXR1cwkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfTVNSCTB4MDYgLyogTW9kZW0gU3RhdHVzCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19BU0NSCTB4MDcgLyogQXV4IFN0YXR1cyBhbmQgQ29udHJvbAkJKi8KKwkJCQkgICAgICAvKiBCYW5rIDIJCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19CR0RMCTB4MDAgLyogQmF1ZCBEaXZpc29yIExTQgkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19CR0RICTB4MDEgLyogQmF1ZCBEaXZpc29yIE1TQgkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19FWENSMQkweDAyIC8qIEV4dGVuZGVkIENvbnRyb2wgMQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19FWENSMgkweDA0IC8qIEV4dGVuZGVkIENvbnRyb2wgMgkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19UWEZMVgkweDA2IC8qIFRYIEZJRk8gTGV2ZWwJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX1JYRkxWCTB4MDcgLyogUlggRklGTyBMZXZlbAkJCSovCisJCQkJICAgICAgLyogQmFuayAzCQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfTVJJRAkweDAwIC8qIE1vZHVsZSBJZGVudGlmaWNhdGlvbgkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19TSF9MQ1IJMHgwMSAvKiBMQ1IgU2hhZG93CQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19TSF9GQ1IJMHgwMiAvKiBGQ1IgU2hhZG93CQkJKi8KKwkJCQkgICAgICAvKiBCYW5rIDQJCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUkNSMQkweDAyIC8qIEluZnJhcmVkIENvbnRyb2wgMQkJKi8KKwkJCQkgICAgICAvKiBCYW5rIDUJCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUkNSMgkweDA0IC8qIEluZnJhcmVkIENvbnRyb2wgMgkJKi8KKwkJCQkgICAgICAvKiBCYW5rIDYJCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUkNSMwkweDAwIC8qIEluZnJhcmVkIENvbnRyb2wgMwkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19TSVJfUFcJMHgwMiAvKiBTSVIgUHVsc2UgV2lkdGgJCSovCisJCQkJICAgICAgLyogQmFuayA3CQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJSWERDCTB4MDAgLyogSVIgUlggRGVtb2QgQ29udHJvbAkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUlRYTUMJMHgwMSAvKiBJUiBUWCBNb2QgQ29udHJvbAkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19SQ0NGRwkweDAyIC8qIENFSVIgQ29uZmlnCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUkNGRzEJMHgwNCAvKiBJbmZyYXJlZCBDb25maWcgMQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUkNGRzQJMHgwNyAvKiBJbmZyYXJlZCBDb25maWcgNAkJKi8KKworLyoKKyAqIE1hZ2ljIHZhbHVlcyBmb2xsb3cKKyAqLworCisvKiBObyBpbnRlcnJ1cHRzIGZvciBXQkNJUl9SRUdfU1AzX0lFUiBhbmQgV0JDSVJfUkVHX1NQM19FSVIgKi8KKyNkZWZpbmUgV0JDSVJfSVJRX05PTkUJCTB4MDAKKy8qIFJYIGRhdGEgYml0IGZvciBXQkNJUl9SRUdfU1AzX0lFUiBhbmQgV0JDSVJfUkVHX1NQM19FSVIgKi8KKyNkZWZpbmUgV0JDSVJfSVJRX1JYCQkweDAxCisvKiBPdmVyL1VuZGVyLWZsb3cgYml0IGZvciBXQkNJUl9SRUdfU1AzX0lFUiBhbmQgV0JDSVJfUkVHX1NQM19FSVIgKi8KKyNkZWZpbmUgV0JDSVJfSVJRX0VSUgkJMHgwNAorLyogTGVkIGVuYWJsZS9kaXNhYmxlIGJpdCBmb3IgV0JDSVJfUkVHX0VDRUlSX0NUUyAqLworI2RlZmluZSBXQkNJUl9MRURfRU5BQkxFCTB4ODAKKy8qIFJYIGRhdGEgYXZhaWxhYmxlIGJpdCBmb3IgV0JDSVJfUkVHX1NQM19MU1IgKi8KKyNkZWZpbmUgV0JDSVJfUlhfQVZBSUwJCTB4MDEKKy8qIFJYIGRpc2FibGUgYml0IGZvciBXQkNJUl9SRUdfU1AzX0FTQ1IgKi8KKyNkZWZpbmUgV0JDSVJfUlhfRElTQUJMRQkweDIwCisvKiBFeHRlbmRlZCBtb2RlIGVuYWJsZSBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfRVhDUjEgKi8KKyNkZWZpbmUgV0JDSVJfRVhUX0VOQUJMRQkweDAxCisvKiBTZWxlY3QgY29tcGFyZSByZWdpc3RlciBpbiBXQkNJUl9SRUdfV0NFSVJfSU5ERVggKGJpdHMgNSAmIDYpICovCisjZGVmaW5lIFdCQ0lSX1JFR1NFTF9DT01QQVJFCTB4MTAKKy8qIFNlbGVjdCBtYXNrIHJlZ2lzdGVyIGluIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWCAoYml0cyA1ICYgNikgKi8KKyNkZWZpbmUgV0JDSVJfUkVHU0VMX01BU0sJMHgyMAorLyogU3RhcnRpbmcgYWRkcmVzcyBvZiBzZWxlY3RlZCByZWdpc3RlciBpbiBXQkNJUl9SRUdfV0NFSVJfSU5ERVggKi8KKyNkZWZpbmUgV0JDSVJfUkVHX0FERFIwCQkweDAwCisKKy8qIFZhbGlkIGJhbmtzIGZvciB0aGUgU1AzIFVBUlQgKi8KK2VudW0gd2JjaXJfYmFuayB7CisJV0JDSVJfQkFOS18wICAgICAgICAgID0gMHgwMCwKKwlXQkNJUl9CQU5LXzEgICAgICAgICAgPSAweDgwLAorCVdCQ0lSX0JBTktfMiAgICAgICAgICA9IDB4RTAsCisJV0JDSVJfQkFOS18zICAgICAgICAgID0gMHhFNCwKKwlXQkNJUl9CQU5LXzQgICAgICAgICAgPSAweEU4LAorCVdCQ0lSX0JBTktfNSAgICAgICAgICA9IDB4RUMsCisJV0JDSVJfQkFOS182ICAgICAgICAgID0gMHhGMCwKKwlXQkNJUl9CQU5LXzcgICAgICAgICAgPSAweEY0LAorfTsKKworLyogU3VwcG9ydGVkIElSIFByb3RvY29scyAqLworZW51bSB3YmNpcl9wcm90b2NvbCB7CisJSVJfUFJPVE9DT0xfUkM1ICAgICAgICAgID0gMHgwLAorCUlSX1BST1RPQ09MX05FQyAgICAgICAgICA9IDB4MSwKKwlJUl9QUk9UT0NPTF9SQzYgICAgICAgICAgPSAweDIsCit9OworCisvKiBNaXNjICovCisjZGVmaW5lIFdCQ0lSX05BTUUJIldpbmJvbmQgQ0lSIgorI2RlZmluZSBXQkNJUl9JRF9GQU1JTFkgICAgICAgICAgMHhGMSAvKiBGYW1pbHkgSUQgZm9yIHRoZSBXUENEMzc2SQkqLworI2RlZmluZQlXQkNJUl9JRF9DSElQICAgICAgICAgICAgMHgwNCAvKiBDaGlwIElEIGZvciB0aGUgV1BDRDM3NkkJKi8KKyNkZWZpbmUgSVJfS0VZUFJFU1NfVElNRU9VVCAgICAgICAyNTAgLyogRklYTUU6IHNob3VsZCBiZSBwZXItcHJvdG9jb2w/ICovCisjZGVmaW5lIElOVkFMSURfU0NBTkNPREUgICAweDdGRkZGRkZGIC8qIEludmFsaWQgd2l0aCBhbGwgcHJvdG9zCSovCisjZGVmaW5lIFdBS0VVUF9JT01FTV9MRU4gICAgICAgICAweDEwIC8qIFdha2UtVXAgSS9PIFJlZyBMZW4JCSovCisjZGVmaW5lIEVIRlVOQ19JT01FTV9MRU4gICAgICAgICAweDEwIC8qIEVuaGFuY2VkIEZ1bmMgSS9PIFJlZyBMZW4JKi8KKyNkZWZpbmUgU1BfSU9NRU1fTEVOICAgICAgICAgICAgIDB4MDggLyogU2VyaWFsIFBvcnQgMyAoSVIpIFJlZyBMZW4JKi8KKyNkZWZpbmUgV0JDSVJfTUFYX0lETEVfQllURVMgICAgICAgMTAKKworc3RhdGljIERFRklORV9TUElOTE9DSyh3YmNpcl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKGtleXRhYmxlX2xvY2spOworCitzdHJ1Y3Qgd2JjaXJfa2V5IHsKKwl1MzIgc2NhbmNvZGU7CisJdW5zaWduZWQgaW50IGtleWNvZGU7Cit9OworCitzdHJ1Y3Qgd2JjaXJfa2V5ZW50cnkgeworCXN0cnVjdCB3YmNpcl9rZXkga2V5OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd2JjaXJfa2V5IHJjNl9kZWZfa2V5bWFwW10gPSB7CisJeyAweDgwMEYwNDAwLCBLRVlfTlVNRVJJQ18wCQl9LAorCXsgMHg4MDBGMDQwMSwgS0VZX05VTUVSSUNfMQkJfSwKKwl7IDB4ODAwRjA0MDIsIEtFWV9OVU1FUklDXzIJCX0sCisJeyAweDgwMEYwNDAzLCBLRVlfTlVNRVJJQ18zCQl9LAorCXsgMHg4MDBGMDQwNCwgS0VZX05VTUVSSUNfNAkJfSwKKwl7IDB4ODAwRjA0MDUsIEtFWV9OVU1FUklDXzUJCX0sCisJeyAweDgwMEYwNDA2LCBLRVlfTlVNRVJJQ182CQl9LAorCXsgMHg4MDBGMDQwNywgS0VZX05VTUVSSUNfNwkJfSwKKwl7IDB4ODAwRjA0MDgsIEtFWV9OVU1FUklDXzgJCX0sCisJeyAweDgwMEYwNDA5LCBLRVlfTlVNRVJJQ185CQl9LAorCXsgMHg4MDBGMDQxRCwgS0VZX05VTUVSSUNfU1RBUgkJfSwKKwl7IDB4ODAwRjA0MUMsIEtFWV9OVU1FUklDX1BPVU5ECQl9LAorCXsgMHg4MDBGMDQxMCwgS0VZX1ZPTFVNRVVQCQl9LAorCXsgMHg4MDBGMDQxMSwgS0VZX1ZPTFVNRURPV04JCX0sCisJeyAweDgwMEYwNDEyLCBLRVlfQ0hBTk5FTFVQCQl9LAorCXsgMHg4MDBGMDQxMywgS0VZX0NIQU5ORUxET1dOCQl9LAorCXsgMHg4MDBGMDQwRSwgS0VZX01VVEUJCQl9LAorCXsgMHg4MDBGMDQwRCwgS0VZX1ZFTkRPUgkJfSwgLyogVmlzdGEgTG9nbyBLZXkgKi8KKwl7IDB4ODAwRjA0MUUsIEtFWV9VUAkJCX0sCisJeyAweDgwMEYwNDFGLCBLRVlfRE9XTgkJCX0sCisJeyAweDgwMEYwNDIwLCBLRVlfTEVGVAkJCX0sCisJeyAweDgwMEYwNDIxLCBLRVlfUklHSFQJCQl9LAorCXsgMHg4MDBGMDQyMiwgS0VZX09LCQkJfSwKKwl7IDB4ODAwRjA0MjMsIEtFWV9FU0MJCQl9LAorCXsgMHg4MDBGMDQwRiwgS0VZX0lORk8JCQl9LAorCXsgMHg4MDBGMDQwQSwgS0VZX0NMRUFSCQkJfSwKKwl7IDB4ODAwRjA0MEIsIEtFWV9FTlRFUgkJCX0sCisJeyAweDgwMEYwNDVCLCBLRVlfUkVECQkJfSwKKwl7IDB4ODAwRjA0NUMsIEtFWV9HUkVFTgkJCX0sCisJeyAweDgwMEYwNDVELCBLRVlfWUVMTE9XCQl9LAorCXsgMHg4MDBGMDQ1RSwgS0VZX0JMVUUJCQl9LAorCXsgMHg4MDBGMDQ1QSwgS0VZX1RFWFQJCQl9LAorCXsgMHg4MDBGMDQyNywgS0VZX1NXSVRDSFZJREVPTU9ERQl9LAorCXsgMHg4MDBGMDQwQywgS0VZX1BPV0VSCQkJfSwKKwl7IDB4ODAwRjA0NTAsIEtFWV9SQURJTwkJCX0sCisJeyAweDgwMEYwNDQ4LCBLRVlfUFZSCQkJfSwKKwl7IDB4ODAwRjA0NDcsIEtFWV9BVURJTwkJCX0sCisJeyAweDgwMEYwNDI2LCBLRVlfRVBHCQkJfSwKKwl7IDB4ODAwRjA0NDksIEtFWV9DQU1FUkEJCX0sCisJeyAweDgwMEYwNDI1LCBLRVlfVFYJCQl9LAorCXsgMHg4MDBGMDQ0QSwgS0VZX1ZJREVPCQkJfSwKKwl7IDB4ODAwRjA0MjQsIEtFWV9EVkQJCQl9LAorCXsgMHg4MDBGMDQxNiwgS0VZX1BMQVkJCQl9LAorCXsgMHg4MDBGMDQxOCwgS0VZX1BBVVNFCQkJfSwKKwl7IDB4ODAwRjA0MTksIEtFWV9TVE9QCQkJfSwKKwl7IDB4ODAwRjA0MTQsIEtFWV9GQVNURk9SV0FSRAkJfSwKKwl7IDB4ODAwRjA0MUEsIEtFWV9ORVhUCQkJfSwKKwl7IDB4ODAwRjA0MUIsIEtFWV9QUkVWSU9VUwkJfSwKKwl7IDB4ODAwRjA0MTUsIEtFWV9SRVdJTkQJCX0sCisJeyAweDgwMEYwNDE3LCBLRVlfUkVDT1JECQl9LAorfTsKKworLyogUmVnaXN0ZXJzIGFuZCBvdGhlciBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgd2JjaXJfbG9jayAqLworc3RydWN0IHdiY2lyX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgd2Jhc2U7ICAgICAgICAvKiBXYWtlLVVwIEJhc2VhZGRyCQkqLworCXVuc2lnbmVkIGxvbmcgZWJhc2U7ICAgICAgICAvKiBFbmhhbmNlZCBGdW5jLiBCYXNlYWRkcgkqLworCXVuc2lnbmVkIGxvbmcgc2Jhc2U7ICAgICAgICAvKiBTZXJpYWwgUG9ydCBCYXNlYWRkcgkqLworCXVuc2lnbmVkIGludCAgaXJxOyAgICAgICAgICAvKiBTZXJpYWwgUG9ydCBJUlEJCSovCisKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfa2V5dXA7CisJc3RydWN0IGxlZF90cmlnZ2VyICpyeHRyaWdnZXI7CisJc3RydWN0IGxlZF90cmlnZ2VyICp0eHRyaWdnZXI7CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7CisKKwl1MzIgbGFzdF9zY2FuY29kZTsKKwl1bnNpZ25lZCBpbnQgbGFzdF9rZXljb2RlOworCXU4IGxhc3RfdG9nZ2xlOworCXU4IGtleXByZXNzZWQ7CisJdW5zaWduZWQgbG9uZyBrZXl1cF9qaWZmaWVzOworCXVuc2lnbmVkIGludCBpZGxlX2NvdW50OworCisJLyogUlggaXJkYXRhIGFuZCBwYXJzaW5nIHN0YXRlICovCisJdW5zaWduZWQgbG9uZyBpcmRhdGFbMzBdOworCXVuc2lnbmVkIGludCBpcmRhdGFfY291bnQ7CisJdW5zaWduZWQgaW50IGlyZGF0YV9pZGxlOworCXVuc2lnbmVkIGludCBpcmRhdGFfb2ZmOworCXVuc2lnbmVkIGludCBpcmRhdGFfZXJyb3I7CisKKwkvKiBQcm90ZWN0ZWQgYnkga2V5dGFibGVfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQga2V5dGFibGU7Cit9OworCitzdGF0aWMgZW51bSB3YmNpcl9wcm90b2NvbCBwcm90b2NvbCA9IElSX1BST1RPQ09MX1JDNjsKK21vZHVsZV9wYXJhbShwcm90b2NvbCwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb3RvY29sLCAiSVIgcHJvdG9jb2wgdG8gdXNlICIKKwkJICIoMCA9IFJDNSwgMSA9IE5FQywgMiA9IFJDNkEsIGRlZmF1bHQpIik7CisKK3N0YXRpYyBpbnQgaW52ZXJ0OyAvKiBkZWZhdWx0ID0gMCAqLworbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGludmVydCwgIkludmVydCB0aGUgc2lnbmFsIGZyb20gdGhlIElSIHJlY2VpdmVyIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2FrZV9zYyA9IDB4ODAwRjA0MEM7Cittb2R1bGVfcGFyYW0od2FrZV9zYywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdha2Vfc2MsICJTY2FuY29kZSBvZiB0aGUgcG93ZXItb24gSVIgY29tbWFuZCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHdha2VfcmM2bW9kZSA9IDY7Cittb2R1bGVfcGFyYW0od2FrZV9yYzZtb2RlLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2FrZV9yYzZtb2RlLCAiUkM2IG1vZGUgZm9yIHRoZSBwb3dlci1vbiBjb21tYW5kICIKKwkJICIoMCA9IDAsIDYgPSA2QSwgZGVmYXVsdCkiKTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFVUSUxJVFkgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB3YmNpcl9sb2NrICovCitzdGF0aWMgdm9pZAord2JjaXJfc2V0X2JpdHModW5zaWduZWQgbG9uZyBhZGRyLCB1OCBiaXRzLCB1OCBtYXNrKQoreworCXU4IHZhbDsKKworCXZhbCA9IGluYihhZGRyKTsKKwl2YWwgPSAoKHZhbCAmIH5tYXNrKSB8IChiaXRzICYgbWFzaykpOworCW91dGIodmFsLCBhZGRyKTsKK30KKworLyogU2VsZWN0cyB0aGUgcmVnaXN0ZXIgYmFuayBmb3IgdGhlIHNlcmlhbCBwb3J0ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3diY2lyX3NlbGVjdF9iYW5rKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhLCBlbnVtIHdiY2lyX2JhbmsgYmFuaykKK3sKKwlvdXRiKGJhbmssIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CU1IpOworfQorCitzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcword2JjaXJfbGVkX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gY29udGFpbmVyX29mKGxlZF9jZGV2LAorCQkJCQkgICAgICAgc3RydWN0IHdiY2lyX2RhdGEsCisJCQkJCSAgICAgICBsZWQpOworCisJaWYgKGluYihkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DVFMpICYgV0JDSVJfTEVEX0VOQUJMRSkKKwkJcmV0dXJuIExFRF9GVUxMOworCWVsc2UKKwkJcmV0dXJuIExFRF9PRkY7Cit9CisKK3N0YXRpYyB2b2lkCit3YmNpcl9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gY29udGFpbmVyX29mKGxlZF9jZGV2LAorCQkJCQkgICAgICAgc3RydWN0IHdiY2lyX2RhdGEsCisJCQkJCSAgICAgICBsZWQpOworCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ1RTLAorCQkgICAgICAgYnJpZ2h0bmVzcyA9PSBMRURfT0ZGID8gMHgwMCA6IFdCQ0lSX0xFRF9FTkFCTEUsCisJCSAgICAgICBXQkNJUl9MRURfRU5BQkxFKTsKK30KKworLyogTWFuY2hlc3RlciBlbmNvZGVzIGJpdHMgdG8gUkM2IG1lc3NhZ2UgY2VsbHMgKHNlZSB3YmNpcl9wYXJzZV9yYzYpICovCitzdGF0aWMgdTgKK3diY2lyX3RvX3JjNmNlbGxzKHU4IHZhbCkKK3sKKwl1OCBjb2RlZCA9IDB4MDA7CisJaW50IGk7CisKKwl2YWwgJj0gMHgwRjsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmICh2YWwgJiAweDAxKQorCQkJY29kZWQgfD0gMHgwMiA8PCAoaSAqIDIpOworCQllbHNlCisJCQljb2RlZCB8PSAweDAxIDw8IChpICogMik7CisJCXZhbCA+Pj0gMTsKKwl9CisKKwlyZXR1cm4gY29kZWQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJTlBVVCBGVU5DVElPTlMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3diY2lyX2RvX2dldGtleWNvZGUoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEsIHUzMiBzY2FuY29kZSkKK3sKKwlzdHJ1Y3Qgd2JjaXJfa2V5ZW50cnkgKmtleWVudHJ5OworCXVuc2lnbmVkIGludCBrZXljb2RlID0gS0VZX1JFU0VSVkVEOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgma2V5dGFibGVfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShrZXllbnRyeSwgJmRhdGEtPmtleXRhYmxlLCBsaXN0KSB7CisJCWlmIChrZXllbnRyeS0+a2V5LnNjYW5jb2RlID09IHNjYW5jb2RlKSB7CisJCQlrZXljb2RlID0ga2V5ZW50cnktPmtleS5rZXljb2RlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZrZXl0YWJsZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGtleWNvZGU7Cit9CisKK3N0YXRpYyBpbnQKK3diY2lyX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwkqa2V5Y29kZSA9IChpbnQpd2JjaXJfZG9fZ2V0a2V5Y29kZShkYXRhLCAodTMyKXNjYW5jb2RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAord2JjaXJfc2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzc2NhbmNvZGUsIGludCBrZXljb2RlKQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgd2JjaXJfa2V5ZW50cnkgKmtleWVudHJ5OworCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqbmV3X2tleWVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG9sZF9rZXljb2RlID0gS0VZX1JFU0VSVkVEOworCXUzMiBzY2FuY29kZSA9ICh1MzIpc3NjYW5jb2RlOworCisJaWYgKGtleWNvZGUgPCAwIHx8IGtleWNvZGUgPiBLRVlfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5ld19rZXllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCpuZXdfa2V5ZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19rZXllbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmtleXRhYmxlX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoa2V5ZW50cnksICZkYXRhLT5rZXl0YWJsZSwgbGlzdCkgeworCQlpZiAoa2V5ZW50cnktPmtleS5zY2FuY29kZSAhPSBzY2FuY29kZSkKKwkJCWNvbnRpbnVlOworCisJCW9sZF9rZXljb2RlID0ga2V5ZW50cnktPmtleS5rZXljb2RlOworCQlrZXllbnRyeS0+a2V5LmtleWNvZGUgPSBrZXljb2RlOworCisJCWlmIChrZXllbnRyeS0+a2V5LmtleWNvZGUgPT0gS0VZX1JFU0VSVkVEKSB7CisJCQlsaXN0X2RlbCgma2V5ZW50cnktPmxpc3QpOworCQkJa2ZyZWUoa2V5ZW50cnkpOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJc2V0X2JpdChrZXljb2RlLCBkZXYtPmtleWJpdCk7CisKKwlpZiAob2xkX2tleWNvZGUgPT0gS0VZX1JFU0VSVkVEKSB7CisJCW5ld19rZXllbnRyeS0+a2V5LnNjYW5jb2RlID0gc2NhbmNvZGU7CisJCW5ld19rZXllbnRyeS0+a2V5LmtleWNvZGUgPSBrZXljb2RlOworCQlsaXN0X2FkZCgmbmV3X2tleWVudHJ5LT5saXN0LCAmZGF0YS0+a2V5dGFibGUpOworCX0gZWxzZSB7CisJCWtmcmVlKG5ld19rZXllbnRyeSk7CisJCWNsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleWVudHJ5LCAmZGF0YS0+a2V5dGFibGUsIGxpc3QpIHsKKwkJCWlmIChrZXllbnRyeS0+a2V5LmtleWNvZGUgPT0gb2xkX2tleWNvZGUpIHsKKwkJCQlzZXRfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgma2V5dGFibGVfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogVGltZXIgZnVuY3Rpb24gdG8gcmVwb3J0IGtleXVwIGV2ZW50IHNvbWUgdGltZSBhZnRlciBrZXlkb3duIGlzCisgKiByZXBvcnRlZCBieSB0aGUgSVNSLgorICovCitzdGF0aWMgdm9pZAord2JjaXJfa2V5dXAodW5zaWduZWQgbG9uZyBjb29raWUpCit7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSAoc3RydWN0IHdiY2lyX2RhdGEgKiljb29raWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogZGF0YS0+a2V5dXBfamlmZmllcyBpcyB1c2VkIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpZiBhCisJICogaGFyZHdhcmUgaW50ZXJydXB0IG9jY3VycyBhdCB0aGlzIHBvaW50IGFuZCB0aGUga2V5dXAgdGltZXIKKwkgKiBldmVudCBpcyBtb3ZlZCBmdXJ0aGVyIGludG8gdGhlIGZ1dHVyZSBhcyBhIHJlc3VsdC4KKwkgKgorCSAqIFRoZSB0aW1lciB3aWxsIHRoZW4gYmUgcmVhY3RpdmF0ZWQgYW5kIHRoaXMgZnVuY3Rpb24gY2FsbGVkCisJICogYWdhaW4gaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBleGl0IGdyYWNlZnVsbHkgaW4gdGhhdCBjYXNlCisJICogdG8gYWxsb3cgdGhlIGlucHV0IHN1YnN5c3RlbSB0byBkbyBpdHMgYXV0by1yZXBlYXQgbWFnaWMgb3IKKwkgKiBhIGtleXVwIGV2ZW50IG1pZ2h0IGZvbGxvdyBpbW1lZGlhdGVseSBhZnRlciB0aGUga2V5ZG93bi4KKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3YmNpcl9sb2NrLCBmbGFncyk7CisKKwlpZiAodGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGRhdGEtPmtleXVwX2ppZmZpZXMpICYmIGRhdGEtPmtleXByZXNzZWQpIHsKKwkJZGF0YS0+a2V5cHJlc3NlZCA9IDA7CisJCWxlZF90cmlnZ2VyX2V2ZW50KGRhdGEtPnJ4dHJpZ2dlciwgTEVEX09GRik7CisJCWlucHV0X3JlcG9ydF9rZXkoZGF0YS0+aW5wdXRfZGV2LCBkYXRhLT5sYXN0X2tleWNvZGUsIDApOworCQlpbnB1dF9zeW5jKGRhdGEtPmlucHV0X2Rldik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2JjaXJfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAord2JjaXJfa2V5ZG93bihzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSwgdTMyIHNjYW5jb2RlLCB1OCB0b2dnbGUpCit7CisJdW5zaWduZWQgaW50IGtleWNvZGU7CisKKwkvKiBSZXBlYXQ/ICovCisJaWYgKGRhdGEtPmxhc3Rfc2NhbmNvZGUgPT0gc2NhbmNvZGUgJiYKKwkgICAgZGF0YS0+bGFzdF90b2dnbGUgPT0gdG9nZ2xlICYmCisJICAgIGRhdGEtPmtleXByZXNzZWQpCisJCWdvdG8gc2V0X3RpbWVyOworCWRhdGEtPmxhc3Rfc2NhbmNvZGUgPSBzY2FuY29kZTsKKworCS8qIERvIHdlIG5lZWQgdG8gcmVsZWFzZSBhbiBvbGQga2V5cHJlc3M/ICovCisJaWYgKGRhdGEtPmtleXByZXNzZWQpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShkYXRhLT5pbnB1dF9kZXYsIGRhdGEtPmxhc3Rfa2V5Y29kZSwgMCk7CisJCWlucHV0X3N5bmMoZGF0YS0+aW5wdXRfZGV2KTsKKwkJZGF0YS0+a2V5cHJlc3NlZCA9IDA7CisJfQorCisJLyogUmVwb3J0IHNjYW5jb2RlICovCisJaW5wdXRfZXZlbnQoZGF0YS0+aW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCAoaW50KXNjYW5jb2RlKTsKKworCS8qIERvIHdlIGtub3cgdGhpcyBzY2FuY29kZT8gKi8KKwlrZXljb2RlID0gd2JjaXJfZG9fZ2V0a2V5Y29kZShkYXRhLCBzY2FuY29kZSk7CisJaWYgKGtleWNvZGUgPT0gS0VZX1JFU0VSVkVEKQorCQlnb3RvIHNldF90aW1lcjsKKworCS8qIFJlZ2lzdGVyIGEga2V5cHJlc3MgKi8KKwlpbnB1dF9yZXBvcnRfa2V5KGRhdGEtPmlucHV0X2Rldiwga2V5Y29kZSwgMSk7CisJZGF0YS0+a2V5cHJlc3NlZCA9IDE7CisJZGF0YS0+bGFzdF9rZXljb2RlID0ga2V5Y29kZTsKKwlkYXRhLT5sYXN0X3RvZ2dsZSA9IHRvZ2dsZTsKKworc2V0X3RpbWVyOgorCWlucHV0X3N5bmMoZGF0YS0+aW5wdXRfZGV2KTsKKwlsZWRfdHJpZ2dlcl9ldmVudChkYXRhLT5yeHRyaWdnZXIsCisJCQkgIGRhdGEtPmtleXByZXNzZWQgPyBMRURfRlVMTCA6IExFRF9PRkYpOworCWRhdGEtPmtleXVwX2ppZmZpZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhJUl9LRVlQUkVTU19USU1FT1VUKTsKKwltb2RfdGltZXIoJmRhdGEtPnRpbWVyX2tleXVwLCBkYXRhLT5rZXl1cF9qaWZmaWVzKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElSIFBBUlNJTkcgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZXNldHMgYWxsIGlyZGF0YSAqLworc3RhdGljIHZvaWQKK3diY2lyX3Jlc2V0X2lyZGF0YShzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSkKK3sKKwltZW1zZXQoZGF0YS0+aXJkYXRhLCAwLCBzaXplb2YoZGF0YS0+aXJkYXRhKSk7CisJZGF0YS0+aXJkYXRhX2NvdW50ID0gMDsKKwlkYXRhLT5pcmRhdGFfb2ZmID0gMDsKKwlkYXRhLT5pcmRhdGFfZXJyb3IgPSAwOworfQorCisvKiBBZGRzIG9uZSBiaXQgb2YgaXJkYXRhICovCitzdGF0aWMgdm9pZAorYWRkX2lyZGF0YV9iaXQoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEsIGludCBzZXQpCit7CisJaWYgKGRhdGEtPmlyZGF0YV9jb3VudCA+PSBzaXplb2YoZGF0YS0+aXJkYXRhKSAqIDgpIHsKKwkJZGF0YS0+aXJkYXRhX2Vycm9yID0gMTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzZXQpCisJCV9fc2V0X2JpdChkYXRhLT5pcmRhdGFfY291bnQsIGRhdGEtPmlyZGF0YSk7CisJZGF0YS0+aXJkYXRhX2NvdW50Kys7Cit9CisKKy8qIEdldHMgY291bnQgYml0cyBvZiBpcmRhdGEgKi8KK3N0YXRpYyB1MTYKK2dldF9iaXRzKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhLCBpbnQgY291bnQpCit7CisJdTE2IHZhbCA9IDB4MDsKKworCWlmIChkYXRhLT5pcmRhdGFfY291bnQgLSBkYXRhLT5pcmRhdGFfb2ZmIDwgY291bnQpIHsKKwkJZGF0YS0+aXJkYXRhX2Vycm9yID0gMTsKKwkJcmV0dXJuIDB4MDsKKwl9CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXZhbCA8PD0gMTsKKwkJaWYgKHRlc3RfYml0KGRhdGEtPmlyZGF0YV9vZmYsIGRhdGEtPmlyZGF0YSkpCisJCQl2YWwgfD0gMHgxOworCQljb3VudC0tOworCQlkYXRhLT5pcmRhdGFfb2ZmKys7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworLyogUmVhZHMgMTYgY2VsbHMgYW5kIGNvbnZlcnRzIHRoZW0gdG8gYSBieXRlICovCitzdGF0aWMgdTgKK3diY2lyX3JjNmNlbGxzX3RvX2J5dGUoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCit7CisJdTE2IHJhdyA9IGdldF9iaXRzKGRhdGEsIDE2KTsKKwl1OCB2YWwgPSAweDAwOworCWludCBiaXQ7CisKKwlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7CisJCXN3aXRjaCAocmF3ICYgMHgwMykgeworCQljYXNlIDB4MDE6CisJCQlicmVhazsKKwkJY2FzZSAweDAyOgorCQkJdmFsIHw9ICgweDAxIDw8IGJpdCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRhdGEtPmlyZGF0YV9lcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCQlyYXcgPj49IDI7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworLyogRGVjb2RlcyBhIG51bWJlciBvZiBiaXRzIGZyb20gcmF3IFJDNSBkYXRhICovCitzdGF0aWMgdTgKK3diY2lyX2dldF9yYzViaXRzKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdTE2IHJhdyA9IGdldF9iaXRzKGRhdGEsIGNvdW50ICogMik7CisJdTggdmFsID0gMHgwMDsKKwlpbnQgYml0OworCisJZm9yIChiaXQgPSAwOyBiaXQgPCBjb3VudDsgYml0KyspIHsKKwkJc3dpdGNoIChyYXcgJiAweDAzKSB7CisJCWNhc2UgMHgwMToKKwkJCXZhbCB8PSAoMHgwMSA8PCBiaXQpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMjoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGF0YS0+aXJkYXRhX2Vycm9yID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXJhdyA+Pj0gMjsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZAord2JjaXJfcGFyc2VfcmM2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCit7CisJLyoKKwkgKiBOb3JtYWwgYml0cyBhcmUgbWFuY2hlc3RlciBjb2RlZCBhcyBmb2xsb3dzOgorCSAqIGNlbGwwICsgY2VsbDEgPSBsb2dpYyAiMCIKKwkgKiBjZWxsMSArIGNlbGwwID0gbG9naWMgIjEiCisJICoKKwkgKiBUaGUgSVIgcHVsc2UgaGFzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czoKKwkgKgorCSAqIExlYWRlcgkJLSA2ICogY2VsbDEgLSBkaXNjYXJkZWQKKwkgKiBHYXAgICAgCQktIDIgKiBjZWxsMCAtIGRpc2NhcmRlZAorCSAqIFN0YXJ0IGJpdAkJLSBOb3JtYWwgQ29kaW5nIC0gYWx3YXlzICIxIgorCSAqIE1vZGUgQml0IDIgLSAwCS0gTm9ybWFsIENvZGluZworCSAqIFRvZ2dsZSBiaXQJCS0gTm9ybWFsIENvZGluZyB3aXRoIGRvdWJsZSBiaXQgdGltZSwKKwkgKgkJCSAgZS5nLiBjZWxsMCArIGNlbGwwICsgY2VsbDEgKyBjZWxsMQorCSAqCQkJICBtZWFucyBsb2dpYyAiMCIuCisJICoKKwkgKiBUaGUgcmVzdCBkZXBlbmRzIG9uIHRoZSBtb2RlLCB0aGUgZm9sbG93aW5nIG1vZGVzIGFyZSBrbm93bjoKKwkgKgorCSAqIE1PREUgMDoKKwkgKiAgQWRkcmVzcyBCaXQgNyAtIDAJLSBOb3JtYWwgQ29kaW5nCisJICogIENvbW1hbmQgQml0IDcgLSAwCS0gTm9ybWFsIENvZGluZworCSAqCisJICogTU9ERSA2OgorCSAqICBUaGUgYWJvdmUgVG9nZ2xlIEJpdCBpcyB1c2VkIGFzIGEgc3VibW9kZSBiaXQsIDAgPSBBLCAxID0gQi4KKwkgKiAgU3VibW9kZSBCIGlzIGZvciBwb2ludGluZyBkZXZpY2VzLCBvbmx5IHJlbW90ZXMgdXNpbmcgc3VibW9kZSBBCisJICogIGFyZSBzdXBwb3J0ZWQuCisJICoKKwkgKiAgQ3VzdG9tZXIgcmFuZ2UgYml0CS0gMCA9PiBDdXN0b21lciA9IDcgYml0cywgMC4uLjEyNworCSAqICAgICAgICAgICAgICAgICAgICAgICAgMSA9PiBDdXN0b21lciA9IDE1IGJpdHMsIDMyNzY4Li4uNjU1MzUKKwkgKiAgQ3VzdG9tZXIgQml0cwktIE5vcm1hbCBDb2RpbmcKKwkgKgorCSAqICBDdXN0b21lciBjb2RlcyBhcmUgYWxsb2NhdGVkIGJ5IFBoaWxpcHMuIFRoZSByZXN0IG9mIHRoZSBiaXRzCisJICogIGFyZSBjdXN0b21lciBkZXBlbmRlbnQuIFRoZSBmb2xsb3dpbmcgaXMgY29tbW9ubHkgdXNlZCAoYW5kIHRoZQorCSAqICBvbmx5IHN1cHBvcnRlZCBjb25maWcpOgorCSAqCisJICogIFRvZ2dsZSBCaXQJCS0gTm9ybWFsIENvZGluZworCSAqICBBZGRyZXNzIEJpdCA2IC0gMAktIE5vcm1hbCBDb2RpbmcKKwkgKiAgQ29tbWFuZCBCaXQgNyAtIDAJLSBOb3JtYWwgQ29kaW5nCisJICoKKwkgKiBBbGwgbW9kZXMgYXJlIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IDYgKiBjZWxsMC4KKwkgKgorCSAqIE1PREUgMCBtc2dsZW46CisJICogIDEgKiAyIChzdGFydCBiaXQpICsgMyAqIDIgKG1vZGUpICsgMiAqIDIgKHRvZ2dsZSkgKworCSAqICA4ICogMiAoYWRkcmVzcykgKyA4ICogMiAoY29tbWFuZCkgPQorCSAqICA0NCBjZWxscworCSAqCisJICogTU9ERSA2QSBtc2dsZW46CisJICogIDEgKiAyIChzdGFydCBiaXQpICsgMyAqIDIgKG1vZGUpICsgMiAqIDIgKHN1Ym1vZGUpICsKKwkgKiAgMSAqIDIgKGN1c3RvbWVyIHJhbmdlIGJpdCkgKyA3LzE1ICogMiAoY3VzdG9tZXIgYml0cykgKworCSAqICAxICogMiAodG9nZ2xlIGJpdCkgKyA3ICogMiAoYWRkcmVzcykgKyA4ICogMiAoY29tbWFuZCkgPQorCSAqICA2MCAtIDc2IGNlbGxzCisJICovCisJdTggbW9kZTsKKwl1OCB0b2dnbGU7CisJdTE2IGN1c3RvbWVyID0gMHgwOworCXU4IGFkZHJlc3M7CisJdTggY29tbWFuZDsKKwl1MzIgc2NhbmNvZGU7CisKKwkvKiBMZWFkZXIgbWFyayAqLworCXdoaWxlIChnZXRfYml0cyhkYXRhLCAxKSAmJiAhZGF0YS0+aXJkYXRhX2Vycm9yKQorCQkvKiBEbyBub3RoaW5nICovOworCisJLyogTGVhZGVyIHNwYWNlICovCisJaWYgKGdldF9iaXRzKGRhdGEsIDEpKSB7CisJCWRldl9kYmcoZGV2LCAiUkM2IC0gSW52YWxpZCBsZWFkZXIgc3BhY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogU3RhcnQgYml0ICovCisJaWYgKGdldF9iaXRzKGRhdGEsIDIpICE9IDB4MDIpIHsKKwkJZGV2X2RiZyhkZXYsICJSQzYgLSBJbnZhbGlkIHN0YXJ0IGJpdFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBNb2RlICovCisJbW9kZSA9IGdldF9iaXRzKGRhdGEsIDYpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMHgxNTogLyogMDEwMTAxID0gYjAwMCAqLworCQltb2RlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweDI5OiAvKiAxMDEwMDEgPSBiMTEwICovCisJCW1vZGUgPSA2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGRldiwgIlJDNiAtIEludmFsaWQgbW9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBUb2dnbGUgYml0IC8gU3VibW9kZSBiaXQgKi8KKwl0b2dnbGUgPSBnZXRfYml0cyhkYXRhLCA0KTsKKwlzd2l0Y2ggKHRvZ2dsZSkgeworCWNhc2UgMHgwMzoKKwkJdG9nZ2xlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweDBDOgorCQl0b2dnbGUgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGRldiwgIlJDNiAtIFRvZ2dsZSBiaXQgZXJyb3JcbiIpOworCQlicmVhazsKKwl9CisKKwkvKiBDdXN0b21lciAqLworCWlmIChtb2RlID09IDYpIHsKKwkJaWYgKHRvZ2dsZSAhPSAwKSB7CisJCQlkZXZfZGJnKGRldiwgIlJDNkIgLSBOb3QgU3VwcG9ydGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWN1c3RvbWVyID0gd2JjaXJfcmM2Y2VsbHNfdG9fYnl0ZShkYXRhKTsKKworCQlpZiAoY3VzdG9tZXIgJiAweDgwKSB7CisJCQkvKiAxNSBiaXQgY3VzdG9tZXIgdmFsdWUgKi8KKwkJCWN1c3RvbWVyIDw8PSA4OworCQkJY3VzdG9tZXIgfD0gd2JjaXJfcmM2Y2VsbHNfdG9fYnl0ZShkYXRhKTsKKwkJfQorCX0KKworCS8qIEFkZHJlc3MgKi8KKwlhZGRyZXNzID0gd2JjaXJfcmM2Y2VsbHNfdG9fYnl0ZShkYXRhKTsKKwlpZiAobW9kZSA9PSA2KSB7CisJCXRvZ2dsZSA9IGFkZHJlc3MgPj4gNzsKKwkJYWRkcmVzcyAmPSAweDdGOworCX0KKworCS8qIENvbW1hbmQgKi8KKwljb21tYW5kID0gd2JjaXJfcmM2Y2VsbHNfdG9fYnl0ZShkYXRhKTsKKworCS8qIENyZWF0ZSBzY2FuY29kZSAqLworCXNjYW5jb2RlID0gIGNvbW1hbmQ7CisJc2NhbmNvZGUgfD0gYWRkcmVzcyA8PCA4OworCXNjYW5jb2RlIHw9IGN1c3RvbWVyIDw8IDE2OworCisJLyogTGFzdCBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoZGF0YS0+aXJkYXRhX2Vycm9yKSB7CisJCWRldl9kYmcoZGV2LCAiUkM2IC0gQ2VsbCBlcnJvcihzKVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJJUi1SQzYgYWQgMHglMDJYIGNtIDB4JTAyWCBjdSAweCUwNFggIgorCQkidG9nZ2xlICV1IG1vZGUgJXUgc2NhbiAweCUwOFhcbiIsCisJCWFkZHJlc3MsCisJCWNvbW1hbmQsCisJCWN1c3RvbWVyLAorCQkodW5zaWduZWQgaW50KXRvZ2dsZSwKKwkJKHVuc2lnbmVkIGludCltb2RlLAorCQlzY2FuY29kZSk7CisKKwl3YmNpcl9rZXlkb3duKGRhdGEsIHNjYW5jb2RlLCB0b2dnbGUpOworfQorCitzdGF0aWMgdm9pZAord2JjaXJfcGFyc2VfcmM1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCit7CisJLyoKKwkgKiBCaXRzIGFyZSBtYW5jaGVzdGVyIGNvZGVkIGFzIGZvbGxvd3M6CisJICogY2VsbDEgKyBjZWxsMCA9IGxvZ2ljICIwIgorCSAqIGNlbGwwICsgY2VsbDEgPSBsb2dpYyAiMSIKKwkgKiAoaS5lLiB0aGUgcmV2ZXJzZSBvZiBSQzYpCisJICoKKwkgKiBTdGFydCBiaXQgMQkJLSAiMSIgLSBkaXNjYXJkZWQKKwkgKiBTdGFydCBiaXQgMgkJLSBNdXN0IGJlIGludmVydGVkIHRvIGdldCBjb21tYW5kIGJpdCA2CisJICogVG9nZ2xlIGJpdAorCSAqIEFkZHJlc3MgQml0IDQgLSAwCisJICogQ29tbWFuZCBCaXQgNSAtIDAKKwkgKi8KKwl1OCB0b2dnbGU7CisJdTggYWRkcmVzczsKKwl1OCBjb21tYW5kOworCXUzMiBzY2FuY29kZTsKKworCS8qIFN0YXJ0IGJpdCAxICovCisJaWYgKCFnZXRfYml0cyhkYXRhLCAxKSkgeworCQlkZXZfZGJnKGRldiwgIlJDNSAtIEludmFsaWQgc3RhcnQgYml0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFN0YXJ0IGJpdCAyICovCisJaWYgKCF3YmNpcl9nZXRfcmM1Yml0cyhkYXRhLCAxKSkKKwkJY29tbWFuZCA9IDB4NDA7CisJZWxzZQorCQljb21tYW5kID0gMHgwMDsKKworCXRvZ2dsZSAgID0gd2JjaXJfZ2V0X3JjNWJpdHMoZGF0YSwgMSk7CisJYWRkcmVzcyAgPSB3YmNpcl9nZXRfcmM1Yml0cyhkYXRhLCA1KTsKKwljb21tYW5kIHw9IHdiY2lyX2dldF9yYzViaXRzKGRhdGEsIDYpOworCXNjYW5jb2RlID0gYWRkcmVzcyA8PCA3IHwgY29tbWFuZDsKKworCS8qIExhc3Qgc2FuaXR5IGNoZWNrICovCisJaWYgKGRhdGEtPmlyZGF0YV9lcnJvcikgeworCQlkZXZfZGJnKGRldiwgIlJDNSAtIEludmFsaWQgbWVzc2FnZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkZXZfZGJnKGRldiwgIklSLVJDNSBhZCAldSBjbSAldSB0ICV1IHMgJXVcbiIsCisJCSh1bnNpZ25lZCBpbnQpYWRkcmVzcywKKwkJKHVuc2lnbmVkIGludCljb21tYW5kLAorCQkodW5zaWduZWQgaW50KXRvZ2dsZSwKKwkJKHVuc2lnbmVkIGludClzY2FuY29kZSk7CisKKwl3YmNpcl9rZXlkb3duKGRhdGEsIHNjYW5jb2RlLCB0b2dnbGUpOworfQorCitzdGF0aWMgdm9pZAord2JjaXJfcGFyc2VfbmVjKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCit7CisJLyoKKwkgKiBFYWNoIGJpdCByZXByZXNlbnRzIDU2MCB1cy4KKwkgKgorCSAqIExlYWRlcgkJLSA5IG1zIGJ1cnN0CisJICogR2FwCQkJLSA0LjUgbXMgc2lsZW5jZQorCSAqIEFkZHJlc3MxIGJpdCAwIC0gNwktIEFkZHJlc3MgMQorCSAqIEFkZHJlc3MyIGJpdCAwIC0gNwktIEFkZHJlc3MgMgorCSAqIENvbW1hbmQxIGJpdCAwIC0gNwktIENvbW1hbmQgMQorCSAqIENvbW1hbmQyIGJpdCAwIC0gNwktIENvbW1hbmQgMgorCSAqCisJICogTm90ZSB0aGUgYml0IG9yZGVyIQorCSAqCisJICogV2l0aCB0aGUgb2xkIE5FQyBwcm90b2NvbCwgQWRkcmVzczIgd2FzIHRoZSBpbnZlcnNlIG9mIEFkZHJlc3MxCisJICogYW5kIENvbW1hbmQyIHdhcyB0aGUgaW52ZXJzZSBvZiBDb21tYW5kMSBhbmQgd2VyZSB1c2VkIGFzCisJICogYW4gZXJyb3IgY2hlY2suCisJICoKKwkgKiBXaXRoIE5FQyBleHRlbmRlZCwgQWRkcmVzczEgaXMgdGhlIExTQiBvZiB0aGUgQWRkcmVzcyBhbmQKKwkgKiBBZGRyZXNzMiBpcyB0aGUgTVNCLCBDb21tYW5kIHBhcnNpbmcgcmVtYWlucyB1bmNoYW5nZWQuCisJICoKKwkgKiBBIHJlcGVhdCBtZXNzYWdlIGlzIGNvZGVkIGFzOgorCSAqIExlYWRlcgkJLSA5IG1zIGJ1cnN0CisJICogR2FwCQkJLSAyLjI1IG1zIHNpbGVuY2UKKwkgKiBSZXBlYXQJCS0gNTYwIHVzIGFjdGl2ZQorCSAqLworCXU4IGFkZHJlc3MxOworCXU4IGFkZHJlc3MyOworCXU4IGNvbW1hbmQxOworCXU4IGNvbW1hbmQyOworCXUxNiBhZGRyZXNzOworCXUzMiBzY2FuY29kZTsKKworCS8qIExlYWRlciBtYXJrICovCisJd2hpbGUgKGdldF9iaXRzKGRhdGEsIDEpICYmICFkYXRhLT5pcmRhdGFfZXJyb3IpCisJCS8qIERvIG5vdGhpbmcgKi87CisKKwkvKiBMZWFkZXIgc3BhY2UgKi8KKwlpZiAoZ2V0X2JpdHMoZGF0YSwgNCkpIHsKKwkJZGV2X2RiZyhkZXYsICJORUMgLSBJbnZhbGlkIGxlYWRlciBzcGFjZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBSZXBlYXQ/ICovCisJaWYgKGdldF9iaXRzKGRhdGEsIDEpKSB7CisJCWlmICghZGF0YS0+a2V5cHJlc3NlZCkgeworCQkJZGV2X2RiZyhkZXYsICJORUMgLSBTdHJheSByZXBlYXQgbWVzc2FnZVxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlkZXZfZGJnKGRldiwgIklSLU5FQyByZXBlYXQgcyAldVxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpZGF0YS0+bGFzdF9zY2FuY29kZSk7CisKKwkJd2JjaXJfa2V5ZG93bihkYXRhLCBkYXRhLT5sYXN0X3NjYW5jb2RlLCBkYXRhLT5sYXN0X3RvZ2dsZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBSZW1haW5pbmcgbGVhZGVyIHNwYWNlICovCisJaWYgKGdldF9iaXRzKGRhdGEsIDMpKSB7CisJCWRldl9kYmcoZGV2LCAiTkVDIC0gSW52YWxpZCBsZWFkZXIgc3BhY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJYWRkcmVzczEgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7CisJYWRkcmVzczIgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7CisJY29tbWFuZDEgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7CisJY29tbWFuZDIgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoZGF0YS0+aXJkYXRhX2Vycm9yKSB7CisJCWRldl9kYmcoZGV2LCAiTkVDIC0gSW52YWxpZCBtZXNzYWdlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGNvbW1hbmQgdmFsaWRpdHkgKi8KKwlpZiAoY29tbWFuZDEgIT0gfmNvbW1hbmQyKSB7CisJCWRldl9kYmcoZGV2LCAiTkVDIC0gQ29tbWFuZCBieXRlcyBtaXNtYXRjaFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBmb3IgZXh0ZW5kZWQgTkVDIHByb3RvY29sICovCisJYWRkcmVzcyA9IGFkZHJlc3MxOworCWlmIChhZGRyZXNzMSAhPSB+YWRkcmVzczIpCisJCWFkZHJlc3MgfD0gYWRkcmVzczIgPDwgODsKKworCXNjYW5jb2RlID0gYWRkcmVzcyA8PCA4IHwgY29tbWFuZDE7CisKKwlkZXZfZGJnKGRldiwgIklSLU5FQyBhZCAldSBjbSAldSBzICV1XG4iLAorCQkodW5zaWduZWQgaW50KWFkZHJlc3MsCisJCSh1bnNpZ25lZCBpbnQpY29tbWFuZDEsCisJCSh1bnNpZ25lZCBpbnQpc2NhbmNvZGUpOworCisJd2JjaXJfa2V5ZG93bihkYXRhLCBzY2FuY29kZSwgIWRhdGEtPmxhc3RfdG9nZ2xlKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElOVEVSUlVQVCBGVU5DVElPTlMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpcnFyZXR1cm5fdAord2JjaXJfaXJxX2hhbmRsZXIoaW50IGlycW5vLCB2b2lkICpjb29raWUpCit7CisJc3RydWN0IHBucF9kZXYgKmRldmljZSA9IGNvb2tpZTsKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IHBucF9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkZXZpY2UtPmRldjsKKwl1OCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBpcmRhdGFbOF07CisJaW50IGk7CisJdW5zaWduZWQgaW50IGh3OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndiY2lyX2xvY2ssIGZsYWdzKTsKKworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7CisKKwlzdGF0dXMgPSBpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0VJUik7CisKKwlpZiAoIShzdGF0dXMgJiAoV0JDSVJfSVJRX1JYIHwgV0JDSVJfSVJRX0VSUikpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndiY2lyX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChzdGF0dXMgJiBXQkNJUl9JUlFfRVJSKQorCQlkYXRhLT5pcmRhdGFfZXJyb3IgPSAxOworCisJaWYgKCEoc3RhdHVzICYgV0JDSVJfSVJRX1JYKSkKKwkJZ290byBvdXQ7CisKKwkvKiBTaW5jZSBSWEhETEVWIGlzIHNldCwgYXQgbGVhc3QgOCBieXRlcyBhcmUgaW4gdGhlIEZJRk8gKi8KKwlpbnNiKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19SWERBVEEsICZpcmRhdGFbMF0sIDgpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihpcmRhdGEpOyBpKyspIHsKKwkJaHcgPSBod2VpZ2h0OChpcmRhdGFbaV0pOworCQlpZiAoaHcgPiA0KQorCQkJYWRkX2lyZGF0YV9iaXQoZGF0YSwgMCk7CisJCWVsc2UKKwkJCWFkZF9pcmRhdGFfYml0KGRhdGEsIDEpOworCisJCWlmIChodyA9PSA4KQorCQkJZGF0YS0+aWRsZV9jb3VudCsrOworCQllbHNlCisJCQlkYXRhLT5pZGxlX2NvdW50ID0gMDsKKwl9CisKKwlpZiAoZGF0YS0+aWRsZV9jb3VudCA+IFdCQ0lSX01BWF9JRExFX0JZVEVTKSB7CisJCS8qIFNldCBSWElOQUNUSVZFLi4uICovCisJCW91dGIoV0JDSVJfUlhfRElTQUJMRSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0FTQ1IpOworCisJCS8qIC4uLmFuZCBkcmFpbiB0aGUgRklGTyAqLworCQl3aGlsZSAoaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19MU1IpICYgV0JDSVJfUlhfQVZBSUwpCisJCQlpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JYREFUQSk7CisKKwkJZGV2X2RiZyhkZXYsICJJUkRBVEE6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPmlyZGF0YV9jb3VudDsgaSArPSBCSVRTX1BFUl9MT05HKQorCQkJZGV2X2RiZyhkZXYsICIweCUwOGxYXG4iLCBkYXRhLT5pcmRhdGFbaS9CSVRTX1BFUl9MT05HXSk7CisKKwkJc3dpdGNoIChwcm90b2NvbCkgeworCQljYXNlIElSX1BST1RPQ09MX1JDNToKKwkJCXdiY2lyX3BhcnNlX3JjNShkZXYsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgorCQkJd2JjaXJfcGFyc2VfcmM2KGRldiwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBJUl9QUk9UT0NPTF9ORUM6CisJCQl3YmNpcl9wYXJzZV9uZWMoZGV2LCBkYXRhKTsKKwkJCWJyZWFrOworCQl9CisKKwkJd2JjaXJfcmVzZXRfaXJkYXRhKGRhdGEpOworCQlkYXRhLT5pZGxlX2NvdW50ID0gMDsKKwl9CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YmNpcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU1VTUEVORC9SRVNVTUUgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAord2JjaXJfc2h1dGRvd24oc3RydWN0IHBucF9kZXYgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGV2aWNlLT5kZXY7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBwbnBfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlpbnQgZG9fd2FrZSA9IDE7CisJdTggbWF0Y2hbMTFdOworCXU4IG1hc2tbMTFdOworCXU4IHJjNl9jc2wgPSAwOworCWludCBpOworCisJbWVtc2V0KG1hdGNoLCAwLCBzaXplb2YobWF0Y2gpKTsKKwltZW1zZXQobWFzaywgMCwgc2l6ZW9mKG1hc2spKTsKKworCWlmICh3YWtlX3NjID09IElOVkFMSURfU0NBTkNPREUgfHwgIWRldmljZV9tYXlfd2FrZXVwKGRldikpIHsKKwkJZG9fd2FrZSA9IDA7CisJCWdvdG8gZmluaXNoOworCX0KKworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIElSX1BST1RPQ09MX1JDNToKKwkJaWYgKHdha2Vfc2MgPiAweEZGRikgeworCQkJZG9fd2FrZSA9IDA7CisJCQlkZXZfZXJyKGRldiwgIlJDNSAtIEludmFsaWQgd2FrZSBzY2FuY29kZVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIE1hc2sgPSAxMyBiaXRzLCBleCB0b2dnbGUgKi8KKwkJbWFza1swXSA9IDB4RkY7CisJCW1hc2tbMV0gPSAweDE3OworCisJCW1hdGNoWzBdICA9ICh3YWtlX3NjICYgMHgwMDNGKTsgICAgICAvKiA2IGNvbW1hbmQgYml0cyAqLworCQltYXRjaFswXSB8PSAod2FrZV9zYyAmIDB4MDE4MCkgPj4gMTsgLyogMiBhZGRyZXNzIGJpdHMgKi8KKwkJbWF0Y2hbMV0gID0gKHdha2Vfc2MgJiAweDBFMDApID4+IDk7IC8qIDMgYWRkcmVzcyBiaXRzICovCisJCWlmICghKHdha2Vfc2MgJiAweDAwNDApKSAgICAgICAgICAgICAvKiAybmQgc3RhcnQgYml0ICAqLworCQkJbWF0Y2hbMV0gfD0gMHgxMDsKKworCQlicmVhazsKKworCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgorCQlpZiAod2FrZV9zYyA+IDB4RkZGRkZGKSB7CisJCQlkb193YWtlID0gMDsKKwkJCWRldl9lcnIoZGV2LCAiTkVDIC0gSW52YWxpZCB3YWtlIHNjYW5jb2RlXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbWFza1swXSA9IG1hc2tbMV0gPSBtYXNrWzJdID0gbWFza1szXSA9IDB4RkY7CisKKwkJbWF0Y2hbMV0gPSBiaXRyZXY4KCh3YWtlX3NjICYgMHhGRikpOworCQltYXRjaFswXSA9IH5tYXRjaFsxXTsKKworCQltYXRjaFszXSA9IGJpdHJldjgoKHdha2Vfc2MgJiAweEZGMDApID4+IDgpOworCQlpZiAod2FrZV9zYyA+IDB4RkZGRikKKwkJCW1hdGNoWzJdID0gYml0cmV2OCgod2FrZV9zYyAmIDB4RkYwMDAwKSA+PiAxNik7CisJCWVsc2UKKwkJCW1hdGNoWzJdID0gfm1hdGNoWzNdOworCisJCWJyZWFrOworCisJY2FzZSBJUl9QUk9UT0NPTF9SQzY6CisKKwkJaWYgKHdha2VfcmM2bW9kZSA9PSAwKSB7CisJCQlpZiAod2FrZV9zYyA+IDB4RkZGRikgeworCQkJCWRvX3dha2UgPSAwOworCQkJCWRldl9lcnIoZGV2LCAiUkM2IC0gSW52YWxpZCB3YWtlIHNjYW5jb2RlXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogQ29tbWFuZCAqLworCQkJbWF0Y2hbMF0gPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+ICAwKTsKKwkJCW1hc2tbMF0gID0gMHhGRjsKKwkJCW1hdGNoWzFdID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgNCk7CisJCQltYXNrWzFdICA9IDB4RkY7CisKKwkJCS8qIEFkZHJlc3MgKi8KKwkJCW1hdGNoWzJdID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgOCk7CisJCQltYXNrWzJdICA9IDB4RkY7CisJCQltYXRjaFszXSA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMTIpOworCQkJbWFza1szXSAgPSAweEZGOworCisJCQkvKiBIZWFkZXIgKi8KKwkJCW1hdGNoWzRdID0gMHg1MDsgLyogbW9kZTEgPSBtb2RlMCA9IDAsIGlnbm9yZSB0b2dnbGUgKi8KKwkJCW1hc2tbNF0gID0gMHhGMDsKKwkJCW1hdGNoWzVdID0gMHgwOTsgLyogc3RhcnQgYml0ID0gMSwgbW9kZTIgPSAwICovCisJCQltYXNrWzVdICA9IDB4MEY7CisKKwkJCXJjNl9jc2wgPSA0NDsKKworCQl9IGVsc2UgaWYgKHdha2VfcmM2bW9kZSA9PSA2KSB7CisJCQlpID0gMDsKKworCQkJLyogQ29tbWFuZCAqLworCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgMCk7CisJCQltYXNrW2krK10gPSAweEZGOworCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgNCk7CisJCQltYXNrW2krK10gPSAweEZGOworCisJCQkvKiBBZGRyZXNzICsgVG9nZ2xlICovCisJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+ICA4KTsKKwkJCW1hc2tbaSsrXSA9IDB4RkY7CisJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDEyKTsKKwkJCW1hc2tbaSsrXSA9IDB4M0Y7CisKKwkJCS8qIEN1c3RvbWVyIGJpdHMgNyAtIDAgKi8KKwkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMTYpOworCQkJbWFza1tpKytdID0gMHhGRjsKKwkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMjApOworCQkJbWFza1tpKytdID0gMHhGRjsKKworCQkJaWYgKHdha2Vfc2MgJiAweDgwMDAwMDAwKSB7CisJCQkJLyogQ3VzdG9tZXIgcmFuZ2UgYml0IGFuZCBiaXRzIDE1IC0gOCAqLworCQkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMjQpOworCQkJCW1hc2tbaSsrXSA9IDB4RkY7CisJCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAyOCk7CisJCQkJbWFza1tpKytdID0gMHhGRjsKKwkJCQlyYzZfY3NsID0gNzY7CisJCQl9IGVsc2UgaWYgKHdha2Vfc2MgPD0gMHgwMDdGRkZGRikgeworCQkJCXJjNl9jc2wgPSA2MDsKKwkJCX0gZWxzZSB7CisJCQkJZG9fd2FrZSA9IDA7CisJCQkJZGV2X2VycihkZXYsICJSQzYgLSBJbnZhbGlkIHdha2Ugc2NhbmNvZGVcbiIpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBIZWFkZXIgKi8KKwkJCW1hdGNoW2ldICA9IDB4OTM7IC8qIG1vZGUxID0gbW9kZTAgPSAxLCBzdWJtb2RlID0gMCAqLworCQkJbWFza1tpKytdID0gMHhGRjsKKwkJCW1hdGNoW2ldICA9IDB4MEE7IC8qIHN0YXJ0IGJpdCA9IDEsIG1vZGUyID0gMSAqLworCQkJbWFza1tpKytdID0gMHgwRjsKKworCQl9IGVsc2UgeworCQkJZG9fd2FrZSA9IDA7CisJCQlkZXZfZXJyKGRldiwgIlJDNiAtIEludmFsaWQgd2FrZSBtb2RlXG4iKTsKKwkJfQorCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZG9fd2FrZSA9IDA7CisJCWJyZWFrOworCX0KKworZmluaXNoOgorCWlmIChkb193YWtlKSB7CisJCS8qIFNldCBjb21wYXJlIGFuZCBjb21wYXJlIG1hc2sgKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfSU5ERVgsCisJCQkgICAgICAgV0JDSVJfUkVHU0VMX0NPTVBBUkUgfCBXQkNJUl9SRUdfQUREUjAsCisJCQkgICAgICAgMHgzRik7CisJCW91dHNiKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0RBVEEsIG1hdGNoLCAxMSk7CisJCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0lOREVYLAorCQkJICAgICAgIFdCQ0lSX1JFR1NFTF9NQVNLIHwgV0JDSVJfUkVHX0FERFIwLAorCQkJICAgICAgIDB4M0YpOworCQlvdXRzYihkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9EQVRBLCBtYXNrLCAxMSk7CisKKwkJLyogUkM2IENvbXBhcmUgU3RyaW5nIExlbiAqLworCQlvdXRiKHJjNl9jc2wsIGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NTTCk7CisKKwkJLyogQ2xlYXIgc3RhdHVzIGJpdHMgTkVDX1JFUCwgQlVGRiwgTVNHX0VORCwgTUFUQ0ggKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfU1RTLCAweDE3LCAweDE3KTsKKworCQkvKiBDbGVhciBCVUZGX0VOLCBDbGVhciBFTkRfRU4sIFNldCBNQVRDSF9FTiAqLworCQl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMSwgMHgwNyk7CisKKwkJLyogU2V0IENFSVJfRU4gKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAxLCAweDAxKTsKKworCX0gZWxzZSB7CisJCS8qIENsZWFyIEJVRkZfRU4sIENsZWFyIEVORF9FTiwgQ2xlYXIgTUFUQ0hfRU4gKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfRVZfRU4sIDB4MDAsIDB4MDcpOworCisJCS8qIENsZWFyIENFSVJfRU4gKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAwLCAweDAxKTsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKK30KKworc3RhdGljIGludAord2JjaXJfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJd2JjaXJfc2h1dGRvd24oZGV2aWNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAord2JjaXJfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpkZXZpY2UpCit7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBwbnBfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCS8qIENsZWFyIEJVRkZfRU4sIENsZWFyIEVORF9FTiwgQ2xlYXIgTUFUQ0hfRU4gKi8KKwl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMCwgMHgwNyk7CisKKwkvKiBDbGVhciBDRUlSX0VOICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAwLCAweDAxKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJd2JjaXJfcmVzZXRfaXJkYXRhKGRhdGEpOworCW91dGIoV0JDSVJfSVJRX1JYIHwgV0JDSVJfSVJRX0VSUiwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lFUik7CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNFVFVQL0lOSVQgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAord2JjaXJfY2ZnX2NlaXIoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCit7CisJdTggdG1wOworCisJLyogU2V0IFBST1RfU0VMLCBSWF9JTlYsIENsZWFyIENFSVJfRU4gKG5lZWRlZCBmb3IgdGhlIGxlZCkgKi8KKwl0bXAgPSBwcm90b2NvbCA8PCA0OworCWlmIChpbnZlcnQpCisJCXRtcCB8PSAweDA4OworCW91dGIodG1wLCBkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9DVEwpOworCisJLyogQ2xlYXIgc3RhdHVzIGJpdHMgTkVDX1JFUCwgQlVGRiwgTVNHX0VORCwgTUFUQ0ggKi8KKwl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9TVFMsIDB4MTcsIDB4MTcpOworCisJLyogQ2xlYXIgQlVGRl9FTiwgQ2xlYXIgRU5EX0VOLCBDbGVhciBNQVRDSF9FTiAqLworCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0VWX0VOLCAweDAwLCAweDA3KTsKKworCS8qIFNldCBSQzUgY2VsbCB0aW1lIHRvIGNvcnJlc3BvbmQgdG8gMzYga0h6ICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ0ZHMSwgMHg0QSwgMHg3Rik7CisKKwkvKiBTZXQgSVJUWF9JTlYgKi8KKwlpZiAoaW52ZXJ0KQorCQlvdXRiKDB4MDQsIGRhdGEtPmViYXNlICsgV0JDSVJfUkVHX0VDRUlSX0NDVEwpOworCWVsc2UKKwkJb3V0YigweDAwLCBkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DQ1RMKTsKKworCS8qCisJICogQ2xlYXIgSVIgTEVELCBzZXQgU1AzIGNsb2NrIHRvIDI0TWh6CisJICogc2V0IFNQM19JUlJYX1NXIHRvIGJpbmFyeSAwMSwgaGVscGZ1bGx5IG5vdCBkb2N1bWVudGVkCisJICovCisJb3V0YigweDEwLCBkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DVFMpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAord2JjaXJfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldmljZSwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGV2aWNlLT5kZXY7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGE7CisJaW50IGVycjsKKworCWlmICghKHBucF9wb3J0X2xlbihkZXZpY2UsIDApID09IEVIRlVOQ19JT01FTV9MRU4gJiYKKwkgICAgICBwbnBfcG9ydF9sZW4oZGV2aWNlLCAxKSA9PSBXQUtFVVBfSU9NRU1fTEVOICYmCisJICAgICAgcG5wX3BvcnRfbGVuKGRldmljZSwgMikgPT0gU1BfSU9NRU1fTEVOKSkgeworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwbnBfc2V0X2RydmRhdGEoZGV2aWNlLCBkYXRhKTsKKworCWRhdGEtPmViYXNlID0gcG5wX3BvcnRfc3RhcnQoZGV2aWNlLCAwKTsKKwlkYXRhLT53YmFzZSA9IHBucF9wb3J0X3N0YXJ0KGRldmljZSwgMSk7CisJZGF0YS0+c2Jhc2UgPSBwbnBfcG9ydF9zdGFydChkZXZpY2UsIDIpOworCWRhdGEtPmlycSA9IHBucF9pcnEoZGV2aWNlLCAwKTsKKworCWlmIChkYXRhLT53YmFzZSA9PSAwIHx8IGRhdGEtPmViYXNlID09IDAgfHwKKwkgICAgZGF0YS0+c2Jhc2UgPT0gMCB8fCBkYXRhLT5pcnEgPT0gMCkgeworCQllcnIgPSAtRU5PREVWOworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBleGl0X2ZyZWVfZGF0YTsKKwl9CisKKwlkZXZfZGJnKCZkZXZpY2UtPmRldiwgIkZvdW5kIGRldmljZSAiCisJCSIodzogMHglbFgsIGU6IDB4JWxYLCBzOiAweCVsWCwgaTogJXUpXG4iLAorCQlkYXRhLT53YmFzZSwgZGF0YS0+ZWJhc2UsIGRhdGEtPnNiYXNlLCBkYXRhLT5pcnEpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkYXRhLT53YmFzZSwgV0FLRVVQX0lPTUVNX0xFTiwgRFJWTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJSZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJZGF0YS0+d2Jhc2UsIGRhdGEtPndiYXNlICsgV0FLRVVQX0lPTUVNX0xFTiAtIDEpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXhpdF9mcmVlX2RhdGE7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkYXRhLT5lYmFzZSwgRUhGVU5DX0lPTUVNX0xFTiwgRFJWTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJSZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJZGF0YS0+ZWJhc2UsIGRhdGEtPmViYXNlICsgRUhGVU5DX0lPTUVNX0xFTiAtIDEpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXhpdF9yZWxlYXNlX3diYXNlOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oZGF0YS0+c2Jhc2UsIFNQX0lPTUVNX0xFTiwgRFJWTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJSZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJZGF0YS0+c2Jhc2UsIGRhdGEtPnNiYXNlICsgU1BfSU9NRU1fTEVOIC0gMSk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBleGl0X3JlbGVhc2VfZWJhc2U7CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEoZGF0YS0+aXJxLCB3YmNpcl9pcnFfaGFuZGxlciwKKwkJCSAgSVJRRl9ESVNBQkxFRCwgRFJWTkFNRSwgZGV2aWNlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNsYWltIElSUSAldVxuIiwgZGF0YS0+aXJxKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXRfcmVsZWFzZV9zYmFzZTsKKwl9CisKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImNpci10eCIsICZkYXRhLT50eHRyaWdnZXIpOworCWlmICghZGF0YS0+dHh0cmlnZ2VyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9mcmVlX2lycTsKKwl9CisKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImNpci1yeCIsICZkYXRhLT5yeHRyaWdnZXIpOworCWlmICghZGF0YS0+cnh0cmlnZ2VyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF91bnJlZ2lzdGVyX3R4dHJpZ2dlcjsKKwl9CisKKwlkYXRhLT5sZWQubmFtZSA9ICJjaXI6OmFjdGl2aXR5IjsKKwlkYXRhLT5sZWQuZGVmYXVsdF90cmlnZ2VyID0gImNpci1yeCI7CisJZGF0YS0+bGVkLmJyaWdodG5lc3Nfc2V0ID0gd2JjaXJfbGVkX2JyaWdodG5lc3Nfc2V0OworCWRhdGEtPmxlZC5icmlnaHRuZXNzX2dldCA9IHdiY2lyX2xlZF9icmlnaHRuZXNzX2dldDsKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmRldmljZS0+ZGV2LCAmZGF0YS0+bGVkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl9yeHRyaWdnZXI7CisKKwlkYXRhLT5pbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWRhdGEtPmlucHV0X2RldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl9sZWQ7CisJfQorCisJZGF0YS0+aW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWRhdGEtPmlucHV0X2Rldi0+bmFtZSA9IFdCQ0lSX05BTUU7CisJZGF0YS0+aW5wdXRfZGV2LT5waHlzID0gIndiY2lyL2NpcjAiOworCWRhdGEtPmlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWRhdGEtPmlucHV0X2Rldi0+aWQudmVuZG9yICA9IFBDSV9WRU5ET1JfSURfV0lOQk9ORDsKKwlkYXRhLT5pbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBXQkNJUl9JRF9GQU1JTFk7CisJZGF0YS0+aW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gV0JDSVJfSURfQ0hJUDsKKwlkYXRhLT5pbnB1dF9kZXYtPmdldGtleWNvZGUgPSB3YmNpcl9nZXRrZXljb2RlOworCWRhdGEtPmlucHV0X2Rldi0+c2V0a2V5Y29kZSA9IHdiY2lyX3NldGtleWNvZGU7CisJaW5wdXRfc2V0X2NhcGFiaWxpdHkoZGF0YS0+aW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOKTsKKwlpbnB1dF9zZXRfZHJ2ZGF0YShkYXRhLT5pbnB1dF9kZXYsIGRhdGEpOworCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7CisJaWYgKGVycikKKwkJZ290byBleGl0X2ZyZWVfaW5wdXQ7CisKKwlkYXRhLT5sYXN0X3NjYW5jb2RlID0gSU5WQUxJRF9TQ0FOQ09ERTsKKwlJTklUX0xJU1RfSEVBRCgmZGF0YS0+a2V5dGFibGUpOworCXNldHVwX3RpbWVyKCZkYXRhLT50aW1lcl9rZXl1cCwgd2JjaXJfa2V5dXAsICh1bnNpZ25lZCBsb25nKWRhdGEpOworCisJLyogTG9hZCBkZWZhdWx0IGtleW1hcHMgKi8KKwlpZiAocHJvdG9jb2wgPT0gSVJfUFJPVE9DT0xfUkM2KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYzZfZGVmX2tleW1hcCk7IGkrKykgeworCQkJZXJyID0gd2JjaXJfc2V0a2V5Y29kZShkYXRhLT5pbnB1dF9kZXYsCisJCQkJCSAgICAgICAoaW50KXJjNl9kZWZfa2V5bWFwW2ldLnNjYW5jb2RlLAorCQkJCQkgICAgICAgKGludClyYzZfZGVmX2tleW1hcFtpXS5rZXljb2RlKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X3VucmVnaXN0ZXJfa2V5czsKKwkJfQorCX0KKworCWRldmljZV9pbml0X3dha2V1cCgmZGV2aWNlLT5kZXYsIDEpOworCisJd2JjaXJfY2ZnX2NlaXIoZGF0YSk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCW91dGIoV0JDSVJfSVJRX05PTkUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCisJLyogRW5hYmxlIGV4dGVuZGVkIG1vZGUgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzIpOworCW91dGIoV0JDSVJfRVhUX0VOQUJMRSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0VYQ1IxKTsKKworCS8qCisJICogQ29uZmlndXJlIGJhdWQgZ2VuZXJhdG9yLCBJUiBkYXRhIHdpbGwgYmUgc2FtcGxlZCBhdAorCSAqIGEgYml0cmF0ZSBvZjogKDI0TWh6ICogcHJlc2NhbGVyKSAvIChkaXZpc29yICogMTYpLgorCSAqCisJICogVGhlIEVDSVIgcmVnaXN0ZXJzIGluY2x1ZGUgYSBmbGFnIHRvIGNoYW5nZSB0aGUKKwkgKiAyNE1oeiBjbG9jayBmcmVxIHRvIDQ4TWh6LgorCSAqCisJICogSXQncyBub3QgZG9jdW1lbnRlZCBpbiB0aGUgc3BlY3MsIGJ1dCBmaWZvIGxldmVscworCSAqIG90aGVyIHRoYW4gMTYgc2VlbXMgdG8gYmUgdW5zdXBwb3J0ZWQuCisJICovCisKKwkvKiBwcmVzY2FsZXIgMS4wLCB0eC9yeCBmaWZvIGx2bCAxNiAqLworCW91dGIoMHgzMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0VYQ1IyKTsKKworCS8qIFNldCBiYXVkIGRpdmlzb3IgdG8gZ2VuZXJhdGUgb25lIGJ5dGUgcGVyIGJpdC9jZWxsICovCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgSVJfUFJPVE9DT0xfUkM1OgorCQlvdXRiKDB4QTcsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKKwkJYnJlYWs7CisJY2FzZSBJUl9QUk9UT0NPTF9SQzY6CisJCW91dGIoMHg1MywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOworCQlicmVhazsKKwljYXNlIElSX1BST1RPQ09MX05FQzoKKwkJb3V0YigweDY5LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7CisJCWJyZWFrOworCX0KKwlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RIKTsKKworCS8qIFNldCBDRUlSIG1vZGUgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCW91dGIoMHhDMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX01DUik7CisJaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19MU1IpOyAvKiBDbGVhciBMU1IgKi8KKwlpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX01TUik7IC8qIENsZWFyIE1TUiAqLworCisJLyogRGlzYWJsZSBSWCBkZW1vZCwgcnVuLWxlbmd0aCBlbmNvZGluZy9kZWNvZGluZywgc2V0IGZyZXEgc3BhbiAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNyk7CisJb3V0YigweDEwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfUkNDRkcpOworCisJLyogRGlzYWJsZSB0aW1lciAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNCk7CisJb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjEpOworCisJLyogRW5hYmxlIE1TUiBpbnRlcnJ1cHQsIENsZWFyIEFVWF9JUlggKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzUpOworCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IyKTsKKworCS8qIERpc2FibGUgQ1JDICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS182KTsKKwlvdXRiKDB4MjAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMyk7CisKKwkvKiBTZXQgUlgvVFggKGRlKW1vZHVsYXRpb24gZnJlcSwgbm90IHJlYWxseSB1c2VkICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS183KTsKKwlvdXRiKDB4RjIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUlJYREMpOworCW91dGIoMHg2OSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSVFhNQyk7CisKKwkvKiBTZXQgaW52ZXJ0IGFuZCBwaW4gZGlyZWN0aW9uICovCisJaWYgKGludmVydCkKKwkJb3V0YigweDEwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDRkc0KTsKKwllbHNlCisJCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ0ZHNCk7CisKKwkvKiBTZXQgRklGTyB0aHJlc2hvbGRzIChSWCA9IDgsIFRYID0gMyksIHJlc2V0IFJYL1RYICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKDB4OTcsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19GQ1IpOworCisJLyogQ2xlYXIgQVVYIHN0YXR1cyBiaXRzICovCisJb3V0YigweEUwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQVNDUik7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCW91dGIoV0JDSVJfSVJRX1JYIHwgV0JDSVJfSVJRX0VSUiwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lFUik7CisKKwlyZXR1cm4gMDsKKworZXhpdF91bnJlZ2lzdGVyX2tleXM6CisJaWYgKCFsaXN0X2VtcHR5KCZkYXRhLT5rZXl0YWJsZSkpIHsKKwkJc3RydWN0IHdiY2lyX2tleWVudHJ5ICprZXk7CisJCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5dG1wOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIGtleXRtcCwgJmRhdGEtPmtleXRhYmxlLCBsaXN0KSB7CisJCQlsaXN0X2RlbCgma2V5LT5saXN0KTsKKwkJCWtmcmVlKGtleSk7CisJCX0KKwl9CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+aW5wdXRfZGV2KTsKKwkvKiBDYW4ndCBjYWxsIGlucHV0X2ZyZWVfZGV2aWNlIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UgKi8KKwlkYXRhLT5pbnB1dF9kZXYgPSBOVUxMOworZXhpdF9mcmVlX2lucHV0OgorCWlucHV0X2ZyZWVfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7CitleGl0X3VucmVnaXN0ZXJfbGVkOgorCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkYXRhLT5sZWQpOworZXhpdF91bnJlZ2lzdGVyX3J4dHJpZ2dlcjoKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShkYXRhLT5yeHRyaWdnZXIpOworZXhpdF91bnJlZ2lzdGVyX3R4dHJpZ2dlcjoKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShkYXRhLT50eHRyaWdnZXIpOworZXhpdF9mcmVlX2lycToKKwlmcmVlX2lycShkYXRhLT5pcnEsIGRldmljZSk7CitleGl0X3JlbGVhc2Vfc2Jhc2U6CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+c2Jhc2UsIFNQX0lPTUVNX0xFTik7CitleGl0X3JlbGVhc2VfZWJhc2U6CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+ZWJhc2UsIEVIRlVOQ19JT01FTV9MRU4pOworZXhpdF9yZWxlYXNlX3diYXNlOgorCXJlbGVhc2VfcmVnaW9uKGRhdGEtPndiYXNlLCBXQUtFVVBfSU9NRU1fTEVOKTsKK2V4aXRfZnJlZV9kYXRhOgorCWtmcmVlKGRhdGEpOworCXBucF9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK3diY2lyX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlKQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gcG5wX2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IHdiY2lyX2tleWVudHJ5ICprZXk7CisJc3RydWN0IHdiY2lyX2tleWVudHJ5ICprZXl0bXA7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCW91dGIoV0JDSVJfSVJRX05PTkUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCisJZGVsX3RpbWVyX3N5bmMoJmRhdGEtPnRpbWVyX2tleXVwKTsKKworCWZyZWVfaXJxKGRhdGEtPmlycSwgZGV2aWNlKTsKKworCS8qIENsZWFyIHN0YXR1cyBiaXRzIE5FQ19SRVAsIEJVRkYsIE1TR19FTkQsIE1BVENIICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfU1RTLCAweDE3LCAweDE3KTsKKworCS8qIENsZWFyIENFSVJfRU4gKi8KKwl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9DVEwsIDB4MDAsIDB4MDEpOworCisJLyogQ2xlYXIgQlVGRl9FTiwgRU5EX0VOLCBNQVRDSF9FTiAqLworCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0VWX0VOLCAweDAwLCAweDA3KTsKKworCS8qIFRoaXMgd2lsbCBnZW5lcmF0ZSBhIGtleXVwIGV2ZW50IGlmIG5lY2Vzc2FyeSAqLworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7CisKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShkYXRhLT5yeHRyaWdnZXIpOworCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGRhdGEtPnR4dHJpZ2dlcik7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRhdGEtPmxlZCk7CisKKwkvKiBUaGlzIGlzIG9rIHNpbmNlICZkYXRhLT5sZWQgaXNuJ3QgYWN0dWFsbHkgdXNlZCAqLworCXdiY2lyX2xlZF9icmlnaHRuZXNzX3NldCgmZGF0YS0+bGVkLCBMRURfT0ZGKTsKKworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPndiYXNlLCBXQUtFVVBfSU9NRU1fTEVOKTsKKwlyZWxlYXNlX3JlZ2lvbihkYXRhLT5lYmFzZSwgRUhGVU5DX0lPTUVNX0xFTik7CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+c2Jhc2UsIFNQX0lPTUVNX0xFTik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCBrZXl0bXAsICZkYXRhLT5rZXl0YWJsZSwgbGlzdCkgeworCQlsaXN0X2RlbCgma2V5LT5saXN0KTsKKwkJa2ZyZWUoa2V5KTsKKwl9CisKKwlrZnJlZShkYXRhKTsKKworCXBucF9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgd2JjaXJfaWRzW10gPSB7CisJeyAiV0VDMTAyMiIsIDAgfSwKKwl7ICIiLCAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgd2JjaXJfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHdiY2lyX2RyaXZlciA9IHsKKwkubmFtZSAgICAgPSBXQkNJUl9OQU1FLAorCS5pZF90YWJsZSA9IHdiY2lyX2lkcywKKwkucHJvYmUgICAgPSB3YmNpcl9wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcCh3YmNpcl9yZW1vdmUpLAorCS5zdXNwZW5kICA9IHdiY2lyX3N1c3BlbmQsCisJLnJlc3VtZSAgID0gd2JjaXJfcmVzdW1lLAorCS5zaHV0ZG93biA9IHdiY2lyX3NodXRkb3duCit9OworCitzdGF0aWMgaW50IF9faW5pdAord2JjaXJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBJUl9QUk9UT0NPTF9SQzU6CisJY2FzZSBJUl9QUk9UT0NPTF9ORUM6CisJY2FzZSBJUl9QUk9UT0NPTF9SQzY6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IEludmFsaWQgcHJvdG9jb2wgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZ3YmNpcl9kcml2ZXIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IFVuYWJsZSB0byByZWdpc3RlciBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit3YmNpcl9leGl0KHZvaWQpCit7CisJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZ3YmNpcl9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldpbmJvbmQgU3VwZXJJL08gQ29uc3VtZXIgSVIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHdiY2lyX2luaXQpOworbW9kdWxlX2V4aXQod2JjaXJfZXhpdCk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzcuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc3LmMKaW5kZXggZWNhZWI3ZS4uZWI4MzkzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc3LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzcuYwpAQCAtODQyLDMgKzg0Miw0IEBACiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBRDc4NzcgdG91Y2hzY3JlZW4gRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTphZDc4NzciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCmluZGV4IDVkOGE3MDMuLjE5YjRkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYwpAQCAtNzc5LDMgKzc3OSw0IEBACiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBRDc4NzkoLTEpIHRvdWNoc2NyZWVuIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6YWQ3ODc5Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IGJhOWQzOGMuLjA5YzgxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC0xMjU2LDMgKzEyNTYsNCBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFEUzc4NDYgVG91Y2hTY3JlZW4gRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTphZHM3ODQ2Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKaW5kZXggMjUyZWIxMS4uZjk0NDkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYwpAQCAtNTYxLDYgKzU2MSw3IEBACiBzdGF0aWMgaW50IHdtOTd4eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHdtOTd4eCAqd207CisJc3RydWN0IHdtOTd4eF9wZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldCA9IDAsIGlkID0gMDsKIAogCXdtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtOTd4eCksIEdGUF9LRVJORUwpOwpAQCAtNjU4LDYgKzY1OSw3IEBACiAJfQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHdtLT5iYXR0ZXJ5X2Rldiwgd20pOwogCXdtLT5iYXR0ZXJ5X2Rldi0+ZGV2LnBhcmVudCA9IGRldjsKKwl3bS0+YmF0dGVyeV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZCh3bS0+YmF0dGVyeV9kZXYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGJhdHRfcmVnX2VycjsKQEAgLTY3MSw2ICs2NzMsNyBAQAogCX0KIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSh3bS0+dG91Y2hfZGV2LCB3bSk7CiAJd20tPnRvdWNoX2Rldi0+ZGV2LnBhcmVudCA9IGRldjsKKwl3bS0+dG91Y2hfZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOwogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQod20tPnRvdWNoX2Rldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdG91Y2hfcmVnX2VycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKaW5kZXggYmZmNzJkOC4uOWY4ZjY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNhcGlmc19zb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjYXBpZnNfc29wcyA9CiB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5yZW1vdW50X2ZzCT0gY2FwaWZzX3JlbW91bnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpdXRpbC5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaXV0aWwuYwppbmRleCAxNmYyZTQ2Li4yNjYyNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpdXRpbC5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGl1dGlsLmMKQEAgLTEwMTksNyArMTAxOSw3IEBACiAJaWYgKCFnX2RlYmJ1Zi0+YnVmKSB7CiAJCWtmcmVlKGdfY21zZyk7CiAJCWtmcmVlKGdfZGViYnVmKTsKLQkJcmV0dXJuIC1FTk9NRU07OworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZ19kZWJidWYtPnNpemUgPSBDREVCVUdfR1NJWkU7CiAJZ19kZWJidWYtPmJ1ZlswXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKaW5kZXggNTBlZDc3OC4uMDlkNGRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwpAQCAtODksMTQgKzg5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2NvbnRyb2xsZXJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY29udHJvbGxlcl9vcHMgPSB7CiAJLnN0YXJ0CT0gY29udHJvbGxlcl9zdGFydCwKIAkubmV4dAk9IGNvbnRyb2xsZXJfbmV4dCwKIAkuc3RvcAk9IGNvbnRyb2xsZXJfc3RvcCwKIAkuc2hvdwk9IGNvbnRyb2xsZXJfc2hvdywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2NvbnRyc3RhdHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY29udHJzdGF0c19vcHMgPSB7CiAJLnN0YXJ0CT0gY29udHJvbGxlcl9zdGFydCwKIAkubmV4dAk9IGNvbnRyb2xsZXJfbmV4dCwKIAkuc3RvcAk9IGNvbnRyb2xsZXJfc3RvcCwKQEAgLTE5NCwxNCArMTk0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2FwcGxpY2F0aW9uc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9hcHBsaWNhdGlvbnNfb3BzID0gewogCS5zdGFydAk9IGFwcGxpY2F0aW9uc19zdGFydCwKIAkubmV4dAk9IGFwcGxpY2F0aW9uc19uZXh0LAogCS5zdG9wCT0gYXBwbGljYXRpb25zX3N0b3AsCiAJLnNob3cJPSBhcHBsaWNhdGlvbnNfc2hvdywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2FwcGxzdGF0c19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9hcHBsc3RhdHNfb3BzID0gewogCS5zdGFydAk9IGFwcGxpY2F0aW9uc19zdGFydCwKIAkubmV4dAk9IGFwcGxpY2F0aW9uc19uZXh0LAogCS5zdG9wCT0gYXBwbGljYXRpb25zX3N0b3AsCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY2FwaV9kcml2ZXJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY2FwaV9kcml2ZXJfb3BzID0gewogCS5zdGFydAk9IGNhcGlfZHJpdmVyX3N0YXJ0LAogCS5uZXh0CT0gY2FwaV9kcml2ZXJfbmV4dCwKIAkuc3RvcAk9IGNhcGlfZHJpdmVyX3N0b3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCmluZGV4IDhmZjdlMzUuLmYzM2FjMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCkBAIC00MDgsMzMgKzQwOCwyOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgZXJyb3IgcmV0dXJucyAqLwotCiBzdGF0aWMgaW50IGlmX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwotCWludCByZXR2YWwgPSAtRU5PREVWOworCWludCByZXR2YWwgPSAwOwogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKIAkJcHJfZXJyKCIlczogbm8gY2FyZHN0YXRlXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAl9CiAKIAlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCi0JaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJaWYgKCFjcy0+Y29ubmVjdGVkKQogCQlnaWdfZGJnKERFQlVHX0lGLCAibm90IGNvbm5lY3RlZCIpOwotCQlyZXR2YWwgPSAtRU5PREVWOwotCX0gZWxzZSBpZiAoIWNzLT5vcGVuX2NvdW50KQorCWVsc2UgaWYgKCFjcy0+b3Blbl9jb3VudCkKIAkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiBkZXZpY2Ugbm90IG9wZW5lZFxuIiwgX19mdW5jX18pOwotCWVsc2UgaWYgKGNzLT5tc3RhdGUgIT0gTVNfTE9DS0VEKSB7CisJZWxzZSBpZiAoY3MtPm1zdGF0ZSAhPSBNU19MT0NLRUQpCiAJCWRldl93YXJuKGNzLT5kZXYsICJjYW4ndCB3cml0ZSB0byB1bmxvY2tlZCBkZXZpY2VcbiIpOwotCQlyZXR2YWwgPSAtRUJVU1k7Ci0JfSBlbHNlCisJZWxzZQogCQlyZXR2YWwgPSBjcy0+b3BzLT5jaGFyc19pbl9idWZmZXIoY3MpOwogCiAJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCmluZGV4IDcxODhjNTkuLmFkYjFlOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKQEAgLTc2MSw3ICs3NjEsNyBAQAogICogQmUgYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCBhbiBhdG9taWMgb3BlcmF0aW9uIHdoZW4gc2xlZXAgIT0gMCwgZXZlbiB0aG91Z2ggCiAgKiBpbnRlcnJ1cHRzIGFyZSB0dXJuZWQgb2ZmISBXZWxsLCBsaWtlIHRoYXQgd2UgYXJlIGN1cnJlbnRseSBvbmx5IGNhbGxlZAogICogb24gYmVoYWxmIG9mIGEgcmVhZCBzeXN0ZW0gY2FsbCBvbiByYXcgZGV2aWNlIGZpbGVzICh3aGljaCBhcmUgZG9jdW1lbnRlZAotICogdG8gYmUgZGFuZ2Vyb3VzIGFuZCBmb3IgZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkpLiBUaGUgaW5vZGUgc2VtYXBob3JlCisgKiB0byBiZSBkYW5nZXJvdXMgYW5kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5KS4gVGhlIGlub2RlIHNlbWFwaG9yZQogICogdGFrZXMgY2FyZSB0aGF0IHRoaXMgaXMgbm90IGNhbGxlZCBmb3IgdGhlIHNhbWUgbWlub3IgZGV2aWNlIG51bWJlciB3aGlsZQogICogd2UgYXJlIHNsZWVwaW5nLCBidXQgYWNjZXNzIGlzIG5vdCBzZXJpYWxpemVkIGFnYWluc3Qgc2ltdWx0YW5lb3VzIHJlYWQoKQogICogZnJvbSB0aGUgY29ycmVzcG9uZGluZyB0dHlJIGRldmljZS4gQ2FuIG90aGVyIHVnbHkgZXZlbnRzLCBsaWtlIGNoYW5nZXMKQEAgLTg3Myw3ICs4NzMsNyBAQAogICogQmUgYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCBhbiBhdG9taWMgb3BlcmF0aW9uIHdoZW4gc2xlZXAgIT0gMCwgZXZlbiB0aG91Z2gKICAqIGludGVycnVwdHMgYXJlIHR1cm5lZCBvZmYhIFdlbGwsIGxpa2UgdGhhdCB3ZSBhcmUgY3VycmVudGx5IG9ubHkgY2FsbGVkCiAgKiBvbiBiZWhhbGYgb2YgYSByZWFkIHN5c3RlbSBjYWxsIG9uIHJhdyBkZXZpY2UgZmlsZXMgKHdoaWNoIGFyZSBkb2N1bWVudGVkCi0gKiB0byBiZSBkYW5nZXJvdXMgYW5kIGZvciBmb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seSkuIFRoZSBpbm9kZSBzZW1hcGhvcmUKKyAqIHRvIGJlIGRhbmdlcm91cyBhbmQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkpLiBUaGUgaW5vZGUgc2VtYXBob3JlCiAgKiB0YWtlcyBjYXJlIHRoYXQgdGhpcyBpcyBub3QgY2FsbGVkIGZvciB0aGUgc2FtZSBtaW5vciBkZXZpY2UgbnVtYmVyIHdoaWxlCiAgKiB3ZSBhcmUgc2xlZXBpbmcsIGJ1dCBhY2Nlc3MgaXMgbm90IHNlcmlhbGl6ZWQgYWdhaW5zdCBzaW11bHRhbmVvdXMgcmVhZCgpCiAgKiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHR0eUkgZGV2aWNlLiBDYW4gb3RoZXIgdWdseSBldmVudHMsIGxpa2UgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtZGFjMTI0czA4NS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtZGFjMTI0czA4NS5jCmluZGV4IDA5OGQ5YWEuLjI5MTNkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWRhYzEyNHMwODUuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1kYWMxMjRzMDg1LmMKQEAgLTE0OCwzICsxNDgsNCBAQAogTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxsZ0BkZW54LmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEQUMxMjRTMDg1IExFRCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygic3BpOmRhYzEyNHMwODUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2NvcmUuYyBiL2RyaXZlcnMvbGd1ZXN0L2NvcmUuYwppbmRleCAxZTJjYjg0Li44NzQ0ZDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9jb3JlLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvY29yZS5jCkBAIC02NywxMiArNjcsMTEgQEAKIAkgKiBzbyB3ZSBtYWtlIHN1cmUgdGhleSdyZSB6ZXJvZWQuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IFRPVEFMX1NXSVRDSEVSX1BBR0VTOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIWFkZHIpIHsKKwkJc3dpdGNoZXJfcGFnZVtpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKKwkJaWYgKCFzd2l0Y2hlcl9wYWdlW2ldKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBmcmVlX3NvbWVfcGFnZXM7CiAJCX0KLQkJc3dpdGNoZXJfcGFnZVtpXSA9IHZpcnRfdG9fcGFnZShhZGRyKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYyBiL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMKaW5kZXggYThkMGFlZS4uY2Y5NDMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYworKysgYi9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJICogQW5kIHdlIGNvcHkgdGhlIGZsYWdzIHRvIHRoZSBzaGFkb3cgUE1EIGVudHJ5LiAgVGhlIHBhZ2UKIAkJICogbnVtYmVyIGluIHRoZSBzaGFkb3cgUE1EIGlzIHRoZSBwYWdlIHdlIGp1c3QgYWxsb2NhdGVkLgogCQkgKi8KLQkJbmF0aXZlX3NldF9wbWQoc3BtZCwgX19wbWQoX19wYShwdGVwYWdlKSB8IHBtZF9mbGFncyhncG1kKSkpOworCQlzZXRfcG1kKHNwbWQsIF9fcG1kKF9fcGEocHRlcGFnZSkgfCBwbWRfZmxhZ3MoZ3BtZCkpKTsKIAl9CiAKIAkvKgpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJCSAqIHdlIHdpbGwgY29tZSBiYWNrIGhlcmUgd2hlbiBhIHdyaXRlIGRvZXMgYWN0dWFsbHkgb2NjdXIsIHNvCiAJCSAqIHdlIGNhbiB1cGRhdGUgdGhlIEd1ZXN0J3MgX1BBR0VfRElSVFkgZmxhZy4KIAkJICovCi0JCW5hdGl2ZV9zZXRfcHRlKHNwdGUsIGdwdGVfdG9fc3B0ZShjcHUsIHB0ZV93cnByb3RlY3QoZ3B0ZSksIDApKTsKKwkJc2V0X3B0ZShzcHRlLCBncHRlX3RvX3NwdGUoY3B1LCBwdGVfd3Jwcm90ZWN0KGdwdGUpLCAwKSk7CiAKIAkvKgogCSAqIEZpbmFsbHksIHdlIHdyaXRlIHRoZSBHdWVzdCBQVEUgZW50cnkgYmFjazogd2UndmUgc2V0IHRoZQpAQCAtNTI4LDcgKzUyOCw3IEBACiAJCS8qIE5vdyB3ZSBjYW4gZnJlZSB0aGUgcGFnZSBvZiBQVEVzICovCiAJCWZyZWVfcGFnZSgobG9uZylwdGVwYWdlKTsKIAkJLyogQW5kIHplcm8gb3V0IHRoZSBQTUQgZW50cnkgc28gd2UgbmV2ZXIgcmVsZWFzZSBpdCB0d2ljZS4gKi8KLQkJbmF0aXZlX3NldF9wbWQoc3BtZCwgX19wbWQoMCkpOworCQlzZXRfcG1kKHNwbWQsIF9fcG1kKDApKTsKIAl9CiB9CiAKQEAgLTgzMywxNSArODMzLDE1IEBACiAJCQkgKi8KIAkJCWlmIChwdGVfZmxhZ3MoZ3B0ZSkgJiAoX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkpIHsKIAkJCQljaGVja19ncHRlKGNwdSwgZ3B0ZSk7Ci0JCQkJbmF0aXZlX3NldF9wdGUoc3B0ZSwKLQkJCQkJCWdwdGVfdG9fc3B0ZShjcHUsIGdwdGUsCisJCQkJc2V0X3B0ZShzcHRlLAorCQkJCQlncHRlX3RvX3NwdGUoY3B1LCBncHRlLAogCQkJCQkJcHRlX2ZsYWdzKGdwdGUpICYgX1BBR0VfRElSVFkpKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiBPdGhlcndpc2Uga2lsbCBpdCBhbmQgd2UgY2FuIGRlbWFuZF9wYWdlKCkKIAkJCQkgKiBpdCBpbiBsYXRlci4KIAkJCQkgKi8KLQkJCQluYXRpdmVfc2V0X3B0ZShzcHRlLCBfX3B0ZSgwKSk7CisJCQkJc2V0X3B0ZShzcHRlLCBfX3B0ZSgwKSk7CiAJCQl9CiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAkJfQpAQCAtODk0LDcgKzg5NCw3IEBACiAgKiB0ZWxscyB1cyB0aGV5J3ZlIGNoYW5nZWQuICBXaGVuIHRoZSBHdWVzdCB0cmllcyB0byB1c2UgdGhlIG5ldyBlbnRyeSBpdCB3aWxsCiAgKiBmYXVsdCBhbmQgZGVtYW5kX3BhZ2UoKSB3aWxsIGZpeCBpdCB1cC4KICAqCi0gKiBTbyB3aXRoIHRoYXQgaW4gbWluZCBoZXJlJ3Mgb3VyIGNvZGUgdG8gdG8gdXBkYXRlIGEgKHRvcC1sZXZlbCkgUEdEIGVudHJ5OgorICogU28gd2l0aCB0aGF0IGluIG1pbmQgaGVyZSdzIG91ciBjb2RlIHRvIHVwZGF0ZSBhICh0b3AtbGV2ZWwpIFBHRCBlbnRyeToKICAqLwogdm9pZCBndWVzdF9zZXRfcGdkKHN0cnVjdCBsZ3Vlc3QgKmxnLCB1bnNpZ25lZCBsb25nIGdwZ2RpciwgdTMyIGlkeCkKIHsKQEAgLTk4MywyNSArOTgzLDIyIEBACiAJICovCiAJZm9yIChpID0gaiA9IDA7IGkgPCBtYXBwZWRfcGFnZXMgJiYgaiA8IFBUUlNfUEVSX1BNRDsKIAkgICAgIGkgKz0gUFRSU19QRVJfUFRFLCBqKyspIHsKLQkJLyogRklYTUU6IG5hdGl2ZV9zZXRfcG1kIGlzIG92ZXJraWxsIGhlcmUuICovCi0JCW5hdGl2ZV9zZXRfcG1kKCZwbWQsIF9fcG1kKCgodW5zaWduZWQgbG9uZykobGluZWFyICsgaSkKLQkJLSBtZW1fYmFzZSkgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSKSk7CisJCXBtZCA9IHBmbl9wbWQoKCh1bnNpZ25lZCBsb25nKSZsaW5lYXJbaV0gLSBtZW1fYmFzZSkvUEFHRV9TSVpFLAorCQkJICAgICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUikpOwogCiAJCWlmIChjb3B5X3RvX3VzZXIoJnBtZHNbal0sICZwbWQsIHNpemVvZihwbWQpKSAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJLyogT25lIFBHRCBlbnRyeSwgcG9pbnRpbmcgdG8gdGhhdCBQTUQgcGFnZS4gKi8KLQlzZXRfcGdkKCZwZ2QsIF9fcGdkKCgodTMyKXBtZHMgLSBtZW1fYmFzZSkgfCBfUEFHRV9QUkVTRU5UKSk7CisJcGdkID0gX19wZ2QoKCh1bnNpZ25lZCBsb25nKXBtZHMgLSBtZW1fYmFzZSkgfCBfUEFHRV9QUkVTRU5UKTsKIAkvKiBDb3B5IGl0IGluIGFzIHRoZSBmaXJzdCBQR0QgZW50cnkgKGllLiBhZGRyZXNzZXMgMC0xRykuICovCiAJaWYgKGNvcHlfdG9fdXNlcigmcGdkaXJbMF0sICZwZ2QsIHNpemVvZihwZ2QpKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKIAkvKgotCSAqIEFuZCB0aGUgdGhpcmQgUEdEIGVudHJ5IChpZS4gYWRkcmVzc2VzIDNHLTRHKS4KLQkgKgotCSAqIEZJWE1FOiBUaGlzIGFzc3VtZXMgdGhhdCBQQUdFX09GRlNFVCBmb3IgdGhlIEd1ZXN0IGlzIDB4QzAwMDAwMDAuCisJICogQW5kIHRoZSBvdGhlciBQR0QgZW50cnkgdG8gbWFrZSB0aGUgbGluZWFyIG1hcHBpbmcgYXQgUEFHRV9PRkZTRVQKIAkgKi8KLQlpZiAoY29weV90b191c2VyKCZwZ2RpclszXSwgJnBnZCwgc2l6ZW9mKHBnZCkpICE9IDApCisJaWYgKGNvcHlfdG9fdXNlcigmcGdkaXJbS0VSTkVMX1BHRF9CT1VOREFSWV0sICZwZ2QsIHNpemVvZihwZ2QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAjZWxzZQogCS8qCkBAIC0xMTQxLDE1ICsxMTM4LDEzIEBACiB7CiAJcHRlX3QgKnN3aXRjaGVyX3B0ZV9wYWdlID0gX19nZXRfY3B1X3Zhcihzd2l0Y2hlcl9wdGVfcGFnZXMpOwogCXB0ZV90IHJlZ3NfcHRlOwotCXVuc2lnbmVkIGxvbmcgcGZuOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAlwbWRfdCBzd2l0Y2hlcl9wbWQ7CiAJcG1kX3QgKnBtZF90YWJsZTsKIAotCS8qIEZJWE1FOiBuYXRpdmVfc2V0X3BtZCBpcyBvdmVya2lsbCBoZXJlLiAqLwotCW5hdGl2ZV9zZXRfcG1kKCZzd2l0Y2hlcl9wbWQsIHBmbl9wbWQoX19wYShzd2l0Y2hlcl9wdGVfcGFnZSkgPj4KLQkJICAgICAgIFBBR0VfU0hJRlQsIFBBR0VfS0VSTkVMX0VYRUMpKTsKKwlzd2l0Y2hlcl9wbWQgPSBwZm5fcG1kKF9fcGEoc3dpdGNoZXJfcHRlX3BhZ2UpID4+IFBBR0VfU0hJRlQsCisJCQkgICAgICAgUEFHRV9LRVJORUxfRVhFQyk7CiAKIAkvKiBGaWd1cmUgb3V0IHdoZXJlIHRoZSBwbWQgcGFnZSBpcywgYnkgcmVhZGluZyB0aGUgUEdELCBhbmQgY29udmVydGluZwogCSAqIGl0IHRvIGEgdmlydHVhbCBhZGRyZXNzLiAqLwpAQCAtMTE1Nyw3ICsxMTUyLDcgQEAKIAkJCXBnZGlyc1tjcHUtPmNwdV9wZ2RdLnBnZGlyW1NXSVRDSEVSX1BHRF9JTkRFWF0pCiAJCQkJCQkJCTw8IFBBR0VfU0hJRlQpOwogCS8qIE5vdyB3cml0ZSBpdCBpbnRvIHRoZSBzaGFkb3cgcGFnZSB0YWJsZS4gKi8KLQluYXRpdmVfc2V0X3BtZCgmcG1kX3RhYmxlW1NXSVRDSEVSX1BNRF9JTkRFWF0sIHN3aXRjaGVyX3BtZCk7CisJc2V0X3BtZCgmcG1kX3RhYmxlW1NXSVRDSEVSX1BNRF9JTkRFWF0sIHN3aXRjaGVyX3BtZCk7CiAjZWxzZQogCXBnZF90IHN3aXRjaGVyX3BnZDsKIApAQCAtMTE3OSwxMCArMTE3NCw4IEBACiAJICogcGFnZSBpcyBhbHJlYWR5IG1hcHBlZCB0aGVyZSwgd2UgZG9uJ3QgaGF2ZSB0byBjb3B5IHRoZW0gb3V0CiAJICogYWdhaW4uCiAJICovCi0JcGZuID0gX19wYShjcHUtPnJlZ3NfcGFnZSkgPj4gUEFHRV9TSElGVDsKLQluYXRpdmVfc2V0X3B0ZSgmcmVnc19wdGUsIHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTCkpOwotCW5hdGl2ZV9zZXRfcHRlKCZzd2l0Y2hlcl9wdGVfcGFnZVtwdGVfaW5kZXgoKHVuc2lnbmVkIGxvbmcpcGFnZXMpXSwKLQkJCXJlZ3NfcHRlKTsKKwlyZWdzX3B0ZSA9IHBmbl9wdGUoX19wYShjcHUtPnJlZ3NfcGFnZSkgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpOworCXNldF9wdGUoJnN3aXRjaGVyX3B0ZV9wYWdlW3B0ZV9pbmRleCgodW5zaWduZWQgbG9uZylwYWdlcyldLCByZWdzX3B0ZSk7CiB9CiAvKjoqLwogCkBAIC0xMjA5LDcgKzEyMDIsNyBAQAogCiAJLyogVGhlIGZpcnN0IGVudHJpZXMgYXJlIGVhc3k6IHRoZXkgbWFwIHRoZSBTd2l0Y2hlciBjb2RlLiAqLwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7Ci0JCW5hdGl2ZV9zZXRfcHRlKCZwdGVbaV0sIG1rX3B0ZShzd2l0Y2hlcl9wYWdlW2ldLAorCQlzZXRfcHRlKCZwdGVbaV0sIG1rX3B0ZShzd2l0Y2hlcl9wYWdlW2ldLAogCQkJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlR8X1BBR0VfQUNDRVNTRUQpKSk7CiAJfQogCkBAIC0xMjE3LDE0ICsxMjEwLDE0IEBACiAJaSA9IHBhZ2VzICsgY3B1KjI7CiAKIAkvKiBGaXJzdCBwYWdlIChHdWVzdCByZWdpc3RlcnMpIGlzIHdyaXRhYmxlIGZyb20gdGhlIEd1ZXN0ICovCi0JbmF0aXZlX3NldF9wdGUoJnB0ZVtpXSwgcGZuX3B0ZShwYWdlX3RvX3Bmbihzd2l0Y2hlcl9wYWdlW2ldKSwKKwlzZXRfcHRlKCZwdGVbaV0sIHBmbl9wdGUocGFnZV90b19wZm4oc3dpdGNoZXJfcGFnZVtpXSksCiAJCQkgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVHxfUEFHRV9BQ0NFU1NFRHxfUEFHRV9SVykpKTsKIAogCS8qCiAJICogVGhlIHNlY29uZCBwYWdlIGNvbnRhaW5zIHRoZSAic3RydWN0IGxndWVzdF9yb19zdGF0ZSIsIGFuZCBpcwogCSAqIHJlYWQtb25seS4KIAkgKi8KLQluYXRpdmVfc2V0X3B0ZSgmcHRlW2krMV0sIHBmbl9wdGUocGFnZV90b19wZm4oc3dpdGNoZXJfcGFnZVtpKzFdKSwKKwlzZXRfcHRlKCZwdGVbaSsxXSwgcGZuX3B0ZShwYWdlX3RvX3Bmbihzd2l0Y2hlcl9wYWdlW2krMV0pLAogCQkJICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVHxfUEFHRV9BQ0NFU1NFRCkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvcmFjay1tZXRlci5jIGIvZHJpdmVycy9tYWNpbnRvc2gvcmFjay1tZXRlci5jCmluZGV4IGE5OGFiNzIuLjkzZmIzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3JhY2stbWV0ZXIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9yYWNrLW1ldGVyLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCiAJCWlmIChjcHUgPiAxKQogCQkJY29udGludWU7Ci0JCXJjcHUgPSAmcm0tPmNwdVtjcHVdOzsKKwkJcmNwdSA9ICZybS0+Y3B1W2NwdV07CiAJCXJjcHUtPnByZXZfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1lKGNwdSk7CiAJCXJjcHUtPnByZXZfd2FsbCA9IGppZmZpZXM2NF90b19jcHV0aW1lNjQoZ2V0X2ppZmZpZXNfNjQoKSk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsICZybS0+Y3B1W2NwdV0uc25pZmZlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwppbmRleCA3Zjc3ZjE4Li5hNjc5NDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCkBAIC0xNTMyLDcgKzE1MzIsNyBAQAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIF9kbV9taXNjID0gewogCS5taW5vciAJCT0gTUlTQ19EWU5BTUlDX01JTk9SLAogCS5uYW1lICAJCT0gRE1fTkFNRSwKLQkuZGV2bm9kZQk9ICJtYXBwZXIvY29udHJvbCIsCisJLm5vZGVuYW1lCT0gIm1hcHBlci9jb250cm9sIiwKIAkuZm9wcyAgCQk9ICZfY3RsX2ZvcHMKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCBlZWUyOGZhLi4zNzZmMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0xNzE2LDcgKzE3MTYsNyBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRtX2Jsa19kb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkbV9ibGtfZG9wczsKIAogc3RhdGljIHZvaWQgZG1fd3Ffd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCkBAIC0yNjYzLDcgKzI2NjMsNyBAQAogCWtmcmVlKHBvb2xzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkbV9ibGtfZG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZG1fYmxrX2RvcHMgPSB7CiAJLm9wZW4gPSBkbV9ibGtfb3BlbiwKIAkucmVsZWFzZSA9IGRtX2Jsa19jbG9zZSwKIAkuaW9jdGwgPSBkbV9ibGtfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggOWRkODcyMC4uNmFhNDk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWRfZm9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWRfZm9wczsKIAogc3RhdGljIGludCBzdGFydF9yZWFkb25seTsKIApAQCAtNTU1Niw3ICs1NTU2LDcgQEAKIAltZGRldi0+Y2hhbmdlZCA9IDA7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gbWRfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCBmOGZjMTg4Li5mNTVkMmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkgKiBJTlRSOiAgICAgcmVzeW5jIG5lZWRzIHRvIGJlIGFib3J0ZWQgZm9yIHNvbWUgcmVhc29uCiAJICogRE9ORTogICAgIHRocmVhZCBpcyBkb25lIGFuZCBpcyB3YWl0aW5nIHRvIGJlIHJlYXBlZAogCSAqIFJFUVVFU1Q6ICB1c2VyLXNwYWNlIGhhcyByZXF1ZXN0ZWQgYSBzeW5jICh1c2VkIHdpdGggU1lOQykKLQkgKiBDSEVDSzogICAgdXNlci1zcGFjZSByZXF1ZXN0IGZvciBmb3IgY2hlY2stb25seSwgbm8gcmVwYWlyCisJICogQ0hFQ0s6ICAgIHVzZXItc3BhY2UgcmVxdWVzdCBmb3IgY2hlY2stb25seSwgbm8gcmVwYWlyCiAJICogUkVTSEFQRTogIEEgcmVzaGFwZSBpcyBoYXBwZW5pbmcKIAkgKgogCSAqIElmIG5laXRoZXIgU1lOQyBvciBSRVNIQVBFIGFyZSBzZXQsIHRoZW4gaXQgaXMgYSByZWNvdmVyeS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IDg5ZTc2ODEuLmQyZDNmZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMTUwLDYgKzE1MCw3IEBACiAJfQogCiAJbXBfYmggPSBtZW1wb29sX2FsbG9jKGNvbmYtPnBvb2wsIEdGUF9OT0lPKTsKKwltZW1zZXQobXBfYmgsIDAsIHNpemVvZigqbXBfYmgpKTsKIAogCW1wX2JoLT5tYXN0ZXJfYmlvID0gYmlvOwogCW1wX2JoLT5tZGRldiA9IG1kZGV2OwpAQCAtNDkzLDcgKzQ5NCw3IEBACiAJfQogCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT53b3JraW5nX2Rpc2tzOwogCi0JY29uZi0+cG9vbCA9IG1lbXBvb2xfY3JlYXRlX2t6YWxsb2NfcG9vbChOUl9SRVNFUlZFRF9CVUZTLAorCWNvbmYtPnBvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woTlJfUkVTRVJWRURfQlVGUywKIAkJCQkJCSBzaXplb2Yoc3RydWN0IG11bHRpcGF0aF9iaCkpOwogCWlmIChjb25mLT5wb29sID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCmluZGV4IGZjNzZjMzAuLjE1NWM5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKQEAgLTIxMCw3ICsyMTAsOCBAQAogCXRkYTE4MjcxX2kyY19nYXRlX2N0cmwoZmUsIDApOwogCiAJaWYgKHJldCAhPSAxKQotCQl0ZGFfZXJyKCJFUlJPUjogaTJjX3RyYW5zZmVyIHJldHVybmVkOiAlZFxuIiwgcmV0KTsKKwkJdGRhX2VycigiRVJST1I6IGlkeCA9IDB4JXgsIGxlbiA9ICVkLCAiCisJCQkiaTJjX3RyYW5zZmVyIHJldHVybmVkOiAlZFxuIiwgaWR4LCBsZW4sIHJldCk7CiAKIAlyZXR1cm4gKHJldCA9PSAxID8gMCA6IHJldCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCmluZGV4IGJjNGIwMDQuLjY0NTk1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCkBAIC0zNiw2ICszNiwyNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBpbnQgdGRhMTgyNzFfdG9nZ2xlX291dHB1dChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IHN0YW5kYnkpCit7CisJc3RydWN0IHRkYTE4MjcxX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKworCWludCByZXQgPSB0ZGExODI3MV9zZXRfc3RhbmRieV9tb2RlKGZlLCBzdGFuZGJ5ID8gMSA6IDAsCisJCQlwcml2LT5vdXRwdXRfb3B0ICYgVERBMTgyNzFfT1VUUFVUX0xUX09GRiA/IDEgOiAwLAorCQkJcHJpdi0+b3V0cHV0X29wdCAmIFREQTE4MjcxX09VVFBVVF9YVF9PRkYgPyAxIDogMCk7CisKKwlpZiAodGRhX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJdGRhX2RiZygiJXMgbW9kZTogeHRhbCBvc2NpbGxhdG9yICVzLCBzbGF2ZSB0dW5lciBsb29wIHRocnUgJXNcbiIsCisJCXN0YW5kYnkgPyAic3RhbmRieSIgOiAiYWN0aXZlIiwKKwkJcHJpdi0+b3V0cHV0X29wdCAmIFREQTE4MjcxX09VVFBVVF9YVF9PRkYgPyAib2ZmIiA6ICJvbiIsCisJCXByaXYtPm91dHB1dF9vcHQgJiBUREExODI3MV9PVVRQVVRfTFRfT0ZGID8gIm9mZiIgOiAib24iKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW5saW5lIGludCBjaGFyZ2VfcHVtcF9zb3VyY2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBmb3JjZSkKIHsKIAlzdHJ1Y3QgdGRhMTgyNzFfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwpAQCAtMjcxLDcgKzI5Miw3IEBACiAJdGRhMTgyNzFfbG9va3VwX21hcChmZSwgUkZfQ0FMX0RDX09WRVJfRFQsICZmcmVxLCAmZGNfb3Zlcl9kdCk7CiAKIAkvKiBjYWxjdWxhdGUgdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uICovCi0JcmZjYWxfY29tcCA9IGRjX292ZXJfZHQgKiAodG1fY3VycmVudCAtIHByaXYtPnRtX3JmY2FsKTsKKwlyZmNhbF9jb21wID0gZGNfb3Zlcl9kdCAqICh0bV9jdXJyZW50IC0gcHJpdi0+dG1fcmZjYWwpIC8gMTAwMDsKIAogCXJlZ3NbUl9FQjE0XSA9IGFwcHJveCArIHJmY2FsX2NvbXA7CiAJcmV0ID0gdGRhMTgyNzFfd3JpdGVfcmVncyhmZSwgUl9FQjE0LCAxKTsKQEAgLTgwMCw3ICs4MjEsNyBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CiAKLQkvKiBwb3dlciB1cCAqLworCS8qIGZ1bGwgcG93ZXIgdXAgKi8KIAlyZXQgPSB0ZGExODI3MV9zZXRfc3RhbmRieV9tb2RlKGZlLCAwLCAwLCAwKTsKIAlpZiAodGRhX2ZhaWwocmV0KSkKIAkJZ290byBmYWlsOwpAQCAtODE4LDYgKzgzOSwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdGRhMTgyNzFfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHRkYTE4MjcxX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisKKwkvKiBlbnRlciBzdGFuZGJ5IG1vZGUsIHdpdGggcmVxdWlyZWQgb3V0cHV0IGZlYXR1cmVzIGVuYWJsZWQgKi8KKwlyZXQgPSB0ZGExODI3MV90b2dnbGVfb3V0cHV0KGZlLCAxKTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB0ZGExODI3MV9hZ2Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCkBAIC04MjcsOCArODYzLDkgQEAKIAogCXN3aXRjaCAocHJpdi0+Y29uZmlnKSB7CiAJY2FzZSAwOgotCQkvKiBubyBMTkEgKi8KLQkJdGRhX2RiZygibm8gYWdjIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWRcbiIpOworCQkvKiBubyBleHRlcm5hbCBhZ2MgY29uZmlndXJhdGlvbiByZXF1aXJlZCAqLworCQlpZiAodGRhMTgyNzFfZGVidWcgJiBEQkdfQURWKQorCQkJdGRhX2RiZygibm8gYWdjIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWRcbiIpOwogCQlicmVhazsKIAljYXNlIDM6CiAJCS8qIHN3aXRjaCB3aXRoIEdQSU8gb2Ygc2FhNzEzeCAqLwpAQCAtMTAxMCwyMiArMTA0Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB0ZGExODI3MV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKLXsKLQlzdHJ1Y3QgdGRhMTgyNzFfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIHN0YW5kYnkgbW9kZSB3LyBzbGF2ZSB0dW5lciBvdXRwdXQKLQkgKiAmIGxvb3AgdGhydSAmIHh0YWwgb3NjaWxsYXRvciBvbiAqLwotCXJldCA9IHRkYTE4MjcxX3NldF9zdGFuZGJ5X21vZGUoZmUsIDEsIDAsIDApOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgdGRhMTgyNzFfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgdGRhMTgyNzFfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwpAQCAtMTE5OSw2ICsxMjIwLDkgQEAKIAkJcHJpdi0+Z2F0ZSA9IChjZmcpID8gY2ZnLT5nYXRlIDogVERBMTgyNzFfR0FURV9BVVRPOwogCQlwcml2LT5yb2xlID0gKGNmZykgPyBjZmctPnJvbGUgOiBUREExODI3MV9NQVNURVI7CiAJCXByaXYtPmNvbmZpZyA9IChjZmcpID8gY2ZnLT5jb25maWcgOiAwOworCQlwcml2LT5zbWFsbF9pMmMgPSAoY2ZnKSA/IGNmZy0+c21hbGxfaTJjIDogMDsKKwkJcHJpdi0+b3V0cHV0X29wdCA9IChjZmcpID8KKwkJCWNmZy0+b3V0cHV0X29wdCA6IFREQTE4MjcxX09VVFBVVF9MVF9YVF9PTjsKIAogCQkvKiB0ZGExODI3MV9jYWxfb25fc3RhcnR1cCA9PSAtMSB3aGVuIGNhbAogCQkgKiBtb2R1bGUgb3B0aW9uIGlzIHVuc2V0ICovCkBAIC0xMjE2LDkgKzEyNDAsNiBAQAogCiAJCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKIAotCQlpZiAoY2ZnKQotCQkJcHJpdi0+c21hbGxfaTJjID0gY2ZnLT5zbWFsbF9pMmM7Ci0KIAkJaWYgKHRkYV9mYWlsKHRkYTE4MjcxX2dldF9pZChmZSkpKQogCQkJZ290byBmYWlsOwogCkBAIC0xMjM4LDkgKzEyNTksMTkgQEAKIAkJLyogZXhpc3RpbmcgdHVuZXIgaW5zdGFuY2UgKi8KIAkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OwogCi0JCS8qIGFsbG93IGR2YiBkcml2ZXIgdG8gb3ZlcnJpZGUgaTJjIGdhdGUgc2V0dGluZyAqLwotCQlpZiAoKGNmZykgJiYgKGNmZy0+Z2F0ZSAhPSBUREExODI3MV9HQVRFX0FOQUxPRykpCi0JCQlwcml2LT5nYXRlID0gY2ZnLT5nYXRlOworCQkvKiBhbGxvdyBkdmIgZHJpdmVyIHRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJaWYgKGNmZykgeworCQkJaWYgKGNmZy0+Z2F0ZSAhPSBUREExODI3MV9HQVRFX0FOQUxPRykKKwkJCQlwcml2LT5nYXRlID0gY2ZnLT5nYXRlOworCQkJaWYgKGNmZy0+cm9sZSkKKwkJCQlwcml2LT5yb2xlID0gY2ZnLT5yb2xlOworCQkJaWYgKGNmZy0+Y29uZmlnKQorCQkJCXByaXYtPmNvbmZpZyA9IGNmZy0+Y29uZmlnOworCQkJaWYgKGNmZy0+c21hbGxfaTJjKQorCQkJCXByaXYtPnNtYWxsX2kyYyA9IGNmZy0+c21hbGxfaTJjOworCQkJaWYgKGNmZy0+b3V0cHV0X29wdCkKKwkJCQlwcml2LT5vdXRwdXRfb3B0ID0gY2ZnLT5vdXRwdXRfb3B0OworCQl9CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1tYXBzLmMKaW5kZXggYWIxNGNlYi4uZTIxZmRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jCkBAIC05NjIsMTAgKzk2Miw5IEBACiBzdGF0aWMgc3RydWN0IHRkYTE4MjcxX2NpZF90YXJnZXRfbWFwIHRkYTE4MjcxX2NpZF90YXJnZXRbXSA9IHsKIAl7IC5yZm1heCA9ICA0NjAwMCwgLnRhcmdldCA9IDB4MDQsIC5saW1pdCA9ICAxODAwIH0sCiAJeyAucmZtYXggPSAgNTIyMDAsIC50YXJnZXQgPSAweDBhLCAubGltaXQgPSAgMTUwMCB9LAotCXsgLnJmbWF4ID0gIDc5MTAwLCAudGFyZ2V0ID0gMHgwMSwgLmxpbWl0ID0gIDQwMDAgfSwKKwl7IC5yZm1heCA9ICA3MDEwMCwgLnRhcmdldCA9IDB4MDEsIC5saW1pdCA9ICA0MDAwIH0sCiAJeyAucmZtYXggPSAxMzY4MDAsIC50YXJnZXQgPSAweDE4LCAubGltaXQgPSAgNDAwMCB9LAogCXsgLnJmbWF4ID0gMTU2NzAwLCAudGFyZ2V0ID0gMHgxOCwgLmxpbWl0ID0gIDQwMDAgfSwKLQl7IC5yZm1heCA9IDE1NjcwMCwgLnRhcmdldCA9IDB4MTgsIC5saW1pdCA9ICA0MDAwIH0sCiAJeyAucmZtYXggPSAxODYyNTAsIC50YXJnZXQgPSAweDBhLCAubGltaXQgPSAgNDAwMCB9LAogCXsgLnJmbWF4ID0gMjMwMDAwLCAudGFyZ2V0ID0gMHgwYSwgLmxpbWl0ID0gIDQwMDAgfSwKIAl7IC5yZm1heCA9IDM0NTAwMCwgLnRhcmdldCA9IDB4MTgsIC5saW1pdCA9ICA0MDAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaAppbmRleCBlNmE4MGFkLi4yYmVlMjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmgKQEAgLTEwOCw2ICsxMDgsNyBAQAogCWVudW0gdGRhMTgyNzFfcm9sZSByb2xlOwogCWVudW0gdGRhMTgyNzFfaTJjX2dhdGUgZ2F0ZTsKIAllbnVtIHRkYTE4MjcxX3ZlciBpZDsKKwllbnVtIHRkYTE4MjcxX291dHB1dF9vcHRpb25zIG91dHB1dF9vcHQ7CiAKIAl1bnNpZ25lZCBpbnQgY29uZmlnOyAvKiBpbnRlcmZhY2UgdG8gc2FhNzEzeCAvIHRkYTgyOXggKi8KIAl1bnNpZ25lZCBpbnQgdG1fcmZjYWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oCmluZGV4IDcxYmFjOTUuLjMyM2YyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oCkBAIC02Nyw2ICs2NywxNyBAQAogCVREQTE4MjcxX0dBVEVfRElHSVRBTCwKIH07CiAKK2VudW0gdGRhMTgyNzFfb3V0cHV0X29wdGlvbnMgeworCS8qIHNsYXZlIHR1bmVyIG91dHB1dCAmIGxvb3AgdGhydSAmIHh0YWwgb3NjaWxsYXRvciBhbHdheXMgb24gKi8KKwlUREExODI3MV9PVVRQVVRfTFRfWFRfT04gPSAwLAorCisJLyogc2xhdmUgdHVuZXIgb3V0cHV0IGxvb3AgdGhydSBvZmYgKi8KKwlUREExODI3MV9PVVRQVVRfTFRfT0ZGID0gMSwKKworCS8qIHh0YWwgb3NjaWxsYXRvciBvZmYgKi8KKwlUREExODI3MV9PVVRQVVRfWFRfT0ZGID0gMiwKK307CisKIHN0cnVjdCB0ZGExODI3MV9jb25maWcgewogCS8qIG92ZXJyaWRlIGRlZmF1bHQgaWYgZnJlcSAvIHN0ZCBzZXR0aW5ncyAob3B0aW9uYWwpICovCiAJc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXAgKnN0ZF9tYXA7CkBAIC03Nyw2ICs4OCw5IEBACiAJLyogdXNlIGkyYyBnYXRlIHByb3ZpZGVkIGJ5IGFuYWxvZyBvciBkaWdpdGFsIGRlbW9kICovCiAJZW51bSB0ZGExODI3MV9pMmNfZ2F0ZSBnYXRlOwogCisJLyogb3V0cHV0IG9wdGlvbnMgdGhhdCBjYW4gYmUgZGlzYWJsZWQgKi8KKwllbnVtIHRkYTE4MjcxX291dHB1dF9vcHRpb25zIG91dHB1dF9vcHQ7CisKIAkvKiBmb3JjZSByZiB0cmFja2luZyBmaWx0ZXIgY2FsaWJyYXRpb24gb24gc3RhcnR1cCAqLwogCXVuc2lnbmVkIGludCByZl9jYWxfb25fc3RhcnR1cDoxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCmluZGV4IDVjNmVmMWUuLjJiODc2ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCkBAIC0xMzIwLDYgKzEzMjAsMjMgQEAKIAl9LAogfTsKIAorLyogLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfQ1UxMjE2TCAtIERWQi1DIE5JTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfY3UxMjE2bF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTYwLjI1IC8qTUh6Ki8sIDB4Y2UsIDB4MDEgfSwKKwl7IDE2ICogNDQ0LjI1IC8qTUh6Ki8sIDB4Y2UsIDB4MDIgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4Y2UsIDB4MDQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfY3UxMjE2bF9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX0RJR0lUQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9jdTEyMTZsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfY3UxMjE2bF9yYW5nZXMpLAorCQkuaWZmcmVxID0gMTYgKiAzNi4xMjUsIC8qTUh6Ki8KKwl9LAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB0dW5lcnR5cGUgdHVuZXJzW10gPSB7CkBAIC0xNzc4LDYgKzE3OTUsMTYgQEAKIAkJLnBhcmFtcyA9IHR1bmVyX3BhcnRzbmljX3B0aV81bmYwNV9wYXJhbXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BhcnRzbmljX3B0aV81bmYwNV9wYXJhbXMpLAogCX0sCisJW1RVTkVSX1BISUxJUFNfQ1UxMjE2TF0gPSB7CisJCS5uYW1lID0gIlBoaWxpcHMgQ1UxMjE2TCIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2N1MTIxNmxfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2N1MTIxNmxfcGFyYW1zKSwKKwkJLnN0ZXBzaXplID0gNjI1MDAsCisJfSwKKwlbVFVORVJfTlhQX1REQTE4MjcxXSA9IHsKKwkJLm5hbWUgICA9ICJOWFAgVERBMTgyNzEiLAorCQkvKiBzZWUgdGRhMTgyNzEtZmUuYyBmb3IgZGV0YWlscyAqLworCX0sCiB9OwogRVhQT1JUX1NZTUJPTCh0dW5lcnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwppbmRleCAxZDBlNGIxLi4zNWQwODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKQEAgLTY4LDYgKzY4LDEwIEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJRUVFMTM5NAogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9LY29uZmlnIgogCitjb21tZW50ICJTdXBwb3J0ZWQgRWFydGhzb2Z0IFBUMSBBZGFwdGVycyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvcHQxL0tjb25maWciCisKIGNvbW1lbnQgIlN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCmluZGV4IDYwOTJhNWIuLjE2ZDI2MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBtdWx0aW1lZGlhIGRldmljZSBkcml2ZXJzLgogIwogCi1vYmoteSAgICAgICAgOj0gZHZiLWNvcmUvIGZyb250ZW5kcy8gdHRwY2kvIHR0dXNiLWRlYy8gdHR1c2ItYnVkZ2V0LyBiMmMyLyBidDh4eC8gZHZiLXVzYi8gcGx1dG8yLyBzaWFuby8gZG0xMTA1Lworb2JqLXkgICAgICAgIDo9IGR2Yi1jb3JlLyBmcm9udGVuZHMvIHR0cGNpLyB0dHVzYi1kZWMvIHR0dXNiLWJ1ZGdldC8gYjJjMi8gYnQ4eHgvIGR2Yi11c2IvIHBsdXRvMi8gc2lhbm8vIGRtMTEwNS8gcHQxLwogCiBvYmotJChDT05GSUdfRFZCX0ZJUkVEVFYpCSs9IGZpcmV3aXJlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCBkMTNlYmNiLi5kZGY2MzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtODUwLDYgKzg1MCw0OSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGR2Yl9mcm9udGVuZF9jbGVhcl9jYWNoZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlpbnQgaTsKKworCW1lbXNldCgmKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcykpOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9IERUVl9DTEVBUjsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19VTkRFRklORUQ7CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pbnZlcnNpb24gPSBJTlZFUlNJT05fQVVUTzsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZlY19pbm5lciA9IEZFQ19BVVRPOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6ID0gQkFORFdJRFRIX0FVVE87CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMX0FVVE87CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5oaWVyYXJjaHkgPSBISUVSQVJDSFlfQVVUTzsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN5bWJvbF9yYXRlID0gUUFNX0FVVE87CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5jb2RlX3JhdGVfSFAgPSBGRUNfQVVUTzsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmNvZGVfcmF0ZV9MUCA9IEZFQ19BVVRPOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc3ViY2hhbm5lbCA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggPSAtMTsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgPSAtMTsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X2xheWVyX2VuYWJsZWQgPSAweDc7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLmZlYyA9IEZFQ19BVVRPOworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPSBRQU1fQVVUTzsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5pbnRlcmxlYXZpbmcgPSAtMTsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5zZWdtZW50X2NvdW50ID0gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgX0RUVl9DTUQobiwgcywgYikgXAorW25dID0geyBcCisJLm5hbWUgPSAjbiwgXAorCS5jbWQgID0gbiwgXAorCS5zZXQgID0gcyxcCisJLmJ1ZmZlciA9IGIgXAorfQorCiBzdGF0aWMgc3RydWN0IGR0dl9jbWRzX2ggZHR2X2NtZHNbXSA9IHsKIAlbRFRWX1RVTkVdID0gewogCQkubmFtZQk9ICJEVFZfVFVORSIsCkBAIC05NDksNiArOTkyLDQ3IEBACiAJCS5jbWQJPSBEVFZfVFJBTlNNSVNTSU9OX01PREUsCiAJCS5zZXQJPSAxLAogCX0sCisKKwlfRFRWX0NNRChEVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT04sIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkcsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lELCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfU0JfU0VHTUVOVF9JRFgsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5ULCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJfRU5BQkxFRCwgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQV9GRUMsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkFfTU9EVUxBVElPTiwgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQV9TRUdNRU5UX0NPVU5ULCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJBX1RJTUVfSU5URVJMRUFWSU5HLCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJCX0ZFQywgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQl9NT0RVTEFUSU9OLCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJCX1NFR01FTlRfQ09VTlQsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkJfVElNRV9JTlRFUkxFQVZJTkcsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkNfRkVDLCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJDX01PRFVMQVRJT04sIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkNfU0VHTUVOVF9DT1VOVCwgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORywgMSwgMCksCisKKwlfRFRWX0NNRChEVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT04sIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkcsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lELCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfU0JfU0VHTUVOVF9JRFgsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5ULCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJfRU5BQkxFRCwgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQV9GRUMsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkFfTU9EVUxBVElPTiwgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQV9TRUdNRU5UX0NPVU5ULCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJBX1RJTUVfSU5URVJMRUFWSU5HLCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJCX0ZFQywgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQl9NT0RVTEFUSU9OLCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJCX1NFR01FTlRfQ09VTlQsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkJfVElNRV9JTlRFUkxFQVZJTkcsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkNfRkVDLCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJDX01PRFVMQVRJT04sIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkNfU0VHTUVOVF9DT1VOVCwgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORywgMCwgMCksCisKKwlfRFRWX0NNRChEVFZfSVNEQlNfVFNfSUQsIDEsIDApLAorCiAJLyogR2V0ICovCiAJW0RUVl9ESVNFUUNfU0xBVkVfUkVQTFldID0gewogCQkubmFtZQk9ICJEVFZfRElTRVFDX1NMQVZFX1JFUExZIiwKQEAgLTk1Niw2ICsxMDQwLDcgQEAKIAkJLnNldAk9IDAsCiAJCS5idWZmZXIJPSAxLAogCX0sCisKIAlbRFRWX0FQSV9WRVJTSU9OXSA9IHsKIAkJLm5hbWUJPSAiRFRWX0FQSV9WRVJTSU9OIiwKIAkJLmNtZAk9IERUVl9BUElfVkVSU0lPTiwKQEAgLTExNjUsMTQgKzEyNTAsMjEgQEAKIAlpZihjLT5kZWxpdmVyeV9zeXN0ZW0gPT0gU1lTX0lTREJUKSB7CiAJCS8qIEZha2Ugb3V0IGEgZ2VuZXJpYyBEVkItVCByZXF1ZXN0IHNvIHdlIHBhc3MgdmFsaWRhdGlvbiBpbiB0aGUgaW9jdGwgKi8KIAkJcC0+ZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OwotCQlwLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fQVVUTzsKKwkJcC0+aW52ZXJzaW9uID0gYy0+aW52ZXJzaW9uOwogCQlwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV9BVVRPOwogCQlwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gRkVDX0FVVE87CiAJCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsKLQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF9BVVRPOwogCQlwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOwogCQlwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF9BVVRPOwogCQlwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX0FVVE87CisJCWlmIChjLT5iYW5kd2lkdGhfaHogPT0gODAwMDAwMCkKKwkJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfOF9NSFo7CisJCWVsc2UgaWYgKGMtPmJhbmR3aWR0aF9oeiA9PSA3MDAwMDAwKQorCQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF83X01IWjsKKwkJZWxzZSBpZiAoYy0+YmFuZHdpZHRoX2h6ID09IDYwMDAwMDApCisJCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOworCQllbHNlCisJCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIX0FVVE87CiAJfQogfQogCkBAIC0xMjc0LDYgKzEzNjYsNjUgQEAKIAljYXNlIERUVl9ISUVSQVJDSFk6CiAJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5oaWVyYXJjaHk7CiAJCWJyZWFrOworCisJLyogSVNEQi1UIFN1cHBvcnQgaGVyZSAqLworCWNhc2UgRFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb247CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGU7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NCX1NVQkNIQU5ORUxfSUQ6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zdWJjaGFubmVsOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfaWR4OworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudDsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJfRU5BQkxFRDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X2xheWVyX2VuYWJsZWQ7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQV9GRUM6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5mZWM7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0ubW9kdWxhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQ6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5zZWdtZW50X2NvdW50OworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkc6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5pbnRlcmxlYXZpbmc7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQl9GRUM6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5mZWM7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQl9NT0RVTEFUSU9OOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0ubW9kdWxhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJCX1NFR01FTlRfQ09VTlQ6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5zZWdtZW50X2NvdW50OworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkJfVElNRV9JTlRFUkxFQVZJTkc6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5pbnRlcmxlYXZpbmc7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQ19GRUM6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5mZWM7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQ19NT0RVTEFUSU9OOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0ubW9kdWxhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJDX1NFR01FTlRfQ09VTlQ6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5zZWdtZW50X2NvdW50OworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkNfVElNRV9JTlRFUkxFQVZJTkc6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5pbnRlcmxlYXZpbmc7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJTX1RTX0lEOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnNfdHNfaWQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAtMTsKIAl9CkBAIC0xMzAyLDEwICsxNDUzLDggQEAKIAkJLyogUmVzZXQgYSBjYWNoZSBvZiBkYXRhIHNwZWNpZmljIHRvIHRoZSBmcm9udGVuZCBoZXJlLiBUaGlzIGRvZXMKIAkJICogbm90IGVmZmVjdCBoYXJkd2FyZS4KIAkJICovCisJCWR2Yl9mcm9udGVuZF9jbGVhcl9jYWNoZShmZSk7CiAJCWRwcmludGsoIiVzKCkgRmx1c2hpbmcgcHJvcGVydHkgY2FjaGVcbiIsIF9fZnVuY19fKTsKLQkJbWVtc2V0KCZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLCAwLCBzaXplb2Yoc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzKSk7Ci0JCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPSB0dnAtPmNtZDsKLQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfVU5ERUZJTkVEOwogCQlicmVhazsKIAljYXNlIERUVl9UVU5FOgogCQkvKiBpbnRlcnByZXQgdGhlIGNhY2hlIG9mIGRhdGEsIGJ1aWxkIGVpdGhlciBhIHRyYWRpdGlvbmFsIGZyb250ZW5kCkBAIC0xMzcxLDYgKzE1MjAsNjUgQEAKIAljYXNlIERUVl9ISUVSQVJDSFk6CiAJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaGllcmFyY2h5ID0gdHZwLT51LmRhdGE7CiAJCWJyZWFrOworCisJLyogSVNEQi1UIFN1cHBvcnQgaGVyZSAqLworCWNhc2UgRFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NCX1NVQkNIQU5ORUxfSUQ6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc3ViY2hhbm5lbCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2lkeCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJfRU5BQkxFRDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9sYXllcl9lbmFibGVkID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQV9GRUM6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uZmVjID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQ6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uc2VnbWVudF9jb3VudCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkc6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uaW50ZXJsZWF2aW5nID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQl9GRUM6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0uZmVjID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQl9NT0RVTEFUSU9OOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJCX1NFR01FTlRfQ09VTlQ6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0uc2VnbWVudF9jb3VudCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkJfVElNRV9JTlRFUkxFQVZJTkc6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0uaW50ZXJsZWF2aW5nID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQ19GRUM6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uZmVjID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQ19NT0RVTEFUSU9OOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLm1vZHVsYXRpb24gPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJDX1NFR01FTlRfQ09VTlQ6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uc2VnbWVudF9jb3VudCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkNfVElNRV9JTlRFUkxFQVZJTkc6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uaW50ZXJsZWF2aW5nID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJTX1RTX0lEOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJzX3RzX2lkID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAtMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCmluZGV4IGUxNzZkYTQuLjgxMGYwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCkBAIC0zNDEsNiArMzQxLDIzIEBACiAJZmVfcm9sbG9mZl90CQlyb2xsb2ZmOwogCiAJZmVfZGVsaXZlcnlfc3lzdGVtX3QJZGVsaXZlcnlfc3lzdGVtOworCisJLyogSVNEQi1UIHNwZWNpZmljcyAqLworCXU4CQkJaXNkYnRfcGFydGlhbF9yZWNlcHRpb247CisJdTgJCQlpc2RidF9zYl9tb2RlOworCXU4CQkJaXNkYnRfc2Jfc3ViY2hhbm5lbDsKKwl1MzIJCQlpc2RidF9zYl9zZWdtZW50X2lkeDsKKwl1MzIJCQlpc2RidF9zYl9zZWdtZW50X2NvdW50OworCXU4CQkJaXNkYnRfbGF5ZXJfZW5hYmxlZDsKKwlzdHJ1Y3QgeworCSAgICB1OAkJCXNlZ21lbnRfY291bnQ7CisJICAgIGZlX2NvZGVfcmF0ZV90CWZlYzsKKwkgICAgZmVfbW9kdWxhdGlvbl90CW1vZHVsYXRpb247CisJICAgIHU4CQkJaW50ZXJsZWF2aW5nOworCX0gbGF5ZXJbM107CisKKwkvKiBJU0RCLVQgc3BlY2lmaWNzICovCisJdTMyCQkJaXNkYnNfdHNfaWQ7CiB9OwogCiBzdHJ1Y3QgZHZiX2Zyb250ZW5kIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKaW5kZXggNDc5ZGQwNS4uOTQxNTliOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY2hhciAqZHZiX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICpkdmJfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAlkdmJfY2xhc3MtPmRldl91ZXZlbnQgPSBkdmJfdWV2ZW50OwotCWR2Yl9jbGFzcy0+bm9kZW5hbWUgPSBkdmJfbm9kZW5hbWU7CisJZHZiX2NsYXNzLT5kZXZub2RlID0gZHZiX2Rldm5vZGU7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDhiOGJjMDQuLjBlNGI5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTcxLDYgKzcxLDcgQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX0RJQjcwMDBQIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9ESUI3MDAwTSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfRElCODAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRElCMzAwME1DIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TNUgxNDExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MR0RUMzMwNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQpAQCAtODcsNyArODgsNyBAQAogCSAgQXZlcm1lZGlhIGFuZCBvdGhlciBiaWcgYW5kIHNtYWxsIGNvbXBhbmllcy4KIAogCSAgRm9yIGFuIHVwLXRvLWRhdGUgbGlzdCBvZiBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgaGF2ZSBhIGxvb2sKLQkgIG9uIHRoZSBMaW51eC1EVkIgV2lraSBhdCB3d3cubGludXh0di5vcmcuCisJICBvbiB0aGUgTGludXhUViBXaWtpIGF0IHd3dy5saW51eHR2Lm9yZy4KIAogCSAgU2F5IFkgaWYgeW91IG93biBzdWNoIGEgZGV2aWNlIGFuZCB3YW50IHRvIHVzZSBpdC4gWW91IHNob3VsZCBidWlsZCBpdCBhcwogCSAgYSBtb2R1bGUuCkBAIC0zMTUsMyArMzE2LDkgQEAKIAlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgSW50ZWwgQ0U2MjMwIERWQi1UIFVTQjIuMCByZWNlaXZlcgorCitjb25maWcgRFZCX1VTQl9GUklJTworCXRyaXN0YXRlICJGcmlpbyBJU0RCLVQgVVNCMi4wIFJlY2VpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBKYXBhbmVzZSBEVFYgcmVjZWl2ZXIgRnJpaW8uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQppbmRleCBmOTI3MzRlLi44NWI4M2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKQEAgLTc5LDYgKzc5LDkgQEAKIGR2Yi11c2ItY2U2MjMwLW9ianMgPSBjZTYyMzAubwogb2JqLSQoQ09ORklHX0RWQl9VU0JfQ0U2MjMwKSArPSBkdmItdXNiLWNlNjIzMC5vCiAKK2R2Yi11c2ItZnJpaW8tb2JqcyA9IGZyaWlvLm8gZnJpaW8tZmUubworb2JqLSQoQ09ORklHX0RWQl9VU0JfRlJJSU8pICs9IGR2Yi11c2ItZnJpaW8ubworCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCiAjIGR1ZSB0byB0dW5lci14YzMwMjgKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKaW5kZXggOTljZGQwZDEuLmNmMDQyYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwpAQCAtNjEsMTAgKzYxLDEzIEBACiAKIHN0YXRpYyBpbnQgYWY5MDE1X3J3X3VkZXYoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCByZXFfdCAqcmVxKQogeworI2RlZmluZSBCVUZfTEVOIDYzCisjZGVmaW5lIFJFUV9IRFJfTEVOIDggLyogc2VuZCBoZWFkZXIgc2l6ZSAqLworI2RlZmluZSBBQ0tfSERSX0xFTiAyIC8qIHJlY2UgaGVhZGVyIHNpemUgKi8KIAlpbnQgYWN0X2xlbiwgcmV0OwotCXU4IGJ1Zls2NF07CisJdTggYnVmW0JVRl9MRU5dOwogCXU4IHdyaXRlID0gMTsKLQl1OCBtc2dfbGVuID0gODsKKwl1OCBtc2dfbGVuID0gUkVRX0hEUl9MRU47CiAJc3RhdGljIHU4IHNlcTsgLyogcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWY5MDE1X3VzYl9tdXRleCkgPCAwKQpAQCAtOTQsNyArOTcsNyBAQAogCQlicmVhazsKIAljYXNlIFdSSVRFX01FTU9SWToKIAkJaWYgKCgocmVxLT5hZGRyICYgMHhmZjAwKSA9PSAweGZmMDApIHx8Ci0JCSAgICAoKHJlcS0+YWRkciAmIDB4YWUwMCkgPT0gMHhhZTAwKSkKKwkJICAgICgocmVxLT5hZGRyICYgMHhmZjAwKSA9PSAweGFlMDApKQogCQkJYnVmWzBdID0gV1JJVEVfVklSVFVBTF9NRU1PUlk7CiAJY2FzZSBXUklURV9WSVJUVUFMX01FTU9SWToKIAljYXNlIENPUFlfRklSTVdBUkU6CkBAIC0xMDcsMTcgKzExMCwyNiBAQAogCQlnb3RvIGVycm9yX3VubG9jazsKIAl9CiAKKwkvKiBidWZmZXIgb3ZlcmZsb3cgY2hlY2sgKi8KKwlpZiAoKHdyaXRlICYmIChyZXEtPmRhdGFfbGVuID4gQlVGX0xFTiAtIFJFUV9IRFJfTEVOKSkgfHwKKwkJKCF3cml0ZSAmJiAocmVxLT5kYXRhX2xlbiA+IEJVRl9MRU4gLSBBQ0tfSERSX0xFTikpKSB7CisJCWVycigidG9vIG11Y2ggZGF0YTsgY21kOiVkIGxlbjolZCIsIHJlcS0+Y21kLCByZXEtPmRhdGFfbGVuKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcl91bmxvY2s7CisJfQorCiAJLyogd3JpdGUgcmVxdWVzdGVkICovCiAJaWYgKHdyaXRlKSB7Ci0JCW1lbWNweSgmYnVmWzhdLCByZXEtPmRhdGEsIHJlcS0+ZGF0YV9sZW4pOworCQltZW1jcHkoJmJ1ZltSRVFfSERSX0xFTl0sIHJlcS0+ZGF0YSwgcmVxLT5kYXRhX2xlbik7CiAJCW1zZ19sZW4gKz0gcmVxLT5kYXRhX2xlbjsKIAl9CisKIAlkZWJfeGZlcigiPj4+ICIpOwogCWRlYnVnX2R1bXAoYnVmLCBtc2dfbGVuLCBkZWJfeGZlcik7CiAKIAkvKiBzZW5kIHJlcSAqLwogCXJldCA9IHVzYl9idWxrX21zZyh1ZGV2LCB1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMiksIGJ1ZiwgbXNnX2xlbiwKLQkmYWN0X2xlbiwgQUY5MDE1X1VTQl9USU1FT1VUKTsKKwkJJmFjdF9sZW4sIEFGOTAxNV9VU0JfVElNRU9VVCk7CiAJaWYgKHJldCkKIAkJZXJyKCJidWxrIG1lc3NhZ2UgZmFpbGVkOiVkICglZC8lZCkiLCByZXQsIG1zZ19sZW4sIGFjdF9sZW4pOwogCWVsc2UKQEAgLTEzMCwxMCArMTQyLDE0IEBACiAJaWYgKHJlcS0+Y21kID09IERPV05MT0FEX0ZJUk1XQVJFIHx8IHJlcS0+Y21kID09IFJFQ09OTkVDVF9VU0IpCiAJCWdvdG8gZXhpdF91bmxvY2s7CiAKLQkvKiByZWNlaXZlIGFjayBhbmQgZGF0YSBpZiByZWFkIHJlcSAqLwotCW1zZ19sZW4gPSAxICsgMSArIHJlcS0+ZGF0YV9sZW47ICAvKiBzZXEgKyBzdGF0dXMgKyBkYXRhIGxlbiAqLworCS8qIHdyaXRlIHJlY2VpdmVzIHNlcSArIHN0YXR1cyA9IDIgYnl0ZXMKKwkgICByZWFkIHJlY2VpdmVzIHNlcSArIHN0YXR1cyArIGRhdGEgPSAyICsgTiBieXRlcyAqLworCW1zZ19sZW4gPSBBQ0tfSERSX0xFTjsKKwlpZiAoIXdyaXRlKQorCQltc2dfbGVuICs9IHJlcS0+ZGF0YV9sZW47CisKIAlyZXQgPSB1c2JfYnVsa19tc2codWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIDB4ODEpLCBidWYsIG1zZ19sZW4sCi0JCQkgICAmYWN0X2xlbiwgQUY5MDE1X1VTQl9USU1FT1VUKTsKKwkJJmFjdF9sZW4sIEFGOTAxNV9VU0JfVElNRU9VVCk7CiAJaWYgKHJldCkgewogCQllcnIoInJlY3YgYnVsayBtZXNzYWdlIGZhaWxlZDolZCIsIHJldCk7CiAJCXJldCA9IC0xOwpAQCAtMTU5LDcgKzE3NSw3IEBACiAKIAkvKiByZWFkIHJlcXVlc3QsIGNvcHkgcmV0dXJuZWQgZGF0YSB0byByZXR1cm4gYnVmICovCiAJaWYgKCF3cml0ZSkKLQkJbWVtY3B5KHJlcS0+ZGF0YSwgJmJ1ZlsyXSwgcmVxLT5kYXRhX2xlbik7CisJCW1lbWNweShyZXEtPmRhdGEsICZidWZbQUNLX0hEUl9MRU5dLCByZXEtPmRhdGFfbGVuKTsKIAogZXJyb3JfdW5sb2NrOgogZXhpdF91bmxvY2s6CkBAIC0zNjksMTIgKzM4NSwxNCBAQAogCXU4ICBwYWNrZXRfc2l6ZTsKIAlkZWJfaW5mbygiJXM6IFVTQiBzcGVlZDolZFxuIiwgX19mdW5jX18sIGQtPnVkZXYtPnNwZWVkKTsKIAorCS8qIFdpbmRvd3MgZHJpdmVyIHVzZXMgcGFja2V0IGNvdW50IDIxIGZvciBVU0IxLjEgYW5kIDM0OCBmb3IgVVNCMi4wLgorCSAgIFdlIHVzZSBzbWFsbGVyIC0gYWJvdXQgMS80IGZyb20gdGhlIG9yaWdpbmFsLCA1IGFuZCA4Ny4gKi8KICNkZWZpbmUgVFNfUEFDS0VUX1NJWkUgICAgICAgICAgICAxODgKIAotI2RlZmluZSBUU19VU0IyMF9QQUNLRVRfQ09VTlQgICAgIDM0OAorI2RlZmluZSBUU19VU0IyMF9QQUNLRVRfQ09VTlQgICAgICA4NwogI2RlZmluZSBUU19VU0IyMF9GUkFNRV9TSVpFICAgICAgIChUU19QQUNLRVRfU0laRSpUU19VU0IyMF9QQUNLRVRfQ09VTlQpCiAKLSNkZWZpbmUgVFNfVVNCMTFfUEFDS0VUX0NPVU5UICAgICAgMjEKKyNkZWZpbmUgVFNfVVNCMTFfUEFDS0VUX0NPVU5UICAgICAgIDUKICNkZWZpbmUgVFNfVVNCMTFfRlJBTUVfU0laRSAgICAgICAoVFNfUEFDS0VUX1NJWkUqVFNfVVNCMTFfUEFDS0VUX0NPVU5UKQogCiAjZGVmaW5lIFRTX1VTQjIwX01BWF9QQUNLRVRfU0laRSAgNTEyCkBAIC04NjgsMTMgKzg4NiwxMyBAQAogCQkvKiBVU0IxLjEgc2V0IHNtYWxsZXIgYnVmZmVyc2l6ZSBhbmQgZGlzYWJsZSAybmQgYWRhcHRlciAqLwogCQlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKIAkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLmFkYXB0ZXJbMF0uc3RyZWFtLnUuYnVsay5idWZmZXJzaXplCi0JCQkJPSBUU19VU0IxMV9NQVhfUEFDS0VUX1NJWkU7CisJCQkJPSBUU19VU0IxMV9GUkFNRV9TSVpFOwogCQkJLyogZGlzYWJsZSAybmQgYWRhcHRlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUKIAkJCSAgIFBJRC1maWx0ZXJzICovCiAJCQlhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSA9IDA7CiAJCX0gZWxzZSB7CiAJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5hZGFwdGVyWzBdLnN0cmVhbS51LmJ1bGsuYnVmZmVyc2l6ZQotCQkJCT0gVFNfVVNCMjBfTUFYX1BBQ0tFVF9TSVpFOworCQkJCT0gVFNfVVNCMjBfRlJBTUVfU0laRTsKIAkJfQogCX0KIApAQCAtMTMxMCw3ICsxMzI4LDcgQEAKIAkJCQkJLnUgPSB7CiAJCQkJCQkuYnVsayA9IHsKIAkJCQkJCQkuYnVmZmVyc2l6ZSA9Ci0JCQkJCQlUU19VU0IyMF9NQVhfUEFDS0VUX1NJWkUsCisJCQkJCQlUU19VU0IyMF9GUkFNRV9TSVpFLAogCQkJCQkJfQogCQkJCQl9CiAJCQkJfSwKQEAgLTE0MTYsNyArMTQzNCw3IEBACiAJCQkJCS51ID0gewogCQkJCQkJLmJ1bGsgPSB7CiAJCQkJCQkJLmJ1ZmZlcnNpemUgPQotCQkJCQkJVFNfVVNCMjBfTUFYX1BBQ0tFVF9TSVpFLAorCQkJCQkJVFNfVVNCMjBfRlJBTUVfU0laRSwKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0sCkBAIC0xNTIyLDcgKzE1NDAsNyBAQAogCQkJCQkudSA9IHsKIAkJCQkJCS5idWxrID0gewogCQkJCQkJCS5idWZmZXJzaXplID0KLQkJCQkJCVRTX1VTQjIwX01BWF9QQUNLRVRfU0laRSwKKwkJCQkJCVRTX1VTQjIwX0ZSQU1FX1NJWkUsCiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKaW5kZXggNzM4MWFmZi4uMmFlN2Y2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCkBAIC0yMDMsMTEgKzIwMywxMSBAQAogCiBzdGF0aWMgaW50IGFueXNlZV9tdDM1Ml9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0YXRpYyB1OCBjbG9ja19jb25maWcgW10gID0geyBDTE9DS19DVEwsICAweDM4LCAweDI4IH07Ci0Jc3RhdGljIHU4IHJlc2V0IFtdICAgICAgICAgPSB7IFJFU0VULCAgICAgIDB4ODAgfTsKLQlzdGF0aWMgdTggYWRjX2N0bF8xX2NmZyBbXSA9IHsgQURDX0NUTF8xLCAgMHg0MCB9OwotCXN0YXRpYyB1OCBhZ2NfY2ZnIFtdICAgICAgID0geyBBR0NfVEFSR0VULCAweDI4LCAweDIwIH07Ci0Jc3RhdGljIHU4IGdwcF9jdGxfY2ZnIFtdICAgPSB7IEdQUF9DVEwsICAgIDB4MzMgfTsKKwlzdGF0aWMgdTggY2xvY2tfY29uZmlnW10gICA9IHsgQ0xPQ0tfQ1RMLCAgMHgzOCwgMHgyOCB9OworCXN0YXRpYyB1OCByZXNldFtdICAgICAgICAgID0geyBSRVNFVCwgICAgICAweDgwIH07CisJc3RhdGljIHU4IGFkY19jdGxfMV9jZmdbXSAgPSB7IEFEQ19DVExfMSwgIDB4NDAgfTsKKwlzdGF0aWMgdTggYWdjX2NmZ1tdICAgICAgICA9IHsgQUdDX1RBUkdFVCwgMHgyOCwgMHgyMCB9OworCXN0YXRpYyB1OCBncHBfY3RsX2NmZ1tdICAgID0geyBHUFBfQ1RMLCAgICAweDMzIH07CiAJc3RhdGljIHU4IGNhcHRfcmFuZ2VfY2ZnW10gPSB7IENBUFRfUkFOR0UsIDB4MzIgfTsKIAogCW10MzUyX3dyaXRlKGZlLCBjbG9ja19jb25maWcsICAgc2l6ZW9mKGNsb2NrX2NvbmZpZykpOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFueXNlZV90YWJsZSBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhbnlzZWVfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9DWVBSRVNTLCBVU0JfUElEX0FOWVNFRSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BTVQsICAgICBVU0JfUElEX0FOWVNFRSkgfSwKIAl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC01MTEsNyArNTExLDcgQEAKIAkJCQkuZW5kcG9pbnQgPSAweDgyLAogCQkJCS51ID0gewogCQkJCQkuYnVsayA9IHsKLQkJCQkJCS5idWZmZXJzaXplID0gNTEyLAorCQkJCQkJLmJ1ZmZlcnNpemUgPSAoMTYqNTEyKSwKIAkJCQkJfQogCQkJCX0KIAkJCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwppbmRleCA1MmJhZGMwLi4wNzM3YzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCQkJCS5lbmRwb2ludCA9IDB4ODIsCiAJCQkJLnUgPSB7CiAJCQkJCS5idWxrID0gewotCQkJCQkJLmJ1ZmZlcnNpemUgPSA1MTIsCisJCQkJCQkuYnVmZmVyc2l6ZSA9ICgxNio1MTIpLAogCQkJCQl9CiAJCQkJfQogCQkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IGQxZDZmNDQuLjBiMjgxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtNCwxMyArNCwxNCBAQAogICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKICAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTcgRGlCY29tLCBTQQorICogIENvcHlyaWdodCAoQykgMjAwNS05IERpQmNvbSwgU0EgZXQgYWwKICAqLwogI2luY2x1ZGUgImRpYjA3MDAuaCIKIAogI2luY2x1ZGUgImRpYjMwMDBtYy5oIgogI2luY2x1ZGUgImRpYjcwMDBtLmgiCiAjaW5jbHVkZSAiZGliNzAwMHAuaCIKKyNpbmNsdWRlICJkaWI4MDAwLmgiCiAjaW5jbHVkZSAibXQyMDYwLmgiCiAjaW5jbHVkZSAibXQyMjY2LmgiCiAjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCkBAIC0xMDk4LDExICsxMDk5LDEzIEBACiAKIHN0YXRpYyBpbnQgZGliNzA3MF90dW5lcl9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQogeworCWRlYl9pbmZvKCJyZXNldDogJWQiLCBvbm9mZik7CiAJcmV0dXJuIGRpYjcwMDBwX3NldF9ncGlvKGZlLCA4LCAwLCAhb25vZmYpOwogfQogCiBzdGF0aWMgaW50IGRpYjcwNzBfdHVuZXJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKIHsKKwlkZWJfaW5mbygic2xlZXA6ICVkIiwgb25vZmYpOwogCXJldHVybiBkaWI3MDAwcF9zZXRfZ3BpbyhmZSwgOSwgMCwgb25vZmYpOwogfQogCkBAIC0xMTEyLDE2ICsxMTE1LDI2IEBACiAJCS5yZXNldCA9IGRpYjcwNzBfdHVuZXJfcmVzZXQsCiAJCS5zbGVlcCA9IGRpYjcwNzBfdHVuZXJfc2xlZXAsCiAJCS5jbG9ja19raHogPSAxMjAwMCwKLQkJLmNsb2NrX3BhZF9kcml2ZSA9IDQKKwkJLmNsb2NrX3BhZF9kcml2ZSA9IDQsCisJCS5jaGFyZ2VfcHVtcCA9IDIsCiAJfSwgewogCQkuaTJjX2FkZHJlc3MgPSBERUZBVUxUX0RJQjAwNzBfSTJDX0FERFJFU1MsCiAJCS5yZXNldCA9IGRpYjcwNzBfdHVuZXJfcmVzZXQsCiAJCS5zbGVlcCA9IGRpYjcwNzBfdHVuZXJfc2xlZXAsCiAJCS5jbG9ja19raHogPSAxMjAwMCwKLQorCQkuY2hhcmdlX3B1bXAgPSAyLAogCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZGliMDA3MF9jb25maWcgZGliNzc3MHBfZGliMDA3MF9jb25maWcgPSB7CisJIC5pMmNfYWRkcmVzcyA9IERFRkFVTFRfRElCMDA3MF9JMkNfQUREUkVTUywKKwkgLnJlc2V0ID0gZGliNzA3MF90dW5lcl9yZXNldCwKKwkgLnNsZWVwID0gZGliNzA3MF90dW5lcl9zbGVlcCwKKwkgLmNsb2NrX2toeiA9IDEyMDAwLAorCSAuY2xvY2tfcGFkX2RyaXZlID0gMCwKKwkgLmZsaXBfY2hpcCA9IDEsCit9OworCiBzdGF0aWMgaW50IGRpYjcwNzBfc2V0X3BhcmFtX292ZXJyaWRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZmUtPmR2Yi0+cHJpdjsKQEAgLTExMzksNiArMTE1Miw0NSBAQAogCXJldHVybiBzdGF0ZS0+c2V0X3BhcmFtX3NhdmUoZmUsIGZlcCk7CiB9CiAKK3N0YXRpYyBpbnQgZGliNzc3MF9zZXRfcGFyYW1fb3ZlcnJpZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCSBzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZmUtPmR2Yi0+cHJpdjsKKwkgc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSAqc3RhdGUgPSBhZGFwLT5wcml2OworCisJIHUxNiBvZmZzZXQ7CisJIHU4IGJhbmQgPSBCQU5EX09GX0ZSRVFVRU5DWShmZXAtPmZyZXF1ZW5jeS8xMDAwKTsKKwkgc3dpdGNoIChiYW5kKSB7CisJIGNhc2UgQkFORF9WSEY6CisJCSAgZGliNzAwMHBfc2V0X2dwaW8oZmUsIDAsIDAsIDEpOworCQkgIG9mZnNldCA9IDg1MDsKKwkJICBicmVhazsKKwkgY2FzZSBCQU5EX1VIRjoKKwkgZGVmYXVsdDoKKwkJICBkaWI3MDAwcF9zZXRfZ3BpbyhmZSwgMCwgMCwgMCk7CisJCSAgb2Zmc2V0ID0gMjUwOworCQkgIGJyZWFrOworCSB9CisJIGRlYl9pbmZvKCJXQkQgZm9yIERpQjcwMDBQOiAlZFxuIiwgb2Zmc2V0ICsgZGliMDA3MF93YmRfb2Zmc2V0KGZlKSk7CisJIGRpYjcwMDBwX3NldF93YmRfcmVmKGZlLCBvZmZzZXQgKyBkaWIwMDcwX3diZF9vZmZzZXQoZmUpKTsKKwkgcmV0dXJuIHN0YXRlLT5zZXRfcGFyYW1fc2F2ZShmZSwgZmVwKTsKK30KKworc3RhdGljIGludCBkaWI3NzcwcF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwkgc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSAqc3QgPSBhZGFwLT5wcml2OworCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnR1bl9pMmMgPSBkaWI3MDAwcF9nZXRfaTJjX21hc3RlcihhZGFwLT5mZSwKKwkJCSBESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVIsIDEpOworCisJIGlmIChkdmJfYXR0YWNoKGRpYjAwNzBfYXR0YWNoLCBhZGFwLT5mZSwgdHVuX2kyYywKKwkJCQkgJmRpYjc3NzBwX2RpYjAwNzBfY29uZmlnKSA9PSBOVUxMKQorCQkgcmV0dXJuIC1FTk9ERVY7CisKKwkgc3QtPnNldF9wYXJhbV9zYXZlID0gYWRhcC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtczsKKwkgYWRhcC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGRpYjc3NzBfc2V0X3BhcmFtX292ZXJyaWRlOworCSByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkaWI3MDcwcF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlICpzdCA9IGFkYXAtPnByaXY7CkBAIC0xMjE3LDYgKzEyNjksMzA2IEBACiAJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKIH0KIAorLyogRElCODA3eCBnZW5lcmljICovCitzdGF0aWMgc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyBkaWI4MDd4X2FnY19jb25maWdbMl0gPSB7CisJeworCQlCQU5EX1ZIRiwKKwkJLyogUF9hZ2NfdXNlX3NkX21vZDE9MCwgUF9hZ2NfdXNlX3NkX21vZDI9MCwKKwkJICogUF9hZ2NfZnJlcV9wd21fZGl2PTEsIFBfYWdjX2ludl9wd20xPTAsCisJCSAqIFBfYWdjX2ludl9wd20yPTAsUF9hZ2NfaW5oX2RjX3J2X2VzdD0wLAorCQkgKiBQX2FnY190aW1lX2VzdD0zLCBQX2FnY19mcmVlemU9MCwgUF9hZ2NfbmJfZXN0PTUsCisJCSAqIFBfYWdjX3dyaXRlPTAgKi8KKwkJKDAgPDwgMTUpIHwgKDAgPDwgMTQpIHwgKDcgPDwgMTEpIHwgKDAgPDwgMTApIHwgKDAgPDwgOSkgfAorCQkJKDAgPDwgOCkgfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDUgPDwgMSkgfAorCQkJKDAgPDwgMCksIC8qIHNldHVwKi8KKworCQk2MDAsIC8qIGludl9nYWluKi8KKwkJMTAsICAvKiB0aW1lX3N0YWJpbGl6Ki8KKworCQkwLCAgLyogYWxwaGFfbGV2ZWwqLworCQkxMTgsICAvKiB0aGxvY2sqLworCisJCTAsICAgICAvKiB3YmRfaW52Ki8KKwkJMzUzMCwgIC8qIHdiZF9yZWYqLworCQkxLCAgICAgLyogd2JkX3NlbCovCisJCTUsICAgICAvKiB3YmRfYWxwaGEqLworCisJCTY1NTM1LCAgLyogYWdjMV9tYXgqLworCQkwLCAgLyogYWdjMV9taW4qLworCisJCTY1NTM1LCAgLyogYWdjMl9tYXgqLworCQkwLCAgICAgIC8qIGFnYzJfbWluKi8KKworCQkwLCAgICAgIC8qIGFnYzFfcHQxKi8KKwkJNDAsICAgICAvKiBhZ2MxX3B0MiovCisJCTE4MywgICAgLyogYWdjMV9wdDMqLworCQkyMDYsICAgIC8qIGFnYzFfc2xvcGUxKi8KKwkJMjU1LCAgICAvKiBhZ2MxX3Nsb3BlMiovCisJCTcyLCAgICAgLyogYWdjMl9wdDEqLworCQkxNTIsICAgIC8qIGFnYzJfcHQyKi8KKwkJODgsICAgICAvKiBhZ2MyX3Nsb3BlMSovCisJCTkwLCAgICAgLyogYWdjMl9zbG9wZTIqLworCisJCTE3LCAgLyogYWxwaGFfbWFudCovCisJCTI3LCAgLyogYWxwaGFfZXhwKi8KKwkJMjMsICAvKiBiZXRhX21hbnQqLworCQk1MSwgIC8qIGJldGFfZXhwKi8KKworCQkwLCAgLyogcGVyZm9ybV9hZ2Nfc29mdHNwbGl0Ki8KKwl9LCB7CisJCUJBTkRfVUhGLAorCQkvKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLAorCQkgKiBQX2FnY19mcmVxX3B3bV9kaXY9MSwgUF9hZ2NfaW52X3B3bTE9MCwKKwkJICogUF9hZ2NfaW52X3B3bTI9MCwgUF9hZ2NfaW5oX2RjX3J2X2VzdD0wLAorCQkgKiBQX2FnY190aW1lX2VzdD0zLCBQX2FnY19mcmVlemU9MCwgUF9hZ2NfbmJfZXN0PTUsCisJCSAqIFBfYWdjX3dyaXRlPTAgKi8KKwkJKDAgPDwgMTUpIHwgKDAgPDwgMTQpIHwgKDEgPDwgMTEpIHwgKDAgPDwgMTApIHwgKDAgPDwgOSkgfAorCQkJKDAgPDwgOCkgfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDUgPDwgMSkgfAorCQkJKDAgPDwgMCksIC8qIHNldHVwICovCisKKwkJNjAwLCAvKiBpbnZfZ2FpbiovCisJCTEwLCAgLyogdGltZV9zdGFiaWxpeiovCisKKwkJMCwgIC8qIGFscGhhX2xldmVsKi8KKwkJMTE4LCAgLyogdGhsb2NrKi8KKworCQkwLCAgICAgLyogd2JkX2ludiovCisJCTM1MzAsICAvKiB3YmRfcmVmKi8KKwkJMSwgICAgIC8qIHdiZF9zZWwqLworCQk1LCAgICAgLyogd2JkX2FscGhhKi8KKworCQk2NTUzNSwgIC8qIGFnYzFfbWF4Ki8KKwkJMCwgIC8qIGFnYzFfbWluKi8KKworCQk2NTUzNSwgIC8qIGFnYzJfbWF4Ki8KKwkJMCwgICAgICAvKiBhZ2MyX21pbiovCisKKwkJMCwgICAgICAvKiBhZ2MxX3B0MSovCisJCTQwLCAgICAgLyogYWdjMV9wdDIqLworCQkxODMsICAgIC8qIGFnYzFfcHQzKi8KKwkJMjA2LCAgICAvKiBhZ2MxX3Nsb3BlMSovCisJCTI1NSwgICAgLyogYWdjMV9zbG9wZTIqLworCQk3MiwgICAgIC8qIGFnYzJfcHQxKi8KKwkJMTUyLCAgICAvKiBhZ2MyX3B0MiovCisJCTg4LCAgICAgLyogYWdjMl9zbG9wZTEqLworCQk5MCwgICAgIC8qIGFnYzJfc2xvcGUyKi8KKworCQkxNywgIC8qIGFscGhhX21hbnQqLworCQkyNywgIC8qIGFscGhhX2V4cCovCisJCTIzLCAgLyogYmV0YV9tYW50Ki8KKwkJNTEsICAvKiBiZXRhX2V4cCovCisKKwkJMCwgIC8qIHBlcmZvcm1fYWdjX3NvZnRzcGxpdCovCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgZGliODA3eF9id19jb25maWdfMTJfbWh6ID0geworCTYwMDAwLCAxNTAwMCwgLyogaW50ZXJuYWwsIHNhbXBsaW5nKi8KKwkxLCAyMCwgMywgMSwgMCwgLyogcGxsX2NmZzogcHJlZGl2LCByYXRpbywgcmFuZ2UsIHJlc2V0LCBieXBhc3MqLworCTAsIDAsIDEsIDEsIDIsIC8qIG1pc2M6IHJlZmRpdiwgYnlwY2xrX2RpdiwgSU9fQ0xLX2VuX2NvcmUsCisJCQkgIEFEQ2xrU3JjLCBtb2R1bG8gKi8KKwkoMyA8PCAxNCkgfCAoMSA8PCAxMikgfCAoNTk5IDw8IDApLCAvKiBzYWRfY2ZnOiByZWZzZWwsIHNlbCwgZnJlcV8xNWsqLworCSgwIDw8IDI1KSB8IDAsIC8qIGlmcmVxID0gMC4wMDAwMDAgTUh6Ki8KKwkxODE3OTc1NSwgLyogdGltZiovCisJMTIwMDAwMDAsIC8qIHh0YWxfaHoqLworfTsKKworc3RhdGljIHN0cnVjdCBkaWI4MDAwX2NvbmZpZyBkaWI4MDd4X2RpYjgwMDBfY29uZmlnWzJdID0geworCXsKKwkJLm91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXMgPSAxLAorCisJCS5hZ2NfY29uZmlnX2NvdW50ID0gMiwKKwkJLmFnYyA9IGRpYjgwN3hfYWdjX2NvbmZpZywKKwkJLnBsbCA9ICZkaWI4MDd4X2J3X2NvbmZpZ18xMl9taHosCisJCS50dW5lcl9pc19iYXNlYmFuZCA9IDEsCisKKwkJLmdwaW9fZGlyID0gRElCODAwMF9HUElPX0RFRkFVTFRfRElSRUNUSU9OUywKKwkJLmdwaW9fdmFsID0gRElCODAwMF9HUElPX0RFRkFVTFRfVkFMVUVTLAorCQkuZ3Bpb19wd21fcG9zID0gRElCODAwMF9HUElPX0RFRkFVTFRfUFdNX1BPUywKKworCQkuaG9zdGJ1c19kaXZlcnNpdHkgPSAxLAorCQkuZGl2X2NmZyA9IDEsCisJCS5hZ2NfY29udHJvbCA9ICZkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlciwKKwkJLm91dHB1dF9tb2RlID0gT1VUTU9ERV9NUEVHMl9GSUZPLAorCQkuZHJpdmVzID0gMHgyZDk4LAorCX0sIHsKKwkJLm91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXMgPSAxLAorCisJCS5hZ2NfY29uZmlnX2NvdW50ID0gMiwKKwkJLmFnYyA9IGRpYjgwN3hfYWdjX2NvbmZpZywKKwkJLnBsbCA9ICZkaWI4MDd4X2J3X2NvbmZpZ18xMl9taHosCisJCS50dW5lcl9pc19iYXNlYmFuZCA9IDEsCisKKwkJLmdwaW9fZGlyID0gRElCODAwMF9HUElPX0RFRkFVTFRfRElSRUNUSU9OUywKKwkJLmdwaW9fdmFsID0gRElCODAwMF9HUElPX0RFRkFVTFRfVkFMVUVTLAorCQkuZ3Bpb19wd21fcG9zID0gRElCODAwMF9HUElPX0RFRkFVTFRfUFdNX1BPUywKKworCQkuaG9zdGJ1c19kaXZlcnNpdHkgPSAxLAorCQkuYWdjX2NvbnRyb2wgPSAmZGliMDA3MF9jdHJsX2FnY19maWx0ZXIsCisJCS5vdXRwdXRfbW9kZSA9IE9VVE1PREVfTVBFRzJfRklGTywKKwkJLmRyaXZlcyA9IDB4MmQ5OCwKKwl9Cit9OworCitzdGF0aWMgaW50IGRpYjgwN3hfdHVuZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKK3sKKwlyZXR1cm4gZGliODAwMF9zZXRfZ3BpbyhmZSwgNSwgMCwgIW9ub2ZmKTsKK30KKworc3RhdGljIGludCBkaWI4MDd4X3R1bmVyX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYpCit7CisJcmV0dXJuIGRpYjgwMDBfc2V0X2dwaW8oZmUsIDAsIDAsIG9ub2ZmKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX3diZF9nYWluX2NmZyBkaWI4MDcwX3diZF9nYWluX2NmZ1tdID0geworICAgIHsgMjQwLCAgICAgIDd9LAorICAgIHsgMHhmZmZmLCAgIDZ9LAorfTsKKworc3RhdGljIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyBkaWI4MDd4X2RpYjAwNzBfY29uZmlnWzJdID0geworCXsKKwkJLmkyY19hZGRyZXNzID0gREVGQVVMVF9ESUIwMDcwX0kyQ19BRERSRVNTLAorCQkucmVzZXQgPSBkaWI4MDd4X3R1bmVyX3Jlc2V0LAorCQkuc2xlZXAgPSBkaWI4MDd4X3R1bmVyX3NsZWVwLAorCQkuY2xvY2tfa2h6ID0gMTIwMDAsCisJCS5jbG9ja19wYWRfZHJpdmUgPSA0LAorCQkudmdhX2ZpbHRlciA9IDEsCisJCS5mb3JjZV9jcnlzdGFsX21vZGUgPSAxLAorCQkuZW5hYmxlX3RoaXJkX29yZGVyX2ZpbHRlciA9IDEsCisJCS5jaGFyZ2VfcHVtcCA9IDAsCisJCS53YmRfZ2FpbiA9IGRpYjgwNzBfd2JkX2dhaW5fY2ZnLAorCQkub3NjX2J1ZmZlcl9zdGF0ZSA9IDAsCisJCS5mcmVxX29mZnNldF9raHpfdWhmID0gLTEwMCwKKwkJLmZyZXFfb2Zmc2V0X2toel92aGYgPSAtMTAwLAorCX0sIHsKKwkJLmkyY19hZGRyZXNzID0gREVGQVVMVF9ESUIwMDcwX0kyQ19BRERSRVNTLAorCQkucmVzZXQgPSBkaWI4MDd4X3R1bmVyX3Jlc2V0LAorCQkuc2xlZXAgPSBkaWI4MDd4X3R1bmVyX3NsZWVwLAorCQkuY2xvY2tfa2h6ID0gMTIwMDAsCisJCS5jbG9ja19wYWRfZHJpdmUgPSAyLAorCQkudmdhX2ZpbHRlciA9IDEsCisJCS5mb3JjZV9jcnlzdGFsX21vZGUgPSAxLAorCQkuZW5hYmxlX3RoaXJkX29yZGVyX2ZpbHRlciA9IDEsCisJCS5jaGFyZ2VfcHVtcCA9IDAsCisJCS53YmRfZ2FpbiA9IGRpYjgwNzBfd2JkX2dhaW5fY2ZnLAorCQkub3NjX2J1ZmZlcl9zdGF0ZSA9IDAsCisJCS5mcmVxX29mZnNldF9raHpfdWhmID0gLTI1LAorCQkuZnJlcV9vZmZzZXRfa2h6X3ZoZiA9IC0yNSwKKwl9Cit9OworCitzdGF0aWMgaW50IGRpYjgwN3hfc2V0X3BhcmFtX292ZXJyaWRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlICpzdGF0ZSA9IGFkYXAtPnByaXY7CisKKwl1MTYgb2Zmc2V0ID0gZGliMDA3MF93YmRfb2Zmc2V0KGZlKTsKKwl1OCBiYW5kID0gQkFORF9PRl9GUkVRVUVOQ1koZmVwLT5mcmVxdWVuY3kvMTAwMCk7CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBCQU5EX1ZIRjoKKwkJb2Zmc2V0ICs9IDc1MDsKKwkJYnJlYWs7CisJY2FzZSBCQU5EX1VIRjogIC8qIGZhbGwtdGhydSB3YW50ZWQgKi8KKwlkZWZhdWx0OgorCQlvZmZzZXQgKz0gMjUwOyBicmVhazsKKwl9CisJZGViX2luZm8oIldCRCBmb3IgRGlCODAwMDogJWRcbiIsIG9mZnNldCk7CisJZGliODAwMF9zZXRfd2JkX3JlZihmZSwgb2Zmc2V0KTsKKworCXJldHVybiBzdGF0ZS0+c2V0X3BhcmFtX3NhdmUoZmUsIGZlcCk7Cit9CisKK3N0YXRpYyBpbnQgZGliODA3eF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlICpzdCA9IGFkYXAtPnByaXY7CisJc3RydWN0IGkyY19hZGFwdGVyICp0dW5faTJjID0gZGliODAwMF9nZXRfaTJjX21hc3RlcihhZGFwLT5mZSwKKwkJCURJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CisKKwlpZiAoYWRhcC0+aWQgPT0gMCkgeworCQlpZiAoZHZiX2F0dGFjaChkaWIwMDcwX2F0dGFjaCwgYWRhcC0+ZmUsIHR1bl9pMmMsCisJCQkJJmRpYjgwN3hfZGliMDA3MF9jb25maWdbMF0pID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQlpZiAoZHZiX2F0dGFjaChkaWIwMDcwX2F0dGFjaCwgYWRhcC0+ZmUsIHR1bl9pMmMsCisJCQkJJmRpYjgwN3hfZGliMDA3MF9jb25maWdbMV0pID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdC0+c2V0X3BhcmFtX3NhdmUgPSBhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zOworCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkaWI4MDd4X3NldF9wYXJhbV9vdmVycmlkZTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBTVEs4MDd4ICovCitzdGF0aWMgaW50IHN0azgwN3hfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU82LCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDEwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzksIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzQsIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzcsIEdQSU9fT1VULCAxKTsKKworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAwKTsKKworCWRpYjA3MDBfY3RybF9jbG9jayhhZGFwLT5kZXYsIDcyLCAxKTsKKworCW1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CisKKwlkaWI4MDAwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMTgsCisJCQkJMHg4MCk7CisKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliODAwMF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgwLAorCQkJICAgICAgJmRpYjgwN3hfZGliODAwMF9jb25maWdbMF0pOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAgLUVOT0RFViA6IDA7Cit9CisKKy8qIFNUSzgwN3hQVlIgKi8KK3N0YXRpYyBpbnQgc3RrODA3eHB2cl9mcm9udGVuZF9hdHRhY2gwKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU82LCBHUElPX09VVCwgMCk7CisJbXNsZWVwKDMwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoNTAwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzksIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzQsIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzcsIEdQSU9fT1VULCAxKTsKKworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAwKTsKKworCWRpYjA3MDBfY3RybF9jbG9jayhhZGFwLT5kZXYsIDcyLCAxKTsKKworCW1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CisKKwkvKiBpbml0aWFsaXplIElDIDAgKi8KKwlkaWI4MDAwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMHgxMiwgMHg4MCk7CisKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliODAwMF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgwLAorCQkJICAgICAgJmRpYjgwN3hfZGliODAwMF9jb25maWdbMF0pOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworc3RhdGljIGludCBzdGs4MDd4cHZyX2Zyb250ZW5kX2F0dGFjaDEoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwkvKiBpbml0aWFsaXplIElDIDEgKi8KKwlkaWI4MDAwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMHgyMiwgMHg4Mik7CisKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliODAwMF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgyLAorCQkJICAgICAgJmRpYjgwN3hfZGliODAwMF9jb25maWdbMV0pOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworCiAvKiBTVEs3MDcwUEQgKi8KIHN0YXRpYyBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIHN0azcwNzBwZF9kaWI3MDAwcF9jb25maWdbMl0gPSB7CiAJewpAQCAtMTUwMCw3ICsxODUyLDE1IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsCVVTQl9QSURfVEVSUkFURUNfVDMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsCVVTQl9QSURfVEVSUkFURUNfVDUpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwgICAgICBVU0JfUElEX1lVQU5fU1RLNzcwMEQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwJVVNCX1BJRF9ZVUFOX1NUSzc3MDBEXzIpIH0sCisvKiA1NSAqL3sgVVNCX0RFVklDRShVU0JfVklEX1lVQU4sCVVTQl9QSURfWVVBTl9TVEs3NzAwRF8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLAlVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0EpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfUElOTkFDTEUsCVVTQl9QSURfUElOTkFDTEVfUENUVjczRVNFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLAlVU0JfUElEX1BJTk5BQ0xFX1BDVFYyODJFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwJVVNCX1BJRF9ESUJDT01fU1RLNzc3MFApIH0sCisvKiA2MCAqL3sgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAlVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9YWFNfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ESUJDT00sICAgIFVTQl9QSURfRElCQ09NX1NUSzgwN1hQVlIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLCAgICBVU0JfUElEX0RJQkNPTV9TVEs4MDdYUCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9QSVhFTFZJRVcsIFVTQl9QSURfUElYRUxWSUVXX1NCVFZEKSB9LAogCXsgMCB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkaWIwNzAwX3VzYl9pZF90YWJsZSk7CkBAIC0xNTY1LDcgKzE5MjUsNyBAQAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiTGVhZHRlayBXaW5mYXN0IERUViBEb25nbGUgKFNUSzc3MDBQIGJhc2VkKSIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbOF0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVszNF0gfSwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs4XSB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiQVZlck1lZGlhIEFWZXJUViBEVkItVCBFeHByZXNzIiwKQEAgLTE3NjQsNiArMjEyNCw0MSBAQAogCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKKwkJLm51bV9hZGFwdGVycyA9IDEsCisJCS5hZGFwdGVyID0geworCQkJeworCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gc3RrNzA3MHBfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgID0gZGliNzA3MHBfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisKKwkJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCX0sCisJCX0sCisKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAzLAorCQkuZGV2aWNlcyA9IHsKKwkJCXsgICAiUGlubmFjbGUgUENUViA3M0EiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU2XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiUGlubmFjbGUgUENUViA3M2UgU0UiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU3XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiUGlubmFjbGUgUENUViAyODJlIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs1OF0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCX0sCisKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCisJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCisKIAkJLm51bV9hZGFwdGVycyA9IDIsCiAJCS5hZGFwdGVyID0gewogCQkJewpAQCAtMTkyNyw2ICsyMzIyLDEwMiBAQAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJfSwKKwl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKKworCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBzdGs3MDcwcF9mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWI3NzcwcF90dW5lcl9hdHRhY2gsCisKKwkJCQlESUIwNzAwX0RFRkFVTFRfU1RSRUFNSU5HX0NPTkZJRygweDAyKSwKKworCQkJCS5zaXplX29mX3ByaXYgPQorCQkJCQlzaXplb2Yoc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSksCisJCQl9LAorCQl9LAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkJLmRldmljZXMgPSB7CisJCQl7ICAgIkRpQmNvbSBTVEs3NzcwUCByZWZlcmVuY2UgZGVzaWduIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs1OV0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgVCBVU0IgWFhTIChIRCkiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM0XSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzYwXSB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJfSwKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBzdGs4MDd4X2Zyb250ZW5kX2F0dGFjaCwKKwkJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYjgwN3hfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisKKwkJCQkuc2l6ZV9vZl9wcml2ID0KKwkJCQkJc2l6ZW9mKHN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJfSwKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDIsCisJCS5kZXZpY2VzID0geworCQkJeyAgICJEaUJjb20gU1RLODA3eFAgcmVmZXJlbmNlIGRlc2lnbiIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNjJdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJQcm9saW5rIFBpeGVsdmlldyBTQlRWRCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNjNdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQl9LAorCisJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKKwkJLnJjX2tleV9tYXAgICAgICAgPSBkaWIwNzAwX3JjX2tleXMsCisJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkaWIwNzAwX3JjX2tleXMpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnkKKworCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCQkubnVtX2FkYXB0ZXJzID0gMiwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBzdGs4MDd4cHZyX2Zyb250ZW5kX2F0dGFjaDAsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWI4MDd4X3R1bmVyX2F0dGFjaCwKKworCQkJCURJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKDB4MDIpLAorCisJCQkJLnNpemVfb2ZfcHJpdiA9CisJCQkJCXNpemVvZihzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCX0sCisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBzdGs4MDd4cHZyX2Zyb250ZW5kX2F0dGFjaDEsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWI4MDd4X3R1bmVyX2F0dGFjaCwKKworCQkJCURJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKDB4MDMpLAorCisJCQkJLnNpemVfb2ZfcHJpdiA9CisJCQkJCXNpemVvZihzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCX0sCisJCX0sCisKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCQkuZGV2aWNlcyA9IHsKKwkJCXsgICAiRGlCY29tIFNUSzgwN3hQVlIgcmVmZXJlbmNlIGRlc2lnbiIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNjFdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQl9LAorCisJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKKwkJLnJjX2tleV9tYXAgICAgICAgPSBkaWIwNzAwX3JjX2tleXMsCisJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkaWIwNzAwX3JjX2tleXMpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnkKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDE4NWE1MDYuLmE1NDhjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICNkZWZpbmUgVVNCX1ZJRF9NU0lfMgkJCQkweDE0NjIKICNkZWZpbmUgVVNCX1ZJRF9PUEVSQTEJCQkJMHg2OTVjCiAjZGVmaW5lIFVTQl9WSURfUElOTkFDTEUJCQkweDIzMDQKKyNkZWZpbmUgVVNCX1ZJRF9QSVhFTFZJRVcJCQkweDE1NTQKICNkZWZpbmUgVVNCX1ZJRF9URUNITk9UUkVORAkJCTB4MGI0OAogI2RlZmluZSBVU0JfVklEX1RFUlJBVEVDCQkJMHgwY2NkCiAjZGVmaW5lIFVTQl9WSURfVEVMRVNUQVIJCQkweDEwYjkKQEAgLTU5LDYgKzYwLDcgQEAKICNkZWZpbmUgVVNCX1ZJRF9ZVUFOCQkJCTB4MTE2NAogI2RlZmluZSBVU0JfVklEX1hURU5TSU9OUwkJCTB4MWFlNwogI2RlZmluZSBVU0JfVklEX0hVTUFYX0NPRVgJCQkweDEwYjkKKyNkZWZpbmUgVVNCX1ZJRF83NzQJCQkJMHg3YTY5CiAKIC8qIFByb2R1Y3QgSURzICovCiAjZGVmaW5lIFVTQl9QSURfQURTVEVDSF9VU0IyX0NPTEQJCQkweGEzMzMKQEAgLTk1LDcgKzk3LDEwIEBACiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzc3MDBfVTcwMDAJCQkweDcwMDEKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzA3MFAJCQkJMHgxZWJjCiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzcwNzBQRAkJCTB4MWViZQorI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs4MDdYUAkJCQkweDFmOTAKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLODA3WFBWUgkJCTB4MWY5OAogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9BTkNIT1JfMjEzNV9DT0xECQkJMHgyMTMxCisjZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzc3NzBQCQkJCTB4MWU4MAogI2RlZmluZSBVU0JfUElEX0RQT1NIX005MjA2X0NPTEQJCQkweDkyMDYKICNkZWZpbmUgVVNCX1BJRF9EUE9TSF9NOTIwNl9XQVJNCQkJMHhhMDkwCiAjZGVmaW5lIFVTQl9QSURfVU5JV0lMTF9TVEs3NzAwUAkJCTB4NjAwMwpAQCAtMTg0LDYgKzE4OSw3IEBACiAjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9IVF9FWFBSRVNTCQkweDAwNjAKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfRVhQUkVTUwkJMHgwMDYyCiAjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9UX1hYUwkJCTB4MDA3OAorI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9YWFNfMgkJMHgwMGFiCiAjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfVDMJCQkJMHgxMGEwCiAjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfVDUJCQkJMHgxMGExCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfRVhQUkVTU0NBUkRfMzIwQ1gJCTB4MDIyZQpAQCAtMTk1LDYgKzIwMSwxMCBAQAogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0UJCQkweDAyMzcKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRQkJCTB4MDIzYQogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFX1NFCQkJMHgwMjNiCisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczQQkJCTB4MDI0MworI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0VTRQkJCTB4MDI0NQorI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFYyODJFCQkJMHgwMjQ4CisjZGVmaW5lIFVTQl9QSURfUElYRUxWSUVXX1NCVFZECQkJCTB4NTAxMAogI2RlZmluZSBVU0JfUElEX1BDVFZfMjAwRQkJCQkweDAyMGUKICNkZWZpbmUgVVNCX1BJRF9QQ1RWXzQwMEUJCQkJMHgwMjBmCiAjZGVmaW5lIFVTQl9QSURfUENUVl80NTBFCQkJCTB4MDIyMgpAQCAtMjY1LDUgKzI3NSw2IEBACiAjZGVmaW5lIFVTQl9QSURfRUxHQVRPX0VZRVRWX0RUVF9EbHgJCQkweDAwMjAKICNkZWZpbmUgVVNCX1BJRF9EVkJfVF9VU0JfU1RJQ0tfSElHSF9TUEVFRF9DT0xECQkweDUwMDAKICNkZWZpbmUgVVNCX1BJRF9EVkJfVF9VU0JfU1RJQ0tfSElHSF9TUEVFRF9XQVJNCQkweDUwMDEKKyNkZWZpbmUgVVNCX1BJRF9GUklJT19XSElURQkJCQkweDAwMDEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkZmUyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYwpAQCAtMCwwICsxLDQ4MyBAQAorLyogRFZCIFVTQiBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUgRnJpaW8gVVNCMi4wIElTREItVCByZWNlaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWtpaGlybyBUc3VrYWRhIDx0c2tkMkB5YWhvby5jby5qcD4KKyAqCisgKiBUaGlzIG1vZHVsZSBpcyBiYXNlZCBvZmYgdGhlIHRoZSBnbDg2MSBhbmQgdnA3MDJ4IG1vZHVsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiZnJpaW8uaCIKKworc3RydWN0IGpkdmJ0OTA1MDJfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisJc3RydWN0IGpkdmJ0OTA1MDJfY29uZmlnIGNvbmZpZzsKK307CisKKy8qIE5PVEU6IFRDOTA1MDIgaGFzIDE2Yml0IHJlZ2lzdGVyLWFkZHJlc3M/ICovCisvKiByZWdpc3RlciAweDAxMDAgaXMgdXNlZCBmb3IgcmVhZGluZyBQTEwgc3RhdHVzLCBzbyByZWcgaXMgdTE2IGhlcmUgKi8KK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9yZWdfcmVhZChzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICAgY29uc3QgdTE2IHJlZywgdTggKmJ1ZiwgY29uc3Qgc2l6ZV90IGNvdW50KQoreworCWludCByZXQ7CisJdTggd2J1ZlszXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMl07CisKKwl3YnVmWzBdID0gcmVnICYgMHhGRjsKKwl3YnVmWzFdID0gMDsKKwl3YnVmWzJdID0gcmVnID4+IDg7CisKKwltc2dbMF0uYWRkciA9IHN0YXRlLT5jb25maWcuZGVtb2RfYWRkcmVzczsKKwltc2dbMF0uZmxhZ3MgPSAwOworCW1zZ1swXS5idWYgPSB3YnVmOworCW1zZ1swXS5sZW4gPSBzaXplb2Yod2J1Zik7CisKKwltc2dbMV0uYWRkciA9IG1zZ1swXS5hZGRyOworCW1zZ1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ1sxXS5idWYgPSBidWY7CisJbXNnWzFdLmxlbiA9IGNvdW50OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisJaWYgKHJldCAhPSAyKSB7CisJCWRlYl9mZSgiIHJlZyByZWFkIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGN1cnJlbnRseSAxNmJpdCByZWdpc3Rlci1hZGRyZXNzIGlzIG5vdCB1c2VkLCBzbyByZWcgaXMgdTggaGVyZSAqLworc3RhdGljIGludCBqZHZidDkwNTAyX3NpbmdsZV9yZWdfd3JpdGUoc3RydWN0IGpkdmJ0OTA1MDJfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBjb25zdCB1OCByZWcsIGNvbnN0IHU4IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJdTggd2J1ZlsyXTsKKworCXdidWZbMF0gPSByZWc7CisJd2J1ZlsxXSA9IHZhbDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmJ1ZiA9IHdidWY7CisJbXNnLmxlbiA9IHNpemVvZih3YnVmKTsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkgIT0gMSkgeworCQlkZWJfZmUoIiByZWcgd3JpdGUgZmFpbGVkLiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX2pkdmJ0OTA1MDJfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IGpkdmJ0OTA1MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IGVyciwgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7CisJCWVyciA9IGpkdmJ0OTA1MDJfc2luZ2xlX3JlZ193cml0ZShzdGF0ZSwKKwkJCQkJCSAgYnVmWzBdICsgaSwgYnVmW2kgKyAxXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvKiByZWFkIHBsbCBzdGF0dXMgYnl0ZSB2aWEgdGhlIGRlbW9kdWxhdG9yJ3MgSTJDIHJlZ2lzdGVyICovCisvKiBub3RlOiBXaW4gYm94IHJlYWRzIGl0IGJ5IDhCIGJsb2NrIGF0IHRoZSBJMkMgYWRkciAweDMwIGZyb20gcmVnOjB4ODAgKi8KK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9wbGxfcmVhZChzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUsIHU4ICpyZXN1bHQpCit7CisJaW50IHJldDsKKworCS8qICsxIGZvciByZWFkaW5nICovCisJdTggcGxsX2FkZHJfYnl0ZSA9IChzdGF0ZS0+Y29uZmlnLnBsbF9hZGRyZXNzIDw8IDEpICsgMTsKKworCSpyZXN1bHQgPSAwOworCisJcmV0ID0gamR2YnQ5MDUwMl9zaW5nbGVfcmVnX3dyaXRlKHN0YXRlLCBKRFZCVDkwNTAyXzJORF9JMkNfUkVHLAorCQkJCQkgIHBsbF9hZGRyX2J5dGUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBqZHZidDkwNTAyX3JlZ19yZWFkKHN0YXRlLCAweDAxMDAsIHJlc3VsdCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCWRlYl9mZSgiUExMIHJlYWQgdmFsOiUwMnhcbiIsICpyZXN1bHQpOworCXJldHVybiAwOworCitlcnJvcjoKKwlkZWJfZmUoIiVzOnJldCA9PSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIC1FUkVNT1RFSU87Cit9CisKKworLyogc2V0IHBsbCBmcmVxdWVuY3kgdmlhIHRoZSBkZW1vZHVsYXRvcidzIEkyQyByZWdpc3RlciAqLworc3RhdGljIGludCBqZHZidDkwNTAyX3BsbF9zZXRfZnJlcShzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUsIHUzMiBmcmVxKQoreworCWludCByZXQ7CisJaW50IHJldHJ5OworCXU4IHJlczE7CisJdTggcmVzMls5XTsKKworCXU4IHBsbF9mcmVxX2NtZFtQTExfQ01EX0xFTl07CisJdTggcGxsX2FnY19jbWRbUExMX0NNRF9MRU5dOworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXTsKKwl1MzIgZjsKKworCWRlYl9mZSgiJXM6IGZyZXE9JWQsIHN0ZXA9JWRcbiIsIF9fZnVuY19fLCBmcmVxLAorCSAgICAgICBzdGF0ZS0+ZnJvbnRlbmQub3BzLmluZm8uZnJlcXVlbmN5X3N0ZXBzaXplKTsKKwkvKiBmcmVxIC0+IG9zY2lsYXRvciBmcmVxdWVuY3kgY29udmVyc2lvbi4gKi8KKwkvKiBmcmVxOiA0NzMsMDAwLDAwMCArIG4qNiwwMDAsMDAwIChubyAxLzdNSHogc2hpZnQgdG8gY2VudGVyIGZyZXEpICovCisJLyogYWRkIDQwMFsxLzcgTUhaXSA9IDU3LjE0Mjg1N01Iei4gICA1N01IeiBmb3IgdGhlIElGLCAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS83TUh6IGZvciBjZW50ZXIgZnJlcSBzaGlmdCAqLworCWYgPSBmcmVxIC8gc3RhdGUtPmZyb250ZW5kLm9wcy5pbmZvLmZyZXF1ZW5jeV9zdGVwc2l6ZTsKKwlmICs9IDQwMDsKKwlwbGxfZnJlcV9jbWRbREVNT0RfUkVESVJFQ1RfUkVHXSA9IEpEVkJUOTA1MDJfMk5EX0kyQ19SRUc7IC8qIDB4RkUgKi8KKwlwbGxfZnJlcV9jbWRbQUREUkVTU19CWVRFXSA9IHN0YXRlLT5jb25maWcucGxsX2FkZHJlc3MgPDwgMTsKKwlwbGxfZnJlcV9jbWRbRElWSURFUl9CWVRFMV0gPSAoZiA+PiA4KSAmIDB4N0Y7CisJcGxsX2ZyZXFfY21kW0RJVklERVJfQllURTJdID0gZiAmIDB4RkY7CisJcGxsX2ZyZXFfY21kW0NPTlRST0xfQllURV0gPSAweEIyOyAvKiByZWYuZGl2aWRlcjoyOCwgNE1Iei8yOD0xLzdNSHogKi8KKwlwbGxfZnJlcV9jbWRbQkFORFNXSVRDSF9CWVRFXSA9IDB4MDg7CS8qIFVIRiBiYW5kICovCisKKwltc2dbMF0uYWRkciA9IHN0YXRlLT5jb25maWcuZGVtb2RfYWRkcmVzczsKKwltc2dbMF0uZmxhZ3MgPSAwOworCW1zZ1swXS5idWYgPSBwbGxfZnJlcV9jbWQ7CisJbXNnWzBdLmxlbiA9IHNpemVvZihwbGxfZnJlcV9jbWQpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2dbMF0sIDEpOworCWlmIChyZXQgIT0gMSkKKwkJZ290byBlcnJvcjsKKworCXVkZWxheSg1MCk7CisKKwlwbGxfYWdjX2NtZFtERU1PRF9SRURJUkVDVF9SRUddID0gcGxsX2ZyZXFfY21kW0RFTU9EX1JFRElSRUNUX1JFR107CisJcGxsX2FnY19jbWRbQUREUkVTU19CWVRFXSA9IHBsbF9mcmVxX2NtZFtBRERSRVNTX0JZVEVdOworCXBsbF9hZ2NfY21kW0RJVklERVJfQllURTFdID0gcGxsX2ZyZXFfY21kW0RJVklERVJfQllURTFdOworCXBsbF9hZ2NfY21kW0RJVklERVJfQllURTJdID0gcGxsX2ZyZXFfY21kW0RJVklERVJfQllURTJdOworCXBsbF9hZ2NfY21kW0NPTlRST0xfQllURV0gPSAweDlBOyAvKiAgQUdDX0NUUkwgaW5zdGVhZCBvZiBCQU5EU1dJVENIICovCisJcGxsX2FnY19jbWRbQUdDX0NUUkxfQllURV0gPSAweDUwOworCS8qIEFHQyBUaW1lIENvbnN0YW50IDJzLCBBR0MgdGFrZS1vdmVyIHBvaW50OjEwM2RCdVYobG93ZXN0KSAqLworCisJbXNnWzFdLmFkZHIgPSBtc2dbMF0uYWRkcjsKKwltc2dbMV0uZmxhZ3MgPSAwOworCW1zZ1sxXS5idWYgPSBwbGxfYWdjX2NtZDsKKwltc2dbMV0ubGVuID0gc2l6ZW9mKHBsbF9hZ2NfY21kKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnWzFdLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJIGRvbid0IGtub3cgd2hhdCB0aGVzZSBjbWRzIGFyZSBmb3IsICAqLworCS8qIGJ1dCB0aGUgVVNCIGxvZyBvbiBhIHdpbmRvd3MgYm94IGNvbnRhaW5zIHRoZW0gKi8KKwlyZXQgPSBqZHZidDkwNTAyX3NpbmdsZV9yZWdfd3JpdGUoc3RhdGUsIDB4MDEsIDB4NDApOworCXJldCB8PSBqZHZidDkwNTAyX3NpbmdsZV9yZWdfd3JpdGUoc3RhdGUsIDB4MDEsIDB4MDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJdWRlbGF5KDEwMCk7CisKKwkvKiB3YWl0IGZvciB0aGUgZGVtb2QgdG8gYmUgcmVhZHk/ICovCisjZGVmaW5lIFJFVFJZX0NPVU5UIDUKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCBSRVRSWV9DT1VOVDsgcmV0cnkrKykgeworCQlyZXQgPSBqZHZidDkwNTAyX3JlZ19yZWFkKHN0YXRlLCAweDAwOTYsICZyZXMxLCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCS8qIGlmIChyZXMxICE9IDB4MDApIGdvdG8gZXJyb3I7ICovCisJCXJldCA9IGpkdmJ0OTA1MDJfcmVnX3JlYWQoc3RhdGUsIDB4MDBCMCwgcmVzMiwgc2l6ZW9mKHJlczIpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWlmIChyZXMyWzBdID49IDB4QTcpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwMCk7CisJfQorCWlmIChyZXRyeSA+PSBSRVRSWV9DT1VOVCkgeworCQlkZWJfZmUoIiVzOiBGRSBkb2VzIG5vdCBnZXQgcmVhZHkgYWZ0ZXIgZnJlcSBzZXR0aW5nLlxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7CitlcnJvcjoKKwlkZWJfZmUoIiVzOnJldCA9PSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIC1FUkVNT1RFSU87Cit9CisKK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXRlKQoreworCXU4IHJlc3VsdDsKKwlpbnQgcmV0OworCisJKnN0YXRlID0gRkVfSEFTX1NJR05BTDsKKworCXJldCA9IGpkdmJ0OTA1MDJfcGxsX3JlYWQoZmUtPmRlbW9kdWxhdG9yX3ByaXYsICZyZXN1bHQpOworCWlmIChyZXQpIHsKKwkJZGViX2ZlKCIlczpyZXQgPT0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwkqc3RhdGUgPSBGRV9IQVNfU0lHTkFMCisJCXwgRkVfSEFTX0NBUlJJRVIKKwkJfCBGRV9IQVNfVklURVJCSQorCQl8IEZFX0hBU19TWU5DOworCisJaWYgKHJlc3VsdCAmIFBMTF9TVEFUVVNfTE9DS0VEKQorCQkqc3RhdGUgfD0gRkVfSEFTX0xPQ0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqZHZidDkwNTAyX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwkqYmVyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqZHZidDkwNTAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgICB1MTYgKnN0cmVuZ3RoKQoreworCWludCByZXQ7CisJdTggcmJ1ZlszN107CisKKwkqc3RyZW5ndGggPSAwOworCisJLyogc3RhdHVzIHJlZ2lzdGVyIChpbmNsLiBzaWduYWwgc3RyZW5ndGgpIDogMHg4OSAgKi8KKwkvKiBUT0RPOiByZWFkIGp1c3QgdGhlIG5lY2Vzc2FyeSByZWdpc3RlcnMgWzB4OEIuLjB4OERdPyAqLworCXJldCA9IGpkdmJ0OTA1MDJfcmVnX3JlYWQoZmUtPmRlbW9kdWxhdG9yX3ByaXYsIDB4MDA4OSwKKwkJCQkgIHJidWYsIHNpemVvZihyYnVmKSk7CisKKwlpZiAocmV0KSB7CisJCWRlYl9mZSgiJXM6cmV0ID09ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJLyogc2lnbmFsX3N0cmVuZ3RoOiByYnVmWzItNF0gKDI0Yml0IEJFKSwgdXNlIGxvd2VyIDE2Yml0IGZvciBub3cuICovCisJKnN0cmVuZ3RoID0gKHJidWZbM10gPDwgOCkgKyByYnVmWzRdOworCWlmIChyYnVmWzJdKQorCQkqc3RyZW5ndGggPSAweGZmZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqZHZidDkwNTAyX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwkqc25yID0gMHgwMTAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwkqdWNibG9ja3MgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqZnMpCit7CisJZnMtPm1pbl9kZWxheV9tcyA9IDUwMDsKKwlmcy0+c3RlcF9zaXplID0gMDsKKwlmcy0+bWF4X2RyaWZ0ID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlwLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fQVVUTzsKKwlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOworCXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfQVVUTzsKKwlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDX0FVVE87CisJcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7CisJcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfQVVUTzsKKwlwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF9BVVRPOworCXAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfQVVUTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqZHZidDkwNTAyX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJLyoqCisJICogTk9URTogaWdub3JlIGFsbCB0aGUgcGFyYW10ZXJzIGV4Y2VwdCBmcmVxdWVuY3kuCisJICogICAgICAgb3RoZXJzIHNob3VsZCBiZSBmaXhlZCB0byB0aGUgcHJvcGVyIHZhbHVlIGZvciBJU0RCLVQsCisJICogICAgICAgYnV0IGRvbid0IGNoZWNrIGhlcmUuCisJICovCisKKwlzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCisJZGViX2ZlKCIlczogRnJlcTolZFxuIiwgX19mdW5jX18sIHAtPmZyZXF1ZW5jeSk7CisKKwlyZXQgPSBqZHZidDkwNTAyX3BsbF9zZXRfZnJlcShzdGF0ZSwgcC0+ZnJlcXVlbmN5KTsKKwlpZiAocmV0KSB7CisJCWRlYl9mZSgiJXM6cmV0ID09ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlkZWJfZmUoIiVzIGNhbGxlZC5cbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIChyZWcsIHZhbCkgY29tbWFkIGxpc3QgdG8gaW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4KKyAqICBjYXB0dXJlZCBvbiBhIFdpbmRvd3MgYm94LgorICovCitzdGF0aWMgdTggaW5pdF9jb2RlW11bMl0gPSB7CisJezB4MDEsIDB4NDB9LAorCXsweDA0LCAweDM4fSwKKwl7MHgwNSwgMHg0MH0sCisJezB4MDcsIDB4NDB9LAorCXsweDBGLCAweDRGfSwKKwl7MHgxMSwgMHgyMX0sCisJezB4MTIsIDB4MEJ9LAorCXsweDEzLCAweDJGfSwKKwl7MHgxNCwgMHgzMX0sCisJezB4MTYsIDB4MDJ9LAorCXsweDIxLCAweEM0fSwKKwl7MHgyMiwgMHgyMH0sCisJezB4MkMsIDB4Nzl9LAorCXsweDJELCAweDM0fSwKKwl7MHgyRiwgMHgwMH0sCisJezB4MzAsIDB4Mjh9LAorCXsweDMxLCAweDMxfSwKKwl7MHgzMiwgMHhERn0sCisJezB4MzgsIDB4MDF9LAorCXsweDM5LCAweDc4fSwKKwl7MHgzQiwgMHgzM30sCisJezB4M0MsIDB4MzN9LAorCXsweDQ4LCAweDkwfSwKKwl7MHg1MSwgMHg2OH0sCisJezB4NUUsIDB4Mzh9LAorCXsweDcxLCAweDAwfSwKKwl7MHg3MiwgMHgwOH0sCisJezB4NzcsIDB4MDB9LAorCXsweEMwLCAweDIxfSwKKwl7MHhDMSwgMHgxMH0sCisJezB4RTQsIDB4MUF9LAorCXsweEVBLCAweDFGfSwKKwl7MHg3NywgMHgwMH0sCisJezB4NzEsIDB4MDB9LAorCXsweDcxLCAweDAwfSwKKwl7MHg3NiwgMHgwQ30sCit9OworCitjb25zdCBzdGF0aWMgaW50IGluaXRfY29kZV9sZW4gPSBzaXplb2YoaW5pdF9jb2RlKSAvIHNpemVvZih1OFsyXSk7CisKK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWludCBpID0gLTE7CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwlzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRlYl9mZSgiJXMgY2FsbGVkLlxuIiwgX19mdW5jX18pOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3M7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gMjsKKwlmb3IgKGkgPSAwOyBpIDwgaW5pdF9jb2RlX2xlbjsgaSsrKSB7CisJCW1zZy5idWYgPSBpbml0X2NvZGVbaV07CisJCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwkJaWYgKHJldCAhPSAxKQorCQkJZ290byBlcnJvcjsKKwl9CisJbXNsZWVwKDEwMCk7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZGViX2ZlKCIlczogaW5pdF9jb2RlWyVkXSBmYWlsZWQuIHJldD09JWRcbiIsIF9fZnVuY19fLCBpLCByZXQpOworCXJldHVybiAtRVJFTU9URUlPOworfQorCisKK3N0YXRpYyB2b2lkIGpkdmJ0OTA1MDJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlrZnJlZShzdGF0ZSk7Cit9CisKKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGpkdmJ0OTA1MDJfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpqZHZidDkwNTAyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJc3RydWN0IGpkdmJ0OTA1MDJfc3RhdGUgKnN0YXRlID0gTlVMTDsKKworCWRlYl9pbmZvKCIlcyBjYWxsZWQuXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGpkdmJ0OTA1MDJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5pMmMgPSAmZC0+aTJjX2FkYXA7CisJbWVtY3B5KCZzdGF0ZS0+Y29uZmlnLCAmZnJpaW9fZmVfY29uZmlnLCBzaXplb2YoZnJpaW9fZmVfY29uZmlnKSk7CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmamR2YnQ5MDUwMl9vcHMsCisJICAgICAgIHNpemVvZihqZHZidDkwNTAyX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisKKwlpZiAoamR2YnQ5MDUwMl9pbml0KCZzdGF0ZS0+ZnJvbnRlbmQpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworCitlcnJvcjoKKwlrZnJlZShzdGF0ZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBqZHZidDkwNTAyX29wcyA9IHsKKworCS5pbmZvID0geworCQkubmFtZQkJCT0gIkNvbXRlY2ggSkRWQlQ5MDUwMiBJU0RCLVQiLAorCQkudHlwZQkJCT0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4JCT0gNDczMDAwMDAwLCAvKiBVSEYgMTNjaCwgY2VudGVyICovCisJCS5mcmVxdWVuY3lfbWF4CQk9IDc2NzE0Mjg1NywgLyogVUhGIDYyY2gsIGNlbnRlciAqLworCQkuZnJlcXVlbmN5X3N0ZXBzaXplCT0gSkRWQlQ5MDUwMl9QTExfQ0xLIC8KKwkJCQkJCQlKRFZCVDkwNTAyX1BMTF9ESVZJREVSLAorCQkuZnJlcXVlbmN5X3RvbGVyYW5jZQk9IDAsCisKKwkJLyogTk9URTogdGhpcyBkcml2ZXIgaWdub3JlcyBhbGwgcGFyYW1ldGVycyBidXQgZnJlcXVlbmN5LiAqLworCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ180XzUgfCBGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfNl83IHwKKwkJCUZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ184XzkgfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAorCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCX0sCisKKwkucmVsZWFzZSA9IGpkdmJ0OTA1MDJfcmVsZWFzZSwKKworCS5pbml0ID0gamR2YnQ5MDUwMl9pbml0LAorCS5zbGVlcCA9IGpkdmJ0OTA1MDJfc2xlZXAsCisJLndyaXRlID0gX2pkdmJ0OTA1MDJfd3JpdGUsCisKKwkuc2V0X2Zyb250ZW5kID0gamR2YnQ5MDUwMl9zZXRfZnJvbnRlbmQsCisJLmdldF9mcm9udGVuZCA9IGpkdmJ0OTA1MDJfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyA9IGpkdmJ0OTA1MDJfZ2V0X3R1bmVfc2V0dGluZ3MsCisKKwkucmVhZF9zdGF0dXMgPSBqZHZidDkwNTAyX3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IGpkdmJ0OTA1MDJfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gamR2YnQ5MDUwMl9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgPSBqZHZidDkwNTAyX3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gamR2YnQ5MDUwMl9yZWFkX3VjYmxvY2tzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE2NWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby5jCkBAIC0wLDAgKzEsNTI1IEBACisvKiBEVkIgVVNCIGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZSBGcmlpbyBVU0IyLjAgSVNEQi1UIHJlY2VpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBa2loaXJvIFRzdWthZGEgPHRza2QyQHlhaG9vLmNvLmpwPgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGJhc2VkIG9mZiB0aGUgdGhlIGdsODYxIGFuZCB2cDcwMnggbW9kdWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworI2luY2x1ZGUgImZyaWlvLmgiCisKKy8qIGRlYnVnICovCitpbnQgZHZiX3VzYl9mcmlpb19kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9mcmlpb19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisJCSAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLDI9eGZlciw0PXJjLDg9ZmUgKG9yLWFibGUpKS4iCisJCSBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CisKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCisvKioKKyAqIEluZGlyZWN0IEkyQyBhY2Nlc3MgdG8gdGhlIFBMTCB2aWEgRkUuCisgKiB3aG9sZSBJMkMgcHJvdG9jb2wgZGF0YSB0byB0aGUgUExMIGlzIHNlbnQgdmlhIHRoZSBGRSdzIEkyQyByZWdpc3Rlci4KKyAqIFRoaXMgaXMgZG9uZSBieSBhIGNvbnRyb2wgbXNnIHRvIHRoZSBGRSB3aXRoIHRoZSBJMkMgZGF0YSBhY2NvbXBhbmllZCwgYW5kCisgKiBhIHNwZWNpZmljIFVTQiByZXF1ZXN0IG51bWJlciBpcyBhc3NpZ25lZCBmb3IgdGhhdCBwdXJwb3NlLgorICoKKyAqIHRoaXMgZnVuYyBzZW5kcyB3YnVmWzEuLl0gdG8gdGhlIEkyQyByZWdpc3RlciB3YnVmWzBdIGF0IGFkZHIgKD0gYXQgRkUpLgorICogVE9ETzogcmVmb2N0b3JlZCwgc21hcnRlciBpMmMgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW50IGdsODYxX2kyY19jdHJsbXNnX2RhdGEoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBhZGRyLAorCQkJCSAgdTggKndidWYsIHUxNiB3bGVuLCB1OCAqcmJ1ZiwgdTE2IHJsZW4pCit7CisJdTE2IGluZGV4ID0gd2J1ZlswXTsJLyogbXVzdCBiZSBKRFZCVDkwNTAyXzJORF9JMkNfUkVHKD0weEZFKSAqLworCXUxNiB2YWx1ZSA9IGFkZHIgPDwgKDggKyAxKTsKKwlpbnQgd28gPSAocmJ1ZiA9PSBOVUxMIHx8IHJsZW4gPT0gMCk7CS8qIHdyaXRlIG9ubHkgKi8KKwl1OCByZXEsIHR5cGU7CisKKwlkZWJfeGZlcigid3JpdGUgdG8gUExMOjB4JTAyeCB2aWEgRkUgcmVnOjB4JTAyeCwgbGVuOiVkXG4iLAorCQkgd2J1ZlsxXSwgd2J1ZlswXSwgd2xlbiAtIDEpOworCisJaWYgKHdvICYmIHdsZW4gPj0gMikgeworCQlyZXEgPSBHTDg2MV9SRVFfSTJDX0RBVEFfQ1RSTF9XUklURTsKKwkJdHlwZSA9IEdMODYxX1dSSVRFOworCQl1ZGVsYXkoMjApOworCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkLT51ZGV2LCAwKSwKKwkJCQkgICAgICAgcmVxLCB0eXBlLCB2YWx1ZSwgaW5kZXgsCisJCQkJICAgICAgICZ3YnVmWzFdLCB3bGVuIC0gMSwgMjAwMCk7CisJfQorCisJZGViX3hmZXIoIm5vdCBzdXBwb3J0ZWQgY3RybC1tc2csIGFib3J0aW5nLiIpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKiBub3JtYWwgSTJDIGFjY2VzcyAod2l0aG91dCBleHRyYSBkYXRhIGFyZ3VtZW50cykuCisgKiB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgd2J1ZlswXSBhdCBJMkMgYWRkcmVzcyBhZGRyIHdpdGggdGhlIHZhbHVlIHdidWZbMV0sCisgKiAgb3IgcmVhZCBmcm9tIHRoZSByZWdpc3RlciB3YnVmWzBdLgorICogcmVnaXN0ZXIgYWRkcmVzcyBjYW4gYmUgMTZiaXQgKHdidWZbMl08PDggfCB3YnVmWzBdKSBpZiB3bGVuPT0zCisgKi8KK3N0YXRpYyBpbnQgZ2w4NjFfaTJjX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGFkZHIsCisJCQkgdTggKndidWYsIHUxNiB3bGVuLCB1OCAqcmJ1ZiwgdTE2IHJsZW4pCit7CisJdTE2IGluZGV4OworCXUxNiB2YWx1ZSA9IGFkZHIgPDwgKDggKyAxKTsKKwlpbnQgd28gPSAocmJ1ZiA9PSBOVUxMIHx8IHJsZW4gPT0gMCk7CS8qIHdyaXRlLW9ubHkgKi8KKwl1OCByZXEsIHR5cGU7CisJdW5zaWduZWQgaW50IHBpcGU7CisKKwkvKiBzcGVjaWFsIGNhc2UgZm9yIHRoZSBpbmRpcmVjdCBJMkMgYWNjZXNzIHRvIHRoZSBQTEwgdmlhIEZFLCAqLworCWlmIChhZGRyID09IGZyaWlvX2ZlX2NvbmZpZy5kZW1vZF9hZGRyZXNzICYmCisJICAgIHdidWZbMF0gPT0gSkRWQlQ5MDUwMl8yTkRfSTJDX1JFRykKKwkJcmV0dXJuIGdsODYxX2kyY19jdHJsbXNnX2RhdGEoZCwgYWRkciwgd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7CisKKwlpZiAod28pIHsKKwkJcmVxID0gR0w4NjFfUkVRX0kyQ19XUklURTsKKwkJdHlwZSA9IEdMODYxX1dSSVRFOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApOworCX0gZWxzZSB7CQkvKiBydyAqLworCQlyZXEgPSBHTDg2MV9SRVFfSTJDX1JFQUQ7CisJCXR5cGUgPSBHTDg2MV9SRUFEOworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKGQtPnVkZXYsIDApOworCX0KKworCXN3aXRjaCAod2xlbikgeworCWNhc2UgMToKKwkJaW5kZXggPSB3YnVmWzBdOworCQlicmVhazsKKwljYXNlIDI6CisJCWluZGV4ID0gd2J1ZlswXTsKKwkJdmFsdWUgPSB2YWx1ZSArIHdidWZbMV07CisJCWJyZWFrOworCWNhc2UgMzoKKwkJLyogc3BlY2lhbCBjYXNlIGZvciAxNmJpdCByZWdpc3Rlci1hZGRyZXNzICovCisJCWluZGV4ID0gKHdidWZbMl0gPDwgOCkgfCB3YnVmWzBdOworCQl2YWx1ZSA9IHZhbHVlICsgd2J1ZlsxXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGViX3hmZXIoIndsZW4gPSAleCwgYWJvcnRpbmcuIiwgd2xlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltc2xlZXAoMSk7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCBwaXBlLCByZXEsIHR5cGUsCisJCQkgICAgICAgdmFsdWUsIGluZGV4LCByYnVmLCBybGVuLCAyMDAwKTsKK30KKworLyogSTJDICovCitzdGF0aWMgaW50IGdsODYxX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sCisJCQkgIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgaTsKKworCisJaWYgKG51bSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCS8qIHdyaXRlL3JlYWQgcmVxdWVzdCAqLworCQlpZiAoaSArIDEgPCBudW0gJiYgKG1zZ1tpICsgMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJCWlmIChnbDg2MV9pMmNfbXNnKGQsIG1zZ1tpXS5hZGRyLAorCQkJCQkgIG1zZ1tpXS5idWYsIG1zZ1tpXS5sZW4sCisJCQkJCSAgbXNnW2kgKyAxXS5idWYsIG1zZ1tpICsgMV0ubGVuKSA8IDApCisJCQkJYnJlYWs7CisJCQlpKys7CisJCX0gZWxzZQorCQkJaWYgKGdsODYxX2kyY19tc2coZCwgbXNnW2ldLmFkZHIsIG1zZ1tpXS5idWYsCisJCQkJCSAgbXNnW2ldLmxlbiwgTlVMTCwgMCkgPCAwKQorCQkJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHUzMiBnbDg2MV9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworCitzdGF0aWMgaW50IGZyaWlvX2V4dF9jdGwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwKKwkJCSB1MzIgc2F0X2NvbG9yLCBpbnQgbG5iX29uKQoreworCWludCBpOworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnOworCXU4IGJ1ZlsyXTsKKwl1MzIgbWFzazsKKwl1OCBsbmIgPSAobG5iX29uKSA/IEZSSUlPX0NUTF9MTkIgOiAwOworCisJbXNnLmFkZHIgPSAweDAwOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IDI7CisJbXNnLmJ1ZiA9IGJ1ZjsKKworCWJ1ZlswXSA9IDB4MDA7CisKKwkvKiBzZW5kIDJiaXQgaGVhZGVyICgmQjEwKSAqLworCWJ1ZlsxXSA9IGxuYiB8IEZSSUlPX0NUTF9MRUQgfCBGUklJT19DVExfU1RST0JFOworCXJldCA9IGdsODYxX2kyY194ZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlidWZbMV0gfD0gRlJJSU9fQ1RMX0NMSzsKKwlyZXQgKz0gZ2w4NjFfaTJjX3hmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCisJYnVmWzFdID0gbG5iIHwgRlJJSU9fQ1RMX1NUUk9CRTsKKwlyZXQgKz0gZ2w4NjFfaTJjX3hmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCWJ1ZlsxXSB8PSBGUklJT19DVExfQ0xLOworCXJldCArPSBnbDg2MV9pMmNfeGZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwkvKiBzZW5kIDMyYml0KHNhdHVyLCBSLCBHLCBCKSBkYXRhIGluIHNlcmlhbCAqLworCW1hc2sgPSAxIDw8IDMxOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWJ1ZlsxXSA9IGxuYiB8IEZSSUlPX0NUTF9TVFJPQkU7CisJCWlmIChzYXRfY29sb3IgJiBtYXNrKQorCQkJYnVmWzFdIHw9IEZSSUlPX0NUTF9MRUQ7CisJCXJldCArPSBnbDg2MV9pMmNfeGZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCWJ1ZlsxXSB8PSBGUklJT19DVExfQ0xLOworCQlyZXQgKz0gZ2w4NjFfaTJjX3hmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCQltYXNrID4+PSAxOworCX0KKworCS8qIHNldCB0aGUgc3Ryb2JlIG9mZiAqLworCWJ1ZlsxXSA9IGxuYjsKKwlyZXQgKz0gZ2w4NjFfaTJjX3hmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCWJ1ZlsxXSB8PSBGUklJT19DVExfQ0xLOworCXJldCArPSBnbDg2MV9pMmNfeGZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwlyZXR1cm4gKHJldCA9PSA3MCk7Cit9CisKKworc3RhdGljIGludCBmcmlpb19zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpOworCisvKiBUT0RPOiBtb3ZlIHRoZXNlIGluaXQgY21kcyB0byB0aGUgRkUncyBpbml0IHJvdXRpbmU/ICovCitzdGF0aWMgdTggc3RyZWFtaW5nX2luaXRfY21kc1tdWzJdID0geworCXsweDMzLCAweDA4fSwKKwl7MHgzNywgMHg0MH0sCisJezB4M0EsIDB4MUZ9LAorCXsweDNCLCAweEZGfSwKKwl7MHgzQywgMHgxRn0sCisJezB4M0QsIDB4RkZ9LAorCXsweDM4LCAweDAwfSwKKwl7MHgzNSwgMHgwMH0sCisJezB4MzksIDB4MDB9LAorCXsweDM2LCAweDAwfSwKK307CitzdGF0aWMgaW50IGNtZGxlbiA9IHNpemVvZihzdHJlYW1pbmdfaW5pdF9jbWRzKSAvIDI7CisKKy8qCisgKiBDb21tYW5kIHNlcXVlbmNlIGluIHRoaXMgaW5pdCBmdW5jdGlvbiBpcyBhIHJlcGxheQorICogIG9mIHRoZSBjYXB0dXJlZCBVU0IgY29tbWFuZHMgZnJvbSB0aGUgV2luZG93cyBwcm9wcmlldGFyeSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgZnJpaW9faW5pdGlhbGl6ZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKwlpbnQgcmV0cnkgPSAwOworCXU4IHJidWZbMl07CisJdTggd2J1ZlszXTsKKworCWRlYl9pbmZvKCIlcyBjYWxsZWQuXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiB1c2UgZ2w4NjFfaTJjX21zZyBpbnN0ZWFkIG9mIGdsODYxX2kyY194ZmVyKCksICovCisJLyogYmVjYXVzZSB0aGUgaTJjIGRldmljZSBpcyBub3Qgc2V0IHVwIHlldC4gKi8KKwl3YnVmWzBdID0gMHgxMTsKKwl3YnVmWzFdID0gMHgwMjsKKwlyZXQgPSBnbDg2MV9pMmNfbXNnKGQsIDB4MDAsIHdidWYsIDIsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCW1zbGVlcCgyKTsKKworCXdidWZbMF0gPSAweDExOworCXdidWZbMV0gPSAweDAwOworCXJldCA9IGdsODYxX2kyY19tc2coZCwgMHgwMCwgd2J1ZiwgMiwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisJbXNsZWVwKDEpOworCisJLyogZm9sbG93aW5nIG1zZ3Mgc2hvdWxkIGJlIGluIHRoZSBGRSdzIGluaXQgY29kZT8gKi8KKwkvKiBjbWQgc2VxdWVuY2UgdG8gaWRlbnRpZnkgdGhlIGRldmljZSB0eXBlPyAoZnJpaW8gYmxhY2svd2hpdGUpICovCisJd2J1ZlswXSA9IDB4MDM7CisJd2J1ZlsxXSA9IDB4ODA7CisJLyogY2FuJ3QgdXNlIGdsODYxX2kyY19jbWQsIGFzIHRoZSByZWdpc3Rlci1hZGRyIGlzIDE2Yml0KDB4MDEwMCkgKi8KKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJICAgICAgR0w4NjFfUkVRX0kyQ19EQVRBX0NUUkxfV1JJVEUsIEdMODYxX1dSSVRFLAorCQkJICAgICAgMHgxMjAwLCAweDAxMDAsIHdidWYsIDIsIDIwMDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJbXNsZWVwKDIpOworCXdidWZbMF0gPSAweDAwOworCXdidWZbMl0gPSAweDAxOwkJLyogcmVnLjB4MDEwMCAqLworCXdidWZbMV0gPSAweDAwOworCXJldCA9IGdsODYxX2kyY19tc2coZCwgMHgxMiA+PiAxLCB3YnVmLCAzLCByYnVmLCAyKTsKKwkvKiBteSBGcmlpbyBXaGl0ZSByZXR1cm5zIDB4ZmZmZi4gKi8KKwlpZiAocmV0IDwgMCB8fCByYnVmWzBdICE9IDB4ZmYgfHwgcmJ1ZlsxXSAhPSAweGZmKQorCQlnb3RvIGVycm9yOworCisJbXNsZWVwKDIpOworCXdidWZbMF0gPSAweDAzOworCXdidWZbMV0gPSAweDgwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCksCisJCQkgICAgICBHTDg2MV9SRVFfSTJDX0RBVEFfQ1RSTF9XUklURSwgR0w4NjFfV1JJVEUsCisJCQkgICAgICAweDkwMDAsIDB4MDEwMCwgd2J1ZiwgMiwgMjAwMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwltc2xlZXAoMik7CisJd2J1ZlswXSA9IDB4MDA7CisJd2J1ZlsyXSA9IDB4MDE7CQkvKiByZWcuMHgwMTAwICovCisJd2J1ZlsxXSA9IDB4MDA7CisJcmV0ID0gZ2w4NjFfaTJjX21zZyhkLCAweDkwID4+IDEsIHdidWYsIDMsIHJidWYsIDIpOworCS8qIG15IEZyaWlvIFdoaXRlIHJldHVybnMgMHhmZmZmIGFnYWluLiAqLworCWlmIChyZXQgPCAwIHx8IHJidWZbMF0gIT0gMHhmZiB8fCByYnVmWzFdICE9IDB4ZmYpCisJCWdvdG8gZXJyb3I7CisKKwltc2xlZXAoMSk7CisKK3Jlc3RhcnQ6CisJLyogPT09PT09PT09PT09IHN0YXJ0IERFTU9EIGluaXQgY21kcyA9PT09PT09PT09PT09PT09PT0gKi8KKwkvKiByZWFkIFBMTCBzdGF0dXMgdG8gY2xlYXIgdGhlIFBPUiBiaXQgKi8KKwl3YnVmWzBdID0gSkRWQlQ5MDUwMl8yTkRfSTJDX1JFRzsKKwl3YnVmWzFdID0gKEZSSUlPX1BMTF9BRERSIDw8IDEpICsgMTsJLyogKzEgZm9yIHJlYWRpbmcgKi8KKwlyZXQgPSBnbDg2MV9pMmNfbXNnKGQsIEZSSUlPX0RFTU9EX0FERFIsIHdidWYsIDIsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJbXNsZWVwKDUpOworCS8qIG5vdGU6IERFTU9EVUxBVE9SIGhhcyAxNmJpdCByZWdpc3Rlci1hZGRyZXNzLiAqLworCXdidWZbMF0gPSAweDAwOworCXdidWZbMl0gPSAweDAxOwkJLyogcmVnIGFkZHI6IDB4MDEwMCAqLworCXdidWZbMV0gPSAweDAwOwkJLyogdmFsOiBub3QgdXNlZCAqLworCXJldCA9IGdsODYxX2kyY19tc2coZCwgRlJJSU9fREVNT0RfQUREUiwgd2J1ZiwgMywgcmJ1ZiwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisvKgorCW1zbGVlcCgxKTsKKwl3YnVmWzBdID0gMHg4MDsKKwl3YnVmWzFdID0gMHgwMDsKKwlyZXQgPSBnbDg2MV9pMmNfbXNnKGQsIEZSSUlPX0RFTU9EX0FERFIsIHdidWYsIDIsIHJidWYsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworICovCisJaWYgKHJidWZbMF0gJiAweDgwKSB7CS8qIHN0aWxsIGluIFBvd2VyT25SZXNldCBzdGF0ZT8gKi8KKwkJaWYgKCsrcmV0cnkgPiAzKSB7CisJCQlkZWJfaW5mbygiZmFpbGVkIHRvIGdldCB0aGUgY29ycmVjdCIKKwkJCQkgIiBGRSBkZW1vZCBzdGF0dXM6MHglMDJ4XG4iLCByYnVmWzBdKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJbXNsZWVwKDEwMCk7CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwkvKiBUT0RPOiBjaGVjayByZXR1cm4gdmFsdWUgaW4gcmJ1ZiAqLworCS8qID09PT09PT09PT09IGVuZCBERU1PRCBpbml0IGNtZHMgPT09PT09PT09PT09PT09PT09PT09ICovCisJbXNsZWVwKDEpOworCisJd2J1ZlswXSA9IDB4MzA7CisJd2J1ZlsxXSA9IDB4MDQ7CisJcmV0ID0gZ2w4NjFfaTJjX21zZyhkLCAweDAwLCB3YnVmLCAyLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCW1zbGVlcCgyKTsKKwkvKiBmb2xsb3dpbmcgMiBjbWRzIHVubmVjZXNzYXJ5PyAqLworCXdidWZbMF0gPSAweDAwOworCXdidWZbMV0gPSAweDAxOworCXJldCA9IGdsODYxX2kyY19tc2coZCwgMHgwMCwgd2J1ZiwgMiwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwl3YnVmWzBdID0gMHgwNjsKKwl3YnVmWzFdID0gMHgwRjsKKwlyZXQgPSBnbDg2MV9pMmNfbXNnKGQsIDB4MDAsIHdidWYsIDIsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogc29tZSBzdHJlYW1pbmcgY3RsIGNtZHMgKG1heWJlKSAqLworCW1zbGVlcCgxMCk7CisJZm9yIChpID0gMDsgaSA8IGNtZGxlbjsgaSsrKSB7CisJCXJldCA9IGdsODYxX2kyY19tc2coZCwgMHgwMCwgc3RyZWFtaW5nX2luaXRfY21kc1tpXSwgMiwKKwkJCQkgICAgTlVMTCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJbXNsZWVwKDEpOworCX0KKwltc2xlZXAoMjApOworCisJLyogY2hhbmdlIHRoZSBMRUQgY29sb3IgZXRjLiAqLworCXJldCA9IGZyaWlvX3N0cmVhbWluZ19jdHJsKCZkLT5hZGFwdGVyWzBdLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAwOworCitlcnJvcjoKKwlkZWJfaW5mbygiJXM6cmV0ID09ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyogQ2FsbGJhY2tzIGZvciBEVkIgVVNCICovCisKK3N0YXRpYyBpbnQgZnJpaW9fc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisKKwlkZWJfaW5mbygiJXMgY2FsbGVkLiglZClcbiIsIF9fZnVuY19fLCBvbm9mZik7CisKKwkvKiBzZXQgdGhlIExFRCBjb2xvciBhbmQgc2F0dXJhdGlvbiAoYW5kIExOQiBvbikgKi8KKwlpZiAob25vZmYpCisJCXJldCA9IGZyaWlvX2V4dF9jdGwoYWRhcCwgMHg2NDAwZmY2NCwgMSk7CisJZWxzZQorCQlyZXQgPSBmcmlpb19leHRfY3RsKGFkYXAsIDB4OTZmZjAwZmYsIDEpOworCisJaWYgKHJldCAhPSAxKSB7CisJCWRlYl9pbmZvKCIlcyBmYWlsZWQgdG8gc2VuZCBjbWR4LiByZXQ9PSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZyaWlvX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWlmIChmcmlpb19pbml0aWFsaXplKGFkYXAtPmRldikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWFkYXAtPmZlID0gamR2YnQ5MDUwMl9hdHRhY2goYWRhcC0+ZGV2KTsKKwlpZiAoYWRhcC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogRFZCIFVTQiBEcml2ZXIgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBmcmlpb19wcm9wZXJ0aWVzOworCitzdGF0aWMgaW50IGZyaWlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJaW50IHJldDsKKworCWlmIChpbnRmLT5udW1fYWx0c2V0dGluZyA8IEdMODYxX0FMVFNFVFRJTkdfQ09VTlQpCisJCXJldHVybiAtRU5PREVWOworCisJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIEZSSUlPX0JVTEtfQUxUU0VUVElORyk7CisJaWYgKGFsdCA9PSBOVUxMKSB7CisJCWRlYl9yYygibm90IGFsdCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJCQlhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQlhbHQtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCWlmIChyZXQgIT0gMCkgeworCQlkZWJfcmMoImZhaWxlZCB0byBzZXQgYWx0LXNldHRpbmchXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZmcmlpb19wcm9wZXJ0aWVzLAorCQkJCSAgVEhJU19NT0RVTEUsICZkLCBhZGFwdGVyX25yKTsKKwlpZiAocmV0ID09IDApCisJCWZyaWlvX3N0cmVhbWluZ19jdHJsKCZkLT5hZGFwdGVyWzBdLCAxKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RydWN0IGpkdmJ0OTA1MDJfY29uZmlnIGZyaWlvX2ZlX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IEZSSUlPX0RFTU9EX0FERFIsCisJLnBsbF9hZGRyZXNzID0gRlJJSU9fUExMX0FERFIsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZ2w4NjFfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBnbDg2MV9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGdsODYxX2kyY19mdW5jLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGZyaWlvX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WSURfNzc0LCBVU0JfUElEX0ZSSUlPX1dISVRFKSB9LAorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZnJpaW9fdGFibGUpOworCisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBmcmlpb19wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKwkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCisKKwkuc2l6ZV9vZl9wcml2ID0gMCwKKworCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQkvKiBjYXBzOjAgPT4gIG5vIHBpZCBmaWx0ZXIsIDE4OEIgVFMgcGFja2V0ICovCisJCS8qIEdMODYxIGhhcyBhIEhXIHBpZCBmaWx0ZXIsIGJ1dCBubyBpbmZvIGF2YWlsYWJsZS4gKi8KKwkJeworCQkJLmNhcHMgID0gMCwKKworCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBmcmlpb19mcm9udGVuZF9hdHRhY2gsCisJCQkuc3RyZWFtaW5nX2N0cmwgPSBmcmlpb19zdHJlYW1pbmdfY3RybCwKKworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS8qIGNvdW50IDw9IE1BWF9OT19VUkJTX0ZPUl9EQVRBX1NUUkVBTSgxMCkgKi8KKwkJCQkuY291bnQgPSA4LAorCQkJCS5lbmRwb2ludCA9IDB4MDEsCisJCQkJLnUgPSB7CisJCQkJCS8qIEdMODYxIGhhcyA2S0IgYnVmIGluc2lkZSAqLworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gMTYzODQsCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQl9CisJfSwKKwkuaTJjX2FsZ28gPSAmZ2w4NjFfaTJjX2FsZ28sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsKKwkJCS5uYW1lID0gIjc3NCBGcmlpbyBJU0RCLVQgVVNCMi4wIiwKKwkJCS5jb2xkX2lkcyA9IHsgTlVMTCB9LAorCQkJLndhcm1faWRzID0geyAmZnJpaW9fdGFibGVbMF0sIE5VTEwgfSwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZnJpaW9fZHJpdmVyID0geworCS5uYW1lCQk9ICJkdmJfdXNiX2ZyaWlvIiwKKwkucHJvYmUJCT0gZnJpaW9fcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZQk9IGZyaWlvX3RhYmxlLAorfTsKKworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGZyaWlvX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3RlcigmZnJpaW9fZHJpdmVyKTsKKwlpZiAocmV0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmcmlpb19tb2R1bGVfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgZnJvbSB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZmcmlpb19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChmcmlpb19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChmcmlpb19tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFraWhpcm8gVHN1a2FkYSA8dHNrZDJAeWFob28uY28uanA+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRnJpaW8gSVNEQi1UIFVTQjIuMCBSZWNlaXZlciIpOworTU9EVUxFX1ZFUlNJT04oIjAuMiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGQ1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLmgKQEAgLTAsMCArMSw5OSBAQAorLyogRFZCIFVTQiBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUgRnJpaW8gVVNCMi4wIElTREItVCByZWNlaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWtpaGlybyBUc3VrYWRhIDx0c2tkMkB5YWhvby5jby5qcD4KKyAqCisgKiBUaGlzIG1vZHVsZSBpcyBiYXNlZCBvZmYgdGhlIHRoZSBnbDg2MSBhbmQgdnA3MDJ4IG1vZHVsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKi8KKyNpZm5kZWYgX0RWQl9VU0JfRlJJSU9fSF8KKyNkZWZpbmUgX0RWQl9VU0JfRlJJSU9fSF8KKworLyoqCisgKiAgICAgIEZyaWlvIENvbXBvbmVudHMKKyAqICAgICAgIFVTQiBodWI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVTQyNTQKKyAqICAgICAgICAgVVNCIGNvbnRyb2xsZXIoKyBUUyBkbXggJiBzdHJlYW1pbmcpOiBHTDg2MQorICogICAgICAgICBGcm9udGVuZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXRlY2ggSkRWQlQtOTA1MDIKKyAqICAgICAgICAgICAgICh0dW5lciBQTEw6ICAgICAgICAgICAgICAgICAgICAgICB0dWE2MDM0LCBJMkMgYWRkcjooMHhDMCA+PiAxKSkKKyAqICAgICAgICAgICAgIChPRkRNIGRlbW9kdWxhdG9yOiAgICAgICAgICAgICAgICBUQzkwNTAyLCBJMkMgYWRkcjooMHgzMCA+PiAxKSkKKyAqICAgICAgICAgTEVEIHgzICgrTE5CKSBjb250cm9sbDogICAgICAgICAgICAgICBQSUMgMTZGNjc2CisgKiAgICAgICAgIEVFUFJPTTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjRDMDgKKyAqCisgKiAgICAgICAgKFVTQiBzbWFydCBjYXJkIHJlYWRlcjogICAgICAgICAgICAgICAgQVU5NTIyKQorICoKKyAqLworCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAiZnJpaW8iCisjaW5jbHVkZSAiZHZiLXVzYi5oIgorCitleHRlcm4gaW50IGR2Yl91c2JfZnJpaW9fZGVidWc7CisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9mcmlpb19kZWJ1ZywgMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2ZyaWlvX2RlYnVnLCAweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZnJpaW9fZGVidWcsIDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl9mZShhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9mcmlpb19kZWJ1ZywgMHgwOCwgYXJncykKKworLyogVmVuZG9yIHJlcXVlc3RzICovCisjZGVmaW5lIEdMODYxX1dSSVRFCQkweDQwCisjZGVmaW5lIEdMODYxX1JFQUQJCTB4YzAKKworLyogY29tbWFuZCBieXRlcyAqLworI2RlZmluZSBHTDg2MV9SRVFfSTJDX1dSSVRFCTB4MDEKKyNkZWZpbmUgR0w4NjFfUkVRX0kyQ19SRUFECTB4MDIKKy8qIEZvciBjb250cm9sIG1zZyB3aXRoIGRhdGEgYXJndW1lbnQgKi8KKy8qIFVzZWQgZm9yIGFjY2Vzc2luZyB0aGUgUExMIG9uIHRoZSBzZWNvbmRhcnkgSTJDIGJ1cyBvZiBGRSB2aWEgR0w4NjEgKi8KKyNkZWZpbmUgR0w4NjFfUkVRX0kyQ19EQVRBX0NUUkxfV1JJVEUJMHgwMworCisjZGVmaW5lIEdMODYxX0FMVFNFVFRJTkdfQ09VTlQJMgorI2RlZmluZSBGUklJT19CVUxLX0FMVFNFVFRJTkcJMAorI2RlZmluZSBGUklJT19JU09DX0FMVFNFVFRJTkcJMQorCisvKiBMRUQgJiBMTkIgY29udHJvbCB2aWEgUElDLiAqLworLyogYmFzaWNhbGx5LCBpdCdzIHNlcmlhbCBjb250cm9sIHdpdGggY2xvY2sgYW5kIHN0cm9iZS4gKi8KKy8qIHdyaXRlIHRoZSBiZWxvdyA0Yml0IGNvbnRyb2wgZGF0YSB0byB0aGUgcmVnIDB4MDAgYXQgdGhlIEkyQyBhZGRyIDB4MDAgKi8KKy8qIHdoZW4gY29udHJvbGxpbmcgdGhlIExFRHMsIDMyYml0KHNhdHVyYXRpb24sIFIsIEcsIEIpIGlzIHNlbnQgb24gdGhlIGJpdDMqLworI2RlZmluZSBGUklJT19DVExfTE5CICgxIDw8IDApCisjZGVmaW5lIEZSSUlPX0NUTF9TVFJPQkUgKDEgPDwgMSkKKyNkZWZpbmUgRlJJSU9fQ1RMX0NMSyAoMSA8PCAyKQorI2RlZmluZSBGUklJT19DVExfTEVEICgxIDw8IDMpCisKKy8qIEZyb250IEVuZCByZWxhdGVkICovCisKKyNkZWZpbmUgRlJJSU9fREVNT0RfQUREUiAgKDB4MzAgPj4gMSkKKyNkZWZpbmUgRlJJSU9fUExMX0FERFIgICgweEMwID4+IDEpCisKKyNkZWZpbmUgSkRWQlQ5MDUwMl9QTExfQ0xLCTQwMDAwMDAKKyNkZWZpbmUgSkRWQlQ5MDUwMl9QTExfRElWSURFUgkyOAorCisjZGVmaW5lIEpEVkJUOTA1MDJfMk5EX0kyQ19SRUcgMHhGRQorCisvKiBieXRlIGluZGV4IGZvciBwbGwgaTJjIGNvbW1hbmQgZGF0YSBzdHJ1Y3R1cmUqLworLyogc2VlIGRhdGFzaGVldCBmb3IgdHVhNjAzNCAqLworI2RlZmluZSBERU1PRF9SRURJUkVDVF9SRUcgMAorI2RlZmluZSBBRERSRVNTX0JZVEUgICAgICAgMQorI2RlZmluZSBESVZJREVSX0JZVEUxICAgICAgMgorI2RlZmluZSBESVZJREVSX0JZVEUyICAgICAgMworI2RlZmluZSBDT05UUk9MX0JZVEUgICAgICAgNAorI2RlZmluZSBCQU5EU1dJVENIX0JZVEUgICAgNQorI2RlZmluZSBBR0NfQ1RSTF9CWVRFICAgICAgNQorI2RlZmluZSBQTExfQ01EX0xFTiAgICAgICAgNgorCisvKiBiaXQgbWFza3MgZm9yIFBMTCBTVEFUVVMgcmVzcG9uc2UgKi8KKyNkZWZpbmUgUExMX1NUQVRVU19QT1JfTU9ERSAgIDB4ODAgLyogMTogUG93ZXIgb24gUmVzZXQgKHRlc3QpIE1vZGUgKi8KKyNkZWZpbmUgUExMX1NUQVRVU19MT0NLRUQgICAgIDB4NDAgLyogMTogbG9ja2VkICovCisjZGVmaW5lIFBMTF9TVEFUVVNfQUdDX0FDVElWRSAweDA4IC8qIDE6YWN0aXZlICovCisjZGVmaW5lIFBMTF9TVEFUVVNfVEVTVE1PREUgICAweDA3IC8qIGRpZ2l0YWwgb3V0cHV0IGxldmVsICg1IGxldmVsKSAqLworICAvKiAwLjE1VmNjIHN0ZXAgICAweDAwOiA8IDAuMTVWY2MsIC4uLiwgMHgwNDogPj0gMC42VmNjICg8PSAxVmNjKSAqLworCisKK3N0cnVjdCBqZHZidDkwNTAyX2NvbmZpZyB7CisJdTggZGVtb2RfYWRkcmVzczsgLyogaTJjIGFkZHIgZm9yIGRlbW9kdWxhdG9yIElDICovCisJdTggcGxsX2FkZHJlc3M7ICAgLyogUExMIGFkZHIgb24gdGhlIHNlY29uZGFyeSBpMmMqLworfTsKK2V4dGVybiBzdHJ1Y3QgamR2YnQ5MDUwMl9jb25maWcgZnJpaW9fZmVfY29uZmlnOworCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqamR2YnQ5MDUwMl9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCmluZGV4IGFlYzdhMTkuLmVmOWI3YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKQEAgLTMzNyw2ICszMzcsOCBAQAogCWludCBpLCBwYXNzLCByZXQgPSAwOwogCiAJYnVmZiA9IGttYWxsb2MoNjU1MzYsIEdGUF9LRVJORUwpOworCWlmIChidWZmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKChyZXQgPSBtOTIweF9yZWFkKHVkZXYsIE05MjA2X0ZJTFRFUiwgMHgwLCAweDgwMDAsIHJlYWQsIDQpKSAhPSAwKQogCQlnb3RvIGRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IGI3OTRlODYuLmQ3YzQ4MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC00ODQsNiArNDg0LDE0IEBACiAJICBBTiBJU0RCLVQgRFFQU0ssIFFQU0ssIDE2UUFNIGFuZCA2NFFBTSAxc2VnIHR1bmVyIG1vZHVsZS4KIAkgIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX0RJQjgwMDAKKwl0cmlzdGF0ZSAiRGlCY29tIDgwMDBNQi9NQyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBkcml2ZXIgZm9yIERpQmNvbSdzIERpQjgwMDAgSVNEQi1UL0lTREItVHNiIGRlbW9kdWxhdG9yLgorCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbW1lbnQgIkRpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCmluZGV4IDNiNDlkMzcuLjM1MjM3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19EVkJfRElCMzAwME1DKSArPSBkaWIzMDAwbWMubyBkaWJ4MDAwX2NvbW1vbi5vCiBvYmotJChDT05GSUdfRFZCX0RJQjcwMDBNKSArPSBkaWI3MDAwbS5vIGRpYngwMDBfY29tbW9uLm8KIG9iai0kKENPTkZJR19EVkJfRElCNzAwMFApICs9IGRpYjcwMDBwLm8gZGlieDAwMF9jb21tb24ubworb2JqLSQoQ09ORklHX0RWQl9ESUI4MDAwKSArPSBkaWI4MDAwLm8gZGlieDAwMF9jb21tb24ubwogb2JqLSQoQ09ORklHX0RWQl9NVDMxMikgKz0gbXQzMTIubwogb2JqLSQoQ09ORklHX0RWQl9WRVMxODIwKSArPSB2ZXMxODIwLm8KIG9iai0kKENPTkZJR19EVkJfVkVTMVg5MykgKz0gdmVzMXg5My5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCmluZGV4IDllOWE3NTUuLjc0OTgxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCkBAIC03OTIsNiArNzkyLDExIEBACiAJfQogCiAJZGVtb2RfY29uZmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF1ODUyMl9jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVtb2RfY29uZmlnID09IE5VTEwpIHsKKwkJaWYgKGluc3RhbmNlID09IDEpCisJCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlkZW1vZF9jb25maWctPmRlbW9kX2FkZHJlc3MgPSAweDhlID4+IDE7CiAKIAlzdGF0ZS0+Y29uZmlnID0gZGVtb2RfY29uZmlnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmMKaW5kZXggZGE5MmNiZS4uMmJlMTdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5jCkBAIC0xLDEyICsxLDI5IEBACiAvKgogICogTGludXgtRFZCIERyaXZlciBmb3IgRGlCY29tJ3MgRGlCMDA3MCBiYXNlLWJhbmQgUkYgVHVuZXIuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTcgRGlCY29tIChodHRwOi8vd3d3LmRpYmNvbS5mci8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtOSBEaUJjb20gKGh0dHA6Ly93d3cuZGliY29tLmZyLykKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKgorICogVGhpcyBjb2RlIGlzIG1vcmUgb3IgbGVzcyBnZW5lcmF0ZWQgZnJvbSBhbm90aGVyIGRyaXZlciwgcGxlYXNlCisgKiBleGN1c2Ugc29tZSBjb2RpbmdzdHlsZSBvZGRpdGllcy4KKyAqCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCkBAIC0xOSwyNyArMzYsNjUgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJ0dXJuIG9uIGRlYnVnZ2luZyAoZGVmYXVsdDogMCkiKTsKIAotI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50ayhLRVJOX0RFQlVHICJEaUIwMDcwOiAiKTsgcHJpbnRrKGFyZ3MpOyBwcmludGsoIlxuIik7IH0gfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBkbyB7IFwKKwlpZiAoZGVidWcpIHsgXAorCQlwcmludGsoS0VSTl9ERUJVRyAiRGlCMDA3MDogIik7IFwKKwkJcHJpbnRrKGFyZ3MpOyBcCisJCXByaW50aygiXG4iKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBESUIwMDcwX1AxRCAgMHgwMAogI2RlZmluZSBESUIwMDcwX1AxRiAgMHgwMQogI2RlZmluZSBESUIwMDcwX1AxRyAgMHgwMwogI2RlZmluZSBESUIwMDcwU19QMUEgMHgwMgogCitlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgeworCUNUX1RVTkVSX1NUQVJUID0gMTAsCisJQ1RfVFVORVJfU1RFUF8wLAorCUNUX1RVTkVSX1NURVBfMSwKKwlDVF9UVU5FUl9TVEVQXzIsCisJQ1RfVFVORVJfU1RFUF8zLAorCUNUX1RVTkVSX1NURVBfNCwKKwlDVF9UVU5FUl9TVEVQXzUsCisJQ1RfVFVORVJfU1RFUF82LAorCUNUX1RVTkVSX1NURVBfNywKKwlDVF9UVU5FUl9TVE9QLAorfTsKKworI2RlZmluZSBGRV9DQUxMQkFDS19USU1FX05FVkVSIDB4ZmZmZmZmZmYKKwogc3RydWN0IGRpYjAwNzBfc3RhdGUgewogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwogCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCWNvbnN0IHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnOwogCXUxNiB3YmRfZmZfb2Zmc2V0OwogCXU4IHJldmlzaW9uOworCisJZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHR1bmVfc3RhdGU7CisJdTMyIGN1cnJlbnRfcmY7CisKKwkvKiBmb3IgdGhlIGNhcHRyaW0gYmluYXJ5IHNlYXJjaCAqLworCXM4IHN0ZXA7CisJdTE2IGFkY19kaWZmOworCisJczggY2FwdHJpbTsKKwlzOCBmY2FwdHJpbTsKKwl1MTYgbG80OworCisJY29uc3Qgc3RydWN0IGRpYjAwNzBfdHVuaW5nICpjdXJyZW50X3R1bmVfdGFibGVfaW5kZXg7CisJY29uc3Qgc3RydWN0IGRpYjAwNzBfbG5hX21hdGNoICpsbmFfbWF0Y2g7CisKKwl1OCB3YmRfZ2Fpbl9jdXJyZW50OworCXUxNiB3YmRfb2Zmc2V0XzNfM1syXTsKIH07CiAKIHN0YXRpYyB1aW50MTZfdCBkaWIwMDcwX3JlYWRfcmVnKHN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSwgdTggcmVnKQogewogCXU4IGJbMl07CiAJc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewotCQl7IC5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsICAgICAgICAuYnVmID0gJnJlZywgLmxlbiA9IDEgfSwKLQkJeyAuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIsICAubGVuID0gMiB9LAorCQl7LmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkcmVzcywuZmxhZ3MgPSAwLC5idWYgPSAmcmVnLC5sZW4gPSAxfSwKKwkJey5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHJlc3MsLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGIsLmxlbiA9IDJ9LAogCX07CiAJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpICE9IDIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRGlCMDA3MCBJMkMgcmVhZCBmYWlsZWRcbiIpOwpAQCAtNTEsNyArMTA2LDcgQEAKIHN0YXRpYyBpbnQgZGliMDA3MF93cml0ZV9yZWcoc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHUxNiB2YWwpCiB7CiAJdTggYlszXSA9IHsgcmVnLCB2YWwgPj4gOCwgdmFsICYgMHhmZiB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGIsIC5sZW4gPSAzIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHJlc3MsLmZsYWdzID0gMCwuYnVmID0gYiwubGVuID0gMyB9OwogCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkgIT0gMSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJEaUIwMDcwIEkyQyB3cml0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKQEAgLTU5LDU1ICsxMTQsNzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBIQVJEX1JFU0VUKHN0YXRlKSBkbyB7IGlmIChzdGF0ZS0+Y2ZnLT5yZXNldCkgeyBzdGF0ZS0+Y2ZnLT5yZXNldChzdGF0ZS0+ZmUsMSk7IG1zbGVlcCgxMCk7IHN0YXRlLT5jZmctPnJlc2V0KHN0YXRlLT5mZSwwKTsgbXNsZWVwKDEwKTsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBIQVJEX1JFU0VUKHN0YXRlKSBkbyB7IFwKKyAgICBzdGF0ZS0+Y2ZnLT5zbGVlcChzdGF0ZS0+ZmUsIDApOyBcCisgICAgaWYgKHN0YXRlLT5jZmctPnJlc2V0KSB7IFwKKwlzdGF0ZS0+Y2ZnLT5yZXNldChzdGF0ZS0+ZmUsMSk7IG1zbGVlcCgxMCk7IFwKKwlzdGF0ZS0+Y2ZnLT5yZXNldChzdGF0ZS0+ZmUsMCk7IG1zbGVlcCgxMCk7IFwKKyAgICB9IFwKK30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbnQgZGliMDA3MF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmNoKQogewotCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdCA9IGZlLT50dW5lcl9wcml2OwotCXUxNiB0bXAgPSAwOwotCXRtcCA9IGRpYjAwNzBfcmVhZF9yZWcoc3QsIDB4MDIpICYgMHgzZmZmOworCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXUxNiB0bXAgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDAyKSAmIDB4M2ZmZjsKIAotICAgIHN3aXRjaChCQU5EV0lEVEhfVE9fS0haKGNoLT51Lm9mZG0uYmFuZHdpZHRoKSkgewotCQljYXNlICA4MDAwOgotCQkJdG1wIHw9ICgwIDw8IDE0KTsKLQkJCWJyZWFrOwotCQljYXNlICA3MDAwOgotCQkJdG1wIHw9ICgxIDw8IDE0KTsKLQkJCWJyZWFrOwotCWNhc2UgIDYwMDA6Ci0JCQl0bXAgfD0gKDIgPDwgMTQpOwotCQkJYnJlYWs7Ci0JY2FzZSA1MDAwOgotCQlkZWZhdWx0OgotCQkJdG1wIHw9ICgzIDw8IDE0KTsKLQkJCWJyZWFrOworCWlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwID4gNzAwMCkKKwkJdG1wIHw9ICgwIDw8IDE0KTsKKwllbHNlIGlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwID4gNjAwMCkKKwkJdG1wIHw9ICgxIDw8IDE0KTsKKwllbHNlIGlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwID4gNTAwMCkKKwkJdG1wIHw9ICgyIDw8IDE0KTsKKwllbHNlCisJCXRtcCB8PSAoMyA8PCAxNCk7CisKKwlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwMiwgdG1wKTsKKworCS8qIHNoYXJwZW4gdGhlIEJCIGZpbHRlciBpbiBJU0RCLVQgdG8gaGF2ZSBoaWdoZXIgaW1tdW5pdHkgdG8gYWRqYWNlbnQgY2hhbm5lbHMgKi8KKwlpZiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID09IFNZU19JU0RCVCkgeworCQl1MTYgdmFsdWUgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDE3KTsKKworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgdmFsdWUgJiAweGZmZmMpOworCQl0bXAgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDAxKSAmIDB4MDFmZjsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDEsIHRtcCB8ICg2MCA8PCA5KSk7CisKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTcsIHZhbHVlKTsKIAl9Ci0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MDIsIHRtcCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRpYjAwNzBfY2FwdHJpbShzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3QsIHUxNiBMTzQpCitzdGF0aWMgaW50IGRpYjAwNzBfY2FwdHJpbShzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUsIGVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSAqdHVuZV9zdGF0ZSkKIHsKLQlpbnQ4X3QgY2FwdHJpbSwgZmNhcHRyaW0sIHN0ZXBfc2lnbiwgc3RlcDsKLQl1MTYgYWRjLCBhZGNfZGlmZiA9IDMwMDA7CisJaW50OF90IHN0ZXBfc2lnbjsKKwl1MTYgYWRjOworCWludCByZXQgPSAwOwogCisJaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfMCkgewogCisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDBmLCAweGVkMTApOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgMHgwMDM0KTsKIAotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDBmLCAweGVkMTApOwotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE3LCAgICAweDAwMzQpOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxOCwgMHgwMDMyKTsKKwkJc3RhdGUtPnN0ZXAgPSBzdGF0ZS0+Y2FwdHJpbSA9IHN0YXRlLT5mY2FwdHJpbSA9IDY0OworCQlzdGF0ZS0+YWRjX2RpZmYgPSAzMDAwOworCQlyZXQgPSAyMDsKIAotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE4LCAweDAwMzIpOwotCW1zbGVlcCgyKTsKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzE7CisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzEpIHsKKwkJc3RhdGUtPnN0ZXAgLz0gMjsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTQsIHN0YXRlLT5sbzQgfCBzdGF0ZS0+Y2FwdHJpbSk7CisJCXJldCA9IDE1OwogCi0Jc3RlcCA9IGNhcHRyaW0gPSBmY2FwdHJpbSA9IDY0OworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfMjsKKwl9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfMikgewogCi0JZG8gewotCQlzdGVwIC89IDI7Ci0JCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE0LCBMTzQgfCBjYXB0cmltKTsKLQkJbXNsZWVwKDEpOwotCQlhZGMgPSBkaWIwMDcwX3JlYWRfcmVnKHN0LCAweDE5KTsKKwkJYWRjID0gZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgxOSk7CiAKLQkJZHByaW50ayggIkNBUFRSSU09JWhkOyBBREMgPSAlaGQgKEFEQykgJiAlZG1WIiwgY2FwdHJpbSwgYWRjLCAodTMyKSBhZGMqKHUzMikxODAwLyh1MzIpMTAyNCk7CisJCWRwcmludGsoIkNBUFRSSU09JWhkOyBBREMgPSAlaGQgKEFEQykgJiAlZG1WIiwgc3RhdGUtPmNhcHRyaW0sIGFkYywgKHUzMikgYWRjICogKHUzMikgMTgwMCAvICh1MzIpIDEwMjQpOwogCiAJCWlmIChhZGMgPj0gNDAwKSB7CiAJCQlhZGMgLT0gNDAwOwpAQCAtMTE3LDM3OSArMTg4LDQzMCBAQAogCQkJc3RlcF9zaWduID0gMTsKIAkJfQogCi0JCWlmIChhZGMgPCBhZGNfZGlmZikgewotCQkJZHByaW50ayggIkNBUFRSSU09JWhkIGlzIGNsb3NlciB0byB0YXJnZXQgKCVoZC8laGQpIiwgY2FwdHJpbSwgYWRjLCBhZGNfZGlmZik7Ci0JCQlhZGNfZGlmZiA9IGFkYzsKLQkJCWZjYXB0cmltID0gY2FwdHJpbTsKLQotCisJCWlmIChhZGMgPCBzdGF0ZS0+YWRjX2RpZmYpIHsKKwkJCWRwcmludGsoIkNBUFRSSU09JWhkIGlzIGNsb3NlciB0byB0YXJnZXQgKCVoZC8laGQpIiwgc3RhdGUtPmNhcHRyaW0sIGFkYywgc3RhdGUtPmFkY19kaWZmKTsKKwkJCXN0YXRlLT5hZGNfZGlmZiA9IGFkYzsKKwkJCXN0YXRlLT5mY2FwdHJpbSA9IHN0YXRlLT5jYXB0cmltOwogCiAJCX0KLQkJY2FwdHJpbSArPSAoc3RlcF9zaWduICogc3RlcCk7Ci0JfSB3aGlsZSAoc3RlcCA+PSAxKTsKKwkJc3RhdGUtPmNhcHRyaW0gKz0gKHN0ZXBfc2lnbiAqIHN0YXRlLT5zdGVwKTsKIAotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE0LCBMTzQgfCBmY2FwdHJpbSk7Ci0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTgsIDB4MDdmZik7CisJCWlmIChzdGF0ZS0+c3RlcCA+PSAxKQorCQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzE7CisJCWVsc2UKKwkJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF8zOworCisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzMpIHsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTQsIHN0YXRlLT5sbzQgfCBzdGF0ZS0+ZmNhcHRyaW0pOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxOCwgMHgwN2ZmKTsKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzQ7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBMUEYJMTAwICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbmUgZm9yIHRoZSBsb29wIGZpbHRlciAxMDBrSHogYnkgZGVmYXVsdCAxNi0wNy0wNgotI2RlZmluZSBMTzRfU0VUX1ZDT19IRkRJVihsLCB2LCBoKSAgIGwgfD0gKCh2KSA8PCAxMSkgfCAoKGgpIDw8IDcpCi0jZGVmaW5lIExPNF9TRVRfU0QobCwgcykgICAgICAgICAgICAgbCB8PSAoKHMpIDw8IDE0KSB8ICgocykgPDwgMTIpCi0jZGVmaW5lIExPNF9TRVRfQ1RSSU0obCwgYykgICAgICAgICAgbCB8PSAgKGMpIDw8IDEwCitzdGF0aWMgaW50IGRpYjAwNzBfc2V0X2N0cmxfbG81KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCB2Y29fYmlhc190cmltLCB1OCBoZl9kaXZfdHJpbSwgdTggY3BfY3VycmVudCwgdTggdGhpcmRfb3JkZXJfZmlsdCkKK3sKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MTYgbG81ID0gKHRoaXJkX29yZGVyX2ZpbHQgPDwgMTQpIHwgKDAgPDwgMTMpIHwgKDEgPDwgMTIpIHwgKDMgPDwgOSkgfCAoY3BfY3VycmVudCA8PCA2KSB8IChoZl9kaXZfdHJpbSA8PCAzKSB8ICh2Y29fYmlhc190cmltIDw8IDApOworCWRwcmludGsoIkNUUkxfTE81OiAweCV4IiwgbG81KTsKKwlyZXR1cm4gZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTUsIGxvNSk7Cit9CisKK3ZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG9wZW4pCit7CisJc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwlpZiAob3BlbikgeworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxYiwgMHhmZjAwKTsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWEsIDB4MDAwMCk7CisJfSBlbHNlIHsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWIsIDB4NDExMik7CisJCWlmIChzdGF0ZS0+Y2ZnLT52Z2FfZmlsdGVyICE9IDApIHsKKwkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFhLCBzdGF0ZS0+Y2ZnLT52Z2FfZmlsdGVyKTsKKwkJCWRwcmludGsoInZnYSBmaWx0ZXIgcmVnaXN0ZXIgaXMgc2V0IHRvICV4Iiwgc3RhdGUtPmNmZy0+dmdhX2ZpbHRlcik7CisJCX0gZWxzZQorCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWEsIDB4MDAwOSk7CisJfQorfQorCitFWFBPUlRfU1lNQk9MKGRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyKTsKK3N0cnVjdCBkaWIwMDcwX3R1bmluZyB7CisJdTMyIG1heF9mcmVxOwkJLyogZm9yIGV2ZXJ5IGZyZXF1ZW5jeSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhhdCBmaWVsZDogdGhpcyBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0ICovCisJdTggc3dpdGNoX3RyaW07CisJdTggdmNvX2JhbmQ7CisJdTggaGZkaXY7CisJdTggdmNvX211bHRpOworCXU4IHByZXNjOworCXU4IHdiZG11eDsKKwl1MTYgdHVuZXJfZW5hYmxlOworfTsKKworc3RydWN0IGRpYjAwNzBfbG5hX21hdGNoIHsKKwl1MzIgbWF4X2ZyZXE7CQkvKiBmb3IgZXZlcnkgZnJlcXVlbmN5IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGF0IGZpZWxkOiB0aGlzIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QgKi8KKwl1OCBsbmFfYmFuZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGliMDA3MF90dW5pbmcgZGliMDA3MHNfdHVuaW5nX3RhYmxlW10gPSB7CisJezU3MDAwMCwgMiwgMSwgMywgNiwgNiwgMiwgMHg0MDAwIHwgMHgwODAwfSwJLyogVUhGICovCisJezcwMDAwMCwgMiwgMCwgMiwgNCwgMiwgMiwgMHg0MDAwIHwgMHgwODAwfSwKKwl7ODYzOTk5LCAyLCAxLCAyLCA0LCAyLCAyLCAweDQwMDAgfCAweDA4MDB9LAorCXsxNTAwMDAwLCAwLCAxLCAxLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAkvKiBMQkFORCAqLworCXsxNjAwMDAwLCAwLCAxLCAxLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAorCXsyMDAwMDAwLCAwLCAxLCAxLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAorCXsweGZmZmZmZmZmLCAwLCAwLCA4LCAxLCAyLCAxLCAweDgwMDAgfCAweDEwMDB9LAkvKiBTQkFORCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX3R1bmluZyBkaWIwMDcwX3R1bmluZ190YWJsZVtdID0geworCXsxMTUwMDAsIDEsIDAsIDcsIDI0LCAyLCAxLCAweDgwMDAgfCAweDEwMDB9LAkvKiBGTSBiZWxvdyA5Mk1IeiBjYW5ub3QgYmUgdHVuZWQgKi8KKwl7MTc5NTAwLCAxLCAwLCAzLCAxNiwgMiwgMSwgMHg4MDAwIHwgMHgxMDAwfSwJLyogVkhGICovCisJezE4OTk5OSwgMSwgMSwgMywgMTYsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMH0sCisJezI1MDAwMCwgMSwgMCwgNiwgMTIsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMH0sCisJezU2OTk5OSwgMiwgMSwgNSwgNiwgMiwgMiwgMHg0MDAwIHwgMHgwODAwfSwJLyogVUhGICovCisJezY5OTk5OSwgMiwgMCwgMSwgNCwgMiwgMiwgMHg0MDAwIHwgMHgwODAwfSwKKwl7ODYzOTk5LCAyLCAxLCAxLCA0LCAyLCAyLCAweDQwMDAgfCAweDA4MDB9LAorCXsweGZmZmZmZmZmLCAwLCAxLCAwLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAkvKiBMQkFORCBvciBldmVyeXRoaW5nIGhpZ2hlciB0aGFuIFVIRiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX2xuYV9tYXRjaCBkaWIwMDcwX2xuYV9mbGlwX2NoaXBbXSA9IHsKKwl7MTgwMDAwLCAwfSwJCS8qIFZIRiAqLworCXsxODgwMDAsIDF9LAorCXsxOTY0MDAsIDJ9LAorCXsyNTAwMDAsIDN9LAorCXs1NTAwMDAsIDB9LAkJLyogVUhGICovCisJezU5MDAwMCwgMX0sCisJezY2NjAwMCwgM30sCisJezg2NDAwMCwgNX0sCisJezE1MDAwMDAsIDB9LAkJLyogTEJBTkQgb3IgZXZlcnl0aGluZyBoaWdoZXIgdGhhbiBVSEYgKi8KKwl7MTYwMDAwMCwgMX0sCisJezIwMDAwMDAsIDN9LAorCXsweGZmZmZmZmZmLCA3fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGliMDA3MF9sbmFfbWF0Y2ggZGliMDA3MF9sbmFbXSA9IHsKKwl7MTgwMDAwLCAwfSwJCS8qIFZIRiAqLworCXsxODgwMDAsIDF9LAorCXsxOTY0MDAsIDJ9LAorCXsyNTAwMDAsIDN9LAorCXs1NTAwMDAsIDJ9LAkJLyogVUhGICovCisJezY1MDAwMCwgM30sCisJezc1MDAwMCwgNX0sCisJezg1MDAwMCwgNn0sCisJezg2NDAwMCwgN30sCisJezE1MDAwMDAsIDB9LAkJLyogTEJBTkQgb3IgZXZlcnl0aGluZyBoaWdoZXIgdGhhbiBVSEYgKi8KKwl7MTYwMDAwMCwgMX0sCisJezIwMDAwMDAsIDN9LAorCXsweGZmZmZmZmZmLCA3fSwKK307CisKKyNkZWZpbmUgTFBGCTEwMAkJLy8gZGVmaW5lIGZvciB0aGUgbG9vcCBmaWx0ZXIgMTAwa0h6IGJ5IGRlZmF1bHQgMTYtMDctMDYKIHN0YXRpYyBpbnQgZGliMDA3MF90dW5lX2RpZ2l0YWwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqY2gpCiB7Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0ID0gZmUtPnR1bmVyX3ByaXY7Ci0JdTMyIGZyZXEgPSBjaC0+ZnJlcXVlbmN5LzEwMDAgKyAoQkFORF9PRl9GUkVRVUVOQ1koY2gtPmZyZXF1ZW5jeS8xMDAwKSA9PSBCQU5EX1ZIRiA/IHN0LT5jZmctPmZyZXFfb2Zmc2V0X2toel92aGYgOiBzdC0+Y2ZnLT5mcmVxX29mZnNldF9raHpfdWhmKTsKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKIAotCXU4IGJhbmQgPSBCQU5EX09GX0ZSRVFVRU5DWShmcmVxKSwgYzsKKwljb25zdCBzdHJ1Y3QgZGliMDA3MF90dW5pbmcgKnR1bmU7CisJY29uc3Qgc3RydWN0IGRpYjAwNzBfbG5hX21hdGNoICpsbmFfbWF0Y2g7CiAKLQkvKioqKioqKioqKioqKioqKioqKlZDTyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXUxNiBsbzQgPSAwOworCWVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSAqdHVuZV9zdGF0ZSA9ICZzdGF0ZS0+dHVuZV9zdGF0ZTsKKwlpbnQgcmV0ID0gMTA7CQkvKiAxbXMgaXMgdGhlIGRlZmF1bHQgZGVsYXkgbW9zdCBvZiB0aGUgdGltZSAqLwogCi0JdTggUkVGRElWLCBQUkVTQyA9IDI7Ci0JdTMyIEZCRGl2LCBSZXN0LCBGUkVGLCBWQ09GX2tIejsKLQl1MTYgTnVtLCBEZW47Ci0JLyoqKioqKioqKioqKioqKioqKipGcm9udEVuZCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQl1MTYgdmFsdWUgPSAwOworCXU4IGJhbmQgPSAodTgpIEJBTkRfT0ZfRlJFUVVFTkNZKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5IC8gMTAwMCk7CisJdTMyIGZyZXEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeSAvIDEwMDAgKyAoYmFuZCA9PSBCQU5EX1ZIRiA/IHN0YXRlLT5jZmctPmZyZXFfb2Zmc2V0X2toel92aGYgOiBzdGF0ZS0+Y2ZnLT5mcmVxX29mZnNldF9raHpfdWhmKTsKIAotCWRwcmludGsoICJUdW5pbmcgZm9yIEJhbmQ6ICVoZCAoJWQga0h6KSIsIGJhbmQsIGZyZXEpOworI2lmZGVmIENPTkZJR19TWVNfSVNEQlQKKwlpZiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID09IFNZU19JU0RCVCAmJiBzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpCisJCWlmICgoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgJSAyKQorCQkgICAgICYmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2lkeCA9PSAoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgLyAyKSArIDEpKSkKKwkJICAgIHx8ICgoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgJSAyKSA9PSAwKQorCQkJJiYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09IChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50IC8gMikpKQorCQkgICAgfHwgKCgoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpID09IDApCisJCQkmJiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggPT0gKChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50IC8gMikgKyAxKSkpKQorCQkJZnJlcSArPSA4NTA7CisjZW5kaWYKKwlpZiAoc3RhdGUtPmN1cnJlbnRfcmYgIT0gZnJlcSkgewogCi0KLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxNywgMHgzMCk7Ci0KLQlkaWIwMDcwX3NldF9iYW5kd2lkdGgoZmUsIGNoKTsJLyogYyBpcyB1c2VkIGFzIEhGICovCi0Jc3dpdGNoIChzdC0+cmV2aXNpb24pIHsKKwkJc3dpdGNoIChzdGF0ZS0+cmV2aXNpb24pIHsKIAkJY2FzZSBESUIwMDcwU19QMUE6Ci0JCQlzd2l0Y2ggKGJhbmQpIHsKLQkJCQljYXNlIEJBTkRfTEJBTkQ6Ci0JCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMSwgMSk7Ci0JCQkJCWMgPSAyOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEJBTkRfU0JBTkQ6Ci0JCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMCwgMCk7Ci0JCQkJCUxPNF9TRVRfQ1RSSU0obG80LCAxKTsKLQkJCQkJYyA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQkFORF9VSEY6Ci0JCQkJZGVmYXVsdDoKLQkJCQkJaWYgKGZyZXEgPCA1NzAwMDApIHsKLQkJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMSwgMyk7Ci0JCQkJCQlQUkVTQyA9IDY7IGMgPSA2OwotCQkJCQl9IGVsc2UgaWYgKGZyZXEgPCA2ODAwMDApIHsKLQkJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMCwgMik7Ci0JCQkJCQljID0gNDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMSwgMik7Ci0JCQkJCQljID0gNDsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCX0gYnJlYWs7Ci0KLQkJY2FzZSBESUIwMDcwX1AxRzoKLQkJY2FzZSBESUIwMDcwX1AxRjoKKwkJCXR1bmUgPSBkaWIwMDcwc190dW5pbmdfdGFibGU7CisJCQlsbmFfbWF0Y2ggPSBkaWIwMDcwX2xuYTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc3dpdGNoIChiYW5kKSB7Ci0JCQkJY2FzZSBCQU5EX0ZNOgotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAwLCA3KTsKLQkJCQkJCWMgPSAyNDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBCQU5EX0xCQU5EOgotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAxLCAwKTsKLQkJCQkJCWMgPSAyOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEJBTkRfVkhGOgotCQkJCQlpZiAoZnJlcSA8IDE4MDAwMCkgewotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAwLCAzKTsKLQkJCQkJCWMgPSAxNjsKLQkJCQkJfSBlbHNlIGlmIChmcmVxIDwgMTkwMDAwKSB7Ci0JCQkJCQlMTzRfU0VUX1ZDT19IRkRJVihsbzQsIDEsIDMpOwotCQkJCQkJYyA9IDE2OwotCQkJCQl9IGVsc2UgewotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAwLCA2KTsKLQkJCQkJCWMgPSAxMjsKLQkJCQkJfQotCQkJCQlicmVhazsKKwkJCXR1bmUgPSBkaWIwMDcwX3R1bmluZ190YWJsZTsKKwkJCWlmIChzdGF0ZS0+Y2ZnLT5mbGlwX2NoaXApCisJCQkJbG5hX21hdGNoID0gZGliMDA3MF9sbmFfZmxpcF9jaGlwOworCQkJZWxzZQorCQkJCWxuYV9tYXRjaCA9IGRpYjAwNzBfbG5hOworCQkJYnJlYWs7CisJCX0KKwkJd2hpbGUgKGZyZXEgPiB0dW5lLT5tYXhfZnJlcSkJLyogZmluZCB0aGUgcmlnaHQgb25lICovCisJCQl0dW5lKys7CisJCXdoaWxlIChmcmVxID4gbG5hX21hdGNoLT5tYXhfZnJlcSkJLyogZmluZCB0aGUgcmlnaHQgb25lICovCisJCQlsbmFfbWF0Y2grKzsKIAotCQkJCWNhc2UgQkFORF9VSEY6Ci0JCQkJZGVmYXVsdDoKLQkJCQkJaWYgKGZyZXEgPCA1NzAwMDApIHsKLQkJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMSwgNSk7Ci0JCQkJCQljID0gNjsKLQkJCQkJfSBlbHNlIGlmIChmcmVxIDwgNzAwMDAwKSB7Ci0JCQkJCQlMTzRfU0VUX1ZDT19IRkRJVihsbzQsIDAsIDEpOwotCQkJCQkJYyA9IDQ7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlMTzRfU0VUX1ZDT19IRkRJVihsbzQsIDEsIDEpOwotCQkJCQkJYyA9IDQ7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7CisJCXN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXggPSB0dW5lOworCQlzdGF0ZS0+bG5hX21hdGNoID0gbG5hX21hdGNoOworCX0KKworCWlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEFSVCkgeworCQlkcHJpbnRrKCJUdW5pbmcgZm9yIEJhbmQ6ICVoZCAoJWQga0h6KSIsIGJhbmQsIGZyZXEpOworCQlpZiAoc3RhdGUtPmN1cnJlbnRfcmYgIT0gZnJlcSkgeworCQkJdTggUkVGRElWOworCQkJdTMyIEZCRGl2LCBSZXN0LCBGUkVGLCBWQ09GX2tIejsKKwkJCXU4IERlbjsKKworCQkJc3RhdGUtPmN1cnJlbnRfcmYgPSBmcmVxOworCQkJc3RhdGUtPmxvNCA9IChzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT52Y29fYmFuZCA8PCAxMSkgfCAoc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+aGZkaXYgPDwgNyk7CisKKwkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE3LCAweDMwKTsKKworCQkJVkNPRl9rSHogPSBzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT52Y29fbXVsdGkgKiBmcmVxICogMjsKKworCQkJc3dpdGNoIChiYW5kKSB7CisJCQljYXNlIEJBTkRfVkhGOgorCQkJCVJFRkRJViA9ICh1OCkgKChzdGF0ZS0+Y2ZnLT5jbG9ja19raHogKyA5OTk5KSAvIDEwMDAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkFORF9GTToKKwkJCQlSRUZESVYgPSAodTgpICgoc3RhdGUtPmNmZy0+Y2xvY2tfa2h6KSAvIDEwMDApOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlSRUZESVYgPSAodTgpIChzdGF0ZS0+Y2ZnLT5jbG9ja19raHogLyAxMDAwMCk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCWJyZWFrOworCQkJRlJFRiA9IHN0YXRlLT5jZmctPmNsb2NrX2toeiAvIFJFRkRJVjsKKworCQkJc3dpdGNoIChzdGF0ZS0+cmV2aXNpb24pIHsKKwkJCWNhc2UgRElCMDA3MFNfUDFBOgorCQkJCUZCRGl2ID0gKFZDT0Zfa0h6IC8gc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+cHJlc2MgLyBGUkVGKTsKKwkJCQlSZXN0ID0gKFZDT0Zfa0h6IC8gc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+cHJlc2MpIC0gRkJEaXYgKiBGUkVGOworCQkJCWJyZWFrOworCisJCQljYXNlIERJQjAwNzBfUDFHOgorCQkJY2FzZSBESUIwMDcwX1AxRjoKKwkJCWRlZmF1bHQ6CisJCQkJRkJEaXYgPSAoZnJlcSAvIChGUkVGIC8gMikpOworCQkJCVJlc3QgPSAyICogZnJlcSAtIEZCRGl2ICogRlJFRjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKFJlc3QgPCBMUEYpCisJCQkJUmVzdCA9IDA7CisJCQllbHNlIGlmIChSZXN0IDwgMiAqIExQRikKKwkJCQlSZXN0ID0gMiAqIExQRjsKKwkJCWVsc2UgaWYgKFJlc3QgPiAoRlJFRiAtIExQRikpIHsKKwkJCQlSZXN0ID0gMDsKKwkJCQlGQkRpdiArPSAxOworCQkJfSBlbHNlIGlmIChSZXN0ID4gKEZSRUYgLSAyICogTFBGKSkKKwkJCQlSZXN0ID0gRlJFRiAtIDIgKiBMUEY7CisJCQlSZXN0ID0gKFJlc3QgKiA2NTI4KSAvIChGUkVGIC8gMTApOworCisJCQlEZW4gPSAxOworCQkJaWYgKFJlc3QgPiAwKSB7CisJCQkJc3RhdGUtPmxvNCB8PSAoMSA8PCAxNCkgfCAoMSA8PCAxMik7CisJCQkJRGVuID0gMjU1OworCQkJfQorCisJCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxMSwgKHUxNikgRkJEaXYpOworCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTIsIChEZW4gPDwgOCkgfCBSRUZESVYpOworCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTMsICh1MTYpIFJlc3QpOworCisJCQlpZiAoc3RhdGUtPnJldmlzaW9uID09IERJQjAwNzBTX1AxQSkgeworCisJCQkJaWYgKGJhbmQgPT0gQkFORF9TQkFORCkgeworCQkJCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgMiwgNCwgMywgMCk7CisJCQkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFkLCAweEZGRkYpOworCQkJCX0gZWxzZQorCQkJCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgNSwgNCwgMywgMSk7CisJCQl9CisKKwkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDIwLAorCQkJCQkgIDB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSB8IHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnR1bmVyX2VuYWJsZSk7CisKKwkJCWRwcmludGsoIlJFRkRJVjogJWhkLCBGUkVGOiAlZCIsIFJFRkRJViwgRlJFRik7CisJCQlkcHJpbnRrKCJGQkRJVjogJWQsIFJlc3Q6ICVkIiwgRkJEaXYsIFJlc3QpOworCQkJZHByaW50aygiTnVtOiAlaGQsIERlbjogJWhkLCBTRDogJWhkIiwgKHUxNikgUmVzdCwgRGVuLCAoc3RhdGUtPmxvNCA+PiAxMikgJiAweDEpOworCQkJZHByaW50aygiSEZESVYgY29kZTogJWhkIiwgc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+aGZkaXYpOworCQkJZHByaW50aygiVkNPID0gJWhkIiwgc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+dmNvX2JhbmQpOworCQkJZHByaW50aygiVkNPRjogKCglaGQqJWQpIDw8IDEpKSIsIHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnZjb19tdWx0aSwgZnJlcSk7CisKKwkJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF8wOworCQl9IGVsc2UgewkvKiB3ZSBhcmUgYWxyZWFkeSB0dW5lZCB0byB0aGlzIGZyZXF1ZW5jeSAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3QgICovCisJCQlyZXQgPSA1MDsJLyogd2FrZXVwIHRpbWUgKi8KKwkJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF81OworCQl9CisJfSBlbHNlIGlmICgoKnR1bmVfc3RhdGUgPiBDVF9UVU5FUl9TVEFSVCkgJiYgKCp0dW5lX3N0YXRlIDwgQ1RfVFVORVJfU1RFUF80KSkgeworCisJCXJldCA9IGRpYjAwNzBfY2FwdHJpbShzdGF0ZSwgdHVuZV9zdGF0ZSk7CisKKwl9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfNCkgeworCQljb25zdCBzdHJ1Y3QgZGliMDA3MF93YmRfZ2Fpbl9jZmcgKnRtcCA9IHN0YXRlLT5jZmctPndiZF9nYWluOworCQlpZiAodG1wICE9IE5VTEwpIHsKKwkJCXdoaWxlIChmcmVxIC8gMTAwMCA+IHRtcC0+ZnJlcSkJLyogZmluZCB0aGUgcmlnaHQgb25lICovCisJCQkJdG1wKys7CisJCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZiwKKwkJCQkJICAoMCA8PCAxNSkgfCAoMSA8PCAxNCkgfCAoMyA8PCAxMikgfCAodG1wLT53YmRfZ2Fpbl92YWwgPDwgOSkgfCAoMCA8PCA4KSB8ICgxIDw8IDcpIHwgKHN0YXRlLT4KKwkJCQkJCQkJCQkJCQkJCQljdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPgorCQkJCQkJCQkJCQkJCQkJCXdiZG11eCA8PCAwKSk7CisJCQlzdGF0ZS0+d2JkX2dhaW5fY3VycmVudCA9IHRtcC0+d2JkX2dhaW5fdmFsOworCQl9IGVsc2UgeworCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MGYsCisJCQkJCSAgKDAgPDwgMTUpIHwgKDEgPDwgMTQpIHwgKDMgPDwgMTIpIHwgKDYgPDwgOSkgfCAoMCA8PCA4KSB8ICgxIDw8IDcpIHwgKHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPgorCQkJCQkJCQkJCQkJCQl3YmRtdXggPDwgMCkpOworCQkJc3RhdGUtPndiZF9nYWluX2N1cnJlbnQgPSA2OworCQl9CisKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDYsIDB4M2ZmZik7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDA3LAorCQkJCSAgKHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnN3aXRjaF90cmltIDw8IDExKSB8ICg3IDw8IDgpIHwgKHN0YXRlLT5sbmFfbWF0Y2gtPmxuYV9iYW5kIDw8IDMpIHwgKDMgPDwgMCkpOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwOCwgKHN0YXRlLT5sbmFfbWF0Y2gtPmxuYV9iYW5kIDw8IDEwKSB8ICgzIDw8IDcpIHwgKDEyNykpOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZCwgMHgwZDgwKTsKKworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxOCwgMHgwN2ZmKTsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTcsIDB4MDAzMyk7CisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzU7CisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzUpIHsKKwkJZGliMDA3MF9zZXRfYmFuZHdpZHRoKGZlLCBjaCk7CisJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RPUDsKKwl9IGVsc2UgeworCQlyZXQgPSBGRV9DQUxMQkFDS19USU1FX05FVkVSOwkvKiB0dW5lciBmaW5pc2hlZCwgdGltZSB0byBjYWxsIGFnYWluIGluZmluaXRlICovCiAJfQorCXJldHVybiByZXQ7Cit9CiAKLQlkcHJpbnRrKCAiSEZESVYgY29kZTogJWhkIiwgKGxvNCA+PiA3KSAmIDB4Zik7Ci0JZHByaW50ayggIlZDTyA9ICVoZCIsIChsbzQgPj4gMTEpICYgMHgzKTsKK3N0YXRpYyBpbnQgZGliMDA3MF90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJdWludDMyX3QgcmV0OwogCisJc3RhdGUtPnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEFSVDsKIAotCVZDT0Zfa0h6ID0gKGMgKiBmcmVxKSAqIDI7Ci0JZHByaW50ayggIlZDT0YgaW4ga0h6OiAlZCAoKCVoZColZCkgPDwgMSkpIixWQ09GX2tIeiwgYywgZnJlcSk7Ci0KLQlzd2l0Y2ggKGJhbmQpIHsKLQkJY2FzZSBCQU5EX1ZIRjoKLQkJCVJFRkRJViA9ICh1OCkgKChzdC0+Y2ZnLT5jbG9ja19raHogKyA5OTk5KSAvIDEwMDAwKTsKLQkJCWJyZWFrOwotCQljYXNlIEJBTkRfRk06Ci0JCQlSRUZESVYgPSAodTgpICgoc3QtPmNmZy0+Y2xvY2tfa2h6KSAvIDEwMDApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlSRUZESVYgPSAodTgpICggc3QtPmNmZy0+Y2xvY2tfa2h6ICAvIDEwMDAwKTsKLQkJCWJyZWFrOwotCX0KLQlGUkVGID0gc3QtPmNmZy0+Y2xvY2tfa2h6IC8gUkVGRElWOwotCi0JZHByaW50ayggIlJFRkRJVjogJWhkLCBGUkVGOiAlZCIsIFJFRkRJViwgRlJFRik7Ci0KLQotCi0Jc3dpdGNoIChzdC0+cmV2aXNpb24pIHsKLQkJY2FzZSBESUIwMDcwU19QMUE6Ci0JCQlGQkRpdiA9IChWQ09GX2tIeiAvIFBSRVNDIC8gRlJFRik7Ci0JCQlSZXN0ICA9IChWQ09GX2tIeiAvIFBSRVNDKSAtIEZCRGl2ICogRlJFRjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRElCMDA3MF9QMUc6Ci0JCWNhc2UgRElCMDA3MF9QMUY6Ci0JCWRlZmF1bHQ6Ci0JCQlGQkRpdiA9IChmcmVxIC8gKEZSRUYgLyAyKSk7Ci0JCQlSZXN0ICA9IDIgKiBmcmVxIC0gRkJEaXYgKiBGUkVGOwotCQkJYnJlYWs7Ci0JfQotCi0KLQkgICAgIGlmIChSZXN0IDwgTFBGKSAgICAgICAgICAgICAgUmVzdCA9IDA7Ci0JZWxzZSBpZiAoUmVzdCA8IDIgKiBMUEYpICAgICAgICAgIFJlc3QgPSAyICogTFBGOwotCWVsc2UgaWYgKFJlc3QgPiAoRlJFRiAtIExQRikpICAgeyBSZXN0ID0gMCA7IEZCRGl2ICs9IDE7IH0KLQllbHNlIGlmIChSZXN0ID4gKEZSRUYgLSAyICogTFBGKSkgUmVzdCA9IEZSRUYgLSAyICogTFBGOwotCVJlc3QgPSAoUmVzdCAqIDY1MjgpIC8gKEZSRUYgLyAxMCk7Ci0JZHByaW50ayggIkZCRElWOiAlZCwgUmVzdDogJWQiLCBGQkRpdiwgUmVzdCk7Ci0KLQlOdW0gPSAwOwotCURlbiA9IDE7Ci0KLQlpZiAoUmVzdCA+IDApIHsKLQkJTE80X1NFVF9TRChsbzQsIDEpOwotCQlEZW4gPSAyNTU7Ci0JCU51bSA9ICh1MTYpUmVzdDsKLQl9Ci0JZHByaW50ayggIk51bTogJWhkLCBEZW46ICVoZCwgU0Q6ICVoZCIsTnVtLCBEZW4sIChsbzQgPj4gMTIpICYgMHgxKTsKLQotCi0KLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxMSwgKHUxNilGQkRpdik7Ci0KLQotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDEyLCAoRGVuIDw8IDgpIHwgUkVGRElWKTsKLQotCi0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTMsIE51bSk7Ci0KLQotCXZhbHVlID0gMHgwMDQwIHwgMHgwMDIwIHwgMHgwMDEwIHwgMHgwMDA4IHwgMHgwMDAyIHwgMHgwMDAxOwotCi0Jc3dpdGNoIChiYW5kKSB7Ci0JCWNhc2UgQkFORF9VSEY6ICAgdmFsdWUgfD0gMHg0MDAwIHwgMHgwODAwOyBicmVhazsKLQkJY2FzZSBCQU5EX0xCQU5EOiB2YWx1ZSB8PSAweDIwMDAgfCAweDA0MDA7IGJyZWFrOwotCQlkZWZhdWx0OiAgICAgICAgIHZhbHVlIHw9IDB4ODAwMCB8IDB4MTAwMDsgYnJlYWs7Ci0JfQotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDIwLCB2YWx1ZSk7Ci0KLQlkaWIwMDcwX2NhcHRyaW0oc3QsIGxvNCk7Ci0JaWYgKHN0LT5yZXZpc2lvbiA9PSBESUIwMDcwU19QMUEpIHsKLQkJaWYgKGJhbmQgPT0gQkFORF9TQkFORCkKLQkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE1LCAweDE2ZTIpOworCWRvIHsKKwkJcmV0ID0gZGliMDA3MF90dW5lX2RpZ2l0YWwoZmUsIHApOworCQlpZiAocmV0ICE9IEZFX0NBTExCQUNLX1RJTUVfTkVWRVIpCisJCQltc2xlZXAocmV0IC8gMTApOwogCQllbHNlCi0JCQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxNSwgMHg1NmU1KTsKLQl9Ci0KLQotCi0Jc3dpdGNoIChiYW5kKSB7Ci0JCWNhc2UgQkFORF9VSEY6ICAgdmFsdWUgPSAweDdjODI7IGJyZWFrOwotCQljYXNlIEJBTkRfTEJBTkQ6IHZhbHVlID0gMHg3Yzg0OyBicmVhazsKLQkJZGVmYXVsdDogICAgICAgICB2YWx1ZSA9IDB4N2M4MTsgYnJlYWs7Ci0JfQotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDBmLCB2YWx1ZSk7Ci0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MDYsIDB4M2ZmZik7Ci0KLQkvKiBGcm9udCBFbmQgKi8KLQkvKiBjID09IFRVTkUsIHZhbHVlID0gU1dJVENIICovCi0JYyA9IDA7Ci0JdmFsdWUgPSAwOwotCXN3aXRjaCAoYmFuZCkgewotCQljYXNlIEJBTkRfRk06Ci0JCQljID0gMDsgdmFsdWUgPSAxOwotCQlicmVhazsKLQotCQljYXNlIEJBTkRfVkhGOgotCQkJaWYgKGZyZXEgPD0gMTgwMDAwKSBjID0gMDsKLQkJCWVsc2UgaWYgKGZyZXEgPD0gMTg4MjAwKSBjID0gMTsKLQkJCWVsc2UgaWYgKGZyZXEgPD0gMTk2NDAwKSBjID0gMjsKLQkJCWVsc2UgYyA9IDM7Ci0JCQl2YWx1ZSA9IDE7Ci0JCWJyZWFrOwotCi0JCWNhc2UgQkFORF9MQkFORDoKLQkJCWlmIChmcmVxIDw9IDE1MDAwMDApIGMgPSAwOwotCQkJZWxzZSBpZiAoZnJlcSA8PSAxNjAwMDAwKSBjID0gMTsKLQkJCWVsc2UgYyA9IDM7Ci0JCWJyZWFrOwotCi0JCWNhc2UgQkFORF9TQkFORDoKLQkJCWMgPSA3OwotCQkJZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MWQsMHhGRkZGKTsKLQkJYnJlYWs7Ci0KLQkJY2FzZSBCQU5EX1VIRjoKLQkJZGVmYXVsdDoKLQkJCWlmIChzdC0+Y2ZnLT5mbGlwX2NoaXApIHsKLQkJCQlpZiAoZnJlcSA8PSA1NTAwMDApIGMgPSAwOwotCQkJCWVsc2UgaWYgKGZyZXEgPD0gNTkwMDAwKSBjID0gMTsKLQkJCQllbHNlIGlmIChmcmVxIDw9IDY2NjAwMCkgYyA9IDM7Ci0JCQkJZWxzZSBjID0gNTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGZyZXEgPD0gNTUwMDAwKSBjID0gMjsKLQkJCQllbHNlIGlmIChmcmVxIDw9IDY1MDAwMCkgYyA9IDM7Ci0JCQkJZWxzZSBpZiAoZnJlcSA8PSA3NTAwMDApIGMgPSA1OwotCQkJCWVsc2UgaWYgKGZyZXEgPD0gODUwMDAwKSBjID0gNjsKLQkJCQllbHNlIGMgPSA3OwotCQkJfQotCQkJdmFsdWUgPSAyOwotCQlicmVhazsKLQl9Ci0KLQkvKiBkZWZhdWx0OiBMTkFfTUFUQ0g9NywgQklBUz0zICovCi0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MDcsICh2YWx1ZSA8PCAxMSkgfCAoNyA8PCA4KSB8IChjIDw8IDMpIHwgKDMgPDwgMCkpOwotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDA4LCAoYyA8PCAxMCkgfCAoMyA8PCA3KSB8ICgxMjcpKTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgwZCwgMHgwZDgwKTsKLQotCi0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTgsICAgMHgwN2ZmKTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxNywgMHgwMDMzKTsKKwkJCWJyZWFrOworCX0gd2hpbGUgKHN0YXRlLT50dW5lX3N0YXRlICE9IENUX1RVTkVSX1NUT1ApOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGliMDA3MF93YWtldXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0ID0gZmUtPnR1bmVyX3ByaXY7Ci0JaWYgKHN0LT5jZmctPnNsZWVwKQotCQlzdC0+Y2ZnLT5zbGVlcChmZSwgMCk7CisJc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaWYgKHN0YXRlLT5jZmctPnNsZWVwKQorCQlzdGF0ZS0+Y2ZnLT5zbGVlcChmZSwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGliMDA3MF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3QgPSBmZS0+dHVuZXJfcHJpdjsKLQlpZiAoc3QtPmNmZy0+c2xlZXApCi0JCXN0LT5jZmctPnNsZWVwKGZlLCAxKTsKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpZiAoc3RhdGUtPmNmZy0+c2xlZXApCisJCXN0YXRlLT5jZmctPnNsZWVwKGZlLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNiBkaWIwMDcwX3AxZl9kZWZhdWx0c1tdID0KLQoteworc3RhdGljIGNvbnN0IHUxNiBkaWIwMDcwX3AxZl9kZWZhdWx0c1tdID0gewogCTcsIDB4MDIsCi0JCTB4MDAwOCwKLQkJMHgwMDAwLAotCQkweDAwMDAsCi0JCTB4MDAwMCwKLQkJMHgwMDAwLAotCQkweDAwMDIsCi0JCTB4MDEwMCwKKwkweDAwMDgsCisJMHgwMDAwLAorCTB4MDAwMCwKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDAwMiwKKwkweDAxMDAsCiAKIAkzLCAweDBkLAotCQkweDBkODAsCi0JCTB4MDAwMSwKLQkJMHgwMDAwLAorCTB4MGQ4MCwKKwkweDAwMDEsCisJMHgwMDAwLAogCiAJNCwgMHgxMSwKLQkJMHgwMDAwLAotCQkweDAxMDMsCi0JCTB4MDAwMCwKLQkJMHgwMDAwLAorCTB4MDAwMCwKKwkweDAxMDMsCisJMHgwMDAwLAorCTB4MDAwMCwKIAogCTMsIDB4MTYsCi0JCTB4MDAwNCB8IDB4MDA0MCwKLQkJMHgwMDMwLAotCQkweDA3ZmYsCisJMHgwMDA0IHwgMHgwMDQwLAorCTB4MDAzMCwKKwkweDA3ZmYsCiAKIAk2LCAweDFiLAotCQkweDQxMTIsCi0JCTB4ZmYwMCwKLQkJMHhjMDdmLAotCQkweDAwMDAsCi0JCTB4MDE4MCwKLQkJMHg0MDAwIHwgMHgwODAwIHwgMHgwMDQwIHwgMHgwMDIwIHwgMHgwMDEwIHwgMHgwMDA4IHwgMHgwMDAyIHwgMHgwMDAxLAorCTB4NDExMiwKKwkweGZmMDAsCisJMHhjMDdmLAorCTB4MDAwMCwKKwkweDAxODAsCisJMHg0MDAwIHwgMHgwODAwIHwgMHgwMDQwIHwgMHgwMDIwIHwgMHgwMDEwIHwgMHgwMDA4IHwgMHgwMDAyIHwgMHgwMDAxLAogCiAJMCwKIH07CiAKLXN0YXRpYyB2b2lkIGRpYjAwNzBfd2JkX2NhbGlicmF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQorc3RhdGljIHUxNiBkaWIwMDcwX3JlYWRfd2JkX29mZnNldChzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUsIHU4IGdhaW4pCiB7Ci0JdTE2IHdiZF9vZmZzOwotCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXUxNiB0dW5lcl9lbiA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MjApOworCXUxNiBvZmZzZXQ7CiAKLQlpZiAoc3RhdGUtPmNmZy0+c2xlZXApCi0JCXN0YXRlLT5jZmctPnNsZWVwKGZlLCAwKTsKLQotCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDBmLCAweDZkODEpOwotCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDIwLCAweDAwNDAgfCAweDAwMjAgfCAweDAwMTAgfCAweDAwMDggfCAweDAwMDIgfCAweDAwMDEpOworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE4LCAweDA3ZmYpOworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDIwLCAweDA4MDAgfCAweDQwMDAgfCAweDAwNDAgfCAweDAwMjAgfCAweDAwMTAgfCAweDAwMDggfCAweDAwMDIgfCAweDAwMDEpOworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDBmLCAoMSA8PCAxNCkgfCAoMiA8PCAxMikgfCAoZ2FpbiA8PCA5KSB8ICgxIDw8IDgpIHwgKDEgPDwgNykgfCAoMCA8PCAwKSk7CiAJbXNsZWVwKDkpOwotCXdiZF9vZmZzID0gZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgxOSk7Ci0JZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MjAsIDApOwotCXN0YXRlLT53YmRfZmZfb2Zmc2V0ID0gKCh3YmRfb2ZmcyAqIDggKiAxOCAvIDMzICsgMSkgLyAyKTsKLQlkcHJpbnRrKCAiV0JEU3RhcnQgPSAlZCAoVmFyZ2VuKSAtIEZGID0gJWhkIiwgKHUzMikgd2JkX29mZnMgKiAxODAwLzEwMjQsIHN0YXRlLT53YmRfZmZfb2Zmc2V0KTsKKwlvZmZzZXQgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDE5KTsKKwlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyMCwgdHVuZXJfZW4pOworCXJldHVybiBvZmZzZXQ7Cit9CiAKLQlpZiAoc3RhdGUtPmNmZy0+c2xlZXApCi0JCXN0YXRlLT5jZmctPnNsZWVwKGZlLCAxKTsKLQorc3RhdGljIHZvaWQgZGliMDA3MF93YmRfb2Zmc2V0X2NhbGlicmF0aW9uKHN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBnYWluOworCWZvciAoZ2FpbiA9IDY7IGdhaW4gPCA4OyBnYWluKyspIHsKKwkJc3RhdGUtPndiZF9vZmZzZXRfM18zW2dhaW4gLSA2XSA9ICgoZGliMDA3MF9yZWFkX3diZF9vZmZzZXQoc3RhdGUsIGdhaW4pICogOCAqIDE4IC8gMzMgKyAxKSAvIDIpOworCQlkcHJpbnRrKCJHYWluOiAlZCwgV0JET2Zmc2V0ICgzLjNWKSA9ICVoZCIsIGdhaW4sIHN0YXRlLT53YmRfb2Zmc2V0XzNfM1tnYWluIC0gNl0pOworCX0KIH0KIAogdTE2IGRpYjAwNzBfd2JkX29mZnNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3QgPSBmZS0+dHVuZXJfcHJpdjsKLQlyZXR1cm4gc3QtPndiZF9mZl9vZmZzZXQ7CisJc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJY29uc3Qgc3RydWN0IGRpYjAwNzBfd2JkX2dhaW5fY2ZnICp0bXAgPSBzdGF0ZS0+Y2ZnLT53YmRfZ2FpbjsKKwl1MzIgZnJlcSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5IC8gMTAwMDsKKworCWlmICh0bXAgIT0gTlVMTCkgeworCQl3aGlsZSAoZnJlcSAvIDEwMDAgPiB0bXAtPmZyZXEpCS8qIGZpbmQgdGhlIHJpZ2h0IG9uZSAqLworCQkJdG1wKys7CisJCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gdG1wLT53YmRfZ2Fpbl92YWw7CisJfSBlbHNlCisJCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gNjsKKworCXJldHVybiBzdGF0ZS0+d2JkX29mZnNldF8zXzNbc3RhdGUtPndiZF9nYWluX2N1cnJlbnQgLSA2XTsKIH0KIAogRVhQT1JUX1NZTUJPTChkaWIwMDcwX3diZF9vZmZzZXQpOwotc3RhdGljIGludCBkaWIwMDcwX3NldF9jdHJsX2xvNShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggdmNvX2JpYXNfdHJpbSwgdTggaGZfZGl2X3RyaW0sIHU4IGNwX2N1cnJlbnQsIHU4IHRoaXJkX29yZGVyX2ZpbHQpCi17Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7Ci0gICAgdTE2IGxvNSA9ICh0aGlyZF9vcmRlcl9maWx0IDw8IDE0KSB8ICgwIDw8IDEzKSB8ICgxIDw8IDEyKSB8ICgzIDw8IDkpIHwgKGNwX2N1cnJlbnQgPDwgNikgfCAoaGZfZGl2X3RyaW0gPDwgMykgfCAodmNvX2JpYXNfdHJpbSA8PCAwKTsKLQlkcHJpbnRrKCAiQ1RSTF9MTzU6IDB4JXgiLCBsbzUpOwotCXJldHVybiBkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNSwgbG81KTsKLX0KIAogI2RlZmluZSBwZ21fcmVhZF93b3JkKHcpICgqdykKLXN0YXRpYyBpbnQgZGliMDA3MF9yZXNldChzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW50IGRpYjAwNzBfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CisJc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAJdTE2IGwsIHIsICpuOwogCiAJSEFSRF9SRVNFVChzdGF0ZSk7CiAKLQogI2lmbmRlZiBGT1JDRV9TQkFORF9UVU5FUgogCWlmICgoZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgyMikgPj4gOSkgJiAweDEpCiAJCXN0YXRlLT5yZXZpc2lvbiA9IChkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDFmKSA+PiA4KSAmIDB4ZmY7CiAJZWxzZQorI2Vsc2UKKyN3YXJuaW5nIGZvcmNpbmcgU0JBTkQKICNlbmRpZgotCQlzdGF0ZS0+cmV2aXNpb24gPSBESUIwMDcwU19QMUE7CisJc3RhdGUtPnJldmlzaW9uID0gRElCMDA3MFNfUDFBOwogCiAJLyogUDFGIG9yIG5vdCAqLwotCWRwcmludGsoICJSZXZpc2lvbjogJXgiLCBzdGF0ZS0+cmV2aXNpb24pOworCWRwcmludGsoIlJldmlzaW9uOiAleCIsIHN0YXRlLT5yZXZpc2lvbik7CiAKIAlpZiAoc3RhdGUtPnJldmlzaW9uID09IERJQjAwNzBfUDFEKSB7Ci0JCWRwcmludGsoICJFcnJvcjogdGhpcyBkcml2ZXIgaXMgbm90IHRvIGJlIHVzZWQgbWVhbnQgZm9yIFAxRCBvciBlYXJsaWVyIik7CisJCWRwcmludGsoIkVycm9yOiB0aGlzIGRyaXZlciBpcyBub3QgdG8gYmUgdXNlZCBtZWFudCBmb3IgUDFEIG9yIGVhcmxpZXIiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OTgsNyArNjIwLDcgQEAKIAl3aGlsZSAobCkgewogCQlyID0gcGdtX3JlYWRfd29yZChuKyspOwogCQlkbyB7Ci0JCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgKHU4KXIsIHBnbV9yZWFkX3dvcmQobisrKSk7CisJCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgKHU4KSByLCBwZ21fcmVhZF93b3JkKG4rKykpOwogCQkJcisrOwogCQl9IHdoaWxlICgtLWwpOwogCQlsID0gcGdtX3JlYWRfd29yZChuKyspOwpAQCAtNTE0LDI0ICs2MzYsMjUgQEAKIAlyIHw9IHN0YXRlLT5jZmctPm9zY19idWZmZXJfc3RhdGUgPDwgMzsKIAogCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDEwLCByKTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxZiwgKDEgPDwgOCkgfCAoKHN0YXRlLT5jZmctPmNsb2NrX3BhZF9kcml2ZSAmIDB4ZikgPDwgNCkpOworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFmLCAoMSA8PCA4KSB8ICgoc3RhdGUtPmNmZy0+Y2xvY2tfcGFkX2RyaXZlICYgMHhmKSA8PCA1KSk7CiAKIAlpZiAoc3RhdGUtPmNmZy0+aW52ZXJ0X2lxKSB7CiAJCXIgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDAyKSAmIDB4ZmZkZjsKIAkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDIsIHIgfCAoMSA8PCA1KSk7CiAJfQogCi0KIAlpZiAoc3RhdGUtPnJldmlzaW9uID09IERJQjAwNzBTX1AxQSkKLQkJZGliMDA3MF9zZXRfY3RybF9sbzUoc3RhdGUtPmZlLCA0LCA3LCAzLCAxKTsKKwkJZGliMDA3MF9zZXRfY3RybF9sbzUoZmUsIDIsIDQsIDMsIDApOwogCWVsc2UKLQkJZGliMDA3MF9zZXRfY3RybF9sbzUoc3RhdGUtPmZlLCA0LCA0LCAyLCAwKTsKKwkJZGliMDA3MF9zZXRfY3RybF9sbzUoZmUsIDUsIDQsIHN0YXRlLT5jZmctPmNoYXJnZV9wdW1wLCBzdGF0ZS0+Y2ZnLT5lbmFibGVfdGhpcmRfb3JkZXJfZmlsdGVyKTsKIAogCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCAoNTQgPDwgOSkgfCAweGM4KTsKKworCWRpYjAwNzBfd2JkX29mZnNldF9jYWxpYnJhdGlvbihzdGF0ZSk7CisKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGRpYjAwNzBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlrZnJlZShmZS0+dHVuZXJfcHJpdik7CkBAIC01MzksMjMgKzY2MiwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGR2Yl90dW5lcl9vcHMgZGliMDA3MF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl90dW5lcl9vcHMgZGliMDA3MF9vcHMgPSB7CiAJLmluZm8gPSB7Ci0JCS5uYW1lICAgICAgICAgICA9ICJEaUJjb20gRGlCMDA3MCIsCi0JCS5mcmVxdWVuY3lfbWluICA9ICA0NTAwMDAwMCwKLQkJLmZyZXF1ZW5jeV9tYXggID0gODYwMDAwMDAwLAotCQkuZnJlcXVlbmN5X3N0ZXAgPSAgICAgIDEwMDAsCi0JfSwKLQkucmVsZWFzZSAgICAgICA9IGRpYjAwNzBfcmVsZWFzZSwKKwkJIC5uYW1lID0gIkRpQmNvbSBEaUIwMDcwIiwKKwkJIC5mcmVxdWVuY3lfbWluID0gNDUwMDAwMDAsCisJCSAuZnJlcXVlbmN5X21heCA9IDg2MDAwMDAwMCwKKwkJIC5mcmVxdWVuY3lfc3RlcCA9IDEwMDAsCisJCSB9LAorCS5yZWxlYXNlID0gZGliMDA3MF9yZWxlYXNlLAogCi0JLmluaXQgICAgICAgICAgPSBkaWIwMDcwX3dha2V1cCwKLQkuc2xlZXAgICAgICAgICA9IGRpYjAwNzBfc2xlZXAsCi0JLnNldF9wYXJhbXMgICAgPSBkaWIwMDcwX3R1bmVfZGlnaXRhbCwKLS8vCS5nZXRfZnJlcXVlbmN5ID0gZGliMDA3MF9nZXRfZnJlcXVlbmN5LAotLy8JLmdldF9iYW5kd2lkdGggPSBkaWIwMDcwX2dldF9iYW5kd2lkdGgKKwkuaW5pdCA9IGRpYjAwNzBfd2FrZXVwLAorCS5zbGVlcCA9IGRpYjAwNzBfc2xlZXAsCisJLnNldF9wYXJhbXMgPSBkaWIwMDcwX3R1bmUsCisKKy8vICAgICAgLmdldF9mcmVxdWVuY3kgPSBkaWIwMDcwX2dldF9mcmVxdWVuY3ksCisvLyAgICAgIC5nZXRfYmFuZHdpZHRoID0gZGliMDA3MF9nZXRfYmFuZHdpZHRoCiB9OwogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpCiB7CiAJc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpYjAwNzBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKQEAgLTU2MywyNSArNjg3LDI0IEBACiAKIAlzdGF0ZS0+Y2ZnID0gY2ZnOwogCXN0YXRlLT5pMmMgPSBpMmM7Ci0Jc3RhdGUtPmZlICA9IGZlOworCXN0YXRlLT5mZSA9IGZlOwogCWZlLT50dW5lcl9wcml2ID0gc3RhdGU7CiAKLQlpZiAoZGliMDA3MF9yZXNldChzdGF0ZSkgIT0gMCkKKwlpZiAoZGliMDA3MF9yZXNldChmZSkgIT0gMCkKIAkJZ290byBmcmVlX21lbTsKIAotCWRpYjAwNzBfd2JkX2NhbGlicmF0aW9uKGZlKTsKLQogCXByaW50ayhLRVJOX0lORk8gIkRpQjAwNzA6IHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkXG4iKTsKIAltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmZGliMDA3MF9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOwogCiAJZmUtPnR1bmVyX3ByaXYgPSBzdGF0ZTsKIAlyZXR1cm4gZmU7CiAKLWZyZWVfbWVtOgorIGZyZWVfbWVtOgogCWtmcmVlKHN0YXRlKTsKIAlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CiAJcmV0dXJuIE5VTEw7CiB9CisKIEVYUE9SVF9TWU1CT0woZGliMDA3MF9hdHRhY2gpOwogCiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGJvZXR0Y2hlckBkaWJjb20uZnI+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAppbmRleCA5NjcwZjVkLi44YTJlMWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKQEAgLTE1LDYgKzE1LDExIEBACiAKICNkZWZpbmUgREVGQVVMVF9ESUIwMDcwX0kyQ19BRERSRVNTIDB4NjAKIAorc3RydWN0IGRpYjAwNzBfd2JkX2dhaW5fY2ZnIHsKKwl1MTYgZnJlcTsKKwl1MTYgd2JkX2dhaW5fdmFsOworfTsKKwogc3RydWN0IGRpYjAwNzBfY29uZmlnIHsKIAl1OCBpMmNfYWRkcmVzczsKIApAQCAtMjYsMjYgKzMxLDI4IEBACiAJaW50IGZyZXFfb2Zmc2V0X2toel91aGY7CiAJaW50IGZyZXFfb2Zmc2V0X2toel92aGY7CiAKLQl1OCBvc2NfYnVmZmVyX3N0YXRlOyAvKiAwPSBub3JtYWwsIDE9IHRyaS1zdGF0ZSAqLwotCXUzMiAgY2xvY2tfa2h6OwotCXU4IGNsb2NrX3BhZF9kcml2ZTsgLyogKERyaXZlICsgMSkgKiAybUEgKi8KKwl1OCBvc2NfYnVmZmVyX3N0YXRlOwkvKiAwPSBub3JtYWwsIDE9IHRyaS1zdGF0ZSAqLworCXUzMiBjbG9ja19raHo7CisJdTggY2xvY2tfcGFkX2RyaXZlOwkvKiAoRHJpdmUgKyAxKSAqIDJtQSAqLwogCi0JdTggaW52ZXJ0X2lxOyAvKiBpbnZlcnQgUSAtIGluIGNhc2UgSSBvciBRIGlzIGludmVydGVkIG9uIHRoZSBib2FyZCAqLworCXU4IGludmVydF9pcTsJCS8qIGludmVydCBRIC0gaW4gY2FzZSBJIG9yIFEgaXMgaW52ZXJ0ZWQgb24gdGhlIGJvYXJkICovCiAKLQl1OCBmb3JjZV9jcnlzdGFsX21vZGU7IC8qIGlmID09IDAgLT4gZGVjaXNpb24gaXMgbWFkZSBpbiB0aGUgZHJpdmVyIGRlZmF1bHQ6IDwyNCAtPiAyLCA+PTI0IC0+IDEgKi8KKwl1OCBmb3JjZV9jcnlzdGFsX21vZGU7CS8qIGlmID09IDAgLT4gZGVjaXNpb24gaXMgbWFkZSBpbiB0aGUgZHJpdmVyIGRlZmF1bHQ6IDwyNCAtPiAyLCA+PTI0IC0+IDEgKi8KIAogCXU4IGZsaXBfY2hpcDsKKwl1OCBlbmFibGVfdGhpcmRfb3JkZXJfZmlsdGVyOworCXU4IGNoYXJnZV9wdW1wOworCisJY29uc3Qgc3RydWN0IGRpYjAwNzBfd2JkX2dhaW5fY2ZnICp3YmRfZ2FpbjsKKworCXU4IHZnYV9maWx0ZXI7CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfRElCMDA3MF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCi0JCQkJCSAgIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKTsKIGV4dGVybiB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCi0JCQkJCQkgIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwpAQCAtNTcsNSArNjQsNiBAQAogCXJldHVybiAtRU5PREVWOwogfQogI2VuZGlmCitleHRlcm4gdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG9wZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMKaW5kZXggZmM5NmZiZi4uNTVlZjZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAorI2luY2x1ZGUgImR2Yl9tYXRoLmgiCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAKICNpbmNsdWRlICJkaWI3MDAwcC5oIgpAQCAtMTIxNyw3ICsxMjE4LDM3IEBACiAKIHN0YXRpYyBpbnQgZGliNzAwMHBfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiAqc25yKQogewotCSpzbnIgPSAweDAwMDA7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiB2YWw7CisJczMyIHNpZ25hbF9tYW50LCBzaWduYWxfZXhwLCBub2lzZV9tYW50LCBub2lzZV9leHA7CisJdTMyIHJlc3VsdCA9IDA7CisKKwl2YWwgPSBkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsIDQ3OSk7CisJbm9pc2VfbWFudCA9ICh2YWwgPj4gNCkgJiAweGZmOworCW5vaXNlX2V4cCA9ICgodmFsICYgMHhmKSA8PCAyKTsKKwl2YWwgPSBkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsIDQ4MCk7CisJbm9pc2VfZXhwICs9ICgodmFsID4+IDE0KSAmIDB4Myk7CisJaWYgKChub2lzZV9leHAgJiAweDIwKSAhPSAwKQorCQlub2lzZV9leHAgLT0gMHg0MDsKKworCXNpZ25hbF9tYW50ID0gKHZhbCA+PiA2KSAmIDB4RkY7CisJc2lnbmFsX2V4cCAgPSAodmFsICYgMHgzRik7CisJaWYgKChzaWduYWxfZXhwICYgMHgyMCkgIT0gMCkKKwkJc2lnbmFsX2V4cCAtPSAweDQwOworCisJaWYgKHNpZ25hbF9tYW50ICE9IDApCisJCXJlc3VsdCA9IGludGxvZzEwKDIpICogMTAgKiBzaWduYWxfZXhwICsgMTAgKgorCQkJaW50bG9nMTAoc2lnbmFsX21hbnQpOworCWVsc2UKKwkJcmVzdWx0ID0gaW50bG9nMTAoMikgKiAxMCAqIHNpZ25hbF9leHAgLSAxMDA7CisKKwlpZiAobm9pc2VfbWFudCAhPSAwKQorCQlyZXN1bHQgLT0gaW50bG9nMTAoMikgKiAxMCAqIG5vaXNlX2V4cCArIDEwICoKKwkJCWludGxvZzEwKG5vaXNlX21hbnQpOworCWVsc2UKKwkJcmVzdWx0IC09IGludGxvZzEwKDIpICogMTAgKiBub2lzZV9leHAgLSAxMDA7CisKKwkqc25yID0gcmVzdWx0IC8gKCgxIDw8IDI0KSAvIDEwKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyYzc5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKQEAgLTAsMCArMSwyMjc3IEBACisvKgorICogTGludXgtRFZCIERyaXZlciBmb3IgRGlCY29tJ3MgRGlCODAwMCBjaGlwIChJU0RCLVQpLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaUJjb20gKGh0dHA6Ly93d3cuZGliY29tLmZyLykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHZiX21hdGguaCIKKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSAiZGliODAwMC5oIgorCisjZGVmaW5lIExBWUVSX0FMTCAtMQorI2RlZmluZSBMQVlFUl9BICAgMQorI2RlZmluZSBMQVlFUl9CICAgMgorI2RlZmluZSBMQVlFUl9DICAgMworCisjZGVmaW5lIEZFX0NBTExCQUNLX1RJTUVfTkVWRVIgMHhmZmZmZmZmZgorCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInR1cm4gb24gZGVidWdnaW5nIChkZWZhdWx0OiAwKSIpOworCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKEtFUk5fREVCVUcgIkRpQjgwMDA6ICIpOyBwcmludGsoYXJncyk7IHByaW50aygiXG4iKTsgfSB9IHdoaWxlICgwKQorCitlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgeworCUNUX0FHQ19TVEFSVCA9IDIwLAorCUNUX0FHQ19TVEVQXzAsCisJQ1RfQUdDX1NURVBfMSwKKwlDVF9BR0NfU1RFUF8yLAorCUNUX0FHQ19TVEVQXzMsCisJQ1RfQUdDX1NURVBfNCwKKwlDVF9BR0NfU1RPUCwKKworCUNUX0RFTU9EX1NUQVJUID0gMzAsCit9OworCisjZGVmaW5lIEZFX1NUQVRVU19UVU5FX0ZBSUxFRCAwCisKK3N0cnVjdCBpMmNfZGV2aWNlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CisJdTggYWRkcjsKK307CisKK3N0cnVjdCBkaWI4MDAwX3N0YXRlIHsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZlOworCXN0cnVjdCBkaWI4MDAwX2NvbmZpZyBjZmc7CisKKwlzdHJ1Y3QgaTJjX2RldmljZSBpMmM7CisKKwlzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyIGkyY19tYXN0ZXI7CisKKwl1MTYgd2JkX3JlZjsKKworCXU4IGN1cnJlbnRfYmFuZDsKKwl1MzIgY3VycmVudF9iYW5kd2lkdGg7CisJc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyAqY3VycmVudF9hZ2M7CisJdTMyIHRpbWY7CisJdTMyIHRpbWZfZGVmYXVsdDsKKworCXU4IGRpdl9mb3JjZV9vZmY6MTsKKwl1OCBkaXZfc3RhdGU6MTsKKwl1MTYgZGl2X3N5bmNfd2FpdDsKKworCXU4IGFnY19zdGF0ZTsKKwl1OCBkaWZmZXJlbnRpYWxfY29uc3RlbGxhdGlvbjsKKwl1OCBkaXZlcnNpdHlfb25vZmY7CisKKwlzMTYgYmVyX21vbml0b3JlZF9sYXllcjsKKwl1MTYgZ3Bpb19kaXI7CisJdTE2IGdwaW9fdmFsOworCisJdTE2IHJldmlzaW9uOworCXU4IGlzZGJ0X2NmZ19sb2FkZWQ7CisJZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHR1bmVfc3RhdGU7CisJdTMyIHN0YXR1czsKK307CisKK2VudW0gZGliODAwMF9wb3dlcl9tb2RlIHsKKwlESUI4MDAwTV9QT1dFUl9BTEwgPSAwLAorCURJQjgwMDBNX1BPV0VSX0lOVEVSRkFDRV9PTkxZLAorfTsKKworc3RhdGljIHUxNiBkaWI4MDAwX2kyY19yZWFkMTYoc3RydWN0IGkyY19kZXZpY2UgKmkyYywgdTE2IHJlZykKK3sKKwl1OCB3YlsyXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYgfTsKKwl1OCByYlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7CisJCXsuYWRkciA9IGkyYy0+YWRkciA+PiAxLC5mbGFncyA9IDAsLmJ1ZiA9IHdiLC5sZW4gPSAyfSwKKwkJey5hZGRyID0gaTJjLT5hZGRyID4+IDEsLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IHJiLC5sZW4gPSAyfSwKKwl9OworCisJaWYgKGkyY190cmFuc2ZlcihpMmMtPmFkYXAsIG1zZywgMikgIT0gMikKKwkJZHByaW50aygiaTJjIHJlYWQgZXJyb3Igb24gJWQiLCByZWcpOworCisJcmV0dXJuIChyYlswXSA8PCA4KSB8IHJiWzFdOworfQorCitzdGF0aWMgdTE2IGRpYjgwMDBfcmVhZF93b3JkKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKK3sKKwlyZXR1cm4gZGliODAwMF9pMmNfcmVhZDE2KCZzdGF0ZS0+aTJjLCByZWcpOworfQorCitzdGF0aWMgdTMyIGRpYjgwMDBfcmVhZDMyKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKK3sKKwl1MTYgcndbMl07CisKKwlyd1swXSA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCByZWcgKyAwKTsKKwlyd1sxXSA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCByZWcgKyAxKTsKKworCXJldHVybiAoKHJ3WzBdIDw8IDE2KSB8IChyd1sxXSkpOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfaTJjX3dyaXRlMTYoc3RydWN0IGkyY19kZXZpY2UgKmkyYywgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwl1OCBiWzRdID0geworCQkocmVnID4+IDgpICYgMHhmZiwgcmVnICYgMHhmZiwKKwkJKHZhbCA+PiA4KSAmIDB4ZmYsIHZhbCAmIDB4ZmYsCisJfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gaTJjLT5hZGRyID4+IDEsLmZsYWdzID0gMCwuYnVmID0gYiwubGVuID0gNAorCX07CisJcmV0dXJuIGkyY190cmFuc2ZlcihpMmMtPmFkYXAsICZtc2csIDEpICE9IDEgPyAtRVJFTU9URUlPIDogMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3dyaXRlX3dvcmQoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXJldHVybiBkaWI4MDAwX2kyY193cml0ZTE2KCZzdGF0ZS0+aTJjLCByZWcsIHZhbCk7Cit9CisKK2NvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfMXNlZ19kcXBza1s4XSA9IHsKKwkoNzY5IDw8IDUpIHwgMHgwYSwgKDc0NSA8PCA1KSB8IDB4MDMsICg1OTUgPDwgNSkgfCAweDBkLCAoNzY5IDw8IDUpIHwgMHgwYSwgKDkyMCA8PCA1KSB8IDB4MDksICg3ODQgPDwgNSkgfCAweDAyLCAoNTE5IDw8IDUpIHwgMHgwYywKKwkgICAgKDkyMCA8PCA1KSB8IDB4MDkKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfMXNlZ1s4XSA9IHsKKwkoNjkyIDw8IDUpIHwgMHgwYiwgKDY4MyA8PCA1KSB8IDB4MDEsICg1MTkgPDwgNSkgfCAweDA5LCAoNjkyIDw8IDUpIHwgMHgwYiwgMCB8IDB4MWYsIDAgfCAweDFmLCAwIHwgMHgxZiwgMCB8IDB4MWYKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfM3NlZ18wZHFwc2tfMWRxcHNrWzhdID0geworCSg4MzIgPDwgNSkgfCAweDEwLCAoOTEyIDw8IDUpIHwgMHgwNSwgKDkwMCA8PCA1KSB8IDB4MTIsICg4MzIgPDwgNSkgfCAweDEwLCAoLTkzMSA8PCA1KSB8IDB4MGYsICg5MTIgPDwgNSkgfCAweDA0LCAoODA3IDw8IDUpIHwgMHgxMSwKKwkgICAgKC05MzEgPDwgNSkgfCAweDBmCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzJrX3NiXzNzZWdfMGRxcHNrWzhdID0geworCSg2MjIgPDwgNSkgfCAweDBjLCAoOTQxIDw8IDUpIHwgMHgwNCwgKDc5NiA8PCA1KSB8IDB4MTAsICg2MjIgPDwgNSkgfCAweDBjLCAoOTgyIDw8IDUpIHwgMHgwYywgKDUxOSA8PCA1KSB8IDB4MDIsICg1NzIgPDwgNSkgfCAweDBlLAorCSAgICAoOTgyIDw8IDUpIHwgMHgwYworfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl8ya19zYl8zc2VnXzFkcXBza1s4XSA9IHsKKwkoNjk5IDw8IDUpIHwgMHgxNCwgKDYwNyA8PCA1KSB8IDB4MDQsICg5NDQgPDwgNSkgfCAweDEzLCAoNjk5IDw8IDUpIHwgMHgxNCwgKC03MjAgPDwgNSkgfCAweDBkLCAoNjQwIDw8IDUpIHwgMHgwMywgKDg2NiA8PCA1KSB8IDB4MTIsCisJICAgICgtNzIwIDw8IDUpIHwgMHgwZAorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl8ya19zYl8zc2VnWzhdID0geworCSg2NjQgPDwgNSkgfCAweDBjLCAoOTI1IDw8IDUpIHwgMHgwMywgKDkzNyA8PCA1KSB8IDB4MTAsICg2NjQgPDwgNSkgfCAweDBjLCAoLTYxMCA8PCA1KSB8IDB4MGEsICg2OTcgPDwgNSkgfCAweDAxLCAoODM2IDw8IDUpIHwgMHgwZSwKKwkgICAgKC02MTAgPDwgNSkgfCAweDBhCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzFzZWdfZHFwc2tbOF0gPSB7CisJKC05NTUgPDwgNSkgfCAweDBlLCAoNjg3IDw8IDUpIHwgMHgwNCwgKDgxOCA8PCA1KSB8IDB4MTAsICgtOTU1IDw8IDUpIHwgMHgwZSwgKC05MjIgPDwgNSkgfCAweDBkLCAoNzUwIDw8IDUpIHwgMHgwMywgKDY2NSA8PCA1KSB8IDB4MGYsCisJICAgICgtOTIyIDw8IDUpIHwgMHgwZAorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8xc2VnWzhdID0geworCSg2MzggPDwgNSkgfCAweDBkLCAoNjgzIDw8IDUpIHwgMHgwMiwgKDYzOCA8PCA1KSB8IDB4MGQsICg2MzggPDwgNSkgfCAweDBkLCAoLTY1NSA8PCA1KSB8IDB4MGEsICg1MTcgPDwgNSkgfCAweDAwLCAoNjk4IDw8IDUpIHwgMHgwZCwKKwkgICAgKC02NTUgPDwgNSkgfCAweDBhCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzNzZWdfMGRxcHNrXzFkcXBza1s4XSA9IHsKKwkoLTcwNyA8PCA1KSB8IDB4MTQsICg5MTAgPDwgNSkgfCAweDA2LCAoODg5IDw8IDUpIHwgMHgxNiwgKC03MDcgPDwgNSkgfCAweDE0LCAoLTk1OCA8PCA1KSB8IDB4MTMsICg5OTMgPDwgNSkgfCAweDA1LCAoNTIzIDw8IDUpIHwgMHgxNCwKKwkgICAgKC05NTggPDwgNSkgfCAweDEzCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzNzZWdfMGRxcHNrWzhdID0geworCSgtNzIzIDw8IDUpIHwgMHgxMywgKDkxMCA8PCA1KSB8IDB4MDUsICg3NzcgPDwgNSkgfCAweDE0LCAoLTcyMyA8PCA1KSB8IDB4MTMsICgtNTY4IDw8IDUpIHwgMHgwZiwgKDU0NyA8PCA1KSB8IDB4MDMsICg2OTYgPDwgNSkgfCAweDEyLAorCSAgICAoLTU2OCA8PCA1KSB8IDB4MGYKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfNGtfc2JfM3NlZ18xZHFwc2tbOF0gPSB7CisJKC05NDAgPDwgNSkgfCAweDE1LCAoNjA3IDw8IDUpIHwgMHgwNSwgKDkxNSA8PCA1KSB8IDB4MTYsICgtOTQwIDw8IDUpIHwgMHgxNSwgKC04NDggPDwgNSkgfCAweDEzLCAoNjgzIDw8IDUpIHwgMHgwNCwgKDU0MyA8PCA1KSB8IDB4MTQsCisJICAgICgtODQ4IDw8IDUpIHwgMHgxMworfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8zc2VnWzhdID0geworCSg2MTIgPDwgNSkgfCAweDEyLCAoOTEwIDw8IDUpIHwgMHgwNCwgKDg2NCA8PCA1KSB8IDB4MTQsICg2MTIgPDwgNSkgfCAweDEyLCAoLTg2OSA8PCA1KSB8IDB4MTMsICg2ODMgPDwgNSkgfCAweDAyLCAoODY5IDw8IDUpIHwgMHgxMiwKKwkgICAgKC04NjkgPDwgNSkgfCAweDEzCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzFzZWdfZHFwc2tbOF0gPSB7CisJKC04MzUgPDwgNSkgfCAweDEyLCAoNjg0IDw8IDUpIHwgMHgwNSwgKDczNSA8PCA1KSB8IDB4MTQsICgtODM1IDw8IDUpIHwgMHgxMiwgKC01OTggPDwgNSkgfCAweDEwLCAoNzgxIDw8IDUpIHwgMHgwNCwgKDczOSA8PCA1KSB8IDB4MTMsCisJICAgICgtNTk4IDw8IDUpIHwgMHgxMAorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8xc2VnWzhdID0geworCSg2NzMgPDwgNSkgfCAweDBmLCAoNjgzIDw8IDUpIHwgMHgwMywgKDgwOCA8PCA1KSB8IDB4MTIsICg2NzMgPDwgNSkgfCAweDBmLCAoNTg1IDw8IDUpIHwgMHgwZiwgKDUxMiA8PCA1KSB8IDB4MDEsICg3ODAgPDwgNSkgfCAweDBmLAorCSAgICAoNTg1IDw8IDUpIHwgMHgwZgorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8zc2VnXzBkcXBza18xZHFwc2tbOF0gPSB7CisJKDg2MyA8PCA1KSB8IDB4MTcsICg5MzAgPDwgNSkgfCAweDA3LCAoODc4IDw8IDUpIHwgMHgxOSwgKDg2MyA8PCA1KSB8IDB4MTcsICgwIDw8IDUpIHwgMHgxNCwgKDUyMSA8PCA1KSB8IDB4MDUsICg5ODAgPDwgNSkgfCAweDE4LAorCSAgICAoMCA8PCA1KSB8IDB4MTQKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfOGtfc2JfM3NlZ18wZHFwc2tbOF0gPSB7CisJKC05MjQgPDwgNSkgfCAweDE3LCAoOTEwIDw8IDUpIHwgMHgwNiwgKDc3NCA8PCA1KSB8IDB4MTcsICgtOTI0IDw8IDUpIHwgMHgxNywgKC04NzcgPDwgNSkgfCAweDE1LCAoNTY1IDw8IDUpIHwgMHgwNCwgKDU1MyA8PCA1KSB8IDB4MTUsCisJICAgICgtODc3IDw8IDUpIHwgMHgxNQorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8zc2VnXzFkcXBza1s4XSA9IHsKKwkoLTkyMSA8PCA1KSB8IDB4MTksICg2MDcgPDwgNSkgfCAweDA2LCAoODgxIDw8IDUpIHwgMHgxOSwgKC05MjEgPDwgNSkgfCAweDE5LCAoLTkyMSA8PCA1KSB8IDB4MTQsICg3MTMgPDwgNSkgfCAweDA1LCAoMTAxOCA8PCA1KSB8IDB4MTgsCisJICAgICgtOTIxIDw8IDUpIHwgMHgxNAorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8zc2VnWzhdID0geworCSg1MTQgPDwgNSkgfCAweDE0LCAoOTEwIDw8IDUpIHwgMHgwNSwgKDg2MSA8PCA1KSB8IDB4MTcsICg1MTQgPDwgNSkgfCAweDE0LCAoNjkwIDw8IDUpIHwgMHgxNCwgKDY4MyA8PCA1KSB8IDB4MDMsICg2NjIgPDwgNSkgfCAweDE1LAorCSAgICAoNjkwIDw8IDUpIHwgMHgxNAorfTsKKworY29uc3QgaW50MTZfdCBhbmFfZmVfY29lZmZfM3NlZ1syNF0gPSB7CisJODEsIDgwLCA3OCwgNzQsIDY4LCA2MSwgNTQsIDQ1LCAzNywgMjgsIDE5LCAxMSwgNCwgMTAyMiwgMTAxNywgMTAxMywgMTAxMCwgMTAwOCwgMTAwOCwgMTAwOCwgMTAwOCwgMTAxMCwgMTAxNCwgMTAxNworfTsKKworY29uc3QgaW50MTZfdCBhbmFfZmVfY29lZmZfMXNlZ1syNF0gPSB7CisJMjQ5LCAyMjYsIDE2NCwgODIsIDUsIDk4MSwgOTcwLCA5ODgsIDEwMTgsIDIwLCAzMSwgMjYsIDgsIDEwMTIsIDEwMDAsIDEwMTgsIDEwMTIsIDgsIDE1LCAxNCwgOSwgMywgMTAxNywgMTAwMworfTsKKworY29uc3QgaW50MTZfdCBhbmFfZmVfY29lZmZfMTNzZWdbMjRdID0geworCTM5NiwgMzA1LCAxMDUsIC01MSwgLTc3LCAtMTIsIDQxLCAzMSwgLTExLCAtMzAsIC0xMSwgMTQsIDE1LCAtMiwgLTEzLCAtNywgNSwgOCwgMSwgLTYsIC03LCAtMywgMCwgMQorfTsKKworc3RhdGljIHUxNiBmZnRfdG9fbW9kZShzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUpCit7CisJdTE2IG1vZGU7CisJc3dpdGNoIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlKSB7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzoKKwkJbW9kZSA9IDE7CisJCWJyZWFrOworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfNEs6CisJCW1vZGUgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfQVVUTzoKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgorCQltb2RlID0gMzsKKwkJYnJlYWs7CisJfQorCXJldHVybiBtb2RlOworfQorCitzdGF0aWMgdm9pZCBkaWI4MDAwX3NldF9hY3F1aXNpdGlvbl9tb2RlKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKK3sKKwl1MTYgbnVkID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI5OCk7CisJbnVkIHw9ICgxIDw8IDMpIHwgKDEgPDwgMCk7CisJZHByaW50aygiYWNxdWlzaXRpb24gbW9kZSBhY3RpdmF0ZWQiKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI5OCwgbnVkKTsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3NldF9vdXRwdXRfbW9kZShzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIGludCBtb2RlKQoreworCXUxNiBvdXRyZWcsIGZpZm9fdGhyZXNob2xkLCBzbW9fbW9kZSwgc3JhbSA9IDB4MDIwNTsJLyogYnkgZGVmYXVsdCBTRFJBTSBkZWludGx2IGlzIGVuYWJsZWQgKi8KKworCW91dHJlZyA9IDA7CisJZmlmb190aHJlc2hvbGQgPSAxNzkyOworCXNtb19tb2RlID0gKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyOTkpICYgMHgwMDUwKSB8ICgxIDw8IDEpOworCisJZHByaW50aygiLUktICBTZXR0aW5nIG91dHB1dCBtb2RlIGZvciBkZW1vZCAlcCB0byAlZCIsICZzdGF0ZS0+ZmUsIG1vZGUpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBPVVRNT0RFX01QRUcyX1BBUl9HQVRFRF9DTEs6CS8vIFNUQnMgd2l0aCBwYXJhbGxlbCBnYXRlZCBjbG9jaworCQlvdXRyZWcgPSAoMSA8PCAxMCk7CS8qIDB4MDQwMCAqLworCQlicmVhazsKKwljYXNlIE9VVE1PREVfTVBFRzJfUEFSX0NPTlRfQ0xLOgkvLyBTVEJzIHdpdGggcGFyYWxsZWwgY29udGludWVzIGNsb2NrCisJCW91dHJlZyA9ICgxIDw8IDEwKSB8ICgxIDw8IDYpOwkvKiAweDA0NDAgKi8KKwkJYnJlYWs7CisJY2FzZSBPVVRNT0RFX01QRUcyX1NFUklBTDoJLy8gU1RCcyB3aXRoIHNlcmlhbCBpbnB1dAorCQlvdXRyZWcgPSAoMSA8PCAxMCkgfCAoMiA8PCA2KSB8ICgwIDw8IDEpOwkvKiAweDA0ODIgKi8KKwkJYnJlYWs7CisJY2FzZSBPVVRNT0RFX0RJVkVSU0lUWToKKwkJaWYgKHN0YXRlLT5jZmcuaG9zdGJ1c19kaXZlcnNpdHkpIHsKKwkJCW91dHJlZyA9ICgxIDw8IDEwKSB8ICg0IDw8IDYpOwkvKiAweDA1MDAgKi8KKwkJCXNyYW0gJj0gMHhmZGZmOworCQl9IGVsc2UKKwkJCXNyYW0gfD0gMHgwYzAwOworCQlicmVhazsKKwljYXNlIE9VVE1PREVfTVBFRzJfRklGTzoJLy8gZS5nLiBVU0IgZmVlZGluZworCQlzbW9fbW9kZSB8PSAoMyA8PCAxKTsKKwkJZmlmb190aHJlc2hvbGQgPSA1MTI7CisJCW91dHJlZyA9ICgxIDw8IDEwKSB8ICg1IDw8IDYpOworCQlicmVhazsKKwljYXNlIE9VVE1PREVfSElHSF9aOgkvLyBkaXNhYmxlCisJCW91dHJlZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPVVRNT0RFX0FOQUxPR19BREM6CisJCW91dHJlZyA9ICgxIDw8IDEwKSB8ICgzIDw8IDYpOworCQlkaWI4MDAwX3NldF9hY3F1aXNpdGlvbl9tb2RlKHN0YXRlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCJVbmhhbmRsZWQgb3V0cHV0X21vZGUgcGFzc2VkIHRvIGJlIHNldCBmb3IgZGVtb2QgJXAiLCAmc3RhdGUtPmZlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0YXRlLT5jZmcub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcykKKwkJc21vX21vZGUgfD0gKDEgPDwgNSk7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI5OSwgc21vX21vZGUpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzAwLCBmaWZvX3RocmVzaG9sZCk7CS8qIHN5bmNocm9ub3VzIGZyZWFkICovCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMjg2LCBvdXRyZWcpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTI5MSwgc3JhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3NldF9kaXZlcnNpdHlfaW4oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgc3luY193YWl0ID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI3MykgJiAweGZmZjA7CisKKwlpZiAoIXN0YXRlLT5kaWZmZXJlbnRpYWxfY29uc3RlbGxhdGlvbikgeworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3MiwgMSA8PCA5KTsJLy9kdnN5X29mZl9sbW9kNCA9IDEKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzMsIHN5bmNfd2FpdCB8ICgxIDw8IDIpIHwgMik7CS8vIHN5bmNfZW5hYmxlID0gMTsgY29tYl9tb2RlID0gMgorCX0gZWxzZSB7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcyLCAwKTsJLy9kdnN5X29mZl9sbW9kNCA9IDAKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzMsIHN5bmNfd2FpdCk7CS8vIHN5bmNfZW5hYmxlID0gMDsgY29tYl9tb2RlID0gMAorCX0KKwlzdGF0ZS0+ZGl2ZXJzaXR5X29ub2ZmID0gb25vZmY7CisKKwlzd2l0Y2ggKG9ub2ZmKSB7CisJY2FzZSAwOgkJLyogb25seSB1c2UgdGhlIGludGVybmFsIHdheSAtIG5vdCB0aGUgZGl2ZXJzaXR5IGlucHV0ICovCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcwLCAxKTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzEsIDApOworCQlicmVhazsKKwljYXNlIDE6CQkvKiBib3RoIHdheXMgKi8KKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzAsIDYpOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3MSwgNik7CisJCWJyZWFrOworCWNhc2UgMjoJCS8qIG9ubHkgdGhlIGRpdmVyc2l0eSBpbnB1dCAqLworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3MCwgMCk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcxLCAxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWI4MDAwX3NldF9wb3dlcl9tb2RlKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgZW51bSBkaWI4MDAwX3Bvd2VyX21vZGUgbW9kZSkKK3sKKwkvKiBieSBkZWZhdWx0IGV2ZXJ5dGhpbmcgaXMgZ29pbmcgdG8gYmUgcG93ZXJlZCBvZmYgKi8KKwl1MTYgcmVnXzc3NCA9IDB4M2ZmZiwgcmVnXzc3NSA9IDB4ZmZmZiwgcmVnXzc3NiA9IDB4ZmZmZiwKKwkgICAgcmVnXzkwMCA9IChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgOTAwKSAmIDB4ZmZmYykgfCAweDMsIHJlZ18xMjgwID0gKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAxMjgwKSAmIDB4MDBmZikgfCAweGZmMDA7CisKKwkvKiBub3csIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdGVkIG1vZGUsIHdlIHBvd2VyIG9uICovCisJc3dpdGNoIChtb2RlKSB7CisJCS8qIHBvd2VyIHVwIGV2ZXJ5dGhpbmcgaW4gdGhlIGRlbW9kICovCisJY2FzZSBESUI4MDAwTV9QT1dFUl9BTEw6CisJCXJlZ183NzQgPSAweDAwMDA7CisJCXJlZ183NzUgPSAweDAwMDA7CisJCXJlZ183NzYgPSAweDAwMDA7CisJCXJlZ185MDAgJj0gMHhmZmZjOworCQlyZWdfMTI4MCAmPSAweDAwZmY7CisJCWJyZWFrOworCWNhc2UgRElCODAwME1fUE9XRVJfSU5URVJGQUNFX09OTFk6CisJCXJlZ18xMjgwICY9IDB4MDBmZjsKKwkJYnJlYWs7CisJfQorCisJZHByaW50aygicG93ZXJtb2RlIDogNzc0IDogJXggOyA3NzUgOiAleDsgNzc2IDogJXggOyA5MDAgOiAleDsgMTI4MCA6ICV4IiwgcmVnXzc3NCwgcmVnXzc3NSwgcmVnXzc3NiwgcmVnXzkwMCwgcmVnXzEyODApOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzc0LCByZWdfNzc0KTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc3NSwgcmVnXzc3NSk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzYsIHJlZ183NzYpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTAwLCByZWdfOTAwKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODAsIHJlZ18xMjgwKTsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCBlbnVtIGRpYngwMDBfYWRjX3N0YXRlcyBubykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MTYgcmVnXzkwNyA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA5MDcpLCByZWdfOTA4ID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDkwOCk7CisKKwlzd2l0Y2ggKG5vKSB7CisJY2FzZSBESUJYMDAwX1NMT1dfQURDX09OOgorCQlyZWdfOTA4IHw9ICgxIDw8IDEpIHwgKDEgPDwgMCk7CisJCXJldCB8PSBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkwOCwgcmVnXzkwOCk7CisJCXJlZ185MDggJj0gfigxIDw8IDEpOworCQlicmVhazsKKworCWNhc2UgRElCWDAwMF9TTE9XX0FEQ19PRkY6CisJCXJlZ185MDggfD0gKDEgPDwgMSkgfCAoMSA8PCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIERJQlgwMDBfQURDX09OOgorCQlyZWdfOTA3ICY9IDB4MGZmZjsKKwkJcmVnXzkwOCAmPSAweDAwMDM7CisJCWJyZWFrOworCisJY2FzZSBESUJYMDAwX0FEQ19PRkY6CS8vIGxlYXZlIHRoZSBWQkcgdm9sdGFnZSBvbgorCQlyZWdfOTA3IHw9ICgxIDw8IDE0KSB8ICgxIDw8IDEzKSB8ICgxIDw8IDEyKTsKKwkJcmVnXzkwOCB8PSAoMSA8PCA1KSB8ICgxIDw8IDQpIHwgKDEgPDwgMykgfCAoMSA8PCAyKTsKKwkJYnJlYWs7CisKKwljYXNlIERJQlgwMDBfVkJHX0VOQUJMRToKKwkJcmVnXzkwNyAmPSB+KDEgPDwgMTUpOworCQlicmVhazsKKworCWNhc2UgRElCWDAwMF9WQkdfRElTQUJMRToKKwkJcmVnXzkwNyB8PSAoMSA8PCAxNSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0IHw9IGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTA3LCByZWdfOTA3KTsKKwlyZXQgfD0gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDgsIHJlZ185MDgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3NldF9iYW5kd2lkdGgoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCB1MzIgYncpCit7CisJdTMyIHRpbWY7CisKKwlpZiAoYncgPT0gMCkKKwkJYncgPSA2MDAwOworCisJaWYgKHN0YXRlLT50aW1mID09IDApIHsKKwkJZHByaW50aygidXNpbmcgZGVmYXVsdCB0aW1mIik7CisJCXRpbWYgPSBzdGF0ZS0+dGltZl9kZWZhdWx0OworCX0gZWxzZSB7CisJCWRwcmludGsoInVzaW5nIHVwZGF0ZWQgdGltZiIpOworCQl0aW1mID0gc3RhdGUtPnRpbWY7CisJfQorCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyOSwgKHUxNikgKCh0aW1mID4+IDE2KSAmIDB4ZmZmZikpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzAsICh1MTYpICgodGltZikgJiAweGZmZmYpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2FkX2NhbGliKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKK3sKKy8qIGludGVybmFsICovCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MjMsICgwIDw8IDEpIHwgKDAgPDwgMCkpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTI0LCA3NzYpOwkvLyAwLjYyNSozLjMgLyA0MDk2CisKKwkvKiBkbyB0aGUgY2FsaWJyYXRpb24gKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkyMywgKDEgPDwgMCkpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTIzLCAoMCA8PCAwKSk7CisKKwltc2xlZXAoMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkaWI4MDAwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaWYgKHZhbHVlID4gNDA5NSkKKwkJdmFsdWUgPSA0MDk1OworCXN0YXRlLT53YmRfcmVmID0gdmFsdWU7CisJcmV0dXJuIGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTA2LCB2YWx1ZSk7Cit9CisKK0VYUE9SVF9TWU1CT0woZGliODAwMF9zZXRfd2JkX3JlZik7CitzdGF0aWMgdm9pZCBkaWI4MDAwX3Jlc2V0X3BsbF9jb21tb24oc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCBjb25zdCBzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnICpidykKK3sKKwlkcHJpbnRrKCJpZnJlcTogJWQgJXgsIGludmVyc2lvbjogJWQiLCBidy0+aWZyZXEsIGJ3LT5pZnJlcSwgYnctPmlmcmVxID4+IDI1KTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIzLCAodTE2KSAoKChidy0+aW50ZXJuYWwgKiAxMDAwKSA+PiAxNikgJiAweGZmZmYpKTsJLyogUF9zZWNfbGVuICovCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNCwgKHUxNikgKChidy0+aW50ZXJuYWwgKiAxMDAwKSAmIDB4ZmZmZikpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcsICh1MTYpICgoYnctPmlmcmVxID4+IDE2KSAmIDB4MDFmZikpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjgsICh1MTYpIChidy0+aWZyZXEgJiAweGZmZmYpKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI2LCAodTE2KSAoKGJ3LT5pZnJlcSA+PiAyNSkgJiAweDAwMDMpKTsKKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTIyLCBidy0+c2FkX2NmZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjgwMDBfcmVzZXRfcGxsKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnICpwbGwgPSBzdGF0ZS0+Y2ZnLnBsbDsKKwl1MTYgY2xrX2NmZzE7CisKKwkvLyBjbGtfY2ZnMAorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTAxLCAocGxsLT5wbGxfcHJlZGl2IDw8IDgpIHwgKHBsbC0+cGxsX3JhdGlvIDw8IDApKTsKKworCS8vIGNsa19jZmcxCisJY2xrX2NmZzEgPSAoMSA8PCAxMCkgfCAoMCA8PCA5KSB8IChwbGwtPklPX0NMS19lbl9jb3JlIDw8IDgpIHwKKwkgICAgKHBsbC0+YnlwY2xrX2RpdiA8PCA1KSB8IChwbGwtPmVuYWJsZV9yZWZkaXYgPDwgNCkgfCAoMSA8PCAzKSB8IChwbGwtPnBsbF9yYW5nZSA8PCAxKSB8IChwbGwtPnBsbF9yZXNldCA8PCAwKTsKKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTAyLCBjbGtfY2ZnMSk7CisJY2xrX2NmZzEgPSAoY2xrX2NmZzEgJiAweGZmZjcpIHwgKHBsbC0+cGxsX2J5cGFzcyA8PCAzKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkwMiwgY2xrX2NmZzEpOworCisJZHByaW50aygiY2xrX2NmZzE6IDB4JTA0eCIsIGNsa19jZmcxKTsJLyogMHg1MDcgMSAwIDEgMDAwIDAgMCAxMSAxICovCisKKwkvKiBzbXBsX2NmZzogUF9yZWZjbGtzZWw9MiwgUF9lbnNtcGxzZWw9MSBub2RpdnNtcGw9MSAqLworCWlmIChzdGF0ZS0+Y2ZnLnBsbC0+QURDbGtTcmMgPT0gMCkKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDQsICgwIDw8IDE1KSB8ICgwIDw8IDEyKSB8ICgwIDw8IDEwKSB8IChwbGwtPm1vZHVsbyA8PCA4KSB8IChwbGwtPkFEQ2xrU3JjIDw8IDcpIHwgKDAgPDwgMSkpOworCWVsc2UgaWYgKHN0YXRlLT5jZmcucmVmY2xrc2VsICE9IDApCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTA0LAorCQkJCSAgICgwIDw8IDE1KSB8ICgxIDw8IDEyKSB8ICgoc3RhdGUtPmNmZy5yZWZjbGtzZWwgJiAweDMpIDw8IDEwKSB8IChwbGwtPm1vZHVsbyA8PCA4KSB8IChwbGwtPgorCQkJCQkJCQkJCQkJCQkJQURDbGtTcmMgPDwgNykgfCAoMCA8PCAxKSk7CisJZWxzZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkwNCwgKDAgPDwgMTUpIHwgKDEgPDwgMTIpIHwgKDMgPDwgMTApIHwgKHBsbC0+bW9kdWxvIDw8IDgpIHwgKHBsbC0+QURDbGtTcmMgPDwgNykgfCAoMCA8PCAxKSk7CisKKwlkaWI4MDAwX3Jlc2V0X3BsbF9jb21tb24oc3RhdGUsIHBsbCk7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9yZXNldF9ncGlvKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdCkKK3sKKwkvKiByZXNldCB0aGUgR1BJT3MgKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3QsIDEwMjksIHN0LT5jZmcuZ3Bpb19kaXIpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdCwgMTAzMCwgc3QtPmNmZy5ncGlvX3ZhbCk7CisKKwkvKiBUT0RPIDc4MiBpcyBQX2dwaW9fb2QgKi8KKworCWRpYjgwMDBfd3JpdGVfd29yZChzdCwgMTAzMiwgc3QtPmNmZy5ncGlvX3B3bV9wb3MpOworCisJZGliODAwMF93cml0ZV93b3JkKHN0LCAxMDM3LCBzdC0+Y2ZnLnB3bV9mcmVxX2Rpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9jZmdfZ3BpbyhzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3QsIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpCit7CisJc3QtPmNmZy5ncGlvX2RpciA9IGRpYjgwMDBfcmVhZF93b3JkKHN0LCAxMDI5KTsKKwlzdC0+Y2ZnLmdwaW9fZGlyICY9IH4oMSA8PCBudW0pOwkvKiByZXNldCB0aGUgZGlyZWN0aW9uIGJpdCAqLworCXN0LT5jZmcuZ3Bpb19kaXIgfD0gKGRpciAmIDB4MSkgPDwgbnVtOwkvKiBzZXQgdGhlIG5ldyBkaXJlY3Rpb24gKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3QsIDEwMjksIHN0LT5jZmcuZ3Bpb19kaXIpOworCisJc3QtPmNmZy5ncGlvX3ZhbCA9IGRpYjgwMDBfcmVhZF93b3JkKHN0LCAxMDMwKTsKKwlzdC0+Y2ZnLmdwaW9fdmFsICY9IH4oMSA8PCBudW0pOwkvKiByZXNldCB0aGUgZGlyZWN0aW9uIGJpdCAqLworCXN0LT5jZmcuZ3Bpb192YWwgfD0gKHZhbCAmIDB4MDEpIDw8IG51bTsJLyogc2V0IHRoZSBuZXcgdmFsdWUgKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3QsIDEwMzAsIHN0LT5jZmcuZ3Bpb192YWwpOworCisJZHByaW50aygiZ3BpbyBkaXI6ICV4OiBncGlvIHZhbDogJXgiLCBzdC0+Y2ZnLmdwaW9fZGlyLCBzdC0+Y2ZnLmdwaW9fdmFsKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGliODAwMF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlyZXR1cm4gZGliODAwMF9jZmdfZ3BpbyhzdGF0ZSwgbnVtLCBkaXIsIHZhbCk7Cit9CisKK0VYUE9SVF9TWU1CT0woZGliODAwMF9zZXRfZ3Bpbyk7CitzdGF0aWMgY29uc3QgdTE2IGRpYjgwMDBfZGVmYXVsdHNbXSA9IHsKKwkvKiBhdXRvIHNlYXJjaCBjb25maWd1cmF0aW9uIC0gbG9jazAgYnkgZGVmYXVsdCB3YWl0aW5nCisJICogZm9yIGNwaWxfbG9jazsgbG9jazEgY3BpbF9sb2NrOyBsb2NrMiB0bWNjX3N5bmNfbG9jayAqLworCTMsIDcsCisJMHgwMDA0LAorCTB4MDQwMCwKKwkweDA4MTQsCisKKwkxMiwgMTEsCisJMHgwMDFiLAorCTB4Nzc0MCwKKwkweDAwNWIsCisJMHg4ZDgwLAorCTB4MDFjOSwKKwkweGMzODAsCisJMHgwMDAwLAorCTB4MDA4MCwKKwkweDAwMDAsCisJMHgwMDkwLAorCTB4MDAwMSwKKwkweGQ0YzAsCisKKwkvKjEsIDMyLAorCSAgIDB4NjY4MCAvLyBQX2Nvcm1fdGhyZXMgTG9jayBhbGdvcml0aG1zIGNvbmZpZ3VyYXRpb24gKi8KKworCTExLCA4MCwJCQkvKiBzZXQgQURDIGxldmVsIHRvIC0xNiAqLworCSgxIDw8IDEzKSAtIDgyNSAtIDExNywKKwkoMSA8PCAxMykgLSA4MzcgLSAxMTcsCisJKDEgPDwgMTMpIC0gODExIC0gMTE3LAorCSgxIDw8IDEzKSAtIDc2NiAtIDExNywKKwkoMSA8PCAxMykgLSA3MzcgLSAxMTcsCisJKDEgPDwgMTMpIC0gNjkzIC0gMTE3LAorCSgxIDw8IDEzKSAtIDY0OCAtIDExNywKKwkoMSA8PCAxMykgLSA2MTkgLSAxMTcsCisJKDEgPDwgMTMpIC0gNTc1IC0gMTE3LAorCSgxIDw8IDEzKSAtIDUzMSAtIDExNywKKwkoMSA8PCAxMykgLSA1MDEgLSAxMTcsCisKKwk0LCAxMDgsCisJMCwKKwkwLAorCTAsCisJMCwKKworCTEsIDE3NSwKKwkweDA0MTAsCisJMSwgMTc5LAorCTgxOTIsCQkJLy8gUF9mZnRfbmJfdG9fY3V0CisKKwk2LCAxODEsCisJMHgyODAwLAkJCS8vIFBfY29mZl9jb3J0aHJlc18gKCAyayA0ayA4ayApIDB4MjgwMAorCTB4MjgwMCwKKwkweDI4MDAsCisJMHgyODAwLAkJCS8vIFBfY29mZl9jcGlsdGhyZXNfICggMmsgNGsgOGsgKSAweDI4MDAKKwkweDI4MDAsCisJMHgyODAwLAorCisJMiwgMTkzLAorCTB4MDY2NiwJCQkvLyBQX3BoYTNfdGhyZXMKKwkweDAwMDAsCQkJLy8gUF9jdGlfdXNlX2NwZSwgUF9jdGlfdXNlX3Byb2cKKworCTIsIDIwNSwKKwkweDIwMGYsCQkJLy8gUF9jc3B1X3JlZ3VsLCBQX2NzcHVfd2luX2N1dAorCTB4MDAwZiwJCQkvLyBQX2Rlc19zaGlmdF93b3JrCisKKwk1LCAyMTUsCisJMHgwMjNkLAkJCS8vIFBfYWRwX3JlZ3VsX2NudAorCTB4MDBhNCwJCQkvLyBQX2FkcF9ub2lzZV9jbnQKKwkweDAwYTQsCQkJLy8gUF9hZHBfcmVndWxfZXh0CisJMHg3ZmYwLAkJCS8vIFBfYWRwX25vaXNlX2V4dAorCTB4M2NjYywJCQkvLyBQX2FkcF9maWwKKworCTEsIDIzMCwKKwkweDAwMDAsCQkJLy8gUF8yZF9ieXBfdGlfbnVtCisKKwkxLCAyNjMsCisJMHg4MDAsCQkJLy9QX2VxdWFsX3RocmVzX3dnbgorCisJMSwgMjY4LAorCSgyIDw8IDkpIHwgMzksCQkvLyBQX2VxdWFsX2N0cmxfc3luY2hybywgUF9lcXVhbF9zcGVlZG1vZGUKKworCTEsIDI3MCwKKwkweDAwMDEsCQkJLy8gUF9kaXZfbG9jazBfd2FpdAorCTEsIDI4NSwKKwkweDAwMjAsCQkJLy9wX2ZlY18KKwkxLCAyOTksCisJMHgwMDYyLAkJCS8vIFBfc21vX21vZGUsIFBfc21vX3JzX2Rpc2NhcmQsIFBfc21vX2ZpZm9fZmx1c2gsIFBfc21vX3BpZF9wYXJzZSwgUF9zbW9fZXJyb3JfZGlzY2FyZAorCisJMSwgMzM4LAorCSgxIDw8IDEyKSB8CQkvLyBQX2N0cmxfY29ybV90aHJlczRwcmVfZnJlcV9pbmg9MQorCSAgICAoMSA8PCAxMCkgfAkJLy8gUF9jdHJsX3ByZV9mcmVxX21vZGVfc2F0PTEKKwkgICAgKDAgPDwgOSkgfAkJLy8gUF9jdHJsX3ByZV9mcmVxX2luaD0wCisJICAgICgzIDw8IDUpIHwJCS8vIFBfY3RybF9wcmVfZnJlcV9zdGVwPTMKKwkgICAgKDEgPDwgMCksCQkvLyBQX3ByZV9mcmVxX3dpbl9sZW49MQorCisJMSwgOTAzLAorCSgwIDw8IDQpIHwgMiwJCS8vIFBfZGl2Y2xrc2VsPTAgUF9kaXZiaXRzZWw9MiAod2FzIGNsaz0zLGJpdD0xIGZvciBNUFcpCisKKwkwLAorfTsKKworc3RhdGljIHUxNiBkaWI4MDAwX2lkZW50aWZ5KHN0cnVjdCBpMmNfZGV2aWNlICpjbGllbnQpCit7CisJdTE2IHZhbHVlOworCisJLy9iZWNhdXNlIG9mIGdsaXRjaGVzIHNvbWV0aW1lcworCXZhbHVlID0gZGliODAwMF9pMmNfcmVhZDE2KGNsaWVudCwgODk2KTsKKworCWlmICgodmFsdWUgPSBkaWI4MDAwX2kyY19yZWFkMTYoY2xpZW50LCA4OTYpKSAhPSAweDAxYjMpIHsKKwkJZHByaW50aygid3JvbmcgVmVuZG9yIElEIChyZWFkPTB4JXgpIiwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwl2YWx1ZSA9IGRpYjgwMDBfaTJjX3JlYWQxNihjbGllbnQsIDg5Nyk7CisJaWYgKHZhbHVlICE9IDB4ODAwMCAmJiB2YWx1ZSAhPSAweDgwMDEgJiYgdmFsdWUgIT0gMHg4MDAyKSB7CisJCWRwcmludGsoIndyb25nIERldmljZSBJRCAoJXgpIiwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSAweDgwMDA6CisJCWRwcmludGsoImZvdW5kIERpQjgwMDBBIik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAxOgorCQlkcHJpbnRrKCJmb3VuZCBEaUI4MDAwQiIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMjoKKwkJZHByaW50aygiZm91bmQgRGlCODAwMEMiKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMjg3LCAweDAwMDMpOwkvKiBzcmFtIGxlYWQgaW4sIHJkeSAqLworCisJaWYgKChzdGF0ZS0+cmV2aXNpb24gPSBkaWI4MDAwX2lkZW50aWZ5KCZzdGF0ZS0+aTJjKSkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RhdGUtPnJldmlzaW9uID09IDB4ODAwMCkKKwkJZHByaW50aygiZXJyb3IgOiBkaWI4MDAwIE1BIG5vdCBzdXBwb3J0ZWQiKTsKKworCWRpYngwMDBfcmVzZXRfaTJjX21hc3Rlcigmc3RhdGUtPmkyY19tYXN0ZXIpOworCisJZGliODAwMF9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCODAwME1fUE9XRVJfQUxMKTsKKworCS8qIGFsd2F5cyBsZWF2ZSB0aGUgVkJHIHZvbHRhZ2Ugb24gLSBpdCBjb25zdW1lcyBhbG1vc3Qgbm90aGluZyBidXQgdGFrZXMgYSBsb25nIHRpbWUgdG8gc3RhcnQgKi8KKwlkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3RhdGUsIERJQlgwMDBfVkJHX0VOQUJMRSk7CisKKwkvKiByZXN0YXJ0IGFsbCBwYXJ0cyAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcwLCAweGZmZmYpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcxLCAweGZmZmYpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcyLCAweGZmZmMpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgODk4LCAweDAwMGMpOwkvLyBzYWQKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODAsIDB4MDA0ZCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMjgxLCAweDAwMGMpOworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzAsIDB4MDAwMCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzEsIDB4MDAwMCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzIsIDB4MDAwMCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA4OTgsIDB4MDAwNCk7CS8vIHNhZAorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTI4MCwgMHgwMDAwKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODEsIDB4MDAwMCk7CisKKwkvKiBkcml2ZXMgKi8KKwlpZiAoc3RhdGUtPmNmZy5kcml2ZXMpCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTA2LCBzdGF0ZS0+Y2ZnLmRyaXZlcyk7CisJZWxzZSB7CisJCWRwcmludGsoInVzaW5nIHN0YW5kYXJkIFBBRC1kcml2ZS1zZXR0aW5ncywgcGxlYXNlIGFkanVzdCBzZXR0aW5ncyBpbiBjb25maWctc3RydWN0IHRvIGJlIG9wdGltYWwuIik7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTA2LCAweDJkOTgpOwkvLyBtaW4gZHJpdmUgU0RSQU0gLSBub3Qgb3B0aW1hbCAtIGFkanVzdAorCX0KKworCWRpYjgwMDBfcmVzZXRfcGxsKHN0YXRlKTsKKworCWlmIChkaWI4MDAwX3Jlc2V0X2dwaW8oc3RhdGUpICE9IDApCisJCWRwcmludGsoIkdQSU8gcmVzZXQgd2FzIG5vdCBzdWNjZXNzZnVsLiIpOworCisJaWYgKGRpYjgwMDBfc2V0X291dHB1dF9tb2RlKHN0YXRlLCBPVVRNT0RFX0hJR0hfWikgIT0gMCkKKwkJZHByaW50aygiT1VUUFVUX01PREUgY291bGQgbm90IGJlIHJlc2V0dGVkLiIpOworCisJc3RhdGUtPmN1cnJlbnRfYWdjID0gTlVMTDsKKworCS8vIFBfaXFjX2FscGhhX3BoYSwgUF9pcWNfYWxwaGFfYW1wLCBQX2lxY19kY2NfYWxwaGEsIC4uLgorCS8qIFBfaXFjX2NhMiA9IDA7IFBfaXFjX2ltcG5jX29uID0gMDsgUF9pcWNfbW9kZSA9IDA7ICovCisJaWYgKHN0YXRlLT5jZmcucGxsLT5pZnJlcSA9PSAwKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDQwLCAweDA3NTUpOwkvKiBQX2lxY19jb3JyX2luaCA9IDAgZW5hYmxlIElRY29yciBibG9jayAqLworCWVsc2UKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA0MCwgMHgxZjU1KTsJLyogUF9pcWNfY29ycl9pbmggPSAxIGRpc2FibGUgSVFjb3JyIGJsb2NrICovCisKKwl7CisJCXUxNiBsID0gMCwgcjsKKwkJY29uc3QgdTE2ICpuOworCQluID0gZGliODAwMF9kZWZhdWx0czsKKwkJbCA9ICpuKys7CisJCXdoaWxlIChsKSB7CisJCQlyID0gKm4rKzsKKwkJCWRvIHsKKwkJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIHIsICpuKyspOworCQkJCXIrKzsKKwkJCX0gd2hpbGUgKC0tbCk7CisJCQlsID0gKm4rKzsKKwkJfQorCX0KKwlzdGF0ZS0+aXNkYnRfY2ZnX2xvYWRlZCA9IDA7CisKKwkvL2Rpdl9jZmcgb3ZlcnJpZGUgZm9yIHNwZWNpYWwgY29uZmlncworCWlmIChzdGF0ZS0+Y2ZnLmRpdl9jZmcgIT0gMCkKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDMsIHN0YXRlLT5jZmcuZGl2X2NmZyk7CisKKwkvKiB1bmZvcmNlIGRpdnN0ciByZWdhcmRsZXNzIHdoZXRoZXIgaTJjIGVudW1lcmF0aW9uIHdhcyBkb25lIG9yIG5vdCAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTI4NSwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDEyODUpICYgfigxIDw8IDEpKTsKKworCWRpYjgwMDBfc2V0X2JhbmR3aWR0aChzdGF0ZSwgNjAwMCk7CisKKwlkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3RhdGUsIERJQlgwMDBfU0xPV19BRENfT04pOworCWRpYjgwMDBfc2FkX2NhbGliKHN0YXRlKTsKKwlkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3RhdGUsIERJQlgwMDBfU0xPV19BRENfT0ZGKTsKKworCWRpYjgwMDBfc2V0X3Bvd2VyX21vZGUoc3RhdGUsIERJQjgwMDBNX1BPV0VSX0lOVEVSRkFDRV9PTkxZKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWI4MDAwX3Jlc3RhcnRfYWdjKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKK3sKKwkvLyBQX3Jlc3RhcnRfaXFjICYgUF9yZXN0YXJ0X2FnYworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcwLCAweDBhMDApOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcwLCAweDAwMDApOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfdXBkYXRlX2xuYShzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUpCit7CisJdTE2IGR5bl9nYWluOworCisJaWYgKHN0YXRlLT5jZmcudXBkYXRlX2xuYSkgeworCQkvLyByZWFkIGR5bl9nYWluIGhlcmUgKGJlY2F1c2UgaXQgaXMgZGVtb2QtZGVwZW5kZW50IGFuZCBub3QgdHVuZXIpCisJCWR5bl9nYWluID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDM5MCk7CisKKwkJaWYgKHN0YXRlLT5jZmcudXBkYXRlX2xuYSgmc3RhdGUtPmZlLCBkeW5fZ2FpbikpIHsJLy8gTE5BIGhhcyBjaGFuZ2VkCisJCQlkaWI4MDAwX3Jlc3RhcnRfYWdjKHN0YXRlKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2V0X2FnY19jb25maWcoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCB1OCBiYW5kKQoreworCXN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgKmFnYyA9IE5VTEw7CisJaW50IGk7CisJaWYgKHN0YXRlLT5jdXJyZW50X2JhbmQgPT0gYmFuZCAmJiBzdGF0ZS0+Y3VycmVudF9hZ2MgIT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJc3RhdGUtPmN1cnJlbnRfYmFuZCA9IGJhbmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPmNmZy5hZ2NfY29uZmlnX2NvdW50OyBpKyspCisJCWlmIChzdGF0ZS0+Y2ZnLmFnY1tpXS5iYW5kX2NhcHMgJiBiYW5kKSB7CisJCQlhZ2MgPSAmc3RhdGUtPmNmZy5hZ2NbaV07CisJCQlicmVhazsKKwkJfQorCisJaWYgKGFnYyA9PSBOVUxMKSB7CisJCWRwcmludGsoIm5vIHZhbGlkIEFHQyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciBiYW5kIDB4JTAyeCIsIGJhbmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGF0ZS0+Y3VycmVudF9hZ2MgPSBhZ2M7CisKKwkvKiBBR0MgKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc2LCBhZ2MtPnNldHVwKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc3LCBhZ2MtPmludl9nYWluKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc4LCBhZ2MtPnRpbWVfc3RhYmlsaXopOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTAxLCAoYWdjLT5hbHBoYV9sZXZlbCA8PCAxMikgfCBhZ2MtPnRobG9jayk7CisKKwkvLyBEZW1vZCBBR0MgbG9vcCBjb25maWd1cmF0aW9uCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMDIsIChhZ2MtPmFscGhhX21hbnQgPDwgNSkgfCBhZ2MtPmFscGhhX2V4cCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMDMsIChhZ2MtPmJldGFfbWFudCA8PCA2KSB8IGFnYy0+YmV0YV9leHApOworCisJZHByaW50aygiV0JEOiByZWY6ICVkLCBzZWw6ICVkLCBhY3RpdmU6ICVkLCBhbHBoYTogJWQiLAorCQlzdGF0ZS0+d2JkX3JlZiAhPSAwID8gc3RhdGUtPndiZF9yZWYgOiBhZ2MtPndiZF9yZWYsIGFnYy0+d2JkX3NlbCwgIWFnYy0+cGVyZm9ybV9hZ2Nfc29mdHNwbGl0LCBhZ2MtPndiZF9zZWwpOworCisJLyogQUdDIGNvbnRpbnVlZCAqLworCWlmIChzdGF0ZS0+d2JkX3JlZiAhPSAwKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEwNiwgc3RhdGUtPndiZF9yZWYpOworCWVsc2UJCQkvLyB1c2UgZGVmYXVsdAorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEwNiwgYWdjLT53YmRfcmVmKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEwNywgKGFnYy0+d2JkX2FscGhhIDw8IDkpIHwgKGFnYy0+cGVyZm9ybV9hZ2Nfc29mdHNwbGl0IDw8IDgpKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEwOCwgYWdjLT5hZ2MxX21heCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMDksIGFnYy0+YWdjMV9taW4pOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTEwLCBhZ2MtPmFnYzJfbWF4KTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDExMSwgYWdjLT5hZ2MyX21pbik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMTIsIChhZ2MtPmFnYzFfcHQxIDw8IDgpIHwgYWdjLT5hZ2MxX3B0Mik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMTMsIChhZ2MtPmFnYzFfc2xvcGUxIDw8IDgpIHwgYWdjLT5hZ2MxX3Nsb3BlMik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMTQsIChhZ2MtPmFnYzJfcHQxIDw8IDgpIHwgYWdjLT5hZ2MyX3B0Mik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMTUsIChhZ2MtPmFnYzJfc2xvcGUxIDw8IDgpIHwgYWdjLT5hZ2MyX3Nsb3BlMik7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc1LCBhZ2MtPmFnYzFfcHQzKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkyMywgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA5MjMpICYgMHhmZmUzKSB8IChhZ2MtPndiZF9pbnYgPDwgNCkgfCAoYWdjLT53YmRfc2VsIDw8IDIpKTsJLypMQiA6IDkyOSAtPiA5MjMgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfYWdjX3NvZnRfc3BsaXQoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlKQoreworCXUxNiBhZ2MsIHNwbGl0X29mZnNldDsKKworCWlmICghc3RhdGUtPmN1cnJlbnRfYWdjIHx8ICFzdGF0ZS0+Y3VycmVudF9hZ2MtPnBlcmZvcm1fYWdjX3NvZnRzcGxpdCB8fCBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1heCA9PSAwKQorCQlyZXR1cm4gRkVfQ0FMTEJBQ0tfVElNRV9ORVZFUjsKKworCS8vIG5fYWdjX2dsb2JhbAorCWFnYyA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAzOTApOworCisJaWYgKGFnYyA+IHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWluX3RocmVzKQorCQlzcGxpdF9vZmZzZXQgPSBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1pbjsKKwllbHNlIGlmIChhZ2MgPCBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1heF90aHJlcykKKwkJc3BsaXRfb2Zmc2V0ID0gc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5tYXg7CisJZWxzZQorCQlzcGxpdF9vZmZzZXQgPSBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1heCAqCisJCSAgICAoYWdjIC0gc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5taW5fdGhyZXMpIC8gKHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWF4X3RocmVzIC0gc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5taW5fdGhyZXMpOworCisJZHByaW50aygiQUdDIHNwbGl0X29mZnNldDogJWQiLCBzcGxpdF9vZmZzZXQpOworCisJLy8gUF9hZ2NfZm9yY2Vfc3BsaXQgYW5kIFBfYWdjX3NwbGl0X29mZnNldAorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTA3LCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDEwNykgJiAweGZmMDApIHwgc3BsaXRfb2Zmc2V0KTsKKwlyZXR1cm4gNTAwMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX2FnY19zdGFydHVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSAqdHVuZV9zdGF0ZSA9ICZzdGF0ZS0+dHVuZV9zdGF0ZTsKKworCWludCByZXQgPSAwOworCisJc3dpdGNoICgqdHVuZV9zdGF0ZSkgeworCWNhc2UgQ1RfQUdDX1NUQVJUOgorCQkvLyBzZXQgcG93ZXItdXAgbGV2ZWw6IGludGVyZithbmFsb2crQUdDCisKKwkJZGliODAwMF9zZXRfYWRjX3N0YXRlKHN0YXRlLCBESUJYMDAwX0FEQ19PTik7CisKKwkJaWYgKGRpYjgwMDBfc2V0X2FnY19jb25maWcoc3RhdGUsICh1bnNpZ25lZCBjaGFyKShCQU5EX09GX0ZSRVFVRU5DWShmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeSAvIDEwMDApKSkgIT0gMCkgeworCQkJKnR1bmVfc3RhdGUgPSBDVF9BR0NfU1RPUDsKKwkJCXN0YXRlLT5zdGF0dXMgPSBGRV9TVEFUVVNfVFVORV9GQUlMRUQ7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IDcwOworCQkqdHVuZV9zdGF0ZSA9IENUX0FHQ19TVEVQXzA7CisJCWJyZWFrOworCisJY2FzZSBDVF9BR0NfU1RFUF8wOgorCQkvL0FHQyBpbml0aWFsaXphdGlvbgorCQlpZiAoc3RhdGUtPmNmZy5hZ2NfY29udHJvbCkKKwkJCXN0YXRlLT5jZmcuYWdjX2NvbnRyb2woJnN0YXRlLT5mZSwgMSk7CisKKwkJZGliODAwMF9yZXN0YXJ0X2FnYyhzdGF0ZSk7CisKKwkJLy8gd2FpdCBBR0Mgcm91Z2ggbG9jayB0aW1lCisJCXJldCA9IDUwOworCQkqdHVuZV9zdGF0ZSA9IENUX0FHQ19TVEVQXzE7CisJCWJyZWFrOworCisJY2FzZSBDVF9BR0NfU1RFUF8xOgorCQkvLyB3YWl0IEFHQyBhY2N1cmF0ZSBsb2NrIHRpbWUKKwkJcmV0ID0gNzA7CisKKwkJaWYgKGRpYjgwMDBfdXBkYXRlX2xuYShzdGF0ZSkpCisJCQkvLyB3YWl0IG9ubHkgQUdDIHJvdWdoIGxvY2sgdGltZQorCQkJcmV0ID0gNTA7CisJCWVsc2UKKwkJCSp0dW5lX3N0YXRlID0gQ1RfQUdDX1NURVBfMjsKKwkJYnJlYWs7CisKKwljYXNlIENUX0FHQ19TVEVQXzI6CisJCWRpYjgwMDBfYWdjX3NvZnRfc3BsaXQoc3RhdGUpOworCisJCWlmIChzdGF0ZS0+Y2ZnLmFnY19jb250cm9sKQorCQkJc3RhdGUtPmNmZy5hZ2NfY29udHJvbCgmc3RhdGUtPmZlLCAwKTsKKworCQkqdHVuZV9zdGF0ZSA9IENUX0FHQ19TVE9QOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBkaWI4MDAwX2FnY19zb2Z0X3NwbGl0KHN0YXRlKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIHZvaWQgZGliODAwMF91cGRhdGVfdGltZihzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUpCit7CisJdTMyIHRpbWYgPSBzdGF0ZS0+dGltZiA9IGRpYjgwMDBfcmVhZDMyKHN0YXRlLCA0MzUpOworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyOSwgKHUxNikgKHRpbWYgPj4gMTYpKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDMwLCAodTE2KSAodGltZiAmIDB4ZmZmZikpOworCWRwcmludGsoIlVwZGF0ZWQgdGltaW5nIGZyZXF1ZW5jeTogJWQgKGRlZmF1bHQ6ICVkKSIsIHN0YXRlLT50aW1mLCBzdGF0ZS0+dGltZl9kZWZhdWx0KTsKK30KKworc3RhdGljIHZvaWQgZGliODAwMF9zZXRfY2hhbm5lbChzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIHU4IHNlcSwgdTggYXV0b3NlYXJjaGluZykKK3sKKwl1MTYgbW9kZSwgbWF4X2NvbnN0ZWxsYXRpb24sIHNlZ19kaWZmX21hc2sgPSAwLCBuYnNlZ19kaWZmID0gMDsKKwl1OCBndWFyZCwgY3JhdGUsIGNvbnN0ZWxsYXRpb24sIHRpbWVJOworCXU4IHBlcm11X3NlZ1tdID0geyA2LCA1LCA3LCA0LCA4LCAzLCA5LCAyLCAxMCwgMSwgMTEsIDAsIDEyIH07CisJdTE2IGksIGNvZWZmWzRdLCBQX2Nmcl9sZWZ0X2VkZ2UgPSAwLCBQX2Nmcl9yaWdodF9lZGdlID0gMCwgc2VnX21hc2sxMyA9IDB4MWZmZjsJLy8gQWxsIDEzIHNlZ21lbnRzIGVuYWJsZWQKKwljb25zdCBzMTYgKm5jb2VmZiwgKmFuYV9mZTsKKwl1MTYgdG1jY19wb3cgPSAwOworCXUxNiBjb2ZmX3BvdyA9IDB4MjgwMDsKKwl1MTYgaW5pdF9wcmJzID0gMHhmZmY7CisJdTE2IGFuYV9nYWluID0gMDsKKwl1MTYgYWRjX3RhcmdldF8xNmRCWzExXSA9IHsKKwkJKDEgPDwgMTMpIC0gODI1IC0gMTE3LAorCQkoMSA8PCAxMykgLSA4MzcgLSAxMTcsCisJCSgxIDw8IDEzKSAtIDgxMSAtIDExNywKKwkJKDEgPDwgMTMpIC0gNzY2IC0gMTE3LAorCQkoMSA8PCAxMykgLSA3MzcgLSAxMTcsCisJCSgxIDw8IDEzKSAtIDY5MyAtIDExNywKKwkJKDEgPDwgMTMpIC0gNjQ4IC0gMTE3LAorCQkoMSA8PCAxMykgLSA2MTkgLSAxMTcsCisJCSgxIDw8IDEzKSAtIDU3NSAtIDExNywKKwkJKDEgPDwgMTMpIC0gNTMxIC0gMTE3LAorCQkoMSA8PCAxMykgLSA1MDEgLSAxMTcKKwl9OworCisJaWYgKHN0YXRlLT5iZXJfbW9uaXRvcmVkX2xheWVyICE9IExBWUVSX0FMTCkKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyODUsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjg1KSAmIDB4NjApIHwgc3RhdGUtPmJlcl9tb25pdG9yZWRfbGF5ZXIpOworCWVsc2UKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyODUsIGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyODUpICYgMHg2MCk7CisKKwlpID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI2KSAmIDE7CS8vIFBfZGRzX2ludnNwZWMKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI2LCBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmludmVyc2lvbiBeIGkpOworCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSkgeworCQkvL2NvbXB1dGUgbmV3IGRkc19mcmVxIGZvciB0aGUgc2VnIGFuZCBhZGp1c3QgcHJicworCQlpbnQgc2VnX29mZnNldCA9CisJCSAgICBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfaWR4IC0gKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAvIDIpIC0KKwkJICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgJSAyKTsKKwkJaW50IGNsayA9IHN0YXRlLT5jZmcucGxsLT5pbnRlcm5hbDsKKwkJdTMyIHNlZ3RvZGRzID0gKCh1MzIpICg0MzAgPDwgMjMpIC8gY2xrKSA8PCAzOwkvLyBzZWd0b2RkcyA9IFNlZ0JXIC8gRmNsayAqIHBvdygyLDI2KQorCQlpbnQgZGRzX29mZnNldCA9IHNlZ19vZmZzZXQgKiBzZWd0b2RkczsKKwkJaW50IG5ld19kZHMsIHN1Yl9jaGFubmVsOworCQlpZiAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpID09IDApCS8vIGlmIGV2ZW4KKwkJCWRkc19vZmZzZXQgLT0gKGludCkoc2VndG9kZHMgLyAyKTsKKworCQlpZiAoc3RhdGUtPmNmZy5wbGwtPmlmcmVxID09IDApIHsKKwkJCWlmICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pbnZlcnNpb24gXiBpKSA9PSAwKSB7CisJCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNiwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI2KSB8IDEpOworCQkJCW5ld19kZHMgPSBkZHNfb2Zmc2V0OworCQkJfSBlbHNlCisJCQkJbmV3X2RkcyA9IGRkc19vZmZzZXQ7CisKKwkJCS8vIFdlIHNoaWZ0IHR1bmluZyBmcmVxdWVuY3kgaWYgdGhlIHdhbnRlZCBzZWdtZW50IGlzIDoKKwkJCS8vICAtIHRoZSBzZWdtZW50IG9mIGNlbnRlciBmcmVxdWVuY3kgd2l0aCBhbiBvZGQgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzCisJCQkvLyAgLSB0aGUgc2VnbWVudCB0byB0aGUgbGVmdCBvZiBjZW50ZXIgZnJlcXVlbmN5IHdpdGggYW4gZXZlbiB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMKKwkJCS8vICAtIHRoZSBzZWdtZW50IHRvIHRoZSByaWdodCBvZiBjZW50ZXIgZnJlcXVlbmN5IHdpdGggYW4gZXZlbiB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMKKwkJCWlmICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPT0gU1lTX0lTREJUKSAmJiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpCisJCQkgICAgJiYKKwkJCSAgICAoKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgJSAyKQorCQkJICAgICAgJiYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggPT0KKwkJCQkgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50IC8gMikgKyAxKSkpCisJCQkgICAgIHx8ICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpID09IDApCisJCQkJICYmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09IChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgLyAyKSkpCisJCQkgICAgIHx8ICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpID09IDApCisJCQkJICYmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09CisJCQkJICAgICAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAvIDIpICsgMSkpKQorCQkJICAgICkpIHsKKwkJCQluZXdfZGRzIC09ICgodTMyKSAoODUwIDw8IDIyKSAvIGNsaykgPDwgNDsJLy8gbmV3X2RkcyA9IDg1MCAoZnJlcSBzaGlmdCBpbiBLSHopIC8gRmNsayAqIHBvdygyLDI2KQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmludmVyc2lvbiBeIGkpID09IDApCisJCQkJbmV3X2RkcyA9IHN0YXRlLT5jZmcucGxsLT5pZnJlcSAtIGRkc19vZmZzZXQ7CisJCQllbHNlCisJCQkJbmV3X2RkcyA9IHN0YXRlLT5jZmcucGxsLT5pZnJlcSArIGRkc19vZmZzZXQ7CisJCX0KKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNywgKHUxNikgKChuZXdfZGRzID4+IDE2KSAmIDB4MDFmZikpOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4LCAodTE2KSAobmV3X2RkcyAmIDB4ZmZmZikpOworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50ICUgMikJLy8gaWYgb2RkCisJCQlzdWJfY2hhbm5lbCA9ICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zdWJjaGFubmVsICsgKDMgKiBzZWdfb2Zmc2V0KSArIDEpICUgNDEpIC8gMzsKKwkJZWxzZQkJLy8gaWYgZXZlbgorCQkJc3ViX2NoYW5uZWwgPSAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc3ViY2hhbm5lbCArICgzICogc2VnX29mZnNldCkpICUgNDEpIC8gMzsKKwkJc3ViX2NoYW5uZWwgLT0gNjsKKworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV8ySworCQkgICAgfHwgc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV80SykgeworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyMTksIGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyMTkpIHwgMHgxKTsJLy9hZHBfcGFzcyA9MQorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxOTAsIGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAxOTApIHwgKDB4MSA8PCAxNCkpOwkvL3BoYTNfZm9yY2VfcGhhX3NoaWZ0ID0gMQorCQl9IGVsc2UgeworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyMTksIGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyMTkpICYgMHhmZmZlKTsJLy9hZHBfcGFzcyA9MAorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxOTAsIGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAxOTApICYgMHhiZmZmKTsJLy9waGEzX2ZvcmNlX3BoYV9zaGlmdCA9IDAKKwkJfQorCisJCXN3aXRjaCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSkgeworCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgorCQkJc3dpdGNoIChzdWJfY2hhbm5lbCkgeworCQkJY2FzZSAtNjoKKwkJCQlpbml0X3ByYnMgPSAweDA7CisJCQkJYnJlYWs7CS8vIDQxLCAwLCAxCisJCQljYXNlIC01OgorCQkJCWluaXRfcHJicyA9IDB4NDIzOworCQkJCWJyZWFrOwkvLyAwMn4wNAorCQkJY2FzZSAtNDoKKwkJCQlpbml0X3ByYnMgPSAweDk7CisJCQkJYnJlYWs7CS8vIDA1fjA3CisJCQljYXNlIC0zOgorCQkJCWluaXRfcHJicyA9IDB4NUM3OworCQkJCWJyZWFrOwkvLyAwOH4xMAorCQkJY2FzZSAtMjoKKwkJCQlpbml0X3ByYnMgPSAweDdBNjsKKwkJCQlicmVhazsJLy8gMTF+MTMKKwkJCWNhc2UgLTE6CisJCQkJaW5pdF9wcmJzID0gMHgzRDg7CisJCQkJYnJlYWs7CS8vIDE0fjE2CisJCQljYXNlIDA6CisJCQkJaW5pdF9wcmJzID0gMHg1Mjc7CisJCQkJYnJlYWs7CS8vIDE3fjE5CisJCQljYXNlIDE6CisJCQkJaW5pdF9wcmJzID0gMHg3RkY7CisJCQkJYnJlYWs7CS8vIDIwfjIyCisJCQljYXNlIDI6CisJCQkJaW5pdF9wcmJzID0gMHg3OUI7CisJCQkJYnJlYWs7CS8vIDIzfjI1CisJCQljYXNlIDM6CisJCQkJaW5pdF9wcmJzID0gMHgzRDY7CisJCQkJYnJlYWs7CS8vIDI2fjI4CisJCQljYXNlIDQ6CisJCQkJaW5pdF9wcmJzID0gMHgzQTI7CisJCQkJYnJlYWs7CS8vIDI5fjMxCisJCQljYXNlIDU6CisJCQkJaW5pdF9wcmJzID0gMHg1M0I7CisJCQkJYnJlYWs7CS8vIDMyfjM0CisJCQljYXNlIDY6CisJCQkJaW5pdF9wcmJzID0gMHgyRjQ7CisJCQkJYnJlYWs7CS8vIDM1fjM3CisJCQlkZWZhdWx0OgorCQkJY2FzZSA3OgorCQkJCWluaXRfcHJicyA9IDB4MjEzOworCQkJCWJyZWFrOwkvLyAzOH40MAorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzoKKwkJCXN3aXRjaCAoc3ViX2NoYW5uZWwpIHsKKwkJCWNhc2UgLTY6CisJCQkJaW5pdF9wcmJzID0gMHgwOworCQkJCWJyZWFrOwkvLyA0MSwgMCwgMQorCQkJY2FzZSAtNToKKwkJCQlpbml0X3ByYnMgPSAweDIwODsKKwkJCQlicmVhazsJLy8gMDJ+MDQKKwkJCWNhc2UgLTQ6CisJCQkJaW5pdF9wcmJzID0gMHhDMzsKKwkJCQlicmVhazsJLy8gMDV+MDcKKwkJCWNhc2UgLTM6CisJCQkJaW5pdF9wcmJzID0gMHg3Qjk7CisJCQkJYnJlYWs7CS8vIDA4fjEwCisJCQljYXNlIC0yOgorCQkJCWluaXRfcHJicyA9IDB4NDIzOworCQkJCWJyZWFrOwkvLyAxMX4xMworCQkJY2FzZSAtMToKKwkJCQlpbml0X3ByYnMgPSAweDVDNzsKKwkJCQlicmVhazsJLy8gMTR+MTYKKwkJCWNhc2UgMDoKKwkJCQlpbml0X3ByYnMgPSAweDNEODsKKwkJCQlicmVhazsJLy8gMTd+MTkKKwkJCWNhc2UgMToKKwkJCQlpbml0X3ByYnMgPSAweDdGRjsKKwkJCQlicmVhazsJLy8gMjB+MjIKKwkJCWNhc2UgMjoKKwkJCQlpbml0X3ByYnMgPSAweDNENjsKKwkJCQlicmVhazsJLy8gMjN+MjUKKwkJCWNhc2UgMzoKKwkJCQlpbml0X3ByYnMgPSAweDUzQjsKKwkJCQlicmVhazsJLy8gMjZ+MjgKKwkJCWNhc2UgNDoKKwkJCQlpbml0X3ByYnMgPSAweDIxMzsKKwkJCQlicmVhazsJLy8gMjl+MzEKKwkJCWNhc2UgNToKKwkJCQlpbml0X3ByYnMgPSAweDI5OworCQkJCWJyZWFrOwkvLyAzMn4zNAorCQkJY2FzZSA2OgorCQkJCWluaXRfcHJicyA9IDB4RDA7CisJCQkJYnJlYWs7CS8vIDM1fjM3CisJCQlkZWZhdWx0OgorCQkJY2FzZSA3OgorCQkJCWluaXRfcHJicyA9IDB4NDhFOworCQkJCWJyZWFrOwkvLyAzOH40MAorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzoKKwkJCXN3aXRjaCAoc3ViX2NoYW5uZWwpIHsKKwkJCWNhc2UgLTY6CisJCQkJaW5pdF9wcmJzID0gMHgwOworCQkJCWJyZWFrOwkvLyA0MSwgMCwgMQorCQkJY2FzZSAtNToKKwkJCQlpbml0X3ByYnMgPSAweDc0MDsKKwkJCQlicmVhazsJLy8gMDJ+MDQKKwkJCWNhc2UgLTQ6CisJCQkJaW5pdF9wcmJzID0gMHgwNjk7CisJCQkJYnJlYWs7CS8vIDA1fjA3CisJCQljYXNlIC0zOgorCQkJCWluaXRfcHJicyA9IDB4N0REOworCQkJCWJyZWFrOwkvLyAwOH4xMAorCQkJY2FzZSAtMjoKKwkJCQlpbml0X3ByYnMgPSAweDIwODsKKwkJCQlicmVhazsJLy8gMTF+MTMKKwkJCWNhc2UgLTE6CisJCQkJaW5pdF9wcmJzID0gMHg3Qjk7CisJCQkJYnJlYWs7CS8vIDE0fjE2CisJCQljYXNlIDA6CisJCQkJaW5pdF9wcmJzID0gMHg1Qzc7CisJCQkJYnJlYWs7CS8vIDE3fjE5CisJCQljYXNlIDE6CisJCQkJaW5pdF9wcmJzID0gMHg3RkY7CisJCQkJYnJlYWs7CS8vIDIwfjIyCisJCQljYXNlIDI6CisJCQkJaW5pdF9wcmJzID0gMHg1M0I7CisJCQkJYnJlYWs7CS8vIDIzfjI1CisJCQljYXNlIDM6CisJCQkJaW5pdF9wcmJzID0gMHgyOTsKKwkJCQlicmVhazsJLy8gMjZ+MjgKKwkJCWNhc2UgNDoKKwkJCQlpbml0X3ByYnMgPSAweDQ4RTsKKwkJCQlicmVhazsJLy8gMjl+MzEKKwkJCWNhc2UgNToKKwkJCQlpbml0X3ByYnMgPSAweDRDNDsKKwkJCQlicmVhazsJLy8gMzJ+MzQKKwkJCWNhc2UgNjoKKwkJCQlpbml0X3ByYnMgPSAweDM2NzsKKwkJCQlicmVhazsJLy8gMzN+MzcKKwkJCWRlZmF1bHQ6CisJCQljYXNlIDc6CisJCQkJaW5pdF9wcmJzID0gMHg2ODQ7CisJCQkJYnJlYWs7CS8vIDM4fjQwCisJCQl9CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CQkvLyBpZiBub3Qgc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcsICh1MTYpICgoc3RhdGUtPmNmZy5wbGwtPmlmcmVxID4+IDE2KSAmIDB4MDFmZikpOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4LCAodTE2KSAoc3RhdGUtPmNmZy5wbGwtPmlmcmVxICYgMHhmZmZmKSk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjYsICh1MTYpICgoc3RhdGUtPmNmZy5wbGwtPmlmcmVxID4+IDI1KSAmIDB4MDAwMykpOworCX0KKwkvKlBfbW9kZSA9PSA/PyAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTAsIChzZXEgPDwgNCkpOworCS8vICBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4NywgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyODcpICYgMHhlMDAwKSB8IDB4MTAwMCk7CisKKwlzd2l0Y2ggKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwpIHsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMzI6CisJCWd1YXJkID0gMDsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OgorCQlndWFyZCA9IDE7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgorCQlndWFyZCA9IDI7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV80OgorCWRlZmF1bHQ6CisJCWd1YXJkID0gMzsKKwkJYnJlYWs7CisJfQorCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxLCAoaW5pdF9wcmJzIDw8IDIpIHwgKGd1YXJkICYgMHgzKSk7CS8vIEFERFIgMQorCisJbWF4X2NvbnN0ZWxsYXRpb24gPSBEUVBTSzsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXN3aXRjaCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5tb2R1bGF0aW9uKSB7CisJCWNhc2UgRFFQU0s6CisJCQljb25zdGVsbGF0aW9uID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFFQU0s6CisJCQljb25zdGVsbGF0aW9uID0gMTsKKwkJCWJyZWFrOworCQljYXNlIFFBTV8xNjoKKwkJCWNvbnN0ZWxsYXRpb24gPSAyOworCQkJYnJlYWs7CisJCWNhc2UgUUFNXzY0OgorCQlkZWZhdWx0OgorCQkJY29uc3RlbGxhdGlvbiA9IDM7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5mZWMpIHsKKwkJY2FzZSBGRUNfMV8yOgorCQkJY3JhdGUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgRkVDXzJfMzoKKwkJCWNyYXRlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIEZFQ18zXzQ6CisJCQljcmF0ZSA9IDM7CisJCQlicmVhazsKKwkJY2FzZSBGRUNfNV82OgorCQkJY3JhdGUgPSA1OworCQkJYnJlYWs7CisJCWNhc2UgRkVDXzdfODoKKwkJZGVmYXVsdDoKKwkJCWNyYXRlID0gNzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLmludGVybGVhdmluZyA+IDApICYmCisJCSAgICAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uaW50ZXJsZWF2aW5nIDw9IDMpIHx8CisJCSAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uaW50ZXJsZWF2aW5nID09IDQgJiYgc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpKQorCQkgICAgKQorCQkJdGltZUkgPSBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLmludGVybGVhdmluZzsKKwkJZWxzZQorCQkJdGltZUkgPSAwOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIgKyBpLCAoY29uc3RlbGxhdGlvbiA8PCAxMCkgfCAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uc2VnbWVudF9jb3VudCAmIDB4ZikgPDwgNikgfAorCQkJCSAgIChjcmF0ZSA8PCAzKSB8IHRpbWVJKTsKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uc2VnbWVudF9jb3VudCA+IDApIHsKKwkJCXN3aXRjaCAobWF4X2NvbnN0ZWxsYXRpb24pIHsKKwkJCWNhc2UgRFFQU0s6CisJCQljYXNlIFFQU0s6CisJCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbiA9PSBRQU1fMTYgfHwKKwkJCQkgICAgc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5tb2R1bGF0aW9uID09IFFBTV82NCkKKwkJCQkJbWF4X2NvbnN0ZWxsYXRpb24gPSBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb247CisJCQkJYnJlYWs7CisJCQljYXNlIFFBTV8xNjoKKwkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5tb2R1bGF0aW9uID09IFFBTV82NCkKKwkJCQkJbWF4X2NvbnN0ZWxsYXRpb24gPSBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb247CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwltb2RlID0gZmZ0X3RvX21vZGUoc3RhdGUpOworCisJLy9kaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDUsIDEzKTsgLypwX2xhc3Rfc2VnID0gMTMqLworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzQsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjc0KSAmIDB4ZmZjZikgfAorCQkJICAgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uICYgMSkgPDwgNSkgfCAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuCisJCQkJCQkJCQkJCQkgaXNkYnRfc2JfbW9kZSAmIDEpIDw8IDQpKTsKKworCWRwcmludGsoIm1vZGUgPSAlZCA7IGd1YXJkID0gJWQiLCBtb2RlLCBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsKTsKKworCS8qIHNpZ25hbCBvcHRpbWl6YXRpb24gcGFyYW1ldGVyICovCisKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbikgeworCQlzZWdfZGlmZl9tYXNrID0gKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0ubW9kdWxhdGlvbiA9PSBEUVBTSykgPDwgcGVybXVfc2VnWzBdOworCQlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKQorCQkJbmJzZWdfZGlmZiArPQorCQkJICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPT0gRFFQU0spICogc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5zZWdtZW50X2NvdW50OworCQlmb3IgKGkgPSAwOyBpIDwgbmJzZWdfZGlmZjsgaSsrKQorCQkJc2VnX2RpZmZfbWFzayB8PSAxIDw8IHBlcm11X3NlZ1tpICsgMV07CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCW5ic2VnX2RpZmYgKz0KKwkJCSAgICAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5tb2R1bGF0aW9uID09IERRUFNLKSAqIHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uc2VnbWVudF9jb3VudDsKKwkJZm9yIChpID0gMDsgaSA8IG5ic2VnX2RpZmY7IGkrKykKKwkJCXNlZ19kaWZmX21hc2sgfD0gMSA8PCBwZXJtdV9zZWdbaV07CisJfQorCWRwcmludGsoIm5ic2VnX2RpZmYgPSAlWCAoJWQpIiwgc2VnX2RpZmZfbWFzaywgc2VnX2RpZmZfbWFzayk7CisKKwlzdGF0ZS0+ZGlmZmVyZW50aWFsX2NvbnN0ZWxsYXRpb24gPSAoc2VnX2RpZmZfbWFzayAhPSAwKTsKKwlkaWI4MDAwX3NldF9kaXZlcnNpdHlfaW4oJnN0YXRlLT5mZSwgc3RhdGUtPmRpdmVyc2l0eV9vbm9mZik7CisKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpIHsJLy8gSVNEQi1Uc2IKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPT0gMSkJLy8gMy1zZWdtZW50cworCQkJc2VnX21hc2sxMyA9IDB4MDBFMDsKKwkJZWxzZQkJLy8gMS1zZWdtZW50CisJCQlzZWdfbWFzazEzID0gMHgwMDQwOworCX0gZWxzZQorCQlzZWdfbWFzazEzID0gMHgxZmZmOworCisJLy8gV1JJVEU6IE1vZGUgJiBEaWZmIG1hc2sKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDAsIChtb2RlIDw8IDEzKSB8IHNlZ19kaWZmX21hc2spOworCisJaWYgKChzZWdfZGlmZl9tYXNrKSB8fCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlKSkKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNjgsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjY4KSAmIDB4RjlGRikgfCAweDAyMDApOworCWVsc2UKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNjgsICgyIDw8IDkpIHwgMzkpOwkvL2luaXQgdmFsdWUKKworCS8vIC0tLS0gU01BTEwgLS0tLQorCS8vIFBfc21hbGxfc2VnX2RpZmYKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM1Miwgc2VnX2RpZmZfbWFzayk7CS8vIEFERFIgMzUyCisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM1Mywgc2VnX21hc2sxMyk7CS8vIEFERFIgMzUzCisKKy8qICAgICAvLyBQX3NtYWxsX25hcnJvd19iYW5kPTAsIFBfc21hbGxfbGFzdF9zZWc9MTMsIFBfc21hbGxfb2Zmc2V0X251bV9jYXI9NSAqLworCS8vIGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzUxLCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlIDw8IDgpIHwgKDEzIDw8IDQpIHwgNSApOworCisJLy8gLS0tLSBTTUFMTCAtLS0tCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKSB7CisJCXN3aXRjaCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSkgeworCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgorCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPT0gMCkgewkvLyAxLXNlZworCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPT0gRFFQU0spCS8vIERRUFNLCisJCQkJCW5jb2VmZiA9IGNvZWZmXzJrX3NiXzFzZWdfZHFwc2s7CisJCQkJZWxzZQkvLyBRUFNLIG9yIFFBTQorCQkJCQluY29lZmYgPSBjb2VmZl8ya19zYl8xc2VnOworCQkJfSBlbHNlIHsJLy8gMy1zZWdtZW50cworCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPT0gRFFQU0spIHsJLy8gRFFQU0sgb24gY2VudHJhbCBzZWdtZW50CisJCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPT0gRFFQU0spCS8vIERRUFNLIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl8ya19zYl8zc2VnXzBkcXBza18xZHFwc2s7CisJCQkJCWVsc2UJLy8gUVBTSyBvciBRQU0gb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzJrX3NiXzNzZWdfMGRxcHNrOworCQkJCX0gZWxzZSB7CS8vIFFQU0sgb3IgUUFNIG9uIGNlbnRyYWwgc2VnbWVudAorCQkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5tb2R1bGF0aW9uID09IERRUFNLKQkvLyBEUVBTSyBvbiBleHRlcm5hbCBzZWdtZW50cworCQkJCQkJbmNvZWZmID0gY29lZmZfMmtfc2JfM3NlZ18xZHFwc2s7CisJCQkJCWVsc2UJLy8gUVBTSyBvciBRQU0gb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzJrX3NiXzNzZWc7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzoKKwkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApIHsJLy8gMS1zZWcKKwkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID09IERRUFNLKQkvLyBEUVBTSworCQkJCQluY29lZmYgPSBjb2VmZl80a19zYl8xc2VnX2RxcHNrOworCQkJCWVsc2UJLy8gUVBTSyBvciBRQU0KKwkJCQkJbmNvZWZmID0gY29lZmZfNGtfc2JfMXNlZzsKKwkJCX0gZWxzZSB7CS8vIDMtc2VnbWVudHMKKwkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID09IERRUFNLKSB7CS8vIERRUFNLIG9uIGNlbnRyYWwgc2VnbWVudAorCQkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5tb2R1bGF0aW9uID09IERRUFNLKSB7CS8vIERRUFNLIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl80a19zYl8zc2VnXzBkcXBza18xZHFwc2s7CisJCQkJCX0gZWxzZSB7CS8vIFFQU0sgb3IgUUFNIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl80a19zYl8zc2VnXzBkcXBzazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CS8vIFFQU0sgb3IgUUFNIG9uIGNlbnRyYWwgc2VnbWVudAorCQkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5tb2R1bGF0aW9uID09IERRUFNLKSB7CS8vIERRUFNLIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl80a19zYl8zc2VnXzFkcXBzazsKKwkJCQkJfSBlbHNlCS8vIFFQU0sgb3IgUUFNIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl80a19zYl8zc2VnOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfQVVUTzoKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzoKKwkJZGVmYXVsdDoKKwkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApIHsJLy8gMS1zZWcKKwkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID09IERRUFNLKQkvLyBEUVBTSworCQkJCQluY29lZmYgPSBjb2VmZl84a19zYl8xc2VnX2RxcHNrOworCQkJCWVsc2UJLy8gUVBTSyBvciBRQU0KKwkJCQkJbmNvZWZmID0gY29lZmZfOGtfc2JfMXNlZzsKKwkJCX0gZWxzZSB7CS8vIDMtc2VnbWVudHMKKwkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID09IERRUFNLKSB7CS8vIERRUFNLIG9uIGNlbnRyYWwgc2VnbWVudAorCQkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5tb2R1bGF0aW9uID09IERRUFNLKSB7CS8vIERRUFNLIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl84a19zYl8zc2VnXzBkcXBza18xZHFwc2s7CisJCQkJCX0gZWxzZSB7CS8vIFFQU0sgb3IgUUFNIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl84a19zYl8zc2VnXzBkcXBzazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CS8vIFFQU0sgb3IgUUFNIG9uIGNlbnRyYWwgc2VnbWVudAorCQkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5tb2R1bGF0aW9uID09IERRUFNLKSB7CS8vIERRUFNLIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl84a19zYl8zc2VnXzFkcXBzazsKKwkJCQkJfSBlbHNlCS8vIFFQU0sgb3IgUUFNIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl84a19zYl8zc2VnOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzQzICsgaSwgbmNvZWZmW2ldKTsKKworCS8vIFBfc21hbGxfY29lZl9leHRfZW5hYmxlPUlTREItVHNiLCBQX3NtYWxsX25hcnJvd19iYW5kPUlTREItVHNiLCBQX3NtYWxsX2xhc3Rfc2VnPTEzLCBQX3NtYWxsX29mZnNldF9udW1fY2FyPTUKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM1MSwKKwkJCSAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPDwgOSkgfCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlIDw8IDgpIHwgKDEzIDw8IDQpIHwgNSk7CisKKwkvLyAtLS0tIENPRkYgLS0tLQorCS8vIENhcmxvZmYsIHRoZSBtb3N0IHJvYnVzdAorCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkgewkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAtIHVzZSBib3RoIFRNQ0MgYW5kIEFDIHBpbG90cworCisJCS8vIFBfY29mZl9jcGlsX2FscGhhPTQsIFBfY29mZl9pbmg9MCwgUF9jb2ZmX2NwaWxfd2lubGVuPTY0CisJCS8vIFBfY29mZl9uYXJyb3dfYmFuZD0xLCBQX2NvZmZfc3F1YXJlX3ZhbD0xLCBQX2NvZmZfb25lX3NlZz1+cGFydGlhbF9yY3B0LCBQX2NvZmZfdXNlX3RtY2M9MSwgUF9jb2ZmX3VzZV9hYz0xCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg3LAorCQkJCSAgICg0IDw8IDEyKSB8ICgwIDw8IDExKSB8ICg2MyA8PCA1KSB8ICgweDMgPDwgMykgfCAoKH5zdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uICYgMSkgPDwgMikKKwkJCQkgICB8IDB4Myk7CisKKy8qICAgICAgICAgICAgIC8vIFBfc21hbGxfY29lZl9leHRfZW5hYmxlID0gMSAqLworLyogICAgICAgICAgICAgZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNTEsIGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAzNTEpIHwgMHgyMDApOyAqLworCisJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApIHsJLy8gU291bmQgQnJvYWRjYXN0aW5nIG1vZGUgMSBzZWcKKworCQkJLy8gUF9jb2ZmX3dpbmxlbj02MywgUF9jb2ZmX3RocmVzX2xvY2s9MTUsIFBfY29mZl9vbmVfc2VnX3dpZHRoPSAoUF9tb2RlID09IDMpICwgUF9jb2ZmX29uZV9zZWdfc3ltPSAoUF9tb2RlLTEpCisJCQlpZiAobW9kZSA9PSAzKQorCQkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgwLCAweDFmY2YgfCAoKG1vZGUgLSAxKSA8PCAxNCkpOworCQkJZWxzZQorCQkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgwLCAweDBmY2YgfCAoKG1vZGUgLSAxKSA8PCAxNCkpOworCQkJLy8gUF9jdHJsX2Nvcm1fdGhyZXM0cHJlX2ZyZXFfaW5oPTEsUF9jdHJsX3ByZV9mcmVxX21vZGVfc2F0PTEsCisJCQkvLyBQX2N0cmxfcHJlX2ZyZXFfaW5oPTAsIFBfY3RybF9wcmVfZnJlcV9zdGVwID0gNSwgUF9wcmVfZnJlcV93aW5fbGVuPTQKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzM4LCAoMSA8PCAxMikgfCAoMSA8PCAxMCkgfCAoMCA8PCA5KSB8ICg1IDw8IDUpIHwgNCk7CisJCQkvLyBQX2N0cmxfcHJlX2ZyZXFfd2luX2xlbj0xNiwgUF9jdHJsX3ByZV9mcmVxX3RocmVzX2xvY2tpbj04CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM0MCwgKDE2IDw8IDYpIHwgKDggPDwgMCkpOworCQkJLy8gUF9jdHJsX3ByZV9mcmVxX3RocmVzX2xvY2tvdXQ9NiwgUF9zbWFsbF91c2VfdG1jYy9hYy9jcD0xCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM0MSwgKDYgPDwgMykgfCAoMSA8PCAyKSB8ICgxIDw8IDEpIHwgKDEgPDwgMCkpOworCisJCQkvLyBQX2NvZmZfY29ydGhyZXNfOGssIDRrLCAyayBhbmQgUF9jb2ZmX2NwaWx0aHJlc184aywgNGssIDJrCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MSwgMzAwKTsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgyLCAxNTApOworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODMsIDgwKTsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg0LCAzMDApOworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODUsIDE1MCk7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4NiwgODApOworCQl9IGVsc2UgewkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAzIHNlZworCQkJLy8gUF9jb2ZmX29uZV9zZWdfc3ltPSAxLCBQX2NvZmZfb25lX3NlZ193aWR0aD0gMSwgUF9jb2ZmX3dpbmxlbj02MywgUF9jb2ZmX3RocmVzX2xvY2s9MTUKKwkJCS8qICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAzKSAqLworCQkJLyogICAgICAgICAgICAgICAgICAgICBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MCwgMHgyZmNhIHwgKCgwKSA8PCAxNCkpOyAqLworCQkJLyogICAgICAgICAgICAgICAgIGVsc2UgKi8KKwkJCS8qICAgICAgICAgICAgICAgICAgICAgZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODAsIDB4MmZjYSB8ICgoMSkgPDwgMTQpKTsgKi8KKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgwLCAweDFmY2YgfCAoMSA8PCAxNCkpOworCisJCQkvLyBQX2N0cmxfY29ybV90aHJlczRwcmVfZnJlcV9pbmggPSAxLCBQX2N0cmxfcHJlX2ZyZXFfbW9kZV9zYXQ9MSwKKwkJCS8vIFBfY3RybF9wcmVfZnJlcV9pbmg9MCwgUF9jdHJsX3ByZV9mcmVxX3N0ZXAgPSA0LCBQX3ByZV9mcmVxX3dpbl9sZW49NAorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMzgsICgxIDw8IDEyKSB8ICgxIDw8IDEwKSB8ICgwIDw8IDkpIHwgKDQgPDwgNSkgfCA0KTsKKwkJCS8vIFBfY3RybF9wcmVfZnJlcV93aW5fbGVuPTE2LCBQX2N0cmxfcHJlX2ZyZXFfdGhyZXNfbG9ja2luPTgKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzQwLCAoMTYgPDwgNikgfCAoOCA8PCAwKSk7CisJCQkvL1BfY3RybF9wcmVfZnJlcV90aHJlc19sb2Nrb3V0PTYsIFBfc21hbGxfdXNlX3RtY2MvYWMvY3A9MQorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNDEsICg2IDw8IDMpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApKTsKKworCQkJLy8gUF9jb2ZmX2NvcnRocmVzXzhrLCA0aywgMmsgYW5kIFBfY29mZl9jcGlsdGhyZXNfOGssIDRrLCAyaworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODEsIDM1MCk7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MiwgMzAwKTsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgzLCAyNTApOworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODQsIDM1MCk7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4NSwgMzAwKTsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg2LCAyNTApOworCQl9CisKKwl9IGVsc2UgaWYgKHN0YXRlLT5pc2RidF9jZmdfbG9hZGVkID09IDApIHsJLy8gaWYgbm90IFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDogcHV0IGRlZmF1bHQgdmFsdWVzIGZvciAxMyBzZWdtZW50cworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MCwgKDE2IDw8IDYpIHwgOSk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg3LCAoNCA8PCAxMikgfCAoOCA8PCA1KSB8IDB4Mik7CisJCWNvZmZfcG93ID0gMHgyODAwOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODEgKyBpLCBjb2ZmX3Bvdyk7CisKKwkJLy8gUF9jdHJsX2Nvcm1fdGhyZXM0cHJlX2ZyZXFfaW5oPTEsIFBfY3RybF9wcmVfZnJlcV9tb2RlX3NhdD0xLAorCQkvLyBQX2N0cmxfcHJlX2ZyZXFfbW9kZV9zYXQ9MSwgUF9jdHJsX3ByZV9mcmVxX2luaD0wLCBQX2N0cmxfcHJlX2ZyZXFfc3RlcCA9IDMsIFBfcHJlX2ZyZXFfd2luX2xlbj0xCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzM4LCAoMSA8PCAxMikgfCAoMSA8PCAxMCkgfCAoMCA8PCA5KSB8ICgzIDw8IDUpIHwgMSk7CisKKwkJLy8gUF9jdHJsX3ByZV9mcmVxX3dpbl9sZW49OCwgUF9jdHJsX3ByZV9mcmVxX3RocmVzX2xvY2tpbj02CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzQwLCAoOCA8PCA2KSB8ICg2IDw8IDApKTsKKwkJLy8gUF9jdHJsX3ByZV9mcmVxX3RocmVzX2xvY2tvdXQ9NCwgUF9zbWFsbF91c2VfdG1jYy9hYy9jcD0xCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzQxLCAoNCA8PCAzKSB8ICgxIDw8IDIpIHwgKDEgPDwgMSkgfCAoMSA8PCAwKSk7CisJfQorCS8vIC0tLS0gRkZUIC0tLS0KKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEgJiYgc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAwKQkvLyAxLXNlZworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE3OCwgNjQpOwkvLyBQX2ZmdF9wb3dyYW5nZT02NAorCWVsc2UKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxNzgsIDMyKTsJLy8gUF9mZnRfcG93cmFuZ2U9MzIKKworCS8qIG1ha2UgdGhlIGNwaWxfY29mZl9sb2NrIG1vcmUgcm9idXN0IGJ1dCBzbG93ZXIgcF9jb2ZmX3dpbmxlbgorCSAqIDZiaXRzOyBwX2NvZmZfdGhyZXNfbG9jayA2Yml0cyAoZm9yIGNvZmYgbG9jayBpZiBuZWVkZWQpCisJICovCisJLyogaWYgKCAoIG5ic2VnX2RpZmY+MCkmJihuYnNlZ19kaWZmPDEzKSkKKwkgICBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4NywgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAxODcpICYgMHhmZmZiKSB8ICgxIDw8IDMpKTsgKi8KKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg5LCB+c2VnX21hc2sxMyB8IHNlZ19kaWZmX21hc2spOwkvKiBQX2xtb2Q0X3NlZ19pbmggICAgICAgKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE5MiwgfnNlZ19tYXNrMTMgfCBzZWdfZGlmZl9tYXNrKTsJLyogUF9waGEzX3NlZ19pbmggICAgICAgICovCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyMjUsIH5zZWdfbWFzazEzIHwgc2VnX2RpZmZfbWFzayk7CS8qIFBfdGFjX3NlZ19pbmggICAgICAgICAqLworCWlmICgoIXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSkgJiYgKHN0YXRlLT5jZmcucGxsLT5pZnJlcSA9PSAwKSkKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNjYsIH5zZWdfbWFzazEzIHwgc2VnX2RpZmZfbWFzayB8IDB4NDApOwkvKiBQX2VxdWFsX25vaXNlX3NlZ19pbmggKi8KKwllbHNlCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjY2LCB+c2VnX21hc2sxMyB8IHNlZ19kaWZmX21hc2spOwkvKiBQX2VxdWFsX25vaXNlX3NlZ19pbmggKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4NywgfnNlZ19tYXNrMTMgfCAweDEwMDApOwkvKiBQX3RtY2Nfc2VnX2luaCAgICAgICAgKi8KKwkvL2RpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjg4LCB+c2VnX21hc2sxMyB8IHNlZ19kaWZmX21hc2spOyAvKiBQX3RtY2Nfc2VnX2VxX2luaCAqLworCWlmICghYXV0b3NlYXJjaGluZykKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyODgsICh+c2VnX21hc2sxMyB8IHNlZ19kaWZmX21hc2spICYgMHgxZmZmKTsJLyogUF90bWNjX3NlZ19lcV9pbmggKi8KKwllbHNlCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjg4LCAweDFmZmYpOwkvL2Rpc2FibGUgZXF1YWxpc2F0aW9uIG9mIHRoZSB0bWNjIHdoZW4gYXV0b3NlYXJjaCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIERRUFNLIGNoYW5uZWxzLgorCWRwcmludGsoIjI4NyA9ICVYICglZCkiLCB+c2VnX21hc2sxMyB8IDB4MTAwMCwgfnNlZ19tYXNrMTMgfCAweDEwMDApOworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyMTEsIHNlZ19tYXNrMTMgJiAofnNlZ19kaWZmX21hc2spKTsJLyogUF9kZXNfc2VnX2VuYWJsZWQgICAgICovCisKKwkvKiBvZmZzZXQgbG9vcCBwYXJhbWV0ZXJzICovCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKSB7CisJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApCS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDEgc2VnCisJCQkvKiBQX3RpbWZfYWxwaGEgPSAoMTEtUF9tb2RlKSwgUF9jb3JtX2FscGhhPTYsIFBfY29ybV90aHJlcz0weDgwICovCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDMyLCAoKDExIC0gbW9kZSkgPDwgMTIpIHwgKDYgPDwgOCkgfCAweDQwKTsKKworCQllbHNlCQkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAzIHNlZworCQkJLyogUF90aW1mX2FscGhhID0gKDEwLVBfbW9kZSksIFBfY29ybV9hbHBoYT02LCBQX2Nvcm1fdGhyZXM9MHg4MCAqLworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMiwgKCgxMCAtIG1vZGUpIDw8IDEyKSB8ICg2IDw8IDgpIHwgMHg2MCk7CisJfSBlbHNlCisJCS8vIFRPRE8gaW4gMTMgc2VnLCB0aW1mX2FscGhhIGNhbiBhbHdheXMgYmUgdGhlIHNhbWUgb3Igbm90ID8KKwkJLyogUF90aW1mX2FscGhhID0gKDktUF9tb2RlLCBQX2Nvcm1fYWxwaGE9NiwgUF9jb3JtX3RocmVzPTB4ODAgKi8KKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMiwgKCg5IC0gbW9kZSkgPDwgMTIpIHwgKDYgPDwgOCkgfCAweDgwKTsKKworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkgeworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAwKQkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAxIHNlZworCQkJLyogUF9jdHJsX3BoYV9vZmZfbWF4PTMgICBQX2N0cmxfc2ZyZXFfaW5oID0wICBQX2N0cmxfc2ZyZXFfc3RlcCA9ICgxMS1QX21vZGUpICAqLworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNywgKDMgPDwgNSkgfCAoMCA8PCA0KSB8ICgxMCAtIG1vZGUpKTsKKworCQllbHNlCQkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAzIHNlZworCQkJLyogUF9jdHJsX3BoYV9vZmZfbWF4PTMgICBQX2N0cmxfc2ZyZXFfaW5oID0wICBQX2N0cmxfc2ZyZXFfc3RlcCA9ICgxMC1QX21vZGUpICAqLworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNywgKDMgPDwgNSkgfCAoMCA8PCA0KSB8ICg5IC0gbW9kZSkpOworCX0gZWxzZQorCQkvKiBQX2N0cmxfcGhhX29mZl9tYXg9MyAgIFBfY3RybF9zZnJlcV9pbmggPTAgIFBfY3RybF9zZnJlcV9zdGVwID0gOSAgKi8KKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNywgKDMgPDwgNSkgfCAoMCA8PCA0KSB8ICg4IC0gbW9kZSkpOworCisJLyogUF9kdnN5X3N5bmNfd2FpdCAtIHJldXNlIG1vZGUgKi8KKwlzd2l0Y2ggKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUpIHsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgorCQltb2RlID0gMjU2OworCQlicmVhazsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzRLOgorCQltb2RlID0gMTI4OworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6CisJCW1vZGUgPSA2NDsKKwkJYnJlYWs7CisJfQorCWlmIChzdGF0ZS0+Y2ZnLmRpdmVyc2l0eV9kZWxheSA9PSAwKQorCQltb2RlID0gKG1vZGUgKiAoMSA8PCAoZ3VhcmQpKSAqIDMpIC8gMiArIDQ4OwkvLyBhZGQgNTAlIFNGTiBtYXJnaW4gKyBjb21wZW5zYXRlIGZvciBvbmUgRFZTWS1maWZvCisJZWxzZQorCQltb2RlID0gKG1vZGUgKiAoMSA8PCAoZ3VhcmQpKSAqIDMpIC8gMiArIHN0YXRlLT5jZmcuZGl2ZXJzaXR5X2RlbGF5OwkvLyBhZGQgNTAlIFNGTiBtYXJnaW4gKyBjb21wZW5zYXRlIGZvciBEVlNZLWZpZm8KKwltb2RlIDw8PSA0OworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjczLCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI3MykgJiAweDAwMGYpIHwgbW9kZSk7CisKKwkvKiBjaGFubmVsIGVzdGltYXRpb24gZmluZSBjb25maWd1cmF0aW9uICovCisJc3dpdGNoIChtYXhfY29uc3RlbGxhdGlvbikgeworCWNhc2UgUUFNXzY0OgorCQlhbmFfZ2FpbiA9IDB4NzsJLy8gLTEgOiBhdm9pZCBkZWZfZXN0IHNhdHVyYXRpb24gd2hlbiBBREMgdGFyZ2V0IGlzIC0xNmRCCisJCWNvZWZmWzBdID0gMHgwMTQ4OwkvKiBQX2FkcF9yZWd1bF9jbnQgMC4wNCAqLworCQljb2VmZlsxXSA9IDB4ZmZmMDsJLyogUF9hZHBfbm9pc2VfY250IC0wLjAwMiAqLworCQljb2VmZlsyXSA9IDB4MDBhNDsJLyogUF9hZHBfcmVndWxfZXh0IDAuMDIgKi8KKwkJY29lZmZbM10gPSAweGZmZjg7CS8qIFBfYWRwX25vaXNlX2V4dCAtMC4wMDEgKi8KKwkJLy9pZiAoIXN0YXRlLT5jZmcuaG9zdGJ1c19kaXZlcnNpdHkpIC8vaWYgZGl2ZXJzaXR5LCB3ZSBzaG91bGQgcHJlaGFwcyB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1heF9jb25zdGFsbGF0aW9uIC0xCisJCWJyZWFrOworCWNhc2UgUUFNXzE2OgorCQlhbmFfZ2FpbiA9IDB4NzsJLy8gLTEgOiBhdm9pZCBkZWZfZXN0IHNhdHVyYXRpb24gd2hlbiBBREMgdGFyZ2V0IGlzIC0xNmRCCisJCWNvZWZmWzBdID0gMHgwMjNkOwkvKiBQX2FkcF9yZWd1bF9jbnQgMC4wNyAqLworCQljb2VmZlsxXSA9IDB4ZmZkZjsJLyogUF9hZHBfbm9pc2VfY250IC0wLjAwNCAqLworCQljb2VmZlsyXSA9IDB4MDBhNDsJLyogUF9hZHBfcmVndWxfZXh0IDAuMDIgKi8KKwkJY29lZmZbM10gPSAweGZmZjA7CS8qIFBfYWRwX25vaXNlX2V4dCAtMC4wMDIgKi8KKwkJLy9pZiAoISgoc3RhdGUtPmNmZy5ob3N0YnVzX2RpdmVyc2l0eSkgJiYgKG1heF9jb25zdGVsbGF0aW9uID09IFFBTV8xNikpKQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlhbmFfZ2FpbiA9IDA7CS8vIDAgOiBnb2VzIGFsb25nIHdpdGggQURDIHRhcmdldCBhdCAtMjJkQiB0byBrZWVwIGdvb2QgbW9iaWxlIHBlcmZvcm1hbmNlIGFuZCBsb2NrIGF0IHNlbnNpdGl2aXR5IGxldmVsCisJCWNvZWZmWzBdID0gMHgwOTlhOwkvKiBQX2FkcF9yZWd1bF9jbnQgMC4zICovCisJCWNvZWZmWzFdID0gMHhmZmFlOwkvKiBQX2FkcF9ub2lzZV9jbnQgLTAuMDEgKi8KKwkJY29lZmZbMl0gPSAweDAzMzM7CS8qIFBfYWRwX3JlZ3VsX2V4dCAwLjEgKi8KKwkJY29lZmZbM10gPSAweGZmZjg7CS8qIFBfYWRwX25vaXNlX2V4dCAtMC4wMDIgKi8KKwkJYnJlYWs7CisJfQorCWZvciAobW9kZSA9IDA7IG1vZGUgPCA0OyBtb2RlKyspCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjE1ICsgbW9kZSwgY29lZmZbbW9kZV0pOworCisJLy8gdXBkYXRlIGFuYV9nYWluIGRlcGVuZGluZyBvbiBtYXggY29uc3RlbGxhdGlvbgorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTE2LCBhbmFfZ2Fpbik7CisJLy8gdXBkYXRlIEFEQyB0YXJnZXQgZGVwZW5kaW5nIG9uIGFuYV9nYWluCisJaWYgKGFuYV9nYWluKSB7CQkvLyBzZXQgLTE2ZEIgQURDIHRhcmdldCBmb3IgYW5hX2dhaW49LTEKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDgwICsgaSwgYWRjX3RhcmdldF8xNmRCW2ldKTsKKwl9IGVsc2UgewkJLy8gc2V0IC0yMmRCIEFEQyB0YXJnZXQgZm9yIGFuYV9nYWluPTAKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDgwICsgaSwgYWRjX3RhcmdldF8xNmRCW2ldIC0gMzU1KTsKKwl9CisKKwkvLyAtLS0tIEFOQV9GRSAtLS0tCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSkgeworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAxKQkvLyAzLXNlZ21lbnRzCisJCQlhbmFfZmUgPSBhbmFfZmVfY29lZmZfM3NlZzsKKwkJZWxzZQkJLy8gMS1zZWdtZW50CisJCQlhbmFfZmUgPSBhbmFfZmVfY29lZmZfMXNlZzsKKwl9IGVsc2UKKwkJYW5hX2ZlID0gYW5hX2ZlX2NvZWZmXzEzc2VnOworCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxIHx8IHN0YXRlLT5pc2RidF9jZmdfbG9hZGVkID09IDApCisJCWZvciAobW9kZSA9IDA7IG1vZGUgPCAyNDsgbW9kZSsrKQorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMTcgKyBtb2RlLCBhbmFfZmVbbW9kZV0pOworCisJLy8gLS0tLSBDSEFOX0JMSyAtLS0tCisJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspIHsKKwkJaWYgKCgoKH5zZWdfZGlmZl9tYXNrKSA+PiBpKSAmIDEpID09IDEpIHsKKwkJCVBfY2ZyX2xlZnRfZWRnZSArPSAoMSA8PCBpKSAqICgoaSA9PSAwKSB8fCAoKCgoc2VnX21hc2sxMyAmICh+c2VnX2RpZmZfbWFzaykpID4+IChpIC0gMSkpICYgMSkgPT0gMCkpOworCQkJUF9jZnJfcmlnaHRfZWRnZSArPSAoMSA8PCBpKSAqICgoaSA9PSAxMikgfHwgKCgoKHNlZ19tYXNrMTMgJiAofnNlZ19kaWZmX21hc2spKSA+PiAoaSArIDEpKSAmIDEpID09IDApKTsKKwkJfQorCX0KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIyMiwgUF9jZnJfbGVmdF9lZGdlKTsJLy8gUF9jZnJfbGVmdF9lZGdlCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyMjMsIFBfY2ZyX3JpZ2h0X2VkZ2UpOwkvLyBQX2Nmcl9yaWdodF9lZGdlCisJLy8gIlBfY3NwdV9sZWZ0X2VkZ2UiICBub3QgdXNlZCA9PiBkbyBub3QgY2FyZQorCS8vICJQX2NzcHVfcmlnaHRfZWRnZSIgbm90IHVzZWQgPT4gZG8gbm90IGNhcmUKKworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkgewkvLyBJU0RCLVRzYgorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIyOCwgMSk7CS8vIFBfMmRfbW9kZV9ieXA9MQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIwNSwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDIwNSkgJiAweGZmZjApOwkvLyBQX2NzcHVfd2luX2N1dCA9IDAKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPT0gMAkvLyAxLXNlZ21lbnQKKwkJICAgICYmIHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfMkspIHsKKwkJCS8vZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyMTksIGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyMTkpICYgMHhmZmZlKTsgLy8gUF9hZHBfcGFzcyA9IDAKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjY1LCAxNSk7CS8vIFBfZXF1YWxfbm9pc2Vfc2VsID0gMTUKKwkJfQorCX0gZWxzZSBpZiAoc3RhdGUtPmlzZGJ0X2NmZ19sb2FkZWQgPT0gMCkgeworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIyOCwgMCk7CS8vIGRlZmF1bHQgdmFsdWUKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNjUsIDMxKTsJLy8gZGVmYXVsdCB2YWx1ZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIwNSwgMHgyMDBmKTsJLy8gaW5pdCB2YWx1ZQorCX0KKwkvLyAtLS0tIFRNQ0MgLS0tLQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCXRtY2NfcG93ICs9CisJCSAgICAoKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPT0gRFFQU0spICogNCArIDEpICogc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5zZWdtZW50X2NvdW50KTsKKwkvLyBRdWFudGlmIG9mICJQX3RtY2NfZGVjX3RocmVzXz9rIiBpcyAoMCwgNSttb2RlLCA5KTsKKwkvLyBUaHJlc2hvbGQgaXMgc2V0IGF0IDEvNCBvZiBtYXggcG93ZXIuCisJdG1jY19wb3cgKj0gKDEgPDwgKDkgLSAyKSk7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI5MCwgdG1jY19wb3cpOwkvLyBQX3RtY2NfZGVjX3RocmVzXzJrCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyOTEsIHRtY2NfcG93KTsJLy8gUF90bWNjX2RlY190aHJlc180aworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjkyLCB0bWNjX3Bvdyk7CS8vIFBfdG1jY19kZWNfdGhyZXNfOGsKKwkvL2RpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjg3LCAoMSA8PCAxMykgfCAweDEwMDAgKTsKKwkvLyAtLS0tIFBIQTMgLS0tLQorCisJaWYgKHN0YXRlLT5pc2RidF9jZmdfbG9hZGVkID09IDApCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjUwLCAzMjg1KTsJLypwXzJkX2hzcGVlZF90aHIwICovCisKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpCisJCXN0YXRlLT5pc2RidF9jZmdfbG9hZGVkID0gMDsKKwllbHNlCisJCXN0YXRlLT5pc2RidF9jZmdfbG9hZGVkID0gMTsKKworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfYXV0b3NlYXJjaF9zdGFydChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwl1OCBmYWN0b3I7CisJdTMyIHZhbHVlOworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaW50IHNsaXN0ID0gMDsKKworCXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaW52ZXJzaW9uID0gMDsKKwlpZiAoIXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSkKKwkJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5zZWdtZW50X2NvdW50ID0gMTM7CisJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID0gUUFNXzY0OworCXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uZmVjID0gRkVDXzJfMzsKKwlzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLmludGVybGVhdmluZyA9IDA7CisKKwkvL2Nob29zZSB0aGUgcmlnaHQgbGlzdCwgaW4gc2IsIGFsd2F5cyBkbyBldmVyeXRoaW5nCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSkgeworCQlzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7CisJCXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzg7CisJCXNsaXN0ID0gNzsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAwLCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDApICYgMHg5ZmZmKSB8ICgxIDw8IDEzKSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwgPT0gR1VBUkRfSU5URVJWQUxfQVVUTykgeworCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfQVVUTykgeworCQkJCXNsaXN0ID0gNzsKKwkJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDAsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMCkgJiAweDlmZmYpIHwgKDEgPDwgMTMpKTsJLy8gUF9tb2RlID0gMSB0byBoYXZlIGF1dG9zZWFyY2ggc3RhcnQgb2sgd2l0aCBtb2RlMgorCQkJfSBlbHNlCisJCQkJc2xpc3QgPSAzOworCQl9IGVsc2UgeworCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfQVVUTykgeworCQkJCXNsaXN0ID0gMjsKKwkJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDAsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMCkgJiAweDlmZmYpIHwgKDEgPDwgMTMpKTsJLy8gUF9tb2RlID0gMQorCQkJfSBlbHNlCisJCQkJc2xpc3QgPSAwOworCQl9CisKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfQVVUTykKKwkJCXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwgPT0gR1VBUkRfSU5URVJWQUxfQVVUTykKKwkJCXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzg7CisKKwkJZHByaW50aygidXNpbmcgbGlzdCBmb3IgYXV0b3NlYXJjaCA6ICVkIiwgc2xpc3QpOworCQlkaWI4MDAwX3NldF9jaGFubmVsKHN0YXRlLCAodW5zaWduZWQgY2hhcilzbGlzdCwgMSk7CisJCS8vZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAwLCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDApICYgMHg5ZmZmKSB8ICgxIDw8IDEzKSk7ICAvLyBQX21vZGUgPSAxCisKKwkJZmFjdG9yID0gMTsKKworCQkvL3NldCBsb2NrX21hc2sgdmFsdWVzCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNiwgMHg0KTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3LCAweDgpOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDgsIDB4MTAwMCk7CisKKwkJLy9zZXQgbG9ja19tYXNrIHdhaXQgdGltZSB2YWx1ZXMKKwkJdmFsdWUgPSA1MCAqIHN0YXRlLT5jZmcucGxsLT5pbnRlcm5hbCAqIGZhY3RvcjsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMSwgKHUxNikgKCh2YWx1ZSA+PiAxNikgJiAweGZmZmYpKTsJLy8gbG9jazAgd2FpdCB0aW1lCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTIsICh1MTYpICh2YWx1ZSAmIDB4ZmZmZikpOwkvLyBsb2NrMCB3YWl0IHRpbWUKKwkJdmFsdWUgPSAxMDAgKiBzdGF0ZS0+Y2ZnLnBsbC0+aW50ZXJuYWwgKiBmYWN0b3I7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTMsICh1MTYpICgodmFsdWUgPj4gMTYpICYgMHhmZmZmKSk7CS8vIGxvY2sxIHdhaXQgdGltZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE0LCAodTE2KSAodmFsdWUgJiAweGZmZmYpKTsJLy8gbG9jazEgd2FpdCB0aW1lCisJCXZhbHVlID0gMTAwMCAqIHN0YXRlLT5jZmcucGxsLT5pbnRlcm5hbCAqIGZhY3RvcjsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxNSwgKHUxNikgKCh2YWx1ZSA+PiAxNikgJiAweGZmZmYpKTsJLy8gbG9jazIgd2FpdCB0aW1lCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTYsICh1MTYpICh2YWx1ZSAmIDB4ZmZmZikpOwkvLyBsb2NrMiB3YWl0IHRpbWUKKworCQl2YWx1ZSA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAwKTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAwLCAodTE2KSAoKDEgPDwgMTUpIHwgdmFsdWUpKTsKKwkJZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDEyODQpOwkvLyByZXNldCB0aGUgSU5ULiBuX2lycV9wZW5kaW5nCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMCwgKHUxNikgdmFsdWUpOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9hdXRvc2VhcmNoX2lycShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgaXJxX3BlbmRpbmcgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMTI4NCk7CisKKwlpZiAoaXJxX3BlbmRpbmcgJiAweDEpIHsJLy8gZmFpbGVkCisJCWRwcmludGsoImRpYjgwMDBfYXV0b3NlYXJjaF9pcnEgZmFpbGVkIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChpcnFfcGVuZGluZyAmIDB4MikgewkvLyBzdWNjZWVkZWQKKwkJZHByaW50aygiZGliODAwMF9hdXRvc2VhcmNoX2lycSBzdWNjZWVkZWQiKTsKKwkJcmV0dXJuIDI7CisJfQorCisJcmV0dXJuIDA7CQkvLyBzdGlsbCBwZW5kaW5nCit9CisKK3N0YXRpYyBpbnQgZGliODAwMF90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQgPSAwOworCXUxNiB2YWx1ZSwgbW9kZSA9IGZmdF90b19tb2RlKHN0YXRlKTsKKworCS8vIHdlIGFyZSBhbHJlYWR5IHR1bmVkIC0ganVzdCByZXN1bWluZyBmcm9tIHN1c3BlbmQKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaWI4MDAwX3NldF9iYW5kd2lkdGgoc3RhdGUsIHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6IC8gMTAwMCk7CisJZGliODAwMF9zZXRfY2hhbm5lbChzdGF0ZSwgMCwgMCk7CisKKwkvLyByZXN0YXJ0IGRlbW9kCisJcmV0IHw9IGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcwLCAweDQwMDApOworCXJldCB8PSBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc3MCwgMHgwMDAwKTsKKwltc2xlZXAoNDUpOworCisJLyogUF9jdHJsX2luaF9jb3I9MCwgUF9jdHJsX2FscGhhX2Nvcj00LCBQX2N0cmxfaW5oX2lzaT0wLCBQX2N0cmxfYWxwaGFfaXNpPTMgKi8KKwkvKiAgcmV0IHw9IGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjksICgwIDw8IDkpIHwgKDQgPDwgNSkgfCAoMCA8PCA0KSB8ICgzIDw8IDApICk7ICB3b3JrYXJvdW5kIGluaF9pc2kgc3RheXMgYXQgMSAqLworCisJLy8gbmV2ZXIgYWNoaWV2ZWQgYSBsb2NrIGJlZm9yZSAtIHdhaXQgZm9yIHRpbWZyZXEgdG8gdXBkYXRlCisJaWYgKHN0YXRlLT50aW1mID09IDApIHsKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKSB7CisJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAwKQkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAxIHNlZworCQkJCW1zbGVlcCgzMDApOworCQkJZWxzZQkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAzIHNlZworCQkJCW1zbGVlcCg1MDApOworCQl9IGVsc2UJCS8vIDEzIHNlZworCQkJbXNsZWVwKDIwMCk7CisJfQorCS8vZHVtcF9yZWcoc3RhdGUpOworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkgeworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAwKSB7CS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDEgc2VnCisKKwkJCS8qIFBfdGltZl9hbHBoYSA9ICgxMy1QX21vZGUpICwgUF9jb3JtX2FscGhhPTYsIFBfY29ybV90aHJlcz0weDQwICBhbHBoYSB0byBjaGVjayBvbiBib2FyZCAqLworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMiwgKCgxMyAtIG1vZGUpIDw8IDEyKSB8ICg2IDw8IDgpIHwgMHg0MCk7CisJCQkvL2RpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzIsICg4IDw8IDEyKSB8ICg2IDw8IDgpIHwgMHg4MCk7CisKKwkJCS8qICBQX2N0cmxfc2ZyZXFfc3RlcD0gKDEyLVBfbW9kZSkgICBQX2N0cmxfc2ZyZXFfaW5oID0wICAgICBQX2N0cmxfcGhhX29mZl9tYXggICovCisJCQlyZXQgfD0gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNywgKDEyIC0gbW9kZSkgfCAoKDUgKyBtb2RlKSA8PCA1KSk7CisKKwkJfSBlbHNlIHsJLy8gU291bmQgQnJvYWRjYXN0aW5nIG1vZGUgMyBzZWcKKworCQkJLyogUF90aW1mX2FscGhhID0gKDEyLVBfbW9kZSkgLCBQX2Nvcm1fYWxwaGE9NiwgUF9jb3JtX3RocmVzPTB4NjAgIGFscGhhIHRvIGNoZWNrIG9uIGJvYXJkICovCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDMyLCAoKDEyIC0gbW9kZSkgPDwgMTIpIHwgKDYgPDwgOCkgfCAweDYwKTsKKworCQkJcmV0IHw9IGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzcsICgxMSAtIG1vZGUpIHwgKCg1ICsgbW9kZSkgPDwgNSkpOworCQl9CisKKwl9IGVsc2UgewkJLy8gMTMgc2VnCisJCS8qIFBfdGltZl9hbHBoYSA9IDggLCBQX2Nvcm1fYWxwaGE9NiwgUF9jb3JtX3RocmVzPTB4ODAgIGFscGhhIHRvIGNoZWNrIG9uIGJvYXJkICovCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzIsICgoMTEgLSBtb2RlKSA8PCAxMikgfCAoNiA8PCA4KSB8IDB4ODApOworCisJCXJldCB8PSBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM3LCAoMTAgLSBtb2RlKSB8ICgoNSArIG1vZGUpIDw8IDUpKTsKKworCX0KKworCS8vIHdlIGFjaGlldmVkIGEgY29mZl9jcGlsX2xvY2sgLSBpdCdzIHRpbWUgdG8gdXBkYXRlIHRoZSB0aW1mCisJaWYgKChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTY4KSA+PiAxMSkgJiAweDEpCisJCWRpYjgwMDBfdXBkYXRlX3RpbWYoc3RhdGUpOworCisJLy9ub3cgdGhhdCB0dW5lIGlzIGZpbmlzaGVkLCBsb2NrMCBzaG91bGQgbG9jayBvbiBmZWNfbXBlZyB0byBvdXRwdXQgdGhpcyBsb2NrIG9uIE1QX0xPQ0suIEl0J3MgY2hhbmdlZCBpbiBhdXRvc2VhcmNoIHN0YXJ0CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA2LCAweDIwMCk7CisKKwlpZiAoc3RhdGUtPnJldmlzaW9uID09IDB4ODAwMikgeworCQl2YWx1ZSA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA5MDMpOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkwMywgdmFsdWUgJiB+KDEgPDwgMykpOworCQltc2xlZXAoMSk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTAzLCB2YWx1ZSB8ICgxIDw8IDMpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfd2FrZXVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZGliODAwMF9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCODAwME1fUE9XRVJfQUxMKTsKKwlkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3RhdGUsIERJQlgwMDBfQURDX09OKTsKKwlpZiAoZGliODAwMF9zZXRfYWRjX3N0YXRlKHN0YXRlLCBESUJYMDAwX1NMT1dfQURDX09OKSAhPSAwKQorCQlkcHJpbnRrKCJjb3VsZCBub3Qgc3RhcnQgU2xvdyBBREMiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaWYgKDEpIHsKKwkJZGliODAwMF9zZXRfb3V0cHV0X21vZGUoc3QsIE9VVE1PREVfSElHSF9aKTsKKwkJZGliODAwMF9zZXRfcG93ZXJfbW9kZShzdCwgRElCODAwME1fUE9XRVJfSU5URVJGQUNFX09OTFkpOworCQlyZXR1cm4gZGliODAwMF9zZXRfYWRjX3N0YXRlKHN0LCBESUJYMDAwX1NMT1dfQURDX09GRikgfCBkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3QsIERJQlgwMDBfQURDX09GRik7CisJfSBlbHNlIHsKKworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBpLCB2YWwgPSAwOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogPSA2MDAwMDAwOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDUwOCkgJiAweDE7CisKKwl2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTcwKTsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmludmVyc2lvbiA9ICh2YWwgJiAweDQwKSA+PiA2OworCXN3aXRjaCAoKHZhbCAmIDB4MzApID4+IDQpIHsKKwljYXNlIDE6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCWRlZmF1bHQ6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoICh2YWwgJiAweDMpIHsKKwljYXNlIDA6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOworCQlkcHJpbnRrKCJkaWI4MDAwX2dldF9mcm9udGVuZCBHSSA9IDEvMzIgIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7CisJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIEdJID0gMS8xNiAiKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkcHJpbnRrKCJkaWI4MDAwX2dldF9mcm9udGVuZCBHSSA9IDEvOCAiKTsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfODsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlkcHJpbnRrKCJkaWI4MDAwX2dldF9mcm9udGVuZCBHSSA9IDEvNCAiKTsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfNDsKKwkJYnJlYWs7CisJfQorCisJdmFsID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDUwNSk7CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9IHZhbCAmIDE7CisJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBwYXJ0aWFsX3JlY2VwdGlvbiA9ICVkICIsIGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24pOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNDkzICsgaSk7CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uc2VnbWVudF9jb3VudCA9IHZhbCAmIDB4MEY7CisJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgc2VnbWVudHMgPSAlZCAiLCBpLCBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLnNlZ21lbnRfY291bnQpOworCisJCXZhbCA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA0OTkgKyBpKTsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5pbnRlcmxlYXZpbmcgPSB2YWwgJiAweDM7CisJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgdGltZV9pbnRsdiA9ICVkICIsIGksIGZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uaW50ZXJsZWF2aW5nKTsKKworCQl2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNDgxICsgaSk7CisJCXN3aXRjaCAodmFsICYgMHg3KSB7CisJCWNhc2UgMToKKwkJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uZmVjID0gRkVDXzFfMjsKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgQ29kZSBSYXRlID0gMS8yICIsIGkpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uZmVjID0gRkVDXzJfMzsKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgQ29kZSBSYXRlID0gMi8zICIsIGkpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uZmVjID0gRkVDXzNfNDsKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgQ29kZSBSYXRlID0gMy80ICIsIGkpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uZmVjID0gRkVDXzVfNjsKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgQ29kZSBSYXRlID0gNS82ICIsIGkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLmZlYyA9IEZFQ183Xzg7CisJCQlkcHJpbnRrKCJkaWI4MDAwX2dldF9mcm9udGVuZCA6IExheWVyICVkIENvZGUgUmF0ZSA9IDcvOCAiLCBpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdmFsID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDQ4NyArIGkpOworCQlzd2l0Y2ggKHZhbCAmIDB4MykgeworCQljYXNlIDA6CisJCQlkcHJpbnRrKCJkaWI4MDAwX2dldF9mcm9udGVuZCA6IExheWVyICVkIERRUFNLICIsIGkpOworCQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5tb2R1bGF0aW9uID0gRFFQU0s7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5tb2R1bGF0aW9uID0gUVBTSzsKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgUVBTSyAiLCBpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPSBRQU1fMTY7CisJCQlkcHJpbnRrKCJkaWI4MDAwX2dldF9mcm9udGVuZCA6IExheWVyICVkIFFBTTE2ICIsIGkpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgUUFNNjQgIiwgaSk7CisJCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPSBRQU1fNjQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHRpbWUsIHJldDsKKworCWRpYjgwMDBfc2V0X291dHB1dF9tb2RlKHN0YXRlLCBPVVRNT0RFX0hJR0hfWik7CisKKwlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykKKwkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgZmVwKTsKKworCS8qIHN0YXJ0IHVwIHRoZSBBR0MgKi8KKwlzdGF0ZS0+dHVuZV9zdGF0ZSA9IENUX0FHQ19TVEFSVDsKKwlkbyB7CisJCXRpbWUgPSBkaWI4MDAwX2FnY19zdGFydHVwKGZlKTsKKwkJaWYgKHRpbWUgIT0gRkVfQ0FMTEJBQ0tfVElNRV9ORVZFUikKKwkJCW1zbGVlcCh0aW1lIC8gMTApOworCQllbHNlCisJCQlicmVhazsKKwl9IHdoaWxlIChzdGF0ZS0+dHVuZV9zdGF0ZSAhPSBDVF9BR0NfU1RPUCk7CisKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3kgPT0gMCkgeworCQlkcHJpbnRrKCJkaWI4MDAwOiBtdXN0IGF0IGxlYXN0IHNwZWNpZnkgZnJlcXVlbmN5ICIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogPT0gMCkgeworCQlkcHJpbnRrKCJkaWI4MDAwOiBubyBiYW5kd2lkdGggc3BlY2lmaWVkLCBzZXQgdG8gZGVmYXVsdCAiKTsKKwkJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogPSA2MDAwMDAwOworCX0KKworCXN0YXRlLT50dW5lX3N0YXRlID0gQ1RfREVNT0RfU1RBUlQ7CisKKwlpZiAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtICE9IFNZU19JU0RCVCkgfHwKKwkgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaW52ZXJzaW9uID09IElOVkVSU0lPTl9BVVRPKSB8fAorCSAgICAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV9BVVRPKSB8fAorCSAgICAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPKSB8fAorCSAgICAoKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X2xheWVyX2VuYWJsZWQgJiAoMSA8PCAwKSkgIT0gMCkgJiYKKwkgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLnNlZ21lbnRfY291bnQgIT0gMHhmZikgJiYKKwkgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLnNlZ21lbnRfY291bnQgIT0gMCkgJiYKKwkgICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID09IFFBTV9BVVRPKSB8fAorCSAgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLmZlYyA9PSBGRUNfQVVUTykpKSB8fAorCSAgICAoKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X2xheWVyX2VuYWJsZWQgJiAoMSA8PCAxKSkgIT0gMCkgJiYKKwkgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLnNlZ21lbnRfY291bnQgIT0gMHhmZikgJiYKKwkgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLnNlZ21lbnRfY291bnQgIT0gMCkgJiYKKwkgICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5tb2R1bGF0aW9uID09IFFBTV9BVVRPKSB8fAorCSAgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLmZlYyA9PSBGRUNfQVVUTykpKSB8fAorCSAgICAoKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X2xheWVyX2VuYWJsZWQgJiAoMSA8PCAyKSkgIT0gMCkgJiYKKwkgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLnNlZ21lbnRfY291bnQgIT0gMHhmZikgJiYKKwkgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLnNlZ21lbnRfY291bnQgIT0gMCkgJiYKKwkgICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5tb2R1bGF0aW9uID09IFFBTV9BVVRPKSB8fAorCSAgICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLmZlYyA9PSBGRUNfQVVUTykpKSB8fAorCSAgICAoKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLnNlZ21lbnRfY291bnQgPT0gMCkgfHwKKwkgICAgICAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZCAmICgxIDw8IDApKSA9PSAwKSkgJiYKKwkgICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5zZWdtZW50X2NvdW50ID09IDApIHx8CisJICAgICAgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X2xheWVyX2VuYWJsZWQgJiAoMiA8PCAwKSkgPT0gMCkpICYmCisJICAgICAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uc2VnbWVudF9jb3VudCA9PSAwKSB8fCAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZCAmICgzIDw8IDApKSA9PSAwKSkpKSB7CisJCWludCBpID0gODAwLCBmb3VuZDsKKworCQlkaWI4MDAwX3NldF9iYW5kd2lkdGgoc3RhdGUsIGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6IC8gMTAwMCk7CisJCWRpYjgwMDBfYXV0b3NlYXJjaF9zdGFydChmZSk7CisJCWRvIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlmb3VuZCA9IGRpYjgwMDBfYXV0b3NlYXJjaF9pcnEoZmUpOworCQl9IHdoaWxlIChmb3VuZCA9PSAwICYmIGktLSk7CisKKwkJZHByaW50aygiRnJlcXVlbmN5ICVkIEh6LCBhdXRvc2VhcmNoIHJldHVybnM6ICVkIiwgZmVwLT5mcmVxdWVuY3ksIGZvdW5kKTsKKworCQlpZiAoZm91bmQgPT0gMCB8fCBmb3VuZCA9PSAxKQorCQkJcmV0dXJuIDA7CS8vIG5vIGNoYW5uZWwgZm91bmQKKworCQlkaWI4MDAwX2dldF9mcm9udGVuZChmZSwgZmVwKTsKKwl9CisKKwlyZXQgPSBkaWI4MDAwX3R1bmUoZmUpOworCisJLyogbWFrZSB0aGlzIGEgY29uZmlnIHBhcmFtZXRlciAqLworCWRpYjgwMDBfc2V0X291dHB1dF9tb2RlKHN0YXRlLCBzdGF0ZS0+Y2ZnLm91dHB1dF9tb2RlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKiBzdGF0KQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBsb2NrID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU2OCk7CisKKwkqc3RhdCA9IDA7CisKKwlpZiAoKGxvY2sgPj4gMTQpICYgMSkJLy8gQUdDCisJCSpzdGF0IHw9IEZFX0hBU19TSUdOQUw7CisKKwlpZiAoKGxvY2sgPj4gOCkgJiAxKQkvLyBFcXVhbAorCQkqc3RhdCB8PSBGRV9IQVNfQ0FSUklFUjsKKworCWlmICgobG9jayA+PiAzKSAmIDEpCS8vIFRNQ0NfU1lOQworCQkqc3RhdCB8PSBGRV9IQVNfU1lOQzsKKworCWlmICgobG9jayA+PiA1KSAmIDcpCS8vIEZFQyBNUEVHCisJCSpzdGF0IHw9IEZFX0hBU19MT0NLOworCisJbG9jayA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NTQpOwkvLyBWaXRlcmJpIExheWVyIEEKKwlpZiAobG9jayAmIDB4MDEpCisJCSpzdGF0IHw9IEZFX0hBU19WSVRFUkJJOworCisJbG9jayA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NTUpOwkvLyBWaXRlcmJpIExheWVyIEIKKwlpZiAobG9jayAmIDB4MDEpCisJCSpzdGF0IHw9IEZFX0hBU19WSVRFUkJJOworCisJbG9jayA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NTYpOwkvLyBWaXRlcmJpIExheWVyIEMKKwlpZiAobG9jayAmIDB4MDEpCisJCSpzdGF0IHw9IEZFX0hBU19WSVRFUkJJOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICogYmVyKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCSpiZXIgPSAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU2MCkgPDwgMTYpIHwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU2MSk7CS8vIDEzIHNlZ21lbnRzCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9yZWFkX3VuY19ibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqIHVuYykKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwkqdW5jID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU2NSk7CS8vIHBhY2tldCBlcnJvciBvbiAxMyBzZWcKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKiBzdHJlbmd0aCkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgdmFsID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDM5MCk7CisJKnN0cmVuZ3RoID0gNjU1MzUgLSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICogc25yKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiB2YWw7CisJczMyIHNpZ25hbF9tYW50LCBzaWduYWxfZXhwLCBub2lzZV9tYW50LCBub2lzZV9leHA7CisJdTMyIHJlc3VsdCA9IDA7CisKKwl2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTQyKTsKKwlub2lzZV9tYW50ID0gKHZhbCA+PiA2KSAmIDB4ZmY7CisJbm9pc2VfZXhwID0gKHZhbCAmIDB4M2YpOworCisJdmFsID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU0Myk7CisJc2lnbmFsX21hbnQgPSAodmFsID4+IDYpICYgMHhmZjsKKwlzaWduYWxfZXhwID0gKHZhbCAmIDB4M2YpOworCisJaWYgKChub2lzZV9leHAgJiAweDIwKSAhPSAwKQorCQlub2lzZV9leHAgLT0gMHg0MDsKKwlpZiAoKHNpZ25hbF9leHAgJiAweDIwKSAhPSAwKQorCQlzaWduYWxfZXhwIC09IDB4NDA7CisKKwlpZiAoc2lnbmFsX21hbnQgIT0gMCkKKwkJcmVzdWx0ID0gaW50bG9nMTAoMikgKiAxMCAqIHNpZ25hbF9leHAgKyAxMCAqIGludGxvZzEwKHNpZ25hbF9tYW50KTsKKwllbHNlCisJCXJlc3VsdCA9IGludGxvZzEwKDIpICogMTAgKiBzaWduYWxfZXhwIC0gMTAwOworCWlmIChub2lzZV9tYW50ICE9IDApCisJCXJlc3VsdCAtPSBpbnRsb2cxMCgyKSAqIDEwICogbm9pc2VfZXhwICsgMTAgKiBpbnRsb2cxMChub2lzZV9tYW50KTsKKwllbHNlCisJCXJlc3VsdCAtPSBpbnRsb2cxMCgyKSAqIDEwICogbm9pc2VfZXhwIC0gMTAwOworCisJKnNuciA9IHJlc3VsdCAvICgxIDw8IDI0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaG9zdCwgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLCB1OCBmaXJzdF9hZGRyKQoreworCWludCBrID0gMDsKKwl1OCBuZXdfYWRkciA9IDA7CisJc3RydWN0IGkyY19kZXZpY2UgY2xpZW50ID0gey5hZGFwID0gaG9zdCB9OworCisJZm9yIChrID0gbm9fb2ZfZGVtb2RzIC0gMTsgayA+PSAwOyBrLS0pIHsKKwkJLyogZGVzaWduYXRlZCBpMmMgYWRkcmVzcyAqLworCQluZXdfYWRkciA9IGZpcnN0X2FkZHIgKyAoayA8PCAxKTsKKworCQljbGllbnQuYWRkciA9IG5ld19hZGRyOworCQlkaWI4MDAwX2kyY193cml0ZTE2KCZjbGllbnQsIDEyODcsIDB4MDAwMyk7CS8qIHNyYW0gbGVhZCBpbiwgcmR5ICovCisJCWlmIChkaWI4MDAwX2lkZW50aWZ5KCZjbGllbnQpID09IDApIHsKKwkJCWRpYjgwMDBfaTJjX3dyaXRlMTYoJmNsaWVudCwgMTI4NywgMHgwMDAzKTsJLyogc3JhbSBsZWFkIGluLCByZHkgKi8KKwkJCWNsaWVudC5hZGRyID0gZGVmYXVsdF9hZGRyOworCQkJaWYgKGRpYjgwMDBfaWRlbnRpZnkoJmNsaWVudCkgPT0gMCkgeworCQkJCWRwcmludGsoIiMlZDogbm90IGlkZW50aWZpZWQiLCBrKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCisJCS8qIHN0YXJ0IGRpdmVyc2l0eSB0byBwdWxsX2Rvd24gZGl2X3N0ciAtIGp1c3QgZm9yIGkyYy1lbnVtZXJhdGlvbiAqLworCQlkaWI4MDAwX2kyY193cml0ZTE2KCZjbGllbnQsIDEyODYsICgxIDw8IDEwKSB8ICg0IDw8IDYpKTsKKworCQkvKiBzZXQgbmV3IGkyYyBhZGRyZXNzIGFuZCBmb3JjZSBkaXZzdGFydCAqLworCQlkaWI4MDAwX2kyY193cml0ZTE2KCZjbGllbnQsIDEyODUsIChuZXdfYWRkciA8PCAyKSB8IDB4Mik7CisJCWNsaWVudC5hZGRyID0gbmV3X2FkZHI7CisJCWRpYjgwMDBfaWRlbnRpZnkoJmNsaWVudCk7CisKKwkJZHByaW50aygiSUMgJWQgaW5pdGlhbGl6ZWQgKHRvIGkyY19hZGRyZXNzIDB4JXgpIiwgaywgbmV3X2FkZHIpOworCX0KKworCWZvciAoayA9IDA7IGsgPCBub19vZl9kZW1vZHM7IGsrKykgeworCQluZXdfYWRkciA9IGZpcnN0X2FkZHIgfCAoayA8PCAxKTsKKwkJY2xpZW50LmFkZHIgPSBuZXdfYWRkcjsKKworCQkvLyB1bmZvcmNlIGRpdnN0cgorCQlkaWI4MDAwX2kyY193cml0ZTE2KCZjbGllbnQsIDEyODUsIG5ld19hZGRyIDw8IDIpOworCisJCS8qIGRlYWN0aXZhdGUgZGl2IC0gaXQgd2FzIGp1c3QgZm9yIGkyYy1lbnVtZXJhdGlvbiAqLworCQlkaWI4MDAwX2kyY193cml0ZTE2KCZjbGllbnQsIDEyODYsIDApOworCX0KKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKTsKK3N0YXRpYyBpbnQgZGliODAwMF9mZV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQoreworCXR1bmUtPm1pbl9kZWxheV9tcyA9IDEwMDA7CisJdHVuZS0+c3RlcF9zaXplID0gMDsKKwl0dW5lLT5tYXhfZHJpZnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWI4MDAwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJZGlieDAwMF9leGl0X2kyY19tYXN0ZXIoJnN0LT5pMmNfbWFzdGVyKTsKKwlrZnJlZShzdCk7Cit9CisKK3N0cnVjdCBpMmNfYWRhcHRlciAqZGliODAwMF9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwgaW50IGdhdGluZykKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3QgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlyZXR1cm4gZGlieDAwMF9nZXRfaTJjX2FkYXB0ZXIoJnN0LT5pMmNfbWFzdGVyLCBpbnRmLCBnYXRpbmcpOworfQorCitFWFBPUlRfU1lNQk9MKGRpYjgwMDBfZ2V0X2kyY19tYXN0ZXIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgZGliODAwMF9vcHMgPSB7CisJLmluZm8gPSB7CisJCSAubmFtZSA9ICJEaUJjb20gODAwMCBJU0RCLVQiLAorCQkgLnR5cGUgPSBGRV9PRkRNLAorCQkgLmZyZXF1ZW5jeV9taW4gPSA0NDI1MDAwMCwKKwkJIC5mcmVxdWVuY3lfbWF4ID0gODY3MjUwMDAwLAorCQkgLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDYyNTAwLAorCQkgLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfAorCQkgRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJIEZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkgRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8CisJCSBGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8IEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwgRkVfQ0FOX1JFQ09WRVIgfCBGRV9DQU5fSElFUkFSQ0hZX0FVVE8sCisJCSB9LAorCisJLnJlbGVhc2UgPSBkaWI4MDAwX3JlbGVhc2UsCisKKwkuaW5pdCA9IGRpYjgwMDBfd2FrZXVwLAorCS5zbGVlcCA9IGRpYjgwMDBfc2xlZXAsCisKKwkuc2V0X2Zyb250ZW5kID0gZGliODAwMF9zZXRfZnJvbnRlbmQsCisJLmdldF90dW5lX3NldHRpbmdzID0gZGliODAwMF9mZV9nZXRfdHVuZV9zZXR0aW5ncywKKwkuZ2V0X2Zyb250ZW5kID0gZGliODAwMF9nZXRfZnJvbnRlbmQsCisKKwkucmVhZF9zdGF0dXMgPSBkaWI4MDAwX3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IGRpYjgwMDBfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gZGliODAwMF9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgPSBkaWI4MDAwX3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gZGliODAwMF9yZWFkX3VuY19ibG9ja3MsCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI4MDAwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjgwMDBfY29uZmlnICpjZmcpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlOworCisJZHByaW50aygiZGliODAwMF9hdHRhY2giKTsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpYjgwMDBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1jcHkoJnN0YXRlLT5jZmcsIGNmZywgc2l6ZW9mKHN0cnVjdCBkaWI4MDAwX2NvbmZpZykpOworCXN0YXRlLT5pMmMuYWRhcCA9IGkyY19hZGFwOworCXN0YXRlLT5pMmMuYWRkciA9IGkyY19hZGRyOworCXN0YXRlLT5ncGlvX3ZhbCA9IGNmZy0+Z3Bpb192YWw7CisJc3RhdGUtPmdwaW9fZGlyID0gY2ZnLT5ncGlvX2RpcjsKKworCS8qIEVuc3VyZSB0aGUgb3V0cHV0IG1vZGUgcmVtYWlucyBhdCB0aGUgcHJldmlvdXMgZGVmYXVsdCBpZiBpdCdzCisJICogbm90IHNwZWNpZmljYWxseSBzZXQgYnkgdGhlIGNhbGxlci4KKwkgKi8KKwlpZiAoKHN0YXRlLT5jZmcub3V0cHV0X21vZGUgIT0gT1VUTU9ERV9NUEVHMl9TRVJJQUwpICYmIChzdGF0ZS0+Y2ZnLm91dHB1dF9tb2RlICE9IE9VVE1PREVfTVBFRzJfUEFSX0dBVEVEX0NMSykpCisJCXN0YXRlLT5jZmcub3V0cHV0X21vZGUgPSBPVVRNT0RFX01QRUcyX0ZJRk87CisKKwlmZSA9ICZzdGF0ZS0+ZmU7CisJZmUtPmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKwltZW1jcHkoJnN0YXRlLT5mZS5vcHMsICZkaWI4MDAwX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisKKwlzdGF0ZS0+dGltZl9kZWZhdWx0ID0gY2ZnLT5wbGwtPnRpbWY7CisKKwlpZiAoZGliODAwMF9pZGVudGlmeSgmc3RhdGUtPmkyYykgPT0gMCkKKwkJZ290byBlcnJvcjsKKworCWRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKCZzdGF0ZS0+aTJjX21hc3RlciwgRElCODAwMCwgc3RhdGUtPmkyYy5hZGFwLCBzdGF0ZS0+aTJjLmFkZHIpOworCisJZGliODAwMF9yZXNldChmZSk7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4NSwgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyODUpICYgfjB4NjApIHwgKDMgPDwgNSkpOwkvKiBiZXJfcnNfbGVuID0gMyAqLworCisJcmV0dXJuIGZlOworCisgZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKGRpYjgwMDBfYXR0YWNoKTsKKworTU9EVUxFX0FVVEhPUigiT2xpdmllciBHcmVuaWUgPE9saXZpZXIuR3JlbmllQGRpYmNvbS5mciwgIiAiUGF0cmljayBCb2V0dGNoZXIgPHBib2V0dGNoZXJAZGliY29tLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBEaUJjb20gODAwMCBJU0RCLVQgZGVtb2R1bGF0b3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmRlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZm5kZWYgRElCODAwMF9ICisjZGVmaW5lIERJQjgwMDBfSAorCisjaW5jbHVkZSAiZGlieDAwMF9jb21tb24uaCIKKworc3RydWN0IGRpYjgwMDBfY29uZmlnIHsKKwl1OCBvdXRwdXRfbXBlZzJfaW5fMTg4X2J5dGVzOworCXU4IGhvc3RidXNfZGl2ZXJzaXR5OworCXU4IHR1bmVyX2lzX2Jhc2ViYW5kOworCWludCAoKnVwZGF0ZV9sbmEpIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiBhZ2NfZ2xvYmFsKTsKKworCXU4IGFnY19jb25maWdfY291bnQ7CisJc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyAqYWdjOworCXN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgKnBsbDsKKworI2RlZmluZSBESUI4MDAwX0dQSU9fREVGQVVMVF9ESVJFQ1RJT05TIDB4ZmZmZgorCXUxNiBncGlvX2RpcjsKKyNkZWZpbmUgRElCODAwMF9HUElPX0RFRkFVTFRfVkFMVUVTICAgICAweDAwMDAKKwl1MTYgZ3Bpb192YWw7CisjZGVmaW5lIERJQjgwMDBfR1BJT19QV01fUE9TMCh2KSAgICAgICAgKCh2ICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgRElCODAwMF9HUElPX1BXTV9QT1MxKHYpICAgICAgICAoKHYgJiAweGYpIDw8IDggKQorI2RlZmluZSBESUI4MDAwX0dQSU9fUFdNX1BPUzIodikgICAgICAgICgodiAmIDB4ZikgPDwgNCApCisjZGVmaW5lIERJQjgwMDBfR1BJT19QV01fUE9TMyh2KSAgICAgICAgICh2ICYgMHhmKQorI2RlZmluZSBESUI4MDAwX0dQSU9fREVGQVVMVF9QV01fUE9TICAgIDB4ZmZmZgorCXUxNiBncGlvX3B3bV9wb3M7CisJdTE2IHB3bV9mcmVxX2RpdjsKKworCXZvaWQgKCphZ2NfY29udHJvbCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggYmVmb3JlKTsKKworCXUxNiBkcml2ZXM7CisJdTE2IGRpdmVyc2l0eV9kZWxheTsKKwl1OCBkaXZfY2ZnOworCXU4IG91dHB1dF9tb2RlOworCXU4IHJlZmNsa3NlbDsKK307CisKKyNkZWZpbmUgREVGQVVMVF9ESUI4MDAwX0kyQ19BRERSRVNTIDE4CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCODAwMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUI4MDAwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjgwMDBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliODAwMF9jb25maWcgKmNmZyk7CitleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICpkaWI4MDAwX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UsIGludCk7CisKK2V4dGVybiBpbnQgZGliODAwMF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICpob3N0LCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHU4IGZpcnN0X2FkZHIpOworCitleHRlcm4gaW50IGRpYjgwMDBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKTsKK2V4dGVybiBpbnQgZGliODAwMF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiB2YWx1ZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI4MDAwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjgwMDBfY29uZmlnICpjZmcpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGkyY19hZGFwdGVyICpkaWI4MDAwX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpLCBpbnQgeCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaG9zdCwgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLCB1OCBmaXJzdF9hZGRyKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitpbnQgZGliODAwMF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworaW50IGRpYjgwMDBfc2V0X3diZF9yZWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiB2YWx1ZSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMKaW5kZXggMzE1ZTA5ZS4uNGVmY2EzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMKQEAgLTE1LDI5ICsxNSwzMSBAQAogCQkodmFsID4+IDgpICYgMHhmZiwgdmFsICYgMHhmZiwKIAl9OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKLQkJLmFkZHIgPSBtc3QtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLCAuYnVmID0gYiwgLmxlbiA9IDQKKwkJLmFkZHIgPSBtc3QtPmkyY19hZGRyLC5mbGFncyA9IDAsLmJ1ZiA9IGIsLmxlbiA9IDQKIAl9OwogCXJldHVybiBpMmNfdHJhbnNmZXIobXN0LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSA/IC1FUkVNT1RFSU8gOiAwOwogfQogCiAKLXN0YXRpYyBpbnQgZGlieDAwMF9pMmNfc2VsZWN0X2ludGVyZmFjZShzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYpCitzdGF0aWMgaW50IGRpYngwMDBfaTJjX3NlbGVjdF9pbnRlcmZhY2Uoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0LAorCQkJCQllbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpbnRmKQogewogCWlmIChtc3QtPmRldmljZV9yZXYgPiBESUIzMDAwTUMgJiYgbXN0LT5zZWxlY3RlZF9pbnRlcmZhY2UgIT0gaW50ZikgewotCQlkcHJpbnRrKCJzZWxlY3RpbmcgaW50ZXJmYWNlOiAlZFxuIixpbnRmKTsKKwkJZHByaW50aygic2VsZWN0aW5nIGludGVyZmFjZTogJWRcbiIsIGludGYpOwogCQltc3QtPnNlbGVjdGVkX2ludGVyZmFjZSA9IGludGY7CiAJCXJldHVybiBkaWJ4MDAwX3dyaXRlX3dvcmQobXN0LCBtc3QtPmJhc2VfcmVnICsgNCwgaW50Zik7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRpYngwMDBfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIHU4IHR4WzRdLCB1OCBhZGRyLCBpbnQgb25vZmYpCitzdGF0aWMgaW50IGRpYngwMDBfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIHU4IHR4WzRdLAorCQkJCSB1OCBhZGRyLCBpbnQgb25vZmYpCiB7CiAJdTE2IHZhbDsKIAogCiAJaWYgKG9ub2ZmKQotCQl2YWwgPSBhZGRyIDw8IDg7IC8vIGJpdCA3ID0gdXNlIG1hc3RlciBvciBub3QsIGlmIDAsIHRoZSBnYXRlIGlzIG9wZW4KKwkJdmFsID0gYWRkciA8PCA4OwkvLyBiaXQgNyA9IHVzZSBtYXN0ZXIgb3Igbm90LCBpZiAwLCB0aGUgZ2F0ZSBpcyBvcGVuCiAJZWxzZQogCQl2YWwgPSAxIDw8IDc7CiAKQEAgLTQ1LDcgKzQ3LDcgQEAKIAkJdmFsIDw8PSAxOwogCiAJdHhbMF0gPSAoKChtc3QtPmJhc2VfcmVnICsgMSkgPj4gOCkgJiAweGZmKTsKLQl0eFsxXSA9ICggKG1zdC0+YmFzZV9yZWcgKyAxKSAgICAgICAmIDB4ZmYpOworCXR4WzFdID0gKChtc3QtPmJhc2VfcmVnICsgMSkgJiAweGZmKTsKIAl0eFsyXSA9IHZhbCA+PiA4OwogCXR4WzNdID0gdmFsICYgMHhmZjsKIApAQCAtNTcsNTkgKzU5LDc4IEBACiAJcmV0dXJuIEkyQ19GVU5DX0kyQzsKIH0KIAotc3RhdGljIGludCBkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQorc3RhdGljIGludCBkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJCXN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQogewogCXN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOwogCXN0cnVjdCBpMmNfbXNnIG1bMiArIG51bV07CiAJdTggdHhfb3Blbls0XSwgdHhfY2xvc2VbNF07CiAKLQltZW1zZXQobSwwLCBzaXplb2Yoc3RydWN0IGkyY19tc2cpICogKDIgKyBudW0pKTsKKwltZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfbXNnKSAqICgyICsgbnVtKSk7CiAKIAlkaWJ4MDAwX2kyY19zZWxlY3RfaW50ZXJmYWNlKG1zdCwgRElCWDAwMF9JMkNfSU5URVJGQUNFX1RVTkVSKTsKIAotCWRpYngwMDBfaTJjX2dhdGVfY3RybChtc3QsIHR4X29wZW4sICBtc2dbMF0uYWRkciwgMSk7CisJZGlieDAwMF9pMmNfZ2F0ZV9jdHJsKG1zdCwgdHhfb3BlbiwgbXNnWzBdLmFkZHIsIDEpOwogCW1bMF0uYWRkciA9IG1zdC0+aTJjX2FkZHI7Ci0JbVswXS5idWYgID0gdHhfb3BlbjsKLQltWzBdLmxlbiAgPSA0OworCW1bMF0uYnVmID0gdHhfb3BlbjsKKwltWzBdLmxlbiA9IDQ7CiAKIAltZW1jcHkoJm1bMV0sIG1zZywgc2l6ZW9mKHN0cnVjdCBpMmNfbXNnKSAqIG51bSk7CiAKIAlkaWJ4MDAwX2kyY19nYXRlX2N0cmwobXN0LCB0eF9jbG9zZSwgMCwgMCk7Ci0JbVtudW0rMV0uYWRkciA9IG1zdC0+aTJjX2FkZHI7Ci0JbVtudW0rMV0uYnVmICA9IHR4X2Nsb3NlOwotCW1bbnVtKzFdLmxlbiAgPSA0OworCW1bbnVtICsgMV0uYWRkciA9IG1zdC0+aTJjX2FkZHI7CisJbVtudW0gKyAxXS5idWYgPSB0eF9jbG9zZTsKKwltW251bSArIDFdLmxlbiA9IDQ7CiAKLQlyZXR1cm4gaTJjX3RyYW5zZmVyKG1zdC0+aTJjX2FkYXAsIG0sIDIrbnVtKSA9PSAyICsgbnVtID8gbnVtIDogLUVJTzsKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKG1zdC0+aTJjX2FkYXAsIG0sIDIgKyBudW0pID09IDIgKyBudW0gPyBudW0gOiAtRUlPOwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZGlieDAwMF9pMmNfZ2F0ZWRfdHVuZXJfYWxnbyA9IHsKLQkubWFzdGVyX3hmZXIgICA9IGRpYngwMDBfaTJjX2dhdGVkX3R1bmVyX3hmZXIsCisJLm1hc3Rlcl94ZmVyID0gZGlieDAwMF9pMmNfZ2F0ZWRfdHVuZXJfeGZlciwKIAkuZnVuY3Rpb25hbGl0eSA9IGRpYngwMDBfaTJjX2Z1bmMsCiB9OwogCi1zdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWJ4MDAwX2dldF9pMmNfYWRhcHRlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYsIGludCBnYXRpbmcpCitzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYngwMDBfZ2V0X2kyY19hZGFwdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwKKwkJCQkJICAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYsCisJCQkJCSAgICBpbnQgZ2F0aW5nKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gTlVMTDsKIAogCXN3aXRjaCAoaW50ZikgewotCQljYXNlIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUjoKLQkJCWlmIChnYXRpbmcpCi0JCQkJaTJjID0gJm1zdC0+Z2F0ZWRfdHVuZXJfaTJjX2FkYXA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAiRGlCWDAwMDogaW5jb3JyZWN0IEkyQyBpbnRlcmZhY2Ugc2VsZWN0ZWRcbiIpOwotCQkJYnJlYWs7CisJY2FzZSBESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVI6CisJCWlmIChnYXRpbmcpCisJCQlpMmMgPSAmbXN0LT5nYXRlZF90dW5lcl9pMmNfYWRhcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJEaUJYMDAwOiBpbmNvcnJlY3QgSTJDIGludGVyZmFjZSBzZWxlY3RlZFxuIik7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiBpMmM7CiB9CisKIEVYUE9SVF9TWU1CT0woZGlieDAwMF9nZXRfaTJjX2FkYXB0ZXIpOwogCi1zdGF0aWMgaW50IGkyY19hZGFwdGVyX2luaXQoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19hbGdvcml0aG0gKmFsZ28sIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCkKK3ZvaWQgZGlieDAwMF9yZXNldF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCkKK3sKKwkvKiBpbml0aWFsaXplIHRoZSBpMmMtbWFzdGVyIGJ5IGNsb3NpbmcgdGhlIGdhdGUgKi8KKwl1OCB0eFs0XTsKKwlzdHJ1Y3QgaTJjX21zZyBtID0gey5hZGRyID0gbXN0LT5pMmNfYWRkciwuYnVmID0gdHgsLmxlbiA9IDQgfTsKKworCWRpYngwMDBfaTJjX2dhdGVfY3RybChtc3QsIHR4LCAwLCAwKTsKKwlpMmNfdHJhbnNmZXIobXN0LT5pMmNfYWRhcCwgJm0sIDEpOworCW1zdC0+c2VsZWN0ZWRfaW50ZXJmYWNlID0gMHhmZjsJLy8gdGhlIGZpcnN0IHRpbWUgZm9yY2UgYSBzZWxlY3Qgb2YgdGhlIEkyQworCWRpYngwMDBfaTJjX3NlbGVjdF9pbnRlcmZhY2UobXN0LCBESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVIpOworfQorCitFWFBPUlRfU1lNQk9MKGRpYngwMDBfcmVzZXRfaTJjX21hc3Rlcik7CisKK3N0YXRpYyBpbnQgaTJjX2FkYXB0ZXJfaW5pdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJICAgIHN0cnVjdCBpMmNfYWxnb3JpdGhtICphbGdvLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCkKIHsKIAlzdHJuY3B5KGkyY19hZGFwLT5uYW1lLCBuYW1lLCBzaXplb2YoaTJjX2FkYXAtPm5hbWUpKTsKLQlpMmNfYWRhcC0+Y2xhc3MgICAgID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwsCi0JaTJjX2FkYXAtPmFsZ28gICAgICA9IGFsZ287CisJaTJjX2FkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwsIGkyY19hZGFwLT5hbGdvID0gYWxnbzsKIAlpMmNfYWRhcC0+YWxnb19kYXRhID0gTlVMTDsKIAlpMmNfc2V0X2FkYXBkYXRhKGkyY19hZGFwLCBtc3QpOwogCWlmIChpMmNfYWRkX2FkYXB0ZXIoaTJjX2FkYXApIDwgMCkKQEAgLTExNywzNCArMTM4LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBkaWJ4MDAwX2luaXRfaTJjX21hc3RlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIHUxNiBkZXZpY2VfcmV2LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkcikKK2ludCBkaWJ4MDAwX2luaXRfaTJjX21hc3RlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIHUxNiBkZXZpY2VfcmV2LAorCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyKQogewogCXU4IHR4WzRdOwotCXN0cnVjdCBpMmNfbXNnIG0gPSB7IC5hZGRyID0gaTJjX2FkZHIgPj4gMSwgLmJ1ZiA9IHR4LCAubGVuID0gNCB9OworCXN0cnVjdCBpMmNfbXNnIG0gPSB7LmFkZHIgPSBpMmNfYWRkciA+PiAxLC5idWYgPSB0eCwubGVuID0gNCB9OwogCiAJbXN0LT5kZXZpY2VfcmV2ID0gZGV2aWNlX3JldjsKLQltc3QtPmkyY19hZGFwICAgPSBpMmNfYWRhcDsKLQltc3QtPmkyY19hZGRyICAgPSBpMmNfYWRkciA+PiAxOworCW1zdC0+aTJjX2FkYXAgPSBpMmNfYWRhcDsKKwltc3QtPmkyY19hZGRyID0gaTJjX2FkZHIgPj4gMTsKIAotCWlmIChkZXZpY2VfcmV2ID09IERJQjcwMDBQKQorCWlmIChkZXZpY2VfcmV2ID09IERJQjcwMDBQIHx8IGRldmljZV9yZXYgPT0gRElCODAwMCkKIAkJbXN0LT5iYXNlX3JlZyA9IDEwMjQ7CiAJZWxzZQogCQltc3QtPmJhc2VfcmVnID0gNzY4OwogCi0gICAgaWYgKGkyY19hZGFwdGVyX2luaXQoJm1zdC0+Z2F0ZWRfdHVuZXJfaTJjX2FkYXAsICZkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl9hbGdvLCAiRGlCWDAwMCB0dW5lciBJMkMgYnVzIiwgbXN0KSAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgIkRpQlgwMDA6IGNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSB0dW5lciBpMmNfYWRhcHRlclxuIik7CisJaWYgKGkyY19hZGFwdGVyX2luaXQKKwkgICAgKCZtc3QtPmdhdGVkX3R1bmVyX2kyY19hZGFwLCAmZGlieDAwMF9pMmNfZ2F0ZWRfdHVuZXJfYWxnbywKKwkgICAgICJEaUJYMDAwIHR1bmVyIEkyQyBidXMiLCBtc3QpICE9IDApCisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkRpQlgwMDA6IGNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSB0dW5lciBpMmNfYWRhcHRlclxuIik7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBpMmMtbWFzdGVyIGJ5IGNsb3NpbmcgdGhlIGdhdGUgKi8KIAlkaWJ4MDAwX2kyY19nYXRlX2N0cmwobXN0LCB0eCwgMCwgMCk7CiAKIAlyZXR1cm4gaTJjX3RyYW5zZmVyKGkyY19hZGFwLCAmbSwgMSkgPT0gMTsKIH0KKwogRVhQT1JUX1NZTUJPTChkaWJ4MDAwX2luaXRfaTJjX21hc3Rlcik7CiAKIHZvaWQgZGlieDAwMF9leGl0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KQogewogCWkyY19kZWxfYWRhcHRlcigmbXN0LT5nYXRlZF90dW5lcl9pMmNfYWRhcCk7CiB9CisKIEVYUE9SVF9TWU1CT0woZGlieDAwMF9leGl0X2kyY19tYXN0ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGJvZXR0Y2hlckBkaWJjb20uZnI+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCmluZGV4IDg0ZTRkNTMuLjViZTEwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBESUJYMDAwX0NPTU1PTl9ICiAKIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIHsKLQlESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVIgICAgPSAwLAorCURJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiA9IDAsCiAJRElCWDAwMF9JMkNfSU5URVJGQUNFX0dQSU9fMV8yID0gMSwKIAlESUJYMDAwX0kyQ19JTlRFUkZBQ0VfR1BJT18zXzQgPSAyCiB9OwpAQCAtMTIsMjIgKzEyLDI5IEBACiAjZGVmaW5lIERJQjcwMDAgICAyCiAjZGVmaW5lIERJQjcwMDBQICAxMQogI2RlZmluZSBESUI3MDAwTUMgMTIKKyNkZWZpbmUgRElCODAwMCAgIDEzCiAJdTE2IGRldmljZV9yZXY7CiAKIAllbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBzZWxlY3RlZF9pbnRlcmZhY2U7CiAKLS8vCXN0cnVjdCBpMmNfYWRhcHRlciAgdHVuZXJfaTJjX2FkYXA7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICBnYXRlZF90dW5lcl9pMmNfYWRhcDsKKy8vICAgICAgc3RydWN0IGkyY19hZGFwdGVyICB0dW5lcl9pMmNfYWRhcDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgZ2F0ZWRfdHVuZXJfaTJjX2FkYXA7CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOwotCXU4ICAgICAgICAgICAgICAgICAgaTJjX2FkZHI7CisJdTggaTJjX2FkZHI7CiAKIAl1MTYgYmFzZV9yZWc7CiB9OwogCi1leHRlcm4gaW50IGRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgdTE2IGRldmljZV9yZXYsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyKTsKLWV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWJ4MDAwX2dldF9pMmNfYWRhcHRlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYsIGludCBnYXRpbmcpOworZXh0ZXJuIGludCBkaWJ4MDAwX2luaXRfaTJjX21hc3RlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsCisJCQkJICAgdTE2IGRldmljZV9yZXYsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJICAgdTggaTJjX2FkZHIpOworZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqZGlieDAwMF9nZXRfaTJjX2FkYXB0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlcgorCQkJCQkJICAgKm1zdCwKKwkJCQkJCSAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlCisJCQkJCQkgICBpbnRmLCBpbnQgZ2F0aW5nKTsKIGV4dGVybiB2b2lkIGRpYngwMDBfZXhpdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCk7CitleHRlcm4gdm9pZCBkaWJ4MDAwX3Jlc2V0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KTsKIAogI2RlZmluZSBCQU5EX0xCQU5EIDB4MDEKICNkZWZpbmUgQkFORF9VSEYgICAweDAyCkBAIC00MSwxOCArNDgsMTggQEAKIAkJCQkJCQkJCShmcmVxX2tIeikgPD0gMjAwMDAwMCA/IEJBTkRfTEJBTkQgOiBCQU5EX1NCQU5EICkKIAogc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyB7Ci0JLyogZGVmaW5lcyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoaXMgQUdDLXNldHRpbmcgLSB1c2luZyB0aGUgQkFORF8tZGVmaW5lcyovCi0JdTggIGJhbmRfY2FwczsKKwkvKiBkZWZpbmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBBR0Mtc2V0dGluZyAtIHVzaW5nIHRoZSBCQU5EXy1kZWZpbmVzICovCisJdTggYmFuZF9jYXBzOwogCiAJdTE2IHNldHVwOwogCiAJdTE2IGludl9nYWluOwogCXUxNiB0aW1lX3N0YWJpbGl6OwogCi0JdTggIGFscGhhX2xldmVsOworCXU4IGFscGhhX2xldmVsOwogCXUxNiB0aGxvY2s7CiAKLQl1OCAgd2JkX2ludjsKKwl1OCB3YmRfaW52OwogCXUxNiB3YmRfcmVmOwogCXU4IHdiZF9zZWw7CiAJdTggd2JkX2FscGhhOwpAQCAtOTIsOCArOTksOCBAQAogfTsKIAogc3RydWN0IGRpYngwMDBfYmFuZHdpZHRoX2NvbmZpZyB7Ci0JdTMyICAgaW50ZXJuYWw7Ci0JdTMyICAgc2FtcGxpbmc7CisJdTMyIGludGVybmFsOworCXUzMiBzYW1wbGluZzsKIAogCXU4IHBsbF9wcmVkaXY7CiAJdTggcGxsX3JhdGlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYwppbmRleCBlYjcyYTk4Li5lMzM0YjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYwpAQCAtMzYzLDYgKzM2Myw4IEBACiAKIAlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlOwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxnZHQzMzA0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiBOVUxMOwogCXN0YXRlLT5hZGRyID0gY29uZmlnLT5pMmNfYWRkcmVzczsKIAlzdGF0ZS0+aTJjID0gaTJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCmluZGV4IDNmNWEwZTEuLjMxNTZiNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCkBAIC0xNjksNiArMTY5LDggQEAKIAogCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZTsKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzOTIxX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiBOVUxMOwogCiAJc3RhdGUtPmFkZHIgPSBjb25maWctPmkyY19hZGRyZXNzOwogCXN0YXRlLT5pMmMgPSBpMmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NTAxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvS2NvbmZpZwpAQCAtMCwwICsxLDEyIEBACitjb25maWcgRFZCX1BUMQorCXRyaXN0YXRlICJQVDEgY2FyZHMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCisJaGVscAorCSAgU3VwcG9ydCBmb3IgRWFydGhzb2Z0IFBUMSBQQ0kgY2FyZHMuCisKKwkgIFNpbmNlIHRoZXNlIGNhcmRzIGhhdmUgbm8gTVBFRyBkZWNvZGVyIG9uYm9hcmQsIHRoZXkgdHJhbnNtaXQKKwkgIG9ubHkgY29tcHJlc3NlZCBNUEVHIGRhdGEgb3ZlciB0aGUgUENJIGJ1cywgc28geW91IG5lZWQKKwkgIGFuIGV4dGVybmFsIHNvZnR3YXJlIGRlY29kZXIgdG8gd2F0Y2ggVFYgb24geW91ciBjb21wdXRlci4KKworCSAgU2F5IFkgb3IgTSBpZiB5b3Ugb3duIHN1Y2ggYSBkZXZpY2UgYW5kIHdhbnQgdG8gdXNlIGl0LgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2ZGExNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK2VhcnRoLXB0MS1vYmpzIDo9IHB0MS5vIHZhMWo1amY4MDA3cy5vIHZhMWo1amY4MDA3dC5vCisKK29iai0kKENPTkZJR19EVkJfUFQxKSArPSBlYXJ0aC1wdDEubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTYyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKQEAgLTAsMCArMSwxMDU3IEBACisvKgorICogZHJpdmVyIGZvciBFYXJ0aHNvZnQgUFQxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhJUkFOTyBUYWthaGl0byA8aGlyYW5vdGFrYUB6bmcuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBwdDFkdnIgLSBodHRwOi8vcHQxZHZyLnNvdXJjZWZvcmdlLmpwLworICogCWJ5IFRvbW9ha2kgSXNoaWthd2EgPHRvbXlAdXNlcnMuc291cmNlZm9yZ2UuanA+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisjaW5jbHVkZSAiZHZiZGV2LmgiCisjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCisjaW5jbHVkZSAiZG14ZGV2LmgiCisjaW5jbHVkZSAiZHZiX25ldC5oIgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSAidmExajVqZjgwMDd0LmgiCisjaW5jbHVkZSAidmExajVqZjgwMDdzLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImVhcnRoLXB0MSIKKworI2RlZmluZSBQVDFfUEFHRV9TSElGVCAxMgorI2RlZmluZSBQVDFfUEFHRV9TSVpFICgxIDw8IFBUMV9QQUdFX1NISUZUKQorI2RlZmluZSBQVDFfTlJfVVBBQ0tFVFMgMTAyNAorI2RlZmluZSBQVDFfTlJfQlVGUyA1MTEKKworc3RydWN0IHB0MV9idWZmZXJfcGFnZSB7CisJX19sZTMyIHVwYWNrZXRzW1BUMV9OUl9VUEFDS0VUU107Cit9OworCitzdHJ1Y3QgcHQxX3RhYmxlX3BhZ2UgeworCV9fbGUzMiBuZXh0X3BmbjsKKwlfX2xlMzIgYnVmX3BmbnNbUFQxX05SX0JVRlNdOworfTsKKworc3RydWN0IHB0MV9idWZmZXIgeworCXN0cnVjdCBwdDFfYnVmZmVyX3BhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBhZGRyOworfTsKKworc3RydWN0IHB0MV90YWJsZSB7CisJc3RydWN0IHB0MV90YWJsZV9wYWdlICpwYWdlOworCWRtYV9hZGRyX3QgYWRkcjsKKwlzdHJ1Y3QgcHQxX2J1ZmZlciBidWZzW1BUMV9OUl9CVUZTXTsKK307CisKKyNkZWZpbmUgUFQxX05SX0FEQVBTIDQKKworc3RydWN0IHB0MV9hZGFwdGVyOworCitzdHJ1Y3QgcHQxIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOworCWludCBpMmNfcnVubmluZzsKKwlzdHJ1Y3QgcHQxX2FkYXB0ZXIgKmFkYXBzW1BUMV9OUl9BREFQU107CisJc3RydWN0IHB0MV90YWJsZSAqdGFibGVzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqa3RocmVhZDsKK307CisKK3N0cnVjdCBwdDFfYWRhcHRlciB7CisJc3RydWN0IHB0MSAqcHQxOworCWludCBpbmRleDsKKworCXU4ICpidWY7CisJaW50IHVwYWNrZXRfY291bnQ7CisJaW50IHBhY2tldF9jb3VudDsKKworCXN0cnVjdCBkdmJfYWRhcHRlciBhZGFwOworCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7CisJaW50IHVzZXJzOworCXN0cnVjdCBkbXhkZXYgZG14ZGV2OworCXN0cnVjdCBkdmJfbmV0IG5ldDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwlpbnQgKCpvcmlnX3NldF92b2x0YWdlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOworfTsKKworI2RlZmluZSBwdDFfcHJpbnRrKGxldmVsLCBwdDEsIGZvcm1hdCwgYXJnLi4uKQlcCisJZGV2X3ByaW50ayhsZXZlbCwgJihwdDEpLT5wZGV2LT5kZXYsIGZvcm1hdCwgIyNhcmcpCisKK3N0YXRpYyB2b2lkIHB0MV93cml0ZV9yZWcoc3RydWN0IHB0MSAqcHQxLCBpbnQgcmVnLCB1MzIgZGF0YSkKK3sKKwl3cml0ZWwoZGF0YSwgcHQxLT5yZWdzICsgcmVnICogNCk7Cit9CisKK3N0YXRpYyB1MzIgcHQxX3JlYWRfcmVnKHN0cnVjdCBwdDEgKnB0MSwgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwocHQxLT5yZWdzICsgcmVnICogNCk7Cit9CisKK3N0YXRpYyBpbnQgcHQxX25yX3RhYmxlcyA9IDY0OworbW9kdWxlX3BhcmFtX25hbWVkKG5yX3RhYmxlcywgcHQxX25yX3RhYmxlcywgaW50LCAwKTsKKworc3RhdGljIHZvaWQgcHQxX2luY3JlbWVudF90YWJsZV9jb3VudChzdHJ1Y3QgcHQxICpwdDEpCit7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDAwMDAwMjApOworfQorCitzdGF0aWMgdm9pZCBwdDFfaW5pdF90YWJsZV9jb3VudChzdHJ1Y3QgcHQxICpwdDEpCit7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDAwMDAwMTApOworfQorCitzdGF0aWMgdm9pZCBwdDFfcmVnaXN0ZXJfdGFibGVzKHN0cnVjdCBwdDEgKnB0MSwgdTMyIGZpcnN0X3BmbikKK3sKKwlwdDFfd3JpdGVfcmVnKHB0MSwgNSwgZmlyc3RfcGZuKTsKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwYzAwMDA0MCk7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV91bnJlZ2lzdGVyX3RhYmxlcyhzdHJ1Y3QgcHQxICpwdDEpCit7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDgwODAwMDApOworfQorCitzdGF0aWMgaW50IHB0MV9zeW5jKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgNTc7IGkrKykgeworCQlpZiAocHQxX3JlYWRfcmVnKHB0MSwgMCkgJiAweDIwMDAwMDAwKQorCQkJcmV0dXJuIDA7CisJCXB0MV93cml0ZV9yZWcocHQxLCAwLCAweDAwMDAwMDA4KTsKKwl9CisJcHQxX3ByaW50ayhLRVJOX0VSUiwgcHQxLCAiY291bGQgbm90IHN5bmNcbiIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdTY0IHB0MV9pZGVudGlmeShzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGk7CisJdTY0IGlkOworCWlkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNTc7IGkrKykgeworCQlpZCB8PSAodTY0KShwdDFfcmVhZF9yZWcocHQxLCAwKSA+PiAzMCAmIDEpIDw8IGk7CisJCXB0MV93cml0ZV9yZWcocHQxLCAwLCAweDAwMDAwMDA4KTsKKwl9CisJcmV0dXJuIGlkOworfQorCitzdGF0aWMgaW50IHB0MV91bmxvY2soc3RydWN0IHB0MSAqcHQxKQoreworCWludCBpOworCXB0MV93cml0ZV9yZWcocHQxLCAwLCAweDAwMDAwMDA4KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChwdDFfcmVhZF9yZWcocHQxLCAwKSAmIDB4ODAwMDAwMDApCisJCQlyZXR1cm4gMDsKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoKEhaICsgOTk5KSAvIDEwMDApOworCX0KKwlwdDFfcHJpbnRrKEtFUk5fRVJSLCBwdDEsICJjb3VsZCBub3QgdW5sb2NrXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwdDFfcmVzZXRfcGNpKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaTsKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMTAxMDAwMCk7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDEwMDAwMDApOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWlmIChwdDFfcmVhZF9yZWcocHQxLCAwKSAmIDB4MDAwMDAwMDEpCisJCQlyZXR1cm4gMDsKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoKEhaICsgOTk5KSAvIDEwMDApOworCX0KKwlwdDFfcHJpbnRrKEtFUk5fRVJSLCBwdDEsICJjb3VsZCBub3QgcmVzZXQgUENJXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwdDFfcmVzZXRfcmFtKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaTsKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMjAyMDAwMCk7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDIwMDAwMDApOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWlmIChwdDFfcmVhZF9yZWcocHQxLCAwKSAmIDB4MDAwMDAwMDIpCisJCQlyZXR1cm4gMDsKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoKEhaICsgOTk5KSAvIDEwMDApOworCX0KKwlwdDFfcHJpbnRrKEtFUk5fRVJSLCBwdDEsICJjb3VsZCBub3QgcmVzZXQgUkFNXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwdDFfZG9fZW5hYmxlX3JhbShzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGksIGo7CisJdTMyIHN0YXR1czsKKwlzdGF0dXMgPSBwdDFfcmVhZF9yZWcocHQxLCAwKSAmIDB4MDAwMDAwMDQ7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDAwMDAwMDIpOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCAxMDI0OyBqKyspIHsKKwkJCWlmICgocHQxX3JlYWRfcmVnKHB0MSwgMCkgJiAweDAwMDAwMDA0KSAhPSBzdGF0dXMpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoKEhaICsgOTk5KSAvIDEwMDApOworCX0KKwlwdDFfcHJpbnRrKEtFUk5fRVJSLCBwdDEsICJjb3VsZCBub3QgZW5hYmxlIFJBTVxuIik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgcHQxX2VuYWJsZV9yYW0oc3RydWN0IHB0MSAqcHQxKQoreworCWludCBpLCByZXQ7CisJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoKEhaICsgOTk5KSAvIDEwMDApOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXJldCA9IHB0MV9kb19lbmFibGVfcmFtKHB0MSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9kaXNhYmxlX3JhbShzdHJ1Y3QgcHQxICpwdDEpCit7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MGIwYjAwMDApOworfQorCitzdGF0aWMgdm9pZCBwdDFfc2V0X3N0cmVhbShzdHJ1Y3QgcHQxICpwdDEsIGludCBpbmRleCwgaW50IGVuYWJsZWQpCit7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDIsIDEgPDwgKGluZGV4ICsgOCkgfCBlbmFibGVkIDw8IGluZGV4KTsKK30KKworc3RhdGljIHZvaWQgcHQxX2luaXRfc3RyZWFtcyhzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFBUMV9OUl9BREFQUzsgaSsrKQorCQlwdDFfc2V0X3N0cmVhbShwdDEsIGksIDApOworfQorCitzdGF0aWMgaW50IHB0MV9maWx0ZXIoc3RydWN0IHB0MSAqcHQxLCBzdHJ1Y3QgcHQxX2J1ZmZlcl9wYWdlICpwYWdlKQoreworCXUzMiB1cGFja2V0OworCWludCBpOworCWludCBpbmRleDsKKwlzdHJ1Y3QgcHQxX2FkYXB0ZXIgKmFkYXA7CisJaW50IG9mZnNldDsKKwl1OCAqYnVmOworCisJaWYgKCFwYWdlLT51cGFja2V0c1tQVDFfTlJfVVBBQ0tFVFMgLSAxXSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFQxX05SX1VQQUNLRVRTOyBpKyspIHsKKwkJdXBhY2tldCA9IGxlMzJfdG9fY3B1KHBhZ2UtPnVwYWNrZXRzW2ldKTsKKwkJaW5kZXggPSAodXBhY2tldCA+PiAyOSkgLSAxOworCQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49ICBQVDFfTlJfQURBUFMpCisJCQljb250aW51ZTsKKworCQlhZGFwID0gcHQxLT5hZGFwc1tpbmRleF07CisJCWlmICh1cGFja2V0ID4+IDI1ICYgMSkKKwkJCWFkYXAtPnVwYWNrZXRfY291bnQgPSAwOworCQllbHNlIGlmICghYWRhcC0+dXBhY2tldF9jb3VudCkKKwkJCWNvbnRpbnVlOworCisJCWJ1ZiA9IGFkYXAtPmJ1ZjsKKwkJb2Zmc2V0ID0gYWRhcC0+cGFja2V0X2NvdW50ICogMTg4ICsgYWRhcC0+dXBhY2tldF9jb3VudCAqIDM7CisJCWJ1ZltvZmZzZXRdID0gdXBhY2tldCA+PiAxNjsKKwkJYnVmW29mZnNldCArIDFdID0gdXBhY2tldCA+PiA4OworCQlpZiAoYWRhcC0+dXBhY2tldF9jb3VudCAhPSA2MikKKwkJCWJ1ZltvZmZzZXQgKyAyXSA9IHVwYWNrZXQ7CisKKwkJaWYgKCsrYWRhcC0+dXBhY2tldF9jb3VudCA+PSA2MykgeworCQkJYWRhcC0+dXBhY2tldF9jb3VudCA9IDA7CisJCQlpZiAoKythZGFwLT5wYWNrZXRfY291bnQgPj0gMjEpIHsKKwkJCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmFkYXAtPmRlbXV4LCBidWYsIDIxKTsKKwkJCQlhZGFwLT5wYWNrZXRfY291bnQgPSAwOworCQkJfQorCQl9CisJfQorCisJcGFnZS0+dXBhY2tldHNbUFQxX05SX1VQQUNLRVRTIC0gMV0gPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHB0MV90aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHQxICpwdDE7CisJaW50IHRhYmxlX2luZGV4OworCWludCBidWZfaW5kZXg7CisJc3RydWN0IHB0MV9idWZmZXJfcGFnZSAqcGFnZTsKKworCXB0MSA9IGRhdGE7CisJc2V0X2ZyZWV6YWJsZSgpOworCisJdGFibGVfaW5kZXggPSAwOworCWJ1Zl9pbmRleCA9IDA7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQl0cnlfdG9fZnJlZXplKCk7CisKKwkJcGFnZSA9IHB0MS0+dGFibGVzW3RhYmxlX2luZGV4XS5idWZzW2J1Zl9pbmRleF0ucGFnZTsKKwkJaWYgKCFwdDFfZmlsdGVyKHB0MSwgcGFnZSkpIHsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgrK2J1Zl9pbmRleCA+PSBQVDFfTlJfQlVGUykgeworCQkJcHQxX2luY3JlbWVudF90YWJsZV9jb3VudChwdDEpOworCQkJYnVmX2luZGV4ID0gMDsKKwkJCWlmICgrK3RhYmxlX2luZGV4ID49IHB0MV9ucl90YWJsZXMpCisJCQkJdGFibGVfaW5kZXggPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9mcmVlX3BhZ2Uoc3RydWN0IHB0MSAqcHQxLCB2b2lkICpwYWdlLCBkbWFfYWRkcl90IGFkZHIpCit7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnB0MS0+cGRldi0+ZGV2LCBQVDFfUEFHRV9TSVpFLCBwYWdlLCBhZGRyKTsKK30KKworc3RhdGljIHZvaWQgKnB0MV9hbGxvY19wYWdlKHN0cnVjdCBwdDEgKnB0MSwgZG1hX2FkZHJfdCAqYWRkcnAsIHUzMiAqcGZucCkKK3sKKwl2b2lkICpwYWdlOworCWRtYV9hZGRyX3QgYWRkcjsKKworCXBhZ2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnB0MS0+cGRldi0+ZGV2LCBQVDFfUEFHRV9TSVpFLCAmYWRkciwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmIChwYWdlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJQlVHX09OKGFkZHIgJiAoUFQxX1BBR0VfU0laRSAtIDEpKTsKKwlCVUdfT04oYWRkciA+PiBQVDFfUEFHRV9TSElGVCA+PiAzMSA+PiAxKTsKKworCSphZGRycCA9IGFkZHI7CisJKnBmbnAgPSBhZGRyID4+IFBUMV9QQUdFX1NISUZUOworCXJldHVybiBwYWdlOworfQorCitzdGF0aWMgdm9pZCBwdDFfY2xlYW51cF9idWZmZXIoc3RydWN0IHB0MSAqcHQxLCBzdHJ1Y3QgcHQxX2J1ZmZlciAqYnVmKQoreworCXB0MV9mcmVlX3BhZ2UocHQxLCBidWYtPnBhZ2UsIGJ1Zi0+YWRkcik7Cit9CisKK3N0YXRpYyBpbnQKK3B0MV9pbml0X2J1ZmZlcihzdHJ1Y3QgcHQxICpwdDEsIHN0cnVjdCBwdDFfYnVmZmVyICpidWYsICB1MzIgKnBmbnApCit7CisJc3RydWN0IHB0MV9idWZmZXJfcGFnZSAqcGFnZTsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlwYWdlID0gcHQxX2FsbG9jX3BhZ2UocHQxLCAmYWRkciwgcGZucCk7CisJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYWdlLT51cGFja2V0c1tQVDFfTlJfVVBBQ0tFVFMgLSAxXSA9IDA7CisKKwlidWYtPnBhZ2UgPSBwYWdlOworCWJ1Zi0+YWRkciA9IGFkZHI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9jbGVhbnVwX3RhYmxlKHN0cnVjdCBwdDEgKnB0MSwgc3RydWN0IHB0MV90YWJsZSAqdGFibGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFQxX05SX0JVRlM7IGkrKykKKwkJcHQxX2NsZWFudXBfYnVmZmVyKHB0MSwgJnRhYmxlLT5idWZzW2ldKTsKKworCXB0MV9mcmVlX3BhZ2UocHQxLCB0YWJsZS0+cGFnZSwgdGFibGUtPmFkZHIpOworfQorCitzdGF0aWMgaW50CitwdDFfaW5pdF90YWJsZShzdHJ1Y3QgcHQxICpwdDEsIHN0cnVjdCBwdDFfdGFibGUgKnRhYmxlLCB1MzIgKnBmbnApCit7CisJc3RydWN0IHB0MV90YWJsZV9wYWdlICpwYWdlOworCWRtYV9hZGRyX3QgYWRkcjsKKwlpbnQgaSwgcmV0OworCXUzMiBidWZfcGZuOworCisJcGFnZSA9IHB0MV9hbGxvY19wYWdlKHB0MSwgJmFkZHIsIHBmbnApOworCWlmIChwYWdlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IFBUMV9OUl9CVUZTOyBpKyspIHsKKwkJcmV0ID0gcHQxX2luaXRfYnVmZmVyKHB0MSwgJnRhYmxlLT5idWZzW2ldLCAmYnVmX3Bmbik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnI7CisKKwkJcGFnZS0+YnVmX3BmbnNbaV0gPSBjcHVfdG9fbGUzMihidWZfcGZuKTsKKwl9CisKKwlwdDFfaW5jcmVtZW50X3RhYmxlX2NvdW50KHB0MSk7CisJdGFibGUtPnBhZ2UgPSBwYWdlOworCXRhYmxlLT5hZGRyID0gYWRkcjsKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxlIChpLS0pCisJCXB0MV9jbGVhbnVwX2J1ZmZlcihwdDEsICZ0YWJsZS0+YnVmc1tpXSk7CisKKwlwdDFfZnJlZV9wYWdlKHB0MSwgcGFnZSwgYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHQxX2NsZWFudXBfdGFibGVzKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlzdHJ1Y3QgcHQxX3RhYmxlICp0YWJsZXM7CisJaW50IGk7CisKKwl0YWJsZXMgPSBwdDEtPnRhYmxlczsKKwlwdDFfdW5yZWdpc3Rlcl90YWJsZXMocHQxKTsKKworCWZvciAoaSA9IDA7IGkgPCBwdDFfbnJfdGFibGVzOyBpKyspCisJCXB0MV9jbGVhbnVwX3RhYmxlKHB0MSwgJnRhYmxlc1tpXSk7CisKKwl2ZnJlZSh0YWJsZXMpOworfQorCitzdGF0aWMgaW50IHB0MV9pbml0X3RhYmxlcyhzdHJ1Y3QgcHQxICpwdDEpCit7CisJc3RydWN0IHB0MV90YWJsZSAqdGFibGVzOworCWludCBpLCByZXQ7CisJdTMyIGZpcnN0X3BmbiwgcGZuOworCisJdGFibGVzID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHB0MV90YWJsZSkgKiBwdDFfbnJfdGFibGVzKTsKKwlpZiAodGFibGVzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcHQxX2luaXRfdGFibGVfY291bnQocHQxKTsKKworCWkgPSAwOworCWlmIChwdDFfbnJfdGFibGVzKSB7CisJCXJldCA9IHB0MV9pbml0X3RhYmxlKHB0MSwgJnRhYmxlc1swXSwgJmZpcnN0X3Bmbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwkJaSsrOworCX0KKworCXdoaWxlIChpIDwgcHQxX25yX3RhYmxlcykgeworCQlyZXQgPSBwdDFfaW5pdF90YWJsZShwdDEsICZ0YWJsZXNbaV0sICZwZm4pOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJCXRhYmxlc1tpIC0gMV0ucGFnZS0+bmV4dF9wZm4gPSBjcHVfdG9fbGUzMihwZm4pOworCQlpKys7CisJfQorCisJdGFibGVzW3B0MV9ucl90YWJsZXMgLSAxXS5wYWdlLT5uZXh0X3BmbiA9IGNwdV90b19sZTMyKGZpcnN0X3Bmbik7CisKKwlwdDFfcmVnaXN0ZXJfdGFibGVzKHB0MSwgZmlyc3RfcGZuKTsKKwlwdDEtPnRhYmxlcyA9IHRhYmxlczsKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxlIChpLS0pCisJCXB0MV9jbGVhbnVwX3RhYmxlKHB0MSwgJnRhYmxlc1tpXSk7CisKKwl2ZnJlZSh0YWJsZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHQxX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXN0cnVjdCBwdDFfYWRhcHRlciAqYWRhcDsKKwlhZGFwID0gY29udGFpbmVyX29mKGZlZWQtPmRlbXV4LCBzdHJ1Y3QgcHQxX2FkYXB0ZXIsIGRlbXV4KTsKKwlpZiAoIWFkYXAtPnVzZXJzKyspCisJCXB0MV9zZXRfc3RyZWFtKGFkYXAtPnB0MSwgYWRhcC0+aW5kZXgsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB0MV9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXN0cnVjdCBwdDFfYWRhcHRlciAqYWRhcDsKKwlhZGFwID0gY29udGFpbmVyX29mKGZlZWQtPmRlbXV4LCBzdHJ1Y3QgcHQxX2FkYXB0ZXIsIGRlbXV4KTsKKwlpZiAoIS0tYWRhcC0+dXNlcnMpCisJCXB0MV9zZXRfc3RyZWFtKGFkYXAtPnB0MSwgYWRhcC0+aW5kZXgsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcHQxX3NldF9wb3dlcihzdHJ1Y3QgcHQxICpwdDEsIGludCBwb3dlciwgaW50IGxuYiwgaW50IHJlc2V0KQoreworCXB0MV93cml0ZV9yZWcocHQxLCAxLCBwb3dlciB8IGxuYiA8PCAxIHwgIXJlc2V0IDw8IDMpOworfQorCitzdGF0aWMgaW50IHB0MV9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBwdDFfYWRhcHRlciAqYWRhcDsKKwlpbnQgbG5iOworCisJYWRhcCA9IGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgcHQxX2FkYXB0ZXIsIGFkYXApOworCisJc3dpdGNoICh2b2x0YWdlKSB7CisJY2FzZSBTRUNfVk9MVEFHRV8xMzogLyogYWN0dWFsbHkgMTFWICovCisJCWxuYiA9IDI7CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfMTg6IC8qIGFjdHVhbGx5IDE1ViAqLworCQlsbmIgPSAzOworCQlicmVhazsKKwljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJbG5iID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHQxX3NldF9wb3dlcihhZGFwLT5wdDEsIDEsIGxuYiwgMCk7CisKKwlpZiAoYWRhcC0+b3JpZ19zZXRfdm9sdGFnZSkKKwkJcmV0dXJuIGFkYXAtPm9yaWdfc2V0X3ZvbHRhZ2UoZmUsIHZvbHRhZ2UpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9mcmVlX2FkYXB0ZXIoc3RydWN0IHB0MV9hZGFwdGVyICphZGFwKQoreworCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGFkYXAtPmZlKTsKKwlkdmJfbmV0X3JlbGVhc2UoJmFkYXAtPm5ldCk7CisJYWRhcC0+ZGVtdXguZG14LmNsb3NlKCZhZGFwLT5kZW11eC5kbXgpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmYWRhcC0+ZG14ZGV2KTsKKwlkdmJfZG14X3JlbGVhc2UoJmFkYXAtPmRlbXV4KTsKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZhZGFwLT5hZGFwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYWRhcC0+YnVmKTsKKwlrZnJlZShhZGFwKTsKK30KKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKK3N0YXRpYyBzdHJ1Y3QgcHQxX2FkYXB0ZXIgKgorcHQxX2FsbG9jX2FkYXB0ZXIoc3RydWN0IHB0MSAqcHQxLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgcHQxX2FkYXB0ZXIgKmFkYXA7CisJdm9pZCAqYnVmOworCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXA7CisJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXg7CisJc3RydWN0IGRteGRldiAqZG14ZGV2OworCWludCByZXQ7CisKKwlhZGFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHB0MV9hZGFwdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWFkYXAtPnB0MSA9IHB0MTsKKworCWFkYXAtPm9yaWdfc2V0X3ZvbHRhZ2UgPSBmZS0+b3BzLnNldF92b2x0YWdlOworCWZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBwdDFfc2V0X3ZvbHRhZ2U7CisKKwlidWYgPSAodTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJYWRhcC0+YnVmID0gYnVmOworCWFkYXAtPnVwYWNrZXRfY291bnQgPSAwOworCWFkYXAtPnBhY2tldF9jb3VudCA9IDA7CisKKwlkdmJfYWRhcCA9ICZhZGFwLT5hZGFwOworCWR2Yl9hZGFwLT5wcml2ID0gYWRhcDsKKwlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcCwgRFJJVkVSX05BTUUsIFRISVNfTU9EVUxFLAorCQkJCSAgICZwdDEtPnBkZXYtPmRldiwgYWRhcHRlcl9ucik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWVfcGFnZTsKKworCWRlbXV4ID0gJmFkYXAtPmRlbXV4OworCWRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORzsKKwlkZW11eC0+cHJpdiA9IGFkYXA7CisJZGVtdXgtPmZlZWRudW0gPSAyNTY7CisJZGVtdXgtPmZpbHRlcm51bSA9IDI1NjsKKwlkZW11eC0+c3RhcnRfZmVlZCA9IHB0MV9zdGFydF9mZWVkOworCWRlbXV4LT5zdG9wX2ZlZWQgPSBwdDFfc3RvcF9mZWVkOworCWRlbXV4LT53cml0ZV90b19kZWNvZGVyID0gTlVMTDsKKwlyZXQgPSBkdmJfZG14X2luaXQoZGVtdXgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl91bnJlZ2lzdGVyX2FkYXB0ZXI7CisKKwlkbXhkZXYgPSAmYWRhcC0+ZG14ZGV2OworCWRteGRldi0+ZmlsdGVybnVtID0gMjU2OworCWRteGRldi0+ZGVtdXggPSAmZGVtdXgtPmRteDsKKwlkbXhkZXYtPmNhcGFiaWxpdGllcyA9IDA7CisJcmV0ID0gZHZiX2RteGRldl9pbml0KGRteGRldiwgZHZiX2FkYXApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kbXhfcmVsZWFzZTsKKworCWR2Yl9uZXRfaW5pdChkdmJfYWRhcCwgJmFkYXAtPm5ldCwgJmRlbXV4LT5kbXgpOworCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKGR2Yl9hZGFwLCBmZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX25ldF9yZWxlYXNlOworCWFkYXAtPmZlID0gZmU7CisKKwlyZXR1cm4gYWRhcDsKKworZXJyX25ldF9yZWxlYXNlOgorCWR2Yl9uZXRfcmVsZWFzZSgmYWRhcC0+bmV0KTsKKwlhZGFwLT5kZW11eC5kbXguY2xvc2UoJmFkYXAtPmRlbXV4LmRteCk7CisJZHZiX2RteGRldl9yZWxlYXNlKCZhZGFwLT5kbXhkZXYpOworZXJyX2RteF9yZWxlYXNlOgorCWR2Yl9kbXhfcmVsZWFzZShkZW11eCk7CitlcnJfdW5yZWdpc3Rlcl9hZGFwdGVyOgorCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXApOworZXJyX2ZyZWVfcGFnZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKK2Vycl9rZnJlZToKKwlrZnJlZShhZGFwKTsKK2VycjoKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCitzdGF0aWMgdm9pZCBwdDFfY2xlYW51cF9hZGFwdGVycyhzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFBUMV9OUl9BREFQUzsgaSsrKQorCQlwdDFfZnJlZV9hZGFwdGVyKHB0MS0+YWRhcHNbaV0pOworfQorCitzdHJ1Y3QgcHQxX2NvbmZpZyB7CisJc3RydWN0IHZhMWo1amY4MDA3c19jb25maWcgdmExajVqZjgwMDdzX2NvbmZpZzsKKwlzdHJ1Y3QgdmExajVqZjgwMDd0X2NvbmZpZyB2YTFqNWpmODAwN3RfY29uZmlnOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwdDFfY29uZmlnIHB0MV9jb25maWdzWzJdID0geworCXsKKwkJeyAuZGVtb2RfYWRkcmVzcyA9IDB4MWIgfSwKKwkJeyAuZGVtb2RfYWRkcmVzcyA9IDB4MWEgfSwKKwl9LCB7CisJCXsgLmRlbW9kX2FkZHJlc3MgPSAweDE5IH0sCisJCXsgLmRlbW9kX2FkZHJlc3MgPSAweDE4IH0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgcHQxX2luaXRfYWRhcHRlcnMoc3RydWN0IHB0MSAqcHQxKQoreworCWludCBpLCBqOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJY29uc3Qgc3RydWN0IHB0MV9jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZVs0XTsKKwlzdHJ1Y3QgcHQxX2FkYXB0ZXIgKmFkYXA7CisJaW50IHJldDsKKworCWkgPSAwOworCWogPSAwOworCisJaTJjX2FkYXAgPSAmcHQxLT5pMmNfYWRhcDsKKwlkbyB7CisJCWNvbmZpZyA9ICZwdDFfY29uZmlnc1tpIC8gMl07CisKKwkJZmVbaV0gPSB2YTFqNWpmODAwN3NfYXR0YWNoKCZjb25maWctPnZhMWo1amY4MDA3c19jb25maWcsCisJCQkJCSAgICBpMmNfYWRhcCk7CisJCWlmICghZmVbaV0pIHsKKwkJCXJldCA9IC1FTk9ERVY7IC8qIFRoaXMgZG9lcyBub3Qgc291bmQgbmljZS4uLiAqLworCQkJZ290byBlcnI7CisJCX0KKwkJaSsrOworCisJCWZlW2ldID0gdmExajVqZjgwMDd0X2F0dGFjaCgmY29uZmlnLT52YTFqNWpmODAwN3RfY29uZmlnLAorCQkJCQkgICAgaTJjX2FkYXApOworCQlpZiAoIWZlW2ldKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBlcnI7CisJCX0KKwkJaSsrOworCisJCXJldCA9IHZhMWo1amY4MDA3c19wcmVwYXJlKGZlW2kgLSAyXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnI7CisKKwkJcmV0ID0gdmExajVqZjgwMDd0X3ByZXBhcmUoZmVbaSAtIDFdKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCX0gd2hpbGUgKGkgPCA0KTsKKworCWRvIHsKKwkJYWRhcCA9IHB0MV9hbGxvY19hZGFwdGVyKHB0MSwgZmVbal0pOworCQlpZiAoSVNfRVJSKGFkYXApKQorCQkJZ290byBlcnI7CisJCWFkYXAtPmluZGV4ID0gajsKKwkJcHQxLT5hZGFwc1tqXSA9IGFkYXA7CisJfSB3aGlsZSAoKytqIDwgNCk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxlIChpLS0gPiBqKQorCQlmZVtpXS0+b3BzLnJlbGVhc2UoZmVbaV0pOworCisJd2hpbGUgKGotLSkKKwkJcHQxX2ZyZWVfYWRhcHRlcihwdDEtPmFkYXBzW2pdKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9pMmNfZW1pdChzdHJ1Y3QgcHQxICpwdDEsIGludCBhZGRyLCBpbnQgYnVzeSwgaW50IHJlYWRfZW5hYmxlLAorCQkJIGludCBjbG9jaywgaW50IGRhdGEsIGludCBuZXh0X2FkZHIpCit7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDQsIGFkZHIgPDwgMTggfCBidXN5IDw8IDEzIHwgcmVhZF9lbmFibGUgPDwgMTIgfAorCQkgICAgICAhY2xvY2sgPDwgMTEgfCAhZGF0YSA8PCAxMCB8IG5leHRfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9pMmNfd3JpdGVfYml0KHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCAqYWRkcnAsIGludCBkYXRhKQoreworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIsICAgICAxLCAwLCAwLCBkYXRhLCBhZGRyICsgMSk7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciArIDEsIDEsIDAsIDEsIGRhdGEsIGFkZHIgKyAyKTsKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMiwgMSwgMCwgMCwgZGF0YSwgYWRkciArIDMpOworCSphZGRycCA9IGFkZHIgKyAzOworfQorCitzdGF0aWMgdm9pZCBwdDFfaTJjX3JlYWRfYml0KHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCAqYWRkcnApCit7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciwgICAgIDEsIDAsIDAsIDEsIGFkZHIgKyAxKTsKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMSwgMSwgMCwgMSwgMSwgYWRkciArIDIpOworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIgKyAyLCAxLCAxLCAxLCAxLCBhZGRyICsgMyk7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciArIDMsIDEsIDAsIDAsIDEsIGFkZHIgKyA0KTsKKwkqYWRkcnAgPSBhZGRyICsgNDsKK30KKworc3RhdGljIHZvaWQgcHQxX2kyY193cml0ZV9ieXRlKHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCAqYWRkcnAsIGludCBkYXRhKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXB0MV9pMmNfd3JpdGVfYml0KHB0MSwgYWRkciwgJmFkZHIsIGRhdGEgPj4gKDcgLSBpKSAmIDEpOworCXB0MV9pMmNfd3JpdGVfYml0KHB0MSwgYWRkciwgJmFkZHIsIDEpOworCSphZGRycCA9IGFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9pMmNfcmVhZF9ieXRlKHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCAqYWRkcnAsIGludCBsYXN0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXB0MV9pMmNfcmVhZF9iaXQocHQxLCBhZGRyLCAmYWRkcik7CisJcHQxX2kyY193cml0ZV9iaXQocHQxLCBhZGRyLCAmYWRkciwgbGFzdCk7CisJKmFkZHJwID0gYWRkcjsKK30KKworc3RhdGljIHZvaWQgcHQxX2kyY19wcmVwYXJlKHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCAqYWRkcnApCit7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciwgICAgIDEsIDAsIDEsIDEsIGFkZHIgKyAxKTsKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMSwgMSwgMCwgMSwgMCwgYWRkciArIDIpOworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIgKyAyLCAxLCAwLCAwLCAwLCBhZGRyICsgMyk7CisJKmFkZHJwID0gYWRkciArIDM7Cit9CisKK3N0YXRpYyB2b2lkCitwdDFfaTJjX3dyaXRlX21zZyhzdHJ1Y3QgcHQxICpwdDEsIGludCBhZGRyLCBpbnQgKmFkZHJwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCWludCBpOworCXB0MV9pMmNfcHJlcGFyZShwdDEsIGFkZHIsICZhZGRyKTsKKwlwdDFfaTJjX3dyaXRlX2J5dGUocHQxLCBhZGRyLCAmYWRkciwgbXNnLT5hZGRyIDw8IDEpOworCWZvciAoaSA9IDA7IGkgPCBtc2ctPmxlbjsgaSsrKQorCQlwdDFfaTJjX3dyaXRlX2J5dGUocHQxLCBhZGRyLCAmYWRkciwgbXNnLT5idWZbaV0pOworCSphZGRycCA9IGFkZHI7Cit9CisKK3N0YXRpYyB2b2lkCitwdDFfaTJjX3JlYWRfbXNnKHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCAqYWRkcnAsIHN0cnVjdCBpMmNfbXNnICptc2cpCit7CisJaW50IGk7CisJcHQxX2kyY19wcmVwYXJlKHB0MSwgYWRkciwgJmFkZHIpOworCXB0MV9pMmNfd3JpdGVfYnl0ZShwdDEsIGFkZHIsICZhZGRyLCBtc2ctPmFkZHIgPDwgMSB8IDEpOworCWZvciAoaSA9IDA7IGkgPCBtc2ctPmxlbjsgaSsrKQorCQlwdDFfaTJjX3JlYWRfYnl0ZShwdDEsIGFkZHIsICZhZGRyLCBpID09IG1zZy0+bGVuIC0gMSk7CisJKmFkZHJwID0gYWRkcjsKK30KKworc3RhdGljIGludCBwdDFfaTJjX2VuZChzdHJ1Y3QgcHQxICpwdDEsIGludCBhZGRyKQoreworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIsICAgICAxLCAwLCAwLCAwLCBhZGRyICsgMSk7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciArIDEsIDEsIDAsIDEsIDAsIGFkZHIgKyAyKTsKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMiwgMSwgMCwgMSwgMSwgMCk7CisKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMDAwMDAwNCk7CisJZG8geworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVJTlRSOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoKEhaICsgOTk5KSAvIDEwMDApOworCX0gd2hpbGUgKHB0MV9yZWFkX3JlZyhwdDEsIDApICYgMHgwMDAwMDA4MCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9pMmNfYmVnaW4oc3RydWN0IHB0MSAqcHQxLCBpbnQgKmFkZHJwKQoreworCWludCBhZGRyOworCWFkZHIgPSAwOworCisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciwgICAgIDAsIDAsIDEsIDEsIGFkZHIgLyogaXRzZWxmICovKTsKKwlhZGRyID0gYWRkciArIDE7CisKKwlpZiAoIXB0MS0+aTJjX3J1bm5pbmcpIHsKKwkJcHQxX2kyY19lbWl0KHB0MSwgYWRkciwgICAgIDEsIDAsIDEsIDEsIGFkZHIgKyAxKTsKKwkJcHQxX2kyY19lbWl0KHB0MSwgYWRkciArIDEsIDEsIDAsIDEsIDAsIGFkZHIgKyAyKTsKKwkJYWRkciA9IGFkZHIgKyAyOworCQlwdDEtPmkyY19ydW5uaW5nID0gMTsKKwl9CisJKmFkZHJwID0gYWRkcjsKK30KKworc3RhdGljIGludCBwdDFfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgcHQxICpwdDE7CisJaW50IGk7CisJc3RydWN0IGkyY19tc2cgKm1zZywgKm5leHRfbXNnOworCWludCBhZGRyLCByZXQ7CisJdTE2IGxlbjsKKwl1MzIgd29yZDsKKworCXB0MSA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJbXNnID0gJm1zZ3NbaV07CisJCWlmIChtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXR1cm4gLUVOT1RTVVBQOworCisJCWlmIChpICsgMSA8IG51bSkKKwkJCW5leHRfbXNnID0gJm1zZ3NbaSArIDFdOworCQllbHNlCisJCQluZXh0X21zZyA9IE5VTEw7CisKKwkJaWYgKG5leHRfbXNnICYmIG5leHRfbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlpKys7CisKKwkJCWxlbiA9IG5leHRfbXNnLT5sZW47CisJCQlpZiAobGVuID4gNCkKKwkJCQlyZXR1cm4gLUVOT1RTVVBQOworCisJCQlwdDFfaTJjX2JlZ2luKHB0MSwgJmFkZHIpOworCQkJcHQxX2kyY193cml0ZV9tc2cocHQxLCBhZGRyLCAmYWRkciwgbXNnKTsKKwkJCXB0MV9pMmNfcmVhZF9tc2cocHQxLCBhZGRyLCAmYWRkciwgbmV4dF9tc2cpOworCQkJcmV0ID0gcHQxX2kyY19lbmQocHQxLCBhZGRyKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCXdvcmQgPSBwdDFfcmVhZF9yZWcocHQxLCAyKTsKKwkJCXdoaWxlIChsZW4tLSkgeworCQkJCW5leHRfbXNnLT5idWZbbGVuXSA9IHdvcmQ7CisJCQkJd29yZCA+Pj0gODsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB0MV9pMmNfYmVnaW4ocHQxLCAmYWRkcik7CisJCQlwdDFfaTJjX3dyaXRlX21zZyhwdDEsIGFkZHIsICZhZGRyLCBtc2cpOworCQkJcmV0ID0gcHQxX2kyY19lbmQocHQxLCBhZGRyKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgdTMyIHB0MV9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHB0MV9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgPSBwdDFfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBwdDFfaTJjX2Z1bmMsCit9OworCitzdGF0aWMgdm9pZCBwdDFfaTJjX3dhaXQoc3RydWN0IHB0MSAqcHQxKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKwkJcHQxX2kyY19lbWl0KHB0MSwgMCwgMCwgMCwgMSwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9pMmNfaW5pdChzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKKwkJcHQxX2kyY19lbWl0KHB0MSwgaSwgMCwgMCwgMSwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwdDFfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwdDEgKnB0MTsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwlwdDEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJcmVncyA9IHB0MS0+cmVnczsKKworCWt0aHJlYWRfc3RvcChwdDEtPmt0aHJlYWQpOworCXB0MV9jbGVhbnVwX3RhYmxlcyhwdDEpOworCXB0MV9jbGVhbnVwX2FkYXB0ZXJzKHB0MSk7CisJcHQxX2Rpc2FibGVfcmFtKHB0MSk7CisJcHQxX3NldF9wb3dlcihwdDEsIDAsIDAsIDEpOworCWkyY19kZWxfYWRhcHRlcigmcHQxLT5pMmNfYWRhcCk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKHB0MSk7CisJcGNpX2lvdW5tYXAocGRldiwgcmVncyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitwdDFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IHJldDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IHB0MSAqcHQxOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkOworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcmV0ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOworCisJcmVncyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfcGNpX3JlbGVhc2VfcmVnaW9uczsKKwl9CisKKwlwdDEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHQxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwdDEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcGNpX2lvdW5tYXA7CisJfQorCisJcHQxLT5wZGV2ID0gcGRldjsKKwlwdDEtPnJlZ3MgPSByZWdzOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwdDEpOworCisJaTJjX2FkYXAgPSAmcHQxLT5pMmNfYWRhcDsKKwlpMmNfYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKKwlpMmNfYWRhcC0+YWxnbyA9ICZwdDFfaTJjX2FsZ287CisJaTJjX2FkYXAtPmFsZ29fZGF0YSA9IE5VTEw7CisJaTJjX2FkYXAtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXAsIHB0MSk7CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKGkyY19hZGFwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfa2ZyZWU7CisKKwlwdDFfc2V0X3Bvd2VyKHB0MSwgMCwgMCwgMSk7CisKKwlwdDFfaTJjX2luaXQocHQxKTsKKwlwdDFfaTJjX3dhaXQocHQxKTsKKworCXJldCA9IHB0MV9zeW5jKHB0MSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2kyY19kZWxfYWRhcHRlcjsKKworCXB0MV9pZGVudGlmeShwdDEpOworCisJcmV0ID0gcHQxX3VubG9jayhwdDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9pMmNfZGVsX2FkYXB0ZXI7CisKKwlyZXQgPSBwdDFfcmVzZXRfcGNpKHB0MSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2kyY19kZWxfYWRhcHRlcjsKKworCXJldCA9IHB0MV9yZXNldF9yYW0ocHQxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfaTJjX2RlbF9hZGFwdGVyOworCisJcmV0ID0gcHQxX2VuYWJsZV9yYW0ocHQxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfaTJjX2RlbF9hZGFwdGVyOworCisJcHQxX2luaXRfc3RyZWFtcyhwdDEpOworCisJcHQxX3NldF9wb3dlcihwdDEsIDEsIDAsIDEpOworCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKChIWiArIDQ5KSAvIDUwKTsKKworCXB0MV9zZXRfcG93ZXIocHQxLCAxLCAwLCAwKTsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisKKwlyZXQgPSBwdDFfaW5pdF9hZGFwdGVycyhwdDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wdDFfZGlzYWJsZV9yYW07CisKKwlyZXQgPSBwdDFfaW5pdF90YWJsZXMocHQxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcHQxX2NsZWFudXBfYWRhcHRlcnM7CisKKwlrdGhyZWFkID0ga3RocmVhZF9ydW4ocHQxX3RocmVhZCwgcHQxLCAicHQxIik7CisJaWYgKElTX0VSUihrdGhyZWFkKSkgeworCQlyZXQgPSBQVFJfRVJSKGt0aHJlYWQpOworCQlnb3RvIGVycl9wdDFfY2xlYW51cF90YWJsZXM7CisJfQorCisJcHQxLT5rdGhyZWFkID0ga3RocmVhZDsKKwlyZXR1cm4gMDsKKworZXJyX3B0MV9jbGVhbnVwX3RhYmxlczoKKwlwdDFfY2xlYW51cF90YWJsZXMocHQxKTsKK2Vycl9wdDFfY2xlYW51cF9hZGFwdGVyczoKKwlwdDFfY2xlYW51cF9hZGFwdGVycyhwdDEpOworZXJyX3B0MV9kaXNhYmxlX3JhbToKKwlwdDFfZGlzYWJsZV9yYW0ocHQxKTsKKwlwdDFfc2V0X3Bvd2VyKHB0MSwgMCwgMCwgMSk7CitlcnJfaTJjX2RlbF9hZGFwdGVyOgorCWkyY19kZWxfYWRhcHRlcihpMmNfYWRhcCk7CitlcnJfa2ZyZWU6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKHB0MSk7CitlcnJfcGNpX2lvdW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgcmVncyk7CitlcnJfcGNpX3JlbGVhc2VfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX3BjaV9kaXNhYmxlX2RldmljZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlcnI6CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHQxX2lkX3RhYmxlW10gPSB7CisJeyBQQ0lfREVWSUNFKDB4MTBlZSwgMHgyMTFhKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcHQxX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHB0MV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJLnByb2JlCQk9IHB0MV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB0MV9yZW1vdmUpLAorCS5pZF90YWJsZQk9IHB0MV9pZF90YWJsZSwKK307CisKKworc3RhdGljIGludCBfX2luaXQgcHQxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcHQxX2RyaXZlcik7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHB0MV9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwdDFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocHQxX2luaXQpOworbW9kdWxlX2V4aXQocHQxX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJUYWthaGl0byBISVJBTk8gPGhpcmFub3Rha2FAem5nLmluZm8+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVhcnRoc29mdCBQVDEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvdmExajVqZjgwMDdzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvdmExajVqZjgwMDdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRiOTQwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3MuYwpAQCAtMCwwICsxLDY1OCBAQAorLyoKKyAqIElTREItUyBkcml2ZXIgZm9yIFZBMUo1SkY4MDA3CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhJUkFOTyBUYWthaGl0byA8aGlyYW5vdGFrYUB6bmcuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBwdDFkdnIgLSBodHRwOi8vcHQxZHZyLnNvdXJjZWZvcmdlLmpwLworICogCWJ5IFRvbW9ha2kgSXNoaWthd2EgPHRvbXlAdXNlcnMuc291cmNlZm9yZ2UuanA+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJ2YTFqNWpmODAwN3MuaCIKKworZW51bSB2YTFqNWpmODAwN3NfdHVuZV9zdGF0ZSB7CisJVkExSjVKRjgwMDdTX0lETEUsCisJVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMSwKKwlWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8yLAorCVZBMUo1SkY4MDA3U19TRVRfRlJFUVVFTkNZXzMsCisJVkExSjVKRjgwMDdTX0NIRUNLX0ZSRVFVRU5DWSwKKwlWQTFKNUpGODAwN1NfU0VUX01PRFVMQVRJT04sCisJVkExSjVKRjgwMDdTX0NIRUNLX01PRFVMQVRJT04sCisJVkExSjVKRjgwMDdTX1NFVF9UU19JRCwKKwlWQTFKNUpGODAwN1NfQ0hFQ0tfVFNfSUQsCisJVkExSjVKRjgwMDdTX1RSQUNLLAorfTsKKworc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSB7CisJY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3c19jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBmZTsKKwllbnVtIHZhMWo1amY4MDA3c190dW5lX3N0YXRlIHR1bmVfc3RhdGU7Cit9OworCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19nZXRfZnJvbnRlbmRfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gRFZCRkVfQUxHT19IVzsKK30KKworc3RhdGljIGludAordmExajVqZjgwMDdzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN3aXRjaCAoc3RhdGUtPnR1bmVfc3RhdGUpIHsKKwljYXNlIFZBMUo1SkY4MDA3U19JRExFOgorCWNhc2UgVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMToKKwljYXNlIFZBMUo1SkY4MDA3U19TRVRfRlJFUVVFTkNZXzI6CisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8zOgorCWNhc2UgVkExSjVKRjgwMDdTX0NIRUNLX0ZSRVFVRU5DWToKKwkJKnN0YXR1cyA9IDA7CisJCXJldHVybiAwOworCisKKwljYXNlIFZBMUo1SkY4MDA3U19TRVRfTU9EVUxBVElPTjoKKwljYXNlIFZBMUo1SkY4MDA3U19DSEVDS19NT0RVTEFUSU9OOgorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX1RTX0lEOgorCWNhc2UgVkExSjVKRjgwMDdTX0NIRUNLX1RTX0lEOgorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUjsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3U19UUkFDSzoKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfTE9DSzsKKwkJcmV0dXJuIDA7CisJfQorCisJQlVHKCk7Cit9CisKK3N0cnVjdCB2YTFqNWpmODAwN3NfY2JfbWFwIHsKKwl1MzIgZnJlcXVlbmN5OworCXU4IGNiOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2YTFqNWpmODAwN3NfY2JfbWFwIHZhMWo1amY4MDA3c19jYl9tYXBzW10gPSB7CisJeyAgOTg2MDAwLCAweGIyIH0sCisJeyAxMDcyMDAwLCAweGQyIH0sCisJeyAxMTU0MDAwLCAweGUyIH0sCisJeyAxMjkxMDAwLCAweDIwIH0sCisJeyAxNDQ3MDAwLCAweDQwIH0sCisJeyAxNjE1MDAwLCAweDYwIH0sCisJeyAxNzkxMDAwLCAweDgwIH0sCisJeyAxOTcyMDAwLCAweGEwIH0sCit9OworCitzdGF0aWMgdTggdmExajVqZjgwMDdzX2xvb2t1cF9jYih1MzIgZnJlcXVlbmN5KQoreworCWludCBpOworCWNvbnN0IHN0cnVjdCB2YTFqNWpmODAwN3NfY2JfbWFwICptYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YTFqNWpmODAwN3NfY2JfbWFwcyk7IGkrKykgeworCQltYXAgPSAmdmExajVqZjgwMDdzX2NiX21hcHNbaV07CisJCWlmIChmcmVxdWVuY3kgPCBtYXAtPmZyZXF1ZW5jeSkKKwkJCXJldHVybiBtYXAtPmNiOworCX0KKwlyZXR1cm4gMHhjMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3Nfc2V0X2ZyZXF1ZW5jeV8xKHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlKQoreworCXUzMiBmcmVxdWVuY3k7CisJdTE2IHdvcmQ7CisJdTggYnVmWzZdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWZyZXF1ZW5jeSA9IHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5OworCisJd29yZCA9IChmcmVxdWVuY3kgKyA1MDApIC8gMTAwMDsKKwlpZiAoZnJlcXVlbmN5IDwgMTA3MjAwMCkKKwkJd29yZCA9ICh3b3JkIDw8IDEgJiB+MHgxZikgfCAod29yZCAmIDB4MGYpOworCisJYnVmWzBdID0gMHhmZTsKKwlidWZbMV0gPSAweGMwOworCWJ1ZlsyXSA9IDB4NDAgfCB3b3JkID4+IDg7CisJYnVmWzNdID0gd29yZDsKKwlidWZbNF0gPSAweGUwOworCWJ1Zls1XSA9IHZhMWo1amY4MDA3c19sb29rdXBfY2IoZnJlcXVlbmN5KTsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3Nfc2V0X2ZyZXF1ZW5jeV8yKHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlKQoreworCXU4IGJ1ZlszXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwlidWZbMF0gPSAweGZlOworCWJ1ZlsxXSA9IDB4YzA7CisJYnVmWzJdID0gMHhlNDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3Nfc2V0X2ZyZXF1ZW5jeV8zKHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlKQoreworCXUzMiBmcmVxdWVuY3k7CisJdTggYnVmWzRdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWZyZXF1ZW5jeSA9IHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5OworCisJYnVmWzBdID0gMHhmZTsKKwlidWZbMV0gPSAweGMwOworCWJ1ZlsyXSA9IDB4ZjQ7CisJYnVmWzNdID0gdmExajVqZjgwMDdzX2xvb2t1cF9jYihmcmVxdWVuY3kpIHwgMHg0OworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3NfY2hlY2tfZnJlcXVlbmN5KHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlLCBpbnQgKmxvY2spCit7CisJdTggYWRkcjsKKwl1OCB3cml0ZV9idWZbMl0sIHJlYWRfYnVmWzFdOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CisKKwlhZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKworCXdyaXRlX2J1ZlswXSA9IDB4ZmU7CisJd3JpdGVfYnVmWzFdID0gMHhjMTsKKworCW1zZ3NbMF0uYWRkciA9IGFkZHI7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1swXS5sZW4gPSBzaXplb2Yod3JpdGVfYnVmKTsKKwltc2dzWzBdLmJ1ZiA9IHdyaXRlX2J1ZjsKKworCW1zZ3NbMV0uYWRkciA9IGFkZHI7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMV0ubGVuID0gc2l6ZW9mKHJlYWRfYnVmKTsKKwltc2dzWzFdLmJ1ZiA9IHJlYWRfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgbXNncywgMikgIT0gMikKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwkqbG9jayA9IHJlYWRfYnVmWzBdICYgMHg0MDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3Nfc2V0X21vZHVsYXRpb24oc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUpCit7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWJ1ZlswXSA9IDB4MDM7CisJYnVmWzFdID0gMHgwMTsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmExajVqZjgwMDdzX2NoZWNrX21vZHVsYXRpb24oc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUsIGludCAqbG9jaykKK3sKKwl1OCBhZGRyOworCXU4IHdyaXRlX2J1ZlsxXSwgcmVhZF9idWZbMV07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCWFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCisJd3JpdGVfYnVmWzBdID0gMHhjMzsKKworCW1zZ3NbMF0uYWRkciA9IGFkZHI7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1swXS5sZW4gPSBzaXplb2Yod3JpdGVfYnVmKTsKKwltc2dzWzBdLmJ1ZiA9IHdyaXRlX2J1ZjsKKworCW1zZ3NbMV0uYWRkciA9IGFkZHI7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMV0ubGVuID0gc2l6ZW9mKHJlYWRfYnVmKTsKKwltc2dzWzFdLmJ1ZiA9IHJlYWRfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgbXNncywgMikgIT0gMikKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwkqbG9jayA9ICEocmVhZF9idWZbMF0gJiAweDEwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmExajVqZjgwMDdzX3NldF90c19pZChzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZSkKK3sKKwl1MzIgdHNfaWQ7CisJdTggYnVmWzNdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCXRzX2lkID0gc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2Ric190c19pZDsKKwlpZiAoIXRzX2lkKQorCQlyZXR1cm4gMDsKKworCWJ1ZlswXSA9IDB4OGY7CisJYnVmWzFdID0gdHNfaWQgPj4gODsKKwlidWZbMl0gPSB0c19pZDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmExajVqZjgwMDdzX2NoZWNrX3RzX2lkKHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlLCBpbnQgKmxvY2spCit7CisJdTggYWRkcjsKKwl1OCB3cml0ZV9idWZbMV0sIHJlYWRfYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CisJdTMyIHRzX2lkOworCisJdHNfaWQgPSBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJzX3RzX2lkOworCWlmICghdHNfaWQpIHsKKwkJKmxvY2sgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlhZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKworCXdyaXRlX2J1ZlswXSA9IDB4ZTY7CisKKwltc2dzWzBdLmFkZHIgPSBhZGRyOworCW1zZ3NbMF0uZmxhZ3MgPSAwOworCW1zZ3NbMF0ubGVuID0gc2l6ZW9mKHdyaXRlX2J1Zik7CisJbXNnc1swXS5idWYgPSB3cml0ZV9idWY7CisKKwltc2dzWzFdLmFkZHIgPSBhZGRyOworCW1zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwltc2dzWzFdLmxlbiA9IHNpemVvZihyZWFkX2J1Zik7CisJbXNnc1sxXS5idWYgPSByZWFkX2J1ZjsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmFkYXAsIG1zZ3MsIDIpICE9IDIpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJKmxvY2sgPSAocmVhZF9idWZbMF0gPDwgOCB8IHJlYWRfYnVmWzFdKSA9PSB0c19pZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmExajVqZjgwMDdzX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCisJCSAgdW5zaWduZWQgaW50IG1vZGVfZmxhZ3MsICB1bnNpZ25lZCBpbnQgKmRlbGF5LAorCQkgIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGU7CisJaW50IHJldDsKKwlpbnQgbG9jazsKKworCXN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAocGFyYW1zICE9IE5VTEwpCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMTsKKworCXN3aXRjaCAoc3RhdGUtPnR1bmVfc3RhdGUpIHsKKwljYXNlIFZBMUo1SkY4MDA3U19JRExFOgorCQkqZGVsYXkgPSAzICogSFo7CisJCSpzdGF0dXMgPSAwOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMToKKwkJcmV0ID0gdmExajVqZjgwMDdzX3NldF9mcmVxdWVuY3lfMShzdGF0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19TRVRfRlJFUVVFTkNZXzI7CisJCSpkZWxheSA9IDA7CisJCSpzdGF0dXMgPSAwOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMjoKKwkJcmV0ID0gdmExajVqZjgwMDdzX3NldF9mcmVxdWVuY3lfMihzdGF0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19TRVRfRlJFUVVFTkNZXzM7CisJCSpkZWxheSA9IChIWiArIDk5KSAvIDEwMDsKKwkJKnN0YXR1cyA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8zOgorCQlyZXQgPSB2YTFqNWpmODAwN3Nfc2V0X2ZyZXF1ZW5jeV8zKHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX0NIRUNLX0ZSRVFVRU5DWTsKKwkJKmRlbGF5ID0gMDsKKwkJKnN0YXR1cyA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1NfQ0hFQ0tfRlJFUVVFTkNZOgorCQlyZXQgPSB2YTFqNWpmODAwN3NfY2hlY2tfZnJlcXVlbmN5KHN0YXRlLCAmbG9jayk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoIWxvY2spICB7CisJCQkqZGVsYXkgPSAoSFogKyA5OTkpIC8gMTAwMDsKKwkJCSpzdGF0dXMgPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19TRVRfTU9EVUxBVElPTjsKKwkJKmRlbGF5ID0gMDsKKwkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUw7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX01PRFVMQVRJT046CisJCXJldCA9IHZhMWo1amY4MDA3c19zZXRfbW9kdWxhdGlvbihzdGF0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19DSEVDS19NT0RVTEFUSU9OOworCQkqZGVsYXkgPSAwOworCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3U19DSEVDS19NT0RVTEFUSU9OOgorCQlyZXQgPSB2YTFqNWpmODAwN3NfY2hlY2tfbW9kdWxhdGlvbihzdGF0ZSwgJmxvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKCFsb2NrKSAgeworCQkJKmRlbGF5ID0gKEhaICsgNDkpIC8gNTA7CisJCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1NfU0VUX1RTX0lEOworCQkqZGVsYXkgPSAwOworCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdTX1NFVF9UU19JRDoKKwkJcmV0ID0gdmExajVqZjgwMDdzX3NldF90c19pZChzdGF0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19DSEVDS19UU19JRDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3U19DSEVDS19UU19JRDoKKwkJcmV0ID0gdmExajVqZjgwMDdzX2NoZWNrX3RzX2lkKHN0YXRlLCAmbG9jayk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoIWxvY2spICB7CisJCQkqZGVsYXkgPSAoSFogKyA5OSkgLyAxMDA7CisJCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19UUkFDSzsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIFZBMUo1SkY4MDA3U19UUkFDSzoKKwkJKmRlbGF5ID0gMyAqIEhaOworCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX0xPQ0s7CisJCXJldHVybiAwOworCX0KKworCUJVRygpOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19pbml0X2ZyZXF1ZW5jeShzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBidWZbNF07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJYnVmWzBdID0gMHhmZTsKKwlidWZbMV0gPSAweGMwOworCWJ1ZlsyXSA9IDB4ZjA7CisJYnVmWzNdID0gMHgwNDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3Nfc2V0X3NsZWVwKHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlLCBpbnQgc2xlZXApCit7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWJ1ZlswXSA9IDB4MTc7CisJYnVmWzFdID0gc2xlZXAgPyAweDAxIDogMHgwMDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3Nfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGU7CisJaW50IHJldDsKKworCXN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlyZXQgPSB2YTFqNWpmODAwN3NfaW5pdF9mcmVxdWVuY3koc3RhdGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHZhMWo1amY4MDA3c19zZXRfc2xlZXAoc3RhdGUsIDEpOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19JRExFOworCisJcmV0dXJuIHZhMWo1amY4MDA3c19zZXRfc2xlZXAoc3RhdGUsIDApOworfQorCitzdGF0aWMgdm9pZCB2YTFqNWpmODAwN3NfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZTsKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHZhMWo1amY4MDA3c19vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lID0gIlZBMUo1SkY4MDA3IElTREItUyIsCisJCS50eXBlID0gRkVfUVBTSywKKwkJLmZyZXF1ZW5jeV9taW4gPSA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ID0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDEwMDAsCisJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RQU1fQVVUTyB8IEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwKKwkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwgRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCX0sCisKKwkuZ2V0X2Zyb250ZW5kX2FsZ28gPSB2YTFqNWpmODAwN3NfZ2V0X2Zyb250ZW5kX2FsZ28sCisJLnJlYWRfc3RhdHVzID0gdmExajVqZjgwMDdzX3JlYWRfc3RhdHVzLAorCS50dW5lID0gdmExajVqZjgwMDdzX3R1bmUsCisJLnNsZWVwID0gdmExajVqZjgwMDdzX3NsZWVwLAorCS5pbml0ID0gdmExajVqZjgwMDdzX2luaXQsCisJLnJlbGVhc2UgPSB2YTFqNWpmODAwN3NfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDdzX3ByZXBhcmVfMShzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBhZGRyOworCXU4IHdyaXRlX2J1ZlsxXSwgcmVhZF9idWZbMV07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCWFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCisJd3JpdGVfYnVmWzBdID0gMHgwNzsKKworCW1zZ3NbMF0uYWRkciA9IGFkZHI7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1swXS5sZW4gPSBzaXplb2Yod3JpdGVfYnVmKTsKKwltc2dzWzBdLmJ1ZiA9IHdyaXRlX2J1ZjsKKworCW1zZ3NbMV0uYWRkciA9IGFkZHI7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMV0ubGVuID0gc2l6ZW9mKHJlYWRfYnVmKTsKKwltc2dzWzFdLmJ1ZiA9IHJlYWRfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgbXNncywgMikgIT0gMikKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAocmVhZF9idWZbMF0gIT0gMHg0MSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHU4IHZhMWo1amY4MDA3c19wcmVwYXJlX2J1ZnNbXVsyXSA9IHsKKwl7MHgwNCwgMHgwMn0sIHsweDBkLCAweDU1fSwgezB4MTEsIDB4NDB9LCB7MHgxMywgMHg4MH0sIHsweDE3LCAweDAxfSwKKwl7MHgxYywgMHgwYX0sIHsweDFkLCAweGFhfSwgezB4MWUsIDB4MjB9LCB7MHgxZiwgMHg4OH0sIHsweDUxLCAweGIwfSwKKwl7MHg1MiwgMHg4OX0sIHsweDUzLCAweGIzfSwgezB4NWEsIDB4MmR9LCB7MHg1YiwgMHhkM30sIHsweDg1LCAweDY5fSwKKwl7MHg4NywgMHgwNH0sIHsweDhlLCAweDAyfSwgezB4YTMsIDB4Zjd9LCB7MHhhNSwgMHhjMH0sCit9OworCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19wcmVwYXJlXzIoc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUpCit7CisJdTggYWRkcjsKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCWludCBpOworCisJYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisKKwltc2cuYWRkciA9IGFkZHI7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gMjsKKwltc2cuYnVmID0gYnVmOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhMWo1amY4MDA3c19wcmVwYXJlX2J1ZnMpOyBpKyspIHsKKwkJbWVtY3B5KGJ1ZiwgdmExajVqZjgwMDdzX3ByZXBhcmVfYnVmc1tpXSwgc2l6ZW9mKGJ1ZikpOworCQlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIGFmdGVyIHZhMWo1amY4MDA3dF9hdHRhY2ggKi8KK2ludCB2YTFqNWpmODAwN3NfcHJlcGFyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0OworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXJldCA9IHZhMWo1amY4MDA3c19wcmVwYXJlXzEoc3RhdGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdmExajVqZjgwMDdzX3ByZXBhcmVfMihzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gdmExajVqZjgwMDdzX2luaXRfZnJlcXVlbmN5KHN0YXRlKTsKK30KKworc3RydWN0IGR2Yl9mcm9udGVuZCAqCit2YTFqNWpmODAwN3NfYXR0YWNoKGNvbnN0IHN0cnVjdCB2YTFqNWpmODAwN3NfY29uZmlnICpjb25maWcsCisJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGU7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+YWRhcCA9IGFkYXA7CisKKwlmZSA9ICZzdGF0ZS0+ZmU7CisJbWVtY3B5KCZmZS0+b3BzLCAmdmExajVqZjgwMDdzX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJZmUtPmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCWJ1ZlswXSA9IDB4MDE7CisJYnVmWzFdID0gMHg4MDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkgeworCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBmZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3MuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTIyOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3cy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBJU0RCLVMgZHJpdmVyIGZvciBWQTFKNUpGODAwNworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBISVJBTk8gVGFrYWhpdG8gPGhpcmFub3Rha2FAem5nLmluZm8+CisgKgorICogYmFzZWQgb24gcHQxZHZyIC0gaHR0cDovL3B0MWR2ci5zb3VyY2Vmb3JnZS5qcC8KKyAqIAlieSBUb21vYWtpIElzaGlrYXdhIDx0b215QHVzZXJzLnNvdXJjZWZvcmdlLmpwPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgVkExSjVKRjgwMDdTX0gKKyNkZWZpbmUgVkExSjVKRjgwMDdTX0gKKworc3RydWN0IHZhMWo1amY4MDA3c19jb25maWcgeworCXU4IGRlbW9kX2FkZHJlc3M7Cit9OworCitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKgordmExajVqZjgwMDdzX2F0dGFjaChjb25zdCBzdHJ1Y3QgdmExajVqZjgwMDdzX2NvbmZpZyAqY29uZmlnLAorCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKKworLyogbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdmExajVqZjgwMDd0X2F0dGFjaCAqLworaW50IHZhMWo1amY4MDA3c19wcmVwYXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvdmExajVqZjgwMDd0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvdmExajVqZjgwMDd0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMTdmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3QuYwpAQCAtMCwwICsxLDQ2OCBAQAorLyoKKyAqIElTREItVCBkcml2ZXIgZm9yIFZBMUo1SkY4MDA3CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhJUkFOTyBUYWthaGl0byA8aGlyYW5vdGFrYUB6bmcuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBwdDFkdnIgLSBodHRwOi8vcHQxZHZyLnNvdXJjZWZvcmdlLmpwLworICogCWJ5IFRvbW9ha2kgSXNoaWthd2EgPHRvbXlAdXNlcnMuc291cmNlZm9yZ2UuanA+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmJfbWF0aC5oIgorI2luY2x1ZGUgInZhMWo1amY4MDA3dC5oIgorCitlbnVtIHZhMWo1amY4MDA3dF90dW5lX3N0YXRlIHsKKwlWQTFKNUpGODAwN1RfSURMRSwKKwlWQTFKNUpGODAwN1RfU0VUX0ZSRVFVRU5DWSwKKwlWQTFKNUpGODAwN1RfQ0hFQ0tfRlJFUVVFTkNZLAorCVZBMUo1SkY4MDA3VF9TRVRfTU9EVUxBVElPTiwKKwlWQTFKNUpGODAwN1RfQ0hFQ0tfTU9EVUxBVElPTiwKKwlWQTFKNUpGODAwN1RfVFJBQ0ssCisJVkExSjVKRjgwMDdUX0FCT1JULAorfTsKKworc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSB7CisJY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3dF9jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBmZTsKKwllbnVtIHZhMWo1amY4MDA3dF90dW5lX3N0YXRlIHR1bmVfc3RhdGU7Cit9OworCitzdGF0aWMgaW50IHZhMWo1amY4MDA3dF9nZXRfZnJvbnRlbmRfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gRFZCRkVfQUxHT19IVzsKK30KKworc3RhdGljIGludAordmExajVqZjgwMDd0X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN3aXRjaCAoc3RhdGUtPnR1bmVfc3RhdGUpIHsKKwljYXNlIFZBMUo1SkY4MDA3VF9JRExFOgorCWNhc2UgVkExSjVKRjgwMDdUX1NFVF9GUkVRVUVOQ1k6CisJY2FzZSBWQTFKNUpGODAwN1RfQ0hFQ0tfRlJFUVVFTkNZOgorCQkqc3RhdHVzID0gMDsKKwkJcmV0dXJuIDA7CisKKworCWNhc2UgVkExSjVKRjgwMDdUX1NFVF9NT0RVTEFUSU9OOgorCWNhc2UgVkExSjVKRjgwMDdUX0NIRUNLX01PRFVMQVRJT046CisJY2FzZSBWQTFKNUpGODAwN1RfQUJPUlQ6CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3VF9UUkFDSzoKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfTE9DSzsKKwkJcmV0dXJuIDA7CisJfQorCisJQlVHKCk7Cit9CisKK3N0cnVjdCB2YTFqNWpmODAwN3RfY2JfbWFwIHsKKwl1MzIgZnJlcXVlbmN5OworCXU4IGNiOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2YTFqNWpmODAwN3RfY2JfbWFwIHZhMWo1amY4MDA3dF9jYl9tYXBzW10gPSB7CisJeyAgOTAwMDAwMDAsIDB4ODAgfSwKKwl7IDE0MDAwMDAwMCwgMHg4MSB9LAorCXsgMTcwMDAwMDAwLCAweGExIH0sCisJeyAyMjAwMDAwMDAsIDB4NjIgfSwKKwl7IDMzMDAwMDAwMCwgMHhhMiB9LAorCXsgNDAyMDAwMDAwLCAweGUyIH0sCisJeyA0NTAwMDAwMDAsIDB4NjQgfSwKKwl7IDU1MDAwMDAwMCwgMHg4NCB9LAorCXsgNjAwMDAwMDAwLCAweGE0IH0sCisJeyA3MDAwMDAwMDAsIDB4YzQgfSwKK307CisKK3N0YXRpYyB1OCB2YTFqNWpmODAwN3RfbG9va3VwX2NiKHUzMiBmcmVxdWVuY3kpCit7CisJaW50IGk7CisJY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3dF9jYl9tYXAgKm1hcDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhMWo1amY4MDA3dF9jYl9tYXBzKTsgaSsrKSB7CisJCW1hcCA9ICZ2YTFqNWpmODAwN3RfY2JfbWFwc1tpXTsKKwkJaWYgKGZyZXF1ZW5jeSA8IG1hcC0+ZnJlcXVlbmN5KQorCQkJcmV0dXJuIG1hcC0+Y2I7CisJfQorCXJldHVybiAweGU0OworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3dF9zZXRfZnJlcXVlbmN5KHN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlKQoreworCXUzMiBmcmVxdWVuY3k7CisJdTE2IHdvcmQ7CisJdTggYnVmWzZdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWZyZXF1ZW5jeSA9IHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5OworCisJd29yZCA9IChmcmVxdWVuY3kgKyA3MTQyOCkgLyAxNDI4NTcgKyAzOTk7CisJYnVmWzBdID0gMHhmZTsKKwlidWZbMV0gPSAweGMyOworCWJ1ZlsyXSA9IHdvcmQgPj4gODsKKwlidWZbM10gPSB3b3JkOworCWJ1Zls0XSA9IDB4ODA7CisJYnVmWzVdID0gdmExajVqZjgwMDd0X2xvb2t1cF9jYihmcmVxdWVuY3kpOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3RfY2hlY2tfZnJlcXVlbmN5KHN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlLCBpbnQgKmxvY2spCit7CisJdTggYWRkcjsKKwl1OCB3cml0ZV9idWZbMl0sIHJlYWRfYnVmWzFdOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CisKKwlhZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKworCXdyaXRlX2J1ZlswXSA9IDB4ZmU7CisJd3JpdGVfYnVmWzFdID0gMHhjMzsKKworCW1zZ3NbMF0uYWRkciA9IGFkZHI7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1swXS5sZW4gPSBzaXplb2Yod3JpdGVfYnVmKTsKKwltc2dzWzBdLmJ1ZiA9IHdyaXRlX2J1ZjsKKworCW1zZ3NbMV0uYWRkciA9IGFkZHI7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMV0ubGVuID0gc2l6ZW9mKHJlYWRfYnVmKTsKKwltc2dzWzFdLmJ1ZiA9IHJlYWRfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgbXNncywgMikgIT0gMikKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwkqbG9jayA9IHJlYWRfYnVmWzBdICYgMHg0MDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3Rfc2V0X21vZHVsYXRpb24oc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGUpCit7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWJ1ZlswXSA9IDB4MDE7CisJYnVmWzFdID0gMHg0MDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3RfY2hlY2tfbW9kdWxhdGlvbihzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlICpzdGF0ZSwKKwkJCQkJIGludCAqbG9jaywgaW50ICpyZXRyeSkKK3sKKwl1OCBhZGRyOworCXU4IHdyaXRlX2J1ZlsxXSwgcmVhZF9idWZbMV07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCWFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCisJd3JpdGVfYnVmWzBdID0gMHg4MDsKKworCW1zZ3NbMF0uYWRkciA9IGFkZHI7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1swXS5sZW4gPSBzaXplb2Yod3JpdGVfYnVmKTsKKwltc2dzWzBdLmJ1ZiA9IHdyaXRlX2J1ZjsKKworCW1zZ3NbMV0uYWRkciA9IGFkZHI7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMV0ubGVuID0gc2l6ZW9mKHJlYWRfYnVmKTsKKwltc2dzWzFdLmJ1ZiA9IHJlYWRfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgbXNncywgMikgIT0gMikKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwkqbG9jayA9ICEocmVhZF9idWZbMF0gJiAweDEwKTsKKwkqcmV0cnkgPSByZWFkX2J1ZlswXSAmIDB4ODA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhMWo1amY4MDA3dF90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAorCQkgIHVuc2lnbmVkIGludCBtb2RlX2ZsYWdzLCAgdW5zaWduZWQgaW50ICpkZWxheSwKKwkJICBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlOworCWludCByZXQ7CisJaW50IGxvY2ssIHJldHJ5OworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChwYXJhbXMgIT0gTlVMTCkKKwkJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1RfU0VUX0ZSRVFVRU5DWTsKKworCXN3aXRjaCAoc3RhdGUtPnR1bmVfc3RhdGUpIHsKKwljYXNlIFZBMUo1SkY4MDA3VF9JRExFOgorCQkqZGVsYXkgPSAzICogSFo7CisJCSpzdGF0dXMgPSAwOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdUX1NFVF9GUkVRVUVOQ1k6CisJCXJldCA9IHZhMWo1amY4MDA3dF9zZXRfZnJlcXVlbmN5KHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdUX0NIRUNLX0ZSRVFVRU5DWTsKKwkJKmRlbGF5ID0gMDsKKwkJKnN0YXR1cyA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1RfQ0hFQ0tfRlJFUVVFTkNZOgorCQlyZXQgPSB2YTFqNWpmODAwN3RfY2hlY2tfZnJlcXVlbmN5KHN0YXRlLCAmbG9jayk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoIWxvY2spICB7CisJCQkqZGVsYXkgPSAoSFogKyA5OTkpIC8gMTAwMDsKKwkJCSpzdGF0dXMgPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3VF9TRVRfTU9EVUxBVElPTjsKKwkJKmRlbGF5ID0gMDsKKwkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUw7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1RfU0VUX01PRFVMQVRJT046CisJCXJldCA9IHZhMWo1amY4MDA3dF9zZXRfbW9kdWxhdGlvbihzdGF0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3VF9DSEVDS19NT0RVTEFUSU9OOworCQkqZGVsYXkgPSAwOworCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3VF9DSEVDS19NT0RVTEFUSU9OOgorCQlyZXQgPSB2YTFqNWpmODAwN3RfY2hlY2tfbW9kdWxhdGlvbihzdGF0ZSwgJmxvY2ssICZyZXRyeSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoIWxvY2spICB7CisJCQlpZiAoIXJldHJ5KSAgeworCQkJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdUX0FCT1JUOworCQkJCSpkZWxheSA9IDMgKiBIWjsKKwkJCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCSpkZWxheSA9IChIWiArIDk5OSkgLyAxMDAwOworCQkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUw7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdUX1RSQUNLOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgVkExSjVKRjgwMDdUX1RSQUNLOgorCQkqZGVsYXkgPSAzICogSFo7CisJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfTE9DSzsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3VF9BQk9SVDoKKwkJKmRlbGF5ID0gMyAqIEhaOworCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJcmV0dXJuIDA7CisJfQorCisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDd0X2luaXRfZnJlcXVlbmN5KHN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlKQoreworCXU4IGJ1Zls3XTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwlidWZbMF0gPSAweGZlOworCWJ1ZlsxXSA9IDB4YzI7CisJYnVmWzJdID0gMHgwMTsKKwlidWZbM10gPSAweDhmOworCWJ1Zls0XSA9IDB4YzE7CisJYnVmWzVdID0gMHg4MDsKKwlidWZbNl0gPSAweDgwOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3dF9zZXRfc2xlZXAoc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGUsIGludCBzbGVlcCkKK3sKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJYnVmWzBdID0gMHgwMzsKKwlidWZbMV0gPSBzbGVlcCA/IDB4OTAgOiAweDgwOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3dF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0OworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXJldCA9IHZhMWo1amY4MDA3dF9pbml0X2ZyZXF1ZW5jeShzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gdmExajVqZjgwMDd0X3NldF9zbGVlcChzdGF0ZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDd0X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdUX0lETEU7CisKKwlyZXR1cm4gdmExajVqZjgwMDd0X3NldF9zbGVlcChzdGF0ZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHZhMWo1amY4MDA3dF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlOworCXN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgdmExajVqZjgwMDd0X29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiVkExSjVKRjgwMDcgSVNEQi1UIiwKKwkJLnR5cGUgPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbiA9IDkwMDAwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDc3MDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDE0Mjg1NywKKwkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FBTV9BVVRPIHwgRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfCBGRV9DQU5fSElFUkFSQ0hZX0FVVE8sCisJfSwKKworCS5nZXRfZnJvbnRlbmRfYWxnbyA9IHZhMWo1amY4MDA3dF9nZXRfZnJvbnRlbmRfYWxnbywKKwkucmVhZF9zdGF0dXMgPSB2YTFqNWpmODAwN3RfcmVhZF9zdGF0dXMsCisJLnR1bmUgPSB2YTFqNWpmODAwN3RfdHVuZSwKKwkuc2xlZXAgPSB2YTFqNWpmODAwN3Rfc2xlZXAsCisJLmluaXQgPSB2YTFqNWpmODAwN3RfaW5pdCwKKwkucmVsZWFzZSA9IHZhMWo1amY4MDA3dF9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHU4IHZhMWo1amY4MDA3dF9wcmVwYXJlX2J1ZnNbXVsyXSA9IHsKKwl7MHgwMywgMHg5MH0sIHsweDE0LCAweDhmfSwgezB4MWMsIDB4MmF9LCB7MHgxZCwgMHhhOH0sIHsweDFlLCAweGEyfSwKKwl7MHgyMiwgMHg4M30sIHsweDMxLCAweDBkfSwgezB4MzIsIDB4ZTB9LCB7MHgzOSwgMHhkM30sIHsweDNhLCAweDAwfSwKKwl7MHg1YywgMHg0MH0sIHsweDVmLCAweDgwfSwgezB4NzUsIDB4MDJ9LCB7MHg3NiwgMHg0ZX0sIHsweDc3LCAweDAzfSwKKwl7MHhlZiwgMHgwMX0KK307CisKK2ludCB2YTFqNWpmODAwN3RfcHJlcGFyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlICpzdGF0ZTsKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCWludCBpOworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmExajVqZjgwMDd0X3ByZXBhcmVfYnVmcyk7IGkrKykgeworCQltZW1jcHkoYnVmLCB2YTFqNWpmODAwN3RfcHJlcGFyZV9idWZzW2ldLCBzaXplb2YoYnVmKSk7CisJCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmFkYXAsICZtc2csIDEpICE9IDEpCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gdmExajVqZjgwMDd0X2luaXRfZnJlcXVlbmN5KHN0YXRlKTsKK30KKworc3RydWN0IGR2Yl9mcm9udGVuZCAqCit2YTFqNWpmODAwN3RfYXR0YWNoKGNvbnN0IHN0cnVjdCB2YTFqNWpmODAwN3RfY29uZmlnICpjb25maWcsCisJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+YWRhcCA9IGFkYXA7CisKKwlmZSA9ICZzdGF0ZS0+ZmU7CisJbWVtY3B5KCZmZS0+b3BzLCAmdmExajVqZjgwMDd0X29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJZmUtPmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCWJ1ZlswXSA9IDB4MDE7CisJYnVmWzFdID0gMHg4MDsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsKKwltc2cuYnVmID0gYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkgeworCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBmZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3QuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQ5OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3dC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBJU0RCLVQgZHJpdmVyIGZvciBWQTFKNUpGODAwNworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBISVJBTk8gVGFrYWhpdG8gPGhpcmFub3Rha2FAem5nLmluZm8+CisgKgorICogYmFzZWQgb24gcHQxZHZyIC0gaHR0cDovL3B0MWR2ci5zb3VyY2Vmb3JnZS5qcC8KKyAqIAlieSBUb21vYWtpIElzaGlrYXdhIDx0b215QHVzZXJzLnNvdXJjZWZvcmdlLmpwPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgVkExSjVKRjgwMDdUX0gKKyNkZWZpbmUgVkExSjVKRjgwMDdUX0gKKworc3RydWN0IHZhMWo1amY4MDA3dF9jb25maWcgeworCXU4IGRlbW9kX2FkZHJlc3M7Cit9OworCitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKgordmExajVqZjgwMDd0X2F0dGFjaChjb25zdCBzdHJ1Y3QgdmExajVqZjgwMDd0X2NvbmZpZyAqY29uZmlnLAorCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKKworLyogbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdmExajVqZjgwMDdzX2F0dGFjaCAqLworaW50IHZhMWo1amY4MDA3dF9wcmVwYXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKaW5kZXggYmQ5YWI5ZC4uZmE2YTYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYwpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAkJCQkJICAgICZtc2csIHNpemVvZihtc2cpKTsKIH0KIAotLyogbmV3IEdQSU8gbWFuYWdtZW50IGltcGxlbWVudGF0aW9uICovCisvKiBuZXcgR1BJTyBtYW5hZ2VtZW50IGltcGxlbWVudGF0aW9uICovCiBzdGF0aWMgaW50IEdldEdwaW9QaW5QYXJhbXModTMyIFBpbk51bSwgdTMyICpwVHJhbnNsYXRlZFBpbk51bSwKIAkJdTMyICpwR3JvdXBOdW0sIHUzMiAqcEdyb3VwQ2ZnKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAppbmRleCBmMTEwOGM2Li5lZWMxOGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCkBAIC02NTcsMTIgKzY1NywxMiBAQAogZXh0ZXJuIHZvaWQgc21zY29yZV9wdXRidWZmZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCiAJCQkgICAgICBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpOwogCi0vKiBvbGQgR1BJTyBtYW5hZ21lbnQgKi8KKy8qIG9sZCBHUElPIG1hbmFnZW1lbnQgKi8KIGludCBzbXNjb3JlX2NvbmZpZ3VyZV9ncGlvKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCB1MzIgcGluLAogCQkJICAgc3RydWN0IHNtc2NvcmVfY29uZmlnX2dwaW8gKnBpbmNvbmZpZyk7CiBpbnQgc21zY29yZV9zZXRfZ3BpbyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgdTMyIHBpbiwgaW50IGxldmVsKTsKIAotLyogbmV3IEdQSU8gbWFuYWdtZW50ICovCisvKiBuZXcgR1BJTyBtYW5hZ2VtZW50ICovCiBleHRlcm4gaW50IHNtc2NvcmVfZ3Bpb19jb25maWd1cmUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIHU4IFBpbk51bSwKIAkJc3RydWN0IHNtc2NvcmVfZ3Bpb19jb25maWcgKnBHcGlvQ29uZmlnKTsKIGV4dGVybiBpbnQgc21zY29yZV9ncGlvX3NldF9sZXZlbChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgdTggUGluTnVtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCmluZGV4IDI1YTM2YWQuLmE4N2E0NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKQEAgLTM0Niw3ICszNDYsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCB0byBTaTQ3MTMgRk0gUmFkaW8gVHJhbnNtaXR0ZXIuCiAJICBUaGlzIGRldmljZSBjYW4gdHJhbnNtaXQgYXVkaW8gdGhyb3VnaCBGTS4gSXQgY2FuIHRyYW5zbWl0Ci0JICBFRFMgYW5kIEVCRFMgc2lnbmFscyBhcyB3ZWxsLiBUaGlzIG1vZHVsZSBpcyB0aGUgdjRsMiByYWRpbworCSAgUkRTIGFuZCBSQkRTIHNpZ25hbHMgYXMgd2VsbC4gVGhpcyBtb2R1bGUgaXMgdGhlIHY0bDIgcmFkaW8KIAkgIGludGVyZmFjZSBmb3IgdGhlIGkyYyBkcml2ZXIgb2YgdGhpcyBkZXZpY2UuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCmluZGV4IDU3NWJmOWQuLmExMjM5MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqIFZlcnNpb24gMC4xMToJQ29udmVydGVkIHRvIHY0bDJfZGV2aWNlLgogICoKICAqIE1hbnkgdGhpbmdzIHRvIGRvOgotICogCS0gQ29ycmVjdCBwb3dlciBtYW5hZ21lbnQgb2YgZGV2aWNlIChzdXNwZW5kICYgcmVzdW1lKQorICogCS0gQ29ycmVjdCBwb3dlciBtYW5hZ2VtZW50IG9mIGRldmljZSAoc3VzcGVuZCAmIHJlc3VtZSkKICAqIAktIEFkZCBjb2RlIGZvciBzY2FubmluZyBhbmQgc21vb3RoIHR1bmluZwogICogCS0gQWRkIGNvZGUgZm9yIHNlbnNpdGl2aXR5IHZhbHVlCiAgKiAJLSBDb3JyZWN0IG1pc3Rha2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcxMy5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MTMuYwppbmRleCA2NWMxNGI3Li4xNzBiYmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcxMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzEzLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDFkNzU4NTIuLmU2MTg2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTI2NSw2ICsyNjUsMTUgQEAKIAogY29tbWVudCAiVmlkZW8gZGVjb2RlcnMiCiAKK2NvbmZpZyBWSURFT19BRFY3MTgwCisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxODAgZGVjb2RlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVjcxODAgdmlkZW8gZGVjb2Rlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWR2NzE4MC4KKwogY29uZmlnIFZJREVPX0JUODE5CiAJdHJpc3RhdGUgIkJUODE5QSBWaWRlb1N0cmVhbSBkZWNvZGVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKQEAgLTQ5Myw2ICs1MDIsMzkgQEAKIAogZW5kbWVudSAjIGVuY29kZXIgLyBkZWNvZGVyIGNoaXBzCiAKK2NvbmZpZyBESVNQTEFZX0RBVklOQ0lfRE02NDZYX0VWTQorCXRyaXN0YXRlICJETTY0NnggRVZNIFZpZGVvIERpc3BsYXkiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgTUFDSF9EQVZJTkNJX0RNNjQ2N19FVk0KKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCXNlbGVjdCBWSURFT19EQVZJTkNJX1ZQSUYKKwlzZWxlY3QgVklERU9fQURWNzM0MworCXNlbGVjdCBWSURFT19USFM3MzAzCisJaGVscAorCSAgU3VwcG9ydCBmb3IgRE02NDY3IGJhc2VkIGRpc3BsYXkgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGlmX2Rpc3BsYXkuCisKK2NvbmZpZyBDQVBUVVJFX0RBVklOQ0lfRE02NDZYX0VWTQorCXRyaXN0YXRlICJETTY0NnggRVZNIFZpZGVvIENhcHR1cmUiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgTUFDSF9EQVZJTkNJX0RNNjQ2N19FVk0KKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCXNlbGVjdCBWSURFT19EQVZJTkNJX1ZQSUYKKwloZWxwCisJICBTdXBwb3J0IGZvciBETTY0NjcgYmFzZWQgY2FwdHVyZSBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwaWZfY2FwdHVyZS4KKworY29uZmlnIFZJREVPX0RBVklOQ0lfVlBJRgorCXRyaXN0YXRlICJEYVZpbmNpIFZQSUYgRHJpdmVyIgorCWRlcGVuZHMgb24gRElTUExBWV9EQVZJTkNJX0RNNjQ2WF9FVk0KKwloZWxwCisJICBTdXBwb3J0IGZvciBEYVZpbmNpIFZQSUYgRHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGlmLgorCiBjb25maWcgVklERU9fVklWSQogCXRyaXN0YXRlICJWaXJ0dWFsIFZpZGVvIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBWSURFT19WNEwyICYmICFTUEFSQzMyICYmICFTUEFSQzY0CkBAIC01MDUsNiArNTQ3LDU1IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHRlc3QgdmlkZW8gYXBwcyBvciBkZWJ1ZyBWNEwgZGV2aWNlcy4KIAkgIEluIGRvdWJ0LCBzYXkgTi4KIAorY29uZmlnIFZJREVPX1ZQU1NfU1lTVEVNCisJdHJpc3RhdGUgIlZQU1MgU3lzdGVtIG1vZHVsZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0kKKwloZWxwCisJICBTdXBwb3J0IGZvciB2cHNzIHN5c3RlbSBtb2R1bGUgZm9yIHZpZGVvIGRyaXZlcgorCWRlZmF1bHQgeQorCitjb25maWcgVklERU9fVlBGRV9DQVBUVVJFCisJdHJpc3RhdGUgIlZQRkUgVmlkZW8gQ2FwdHVyZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEFSQ0hfREFWSU5DSQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJaGVscAorCSAgU3VwcG9ydCBmb3IgRE1YWFhYIFZQRkUgYmFzZWQgZnJhbWUgZ3JhYmJlci4gVGhpcyBpcyB0aGUKKwkgIGNvbW1vbiBWNEwyIG1vZHVsZSBmb3IgZm9sbG93aW5nIERNWFhYIFNvQ3MgZnJvbSBUZXhhcworCSAgSW5zdHJ1bWVudHM6LSBETTY0NDYgJiBETTM1NS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS1jYXB0dXJlLgorCitjb25maWcgVklERU9fRE02NDQ2X0NDREMKKwl0cmlzdGF0ZSAiRE02NDQ2IENDREMgSFcgbW9kdWxlIgorCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNNjQ0eCAmJiBWSURFT19WUEZFX0NBUFRVUkUKKwlzZWxlY3QgVklERU9fVlBTU19TWVNURU0KKwlkZWZhdWx0IHkKKwloZWxwCisJICAgRW5hYmxlcyBEYVZpbmNpIENDRCBodyBtb2R1bGUuIERhVmluY2kgQ0NEQyBodyBpbnRlcmZhY2VzCisJICAgd2l0aCBkZWNvZGVyIG1vZHVsZXMgc3VjaCBhcyBUVlA1MTQ2IG92ZXIgQlQ2NTYgb3IKKwkgICBzZW5zb3IgbW9kdWxlIHN1Y2ggYXMgTVQ5VDAwMSBvdmVyIGEgcmF3IGludGVyZmFjZS4gVGhpcworCSAgIG1vZHVsZSBjb25maWd1cmVzIHRoZSBpbnRlcmZhY2UgYW5kIENDREMvSVNJRiB0byBkbworCSAgIHZpZGVvIGZyYW1lIGNhcHR1cmUgZnJvbSBzbGF2ZSBkZWNvZGVycy4KKworCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgorCitjb25maWcgVklERU9fRE0zNTVfQ0NEQworCXRyaXN0YXRlICJETTM1NSBDQ0RDIEhXIG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM1NSAmJiBWSURFT19WUEZFX0NBUFRVUkUKKwlzZWxlY3QgVklERU9fVlBTU19TWVNURU0KKwlkZWZhdWx0IHkKKwloZWxwCisJICAgRW5hYmxlcyBETTM1NSBDQ0QgaHcgbW9kdWxlLiBETTM1NSBDQ0RDIGh3IGludGVyZmFjZXMKKwkgICB3aXRoIGRlY29kZXIgbW9kdWxlcyBzdWNoIGFzIFRWUDUxNDYgb3ZlciBCVDY1NiBvcgorCSAgIHNlbnNvciBtb2R1bGUgc3VjaCBhcyBNVDlUMDAxIG92ZXIgYSByYXcgaW50ZXJmYWNlLiBUaGlzCisJICAgbW9kdWxlIGNvbmZpZ3VyZXMgdGhlIGludGVyZmFjZSBhbmQgQ0NEQy9JU0lGIHRvIGRvCisJICAgdmlkZW8gZnJhbWUgY2FwdHVyZSBmcm9tIGEgc2xhdmUgZGVjb2RlcnMKKworCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgorCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZyIKIAogY29uZmlnIFZJREVPX1BNUwpAQCAtNjkwLDYgKzc4MSw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L0tjb25maWciCisKIGNvbmZpZyBWSURFT19NMzJSX0FSCiAJdHJpc3RhdGUgIkFSIGRldmljZXMiCiAJZGVwZW5kcyBvbiBNMzJSICYmIFZJREVPX1Y0TDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDlmMmUzMjEuLmU1NDE5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtNDUsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxOTEpICs9IHNhYTcxOTEubwogb2JqLSQoQ09ORklHX1ZJREVPX0FEVjcxNzApICs9IGFkdjcxNzAubwogb2JqLSQoQ09ORklHX1ZJREVPX0FEVjcxNzUpICs9IGFkdjcxNzUubworb2JqLSQoQ09ORklHX1ZJREVPX0FEVjcxODApICs9IGFkdjcxODAubwogb2JqLSQoQ09ORklHX1ZJREVPX0FEVjczNDMpICs9IGFkdjczNDMubwogb2JqLSQoQ09ORklHX1ZJREVPX1ZQWDMyMjApICs9IHZweDMyMjAubwogb2JqLSQoQ09ORklHX1ZJREVPX0JUODE5KSArPSBidDgxOS5vCkBAIC0xNTQsMTIgKzE1NSwxNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1BYQTI3eCkJCSs9IHB4YV9jYW1lcmEubwogb2JqLSQoQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUpCSs9IHNoX21vYmlsZV9jZXVfY2FtZXJhLm8KIAorb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkJCSs9IGRhdmluY2kvCisKIG9iai0kKENPTkZJR19WSURFT19BVTA4MjgpICs9IGF1MDgyOC8KIAogb2JqLSQoQ09ORklHX1VTQl9WSURFT19DTEFTUykJKz0gdXZjLworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxNjQpICAgICArPSBzYWE3MTY0LwogCiBvYmotJChDT05GSUdfVklERU9fSVJfSTJDKSAgKz0gaXIta2JkLWkyYy5vCiAKK29iai0kKENPTkZJR19BUkNIX0RBVklOQ0kpCSs9IGRhdmluY2kvCisKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTgwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNjYmQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTgwLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBhZHY3MTgwLmMgQW5hbG9nIERldmljZXMgQURWNzE4MCB2aWRlbyBkZWNvZGVyIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJhZHY3MTgwIgorCisjZGVmaW5lIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9SRUcJMHgwMAorI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUEFMX0JHX05UU0NfSl9TRUNBTQkweDAwCisjZGVmaW5lIEFEVjcxODBfQVVUT0RFVEVDVF9FTkFCTEVfUkVHCTB4MDcKKyNkZWZpbmUgQURWNzE4MF9BVVRPREVURUNUX0RFRkFVTFQJMHg3ZgorCisKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX1JFRyAweDEwCisjZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9NQVNLIDB4NzAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX05UU01fTV9KCTB4MDAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX05UU0NfNF80MyAweDEwCisjZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9QQUxfTQkweDIwCisjZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9QQUxfNjAJMHgzMAorI2RlZmluZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfUEFMX0JfRwkweDQwCisjZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9TRUNBTQkweDUwCisjZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9QQUxfQ09NQgkweDYwCisjZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9TRUNBTV81MjUJMHg3MAorCisjZGVmaW5lIEFEVjcxODBfSURFTlRfUkVHIDB4MTEKKyNkZWZpbmUgQURWNzE4MF9JRF83MTgwIDB4MTgKKworCitzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworfTsKKworc3RhdGljIHY0bDJfc3RkX2lkIGRldGVybWluZV9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJdTggc3RhdHVzMSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfU1RBVFVTMV9SRUcpOworCisJc3dpdGNoIChzdGF0dXMxICYgQURWNzE4MF9TVEFUVVMxX0FVVE9EX01BU0spIHsKKwljYXNlIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9OVFNNX01fSjoKKwkJcmV0dXJuIFY0TDJfU1REX05UU0NfTV9KUDsKKwljYXNlIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9OVFNDXzRfNDM6CisJCXJldHVybiBWNEwyX1NURF9OVFNDXzQ0MzsKKwljYXNlIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9QQUxfTToKKwkJcmV0dXJuIFY0TDJfU1REX1BBTF9NOworCWNhc2UgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1BBTF82MDoKKwkJcmV0dXJuIFY0TDJfU1REX1BBTF82MDsKKwljYXNlIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9QQUxfQl9HOgorCQlyZXR1cm4gVjRMMl9TVERfUEFMOworCWNhc2UgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1NFQ0FNOgorCQlyZXR1cm4gVjRMMl9TVERfU0VDQU07CisJY2FzZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfUEFMX0NPTUI6CisJCXJldHVybiBWNEwyX1NURF9QQUxfTmMgfCBWNEwyX1NURF9QQUxfTjsKKwljYXNlIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9TRUNBTV81MjU6CisJCXJldHVybiBWNEwyX1NURF9TRUNBTTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVjRMMl9TVERfVU5LTk9XTjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkdjcxODBfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGFkdjcxODBfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGludCBhZHY3MTgwX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJKnN0ZCA9IGRldGVybWluZV9ub3JtKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE4MF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX0FEVjcxODAsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBhZHY3MTgwX3ZpZGVvX29wcyA9IHsKKwkucXVlcnlzdGQgPSBhZHY3MTgwX3F1ZXJ5c3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBhZHY3MTgwX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBhZHY3MTgwX2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGFkdjcxODBfb3BzID0geworCS5jb3JlID0gJmFkdjcxODBfY29yZV9vcHMsCisJLnZpZGVvID0gJmFkdjcxODBfdmlkZW9fb3BzLAorfTsKKworLyoKKyAqIEdlbmVyaWMgaTJjIHByb2JlCisgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCisgKi8KKworc3RhdGljIGludCBhZHY3MTgwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IHJldDsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdjcxODBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZhZHY3MTgwX29wcyk7CisKKwkvKiBJbml0aWFsaXplIGFkdjcxODAgKi8KKwkvKiBlbmFibGUgYXV0b2RldGVjdGlvbiAqLworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUkVHLAorCQlBRFY3MTgwX0lOUFVUX0NPTlRST0xfUEFMX0JHX05UU0NfSl9TRUNBTSk7CisJaWYgKHJldCA+IDApCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJQURWNzE4MF9BVVRPREVURUNUX0VOQUJMRV9SRUcsCisJCQlBRFY3MTgwX0FVVE9ERVRFQ1RfREVGQVVMVCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCQkiOiBGYWlsZWQgdG8gY29tbXVuaWNhdGUgdG8gY2hpcDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE4MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdjcxODBfaWRbXSA9IHsKKwl7RFJJVkVSX05BTUUsIDB9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdjcxODBfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWR2NzE4MF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKKwkucHJvYmUJCT0gYWR2NzE4MF9wcm9iZSwKKwkucmVtb3ZlCQk9IGFkdjcxODBfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGFkdjcxODBfaWQsCit9OworCitzdGF0aWMgX19pbml0IGludCBhZHY3MTgwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFkdjcxODBfZHJpdmVyKTsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkIGFkdjcxODBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZHY3MTgwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFkdjcxODBfaW5pdCk7Cittb2R1bGVfZXhpdChhZHY3MTgwX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEVjcxODAgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MzQzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjczNDMuYwppbmRleCAzMGY1Y2FmLi5kZjI2ZjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjczNDMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjczNDMuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9hZHY3MzQzLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKaW5kZXggODMwYzRhOS4uNTdkZDkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQkgICBiZSBhYnN0cmFjdGVkIG91dCBpZiB3ZSBldmVyIG5lZWQgdG8gc3VwcG9ydCBhIGRpZmZlcmVudAogCQkgICBkZW1vZCkgKi8KIAkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKLQkJCQkiYXU4NTIyIiwgImF1ODUyMiIsIDB4OGUgPj4gMSk7CisJCQkJImF1ODUyMiIsICJhdTg1MjIiLCAweDhlID4+IDEsIE5VTEwpOwogCQlpZiAoc2QgPT0gTlVMTCkKIAkJCXByaW50ayhLRVJOX0VSUiAiYW5hbG9nIHN1YmRldiByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAl9CkBAIC0yMjEsNyArMjIxLDcgQEAKIAlpZiAoZGV2LT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkgewogCQkvKiBMb2FkIHRoZSB0dW5lciBtb2R1bGUsIHdoaWNoIGRvZXMgdGhlIGF0dGFjaCAqLwogCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAotCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+Ym9hcmQudHVuZXJfYWRkcik7CisJCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT5ib2FyZC50dW5lcl9hZGRyLCBOVUxMKTsKIAkJaWYgKHNkID09IE5VTEwpCiAJCQlwcmludGsoS0VSTl9FUlIgInR1bmVyIHN1YmRldiByZWdpc3RyYXRpb24gZmFpbFxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKaW5kZXggYjQyMjUxZi4uMTIyNzlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKQEAgLTM1MjQsOCArMzUyNCw4IEBACiAJCX07CiAJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAotCQkJJmJ0di0+Yy5pMmNfYWRhcCwgInNhYTY1ODgiLCAic2FhNjU4OCIsIGFkZHJzKTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCisJCQkmYnR2LT5jLmkyY19hZGFwLCAic2FhNjU4OCIsICJzYWE2NTg4IiwgMCwgYWRkcnMpOwogCQlidHYtPmhhc19zYWE2NTg4ID0gKHNkICE9IE5VTEwpOwogCX0KIApAQCAtMzU0OSw4ICszNTQ5LDggQEAKIAkJCUkyQ19DTElFTlRfRU5ECiAJCX07CiAKLQkJYnR2LT5zZF9tc3AzNHh4ID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKLQkJCSZidHYtPmMuaTJjX2FkYXAsICJtc3AzNDAwIiwgIm1zcDM0MDAiLCBhZGRycyk7CisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKKwkJCSZidHYtPmMuaTJjX2FkYXAsICJtc3AzNDAwIiwgIm1zcDM0MDAiLCAwLCBhZGRycyk7CiAJCWlmIChidHYtPnNkX21zcDM0eHgpCiAJCQlyZXR1cm47CiAJCWdvdG8gbm9fYXVkaW87CkBAIC0zNTYzLDE2ICszNTYzLDE2IEBACiAJCQlJMkNfQ0xJRU5UX0VORAogCQl9OwogCi0JCWlmICh2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAotCQkJCSZidHYtPmMuaTJjX2FkYXAsICJ0ZGE3NDMyIiwgInRkYTc0MzIiLCBhZGRycykpCisJCWlmICh2NGwyX2kyY19uZXdfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCisJCQkJJmJ0di0+Yy5pMmNfYWRhcCwgInRkYTc0MzIiLCAidGRhNzQzMiIsIDAsIGFkZHJzKSkKIAkJCXJldHVybjsKIAkJZ290byBub19hdWRpbzsKIAl9CiAKIAljYXNlIDM6IHsKIAkJLyogVGhlIHVzZXIgc3BlY2lmaWVkIHRoYXQgd2Ugc2hvdWxkIHByb2JlIGZvciB0dmF1ZGlvICovCi0JCWJ0di0+c2RfdHZhdWRpbyA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCi0JCQkmYnR2LT5jLmkyY19hZGFwLCAidHZhdWRpbyIsICJ0dmF1ZGlvIiwgdHZhdWRpb19hZGRycygpKTsKKwkJYnR2LT5zZF90dmF1ZGlvID0gdjRsMl9pMmNfbmV3X3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAorCQkJJmJ0di0+Yy5pMmNfYWRhcCwgInR2YXVkaW8iLCAidHZhdWRpbyIsIDAsIHR2YXVkaW9fYWRkcnMoKSk7CiAJCWlmIChidHYtPnNkX3R2YXVkaW8pCiAJCQlyZXR1cm47CiAJCWdvdG8gbm9fYXVkaW87CkBAIC0zNTkxLDEzICszNTkxLDEzIEBACiAJICAgaXQgcmVhbGx5IGlzIGEgbXNwMzQwMCwgc28gaXQgd2lsbCByZXR1cm4gTlVMTCB3aGVuIHRoZSBkZXZpY2UKIAkgICBmb3VuZCBpcyByZWFsbHkgc29tZXRoaW5nIGVsc2UgKGUuZy4gYSB0ZWE2MzAwKS4gKi8KIAlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fbXNwMzR4eCkgewotCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZidHYtPmMudjRsMl9kZXYsCisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKIAkJCSZidHYtPmMuaTJjX2FkYXAsICJtc3AzNDAwIiwgIm1zcDM0MDAiLAotCQkJSTJDX0FERFJfTVNQMzQwMCA+PiAxKTsKKwkJCTAsIEkyQ19BRERSUyhJMkNfQUREUl9NU1AzNDAwID4+IDEpKTsKIAl9IGVsc2UgaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXNwMzR4eF9hbHQpIHsKLQkJYnR2LT5zZF9tc3AzNHh4ID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXZfYWRkcigmYnR2LT5jLnY0bDJfZGV2LAorCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCiAJCQkmYnR2LT5jLmkyY19hZGFwLCAibXNwMzQwMCIsICJtc3AzNDAwIiwKLQkJCUkyQ19BRERSX01TUDM0MDBfQUxUID4+IDEpOworCQkJMCwgSTJDX0FERFJTKEkyQ19BRERSX01TUDM0MDBfQUxUID4+IDEpKTsKIAl9CiAKIAkvKiBJZiB3ZSBmb3VuZCBhIG1zcDM0eHgsIHRoZW4gd2UncmUgZG9uZS4gKi8KQEAgLTM2MTEsMTQgKzM2MTEsMTQgQEAKIAkJCUkyQ19DTElFTlRfRU5ECiAJCX07CiAKLQkJaWYgKHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCi0JCQkJJmJ0di0+Yy5pMmNfYWRhcCwgInRkYTc0MzIiLCAidGRhNzQzMiIsIGFkZHJzKSkKKwkJaWYgKHY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKKwkJCQkmYnR2LT5jLmkyY19hZGFwLCAidGRhNzQzMiIsICJ0ZGE3NDMyIiwgMCwgYWRkcnMpKQogCQkJcmV0dXJuOwogCX0KIAogCS8qIE5vdyBzZWUgaWYgd2UgY2FuIGZpbmQgb25lIG9mIHRoZSB0dmF1ZGlvIGRldmljZXMuICovCi0JYnR2LT5zZF90dmF1ZGlvID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKLQkJJmJ0di0+Yy5pMmNfYWRhcCwgInR2YXVkaW8iLCAidHZhdWRpbyIsIHR2YXVkaW9fYWRkcnMoKSk7CisJYnR2LT5zZF90dmF1ZGlvID0gdjRsMl9pMmNfbmV3X3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAorCQkmYnR2LT5jLmkyY19hZGFwLCAidHZhdWRpbyIsICJ0dmF1ZGlvIiwgMCwgdHZhdWRpb19hZGRycygpKTsKIAlpZiAoYnR2LT5zZF90dmF1ZGlvKQogCQlyZXR1cm47CiAKQEAgLTM2NDEsMTUgKzM2NDEsMTUgQEAKIAogCQkvKiBMb2FkIHR1bmVyIG1vZHVsZSBiZWZvcmUgaXNzdWluZyB0dW5lciBjb25maWcgY2FsbCEgKi8KIAkJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JhZGlvKQotCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKIAkJCQkmYnR2LT5jLmkyY19hZGFwLCAidHVuZXIiLCAidHVuZXIiLAotCQkJCXY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX1JBRElPKSk7Ci0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCisJCQkJMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfUkFESU8pKTsKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAogCQkJCSZidHYtPmMuaTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKLQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKKwkJCQkwLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCiAJCQkJJmJ0di0+Yy5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQl2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19UVl9XSVRIX0RFTU9EKSk7CisJCQkJMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfVFZfV0lUSF9ERU1PRCkpOwogCiAJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UVjsKIAkJdHVuX3NldHVwLnR5cGUgPSBidHYtPnR1bmVyX3R5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA5YzE0OWE3Li42NTdjNDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTE5NTUsNyArMTk1NSw3IEBACiAKIAljYW0tPnNlbnNvcl9hZGRyID0gMHg0MjsKIAljYW0tPnNlbnNvciA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmNhbS0+djRsMl9kZXYsICZjYW0tPmkyY19hZGFwdGVyLAotCQkJIm92NzY3MCIsICJvdjc2NzAiLCBjYW0tPnNlbnNvcl9hZGRyKTsKKwkJCSJvdjc2NzAiLCAib3Y3NjcwIiwgY2FtLT5zZW5zb3JfYWRkciwgTlVMTCk7CiAJaWYgKGNhbS0+c2Vuc29yID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfc21idXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCmluZGV4IGRkMDIyNGYuLjZkZDUxZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAkJICJOdW1iZXIgb2YgZW5jb2RlciBQQ00gYnVmZmVyc1xuIgogCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfcGNtXyogcGFyYW1ldGVycyIpOwogCi1NT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsICJTZXQga2VybmVsIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CitNT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsICJTZXQgZGV2aWNlIG5vZGUgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKIAogTU9EVUxFX0FVVEhPUigiSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTggZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCmluZGV4IGRhMzk1ZmUuLjI0Nzc0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkvKiBPdXIgZGVmYXVsdCBpbmZvcm1hdGlvbiBmb3IgaXIta2JkLWkyYy5jIHRvIHVzZSAqLwogCXN3aXRjaCAoaHcpIHsKIAljYXNlIENYMThfSFdfWjhGMDgxMV9JUl9SWF9IQVVQOgotCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSAmejhmMDgxMV9pcl9pbml0X2RhdGE7CisJCWluZm8ucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopICZ6OGYwODExX2lyX2luaXRfZGF0YTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMzksMTYgKzEzOSwxNiBAQAogCiAJaWYgKGh3ID09IENYMThfSFdfVFVORVIpIHsKIAkJLyogc3BlY2lhbCB0dW5lciBncm91cCBoYW5kbGluZyAqLwotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjeC0+djRsMl9kZXYsCi0JCQkJYWRhcCwgbW9kLCB0eXBlLCBjeC0+Y2FyZF9pMmMtPnJhZGlvKTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjeC0+djRsMl9kZXYsCisJCQkJYWRhcCwgbW9kLCB0eXBlLCAwLCBjeC0+Y2FyZF9pMmMtPnJhZGlvKTsKIAkJaWYgKHNkICE9IE5VTEwpCiAJCQlzZC0+Z3JwX2lkID0gaHc7Ci0JCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmN4LT52NGwyX2RldiwKLQkJCQlhZGFwLCBtb2QsIHR5cGUsIGN4LT5jYXJkX2kyYy0+ZGVtb2QpOworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmN4LT52NGwyX2RldiwKKwkJCQlhZGFwLCBtb2QsIHR5cGUsIDAsIGN4LT5jYXJkX2kyYy0+ZGVtb2QpOwogCQlpZiAoc2QgIT0gTlVMTCkKIAkJCXNkLT5ncnBfaWQgPSBodzsKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY3gtPnY0bDJfZGV2LAotCQkJCWFkYXAsIG1vZCwgdHlwZSwgY3gtPmNhcmRfaTJjLT50dik7CisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmY3gtPnY0bDJfZGV2LAorCQkJCWFkYXAsIG1vZCwgdHlwZSwgMCwgY3gtPmNhcmRfaTJjLT50dik7CiAJCWlmIChzZCAhPSBOVUxMKQogCQkJc2QtPmdycF9pZCA9IGh3OwogCQlyZXR1cm4gc2QgIT0gTlVMTCA/IDAgOiAtMTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKiBJdCdzIGFuIEkyQyBkZXZpY2Ugb3RoZXIgdGhhbiBhbiBhbmFsb2cgdHVuZXIgb3IgSVIgY2hpcCAqLwotCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmY3gtPnY0bDJfZGV2LCBhZGFwLCBtb2QsIHR5cGUsIGh3X2FkZHJzW2lkeF0pOworCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmY3gtPnY0bDJfZGV2LCBhZGFwLCBtb2QsIHR5cGUsIGh3X2FkZHJzW2lkeF0sIE5VTEwpOwogCWlmIChzZCAhPSBOVUxMKQogCQlzZC0+Z3JwX2lkID0gaHc7CiAJcmV0dXJuIHNkICE9IE5VTEwgPyAwIDogLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKaW5kZXggNTRkMjQ4ZS4uN2RmNTEzYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTI0NSw5ICsyNDUsOSBAQAogCXZpZGVvX3NldF9kcnZkYXRhKHMtPnZpZGVvX2Rldiwgcyk7CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnZpZGVvX2RldiwgdmZsX3R5cGUsIG51bSk7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX25vX3dhcm4ocy0+dmlkZW9fZGV2LCB2ZmxfdHlwZSwgbnVtKTsKIAlpZiAocmV0IDwgMCkgewotCQlDWDE4X0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIGtlcm5lbCBudW1iZXIgJWRcbiIsCisJCUNYMThfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMgKGRldmljZSBub2RlIG51bWJlciAlZClcbiIsCiAJCQlzLT5uYW1lLCBudW0pOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52aWRlb19kZXYpOwogCQlzLT52aWRlb19kZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNhcmRzLmMKaW5kZXggNjNkMjIzOS4uMzE5YzQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCkBAIC0zMTMsNyArMzEzLDcgQEAKIAlpZiAoZGV2LT5ib2FyZC5kZWNvZGVyID09IENYMjMxWFhfQVZERUNPREVSKSB7CiAJCWRldi0+c2RfY3gyNTg0MCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJCSZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXAsCi0JCQkJCSJjeDI1ODQwIiwgImN4MjU4NDAiLCAweDg4ID4+IDEpOworCQkJCQkiY3gyNTg0MCIsICJjeDI1ODQwIiwgMHg4OCA+PiAxLCBOVUxMKTsKIAkJaWYgKGRldi0+c2RfY3gyNTg0MCA9PSBOVUxMKQogCQkJY3gyMzF4eF9pbmZvKCJjeDI1ODQwIHN1YmRldiByZWdpc3RyYXRpb24gZmFpbHVyZVxuIik7CiAJCWN4MjU4NDBfY2FsbChkZXYsIGNvcmUsIGxvYWRfZncpOwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJaWYgKGRldi0+Ym9hcmQudHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpIHsKIAkJZGV2LT5zZF90dW5lciA9CXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKLQkJCQkidHVuZXIiLCAidHVuZXIiLCAweGMyID4+IDEpOworCQkJCSJ0dW5lciIsICJ0dW5lciIsIDB4YzIgPj4gMSwgTlVMTCk7CiAJCWlmIChkZXYtPnNkX3R1bmVyID09IE5VTEwpCiAJCQljeDIzMXh4X2luZm8oInR1bmVyIHN1YmRldiByZWdpc3RyYXRpb24gZmFpbHVyZVxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYwppbmRleCAwMzE2MjU3Li5jMDQyMjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCkBAIC03NSw3ICs3NSw2IEBACiAJdm9pZCAqcHJpdjsKIH07CiAKLXN0cnVjdCBtdXRleCBncGlvX211dGV4Oy8qIFR3byBDaU1heCdzIHVzZXMgc2FtZSBHUElPIGxpbmVzICovCiAKIGludCBuZXR1cF9yZWFkX2kyYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCByZWcsCiAJCQkJCQl1OCAqYnVmLCBpbnQgbGVuKQpAQCAtMTgzLDEwICsxODIsMTEgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQltdXRleF9sb2NrKCZncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPmdwaW9fbG9jayk7CiAKIAkvKiB3cml0ZSBhZGRyICovCiAJY3hfd3JpdGUoTUM0MTdfT0VOLCBORVRVUF9FTl9BTEwpOworCW1zbGVlcCgyKTsKIAljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwKIAkJCQlORVRVUF9BRExPIHwgKDB4ZmYgJiBhZGRyKSk7CiAJY3hfY2xlYXIoTUM0MTdfUldELCBORVRVUF9BRExPKTsKQEAgLTE5NCw5ICsxOTQsMTAgQEAKIAkJCQlORVRVUF9BREhJIHwgKDB4ZmYgJiAoYWRkciA+PiA4KSkpOwogCWN4X2NsZWFyKE1DNDE3X1JXRCwgTkVUVVBfQURISSk7CiAKLQlpZiAocmVhZCkgLyogZGF0YSBpbiAqLworCWlmIChyZWFkKSB7IC8qIGRhdGEgaW4gKi8KIAkJY3hfd3JpdGUoTUM0MTdfT0VOLCBORVRVUF9FTl9BTEwgfCBORVRVUF9EQVRBKTsKLQllbHNlIC8qIGRhdGEgb3V0ICovCisJCW1zbGVlcCgyKTsKKwl9IGVsc2UgLyogZGF0YSBvdXQgKi8KIAkJY3hfd3JpdGUoTUM0MTdfUldELCBORVRVUF9DVFJMX09GRiB8IGRhdGEpOwogCiAJLyogY2hvb3NlIGNoaXAgKi8KQEAgLTIwNiw3ICsyMDcsNyBAQAogCWN4X2NsZWFyKE1DNDE3X1JXRCwgKHJlYWQpID8gTkVUVVBfUkQgOiBORVRVUF9XUik7CiAJbWVtID0gbmV0dXBfY2lfZ2V0X21lbShkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmRldi0+Z3Bpb19sb2NrKTsKIAogCWlmICghcmVhZCkKIAkJaWYgKG1lbSA8IDApCkBAIC00MDMsNyArNDA0LDYgQEAKIAlzd2l0Y2ggKHBvcnQtPm5yKSB7CiAJY2FzZSAxOgogCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQwOwotCQltdXRleF9pbml0KCZncGlvX211dGV4KTsKIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggMzE0M2Q4NS4uYmZkZjc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0yMTAsNiArMjEwLDEwIEBACiAJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRU5DT0RFUiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDBdID0geworCQkubmFtZQkJPSAiQ29tcHJvIFZpZGVvTWF0ZSBFODAwIiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMzQxLDYgKzM0NSwxMCBAQAogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg4NTQxLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE4NTgsCisJCS5zdWJkZXZpY2UgPSAweGU4MDAsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMCwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfc3ViaWRzKTsKQEAgLTUzNiw2ICs1NDQsNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKKwljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FODAwOgogCQkvKiBUdW5lciBSZXNldCBDb21tYW5kICovCiAJCWJpdG1hc2sgPSAweDA0OwogCQlicmVhazsKQEAgLTY4Nyw2ICs2OTYsNyBAQAogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CiAJCS8qIEdQSU8tMiAgeGMzMDI4IHR1bmVyIHJlc2V0ICovCiAKIAkJLyogVGhlIGZvbGxvd2luZyBHUElPJ3MgYXJlIG9uIHRoZSBpbnRlcm5hbCBBVkNvcmUgKGN4MjU4NDApICovCkBAIC05MTEsNiArOTIxLDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTU6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjEwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FODAwOgogCWRlZmF1bHQ6CiAJCXRzMi0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLwogCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KQEAgLTkyNyw5ICs5MzgsMTAgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CiAJCWRldi0+c2RfY3gyNTg0MCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2J1c1syXS5pMmNfYWRhcCwKLQkJCQkiY3gyNTg0MCIsICJjeDI1ODQwIiwgMHg4OCA+PiAxKTsKKwkJCQkiY3gyNTg0MCIsICJjeDI1ODQwIiwgMHg4OCA+PiAxLCBOVUxMKTsKIAkJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2N4MjU4NDAsIGNvcmUsIGxvYWRfZncpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKaW5kZXggNDBkNDM4ZC4uYzMxMjg0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtNzU4LDYgKzc1OCw3IEBACiAJaW50IGk7CiAKIAltdXRleF9pbml0KCZkZXYtPmxvY2spOworCW11dGV4X2luaXQoJmRldi0+Z3Bpb19sb2NrKTsKIAogCWF0b21pY19pbmMoJmRldi0+cmVmY291bnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IDAyMmZhZDcuLjQ1ZTEzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC0yNTUsMTUgKzI1NSwxOCBAQAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX3RkYTE4MjcxX2NvbmZpZyA9IHsKIAkuc3RkX21hcCA9ICZoYXVwcGF1Z2VfdGRhMTgyNzFfc3RkX21hcCwKIAkuZ2F0ZSAgICA9IFREQTE4MjcxX0dBVEVfQU5BTE9HLAorCS5vdXRwdXRfb3B0ID0gVERBMTgyNzFfT1VUUFVUX0xUX09GRiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGhhdXBwYXVnZV9odnIxMjAwX3R1bmVyX2NvbmZpZyA9IHsKIAkuc3RkX21hcCA9ICZoYXVwcGF1Z2VfaHZyMTIwMF90ZGExODI3MV9zdGRfbWFwLAogCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLm91dHB1dF9vcHQgPSBUREExODI3MV9PVVRQVVRfTFRfT0ZGLAogfTsKIAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX2h2cjEyMTBfdHVuZXJfY29uZmlnID0gewogCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9ESUdJVEFMLAorCS5vdXRwdXRfb3B0ID0gVERBMTgyNzFfT1VUUFVUX0xUX09GRiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcCBoYXVwcGF1Z2VfaHZyMTI3eF9zdGRfbWFwID0gewpAQCAtMjc1LDYgKzI3OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGhhdXBwYXVnZV9odnIxMjd4X2NvbmZpZyA9IHsKIAkuc3RkX21hcCA9ICZoYXVwcGF1Z2VfaHZyMTI3eF9zdGRfbWFwLAorCS5vdXRwdXRfb3B0ID0gVERBMTgyNzFfT1VUUFVUX0xUX09GRiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnIGhhdXBwYXVnZV9sZ2R0MzMwNV9jb25maWcgPSB7CkBAIC03NDMsNiArNzQ3LDcgQEAKIAl9CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKKwljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FODAwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKIAogCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCA1ZDYwOTMzLi42NTRjYzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTE1MjEsMTEgKzE1MjEsMTEgQEAKIAkJaWYgKGRldi0+dHVuZXJfYWRkcikKIAkJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAotCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+dHVuZXJfYWRkcik7CisJCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT50dW5lcl9hZGRyLCBOVUxMKTsKIAkJZWxzZQotCQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT52NGwyX2RldiwKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAotCQkJCSJ0dW5lciIsICJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX1RWKSk7CisJCQkJInR1bmVyIiwgInR1bmVyIiwgMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfVFYpKTsKIAkJaWYgKHNkKSB7CiAJCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAppbmRleCA4NmYyNjk0Li5jYzdhMTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTc4LDYgKzc4LDcgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1MDYgICAgICAgICAgICAgMjIKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTIgICAgICAgMjMKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MCAgICAgICAgMjQKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDAgICAgMjUKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpAQCAtMzI1LDYgKzMyNiw3IEBACiAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBucjsKIAlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICBsb2NrOworCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgIGdwaW9fbG9jazsKIAogCS8qIGJvYXJkIGRldGFpbHMgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBib2FyZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uYwppbmRleCAwNDJiYmJiLi45OGE0OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWVlcHJvbS5jCkBAIC05NywxMSArOTcsMTEgQEAKIHsKIAlpbnQgaSwgajsKIAotCWNpbmZvLT5yZXYgPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIDEzKTsKKwljaW5mby0+cmV2ID0gIG5ldHVwX2VlcHJvbV9yZWFkKGkyY19hZGFwLCA2Myk7CiAKLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDY7IGkrKywgaisrKQorCWZvciAoaSA9IDY0LCBqID0gMDsgaSA8IDcwOyBpKyssIGorKykKIAkJY2luZm8tPnBvcnRbMF0ubWFjW2pdID0gIG5ldHVwX2VlcHJvbV9yZWFkKGkyY19hZGFwLCBpKTsKIAotCWZvciAoaSA9IDYsIGogPSAwOyBpIDwgMTI7IGkrKywgaisrKQorCWZvciAoaSA9IDcwLCBqID0gMDsgaSA8IDc2OyBpKyssIGorKykKIAkJY2luZm8tPnBvcnRbMV0ubWFjW2pdID0gIG5ldHVwX2VlcHJvbV9yZWFkKGkyY19hZGFwLCBpKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IDM1NmQ2ODkuLmZiZGMxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogCS5hZHZpc2VfcmVsZWFzZQk9IGN4ODgwMl9ibGFja2JpcmRfYWR2aXNlX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgaW50IGJsYWNrYmlyZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBibGFja2JpcmRfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gImN4MjM4OHggYmxhY2tiaXJkIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKIAkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCkBAIC0xMzg0LDcgKzEzODQsNyBAQAogCXJldHVybiBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfYmxhY2tiaXJkX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGJsYWNrYmlyZF9maW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYmxhY2tiaXJkX2Zpbmkodm9pZCkKIHsKIAljeDg4MDJfdW5yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9ibGFja2JpcmRfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IGU1ZjA3ZmIuLjMzYmU2MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMzQzOSwyMCArMzQzOSwyMCBAQAogCQkgICBUaGUgcmFkaW9fdHlwZSBpcyBzb21ldGltZXMgbWlzc2luZywgb3Igc2V0IHRvIFVOU0VUIGJ1dAogCQkgICBsYXRlciBjb2RlIGNvbmZpZ3VyZXMgYSB0ZWE1NzY3LgogCQkgKi8KLQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNvcmUtPnY0bDJfZGV2LCAmY29yZS0+aTJjX2FkYXAsCisJCXY0bDJfaTJjX25ld19zdWJkZXYoJmNvcmUtPnY0bDJfZGV2LCAmY29yZS0+aTJjX2FkYXAsCiAJCQkJInR1bmVyIiwgInR1bmVyIiwKLQkJCQl2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19SQURJTykpOworCQkJCTAsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX1JBRElPKSk7CiAJCWlmIChoYXNfZGVtb2QpCi0JCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY29yZS0+djRsMl9kZXYsCisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT52NGwyX2RldiwKIAkJCQkmY29yZS0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJCQkwLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOwogCQlpZiAoY29yZS0+Ym9hcmQudHVuZXJfYWRkciA9PSBBRERSX1VOU0VUKSB7Ci0JCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY29yZS0+djRsMl9kZXYsCisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT52NGwyX2RldiwKIAkJCQkmY29yZS0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJaGFzX2RlbW9kID8gdHZfYWRkcnMgKyA0IDogdHZfYWRkcnMpOworCQkJCTAsIGhhc19kZW1vZCA/IHR2X2FkZHJzICsgNCA6IHR2X2FkZHJzKTsKIAkJfSBlbHNlIHsKIAkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmNvcmUtPnY0bDJfZGV2LCAmY29yZS0+aTJjX2FkYXAsCi0JCQkJInR1bmVyIiwgInR1bmVyIiwgY29yZS0+Ym9hcmQudHVuZXJfYWRkcik7CisJCQkJInR1bmVyIiwgInR1bmVyIiwgY29yZS0+Ym9hcmQudHVuZXJfYWRkciwgTlVMTCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggNmU1ZDE0Mi4uNTE4YmNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTEzNTAsNyArMTM1MCw3IEBACiAJLmFkdmlzZV9yZWxlYXNlID0gY3g4ODAyX2R2Yl9hZHZpc2VfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQgZHZiX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGR2Yl9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3g4OC8yOiBjeDIzODh4IGR2YiBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCiAJICAgICAgIChDWDg4X1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLApAQCAtMTM2Myw3ICsxMzYzLDcgQEAKIAlyZXR1cm4gY3g4ODAyX3JlZ2lzdGVyX2RyaXZlcigmY3g4ODAyX2R2Yl9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBkdmJfZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGR2Yl9maW5pKHZvaWQpCiB7CiAJY3g4ODAyX3VucmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfZHZiX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggNzE3MmRjZi4uZGU5ZmYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtODcwLDcgKzg3MCw3IEBACiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoY3g4ODAyX3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IGN4ODgwMl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjeDg4MDJfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gImN4ODgvMjogY3gyMzg4eCBNUEVHLVRTIERyaXZlciBNYW5hZ2VyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAogCSAgICAgICAoQ1g4OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKQEAgLTg4Myw3ICs4ODMsNyBAQAogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGN4ODgwMl9maW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY3g4ODAyX2Zpbmkodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9wY2lfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IDJiYjU0YzMuLjU3ZTZiMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtMTg4MSwxNCArMTg4MSwxNCBAQAogCiAJaWYgKGNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgPT0gVjRMMl9JREVOVF9XTTg3NzUpCiAJCXY0bDJfaTJjX25ld19zdWJkZXYoJmNvcmUtPnY0bDJfZGV2LCAmY29yZS0+aTJjX2FkYXAsCi0JCQkJIndtODc3NSIsICJ3bTg3NzUiLCAweDM2ID4+IDEpOworCQkJCSJ3bTg3NzUiLCAid204Nzc1IiwgMHgzNiA+PiAxLCBOVUxMKTsKIAogCWlmIChjb3JlLT5ib2FyZC5hdWRpb19jaGlwID09IFY0TDJfSURFTlRfVFZBVURJTykgewogCQkvKiBUaGlzIHByb2JlcyBmb3IgYSB0ZGE5ODc0IGFzIGlzIHVzZWQgb24gc29tZQogCQkgICBQaXhlbHZpZXcgVWx0cmEgYm9hcmRzLiAqLwotCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZjb3JlLT52NGwyX2RldiwKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmY29yZS0+djRsMl9kZXYsCiAJCQkJJmNvcmUtPmkyY19hZGFwLAotCQkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCAweGIwID4+IDEpOworCQkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCAwLCBJMkNfQUREUlMoMHhiMCA+PiAxKSk7CiAJfQogCiAJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CkBAIC0yMTEzLDcgKzIxMTMsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IGN4ODgwMF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjeDg4MDBfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gImN4ODgvMDogY3gyMzg4eCB2NGwyIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKIAkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCkBAIC0yMTI2LDcgKzIxMjYsNyBAQAogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDBfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGN4ODgwMF9maW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY3g4ODAwX2Zpbmkodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMF9wY2lfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IDA2NjRkMTEuLmVlNDM4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtNzQ4LDE0ICs3NDgsMTQgQEAKIAkucmVsZWFzZSA9CWRhYnVzYl9yZWxlYXNlLAogfTsKIAotc3RhdGljIGNoYXIgKmRhYnVzYl9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqZGFidXNiX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAidXNiLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBkYWJ1c2JfY2xhc3MgPSB7CiAJLm5hbWUgPQkJImRhYnVzYiVkIiwKLQkubm9kZW5hbWUgPQlkYWJ1c2Jfbm9kZW5hbWUsCisJLmRldm5vZGUgPQlkYWJ1c2JfZGV2bm9kZSwKIAkuZm9wcyA9CQkmZGFidXNiX2ZvcHMsCiAJLm1pbm9yX2Jhc2UgPQlEQUJVU0JfTUlOT1IsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGI4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGRhdmluY2kgdmlkZW8gZGV2aWNlIGRyaXZlcnMuCisjCisKKyMgVlBJRgorb2JqLSQoQ09ORklHX1ZJREVPX0RBVklOQ0lfVlBJRikgKz0gdnBpZi5vCisKKyNETTY0NnggRVZNIERpc3BsYXkgZHJpdmVyCitvYmotJChDT05GSUdfRElTUExBWV9EQVZJTkNJX0RNNjQ2WF9FVk0pICs9IHZwaWZfZGlzcGxheS5vCisjRE02NDZ4IEVWTSBDYXB0dXJlIGRyaXZlcgorb2JqLSQoQ09ORklHX0NBUFRVUkVfREFWSU5DSV9ETTY0NlhfRVZNKSArPSB2cGlmX2NhcHR1cmUubworCisjIENhcHR1cmU6IERNNjQ0NiBhbmQgRE0zNTUKK29iai0kKENPTkZJR19WSURFT19WUFNTX1NZU1RFTSkgKz0gdnBzcy5vCitvYmotJChDT05GSUdfVklERU9fVlBGRV9DQVBUVVJFKSArPSB2cGZlX2NhcHR1cmUubworb2JqLSQoQ09ORklHX1ZJREVPX0RNNjQ0Nl9DQ0RDKSArPSBkbTY0NHhfY2NkYy5vCitvYmotJChDT05GSUdfVklERU9fRE0zNTVfQ0NEQykgKz0gZG0zNTVfY2NkYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvY2NkY19od19kZXZpY2UuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9jY2RjX2h3X2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjliMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvY2NkY19od19kZXZpY2UuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBjY2RjIGRldmljZSBBUEkKKyAqLworI2lmbmRlZiBfQ0NEQ19IV19ERVZJQ0VfSAorI2RlZmluZSBfQ0NEQ19IV19ERVZJQ0VfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBmZV90eXBlcy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvY2NkY190eXBlcy5oPgorCisvKgorICogY2NkYyBodyBvcGVyYXRpb25zCisgKi8KK3N0cnVjdCBjY2RjX2h3X29wcyB7CisJLyogUG9pbnRlciB0byBpbml0aWFsaXplIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgY2NkYyBkZXZpY2UgKi8KKwlpbnQgKCpvcGVuKSAoc3RydWN0IGRldmljZSAqZGV2KTsKKwkvKiBQb2ludGVyIHRvIGRlaW5pdGlhbGl6ZSBmdW5jdGlvbiAqLworCWludCAoKmNsb3NlKSAoc3RydWN0IGRldmljZSAqZGV2KTsKKwkvKiBzZXQgY2NkYyBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkICgqc2V0X2NjZGNfYmFzZSkodm9pZCAqYmFzZSwgaW50IHNpemUpOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gZW5hYmxlIG9yIGRpc2FibGUgY2NkYyAqLworCXZvaWQgKCplbmFibGUpIChpbnQgZW4pOworCS8qIHJlc2V0IHNibC4gb25seSBmb3IgNjQ0NiAqLworCXZvaWQgKCpyZXNldCkgKHZvaWQpOworCS8qIGVuYWJsZSBvdXRwdXQgdG8gc2RyYW0gKi8KKwl2b2lkICgqZW5hYmxlX291dF90b19zZHJhbSkgKGludCBlbik7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzZXQgaHcgcGFyYW1ldGVycyAqLworCWludCAoKnNldF9od19pZl9wYXJhbXMpIChzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSAqcGFyYW0pOworCS8qIGdldCBpbnRlcmZhY2UgcGFyYW1ldGVycyAqLworCWludCAoKmdldF9od19pZl9wYXJhbXMpIChzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSAqcGFyYW0pOworCS8qCisJICogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzZXQgcGFyYW1ldGVycy4gVXNlZAorCSAqIGZvciBpbXBsZW1lbnRpbmcgVlBGRV9TX0NDRENfUEFSQU1TCisJICovCisJaW50ICgqc2V0X3BhcmFtcykgKHZvaWQgKnBhcmFtcyk7CisJLyoKKwkgKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGdldCBwYXJhbWV0ZXIuIFVzZWQKKwkgKiBmb3IgaW1wbGVtZW50aW5nIFZQRkVfR19DQ0RDX1BBUkFNUworCSAqLworCWludCAoKmdldF9wYXJhbXMpICh2b2lkICpwYXJhbXMpOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gY29uZmlndXJlIGNjZGMgKi8KKwlpbnQgKCpjb25maWd1cmUpICh2b2lkKTsKKworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gc2V0IGJ1ZmZlciB0eXBlICovCisJaW50ICgqc2V0X2J1ZnR5cGUpIChlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSk7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBnZXQgYnVmZmVyIHR5cGUgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSAoKmdldF9idWZ0eXBlKSAodm9pZCk7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzZXQgZnJhbWUgZm9ybWF0ICovCisJaW50ICgqc2V0X2ZyYW1lX2Zvcm1hdCkgKGVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCk7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBnZXQgZnJhbWUgZm9ybWF0ICovCisJZW51bSBjY2RjX2ZybWZtdCAoKmdldF9mcmFtZV9mb3JtYXQpICh2b2lkKTsKKwkvKiBlbnVtZXJhdGUgaHcgcGl4IGZvcm1hdHMgKi8KKwlpbnQgKCplbnVtX3BpeCkodTMyICpod19waXgsIGludCBpKTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIHNldCBidWZmZXIgdHlwZSAqLworCXUzMiAoKmdldF9waXhlbF9mb3JtYXQpICh2b2lkKTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGdldCBwaXhlbCBmb3JtYXQuICovCisJaW50ICgqc2V0X3BpeGVsX2Zvcm1hdCkgKHUzMiBwaXhmbXQpOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gc2V0IGltYWdlIHdpbmRvdyAqLworCWludCAoKnNldF9pbWFnZV93aW5kb3cpIChzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gc2V0IGltYWdlIHdpbmRvdyAqLworCXZvaWQgKCpnZXRfaW1hZ2Vfd2luZG93KSAoc3RydWN0IHY0bDJfcmVjdCAqd2luKTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGdldCBsaW5lIGxlbmd0aCAqLworCXVuc2lnbmVkIGludCAoKmdldF9saW5lX2xlbmd0aCkgKHZvaWQpOworCisJLyogUXVlcnkgQ0NEQyBjb250cm9sIElEcyAqLworCWludCAoKnF1ZXJ5Y3RybCkoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCk7CisJLyogU2V0IENDREMgY29udHJvbCAqLworCWludCAoKnNldF9jb250cm9sKShzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKKwkvKiBHZXQgQ0NEQyBjb250cm9sICovCisJaW50ICgqZ2V0X2NvbnRyb2wpKHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworCisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzZXQgZnJhbWUgYnVmZmVyIGFkZHJlc3MgKi8KKwl2b2lkICgqc2V0ZmJhZGRyKSAodW5zaWduZWQgbG9uZyBhZGRyKTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGdldCBmaWVsZCBpZCAqLworCWludCAoKmdldGZpZCkgKHZvaWQpOworfTsKKworc3RydWN0IGNjZGNfaHdfZGV2aWNlIHsKKwkvKiBjY2RjIGRldmljZSBuYW1lICovCisJY2hhciBuYW1lWzMyXTsKKwkvKiBtb2R1bGUgb3duZXIgKi8KKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwkvKiBodyBvcHMgKi8KKwlzdHJ1Y3QgY2NkY19od19vcHMgaHdfb3BzOworfTsKKworLyogVXNlZCBieSBDQ0RDIG1vZHVsZSB0byByZWdpc3RlciAmIHVucmVnaXN0ZXIgd2l0aCB2cGZlIGNhcHR1cmUgZHJpdmVyICovCitpbnQgdnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZShzdHJ1Y3QgY2NkY19od19kZXZpY2UgKmRldik7Cit2b2lkIHZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZShzdHJ1Y3QgY2NkY19od19kZXZpY2UgKmRldik7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjI5Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYwpAQCAtMCwwICsxLDk3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBDQ0RDIGhhcmR3YXJlIG1vZHVsZSBmb3IgRE0zNTUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGZvciBjb25maWd1cmluZyBETTM1NSBDQ0QgY29udHJvbGxlciBvZiBWUEZFIHRvIGNhcHR1cmUKKyAqIFJhdyB5dXYgb3IgQmF5ZXIgUkdCIGRhdGEgZnJvbSBhIGRlY29kZXIuIENDREMgaGFzIHNldmVyYWwgbW9kdWxlcworICogc3VjaCBhcyBEZWZlY3QgUGl4ZWwgQ29ycmVjdGlvbiwgQ29sb3IgU3BhY2UgQ29udmVyc2lvbiBldGMgdG8KKyAqIHByZS1wcm9jZXNzIHRoZSBCYXllciBSR0IgZGF0YSwgYmVmb3JlIHdyaXRpbmcgaXQgdG8gU0RSQU0uIFRoaXMKKyAqIG1vZHVsZSBhbHNvIGFsbG93cyBhcHBsaWNhdGlvbiB0byBjb25maWd1cmUgaW5kaXZpZHVhbAorICogbW9kdWxlIHBhcmFtZXRlcnMgdGhyb3VnaCBWUEZFX0NNRF9TX0NDRENfUkFXX1BBUkFNUyBJT0NUTC4KKyAqIFRvIGRvIHNvLCBhcHBsaWNhdGlvbiBpbmNsdWRlIGRtMzU1X2NjZGMuaCBhbmQgdnBmZV9jYXB0dXJlLmggaGVhZGVyCisgKiBmaWxlcy4gVGhlIHNldHBhcmFtcygpIEFQSSBpcyBjYWxsZWQgYnkgdnBmZV9jYXB0dXJlIGRyaXZlcgorICogdG8gY29uZmlndXJlIG1vZHVsZSBwYXJhbWV0ZXJzCisgKgorICogVE9ETzogMSkgUmF3IGJheWVyIHBhcmFtZXRlciBzZXR0aW5ncyBhbmQgYmF5ZXIgY2FwdHVyZQorICogCSAyKSBTcGxpdCBtb2R1bGUgcGFyYW1ldGVyIHN0cnVjdHVyZSB0byBtb2R1bGUgc3BlY2lmaWMgaW9jdGwgc3RydWN0cworICoJIDMpIGFkZCBzdXBwb3J0IGZvciBsZW5zZSBzaGFkaW5nIGNvcnJlY3Rpb24KKyAqCSA0KSBpbnZlc3RpZ2F0ZSBpZiBlbnVtIHVzZWQgZm9yIHVzZXIgc3BhY2UgdHlwZSBkZWZpbml0aW9uCisgKiAJICAgIHRvIGJlIHJlcGxhY2VkIGJ5ICNkZWZpbmVzIG9yIGludGVnZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2RtMzU1X2NjZGMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKyNpbmNsdWRlICJkbTM1NV9jY2RjX3JlZ3MuaCIKKyNpbmNsdWRlICJjY2RjX2h3X2RldmljZS5oIgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNDREMgRHJpdmVyIGZvciBETTM1NSIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldjsKKworLyogT2JqZWN0IGZvciBDQ0RDIHJhdyBtb2RlICovCitzdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBjY2RjX2h3X3BhcmFtc19yYXcgPSB7CisJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCisJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwkud2luID0gQ0NEQ19XSU5fVkdBLAorCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkuZ2FpbiA9IHsKKwkJLnJfeWUgPSAyNTYsCisJCS5nYl9nID0gMjU2LAorCQkuZ3JfY3kgPSAyNTYsCisJCS5iX21nID0gMjU2CisJfSwKKwkuY29uZmlnX3BhcmFtcyA9IHsKKwkJLmRhdGFzZnQgPSAyLAorCQkuZGF0YV9zeiA9IENDRENfREFUQV8xMEJJVFMsCisJCS5tZmlsdDEgPSBDQ0RDX05PX01FRElBTl9GSUxURVIxLAorCQkubWZpbHQyID0gQ0NEQ19OT19NRURJQU5fRklMVEVSMiwKKwkJLmFsYXcgPSB7CisJCQkuZ2FtYV93ZCA9IDIsCisJCX0sCisJCS5ibGtfY2xhbXAgPSB7CisJCQkuc2FtcGxlX3BpeGVsID0gMSwKKwkJCS5kY19zdWIgPSAyNQorCQl9LAorCQkuY29sX3BhdF9maWVsZDAgPSB7CisJCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKKwkJCS5vbGVwID0gQ0NEQ19CTFVFLAorCQkJLmVsb3AgPSBDQ0RDX1JFRCwKKwkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKKwkJfSwKKwkJLmNvbF9wYXRfZmllbGQxID0geworCQkJLm9sb3AgPSBDQ0RDX0dSRUVOX0JMVUUsCisJCQkub2xlcCA9IENDRENfQkxVRSwKKwkJCS5lbG9wID0gQ0NEQ19SRUQsCisJCQkuZWxlcCA9IENDRENfR1JFRU5fUkVECisJCX0sCisJfSwKK307CisKKworLyogT2JqZWN0IGZvciBDQ0RDIHljYmNyIG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgY2NkY19od19wYXJhbXNfeWNiY3IgPSB7CisJLndpbiA9IENDRENfV0lOX1BBTCwKKwkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAorCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkuYnQ2NTZfZW5hYmxlID0gMSwKKwkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCisJLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRAorfTsKKworc3RhdGljIGVudW0gdnBmZV9od19pZl90eXBlIGNjZGNfaWZfdHlwZTsKK3N0YXRpYyB2b2lkICpfX2lvbWVtIGNjZGNfYmFzZV9hZGRyOworc3RhdGljIGludCBjY2RjX2FkZHJfc2l6ZTsKKworLyogUmF3IEJheWVyIGZvcm1hdHMgKi8KK3N0YXRpYyB1MzIgY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbXSA9CisJCXtWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX1BJWF9GTVRfU0JHR1IxNn07CisKKy8qIFJhdyBZVVYgZm9ybWF0cyAqLworc3RhdGljIHUzMiBjY2RjX3Jhd195dXZfcGl4X2Zvcm1hdHNbXSA9CisJCXtWNEwyX1BJWF9GTVRfVVlWWSwgVjRMMl9QSVhfRk1UX1lVWVZ9OworCisvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHJlZ3IodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgY2NkY19zZXRfY2NkY19iYXNlKHZvaWQgKmFkZHIsIGludCBzaXplKQoreworCWNjZGNfYmFzZV9hZGRyID0gYWRkcjsKKwljY2RjX2FkZHJfc2l6ZSA9IHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIGNjZGNfZW5hYmxlKGludCBlbikKK3sKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKwl0ZW1wID0gcmVncihTWU5DRU4pOworCXRlbXAgJj0gKH5DQ0RDX1NZTkNFTl9WREhERU5fTUFTSyk7CisJdGVtcCB8PSAoZW4gJiBDQ0RDX1NZTkNFTl9WREhERU5fTUFTSyk7CisJcmVndyh0ZW1wLCBTWU5DRU4pOworfQorCitzdGF0aWMgdm9pZCBjY2RjX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0oaW50IGVuKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCXRlbXAgPSByZWdyKFNZTkNFTik7CisJdGVtcCAmPSAofihDQ0RDX1NZTkNFTl9XRU5fTUFTSykpOworCXRlbXAgfD0gKChlbiA8PCBDQ0RDX1NZTkNFTl9XRU5fU0hJRlQpICYgQ0NEQ19TWU5DRU5fV0VOX01BU0spOworCXJlZ3codGVtcCwgU1lOQ0VOKTsKK30KKworc3RhdGljIHZvaWQgY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQodm9pZCkKK3sKKwkvKiBjb25maWd1cmUgZ2FpbiAqLworCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4ucl95ZSwgUllFR0FJTik7CisJcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5ncl9jeSwgR1JDWUdBSU4pOworCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ2JfZywgR0JHR0FJTik7CisJcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5iX21nLCBCTUdHQUlOKTsKKwkvKiBjb25maWd1cmUgb2Zmc2V0ICovCisJcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuY2NkY19vZmZzZXQsIE9GRlNFVCk7Cit9CisKKy8qCisgKiBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKQorICogVGhpcyBmdW5jdGlvbiByZXN0b3JlIHBvd2VyIG9uIGRlZmF1bHRzIGluIHRoZSBjY2RjIHJlZ2lzdGVycworICovCitzdGF0aWMgaW50IGNjZGNfcmVzdG9yZV9kZWZhdWx0cyh2b2lkKQoreworCWludCBpOworCisJZGV2X2RiZyhkZXYsICJcbnN0YXJ0aW5nIGNjZGNfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOworCS8qIHNldCBhbGwgcmVnaXN0ZXJzIHRvIHplcm8gKi8KKwlmb3IgKGkgPSAwOyBpIDw9IENDRENfUkVHX0xBU1Q7IGkgKz0gNCkKKwkJcmVndygwLCBpKTsKKworCS8qIG5vdyBvdmVycmlkZSB0aGUgdmFsdWVzIHdpdGggcG93ZXIgb24gZGVmYXVsdHMgaW4gcmVnaXN0ZXJzICovCisJcmVndyhNT0RFU0VUX0RFRkFVTFQsIE1PREVTRVQpOworCS8qIG5vIGN1bGxpbmcgc3VwcG9ydCAqLworCXJlZ3coQ1VMSF9ERUZBVUxULCBDVUxIKTsKKwlyZWd3KENVTFZfREVGQVVMVCwgQ1VMVik7CisJLyogU2V0IGRlZmF1bHQgR2FpbiBhbmQgT2Zmc2V0ICovCisJY2NkY19od19wYXJhbXNfcmF3LmdhaW4ucl95ZSA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5nYl9nID0gR0FJTl9ERUZBVUxUOworCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdyX2N5ID0gR0FJTl9ERUZBVUxUOworCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmJfbWcgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQoKTsKKwlyZWd3KE9VVENMSVBfREVGQVVMVCwgT1VUQ0xJUCk7CisJcmVndyhMU0NDRkcyX0RFRkFVTFQsIExTQ0NGRzIpOworCS8qIHNlbGVjdCBjY2RjIGlucHV0ICovCisJaWYgKHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKFZQU1NfQ0NEQ0lOKSkgeworCQlkZXZfZGJnKGRldiwgIlxuY291bGRuJ3Qgc2VsZWN0IGNjZGMgaW5wdXQgc291cmNlIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkvKiBzZWxlY3QgY2NkYyBjbG9jayAqLworCWlmICh2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0NDRENfQ0xPQ0ssIDEpIDwgMCkgeworCQlkZXZfZGJnKGRldiwgIlxuY291bGRuJ3QgZW5hYmxlIGNjZGMgY2xvY2siKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19vcGVuKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlkZXYgPSBkZXZpY2U7CisJcmV0dXJuIGNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOworfQorCitzdGF0aWMgaW50IGNjZGNfY2xvc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCS8qIGRpc2FibGUgY2xvY2sgKi8KKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0NDRENfQ0xPQ0ssIDApOworCS8qIGRvIG5vdGhpbmcgZm9yIG5vdyAqLworCXJldHVybiAwOworfQorLyoKKyAqIGNjZGNfc2V0d2luKCkKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgdGhlIHdpbmRvdyBzaXplIHRvCisgKiBiZSBjYXB0dXJlIGluIENDREMgcmVnLgorICovCitzdGF0aWMgdm9pZCBjY2RjX3NldHdpbihzdHJ1Y3QgdjRsMl9yZWN0ICppbWFnZV93aW4sCisJCQllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQsIGludCBwcGMpCit7CisJaW50IGhvcnpfc3RhcnQsIGhvcnpfbnJfcGl4ZWxzOworCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOworCWludCBtaWRfaW1nID0gMDsKKworCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOworCisJLyoKKwkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKKwkgKiBvdXRwdXQgdG8gU0RSQU0uIGV4YW1wbGUsIGZvciB5Y2JjciwgaXQgaXMgb25lIHkgYW5kIG9uZSBjLCBzbyAyLgorCSAqIHJhdyBjYXB0dXJlIHRoaXMgaXMgMQorCSAqLworCWhvcnpfc3RhcnQgPSBpbWFnZV93aW4tPmxlZnQgPDwgKHBwYyAtIDEpOworCWhvcnpfbnJfcGl4ZWxzID0gKChpbWFnZV93aW4tPndpZHRoKSA8PCAocHBjIC0gMSkpIC0gMTsKKworCS8qIFdyaXRpbmcgdGhlIGhvcml6b250YWwgaW5mbyBpbnRvIHRoZSByZWdpc3RlcnMgKi8KKwlyZWd3KGhvcnpfc3RhcnQsIFNQSCk7CisJcmVndyhob3J6X25yX3BpeGVscywgTlBIKTsKKwl2ZXJ0X3N0YXJ0ID0gaW1hZ2Vfd2luLT50b3A7CisKKwlpZiAoZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCXZlcnRfbnJfbGluZXMgPSAoaW1hZ2Vfd2luLT5oZWlnaHQgPj4gMSkgLSAxOworCQl2ZXJ0X3N0YXJ0ID4+PSAxOworCQkvKiBTaW5jZSBmaXJzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAqLworCQl2ZXJ0X3N0YXJ0ICs9IDE7CisJCS8qIGNvbmZpZ3VyZSBWRElOVDAgYW5kIFZESU5UMSAqLworCQlyZWd3KHZlcnRfc3RhcnQsIFZESU5UMCk7CisJfSBlbHNlIHsKKwkJLyogU2luY2UgZmlyc3QgbGluZSBkb2Vzbid0IGhhdmUgYW55IGRhdGEgKi8KKwkJdmVydF9zdGFydCArPSAxOworCQl2ZXJ0X25yX2xpbmVzID0gaW1hZ2Vfd2luLT5oZWlnaHQgLSAxOworCQkvKiBjb25maWd1cmUgVkRJTlQwIGFuZCBWRElOVDEgKi8KKwkJbWlkX2ltZyA9IHZlcnRfc3RhcnQgKyAoaW1hZ2Vfd2luLT5oZWlnaHQgLyAyKTsKKwkJcmVndyh2ZXJ0X3N0YXJ0LCBWRElOVDApOworCQlyZWd3KG1pZF9pbWcsIFZESU5UMSk7CisJfQorCXJlZ3codmVydF9zdGFydCAmIENDRENfU1RBUlRfVkVSX09ORV9NQVNLLCBTTFYwKTsKKwlyZWd3KHZlcnRfc3RhcnQgJiBDQ0RDX1NUQVJUX1ZFUl9UV09fTUFTSywgU0xWMSk7CisJcmVndyh2ZXJ0X25yX2xpbmVzICYgQ0NEQ19OVU1fTElORVNfVkVSLCBOTFYpOworCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9jY2RjX3BhcmFtKHN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjY2RjcGFyYW0pCit7CisJaWYgKGNjZGNwYXJhbS0+ZGF0YXNmdCA8IENDRENfREFUQV9OT19TSElGVCB8fAorCSAgICBjY2RjcGFyYW0tPmRhdGFzZnQgPiBDQ0RDX0RBVEFfU0hJRlRfNkJJVCkgeworCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaGlmdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjY2RjcGFyYW0tPm1maWx0MSA8IENDRENfTk9fTUVESUFOX0ZJTFRFUjEgfHwKKwkgICAgY2NkY3BhcmFtLT5tZmlsdDEgPiBDQ0RDX01FRElBTl9GSUxURVIxKSB7CisJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjY2RjcGFyYW0tPm1maWx0MiA8IENDRENfTk9fTUVESUFOX0ZJTFRFUjIgfHwKKwkgICAgY2NkY3BhcmFtLT5tZmlsdDIgPiBDQ0RDX01FRElBTl9GSUxURVIyKSB7CisJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoY2NkY3BhcmFtLT5tZWRfZmlsdF90aHJlcyA8IDApIHx8CisJICAgKGNjZGNwYXJhbS0+bWVkX2ZpbHRfdGhyZXMgPiBDQ0RDX01FRF9GSUxUX1RIUkVTSCkpIHsKKwkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIgdGhyZXNvbGRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2NkY3BhcmFtLT5kYXRhX3N6IDwgQ0NEQ19EQVRBXzE2QklUUyB8fAorCSAgICBjY2RjcGFyYW0tPmRhdGFfc3ogPiBDQ0RDX0RBVEFfOEJJVFMpIHsKKwkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIGRhdGEgc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjY2RjcGFyYW0tPmFsYXcuZW5hYmxlKSB7CisJCWlmIChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA8IENDRENfR0FNTUFfQklUU18xM180IHx8CisJCSAgICBjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA+IENDRENfR0FNTUFfQklUU18wOV8wKSB7CisJCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgQUxBV1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmIChjY2RjcGFyYW0tPmJsa19jbGFtcC5iX2NsYW1wX2VuYWJsZSkgeworCQlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX3BpeGVsIDwgQ0NEQ19TQU1QTEVfMVBJWEVMUyB8fAorCQkgICAgY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX3BpeGVsID4gQ0NEQ19TQU1QTEVfMTZQSVhFTFMpIHsKKwkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBzYW1wbGUgcGl4ZWxcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9sbiA8IENDRENfU0FNUExFXzFMSU5FUyB8fAorCQkgICAgY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX2xuID4gQ0NEQ19TQU1QTEVfMTZMSU5FUykgeworCQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBsaW5lc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogUGFyYW1ldGVyIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgY2NkY19zZXRfcGFyYW1zKHZvaWQgX191c2VyICpwYXJhbXMpCit7CisJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgY2NkY19yYXdfcGFyYW1zOworCWludCB4OworCisJLyogb25seSByYXcgbW9kdWxlIHBhcmFtZXRlcnMgY2FuIGJlIHNldCB0aHJvdWdoIHRoZSBJT0NUTCAqLworCWlmIChjY2RjX2lmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiAtRUlOVkFMOworCisJeCA9IGNvcHlfZnJvbV91c2VyKCZjY2RjX3Jhd19wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKGNjZGNfcmF3X3BhcmFtcykpOworCWlmICh4KSB7CisJCWRldl9kYmcoZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIGNjZGMiCisJCQkicGFyYW1zLCAlZFxuIiwgeCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghdmFsaWRhdGVfY2NkY19wYXJhbSgmY2NkY19yYXdfcGFyYW1zKSkgeworCQltZW1jcHkoJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLAorCQkJJmNjZGNfcmF3X3BhcmFtcywKKwkJCXNpemVvZihjY2RjX3Jhd19wYXJhbXMpKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIENDREMgZm9yIFlDYkNyIHZpZGVvIGNhcHR1cmUgKi8KK3N0YXRpYyB2b2lkIGNjZGNfY29uZmlnX3ljYmNyKHZvaWQpCit7CisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfeWNiY3I7CisJdTMyIHRlbXA7CisKKwkvKiBmaXJzdCBzZXQgdGhlIENDREMgcG93ZXIgb24gZGVmYXVsdHMgdmFsdWVzIGluIGFsbCByZWdpc3RlcnMgKi8KKwlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfeWNiY3IuLi4iKTsKKwljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKKworCS8qIGNvbmZpZ3VyZSBwaXhlbCBmb3JtYXQgJiB2aWRlbyBmcmFtZSBmb3JtYXQgKi8KKwl0ZW1wID0gKCgocGFyYW1zLT5waXhfZm10ICYgQ0NEQ19JTlBVVF9NT0RFX01BU0spIDw8CisJCUNDRENfSU5QVVRfTU9ERV9TSElGVCkgfAorCQkoKHBhcmFtcy0+ZnJtX2ZtdCAmIENDRENfRlJNX0ZNVF9NQVNLKSA8PAorCQlDQ0RDX0ZSTV9GTVRfU0hJRlQpKTsKKworCS8qIHNldHVwIEJULjY1NiBzeW5jIG1vZGUgKi8KKwlpZiAocGFyYW1zLT5idDY1Nl9lbmFibGUpIHsKKwkJcmVndyhDQ0RDX1JFQzY1NklGX0JUNjU2X0VOLCBSRUM2NTZJRik7CisJCS8qCisJCSAqIGNvbmZpZ3VyZSB0aGUgRklELCBWRCwgSEQgcGluIHBvbGFyaXR5IGZsZCxoZCBwb2wgcG9zaXRpdmUsCisJCSAqIHZkIG5lZ2F0aXZlLCA4LWJpdCBwYWNrIG1vZGUKKwkJICovCisJCXRlbXAgfD0gQ0NEQ19WRF9QT0xfTkVHQVRJVkU7CisJfSBlbHNlIHsJCS8qIHkvYyBleHRlcm5hbCBzeW5jIG1vZGUgKi8KKwkJdGVtcCB8PSAoKChwYXJhbXMtPmZpZF9wb2wgJiBDQ0RDX0ZJRF9QT0xfTUFTSykgPDwKKwkJCUNDRENfRklEX1BPTF9TSElGVCkgfAorCQkJKChwYXJhbXMtPmhkX3BvbCAmIENDRENfSERfUE9MX01BU0spIDw8CisJCQlDQ0RDX0hEX1BPTF9TSElGVCkgfAorCQkJKChwYXJhbXMtPnZkX3BvbCAmIENDRENfVkRfUE9MX01BU0spIDw8CisJCQlDQ0RDX1ZEX1BPTF9TSElGVCkpOworCX0KKworCS8qIHBhY2sgdGhlIGRhdGEgdG8gOC1iaXQgKi8KKwl0ZW1wIHw9IENDRENfREFUQV9QQUNLX0VOQUJMRTsKKworCXJlZ3codGVtcCwgTU9ERVNFVCk7CisKKwkvKiBjb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJY2NkY19zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDIpOworCisJLyogY29uZmlndXJlIHRoZSBvcmRlciBvZiB5IGNiIGNyIGluIFNELVJBTSAqLworCXRlbXAgPSAocGFyYW1zLT5waXhfb3JkZXIgPDwgQ0NEQ19ZOFBPU19TSElGVCk7CisJdGVtcCB8PSBDQ0RDX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUgfCBDQ0RDX0NDRENGR19GSURNRF9OT19MQVRDSF9WU1lOQzsKKwlyZWd3KHRlbXAsIENDRENGRyk7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSB0aGUgaG9yaXpvbnRhbCBsaW5lIG9mZnNldC4gVGhpcyBpcyBkb25lIGJ5IHJvdW5kaW5nIHVwCisJICogd2lkdGggdG8gYSBtdWx0aXBsZSBvZiAxNiBwaXhlbHMgYW5kIG11bHRpcGx5IGJ5IHR3byB0byBhY2NvdW50IGZvcgorCSAqIHk6Y2I6Y3IgNDoyOjIgZGF0YQorCSAqLworCXJlZ3coKChwYXJhbXMtPndpbi53aWR0aCAqIDIgKyAzMSkgPj4gNSksIEhTSVpFKTsKKworCS8qIGNvbmZpZ3VyZSB0aGUgbWVtb3J5IGxpbmUgb2Zmc2V0ICovCisJaWYgKHBhcmFtcy0+YnVmX3R5cGUgPT0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRCkgeworCQkvKiB0d28gZmllbGRzIGFyZSBpbnRlcmxlYXZlZCBpbiBtZW1vcnkgKi8KKwkJcmVndyhDQ0RDX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRCwgU0RPRlNUKTsKKwl9CisKKwlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfY29uZmlnX3ljYmNyLi4uXG4iKTsKK30KKworLyoKKyAqIGNjZGNfY29uZmlnX2JsYWNrX2NsYW1wKCkKKyAqIGNvbmZpZ3VyZSBwYXJhbWV0ZXJzIGZvciBPcHRpY2FsIEJsYWNrIENsYW1wCisgKi8KK3N0YXRpYyB2b2lkIGNjZGNfY29uZmlnX2JsYWNrX2NsYW1wKHN0cnVjdCBjY2RjX2JsYWNrX2NsYW1wICpiY2xhbXApCit7CisJdTMyIHZhbDsKKworCWlmICghYmNsYW1wLT5iX2NsYW1wX2VuYWJsZSkgeworCQkvKiBjb25maWd1cmUgRENTdWIgKi8KKwkJcmVndyhiY2xhbXAtPmRjX3N1YiAmIENDRENfQkxLX0RDX1NVQl9NQVNLLCBEQ1NVQik7CisJCXJlZ3coMHgwMDAwLCBDTEFNUCk7CisJCXJldHVybjsKKwl9CisJLyogRW5hYmxlIHRoZSBCbGFjayBjbGFtcGluZywgc2V0IHNhbXBsZSBsaW5lcyBhbmQgcGl4ZWxzICovCisJdmFsID0gKGJjbGFtcC0+c3RhcnRfcGl4ZWwgJiBDQ0RDX0JMS19TVF9QWExfTUFTSykgfAorCSAgICAgICgoYmNsYW1wLT5zYW1wbGVfcGl4ZWwgJiBDQ0RDX0JMS19TQU1QTEVfTE5fTUFTSykgPDwKKwkJQ0NEQ19CTEtfU0FNUExFX0xOX1NISUZUKSB8IENDRENfQkxLX0NMQU1QX0VOQUJMRTsKKwlyZWd3KHZhbCwgQ0xBTVApOworCisJLyogSWYgQmxhY2sgY2xhbXBpbmcgaXMgZW5hYmxlIHRoZW4gbWFrZSBkY3N1YiAwICovCisJdmFsID0gKGJjbGFtcC0+c2FtcGxlX2xuICYgQ0NEQ19OVU1fTElORV9DQUxDX01BU0spCisJCQk8PCBDQ0RDX05VTV9MSU5FX0NBTENfU0hJRlQ7CisJcmVndyh2YWwsIERDU1VCKTsKK30KKworLyoKKyAqIGNjZGNfY29uZmlnX2JsYWNrX2NvbXBlbnNlKCkKKyAqIGNvbmZpZ3VyZSBwYXJhbWV0ZXJzIGZvciBCbGFjayBDb21wZW5zYXRpb24KKyAqLworc3RhdGljIHZvaWQgY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2Uoc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uICpiY29tcCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gKGJjb21wLT5iICYgQ0NEQ19CTEtfQ09NUF9NQVNLKSB8CisJCSgoYmNvbXAtPmdiICYgQ0NEQ19CTEtfQ09NUF9NQVNLKSA8PAorCQlDQ0RDX0JMS19DT01QX0dCX0NPTVBfU0hJRlQpOworCXJlZ3codmFsLCBCTEtDTVAxKTsKKworCXZhbCA9ICgoYmNvbXAtPmdyICYgQ0NEQ19CTEtfQ09NUF9NQVNLKSA8PAorCQlDQ0RDX0JMS19DT01QX0dSX0NPTVBfU0hJRlQpIHwKKwkJKChiY29tcC0+ciAmIENDRENfQkxLX0NPTVBfTUFTSykgPDwKKwkJQ0NEQ19CTEtfQ09NUF9SX0NPTVBfU0hJRlQpOworCXJlZ3codmFsLCBCTEtDTVAwKTsKK30KKworLyoKKyAqIGNjZGNfd3JpdGVfZGZjX2VudHJ5KCkKKyAqIHdyaXRlIGFuIGVudHJ5IGluIHRoZSBkZmMgdGFibGUuCisgKi8KK2ludCBjY2RjX3dyaXRlX2RmY19lbnRyeShpbnQgaW5kZXgsIHN0cnVjdCBjY2RjX3ZlcnRpY2FsX2RmdCAqZGZjKQoreworLyogVE9ETyBUaGlzIGlzIHRvIGJlIHJlLXZpc2l0ZWQgYW5kIGFkanVzdGVkICovCisjZGVmaW5lIERGQ19XUklURV9XQUlUX0NPVU5UCTEwMDAKKwl1MzIgdmFsLCBjb3VudCA9IERGQ19XUklURV9XQUlUX0NPVU5UOworCisJcmVndyhkZmMtPmRmdF9jb3JyX3ZlcnRbaW5kZXhdLCBERkNNRU0wKTsKKwlyZWd3KGRmYy0+ZGZ0X2NvcnJfaG9yeltpbmRleF0sIERGQ01FTTEpOworCXJlZ3coZGZjLT5kZnRfY29ycl9zdWIxW2luZGV4XSwgREZDTUVNMik7CisJcmVndyhkZmMtPmRmdF9jb3JyX3N1YjJbaW5kZXhdLCBERkNNRU0zKTsKKwlyZWd3KGRmYy0+ZGZ0X2NvcnJfc3ViM1tpbmRleF0sIERGQ01FTTQpOworCS8qIHNldCBXUiBiaXQgdG8gd3JpdGUgKi8KKwl2YWwgPSByZWdyKERGQ01FTUNUTCkgfCBDQ0RDX0RGQ01FTUNUTF9ERkNNV1JfTUFTSzsKKwlyZWd3KHZhbCwgREZDTUVNQ1RMKTsKKworCS8qCisJICogQXNzdW1lLCBpdCBpcyB2ZXJ5IHNob3J0LiBJZiB3ZSBnZXQgYW4gZXJyb3IsIHdlIG5lZWQgdG8KKwkgKiBhZGp1c3QgdGhpcyB2YWx1ZQorCSAqLworCXdoaWxlIChyZWdyKERGQ01FTUNUTCkgJiBDQ0RDX0RGQ01FTUNUTF9ERkNNV1JfTUFTSykKKwkJY291bnQtLTsKKwkvKgorCSAqIFRPRE8gV2UgZXhwZWN0IHRoZSBjb3VudCB0byBiZSBub24temVybyB0byBiZSBzdWNjZXNzZnVsLiBBZGp1c3QKKwkgKiB0aGUgY291bnQgaWYgd3JpdGUgcmVxdWlyZXMgbW9yZSB0aW1lCisJICovCisKKwlpZiAoY291bnQpIHsKKwkJZGV2X2VycihkZXYsICJkZWZlY3QgdGFibGUgd3JpdGUgdGltZW91dCAhISFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogY2NkY19jb25maWdfdmRmYygpCisgKiBjb25maWd1cmUgcGFyYW1ldGVycyBmb3IgVmVydGljYWwgRGVmZWN0IENvcnJlY3Rpb24KKyAqLworc3RhdGljIGludCBjY2RjX2NvbmZpZ192ZGZjKHN0cnVjdCBjY2RjX3ZlcnRpY2FsX2RmdCAqZGZjKQoreworCXUzMiB2YWw7CisJaW50IGk7CisKKwkvKiBDb25maWd1cmUgR2VuZXJhbCBEZWZlY3QgQ29ycmVjdGlvbi4gVGhlIHRhYmxlIHVzZWQgaXMgZnJvbSBJUElQRSAqLworCXZhbCA9IGRmYy0+Z2VuX2RmdF9lbiAmIENDRENfREZDQ1RMX0dERkNFTl9NQVNLOworCisJLyogQ29uZmlndXJlIFZlcnRpY2FsIERlZmVjdCBDb3JyZWN0aW9uIGlmIG5lZWRlZCAqLworCWlmICghZGZjLT52ZXJfZGZ0X2VuKSB7CisJCS8qIEVuYWJsZSBvbmx5IEdlbmVyYWwgRGVmZWN0IENvcnJlY3Rpb24gKi8KKwkJcmVndyh2YWwsIERGQ0NUTCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChkZmMtPnRhYmxlX3NpemUgPiBDQ0RDX0RGVF9UQUJMRV9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCB8PSBDQ0RDX0RGQ0NUTF9WREZDX0RJU0FCTEU7CisJdmFsIHw9IChkZmMtPmRmdF9jb3JyX2N0bC52ZGZjc2wgJiBDQ0RDX0RGQ0NUTF9WREZDU0xfTUFTSykgPDwKKwkJQ0NEQ19ERkNDVExfVkRGQ1NMX1NISUZUOworCXZhbCB8PSAoZGZjLT5kZnRfY29ycl9jdGwudmRmY3VkYSAmIENDRENfREZDQ1RMX1ZERkNVREFfTUFTSykgPDwKKwkJQ0NEQ19ERkNDVExfVkRGQ1VEQV9TSElGVDsKKwl2YWwgfD0gKGRmYy0+ZGZ0X2NvcnJfY3RsLnZkZmxzZnQgJiBDQ0RDX0RGQ0NUTF9WREZMU0ZUX01BU0spIDw8CisJCUNDRENfREZDQ1RMX1ZERkxTRlRfU0hJRlQ7CisJcmVndyh2YWwgLCBERkNDVEwpOworCisJLyogY2xlYXIgYWRkcmVzcyBwdHIgdG8gb2Zmc2V0IDAgKi8KKwl2YWwgPSBDQ0RDX0RGQ01FTUNUTF9ERkNNQVJTVF9NQVNLIDw8IENDRENfREZDTUVNQ1RMX0RGQ01BUlNUX1NISUZUOworCisJLyogd3JpdGUgZGVmZWN0IHRhYmxlIGVudHJpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGZjLT50YWJsZV9zaXplOyBpKyspIHsKKwkJLyogaW5jcmVtZW50IGFkZHJlc3MgZm9yIG5vbiB6ZXJvIGluZGV4ICovCisJCWlmIChpICE9IDApCisJCQl2YWwgPSBDQ0RDX0RGQ01FTUNUTF9JTkNfQUREUjsKKwkJcmVndyh2YWwsIERGQ01FTUNUTCk7CisJCWlmIChjY2RjX3dyaXRlX2RmY19lbnRyeShpLCBkZmMpIDwgMCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIHVwZGF0ZSBzYXR1cmF0aW9uIGxldmVsIGFuZCBlbmFibGUgZGZjICovCisJcmVndyhkZmMtPnNhdHVyYXRpb25fY3RsICYgQ0NEQ19WRENfREZDVlNBVF9NQVNLLCBERkNWU0FUKTsKKwl2YWwgPSByZWdyKERGQ0NUTCkgfCAoQ0NEQ19ERkNDVExfVkRGQ0VOX01BU0sgPDwKKwkJCUNDRENfREZDQ1RMX1ZERkNFTl9TSElGVCk7CisJcmVndyh2YWwsIERGQ0NUTCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjY2RjX2NvbmZpZ19jc2MoKQorICogY29uZmlndXJlIHBhcmFtZXRlcnMgZm9yIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAqIEVhY2ggcmVnaXN0ZXIgQ1NDTTAtNyBoYXMgdHdvIHZhbHVlcyBpbiBTOFE1IGZvcm1hdC4KKyAqLworc3RhdGljIHZvaWQgY2NkY19jb25maWdfY3NjKHN0cnVjdCBjY2RjX2NzYyAqY3NjKQoreworCXUzMiB2YWwxLCB2YWwyOworCWludCBpOworCisJaWYgKCFjc2MtPmVuYWJsZSkKKwkJcmV0dXJuOworCisJLyogRW5hYmxlIHRoZSBDU0Mgc3ViLW1vZHVsZSAqLworCXJlZ3coQ0NEQ19DU0NfRU5BQkxFLCBDU0NDVEwpOworCisJLyogQ29udmVydGluZyB0aGUgY28tZWZmIGFzIHBlciB0aGUgZm9ybWF0IG9mIHRoZSByZWdpc3RlciAqLworCWZvciAoaSA9IDA7IGkgPCBDQ0RDX0NTQ19DT0VGRl9UQUJMRV9TSVpFOyBpKyspIHsKKwkJaWYgKChpICUgMikgPT0gMCkgeworCQkJLyogQ1NDTSAtIExTQiAqLworCQkJdmFsMSA9IChjc2MtPmNvZWZmW2ldLmludGVnZXIgJgorCQkJCUNDRENfQ1NDX0NPRUZfSU5URUdfTUFTSykKKwkJCQk8PCBDQ0RDX0NTQ19DT0VGX0lOVEVHX1NISUZUOworCQkJLyoKKwkJCSAqIGNvbnZlcnQgZGVjaW1hbCBwYXJ0IHRvIGJpbmFyeS4gVXNlIDIgZGVjaW1hbAorCQkJICogcHJlY2lzaW9uLCB1c2VyIHZhbHVlcyByYW5nZSBmcm9tIC4wMCAtIDAuOTkKKwkJCSAqLworCQkJdmFsMSB8PSAoKChjc2MtPmNvZWZmW2ldLmRlY2ltYWwgJgorCQkJCUNDRENfQ1NDX0NPRUZfREVDSU1BTF9NQVNLKSAqCisJCQkJQ0NEQ19DU0NfREVDX01BWCkgLyAxMDApOworCQl9IGVsc2UgeworCisJCQkvKiBDU0NNIC0gTVNCICovCisJCQl2YWwyID0gKGNzYy0+Y29lZmZbaV0uaW50ZWdlciAmCisJCQkJQ0NEQ19DU0NfQ09FRl9JTlRFR19NQVNLKQorCQkJCTw8IENDRENfQ1NDX0NPRUZfSU5URUdfU0hJRlQ7CisJCQl2YWwyIHw9ICgoKGNzYy0+Y29lZmZbaV0uZGVjaW1hbCAmCisJCQkJIENDRENfQ1NDX0NPRUZfREVDSU1BTF9NQVNLKSAqCisJCQkJIENDRENfQ1NDX0RFQ19NQVgpIC8gMTAwKTsKKwkJCXZhbDIgPDw9IENDRENfQ1NDTV9NU0JfU0hJRlQ7CisJCQl2YWwyIHw9IHZhbDE7CisJCQlyZWd3KHZhbDIsIChDU0NNMCArICgoaSAtIDEpIDw8IDEpKSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBjY2RjX2NvbmZpZ19jb2xvcl9wYXR0ZXJucygpCisgKiBjb25maWd1cmUgcGFyYW1ldGVycyBmb3IgY29sb3IgcGF0dGVybnMKKyAqLworc3RhdGljIHZvaWQgY2NkY19jb25maWdfY29sb3JfcGF0dGVybnMoc3RydWN0IGNjZGNfY29sX3BhdCAqcGF0MCwKKwkJCQkgICAgICAgc3RydWN0IGNjZGNfY29sX3BhdCAqcGF0MSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gKHBhdDAtPm9sb3AgfCAocGF0MC0+b2xlcCA8PCAyKSB8IChwYXQwLT5lbG9wIDw8IDQpIHwKKwkJKHBhdDAtPmVsZXAgPDwgNikgfCAocGF0MS0+b2xvcCA8PCA4KSB8IChwYXQxLT5vbGVwIDw8IDEwKSB8CisJCShwYXQxLT5lbG9wIDw8IDEyKSB8IChwYXQxLT5lbGVwIDw8IDE0KSk7CisJcmVndyh2YWwsIENPTFBUTik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgUmF3IG1vZGUgaW1hZ2UgY2FwdHVyZSAqLworc3RhdGljIGludCBjY2RjX2NvbmZpZ19yYXcodm9pZCkKK3sKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfcmF3OworCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KKwkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CisKKwkvKiByZXN0b3JlIHBvd2VyIG9uIGRlZmF1bHRzIHRvIHJlZ2lzdGVyICovCisJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CisKKwkvKiBDQ0RDRkcgcmVnaXN0ZXI6CisJICogc2V0IENDRCBOb3QgdG8gc3dhcCBpbnB1dCBzaW5jZSBpbnB1dCBpcyBSQVcgZGF0YQorCSAqIHNldCBGSUQgZGV0ZWN0aW9uIGZ1bmN0aW9uIHRvIExhdGNoIGF0IFYtU3luYworCSAqIHNldCBXRU5MT0cgLSBjY2RjIHZhbGlkIGFyZWEgdG8gQU5ECisJICogc2V0IFRSR1NFTCB0byBXRU5CSVQKKwkgKiBzZXQgRVhUUkcgdG8gRElTQUJMRQorCSAqIGRpc2FibGUgbGF0Y2hpbmcgZnVuY3Rpb24gb24gVlNZTkMgLSBzaGFkb3dlZCByZWdpc3RlcnMKKwkgKi8KKwlyZWd3KENDRENfWUNJTlNXUF9SQVcgfCBDQ0RDX0NDRENGR19GSURNRF9MQVRDSF9WU1lOQyB8CisJICAgICBDQ0RDX0NDRENGR19XRU5MT0dfQU5EIHwgQ0NEQ19DQ0RDRkdfVFJHU0VMX1dFTiB8CisJICAgICBDQ0RDX0NDRENGR19FWFRSR19ESVNBQkxFIHwgQ0NEQ19MQVRDSF9PTl9WU1lOQ19ESVNBQkxFLCBDQ0RDRkcpOworCisJLyoKKwkgKiBTZXQgVkRIRCBkaXJlY3Rpb24gdG8gaW5wdXQsICBpbnB1dCB0eXBlIHRvIHJhdyBpbnB1dAorCSAqIG5vcm1hbCBkYXRhIHBvbGFyaXR5LCBkbyBub3QgdXNlIGV4dGVybmFsIFdFTgorCSAqLworCXZhbCA9IChDQ0RDX1ZESERPVVRfSU5QVVQgfCBDQ0RDX1JBV19JUF9NT0RFIHwgQ0NEQ19EQVRBUE9MX05PUk1BTCB8CisJCUNDRENfRVhXRU5fRElTQUJMRSk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgdmVydGljYWwgc3luYyBwb2xhcml0eSAoTU9ERVNFVC5WRFBPTCksIGhvcml6b250YWwKKwkgKiBzeW5jIHBvbGFyaXR5IChNT0RFU0VULkhEUE9MKSwgZmllbGQgaWQgcG9sYXJpdHkgKE1PREVTRVQuRkxEUE9MKSwKKwkgKiBmcmFtZSBmb3JtYXQocHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlKSwgJiBwaXhlbCBmb3JtYXQgKElucHV0IG1vZGUpCisJICovCisJdmFsIHw9ICgoKHBhcmFtcy0+dmRfcG9sICYgQ0NEQ19WRF9QT0xfTUFTSykgPDwgQ0NEQ19WRF9QT0xfU0hJRlQpIHwKKwkJKChwYXJhbXMtPmhkX3BvbCAmIENDRENfSERfUE9MX01BU0spIDw8IENDRENfSERfUE9MX1NISUZUKSB8CisJCSgocGFyYW1zLT5maWRfcG9sICYgQ0NEQ19GSURfUE9MX01BU0spIDw8IENDRENfRklEX1BPTF9TSElGVCkgfAorCQkoKHBhcmFtcy0+ZnJtX2ZtdCAmIENDRENfRlJNX0ZNVF9NQVNLKSA8PCBDQ0RDX0ZSTV9GTVRfU0hJRlQpIHwKKwkJKChwYXJhbXMtPnBpeF9mbXQgJiBDQ0RDX1BJWF9GTVRfTUFTSykgPDwgQ0NEQ19QSVhfRk1UX1NISUZUKSk7CisKKwkvKiBzZXQgcGFjayBmb3IgYWxhdyBjb21wcmVzc2lvbiAqLworCWlmICgoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpIHx8CisJICAgICBjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkKKwkJdmFsIHw9IENDRENfREFUQV9QQUNLX0VOQUJMRTsKKworCS8qIENvbmZpZ3VyZSBmb3IgTFBGICovCisJaWYgKGNvbmZpZ19wYXJhbXMtPmxwZl9lbmFibGUpCisJCXZhbCB8PSAoY29uZmlnX3BhcmFtcy0+bHBmX2VuYWJsZSAmIENDRENfTFBGX01BU0spIDw8CisJCQlDQ0RDX0xQRl9TSElGVDsKKworCS8qIENvbmZpZ3VyZSB0aGUgZGF0YSBzaGlmdCAqLworCXZhbCB8PSAoY29uZmlnX3BhcmFtcy0+ZGF0YXNmdCAmIENDRENfREFUQVNGVF9NQVNLKSA8PAorCQlDQ0RDX0RBVEFTRlRfU0hJRlQ7CisJcmVndyh2YWwgLCBNT0RFU0VUKTsKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIE1PREVTRVQuLi5cbiIsIHZhbCk7CisKKwkvKiBDb25maWd1cmUgdGhlIE1lZGlhbiBGaWx0ZXIgdGhyZXNob2xkICovCisJcmVndygoY29uZmlnX3BhcmFtcy0+bWVkX2ZpbHRfdGhyZXMpICYgQ0NEQ19NRURfRklMVF9USFJFU0gsIE1FREZJTFQpOworCisJLyogQ29uZmlndXJlIEdBTU1BV0QgcmVnaXN0ZXIuIGRlZmF1ciAxMS0yLCBhbmQgTW9zYWljIGNmYSBwYXR0ZXJuICovCisJdmFsID0gQ0NEQ19HQU1NQV9CSVRTXzExXzIgPDwgQ0NEQ19HQU1NQVdEX0lOUFVUX1NISUZUIHwKKwkJQ0NEQ19DRkFfTU9TQUlDOworCisJLyogRW5hYmxlIGFuZCBjb25maWd1cmUgYUxhdyByZWdpc3RlciBpZiBuZWVkZWQgKi8KKwlpZiAoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHsKKwkJdmFsIHw9IChDQ0RDX0FMQVdfRU5BQkxFIHwKKwkJCSgoY29uZmlnX3BhcmFtcy0+YWxhdy5nYW1hX3dkICYKKwkJCUNDRENfQUxBV19HQU1BX1dEX01BU0spIDw8CisJCQlDQ0RDX0dBTU1BV0RfSU5QVVRfU0hJRlQpKTsKKwl9CisKKwkvKiBDb25maWd1cmUgTWVkaWFuIGZpbHRlcjEgJiBmaWx0ZXIyICovCisJdmFsIHw9ICgoY29uZmlnX3BhcmFtcy0+bWZpbHQxIDw8IENDRENfTUZJTFQxX1NISUZUKSB8CisJCShjb25maWdfcGFyYW1zLT5tZmlsdDIgPDwgQ0NEQ19NRklMVDJfU0hJRlQpKTsKKworCXJlZ3codmFsLCBHQU1NQVdEKTsKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEdBTU1BV0QuLi5cbiIsIHZhbCk7CisKKwkvKiBjb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJY2NkY19zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDEpOworCisJLyogT3B0aWNhbCBDbGFtcCBBdmVyYWdpbmcgKi8KKwljY2RjX2NvbmZpZ19ibGFja19jbGFtcCgmY29uZmlnX3BhcmFtcy0+YmxrX2NsYW1wKTsKKworCS8qIEJsYWNrIGxldmVsIGNvbXBlbnNhdGlvbiAqLworCWNjZGNfY29uZmlnX2JsYWNrX2NvbXBlbnNlKCZjb25maWdfcGFyYW1zLT5ibGtfY29tcCk7CisKKwkvKiBWZXJ0aWNhbCBEZWZlY3QgQ29ycmVjdGlvbiBpZiBuZWVkZWQgKi8KKwlpZiAoY2NkY19jb25maWdfdmRmYygmY29uZmlnX3BhcmFtcy0+dmVydGljYWxfZGZ0KSA8IDApCisJCXJldHVybiAtRUZBVUxUOworCisJLyogY29sb3Igc3BhY2UgY29udmVyc2lvbiAqLworCWNjZGNfY29uZmlnX2NzYygmY29uZmlnX3BhcmFtcy0+Y3NjKTsKKworCS8qIGNvbG9yIHBhdHRlcm4gKi8KKwljY2RjX2NvbmZpZ19jb2xvcl9wYXR0ZXJucygmY29uZmlnX3BhcmFtcy0+Y29sX3BhdF9maWVsZDAsCisJCQkJICAgJmNvbmZpZ19wYXJhbXMtPmNvbF9wYXRfZmllbGQxKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgR2FpbiAgJiBvZmZzZXQgY29udHJvbCAqLworCWNjZGNfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CisKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CisKKwkvKiBDb25maWd1cmUgREFUQU9GU1QgIHJlZ2lzdGVyICovCisJdmFsID0gKGNvbmZpZ19wYXJhbXMtPmRhdGFfb2Zmc2V0Lmhvcnpfb2Zmc2V0ICYgQ0NEQ19EQVRBT0ZTVF9NQVNLKSA8PAorCQlDQ0RDX0RBVEFPRlNUX0hfU0hJRlQ7CisJdmFsIHw9IChjb25maWdfcGFyYW1zLT5kYXRhX29mZnNldC52ZXJ0X29mZnNldCAmIENDRENfREFUQU9GU1RfTUFTSykgPDwKKwkJQ0NEQ19EQVRBT0ZTVF9WX1NISUZUOworCXJlZ3codmFsLCBEQVRBT0ZTVCk7CisKKwkvKiBjb25maWd1cmluZyBIU0laRSByZWdpc3RlciAqLworCXZhbCA9IChwYXJhbXMtPmhvcnpfZmxpcF9lbmFibGUgJiBDQ0RDX0hTSVpFX0ZMSVBfTUFTSykgPDwKKwkJQ0NEQ19IU0laRV9GTElQX1NISUZUOworCisJLyogSWYgcGFjayA4IGlzIGVuYWJsZSB0aGVuIDEgcGl4ZWwgd2lsbCB0YWtlIDEgYnl0ZSAqLworCWlmICgoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpIHx8CisJICAgICBjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgeworCQl2YWwgfD0gKCgocGFyYW1zLT53aW4ud2lkdGgpICsgMzEpID4+IDUpICYKKwkJCUNDRENfSFNJWkVfVkFMX01BU0s7CisKKwkJLyogYWRqdXN0IHRvIG11bHRpcGxlIG9mIDMyICovCisJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gSFNJWkUuLi5cbiIsCisJCSAgICAgICAoKChwYXJhbXMtPndpbi53aWR0aCkgKyAzMSkgPj4gNSkgJgorCQkJQ0NEQ19IU0laRV9WQUxfTUFTSyk7CisJfSBlbHNlIHsKKwkJLyogZWxzZSBvbmUgcGl4ZWwgd2lsbCB0YWtlIDIgYnl0ZSAqLworCQl2YWwgfD0gKCgocGFyYW1zLT53aW4ud2lkdGggKiAyKSArIDMxKSA+PiA1KSAmCisJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLOworCisJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gSFNJWkUuLi5cbiIsCisJCSAgICAgICAoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpID4+IDUpICYKKwkJCUNDRENfSFNJWkVfVkFMX01BU0spOworCX0KKwlyZWd3KHZhbCwgSFNJWkUpOworCisJLyogQ29uZmlndXJlIFNET0ZTVCByZWdpc3RlciAqLworCWlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CisJCQkvKiBGb3IgaW50ZXJsYWNlIGludmVyc2UgbW9kZSAqLworCQkJcmVndyhDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfSU5WRVJTRSwgU0RPRlNUKTsKKwkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCQlDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfSU5WRVJTRSk7CisJCX0gZWxzZSB7CisJCQkvKiBGb3IgaW50ZXJsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coQ0NEQ19TRE9GU1RfSU5URVJMQUNFX05PUk1BTCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCQlDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfTk9STUFMKTsKKwkJfQorCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CisJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbmFibGUpIHsKKwkJCS8qIEZvciBwcm9nZXNzaXZlIGludmVyc2UgbW9kZSAqLworCQkJcmVndyhDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9JTlZFUlNFLCBTRE9GU1QpOworCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJCUNDRENfU0RPRlNUX1BST0dSRVNTSVZFX0lOVkVSU0UpOworCQl9IGVsc2UgeworCQkJLyogRm9yIHByb2dlc3NpdmUgbm9uIGludmVyc2UgbW9kZSAqLworCQkJcmVndyhDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9OT1JNQUwsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQkJQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfTk9STUFMKTsKKwkJfQorCX0KKwlkZXZfZGJnKGRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjZGNfY29uZmlndXJlKHZvaWQpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfY29uZmlnX3JhdygpOworCWVsc2UKKwkJY2NkY19jb25maWdfeWNiY3IoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjY2RjX3NldF9idWZ0eXBlKGVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZSA9IGJ1Zl90eXBlOworCWVsc2UKKwkJY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBjY2RjX2dldF9idWZ0eXBlKHZvaWQpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZTsKKwlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGU7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19lbnVtX3BpeCh1MzIgKnBpeCwgaW50IGkpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHMpKSB7CisJCQkqcGl4ID0gY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbaV07CisJCQlyZXQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGNjZGNfcmF3X3l1dl9waXhfZm9ybWF0cykpIHsKKwkJCSpwaXggPSBjY2RjX3Jhd195dXZfcGl4X2Zvcm1hdHNbaV07CisJCQlyZXQgPSAwOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19zZXRfcGl4ZWxfZm9ybWF0KHUzMiBwaXhmbXQpCit7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPQorCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdzsKKworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJY2NkY19od19wYXJhbXNfcmF3LnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKKwkJCWFsYXctPmVuYWJsZSA9IDE7CisJCWVsc2UgaWYgKHBpeGZtdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKKwkJZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9VWVZZKQorCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB1MzIgY2NkY19nZXRfcGl4ZWxfZm9ybWF0KHZvaWQpCit7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPQorCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdzsKKwl1MzIgcGl4Zm10OworCisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaWYgKGFsYXctPmVuYWJsZSkKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJCWVsc2UKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjE2OworCWVsc2UgeworCQlpZiAoY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCWVsc2UKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCX0KKwlyZXR1cm4gcGl4Zm10OworfQorc3RhdGljIGludCBjY2RjX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfaHdfcGFyYW1zX3Jhdy53aW4gPSAqd2luOworCWVsc2UKKwkJY2NkY19od19wYXJhbXNfeWNiY3Iud2luID0gKndpbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2NkY19nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gY2NkY19od19wYXJhbXNfcmF3LndpbjsKKwllbHNlCisJCSp3aW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2NkY19nZXRfbGluZV9sZW5ndGgodm9pZCkKK3sKKwlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9CisJCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZW5hYmxlKSB8fAorCQkgICAgKGNvbmZpZ19wYXJhbXMtPmRhdGFfc3ogPT0gQ0NEQ19EQVRBXzhCSVRTKSkKKwkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGg7CisJCWVsc2UKKwkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGggKiAyOworCX0gZWxzZQorCQlsZW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW4ud2lkdGggKiAyOworCXJldHVybiBBTElHTihsZW4sIDMyKTsKK30KKworc3RhdGljIGludCBjY2RjX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10ID0gZnJtX2ZtdDsKKwllbHNlCisJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBjY2RjX2ZybWZtdCBjY2RjX2dldF9mcmFtZV9mb3JtYXQodm9pZCkKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQ7CisJZWxzZQorCQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdDsKK30KKworc3RhdGljIGludCBjY2RjX2dldGZpZCh2b2lkKQoreworCXJldHVybiAgKHJlZ3IoTU9ERVNFVCkgPj4gMTUpICYgMTsKK30KKworLyogbWlzYyBvcGVyYXRpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2NkY19zZXRmYmFkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJlZ3coKGFkZHIgPj4gMjEpICYgMHgwMDdmLCBTVEFEUkgpOworCXJlZ3coKGFkZHIgPj4gNSkgJiAweDBmZmZmLCBTVEFEUkwpOworfQorCitzdGF0aWMgaW50IGNjZGNfc2V0X2h3X2lmX3BhcmFtcyhzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSAqcGFyYW1zKQoreworCWNjZGNfaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKKworCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CisJY2FzZSBWUEZFX0JUNjU2OgorCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgorCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6CisJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7CisJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRPRE8gYWRkIHN1cHBvcnQgZm9yIHJhdyBiYXllciBoZXJlICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjY2RjX2h3X2RldmljZSBjY2RjX2h3X2RldiA9IHsKKwkubmFtZSA9ICJETTM1NSBDQ0RDIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaHdfb3BzID0geworCQkub3BlbiA9IGNjZGNfb3BlbiwKKwkJLmNsb3NlID0gY2NkY19jbG9zZSwKKwkJLnNldF9jY2RjX2Jhc2UgPSBjY2RjX3NldF9jY2RjX2Jhc2UsCisJCS5lbmFibGUgPSBjY2RjX2VuYWJsZSwKKwkJLmVuYWJsZV9vdXRfdG9fc2RyYW0gPSBjY2RjX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0sCisJCS5zZXRfaHdfaWZfcGFyYW1zID0gY2NkY19zZXRfaHdfaWZfcGFyYW1zLAorCQkuc2V0X3BhcmFtcyA9IGNjZGNfc2V0X3BhcmFtcywKKwkJLmNvbmZpZ3VyZSA9IGNjZGNfY29uZmlndXJlLAorCQkuc2V0X2J1ZnR5cGUgPSBjY2RjX3NldF9idWZ0eXBlLAorCQkuZ2V0X2J1ZnR5cGUgPSBjY2RjX2dldF9idWZ0eXBlLAorCQkuZW51bV9waXggPSBjY2RjX2VudW1fcGl4LAorCQkuc2V0X3BpeGVsX2Zvcm1hdCA9IGNjZGNfc2V0X3BpeGVsX2Zvcm1hdCwKKwkJLmdldF9waXhlbF9mb3JtYXQgPSBjY2RjX2dldF9waXhlbF9mb3JtYXQsCisJCS5zZXRfZnJhbWVfZm9ybWF0ID0gY2NkY19zZXRfZnJhbWVfZm9ybWF0LAorCQkuZ2V0X2ZyYW1lX2Zvcm1hdCA9IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCwKKwkJLnNldF9pbWFnZV93aW5kb3cgPSBjY2RjX3NldF9pbWFnZV93aW5kb3csCisJCS5nZXRfaW1hZ2Vfd2luZG93ID0gY2NkY19nZXRfaW1hZ2Vfd2luZG93LAorCQkuZ2V0X2xpbmVfbGVuZ3RoID0gY2NkY19nZXRfbGluZV9sZW5ndGgsCisJCS5zZXRmYmFkZHIgPSBjY2RjX3NldGZiYWRkciwKKwkJLmdldGZpZCA9IGNjZGNfZ2V0ZmlkLAorCX0sCit9OworCitzdGF0aWMgaW50IGRtMzU1X2NjZGNfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX05PVElDRSAiZG0zNTVfY2NkY19pbml0XG4iKTsKKwlpZiAodnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpIDwgMCkKKwkJcmV0dXJuIC0xOworCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLAorCQljY2RjX2h3X2Rldi5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG0zNTVfY2NkY19leGl0KHZvaWQpCit7CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7Cit9CisKK21vZHVsZV9pbml0KGRtMzU1X2NjZGNfaW5pdCk7Cittb2R1bGVfZXhpdChkbTM1NV9jY2RjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGNfcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGNfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZDJlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkY19yZWdzLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX0RNMzU1X0NDRENfUkVHU19ICisjZGVmaW5lIF9ETTM1NV9DQ0RDX1JFR1NfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJlZ2lzdGVyIE9GRlNFVCBEZWZpbml0aW9ucworXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWU5DRU4JCQkJMHgwMAorI2RlZmluZSBNT0RFU0VUCQkJCTB4MDQKKyNkZWZpbmUgSERXSURUSAkJCQkweDA4CisjZGVmaW5lIFZEV0lEVEgJCQkJMHgwYworI2RlZmluZSBQUExOCQkJCTB4MTAKKyNkZWZpbmUgTFBGUgkJCQkweDE0CisjZGVmaW5lIFNQSAkJCQkweDE4CisjZGVmaW5lIE5QSAkJCQkweDFjCisjZGVmaW5lIFNMVjAJCQkJMHgyMAorI2RlZmluZSBTTFYxCQkJCTB4MjQKKyNkZWZpbmUgTkxWCQkJCTB4MjgKKyNkZWZpbmUgQ1VMSAkJCQkweDJjCisjZGVmaW5lIENVTFYJCQkJMHgzMAorI2RlZmluZSBIU0laRQkJCQkweDM0CisjZGVmaW5lIFNET0ZTVAkJCQkweDM4CisjZGVmaW5lIFNUQURSSAkJCQkweDNjCisjZGVmaW5lIFNUQURSTAkJCQkweDQwCisjZGVmaW5lIENMQU1QCQkJCTB4NDQKKyNkZWZpbmUgRENTVUIJCQkJMHg0OAorI2RlZmluZSBDT0xQVE4JCQkJMHg0YworI2RlZmluZSBCTEtDTVAwCQkJCTB4NTAKKyNkZWZpbmUgQkxLQ01QMQkJCQkweDU0CisjZGVmaW5lIE1FREZJTFQJCQkJMHg1OAorI2RlZmluZSBSWUVHQUlOCQkJCTB4NWMKKyNkZWZpbmUgR1JDWUdBSU4JCQkweDYwCisjZGVmaW5lIEdCR0dBSU4JCQkJMHg2NAorI2RlZmluZSBCTUdHQUlOCQkJCTB4NjgKKyNkZWZpbmUgT0ZGU0VUCQkJCTB4NmMKKyNkZWZpbmUgT1VUQ0xJUAkJCQkweDcwCisjZGVmaW5lIFZESU5UMAkJCQkweDc0CisjZGVmaW5lIFZESU5UMQkJCQkweDc4CisjZGVmaW5lIFJTVjAJCQkJMHg3YworI2RlZmluZSBHQU1NQVdECQkJCTB4ODAKKyNkZWZpbmUgUkVDNjU2SUYJCQkweDg0CisjZGVmaW5lIENDRENGRwkJCQkweDg4CisjZGVmaW5lIEZNVENGRwkJCQkweDhjCisjZGVmaW5lIEZNVFBMRU4JCQkJMHg5MAorI2RlZmluZSBGTVRTUEgJCQkJMHg5NAorI2RlZmluZSBGTVRMTkgJCQkJMHg5OAorI2RlZmluZSBGTVRTTFYJCQkJMHg5YworI2RlZmluZSBGTVRMTlYJCQkJMHhhMAorI2RlZmluZSBGTVRSTEVOCQkJCTB4YTQKKyNkZWZpbmUgRk1USENOVAkJCQkweGE4CisjZGVmaW5lIEZNVF9BRERSX1BUUl9CCQkJMHhhYworI2RlZmluZSBGTVRfQUREUl9QVFIoaSkJCQkoRk1UX0FERFJfUFRSX0IgKyAoaSAqIDQpKQorI2RlZmluZSBGTVRQR01fVkYwCQkJMHhjYworI2RlZmluZSBGTVRQR01fVkYxCQkJMHhkMAorI2RlZmluZSBGTVRQR01fQVAwCQkJMHhkNAorI2RlZmluZSBGTVRQR01fQVAxCQkJMHhkOAorI2RlZmluZSBGTVRQR01fQVAyCQkJMHhkYworI2RlZmluZSBGTVRQR01fQVAzICAgICAgICAgICAgICAgICAgICAgIDB4ZTAKKyNkZWZpbmUgRk1UUEdNX0FQNCAgICAgICAgICAgICAgICAgICAgICAweGU0CisjZGVmaW5lIEZNVFBHTV9BUDUgICAgICAgICAgICAgICAgICAgICAgMHhlOAorI2RlZmluZSBGTVRQR01fQVA2ICAgICAgICAgICAgICAgICAgICAgIDB4ZWMKKyNkZWZpbmUgRk1UUEdNX0FQNyAgICAgICAgICAgICAgICAgICAgICAweGYwCisjZGVmaW5lIExTQ0NGRzEgICAgICAgICAgICAgICAgICAgICAgICAgMHhmNAorI2RlZmluZSBMU0NDRkcyICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgKKyNkZWZpbmUgTFNDSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjCisjZGVmaW5lIExTQ1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgTFNDS0ggICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwNAorI2RlZmluZSBMU0NLViAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTA4CisjZGVmaW5lIExTQ01FTUNUTCAgICAgICAgICAgICAgICAgICAgICAgMHgxMGMKKyNkZWZpbmUgTFNDTUVNRCAgICAgICAgICAgICAgICAgICAgICAgICAweDExMAorI2RlZmluZSBMU0NNRU1RICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE0CisjZGVmaW5lIERGQ0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTgKKyNkZWZpbmUgREZDVlNBVCAgICAgICAgICAgICAgICAgICAgICAgICAweDExYworI2RlZmluZSBERkNNRU1DVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MTIwCisjZGVmaW5lIERGQ01FTTAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMjQKKyNkZWZpbmUgREZDTUVNMSAgICAgICAgICAgICAgICAgICAgICAgICAweDEyOAorI2RlZmluZSBERkNNRU0yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTJjCisjZGVmaW5lIERGQ01FTTMgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMzAKKyNkZWZpbmUgREZDTUVNNCAgICAgICAgICAgICAgICAgICAgICAgICAweDEzNAorI2RlZmluZSBDU0NDVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTM4CisjZGVmaW5lIENTQ00wICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxM2MKKyNkZWZpbmUgQ1NDTTEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MAorI2RlZmluZSBDU0NNMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ0CisjZGVmaW5lIENTQ00zICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDgKKyNkZWZpbmUgQ1NDTTQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0YworI2RlZmluZSBDU0NNNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUwCisjZGVmaW5lIENTQ002ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTQKKyNkZWZpbmUgQ1NDTTcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1OAorI2RlZmluZSBEQVRBT0ZTVAkJCTB4MTVjCisjZGVmaW5lIENDRENfUkVHX0xBU1QJCQlEQVRBT0ZTVAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCURlZmluZSBmb3IgdmFyaW91cyByZWdpc3RlciBiaXQgbWFzayBhbmQgc2hpZnRzIGZvciBDQ0RDCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0NEQ19SQVdfSVBfTU9ERQkJCTAKKyNkZWZpbmUgQ0NEQ19WREhET1VUX0lOUFVUCQkJMAorI2RlZmluZSBDQ0RDX1lDSU5TV1BfUkFXCQkJKDAgPDwgNCkKKyNkZWZpbmUgQ0NEQ19FWFdFTl9ESVNBQkxFIAkJCTAKKyNkZWZpbmUgQ0NEQ19EQVRBUE9MX05PUk1BTAkJCTAKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfRklETURfTEFUQ0hfVlNZTkMJCTAKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfRklETURfTk9fTEFUQ0hfVlNZTkMJKDEgPDwgNikKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfV0VOTE9HX0FORAkJCTAKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfVFJHU0VMX1dFTgkJCTAKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfRVhUUkdfRElTQUJMRQkJMAorI2RlZmluZSBDQ0RDX0NGQV9NT1NBSUMJCQkJMAorI2RlZmluZSBDQ0RDX1k4UE9TX1NISUZUCQkJMTEKKworI2RlZmluZSBDQ0RDX1ZEQ19ERkNWU0FUX01BU0sJCQkweDNmZmYKKyNkZWZpbmUgQ0NEQ19EQVRBT0ZTVF9NQVNLCQkJMHgwZmYKKyNkZWZpbmUgQ0NEQ19EQVRBT0ZTVF9IX1NISUZUCQkJMAorI2RlZmluZSBDQ0RDX0RBVEFPRlNUX1ZfU0hJRlQJCQk4CisjZGVmaW5lIENDRENfR0FNTUFXRF9DRkFfTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19HQU1NQVdEX0NGQV9TSElGVAkJCTUKKyNkZWZpbmUgQ0NEQ19HQU1NQVdEX0lOUFVUX1NISUZUCQkyCisjZGVmaW5lIENDRENfRklEX1BPTF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX0ZJRF9QT0xfU0hJRlQJCQk0CisjZGVmaW5lIENDRENfSERfUE9MX01BU0sJCQkxCisjZGVmaW5lIENDRENfSERfUE9MX1NISUZUCQkJMworI2RlZmluZSBDQ0RDX1ZEX1BPTF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX1ZEX1BPTF9TSElGVAkJCTIKKyNkZWZpbmUgQ0NEQ19WRF9QT0xfTkVHQVRJVkUJCQkoMSA8PCAyKQorI2RlZmluZSBDQ0RDX0ZSTV9GTVRfTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19GUk1fRk1UX1NISUZUCQkJNworI2RlZmluZSBDQ0RDX0RBVEFfU1pfTUFTSwkJCTcKKyNkZWZpbmUgQ0NEQ19EQVRBX1NaX1NISUZUCQkJOAorI2RlZmluZSBDQ0RDX1ZESERPVVRfTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19WREhET1VUX1NISUZUCQkJMAorI2RlZmluZSBDQ0RDX0VYV0VOX01BU0sJCQkJMQorI2RlZmluZSBDQ0RDX0VYV0VOX1NISUZUCQkJNQorI2RlZmluZSBDQ0RDX0lOUFVUX01PREVfTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19JTlBVVF9NT0RFX1NISUZUCQkJMTIKKyNkZWZpbmUgQ0NEQ19QSVhfRk1UX01BU0sJCQkzCisjZGVmaW5lIENDRENfUElYX0ZNVF9TSElGVAkJCTEyCisjZGVmaW5lIENDRENfREFUQVBPTF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX0RBVEFQT0xfU0hJRlQJCQk2CisjZGVmaW5lIENDRENfV0VOX0VOQUJMRQkJCQkoMSA8PCAxKQorI2RlZmluZSBDQ0RDX1ZESERFTl9FTkFCTEUJCQkoMSA8PCAxNikKKyNkZWZpbmUgQ0NEQ19MUEZfRU5BQkxFCQkJCSgxIDw8IDE0KQorI2RlZmluZSBDQ0RDX0FMQVdfRU5BQkxFCQkJMQorI2RlZmluZSBDQ0RDX0FMQVdfR0FNQV9XRF9NQVNLCQkJNworI2RlZmluZSBDQ0RDX1JFQzY1NklGX0JUNjU2X0VOCQkJMworCisjZGVmaW5lIENDRENfRk1UQ0ZHX0ZNVE1PREVfTUFTSyAJCTMKKyNkZWZpbmUgQ0NEQ19GTVRDRkdfRk1UTU9ERV9TSElGVAkJMQorI2RlZmluZSBDQ0RDX0ZNVENGR19MTlVNX01BU0sJCQkzCisjZGVmaW5lIENDRENfRk1UQ0ZHX0xOVU1fU0hJRlQJCQk0CisjZGVmaW5lIENDRENfRk1UQ0ZHX0FERFJJTkNfTUFTSwkJNworI2RlZmluZSBDQ0RDX0ZNVENGR19BRERSSU5DX1NISUZUCQk4CisKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfRklETURfU0hJRlQJCQk2CisjZGVmaW5lCUNDRENfQ0NEQ0ZHX1dFTkxPR19TSElGVAkJOAorI2RlZmluZSBDQ0RDX0NDRENGR19UUkdTRUxfU0hJRlQJCTkKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfRVhUUkdfU0hJRlQJCQkxMAorI2RlZmluZSBDQ0RDX0NDRENGR19NU0JJTlZJX1NISUZUCQkxMworCisjZGVmaW5lIENDRENfSFNJWkVfRkxJUF9TSElGVAkJCTEyCisjZGVmaW5lIENDRENfSFNJWkVfRkxJUF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX0hTSVpFX1ZBTF9NQVNLCQkJMHhGRkYKKyNkZWZpbmUgQ0NEQ19TRE9GU1RfRklFTERfSU5URVJMRUFWRUQJCTB4MjQ5CisjZGVmaW5lIENDRENfU0RPRlNUX0lOVEVSTEFDRV9JTlZFUlNFCQkweDRCNkQKKyNkZWZpbmUgQ0NEQ19TRE9GU1RfSU5URVJMQUNFX05PUk1BTAkJMHgwQjZECisjZGVmaW5lIENDRENfU0RPRlNUX1BST0dSRVNTSVZFX0lOVkVSU0UJCTB4NDAwMAorI2RlZmluZSBDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9OT1JNQUwJCTAKKyNkZWZpbmUgQ0NEQ19TVEFSVF9QWF9IT1JfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBDQ0RDX05VTV9QWF9IT1JfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBDQ0RDX1NUQVJUX1ZFUl9PTkVfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBDQ0RDX1NUQVJUX1ZFUl9UV09fTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBDQ0RDX05VTV9MSU5FU19WRVIJCQkweDdGRkYKKworI2RlZmluZSBDQ0RDX0JMS19DTEFNUF9FTkFCTEUJCQkoMSA8PCAxNSkKKyNkZWZpbmUgQ0NEQ19CTEtfU0dBSU5fTUFTSwkJCTB4MUYKKyNkZWZpbmUgQ0NEQ19CTEtfU1RfUFhMX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19CTEtfU0FNUExFX0xOX01BU0sJCQkzCisjZGVmaW5lIENDRENfQkxLX1NBTVBMRV9MTl9TSElGVAkJMTMKKworI2RlZmluZSBDQ0RDX05VTV9MSU5FX0NBTENfTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19OVU1fTElORV9DQUxDX1NISUZUCQkxNAorCisjZGVmaW5lIENDRENfQkxLX0RDX1NVQl9NQVNLCQkJMHgzRkZGCisjZGVmaW5lIENDRENfQkxLX0NPTVBfTUFTSwkJCTB4RkYKKyNkZWZpbmUgQ0NEQ19CTEtfQ09NUF9HQl9DT01QX1NISUZUCQk4CisjZGVmaW5lIENDRENfQkxLX0NPTVBfR1JfQ09NUF9TSElGVAkJMAorI2RlZmluZSBDQ0RDX0JMS19DT01QX1JfQ09NUF9TSElGVAkJOAorI2RlZmluZSBDQ0RDX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUJCSgxIDw8IDE1KQorI2RlZmluZSBDQ0RDX0xBVENIX09OX1ZTWU5DX0VOQUJMRQkJKDAgPDwgMTUpCisjZGVmaW5lIENDRENfRlBDX0VOQUJMRQkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgQ0NEQ19GUENfRlBDX05VTV9NQVNLIAkJCTB4N0ZGRgorI2RlZmluZSBDQ0RDX0RBVEFfUEFDS19FTkFCTEUJCQkoMSA8PCAxMSkKKyNkZWZpbmUgQ0NEQ19GTVRfSE9SWl9GTVRMTkhfTUFTSwkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UX0hPUlpfRk1UU1BIX01BU0sJCTB4MUZGRgorI2RlZmluZSBDQ0RDX0ZNVF9IT1JaX0ZNVFNQSF9TSElGVAkJMTYKKyNkZWZpbmUgQ0NEQ19GTVRfVkVSVF9GTVRMTlZfTUFTSwkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UX1ZFUlRfRk1UU0xWX01BU0sJCTB4MUZGRgorI2RlZmluZSBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9TSElGVAkJMTYKKyNkZWZpbmUgQ0NEQ19WUF9PVVRfVkVSVF9OVU1fTUFTSwkJMHgzRkZGCisjZGVmaW5lIENDRENfVlBfT1VUX1ZFUlRfTlVNX1NISUZUCQkxNworI2RlZmluZSBDQ0RDX1ZQX09VVF9IT1JaX05VTV9NQVNLCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19WUF9PVVRfSE9SWl9OVU1fU0hJRlQJCTQKKyNkZWZpbmUgQ0NEQ19WUF9PVVRfSE9SWl9TVF9NQVNLCQkweEYKKworI2RlZmluZSBDQ0RDX0NTQ19DT0VGX0lOVEVHX01BU0sJCTcKKyNkZWZpbmUgQ0NEQ19DU0NfQ09FRl9ERUNJTUFMX01BU0sJCTB4MWYKKyNkZWZpbmUgQ0NEQ19DU0NfQ09FRl9JTlRFR19TSElGVAkJNQorI2RlZmluZSBDQ0RDX0NTQ01fTVNCX1NISUZUCQkJOAorI2RlZmluZSBDQ0RDX0NTQ19FTkFCTEUJCQkJMQorI2RlZmluZSBDQ0RDX0NTQ19ERUNfTUFYCQkJMzIKKworI2RlZmluZSBDQ0RDX01GSUxUMV9TSElGVAkJCTEwCisjZGVmaW5lIENDRENfTUZJTFQyX1NISUZUCQkJOAorI2RlZmluZSBDQ0RDX01FRF9GSUxUX1RIUkVTSAkJCTB4M0ZGRgorI2RlZmluZSBDQ0RDX0xQRl9NQVNLCQkJCTEKKyNkZWZpbmUgQ0NEQ19MUEZfU0hJRlQJCQkJMTQKKyNkZWZpbmUgQ0NEQ19PRkZTRVRfTUFTSwkJCTB4M0ZGCisjZGVmaW5lIENDRENfREFUQVNGVF9NQVNLCQkJNworI2RlZmluZSBDQ0RDX0RBVEFTRlRfU0hJRlQJCQk4CisKKyNkZWZpbmUgQ0NEQ19ERl9FTkFCTEUJCQkJMQorCisjZGVmaW5lIENDRENfRk1UUExFTl9QMF9NQVNLCQkJMHhGCisjZGVmaW5lIENDRENfRk1UUExFTl9QMV9NQVNLCQkJMHhGCisjZGVmaW5lIENDRENfRk1UUExFTl9QMl9NQVNLCQkJNworI2RlZmluZSBDQ0RDX0ZNVFBMRU5fUDNfTUFTSwkJCTcKKyNkZWZpbmUgQ0NEQ19GTVRQTEVOX1AwX1NISUZUCQkJMAorI2RlZmluZSBDQ0RDX0ZNVFBMRU5fUDFfU0hJRlQJCQk0CisjZGVmaW5lIENDRENfRk1UUExFTl9QMl9TSElGVAkJCTgKKyNkZWZpbmUgQ0NEQ19GTVRQTEVOX1AzX1NISUZUCQkJMTIKKworI2RlZmluZSBDQ0RDX0ZNVFNQSF9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UTE5IX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRTTFZfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBDQ0RDX0ZNVExOVl9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIENDRENfRk1UUkxFTl9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1USENOVF9NQVNLCQkJMHgxRkZGCisKKyNkZWZpbmUgQ0NEQ19BRFBfSU5JVF9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIENDRENfQURQX0xJTkVfU0hJRlQJCQkxMworI2RlZmluZSBDQ0RDX0FEUF9MSU5FX01BU0sJCQkzCisjZGVmaW5lIENDRENfRk1UUEdOX0FQVFJfTUFTSwkJCTcKKworI2RlZmluZSBDQ0RDX0RGQ0NUTF9HREZDRU5fTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGQ0VOX01BU0sJCQkxCisjZGVmaW5lIENDRENfREZDQ1RMX1ZERkNfRElTQUJMRQkJKDAgPDwgNCkKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGQ0VOX1NISUZUCQk0CisjZGVmaW5lIENDRENfREZDQ1RMX1ZERkNTTF9NQVNLCQkJMworI2RlZmluZSBDQ0RDX0RGQ0NUTF9WREZDU0xfU0hJRlQJCTUKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGQ1VEQV9NQVNLCQkxCisjZGVmaW5lIENDRENfREZDQ1RMX1ZERkNVREFfU0hJRlQJCTcKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGTFNGVF9NQVNLCQkzCisjZGVmaW5lIENDRENfREZDQ1RMX1ZERkxTRlRfU0hJRlQJCTgKKyNkZWZpbmUgQ0NEQ19ERkNNRU1DVExfREZDTUFSU1RfTUFTSwkJMQorI2RlZmluZSBDQ0RDX0RGQ01FTUNUTF9ERkNNQVJTVF9TSElGVAkJMgorI2RlZmluZSBDQ0RDX0RGQ01FTUNUTF9ERkNNV1JfTUFTSwkJMQorI2RlZmluZSBDQ0RDX0RGQ01FTUNUTF9ERkNNV1JfU0hJRlQJCTAKKyNkZWZpbmUgQ0NEQ19ERkNNRU1DVExfSU5DX0FERFIJCQkoMCA8PCAyKQorCisjZGVmaW5lIENDRENfTFNDQ0ZHX0dGVFNGX01BU0sJCQk3CisjZGVmaW5lIENDRENfTFNDQ0ZHX0dGVFNGX1NISUZUCQkJMQorI2RlZmluZSBDQ0RDX0xTQ0NGR19HRlRJTlZfTUFTSwkJCTB4ZgorI2RlZmluZSBDQ0RDX0xTQ0NGR19HRlRJTlZfU0hJRlQJCTQKKyNkZWZpbmUgQ0NEQ19MU0NfR0ZUQUJMRV9TRUxfTUFTSwkJMworI2RlZmluZSBDQ0RDX0xTQ19HRlRBQkxFX0VQRUxfU0hJRlQJCTgKKyNkZWZpbmUgQ0NEQ19MU0NfR0ZUQUJMRV9PUEVMX1NISUZUCQkxMAorI2RlZmluZSBDQ0RDX0xTQ19HRlRBQkxFX0VQT0xfU0hJRlQJCTEyCisjZGVmaW5lIENDRENfTFNDX0dGVEFCTEVfT1BPTF9TSElGVAkJMTQKKyNkZWZpbmUgQ0NEQ19MU0NfR0ZNT0RFX01BU0sJCQkzCisjZGVmaW5lIENDRENfTFNDX0dGTU9ERV9TSElGVAkJCTQKKyNkZWZpbmUgQ0NEQ19MU0NfRElTQUJMRQkJCTAKKyNkZWZpbmUgQ0NEQ19MU0NfRU5BQkxFCQkJCTEKKyNkZWZpbmUgQ0NEQ19MU0NfVEFCTEUxX1NMQwkJCTAKKyNkZWZpbmUgQ0NEQ19MU0NfVEFCTEUyX1NMQwkJCTEKKyNkZWZpbmUgQ0NEQ19MU0NfVEFCTEUzX1NMQwkJCTIKKyNkZWZpbmUgQ0NEQ19MU0NfTUVNQUREUl9SRVNFVAkJCSgxIDw8IDIpCisjZGVmaW5lIENDRENfTFNDX01FTUFERFJfSU5DUgkJCSgwIDw8IDIpCisjZGVmaW5lIENDRENfTFNDX0ZSQUNfTUFTS19UMQkJCTB4RkYKKyNkZWZpbmUgQ0NEQ19MU0NfSU5UX01BU0sJCQkzCisjZGVmaW5lIENDRENfTFNDX0ZSQUNfTUFTSwkJCTB4M0ZGRgorI2RlZmluZSBDQ0RDX0xTQ19DRU5UUkVfTUFTSwkJCTB4M0ZGRgorI2RlZmluZSBDQ0RDX0xTQ19DT0VGX01BU0sJCQkweGZmCisjZGVmaW5lIENDRENfTFNDX0NPRUZMX1NISUZUCQkJMAorI2RlZmluZSBDQ0RDX0xTQ19DT0VGVV9TSElGVAkJCTgKKyNkZWZpbmUgQ0NEQ19HQUlOX01BU0sJCQkJMHg3RkYKKyNkZWZpbmUgQ0NEQ19TWU5DRU5fVkRIREVOX01BU0sJCQkoMSA8PCAwKQorI2RlZmluZSBDQ0RDX1NZTkNFTl9XRU5fTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIENDRENfU1lOQ0VOX1dFTl9TSElGVAkJCTEKKworLyogUG93ZXIgb24gRGVmYXVsdHMgaW4gaGFyZHdhcmUgKi8KKyNkZWZpbmUgTU9ERVNFVF9ERUZBVUxUCQkJCTB4MjAwCisjZGVmaW5lIENVTEhfREVGQVVMVAkJCQkweEZGRkYKKyNkZWZpbmUgQ1VMVl9ERUZBVUxUCQkJCTB4RkYKKyNkZWZpbmUgR0FJTl9ERUZBVUxUCQkJCTI1NgorI2RlZmluZSBPVVRDTElQX0RFRkFVTFQJCQkJMHgzRkZGCisjZGVmaW5lIExTQ0NGRzJfREVGQVVMVAkJCQkweEUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMTlhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBDQ0RDIGhhcmR3YXJlIG1vZHVsZSBmb3IgRE02NDQ2CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIG1vZHVsZSBpcyBmb3IgY29uZmlndXJpbmcgQ0NEIGNvbnRyb2xsZXIgb2YgRE02NDQ2IFZQRkUgdG8gY2FwdHVyZQorICogUmF3IHl1diBvciBCYXllciBSR0IgZGF0YSBmcm9tIGEgZGVjb2Rlci4gQ0NEQyBoYXMgc2V2ZXJhbCBtb2R1bGVzCisgKiBzdWNoIGFzIERlZmVjdCBQaXhlbCBDb3JyZWN0aW9uLCBDb2xvciBTcGFjZSBDb252ZXJzaW9uIGV0YyB0bworICogcHJlLXByb2Nlc3MgdGhlIFJhdyBCYXllciBSR0IgZGF0YSwgYmVmb3JlIHdyaXRpbmcgaXQgdG8gU0RSQU0uIFRoaXMKKyAqIG1vZHVsZSBhbHNvIGFsbG93cyBhcHBsaWNhdGlvbiB0byBjb25maWd1cmUgaW5kaXZpZHVhbAorICogbW9kdWxlIHBhcmFtZXRlcnMgdGhyb3VnaCBWUEZFX0NNRF9TX0NDRENfUkFXX1BBUkFNUyBJT0NUTC4KKyAqIFRvIGRvIHNvLCBhcHBsaWNhdGlvbiBpbmNsdWRlcyBkbTY0NHhfY2NkYy5oIGFuZCB2cGZlX2NhcHR1cmUuaCBoZWFkZXIKKyAqIGZpbGVzLiAgVGhlIHNldHBhcmFtcygpIEFQSSBpcyBjYWxsZWQgYnkgdnBmZV9jYXB0dXJlIGRyaXZlcgorICogdG8gY29uZmlndXJlIG1vZHVsZSBwYXJhbWV0ZXJzLiBUaGlzIGZpbGUgaXMgbmFtZWQgRE02NDR4IHNvIHRoYXQgb3RoZXIKKyAqIHZhcmlhbnRzIHN1Y2ggRE02NDQzIG1heSBiZSBzdXBwb3J0ZWQgdXNpbmcgdGhlIHNhbWUgbW9kdWxlLgorICoKKyAqIFRPRE86IFRlc3QgUmF3IGJheWVyIHBhcmFtZXRlciBzZXR0aW5ncyBhbmQgYmF5ZXIgY2FwdHVyZQorICogCSBTcGxpdCBtb2R1bGUgcGFyYW1ldGVyIHN0cnVjdHVyZSB0byBtb2R1bGUgc3BlY2lmaWMgaW9jdGwgc3RydWN0cworICogCSBpbnZlc3RpZ2F0ZSBpZiBlbnVtIHVzZWQgZm9yIHVzZXIgc3BhY2UgdHlwZSBkZWZpbml0aW9uCisgKiAJIHRvIGJlIHJlcGxhY2VkIGJ5ICNkZWZpbmVzIG9yIGludGVnZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2RtNjQ0eF9jY2RjLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisjaW5jbHVkZSAiZG02NDR4X2NjZGNfcmVncy5oIgorI2luY2x1ZGUgImNjZGNfaHdfZGV2aWNlLmgiCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ0NEQyBEcml2ZXIgZm9yIERNNjQ0NiIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldjsKKworLyogT2JqZWN0IGZvciBDQ0RDIHJhdyBtb2RlICovCitzdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBjY2RjX2h3X3BhcmFtc19yYXcgPSB7CisJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCisJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwkud2luID0gQ0NEQ19XSU5fVkdBLAorCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkuY29uZmlnX3BhcmFtcyA9IHsKKwkJLmRhdGFfc3ogPSBDQ0RDX0RBVEFfMTBCSVRTLAorCX0sCit9OworCisvKiBPYmplY3QgZm9yIENDREMgeWNiY3IgbW9kZSAqLworc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciBjY2RjX2h3X3BhcmFtc195Y2JjciA9IHsKKwkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAorCS53aW4gPSBDQ0RDX1dJTl9QQUwsCisJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS5idDY1Nl9lbmFibGUgPSAxLAorCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKKwkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECit9OworCisjZGVmaW5lIENDRENfTUFYX1JBV19ZVVZfRk9STUFUUwkyCisKKy8qIFJhdyBCYXllciBmb3JtYXRzICovCitzdGF0aWMgdTMyIGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzW10gPQorCXtWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX1BJWF9GTVRfU0JHR1IxNn07CisKKy8qIFJhdyBZVVYgZm9ybWF0cyAqLworc3RhdGljIHUzMiBjY2RjX3Jhd195dXZfcGl4X2Zvcm1hdHNbXSA9CisJe1Y0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX1BJWF9GTVRfWVVZVn07CisKK3N0YXRpYyB2b2lkICpfX2lvbWVtIGNjZGNfYmFzZV9hZGRyOworc3RhdGljIGludCBjY2RjX2FkZHJfc2l6ZTsKK3N0YXRpYyBlbnVtIHZwZmVfaHdfaWZfdHlwZSBjY2RjX2lmX3R5cGU7CisKKy8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLworc3RhdGljIGlubGluZSB1MzIgcmVncih1MzIgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBjY2RjX3NldF9jY2RjX2Jhc2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJY2NkY19iYXNlX2FkZHIgPSBhZGRyOworCWNjZGNfYWRkcl9zaXplID0gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgY2NkY19lbmFibGUoaW50IGZsYWcpCit7CisJcmVndyhmbGFnLCBDQ0RDX1BDUik7Cit9CisKK3N0YXRpYyB2b2lkIGNjZGNfZW5hYmxlX3Zwb3J0KGludCBmbGFnKQoreworCWlmIChmbGFnKQorCQkvKiBlbmFibGUgdmlkZW8gcG9ydCAqLworCQlyZWd3KENDRENfRU5BQkxFX1ZJREVPX1BPUlQsIENDRENfRk1UQ0ZHKTsKKwllbHNlCisJCXJlZ3coQ0NEQ19ESVNBQkxFX1ZJREVPX1BPUlQsIENDRENfRk1UQ0ZHKTsKK30KKworLyoKKyAqIGNjZGNfc2V0d2luKCkKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgdGhlIHdpbmRvdyBzaXplCisgKiB0byBiZSBjYXB0dXJlIGluIENDREMgcmVnCisgKi8KK3ZvaWQgY2NkY19zZXR3aW4oc3RydWN0IHY0bDJfcmVjdCAqaW1hZ2Vfd2luLAorCQllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQsCisJCWludCBwcGMpCit7CisJaW50IGhvcnpfc3RhcnQsIGhvcnpfbnJfcGl4ZWxzOworCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOworCWludCB2YWwgPSAwLCBtaWRfaW1nID0gMDsKKworCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOworCS8qCisJICogcHBjIC0gcGVyIHBpeGVsIGNvdW50LiBpbmRpY2F0ZXMgaG93IG1hbnkgcGl4ZWxzIHBlciBjZWxsCisJICogb3V0cHV0IHRvIFNEUkFNLiBleGFtcGxlLCBmb3IgeWNiY3IsIGl0IGlzIG9uZSB5IGFuZCBvbmUgYywgc28gMi4KKwkgKiByYXcgY2FwdHVyZSB0aGlzIGlzIDEKKwkgKi8KKwlob3J6X3N0YXJ0ID0gaW1hZ2Vfd2luLT5sZWZ0IDw8IChwcGMgLSAxKTsKKwlob3J6X25yX3BpeGVscyA9IChpbWFnZV93aW4tPndpZHRoIDw8IChwcGMgLSAxKSkgLSAxOworCXJlZ3coKGhvcnpfc3RhcnQgPDwgQ0NEQ19IT1JaX0lORk9fU1BIX1NISUZUKSB8IGhvcnpfbnJfcGl4ZWxzLAorCSAgICAgQ0NEQ19IT1JaX0lORk8pOworCisJdmVydF9zdGFydCA9IGltYWdlX3dpbi0+dG9wOworCisJaWYgKGZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQl2ZXJ0X25yX2xpbmVzID0gKGltYWdlX3dpbi0+aGVpZ2h0ID4+IDEpIC0gMTsKKwkJdmVydF9zdGFydCA+Pj0gMTsKKwkJLyogU2luY2UgZmlyc3QgbGluZSBkb2Vzbid0IGhhdmUgYW55IGRhdGEgKi8KKwkJdmVydF9zdGFydCArPSAxOworCQkvKiBjb25maWd1cmUgVkRJTlQwICovCisJCXZhbCA9ICh2ZXJ0X3N0YXJ0IDw8IENDRENfVkRJTlRfVkRJTlQwX1NISUZUKTsKKwkJcmVndyh2YWwsIENDRENfVkRJTlQpOworCisJfSBlbHNlIHsKKwkJLyogU2luY2UgZmlyc3QgbGluZSBkb2Vzbid0IGhhdmUgYW55IGRhdGEgKi8KKwkJdmVydF9zdGFydCArPSAxOworCQl2ZXJ0X25yX2xpbmVzID0gaW1hZ2Vfd2luLT5oZWlnaHQgLSAxOworCQkvKgorCQkgKiBjb25maWd1cmUgVkRJTlQwIGFuZCBWRElOVDEuIFZESU5UMSB3aWxsIGJlIGF0IGhhbGYKKwkJICogb2YgaW1hZ2UgaGVpZ2h0CisJCSAqLworCQltaWRfaW1nID0gdmVydF9zdGFydCArIChpbWFnZV93aW4tPmhlaWdodCAvIDIpOworCQl2YWwgPSAodmVydF9zdGFydCA8PCBDQ0RDX1ZESU5UX1ZESU5UMF9TSElGVCkgfAorCQkgICAgKG1pZF9pbWcgJiBDQ0RDX1ZESU5UX1ZESU5UMV9NQVNLKTsKKwkJcmVndyh2YWwsIENDRENfVkRJTlQpOworCisJfQorCXJlZ3coKHZlcnRfc3RhcnQgPDwgQ0NEQ19WRVJUX1NUQVJUX1NMVjBfU0hJRlQpIHwgdmVydF9zdGFydCwKKwkgICAgIENDRENfVkVSVF9TVEFSVCk7CisJcmVndyh2ZXJ0X25yX2xpbmVzLCBDQ0RDX1ZFUlRfTElORVMpOworCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKK30KKworc3RhdGljIHZvaWQgY2NkY19yZWFkcmVncyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJdmFsID0gcmVncihDQ0RDX0FMQVcpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfQ0xBTVApOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX0RDU1VCKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19CTEtDTVApOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQkxLQ01QLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19GUENfQUREUik7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfRlBDKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfRk1UQ0ZHKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfQ09MUFROKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfRk1UX0hPUlopOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX0ZNVF9WRVJUKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19IU0laRV9PRkYpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gSFNJWkVfT0ZGLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19TRE9GU1QpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gU0RPRlNULi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19WUF9PVVQpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19TWU5fTU9ERSk7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBTWU5fTU9ERS4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfSE9SWl9JTkZPKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhPUlpfSU5GTy4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfVkVSVF9TVEFSVCk7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWRVJUX1NUQVJULi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19WRVJUX0xJTkVTKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfTElORVMuLi5cbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfY2NkY19wYXJhbShzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY2NkY3BhcmFtKQoreworCWlmIChjY2RjcGFyYW0tPmFsYXcuZW5hYmxlKSB7CisJCWlmICgoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPiBDQ0RDX0dBTU1BX0JJVFNfMDlfMCkgfHwKKwkJICAgIChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA8IENDRENfR0FNTUFfQklUU18xNV82KSB8fAorCQkgICAgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgY2NkY3BhcmFtLT5kYXRhX3N6KSkgeworCQkJZGV2X2RiZyhkZXYsICJcbkludmFsaWQgZGF0YSBsaW5lIHNlbGVjdCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjZGNfdXBkYXRlX3Jhd19wYXJhbXMoc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKnJhd19wYXJhbXMpCit7CisJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQorCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJdW5zaWduZWQgaW50ICpmcGNfdmlydGFkZHIgPSBOVUxMOworCXVuc2lnbmVkIGludCAqZnBjX3BoeXNhZGRyID0gTlVMTDsKKworCW1lbWNweShjb25maWdfcGFyYW1zLCByYXdfcGFyYW1zLCBzaXplb2YoKnJhd19wYXJhbXMpKTsKKwkvKgorCSAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgZmF1bHQgcGl4ZWwgdGFibGUgYW5kIGNvcHkgdGhlIHVzZXIKKwkgKiB2YWx1ZXMgdG8gdGhlIHRhYmxlCisJICovCisJaWYgKCFjb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCWZwY19waHlzYWRkciA9ICh1bnNpZ25lZCBpbnQgKiljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHI7CisJZnBjX3ZpcnRhZGRyID0gKHVuc2lnbmVkIGludCAqKXBoeXNfdG9fdmlydCgKKwkJCQkodW5zaWduZWQgbG9uZylmcGNfcGh5c2FkZHIpOworCS8qCisJICogQWxsb2NhdGUgbWVtb3J5IGZvciBGUEMgdGFibGUgaWYgY3VycmVudAorCSAqIEZQQyB0YWJsZSBidWZmZXIgaXMgbm90IGJpZyBlbm91Z2ggdG8KKwkgKiBhY2NvbW9kYXRlIEZQQyBOdW1iZXIgcmVxdWVzdGVkCisJICovCisJaWYgKHJhd19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0gIT0gY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwX251bSkgeworCQlpZiAoZnBjX3BoeXNhZGRyICE9IE5VTEwpIHsKKwkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZnBjX3BoeXNhZGRyLAorCQkJCSAgIGdldF9vcmRlcgorCQkJCSAgIChjb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtICoKKwkJCQkgICBGUF9OVU1fQllURVMpKTsKKwkJfQorCisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgRlBDIHRhYmxlICovCisJCWZwY192aXJ0YWRkciA9CisJCQkodW5zaWduZWQgaW50ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgR0ZQX0RNQSwKKwkJCQkJCQkgZ2V0X29yZGVyKHJhd19wYXJhbXMtPgorCQkJCQkJCSBmYXVsdF9weGwuZnBfbnVtICoKKwkJCQkJCQkgRlBfTlVNX0JZVEVTKSk7CisKKwkJaWYgKGZwY192aXJ0YWRkciA9PSBOVUxMKSB7CisJCQlkZXZfZGJnKGRldiwKKwkJCQkiXG5VbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBGUEMiKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWZwY19waHlzYWRkciA9CisJCSAgICAodW5zaWduZWQgaW50ICopdmlydF90b19waHlzKCh2b2lkICopZnBjX3ZpcnRhZGRyKTsKKwl9CisKKwkvKiBDb3B5IG51bWJlciBvZiBmYXVsdCBwaXhlbHMgYW5kIEZQQyB0YWJsZSAqLworCWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0gPSByYXdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtOworCWlmIChjb3B5X2Zyb21fdXNlcihmcGNfdmlydGFkZHIsCisJCQkodm9pZCBfX3VzZXIgKilyYXdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHIsCisJCQljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtICogRlBfTlVNX0JZVEVTKSkgeworCQlkZXZfZGJnKGRldiwgIlxuIGNvcHlfZnJvbV91c2VyIGZhaWxlZCIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwY190YWJsZV9hZGRyID0gKHVuc2lnbmVkIGludClmcGNfcGh5c2FkZHI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19jbG9zZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQorCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJdW5zaWduZWQgaW50ICpmcGNfcGh5c2FkZHIgPSBOVUxMLCAqZnBjX3ZpcnRhZGRyID0gTlVMTDsKKworCWZwY19waHlzYWRkciA9ICh1bnNpZ25lZCBpbnQgKiljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHI7CisKKwlpZiAoZnBjX3BoeXNhZGRyICE9IE5VTEwpIHsKKwkJZnBjX3ZpcnRhZGRyID0gKHVuc2lnbmVkIGludCAqKQorCQkgICAgcGh5c190b192aXJ0KCh1bnNpZ25lZCBsb25nKWZwY19waHlzYWRkcik7CisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZnBjX3ZpcnRhZGRyLAorCQkJICAgZ2V0X29yZGVyKGNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0gKgorCQkJICAgRlBfTlVNX0JZVEVTKSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogY2NkY19yZXN0b3JlX2RlZmF1bHRzKCkKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSBkZWZhdWx0cyB0byBhbGwgQ0NEQyByZWdpc3RlcnMKKyAqLworc3RhdGljIHZvaWQgY2NkY19yZXN0b3JlX2RlZmF1bHRzKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBkaXNhYmxlIENDREMgKi8KKwljY2RjX2VuYWJsZSgwKTsKKwkvKiBzZXQgYWxsIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlICovCisJZm9yIChpID0gNDsgaSA8PSAweDk0OyBpICs9IDQpCisJCXJlZ3coMCwgIGkpOworCXJlZ3coQ0NEQ19OT19DVUxMSU5HLCBDQ0RDX0NVTExJTkcpOworCXJlZ3coQ0NEQ19HQU1NQV9CSVRTXzExXzIsIENDRENfQUxBVyk7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19vcGVuKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlkZXYgPSBkZXZpY2U7CisJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19lbmFibGVfdnBvcnQoMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNjZGNfc2JsX3Jlc2V0KHZvaWQpCit7CisJdnBzc19jbGVhcl93Ymxfb3ZlcmZsb3coVlBTU19QQ1JfQ0NEQ19XQkxfTyk7Cit9CisKKy8qIFBhcmFtZXRlciBvcGVyYXRpb25zICovCitzdGF0aWMgaW50IGNjZGNfc2V0X3BhcmFtcyh2b2lkIF9fdXNlciAqcGFyYW1zKQoreworCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3IGNjZGNfcmF3X3BhcmFtczsKKwlpbnQgeDsKKworCWlmIChjY2RjX2lmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiAtRUlOVkFMOworCisJeCA9IGNvcHlfZnJvbV91c2VyKCZjY2RjX3Jhd19wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKGNjZGNfcmF3X3BhcmFtcykpOworCWlmICh4KSB7CisJCWRldl9kYmcoZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIgorCQkJICAgImNjZGMgcGFyYW1zLCAlZFxuIiwgeCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghdmFsaWRhdGVfY2NkY19wYXJhbSgmY2NkY19yYXdfcGFyYW1zKSkgeworCQlpZiAoIWNjZGNfdXBkYXRlX3Jhd19wYXJhbXMoJmNjZGNfcmF3X3BhcmFtcykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBjY2RjX2NvbmZpZ195Y2JjcigpCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIENDREMgZm9yIFlDYkNyIHZpZGVvIGNhcHR1cmUKKyAqLwordm9pZCBjY2RjX2NvbmZpZ195Y2Jjcih2b2lkKQoreworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3ljYmNyOworCXUzMiBzeW5fbW9kZTsKKworCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOworCS8qCisJICogZmlyc3QgcmVzdG9yZSB0aGUgQ0NEQyByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMKKwkgKiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSB3ZSBhc3N1bWUgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgc2V0IGluCisJICogYSBsb3Qgb2YgcmVnaXN0ZXJzIHRoYXQgd2UgZGlkbid0IHRvdWNoCisJICovCisJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSBwaXhlbCBmb3JtYXQsIGZyYW1lIGZvcm1hdCwgY29uZmlndXJlIHZpZGVvIGZyYW1lCisJICogZm9ybWF0LCBlbmFibGUgb3V0cHV0IHRvIFNEUkFNLCBlbmFibGUgaW50ZXJuYWwgdGltaW5nIGdlbmVyYXRvcgorCSAqIGFuZCA4Yml0IHBhY2sgbW9kZQorCSAqLworCXN5bl9tb2RlID0gKCgocGFyYW1zLT5waXhfZm10ICYgQ0NEQ19TWU5fTU9ERV9JTlBNT0RfTUFTSykgPDwKKwkJICAgIENDRENfU1lOX01PREVfSU5QTU9EX1NISUZUKSB8CisJCSAgICAoKHBhcmFtcy0+ZnJtX2ZtdCAmIENDRENfU1lOX0ZMRE1PREVfTUFTSykgPDwKKwkJICAgIENDRENfU1lOX0ZMRE1PREVfU0hJRlQpIHwgQ0NEQ19WREhERU5fRU5BQkxFIHwKKwkJICAgIENDRENfV0VOX0VOQUJMRSB8IENDRENfREFUQV9QQUNLX0VOQUJMRSk7CisKKwkvKiBzZXR1cCBCVC42NTYgc3luYyBtb2RlICovCisJaWYgKHBhcmFtcy0+YnQ2NTZfZW5hYmxlKSB7CisJCXJlZ3coQ0NEQ19SRUM2NTZJRl9CVDY1Nl9FTiwgQ0NEQ19SRUM2NTZJRik7CisKKwkJLyoKKwkJICogY29uZmlndXJlIHRoZSBGSUQsIFZELCBIRCBwaW4gcG9sYXJpdHksCisJCSAqIGZsZCxoZCBwb2wgcG9zaXRpdmUsIHZkIG5lZ2F0aXZlLCA4LWJpdCBkYXRhCisJCSAqLworCQlzeW5fbW9kZSB8PSBDQ0RDX1NZTl9NT0RFX1ZEX1BPTF9ORUdBVElWRSB8IENDRENfU1lOX01PREVfOEJJVFM7CisJfSBlbHNlIHsKKwkJLyogeS9jIGV4dGVybmFsIHN5bmMgbW9kZSAqLworCQlzeW5fbW9kZSB8PSAoKChwYXJhbXMtPmZpZF9wb2wgJiBDQ0RDX0ZJRF9QT0xfTUFTSykgPDwKKwkJCSAgICAgQ0NEQ19GSURfUE9MX1NISUZUKSB8CisJCQkgICAgICgocGFyYW1zLT5oZF9wb2wgJiBDQ0RDX0hEX1BPTF9NQVNLKSA8PAorCQkJICAgICBDQ0RDX0hEX1BPTF9TSElGVCkgfAorCQkJICAgICAoKHBhcmFtcy0+dmRfcG9sICYgQ0NEQ19WRF9QT0xfTUFTSykgPDwKKwkJCSAgICAgQ0NEQ19WRF9QT0xfU0hJRlQpKTsKKwl9CisJcmVndyhzeW5fbW9kZSwgQ0NEQ19TWU5fTU9ERSk7CisKKwkvKiBjb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJY2NkY19zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDIpOworCisJLyoKKwkgKiBjb25maWd1cmUgdGhlIG9yZGVyIG9mIHkgY2IgY3IgaW4gU0RSQU0sIGFuZCBkaXNhYmxlIGxhdGNoCisJICogaW50ZXJuYWwgcmVnaXN0ZXIgb24gdnN5bmMKKwkgKi8KKwlyZWd3KChwYXJhbXMtPnBpeF9vcmRlciA8PCBDQ0RDX0NDRENGR19ZOFBPU19TSElGVCkgfAorCQkgQ0NEQ19MQVRDSF9PTl9WU1lOQ19ESVNBQkxFLCBDQ0RDX0NDRENGRyk7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSB0aGUgaG9yaXpvbnRhbCBsaW5lIG9mZnNldC4gVGhpcyBzaG91bGQgYmUgYQorCSAqIG9uIDMyIGJ5dGUgYm9uZGFyeS4gU28gY2xlYXIgTFNCIDUgYml0cworCSAqLworCXJlZ3coKChwYXJhbXMtPndpbi53aWR0aCAqIDIgICsgMzEpICYgfjB4MWYpLCBDQ0RDX0hTSVpFX09GRik7CisKKwkvKiBjb25maWd1cmUgdGhlIG1lbW9yeSBsaW5lIG9mZnNldCAqLworCWlmIChwYXJhbXMtPmJ1Zl90eXBlID09IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQpCisJCS8qIHR3byBmaWVsZHMgYXJlIGludGVybGVhdmVkIGluIG1lbW9yeSAqLworCQlyZWd3KENDRENfU0RPRlNUX0ZJRUxEX0lOVEVSTEVBVkVELCBDQ0RDX1NET0ZTVCk7CisKKwljY2RjX3NibF9yZXNldCgpOworCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOworCWNjZGNfcmVhZHJlZ3MoKTsKK30KKworc3RhdGljIHZvaWQgY2NkY19jb25maWdfYmxhY2tfY2xhbXAoc3RydWN0IGNjZGNfYmxhY2tfY2xhbXAgKmJjbGFtcCkKK3sKKwl1MzIgdmFsOworCisJaWYgKCFiY2xhbXAtPmVuYWJsZSkgeworCQkvKiBjb25maWd1cmUgRENTdWIgKi8KKwkJdmFsID0gKGJjbGFtcC0+ZGNfc3ViKSAmIENDRENfQkxLX0RDX1NVQl9NQVNLOworCQlyZWd3KHZhbCwgQ0NEQ19EQ1NVQik7CisJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CisJCXJlZ3coQ0NEQ19DTEFNUF9ERUZBVUxUX1ZBTCwgQ0NEQ19DTEFNUCk7CisJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4MDAwMCB0byBDTEFNUC4uLlxuIik7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBDb25maWd1cmUgZ2FpbiwgIFN0YXJ0IHBpeGVsLCBObyBvZiBsaW5lIHRvIGJlIGF2ZywKKwkgKiBObyBvZiBwaXhlbC9saW5lIHRvIGJlIGF2ZywgJiBFbmFibGUgdGhlIEJsYWNrIGNsYW1waW5nCisJICovCisJdmFsID0gKChiY2xhbXAtPnNnYWluICYgQ0NEQ19CTEtfU0dBSU5fTUFTSykgfAorCSAgICAgICAoKGJjbGFtcC0+c3RhcnRfcGl4ZWwgJiBDQ0RDX0JMS19TVF9QWExfTUFTSykgPDwKKwkJQ0NEQ19CTEtfU1RfUFhMX1NISUZUKSB8CisJICAgICAgICgoYmNsYW1wLT5zYW1wbGVfbG4gJiBDQ0RDX0JMS19TQU1QTEVfTElORV9NQVNLKSA8PAorCQlDQ0RDX0JMS19TQU1QTEVfTElORV9TSElGVCkgfAorCSAgICAgICAoKGJjbGFtcC0+c2FtcGxlX3BpeGVsICYgQ0NEQ19CTEtfU0FNUExFX0xOX01BU0spIDw8CisJCUNDRENfQkxLX1NBTVBMRV9MTl9TSElGVCkgfCBDQ0RDX0JMS19DTEFNUF9FTkFCTEUpOworCXJlZ3codmFsLCBDQ0RDX0NMQU1QKTsKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOworCS8qIElmIEJsYWNrIGNsYW1waW5nIGlzIGVuYWJsZSB0aGVuIG1ha2UgZGNzdWIgMCAqLworCXJlZ3coQ0NEQ19EQ1NVQl9ERUZBVUxUX1ZBTCwgQ0NEQ19EQ1NVQik7CisJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwMDAwMCB0byBEQ1NVQi4uLlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNjZGNfY29uZmlnX2JsYWNrX2NvbXBlbnNlKHN0cnVjdCBjY2RjX2JsYWNrX2NvbXBlbnNhdGlvbiAqYmNvbXApCit7CisJdTMyIHZhbDsKKworCXZhbCA9ICgoYmNvbXAtPmIgJiBDQ0RDX0JMS19DT01QX01BU0spIHwKKwkgICAgICAoKGJjb21wLT5nYiAmIENDRENfQkxLX0NPTVBfTUFTSykgPDwKKwkgICAgICAgQ0NEQ19CTEtfQ09NUF9HQl9DT01QX1NISUZUKSB8CisJICAgICAgKChiY29tcC0+Z3IgJiBDQ0RDX0JMS19DT01QX01BU0spIDw8CisJICAgICAgIENDRENfQkxLX0NPTVBfR1JfQ09NUF9TSElGVCkgfAorCSAgICAgICgoYmNvbXAtPnIgJiBDQ0RDX0JMS19DT01QX01BU0spIDw8CisJICAgICAgIENDRENfQkxLX0NPTVBfUl9DT01QX1NISUZUKSk7CisJcmVndyh2YWwsIENDRENfQkxLQ01QKTsKK30KKworc3RhdGljIHZvaWQgY2NkY19jb25maWdfZnBjKHN0cnVjdCBjY2RjX2ZhdWx0X3BpeGVsICpmcGMpCit7CisJdTMyIHZhbDsKKworCS8qIEluaXRpYWxseSBkaXNhYmxlIEZQQyAqLworCXZhbCA9IENDRENfRlBDX0RJU0FCTEU7CisJcmVndyh2YWwsIENDRENfRlBDKTsKKworCWlmICghZnBjLT5lbmFibGUpCisJCXJldHVybjsKKworCS8qIENvbmZpZ3VyZSBGYXVsdCBwaXhlbCBpZiBuZWVkZWQgKi8KKwlyZWd3KGZwYy0+ZnBjX3RhYmxlX2FkZHIsIENDRENfRlBDX0FERFIpOworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsCisJCSAgICAgICAoZnBjLT5mcGNfdGFibGVfYWRkcikpOworCS8qIFdyaXRlIHRoZSBGUEMgcGFyYW1zIHdpdGggRlBDIGRpc2FibGUgKi8KKwl2YWwgPSBmcGMtPmZwX251bSAmIENDRENfRlBDX0ZQQ19OVU1fTUFTSzsKKwlyZWd3KHZhbCwgQ0NEQ19GUEMpOworCisJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CisJLyogcmVhZCB0aGUgRlBDIHJlZ2lzdGVyICovCisJdmFsID0gcmVncihDQ0RDX0ZQQykgfCBDQ0RDX0ZQQ19FTkFCTEU7CisJcmVndyh2YWwsIENDRENfRlBDKTsKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKK30KKworLyoKKyAqIGNjZGNfY29uZmlnX3JhdygpCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIENDREMgZm9yIFJhdyBjYXB0dXJlIG1vZGUKKyAqLwordm9pZCBjY2RjX2NvbmZpZ19yYXcodm9pZCkKK3sKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfcmF3OworCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KKwkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCXVuc2lnbmVkIGludCBzeW5fbW9kZSA9IDA7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKworCS8qICAgICAgUmVzZXQgQ0NEQyAqLworCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOworCisJLyogRGlzYWJsZSBsYXRjaGluZyBmdW5jdGlvbiByZWdpc3RlcnMgb24gVlNZTkMgICovCisJcmVndyhDQ0RDX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUsIENDRENfQ0NEQ0ZHKTsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5KFNZTl9NT0RFLlZEUE9MKSwKKwkgKiBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKFNZTl9NT0RFLkhEUE9MKSwgZnJhbWUgaWQgcG9sYXJpdHkKKwkgKiAoU1lOX01PREUuRkxEUE9MKSwgZnJhbWUgZm9ybWF0KHByb2dyZXNzaXZlIG9yIGludGVybGFjZSksCisJICogZGF0YSBzaXplKFNZTk1PREUuREFUU0laKSwgJnBpeGVsIGZvcm1hdCAoSW5wdXQgbW9kZSksIG91dHB1dAorCSAqIFNEUkFNLCBlbmFibGUgaW50ZXJuYWwgdGltaW5nIGdlbmVyYXRvcgorCSAqLworCXN5bl9tb2RlID0KKwkJKCgocGFyYW1zLT52ZF9wb2wgJiBDQ0RDX1ZEX1BPTF9NQVNLKSA8PCBDQ0RDX1ZEX1BPTF9TSElGVCkgfAorCQkoKHBhcmFtcy0+aGRfcG9sICYgQ0NEQ19IRF9QT0xfTUFTSykgPDwgQ0NEQ19IRF9QT0xfU0hJRlQpIHwKKwkJKChwYXJhbXMtPmZpZF9wb2wgJiBDQ0RDX0ZJRF9QT0xfTUFTSykgPDwgQ0NEQ19GSURfUE9MX1NISUZUKSB8CisJCSgocGFyYW1zLT5mcm1fZm10ICYgQ0NEQ19GUk1fRk1UX01BU0spIDw8IENDRENfRlJNX0ZNVF9TSElGVCkgfAorCQkoKGNvbmZpZ19wYXJhbXMtPmRhdGFfc3ogJiBDQ0RDX0RBVEFfU1pfTUFTSykgPDwKKwkJQ0NEQ19EQVRBX1NaX1NISUZUKSB8CisJCSgocGFyYW1zLT5waXhfZm10ICYgQ0NEQ19QSVhfRk1UX01BU0spIDw8IENDRENfUElYX0ZNVF9TSElGVCkgfAorCQlDQ0RDX1dFTl9FTkFCTEUgfCBDQ0RDX1ZESERFTl9FTkFCTEUpOworCisJLyogRW5hYmxlIGFuZCBjb25maWd1cmUgYUxhdyByZWdpc3RlciBpZiBuZWVkZWQgKi8KKwlpZiAoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHsKKwkJdmFsID0gKChjb25maWdfcGFyYW1zLT5hbGF3LmdhbWFfd2QgJgorCQkgICAgICBDQ0RDX0FMQVdfR0FNQV9XRF9NQVNLKSB8IENDRENfQUxBV19FTkFCTEUpOworCQlyZWd3KHZhbCwgQ0NEQ19BTEFXKTsKKwkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOworCX0KKworCS8qIENvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwljY2RjX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgQ0NEQ19QUENfUkFXKTsKKworCS8qIENvbmZpZ3VyZSBCbGFjayBDbGFtcCAqLworCWNjZGNfY29uZmlnX2JsYWNrX2NsYW1wKCZjb25maWdfcGFyYW1zLT5ibGtfY2xhbXApOworCisJLyogQ29uZmlndXJlIEJsYWNrIGxldmVsIGNvbXBlbnNhdGlvbiAqLworCWNjZGNfY29uZmlnX2JsYWNrX2NvbXBlbnNlKCZjb25maWdfcGFyYW1zLT5ibGtfY29tcCk7CisKKwkvKiBDb25maWd1cmUgRmF1bHQgUGl4ZWwgQ29ycmVjdGlvbiAqLworCWNjZGNfY29uZmlnX2ZwYygmY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsKTsKKworCS8qIElmIGRhdGEgc2l6ZSBpcyA4IGJpdCB0aGVuIHBhY2sgdGhlIGRhdGEgKi8KKwlpZiAoKGNvbmZpZ19wYXJhbXMtPmRhdGFfc3ogPT0gQ0NEQ19EQVRBXzhCSVRTKSB8fAorCSAgICAgY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpCisJCXN5bl9tb2RlIHw9IENDRENfREFUQV9QQUNLX0VOQUJMRTsKKworI2lmZGVmIENPTkZJR19ETTY0NFhfVklERU9fUE9SVF9FTkFCTEUKKwkvKiBlbmFibGUgdmlkZW8gcG9ydCAqLworCXZhbCA9IENDRENfRU5BQkxFX1ZJREVPX1BPUlQ7CisjZWxzZQorCS8qIGRpc2FibGUgdmlkZW8gcG9ydCAqLworCXZhbCA9IENDRENfRElTQUJMRV9WSURFT19QT1JUOworI2VuZGlmCisKKwlpZiAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpCisJCXZhbCB8PSAoQ0NEQ19EQVRBXzEwQklUUyAmIENDRENfRk1UQ0ZHX1ZQSU5fTUFTSykKKwkJICAgIDw8IENDRENfRk1UQ0ZHX1ZQSU5fU0hJRlQ7CisJZWxzZQorCQl2YWwgfD0gKGNvbmZpZ19wYXJhbXMtPmRhdGFfc3ogJiBDQ0RDX0ZNVENGR19WUElOX01BU0spCisJCSAgICA8PCBDQ0RDX0ZNVENGR19WUElOX1NISUZUOworCS8qIFdyaXRlIHZhbHVlIGluIEZNVENGRyAqLworCXJlZ3codmFsLCBDQ0RDX0ZNVENGRyk7CisKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKKwkvKiBDb25maWd1cmUgdGhlIGNvbG9yIHBhdHRlcm4gYWNjb3JkaW5nIHRvIG10OXQwMDEgc2Vuc29yICovCisJcmVndyhDQ0RDX0NPTFBUTl9WQUwsIENDRENfQ09MUFROKTsKKworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4QkIxMUJCMTEgdG8gQ09MUFROLi4uXG4iKTsKKwkvKgorCSAqIENvbmZpZ3VyZSBEYXRhIGZvcm1hdHRlcihWaWRlbyBwb3J0KSBwaXhlbCBzZWxlY3Rpb24KKwkgKiAoRk1UX0hPUlosIEZNVF9WRVJUKQorCSAqLworCXZhbCA9ICgocGFyYW1zLT53aW4ubGVmdCAmIENDRENfRk1UX0hPUlpfRk1UU1BIX01BU0spIDw8CisJICAgICAgQ0NEQ19GTVRfSE9SWl9GTVRTUEhfU0hJRlQpIHwKKwkgICAgICAocGFyYW1zLT53aW4ud2lkdGggJiBDQ0RDX0ZNVF9IT1JaX0ZNVExOSF9NQVNLKTsKKwlyZWd3KHZhbCwgQ0NEQ19GTVRfSE9SWik7CisKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9IT1JaLi4uXG4iLCB2YWwpOworCXZhbCA9IChwYXJhbXMtPndpbi50b3AgJiBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9NQVNLKQorCSAgICA8PCBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9TSElGVDsKKwlpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKQorCQl2YWwgfD0gKHBhcmFtcy0+d2luLmhlaWdodCkgJiBDQ0RDX0ZNVF9WRVJUX0ZNVExOVl9NQVNLOworCWVsc2UKKwkJdmFsIHw9IChwYXJhbXMtPndpbi5oZWlnaHQgPj4gMSkgJiBDQ0RDX0ZNVF9WRVJUX0ZNVExOVl9NQVNLOworCisJZGV2X2RiZyhkZXYsICJcbnBhcmFtcy0+d2luLmhlaWdodCAgMHgleCAuLi5cbiIsCisJICAgICAgIHBhcmFtcy0+d2luLmhlaWdodCk7CisJcmVndyh2YWwsIENDRENfRk1UX1ZFUlQpOworCisJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfVkVSVC4uLlxuIiwgdmFsKTsKKworCWRldl9kYmcoZGV2LCAiXG5iZWxvdyByZWd3KHZhbCwgRk1UX1ZFUlQpLi4uIik7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBIb3Jpem9udGFsIG9mZnNldCByZWdpc3Rlci4gSWYgcGFjayA4IGlzIGVuYWJsZWQgdGhlbgorCSAqIDEgcGl4ZWwgd2lsbCB0YWtlIDEgYnl0ZQorCSAqLworCWlmICgoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpIHx8CisJICAgIGNvbmZpZ19wYXJhbXMtPmFsYXcuZW5hYmxlKQorCQlyZWd3KChwYXJhbXMtPndpbi53aWR0aCArIENDRENfMzJCWVRFX0FMSUdOX1ZBTCkgJgorCQkgICAgQ0NEQ19IU0laRV9PRkZfTUFTSywgQ0NEQ19IU0laRV9PRkYpOworCWVsc2UKKwkJLyogZWxzZSBvbmUgcGl4ZWwgd2lsbCB0YWtlIDIgYnl0ZSAqLworCQlyZWd3KCgocGFyYW1zLT53aW4ud2lkdGggKiBDQ0RDX1RXT19CWVRFU19QRVJfUElYRUwpICsKKwkJICAgIENDRENfMzJCWVRFX0FMSUdOX1ZBTCkgJiBDQ0RDX0hTSVpFX09GRl9NQVNLLAorCQkgICAgQ0NEQ19IU0laRV9PRkYpOworCisJLyogU2V0IHZhbHVlIGZvciBTRE9GU1QgKi8KKwlpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpIHsKKwkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuYWJsZSkgeworCQkJLyogRm9yIGludGVsYWNlIGludmVyc2UgbW9kZSAqLworCQkJcmVndyhDQ0RDX0lOVEVSTEFDRURfSU1BR0VfSU5WRVJULCBDQ0RDX1NET0ZTVCk7CisJCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDRCNkQgdG8gU0RPRlNULi4uXG4iKTsKKwkJfQorCisJCWVsc2UgeworCQkJLyogRm9yIGludGVsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coQ0NEQ19JTlRFUkxBQ0VEX05PX0lNQUdFX0lOVkVSVCwgQ0NEQ19TRE9GU1QpOworCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMjQ5IHRvIFNET0ZTVC4uLlxuIik7CisJCX0KKwl9IGVsc2UgaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkgeworCQlyZWd3KENDRENfUFJPR1JFU1NJVkVfTk9fSU1BR0VfSU5WRVJULCBDQ0RDX1NET0ZTVCk7CisJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4MDAwMCB0byBTRE9GU1QuLi5cbiIpOworCX0KKworCS8qCisJICogQ29uZmlndXJlIHZpZGVvIHBvcnQgcGl4ZWwgc2VsZWN0aW9uIChWUE9VVCkKKwkgKiBIZXJlIC0xIGlzIHRvIG1ha2UgdGhlIGhlaWdodCB2YWx1ZSBsZXNzIHRoYW4gRk1UX1ZFUlQuRk1UTE5WCisJICovCisJaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkKKwkJdmFsID0gKCgocGFyYW1zLT53aW4uaGVpZ2h0IC0gMSkgJiBDQ0RDX1ZQX09VVF9WRVJUX05VTV9NQVNLKSkKKwkJICAgIDw8IENDRENfVlBfT1VUX1ZFUlRfTlVNX1NISUZUOworCWVsc2UKKwkJdmFsID0KKwkJICAgICgoKChwYXJhbXMtPndpbi5oZWlnaHQgPj4gQ0NEQ19JTlRFUkxBQ0VEX0hFSUdIVF9TSElGVCkgLQorCQkgICAgIDEpICYgQ0NEQ19WUF9PVVRfVkVSVF9OVU1fTUFTSykpIDw8CisJCSAgICBDQ0RDX1ZQX09VVF9WRVJUX05VTV9TSElGVDsKKworCXZhbCB8PSAoKCgocGFyYW1zLT53aW4ud2lkdGgpKSkgJiBDQ0RDX1ZQX09VVF9IT1JaX05VTV9NQVNLKQorCSAgICA8PCBDQ0RDX1ZQX09VVF9IT1JaX05VTV9TSElGVDsKKwl2YWwgfD0gKHBhcmFtcy0+d2luLmxlZnQpICYgQ0NEQ19WUF9PVVRfSE9SWl9TVF9NQVNLOworCXJlZ3codmFsLCBDQ0RDX1ZQX09VVCk7CisKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIFZQX09VVC4uLlxuIiwgdmFsKTsKKwlyZWd3KHN5bl9tb2RlLCBDQ0RDX1NZTl9NT0RFKTsKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCBzeW5fbW9kZSk7CisKKwljY2RjX3NibF9yZXNldCgpOworCWRldl9kYmcoZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CisJY2NkY19yZWFkcmVncygpOworfQorCitzdGF0aWMgaW50IGNjZGNfY29uZmlndXJlKHZvaWQpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jb25maWdfcmF3KCk7CisJZWxzZQorCQljY2RjX2NvbmZpZ195Y2JjcigpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjZGNfc2V0X2J1ZnR5cGUoZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGUpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJZWxzZQorCQljY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBjY2RjX2J1ZnR5cGUgY2NkY19nZXRfYnVmdHlwZSh2b2lkKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGU7CisJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlOworfQorCitzdGF0aWMgaW50IGNjZGNfZW51bV9waXgodTMyICpwaXgsIGludCBpKQoreworCWludCByZXQgPSAtRUlOVkFMOworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzKSkgeworCQkJKnBpeCA9IGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzW2ldOworCQkJcmV0ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChpIDwgQVJSQVlfU0laRShjY2RjX3Jhd195dXZfcGl4X2Zvcm1hdHMpKSB7CisJCQkqcGl4ID0gY2NkY19yYXdfeXV2X3BpeF9mb3JtYXRzW2ldOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNjZGNfc2V0X3BpeGVsX2Zvcm1hdCh1MzIgcGl4Zm10KQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJY2NkY19od19wYXJhbXNfcmF3LnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKKwkJCWNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXcuZW5hYmxlID0gMTsKKwkJZWxzZSBpZiAocGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9TQkdHUjE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKKwkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOworCQllbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1VZVlkpCisJCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNjZGNfZ2V0X3BpeGVsX2Zvcm1hdCh2b2lkKQoreworCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0KKwkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXc7CisJdTMyIHBpeGZtdDsKKworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWlmIChhbGF3LT5lbmFibGUpCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OworCQllbHNlCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKKwllbHNlIHsKKwkJaWYgKGNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQllbHNlCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwl9CisJcmV0dXJuIHBpeGZtdDsKK30KKworc3RhdGljIGludCBjY2RjX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfaHdfcGFyYW1zX3Jhdy53aW4gPSAqd2luOworCWVsc2UKKwkJY2NkY19od19wYXJhbXNfeWNiY3Iud2luID0gKndpbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2NkY19nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gY2NkY19od19wYXJhbXNfcmF3LndpbjsKKwllbHNlCisJCSp3aW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2NkY19nZXRfbGluZV9sZW5ndGgodm9pZCkKK3sKKwlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9CisJCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZW5hYmxlKSB8fAorCQkgICAgKGNvbmZpZ19wYXJhbXMtPmRhdGFfc3ogPT0gQ0NEQ19EQVRBXzhCSVRTKSkKKwkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGg7CisJCWVsc2UKKwkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGggKiAyOworCX0gZWxzZQorCQlsZW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW4ud2lkdGggKiAyOworCXJldHVybiBBTElHTihsZW4sIDMyKTsKK30KKworc3RhdGljIGludCBjY2RjX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10ID0gZnJtX2ZtdDsKKwllbHNlCisJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBjY2RjX2ZybWZtdCBjY2RjX2dldF9mcmFtZV9mb3JtYXQodm9pZCkKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQ7CisJZWxzZQorCQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdDsKK30KKworc3RhdGljIGludCBjY2RjX2dldGZpZCh2b2lkKQoreworCXJldHVybiAocmVncihDQ0RDX1NZTl9NT0RFKSA+PiAxNSkgJiAxOworfQorCisvKiBtaXNjIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjY2RjX3NldGZiYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmVndyhhZGRyICYgMHhmZmZmZmZlMCwgQ0NEQ19TRFJfQUREUik7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCit7CisJY2NkY19pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCisJc3dpdGNoIChwYXJhbXMtPmlmX3R5cGUpIHsKKwljYXNlIFZQRkVfQlQ2NTY6CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfODoKKwkJY2NkY19od19wYXJhbXNfeWNiY3IudmRfcG9sID0gcGFyYW1zLT52ZHBvbDsKKwkJY2NkY19od19wYXJhbXNfeWNiY3IuaGRfcG9sID0gcGFyYW1zLT5oZHBvbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVE9ETyBhZGQgc3VwcG9ydCBmb3IgcmF3IGJheWVyIGhlcmUgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNjZGNfaHdfZGV2aWNlIGNjZGNfaHdfZGV2ID0geworCS5uYW1lID0gIkRNNjQ0NiBDQ0RDIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaHdfb3BzID0geworCQkub3BlbiA9IGNjZGNfb3BlbiwKKwkJLmNsb3NlID0gY2NkY19jbG9zZSwKKwkJLnNldF9jY2RjX2Jhc2UgPSBjY2RjX3NldF9jY2RjX2Jhc2UsCisJCS5yZXNldCA9IGNjZGNfc2JsX3Jlc2V0LAorCQkuZW5hYmxlID0gY2NkY19lbmFibGUsCisJCS5zZXRfaHdfaWZfcGFyYW1zID0gY2NkY19zZXRfaHdfaWZfcGFyYW1zLAorCQkuc2V0X3BhcmFtcyA9IGNjZGNfc2V0X3BhcmFtcywKKwkJLmNvbmZpZ3VyZSA9IGNjZGNfY29uZmlndXJlLAorCQkuc2V0X2J1ZnR5cGUgPSBjY2RjX3NldF9idWZ0eXBlLAorCQkuZ2V0X2J1ZnR5cGUgPSBjY2RjX2dldF9idWZ0eXBlLAorCQkuZW51bV9waXggPSBjY2RjX2VudW1fcGl4LAorCQkuc2V0X3BpeGVsX2Zvcm1hdCA9IGNjZGNfc2V0X3BpeGVsX2Zvcm1hdCwKKwkJLmdldF9waXhlbF9mb3JtYXQgPSBjY2RjX2dldF9waXhlbF9mb3JtYXQsCisJCS5zZXRfZnJhbWVfZm9ybWF0ID0gY2NkY19zZXRfZnJhbWVfZm9ybWF0LAorCQkuZ2V0X2ZyYW1lX2Zvcm1hdCA9IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCwKKwkJLnNldF9pbWFnZV93aW5kb3cgPSBjY2RjX3NldF9pbWFnZV93aW5kb3csCisJCS5nZXRfaW1hZ2Vfd2luZG93ID0gY2NkY19nZXRfaW1hZ2Vfd2luZG93LAorCQkuZ2V0X2xpbmVfbGVuZ3RoID0gY2NkY19nZXRfbGluZV9sZW5ndGgsCisJCS5zZXRmYmFkZHIgPSBjY2RjX3NldGZiYWRkciwKKwkJLmdldGZpZCA9IGNjZGNfZ2V0ZmlkLAorCX0sCit9OworCitzdGF0aWMgaW50IGRtNjQ0eF9jY2RjX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgImRtNjQ0eF9jY2RjX2luaXRcbiIpOworCWlmICh2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2RldikgPCAwKQorCQlyZXR1cm4gLTE7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsCisJCWNjZGNfaHdfZGV2Lm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbTY0NHhfY2NkY19leGl0KHZvaWQpCit7CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7Cit9CisKK21vZHVsZV9pbml0KGRtNjQ0eF9jY2RjX2luaXQpOworbW9kdWxlX2V4aXQoZG02NDR4X2NjZGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGNfcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTVkMDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjX3JlZ3MuaApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfRE02NDRYX0NDRENfUkVHU19ICisjZGVmaW5lIF9ETTY0NFhfQ0NEQ19SRUdTX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSZWdpc3RlciBPRkZTRVQgRGVmaW5pdGlvbnMKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0NEQ19QSUQJCQkJMHgwCisjZGVmaW5lIENDRENfUENSCQkJCTB4NAorI2RlZmluZSBDQ0RDX1NZTl9NT0RFCQkJCTB4OAorI2RlZmluZSBDQ0RDX0hEX1ZEX1dJRAkJCQkweGMKKyNkZWZpbmUgQ0NEQ19QSVhfTElORVMJCQkJMHgxMAorI2RlZmluZSBDQ0RDX0hPUlpfSU5GTwkJCQkweDE0CisjZGVmaW5lIENDRENfVkVSVF9TVEFSVAkJCQkweDE4CisjZGVmaW5lIENDRENfVkVSVF9MSU5FUwkJCQkweDFjCisjZGVmaW5lIENDRENfQ1VMTElORwkJCQkweDIwCisjZGVmaW5lIENDRENfSFNJWkVfT0ZGCQkJCTB4MjQKKyNkZWZpbmUgQ0NEQ19TRE9GU1QJCQkJMHgyOAorI2RlZmluZSBDQ0RDX1NEUl9BRERSCQkJCTB4MmMKKyNkZWZpbmUgQ0NEQ19DTEFNUAkJCQkweDMwCisjZGVmaW5lIENDRENfRENTVUIJCQkJMHgzNAorI2RlZmluZSBDQ0RDX0NPTFBUTgkJCQkweDM4CisjZGVmaW5lIENDRENfQkxLQ01QCQkJCTB4M2MKKyNkZWZpbmUgQ0NEQ19GUEMJCQkJMHg0MAorI2RlZmluZSBDQ0RDX0ZQQ19BRERSCQkJCTB4NDQKKyNkZWZpbmUgQ0NEQ19WRElOVAkJCQkweDQ4CisjZGVmaW5lIENDRENfQUxBVwkJCQkweDRjCisjZGVmaW5lIENDRENfUkVDNjU2SUYJCQkJMHg1MAorI2RlZmluZSBDQ0RDX0NDRENGRwkJCQkweDU0CisjZGVmaW5lIENDRENfRk1UQ0ZHCQkJCTB4NTgKKyNkZWZpbmUgQ0NEQ19GTVRfSE9SWgkJCQkweDVjCisjZGVmaW5lIENDRENfRk1UX1ZFUlQJCQkJMHg2MAorI2RlZmluZSBDQ0RDX0ZNVF9BRERSMAkJCQkweDY0CisjZGVmaW5lIENDRENfRk1UX0FERFIxCQkJCTB4NjgKKyNkZWZpbmUgQ0NEQ19GTVRfQUREUjIJCQkJMHg2YworI2RlZmluZSBDQ0RDX0ZNVF9BRERSMwkJCQkweDcwCisjZGVmaW5lIENDRENfRk1UX0FERFI0CQkJCTB4NzQKKyNkZWZpbmUgQ0NEQ19GTVRfQUREUjUJCQkJMHg3OAorI2RlZmluZSBDQ0RDX0ZNVF9BRERSNgkJCQkweDdjCisjZGVmaW5lIENDRENfRk1UX0FERFI3CQkJCTB4ODAKKyNkZWZpbmUgQ0NEQ19QUkdFVkVOXzAJCQkJMHg4NAorI2RlZmluZSBDQ0RDX1BSR0VWRU5fMQkJCQkweDg4CisjZGVmaW5lIENDRENfUFJHT0REXzAJCQkJMHg4YworI2RlZmluZSBDQ0RDX1BSR09ERF8xCQkJCTB4OTAKKyNkZWZpbmUgQ0NEQ19WUF9PVVQJCQkJMHg5NAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoJRGVmaW5lIGZvciB2YXJpb3VzIHJlZ2lzdGVyIGJpdCBtYXNrIGFuZCBzaGlmdHMgZm9yIENDREMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENDRENfRklEX1BPTF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX0ZJRF9QT0xfU0hJRlQJCQk0CisjZGVmaW5lIENDRENfSERfUE9MX01BU0sJCQkxCisjZGVmaW5lIENDRENfSERfUE9MX1NISUZUCQkJMworI2RlZmluZSBDQ0RDX1ZEX1BPTF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX1ZEX1BPTF9TSElGVAkJCTIKKyNkZWZpbmUgQ0NEQ19IU0laRV9PRkZfTUFTSwkJCTB4ZmZmZmZmZTAKKyNkZWZpbmUgQ0NEQ18zMkJZVEVfQUxJR05fVkFMCQkJMzEKKyNkZWZpbmUgQ0NEQ19GUk1fRk1UX01BU0sJCQkweDEKKyNkZWZpbmUgQ0NEQ19GUk1fRk1UX1NISUZUCQkJNworI2RlZmluZSBDQ0RDX0RBVEFfU1pfTUFTSwkJCTcKKyNkZWZpbmUgQ0NEQ19EQVRBX1NaX1NISUZUCQkJOAorI2RlZmluZSBDQ0RDX1BJWF9GTVRfTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19QSVhfRk1UX1NISUZUCQkJMTIKKyNkZWZpbmUgQ0NEQ19WUDJTRFJfRElTQUJMRQkJCTB4RkZGQkZGRkYKKyNkZWZpbmUgQ0NEQ19XRU5fRU5BQkxFCQkJCSgxIDw8IDE3KQorI2RlZmluZSBDQ0RDX1NEUjJSU1pfRElTQUJMRQkJCTB4RkZGN0ZGRkYKKyNkZWZpbmUgQ0NEQ19WREhERU5fRU5BQkxFCQkJKDEgPDwgMTYpCisjZGVmaW5lIENDRENfTFBGX0VOQUJMRQkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgQ0NEQ19BTEFXX0VOQUJMRQkJCSgxIDw8IDMpCisjZGVmaW5lIENDRENfQUxBV19HQU1BX1dEX01BU0sJCQk3CisjZGVmaW5lIENDRENfQkxLX0NMQU1QX0VOQUJMRQkJCSgxIDw8IDMxKQorI2RlZmluZSBDQ0RDX0JMS19TR0FJTl9NQVNLCQkJMHgxRgorI2RlZmluZSBDQ0RDX0JMS19TVF9QWExfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBDQ0RDX0JMS19TVF9QWExfU0hJRlQJCQkxMAorI2RlZmluZSBDQ0RDX0JMS19TQU1QTEVfTE5fTUFTSwkJCTcKKyNkZWZpbmUgQ0NEQ19CTEtfU0FNUExFX0xOX1NISUZUCQkyOAorI2RlZmluZSBDQ0RDX0JMS19TQU1QTEVfTElORV9NQVNLCQk3CisjZGVmaW5lIENDRENfQkxLX1NBTVBMRV9MSU5FX1NISUZUCQkyNQorI2RlZmluZSBDQ0RDX0JMS19EQ19TVUJfTUFTSwkJCTB4MDNGRkYKKyNkZWZpbmUgQ0NEQ19CTEtfQ09NUF9NQVNLCQkJMHhGRgorI2RlZmluZSBDQ0RDX0JMS19DT01QX0dCX0NPTVBfU0hJRlQJCTgKKyNkZWZpbmUgQ0NEQ19CTEtfQ09NUF9HUl9DT01QX1NISUZUCQkxNgorI2RlZmluZSBDQ0RDX0JMS19DT01QX1JfQ09NUF9TSElGVAkJMjQKKyNkZWZpbmUgQ0NEQ19MQVRDSF9PTl9WU1lOQ19ESVNBQkxFCQkoMSA8PCAxNSkKKyNkZWZpbmUgQ0NEQ19GUENfRU5BQkxFCQkJCSgxIDw8IDE1KQorI2RlZmluZSBDQ0RDX0ZQQ19ESVNBQkxFCQkJMAorI2RlZmluZSBDQ0RDX0ZQQ19GUENfTlVNX01BU0sgCQkJMHg3RkZGCisjZGVmaW5lIENDRENfREFUQV9QQUNLX0VOQUJMRQkJCSgxIDw8IDExKQorI2RlZmluZSBDQ0RDX0ZNVENGR19WUElOX01BU0sJCQk3CisjZGVmaW5lIENDRENfRk1UQ0ZHX1ZQSU5fU0hJRlQJCQkxMgorI2RlZmluZSBDQ0RDX0ZNVF9IT1JaX0ZNVExOSF9NQVNLCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRfSE9SWl9GTVRTUEhfTUFTSwkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UX0hPUlpfRk1UU1BIX1NISUZUCQkxNgorI2RlZmluZSBDQ0RDX0ZNVF9WRVJUX0ZNVExOVl9NQVNLCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRfVkVSVF9GTVRTTFZfTUFTSwkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UX1ZFUlRfRk1UU0xWX1NISUZUCQkxNgorI2RlZmluZSBDQ0RDX1ZQX09VVF9WRVJUX05VTV9NQVNLCQkweDNGRkYKKyNkZWZpbmUgQ0NEQ19WUF9PVVRfVkVSVF9OVU1fU0hJRlQJCTE3CisjZGVmaW5lIENDRENfVlBfT1VUX0hPUlpfTlVNX01BU0sJCTB4MUZGRgorI2RlZmluZSBDQ0RDX1ZQX09VVF9IT1JaX05VTV9TSElGVAkJNAorI2RlZmluZSBDQ0RDX1ZQX09VVF9IT1JaX1NUX01BU0sJCTB4RgorI2RlZmluZSBDQ0RDX0hPUlpfSU5GT19TUEhfU0hJRlQJCTE2CisjZGVmaW5lIENDRENfVkVSVF9TVEFSVF9TTFYwX1NISUZUCQkxNgorI2RlZmluZSBDQ0RDX1ZESU5UX1ZESU5UMF9TSElGVAkJCTE2CisjZGVmaW5lIENDRENfVkRJTlRfVkRJTlQxX01BU0sJCQkweEZGRkYKKyNkZWZpbmUgQ0NEQ19QUENfUkFXCQkJCTEKKyNkZWZpbmUgQ0NEQ19EQ1NVQl9ERUZBVUxUX1ZBTAkJCTAKKyNkZWZpbmUgQ0NEQ19DTEFNUF9ERUZBVUxUX1ZBTAkJCTAKKyNkZWZpbmUgQ0NEQ19FTkFCTEVfVklERU9fUE9SVAkJCTB4ODAwMAorI2RlZmluZSBDQ0RDX0RJU0FCTEVfVklERU9fUE9SVAkJCTAKKyNkZWZpbmUgQ0NEQ19DT0xQVE5fVkFMCQkJCTB4QkIxMUJCMTEKKyNkZWZpbmUgQ0NEQ19UV09fQllURVNfUEVSX1BJWEVMCQkyCisjZGVmaW5lIENDRENfSU5URVJMQUNFRF9JTUFHRV9JTlZFUlQJCTB4NEI2RAorI2RlZmluZSBDQ0RDX0lOVEVSTEFDRURfTk9fSU1BR0VfSU5WRVJUCQkweDAyNDkKKyNkZWZpbmUgQ0NEQ19QUk9HUkVTU0lWRV9JTUFHRV9JTlZFUlQJCTB4NDAwMAorI2RlZmluZSBDQ0RDX1BST0dSRVNTSVZFX05PX0lNQUdFX0lOVkVSVAkwCisjZGVmaW5lIENDRENfSU5URVJMQUNFRF9IRUlHSFRfU0hJRlQJCTEKKyNkZWZpbmUgQ0NEQ19TWU5fTU9ERV9JTlBNT0RfU0hJRlQJCTEyCisjZGVmaW5lIENDRENfU1lOX01PREVfSU5QTU9EX01BU0sJCTMKKyNkZWZpbmUgQ0NEQ19TWU5fTU9ERV84QklUUwkJCSg3IDw8IDgpCisjZGVmaW5lIENDRENfU1lOX0ZMRE1PREVfTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19TWU5fRkxETU9ERV9TSElGVAkJCTcKKyNkZWZpbmUgQ0NEQ19SRUM2NTZJRl9CVDY1Nl9FTgkJCTMKKyNkZWZpbmUgQ0NEQ19TWU5fTU9ERV9WRF9QT0xfTkVHQVRJVkUJCSgxIDw8IDIpCisjZGVmaW5lIENDRENfQ0NEQ0ZHX1k4UE9TX1NISUZUCQkJMTEKKyNkZWZpbmUgQ0NEQ19TRE9GU1RfRklFTERfSU5URVJMRUFWRUQJCTB4MjQ5CisjZGVmaW5lIENDRENfTk9fQ1VMTElORwkJCQkweGZmZmYwMGZmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDJjZTQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCkBAIC0wLDAgKzEsMjEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqIERyaXZlciBuYW1lIDogVlBGRSBDYXB0dXJlIGRyaXZlcgorICogICAgVlBGRSBDYXB0dXJlIGRyaXZlciBhbGxvd3MgYXBwbGljYXRpb25zIHRvIGNhcHR1cmUgYW5kIHN0cmVhbSB2aWRlbworICogICAgZnJhbWVzIG9uIERhVmluY2kgU29DcyAoRE02NDQ2LCBETTM1NSBldGMpIGZyb20gYSBZVVYgc291cmNlIHN1Y2ggYXMKKyAqICAgIFRWUDUxNDYgb3IgIFJhdyBCYXllciBSR0IgaW1hZ2UgZGF0YSBmcm9tIGFuIGltYWdlIHNlbnNvcgorICogICAgc3VjaCBhcyBNaWNyb25zJyBNVDlUMDAxLCBNVDlUMDMxIGV0Yy4KKyAqCisgKiAgICBUaGVzZSBTb0NzIGhhdmUsIGluIGNvbW1vbiwgYSBWaWRlbyBQcm9jZXNzaW5nIFN1YnN5c3RlbSAoVlBTUykgdGhhdAorICogICAgY29uc2lzdHMgb2YgYSBWaWRlbyBQcm9jZXNzaW5nIEZyb250IEVuZCAoVlBGRSkgZm9yIGNhcHR1cmluZworICogICAgdmlkZW8vcmF3IGltYWdlIGRhdGEgYW5kIFZpZGVvIFByb2Nlc3NpbmcgQmFjayBFbmQgKFZQQkUpIGZvciBkaXNwbGF5aW5nCisgKiAgICBZVVYgZGF0YSB0aHJvdWdoIGFuIGluLWJ1aWx0IGFuYWxvZyBlbmNvZGVyIG9yIERpZ2l0YWwgTENEIHBvcnQuIFRoaXMKKyAqICAgIGRyaXZlciBpcyBmb3IgY2FwdHVyZSB0aHJvdWdoIFZQRkUuIEEgdHlwaWNhbCBFVk0gdXNpbmcgdGhlc2UgU29DcyBoYXZlCisgKiAgICBmb2xsb3dpbmcgaGlnaCBsZXZlbCBjb25maWd1cmF0aW9uLgorICoKKyAqCisgKiAgICBkZWNvZGVyKFRWUDUxNDYvCQlZVVYvCisgKiAJICAgICBNVDlUMDAxKSAgIC0tPiAgUmF3IEJheWVyIFJHQiAtLS0+IE1VWCAtPiBWUEZFIChDQ0RDL0lTSUYpCisgKiAgICAJCQkJZGF0YSBpbnB1dCAgICAgICAgICAgICAgfCAgICAgIHwKKyAqCQkJCQkJCVYgICAgICB8CisgKgkJCQkJCSAgICAgIFNEUkFNICAgIHwKKyAqCQkJCQkJCSAgICAgICBWCisgKgkJCQkJCQkgICBJbWFnZSBQcm9jZXNzb3IKKyAqCQkJCQkJCSAgICAgICB8CisgKgkJCQkJCQkgICAgICAgVgorICoJCQkJCQkJICAgICBTRFJBTQorICogICAgVGhlIGRhdGEgZmxvdyBoYXBwZW5zIGZyb20gYSBkZWNvZGVyIGNvbm5lY3RlZCB0byB0aGUgVlBGRSBvdmVyIGEKKyAqICAgIFlVViBlbWJlZGRlZCAoQlQuNjU2L0JULjExMjApIG9yIHNlcGFyYXRlIHN5bmMgb3IgcmF3IGJheWVyIHJnYiBpbnRlcmZhY2UKKyAqICAgIGFuZCB0byB0aGUgaW5wdXQgb2YgVlBGRSB0aHJvdWdoIGFuIG9wdGlvbmFsIE1VWCAoaWYgbW9yZSBpbnB1dHMgYXJlCisgKiAgICB0byBiZSBpbnRlcmZhY2VkIG9uIHRoZSBFVk0pLiBUaGUgaW5wdXQgZGF0YSBpcyBmaXJzdCBwYXNzZWQgdGhyb3VnaAorICogICAgQ0NEQyAoQ0NEIENvbnRyb2xsZXIsIGEuay5hIEltYWdlIFNlbnNvciBJbnRlcmZhY2UsIElTSUYpLiBUaGUgQ0NEQworICogICAgZG9lcyB2ZXJ5IGxpdHRsZSBvciBubyBwcm9jZXNzaW5nIG9uIFlVViBkYXRhIGFuZCBkb2VzIHByZS1wcm9jZXNzIFJhdworICogICAgQmF5ZXIgUkdCIGRhdGEgdGhyb3VnaCBtb2R1bGVzIHN1Y2ggYXMgRGVmZWN0IFBpeGVsIENvcnJlY3Rpb24gKERGQykKKyAqICAgIENvbG9yIFNwYWNlIENvbnZlcnNpb24gKENTQyksIGRhdGEgZ2Fpbi9vZmZzZXQgZXRjLiBBZnRlciB0aGlzLCBkYXRhCisgKiAgICBjYW4gYmUgd3JpdHRlbiB0byBTRFJBTSBvciBjYW4gYmUgY29ubmVjdGVkIHRvIHRoZSBpbWFnZSBwcm9jZXNzaW5nCisgKiAgICBibG9jayBzdWNoIGFzIElQSVBFIChvbiBETTM1NSBvbmx5KS4KKyAqCisgKiAgICBGZWF0dXJlcyBzdXBwb3J0ZWQKKyAqICAJCS0gTU1BUCBJTworICoJCS0gQ2FwdHVyZSB1c2luZyBUVlA1MTQ2IG92ZXIgQlQuNjU2CisgKgkJLSBzdXBwb3J0IGZvciBpbnRlcmZhY2luZyBkZWNvZGVycyB1c2luZyBzdWIgZGV2aWNlIG1vZGVsCisgKgkJLSBXb3JrIHdpdGggRE0zNTUgb3IgRE02NDQ2IENDREMgdG8gZG8gUmF3IEJheWVyIFJHQi9ZVVYKKyAqCQkgIGRhdGEgY2FwdHVyZSB0byBTRFJBTS4KKyAqICAgIFRPRE8gbGlzdAorICoJCS0gU3VwcG9ydCBtdWx0aXBsZSBSRVFCVUYgYWZ0ZXIgb3BlbgorICoJCS0gU3VwcG9ydCBmb3IgZGUtYWxsb2NhdGluZyBidWZmZXJzIHRocm91Z2ggUkVRQlVGCisgKgkJLSBTdXBwb3J0IGZvciBSYXcgQmF5ZXIgUkdCIGNhcHR1cmUKKyAqCQktIFN1cHBvcnQgZm9yIGNoYWluaW5nIEltYWdlIFByb2Nlc3NvcgorICoJCS0gU3VwcG9ydCBmb3Igc3RhdGljIGFsbG9jYXRpb24gb2YgYnVmZmVycworICoJCS0gU3VwcG9ydCBmb3IgVVNFUlBUUiBJTworICoJCS0gU3VwcG9ydCBmb3IgU1RSRUFNT04gYmVmb3JlIFFCVUYKKyAqCQktIFN1cHBvcnQgZm9yIGNvbnRyb2wgaW9jdGxzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5oPgorI2luY2x1ZGUgImNjZGNfaHdfZGV2aWNlLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgdTMyIG51bWJ1ZmZlcnMgPSAzOworc3RhdGljIHUzMiBidWZzaXplID0gKDcyMCAqIDU3NiAqIDIpOworCittb2R1bGVfcGFyYW0obnVtYnVmZmVycywgdWludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oYnVmc2l6ZSwgdWludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CisKK01PRFVMRV9QQVJNX0RFU0MobnVtYnVmZmVycywgImJ1ZmZlciBjb3VudCAoZGVmYXVsdDozKSIpOworTU9EVUxFX1BBUk1fREVTQyhidWZzaXplLCAiYnVmZmVyIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ6NzIwIHggNTc2IHggMikiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAwLTEiKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJWUEZFIFZpZGVvIGZvciBMaW51eCBDYXB0dXJlIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKKworLyogc3RhbmRhcmQgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCB2cGZlX3N0YW5kYXJkIHsKKwl2NGwyX3N0ZF9pZCBzdGRfaWQ7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7CisJc3RydWN0IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3Q7CisJLyogMCAtIHByb2dyZXNzaXZlLCAxIC0gaW50ZXJsYWNlZCAqLworCWludCBmcmFtZV9mb3JtYXQ7Cit9OworCisvKiBjY2RjIGNvbmZpZ3VyYXRpb24gKi8KK3N0cnVjdCBjY2RjX2NvbmZpZyB7CisJLyogVGhpcyBtYWtlIHN1cmUgdnBmZSBpcyBwcm9iZWQgYW5kIHJlYWR5IHRvIGdvICovCisJaW50IHZwZmVfcHJvYmVkOworCS8qIG5hbWUgb2YgY2NkYyBkZXZpY2UgKi8KKwljaGFyIG5hbWVbMzJdOworCS8qIGZvciBzdG9yaW5nIG1lbSBtYXBzIGZvciBDQ0RDICovCisJaW50IGNjZGNfYWRkcl9zaXplOworCXZvaWQgKl9faW9tZW0gY2NkY19hZGRyOworfTsKKworLyogZGF0YSBzdHJ1Y3R1cmVzICovCitzdGF0aWMgc3RydWN0IHZwZmVfY29uZmlnX3BhcmFtcyBjb25maWdfcGFyYW1zID0geworCS5taW5fbnVtYnVmZmVycyA9IDMsCisJLm51bWJ1ZmZlcnMgPSAzLAorCS5taW5fYnVmc2l6ZSA9IDcyMCAqIDQ4MCAqIDIsCisJLmRldmljZV9idWZzaXplID0gNzIwICogNTc2ICogMiwKK307CisKKy8qIGNjZGMgZGV2aWNlIHJlZ2lzdGVyZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgY2NkY19od19kZXZpY2UgKmNjZGNfZGV2OworLyogbG9jayBmb3IgYWNjZXNzaW5nIGNjZGMgaW5mb3JtYXRpb24gKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoY2NkY19sb2NrKTsKKy8qIGNjZGMgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBjY2RjX2NvbmZpZyAqY2NkY19jZmc7CisKK2NvbnN0IHN0cnVjdCB2cGZlX3N0YW5kYXJkIHZwZmVfc3RhbmRhcmRzW10gPSB7CisJe1Y0TDJfU1REXzUyNV82MCwgNzIwLCA0ODAsIHsxMSwgMTB9LCAxfSwKKwl7VjRMMl9TVERfNjI1XzUwLCA3MjAsIDU3NiwgezU0LCA1OX0sIDF9LAorfTsKKworLyogVXNlZCB3aGVuIHJhdyBCYXllciBpbWFnZSBmcm9tIGNjZGMgaXMgZGlyZWN0bHkgY2FwdHVyZWQgdG8gU0RSQU0gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBmZV9waXhlbF9mb3JtYXQgdnBmZV9waXhfZm10c1tdID0geworCXsKKwkJLmZtdGRlc2MgPSB7CisJCQkuaW5kZXggPSAwLAorCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZGVzY3JpcHRpb24gPSAiQmF5ZXIgR3JSQkdiIDhiaXQgQS1MYXcgY29tcHIuIiwKKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCX0sCisJCS5icHAgPSAxLAorCX0sCisJeworCQkuZm10ZGVzYyA9IHsKKwkJCS5pbmRleCA9IDEsCisJCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCS5kZXNjcmlwdGlvbiA9ICJCYXllciBHclJCR2IgLSAxNmJpdCIsCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1IxNiwKKwkJfSwKKwkJLmJwcCA9IDIsCisJfSwKKwl7CisJCS5mbXRkZXNjID0geworCQkJLmluZGV4ID0gMiwKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmRlc2NyaXB0aW9uID0gIkJheWVyIEdyUkJHYiA4Yml0IERQQ00gY29tcHIuIiwKKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TR1JCRzEwRFBDTTgsCisJCX0sCisJCS5icHAgPSAxLAorCX0sCisJeworCQkuZm10ZGVzYyA9IHsKKwkJCS5pbmRleCA9IDMsCisJCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCS5kZXNjcmlwdGlvbiA9ICJZQ2JDciA0OjI6MiBJbnRlcmxlYXZlZCBVWVZZIiwKKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZLAorCQl9LAorCQkuYnBwID0gMiwKKwl9LAorCXsKKwkJLmZtdGRlc2MgPSB7CisJCQkuaW5kZXggPSA0LAorCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZGVzY3JpcHRpb24gPSAiWUNiQ3IgNDoyOjIgSW50ZXJsZWF2ZWQgWVVZViIsCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJfSwKKwkJLmJwcCA9IDIsCisJfSwKKwl7CisJCS5mbXRkZXNjID0geworCQkJLmluZGV4ID0gNSwKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmRlc2NyaXB0aW9uID0gIlkvQ2JDciA0OjI6MCAtIFNlbWkgcGxhbmFyIiwKKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9OVjEyLAorCQl9LAorCQkuYnBwID0gMSwKKwl9LAorfTsKKworLyoKKyAqIHZwZmVfbG9va3VwX3BpeF9mb3JtYXQoKQorICogbG9va3VwIGFuIGVudHJ5IGluIHRoZSB2cGZlIHBpeCBmb3JtYXQgdGFibGUgYmFzZWQgb24gcGl4X2Zvcm1hdAorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZwZmVfcGl4ZWxfZm9ybWF0ICp2cGZlX2xvb2t1cF9waXhfZm9ybWF0KHUzMiBwaXhfZm9ybWF0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBmZV9waXhfZm10cyk7IGkrKykgeworCQlpZiAocGl4X2Zvcm1hdCA9PSB2cGZlX3BpeF9mbXRzW2ldLmZtdGRlc2MucGl4ZWxmb3JtYXQpCisJCQlyZXR1cm4gJnZwZmVfcGl4X2ZtdHNbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogdnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZS4gQ0NEQyBtb2R1bGUgY2FsbHMgdGhpcyB0bworICogcmVnaXN0ZXIgd2l0aCB2cGZlIGNhcHR1cmUKKyAqLworaW50IHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2Uoc3RydWN0IGNjZGNfaHdfZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJcHJpbnRrKEtFUk5fTk9USUNFICJ2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlOiAlc1xuIiwgZGV2LT5uYW1lKTsKKworCUJVR19PTighZGV2LT5od19vcHMub3Blbik7CisJQlVHX09OKCFkZXYtPmh3X29wcy5lbmFibGUpOworCUJVR19PTighZGV2LT5od19vcHMuc2V0X2h3X2lmX3BhcmFtcyk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5jb25maWd1cmUpOworCUJVR19PTighZGV2LT5od19vcHMuc2V0X2J1ZnR5cGUpOworCUJVR19PTighZGV2LT5od19vcHMuZ2V0X2J1ZnR5cGUpOworCUJVR19PTighZGV2LT5od19vcHMuZW51bV9waXgpOworCUJVR19PTighZGV2LT5od19vcHMuc2V0X2ZyYW1lX2Zvcm1hdCk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRfZnJhbWVfZm9ybWF0KTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLmdldF9waXhlbF9mb3JtYXQpOworCUJVR19PTighZGV2LT5od19vcHMuc2V0X3BpeGVsX2Zvcm1hdCk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfcGFyYW1zKTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLnNldF9pbWFnZV93aW5kb3cpOworCUJVR19PTighZGV2LT5od19vcHMuZ2V0X2ltYWdlX3dpbmRvdyk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRfbGluZV9sZW5ndGgpOworCUJVR19PTighZGV2LT5od19vcHMuc2V0ZmJhZGRyKTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLmdldGZpZCk7CisKKwltdXRleF9sb2NrKCZjY2RjX2xvY2spOworCWlmIChOVUxMID09IGNjZGNfY2ZnKSB7CisJCS8qCisJCSAqIFRPRE8uIFdpbGwgdGhpcyBldmVyIGhhcHBlbj8gaWYgc28sIHdlIG5lZWQgdG8gZml4IGl0LgorCQkgKiBQcm9hYmFibHkgd2UgbmVlZCB0byBhZGQgdGhlIHJlcXVlc3QgdG8gYSBsaW5rZWQgbGlzdCBhbmQKKwkJICogd2FsayB0aHJvdWdoIGl0IGR1cmluZyB2cGZlIHByb2JlCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgInZwZmUgY2FwdHVyZSBub3QgaW5pdGlhbGl6ZWRcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKHN0cmNtcChkZXYtPm5hbWUsIGNjZGNfY2ZnLT5uYW1lKSkgeworCQkvKiBpZ25vcmUgdGhpcyBjY2RjICovCisJCXJldCA9IC0xOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoY2NkY19kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjY2RjIGFscmVhZHkgcmVnaXN0ZXJlZFxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIHVubG9jazsKKwl9CisKKwljY2RjX2RldiA9IGRldjsKKwlkZXYtPmh3X29wcy5zZXRfY2NkY19iYXNlKGNjZGNfY2ZnLT5jY2RjX2FkZHIsCisJCQkJICBjY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUpOwordW5sb2NrOgorCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKTsKKworLyoKKyAqIHZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZS4gQ0NEQyBtb2R1bGUgY2FsbHMgdGhpcyB0bworICogdW5yZWdpc3RlciB3aXRoIHZwZmUgY2FwdHVyZQorICovCit2b2lkIHZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZShzdHJ1Y3QgY2NkY19od19kZXZpY2UgKmRldikKK3sKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbnZhbGlkIGNjZGMgZGV2aWNlIHB0clxuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgInZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSwgZGV2LT5uYW1lID0gJXNcbiIsCisJCWRldi0+bmFtZSk7CisKKwlpZiAoc3RyY21wKGRldi0+bmFtZSwgY2NkY19jZmctPm5hbWUpKSB7CisJCS8qIGlnbm9yZSB0aGlzIGNjZGMgKi8KKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CisJY2NkY19kZXYgPSBOVUxMOworCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MKHZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSk7CisKKy8qCisgKiB2cGZlX2dldF9jY2RjX2ltYWdlX2Zvcm1hdCAtIEdldCBpbWFnZSBwYXJhbWV0ZXJzIGJhc2VkIG9uIENDREMgc2V0dGluZ3MKKyAqLworc3RhdGljIGludCB2cGZlX2dldF9jY2RjX2ltYWdlX2Zvcm1hdChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2LAorCQkJCSBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHY0bDJfcmVjdCBpbWFnZV93aW47CisJZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGU7CisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCisJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwljY2RjX2Rldi0+aHdfb3BzLmdldF9pbWFnZV93aW5kb3coJmltYWdlX3dpbik7CisJZi0+Zm10LnBpeC53aWR0aCA9IGltYWdlX3dpbi53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCA9IGltYWdlX3dpbi5oZWlnaHQ7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjY2RjX2Rldi0+aHdfb3BzLmdldF9saW5lX2xlbmd0aCgpOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgKgorCQkJCWYtPmZtdC5waXguaGVpZ2h0OworCWJ1Zl90eXBlID0gY2NkY19kZXYtPmh3X29wcy5nZXRfYnVmdHlwZSgpOworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjY2RjX2Rldi0+aHdfb3BzLmdldF9waXhlbF9mb3JtYXQoKTsKKwlmcm1fZm10ID0gY2NkY19kZXYtPmh3X29wcy5nZXRfZnJhbWVfZm9ybWF0KCk7CisJaWYgKGZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpCisJCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJZWxzZSBpZiAoZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCWlmIChidWZfdHlwZSA9PSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVEKQorCQkJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJZWxzZSBpZiAoYnVmX3R5cGUgPT0gQ0NEQ19CVUZUWVBFX0ZMRF9TRVBBUkFURUQpCisJCQlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9TRVFfVEI7CisJCWVsc2UgeworCQkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmX3R5cGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBmcm1fZm10XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogdnBmZV9jb25maWdfY2NkY19pbWFnZV9mb3JtYXQoKQorICogRm9yIGEgcGl4IGZvcm1hdCwgY29uZmlndXJlIGNjZGMgdG8gc2V0dXAgdGhlIGNhcHR1cmUKKyAqLworc3RhdGljIGludCB2cGZlX2NvbmZpZ19jY2RjX2ltYWdlX2Zvcm1hdChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQoreworCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoY2NkY19kZXYtPmh3X29wcy5zZXRfcGl4ZWxfZm9ybWF0KAorCQkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LnBpeGVsZm9ybWF0KSA8IDApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSJjb3VsZG4ndCBzZXQgcGl4IGZvcm1hdCBpbiBjY2RjXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIGNvbmZpZ3VyZSB0aGUgaW1hZ2Ugd2luZG93ICovCisJY2NkY19kZXYtPmh3X29wcy5zZXRfaW1hZ2Vfd2luZG93KCZ2cGZlX2Rldi0+Y3JvcCk7CisKKwlzd2l0Y2ggKHZwZmVfZGV2LT5mbXQuZm10LnBpeC5maWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQkvKiBkbyBub3RoaW5nLCBzaW5jZSBpdCBpcyBkZWZhdWx0ICovCisJCXJldCA9IGNjZGNfZGV2LT5od19vcHMuc2V0X2J1ZnR5cGUoCisJCQkJQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9OT05FOgorCQlmcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkU7CisJCS8qIGJ1ZmZlciB0eXBlIG9ubHkgYXBwbGljYWJsZSBmb3IgaW50ZXJsYWNlZCBzY2FuICovCisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9TRVFfVEI6CisJCXJldCA9IGNjZGNfZGV2LT5od19vcHMuc2V0X2J1ZnR5cGUoCisJCQkJQ0NEQ19CVUZUWVBFX0ZMRF9TRVBBUkFURUQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZXQgdGhlIGZyYW1lIGZvcm1hdCAqLworCWlmICghcmV0KQorCQlyZXQgPSBjY2RjX2Rldi0+aHdfb3BzLnNldF9mcmFtZV9mb3JtYXQoZnJtX2ZtdCk7CisJcmV0dXJuIHJldDsKK30KKy8qCisgKiB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQoKQorICogRm9yIGEgZ2l2ZW4gc3RhbmRhcmQsIHRoaXMgZnVuY3Rpb25zIHNldHMgdXAgdGhlIGRlZmF1bHQKKyAqIHBpeCBmb3JtYXQgJiBjcm9wIHZhbHVlcyBpbiB0aGUgdnBmZSBkZXZpY2UgYW5kIGNjZGMuICBJdCBmaXJzdAorICogc3RhcnRzIHdpdGggZGVmYXVsdHMgYmFzZWQgdmFsdWVzIGZyb20gdGhlIHN0YW5kYXJkIHRhYmxlLgorICogSXQgdGhlbiBjaGVja3MgaWYgc3ViIGRldmljZSBzdXBwb3J0IGdfZm10IGFuZCB0aGVuIG92ZXJyaWRlIHRoZQorICogdmFsdWVzIGJhc2VkIG9uIHRoYXQuU2V0cyBjcm9wIHZhbHVlcyB0byBtYXRjaCB3aXRoIHNjYW4gcmVzb2x1dGlvbgorICogc3RhcnRpbmcgYXQgMCwwLiBJdCBjYWxscyB2cGZlX2NvbmZpZ19jY2RjX2ltYWdlX2Zvcm1hdCgpIHNldCB0aGUKKyAqIHZhbHVlcyBpbiBjY2RjCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9jb25maWdfaW1hZ2VfZm9ybWF0KHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYsCisJCQkJICAgIGNvbnN0IHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbyA9IHZwZmVfZGV2LT5jdXJyZW50X3N1YmRldjsKKwlpbnQgaSwgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwZmVfc3RhbmRhcmRzKTsgaSsrKSB7CisJCWlmICh2cGZlX3N0YW5kYXJkc1tpXS5zdGRfaWQgJiAqc3RkX2lkKSB7CisJCQl2cGZlX2Rldi0+c3RkX2luZm8uYWN0aXZlX3BpeGVscyA9CisJCQkJCXZwZmVfc3RhbmRhcmRzW2ldLndpZHRoOworCQkJdnBmZV9kZXYtPnN0ZF9pbmZvLmFjdGl2ZV9saW5lcyA9CisJCQkJCXZwZmVfc3RhbmRhcmRzW2ldLmhlaWdodDsKKwkJCXZwZmVfZGV2LT5zdGRfaW5mby5mcmFtZV9mb3JtYXQgPQorCQkJCQl2cGZlX3N0YW5kYXJkc1tpXS5mcmFtZV9mb3JtYXQ7CisJCQl2cGZlX2Rldi0+c3RkX2luZGV4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gIEFSUkFZX1NJWkUodnBmZV9zdGFuZGFyZHMpKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJzdGFuZGFyZCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdnBmZV9kZXYtPmNyb3AudG9wID0gMDsKKwl2cGZlX2Rldi0+Y3JvcC5sZWZ0ID0gMDsKKwl2cGZlX2Rldi0+Y3JvcC53aWR0aCA9IHZwZmVfZGV2LT5zdGRfaW5mby5hY3RpdmVfcGl4ZWxzOworCXZwZmVfZGV2LT5jcm9wLmhlaWdodCA9IHZwZmVfZGV2LT5zdGRfaW5mby5hY3RpdmVfbGluZXM7CisJdnBmZV9kZXYtPmZtdC5mbXQucGl4LndpZHRoID0gdnBmZV9kZXYtPmNyb3Aud2lkdGg7CisJdnBmZV9kZXYtPmZtdC5mbXQucGl4LmhlaWdodCA9IHZwZmVfZGV2LT5jcm9wLmhlaWdodDsKKworCS8qIGZpcnN0IGZpZWxkIGFuZCBmcmFtZSBmb3JtYXQgYmFzZWQgb24gc3RhbmRhcmQgZnJhbWUgZm9ybWF0ICovCisJaWYgKHZwZmVfZGV2LT5zdGRfaW5mby5mcmFtZV9mb3JtYXQpIHsKKwkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkvKiBhc3N1bWUgVjRMMl9QSVhfRk1UX1VZVlkgYXMgZGVmYXVsdCAqLworCQl2cGZlX2Rldi0+Zm10LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwl9IGVsc2UgeworCQl2cGZlX2Rldi0+Zm10LmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCS8qIGFzc3VtZSBWNEwyX1BJWF9GTVRfU0JHR1I4ICovCisJCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJfQorCisJLyogaWYgc3ViIGRldmljZSBzdXBwb3J0cyBnX2ZtdCwgb3ZlcnJpZGUgdGhlIGRlZmF1bHRzICovCisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCXNkaW5mby0+Z3JwX2lkLCB2aWRlbywgZ19mbXQsICZ2cGZlX2Rldi0+Zm10KTsKKworCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJImVycm9yIGluIGdldHRpbmcgZ19mbXQgZnJvbSBzdWIgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTZXRzIHRoZSB2YWx1ZXMgaW4gQ0NEQyAqLworCXJldCA9IHZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0KHZwZmVfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXBkYXRlIHRoZSB2YWx1ZXMgb2Ygc2l6ZWltYWdlIGFuZCBieXRlc3BlcmxpbmUgKi8KKwlpZiAoIXJldCkgeworCQl2cGZlX2Rldi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lID0KKwkJCWNjZGNfZGV2LT5od19vcHMuZ2V0X2xpbmVfbGVuZ3RoKCk7CisJCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5zaXplaW1hZ2UgPQorCQkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSAqCisJCQl2cGZlX2Rldi0+Zm10LmZtdC5waXguaGVpZ2h0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfaW5pdGlhbGl6ZV9kZXZpY2Uoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIHNldCBmaXJzdCBpbnB1dCBvZiBjdXJyZW50IHN1YmRldmljZSBhcyB0aGUgY3VycmVudCBpbnB1dCAqLworCXZwZmVfZGV2LT5jdXJyZW50X2lucHV0ID0gMDsKKworCS8qIHNldCBkZWZhdWx0IHN0YW5kYXJkICovCisJdnBmZV9kZXYtPnN0ZF9pbmRleCA9IDA7CisKKwkvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgZm9ybWF0IGluZm9ybWF0aW9uICovCisJcmV0ID0gdnBmZV9jb25maWdfaW1hZ2VfZm9ybWF0KHZwZmVfZGV2LAorCQkJCSZ2cGZlX3N0YW5kYXJkc1t2cGZlX2Rldi0+c3RkX2luZGV4XS5zdGRfaWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBub3cgb3BlbiB0aGUgY2NkYyBkZXZpY2UgdG8gaW5pdGlhbGl6ZSBpdCAqLworCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CisJaWYgKE5VTEwgPT0gY2NkY19kZXYpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgImNjZGMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKCF0cnlfbW9kdWxlX2dldChjY2RjX2Rldi0+b3duZXIpKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJDb3VsZG4ndCBsb2NrIGNjZGMgbW9kdWxlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2s7CisJfQorCXJldCA9IGNjZGNfZGV2LT5od19vcHMub3Blbih2cGZlX2Rldi0+cGRldik7CisJaWYgKCFyZXQpCisJCXZwZmVfZGV2LT5pbml0aWFsaXplZCA9IDE7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB2cGZlX29wZW4gOiBJdCBjcmVhdGVzIG9iamVjdCBvZiBmaWxlIGhhbmRsZSBzdHJ1Y3R1cmUgYW5kCisgKiBzdG9yZXMgaXQgaW4gcHJpdmF0ZV9kYXRhICBtZW1iZXIgb2YgZmlsZXBvaW50ZXIKKyAqLworc3RhdGljIGludCB2cGZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfZmggKmZoOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX29wZW5cbiIpOworCisJaWYgKCF2cGZlX2Rldi0+Y2ZnLT5udW1fc3ViZGV2cykgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiTm8gZGVjb2RlciByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0ICovCisJZmggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdnBmZV9maCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZSBoYW5kbGUgb2JqZWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qIHN0b3JlIHBvaW50ZXIgdG8gZmggaW4gcHJpdmF0ZV9kYXRhIG1lbWJlciBvZiBmaWxlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPnZwZmVfZGV2ID0gdnBmZV9kZXY7CisJbXV0ZXhfbG9jaygmdnBmZV9kZXYtPmxvY2spOworCS8qIElmIGRlY29kZXIgaXMgbm90IGluaXRpYWxpemVkLiBpbml0aWFsaXplIGl0ICovCisJaWYgKCF2cGZlX2Rldi0+aW5pdGlhbGl6ZWQpIHsKKwkJaWYgKHZwZmVfaW5pdGlhbGl6ZV9kZXZpY2UodnBmZV9kZXYpKSB7CisJCQltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCS8qIEluY3JlbWVudCBkZXZpY2UgdXNycyBjb3VudGVyICovCisJdnBmZV9kZXYtPnVzcnMrKzsKKwkvKiBTZXQgaW9fYWxsb3dlZCBtZW1iZXIgdG8gZmFsc2UgKi8KKwlmaC0+aW9fYWxsb3dlZCA9IDA7CisJLyogSW5pdGlhbGl6ZSBwcmlvcml0eSBvZiB0aGlzIGluc3RhbmNlIHRvIGRlZmF1bHQgcHJpb3JpdHkgKi8KKwlmaC0+cHJpbyA9IFY0TDJfUFJJT1JJVFlfVU5TRVQ7CisJdjRsMl9wcmlvX29wZW4oJnZwZmVfZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2cGZlX3NjaGVkdWxlX25leHRfYnVmZmVyKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJdnBmZV9kZXYtPm5leHRfZnJtID0gbGlzdF9lbnRyeSh2cGZlX2Rldi0+ZG1hX3F1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHF1ZXVlKTsKKwlsaXN0X2RlbCgmdnBmZV9kZXYtPm5leHRfZnJtLT5xdWV1ZSk7CisJdnBmZV9kZXYtPm5leHRfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwlhZGRyID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyh2cGZlX2Rldi0+bmV4dF9mcm0pOworCWNjZGNfZGV2LT5od19vcHMuc2V0ZmJhZGRyKGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB2cGZlX3Byb2Nlc3NfYnVmZmVyX2NvbXBsZXRlKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJc3RydWN0IHRpbWV2YWwgdGltZXZhbHVlOworCisJZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsdWUpOworCXZwZmVfZGV2LT5jdXJfZnJtLT50cyA9IHRpbWV2YWx1ZTsKKwl2cGZlX2Rldi0+Y3VyX2ZybS0+c3RhdGUgPSBWSURFT0JVRl9ET05FOworCXZwZmVfZGV2LT5jdXJfZnJtLT5zaXplID0gdnBmZV9kZXYtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZwZmVfZGV2LT5jdXJfZnJtLT5kb25lKTsKKwl2cGZlX2Rldi0+Y3VyX2ZybSA9IHZwZmVfZGV2LT5uZXh0X2ZybTsKK30KKworLyogSVNSIGZvciBWSU5UMCovCitzdGF0aWMgaXJxcmV0dXJuX3QgdnBmZV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBkZXZfaWQ7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgZmlkOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJcblN0YXJ0aW5nIHZwZmVfaXNyLi4uXG4iKTsKKwlmaWVsZCA9IHZwZmVfZGV2LT5mbXQuZm10LnBpeC5maWVsZDsKKworCS8qIGlmIHN0cmVhbWluZyBub3Qgc3RhcnRlZCwgZG9uJ3QgZG8gYW55dGhpbmcgKi8KKwlpZiAoIXZwZmVfZGV2LT5zdGFydGVkKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkvKiBvbmx5IGZvciA2NDQ2IHRoaXMgd2lsbCBiZSBhcHBsaWNhYmxlICovCisJaWYgKE5VTEwgIT0gY2NkY19kZXYtPmh3X29wcy5yZXNldCkKKwkJY2NkY19kZXYtPmh3X29wcy5yZXNldCgpOworCisJaWYgKGZpZWxkID09IFY0TDJfRklFTERfTk9ORSkgeworCQkvKiBoYW5kbGUgcHJvZ3Jlc3NpdmUgZnJhbWUgY2FwdHVyZSAqLworCQl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSJmcmFtZSBmb3JtYXQgaXMgcHJvZ3Jlc3NpdmUuLi5cbiIpOworCQlpZiAodnBmZV9kZXYtPmN1cl9mcm0gIT0gdnBmZV9kZXYtPm5leHRfZnJtKQorCQkJdnBmZV9wcm9jZXNzX2J1ZmZlcl9jb21wbGV0ZSh2cGZlX2Rldik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKiBpbnRlcmxhY2VkIG9yIFRCIGNhcHR1cmUgY2hlY2sgd2hpY2ggZmllbGQgd2UgYXJlIGluIGhhcmR3YXJlICovCisJZmlkID0gY2NkY19kZXYtPmh3X29wcy5nZXRmaWQoKTsKKworCS8qIHN3aXRjaCB0aGUgc29mdHdhcmUgbWFpbnRhaW5lZCBmaWVsZCBpZCAqLworCXZwZmVfZGV2LT5maWVsZF9pZCBePSAxOworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAiZmllbGQgaWQgPSAleDoleC5cbiIsCisJCWZpZCwgdnBmZV9kZXYtPmZpZWxkX2lkKTsKKwlpZiAoZmlkID09IHZwZmVfZGV2LT5maWVsZF9pZCkgeworCQkvKiB3ZSBhcmUgaW4tc3luYyBoZXJlLGNvbnRpbnVlICovCisJCWlmIChmaWQgPT0gMCkgeworCQkJLyoKKwkJCSAqIE9uZSBmcmFtZSBpcyBqdXN0IGJlaW5nIGNhcHR1cmVkLiBJZiB0aGUgbmV4dCBmcmFtZQorCQkJICogaXMgYXZhaWxhYmxlLCByZWxlYXNlIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBtb3ZlIG9uCisJCQkgKi8KKwkJCWlmICh2cGZlX2Rldi0+Y3VyX2ZybSAhPSB2cGZlX2Rldi0+bmV4dF9mcm0pCisJCQkJdnBmZV9wcm9jZXNzX2J1ZmZlcl9jb21wbGV0ZSh2cGZlX2Rldik7CisJCQkvKgorCQkJICogYmFzZWQgb24gd2hldGhlciB0aGUgdHdvIGZpZWxkcyBhcmUgc3RvcmVkCisJCQkgKiBpbnRlcmxlYXZlbHkgb3Igc2VwYXJhdGVseSBpbiBtZW1vcnksIHJlY29uZmlndXJlCisJCQkgKiB0aGUgQ0NEQyBtZW1vcnkgYWRkcmVzcworCQkJICovCisJCQlpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9TRVFfVEIpIHsKKwkJCQlhZGRyID0KKwkJCQkgIHZpZGVvYnVmX3RvX2RtYV9jb250aWcodnBmZV9kZXYtPmN1cl9mcm0pOworCQkJCWFkZHIgKz0gdnBmZV9kZXYtPmZpZWxkX29mZjsKKwkJCQljY2RjX2Rldi0+aHdfb3BzLnNldGZiYWRkcihhZGRyKTsKKwkJCX0KKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCQkvKgorCQkgKiBpZiBvbmUgZmllbGQgaXMganVzdCBiZWluZyBjYXB0dXJlZCBjb25maWd1cmUKKwkJICogdGhlIG5leHQgZnJhbWUgZ2V0IHRoZSBuZXh0IGZyYW1lIGZyb20gdGhlIGVtcHR5CisJCSAqIHF1ZXVlIGlmIG5vIGZyYW1lIGlzIGF2YWlsYWJsZSBob2xkIG9uIHRvIHRoZQorCQkgKiBjdXJyZW50IGJ1ZmZlcgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZ2cGZlX2Rldi0+ZG1hX3F1ZXVlX2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoJnZwZmVfZGV2LT5kbWFfcXVldWUpICYmCisJCSAgICB2cGZlX2Rldi0+Y3VyX2ZybSA9PSB2cGZlX2Rldi0+bmV4dF9mcm0pCisJCQl2cGZlX3NjaGVkdWxlX25leHRfYnVmZmVyKHZwZmVfZGV2KTsKKwkJc3Bpbl91bmxvY2soJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jayk7CisJfSBlbHNlIGlmIChmaWQgPT0gMCkgeworCQkvKgorCQkgKiBvdXQgb2Ygc3luYy4gUmVjb3ZlciBmcm9tIGFueSBoYXJkd2FyZSBvdXQtb2Ytc3luYy4KKwkJICogTWF5IGxvb3NlIG9uZSBmcmFtZQorCQkgKi8KKwkJdnBmZV9kZXYtPmZpZWxkX2lkID0gZmlkOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIHZkaW50MV9pc3IgLSBpc3IgaGFuZGxlciBmb3IgVklOVDEgaW50ZXJydXB0ICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdmRpbnQxX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IGRldl9pZDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAiXG5JbnNpZGUgdmRpbnQxX2lzci4uLlxuIik7CisKKwkvKiBpZiBzdHJlYW1pbmcgbm90IHN0YXJ0ZWQsIGRvbid0IGRvIGFueXRoaW5nICovCisJaWYgKCF2cGZlX2Rldi0+c3RhcnRlZCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJc3Bpbl9sb2NrKCZ2cGZlX2Rldi0+ZG1hX3F1ZXVlX2xvY2spOworCWlmICgodnBmZV9kZXYtPmZtdC5mbXQucGl4LmZpZWxkID09IFY0TDJfRklFTERfTk9ORSkgJiYKKwkgICAgIWxpc3RfZW1wdHkoJnZwZmVfZGV2LT5kbWFfcXVldWUpICYmCisJICAgIHZwZmVfZGV2LT5jdXJfZnJtID09IHZwZmVfZGV2LT5uZXh0X2ZybSkKKwkJdnBmZV9zY2hlZHVsZV9uZXh0X2J1ZmZlcih2cGZlX2Rldik7CisJc3Bpbl91bmxvY2soJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB2cGZlX2RldGFjaF9pcnEoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwllbnVtIGNjZGNfZnJtZm10IGZyYW1lX2Zvcm1hdDsKKworCWZyYW1lX2Zvcm1hdCA9IGNjZGNfZGV2LT5od19vcHMuZ2V0X2ZyYW1lX2Zvcm1hdCgpOworCWlmIChmcmFtZV9mb3JtYXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpCisJCWZyZWVfaXJxKElSUV9WRElOVDEsIHZwZmVfZGV2KTsKK30KKworc3RhdGljIGludCB2cGZlX2F0dGFjaF9pcnEoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwllbnVtIGNjZGNfZnJtZm10IGZyYW1lX2Zvcm1hdDsKKworCWZyYW1lX2Zvcm1hdCA9IGNjZGNfZGV2LT5od19vcHMuZ2V0X2ZyYW1lX2Zvcm1hdCgpOworCWlmIChmcmFtZV9mb3JtYXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKHZwZmVfZGV2LT5jY2RjX2lycTEsIHZkaW50MV9pc3IsCisJCQkJICAgIElSUUZfRElTQUJMRUQsICJ2cGZlX2NhcHR1cmUxIiwKKwkJCQkgICAgdnBmZV9kZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdnBmZV9zdG9wX2NjZGNfY2FwdHVyZTogc3RvcCBzdHJlYW1pbmcgaW4gY2NkYy9pc2lmICovCitzdGF0aWMgdm9pZCB2cGZlX3N0b3BfY2NkY19jYXB0dXJlKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJdnBmZV9kZXYtPnN0YXJ0ZWQgPSAwOworCWNjZGNfZGV2LT5od19vcHMuZW5hYmxlKDApOworCWlmIChjY2RjX2Rldi0+aHdfb3BzLmVuYWJsZV9vdXRfdG9fc2RyYW0pCisJCWNjZGNfZGV2LT5od19vcHMuZW5hYmxlX291dF90b19zZHJhbSgwKTsKK30KKworLyoKKyAqIHZwZmVfcmVsZWFzZSA6IFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBidWZmZXIgcXVldWUsIGZyZWVzIHRoZQorICogYnVmZmVycyBhbmQgdGhlIHZwZmUgZmlsZSAgaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCWludCByZXQ7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcmVsZWFzZVxuIik7CisKKwkvKiBHZXQgdGhlIGRldmljZSBsb2NrICovCisJbXV0ZXhfbG9jaygmdnBmZV9kZXYtPmxvY2spOworCS8qIGlmIHRoaXMgaW5zdGFuY2UgaXMgZG9pbmcgSU8gKi8KKwlpZiAoZmgtPmlvX2FsbG93ZWQpIHsKKwkJaWYgKHZwZmVfZGV2LT5zdGFydGVkKSB7CisJCQlzZGluZm8gPSB2cGZlX2Rldi0+Y3VycmVudF9zdWJkZXY7CisJCQlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJCQkJCSBzZGluZm8tPmdycF9pZCwKKwkJCQkJCQkgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJCWlmIChyZXQgJiYgKHJldCAhPSAtRU5PSU9DVExDTUQpKQorCQkJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkJInN0cmVhbSBvZmYgZmFpbGVkIGluIHN1YmRldlxuIik7CisJCQl2cGZlX3N0b3BfY2NkY19jYXB0dXJlKHZwZmVfZGV2KTsKKwkJCXZwZmVfZGV0YWNoX2lycSh2cGZlX2Rldik7CisJCQl2aWRlb2J1Zl9zdHJlYW1vZmYoJnZwZmVfZGV2LT5idWZmZXJfcXVldWUpOworCQl9CisJCXZwZmVfZGV2LT5pb191c3JzID0gMDsKKwkJdnBmZV9kZXYtPm51bWJ1ZmZlcnMgPSBjb25maWdfcGFyYW1zLm51bWJ1ZmZlcnM7CisJfQorCisJLyogRGVjcmVtZW50IGRldmljZSB1c3JzIGNvdW50ZXIgKi8KKwl2cGZlX2Rldi0+dXNycy0tOworCS8qIENsb3NlIHRoZSBwcmlvcml0eSAqLworCXY0bDJfcHJpb19jbG9zZSgmdnBmZV9kZXYtPnByaW8sICZmaC0+cHJpbyk7CisJLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBmaWxlIGhhbmRsZSAqLworCWlmICghdnBmZV9kZXYtPnVzcnMpIHsKKwkJdnBmZV9kZXYtPmluaXRpYWxpemVkID0gMDsKKwkJaWYgKGNjZGNfZGV2LT5od19vcHMuY2xvc2UpCisJCQljY2RjX2Rldi0+aHdfb3BzLmNsb3NlKHZwZmVfZGV2LT5wZGV2KTsKKwkJbW9kdWxlX3B1dChjY2RjX2Rldi0+b3duZXIpOworCX0KKwltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCS8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCB0byBmaWxlIGhhbmRsZSBvYmplY3QgKi8KKwlrZnJlZShmaCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGZlX21tYXAgOiBJdCBpcyB1c2VkIHRvIG1hcCBrZXJuZWwgc3BhY2UgYnVmZmVycworICogaW50byB1c2VyIHNwYWNlcworICovCitzdGF0aWMgaW50IHZwZmVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJLyogR2V0IHRoZSBkZXZpY2Ugb2JqZWN0IGFuZCBmaWxlIGhhbmRsZSBvYmplY3QgKi8KKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9tbWFwXG4iKTsKKworCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcigmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZSwgdm1hKTsKK30KKworLyoKKyAqIHZwZmVfcG9sbDogSXQgaXMgdXNlZCBmb3Igc2VsZWN0L3BvbGwgc3lzdGVtIGNhbGwKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB2cGZlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcG9sbFxuIik7CisKKwlpZiAodnBmZV9kZXYtPnN0YXJ0ZWQpCisJCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLAorCQkJCQkgICAgJnZwZmVfZGV2LT5idWZmZXJfcXVldWUsIHdhaXQpOworCXJldHVybiAwOworfQorCisvKiB2cGZlIGNhcHR1cmUgZHJpdmVyIGZpbGUgb3BlcmF0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2cGZlX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2cGZlX29wZW4sCisJLnJlbGVhc2UgPSB2cGZlX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gdmlkZW9faW9jdGwyLAorCS5tbWFwID0gdnBmZV9tbWFwLAorCS5wb2xsID0gdnBmZV9wb2xsCit9OworCisvKgorICogdnBmZV9jaGVja19mb3JtYXQoKQorICogVGhpcyBmdW5jdGlvbiBhZGp1c3QgdGhlIGlucHV0IHBpeGVsIGZvcm1hdCBhcyBwZXIgaGFyZHdhcmUKKyAqIGNhcGFiaWxpdGllcyBhbmQgdXBkYXRlIHRoZSBzYW1lIGluIHBpeGZtdC4KKyAqIEZvbGxvd2luZyBhbGdvcml0aG0gdXNlZCA6LQorICoKKyAqCUlmIGdpdmVuIHBpeGZvcm1hdCBpcyBub3QgaW4gdGhlIHZwZmUgbGlzdCBvZiBwaXggZm9ybWF0cyBvciBub3QKKyAqCXN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUsIGN1cnJlbnQgdmFsdWUgb2YgcGl4Zm9ybWF0IGluIHRoZSBkZXZpY2UKKyAqCWlzIHVzZWQKKyAqCUlmIGdpdmVuIGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gY3VycmVudCBmaWVsZCBpcyB1c2VkLiBJZiBmaWVsZAorICoJaXMgZGlmZmVyZW50IGZyb20gY3VycmVudCwgdGhlbiBpdCBpcyBtYXRjaGVkIHdpdGggdGhhdCBmcm9tIHN1YiBkZXZpY2UuCisgKglNaW5pbXVtIGhlaWdodCBpcyAyIGxpbmVzIGZvciBpbnRlcmxhY2VkIG9yIHRiIGZpZWxkIGFuZCAxIGxpbmUgZm9yCisgKglwcm9ncmVzc2l2ZS4gTWF4aW11bSBoZWlnaHQgaXMgY2xhbXBlZCB0byBhY3RpdmUgYWN0aXZlIGxpbmVzIG9mIHNjYW4KKyAqCU1pbmltdW0gd2lkdGggaXMgMzIgYnl0ZXMgaW4gbWVtb3J5IGFuZCB3aWR0aCBpcyBjbGFtcGVkIHRvIGFjdGl2ZQorICoJcGl4ZWxzIG9mIHNjYW4uCisgKglieXRlc3BlcmxpbmUgaXMgYSBtdWx0aXBsZSBvZiAzMi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2cGZlX3BpeGVsX2Zvcm1hdCAqCisJdnBmZV9jaGVja19mb3JtYXQoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiwKKwkJCSAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10KQoreworCXUzMiBtaW5faGVpZ2h0ID0gMSwgbWluX3dpZHRoID0gMzIsIG1heF93aWR0aCwgbWF4X2hlaWdodDsKKwljb25zdCBzdHJ1Y3QgdnBmZV9waXhlbF9mb3JtYXQgKnZwZmVfcGl4X2ZtdDsKKwl1MzIgcGl4OworCWludCB0ZW1wLCBmb3VuZDsKKworCXZwZmVfcGl4X2ZtdCA9IHZwZmVfbG9va3VwX3BpeF9mb3JtYXQocGl4Zm10LT5waXhlbGZvcm1hdCk7CisJaWYgKE5VTEwgPT0gdnBmZV9waXhfZm10KSB7CisJCS8qCisJCSAqIHVzZSBjdXJyZW50IHBpeGVsIGZvcm1hdCBpbiB0aGUgdnBmZSBkZXZpY2UuIFdlCisJCSAqIHdpbGwgZmluZCB0aGlzIHBpeCBmb3JtYXQgaW4gdGhlIHRhYmxlCisJCSAqLworCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gdnBmZV9kZXYtPmZtdC5mbXQucGl4LnBpeGVsZm9ybWF0OworCQl2cGZlX3BpeF9mbXQgPSB2cGZlX2xvb2t1cF9waXhfZm9ybWF0KHBpeGZtdC0+cGl4ZWxmb3JtYXQpOworCX0KKworCS8qIGNoZWNrIGlmIGh3IHN1cHBvcnRzIGl0ICovCisJdGVtcCA9IDA7CisJZm91bmQgPSAwOworCXdoaWxlIChjY2RjX2Rldi0+aHdfb3BzLmVudW1fcGl4KCZwaXgsIHRlbXApID49IDApIHsKKwkJaWYgKHZwZmVfcGl4X2ZtdC0+Zm10ZGVzYy5waXhlbGZvcm1hdCA9PSBwaXgpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXRlbXArKzsKKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCS8qIHVzZSBjdXJyZW50IHBpeGVsIGZvcm1hdCAqLworCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gdnBmZV9kZXYtPmZtdC5mbXQucGl4LnBpeGVsZm9ybWF0OworCQkvKgorCQkgKiBTaW5jZSB0aGlzIGlzIGN1cnJlbnRseSB1c2VkIGluIHRoZSB2cGZlIGRldmljZSwgd2UKKwkJICogd2lsbCBmaW5kIHRoaXMgcGl4IGZvcm1hdCBpbiB0aGUgdGFibGUKKwkJICovCisJCXZwZmVfcGl4X2ZtdCA9IHZwZmVfbG9va3VwX3BpeF9mb3JtYXQocGl4Zm10LT5waXhlbGZvcm1hdCk7CisJfQorCisJLyogY2hlY2sgd2hhdCBmaWVsZCBmb3JtYXQgaXMgc3VwcG9ydGVkICovCisJaWYgKHBpeGZtdC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpIHsKKwkJLyogaWYgZmllbGQgaXMgYW55LCB1c2UgY3VycmVudCB2YWx1ZSBhcyBkZWZhdWx0ICovCisJCXBpeGZtdC0+ZmllbGQgPSB2cGZlX2Rldi0+Zm10LmZtdC5waXguZmllbGQ7CisJfQorCisJLyoKKwkgKiBpZiBmaWVsZCBpcyBub3Qgc2FtZSBhcyBjdXJyZW50IGZpZWxkIGluIHRoZSB2cGZlIGRldmljZQorCSAqIHRyeSBtYXRjaGluZyB0aGUgZmllbGQgd2l0aCB0aGUgc3ViIGRldmljZSBmaWVsZAorCSAqLworCWlmICh2cGZlX2Rldi0+Zm10LmZtdC5waXguZmllbGQgIT0gcGl4Zm10LT5maWVsZCkgeworCQkvKgorCQkgKiBJZiBmaWVsZCB2YWx1ZSBpcyBub3QgaW4gdGhlIHN1cHBvcnRlZCBmaWVsZHMsIHVzZSBjdXJyZW50CisJCSAqIGZpZWxkIHVzZWQgaW4gdGhlIGRldmljZSBhcyBkZWZhdWx0CisJCSAqLworCQlzd2l0Y2ggKHBpeGZtdC0+ZmllbGQpIHsKKwkJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCWNhc2UgVjRMMl9GSUVMRF9TRVFfVEI6CisJCQkvKiBpZiBzdWIgZGV2aWNlIGlzIHN1cHBvcnRpbmcgcHJvZ3Jlc3NpdmUsIHVzZSB0aGF0ICovCisJCQlpZiAoIXZwZmVfZGV2LT5zdGRfaW5mby5mcmFtZV9mb3JtYXQpCisJCQkJcGl4Zm10LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfRklFTERfTk9ORToKKwkJCWlmICh2cGZlX2Rldi0+c3RkX2luZm8uZnJhbWVfZm9ybWF0KQorCQkJCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogdXNlIGN1cnJlbnQgZmllbGQgYXMgZGVmYXVsdCAqLworCQkJcGl4Zm10LT5maWVsZCA9IHZwZmVfZGV2LT5mbXQuZm10LnBpeC5maWVsZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogTm93IGFkanVzdCBpbWFnZSByZXNvbHV0aW9ucyBzdXBwb3J0ZWQgKi8KKwlpZiAocGl4Zm10LT5maWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHwKKwkgICAgcGl4Zm10LT5maWVsZCA9PSBWNEwyX0ZJRUxEX1NFUV9UQikKKwkJbWluX2hlaWdodCA9IDI7CisKKwltYXhfd2lkdGggPSB2cGZlX2Rldi0+c3RkX2luZm8uYWN0aXZlX3BpeGVsczsKKwltYXhfaGVpZ2h0ID0gdnBmZV9kZXYtPnN0ZF9pbmZvLmFjdGl2ZV9saW5lczsKKwltaW5fd2lkdGggLz0gdnBmZV9waXhfZm10LT5icHA7CisKKwl2NGwyX2luZm8oJnZwZmVfZGV2LT52NGwyX2RldiwgIndpZHRoID0gJWQsIGhlaWdodCA9ICVkLCBicHAgPSAlZFxuIiwKKwkJICBwaXhmbXQtPndpZHRoLCBwaXhmbXQtPmhlaWdodCwgdnBmZV9waXhfZm10LT5icHApOworCisJcGl4Zm10LT53aWR0aCA9IGNsYW1wKChwaXhmbXQtPndpZHRoKSwgbWluX3dpZHRoLCBtYXhfd2lkdGgpOworCXBpeGZtdC0+aGVpZ2h0ID0gY2xhbXAoKHBpeGZtdC0+aGVpZ2h0KSwgbWluX2hlaWdodCwgbWF4X2hlaWdodCk7CisKKwkvKiBJZiBpbnRlcmxhY2VkLCBhZGp1c3QgaGVpZ2h0IHRvIGJlIGEgbXVsdGlwbGUgb2YgMiAqLworCWlmIChwaXhmbXQtPmZpZWxkID09IFY0TDJfRklFTERfSU5URVJMQUNFRCkKKwkJcGl4Zm10LT5oZWlnaHQgJj0gKH4xKTsKKwkvKgorCSAqIHJlY2FsY3VsYXRlIGJ5dGVzcGVybGluZSBhbmQgc2l6ZWltYWdlIHNpbmNlIHdpZHRoCisJICogYW5kIGhlaWdodCBtaWdodCBoYXZlIGNoYW5nZWQKKwkgKi8KKwlwaXhmbXQtPmJ5dGVzcGVybGluZSA9ICgoKHBpeGZtdC0+d2lkdGggKiB2cGZlX3BpeF9mbXQtPmJwcCkgKyAzMSkKKwkJCQkmIH4zMSk7CisJaWYgKHBpeGZtdC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX05WMTIpCisJCXBpeGZtdC0+c2l6ZWltYWdlID0KKwkJCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lICogcGl4Zm10LT5oZWlnaHQgKworCQkJKChwaXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0KSA+PiAxKTsKKwllbHNlCisJCXBpeGZtdC0+c2l6ZWltYWdlID0gcGl4Zm10LT5ieXRlc3BlcmxpbmUgKiBwaXhmbXQtPmhlaWdodDsKKworCXY0bDJfaW5mbygmdnBmZV9kZXYtPnY0bDJfZGV2LCAiYWRqdXN0ZWQgd2lkdGggPSAlZCwgaGVpZ2h0ID0iCisJCSAiICVkLCBicHAgPSAlZCwgYnl0ZXNwZXJsaW5lID0gJWQsIHNpemVpbWFnZSA9ICVkXG4iLAorCQkgcGl4Zm10LT53aWR0aCwgcGl4Zm10LT5oZWlnaHQsIHZwZmVfcGl4X2ZtdC0+YnBwLAorCQkgcGl4Zm10LT5ieXRlc3BlcmxpbmUsIHBpeGZtdC0+c2l6ZWltYWdlKTsKKwlyZXR1cm4gdnBmZV9waXhfZm10OworfQorCitzdGF0aWMgaW50IHZwZmVfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9xdWVyeWNhcFxuIik7CisKKwljYXAtPnZlcnNpb24gPSBWUEZFX0NBUFRVUkVfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwlzdHJsY3B5KGNhcC0+ZHJpdmVyLCBDQVBUVVJFX0RSVl9OQU1FLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKKwlzdHJsY3B5KGNhcC0+YnVzX2luZm8sICJWUEZFIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgdnBmZV9kZXYtPmNmZy0+Y2FyZF9uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXQgPSAwOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2dfZm10X3ZpZF9jYXBcbiIpOworCS8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdCAqLworCSpmbXQgPSB2cGZlX2Rldi0+Zm10OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJY29uc3Qgc3RydWN0IHZwZmVfcGl4ZWxfZm9ybWF0ICpwaXhfZm10OworCWludCB0ZW1wX2luZGV4OworCXUzMiBwaXg7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfZW51bV9mbXRfdmlkX2NhcFxuIik7CisKKwlpZiAoY2NkY19kZXYtPmh3X29wcy5lbnVtX3BpeCgmcGl4LCBmbXQtPmluZGV4KSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgZm9ybWF0ICovCisJcGl4X2ZtdCA9IHZwZmVfbG9va3VwX3BpeF9mb3JtYXQocGl4KTsKKwlpZiAoTlVMTCAhPSBwaXhfZm10KSB7CisJCXRlbXBfaW5kZXggPSBmbXQtPmluZGV4OworCQkqZm10ID0gcGl4X2ZtdC0+Zm10ZGVzYzsKKwkJZm10LT5pbmRleCA9IHRlbXBfaW5kZXg7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2cGZlX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJY29uc3Qgc3RydWN0IHZwZmVfcGl4ZWxfZm9ybWF0ICpwaXhfZm10czsKKwlpbnQgcmV0ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9zX2ZtdF92aWRfY2FwXG4iKTsKKworCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAodnBmZV9kZXYtPnN0YXJ0ZWQpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIlN0cmVhbWluZyBpcyBzdGFydGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBDaGVjayBmb3IgdmFsaWQgZnJhbWUgZm9ybWF0ICovCisJcGl4X2ZtdHMgPSB2cGZlX2NoZWNrX2Zvcm1hdCh2cGZlX2RldiwgJmZtdC0+Zm10LnBpeCk7CisKKwlpZiAoTlVMTCA9PSBwaXhfZm10cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdG9yZSB0aGUgcGl4ZWwgZm9ybWF0IGluIHRoZSBkZXZpY2UgIG9iamVjdCAqLworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnBmZV9kZXYtPmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBGaXJzdCBkZXRhY2ggYW55IElSUSBpZiBjdXJyZW50bHkgYXR0YWNoZWQgKi8KKwl2cGZlX2RldGFjaF9pcnEodnBmZV9kZXYpOworCXZwZmVfZGV2LT5mbXQgPSAqZm10OworCS8qIHNldCBpbWFnZSBjYXB0dXJlIHBhcmFtZXRlcnMgaW4gdGhlIGNjZGMgKi8KKwlyZXQgPSB2cGZlX2NvbmZpZ19jY2RjX2ltYWdlX2Zvcm1hdCh2cGZlX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGZlX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwljb25zdCBzdHJ1Y3QgdnBmZV9waXhlbF9mb3JtYXQgKnBpeF9mbXRzOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3RyeV9mbXRfdmlkX2NhcFxuIik7CisKKwlwaXhfZm10cyA9IHZwZmVfY2hlY2tfZm9ybWF0KHZwZmVfZGV2LCAmZi0+Zm10LnBpeCk7CisJaWYgKE5VTEwgPT0gcGl4X2ZtdHMpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKgorICogdnBmZV9nZXRfc3ViZGV2X2lucHV0X2luZGV4IC0gR2V0IHN1YmRldiBpbmRleCBhbmQgc3ViZGV2IGlucHV0IGluZGV4IGZvciBhCisgKiBnaXZlbiBhcHAgaW5wdXQgaW5kZXgKKyAqLworc3RhdGljIGludCB2cGZlX2dldF9zdWJkZXZfaW5wdXRfaW5kZXgoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiwKKwkJCQkJaW50ICpzdWJkZXZfaW5kZXgsCisJCQkJCWludCAqc3ViZGV2X2lucHV0X2luZGV4LAorCQkJCQlpbnQgYXBwX2lucHV0X2luZGV4KQoreworCXN0cnVjdCB2cGZlX2NvbmZpZyAqY2ZnID0gdnBmZV9kZXYtPmNmZzsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCWludCBpLCBqID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9zdWJkZXZzOyBpKyspIHsKKwkJc2RpbmZvID0gJmNmZy0+c3ViX2RldnNbaV07CisJCWlmIChhcHBfaW5wdXRfaW5kZXggPCAoaiArIHNkaW5mby0+bnVtX2lucHV0cykpIHsKKwkJCSpzdWJkZXZfaW5kZXggPSBpOworCQkJKnN1YmRldl9pbnB1dF9pbmRleCA9IGFwcF9pbnB1dF9pbmRleCAtIGo7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlqICs9IHNkaW5mby0+bnVtX2lucHV0czsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiB2cGZlX2dldF9hcHBfaW5wdXQgLSBHZXQgYXBwIGlucHV0IGluZGV4IGZvciBhIGdpdmVuIHN1YmRldiBpbnB1dCBpbmRleAorICogZHJpdmVyIHN0b3JlcyB0aGUgaW5wdXQgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3ViIGRldmljZSBhbmQgdHJhbnNsYXRlIGl0CisgKiB3aGVuIGFwcGxpY2F0aW9uIHJlcXVlc3QgdGhlIGN1cnJlbnQgaW5wdXQKKyAqLworc3RhdGljIGludCB2cGZlX2dldF9hcHBfaW5wdXRfaW5kZXgoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiwKKwkJCQkgICAgaW50ICphcHBfaW5wdXRfaW5kZXgpCit7CisJc3RydWN0IHZwZmVfY29uZmlnICpjZmcgPSB2cGZlX2Rldi0+Y2ZnOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX3N1YmRldnM7IGkrKykgeworCQlzZGluZm8gPSAmY2ZnLT5zdWJfZGV2c1tpXTsKKwkJaWYgKCFzdHJjbXAoc2RpbmZvLT5uYW1lLCB2cGZlX2Rldi0+Y3VycmVudF9zdWJkZXYtPm5hbWUpKSB7CisJCQlpZiAodnBmZV9kZXYtPmN1cnJlbnRfaW5wdXQgPj0gc2RpbmZvLT5udW1faW5wdXRzKQorCQkJCXJldHVybiAtMTsKKwkJCSphcHBfaW5wdXRfaW5kZXggPSBqICsgdnBmZV9kZXYtPmN1cnJlbnRfaW5wdXQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlqICs9IHNkaW5mby0+bnVtX2lucHV0czsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IHN1YmRldiwgaW5kZXggOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2VudW1faW5wdXRcbiIpOworCisJaWYgKHZwZmVfZ2V0X3N1YmRldl9pbnB1dF9pbmRleCh2cGZlX2RldiwKKwkJCQkJJnN1YmRldiwKKwkJCQkJJmluZGV4LAorCQkJCQlpbnAtPmluZGV4KSA8IDApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgImlucHV0IGluZm9ybWF0aW9uIG5vdCBmb3VuZCIKKwkJCSAiIGZvciB0aGUgc3ViZGV2XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNkaW5mbyA9ICZ2cGZlX2Rldi0+Y2ZnLT5zdWJfZGV2c1tzdWJkZXZdOworCW1lbWNweShpbnAsICZzZGluZm8tPmlucHV0c1tpbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwZmVfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppbmRleCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9nX2lucHV0XG4iKTsKKworCXJldHVybiB2cGZlX2dldF9hcHBfaW5wdXRfaW5kZXgodnBmZV9kZXYsIGluZGV4KTsKK30KKworCitzdGF0aWMgaW50IHZwZmVfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IHN1YmRldl9pbmRleCwgaW5wX2luZGV4OworCXN0cnVjdCB2cGZlX3JvdXRlICpyb3V0ZTsKKwl1MzIgaW5wdXQgPSAwLCBvdXRwdXQgPSAwOworCWludCByZXQgPSAtRUlOVkFMOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3NfaW5wdXRcbiIpOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2cGZlX2Rldi0+bG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQgcmV0dXJuIGRldmljZSBidXN5CisJICogZXJyb3IKKwkgKi8KKwlpZiAodnBmZV9kZXYtPnN0YXJ0ZWQpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIlN0cmVhbWluZyBpcyBvblxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKworCWlmICh2cGZlX2dldF9zdWJkZXZfaW5wdXRfaW5kZXgodnBmZV9kZXYsCisJCQkJCSZzdWJkZXZfaW5kZXgsCisJCQkJCSZpbnBfaW5kZXgsCisJCQkJCWluZGV4KSA8IDApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgImludmFsaWQgaW5wdXQgaW5kZXhcbiIpOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQorCisJc2RpbmZvID0gJnZwZmVfZGV2LT5jZmctPnN1Yl9kZXZzW3N1YmRldl9pbmRleF07CisJcm91dGUgPSAmc2RpbmZvLT5yb3V0ZXNbaW5wX2luZGV4XTsKKwlpZiAocm91dGUgJiYgc2RpbmZvLT5jYW5fcm91dGUpIHsKKwkJaW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisJCW91dHB1dCA9IHJvdXRlLT5vdXRwdXQ7CisJfQorCisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwZmVfZGV2LT52NGwyX2Rldiwgc2RpbmZvLT5ncnBfaWQsCisJCQkJCSB2aWRlbywgc19yb3V0aW5nLCBpbnB1dCwgb3V0cHV0LCAwKTsKKworCWlmIChyZXQpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSJ2cGZlX2RvaW9jdGw6ZXJyb3IgaW4gc2V0dGluZyBpbnB1dCBpbiBkZWNvZGVyXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKwl2cGZlX2Rldi0+Y3VycmVudF9zdWJkZXYgPSBzZGluZm87CisJdnBmZV9kZXYtPmN1cnJlbnRfaW5wdXQgPSBpbmRleDsKKwl2cGZlX2Rldi0+c3RkX2luZGV4ID0gMDsKKworCS8qIHNldCB0aGUgYnVzL2ludGVyZmFjZSBwYXJhbWV0ZXIgZm9yIHRoZSBzdWIgZGV2aWNlIGluIGNjZGMgKi8KKwlyZXQgPSBjY2RjX2Rldi0+aHdfb3BzLnNldF9od19pZl9wYXJhbXMoJnNkaW5mby0+Y2NkY19pZl9wYXJhbXMpOworCWlmIChyZXQpCisJCWdvdG8gdW5sb2NrX291dDsKKworCS8qIHNldCB0aGUgZGVmYXVsdCBpbWFnZSBwYXJhbWV0ZXJzIGluIHRoZSBkZXZpY2UgKi8KKwlyZXQgPSB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQodnBmZV9kZXYsCisJCQkJJnZwZmVfc3RhbmRhcmRzW3ZwZmVfZGV2LT5zdGRfaW5kZXhdLnN0ZF9pZCk7Cit1bmxvY2tfb3V0OgorCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCWludCByZXQgPSAwOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3F1ZXJ5c3RkXG4iKTsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnBmZV9kZXYtPmxvY2spOworCXNkaW5mbyA9IHZwZmVfZGV2LT5jdXJyZW50X3N1YmRldjsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qIENhbGwgcXVlcnlzdGQgZnVuY3Rpb24gb2YgZGVjb2RlciBkZXZpY2UgKi8KKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCBzZGluZm8tPmdycF9pZCwKKwkJCQkJIHZpZGVvLCBxdWVyeXN0ZCwgc3RkX2lkKTsKKwltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlpbnQgcmV0ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9zX3N0ZFxuIik7CisKKwkvKiBDYWxsIGRlY29kZXIgZHJpdmVyIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3RhbmRhcmQgKi8KKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZwZmVfZGV2LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2RpbmZvID0gdnBmZV9kZXYtPmN1cnJlbnRfc3ViZGV2OworCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkLCByZXR1cm4gZGV2aWNlIGJ1c3kgZXJyb3IgKi8KKwlpZiAodnBmZV9kZXYtPnN0YXJ0ZWQpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgInN0cmVhbWluZyBpcyBzdGFydGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQorCisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwZmVfZGV2LT52NGwyX2Rldiwgc2RpbmZvLT5ncnBfaWQsCisJCQkJCSBjb3JlLCBzX3N0ZCwgKnN0ZF9pZCk7CisJaWYgKHJldCA8IDApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkZhaWxlZCB0byBzZXQgc3RhbmRhcmRcbiIpOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQorCXJldCA9IHZwZmVfY29uZmlnX2ltYWdlX2Zvcm1hdCh2cGZlX2Rldiwgc3RkX2lkKTsKKwordW5sb2NrX291dDoKKwltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfZ19zdGRcbiIpOworCisJKnN0ZF9pZCA9IHZwZmVfc3RhbmRhcmRzW3ZwZmVfZGV2LT5zdGRfaW5kZXhdLnN0ZF9pZDsKKwlyZXR1cm4gMDsKK30KKy8qCisgKiAgVmlkZW9idWYgb3BlcmF0aW9ucworICovCitzdGF0aWMgaW50IHZwZmVfdmlkZW9idWZfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQl1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkJCXVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgdnBmZV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBmaC0+dnBmZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfYnVmZmVyX3NldHVwXG4iKTsKKwkqc2l6ZSA9IGNvbmZpZ19wYXJhbXMuZGV2aWNlX2J1ZnNpemU7CisKKwlpZiAoKmNvdW50IDwgY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVycykKKwkJKmNvdW50ID0gY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVyczsKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGZlX3ZpZGVvYnVmX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCQllbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHZwZmVfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gZmgtPnZwZmVfZGV2OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2J1ZmZlcl9wcmVwYXJlXG4iKTsKKworCS8qIElmIGJ1ZmZlciBpcyBub3QgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgKi8KKwlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSB2Yi0+c3RhdGUpIHsKKwkJdmItPndpZHRoID0gdnBmZV9kZXYtPmZtdC5mbXQucGl4LndpZHRoOworCQl2Yi0+aGVpZ2h0ID0gdnBmZV9kZXYtPmZtdC5mbXQucGl4LmhlaWdodDsKKwkJdmItPnNpemUgPSB2cGZlX2Rldi0+Zm10LmZtdC5waXguc2l6ZWltYWdlOworCQl2Yi0+ZmllbGQgPSBmaWVsZDsKKwl9CisJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZwZmVfdmlkZW9idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwkvKiBHZXQgdGhlIGZpbGUgaGFuZGxlIG9iamVjdCBhbmQgZGV2aWNlIG9iamVjdCAqLworCXN0cnVjdCB2cGZlX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IGZoLT52cGZlX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2J1ZmZlcl9xdWV1ZVxuIik7CisKKwkvKiBhZGQgdGhlIGJ1ZmZlciB0byB0aGUgRE1BIHF1ZXVlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnZwZmVfZGV2LT5kbWFfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOworCisJLyogQ2hhbmdlIHN0YXRlIG9mIHRoZSBidWZmZXIgKi8KKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHZwZmVfdmlkZW9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZwZmVfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gZmgtPnZwZmVfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfdmlkZW9idWZfcmVsZWFzZVxuIik7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZmx1c2ggdGhlIGJ1ZmZlciBmcm9tIHRoZSBkbWEgcXVldWUgc2luY2UKKwkgKiB0aGV5IGFyZSBkZS1hbGxvY2F0ZWQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnBmZV9kZXYtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJSU5JVF9MSVNUX0hFQUQoJnZwZmVfZGV2LT5kbWFfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOworCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHZwZmVfdmlkZW9idWZfcW9wcyA9IHsKKwkuYnVmX3NldHVwICAgICAgPSB2cGZlX3ZpZGVvYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IHZwZmVfdmlkZW9idWZfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlICAgICAgPSB2cGZlX3ZpZGVvYnVmX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgICA9IHZwZmVfdmlkZW9idWZfcmVsZWFzZSwKK307CisKKy8qCisgKiB2cGZlX3JlcWJ1ZnMuIGN1cnJlbnRseSBzdXBwb3J0IFJFUUJVRiBvbmx5IG9uY2Ugb3BlbmluZworICogdGhlIGRldmljZS4KKyAqLworc3RhdGljIGludCB2cGZlX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxX2J1ZikKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdnBmZV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcmVxYnVmc1xuIik7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IHJlcV9idWYtPnR5cGUpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmZmVyIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoVjRMMl9NRU1PUllfVVNFUlBUUiA9PSByZXFfYnVmLT5tZW1vcnkpIHsKKwkJLyogd2UgZG9uJ3Qgc3VwcG9ydCB1c2VyIHB0ciBJTyAqLworCQl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcmVxYnVmczoiCisJCQkgIiBVU0VSUFRSIElPIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gIC1FSU5WQUw7CisJfQorCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2cGZlX2Rldi0+bG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh2cGZlX2Rldi0+aW9fdXNycyAhPSAwKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJPbmx5IG9uZSBJTyB1c2VyIGFsbG93ZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisKKwl2cGZlX2Rldi0+bWVtb3J5ID0gcmVxX2J1Zi0+bWVtb3J5OworCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdCgmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZSwKKwkJCQkmdnBmZV92aWRlb2J1Zl9xb3BzLAorCQkJCU5VTEwsCisJCQkJJnZwZmVfZGV2LT5pcnFsb2NrLAorCQkJCXJlcV9idWYtPnR5cGUsCisJCQkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LmZpZWxkLAorCQkJCXNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwKKwkJCQlmaCk7CisKKwlmaC0+aW9fYWxsb3dlZCA9IDE7CisJdnBmZV9kZXYtPmlvX3VzcnMgPSAxOworCUlOSVRfTElTVF9IRUFEKCZ2cGZlX2Rldi0+ZG1hX3F1ZXVlKTsKKwlyZXQgPSB2aWRlb2J1Zl9yZXFidWZzKCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlLCByZXFfYnVmKTsKK3VubG9ja19vdXQ6CisJbXV0ZXhfdW5sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGZlX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3F1ZXJ5YnVmXG4iKTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gYnVmLT50eXBlKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGJ1ZiB0eXBlXG4iKTsKKwkJcmV0dXJuICAtRUlOVkFMOworCX0KKworCWlmICh2cGZlX2Rldi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIENhbGwgdmlkZW9idWZfcXVlcnlidWYgdG8gZ2V0IGluZm9ybWF0aW9uICovCisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlLCBidWYpOworfQorCitzdGF0aWMgaW50IHZwZmVfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJICAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3FidWZcbiIpOworCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSBwLT50eXBlKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGJ1ZiB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGZpbGUgaGFuZGxlIGlzIG5vdCBhbGxvd2VkIHRvIGRvIElPLAorCSAqIHJldHVybiBlcnJvcgorCSAqLworCWlmICghZmgtPmlvX2FsbG93ZWQpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgImZoLT5pb19hbGxvd2VkXG4iKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlLCBwKTsKK30KKworc3RhdGljIGludCB2cGZlX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkgICAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9kcWJ1ZlxuIik7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGJ1Zi0+dHlwZSkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBidWYgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJnZwZmVfZGV2LT5idWZmZXJfcXVldWUsCisJCQkJICAgICAgYnVmLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKKy8qCisgKiB2cGZlX2NhbGN1bGF0ZV9vZmZzZXRzIDogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGJ1ZmZlcnMgb2Zmc2V0CisgKiBmb3IgdG9wIGFuZCBib3R0b20gZmllbGQKKyAqLworc3RhdGljIHZvaWQgdnBmZV9jYWxjdWxhdGVfb2Zmc2V0cyhzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQoreworCXN0cnVjdCB2NGwyX3JlY3QgaW1hZ2Vfd2luOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2NhbGN1bGF0ZV9vZmZzZXRzXG4iKTsKKworCWNjZGNfZGV2LT5od19vcHMuZ2V0X2ltYWdlX3dpbmRvdygmaW1hZ2Vfd2luKTsKKwl2cGZlX2Rldi0+ZmllbGRfb2ZmID0gaW1hZ2Vfd2luLmhlaWdodCAqIGltYWdlX3dpbi53aWR0aDsKK30KKworLyogdnBmZV9zdGFydF9jY2RjX2NhcHR1cmU6IHN0YXJ0IHN0cmVhbWluZyBpbiBjY2RjL2lzaWYgKi8KK3N0YXRpYyB2b2lkIHZwZmVfc3RhcnRfY2NkY19jYXB0dXJlKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJY2NkY19kZXYtPmh3X29wcy5lbmFibGUoMSk7CisJaWYgKGNjZGNfZGV2LT5od19vcHMuZW5hYmxlX291dF90b19zZHJhbSkKKwkJY2NkY19kZXYtPmh3X29wcy5lbmFibGVfb3V0X3RvX3NkcmFtKDEpOworCXZwZmVfZGV2LT5zdGFydGVkID0gMTsKK30KKworLyoKKyAqIHZwZmVfc3RyZWFtb24uIEFzc3VtZSB0aGUgRE1BIHF1ZXVlIGlzIG5vdCBlbXB0eS4KKyAqIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvIGNhbGwgUUJVRiBiZWZvcmUgY2FsbGluZworICogdGhpcyBpb2N0bC4gSWYgbm90LCBkcml2ZXIgcmV0dXJucyBlcnJvcgorICovCitzdGF0aWMgaW50IHZwZmVfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgZW51bSB2NGwyX2J1Zl90eXBlIGJ1Zl90eXBlKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgcmV0ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9zdHJlYW1vblxuIik7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGJ1Zl90eXBlKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGJ1ZiB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgZmlsZSBoYW5kbGUgaXMgbm90IGFsbG93ZWQgSU8sIHJldHVybiBlcnJvciAqLworCWlmICghZmgtPmlvX2FsbG93ZWQpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgImZoLT5pb19hbGxvd2VkXG4iKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJc2RpbmZvID0gdnBmZV9kZXYtPmN1cnJlbnRfc3ViZGV2OworCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsIHNkaW5mby0+Z3JwX2lkLAorCQkJCQl2aWRlbywgc19zdHJlYW0sIDEpOworCisJaWYgKHJldCAmJiAocmV0ICE9IC1FTk9JT0NUTENNRCkpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgInN0cmVhbSBvbiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgYnVmZmVyIHF1ZXVlIGlzIGVtcHR5LCByZXR1cm4gZXJyb3IgKi8KKwlpZiAobGlzdF9lbXB0eSgmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZS5zdHJlYW0pKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJidWZmZXIgcXVldWUgaXMgZW1wdHlcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBDYWxsIHZpZGVvYnVmX3N0cmVhbW9uIHRvIHN0YXJ0IHN0cmVhbWluZyAqIGluIHZpZGVvYnVmICovCisJcmV0ID0gdmlkZW9idWZfc3RyZWFtb24oJnZwZmVfZGV2LT5idWZmZXJfcXVldWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnBmZV9kZXYtPmxvY2spOworCWlmIChyZXQpCisJCWdvdG8gc3RyZWFtb2ZmOworCS8qIEdldCB0aGUgbmV4dCBmcmFtZSBmcm9tIHRoZSBidWZmZXIgcXVldWUgKi8KKwl2cGZlX2Rldi0+bmV4dF9mcm0gPSBsaXN0X2VudHJ5KHZwZmVfZGV2LT5kbWFfcXVldWUubmV4dCwKKwkJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgcXVldWUpOworCXZwZmVfZGV2LT5jdXJfZnJtID0gdnBmZV9kZXYtPm5leHRfZnJtOworCS8qIFJlbW92ZSBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlICovCisJbGlzdF9kZWwoJnZwZmVfZGV2LT5jdXJfZnJtLT5xdWV1ZSk7CisJLyogTWFyayBzdGF0ZSBvZiB0aGUgY3VycmVudCBmcmFtZSB0byBhY3RpdmUgKi8KKwl2cGZlX2Rldi0+Y3VyX2ZybS0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJLyogSW5pdGlhbGl6ZSBmaWVsZF9pZCBhbmQgc3RhcnRlZCBtZW1iZXIgKi8KKwl2cGZlX2Rldi0+ZmllbGRfaWQgPSAwOworCWFkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZwZmVfZGV2LT5jdXJfZnJtKTsKKworCS8qIENhbGN1bGF0ZSBmaWVsZCBvZmZzZXQgKi8KKwl2cGZlX2NhbGN1bGF0ZV9vZmZzZXRzKHZwZmVfZGV2KTsKKworCWlmICh2cGZlX2F0dGFjaF9pcnEodnBmZV9kZXYpIDwgMCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJICJFcnJvciBpbiBhdHRhY2hpbmcgaW50ZXJydXB0IGhhbmRsZVxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisJaWYgKGNjZGNfZGV2LT5od19vcHMuY29uZmlndXJlKCkgPCAwKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkgIkVycm9yIGluIGNvbmZpZ3VyaW5nIGNjZGNcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQorCWNjZGNfZGV2LT5od19vcHMuc2V0ZmJhZGRyKCh1bnNpZ25lZCBsb25nKShhZGRyKSk7CisJdnBmZV9zdGFydF9jY2RjX2NhcHR1cmUodnBmZV9kZXYpOworCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit1bmxvY2tfb3V0OgorCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworc3RyZWFtb2ZmOgorCXJldCA9IHZpZGVvYnVmX3N0cmVhbW9mZigmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGZlX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgZW51bSB2NGwyX2J1Zl90eXBlIGJ1Zl90eXBlKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCWludCByZXQgPSAwOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3N0cmVhbW9mZlxuIik7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGJ1Zl90eXBlKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGJ1ZiB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgaW8gaXMgYWxsb3dlZCBmb3IgdGhpcyBmaWxlIGhhbmRsZSwgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiZmgtPmlvX2FsbG93ZWRcbiIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwkvKiBJZiBzdHJlYW1pbmcgaXMgbm90IHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmICghdnBmZV9kZXYtPnN0YXJ0ZWQpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgImRldmljZSBzdGFydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2cGZlX2Rldi0+bG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZwZmVfc3RvcF9jY2RjX2NhcHR1cmUodnBmZV9kZXYpOworCXZwZmVfZGV0YWNoX2lycSh2cGZlX2Rldik7CisKKwlzZGluZm8gPSB2cGZlX2Rldi0+Y3VycmVudF9zdWJkZXY7CisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwZmVfZGV2LT52NGwyX2Rldiwgc2RpbmZvLT5ncnBfaWQsCisJCQkJCXZpZGVvLCBzX3N0cmVhbSwgMCk7CisKKwlpZiAocmV0ICYmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKSkKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgInN0cmVhbSBvZmYgZmFpbGVkIGluIHN1YmRldlxuIik7CisJcmV0ID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlKTsKKwltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3ApCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfY3JvcGNhcFxuIik7CisKKwlpZiAodnBmZV9kZXYtPnN0ZF9pbmRleCA+IEFSUkFZX1NJWkUodnBmZV9zdGFuZGFyZHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChjcm9wLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfY3JvcGNhcCkpOworCWNyb3AtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJY3JvcC0+Ym91bmRzLndpZHRoID0gY3JvcC0+ZGVmcmVjdC53aWR0aCA9CisJCXZwZmVfc3RhbmRhcmRzW3ZwZmVfZGV2LT5zdGRfaW5kZXhdLndpZHRoOworCWNyb3AtPmJvdW5kcy5oZWlnaHQgPSBjcm9wLT5kZWZyZWN0LmhlaWdodCA9CisJCXZwZmVfc3RhbmRhcmRzW3ZwZmVfZGV2LT5zdGRfaW5kZXhdLmhlaWdodDsKKwljcm9wLT5waXhlbGFzcGVjdCA9IHZwZmVfc3RhbmRhcmRzW3ZwZmVfZGV2LT5zdGRfaW5kZXhdLnBpeGVsYXNwZWN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwZmVfZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2dfY3JvcFxuIik7CisKKwljcm9wLT5jID0gdnBmZV9kZXYtPmNyb3A7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9zX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldCA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfc19jcm9wXG4iKTsKKworCWlmICh2cGZlX2Rldi0+c3RhcnRlZCkgeworCQkvKiBtYWtlIHN1cmUgc3RyZWFtaW5nIGlzIG5vdCBzdGFydGVkICovCisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkiQ2Fubm90IGNoYW5nZSBjcm9wIHdoZW4gc3RyZWFtaW5nIGlzIE9OXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZwZmVfZGV2LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNyb3AtPmMudG9wIDwgMCB8fCBjcm9wLT5jLmxlZnQgPCAwKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkiZG9lc24ndCBzdXBwb3J0IG5lZ2F0aXZlIHZhbHVlcyBmb3IgdG9wICYgbGVmdFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisKKwkvKiBhZGp1c3QgdGhlIHdpZHRoIHRvIDE2IHBpeGVsIGJvdW5kcnkgKi8KKwljcm9wLT5jLndpZHRoID0gKChjcm9wLT5jLndpZHRoICsgMTUpICYgfjB4Zik7CisKKwkvKiBtYWtlIHN1cmUgcGFyYW1ldGVycyBhcmUgdmFsaWQgKi8KKwlpZiAoKGNyb3AtPmMubGVmdCArIGNyb3AtPmMud2lkdGggPgorCQl2cGZlX2Rldi0+c3RkX2luZm8uYWN0aXZlX3BpeGVscykgfHwKKwkgICAgKGNyb3AtPmMudG9wICsgY3JvcC0+Yy5oZWlnaHQgPgorCQl2cGZlX2Rldi0+c3RkX2luZm8uYWN0aXZlX2xpbmVzKSkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiRXJyb3IgaW4gU19DUk9QIHBhcmFtc1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisJY2NkY19kZXYtPmh3X29wcy5zZXRfaW1hZ2Vfd2luZG93KCZjcm9wLT5jKTsKKwl2cGZlX2Rldi0+Zm10LmZtdC5waXgud2lkdGggPSBjcm9wLT5jLndpZHRoOworCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5oZWlnaHQgPSBjcm9wLT5jLmhlaWdodDsKKwl2cGZlX2Rldi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lID0KKwkJY2NkY19kZXYtPmh3X29wcy5nZXRfbGluZV9sZW5ndGgoKTsKKwl2cGZlX2Rldi0+Zm10LmZtdC5waXguc2l6ZWltYWdlID0KKwkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSAqCisJCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5oZWlnaHQ7CisJdnBmZV9kZXYtPmNyb3AgPSBjcm9wLT5jOwordW5sb2NrX291dDoKKwltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBsb25nIHZwZmVfcGFyYW1faGFuZGxlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJaW50IGNtZCwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldCA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcGFyYW1faGFuZGxlclxuIik7CisKKwlpZiAodnBmZV9kZXYtPnN0YXJ0ZWQpIHsKKwkJLyogb25seSBhbGxvd2VkIGlmIHN0cmVhbWluZyBpcyBub3Qgc3RhcnRlZCAqLworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiZGV2aWNlIGFscmVhZHkgc3RhcnRlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2cGZlX2Rldi0+bG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWUEZFX0NNRF9TX0NDRENfUkFXX1BBUkFNUzoKKwkJdjRsMl93YXJuKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkgICJWUEZFX0NNRF9TX0NDRENfUkFXX1BBUkFNUzogZXhwZXJpbWVudGFsIGlvY3RsXG4iKTsKKwkJcmV0ID0gY2NkY19kZXYtPmh3X29wcy5zZXRfcGFyYW1zKHBhcmFtKTsKKwkJaWYgKHJldCkgeworCQkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCQkiRXJyb3IgaW4gc2V0dGluZyBwYXJhbWV0ZXJzIGluIENDRENcbiIpOworCQkJZ290byB1bmxvY2tfb3V0OworCQl9CisJCWlmICh2cGZlX2dldF9jY2RjX2ltYWdlX2Zvcm1hdCh2cGZlX2RldiwgJnZwZmVfZGV2LT5mbXQpIDwgMCkgeworCQkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCQkiSW52YWxpZCBpbWFnZSBmb3JtYXQgYXQgQ0NEQ1xuIik7CisJCQlnb3RvIHVubG9ja19vdXQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9Cit1bmxvY2tfb3V0OgorCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKworLyogdnBmZSBjYXB0dXJlIGlvY3RsIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdnBmZV9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAkgPSB2cGZlX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICA9IHZwZmVfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2cGZlX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgID0gdnBmZV9zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICA9IHZwZmVfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9pbnB1dAkgPSB2cGZlX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0CQkgPSB2cGZlX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQkgPSB2cGZlX3NfaW5wdXQsCisJLnZpZGlvY19xdWVyeXN0ZAkgPSB2cGZlX3F1ZXJ5c3RkLAorCS52aWRpb2Nfc19zdGQJCSA9IHZwZmVfc19zdGQsCisJLnZpZGlvY19nX3N0ZAkJID0gdnBmZV9nX3N0ZCwKKwkudmlkaW9jX3JlcWJ1ZnMJCSA9IHZwZmVfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmCSA9IHZwZmVfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmCQkgPSB2cGZlX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJID0gdnBmZV9kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uCSA9IHZwZmVfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYJID0gdnBmZV9zdHJlYW1vZmYsCisJLnZpZGlvY19jcm9wY2FwCQkgPSB2cGZlX2Nyb3BjYXAsCisJLnZpZGlvY19nX2Nyb3AJCSA9IHZwZmVfZ19jcm9wLAorCS52aWRpb2Nfc19jcm9wCQkgPSB2cGZlX3NfY3JvcCwKKwkudmlkaW9jX2RlZmF1bHQJCSA9IHZwZmVfcGFyYW1faGFuZGxlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfaW5pdGlhbGl6ZSh2b2lkKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXY7CisKKwkvKiBEZWZhdWx0IG51bWJlciBvZiBidWZmZXJzIHNob3VsZCBiZSAzICovCisJaWYgKChudW1idWZmZXJzID4gMCkgJiYKKwkgICAgKG51bWJ1ZmZlcnMgPCBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzKSkKKwkJbnVtYnVmZmVycyA9IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnM7CisKKwkvKgorCSAqIFNldCBidWZmZXIgc2l6ZSB0byBtaW4gYnVmZmVycyBzaXplIGlmIGludmFsaWQgYnVmZmVyIHNpemUgaXMKKwkgKiBnaXZlbgorCSAqLworCWlmIChidWZzaXplIDwgY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZSkKKwkJYnVmc2l6ZSA9IGNvbmZpZ19wYXJhbXMubWluX2J1ZnNpemU7CisKKwljb25maWdfcGFyYW1zLm51bWJ1ZmZlcnMgPSBudW1idWZmZXJzOworCisJaWYgKG51bWJ1ZmZlcnMpCisJCWNvbmZpZ19wYXJhbXMuZGV2aWNlX2J1ZnNpemUgPSBidWZzaXplOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2Ugb2JqZWN0cyAqLworCXZwZmVfZGV2ID0ga3phbGxvYyhzaXplb2YoKnZwZmVfZGV2KSwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gdnBmZV9kZXY7Cit9CisKK3N0YXRpYyB2b2lkIHZwZmVfZGlzYWJsZV9jbG9jayhzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQoreworCXN0cnVjdCB2cGZlX2NvbmZpZyAqdnBmZV9jZmcgPSB2cGZlX2Rldi0+Y2ZnOworCisJY2xrX2Rpc2FibGUodnBmZV9jZmctPnZwc3NjbGspOworCWNsa19wdXQodnBmZV9jZmctPnZwc3NjbGspOworCWNsa19kaXNhYmxlKHZwZmVfY2ZnLT5zbGF2ZWNsayk7CisJY2xrX3B1dCh2cGZlX2NmZy0+c2xhdmVjbGspOworCXY0bDJfaW5mbyh2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAorCQkgInZwZmUgdnBzcyBtYXN0ZXIgJiBzbGF2ZSBjbG9ja3MgZGlzYWJsZWRcbiIpOworfQorCitzdGF0aWMgaW50IHZwZmVfZW5hYmxlX2Nsb2NrKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJc3RydWN0IHZwZmVfY29uZmlnICp2cGZlX2NmZyA9IHZwZmVfZGV2LT5jZmc7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwl2cGZlX2NmZy0+dnBzc2NsayA9IGNsa19nZXQodnBmZV9kZXYtPnBkZXYsICJ2cHNzX21hc3RlciIpOworCWlmIChOVUxMID09IHZwZmVfY2ZnLT52cHNzY2xrKSB7CisJCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsICJObyBjbG9jayBkZWZpbmVkIGZvciIKKwkJCSAidnBzc19tYXN0ZXJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChjbGtfZW5hYmxlKHZwZmVfY2ZnLT52cHNzY2xrKSkgeworCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAorCQkJInZwZmUgdnBzcyBtYXN0ZXIgY2xvY2sgbm90IGVuYWJsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCisJCSAidnBmZSB2cHNzIG1hc3RlciBjbG9jayBlbmFibGVkXG4iKTsKKworCXZwZmVfY2ZnLT5zbGF2ZWNsayA9IGNsa19nZXQodnBmZV9kZXYtPnBkZXYsICJ2cHNzX3NsYXZlIik7CisJaWYgKE5VTEwgPT0gdnBmZV9jZmctPnNsYXZlY2xrKSB7CisJCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCisJCQkiTm8gY2xvY2sgZGVmaW5lZCBmb3IgdnBzcyBzbGF2ZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjbGtfZW5hYmxlKHZwZmVfY2ZnLT5zbGF2ZWNsaykpIHsKKwkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKKwkJCSAidnBmZSB2cHNzIHNsYXZlIGNsb2NrIG5vdCBlbmFibGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXY0bDJfaW5mbyh2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLCAidnBmZSB2cHNzIHNsYXZlIGNsb2NrIGVuYWJsZWRcbiIpOworCXJldHVybiAwOworb3V0OgorCWlmICh2cGZlX2NmZy0+dnBzc2NsaykKKwkJY2xrX3B1dCh2cGZlX2NmZy0+dnBzc2Nsayk7CisJaWYgKHZwZmVfY2ZnLT5zbGF2ZWNsaykKKwkJY2xrX3B1dCh2cGZlX2NmZy0+c2xhdmVjbGspOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogdnBmZV9wcm9iZSA6IFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBkZXZpY2UgZW50cmllcyBieSByZWdpc3RlcgorICogaXRzZWxmIHRvIHRoZSBWNEwyIGRyaXZlciBhbmQgaW5pdGlhbGl6ZXMgZmllbGRzIG9mIGVhY2gKKyAqIGRldmljZSBvYmplY3RzCisgKi8KK3N0YXRpYyBfX2luaXQgaW50IHZwZmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCXN0cnVjdCB2cGZlX2NvbmZpZyAqdnBmZV9jZmc7CisJc3RydWN0IHJlc291cmNlICpyZXMxOworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IHJldCA9IC1FTk9NRU0sIGksIGo7CisJaW50IG51bV9zdWJkZXZzID0gMDsKKworCS8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgZGV2aWNlIG9iamVjdCAqLworCXZwZmVfZGV2ID0gdnBmZV9pbml0aWFsaXplKCk7CisKKwlpZiAoIXZwZmVfZGV2KSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdnBmZV9kZXZcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXZwZmVfZGV2LT5wZGV2ID0gJnBkZXYtPmRldjsKKworCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gZ2V0IHZwZmUgY29uZmlnXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07CisJfQorCisJdnBmZV9jZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl2cGZlX2Rldi0+Y2ZnID0gdnBmZV9jZmc7CisJaWYgKE5VTEwgPT0gdnBmZV9jZmctPmNjZGMgfHwKKwkgICAgTlVMTCA9PSB2cGZlX2NmZy0+Y2FyZF9uYW1lIHx8CisJICAgIE5VTEwgPT0gdnBmZV9jZmctPnN1Yl9kZXZzKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJudWxsIHB0ciBpbiB2cGZlX2NmZ1xuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOworCX0KKworCS8qIGVuYWJsZSB2cHNzIGNsb2NrcyAqLworCXJldCA9IHZwZmVfZW5hYmxlX2Nsb2NrKHZwZmVfZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKKworCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBjY2RjIGNvbmZpZ3VyYXRpb24gKi8KKwljY2RjX2NmZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjY2RjX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGNjZGNfY2ZnKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgY2NkY19jZmdcbiIpOworCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7CisJfQorCisJc3RybmNweShjY2RjX2NmZy0+bmFtZSwgdnBmZV9jZmctPmNjZGMsIDMyKTsKKwkvKiBHZXQgVklOVDAgaXJxIHJlc291cmNlICovCisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMxKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMFxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwl9CisJdnBmZV9kZXYtPmNjZGNfaXJxMCA9IHJlczEtPnN0YXJ0OworCisJLyogR2V0IFZJTlQxIGlycSByZXNvdXJjZSAqLworCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwKKwkJCQlJT1JFU09VUkNFX0lSUSwgMSk7CisJaWYgKCFyZXMxKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwl9CisJdnBmZV9kZXYtPmNjZGNfaXJxMSA9IHJlczEtPnN0YXJ0OworCisJLyogR2V0IGFkZHJlc3MgYmFzZSBvZiBDQ0RDICovCisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMxKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkiVW5hYmxlIHRvIGdldCByZWdpc3RlciBhZGRyZXNzIG1hcFxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwl9CisKKwljY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUgPSByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDE7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSwKKwkJCQlwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgeworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAorCQkJIkZhaWxlZCByZXF1ZXN0X21lbV9yZWdpb24gZm9yIGNjZGMgYmFzZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOworCX0KKwljY2RjX2NmZy0+Y2NkY19hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlczEtPnN0YXJ0LAorCQkJCQkgICAgIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSk7CisJaWYgKCFjY2RjX2NmZy0+Y2NkY19hZGRyKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gaW9yZW1hcCBjY2RjIGFkZHJcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfbWVtMTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2lzciwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgInZwZmVfY2FwdHVyZTAiLCB2cGZlX2Rldik7CisKKwlpZiAoMCAhPSByZXQpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byByZXF1ZXN0IGludGVycnVwdFxuIik7CisJCWdvdG8gcHJvYmVfb3V0X3VubWFwMTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZpZGVvIGRldmljZSAqLworCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChOVUxMID09IHZmZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAorCQkJIlVuYWJsZSB0byBhbGxvYyB2aWRlbyBkZXZpY2VcbiIpOworCQlnb3RvIHByb2JlX291dF9yZWxlYXNlX2lycTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGZpZWxkIG9mIHZpZGVvIGRldmljZSAqLworCXZmZC0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2ZmQtPmZvcHMJCT0gJnZwZmVfZm9wczsKKwl2ZmQtPmlvY3RsX29wcwkJPSAmdnBmZV9pb2N0bF9vcHM7CisJdmZkLT5taW5vcgkJPSAtMTsKKwl2ZmQtPnR2bm9ybXMJCT0gMDsKKwl2ZmQtPmN1cnJlbnRfbm9ybQk9IFY0TDJfU1REX1BBTDsKKwl2ZmQtPnY0bDJfZGV2IAkJPSAmdnBmZV9kZXYtPnY0bDJfZGV2OworCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksCisJCSAiJXNfViVkLiVkLiVkIiwKKwkJIENBUFRVUkVfRFJWX05BTUUsCisJCSAoVlBGRV9DQVBUVVJFX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAorCQkgKFZQRkVfQ0FQVFVSRV9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLAorCQkgKFZQRkVfQ0FQVFVSRV9WRVJTSU9OX0NPREUpICYgMHhmZik7CisJLyogU2V0IHZpZGVvX2RldiB0byB0aGUgdmlkZW8gZGV2aWNlICovCisJdnBmZV9kZXYtPnZpZGVvX2Rldgk9IHZmZDsKKworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZ2cGZlX2Rldi0+djRsMl9kZXYpOworCWlmIChyZXQpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKKwkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgdjRsMiBkZXZpY2UuXG4iKTsKKwkJZ290byBwcm9iZV9vdXRfdmlkZW9fcmVsZWFzZTsKKwl9CisJdjRsMl9pbmZvKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2NGwyIGRldmljZSByZWdpc3RlcmVkXG4iKTsKKwlzcGluX2xvY2tfaW5pdCgmdnBmZV9kZXYtPmlycWxvY2spOworCXNwaW5fbG9ja19pbml0KCZ2cGZlX2Rldi0+ZG1hX3F1ZXVlX2xvY2spOworCW11dGV4X2luaXQoJnZwZmVfZGV2LT5sb2NrKTsKKworCS8qIEluaXRpYWxpemUgZmllbGQgb2YgdGhlIGRldmljZSBvYmplY3RzICovCisJdnBmZV9kZXYtPm51bWJ1ZmZlcnMgPSBjb25maWdfcGFyYW1zLm51bWJ1ZmZlcnM7CisKKwkvKiBJbml0aWFsaXplIHByaW8gbWVtYmVyIG9mIGRldmljZSBvYmplY3QgKi8KKwl2NGwyX3ByaW9faW5pdCgmdnBmZV9kZXYtPnByaW8pOworCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkidHJ5aW5nIHRvIHJlZ2lzdGVyIHZwZmUgZGV2aWNlLlxuIik7CisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCSJ2aWRlb19kZXY9JXhcbiIsIChpbnQpJnZwZmVfZGV2LT52aWRlb19kZXYpOworCXZwZmVfZGV2LT5mbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodnBmZV9kZXYtPnZpZGVvX2RldiwKKwkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCisJaWYgKHJldCkgeworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAorCQkJIlVuYWJsZSB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UuXG4iKTsKKwkJZ290byBwcm9iZV9vdXRfdjRsMl91bnJlZ2lzdGVyOworCX0KKworCXY0bDJfaW5mbygmdnBmZV9kZXYtPnY0bDJfZGV2LCAidmlkZW8gZGV2aWNlIHJlZ2lzdGVyZWRcbiIpOworCS8qIHNldCB0aGUgZHJpdmVyIGRhdGEgaW4gcGxhdGZvcm0gZGV2aWNlICovCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdnBmZV9kZXYpOworCS8qIHNldCBkcml2ZXIgcHJpdmF0ZSBkYXRhICovCisJdmlkZW9fc2V0X2RydmRhdGEodnBmZV9kZXYtPnZpZGVvX2RldiwgdnBmZV9kZXYpOworCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDEpOworCXZwZmVfY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJbnVtX3N1YmRldnMgPSB2cGZlX2NmZy0+bnVtX3N1YmRldnM7CisJdnBmZV9kZXYtPnNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2ICopICogbnVtX3N1YmRldnMsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gdnBmZV9kZXYtPnNkKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Igc3ViZGV2aWNlIHBvaW50ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwcm9iZV9vdXRfdmlkZW9fdW5yZWdpc3RlcjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3N1YmRldnM7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wczsKKworCQlzZGluZm8gPSAmdnBmZV9jZmctPnN1Yl9kZXZzW2ldOworCisJCS8qIExvYWQgdXAgdGhlIHN1YmRldmljZSAqLworCQl2cGZlX2Rldi0+c2RbaV0gPQorCQkJdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZCgmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJCQkJICBpMmNfYWRhcCwKKwkJCQkJCSAgc2RpbmZvLT5uYW1lLAorCQkJCQkJICAmc2RpbmZvLT5ib2FyZF9pbmZvLAorCQkJCQkJICBOVUxMKTsKKwkJaWYgKHZwZmVfZGV2LT5zZFtpXSkgeworCQkJdjRsMl9pbmZvKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkJICAidjRsMiBzdWIgZGV2aWNlICVzIHJlZ2lzdGVyZWRcbiIsCisJCQkJICBzZGluZm8tPm5hbWUpOworCQkJdnBmZV9kZXYtPnNkW2ldLT5ncnBfaWQgPSBzZGluZm8tPmdycF9pZDsKKwkJCS8qIHVwZGF0ZSB0dm5vcm1zIGZyb20gdGhlIHN1YiBkZXZpY2VzICovCisJCQlmb3IgKGogPSAwOyBqIDwgc2RpbmZvLT5udW1faW5wdXRzOyBqKyspIHsKKwkJCQlpbnBzID0gJnNkaW5mby0+aW5wdXRzW2pdOworCQkJCXZmZC0+dHZub3JtcyB8PSBpbnBzLT5zdGQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2NGwyX2luZm8oJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCQkgICJ2NGwyIHN1YiBkZXZpY2UgJXMgcmVnaXN0ZXIgZmFpbHNcbiIsCisJCQkJICBzZGluZm8tPm5hbWUpOworCQkJZ290byBwcm9iZV9zZF9vdXQ7CisJCX0KKwl9CisKKwkvKiBzZXQgZmlyc3Qgc3ViIGRldmljZSBhcyBjdXJyZW50IG9uZSAqLworCXZwZmVfZGV2LT5jdXJyZW50X3N1YmRldiA9ICZ2cGZlX2NmZy0+c3ViX2RldnNbMF07CisKKwkvKiBXZSBoYXZlIGF0IGxlYXN0IG9uZSBzdWIgZGV2aWNlIHRvIHdvcmsgd2l0aCAqLworCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKKwlyZXR1cm4gMDsKKworcHJvYmVfc2Rfb3V0OgorCWtmcmVlKHZwZmVfZGV2LT5zZCk7Citwcm9iZV9vdXRfdmlkZW9fdW5yZWdpc3RlcjoKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2cGZlX2Rldi0+dmlkZW9fZGV2KTsKK3Byb2JlX291dF92NGwyX3VucmVnaXN0ZXI6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdnBmZV9kZXYtPnY0bDJfZGV2KTsKK3Byb2JlX291dF92aWRlb19yZWxlYXNlOgorCWlmICh2cGZlX2Rldi0+dmlkZW9fZGV2LT5taW5vciA9PSAtMSkKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodnBmZV9kZXYtPnZpZGVvX2Rldik7Citwcm9iZV9vdXRfcmVsZWFzZV9pcnE6CisJZnJlZV9pcnEodnBmZV9kZXYtPmNjZGNfaXJxMCwgdnBmZV9kZXYpOworcHJvYmVfb3V0X3VubWFwMToKKwlpb3VubWFwKGNjZGNfY2ZnLT5jY2RjX2FkZHIpOworcHJvYmVfb3V0X3JlbGVhc2VfbWVtMToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIHJlczEtPmVuZCAtIHJlczEtPnN0YXJ0ICsgMSk7Citwcm9iZV9kaXNhYmxlX2Nsb2NrOgorCXZwZmVfZGlzYWJsZV9jbG9jayh2cGZlX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOworCWtmcmVlKGNjZGNfY2ZnKTsKK3Byb2JlX2ZyZWVfZGV2X21lbToKKwlrZnJlZSh2cGZlX2Rldik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHZwZmVfcmVtb3ZlIDogSXQgdW4tcmVnaXN0ZXIgZGV2aWNlIGZyb20gVjRMMiBkcml2ZXIKKyAqLworc3RhdGljIGludCB2cGZlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXY0bDJfaW5mbyhwZGV2LT5kZXYuZHJpdmVyLCAidnBmZV9yZW1vdmVcbiIpOworCisJZnJlZV9pcnEodnBmZV9kZXYtPmNjZGNfaXJxMCwgdnBmZV9kZXYpOworCWtmcmVlKHZwZmVfZGV2LT5zZCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdnBmZV9kZXYtPnY0bDJfZGV2KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2cGZlX2Rldi0+dmlkZW9fZGV2KTsKKwltdXRleF9sb2NrKCZjY2RjX2xvY2spOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlvdW5tYXAoY2NkY19jZmctPmNjZGNfYWRkcik7CisJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOworCXZwZmVfZGlzYWJsZV9jbG9jayh2cGZlX2Rldik7CisJa2ZyZWUodnBmZV9kZXYpOworCWtmcmVlKGNjZGNfY2ZnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordnBmZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBhZGQgc3VzcGVuZCBjb2RlIGhlcmUgbGF0ZXIgKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK3ZwZmVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBhZGQgcmVzdW1lIGNvZGUgaGVyZSBsYXRlciAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHZwZmVfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHZwZmVfc3VzcGVuZCwKKwkucmVzdW1lID0gdnBmZV9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cGZlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IENBUFRVUkVfRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmdnBmZV9kZXZfcG1fb3BzLAorCX0sCisJLnByb2JlID0gdnBmZV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodnBmZV9yZW1vdmUpLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgdnBmZV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICJ2cGZlX2luaXRcbiIpOworCS8qIFJlZ2lzdGVyIGRyaXZlciB0byB0aGUga2VybmVsICovCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdnBmZV9kcml2ZXIpOworfQorCisvKgorICogdnBmZV9jbGVhbnVwIDogVGhpcyBmdW5jdGlvbiB1bi1yZWdpc3RlcnMgZGV2aWNlIGRyaXZlcgorICovCitzdGF0aWMgdm9pZCB2cGZlX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnBmZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2cGZlX2luaXQpOworbW9kdWxlX2V4aXQodnBmZV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOGVhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5jCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogdnBpZiAtIERNNjQ2eCBWaWRlbyBQb3J0IEludGVyZmFjZSBkcml2ZXIKKyAqIFZQSUYgaXMgYSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgZm9yIHZpZGVvIGRhdGEuIEl0IGhhcyB0d28gY2hhbm5lbHMoMCwgMSkKKyAqIHRoYXQgcmVjZWl2ZWluZyB2aWRlbyBieXRlIHN0cmVhbSBhbmQgdHdvIGNoYW5uZWxzKDIsIDMpIGZvciB2aWRlbyBvdXRwdXQuCisgKiBUaGUgaGFyZHdhcmUgc3VwcG9ydHMgU0RUViwgSERUViBmb3JtYXRzLCByYXcgZGF0YSBjYXB0dXJlLgorICogQ3VycmVudGx5LCB0aGUgZHJpdmVyIHN1cHBvcnRzIE5UU0MgYW5kIFBBTCBzdGFuZGFyZHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIC5hcyBpcy4gV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgInZwaWYuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBEYVZpbmNpIFZpZGVvIFBvcnQgSW50ZXJmYWNlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIFZQSUZfQ0gwX01BWF9NT0RFUwkoMjIpCisjZGVmaW5lIFZQSUZfQ0gxX01BWF9NT0RFUwkoMDIpCisjZGVmaW5lIFZQSUZfQ0gyX01BWF9NT0RFUwkoMTUpCisjZGVmaW5lIFZQSUZfQ0gzX01BWF9NT0RFUwkoMDIpCisKK3N0YXRpYyByZXNvdXJjZV9zaXplX3QJcmVzX2xlbjsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKK3NwaW5sb2NrX3QgdnBpZl9sb2NrOworCit2b2lkIF9faW9tZW0gKnZwaWZfYmFzZTsKKworc3RhdGljIGlubGluZSB2b2lkIHZwaWZfd3JfYml0KHUzMiByZWcsIHUzMiBiaXQsIHUzMiB2YWwpCit7CisJaWYgKHZhbCkKKwkJdnBpZl9zZXRfYml0KHJlZywgYml0KTsKKwllbHNlCisJCXZwaWZfY2xyX2JpdChyZWcsIGJpdCk7Cit9CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBWUElGIHNpemUgcmVnaXN0ZXIncyBvZmZzZXRzICovCitzdHJ1Y3QgdnBpZl9yZWdpc3RlcnMgeworCXUzMiBoX2NmZywgdl9jZmdfMDAsIHZfY2ZnXzAxLCB2X2NmZ18wMiwgdl9jZmcsIGNoX2N0cmw7CisJdTMyIGxpbmVfb2Zmc2V0LCB2YW5jMF9zdHJ0LCB2YW5jMF9zaXplLCB2YW5jMV9zdHJ0OworCXUzMiB2YW5jMV9zaXplLCB3aWR0aF9tYXNrLCBsZW5fbWFzazsKKwl1OCBtYXhfbW9kZXM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZwaWZfcmVnaXN0ZXJzIHZwaWZyZWdzW1ZQSUZfTlVNX0NIQU5ORUxTXSA9IHsKKwkvKiBDaGFubmVsMCAqLworCXsKKwkJVlBJRl9DSDBfSF9DRkcsIFZQSUZfQ0gwX1ZfQ0ZHXzAwLCBWUElGX0NIMF9WX0NGR18wMSwKKwkJVlBJRl9DSDBfVl9DRkdfMDIsIFZQSUZfQ0gwX1ZfQ0ZHXzAzLCBWUElGX0NIMF9DVFJMLAorCQlWUElGX0NIMF9JTUdfQUREX09GU1QsIDAsIDAsIDAsIDAsIDB4MUZGRiwgMHhGRkYsCisJCVZQSUZfQ0gwX01BWF9NT0RFUywKKwl9LAorCS8qIENoYW5uZWwxICovCisJeworCQlWUElGX0NIMV9IX0NGRywgVlBJRl9DSDFfVl9DRkdfMDAsIFZQSUZfQ0gxX1ZfQ0ZHXzAxLAorCQlWUElGX0NIMV9WX0NGR18wMiwgVlBJRl9DSDFfVl9DRkdfMDMsIFZQSUZfQ0gxX0NUUkwsCisJCVZQSUZfQ0gxX0lNR19BRERfT0ZTVCwgMCwgMCwgMCwgMCwgMHgxRkZGLCAweEZGRiwKKwkJVlBJRl9DSDFfTUFYX01PREVTLAorCX0sCisJLyogQ2hhbm5lbDIgKi8KKwl7CisJCVZQSUZfQ0gyX0hfQ0ZHLCBWUElGX0NIMl9WX0NGR18wMCwgVlBJRl9DSDJfVl9DRkdfMDEsCisJCVZQSUZfQ0gyX1ZfQ0ZHXzAyLCBWUElGX0NIMl9WX0NGR18wMywgVlBJRl9DSDJfQ1RSTCwKKwkJVlBJRl9DSDJfSU1HX0FERF9PRlNULCBWUElGX0NIMl9WQU5DMF9TVFJULCBWUElGX0NIMl9WQU5DMF9TSVpFLAorCQlWUElGX0NIMl9WQU5DMV9TVFJULCBWUElGX0NIMl9WQU5DMV9TSVpFLCAweDdGRiwgMHg3RkYsCisJCVZQSUZfQ0gyX01BWF9NT0RFUworCX0sCisJLyogQ2hhbm5lbDMgKi8KKwl7CisJCVZQSUZfQ0gzX0hfQ0ZHLCBWUElGX0NIM19WX0NGR18wMCwgVlBJRl9DSDNfVl9DRkdfMDEsCisJCVZQSUZfQ0gzX1ZfQ0ZHXzAyLCBWUElGX0NIM19WX0NGR18wMywgVlBJRl9DSDNfQ1RSTCwKKwkJVlBJRl9DSDNfSU1HX0FERF9PRlNULCBWUElGX0NIM19WQU5DMF9TVFJULCBWUElGX0NIM19WQU5DMF9TSVpFLAorCQlWUElGX0NIM19WQU5DMV9TVFJULCBWUElGX0NIM19WQU5DMV9TSVpFLCAweDdGRiwgMHg3RkYsCisJCVZQSUZfQ0gzX01BWF9NT0RFUworCX0sCit9OworCisvKiB2cGlmX3NldF9tb2RlX2luZm86CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGNvbmZpZyBwYXJhbWV0ZXJzCisgKiBBcyBwZXIgdGhlIHN0YW5kYXJkIGluIHRoZSBjaGFubmVsLCBjb25maWd1cmUgdGhlIHZhbHVlcyBvZiBMMSwgTDMsCisgKiBMNSwgTDcgIEw5LCBMMTEgaW4gVlBJRiBSZWdpc3RlciAsIGFsc28gd3JpdGUgd2lkdGggYW5kIGhlaWdodAorICovCitzdGF0aWMgdm9pZCB2cGlmX3NldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zICpjb25maWcsCisJCQkJdTggY2hhbm5lbF9pZCwgdTggY29uZmlnX2NoYW5uZWxfaWQpCit7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSAoY29uZmlnLT5lYXYyc2F2ICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLndpZHRoX21hc2spOworCXZhbHVlIDw8PSBWUElGX0NIX0xFTl9TSElGVDsKKwl2YWx1ZSB8PSAoY29uZmlnLT5zYXYyZWF2ICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLndpZHRoX21hc2spOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLmhfY2ZnKTsKKworCXZhbHVlID0gKGNvbmZpZy0+bDEgJiB2cGlmcmVnc1tjb25maWdfY2hhbm5lbF9pZF0ubGVuX21hc2spOworCXZhbHVlIDw8PSBWUElGX0NIX0xFTl9TSElGVDsKKwl2YWx1ZSB8PSAoY29uZmlnLT5sMyAmIHZwaWZyZWdzW2NvbmZpZ19jaGFubmVsX2lkXS5sZW5fbWFzayk7CisJcmVndyh2YWx1ZSwgdnBpZnJlZ3NbY2hhbm5lbF9pZF0udl9jZmdfMDApOworCisJdmFsdWUgPSAoY29uZmlnLT5sNSAmIHZwaWZyZWdzW2NvbmZpZ19jaGFubmVsX2lkXS5sZW5fbWFzayk7CisJdmFsdWUgPDw9IFZQSUZfQ0hfTEVOX1NISUZUOworCXZhbHVlIHw9IChjb25maWctPmw3ICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLmxlbl9tYXNrKTsKKwlyZWd3KHZhbHVlLCB2cGlmcmVnc1tjaGFubmVsX2lkXS52X2NmZ18wMSk7CisKKwl2YWx1ZSA9IChjb25maWctPmw5ICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLmxlbl9tYXNrKTsKKwl2YWx1ZSA8PD0gVlBJRl9DSF9MRU5fU0hJRlQ7CisJdmFsdWUgfD0gKGNvbmZpZy0+bDExICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLmxlbl9tYXNrKTsKKwlyZWd3KHZhbHVlLCB2cGlmcmVnc1tjaGFubmVsX2lkXS52X2NmZ18wMik7CisKKwl2YWx1ZSA9IChjb25maWctPnZzaXplICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLmxlbl9tYXNrKTsKKwlyZWd3KHZhbHVlLCB2cGlmcmVnc1tjaGFubmVsX2lkXS52X2NmZyk7Cit9CisKKy8qIGNvbmZpZ192cGlmX3BhcmFtcworICogRnVuY3Rpb24gdG8gc2V0IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbm5lbAorICogTWFpbmx5IG1vZGlmaWVzIHRoZSBjaGFubmVsIGNpb250cm9sIHJlZ2lzdGVyCisgKiBJdCBzZXRzIGZyYW1lIGZvcm1hdCwgeWMgbXV4IG1vZGUKKyAqLworc3RhdGljIHZvaWQgY29uZmlnX3ZwaWZfcGFyYW1zKHN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZnBhcmFtcywKKwkJCQl1OCBjaGFubmVsX2lkLCB1OCBmb3VuZCkKK3sKKwljb25zdCBzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKmNvbmZpZyA9ICZ2cGlmcGFyYW1zLT5zdGRfaW5mbzsKKwl1MzIgdmFsdWUsIGNoX25pcCwgcmVnOworCXU4IHN0YXJ0LCBlbmQ7CisJaW50IGk7CisKKwlzdGFydCA9IGNoYW5uZWxfaWQ7CisJZW5kID0gY2hhbm5lbF9pZCArIGZvdW5kOworCisJZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgeworCQlyZWcgPSB2cGlmcmVnc1tpXS5jaF9jdHJsOworCQlpZiAoY2hhbm5lbF9pZCA8IDIpCisJCQljaF9uaXAgPSBWUElGX0NBUFRVUkVfQ0hfTklQOworCQllbHNlCisJCQljaF9uaXAgPSBWUElGX0RJU1BMQVlfQ0hfTklQOworCisJCXZwaWZfd3JfYml0KHJlZywgY2hfbmlwLCBjb25maWctPmZybV9mbXQpOworCQl2cGlmX3dyX2JpdChyZWcsIFZQSUZfQ0hfWUNfTVVYX0JJVCwgY29uZmlnLT55Y211eF9tb2RlKTsKKwkJdnBpZl93cl9iaXQocmVnLCBWUElGX0NIX0lOUFVUX0ZJRUxEX0ZSQU1FX0JJVCwKKwkJCQkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLnN0b3JhZ2VfbW9kZSk7CisKKwkJLyogU2V0IHJhc3RlciBzY2FubmluZyBTRFIgRm9ybWF0ICovCisJCXZwaWZfY2xyX2JpdChyZWcsIFZQSUZfQ0hfU0RSX0ZNVF9CSVQpOworCQl2cGlmX3dyX2JpdChyZWcsIFZQSUZfQ0hfREFUQV9NT0RFX0JJVCwgY29uZmlnLT5jYXB0dXJlX2Zvcm1hdCk7CisKKwkJaWYgKGNoYW5uZWxfaWQgPiAxKQkvKiBTZXQgdGhlIFBpeGVsIGVuYWJsZSBiaXQgKi8KKwkJCXZwaWZfc2V0X2JpdChyZWcsIFZQSUZfRElTUExBWV9QSVhfRU5fQklUKTsKKwkJZWxzZSBpZiAoY29uZmlnLT5jYXB0dXJlX2Zvcm1hdCkgeworCQkJLyogU2V0IHRoZSBwb2xhcml0eSBvZiB2YXJpb3VzIHBpbnMgKi8KKwkJCXZwaWZfd3JfYml0KHJlZywgVlBJRl9DSF9GSURfUE9MQVJJVFlfQklULAorCQkJCQl2cGlmcGFyYW1zLT5pZmFjZS5maWRfcG9sKTsKKwkJCXZwaWZfd3JfYml0KHJlZywgVlBJRl9DSF9WX1ZBTElEX1BPTEFSSVRZX0JJVCwKKwkJCQkJdnBpZnBhcmFtcy0+aWZhY2UudmRfcG9sKTsKKwkJCXZwaWZfd3JfYml0KHJlZywgVlBJRl9DSF9IX1ZBTElEX1BPTEFSSVRZX0JJVCwKKwkJCQkJdnBpZnBhcmFtcy0+aWZhY2UuaGRfcG9sKTsKKworCQkJdmFsdWUgPSByZWdyKHJlZyk7CisJCQkvKiBTZXQgZGF0YSB3aWR0aCAqLworCQkJdmFsdWUgJj0gKCh+KHVuc2lnbmVkIGludCkoMHgzKSkgPDwKKwkJCQkJVlBJRl9DSF9EQVRBX1dJRFRIX0JJVCk7CisJCQl2YWx1ZSB8PSAoKHZwaWZwYXJhbXMtPnBhcmFtcy5kYXRhX3N6KSA8PAorCQkJCQkJICAgICBWUElGX0NIX0RBVEFfV0lEVEhfQklUKTsKKwkJCXJlZ3codmFsdWUsIHJlZyk7CisJCX0KKworCQkvKiBXcml0ZSB0aGUgcGl0Y2ggaW4gdGhlIGRyaXZlciAqLworCQlyZWd3KCh2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuaHBpdGNoKSwKKwkJCQkJCXZwaWZyZWdzW2ldLmxpbmVfb2Zmc2V0KTsKKwl9Cit9CisKKy8qIHZwaWZfc2V0X3ZpZGVvX3BhcmFtcworICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB2aWRlbyBwYXJhbWV0ZXJzIGluIFZQSUYgcmVnaXN0ZXIKKyAqLworaW50IHZwaWZfc2V0X3ZpZGVvX3BhcmFtcyhzdHJ1Y3QgdnBpZl9wYXJhbXMgKnZwaWZwYXJhbXMsIHU4IGNoYW5uZWxfaWQpCit7CisJY29uc3Qgc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zICpjb25maWcgPSAmdnBpZnBhcmFtcy0+c3RkX2luZm87CisJaW50IGZvdW5kID0gMTsKKworCXZwaWZfc2V0X21vZGVfaW5mbyhjb25maWcsIGNoYW5uZWxfaWQsIGNoYW5uZWxfaWQpOworCWlmICghY29uZmlnLT55Y211eF9tb2RlKSB7CisJCS8qIFlDIGFyZSBvbiBzZXBhcmF0ZSBjaGFubmVscyAoSERUViBmb3JtYXRzKSAqLworCQl2cGlmX3NldF9tb2RlX2luZm8oY29uZmlnLCBjaGFubmVsX2lkICsgMSwgY2hhbm5lbF9pZCk7CisJCWZvdW5kID0gMjsKKwl9CisKKwljb25maWdfdnBpZl9wYXJhbXModnBpZnBhcmFtcywgY2hhbm5lbF9pZCwgZm91bmQpOworCisJcmVndygweDgwLCBWUElGX1JFUV9TSVpFKTsKKwlyZWd3KDB4MDEsIFZQSUZfRU1VTEFUSU9OX0NUUkwpOworCisJcmV0dXJuIGZvdW5kOworfQorRVhQT1JUX1NZTUJPTCh2cGlmX3NldF92aWRlb19wYXJhbXMpOworCit2b2lkIHZwaWZfc2V0X3ZiaV9kaXNwbGF5X3BhcmFtcyhzdHJ1Y3QgdnBpZl92YmlfcGFyYW1zICp2YmlwYXJhbXMsCisJCQkJdTggY2hhbm5lbF9pZCkKK3sKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IDB4M0Y4ICYgKHZiaXBhcmFtcy0+aHN0YXJ0MCk7CisJdmFsdWUgfD0gMHgzRkZGRkZGICYgKCh2YmlwYXJhbXMtPnZzdGFydDApIDw8IDE2KTsKKwlyZWd3KHZhbHVlLCB2cGlmcmVnc1tjaGFubmVsX2lkXS52YW5jMF9zdHJ0KTsKKworCXZhbHVlID0gMHgzRjggJiAodmJpcGFyYW1zLT5oc3RhcnQxKTsKKwl2YWx1ZSB8PSAweDNGRkZGRkYgJiAoKHZiaXBhcmFtcy0+dnN0YXJ0MSkgPDwgMTYpOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLnZhbmMxX3N0cnQpOworCisJdmFsdWUgPSAweDNGOCAmICh2YmlwYXJhbXMtPmhzaXplMCk7CisJdmFsdWUgfD0gMHgzRkZGRkZGICYgKCh2YmlwYXJhbXMtPnZzaXplMCkgPDwgMTYpOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLnZhbmMwX3NpemUpOworCisJdmFsdWUgPSAweDNGOCAmICh2YmlwYXJhbXMtPmhzaXplMSk7CisJdmFsdWUgfD0gMHgzRkZGRkZGICYgKCh2YmlwYXJhbXMtPnZzaXplMSkgPDwgMTYpOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLnZhbmMxX3NpemUpOworCit9CitFWFBPUlRfU1lNQk9MKHZwaWZfc2V0X3ZiaV9kaXNwbGF5X3BhcmFtcyk7CisKK2ludCB2cGlmX2NoYW5uZWxfZ2V0ZmlkKHU4IGNoYW5uZWxfaWQpCit7CisJcmV0dXJuIChyZWdyKHZwaWZyZWdzW2NoYW5uZWxfaWRdLmNoX2N0cmwpICYgVlBJRl9DSF9GSURfTUFTSykKKwkJCQkJPj4gVlBJRl9DSF9GSURfU0hJRlQ7Cit9CitFWFBPUlRfU1lNQk9MKHZwaWZfY2hhbm5lbF9nZXRmaWQpOworCitzdGF0aWMgaW50IF9faW5pdCB2cGlmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJlc19sZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19sZW4sIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRUJVU1k7CisKKwl2cGlmX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc19sZW4pOworCWlmICghdnBpZl9iYXNlKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBmYWlsOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ2cGlmX2xvY2spOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ2cGlmIHByb2JlIHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitmYWlsOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNfbGVuKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHZwaWZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW91bm1hcCh2cGlmX2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnBpZl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAidnBpZiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHZwaWZfcmVtb3ZlKSwKKwkucHJvYmUgPSB2cGlmX3Byb2JlLAorfTsKKworc3RhdGljIHZvaWQgdnBpZl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZwaWZfZHJpdmVyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdnBpZl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdnBpZl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHZwaWZfaW5pdCk7Cittb2R1bGVfZXhpdCh2cGlmX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODg4NDFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuaApAQCAtMCwwICsxLDY0MiBAQAorLyoKKyAqIFZQSUYgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgLmFzIGlzLiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBWUElGX0gKKyNkZWZpbmUgVlBJRl9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2RtNjQ2eC5oPgorCisvKiBNYXhpbXVtIGNoYW5uZWwgYWxsb3dlZCAqLworI2RlZmluZSBWUElGX05VTV9DSEFOTkVMUwkJKDQpCisjZGVmaW5lIFZQSUZfQ0FQVFVSRV9OVU1fQ0hBTk5FTFMJKDIpCisjZGVmaW5lIFZQSUZfRElTUExBWV9OVU1fQ0hBTk5FTFMJKDIpCisKKy8qIE1hY3JvcyB0byByZWFkL3dyaXRlIHJlZ2lzdGVycyAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqdnBpZl9iYXNlOworZXh0ZXJuIHNwaW5sb2NrX3QgdnBpZl9sb2NrOworCisjZGVmaW5lIHJlZ3IocmVnKSAgICAgICAgICAgICAgIHJlYWRsKChyZWcpICsgdnBpZl9iYXNlKQorI2RlZmluZSByZWd3KHZhbHVlLCByZWcpICAgICAgICB3cml0ZWwodmFsdWUsIChyZWcgKyB2cGlmX2Jhc2UpKQorCisvKiBSZWdpc3RlciBBZGRyZXNzcyBPZmZzZXRzICovCisjZGVmaW5lIFZQSUZfUElECQkJKDB4MDAwMCkKKyNkZWZpbmUgVlBJRl9DSDBfQ1RSTAkJCSgweDAwMDQpCisjZGVmaW5lIFZQSUZfQ0gxX0NUUkwJCQkoMHgwMDA4KQorI2RlZmluZSBWUElGX0NIMl9DVFJMCQkJKDB4MDAwQykKKyNkZWZpbmUgVlBJRl9DSDNfQ1RSTAkJCSgweDAwMTApCisKKyNkZWZpbmUgVlBJRl9JTlRFTgkJCSgweDAwMjApCisjZGVmaW5lIFZQSUZfSU5URU5fU0VUCQkJKDB4MDAyNCkKKyNkZWZpbmUgVlBJRl9JTlRFTl9DTFIJCQkoMHgwMDI4KQorI2RlZmluZSBWUElGX1NUQVRVUwkJCSgweDAwMkMpCisjZGVmaW5lIFZQSUZfU1RBVFVTX0NMUgkJCSgweDAwMzApCisjZGVmaW5lIFZQSUZfRU1VTEFUSU9OX0NUUkwJCSgweDAwMzQpCisjZGVmaW5lIFZQSUZfUkVRX1NJWkUJCQkoMHgwMDM4KQorCisjZGVmaW5lIFZQSUZfQ0gwX1RPUF9TVFJUX0FERF9MVU1BCSgweDAwNDApCisjZGVmaW5lIFZQSUZfQ0gwX0JUTV9TVFJUX0FERF9MVU1BCSgweDAwNDQpCisjZGVmaW5lIFZQSUZfQ0gwX1RPUF9TVFJUX0FERF9DSFJPTUEJKDB4MDA0OCkKKyNkZWZpbmUgVlBJRl9DSDBfQlRNX1NUUlRfQUREX0NIUk9NQQkoMHgwMDRjKQorI2RlZmluZSBWUElGX0NIMF9UT1BfU1RSVF9BRERfSEFOQwkoMHgwMDUwKQorI2RlZmluZSBWUElGX0NIMF9CVE1fU1RSVF9BRERfSEFOQwkoMHgwMDU0KQorI2RlZmluZSBWUElGX0NIMF9UT1BfU1RSVF9BRERfVkFOQwkoMHgwMDU4KQorI2RlZmluZSBWUElGX0NIMF9CVE1fU1RSVF9BRERfVkFOQwkoMHgwMDVjKQorI2RlZmluZSBWUElGX0NIMF9TUF9DRkcJCQkoMHgwMDYwKQorI2RlZmluZSBWUElGX0NIMF9JTUdfQUREX09GU1QJCSgweDAwNjQpCisjZGVmaW5lIFZQSUZfQ0gwX0hBTkNfQUREX09GU1QJCSgweDAwNjgpCisjZGVmaW5lIFZQSUZfQ0gwX0hfQ0ZHCQkJKDB4MDA2YykKKyNkZWZpbmUgVlBJRl9DSDBfVl9DRkdfMDAJCSgweDAwNzApCisjZGVmaW5lIFZQSUZfQ0gwX1ZfQ0ZHXzAxCQkoMHgwMDc0KQorI2RlZmluZSBWUElGX0NIMF9WX0NGR18wMgkJKDB4MDA3OCkKKyNkZWZpbmUgVlBJRl9DSDBfVl9DRkdfMDMJCSgweDAwN2MpCisKKyNkZWZpbmUgVlBJRl9DSDFfVE9QX1NUUlRfQUREX0xVTUEJKDB4MDA4MCkKKyNkZWZpbmUgVlBJRl9DSDFfQlRNX1NUUlRfQUREX0xVTUEJKDB4MDA4NCkKKyNkZWZpbmUgVlBJRl9DSDFfVE9QX1NUUlRfQUREX0NIUk9NQQkoMHgwMDg4KQorI2RlZmluZSBWUElGX0NIMV9CVE1fU1RSVF9BRERfQ0hST01BCSgweDAwOGMpCisjZGVmaW5lIFZQSUZfQ0gxX1RPUF9TVFJUX0FERF9IQU5DCSgweDAwOTApCisjZGVmaW5lIFZQSUZfQ0gxX0JUTV9TVFJUX0FERF9IQU5DCSgweDAwOTQpCisjZGVmaW5lIFZQSUZfQ0gxX1RPUF9TVFJUX0FERF9WQU5DCSgweDAwOTgpCisjZGVmaW5lIFZQSUZfQ0gxX0JUTV9TVFJUX0FERF9WQU5DCSgweDAwOWMpCisjZGVmaW5lIFZQSUZfQ0gxX1NQX0NGRwkJCSgweDAwYTApCisjZGVmaW5lIFZQSUZfQ0gxX0lNR19BRERfT0ZTVAkJKDB4MDBhNCkKKyNkZWZpbmUgVlBJRl9DSDFfSEFOQ19BRERfT0ZTVAkJKDB4MDBhOCkKKyNkZWZpbmUgVlBJRl9DSDFfSF9DRkcJCQkoMHgwMGFjKQorI2RlZmluZSBWUElGX0NIMV9WX0NGR18wMAkJKDB4MDBiMCkKKyNkZWZpbmUgVlBJRl9DSDFfVl9DRkdfMDEJCSgweDAwYjQpCisjZGVmaW5lIFZQSUZfQ0gxX1ZfQ0ZHXzAyCQkoMHgwMGI4KQorI2RlZmluZSBWUElGX0NIMV9WX0NGR18wMwkJKDB4MDBiYykKKworI2RlZmluZSBWUElGX0NIMl9UT1BfU1RSVF9BRERfTFVNQQkoMHgwMGMwKQorI2RlZmluZSBWUElGX0NIMl9CVE1fU1RSVF9BRERfTFVNQQkoMHgwMGM0KQorI2RlZmluZSBWUElGX0NIMl9UT1BfU1RSVF9BRERfQ0hST01BCSgweDAwYzgpCisjZGVmaW5lIFZQSUZfQ0gyX0JUTV9TVFJUX0FERF9DSFJPTUEJKDB4MDBjYykKKyNkZWZpbmUgVlBJRl9DSDJfVE9QX1NUUlRfQUREX0hBTkMJKDB4MDBkMCkKKyNkZWZpbmUgVlBJRl9DSDJfQlRNX1NUUlRfQUREX0hBTkMJKDB4MDBkNCkKKyNkZWZpbmUgVlBJRl9DSDJfVE9QX1NUUlRfQUREX1ZBTkMJKDB4MDBkOCkKKyNkZWZpbmUgVlBJRl9DSDJfQlRNX1NUUlRfQUREX1ZBTkMJKDB4MDBkYykKKyNkZWZpbmUgVlBJRl9DSDJfU1BfQ0ZHCQkJKDB4MDBlMCkKKyNkZWZpbmUgVlBJRl9DSDJfSU1HX0FERF9PRlNUCQkoMHgwMGU0KQorI2RlZmluZSBWUElGX0NIMl9IQU5DX0FERF9PRlNUCQkoMHgwMGU4KQorI2RlZmluZSBWUElGX0NIMl9IX0NGRwkJCSgweDAwZWMpCisjZGVmaW5lIFZQSUZfQ0gyX1ZfQ0ZHXzAwCQkoMHgwMGYwKQorI2RlZmluZSBWUElGX0NIMl9WX0NGR18wMQkJKDB4MDBmNCkKKyNkZWZpbmUgVlBJRl9DSDJfVl9DRkdfMDIJCSgweDAwZjgpCisjZGVmaW5lIFZQSUZfQ0gyX1ZfQ0ZHXzAzCQkoMHgwMGZjKQorI2RlZmluZSBWUElGX0NIMl9IQU5DMF9TVFJUCQkoMHgwMTAwKQorI2RlZmluZSBWUElGX0NIMl9IQU5DMF9TSVpFCQkoMHgwMTA0KQorI2RlZmluZSBWUElGX0NIMl9IQU5DMV9TVFJUCQkoMHgwMTA4KQorI2RlZmluZSBWUElGX0NIMl9IQU5DMV9TSVpFCQkoMHgwMTBjKQorI2RlZmluZSBWUElGX0NIMl9WQU5DMF9TVFJUCQkoMHgwMTEwKQorI2RlZmluZSBWUElGX0NIMl9WQU5DMF9TSVpFCQkoMHgwMTE0KQorI2RlZmluZSBWUElGX0NIMl9WQU5DMV9TVFJUCQkoMHgwMTE4KQorI2RlZmluZSBWUElGX0NIMl9WQU5DMV9TSVpFCQkoMHgwMTFjKQorCisjZGVmaW5lIFZQSUZfQ0gzX1RPUF9TVFJUX0FERF9MVU1BCSgweDAxNDApCisjZGVmaW5lIFZQSUZfQ0gzX0JUTV9TVFJUX0FERF9MVU1BCSgweDAxNDQpCisjZGVmaW5lIFZQSUZfQ0gzX1RPUF9TVFJUX0FERF9DSFJPTUEJKDB4MDE0OCkKKyNkZWZpbmUgVlBJRl9DSDNfQlRNX1NUUlRfQUREX0NIUk9NQQkoMHgwMTRjKQorI2RlZmluZSBWUElGX0NIM19UT1BfU1RSVF9BRERfSEFOQwkoMHgwMTUwKQorI2RlZmluZSBWUElGX0NIM19CVE1fU1RSVF9BRERfSEFOQwkoMHgwMTU0KQorI2RlZmluZSBWUElGX0NIM19UT1BfU1RSVF9BRERfVkFOQwkoMHgwMTU4KQorI2RlZmluZSBWUElGX0NIM19CVE1fU1RSVF9BRERfVkFOQwkoMHgwMTVjKQorI2RlZmluZSBWUElGX0NIM19TUF9DRkcJCQkoMHgwMTYwKQorI2RlZmluZSBWUElGX0NIM19JTUdfQUREX09GU1QJCSgweDAxNjQpCisjZGVmaW5lIFZQSUZfQ0gzX0hBTkNfQUREX09GU1QJCSgweDAxNjgpCisjZGVmaW5lIFZQSUZfQ0gzX0hfQ0ZHCQkJKDB4MDE2YykKKyNkZWZpbmUgVlBJRl9DSDNfVl9DRkdfMDAJCSgweDAxNzApCisjZGVmaW5lIFZQSUZfQ0gzX1ZfQ0ZHXzAxCQkoMHgwMTc0KQorI2RlZmluZSBWUElGX0NIM19WX0NGR18wMgkJKDB4MDE3OCkKKyNkZWZpbmUgVlBJRl9DSDNfVl9DRkdfMDMJCSgweDAxN2MpCisjZGVmaW5lIFZQSUZfQ0gzX0hBTkMwX1NUUlQJCSgweDAxODApCisjZGVmaW5lIFZQSUZfQ0gzX0hBTkMwX1NJWkUJCSgweDAxODQpCisjZGVmaW5lIFZQSUZfQ0gzX0hBTkMxX1NUUlQJCSgweDAxODgpCisjZGVmaW5lIFZQSUZfQ0gzX0hBTkMxX1NJWkUJCSgweDAxOGMpCisjZGVmaW5lIFZQSUZfQ0gzX1ZBTkMwX1NUUlQJCSgweDAxOTApCisjZGVmaW5lIFZQSUZfQ0gzX1ZBTkMwX1NJWkUJCSgweDAxOTQpCisjZGVmaW5lIFZQSUZfQ0gzX1ZBTkMxX1NUUlQJCSgweDAxOTgpCisjZGVmaW5lIFZQSUZfQ0gzX1ZBTkMxX1NJWkUJCSgweDAxOWMpCisKKyNkZWZpbmUgVlBJRl9JT0RGVF9DVFJMCQkJKDB4MDFjMCkKKworLyogRnVuY3Rpb25zIGZvciBiaXQgTWFuaXB1bGF0aW9uICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnBpZl9zZXRfYml0KHUzMiByZWcsIHUzMiBiaXQpCit7CisJcmVndygocmVncihyZWcpKSB8ICgweDAxIDw8IGJpdCksIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cGlmX2Nscl9iaXQodTMyIHJlZywgdTMyIGJpdCkKK3sKKwlyZWd3KCgocmVncihyZWcpKSAmIH4oMHgwMSA8PCBiaXQpKSwgcmVnKTsKK30KKworLyogTWFjcm8gZm9yIEdlbmVyYXRpbmcgbWFzayAqLworI2lmZGVmIEdFTkVSQVRFX01BU0sKKyN1bmRlZiBHRU5FUkFURV9NQVNLCisjZW5kaWYKKworI2RlZmluZSBHRU5FUkFURV9NQVNLKGJpdHMsIHBvcykgXAorCQkoKCgoMHhGRkZGRkZGRikgPDwgKDMyIC0gYml0cykpID4+ICgzMiAtIGJpdHMpKSA8PCBwb3MpCisKKy8qIEJpdCBwb3NpdGlvbnMgaW4gdGhlIGNoYW5uZWwgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVlBJRl9DSF9EQVRBX01PREVfQklUCSgyKQorI2RlZmluZSBWUElGX0NIX1lDX01VWF9CSVQJKDMpCisjZGVmaW5lIFZQSUZfQ0hfU0RSX0ZNVF9CSVQJKDQpCisjZGVmaW5lIFZQSUZfQ0hfSEFOQ19FTl9CSVQJKDgpCisjZGVmaW5lIFZQSUZfQ0hfVkFOQ19FTl9CSVQJKDkpCisKKyNkZWZpbmUgVlBJRl9DQVBUVVJFX0NIX05JUAkoMTApCisjZGVmaW5lIFZQSUZfRElTUExBWV9DSF9OSVAJKDExKQorCisjZGVmaW5lIFZQSUZfRElTUExBWV9QSVhfRU5fQklUCSgxMCkKKworI2RlZmluZSBWUElGX0NIX0lOUFVUX0ZJRUxEX0ZSQU1FX0JJVAkoMTIpCisKKyNkZWZpbmUgVlBJRl9DSF9GSURfUE9MQVJJVFlfQklUCSgxNSkKKyNkZWZpbmUgVlBJRl9DSF9WX1ZBTElEX1BPTEFSSVRZX0JJVAkoMTQpCisjZGVmaW5lIFZQSUZfQ0hfSF9WQUxJRF9QT0xBUklUWV9CSVQJKDEzKQorI2RlZmluZSBWUElGX0NIX0RBVEFfV0lEVEhfQklUCQkoMjgpCisKKyNkZWZpbmUgVlBJRl9DSF9DTEtfRURHRV9DVFJMX0JJVAkoMzEpCisKKy8qIE1hc2sgdmFyaW91cyBsZW5ndGggKi8KKyNkZWZpbmUgVlBJRl9DSF9FQVZTQVZfTUFTSwlHRU5FUkFURV9NQVNLKDEzLCAwKQorI2RlZmluZSBWUElGX0NIX0xFTl9NQVNLCUdFTkVSQVRFX01BU0soMTIsIDApCisjZGVmaW5lIFZQSUZfQ0hfV0lEVEhfTUFTSwlHRU5FUkFURV9NQVNLKDEzLCAwKQorI2RlZmluZSBWUElGX0NIX0xFTl9TSElGVAkoMTYpCisKKy8qIFZQSUYgbWFza3MgZm9yIHJlZ2lzdGVycyAqLworI2RlZmluZSBWUElGX1JFUV9TSVpFX01BU0sJKDB4MWZmKQorCisvKiBiaXQgcG9zb3Rpb24gb2YgaW50ZXJydXB0IHZwaWZfY2hfaW50ciByZWdpc3RlciAqLworI2RlZmluZSBWUElGX0lOVEVOX0ZSQU1FX0NIMAkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVlBJRl9JTlRFTl9GUkFNRV9DSDEJKDB4MDAwMDAwMDIpCisjZGVmaW5lIFZQSUZfSU5URU5fRlJBTUVfQ0gyCSgweDAwMDAwMDA0KQorI2RlZmluZSBWUElGX0lOVEVOX0ZSQU1FX0NIMwkoMHgwMDAwMDAwOCkKKworLyogYml0IHBvc2l0aW9uIG9mIGNsb2NrIGFuZCBjaGFubmVsIGVuYWJsZSBpbiB2cGlmX2Nobl9jdHJsIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgVlBJRl9DSDBfQ0xLX0VOCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgVlBJRl9DSDBfRU4JCSgweDAwMDAwMDAxKQorI2RlZmluZSBWUElGX0NIMV9DTEtfRU4JCSgweDAwMDAwMDAyKQorI2RlZmluZSBWUElGX0NIMV9FTgkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIFZQSUZfQ0gyX0NMS19FTgkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIFZQSUZfQ0gyX0VOCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVlBJRl9DSDNfQ0xLX0VOCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgVlBJRl9DSDNfRU4JCSgweDAwMDAwMDAxKQorI2RlZmluZSBWUElGX0NIX0NMS19FTgkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIFZQSUZfQ0hfRU4JCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIFZQSUZfSU5UX1RPUAkoMHgwMCkKKyNkZWZpbmUgVlBJRl9JTlRfQk9UVE9NCSgweDAxKQorI2RlZmluZSBWUElGX0lOVF9CT1RICSgweDAyKQorCisjZGVmaW5lIFZQSUZfQ0gwX0lOVF9DVFJMX1NISUZUCSg2KQorI2RlZmluZSBWUElGX0NIMV9JTlRfQ1RSTF9TSElGVAkoNikKKyNkZWZpbmUgVlBJRl9DSDJfSU5UX0NUUkxfU0hJRlQJKDYpCisjZGVmaW5lIFZQSUZfQ0gzX0lOVF9DVFJMX1NISUZUCSg2KQorI2RlZmluZSBWUElGX0NIX0lOVF9DVFJMX1NISUZUCSg2KQorCisvKiBlbmFibGVkIGludGVycnVwdCBvbiBib3RoIHRoZSBmaWVsZHMgb24gdnBpZF9jaDBfY3RybCByZWdpc3RlciAqLworI2RlZmluZSBjaGFubmVsMF9pbnRyX2Fzc2VydCgpCShyZWd3KChyZWdyKFZQSUZfQ0gwX0NUUkwpfFwKKwkoVlBJRl9JTlRfQk9USCA8PCBWUElGX0NIMF9JTlRfQ1RSTF9TSElGVCkpLCBWUElGX0NIMF9DVFJMKSkKKworLyogZW5hYmxlZCBpbnRlcnJ1cHQgb24gYm90aCB0aGUgZmllbGRzIG9uIHZwaWRfY2gxX2N0cmwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgY2hhbm5lbDFfaW50cl9hc3NlcnQoKQkocmVndygocmVncihWUElGX0NIMV9DVFJMKXxcCisJKFZQSUZfSU5UX0JPVEggPDwgVlBJRl9DSDFfSU5UX0NUUkxfU0hJRlQpKSwgVlBJRl9DSDFfQ1RSTCkpCisKKy8qIGVuYWJsZWQgaW50ZXJydXB0IG9uIGJvdGggdGhlIGZpZWxkcyBvbiB2cGlkX2NoMF9jdHJsIHJlZ2lzdGVyICovCisjZGVmaW5lIGNoYW5uZWwyX2ludHJfYXNzZXJ0KCkgCShyZWd3KChyZWdyKFZQSUZfQ0gyX0NUUkwpfFwKKwkoVlBJRl9JTlRfQk9USCA8PCBWUElGX0NIMl9JTlRfQ1RSTF9TSElGVCkpLCBWUElGX0NIMl9DVFJMKSkKKworLyogZW5hYmxlZCBpbnRlcnJ1cHQgb24gYm90aCB0aGUgZmllbGRzIG9uIHZwaWRfY2gxX2N0cmwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgY2hhbm5lbDNfaW50cl9hc3NlcnQoKSAJKHJlZ3coKHJlZ3IoVlBJRl9DSDNfQ1RSTCl8XAorCShWUElGX0lOVF9CT1RIIDw8IFZQSUZfQ0gzX0lOVF9DVFJMX1NISUZUKSksIFZQSUZfQ0gzX0NUUkwpKQorCisjZGVmaW5lIFZQSUZfQ0hfRklEX01BU0sJKDB4MjApCisjZGVmaW5lIFZQSUZfQ0hfRklEX1NISUZUCSg1KQorCisjZGVmaW5lIFZQSUZfTlRTQ19WQklfU1RBUlRfRklFTEQwCSgxKQorI2RlZmluZSBWUElGX05UU0NfVkJJX1NUQVJUX0ZJRUxEMQkoMjYzKQorI2RlZmluZSBWUElGX1BBTF9WQklfU1RBUlRfRklFTEQwCSg2MjQpCisjZGVmaW5lIFZQSUZfUEFMX1ZCSV9TVEFSVF9GSUVMRDEJKDMxMSkKKworI2RlZmluZSBWUElGX05UU0NfSEJJX1NUQVJUX0ZJRUxEMAkoMSkKKyNkZWZpbmUgVlBJRl9OVFNDX0hCSV9TVEFSVF9GSUVMRDEJKDI2MykKKyNkZWZpbmUgVlBJRl9QQUxfSEJJX1NUQVJUX0ZJRUxEMAkoNjI0KQorI2RlZmluZSBWUElGX1BBTF9IQklfU1RBUlRfRklFTEQxCSgzMTEpCisKKyNkZWZpbmUgVlBJRl9OVFNDX1ZCSV9DT1VOVF9GSUVMRDAJKDIwKQorI2RlZmluZSBWUElGX05UU0NfVkJJX0NPVU5UX0ZJRUxEMQkoMTkpCisjZGVmaW5lIFZQSUZfUEFMX1ZCSV9DT1VOVF9GSUVMRDAJKDI0KQorI2RlZmluZSBWUElGX1BBTF9WQklfQ09VTlRfRklFTEQxCSgyNSkKKworI2RlZmluZSBWUElGX05UU0NfSEJJX0NPVU5UX0ZJRUxEMAkoMjYzKQorI2RlZmluZSBWUElGX05UU0NfSEJJX0NPVU5UX0ZJRUxEMQkoMjYyKQorI2RlZmluZSBWUElGX1BBTF9IQklfQ09VTlRfRklFTEQwCSgzMTIpCisjZGVmaW5lIFZQSUZfUEFMX0hCSV9DT1VOVF9GSUVMRDEJKDMxMykKKworI2RlZmluZSBWUElGX05UU0NfVkJJX1NBTVBMRVNfUEVSX0xJTkUJKDcyMCkKKyNkZWZpbmUgVlBJRl9QQUxfVkJJX1NBTVBMRVNfUEVSX0xJTkUJKDcyMCkKKyNkZWZpbmUgVlBJRl9OVFNDX0hCSV9TQU1QTEVTX1BFUl9MSU5FCSgyNjgpCisjZGVmaW5lIFZQSUZfUEFMX0hCSV9TQU1QTEVTX1BFUl9MSU5FCSgyODApCisKKyNkZWZpbmUgVlBJRl9DSF9WQU5DX0VOCQkJKDB4MjApCisjZGVmaW5lIFZQSUZfRE1BX1JFUV9TSVpFCQkoMHgwODApCisjZGVmaW5lIFZQSUZfRU1VTEFUSU9OX0RJU0FCTEUJCSgweDAxKQorCitleHRlcm4gdTggaXJxX3ZwaWZfY2FwdHVyZV9jaGFubmVsW1ZQSUZfTlVNX0NIQU5ORUxTXTsKKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGNoYW5uZWwwICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2NoYW5uZWwwKGludCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkKKwkJcmVndygocmVncihWUElGX0NIMF9DVFJMKSB8IChWUElGX0NIMF9FTikpLCBWUElGX0NIMF9DVFJMKTsKKwllbHNlCisJCXJlZ3coKHJlZ3IoVlBJRl9DSDBfQ1RSTCkgJiAoflZQSUZfQ0gwX0VOKSksIFZQSUZfQ0gwX0NUUkwpOworfQorCisvKiBpbmxpbmUgZnVuY3Rpb24gdG8gZW5hYmxlL2Rpc2FibGUgY2hhbm5lbDEgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY2hhbm5lbDEoaW50IGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKQorCQlyZWd3KChyZWdyKFZQSUZfQ0gxX0NUUkwpIHwgKFZQSUZfQ0gxX0VOKSksIFZQSUZfQ0gxX0NUUkwpOworCWVsc2UKKwkJcmVndygocmVncihWUElGX0NIMV9DVFJMKSAmICh+VlBJRl9DSDFfRU4pKSwgVlBJRl9DSDFfQ1RSTCk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBlbmFibGUgaW50ZXJydXB0IGZvciBjaGFubmVsMCAqLworc3RhdGljIGlubGluZSB2b2lkIGNoYW5uZWwwX2ludHJfZW5hYmxlKGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cGlmX2xvY2ssIGZsYWdzKTsKKworCWlmIChlbmFibGUpIHsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSB8IDB4MTApLCBWUElGX0lOVEVOKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOX1NFVCkgfCAweDEwKSwgVlBJRl9JTlRFTl9TRVQpOworCisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTikgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMCksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gwKSwKKwkJCQkJCQlWUElGX0lOVEVOX1NFVCk7CisJfSBlbHNlIHsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSAmICh+VlBJRl9JTlRFTl9GUkFNRV9DSDApKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDApLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBpZl9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBlbmFibGUgaW50ZXJydXB0IGZvciBjaGFubmVsMSAqLworc3RhdGljIGlubGluZSB2b2lkIGNoYW5uZWwxX2ludHJfZW5hYmxlKGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cGlmX2xvY2ssIGZsYWdzKTsKKworCWlmIChlbmFibGUpIHsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSB8IDB4MTApLCBWUElGX0lOVEVOKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOX1NFVCkgfCAweDEwKSwgVlBJRl9JTlRFTl9TRVQpOworCisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTikgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMSksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gxKSwKKwkJCQkJCQlWUElGX0lOVEVOX1NFVCk7CisJfSBlbHNlIHsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSAmICh+VlBJRl9JTlRFTl9GUkFNRV9DSDEpKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDEpLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBpZl9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBzZXQgYnVmZmVyIGFkZHJlc3NlcyBpbiBjYXNlIG9mIFkvQyBub24gbXV4IG1vZGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDBfc2V0X3ZpZGVvYnVmX2FkZHJfeWNfbm11eCh1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9sdW1hLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfY2hyb21hLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDBfVE9QX1NUUlRfQUREX0xVTUEpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDBfQlRNX1NUUlRfQUREX0xVTUEpOworCXJlZ3codG9wX3N0cnRfY2hyb21hLCBWUElGX0NIMV9UT1BfU1RSVF9BRERfQ0hST01BKTsKKwlyZWd3KGJ0bV9zdHJ0X2Nocm9tYSwgVlBJRl9DSDFfQlRNX1NUUlRfQUREX0NIUk9NQSk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBzZXQgYnVmZmVyIGFkZHJlc3NlcyBpbiBWUElGIHJlZ2lzdGVycyBmb3IgdmlkZW8gZGF0YSAqLworc3RhdGljIGlubGluZSB2b2lkIGNoMF9zZXRfdmlkZW9idWZfYWRkcih1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2Nocm9tYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDBfVE9QX1NUUlRfQUREX0xVTUEpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDBfQlRNX1NUUlRfQUREX0xVTUEpOworCXJlZ3codG9wX3N0cnRfY2hyb21hLCBWUElGX0NIMF9UT1BfU1RSVF9BRERfQ0hST01BKTsKKwlyZWd3KGJ0bV9zdHJ0X2Nocm9tYSwgVlBJRl9DSDBfQlRNX1NUUlRfQUREX0NIUk9NQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDFfc2V0X3ZpZGVvYnVmX2FkZHIodW5zaWduZWQgbG9uZyB0b3Bfc3RydF9sdW1hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9sdW1hLAorCQkJCQkgdW5zaWduZWQgbG9uZyB0b3Bfc3RydF9jaHJvbWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2Nocm9tYSkKK3sKKworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDFfVE9QX1NUUlRfQUREX0xVTUEpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDFfQlRNX1NUUlRfQUREX0xVTUEpOworCXJlZ3codG9wX3N0cnRfY2hyb21hLCBWUElGX0NIMV9UT1BfU1RSVF9BRERfQ0hST01BKTsKKwlyZWd3KGJ0bV9zdHJ0X2Nocm9tYSwgVlBJRl9DSDFfQlRNX1NUUlRfQUREX0NIUk9NQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDBfc2V0X3ZiaV9hZGRyKHVuc2lnbmVkIGxvbmcgdG9wX3ZiaSwKKwl1bnNpZ25lZCBsb25nIGJ0bV92YmksIHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiKQoreworCXJlZ3codG9wX3ZiaSwgVlBJRl9DSDBfVE9QX1NUUlRfQUREX1ZBTkMpOworCXJlZ3coYnRtX3ZiaSwgVlBJRl9DSDBfQlRNX1NUUlRfQUREX1ZBTkMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2gwX3NldF9oYmlfYWRkcih1bnNpZ25lZCBsb25nIHRvcF92YmksCisJdW5zaWduZWQgbG9uZyBidG1fdmJpLCB1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYikKK3sKKwlyZWd3KHRvcF92YmksIFZQSUZfQ0gwX1RPUF9TVFJUX0FERF9IQU5DKTsKKwlyZWd3KGJ0bV92YmksIFZQSUZfQ0gwX0JUTV9TVFJUX0FERF9IQU5DKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoMV9zZXRfdmJpX2FkZHIodW5zaWduZWQgbG9uZyB0b3BfdmJpLAorCXVuc2lnbmVkIGxvbmcgYnRtX3ZiaSwgdW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpCit7CisJcmVndyh0b3BfdmJpLCBWUElGX0NIMV9UT1BfU1RSVF9BRERfVkFOQyk7CisJcmVndyhidG1fdmJpLCBWUElGX0NIMV9CVE1fU1RSVF9BRERfVkFOQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDFfc2V0X2hiaV9hZGRyKHVuc2lnbmVkIGxvbmcgdG9wX3ZiaSwKKwl1bnNpZ25lZCBsb25nIGJ0bV92YmksIHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiKQoreworCXJlZ3codG9wX3ZiaSwgVlBJRl9DSDFfVE9QX1NUUlRfQUREX0hBTkMpOworCXJlZ3coYnRtX3ZiaSwgVlBJRl9DSDFfQlRNX1NUUlRfQUREX0hBTkMpOworfQorCisvKiBJbmxpbmUgZnVuY3Rpb24gdG8gZW5hYmxlIHJhdyB2YmkgaW4gdGhlIGdpdmVuIGNoYW5uZWwgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3Jhd19mZWF0dXJlKHU4IGNoYW5uZWxfaWQsIHU4IGluZGV4KQoreworCXUzMiBjdHJsX3JlZzsKKwlpZiAoMCA9PSBjaGFubmVsX2lkKQorCQljdHJsX3JlZyA9IFZQSUZfQ0gwX0NUUkw7CisJZWxzZQorCQljdHJsX3JlZyA9IFZQSUZfQ0gxX0NUUkw7CisKKwlpZiAoMSA9PSBpbmRleCkKKwkJdnBpZl9jbHJfYml0KGN0cmxfcmVnLCBWUElGX0NIX1ZBTkNfRU5fQklUKTsKKwllbHNlCisJCXZwaWZfY2xyX2JpdChjdHJsX3JlZywgVlBJRl9DSF9IQU5DX0VOX0JJVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcmF3X2ZlYXR1cmUodTggY2hhbm5lbF9pZCwgdTggaW5kZXgpCit7CisJdTMyIGN0cmxfcmVnOworCWlmICgwID09IGNoYW5uZWxfaWQpCisJCWN0cmxfcmVnID0gVlBJRl9DSDBfQ1RSTDsKKwllbHNlCisJCWN0cmxfcmVnID0gVlBJRl9DSDFfQ1RSTDsKKworCWlmICgxID09IGluZGV4KQorCQl2cGlmX3NldF9iaXQoY3RybF9yZWcsIFZQSUZfQ0hfVkFOQ19FTl9CSVQpOworCWVsc2UKKwkJdnBpZl9zZXRfYml0KGN0cmxfcmVnLCBWUElGX0NIX0hBTkNfRU5fQklUKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGNoYW5uZWwyICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2NoYW5uZWwyKGludCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkgeworCQlyZWd3KChyZWdyKFZQSUZfQ0gyX0NUUkwpIHwgKFZQSUZfQ0gyX0NMS19FTikpLCBWUElGX0NIMl9DVFJMKTsKKwkJcmVndygocmVncihWUElGX0NIMl9DVFJMKSB8IChWUElGX0NIMl9FTikpLCBWUElGX0NIMl9DVFJMKTsKKwl9IGVsc2UgeworCQlyZWd3KChyZWdyKFZQSUZfQ0gyX0NUUkwpICYgKH5WUElGX0NIMl9DTEtfRU4pKSwgVlBJRl9DSDJfQ1RSTCk7CisJCXJlZ3coKHJlZ3IoVlBJRl9DSDJfQ1RSTCkgJiAoflZQSUZfQ0gyX0VOKSksIFZQSUZfQ0gyX0NUUkwpOworCX0KK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGNoYW5uZWwzICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2NoYW5uZWwzKGludCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkgeworCQlyZWd3KChyZWdyKFZQSUZfQ0gzX0NUUkwpIHwgKFZQSUZfQ0gzX0NMS19FTikpLCBWUElGX0NIM19DVFJMKTsKKwkJcmVndygocmVncihWUElGX0NIM19DVFJMKSB8IChWUElGX0NIM19FTikpLCBWUElGX0NIM19DVFJMKTsKKwl9IGVsc2UgeworCQlyZWd3KChyZWdyKFZQSUZfQ0gzX0NUUkwpICYgKH5WUElGX0NIM19DTEtfRU4pKSwgVlBJRl9DSDNfQ1RSTCk7CisJCXJlZ3coKHJlZ3IoVlBJRl9DSDNfQ1RSTCkgJiAoflZQSUZfQ0gzX0VOKSksIFZQSUZfQ0gzX0NUUkwpOworCX0KK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwyICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbm5lbDJfaW50cl9lbmFibGUoaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwaWZfbG9jaywgZmxhZ3MpOworCisJaWYgKGVuYWJsZSkgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pIHwgMHgxMCksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IDB4MTApLCBWUElGX0lOVEVOX1NFVCk7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTikgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMiksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gyKSwKKwkJCQkJCQlWUElGX0lOVEVOX1NFVCk7CisJfSBlbHNlIHsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSAmICh+VlBJRl9JTlRFTl9GUkFNRV9DSDIpKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDIpLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBpZl9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBlbmFibGUgaW50ZXJydXB0IGZvciBjaGFubmVsMyAqLworc3RhdGljIGlubGluZSB2b2lkIGNoYW5uZWwzX2ludHJfZW5hYmxlKGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cGlmX2xvY2ssIGZsYWdzKTsKKworCWlmIChlbmFibGUpIHsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSB8IDB4MTApLCBWUElGX0lOVEVOKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOX1NFVCkgfCAweDEwKSwgVlBJRl9JTlRFTl9TRVQpOworCisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTikgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMyksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gzKSwKKwkJCQkJCQlWUElGX0lOVEVOX1NFVCk7CisJfSBlbHNlIHsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSAmICh+VlBJRl9JTlRFTl9GUkFNRV9DSDMpKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDMpLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBpZl9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBlbmFibGUgcmF3IHZiaSBkYXRhIGZvciBjaGFubmVsMiAqLworc3RhdGljIGlubGluZSB2b2lkIGNoYW5uZWwyX3Jhd19lbmFibGUoaW50IGVuYWJsZSwgdTggaW5kZXgpCit7CisJdTMyIG1hc2s7CisKKwlpZiAoMSA9PSBpbmRleCkKKwkJbWFzayA9IFZQSUZfQ0hfVkFOQ19FTl9CSVQ7CisJZWxzZQorCQltYXNrID0gVlBJRl9DSF9IQU5DX0VOX0JJVDsKKworCWlmIChlbmFibGUpCisJCXZwaWZfc2V0X2JpdChWUElGX0NIMl9DVFJMLCBtYXNrKTsKKwllbHNlCisJCXZwaWZfY2xyX2JpdChWUElGX0NIMl9DVFJMLCBtYXNrKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZSByYXcgdmJpIGRhdGEgZm9yIGNoYW5uZWwzKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFubmVsM19yYXdfZW5hYmxlKGludCBlbmFibGUsIHU4IGluZGV4KQoreworCXUzMiBtYXNrOworCisJaWYgKDEgPT0gaW5kZXgpCisJCW1hc2sgPSBWUElGX0NIX1ZBTkNfRU5fQklUOworCWVsc2UKKwkJbWFzayA9IFZQSUZfQ0hfSEFOQ19FTl9CSVQ7CisKKwlpZiAoZW5hYmxlKQorCQl2cGlmX3NldF9iaXQoVlBJRl9DSDNfQ1RSTCwgbWFzayk7CisJZWxzZQorCQl2cGlmX2Nscl9iaXQoVlBJRl9DSDNfQ1RSTCwgbWFzayk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBzZXQgYnVmZmVyIGFkZHJlc3NlcyBpbiBjYXNlIG9mIFkvQyBub24gbXV4IG1vZGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDJfc2V0X3ZpZGVvYnVmX2FkZHJfeWNfbm11eCh1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9sdW1hLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfY2hyb21hLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDJfVE9QX1NUUlRfQUREX0xVTUEpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDJfQlRNX1NUUlRfQUREX0xVTUEpOworCXJlZ3codG9wX3N0cnRfY2hyb21hLCBWUElGX0NIM19UT1BfU1RSVF9BRERfQ0hST01BKTsKKwlyZWd3KGJ0bV9zdHJ0X2Nocm9tYSwgVlBJRl9DSDNfQlRNX1NUUlRfQUREX0NIUk9NQSk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBzZXQgYnVmZmVyIGFkZHJlc3NlcyBpbiBWUElGIHJlZ2lzdGVycyBmb3IgdmlkZW8gZGF0YSAqLworc3RhdGljIGlubGluZSB2b2lkIGNoMl9zZXRfdmlkZW9idWZfYWRkcih1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2Nocm9tYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDJfVE9QX1NUUlRfQUREX0xVTUEpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDJfQlRNX1NUUlRfQUREX0xVTUEpOworCXJlZ3codG9wX3N0cnRfY2hyb21hLCBWUElGX0NIMl9UT1BfU1RSVF9BRERfQ0hST01BKTsKKwlyZWd3KGJ0bV9zdHJ0X2Nocm9tYSwgVlBJRl9DSDJfQlRNX1NUUlRfQUREX0NIUk9NQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDNfc2V0X3ZpZGVvYnVmX2FkZHIodW5zaWduZWQgbG9uZyB0b3Bfc3RydF9sdW1hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9sdW1hLAorCQkJCQkgdW5zaWduZWQgbG9uZyB0b3Bfc3RydF9jaHJvbWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2Nocm9tYSkKK3sKKwlyZWd3KHRvcF9zdHJ0X2x1bWEsIFZQSUZfQ0gzX1RPUF9TVFJUX0FERF9MVU1BKTsKKwlyZWd3KGJ0bV9zdHJ0X2x1bWEsIFZQSUZfQ0gzX0JUTV9TVFJUX0FERF9MVU1BKTsKKwlyZWd3KHRvcF9zdHJ0X2Nocm9tYSwgVlBJRl9DSDNfVE9QX1NUUlRfQUREX0NIUk9NQSk7CisJcmVndyhidG1fc3RydF9jaHJvbWEsIFZQSUZfQ0gzX0JUTV9TVFJUX0FERF9DSFJPTUEpOworfQorCisvKiBpbmxpbmUgZnVuY3Rpb24gdG8gc2V0IGJ1ZmZlciBhZGRyZXNzZXMgaW4gVlBJRiByZWdpc3RlcnMgZm9yIHZiaSBkYXRhICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2gyX3NldF92YmlfYWRkcih1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2Nocm9tYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDJfVE9QX1NUUlRfQUREX1ZBTkMpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDJfQlRNX1NUUlRfQUREX1ZBTkMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2gzX3NldF92YmlfYWRkcih1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2Nocm9tYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDNfVE9QX1NUUlRfQUREX1ZBTkMpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDNfQlRNX1NUUlRfQUREX1ZBTkMpOworfQorCisjZGVmaW5lIFZQSUZfTUFYX05BTUUJKDMwKQorCisvKiBUaGlzIHN0cnVjdHVyZSB3aWxsIHN0b3JlIHNpemUgcGFyYW1ldGVycyBhcyBwZXIgdGhlIG1vZGUgc2VsZWN0ZWQgYnkgdXNlciAqLworc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zIHsKKwljaGFyIG5hbWVbVlBJRl9NQVhfTkFNRV07CS8qIE5hbWUgb2YgdGhlIG1vZGUgKi8KKwl1MTYgd2lkdGg7CQkJLyogSW5kaWNhdGVzIHdpZHRoIG9mIHRoZSBpbWFnZSAqLworCXUxNiBoZWlnaHQ7CQkJLyogSW5kaWNhdGVzIGhlaWdodCBvZiB0aGUgaW1hZ2UgKi8KKwl1OCBmcHM7CisJdTggZnJtX2ZtdDsJCQkvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGludGVybGFjZWQKKwkJCQkJICogb3IgcHJvZ3Jlc3NpdmUgZm9ybWF0ICovCisJdTggeWNtdXhfbW9kZTsJCQkvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIG1vZGUgcmVxdWlyZXMKKwkJCQkJICogc2luZ2xlIG9yIHR3byBjaGFubmVscyAqLworCXUxNiBlYXYyc2F2OwkJCS8qIGxlbmd0aCBvZiBzYXYgMiBlYXYgKi8KKwl1MTYgc2F2MmVhdjsJCQkvKiBsZW5ndGggb2Ygc2F2IDIgZWF2ICovCisJdTE2IGwxLCBsMywgbDUsIGw3LCBsOSwgbDExOwkvKiBPdGhlciBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbnMgKi8KKwl1MTYgdnNpemU7CQkJLyogVmVydGljYWwgc2l6ZSBvZiB0aGUgaW1hZ2UgKi8KKwl1OCBjYXB0dXJlX2Zvcm1hdDsJCS8qIEluZGljYXRlcyB3aGV0aGVyIGNhcHR1cmUgZm9ybWF0CisJCQkJCSAqIGlzIGluIEJUIG9yIGluIENDRC9DTU9TICovCisJdTggIHZiaV9zdXBwb3J0ZWQ7CQkvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIG1vZGUKKwkJCQkJICogc3VwcG9ydHMgY2FwdHVyaW5nIHZiaSBvciBub3QgKi8KKwl1OCBoZF9zZDsKKwl2NGwyX3N0ZF9pZCBzdGRpZDsKK307CisKK3N0cnVjdCB2cGlmX3ZpZGVvX3BhcmFtczsKK3N0cnVjdCB2cGlmX3BhcmFtczsKK3N0cnVjdCB2cGlmX3ZiaV9wYXJhbXM7CisKK2ludCB2cGlmX3NldF92aWRlb19wYXJhbXMoc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmcGFyYW1zLCB1OCBjaGFubmVsX2lkKTsKK3ZvaWQgdnBpZl9zZXRfdmJpX2Rpc3BsYXlfcGFyYW1zKHN0cnVjdCB2cGlmX3ZiaV9wYXJhbXMgKnZiaXBhcmFtcywKKwkJCQkJCQl1OCBjaGFubmVsX2lkKTsKK2ludCB2cGlmX2NoYW5uZWxfZ2V0ZmlkKHU4IGNoYW5uZWxfaWQpOworCitlbnVtIGRhdGFfc2l6ZSB7CisJXzhCSVRTID0gMCwKKwlfMTBCSVRTLAorCV8xMkJJVFMsCit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIHZwaWYgcGFyYW1ldGVycyBmb3IgcmF3IHZiaSBkYXRhICovCitzdHJ1Y3QgdnBpZl92YmlfcGFyYW1zIHsKKwlfX3UzMiBoc3RhcnQwOyAgLyogSG9yaXpvbnRhbCBzdGFydCBvZiByYXcgdmJpIGRhdGEgZm9yIGZpcnN0IGZpZWxkICovCisJX191MzIgdnN0YXJ0MDsgIC8qIFZlcnRpY2FsIHN0YXJ0IG9mIHJhdyB2YmkgZGF0YSBmb3IgZmlyc3QgZmllbGQgKi8KKwlfX3UzMiBoc2l6ZTA7ICAgLyogSG9yaXpvbnRhbCBzaXplIG9mIHJhdyB2YmkgZGF0YSBmb3IgZmlyc3QgZmllbGQgKi8KKwlfX3UzMiB2c2l6ZTA7ICAgLyogVmVydGljYWwgc2l6ZSBvZiByYXcgdmJpIGRhdGEgZm9yIGZpcnN0IGZpZWxkICovCisJX191MzIgaHN0YXJ0MTsgIC8qIEhvcml6b250YWwgc3RhcnQgb2YgcmF3IHZiaSBkYXRhIGZvciBzZWNvbmQgZmllbGQgKi8KKwlfX3UzMiB2c3RhcnQxOyAgLyogVmVydGljYWwgc3RhcnQgb2YgcmF3IHZiaSBkYXRhIGZvciBzZWNvbmQgZmllbGQgKi8KKwlfX3UzMiBoc2l6ZTE7ICAgLyogSG9yaXpvbnRhbCBzaXplIG9mIHJhdyB2YmkgZGF0YSBmb3Igc2Vjb25kIGZpZWxkICovCisJX191MzIgdnNpemUxOyAgIC8qIFZlcnRpY2FsIHNpemUgb2YgcmF3IHZiaSBkYXRhIGZvciBzZWNvbmQgZmllbGQgKi8KK307CisKKy8qIHN0cnVjdHVyZSBmb3IgdnBpZiBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgdnBpZl92aWRlb19wYXJhbXMgeworCV9fdTggc3RvcmFnZV9tb2RlOwkvKiBJbmRpY2F0ZXMgZmllbGQgb3IgZnJhbWUgbW9kZSAqLworCXVuc2lnbmVkIGxvbmcgaHBpdGNoOworCXY0bDJfc3RkX2lkIHN0ZGlkOworfTsKKworc3RydWN0IHZwaWZfcGFyYW1zIHsKKwlzdHJ1Y3QgdnBpZl9pbnRlcmZhY2UgaWZhY2U7CisJc3RydWN0IHZwaWZfdmlkZW9fcGFyYW1zIHZpZGVvX3BhcmFtczsKKwlzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgc3RkX2luZm87CisJdW5pb24gcGFyYW0geworCQlzdHJ1Y3QgdnBpZl92YmlfcGFyYW1zCXZiaV9wYXJhbXM7CisJCWVudW0gZGF0YV9zaXplIGRhdGFfc3o7CisJfSBwYXJhbXM7Cit9OworCisjZW5kaWYJCQkJLyogRW5kIG9mICNpZm5kZWYgVlBJRl9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQ3ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5jCkBAIC0wLDAgKzEsMjE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBUT0RPIDogYWRkIHN1cHBvcnQgZm9yIFZCSSAmIEhCSSBkYXRhIHNlcnZpY2UKKyAqCSAgYWRkIHN0YXRpYyBidWZmZXIgYWxsb2NhdGlvbgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKKyNpbmNsdWRlICJ2cGlmX2NhcHR1cmUuaCIKKyNpbmNsdWRlICJ2cGlmLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiVEkgRGFWaW5jaSBWUElGIENhcHR1cmUgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgdnBpZl9lcnIoZm10LCBhcmcuLi4pCXY0bDJfZXJyKCZ2cGlmX29iai52NGwyX2RldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHZwaWZfZGJnKGxldmVsLCBkZWJ1ZywgZm10LCBhcmcuLi4pCVwKKwkJdjRsMl9kYmcobGV2ZWwsIGRlYnVnLCAmdnBpZl9vYmoudjRsMl9kZXYsIGZtdCwgIyMgYXJnKQorCitzdGF0aWMgaW50IGRlYnVnID0gMTsKK3N0YXRpYyB1MzIgY2gwX251bWJ1ZmZlcnMgPSAzOworc3RhdGljIHUzMiBjaDFfbnVtYnVmZmVycyA9IDM7CitzdGF0aWMgdTMyIGNoMF9idWZzaXplID0gMTkyMCAqIDEwODAgKiAyOworc3RhdGljIHUzMiBjaDFfYnVmc2l6ZSA9IDcyMCAqIDU3NiAqIDI7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShjaDBfbnVtYnVmZmVycywgdWludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2gxX251bWJ1ZmZlcnMsIHVpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNoMF9idWZzaXplLCB1aW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjaDFfYnVmc2l6ZSwgdWludCwgU19JUlVHTyk7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAwLTEiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gyX251bWJ1ZmZlcnMsICJDaGFubmVsMCBidWZmZXIgY291bnQgKGRlZmF1bHQ6MykiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gzX251bWJ1ZmZlcnMsICJDaGFubmVsMSBidWZmZXIgY291bnQgKGRlZmF1bHQ6MykiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gyX2J1ZnNpemUsICJDaGFubmVsMCBidWZmZXIgc2l6ZSAoZGVmYXVsdDoxOTIwIHggMTA4MCB4IDIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGNoM19idWZzaXplLCAiQ2hhbm5lbDEgYnVmZmVyIHNpemUgKGRlZmF1bHQ6NzIwIHggNTc2IHggMikiKTsKKworc3RhdGljIHN0cnVjdCB2cGlmX2NvbmZpZ19wYXJhbXMgY29uZmlnX3BhcmFtcyA9IHsKKwkubWluX251bWJ1ZmZlcnMgPSAzLAorCS5udW1idWZmZXJzWzBdID0gMywKKwkubnVtYnVmZmVyc1sxXSA9IDMsCisJLm1pbl9idWZzaXplWzBdID0gNzIwICogNDgwICogMiwKKwkubWluX2J1ZnNpemVbMV0gPSA3MjAgKiA0ODAgKiAyLAorCS5jaGFubmVsX2J1ZnNpemVbMF0gPSAxOTIwICogMTA4MCAqIDIsCisJLmNoYW5uZWxfYnVmc2l6ZVsxXSA9IDcyMCAqIDU3NiAqIDIsCit9OworCisvKiBnbG9iYWwgdmFyaWFibGVzICovCitzdGF0aWMgc3RydWN0IHZwaWZfZGV2aWNlIHZwaWZfb2JqID0geyB7TlVMTH0gfTsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICp2cGlmX2RldjsKKworLyoqCisgKiBjaF9wYXJhbXM6IHZpZGVvIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdnBpZgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zIGNoX3BhcmFtc1tdID0geworCXsKKwkJIk5UU0NfTSIsIDcyMCwgNDgwLCAzMCwgMCwgMSwgMjY4LCAxNDQwLCAxLCAyMywgMjYzLCAyNjYsCisJCTI4NiwgNTI1LCA1MjUsIDAsIDEsIDAsIFY0TDJfU1REXzUyNV82MCwKKwl9LAorCXsKKwkJIlBBTF9CREdISUsiLCA3MjAsIDU3NiwgMjUsIDAsIDEsIDI4MCwgMTQ0MCwgMSwgMjMsIDMxMSwgMzEzLAorCQkzMzYsIDYyNCwgNjI1LCAwLCAxLCAwLCBWNEwyX1NURF82MjVfNTAsCisJfSwKK307CisKKy8qKgorICogdnBpZl91c2VydmlydF90b19waHlzIDogdHJhbnNsYXRlIHVzZXIvdmlydHVhbCBhZGRyZXNzIHRvIHBoeSBhZGRyZXNzCisgKiBAdmlydHA6IHVzZXIvdmlydHVhbCBhZGRyZXNzCisgKgorICogVGhpcyBpbmxpbmUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IHVzZXIgc3BhY2UgdmlydHVhbCBhZGRyZXNzIHRvCisgKiBwaHlzaWNhbCBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIHUzMiB2cGlmX3VzZXJ2aXJ0X3RvX3BoeXModTMyIHZpcnRwKQoreworCXVuc2lnbmVkIGxvbmcgcGh5c3AgPSAwOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgdmlydHApOworCisJLyogRm9yIGtlcm5lbCBkaXJlY3QtbWFwcGVkIG1lbW9yeSwgdGFrZSB0aGUgZWFzeSB3YXkgKi8KKwlpZiAodmlydHAgPj0gUEFHRV9PRkZTRVQpCisJCXBoeXNwID0gdmlydF90b19waHlzKCh2b2lkICopdmlydHApOworCWVsc2UgaWYgKHZtYSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0lPKSAmJiAodm1hLT52bV9wZ29mZikpCisJCS8qKgorCQkgKiB0aGlzIHdpbGwgY2F0Y2gsIGtlcm5lbC1hbGxvY2F0ZWQsIG1tYXBlZC10by11c2VybW9kZQorCQkgKiBhZGRyZXNzZXMKKwkJICovCisJCXBoeXNwID0gKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkgKyAodmlydHAgLSB2bWEtPnZtX3N0YXJ0KTsKKwllbHNlIHsKKwkJLyogb3RoZXJ3aXNlLCB1c2UgZ2V0X3VzZXJfcGFnZXMoKSBmb3IgZ2VuZXJhbCB1c2VybGFuZCBwYWdlcyAqLworCQlpbnQgcmVzLCBucl9wYWdlcyA9IDE7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZXM7CisKKwkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJCXJlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQkJCSAgICAgdmlydHAsIG5yX3BhZ2VzLCAxLCAwLCAmcGFnZXMsIE5VTEwpOworCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJCWlmIChyZXMgPT0gbnJfcGFnZXMpCisJCQlwaHlzcCA9IF9fcGEocGFnZV9hZGRyZXNzKCZwYWdlc1swXSkgKworCQkJCSAgICAgKHZpcnRwICYgflBBR0VfTUFTSykpOworCQllbHNlIHsKKwkJCXZwaWZfZXJyKCJnZXRfdXNlcl9wYWdlcyBmYWlsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIHBoeXNwOworfQorCisvKioKKyAqIGJ1ZmZlcl9wcmVwYXJlIDogIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBidWZmZXIgcHJlcGFyZQorICogQHEgOiBidWZmZXIgcXVldWUgcHRyCisgKiBAdmI6IHB0ciB0byB2aWRlbyBidWZmZXIKKyAqIEBmaWVsZDogZmllbGQgaW5mbworICoKKyAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBidWZmZXIgcHJlcGFyZSB3aGVuIHZpZGVvYnVmX3FidWYoKQorICogZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGUgYnVmZmVyIGlzIHByZXBhcmVkIGFuZCB1c2VyIHNwYWNlIHZpcnR1YWwgYWRkcmVzcworICogb3IgdXNlciBhZGRyZXNzIGlzIGNvbnZlcnRlZCBpbnRvICBwaHlzaWNhbCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9idWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCS8qIEdldCB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0IGFuZCBjaGFubmVsIG9iamVjdCAqLworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9idWZmZXJfcHJlcGFyZVxuIik7CisKKwljb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCS8qIElmIGJ1ZmZlciBpcyBub3QgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgKi8KKwlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSB2Yi0+c3RhdGUpIHsKKwkJdmItPndpZHRoID0gY29tbW9uLT53aWR0aDsKKwkJdmItPmhlaWdodCA9IGNvbW1vbi0+aGVpZ2h0OworCQl2Yi0+c2l6ZSA9IHZiLT53aWR0aCAqIHZiLT5oZWlnaHQ7CisJCXZiLT5maWVsZCA9IGZpZWxkOworCX0KKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwkvKioKKwkgKiBpZiB1c2VyIHBvaW50ZXIgbWVtb3J5IG1lY2hhbmlzbSBpcyB1c2VkLCBnZXQgdGhlIHBoeXNpY2FsCisJICogYWRkcmVzcyBvZiB0aGUgYnVmZmVyCisJICovCisJaWYgKFY0TDJfTUVNT1JZX1VTRVJQVFIgPT0gY29tbW9uLT5tZW1vcnkpIHsKKwkJaWYgKDAgPT0gdmItPmJhZGRyKSB7CisJCQl2cGlmX2RiZygxLCBkZWJ1ZywgImJ1ZmZlciBhZGRyZXNzIGlzIDBcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJfQorCQl2Yi0+Ym9mZiA9IHZwaWZfdXNlcnZpcnRfdG9fcGh5cyh2Yi0+YmFkZHIpOworCQlpZiAoIUlTX0FMSUdORUQodmItPmJvZmYsIDgpKQorCQkJZ290byBleGl0OworCX0KKworCWFkZHIgPSB2Yi0+Ym9mZjsKKwlpZiAocS0+c3RyZWFtaW5nKSB7CisJCWlmICghSVNfQUxJR05FRCgoYWRkciArIGNvbW1vbi0+eXRvcF9vZmYpLCA4KSB8fAorCQkgICAgIUlTX0FMSUdORUQoKGFkZHIgKyBjb21tb24tPnlidG1fb2ZmKSwgOCkgfHwKKwkJICAgICFJU19BTElHTkVEKChhZGRyICsgY29tbW9uLT5jdG9wX29mZiksIDgpIHx8CisJCSAgICAhSVNfQUxJR05FRCgoYWRkciArIGNvbW1vbi0+Y2J0bV9vZmYpLCA4KSkKKwkJCWdvdG8gZXhpdDsKKwl9CisJcmV0dXJuIDA7CitleGl0OgorCXZwaWZfZGJnKDEsIGRlYnVnLCAiYnVmZmVyX3ByZXBhcmU6b2Zmc2V0IGlzIG5vdCBhbGlnbmVkIHRvIDggYnl0ZXNcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHZwaWZfYnVmZmVyX3NldHVwIDogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGJ1ZmZlciBzZXR1cC4KKyAqIEBxOiBidWZmZXIgcXVldWUgcHRyCisgKiBAY291bnQ6IG51bWJlciBvZiBidWZmZXJzCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYnVmZmVyCisgKgorICogVGhpcyBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiByZXFidWYoKSBpcyBjYWxsZWQgdG8gYWRqdXN0CisgKiB0aGUgYnVmZmVyIGNvdW50IGFuZCBidWZmZXIgc2l6ZQorICovCitzdGF0aWMgaW50IHZwaWZfYnVmZmVyX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpzaXplKQoreworCS8qIEdldCB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0IGFuZCBjaGFubmVsIG9iamVjdCAqLworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX2J1ZmZlcl9zZXR1cFxuIik7CisKKwkvKiBJZiBtZW1vcnkgdHlwZSBpcyBub3QgbW1hcCwgcmV0dXJuICovCisJaWYgKFY0TDJfTUVNT1JZX01NQVAgIT0gY29tbW9uLT5tZW1vcnkpCisJCXJldHVybiAwOworCisJLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKi8KKwkqc2l6ZSA9IGNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKworCWlmICgqY291bnQgPCBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzKQorCQkqY291bnQgPSBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzOworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfYnVmZmVyX3F1ZXVlIDogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRkIGJ1ZmZlciB0byBETUEgcXVldWUKKyAqIEBxOiBwdHIgdG8gdmlkZW9idWZfcXVldWUKKyAqIEB2YjogcHRyIHRvIHZpZGVvYnVmX2J1ZmZlcgorICovCitzdGF0aWMgdm9pZCB2cGlmX2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwkvKiBHZXQgdGhlIGZpbGUgaGFuZGxlIG9iamVjdCBhbmQgY2hhbm5lbCBvYmplY3QgKi8KKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisKKwljb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9idWZmZXJfcXVldWVcbiIpOworCisJLyogYWRkIHRoZSBidWZmZXIgdG8gdGhlIERNQSBxdWV1ZSAqLworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJmNvbW1vbi0+ZG1hX3F1ZXVlKTsKKwkvKiBDaGFuZ2Ugc3RhdGUgb2YgdGhlIGJ1ZmZlciAqLworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKK30KKworLyoqCisgKiB2cGlmX2J1ZmZlcl9yZWxlYXNlIDogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZnJlZSBidWZmZXIKKyAqIEBxOiBidWZmZXIgcXVldWUgcHRyCisgKiBAdmI6IHB0ciB0byB2aWRlbyBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSB2aWRlb2J1ZiBsYXllciB0byBmcmVlIG1lbW9yeQorICogYWxsb2NhdGVkIHRvICB0aGUgYnVmZmVycworICovCitzdGF0aWMgdm9pZCB2cGlmX2J1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwkvKiBHZXQgdGhlIGZpbGUgaGFuZGxlIG9iamVjdCBhbmQgY2hhbm5lbCBvYmplY3QgKi8KKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisKKwljb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZShxLCB2Yik7CisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gdnBpZl9idWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gdnBpZl9idWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gdnBpZl9idWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gdnBpZl9idWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyB1OCBjaGFubmVsX2ZpcnN0X2ludFtWUElGX05VTUJFUl9PRl9PQkpFQ1RTXVsyXSA9CisJeyB7MSwgMX0gfTsKKworLyoqCisgKiB2cGlmX3Byb2Nlc3NfYnVmZmVyX2NvbXBsZXRlOiBwcm9jZXNzIGEgY29tcGxldGVkIGJ1ZmZlcgorICogQGNvbW1vbjogcHRyIHRvIGNvbW1vbiBjaGFubmVsIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGltZSBzdGFtcCB0aGUgYnVmZmVyIGFuZCBtYXJrIGl0IGFzIERPTkUuIEl0IGFsc28KKyAqIHdha2UgdXAgYW55IHByb2Nlc3Mgd2FpdGluZyBvbiB0aGUgUVVFVUUgYW5kIHNldCB0aGUgbmV4dCBidWZmZXIKKyAqIGFzIGN1cnJlbnQKKyAqLworc3RhdGljIHZvaWQgdnBpZl9wcm9jZXNzX2J1ZmZlcl9jb21wbGV0ZShzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uKQoreworCWRvX2dldHRpbWVvZmRheSgmY29tbW9uLT5jdXJfZnJtLT50cyk7CisJY29tbW9uLT5jdXJfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmN1cl9mcm0tPmRvbmUpOworCS8qIE1ha2UgY3VyRnJtIHBvaW50aW5nIHRvIG5leHRGcm0gKi8KKwljb21tb24tPmN1cl9mcm0gPSBjb21tb24tPm5leHRfZnJtOworfQorCisvKioKKyAqIHZwaWZfc2NoZWR1bGVfbmV4dF9idWZmZXI6IHNldCBuZXh0IGJ1ZmZlciBhZGRyZXNzIGZvciBjYXB0dXJlCisgKiBAY29tbW9uIDogcHRyIHRvIGNvbW1vbiBjaGFubmVsIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgbmV4dCBidWZmZXIgZnJvbSB0aGUgZG1hIHF1ZXVlIGFuZAorICogc2V0IHRoZSBidWZmZXIgYWRkcmVzcyBpbiB0aGUgdnBpZiByZWdpc3RlciBmb3IgY2FwdHVyZS4KKyAqIHRoZSBidWZmZXIgaXMgbWFya2VkIGFjdGl2ZQorICovCitzdGF0aWMgdm9pZCB2cGlmX3NjaGVkdWxlX25leHRfYnVmZmVyKHN0cnVjdCBjb21tb25fb2JqICpjb21tb24pCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKKworCWNvbW1vbi0+bmV4dF9mcm0gPSBsaXN0X2VudHJ5KGNvbW1vbi0+ZG1hX3F1ZXVlLm5leHQsCisJCQkJICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7CisJLyogUmVtb3ZlIHRoYXQgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLworCWxpc3RfZGVsKCZjb21tb24tPm5leHRfZnJtLT5xdWV1ZSk7CisJY29tbW9uLT5uZXh0X2ZybS0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJaWYgKFY0TDJfTUVNT1JZX1VTRVJQVFIgPT0gY29tbW9uLT5tZW1vcnkpCisJCWFkZHIgPSBjb21tb24tPm5leHRfZnJtLT5ib2ZmOworCWVsc2UKKwkJYWRkciA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcoY29tbW9uLT5uZXh0X2ZybSk7CisKKwkvKiBTZXQgdG9wIGFuZCBib3R0b20gZmllbGQgYWRkcmVzc2VzIGluIFZQSUYgcmVnaXN0ZXJzICovCisJY29tbW9uLT5zZXRfYWRkcihhZGRyICsgY29tbW9uLT55dG9wX29mZiwKKwkJCSBhZGRyICsgY29tbW9uLT55YnRtX29mZiwKKwkJCSBhZGRyICsgY29tbW9uLT5jdG9wX29mZiwKKwkJCSBhZGRyICsgY29tbW9uLT5jYnRtX29mZik7Cit9CisKKy8qKgorICogdnBpZl9jaGFubmVsX2lzciA6IElTUiBoYW5kbGVyIGZvciB2cGlmIGNhcHR1cmUKKyAqIEBpcnE6IGlycSBudW1iZXIKKyAqIEBkZXZfaWQ6IGRldl9pZCBwdHIKKyAqCisgKiBJdCBjaGFuZ2VzIHN0YXR1cyBvZiB0aGUgY2FwdHVyZWQgYnVmZmVyLCB0YWtlcyBuZXh0IGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZQorICogYW5kIHNldHMgaXRzIGFkZHJlc3MgaW4gVlBJRiAgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2cGlmX2NoYW5uZWxfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdnBpZl9kZXZpY2UgKmRldiA9ICZ2cGlmX29iajsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2g7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCWludCBjaGFubmVsX2lkID0gMDsKKwlpbnQgZmlkID0gLTEsIGk7CisKKwljaGFubmVsX2lkID0gKihpbnQgKikoZGV2X2lkKTsKKwljaCA9IGRldi0+ZGV2W2NoYW5uZWxfaWRdOworCisJZmllbGQgPSBjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdLmZtdC5mbXQucGl4LmZpZWxkOworCisJZm9yIChpID0gMDsgaSA8IFZQSUZfTlVNQkVSX09GX09CSkVDVFM7IGkrKykgeworCQljb21tb24gPSAmY2gtPmNvbW1vbltpXTsKKwkJLyogc2tpcCBJZiBzdHJlYW1pbmcgaXMgbm90IHN0YXJ0ZWQgaW4gdGhpcyBjaGFubmVsICovCisJCWlmICgwID09IGNvbW1vbi0+c3RhcnRlZCkKKwkJCWNvbnRpbnVlOworCisJCS8qIENoZWNrIHRoZSBmaWVsZCBmb3JtYXQgKi8KKwkJaWYgKDEgPT0gY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uZnJtX2ZtdCkgeworCQkJLyogUHJvZ3Jlc3NpdmUgbW9kZSAqLworCQkJaWYgKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFjaGFubmVsX2ZpcnN0X2ludFtpXVtjaGFubmVsX2lkXSkKKwkJCQl2cGlmX3Byb2Nlc3NfYnVmZmVyX2NvbXBsZXRlKGNvbW1vbik7CisKKwkJCWNoYW5uZWxfZmlyc3RfaW50W2ldW2NoYW5uZWxfaWRdID0gMDsKKworCQkJdnBpZl9zY2hlZHVsZV9uZXh0X2J1ZmZlcihjb21tb24pOworCisKKwkJCWNoYW5uZWxfZmlyc3RfaW50W2ldW2NoYW5uZWxfaWRdID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qKgorCQkJICogSW50ZXJsYWNlZCBtb2RlLiBJZiBpdCBpcyBmaXJzdCBpbnRlcnJ1cHQsIGlnbm9yZQorCQkJICogaXQKKwkJCSAqLworCQkJaWYgKGNoYW5uZWxfZmlyc3RfaW50W2ldW2NoYW5uZWxfaWRdKSB7CisJCQkJY2hhbm5lbF9maXJzdF9pbnRbaV1bY2hhbm5lbF9pZF0gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKDAgPT0gaSkgeworCQkJCWNoLT5maWVsZF9pZCBePSAxOworCQkJCS8qIEdldCBmaWVsZCBpZCBmcm9tIFZQSUYgcmVnaXN0ZXJzICovCisJCQkJZmlkID0gdnBpZl9jaGFubmVsX2dldGZpZChjaC0+Y2hhbm5lbF9pZCk7CisJCQkJaWYgKGZpZCAhPSBjaC0+ZmllbGRfaWQpIHsKKwkJCQkJLyoqCisJCQkJCSAqIElmIGZpZWxkIGlkIGRvZXMgbm90IG1hdGNoIHN0b3JlZAorCQkJCQkgKiBmaWVsZCBpZCwgbWFrZSB0aGVtIGluIHN5bmMKKwkJCQkJICovCisJCQkJCWlmICgwID09IGZpZCkKKwkJCQkJCWNoLT5maWVsZF9pZCA9IGZpZDsKKwkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJCX0KKwkJCX0KKwkJCS8qIGRldmljZSBmaWVsZCBpZCBhbmQgbG9jYWwgZmllbGQgaWQgYXJlIGluIHN5bmMgKi8KKwkJCWlmICgwID09IGZpZCkgeworCQkJCS8qIHRoaXMgaXMgZXZlbiBmaWVsZCAqLworCQkJCWlmIChjb21tb24tPmN1cl9mcm0gPT0gY29tbW9uLT5uZXh0X2ZybSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBtYXJrIHRoZSBjdXJyZW50IGJ1ZmZlciBhcyBkb25lICovCisJCQkJdnBpZl9wcm9jZXNzX2J1ZmZlcl9jb21wbGV0ZShjb21tb24pOworCQkJfSBlbHNlIGlmICgxID09IGZpZCkgeworCQkJCS8qIG9kZCBmaWVsZCAqLworCQkJCWlmIChsaXN0X2VtcHR5KCZjb21tb24tPmRtYV9xdWV1ZSkgfHwKKwkJCQkgICAgKGNvbW1vbi0+Y3VyX2ZybSAhPSBjb21tb24tPm5leHRfZnJtKSkKKwkJCQkJY29udGludWU7CisKKwkJCQl2cGlmX3NjaGVkdWxlX25leHRfYnVmZmVyKGNvbW1vbik7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHZwaWZfdXBkYXRlX3N0ZF9pbmZvKCkgLSB1cGRhdGUgc3RhbmRhcmQgcmVsYXRlZCBpbmZvCisgKiBAY2g6IHB0ciB0byBjaGFubmVsIG9iamVjdAorICoKKyAqIEZvciBhIGdpdmVuIHN0YW5kYXJkIHNlbGVjdGVkIGJ5IGFwcGxpY2F0aW9uLCB1cGRhdGUgdmFsdWVzCisgKiBpbiB0aGUgZGV2aWNlIGRhdGEgc3RydWN0dXJlcworICovCitzdGF0aWMgaW50IHZwaWZfdXBkYXRlX3N0ZF9pbmZvKHN0cnVjdCBjaGFubmVsX29iaiAqY2gpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZnBhcmFtcyA9ICZjaC0+dnBpZnBhcmFtczsKKwljb25zdCBzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKmNvbmZpZzsKKwlzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKnN0ZF9pbmZvOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisJaW50IGluZGV4OworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX3VwZGF0ZV9zdGRfaW5mb1xuIik7CisKKwlzdGRfaW5mbyA9ICZ2cGlmcGFyYW1zLT5zdGRfaW5mbzsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUoY2hfcGFyYW1zKTsgaW5kZXgrKykgeworCQljb25maWcgPSAmY2hfcGFyYW1zW2luZGV4XTsKKwkJaWYgKGNvbmZpZy0+c3RkaWQgJiB2aWRfY2gtPnN0ZGlkKSB7CisJCQltZW1jcHkoc3RkX2luZm8sIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogc3RhbmRhcmQgbm90IGZvdW5kICovCisJaWYgKGluZGV4ID09IEFSUkFZX1NJWkUoY2hfcGFyYW1zKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21tb24tPmZtdC5mbXQucGl4LndpZHRoID0gc3RkX2luZm8tPndpZHRoOworCWNvbW1vbi0+d2lkdGggPSBzdGRfaW5mby0+d2lkdGg7CisJY29tbW9uLT5mbXQuZm10LnBpeC5oZWlnaHQgPSBzdGRfaW5mby0+aGVpZ2h0OworCWNvbW1vbi0+aGVpZ2h0ID0gc3RkX2luZm8tPmhlaWdodDsKKwljb21tb24tPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSA9IHN0ZF9pbmZvLT53aWR0aDsKKwl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuaHBpdGNoID0gc3RkX2luZm8tPndpZHRoOworCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5zdG9yYWdlX21vZGUgPSBzdGRfaW5mby0+ZnJtX2ZtdDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX2NhbGN1bGF0ZV9vZmZzZXRzIDogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGJ1ZmZlcnMgb2Zmc2V0cworICogQGNoIDogcHRyIHRvIGNoYW5uZWwgb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGJ1ZmZlciBvZmZzZXRzIGZvciBZIGFuZCBDIGluIHRoZSB0b3AgYW5kCisgKiBib3R0b20gZmllbGQKKyAqLworc3RhdGljIHZvaWQgdnBpZl9jYWxjdWxhdGVfb2Zmc2V0cyhzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoKQoreworCXVuc2lnbmVkIGludCBocGl0Y2gsIHZwaXRjaCwgc2l6ZWltYWdlOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICYoY2gtPnZpZGVvKTsKKwlzdHJ1Y3QgdnBpZl9wYXJhbXMgKnZwaWZwYXJhbXMgPSAmY2gtPnZwaWZwYXJhbXM7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWVudW0gdjRsMl9maWVsZCBmaWVsZCA9IGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQ7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfY2FsY3VsYXRlX29mZnNldHNcbiIpOworCisJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7CisJCWlmICh2cGlmcGFyYW1zLT5zdGRfaW5mby5mcm1fZm10KQorCQkJdmlkX2NoLT5idWZfZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWVsc2UKKwkJCXZpZF9jaC0+YnVmX2ZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCX0gZWxzZQorCQl2aWRfY2gtPmJ1Zl9maWVsZCA9IGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQ7CisKKwlpZiAoVjRMMl9NRU1PUllfVVNFUlBUUiA9PSBjb21tb24tPm1lbW9yeSkKKwkJc2l6ZWltYWdlID0gY29tbW9uLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7CisJZWxzZQorCQlzaXplaW1hZ2UgPSBjb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF07CisKKwlocGl0Y2ggPSBjb21tb24tPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZTsKKwl2cGl0Y2ggPSBzaXplaW1hZ2UgLyAoaHBpdGNoICogMik7CisKKwlpZiAoKFY0TDJfRklFTERfTk9ORSA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkgfHwKKwkgICAgKFY0TDJfRklFTERfSU5URVJMQUNFRCA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkpIHsKKwkJLyogQ2FsY3VsYXRlIG9mZnNldHMgZm9yIFkgdG9wLCBZIEJvdHRvbSwgQyB0b3AgYW5kIEMgQm90dG9tICovCisJCWNvbW1vbi0+eXRvcF9vZmYgPSAwOworCQljb21tb24tPnlidG1fb2ZmID0gaHBpdGNoOworCQljb21tb24tPmN0b3Bfb2ZmID0gc2l6ZWltYWdlIC8gMjsKKwkJY29tbW9uLT5jYnRtX29mZiA9IHNpemVpbWFnZSAvIDIgKyBocGl0Y2g7CisJfSBlbHNlIGlmIChWNEwyX0ZJRUxEX1NFUV9UQiA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkgeworCQkvKiBDYWxjdWxhdGUgb2Zmc2V0cyBmb3IgWSB0b3AsIFkgQm90dG9tLCBDIHRvcCBhbmQgQyBCb3R0b20gKi8KKwkJY29tbW9uLT55dG9wX29mZiA9IDA7CisJCWNvbW1vbi0+eWJ0bV9vZmYgPSBzaXplaW1hZ2UgLyA0OworCQljb21tb24tPmN0b3Bfb2ZmID0gc2l6ZWltYWdlIC8gMjsKKwkJY29tbW9uLT5jYnRtX29mZiA9IGNvbW1vbi0+Y3RvcF9vZmYgKyBzaXplaW1hZ2UgLyA0OworCX0gZWxzZSBpZiAoVjRMMl9GSUVMRF9TRVFfQlQgPT0gdmlkX2NoLT5idWZfZmllbGQpIHsKKwkJLyogQ2FsY3VsYXRlIG9mZnNldHMgZm9yIFkgdG9wLCBZIEJvdHRvbSwgQyB0b3AgYW5kIEMgQm90dG9tICovCisJCWNvbW1vbi0+eWJ0bV9vZmYgPSAwOworCQljb21tb24tPnl0b3Bfb2ZmID0gc2l6ZWltYWdlIC8gNDsKKwkJY29tbW9uLT5jYnRtX29mZiA9IHNpemVpbWFnZSAvIDI7CisJCWNvbW1vbi0+Y3RvcF9vZmYgPSBjb21tb24tPmNidG1fb2ZmICsgc2l6ZWltYWdlIC8gNDsKKwl9CisJaWYgKChWNEwyX0ZJRUxEX05PTkUgPT0gdmlkX2NoLT5idWZfZmllbGQpIHx8CisJICAgIChWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgPT0gdmlkX2NoLT5idWZfZmllbGQpKQorCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuc3RvcmFnZV9tb2RlID0gMTsKKwllbHNlCisJCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5zdG9yYWdlX21vZGUgPSAwOworCisJaWYgKDEgPT0gdnBpZnBhcmFtcy0+c3RkX2luZm8uZnJtX2ZtdCkKKwkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLmhwaXRjaCA9CisJCSAgICBjb21tb24tPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZTsKKwllbHNlIHsKKwkJaWYgKChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkKKwkJICAgIHx8IChmaWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpKQorCQkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLmhwaXRjaCA9CisJCQkgICAgY29tbW9uLT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmUgKiAyOworCQllbHNlCisJCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuaHBpdGNoID0KKwkJCSAgICBjb21tb24tPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZTsKKwl9CisKKwljaC0+dnBpZnBhcmFtcy52aWRlb19wYXJhbXMuc3RkaWQgPSB2cGlmcGFyYW1zLT5zdGRfaW5mby5zdGRpZDsKK30KKworLyoqCisgKiB2cGlmX2NvbmZpZ19mb3JtYXQ6IGNvbmZpZ3VyZSBkZWZhdWx0IGZyYW1lIGZvcm1hdCBpbiB0aGUgZGV2aWNlCisgKiBjaCA6IHB0ciB0byBjaGFubmVsIG9iamVjdAorICovCitzdGF0aWMgdm9pZCB2cGlmX2NvbmZpZ19mb3JtYXQoc3RydWN0IGNoYW5uZWxfb2JqICpjaCkKK3sKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfY29uZmlnX2Zvcm1hdFxuIik7CisKKwljb21tb24tPmZtdC5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9BTlk7CisJaWYgKGNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tjaC0+Y2hhbm5lbF9pZF0gPT0gMCkKKwkJY29tbW9uLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOworCWVsc2UKKwkJY29tbW9uLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCisJY29tbW9uLT5mbXQuZm10LnBpeC5zaXplaW1hZ2UKKwkgICAgPSBjb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF07CisKKwlpZiAoY2gtPnZwaWZwYXJhbXMuaWZhY2UuaWZfdHlwZSA9PSBWUElGX0lGX1JBV19CQVlFUikKKwkJY29tbW9uLT5mbXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJZWxzZQorCQljb21tb24tPmZtdC5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVVjQyMlA7CisJY29tbW9uLT5mbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKK30KKworLyoqCisgKiB2cGlmX2dldF9kZWZhdWx0X2ZpZWxkKCkgLSBHZXQgZGVmYXVsdCBmaWVsZCB0eXBlIGJhc2VkIG9uIGludGVyZmFjZQorICogQHZwaWZfcGFyYW1zIC0gcHRyIHRvIHZwaWYgcGFyYW1zCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSB2NGwyX2ZpZWxkIHZwaWZfZ2V0X2RlZmF1bHRfZmllbGQoCisJCQkJc3RydWN0IHZwaWZfaW50ZXJmYWNlICppZmFjZSkKK3sKKwlyZXR1cm4gKGlmYWNlLT5pZl90eXBlID09IFZQSUZfSUZfUkFXX0JBWUVSKSA/IFY0TDJfRklFTERfTk9ORSA6CisJCQkJCQlWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Cit9CisKKy8qKgorICogdnBpZl9jaGVja19mb3JtYXQoKSAgLSBjaGVjayBnaXZlbiBwaXhlbCBmb3JtYXQgZm9yIGNvbXBhdGliaWxpdHkKKyAqIEBjaCAtIGNoYW5uZWwgIHB0cgorICogQHBpeGZtdCAtIEdpdmVuIHBpeGVsIGZvcm1hdAorICogQHVwZGF0ZSAtIHVwZGF0ZSB0aGUgdmFsdWVzIGFzIHBlciBoYXJkd2FyZSByZXF1aXJlbWVudAorICoKKyAqIENoZWNrIHRoZSBhcHBsaWNhdGlvbiBwaXhlbCBmb3JtYXQgZm9yIFNfRk1UIGFuZCB1cGRhdGUgdGhlIGlucHV0CisgKiB2YWx1ZXMgYXMgcGVyIGhhcmR3YXJlIGxpbWl0cyBmb3IgVFJZX0ZNVC4gVGhlIGRlZmF1bHQgcGl4ZWwgYW5kCisgKiBmaWVsZCBmb3JtYXQgaXMgc2VsZWN0ZWQgYmFzZWQgb24gaW50ZXJmYWNlIHR5cGUuCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9jaGVja19mb3JtYXQoc3RydWN0IGNoYW5uZWxfb2JqICpjaCwKKwkJCSAgICAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10LAorCQkJICAgICBpbnQgdXBkYXRlKQoreworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmKGNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0pOworCXN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZl9wYXJhbXMgPSAmY2gtPnZwaWZwYXJhbXM7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkID0gcGl4Zm10LT5maWVsZDsKKwl1MzIgc2l6ZWltYWdlLCBocGl0Y2gsIHZwaXRjaDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9jaGVja19mb3JtYXRcbiIpOworCS8qKgorCSAqIGZpcnN0IGNoZWNrIGZvciB0aGUgcGl4ZWwgZm9ybWF0LiBJZiBpZl90eXBlIGlzIFJhdyBiYXllciwKKwkgKiBvbmx5IFY0TDJfUElYX0ZNVF9TQkdHUjggZm9ybWF0IGlzIHN1cHBvcnRlZC4gT3RoZXJ3aXNlIG9ubHkKKwkgKiBWNEwyX1BJWF9GTVRfWVVWNDIyUCBpcyBzdXBwb3J0ZWQKKwkgKi8KKwlpZiAodnBpZl9wYXJhbXMtPmlmYWNlLmlmX3R5cGUgPT0gVlBJRl9JRl9SQVdfQkFZRVIpIHsKKwkJaWYgKHBpeGZtdC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkgeworCQkJaWYgKCF1cGRhdGUpIHsKKwkJCQl2cGlmX2RiZygyLCBkZWJ1ZywgImludmFsaWQgcGl4IGZvcm1hdFxuIik7CisJCQkJZ290byBleGl0OworCQkJfQorCQkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocGl4Zm10LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCkgeworCQkJaWYgKCF1cGRhdGUpIHsKKwkJCQl2cGlmX2RiZygyLCBkZWJ1ZywgImludmFsaWQgcGl4ZWwgZm9ybWF0XG4iKTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVVjQyMlA7CisJCX0KKwl9CisKKwlpZiAoIShWUElGX1ZBTElEX0ZJRUxEKGZpZWxkKSkpIHsKKwkJaWYgKCF1cGRhdGUpIHsKKwkJCXZwaWZfZGJnKDIsIGRlYnVnLCAiaW52YWxpZCBmaWVsZCBmb3JtYXRcbiIpOworCQkJZ290byBleGl0OworCQl9CisJCS8qKgorCQkgKiBCeSBkZWZhdWx0IHVzZSBGSUVMRF9OT05FIGZvciBSQVcgQmF5ZXIgY2FwdHVyZQorCQkgKiBhbmQgRklFTERfSU5URVJMQUNFRCBmb3Igb3RoZXIgaW50ZXJmYWNlcworCQkgKi8KKwkJZmllbGQgPSB2cGlmX2dldF9kZWZhdWx0X2ZpZWxkKCZ2cGlmX3BhcmFtcy0+aWZhY2UpOworCX0gZWxzZSBpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpCisJCS8qIHVuc3VwcG9ydGVkIGZpZWxkLiBVc2UgZGVmYXVsdCAqLworCQlmaWVsZCA9IHZwaWZfZ2V0X2RlZmF1bHRfZmllbGQoJnZwaWZfcGFyYW1zLT5pZmFjZSk7CisKKwkvKiB2YWxpZGF0ZSB0aGUgaHBpdGNoICovCisJaHBpdGNoID0gcGl4Zm10LT5ieXRlc3BlcmxpbmU7CisJaWYgKGhwaXRjaCA8IHZwaWZfcGFyYW1zLT5zdGRfaW5mby53aWR0aCkgeworCQlpZiAoIXVwZGF0ZSkgeworCQkJdnBpZl9kYmcoMiwgZGVidWcsICJpbnZhbGlkIGhwaXRjaFxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaHBpdGNoID0gdnBpZl9wYXJhbXMtPnN0ZF9pbmZvLndpZHRoOworCX0KKworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IGNvbW1vbi0+bWVtb3J5KQorCQlzaXplaW1hZ2UgPSBwaXhmbXQtPnNpemVpbWFnZTsKKwllbHNlCisJCXNpemVpbWFnZSA9IGNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKworCXZwaXRjaCA9IHNpemVpbWFnZSAvIChocGl0Y2ggKiAyKTsKKworCS8qIHZhbGlkYXRlIHRoZSB2cGl0Y2ggKi8KKwlpZiAodnBpdGNoIDwgdnBpZl9wYXJhbXMtPnN0ZF9pbmZvLmhlaWdodCkgeworCQlpZiAoIXVwZGF0ZSkgeworCQkJdnBpZl9kYmcoMiwgZGVidWcsICJJbnZhbGlkIHZwaXRjaFxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJdnBpdGNoID0gdnBpZl9wYXJhbXMtPnN0ZF9pbmZvLmhlaWdodDsKKwl9CisKKwkvKiBDaGVjayBmb3IgOCBieXRlIGFsaWdubWVudCAqLworCWlmICghQUxJR04oaHBpdGNoLCA4KSkgeworCQlpZiAoIXVwZGF0ZSkgeworCQkJdnBpZl9kYmcoMiwgZGVidWcsICJpbnZhbGlkIHBpdGNoIGFsaWdubWVudFxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJLyogYWRqdXN0IHRvIG5leHQgOCBieXRlIGJvdW5kYXJ5ICovCisJCWhwaXRjaCA9ICgoKGhwaXRjaCArIDcpIC8gOCkgKiA4KTsKKwl9CisJLyogaWYgdXBkYXRlIGlzIHNldCwgbW9kaWZ5IHRoZSBieXRlc3BlcmxpbmUgYW5kIHNpemVpbWFnZSAqLworCWlmICh1cGRhdGUpIHsKKwkJcGl4Zm10LT5ieXRlc3BlcmxpbmUgPSBocGl0Y2g7CisJCXBpeGZtdC0+c2l6ZWltYWdlID0gaHBpdGNoICogdnBpdGNoICogMjsKKwl9CisJLyoqCisJICogSW1hZ2Ugd2lkdGggYW5kIGhlaWdodCBpcyBhbHdheXMgYmFzZWQgb24gY3VycmVudCBzdGFuZGFyZCB3aWR0aCBhbmQKKwkgKiBoZWlnaHQKKwkgKi8KKwlwaXhmbXQtPndpZHRoID0gY29tbW9uLT5mbXQuZm10LnBpeC53aWR0aDsKKwlwaXhmbXQtPmhlaWdodCA9IGNvbW1vbi0+Zm10LmZtdC5waXguaGVpZ2h0OworCXJldHVybiAwOworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZwaWZfY29uZmlnX2FkZHIoKSAtIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSBidWZmZXIgYWRkcmVzcyBpbiB2cGlmCisgKiBAY2ggLSBjaGFubmVsIHB0cgorICogQG11eG1vZGUgLSBjaGFubmVsIG11eCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfY29uZmlnX2FkZHIoc3RydWN0IGNoYW5uZWxfb2JqICpjaCwgaW50IG11eG1vZGUpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9jb25maWdfYWRkclxuIik7CisKKwljb21tb24gPSAmKGNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0pOworCisJaWYgKFZQSUZfQ0hBTk5FTDFfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpCisJCWNvbW1vbi0+c2V0X2FkZHIgPSBjaDFfc2V0X3ZpZGVvYnVmX2FkZHI7CisJZWxzZSBpZiAoMiA9PSBtdXhtb2RlKQorCQljb21tb24tPnNldF9hZGRyID0gY2gwX3NldF92aWRlb2J1Zl9hZGRyX3ljX25tdXg7CisJZWxzZQorCQljb21tb24tPnNldF9hZGRyID0gY2gwX3NldF92aWRlb2J1Zl9hZGRyOworfQorCisvKioKKyAqIHZwZmVfbW1hcCA6IEl0IGlzIHVzZWQgdG8gbWFwIGtlcm5lbCBzcGFjZSBidWZmZXJzIGludG8gdXNlciBzcGFjZXMKKyAqIEBmaWxlcDogZmlsZSBwb2ludGVyCisgKiBAdm1hOiBwdHIgdG8gdm1fYXJlYV9zdHJ1Y3QKKyAqLworc3RhdGljIGludCB2cGlmX21tYXAoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwkvKiBHZXQgdGhlIGNoYW5uZWwgb2JqZWN0IGFuZCBmaWxlIGhhbmRsZSBvYmplY3QgKi8KKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJihjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdKTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9tbWFwXG4iKTsKKworCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcigmY29tbW9uLT5idWZmZXJfcXVldWUsIHZtYSk7Cit9CisKKy8qKgorICogdnBpZl9wb2xsOiBJdCBpcyB1c2VkIGZvciBzZWxlY3QvcG9sbCBzeXN0ZW0gY2FsbAorICogQGZpbGVwOiBmaWxlIHBvaW50ZXIKKyAqIEB3YWl0OiBwb2xsIHRhYmxlIHRvIHdhaXQKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB2cGlmX3BvbGwoc3RydWN0IGZpbGUgKmZpbGVwLCBwb2xsX3RhYmxlICogd2FpdCkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2hhbm5lbCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmKGNoYW5uZWwtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXSk7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfcG9sbFxuIik7CisKKwlpZiAoY29tbW9uLT5zdGFydGVkKQorCQllcnIgPSB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlcCwgJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCB3YWl0KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfb3BlbiA6IHZwaWYgb3BlbiBoYW5kbGVyCisgKiBAZmlsZXA6IGZpbGUgcHRyCisgKgorICogSXQgY3JlYXRlcyBvYmplY3Qgb2YgZmlsZSBoYW5kbGUgc3RydWN0dXJlIGFuZCBzdG9yZXMgaXQgaW4gcHJpdmF0ZV9kYXRhCisgKiBtZW1iZXIgb2YgZmlsZXBvaW50ZXIKKyAqLworc3RhdGljIGludCB2cGlmX29wZW4oc3RydWN0IGZpbGUgKmZpbGVwKQoreworCXN0cnVjdCB2cGlmX2NhcHR1cmVfY29uZmlnICpjb25maWcgPSB2cGlmX2Rldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlcCk7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2g7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKKwlzdHJ1Y3QgdnBpZl9maCAqZmg7CisJaW50IGksIHJldCA9IDA7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfb3BlblxuIik7CisKKwljaCA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCisJdmlkX2NoID0gJmNoLT52aWRlbzsKKwljb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoTlVMTCA9PSBjaC0+Y3Vycl9zdWJkZXZfaW5mbykgeworCQkvKioKKwkJICogc2VhcmNoIHRocm91Z2ggdGhlIHN1YiBkZXZpY2UgdG8gc2VlIGEgcmVnaXN0ZXJlZAorCQkgKiBzdWIgZGV2aWNlIGFuZCBtYWtlIGl0IGFzIGN1cnJlbnQgc3ViIGRldmljZQorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+c3ViZGV2X2NvdW50OyBpKyspIHsKKwkJCWlmICh2cGlmX29iai5zZFtpXSkgeworCQkJCS8qIHRoZSBzdWIgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgKi8KKwkJCQljaC0+Y3Vycl9zdWJkZXZfaW5mbyA9ICZjb25maWctPnN1YmRldl9pbmZvW2ldOworCQkJCS8qIG1ha2UgZmlyc3QgaW5wdXQgYXMgdGhlIGN1cnJlbnQgaW5wdXQgKi8KKwkJCQl2aWRfY2gtPmlucHV0X2lkeCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPT0gY29uZmlnLT5zdWJkZXZfY291bnQpIHsKKwkJCXZwaWZfZXJyKCJObyBzdWIgZGV2aWNlIHJlZ2lzdGVyZWRcbiIpOworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZpbGUgaGFuZGxlIG9iamVjdCAqLworCWZoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZwaWZfZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl2cGlmX2VycigidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZSBoYW5kbGUgb2JqZWN0XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHN0b3JlIHBvaW50ZXIgdG8gZmggaW4gcHJpdmF0ZV9kYXRhIG1lbWJlciBvZiBmaWxlcCAqLworCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+Y2hhbm5lbCA9IGNoOworCWZoLT5pbml0aWFsaXplZCA9IDA7CisJLyogSWYgZGVjb2RlciBpcyBub3QgaW5pdGlhbGl6ZWQuIGluaXRpYWxpemUgaXQgKi8KKwlpZiAoIWNoLT5pbml0aWFsaXplZCkgeworCQlmaC0+aW5pdGlhbGl6ZWQgPSAxOworCQljaC0+aW5pdGlhbGl6ZWQgPSAxOworCQltZW1zZXQoJihjaC0+dnBpZnBhcmFtcyksIDAsIHNpemVvZihzdHJ1Y3QgdnBpZl9wYXJhbXMpKTsKKwl9CisJLyogSW5jcmVtZW50IGNoYW5uZWwgdXNycyBjb3VudGVyICovCisJY2gtPnVzcnMrKzsKKwkvKiBTZXQgaW9fYWxsb3dlZCBtZW1iZXIgdG8gZmFsc2UgKi8KKwlmaC0+aW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSA9IDA7CisJLyogSW5pdGlhbGl6ZSBwcmlvcml0eSBvZiB0aGlzIGluc3RhbmNlIHRvIGRlZmF1bHQgcHJpb3JpdHkgKi8KKwlmaC0+cHJpbyA9IFY0TDJfUFJJT1JJVFlfVU5TRVQ7CisJdjRsMl9wcmlvX29wZW4oJmNoLT5wcmlvLCAmZmgtPnByaW8pOworZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2cGlmX3JlbGVhc2UgOiBmdW5jdGlvbiB0byBjbGVhbiB1cCBmaWxlIGNsb3NlCisgKiBAZmlsZXA6IGZpbGUgcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBidWZmZXIgcXVldWUsIGZyZWVzIHRoZSBidWZmZXJzIGFuZCB0aGUgdnBmZSBmaWxlCisgKiBoYW5kbGUKKyAqLworc3RhdGljIGludCB2cGlmX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGVwKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfcmVsZWFzZVxuIik7CisKKwljb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBpZiB0aGlzIGluc3RhbmNlIGlzIGRvaW5nIElPICovCisJaWYgKGZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdKSB7CisJCS8qIFJlc2V0IGlvX3VzcnMgbWVtYmVyIG9mIGNoYW5uZWwgb2JqZWN0ICovCisJCWNvbW1vbi0+aW9fdXNycyA9IDA7CisJCS8qIERpc2FibGUgY2hhbm5lbCBhcyBwZXIgaXRzIGRldmljZSB0eXBlIGFuZCBjaGFubmVsIGlkICovCisJCWlmIChWUElGX0NIQU5ORUwwX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB7CisJCQllbmFibGVfY2hhbm5lbDAoMCk7CisJCQljaGFubmVsMF9pbnRyX2VuYWJsZSgwKTsKKwkJfQorCQlpZiAoKFZQSUZfQ0hBTk5FTDFfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHx8CisJCSAgICAoMiA9PSBjb21tb24tPnN0YXJ0ZWQpKSB7CisJCQllbmFibGVfY2hhbm5lbDEoMCk7CisJCQljaGFubmVsMV9pbnRyX2VuYWJsZSgwKTsKKwkJfQorCQljb21tb24tPnN0YXJ0ZWQgPSAwOworCQkvKiBGcmVlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmY29tbW9uLT5idWZmZXJfcXVldWUpOworCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKKwl9CisKKwkvKiBEZWNyZW1lbnQgY2hhbm5lbCB1c3JzIGNvdW50ZXIgKi8KKwljaC0+dXNycy0tOworCisJLyogdW5sb2NrIG11dGV4IG9uIGNoYW5uZWwgb2JqZWN0ICovCisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCisJLyogQ2xvc2UgdGhlIHByaW9yaXR5ICovCisJdjRsMl9wcmlvX2Nsb3NlKCZjaC0+cHJpbywgJmZoLT5wcmlvKTsKKworCWlmIChmaC0+aW5pdGlhbGl6ZWQpCisJCWNoLT5pbml0aWFsaXplZCA9IDA7CisKKwlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9yZXFidWZzKCkgLSByZXF1ZXN0IGJ1ZmZlciBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHJlcWJ1ZjogcmVxdWVzdCBidWZmZXIgc3RydWN0dXJlIHB0cgorICovCitzdGF0aWMgaW50IHZwaWZfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXFidWYpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKwl1OCBpbmRleCA9IDA7CisJaW50IHJldCA9IDA7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfcmVxYnVmc1xuIik7CisKKwkvKioKKwkgKiBUaGlzIGZpbGUgaGFuZGxlIGhhcyBub3QgaW5pdGlhbGl6ZWQgdGhlIGNoYW5uZWwsCisJICogSXQgaXMgbm90IGFsbG93ZWQgdG8gZG8gc2V0dGluZ3MKKwkgKi8KKwlpZiAoKFZQSUZfQ0hBTk5FTDBfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpCisJICAgIHx8IChWUElGX0NIQU5ORUwxX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSkgeworCQlpZiAoIWZoLT5pbml0aWFsaXplZCkgeworCQkJdnBpZl9kYmcoMSwgZGVidWcsICJDaGFubmVsIEJ1c3lcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gcmVxYnVmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZGV4ID0gVlBJRl9WSURFT19JTkRFWDsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW2luZGV4XTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoMCAhPSBjb21tb24tPmlvX3VzcnMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHJlcWJ1Zl9leGl0OworCX0KKworCS8qIEluaXRpYWxpemUgdmlkZW9idWYgcXVldWUgYXMgcGVyIHRoZSBidWZmZXIgdHlwZSAqLworCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdCgmY29tbW9uLT5idWZmZXJfcXVldWUsCisJCQkJCSAgICAmdmlkZW9fcW9wcywgTlVMTCwKKwkJCQkJICAgICZjb21tb24tPmlycWxvY2ssCisJCQkJCSAgICByZXFidWYtPnR5cGUsCisJCQkJCSAgICBjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLCBmaCk7CisKKwkvKiBTZXQgaW8gYWxsb3dlZCBtZW1iZXIgb2YgZmlsZSBoYW5kbGUgdG8gVFJVRSAqLworCWZoLT5pb19hbGxvd2VkW2luZGV4XSA9IDE7CisJLyogSW5jcmVtZW50IGlvIHVzcnMgbWVtYmVyIG9mIGNoYW5uZWwgb2JqZWN0IHRvIDEgKi8KKwljb21tb24tPmlvX3VzcnMgPSAxOworCS8qIFN0b3JlIHR5cGUgb2YgbWVtb3J5IHJlcXVlc3RlZCBpbiBjaGFubmVsIG9iamVjdCAqLworCWNvbW1vbi0+bWVtb3J5ID0gcmVxYnVmLT5tZW1vcnk7CisJSU5JVF9MSVNUX0hFQUQoJmNvbW1vbi0+ZG1hX3F1ZXVlKTsKKworCS8qIEFsbG9jYXRlIGJ1ZmZlcnMgKi8KKwlyZXQgPSB2aWRlb2J1Zl9yZXFidWZzKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgcmVxYnVmKTsKKworcmVxYnVmX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBpZl9xdWVyeWJ1ZigpIC0gcXVlcnkgYnVmZmVyIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAYnVmOiB2NGwyIGJ1ZmZlciBzdHJ1Y3R1cmUgcHRyCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfcXVlcnlidWZcbiIpOworCisJaWYgKGNvbW1vbi0+Zm10LnR5cGUgIT0gYnVmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb21tb24tPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiSW52YWxpZCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCBidWYpOworfQorCisvKioKKyAqIHZwaWZfcWJ1ZigpIC0gcXVlcnkgYnVmZmVyIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAYnVmOiB2NGwyIGJ1ZmZlciBzdHJ1Y3R1cmUgcHRyCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlzdHJ1Y3QgdjRsMl9idWZmZXIgdGJ1ZiA9ICpidWY7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmMTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfcWJ1ZlxuIik7CisKKwlpZiAoY29tbW9uLT5mbXQudHlwZSAhPSB0YnVmLnR5cGUpIHsKKwkJdnBpZl9lcnIoImludmFsaWQgYnVmZmVyIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdKSB7CisJCXZwaWZfZXJyKCJmaCBpbyBub3QgYWxsb3dlZCBcbiIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlpZiAoIShsaXN0X2VtcHR5KCZjb21tb24tPmRtYV9xdWV1ZSkpIHx8CisJICAgIChjb21tb24tPmN1cl9mcm0gIT0gY29tbW9uLT5uZXh0X2ZybSkgfHwKKwkgICAgIWNvbW1vbi0+c3RhcnRlZCB8fAorCSAgICAoY29tbW9uLT5zdGFydGVkICYmICgwID09IGNoLT5maWVsZF9pZCkpKQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1Zik7CisKKwkvKiBidWZmZXJxdWV1ZSBpcyBlbXB0eSBzdG9yZSBidWZmZXIgYWRkcmVzcyBpbiBWUElGIHJlZ2lzdGVycyAqLworCW11dGV4X2xvY2soJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLnZiX2xvY2spOworCWJ1ZjEgPSBjb21tb24tPmJ1ZmZlcl9xdWV1ZS5idWZzW3RidWYuaW5kZXhdOworCisJaWYgKChidWYxLT5zdGF0ZSA9PSBWSURFT0JVRl9RVUVVRUQpIHx8CisJICAgIChidWYxLT5zdGF0ZSA9PSBWSURFT0JVRl9BQ1RJVkUpKSB7CisJCXZwaWZfZXJyKCJpbnZhbGlkIHN0YXRlXG4iKTsKKwkJZ290byBxYnVmX2V4aXQ7CisJfQorCisJc3dpdGNoIChidWYxLT5tZW1vcnkpIHsKKwljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCWlmIChidWYxLT5iYWRkciA9PSAwKQorCQkJZ290byBxYnVmX2V4aXQ7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgorCQlpZiAodGJ1Zi5sZW5ndGggPCBidWYxLT5ic2l6ZSkKKwkJCWdvdG8gcWJ1Zl9leGl0OworCisJCWlmICgoVklERU9CVUZfTkVFRFNfSU5JVCAhPSBidWYxLT5zdGF0ZSkKKwkJCSAgICAmJiAoYnVmMS0+YmFkZHIgIT0gdGJ1Zi5tLnVzZXJwdHIpKQorCQkJdnBpZl9idWZmZXJfcmVsZWFzZSgmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1ZjEpOworCQkJYnVmMS0+YmFkZHIgPSB0YnVmLm0udXNlcnB0cjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlnb3RvIHFidWZfZXhpdDsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0ID0gdnBpZl9idWZmZXJfcHJlcGFyZSgmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1ZjEsCisJCQkJCWNvbW1vbi0+YnVmZmVyX3F1ZXVlLmZpZWxkKTsKKwlpZiAocmV0IDwgMCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWdvdG8gcWJ1Zl9leGl0OworCX0KKworCWJ1ZjEtPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCisJaWYgKFY0TDJfTUVNT1JZX1VTRVJQVFIgPT0gY29tbW9uLT5tZW1vcnkpCisJCWFkZHIgPSBidWYxLT5ib2ZmOworCWVsc2UKKwkJYWRkciA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcoYnVmMSk7CisKKwljb21tb24tPm5leHRfZnJtID0gYnVmMTsKKwljb21tb24tPnNldF9hZGRyKGFkZHIgKyBjb21tb24tPnl0b3Bfb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPnlidG1fb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPmNidG1fb2ZmKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZidWYxLT5zdHJlYW0sICZjb21tb24tPmJ1ZmZlcl9xdWV1ZS5zdHJlYW0pOworCW11dGV4X3VubG9jaygmY29tbW9uLT5idWZmZXJfcXVldWUudmJfbG9jayk7CisJcmV0dXJuIDA7CisKK3FidWZfZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLnZiX2xvY2spOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHZwaWZfZHFidWYoKSAtIHF1ZXJ5IGJ1ZmZlciBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGJ1ZjogdjRsMiBidWZmZXIgc3RydWN0dXJlIHB0cgorICovCitzdGF0aWMgaW50IHZwaWZfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9kcWJ1ZlxuIik7CisKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCBidWYsCisJCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworLyoqCisgKiB2cGlmX3N0cmVhbW9uKCkgLSBzdHJlYW1vbiBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGJ1ZnR5cGU6IHY0bDIgYnVmZmVyIHR5cGUKKyAqLworc3RhdGljIGludCB2cGlmX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSBidWZ0eXBlKQoreworCisJc3RydWN0IHZwaWZfY2FwdHVyZV9jb25maWcgKmNvbmZpZyA9IHZwaWZfZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKm90aF9jaCA9IHZwaWZfb2JqLmRldlshY2gtPmNoYW5uZWxfaWRdOworCXN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCWludCByZXQgPSAwOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX3N0cmVhbW9uXG4iKTsKKworCXZwaWYgPSAmY2gtPnZwaWZwYXJhbXM7CisKKwlpZiAoYnVmdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJidWZmZXIgdHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgZmlsZSBoYW5kbGUgaXMgbm90IGFsbG93ZWQgSU8sIHJldHVybiBlcnJvciAqLworCWlmICghZmgtPmlvX2FsbG93ZWRbVlBJRl9WSURFT19JTkRFWF0pIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJpbyBub3QgYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCS8qIElmIFN0cmVhbWluZyBpcyBhbHJlYWR5IHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJjaGFubmVsLT5zdGFydGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoKGNoLT5jaGFubmVsX2lkID09IFZQSUZfQ0hBTk5FTDBfVklERU8gJiYKKwkgICAgb3RoX2NoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0uc3RhcnRlZCAmJgorCSAgICB2cGlmLT5zdGRfaW5mby55Y211eF9tb2RlID09IDApIHx8CisJICAgKChjaC0+Y2hhbm5lbF9pZCA9PSBWUElGX0NIQU5ORUwxX1ZJREVPKSAmJgorCSAgICAoMiA9PSBvdGhfY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS5zdGFydGVkKSkpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJvdGhlciBjaGFubmVsIGlzIGJlaW5nIHVzZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldCA9IHZwaWZfY2hlY2tfZm9ybWF0KGNoLCAmY29tbW9uLT5mbXQuZm10LnBpeCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBzdHJlYW1vbiBvbiB0aGUgc3ViIGRldmljZSAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodnBpZl9vYmouc2RbY2gtPmN1cnJfc2RfaW5kZXhdLCB2aWRlbywKKwkJCQlzX3N0cmVhbSwgMSk7CisKKwlpZiAocmV0ICYmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgInN0cmVhbSBvbiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBDYWxsIHZpZGVvYnVmX3N0cmVhbW9uIHRvIHN0YXJ0IHN0cmVhbWluZyBpbiB2aWRlb2J1ZiAqLworCXJldCA9IHZpZGVvYnVmX3N0cmVhbW9uKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSk7CisJaWYgKHJldCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgInZpZGVvYnVmX3N0cmVhbW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKSB7CisJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBzdHJlYW1vZmZfZXhpdDsKKwl9CisKKwkvKiBJZiBidWZmZXIgcXVldWUgaXMgZW1wdHksIHJldHVybiBlcnJvciAqLworCWlmIChsaXN0X2VtcHR5KCZjb21tb24tPmRtYV9xdWV1ZSkpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJidWZmZXIgcXVldWUgaXMgZW1wdHlcbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogR2V0IHRoZSBuZXh0IGZyYW1lIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLworCWNvbW1vbi0+Y3VyX2ZybSA9IGxpc3RfZW50cnkoY29tbW9uLT5kbWFfcXVldWUubmV4dCwKKwkJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgcXVldWUpOworCWNvbW1vbi0+bmV4dF9mcm0gPSBjb21tb24tPmN1cl9mcm07CisKKwkvKiBSZW1vdmUgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLworCWxpc3RfZGVsKCZjb21tb24tPmN1cl9mcm0tPnF1ZXVlKTsKKwkvKiBNYXJrIHN0YXRlIG9mIHRoZSBjdXJyZW50IGZyYW1lIHRvIGFjdGl2ZSAqLworCWNvbW1vbi0+Y3VyX2ZybS0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJLyogSW5pdGlhbGl6ZSBmaWVsZF9pZCBhbmQgc3RhcnRlZCBtZW1iZXIgKi8KKwljaC0+ZmllbGRfaWQgPSAwOworCWNvbW1vbi0+c3RhcnRlZCA9IDE7CisKKwlpZiAoVjRMMl9NRU1PUllfVVNFUlBUUiA9PSBjb21tb24tPm1lbW9yeSkKKwkJYWRkciA9IGNvbW1vbi0+Y3VyX2ZybS0+Ym9mZjsKKwllbHNlCisJCWFkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKGNvbW1vbi0+Y3VyX2ZybSk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBmb3IgWSBhbmQgQyBkYXRhIGluIHRoZSBidWZmZXIgKi8KKwl2cGlmX2NhbGN1bGF0ZV9vZmZzZXRzKGNoKTsKKworCWlmICgodnBpZi0+c3RkX2luZm8uZnJtX2ZtdCAmJgorCSAgICAoKGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQgIT0gVjRMMl9GSUVMRF9OT05FKSAmJgorCSAgICAgKGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQgIT0gVjRMMl9GSUVMRF9BTlkpKSkgfHwKKwkgICAgKCF2cGlmLT5zdGRfaW5mby5mcm1fZm10ICYmCisJICAgICAoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCA9PSBWNEwyX0ZJRUxEX05PTkUpKSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImNvbmZsaWN0IGluIGZpZWxkIGZvcm1hdCBhbmQgc3RkIGZvcm1hdFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBjb25maWd1cmUgMSBvciAyIGNoYW5uZWwgbW9kZSAqLworCXJldCA9IGNvbmZpZy0+c2V0dXBfaW5wdXRfY2hhbm5lbF9tb2RlKHZwaWYtPnN0ZF9pbmZvLnljbXV4X21vZGUpOworCisJaWYgKHJldCA8IDApIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJjYW4ndCBzZXQgdnBpZiBjaGFubmVsIG1vZGVcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQ2FsbCB2cGlmX3NldF9wYXJhbXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGFuZCBhZGRyZXNzZXMgKi8KKwlyZXQgPSB2cGlmX3NldF92aWRlb19wYXJhbXModnBpZiwgY2gtPmNoYW5uZWxfaWQpOworCisJaWYgKHJldCA8IDApIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJjYW4ndCBzZXQgdmlkZW8gcGFyYW1zXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWNvbW1vbi0+c3RhcnRlZCA9IHJldDsKKwl2cGlmX2NvbmZpZ19hZGRyKGNoLCByZXQpOworCisJY29tbW9uLT5zZXRfYWRkcihhZGRyICsgY29tbW9uLT55dG9wX29mZiwKKwkJCSBhZGRyICsgY29tbW9uLT55YnRtX29mZiwKKwkJCSBhZGRyICsgY29tbW9uLT5jdG9wX29mZiwKKwkJCSBhZGRyICsgY29tbW9uLT5jYnRtX29mZik7CisKKwkvKioKKwkgKiBTZXQgaW50ZXJydXB0IGZvciBib3RoIHRoZSBmaWVsZHMgaW4gVlBJRiBSZWdpc3RlciBlbmFibGUgY2hhbm5lbCBpbgorCSAqIFZQSUYgcmVnaXN0ZXIKKwkgKi8KKwlpZiAoKFZQSUZfQ0hBTk5FTDBfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpKSB7CisJCWNoYW5uZWwwX2ludHJfYXNzZXJ0KCk7CisJCWNoYW5uZWwwX2ludHJfZW5hYmxlKDEpOworCQllbmFibGVfY2hhbm5lbDAoMSk7CisJfQorCWlmICgoVlBJRl9DSEFOTkVMMV9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgfHwKKwkgICAgKGNvbW1vbi0+c3RhcnRlZCA9PSAyKSkgeworCQljaGFubmVsMV9pbnRyX2Fzc2VydCgpOworCQljaGFubmVsMV9pbnRyX2VuYWJsZSgxKTsKKwkJZW5hYmxlX2NoYW5uZWwxKDEpOworCX0KKwljaGFubmVsX2ZpcnN0X2ludFtWUElGX1ZJREVPX0lOREVYXVtjaC0+Y2hhbm5lbF9pZF0gPSAxOworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworCitleGl0OgorCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKK3N0cmVhbW9mZl9leGl0OgorCXJldCA9IHZpZGVvYnVmX3N0cmVhbW9mZigmY29tbW9uLT5idWZmZXJfcXVldWUpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBpZl9zdHJlYW1vZmYoKSAtIHN0cmVhbW9mZiBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGJ1ZnR5cGU6IHY0bDIgYnVmZmVyIHR5cGUKKyAqLworc3RhdGljIGludCB2cGlmX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQllbnVtIHY0bDJfYnVmX3R5cGUgYnVmdHlwZSkKK3sKKworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlpbnQgcmV0OworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX3N0cmVhbW9mZlxuIik7CisKKwlpZiAoYnVmdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJidWZmZXIgdHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgaW8gaXMgYWxsb3dlZCBmb3IgdGhpcyBmaWxlIGhhbmRsZSwgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImlvIG5vdCBhbGxvd2VkXG4iKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJLyogSWYgc3RyZWFtaW5nIGlzIG5vdCBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAoIWNvbW1vbi0+c3RhcnRlZCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImNoYW5uZWwtPnN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogZGlzYWJsZSBjaGFubmVsICovCisJaWYgKFZQSUZfQ0hBTk5FTDBfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHsKKwkJZW5hYmxlX2NoYW5uZWwwKDApOworCQljaGFubmVsMF9pbnRyX2VuYWJsZSgwKTsKKwl9IGVsc2UgeworCQllbmFibGVfY2hhbm5lbDEoMCk7CisJCWNoYW5uZWwxX2ludHJfZW5hYmxlKDApOworCX0KKworCWNvbW1vbi0+c3RhcnRlZCA9IDA7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHZwaWZfb2JqLnNkW2NoLT5jdXJyX3NkX2luZGV4XSwgdmlkZW8sCisJCQkJc19zdHJlYW0sIDApOworCisJaWYgKHJldCAmJiAocmV0ICE9IC1FTk9JT0NUTENNRCkpCisJCXZwaWZfZGJnKDEsIGRlYnVnLCAic3RyZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsKKworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKK30KKworLyoqCisgKiB2cGlmX21hcF9zdWJfZGV2aWNlX3RvX2lucHV0KCkgLSBNYXBzIHN1YiBkZXZpY2UgdG8gaW5wdXQKKyAqIEBjaCAtIHB0ciB0byBjaGFubmVsCisgKiBAY29uZmlnIC0gcHRyIHRvIGNhcHR1cmUgY29uZmlndXJhdGlvbgorICogQGlucHV0X2luZGV4IC0gR2l2ZW4gaW5wdXQgaW5kZXggZnJvbSBhcHBsaWNhdGlvbgorICogQHN1Yl9kZXZpY2VfaW5kZXggLSBpbmRleCBpbnRvIHNkIHRhYmxlCisgKgorICogbG9va3VwIHRoZSBzdWIgZGV2aWNlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGlucHV0IGluZGV4LgorICogd2UgcmVwb3J0IGFsbCB0aGUgaW5wdXRzIHRvIGFwcGxpY2F0aW9uLiBpbnB1dHMgdGFibGUgYWxzbworICogaGFzIHN1YiBkZXZpY2UgbmFtZSBmb3IgdGhlIGVhY2ggaW5wdXQKKyAqLworc3RhdGljIHN0cnVjdCB2cGlmX3N1YmRldl9pbmZvICp2cGlmX21hcF9zdWJfZGV2aWNlX3RvX2lucHV0KAorCQkJCXN0cnVjdCBjaGFubmVsX29iaiAqY2gsCisJCQkJc3RydWN0IHZwaWZfY2FwdHVyZV9jb25maWcgKnZwaWZfY2ZnLAorCQkJCWludCBpbnB1dF9pbmRleCwKKwkJCQlpbnQgKnN1Yl9kZXZpY2VfaW5kZXgpCit7CisJc3RydWN0IHZwaWZfY2FwdHVyZV9jaGFuX2NvbmZpZyAqY2hhbl9jZmc7CisJc3RydWN0IHZwaWZfc3ViZGV2X2luZm8gKnN1YmRldl9pbmZvID0gTlVMTDsKKwljb25zdCBjaGFyICpzdWJkZXZfbmFtZSA9IE5VTEw7CisJaW50IGk7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfbWFwX3N1Yl9kZXZpY2VfdG9faW5wdXRcbiIpOworCisJY2hhbl9jZmcgPSAmdnBpZl9jZmctPmNoYW5fY29uZmlnW2NoLT5jaGFubmVsX2lkXTsKKworCS8qKgorCSAqIHNlYXJjaCB0aHJvdWdoIHRoZSBpbnB1dHMgdG8gZmluZCB0aGUgc3ViIGRldmljZSBzdXBwb3J0aW5nCisJICogdGhlIGlucHV0CisJICovCisJZm9yIChpID0gMDsgaSA8IGNoYW5fY2ZnLT5pbnB1dF9jb3VudDsgaSsrKSB7CisJCS8qIEZvciBlYWNoIHN1YiBkZXZpY2UsIGxvb3AgdGhyb3VnaCBpbnB1dCAqLworCQlpZiAoaSA9PSBpbnB1dF9pbmRleCkgeworCQkJc3ViZGV2X25hbWUgPSBjaGFuX2NmZy0+aW5wdXRzW2ldLnN1YmRldl9uYW1lOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBpZiByZWFjaGVkIG1heGltdW0uIHJldHVybiBudWxsICovCisJaWYgKGkgPT0gY2hhbl9jZmctPmlucHV0X2NvdW50IHx8IChOVUxMID09IHN1YmRldl9uYW1lKSkKKwkJcmV0dXJuIHN1YmRldl9pbmZvOworCisJLyogbG9vcCB0aHJvdWdoIHRoZSBzdWIgZGV2aWNlIGxpc3QgdG8gZ2V0IHRoZSBzdWIgZGV2aWNlIGluZm8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdnBpZl9jZmctPnN1YmRldl9jb3VudDsgaSsrKSB7CisJCXN1YmRldl9pbmZvID0gJnZwaWZfY2ZnLT5zdWJkZXZfaW5mb1tpXTsKKwkJaWYgKCFzdHJjbXAoc3ViZGV2X2luZm8tPm5hbWUsIHN1YmRldl9uYW1lKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IHZwaWZfY2ZnLT5zdWJkZXZfY291bnQpCisJCXJldHVybiBzdWJkZXZfaW5mbzsKKworCS8qIGNoZWNrIGlmIHRoZSBzdWIgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgKi8KKwlpZiAoTlVMTCA9PSB2cGlmX29iai5zZFtpXSkKKwkJcmV0dXJuIE5VTEw7CisKKwkqc3ViX2RldmljZV9pbmRleCA9IGk7CisJcmV0dXJuIHN1YmRldl9pbmZvOworfQorCisvKioKKyAqIHZwaWZfcXVlcnlzdGQoKSAtIHF1ZXJ5c3RkIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAc3RkX2lkOiBwdHIgdG8gc3RkIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZGV0ZWN0IHN0YW5kYXJkIGF0IHRoZSBzZWxlY3RlZCBpbnB1dAorICovCitzdGF0aWMgaW50IHZwaWZfcXVlcnlzdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWludCByZXQgPSAwOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX3F1ZXJ5c3RkXG4iKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBDYWxsIHF1ZXJ5c3RkIGZ1bmN0aW9uIG9mIGRlY29kZXIgZGV2aWNlICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtjaC0+Y3Vycl9zZF9pbmRleF0sIHZpZGVvLAorCQkJCXF1ZXJ5c3RkLCBzdGRfaWQpOworCWlmIChyZXQgPCAwKQorCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkZhaWxlZCB0byBzZXQgc3RhbmRhcmQgZm9yIHN1YiBkZXZpY2VzXG4iKTsKKworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZwaWZfZ19zdGQoKSAtIGdldCBTVEQgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBzdGRfaWQ6IHB0ciB0byBzdGQgaWQKKyAqLworc3RhdGljIGludCB2cGlmX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX2dfc3RkXG4iKTsKKworCSpzdGQgPSBjaC0+dmlkZW8uc3RkaWQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9zX3N0ZCgpIC0gc2V0IFNURCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHN0ZF9pZDogcHRyIHRvIHN0ZCBpZAorICovCitzdGF0aWMgaW50IHZwaWZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWludCByZXQgPSAwOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX3Nfc3RkXG4iKTsKKworCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9lcnIoInN0cmVhbWluZyBpbiBwcm9ncmVzc1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKChWUElGX0NIQU5ORUwwX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB8fAorCSAgICAoVlBJRl9DSEFOTkVMMV9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkpIHsKKwkJaWYgKCFmaC0+aW5pdGlhbGl6ZWQpIHsKKwkJCXZwaWZfZGJnKDEsIGRlYnVnLCAiQ2hhbm5lbCBCdXN5XG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJmNoLT5wcmlvLCAmZmgtPnByaW8pOworCWlmICgwICE9IHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZoLT5pbml0aWFsaXplZCA9IDE7CisKKwkvKiBDYWxsIGVuY29kZXIgc3ViZGV2aWNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3RhbmRhcmQgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2gtPnZpZGVvLnN0ZGlkID0gKnN0ZF9pZDsKKworCS8qIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YW5kYXJkICovCisJaWYgKHZwaWZfdXBkYXRlX3N0ZF9pbmZvKGNoKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQl2cGlmX2VycigiRXJyb3IgZ2V0dGluZyB0aGUgc3RhbmRhcmQgaW5mb1xuIik7CisJCWdvdG8gc19zdGRfZXhpdDsKKwl9CisKKwkvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgZm9ybWF0IGluZm9ybWF0aW9uICovCisJdnBpZl9jb25maWdfZm9ybWF0KGNoKTsKKworCS8qIHNldCBzdGFuZGFyZCBpbiB0aGUgc3ViIGRldmljZSAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodnBpZl9vYmouc2RbY2gtPmN1cnJfc2RfaW5kZXhdLCBjb3JlLAorCQkJCXNfc3RkLCAqc3RkX2lkKTsKKwlpZiAocmV0IDwgMCkKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJGYWlsZWQgdG8gc2V0IHN0YW5kYXJkIGZvciBzdWIgZGV2aWNlc1xuIik7CisKK3Nfc3RkX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBpZl9lbnVtX2lucHV0KCkgLSBFTlVNSU5QVVQgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBpbnB1dDogcHRyIHRvIGlucHV0IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHZwaWZfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCit7CisKKwlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NvbmZpZyAqY29uZmlnID0gdnBpZl9kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHZwaWZfY2FwdHVyZV9jaGFuX2NvbmZpZyAqY2hhbl9jZmc7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwljaGFuX2NmZyA9ICZjb25maWctPmNoYW5fY29uZmlnW2NoLT5jaGFubmVsX2lkXTsKKworCWlmIChpbnB1dC0+aW5kZXggPj0gY2hhbl9jZmctPmlucHV0X2NvdW50KSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiSW52YWxpZCBpbnB1dCBpbmRleFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweShpbnB1dCwgJmNoYW5fY2ZnLT5pbnB1dHNbaW5wdXQtPmluZGV4XS5pbnB1dCwKKwkJc2l6ZW9mKCppbnB1dCkpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfZ19pbnB1dCgpIC0gR2V0IElOUFVUIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAaW5kZXg6IHB0ciB0byBpbnB1dCBpbmRleAorICovCitzdGF0aWMgaW50IHZwaWZfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppbmRleCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCisJKmluZGV4ID0gdmlkX2NoLT5pbnB1dF9pZHg7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3NfaW5wdXQoKSAtIFNldCBJTlBVVCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGluZGV4OiBpbnB1dCBpbmRleAorICovCitzdGF0aWMgaW50IHZwaWZfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCB2cGlmX2NhcHR1cmVfY29uZmlnICpjb25maWcgPSB2cGlmX2Rldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NoYW5fY29uZmlnICpjaGFuX2NmZzsKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJc3RydWN0IHZpZGVvX29iaiAqdmlkX2NoID0gJmNoLT52aWRlbzsKKwlzdHJ1Y3QgdnBpZl9zdWJkZXZfaW5mbyAqc3ViZGV2X2luZm87CisJaW50IHJldCA9IDAsIHNkX2luZGV4ID0gMDsKKwl1MzIgaW5wdXQgPSAwLCBvdXRwdXQgPSAwOworCisJY2hhbl9jZmcgPSAmY29uZmlnLT5jaGFuX2NvbmZpZ1tjaC0+Y2hhbm5lbF9pZF07CisKKwlpZiAoY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZXJyKCJTdHJlYW1pbmcgaW4gcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICgoVlBJRl9DSEFOTkVMMF9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgfHwKKwkgICAgKFZQSUZfQ0hBTk5FTDFfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpKSB7CisJCWlmICghZmgtPmluaXRpYWxpemVkKSB7CisJCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkNoYW5uZWwgQnVzeVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjaC0+cHJpbywgJmZoLT5wcmlvKTsKKwlpZiAoMCAhPSByZXQpCisJCXJldHVybiByZXQ7CisKKwlmaC0+aW5pdGlhbGl6ZWQgPSAxOworCXN1YmRldl9pbmZvID0gdnBpZl9tYXBfc3ViX2RldmljZV90b19pbnB1dChjaCwgY29uZmlnLCBpbmRleCwKKwkJCQkJCSAgICZzZF9pbmRleCk7CisJaWYgKE5VTEwgPT0gc3ViZGV2X2luZm8pIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsCisJCQkiY291bGRuJ3QgbG9va3VwIHN1YiBkZXZpY2UgZm9yIHRoZSBpbnB1dCBpbmRleFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBmaXJzdCBzZXR1cCBpbnB1dCBwYXRoIGZyb20gc3ViIGRldmljZSB0byB2cGlmICovCisJaWYgKGNvbmZpZy0+c2V0dXBfaW5wdXRfcGF0aCkgeworCQlyZXQgPSBjb25maWctPnNldHVwX2lucHV0X3BhdGgoY2gtPmNoYW5uZWxfaWQsCisJCQkJCSAgICAgICBzdWJkZXZfaW5mby0+bmFtZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl2cGlmX2RiZygxLCBkZWJ1ZywgImNvdWxkbid0IHNldHVwIGlucHV0IHBhdGggZm9yIHRoZSIKKwkJCQkiIHN1YiBkZXZpY2UgJXMsIGZvciBpbnB1dCBpbmRleCAlZFxuIiwKKwkJCQlzdWJkZXZfaW5mby0+bmFtZSwgaW5kZXgpOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJaWYgKHN1YmRldl9pbmZvLT5jYW5fcm91dGUpIHsKKwkJaW5wdXQgPSBzdWJkZXZfaW5mby0+aW5wdXQ7CisJCW91dHB1dCA9IHN1YmRldl9pbmZvLT5vdXRwdXQ7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodnBpZl9vYmouc2Rbc2RfaW5kZXhdLCB2aWRlbywgc19yb3V0aW5nLAorCQkJCQlpbnB1dCwgb3V0cHV0LCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXZwaWZfZGJnKDEsIGRlYnVnLCAiRmFpbGVkIHRvIHNldCBpbnB1dFxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisJdmlkX2NoLT5pbnB1dF9pZHggPSBpbmRleDsKKwljaC0+Y3Vycl9zdWJkZXZfaW5mbyA9IHN1YmRldl9pbmZvOworCWNoLT5jdXJyX3NkX2luZGV4ID0gc2RfaW5kZXg7CisJLyogY29weSBpbnRlcmZhY2UgcGFyYW1ldGVycyB0byB2cGlmICovCisJY2gtPnZwaWZwYXJhbXMuaWZhY2UgPSBzdWJkZXZfaW5mby0+dnBpZl9pZjsKKworCS8qIHVwZGF0ZSB0dm5vcm1zIGZyb20gdGhlIHN1YiBkZXZpY2UgaW5wdXQgaW5mbyAqLworCWNoLT52aWRlb19kZXYtPnR2bm9ybXMgPSBjaGFuX2NmZy0+aW5wdXRzW2luZGV4XS5pbnB1dC5zdGQ7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBpZl9lbnVtX2ZtdF92aWRfY2FwKCkgLSBFTlVNX0ZNVCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGluZGV4OiBpbnB1dCBpbmRleAorICovCitzdGF0aWMgaW50IHZwaWZfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKworCWlmIChmbXQtPmluZGV4ICE9IDApIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJJbnZhbGlkIGZvcm1hdCBpbmRleFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdCAqLworCWlmIChjaC0+dnBpZnBhcmFtcy5pZmFjZS5pZl90eXBlID09IFZQSUZfSUZfUkFXX0JBWUVSKSB7CisJCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJc3RyY3B5KGZtdC0+ZGVzY3JpcHRpb24sICJSYXcgTW9kZSAtQmF5ZXIgUGF0dGVybiBHclJCR2IiKTsKKwkJZm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJfSBlbHNlIHsKKwkJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlzdHJjcHkoZm10LT5kZXNjcmlwdGlvbiwgIllDYkNyNDoyOjIgWUMgUGxhbmFyIik7CisJCWZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVWNDIyUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl90cnlfZm10X3ZpZF9jYXAoKSAtIFRSWV9GTVQgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBmbXQ6IHB0ciB0byB2NGwyIGZvcm1hdCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCB2cGlmX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZm10LT5mbXQucGl4OworCisJcmV0dXJuIHZwaWZfY2hlY2tfZm9ybWF0KGNoLCBwaXhmbXQsIDEpOworfQorCisKKy8qKgorICogdnBpZl9nX2ZtdF92aWRfY2FwKCkgLSBTZXQgSU5QVVQgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBmbXQ6IHB0ciB0byB2NGwyIGZvcm1hdCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCB2cGlmX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJLyogQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBidWZmZXIgdHlwZSAqLworCWlmIChjb21tb24tPmZtdC50eXBlICE9IGZtdC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBmb3JtYXQgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJKmZtdCA9IGNvbW1vbi0+Zm10OworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3NfZm10X3ZpZF9jYXAoKSAtIFNldCBGTVQgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBmbXQ6IHB0ciB0byB2NGwyIGZvcm1hdCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCB2cGlmX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdDsKKwlpbnQgcmV0ID0gMDsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAiVklESU9DX1NfRk1UXG4iKTsKKworCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAoY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiU3RyZWFtaW5nIGlzIHN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICgoVlBJRl9DSEFOTkVMMF9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgfHwKKwkgICAgKFZQSUZfQ0hBTk5FTDFfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpKSB7CisJCWlmICghZmgtPmluaXRpYWxpemVkKSB7CisJCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkNoYW5uZWwgQnVzeVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjaC0+cHJpbywgJmZoLT5wcmlvKTsKKwlpZiAoMCAhPSByZXQpCisJCXJldHVybiByZXQ7CisKKwlmaC0+aW5pdGlhbGl6ZWQgPSAxOworCisJcGl4Zm10ID0gJmZtdC0+Zm10LnBpeDsKKwkvKiBDaGVjayBmb3IgdmFsaWQgZmllbGQgZm9ybWF0ICovCisJcmV0ID0gdnBpZl9jaGVja19mb3JtYXQoY2gsIHBpeGZtdCwgMCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qIHN0b3JlIHRoZSBmb3JtYXQgaW4gdGhlIGNoYW5uZWwgb2JqZWN0ICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNvbW1vbi0+Zm10ID0gKmZtdDsKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3F1ZXJ5Y2FwKCkgLSBRVUVSWUNBUCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGNhcDogcHRyIHRvIHY0bDJfY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCB2cGlmX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IHZwaWZfY2FwdHVyZV9jb25maWcgKmNvbmZpZyA9IHZwaWZfZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJY2FwLT52ZXJzaW9uID0gVlBJRl9DQVBUVVJFX1ZFUlNJT05fQ09ERTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJc3RybGNweShjYXAtPmRyaXZlciwgInZwaWYgY2FwdHVyZSIsIHNpemVvZihjYXAtPmRyaXZlcikpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgIkRNNjQ2eCBQbGF0Zm9ybSIsIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJc3RybGNweShjYXAtPmNhcmQsIGNvbmZpZy0+Y2FyZF9uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX2dfcHJpb3JpdHkoKSAtIGdldCBwcmlvcml0eSBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHByaW86IHB0ciB0byB2NGwyX3ByaW9yaXR5IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHZwaWZfZ19wcmlvcml0eShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIGVudW0gdjRsMl9wcmlvcml0eSAqcHJpbykKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKworCSpwcmlvID0gdjRsMl9wcmlvX21heCgmY2gtPnByaW8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9zX3ByaW9yaXR5KCkgLSBzZXQgcHJpb3JpdHkgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBwcmlvOiBwdHIgdG8gdjRsMl9wcmlvcml0eSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCB2cGlmX3NfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9wcmlvcml0eSBwKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCisJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmNoLT5wcmlvLCAmZmgtPnByaW8sIHApOworfQorCisvKioKKyAqIHZwaWZfY3JvcGNhcCgpIC0gY3JvcGNhcCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGNyb3A6IHB0ciB0byB2NGwyX2Nyb3BjYXAgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGNyb3AtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJY3JvcC0+Ym91bmRzLmxlZnQgPSAwOworCWNyb3AtPmJvdW5kcy50b3AgPSAwOworCWNyb3AtPmJvdW5kcy5oZWlnaHQgPSBjb21tb24tPmhlaWdodDsKKwljcm9wLT5ib3VuZHMud2lkdGggPSBjb21tb24tPndpZHRoOworCWNyb3AtPmRlZnJlY3QgPSBjcm9wLT5ib3VuZHM7CisJcmV0dXJuIDA7Cit9CisKKy8qIHZwaWYgY2FwdHVyZSBpb2N0bCBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZwaWZfaW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgICAgICAgIAk9IHZwaWZfcXVlcnljYXAsCisJLnZpZGlvY19nX3ByaW9yaXR5CQk9IHZwaWZfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkJCT0gdnBpZl9zX3ByaW9yaXR5LAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IHZwaWZfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgIAkJPSB2cGlmX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCQk9IHZwaWZfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAkJPSB2cGlmX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2VudW1faW5wdXQJCT0gdnBpZl9lbnVtX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dAkJCT0gdnBpZl9zX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dAkJCT0gdnBpZl9nX2lucHV0LAorCS52aWRpb2NfcmVxYnVmcyAgICAgICAgIAk9IHZwaWZfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmICAgICAgICAJPSB2cGlmX3F1ZXJ5YnVmLAorCS52aWRpb2NfcXVlcnlzdGQJCT0gdnBpZl9xdWVyeXN0ZCwKKwkudmlkaW9jX3Nfc3RkICAgICAgICAgICAJPSB2cGlmX3Nfc3RkLAorCS52aWRpb2NfZ19zdGQJCQk9IHZwaWZfZ19zdGQsCisJLnZpZGlvY19xYnVmICAgICAgICAgICAgCT0gdnBpZl9xYnVmLAorCS52aWRpb2NfZHFidWYgICAgICAgICAgIAk9IHZwaWZfZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgCT0gdnBpZl9zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAJPSB2cGlmX3N0cmVhbW9mZiwKKwkudmlkaW9jX2Nyb3BjYXAgICAgICAgICAJPSB2cGlmX2Nyb3BjYXAsCit9OworCisvKiB2cGlmIGZpbGUgb3BlcmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2cGlmX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2cGlmX29wZW4sCisJLnJlbGVhc2UgPSB2cGlmX3JlbGVhc2UsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAorCS5tbWFwID0gdnBpZl9tbWFwLAorCS5wb2xsID0gdnBpZl9wb2xsCit9OworCisvKiB2cGlmIHZpZGVvIHRlbXBsYXRlICovCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2cGlmX3ZpZGVvX3RlbXBsYXRlID0geworCS5uYW1lCQk9ICJ2cGlmIiwKKwkuZm9wcwkJPSAmdnBpZl9mb3BzLAorCS5taW5vcgkJPSAtMSwKKwkuaW9jdGxfb3BzCT0gJnZwaWZfaW9jdGxfb3BzLAorfTsKKworLyoqCisgKiBpbml0aWFsaXplX3ZwaWYoKSAtIEluaXRpYWxpemUgdnBpZiBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtCisgKi8KK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV92cGlmKHZvaWQpCit7CisJaW50IGVyciA9IDAsIGksIGo7CisJaW50IGZyZWVfY2hhbm5lbF9vYmplY3RzX2luZGV4OworCisJLyogRGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyBzaG91bGQgYmUgMyAqLworCWlmICgoY2gwX251bWJ1ZmZlcnMgPiAwKSAmJgorCSAgICAoY2gwX251bWJ1ZmZlcnMgPCBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzKSkKKwkJY2gwX251bWJ1ZmZlcnMgPSBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzOworCWlmICgoY2gxX251bWJ1ZmZlcnMgPiAwKSAmJgorCSAgICAoY2gxX251bWJ1ZmZlcnMgPCBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzKSkKKwkJY2gxX251bWJ1ZmZlcnMgPSBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzOworCisJLyogU2V0IGJ1ZmZlciBzaXplIHRvIG1pbiBidWZmZXJzIHNpemUgaWYgaXQgaXMgaW52YWxpZCAqLworCWlmIChjaDBfYnVmc2l6ZSA8IGNvbmZpZ19wYXJhbXMubWluX2J1ZnNpemVbVlBJRl9DSEFOTkVMMF9WSURFT10pCisJCWNoMF9idWZzaXplID0KKwkJICAgIGNvbmZpZ19wYXJhbXMubWluX2J1ZnNpemVbVlBJRl9DSEFOTkVMMF9WSURFT107CisJaWYgKGNoMV9idWZzaXplIDwgY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZVtWUElGX0NIQU5ORUwxX1ZJREVPXSkKKwkJY2gxX2J1ZnNpemUgPQorCQkgICAgY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZVtWUElGX0NIQU5ORUwxX1ZJREVPXTsKKworCWNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tWUElGX0NIQU5ORUwwX1ZJREVPXSA9IGNoMF9udW1idWZmZXJzOworCWNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tWUElGX0NIQU5ORUwxX1ZJREVPXSA9IGNoMV9udW1idWZmZXJzOworCWlmIChjaDBfbnVtYnVmZmVycykgeworCQljb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtWUElGX0NIQU5ORUwwX1ZJREVPXQorCQkgICAgPSBjaDBfYnVmc2l6ZTsKKwl9CisJaWYgKGNoMV9udW1idWZmZXJzKSB7CisJCWNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW1ZQSUZfQ0hBTk5FTDFfVklERU9dCisJCSAgICA9IGNoMV9idWZzaXplOworCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc2l4IGNoYW5uZWwgb2JqZWN0cyAqLworCWZvciAoaSA9IDA7IGkgPCBWUElGX0NBUFRVUkVfTUFYX0RFVklDRVM7IGkrKykgeworCQl2cGlmX29iai5kZXZbaV0gPQorCQkgICAga3phbGxvYyhzaXplb2YoKnZwaWZfb2JqLmRldltpXSksIEdGUF9LRVJORUwpOworCQkvKiBJZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuIGVycm9yICovCisJCWlmICghdnBpZl9vYmouZGV2W2ldKSB7CisJCQlmcmVlX2NoYW5uZWxfb2JqZWN0c19pbmRleCA9IGk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byB2cGlmX2luaXRfZnJlZV9jaGFubmVsX29iamVjdHM7CisJCX0KKwl9CisJcmV0dXJuIDA7CisKK3ZwaWZfaW5pdF9mcmVlX2NoYW5uZWxfb2JqZWN0czoKKwlmb3IgKGogPSAwOyBqIDwgZnJlZV9jaGFubmVsX29iamVjdHNfaW5kZXg7IGorKykKKwkJa2ZyZWUodnBpZl9vYmouZGV2W2pdKTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHZwaWZfcHJvYmUgOiBUaGlzIGZ1bmN0aW9uIHByb2JlcyB0aGUgdnBpZiBjYXB0dXJlIGRyaXZlcgorICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBwb2ludGVyCisgKgorICogVGhpcyBjcmVhdGVzIGRldmljZSBlbnRyaWVzIGJ5IHJlZ2lzdGVyIGl0c2VsZiB0byB0aGUgVjRMMiBkcml2ZXIgYW5kCisgKiBpbml0aWFsaXplcyBmaWVsZHMgb2YgZWFjaCBjaGFubmVsIG9iamVjdHMKKyAqLworc3RhdGljIF9faW5pdCBpbnQgdnBpZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2cGlmX3N1YmRldl9pbmZvICpzdWJkZXZkYXRhOworCXN0cnVjdCB2cGlmX2NhcHR1cmVfY29uZmlnICpjb25maWc7CisJaW50IGksIGosIGssIG0sIHEsIGVycjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2g7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHN1YmRldl9jb3VudDsKKworCXZwaWZfZGV2ID0gJnBkZXYtPmRldjsKKworCWVyciA9IGluaXRpYWxpemVfdnBpZigpOworCWlmIChlcnIpIHsKKwkJdjRsMl9lcnIodnBpZl9kZXYtPmRyaXZlciwgIkVycm9yIGluaXRpYWxpemluZyB2cGlmXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlrID0gMDsKKwl3aGlsZSAoKHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgaykpKSB7CisJCWZvciAoaSA9IHJlcy0+c3RhcnQ7IGkgPD0gcmVzLT5lbmQ7IGkrKykgeworCQkJaWYgKHJlcXVlc3RfaXJxKGksIHZwaWZfY2hhbm5lbF9pc3IsIElSUUZfRElTQUJMRUQsCisJCQkJCSJETTY0NnhfQ2FwdHVyZSIsCisJCQkJKHZvaWQgKikoJnZwaWZfb2JqLmRldltrXS0+Y2hhbm5lbF9pZCkpKSB7CisJCQkJZXJyID0gLUVCVVNZOworCQkJCWktLTsKKwkJCQlnb3RvIHZwaWZfaW50X2VycjsKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZQSUZfQ0FQVFVSRV9NQVhfREVWSUNFUzsgaSsrKSB7CisJCS8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgY2hhbm5lbCBvYmplY3QgKi8KKwkJY2ggPSB2cGlmX29iai5kZXZbaV07CisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmlkZW8gZGV2aWNlICovCisJCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCQlpZiAoTlVMTCA9PSB2ZmQpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCQljaCA9IHZwaWZfb2JqLmRldltqXTsKKwkJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjaC0+dmlkZW9fZGV2KTsKKwkJCX0KKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIHZwaWZfZGV2X2FsbG9jX2VycjsKKwkJfQorCisJCS8qIEluaXRpYWxpemUgZmllbGQgb2YgdmlkZW8gZGV2aWNlICovCisJCSp2ZmQgPSB2cGlmX3ZpZGVvX3RlbXBsYXRlOworCQl2ZmQtPnY0bDJfZGV2ID0gJnZwaWZfb2JqLnY0bDJfZGV2OworCQl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwkJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwKKwkJCSAiRE02NDZ4X1ZQSUZDYXB0dXJlX0RSSVZFUl9WJWQuJWQuJWQiLAorCQkJIChWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCisJCQkgKFZQSUZfQ0FQVFVSRV9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLAorCQkJIChWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFKSAmIDB4ZmYpOworCQkvKiBTZXQgdmlkZW9fZGV2IHRvIHRoZSB2aWRlbyBkZXZpY2UgKi8KKwkJY2gtPnZpZGVvX2RldiA9IHZmZDsKKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgVlBJRl9DQVBUVVJFX01BWF9ERVZJQ0VTOyBqKyspIHsKKwkJY2ggPSB2cGlmX29iai5kZXZbal07CisJCWNoLT5jaGFubmVsX2lkID0gajsKKwkJY29tbW9uID0gJihjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNvbW1vbi0+aXJxbG9jayk7CisJCW11dGV4X2luaXQoJmNvbW1vbi0+bG9jayk7CisJCS8qIEluaXRpYWxpemUgcHJpbyBtZW1iZXIgb2YgY2hhbm5lbCBvYmplY3QgKi8KKwkJdjRsMl9wcmlvX2luaXQoJmNoLT5wcmlvKTsKKwkJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGNoLT52aWRlb19kZXYsCisJCQkJCSAgICBWRkxfVFlQRV9HUkFCQkVSLCAoaiA/IDEgOiAwKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIHByb2JlX291dDsKKworCQl2aWRlb19zZXRfZHJ2ZGF0YShjaC0+dmlkZW9fZGV2LCBjaCk7CisKKwl9CisKKwlpMmNfYWRhcCA9IGkyY19nZXRfYWRhcHRlcigxKTsKKwljb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXN1YmRldl9jb3VudCA9IGNvbmZpZy0+c3ViZGV2X2NvdW50OworCXZwaWZfb2JqLnNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2ICopICogc3ViZGV2X2NvdW50LAorCQkJCUdGUF9LRVJORUwpOworCWlmICh2cGlmX29iai5zZCA9PSBOVUxMKSB7CisJCXZwaWZfZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBzdWJkZXZpY2UgcG9pbnRlcnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHByb2JlX291dDsKKwl9CisKKwllcnIgPSB2NGwyX2RldmljZV9yZWdpc3Rlcih2cGlmX2RldiwgJnZwaWZfb2JqLnY0bDJfZGV2KTsKKwlpZiAoZXJyKSB7CisJCXY0bDJfZXJyKHZwaWZfZGV2LT5kcml2ZXIsICJFcnJvciByZWdpc3RlcmluZyB2NGwyIGRldmljZVxuIik7CisJCWdvdG8gcHJvYmVfc3ViZGV2X291dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc3ViZGV2X2NvdW50OyBpKyspIHsKKwkJc3ViZGV2ZGF0YSA9ICZjb25maWctPnN1YmRldl9pbmZvW2ldOworCQl2cGlmX29iai5zZFtpXSA9CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZ2cGlmX29iai52NGwyX2RldiwKKwkJCQkJCSAgaTJjX2FkYXAsCisJCQkJCQkgIHN1YmRldmRhdGEtPm5hbWUsCisJCQkJCQkgICZzdWJkZXZkYXRhLT5ib2FyZF9pbmZvLAorCQkJCQkJICBOVUxMKTsKKworCQlpZiAoIXZwaWZfb2JqLnNkW2ldKSB7CisJCQl2cGlmX2VycigiRXJyb3IgcmVnaXN0ZXJpbmcgdjRsMiBzdWJkZXZpY2VcbiIpOworCQkJZ290byBwcm9iZV9zdWJkZXZfb3V0OworCQl9CisJCXY0bDJfaW5mbygmdnBpZl9vYmoudjRsMl9kZXYsICJyZWdpc3RlcmVkIHN1YiBkZXZpY2UgJXNcbiIsCisJCQkgIHN1YmRldmRhdGEtPm5hbWUpOworCisJCWlmICh2cGlmX29iai5zZFtpXSkKKwkJCXZwaWZfb2JqLnNkW2ldLT5ncnBfaWQgPSAxIDw8IGk7CisJfQorCXY0bDJfaW5mbygmdnBpZl9vYmoudjRsMl9kZXYsICJETTY0NnggVlBJRiBDYXB0dXJlIGRyaXZlciIKKwkJICAiIGluaXRpYWxpemVkXG4iKTsKKworCXJldHVybiAwOworCitwcm9iZV9zdWJkZXZfb3V0OgorCS8qIGZyZWUgc3ViIGRldmljZXMgbWVtb3J5ICovCisJa2ZyZWUodnBpZl9vYmouc2QpOworCisJaiA9IFZQSUZfQ0FQVFVSRV9NQVhfREVWSUNFUzsKK3Byb2JlX291dDoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2cGlmX29iai52NGwyX2Rldik7CisJZm9yIChrID0gMDsgayA8IGo7IGsrKykgeworCQkvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgb2JqZWN0ICovCisJCWNoID0gdnBpZl9vYmouZGV2W2tdOworCQkvKiBVbnJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjaC0+dmlkZW9fZGV2KTsKKwl9CisKK3ZwaWZfZGV2X2FsbG9jX2VycjoKKwlrID0gVlBJRl9DQVBUVVJFX01BWF9ERVZJQ0VTLTE7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCBrKTsKKwlpID0gcmVzLT5lbmQ7CisKK3ZwaWZfaW50X2VycjoKKwlmb3IgKHEgPSBrOyBxID49IDA7IHEtLSkgeworCQlmb3IgKG0gPSBpOyBtID49IChpbnQpcmVzLT5zdGFydDsgbS0tKQorCQkJZnJlZV9pcnEobSwgKHZvaWQgKikoJnZwaWZfb2JqLmRldltxXS0+Y2hhbm5lbF9pZCkpOworCisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgcS0xKTsKKwkJaWYgKHJlcykKKwkJCWkgPSByZXMtPmVuZDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB2cGlmX3JlbW92ZSgpIC0gZHJpdmVyIHJlbW92ZSBoYW5kbGVyCisgKiBAZGV2aWNlOiBwdHIgdG8gcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoZSB2aWRvZSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCWludCBpOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2g7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2cGlmX29iai52NGwyX2Rldik7CisKKwkvKiB1bi1yZWdpc3RlciBkZXZpY2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9DQVBUVVJFX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBjaGFubmVsIG9iamVjdCAqLworCQljaCA9IHZwaWZfb2JqLmRldltpXTsKKwkJLyogVW5yZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8KKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2gtPnZpZGVvX2Rldik7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfc3VzcGVuZDogdnBpZiBkZXZpY2Ugc3VzcGVuZAorICoKKyAqIFRPRE86IEFkZCBzdXNwZW5kIGNvZGUgaGVyZQorICovCitzdGF0aWMgaW50Cit2cGlmX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAtMTsKK30KKworLyoqCisgKiB2cGlmX3Jlc3VtZTogdnBpZiBkZXZpY2Ugc3VzcGVuZAorICoKKyAqIFRPRE86IEFkZCByZXN1bWUgY29kZSBoZXJlCisgKi8KK3N0YXRpYyBpbnQKK3ZwaWZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB2cGlmX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSB2cGlmX3N1c3BlbmQsCisJLnJlc3VtZSA9IHZwaWZfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnBpZl9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAidnBpZl9jYXB0dXJlIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZ2cGlmX2Rldl9wbV9vcHMsCisJfSwKKwkucHJvYmUgPSB2cGlmX3Byb2JlLAorCS5yZW1vdmUgPSB2cGlmX3JlbW92ZSwKK307CisKKy8qKgorICogdnBpZl9pbml0OiBpbml0aWFsaXplIHRoZSB2cGlmIGRyaXZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGRldmljZSBhbmQgZHJpdmVyIHRvIHRoZSBrZXJuZWwsIHJlcXVlc3RzIGlycQorICogaGFuZGxlciBhbmQgYWxsb2NhdGVzIG1lbW9yeQorICogZm9yIGNoYW5uZWwgb2JqZWN0cworICovCitzdGF0aWMgX19pbml0IGludCB2cGlmX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2cGlmX2RyaXZlcik7Cit9CisKKy8qKgorICogdnBpZl9jbGVhbnVwIDogVGhpcyBmdW5jdGlvbiBjbGVhbiB1cCB0aGUgdnBpZiBjYXB0dXJlIHJlc291cmNlcworICoKKyAqIFRoaXMgd2lsbCB1bi1yZWdpc3RlcnMgZGV2aWNlIGFuZCBkcml2ZXIgdG8gdGhlIGtlcm5lbCwgZnJlZXMKKyAqIHJlcXVlc3RlZCBpcnEgaGFuZGxlciBhbmQgZGUtYWxsb2NhdGVzIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGNoYW5uZWwKKyAqIG9iamVjdHMuCisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycV9udW07CisJaW50IGkgPSAwOworCisJcGRldiA9IGNvbnRhaW5lcl9vZih2cGlmX2Rldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwl3aGlsZSAoKHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgaSkpKSB7CisJCWZvciAoaXJxX251bSA9IHJlcy0+c3RhcnQ7IGlycV9udW0gPD0gcmVzLT5lbmQ7IGlycV9udW0rKykKKwkJCWZyZWVfaXJxKGlycV9udW0sCisJCQkJICh2b2lkICopKCZ2cGlmX29iai5kZXZbaV0tPmNoYW5uZWxfaWQpKTsKKwkJaSsrOworCX0KKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cGlmX2RyaXZlcik7CisKKwlrZnJlZSh2cGlmX29iai5zZCk7CisJZm9yIChpID0gMDsgaSA8IFZQSUZfQ0FQVFVSRV9NQVhfREVWSUNFUzsgaSsrKQorCQlrZnJlZSh2cGlmX29iai5kZXZbaV0pOworfQorCisvKiBGdW5jdGlvbiBmb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwICovCittb2R1bGVfaW5pdCh2cGlmX2luaXQpOworbW9kdWxlX2V4aXQodnBpZl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTEyZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIFZQSUZfQ0FQVFVSRV9ICisjZGVmaW5lIFZQSUZfQ0FQVFVSRV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIEhlYWRlciBmaWxlcyAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KKyNpbmNsdWRlIDxtYWNoL2RtNjQ2eC5oPgorCisjaW5jbHVkZSAidnBpZi5oIgorCisvKiBNYWNyb3MgKi8KKyNkZWZpbmUgVlBJRl9NQUpPUl9SRUxFQVNFCQkwCisjZGVmaW5lIFZQSUZfTUlOT1JfUkVMRUFTRQkJMAorI2RlZmluZSBWUElGX0JVSUxECQkJMQorI2RlZmluZSBWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFCSgoVlBJRl9NQUpPUl9SRUxFQVNFIDw8IDE2KSB8IFwKKwkoVlBJRl9NSU5PUl9SRUxFQVNFIDw8IDgpIHwgVlBJRl9CVUlMRCkKKworI2RlZmluZSBWUElGX1ZBTElEX0ZJRUxEKGZpZWxkKQkJKCgoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHx8IFwKKwkoVjRMMl9GSUVMRF9OT05FID09IGZpZWxkKSkgfHwgXAorCSgoKFY0TDJfRklFTERfSU5URVJMQUNFRCA9PSBmaWVsZCkgfHwgXAorCShWNEwyX0ZJRUxEX1NFUV9UQiA9PSBmaWVsZCkpIHx8IFwKKwkoVjRMMl9GSUVMRF9TRVFfQlQgPT0gZmllbGQpKSkKKworI2RlZmluZSBWUElGX0NBUFRVUkVfTUFYX0RFVklDRVMJMgorI2RlZmluZSBWUElGX1ZJREVPX0lOREVYCQkwCisjZGVmaW5lIFZQSUZfTlVNQkVSX09GX09CSkVDVFMJCTEKKworLyogRW51bWVyYXRlZCBkYXRhIHR5cGUgdG8gZ2l2ZSBpZCB0byBlYWNoIGRldmljZSBwZXIgY2hhbm5lbCAqLworZW51bSB2cGlmX2NoYW5uZWxfaWQgeworCVZQSUZfQ0hBTk5FTDBfVklERU8gPSAwLAorCVZQSUZfQ0hBTk5FTDFfVklERU8sCit9OworCitzdHJ1Y3QgdmlkZW9fb2JqIHsKKwllbnVtIHY0bDJfZmllbGQgYnVmX2ZpZWxkOworCS8qIEN1cnJlbnRseSBzZWxlY3RlZCBvciBkZWZhdWx0IHN0YW5kYXJkICovCisJdjRsMl9zdGRfaWQgc3RkaWQ7CisJLyogVGhpcyBpcyB0byB0cmFjayB0aGUgbGFzdCBpbnB1dCB0aGF0IGlzIHBhc3NlZCB0byBhcHBsaWNhdGlvbiAqLworCXUzMiBpbnB1dF9pZHg7Cit9OworCitzdHJ1Y3QgY29tbW9uX29iaiB7CisJLyogUG9pbnRlciBwb2ludGluZyB0byBjdXJyZW50IHY0bDJfYnVmZmVyICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqY3VyX2ZybTsKKwkvKiBQb2ludGVyIHBvaW50aW5nIHRvIGN1cnJlbnQgdjRsMl9idWZmZXIgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpuZXh0X2ZybTsKKwkvKgorCSAqIFRoaXMgZmllbGQga2VlcHMgdHJhY2sgb2YgdHlwZSBvZiBidWZmZXIgZXhjaGFuZ2UgbWVjaGFuaXNtCisJICogdXNlciBoYXMgc2VsZWN0ZWQKKwkgKi8KKwllbnVtIHY0bDJfbWVtb3J5IG1lbW9yeTsKKwkvKiBVc2VkIHRvIHN0b3JlIHBpeGVsIGZvcm1hdCAqLworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7CisJLyogQnVmZmVyIHF1ZXVlIHVzZWQgaW4gdmlkZW8tYnVmICovCisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlIGJ1ZmZlcl9xdWV1ZTsKKwkvKiBRdWV1ZSBvZiBmaWxsZWQgZnJhbWVzICovCisJc3RydWN0IGxpc3RfaGVhZCBkbWFfcXVldWU7CisJLyogVXNlZCBpbiB2aWRlby1idWYgKi8KKwlzcGlubG9ja190IGlycWxvY2s7CisJLyogbG9jayB1c2VkIHRvIGFjY2VzcyB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBtdXRleCBsb2NrOworCS8qIG51bWJlciBvZiB1c2VycyBwZXJmb3JtaW5nIElPICovCisJdTMyIGlvX3VzcnM7CisJLyogSW5kaWNhdGVzIHdoZXRoZXIgc3RyZWFtaW5nIHN0YXJ0ZWQgKi8KKwl1OCBzdGFydGVkOworCS8qIEZ1bmN0aW9uIHBvaW50ZXIgdG8gc2V0IHRoZSBhZGRyZXNzZXMgKi8KKwl2b2lkICgqc2V0X2FkZHIpICh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJICB1bnNpZ25lZCBsb25nKTsKKwkvKiBvZmZzZXQgd2hlcmUgWSB0b3Agc3RhcnRzIGZyb20gdGhlIHN0YXJ0aW5nIG9mIHRoZSBidWZmZXIgKi8KKwl1MzIgeXRvcF9vZmY7CisJLyogb2Zmc2V0IHdoZXJlIFkgYm90dG9tIHN0YXJ0cyBmcm9tIHRoZSBzdGFydGluZyBvZiB0aGUgYnVmZmVyICovCisJdTMyIHlidG1fb2ZmOworCS8qIG9mZnNldCB3aGVyZSBDIHRvcCBzdGFydHMgZnJvbSB0aGUgc3RhcnRpbmcgb2YgdGhlIGJ1ZmZlciAqLworCXUzMiBjdG9wX29mZjsKKwkvKiBvZmZzZXQgd2hlcmUgQyBib3R0b20gc3RhcnRzIGZyb20gdGhlIHN0YXJ0aW5nIG9mIHRoZSBidWZmZXIgKi8KKwl1MzIgY2J0bV9vZmY7CisJLyogSW5kaWNhdGVzIHdpZHRoIG9mIHRoZSBpbWFnZSBkYXRhICovCisJdTMyIHdpZHRoOworCS8qIEluZGljYXRlcyBoZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEgKi8KKwl1MzIgaGVpZ2h0OworfTsKKworc3RydWN0IGNoYW5uZWxfb2JqIHsKKwkvKiBJZGVudGlmaWVzIHZpZGVvIGRldmljZSBmb3IgdGhpcyBjaGFubmVsICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OworCS8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBzdGF0ZSBvZiB0aGUgcHJpb3JpdHkgKi8KKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisJLyogbnVtYmVyIG9mIG9wZW4gaW5zdGFuY2VzIG9mIHRoZSBjaGFubmVsICovCisJaW50IHVzcnM7CisJLyogSW5kaWNhdGVzIGlkIG9mIHRoZSBmaWVsZCB3aGljaCBpcyBiZWluZyBkaXNwbGF5ZWQgKi8KKwl1MzIgZmllbGRfaWQ7CisJLyogZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGRlY29kZXIgaXMgaW5pdGlhbGl6ZWQgKi8KKwl1OCBpbml0aWFsaXplZDsKKwkvKiBJZGVudGlmaWVzIGNoYW5uZWwgKi8KKwllbnVtIHZwaWZfY2hhbm5lbF9pZCBjaGFubmVsX2lkOworCS8qIGluZGV4IGludG8gc2QgdGFibGUgKi8KKwlpbnQgY3Vycl9zZF9pbmRleDsKKwkvKiBwdHIgdG8gY3VycmVudCBzdWIgZGV2aWNlIGluZm9ybWF0aW9uICovCisJc3RydWN0IHZwaWZfc3ViZGV2X2luZm8gKmN1cnJfc3ViZGV2X2luZm87CisJLyogdnBpZiBjb25maWd1cmF0aW9uIHBhcmFtcyAqLworCXN0cnVjdCB2cGlmX3BhcmFtcyB2cGlmcGFyYW1zOworCS8qIGNvbW1vbiBvYmplY3QgYXJyYXkgKi8KKwlzdHJ1Y3QgY29tbW9uX29iaiBjb21tb25bVlBJRl9OVU1CRVJfT0ZfT0JKRUNUU107CisJLyogdmlkZW8gb2JqZWN0ICovCisJc3RydWN0IHZpZGVvX29iaiB2aWRlbzsKK307CisKKy8qIEZpbGUgaGFuZGxlIHN0cnVjdHVyZSAqLworc3RydWN0IHZwaWZfZmggeworCS8qIHBvaW50ZXIgdG8gY2hhbm5lbCBvYmplY3QgZm9yIG9wZW5lZCBkZXZpY2UgKi8KKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoYW5uZWw7CisJLyogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmaWxlIGhhbmRsZSBpcyBkb2luZyBJTyAqLworCXU4IGlvX2FsbG93ZWRbVlBJRl9OVU1CRVJfT0ZfT0JKRUNUU107CisJLyogVXNlZCB0byBrZWVwIHRyYWNrIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgKi8KKwllbnVtIHY0bDJfcHJpb3JpdHkgcHJpbzsKKwkvKiBVc2VkIHRvIGluZGljYXRlIGNoYW5uZWwgaXMgaW5pdGlhbGl6ZSBvciBub3QgKi8KKwl1OCBpbml0aWFsaXplZDsKK307CisKK3N0cnVjdCB2cGlmX2RldmljZSB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCBjaGFubmVsX29iaiAqZGV2W1ZQSUZfQ0FQVFVSRV9OVU1fQ0hBTk5FTFNdOworCXN0cnVjdCB2NGwyX3N1YmRldiAqKnNkOworfTsKKworc3RydWN0IHZwaWZfY29uZmlnX3BhcmFtcyB7CisJdTggbWluX251bWJ1ZmZlcnM7CisJdTggbnVtYnVmZmVyc1tWUElGX0NBUFRVUkVfTlVNX0NIQU5ORUxTXTsKKwlzOCBkZXZpY2VfdHlwZTsKKwl1MzIgbWluX2J1ZnNpemVbVlBJRl9DQVBUVVJFX05VTV9DSEFOTkVMU107CisJdTMyIGNoYW5uZWxfYnVmc2l6ZVtWUElGX0NBUFRVUkVfTlVNX0NIQU5ORUxTXTsKKwl1OCBkZWZhdWx0X2RldmljZVtWUElGX0NBUFRVUkVfTlVNX0NIQU5ORUxTXTsKKwl1OCBtYXhfZGV2aWNlX3R5cGU7Cit9OworLyogU3RydWN0IHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBsaW5lIG51bWJlcnMgZm9yIHRoZSBzbGljZWQgdmJpIHNlcnZpY2UgKi8KK3N0cnVjdCB2cGlmX3NlcnZpY2VfbGluZSB7CisJdTE2IHNlcnZpY2VfaWQ7CisJdTE2IHNlcnZpY2VfbGluZVsyXTsKK307CisjZW5kaWYJCQkJLyogRW5kIG9mIF9fS0VSTkVMX18gKi8KKyNlbmRpZgkJCQkvKiBWUElGX0NBUFRVUkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTVkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMKQEAgLTAsMCArMSwxNjU2IEBACisvKgorICogdnBpZi1kaXNwbGF5IC0gVlBJRiBkaXNwbGF5IGRyaXZlcgorICogRGlzcGxheSBkcml2ZXIgZm9yIFRJIERhVmluY2kgVlBJRgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAuYXMgaXMuIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgPG1lZGlhL2FkdjczNDMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworI2luY2x1ZGUgPG1hY2gvZG02NDZ4Lmg+CisKKyNpbmNsdWRlICJ2cGlmX2Rpc3BsYXkuaCIKKyNpbmNsdWRlICJ2cGlmLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiVEkgRGFWaW5jaSBWUElGIERpc3BsYXkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgRE02NDZYX1Y0TDJfU1REIChWNEwyX1NURF81MjVfNjAgfCBWNEwyX1NURF82MjVfNTApCisKKyNkZWZpbmUgdnBpZl9lcnIoZm10LCBhcmcuLi4pCXY0bDJfZXJyKCZ2cGlmX29iai52NGwyX2RldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHZwaWZfZGJnKGxldmVsLCBkZWJ1ZywgZm10LCBhcmcuLi4pCVwKKwkJdjRsMl9kYmcobGV2ZWwsIGRlYnVnLCAmdnBpZl9vYmoudjRsMl9kZXYsIGZtdCwgIyMgYXJnKQorCitzdGF0aWMgaW50IGRlYnVnID0gMTsKK3N0YXRpYyB1MzIgY2gyX251bWJ1ZmZlcnMgPSAzOworc3RhdGljIHUzMiBjaDNfbnVtYnVmZmVycyA9IDM7CitzdGF0aWMgdTMyIGNoMl9idWZzaXplID0gMTkyMCAqIDEwODAgKiAyOworc3RhdGljIHUzMiBjaDNfYnVmc2l6ZSA9IDcyMCAqIDU3NiAqIDI7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShjaDJfbnVtYnVmZmVycywgdWludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2gzX251bWJ1ZmZlcnMsIHVpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNoMl9idWZzaXplLCB1aW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjaDNfYnVmc2l6ZSwgdWludCwgU19JUlVHTyk7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAwLTEiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gyX251bWJ1ZmZlcnMsICJDaGFubmVsMiBidWZmZXIgY291bnQgKGRlZmF1bHQ6MykiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gzX251bWJ1ZmZlcnMsICJDaGFubmVsMyBidWZmZXIgY291bnQgKGRlZmF1bHQ6MykiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gyX2J1ZnNpemUsICJDaGFubmVsMiBidWZmZXIgc2l6ZSAoZGVmYXVsdDoxOTIwIHggMTA4MCB4IDIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGNoM19idWZzaXplLCAiQ2hhbm5lbDMgYnVmZmVyIHNpemUgKGRlZmF1bHQ6NzIwIHggNTc2IHggMikiKTsKKworc3RhdGljIHN0cnVjdCB2cGlmX2NvbmZpZ19wYXJhbXMgY29uZmlnX3BhcmFtcyA9IHsKKwkubWluX251bWJ1ZmZlcnMJCT0gMywKKwkubnVtYnVmZmVyc1swXQkJPSAzLAorCS5udW1idWZmZXJzWzFdCQk9IDMsCisJLm1pbl9idWZzaXplWzBdCQk9IDcyMCAqIDQ4MCAqIDIsCisJLm1pbl9idWZzaXplWzFdCQk9IDcyMCAqIDQ4MCAqIDIsCisJLmNoYW5uZWxfYnVmc2l6ZVswXQk9IDE5MjAgKiAxMDgwICogMiwKKwkuY2hhbm5lbF9idWZzaXplWzFdCT0gNzIwICogNTc2ICogMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdnBpZl9kZXZpY2UgdnBpZl9vYmogPSB7IHtOVUxMfSB9Oworc3RhdGljIHN0cnVjdCBkZXZpY2UgKnZwaWZfZGV2OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zIGNoX3BhcmFtc1tdID0geworCXsKKwkJIk5UU0MiLCA3MjAsIDQ4MCwgMzAsIDAsIDEsIDI2OCwgMTQ0MCwgMSwgMjMsIDI2MywgMjY2LAorCQkyODYsIDUyNSwgNTI1LCAwLCAxLCAwLCBWNEwyX1NURF81MjVfNjAsCisJfSwKKwl7CisJCSJQQUwiLCA3MjAsIDU3NiwgMjUsIDAsIDEsIDI4MCwgMTQ0MCwgMSwgMjMsIDMxMSwgMzEzLAorCQkzMzYsIDYyNCwgNjI1LCAwLCAxLCAwLCBWNEwyX1NURF82MjVfNTAsCisJfSwKK307CisKKy8qCisgKiB2cGlmX3VzZXJ2aXJ0X3RvX3BoeXM6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IHVzZXIKKyAqIHNwYWNlIHZpcnR1YWwgYWRkcmVzcyB0byBwaHlzaWNhbCBhZGRyZXNzLgorICovCitzdGF0aWMgdTMyIHZwaWZfdXNlcnZpcnRfdG9fcGh5cyh1MzIgdmlydHApCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIHBoeXNwID0gMDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCXZtYSA9IGZpbmRfdm1hKG1tLCB2aXJ0cCk7CisKKwkvKiBGb3Iga2VybmVsIGRpcmVjdC1tYXBwZWQgbWVtb3J5LCB0YWtlIHRoZSBlYXN5IHdheSAqLworCWlmICh2aXJ0cCA+PSBQQUdFX09GRlNFVCkgeworCQlwaHlzcCA9IHZpcnRfdG9fcGh5cygodm9pZCAqKXZpcnRwKTsKKwl9IGVsc2UgaWYgKHZtYSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0lPKSAmJiAodm1hLT52bV9wZ29mZikpIHsKKwkJLyogdGhpcyB3aWxsIGNhdGNoLCBrZXJuZWwtYWxsb2NhdGVkLCBtbWFwZWQtdG8tdXNlcm1vZGUgYWRkciAqLworCQlwaHlzcCA9ICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpICsgKHZpcnRwIC0gdm1hLT52bV9zdGFydCk7CisJfSBlbHNlIHsKKwkJLyogb3RoZXJ3aXNlLCB1c2UgZ2V0X3VzZXJfcGFnZXMoKSBmb3IgZ2VuZXJhbCB1c2VybGFuZCBwYWdlcyAqLworCQlpbnQgcmVzLCBucl9wYWdlcyA9IDE7CisJCXN0cnVjdCBwYWdlICpwYWdlczsKKwkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJCXJlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQkJCSAgICAgdmlydHAsIG5yX3BhZ2VzLCAxLCAwLCAmcGFnZXMsIE5VTEwpOworCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJCWlmIChyZXMgPT0gbnJfcGFnZXMpIHsKKwkJCXBoeXNwID0gX19wYShwYWdlX2FkZHJlc3MoJnBhZ2VzWzBdKSArCisJCQkJCQkJKHZpcnRwICYgflBBR0VfTUFTSykpOworCQl9IGVsc2UgeworCQkJdnBpZl9lcnIoImdldF91c2VyX3BhZ2VzIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiBwaHlzcDsKK30KKworLyoKKyAqIGJ1ZmZlcl9wcmVwYXJlOiBUaGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgZnJvbSB2aWRlb2J1Zl9xYnVmKCkKKyAqIGZ1bmN0aW9uIHRoZSBidWZmZXIgaXMgcHJlcGFyZWQgYW5kIHVzZXIgc3BhY2UgdmlydHVhbCBhZGRyZXNzIGlzIGNvbnZlcnRlZAorICogaW50byBwaHlzaWNhbCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9idWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWNvbW1vbiA9ICZmaC0+Y2hhbm5lbC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgeworCQl2Yi0+d2lkdGgJPSBjb21tb24tPndpZHRoOworCQl2Yi0+aGVpZ2h0CT0gY29tbW9uLT5oZWlnaHQ7CisJCXZiLT5zaXplCT0gdmItPndpZHRoICogdmItPmhlaWdodDsKKwkJdmItPmZpZWxkCT0gZmllbGQ7CisJfQorCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJLyogaWYgdXNlciBwb2ludGVyIG1lbW9yeSBtZWNoYW5pc20gaXMgdXNlZCwgZ2V0IHRoZSBwaHlzaWNhbAorCSAqIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciAqLworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IGNvbW1vbi0+bWVtb3J5KSB7CisJCWlmICghdmItPmJhZGRyKSB7CisJCQl2cGlmX2VycigiYnVmZmVyX2FkZHJlc3MgaXMgMFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXZiLT5ib2ZmID0gdnBpZl91c2VydmlydF90b19waHlzKHZiLT5iYWRkcik7CisJCWlmICghSVNBTElHTkVEKHZiLT5ib2ZmKSkKKwkJCWdvdG8gYnVmX2FsaWduX2V4aXQ7CisJfQorCisJYWRkciA9IHZiLT5ib2ZmOworCWlmIChxLT5zdHJlYW1pbmcgJiYgKFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgIT0gcS0+dHlwZSkpIHsKKwkJaWYgKCFJU0FMSUdORUQoYWRkciArIGNvbW1vbi0+eXRvcF9vZmYpIHx8CisJCSAgICAhSVNBTElHTkVEKGFkZHIgKyBjb21tb24tPnlidG1fb2ZmKSB8fAorCQkgICAgIUlTQUxJR05FRChhZGRyICsgY29tbW9uLT5jdG9wX29mZikgfHwKKwkJICAgICFJU0FMSUdORUQoYWRkciArIGNvbW1vbi0+Y2J0bV9vZmYpKQorCQkJZ290byBidWZfYWxpZ25fZXhpdDsKKwl9CisJcmV0dXJuIDA7CisKK2J1Zl9hbGlnbl9leGl0OgorCXZwaWZfZXJyKCJidWZmZXIgb2Zmc2V0IG5vdCBhbGlnbmVkIHRvIDggYnl0ZXNcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogdnBpZl9idWZmZXJfc2V0dXA6IFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlcnMKKyAqLworc3RhdGljIGludCB2cGlmX2J1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCQkJdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJaWYgKFY0TDJfTUVNT1JZX01NQVAgIT0gY29tbW9uLT5tZW1vcnkpCisJCXJldHVybiAwOworCisJKnNpemUgPSBjb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF07CisJaWYgKCpjb3VudCA8IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnMpCisJCSpjb3VudCA9IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnM7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwaWZfYnVmZmVyX3F1ZXVlOiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGJ1ZmZlciB0byBETUEgcXVldWUKKyAqLworc3RhdGljIHZvaWQgdnBpZl9idWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisKKwljb21tb24gPSAmZmgtPmNoYW5uZWwtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCS8qIGFkZCB0aGUgYnVmZmVyIHRvIHRoZSBETUEgcXVldWUgKi8KKwlsaXN0X2FkZF90YWlsKCZ2Yi0+cXVldWUsICZjb21tb24tPmRtYV9xdWV1ZSk7CisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworfQorCisvKgorICogdnBpZl9idWZmZXJfcmVsZWFzZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgdmlkZW9idWYgbGF5ZXIgdG8KKyAqIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgYnVmZmVycworICovCitzdGF0aWMgdm9pZCB2cGlmX2J1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisJdW5zaWduZWQgaW50IGJ1Zl9zaXplID0gMDsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHEsIHZiKTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworCisJaWYgKFY0TDJfTUVNT1JZX01NQVAgIT0gY29tbW9uLT5tZW1vcnkpCisJCXJldHVybjsKKworCWJ1Zl9zaXplID0gY29uZmlnX3BhcmFtcy5jaGFubmVsX2J1ZnNpemVbY2gtPmNoYW5uZWxfaWRdOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2aWRlb19xb3BzID0geworCS5idWZfc2V0dXAJPSB2cGlmX2J1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUJPSB2cGlmX2J1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUJPSB2cGlmX2J1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UJPSB2cGlmX2J1ZmZlcl9yZWxlYXNlLAorfTsKK3N0YXRpYyB1OCBjaGFubmVsX2ZpcnN0X2ludFtWUElGX05VTU9CSkVDVFNdWzJdID0geyB7MSwgMX0gfTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc19wcm9ncmVzc2l2ZV9tb2RlKHN0cnVjdCBjb21tb25fb2JqICpjb21tb24pCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKKworCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgZnJvbSBidWZmZXIgcXVldWUgKi8KKwljb21tb24tPm5leHRfZnJtID0gbGlzdF9lbnRyeShjb21tb24tPmRtYV9xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHF1ZXVlKTsKKwkvKiBSZW1vdmUgdGhhdCBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlICovCisJbGlzdF9kZWwoJmNvbW1vbi0+bmV4dF9mcm0tPnF1ZXVlKTsKKwkvKiBNYXJrIHN0YXR1cyBvZiB0aGUgYnVmZmVyIGFzIGFjdGl2ZSAqLworCWNvbW1vbi0+bmV4dF9mcm0tPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCisJLyogU2V0IHRvcCBhbmQgYm90dG9tIGZpZWxkIGFkZHJzIGluIFZQSUYgcmVnaXN0ZXJzICovCisJYWRkciA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcoY29tbW9uLT5uZXh0X2ZybSk7CisJY29tbW9uLT5zZXRfYWRkcihhZGRyICsgY29tbW9uLT55dG9wX29mZiwKKwkJCQkgYWRkciArIGNvbW1vbi0+eWJ0bV9vZmYsCisJCQkJIGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmLAorCQkJCSBhZGRyICsgY29tbW9uLT5jYnRtX29mZik7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfaW50ZXJsYWNlZF9tb2RlKGludCBmaWQsIHN0cnVjdCBjb21tb25fb2JqICpjb21tb24pCit7CisJLyogZGV2aWNlIGZpZWxkIGlkIGFuZCBsb2NhbCBmaWVsZCBpZCBhcmUgaW4gc3luYyAqLworCS8qIElmIHRoaXMgaXMgZXZlbiBmaWVsZCAqLworCWlmICgwID09IGZpZCkgeworCQlpZiAoY29tbW9uLT5jdXJfZnJtID09IGNvbW1vbi0+bmV4dF9mcm0pCisJCQlyZXR1cm47CisKKwkJLyogb25lIGZyYW1lIGlzIGRpc3BsYXllZCBJZiBuZXh0IGZyYW1lIGlzCisJCSAqICBhdmFpbGFibGUsIHJlbGVhc2UgY3VyX2ZybSBhbmQgbW92ZSBvbiAqLworCQkvKiBDb3B5IGZyYW1lIGRpc3BsYXkgdGltZSAqLworCQlkb19nZXR0aW1lb2ZkYXkoJmNvbW1vbi0+Y3VyX2ZybS0+dHMpOworCQkvKiBDaGFuZ2Ugc3RhdHVzIG9mIHRoZSBjdXJfZnJtICovCisJCWNvbW1vbi0+Y3VyX2ZybS0+c3RhdGUgPSBWSURFT0JVRl9ET05FOworCQkvKiB1bmxvY2sgc2VtYXBob3JlIG9uIGN1cl9mcm0gKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmN1cl9mcm0tPmRvbmUpOworCQkvKiBNYWtlIGN1cl9mcm0gcG9pbnRpbmcgdG8gbmV4dF9mcm0gKi8KKwkJY29tbW9uLT5jdXJfZnJtID0gY29tbW9uLT5uZXh0X2ZybTsKKworCX0gZWxzZSBpZiAoMSA9PSBmaWQpIHsJLyogb2RkIGZpZWxkICovCisJCWlmIChsaXN0X2VtcHR5KCZjb21tb24tPmRtYV9xdWV1ZSkKKwkJICAgIHx8IChjb21tb24tPmN1cl9mcm0gIT0gY29tbW9uLT5uZXh0X2ZybSkpIHsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBvbmUgZmllbGQgaXMgZGlzcGxheWVkIGNvbmZpZ3VyZSB0aGUgbmV4dAorCQkgKiBmcmFtZSBpZiBpdCBpcyBhdmFpbGFibGUgZWxzZSBob2xkIG9uIGN1cnJlbnQKKwkJICogZnJhbWUgKi8KKwkJLyogR2V0IG5leHQgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlICovCisJCXByb2Nlc3NfcHJvZ3Jlc3NpdmVfbW9kZShjb21tb24pOworCisJfQorfQorCisvKgorICogdnBpZl9jaGFubmVsX2lzcjogSXQgY2hhbmdlcyBzdGF0dXMgb2YgdGhlIGRpc3BsYXllZCBidWZmZXIsIHRha2VzIG5leHQKKyAqIGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZSBhbmQgc2V0cyBpdHMgYWRkcmVzcyBpbiBWUElGIHJlZ2lzdGVycworICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdnBpZl9jaGFubmVsX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHZwaWZfZGV2aWNlICpkZXYgPSAmdnBpZl9vYmo7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgZmlkID0gLTEsIGk7CisJaW50IGNoYW5uZWxfaWQgPSAwOworCisJY2hhbm5lbF9pZCA9ICooaW50ICopKGRldl9pZCk7CisJY2ggPSBkZXYtPmRldltjaGFubmVsX2lkXTsKKwlmaWVsZCA9IGNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0uZm10LmZtdC5waXguZmllbGQ7CisJZm9yIChpID0gMDsgaSA8IFZQSUZfTlVNT0JKRUNUUzsgaSsrKSB7CisJCWNvbW1vbiA9ICZjaC0+Y29tbW9uW2ldOworCQkvKiBJZiBzdHJlYW1pbmcgaXMgc3RhcnRlZCBpbiB0aGlzIGNoYW5uZWwgKi8KKwkJaWYgKDAgPT0gY29tbW9uLT5zdGFydGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKDEgPT0gY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uZnJtX2ZtdCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogUHJvZ3Jlc3NpdmUgbW9kZSAqLworCQkJaWYgKCFjaGFubmVsX2ZpcnN0X2ludFtpXVtjaGFubmVsX2lkXSkgeworCQkJCS8qIE1hcmsgc3RhdHVzIG9mIHRoZSBjdXJfZnJtIHRvCisJCQkJICogZG9uZSBhbmQgdW5sb2NrIHNlbWFwaG9yZSBvbiBpdCAqLworCQkJCWRvX2dldHRpbWVvZmRheSgmY29tbW9uLT5jdXJfZnJtLT50cyk7CisJCQkJY29tbW9uLT5jdXJfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmN1cl9mcm0tPmRvbmUpOworCQkJCS8qIE1ha2UgY3VyX2ZybSBwb2ludGluZyB0byBuZXh0X2ZybSAqLworCQkJCWNvbW1vbi0+Y3VyX2ZybSA9IGNvbW1vbi0+bmV4dF9mcm07CisJCQl9CisKKwkJCWNoYW5uZWxfZmlyc3RfaW50W2ldW2NoYW5uZWxfaWRdID0gMDsKKwkJCXByb2Nlc3NfcHJvZ3Jlc3NpdmVfbW9kZShjb21tb24pOworCQl9IGVsc2UgeworCQkJLyogSW50ZXJsYWNlZCBtb2RlICovCisJCQkvKiBJZiBpdCBpcyBmaXJzdCBpbnRlcnJ1cHQsIGlnbm9yZSBpdCAqLworCisJCQlpZiAoY2hhbm5lbF9maXJzdF9pbnRbaV1bY2hhbm5lbF9pZF0pIHsKKwkJCQljaGFubmVsX2ZpcnN0X2ludFtpXVtjaGFubmVsX2lkXSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICgwID09IGkpIHsKKwkJCQljaC0+ZmllbGRfaWQgXj0gMTsKKwkJCQkvKiBHZXQgZmllbGQgaWQgZnJvbSBWUElGIHJlZ2lzdGVycyAqLworCQkJCWZpZCA9IHZwaWZfY2hhbm5lbF9nZXRmaWQoY2gtPmNoYW5uZWxfaWQgKyAyKTsKKwkJCQkvKiBJZiBmaWQgZG9lcyBub3QgbWF0Y2ggd2l0aCBzdG9yZWQgZmllbGQgaWQgKi8KKwkJCQlpZiAoZmlkICE9IGNoLT5maWVsZF9pZCkgeworCQkJCQkvKiBNYWtlIHRoZW0gaW4gc3luYyAqLworCQkJCQlpZiAoMCA9PSBmaWQpCisJCQkJCQljaC0+ZmllbGRfaWQgPSBmaWQ7CisKKwkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJCX0KKwkJCX0KKwkJCXByb2Nlc3NfaW50ZXJsYWNlZF9tb2RlKGZpZCwgY29tbW9uKTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB2cGlmX2dldF9zdGRfaW5mbyhzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoKQoreworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCXN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZnBhcmFtcyA9ICZjaC0+dnBpZnBhcmFtczsKKwlzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKnN0ZF9pbmZvID0gJnZwaWZwYXJhbXMtPnN0ZF9pbmZvOworCWNvbnN0IHN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqY29uZmlnOworCisJaW50IGluZGV4OworCisJc3RkX2luZm8tPnN0ZGlkID0gdmlkX2NoLT5zdGRpZDsKKwlpZiAoIXN0ZF9pbmZvKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUlJBWV9TSVpFKGNoX3BhcmFtcyk7IGluZGV4KyspIHsKKwkJY29uZmlnID0gJmNoX3BhcmFtc1tpbmRleF07CisJCWlmIChjb25maWctPnN0ZGlkICYgc3RkX2luZm8tPnN0ZGlkKSB7CisJCQltZW1jcHkoc3RkX2luZm8sIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGluZGV4ID09IEFSUkFZX1NJWkUoY2hfcGFyYW1zKSkKKwkJcmV0dXJuIC0xOworCisJY29tbW9uLT5mbXQuZm10LnBpeC53aWR0aCA9IHN0ZF9pbmZvLT53aWR0aDsKKwljb21tb24tPmZtdC5mbXQucGl4LmhlaWdodCA9IHN0ZF9pbmZvLT5oZWlnaHQ7CisJdnBpZl9kYmcoMSwgZGVidWcsICJQaXhlbCBkZXRhaWxzOiBXaWR0aCA9ICVkLEhlaWdodCA9ICVkXG4iLAorCQkJY29tbW9uLT5mbXQuZm10LnBpeC53aWR0aCwgY29tbW9uLT5mbXQuZm10LnBpeC5oZWlnaHQpOworCisJLyogU2V0IGhlaWdodCBhbmQgd2lkdGggcGFyYW1hdGVyZXMgKi8KKwljaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdLmhlaWdodCA9IHN0ZF9pbmZvLT5oZWlnaHQ7CisJY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS53aWR0aCA9IHN0ZF9pbmZvLT53aWR0aDsKKworCXJldHVybiAwOworfQorCisvKgorICogdnBpZl9jYWxjdWxhdGVfb2Zmc2V0czogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGJ1ZmZlcnMgb2Zmc2V0IGZvciBZIGFuZCBDCisgKiBpbiB0aGUgdG9wIGFuZCBib3R0b20gZmllbGQKKyAqLworc3RhdGljIHZvaWQgdnBpZl9jYWxjdWxhdGVfb2Zmc2V0cyhzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoKQoreworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlzdHJ1Y3QgdnBpZl9wYXJhbXMgKnZwaWZwYXJhbXMgPSAmY2gtPnZwaWZwYXJhbXM7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkID0gY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZDsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCXVuc2lnbmVkIGludCBocGl0Y2gsIHZwaXRjaCwgc2l6ZWltYWdlOworCisJaWYgKFY0TDJfRklFTERfQU5ZID09IGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQpIHsKKwkJaWYgKGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLmZybV9mbXQpCisJCQl2aWRfY2gtPmJ1Zl9maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJZWxzZQorCQkJdmlkX2NoLT5idWZfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJfSBlbHNlIHsKKwkJdmlkX2NoLT5idWZfZmllbGQgPSBjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkOworCX0KKworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IGNvbW1vbi0+bWVtb3J5KQorCQlzaXplaW1hZ2UgPSBjb21tb24tPmZtdC5mbXQucGl4LnNpemVpbWFnZTsKKwllbHNlCisJCXNpemVpbWFnZSA9IGNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKworCWhwaXRjaCA9IGNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lOworCXZwaXRjaCA9IHNpemVpbWFnZSAvIChocGl0Y2ggKiAyKTsKKwlpZiAoKFY0TDJfRklFTERfTk9ORSA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkgfHwKKwkgICAgKFY0TDJfRklFTERfSU5URVJMQUNFRCA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkpIHsKKwkJY29tbW9uLT55dG9wX29mZiA9IDA7CisJCWNvbW1vbi0+eWJ0bV9vZmYgPSBocGl0Y2g7CisJCWNvbW1vbi0+Y3RvcF9vZmYgPSBzaXplaW1hZ2UgLyAyOworCQljb21tb24tPmNidG1fb2ZmID0gc2l6ZWltYWdlIC8gMiArIGhwaXRjaDsKKwl9IGVsc2UgaWYgKFY0TDJfRklFTERfU0VRX1RCID09IHZpZF9jaC0+YnVmX2ZpZWxkKSB7CisJCWNvbW1vbi0+eXRvcF9vZmYgPSAwOworCQljb21tb24tPnlidG1fb2ZmID0gc2l6ZWltYWdlIC8gNDsKKwkJY29tbW9uLT5jdG9wX29mZiA9IHNpemVpbWFnZSAvIDI7CisJCWNvbW1vbi0+Y2J0bV9vZmYgPSBjb21tb24tPmN0b3Bfb2ZmICsgc2l6ZWltYWdlIC8gNDsKKwl9IGVsc2UgaWYgKFY0TDJfRklFTERfU0VRX0JUID09IHZpZF9jaC0+YnVmX2ZpZWxkKSB7CisJCWNvbW1vbi0+eWJ0bV9vZmYgPSAwOworCQljb21tb24tPnl0b3Bfb2ZmID0gc2l6ZWltYWdlIC8gNDsKKwkJY29tbW9uLT5jYnRtX29mZiA9IHNpemVpbWFnZSAvIDI7CisJCWNvbW1vbi0+Y3RvcF9vZmYgPSBjb21tb24tPmNidG1fb2ZmICsgc2l6ZWltYWdlIC8gNDsKKwl9CisKKwlpZiAoKFY0TDJfRklFTERfTk9ORSA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkgfHwKKwkgICAgKFY0TDJfRklFTERfSU5URVJMQUNFRCA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkpIHsKKwkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLnN0b3JhZ2VfbW9kZSA9IDE7CisJfSBlbHNlIHsKKwkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLnN0b3JhZ2VfbW9kZSA9IDA7CisJfQorCisJaWYgKGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLmZybV9mbXQgPT0gMSkgeworCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuaHBpdGNoID0KKwkJICAgIGNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lOworCX0gZWxzZSB7CisJCWlmICgoZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpIHx8CisJCQkoZmllbGQgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEKSkKKwkJCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5ocGl0Y2ggPQorCQkJICAgIGNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lICogMjsKKwkJZWxzZQorCQkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLmhwaXRjaCA9CisJCQkgICAgY29tbW9uLT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmU7CisJfQorCisJY2gtPnZwaWZwYXJhbXMudmlkZW9fcGFyYW1zLnN0ZGlkID0gY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uc3RkaWQ7Cit9CisKK3N0YXRpYyB2b2lkIHZwaWZfY29uZmlnX2Zvcm1hdChzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoKQoreworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCWNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0FOWTsKKwlpZiAoY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW2NoLT5jaGFubmVsX2lkXSA9PSAwKQorCQljb21tb24tPm1lbW9yeSA9IFY0TDJfTUVNT1JZX1VTRVJQVFI7CisJZWxzZQorCQljb21tb24tPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisKKwljb21tb24tPmZtdC5mbXQucGl4LnNpemVpbWFnZSA9CisJCQljb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF07CisJY29tbW9uLT5mbXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQOworCWNvbW1vbi0+Zm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKK30KKworc3RhdGljIGludCB2cGlmX2NoZWNrX2Zvcm1hdChzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWVudW0gdjRsMl9maWVsZCBmaWVsZCA9IHBpeGZtdC0+ZmllbGQ7CisJdTMyIHNpemVpbWFnZSwgaHBpdGNoLCB2cGl0Y2g7CisKKwlpZiAocGl4Zm10LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCkKKwkJZ290byBpbnZhbGlkX2ZtdF9leGl0OworCisJaWYgKCEoVlBJRl9WQUxJRF9GSUVMRChmaWVsZCkpKQorCQlnb3RvIGludmFsaWRfZm10X2V4aXQ7CisKKwlpZiAocGl4Zm10LT5ieXRlc3BlcmxpbmUgPD0gMCkKKwkJZ290byBpbnZhbGlkX3BpdGNoX2V4aXQ7CisKKwlpZiAoVjRMMl9NRU1PUllfVVNFUlBUUiA9PSBjb21tb24tPm1lbW9yeSkKKwkJc2l6ZWltYWdlID0gcGl4Zm10LT5zaXplaW1hZ2U7CisJZWxzZQorCQlzaXplaW1hZ2UgPSBjb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF07CisKKwlpZiAodnBpZl9nZXRfc3RkX2luZm8oY2gpKSB7CisJCXZwaWZfZXJyKCJFcnJvciBnZXR0aW5nIHRoZSBzdGFuZGFyZCBpbmZvXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaHBpdGNoID0gcGl4Zm10LT5ieXRlc3BlcmxpbmU7CisJdnBpdGNoID0gc2l6ZWltYWdlIC8gKGhwaXRjaCAqIDIpOworCisJLyogQ2hlY2sgZm9yIHZhbGlkIHZhbHVlIG9mIHBpdGNoICovCisJaWYgKChocGl0Y2ggPCBjaC0+dnBpZnBhcmFtcy5zdGRfaW5mby53aWR0aCkgfHwKKwkgICAgKHZwaXRjaCA8IGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLmhlaWdodCkpCisJCWdvdG8gaW52YWxpZF9waXRjaF9leGl0OworCisJLyogQ2hlY2sgZm9yIDggYnl0ZSBhbGlnbm1lbnQgKi8KKwlpZiAoIUlTQUxJR05FRChocGl0Y2gpKSB7CisJCXZwaWZfZXJyKCJpbnZhbGlkIHBpdGNoIGFsaWdubWVudFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwaXhmbXQtPndpZHRoID0gY29tbW9uLT5mbXQuZm10LnBpeC53aWR0aDsKKwlwaXhmbXQtPmhlaWdodCA9IGNvbW1vbi0+Zm10LmZtdC5waXguaGVpZ2h0OworCisJcmV0dXJuIDA7CisKK2ludmFsaWRfZm10X2V4aXQ6CisJdnBpZl9lcnIoImludmFsaWQgZmllbGQgZm9ybWF0XG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKKworaW52YWxpZF9waXRjaF9leGl0OgorCXZwaWZfZXJyKCJpbnZhbGlkIHBpdGNoXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgdnBpZl9jb25maWdfYWRkcihzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoLCBpbnQgbXV4bW9kZSkKK3sKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwlpZiAoVlBJRl9DSEFOTkVMM19WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgeworCQljb21tb24tPnNldF9hZGRyID0gY2gzX3NldF92aWRlb2J1Zl9hZGRyOworCX0gZWxzZSB7CisJCWlmICgyID09IG11eG1vZGUpCisJCQljb21tb24tPnNldF9hZGRyID0gY2gyX3NldF92aWRlb2J1Zl9hZGRyX3ljX25tdXg7CisJCWVsc2UKKwkJCWNvbW1vbi0+c2V0X2FkZHIgPSBjaDJfc2V0X3ZpZGVvYnVmX2FkZHI7CisJfQorfQorCisvKgorICogdnBpZl9tbWFwOiBJdCBpcyB1c2VkIHRvIG1hcCBrZXJuZWwgc3BhY2UgYnVmZmVycyBpbnRvIHVzZXIgc3BhY2VzCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmZoLT5jaGFubmVsLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwlyZXR1cm4gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCB2bWEpOworfQorCisvKgorICogdnBpZl9wb2xsOiBJdCBpcyB1c2VkIGZvciBzZWxlY3QvcG9sbCBzeXN0ZW0gY2FsbAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHZwaWZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJaWYgKGNvbW1vbi0+c3RhcnRlZCkKKwkJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGVwLCAmY29tbW9uLT5idWZmZXJfcXVldWUsIHdhaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGlmX29wZW46IEl0IGNyZWF0ZXMgb2JqZWN0IG9mIGZpbGUgaGFuZGxlIHN0cnVjdHVyZSBhbmQgc3RvcmVzIGl0IGluCisgKiBwcml2YXRlX2RhdGEgbWVtYmVyIG9mIGZpbGVwb2ludGVyCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlcCk7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IE5VTEw7CisJc3RydWN0IHZwaWZfZmggKmZoID0gTlVMTDsKKworCWNoID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0ICovCisJZmggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdnBpZl9maCksIEdGUF9LRVJORUwpOworCWlmIChmaCA9PSBOVUxMKSB7CisJCXZwaWZfZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlIGhhbmRsZSBvYmplY3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzdG9yZSBwb2ludGVyIHRvIGZoIGluIHByaXZhdGVfZGF0YSBtZW1iZXIgb2YgZmlsZXAgKi8KKwlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmNoYW5uZWwgPSBjaDsKKwlmaC0+aW5pdGlhbGl6ZWQgPSAwOworCWlmICghY2gtPmluaXRpYWxpemVkKSB7CisJCWZoLT5pbml0aWFsaXplZCA9IDE7CisJCWNoLT5pbml0aWFsaXplZCA9IDE7CisJCW1lbXNldCgmY2gtPnZwaWZwYXJhbXMsIDAsIHNpemVvZihjaC0+dnBpZnBhcmFtcykpOworCX0KKworCS8qIEluY3JlbWVudCBjaGFubmVsIHVzcnMgY291bnRlciAqLworCWF0b21pY19pbmMoJmNoLT51c3JzKTsKKwkvKiBTZXQgaW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSBtZW1iZXIgdG8gZmFsc2UgKi8KKwlmaC0+aW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSA9IDA7CisJLyogSW5pdGlhbGl6ZSBwcmlvcml0eSBvZiB0aGlzIGluc3RhbmNlIHRvIGRlZmF1bHQgcHJpb3JpdHkgKi8KKwlmaC0+cHJpbyA9IFY0TDJfUFJJT1JJVFlfVU5TRVQ7CisJdjRsMl9wcmlvX29wZW4oJmNoLT5wcmlvLCAmZmgtPnByaW8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGlmX3JlbGVhc2U6IFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBidWZmZXIgcXVldWUsIGZyZWVzIHRoZSBidWZmZXJzIGFuZAorICogdGhlIHZwaWYgZmlsZSBoYW5kbGUKKyAqLworc3RhdGljIGludCB2cGlmX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGVwKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBpZiB0aGlzIGluc3RhbmNlIGlzIGRvaW5nIElPICovCisJaWYgKGZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdKSB7CisJCS8qIFJlc2V0IGlvX3VzcnMgbWVtYmVyIG9mIGNoYW5uZWwgb2JqZWN0ICovCisJCWNvbW1vbi0+aW9fdXNycyA9IDA7CisJCS8qIERpc2FibGUgY2hhbm5lbCAqLworCQlpZiAoVlBJRl9DSEFOTkVMMl9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgeworCQkJZW5hYmxlX2NoYW5uZWwyKDApOworCQkJY2hhbm5lbDJfaW50cl9lbmFibGUoMCk7CisJCX0KKwkJaWYgKChWUElGX0NIQU5ORUwzX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB8fAorCQkgICAgKDIgPT0gY29tbW9uLT5zdGFydGVkKSkgeworCQkJZW5hYmxlX2NoYW5uZWwzKDApOworCQkJY2hhbm5lbDNfaW50cl9lbmFibGUoMCk7CisJCX0KKwkJY29tbW9uLT5zdGFydGVkID0gMDsKKwkJLyogRnJlZSBidWZmZXJzIGFsbG9jYXRlZCAqLworCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKKwkJdmlkZW9idWZfbW1hcF9mcmVlKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSk7CisJCWNvbW1vbi0+bnVtYnVmZmVycyA9CisJCSAgICBjb25maWdfcGFyYW1zLm51bWJ1ZmZlcnNbY2gtPmNoYW5uZWxfaWRdOworCX0KKworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKworCS8qIERlY3JlbWVudCBjaGFubmVsIHVzcnMgY291bnRlciAqLworCWF0b21pY19kZWMoJmNoLT51c3JzKTsKKwkvKiBJZiB0aGlzIGZpbGUgaGFuZGxlIGhhcyBpbml0aWFsaXplIGVuY29kZXIgZGV2aWNlLCByZXNldCBpdCAqLworCWlmIChmaC0+aW5pdGlhbGl6ZWQpCisJCWNoLT5pbml0aWFsaXplZCA9IDA7CisKKwkvKiBDbG9zZSB0aGUgcHJpb3JpdHkgKi8KKwl2NGwyX3ByaW9fY2xvc2UoJmNoLT5wcmlvLCAmZmgtPnByaW8pOworCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWZoLT5pbml0aWFsaXplZCA9IDA7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgaW9jdGxzICovCisKK3N0YXRpYyBpbnQgdnBpZl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCB2cGlmX2Rpc3BsYXlfY29uZmlnICpjb25maWcgPSB2cGlmX2Rldi0+cGxhdGZvcm1fZGF0YTsKKworCWNhcC0+dmVyc2lvbiA9IFZQSUZfRElTUExBWV9WRVJTSU9OX0NPREU7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19PVVRQVVQgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJc3RybGNweShjYXAtPmRyaXZlciwgInZwaWYgZGlzcGxheSIsIHNpemVvZihjYXAtPmRyaXZlcikpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgIlBsYXRmb3JtIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgY29uZmlnLT5jYXJkX25hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwaWZfZW51bV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3sKKwlpZiAoZm10LT5pbmRleCAhPSAwKSB7CisJCXZwaWZfZXJyKCJJbnZhbGlkIGZvcm1hdCBpbmRleFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdCAqLworCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCXN0cmNweShmbXQtPmRlc2NyaXB0aW9uLCAiWUNiQ3I0OjI6MiBZQyBQbGFuYXIiKTsKKwlmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVVjQyMlA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX2dfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJLyogQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBidWZmZXIgdHlwZSAqLworCWlmIChjb21tb24tPmZtdC50eXBlICE9IGZtdC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBmb3JtYXQgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKHZwaWZfZ2V0X3N0ZF9pbmZvKGNoKSkgeworCQl2cGlmX2VycigiRXJyb3IgZ2V0dGluZyB0aGUgc3RhbmRhcmQgaW5mb1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpmbXQgPSBjb21tb24tPmZtdDsKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9zX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJaW50IHJldCA9IDA7CisKKwlpZiAoKFZQSUZfQ0hBTk5FTDJfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpCisJICAgIHx8IChWUElGX0NIQU5ORUwzX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSkgeworCQlpZiAoIWZoLT5pbml0aWFsaXplZCkgeworCQkJdnBpZl9kYmcoMSwgZGVidWcsICJDaGFubmVsIEJ1c3lcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCS8qIENoZWNrIGZvciB0aGUgcHJpb3JpdHkgKi8KKwkJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjaC0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gcmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZmgtPmluaXRpYWxpemVkID0gMTsKKwl9CisKKwlpZiAoY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiU3RyZWFtaW5nIGluIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwaXhmbXQgPSAmZm10LT5mbXQucGl4OworCS8qIENoZWNrIGZvciB2YWxpZCBmaWVsZCBmb3JtYXQgKi8KKwlyZXQgPSB2cGlmX2NoZWNrX2Zvcm1hdChjaCwgcGl4Zm10KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogc3RvcmUgdGhlIHBpeCBmb3JtYXQgaW4gdGhlIGNoYW5uZWwgb2JqZWN0ICovCisJY29tbW9uLT5mbXQuZm10LnBpeCA9ICpwaXhmbXQ7CisJLyogc3RvcmUgdGhlIGZvcm1hdCBpbiB0aGUgY2hhbm5lbCBvYmplY3QgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY29tbW9uLT5mbXQgPSAqZm10OworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwaWZfdHJ5X2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZm10LT5mbXQucGl4OworCWludCByZXQgPSAwOworCisJcmV0ID0gdnBpZl9jaGVja19mb3JtYXQoY2gsIHBpeGZtdCk7CisJaWYgKHJldCkgeworCQkqcGl4Zm10ID0gY29tbW9uLT5mbXQuZm10LnBpeDsKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPndpZHRoICogcGl4Zm10LT5oZWlnaHQgKiAyOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcWJ1ZikKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwl1OCBpbmRleCA9IDA7CisJaW50IHJldCA9IDA7CisKKwkvKiBUaGlzIGZpbGUgaGFuZGxlIGhhcyBub3QgaW5pdGlhbGl6ZWQgdGhlIGNoYW5uZWwsCisJICAgSXQgaXMgbm90IGFsbG93ZWQgdG8gZG8gc2V0dGluZ3MgKi8KKwlpZiAoKFZQSUZfQ0hBTk5FTDJfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpCisJICAgIHx8IChWUElGX0NIQU5ORUwzX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSkgeworCQlpZiAoIWZoLT5pbml0aWFsaXplZCkgeworCQkJdnBpZl9lcnIoIkNoYW5uZWwgQnVzeVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICE9IHJlcWJ1Zi0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmRleCA9IFZQSUZfVklERU9fSU5ERVg7CisKKwljb21tb24gPSAmY2gtPmNvbW1vbltpbmRleF07CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChjb21tb24tPmZtdC50eXBlICE9IHJlcWJ1Zi0+dHlwZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHJlcWJ1Zl9leGl0OworCX0KKworCWlmICgwICE9IGNvbW1vbi0+aW9fdXNycykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcmVxYnVmX2V4aXQ7CisJfQorCisJaWYgKHJlcWJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgeworCQlpZiAoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkKKwkJCWZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQllbHNlCisJCQlmaWVsZCA9IGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQ7CisJfSBlbHNlIHsKKwkJZmllbGQgPSBWNEwyX1ZCSV9JTlRFUkxBQ0VEOworCX0KKworCS8qIEluaXRpYWxpemUgdmlkZW9idWYgcXVldWUgYXMgcGVyIHRoZSBidWZmZXIgdHlwZSAqLworCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdCgmY29tbW9uLT5idWZmZXJfcXVldWUsCisJCQkJCSAgICAmdmlkZW9fcW9wcywgTlVMTCwKKwkJCQkJICAgICZjb21tb24tPmlycWxvY2ssCisJCQkJCSAgICByZXFidWYtPnR5cGUsIGZpZWxkLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLCBmaCk7CisKKwkvKiBTZXQgaW8gYWxsb3dlZCBtZW1iZXIgb2YgZmlsZSBoYW5kbGUgdG8gVFJVRSAqLworCWZoLT5pb19hbGxvd2VkW2luZGV4XSA9IDE7CisJLyogSW5jcmVtZW50IGlvIHVzcnMgbWVtYmVyIG9mIGNoYW5uZWwgb2JqZWN0IHRvIDEgKi8KKwljb21tb24tPmlvX3VzcnMgPSAxOworCS8qIFN0b3JlIHR5cGUgb2YgbWVtb3J5IHJlcXVlc3RlZCBpbiBjaGFubmVsIG9iamVjdCAqLworCWNvbW1vbi0+bWVtb3J5ID0gcmVxYnVmLT5tZW1vcnk7CisJSU5JVF9MSVNUX0hFQUQoJmNvbW1vbi0+ZG1hX3F1ZXVlKTsKKworCS8qIEFsbG9jYXRlIGJ1ZmZlcnMgKi8KKwlyZXQgPSB2aWRlb2J1Zl9yZXFidWZzKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgcmVxYnVmKTsKKworcmVxYnVmX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnRidWYpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJaWYgKGNvbW1vbi0+Zm10LnR5cGUgIT0gdGJ1Zi0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCB0YnVmKTsKK30KKworc3RhdGljIGludCB2cGlmX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2NGwyX2J1ZmZlciB0YnVmID0gKmJ1ZjsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYxOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjb21tb24tPmZtdC50eXBlICE9IHRidWYudHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdKSB7CisJCXZwaWZfZXJyKCJmaC0+aW9fYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCWlmICghKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKSkgfHwKKwkgICAgKGNvbW1vbi0+Y3VyX2ZybSAhPSBjb21tb24tPm5leHRfZnJtKSB8fAorCSAgICAhKGNvbW1vbi0+c3RhcnRlZCkgfHwKKwkgICAgKGNvbW1vbi0+c3RhcnRlZCAmJiAoMCA9PSBjaC0+ZmllbGRfaWQpKSkKKwkJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCBidWYpOworCisJLyogYnVmZmVycXVldWUgaXMgZW1wdHkgc3RvcmUgYnVmZmVyIGFkZHJlc3MgaW4gVlBJRiByZWdpc3RlcnMgKi8KKwltdXRleF9sb2NrKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZS52Yl9sb2NrKTsKKwlidWYxID0gY29tbW9uLT5idWZmZXJfcXVldWUuYnVmc1t0YnVmLmluZGV4XTsKKwlpZiAoYnVmMS0+bWVtb3J5ICE9IHRidWYubWVtb3J5KSB7CisJCXZwaWZfZXJyKCJpbnZhbGlkIGJ1ZmZlciB0eXBlXG4iKTsKKwkJZ290byBxYnVmX2V4aXQ7CisJfQorCisJaWYgKChidWYxLT5zdGF0ZSA9PSBWSURFT0JVRl9RVUVVRUQpIHx8CisJICAgIChidWYxLT5zdGF0ZSA9PSBWSURFT0JVRl9BQ1RJVkUpKSB7CisJCXZwaWZfZXJyKCJpbnZhbGlkIHN0YXRlXG4iKTsKKwkJZ290byBxYnVmX2V4aXQ7CisJfQorCisJc3dpdGNoIChidWYxLT5tZW1vcnkpIHsKKwljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCWlmIChidWYxLT5iYWRkciA9PSAwKQorCQkJZ290byBxYnVmX2V4aXQ7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgorCQlpZiAodGJ1Zi5sZW5ndGggPCBidWYxLT5ic2l6ZSkKKwkJCWdvdG8gcWJ1Zl9leGl0OworCisJCWlmICgoVklERU9CVUZfTkVFRFNfSU5JVCAhPSBidWYxLT5zdGF0ZSkKKwkJCSAgICAmJiAoYnVmMS0+YmFkZHIgIT0gdGJ1Zi5tLnVzZXJwdHIpKQorCQkJdnBpZl9idWZmZXJfcmVsZWFzZSgmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1ZjEpOworCQkJYnVmMS0+YmFkZHIgPSB0YnVmLm0udXNlcnB0cjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlnb3RvIHFidWZfZXhpdDsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0ID0gdnBpZl9idWZmZXJfcHJlcGFyZSgmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1ZjEsCisJCQkJCWNvbW1vbi0+YnVmZmVyX3F1ZXVlLmZpZWxkKTsKKwlpZiAocmV0IDwgMCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWdvdG8gcWJ1Zl9leGl0OworCX0KKworCWJ1ZjEtPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCWFkZHIgPSBidWYxLT5ib2ZmOworCWNvbW1vbi0+bmV4dF9mcm0gPSBidWYxOworCWlmICh0YnVmLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCkgeworCQljb21tb24tPnNldF9hZGRyKChhZGRyICsgY29tbW9uLT55dG9wX29mZiksCisJCQkJIChhZGRyICsgY29tbW9uLT55YnRtX29mZiksCisJCQkJIChhZGRyICsgY29tbW9uLT5jdG9wX29mZiksCisJCQkJIChhZGRyICsgY29tbW9uLT5jYnRtX29mZikpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZidWYxLT5zdHJlYW0sICZjb21tb24tPmJ1ZmZlcl9xdWV1ZS5zdHJlYW0pOworCW11dGV4X3VubG9jaygmY29tbW9uLT5idWZmZXJfcXVldWUudmJfbG9jayk7CisJcmV0dXJuIDA7CisKK3FidWZfZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLnZiX2xvY2spOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZwaWZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWludCByZXQgPSAwOworCisJaWYgKCEoKnN0ZF9pZCAmIERNNjQ2WF9WNEwyX1NURCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvbW1vbi0+c3RhcnRlZCkgeworCQl2cGlmX2Vycigic3RyZWFtaW5nIGluIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBDYWxsIGVuY29kZXIgc3ViZGV2aWNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3RhbmRhcmQgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2gtPnZpZGVvLnN0ZGlkID0gKnN0ZF9pZDsKKwkvKiBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFuZGFyZCAqLworCWlmICh2cGlmX2dldF9zdGRfaW5mbyhjaCkpIHsKKwkJdnBpZl9lcnIoIkVycm9yIGdldHRpbmcgdGhlIHN0YW5kYXJkIGluZm9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLndpZHRoICoKKwkJY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uaGVpZ2h0ICogMikgPgorCQljb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF0pIHsKKwkJdnBpZl9lcnIoImludmFsaWQgc3RkIGZvciB0aGlzIHNpemVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHNfc3RkX2V4aXQ7CisJfQorCisJY29tbW9uLT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjb21tb24tPmZtdC5mbXQucGl4LndpZHRoOworCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmb3JtYXQgaW5mb3JtYXRpb24gKi8KKwl2cGlmX2NvbmZpZ19mb3JtYXQoY2gpOworCisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwaWZfb2JqLnY0bDJfZGV2LCAxLCB2aWRlbywKKwkJCQkJCXNfc3RkX291dHB1dCwgKnN0ZF9pZCk7CisJaWYgKHJldCA8IDApIHsKKwkJdnBpZl9lcnIoIkZhaWxlZCB0byBzZXQgb3V0cHV0IHN0YW5kYXJkXG4iKTsKKwkJZ290byBzX3N0ZF9leGl0OworCX0KKworCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGlmX29iai52NGwyX2RldiwgMSwgY29yZSwKKwkJCQkJCQlzX3N0ZCwgKnN0ZF9pZCk7CisJaWYgKHJldCA8IDApCisJCXZwaWZfZXJyKCJGYWlsZWQgdG8gc2V0IHN0YW5kYXJkIGZvciBzdWIgZGV2aWNlc1xuIik7CisKK3Nfc3RkX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKworCSpzdGQgPSBjaC0+dmlkZW8uc3RkaWQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmY29tbW9uLT5idWZmZXJfcXVldWUsIHAsCisJCQkJCShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpOworfQorCitzdGF0aWMgaW50IHZwaWZfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIGJ1ZnR5cGUpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCBjaGFubmVsX29iaiAqb3RoX2NoID0gdnBpZl9vYmouZGV2WyFjaC0+Y2hhbm5lbF9pZF07CisJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmID0gJmNoLT52cGlmcGFyYW1zOworCXN0cnVjdCB2cGlmX2Rpc3BsYXlfY29uZmlnICp2cGlmX2NvbmZpZ19kYXRhID0KKwkJCQkJdnBpZl9kZXYtPnBsYXRmb3JtX2RhdGE7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChidWZ0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKSB7CisJCXZwaWZfZXJyKCJidWZmZXIgdHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFmaC0+aW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSkgeworCQl2cGlmX2VycigiZmgtPmlvX2FsbG93ZWRcbiIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwkvKiBJZiBTdHJlYW1pbmcgaXMgYWxyZWFkeSBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAoY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZXJyKCJjaGFubmVsLT5zdGFydGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoKGNoLT5jaGFubmVsX2lkID09IFZQSUZfQ0hBTk5FTDJfVklERU8KKwkJJiYgb3RoX2NoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0uc3RhcnRlZCAmJgorCQljaC0+dnBpZnBhcmFtcy5zdGRfaW5mby55Y211eF9tb2RlID09IDApCisJCXx8ICgoY2gtPmNoYW5uZWxfaWQgPT0gVlBJRl9DSEFOTkVMM19WSURFTykKKwkJJiYgKDIgPT0gb3RoX2NoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0uc3RhcnRlZCkpKSB7CisJCXZwaWZfZXJyKCJvdGhlciBjaGFubmVsIGlzIHVzaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXQgPSB2cGlmX2NoZWNrX2Zvcm1hdChjaCwgJmNvbW1vbi0+Zm10LmZtdC5waXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ2FsbCB2aWRlb2J1Zl9zdHJlYW1vbiB0byBzdGFydCBzdHJlYW1pbmcgIGluIHZpZGVvYnVmICovCisJcmV0ID0gdmlkZW9idWZfc3RyZWFtb24oJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKKwlpZiAocmV0IDwgMCkgeworCQl2cGlmX2VycigidmlkZW9idWZfc3RyZWFtb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBJZiBidWZmZXIgcXVldWUgaXMgZW1wdHksIHJldHVybiBlcnJvciAqLworCWlmIChsaXN0X2VtcHR5KCZjb21tb24tPmRtYV9xdWV1ZSkpIHsKKwkJdnBpZl9lcnIoImJ1ZmZlciBxdWV1ZSBpcyBlbXB0eVxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gc3RyZWFtb25fZXhpdDsKKwl9CisKKwkvKiBHZXQgdGhlIG5leHQgZnJhbWUgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlICovCisJY29tbW9uLT5uZXh0X2ZybSA9IGNvbW1vbi0+Y3VyX2ZybSA9CisJCQkgICAgbGlzdF9lbnRyeShjb21tb24tPmRtYV9xdWV1ZS5uZXh0LAorCQkJCSAgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7CisKKwlsaXN0X2RlbCgmY29tbW9uLT5jdXJfZnJtLT5xdWV1ZSk7CisJLyogTWFyayBzdGF0ZSBvZiB0aGUgY3VycmVudCBmcmFtZSB0byBhY3RpdmUgKi8KKwljb21tb24tPmN1cl9mcm0tPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCisJLyogSW5pdGlhbGl6ZSBmaWVsZF9pZCBhbmQgc3RhcnRlZCBtZW1iZXIgKi8KKwljaC0+ZmllbGRfaWQgPSAwOworCWNvbW1vbi0+c3RhcnRlZCA9IDE7CisJaWYgKGJ1ZnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHsKKwkJYWRkciA9IGNvbW1vbi0+Y3VyX2ZybS0+Ym9mZjsKKwkJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgZm9yIFkgYW5kIEMgZGF0YSAgaW4gdGhlIGJ1ZmZlciAqLworCQl2cGlmX2NhbGN1bGF0ZV9vZmZzZXRzKGNoKTsKKworCQlpZiAoKGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLmZybV9mbXQgJiYKKwkJCSgoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpCisJCQkmJiAoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX0FOWSkpKQorCQkJfHwgKCFjaC0+dnBpZnBhcmFtcy5zdGRfaW5mby5mcm1fZm10CisJCQkmJiAoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCA9PSBWNEwyX0ZJRUxEX05PTkUpKSkgeworCQkJdnBpZl9lcnIoImNvbmZsaWN0IGluIGZpZWxkIGZvcm1hdCBhbmQgc3RkIGZvcm1hdFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBzdHJlYW1vbl9leGl0OworCQl9CisKKwkJLyogY2xvY2sgc2V0dGluZ3MgKi8KKwkJcmV0ID0KKwkJIHZwaWZfY29uZmlnX2RhdGEtPnNldF9jbG9jayhjaC0+dnBpZnBhcmFtcy5zdGRfaW5mby55Y211eF9tb2RlLAorCQkJCQkJY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uaGRfc2QpOworCQlpZiAocmV0IDwgMCkgeworCQkJdnBpZl9lcnIoImNhbid0IHNldCBjbG9ja1xuIik7CisJCQlnb3RvIHN0cmVhbW9uX2V4aXQ7CisJCX0KKworCQkvKiBzZXQgdGhlIHBhcmFtZXRlcnMgYW5kIGFkZHJlc3NlcyAqLworCQlyZXQgPSB2cGlmX3NldF92aWRlb19wYXJhbXModnBpZiwgY2gtPmNoYW5uZWxfaWQgKyAyKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHN0cmVhbW9uX2V4aXQ7CisKKwkJY29tbW9uLT5zdGFydGVkID0gcmV0OworCQl2cGlmX2NvbmZpZ19hZGRyKGNoLCByZXQpOworCQljb21tb24tPnNldF9hZGRyKChhZGRyICsgY29tbW9uLT55dG9wX29mZiksCisJCQkJIChhZGRyICsgY29tbW9uLT55YnRtX29mZiksCisJCQkJIChhZGRyICsgY29tbW9uLT5jdG9wX29mZiksCisJCQkJIChhZGRyICsgY29tbW9uLT5jYnRtX29mZikpOworCisJCS8qIFNldCBpbnRlcnJ1cHQgZm9yIGJvdGggdGhlIGZpZWxkcyBpbiBWUElGCisJCSAgIFJlZ2lzdGVyIGVuYWJsZSBjaGFubmVsIGluIFZQSUYgcmVnaXN0ZXIgKi8KKwkJaWYgKFZQSUZfQ0hBTk5FTDJfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHsKKwkJCWNoYW5uZWwyX2ludHJfYXNzZXJ0KCk7CisJCQljaGFubmVsMl9pbnRyX2VuYWJsZSgxKTsKKwkJCWVuYWJsZV9jaGFubmVsMigxKTsKKwkJfQorCisJCWlmICgoVlBJRl9DSEFOTkVMM19WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkKKwkJCXx8IChjb21tb24tPnN0YXJ0ZWQgPT0gMikpIHsKKwkJCWNoYW5uZWwzX2ludHJfYXNzZXJ0KCk7CisJCQljaGFubmVsM19pbnRyX2VuYWJsZSgxKTsKKwkJCWVuYWJsZV9jaGFubmVsMygxKTsKKwkJfQorCQljaGFubmVsX2ZpcnN0X2ludFtWUElGX1ZJREVPX0lOREVYXVtjaC0+Y2hhbm5lbF9pZF0gPSAxOworCX0KKworc3RyZWFtb25fZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGlmX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQllbnVtIHY0bDJfYnVmX3R5cGUgYnVmdHlwZSkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwlpZiAoYnVmdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgeworCQl2cGlmX2VycigiYnVmZmVyIHR5cGUgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZmgtPmlvX2FsbG93ZWRbVlBJRl9WSURFT19JTkRFWF0pIHsKKwkJdnBpZl9lcnIoImZoLT5pb19hbGxvd2VkXG4iKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJaWYgKCFjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9lcnIoImNoYW5uZWwtPnN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGJ1ZnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHsKKwkJLyogZGlzYWJsZSBjaGFubmVsICovCisJCWlmIChWUElGX0NIQU5ORUwyX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB7CisJCQllbmFibGVfY2hhbm5lbDIoMCk7CisJCQljaGFubmVsMl9pbnRyX2VuYWJsZSgwKTsKKwkJfQorCQlpZiAoKFZQSUZfQ0hBTk5FTDNfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHx8CisJCQkJCSgyID09IGNvbW1vbi0+c3RhcnRlZCkpIHsKKwkJCWVuYWJsZV9jaGFubmVsMygwKTsKKwkJCWNoYW5uZWwzX2ludHJfZW5hYmxlKDApOworCQl9CisJfQorCisJY29tbW9uLT5zdGFydGVkID0gMDsKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSk7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICE9IGNyb3AtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJY3JvcC0+Ym91bmRzLmxlZnQgPSBjcm9wLT5ib3VuZHMudG9wID0gMDsKKwljcm9wLT5kZWZyZWN0LmxlZnQgPSBjcm9wLT5kZWZyZWN0LnRvcCA9IDA7CisJY3JvcC0+ZGVmcmVjdC5oZWlnaHQgPSBjcm9wLT5ib3VuZHMuaGVpZ2h0ID0gY29tbW9uLT5oZWlnaHQ7CisJY3JvcC0+ZGVmcmVjdC53aWR0aCA9IGNyb3AtPmJvdW5kcy53aWR0aCA9IGNvbW1vbi0+d2lkdGg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX2VudW1fb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9vdXRwdXQgKm91dHB1dCkKK3sKKworCXN0cnVjdCB2cGlmX2Rpc3BsYXlfY29uZmlnICpjb25maWcgPSB2cGlmX2Rldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmIChvdXRwdXQtPmluZGV4ID49IGNvbmZpZy0+b3V0cHV0X2NvdW50KSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiSW52YWxpZCBvdXRwdXQgaW5kZXhcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdHJjcHkob3V0cHV0LT5uYW1lLCBjb25maWctPm91dHB1dFtvdXRwdXQtPmluZGV4XSk7CisJb3V0cHV0LT50eXBlID0gVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0c7CisJb3V0cHV0LT5zdGQgPSBETTY0NlhfVjRMMl9TVEQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX3Nfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZXJyKCJTdHJlYW1pbmcgaW4gcHJvZ3Jlc3NcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gc19vdXRwdXRfZXhpdDsKKwl9CisKKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBpZl9vYmoudjRsMl9kZXYsIDEsIHZpZGVvLAorCQkJCQkJCXNfcm91dGluZywgMCwgaSwgMCk7CisKKwlpZiAocmV0IDwgMCkKKwkJdnBpZl9lcnIoIkZhaWxlZCB0byBzZXQgb3V0cHV0IHN0YW5kYXJkXG4iKTsKKworCXZpZF9jaC0+b3V0cHV0X2lkID0gaTsKKworc19vdXRwdXRfZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGlmX2dfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IHZpZGVvX29iaiAqdmlkX2NoID0gJmNoLT52aWRlbzsKKworCSppID0gdmlkX2NoLT5vdXRwdXRfaWQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX2dfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9wcmlvcml0eSAqcCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKworCSpwID0gdjRsMl9wcmlvX21heCgmY2gtPnByaW8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9zX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfcHJpb3JpdHkgcCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKworCXJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZjaC0+cHJpbywgJmZoLT5wcmlvLCBwKTsKK30KKworLyogdnBpZiBkaXNwbGF5IGlvY3RsIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdnBpZl9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICAgICAgCT0gdnBpZl9xdWVyeWNhcCwKKwkudmlkaW9jX2dfcHJpb3JpdHkJCT0gdnBpZl9nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eQkJPSB2cGlmX3NfcHJpb3JpdHksCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0CT0gdnBpZl9lbnVtX2ZtdF92aWRfb3V0LAorCS52aWRpb2NfZ19mbXRfdmlkX291dCAgCQk9IHZwaWZfZ19mbXRfdmlkX291dCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdXQgICAJPSB2cGlmX3NfZm10X3ZpZF9vdXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdXQgCT0gdnBpZl90cnlfZm10X3ZpZF9vdXQsCisJLnZpZGlvY19yZXFidWZzICAgICAgICAgCT0gdnBpZl9yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgICAgICAgIAk9IHZwaWZfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgICAgCT0gdnBpZl9xYnVmLAorCS52aWRpb2NfZHFidWYgICAgICAgICAgIAk9IHZwaWZfZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgCT0gdnBpZl9zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAJPSB2cGlmX3N0cmVhbW9mZiwKKwkudmlkaW9jX3Nfc3RkICAgICAgICAgICAJPSB2cGlmX3Nfc3RkLAorCS52aWRpb2NfZ19zdGQJCQk9IHZwaWZfZ19zdGQsCisJLnZpZGlvY19lbnVtX291dHB1dAkJPSB2cGlmX2VudW1fb3V0cHV0LAorCS52aWRpb2Nfc19vdXRwdXQJCT0gdnBpZl9zX291dHB1dCwKKwkudmlkaW9jX2dfb3V0cHV0CQk9IHZwaWZfZ19vdXRwdXQsCisJLnZpZGlvY19jcm9wY2FwICAgICAgICAgCT0gdnBpZl9jcm9wY2FwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2cGlmX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZwaWZfb3BlbiwKKwkucmVsZWFzZQk9IHZwaWZfcmVsZWFzZSwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorCS5tbWFwCQk9IHZwaWZfbW1hcCwKKwkucG9sbAkJPSB2cGlmX3BvbGwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZwaWZfdmlkZW9fdGVtcGxhdGUgPSB7CisJLm5hbWUJCT0gInZwaWYiLAorCS5mb3BzCQk9ICZ2cGlmX2ZvcHMsCisJLm1pbm9yCQk9IC0xLAorCS5pb2N0bF9vcHMJPSAmdnBpZl9pb2N0bF9vcHMsCisJLnR2bm9ybXMJPSBETTY0NlhfVjRMMl9TVEQsCisJLmN1cnJlbnRfbm9ybQk9IFY0TDJfU1REXzYyNV81MCwKKworfTsKKworLypDb25maWd1cmUgdGhlIGNoYW5uZWxzLCBidWZmZXIgc2l6ZWksIHJlcXVlc3QgaXJxICovCitzdGF0aWMgaW50IGluaXRpYWxpemVfdnBpZih2b2lkKQoreworCWludCBmcmVlX2NoYW5uZWxfb2JqZWN0c19pbmRleDsKKwlpbnQgZnJlZV9idWZmZXJfY2hhbm5lbF9pbmRleDsKKwlpbnQgZnJlZV9idWZmZXJfaW5kZXg7CisJaW50IGVyciA9IDAsIGksIGo7CisKKwkvKiBEZWZhdWx0IG51bWJlciBvZiBidWZmZXJzIHNob3VsZCBiZSAzICovCisJaWYgKChjaDJfbnVtYnVmZmVycyA+IDApICYmCisJICAgIChjaDJfbnVtYnVmZmVycyA8IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnMpKQorCQljaDJfbnVtYnVmZmVycyA9IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnM7CisJaWYgKChjaDNfbnVtYnVmZmVycyA+IDApICYmCisJICAgIChjaDNfbnVtYnVmZmVycyA8IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnMpKQorCQljaDNfbnVtYnVmZmVycyA9IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnM7CisKKwkvKiBTZXQgYnVmZmVyIHNpemUgdG8gbWluIGJ1ZmZlcnMgc2l6ZSBpZiBpbnZhbGlkIGJ1ZmZlciBzaXplIGlzCisJICogZ2l2ZW4gKi8KKwlpZiAoY2gyX2J1ZnNpemUgPCBjb25maWdfcGFyYW1zLm1pbl9idWZzaXplW1ZQSUZfQ0hBTk5FTDJfVklERU9dKQorCQljaDJfYnVmc2l6ZSA9CisJCSAgICBjb25maWdfcGFyYW1zLm1pbl9idWZzaXplW1ZQSUZfQ0hBTk5FTDJfVklERU9dOworCWlmIChjaDNfYnVmc2l6ZSA8IGNvbmZpZ19wYXJhbXMubWluX2J1ZnNpemVbVlBJRl9DSEFOTkVMM19WSURFT10pCisJCWNoM19idWZzaXplID0KKwkJICAgIGNvbmZpZ19wYXJhbXMubWluX2J1ZnNpemVbVlBJRl9DSEFOTkVMM19WSURFT107CisKKwljb25maWdfcGFyYW1zLm51bWJ1ZmZlcnNbVlBJRl9DSEFOTkVMMl9WSURFT10gPSBjaDJfbnVtYnVmZmVyczsKKworCWlmIChjaDJfbnVtYnVmZmVycykgeworCQljb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtWUElGX0NIQU5ORUwyX1ZJREVPXSA9CisJCQkJCQkJY2gyX2J1ZnNpemU7CisJfQorCWNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tWUElGX0NIQU5ORUwzX1ZJREVPXSA9IGNoM19udW1idWZmZXJzOworCisJaWYgKGNoM19udW1idWZmZXJzKSB7CisJCWNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW1ZQSUZfQ0hBTk5FTDNfVklERU9dID0KKwkJCQkJCQljaDNfYnVmc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHNpeCBjaGFubmVsIG9iamVjdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9ESVNQTEFZX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJdnBpZl9vYmouZGV2W2ldID0KKwkJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGFubmVsX29iaiksIEdGUF9LRVJORUwpOworCQkvKiBJZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuIGVycm9yICovCisJCWlmICghdnBpZl9vYmouZGV2W2ldKSB7CisJCQlmcmVlX2NoYW5uZWxfb2JqZWN0c19pbmRleCA9IGk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byB2cGlmX2luaXRfZnJlZV9jaGFubmVsX29iamVjdHM7CisJCX0KKwl9CisKKwlmcmVlX2NoYW5uZWxfb2JqZWN0c19pbmRleCA9IFZQSUZfRElTUExBWV9NQVhfREVWSUNFUzsKKwlmcmVlX2J1ZmZlcl9jaGFubmVsX2luZGV4ID0gVlBJRl9ESVNQTEFZX05VTV9DSEFOTkVMUzsKKwlmcmVlX2J1ZmZlcl9pbmRleCA9IGNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tpIC0gMV07CisKKwlyZXR1cm4gMDsKKwordnBpZl9pbml0X2ZyZWVfY2hhbm5lbF9vYmplY3RzOgorCWZvciAoaiA9IDA7IGogPCBmcmVlX2NoYW5uZWxfb2JqZWN0c19pbmRleDsgaisrKQorCQlrZnJlZSh2cGlmX29iai5kZXZbal0pOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiB2cGlmX3Byb2JlOiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgZGV2aWNlIGVudHJpZXMgYnkgcmVnaXN0ZXIgaXRzZWxmIHRvIHRoZQorICogVjRMMiBkcml2ZXIgYW5kIGluaXRpYWxpemVzIGZpZWxkcyBvZiBlYWNoIGNoYW5uZWwgb2JqZWN0cworICovCitzdGF0aWMgX19pbml0IGludCB2cGlmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZwaWZfc3ViZGV2X2luZm8gKnN1YmRldmRhdGE7CisJc3RydWN0IHZwaWZfZGlzcGxheV9jb25maWcgKmNvbmZpZzsKKwlpbnQgaSwgaiA9IDAsIGssIHEsIG0sIGVyciA9IDA7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKwlzdHJ1Y3QgdnBpZl9jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2g7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBzdWJkZXZfY291bnQ7CisKKwl2cGlmX2RldiA9ICZwZGV2LT5kZXY7CisKKwllcnIgPSBpbml0aWFsaXplX3ZwaWYoKTsKKworCWlmIChlcnIpIHsKKwkJdjRsMl9lcnIodnBpZl9kZXYtPmRyaXZlciwgIkVycm9yIGluaXRpYWxpemluZyB2cGlmXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB2NGwyX2RldmljZV9yZWdpc3Rlcih2cGlmX2RldiwgJnZwaWZfb2JqLnY0bDJfZGV2KTsKKwlpZiAoZXJyKSB7CisJCXY0bDJfZXJyKHZwaWZfZGV2LT5kcml2ZXIsICJFcnJvciByZWdpc3RlcmluZyB2NGwyIGRldmljZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJayA9IDA7CisJd2hpbGUgKChyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIGspKSkgeworCQlmb3IgKGkgPSByZXMtPnN0YXJ0OyBpIDw9IHJlcy0+ZW5kOyBpKyspIHsKKwkJCWlmIChyZXF1ZXN0X2lycShpLCB2cGlmX2NoYW5uZWxfaXNyLCBJUlFGX0RJU0FCTEVELAorCQkJCQkiRE02NDZ4X0Rpc3BsYXkiLAorCQkJCSh2b2lkICopKCZ2cGlmX29iai5kZXZba10tPmNoYW5uZWxfaWQpKSkgeworCQkJCWVyciA9IC1FQlVTWTsKKwkJCQlnb3RvIHZwaWZfaW50X2VycjsKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZQSUZfRElTUExBWV9NQVhfREVWSUNFUzsgaSsrKSB7CisKKwkJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBjaGFubmVsIG9iamVjdCAqLworCQljaCA9IHZwaWZfb2JqLmRldltpXTsKKworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZpZGVvIGRldmljZSAqLworCQl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwkJaWYgKHZmZCA9PSBOVUxMKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisJCQkJY2ggPSB2cGlmX29iai5kZXZbal07CisJCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2gtPnZpZGVvX2Rldik7CisJCQl9CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byB2cGlmX2ludF9lcnI7CisJCX0KKworCQkvKiBJbml0aWFsaXplIGZpZWxkIG9mIHZpZGVvIGRldmljZSAqLworCQkqdmZkID0gdnBpZl92aWRlb190ZW1wbGF0ZTsKKwkJdmZkLT52NGwyX2RldiA9ICZ2cGlmX29iai52NGwyX2RldjsKKwkJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksCisJCQkgIkRNNjQ2eF9WUElGRGlzcGxheV9EUklWRVJfViVkLiVkLiVkIiwKKwkJCSAoVlBJRl9ESVNQTEFZX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAorCQkJIChWUElGX0RJU1BMQVlfVkVSU0lPTl9DT0RFID4+IDgpICYgMHhmZiwKKwkJCSAoVlBJRl9ESVNQTEFZX1ZFUlNJT05fQ09ERSkgJiAweGZmKTsKKworCQkvKiBTZXQgdmlkZW9fZGV2IHRvIHRoZSB2aWRlbyBkZXZpY2UgKi8KKwkJY2gtPnZpZGVvX2RldiA9IHZmZDsKKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgVlBJRl9ESVNQTEFZX01BWF9ERVZJQ0VTOyBqKyspIHsKKwkJY2ggPSB2cGlmX29iai5kZXZbal07CisJCS8qIEluaXRpYWxpemUgZmllbGQgb2YgdGhlIGNoYW5uZWwgb2JqZWN0cyAqLworCQlhdG9taWNfc2V0KCZjaC0+dXNycywgMCk7CisJCWZvciAoayA9IDA7IGsgPCBWUElGX05VTU9CSkVDVFM7IGsrKykgeworCQkJY2gtPmNvbW1vbltrXS5udW1idWZmZXJzID0gMDsKKwkJCWNvbW1vbiA9ICZjaC0+Y29tbW9uW2tdOworCQkJY29tbW9uLT5pb191c3JzID0gMDsKKwkJCWNvbW1vbi0+c3RhcnRlZCA9IDA7CisJCQlzcGluX2xvY2tfaW5pdCgmY29tbW9uLT5pcnFsb2NrKTsKKwkJCW11dGV4X2luaXQoJmNvbW1vbi0+bG9jayk7CisJCQljb21tb24tPm51bWJ1ZmZlcnMgPSAwOworCQkJY29tbW9uLT5zZXRfYWRkciA9IE5VTEw7CisJCQljb21tb24tPnl0b3Bfb2ZmID0gY29tbW9uLT55YnRtX29mZiA9IDA7CisJCQljb21tb24tPmN0b3Bfb2ZmID0gY29tbW9uLT5jYnRtX29mZiA9IDA7CisJCQljb21tb24tPmN1cl9mcm0gPSBjb21tb24tPm5leHRfZnJtID0gTlVMTDsKKwkJCW1lbXNldCgmY29tbW9uLT5mbXQsIDAsIHNpemVvZihjb21tb24tPmZtdCkpOworCQkJY29tbW9uLT5udW1idWZmZXJzID0gY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW2tdOworCisJCX0KKwkJY2gtPmluaXRpYWxpemVkID0gMDsKKwkJY2gtPmNoYW5uZWxfaWQgPSBqOworCQlpZiAoaiA8IDIpCisJCQljaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdLm51bWJ1ZmZlcnMgPQorCQkJICAgIGNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tjaC0+Y2hhbm5lbF9pZF07CisJCWVsc2UKKwkJCWNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0ubnVtYnVmZmVycyA9IDA7CisKKwkJbWVtc2V0KCZjaC0+dnBpZnBhcmFtcywgMCwgc2l6ZW9mKGNoLT52cGlmcGFyYW1zKSk7CisKKwkJLyogSW5pdGlhbGl6ZSBwcmlvIG1lbWJlciBvZiBjaGFubmVsIG9iamVjdCAqLworCQl2NGwyX3ByaW9faW5pdCgmY2gtPnByaW8pOworCQljaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdLmZtdC50eXBlID0KKwkJCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCisJCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImNoYW5uZWw9JXgsY2hhbm5lbC0+dmlkZW9fZGV2PSV4XG4iLAorCQkJCShpbnQpY2gsIChpbnQpJmNoLT52aWRlb19kZXYpOworCisJCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjaC0+dmlkZW9fZGV2LAorCQkJCQkgIFZGTF9UWVBFX0dSQUJCRVIsIChqID8gMyA6IDIpKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIHByb2JlX291dDsKKworCQl2aWRlb19zZXRfZHJ2ZGF0YShjaC0+dmlkZW9fZGV2LCBjaCk7CisJfQorCisJaTJjX2FkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoMSk7CisJY29uZmlnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3ViZGV2X2NvdW50ID0gY29uZmlnLT5zdWJkZXZfY291bnQ7CisJc3ViZGV2ZGF0YSA9IGNvbmZpZy0+c3ViZGV2aW5mbzsKKwl2cGlmX29iai5zZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiAqKSAqIHN1YmRldl9jb3VudCwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHZwaWZfb2JqLnNkID09IE5VTEwpIHsKKwkJdnBpZl9lcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN1YmRldmljZSBwb2ludGVyc1xuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gcHJvYmVfb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzdWJkZXZfY291bnQ7IGkrKykgeworCQl2cGlmX29iai5zZFtpXSA9IHY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJnZwaWZfb2JqLnY0bDJfZGV2LAorCQkJCQkJaTJjX2FkYXAsIHN1YmRldmRhdGFbaV0ubmFtZSwKKwkJCQkJCSZzdWJkZXZkYXRhW2ldLmJvYXJkX2luZm8sCisJCQkJCQlOVUxMKTsKKwkJaWYgKCF2cGlmX29iai5zZFtpXSkgeworCQkJdnBpZl9lcnIoIkVycm9yIHJlZ2lzdGVyaW5nIHY0bDIgc3ViZGV2aWNlXG4iKTsKKwkJCWdvdG8gcHJvYmVfc3ViZGV2X291dDsKKwkJfQorCisJCWlmICh2cGlmX29iai5zZFtpXSkKKwkJCXZwaWZfb2JqLnNkW2ldLT5ncnBfaWQgPSAxIDw8IGk7CisJfQorCisJcmV0dXJuIDA7CisKK3Byb2JlX3N1YmRldl9vdXQ6CisJa2ZyZWUodnBpZl9vYmouc2QpOworcHJvYmVfb3V0OgorCWZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsKKwkJY2ggPSB2cGlmX29iai5kZXZba107CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNoLT52aWRlb19kZXYpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjaC0+dmlkZW9fZGV2KTsKKwkJY2gtPnZpZGVvX2RldiA9IE5VTEw7CisJfQordnBpZl9pbnRfZXJyOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwaWZfb2JqLnY0bDJfZGV2KTsKKwl2cGlmX2VycigiVlBJRiBJUlEgcmVxdWVzdCBmYWlsZWRcbiIpOworCWZvciAocSA9IGs7IGsgPj0gMDsgay0tKSB7CisJCWZvciAobSA9IGk7IG0gPj0gcmVzLT5zdGFydDsgbS0tKQorCQkJZnJlZV9pcnEobSwgKHZvaWQgKikoJnZwaWZfb2JqLmRldltrXS0+Y2hhbm5lbF9pZCkpOworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIGstMSk7CisJCW0gPSByZXMtPmVuZDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdnBpZl9yZW1vdmU6IEl0IHVuLXJlZ2lzdGVyIGNoYW5uZWxzIGZyb20gVjRMMiBkcml2ZXIKKyAqLworc3RhdGljIGludCB2cGlmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKKwlpbnQgaTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwaWZfb2JqLnY0bDJfZGV2KTsKKworCS8qIHVuLXJlZ2lzdGVyIGRldmljZSAqLworCWZvciAoaSA9IDA7IGkgPCBWUElGX0RJU1BMQVlfTUFYX0RFVklDRVM7IGkrKykgeworCQkvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgb2JqZWN0ICovCisJCWNoID0gdnBpZl9vYmouZGV2W2ldOworCQkvKiBVbnJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjaC0+dmlkZW9fZGV2KTsKKworCQljaC0+dmlkZW9fZGV2ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnBpZl9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJCS5uYW1lCT0gInZwaWZfZGlzcGxheSIsCisJCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IHZwaWZfcHJvYmUsCisJLnJlbW92ZQk9IHZwaWZfcmVtb3ZlLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgdnBpZl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdnBpZl9kcml2ZXIpOworfQorCisvKgorICogdnBpZl9jbGVhbnVwOiBUaGlzIGZ1bmN0aW9uIHVuLXJlZ2lzdGVycyBkZXZpY2UgYW5kIGRyaXZlciB0byB0aGUga2VybmVsLAorICogZnJlZXMgcmVxdWVzdGVkIGlycSBoYW5kbGVyIGFuZCBkZS1hbGxvY2F0ZXMgbWVtb3J5IGFsbG9jYXRlZCBmb3IgY2hhbm5lbAorICogb2JqZWN0cy4KKyAqLworc3RhdGljIHZvaWQgdnBpZl9jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxX251bTsKKwlpbnQgaSA9IDA7CisKKwlwZGV2ID0gY29udGFpbmVyX29mKHZwaWZfZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCisJd2hpbGUgKChyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIGkpKSkgeworCQlmb3IgKGlycV9udW0gPSByZXMtPnN0YXJ0OyBpcnFfbnVtIDw9IHJlcy0+ZW5kOyBpcnFfbnVtKyspCisJCQlmcmVlX2lycShpcnFfbnVtLAorCQkJCSAodm9pZCAqKSgmdnBpZl9vYmouZGV2W2ldLT5jaGFubmVsX2lkKSk7CisJCWkrKzsKKwl9CisKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnBpZl9kcml2ZXIpOworCWtmcmVlKHZwaWZfb2JqLnNkKTsKKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9ESVNQTEFZX01BWF9ERVZJQ0VTOyBpKyspCisJCWtmcmVlKHZwaWZfb2JqLmRldltpXSk7Cit9CisKK21vZHVsZV9pbml0KHZwaWZfaW5pdCk7Cittb2R1bGVfZXhpdCh2cGlmX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTdjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBETTY0NnggZGlzcGxheSBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAuYXMgaXMuIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIERBVklOQ0lIRF9ESVNQTEFZX0gKKyNkZWZpbmUgREFWSU5DSUhEX0RJU1BMQVlfSAorCisvKiBIZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CisKKyNpbmNsdWRlICJ2cGlmLmgiCisKKy8qIE1hY3JvcyAqLworI2RlZmluZSBWUElGX01BSk9SX1JFTEVBU0UJKDApCisjZGVmaW5lIFZQSUZfTUlOT1JfUkVMRUFTRQkoMCkKKyNkZWZpbmUgVlBJRl9CVUlMRAkJKDEpCisKKyNkZWZpbmUgVlBJRl9ESVNQTEFZX1ZFUlNJT05fQ09ERSBcCisJKChWUElGX01BSk9SX1JFTEVBU0UgPDwgMTYpIHwgKFZQSUZfTUlOT1JfUkVMRUFTRSA8PCA4KSB8IFZQSUZfQlVJTEQpCisKKyNkZWZpbmUgVlBJRl9WQUxJRF9GSUVMRChmaWVsZCkgXAorCSgoKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB8fCAoVjRMMl9GSUVMRF9OT05FID09IGZpZWxkKSkgfHwgXAorCSgoKFY0TDJfRklFTERfSU5URVJMQUNFRCA9PSBmaWVsZCkgfHwgKFY0TDJfRklFTERfU0VRX1RCID09IGZpZWxkKSkgfHwgXAorCShWNEwyX0ZJRUxEX1NFUV9CVCA9PSBmaWVsZCkpKQorCisjZGVmaW5lIFZQSUZfRElTUExBWV9NQVhfREVWSUNFUwkoMikKKyNkZWZpbmUgVlBJRl9TTElDRURfQlVGX1NJWkUJCSgyNTYpCisjZGVmaW5lIFZQSUZfU0xJQ0VEX01BWF9TRVJWSUNFUwkoMykKKyNkZWZpbmUgVlBJRl9WSURFT19JTkRFWAkJKDApCisjZGVmaW5lIFZQSUZfVkJJX0lOREVYCQkJKDEpCisjZGVmaW5lIFZQSUZfSEJJX0lOREVYCQkJKDIpCisKKy8qIFNldHRpbmcgaXQgdG8gMSBhcyBIQkkvVkJJIHN1cHBvcnQgeWV0IHRvIGJlIGFkZGVkICwgZWxzZSAzKi8KKyNkZWZpbmUgVlBJRl9OVU1PQkpFQ1RTCSgxKQorCisvKiBNYWNyb3MgKi8KKyNkZWZpbmUgSVNBTElHTkVEKGEpICAgICgwID09ICgoYSkgJiA3KSkKKworLyogZW51bWVyYXRlZCBkYXRhIHR5cGVzICovCisvKiBFbnVtZXJhdGVkIGRhdGEgdHlwZSB0byBnaXZlIGlkIHRvIGVhY2ggZGV2aWNlIHBlciBjaGFubmVsICovCitlbnVtIHZwaWZfY2hhbm5lbF9pZCB7CisJVlBJRl9DSEFOTkVMMl9WSURFTyA9IDAsCS8qIENoYW5uZWwyIFZpZGVvICovCisJVlBJRl9DSEFOTkVMM19WSURFTywJCS8qIENoYW5uZWwzIFZpZGVvICovCit9OworCisvKiBzdHJ1Y3R1cmVzICovCisKK3N0cnVjdCB2aWRlb19vYmogeworCWVudW0gdjRsMl9maWVsZCBidWZfZmllbGQ7CisJdTMyIGxhdGVzdF9vbmx5OwkJLyogaW5kaWNhdGUgd2hldGhlciB0byByZXR1cm4KKwkJCQkJICogbW9zdCByZWNlbnQgZGlzcGxheWVkIGZyYW1lIG9ubHkgKi8KKwl2NGwyX3N0ZF9pZCBzdGRpZDsJCS8qIEN1cnJlbnRseSBzZWxlY3RlZCBvciBkZWZhdWx0CisJCQkJCSAqIHN0YW5kYXJkICovCisJdTMyIG91dHB1dF9pZDsJCQkvKiBDdXJyZW50IG91dHB1dCBpZCAqLworfTsKKworc3RydWN0IHZiaV9vYmogeworCWludCBudW1fc2VydmljZXM7CisJc3RydWN0IHZwaWZfdmJpX3BhcmFtcyB2YmlwYXJhbXM7CS8qIHZwaWYgcGFyYW1ldGVycyBmb3IgdGhlIHJhdworCQkJCQkJICogdmJpIGRhdGEgKi8KK307CisKK3N0cnVjdCBjb21tb25fb2JqIHsKKwkvKiBCdWZmZXIgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCXU4ICpmYnVmZmVyc1tWSURFT19NQVhfRlJBTUVdOwkJLyogTGlzdCBvZiBidWZmZXIgcG9pbnRlcnMgZm9yCisJCQkJCQkgKiBzdG9yaW5nIGZyYW1lcyAqLworCXUzMiBudW1idWZmZXJzOwkJCQkvKiBudW1iZXIgb2YgYnVmZmVycyAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmN1cl9mcm07CS8qIFBvaW50ZXIgcG9pbnRpbmcgdG8gY3VycmVudAorCQkJCQkJICogdmlkZW9idWZfYnVmZmVyICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqbmV4dF9mcm07CS8qIFBvaW50ZXIgcG9pbnRpbmcgdG8gbmV4dAorCQkJCQkJICogdmlkZW9idWZfYnVmZmVyICovCisJZW51bSB2NGwyX21lbW9yeSBtZW1vcnk7CQkvKiBUaGlzIGZpZWxkIGtlZXBzIHRyYWNrIG9mCisJCQkJCQkgKiB0eXBlIG9mIGJ1ZmZlciBleGNoYW5nZQorCQkJCQkJICogbWV0aG9kIHVzZXIgaGFzIHNlbGVjdGVkICovCisJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsJCQkvKiBVc2VkIHRvIHN0b3JlIHRoZSBmb3JtYXQgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgYnVmZmVyX3F1ZXVlOwkvKiBCdWZmZXIgcXVldWUgdXNlZCBpbgorCQkJCQkJICogdmlkZW8tYnVmICovCisJc3RydWN0IGxpc3RfaGVhZCBkbWFfcXVldWU7CQkvKiBRdWV1ZSBvZiBmaWxsZWQgZnJhbWVzICovCisJc3BpbmxvY2tfdCBpcnFsb2NrOwkJCS8qIFVzZWQgaW4gdmlkZW8tYnVmICovCisKKwkvKiBjaGFubmVsIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgbXV0ZXggbG9jazsJCQkvKiBsb2NrIHVzZWQgdG8gYWNjZXNzIHRoaXMKKwkJCQkJCSAqIHN0cnVjdHVyZSAqLworCXUzMiBpb191c3JzOwkJCQkvKiBudW1iZXIgb2YgdXNlcnMgcGVyZm9ybWluZworCQkJCQkJICogSU8gKi8KKwl1OCBzdGFydGVkOwkJCQkvKiBJbmRpY2F0ZXMgd2hldGhlciBzdHJlYW1pbmcKKwkJCQkJCSAqIHN0YXJ0ZWQgKi8KKwl1MzIgeXRvcF9vZmY7CQkJCS8qIG9mZnNldCBvZiBZIHRvcCBmcm9tIHRoZQorCQkJCQkJICogc3RhcnRpbmcgb2YgdGhlIGJ1ZmZlciAqLworCXUzMiB5YnRtX29mZjsJCQkJLyogb2Zmc2V0IG9mIFkgYm90dG9tIGZyb20gdGhlCisJCQkJCQkgKiBzdGFydGluZyBvZiB0aGUgYnVmZmVyICovCisJdTMyIGN0b3Bfb2ZmOwkJCQkvKiBvZmZzZXQgb2YgQyB0b3AgZnJvbSB0aGUKKwkJCQkJCSAqIHN0YXJ0aW5nIG9mIHRoZSBidWZmZXIgKi8KKwl1MzIgY2J0bV9vZmY7CQkJCS8qIG9mZnNldCBvZiBDIGJvdHRvbSBmcm9tIHRoZQorCQkJCQkJICogc3RhcnRpbmcgb2YgdGhlIGJ1ZmZlciAqLworCS8qIEZ1bmN0aW9uIHBvaW50ZXIgdG8gc2V0IHRoZSBhZGRyZXNzZXMgKi8KKwl2b2lkICgqc2V0X2FkZHIpICh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJCXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCXUzMiBoZWlnaHQ7CisJdTMyIHdpZHRoOworfTsKKworc3RydWN0IGNoYW5uZWxfb2JqIHsKKwkvKiBWNGwyIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CS8qIElkZW50aWZpZXMgdmlkZW8gZGV2aWNlIGZvcgorCQkJCQkgKiB0aGlzIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CS8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBzdGF0ZSBvZgorCQkJCQkgKiB0aGUgcHJpb3JpdHkgKi8KKwlhdG9taWNfdCB1c3JzOwkJCS8qIG51bWJlciBvZiBvcGVuIGluc3RhbmNlcyBvZgorCQkJCQkgKiB0aGUgY2hhbm5lbCAqLworCXUzMiBmaWVsZF9pZDsJCQkvKiBJbmRpY2F0ZXMgaWQgb2YgdGhlIGZpZWxkCisJCQkJCSAqIHdoaWNoIGlzIGJlaW5nIGRpc3BsYXllZCAqLworCXU4IGluaXRpYWxpemVkOwkJCS8qIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlcgorCQkJCQkgKiBlbmNvZGVyIGlzIGluaXRpYWxpemVkICovCisKKwllbnVtIHZwaWZfY2hhbm5lbF9pZCBjaGFubmVsX2lkOy8qIElkZW50aWZpZXMgY2hhbm5lbCAqLworCXN0cnVjdCB2cGlmX3BhcmFtcyB2cGlmcGFyYW1zOworCXN0cnVjdCBjb21tb25fb2JqIGNvbW1vbltWUElGX05VTU9CSkVDVFNdOworCXN0cnVjdCB2aWRlb19vYmogdmlkZW87CisJc3RydWN0IHZiaV9vYmogdmJpOworfTsKKworLyogRmlsZSBoYW5kbGUgc3RydWN0dXJlICovCitzdHJ1Y3QgdnBpZl9maCB7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaGFubmVsOwkvKiBwb2ludGVyIHRvIGNoYW5uZWwgb2JqZWN0IGZvcgorCQkJCQkgKiBvcGVuZWQgZGV2aWNlICovCisJdTggaW9fYWxsb3dlZFtWUElGX05VTU9CSkVDVFNdOwkvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGZpbGUgaGFuZGxlCisJCQkJCSAqIGlzIGRvaW5nIElPICovCisJZW51bSB2NGwyX3ByaW9yaXR5IHByaW87CS8qIFVzZWQgdG8ga2VlcCB0cmFjayBwcmlvcml0eSBvZgorCQkJCQkgKiB0aGlzIGluc3RhbmNlICovCisJdTggaW5pdGlhbGl6ZWQ7CQkJLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhpcworCQkJCQkgKiBmaWxlIGhhbmRsZSBoYXMgaW5pdGlhbGl6ZWQKKwkJCQkJICogY2hhbm5lbCBvciBub3QgKi8KK307CisKKy8qIHZwaWYgZGV2aWNlIHN0cnVjdHVyZSAqLworc3RydWN0IHZwaWZfZGV2aWNlIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpkZXZbVlBJRl9ESVNQTEFZX05VTV9DSEFOTkVMU107CisJc3RydWN0IHY0bDJfc3ViZGV2ICoqc2Q7CisKK307CisKK3N0cnVjdCB2cGlmX2NvbmZpZ19wYXJhbXMgeworCXUzMiBtaW5fYnVmc2l6ZVtWUElGX0RJU1BMQVlfTlVNX0NIQU5ORUxTXTsKKwl1MzIgY2hhbm5lbF9idWZzaXplW1ZQSUZfRElTUExBWV9OVU1fQ0hBTk5FTFNdOworCXU4IG51bWJ1ZmZlcnNbVlBJRl9ESVNQTEFZX05VTV9DSEFOTkVMU107CisJdTggbWluX251bWJ1ZmZlcnM7Cit9OworCisvKiBTdHJ1Y3Qgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGxpbmUgbnVtYmVycyBmb3IgdGhlIHNsaWNlZCB2Ymkgc2VydmljZSAqLworc3RydWN0IHZwaWZfc2VydmljZV9saW5lIHsKKwl1MTYgc2VydmljZV9pZDsKKwl1MTYgc2VydmljZV9saW5lWzJdOworCXUxNiBlbmNfc2VydmljZV9pZDsKKwl1OCBieXRlc3Rvd3JpdGU7Cit9OworCisjZW5kaWYJCQkJLyogREFWSU5DSUhEX0RJU1BMQVlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3MDljYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogY29tbW9uIHZwc3MgZHJpdmVyIGZvciBhbGwgdmlkZW8gZHJpdmVycy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJWUFNTIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKKworLyogRE02NDR4IGRlZmluZXMgKi8KKyNkZWZpbmUgRE02NDRYX1NCTF9QQ1JfVlBTUwkJKDQpCisKKy8qIHZwc3MgQkwgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBETTM1NV9WUFNTQkxfQ0NEQ01VWAkJMHgxYworLyogdnBzcyBDTEsgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBETTM1NV9WUFNTQ0xLX0NMS0NUUkwJCTB4MDQKKy8qIG1hc2tzIGFuZCBzaGlmdHMgKi8KKyNkZWZpbmUgVlBTU19IU1NJU0VMX1NISUZUCQk0CisKKy8qCisgKiB2cHNzIG9wZXJhdGlvbnMuIERlcGVuZHMgb24gcGxhdGZvcm0uIE5vdCBhbGwgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUKKyAqIG9uIGFsbCBwbGF0Zm9ybXMuIFRoZSBhcGksIGZpcnN0IGNoZWNrIGlmIGEgZnVuY3RpbyBpcyBhdmFpbGFibGUgYmVmb3JlCisgKiBpbnZva2luZyBpdC4gSW4gdGhlIHByb2JlLCB0aGUgZnVuY3Rpb24gcHRycyBhcmUgaW50aWFsaXplZCBiYXNlZCBvbgorICogdnBzcyBuYW1lLiB2cHNzIG5hbWUgY2FuIGJlICJkbTM1NV92cHNzIiwgImRtNjQ0eF92cHNzIiBldGMuCisgKi8KK3N0cnVjdCB2cHNzX2h3X29wcyB7CisJLyogZW5hYmxlIGNsb2NrICovCisJaW50ICgqZW5hYmxlX2Nsb2NrKShlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKTsKKwkvKiBzZWxlY3QgaW5wdXQgdG8gY2NkYyAqLworCXZvaWQgKCpzZWxlY3RfY2NkY19zb3VyY2UpKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCk7CisJLyogY2xlYXIgd2JsIG92ZXJsZmxvdyBiaXQgKi8KKwlpbnQgKCpjbGVhcl93Ymxfb3ZlcmZsb3cpKGVudW0gdnBzc193Ymxfc2VsIHdibF9zZWwpOworfTsKKworLyogdnBzcyBjb25maWd1cmF0aW9uICovCitzdHJ1Y3QgdnBzc19vcGVyX2NvbmZpZyB7CisJX19pb21lbSB2b2lkICp2cHNzX2JsX3JlZ3NfYmFzZTsKKwlfX2lvbWVtIHZvaWQgKnZwc3NfcmVnc19iYXNlOworCXN0cnVjdCByZXNvdXJjZQkJKnIxOworCXJlc291cmNlX3NpemVfdAkJbGVuMTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyMjsKKwlyZXNvdXJjZV9zaXplX3QJCWxlbjI7CisJY2hhciB2cHNzX25hbWVbMzJdOworCXNwaW5sb2NrX3QgdnBzc19sb2NrOworCXN0cnVjdCB2cHNzX2h3X29wcyBod19vcHM7Cit9OworCitzdGF0aWMgc3RydWN0IHZwc3Nfb3Blcl9jb25maWcgb3Blcl9jZmc7CisKKy8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLworc3RhdGljIGlubGluZSB1MzIgYmxfcmVncih1MzIgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibF9yZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB2cHNzX3JlZ3IodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnBzc19yZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBkbTM1NV9zZWxlY3RfY2NkY19zb3VyY2UoZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzcmNfc2VsKQoreworCWJsX3JlZ3coc3JjX3NlbCA8PCBWUFNTX0hTU0lTRUxfU0hJRlQsIERNMzU1X1ZQU1NCTF9DQ0RDTVVYKTsKK30KKworaW50IHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKK3sKKwlpZiAoIW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2UpCisJCXJldHVybiAtMTsKKworCWRtMzU1X3NlbGVjdF9jY2RjX3NvdXJjZShzcmNfc2VsKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodnBzc19zZWxlY3RfY2NkY19zb3VyY2UpOworCitzdGF0aWMgaW50IGRtNjQ0eF9jbGVhcl93Ymxfb3ZlcmZsb3coZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCkKK3sKKwl1MzIgbWFzayA9IDEsIHZhbDsKKworCWlmICh3Ymxfc2VsIDwgVlBTU19QQ1JfQUVXX1dCTF8wIHx8CisJICAgIHdibF9zZWwgPiBWUFNTX1BDUl9DQ0RDX1dCTF9PKQorCQlyZXR1cm4gLTE7CisKKwkvKiB3cml0aW5nIGEgMCBjbGVhciB0aGUgb3ZlcmZsb3cgKi8KKwltYXNrID0gfihtYXNrIDw8IHdibF9zZWwpOworCXZhbCA9IGJsX3JlZ3IoRE02NDRYX1NCTF9QQ1JfVlBTUykgJiBtYXNrOworCWJsX3JlZ3codmFsLCBETTY0NFhfU0JMX1BDUl9WUFNTKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHZwc3NfY2xlYXJfd2JsX292ZXJmbG93KGVudW0gdnBzc193Ymxfc2VsIHdibF9zZWwpCit7CisJaWYgKCFvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gb3Blcl9jZmcuaHdfb3BzLmNsZWFyX3dibF9vdmVyZmxvdyh3Ymxfc2VsKTsKK30KK0VYUE9SVF9TWU1CT0wodnBzc19jbGVhcl93Ymxfb3ZlcmZsb3cpOworCisvKgorICogIGRtMzU1X2VuYWJsZV9jbG9jayAtIEVuYWJsZSBWUFNTIENsb2NrCisgKiAgQGNsb2NrX3NlbDogQ0xvY2sgdG8gYmUgZW5hYmxlZC9kaXNhYmxlZAorICogIEBlbjogZW5hYmxlL2Rpc2FibGUgZmxhZworICoKKyAqICBUaGlzIGlzIGNhbGxlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBhIHZwc3MgY2xvY2sKKyAqLworc3RhdGljIGludCBkbTM1NV9lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB1dGVtcCwgbWFzayA9IDB4MSwgc2hpZnQgPSAwOworCisJc3dpdGNoIChjbG9ja19zZWwpIHsKKwljYXNlIFZQU1NfVlBCRV9DTE9DSzoKKwkJLyogbm90aGluZyBzaW5jZSBsc2IgKi8KKwkJYnJlYWs7CisJY2FzZSBWUFNTX1ZFTkNfQ0xPQ0tfU0VMOgorCQlzaGlmdCA9IDI7CisJCWJyZWFrOworCWNhc2UgVlBTU19DRkFMRF9DTE9DSzoKKwkJc2hpZnQgPSAzOworCQlicmVhazsKKwljYXNlIFZQU1NfSDNBX0NMT0NLOgorCQlzaGlmdCA9IDQ7CisJCWJyZWFrOworCWNhc2UgVlBTU19JUElQRV9DTE9DSzoKKwkJc2hpZnQgPSA1OworCQlicmVhazsKKwljYXNlIFZQU1NfQ0NEQ19DTE9DSzoKKwkJc2hpZnQgPSA2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImRtMzU1X2VuYWJsZV9jbG9jazoiCisJCQkJIiBJbnZhbGlkIHNlbGVjdG9yOiAlZFxuIiwgY2xvY2tfc2VsKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKwl1dGVtcCA9IHZwc3NfcmVncihETTM1NV9WUFNTQ0xLX0NMS0NUUkwpOworCWlmICghZW4pCisJCXV0ZW1wICY9IH4obWFzayA8PCBzaGlmdCk7CisJZWxzZQorCQl1dGVtcCB8PSAobWFzayA8PCBzaGlmdCk7CisKKwl2cHNzX3JlZ3codXRlbXAsIERNMzU1X1ZQU1NDTEtfQ0xLQ1RSTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3Blcl9jZmcudnBzc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2cHNzX2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKQoreworCWlmICghb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jaykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIG9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2soY2xvY2tfc2VsLCBlbik7Cit9CitFWFBPUlRfU1lNQk9MKHZwc3NfZW5hYmxlX2Nsb2NrKTsKKworc3RhdGljIGludCBfX2luaXQgdnBzc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBzdGF0dXMsIGRtMzU1ID0gMDsKKworCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlzdHJjcHkob3Blcl9jZmcudnBzc19uYW1lLCBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CisKKwlpZiAoIXN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTM1NV92cHNzIikpCisJCWRtMzU1ID0gMTsKKwllbHNlIGlmIChzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG02NDR4X3Zwc3MiKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ2cHNzIGRyaXZlciBub3Qgc3VwcG9ydGVkIG9uIgorCQkJIiB0aGlzIHBsYXRmb3JtXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmVkXG4iLCBvcGVyX2NmZy52cHNzX25hbWUpOworCW9wZXJfY2ZnLnIxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW9wZXJfY2ZnLnIxKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCW9wZXJfY2ZnLmxlbjEgPSBvcGVyX2NmZy5yMS0+ZW5kIC0gb3Blcl9jZmcucjEtPnN0YXJ0ICsgMTsKKworCW9wZXJfY2ZnLnIxID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSwKKwkJCQkJIG9wZXJfY2ZnLnIxLT5uYW1lKTsKKwlpZiAoIW9wZXJfY2ZnLnIxKQorCQlyZXR1cm4gLUVCVVNZOworCisJb3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgPSBpb3JlbWFwKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7CisJaWYgKCFvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSkgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZmFpbDE7CisJfQorCisJaWYgKGRtMzU1KSB7CisJCW9wZXJfY2ZnLnIyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwkJaWYgKCFvcGVyX2NmZy5yMikgeworCQkJc3RhdHVzID0gLUVOT0VOVDsKKwkJCWdvdG8gZmFpbDI7CisJCX0KKwkJb3Blcl9jZmcubGVuMiA9IG9wZXJfY2ZnLnIyLT5lbmQgLSBvcGVyX2NmZy5yMi0+c3RhcnQgKyAxOworCQlvcGVyX2NmZy5yMiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMi0+c3RhcnQsCisJCQkJCQkgb3Blcl9jZmcubGVuMiwKKwkJCQkJCSBvcGVyX2NmZy5yMi0+bmFtZSk7CisJCWlmICghb3Blcl9jZmcucjIpIHsKKwkJCXN0YXR1cyA9IC1FQlVTWTsKKwkJCWdvdG8gZmFpbDI7CisJCX0KKworCQlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSA9IGlvcmVtYXAob3Blcl9jZmcucjItPnN0YXJ0LAorCQkJCQkJICBvcGVyX2NmZy5sZW4yKTsKKwkJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSkgeworCQkJc3RhdHVzID0gLUVCVVNZOworCQkJZ290byBmYWlsMzsKKwkJfQorCX0KKworCWlmIChkbTM1NSkgeworCQlvcGVyX2NmZy5od19vcHMuZW5hYmxlX2Nsb2NrID0gZG0zNTVfZW5hYmxlX2Nsb2NrOworCQlvcGVyX2NmZy5od19vcHMuc2VsZWN0X2NjZGNfc291cmNlID0gZG0zNTVfc2VsZWN0X2NjZGNfc291cmNlOworCX0gZWxzZQorCQlvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93ID0gZG02NDR4X2NsZWFyX3dibF9vdmVyZmxvdzsKKworCXNwaW5fbG9ja19pbml0KCZvcGVyX2NmZy52cHNzX2xvY2spOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyB2cHNzIHByb2JlIHN1Y2Nlc3NcbiIsIG9wZXJfY2ZnLnZwc3NfbmFtZSk7CisJcmV0dXJuIDA7CisKK2ZhaWwzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMi0+c3RhcnQsIG9wZXJfY2ZnLmxlbjIpOworZmFpbDI6CisJaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7CitmYWlsMToKKwlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHZwc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7CisJaWYgKCFzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG0zNTVfdnBzcyIpKSB7CisJCWlvdW5tYXAob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UpOworCQlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjItPnN0YXJ0LCBvcGVyX2NmZy5sZW4yKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZwc3NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInZwc3MiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh2cHNzX3JlbW92ZSksCisJLnByb2JlID0gdnBzc19wcm9iZSwKK307CisKK3N0YXRpYyB2b2lkIHZwc3NfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cHNzX2RyaXZlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHZwc3NfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZwc3NfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbCh2cHNzX2luaXQpOworbW9kdWxlX2V4aXQodnBzc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCmluZGV4IDY1MjRiNDkuLmM3YmUwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZwpAQCAtMzYsNiArMzYsNyBAQAogCWRlcGVuZHMgb24gVklERU9fRU0yOFhYICYmIERWQl9DT1JFCiAJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVERBMTAwMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgVklERU9CVUZfRFZCCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUKaW5kZXggODEzN2E4Yy4uZDBmMDkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBlbTI4eHgtb2JqcyAgICAgOj0gZW0yOHh4LXZpZGVvLm8gZW0yOHh4LWkyYy5vIGVtMjh4eC1jYXJkcy5vIGVtMjh4eC1jb3JlLm8gXAotCQkgICBlbTI4eHgtaW5wdXQubworCQkgICBlbTI4eHgtaW5wdXQubyBlbTI4eHgtdmJpLm8KIAogZW0yOHh4LWFsc2Etb2JqcyA6PSBlbTI4eHgtYXVkaW8ubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IDdlM2M3ODIuLmJkYjI0OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0xNzAsNiArMTcwLDE5IEBACiAJewktMSwJCS0xLAktMSwJCS0xfSwKIH07CiAKKy8qIGViMWE6Mjg2OCBSZWRkbyBEVkItQyBVU0IgVFYgQm94CisgICBHUElPNCAtIENVMTIxNkwgTklNCisgICBPdGhlciBHUElPcyBzZWVtcyB0byBiZSBkb24ndCBjYXJlLiAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSByZWRkb19kdmJfY191c2JfYm94W10gPSB7CisJe0VNMjhYWF9SMDhfR1BJTywJMHhmZSwJMHhmZiwJCTEwfSwKKwl7RU0yOFhYX1IwOF9HUElPLAkweGRlLAkweGZmLAkJMTB9LAorCXtFTTI4WFhfUjA4X0dQSU8sCTB4ZmUsCTB4ZmYsCQkxMH0sCisJe0VNMjhYWF9SMDhfR1BJTywJMHhmZiwJMHhmZiwJCTEwfSwKKwl7RU0yOFhYX1IwOF9HUElPLAkweDdmLAkweGZmLAkJMTB9LAorCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmYsCTB4ZmYsCQkxMH0sCisJe0VNMjhYWF9SMDhfR1BJTywJMHhmZiwJMHhmZiwJCTEwfSwKKwl7LTEsCQkJLTEsCS0xLAkJLTF9LAorfTsKIAogLyogQ2FsbGJhY2sgZm9yIHRoZSBtb3N0IGJvYXJkcyAqLwogc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBkZWZhdWx0X3R1bmVyX2dwaW9bXSA9IHsKQEAgLTE1NjYsNiArMTU3OSwxNCBAQAogCQkJLmdwaW8gICAgID0gZXZnYV9pbmR0dWJlX2FuYWxvZywKIAkJfSB9LAogCX0sCisJLyogZWIxYToyODY4IEVtcGlhIEVNMjg3MCArIFBoaWxpcHMgQ1UxMjE2TCBOSU0gKFBoaWxpcHMgVERBMTAwMjMgKworCSAgIEluZmluZW9uIFRVQTYwMzQpICovCisJW0VNMjg3MF9CT0FSRF9SRURET19EVkJfQ19VU0JfQk9YXSA9IHsKKwkJLm5hbWUgICAgICAgICAgPSAiUmVkZG8gRFZCLUMgVVNCIFRWIEJveCIsCisJCS50dW5lcl90eXBlICAgID0gVFVORVJfQUJTRU5ULAorCQkuaGFzX2R2YiAgICAgICA9IDEsCisJCS5kdmJfZ3BpbyAgICAgID0gcmVkZG9fZHZiX2NfdXNiX2JveCwKKwl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBlbTI4eHhfYmNvdW50ID0gQVJSQVlfU0laRShlbTI4eHhfYm9hcmRzKTsKIApAQCAtMTU5Myw2ICsxNjE0LDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODgzKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODY4KSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzAwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg2MV9CT0FSRF9LV09STERfUFZSVFZfMzAwVSB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwMyksCkBAIC0xNjk2LDYgKzE3MTksNyBAQAogCXsweDE2NmEwNDQxLCBFTTI4ODBfQk9BUkRfRU1QSVJFX0RVQUxfVFYsIFRVTkVSX1hDMjAyOH0sCiAJezB4Y2VlNDRhOTksIEVNMjg4Ml9CT0FSRF9FVkdBX0lORFRVQkUsIFRVTkVSX1hDMjAyOH0sCiAJezB4Yjg4NDZiMjAsIEVNMjg4MV9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJPLCBUVU5FUl9YQzIwMjh9LAorCXsweDYzZjY1M2JkLCBFTTI4NzBfQk9BUkRfUkVERE9fRFZCX0NfVVNCX0JPWCwgVFVORVJfQUJTRU5UfSwKIH07CiAKIC8qIEkyQyBkZXZpY2VsaXN0IGhhc2ggdGFibGUgZm9yIGRldmljZXMgd2l0aCBnZW5lcmljIFVTQiBJRHMgKi8KQEAgLTIzNDgsNTUgKzIzNzIsNTUgQEAKIAogCS8qIHJlcXVlc3Qgc29tZSBtb2R1bGVzICovCiAJaWYgKGRldi0+Ym9hcmQuaGFzX21zcDM0eHgpCi0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKLQkJCSJtc3AzNDAwIiwgIm1zcDM0MDAiLCBtc3AzNDAwX2FkZHJzKTsKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCisJCQkibXNwMzQwMCIsICJtc3AzNDAwIiwgMCwgbXNwMzQwMF9hZGRycyk7CiAKIAlpZiAoZGV2LT5ib2FyZC5kZWNvZGVyID09IEVNMjhYWF9TQUE3MTFYKQotCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCi0JCQkic2FhNzExNSIsICJzYWE3MTE1X2F1dG8iLCBzYWE3MTF4X2FkZHJzKTsKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCisJCQkic2FhNzExNSIsICJzYWE3MTE1X2F1dG8iLCAwLCBzYWE3MTF4X2FkZHJzKTsKIAogCWlmIChkZXYtPmJvYXJkLmRlY29kZXIgPT0gRU0yOFhYX1RWUDUxNTApCi0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKLQkJCSJ0dnA1MTUwIiwgInR2cDUxNTAiLCB0dnA1MTUwX2FkZHJzKTsKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCisJCQkidHZwNTE1MCIsICJ0dnA1MTUwIiwgMCwgdHZwNTE1MF9hZGRycyk7CiAKIAlpZiAoZGV2LT5lbTI4eHhfc2Vuc29yID09IEVNMjhYWF9NVDlWMDExKSB7CiAJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT52NGwyX2RldiwKLQkJCSAmZGV2LT5pMmNfYWRhcCwgIm10OXYwMTEiLCAibXQ5djAxMSIsIG10OXYwMTFfYWRkcnMpOworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCisJCQkgJmRldi0+aTJjX2FkYXAsICJtdDl2MDExIiwgIm10OXYwMTEiLCAwLCBtdDl2MDExX2FkZHJzKTsKIAkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19jb25maWcsIDAsICZkZXYtPnNlbnNvcl94dGFsKTsKIAl9CiAKIAogCWlmIChkZXYtPmJvYXJkLmFkZWNvZGVyID09IEVNMjhYWF9UVkFVRElPKQogCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKLQkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCBkZXYtPmJvYXJkLnR2YXVkaW9fYWRkcik7CisJCQkidHZhdWRpbyIsICJ0dmF1ZGlvIiwgZGV2LT5ib2FyZC50dmF1ZGlvX2FkZHIsIE5VTEwpOwogCiAJaWYgKGRldi0+Ym9hcmQudHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpIHsKIAkJaW50IGhhc19kZW1vZCA9IChkZXYtPnRkYTk4ODdfY29uZiAmIFREQTk4ODdfUFJFU0VOVCk7CiAKIAkJaWYgKGRldi0+Ym9hcmQucmFkaW8udHlwZSkKIAkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAotCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+Ym9hcmQucmFkaW9fYWRkcik7CisJCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT5ib2FyZC5yYWRpb19hZGRyLCBOVUxMKTsKIAogCQlpZiAoaGFzX2RlbW9kKQotCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+djRsMl9kZXYsCisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19hZGFwLCAidHVuZXIiLCAidHVuZXIiLAotCQkJCXY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCQkJMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKIAkJaWYgKGRldi0+dHVuZXJfYWRkciA9PSAwKSB7CiAJCQllbnVtIHY0bDJfaTJjX3R1bmVyX3R5cGUgdHlwZSA9CiAJCQkJaGFzX2RlbW9kID8gQUREUlNfVFZfV0lUSF9ERU1PRCA6IEFERFJTX1RWOwogCQkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT52NGwyX2RldiwKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQl2NGwyX2kyY190dW5lcl9hZGRycyh0eXBlKSk7CisJCQkJMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnModHlwZSkpOwogCiAJCQlpZiAoc2QpCiAJCQkJZGV2LT50dW5lcl9hZGRyID0gdjRsMl9pMmNfc3ViZGV2X2FkZHIoc2QpOwogCQl9IGVsc2UgewogCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCi0JCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT50dW5lcl9hZGRyKTsKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPnR1bmVyX2FkZHIsIE5VTEwpOwogCQl9CiAJfQogCkBAIC0yNTcwLDcgKzI1OTQsOCBAQAogCSAqIERlZmF1bHQgZm9ybWF0LCB1c2VkIGZvciB0dnA1MTUwIG9yIHNhYTcxMXggb3V0cHV0IGZvcm1hdHMKIAkgKi8KIAlkZXYtPnZpbm1vZGUgPSAweDEwOwotCWRldi0+dmluY3RsICA9IDB4MTE7CisJZGV2LT52aW5jdGwgID0gRU0yOFhYX1ZJTkNUUkxfSU5URVJMQUNFRCB8CisJCSAgICAgICBFTTI4WFhfVklOQ1RSTF9DQ0lSNjU2X0VOQUJMRTsKIAogCS8qIERvIGJvYXJkIHNwZWNpZmljIGluaXQgYW5kIGVlcHJvbSByZWFkaW5nICovCiAJZW0yOHh4X2NhcmRfc2V0dXAoZGV2KTsKQEAgLTI1ODksNiArMjYxNCw4IEBACiAJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEucXVldWVkKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52YmlxLmFjdGl2ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJpcS5xdWV1ZWQpOwogCiAKIAlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKaW5kZXggOThlMTQwYi4uYTg4MjU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCkBAIC01NCw2ICs1NCwxMCBAQAogbW9kdWxlX3BhcmFtKGFsdCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWx0LCAiYWx0ZXJuYXRlIHNldHRpbmcgdG8gdXNlIGZvciB2aWRlbyBlbmRwb2ludCIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGRpc2FibGVfdmJpOworbW9kdWxlX3BhcmFtKGRpc2FibGVfdmJpLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3ZiaSwgImRpc2FibGUgdmJpIHN1cHBvcnQiKTsKKwogLyogRklYTUUgKi8KICNkZWZpbmUgZW0yOHh4X2lzb2NkYmcoZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKGNvcmVfZGVidWcpIFwKQEAgLTY0OCw5ICs2NTIsMjQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK2ludCBlbTI4eHhfdmJpX3N1cHBvcnRlZChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJLyogTW9kcHJvYmUgb3B0aW9uIHRvIG1hbnVhbGx5IGRpc2FibGUgKi8KKwlpZiAoZGlzYWJsZV92YmkgPT0gMSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODYwIHx8CisJICAgIGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjg4MykKKwkJcmV0dXJuIDE7CisKKwkvKiBWZXJzaW9uIG9mIGVtMjh4eCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgVkJJICovCisJcmV0dXJuIDA7Cit9CisKIGludCBlbTI4eHhfc2V0X291dGZtdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CiAJaW50IHJldDsKKwl1OCB2aW5jdHJsOwogCiAJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IyN19PVVRGTVQsCiAJCQkJZGV2LT5mb3JtYXQtPnJlZyB8IDB4MjAsIDB4ZmYpOwpAQCAtNjYxLDcgKzY4MCwxNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjExX1ZJTkNUUkwsIGRldi0+dmluY3RsKTsKKwl2aW5jdHJsID0gZGV2LT52aW5jdGw7CisJaWYgKGVtMjh4eF92Ymlfc3VwcG9ydGVkKGRldikgPT0gMSkgeworCQl2aW5jdHJsIHw9IEVNMjhYWF9WSU5DVFJMX1ZCSV9SQVc7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM0X1ZCSV9TVEFSVF9ILCAweDAwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzVfVkJJX1NUQVJUX1YsIDB4MDkpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNl9WQklfV0lEVEgsIDB4YjQpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzN19WQklfSEVJR0hULCAweDBjKTsKKwl9CisKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMTFfVklOQ1RSTCwgdmluY3RybCk7CiB9CiAKIHN0YXRpYyBpbnQgZW0yOHh4X2FjY3VtdWxhdG9yX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHhtaW4sIHU4IHhtYXgsCkBAIC03MzIsNyArNzYwLDE0IEBACiAKIAogCWVtMjh4eF9hY2N1bXVsYXRvcl9zZXQoZGV2LCAxLCAod2lkdGggLSA0KSA+PiAyLCAxLCAoaGVpZ2h0IC0gNCkgPj4gMik7Ci0JZW0yOHh4X2NhcHR1cmVfYXJlYV9zZXQoZGV2LCAwLCAwLCB3aWR0aCA+PiAyLCBoZWlnaHQgPj4gMik7CisKKwkvKiBJZiB3ZSBkb24ndCBzZXQgdGhlIHN0YXJ0IHBvc2l0aW9uIHRvIDQgaW4gVkJJIG1vZGUsIHdlIGVuZCB1cAorCSAgIHdpdGggbGluZSAyMSBiZWluZyBZVVlWIGVuY29kZWQgaW5zdGVhZCBvZiBiZWluZyBpbiA4LWJpdAorCSAgIGdyZXlzY2FsZSAqLworCWlmIChlbTI4eHhfdmJpX3N1cHBvcnRlZChkZXYpID09IDEpCisJCWVtMjh4eF9jYXB0dXJlX2FyZWFfc2V0KGRldiwgMCwgNCwgd2lkdGggPj4gMiwgaGVpZ2h0ID4+IDIpOworCWVsc2UKKwkJZW0yOHh4X2NhcHR1cmVfYXJlYV9zZXQoZGV2LCAwLCAwLCB3aWR0aCA+PiAyLCBoZWlnaHQgPj4gMik7CiAKIAlyZXR1cm4gZW0yOHh4X3NjYWxlcl9zZXQoZGV2LCBkZXYtPmhzY2FsZSwgZGV2LT52c2NhbGUpOwogfQpAQCAtODQ0LDggKzg3OSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGVtMjh4eF9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICpkbWFfcSA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBlbTI4eHgsIHZpZHEpOworCXN0cnVjdCBlbTI4eHggKmRldiA9IHVyYi0+Y29udGV4dDsKIAlpbnQgcmMsIGk7CiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CkBAIC05MzAsNiArOTY0LDcgQEAKIAkJICAgICBpbnQgKCppc29jX2NvcHkpIChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikpCiB7CiAJc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAqZG1hX3EgPSAmZGV2LT52aWRxOworCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgKnZiaV9kbWFfcSA9ICZkZXYtPnZiaXE7CiAJaW50IGk7CiAJaW50IHNiX3NpemUsIHBpcGU7CiAJc3RydWN0IHVyYiAqdXJiOwpAQCAtOTU5LDcgKzk5NCw4IEBACiAJfQogCiAJZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemUgPSBtYXhfcGt0X3NpemU7Ci0JZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCWRldi0+aXNvY19jdGwudmlkX2J1ZiA9IE5VTEw7CisJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gTlVMTDsKIAogCXNiX3NpemUgPSBtYXhfcGFja2V0cyAqIGRldi0+aXNvY19jdGwubWF4X3BrdF9zaXplOwogCkBAIC05OTQsNyArMTAzMCw3IEBACiAKIAkJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGRldi0+dWRldiwgcGlwZSwKIAkJCQkgZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0sIHNiX3NpemUsCi0JCQkJIGVtMjh4eF9pcnFfY2FsbGJhY2ssIGRtYV9xLCAxKTsKKwkJCQkgZW0yOHh4X2lycV9jYWxsYmFjaywgZGV2LCAxKTsKIAogCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbWF4X3BhY2tldHM7CiAJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKQEAgLTEwMDksNiArMTA0NSw3IEBACiAJfQogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hX3EtPndxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2YmlfZG1hX3EtPndxKTsKIAogCWVtMjh4eF9jYXB0dXJlX3N0YXJ0KGRldiwgMSk7CiAKQEAgLTEwOTQsNyArMTEzMSw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmZW0yOHh4X2Rldmxpc3QsIGRldmxpc3QpIHsKIAkJaWYgKGgtPnZkZXYtPm1pbm9yID09IG1pbm9yKQogCQkJZGV2ID0gaDsKLQkJaWYgKGgtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCWlmIChoLT52YmlfZGV2ICYmIGgtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7CiAJCQlkZXYgPSBoOwogCQkJKmZoX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKaW5kZXggZDYwMzU3NS4uZGI3NDk0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgInM1aDE0MDkuaCIKICNpbmNsdWRlICJtdDM1Mi5oIgogI2luY2x1ZGUgIm10MzUyX3ByaXYuaCIgLyogRklYTUUgKi8KKyNpbmNsdWRlICJ0ZGExMDAyeC5oIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgZW0yOHh4IGJhc2VkIERWQiBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CkBAIC0yOTUsNiArMjk2LDExIEBACiAJLmRlbW9kX2luaXQgPSBtdDM1Ml90ZXJyYXRlY194c19pbml0LAogfTsKIAorc3RhdGljIHN0cnVjdCB0ZGExMDAyM19jb25maWcgZW0yOHh4X3RkYTEwMDIzX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGMsCisJLmludmVydCA9IDEsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBhdHRhY2hfeGMzMDI4KHU4IGFkZHIsIHN0cnVjdCBlbTI4eHggKmRldikKQEAgLTU0OSw2ICs1NTUsMTkgQEAKIAkJfQogCQlicmVhazsKICNlbmRpZgorCWNhc2UgRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1g6CisJCS8qIFBoaWxpcHMgQ1UxMjE2TCBOSU0gKFBoaWxpcHMgVERBMTAwMjMgKyBJbmZpbmVvbiBUVUE2MDM0KSAqLworCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDAyM19hdHRhY2gsCisJCQkmZW0yOHh4X3RkYTEwMDIzX2NvbmZpZywKKwkJCSZkZXYtPmkyY19hZGFwLCAweDQ4KTsKKwkJaWYgKGR2Yi0+ZnJvbnRlbmQpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkdmItPmZyb250ZW5kLAorCQkJCSZkZXYtPmkyY19hZGFwLCAweDYwLCBUVU5FUl9QSElMSVBTX0NVMTIxNkwpKSB7CisJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCIKIAkJCQkiIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKaW5kZXggNmJmODRiZC4uZWQxMmU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaApAQCAtODYsNyArODYsMTkgQEAKICNkZWZpbmUgRU0yOFhYX1hDTEtfRlJFUVVFTkNZXzI0TUhaCTB4MGIKIAogI2RlZmluZSBFTTI4WFhfUjEwX1ZJTk1PREUJMHgxMAorCiAjZGVmaW5lIEVNMjhYWF9SMTFfVklOQ1RSTAkweDExCisKKy8qIGVtMjh4eCBWaWRlbyBJbnB1dCBDb250cm9sIFJlZ2lzdGVyIDB4MTEgKi8KKyNkZWZpbmUgRU0yOFhYX1ZJTkNUUkxfVkJJX1NMSUNFRAkweDgwCisjZGVmaW5lIEVNMjhYWF9WSU5DVFJMX1ZCSV9SQVcJCTB4NDAKKyNkZWZpbmUgRU0yOFhYX1ZJTkNUUkxfVk9VVF9NT0RFX0lOCTB4MjAgLyogSFJFRixWUkVGLFZBQ1QgaW4gb3V0cHV0ICovCisjZGVmaW5lIEVNMjhYWF9WSU5DVFJMX0NDSVI2NTZfRU5BQkxFCTB4MTAKKyNkZWZpbmUgRU0yOFhYX1ZJTkNUUkxfVkJJXzE2QklUX1JBVwkweDA4IC8qIG90aGVyd2lzZSA4LWJpdCByYXcgKi8KKyNkZWZpbmUgRU0yOFhYX1ZJTkNUUkxfRklEX09OX0hSRUYJMHgwNAorI2RlZmluZSBFTTI4WFhfVklOQ1RSTF9EVUFMX0VER0VfU1RST0JFCTB4MDIKKyNkZWZpbmUgRU0yOFhYX1ZJTkNUUkxfSU5URVJMQUNFRAkweDAxCisKICNkZWZpbmUgRU0yOFhYX1IxMl9WSU5FTkFCTEUJMHgxMgkvKiAqLwogCiAjZGVmaW5lIEVNMjhYWF9SMTRfR0FNTUEJMHgxNApAQCAtMTM1LDYgKzE0NywxMCBAQAogI2RlZmluZSBFTTI4WFhfUjMxX0hTQ0FMRUhJR0gJMHgzMQogI2RlZmluZSBFTTI4WFhfUjMyX1ZTQ0FMRUxPVwkweDMyCiAjZGVmaW5lIEVNMjhYWF9SMzNfVlNDQUxFSElHSAkweDMzCisjZGVmaW5lIEVNMjhYWF9SMzRfVkJJX1NUQVJUX0gJMHgzNAorI2RlZmluZSBFTTI4WFhfUjM1X1ZCSV9TVEFSVF9WCTB4MzUKKyNkZWZpbmUgRU0yOFhYX1IzNl9WQklfV0lEVEgJMHgzNgorI2RlZmluZSBFTTI4WFhfUjM3X1ZCSV9IRUlHSFQJMHgzNwogCiAjZGVmaW5lIEVNMjhYWF9SNDBfQUM5N0xTQgkweDQwCiAjZGVmaW5lIEVNMjhYWF9SNDFfQUM5N01TQgkweDQxCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ5NDNlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAgIGVtMjh4eC12YmkuYyAtIFZCSSBkcml2ZXIgZm9yIGVtMjh4eAorCisgICBDb3B5cmlnaHQgKEMpIDIwMDkgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBrZXJuZWxsYWJzLmNvbT4KKworICAgVGhpcyB3b3JrIHdhcyBzcG9uc29yZWQgYnkgRXllTWFnbmV0IExpbWl0ZWQuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiZW0yOHh4LmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmJpYnVmcyA9IDU7Cittb2R1bGVfcGFyYW0odmJpYnVmcywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmJpYnVmcywgIm51bWJlciBvZiB2YmkgYnVmZmVycywgcmFuZ2UgMi0zMiIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHZiaV9kZWJ1ZzsKK21vZHVsZV9wYXJhbSh2YmlfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZiaV9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbdmJpXSIpOworCisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAodmJpX2RlYnVnID49IGxldmVsKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgZGV2LT5jb3JlLT5uYW1lICwgIyMgYXJnKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQKK2ZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCBlbTI4eHhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGVtMjh4eF9maCAgICAgKmZoICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGVtMjh4eCAgICAgICAgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaWYgKGluX2ludGVycnVwdCgpKQorCQlCVUcoKTsKKworCS8qIFdlIHVzZWQgdG8gd2FpdCBmb3IgdGhlIGJ1ZmZlciB0byBmaW5pc2ggaGVyZSwgYnV0IHRoaXMgZGlkbid0IHdvcmsKKwkgICBiZWNhdXNlLCBhcyB3ZSB3ZXJlIGtlZXBpbmcgdGhlIHN0YXRlIGFzIFZJREVPQlVGX1FVRVVFRCwKKwkgICB2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwgbWFya2VkIGl0IGFzIGZpbmlzaGVkIGZvciB1cy4KKwkgICAoQWxzbywgaXQgY291bGQgd2VkZ2UgZm9yZXZlciBpZiB0aGUgaGFyZHdhcmUgd2FzIG1pc2NvbmZpZ3VyZWQuKQorCisJICAgVGhpcyBzaG91bGQgYmUgc2FmZTsgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHRoZSBidWZmZXIgaXNuJ3QKKwkgICBxdWV1ZWQgYW55bW9yZS4gSWYgd2UgZXZlciBzdGFydCBtYXJraW5nIHRoZSBidWZmZXJzIGFzCisJICAgVklERU9CVUZfQUNUSVZFLCBpdCB3b24ndCBiZSwgdGhvdWdoLgorCSovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5pc29jX2N0bC52YmlfYnVmID09IGJ1ZikKKwkJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisKKwl2aWRlb2J1Zl92bWFsbG9jX2ZyZWUoJmJ1Zi0+dmIpOworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgaW50Cit2Ymlfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJKnNpemUgPSA3MjAgKiAxMiAqIDI7CisJaWYgKDAgPT0gKmNvdW50KQorCQkqY291bnQgPSB2YmlidWZzOworCWlmICgqY291bnQgPCAyKQorCQkqY291bnQgPSAyOworCWlmICgqY291bnQgPiAzMikKKwkJKmNvdW50ID0gMzI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZiaV9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJICAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCWludCAgICAgICAgICAgICAgICAgIHJjID0gMDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCXNpemUgPSA3MjAgKiAxMiAqIDI7CisKKwlidWYtPnZiLnNpemUgPSBzaXplOworCisJaWYgKDAgIT0gYnVmLT52Yi5iYWRkciAgJiYgIGJ1Zi0+dmIuYnNpemUgPCBidWYtPnZiLnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmLT52Yi53aWR0aCAgPSA3MjA7CisJYnVmLT52Yi5oZWlnaHQgPSAxMjsKKwlidWYtPnZiLmZpZWxkICA9IGZpZWxkOworCisJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgeworCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCAmYnVmLT52YiwgTlVMTCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIGZhaWw7CisJfQorCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCXJldHVybiAwOworCitmYWlsOgorCWZyZWVfYnVmZmVyKHEsIGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAordmJpX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJCXN0cnVjdCBlbTI4eHhfYnVmZmVyLAorCQkJCQkJCXZiKTsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OworCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICp2YmlxICAgID0gJmRldi0+dmJpcTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnZiaXEtPmFjdGl2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZiaV9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGVtMjh4eF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGVtMjh4eF9idWZmZXIsIHZiKTsKKwlmcmVlX2J1ZmZlcihxLCBidWYpOworfQorCitzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGVtMjh4eF92YmlfcW9wcyA9IHsKKwkuYnVmX3NldHVwICAgID0gdmJpX3NldHVwLAorCS5idWZfcHJlcGFyZSAgPSB2YmlfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlICAgID0gdmJpX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgPSB2YmlfcmVsZWFzZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IGE2YmRiYzIuLjNhMWRmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0xNjMsNyArMTYzLDI0IEBACiAJYnVmLT52Yi5maWVsZF9jb3VudCsrOwogCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CiAKLQlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisJZGV2LT5pc29jX2N0bC52aWRfYnVmID0gTlVMTDsKKworCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmJpX2J1ZmZlcl9maWxsZWQoc3RydWN0IGVtMjh4eCAqZGV2LAorCQkJCSAgICAgc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAqZG1hX3EsCisJCQkJICAgICBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAqYnVmKQoreworCS8qIEFkdmljZSB0aGF0IGJ1ZmZlciB3YXMgZmlsbGVkICovCisJZW0yOHh4X2lzb2NkYmcoIlslcC8lZF0gd2FrZXVwXG4iLCBidWYsIGJ1Zi0+dmIuaSk7CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfRE9ORTsKKwlidWYtPnZiLmZpZWxkX2NvdW50Kys7CisJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKKworCWRldi0+aXNvY19jdGwudmJpX2J1ZiA9IE5VTEw7CiAKIAlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKQEAgLTIzOSw3ICsyNTYsOCBAQAogCiAJCWlmICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5ID4gKGNoYXIgKilvdXRwICsKIAkJICAgIGJ1Zi0+dmIuc2l6ZSkgewotCQkJZW0yOHh4X2lzb2NkYmcoIk92ZXJmbG93IG9mICV6aSBieXRlcyBwYXN0IGJ1ZmZlciBlbmQgKDIpXG4iLAorCQkJZW0yOHh4X2lzb2NkYmcoIk92ZXJmbG93IG9mICV6aSBieXRlcyBwYXN0IGJ1ZmZlciBlbmQiCisJCQkJICAgICAgICIoMilcbiIsCiAJCQkJICAgICAgICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5KSAtCiAJCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKIAkJCWxlbmNvcHkgPSByZW1haW4gPSAoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUgLQpAQCAtMjU2LDYgKzI3NCw2MyBAQAogCWRtYV9xLT5wb3MgKz0gbGVuOwogfQogCitzdGF0aWMgdm9pZCBlbTI4eHhfY29weV92Ymkoc3RydWN0IGVtMjh4eCAqZGV2LAorCQkJICAgICAgc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAgKmRtYV9xLAorCQkJICAgICAgc3RydWN0IGVtMjh4eF9idWZmZXIgKmJ1ZiwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnAsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2lkICpzdGFydHdyaXRlLCAqc3RhcnRyZWFkOworCWludCAgb2Zmc2V0OworCWludCBieXRlc3BlcmxpbmUgPSA3MjA7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZW0yOHh4X2lzb2NkYmcoImRldiBpcyBudWxsXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkbWFfcSA9PSBOVUxMKSB7CisJCWVtMjh4eF9pc29jZGJnKCJkbWFfcSBpcyBudWxsXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAocCA9PSBOVUxMKSB7CisJCWVtMjh4eF9pc29jZGJnKCJwIGlzIG51bGxcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChvdXRwID09IE5VTEwpIHsKKwkJZW0yOHh4X2lzb2NkYmcoIm91dHAgaXMgbnVsbFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZG1hX3EtPnBvcyArIGxlbiA+IGJ1Zi0+dmIuc2l6ZSkKKwkJbGVuID0gYnVmLT52Yi5zaXplIC0gZG1hX3EtPnBvczsKKworCWlmICgocFswXSA9PSAweDMzICYmIHBbMV0gPT0gMHg5NSkgfHwKKwkgICAgKHBbMF0gPT0gMHg4OCAmJiBwWzFdID09IDB4ODgpKSB7CisJCS8qIEhlYWRlciBmaWVsZCwgYWR2YW5jZSBwYXN0IGl0ICovCisJCXAgKz0gNDsKKwl9IGVsc2UgeworCQlsZW4gKz0gNDsKKwl9CisKKwlzdGFydHJlYWQgPSBwOworCisJc3RhcnR3cml0ZSA9IG91dHAgKyBkbWFfcS0+cG9zOworCW9mZnNldCA9IGRtYV9xLT5wb3M7CisKKwkvKiBNYWtlIHN1cmUgdGhlIGJvdHRvbSBmaWVsZCBwb3B1bGF0ZXMgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBmcmFtZSAqLworCWlmIChidWYtPnRvcF9maWVsZCA9PSAwKSB7CisJCXN0YXJ0d3JpdGUgKz0gYnl0ZXNwZXJsaW5lICogMHgwYzsKKwkJb2Zmc2V0ICs9IGJ5dGVzcGVybGluZSAqIDB4MGM7CisJfQorCisJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVuKTsKKwlkbWFfcS0+cG9zICs9IGxlbjsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHByaW50X2Vycl9zdGF0dXMoc3RydWN0IGVtMjh4eCAqZGV2LAogCQkJCSAgICAgaW50IHBhY2tldCwgaW50IHN0YXR1cykKIHsKQEAgLTMwNiw3ICszODEsNyBAQAogCiAJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKSB7CiAJCWVtMjh4eF9pc29jZGJnKCJObyBhY3RpdmUgcXVldWUgdG8gc2VydmVcbiIpOwotCQlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisJCWRldi0+aXNvY19jdGwudmlkX2J1ZiA9IE5VTEw7CiAJCSpidWYgPSBOVUxMOwogCQlyZXR1cm47CiAJfQpAQCAtMzE4LDcgKzM5MywzNCBAQAogCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCYoKmJ1ZiktPnZiKTsKIAltZW1zZXQob3V0cCwgMCwgKCpidWYpLT52Yi5zaXplKTsKIAotCWRldi0+aXNvY19jdGwuYnVmID0gKmJ1ZjsKKwlkZXYtPmlzb2NfY3RsLnZpZF9idWYgPSAqYnVmOworCisJcmV0dXJuOworfQorCisvKgorICogdmlkZW8tYnVmIGdlbmVyaWMgcm91dGluZSB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIFZCSSBidWZmZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZiaV9nZXRfbmV4dF9idWYoc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAqZG1hX3EsCisJCQkJICAgIHN0cnVjdCBlbTI4eHhfYnVmZmVyICoqYnVmKQoreworCXN0cnVjdCBlbTI4eHggKmRldiA9IGNvbnRhaW5lcl9vZihkbWFfcSwgc3RydWN0IGVtMjh4eCwgdmJpcSk7CisJY2hhciAqb3V0cDsKKworCWlmIChsaXN0X2VtcHR5KCZkbWFfcS0+YWN0aXZlKSkgeworCQllbTI4eHhfaXNvY2RiZygiTm8gYWN0aXZlIHF1ZXVlIHRvIHNlcnZlXG4iKTsKKwkJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gTlVMTDsKKwkJKmJ1ZiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCisJKmJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIucXVldWUpOworCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWxsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLworCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCYoKmJ1ZiktPnZiKTsKKwltZW1zZXQob3V0cCwgMHgwMCwgKCpidWYpLT52Yi5zaXplKTsKKworCWRldi0+aXNvY19jdGwudmJpX2J1ZiA9ICpidWY7CiAKIAlyZXR1cm47CiB9CkBAIC0zMjksNyArNDMxLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGVtMjh4eF9pc29jX2NvcHkoc3RydWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGVtMjh4eF9idWZmZXIgICAgKmJ1ZjsKLQlzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICAqZG1hX3EgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAgKmRtYV9xID0gJmRldi0+dmlkcTsKIAl1bnNpZ25lZCBjaGFyICpvdXRwID0gTlVMTDsKIAlpbnQgaSwgbGVuID0gMCwgcmMgPSAxOwogCXVuc2lnbmVkIGNoYXIgKnA7CkBAIC0zNDYsNyArNDQ4LDcgQEAKIAkJCXJldHVybiAwOwogCX0KIAotCWJ1ZiA9IGRldi0+aXNvY19jdGwuYnVmOworCWJ1ZiA9IGRldi0+aXNvY19jdGwudmlkX2J1ZjsKIAlpZiAoYnVmICE9IE5VTEwpCiAJCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKIApAQCAtNDEwLDYgKzUxMiwxNTMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qIFZlcnNpb24gb2YgaXNvYyBoYW5kbGVyIHRoYXQgdGFrZXMgaW50byBhY2NvdW50IGEgbWl4dHVyZSBvZiB2aWRlbyBhbmQKKyAgIFZCSSBkYXRhICovCitzdGF0aWMgaW5saW5lIGludCBlbTI4eHhfaXNvY19jb3B5X3ZiaShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICAqYnVmLCAqdmJpX2J1ZjsKKwlzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICAqZG1hX3EgPSAmZGV2LT52aWRxOworCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICp2YmlfZG1hX3EgPSAmZGV2LT52YmlxOworCXVuc2lnbmVkIGNoYXIgKm91dHAgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKnZiaW91dHAgPSBOVUxMOworCWludCBpLCBsZW4gPSAwLCByYyA9IDE7CisJdW5zaWduZWQgY2hhciAqcDsKKwlpbnQgdmJpX3NpemU7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fCAoZGV2LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodXJiLT5zdGF0dXMgPCAwKSB7CisJCXByaW50X2Vycl9zdGF0dXMoZGV2LCAtMSwgdXJiLT5zdGF0dXMpOworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkKKwkJCXJldHVybiAwOworCX0KKworCWJ1ZiA9IGRldi0+aXNvY19jdGwudmlkX2J1ZjsKKwlpZiAoYnVmICE9IE5VTEwpCisJCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKKworCXZiaV9idWYgPSBkZXYtPmlzb2NfY3RsLnZiaV9idWY7CisJaWYgKHZiaV9idWYgIT0gTlVMTCkKKwkJdmJpb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJnZiaV9idWYtPnZiKTsKKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaW50IHN0YXR1cyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcmludF9lcnJfc3RhdHVzKGRldiwgaSwgc3RhdHVzKTsKKwkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPSAtRVBST1RPKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIC0gNDsKKworCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIDw9IDApIHsKKwkJCS8qIGVtMjh4eF9pc29jZGJnKCJwYWNrZXQgJWQgaXMgZW1wdHkiLGkpOyAtIHNwYW1teSAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+CisJCQkJCQlkZXYtPm1heF9wa3Rfc2l6ZSkgeworCQkJZW0yOHh4X2lzb2NkYmcoInBhY2tldCBiaWdnZXIgdGhhbiBwYWNrZXQgc2l6ZSIpOworCQkJY29udGludWU7CisJCX0KKworCQlwID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQkvKiBjYXB0dXJlIHR5cGUgMCA9IHZiaSBzdGFydAorCQkgICBjYXB0dXJlIHR5cGUgMSA9IHZpZGVvIHN0YXJ0CisJCSAgIGNhcHR1cmUgdHlwZSAyID0gdmlkZW8gaW4gcHJvZ3Jlc3MgKi8KKwkJaWYgKHBbMF0gPT0gMHgzMyAmJiBwWzFdID09IDB4OTUpIHsKKwkJCWRldi0+Y2FwdHVyZV90eXBlID0gMDsKKwkJCWRldi0+dmJpX3JlYWQgPSAwOworCQkJZW0yOHh4X2lzb2NkYmcoIlZCSSBTVEFSVCBIRUFERVIhISFcbiIpOworCQkJZGV2LT5jdXJfZmllbGQgPSBwWzJdOworCQl9CisKKwkJLyogRklYTUU6IGdldCByaWQgb2YgaGFyZC1jb2RlZCB2YWx1ZSAqLworCQl2Ymlfc2l6ZSA9IDcyMCAqIDB4MGM7CisKKwkJaWYgKGRldi0+Y2FwdHVyZV90eXBlID09IDApIHsKKwkJCWlmIChkZXYtPnZiaV9yZWFkID49IHZiaV9zaXplKSB7CisJCQkJLyogV2UndmUgYWxyZWFkeSByZWFkIGFsbCB0aGUgVkJJIGRhdGEsIHNvCisJCQkJICAgdHJlYXQgdGhlIHJlc3QgYXMgdmlkZW8gKi8KKwkJCQllbTI4eHhfaXNvY2RiZygiZGV2LT52YmlfcmVhZCA+IHZiaV9zaXplXG4iKTsKKwkJCX0gZWxzZSBpZiAoKGRldi0+dmJpX3JlYWQgKyBsZW4pIDwgdmJpX3NpemUpIHsKKwkJCQkvKiBUaGlzIGVudGlyZSBmcmFtZSBpcyBWQkkgZGF0YSAqLworCQkJCWlmIChkZXYtPnZiaV9yZWFkID09IDAgJiYKKwkJCQkgICAgKCEoZGV2LT5jdXJfZmllbGQgJiAxKSkpIHsKKwkJCQkJLyogQnJhbmQgbmV3IGZyYW1lICovCisJCQkJCWlmICh2YmlfYnVmICE9IE5VTEwpCisJCQkJCQl2YmlfYnVmZmVyX2ZpbGxlZChkZXYsCisJCQkJCQkJCSAgdmJpX2RtYV9xLAorCQkJCQkJCQkgIHZiaV9idWYpOworCQkJCQl2YmlfZ2V0X25leHRfYnVmKHZiaV9kbWFfcSwgJnZiaV9idWYpOworCQkJCQlpZiAodmJpX2J1ZiA9PSBOVUxMKQorCQkJCQkJdmJpb3V0cCA9IE5VTEw7CisJCQkJCWVsc2UKKwkJCQkJCXZiaW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKAorCQkJCQkJCSZ2YmlfYnVmLT52Yik7CisJCQkJfQorCisJCQkJaWYgKGRldi0+dmJpX3JlYWQgPT0gMCkgeworCQkJCQl2YmlfZG1hX3EtPnBvcyA9IDA7CisJCQkJCWlmICh2YmlfYnVmICE9IE5VTEwpIHsKKwkJCQkJCWlmIChkZXYtPmN1cl9maWVsZCAmIDEpCisJCQkJCQkJdmJpX2J1Zi0+dG9wX2ZpZWxkID0gMDsKKwkJCQkJCWVsc2UKKwkJCQkJCQl2YmlfYnVmLT50b3BfZmllbGQgPSAxOworCQkJCQl9CisJCQkJfQorCisJCQkJZGV2LT52YmlfcmVhZCArPSBsZW47CisJCQkJZW0yOHh4X2NvcHlfdmJpKGRldiwgdmJpX2RtYV9xLCB2YmlfYnVmLCBwLAorCQkJCQkJdmJpb3V0cCwgbGVuKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogU29tZSBvZiB0aGlzIGZyYW1lIGlzIFZCSSBkYXRhIGFuZCBzb21lIGlzCisJCQkJICAgdmlkZW8gZGF0YSAqLworCQkJCWludCB2YmlfZGF0YV9sZW4gPSB2Ymlfc2l6ZSAtIGRldi0+dmJpX3JlYWQ7CisJCQkJZGV2LT52YmlfcmVhZCArPSB2YmlfZGF0YV9sZW47CisJCQkJZW0yOHh4X2NvcHlfdmJpKGRldiwgdmJpX2RtYV9xLCB2YmlfYnVmLCBwLAorCQkJCQkJdmJpb3V0cCwgdmJpX2RhdGFfbGVuKTsKKwkJCQlkZXYtPmNhcHR1cmVfdHlwZSA9IDE7CisJCQkJcCArPSB2YmlfZGF0YV9sZW47CisJCQkJbGVuIC09IHZiaV9kYXRhX2xlbjsKKwkJCX0KKwkJfQorCisJCWlmIChkZXYtPmNhcHR1cmVfdHlwZSA9PSAxKSB7CisJCQlkZXYtPmNhcHR1cmVfdHlwZSA9IDI7CisJCQllbTI4eHhfaXNvY2RiZygiVmlkZW8gZnJhbWUgJWQsIGxlbmd0aD0laSwgJXNcbiIsIHBbMl0sCisJCQkJICAgICAgIGxlbiwgKHBbMl0gJiAxKSA/ICJvZGQiIDogImV2ZW4iKTsKKworCQkJaWYgKGRldi0+cHJvZ3Jlc3NpdmUgfHwgIShkZXYtPmN1cl9maWVsZCAmIDEpKSB7CisJCQkJaWYgKGJ1ZiAhPSBOVUxMKQorCQkJCQlidWZmZXJfZmlsbGVkKGRldiwgZG1hX3EsIGJ1Zik7CisJCQkJZ2V0X25leHRfYnVmKGRtYV9xLCAmYnVmKTsKKwkJCQlpZiAoYnVmID09IE5VTEwpCisJCQkJCW91dHAgPSBOVUxMOworCQkJCWVsc2UKKwkJCQkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOworCQkJfQorCQkJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCQkJaWYgKGRldi0+Y3VyX2ZpZWxkICYgMSkKKwkJCQkJYnVmLT50b3BfZmllbGQgPSAwOworCQkJCWVsc2UKKwkJCQkJYnVmLT50b3BfZmllbGQgPSAxOworCQkJfQorCisJCQlkbWFfcS0+cG9zID0gMDsKKwkJfQorCQlpZiAoYnVmICE9IE5VTEwgJiYgZGV2LT5jYXB0dXJlX3R5cGUgPT0gMikKKwkJCWVtMjh4eF9jb3B5X3ZpZGVvKGRldiwgZG1hX3EsIGJ1ZiwgcCwgb3V0cCwgbGVuKTsKKwl9CisJcmV0dXJuIHJjOworfQorCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCVZpZGVvYnVmIG9wZXJhdGlvbnMKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC00MjEsNyArNjcwLDggQEAKIAlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZjsKIAotCSpzaXplID0gKGZoLT5kZXYtPndpZHRoICogZmgtPmRldi0+aGVpZ2h0ICogZGV2LT5mb3JtYXQtPmRlcHRoICsgNykgPj4gMzsKKwkqc2l6ZSA9IChmaC0+ZGV2LT53aWR0aCAqIGZoLT5kZXYtPmhlaWdodCAqIGRldi0+Zm9ybWF0LT5kZXB0aCArIDcpCisJCT4+IDM7CiAKIAlpZiAoMCA9PSAqY291bnQpCiAJCSpjb3VudCA9IEVNMjhYWF9ERUZfQlVGOwpAQCAtNDU4LDggKzcwOCw4IEBACiAJICAgVklERU9CVUZfQUNUSVZFLCBpdCB3b24ndCBiZSwgdGhvdWdoLgogCSovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKLQlpZiAoZGV2LT5pc29jX2N0bC5idWYgPT0gYnVmKQotCQlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisJaWYgKGRldi0+aXNvY19jdGwudmlkX2J1ZiA9PSBidWYpCisJCWRldi0+aXNvY19jdGwudmlkX2J1ZiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOwogCiAJdmlkZW9idWZfdm1hbGxvY19mcmVlKCZidWYtPnZiKTsKQEAgLTQ3NSw3ICs3MjUsOCBAQAogCXN0cnVjdCBlbTI4eHggICAgICAgICpkZXYgPSBmaC0+ZGV2OwogCWludCAgICAgICAgICAgICAgICAgIHJjID0gMCwgdXJiX2luaXQgPSAwOwogCi0JYnVmLT52Yi5zaXplID0gKGZoLT5kZXYtPndpZHRoICogZmgtPmRldi0+aGVpZ2h0ICogZGV2LT5mb3JtYXQtPmRlcHRoICsgNykgPj4gMzsKKwlidWYtPnZiLnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiBkZXYtPmZvcm1hdC0+ZGVwdGgKKwkJCSsgNykgPj4gMzsKIAogCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgICYmICBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5NCw5ICs3NDUsMTYgQEAKIAkJdXJiX2luaXQgPSAxOwogCiAJaWYgKHVyYl9pbml0KSB7Ci0JCXJjID0gZW0yOHh4X2luaXRfaXNvYyhkZXYsIEVNMjhYWF9OVU1fUEFDS0VUUywKLQkJCQkgICAgICBFTTI4WFhfTlVNX0JVRlMsIGRldi0+bWF4X3BrdF9zaXplLAotCQkJCSAgICAgIGVtMjh4eF9pc29jX2NvcHkpOworCQlpZiAoZW0yOHh4X3ZiaV9zdXBwb3J0ZWQoZGV2KSA9PSAxKQorCQkJcmMgPSBlbTI4eHhfaW5pdF9pc29jKGRldiwgRU0yOFhYX05VTV9QQUNLRVRTLAorCQkJCQkgICAgICBFTTI4WFhfTlVNX0JVRlMsCisJCQkJCSAgICAgIGRldi0+bWF4X3BrdF9zaXplLAorCQkJCQkgICAgICBlbTI4eHhfaXNvY19jb3B5X3ZiaSk7CisJCWVsc2UKKwkJCXJjID0gZW0yOHh4X2luaXRfaXNvYyhkZXYsIEVNMjhYWF9OVU1fUEFDS0VUUywKKwkJCQkJICAgICAgRU0yOFhYX05VTV9CVUZTLAorCQkJCQkgICAgICBkZXYtPm1heF9wa3Rfc2l6ZSwKKwkJCQkJICAgICAgZW0yOHh4X2lzb2NfY29weSk7CiAJCWlmIChyYyA8IDApCiAJCQlnb3RvIGZhaWw7CiAJfQpAQCAtNTc4LDM0ICs4MzYsNjMgQEAKIH0KIAogLyogVXNhZ2UgbG9jayBjaGVjayBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgcmVzX2dldChzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKLXsKLQlzdHJ1Y3QgZW0yOHh4ICAgICpkZXYgPSBmaC0+ZGV2OwotCWludAkJIHJjICAgPSAwOwotCi0JLyogVGhpcyBpbnN0YW5jZSBhbHJlYWR5IGhhcyBzdHJlYW1fb24gKi8KLQlpZiAoZmgtPnN0cmVhbV9vbikKLQkJcmV0dXJuIHJjOwotCi0JaWYgKGRldi0+c3RyZWFtX29uKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZGV2LT5zdHJlYW1fb24gPSAxOwotCWZoLT5zdHJlYW1fb24gID0gMTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgcmVzX2NoZWNrKHN0cnVjdCBlbTI4eHhfZmggKmZoKQotewotCXJldHVybiBmaC0+c3RyZWFtX29uOwotfQotCi1zdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKK3N0YXRpYyBpbnQgcmVzX2dldChzdHJ1Y3QgZW0yOHh4X2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdCkKIHsKIAlzdHJ1Y3QgZW0yOHh4ICAgICpkZXYgPSBmaC0+ZGV2OwogCi0JZmgtPnN0cmVhbV9vbiA9IDA7Ci0JZGV2LT5zdHJlYW1fb24gPSAwOworCWlmIChmaC0+cmVzb3VyY2VzICYgYml0KQorCQkvKiBoYXZlIGl0IGFscmVhZHkgYWxsb2NhdGVkICovCisJCXJldHVybiAxOworCisJLyogaXMgaXQgZnJlZT8gKi8KKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWlmIChkZXYtPnJlc291cmNlcyAmIGJpdCkgeworCQkvKiBubywgc29tZW9uZSBlbHNlIHVzZXMgaXQgKi8KKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJLyogaXQncyBmcmVlLCBncmFiIGl0ICovCisJZmgtPnJlc291cmNlcyAgfD0gYml0OworCWRldi0+cmVzb3VyY2VzIHw9IGJpdDsKKwllbTI4eHhfdmlkZW9kYmcoInJlczogZ2V0ICVkXG4iLCBiaXQpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByZXNfY2hlY2soc3RydWN0IGVtMjh4eF9maCAqZmgsIHVuc2lnbmVkIGludCBiaXQpCit7CisJcmV0dXJuIGZoLT5yZXNvdXJjZXMgJiBiaXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVzX2xvY2tlZChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGludCBiaXQpCit7CisJcmV0dXJuIGRldi0+cmVzb3VyY2VzICYgYml0OworfQorCitzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgZW0yOHh4X2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJc3RydWN0IGVtMjh4eCAgICAqZGV2ID0gZmgtPmRldjsKKworCUJVR19PTigoZmgtPnJlc291cmNlcyAmIGJpdHMpICE9IGJpdHMpOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmaC0+cmVzb3VyY2VzICAmPSB+Yml0czsKKwlkZXYtPnJlc291cmNlcyAmPSB+Yml0czsKKwllbTI4eHhfdmlkZW9kYmcoInJlczogcHV0ICVkXG4iLCBiaXRzKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3Jlc3NvdXJjZShzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKK3sKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCXJldHVybiBFTTI4WFhfUkVTT1VSQ0VfVklERU87CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgorCQlyZXR1cm4gRU0yOFhYX1JFU09VUkNFX1ZCSTsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQogfQogCiAvKgpAQCAtNzgyLDcgKzEwNjksOCBAQAogCX0gZWxzZSB7CiAJCS8qIHdpZHRoIG11c3QgZXZlbiBiZWNhdXNlIG9mIHRoZSBZVVlWIGZvcm1hdAogCQkgICBoZWlnaHQgbXVzdCBiZSBldmVuIGJlY2F1c2Ugb2YgaW50ZXJsYWNpbmcgKi8KLQkJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZ3aWR0aCwgNDgsIG1heHcsIDEsICZoZWlnaHQsIDMyLCBtYXhoLCAxLCAwKTsKKwkJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZ3aWR0aCwgNDgsIG1heHcsIDEsICZoZWlnaHQsIDMyLCBtYXhoLAorCQkJCSAgICAgIDEsIDApOwogCX0KIAogCWdldF9zY2FsZShkZXYsIHdpZHRoLCBoZWlnaHQsICZoc2NhbGUsICZ2c2NhbGUpOwpAQCAtODQ4LDEyICsxMTM2LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGRldi0+c3RyZWFtX29uICYmICFmaC0+c3RyZWFtX29uKSB7Ci0JCWVtMjh4eF9lcnJkZXYoIiVzIGRldmljZSBpbiB1c2UgYnkgYW5vdGhlciBmaFxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJcmMgPSBlbTI4eHhfc2V0X3ZpZGVvX2Zvcm1hdChkZXYsIGYtPmZtdC5waXgucGl4ZWxmb3JtYXQsCiAJCQkJZi0+Zm10LnBpeC53aWR0aCwgZi0+Zm10LnBpeC5oZWlnaHQpOwogCkBAIC04NjIsNiArMTE0NCwyMSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCB2aWRpb2NfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpub3JtKQoreworCXN0cnVjdCBlbTI4eHhfZmggICAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgKmRldiA9IGZoLT5kZXY7CisJaW50ICAgICAgICAgICAgICAgIHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkqbm9ybSA9IGRldi0+bm9ybTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKm5vcm0pCiB7CiAJc3RydWN0IGVtMjh4eF9maCAgICpmaCAgPSBwcml2OwpAQCAtMTQxMywyMCArMTcxMCwyNSBAQAogewogCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKIAlzdHJ1Y3QgZW0yOHh4ICAgICAgICAgKmRldiA9IGZoLT5kZXY7Ci0JaW50ICAgICAgICAgICAgICAgICAgIHJjOworCWludCAgICAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CiAKIAlyYyA9IGNoZWNrX2RldihkZXYpOwogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAorCWlmICh1bmxpa2VseSh0eXBlICE9IGZoLT50eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCXJjID0gcmVzX2dldChmaCk7CisJZW0yOHh4X3ZpZGVvZGJnKCJ2aWRpb2Nfc3RyZWFtb24gZmg9JXAgdD0lZCBmaC0+cmVzPSVkIGRldi0+cmVzPSVkXG4iLAorCQkJZmgsIHR5cGUsIGZoLT5yZXNvdXJjZXMsIGRldi0+cmVzb3VyY2VzKTsKIAotCWlmIChsaWtlbHkocmMgPj0gMCkpCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGZoLCBnZXRfcmVzc291cmNlKGZoKSkpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCWVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJjID0gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52Yl92YmlxKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTE0NDIsMTcgKzE3NDQsMjIgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKKwkgICAgZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHR5cGUgIT0gZmgtPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwllbTI4eHhfdmlkZW9kYmcoInZpZGlvY19zdHJlYW1vZmYgZmg9JXAgdD0lZCBmaC0+cmVzPSVkIGRldi0+cmVzPSVkXG4iLAorCQkJZmgsIHR5cGUsIGZoLT5yZXNvdXJjZXMsIGRldi0+cmVzb3VyY2VzKTsKIAotCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOwotCXJlc19mcmVlKGZoKTsKLQotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOworCQlyZXNfZnJlZShmaCwgRU0yOFhYX1JFU09VUkNFX1ZJREVPKTsKKwl9IGVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKKwkJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmJpcSk7CisJCXJlc19mcmVlKGZoLCBFTTI4WFhfUkVTT1VSQ0VfVkJJKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NzQsNiArMTc4MSw5IEBACiAJCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJCVY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKIAorCWlmIChkZXYtPnZiaV9kZXYpCisJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1ZCSV9DQVBUVVJFOworCiAJaWYgKGRldi0+YXVkaW9fbW9kZS5oYXNfYXVkaW8pCiAJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX0FVRElPOwogCkBAIC0xNTQxLDYgKzE4NTEsNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogUkFXIFZCSSBpb2N0bHMgKi8KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOworCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOworCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisKKwkvKiBWYXJpZXMgYnkgdmlkZW8gc3RhbmRhcmQgKE5UU0MsIFBBTCwgZXRjLikgKi8KKwkvKiBGSVhNRTogaGFyZC1jb2RlZCBmb3IgTlRTQyBzdXBwb3J0ICovCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7IC8qIEZJWE1FOiA/Pz8gKi8KKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMF0gPSAxMjsKKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMV0gPSAxMjsKKwlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSAxMDsKKwlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAyNzM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOworCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOworCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisKKwkvKiBWYXJpZXMgYnkgdmlkZW8gc3RhbmRhcmQgKE5UU0MsIFBBTCwgZXRjLikgKi8KKwkvKiBGSVhNRTogaGFyZC1jb2RlZCBmb3IgTlRTQyBzdXBwb3J0ICovCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7IC8qIEZJWE1FOiA/Pz8gKi8KKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMF0gPSAxMjsKKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMV0gPSAxMjsKKwlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSAxMDsKKwlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAyNzM7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKQpAQCAtMTU1Myw3ICsxOTAyLDEwIEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52Yl92aWRxLCByYik7CisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52Yl92aWRxLCByYik7CisJZWxzZQorCQlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZiaXEsIHJiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC0xNTY3LDcgKzE5MTksMTggQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKKwllbHNlIHsKKwkJLyogRklYTUU6IEknbSBub3Qgc3VyZSB5ZXQgd2hldGhlciB0aGlzIGlzIGEgYnVnIGluIHp2Ymkgb3IKKwkJICAgdGhlIHZpZGVvYnVmIGZyYW1ld29yaywgYnV0IHdlIHByb2JhYmx5IHNob3VsZG4ndCBiZQorCQkgICByZXR1cm5pbmcgYSBidWZmZXIgbGFyZ2VyIHRoYW4gdGhhdCB3aGljaCB3YXMgYXNrZWQgZm9yLgorCQkgICBBdCBhIG1pbmltdW0sIGl0IGNhdXNlcyBhIGNyYXNoIGluIHp2Ymkgc2luY2UgaXQgZG9lcworCQkgICBhIG1lbWNweSBiYXNlZCBvbiB0aGUgc291cmNlIGJ1ZmZlciBsZW5ndGggKi8KKwkJaW50IHJlc3VsdCA9IHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmJfdmJpcSwgYik7CisJCWItPmxlbmd0aCA9IDE3MjgwOworCQlyZXR1cm4gcmVzdWx0OworCX0KIH0KIAogc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQpAQCAtMTU4MCw3ICsxOTQzLDEwIEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKTsKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOworCWVsc2UKKwkJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52Yl92YmlxLCBiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKQEAgLTE1OTMsNyArMTk1OSwxMiBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBiLCBmaWxlLT5mX2ZsYWdzICYKKwkJCQkgICAgICBPX05PTkJMT0NLKTsKKwllbHNlCisJCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZiaXEsIGIsIGZpbGUtPmZfZmxhZ3MgJgorCQkJCSAgICAgIE9fTk9OQkxPQ0spOwogfQogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCkBAIC0xNjAxLDcgKzE5NzIsMTAgQEAKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAqZmggPSBwcml2OwogCi0JcmV0dXJuIHZpZGVvYnVmX2NnbWJ1ZigmZmgtPnZiX3ZpZHEsIG1idWYsIDgpOworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92aWRxLCBtYnVmLCA4KTsKKwllbHNlCisJCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92YmlxLCBtYnVmLCA4KTsKIH0KICNlbmRpZgogCkBAIC0xNzY2LDggKzIxNDAsMTUgQEAKIAkJZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CiAKIAl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZoLT52Yl92aWRxLCAmZW0yOHh4X3ZpZGVvX3FvcHMsCi0JCQlOVUxMLCAmZGV2LT5zbG9jaywgZmgtPnR5cGUsIGZpZWxkLAotCQkJc2l6ZW9mKHN0cnVjdCBlbTI4eHhfYnVmZmVyKSwgZmgpOworCQkJCSAgICBOVUxMLCAmZGV2LT5zbG9jaywKKwkJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBmaWVsZCwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBlbTI4eHhfYnVmZmVyKSwgZmgpOworCisJdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCZmaC0+dmJfdmJpcSwgJmVtMjh4eF92YmlfcW9wcywKKwkJCQkgICAgTlVMTCwgJmRldi0+c2xvY2ssCisJCQkJICAgIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUsCisJCQkJICAgIFY0TDJfRklFTERfU0VRX1RCLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGVtMjh4eF9idWZmZXIpLCBmaCk7CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKQEAgLTE4MjQsMjAgKzIyMDUsMjEgQEAKIAogCWVtMjh4eF92aWRlb2RiZygidXNlcnM9JWRcbiIsIGRldi0+dXNlcnMpOwogCisJaWYgKHJlc19jaGVjayhmaCwgRU0yOFhYX1JFU09VUkNFX1ZJREVPKSkgeworCQl2aWRlb2J1Zl9zdG9wKCZmaC0+dmJfdmlkcSk7CisJCXJlc19mcmVlKGZoLCBFTTI4WFhfUkVTT1VSQ0VfVklERU8pOworCX0KIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JaWYgKHJlc19jaGVjayhmaCkpCi0JCXJlc19mcmVlKGZoKTsKKwlpZiAocmVzX2NoZWNrKGZoLCBFTTI4WFhfUkVTT1VSQ0VfVkJJKSkgeworCQl2aWRlb2J1Zl9zdG9wKCZmaC0+dmJfdmJpcSk7CisJCXJlc19mcmVlKGZoLCBFTTI4WFhfUkVTT1VSQ0VfVkJJKTsKKwl9CiAKIAlpZiAoZGV2LT51c2VycyA9PSAxKSB7Ci0JCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92aWRxKTsKLQkJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7Ci0KIAkJLyogdGhlIGRldmljZSBpcyBhbHJlYWR5IGRpc2Nvbm5lY3QsCiAJCSAgIGZyZWUgdGhlIHJlbWFpbmluZyByZXNvdXJjZXMgKi8KIAkJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCQllbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoZGV2KTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJCWtmcmVlKGRldik7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTg1OCwxMCArMjI0MCwxMiBAQAogCQkJCQkiMCAoZXJyb3I9JWkpXG4iLCBlcnJDb2RlKTsKIAkJfQogCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZiX3ZpZHEpOworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZiX3ZiaXEpOwogCWtmcmVlKGZoKTsKIAlkZXYtPnVzZXJzLS07CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZkZXYtPm9wZW4sIDEpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg4NiwxNiArMjI3MCwyMiBAQAogCSAqLwogCiAJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQlyYyA9IHJlc19nZXQoZmgpOwotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQkJaWYgKHVubGlrZWx5KHJjIDwgMCkpCi0JCQlyZXR1cm4gcmM7CisJCWlmIChyZXNfbG9ja2VkKGRldiwgRU0yOFhYX1JFU09VUkNFX1ZJREVPKSkKKwkJCXJldHVybiAtRUJVU1k7CiAKIAkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCZmaC0+dmJfdmlkcSwgYnVmLCBjb3VudCwgcG9zLCAwLAogCQkJCQlmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiAJfQorCisKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQlpZiAoIXJlc19nZXQoZmgsIEVNMjhYWF9SRVNPVVJDRV9WQkkpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZoLT52Yl92YmlxLCBidWYsIGNvdW50LCBwb3MsIDAsCisJCQkJCWZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkxMywxNyArMjMwMywxNyBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JcmMgPSByZXNfZ2V0KGZoKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQlpZiAodW5saWtlbHkocmMgPCAwKSkKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCWlmICghcmVzX2dldChmaCwgRU0yOFhYX1JFU09VUkNFX1ZJREVPKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlscCwgJmZoLT52Yl92aWRxLCB3YWl0KTsKKwl9IGVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKKwkJaWYgKCFyZXNfZ2V0KGZoLCBFTTI4WFhfUkVTT1VSQ0VfVkJJKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlscCwgJmZoLT52Yl92YmlxLCB3YWl0KTsKKwl9IGVsc2UgewogCQlyZXR1cm4gUE9MTEVSUjsKLQotCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gZmgtPnR5cGUpCi0JCXJldHVybiBQT0xMRVJSOwotCi0JcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbHAsICZmaC0+dmJfdmlkcSwgd2FpdCk7CisJfQogfQogCiAvKgpAQCAtMTkzOSwxNCArMjMyOSwxMCBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JcmMgPSByZXNfZ2V0KGZoKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQlpZiAodW5saWtlbHkocmMgPCAwKSkKLQkJcmV0dXJuIHJjOwotCi0JcmMgPSB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZmgtPnZiX3ZpZHEsIHZtYSk7CisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmMgPSB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZmgtPnZiX3ZpZHEsIHZtYSk7CisJZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmMgPSB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZmgtPnZiX3ZiaXEsIHZtYSk7CiAKIAllbTI4eHhfdmlkZW9kYmcoInZtYSBzdGFydD0weCUwOGx4LCBzaXplPSVsZCwgcmV0PSVkXG4iLAogCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LApAQCAtMTk3Miw2ICsyMzU4LDggQEAKIAkudmlkaW9jX2dfZm10X3ZpZF9jYXAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKIAkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAogCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgICAgICA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmJpX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92YmlfY2FwLAorCS52aWRpb2Nfc19mbXRfdmJpX2NhcCAgICAgICA9IHZpZGlvY19zX2ZtdF92YmlfY2FwLAogCS52aWRpb2NfZ19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19nX2F1ZGlvLAogCS52aWRpb2Nfc19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19zX2F1ZGlvLAogCS52aWRpb2NfY3JvcGNhcCAgICAgICAgICAgICA9IHZpZGlvY19jcm9wY2FwLApAQCAtMTk4NCw2ICsyMzcyLDcgQEAKIAkudmlkaW9jX3F1ZXJ5YnVmICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCiAJLnZpZGlvY19xYnVmICAgICAgICAgICAgICAgID0gdmlkaW9jX3FidWYsCiAJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICAgID0gdmlkaW9jX2RxYnVmLAorCS52aWRpb2NfZ19zdGQgICAgICAgICAgICAgICA9IHZpZGlvY19nX3N0ZCwKIAkudmlkaW9jX3Nfc3RkICAgICAgICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCiAJLnZpZGlvY19nX3Bhcm0JCSAgICA9IHZpZGlvY19nX3Bhcm0sCiAJLnZpZGlvY19zX3Bhcm0JCSAgICA9IHZpZGlvY19zX3Bhcm0sCkBAIC0yMTA1LDEzICsyNDk0LDEwIEBACiAJZGV2LT5tdXRlID0gMTsKIAlkZXYtPnZvbHVtZSA9IDB4MWY7CiAKLQkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLwotCiAvKgllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgMHhjMCk7IGF1ZGlvIHJlZ2lzdGVyICovCiAJdmFsID0gKHU4KWVtMjh4eF9yZWFkX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSyk7CiAJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSywKIAkJCSAoRU0yOFhYX1hDTEtfQVVESU9fVU5NVVRFIHwgdmFsKSk7Ci0JZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMTFfVklOQ1RSTCwgMHg1MSk7CiAKIAllbTI4eHhfc2V0X291dGZtdChkZXYpOwogCWVtMjh4eF9jb2xvcmxldmVsc19zZXRfZGVmYXVsdChkZXYpOwpAQCAtMjEzNCwxNCArMjUyMCwxNyBAQAogCX0KIAogCS8qIEFsbG9jYXRlIGFuZCBmaWxsIHZiaSB2aWRlb19kZXZpY2Ugc3RydWN0ICovCi0JZGV2LT52YmlfZGV2ID0gZW0yOHh4X3ZkZXZfaW5pdChkZXYsICZlbTI4eHhfdmlkZW9fdGVtcGxhdGUsICJ2YmkiKTsKKwlpZiAoZW0yOHh4X3ZiaV9zdXBwb3J0ZWQoZGV2KSA9PSAxKSB7CisJCWRldi0+dmJpX2RldiA9IGVtMjh4eF92ZGV2X2luaXQoZGV2LCAmZW0yOHh4X3ZpZGVvX3RlbXBsYXRlLAorCQkJCQkJInZiaSIpOwogCi0JLyogcmVnaXN0ZXIgdjRsMiB2YmkgdmlkZW9fZGV2aWNlICovCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2RldiwgVkZMX1RZUEVfVkJJLAotCQkJCQl2YmlfbnJbZGV2LT5kZXZub10pOwotCWlmIChyZXQgPCAwKSB7Ci0JCWVtMjh4eF9lcnJkZXYoInVuYWJsZSB0byByZWdpc3RlciB2YmkgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIHJldDsKKwkJLyogcmVnaXN0ZXIgdjRsMiB2YmkgdmlkZW9fZGV2aWNlICovCisJCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYsIFZGTF9UWVBFX1ZCSSwKKwkJCQkJICAgIHZiaV9ucltkZXYtPmRldm5vXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQllbTI4eHhfZXJyZGV2KCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmJpIGRldmljZVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCiAJaWYgKGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ucmFkaW8udHlwZSA9PSBFTTI4WFhfUkFESU8pIHsKQEAgLTIxNjEsOCArMjU1MCwxMiBAQAogCQkJICAgIGRldi0+cmFkaW9fZGV2LT5udW0pOwogCX0KIAotCWVtMjh4eF9pbmZvKCJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCBhbmQgL2Rldi92YmklZFxuIiwKLQkJCQlkZXYtPnZkZXYtPm51bSwgZGV2LT52YmlfZGV2LT5udW0pOworCWVtMjh4eF9pbmZvKCJWNEwyIHZpZGVvIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZFxuIiwKKwkJCQlkZXYtPnZkZXYtPm51bSk7CisKKwlpZiAoZGV2LT52YmlfZGV2KQorCQllbTI4eHhfaW5mbygiVjRMMiBWQkkgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92YmklZFxuIiwKKwkJCSAgICBkZXYtPnZiaV9kZXYtPm51bSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggMGYyYmE5YS4uMGE3M2U4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTEwOSw2ICsxMDksNyBAQAogI2RlZmluZSBFTTI4ODJfQk9BUkRfRVZHQV9JTkRUVUJFCQkgIDcwCiAjZGVmaW5lIEVNMjgyMF9CT0FSRF9TSUxWRVJDUkVTVF9XRUJDQU0gICAgICAgICAgIDcxCiAjZGVmaW5lIEVNMjg2MV9CT0FSRF9HQURNRUlfVVRWMzMwUExVUyAgICAgICAgICAgNzIKKyNkZWZpbmUgRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1ggICAgICAgICAgNzMKIAogLyogTGltaXRzIG1pbmltdW0gYW5kIGRlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KICNkZWZpbmUgRU0yOFhYX01JTl9CVUYgNApAQCAtMjE0LDcgKzIxNSw4IEBACiAJaW50CQkJCXRtcF9idWZfbGVuOwogCiAJCS8qIFN0b3JlcyBhbHJlYWR5IHJlcXVlc3RlZCBidWZmZXJzICovCi0Jc3RydWN0IGVtMjh4eF9idWZmZXIgICAgCSpidWY7CisJc3RydWN0IGVtMjh4eF9idWZmZXIgICAgCSp2aWRfYnVmOworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgIAkqdmJpX2J1ZjsKIAogCQkvKiBTdG9yZXMgdGhlIG51bWJlciBvZiByZWNlaXZlZCBmaWVsZHMgKi8KIAlpbnQJCQkJbmZpZWxkczsKQEAgLTQ0Myw2ICs0NDUsMTAgQEAKICNkZWZpbmUgRU0yOFhYX0FVRElPICAgMHgxMAogI2RlZmluZSBFTTI4WFhfRFZCICAgICAweDIwCiAKKy8qIGVtMjh4eCByZXNvdXJjZSB0eXBlcyAodXNlZCBmb3IgcmVzX2dldC9yZXNfbG9jayBldGMgKi8KKyNkZWZpbmUgRU0yOFhYX1JFU09VUkNFX1ZJREVPIDB4MDEKKyNkZWZpbmUgRU0yOFhYX1JFU09VUkNFX1ZCSSAgIDB4MDIKKwogc3RydWN0IGVtMjh4eF9hdWRpbyB7CiAJY2hhciBuYW1lWzUwXTsKIAljaGFyICp0cmFuc2Zlcl9idWZmZXJbRU0yOFhYX0FVRElPX0JVRlNdOwpAQCAtNDYzLDEwICs0NjksMTEgQEAKIAogc3RydWN0IGVtMjh4eF9maCB7CiAJc3RydWN0IGVtMjh4eCAqZGV2OwotCXVuc2lnbmVkIGludCAgc3RyZWFtX29uOjE7CS8qIExvY2tzIHN0cmVhbXMgKi8KIAlpbnQgICAgICAgICAgIHJhZGlvOworCXVuc2lnbmVkIGludCAgcmVzb3VyY2VzOwogCiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgICB2Yl92aWRxOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgICAgdmJfdmJpcTsKIAogCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgICAgdHlwZTsKIH07CkBAIC00OTMsNyArNTAwLDYgQEAKIAkvKiBWaW5tb2RlL1ZpbmN0bCB1c2VkIGF0IHRoZSBkcml2ZXIgKi8KIAlpbnQgdmlubW9kZSwgdmluY3RsOwogCi0JdW5zaWduZWQgaW50IHN0cmVhbV9vbjoxOwkvKiBMb2NrcyBzdHJlYW1zICovCiAJdW5zaWduZWQgaW50IGhhc19hdWRpb19jbGFzczoxOwogCXVuc2lnbmVkIGludCBoYXNfYWxzYV9hdWRpbzoxOwogCkBAIC01NDQsNiArNTUwLDEyIEBACiAJZW51bSBlbTI4eHhfZGV2X3N0YXRlIHN0YXRlOwogCWVudW0gZW0yOHh4X2lvX21ldGhvZCBpbzsKIAorCS8qIHZiaSByZWxhdGVkIHN0YXRlIHRyYWNraW5nICovCisJaW50IGNhcHR1cmVfdHlwZTsKKwlpbnQgdmJpX3JlYWQ7CisJdW5zaWduZWQgY2hhciBjdXJfZmllbGQ7CisKKwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgIHJlcXVlc3RfbW9kdWxlX3drOwogCiAJLyogbG9ja3MgKi8KQEAgLTU1NSwxMCArNTY3LDE0IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmJpX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpyYWRpb19kZXY7CiAKKwkvKiByZXNvdXJjZXMgaW4gdXNlICovCisJdW5zaWduZWQgaW50IHJlc291cmNlczsKKwogCXVuc2lnbmVkIGNoYXIgZWVkYXRhWzI1Nl07CiAKIAkvKiBJc29jIGNvbnRyb2wgc3RydWN0ICovCiAJc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSB2aWRxOworCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgdmJpcTsKIAlzdHJ1Y3QgZW0yOHh4X3VzYl9pc29jX2N0bCBpc29jX2N0bDsKIAlzcGlubG9ja190IHNsb2NrOwogCkBAIC02MzksNiArNjU1LDcgQEAKIAogaW50IGVtMjh4eF9jb2xvcmxldmVsc19zZXRfZGVmYXVsdChzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogaW50IGVtMjh4eF9jYXB0dXJlX3N0YXJ0KHN0cnVjdCBlbTI4eHggKmRldiwgaW50IHN0YXJ0KTsKK2ludCBlbTI4eHhfdmJpX3N1cHBvcnRlZChzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogaW50IGVtMjh4eF9zZXRfb3V0Zm10KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X3Jlc29sdXRpb25fc2V0KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X3NldF9hbHRlcm5hdGUoc3RydWN0IGVtMjh4eCAqZGV2KTsKQEAgLTY4Niw2ICs3MDMsOSBAQAogaW50IGVtMjh4eF9pcl9pbml0KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X2lyX2Zpbmkoc3RydWN0IGVtMjh4eCAqZGV2KTsKIAorLyogUHJvdmlkZWQgYnkgZW0yOHh4LXZiaS5jICovCitleHRlcm4gc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBlbTI4eHhfdmJpX3FvcHM7CisKIC8qIHByaW50ayBtYWNyb3MgKi8KIAogI2RlZmluZSBlbTI4eHhfZXJyKGZtdCwgYXJnLi4uKSBkbyB7XApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwppbmRleCBkMWMxZTQ1Li43NDA5MmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwpAQCAtMTM3OSw4ICsxMzc5LDEwIEBACiAJCQkgICAgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgfHwKIAkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8CiAJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCksCi0JCQkgICAgY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqCi0JCQkgICAgMTAwMCAqIG1zZWNzX3RvX2ppZmZpZXMoMSkgKTsKKwkJCSAgICBtc2Vjc190b19qaWZmaWVzKAorCQkJCWNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgKiAxMDAwCisJCQkgICAgKQorCQkJICApOwogCQlpZiAodGltZW91dCA8IDApIHsKIAkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJcmV0dXJuIHRpbWVvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKaW5kZXggODg5NzI4My4uZmUyZTQ5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwpAQCAtMTksNiArMTksNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvS2NvbmZpZyIKIAogY29uZmlnIFVTQl9HU1BDQV9DT05FWAogCXRyaXN0YXRlICJDb25leGFudCBDYW1lcmEgRHJpdmVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKaW5kZXggMDM1NjE2Yi4uYjc0MjA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCkBAIC01OCwzICs1OCw0IEBACiAKIG9iai0kKENPTkZJR19VU0JfTTU2MDIpICAgKz0gbTU2MDIvCiBvYmotJChDT05GSUdfVVNCX1NUVjA2WFgpICs9IHN0djA2eHgvCitvYmotJChDT05GSUdfVVNCX0dMODYwKSAgICs9IGdsODYwLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNzcyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL0tjb25maWcKQEAgLTAsMCArMSw4IEBACitjb25maWcgVVNCX0dMODYwCisJdHJpc3RhdGUgIkdMODYwIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIEdMODYwIGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2dsODYwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjOTQwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorb2JqLSQoQ09ORklHX1VTQl9HTDg2MCkgKz0gZ3NwY2FfZ2w4NjAubworCitnc3BjYV9nbDg2MC1vYmpzIDo9IGdsODYwLm8gXAorCQkgICAgZ2w4NjAtbWkxMzIwLm8gXAorCQkgICAgZ2w4NjAtb3YyNjQwLm8gXAorCQkgICAgZ2w4NjAtb3Y5NjU1Lm8gXAorCQkgICAgZ2w4NjAtbWkyMDIwLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMTMyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTEzMjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY2MjYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTEzMjAuYwpAQCAtMCwwICsxLDUzNyBAQAorLyogQGZpbGUgZ2w4NjAtbWkxMzIwLmMKKyAqIEBhdXRob3IgT2xpdmllciBMT1JJTiBmcm9tIG15IGxvZ3MKKyAqIEBkYXRlIDIwMDktMDgtMjcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qIFNlbnNvciA6IE1JMTMyMCAqLworCisjaW5jbHVkZSAiZ2w4NjAuaCIKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX2NvbW1vbltdID0geworCXsweGJhMDAsIDB4MDBmMH0sIHsweGJhMDAsIDB4MDBmMX0sIHsweGJhNTEsIDB4MDA2Nn0sIHsweGJhMDIsIDB4MDBmMX0sCisJezB4YmEwNSwgMHgwMDY3fSwgezB4YmEwNSwgMHgwMGYxfSwgezB4YmFhMCwgMHgwMDY1fSwgezB4YmEwMCwgMHgwMGYxfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweGJhMDAsIDB4MDBmMH0sIHsweGJhMDIsIDB4MDBmMX0sIHsweGJhZmEsIDB4MDAyOH0sIHsweGJhMDIsIDB4MDBmMX0sCisJezB4YmEwMCwgMHgwMGYwfSwgezB4YmEwMSwgMHgwMGYxfSwgezB4YmFmMCwgMHgwMDA2fSwgezB4YmEwZSwgMHgwMGYxfSwKKwl7MHhiYTcwLCAweDAwMDZ9LCB7MHhiYTBlLCAweDAwZjF9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4YmE3NCwgMHgwMDA2fSwgezB4YmEwZSwgMHgwMGYxfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDAwNjEsIDB4MDAwMH0sIHsweDAwNjgsIDB4MDAwZH0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfaW5pdF9hdF9zdGFydHVwW10gPSB7CisJezB4MDAwMCwgMHgwMDAwfSwgezB4MDAxMCwgMHgwMDEwfSwKKwl7MzUsIDB4ZmZmZn0sCisJezB4MDAwOCwgMHgwMGMwfSwgezB4MDAwMSwgMHgwMGMxfSwgezB4MDAwMSwgMHgwMGMyfSwgezB4MDAyMCwgMHgwMDA2fSwKKwl7MHgwMDZhLCAweDAwMGR9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25bXSA9IHsKKwl7MHgwMDEwLCAweDAwMTB9LCB7MHgwMDAzLCAweDAwYzF9LCB7MHgwMDQyLCAweDAwYzJ9LCB7MHgwMDQwLCAweDAwMDB9LAorCXsweDAwNmEsIDB4MDAwN30sIHsweDAwNmEsIDB4MDAwZH0sIHsweDAwNjMsIDB4MDAwNn0sCit9Oworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3NlbnNvcl9zZXR0aW5nc18xMjgwW10gPSB7CisJezB4YmEwMCwgMHgwMGYwfSwgezB4YmEwMCwgMHgwMGYxfSwgezB4YmE1YSwgMHgwMDY2fSwgezB4YmEwMiwgMHgwMGYxfSwKKwl7MHhiYTA1LCAweDAwNjd9LCB7MHhiYTA1LCAweDAwZjF9LCB7MHhiYTIwLCAweDAwNjV9LCB7MHhiYTAwLCAweDAwZjF9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9zZW5zb3Jfc2V0dGluZ3NfODAwW10gPSB7CisJezB4YmEwMCwgMHgwMGYwfSwgezB4YmEwMCwgMHgwMGYxfSwgezB4YmE1YSwgMHgwMDY2fSwgezB4YmEwMiwgMHgwMGYxfSwKKwl7MHhiYTA1LCAweDAwNjd9LCB7MHhiYTA1LCAweDAwZjF9LCB7MHhiYTIwLCAweDAwNjV9LCB7MHhiYTAwLCAweDAwZjF9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9zZW5zb3Jfc2V0dGluZ3NfNjQwW10gPSB7CisJezB4YmEwMCwgMHgwMGYwfSwgezB4YmEwMCwgMHgwMGYxfSwgezB4YmFhMCwgMHgwMDY1fSwgezB4YmEwMCwgMHgwMGYxfSwKKwl7MHhiYTUxLCAweDAwNjZ9LCB7MHhiYTAyLCAweDAwZjF9LCB7MHhiYTA1LCAweDAwNjd9LCB7MHhiYTA1LCAweDAwZjF9LAorCXsweGJhMjAsIDB4MDA2NX0sIHsweGJhMDAsIDB4MDBmMX0sCit9Oworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3Bvc3RfdW5zZXRfYWx0W10gPSB7CisJezB4YmEwMCwgMHgwMGYwfSwgezB4YmEwMCwgMHgwMGYxfSwgezB4YmFhMCwgMHgwMDY1fSwgezB4YmEwMCwgMHgwMGYxfSwKKwl7MHgwMDYxLCAweDAwMDB9LCB7MHgwMDY4LCAweDAwMGR9LAorfTsKKworc3RhdGljIHU4ICp0YmxfMTI4MFtdID0geworCSJceDBkXHg4MFx4ZjFceDA4XHgwM1x4MDRceGYxXHgwMCIgIlx4MDRceDA1XHhmMVx4MDJceDA1XHgwMFx4ZjFceGYxIgorCSJceDA2XHgwMFx4ZjFceDBkXHgyMFx4MDFceGYxXHgwMCIgIlx4MjFceDg0XHhmMVx4MDBceDBkXHgwMFx4ZjFceDA4IgorCSJceGYwXHgwMFx4ZjFceDAxXHgzNFx4MDBceGYxXHgwMCIgIlx4OWJceDQzXHhmMVx4MDBceGE2XHgwNVx4ZjFceDAwIgorCSJceGE5XHgwNFx4ZjFceDAwXHhhMVx4MDVceGYxXHgwMCIgIlx4YTRceDA0XHhmMVx4MDBceGFlXHgwYVx4ZjFceDA4IgorCSwKKwkiXHhmMFx4MDBceGYxXHgwMlx4M2FceDA1XHhmMVx4ZjEiICJceDNjXHgwNVx4ZjFceGYxXHg1OVx4MDFceGYxXHg0NyIKKwkiXHg1YVx4MDFceGYxXHg4OFx4NWNceDBhXHhmMVx4MDYiICJceDVkXHgwZVx4ZjFceDBhXHg2NFx4NWVceGYxXHgxYyIKKwkiXHhkMlx4MDBceGYxXHhjZlx4Y2JceDAwXHhmMVx4MDEiCisJLAorCSJceGQzXHgwMlx4ZDRceDI4XHhkNVx4MDFceGQwXHgwMiIgIlx4ZDFceDE4XHhkMlx4YzEiCit9OworCitzdGF0aWMgdTggKnRibF84MDBbXSA9IHsKKwkiXHgwZFx4ODBceGYxXHgwOFx4MDNceDAzXHhmMVx4YzAiICJceDA0XHgwNVx4ZjFceDAyXHgwNVx4MDBceGYxXHhmMSIKKwkiXHgwNlx4MDBceGYxXHgwZFx4MjBceDAxXHhmMVx4MDAiICJceDIxXHg4NFx4ZjFceDAwXHgwZFx4MDBceGYxXHgwOCIKKwkiXHhmMFx4MDBceGYxXHgwMVx4MzRceDAwXHhmMVx4MDAiICJceDliXHg0M1x4ZjFceDAwXHhhNlx4MDVceGYxXHgwMCIKKwkiXHhhOVx4MDNceGYxXHhjMFx4YTFceDAzXHhmMVx4MjAiICJceGE0XHgwMlx4ZjFceDVhXHhhZVx4MGFceGYxXHgwOCIKKwksCisJIlx4ZjBceDAwXHhmMVx4MDJceDNhXHgwNVx4ZjFceGYxIiAiXHgzY1x4MDVceGYxXHhmMVx4NTlceDAxXHhmMVx4NDciCisJIlx4NWFceDAxXHhmMVx4ODhceDVjXHgwYVx4ZjFceDA2IiAiXHg1ZFx4MGVceGYxXHgwYVx4NjRceDVlXHhmMVx4MWMiCisJIlx4ZDJceDAwXHhmMVx4Y2ZceGNiXHgwMFx4ZjFceDAxIgorCSwKKwkiXHhkM1x4MDJceGQ0XHgxOFx4ZDVceDIxXHhkMFx4MDIiICJceGQxXHgxMFx4ZDJceDU5IgorfTsKKworc3RhdGljIHU4ICp0YmxfNjQwW10gPSB7CisJIlx4MGRceDgwXHhmMVx4MDhceDAzXHgwNFx4ZjFceDA0IiAiXHgwNFx4MDVceGYxXHgwMlx4MDdceDAxXHhmMVx4N2MiCisJIlx4MDhceDAwXHhmMVx4MGVceDIxXHg4MFx4ZjFceDAwIiAiXHgwZFx4MDBceGYxXHgwOFx4ZjBceDAwXHhmMVx4MDEiCisJIlx4MzRceDEwXHhmMVx4MTBceDNhXHg0M1x4ZjFceDAwIiAiXHhhNlx4MDVceGYxXHgwMlx4YTlceDA0XHhmMVx4MDQiCisJIlx4YTdceDAyXHhmMVx4ODFceGFhXHgwMVx4ZjFceGUyIiAiXHhhZVx4MGNceGYxXHgwOSIKKwksCisJIlx4ZjBceDAwXHhmMVx4MDJceDM5XHgwM1x4ZjFceGZjIiAiXHgzYlx4MDRceGYxXHgwNFx4NTdceDAxXHhmMVx4YjYiCisJIlx4NThceDAyXHhmMVx4MGRceDVjXHgxZlx4ZjFceDE5IiAiXHg1ZFx4MjRceGYxXHgxZVx4NjRceDVlXHhmMVx4MWMiCisJIlx4ZDJceDAwXHhmMVx4MDBceGNiXHgwMFx4ZjFceDAxIgorCSwKKwkiXHhkM1x4MDJceGQ0XHgxMFx4ZDVceDgxXHhkMFx4MDIiICJceGQxXHgwOFx4ZDJceGUxIgorfTsKKworc3RhdGljIHMzMiB0Ymxfc2F0W10gPSB7MHgyNSwgMHgxZCwgMHgxNSwgMHgwZCwgMHgwNSwgMHg0ZCwgMHg1NSwgMHg1ZCwgMHgyZH07CitzdGF0aWMgczMyIHRibF9icmlnaHRbXSA9IHswLCA4LCAweDEwLCAweDIwLCAweDMwLCAweDQwLCAweDUwLCAweDYwLCAweDcwfTsKK3N0YXRpYyBzMzIgdGJsX2JhY2tsaWdodFtdID0gezB4MGUsIDB4MDYsIDB4MDJ9OworCitzdGF0aWMgczMyIHRibF9jbnRyMVtdID0geworCTB4OTAsIDB4OTgsIDB4YTAsIDB4YTgsIDB4YjAsIDB4YjgsIDB4YzAsIDB4YzgsIDB4ZDAsIDB4ZTAsIDB4ZjB9Oworc3RhdGljIHMzMiB0YmxfY250cjJbXSA9IHsKKwkweDcwLCAweDY4LCAweDYwLCAweDU4LCAweDUwLCAweDQ4LCAweDQwLCAweDM4LCAweDMwLCAweDIwLCAweDEwfTsKKworc3RhdGljIHU4IGRhdF93YmFsTkxbXSA9CisJIlx4ZjBceDAwXHhmMVx4MDFceDA1XHgwMFx4ZjFceDA2IiAiXHgzYlx4MDRceGYxXHgyYVx4NDdceDEwXHhmMVx4MTAiCisJIlx4OWRceDNjXHhmMVx4YWVceGFmXHgxMFx4ZjFceDAwIiAiXHhmMFx4MDBceGYxXHgwMlx4MmZceDkxXHhmMVx4MjAiCisJIlx4OWNceDkxXHhmMVx4MjBceDM3XHgwM1x4ZjFceDAwIiAiXHg5ZFx4YzVceGYxXHgwZlx4ZjBceDAwXHhmMVx4MDAiOworCitzdGF0aWMgdTggZGF0X3diYWxMTFtdID0KKwkiXHhmMFx4MDBceGYxXHgwMVx4MDVceDAwXHhmMVx4MGMiICJceDNiXHgwNFx4ZjFceDJhXHg0N1x4NDBceGYxXHg0MCIKKwkiXHg5ZFx4MjBceGYxXHhhZVx4YWZceDEwXHhmMVx4MDAiICJceGYwXHgwMFx4ZjFceDAyXHgyZlx4ZDFceGYxXHgwMCIKKwkiXHg5Y1x4ZDFceGYxXHgwMFx4MzdceDAzXHhmMVx4MDAiICJceDlkXHhjNVx4ZjFceDNmXHhmMFx4MDBceGYxXHgwMCI7CisKK3N0YXRpYyB1OCBkYXRfd2JhbEJMW10gPQorCSJceGYwXHgwMFx4ZjFceDAxXHgwNVx4MDBceGYxXHgwNiIgIlx4NDdceDEwXHhmMVx4MzBceDlkXHgzY1x4ZjFceGFlIgorCSJceGFmXHgxMFx4ZjFceDAwXHhmMFx4MDBceGYxXHgwMiIgIlx4MmZceDkxXHhmMVx4MjBceDljXHg5MVx4ZjFceDIwIgorCSJceDM3XHgwM1x4ZjFceDAwXHg5ZFx4YzVceGYxXHgyZiIgIlx4ZjBceDAwXHhmMVx4MDAiOworCitzdGF0aWMgdTggZGF0X2h2ZmxpcDFbXSA9IHsweGYwLCAweDAwLCAweGYxLCAweDAwfTsKKworc3RhdGljIHU4IHMwMDBbXSA9CisJIlx4MDBceDAxXHgwN1x4NmFceDA2XHg2M1x4MGRceDZhIiAiXHhjMFx4MDBceDEwXHgxMFx4YzFceDAzXHhjMlx4NDIiCisJIlx4ZDhceDA0XHg1OFx4MDBceDA0XHgwMiI7CitzdGF0aWMgdTggczAwMVtdID0KKwkiXHgwZFx4MDBceGYxXHgwYlx4MGRceDAwXHhmMVx4MDgiICJceDM1XHgwMFx4ZjFceDIyXHg2OFx4MDBceGYxXHg1ZCIKKwkiXHhmMFx4MDBceGYxXHgwMVx4MDZceDcwXHhmMVx4MGUiICJceGYwXHgwMFx4ZjFceDAyXHhkZFx4MThceGYxXHhlMCI7CitzdGF0aWMgdTggczAwMltdID0KKwkiXHgwNVx4MDFceGYxXHg4NFx4MDZceDAwXHhmMVx4NDQiICJceDA3XHgwMFx4ZjFceGJlXHgwOFx4MDBceGYxXHgxZSIKKwkiXHgyMFx4MDFceGYxXHgwM1x4MjFceDg0XHhmMVx4MDAiICJceDIyXHgwZFx4ZjFceDBmXHgyNFx4ODBceGYxXHgwMCIKKwkiXHgzNFx4MThceGYxXHgyZFx4MzVceDAwXHhmMVx4MjIiICJceDQzXHg4M1x4ZjFceDgzXHg1OVx4MDBceGYxXHhmZiI7CitzdGF0aWMgdTggczAwM1tdID0KKwkiXHhmMFx4MDBceGYxXHgwMlx4MzlceDA2XHhmMVx4OGMiICJceDNhXHgwNlx4ZjFceDhjXHgzYlx4MDNceGYxXHhkYSIKKwkiXHgzY1x4MDVceGYxXHgzMFx4NTdceDAxXHhmMVx4MGMiICJceDU4XHgwMVx4ZjFceDQyXHg1OVx4MDFceGYxXHgwYyIKKwkiXHg1YVx4MDFceGYxXHg0Mlx4NWNceDEzXHhmMVx4MGUiICJceDVkXHgxN1x4ZjFceDEyXHg2NFx4MWVceGYxXHgxYyI7CitzdGF0aWMgdTggczAwNFtdID0KKwkiXHhmMFx4MDBceGYxXHgwMlx4MjRceDVmXHhmMVx4MjAiICJceDI4XHhlYVx4ZjFceDAyXHg1Zlx4NDFceGYxXHg0MyI7CitzdGF0aWMgdTggczAwNVtdID0KKwkiXHgwMlx4MDBceGYxXHhlZVx4MDNceDI5XHhmMVx4MWEiICJceDA0XHgwMlx4ZjFceGE0XHgwOVx4MDBceGYxXHg2OCIKKwkiXHgwYVx4MDBceGYxXHgyYVx4MGJceDAwXHhmMVx4MDQiICJceDBjXHgwMFx4ZjFceDkzXHgwZFx4MDBceGYxXHg4MiIKKwkiXHgwZVx4MDBceGYxXHg0MFx4MGZceDAwXHhmMVx4NWYiICJceDEwXHgwMFx4ZjFceDRlXHgxMVx4MDBceGYxXHg1YiI7CitzdGF0aWMgdTggczAwNltdID0KKwkiXHgxNVx4MDBceGYxXHhjOVx4MTZceDAwXHhmMVx4NWUiICJceDE3XHgwMFx4ZjFceDlkXHgxOFx4MDBceGYxXHgwNiIKKwkiXHgxOVx4MDBceGYxXHg4OVx4MWFceDAwXHhmMVx4MTIiICJceDFiXHgwMFx4ZjFceGExXHgxY1x4MDBceGYxXHhlNCIKKwkiXHgxZFx4MDBceGYxXHg3YVx4MWVceDAwXHhmMVx4NjQiICJceGY2XHgwMFx4ZjFceDVmIjsKK3N0YXRpYyB1OCBzMDA3W10gPQorCSJceGYwXHgwMFx4ZjFceDAxXHg1M1x4MDlceGYxXHgwMyIgIlx4NTRceDNkXHhmMVx4MWNceDU1XHg5OVx4ZjFceDcyIgorCSJceDU2XHhjMVx4ZjFceGIxXHg1N1x4ZDhceGYxXHhjZSIgIlx4NThceGUwXHhmMVx4MDBceGRjXHgwYVx4ZjFceDAzIgorCSJceGRkXHg0NVx4ZjFceDIwXHhkZVx4YWVceGYxXHg4MiIgIlx4ZGZceGRjXHhmMVx4YzlceGUwXHhmNlx4ZjFceGVhIgorCSJceGUxXHhmZlx4ZjFceDAwIjsKK3N0YXRpYyB1OCBzMDA4W10gPQorCSJceGYwXHgwMFx4ZjFceDAxXHg4MFx4MDBceGYxXHgwNiIgIlx4ODFceGY2XHhmMVx4MDhceDgyXHhmYlx4ZjFceGY3IgorCSJceDgzXHgwMFx4ZjFceGZlXHhiNlx4MDdceGYxXHgwMyIgIlx4YjdceDE4XHhmMVx4MGNceDg0XHhmYlx4ZjFceDA2IgorCSJceDg1XHhmYlx4ZjFceGY5XHg4Nlx4MDBceGYxXHhmZiIgIlx4YjhceDA3XHhmMVx4MDRceGI5XHgxNlx4ZjFceDBhIjsKK3N0YXRpYyB1OCBzMDA5W10gPQorCSJceDg3XHhmYVx4ZjFceDA1XHg4OFx4ZmNceGYxXHhmOSIgIlx4ODlceDAwXHhmMVx4ZmZceGJhXHgwNlx4ZjFceDAzIgorCSJceGJiXHgxN1x4ZjFceDA5XHg4YVx4ZThceGYxXHgxNCIgIlx4OGJceGY3XHhmMVx4ZjBceDhjXHhmZFx4ZjFceGZhIgorCSJceDhkXHgwMFx4ZjFceDAwXHhiY1x4MDVceGYxXHgwMSIgIlx4YmRceDBjXHhmMVx4MDhceGJlXHgwMFx4ZjFceDE0IjsKK3N0YXRpYyB1OCBzMDEwW10gPQorCSJceDhlXHhlYVx4ZjFceDEzXHg4Zlx4ZjdceGYxXHhmMiIgIlx4OTBceGZkXHhmMVx4ZmFceDkxXHgwMFx4ZjFceDAwIgorCSJceGJmXHgwNVx4ZjFceDAxXHhjMFx4MGFceGYxXHgwOCIgIlx4YzFceDAwXHhmMVx4MGNceDkyXHhlZFx4ZjFceDBmIgorCSJceDkzXHhmOVx4ZjFceGY0XHg5NFx4ZmVceGYxXHhmYiIgIlx4OTVceDAwXHhmMVx4MDBceGMyXHgwNFx4ZjFceDAxIgorCSJceGMzXHgwYVx4ZjFceDA3XHhjNFx4MDBceGYxXHgxMCI7CitzdGF0aWMgdTggczAxMVtdID0KKwkiXHhmMFx4MDBceGYxXHgwMVx4MDVceDAwXHhmMVx4MDYiICJceDI1XHgwMFx4ZjFceDU1XHgzNFx4MTBceGYxXHgxMCIKKwkiXHgzNVx4ZjBceGYxXHgxMFx4M2FceDAyXHhmMVx4MDMiICJceDNiXHgwNFx4ZjFceDJhXHg5Ylx4NDNceGYxXHgwMCIKKwkiXHhhNFx4MDNceGYxXHhjMFx4YTdceDAyXHhmMVx4ODEiOworCitzdGF0aWMgaW50ICBtaTEzMjBfaW5pdF9hdF9zdGFydHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTEzMjBfY29uZmlndXJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgbWkxMzIwX2luaXRfcHJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgbWkxMzIwX2luaXRfcG9zdF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIG1pMTMyMF9wb3N0X3Vuc2V0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgbWkxMzIwX3NlbnNvcl9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgbWkxMzIwX2NhbWVyYV9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3ZvaWQgbWkxMzIwX2luaXRfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT52Y3VyLmJhY2tsaWdodCAgPSAgMDsKKwlzZC0+dmN1ci5icmlnaHRuZXNzID0gIDA7CisJc2QtPnZjdXIuc2hhcnBuZXNzICA9ICA2OworCXNkLT52Y3VyLmNvbnRyYXN0ICAgPSAxMDsKKwlzZC0+dmN1ci5nYW1tYSAgICAgID0gMjA7CisJc2QtPnZjdXIuaHVlICAgICAgICA9ICAwOworCXNkLT52Y3VyLnNhdHVyYXRpb24gPSAgNjsKKwlzZC0+dmN1ci53aGl0ZWJhbCAgID0gIDA7CisJc2QtPnZjdXIubWlycm9yICAgICA9IDA7CisJc2QtPnZjdXIuZmxpcCAgICAgICA9IDA7CisJc2QtPnZjdXIuQUM1MEh6ICAgICA9IDE7CisKKwlzZC0+dm1heC5iYWNrbGlnaHQgID0gIDI7CisJc2QtPnZtYXguYnJpZ2h0bmVzcyA9ICA4OworCXNkLT52bWF4LnNoYXJwbmVzcyAgPSAgNzsKKwlzZC0+dm1heC5jb250cmFzdCAgID0gIDA7IC8qIDEwIGJ1dCBub3Qgd29ya2luZyB3aXRoIHRpaHMgZHJpdmVyICovCisJc2QtPnZtYXguZ2FtbWEgICAgICA9IDQwOworCXNkLT52bWF4Lmh1ZSAgICAgICAgPSAgNSArIDE7CisJc2QtPnZtYXguc2F0dXJhdGlvbiA9ICA4OworCXNkLT52bWF4LndoaXRlYmFsICAgPSAgMjsKKwlzZC0+dm1heC5taXJyb3IgICAgID0gMTsKKwlzZC0+dm1heC5mbGlwICAgICAgID0gMTsKKwlzZC0+dm1heC5BQzUwSHogICAgID0gMTsKKworCXNkLT5kZXZfY2FtZXJhX3NldHRpbmdzID0gbWkxMzIwX2NhbWVyYV9zZXR0aW5nczsKKwlzZC0+ZGV2X2luaXRfYXRfc3RhcnR1cCA9IG1pMTMyMF9pbml0X2F0X3N0YXJ0dXA7CisJc2QtPmRldl9jb25maWd1cmVfYWx0ICAgPSBtaTEzMjBfY29uZmlndXJlX2FsdDsKKwlzZC0+ZGV2X2luaXRfcHJlX2FsdCAgICA9IG1pMTMyMF9pbml0X3ByZV9hbHQ7CisJc2QtPmRldl9wb3N0X3Vuc2V0X2FsdCAgPSBtaTEzMjBfcG9zdF91bnNldF9hbHQ7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBjb21tb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXMzMiBuOyAvKiByZXNlcnZlZCBmb3IgRkVUQ0ggbWFjcm9zICovCisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAyMiwgczAwMCk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDAwMCwgMCwgTlVMTCk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgMzIsIHMwMDEpOworCW4gPSBmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uLCBBUlJBWV9TSVpFKHRibF9jb21tb24pKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0OCwgczAwMik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNDgsIHMwMDMpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDE2LCBzMDA0KTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0OCwgczAwNSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNDQsIHMwMDYpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1vbiwKKwkJCQkJQVJSQVlfU0laRSh0YmxfY29tbW9uKSwgbik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNTIsIHMwMDcpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDQ4LCBzMDA4KTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0OCwgczAwOSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNTYsIHMwMTApOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1vbiwKKwkJCQkJQVJSQVlfU0laRSh0YmxfY29tbW9uKSwgbik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNDAsIHMwMTEpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1vbiwKKwkJCQkJQVJSQVlfU0laRSh0YmxfY29tbW9uKSwgbik7Cit9CisKK3N0YXRpYyBpbnQgbWkxMzIwX2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfYXRfc3RhcnR1cCwKKwkJCQlBUlJBWV9TSVpFKHRibF9pbml0X2F0X3N0YXJ0dXApKTsKKworCWNvbW1vbihnc3BjYV9kZXYpOworCisvKgljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDExLCAweDAwMDAsIDB4MDAwMCwgMCwgTlVMTCk7ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaTEzMjBfaW5pdF9wcmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+bWlycm9yTWFzayA9IDA7CisKKwlzZC0+dm9sZC5iYWNrbGlnaHQgID0gLTE7CisJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IC0xOworCXNkLT52b2xkLnNoYXJwbmVzcyAgPSAtMTsKKwlzZC0+dm9sZC5jb250cmFzdCAgID0gLTE7CisJc2QtPnZvbGQuc2F0dXJhdGlvbiA9IC0xOworCXNkLT52b2xkLmdhbW1hICAgID0gLTE7CisJc2QtPnZvbGQuaHVlICAgICAgPSAtMTsKKwlzZC0+dm9sZC53aGl0ZWJhbCA9IC0xOworCXNkLT52b2xkLm1pcnJvciAgID0gLTE7CisJc2QtPnZvbGQuZmxpcCAgICAgPSAtMTsKKwlzZC0+dm9sZC5BQzUwSHogICA9IC0xOworCisJY29tbW9uKGdzcGNhX2Rldik7CisKKwltaTEzMjBfc2Vuc29yX3NldHRpbmdzKGdzcGNhX2Rldik7CisKKwltaTEzMjBfaW5pdF9wb3N0X2FsdChnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWkxMzIwX2luaXRfcG9zdF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCW1pMTMyMF9jYW1lcmFfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pMTMyMF9zZW5zb3Jfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXMzMiByZXNvID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKHMzMikgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMSwgMHgwMDAwLCAwLCBOVUxMKTsKKworCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uLAorCQkJCUFSUkFZX1NJWkUodGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb24pKTsKKworCXN3aXRjaCAocmVzbykgeworCWNhc2UgSU1BR0VfMTI4MDoKKwkJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc18xMjgwLAorCQkJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfMTI4MCkpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA2NCwgdGJsXzEyODBbMF0pOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0MCwgdGJsXzEyODBbMV0pOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAxMiwgdGJsXzEyODBbMl0pOworCQlicmVhazsKKworCWNhc2UgSU1BR0VfODAwOgorCQlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0Ymxfc2Vuc29yX3NldHRpbmdzXzgwMCwKKwkJCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzXzgwMCkpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA2NCwgdGJsXzgwMFswXSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDQwLCB0YmxfODAwWzFdKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwgMTIsIHRibF84MDBbMl0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfNjQwLAorCQkJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfNjQwKSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDYwLCB0YmxfNjQwWzBdKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNDAsIHRibF82NDBbMV0pOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAxMiwgdGJsXzY0MFsyXSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaTEzMjBfY29uZmlndXJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKworCXN3aXRjaCAocmVzbykgeworCWNhc2UgSU1BR0VfNjQwOgorCQlnc3BjYV9kZXYtPmFsdCA9IDMgKyAxOworCQlicmVhazsKKworCWNhc2UgSU1BR0VfODAwOgorCWNhc2UgSU1BR0VfMTI4MDoKKwkJZ3NwY2FfZGV2LT5hbHQgPSAxICsgMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgbWkxMzIwX2NhbWVyYV9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJczMyIGJhY2tsaWdodCA9IHNkLT52Y3VyLmJhY2tsaWdodDsKKwlzMzIgYnJpZ2h0ID0gc2QtPnZjdXIuYnJpZ2h0bmVzczsKKwlzMzIgc2hhcnAgID0gc2QtPnZjdXIuc2hhcnBuZXNzOworCXMzMiBjbnRyICAgPSBzZC0+dmN1ci5jb250cmFzdDsKKwlzMzIgZ2FtCSAgID0gc2QtPnZjdXIuZ2FtbWE7CisJczMyIGh1ZSAgICA9IHNkLT52Y3VyLmh1ZTsKKwlzMzIgc2F0CSAgID0gc2QtPnZjdXIuc2F0dXJhdGlvbjsKKwlzMzIgd2JhbCAgID0gc2QtPnZjdXIud2hpdGViYWw7CisJczMyIG1pcnJvciA9ICgoKHNkLT52Y3VyLm1pcnJvciA+IDApIF4gc2QtPm1pcnJvck1hc2spID4gMCk7CisJczMyIGZsaXAgICA9ICgoKHNkLT52Y3VyLmZsaXAgICA+IDApIF4gc2QtPm1pcnJvck1hc2spID4gMCk7CisJczMyIGZyZXEgICA9IChzZC0+dmN1ci5BQzUwSHogPiAwKTsKKwlzMzIgaTsKKworCWlmIChmcmVxICE9IHNkLT52b2xkLkFDNTBIeikgeworCQlzZC0+dm9sZC5BQzUwSHogPSBmcmVxOworCisJCWZyZXEgPSAyICogKGZyZXEgPT0gMCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMiwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgICAgICAgLCAweDAwNWIsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSArIGZyZXEsIDB4MDBmMSwgMCwgTlVMTCk7CisJfQorCisJaWYgKHdiYWwgIT0gc2QtPnZvbGQud2hpdGViYWwpIHsKKwkJc2QtPnZvbGQud2hpdGViYWwgPSB3YmFsOworCQlpZiAod2JhbCA8IDAgfHwgd2JhbCA+IHNkLT52bWF4LndoaXRlYmFsKQorCQkJd2JhbCA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJaWYgKHdiYWwgPT0gMCkgeyAvKiBOb3JtYWwgbGlnaHQgKi8KKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsCisJCQkJCQkweDAwMTAsIDB4MDAxMCwgMCwgTlVMTCk7CisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLAorCQkJCQkJMHgwMDAzLCAweDAwYzEsIDAsIE5VTEwpOworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwKKwkJCQkJCTB4MDA0MiwgMHgwMGMyLCAwLCBOVUxMKTsKKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsCisJCQkJCQkweGJhMDAsIDB4MDIwMCwgNDgsIGRhdF93YmFsTkwpOworCQkJfQorCisJCQlpZiAod2JhbCA9PSAxKSB7IC8qIExvdyBsaWdodCAqLworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwKKwkJCQkJCTB4MDAxMCwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsCisJCQkJCQkweDAwMDQsIDB4MDBjMSwgMCwgTlVMTCk7CisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLAorCQkJCQkJMHgwMDQzLCAweDAwYzIsIDAsIE5VTEwpOworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywKKwkJCQkJCTB4YmEwMCwgMHgwMjAwLCA0OCwgZGF0X3diYWxMTCk7CisJCQl9CisKKwkJCWlmICh3YmFsID09IDIpIHsgLyogQmFjayBsaWdodCAqLworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwKKwkJCQkJCTB4MDAxMCwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsCisJCQkJCQkweDAwMDMsIDB4MDBjMSwgMCwgTlVMTCk7CisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLAorCQkJCQkJMHgwMDQyLCAweDAwYzIsIDAsIE5VTEwpOworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywKKwkJCQkJCTB4YmEwMCwgMHgwMjAwLCA0NCwgZGF0X3diYWxCTCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYnJpZ2h0ICE9IHNkLT52b2xkLmJyaWdodG5lc3MpIHsKKwkJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IGJyaWdodDsKKwkJaWYgKGJyaWdodCA8IDAgfHwgYnJpZ2h0ID4gc2QtPnZtYXguYnJpZ2h0bmVzcykKKwkJCWJyaWdodCA9IDA7CisKKwkJYnJpZ2h0ID0gdGJsX2JyaWdodFticmlnaHRdOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCwgMHgwMGYwLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDEsIDB4MDBmMSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICsgYnJpZ2h0LCAweDAwMzQsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCArIGJyaWdodCwgMHgwMGYxLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoc2F0ICE9IHNkLT52b2xkLnNhdHVyYXRpb24pIHsKKwkJc2QtPnZvbGQuc2F0dXJhdGlvbiA9IHNhdDsKKwkJaWYgKHNhdCA8IDAgfHwgc2F0ID4gc2QtPnZtYXguc2F0dXJhdGlvbikKKwkJCXNhdCA9IDA7CisKKwkJc2F0ID0gdGJsX3NhdFtzYXRdOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCwgMHgwMGYwLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDEsIDB4MDBmMSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICAgICAgLCAweDAwMjUsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCArIHNhdCwgMHgwMGYxLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoc2hhcnAgIT0gc2QtPnZvbGQuc2hhcnBuZXNzKSB7CisJCXNkLT52b2xkLnNoYXJwbmVzcyA9IHNoYXJwOworCQlpZiAoc2hhcnAgPCAwIHx8IHNoYXJwID4gc2QtPnZtYXguc2hhcnBuZXNzKQorCQkJc2hhcnAgPSAwOworCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgICAgICAgICwgMHgwMDA1LCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgKyBzaGFycCwgMHgwMGYxLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoaHVlICE9IHNkLT52b2xkLmh1ZSkgeworCQkvKiAwPW5vcm1hbCAgMT1OQiAgMj0ic2VwaWEiICAzPW5lZ2F0aXZlICA0PW90aGVyICA1PW90aGVyMiAqLworCQlpZiAoaHVlIDwgMCB8fCBodWUgPiBzZC0+dm1heC5odWUpCisJCQlodWUgPSAwOworCQlpZiAoaHVlID09IHNkLT52bWF4Lmh1ZSkKKwkJCXNkLT5zd2FwUkIgPSAxOworCQllbHNlCisJCQlzZC0+c3dhcFJCID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCwgMHgwMGYwLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDEsIDB4MDBmMSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTcwLCAweDAwZTIsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCArIGh1ZSAqIChodWUgPCA2KSwgMHgwMGYxLAorCQkJCQkJCTAsIE5VTEwpOworCX0KKworCWlmIChiYWNrbGlnaHQgIT0gc2QtPnZvbGQuYmFja2xpZ2h0KSB7CisJCXNkLT52b2xkLmJhY2tsaWdodCA9IGJhY2tsaWdodDsKKwkJaWYgKGJhY2tsaWdodCA8IDAgfHwgYmFja2xpZ2h0ID4gc2QtPnZtYXguYmFja2xpZ2h0KQorCQkJYmFja2xpZ2h0ID0gMDsKKworCQliYWNrbGlnaHQgPSB0YmxfYmFja2xpZ2h0W2JhY2tsaWdodF07CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDEsIDB4MDBmMSwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmE3NCwgMHgwMDA2LCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTgwICsgYmFja2xpZ2h0LCAweDAwZjEsCisJCQkJCQkJCTAsIE5VTEwpOworCQl9CisJfQorCisJaWYgKGh1ZSAhPSBzZC0+dm9sZC5odWUpIHsKKwkJc2QtPnZvbGQuaHVlID0gaHVlOworCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhNzAsIDB4MDBlMiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICsgaHVlICogKGh1ZSA8IDYpLCAweDAwZjEsCisJCQkJCQkJMCwgTlVMTCk7CisJfQorCisJaWYgKG1pcnJvciAhPSBzZC0+dm9sZC5taXJyb3IgfHwgZmxpcCAhPSBzZC0+dm9sZC5mbGlwKSB7CisJCXU4IGRhdF9odmZsaXAyWzRdID0gezB4MjAsIDB4MDEsIDB4ZjEsIDB4MDB9OworCQlzZC0+dm9sZC5taXJyb3IgPSBtaXJyb3I7CisJCXNkLT52b2xkLmZsaXAgPSBmbGlwOworCisJCWRhdF9odmZsaXAyWzNdID0gZmxpcCArIDIgKiBtaXJyb3I7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDQsIGRhdF9odmZsaXAxKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNCwgZGF0X2h2ZmxpcDIpOworCX0KKworCWlmIChnYW0gIT0gc2QtPnZvbGQuZ2FtbWEpIHsKKwkJc2QtPnZvbGQuZ2FtbWEgPSBnYW07CisJCWlmIChnYW0gPCAwIHx8IGdhbSA+IHNkLT52bWF4LmdhbW1hKQorCQkJZ2FtID0gMDsKKworCQlnYW0gPSAyICogZ2FtOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCwgMHgwMGYwLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDEsIDB4MDBmMSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTA0ICAgICAgLCAweDAwM2IsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMiArIGdhbSwgMHgwMGYxLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoY250ciAhPSBzZC0+dm9sZC5jb250cmFzdCkgeworCQlzZC0+dm9sZC5jb250cmFzdCA9IGNudHI7CisJCWlmIChjbnRyIDwgMCB8fCBjbnRyID4gc2QtPnZtYXguY29udHJhc3QpCisJCQljbnRyID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCwgMHgwMGYwLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDEsIDB4MDBmMSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICsgdGJsX2NudHIxW2NudHJdLCAweDAwMzUsCisJCQkJCQkJMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICsgdGJsX2NudHIyW2NudHJdLCAweDAwZjEsCisJCQkJCQkJMCwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pMTMyMF9wb3N0X3Vuc2V0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCA1LCAweDAwMDAsIDB4MDAwMCwgMCwgTlVMTCk7CisKKwlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfcG9zdF91bnNldF9hbHQsCisJCQkJQVJSQVlfU0laRSh0YmxfcG9zdF91bnNldF9hbHQpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkyMDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMjAyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYjA5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMjAyMC5jCkBAIC0wLDAgKzEsOTM3IEBACisvKiBAZmlsZSBnbDg2MC1taTIwMjAuYworICogQGF1dGhvciBPbGl2aWVyIExPUklOLCBmcm9tIEljZS9Tb3JvMjAwNSdzIGxvZ3MoQSksIEZyZXRfc2F3L0h1bGtpZSdzCisgKiBsb2dzKEIpIGFuZCBUcmljaWQicyBsb2dzKEMpLiBXaXRoIHRoZSBoZWxwIG9mIEt5dHJpeC9CVUdhYnVuZG8vQmxhemVyY2lzdC4KKyAqIEBkYXRlIDIwMDktMDgtMjcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qIFNlbnNvciA6IE1JMjAyMCAqLworCisjaW5jbHVkZSAiZ2w4NjAuaCIKKworc3RhdGljIHU4IGRhdF9icmlnaHQxW10gPSB7MHg4YywgMHhhMiwgMHgwNn07CitzdGF0aWMgdTggZGF0X2JyaWdodDNbXSA9IHsweDhjLCAweGExLCAweDAyfTsKK3N0YXRpYyB1OCBkYXRfYnJpZ2h0NFtdID0gezB4OTAsIDB4MDAsIDB4MGZ9Oworc3RhdGljIHU4IGRhdF9icmlnaHQ1W10gPSB7MHg4YywgMHhhMSwgMHgwM307CitzdGF0aWMgdTggZGF0X2JyaWdodDZbXSA9IHsweDkwLCAweDAwLCAweDA1fTsKKworc3RhdGljIHU4IGRhdF9kdW1teTFbXSA9IHsweDkwLCAweDAwLCAweDA2fTsKKy8qc3RhdGljIHU4IGR1bW15MltdID0gezB4OGMsIDB4YTEsIDB4MDJ9OyovCisvKnN0YXRpYyB1OCBkdW1teTNbXSA9IHsweDkwLCAweDAwLCAweDFmfTsqLworCitzdGF0aWMgdTggZGF0X2h2ZmxpcDFbXSA9IHsweDhjLCAweDI3LCAweDE5fTsKK3N0YXRpYyB1OCBkYXRfaHZmbGlwM1tdID0gezB4OGMsIDB4MjcsIDB4M2J9Oworc3RhdGljIHU4IGRhdF9odmZsaXA1W10gPSB7MHg4YywgMHhhMSwgMHgwM307CitzdGF0aWMgdTggZGF0X2h2ZmxpcDZbXSA9IHsweDkwLCAweDAwLCAweDA2fTsKKworc3RhdGljIHU4IGRhdF9mcmVxMVtdID0geyAweDhjLCAweGE0LCAweDA0IH07CisKK3N0YXRpYyB1OCBkYXRfbXVsdGk1W10gPSB7IDB4OGMsIDB4YTEsIDB4MDMgfTsKK3N0YXRpYyB1OCBkYXRfbXVsdGk2W10gPSB7IDB4OTAsIDB4MDAsIDB4MDUgfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX2NvbW1vbl9hW10gPSB7CisJezB4MDAwMCwgMHgwMDAwfSwKKwl7MSwgMHhmZmZmfSwgLyogbXNsZWVwKDM1KTsgKi8KKwl7MHgwMDZhLCAweDAwMDd9LCB7MHgwMDYzLCAweDAwMDZ9LCB7MHgwMDZhLCAweDAwMGR9LCB7MHgwMDAwLCAweDAwYzB9LAorCXsweDAwMTAsIDB4MDAxMH0sIHsweDAwMDMsIDB4MDBjMX0sIHsweDAwNDIsIDB4MDBjMn0sIHsweDAwMDQsIDB4MDBkOH0sCisJezB4MDAwMCwgMHgwMDU4fSwgezB4MDAwMiwgMHgwMDA0fSwgezB4MDA0MSwgMHgwMDAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9jb21tb25fYltdID0geworCXsweDAwNmEsIDB4MDAwN30sCisJezM1LCAweGZmZmZ9LAorCXsweDAwZWYsIDB4MDAwNn0sCisJezM1LCAweGZmZmZ9LAorCXsweDAwNmEsIDB4MDAwZH0sCisJezM1LCAweGZmZmZ9LAorCXsweDAwMDAsIDB4MDBjMH0sIHsweDAwMTAsIDB4MDAxMH0sIHsweDAwMDMsIDB4MDBjMX0sIHsweDAwNDIsIDB4MDBjMn0sCisJezB4MDAwNCwgMHgwMGQ4fSwgezB4MDAwMCwgMHgwMDU4fSwgezB4MDA0MSwgMHgwMDAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfY29tbW9uX2NbXSA9IHsKKwl7MHgzMiwgIlx4MDJceDAwXHgwOCJ9LCB7MHgzMywgIlx4ZjRceDAzXHgxZCJ9LAorCXs2LCAiXHhmZlx4ZmZceGZmIn0sIC8qIDEyICovCisJezB4MzQsICJceDFlXHg4Zlx4MDkifSwgezB4MzQsICJceDFjXHgwMVx4MjgifSwgezB4MzQsICJceDFlXHg4Zlx4MDkifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LCAvKiAtICovCisJezB4MzQsICJceDFlXHg4Zlx4MDkifSwgezB4MzIsICJceDE0XHgwNlx4ZTYifSwgezB4MzMsICJceDhjXHgyMlx4MjMifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceGEyXHgwZiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwZCJ9LAorCXsweDMzLCAiXHg4Y1x4YTJceDEwIn0sIHsweDMzLCAiXHg5MFx4MDBceDBiIn0sIHsweDMzLCAiXHg4Y1x4YTJceDExIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDcifSwgezB4MzMsICJceGY0XHgwM1x4MWQifSwgezB4MzUsICJceGEyXHgwMFx4ZTIifSwKKwl7MHgzMywgIlx4OGNceGFiXHgwNSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMSJ9LCB7MHgzMiwgIlx4NmVceDAwXHg4NiJ9LAorCXsweDMyLCAiXHg3MFx4MGZceGFhIn0sIHsweDMyLCAiXHg3Mlx4MGZceGU0In0sIHsweDMzLCAiXHg4Y1x4YTNceDRhIn0sCisJezB4MzMsICJceDkwXHgwMFx4NWEifSwgezB4MzMsICJceDhjXHhhM1x4NGIifSwgezB4MzMsICJceDkwXHgwMFx4YTYifSwKKwl7MHgzMywgIlx4OGNceGEzXHg2MSJ9LCB7MHgzMywgIlx4OTBceDAwXHhjOCJ9LCB7MHgzMywgIlx4OGNceGEzXHg2MiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceGUxIn0sIHsweDM0LCAiXHhjZVx4MDFceGE4In0sIHsweDM0LCAiXHhkMFx4NjZceDMzIn0sCisJezB4MzQsICJceGQyXHgzMVx4OWEifSwgezB4MzQsICJceGQ0XHg5NFx4NjMifSwgezB4MzQsICJceGQ2XHg0Ylx4MjUifSwKKwl7MHgzNCwgIlx4ZDhceDI2XHg3MCJ9LCB7MHgzNCwgIlx4ZGFceDcyXHg0YyJ9LCB7MHgzNCwgIlx4ZGNceGZmXHgwNCJ9LAorCXsweDM0LCAiXHhkZVx4MDFceDViIn0sIHsweDM0LCAiXHhlNlx4MDFceDEzIn0sIHsweDM0LCAiXHhlZVx4MGJceGYwIn0sCisJezB4MzQsICJceGY2XHgwYlx4YTQifSwgezB4MzUsICJceDAwXHhmNlx4ZTcifSwgezB4MzUsICJceDA4XHgwZFx4ZmQifSwKKwl7MHgzNSwgIlx4MTBceDI1XHg2MyJ9LCB7MHgzNSwgIlx4MThceDM1XHg2YyJ9LCB7MHgzNSwgIlx4MjBceDQyXHg3ZSJ9LAorCXsweDM1LCAiXHgyOFx4MTlceDQ0In0sIHsweDM1LCAiXHgzMFx4MzlceGQ0In0sIHsweDM1LCAiXHgzOFx4ZjVceGE4In0sCisJezB4MzUsICJceDRjXHgwN1x4OTAifSwgezB4MzUsICJceDQ0XHgwN1x4YjgifSwgezB4MzUsICJceDVjXHgwNlx4ODgifSwKKwl7MHgzNSwgIlx4NTRceDA3XHhmZiJ9LCB7MHgzNCwgIlx4ZTBceDAxXHg1MiJ9LCB7MHgzNCwgIlx4ZThceDAwXHhjYyJ9LAorCXsweDM0LCAiXHhmMFx4MGRceDgzIn0sIHsweDM0LCAiXHhmOFx4MGNceGIzIn0sIHsweDM1LCAiXHgwMlx4ZmVceGJhIn0sCisJezB4MzUsICJceDBhXHgwNFx4ZTAifSwgezB4MzUsICJceDEyXHgxY1x4NjMifSwgezB4MzUsICJceDFhXHgyYlx4NWEifSwKKwl7MHgzNSwgIlx4MjJceDMyXHg1ZSJ9LCB7MHgzNSwgIlx4MmFceDBkXHgyOCJ9LCB7MHgzNSwgIlx4MzJceDJjXHgwMiJ9LAorCXsweDM1LCAiXHgzYVx4ZjRceGZhIn0sIHsweDM1LCAiXHg0ZVx4MDdceGVmIn0sIHsweDM1LCAiXHg0Nlx4MDdceDg4In0sCisJezB4MzUsICJceDVlXHgwN1x4YzEifSwgezB4MzUsICJceDU2XHgwNFx4NjQifSwgezB4MzQsICJceGU0XHgwMVx4MTUifSwKKwl7MHgzNCwgIlx4ZWNceDAwXHg4MiJ9LCB7MHgzNCwgIlx4ZjRceDBjXHhjZSJ9LCB7MHgzNCwgIlx4ZmNceDBjXHhiYSJ9LAorCXsweDM1LCAiXHgwNlx4MWZceDAyIn0sIHsweDM1LCAiXHgwZVx4MDJceGUzIn0sIHsweDM1LCAiXHgxNlx4MWFceDUwIn0sCisJezB4MzUsICJceDFlXHgyNFx4MzkifSwgezB4MzUsICJceDI2XHgyM1x4NGMifSwgezB4MzUsICJceDJlXHhmOVx4MWIifSwKKwl7MHgzNSwgIlx4MzZceDIzXHgxOSJ9LCB7MHgzNSwgIlx4M2VceDEyXHgwOCJ9LCB7MHgzNSwgIlx4NTJceDA3XHgyMiJ9LAorCXsweDM1LCAiXHg0YVx4MDNceGQzIn0sIHsweDM1LCAiXHg2Mlx4MDZceDU0In0sIHsweDM1LCAiXHg1YVx4MDRceDVkIn0sCisJezB4MzQsICJceGUyXHgwMVx4MDQifSwgezB4MzQsICJceGVhXHgwMFx4YTAifSwgezB4MzQsICJceGYyXHgwY1x4YmMifSwKKwl7MHgzNCwgIlx4ZmFceDBjXHg1YiJ9LCB7MHgzNSwgIlx4MDRceDE3XHhmMiJ9LCB7MHgzNSwgIlx4MGNceDAyXHgwOCJ9LAorCXsweDM1LCAiXHgxNFx4MjhceDQzIn0sIHsweDM1LCAiXHgxY1x4MjhceDYyIn0sIHsweDM1LCAiXHgyNFx4MmJceDYwIn0sCisJezB4MzUsICJceDJjXHgwN1x4MzMifSwgezB4MzUsICJceDM0XHgxZlx4YjAifSwgezB4MzUsICJceDNjXHhlZFx4Y2QifSwKKwl7MHgzNSwgIlx4NTBceDAwXHgwNiJ9LCB7MHgzNSwgIlx4NDhceDA3XHhmZiJ9LCB7MHgzNSwgIlx4NjBceDA1XHg4OSJ9LAorCXsweDM1LCAiXHg1OFx4MDdceGZmIn0sIHsweDM1LCAiXHg0MFx4MDBceGEwIn0sIHsweDM1LCAiXHg0Mlx4MDBceDAwIn0sCisJezB4MzIsICJceDEwXHgwMVx4ZmMifSwgezB4MzMsICJceDhjXHhhMVx4MTgifSwgezB4MzMsICJceDkwXHgwMFx4M2MifSwKKwl7MSwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg3OFx4MDBceDAwIn0sCisJezEsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzNSwgIlx4YjhceDFmXHgyMCJ9LCB7MHgzMywgIlx4OGNceGEyXHgwNiJ9LCB7MHgzMywgIlx4OTBceDAwXHgxMCJ9LAorCXsweDMzLCAiXHg4Y1x4YTJceDA3In0sIHsweDMzLCAiXHg5MFx4MDBceDA4In0sIHsweDMzLCAiXHg4Y1x4YTJceDQyIn0sCisJezB4MzMsICJceDkwXHgwMFx4MGIifSwgezB4MzMsICJceDhjXHhhMlx4NGEifSwgezB4MzMsICJceDkwXHgwMFx4OGMifSwKKwl7MHgzNSwgIlx4YmFceGZhXHgwOCJ9LCB7MHgzMywgIlx4OGNceGEyXHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgyMiJ9LAorCXsweDMzLCAiXHg4Y1x4YTJceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceGJiIn0sCit9OworCitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2NvbW1vbl9kW10gPSB7CisJezB4MzMsICJceDhjXHgyMlx4MmUifSwgezB4MzMsICJceDkwXHgwMFx4YTAifSwgezB4MzMsICJceDhjXHhhNFx4MDgifSwKKwl7MHgzMywgIlx4OTBceDAwXHgxZiJ9LCB7MHgzMywgIlx4OGNceGE0XHgwOSJ9LCB7MHgzMywgIlx4OTBceDAwXHgyMSJ9LAorCXsweDMzLCAiXHg4Y1x4YTRceDBhIn0sIHsweDMzLCAiXHg5MFx4MDBceDI1In0sIHsweDMzLCAiXHg4Y1x4YTRceDBiIn0sCisJezB4MzMsICJceDkwXHgwMFx4MjcifSwgezB4MzMsICJceDhjXHgyNFx4MTEifSwgezB4MzMsICJceDkwXHgwMFx4YTAifSwKKwl7MHgzMywgIlx4OGNceDI0XHgxMyJ9LCB7MHgzMywgIlx4OTBceDAwXHhjMCJ9LCB7MHgzMywgIlx4OGNceDI0XHgxNSJ9LAorCXsweDMzLCAiXHg5MFx4MDBceGEwIn0sIHsweDMzLCAiXHg4Y1x4MjRceDE3In0sIHsweDMzLCAiXHg5MFx4MDBceGMwIn0sCit9OworCitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2NvbW1vbl9lW10gPSB7CisJezB4MzMsICJceDhjXHhhNFx4MDQifSwgezB4MzMsICJceDkwXHgwMFx4ODAifSwgezB4MzMsICJceDhjXHhhN1x4OWQifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceGE3XHg5ZSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LAorCXsweDMzLCAiXHg4Y1x4YTJceDBjIn0sIHsweDMzLCAiXHg5MFx4MDBceDE3In0sIHsweDMzLCAiXHg4Y1x4YTJceDE1In0sCisJezB4MzMsICJceDkwXHgwMFx4MDQifSwgezB4MzMsICJceDhjXHhhMlx4MTQifSwgezB4MzMsICJceDkwXHgwMFx4MjAifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgxNyJ9LAorCS8qIG1zbGVlcCg1Myk7ICovCisJezB4MzMsICJceDkwXHgyMVx4MTEifSwgezB4MzMsICJceDhjXHgyN1x4MWIifSwgezB4MzMsICJceDkwXHgwMlx4NGYifSwKKwl7MHgzMywgIlx4OGNceDI3XHgyNSJ9LCB7MHgzMywgIlx4OTBceDA2XHgwZiJ9LCB7MHgzMywgIlx4OGNceDI3XHgzOSJ9LAorCXsweDMzLCAiXHg5MFx4MjFceDExIn0sIHsweDMzLCAiXHg4Y1x4MjdceDNkIn0sIHsweDMzLCAiXHg5MFx4MDFceDIwIn0sCisJezB4MzMsICJceDhjXHgyN1x4NDcifSwgezB4MzMsICJceDkwXHgwOVx4NGMifSwgezB4MzMsICJceDhjXHgyN1x4MDMifSwKKwl7MHgzMywgIlx4OTBceDAyXHg4NCJ9LCB7MHgzMywgIlx4OGNceDI3XHgwNSJ9LCB7MHgzMywgIlx4OTBceDAxXHhlMiJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDA3In0sIHsweDMzLCAiXHg5MFx4MDZceDQwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDA5In0sCisJezB4MzMsICJceDkwXHgwNFx4YjAifSwgezB4MzMsICJceDhjXHgyN1x4MGQifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwKKwl7MHgzMywgIlx4OGNceDI3XHgwZiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgxMSJ9LAorCXsweDMzLCAiXHg5MFx4MDRceGJkIn0sIHsweDMzLCAiXHg4Y1x4MjdceDEzIn0sIHsweDMzLCAiXHg5MFx4MDZceDRkIn0sCisJezB4MzMsICJceDhjXHgyN1x4MTUifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4MTcifSwKKwl7MHgzMywgIlx4OTBceDIxXHgxMSJ9LCB7MHgzMywgIlx4OGNceDI3XHgxOSJ9LCB7MHgzMywgIlx4OTBceDA0XHg2YyJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDFiIn0sIHsweDMzLCAiXHg5MFx4MDJceDRmIn0sIHsweDMzLCAiXHg4Y1x4MjdceDFkIn0sCisJezB4MzMsICJceDkwXHgwMVx4MDIifSwgezB4MzMsICJceDhjXHgyN1x4MWYifSwgezB4MzMsICJceDkwXHgwMlx4NzkifSwKKwl7MHgzMywgIlx4OGNceDI3XHgyMSJ9LCB7MHgzMywgIlx4OTBceDAxXHg1NSJ9LCB7MHgzMywgIlx4OGNceDI3XHgyMyJ9LAorCXsweDMzLCAiXHg5MFx4MDJceDg1In0sIHsweDMzLCAiXHg4Y1x4MjdceDI1In0sIHsweDMzLCAiXHg5MFx4MDZceDBmIn0sCisJezB4MzMsICJceDhjXHgyN1x4MjcifSwgezB4MzMsICJceDkwXHgyMFx4MjAifSwgezB4MzMsICJceDhjXHgyN1x4MjkifSwKKwl7MHgzMywgIlx4OTBceDIwXHgyMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgyYiJ9LCB7MHgzMywgIlx4OTBceDEwXHgyMCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDJkIn0sIHsweDMzLCAiXHg5MFx4MjBceDA3In0sIHsweDMzLCAiXHg4Y1x4MjdceDJmIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDQifSwgezB4MzMsICJceDhjXHgyN1x4MzEifSwgezB4MzMsICJceDkwXHgwMFx4MDQifSwKKwl7MHgzMywgIlx4OGNceDI3XHgzMyJ9LCB7MHgzMywgIlx4OTBceDA0XHhiYiJ9LCB7MHgzMywgIlx4OGNceDI3XHgzNSJ9LAorCXsweDMzLCAiXHg5MFx4MDZceDRiIn0sIHsweDMzLCAiXHg4Y1x4MjdceDM3In0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sCisJezB4MzMsICJceDhjXHgyN1x4MzkifSwgezB4MzMsICJceDkwXHgyMVx4MTEifSwgezB4MzMsICJceDhjXHgyN1x4M2IifSwKKwl7MHgzMywgIlx4OTBceDAwXHgyNCJ9LCB7MHgzMywgIlx4OGNceDI3XHgzZCJ9LCB7MHgzMywgIlx4OTBceDAxXHgyMCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDQxIn0sIHsweDMzLCAiXHg5MFx4MDFceDY5In0sIHsweDMzLCAiXHg4Y1x4MjdceDQ1In0sCisJezB4MzMsICJceDkwXHgwNFx4ZWQifSwgezB4MzMsICJceDhjXHgyN1x4NDcifSwgezB4MzMsICJceDkwXHgwOVx4NGMifSwKKwl7MHgzMywgIlx4OGNceDI3XHg1MSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHg1MyJ9LAorCXsweDMzLCAiXHg5MFx4MDNceDIwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDU1In0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sCisJezB4MzMsICJceDhjXHgyN1x4NTcifSwgezB4MzMsICJceDkwXHgwMlx4NTgifSwgezB4MzMsICJceDhjXHgyN1x4NWYifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHg2MSJ9LCB7MHgzMywgIlx4OTBceDA2XHg0MCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDYzIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDY1In0sCisJezB4MzMsICJceDkwXHgwNFx4YjAifSwgezB4MzMsICJceDhjXHgyMlx4MmUifSwgezB4MzMsICJceDkwXHgwMFx4YTEifSwKKwl7MHgzMywgIlx4OGNceGE0XHgwOCJ9LCB7MHgzMywgIlx4OTBceDAwXHgxZiJ9LCB7MHgzMywgIlx4OGNceGE0XHgwOSJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDIxIn0sIHsweDMzLCAiXHg4Y1x4YTRceDBhIn0sIHsweDMzLCAiXHg5MFx4MDBceDI1In0sCisJezB4MzMsICJceDhjXHhhNFx4MGIifSwgezB4MzMsICJceDkwXHgwMFx4MjcifSwgezB4MzMsICJceDhjXHgyNFx4MTEifSwKKwl7MHgzMywgIlx4OTBceDAwXHhhMSJ9LCB7MHgzMywgIlx4OGNceDI0XHgxMyJ9LCB7MHgzMywgIlx4OTBceDAwXHhjMSJ9LAorCXsweDMzLCAiXHg4Y1x4MjRceDE1In0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfaW5pdF9hdF9zdGFydHVwW10gPSB7CisJezB4MDAwMCwgMHgwMDAwfSwKKwl7NTMsIDB4ZmZmZn0sCisJezB4MDAxMCwgMHgwMDEwfSwKKwl7NTMsIDB4ZmZmZn0sCisJezB4MDAwOCwgMHgwMGMwfSwKKwl7NTMsIDB4ZmZmZn0sCisJezB4MDAwMSwgMHgwMGMxfSwKKwl7NTMsIDB4ZmZmZn0sCisJezB4MDAwMSwgMHgwMGMyfSwKKwl7NTMsIDB4ZmZmZn0sCisJezB4MDAyMCwgMHgwMDA2fSwKKwl7NTMsIDB4ZmZmZn0sCisJezB4MDA2YSwgMHgwMDBkfSwKKwl7NTMsIDB4ZmZmZn0sCit9OworCitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2luaXRfcG9zdF9hbHRfbG93X2FbXSA9IHsKKwl7MHgzMywgIlx4OGNceDI3XHgxNSJ9LCB7MHgzMywgIlx4OTBceDAwXHgyNSJ9LCB7MHgzMywgIlx4OGNceDIyXHgyZSJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDgxIn0sIHsweDMzLCAiXHg4Y1x4YTRceDA4In0sIHsweDMzLCAiXHg5MFx4MDBceDE3In0sCisJezB4MzMsICJceDhjXHhhNFx4MDkifSwgezB4MzMsICJceDkwXHgwMFx4MWEifSwgezB4MzMsICJceDhjXHhhNFx4MGEifSwKKwl7MHgzMywgIlx4OTBceDAwXHgxZCJ9LCB7MHgzMywgIlx4OGNceGE0XHgwYiJ9LCB7MHgzMywgIlx4OTBceDAwXHgyMCJ9LAorCXsweDMzLCAiXHg4Y1x4MjRceDExIn0sIHsweDMzLCAiXHg5MFx4MDBceDgxIn0sIHsweDMzLCAiXHg4Y1x4MjRceDEzIn0sCisJezB4MzMsICJceDkwXHgwMFx4OWIifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfYltdID0geworCXsweDMzLCAiXHg4Y1x4MjdceDAzIn0sIHsweDMzLCAiXHg5MFx4MDNceDI0In0sIHsweDMzLCAiXHg4Y1x4MjdceDA1In0sCisJezB4MzMsICJceDkwXHgwMlx4NTgifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDUifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfY1tdID0geworCXsweDM0LCAiXHgxZVx4OGZceDA5In0sIHsweDM0LCAiXHgxY1x4MDFceDI4In0sIHsweDM0LCAiXHgxZVx4OGZceDA5In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzNCwgIlx4MWVceDhmXHgwOSJ9LCB7MHgzMiwgIlx4MTRceDA2XHhlNiJ9LCB7MHgzMywgIlx4OGNceGExXHgyMCJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDAxIn0sCisJezB4MzMsICJceDJlXHgwMVx4MDAifSwgezB4MzQsICJceDA0XHgwMFx4MmEifSwgezB4MzMsICJceDhjXHhhN1x4MDIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHg5NSJ9LCB7MHgzMywgIlx4OTBceDAxXHgwMCJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MjAifSwgezB4MzMsICJceDkwXHgwMFx4NzIifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMiJ9LCB7MHgzMywgIlx4OGNceGE3XHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMSJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MjAifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMSJ9LCB7MHgzMywgIlx4OGNceGE3XHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sIC8qIC0gKiAqLworCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA1In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNiJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDUifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezEsICJceGZmXHhmZlx4ZmYifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfZFtdID0geworCXsweDMyLCAiXHgxMFx4MDFceGY4In0sIHsweDM0LCAiXHhjZVx4MDFceGE4In0sIHsweDM0LCAiXHhkMFx4NjZceDMzIn0sCisJezB4MzQsICJceGQyXHgzMVx4OWEifSwgezB4MzQsICJceGQ0XHg5NFx4NjMifSwgezB4MzQsICJceGQ2XHg0Ylx4MjUifSwKKwl7MHgzNCwgIlx4ZDhceDI2XHg3MCJ9LCB7MHgzNCwgIlx4ZGFceDcyXHg0YyJ9LCB7MHgzNCwgIlx4ZGNceGZmXHgwNCJ9LAorCXsweDM0LCAiXHhkZVx4MDFceDViIn0sIHsweDM0LCAiXHhlNlx4MDFceDEzIn0sIHsweDM0LCAiXHhlZVx4MGJceGYwIn0sCisJezB4MzQsICJceGY2XHgwYlx4YTQifSwgezB4MzUsICJceDAwXHhmNlx4ZTcifSwgezB4MzUsICJceDA4XHgwZFx4ZmQifSwKKwl7MHgzNSwgIlx4MTBceDI1XHg2MyJ9LCB7MHgzNSwgIlx4MThceDM1XHg2YyJ9LCB7MHgzNSwgIlx4MjBceDQyXHg3ZSJ9LAorCXsweDM1LCAiXHgyOFx4MTlceDQ0In0sIHsweDM1LCAiXHgzMFx4MzlceGQ0In0sIHsweDM1LCAiXHgzOFx4ZjVceGE4In0sCisJezB4MzUsICJceDRjXHgwN1x4OTAifSwgezB4MzUsICJceDQ0XHgwN1x4YjgifSwgezB4MzUsICJceDVjXHgwNlx4ODgifSwKKwl7MHgzNSwgIlx4NTRceDA3XHhmZiJ9LCB7MHgzNCwgIlx4ZTBceDAxXHg1MiJ9LCB7MHgzNCwgIlx4ZThceDAwXHhjYyJ9LAorCXsweDM0LCAiXHhmMFx4MGRceDgzIn0sIHsweDM0LCAiXHhmOFx4MGNceGIzIn0sIHsweDM1LCAiXHgwMlx4ZmVceGJhIn0sCisJezB4MzUsICJceDBhXHgwNFx4ZTAifSwgezB4MzUsICJceDEyXHgxY1x4NjMifSwgezB4MzUsICJceDFhXHgyYlx4NWEifSwKKwl7MHgzNSwgIlx4MjJceDMyXHg1ZSJ9LCB7MHgzNSwgIlx4MmFceDBkXHgyOCJ9LCB7MHgzNSwgIlx4MzJceDJjXHgwMiJ9LAorCXsweDM1LCAiXHgzYVx4ZjRceGZhIn0sIHsweDM1LCAiXHg0ZVx4MDdceGVmIn0sIHsweDM1LCAiXHg0Nlx4MDdceDg4In0sCisJezB4MzUsICJceDVlXHgwN1x4YzEifSwgezB4MzUsICJceDU2XHgwNFx4NjQifSwgezB4MzQsICJceGU0XHgwMVx4MTUifSwKKwl7MHgzNCwgIlx4ZWNceDAwXHg4MiJ9LCB7MHgzNCwgIlx4ZjRceDBjXHhjZSJ9LCB7MHgzNCwgIlx4ZmNceDBjXHhiYSJ9LAorCXsweDM1LCAiXHgwNlx4MWZceDAyIn0sIHsweDM1LCAiXHgwZVx4MDJceGUzIn0sIHsweDM1LCAiXHgxNlx4MWFceDUwIn0sCisJezB4MzUsICJceDFlXHgyNFx4MzkifSwgezB4MzUsICJceDI2XHgyM1x4NGMifSwgezB4MzUsICJceDJlXHhmOVx4MWIifSwKKwl7MHgzNSwgIlx4MzZceDIzXHgxOSJ9LCB7MHgzNSwgIlx4M2VceDEyXHgwOCJ9LCB7MHgzNSwgIlx4NTJceDA3XHgyMiJ9LAorCXsweDM1LCAiXHg0YVx4MDNceGQzIn0sIHsweDM1LCAiXHg2Mlx4MDZceDU0In0sIHsweDM1LCAiXHg1YVx4MDRceDVkIn0sCisJezB4MzQsICJceGUyXHgwMVx4MDQifSwgezB4MzQsICJceGVhXHgwMFx4YTAifSwgezB4MzQsICJceGYyXHgwY1x4YmMifSwKKwl7MHgzNCwgIlx4ZmFceDBjXHg1YiJ9LCB7MHgzNSwgIlx4MDRceDE3XHhmMiJ9LCB7MHgzNSwgIlx4MGNceDAyXHgwOCJ9LAorCXsweDM1LCAiXHgxNFx4MjhceDQzIn0sIHsweDM1LCAiXHgxY1x4MjhceDYyIn0sIHsweDM1LCAiXHgyNFx4MmJceDYwIn0sCisJezB4MzUsICJceDJjXHgwN1x4MzMifSwgezB4MzUsICJceDM0XHgxZlx4YjAifSwgezB4MzUsICJceDNjXHhlZFx4Y2QifSwKKwl7MHgzNSwgIlx4NTBceDAwXHgwNiJ9LCB7MHgzNSwgIlx4NDhceDA3XHhmZiJ9LCB7MHgzNSwgIlx4NjBceDA1XHg4OSJ9LAorCXsweDM1LCAiXHg1OFx4MDdceGZmIn0sIHsweDM1LCAiXHg0MFx4MDBceGEwIn0sIHsweDM1LCAiXHg0Mlx4MDBceDAwIn0sCisJezB4MzIsICJceDEwXHgwMVx4ZmMifSwgezB4MzMsICJceDhjXHhhMVx4MTgifSwKKwkvKiBGbGlwL01pcnJvciBoL3Y9MSAqLworCXsweDMzLCAiXHg5MFx4MDBceDNjIn0sIHsweDMzLCAiXHg4Y1x4MjdceDE5In0sIHsweDMzLCAiXHg5MFx4MDRceDZjIn0sCisJezB4MzMsICJceDhjXHgyN1x4M2IifSwgezB4MzMsICJceDkwXHgwMFx4MjQifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwNiJ9LAorCXsxMzAsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwNiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezEwMCwgIlx4ZmZceGZmXHhmZiJ9LAorCS8qID8/ICovCisJezB4MzMsICJceDhjXHhhMVx4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MWYifSwgezB4MzMsICJceDhjXHhhMVx4MDIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgxZiJ9LCB7MHgzMywgIlx4OGNceGExXHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgxZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDFmIn0sCisJLyogQnJpZ3RobmVzcz03MCAqLworCXsweDMzLCAiXHg4Y1x4YTJceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDQ2In0sIHsweDMzLCAiXHg4Y1x4YTFceDAyIn0sCisJezB4MzMsICJceDkwXHgwMFx4MGYifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDUifSwKKwkvKiBTaGFycG5lc3M9MjAgKi8KKwl7MHgzMiwgIlx4NmNceDE0XHgwOCJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9pbml0X3Bvc3RfYWx0X2JpZ19hW10gPSB7CisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDUifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzNCwgIlx4MWVceDhmXHgwOSJ9LCB7MHgzNCwgIlx4MWNceDAxXHgyOCJ9LCB7MHgzNCwgIlx4MWVceDhmXHgwOSJ9LAorCXsweDM0LCAiXHgxZVx4OGZceDA5In0sIHsweDMyLCAiXHgxNFx4MDZceGU2In0sIHsweDMzLCAiXHg4Y1x4YTFceDAzIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDUifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwgezB4MzMsICJceDhjXHhhMVx4MjAifSwKKwl7MHgzMywgIlx4OTBceDAwXHg3MiJ9LCB7MHgzMywgIlx4OGNceGExXHgzMCJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMyJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDMxIn0sIHsweDMzLCAiXHg5MFx4MDBceDAyIn0sIHsweDMzLCAiXHg4Y1x4YTFceDMyIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDMifSwgezB4MzMsICJceDhjXHhhMVx4MzQifSwgezB4MzMsICJceDkwXHgwMFx4MDMifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMiJ9LCB7MHgzMywgIlx4MmVceDAxXHgwMCJ9LAorCXsweDM0LCAiXHgwNFx4MDBceDJhIn0sIHsweDMzLCAiXHg4Y1x4YTdceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDAxIn0sCit9OworCitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2luaXRfcG9zdF9hbHRfYmlnX2JbXSA9IHsKKwl7MHgzMiwgIlx4MTBceDAxXHhmOCJ9LCB7MHgzNCwgIlx4Y2VceDAxXHhhOCJ9LCB7MHgzNCwgIlx4ZDBceDY2XHgzMyJ9LAorCXsweDM0LCAiXHhkMlx4MzFceDlhIn0sIHsweDM0LCAiXHhkNFx4OTRceDYzIn0sIHsweDM0LCAiXHhkNlx4NGJceDI1In0sCisJezB4MzQsICJceGQ4XHgyNlx4NzAifSwgezB4MzQsICJceGRhXHg3Mlx4NGMifSwgezB4MzQsICJceGRjXHhmZlx4MDQifSwKKwl7MHgzNCwgIlx4ZGVceDAxXHg1YiJ9LCB7MHgzNCwgIlx4ZTZceDAxXHgxMyJ9LCB7MHgzNCwgIlx4ZWVceDBiXHhmMCJ9LAorCXsweDM0LCAiXHhmNlx4MGJceGE0In0sIHsweDM1LCAiXHgwMFx4ZjZceGU3In0sIHsweDM1LCAiXHgwOFx4MGRceGZkIn0sCisJezB4MzUsICJceDEwXHgyNVx4NjMifSwgezB4MzUsICJceDE4XHgzNVx4NmMifSwgezB4MzUsICJceDIwXHg0Mlx4N2UifSwKKwl7MHgzNSwgIlx4MjhceDE5XHg0NCJ9LCB7MHgzNSwgIlx4MzBceDM5XHhkNCJ9LCB7MHgzNSwgIlx4MzhceGY1XHhhOCJ9LAorCXsweDM1LCAiXHg0Y1x4MDdceDkwIn0sIHsweDM1LCAiXHg0NFx4MDdceGI4In0sIHsweDM1LCAiXHg1Y1x4MDZceDg4In0sCisJezB4MzUsICJceDU0XHgwN1x4ZmYifSwgezB4MzQsICJceGUwXHgwMVx4NTIifSwgezB4MzQsICJceGU4XHgwMFx4Y2MifSwKKwl7MHgzNCwgIlx4ZjBceDBkXHg4MyJ9LCB7MHgzNCwgIlx4ZjhceDBjXHhiMyJ9LCB7MHgzNSwgIlx4MDJceGZlXHhiYSJ9LAorCXsweDM1LCAiXHgwYVx4MDRceGUwIn0sIHsweDM1LCAiXHgxMlx4MWNceDYzIn0sIHsweDM1LCAiXHgxYVx4MmJceDVhIn0sCisJezB4MzUsICJceDIyXHgzMlx4NWUifSwgezB4MzUsICJceDJhXHgwZFx4MjgifSwgezB4MzUsICJceDMyXHgyY1x4MDIifSwKKwl7MHgzNSwgIlx4M2FceGY0XHhmYSJ9LCB7MHgzNSwgIlx4NGVceDA3XHhlZiJ9LCB7MHgzNSwgIlx4NDZceDA3XHg4OCJ9LAorCXsweDM1LCAiXHg1ZVx4MDdceGMxIn0sIHsweDM1LCAiXHg1Nlx4MDRceDY0In0sIHsweDM0LCAiXHhlNFx4MDFceDE1In0sCisJezB4MzQsICJceGVjXHgwMFx4ODIifSwgezB4MzQsICJceGY0XHgwY1x4Y2UifSwgezB4MzQsICJceGZjXHgwY1x4YmEifSwKKwl7MHgzNSwgIlx4MDZceDFmXHgwMiJ9LCB7MHgzNSwgIlx4MGVceDAyXHhlMyJ9LCB7MHgzNSwgIlx4MTZceDFhXHg1MCJ9LAorCXsweDM1LCAiXHgxZVx4MjRceDM5In0sIHsweDM1LCAiXHgyNlx4MjNceDRjIn0sIHsweDM1LCAiXHgyZVx4ZjlceDFiIn0sCisJezB4MzUsICJceDM2XHgyM1x4MTkifSwgezB4MzUsICJceDNlXHgxMlx4MDgifSwgezB4MzUsICJceDUyXHgwN1x4MjIifSwKKwl7MHgzNSwgIlx4NGFceDAzXHhkMyJ9LCB7MHgzNSwgIlx4NjJceDA2XHg1NCJ9LCB7MHgzNSwgIlx4NWFceDA0XHg1ZCJ9LAorCXsweDM0LCAiXHhlMlx4MDFceDA0In0sIHsweDM0LCAiXHhlYVx4MDBceGEwIn0sIHsweDM0LCAiXHhmMlx4MGNceGJjIn0sCisJezB4MzQsICJceGZhXHgwY1x4NWIifSwgezB4MzUsICJceDA0XHgxN1x4ZjIifSwgezB4MzUsICJceDBjXHgwMlx4MDgifSwKKwl7MHgzNSwgIlx4MTRceDI4XHg0MyJ9LCB7MHgzNSwgIlx4MWNceDI4XHg2MiJ9LCB7MHgzNSwgIlx4MjRceDJiXHg2MCJ9LAorCXsweDM1LCAiXHgyY1x4MDdceDMzIn0sIHsweDM1LCAiXHgzNFx4MWZceGIwIn0sIHsweDM1LCAiXHgzY1x4ZWRceGNkIn0sCisJezB4MzUsICJceDUwXHgwMFx4MDYifSwgezB4MzUsICJceDQ4XHgwN1x4ZmYifSwgezB4MzUsICJceDYwXHgwNVx4ODkifSwKKwl7MHgzNSwgIlx4NThceDA3XHhmZiJ9LCB7MHgzNSwgIlx4NDBceDAwXHhhMCJ9LCB7MHgzNSwgIlx4NDJceDAwXHgwMCJ9LAorCXsweDMyLCAiXHgxMFx4MDFceGZjIn0sIHsweDMzLCAiXHg4Y1x4YTFceDE4In0sIHsweDMzLCAiXHg5MFx4MDBceDNjIn0sCit9OworCitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2luaXRfcG9zdF9hbHRfYmlnX2NbXSA9IHsKKwl7MHgzMywgIlx4OGNceGExXHgwMiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgxZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAyIn0sCisJezB4MzMsICJceDkwXHgwMFx4MWYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sCit9OworCitzdGF0aWMgdTggKmRhdF82NDAgID0gIlx4ZDBceDAyXHhkMVx4MDhceGQyXHhlMVx4ZDNceDAyXHhkNFx4MTBceGQ1XHg4MSI7CitzdGF0aWMgdTggKmRhdF84MDAgID0gIlx4ZDBceDAyXHhkMVx4MTBceGQyXHg1N1x4ZDNceDAyXHhkNFx4MThceGQ1XHgyMSI7CitzdGF0aWMgdTggKmRhdF8xMjgwID0gIlx4ZDBceDAyXHhkMVx4MjBceGQyXHgwMVx4ZDNceDAyXHhkNFx4MjhceGQ1XHgwMSI7CitzdGF0aWMgdTggKmRhdF8xNjAwID0gIlx4ZDBceDAyXHhkMVx4MjBceGQyXHhhZlx4ZDNceDAyXHhkNFx4MzBceGQ1XHg0MSI7CisKK3N0YXRpYyBpbnQgIG1pMjAyMF9pbml0X2F0X3N0YXJ0dXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG1pMjAyMF9jb25maWd1cmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTIwMjBfaW5pdF9wcmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTIwMjBfaW5pdF9wb3N0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgbWkyMDIwX3Bvc3RfdW5zZXRfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTIwMjBfY2FtZXJhX3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwordm9pZCBtaTIwMjBfaW5pdF9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnZjdXIuYmFja2xpZ2h0ICA9ICAwOworCXNkLT52Y3VyLmJyaWdodG5lc3MgPSA3MDsKKwlzZC0+dmN1ci5zaGFycG5lc3MgID0gMjA7CisJc2QtPnZjdXIuY29udHJhc3QgICA9ICAwOworCXNkLT52Y3VyLmdhbW1hICAgICAgPSAgMDsKKwlzZC0+dmN1ci5odWUgICAgICAgID0gIDA7CisJc2QtPnZjdXIuc2F0dXJhdGlvbiA9IDYwOworCXNkLT52Y3VyLndoaXRlYmFsICAgPSA1MDsKKwlzZC0+dmN1ci5taXJyb3IgPSAwOworCXNkLT52Y3VyLmZsaXAgICA9IDA7CisJc2QtPnZjdXIuQUM1MEh6ID0gMTsKKworCXNkLT52bWF4LmJhY2tsaWdodCAgPSAgNjQ7CisJc2QtPnZtYXguYnJpZ2h0bmVzcyA9IDEyODsKKwlzZC0+dm1heC5zaGFycG5lc3MgID0gIDQwOworCXNkLT52bWF4LmNvbnRyYXN0ICAgPSAgIDM7CisJc2QtPnZtYXguZ2FtbWEgICAgICA9ICAgMjsKKwlzZC0+dm1heC5odWUgICAgICAgID0gICAwICsgMTsgLyogMjAwICovCisJc2QtPnZtYXguc2F0dXJhdGlvbiA9ICAgMDsgICAgIC8qIDEwMCAqLworCXNkLT52bWF4LndoaXRlYmFsICAgPSAgIDA7ICAgICAvKiAxMDAgKi8KKwlzZC0+dm1heC5taXJyb3IgPSAxOworCXNkLT52bWF4LmZsaXAgICA9IDE7CisJc2QtPnZtYXguQUM1MEh6ID0gMTsKKwlpZiAoX01JMjAyMGJfKSB7CisJCXNkLT52bWF4LmNvbnRyYXN0ICA9IDA7CisJCXNkLT52bWF4LmdhbW1hICAgICA9IDA7CisJCXNkLT52bWF4LmJhY2tsaWdodCA9IDA7CisJfQorCisJc2QtPmRldl9jYW1lcmFfc2V0dGluZ3MgPSBtaTIwMjBfY2FtZXJhX3NldHRpbmdzOworCXNkLT5kZXZfaW5pdF9hdF9zdGFydHVwID0gbWkyMDIwX2luaXRfYXRfc3RhcnR1cDsKKwlzZC0+ZGV2X2NvbmZpZ3VyZV9hbHQgICA9IG1pMjAyMF9jb25maWd1cmVfYWx0OworCXNkLT5kZXZfaW5pdF9wcmVfYWx0ICAgID0gbWkyMDIwX2luaXRfcHJlX2FsdDsKKwlzZC0+ZGV2X3Bvc3RfdW5zZXRfYWx0ICA9IG1pMjAyMF9wb3N0X3Vuc2V0X2FsdDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGNvbW1vbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKworCWlmIChfTUkyMDIwYl8pIHsKKwkJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1vbl9hLCBBUlJBWV9TSVpFKHRibF9jb21tb25fYSkpOworCX0gZWxzZSB7CisJCWlmIChfTUkyMDIwXykKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDAwOCwgMHgwMDA0LCAgMCwgTlVMTCk7CisJCWVsc2UKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDAwMiwgMHgwMDA0LCAgMCwgTlVMTCk7CisJCW1zbGVlcCgzNSk7CisJCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9jb21tb25fYiwgQVJSQVlfU0laRSh0YmxfY29tbW9uX2IpKTsKKwl9CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMywgMHg3YTAwLCAweDAwMzMsICAzLCAiXHg4Nlx4MjVceDAxIik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMywgMHg3YTAwLCAweDAwMzMsICAzLCAiXHg4Nlx4MjVceDAwIik7CisJbXNsZWVwKDIpOyAvKiAtICogKi8KKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAzLCAweDdhMDAsIDB4MDAzMCwgIDMsICJceDFhXHgwYVx4Y2MiKTsKKwlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQorCQltc2xlZXAoMik7IC8qIDE2MDAgKi8KKwlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2NvbW1vbl9jLCBBUlJBWV9TSVpFKHRibF9jb21tb25fYykpOworCisJaWYgKF9NSTIwMjBiXyB8fCBfTUkyMDIwXykKKwkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9jb21tb25fZCwKKwkJCQlBUlJBWV9TSVpFKHRibF9jb21tb25fZCkpOworCisJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9jb21tb25fZSwgQVJSQVlfU0laRSh0YmxfY29tbW9uX2UpKTsKKwlpZiAoX01JMjAyMGJfIHx8IF9NSTIwMjBfKSB7CisJCS8qIERpZmZlcmVudCBmcm9tIGZyZXQgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHg3OCIpOworCQkvKiBTYW1lIGFzIGZyZXQgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceDI0XHgxNyIpOworCQkvKiBEaWZmZXJlbnQgZnJvbSBmcmV0ICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4OTAiKTsKKwl9IGVsc2UgeworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDZhIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHgyNFx4MTciKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHg4MCIpOworCX0KKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTFceDAzIik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwNSIpOworCW1zbGVlcCgyKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTFceDAzIik7CisJaWYgKHJlc28gPT0gSU1BR0VfMTYwMCkKKwkJbXNsZWVwKDE0KTsgLyogMTYwMCAqLworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDYiKTsKKwltc2xlZXAoMik7Cit9CisKK3N0YXRpYyBpbnQgbWkyMDIwX2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJdTggYzsKKworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDAwMDAsIDB4MDAwNCwgMSwgJmMpOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDAwMDAsIDB4MDAwNCwgMSwgJmMpOworCisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfYXRfc3RhcnR1cCwKKwkJCUFSUkFZX1NJWkUodGJsX2luaXRfYXRfc3RhcnR1cCkpOworCisJY29tbW9uKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaTIwMjBfaW5pdF9wcmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+bWlycm9yTWFzayA9IDA7CisKKwlzZC0+dm9sZC5iYWNrbGlnaHQgID0gLTE7CisJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IC0xOworCXNkLT52b2xkLnNoYXJwbmVzcyAgPSAtMTsKKwlzZC0+dm9sZC5jb250cmFzdCAgID0gLTE7CisJc2QtPnZvbGQuZ2FtbWEgID0gLTE7CisJc2QtPnZvbGQuaHVlICAgID0gLTE7CisJc2QtPnZvbGQubWlycm9yID0gLTE7CisJc2QtPnZvbGQuZmxpcCAgID0gLTE7CisJc2QtPnZvbGQuQUM1MEh6ID0gLTE7CisKKwltaTIwMjBfaW5pdF9wb3N0X2FsdChnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWkyMDIwX2luaXRfcG9zdF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCisJczMyIGJhY2tsaWdodCA9IHNkLT52Y3VyLmJhY2tsaWdodDsKKwlzMzIgbWlycm9yID0gKCgoc2QtPnZjdXIubWlycm9yID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKKwlzMzIgZmxpcCAgID0gKCgoc2QtPnZjdXIuZmxpcCAgID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKKwlzMzIgZnJlcSAgID0gKHNkLT52Y3VyLkFDNTBIeiAgPiAwKTsKKworCXU4IGRhdF9mcmVxMltdID0gezB4OTAsIDB4MDAsIDB4ODB9OworCXU4IGRhdF9tdWx0aTFbXSA9IHsweDhjLCAweGE3LCAweDAwfTsKKwl1OCBkYXRfbXVsdGkyW10gPSB7MHg5MCwgMHgwMCwgMHgwMH07CisJdTggZGF0X211bHRpM1tdID0gezB4OGMsIDB4YTcsIDB4MDB9OworCXU4IGRhdF9tdWx0aTRbXSA9IHsweDkwLCAweDAwLCAweDAwfTsKKwl1OCBkYXRfaHZmbGlwMltdID0gezB4OTAsIDB4MDQsIDB4NmN9OworCXU4IGRhdF9odmZsaXA0W10gPSB7MHg5MCwgMHgwMCwgMHgyNH07CisJdTggYzsKKworCXNkLT5uYkltID0gLTE7CisKKwlkYXRfZnJlcTJbMl0gPSBmcmVxID8gMHhjMCA6IDB4ODA7CisJZGF0X211bHRpMVsyXSA9IDB4OWQ7CisJZGF0X211bHRpM1syXSA9IGRhdF9tdWx0aTFbMl0gKyAxOworCWRhdF9tdWx0aTRbMl0gPSBkYXRfbXVsdGkyWzJdID0gYmFja2xpZ2h0OworCWRhdF9odmZsaXAyWzJdID0gMHg2YyArIDIgKiAoMSAtIGZsaXApICsgKDEgLSBtaXJyb3IpOworCWRhdF9odmZsaXA0WzJdID0gMHgyNCArIDIgKiAoMSAtIGZsaXApICsgKDEgLSBtaXJyb3IpOworCisJbXNsZWVwKDIwMCk7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMSwgMHgwMDAwLCAwLCBOVUxMKTsKKwltc2xlZXAoMyk7IC8qIDM1ICogKi8KKworCWNvbW1vbihnc3BjYV9kZXYpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDQxLCAweDAwMDAsICAwLCBOVUxMKTsKKwltc2xlZXAoNzApOworCisJaWYgKF9NSTIwMjBiXykKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDQwLCAweDAwMDAsICAwLCBOVUxMKTsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDAxMCwgMHgwMDEwLCAgMCwgTlVMTCk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDAzLCAweDAwYzEsICAwLCBOVUxMKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAxLCAweDAwNDIsIDB4MDBjMiwgIDAsIE5VTEwpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDA2YSwgMHgwMDBkLCAgMCwgTlVMTCk7CisKKwlzd2l0Y2ggKHJlc28pIHsKKwljYXNlIElNQUdFXzY0MDoKKwljYXNlIElNQUdFXzgwMDoKKwkJaWYgKHJlc28gIT0gSU1BR0VfODAwKQorCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMywgMHgwMDAwLCAweDAyMDAsCisJCQkJMTIsIGRhdF82NDApOworCQllbHNlCisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAzLCAweDAwMDAsIDB4MDIwMCwKKwkJCQkxMiwgZGF0XzgwMCk7CisKKwkJaWYgKF9NSTIwMjBjXykKKwkJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfYSwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF9sb3dfYSkpOworCisJCWlmIChyZXNvID09IElNQUdFXzgwMCkKKwkJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfYiwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF9sb3dfYikpOworCisJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfYywKKwkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0X2xvd19jKSk7CisKKwkJaWYgKF9NSTIwMjBiXykgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDEsIDB4MDAxMCwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMCwgMHgwMGMxLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwYzIsIDAsIE5VTEwpOworCQkJbXNsZWVwKDE1MCk7CisJCX0gZWxzZSBpZiAoX01JMjAyMGNfKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAxMCwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAwLCAweDAwYzEsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDBjMiwgMCwgTlVMTCk7CisJCQltc2xlZXAoMTIwKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQwLCAweDAwMDAsIDAsIE5VTEwpOworCQkJbXNsZWVwKDMwKTsKKwkJfSBlbHNlIGlmIChfTUkyMDIwXykgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDEsIDB4MDAxMCwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMCwgMHgwMGMxLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwYzIsIDAsIE5VTEwpOworCQkJbXNsZWVwKDEyMCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MCwgMHgwMDAwLCAwLCBOVUxMKTsKKwkJCW1zbGVlcCgzMCk7CisJCX0KKworCQkvKiBBQyBwb3dlciBmcmVxdWVuY3kgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXExKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXEyKTsKKwkJbXNsZWVwKDIwKTsKKwkJLyogYmFja2xpZ2h0ICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkyKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMyk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTQpOworCQkvKiBhdCBpbml0IHRpbWUgYnV0IG5vdCBhZnRlciAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTJceDBjIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MTciKTsKKwkJLyogZmluaXNoIHRoZSBiYWNrbGlnaHQgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTYpOworCQltc2xlZXAoNSk7LyogIiAqLworCisJCWlmIChfTUkyMDIwY18pIHsKKwkJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfZCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF9sb3dfZCkpOworCQl9IGVsc2UgeworCQkJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDAwLCAxLCAmYyk7CisJCQltc2xlZXAoMTQpOyAvKiAweGQ4ICovCisKKwkJCS8qIGZsaXAvbWlycm9yICovCisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfaHZmbGlwMSk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfaHZmbGlwMik7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfaHZmbGlwMyk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfaHZmbGlwNCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfaHZmbGlwNSk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfaHZmbGlwNik7CisJCQltc2xlZXAoMjEpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgZGF0X2R1bW15MSk7CisJCQltc2xlZXAoNSk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfZHVtbXkxKTsKKwkJCW1zbGVlcCg1KTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9kdW1teTEpOworCQkJbXNsZWVwKDUpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgZGF0X2R1bW15MSk7CisJCQltc2xlZXAoNSk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfZHVtbXkxKTsKKwkJCW1zbGVlcCg1KTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9kdW1teTEpOworCQkJLyogZW5kIG9mIGZsaXAvbWlycm9yIG1haW4gcGFydCAqLworCQkJbXNsZWVwKDI0Nik7IC8qIDE0NiAqLworCisJCQlzZC0+bmJJbSA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElNQUdFXzEyODA6CisJY2FzZSBJTUFHRV8xNjAwOgorCQlpZiAocmVzbyA9PSBJTUFHRV8xMjgwKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLAorCQkJCQkxMiwgZGF0XzEyODApOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OGNceDI3XHgwNyIpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OTBceDA1XHgwNCIpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OGNceDI3XHgwOSIpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OTBceDA0XHgwMiIpOworCQl9IGVsc2UgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwKKwkJCQkJMTIsIGRhdF8xNjAwKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsICJceDhjXHgyN1x4MDciKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsICJceDkwXHgwNlx4NDAiKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsICJceDhjXHgyN1x4MDkiKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsICJceDkwXHgwNFx4YjAiKTsKKwkJfQorCisJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9iaWdfYSwKKwkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0X2JpZ19hKSk7CisKKwkJaWYgKHJlc28gPT0gSU1BR0VfMTYwMCkKKwkJCW1zbGVlcCgxMyk7IC8qIDE2MDAgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceDI3XHg5NyIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDFceDAwIik7CisJCW1zbGVlcCg1Myk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MjAiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMCIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTFceDAzIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDEiKTsKKwkJaWYgKHJlc28gPT0gSU1BR0VfMTYwMCkKKwkJCW1zbGVlcCgxMyk7IC8qIDE2MDAgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGE3XHgwMiIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAwIik7CisJCW1zbGVlcCg1Myk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MjAiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHg3MiIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTFceDAzIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDIiKTsKKwkJaWYgKHJlc28gPT0gSU1BR0VfMTYwMCkKKwkJCW1zbGVlcCgxMyk7IC8qIDE2MDAgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGE3XHgwMiIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAxIik7CisJCW1zbGVlcCg1Myk7CisKKwkJaWYgKF9NSTIwMjBiXykgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDEsIDB4MDAxMCwgMCwgTlVMTCk7CisJCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQorCQkJCW1zbGVlcCg1MDApOyAvKiAxNjAwICovCisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMCwgMHgwMGMxLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwYzIsIDAsIE5VTEwpOworCQkJbXNsZWVwKDE4NTApOworCQl9IGVsc2UgaWYgKF9NSTIwMjBjXyB8fCBfTUkyMDIwXykgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDEsIDB4MDAxMCwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMCwgMHgwMGMxLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwYzIsIDAsIE5VTEwpOworCQkJbXNsZWVwKDE4NTApOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDAsIDB4MDAwMCwgMCwgTlVMTCk7CisJCQltc2xlZXAoMzApOworCQl9CisKKwkJLyogQUMgcG93ZXIgZnJlcXVlbmN5ICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9mcmVxMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9mcmVxMik7CisJCW1zbGVlcCgyMCk7CisJCS8qIGJhY2tsaWdodCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkxKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk0KTsKKwkJLyogYXQgaW5pdCB0aW1lIGJ1dCBub3QgYWZ0ZXIgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGEyXHgwYyIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDE3Iik7CisJCS8qIGZpbmlzaCB0aGUgYmFja2xpZ2h0ICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTUpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKKwkJbXNsZWVwKDYpOyAvKiAiICovCisKKwkJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDAwLCAxLCAmYyk7CisJCW1zbGVlcCgxNCk7CisKKwkJaWYgKF9NSTIwMjBjXykKKwkJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9iaWdfYiwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF9iaWdfYikpOworCisJCS8qIGZsaXAvbWlycm9yICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXAxKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwMyk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXA0KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDUpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwNik7CisJCS8qIGVuZCBvZiBmbGlwL21pcnJvciBtYWluIHBhcnQgKi8KKwkJbXNsZWVwKDE2KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgwMyIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAxIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MjAiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMCIpOworCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQorCQkJbXNsZWVwKDI1KTsgLyogMTYwMCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTdceDAyIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDAiKTsKKwkJbXNsZWVwKDEwMyk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMiIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTFceDIwIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4NzIiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGE3XHgwMiIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAxIik7CisJCXNkLT5uYkltID0gMDsKKworCQlpZiAoX01JMjAyMGNfKQorCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2JpZ19jLAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0X2JpZ19jKSk7CisJfQorCisJc2QtPnZvbGQubWlycm9yICAgID0gbWlycm9yOworCXNkLT52b2xkLmZsaXAgICAgICA9IGZsaXA7CisJc2QtPnZvbGQuQUM1MEh6ICAgID0gZnJlcTsKKwlzZC0+dm9sZC5iYWNrbGlnaHQgPSBiYWNrbGlnaHQ7CisKKwltaTIwMjBfY2FtZXJhX3NldHRpbmdzKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaTIwMjBfY29uZmlndXJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKworCXN3aXRjaCAocmVzbykgeworCWNhc2UgSU1BR0VfNjQwOgorCQlnc3BjYV9kZXYtPmFsdCA9IDMgKyAxOworCQlicmVhazsKKworCWNhc2UgSU1BR0VfODAwOgorCWNhc2UgSU1BR0VfMTI4MDoKKwljYXNlIElNQUdFXzE2MDA6CisJCWdzcGNhX2Rldi0+YWx0ID0gMSArIDE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG1pMjAyMF9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXMzMiBiYWNrbGlnaHQgPSBzZC0+dmN1ci5iYWNrbGlnaHQ7CisJczMyIGJyaWdodCA9ICBzZC0+dmN1ci5icmlnaHRuZXNzOworCXMzMiBzaGFycCAgPSAgc2QtPnZjdXIuc2hhcnBuZXNzOworCXMzMiBjbnRyICAgPSAgc2QtPnZjdXIuY29udHJhc3Q7CisJczMyIGdhbQkgICA9ICBzZC0+dmN1ci5nYW1tYTsKKwlzMzIgaHVlICAgID0gKHNkLT52Y3VyLmh1ZSA+IDApOworCXMzMiBtaXJyb3IgPSAoKChzZC0+dmN1ci5taXJyb3IgPiAwKSBeIHNkLT5taXJyb3JNYXNrKSA+IDApOworCXMzMiBmbGlwICAgPSAoKChzZC0+dmN1ci5mbGlwICAgPiAwKSBeIHNkLT5taXJyb3JNYXNrKSA+IDApOworCXMzMiBmcmVxICAgPSAoc2QtPnZjdXIuQUM1MEh6ID4gMCk7CisKKwl1OCBkYXRfc2hhcnBbXSA9IHsweDZjLCAweDAwLCAweDA4fTsKKwl1OCBkYXRfYnJpZ2h0MltdID0gezB4OTAsIDB4MDAsIDB4MDB9OworCXU4IGRhdF9mcmVxMltdID0gezB4OTAsIDB4MDAsIDB4ODB9OworCXU4IGRhdF9tdWx0aTFbXSA9IHsweDhjLCAweGE3LCAweDAwfTsKKwl1OCBkYXRfbXVsdGkyW10gPSB7MHg5MCwgMHgwMCwgMHgwMH07CisJdTggZGF0X211bHRpM1tdID0gezB4OGMsIDB4YTcsIDB4MDB9OworCXU4IGRhdF9tdWx0aTRbXSA9IHsweDkwLCAweDAwLCAweDAwfTsKKwl1OCBkYXRfaHZmbGlwMltdID0gezB4OTAsIDB4MDQsIDB4NmN9OworCXU4IGRhdF9odmZsaXA0W10gPSB7MHg5MCwgMHgwMCwgMHgyNH07CisKKwkvKiBMZXNzIHRoYW4gNCBpbWFnZXMgcmVjZWl2ZWQgLT4gdG9vIGVhcmx5IHRvIHNldCB0aGUgc2V0dGluZ3MgKi8KKwlpZiAoc2QtPm5iSW0gPCA0KSB7CisJCXNkLT53YWl0U2V0ID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCXNkLT53YWl0U2V0ID0gMDsKKworCWlmIChmcmVxICE9IHNkLT52b2xkLkFDNTBIeikgeworCQlzZC0+dm9sZC5BQzUwSHogPSBmcmVxOworCisJCWRhdF9mcmVxMlsyXSA9IGZyZXEgPyAweGMwIDogMHg4MDsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXExKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXEyKTsKKwkJbXNsZWVwKDIwKTsKKwl9CisKKwlpZiAobWlycm9yICE9IHNkLT52b2xkLm1pcnJvciB8fCBmbGlwICE9IHNkLT52b2xkLmZsaXApIHsKKwkJc2QtPnZvbGQubWlycm9yID0gbWlycm9yOworCQlzZC0+dm9sZC5mbGlwICAgPSBmbGlwOworCisJCWRhdF9odmZsaXAyWzJdID0gMHg2YyArIDIgKiAoMSAtIGZsaXApICsgKDEgLSBtaXJyb3IpOworCQlkYXRfaHZmbGlwNFsyXSA9IDB4MjQgKyAyICogKDEgLSBmbGlwKSArICgxIC0gbWlycm9yKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwMik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXAzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDQpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwNSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXA2KTsKKwkJbXNsZWVwKDEzMCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9kdW1teTEpOworCQltc2xlZXAoNik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9kdW1teTEpOworCQltc2xlZXAoNik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9kdW1teTEpOworCQltc2xlZXAoNik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9kdW1teTEpOworCQltc2xlZXAoNik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9kdW1teTEpOworCQltc2xlZXAoNik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9kdW1teTEpOworCQltc2xlZXAoNik7CisKKwkJLyogU29tZXRpbWVzIHByZXNlbnQsIHNvbWV0aW1lcyBub3QsIHVzZWZ1bD8gKi8KKwkJLyogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkyKTsKKwkJICogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkzKTsKKwkJICogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkyKTsKKwkJICogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkzKTsKKwkJICogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkyKTsKKwkJICogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkzKTsKKwkJICogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkyKTsKKwkJICogY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZHVtbXkzKTsqLworCX0KKworCWlmIChiYWNrbGlnaHQgIT0gc2QtPnZvbGQuYmFja2xpZ2h0KSB7CisJCXNkLT52b2xkLmJhY2tsaWdodCA9IGJhY2tsaWdodDsKKwkJaWYgKGJhY2tsaWdodCA8IDAgfHwgYmFja2xpZ2h0ID4gc2QtPnZtYXguYmFja2xpZ2h0KQorCQkJYmFja2xpZ2h0ID0gMDsKKworCQlkYXRfbXVsdGkxWzJdID0gMHg5ZDsKKwkJZGF0X211bHRpM1syXSA9IGRhdF9tdWx0aTFbMl0gKyAxOworCQlkYXRfbXVsdGk0WzJdID0gZGF0X211bHRpMlsyXSA9IGJhY2tsaWdodDsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTUpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKKwl9CisKKwlpZiAoZ2FtICE9IHNkLT52b2xkLmdhbW1hKSB7CisJCXNkLT52b2xkLmdhbW1hID0gZ2FtOworCQlpZiAoZ2FtIDwgMCB8fCBnYW0gPiBzZC0+dm1heC5nYW1tYSkKKwkJCWdhbSA9IDA7CisKKwkJZGF0X211bHRpMVsyXSA9IDB4NmQ7CisJCWRhdF9tdWx0aTNbMl0gPSBkYXRfbXVsdGkxWzJdICsgMTsKKwkJZGF0X211bHRpNFsyXSA9IGRhdF9tdWx0aTJbMl0gPSAweDQwICsgZ2FtOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkxKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk0KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTYpOworCX0KKworCWlmIChjbnRyICE9IHNkLT52b2xkLmNvbnRyYXN0KSB7CisJCXNkLT52b2xkLmNvbnRyYXN0ID0gY250cjsKKwkJaWYgKGNudHIgPCAwIHx8IGNudHIgPiBzZC0+dm1heC5jb250cmFzdCkKKwkJCWNudHIgPSAwOworCisJCWRhdF9tdWx0aTFbMl0gPSAweDZkOworCQlkYXRfbXVsdGkzWzJdID0gZGF0X211bHRpMVsyXSArIDE7CisJCWRhdF9tdWx0aTRbMl0gPSBkYXRfbXVsdGkyWzJdID0gMHgxMiArIDE2ICogY250cjsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTUpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKKwl9CisKKwlpZiAoYnJpZ2h0ICE9IHNkLT52b2xkLmJyaWdodG5lc3MpIHsKKwkJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IGJyaWdodDsKKwkJaWYgKGJyaWdodCA8IDAgfHwgYnJpZ2h0ID4gc2QtPnZtYXguYnJpZ2h0bmVzcykKKwkJCWJyaWdodCA9IDA7CisKKwkJZGF0X2JyaWdodDJbMl0gPSBicmlnaHQ7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQxKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0Myk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQ0KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDUpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0Nik7CisJfQorCisJaWYgKHNoYXJwICE9IHNkLT52b2xkLnNoYXJwbmVzcykgeworCQlzZC0+dm9sZC5zaGFycG5lc3MgPSBzaGFycDsKKwkJaWYgKHNoYXJwIDwgMCB8fCBzaGFycCA+IHNkLT52bWF4LnNoYXJwbmVzcykKKwkJCXNoYXJwID0gMDsKKworCQlkYXRfc2hhcnBbMV0gPSBzaGFycDsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMiwgMywgZGF0X3NoYXJwKTsKKwl9CisKKwlpZiAoaHVlICE9IHNkLT52b2xkLmh1ZSkgeworCQlzZC0+c3dhcFJCID0gaHVlOworCQlzZC0+dm9sZC5odWUgPSBodWU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pMjAyMF9wb3N0X3Vuc2V0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCA1LCAweDAwMDAsIDB4MDAwMCwgMCwgTlVMTCk7CisJbXNsZWVwKDIwKTsKKwlpZiAoX01JMjAyMGNfIHx8IF9NSTIwMjBfKQorCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDAwLCAwLCBOVUxMKTsKKwllbHNlCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwMDAsIDAsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1vdjI2NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtb3YyNjQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiOWMzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtb3YyNjQwLmMKQEAgLTAsMCArMSw1MDUgQEAKKy8qIEBmaWxlIGdsODYwLW92MjY0MC5jCisgKiBAYXV0aG9yIE9saXZpZXIgTE9SSU4sIGZyb20gTWFsbW9zdG9zbydzIGxvZ3MKKyAqIEBkYXRlIDIwMDktMDgtMjcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qIFNlbnNvciA6IE9WMjY0MCAqLworCisjaW5jbHVkZSAiZ2w4NjAuaCIKKworc3RhdGljIHU4IGRhdF9pbml0MVtdID0gIlx4MDBceDQxXHgwN1x4NmFceDA2XHg2MVx4MGRceDZhIiAiXHgxMFx4MTBceGMxXHgwMSI7CitzdGF0aWMgdTggZGF0X2luaXQyW10gPSB7MHg2MX07IC8qIGV4cGVjdGVkICovCitzdGF0aWMgdTggZGF0X2luaXQzW10gPSB7MHg1MX07IC8qIGV4cGVjdGVkICovCisKK3N0YXRpYyB1OCBkYXRfcG9zdFtdID0KKwkiXHgwMFx4NDFceDA3XHg2YVx4MDZceGVmXHgwZFx4NmEiICJceDEwXHgxMFx4YzFceDAxIjsKKworc3RhdGljIHU4IGRhdF82NDBbXSAgPSAiXHhkMFx4MDFceGQxXHgwOFx4ZDJceGUwXHhkM1x4MDJceGQ0XHgxMFx4ZDVceDgxIjsKK3N0YXRpYyB1OCBkYXRfODAwW10gID0gIlx4ZDBceDAxXHhkMVx4MTBceGQyXHg1OFx4ZDNceDAyXHhkNFx4MThceGQ1XHgyMSI7CitzdGF0aWMgdTggZGF0XzEyODBbXSA9ICJceGQwXHgwMVx4ZDFceDE4XHhkMlx4YzBceGQzXHgwMlx4ZDRceDI4XHhkNVx4MDEiOworc3RhdGljIHU4IGRhdF8xNjAwW10gPSAiXHhkMFx4MDFceGQxXHgyMFx4ZDJceGIwXHhkM1x4MDJceGQ0XHgzMFx4ZDVceDQxIjsKKworc3RhdGljIHU4IGM1MFtdID0gezB4NTB9OyAvKiBleHBlY3RlZCAqLworc3RhdGljIHU4IGMyOFtdID0gezB4Mjh9OyAvKiBleHBlY3RlZCAqLworc3RhdGljIHU4IGNhOFtdID0gezB4YTh9OyAvKiBleHBlY3RlZCAqLworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfaW5pdF9hdF9zdGFydHVwW10gPSB7CisJezB4MDAwMCwgMHgwMDAwfSwgezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwOCwgMHgwMGMwfSwgezB4MDAwMSwgMHgwMGMxfSwKKwl7MHgwMDAxLCAweDAwYzJ9LCB7MHgwMDIwLCAweDAwMDZ9LCB7MHgwMDZhLCAweDAwMGR9LAorCXsweDAwNTAsIDB4MDAwMH0sIHsweDAwNDEsIDB4MDAwMH0sIHsweDAwNmEsIDB4MDAwN30sIHsweDAwNjEsIDB4MDAwNn0sCisJezB4MDA2YSwgMHgwMDBkfSwgezB4MDAwMCwgMHgwMGMwfSwgezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwMSwgMHgwMGMxfSwKKwl7MHgwMDQxLCAweDAwYzJ9LCB7MHgwMDA0LCAweDAwZDh9LCB7MHgwMDEyLCAweDAwMDR9LCB7MHgwMDAwLCAweDAwNTh9LAorCXsweDAwNDEsIDB4MDAwMH0sIHsweDAwNjEsIDB4MDAwMH0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfY29tbW9uW10gPSB7CisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjBmZiwgMHgwMDJjfSwgezB4NjBkZiwgMHgwMDJlfSwgezB4NjAwMSwgMHgwMGZmfSwKKwl7MHg2MDgwLCAweDAwMTJ9LCB7MHg2MDAwLCAweDAwMDB9LCB7MHg2MDAwLCAweDAwNDV9LCB7MHg2MDAwLCAweDAwMTB9LAorCXsweDYwMzUsIDB4MDAzY30sIHsweDYwMDAsIDB4MDAxMX0sIHsweDYwMjgsIDB4MDAwNH0sIHsweDYwZTUsIDB4MDAxM30sCisJezB4NjA4OCwgMHgwMDE0fSwgezB4NjAwYywgMHgwMDJjfSwgezB4NjA3OCwgMHgwMDMzfSwgezB4NjBmNywgMHgwMDNifSwKKwl7MHg2MDAwLCAweDAwM2V9LCB7MHg2MDExLCAweDAwNDN9LCB7MHg2MDEwLCAweDAwMTZ9LCB7MHg2MDgyLCAweDAwMzl9LAorCXsweDYwODgsIDB4MDAzNX0sIHsweDYwMGEsIDB4MDAyMn0sIHsweDYwNDAsIDB4MDAzN30sIHsweDYwMDAsIDB4MDAyM30sCisJezB4NjBhMCwgMHgwMDM0fSwgezB4NjAxYSwgMHgwMDM2fSwgezB4NjAwMiwgMHgwMDA2fSwgezB4NjBjMCwgMHgwMDA3fSwKKwl7MHg2MGI3LCAweDAwMGR9LCB7MHg2MDAxLCAweDAwMGV9LCB7MHg2MDAwLCAweDAwNGN9LCB7MHg2MDgxLCAweDAwNGF9LAorCXsweDYwOTksIDB4MDAyMX0sIHsweDYwMDIsIDB4MDAwOX0sIHsweDYwM2UsIDB4MDAyNH0sIHsweDYwMzQsIDB4MDAyNX0sCisJezB4NjA4MSwgMHgwMDI2fSwgezB4NjAwMCwgMHgwMDAwfSwgezB4NjAwMCwgMHgwMDQ1fSwgezB4NjAwMCwgMHgwMDEwfSwKKwl7MHg2MDAwLCAweDAwNWN9LCB7MHg2MDAwLCAweDAwNjN9LCB7MHg2MDAwLCAweDAwN2N9LCB7MHg2MDcwLCAweDAwNjF9LAorCXsweDYwODAsIDB4MDA2Mn0sIHsweDYwODAsIDB4MDAyMH0sIHsweDYwMzAsIDB4MDAyOH0sIHsweDYwMDAsIDB4MDA2Y30sCisJezB4NjAwMCwgMHgwMDZlfSwgezB4NjAwMiwgMHgwMDcwfSwgezB4NjA5NCwgMHgwMDcxfSwgezB4NjBjMSwgMHgwMDczfSwKKwl7MHg2MDM0LCAweDAwM2R9LCB7MHg2MDU3LCAweDAwNWF9LCB7MHg2MGJiLCAweDAwNGZ9LCB7MHg2MDljLCAweDAwNTB9LAorCXsweDYwODAsIDB4MDA2ZH0sIHsweDYwMDIsIDB4MDAzOX0sIHsweDYwMzMsIDB4MDAzYX0sIHsweDYwZjEsIDB4MDAzYn0sCisJezB4NjAzMSwgMHgwMDNjfSwgezB4NjAwMCwgMHgwMGZmfSwgezB4NjAxNCwgMHgwMGUwfSwgezB4NjBmZiwgMHgwMDc2fSwKKwl7MHg2MGEwLCAweDAwMzN9LCB7MHg2MDIwLCAweDAwNDJ9LCB7MHg2MDE4LCAweDAwNDN9LCB7MHg2MDAwLCAweDAwNGN9LAorCXsweDYwZDAsIDB4MDA4N30sIHsweDYwMGYsIDB4MDA4OH0sIHsweDYwMDMsIDB4MDBkN30sIHsweDYwMTAsIDB4MDBkOX0sCisJezB4NjAwNSwgMHgwMGRhfSwgezB4NjA4MiwgMHgwMGQzfSwgezB4NjBjMCwgMHgwMGY5fSwgezB4NjAwNiwgMHgwMDQ0fSwKKwl7MHg2MDA3LCAweDAwZDF9LCB7MHg2MDAyLCAweDAwZDJ9LCB7MHg2MDAwLCAweDAwZDJ9LCB7MHg2MDExLCAweDAwZDh9LAorCXsweDYwMDgsIDB4MDBjOH0sIHsweDYwODAsIDB4MDBjOX0sIHsweDYwMDgsIDB4MDA3Y30sIHsweDYwMjAsIDB4MDA3ZH0sCisJezB4NjAyMCwgMHgwMDdkfSwgezB4NjAwMCwgMHgwMDkwfSwgezB4NjAwZSwgMHgwMDkxfSwgezB4NjAxYSwgMHgwMDkxfSwKKwl7MHg2MDMxLCAweDAwOTF9LCB7MHg2MDVhLCAweDAwOTF9LCB7MHg2MDY5LCAweDAwOTF9LCB7MHg2MDc1LCAweDAwOTF9LAorCXsweDYwN2UsIDB4MDA5MX0sIHsweDYwODgsIDB4MDA5MX0sIHsweDYwOGYsIDB4MDA5MX0sIHsweDYwOTYsIDB4MDA5MX0sCisJezB4NjBhMywgMHgwMDkxfSwgezB4NjBhZiwgMHgwMDkxfSwgezB4NjBjNCwgMHgwMDkxfSwgezB4NjBkNywgMHgwMDkxfSwKKwl7MHg2MGU4LCAweDAwOTF9LCB7MHg2MDIwLCAweDAwOTF9LCB7MHg2MDAwLCAweDAwOTJ9LCB7MHg2MDA2LCAweDAwOTN9LAorCXsweDYwZTMsIDB4MDA5M30sIHsweDYwMDUsIDB4MDA5M30sIHsweDYwMDUsIDB4MDA5M30sIHsweDYwMDAsIDB4MDA5M30sCisJezB4NjAwNCwgMHgwMDkzfSwgezB4NjAwMCwgMHgwMDkzfSwgezB4NjAwMCwgMHgwMDkzfSwgezB4NjAwMCwgMHgwMDkzfSwKKwl7MHg2MDAwLCAweDAwOTN9LCB7MHg2MDAwLCAweDAwOTN9LCB7MHg2MDAwLCAweDAwOTN9LCB7MHg2MDAwLCAweDAwOTN9LAorCXsweDYwMDAsIDB4MDA5Nn0sIHsweDYwMDgsIDB4MDA5N30sIHsweDYwMTksIDB4MDA5N30sIHsweDYwMDIsIDB4MDA5N30sCisJezB4NjAwYywgMHgwMDk3fSwgezB4NjAyNCwgMHgwMDk3fSwgezB4NjAzMCwgMHgwMDk3fSwgezB4NjAyOCwgMHgwMDk3fSwKKwl7MHg2MDI2LCAweDAwOTd9LCB7MHg2MDAyLCAweDAwOTd9LCB7MHg2MDk4LCAweDAwOTd9LCB7MHg2MDgwLCAweDAwOTd9LAorCXsweDYwMDAsIDB4MDA5N30sIHsweDYwMDAsIDB4MDA5N30sIHsweDYwZWQsIDB4MDBjM30sIHsweDYwOWEsIDB4MDBjNH0sCisJezB4NjAwMCwgMHgwMGE0fSwgezB4NjAxMSwgMHgwMGM1fSwgezB4NjA1MSwgMHgwMGM2fSwgezB4NjAxMCwgMHgwMGM3fSwKKwl7MHg2MDY2LCAweDAwYjZ9LCB7MHg2MGE1LCAweDAwYjh9LCB7MHg2MDY0LCAweDAwYjd9LCB7MHg2MDdjLCAweDAwYjl9LAorCXsweDYwYWYsIDB4MDBiM30sIHsweDYwOTcsIDB4MDBiNH0sIHsweDYwZmYsIDB4MDBiNX0sIHsweDYwYzUsIDB4MDBiMH0sCisJezB4NjA5NCwgMHgwMGIxfSwgezB4NjAwZiwgMHgwMGIyfSwgezB4NjA1YywgMHgwMGM0fSwgezB4NjAwMCwgMHgwMGE4fSwKKwl7MHg2MGM4LCAweDAwYzB9LCB7MHg2MDk2LCAweDAwYzF9LCB7MHg2MDFkLCAweDAwODZ9LCB7MHg2MDAwLCAweDAwNTB9LAorCXsweDYwOTAsIDB4MDA1MX0sIHsweDYwMTgsIDB4MDA1Mn0sIHsweDYwMDAsIDB4MDA1M30sIHsweDYwMDAsIDB4MDA1NH0sCisJezB4NjA4OCwgMHgwMDU1fSwgezB4NjAwMCwgMHgwMDU3fSwgezB4NjA5MCwgMHgwMDVhfSwgezB4NjAxOCwgMHgwMDVifSwKKwl7MHg2MDA1LCAweDAwNWN9LCB7MHg2MGVkLCAweDAwYzN9LCB7MHg2MDAwLCAweDAwN2Z9LCB7MHg2MDA1LCAweDAwZGF9LAorCXsweDYwMWYsIDB4MDBlNX0sIHsweDYwNjcsIDB4MDBlMX0sIHsweDYwMDAsIDB4MDBlMH0sIHsweDYwZmYsIDB4MDBkZH0sCisJezB4NjAwMCwgMHgwMDA1fSwgezB4NjAwMSwgMHgwMGZmfSwgezB4NjAwMCwgMHgwMDAwfSwgezB4NjAwMCwgMHgwMDQ1fSwKKwl7MHg2MDAwLCAweDAwMTB9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYVtdID0geworCXsweDAwNDEsIDB4MDAwMH0sIHsweDAwNmEsIDB4MDAwN30sIHsweDAwZWYsIDB4MDAwNn0sIHsweDAwNmEsIDB4MDAwZH0sCisJezB4MDAwMCwgMHgwMGMwfSwgezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwMSwgMHgwMGMxfSwgezB4MDA0MSwgMHgwMGMyfSwKKwl7MHgwMDA0LCAweDAwZDh9LCB7MHgwMDEyLCAweDAwMDR9LCB7MHgwMDAwLCAweDAwNTh9LCB7MHgwMDQxLCAweDAwMDB9LAorCXs1MCwgMHhmZmZmfSwKKwl7MHgwMDYxLCAweDAwMDB9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjAwMCwgMHgwMDdjfSwgezB4NjAwNywgMHgwMDdkfSwKKwl7MzAsIDB4ZmZmZn0sCisJezB4MDA0MCwgMHgwMDAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2JbXSA9IHsKKwl7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDM4LCAweDAwMGN9LAorCXsxMCwgMHhmZmZmfSwKKwl7MHg2MDAwLCAweDAwMTF9LAorCS8qIGJhY2tsaWdodD0zMS82NCAqLworCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwM2UsIDB4MDAyNH0sIHsweDYwMzQsIDB4MDAyNX0sCisJLyogYnJpZ2h0PTAvMjU2ICovCisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjAwOSwgMHgwMDdjfSwgezB4NjAwMCwgMHgwMDdkfSwKKwkvKiB3YmFsPTY0LzEyOCAqLworCXsweDYwMDAsIDB4MDBmZn0sIHsweDYwMDMsIDB4MDA3Y30sIHsweDYwNDAsIDB4MDA3ZH0sCisJLyogY250cj0wLzI1NiAqLworCXsweDYwMDAsIDB4MDBmZn0sIHsweDYwMDcsIDB4MDA3Y30sIHsweDYwMDAsIDB4MDA3ZH0sCisJLyogc2F0PTEyOC8yNTYgKi8KKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDAxLCAweDAwN2N9LCB7MHg2MDgwLCAweDAwN2R9LAorCS8qIHNoYXJwbmVzcz0wLzMyICovCisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjAwMSwgMHgwMDkyfSwgezB4NjBjMCwgMHgwMDkzfSwKKwkvKiBodWU9MC8yNTYgKi8KKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDAyLCAweDAwN2N9LCB7MHg2MDAwLCAweDAwN2R9LAorCS8qIGdhbT0zMi82NCAqLworCXsweDYwMDAsIDB4MDBmZn0sIHsweDYwMDgsIDB4MDA3Y30sIHsweDYwMjAsIDB4MDA3ZH0sCisJLyogaW1hZ2UgcmlnaHQgdXAgKi8KKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsxNSwgMHhmZmZmfSwKKwl7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDAwLCAweDgwMDR9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjBhOCwgMHgwMDA0fSwKKwl7MTUsIDB4ZmZmZn0sCisJezB4NjAwMSwgMHgwMGZmfSwgezB4NjAwMCwgMHg4MDA0fSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwZjgsIDB4MDAwNH0sCisJLyogaW1hZ2UgcmlnaHQgdXAgKi8KKwl7MHhmZmZmLCAweGZmZmZ9LAorCS8qIGJhY2tsaWdodD0zMS82NCAqLworCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwM2UsIDB4MDAyNH0sIHsweDYwMzQsIDB4MDAyNX0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfNjQwW10gPSB7CisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjBmMSwgMHgwMGRkfSwgezB4NjAwNCwgMHgwMGUwfSwgezB4NjA2NywgMHgwMGUxfSwKKwl7MHg2MDA0LCAweDAwZGF9LCB7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MGYxLCAweDAwZGR9LCB7MHg2MDA0LCAweDAwZTB9LAorCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwMDAsIDB4MDAxMn0sIHsweDYwMDAsIDB4MDAxMX0sIHsweDYwMTEsIDB4MDAxN30sCisJezB4NjA3NSwgMHgwMDE4fSwgezB4NjAwMSwgMHgwMDE5fSwgezB4NjA5NywgMHgwMDFhfSwgezB4NjAzNiwgMHgwMDMyfSwKKwl7MHg2MGJiLCAweDAwNGZ9LCB7MHg2MDU3LCAweDAwNWF9LCB7MHg2MDljLCAweDAwNTB9LCB7MHg2MDgwLCAweDAwNmR9LAorCXsweDYwOTIsIDB4MDAyNn0sIHsweDYwZmYsIDB4MDAyMH0sIHsweDYwMDAsIDB4MDAyN30sIHsweDYwMDAsIDB4MDBmZn0sCisJezB4NjBjOCwgMHgwMGMwfSwgezB4NjA5NiwgMHgwMGMxfSwgezB4NjAwMCwgMHgwMDhjfSwgezB4NjAzZCwgMHgwMDg2fSwKKwl7MHg2MDg5LCAweDAwNTB9LCB7MHg2MDkwLCAweDAwNTF9LCB7MHg2MDJjLCAweDAwNTJ9LCB7MHg2MDAwLCAweDAwNTN9LAorCXsweDYwMDAsIDB4MDA1NH0sIHsweDYwODgsIDB4MDA1NX0sIHsweDYwMDAsIDB4MDA1N30sIHsweDYwYTAsIDB4MDA1YX0sCisJezB4NjA3OCwgMHgwMDVifSwgezB4NjAwMCwgMHgwMDVjfSwgezB4NjAwNCwgMHgwMGQzfSwgezB4NjAwMCwgMHgwMGUwfSwKKwl7MHg2MGZmLCAweDAwZGR9LCB7MHg2MGExLCAweDAwNWF9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsXzgwMFtdID0geworCXsweDYwMDAsIDB4MDBmZn0sIHsweDYwZjEsIDB4MDBkZH0sIHsweDYwMDQsIDB4MDBlMH0sIHsweDYwNjcsIDB4MDBlMX0sCisJezB4NjAwNCwgMHgwMGRhfSwgezB4NjAwMCwgMHgwMGZmfSwgezB4NjBmMSwgMHgwMGRkfSwgezB4NjAwNCwgMHgwMGUwfSwKKwl7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDQwLCAweDAwMTJ9LCB7MHg2MDAwLCAweDAwMTF9LCB7MHg2MDExLCAweDAwMTd9LAorCXsweDYwNDMsIDB4MDAxOH0sIHsweDYwMDAsIDB4MDAxOX0sIHsweDYwNGIsIDB4MDAxYX0sIHsweDYwMDksIDB4MDAzMn0sCisJezB4NjBjYSwgMHgwMDRmfSwgezB4NjBhOCwgMHgwMDUwfSwgezB4NjAwMCwgMHgwMDZkfSwgezB4NjAzOCwgMHgwMDNkfSwKKwl7MHg2MGM4LCAweDAwMzV9LCB7MHg2MDAwLCAweDAwMjJ9LCB7MHg2MDkyLCAweDAwMjZ9LCB7MHg2MGZmLCAweDAwMjB9LAorCXsweDYwMDAsIDB4MDAyN30sIHsweDYwMDAsIDB4MDBmZn0sIHsweDYwNjQsIDB4MDBjMH0sIHsweDYwNGIsIDB4MDBjMX0sCisJezB4NjAwMCwgMHgwMDhjfSwgezB4NjAxZCwgMHgwMDg2fSwgezB4NjA4MiwgMHgwMGQzfSwgezB4NjAwMCwgMHgwMGUwfSwKKwl7MHg2MGZmLCAweDAwZGR9LCB7MHg2MDIwLCAweDAwOGN9LCB7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDQ0LCAweDAwMTh9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX2JpZ19hW10gPSB7CisJezB4MDAwMiwgMHgwMGMxfSwgezB4NjAwMCwgMHgwMGZmfSwgezB4NjBmMSwgMHgwMGRkfSwgezB4NjAwNCwgMHgwMGUwfSwKKwl7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDAwLCAweDAwMTJ9LCB7MHg2MDAwLCAweDAwMDB9LCB7MHg2MDAwLCAweDAwNDV9LAorCXsweDYwMDAsIDB4MDAxMH0sIHsweDYwMDAsIDB4MDAxMX0sIHsweDYwMTEsIDB4MDAxN30sIHsweDYwNzUsIDB4MDAxOH0sCisJezB4NjAwMSwgMHgwMDE5fSwgezB4NjA5NywgMHgwMDFhfSwgezB4NjAzNiwgMHgwMDMyfSwgezB4NjBiYiwgMHgwMDRmfSwKKwl7MHg2MDljLCAweDAwNTB9LCB7MHg2MDU3LCAweDAwNWF9LCB7MHg2MDgwLCAweDAwNmR9LCB7MHg2MDQzLCAweDAwMGZ9LAorCXsweDYwOGYsIDB4MDAwM30sIHsweDYwMDUsIDB4MDA3Y30sIHsweDYwODEsIDB4MDAyNn0sIHsweDYwMDAsIDB4MDBmZn0sCisJezB4NjBjOCwgMHgwMGMwfSwgezB4NjA5NiwgMHgwMGMxfSwgezB4NjAwMCwgMHgwMDhjfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9iaWdfYltdID0geworCXsweDYwM2QsIDB4MDA4Nn0sIHsweDYwMDAsIDB4MDA1MH0sIHsweDYwOTAsIDB4MDA1MX0sIHsweDYwMmMsIDB4MDA1Mn0sCisJezB4NjAwMCwgMHgwMDUzfSwgezB4NjAwMCwgMHgwMDU0fSwgezB4NjA4OCwgMHgwMDU1fSwgezB4NjAwMCwgMHgwMDU3fSwKKwl7MHg2MDQwLCAweDAwNWF9LCB7MHg2MGYwLCAweDAwNWJ9LCB7MHg2MDAxLCAweDAwNWN9LCB7MHg2MDgyLCAweDAwZDN9LAorCXsweDYwMDAsIDB4MDA4ZX0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfYmlnX2NbXSA9IHsKKwl7MHg2MDA0LCAweDAwZGF9LCB7MHg2MDAwLCAweDAwZTB9LCB7MHg2MDY3LCAweDAwZTF9LCB7MHg2MGZmLCAweDAwZGR9LAorCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwMDAsIDB4MDBmZn0sIHsweDYwZjEsIDB4MDBkZH0sIHsweDYwMDQsIDB4MDBlMH0sCisJezB4NjAwMSwgMHgwMGZmfSwgezB4NjAwMCwgMHgwMDExfSwgezB4NjAwMCwgMHgwMGZmfSwgezB4NjAxMCwgMHgwMGM3fSwKKwl7MHg2MDAwLCAweDAwOTJ9LCB7MHg2MDA2LCAweDAwOTN9LCB7MHg2MGUzLCAweDAwOTN9LCB7MHg2MDA1LCAweDAwOTN9LAorCXsweDYwMDUsIDB4MDA5M30sIHsweDYwZWQsIDB4MDBjM30sIHsweDYwMDAsIDB4MDBhNH0sIHsweDYwZDAsIDB4MDA4N30sCisJezB4NjAwMywgMHgwMDk2fSwgezB4NjAwYywgMHgwMDk3fSwgezB4NjAyNCwgMHgwMDk3fSwgezB4NjAzMCwgMHgwMDk3fSwKKwl7MHg2MDI4LCAweDAwOTd9LCB7MHg2MDI2LCAweDAwOTd9LCB7MHg2MDAyLCAweDAwOTd9LCB7MHg2MDAxLCAweDAwZmZ9LAorCXsweDYwNDMsIDB4MDAwZn0sIHsweDYwOGYsIDB4MDAwM30sIHsweDYwMDAsIDB4MDAyZH0sIHsweDYwMDAsIDB4MDAyZX0sCisJezB4NjAwYSwgMHgwMDIyfSwgezB4NjAwMiwgMHgwMDcwfSwgezB4NjAwOCwgMHgwMDE0fSwgezB4NjA0OCwgMHgwMDE0fSwKKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDAwLCAweDAwZTB9LCB7MHg2MGZmLCAweDAwZGR9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3Bvc3RfdW5zZXRfYWx0W10gPSB7CisJezB4MDA2YSwgMHgwMDBkfSwgezB4NjAwMSwgMHgwMGZmfSwgezB4NjA4MSwgMHgwMDI2fSwgezB4NjAwMCwgMHgwMDAwfSwKKwl7MHg2MDAwLCAweDAwNDV9LCB7MHg2MDAwLCAweDAwMTB9LCB7MHg2MDY4LCAweDAwMGR9LAorCXs1MCwgMHhmZmZmfSwKKwl7MHgwMDIxLCAweDAwMDB9LAorfTsKKworc3RhdGljIGludCAgb3YyNjQwX2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3YyNjQwX2NvbmZpZ3VyZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG92MjY0MF9pbml0X3ByZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG92MjY0MF9pbml0X3Bvc3RfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBvdjI2NDBfcG9zdF91bnNldF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG92MjY0MF9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit2b2lkIG92MjY0MF9pbml0X3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+dmN1ci5iYWNrbGlnaHQgID0gIDMyOworCXNkLT52Y3VyLmJyaWdodG5lc3MgPSAgIDA7CisJc2QtPnZjdXIuc2hhcnBuZXNzICA9ICAgNjsKKwlzZC0+dmN1ci5jb250cmFzdCAgID0gICAwOworCXNkLT52Y3VyLmdhbW1hICAgICAgPSAgMzI7CisJc2QtPnZjdXIuaHVlICAgICAgICA9ICAgMDsKKwlzZC0+dmN1ci5zYXR1cmF0aW9uID0gMTI4OworCXNkLT52Y3VyLndoaXRlYmFsICAgPSAgNjQ7CisKKwlzZC0+dm1heC5iYWNrbGlnaHQgID0gIDY0OworCXNkLT52bWF4LmJyaWdodG5lc3MgPSAyNTU7CisJc2QtPnZtYXguc2hhcnBuZXNzICA9ICAzMTsKKwlzZC0+dm1heC5jb250cmFzdCAgID0gMjU1OworCXNkLT52bWF4LmdhbW1hICAgICAgPSAgNjQ7CisJc2QtPnZtYXguaHVlICAgICAgICA9IDI1NSArIDE7CisJc2QtPnZtYXguc2F0dXJhdGlvbiA9IDI1NTsKKwlzZC0+dm1heC53aGl0ZWJhbCAgID0gMTI4OworCXNkLT52bWF4Lm1pcnJvciAgICAgPSAwOworCXNkLT52bWF4LmZsaXAgICAgICAgPSAwOworCXNkLT52bWF4LkFDNTBIeiAgICAgPSAwOworCisJc2QtPmRldl9jYW1lcmFfc2V0dGluZ3MgPSBvdjI2NDBfY2FtZXJhX3NldHRpbmdzOworCXNkLT5kZXZfaW5pdF9hdF9zdGFydHVwID0gb3YyNjQwX2luaXRfYXRfc3RhcnR1cDsKKwlzZC0+ZGV2X2NvbmZpZ3VyZV9hbHQgICA9IG92MjY0MF9jb25maWd1cmVfYWx0OworCXNkLT5kZXZfaW5pdF9wcmVfYWx0ICAgID0gb3YyNjQwX2luaXRfcHJlX2FsdDsKKwlzZC0+ZGV2X3Bvc3RfdW5zZXRfYWx0ICA9IG92MjY0MF9wb3N0X3Vuc2V0X2FsdDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGNvbW1vbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1vbiwgQVJSQVlfU0laRSh0YmxfY29tbW9uKSk7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfYXRfc3RhcnR1cCwKKwkJCUFSUkFZX1NJWkUodGJsX2luaXRfYXRfc3RhcnR1cCkpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwgMTIsIGRhdF9pbml0MSk7CisKKwljb21tb24oZ3NwY2FfZGV2KTsKKworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDAwMDAsIDB4MDAwNiwgMSwgZGF0X2luaXQyKTsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMGVmLCAweDAwMDYsIDAsIE5VTEwpOworCisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDAwLCAxLCBkYXRfaW5pdDMpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNTEsIDB4MDAwMCwgMCwgTlVMTCk7CisvKgljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDExLCAweDAwMDAsIDB4MDAwMCwgMCwgTlVMTCk7ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjI2NDBfaW5pdF9wcmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+dm9sZC5iYWNrbGlnaHQgID0gLTE7CisJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IC0xOworCXNkLT52b2xkLnNoYXJwbmVzcyAgPSAtMTsKKwlzZC0+dm9sZC5jb250cmFzdCAgID0gLTE7CisJc2QtPnZvbGQuc2F0dXJhdGlvbiA9IC0xOworCXNkLT52b2xkLmdhbW1hICAgID0gLTE7CisJc2QtPnZvbGQuaHVlICAgICAgPSAtMTsKKwlzZC0+dm9sZC53aGl0ZWJhbCA9IC0xOworCisJb3YyNjQwX2luaXRfcG9zdF9hbHQoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92MjY0MF9pbml0X3Bvc3RfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCXMzMiBuOyAvKiByZXNlcnZlZCBmb3IgRkVUQ0ggbWFjcm9zICovCisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMSwgMHgwMDAwLCAwLCBOVUxMKTsKKworCW4gPSBmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9hLAorCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9hKSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwgMTIsIGRhdF9wb3N0KTsKKwljb21tb24oZ3NwY2FfZGV2KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2EsCisJCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9hKSwgbik7CisKKwlzd2l0Y2ggKHJlc28pIHsKKwljYXNlIElNQUdFXzY0MDoKKwkJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF82NDAsIEFSUkFZX1NJWkUodGJsXzY0MCkpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAxMiwgZGF0XzY0MCk7CisJCWJyZWFrOworCisJY2FzZSBJTUFHRV84MDA6CisJCW4gPSBmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfODAwLCBBUlJBWV9TSVpFKHRibF84MDApKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwgMTIsIGRhdF84MDApOworCQlicmVhazsKKworCWNhc2UgSU1BR0VfMTYwMDoKKwljYXNlIElNQUdFXzEyODA6CisJCW4gPSBmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfYmlnX2EsIEFSUkFZX1NJWkUodGJsX2JpZ19hKSk7CisKKwkJaWYgKHJlc28gPT0gSU1BR0VfMTI4MCkgeworCQkJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9iaWdfYiwKKwkJCQkJQVJSQVlfU0laRSh0YmxfYmlnX2IpKTsKKwkJfSBlbHNlIHsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDFkLCAweDAwODYsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDEsIDB4MDBkNywgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjA4MiwgMHgwMGQzLCAwLCBOVUxMKTsKKwkJfQorCisJCW4gPSBmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfYmlnX2MsIEFSUkFZX1NJWkUodGJsX2JpZ19jKSk7CisKKwkJaWYgKHJlc28gPT0gSU1BR0VfMTI4MCkgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDEsIDB4MDBmZiwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLAorCQkJCQkxMiwgZGF0XzEyODApOworCQl9IGVsc2UgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMjAsIDB4MDA4YywgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMSwgMHgwMGZmLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDc2LCAweDAwMTgsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwKKwkJCQkJMTIsIGRhdF8xNjAwKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwluID0gZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYiwKKwkJCUFSUkFZX1NJWkUodGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYikpOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDAwMDAsIDB4MDAwMCwgMSwgYzUwKTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2IsCisJCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9iKSwgbik7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDA0LCAxLCBjMjgpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYiwKKwkJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2IpLCBuKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMDQsIDEsIGNhOCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9iLAorCQkJCUFSUkFZX1NJWkUodGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYiksIG4pOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDAwMDAsIDB4MDAwMCwgMSwgYzUwKTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2IsCisJCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9iKSwgbik7CisKKwlvdjI2NDBfY2FtZXJhX3NldHRpbmdzKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjI2NDBfY29uZmlndXJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKworCXN3aXRjaCAocmVzbykgeworCWNhc2UgSU1BR0VfNjQwOgorCQlnc3BjYV9kZXYtPmFsdCA9IDMgKyAxOworCQlicmVhazsKKworCWNhc2UgSU1BR0VfODAwOgorCWNhc2UgSU1BR0VfMTI4MDoKKwljYXNlIElNQUdFXzE2MDA6CisJCWdzcGNhX2Rldi0+YWx0ID0gMSArIDE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjI2NDBfY2FtZXJhX3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzMzIgYmFja2xpZ2h0ID0gc2QtPnZjdXIuYmFja2xpZ2h0OworCXMzMiBicmlnaHQgPSBzZC0+dmN1ci5icmlnaHRuZXNzOworCXMzMiBzaGFycCAgPSBzZC0+dmN1ci5zaGFycG5lc3M7CisJczMyIGdhbSAgICA9IHNkLT52Y3VyLmdhbW1hOworCXMzMiBjbnRyICAgPSBzZC0+dmN1ci5jb250cmFzdDsKKwlzMzIgc2F0ICAgID0gc2QtPnZjdXIuc2F0dXJhdGlvbjsKKwlzMzIgaHVlICAgID0gc2QtPnZjdXIuaHVlOworCXMzMiB3YmFsICAgPSBzZC0+dmN1ci53aGl0ZWJhbDsKKworCWlmIChiYWNrbGlnaHQgIT0gc2QtPnZvbGQuYmFja2xpZ2h0KSB7CisJCWlmIChiYWNrbGlnaHQgPCAwIHx8IGJhY2tsaWdodCA+IHNkLT52bWF4LmJhY2tsaWdodCkKKwkJCWJhY2tsaWdodCA9IDA7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDEgICAgICAgICAgICAgICAgICwgMHgwMGZmLAorCQkJCTAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAxZiArIGJhY2tsaWdodCAgICAgLCAweDAwMjQsCisJCQkJMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDFmICsgYmFja2xpZ2h0IC0gMTAsIDB4MDAyNSwKKwkJCQkwLCBOVUxMKTsKKwkJLyogTm8gc2QtPnZvbGQuYmFja2xpZ2h0PWJhY2tsaWdodDsgKHRvIGJlIGRvbmUgYWdhaW4gbGF0ZXIpICovCisJfQorCisJaWYgKGJyaWdodCAhPSBzZC0+dm9sZC5icmlnaHRuZXNzKSB7CisJCXNkLT52b2xkLmJyaWdodG5lc3MgPSBicmlnaHQ7CisJCWlmIChicmlnaHQgPCAwIHx8IGJyaWdodCA+IHNkLT52bWF4LmJyaWdodG5lc3MpCisJCQlicmlnaHQgPSAwOworCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAwICAgICAgICAgLCAweDAwZmYsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwOSAgICAgICAgICwgMHgwMDdjLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgKyBicmlnaHQsIDB4MDA3ZCwgMCwgTlVMTCk7CisJfQorCisJaWYgKHdiYWwgIT0gc2QtPnZvbGQud2hpdGViYWwpIHsKKwkJc2QtPnZvbGQud2hpdGViYWwgPSB3YmFsOworCQlpZiAod2JhbCA8IDAgfHwgd2JhbCA+IHNkLT52bWF4LndoaXRlYmFsKQorCQkJd2JhbCA9IDA7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgICAgICAgLCAweDAwZmYsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMyAgICAgICAsIDB4MDA3YywgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAwICsgd2JhbCwgMHgwMDdkLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoY250ciAhPSBzZC0+dm9sZC5jb250cmFzdCkgeworCQlzZC0+dm9sZC5jb250cmFzdCA9IGNudHI7CisJCWlmIChjbnRyIDwgMCB8fCBjbnRyID4gc2QtPnZtYXguY29udHJhc3QpCisJCQljbnRyID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCAgICAgICAsIDB4MDBmZiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDA3ICAgICAgICwgMHgwMDdjLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgKyBjbnRyLCAweDAwN2QsIDAsIE5VTEwpOworCX0KKworCWlmIChzYXQgIT0gc2QtPnZvbGQuc2F0dXJhdGlvbikgeworCQlzZC0+dm9sZC5zYXR1cmF0aW9uID0gc2F0OworCQlpZiAoc2F0IDwgMCB8fCBzYXQgPiBzZC0+dm1heC5zYXR1cmF0aW9uKQorCQkJc2F0ID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCAgICAgICwgMHgwMGZmLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDEgICAgICAsIDB4MDA3YywgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAwICsgc2F0LCAweDAwN2QsIDAsIE5VTEwpOworCX0KKworCWlmIChzaGFycCAhPSBzZC0+dm9sZC5zaGFycG5lc3MpIHsKKwkJc2QtPnZvbGQuc2hhcnBuZXNzID0gc2hhcnA7CisJCWlmIChzaGFycCA8IDAgfHwgc2hhcnAgPiBzZC0+dm1heC5zaGFycG5lc3MpCisJCQlzaGFycCA9IDA7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgICAgICAgICwgMHgwMGZmLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDEgICAgICAgICwgMHgwMDkyLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwYzAgKyBzaGFycCwgMHgwMDkzLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoaHVlICE9IHNkLT52b2xkLmh1ZSkgeworCQlzZC0+dm9sZC5odWUgPSBodWU7CisJCWlmIChodWUgPCAwIHx8IGh1ZSA+IHNkLT52bWF4Lmh1ZSkKKwkJCWh1ZSA9IDA7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgICAgICwgMHgwMGZmLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDIgICAgICwgMHgwMDdjLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgKyBodWUgKiAoaHVlIDwgMjU1KSwgMHgwMDdkLAorCQkJCTAsIE5VTEwpOworCQlpZiAoaHVlID49IHNkLT52bWF4Lmh1ZSkKKwkJCXNkLT5zd2FwUkIgPSAxOworCQllbHNlCisJCQlzZC0+c3dhcFJCID0gMDsKKwl9CisKKwlpZiAoZ2FtICE9IHNkLT52b2xkLmdhbW1hKSB7CisJCXNkLT52b2xkLmdhbW1hID0gZ2FtOworCQlpZiAoZ2FtIDwgMCB8fCBnYW0gPiBzZC0+dm1heC5nYW1tYSkKKwkJCWdhbSA9IDA7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgICAgICAsIDB4MDBmZiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDA4ICAgICAgLCAweDAwN2MsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCArIGdhbSwgMHgwMDdkLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoYmFja2xpZ2h0ICE9IHNkLT52b2xkLmJhY2tsaWdodCkgeworCQlzZC0+dm9sZC5iYWNrbGlnaHQgPSBiYWNrbGlnaHQ7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDEgICAgICAgICAgICAgICAgICwgMHgwMGZmLAorCQkJCTAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAxZiArIGJhY2tsaWdodCAgICAgLCAweDAwMjQsCisJCQkJMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDFmICsgYmFja2xpZ2h0IC0gMTAsIDB4MDAyNSwKKwkJCQkwLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3YyNjQwX3Bvc3RfdW5zZXRfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsKKwltc2xlZXAoMjApOworCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9wb3N0X3Vuc2V0X2FsdCwKKwkJCUFSUkFZX1NJWkUodGJsX3Bvc3RfdW5zZXRfYWx0KSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW92OTY1NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1vdjk2NTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGEzMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1vdjk2NTUuYwpAQCAtMCwwICsxLDMzNyBAQAorLyogQGZpbGUgZ2w4NjAtb3Y5NjU1LmMKKyAqIEBhdXRob3IgT2xpdmllciBMT1JJTiwgZnJvbSBsb2dzIGRvbmUgYnkgU2ltb24gKFN1cjMpIGFuZCBBbG1pZ2h1cnQKKyAqIG9uIGRzZCdzIHdlYmxvZworICogQGRhdGUgMjAwOS0wOC0yNworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogU2Vuc29yIDogT1Y5NjU1ICovCisKKyNpbmNsdWRlICJnbDg2MC5oIgorCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfaW5pdF9hdF9zdGFydHVwW10gPSB7CisJezB4MDAwMCwgMHgwMDAwfSwgezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwOCwgMHgwMGMwfSwgezB4MDAwMSwgMHgwMGMxfSwKKwl7MHgwMDAxLCAweDAwYzJ9LCB7MHgwMDIwLCAweDAwMDZ9LCB7MHgwMDZhLCAweDAwMGR9LAorCisJezB4MDA0MCwgMHgwMDAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9jb21tbW9uW10gPSB7CisJezB4MDA0MSwgMHgwMDAwfSwgezB4MDA2YSwgMHgwMDA3fSwgezB4MDA2MywgMHgwMDA2fSwgezB4MDA2YSwgMHgwMDBkfSwKKwl7MHgwMDAwLCAweDAwYzB9LCB7MHgwMDEwLCAweDAwMTB9LCB7MHgwMDAxLCAweDAwYzF9LCB7MHgwMDQxLCAweDAwYzJ9LAorCXsweDAwMDQsIDB4MDBkOH0sIHsweDAwMTIsIDB4MDAwNH0sIHsweDAwMDAsIDB4MDA1OH0sIHsweDAwNDAsIDB4MDAwMH0sCisJezB4MDBmMywgMHgwMDA2fSwgezB4MDA1OCwgMHgwMDAwfSwgezB4MDA0OCwgMHgwMDAwfSwgezB4MDA2MSwgMHgwMDAwfSwKK307CisKK3N0YXRpYyBzMzIgdGJsX2xlbmd0aFtdID0gezEyLCA1NiwgNTIsIDU0LCA1NiwgNDIsIDMyLCAxMn07CisKK3N0YXRpYyB1OCAqdGJsXzY0MFtdID0geworCSJceDAwXHg0MFx4MDdceDZhXHgwNlx4ZjNceDBkXHg2YSIgIlx4MTBceDEwXHhjMVx4MDEiCisJLAorCSJceDEyXHg4MFx4MDBceDAwXHgwMVx4OThceDAyXHg4MCIgIlx4MDNceDEyXHgwNFx4MDNceDBiXHg1N1x4MGVceDYxIgorCSJceDBmXHg0Mlx4MTFceDAxXHgxMlx4NjBceDEzXHgwMCIgIlx4MTRceDNhXHgxNlx4MjRceDE3XHgxNFx4MThceDAwIgorCSJceDE5XHgwMVx4MWFceDNkXHgxZVx4MDRceDI0XHgzYyIgIlx4MjVceDM2XHgyNlx4NzJceDI3XHgwOFx4MjhceDA4IgorCSJceDI5XHgxNVx4MmFceDAwXHgyYlx4MDBceDJjXHgwOCIKKwksCisJIlx4MzJceGZmXHgzM1x4MDBceDM0XHgzZFx4MzVceDAwIiAiXHgzNlx4ZmFceDM4XHg3Mlx4MzlceDU3XHgzYVx4MDAiCisJIlx4M2JceDBjXHgzZFx4OTlceDNlXHgwY1x4M2ZceGMxIiAiXHg0MFx4YzBceDQxXHgwMFx4NDJceGMwXHg0M1x4MGEiCisJIlx4NDRceGYwXHg0NVx4NDZceDQ2XHg2Mlx4NDdceDJhIiAiXHg0OFx4M2NceDRhXHhlZVx4NGJceGU3XHg0Y1x4ZTciCisJIlx4NGRceGU3XHg0ZVx4ZTciCisJLAorCSJceDRmXHg5OFx4NTBceDk4XHg1MVx4MDBceDUyXHgyOCIgIlx4NTNceDcwXHg1NFx4OThceDU4XHgxYVx4NTlceDg1IgorCSJceDVhXHhhOVx4NWJceDY0XHg1Y1x4ODRceDVkXHg1MyIgIlx4NWVceDBlXHg1Zlx4ZjBceDYwXHhmMFx4NjFceGYwIgorCSJceDYyXHgwMFx4NjNceDAwXHg2NFx4MDJceDY1XHgyMCIgIlx4NjZceDAwXHg2OVx4MGFceDZiXHg1YVx4NmNceDA0IgorCSJceDZkXHg1NVx4NmVceDAwXHg2Zlx4OWQiCisJLAorCSJceDcwXHgxNVx4NzFceDc4XHg3Mlx4MDBceDczXHgwMCIgIlx4NzRceDNhXHg3NVx4MzVceDc2XHgwMVx4NzdceDAyIgorCSJceDdhXHgyNFx4N2JceDA0XHg3Y1x4MDdceDdkXHgxMCIgIlx4N2VceDI4XHg3Zlx4MzZceDgwXHg0NFx4ODFceDUyIgorCSJceDgyXHg2MFx4ODNceDZjXHg4NFx4NzhceDg1XHg4YyIgIlx4ODZceDllXHg4N1x4YmJceDg4XHhkMlx4ODlceGU1IgorCSJceDhhXHgyM1x4OGNceDhkXHg5MFx4N2NceDkxXHg3YiIKKwksCisJIlx4OWRceDAyXHg5ZVx4MDJceDlmXHg3NFx4YTBceDczIiAiXHhhMVx4NDBceGE0XHg1MFx4YTVceDY4XHhhNlx4NzAiCisJIlx4YThceGMxXHhhOVx4ZWZceGFhXHg5Mlx4YWJceDA0IiAiXHhhY1x4ODBceGFkXHg4MFx4YWVceDgwXHhhZlx4ODAiCisJIlx4YjJceGYyXHhiM1x4MjBceGI0XHgyMFx4YjVceDAwIiAiXHhiNlx4YWYiCisJLAorCSJceGJiXHhhZVx4YmNceDRmXHhiZFx4NGVceGJlXHg2YSIgIlx4YmZceDY4XHhjMFx4YWFceGMxXHhjMFx4YzJceDAxIgorCSJceGMzXHg0ZVx4YzZceDg1XHhjN1x4ODFceGM5XHhlMCIgIlx4Y2FceGU4XHhjYlx4ZjBceGNjXHhkOFx4Y2RceDkzIgorCSwKKwkiXHhkMFx4MDFceGQxXHgwOFx4ZDJceGUwXHhkM1x4MDEiICJceGQ0XHgxMFx4ZDVceDgwIgorfTsKKworc3RhdGljIHU4ICp0YmxfODAwW10gPSB7CisJIlx4MDBceDQwXHgwN1x4NmFceDA2XHhmM1x4MGRceDZhIiAiXHgxMFx4MTBceGMxXHgwMSIKKwksCisJIlx4MTJceDgwXHgwMFx4MDBceDAxXHg5OFx4MDJceDgwIiAiXHgwM1x4MTJceDA0XHgwMVx4MGJceDU3XHgwZVx4NjEiCisJIlx4MGZceDQyXHgxMVx4MDBceDEyXHgwMFx4MTNceDAwIiAiXHgxNFx4M2FceDE2XHgyNFx4MTdceDFiXHgxOFx4YmIiCisJIlx4MTlceDAxXHgxYVx4ODFceDFlXHgwNFx4MjRceDNjIiAiXHgyNVx4MzZceDI2XHg3Mlx4MjdceDA4XHgyOFx4MDgiCisJIlx4MjlceDE1XHgyYVx4MDBceDJiXHgwMFx4MmNceDA4IgorCSwKKwkiXHgzMlx4YTRceDMzXHgwMFx4MzRceDNkXHgzNVx4MDAiICJceDM2XHhmOFx4MzhceDcyXHgzOVx4NTdceDNhXHgwMCIKKwkiXHgzYlx4MGNceDNkXHg5OVx4M2VceDBjXHgzZlx4YzIiICJceDQwXHhjMFx4NDFceDAwXHg0Mlx4YzBceDQzXHgwYSIKKwkiXHg0NFx4ZjBceDQ1XHg0Nlx4NDZceDYyXHg0N1x4MmEiICJceDQ4XHgzY1x4NGFceGVjXHg0Ylx4ZThceDRjXHhlOCIKKwkiXHg0ZFx4ZThceDRlXHhlOCIKKwksCisJIlx4NGZceDk4XHg1MFx4OThceDUxXHgwMFx4NTJceDI4IiAiXHg1M1x4NzBceDU0XHg5OFx4NThceDFhXHg1OVx4ODUiCisJIlx4NWFceGE5XHg1Ylx4NjRceDVjXHg4NFx4NWRceDUzIiAiXHg1ZVx4MGVceDVmXHhmMFx4NjBceGYwXHg2MVx4ZjAiCisJIlx4NjJceDAwXHg2M1x4MDBceDY0XHgwMlx4NjVceDIwIiAiXHg2Nlx4MDBceDY5XHgwMlx4NmJceDVhXHg2Y1x4MDQiCisJIlx4NmRceDU1XHg2ZVx4MDBceDZmXHg5ZCIKKwksCisJIlx4NzBceDA4XHg3MVx4NzhceDcyXHgwMFx4NzNceDAxIiAiXHg3NFx4M2FceDc1XHgzNVx4NzZceDAxXHg3N1x4MDIiCisJIlx4N2FceDI0XHg3Ylx4MDRceDdjXHgwN1x4N2RceDEwIiAiXHg3ZVx4MjhceDdmXHgzNlx4ODBceDQ0XHg4MVx4NTIiCisJIlx4ODJceDYwXHg4M1x4NmNceDg0XHg3OFx4ODVceDhjIiAiXHg4Nlx4OWVceDg3XHhiYlx4ODhceGQyXHg4OVx4ZTUiCisJIlx4OGFceDIzXHg4Y1x4MGRceDkwXHg5MFx4OTFceDkwIgorCSwKKwkiXHg5ZFx4MDJceDllXHgwMlx4OWZceDk0XHhhMFx4OTQiICJceGExXHgwMVx4YTRceDUwXHhhNVx4NjhceGE2XHg3MCIKKwkiXHhhOFx4YzFceGE5XHhlZlx4YWFceDkyXHhhYlx4MDQiICJceGFjXHg4MFx4YWRceDgwXHhhZVx4ODBceGFmXHg4MCIKKwkiXHhiMlx4ZjJceGIzXHgyMFx4YjRceDIwXHhiNVx4MDAiICJceGI2XHhhZiIKKwksCisJIlx4YmJceGFlXHhiY1x4MzhceGJkXHgzOVx4YmVceDAxIiAiXHhiZlx4MDFceGMwXHhlMlx4YzFceGMwXHhjMlx4MDEiCisJIlx4YzNceDRlXHhjNlx4ODVceGM3XHg4MVx4YzlceGUwIiAiXHhjYVx4ZThceGNiXHhmMFx4Y2NceGQ4XHhjZFx4OTMiCisJLAorCSJceGQwXHgyMVx4ZDFceDE4XHhkMlx4ZTBceGQzXHgwMSIgIlx4ZDRceDI4XHhkNVx4MDAiCit9OworCitzdGF0aWMgdTggYzA0W10gPSB7MHgwNH07CitzdGF0aWMgdTggZGF0X3Bvc3RfMVtdID0gIlx4MDRceDAwXHgxMFx4MjBceGExXHgwMFx4MDBceDAyIjsKK3N0YXRpYyB1OCBkYXRfcG9zdF8yW10gPSAiXHgxMFx4MTBceGMxXHgwMiI7CitzdGF0aWMgdTggZGF0X3Bvc3RfM1tdID0gIlx4MDRceDAwXHgxMFx4N2NceGExXHgwMFx4MDBceDA0IjsKK3N0YXRpYyB1OCBkYXRfcG9zdF80W10gPSAiXHgxMFx4MDJceGMxXHgwNiI7CitzdGF0aWMgdTggZGF0X3Bvc3RfNVtdID0gIlx4MDRceDAwXHgxMFx4N2JceGExXHgwMFx4MDBceDA4IjsKK3N0YXRpYyB1OCBkYXRfcG9zdF82W10gPSAiXHgxMFx4MTBceGMxXHgwNSI7CitzdGF0aWMgdTggZGF0X3Bvc3RfN1tdID0gIlx4MDRceDAwXHgxMFx4N2NceGExXHgwMFx4MDBceDA4IjsKK3N0YXRpYyB1OCBkYXRfcG9zdF84W10gPSAiXHgwNFx4MDBceDEwXHg3Y1x4YTFceDAwXHgwMFx4MDkiOworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfaW5pdF9wb3N0X2FsdFtdID0geworCXsweDYwMzIsIDB4MDBmZn0sIHsweDYwMzIsIDB4MDBmZn0sIHsweDYwMzIsIDB4MDBmZn0sIHsweDYwM2MsIDB4MDBmZn0sCisJezB4NjAwMywgMHgwMGZmfSwgezB4NjAzMiwgMHgwMGZmfSwgezB4NjAzMiwgMHgwMGZmfSwgezB4NjAwMSwgMHgwMGZmfSwKKwl7MHg2MDAwLCAweDgwMWV9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwNCwgMHgwMDFlfSwgezB4NjAwMCwgMHg4MDFlfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDQsIDB4MDAxZX0sIHsweDYwMTIsIDB4MDAwM30sIHsweDYwMDAsIDB4ODAxZX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDA0LCAweDAwMWV9LCB7MHg2MDAwLCAweDgwMWV9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwNCwgMHgwMDFlfSwgezB4NjAxMiwgMHgwMDAzfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDAsIDB4ODAxZX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDA0LCAweDAwMWV9LCB7MHg2MDAwLCAweDgwMWV9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwNCwgMHgwMDFlfSwgezB4NjAxMiwgMHgwMDAzfSwgezB4NjAwMCwgMHg4MDFlfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDQsIDB4MDAxZX0sIHsweDYwMDAsIDB4ODAxZX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDA0LCAweDAwMWV9LCB7MHg2MDEyLCAweDAwMDN9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwMCwgMHg4MDFlfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDQsIDB4MDAxZX0sIHsweDYwMDAsIDB4ODAxZX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDA0LCAweDAwMWV9LCB7MHg2MDEyLCAweDAwMDN9LAorfTsKKworc3RhdGljIGludCAgb3Y5NjU1X2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3Y5NjU1X2NvbmZpZ3VyZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG92OTY1NV9pbml0X3ByZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG92OTY1NV9pbml0X3Bvc3RfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBvdjk2NTVfcG9zdF91bnNldF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG92OTY1NV9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit2b2lkIG92OTY1NV9pbml0X3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+dmN1ci5iYWNrbGlnaHQgID0gICAwOworCXNkLT52Y3VyLmJyaWdodG5lc3MgPSAxMjg7CisJc2QtPnZjdXIuc2hhcnBuZXNzICA9ICAgMDsKKwlzZC0+dmN1ci5jb250cmFzdCAgID0gICAwOworCXNkLT52Y3VyLmdhbW1hICAgICAgPSAgIDA7CisJc2QtPnZjdXIuaHVlICAgICAgICA9ICAgMDsKKwlzZC0+dmN1ci5zYXR1cmF0aW9uID0gICAwOworCXNkLT52Y3VyLndoaXRlYmFsICAgPSAgIDA7CisKKwlzZC0+dm1heC5iYWNrbGlnaHQgID0gICAwOworCXNkLT52bWF4LmJyaWdodG5lc3MgPSAyNTU7CisJc2QtPnZtYXguc2hhcnBuZXNzICA9ICAgMDsKKwlzZC0+dm1heC5jb250cmFzdCAgID0gICAwOworCXNkLT52bWF4LmdhbW1hICAgICAgPSAgIDA7CisJc2QtPnZtYXguaHVlICAgICAgICA9ICAgMCArIDE7CisJc2QtPnZtYXguc2F0dXJhdGlvbiA9ICAgMDsKKwlzZC0+dm1heC53aGl0ZWJhbCAgID0gICAwOworCXNkLT52bWF4Lm1pcnJvciAgICAgPSAwOworCXNkLT52bWF4LmZsaXAgICAgICAgPSAwOworCXNkLT52bWF4LkFDNTBIeiAgICAgPSAwOworCisJc2QtPmRldl9jYW1lcmFfc2V0dGluZ3MgPSBvdjk2NTVfY2FtZXJhX3NldHRpbmdzOworCXNkLT5kZXZfaW5pdF9hdF9zdGFydHVwID0gb3Y5NjU1X2luaXRfYXRfc3RhcnR1cDsKKwlzZC0+ZGV2X2NvbmZpZ3VyZV9hbHQgICA9IG92OTY1NV9jb25maWd1cmVfYWx0OworCXNkLT5kZXZfaW5pdF9wcmVfYWx0ICAgID0gb3Y5NjU1X2luaXRfcHJlX2FsdDsKKwlzZC0+ZGV2X3Bvc3RfdW5zZXRfYWx0ICA9IG92OTY1NV9wb3N0X3Vuc2V0X2FsdDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgb3Y5NjU1X2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfYXRfc3RhcnR1cCwKKwkJCUFSUkFZX1NJWkUodGJsX2luaXRfYXRfc3RhcnR1cCkpOworCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9jb21tbW9uLCBBUlJBWV9TSVpFKHRibF9jb21tbW9uKSk7CisvKgljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDExLCAweDAwMDAsIDB4MDAwMCwgMCwgTlVMTCk7Ki8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92OTY1NV9pbml0X3ByZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT52b2xkLmJyaWdodG5lc3MgPSAtMTsKKwlzZC0+dm9sZC5odWUgPSAtMTsKKworCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9jb21tbW9uLCBBUlJBWV9TSVpFKHRibF9jb21tbW9uKSk7CisKKwlvdjk2NTVfaW5pdF9wb3N0X2FsdChnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y5NjU1X2luaXRfcG9zdF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXMzMiByZXNvID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKHMzMikgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJczMyIG47IC8qIHJlc2VydmVkIGZvciBGRVRDSCBtYWNyb3MgKi8KKwlzMzIgaTsKKwl1OCAqKnRibDsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgNSwgMHgwMDAxLCAweDAwMDAsIDAsIE5VTEwpOworCisJdGJsID0gKHJlc28gPT0gSU1BR0VfNjQwKSA/IHRibF82NDAgOiB0YmxfODAwOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwKKwkJCXRibF9sZW5ndGhbMF0sIHRibFswXSk7CisJZm9yIChpID0gMTsgaSA8IDc7IGkrKykKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDYwMDAsIDB4MDIwMCwKKwkJCQl0YmxfbGVuZ3RoW2ldLCB0YmxbaV0pOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsCisJCQl0YmxfbGVuZ3RoWzddLCB0YmxbN10pOworCisJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCkpOworCisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDFlLCAxLCBjMDQpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMWUsIDEsIGMwNCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAxZSwgMSwgYzA0KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSwgbik7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDFlLCAxLCBjMDQpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4NjAwMCwgMHgwMjAwLCA4LCBkYXRfcG9zdF8xKTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSwgbik7CisKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMWUsIDEsIGMwNCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAxZSwgMSwgYzA0KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSwgbik7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDFlLCAxLCBjMDQpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMWUsIDEsIGMwNCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg2MDAwLCAweDAyMDAsIDgsIGRhdF9wb3N0XzEpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAxZSwgMSwgYzA0KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSwgbik7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDFlLCAxLCBjMDQpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg2MDAwLCAweDAyMDAsIDgsIGRhdF9wb3N0XzEpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwgNCwgZGF0X3Bvc3RfMik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDYwMDAsIDB4MDIwMCwgOCwgZGF0X3Bvc3RfMyk7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCA0LCBkYXRfcG9zdF80KTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4NjAwMCwgMHgwMjAwLCA4LCBkYXRfcG9zdF81KTsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsIDQsIGRhdF9wb3N0XzYpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg2MDAwLCAweDAyMDAsIDgsIGRhdF9wb3N0XzcpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDYwMDAsIDB4MDIwMCwgOCwgZGF0X3Bvc3RfOCk7CisKKwlvdjk2NTVfY2FtZXJhX3NldHRpbmdzKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjk2NTVfY29uZmlndXJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKworCXN3aXRjaCAocmVzbykgeworCWNhc2UgSU1BR0VfNjQwOgorCQlnc3BjYV9kZXYtPmFsdCA9IDEgKyAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdzcGNhX2Rldi0+YWx0ID0gMSArIDE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjk2NTVfY2FtZXJhX3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwl1OCBkYXRfYnJpZ2h0W10gPSAiXHgwNFx4MDBceDEwXHg3Y1x4YTFceDAwXHgwMFx4NzAiOworCisJczMyIGJyaWdodCA9IHNkLT52Y3VyLmJyaWdodG5lc3M7CisJczMyIGh1ZSAgICA9IHNkLT52Y3VyLmh1ZTsKKworCWlmIChicmlnaHQgIT0gc2QtPnZvbGQuYnJpZ2h0bmVzcykgeworCQlzZC0+dm9sZC5icmlnaHRuZXNzID0gYnJpZ2h0OworCQlpZiAoYnJpZ2h0IDwgMCB8fCBicmlnaHQgPiBzZC0+dm1heC5icmlnaHRuZXNzKQorCQkJYnJpZ2h0ID0gMDsKKworCQlkYXRfYnJpZ2h0WzNdID0gYnJpZ2h0OworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4NjAwMCwgMHgwMjAwLCA4LCBkYXRfYnJpZ2h0KTsKKwl9CisKKwlpZiAoaHVlICE9IHNkLT52b2xkLmh1ZSkgeworCQlzZC0+dm9sZC5odWUgPSBodWU7CisJCXNkLT5zd2FwUkIgPSAoaHVlICE9IDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvdjk2NTVfcG9zdF91bnNldF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgNSwgMHgwMDAwLCAweDAwMDAsIDAsIE5VTEwpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDYxLCAweDAwMDAsIDAsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZjU5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKQEAgLTAsMCArMSw3ODUgQEAKKy8qIEBmaWxlIGdsODYwLmMKKyAqIEBkYXRlIDIwMDktMDgtMjcKKyAqCisgKiBHZW5lc3lzIExvZ2ljIHdlYmNhbSB3aXRoIGdsODYwIHN1YmRyaXZlcnMKKyAqCisgKiBEcml2ZXIgYnkgT2xpdmllciBMb3JpbiA8by5sb3JpbkBsYXBvc3RlLm5ldD4KKyAqIEdTUENBIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKiBUaGFua3MgQlVHYWJ1bmRvIGFuZCBNYWxtb3N0b3NvIGZvciB5b3VyIGFtYXppbmcgaGVscCEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSAiZ3NwY2EuaCIKKyNpbmNsdWRlICJnbDg2MC5oIgorCitNT0RVTEVfQVVUSE9SKCJPbGl2aWVyIExvcmluIDxsb3JpbkBsYXBvc3RlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvR2VuZXN5cyBMb2dpYyBHTDg2MCBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PSBzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb25zID09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgKCpkZXZfaW5pdF9zZXR0aW5ncykoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKKworc3RhdGljIGludCAgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50ICBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBzZF9pc29jX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwgdTggKmRhdGEsIHMzMiBsZW4pOworc3RhdGljIHZvaWQgc2RfY2FsbGJhY2soc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKKworc3RhdGljIGludCBnbDg2MF9ndWVzc19zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCXMzMiB2ZW5kb3JfaWQsIHMzMiBwcm9kdWN0X2lkKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09IGRyaXZlciBvcHRpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzMzIgQUM1MEh6ID0gMHhmZjsKK21vZHVsZV9wYXJhbShBQzUwSHosIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKEFDNTBIeiwgIiBEb2VzIEFDIHBvd2VyIGZyZXF1ZW5jeSBpcyA1MEh6PyAoMC8xKSIpOworCitzdGF0aWMgY2hhciBzZW5zb3JbN107Cittb2R1bGVfcGFyYW1fc3RyaW5nKHNlbnNvciwgc2Vuc29yLCBzaXplb2Yoc2Vuc29yKSwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNlbnNvciwKKwkJIiBEcml2ZXIgc2Vuc29yICgnTUkxMzIwJy8nTUkyMDIwJy8nT1Y5NjU1Jy8nT1YyNjQwJy8nJykiKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09IHdlYmNhbSBjb250cm9scyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIEZ1bmN0aW9ucyB0byBnZXQgYW5kIHNldCBhIGNvbnRyb2wgdmFsdWUgKi8KKyNkZWZpbmUgU0RfU0VUR0VUKHRoZW5hbWUpIFwKK3N0YXRpYyBpbnQgc2Rfc2V0XyMjdGhlbmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiB2YWwpXAore1wKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7XAorXAorCXNkLT52Y3VyLnRoZW5hbWUgPSB2YWw7XAorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZylcCisJCXNkLT5kZXZfY2FtZXJhX3NldHRpbmdzKGdzcGNhX2Rldik7XAorCXJldHVybiAwO1wKK30gXAorc3RhdGljIGludCBzZF9nZXRfIyN0aGVuYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgczMyICp2YWwpXAore1wKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7XAorXAorCSp2YWwgPSBzZC0+dmN1ci50aGVuYW1lO1wKKwlyZXR1cm4gMDtcCit9CisKK1NEX1NFVEdFVChtaXJyb3IpCitTRF9TRVRHRVQoZmxpcCkKK1NEX1NFVEdFVChBQzUwSHopCitTRF9TRVRHRVQoYmFja2xpZ2h0KQorU0RfU0VUR0VUKGJyaWdodG5lc3MpCitTRF9TRVRHRVQoZ2FtbWEpCitTRF9TRVRHRVQoaHVlKQorU0RfU0VUR0VUKHNhdHVyYXRpb24pCitTRF9TRVRHRVQoc2hhcnBuZXNzKQorU0RfU0VUR0VUKHdoaXRlYmFsKQorU0RfU0VUR0VUKGNvbnRyYXN0KQorCisjZGVmaW5lIEdMODYwX05DVFJMUyAxMQorCisvKiBjb250cm9sIHRhYmxlICovCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNfbWkxMzIwW0dMODYwX05DVFJMU107CitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNfbWkyMDIwW0dMODYwX05DVFJMU107CitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNfbWkyMDIwYltHTDg2MF9OQ1RSTFNdOworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292MjY0MFtHTDg2MF9OQ1RSTFNdOworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292OTY1NVtHTDg2MF9OQ1RSTFNdOworCisjZGVmaW5lIFNFVF9NWV9DVFJMKHRoZWlkLCBcCisJdGhldHlwZSwgdGhlbGFiZWwsIHRoZW5hbWUpIFwKKwlpZiAoc2QtPnZtYXgudGhlbmFtZSAhPSAwKSB7XAorCQlzZF9jdHJsc1tuQ3RybHNdLnFjdHJsLmlkICAgPSB0aGVpZDtcCisJCXNkX2N0cmxzW25DdHJsc10ucWN0cmwudHlwZSA9IHRoZXR5cGU7XAorCQlzdHJjcHkoc2RfY3RybHNbbkN0cmxzXS5xY3RybC5uYW1lLCB0aGVsYWJlbCk7XAorCQlzZF9jdHJsc1tuQ3RybHNdLnFjdHJsLm1pbmltdW0gPSAwO1wKKwkJc2RfY3RybHNbbkN0cmxzXS5xY3RybC5tYXhpbXVtID0gc2QtPnZtYXgudGhlbmFtZTtcCisJCXNkX2N0cmxzW25DdHJsc10ucWN0cmwuZGVmYXVsdF92YWx1ZSA9IHNkLT52Y3VyLnRoZW5hbWU7XAorCQlzZF9jdHJsc1tuQ3RybHNdLnFjdHJsLnN0ZXAgPSBcCisJCQkoc2QtPnZtYXgudGhlbmFtZSA8IDE2KSA/IDEgOiBzZC0+dm1heC50aGVuYW1lLzE2O1wKKwkJc2RfY3RybHNbbkN0cmxzXS5zZXQgPSBzZF9zZXRfIyN0aGVuYW1lO1wKKwkJc2RfY3RybHNbbkN0cmxzXS5nZXQgPSBzZF9nZXRfIyN0aGVuYW1lO1wKKwkJbkN0cmxzKys7XAorCX0KKworc3RhdGljIGludCBnbDg2MF9idWlsZF9jb250cm9sX3RhYmxlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGN0cmwgKnNkX2N0cmxzOworCWludCBuQ3RybHMgPSAwOworCisJaWYgKF9NSTEzMjBfKQorCQlzZF9jdHJscyA9IHNkX2N0cmxzX21pMTMyMDsKKwllbHNlIGlmIChfTUkyMDIwXykKKwkJc2RfY3RybHMgPSBzZF9jdHJsc19taTIwMjA7CisJZWxzZSBpZiAoX01JMjAyMGJfKQorCQlzZF9jdHJscyA9IHNkX2N0cmxzX21pMjAyMGI7CisJZWxzZSBpZiAoX09WMjY0MF8pCisJCXNkX2N0cmxzID0gc2RfY3RybHNfb3YyNjQwOworCWVsc2UgaWYgKF9PVjk2NTVfKQorCQlzZF9jdHJscyA9IHNkX2N0cmxzX292OTY1NTsKKwllbHNlCisJCXJldHVybiAwOworCisJbWVtc2V0KHNkX2N0cmxzLCAwLCBHTDg2MF9OQ1RSTFMgKiBzaXplb2Yoc3RydWN0IGN0cmwpKTsKKworCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJCcmlnaHRuZXNzIiwgYnJpZ2h0bmVzcykKKwlTRVRfTVlfQ1RSTChWNEwyX0NJRF9TSEFSUE5FU1MsCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJTaGFycG5lc3MiLCBzaGFycG5lc3MpCisJU0VUX01ZX0NUUkwoVjRMMl9DSURfQ09OVFJBU1QsCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJDb250cmFzdCIsIGNvbnRyYXN0KQorCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX0dBTU1BLAorCQlWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLCAiR2FtbWEiLCBnYW1tYSkKKwlTRVRfTVlfQ1RSTChWNEwyX0NJRF9IVUUsCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJQYWxldHRlIiwgaHVlKQorCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJTYXR1cmF0aW9uIiwgc2F0dXJhdGlvbikKKwlTRVRfTVlfQ1RSTChWNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFLAorCQlWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLCAiV2hpdGUgQmFsLiIsIHdoaXRlYmFsKQorCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04sCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJCYWNrbGlnaHQiICwgYmFja2xpZ2h0KQorCisJU0VUX01ZX0NUUkwoVjRMMl9DSURfSEZMSVAsCisJCVY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sICJNaXJyb3IiLCBtaXJyb3IpCisJU0VUX01ZX0NUUkwoVjRMMl9DSURfVkZMSVAsCisJCVY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sICJGbGlwIiwgZmxpcCkKKwlTRVRfTVlfQ1RSTChWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKKwkJVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIjUwSHoiLCBBQzUwSHopCisKKwlyZXR1cm4gbkN0cmxzOworfQorCisvKj09PT09PT09PT09PT09PT09PT09IHN1ZC1kcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpc2F0aW9uID09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkxMzIwID0geworCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMTMyMCwKKwkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCisJLmNvbmZpZyAgICAgID0gc2RfY29uZmlnLAorCS5pbml0ICAgICAgICA9IHNkX2luaXQsCisJLmlzb2NfaW5pdCAgID0gc2RfaXNvY19pbml0LAorCS5zdGFydCAgICAgICA9IHNkX3N0YXJ0LAorCS5zdG9wMCAgICAgICA9IHNkX3N0b3AwLAorCS5wa3Rfc2NhbiAgICA9IHNkX3BrdF9zY2FuLAorCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwID0geworCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMjAyMCwKKwkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCisJLmNvbmZpZyAgICAgID0gc2RfY29uZmlnLAorCS5pbml0ICAgICAgICA9IHNkX2luaXQsCisJLmlzb2NfaW5pdCAgID0gc2RfaXNvY19pbml0LAorCS5zdGFydCAgICAgICA9IHNkX3N0YXJ0LAorCS5zdG9wMCAgICAgICA9IHNkX3N0b3AwLAorCS5wa3Rfc2NhbiAgICA9IHNkX3BrdF9zY2FuLAorCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwYiA9IHsKKwkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjBiLAorCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKKwkuY29uZmlnICAgICAgPSBzZF9jb25maWcsCisJLmluaXQgICAgICAgID0gc2RfaW5pdCwKKwkuaXNvY19pbml0ICAgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ICAgICAgID0gc2Rfc3RhcnQsCisJLnN0b3AwICAgICAgID0gc2Rfc3RvcDAsCisJLnBrdF9zY2FuICAgID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjI2NDAgPSB7CisJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgICAgID0gc2RfY3RybHNfb3YyNjQwLAorCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKKwkuY29uZmlnICAgICAgPSBzZF9jb25maWcsCisJLmluaXQgICAgICAgID0gc2RfaW5pdCwKKwkuaXNvY19pbml0ICAgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ICAgICAgID0gc2Rfc3RhcnQsCisJLnN0b3AwICAgICAgID0gc2Rfc3RvcDAsCisJLnBrdF9zY2FuICAgID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjk2NTUgPSB7CisJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgICAgID0gc2RfY3RybHNfb3Y5NjU1LAorCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKKwkuY29uZmlnICAgICAgPSBzZF9jb25maWcsCisJLmluaXQgICAgICAgID0gc2RfaW5pdCwKKwkuaXNvY19pbml0ICAgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ICAgICAgID0gc2Rfc3RhcnQsCisJLnN0b3AwICAgICAgID0gc2Rfc3RvcDAsCisJLnBrdF9zY2FuICAgID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PSBzdWItZHJpdmVyIGltYWdlIHNpemVzID09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbWkyMDIwX21vZGVbXSA9IHsKKwl7IDY0MCwgIDQ4MCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDAKKwl9LAorCXsgODAwLCAgNjAwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCisJCS5zaXplaW1hZ2UgPSA4MDAgKiA2MDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0sCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDEyODAsCisJCS5zaXplaW1hZ2UgPSAxMjgwICogMTAyNCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyCisJfSwKKwl7MTYwMCwgMTIwMCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwMCwKKwkJLnNpemVpbWFnZSA9IDE2MDAgKiAxMjAwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDMKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3YyNjQwX21vZGVbXSA9IHsKKwl7IDY0MCwgIDQ4MCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDAKKwl9LAorCXsgODAwLCAgNjAwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCisJCS5zaXplaW1hZ2UgPSA4MDAgKiA2MDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0sCisJezEyODAsICA5NjAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDEyODAsCisJCS5zaXplaW1hZ2UgPSAxMjgwICogOTYwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDIKKwl9LAorCXsxNjAwLCAxMjAwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAwLAorCQkuc2l6ZWltYWdlID0gMTYwMCAqIDEyMDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBtaTEzMjBfbW9kZVtdID0geworCXsgNjQwLCAgNDgwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0sCisJeyA4MDAsICA2MDAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDgwMCwKKwkJLnNpemVpbWFnZSA9IDgwMCAqIDYwMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfSwKKwl7MTI4MCwgIDk2MCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiA5NjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMgorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjk2NTVfbW9kZVtdID0geworCXsgNjQwLCAgNDgwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0sCisJezEyODAsICA5NjAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDEyODAsCisJCS5zaXplaW1hZ2UgPSAxMjgwICogOTYwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9LAorfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09IHN1ZC1kcml2ZXIgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCXMzMiB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQ7CisKKwkvKiBHZXQgVVNCIFZlbmRvcklEIGFuZCBQcm9kdWN0SUQgKi8KKwl2ZW5kb3JfaWQgID0gbGUxNl90b19jcHUoaWQtPmlkVmVuZG9yKTsKKwlwcm9kdWN0X2lkID0gbGUxNl90b19jcHUoaWQtPmlkUHJvZHVjdCk7CisKKwlzZC0+bmJSaWdodFVwID0gMTsKKwlzZC0+bmJJbSA9IC0xOworCisJc2QtPnNlbnNvciA9IDB4ZmY7CisJaWYgKHN0cmNtcChzZW5zb3IsICJNSTEzMjAiKSA9PSAwKQorCQlzZC0+c2Vuc29yID0gSURfTUkxMzIwOworCWVsc2UgaWYgKHN0cmNtcChzZW5zb3IsICJPVjI2NDAiKSA9PSAwKQorCQlzZC0+c2Vuc29yID0gSURfT1YyNjQwOworCWVsc2UgaWYgKHN0cmNtcChzZW5zb3IsICJPVjk2NTUiKSA9PSAwKQorCQlzZC0+c2Vuc29yID0gSURfT1Y5NjU1OworCWVsc2UgaWYgKHN0cmNtcChzZW5zb3IsICJNSTIwMjAiKSA9PSAwKQorCQlzZC0+c2Vuc29yID0gSURfTUkyMDIwOworCWVsc2UgaWYgKHN0cmNtcChzZW5zb3IsICJNSTIwMjBiIikgPT0gMCkKKwkJc2QtPnNlbnNvciA9IElEX01JMjAyMGI7CisKKwkvKiBHZXQgc2Vuc29yIGFuZCBzZXQgdGhlIHN1aXRhYmxlIGluaXQvc3RhcnQvLi4vc3RvcCBmdW5jdGlvbnMgKi8KKwlpZiAoZ2w4NjBfZ3Vlc3Nfc2Vuc29yKGdzcGNhX2RldiwgdmVuZG9yX2lkLCBwcm9kdWN0X2lkKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWdzcGNhX2Rldi0+bmJhbHQgPSA0OworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBJRF9NSTEzMjA6CisJCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZF9kZXNjX21pMTMyMDsKKwkJY2FtLT5jYW1fbW9kZSA9IG1pMTMyMF9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUobWkxMzIwX21vZGUpOworCQlkZXZfaW5pdF9zZXR0aW5ncyAgID0gbWkxMzIwX2luaXRfc2V0dGluZ3M7CisJCWJyZWFrOworCisJY2FzZSBJRF9NSTIwMjA6CisJCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZF9kZXNjX21pMjAyMDsKKwkJY2FtLT5jYW1fbW9kZSA9IG1pMjAyMF9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUobWkyMDIwX21vZGUpOworCQlkZXZfaW5pdF9zZXR0aW5ncyAgID0gbWkyMDIwX2luaXRfc2V0dGluZ3M7CisJCWJyZWFrOworCisJY2FzZSBJRF9NSTIwMjBiOgorCQlnc3BjYV9kZXYtPnNkX2Rlc2MgPSAmc2RfZGVzY19taTIwMjBiOworCQljYW0tPmNhbV9tb2RlID0gbWkyMDIwX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShtaTIwMjBfbW9kZSk7CisJCWRldl9pbml0X3NldHRpbmdzICAgPSBtaTIwMjBfaW5pdF9zZXR0aW5nczsKKwkJYnJlYWs7CisKKwljYXNlIElEX09WMjY0MDoKKwkJZ3NwY2FfZGV2LT5zZF9kZXNjID0gJnNkX2Rlc2Nfb3YyNjQwOworCQljYW0tPmNhbV9tb2RlID0gb3YyNjQwX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjI2NDBfbW9kZSk7CisJCWRldl9pbml0X3NldHRpbmdzICAgPSBvdjI2NDBfaW5pdF9zZXR0aW5nczsKKwkJYnJlYWs7CisKKwljYXNlIElEX09WOTY1NToKKwkJZ3NwY2FfZGV2LT5zZF9kZXNjID0gJnNkX2Rlc2Nfb3Y5NjU1OworCQljYW0tPmNhbV9tb2RlID0gb3Y5NjU1X21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjk2NTVfbW9kZSk7CisJCWRldl9pbml0X3NldHRpbmdzICAgPSBvdjk2NTVfaW5pdF9zZXR0aW5nczsKKwkJYnJlYWs7CisJfQorCisJZGV2X2luaXRfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKKwlpZiAoQUM1MEh6ICE9IDB4ZmYpCisJCSgoc3RydWN0IHNkICopIGdzcGNhX2RldiktPnZjdXIuQUM1MEh6ID0gQUM1MEh6OworCWdsODYwX2J1aWxkX2NvbnRyb2xfdGFibGUoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lIGFmdGVyIHNkX2NvbmZpZyAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gc2QtPmRldl9pbml0X2F0X3N0YXJ0dXAoZ3NwY2FfZGV2KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRvIGNob29zZSB0aGUgYWx0IHNldHRpbmcgKi8KK3N0YXRpYyBpbnQgc2RfaXNvY19pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gc2QtPmRldl9jb25maWd1cmVfYWx0KGdzcGNhX2Rldik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHN0YXJ0IHRoZSB3ZWJjYW0gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBzZC0+ZGV2X2luaXRfcHJlX2FsdChnc3BjYV9kZXYpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzdG9wIHRoZSB3ZWJjYW0gKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gc2QtPmRldl9wb3N0X3Vuc2V0X2FsdChnc3BjYV9kZXYpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGltYWdlIGlzIGJlaW5nIHJlY2VpdmVkICovCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLCB1OCAqZGF0YSwgczMyIGxlbikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RhdGljIHMzMiBuU2tpcHBlZDsKKworCXMzMiBtb2RlID0gKHMzMikgZ3NwY2FfZGV2LT5jdXJyX21vZGU7CisJczMyIG5Ub1NraXAgPQorCQlzZC0+c3dhcFJCICogKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW21vZGVdLmJ5dGVzcGVybGluZSArIDEpOworCisJLyogVGVzdCBvbmx5IGFnYWluc3QgMDIwMmgsIHNvIGVuZGlhbmVzcyBkb2VzIG5vdCBtYXR0ZXIgKi8KKwlzd2l0Y2ggKCooczE2ICopIGRhdGEpIHsKKwljYXNlIDB4MDIwMjoJCS8qIEVuZCBvZiBmcmFtZSwgc3RhcnQgYSBuZXcgb25lICovCisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKKwkJblNraXBwZWQgPSAwOworCQlpZiAoc2QtPm5iSW0gPj0gMCAmJiBzZC0+bmJJbSA8IDEwKQorCQkJc2QtPm5iSW0rKzsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGF0YSArPSAyOworCQlsZW4gIC09IDI7CisJCWlmIChuU2tpcHBlZCArIGxlbiA8PSBuVG9Ta2lwKQorCQkJblNraXBwZWQgKz0gbGVuOworCQllbHNlIHsKKwkJCWlmIChuU2tpcHBlZCA8IG5Ub1NraXAgJiYgblNraXBwZWQgKyBsZW4gPiBuVG9Ta2lwKSB7CisJCQkJZGF0YSArPSBuVG9Ta2lwIC0gblNraXBwZWQ7CisJCQkJbGVuICAtPSBuVG9Ta2lwIC0gblNraXBwZWQ7CisJCQkJblNraXBwZWQgPSBuVG9Ta2lwICsgMTsKKwkJCX0KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCisJCQkJSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gaW1hZ2UgaGFzIGJlZW4gcmVhZCAqLworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1vbml0b3Igd2ViY2FtIG9yaWVudGF0aW9uICovCitzdGF0aWMgdm9pZCBzZF9jYWxsYmFjayhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKCFfT1Y5NjU1XykgeworCQl1OCBzdGF0ZTsKKwkJdTggdXBzaWRlRG93bjsKKworCQkvKiBQcm9iZSBzZW5zb3Igb3JpZW50YXRpb24gKi8KKwkJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDAwLCAxLCAodm9pZCAqKSZzdGF0ZSk7CisKKwkJLyogQzgvNDAgbWVhbnMgdXBzaWRlLWRvd24gKGxvb2tpbmcgYmFja3dhcmRzKSAqLworCQkvKiBEOC81MCBtZWFucyByaWdodC11cCAobG9va2luZyBvbndhcmRzKSAqLworCQl1cHNpZGVEb3duID0gKHN0YXRlID09IDB4YzggfHwgc3RhdGUgPT0gMHg0MCk7CisKKwkJaWYgKHVwc2lkZURvd24gJiYgc2QtPm5iUmlnaHRVcCA+IC00KSB7CisJCQlpZiAoc2QtPm5iUmlnaHRVcCA+IDApCisJCQkJc2QtPm5iUmlnaHRVcCA9IDA7CisJCQlpZiAoc2QtPm5iUmlnaHRVcCA9PSAtMykgeworCQkJCXNkLT5taXJyb3JNYXNrID0gMTsKKwkJCQlzZC0+d2FpdFNldCA9IDE7CisJCQl9CisJCQlzZC0+bmJSaWdodFVwLS07CisJCX0KKwkJaWYgKCF1cHNpZGVEb3duICYmIHNkLT5uYlJpZ2h0VXAgPCA0KSB7CisJCQlpZiAoc2QtPm5iUmlnaHRVcCAgPCAwKQorCQkJCXNkLT5uYlJpZ2h0VXAgPSAwOworCQkJaWYgKHNkLT5uYlJpZ2h0VXAgPT0gMykgeworCQkJCXNkLT5taXJyb3JNYXNrID0gMDsKKwkJCQlzZC0+d2FpdFNldCA9IDE7CisJCQl9CisJCQlzZC0+bmJSaWdodFVwKys7CisJCX0KKwl9CisKKwlpZiAoc2QtPndhaXRTZXQpCisJCXNkLT5kZXZfY2FtZXJhX3NldHRpbmdzKGdzcGNhX2Rldik7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PSBVU0IgZHJpdmVyIHN0cnVjdHVyZSBpbml0aWFsaXNhdGlvbiA9PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1ZTMsIDB4MDUwMyl9LAorCXtVU0JfREVWSUNFKDB4MDVlMywgMHhmMTkxKX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXY7CisJczMyIHJldDsKKworCXJldCA9IGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwKKwkJCSZzZF9kZXNjX21pMTMyMCwgc2l6ZW9mKHN0cnVjdCBzZCksIFRISVNfTU9EVUxFKTsKKworCWlmIChyZXQgPj0gMCkgeworCQlnc3BjYV9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJCVBERUJVRyhEX1BST0JFLAorCQkJIkNhbWVyYSBpcyBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCIsCisJCQlnc3BjYV9kZXYtPnZkZXYubWlub3IpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJZ3NwY2FfZGlzY29ubmVjdChpbnRmKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBzZF9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICAgID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09IEluaXQgYW5kIEV4aXQgbW9kdWxlIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJUERFQlVHKERfUFJPQkUsICJkcml2ZXIgc3RhcnR1cCAtIHZlcnNpb24gJXMiLCBEUklWRVJfVkVSU0lPTik7CisKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAiZHJpdmVyIHJlZ2lzdGVyZWQiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRyaXZlciBkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworaW50IGdsODYwX1JUeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCXVuc2lnbmVkIGNoYXIgcHJlZiwgdTMyIHJlcSwgdTE2IHZhbCwgdTE2IGluZGV4LAorCQlzMzIgbGVuLCB2b2lkICpwZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCXMzMiByID0gMDsKKworCWlmIChwcmVmID09IDB4NDApIHsgLyogU2VuZCAqLworCQlpZiAobGVuID4gMCkgeworCQkJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgcGRhdGEsIGxlbik7CisJCQlyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkJcmVxLCBwcmVmLCB2YWwsIGluZGV4LAorCQkJCQlnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkJCWxlbiwgNDAwICsgMjAwICogKGxlbiA+IDEpKTsKKwkJfSBlbHNlIHsKKwkJCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJCQlyZXEsIHByZWYsIHZhbCwgaW5kZXgsIE5VTEwsIGxlbiwgNDAwKTsKKwkJfQorCX0gZWxzZSB7IC8qIFJlY2VpdmUgKi8KKwkJaWYgKGxlbiA+IDApIHsKKwkJCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJCQlyZXEsIHByZWYsIHZhbCwgaW5kZXgsCisJCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwKKwkJCQkJbGVuLCA0MDAgKyAyMDAgKiAobGVuID4gMSkpOworCQkJbWVtY3B5KHBkYXRhLCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbik7CisJCX0gZWxzZSB7CisJCQlyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkJcmVxLCBwcmVmLCB2YWwsIGluZGV4LCBOVUxMLCBsZW4sIDQwMCk7CisJCX0KKwl9CisKKwlpZiAociA8IDApCisJCVBERUJVRyhEX0VSUiwKKwkJCSJjdHJsIHRyYW5zZmVyIGZhaWxlZCAlNGQgIgorCQkJIltwJTAyeCByJWQgdiUwNHggaSUwNHggbGVuJWRdIiwKKwkJCXIsIHByZWYsIHJlcSwgdmFsLCBpbmRleCwgbGVuKTsKKwllbHNlIGlmIChsZW4gPiAxICYmIHIgPCBsZW4pCisJCVBERUJVRyhEX0VSUiwgInNob3J0IGN0cmwgdHJhbnNmZXIgJWQvJWQiLCByLCBsZW4pOworCisJaWYgKChfTUkyMDIwXyB8fCBfTUkyMDIwYl8gfHwgX01JMjAyMGNfKSAmJiAodmFsIHx8IGluZGV4KSkKKwkJbXNsZWVwKDEpOworCWlmIChfT1YyNjQwXykKKwkJbXNsZWVwKDEpOworCisJcmV0dXJuIHI7Cit9CisKK2ludCBmZXRjaF92YWxpZHgoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgdmFsaWR4ICp0YmwsIGludCBsZW4pCit7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuKyspIHsKKwkJaWYgKHRibFtuXS5pZHggIT0gMHhmZmZmKQorCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCB0Ymxbbl0udmFsLAorCQkJCQl0Ymxbbl0uaWR4LCAwLCBOVUxMKTsKKwkJZWxzZSBpZiAodGJsW25dLnZhbCA9PSAweGZmZmYpCisJCQlicmVhazsKKwkJZWxzZQorCQkJbXNsZWVwKHRibFtuXS52YWwpOworCX0KKwlyZXR1cm4gbjsKK30KKworaW50IGtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldiwgc3RydWN0IHZhbGlkeCAqdGJsLAorCQkJCWludCBsZW4sIGludCBuKQoreworCXdoaWxlICgrK24gPCBsZW4pIHsKKwkJaWYgKHRibFtuXS5pZHggIT0gMHhmZmZmKQorCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCB0Ymxbbl0udmFsLCB0Ymxbbl0uaWR4LAorCQkJCQkwLCBOVUxMKTsKKwkJZWxzZSBpZiAodGJsW25dLnZhbCA9PSAweGZmZmYpCisJCQlicmVhazsKKwkJZWxzZQorCQkJbXNsZWVwKHRibFtuXS52YWwpOworCX0KKwlyZXR1cm4gbjsKK30KKwordm9pZCBmZXRjaF9pZHhkYXRhKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldiwgc3RydWN0IGlkeGRhdGEgKnRibCwgaW50IGxlbikKK3sKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBsZW47IG4rKykgeworCQlpZiAobWVtY21wKHRibFtuXS5kYXRhLCAiXHhmZlx4ZmZceGZmIiwgMykgIT0gMCkKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCB0Ymxbbl0uaWR4LAorCQkJCQkzLCB0Ymxbbl0uZGF0YSk7CisJCWVsc2UKKwkJCW1zbGVlcCh0Ymxbbl0uaWR4KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2w4NjBfZ3Vlc3Nfc2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQlzMzIgdmVuZG9yX2lkLCBzMzIgcHJvZHVjdF9pZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggcHJvYmUsIG5iMjYsIG5iOTYsIG5PViwgbnRyeTsKKworCWlmIChwcm9kdWN0X2lkID09IDB4ZjE5MSkKKwkJc2QtPnNlbnNvciA9IElEX01JMTMyMDsKKworCWlmIChzZC0+c2Vuc29yID09IDB4ZmYpIHsKKwkJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDA0LCAxLCAmcHJvYmUpOworCQljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDQsIDEsICZwcm9iZSk7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDAsIDB4MDAwMCwgMCwgTlVMTCk7CisJCW1zbGVlcCgzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMTAsIDB4MDAxMCwgMCwgTlVMTCk7CisJCW1zbGVlcCgzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDgsIDB4MDBjMCwgMCwgTlVMTCk7CisJCW1zbGVlcCgzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDEsIDB4MDBjMSwgMCwgTlVMTCk7CisJCW1zbGVlcCgzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDEsIDB4MDBjMiwgMCwgTlVMTCk7CisJCW1zbGVlcCgzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMjAsIDB4MDAwNiwgMCwgTlVMTCk7CisJCW1zbGVlcCgzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNmEsIDB4MDAwZCwgMCwgTlVMTCk7CisJCW1zbGVlcCg1Nik7CisKKwkJbk9WID0gMDsKKwkJZm9yIChudHJ5ID0gMDsgbnRyeSA8IDQ7IG50cnkrKykgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDAsIDB4MDAwMCwgMCwgTlVMTCk7CisJCQltc2xlZXAoMyk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA2MywgMHgwMDA2LCAwLCBOVUxMKTsKKwkJCW1zbGVlcCgzKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg3YTAwLCAweDgwMzAsIDAsIE5VTEwpOworCQkJbXNsZWVwKDEwKTsKKwkJCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDdhMDAsIDB4ODAzMCwgMSwgJnByb2JlKTsKKwkJCVBERUJVRyhEX1BST0JFLCAiMXN0IHByb2JlPSUwMngiLCBwcm9iZSk7CisJCQlpZiAocHJvYmUgPT0gMHhmZikKKwkJCQluT1YrKzsKKwkJfQorCisJCWlmIChuT1YpIHsKKwkJCVBERUJVRyhEX1BST0JFLCAiMHhmZiAtPiBzZW5zb3IgT1ZYWFhYIik7CisJCQlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIHNlbnNvciBPVjI2NDAgb3IgT1Y5NjU1Iik7CisKKwkJCW5iMjYgPSBuYjk2ID0gMDsKKwkJCWZvciAobnRyeSA9IDA7IG50cnkgPCA0OyBudHJ5KyspIHsKKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MCwgMHgwMDAwLAorCQkJCQkJMCwgTlVMTCk7CisJCQkJbXNsZWVwKDMpOworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAwLCAweDgwMGEsCisJCQkJCQkwLCBOVUxMKTsKKwkJCQltc2xlZXAoMTApOworCQkJCS8qIFdhaXQgZm9yIDI2KE9WMjY0MCkgb3IgOTYoT1Y5NjU1KSAqLworCQkJCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAwYSwKKwkJCQkJCTEsICZwcm9iZSk7CisKKwkJCQlQREVCVUcoRF9QUk9CRSwgIjJuZCBwcm9iZT0lMDJ4IiwgcHJvYmUpOworCQkJCWlmIChwcm9iZSA9PSAweDAwKQorCQkJCQluYjI2Kys7CisJCQkJaWYgKHByb2JlID09IDB4MjYgfHwgcHJvYmUgPT0gMHg0MCkgeworCQkJCQlzZC0+c2Vuc29yID0gSURfT1YyNjQwOworCQkJCQluYjI2ICs9IDQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAocHJvYmUgPT0gMHg5NiB8fCBwcm9iZSA9PSAweDU1KSB7CisJCQkJCXNkLT5zZW5zb3IgPSBJRF9PVjk2NTU7CisJCQkJCW5iOTYgKz0gNDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChwcm9iZSA9PSAweGZmKQorCQkJCQluYjk2Kys7CisJCQkJbXNsZWVwKDMpOworCQkJfQorCQkJaWYgKG5iMjYgPCA0ICYmIG5iOTYgPCA0KSB7CisJCQkJUERFQlVHKERfUFJPQkUsICJObyByZWxldmFudCBhbnN3ZXIgIik7CisJCQkJUERFQlVHKERfUFJPQkUsICIqIDEuM01waXhlbHMgLT4gdXNlIE9WOTY1NSIpOworCQkJCVBERUJVRyhEX1BST0JFLCAiKiAyLjBNcGl4ZWxzIC0+IHVzZSBPVjI2NDAiKTsKKwkJCQlQREVCVUcoRF9QUk9CRSwKKwkJCQkJIlRvIGZvcmNlIGEgc2Vuc29yLCBhZGQgdGhhdCBsaW5lIHRvICIKKwkJCQkJIi9ldGMvbW9kcHJvYmUuZC9vcHRpb25zLmNvbmY6Iik7CisJCQkJUERFQlVHKERfUFJPQkUsICJvcHRpb25zIGdzcGNhX2dsODYwICIKKwkJCQkJInNlbnNvcj1cIk9WMjY0MFwiIG9yIFwiT1Y5NjU1XCIiKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0gZWxzZSB7IC8qIHByb2JlID0gMCAqLworCQkJUERFQlVHKERfUFJPQkUsICJObyAweGZmIC0+IHNlbnNvciBNSTIwMjAiKTsKKwkJCXNkLT5zZW5zb3IgPSBJRF9NSTIwMjA7CisJCX0KKwl9CisKKwlpZiAoX01JMTMyMF8pIHsKKwkJUERFQlVHKERfUFJPQkUsICIwNWUzOmYxOTEgc2Vuc29yIE1JMTMyMCAoMS4zTSkiKTsKKwl9IGVsc2UgaWYgKF9NSTIwMjBfKSB7CisJCVBERUJVRyhEX1BST0JFLCAiMDVlMzowNTAzIHNlbnNvciBNSTIwMjAgKDIuME0pIik7CisJfSBlbHNlIGlmIChfTUkyMDIwYl8pIHsKKwkJUERFQlVHKERfUFJPQkUsICIwNWUzOjA1MDMgc2Vuc29yIE1JMjAyMCBhbHQuIGRyaXZlciAoMi4wTSkiKTsKKwl9IGVsc2UgaWYgKF9PVjk2NTVfKSB7CisJCVBERUJVRyhEX1BST0JFLCAiMDVlMzowNTAzIHNlbnNvciBPVjk2NTUgKDEuM00pIik7CisJfSBlbHNlIGlmIChfT1YyNjQwXykgeworCQlQREVCVUcoRF9QUk9CRSwgIjA1ZTM6MDUwMyBzZW5zb3IgT1YyNjQwICgyLjBNKSIpOworCX0gZWxzZSB7CisJCVBERUJVRyhEX1BST0JFLCAiKioqKiogVW5rbm93biBzZW5zb3IgKioqKioiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjRlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qIEBmaWxlIGdsODYwLmgKKyAqIEBhdXRob3IgT2xpdmllciBMT1JJTiwgdGlyw6kgZHUgcGlsb3RlIFN5bnRlayBwYXIgTmljb2xhcyBWSVZJRU4KKyAqIEBkYXRlIDIwMDktMDgtMjcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaWZuZGVmIEdMODYwX0RFVl9ICisjZGVmaW5lIEdMODYwX0RFVl9ICisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworI2RlZmluZSBNT0RVTEVfTkFNRSAiZ3NwY2FfZ2w4NjAiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjlkMTAiCisKKyNkZWZpbmUgY3RybF9pbiAgZ2w4NjBfUlR4CisjZGVmaW5lIGN0cmxfb3V0IGdsODYwX1JUeAorCisjZGVmaW5lIElEX01JMTMyMCAgIDEKKyNkZWZpbmUgSURfT1YyNjQwICAgMgorI2RlZmluZSBJRF9PVjk2NTUgICA0CisjZGVmaW5lIElEX01JMjAyMCAgIDgKKyNkZWZpbmUgSURfTUkyMDIwYiAxNgorCisjZGVmaW5lIF9NSTEzMjBfICAoKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+c2Vuc29yID09IElEX01JMTMyMCkKKyNkZWZpbmUgX01JMjAyMF8gICgoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5zZW5zb3IgPT0gSURfTUkyMDIwKQorI2RlZmluZSBfTUkyMDIwYl8gKCgoc3RydWN0IHNkICopIGdzcGNhX2RldiktPnNlbnNvciA9PSBJRF9NSTIwMjBiKQorI2RlZmluZSBfTUkyMDIwY18gMAorI2RlZmluZSBfT1YyNjQwXyAgKCgoc3RydWN0IHNkICopIGdzcGNhX2RldiktPnNlbnNvciA9PSBJRF9PVjI2NDApCisjZGVmaW5lIF9PVjk2NTVfICAoKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+c2Vuc29yID09IElEX09WOTY1NSkKKworI2RlZmluZSBJTUFHRV82NDAgICAwCisjZGVmaW5lIElNQUdFXzgwMCAgIDEKKyNkZWZpbmUgSU1BR0VfMTI4MCAgMgorI2RlZmluZSBJTUFHRV8xNjAwIDMKKworc3RydWN0IHNkX2dsODYwIHsKKwl1MTYgYmFja2xpZ2h0OworCXUxNiBicmlnaHRuZXNzOworCXUxNiBzaGFycG5lc3M7CisJdTE2IGNvbnRyYXN0OworCXUxNiBnYW1tYTsKKwl1MTYgaHVlOworCXUxNiBzYXR1cmF0aW9uOworCXUxNiB3aGl0ZWJhbDsKKwl1OCAgbWlycm9yOworCXU4ICBmbGlwOworCXU4ICBBQzUwSHo7Cit9OworCisvKiBTcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJc3RydWN0IHNkX2dsODYwIHZjdXI7CisJc3RydWN0IHNkX2dsODYwIHZvbGQ7CisJc3RydWN0IHNkX2dsODYwIHZtYXg7CisKKwlpbnQgICgqZGV2X2NvbmZpZ3VyZV9hbHQpICAoc3RydWN0IGdzcGNhX2RldiAqKTsKKwlpbnQgICgqZGV2X2luaXRfYXRfc3RhcnR1cCkoc3RydWN0IGdzcGNhX2RldiAqKTsKKwlpbnQgICgqZGV2X2luaXRfcHJlX2FsdCkgICAoc3RydWN0IGdzcGNhX2RldiAqKTsKKwl2b2lkICgqZGV2X3Bvc3RfdW5zZXRfYWx0KSAoc3RydWN0IGdzcGNhX2RldiAqKTsKKwlpbnQgICgqZGV2X2NhbWVyYV9zZXR0aW5ncykoc3RydWN0IGdzcGNhX2RldiAqKTsKKworCXU4ICAgc3dhcFJCOworCXU4ICBtaXJyb3JNYXNrOworCXU4ICBzZW5zb3I7CisJczMyIG5iSW07CisJczMyIG5iUmlnaHRVcDsKKwl1OCAgIHdhaXRTZXQ7Cit9OworCitzdHJ1Y3QgdmFsaWR4IHsKKwl1MTYgdmFsOworCXUxNiBpZHg7Cit9OworCitzdHJ1Y3QgaWR4ZGF0YSB7CisJdTggaWR4OworCXU4IGRhdGFbM107Cit9OworCitpbnQgZmV0Y2hfdmFsaWR4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldiwgc3RydWN0IHZhbGlkeCAqdGJsLCBpbnQgbGVuKTsKK2ludCBrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHN0cnVjdCB2YWxpZHggKnRibCwKKwkJCQlpbnQgbGVuLCBpbnQgbik7Cit2b2lkIGZldGNoX2lkeGRhdGEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgaWR4ZGF0YSAqdGJsLCBpbnQgbGVuKTsKKworaW50IGdsODYwX1JUeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1bnNpZ25lZCBjaGFyIHByZWYsIHUzMiByZXEsIHUxNiB2YWwsIHUxNiBpbmRleCwKKwkJCXMzMiBsZW4sIHZvaWQgKnBkYXRhKTsKKwordm9pZCBtaTEzMjBfaW5pdF9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICopOwordm9pZCBvdjI2NDBfaW5pdF9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICopOwordm9pZCBvdjk2NTVfaW5pdF9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICopOwordm9pZCBtaTIwMjBfaW5pdF9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvamVpbGluai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qZWlsaW5qLmMKaW5kZXggZGJmYTNlZC4uYTExYzk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qZWlsaW5qLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qZWlsaW5qLmMKQEAgLTMxMiw2ICszMTIsOCBAQAogCiAJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLwogCWRldi0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2LT5qcGVnX2hkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAlqcGVnX2RlZmluZShkZXYtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKIAkJCTB4MjEpOyAgICAgICAgICAvKiBKUEVHIDQyMiAqLwogCWpwZWdfc2V0X3F1YWwoZGV2LT5qcGVnX2hkciwgZGV2LT5xdWFsaXR5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKaW5kZXggOGE1YmJhMS4uN2YxZTU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIAotLyogV3JpdGVzIGEgYnl0ZSB0byB0byB0aGUgbTU2MDIgKi8KKy8qIFdyaXRlcyBhIGJ5dGUgdG8gdGhlIG01NjAyICovCiBpbnQgbTU2MDJfd3JpdGVfYnJpZGdlKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsIGNvbnN0IHU4IGkyY19kYXRhKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYwppbmRleCA3YWFmZWI3Li4yYTI4Yjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMKQEAgLTIwLDYgKzIwLDE4IEBACiAKIHN0YXRpYyBpbnQgb3Y3NjYwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IG92NzY2MF9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9nZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQkJIF9fczMyICp2YWwpOworc3RhdGljIGludCBvdjc2NjBfc2V0X2F1dG9fd2hpdGVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJCSBfX3MzMiB2YWwpOworc3RhdGljIGludCBvdjc2NjBfZ2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBvdjc2NjBfc2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9nZXRfYXV0b19leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBvdjc2NjBfc2V0X2F1dG9fZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBvdjc2NjBfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBvdjc2NjBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogCiBjb25zdCBzdGF0aWMgc3RydWN0IGN0cmwgb3Y3NjYwX2N0cmxzW10gPSB7CiAjZGVmaW5lIEdBSU5fSURYIDEKQEAgLTM3LDYgKzQ5LDc5IEBACiAJCS5zZXQgPSBvdjc2NjBfc2V0X2dhaW4sCiAJCS5nZXQgPSBvdjc2NjBfZ2V0X2dhaW4KIAl9LAorI2RlZmluZSBCTFVFX0JBTEFOQ0VfSURYIDIKKyNkZWZpbmUgUkVEX0JBTEFOQ0VfSURYIDMKKyNkZWZpbmUgQVVUT19XSElURV9CQUxBTkNFX0lEWCA0CisJeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJhdXRvIHdoaXRlIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDEKKwkJfSwKKwkJLnNldCA9IG92NzY2MF9zZXRfYXV0b193aGl0ZV9iYWxhbmNlLAorCQkuZ2V0ID0gb3Y3NjYwX2dldF9hdXRvX3doaXRlX2JhbGFuY2UKKwl9LAorI2RlZmluZSBBVVRPX0dBSU5fQ1RSTF9JRFggNQorCXsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJhdXRvIGdhaW4gY29udHJvbCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMQorCQl9LAorCQkuc2V0ID0gb3Y3NjYwX3NldF9hdXRvX2dhaW4sCisJCS5nZXQgPSBvdjc2NjBfZ2V0X2F1dG9fZ2FpbgorCX0sCisjZGVmaW5lIEFVVE9fRVhQT1NVUkVfSURYIDYKKwl7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfRVhQT1NVUkVfQVVUTywKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJhdXRvIGV4cG9zdXJlIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAxCisJCX0sCisJCS5zZXQgPSBvdjc2NjBfc2V0X2F1dG9fZXhwb3N1cmUsCisJCS5nZXQgPSBvdjc2NjBfZ2V0X2F1dG9fZXhwb3N1cmUKKwl9LAorI2RlZmluZSBIRkxJUF9JRFggNworCXsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAKKwkJfSwKKwkJLnNldCA9IG92NzY2MF9zZXRfaGZsaXAsCisJCS5nZXQgPSBvdjc2NjBfZ2V0X2hmbGlwCisJfSwKKyNkZWZpbmUgVkZMSVBfSURYIDgKKwl7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfVkZMSVAsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lIAkJPSAidmVydGljYWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gb3Y3NjYwX3NldF92ZmxpcCwKKwkJLmdldCA9IG92NzY2MF9nZXRfdmZsaXAKKwl9LAorCiB9OwogCiBzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjc2NjBfbW9kZXNbXSA9IHsKQEAgLTEzNyw3ICsyMjIsNyBAQAogCQl9IGVsc2UgewogCQkJZGF0YVswXSA9IGluaXRfb3Y3NjYwW2ldWzJdOwogCQkJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLAotCQkJCQlpbml0X292NzY2MFtpXVsxXSwgZGF0YSwgMSk7CisJCQkJaW5pdF9vdjc2NjBbaV1bMV0sIGRhdGEsIDEpOwogCQl9CiAJfQogCkBAIC0xNDgsNiArMjMzLDI4IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKKwllcnIgPSBvdjc2NjBfc2V0X2F1dG9fd2hpdGVfYmFsYW5jZSgmc2QtPmdzcGNhX2RldiwKKwkJc2Vuc29yX3NldHRpbmdzW0FVVE9fV0hJVEVfQkFMQU5DRV9JRFhdKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG92NzY2MF9zZXRfYXV0b19nYWluKCZzZC0+Z3NwY2FfZGV2LAorCQlzZW5zb3Jfc2V0dGluZ3NbQVVUT19HQUlOX0NUUkxfSURYXSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBvdjc2NjBfc2V0X2F1dG9fZXhwb3N1cmUoJnNkLT5nc3BjYV9kZXYsCisJCXNlbnNvcl9zZXR0aW5nc1tBVVRPX0VYUE9TVVJFX0lEWF0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IG92NzY2MF9zZXRfaGZsaXAoJnNkLT5nc3BjYV9kZXYsCisJCXNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG92NzY2MF9zZXRfdmZsaXAoJnNkLT5nc3BjYV9kZXYsCisJCXNlbnNvcl9zZXR0aW5nc1tWRkxJUF9JRFhdKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE5NCw2ICszMDEsMTU5IEBACiAJcmV0dXJuIGVycjsKIH0KIAorCitzdGF0aWMgaW50IG92NzY2MF9nZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQkJIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tBVVRPX1dISVRFX0JBTEFOQ0VfSURYXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc2NjBfc2V0X2F1dG9fd2hpdGVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJCSBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gd2hpdGUgYmFsYW5jZSB0byAlZCIsIHZhbCk7CisKKwlzZW5zb3Jfc2V0dGluZ3NbQVVUT19XSElURV9CQUxBTkNFX0lEWF0gPSB2YWw7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WNzY2MF9DT004LCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhmZCkgfCAoKHZhbCAmIDB4MDEpIDw8IDEpKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WNzY2MF9DT004LCAmaTJjX2RhdGEsIDEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvdjc2NjBfZ2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tBVVRPX0dBSU5fQ1RSTF9JRFhdOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGF1dG8gZ2FpbiBjb250cm9sICVkIiwgKnZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF9hdXRvX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gZ2FpbiBjb250cm9sIHRvICVkIiwgdmFsKTsKKworCXNlbnNvcl9zZXR0aW5nc1tBVVRPX0dBSU5fQ1RSTF9JRFhdID0gdmFsOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBPVjc2NjBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWkyY19kYXRhID0gKChpMmNfZGF0YSAmIDB4ZmIpIHwgKCh2YWwgJiAweDAxKSA8PCAyKSk7CisKKwlyZXR1cm4gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBPVjc2NjBfQ09NOCwgJmkyY19kYXRhLCAxKTsKK30KKworc3RhdGljIGludCBvdjc2NjBfZ2V0X2F1dG9fZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCSp2YWwgPSBzZW5zb3Jfc2V0dGluZ3NbQVVUT19FWFBPU1VSRV9JRFhdOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGF1dG8gZXhwb3N1cmUgY29udHJvbCAlZCIsICp2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzY2MF9zZXRfYXV0b19leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJICAgIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgYXV0byBleHBvc3VyZSBjb250cm9sIHRvICVkIiwgdmFsKTsKKworCXNlbnNvcl9zZXR0aW5nc1tBVVRPX0VYUE9TVVJFX0lEWF0gPSB2YWw7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WNzY2MF9DT004LCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhmZSkgfCAoKHZhbCAmIDB4MDEpIDw8IDApKTsKKworCXJldHVybiBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WNzY2MF9DT004LCAmaTJjX2RhdGEsIDEpOworfQorCitzdGF0aWMgaW50IG92NzY2MF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCSp2YWwgPSBzZW5zb3Jfc2V0dGluZ3NbSEZMSVBfSURYXTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc2NjBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLCB2YWwpOworCisJc2Vuc29yX3NldHRpbmdzW0hGTElQX0lEWF0gPSB2YWw7CisKKwlpMmNfZGF0YSA9ICgodmFsICYgMHgwMSkgPDwgNSkgfAorCQkoc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF0gPDwgNCk7CisKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WNzY2MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvdjc2NjBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF07CisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CisJc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF0gPSB2YWw7CisKKwlpMmNfZGF0YSA9ICgodmFsICYgMHgwMSkgPDwgNCkgfCAoc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF0gPDwgNSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBPVjc2NjBfTVZGUCwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIFdoZW4gdmZsaXAgaXMgdG9nZ2xlZCB3ZSBuZWVkIHRvIHJlYWRqdXN0IHRoZSBicmlkZ2UgaHN5bmMvdnN5bmMgKi8KKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWVyciA9IG92NzY2MF9zdGFydChzZCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgdm9pZCBvdjc2NjBfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKIHsKIAlpbnQgYWRkcmVzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oCmluZGV4IDNmMmMxNjkuLmY1NTg4ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaApAQCAtNjYsMjMgKzY2LDIzIEBACiAjZGVmaW5lIE9WNzY2MF9SQklBUwkJMHgyYwogI2RlZmluZSBPVjc2NjBfSFJFRgkJMHgzMgogI2RlZmluZSBPVjc2NjBfQURDCQkweDM3Ci0jZGVmaW5lIE9WNzY2MF9PRk9OIAkJMHgzOQotI2RlZmluZSBPVjc2NjBfVFNMQiAJCTB4M2EKLSNkZWZpbmUgT1Y3NjYwX0NPTTEyIAkJMHgzYwotI2RlZmluZSBPVjc2NjBfQ09NMTMgCQkweDNkCisjZGVmaW5lIE9WNzY2MF9PRk9OCQkweDM5CisjZGVmaW5lIE9WNzY2MF9UU0xCCQkweDNhCisjZGVmaW5lIE9WNzY2MF9DT00xMgkJMHgzYworI2RlZmluZSBPVjc2NjBfQ09NMTMJCTB4M2QKICNkZWZpbmUgT1Y3NjYwX0xDQzEJCTB4NjIKICNkZWZpbmUgT1Y3NjYwX0xDQzIJCTB4NjMKICNkZWZpbmUgT1Y3NjYwX0xDQzMJCTB4NjQKICNkZWZpbmUgT1Y3NjYwX0xDQzQJCTB4NjUKICNkZWZpbmUgT1Y3NjYwX0xDQzUJCTB4NjYKLSNkZWZpbmUgT1Y3NjYwX0hWIAkJMHg2OQotI2RlZmluZSBPVjc2NjBfUlNWREExIAkJMHhhMQorI2RlZmluZSBPVjc2NjBfSFYJCTB4NjkKKyNkZWZpbmUgT1Y3NjYwX1JTVkRBMQkJMHhhMQogCiAjZGVmaW5lIE9WNzY2MF9ERUZBVUxUX0dBSU4JCTB4MGUKLSNkZWZpbmUgT1Y3NjYwX0RFRkFVTFRfUkVEX0dBSU4JMHg4MAorI2RlZmluZSBPVjc2NjBfREVGQVVMVF9SRURfR0FJTgkJMHg4MAogI2RlZmluZSBPVjc2NjBfREVGQVVMVF9CTFVFX0dBSU4gCTB4ODAKICNkZWZpbmUgT1Y3NjYwX0RFRkFVTFRfU0FUVVJBVElPTgkweDAwCi0jZGVmaW5lIE9WNzY2MF9ERUZBVUxUX0VYUE9TVVJFCTB4MjAKKyNkZWZpbmUgT1Y3NjYwX0RFRkFVTFRfRVhQT1NVUkUJCTB4MjAKIAogLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKQEAgLTE0OSwyMiArMTQ5LDggQEAKIAl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGR9LAogCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9DVFJMLCAweDAwfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwM30sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDN9LAotCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwY30sCi0KLQl7U0VOU09SLCBPVjc2NjBfT0ZPTiwgMHgwY30sCi0Je1NFTlNPUiwgT1Y3NjYwX0NPTTIsIDB4MTF9LAotCXtTRU5TT1IsIE9WNzY2MF9DT003LCAweDA1fSwKLQogCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDAxfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwOH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwMX0sCiAJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAogCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LApAQCAtMTczLDM0ICsxNTksOCBAQAogCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAogCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMH0sCi0KLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKLQotCXtTRU5TT1IsIE9WNzY2MF9BRUNILCBPVjc2NjBfREVGQVVMVF9FWFBPU1VSRX0sCi0Je1NFTlNPUiwgT1Y3NjYwX0NPTTEsIDB4MDB9LAotCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDF9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDZ9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDB9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA4fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAotCi0Je0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwfSwKLQogCXtTRU5TT1IsIE9WNzY2MF9DT003LCAweDgwfSwKIAl7U0VOU09SLCBPVjc2NjBfQ0xLUkMsIDB4ODB9LAotCXtTRU5TT1IsIE9WNzY2MF9CTFVFX0dBSU4sIDB4ODB9LAotCXtTRU5TT1IsIE9WNzY2MF9SRURfR0FJTiwgMHg4MH0sCiAJe1NFTlNPUiwgT1Y3NjYwX0NPTTksIDB4NGN9LAogCXtTRU5TT1IsIE9WNzY2MF9PRk9OLCAweDQzfSwKIAl7U0VOU09SLCBPVjc2NjBfQ09NMTIsIDB4Mjh9LApAQCAtMjEyLDE3ICsxNzIsMTcgQEAKIAl7U0VOU09SLCBPVjc2NjBfUFNIRlQsIDB4MGJ9LAogCXtTRU5TT1IsIE9WNzY2MF9WU1RBUlQsIDB4MDF9LAogCXtTRU5TT1IsIE9WNzY2MF9WU1RPUCwgMHg3YX0sCi0Je1NFTlNPUiwgT1Y3NjYwX1ZSRUYsIDB4MDB9LAorCXtTRU5TT1IsIE9WNzY2MF9WU1RPUCwgMHgwMH0sCiAJe1NFTlNPUiwgT1Y3NjYwX0NPTTcsIDB4MDV9LAotCXtTRU5TT1IsIE9WNzY2MF9DT002LCAweDRifSwKLQl7U0VOU09SLCBPVjc2NjBfQkJJQVMsIDB4OTh9LAotCXtTRU5TT1IsIE9WNzY2MF9HYkJJQVMsIDB4OTh9LAotCXtTRU5TT1IsIE9WNzY2MF9SU1ZEMjksIDB4OTh9LAotCXtTRU5TT1IsIE9WNzY2MF9SQklBUywgMHg5OH0sCisJe1NFTlNPUiwgT1Y3NjYwX0NPTTYsIDB4NDJ9LAorCXtTRU5TT1IsIE9WNzY2MF9CQklBUywgMHg5NH0sCisJe1NFTlNPUiwgT1Y3NjYwX0diQklBUywgMHg5NH0sCisJe1NFTlNPUiwgT1Y3NjYwX1JTVkQyOSwgMHg5NH0sCisJe1NFTlNPUiwgT1Y3NjYwX1JCSUFTLCAweDk0fSwKIAl7U0VOU09SLCBPVjc2NjBfQ09NMSwgMHgwMH0sCiAJe1NFTlNPUiwgT1Y3NjYwX0FFQ0gsIDB4MDB9LAogCXtTRU5TT1IsIE9WNzY2MF9BRUNISCwgMHgwMH0sCi0Je1NFTlNPUiwgT1Y3NjYwX0FEQywgMHgwNH0sCisJe1NFTlNPUiwgT1Y3NjYwX0FEQywgMHgwNX0sCiAJe1NFTlNPUiwgT1Y3NjYwX0NPTTEzLCAweDAwfSwKIAl7U0VOU09SLCBPVjc2NjBfUlNWREExLCAweDIzfSwKIAl7U0VOU09SLCBPVjc2NjBfVFNMQiwgMHgwZH0sCkBAIC0yMzMsNiArMTkzLDQ3IEBACiAJe1NFTlNPUiwgT1Y3NjYwX0xDQzQsIDB4NDB9LAogCXtTRU5TT1IsIE9WNzY2MF9MQ0M1LCAweDAxfSwKIAorCXtTRU5TT1IsIE9WNzY2MF9BRUNILCAweDIwfSwKKwl7U0VOU09SLCBPVjc2NjBfQ09NMSwgMHgwMH0sCisJe1NFTlNPUiwgT1Y3NjYwX09GT04sIDB4MGN9LAorCXtTRU5TT1IsIE9WNzY2MF9DT00yLCAweDExfSwKKwl7U0VOU09SLCBPVjc2NjBfQ09NNywgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA4fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwY30sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDV9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMH0sCisJe1NFTlNPUiwgT1Y3NjYwX0FFQ0gsIDB4NWZ9LAorCXtTRU5TT1IsIE9WNzY2MF9DT00xLCAweDAzfSwKKwl7U0VOU09SLCBPVjc2NjBfT0ZPTiwgMHgwY30sCisJe1NFTlNPUiwgT1Y3NjYwX0NPTTIsIDB4MTF9LAorCXtTRU5TT1IsIE9WNzY2MF9DT003LCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDh9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwfSwKKwogCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2fSwKIAl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAogCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKQEAgLTI0NSwzNSArMjQ2LDE4IEBACiAJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlMH0sIC8qIDQ4MCAqLworCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZWN9LAogCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAogCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAogCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAogCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDJ9LAotCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAotCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4Mjd9LCAvKiAzOSAqLwotCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDJ9LAotCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4YTd9LCAvKiA2NzkgKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDI3fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweGE3fSwKIAl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwfSwKLQogCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAotCi0Je1NFTlNPUiwgT1Y3NjYwX0FFQ0gsIDB4MjB9LAotCXtTRU5TT1IsIE9WNzY2MF9DT00xLCAweDAwfSwKLQl7U0VOU09SLCBPVjc2NjBfT0ZPTiwgMHgwY30sCi0Je1NFTlNPUiwgT1Y3NjYwX0NPTTIsIDB4MTF9LAotCXtTRU5TT1IsIE9WNzY2MF9DT003LCAweDA1fSwKLQl7U0VOU09SLCBPVjc2NjBfQkxVRV9HQUlOLCAweDgwfSwKLQl7U0VOU09SLCBPVjc2NjBfUkVEX0dBSU4sIDB4ODB9LAotCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDF9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDZ9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDB9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA4fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCmluZGV4IDAxNjM5MDMuLjU5NDAwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtNDcsNiArNDcsMTIgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGkgMjU1MCIpCiAJCX0KIAl9LCB7CisJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gUGEgMjU0OCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFBhIDI1NDgiKQorCQl9CisJfSwgewogCQkuaWRlbnQgPSAiTVNJIEdYNzAwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIEludGVybmF0aW9uYWwiKSwKQEAgLTU0LDYgKzYwLDEzIEBACiAJCQlETUlfTUFUQ0goRE1JX0JJT1NfREFURSwgIjA3LzI2LzIwMDciKQogCQl9CiAJfSwgeworCQkuaWRlbnQgPSAiTVNJIEdYNzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIEludGVybmF0aW9uYWwiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiR1g3MDAiKSwKKwkJCURNSV9NQVRDSChETUlfQklPU19EQVRFLCAiMDcvMTkvMjAwNyIpCisJCX0KKwl9LCB7CiAJCS5pZGVudCA9ICJNU0kgR1g3MDAvR1g3MDUvRVg3MDAiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKaW5kZXggN2FmNTExYi4uNjU0ODlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCkBAIC01MCw3ICs1MCw2IEBACiAJCQkgICAgICAweDA0LCAweDQwLCBhZGRyZXNzLCAwLCBidWYsIGxlbiwKIAkJCSAgICAgIFNUVjA2WFhfVVJCX01TR19USU1FT1VUKTsKIAotCiAJUERFQlVHKERfQ09ORiwgIldyaXR0ZW4gMHgleCB0byBhZGRyZXNzIDB4JXgsIHN0YXR1czogJWQiLAogCSAgICAgICBpMmNfZGF0YSwgYWRkcmVzcywgZXJyKTsKIApAQCAtNjksNyArNjgsNyBAQAogCiAJKmkyY19kYXRhID0gYnVmWzBdOwogCi0JUERFQlVHKERfQ09ORiwgIlJlYWQgMHgleCBmcm9tIGFkZHJlc3MgMHgleCwgc3RhdHVzICVkIiwKKwlQREVCVUcoRF9DT05GLCAiUmVhZGluZyAweCV4IGZyb20gYWRkcmVzcyAweCV4LCBzdGF0dXMgJWQiLAogCSAgICAgICAqaTJjX2RhdGEsIGFkZHJlc3MsIGVycik7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTExMSwxNCArMTEwLDE0IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKIAlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CiAKLQlQREVCVUcoRF9VU0JPLCAiSTJDOiBDb21tYW5kIGJ1ZmZlciBjb250YWlucyAlZCBlbnRyaWVzIiwgbGVuKTsKKwlQREVCVUcoRF9DT05GLCAiSTJDOiBDb21tYW5kIGJ1ZmZlciBjb250YWlucyAlZCBlbnRyaWVzIiwgbGVuKTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOykgewogCQkvKiBCdWlsZCB0aGUgY29tbWFuZCBidWZmZXIgKi8KIAkJbWVtc2V0KGJ1ZiwgMCwgSTJDX0JVRkZFUl9MRU5HVEgpOwogCQlmb3IgKGogPSAwOyBqIDwgSTJDX01BWF9CWVRFUyAmJiBpIDwgbGVuOyBqKyssIGkrKykgewogCQkJYnVmW2pdID0gZGF0YVsyKmldOwogCQkJYnVmWzB4MTAgKyBqXSA9IGRhdGFbMippKzFdOwotCQkJUERFQlVHKERfVVNCTywgIkkyQzogV3JpdGluZyAweCUwMnggdG8gcmVnIDB4JTAyeCIsCisJCQlQREVCVUcoRF9DT05GLCAiSTJDOiBXcml0aW5nIDB4JTAyeCB0byByZWcgMHglMDJ4IiwKIAkJCWRhdGFbMippKzFdLCBkYXRhWzIqaV0pOwogCQl9CiAJCWJ1ZlsweDIwXSA9IHNkLT5zZW5zb3ItPmkyY19hZGRyOwpAQCAtMTI4LDggKzEyNyw4IEBACiAJCQkJICAgICAgMHgwNCwgMHg0MCwgMHgwNDAwLCAwLCBidWYsCiAJCQkJICAgICAgSTJDX0JVRkZFUl9MRU5HVEgsCiAJCQkJICAgICAgU1RWMDZYWF9VUkJfTVNHX1RJTUVPVVQpOwotCQkJCSAgICAgIGlmIChlcnIgPCAwKQotCQkJCQlyZXR1cm4gZXJyOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiBzdHYwNnh4X3dyaXRlX3NlbnNvcl9maW5pc2goc2QpOwogfQpAQCAtMTQwLDcgKzEzOSw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKIAlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CiAKLQlQREVCVUcoRF9VU0JPLCAiSTJDOiBDb21tYW5kIGJ1ZmZlciBjb250YWlucyAlZCBlbnRyaWVzIiwgbGVuKTsKKwlQREVCVUcoRF9DT05GLCAiSTJDOiBDb21tYW5kIGJ1ZmZlciBjb250YWlucyAlZCBlbnRyaWVzIiwgbGVuKTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47KSB7CiAJCS8qIEJ1aWxkIHRoZSBjb21tYW5kIGJ1ZmZlciAqLwpAQCAtMTQ5LDcgKzE0OCw3IEBACiAJCQlidWZbal0gPSBkYXRhWzIqaV07CiAJCQlidWZbMHgxMCArIGogKiAyXSA9IGRhdGFbMippKzFdOwogCQkJYnVmWzB4MTAgKyBqICogMiArIDFdID0gZGF0YVsyKmkrMV0gPj4gODsKLQkJCVBERUJVRyhEX1VTQk8sICJJMkM6IFdyaXRpbmcgMHglMDR4IHRvIHJlZyAweCUwMngiLAorCQkJUERFQlVHKERfQ09ORiwgIkkyQzogV3JpdGluZyAweCUwNHggdG8gcmVnIDB4JTAyeCIsCiAJCQkJZGF0YVsyKmkrMV0sIGRhdGFbMippXSk7CiAJCX0KIAkJYnVmWzB4MjBdID0gc2QtPnNlbnNvci0+aTJjX2FkZHI7CkBAIC0xODksNyArMTg4LDcgQEAKIAkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTQwMCwgMCwgYnVmLCBJMkNfQlVGRkVSX0xFTkdUSCwKIAkJCSAgICAgIFNUVjA2WFhfVVJCX01TR19USU1FT1VUKTsKIAlpZiAoZXJyIDwgMCkgewotCQlQREVCVUcoRF9FUlIsICJJMkMgUmVhZDogZXJyb3Igd3JpdGluZyBhZGRyZXNzOiAlZCIsIGVycik7CisJCVBERUJVRyhEX0VSUiwgIkkyQzogUmVhZCBlcnJvciB3cml0aW5nIGFkZHJlc3M6ICVkIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTIwMSw3ICsyMDAsNyBAQAogCWVsc2UKIAkJKnZhbHVlID0gYnVmWzBdOwogCi0JUERFQlVHKERfVVNCTywgIkkyQzogUmVhZCAweCV4IGZyb20gYWRkcmVzcyAweCV4LCBzdGF0dXM6ICVkIiwKKwlQREVCVUcoRF9DT05GLCAiSTJDOiBSZWFkIDB4JXggZnJvbSBhZGRyZXNzIDB4JXgsIHN0YXR1czogJWQiLAogCSAgICAgICAqdmFsdWUsIGFkZHJlc3MsIGVycik7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYwppbmRleCBlNTAyNGM4Li43MDZlMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCkBAIC0zNyw3ICszNyw3IEBACiAJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkJLm5hbWUJCT0gImV4cG9zdXJlIiwKIAkJCS5taW5pbXVtCT0gMHgwMCwKLQkJCS5tYXhpbXVtCT0gMHhmZmZmLAorCQkJLm1heGltdW0JPSAweGZmLAogCQkJLnN0ZXAJCT0gMHgxLAogCQkJLmRlZmF1bHRfdmFsdWUgCT0gSERDU19ERUZBVUxUX0VYUE9TVVJFLAogCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCkBAIC03NCw3ICs3NCwzNSBAQAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBoZGNzMTAyMF9jdHJsW10gPSB7fTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBoZGNzMTAyMF9jdHJsW10gPSB7CisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHhmZmZmLAorCQkJLnN0ZXAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gSERDU19ERUZBVUxUX0VYUE9TVVJFLAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBoZGNzX3NldF9leHBvc3VyZSwKKwkJLmdldCA9IGhkY3NfZ2V0X2V4cG9zdXJlCisJfSwgeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZ2FpbiIsCisJCQkubWluaW11bQk9IDB4MDAsCisJCQkubWF4aW11bQk9IDB4ZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfR0FJTiwKKwkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gaGRjc19zZXRfZ2FpbiwKKwkJLmdldCA9IGhkY3NfZ2V0X2dhaW4KKwl9Cit9OwogCiBzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBoZGNzMTAyMF9tb2RlW10gPSB7CiAJewpAQCAtMTIwLDYgKzE0OCw3IEBACiAJfSBleHA7CiAKIAlpbnQgcHNtcDsKKwl1OCBleHBfY2FjaGUsIGdhaW5fY2FjaGU7CiB9OwogCiBzdGF0aWMgaW50IGhkY3NfcmVnX3dyaXRlX3NlcShzdHJ1Y3Qgc2QgKnNkLCB1OCByZWcsIHU4ICp2YWxzLCB1OCBsZW4pCkBAIC0yMDUsMzQgKzIzNCw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBoZGNzICpoZGNzID0gc2QtPnNlbnNvcl9wcml2OwogCi0JLyogQ29sdW1uIHRpbWUgcGVyaW9kICovCi0JaW50IGN0OwotCS8qIENvbHVtbiBwcm9jZXNzaW5nIHBlcmlvZCAqLwotCWludCBjcDsKLQkvKiBSb3cgcHJvY2Vzc2luZyBwZXJpb2QgKi8KLQlpbnQgcnA7Ci0JaW50IGN5Y2xlczsKLQlpbnQgZXJyOwotCWludCByb3dleHA7Ci0JdTE2IGRhdGFbMl07CisJKnZhbCA9IGhkY3MtPmV4cF9jYWNoZTsKIAotCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIEhEQ1NfUk9XRVhQTCwgJmRhdGFbMF0pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgSERDU19ST1dFWFBILCAmZGF0YVsxXSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlyb3dleHAgPSAoZGF0YVsxXSA8PCA4KSB8IGRhdGFbMF07Ci0KLQljdCA9IGhkY3MtPmV4cC5jdG8gKyBoZGNzLT5wc21wICsgKEhEQ1NfQURDX1NUQVJUX1NJR19EVVIgKyAyKTsKLQljcCA9IGhkY3MtPmV4cC5jdG8gKyAoaGRjcy0+dyAqIGN0IC8gMik7Ci0JcnAgPSBoZGNzLT5leHAucnMgKyBjcDsKLQotCWN5Y2xlcyA9IHJwICogcm93ZXhwOwotCSp2YWwgPSBjeWNsZXMgLyBIRENTX0NMS19GUkVRX01IWjsKLQlQREVCVUcoRF9WNEwyLCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOwogCXJldHVybiAwOwogfQogCkBAIC0yNTIsOSArMjU1LDEyIEBACiAJICAgd2l0aGluIHRoZSBjb2x1bW4gcHJvY2Vzc2luZyBwZXJpb2QgKi8KIAlpbnQgbW5jdDsKIAlpbnQgY3ljbGVzLCBlcnI7Ci0JdTggZXhwWzRdOworCXU4IGV4cFsxNF07CiAKLQljeWNsZXMgPSB2YWwgKiBIRENTX0NMS19GUkVRX01IWjsKKwl2YWwgJj0gMHhmZjsKKwloZGNzLT5leHBfY2FjaGUgPSB2YWw7CisKKwljeWNsZXMgPSB2YWwgKiBIRENTX0NMS19GUkVRX01IWiAqIDI1NzsKIAogCWN0ID0gaGRjcy0+ZXhwLmN0byArIGhkY3MtPnBzbXAgKyAoSERDU19BRENfU1RBUlRfU0lHX0RVUiArIDIpOwogCWNwID0gaGRjcy0+ZXhwLmN0byArIChoZGNzLT53ICogY3QgLyAyKTsKQEAgLTI4OCw3MyArMjk0LDc5IEBACiAJCXNyb3dleHAgPSBtYXhfc3Jvd2V4cDsKIAogCWlmIChJU18xMDIwKHNkKSkgewotCQlleHBbMF0gPSByb3dleHAgJiAweGZmOwotCQlleHBbMV0gPSByb3dleHAgPj4gODsKLQkJZXhwWzJdID0gKHNyb3dleHAgPj4gMikgJiAweGZmOwotCQkvKiB0aGlzIGNsZWFycyBleHBvc3VyZSBlcnJvciBmbGFnICovCi0JCWV4cFszXSA9IDB4MTsKLQkJZXJyID0gaGRjc19yZWdfd3JpdGVfc2VxKHNkLCBIRENTX1JPV0VYUEwsIGV4cCwgNCk7CisJCWV4cFswXSA9IEhEQ1MyMF9DT05UUk9MOworCQlleHBbMV0gPSAweDAwOwkJLyogU3RvcCBzdHJlYW1pbmcgKi8KKwkJZXhwWzJdID0gSERDU19ST1dFWFBMOworCQlleHBbM10gPSByb3dleHAgJiAweGZmOworCQlleHBbNF0gPSBIRENTX1JPV0VYUEg7CisJCWV4cFs1XSA9IHJvd2V4cCA+PiA4OworCQlleHBbNl0gPSBIRENTMjBfU1JPV0VYUDsKKwkJZXhwWzddID0gKHNyb3dleHAgPj4gMikgJiAweGZmOworCQlleHBbOF0gPSBIRENTMjBfRVJST1I7CisJCWV4cFs5XSA9IDB4MTA7CQkvKiBDbGVhciBleHBvc3VyZSBlcnJvciBmbGFnKi8KKwkJZXhwWzEwXSA9IEhEQ1MyMF9DT05UUk9MOworCQlleHBbMTFdID0gMHgwNDsJCS8qIFJlc3RhcnQgc3RyZWFtaW5nICovCisJCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yX2J5dGVzKHNkLCBleHAsIDYpOwogCX0gZWxzZSB7Ci0JCWV4cFswXSA9IHJvd2V4cCAmIDB4ZmY7Ci0JCWV4cFsxXSA9IHJvd2V4cCA+PiA4OwotCQlleHBbMl0gPSBzcm93ZXhwICYgMHhmZjsKLQkJZXhwWzNdID0gc3Jvd2V4cCA+PiA4OwotCQllcnIgPSBoZGNzX3JlZ193cml0ZV9zZXEoc2QsIEhEQ1NfUk9XRVhQTCwgZXhwLCA0KTsKKwkJZXhwWzBdID0gSERDUzAwX0NPTlRST0w7CisJCWV4cFsxXSA9IDB4MDA7ICAgICAgICAgLyogU3RvcCBzdHJlYW1pbmcgKi8KKwkJZXhwWzJdID0gSERDU19ST1dFWFBMOworCQlleHBbM10gPSByb3dleHAgJiAweGZmOworCQlleHBbNF0gPSBIRENTX1JPV0VYUEg7CisJCWV4cFs1XSA9IHJvd2V4cCA+PiA4OworCQlleHBbNl0gPSBIRENTMDBfU1JPV0VYUEw7CisJCWV4cFs3XSA9IHNyb3dleHAgJiAweGZmOworCQlleHBbOF0gPSBIRENTMDBfU1JPV0VYUEg7CisJCWV4cFs5XSA9IHNyb3dleHAgPj4gODsKKwkJZXhwWzEwXSA9IEhEQ1NfU1RBVFVTOworCQlleHBbMTFdID0gMHgxMDsgICAgICAgICAvKiBDbGVhciBleHBvc3VyZSBlcnJvciBmbGFnKi8KKwkJZXhwWzEyXSA9IEhEQ1MwMF9DT05UUk9MOworCQlleHBbMTNdID0gMHgwNDsgICAgICAgICAvKiBSZXN0YXJ0IHN0cmVhbWluZyAqLworCQllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcl9ieXRlcyhzZCwgZXhwLCA3KTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwotCi0JCS8qIGNsZWFyIGV4cG9zdXJlIGVycm9yIGZsYWcgKi8KLQkJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsCi0JCSAgICAgSERDU19TVEFUVVMsIEJJVCg0KSk7CiAJfQogCVBERUJVRyhEX1Y0TDIsICJXcml0aW5nIGV4cG9zdXJlICVkLCByb3dleHAgJWQsIHNyb3dleHAgJWQiLAogCSAgICAgICB2YWwsIHJvd2V4cCwgc3Jvd2V4cCk7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBoZGNzX3NldF9nYWlucyhzdHJ1Y3Qgc2QgKnNkLCB1OCByLCB1OCBnLCB1OCBiKQorc3RhdGljIGludCBoZGNzX3NldF9nYWlucyhzdHJ1Y3Qgc2QgKnNkLCB1OCBnKQogeworCXN0cnVjdCBoZGNzICpoZGNzID0gc2QtPnNlbnNvcl9wcml2OworCWludCBlcnI7CiAJdTggZ2FpbnNbNF07CiAKKwloZGNzLT5nYWluX2NhY2hlID0gZzsKKwogCS8qIHRoZSB2b2x0YWdlIGdhaW4gQXYgPSAoMSArIDE5ICogdmFsIC8gMTI3KSAqICgxICsgYml0NykgKi8KLQlpZiAociA+IDEyNykKLQkJciA9IDB4ODAgfCAociAvIDIpOwogCWlmIChnID4gMTI3KQogCQlnID0gMHg4MCB8IChnIC8gMik7Ci0JaWYgKGIgPiAxMjcpCi0JCWIgPSAweDgwIHwgKGIgLyAyKTsKIAogCWdhaW5zWzBdID0gZzsKLQlnYWluc1sxXSA9IHI7Ci0JZ2FpbnNbMl0gPSBiOworCWdhaW5zWzFdID0gZzsKKwlnYWluc1syXSA9IGc7CiAJZ2FpbnNbM10gPSBnOwogCi0JcmV0dXJuIGhkY3NfcmVnX3dyaXRlX3NlcShzZCwgSERDU19FUkVDUEdBLCBnYWlucywgNCk7CisJZXJyID0gaGRjc19yZWdfd3JpdGVfc2VxKHNkLCBIRENTX0VSRUNQR0EsIGdhaW5zLCA0KTsKKwkJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBoZGNzX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGVycjsKLQl1MTYgZGF0YTsKKwlzdHJ1Y3QgaGRjcyAqaGRjcyA9IHNkLT5zZW5zb3JfcHJpdjsKIAotCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIEhEQ1NfRVJFQ1BHQSwgJmRhdGEpOworCSp2YWwgPSBoZGNzLT5nYWluX2NhY2hlOwogCi0JLyogQml0IDcgZG91YmxlcyB0aGUgZ2FpbiAqLwotCWlmIChkYXRhICYgMHg4MCkKLQkJKnZhbCA9IChkYXRhICYgMHg3ZikgKiAyOwotCWVsc2UKLQkJKnZhbCA9IGRhdGE7Ci0KLQlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBoZGNzX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCVBERUJVRyhEX1Y0TDIsICJXcml0aW5nIGdhaW4gJWQiLCB2YWwpOwogCXJldHVybiBoZGNzX3NldF9nYWlucygoc3RydWN0IHNkICopIGdzcGNhX2RldiwKLQkJCSAgICAgICB2YWwgJiAweGZmLCB2YWwgJiAweGZmLCB2YWwgJiAweGZmKTsKKwkJCSAgICAgICB2YWwgJiAweGZmKTsKIH0KIAogc3RhdGljIGludCBoZGNzX3NldF9zaXplKHN0cnVjdCBzZCAqc2QsCkBAIC01NzIsMTYgKzU4NCwxNSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gaGRjc19zZXRfZ2FpbnMoc2QsIEhEQ1NfREVGQVVMVF9HQUlOLCBIRENTX0RFRkFVTFRfR0FJTiwKLQkJCSAgICAgSERDU19ERUZBVUxUX0dBSU4pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gaGRjc19zZXRfZXhwb3N1cmUoJnNkLT5nc3BjYV9kZXYsIEhEQ1NfREVGQVVMVF9FWFBPU1VSRSk7CisJZXJyID0gaGRjc19zZXRfZ2FpbnMoc2QsIEhEQ1NfREVGQVVMVF9HQUlOKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IGhkY3Nfc2V0X3NpemUoc2QsIGhkY3MtPmFycmF5LndpZHRoLCBoZGNzLT5hcnJheS5oZWlnaHQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaGRjc19zZXRfZXhwb3N1cmUoJnNkLT5nc3BjYV9kZXYsIEhEQ1NfREVGQVVMVF9FWFBPU1VSRSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCmluZGV4IDQxMmYwNmMuLjM3YjMxYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKQEAgLTEyNCw3ICsxMjQsNyBAQAogI2RlZmluZSBIRENTX1JVTl9FTkFCTEUJCSgxIDw8IDIpCiAjZGVmaW5lIEhEQ1NfU0xFRVBfTU9ERQkJKDEgPDwgMSkKIAotI2RlZmluZSBIRENTX0RFRkFVTFRfRVhQT1NVUkUJNTAwMAorI2RlZmluZSBIRENTX0RFRkFVTFRfRVhQT1NVUkUJNDgKICNkZWZpbmUgSERDU19ERUZBVUxUX0dBSU4JMTI4CiAKIHN0YXRpYyBpbnQgaGRjc19wcm9iZV8xeDAwKHN0cnVjdCBzZCAqc2QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc3Q2NDIyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zdDY0MjIuYwppbmRleCA4N2NiNWI5Li5jMTFmMDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zdDY0MjIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zdDY0MjIuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAvKiAxMCBjb21wcmVzc2VkPyAqLwogCiAJCXsgMHgxNDM5LCAweDAwIH0sCi0vKiBhbnRpZmxpbW1lcj8/ICAweGEyIGdlciBwZXJmZWt0IGJpbGQgbW90IG1vbml0b3IgKi8KKy8qIGFudGktbm9pc2U/ICAweGEyIGdpdmVzIGEgcGVyZmVjdCBpbWFnZSAqLwogCiAJCXsgMHgxNDNiLCAweDA1IH0sCiAJCXsgMHgxNDNjLCAweDAwIH0sCS8qIDB4MDAtMHgwMSAtID8/PyAqLwpAQCAtMTk3LDE1ICsxOTcsMTQgQEAKIAkJeyAweDE1MDAsIDB4NTAgfSwJLyogMHgwMCAtIDB4RkYgIDB4ODAgPT0gY29tcHIgPyAqLwogCiAJCXsgMHgxNTAxLCAweGFmIH0sCi0vKiBoaWdoIHZhbC0+IGxqdXMgYXJlYSBibGlyIG1vcmthcmUuICovCi0vKiBsb3cgdmFsIC0+IGxqdXMgYXJlYSBibGlyIGxqdXNhcmUuICovCisvKiBoaWdoIHZhbC0+IGxpZ2h0IGFyZWEgZ2V0cyBkYXJrZXIgKi8KKy8qIGxvdyB2YWwgLT4gbGlnaHQgYXJlYSBnZXRzIGxpZ2h0ZXIgKi8KIAkJeyAweDE1MDIsIDB4YzIgfSwKLS8qIGhpZ2ggdmFsLT4gbGp1cyBhcmVhIGJsaXIgbW9ya2FyZS4gKi8KLS8qIGxvdyB2YWwgLT4gbGp1cyBhcmVhIGJsaXIgbGp1c2FyZS4gKi8KKy8qIGhpZ2ggdmFsLT4gbGlnaHQgYXJlYSBnZXRzIGRhcmtlciAqLworLyogbG93IHZhbCAtPiBsaWdodCBhcmVhIGdldHMgbGlnaHRlciAqLwogCQl7IDB4MTUwMywgMHg0NSB9LAotLyogaGlnaCB2YWwtPiBsanVzIGFyZWEgYmxpciBtb3JrYXJlLiAqLwotLyogbG93IHZhbCAtPiBsanVzIGFyZWEgYmxpciBsanVzYXJlLiAqLwotCisvKiBoaWdoIHZhbC0+IGxpZ2h0IGFyZWEgZ2V0cyBkYXJrZXIgKi8KKy8qIGxvdyB2YWwgLT4gbGlnaHQgYXJlYSBnZXRzIGxpZ2h0ZXIgKi8KIAkJeyAweDE1MDUsIDB4MDIgfSwKIC8qIDIgIDogMzI0eDI0OCAgODAzNTIgYnl0ZXMgKi8KIC8qIDcgIDogMjQ4eDE2MiAgNDAxNzYgYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCmluZGV4IDYxOTI1MGUuLjU4OTA0MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtMjk0Niw3ICsyOTQ2LDggQEAKIAkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweDA1OGMsIDB4MDAwMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CisJCQlpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKKwkJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOwogCQkJYnJlYWs7CiAJCX0KIAkJbXNsZWVwKDEwMCk7CkBAIC0yOTY0LDcgKzI5NjUsNyBAQAogCiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMTMxMF9TT0MpCiAJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOwotCWVsc2UKKwllbHNlIGlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQogCQlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7CiAJcmVnX3coZGV2LCAweGEwLCAweDA5LCAweGIwMDMpOwpAQCAtMjk4MSw3ICsyOTgyLDcgQEAKIC8qZml4bWU6IGlzIHRoaXMgdXNlZnVsPyovCiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMTMxMF9TT0MpCiAJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOwotCWVsc2UKKwllbHNlIGlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQogCQlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwppbmRleCA2M2VhMGZiLi40NjNlYzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCSAiXHRcdFx0LTEgaXMgYXV0b2RldGVjdCwgMCBpcyBvZmYsIDEgaXMgb25cbiIKIAkJICJcdFx0XHREZWZhdWx0IGlzIGF1dG9kZXRlY3QiKTsKIAotTU9EVUxFX1BBUk1fREVTQyhpdnR2X2ZpcnN0X21pbm9yLCAiU2V0IGtlcm5lbCBudW1iZXIgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOworTU9EVUxFX1BBUk1fREVTQyhpdnR2X2ZpcnN0X21pbm9yLCAiU2V0IGRldmljZSBub2RlIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CiAKIE1PRFVMRV9BVVRIT1IoIktldmluIFRoYXllciwgQ2hyaXMgS2VubmVkeSwgSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTUvQ1gyMzQxNiBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKaW5kZXggOGYxNWEzMS4uYjljNzFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKQEAgLTE2MSwxOSArMTYxLDE5IEBACiAJCXJldHVybiAtMTsKIAlpZiAoaHcgPT0gSVZUVl9IV19UVU5FUikgewogCQkvKiBzcGVjaWFsIHR1bmVyIGhhbmRsaW5nICovCi0JCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJml0di0+djRsMl9kZXYsCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmaXR2LT52NGwyX2RldiwKIAkJCQlhZGFwLCBtb2QsIHR5cGUsCi0JCQkJaXR2LT5jYXJkX2kyYy0+cmFkaW8pOworCQkJCTAsIGl0di0+Y2FyZF9pMmMtPnJhZGlvKTsKIAkJaWYgKHNkKQogCQkJc2QtPmdycF9pZCA9IDEgPDwgaWR4OwotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAorCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJml0di0+djRsMl9kZXYsCiAJCQkJYWRhcCwgbW9kLCB0eXBlLAotCQkJCWl0di0+Y2FyZF9pMmMtPmRlbW9kKTsKKwkJCQkwLCBpdHYtPmNhcmRfaTJjLT5kZW1vZCk7CiAJCWlmIChzZCkKIAkJCXNkLT5ncnBfaWQgPSAxIDw8IGlkeDsKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmaXR2LT52NGwyX2RldiwKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAogCQkJCWFkYXAsIG1vZCwgdHlwZSwKLQkJCQlpdHYtPmNhcmRfaTJjLT50dik7CisJCQkJMCwgaXR2LT5jYXJkX2kyYy0+dHYpOwogCQlpZiAoc2QpCiAJCQlzZC0+Z3JwX2lkID0gMSA8PCBpZHg7CiAJCXJldHVybiBzZCA/IDAgOiAtMTsKQEAgLTE4MSwxMSArMTgxLDExIEBACiAJaWYgKCFod19hZGRyc1tpZHhdKQogCQlyZXR1cm4gLTE7CiAJaWYgKGh3ID09IElWVFZfSFdfVVBENjQwMzFBIHx8IGh3ID09IElWVFZfSFdfVVBENjQwOFgpIHsKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZpdHYtPnY0bDJfZGV2LAotCQkJCWFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSk7CisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmaXR2LT52NGwyX2RldiwKKwkJCQlhZGFwLCBtb2QsIHR5cGUsIDAsIEkyQ19BRERSUyhod19hZGRyc1tpZHhdKSk7CiAJfSBlbHNlIHsKIAkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAotCQkJCWFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSk7CisJCQkJYWRhcCwgbW9kLCB0eXBlLCBod19hZGRyc1tpZHhdLCBOVUxMKTsKIAl9CiAJaWYgKHNkKQogCQlzZC0+Z3JwX2lkID0gMSA8PCBpZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggMTVkYTAxNy4uNjc2OTllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtMjYxLDggKzI2MSw4IEBACiAJdmlkZW9fc2V0X2RydmRhdGEocy0+dmRldiwgcyk7CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52ZGV2LCB2ZmxfdHlwZSwgbnVtKSkgewotCQlJVlRWX0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIGtlcm5lbCBudW1iZXIgJWRcbiIsCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZV9ub193YXJuKHMtPnZkZXYsIHZmbF90eXBlLCBudW0pKSB7CisJCUlWVFZfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMgKGRldmljZSBub2RlIG51bWJlciAlZClcbiIsCiAJCQkJcy0+bmFtZSwgbnVtKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uocy0+dmRldik7CiAJCXMtPnZkZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYwppbmRleCA0ZDc5NGI0Li40NTM4OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYwpAQCAtMTMsMTMgKzEzLDEzIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAogLyogbXQ5bTAwMSBpMmMgYWRkcmVzcyAweDVkCi0gKiBUaGUgcGxhdGZvcm0gaGFzIHRvIGRlZmluZSBpMmNfYm9hcmRfaW5mbwotICogYW5kIGNhbGwgaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oKSAqLworICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgY3RydWN0IGkyY19ib2FyZF9pbmZvIG9iamVjdHMgYW5kIGxpbmsgdG8gdGhlbQorICogZnJvbSBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICovCiAKIC8qIG10OW0wMDEgc2VsZWN0ZWQgcmVnaXN0ZXIgYWRkcmVzc2VzICovCiAjZGVmaW5lIE1UOU0wMDFfQ0hJUF9WRVJTSU9OCQkweDAwCkBAIC0zOSw2ICszOSwxMyBAQAogI2RlZmluZSBNVDlNMDAxX0dMT0JBTF9HQUlOCQkweDM1CiAjZGVmaW5lIE1UOU0wMDFfQ0hJUF9FTkFCTEUJCTB4RjEKIAorI2RlZmluZSBNVDlNMDAxX01BWF9XSURUSAkJMTI4MAorI2RlZmluZSBNVDlNMDAxX01BWF9IRUlHSFQJCTEwMjQKKyNkZWZpbmUgTVQ5TTAwMV9NSU5fV0lEVEgJCTQ4CisjZGVmaW5lIE1UOU0wMDFfTUlOX0hFSUdIVAkJMzIKKyNkZWZpbmUgTVQ5TTAwMV9DT0xVTU5fU0tJUAkJMjAKKyNkZWZpbmUgTVQ5TTAwMV9ST1dfU0tJUAkJMTIKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IG10OW0wMDFfY29sb3VyX2Zvcm1hdHNbXSA9IHsKIAkvKiBPcmRlciBpbXBvcnRhbnQ6IGZpcnN0IG5hdGl2ZWx5IHN1cHBvcnRlZCwKIAkgKiBzZWNvbmQgc3VwcG9ydGVkIHdpdGggYSBHUElPIGV4dGVuZGVyICovCkBAIC02OSwxMiArNzYsMjAgQEAKIH07CiAKIHN0cnVjdCBtdDltMDAxIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CisJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CS8qIFNlbnNvciB3aW5kb3cgKi8KKwlfX3UzMiBmb3VyY2M7CiAJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOU0wMDEqIGNvZGVzIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KKwl1bnNpZ25lZCBpbnQgZ2FpbjsKKwl1bnNpZ25lZCBpbnQgZXhwb3N1cmU7CiAJdW5zaWduZWQgY2hhciBhdXRvZXhwb3N1cmU7CiB9OwogCitzdGF0aWMgc3RydWN0IG10OW0wMDEgKnRvX210OW0wMDEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBzdHJ1Y3QgbXQ5bTAwMSwgc3ViZGV2KTsKK30KKwogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCByZWcpCiB7CiAJczMyIGRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcpOwpAQCAtMTA5LDM1ICsxMjQsMjAgQEAKIAlyZXR1cm4gcmVnX3dyaXRlKGNsaWVudCwgcmVnLCByZXQgJiB+ZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMDAxX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAotCWRldl9kYmcoaWNkLT52ZGV2LT5wYXJlbnQsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmIChpY2wtPnBvd2VyKSB7Ci0JCXJldCA9IGljbC0+cG93ZXIoJmNsaWVudC0+ZGV2LCAxKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoaWNkLT52ZGV2LT5wYXJlbnQsCi0JCQkJIlBsYXRmb3JtIGZhaWxlZCB0byBwb3dlci1vbiB0aGUgY2FtZXJhLlxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQorCS8qCisJICogV2UgZG9uJ3Qga25vdywgd2hldGhlciBwbGF0Zm9ybSBwcm92aWRlcyByZXNldCwgaXNzdWUgYSBzb2Z0IHJlc2V0CisJICogdG9vLiBUaGlzIHJldHVybnMgYWxsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKwkgKi8KKwlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1JFU0VULCAxKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9SRVNFVCwgMCk7CiAKLQkvKiBUaGUgY2FtZXJhIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IG9uLCB3ZSByZXNldCBpdCBhZGRpdGlvbmFsbHkgKi8KLQlpZiAoaWNsLT5yZXNldCkKLQkJcmV0ID0gaWNsLT5yZXNldCgmY2xpZW50LT5kZXYpOwotCWVsc2UKLQkJcmV0ID0gLUVOT0RFVjsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCS8qIEVpdGhlciBubyBwbGF0Zm9ybSByZXNldCwgb3IgcGxhdGZvcm0gcmVzZXQgZmFpbGVkICovCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfUkVTRVQsIDEpOwotCQlpZiAoIXJldCkKLQkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfUkVTRVQsIDApOwotCX0KIAkvKiBEaXNhYmxlIGNoaXAsIHN5bmNocm9ub3VzIG9wdGlvbiB1cGRhdGUgKi8KIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9PVVRQVVRfQ09OVFJPTCwgMCk7CkBAIC0xNDUsMzYgKzE0NSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMDAxX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAotCS8qIERpc2FibGUgdGhlIGNoaXAgKi8KLQlyZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX09VVFBVVF9DT05UUk9MLCAwKTsKLQotCWlmIChpY2wtPnBvd2VyKQotCQlpY2wtPnBvd2VyKCZjbGllbnQtPmRldiwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtdDltMDAxX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQotCS8qIFN3aXRjaCB0byBtYXN0ZXIgIm5vcm1hbCIgbW9kZSAqLwotCWlmIChyZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX09VVFBVVF9DT05UUk9MLCAyKSA8IDApCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG10OW0wMDFfc3RvcF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0KLQkvKiBTdG9wIHNlbnNvciByZWFkb3V0ICovCi0JaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfT1VUUFVUX0NPTlRST0wsIDApIDwgMCkKKwkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgb3Igc3RvcCBzZW5zb3IgcmVhZG91dCAqLworCWlmIChyZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX09VVFBVVF9DT05UUk9MLCBlbmFibGUgPyAyIDogMCkgPCAwKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4Miw4ICsxNTgsNyBAQAogc3RhdGljIGludCBtdDltMDAxX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGxvbmcgd2lkdGhfZmxhZyA9IGZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0s7CiAKIAkvKiBPbmx5IG9uZSB3aWR0aCBiaXQgbWF5IGJlIHNldCAqLwpAQCAtMjA1LDggKzE4MCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG10OW0wMDFfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTAwMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAkvKiBNVDlNMDAxIGhhcyBhbGwgY2FwdHVyZV9mb3JtYXQgcGFyYW1ldGVycyBmaXhlZCAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HIHwKIAkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CkBAIC0yMjAsMTMgKzE5NCwzNSBAQAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBtdDltMDAxX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgaW50IG10OW0wMDFfc19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IHRvX210OW0wMDEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSBhLT5jOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCWNvbnN0IHUxNiBoYmxhbmsgPSA5LCB2YmxhbmsgPSAyNTsKKwl1bnNpZ25lZCBpbnQgdG90YWxfaDsKKworCWlmIChtdDltMDAxLT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCB8fAorCSAgICBtdDltMDAxLT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCisJCS8qCisJCSAqIEJheWVyIGZvcm1hdCAtIGV2ZW4gbnVtYmVyIG9mIHJvd3MgZm9yIHNpbXBsaWNpdHksCisJCSAqIGJ1dCBsZXQgdGhlIHVzZXIgcGxheSB3aXRoIHRoZSB0b3Agcm93LgorCQkgKi8KKwkJcmVjdC5oZWlnaHQgPSBBTElHTihyZWN0LmhlaWdodCwgMik7CisKKwkvKiBEYXRhc2hlZXQgcmVxdWlyZW1lbnQ6IHNlZSByZWdpc3RlciBkZXNjcmlwdGlvbiAqLworCXJlY3Qud2lkdGggPSBBTElHTihyZWN0LndpZHRoLCAyKTsKKwlyZWN0LmxlZnQgPSBBTElHTihyZWN0LmxlZnQsIDIpOworCisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LmxlZnQsICZyZWN0LndpZHRoLAorCQkgICAgIE1UOU0wMDFfQ09MVU1OX1NLSVAsIE1UOU0wMDFfTUlOX1dJRFRILCBNVDlNMDAxX01BWF9XSURUSCk7CisKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QudG9wLCAmcmVjdC5oZWlnaHQsCisJCSAgICAgTVQ5TTAwMV9ST1dfU0tJUCwgTVQ5TTAwMV9NSU5fSEVJR0hULCBNVDlNMDAxX01BWF9IRUlHSFQpOworCisJdG90YWxfaCA9IHJlY3QuaGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rOwogCiAJLyogQmxhbmtpbmcgYW5kIHN0YXJ0IHZhbHVlcyAtIGRlZmF1bHQuLi4gKi8KIAlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX0hPUklaT05UQUxfQkxBTktJTkcsIGhibGFuayk7CkBAIC0yMzYsNjYgKzIzMiwxMjYgQEAKIAkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyCiAJICogY2FsbCB0byBpY2QtPnRyeV9mbXQoKSAqLwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX0NPTFVNTl9TVEFSVCwgcmVjdC0+bGVmdCk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfQ09MVU1OX1NUQVJULCByZWN0LmxlZnQpOwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1JPV19TVEFSVCwgcmVjdC0+dG9wKTsKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9ST1dfU1RBUlQsIHJlY3QudG9wKTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9XSU5ET1dfV0lEVEgsIHJlY3QtPndpZHRoIC0gMSk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfV0lORE9XX1dJRFRILCByZWN0LndpZHRoIC0gMSk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfV0lORE9XX0hFSUdIVCwKLQkJCQlyZWN0LT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgLSAxKTsKKwkJCQlyZWN0LmhlaWdodCArIGljZC0+eV9za2lwX3RvcCAtIDEpOwogCWlmICghcmV0ICYmIG10OW0wMDEtPmF1dG9leHBvc3VyZSkgewotCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1NIVVRURVJfV0lEVEgsCi0JCQkJcmVjdC0+aGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rKTsKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9TSFVUVEVSX1dJRFRILCB0b3RhbF9oKTsKIAkJaWYgKCFyZXQpIHsKIAkJCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwgPQogCQkJCXNvY19jYW1lcmFfZmluZF9xY3RybChpY2QtPm9wcywKIAkJCQkJCSAgICAgIFY0TDJfQ0lEX0VYUE9TVVJFKTsKLQkJCWljZC0+ZXhwb3N1cmUgPSAoNTI0ICsgKHJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArCi0JCQkJCQl2YmxhbmsgLSAxKSAqCi0JCQkJCSAocWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bSkpIC8KKwkJCW10OW0wMDEtPmV4cG9zdXJlID0gKDUyNCArICh0b3RhbF9oIC0gMSkgKgorCQkJCSAocWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bSkpIC8KIAkJCQkxMDQ4ICsgcWN0cmwtPm1pbmltdW07CiAJCX0KIAl9CiAKKwlpZiAoIXJldCkKKwkJbXQ5bTAwMS0+cmVjdCA9IHJlY3Q7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0wMDFfZ19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOworCisJYS0+Ywk9IG10OW0wMDEtPnJlY3Q7CisJYS0+dHlwZQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0wMDFfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCWEtPmJvdW5kcy5sZWZ0CQkJPSBNVDlNMDAxX0NPTFVNTl9TS0lQOworCWEtPmJvdW5kcy50b3AJCQk9IE1UOU0wMDFfUk9XX1NLSVA7CisJYS0+Ym91bmRzLndpZHRoCQkJPSBNVDlNMDAxX01BWF9XSURUSDsKKwlhLT5ib3VuZHMuaGVpZ2h0CQk9IE1UOU0wMDFfTUFYX0hFSUdIVDsKKwlhLT5kZWZyZWN0CQkJPSBhLT5ib3VuZHM7CisJYS0+dHlwZQkJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlhLT5waXhlbGFzcGVjdC5udW1lcmF0b3IJPSAxOworCWEtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yCT0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0wMDFfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IHRvX210OW0wMDEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCXBpeC0+d2lkdGgJCT0gbXQ5bTAwMS0+cmVjdC53aWR0aDsKKwlwaXgtPmhlaWdodAkJPSBtdDltMDAxLT5yZWN0LmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0CT0gbXQ5bTAwMS0+Zm91cmNjOworCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FOworCXBpeC0+Y29sb3JzcGFjZQkJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0wMDFfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IHRvX210OW0wMDEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9jcm9wIGEgPSB7CisJCS5jID0geworCQkJLmxlZnQJPSBtdDltMDAxLT5yZWN0LmxlZnQsCisJCQkudG9wCT0gbXQ5bTAwMS0+cmVjdC50b3AsCisJCQkud2lkdGgJPSBwaXgtPndpZHRoLAorCQkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCQl9LAorCX07CisJaW50IHJldDsKKworCS8qIE5vIHN1cHBvcnQgZm9yIHNjYWxpbmcgc28gZmFyLCBqdXN0IGNyb3AuIFRPRE86IHVzZSBza2lwcGluZyAqLworCXJldCA9IG10OW0wMDFfc19jcm9wKHNkLCAmYSk7CisJaWYgKCFyZXQpIHsKKwkJcGl4LT53aWR0aCA9IG10OW0wMDEtPnJlY3Qud2lkdGg7CisJCXBpeC0+aGVpZ2h0ID0gbXQ5bTAwMS0+cmVjdC5oZWlnaHQ7CisJCW10OW0wMDEtPmZvdXJjYyA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMDAxX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IG10OW0wMDFfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gewotCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAotCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCi0JCS53aWR0aAk9IGYtPmZtdC5waXgud2lkdGgsCi0JCS5oZWlnaHQJPSBmLT5mbXQucGl4LmhlaWdodCwKLQl9OwotCi0JLyogTm8gc3VwcG9ydCBmb3Igc2NhbGluZyBzbyBmYXIsIGp1c3QgY3JvcC4gVE9ETzogdXNlIHNraXBwaW5nICovCi0JcmV0dXJuIG10OW0wMDFfc2V0X2Nyb3AoaWNkLCAmcmVjdCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5bTAwMV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoteworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKLQl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJnBpeC0+d2lkdGgsIDQ4LCAxMjgwLCAxLAotCQkJICAgICAgJnBpeC0+aGVpZ2h0LCAzMiArIGljZC0+eV9za2lwX3RvcCwKLQkJCSAgICAgIDEwMjQgKyBpY2QtPnlfc2tpcF90b3AsIDAsIDApOworCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcGl4LT53aWR0aCwgTVQ5TTAwMV9NSU5fV0lEVEgsCisJCU1UOU0wMDFfTUFYX1dJRFRILCAxLAorCQkmcGl4LT5oZWlnaHQsIE1UOU0wMDFfTUlOX0hFSUdIVCArIGljZC0+eV9za2lwX3RvcCwKKwkJTVQ5TTAwMV9NQVhfSEVJR0hUICsgaWNkLT55X3NraXBfdG9wLCAwLCAwKTsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKKwkgICAgcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKKwkJcGl4LT5oZWlnaHQgPSBBTElHTihwaXgtPmhlaWdodCAtIDEsIDIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCitzdGF0aWMgaW50IG10OW0wMDFfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQogewotCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOwogCiAJaWYgKGlkLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoaWQtPm1hdGNoLmFkZHIgIT0gbXQ5bTAwMS0+Y2xpZW50LT5hZGRyKQorCWlmIChpZC0+bWF0Y2guYWRkciAhPSBjbGllbnQtPmFkZHIpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWQtPmlkZW50CT0gbXQ5bTAwMS0+bW9kZWw7CkBAIC0zMDUsMTAgKzM2MSwxMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotc3RhdGljIGludCBtdDltMDAxX2dldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3N0YXRpYyBpbnQgbXQ5bTAwMV9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAogCWlmIChyZWctPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSIHx8IHJlZy0+cmVnID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjUsMTAgKzM4MSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBtdDltMDAxX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCiAJaWYgKHJlZy0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM4MSwzOSArNDM3LDE3IEBACiAJfQogfTsKIAotc3RhdGljIGludCBtdDltMDAxX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIG10OW0wMDFfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLXN0YXRpYyBpbnQgbXQ5bTAwMV9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKLXN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKLQogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBtdDltMDAxX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJCT0gbXQ5bTAwMV92aWRlb19wcm9iZSwKLQkucmVtb3ZlCQkJPSBtdDltMDAxX3ZpZGVvX3JlbW92ZSwKLQkuaW5pdAkJCT0gbXQ5bTAwMV9pbml0LAotCS5yZWxlYXNlCQk9IG10OW0wMDFfcmVsZWFzZSwKLQkuc3RhcnRfY2FwdHVyZQkJPSBtdDltMDAxX3N0YXJ0X2NhcHR1cmUsCi0JLnN0b3BfY2FwdHVyZQkJPSBtdDltMDAxX3N0b3BfY2FwdHVyZSwKLQkuc2V0X2Nyb3AJCT0gbXQ5bTAwMV9zZXRfY3JvcCwKLQkuc2V0X2ZtdAkJPSBtdDltMDAxX3NldF9mbXQsCi0JLnRyeV9mbXQJCT0gbXQ5bTAwMV90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OW0wMDFfc2V0X2J1c19wYXJhbSwKIAkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5bTAwMV9xdWVyeV9idXNfcGFyYW0sCiAJLmNvbnRyb2xzCQk9IG10OW0wMDFfY29udHJvbHMsCiAJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG10OW0wMDFfY29udHJvbHMpLAotCS5nZXRfY29udHJvbAkJPSBtdDltMDAxX2dldF9jb250cm9sLAotCS5zZXRfY29udHJvbAkJPSBtdDltMDAxX3NldF9jb250cm9sLAotCS5nZXRfY2hpcF9pZAkJPSBtdDltMDAxX2dldF9jaGlwX2lkLAotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkuZ2V0X3JlZ2lzdGVyCQk9IG10OW0wMDFfZ2V0X3JlZ2lzdGVyLAotCS5zZXRfcmVnaXN0ZXIJCT0gbXQ5bTAwMV9zZXRfcmVnaXN0ZXIsCi0jZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgbXQ5bTAwMV9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOwogCWludCBkYXRhOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewpAQCAtNDI2LDE0ICs0NjAsMjEgQEAKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CiAJCWN0cmwtPnZhbHVlID0gbXQ5bTAwMS0+YXV0b2V4cG9zdXJlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWN0cmwtPnZhbHVlID0gbXQ5bTAwMS0+Z2FpbjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJY3RybC0+dmFsdWUgPSBtdDltMDAxLT5leHBvc3VyZTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IG10OW0wMDFfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IHRvX210OW0wMDEoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKIAlpbnQgZGF0YTsKIApAQCAtNDYwLDcgKzUwMSw3IEBACiAJCQl1bnNpZ25lZCBsb25nIHJhbmdlID0gcWN0cmwtPmRlZmF1bHRfdmFsdWUgLSBxY3RybC0+bWluaW11bTsKIAkJCWRhdGEgPSAoKGN0cmwtPnZhbHVlIC0gcWN0cmwtPm1pbmltdW0pICogOCArIHJhbmdlIC8gMikgLyByYW5nZTsKIAotCQkJZGV2X2RiZygmaWNkLT5kZXYsICJTZXR0aW5nIGdhaW4gJWRcbiIsIGRhdGEpOworCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTZXR0aW5nIGdhaW4gJWRcbiIsIGRhdGEpOwogCQkJZGF0YSA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfR0xPQkFMX0dBSU4sIGRhdGEpOwogCQkJaWYgKGRhdGEgPCAwKQogCQkJCXJldHVybiAtRUlPOwpAQCAtNDc4LDcgKzUxOSw3IEBACiAJCQllbHNlCiAJCQkJZGF0YSA9ICgoZ2FpbiAtIDY0KSAqIDcgKyAyOCkgLyA1NiArIDk2OwogCi0JCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiBmcm9tICVkIHRvICVkXG4iLAorCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTZXR0aW5nIGdhaW4gZnJvbSAlZCB0byAlZFxuIiwKIAkJCQkgcmVnX3JlYWQoY2xpZW50LCBNVDlNMDAxX0dMT0JBTF9HQUlOKSwgZGF0YSk7CiAJCQlkYXRhID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9HTE9CQUxfR0FJTiwgZGF0YSk7CiAJCQlpZiAoZGF0YSA8IDApCkBAIC00ODYsNyArNTI3LDcgQEAKIAkJfQogCiAJCS8qIFN1Y2Nlc3MgKi8KLQkJaWNkLT5nYWluID0gY3RybC0+dmFsdWU7CisJCW10OW0wMDEtPmdhaW4gPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKIAkJLyogbXQ5bTAwMSBoYXMgbWF4aW11bSA9PSBkZWZhdWx0ICovCkBAIC00OTcsMjMgKzUzOCwyNyBAQAogCQkJdW5zaWduZWQgbG9uZyBzaHV0dGVyID0gKChjdHJsLT52YWx1ZSAtIHFjdHJsLT5taW5pbXVtKSAqIDEwNDggKwogCQkJCQkJIHJhbmdlIC8gMikgLyByYW5nZSArIDE7CiAKLQkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBzaHV0dGVyIHdpZHRoIGZyb20gJWQgdG8gJWx1XG4iLAotCQkJCSByZWdfcmVhZChjbGllbnQsIE1UOU0wMDFfU0hVVFRFUl9XSURUSCksIHNodXR0ZXIpOworCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsCisJCQkJIlNldHRpbmcgc2h1dHRlciB3aWR0aCBmcm9tICVkIHRvICVsdVxuIiwKKwkJCQlyZWdfcmVhZChjbGllbnQsIE1UOU0wMDFfU0hVVFRFUl9XSURUSCksCisJCQkJc2h1dHRlcik7CiAJCQlpZiAocmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9TSFVUVEVSX1dJRFRILCBzaHV0dGVyKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlpY2QtPmV4cG9zdXJlID0gY3RybC0+dmFsdWU7CisJCQltdDltMDAxLT5leHBvc3VyZSA9IGN0cmwtPnZhbHVlOwogCQkJbXQ5bTAwMS0+YXV0b2V4cG9zdXJlID0gMDsKIAkJfQogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CiAJCWlmIChjdHJsLT52YWx1ZSkgewogCQkJY29uc3QgdTE2IHZibGFuayA9IDI1OwotCQkJaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfU0hVVFRFUl9XSURUSCwgaWNkLT5oZWlnaHQgKwotCQkJCSAgICAgIGljZC0+eV9za2lwX3RvcCArIHZibGFuaykgPCAwKQorCQkJdW5zaWduZWQgaW50IHRvdGFsX2ggPSBtdDltMDAxLT5yZWN0LmhlaWdodCArCisJCQkJaWNkLT55X3NraXBfdG9wICsgdmJsYW5rOworCQkJaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfU0hVVFRFUl9XSURUSCwKKwkJCQkgICAgICB0b3RhbF9oKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CiAJCQlxY3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybChpY2QtPm9wcywgVjRMMl9DSURfRVhQT1NVUkUpOwotCQkJaWNkLT5leHBvc3VyZSA9ICg1MjQgKyAoaWNkLT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyB2YmxhbmsgLSAxKSAqCi0JCQkJCSAocWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bSkpIC8KKwkJCW10OW0wMDEtPmV4cG9zdXJlID0gKDUyNCArICh0b3RhbF9oIC0gMSkgKgorCQkJCSAocWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bSkpIC8KIAkJCQkxMDQ4ICsgcWN0cmwtPm1pbmltdW07CiAJCQltdDltMDAxLT5hdXRvZXhwb3N1cmUgPSAxOwogCQl9IGVsc2UKQEAgLTUyNSwxNCArNTcwLDE0IEBACiAKIC8qIEludGVyZmFjZSBhY3RpdmUsIGNhbiB1c2UgaTJjLiBJZiBpdCBmYWlscywgaXQgY2FuIGluZGVlZCBtZWFuLCB0aGF0CiAgKiB0aGlzIHdhc24ndCBvdXIgY2FwdHVyZSBpbnRlcmZhY2UsIHNvLCB3ZSB3YWl0IGZvciB0aGUgcmlnaHQgb25lICovCi1zdGF0aWMgaW50IG10OW0wMDFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0wMDFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IHRvX210OW0wMDEoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAlzMzIgZGF0YTsKLQlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKIAogCS8qIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCiAJICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gKi8KQEAgLTU0Miw3ICs1ODcsNyBAQAogCiAJLyogRW5hYmxlIHRoZSBjaGlwICovCiAJZGF0YSA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfQ0hJUF9FTkFCTEUsIDEpOwotCWRldl9kYmcoJmljZC0+ZGV2LCAid3JpdGU6ICVkXG4iLCBkYXRhKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIndyaXRlOiAlZFxuIiwgZGF0YSk7CiAKIAkvKiBSZWFkIG91dCB0aGUgY2hpcCB2ZXJzaW9uIHJlZ2lzdGVyICovCiAJZGF0YSA9IHJlZ19yZWFkKGNsaWVudCwgTVQ5TTAwMV9DSElQX1ZFUlNJT04pOwpAQCAtNTU5LDEwICs2MDQsOSBAQAogCQlpY2QtPmZvcm1hdHMgPSBtdDltMDAxX21vbm9jaHJvbWVfZm9ybWF0czsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZGV2X2VycigmaWNkLT5kZXYsCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJIk5vIE1UOU0wMDEgY2hpcCBkZXRlY3RlZCwgcmVnaXN0ZXIgcmVhZCAleFxuIiwgZGF0YSk7Ci0JCWdvdG8gZWkyYzsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWNkLT5udW1fZm9ybWF0cyA9IDA7CkBAIC01ODUsNDIgKzYyOSw3MiBAQAogCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KQogCQlpY2QtPm51bV9mb3JtYXRzKys7CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJEZXRlY3RlZCBhIE1UOU0wMDEgY2hpcCBJRCAleCAoJXMpXG4iLCBkYXRhLAorCW10OW0wMDEtPmZvdXJjYyA9IGljZC0+Zm9ybWF0cy0+Zm91cmNjOworCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlNMDAxIGNoaXAgSUQgJXggKCVzKVxuIiwgZGF0YSwKIAkJIGRhdGEgPT0gMHg4NDMxID8gIkMxMlNUTSIgOiAiQzEyU1QiKTsKIAotCS8qIE5vdyB0aGF0IHdlIGtub3cgdGhlIG1vZGVsLCB3ZSBjYW4gc3RhcnQgdmlkZW8gKi8KLQlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlaXNpczsKKwlyZXQgPSBtdDltMDAxX2luaXQoY2xpZW50KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGlzZSB0aGUgY2FtZXJhXG4iKTsKIAotCXJldHVybiAwOworCS8qIG10OW0wMDFfaW5pdCgpIGhhcyByZXNldCB0aGUgY2hpcCwgcmV0dXJuaW5nIHJlZ2lzdGVycyB0byBkZWZhdWx0cyAqLworCW10OW0wMDEtPmdhaW4gPSA2NDsKKwltdDltMDAxLT5leHBvc3VyZSA9IDI1NTsKIAotZWlzaXM6Ci1laTJjOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG10OW0wMDFfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTAwMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiVmlkZW8gJXggcmVtb3ZlZDogJXAsICVwXG4iLCBtdDltMDAxLT5jbGllbnQtPmFkZHIsCisJZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyByZW1vdmVkOiAlcCwgJXBcbiIsCiAJCWljZC0+ZGV2LnBhcmVudCwgaWNkLT52ZGV2KTsKLQlzb2NfY2FtZXJhX3ZpZGVvX3N0b3AoaWNkKTsKIAlpZiAoaWNsLT5mcmVlX2J1cykKIAkJaWNsLT5mcmVlX2J1cyhpY2wpOwogfQogCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG10OW0wMDFfc3ViZGV2X2NvcmVfb3BzID0geworCS5nX2N0cmwJCT0gbXQ5bTAwMV9nX2N0cmwsCisJLnNfY3RybAkJPSBtdDltMDAxX3NfY3RybCwKKwkuZ19jaGlwX2lkZW50CT0gbXQ5bTAwMV9nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyCT0gbXQ5bTAwMV9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gbXQ5bTAwMV9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBtdDltMDAxX3N1YmRldl92aWRlb19vcHMgPSB7CisJLnNfc3RyZWFtCT0gbXQ5bTAwMV9zX3N0cmVhbSwKKwkuc19mbXQJCT0gbXQ5bTAwMV9zX2ZtdCwKKwkuZ19mbXQJCT0gbXQ5bTAwMV9nX2ZtdCwKKwkudHJ5X2ZtdAk9IG10OW0wMDFfdHJ5X2ZtdCwKKwkuc19jcm9wCQk9IG10OW0wMDFfc19jcm9wLAorCS5nX2Nyb3AJCT0gbXQ5bTAwMV9nX2Nyb3AsCisJLmNyb3BjYXAJPSBtdDltMDAxX2Nyb3BjYXAsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBtdDltMDAxX3N1YmRldl9vcHMgPSB7CisJLmNvcmUJPSAmbXQ5bTAwMV9zdWJkZXZfY29yZV9vcHMsCisJLnZpZGVvCT0gJm10OW0wMDFfc3ViZGV2X3ZpZGVvX29wcywKK307CisKIHN0YXRpYyBpbnQgbXQ5bTAwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCiB7CiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2w7CiAJaW50IHJldDsKIAorCWlmICghaWNkKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTVQ5TTAwMTogbWlzc2luZyBzb2MtY2FtZXJhIGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJaWYgKCFpY2wpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlNMDAxIGRyaXZlciBuZWVkcyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MzYsNDMgKzcxMCw0MCBAQAogCWlmICghbXQ5bTAwMSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdDltMDAxLT5jbGllbnQgPSBjbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgbXQ5bTAwMSk7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJm10OW0wMDEtPnN1YmRldiwgY2xpZW50LCAmbXQ5bTAwMV9zdWJkZXZfb3BzKTsKIAogCS8qIFNlY29uZCBzdGFnZSBwcm9iZSAtIHdoZW4gYSBjYXB0dXJlIGFkYXB0ZXIgaXMgdGhlcmUgKi8KLQlpY2QgPSAmbXQ5bTAwMS0+aWNkOwotCWljZC0+b3BzCT0gJm10OW0wMDFfb3BzOwotCWljZC0+Y29udHJvbAk9ICZjbGllbnQtPmRldjsKLQlpY2QtPnhfbWluCT0gMjA7Ci0JaWNkLT55X21pbgk9IDEyOwotCWljZC0+eF9jdXJyZW50CT0gMjA7Ci0JaWNkLT55X2N1cnJlbnQJPSAxMjsKLQlpY2QtPndpZHRoX21pbgk9IDQ4OwotCWljZC0+d2lkdGhfbWF4CT0gMTI4MDsKLQlpY2QtPmhlaWdodF9taW4JPSAzMjsKLQlpY2QtPmhlaWdodF9tYXgJPSAxMDI0OwotCWljZC0+eV9za2lwX3RvcAk9IDE7Ci0JaWNkLT5pZmFjZQk9IGljbC0+YnVzX2lkOworCWljZC0+b3BzCQk9ICZtdDltMDAxX29wczsKKwlpY2QtPnlfc2tpcF90b3AJCT0gMDsKKworCW10OW0wMDEtPnJlY3QubGVmdAk9IE1UOU0wMDFfQ09MVU1OX1NLSVA7CisJbXQ5bTAwMS0+cmVjdC50b3AJPSBNVDlNMDAxX1JPV19TS0lQOworCW10OW0wMDEtPnJlY3Qud2lkdGgJPSBNVDlNMDAxX01BWF9XSURUSDsKKwltdDltMDAxLT5yZWN0LmhlaWdodAk9IE1UOU0wMDFfTUFYX0hFSUdIVDsKKwogCS8qIFNpbXVsYXRlZCBhdXRvZXhwb3N1cmUuIElmIGVuYWJsZWQsIHdlIGNhbGN1bGF0ZSBzaHV0dGVyIHdpZHRoCiAJICogb3Vyc2VsdmVzIGluIHRoZSBkcml2ZXIgYmFzZWQgb24gdmVydGljYWwgYmxhbmtpbmcgYW5kIGZyYW1lIHdpZHRoICovCiAJbXQ5bTAwMS0+YXV0b2V4cG9zdXJlID0gMTsKIAotCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlaXNkcjsKKwlyZXQgPSBtdDltMDAxX3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50KTsKKwlpZiAocmV0KSB7CisJCWljZC0+b3BzID0gTlVMTDsKKwkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJCWtmcmVlKG10OW0wMDEpOworCX0KIAotCXJldHVybiAwOwotCi1laXNkcjoKLQlrZnJlZShtdDltMDAxKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10OW0wMDFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IHRvX210OW0wMDEoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZtdDltMDAxLT5pY2QpOworCWljZC0+b3BzID0gTlVMTDsKKwltdDltMDAxX3ZpZGVvX3JlbW92ZShpY2QpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWNsaWVudC0+ZHJpdmVyID0gTlVMTDsKIAlrZnJlZShtdDltMDAxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwppbmRleCBmYzVlMmRlLi45MGRhNjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMTQ4LDEyICsxNDgsMTIgQEAKIH07CiAKIHN0cnVjdCBtdDltMTExIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CisJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTExeCogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwogCWVudW0gbXQ5bTExMV9jb250ZXh0IGNvbnRleHQ7CiAJc3RydWN0IHY0bDJfcmVjdCByZWN0OwogCXUzMiBwaXhmbXQ7CisJdW5zaWduZWQgaW50IGdhaW47CiAJdW5zaWduZWQgY2hhciBhdXRvZXhwb3N1cmU7CiAJdW5zaWduZWQgY2hhciBkYXRhd2lkdGg7CiAJdW5zaWduZWQgaW50IHBvd2VyZWQ6MTsKQEAgLTE2Niw2ICsxNjYsMTEgQEAKIAl1bnNpZ25lZCBpbnQgYXV0b3doaXRlYmFsYW5jZToxOwogfTsKIAorc3RhdGljIHN0cnVjdCBtdDltMTExICp0b19tdDltMTExKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgc3RydWN0IG10OW0xMTEsIHN1YmRldik7Cit9CisKIHN0YXRpYyBpbnQgcmVnX3BhZ2VfbWFwX3NldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1MTYgcmVnKQogewogCWludCByZXQ7CkBAIC0xOTAsNyArMTk1LDcgQEAKIAogCXJldCA9IHJlZ19wYWdlX21hcF9zZXQoY2xpZW50LCByZWcpOwogCWlmICghcmV0KQotCQlyZXQgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgKHJlZyAmIDB4ZmYpKSk7CisJCXJldCA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcgJiAweGZmKSk7CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgInJlYWQgIHJlZy4lMDN4IC0+ICUwNHhcbiIsIHJlZywgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMjAzLDcgKzIwOCw3IEBACiAKIAlyZXQgPSByZWdfcGFnZV9tYXBfc2V0KGNsaWVudCwgcmVnKTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIChyZWcgJiAweGZmKSwKKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYsCiAJCQkJCQlzd2FiMTYoZGF0YSkpOwogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAid3JpdGUgcmVnLiUwM3ggPSAlMDR4IC0+ICVkXG4iLCByZWcsIGRhdGEsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTIyOSwxMCArMjM0LDkgQEAKIAlyZXR1cm4gbXQ5bTExMV9yZWdfd3JpdGUoY2xpZW50LCByZWcsIHJldCAmIH5kYXRhKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9jb250ZXh0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorc3RhdGljIGludCBtdDltMTExX3NldF9jb250ZXh0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgICAgZW51bSBtdDltMTExX2NvbnRleHQgY3R4dCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwogCWludCB2YWxCID0gTVQ5TTExMV9DVFhUX0NUUkxfUkVTVEFSVCB8IE1UOU0xMTFfQ1RYVF9DVFJMX0RFRkVDVENPUl9CCiAJCXwgTVQ5TTExMV9DVFhUX0NUUkxfUkVTSVpFX0IgfCBNVDlNMTExX0NUWFRfQ1RSTF9DVFJMMl9CCiAJCXwgTVQ5TTExMV9DVFhUX0NUUkxfR0FNTUFfQiB8IE1UOU0xMTFfQ1RYVF9DVFJMX1JFQURfTU9ERV9CCkBAIC0yNDYsMTcgKzI1MCwxNiBAQAogCQlyZXR1cm4gcmVnX3dyaXRlKENPTlRFWFRfQ09OVFJPTCwgdmFsQSk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXR1cF9yZWN0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCByZXQsIGlzX3Jhd19mb3JtYXQ7CiAJaW50IHdpZHRoID0gcmVjdC0+d2lkdGg7CiAJaW50IGhlaWdodCA9IHJlY3QtPmhlaWdodDsKIAotCWlmICgobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCi0JICAgIHx8IChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpKQorCWlmIChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCB8fAorCSAgICBtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCiAJCWlzX3Jhd19mb3JtYXQgPSAxOwogCWVsc2UKIAkJaXNfcmF3X2Zvcm1hdCA9IDA7CkBAIC0yOTIsOSArMjk1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcGl4Zm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1MTYgb3V0Zm10KQorc3RhdGljIGludCBtdDltMTExX3NldHVwX3BpeGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgb3V0Zm10KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CiAJaW50IHJldDsKIAogCXJldCA9IHJlZ193cml0ZShPVVRQVVRfRk9STUFUX0NUUkwyX0EsIG91dGZtdCk7CkBAIC0zMDMsMTkgKzMwNSwxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfYmF5ZXI4KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3NldGZtdF9iYXllcjgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoaWNkLCBNVDlNMTExX09VVEZNVF9QUk9DRVNTRURfQkFZRVIpOworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChjbGllbnQsIE1UOU0xMTFfT1VURk1UX1BST0NFU1NFRF9CQVlFUik7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfYmF5ZXIxMChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfYmF5ZXIxMChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIE1UOU0xMTFfT1VURk1UX0JZUEFTU19JRlApOworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChjbGllbnQsIE1UOU0xMTFfT1VURk1UX0JZUEFTU19JRlApOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X3JnYjU2NShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfcmdiNTY1KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgdmFsID0gMDsKIAogCWlmIChtdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSkKQEAgLTMyNCwxMiArMzI2LDEyIEBACiAJCXZhbCB8PSBNVDlNMTExX09VVEZNVF9TV0FQX1JHQl9FVkVOOwogCXZhbCB8PSBNVDlNMTExX09VVEZNVF9SR0IgfCBNVDlNMTExX09VVEZNVF9SR0I1NjU7CiAKLQlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoaWNkLCB2YWwpOworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChjbGllbnQsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfcmdiNTU1KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3NldGZtdF9yZ2I1NTUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCB2YWwgPSAwOwogCiAJaWYgKG10OW0xMTEtPnN3YXBfcmdiX3JlZF9ibHVlKQpAQCAtMzM4LDEyICszNDAsMTIgQEAKIAkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfUkdCX0VWRU47CiAJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1JHQiB8IE1UOU0xMTFfT1VURk1UX1JHQjU1NTsKIAotCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIHZhbCk7CisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgdmFsKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldGZtdF95dXYoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X3l1dihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHZhbCA9IDA7CiAKIAlpZiAobXQ5bTExMS0+c3dhcF95dXZfY2JfY3IpCkBAIC0zNTEsNTIgKzM1MywyMiBAQAogCWlmIChtdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMpCiAJCXZhbCB8PSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NfWTsKIAotCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIHZhbCk7CisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgdmFsKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX2VuYWJsZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9lbmFibGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgcmV0OwogCi0JaWYgKGljbC0+cG93ZXIpIHsKLQkJcmV0ID0gaWNsLT5wb3dlcigmY2xpZW50LT5kZXYsIDEpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycihpY2QtPnZkZXYtPnBhcmVudCwKLQkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9uIHRoZSBjYW1lcmEuXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KIAlyZXQgPSByZWdfc2V0KFJFU0VULCBNVDlNMTExX1JFU0VUX0NISVBfRU5BQkxFKTsKIAlpZiAoIXJldCkKIAkJbXQ5bTExMS0+cG93ZXJlZCA9IDE7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX2Rpc2FibGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnX2NsZWFyKFJFU0VULCBNVDlNMTExX1JFU0VUX0NISVBfRU5BQkxFKTsKLQlpZiAoIXJldCkKLQkJbXQ5bTExMS0+cG93ZXJlZCA9IDA7Ci0KLQlpZiAoaWNsLT5wb3dlcikKLQkJaWNsLT5wb3dlcigmY2xpZW50LT5kZXYsIDApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtdDltMTExX3Jlc2V0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVnX3NldChSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFKTsKQEAgLTQwNiwyNiArMzc4LDEyIEBACiAJCXJldCA9IHJlZ19jbGVhcihSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFCiAJCQkJfCBNVDlNMTExX1JFU0VUX1JFU0VUX1NPQyk7CiAKLQlpZiAoaWNsLT5yZXNldCkKLQkJaWNsLT5yZXNldCgmY2xpZW50LT5kZXYpOwotCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5bTExMV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG10OW0xMTFfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTExMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fTUFTVEVSIHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKIAkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CiAJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBV0lEVEhfODsKQEAgLTQzOCw2MiArMzk2LDEyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9tYWtlX3JlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCisJaWYgKG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4IHx8CisJICAgIG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikgeworCQkvKiBCYXllciBmb3JtYXQgLSBldmVuIHNpemUgbGVuZ3RocyAqLworCQlyZWN0LT53aWR0aAk9IEFMSUdOKHJlY3QtPndpZHRoLCAyKTsKKwkJcmVjdC0+aGVpZ2h0CT0gQUxJR04ocmVjdC0+aGVpZ2h0LCAyKTsKKwkJLyogTGV0IHRoZSB1c2VyIHBsYXkgd2l0aCB0aGUgc3RhcnRpbmcgcGl4ZWwgKi8KKwl9CisKKwkvKiBGSVhNRTogdGhlIGRhdGFzaGVldCBkb2Vzbid0IHNwZWNpZnkgbWluaW11bSBzaXplcyAqLworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC0+bGVmdCwgJnJlY3QtPndpZHRoLAorCQkgICAgIE1UOU0xMTFfTUlOX0RBUktfQ09MUywgMiwgTVQ5TTExMV9NQVhfV0lEVEgpOworCisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LT50b3AsICZyZWN0LT5oZWlnaHQsCisJCSAgICAgTVQ5TTExMV9NSU5fREFSS19ST1dTLCAyLCBNVDlNMTExX01BWF9IRUlHSFQpOworCisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcmVjdChjbGllbnQsIHJlY3QpOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gYS0+YzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHJldDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLAotCQlfX2Z1bmNfXywgcmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT53aWR0aCwKLQkJcmVjdC0+aGVpZ2h0KTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzIGxlZnQ9JWQsIHRvcD0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZFxuIiwKKwkJX19mdW5jX18sIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKIAotCXJldCA9IG10OW0xMTFfc2V0dXBfcmVjdChpY2QsIHJlY3QpOworCXJldCA9IG10OW0xMTFfbWFrZV9yZWN0KGNsaWVudCwgJnJlY3QpOwogCWlmICghcmV0KQotCQltdDltMTExLT5yZWN0ID0gKnJlY3Q7CisJCW10OW0xMTEtPnJlY3QgPSByZWN0OwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfcGl4Zm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1MzIgcGl4Zm10KQorc3RhdGljIGludCBtdDltMTExX2dfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCisJYS0+Ywk9IG10OW0xMTEtPnJlY3Q7CisJYS0+dHlwZQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCWEtPmJvdW5kcy5sZWZ0CQkJPSBNVDlNMTExX01JTl9EQVJLX0NPTFM7CisJYS0+Ym91bmRzLnRvcAkJCT0gTVQ5TTExMV9NSU5fREFSS19ST1dTOworCWEtPmJvdW5kcy53aWR0aAkJCT0gTVQ5TTExMV9NQVhfV0lEVEg7CisJYS0+Ym91bmRzLmhlaWdodAkJPSBNVDlNMTExX01BWF9IRUlHSFQ7CisJYS0+ZGVmcmVjdAkJCT0gYS0+Ym91bmRzOworCWEtPnR5cGUJCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yCT0gMTsKKwlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcgk9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDltMTExX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisKKwlwaXgtPndpZHRoCQk9IG10OW0xMTEtPnJlY3Qud2lkdGg7CisJcGl4LT5oZWlnaHQJCT0gbXQ5bTExMS0+cmVjdC5oZWlnaHQ7CisJcGl4LT5waXhlbGZvcm1hdAk9IG10OW0xMTEtPnBpeGZtdDsKKwlwaXgtPmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORTsKKwlwaXgtPmNvbG9yc3BhY2UJCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldF9waXhmbXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChwaXhmbXQpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6Ci0JCXJldCA9IG10OW0xMTFfc2V0Zm10X2JheWVyOChpY2QpOworCQlyZXQgPSBtdDltMTExX3NldGZtdF9iYXllcjgoY2xpZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxNjoKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfYmF5ZXIxMChpY2QpOworCQlyZXQgPSBtdDltMTExX3NldGZtdF9iYXllcjEwKGNsaWVudCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfcmdiNTU1KGljZCk7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3JnYjU1NShjbGllbnQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0JCXJldCA9IG10OW0xMTFfc2V0Zm10X3JnYjU2NShpY2QpOworCQlyZXQgPSBtdDltMTExX3NldGZtdF9yZ2I1NjUoY2xpZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKIAkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMDsKIAkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAwOwotCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoaWNkKTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGNsaWVudCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9QSVhfRk1UX1ZZVVk6CiAJCW10OW0xMTEtPnN3YXBfeXV2X3lfY2hyb21hcyA9IDA7CiAJCW10OW0xMTEtPnN3YXBfeXV2X2NiX2NyID0gMTsKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGljZCk7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihjbGllbnQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgogCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAxOwogCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDA7Ci0JCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihpY2QpOworCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKIAkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMTsKIAkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAxOwotCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoaWNkKTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGNsaWVudCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiUGl4ZWwgZm9ybWF0IG5vdCBoYW5kbGVkIDogJXhcbiIsIHBpeGZtdCk7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUGl4ZWwgZm9ybWF0IG5vdCBoYW5kbGVkIDogJXhcbiIsCisJCQlwaXhmbXQpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIApAQCAtNTAzLDEwICs1MjUsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5bTExMV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gewogCQkubGVmdAk9IG10OW0xMTEtPnJlY3QubGVmdCwKQEAgLTUxNiw0MCArNTM4LDU2IEBACiAJfTsKIAlpbnQgcmV0OwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyBmbXQ9JXggbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLAotCQlfX2Z1bmNfXywgcGl4LT5waXhlbGZvcm1hdCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwKLQkJcmVjdC5oZWlnaHQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LAorCQkiJXMgZm10PSV4IGxlZnQ9JWQsIHRvcD0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZFxuIiwgX19mdW5jX18sCisJCXBpeC0+cGl4ZWxmb3JtYXQsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKIAotCXJldCA9IG10OW0xMTFfc2V0dXBfcmVjdChpY2QsICZyZWN0KTsKKwlyZXQgPSBtdDltMTExX21ha2VfcmVjdChjbGllbnQsICZyZWN0KTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gbXQ5bTExMV9zZXRfcGl4Zm10KGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CisJCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChjbGllbnQsIHBpeC0+cGl4ZWxmb3JtYXQpOwogCWlmICghcmV0KQogCQltdDltMTExLT5yZWN0ID0gcmVjdDsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5bTExMV90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlib29sIGJheWVyID0gcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4IHx8CisJCXBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CisKKwkvKgorCSAqIFdpdGggQmF5ZXIgZm9ybWF0IGVuZm9yY2UgZXZlbiBzaWRlIGxlbmd0aHMsIGJ1dCBsZXQgdGhlIHVzZXIgcGxheQorCSAqIHdpdGggdGhlIHN0YXJ0aW5nIHBpeGVsCisJICovCiAKIAlpZiAocGl4LT5oZWlnaHQgPiBNVDlNMTExX01BWF9IRUlHSFQpCiAJCXBpeC0+aGVpZ2h0ID0gTVQ5TTExMV9NQVhfSEVJR0hUOworCWVsc2UgaWYgKHBpeC0+aGVpZ2h0IDwgMikKKwkJcGl4LT5oZWlnaHQgPSAyOworCWVsc2UgaWYgKGJheWVyKQorCQlwaXgtPmhlaWdodCA9IEFMSUdOKHBpeC0+aGVpZ2h0LCAyKTsKKwogCWlmIChwaXgtPndpZHRoID4gTVQ5TTExMV9NQVhfV0lEVEgpCiAJCXBpeC0+d2lkdGggPSBNVDlNMTExX01BWF9XSURUSDsKKwllbHNlIGlmIChwaXgtPndpZHRoIDwgMikKKwkJcGl4LT53aWR0aCA9IDI7CisJZWxzZSBpZiAoYmF5ZXIpCisJCXBpeC0+d2lkdGggPSBBTElHTihwaXgtPndpZHRoLCAyKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfZ2V0X2NoaXBfaWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQorc3RhdGljIGludCBtdDltMTExX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAogCWlmIChpZC0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGlkLT5tYXRjaC5hZGRyICE9IG10OW0xMTEtPmNsaWVudC0+YWRkcikKKwlpZiAoaWQtPm1hdGNoLmFkZHIgIT0gY2xpZW50LT5hZGRyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlkLT5pZGVudAk9IG10OW0xMTEtPm1vZGVsOwpAQCAtNTU5LDExICs1OTcsMTEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLXN0YXRpYyBpbnQgbXQ5bTExMV9nZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IG10OW0xMTFfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCWludCB2YWw7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKIAogCWlmIChyZWctPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSIHx8IHJlZy0+cmVnID4gMHgyZmYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTgwLDEwICs2MTgsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3N0YXRpYyBpbnQgbXQ5bTExMV9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAogCWlmIChyZWctPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSIHx8IHJlZy0+cmVnID4gMHgyZmYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjM1LDQ1ICs2NzMsMjEgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IG10OW0xMTFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIHZvaWQgbXQ5bTExMV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIGludCBtdDltMTExX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7Ci1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosCi0JCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKIHN0YXRpYyBpbnQgbXQ5bTExMV9yZXN1bWUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOwotc3RhdGljIGludCBtdDltMTExX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOwotc3RhdGljIGludCBtdDltMTExX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOworc3RhdGljIGludCBtdDltMTExX3N1c3BlbmQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgbXQ5bTExMV9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCQk9IG10OW0xMTFfdmlkZW9fcHJvYmUsCi0JLnJlbW92ZQkJCT0gbXQ5bTExMV92aWRlb19yZW1vdmUsCi0JLmluaXQJCQk9IG10OW0xMTFfaW5pdCwKKwkuc3VzcGVuZAkJPSBtdDltMTExX3N1c3BlbmQsCiAJLnJlc3VtZQkJCT0gbXQ5bTExMV9yZXN1bWUsCi0JLnJlbGVhc2UJCT0gbXQ5bTExMV9yZWxlYXNlLAotCS5zdGFydF9jYXB0dXJlCQk9IG10OW0xMTFfc3RhcnRfY2FwdHVyZSwKLQkuc3RvcF9jYXB0dXJlCQk9IG10OW0xMTFfc3RvcF9jYXB0dXJlLAotCS5zZXRfY3JvcAkJPSBtdDltMTExX3NldF9jcm9wLAotCS5zZXRfZm10CQk9IG10OW0xMTFfc2V0X2ZtdCwKLQkudHJ5X2ZtdAkJPSBtdDltMTExX3RyeV9mbXQsCiAJLnF1ZXJ5X2J1c19wYXJhbQk9IG10OW0xMTFfcXVlcnlfYnVzX3BhcmFtLAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OW0xMTFfc2V0X2J1c19wYXJhbSwKIAkuY29udHJvbHMJCT0gbXQ5bTExMV9jb250cm9scywKIAkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUobXQ5bTExMV9jb250cm9scyksCi0JLmdldF9jb250cm9sCQk9IG10OW0xMTFfZ2V0X2NvbnRyb2wsCi0JLnNldF9jb250cm9sCQk9IG10OW0xMTFfc2V0X2NvbnRyb2wsCi0JLmdldF9jaGlwX2lkCQk9IG10OW0xMTFfZ2V0X2NoaXBfaWQsCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS5nZXRfcmVnaXN0ZXIJCT0gbXQ5bTExMV9nZXRfcmVnaXN0ZXIsCi0JLnNldF9yZWdpc3RlcgkJPSBtdDltMTExX3NldF9yZWdpc3RlciwKLSNlbmRpZgogfTsKIAotc3RhdGljIGludCBtdDltMTExX3NldF9mbGlwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgZmxpcCwgaW50IG1hc2spCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2ZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGZsaXAsIGludCBtYXNrKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgcmV0OwogCiAJaWYgKG10OW0xMTEtPmNvbnRleHQgPT0gSElHSFBPV0VSKSB7CkBAIC02OTEsOSArNzA1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX2dldF9nbG9iYWxfZ2FpbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CiAJaW50IGRhdGE7CiAKIAlkYXRhID0gcmVnX3JlYWQoR0xPQkFMX0dBSU4pOwpAQCAtNzAzLDE1ICs3MTYsMTUgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9nbG9iYWxfZ2FpbihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGdhaW4pCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBnYWluKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJdTE2IHZhbDsKIAogCWlmIChnYWluID4gNjMgKiAyICogMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpY2QtPmdhaW4gPSBnYWluOworCW10OW0xMTEtPmdhaW4gPSBnYWluOwogCWlmICgoZ2FpbiA+PSA2NCAqIDIpICYmIChnYWluIDwgNjMgKiAyICogMikpCiAJCXZhbCA9ICgxIDw8IDEwKSB8ICgxIDw8IDkpIHwgKGdhaW4gLyA0KTsKIAllbHNlIGlmICgoZ2FpbiA+PSA2NCkgJiYgKGdhaW4gPCA2NCAqIDIpKQpAQCAtNzIyLDEwICs3MzUsOSBAQAogCXJldHVybiByZWdfd3JpdGUoR0xPQkFMX0dBSU4sIHZhbCk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgb24pCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgb24pCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCByZXQ7CiAKIAlpZiAob24pCkBAIC03MzksMTAgKzc1MSw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9hdXRvd2hpdGViYWxhbmNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgb24pCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2F1dG93aGl0ZWJhbGFuY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG9uKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgcmV0OwogCiAJaWYgKG9uKQpAQCAtNzU2LDExICs3NjcsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCBkYXRhOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewpAQCAtNzg1LDcgKzc5NSw3IEBACiAJCWN0cmwtPnZhbHVlID0gISEoZGF0YSAmIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9HQUlOOgotCQlkYXRhID0gbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oaWNkKTsKKwkJZGF0YSA9IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKGNsaWVudCk7CiAJCWlmIChkYXRhIDwgMCkKIAkJCXJldHVybiBkYXRhOwogCQljdHJsLT52YWx1ZSA9IGRhdGE7CkBAIC04MDAsMzcgKzgxMCwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOwogCWludCByZXQ7CiAKIAlxY3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybCgmbXQ5bTExMV9vcHMsIGN0cmwtPmlkKTsKLQogCWlmICghcWN0cmwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfVkZMSVA6CiAJCW10OW0xMTEtPnZmbGlwID0gY3RybC0+dmFsdWU7Ci0JCXJldCA9IG10OW0xMTFfc2V0X2ZsaXAoaWNkLCBjdHJsLT52YWx1ZSwKKwkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChjbGllbnQsIGN0cmwtPnZhbHVlLAogCQkJCQlNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSEZMSVA6CiAJCW10OW0xMTEtPmhmbGlwID0gY3RybC0+dmFsdWU7Ci0JCXJldCA9IG10OW0xMTFfc2V0X2ZsaXAoaWNkLCBjdHJsLT52YWx1ZSwKKwkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChjbGllbnQsIGN0cmwtPnZhbHVlLAogCQkJCQlNVDlNMTExX1JNQl9NSVJST1JfQ09MUyk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfR0FJTjoKLQkJcmV0ID0gbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oaWNkLCBjdHJsLT52YWx1ZSk7CisJCXJldCA9IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKGNsaWVudCwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86Ci0JCXJldCA9ICBtdDltMTExX3NldF9hdXRvZXhwb3N1cmUoaWNkLCBjdHJsLT52YWx1ZSk7CisJCXJldCA9ICBtdDltMTExX3NldF9hdXRvZXhwb3N1cmUoY2xpZW50LCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgotCQlyZXQgPSAgbXQ5bTExMV9zZXRfYXV0b3doaXRlYmFsYW5jZShpY2QsIGN0cmwtPnZhbHVlKTsKKwkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG93aGl0ZWJhbGFuY2UoY2xpZW50LCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC04MzksNjIgKzg0OCw2MiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3N1c3BlbmQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAotCW10OW0xMTFfc2V0X2NvbnRleHQoaWNkLCBtdDltMTExLT5jb250ZXh0KTsKLQltdDltMTExX3NldF9waXhmbXQoaWNkLCBtdDltMTExLT5waXhmbXQpOwotCW10OW0xMTFfc2V0dXBfcmVjdChpY2QsICZtdDltMTExLT5yZWN0KTsKLQltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+aGZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKLQltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+dmZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKLQltdDltMTExX3NldF9nbG9iYWxfZ2FpbihpY2QsIGljZC0+Z2Fpbik7Ci0JbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGljZCwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKLQltdDltMTExX3NldF9hdXRvd2hpdGViYWxhbmNlKGljZCwgbXQ5bTExMS0+YXV0b3doaXRlYmFsYW5jZSk7CisJbXQ5bTExMS0+Z2FpbiA9IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDltMTExX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKKworCW10OW0xMTFfc2V0X2NvbnRleHQoY2xpZW50LCBtdDltMTExLT5jb250ZXh0KTsKKwltdDltMTExX3NldF9waXhmbXQoY2xpZW50LCBtdDltMTExLT5waXhmbXQpOworCW10OW0xMTFfc2V0dXBfcmVjdChjbGllbnQsICZtdDltMTExLT5yZWN0KTsKKwltdDltMTExX3NldF9mbGlwKGNsaWVudCwgbXQ5bTExMS0+aGZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKKwltdDltMTExX3NldF9mbGlwKGNsaWVudCwgbXQ5bTExMS0+dmZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKKwltdDltMTExX3NldF9nbG9iYWxfZ2FpbihjbGllbnQsIG10OW0xMTEtPmdhaW4pOworCW10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShjbGllbnQsIG10OW0xMTEtPmF1dG9leHBvc3VyZSk7CisJbXQ5bTExMV9zZXRfYXV0b3doaXRlYmFsYW5jZShjbGllbnQsIG10OW0xMTEtPmF1dG93aGl0ZWJhbGFuY2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG10OW0xMTFfcmVzdW1lKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCByZXQgPSAwOwogCiAJaWYgKG10OW0xMTEtPnBvd2VyZWQpIHsKLQkJcmV0ID0gbXQ5bTExMV9lbmFibGUoaWNkKTsKKwkJcmV0ID0gbXQ5bTExMV9lbmFibGUoY2xpZW50KTsKIAkJaWYgKCFyZXQpCi0JCQlyZXQgPSBtdDltMTExX3Jlc2V0KGljZCk7CisJCQlyZXQgPSBtdDltMTExX3Jlc2V0KGNsaWVudCk7CiAJCWlmICghcmV0KQotCQkJcmV0ID0gbXQ5bTExMV9yZXN0b3JlX3N0YXRlKGljZCk7CisJCQlyZXQgPSBtdDltMTExX3Jlc3RvcmVfc3RhdGUoY2xpZW50KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHJldDsKIAogCW10OW0xMTEtPmNvbnRleHQgPSBISUdIUE9XRVI7Ci0JcmV0ID0gbXQ5bTExMV9lbmFibGUoaWNkKTsKKwlyZXQgPSBtdDltMTExX2VuYWJsZShjbGllbnQpOwogCWlmICghcmV0KQotCQlyZXQgPSBtdDltMTExX3Jlc2V0KGljZCk7CisJCXJldCA9IG10OW0xMTFfcmVzZXQoY2xpZW50KTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gbXQ5bTExMV9zZXRfY29udGV4dChpY2QsIG10OW0xMTEtPmNvbnRleHQpOworCQlyZXQgPSBtdDltMTExX3NldF9jb250ZXh0KGNsaWVudCwgbXQ5bTExMS0+Y29udGV4dCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShpY2QsIG10OW0xMTEtPmF1dG9leHBvc3VyZSk7CisJCXJldCA9IG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShjbGllbnQsIG10OW0xMTEtPmF1dG9leHBvc3VyZSk7CiAJaWYgKHJldCkKLQkJZGV2X2VycigmaWNkLT5kZXYsICJtdDltMTF4IGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG10OW0xMTFfcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbXQ5bTExMV9kaXNhYmxlKGljZCk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJmljZC0+ZGV2LCAibXQ5bTExeCByZWxlYXNlIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0KKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJtdDltMTF4IGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05MDIsMTAgKzkxMSwxMCBAQAogICogSW50ZXJmYWNlIGFjdGl2ZSwgY2FuIHVzZSBpMmMuIElmIGl0IGZhaWxzLCBpdCBjYW4gaW5kZWVkIG1lYW4sIHRoYXQKICAqIHRoaXMgd2Fzbid0IG91ciBjYXB0dXJlIGludGVyZmFjZSwgc28sIHdlIHdhaXQgZm9yIHRoZSByaWdodCBvbmUKICAqLwotc3RhdGljIGludCBtdDltMTExX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCXMzMiBkYXRhOwogCWludCByZXQ7CiAKQEAgLTkxNywxMCArOTI2LDEzIEBACiAJICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IG10OW0xMTFfZW5hYmxlKGljZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlaTJjOwotCXJldCA9IG10OW0xMTFfcmVzZXQoaWNkKTsKKwltdDltMTExLT5hdXRvZXhwb3N1cmUgPSAxOworCW10OW0xMTEtPmF1dG93aGl0ZWJhbGFuY2UgPSAxOworCisJbXQ5bTExMS0+c3dhcF9yZ2JfZXZlbl9vZGQgPSAxOworCW10OW0xMTEtPnN3YXBfcmdiX3JlZF9ibHVlID0gMTsKKworCXJldCA9IG10OW0xMTFfaW5pdChjbGllbnQpOwogCWlmIChyZXQpCiAJCWdvdG8gZWkyYzsKIApAQCAtOTM1LDcgKzk0Nyw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LAorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKIAkJCSJObyBNVDlNMTF4IGNoaXAgZGV0ZWN0ZWQsIHJlZ2lzdGVyIHJlYWQgJXhcbiIsIGRhdGEpOwogCQlnb3RvIGVpMmM7CiAJfQpAQCAtOTQzLDQyICs5NTUsNTEgQEAKIAlpY2QtPmZvcm1hdHMgPSBtdDltMTExX2NvbG91cl9mb3JtYXRzOwogCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0xMTFfY29sb3VyX2Zvcm1hdHMpOwogCi0JZGV2X2luZm8oJmljZC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlNMTF4IGNoaXAgSUQgJXhcbiIsIGRhdGEpOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkRldGVjdGVkIGEgTVQ5TTExeCBjaGlwIElEICV4XG4iLCBkYXRhKTsKIAotCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVpc2lzOwotCi0JbXQ5bTExMS0+YXV0b2V4cG9zdXJlID0gMTsKLQltdDltMTExLT5hdXRvd2hpdGViYWxhbmNlID0gMTsKLQotCW10OW0xMTEtPnN3YXBfcmdiX2V2ZW5fb2RkID0gMTsKLQltdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSA9IDE7Ci0KLQlyZXR1cm4gMDsKLWVpc2lzOgogZWkyYzoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBtdDltMTExX3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtdDltMTExX3N1YmRldl9jb3JlX29wcyA9IHsKKwkuZ19jdHJsCQk9IG10OW0xMTFfZ19jdHJsLAorCS5zX2N0cmwJCT0gbXQ5bTExMV9zX2N0cmwsCisJLmdfY2hpcF9pZGVudAk9IG10OW0xMTFfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3Rlcgk9IG10OW0xMTFfZ19yZWdpc3RlciwKKwkuc19yZWdpc3Rlcgk9IG10OW0xMTFfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiVmlkZW8gJXggcmVtb3ZlZDogJXAsICVwXG4iLCBtdDltMTExLT5jbGllbnQtPmFkZHIsCi0JCW10OW0xMTEtPmljZC5kZXYucGFyZW50LCBtdDltMTExLT5pY2QudmRldik7Ci0Jc29jX2NhbWVyYV92aWRlb19zdG9wKCZtdDltMTExLT5pY2QpOwotfQorc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgbXQ5bTExMV9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX2ZtdAkJPSBtdDltMTExX3NfZm10LAorCS5nX2ZtdAkJPSBtdDltMTExX2dfZm10LAorCS50cnlfZm10CT0gbXQ5bTExMV90cnlfZm10LAorCS5zX2Nyb3AJCT0gbXQ5bTExMV9zX2Nyb3AsCisJLmdfY3JvcAkJPSBtdDltMTExX2dfY3JvcCwKKwkuY3JvcGNhcAk9IG10OW0xMTFfY3JvcGNhcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG10OW0xMTFfc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZtdDltMTExX3N1YmRldl9jb3JlX29wcywKKwkudmlkZW8JPSAmbXQ5bTExMV9zdWJkZXZfdmlkZW9fb3BzLAorfTsKIAogc3RhdGljIGludCBtdDltMTExX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKIHsKIAlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbDsKIAlpbnQgcmV0OwogCisJaWYgKCFpY2QpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlNMTF4OiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAlpZiAoIWljbCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOU0xMXggZHJpdmVyIG5lZWRzIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5NCwzOCArMTAxNSwzNSBAQAogCWlmICghbXQ5bTExMSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdDltMTExLT5jbGllbnQgPSBjbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgbXQ5bTExMSk7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJm10OW0xMTEtPnN1YmRldiwgY2xpZW50LCAmbXQ5bTExMV9zdWJkZXZfb3BzKTsKIAogCS8qIFNlY29uZCBzdGFnZSBwcm9iZSAtIHdoZW4gYSBjYXB0dXJlIGFkYXB0ZXIgaXMgdGhlcmUgKi8KLQlpY2QgCQk9ICZtdDltMTExLT5pY2Q7Ci0JaWNkLT5vcHMJPSAmbXQ5bTExMV9vcHM7Ci0JaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OwotCWljZC0+eF9taW4JPSBNVDlNMTExX01JTl9EQVJLX0NPTFM7Ci0JaWNkLT55X21pbgk9IE1UOU0xMTFfTUlOX0RBUktfUk9XUzsKLQlpY2QtPnhfY3VycmVudAk9IGljZC0+eF9taW47Ci0JaWNkLT55X2N1cnJlbnQJPSBpY2QtPnlfbWluOwotCWljZC0+d2lkdGhfbWluCT0gTVQ5TTExMV9NSU5fREFSS19ST1dTOwotCWljZC0+d2lkdGhfbWF4CT0gTVQ5TTExMV9NQVhfV0lEVEg7Ci0JaWNkLT5oZWlnaHRfbWluCT0gTVQ5TTExMV9NSU5fREFSS19DT0xTOwotCWljZC0+aGVpZ2h0X21heAk9IE1UOU0xMTFfTUFYX0hFSUdIVDsKLQlpY2QtPnlfc2tpcF90b3AJPSAwOwotCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKKwlpY2QtPm9wcwkJPSAmbXQ5bTExMV9vcHM7CisJaWNkLT55X3NraXBfdG9wCQk9IDA7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOwotCWlmIChyZXQpCi0JCWdvdG8gZWlzZHI7Ci0JcmV0dXJuIDA7CisJbXQ5bTExMS0+cmVjdC5sZWZ0CT0gTVQ5TTExMV9NSU5fREFSS19DT0xTOworCW10OW0xMTEtPnJlY3QudG9wCT0gTVQ5TTExMV9NSU5fREFSS19ST1dTOworCW10OW0xMTEtPnJlY3Qud2lkdGgJPSBNVDlNMTExX01BWF9XSURUSDsKKwltdDltMTExLT5yZWN0LmhlaWdodAk9IE1UOU0xMTFfTUFYX0hFSUdIVDsKIAotZWlzZHI6Ci0Ja2ZyZWUobXQ5bTExMSk7CisJcmV0ID0gbXQ5bTExMV92aWRlb19wcm9iZShpY2QsIGNsaWVudCk7CisJaWYgKHJldCkgeworCQlpY2QtPm9wcyA9IE5VTEw7CisJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCQlrZnJlZShtdDltMTExKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10OW0xMTFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZtdDltMTExLT5pY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWljZC0+b3BzID0gTlVMTDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwljbGllbnQtPmRyaXZlciA9IE5VTEw7CiAJa2ZyZWUobXQ5bTExMSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMKaW5kZXggNDIwN2ZiMzQuLjY5NjZmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCkBAIC0xMywxMyArMTMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAvKiBtdDl0MDMxIGkyYyBhZGRyZXNzIDB4NWQKLSAqIFRoZSBwbGF0Zm9ybSBoYXMgdG8gZGVmaW5lIGkyY19ib2FyZF9pbmZvCi0gKiBhbmQgY2FsbCBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygpICovCisgKiBUaGUgcGxhdGZvcm0gaGFzIHRvIGRlZmluZSBpMmNfYm9hcmRfaW5mbyBhbmQgbGluayB0byBpdCBmcm9tCisgKiBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICovCiAKIC8qIG10OXQwMzEgc2VsZWN0ZWQgcmVnaXN0ZXIgYWRkcmVzc2VzICovCiAjZGVmaW5lIE1UOVQwMzFfQ0hJUF9WRVJTSU9OCQkweDAwCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIE1UOVQwMzFfTUFYX0hFSUdIVAkJMTUzNgogI2RlZmluZSBNVDlUMDMxX01BWF9XSURUSAkJMjA0OAogI2RlZmluZSBNVDlUMDMxX01JTl9IRUlHSFQJCTIKLSNkZWZpbmUgTVQ5VDAzMV9NSU5fV0lEVEgJCTIKKyNkZWZpbmUgTVQ5VDAzMV9NSU5fV0lEVEgJCTE4CiAjZGVmaW5lIE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOSwkxNDIKICNkZWZpbmUgTVQ5VDAzMV9WRVJUSUNBTF9CTEFOSwkJMjUKICNkZWZpbmUgTVQ5VDAzMV9DT0xVTU5fU0tJUAkJMzIKQEAgLTY4LDE0ICs2OCwyMSBAQAogfTsKIAogc3RydWN0IG10OXQwMzEgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2OworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsJLyogU2Vuc29yIHdpbmRvdyAqLwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlUMDMxKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCi0JdW5zaWduZWQgY2hhciBhdXRvZXhwb3N1cmU7CiAJdTE2IHhza2lwOwogCXUxNiB5c2tpcDsKKwl1bnNpZ25lZCBpbnQgZ2FpbjsKKwl1bnNpZ25lZCBpbnQgZXhwb3N1cmU7CisJdW5zaWduZWQgY2hhciBhdXRvZXhwb3N1cmU7CiB9OwogCitzdGF0aWMgc3RydWN0IG10OXQwMzEgKnRvX210OXQwMzEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBzdHJ1Y3QgbXQ5dDAzMSwgc3ViZGV2KTsKK30KKwogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCByZWcpCiB7CiAJczMyIGRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcpOwpAQCAtMTM2LDIxICsxNDMsMTAgQEAKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDl0MDMxX2lkbGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAotCWlmIChpY2wtPnBvd2VyKSB7Ci0JCXJldCA9IGljbC0+cG93ZXIoJmNsaWVudC0+ZGV2LCAxKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoaWNkLT52ZGV2LT5wYXJlbnQsCi0JCQkJIlBsYXRmb3JtIGZhaWxlZCB0byBwb3dlci1vbiB0aGUgY2FtZXJhLlxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCiAJLyogRGlzYWJsZSBjaGlwIG91dHB1dCwgc3luY2hyb25vdXMgb3B0aW9uIHVwZGF0ZSAqLwogCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfUkVTRVQsIDEpOwogCWlmIChyZXQgPj0gMCkKQEAgLTE1OCw1MCArMTU0LDM5IEBACiAJaWYgKHJldCA+PSAwKQogCQlyZXQgPSByZWdfY2xlYXIoY2xpZW50LCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAyKTsKIAotCWlmIChyZXQgPCAwICYmIGljbC0+cG93ZXIpCi0JCWljbC0+cG93ZXIoJmNsaWVudC0+ZGV2LCAwKTsKLQogCXJldHVybiByZXQgPj0gMCA/IDAgOiAtRUlPOwogfQogCi1zdGF0aWMgaW50IG10OXQwMzFfcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5dDAzMV9kaXNhYmxlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCiAJLyogRGlzYWJsZSB0aGUgY2hpcCAqLwogCXJlZ19jbGVhcihjbGllbnQsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCi0JaWYgKGljbC0+cG93ZXIpCi0JCWljbC0+cG93ZXIoJmNsaWVudC0+ZGV2LCAwKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OXQwMzFfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCWludCByZXQ7CiAKLQkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KLQlpZiAocmVnX3NldChjbGllbnQsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKKwlpZiAoZW5hYmxlKQorCQkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KKwkJcmV0ID0gcmVnX3NldChjbGllbnQsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOworCWVsc2UKKwkJLyogU3RvcCBzZW5zb3IgcmVhZG91dCAqLworCQlyZXQgPSByZWdfY2xlYXIoY2xpZW50LCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAyKTsKKworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KIAotc3RhdGljIGludCBtdDl0MDMxX3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCi0JLyogU3RvcCBzZW5zb3IgcmVhZG91dCAqLwotCWlmIChyZWdfY2xlYXIoY2xpZW50LCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAyKSA8IDApCi0JCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG10OXQwMzFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKIAogCS8qIFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgcXVlcmllZCBvdXIgcGFyYW1ldGVycywgY2hlY2sgYW55d2F5ICovCiAJaWYgKGZsYWdzICYgfk1UOVQwMzFfQlVTX1BBUkFNKQpAQCAtMjE3LDY4ICsyMDIsNzIgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5dDAzMV9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl0MDMxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgTVQ5VDAzMV9CVVNfUEFSQU0pOwogfQogCi0vKiBSb3VuZCB1cCBtaW5pbWEgYW5kIHJvdW5kIGRvd24gbWF4aW1hICovCi1zdGF0aWMgdm9pZCByZWNhbGN1bGF0ZV9saW1pdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgdTE2IHhza2lwLCB1MTYgeXNraXApCisvKiB0YXJnZXQgbXVzdCBiZSBfZXZlbl8gKi8KK3N0YXRpYyB1MTYgbXQ5dDAzMV9za2lwKHMzMiAqc291cmNlLCBzMzIgdGFyZ2V0LCBzMzIgbWF4KQogewotCWljZC0+eF9taW4gPSAoTVQ5VDAzMV9DT0xVTU5fU0tJUCArIHhza2lwIC0gMSkgLyB4c2tpcDsKLQlpY2QtPnlfbWluID0gKE1UOVQwMzFfUk9XX1NLSVAgKyB5c2tpcCAtIDEpIC8geXNraXA7Ci0JaWNkLT53aWR0aF9taW4gPSAoTVQ5VDAzMV9NSU5fV0lEVEggKyB4c2tpcCAtIDEpIC8geHNraXA7Ci0JaWNkLT5oZWlnaHRfbWluID0gKE1UOVQwMzFfTUlOX0hFSUdIVCArIHlza2lwIC0gMSkgLyB5c2tpcDsKLQlpY2QtPndpZHRoX21heCA9IE1UOVQwMzFfTUFYX1dJRFRIIC8geHNraXA7Ci0JaWNkLT5oZWlnaHRfbWF4ID0gTVQ5VDAzMV9NQVhfSEVJR0hUIC8geXNraXA7CisJdW5zaWduZWQgaW50IHNraXA7CisKKwlpZiAoKnNvdXJjZSA8IHRhcmdldCArIHRhcmdldCAvIDIpIHsKKwkJKnNvdXJjZSA9IHRhcmdldDsKKwkJcmV0dXJuIDE7CisJfQorCisJc2tpcCA9IG1pbihtYXgsICpzb3VyY2UgKyB0YXJnZXQgLyAyKSAvIHRhcmdldDsKKwlpZiAoc2tpcCA+IDgpCisJCXNraXAgPSA4OworCSpzb3VyY2UgPSB0YXJnZXQgKiBza2lwOworCisJcmV0dXJuIHNraXA7CiB9CiAKKy8qIHJlY3QgaXMgdGhlIHNlbnNvciByZWN0YW5nbGUsIHRoZSBjYWxsZXIgZ3VhcmFudGVlcyBwYXJhbWV0ZXIgdmFsaWRpdHkgKi8KIHN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfcGFyYW1zKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCwgdTE2IHhza2lwLCB1MTYgeXNraXApCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKIAlpbnQgcmV0OwotCXUxNiB4YmluLCB5YmluLCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3A7CisJdTE2IHhiaW4sIHliaW47CiAJY29uc3QgdTE2IGhibGFuayA9IE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOSywKIAkJdmJsYW5rID0gTVQ5VDAzMV9WRVJUSUNBTF9CTEFOSzsKIAotCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBleGNlZWQgc2Vuc29yIGxpbWl0cyAqLwotCWlmIChyZWN0LT5sZWZ0ICsgcmVjdC0+d2lkdGggPiBpY2QtPndpZHRoX21heCkKLQkJcmVjdC0+bGVmdCA9IChpY2QtPndpZHRoX21heCAtIHJlY3QtPndpZHRoKSAvIDIgKyBpY2QtPnhfbWluOwotCi0JaWYgKHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCA+IGljZC0+aGVpZ2h0X21heCkKLQkJcmVjdC0+dG9wID0gKGljZC0+aGVpZ2h0X21heCAtIHJlY3QtPmhlaWdodCkgLyAyICsgaWNkLT55X21pbjsKLQotCXdpZHRoID0gcmVjdC0+d2lkdGggKiB4c2tpcDsKLQloZWlnaHQgPSByZWN0LT5oZWlnaHQgKiB5c2tpcDsKLQlsZWZ0ID0gcmVjdC0+bGVmdCAqIHhza2lwOwotCXRvcCA9IHJlY3QtPnRvcCAqIHlza2lwOwotCiAJeGJpbiA9IG1pbih4c2tpcCwgKHUxNikzKTsKIAl5YmluID0gbWluKHlza2lwLCAodTE2KTMpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJ4c2tpcCAldSwgd2lkdGggJXUvJXUsIHlza2lwICV1LCBoZWlnaHQgJXUvJXVcbiIsCi0JCXhza2lwLCB3aWR0aCwgcmVjdC0+d2lkdGgsIHlza2lwLCBoZWlnaHQsIHJlY3QtPmhlaWdodCk7Ci0KLQkvKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbiAqIDIpOyBidXQgdGhpcyBpcyBjaGVhcGVyICovCisJLyoKKwkgKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbiAqIDIpOyBidXQgdGhpcyBpcyBjaGVhcGVyLgorCSAqIFRoZXJlIGlzIGFsd2F5cyBhIHZhbGlkIHN1aXRhYmx5IGFsaWduZWQgdmFsdWUuIFRoZSB3b3JzdCBjYXNlIGlzCisJICogeGJpbiA9IDMsIHdpZHRoID0gMjA0OC4gVGhlbiB3ZSB3aWxsIHN0YXJ0IGF0IDM2LCB0aGUgbGFzdCByZWFkIG91dAorCSAqIHBpeGVsIHdpbGwgYmUgMjA4Mywgd2hpY2ggaXMgPCAyMDg1IC0gZmlyc3QgYmxhY2sgcGl4ZWwuCisJICoKKwkgKiBNVDlUMDMxIGRhdGFzaGVldCBpbXBvc2VzIHdpbmRvdyBsZWZ0IGJvcmRlciBhbGlnbm1lbnQsIGRlcGVuZGluZyBvbgorCSAqIHRoZSBzZWxlY3RlZCB4c2tpcC4gRmFpbGluZyB0byBjb25mb3JtIHRvIHRoaXMgcmVxdWlyZW1lbnQgcHJvZHVjZXMKKwkgKiBkYXJrIGhvcml6b250YWwgc3RyaXBlcyBpbiB0aGUgaW1hZ2UuIEhvd2V2ZXIsIGV2ZW4gb2JleWluZyB0byB0aGlzCisJICogcmVxdWlyZW1lbnQgZG9lc24ndCBlbGltaW5hdGUgdGhlIHN0cmlwZXMgaW4gYWxsIGNvbmZpZ3VyYXRpb25zLiBUaGV5CisJICogYXBwZWFyICJsb2NhbGx5IHJlcHJvZHVjaWJseSwiIGJ1dCBjYW4gZGlmZmVyIGJldHdlZW4gdGVzdHMgdW5kZXIKKwkgKiBkaWZmZXJlbnQgbGlnaHRpbmcgY29uZGl0aW9ucy4KKwkgKi8KIAlzd2l0Y2ggKHhiaW4pIHsKKwljYXNlIDE6CisJCXJlY3QtPmxlZnQgJj0gfjE7CisJCWJyZWFrOwogCWNhc2UgMjoKLQkJbGVmdCA9IChsZWZ0ICsgMykgJiB+MzsKKwkJcmVjdC0+bGVmdCAmPSB+MzsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlsZWZ0ID0gcm91bmR1cChsZWZ0LCA2KTsKKwkJcmVjdC0+bGVmdCA9IHJlY3QtPmxlZnQgPiByb3VuZHVwKE1UOVQwMzFfQ09MVU1OX1NLSVAsIDYpID8KKwkJCShyZWN0LT5sZWZ0IC8gNikgKiA2IDogcm91bmR1cChNVDlUMDMxX0NPTFVNTl9TS0lQLCA2KTsKIAl9CiAKLQlzd2l0Y2ggKHliaW4pIHsKLQljYXNlIDI6Ci0JCXRvcCA9ICh0b3AgKyAzKSAmIH4zOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXRvcCA9IHJvdW5kdXAodG9wLCA2KTsKLQl9CisJcmVjdC0+dG9wICY9IH4xOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJza2lwICV1OiV1LCByZWN0ICV1eCV1QCV1OiV1XG4iLAorCQl4c2tpcCwgeXNraXAsIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CiAKIAkvKiBEaXNhYmxlIHJlZ2lzdGVyIHVwZGF0ZSwgcmVjb25maWd1cmUgYXRvbWljYWxseSAqLwogCXJldCA9IHJlZ19zZXQoY2xpZW50LCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAxKTsKQEAgLTI5OSwyOSArMjg4LDMwIEBACiAJCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlUMDMxX1JPV19BRERSRVNTX01PREUsCiAJCQkJCSgoeWJpbiAtIDEpIDw8IDQpIHwgKHlza2lwIC0gMSkpOwogCX0KLQlkZXZfZGJnKCZpY2QtPmRldiwgIm5ldyBwaHlzaWNhbCBsZWZ0ICV1LCB0b3AgJXVcbiIsIGxlZnQsIHRvcCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJuZXcgcGh5c2ljYWwgbGVmdCAldSwgdG9wICV1XG4iLAorCQlyZWN0LT5sZWZ0LCByZWN0LT50b3ApOwogCiAJLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIGd1YXJhbnRlZWQgYnkKIAkgKiBpY2QtPnRyeV9mbXRfY2FwKCksIHNvY19jYW1lcmFfc19jcm9wKCkgYW5kIHNvY19jYW1lcmFfY3JvcGNhcCgpICovCiAJaWYgKHJldCA+PSAwKQotCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlUMDMxX0NPTFVNTl9TVEFSVCwgbGVmdCk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfUk9XX1NUQVJULCB0b3ApOworCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlUMDMxX1JPV19TVEFSVCwgcmVjdC0+dG9wKTsKIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfV0lORE9XX1dJRFRILCB3aWR0aCAtIDEpOworCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlUMDMxX1dJTkRPV19XSURUSCwgcmVjdC0+d2lkdGggLSAxKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfV0lORE9XX0hFSUdIVCwKLQkJCQloZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgLSAxKTsKKwkJCQlyZWN0LT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgLSAxKTsKIAlpZiAocmV0ID49IDAgJiYgbXQ5dDAzMS0+YXV0b2V4cG9zdXJlKSB7Ci0JCXJldCA9IHNldF9zaHV0dGVyKGNsaWVudCwgaGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rKTsKKwkJdW5zaWduZWQgaW50IHRvdGFsX2ggPSByZWN0LT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyB2Ymxhbms7CisJCXJldCA9IHNldF9zaHV0dGVyKGNsaWVudCwgdG90YWxfaCk7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJY29uc3QgdTMyIHNodXR0ZXJfbWF4ID0gTVQ5VDAzMV9NQVhfSEVJR0hUICsgdmJsYW5rOwogCQkJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCA9CiAJCQkJc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLAogCQkJCQkJICAgICAgVjRMMl9DSURfRVhQT1NVUkUpOwotCQkJaWNkLT5leHBvc3VyZSA9IChzaHV0dGVyX21heCAvIDIgKyAoaGVpZ2h0ICsKLQkJCQkJIGljZC0+eV9za2lwX3RvcCArIHZibGFuayAtIDEpICoKLQkJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLworCQkJbXQ5dDAzMS0+ZXhwb3N1cmUgPSAoc2h1dHRlcl9tYXggLyAyICsgKHRvdGFsX2ggLSAxKSAqCisJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLwogCQkJCXNodXR0ZXJfbWF4ICsgcWN0cmwtPm1pbmltdW07CiAJCX0KIAl9CkBAIC0zMzAsNTggKzMyMCw5OSBAQAogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX2NsZWFyKGNsaWVudCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMSk7CiAKLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQotewotCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7Ci0KLQkvKiBDUk9QIC0gbm8gY2hhbmdlIGluIHNjYWxpbmcsIG9yIGluIGxpbWl0cyAqLwotCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoaWNkLCByZWN0LCBtdDl0MDMxLT54c2tpcCwgbXQ5dDAzMS0+eXNraXApOwotfQotCi1zdGF0aWMgaW50IG10OXQwMzFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOwotCWludCByZXQ7Ci0JdTE2IHhza2lwLCB5c2tpcDsKLQlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7Ci0JCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCi0JCS50b3AJPSBpY2QtPnlfY3VycmVudCwKLQkJLndpZHRoCT0gZi0+Zm10LnBpeC53aWR0aCwKLQkJLmhlaWdodAk9IGYtPmZtdC5waXguaGVpZ2h0LAotCX07Ci0KLQkvKgotCSAqIHRyeV9mbXQgaGFzIHB1dCByZWN0YW5nbGUgd2l0aGluIGxpbWl0cy4KLQkgKiBTX0ZNVCAtIHVzZSBiaW5uaW5nIGFuZCBza2lwcGluZyBmb3Igc2NhbGluZywgcmVjYWxjdWxhdGUKLQkgKiBsaW1pdHMsIHVzZWQgZm9yIGNyb3BwaW5nCi0JICovCi0JLyogSXMgdGhpcyBtb3JlIG9wdGltYWwgdGhhbiBqdXN0IGEgZGl2aXNpb24/ICovCi0JZm9yICh4c2tpcCA9IDg7IHhza2lwID4gMTsgeHNraXAtLSkKLQkJaWYgKHJlY3Qud2lkdGggKiB4c2tpcCA8PSBNVDlUMDMxX01BWF9XSURUSCkKLQkJCWJyZWFrOwotCi0JZm9yICh5c2tpcCA9IDg7IHlza2lwID4gMTsgeXNraXAtLSkKLQkJaWYgKHJlY3QuaGVpZ2h0ICogeXNraXAgPD0gTVQ5VDAzMV9NQVhfSEVJR0hUKQotCQkJYnJlYWs7Ci0KLQlyZWNhbGN1bGF0ZV9saW1pdHMoaWNkLCB4c2tpcCwgeXNraXApOwotCi0JcmV0ID0gbXQ5dDAzMV9zZXRfcGFyYW1zKGljZCwgJnJlY3QsIHhza2lwLCB5c2tpcCk7Ci0JaWYgKCFyZXQpIHsKKwlpZiAocmV0ID49IDApIHsKKwkJbXQ5dDAzMS0+cmVjdCA9ICpyZWN0OwogCQltdDl0MDMxLT54c2tpcCA9IHhza2lwOwogCQltdDl0MDMxLT55c2tpcCA9IHlza2lwOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogfQogCi1zdGF0aWMgaW50IG10OXQwMzFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSBhLT5jOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlyZWN0LndpZHRoID0gQUxJR04ocmVjdC53aWR0aCwgMik7CisJcmVjdC5oZWlnaHQgPSBBTElHTihyZWN0LmhlaWdodCwgMik7CisKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QubGVmdCwgJnJlY3Qud2lkdGgsCisJCSAgICAgTVQ5VDAzMV9DT0xVTU5fU0tJUCwgTVQ5VDAzMV9NSU5fV0lEVEgsIE1UOVQwMzFfTUFYX1dJRFRIKTsKKworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC50b3AsICZyZWN0LmhlaWdodCwKKwkJICAgICBNVDlUMDMxX1JPV19TS0lQLCBNVDlUMDMxX01JTl9IRUlHSFQsIE1UOVQwMzFfTUFYX0hFSUdIVCk7CisKKwlyZXR1cm4gbXQ5dDAzMV9zZXRfcGFyYW1zKGljZCwgJnJlY3QsIG10OXQwMzEtPnhza2lwLCBtdDl0MDMxLT55c2tpcCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CisKKwlhLT5jCT0gbXQ5dDAzMS0+cmVjdDsKKwlhLT50eXBlCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9jcm9wY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmEpCit7CisJYS0+Ym91bmRzLmxlZnQJCQk9IE1UOVQwMzFfQ09MVU1OX1NLSVA7CisJYS0+Ym91bmRzLnRvcAkJCT0gTVQ5VDAzMV9ST1dfU0tJUDsKKwlhLT5ib3VuZHMud2lkdGgJCQk9IE1UOVQwMzFfTUFYX1dJRFRIOworCWEtPmJvdW5kcy5oZWlnaHQJCT0gTVQ5VDAzMV9NQVhfSEVJR0hUOworCWEtPmRlZnJlY3QJCQk9IGEtPmJvdW5kczsKKwlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CisJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCisJcGl4LT53aWR0aAkJPSBtdDl0MDMxLT5yZWN0LndpZHRoIC8gbXQ5dDAzMS0+eHNraXA7CisJcGl4LT5oZWlnaHQJCT0gbXQ5dDAzMS0+cmVjdC5oZWlnaHQgLyBtdDl0MDMxLT55c2tpcDsKKwlwaXgtPnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1NHUkJHMTA7CisJcGl4LT5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkU7CisJcGl4LT5jb2xvcnNwYWNlCQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwl1MTYgeHNraXAsIHlza2lwOworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IG10OXQwMzEtPnJlY3Q7CisKKwkvKgorCSAqIHRyeV9mbXQgaGFzIHB1dCB3aWR0aCBhbmQgaGVpZ2h0IHdpdGhpbiBsaW1pdHMuCisJICogU19GTVQ6IHVzZSBiaW5uaW5nIGFuZCBza2lwcGluZyBmb3Igc2NhbGluZworCSAqLworCXhza2lwID0gbXQ5dDAzMV9za2lwKCZyZWN0LndpZHRoLCBwaXgtPndpZHRoLCBNVDlUMDMxX01BWF9XSURUSCk7CisJeXNraXAgPSBtdDl0MDMxX3NraXAoJnJlY3QuaGVpZ2h0LCBwaXgtPmhlaWdodCwgTVQ5VDAzMV9NQVhfSEVJR0hUKTsKKworCS8qIG10OXQwMzFfc2V0X3BhcmFtcygpIGRvZXNuJ3QgY2hhbmdlIHdpZHRoIGFuZCBoZWlnaHQgKi8KKwlyZXR1cm4gbXQ5dDAzMV9zZXRfcGFyYW1zKGljZCwgJnJlY3QsIHhza2lwLCB5c2tpcCk7Cit9CisKKy8qCisgKiBJZiBhIHVzZXIgd2luZG93IGxhcmdlciB0aGFuIHNlbnNvciB3aW5kb3cgaXMgcmVxdWVzdGVkLCB3ZSdsbCBpbmNyZWFzZSB0aGUKKyAqIHNlbnNvciB3aW5kb3cuCisgKi8KK3N0YXRpYyBpbnQgbXQ5dDAzMV90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIApAQCAtMzkyLDE1ICs0MjMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl0MDMxX2dldF9jaGlwX2lkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKK3N0YXRpYyBpbnQgbXQ5dDAzMV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7Ci0Jc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CiAKIAlpZiAoaWQtPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpZC0+bWF0Y2guYWRkciAhPSBtdDl0MDMxLT5jbGllbnQtPmFkZHIpCisJaWYgKGlkLT5tYXRjaC5hZGRyICE9IGNsaWVudC0+YWRkcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZC0+aWRlbnQJPSBtdDl0MDMxLT5tb2RlbDsKQEAgLTQxMCwxMCArNDQyLDEwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgaW50IG10OXQwMzFfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBtdDl0MDMxX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCiAJaWYgKHJlZy0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQyOSwxMCArNDYxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IG10OXQwMzFfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAKIAlpZiAocmVnLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDkzLDM5ICs1MjUsMTcgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IG10OXQwMzFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIHZvaWQgbXQ5dDAzMV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIGludCBtdDl0MDMxX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwotc3RhdGljIGludCBtdDl0MDMxX3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwotCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIG10OXQwMzFfb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQkJPSBtdDl0MDMxX3ZpZGVvX3Byb2JlLAotCS5yZW1vdmUJCQk9IG10OXQwMzFfdmlkZW9fcmVtb3ZlLAotCS5pbml0CQkJPSBtdDl0MDMxX2luaXQsCi0JLnJlbGVhc2UJCT0gbXQ5dDAzMV9yZWxlYXNlLAotCS5zdGFydF9jYXB0dXJlCQk9IG10OXQwMzFfc3RhcnRfY2FwdHVyZSwKLQkuc3RvcF9jYXB0dXJlCQk9IG10OXQwMzFfc3RvcF9jYXB0dXJlLAotCS5zZXRfY3JvcAkJPSBtdDl0MDMxX3NldF9jcm9wLAotCS5zZXRfZm10CQk9IG10OXQwMzFfc2V0X2ZtdCwKLQkudHJ5X2ZtdAkJPSBtdDl0MDMxX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5dDAzMV9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBtdDl0MDMxX3F1ZXJ5X2J1c19wYXJhbSwKIAkuY29udHJvbHMJCT0gbXQ5dDAzMV9jb250cm9scywKIAkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUobXQ5dDAzMV9jb250cm9scyksCi0JLmdldF9jb250cm9sCQk9IG10OXQwMzFfZ2V0X2NvbnRyb2wsCi0JLnNldF9jb250cm9sCQk9IG10OXQwMzFfc2V0X2NvbnRyb2wsCi0JLmdldF9jaGlwX2lkCQk9IG10OXQwMzFfZ2V0X2NoaXBfaWQsCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS5nZXRfcmVnaXN0ZXIJCT0gbXQ5dDAzMV9nZXRfcmVnaXN0ZXIsCi0JLnNldF9yZWdpc3RlcgkJPSBtdDl0MDMxX3NldF9yZWdpc3RlciwKLSNlbmRpZgogfTsKIAotc3RhdGljIGludCBtdDl0MDMxX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBtdDl0MDMxX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CiAJaW50IGRhdGE7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CkBAIC01NDQsMTQgKzU1NCwyMSBAQAogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKIAkJY3RybC0+dmFsdWUgPSBtdDl0MDMxLT5hdXRvZXhwb3N1cmU7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJY3RybC0+dmFsdWUgPSBtdDl0MDMxLT5nYWluOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQljdHJsLT52YWx1ZSA9IG10OXQwMzEtPmV4cG9zdXJlOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOwogCWludCBkYXRhOwogCkBAIC01ODYsNyArNjAzLDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgcmFuZ2UgPSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIHFjdHJsLT5taW5pbXVtOwogCQkJZGF0YSA9ICgoY3RybC0+dmFsdWUgLSBxY3RybC0+bWluaW11bSkgKiA4ICsgcmFuZ2UgLyAyKSAvIHJhbmdlOwogCi0JCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiAlZFxuIiwgZGF0YSk7CisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldHRpbmcgZ2FpbiAlZFxuIiwgZGF0YSk7CiAJCQlkYXRhID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiwgZGF0YSk7CiAJCQlpZiAoZGF0YSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CkBAIC02MDYsNyArNjIzLDcgQEAKIAkJCQkvKiBjYWxjdWxhdGVkIGdhaW4gNjUuLjEwMjQgLT4gKDEuLjEyMCkgPDwgOCArIDB4NjAgKi8KIAkJCQlkYXRhID0gKCgoZ2FpbiAtIDY0ICsgNykgKiAzMikgJiAweGZmMDApIHwgMHg2MDsKIAotCQkJZGV2X2RiZygmaWNkLT5kZXYsICJTZXR0aW5nIGdhaW4gZnJvbSAweCV4IHRvIDB4JXhcbiIsCisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldCBnYWluIGZyb20gMHgleCB0byAweCV4XG4iLAogCQkJCXJlZ19yZWFkKGNsaWVudCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiksIGRhdGEpOwogCQkJZGF0YSA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfR0xPQkFMX0dBSU4sIGRhdGEpOwogCQkJaWYgKGRhdGEgPCAwKQpAQCAtNjE0LDcgKzYzMSw3IEBACiAJCX0KIAogCQkvKiBTdWNjZXNzICovCi0JCWljZC0+Z2FpbiA9IGN0cmwtPnZhbHVlOworCQltdDl0MDMxLT5nYWluID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CiAJCS8qIG10OXQwMzEgaGFzIG1heGltdW0gPT0gZGVmYXVsdCAqLwpAQCAtNjI3LDExICs2NDQsMTEgQEAKIAkJCXUzMiBvbGQ7CiAKIAkJCWdldF9zaHV0dGVyKGNsaWVudCwgJm9sZCk7Ci0JCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgc2h1dHRlciB3aWR0aCBmcm9tICV1IHRvICV1XG4iLAorCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTZXQgc2h1dHRlciBmcm9tICV1IHRvICV1XG4iLAogCQkJCW9sZCwgc2h1dHRlcik7CiAJCQlpZiAoc2V0X3NodXR0ZXIoY2xpZW50LCBzaHV0dGVyKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlpY2QtPmV4cG9zdXJlID0gY3RybC0+dmFsdWU7CisJCQltdDl0MDMxLT5leHBvc3VyZSA9IGN0cmwtPnZhbHVlOwogCQkJbXQ5dDAzMS0+YXV0b2V4cG9zdXJlID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTYzOSwxMyArNjU2LDE0IEBACiAJCWlmIChjdHJsLT52YWx1ZSkgewogCQkJY29uc3QgdTE2IHZibGFuayA9IE1UOVQwMzFfVkVSVElDQUxfQkxBTks7CiAJCQljb25zdCB1MzIgc2h1dHRlcl9tYXggPSBNVDlUMDMxX01BWF9IRUlHSFQgKyB2Ymxhbms7Ci0JCQlpZiAoc2V0X3NodXR0ZXIoY2xpZW50LCBpY2QtPmhlaWdodCArCi0JCQkJCWljZC0+eV9za2lwX3RvcCArIHZibGFuaykgPCAwKQorCQkJdW5zaWduZWQgaW50IHRvdGFsX2ggPSBtdDl0MDMxLT5yZWN0LmhlaWdodCArCisJCQkJaWNkLT55X3NraXBfdG9wICsgdmJsYW5rOworCisJCQlpZiAoc2V0X3NodXR0ZXIoY2xpZW50LCB0b3RhbF9oKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CiAJCQlxY3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybChpY2QtPm9wcywgVjRMMl9DSURfRVhQT1NVUkUpOwotCQkJaWNkLT5leHBvc3VyZSA9IChzaHV0dGVyX21heCAvIDIgKyAoaWNkLT5oZWlnaHQgKwotCQkJCQkgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rIC0gMSkgKgotCQkJCQkgKHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW0pKSAvCisJCQltdDl0MDMxLT5leHBvc3VyZSA9IChzaHV0dGVyX21heCAvIDIgKyAodG90YWxfaCAtIDEpICoKKwkJCQkgKHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW0pKSAvCiAJCQkJc2h1dHRlcl9tYXggKyBxY3RybC0+bWluaW11bTsKIAkJCW10OXQwMzEtPmF1dG9leHBvc3VyZSA9IDE7CiAJCX0gZWxzZQpAQCAtNjU3LDIyICs2NzUsMTYgQEAKIAogLyogSW50ZXJmYWNlIGFjdGl2ZSwgY2FuIHVzZSBpMmMuIElmIGl0IGZhaWxzLCBpdCBjYW4gaW5kZWVkIG1lYW4sIHRoYXQKICAqIHRoaXMgd2Fzbid0IG91ciBjYXB0dXJlIGludGVyZmFjZSwgc28sIHdlIHdhaXQgZm9yIHRoZSByaWdodCBvbmUgKi8KLXN0YXRpYyBpbnQgbXQ5dDAzMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5dDAzMV92aWRlb19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKIAotCS8qIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCi0JICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gKi8KLQlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAotCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBFbmFibGUgdGhlIGNoaXAgKi8KIAlkYXRhID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9DSElQX0VOQUJMRSwgMSk7Ci0JZGV2X2RiZygmaWNkLT5kZXYsICJ3cml0ZTogJWRcbiIsIGRhdGEpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAid3JpdGU6ICVkXG4iLCBkYXRhKTsKIAogCS8qIFJlYWQgb3V0IHRoZSBjaGlwIHZlcnNpb24gcmVnaXN0ZXIgKi8KIAlkYXRhID0gcmVnX3JlYWQoY2xpZW50LCBNVDlUMDMxX0NISVBfVkVSU0lPTik7CkBAIC02ODQsNDQgKzY5Niw2NCBAQAogCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl0MDMxX2NvbG91cl9mb3JtYXRzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZGV2X2VycigmaWNkLT5kZXYsCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJIk5vIE1UOVQwMzEgY2hpcCBkZXRlY3RlZCwgcmVnaXN0ZXIgcmVhZCAleFxuIiwgZGF0YSk7Ci0JCWdvdG8gZWkyYzsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGV2X2luZm8oJmljZC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlUMDMxIGNoaXAgSUQgJXhcbiIsIGRhdGEpOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkRldGVjdGVkIGEgTVQ5VDAzMSBjaGlwIElEICV4XG4iLCBkYXRhKTsKIAotCS8qIE5vdyB0aGF0IHdlIGtub3cgdGhlIG1vZGVsLCB3ZSBjYW4gc3RhcnQgdmlkZW8gKi8KLQlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7Ci0JaWYgKHJldCkKLQkJZ290byBldnN0YXJ0OworCXJldCA9IG10OXQwMzFfaWRsZShjbGllbnQpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXNlIHRoZSBjYW1lcmFcbiIpOwogCi0JcmV0dXJuIDA7CisJLyogbXQ5dDAzMV9pZGxlKCkgaGFzIHJlc2V0IHRoZSBjaGlwIHRvIGRlZmF1bHQuICovCisJbXQ5dDAzMS0+ZXhwb3N1cmUgPSAyNTU7CisJbXQ5dDAzMS0+Z2FpbiA9IDY0OwogCi1ldnN0YXJ0OgotZWkyYzoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBtdDl0MDMxX3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtdDl0MDMxX3N1YmRldl9jb3JlX29wcyA9IHsKKwkuZ19jdHJsCQk9IG10OXQwMzFfZ19jdHJsLAorCS5zX2N0cmwJCT0gbXQ5dDAzMV9zX2N0cmwsCisJLmdfY2hpcF9pZGVudAk9IG10OXQwMzFfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3Rlcgk9IG10OXQwMzFfZ19yZWdpc3RlciwKKwkuc19yZWdpc3Rlcgk9IG10OXQwMzFfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiVmlkZW8gJXggcmVtb3ZlZDogJXAsICVwXG4iLCBtdDl0MDMxLT5jbGllbnQtPmFkZHIsCi0JCWljZC0+ZGV2LnBhcmVudCwgaWNkLT52ZGV2KTsKLQlzb2NfY2FtZXJhX3ZpZGVvX3N0b3AoaWNkKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG10OXQwMzFfc3ViZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JPSBtdDl0MDMxX3Nfc3RyZWFtLAorCS5zX2ZtdAkJPSBtdDl0MDMxX3NfZm10LAorCS5nX2ZtdAkJPSBtdDl0MDMxX2dfZm10LAorCS50cnlfZm10CT0gbXQ5dDAzMV90cnlfZm10LAorCS5zX2Nyb3AJCT0gbXQ5dDAzMV9zX2Nyb3AsCisJLmdfY3JvcAkJPSBtdDl0MDMxX2dfY3JvcCwKKwkuY3JvcGNhcAk9IG10OXQwMzFfY3JvcGNhcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG10OXQwMzFfc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZtdDl0MDMxX3N1YmRldl9jb3JlX29wcywKKwkudmlkZW8JPSAmbXQ5dDAzMV9zdWJkZXZfdmlkZW9fb3BzLAorfTsKIAogc3RhdGljIGludCBtdDl0MDMxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKIHsKIAlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbDsKIAlpbnQgcmV0OwogCisJaWYgKCFpY2QpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlUMDMxOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAlpZiAoIWljbCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOVQwMzEgZHJpdmVyIG5lZWRzIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTczNywyMyArNzY5LDE3IEBACiAJaWYgKCFtdDl0MDMxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW10OXQwMzEtPmNsaWVudCA9IGNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtdDl0MDMxKTsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmbXQ5dDAzMS0+c3ViZGV2LCBjbGllbnQsICZtdDl0MDMxX3N1YmRldl9vcHMpOwogCiAJLyogU2Vjb25kIHN0YWdlIHByb2JlIC0gd2hlbiBhIGNhcHR1cmUgYWRhcHRlciBpcyB0aGVyZSAqLwotCWljZCA9ICZtdDl0MDMxLT5pY2Q7Ci0JaWNkLT5vcHMJPSAmbXQ5dDAzMV9vcHM7Ci0JaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OwotCWljZC0+eF9taW4JPSBNVDlUMDMxX0NPTFVNTl9TS0lQOwotCWljZC0+eV9taW4JPSBNVDlUMDMxX1JPV19TS0lQOwotCWljZC0+eF9jdXJyZW50CT0gaWNkLT54X21pbjsKLQlpY2QtPnlfY3VycmVudAk9IGljZC0+eV9taW47Ci0JaWNkLT53aWR0aF9taW4JPSBNVDlUMDMxX01JTl9XSURUSDsKLQlpY2QtPndpZHRoX21heAk9IE1UOVQwMzFfTUFYX1dJRFRIOwotCWljZC0+aGVpZ2h0X21pbgk9IE1UOVQwMzFfTUlOX0hFSUdIVDsKLQlpY2QtPmhlaWdodF9tYXgJPSBNVDlUMDMxX01BWF9IRUlHSFQ7Ci0JaWNkLT55X3NraXBfdG9wCT0gMDsKLQlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7CisJaWNkLT5vcHMJCT0gJm10OXQwMzFfb3BzOworCWljZC0+eV9za2lwX3RvcAkJPSAwOworCisJbXQ5dDAzMS0+cmVjdC5sZWZ0CT0gTVQ5VDAzMV9DT0xVTU5fU0tJUDsKKwltdDl0MDMxLT5yZWN0LnRvcAk9IE1UOVQwMzFfUk9XX1NLSVA7CisJbXQ5dDAzMS0+cmVjdC53aWR0aAk9IE1UOVQwMzFfTUFYX1dJRFRIOworCW10OXQwMzEtPnJlY3QuaGVpZ2h0CT0gTVQ5VDAzMV9NQVhfSEVJR0hUOworCiAJLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKIAkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KIAltdDl0MDMxLT5hdXRvZXhwb3N1cmUgPSAxOwpAQCAtNzYxLDI0ICs3ODcsMjkgQEAKIAltdDl0MDMxLT54c2tpcCA9IDE7CiAJbXQ5dDAzMS0+eXNraXAgPSAxOwogCi0JcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVpc2RyOworCW10OXQwMzFfaWRsZShjbGllbnQpOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gbXQ5dDAzMV92aWRlb19wcm9iZShjbGllbnQpOwogCi1laXNkcjoKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKLQlrZnJlZShtdDl0MDMxKTsKKwltdDl0MDMxX2Rpc2FibGUoY2xpZW50KTsKKworCWlmIChyZXQpIHsKKwkJaWNkLT5vcHMgPSBOVUxMOworCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwkJa2ZyZWUobXQ5dDAzMSk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDl0MDMxX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0Jc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmbXQ5dDAzMS0+aWNkKTsKKwlpY2QtPm9wcyA9IE5VTEw7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJY2xpZW50LT5kcml2ZXIgPSBOVUxMOwogCWtmcmVlKG10OXQwMzEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IGRiZGNjODYuLjk5NTYwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0xNCwxMyArMTQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKIC8qIG10OXYwMjIgaTJjIGFkZHJlc3MgMHg0OCwgMHg0YywgMHg1OCwgMHg1YwotICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgaTJjX2JvYXJkX2luZm8KLSAqIGFuZCBjYWxsIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKCkgKi8KKyAqIFRoZSBwbGF0Zm9ybSBoYXMgdG8gZGVmaW5lIGN0cnVjdCBpMmNfYm9hcmRfaW5mbyBvYmplY3RzIGFuZCBsaW5rIHRvIHRoZW0KKyAqIGZyb20gc3RydWN0IHNvY19jYW1lcmFfbGluayAqLwogCiBzdGF0aWMgY2hhciAqc2Vuc29yX3R5cGU7CiBtb2R1bGVfcGFyYW0oc2Vuc29yX3R5cGUsIGNoYXJwLCBTX0lSVUdPKTsKQEAgLTQ1LDcgKzQ1LDcgQEAKICNkZWZpbmUgTVQ5VjAyMl9QSVhFTF9PUEVSQVRJT05fTU9ERQkweDBmCiAjZGVmaW5lIE1UOVYwMjJfTEVEX09VVF9DT05UUk9MCQkweDFiCiAjZGVmaW5lIE1UOVYwMjJfQURDX01PREVfQ09OVFJPTAkweDFjCi0jZGVmaW5lIE1UOVYwMjJfQU5BTE9HX0dBSU4JCTB4MzQKKyNkZWZpbmUgTVQ5VjAyMl9BTkFMT0dfR0FJTgkJMHgzNQogI2RlZmluZSBNVDlWMDIyX0JMQUNLX0xFVkVMX0NBTElCX0NUUkwJMHg0NwogI2RlZmluZSBNVDlWMDIyX1BJWENMS19GVl9MVgkJMHg3NAogI2RlZmluZSBNVDlWMDIyX0RJR0lUQUxfVEVTVF9QQVRURVJOCTB4N2YKQEAgLTU1LDYgKzU1LDEzIEBACiAvKiBQcm9ncmVzc2l2ZSBzY2FuLCBtYXN0ZXIsIGRlZmF1bHRzICovCiAjZGVmaW5lIE1UOVYwMjJfQ0hJUF9DT05UUk9MX0RFRkFVTFQJMHgxODgKIAorI2RlZmluZSBNVDlWMDIyX01BWF9XSURUSAkJNzUyCisjZGVmaW5lIE1UOVYwMjJfTUFYX0hFSUdIVAkJNDgwCisjZGVmaW5lIE1UOVYwMjJfTUlOX1dJRFRICQk0OAorI2RlZmluZSBNVDlWMDIyX01JTl9IRUlHSFQJCTMyCisjZGVmaW5lIE1UOVYwMjJfQ09MVU1OX1NLSVAJCTEKKyNkZWZpbmUgTVQ5VjAyMl9ST1dfU0tJUAkJNAorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgbXQ5djAyMl9jb2xvdXJfZm9ybWF0c1tdID0gewogCS8qIE9yZGVyIGltcG9ydGFudDogZmlyc3QgbmF0aXZlbHkgc3VwcG9ydGVkLAogCSAqIHNlY29uZCBzdXBwb3J0ZWQgd2l0aCBhIEdQSU8gZXh0ZW5kZXIgKi8KQEAgLTg1LDEyICs5MiwxOCBAQAogfTsKIAogc3RydWN0IG10OXYwMjIgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2OworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsJLyogU2Vuc29yIHdpbmRvdyAqLworCV9fdTMyIGZvdXJjYzsKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5VjAyMiogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwogCXUxNiBjaGlwX2NvbnRyb2w7CiB9OwogCitzdGF0aWMgc3RydWN0IG10OXYwMjIgKnRvX210OXYwMjIoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBzdHJ1Y3QgbXQ5djAyMiwgc3ViZGV2KTsKK30KKwogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCByZWcpCiB7CiAJczMyIGRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcpOwpAQCAtMTI1LDI5ICsxMzgsMTEgQEAKIAlyZXR1cm4gcmVnX3dyaXRlKGNsaWVudCwgcmVnLCByZXQgJiB+ZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDl2MDIyX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKIAlpbnQgcmV0OwogCi0JaWYgKGljbC0+cG93ZXIpIHsKLQkJcmV0ID0gaWNsLT5wb3dlcigmY2xpZW50LT5kZXYsIDEpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycihpY2QtPnZkZXYtPnBhcmVudCwKLQkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9uIHRoZSBjYW1lcmEuXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFRoZSBjYW1lcmEgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkgb24sIHdlIGhhcmQtcmVzZXQgaXQgYWRkaXRpb25hbGx5LAotCSAqIGlmIGF2YWlsYWJsZS4gU29mdCByZXNldCBpcyBkb25lIGluIHZpZGVvX3Byb2JlKCkuCi0JICovCi0JaWYgKGljbC0+cmVzZXQpCi0JCWljbC0+cmVzZXQoJmNsaWVudC0+ZGV2KTsKLQogCS8qIEFsbW9zdCB0aGUgZGVmYXVsdCBtb2RlOiBtYXN0ZXIsIHBhcmFsbGVsLCBzaW11bHRhbmVvdXMsIGFuZCBhbgogCSAqIHVuZG9jdW1lbnRlZCBiaXQgMHgyMDAsIHdoaWNoIGlzIHByZXNlbnQgaW4gdGFibGUgNywgYnV0IG5vdCBpbiA4LAogCSAqIHBsdXMgc25hcHNob3QgbW9kZSB0byBkaXNhYmxlIHNjYW4gZm9yIG5vdyAqLwpAQCAtMTYxLDYgKzE1NiwxMCBAQAogCQkvKiBBRUMsIEFHQyBvbiAqLwogCQlyZXQgPSByZWdfc2V0KGNsaWVudCwgTVQ5VjAyMl9BRUNfQUdDX0VOQUJMRSwgMHgzKTsKIAlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9BTkFMT0dfR0FJTiwgMTYpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1RPVEFMX1NIVVRURVJfV0lEVEgsIDQ4MCk7CisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfTUFYX1RPVEFMX1NIVVRURVJfV0lEVEgsIDQ4MCk7CiAJaWYgKCFyZXQpCiAJCS8qIGRlZmF1bHQgLSBhdXRvICovCkBAIC0xNzEsMzcgKzE3MCwxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDl2MDIyX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKIAotCWlmIChpY2wtPnBvd2VyKQotCQlpY2wtPnBvd2VyKCZtdDl2MDIyLT5jbGllbnQtPmRldiwgMCk7CisJaWYgKGVuYWJsZSkKKwkJLyogU3dpdGNoIHRvIG1hc3RlciAibm9ybWFsIiBtb2RlICovCisJCW10OXYwMjItPmNoaXBfY29udHJvbCAmPSB+MHgxMDsKKwllbHNlCisJCS8qIFN3aXRjaCB0byBzbmFwc2hvdCBtb2RlICovCisJCW10OXYwMjItPmNoaXBfY29udHJvbCB8PSAweDEwOwogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5djAyMl9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KLQltdDl2MDIyLT5jaGlwX2NvbnRyb2wgJj0gfjB4MTA7Ci0JaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfQ0hJUF9DT05UUk9MLAotCQkgICAgICBtdDl2MDIyLT5jaGlwX2NvbnRyb2wpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5djAyMl9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwotCS8qIFN3aXRjaCB0byBzbmFwc2hvdCBtb2RlICovCi0JbXQ5djAyMi0+Y2hpcF9jb250cm9sIHw9IDB4MTA7Ci0JaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfQ0hJUF9DT05UUk9MLAotCQkgICAgICBtdDl2MDIyLT5jaGlwX2NvbnRyb2wpIDwgMCkKKwlpZiAocmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9DSElQX0NPTlRST0wsIG10OXYwMjItPmNoaXBfY29udHJvbCkgPCAwKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwOSw5ICsxOTAsOSBAQAogc3RhdGljIGludCBtdDl2MDIyX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnID0gZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKIAlpbnQgcmV0OwogCXUxNiBwaXhjbGsgPSAwOwpAQCAtMjU1LDcgKzIzNiw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIkNhbGN1bGF0ZWQgcGl4Y2xrIDB4JXgsIGNoaXAgY29udHJvbCAweCV4XG4iLAorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiQ2FsY3VsYXRlZCBwaXhjbGsgMHgleCwgY2hpcCBjb250cm9sIDB4JXhcbiIsCiAJCXBpeGNsaywgbXQ5djAyMi0+Y2hpcF9jb250cm9sKTsKIAogCXJldHVybiAwOwpAQCAtMjYzLDggKzI0NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG10OXYwMjJfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAl1bnNpZ25lZCBpbnQgd2lkdGhfZmxhZzsKIAogCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKQEAgLTI4MCw2MCArMjYwLDEyMSBAQAogCQl3aWR0aF9mbGFnOwogfQogCi1zdGF0aWMgaW50IG10OXYwMjJfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgbXQ5djAyMl9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSBhLT5jOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCisJLyogQmF5ZXIgZm9ybWF0IC0gZXZlbiBzaXplIGxlbmd0aHMgKi8KKwlpZiAobXQ5djAyMi0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKKwkgICAgbXQ5djAyMi0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KSB7CisJCXJlY3Qud2lkdGgJPSBBTElHTihyZWN0LndpZHRoLCAyKTsKKwkJcmVjdC5oZWlnaHQJPSBBTElHTihyZWN0LmhlaWdodCwgMik7CisJCS8qIExldCB0aGUgdXNlciBwbGF5IHdpdGggdGhlIHN0YXJ0aW5nIHBpeGVsICovCisJfQorCisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LmxlZnQsICZyZWN0LndpZHRoLAorCQkgICAgIE1UOVYwMjJfQ09MVU1OX1NLSVAsIE1UOVYwMjJfTUlOX1dJRFRILCBNVDlWMDIyX01BWF9XSURUSCk7CisKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QudG9wLCAmcmVjdC5oZWlnaHQsCisJCSAgICAgTVQ5VjAyMl9ST1dfU0tJUCwgTVQ5VjAyMl9NSU5fSEVJR0hULCBNVDlWMDIyX01BWF9IRUlHSFQpOworCiAJLyogTGlrZSBpbiBleGFtcGxlIGFwcC4gQ29udHJhZGljdHMgdGhlIGRhdGFzaGVldCB0aG91Z2ggKi8KIAlyZXQgPSByZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfQUVDX0FHQ19FTkFCTEUpOwogCWlmIChyZXQgPj0gMCkgewogCQlpZiAocmV0ICYgMSkgLyogQXV0b2V4cG9zdXJlICovCiAJCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX01BWF9UT1RBTF9TSFVUVEVSX1dJRFRILAotCQkJCQlyZWN0LT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyA0Myk7CisJCQkJCXJlY3QuaGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgNDMpOwogCQllbHNlCiAJCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1RPVEFMX1NIVVRURVJfV0lEVEgsCi0JCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIDQzKTsKKwkJCQkJcmVjdC5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyA0Myk7CiAJfQogCS8qIFNldHVwIGZyYW1lIGZvcm1hdDogZGVmYXVsdHMgYXBhcnQgZnJvbSB3aWR0aCBhbmQgaGVpZ2h0ICovCiAJaWYgKCFyZXQpCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9DT0xVTU5fU1RBUlQsIHJlY3QubGVmdCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfUk9XX1NUQVJULCByZWN0LT50b3ApOworCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1JPV19TVEFSVCwgcmVjdC50b3ApOwogCWlmICghcmV0KQogCQkvKiBEZWZhdWx0IDk0LCBQaHl0ZWMgZHJpdmVyIHNheXM6CiAJCSAqICJ3aWR0aCArIGhvcml6b250YWwgYmxhbmsgPj0gNjYwIiAqLwogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX0hPUklaT05UQUxfQkxBTktJTkcsCi0JCQkJcmVjdC0+d2lkdGggPiA2NjAgLSA0MyA/IDQzIDoKLQkJCQk2NjAgLSByZWN0LT53aWR0aCk7CisJCQkJcmVjdC53aWR0aCA+IDY2MCAtIDQzID8gNDMgOgorCQkJCTY2MCAtIHJlY3Qud2lkdGgpOwogCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1ZFUlRJQ0FMX0JMQU5LSU5HLCA0NSk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfV0lORE9XX1dJRFRILCByZWN0LT53aWR0aCk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfV0lORE9XX1dJRFRILCByZWN0LndpZHRoKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9XSU5ET1dfSEVJR0hULAotCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCk7CisJCQkJcmVjdC5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3ApOwogCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIkZyYW1lICV1eCV1IHBpeGVsXG4iLCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkZyYW1lICV1eCV1IHBpeGVsXG4iLCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisKKwltdDl2MDIyLT5yZWN0ID0gcmVjdDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OXYwMjJfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5djAyMl9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKKworCWEtPmMJPSBtdDl2MDIyLT5yZWN0OworCWEtPnR5cGUJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDl2MDIyX2Nyb3BjYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqYSkKK3sKKwlhLT5ib3VuZHMubGVmdAkJCT0gTVQ5VjAyMl9DT0xVTU5fU0tJUDsKKwlhLT5ib3VuZHMudG9wCQkJPSBNVDlWMDIyX1JPV19TS0lQOworCWEtPmJvdW5kcy53aWR0aAkJCT0gTVQ5VjAyMl9NQVhfV0lEVEg7CisJYS0+Ym91bmRzLmhlaWdodAkJPSBNVDlWMDIyX01BWF9IRUlHSFQ7CisJYS0+ZGVmcmVjdAkJCT0gYS0+Ym91bmRzOworCWEtPnR5cGUJCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yCT0gMTsKKwlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcgk9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDl2MDIyX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7Ci0Jc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gewotCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAotCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCi0JCS53aWR0aAk9IHBpeC0+d2lkdGgsCi0JCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKworCXBpeC0+d2lkdGgJCT0gbXQ5djAyMi0+cmVjdC53aWR0aDsKKwlwaXgtPmhlaWdodAkJPSBtdDl2MDIyLT5yZWN0LmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0CT0gbXQ5djAyMi0+Zm91cmNjOworCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FOworCXBpeC0+Y29sb3JzcGFjZQkJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXYwMjJfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9jcm9wIGEgPSB7CisJCS5jID0geworCQkJLmxlZnQJPSBtdDl2MDIyLT5yZWN0LmxlZnQsCisJCQkudG9wCT0gbXQ5djAyMi0+cmVjdC50b3AsCisJCQkud2lkdGgJPSBwaXgtPndpZHRoLAorCQkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCQl9LAogCX07CisJaW50IHJldDsKIAogCS8qIFRoZSBjYWxsZXIgcHJvdmlkZXMgYSBzdXBwb3J0ZWQgZm9ybWF0LCBhcyB2ZXJpZmllZCBwZXIgY2FsbCB0bwogCSAqIGljZC0+dHJ5X2ZtdCgpLCBkYXRhd2lkdGggaXMgZnJvbSBvdXIgc3VwcG9ydGVkIGZvcm1hdCBsaXN0ICovCkBAIC0zNTYsMzAgKzM5Nyw0MiBAQAogCX0KIAogCS8qIE5vIHN1cHBvcnQgZm9yIHNjYWxpbmcgb24gdGhpcyBjYW1lcmEsIGp1c3QgY3JvcC4gKi8KLQlyZXR1cm4gbXQ5djAyMl9zZXRfY3JvcChpY2QsICZyZWN0KTsKKwlyZXQgPSBtdDl2MDIyX3NfY3JvcChzZCwgJmEpOworCWlmICghcmV0KSB7CisJCXBpeC0+d2lkdGggPSBtdDl2MDIyLT5yZWN0LndpZHRoOworCQlwaXgtPmhlaWdodCA9IG10OXYwMjItPnJlY3QuaGVpZ2h0OworCQltdDl2MDIyLT5mb3VyY2MgPSBwaXgtPnBpeGVsZm9ybWF0OworCX0KKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDl2MDIyX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJaW50IGFsaWduID0gcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4IHx8CisJCXBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CiAKLQl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJnBpeC0+d2lkdGgsIDQ4LCA3NTIsIDIgLyogPyAqLywKLQkJCSAgICAgICZwaXgtPmhlaWdodCwgMzIgKyBpY2QtPnlfc2tpcF90b3AsCi0JCQkgICAgICA0ODAgKyBpY2QtPnlfc2tpcF90b3AsIDAsIDApOworCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcGl4LT53aWR0aCwgTVQ5VjAyMl9NSU5fV0lEVEgsCisJCU1UOVYwMjJfTUFYX1dJRFRILCBhbGlnbiwKKwkJJnBpeC0+aGVpZ2h0LCBNVDlWMDIyX01JTl9IRUlHSFQgKyBpY2QtPnlfc2tpcF90b3AsCisJCU1UOVYwMjJfTUFYX0hFSUdIVCArIGljZC0+eV9za2lwX3RvcCwgYWxpZ24sIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCitzdGF0aWMgaW50IG10OXYwMjJfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQogewotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOwogCiAJaWYgKGlkLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoaWQtPm1hdGNoLmFkZHIgIT0gbXQ5djAyMi0+Y2xpZW50LT5hZGRyKQorCWlmIChpZC0+bWF0Y2guYWRkciAhPSBjbGllbnQtPmFkZHIpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWQtPmlkZW50CT0gbXQ5djAyMi0+bW9kZWw7CkBAIC0zODksMTAgKzQ0MiwxMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotc3RhdGljIGludCBtdDl2MDIyX2dldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3N0YXRpYyBpbnQgbXQ5djAyMl9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAogCWlmIChyZWctPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSIHx8IHJlZy0+cmVnID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MDksMTAgKzQ2MiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OXYwMjJfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBtdDl2MDIyX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCiAJaWYgKHJlZy0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ4MSw0MSArNTM0LDIyIEBACiAJfQogfTsKIAotc3RhdGljIGludCBtdDl2MDIyX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIG10OXYwMjJfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLXN0YXRpYyBpbnQgbXQ5djAyMl9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKLXN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKLQogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBtdDl2MDIyX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJCT0gbXQ5djAyMl92aWRlb19wcm9iZSwKLQkucmVtb3ZlCQkJPSBtdDl2MDIyX3ZpZGVvX3JlbW92ZSwKLQkuaW5pdAkJCT0gbXQ5djAyMl9pbml0LAotCS5yZWxlYXNlCQk9IG10OXYwMjJfcmVsZWFzZSwKLQkuc3RhcnRfY2FwdHVyZQkJPSBtdDl2MDIyX3N0YXJ0X2NhcHR1cmUsCi0JLnN0b3BfY2FwdHVyZQkJPSBtdDl2MDIyX3N0b3BfY2FwdHVyZSwKLQkuc2V0X2Nyb3AJCT0gbXQ5djAyMl9zZXRfY3JvcCwKLQkuc2V0X2ZtdAkJPSBtdDl2MDIyX3NldF9mbXQsCi0JLnRyeV9mbXQJCT0gbXQ5djAyMl90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OXYwMjJfc2V0X2J1c19wYXJhbSwKIAkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5djAyMl9xdWVyeV9idXNfcGFyYW0sCiAJLmNvbnRyb2xzCQk9IG10OXYwMjJfY29udHJvbHMsCiAJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG10OXYwMjJfY29udHJvbHMpLAotCS5nZXRfY29udHJvbAkJPSBtdDl2MDIyX2dldF9jb250cm9sLAotCS5zZXRfY29udHJvbAkJPSBtdDl2MDIyX3NldF9jb250cm9sLAotCS5nZXRfY2hpcF9pZAkJPSBtdDl2MDIyX2dldF9jaGlwX2lkLAotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkuZ2V0X3JlZ2lzdGVyCQk9IG10OXYwMjJfZ2V0X3JlZ2lzdGVyLAotCS5zZXRfcmVnaXN0ZXIJCT0gbXQ5djAyMl9zZXRfcmVnaXN0ZXIsCi0jZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBtdDl2MDIyX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CisJdW5zaWduZWQgbG9uZyByYW5nZTsKIAlpbnQgZGF0YTsKIAorCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKCZtdDl2MDIyX29wcywgY3RybC0+aWQpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfVkZMSVA6CiAJCWRhdGEgPSByZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfUkVBRF9NT0RFKTsKQEAgLTU0MSwxOSArNTc1LDM1IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAhIShkYXRhICYgMHgyKTsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlkYXRhID0gcmVnX3JlYWQoY2xpZW50LCBNVDlWMDIyX0FOQUxPR19HQUlOKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwkJcmFuZ2UgPSBxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtOworCQljdHJsLT52YWx1ZSA9ICgoZGF0YSAtIDE2KSAqIHJhbmdlICsgMjQpIC8gNDggKyBxY3RybC0+bWluaW11bTsKKworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlkYXRhID0gcmVnX3JlYWQoY2xpZW50LCBNVDlWMDIyX1RPVEFMX1NIVVRURVJfV0lEVEgpOworCQlpZiAoZGF0YSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCQlyYW5nZSA9IHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW07CisJCWN0cmwtPnZhbHVlID0gKChkYXRhIC0gMSkgKiByYW5nZSArIDIzOSkgLyA0NzkgKyBxY3RybC0+bWluaW11bTsKKworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBtdDl2MDIyX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCWludCBkYXRhOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CiAKIAlxY3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybCgmbXQ5djAyMl9vcHMsIGN0cmwtPmlkKTsKLQogCWlmICghcWN0cmwpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01ODAsMTIgKzYzMCw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZWxzZSB7CiAJCQl1bnNpZ25lZCBsb25nIHJhbmdlID0gcWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bTsKLQkJCS8qIERhdGFzaGVldCBzYXlzIDE2IHRvIDY0LiBhdXRvZ2FpbiBvbmx5IHdvcmtzIHByb3Blcmx5Ci0JCQkgKiBhZnRlciBzZXR0aW5nIGdhaW4gdG8gbWF4aW11bSAxNC4gTGFyZ2VyIHZhbHVlcwotCQkJICogcHJvZHVjZSAid2hpdGUgZmx5IiBub2lzZSBlZmZlY3QuIE9uIHRoZSB3aG9sZSwKLQkJCSAqIG1hbnVhbGx5IHNldHRpbmcgYW5hbG9nIGdhaW4gZG9lcyBubyBnb29kLiAqLworCQkJLyogVmFsaWQgdmFsdWVzIDE2IHRvIDY0LCAzMiB0byA2NCBtdXN0IGJlIGV2ZW4uICovCiAJCQl1bnNpZ25lZCBsb25nIGdhaW4gPSAoKGN0cmwtPnZhbHVlIC0gcWN0cmwtPm1pbmltdW0pICoKLQkJCQkJICAgICAgMTAgKyByYW5nZSAvIDIpIC8gcmFuZ2UgKyA0OworCQkJCQkgICAgICA0OCArIHJhbmdlIC8gMikgLyByYW5nZSArIDE2OwogCQkJaWYgKGdhaW4gPj0gMzIpCiAJCQkJZ2FpbiAmPSB+MTsKIAkJCS8qIFRoZSB1c2VyIHdhbnRzIHRvIHNldCBnYWluIG1hbnVhbGx5LCBob3BlLCBzaGUKQEAgLTU5NCwxMSArNjQxLDEwIEBACiAJCQlpZiAocmVnX2NsZWFyKGNsaWVudCwgTVQ5VjAyMl9BRUNfQUdDX0VOQUJMRSwgMHgyKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CiAKLQkJCWRldl9pbmZvKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiBmcm9tICVkIHRvICVsdVxuIiwKLQkJCQkgcmVnX3JlYWQoY2xpZW50LCBNVDlWMDIyX0FOQUxPR19HQUlOKSwgZ2Fpbik7CisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldHRpbmcgZ2FpbiBmcm9tICVkIHRvICVsdVxuIiwKKwkJCQlyZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfQU5BTE9HX0dBSU4pLCBnYWluKTsKIAkJCWlmIChyZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX0FOQUxPR19HQUlOLCBnYWluKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlpY2QtPmdhaW4gPSBjdHJsLT52YWx1ZTsKIAkJfQogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgpAQCAtNjE1LDEzICs2NjEsMTIgQEAKIAkJCWlmIChyZWdfY2xlYXIoY2xpZW50LCBNVDlWMDIyX0FFQ19BR0NfRU5BQkxFLCAweDEpIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKIAotCQkJZGV2X2RiZygmaWNkLT5kZXYsICJTaHV0dGVyIHdpZHRoIGZyb20gJWQgdG8gJWx1XG4iLAorCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTaHV0dGVyIHdpZHRoIGZyb20gJWQgdG8gJWx1XG4iLAogCQkJCXJlZ19yZWFkKGNsaWVudCwgTVQ5VjAyMl9UT1RBTF9TSFVUVEVSX1dJRFRIKSwKIAkJCQlzaHV0dGVyKTsKIAkJCWlmIChyZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1RPVEFMX1NIVVRURVJfV0lEVEgsCiAJCQkJICAgICAgc2h1dHRlcikgPCAwKQogCQkJCXJldHVybiAtRUlPOwotCQkJaWNkLT5leHBvc3VyZSA9IGN0cmwtPnZhbHVlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CkBAIC02NDYsMTEgKzY5MSwxMSBAQAogCiAvKiBJbnRlcmZhY2UgYWN0aXZlLCBjYW4gdXNlIGkyYy4gSWYgaXQgZmFpbHMsIGl0IGNhbiBpbmRlZWQgbWVhbiwgdGhhdAogICogdGhpcyB3YXNuJ3Qgb3VyIGNhcHR1cmUgaW50ZXJmYWNlLCBzbywgd2Ugd2FpdCBmb3IgdGhlIHJpZ2h0IG9uZSAqLwotc3RhdGljIGludCBtdDl2MDIyX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDl2MDIyX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjY1LDcgKzcxMCw3IEBACiAJLyogbXVzdCBiZSAweDEzMTEgb3IgMHgxMzEzICovCiAJaWYgKGRhdGEgIT0gMHgxMzExICYmIGRhdGEgIT0gMHgxMzEzKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWRldl9pbmZvKCZpY2QtPmRldiwgIk5vIE1UOVYwMjIgZGV0ZWN0ZWQsIElEIHJlZ2lzdGVyIDB4JXhcbiIsCisJCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIk5vIE1UOVYwMjIgZm91bmQsIElEIHJlZ2lzdGVyIDB4JXhcbiIsCiAJCQkgZGF0YSk7CiAJCWdvdG8gZWkyYzsKIAl9CkBAIC02NzcsNyArNzIyLDkgQEAKIAkvKiAxNSBjbG9jayBjeWNsZXMgKi8KIAl1ZGVsYXkoMjAwKTsKIAlpZiAocmVnX3JlYWQoY2xpZW50LCBNVDlWMDIyX1JFU0VUKSkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIlJlc2V0dGluZyBNVDlWMDIyIGZhaWxlZCFcbiIpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlJlc2V0dGluZyBNVDlWMDIyIGZhaWxlZCFcbiIpOworCQlpZiAocmV0ID4gMCkKKwkJCXJldCA9IC1FSU87CiAJCWdvdG8gZWkyYzsKIAl9CiAKQEAgLTY5NCw3ICs3NDEsNyBAQAogCX0KIAogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVpc2lzOworCQlnb3RvIGVpMmM7CiAKIAlpY2QtPm51bV9mb3JtYXRzID0gMDsKIApAQCAtNzE2LDQyICs3NjMsNzAgQEAKIAlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfOCkKIAkJaWNkLT5udW1fZm9ybWF0cysrOwogCi0JcmV0ID0gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVpc2lzOworCW10OXYwMjItPmZvdXJjYyA9IGljZC0+Zm9ybWF0cy0+Zm91cmNjOwogCi0JZGV2X2luZm8oJmljZC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlWMDIyIGNoaXAgSUQgJXgsICVzIHNlbnNvclxuIiwKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBhIE1UOVYwMjIgY2hpcCBJRCAleCwgJXMgc2Vuc29yXG4iLAogCQkgZGF0YSwgbXQ5djAyMi0+bW9kZWwgPT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNID8KIAkJICJtb25vY2hyb21lIiA6ICJjb2xvdXIiKTsKIAotCXJldHVybiAwOworCXJldCA9IG10OXYwMjJfaW5pdChjbGllbnQpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXNlIHRoZSBjYW1lcmFcbiIpOwogCi1laXNpczoKIGVpMmM6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgbXQ5djAyMl92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyAleCByZW1vdmVkOiAlcCwgJXBcbiIsIG10OXYwMjItPmNsaWVudC0+YWRkciwKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlZpZGVvIHJlbW92ZWQ6ICVwLCAlcFxuIiwKIAkJaWNkLT5kZXYucGFyZW50LCBpY2QtPnZkZXYpOwotCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOwogCWlmIChpY2wtPmZyZWVfYnVzKQogCQlpY2wtPmZyZWVfYnVzKGljbCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbXQ5djAyMl9zdWJkZXZfY29yZV9vcHMgPSB7CisJLmdfY3RybAkJPSBtdDl2MDIyX2dfY3RybCwKKwkuc19jdHJsCQk9IG10OXYwMjJfc19jdHJsLAorCS5nX2NoaXBfaWRlbnQJPSBtdDl2MDIyX2dfY2hpcF9pZGVudCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIJPSBtdDl2MDIyX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIJPSBtdDl2MDIyX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG10OXYwMjJfc3ViZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JPSBtdDl2MDIyX3Nfc3RyZWFtLAorCS5zX2ZtdAkJPSBtdDl2MDIyX3NfZm10LAorCS5nX2ZtdAkJPSBtdDl2MDIyX2dfZm10LAorCS50cnlfZm10CT0gbXQ5djAyMl90cnlfZm10LAorCS5zX2Nyb3AJCT0gbXQ5djAyMl9zX2Nyb3AsCisJLmdfY3JvcAkJPSBtdDl2MDIyX2dfY3JvcCwKKwkuY3JvcGNhcAk9IG10OXYwMjJfY3JvcGNhcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG10OXYwMjJfc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZtdDl2MDIyX3N1YmRldl9jb3JlX29wcywKKwkudmlkZW8JPSAmbXQ5djAyMl9zdWJkZXZfdmlkZW9fb3BzLAorfTsKKwogc3RhdGljIGludCBtdDl2MDIyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKIHsKIAlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMjsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbDsKIAlpbnQgcmV0OwogCisJaWYgKCFpY2QpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlWMDIyOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAlpZiAoIWljbCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOVYwMjIgZHJpdmVyIG5lZWRzIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc2Nyw0MCArODQyLDQxIEBACiAJaWYgKCFtdDl2MDIyKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXY0bDJfaTJjX3N1YmRldl9pbml0KCZtdDl2MDIyLT5zdWJkZXYsIGNsaWVudCwgJm10OXYwMjJfc3ViZGV2X29wcyk7CisKIAltdDl2MDIyLT5jaGlwX2NvbnRyb2wgPSBNVDlWMDIyX0NISVBfQ09OVFJPTF9ERUZBVUxUOwotCW10OXYwMjItPmNsaWVudCA9IGNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtdDl2MDIyKTsKIAotCWljZCA9ICZtdDl2MDIyLT5pY2Q7Ci0JaWNkLT5vcHMJPSAmbXQ5djAyMl9vcHM7Ci0JaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OwotCWljZC0+eF9taW4JPSAxOwotCWljZC0+eV9taW4JPSA0OwotCWljZC0+eF9jdXJyZW50CT0gMTsKLQlpY2QtPnlfY3VycmVudAk9IDQ7Ci0JaWNkLT53aWR0aF9taW4JPSA0ODsKLQlpY2QtPndpZHRoX21heAk9IDc1MjsKLQlpY2QtPmhlaWdodF9taW4JPSAzMjsKLQlpY2QtPmhlaWdodF9tYXgJPSA0ODA7Ci0JaWNkLT55X3NraXBfdG9wCT0gMTsKLQlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7CisJaWNkLT5vcHMJCT0gJm10OXYwMjJfb3BzOworCS8qCisJICogTVQ5VjAyMiBfcmVhbGx5XyBjb3JydXB0cyB0aGUgZmlyc3QgcmVhZCBvdXQgbGluZS4KKwkgKiBUT0RPOiB2ZXJpZnkgb24gaS5NWDMxCisJICovCisJaWNkLT55X3NraXBfdG9wCQk9IDE7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOwotCWlmIChyZXQpCi0JCWdvdG8gZWlzZHI7CisJbXQ5djAyMi0+cmVjdC5sZWZ0CT0gTVQ5VjAyMl9DT0xVTU5fU0tJUDsKKwltdDl2MDIyLT5yZWN0LnRvcAk9IE1UOVYwMjJfUk9XX1NLSVA7CisJbXQ5djAyMi0+cmVjdC53aWR0aAk9IE1UOVYwMjJfTUFYX1dJRFRIOworCW10OXYwMjItPnJlY3QuaGVpZ2h0CT0gTVQ5VjAyMl9NQVhfSEVJR0hUOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gbXQ5djAyMl92aWRlb19wcm9iZShpY2QsIGNsaWVudCk7CisJaWYgKHJldCkgeworCQlpY2QtPm9wcyA9IE5VTEw7CisJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCQlrZnJlZShtdDl2MDIyKTsKKwl9CiAKLWVpc2RyOgotCWtmcmVlKG10OXYwMjIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5djAyMl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJm10OXYwMjItPmljZCk7CisJaWNkLT5vcHMgPSBOVUxMOworCW10OXYwMjJfdmlkZW9fcmVtb3ZlKGljZCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJY2xpZW50LT5kcml2ZXIgPSBOVUxMOwogCWtmcmVlKG10OXYwMjIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214MV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCmluZGV4IDczNmMzMWQuLjVmMzc5NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CiAKLQkqc2l6ZSA9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodCAqCisJKnNpemUgPSBpY2QtPnVzZXJfd2lkdGggKiBpY2QtPnVzZXJfaGVpZ2h0ICoKIAkJKChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCArIDcpID4+IDMpOwogCiAJaWYgKCEqY291bnQpCkBAIC0xMzUsNyArMTM1LDcgQEAKIAl3aGlsZSAoKnNpemUgKiAqY291bnQgPiBNQVhfVklERU9fTUVNICogMTAyNCAqIDEwMjQpCiAJCSgqY291bnQpLS07CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CiAKIAkvKiBUaGlzIHdhaXRzIHVudGlsIHRoaXMgYnVmZmVyIGlzIG91dCBvZiBkYW5nZXIsIGkuZS4sIHVudGlsIGl0IGlzIG5vCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlzdHJ1Y3QgbXgxX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgxX2J1ZmZlciwgdmIpOwogCWludCByZXQ7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCS8qIEFkZGVkIGxpc3QgaGVhZCBpbml0aWFsaXphdGlvbiBvbiBhbGxvYyAqLwpAQCAtMTc4LDEyICsxNzgsMTIgQEAKIAlidWYtPmlud29yayA9IDE7CiAKIAlpZiAoYnVmLT5mbXQJIT0gaWNkLT5jdXJyZW50X2ZtdCB8fAotCSAgICB2Yi0+d2lkdGgJIT0gaWNkLT53aWR0aCB8fAotCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+aGVpZ2h0IHx8CisJICAgIHZiLT53aWR0aAkhPSBpY2QtPnVzZXJfd2lkdGggfHwKKwkgICAgdmItPmhlaWdodAkhPSBpY2QtPnVzZXJfaGVpZ2h0IHx8CiAJICAgIHZiLT5maWVsZAkhPSBmaWVsZCkgewogCQlidWYtPmZtdAk9IGljZC0+Y3VycmVudF9mbXQ7Ci0JCXZiLT53aWR0aAk9IGljZC0+d2lkdGg7Ci0JCXZiLT5oZWlnaHQJPSBpY2QtPmhlaWdodDsKKwkJdmItPndpZHRoCT0gaWNkLT51c2VyX3dpZHRoOworCQl2Yi0+aGVpZ2h0CT0gaWNkLT51c2VyX2hlaWdodDsKIAkJdmItPmZpZWxkCT0gZmllbGQ7CiAJCXZiLT5zdGF0ZQk9IFZJREVPQlVGX05FRURTX0lOSVQ7CiAJfQpAQCAtMjE2LDEwICsyMTYsMTEgQEAKIHN0YXRpYyBpbnQgbXgxX2NhbWVyYV9zZXR1cF9kbWEoc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldikKIHsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YnVmID0gJnBjZGV2LT5hY3RpdmUtPnZiOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5pY2QtPmRldi5wYXJlbnQ7CiAJaW50IHJldDsKIAogCWlmICh1bmxpa2VseSghcGNkZXYtPmFjdGl2ZSkpIHsKLQkJZGV2X2VycihwY2Rldi0+c29jX2hvc3QuZGV2LCAiRE1BIEVuZCBJUlEgd2l0aCBubyBhY3RpdmUgYnVmZmVyXG4iKTsKKwkJZGV2X2VycihkZXYsICJETUEgRW5kIElSUSB3aXRoIG5vIGFjdGl2ZSBidWZmZXJcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTIyOSw3ICsyMzAsNyBAQAogCQl2YnVmLT5zaXplLCBwY2Rldi0+cmVzLT5zdGFydCArCiAJCUNTSVJYUiwgRE1BX01PREVfUkVBRCk7CiAJaWYgKHVubGlrZWx5KHJldCkpCi0JCWRldl9lcnIocGNkZXYtPnNvY19ob3N0LmRldiwgIkZhaWxlZCB0byBzZXR1cCBETUEgc2cgbGlzdFxuIik7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldHVwIERNQSBzZyBsaXN0XG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNDMsNyArMjQ0LDcgQEAKIAlzdHJ1Y3QgbXgxX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXN0cnVjdCBteDFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBteDFfYnVmZmVyLCB2Yik7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKQEAgLTI3MCwyMiArMjcxLDIzIEBACiAJc3RydWN0IG14MV9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14MV9idWZmZXIsIHZiKTsKICNpZmRlZiBERUJVRwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCXN3aXRjaCAodmItPnN0YXRlKSB7CiAJY2FzZSBWSURFT0JVRl9BQ1RJVkU6Ci0JCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKGFjdGl2ZSlcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2RiZyhkZXYsICIlcyAoYWN0aXZlKVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAljYXNlIFZJREVPQlVGX1FVRVVFRDoKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAocXVldWVkKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzIChxdWV1ZWQpXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWNhc2UgVklERU9CVUZfUFJFUEFSRUQ6Ci0JCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHByZXBhcmVkKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzIChwcmVwYXJlZClcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodW5rbm93bilcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2RiZyhkZXYsICIlcyAodW5rbm93bilcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJfQogI2VuZGlmCkBAIC0zMjUsNiArMzI3LDcgQEAKIHN0YXRpYyB2b2lkIG14MV9jYW1lcmFfZG1hX2lycShpbnQgY2hhbm5lbCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbXgxX2NhbWVyYV9kZXYgKnBjZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2Rldi0+aWNkLT5kZXYucGFyZW50OwogCXN0cnVjdCBteDFfYnVmZmVyICpidWY7CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMzNCwxNCArMzM3LDE0IEBACiAJaW14X2RtYV9kaXNhYmxlKGNoYW5uZWwpOwogCiAJaWYgKHVubGlrZWx5KCFwY2Rldi0+YWN0aXZlKSkgewotCQlkZXZfZXJyKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJETUEgRW5kIElSUSB3aXRoIG5vIGFjdGl2ZSBidWZmZXJcbiIpOworCQlkZXZfZXJyKGRldiwgIkRNQSBFbmQgSVJRIHdpdGggbm8gYWN0aXZlIGJ1ZmZlclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAogCXZiID0gJnBjZGV2LT5hY3RpdmUtPnZiOwogCWJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14MV9idWZmZXIsIHZiKTsKIAlXQVJOX09OKGJ1Zi0+aW53b3JrIHx8IGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpOwotCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCW14MV9jYW1lcmFfd2FrZXVwKHBjZGV2LCB2YiwgYnVmKTsKQEAgLTM2Miw3ICszNjUsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBteDFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAKLQl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQocSwgJm14MV92aWRlb2J1Zl9vcHMsIGljaS0+ZGV2LAorCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmbXgxX3ZpZGVvYnVmX29wcywgaWNkLT5kZXYucGFyZW50LAogCQkJCQkmcGNkZXYtPmxvY2ssCiAJCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCQkJVjRMMl9GSUVMRF9OT05FLApAQCAtMzgxLDggKzM4NCw5IEBACiAJICogdGhleSBnZXQgYSBuaWNlIE9vcHMgKi8KIAlkaXYgPSAobGNkY2xrICsgMiAqIG1jbGsgLSAxKSAvICgyICogbWNsaykgLSAxOwogCi0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiU3lzdGVtIGNsb2NrICVsdWtIeiwgdGFyZ2V0IGZyZXEgJWRrSHosICIKLQkJImRpdmlzb3IgJWx1XG4iLCBsY2RjbGsgLyAxMDAwLCBtY2xrIC8gMTAwMCwgZGl2KTsKKwlkZXZfZGJnKHBjZGV2LT5pY2QtPmRldi5wYXJlbnQsCisJCSJTeXN0ZW0gY2xvY2sgJWx1a0h6LCB0YXJnZXQgZnJlcSAlZGtIeiwgZGl2aXNvciAlbHVcbiIsCisJCWxjZGNsayAvIDEwMDAsIG1jbGsgLyAxMDAwLCBkaXYpOwogCiAJcmV0dXJuIGRpdjsKIH0KQEAgLTM5MSw3ICszOTUsNyBAQAogewogCXVuc2lnbmVkIGludCBjc2ljcjEgPSBDU0lDUjFfRU47CiAKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJBY3RpdmF0ZSBkZXZpY2VcbiIpOworCWRldl9kYmcocGNkZXYtPmljZC0+ZGV2LnBhcmVudCwgIkFjdGl2YXRlIGRldmljZVxuIik7CiAKIAljbGtfZW5hYmxlKHBjZGV2LT5jbGspOwogCkBAIC00MDcsNyArNDExLDcgQEAKIAogc3RhdGljIHZvaWQgbXgxX2NhbWVyYV9kZWFjdGl2YXRlKHN0cnVjdCBteDFfY2FtZXJhX2RldiAqcGNkZXYpCiB7Ci0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiRGVhY3RpdmF0ZSBkZXZpY2VcbiIpOworCWRldl9kYmcocGNkZXYtPmljZC0+ZGV2LnBhcmVudCwgIkRlYWN0aXZhdGUgZGV2aWNlXG4iKTsKIAogCS8qIERpc2FibGUgYWxsIENTSSBpbnRlcmZhY2UgKi8KIAlfX3Jhd193cml0ZWwoMHgwMCwgcGNkZXYtPmJhc2UgKyBDU0lDUjEpOwpAQCAtNDI4LDE0ICs0MzIsMTIgQEAKIAkJZ290byBlYnVzeTsKIAl9CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJNWDEgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiTVgxIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAogCQkgaWNkLT5kZXZudW0pOwogCiAJbXgxX2NhbWVyYV9hY3RpdmF0ZShwY2Rldik7Ci0JcmV0ID0gaWNkLT5vcHMtPmluaXQoaWNkKTsKIAotCWlmICghcmV0KQotCQlwY2Rldi0+aWNkID0gaWNkOworCXBjZGV2LT5pY2QgPSBpY2Q7CiAKIGVidXN5OgogCXJldHVybiByZXQ7CkBAIC00NTYsMjAgKzQ1OCwyMCBAQAogCS8qIFN0b3AgRE1BIGVuZ2luZSAqLwogCWlteF9kbWFfZGlzYWJsZShwY2Rldi0+ZG1hX2NoYW4pOwogCi0JZGV2X2luZm8oJmljZC0+ZGV2LCAiTVgxIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiTVgxIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKLQlpY2QtPm9wcy0+cmVsZWFzZShpY2QpOwotCiAJbXgxX2NhbWVyYV9kZWFjdGl2YXRlKHBjZGV2KTsKIAogCXBjZGV2LT5pY2QgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IG14MV9jYW1lcmFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewotCXJldHVybiBpY2QtPm9wcy0+c2V0X2Nyb3AoaWNkLCByZWN0KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19jcm9wLCBhKTsKIH0KIAogc3RhdGljIGludCBteDFfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCkKQEAgLTUzOSwxOCArNTQxLDE5IEBACiBzdGF0aWMgaW50IG14MV9jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCWludCByZXQ7CiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CiAJaWYgKCF4bGF0ZSkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeC0+cGl4ZWxmb3JtYXQpOworCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLAorCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIGYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgZik7CiAJaWYgKCFyZXQpIHsKIAkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKIAkJaWNkLT5jdXJyZW50X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKQEAgLTU2MiwxMCArNTY1LDExIEBACiBzdGF0aWMgaW50IG14MV9jYW1lcmFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAkvKiBUT0RPOiBsaW1pdCB0byBteDEgaGFyZHdhcmUgY2FwYWJpbGl0aWVzICovCiAKIAkvKiBsaW1pdCB0byBzZW5zb3IgY2FwYWJpbGl0aWVzICovCi0JcmV0dXJuIGljZC0+b3BzLT50cnlfZm10KGljZCwgZik7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfZm10LCBmKTsKIH0KIAogc3RhdGljIGludCBteDFfY2FtZXJhX3JlcWJ1ZnMoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmLApAQCAtNzM3LDcgKzc0MSw3IEBACiAJcGNkZXYtPnNvY19ob3N0LmRydl9uYW1lCT0gRFJJVkVSX05BTUU7CiAJcGNkZXYtPnNvY19ob3N0Lm9wcwkJPSAmbXgxX3NvY19jYW1lcmFfaG9zdF9vcHM7CiAJcGNkZXYtPnNvY19ob3N0LnByaXYJCT0gcGNkZXY7Ci0JcGNkZXYtPnNvY19ob3N0LmRldgkJPSAmcGRldi0+ZGV2OworCXBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXYJPSAmcGRldi0+ZGV2OwogCXBjZGV2LT5zb2NfaG9zdC5ucgkJPSBwZGV2LT5pZDsKIAllcnIgPSBzb2NfY2FtZXJhX2hvc3RfcmVnaXN0ZXIoJnBjZGV2LT5zb2NfaG9zdCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKaW5kZXggOTc3MGNiNy4uZGZmMmU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJLyoKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWlmICghbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqc2l6ZSA9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodCAqIGJwcDsKKwkqc2l6ZSA9IGljZC0+dXNlcl93aWR0aCAqIGljZC0+dXNlcl9oZWlnaHQgKiBicHA7CiAKIAlpZiAoISpjb3VudCkKIAkJKmNvdW50ID0gMzI7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CiAJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CiAJLyogY3VycmVudF9mbXQgX211c3RfIGFsd2F5cyBiZSBzZXQgKi8KLQlzaXplX3QgbmV3X3NpemUgPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKgorCXNpemVfdCBuZXdfc2l6ZSA9IGljZC0+dXNlcl93aWR0aCAqIGljZC0+dXNlcl9oZWlnaHQgKgogCQkoKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMyk7CiAJaW50IHJldDsKIApAQCAtMjUxLDEyICsyNTEsMTIgQEAKIAkgKi8KIAogCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8Ci0JICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8Ci0JICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPndpZHRoCSE9IGljZC0+dXNlcl93aWR0aCB8fAorCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+dXNlcl9oZWlnaHQgfHwKIAkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CiAJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKLQkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKLQkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+d2lkdGgJPSBpY2QtPnVzZXJfd2lkdGg7CisJCXZiLT5oZWlnaHQJPSBpY2QtPnVzZXJfaGVpZ2h0OwogCQl2Yi0+ZmllbGQJPSBmaWVsZDsKIAkJaWYgKHZiLT5zdGF0ZSAhPSBWSURFT0JVRl9ORUVEU19JTklUKQogCQkJZnJlZV9idWZmZXIodnEsIGJ1Zik7CkBAIC0zNTQsOSArMzU0LDkgQEAKIAogCS8qIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygb25lIHNnLWVsZW1lbnQgKi8KIAl2aWRlby0+b3V0X3BpeGVsX2ZtdAk9IGZvdXJjY190b19pcHVfcGl4KGRhdGFfZm10LT5mb3VyY2MpOwotCXZpZGVvLT5vdXRfd2lkdGgJPSBpY2QtPndpZHRoOwotCXZpZGVvLT5vdXRfaGVpZ2h0CT0gaWNkLT5oZWlnaHQ7Ci0JdmlkZW8tPm91dF9zdHJpZGUJPSBpY2QtPndpZHRoOworCXZpZGVvLT5vdXRfd2lkdGgJPSBpY2QtPnVzZXJfd2lkdGg7CisJdmlkZW8tPm91dF9oZWlnaHQJPSBpY2QtPnVzZXJfaGVpZ2h0OworCXZpZGVvLT5vdXRfc3RyaWRlCT0gaWNkLT51c2VyX3dpZHRoOwogCiAjaWZkZWYgREVCVUcKIAkvKiBoZWxwcyB0byBzZWUgd2hhdCBETUEgYWN0dWFsbHkgaGFzIHdyaXR0ZW4gKi8KQEAgLTM3NSw3ICszNzUsOCBAQAogCXNwaW5fdW5sb2NrX2lycSgmbXgzX2NhbS0+bG9jayk7CiAKIAljb29raWUgPSB0eGQtPnR4X3N1Ym1pdCh0eGQpOwotCWRldl9kYmcoJmljZC0+ZGV2LCAiU3VibWl0dGVkIGNvb2tpZSAlZCBETUEgMHglMDh4XG4iLCBjb29raWUsIHNnX2RtYV9hZGRyZXNzKCZidWYtPnNnKSk7CisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJTdWJtaXR0ZWQgY29va2llICVkIERNQSAweCUwOHhcbiIsCisJCWNvb2tpZSwgc2dfZG1hX2FkZHJlc3MoJmJ1Zi0+c2cpKTsKIAogCXNwaW5fbG9ja19pcnEoJm14M19jYW0tPmxvY2spOwogCkBAIC00MDIsOSArNDAzLDEwIEBACiAJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiUmVsZWFzZSVzIERNQSAweCUwOHggKHN0YXRlICVkKSwgcXVldWUgJXNlbXB0eVxuIiwKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwKKwkJIlJlbGVhc2UlcyBETUEgMHglMDh4IChzdGF0ZSAlZCksIHF1ZXVlICVzZW1wdHlcbiIsCiAJCW14M19jYW0tPmFjdGl2ZSA9PSBidWYgPyAiIGFjdGl2ZSIgOiAiIiwgc2dfZG1hX2FkZHJlc3MoJmJ1Zi0+c2cpLAotCQkgdmItPnN0YXRlLCBsaXN0X2VtcHR5KCZ2Yi0+cXVldWUpID8gIiIgOiAibm90ICIpOworCQl2Yi0+c3RhdGUsIGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkgPyAiIiA6ICJub3QgIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKIAlpZiAoKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9BQ1RJVkUgfHwgdmItPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgJiYKIAkgICAgIWxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpIHsKQEAgLTQzMSw3ICs0MzMsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKIAotCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmbXgzX3ZpZGVvYnVmX29wcywgaWNpLT5kZXYsCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsICZteDNfdmlkZW9idWZfb3BzLCBpY2QtPmRldi5wYXJlbnQsCiAJCQkJICAgICAgICZteDNfY2FtLT5sb2NrLAogCQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCiAJCQkJICAgICAgIFY0TDJfRklFTERfTk9ORSwKQEAgLTQ4NCw3ICs0ODYsNyBAQAogCiAJY2xrX2VuYWJsZShteDNfY2FtLT5jbGspOwogCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShteDNfY2FtLT5jbGssIG14M19jYW0tPm1jbGspOwotCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0IFNFTlNfQ09ORiB0byAleCwgcmF0ZSAlbGRcbiIsIGNvbmYsIHJhdGUpOworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiU2V0IFNFTlNfQ09ORiB0byAleCwgcmF0ZSAlbGRcbiIsIGNvbmYsIHJhdGUpOwogCWlmIChyYXRlKQogCQljbGtfc2V0X3JhdGUobXgzX2NhbS0+Y2xrLCByYXRlKTsKIH0KQEAgLTQ5NCwyOSArNDk2LDE4IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OwotCWludCByZXQ7CiAKLQlpZiAobXgzX2NhbS0+aWNkKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBlYnVzeTsKLQl9CisJaWYgKG14M19jYW0tPmljZCkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCW14M19jYW1lcmFfYWN0aXZhdGUobXgzX2NhbSwgaWNkKTsKLQlyZXQgPSBpY2QtPm9wcy0+aW5pdChpY2QpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWNsa19kaXNhYmxlKG14M19jYW0tPmNsayk7Ci0JCWdvdG8gZWluaXQ7Ci0JfQogCiAJbXgzX2NhbS0+aWNkID0gaWNkOwogCi1laW5pdDoKLWVidXN5OgotCWlmICghcmV0KQotCQlkZXZfaW5mbygmaWNkLT5kZXYsICJNWDMgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCi0JCQkgaWNkLT5kZXZudW0pOworCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwgIk1YMyBDYW1lcmEgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKKwkJIGljZC0+ZGV2bnVtKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KQEAgLTUzMywxMyArNTI0LDExIEBACiAJCSppY2hhbiA9IE5VTEw7CiAJfQogCi0JaWNkLT5vcHMtPnJlbGVhc2UoaWNkKTsKLQogCWNsa19kaXNhYmxlKG14M19jYW0tPmNsayk7CiAKIAlteDNfY2FtLT5pY2QgPSBOVUxMOwogCi0JZGV2X2luZm8oJmljZC0+ZGV2LCAiTVgzIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiTVgzIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiB9CiAKQEAgLTU1MSw3ICs1NDAsOCBAQAogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19jYW0tPmlkbWFjX2NoYW5uZWxbMF07CiAKIAkvKiBEbyBidWZmZXJzIGhhdmUgdG8gYmUgcmUtYWxsb2NhdGVkIG9yIGNoYW5uZWwgcmUtY29uZmlndXJlZD8gKi8KLQlyZXR1cm4gaWNoYW4gJiYgcmVjdC0+d2lkdGggKiByZWN0LT5oZWlnaHQgPiBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQ7CisJcmV0dXJuIGljaGFuICYmIHJlY3QtPndpZHRoICogcmVjdC0+aGVpZ2h0ID4KKwkJaWNkLT51c2VyX3dpZHRoICogaWNkLT51c2VyX2hlaWdodDsKIH0KIAogc3RhdGljIGludCB0ZXN0X3BsYXRmb3JtX3BhcmFtKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSwKQEAgLTU5OSw4ICs1ODksOCBAQAogCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9pbmZvKG14M19jYW0tPnNvY19ob3N0LmRldiwgIlVuc3VwcG9ydGVkIGJ1cyB3aWR0aCAlZFxuIiwKLQkJCSBidXN3aWR0aCk7CisJCWRldl93YXJuKG14M19jYW0tPnNvY19ob3N0LnY0bDJfZGV2LmRldiwKKwkJCSAiVW5zdXBwb3J0ZWQgYnVzIHdpZHRoICVkXG4iLCBidXN3aWR0aCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjE1LDcgKzYwNSw3IEBACiAJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFnczsKIAlpbnQgcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShteDNfY2FtLCBkZXB0aCwgJmJ1c19mbGFncyk7CiAKLQlkZXZfZGJnKGljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLCBkZXB0aCwgcmV0KTsKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgInJlcXVlc3QgYnVzIHdpZHRoICVkIGJpdDogJWRcbiIsIGRlcHRoLCByZXQpOwogCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC02MjQsNyArNjE0LDggQEAKIAogCXJldCA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOwogCWlmIChyZXQgPCAwKQotCQlkZXZfd2FybigmaWNkLT5kZXYsICJGbGFncyBpbmNvbXBhdGlibGU6IGNhbWVyYSAlbHgsIGhvc3QgJWx4XG4iLAorCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsCisJCQkgIkZsYWdzIGluY29tcGF0aWJsZTogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCiAJCQkgY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTYzOCw3ICs2MjksNyBAQAogCWlmICghcnEpCiAJCXJldHVybiBmYWxzZTsKIAotCXBkYXRhID0gcnEtPm14M19jYW0tPnNvY19ob3N0LmRldi0+cGxhdGZvcm1fZGF0YTsKKwlwZGF0YSA9IHJxLT5teDNfY2FtLT5zb2NfaG9zdC52NGwyX2Rldi5kZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlyZXR1cm4gcnEtPmlkID09IGNoYW4tPmNoYW5faWQgJiYKIAkJcGRhdGEtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXY7CkBAIC02OTgsNyArNjg5LDggQEAKIAkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwogCQkJeGxhdGUtPmJ1c3dpZHRoID0gYnVzd2lkdGg7CiAJCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwKKwkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKIAkJCQlteDNfY2FtZXJhX2Zvcm1hdHNbMF0ubmFtZSwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQpAQCAtNzEwLDcgKzcwMiw4IEBACiAJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKIAkJCXhsYXRlLT5idXN3aWR0aCA9IGJ1c3dpZHRoOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoaWNpLT5kZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAorCQkJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsCisJCQkJIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCiAJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCiAJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CiAJCX0KQEAgLTcyMyw3ICs3MTYsNyBAQAogCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CiAJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKIAkJCXhsYXRlKys7Ci0JCQlkZXZfZGJnKGljaS0+ZGV2LAorCQkJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsCiAJCQkJIlByb3ZpZGluZyBmb3JtYXQgJXMgaW4gcGFzcy10aHJvdWdoIG1vZGVcbiIsCiAJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CiAJCX0KQEAgLTczMywxMyArNzI2LDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZV9nZW9tZXRyeShzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0sCi0JCQkgICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpCiB7CiAJdTMyIGN0cmwsIHdpZHRoX2ZpZWxkLCBoZWlnaHRfZmllbGQ7CiAKIAkvKiBTZXR1cCBmcmFtZSBzaXplIC0gdGhpcyBjYW5ub3QgYmUgY2hhbmdlZCBvbi10aGUtZmx5Li4uICovCi0Jd2lkdGhfZmllbGQgPSByZWN0LT53aWR0aCAtIDE7Ci0JaGVpZ2h0X2ZpZWxkID0gcmVjdC0+aGVpZ2h0IC0gMTsKKwl3aWR0aF9maWVsZCA9IHdpZHRoIC0gMTsKKwloZWlnaHRfZmllbGQgPSBoZWlnaHQgLSAxOwogCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgfCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSwgQ1NJX1NFTlNfRlJNX1NJWkUpOwogCiAJY3NpX3JlZ193cml0ZShteDNfY2FtLCB3aWR0aF9maWVsZCA8PCAxNiwgQ1NJX0ZMQVNIX1NUUk9CRV8xKTsKQEAgLTc1MSwxMSArNzQ0LDYgQEAKIAljdHJsID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9PVVRfRlJNX0NUUkwpICYgMHhmZmZmMDAwMDsKIAkvKiBTZW5zb3IgZG9lcyB0aGUgY3JvcHBpbmcgKi8KIAljc2lfcmVnX3dyaXRlKG14M19jYW0sIGN0cmwgfCAwIHwgKDAgPDwgOCksIENTSV9PVVRfRlJNX0NUUkwpOwotCi0JLyoKLQkgKiBObyBuZWVkIHRvIGZyZWUgcmVzb3VyY2VzIGhlcmUgaWYgd2UgZmFpbCwgd2UnbGwgc2VlIGlmIHdlIG5lZWQgdG8KLQkgKiBkbyB0aGlzIG5leHQgdGltZSB3ZSBhcmUgY2FsbGVkCi0JICovCiB9CiAKIHN0YXRpYyBpbnQgYWNxdWlyZV9kbWFfY2hhbm5lbChzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0pCkBAIC03OTIsMjUgKzc4MCw3NCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG14M19jYW1lcmFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKKy8qCisgKiBGSVhNRTogbGVhcm4gdG8gdXNlIHN0cmlkZSAhPSB3aWR0aCwgdGhlbiB3ZSBjYW4ga2VlcCBzdHJpZGUgcHJvcGVybHkgYWxpZ25lZAorICogYW5kIHN1cHBvcnQgYXJiaXRyYXJ5IChldmVuKSB3aWR0aHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJpZGVfYWxpZ24oX19zMzIgKndpZHRoKQogeworCWlmICgoKCp3aWR0aCArIDcpICYgIH43KSA8IDQwOTYpCisJCSp3aWR0aCA9ICgqd2lkdGggKyA3KSAmICB+NzsKKwllbHNlCisJCSp3aWR0aCA9ICp3aWR0aCAmICB+NzsKK30KKworLyoKKyAqIEFzIGxvbmcgYXMgd2UgZG9uJ3QgaW1wbGVtZW50IGhvc3Qtc2lkZSBjcm9wcGluZyBhbmQgc2NhbGluZywgd2UgY2FuIHVzZQorICogZGVmYXVsdCBnX2Nyb3AgYW5kIGNyb3BjYXAgZnJvbSBzb2NfY2FtZXJhLmMKKyAqLworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCA9ICZhLT5jOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRX07CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYuZm10LnBpeDsKKwlpbnQgcmV0OwogCi0JLyoKLQkgKiBXZSBub3cga25vdyBwaXhlbCBmb3JtYXRzIGFuZCBjYW4gZGVjaWRlIHVwb24gRE1BLWNoYW5uZWwocykKLQkgKiBTbyBmYXIgb25seSBkaXJlY3QgY2FtZXJhLXRvLW1lbW9yeSBpcyBzdXBwb3J0ZWQKLQkgKi8KLQlpZiAoY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdGVkKGljZCwgcmVjdCkpIHsKLQkJaW50IHJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LT5sZWZ0LCAmcmVjdC0+d2lkdGgsIDAsIDIsIDQwOTYpOworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC0+dG9wLCAmcmVjdC0+aGVpZ2h0LCAwLCAyLCA0MDk2KTsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2Nyb3AsIGEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogVGhlIGNhcHR1cmUgZGV2aWNlIG1pZ2h0IGhhdmUgY2hhbmdlZCBpdHMgb3V0cHV0ICAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgJmYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBpeC0+d2lkdGggJiA3KSB7CisJCS8qIE91Y2ghIFdlIGNhbiBvbmx5IGhhbmRsZSA4LWJ5dGUgYWxpZ25lZCB3aWR0aC4uLiAqLworCQlzdHJpZGVfYWxpZ24oJnBpeC0+d2lkdGgpOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsICZmKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCByZWN0KTsKKwlpZiAocGl4LT53aWR0aCAhPSBpY2QtPnVzZXJfd2lkdGggfHwgcGl4LT5oZWlnaHQgIT0gaWNkLT51c2VyX2hlaWdodCkgeworCQkvKgorCQkgKiBXZSBub3cga25vdyBwaXhlbCBmb3JtYXRzIGFuZCBjYW4gZGVjaWRlIHVwb24gRE1BLWNoYW5uZWwocykKKwkJICogU28gZmFyIG9ubHkgZGlyZWN0IGNhbWVyYS10by1tZW1vcnkgaXMgc3VwcG9ydGVkCisJCSAqLworCQlpZiAoY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdGVkKGljZCwgcmVjdCkpIHsKKwkJCWludCByZXQgPSBhY3F1aXJlX2RtYV9jaGFubmVsKG14M19jYW0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQogCi0JcmV0dXJuIGljZC0+b3BzLT5zZXRfY3JvcChpY2QsIHJlY3QpOworCQljb25maWd1cmVfZ2VvbWV0cnkobXgzX2NhbSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCX0KKworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiU2Vuc29yIGNyb3BwZWQgJWR4JWRcbiIsCisJCXBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKworCWljZC0+dXNlcl93aWR0aCA9IHBpeC0+d2lkdGg7CisJaWNkLT51c2VyX2hlaWdodCA9IHBpeC0+aGVpZ2h0OworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC04MTgsMjIgKzg1NSwyMSBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwotCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKLQkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKLQkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAotCQkud2lkdGgJPSBwaXgtPndpZHRoLAotCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCi0JfTsKIAlpbnQgcmV0OwogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOwogCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwKKwkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJc3RyaWRlX2FsaWduKCZwaXgtPndpZHRoKTsKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlNldCBmb3JtYXQgJWR4JWRcbiIsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwogCXJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC04NDQsMjEgKzg4MCwyMyBAQAogCSAqIG14Y192NGwyX3NfZm10KCkKIAkgKi8KIAotCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCAmcmVjdCk7CisJY29uZmlndXJlX2dlb21ldHJ5KG14M19jYW0sIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAotCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgZik7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKIAlpZiAoIXJldCkgewogCQlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOwogCQlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OwogCX0KIAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiU2Vuc29yIHNldCAlZHglZFxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBteDNfY2FtZXJhX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwpAQCAtODY3LDcgKzkwNSw3IEBACiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKIAlpZiAocGl4Zm10ICYmICF4bGF0ZSkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODg0LDcgKzkyMiw3IEBACiAJLyogY2FtZXJhIGhhcyB0byBzZWUgaXRzIGZvcm1hdCwgYnV0IHRoZSB1c2VyIHRoZSBvcmlnaW5hbCBvbmUgKi8KIAlwaXgtPnBpeGVsZm9ybWF0ID0geGxhdGUtPmNhbV9mbXQtPmZvdXJjYzsKIAkvKiBsaW1pdCB0byBzZW5zb3IgY2FwYWJpbGl0aWVzICovCi0JcmV0ID0gaWNkLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X2ZtdCwgZik7CiAJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5ob3N0X2ZtdC0+Zm91cmNjOwogCiAJZmllbGQgPSBwaXgtPmZpZWxkOwpAQCAtODkyLDcgKzkzMCw3IEBACiAJaWYgKGZpZWxkID09IFY0TDJfRklFTERfQU5ZKSB7CiAJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJfSBlbHNlIGlmIChmaWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwgZmllbGQpOworCQlkZXZfZXJyKGljZC0+ZGV2LnBhcmVudCwgIkZpZWxkIHR5cGUgJWQgdW5zdXBwb3J0ZWQuXG4iLCBmaWVsZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTMxLDE0ICs5NjksMTUgQEAKIAl1MzIgZHcsIHNlbnNfY29uZjsKIAlpbnQgcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShteDNfY2FtLCBpY2QtPmJ1c3dpZHRoLCAmYnVzX2ZsYWdzKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwogCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOworCQlkZXZfd2FybihkZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkZXZfZGJnKGljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLAorCWRldl9kYmcoZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLAogCQlpY2QtPmJ1c3dpZHRoLCByZXQpOwogCiAJaWYgKHJldCA8IDApCkBAIC05NDcsOSArOTg2LDEwIEBACiAJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOwogCiAJY29tbW9uX2ZsYWdzID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJZGV2X2RiZyhkZXYsICJGbGFncyBjYW06IDB4JWx4IGhvc3Q6IDB4JWx4IGNvbW1vbjogMHglbHhcbiIsCisJCWNhbWVyYV9mbGFncywgYnVzX2ZsYWdzLCBjb21tb25fZmxhZ3MpOwogCWlmICghY29tbW9uX2ZsYWdzKSB7Ci0JCWRldl9kYmcoaWNpLT5kZXYsICJubyBjb21tb24gZmxhZ3M6IGNhbWVyYSAlbHgsIGhvc3QgJWx4XG4iLAotCQkJY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOworCQlkZXZfZGJnKGRldiwgIm5vIGNvbW1vbiBmbGFncyIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEwMDIsOCArMTA0MiwxMSBAQAogCQkJU09DQU1fREFUQVdJRFRIXzQ7CiAKIAlyZXQgPSBpY2QtPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIGNvbW1vbl9mbGFncyk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2RiZyhkZXYsICJjYW1lcmEgc2V0X2J1c19wYXJhbSglbHgpIHJldHVybmVkICVkXG4iLAorCQkJY29tbW9uX2ZsYWdzLCByZXQpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCS8qCiAJICogU28gZmFyIG9ubHkgZ2F0ZWQgY2xvY2sgbW9kZSBpcyBzdXBwb3J0ZWQuIEFkZCBhIGxpbmUKQEAgLTEwNTUsNyArMTA5OCw3IEBACiAKIAljc2lfcmVnX3dyaXRlKG14M19jYW0sIHNlbnNfY29uZiB8IGR3LCBDU0lfU0VOU19DT05GKTsKIAotCWRldl9kYmcoaWNpLT5kZXYsICJTZXQgU0VOU19DT05GIHRvICV4XG4iLCBzZW5zX2NvbmYgfCBkdyk7CisJZGV2X2RiZyhkZXYsICJTZXQgU0VOU19DT05GIHRvICV4XG4iLCBzZW5zX2NvbmYgfCBkdyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjcsOCArMTE3MCw5IEBACiAJSU5JVF9MSVNUX0hFQUQoJm14M19jYW0tPmNhcHR1cmUpOwogCXNwaW5fbG9ja19pbml0KCZteDNfY2FtLT5sb2NrKTsKIAotCWJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFiYXNlKSB7CisJCXByX2VycigiQ291bGRuJ3QgbWFwICV4QCV4XG4iLCByZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+c3RhcnQpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVpb3JlbWFwOwogCX0KQEAgLTExMzksNyArMTE4Myw3IEBACiAJc29jX2hvc3QtPmRydl9uYW1lCT0gTVgzX0NBTV9EUlZfTkFNRTsKIAlzb2NfaG9zdC0+b3BzCQk9ICZteDNfc29jX2NhbWVyYV9ob3N0X29wczsKIAlzb2NfaG9zdC0+cHJpdgkJPSBteDNfY2FtOwotCXNvY19ob3N0LT5kZXYJCT0gJnBkZXYtPmRldjsKKwlzb2NfaG9zdC0+djRsMl9kZXYuZGV2CT0gJnBkZXYtPmRldjsKIAlzb2NfaG9zdC0+bnIJCT0gcGRldi0+aWQ7CiAKIAllcnIgPSBzb2NfY2FtZXJhX2hvc3RfcmVnaXN0ZXIoc29jX2hvc3QpOwpAQCAtMTIxNSwzICsxMjU5LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiaS5NWDN4IFNvQyBDYW1lcmEgSG9zdCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8bGdAZGVueC5kZT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBNWDNfQ0FNX0RSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCmluZGV4IDM1ODkwZTguLjM0NTQwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwpAQCAtMTg2LDE5ICsxODYsMTkgQEAKIAl9CiAKIAlteGItPnNhYTcxMTFhID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJm14Yi0+aTJjX2FkYXB0ZXIsCi0JCQkic2FhNzExNSIsICJzYWE3MTExIiwgSTJDX1NBQTcxMTFBKTsKKwkJCSJzYWE3MTE1IiwgInNhYTcxMTEiLCBJMkNfU0FBNzExMUEsIE5VTEwpOwogCW14Yi0+dGVhNjQyMF8xID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJm14Yi0+aTJjX2FkYXB0ZXIsCi0JCQkidGVhNjQyMCIsICJ0ZWE2NDIwIiwgSTJDX1RFQTY0MjBfMSk7CisJCQkidGVhNjQyMCIsICJ0ZWE2NDIwIiwgSTJDX1RFQTY0MjBfMSwgTlVMTCk7CiAJbXhiLT50ZWE2NDIwXzIgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwKLQkJCSJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8yKTsKKwkJCSJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8yLCBOVUxMKTsKIAlteGItPnRlYTY0MTVjID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJm14Yi0+aTJjX2FkYXB0ZXIsCi0JCQkidGVhNjQxNWMiLCAidGVhNjQxNWMiLCBJMkNfVEVBNjQxNUMpOworCQkJInRlYTY0MTVjIiwgInRlYTY0MTVjIiwgSTJDX1RFQTY0MTVDLCBOVUxMKTsKIAlteGItPnRkYTk4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwKLQkJCSJ0ZGE5ODQwIiwgInRkYTk4NDAiLCBJMkNfVERBOTg0MCk7CisJCQkidGRhOTg0MCIsICJ0ZGE5ODQwIiwgSTJDX1REQTk4NDAsIE5VTEwpOwogCW14Yi0+dHVuZXIgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwKLQkJCSJ0dW5lciIsICJ0dW5lciIsIEkyQ19UVU5FUik7CisJCQkidHVuZXIiLCAidHVuZXIiLCBJMkNfVFVORVIsIE5VTEwpOwogCWlmICh2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwKLQkJCSJzYWE1MjQ2YSIsICJzYWE1MjQ2YSIsIEkyQ19TQUE1MjQ2QSkpIHsKKwkJCSJzYWE1MjQ2YSIsICJzYWE1MjQ2YSIsIEkyQ19TQUE1MjQ2QSwgTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAibXhiOiBmb3VuZCB0ZWxldGV4dCBkZWNvZGVyXG4iKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCmluZGV4IDBiY2UyNTUuLmVjY2I0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KICNpbmNsdWRlIDxtZWRpYS9vdjc3MnguaD4KIApAQCAtMzgyLDExICszODIsMTAgQEAKIH07CiAKIHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IHsKLQljaGFyICAgICAgICAgICAgICAgICAgICAgKm5hbWU7Ci0JX191MzIgICAgICAgICAgICAgICAgICAgICBmb3VyY2M7Ci0JdTggICAgICAgICAgICAgICAgICAgICAgICBkc3AzOwotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgY29tMzsKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgIGNvbTc7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmZvcm1hdDsKKwl1OCBkc3AzOworCXU4IGNvbTM7CisJdTggY29tNzsKIH07CiAKIHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgewpAQCAtMzk4LDE0ICszOTcsMTUgQEAKIH07CiAKIHN0cnVjdCBvdjc3MnhfcHJpdiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgICAgICAgIHN1YmRldjsKIAlzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvICAgICAgICAqaW5mbzsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAgICAgICAgICAqY2xpZW50OwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAgICAgICAgICBpY2Q7CiAJY29uc3Qgc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgKmZtdDsKIAljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplICAgICAqd2luOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgZmxhZ192ZmxpcDoxOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICBmbGFnX2hmbGlwOjE7CisJdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICAgIGZsYWdfdmZsaXA6MTsKKwl1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgZmxhZ19oZmxpcDoxOworCS8qIGJhbmRfZmlsdGVyID0gQ09NOFs1XSA/IDI1NiAtIEJEQkFTRSA6IDAgKi8KKwl1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgYmFuZF9maWx0ZXI7CiB9OwogCiAjZGVmaW5lIEVORE1BUktFUiB7IDB4ZmYsIDB4ZmYgfQpAQCAtNDgxLDQzICs0ODEsNDMgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IG92NzcyeF9jZm10c1tdID0gewogCXsKLQkJU0VURk9VUkNDKFlVWVYpLAorCQkuZm9ybWF0ID0gJm92NzcyeF9mbXRfbGlzdHNbMF0sCiAJCS5kc3AzICAgPSAweDAsCiAJCS5jb20zICAgPSBTV0FQX1lVViwKIAkJLmNvbTcgICA9IE9GTVRfWVVWLAogCX0sCiAJewotCQlTRVRGT1VSQ0MoWVZZVSksCisJCS5mb3JtYXQgPSAmb3Y3NzJ4X2ZtdF9saXN0c1sxXSwKIAkJLmRzcDMgICA9IFVWX09OLAogCQkuY29tMyAgID0gU1dBUF9ZVVYsCiAJCS5jb203ICAgPSBPRk1UX1lVViwKIAl9LAogCXsKLQkJU0VURk9VUkNDKFVZVlkpLAorCQkuZm9ybWF0ID0gJm92NzcyeF9mbXRfbGlzdHNbMl0sCiAJCS5kc3AzICAgPSAweDAsCiAJCS5jb20zICAgPSAweDAsCiAJCS5jb203ICAgPSBPRk1UX1lVViwKIAl9LAogCXsKLQkJU0VURk9VUkNDKFJHQjU1NSksCisJCS5mb3JtYXQgPSAmb3Y3NzJ4X2ZtdF9saXN0c1szXSwKIAkJLmRzcDMgICA9IDB4MCwKIAkJLmNvbTMgICA9IFNXQVBfUkdCLAogCQkuY29tNyAgID0gRk1UX1JHQjU1NSB8IE9GTVRfUkdCLAogCX0sCiAJewotCQlTRVRGT1VSQ0MoUkdCNTU1WCksCisJCS5mb3JtYXQgPSAmb3Y3NzJ4X2ZtdF9saXN0c1s0XSwKIAkJLmRzcDMgICA9IDB4MCwKIAkJLmNvbTMgICA9IDB4MCwKIAkJLmNvbTcgICA9IEZNVF9SR0I1NTUgfCBPRk1UX1JHQiwKIAl9LAogCXsKLQkJU0VURk9VUkNDKFJHQjU2NSksCisJCS5mb3JtYXQgPSAmb3Y3NzJ4X2ZtdF9saXN0c1s1XSwKIAkJLmRzcDMgICA9IDB4MCwKIAkJLmNvbTMgICA9IFNXQVBfUkdCLAogCQkuY29tNyAgID0gRk1UX1JHQjU2NSB8IE9GTVRfUkdCLAogCX0sCiAJewotCQlTRVRGT1VSQ0MoUkdCNTY1WCksCisJCS5mb3JtYXQgPSAmb3Y3NzJ4X2ZtdF9saXN0c1s2XSwKIAkJLmRzcDMgICA9IDB4MCwKIAkJLmNvbTMgICA9IDB4MCwKIAkJLmNvbTcgICA9IEZNVF9SR0I1NjUgfCBPRk1UX1JHQiwKQEAgLTU3MCw2ICs1NzAsMTUgQEAKIAkJLnN0ZXAJCT0gMSwKIAkJLmRlZmF1bHRfdmFsdWUJPSAwLAogCX0sCisJeworCQkuaWQJCT0gVjRMMl9DSURfQkFORF9TVE9QX0ZJTFRFUiwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUJCT0gIkJhbmQtc3RvcCBmaWx0ZXIiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMjU2LAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwKIH07CiAKIApAQCAtNTc3LDYgKzU4NiwxMiBAQAogICogZ2VuZXJhbCBmdW5jdGlvbgogICovCiAKK3N0YXRpYyBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnRvX292NzcyeChjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBjb250YWluZXJfb2YoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIHN0cnVjdCBvdjc3MnhfcHJpdiwKKwkJCSAgICBzdWJkZXYpOworfQorCiBzdGF0aWMgaW50IG92NzcyeF93cml0ZV9hcnJheShzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAgKmNsaWVudCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCAqdmFscykKIHsKQEAgLTYxNyw1OCArNjMyLDI5IEBACiAgKiBzb2NfY2FtZXJhX29wcyBmdW5jdGlvbgogICovCiAKLXN0YXRpYyBpbnQgb3Y3NzJ4X2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG92NzcyeF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CiAKLQlpZiAocHJpdi0+aW5mby0+bGluay5wb3dlcikgewotCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnBvd2VyKCZwcml2LT5jbGllbnQtPmRldiwgMSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwlpZiAoIWVuYWJsZSkgeworCQlvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIFNPRlRfU0xFRVBfTU9ERSk7CisJCXJldHVybiAwOwogCX0KIAotCWlmIChwcml2LT5pbmZvLT5saW5rLnJlc2V0KQotCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnJlc2V0KCZwcml2LT5jbGllbnQtPmRldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG92NzcyeF9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChwcml2LT5pbmZvLT5saW5rLnBvd2VyKQotCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnBvd2VyKCZwcml2LT5jbGllbnQtPmRldiwgMCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG92NzcyeF9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKLQogCWlmICghcHJpdi0+d2luIHx8ICFwcml2LT5mbXQpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJub3JtIG9yIHdpbiBzZWxlY3QgZXJyb3JcbiIpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm5vcm0gb3Igd2luIHNlbGVjdCBlcnJvclxuIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCi0Jb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMiwgU09GVF9TTEVFUF9NT0RFLCAwKTsKKwlvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIDApOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsCi0JCSAiZm9ybWF0ICVzLCB3aW4gJXNcbiIsIHByaXYtPmZtdC0+bmFtZSwgcHJpdi0+d2luLT5uYW1lKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZvcm1hdCAlcywgd2luICVzXG4iLAorCQlwcml2LT5mbXQtPmZvcm1hdC0+bmFtZSwgcHJpdi0+d2luLT5uYW1lKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NzcyeF9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwotCW92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIENPTTIsIFNPRlRfU0xFRVBfTU9ERSwgU09GVF9TTEVFUF9NT0RFKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBvdjc3Mnhfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQl1bnNpZ25lZCBsb25nCQkgIGZsYWdzKQogewpAQCAtNjc3LDggKzY2Myw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG92NzcyeF9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9ICZwcml2LT5pbmZvLT5saW5rOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fTUFTVEVSIHwKIAkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8CiAJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBwcml2LT5pbmZvLT5idXN3aWR0aDsKQEAgLTY4NiwxMCArNjczLDEwIEBACiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IG92NzcyeF9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IG92NzcyeF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfVkZMSVA6CkBAIC02OTgsMTQgKzY4NSwxNyBAQAogCWNhc2UgVjRMMl9DSURfSEZMSVA6CiAJCWN0cmwtPnZhbHVlID0gcHJpdi0+ZmxhZ19oZmxpcDsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSOgorCQljdHJsLT52YWx1ZSA9IHByaXYtPmJhbmRfZmlsdGVyOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NzJ4X3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CiAJaW50IHJldCA9IDA7CiAJdTggdmFsOwogCkBAIC03MTUsMjQgKzcwNSw0OCBAQAogCQlwcml2LT5mbGFnX3ZmbGlwID0gY3RybC0+dmFsdWU7CiAJCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX1ZGTElQKQogCQkJdmFsIF49IFZGTElQX0lNRzsKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMywgVkZMSVBfSU1HLCB2YWwpOworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT00zLCBWRkxJUF9JTUcsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSEZMSVA6CiAJCXZhbCA9IGN0cmwtPnZhbHVlID8gSEZMSVBfSU1HIDogMHgwMDsKIAkJcHJpdi0+ZmxhZ19oZmxpcCA9IGN0cmwtPnZhbHVlOwogCQlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR19IRkxJUCkKIAkJCXZhbCBePSBIRkxJUF9JTUc7Ci0JCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIENPTTMsIEhGTElQX0lNRywgdmFsKTsKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwgQ09NMywgSEZMSVBfSU1HLCB2YWwpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVI6CisJCWlmICgodW5zaWduZWQpY3RybC0+dmFsdWUgPiAyNTYpCisJCQljdHJsLT52YWx1ZSA9IDI1NjsKKwkJaWYgKGN0cmwtPnZhbHVlID09IHByaXYtPmJhbmRfZmlsdGVyKQorCQkJYnJlYWs7CisJCWlmICghY3RybC0+dmFsdWUpIHsKKwkJCS8qIFN3aXRjaCB0aGUgZmlsdGVyIG9mZiwgaXQgaXMgb24gbm93ICovCisJCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBCREJBU0UsIDB4ZmYsIDB4ZmYpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwgQ09NOCwKKwkJCQkJCSAgICAgIEJOREZfT05fT0ZGLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFN3aXRjaCB0aGUgZmlsdGVyIG9uLCBzZXQgQUVDIGxvdyBsaW1pdCAqLworCQkJdmFsID0gMjU2IC0gY3RybC0+dmFsdWU7CisJCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT004LAorCQkJCQkgICAgICBCTkRGX09OX09GRiwgQk5ERl9PTl9PRkYpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwgQkRCQVNFLAorCQkJCQkJICAgICAgMHhmZiwgdmFsKTsKKwkJfQorCQlpZiAoIXJldCkKKwkJCXByaXYtPmJhbmRfZmlsdGVyID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NzJ4X2dldF9jaGlwX2lkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgICAqaWQpCitzdGF0aWMgaW50IG92NzcyeF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKIAogCWlkLT5pZGVudCAgICA9IHByaXYtPm1vZGVsOwogCWlkLT5yZXZpc2lvbiA9IDA7CkBAIC03NDEsMTcgKzc1NSwxNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotc3RhdGljIGludCBvdjc3MnhfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBvdjc3MnhfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7Ci0JaW50ICAgICAgICAgICAgICAgICByZXQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCWludCByZXQ7CiAKIAlyZWctPnNpemUgPSAxOwogCWlmIChyZWctPnJlZyA+IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgcmVnLT5yZWcpOworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZy0+cmVnKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNzYwLDIxICs3NzQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdjc3Mnhfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBvdjc3Mnhfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCiAJaWYgKHJlZy0+cmVnID4gMHhmZiB8fAogCSAgICByZWctPnZhbCA+IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCByZWctPnJlZywgcmVnLT52YWwpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLT5yZWcsIHJlZy0+dmFsKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG92NzcyeF93aW5fc2l6ZSoKLW92NzcyeF9zZWxlY3Rfd2luKHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplICpvdjc3Mnhfc2VsZWN0X3dpbih1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCiB7CiAJX191MzIgZGlmZjsKIAljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplICp3aW47CkBAIC03OTMsOSArODA2LDEwIEBACiAJcmV0dXJuIHdpbjsKIH0KIAotc3RhdGljIGludCBvdjc3Mnhfc2V0X3BhcmFtcyhzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKLQkJCSAgICAgdTMyIHBpeGZtdCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9wYXJhbXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgdTMyICp3aWR0aCwgdTMyICpoZWlnaHQsIHUzMiBwaXhmbXQpCiB7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAJdTggIHZhbDsKIAlpbnQgaTsKQEAgLTgwNSw3ICs4MTksNyBAQAogCSAqLwogCXByaXYtPmZtdCA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X2NmbXRzKTsgaSsrKSB7Ci0JCWlmIChwaXhmbXQgPT0gb3Y3NzJ4X2NmbXRzW2ldLmZvdXJjYykgeworCQlpZiAocGl4Zm10ID09IG92NzcyeF9jZm10c1tpXS5mb3JtYXQtPmZvdXJjYykgewogCQkJcHJpdi0+Zm10ID0gb3Y3NzJ4X2NmbXRzICsgaTsKIAkJCWJyZWFrOwogCQl9CkBAIC04MTYsMTIgKzgzMCwxMiBAQAogCS8qCiAJICogc2VsZWN0IHdpbgogCSAqLwotCXByaXYtPndpbiA9IG92NzcyeF9zZWxlY3Rfd2luKHdpZHRoLCBoZWlnaHQpOworCXByaXYtPndpbiA9IG92NzcyeF9zZWxlY3Rfd2luKCp3aWR0aCwgKmhlaWdodCk7CiAKIAkvKgogCSAqIHJlc2V0IGhhcmR3YXJlCiAJICovCi0Jb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7CisJb3Y3NzJ4X3Jlc2V0KGNsaWVudCk7CiAKIAkvKgogCSAqIEVkZ2UgQ3RybApAQCAtODM1LDE3ICs4NDksMTcgQEAKIAkJICogUmVtb3ZlIGl0IHdoZW4gbWFudWFsIG1vZGUuCiAJCSAqLwogCi0JCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIERTUEFVVE8sIEVER0VfQUNUUkwsIDB4MDApOworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBEU1BBVVRPLCBFREdFX0FDVFJMLCAweDAwKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCi0JCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsCiAJCQkJICAgICAgRURHRV9UUlNITEQsIEVER0VfVEhSRVNIT0xEX01BU0ssCiAJCQkJICAgICAgcHJpdi0+aW5mby0+ZWRnZWN0cmwudGhyZXNob2xkKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCi0JCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsCiAJCQkJICAgICAgRURHRV9TVFJOR1QsIEVER0VfU1RSRU5HVEhfTUFTSywKIAkJCQkgICAgICBwcml2LT5pbmZvLT5lZGdlY3RybC5zdHJlbmd0aCk7CiAJCWlmIChyZXQgPCAwKQpAQCAtODU3LDEzICs4NzEsMTMgQEAKIAkJICoKIAkJICogc2V0IHVwcGVyIGFuZCBsb3dlciBsaW1pdAogCQkgKi8KLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwKIAkJCQkgICAgICBFREdFX1VQUEVSLCBFREdFX1VQUEVSX01BU0ssCiAJCQkJICAgICAgcHJpdi0+aW5mby0+ZWRnZWN0cmwudXBwZXIpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CiAKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwKIAkJCQkgICAgICBFREdFX0xPV0VSLCBFREdFX0xPV0VSX01BU0ssCiAJCQkJICAgICAgcHJpdi0+aW5mby0+ZWRnZWN0cmwubG93ZXIpOwogCQlpZiAocmV0IDwgMCkKQEAgLTg3Myw3ICs4ODcsNyBAQAogCS8qCiAJICogc2V0IHNpemUgZm9ybWF0CiAJICovCi0JcmV0ID0gb3Y3NzJ4X3dyaXRlX2FycmF5KHByaXYtPmNsaWVudCwgcHJpdi0+d2luLT5yZWdzKTsKKwlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkoY2xpZW50LCBwcml2LT53aW4tPnJlZ3MpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCkBAIC04ODIsNyArODk2LDcgQEAKIAkgKi8KIAl2YWwgPSBwcml2LT5mbXQtPmRzcDM7CiAJaWYgKHZhbCkgewotCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LAogCQkJCSAgICAgIERTUF9DVFJMMywgVVZfTUFTSywgdmFsKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwpAQCAtOTAxLDcgKzkxNSw3IEBACiAJaWYgKHByaXYtPmZsYWdfaGZsaXApCiAJCXZhbCBePSBIRkxJUF9JTUc7CiAKLQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsCiAJCQkgICAgICBDT00zLCBTV0FQX01BU0sgfCBJTUdfTUFTSywgdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKQEAgLTkxMCw0NyArOTI0LDk5IEBACiAJICogc2V0IENPTTcKIAkgKi8KIAl2YWwgPSBwcml2LT53aW4tPmNvbTdfYml0IHwgcHJpdi0+Zm10LT5jb203OwotCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwKIAkJCSAgICAgIENPTTcsIChTTENUX01BU0sgfCBGTVRfTUFTSyB8IE9GTVRfTUFTSyksCiAJCQkgICAgICB2YWwpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCisJLyoKKwkgKiBzZXQgQ09NOAorCSAqLworCWlmIChwcml2LT5iYW5kX2ZpbHRlcikgeworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT004LCBCTkRGX09OX09GRiwgMSk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwgQkRCQVNFLAorCQkJCQkgICAgICAweGZmLCAyNTYgLSBwcml2LT5iYW5kX2ZpbHRlcik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKKwl9CisKKwkqd2lkdGggPSBwcml2LT53aW4tPndpZHRoOworCSpoZWlnaHQgPSBwcml2LT53aW4tPmhlaWdodDsKKwogCXJldHVybiByZXQ7CiAKIG92NzcyeF9zZXRfZm10X2Vycm9yOgogCi0Jb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7CisJb3Y3NzJ4X3Jlc2V0KGNsaWVudCk7CiAJcHJpdi0+d2luID0gTlVMTDsKIAlwcml2LT5mbXQgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvdjc3Mnhfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBvdjc3MnhfZ19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCWEtPmMubGVmdAk9IDA7CisJYS0+Yy50b3AJPSAwOworCWEtPmMud2lkdGgJPSBWR0FfV0lEVEg7CisJYS0+Yy5oZWlnaHQJPSBWR0FfSEVJR0hUOworCWEtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCi0JaWYgKCFwcml2LT5mbXQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIG92NzcyeF9zZXRfcGFyYW1zKHByaXYsIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsCi0JCQkJIHByaXYtPmZtdC0+Zm91cmNjKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdjc3Mnhfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBvdjc3MnhfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlhLT5ib3VuZHMubGVmdAkJCT0gMDsKKwlhLT5ib3VuZHMudG9wCQkJPSAwOworCWEtPmJvdW5kcy53aWR0aAkJCT0gVkdBX1dJRFRIOworCWEtPmJvdW5kcy5oZWlnaHQJCT0gVkdBX0hFSUdIVDsKKwlhLT5kZWZyZWN0CQkJPSBhLT5ib3VuZHM7CisJYS0+dHlwZQkJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlhLT5waXhlbGFzcGVjdC5udW1lcmF0b3IJPSAxOworCWEtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yCT0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzcyeF9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCi0JcmV0dXJuIG92NzcyeF9zZXRfcGFyYW1zKHByaXYsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0LAorCWlmICghcHJpdi0+d2luIHx8ICFwcml2LT5mbXQpIHsKKwkJdTMyIHdpZHRoID0gVkdBX1dJRFRILCBoZWlnaHQgPSBWR0FfSEVJR0hUOworCQlpbnQgcmV0ID0gb3Y3NzJ4X3NldF9wYXJhbXMoY2xpZW50LCAmd2lkdGgsICZoZWlnaHQsCisJCQkJCSAgICBWNEwyX1BJWF9GTVRfWVVZVik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlwaXgtPndpZHRoCQk9IHByaXYtPndpbi0+d2lkdGg7CisJcGl4LT5oZWlnaHQJCT0gcHJpdi0+d2luLT5oZWlnaHQ7CisJcGl4LT5waXhlbGZvcm1hdAk9IHByaXYtPmZtdC0+Zm9ybWF0LT5mb3VyY2M7CisJcGl4LT5jb2xvcnNwYWNlCQk9IHByaXYtPmZtdC0+Zm9ybWF0LT5jb2xvcnNwYWNlOworCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisKKwlyZXR1cm4gb3Y3NzJ4X3NldF9wYXJhbXMoY2xpZW50LCAmcGl4LT53aWR0aCwgJnBpeC0+aGVpZ2h0LAogCQkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKIH0KIAotc3RhdGljIGludCBvdjc3MnhfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICAgICAgICpmKQorc3RhdGljIGludCBvdjc3MnhfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJY29uc3Qgc3RydWN0IG92NzcyeF93aW5fc2l6ZSAqd2luOwpAQCAtOTY3LDkgKzEwMzMsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdjc3MnhfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG92NzcyeF92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOwogCXU4ICAgICAgICAgICAgICAgICAgcGlkLCB2ZXI7CiAJY29uc3QgY2hhciAgICAgICAgICpkZXZuYW1lOwogCkBAIC05ODYsNyArMTA1Myw3IEBACiAJICovCiAJaWYgKFNPQ0FNX0RBVEFXSURUSF8xMCAhPSBwcml2LT5pbmZvLT5idXN3aWR0aCAmJgogCSAgICBTT0NBTV9EQVRBV0lEVEhfOCAgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGgpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJidXMgd2lkdGggZXJyb3JcbiIpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1cyB3aWR0aCBlcnJvclxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtOTk2LDggKzEwNjMsOCBAQAogCS8qCiAJICogY2hlY2sgYW5kIHNob3cgcHJvZHVjdCBJRCBhbmQgbWFudWZhY3R1cmVyIElECiAJICovCi0JcGlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgUElEKTsKLQl2ZXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBWRVIpOworCXBpZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFBJRCk7CisJdmVyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVkVSKTsKIAogCXN3aXRjaCAoVkVSU0lPTihwaWQsIHZlcikpIHsKIAljYXNlIE9WNzcyMDoKQEAgLTEwMDksNjkgKzEwNzYsNzcgQEAKIAkJcHJpdi0+bW9kZWwgPSBWNEwyX0lERU5UX09WNzcyNTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2VycigmaWNkLT5kZXYsCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJIlByb2R1Y3QgSUQgZXJyb3IgJXg6JXhcbiIsIHBpZCwgdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGV2X2luZm8oJmljZC0+ZGV2LAorCWRldl9pbmZvKCZjbGllbnQtPmRldiwKIAkJICIlcyBQcm9kdWN0IElEICUweDolMHggTWFudWZhY3R1cmVyIElEICV4OiV4XG4iLAogCQkgZGV2bmFtZSwKIAkJIHBpZCwKIAkJIHZlciwKLQkJIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIE1JREgpLAotCQkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgTUlETCkpOworCQkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUlESCksCisJCSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNSURMKSk7CiAKLQlyZXR1cm4gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwotfQotCi1zdGF0aWMgdm9pZCBvdjc3MnhfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIG92NzcyeF9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCQk9IG92NzcyeF92aWRlb19wcm9iZSwKLQkucmVtb3ZlCQkJPSBvdjc3MnhfdmlkZW9fcmVtb3ZlLAotCS5pbml0CQkJPSBvdjc3MnhfaW5pdCwKLQkucmVsZWFzZQkJPSBvdjc3MnhfcmVsZWFzZSwKLQkuc3RhcnRfY2FwdHVyZQkJPSBvdjc3Mnhfc3RhcnRfY2FwdHVyZSwKLQkuc3RvcF9jYXB0dXJlCQk9IG92NzcyeF9zdG9wX2NhcHR1cmUsCi0JLnNldF9jcm9wCQk9IG92NzcyeF9zZXRfY3JvcCwKLQkuc2V0X2ZtdAkJPSBvdjc3Mnhfc2V0X2ZtdCwKLQkudHJ5X2ZtdAkJPSBvdjc3MnhfdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSBvdjc3Mnhfc2V0X2J1c19wYXJhbSwKIAkucXVlcnlfYnVzX3BhcmFtCT0gb3Y3NzJ4X3F1ZXJ5X2J1c19wYXJhbSwKIAkuY29udHJvbHMJCT0gb3Y3NzJ4X2NvbnRyb2xzLAogCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShvdjc3MnhfY29udHJvbHMpLAotCS5nZXRfY29udHJvbAkJPSBvdjc3MnhfZ2V0X2NvbnRyb2wsCi0JLnNldF9jb250cm9sCQk9IG92NzcyeF9zZXRfY29udHJvbCwKLQkuZ2V0X2NoaXBfaWQJCT0gb3Y3NzJ4X2dldF9jaGlwX2lkLAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBvdjc3Mnhfc3ViZGV2X2NvcmVfb3BzID0geworCS5nX2N0cmwJCT0gb3Y3NzJ4X2dfY3RybCwKKwkuc19jdHJsCQk9IG92NzcyeF9zX2N0cmwsCisJLmdfY2hpcF9pZGVudAk9IG92NzcyeF9nX2NoaXBfaWRlbnQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS5nZXRfcmVnaXN0ZXIJCT0gb3Y3NzJ4X2dldF9yZWdpc3RlciwKLQkuc2V0X3JlZ2lzdGVyCQk9IG92NzcyeF9zZXRfcmVnaXN0ZXIsCisJLmdfcmVnaXN0ZXIJPSBvdjc3MnhfZ19yZWdpc3RlciwKKwkuc19yZWdpc3Rlcgk9IG92NzcyeF9zX3JlZ2lzdGVyLAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjc3Mnhfc3ViZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JPSBvdjc3Mnhfc19zdHJlYW0sCisJLmdfZm10CQk9IG92NzcyeF9nX2ZtdCwKKwkuc19mbXQJCT0gb3Y3NzJ4X3NfZm10LAorCS50cnlfZm10CT0gb3Y3NzJ4X3RyeV9mbXQsCisJLmNyb3BjYXAJPSBvdjc3MnhfY3JvcGNhcCwKKwkuZ19jcm9wCQk9IG92NzcyeF9nX2Nyb3AsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBvdjc3Mnhfc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZvdjc3Mnhfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZvdjc3Mnhfc3ViZGV2X3ZpZGVvX29wcywKK307CisKIC8qCiAgKiBpMmNfZHJpdmVyIGZ1bmN0aW9uCiAgKi8KIAogc3RhdGljIGludCBvdjc3MnhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKIHsKIAlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgICAgICAgICpwcml2OwogCXN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gKmluZm87Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAqaWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAgICAqaWNsOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKIAotCWlmICghY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSkKKwlpZiAoIWljZCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk9WNzcyWDogbWlzc2luZyBzb2MtY2FtZXJhIGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CisJaWYgKCFpY2wpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5mbyA9IGNvbnRhaW5lcl9vZihjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhLAotCQkJICAgIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8sIGxpbmspOworCWluZm8gPSBjb250YWluZXJfb2YoaWNsLCBzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvLCBsaW5rKTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsCkBAIC0xMDg0LDIwICsxMTU5LDE1IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPmluZm8gICA9IGluZm87Ci0JcHJpdi0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHByaXYpOworCXByaXYtPmluZm8gPSBpbmZvOwogCi0JaWNkICAgICAgICAgICAgID0gJnByaXYtPmljZDsKLQlpY2QtPm9wcyAgICAgICAgPSAmb3Y3NzJ4X29wczsKLQlpY2QtPmNvbnRyb2wgICAgPSAmY2xpZW50LT5kZXY7Ci0JaWNkLT53aWR0aF9tYXggID0gTUFYX1dJRFRIOwotCWljZC0+aGVpZ2h0X21heCA9IE1BWF9IRUlHSFQ7Ci0JaWNkLT5pZmFjZSAgICAgID0gcHJpdi0+aW5mby0+bGluay5idXNfaWQ7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgY2xpZW50LCAmb3Y3NzJ4X3N1YmRldl9vcHMpOwogCi0JcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKKwlpY2QtPm9wcwkJPSAmb3Y3NzJ4X29wczsKIAorCXJldCA9IG92NzcyeF92aWRlb19wcm9iZShpY2QsIGNsaWVudCk7CiAJaWYgKHJldCkgeworCQlpY2QtPm9wcyA9IE5VTEw7CiAJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogCQlrZnJlZShwcml2KTsKIAl9CkBAIC0xMTA3LDkgKzExNzcsMTAgQEAKIAogc3RhdGljIGludCBvdjc3MnhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0Jc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmcHJpdi0+aWNkKTsKKwlpY2QtPm9wcyA9IE5VTEw7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUocHJpdik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKaW5kZXggMzM2YTIwZS4uZTRkN2MxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYwpAQCAtMjk4LDYgKzI5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGhhdXBwYXVnZV90ZGExODI3MV9kdmJfY29uZmlnID0gewogCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLm91dHB1dF9vcHQgPSBUREExODI3MV9PVVRQVVRfTFRfT0ZGLAogfTsKIAogc3RhdGljIGludCBwdnIyX3RkYTEwMDQ4X2F0dGFjaChzdHJ1Y3QgcHZyMl9kdmJfYWRhcHRlciAqYWRhcCkKQEAgLTM5Myw2ICszOTQsNyBAQAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX3RkYTE4MjcxX2NvbmZpZyA9IHsKIAkuc3RkX21hcCA9ICZoYXVwcGF1Z2VfdGRhMTgyNzFfc3RkX21hcCwKIAkuZ2F0ZSAgICA9IFREQTE4MjcxX0dBVEVfQU5BTE9HLAorCS5vdXRwdXRfb3B0ID0gVERBMTgyNzFfT1VUUFVUX0xUX09GRiwKIH07CiAKIHN0YXRpYyBpbnQgcHZyMl9zNWgxNDA5X2F0dGFjaChzdHJ1Y3QgcHZyMl9kdmJfYWRhcHRlciAqYWRhcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggY2JjMzg4Ny4uMTM2MzliMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTIwNjMsOCArMjA2Myw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIE5vdGUgaG93IHRoZSAybmQgYW5kIDNyZCBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGZvciBib3RoCi0JICogdjRsMl9pMmNfbmV3X3N1YmRldigpIGFuZCB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigpLiAgV2h5PworCS8qIE5vdGUgaG93IHRoZSAybmQgYW5kIDNyZCBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGZvcgorCSAqIHY0bDJfaTJjX25ld19zdWJkZXYoKS4gIFdoeT8KIAkgKiBXZWxsIHRoZSAybmQgYXJndW1lbnQgaXMgdGhlIG1vZHVsZSBuYW1lIHRvIGxvYWQsIHdoaWxlIHRoZSAzcmQKIAkgKiBhcmd1bWVudCBpcyBkb2N1bWVudGVkIGluIHRoZSBmcmFtZXdvcmsgYXMgYmVpbmcgdGhlICJjaGlwaWQiIC0KIAkgKiBhbmQgZXZlcnkgb3RoZXIgcGxhY2Ugd2hlcmUgSSBjYW4gZmluZCBleGFtcGxlcyBvZiB0aGlzLCB0aGUKQEAgLTIwNzcsMTUgKzIwNzcsMTUgQEAKIAkJCSAgIG1pZCwgaTJjYWRkclswXSk7CiAJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmaGR3LT52NGwyX2RldiwgJmhkdy0+aTJjX2FkYXAsCiAJCQkJCSBmbmFtZSwgZm5hbWUsCi0JCQkJCSBpMmNhZGRyWzBdKTsKKwkJCQkJIGkyY2FkZHJbMF0sIE5VTEwpOwogCX0gZWxzZSB7CiAJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAogCQkJICAgIk1vZHVsZSBJRCAldToiCiAJCQkgICAiIFNldHRpbmcgdXAgd2l0aCBhZGRyZXNzIHByb2JlIGxpc3QiLAogCQkJICAgbWlkKTsKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmaGR3LT52NGwyX2RldiwgJmhkdy0+aTJjX2FkYXAsCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmaGR3LT52NGwyX2RldiwgJmhkdy0+aTJjX2FkYXAsCiAJCQkJCQlmbmFtZSwgZm5hbWUsCi0JCQkJCQlpMmNhZGRyKTsKKwkJCQkJCTAsIGkyY2FkZHIpOwogCX0KIAogCWlmICghc2QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggMDE2YmI0NS4uNjk1MmU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTIyNSw2ICsyMjUsMTAgQEAKIAl1MzIJCQlzYXZlX2NpY3JbNV07CiB9OwogCitzdHJ1Y3QgcHhhX2NhbSB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKIHN0YXRpYyBjb25zdCBjaGFyICpweGFfY2FtX2RyaXZlcl9kZXNjcmlwdGlvbiA9ICJQWEFfQ2FtZXJhIjsKIAogc3RhdGljIHVuc2lnbmVkIGludCB2aWRfbGltaXQgPSAxNjsJLyogVmlkZW8gbWVtb3J5IGxpbWl0LCBpbiBNYiAqLwpAQCAtMjM3LDkgKzI0MSw5IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CiAKLQkqc2l6ZSA9IHJvdW5kdXAoaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0ICoKKwkqc2l6ZSA9IHJvdW5kdXAoaWNkLT51c2VyX3dpZHRoICogaWNkLT51c2VyX2hlaWdodCAqCiAJCQkoKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMyksIDgpOwogCiAJaWYgKDAgPT0gKmNvdW50KQpAQCAtMjU5LDcgKzI2Myw3IEBACiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCiAJCSZidWYtPnZiLCBidWYtPnZiLmJhZGRyLCBidWYtPnZiLmJzaXplKTsKIAogCS8qIFRoaXMgd2FpdHMgdW50aWwgdGhpcyBidWZmZXIgaXMgb3V0IG9mIGRhbmdlciwgaS5lLiwgdW50aWwgaXQgaXMgbm8KQEAgLTI3MCw3ICsyNzQsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmLT5kbWFzKTsgaSsrKSB7CiAJCWlmIChidWYtPmRtYXNbaV0uc2dfY3B1KQotCQkJZG1hX2ZyZWVfY29oZXJlbnQoaWNpLT5kZXYsIGJ1Zi0+ZG1hc1tpXS5zZ19zaXplLAorCQkJZG1hX2ZyZWVfY29oZXJlbnQoaWNpLT52NGwyX2Rldi5kZXYsCisJCQkJCSAgYnVmLT5kbWFzW2ldLnNnX3NpemUsCiAJCQkJCSAgYnVmLT5kbWFzW2ldLnNnX2NwdSwKIAkJCQkJICBidWYtPmRtYXNbaV0uc2dfZG1hKTsKIAkJYnVmLT5kbWFzW2ldLnNnX2NwdSA9IE5VTEw7CkBAIC0zMjUsMTkgKzMzMCwyMCBAQAogCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqKnNnX2ZpcnN0LCBpbnQgKnNnX2ZpcnN0X29mcykKIHsKIAlzdHJ1Y3QgcHhhX2NhbV9kbWEgKnB4YV9kbWEgPSAmYnVmLT5kbWFzW2NoYW5uZWxdOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgaSwgb2Zmc2V0LCBzZ2xlbjsKIAlpbnQgZG1hX2xlbiA9IDAsIHhmZXJfbGVuID0gMDsKIAogCWlmIChweGFfZG1hLT5zZ19jcHUpCi0JCWRtYV9mcmVlX2NvaGVyZW50KHBjZGV2LT5zb2NfaG9zdC5kZXYsIHB4YV9kbWEtPnNnX3NpemUsCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgcHhhX2RtYS0+c2dfc2l6ZSwKIAkJCQkgIHB4YV9kbWEtPnNnX2NwdSwgcHhhX2RtYS0+c2dfZG1hKTsKIAogCXNnbGVuID0gY2FsY3VsYXRlX2RtYV9zZ2xlbigqc2dfZmlyc3QsIGRtYS0+c2dsZW4sCiAJCQkJICAgICpzZ19maXJzdF9vZnMsIHNpemUpOwogCiAJcHhhX2RtYS0+c2dfc2l6ZSA9IChzZ2xlbiArIDEpICogc2l6ZW9mKHN0cnVjdCBweGFfZG1hX2Rlc2MpOwotCXB4YV9kbWEtPnNnX2NwdSA9IGRtYV9hbGxvY19jb2hlcmVudChwY2Rldi0+c29jX2hvc3QuZGV2LCBweGFfZG1hLT5zZ19zaXplLAorCXB4YV9kbWEtPnNnX2NwdSA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHB4YV9kbWEtPnNnX3NpemUsCiAJCQkJCSAgICAgJnB4YV9kbWEtPnNnX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFweGFfZG1hLT5zZ19jcHUpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzQ1LDcgKzM1MSw3IEBACiAJcHhhX2RtYS0+c2dsZW4gPSBzZ2xlbjsKIAlvZmZzZXQgPSAqc2dfZmlyc3Rfb2ZzOwogCi0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiRE1BOiBzZ19maXJzdD0lcCwgc2dsZW49JWQsIG9mcz0lZCwgZG1hLmRlc2M9JXhcbiIsCisJZGV2X2RiZyhkZXYsICJETUE6IHNnX2ZpcnN0PSVwLCBzZ2xlbj0lZCwgb2ZzPSVkLCBkbWEuZGVzYz0leFxuIiwKIAkJKnNnX2ZpcnN0LCBzZ2xlbiwgKnNnX2ZpcnN0X29mcywgcHhhX2RtYS0+c2dfZG1hKTsKIAogCkBAIC0zNjgsNyArMzc0LDcgQEAKIAkJcHhhX2RtYS0+c2dfY3B1W2ldLmRkYWRyID0KIAkJCXB4YV9kbWEtPnNnX2RtYSArIChpICsgMSkgKiBzaXplb2Yoc3RydWN0IHB4YV9kbWFfZGVzYyk7CiAKLQkJZGV2X3ZkYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIkRNQTogZGVzYy4lMDh4LT5AcGh5cz0weCUwOHgsIGxlbj0lZFxuIiwKKwkJZGV2X3ZkYmcoZGV2LCAiRE1BOiBkZXNjLiUwOHgtPkBwaHlzPTB4JTA4eCwgbGVuPSVkXG4iLAogCQkJIHB4YV9kbWEtPnNnX2RtYSArIGkgKiBzaXplb2Yoc3RydWN0IHB4YV9kbWFfZGVzYyksCiAJCQkgc2dfZG1hX2FkZHJlc3Moc2cpICsgb2Zmc2V0LCB4ZmVyX2xlbik7CiAJCW9mZnNldCA9IDA7CkBAIC00MTgsMTEgKzQyNCwxMiBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXY7CiAJc3RydWN0IHB4YV9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHB4YV9idWZmZXIsIHZiKTsKIAlpbnQgcmV0OwogCWludCBzaXplX3ksIHNpemVfdSA9IDAsIHNpemVfdiA9IDA7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCS8qIEFkZGVkIGxpc3QgaGVhZCBpbml0aWFsaXphdGlvbiBvbiBhbGxvYyAqLwpAQCAtNDQxLDEyICs0NDgsMTIgQEAKIAlidWYtPmlud29yayA9IDE7CiAKIAlpZiAoYnVmLT5mbXQJIT0gaWNkLT5jdXJyZW50X2ZtdCB8fAotCSAgICB2Yi0+d2lkdGgJIT0gaWNkLT53aWR0aCB8fAotCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+aGVpZ2h0IHx8CisJICAgIHZiLT53aWR0aAkhPSBpY2QtPnVzZXJfd2lkdGggfHwKKwkgICAgdmItPmhlaWdodAkhPSBpY2QtPnVzZXJfaGVpZ2h0IHx8CiAJICAgIHZiLT5maWVsZAkhPSBmaWVsZCkgewogCQlidWYtPmZtdAk9IGljZC0+Y3VycmVudF9mbXQ7Ci0JCXZiLT53aWR0aAk9IGljZC0+d2lkdGg7Ci0JCXZiLT5oZWlnaHQJPSBpY2QtPmhlaWdodDsKKwkJdmItPndpZHRoCT0gaWNkLT51c2VyX3dpZHRoOworCQl2Yi0+aGVpZ2h0CT0gaWNkLT51c2VyX2hlaWdodDsKIAkJdmItPmZpZWxkCT0gZmllbGQ7CiAJCXZiLT5zdGF0ZQk9IFZJREVPQlVGX05FRURTX0lOSVQ7CiAJfQpAQCAtNDgwLDggKzQ4Nyw3IEBACiAJCXJldCA9IHB4YV9pbml0X2RtYV9jaGFubmVsKHBjZGV2LCBidWYsIGRtYSwgMCwgQ0lCUjAsIHNpemVfeSwKIAkJCQkJICAgJnNnLCAmbmV4dF9vZnMpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKHBjZGV2LT5zb2NfaG9zdC5kZXYsCi0JCQkJIkRNQSBpbml0aWFsaXphdGlvbiBmb3IgWS9SR0IgZmFpbGVkXG4iKTsKKwkJCWRldl9lcnIoZGV2LCAiRE1BIGluaXRpYWxpemF0aW9uIGZvciBZL1JHQiBmYWlsZWRcbiIpOwogCQkJZ290byBmYWlsOwogCQl9CiAKQEAgLTQ5MCw4ICs0OTYsNyBAQAogCQkJcmV0ID0gcHhhX2luaXRfZG1hX2NoYW5uZWwocGNkZXYsIGJ1ZiwgZG1hLCAxLCBDSUJSMSwKIAkJCQkJCSAgIHNpemVfdSwgJnNnLCAmbmV4dF9vZnMpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKHBjZGV2LT5zb2NfaG9zdC5kZXYsCi0JCQkJIkRNQSBpbml0aWFsaXphdGlvbiBmb3IgVSBmYWlsZWRcbiIpOworCQkJZGV2X2VycihkZXYsICJETUEgaW5pdGlhbGl6YXRpb24gZm9yIFUgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZmFpbF91OwogCQl9CiAKQEAgLTUwMCw4ICs1MDUsNyBAQAogCQkJcmV0ID0gcHhhX2luaXRfZG1hX2NoYW5uZWwocGNkZXYsIGJ1ZiwgZG1hLCAyLCBDSUJSMiwKIAkJCQkJCSAgIHNpemVfdiwgJnNnLCAmbmV4dF9vZnMpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKHBjZGV2LT5zb2NfaG9zdC5kZXYsCi0JCQkJIkRNQSBpbml0aWFsaXphdGlvbiBmb3IgViBmYWlsZWRcbiIpOworCQkJZGV2X2VycihkZXYsICJETUEgaW5pdGlhbGl6YXRpb24gZm9yIFYgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZmFpbF92OwogCQl9CiAKQEAgLTUxNCwxMCArNTE4LDEwIEBACiAJcmV0dXJuIDA7CiAKIGZhaWxfdjoKLQlkbWFfZnJlZV9jb2hlcmVudChwY2Rldi0+c29jX2hvc3QuZGV2LCBidWYtPmRtYXNbMV0uc2dfc2l6ZSwKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYsIGJ1Zi0+ZG1hc1sxXS5zZ19zaXplLAogCQkJICBidWYtPmRtYXNbMV0uc2dfY3B1LCBidWYtPmRtYXNbMV0uc2dfZG1hKTsKIGZhaWxfdToKLQlkbWFfZnJlZV9jb2hlcmVudChwY2Rldi0+c29jX2hvc3QuZGV2LCBidWYtPmRtYXNbMF0uc2dfc2l6ZSwKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYsIGJ1Zi0+ZG1hc1swXS5zZ19zaXplLAogCQkJICBidWYtPmRtYXNbMF0uc2dfY3B1LCBidWYtPmRtYXNbMF0uc2dfZG1hKTsKIGZhaWw6CiAJZnJlZV9idWZmZXIodnEsIGJ1Zik7CkBAIC01NDEsNyArNTQ1LDggQEAKIAlhY3RpdmUgPSBwY2Rldi0+YWN0aXZlOwogCiAJZm9yIChpID0gMDsgaSA8IHBjZGV2LT5jaGFubmVsczsgaSsrKSB7Ci0JCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIiVzIChjaGFubmVsPSVkKSBkZGFkcj0lMDh4XG4iLCBfX2Z1bmNfXywKKwkJZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2LAorCQkJIiVzIChjaGFubmVsPSVkKSBkZGFkcj0lMDh4XG4iLCBfX2Z1bmNfXywKIAkJCWksIGFjdGl2ZS0+ZG1hc1tpXS5zZ19kbWEpOwogCQlEREFEUihwY2Rldi0+ZG1hX2NoYW5zW2ldKSA9IGFjdGl2ZS0+ZG1hc1tpXS5zZ19kbWE7CiAJCURDU1IocGNkZXYtPmRtYV9jaGFuc1tpXSkgPSBEQ1NSX1JVTjsKQEAgLTU1Myw3ICs1NTgsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHBjZGV2LT5jaGFubmVsczsgaSsrKSB7Ci0JCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIiVzIChjaGFubmVsPSVkKVxuIiwgX19mdW5jX18sIGkpOworCQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXYsCisJCQkiJXMgKGNoYW5uZWw9JWQpXG4iLCBfX2Z1bmNfXywgaSk7CiAJCURDU1IocGNkZXYtPmRtYV9jaGFuc1tpXSkgPSAwOwogCX0KIH0KQEAgLTU4OSw3ICs1OTUsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgY2ljcjAsIGNpZnI7CiAKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAJLyogUmVzZXQgdGhlIEZJRk9zICovCiAJY2lmciA9IF9fcmF3X3JlYWRsKHBjZGV2LT5iYXNlICsgQ0lGUikgfCBDSUZSX1JFU0VUX0Y7CiAJX19yYXdfd3JpdGVsKGNpZnIsIHBjZGV2LT5iYXNlICsgQ0lGUik7CkBAIC02MDksNyArNjE1LDcgQEAKIAlfX3Jhd193cml0ZWwoY2ljcjAsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCiAJcGNkZXYtPmFjdGl2ZSA9IE5VTEw7Ci0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogfQogCiAvKiBDYWxsZWQgdW5kZXIgc3BpbmxvY2tfaXJxc2F2ZSgmcGNkZXYtPmxvY2ssIC4uLikgKi8KQEAgLTYyMSw4ICs2MjcsOCBAQAogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IHB4YV9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHB4YV9idWZmZXIsIHZiKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWQgYWN0aXZlPSVwXG4iLCBfX2Z1bmNfXywKLQkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplLCBwY2Rldi0+YWN0aXZlKTsKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkIGFjdGl2ZT0lcFxuIiwKKwkJX19mdW5jX18sIHZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSwgcGNkZXYtPmFjdGl2ZSk7CiAKIAlsaXN0X2FkZF90YWlsKCZ2Yi0+cXVldWUsICZwY2Rldi0+Y2FwdHVyZSk7CiAKQEAgLTYzOSwyMiArNjQ1LDIzIEBACiAJc3RydWN0IHB4YV9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHB4YV9idWZmZXIsIHZiKTsKICNpZmRlZiBERUJVRwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCXN3aXRjaCAodmItPnN0YXRlKSB7CiAJY2FzZSBWSURFT0JVRl9BQ1RJVkU6Ci0JCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKGFjdGl2ZSlcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2RiZyhkZXYsICIlcyAoYWN0aXZlKVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAljYXNlIFZJREVPQlVGX1FVRVVFRDoKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAocXVldWVkKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzIChxdWV1ZWQpXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWNhc2UgVklERU9CVUZfUFJFUEFSRUQ6Ci0JCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHByZXBhcmVkKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzIChwcmVwYXJlZClcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodW5rbm93bilcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2RiZyhkZXYsICIlcyAodW5rbm93bilcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJfQogI2VuZGlmCkBAIC02NzQsNyArNjgxLDggQEAKIAlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CiAJdmItPmZpZWxkX2NvdW50Kys7CiAJd2FrZV91cCgmdmItPmRvbmUpOwotCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIiVzIGRlcXVldWQgYnVmZmVyICh2Yj0weCVwKVxuIiwgX19mdW5jX18sIHZiKTsKKwlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXYsICIlcyBkZXF1ZXVkIGJ1ZmZlciAodmI9MHglcClcbiIsCisJCV9fZnVuY19fLCB2Yik7CiAKIAlpZiAobGlzdF9lbXB0eSgmcGNkZXYtPmNhcHR1cmUpKSB7CiAJCXB4YV9jYW1lcmFfc3RvcF9jYXB0dXJlKHBjZGV2KTsKQEAgLTcxMCw3ICs3MTgsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBwY2Rldi0+Y2hhbm5lbHM7IGkrKykKIAkJaWYgKEREQURSKHBjZGV2LT5kbWFfY2hhbnNbaV0pICE9IEREQURSX1NUT1ApCiAJCQlpc19kbWFfc3RvcHBlZCA9IDA7Ci0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiJXMgOiB0b3AgcXVldWVkIGJ1ZmZlcj0lcCwgZG1hX3N0b3BwZWQ9JWRcbiIsCisJZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2LAorCQkiJXMgOiB0b3AgcXVldWVkIGJ1ZmZlcj0lcCwgZG1hX3N0b3BwZWQ9JWRcbiIsCiAJCV9fZnVuY19fLCBwY2Rldi0+YWN0aXZlLCBpc19kbWFfc3RvcHBlZCk7CiAJaWYgKHBjZGV2LT5hY3RpdmUgJiYgaXNfZG1hX3N0b3BwZWQpCiAJCXB4YV9jYW1lcmFfc3RhcnRfY2FwdHVyZShwY2Rldik7CkBAIC03MTksNiArNzI4LDcgQEAKIHN0YXRpYyB2b2lkIHB4YV9jYW1lcmFfZG1hX2lycShpbnQgY2hhbm5lbCwgc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiwKIAkJCSAgICAgICBlbnVtIHB4YV9jYW1lcmFfYWN0aXZlX2RtYSBhY3RfZG1hKQogeworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXY7CiAJc3RydWN0IHB4YV9idWZmZXIgKmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBzdGF0dXMsIGNhbWVyYV9zdGF0dXMsIG92ZXJydW47CkBAIC03MzUsMTMgKzc0NSwxMyBAQAogCQlvdmVycnVuIHw9IENJU1JfSUZPXzEgfCBDSVNSX0lGT18yOwogCiAJaWYgKHN0YXR1cyAmIERDU1JfQlVTRVJSKSB7Ci0JCWRldl9lcnIocGNkZXYtPnNvY19ob3N0LmRldiwgIkRNQSBCdXMgRXJyb3IgSVJRIVxuIik7CisJCWRldl9lcnIoZGV2LCAiRE1BIEJ1cyBFcnJvciBJUlEhXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCEoc3RhdHVzICYgKERDU1JfRU5ESU5UUiB8IERDU1JfU1RBUlRJTlRSKSkpIHsKLQkJZGV2X2VycihwY2Rldi0+c29jX2hvc3QuZGV2LCAiVW5rbm93biBETUEgSVJRIHNvdXJjZSwgIgotCQkJInN0YXR1czogMHglMDh4XG4iLCBzdGF0dXMpOworCQlkZXZfZXJyKGRldiwgIlVua25vd24gRE1BIElSUSBzb3VyY2UsIHN0YXR1czogMHglMDh4XG4iLAorCQkJc3RhdHVzKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC03NjQsNyArNzc0LDcgQEAKIAlidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBweGFfYnVmZmVyLCB2Yik7CiAJV0FSTl9PTihidWYtPmlud29yayB8fCBsaXN0X2VtcHR5KCZ2Yi0+cXVldWUpKTsKIAotCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIiVzIGNoYW5uZWw9JWQgJXMlcyh2Yj0weCVwKSBkbWEuZGVzYz0leFxuIiwKKwlkZXZfZGJnKGRldiwgIiVzIGNoYW5uZWw9JWQgJXMlcyh2Yj0weCVwKSBkbWEuZGVzYz0leFxuIiwKIAkJX19mdW5jX18sIGNoYW5uZWwsIHN0YXR1cyAmIERDU1JfU1RBUlRJTlRSID8gIlNPRiAiIDogIiIsCiAJCXN0YXR1cyAmIERDU1JfRU5ESU5UUiA/ICJFT0YgIiA6ICIiLCB2YiwgRERBRFIoY2hhbm5lbCkpOwogCkBAIC03NzUsNyArNzg1LDcgQEAKIAkJICovCiAJCWlmIChjYW1lcmFfc3RhdHVzICYgb3ZlcnJ1biAmJgogCQkgICAgIWxpc3RfaXNfbGFzdChwY2Rldi0+Y2FwdHVyZS5uZXh0LCAmcGNkZXYtPmNhcHR1cmUpKSB7Ci0JCQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJGSUZPIG92ZXJydW4hIENJU1I6ICV4XG4iLAorCQkJZGV2X2RiZyhkZXYsICJGSUZPIG92ZXJydW4hIENJU1I6ICV4XG4iLAogCQkJCWNhbWVyYV9zdGF0dXMpOwogCQkJcHhhX2NhbWVyYV9zdG9wX2NhcHR1cmUocGNkZXYpOwogCQkJcHhhX2NhbWVyYV9zdGFydF9jYXB0dXJlKHBjZGV2KTsKQEAgLTgzMCw5ICs4NDAsMTEgQEAKIAkJCQlzaXplb2Yoc3RydWN0IHB4YV9idWZmZXIpLCBpY2QpOwogfQogCi1zdGF0aWMgdTMyIG1jbGtfZ2V0X2Rpdmlzb3Ioc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldikKK3N0YXRpYyB1MzIgbWNsa19nZXRfZGl2aXNvcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgIHN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBtY2xrID0gcGNkZXYtPm1jbGs7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAl1MzIgZGl2OwogCXVuc2lnbmVkIGxvbmcgbGNkY2xrOwogCkBAIC04NDIsNyArODU0LDcgQEAKIAkvKiBtY2xrIDw9IGNpY2xrIC8gNCAoMjcuNC4yKSAqLwogCWlmIChtY2xrID4gbGNkY2xrIC8gNCkgewogCQltY2xrID0gbGNkY2xrIC8gNDsKLQkJZGV2X3dhcm4ocGNkZXYtPnNvY19ob3N0LmRldiwgIkxpbWl0aW5nIG1hc3RlciBjbG9jayB0byAlbHVcbiIsIG1jbGspOworCQlkZXZfd2FybihkZXYsICJMaW1pdGluZyBtYXN0ZXIgY2xvY2sgdG8gJWx1XG4iLCBtY2xrKTsKIAl9CiAKIAkvKiBXZSB2ZXJpZnkgbWNsayAhPSAwLCBzbyBpZiBhbnlvbmUgYnJlYWtzIGl0LCBoZXJlIGNvbWVzIHRoZWlyIE9vcHMgKi8KQEAgLTg1Miw4ICs4NjQsOCBAQAogCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX01DTEtfRU4pCiAJCXBjZGV2LT5tY2xrID0gbGNkY2xrIC8gKDIgKiAoZGl2ICsgMSkpOwogCi0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiTENEIGNsb2NrICVsdUh6LCB0YXJnZXQgZnJlcSAlbHVIeiwgIgotCQkiZGl2aXNvciAldVxuIiwgbGNkY2xrLCBtY2xrLCBkaXYpOworCWRldl9kYmcoZGV2LCAiTENEIGNsb2NrICVsdUh6LCB0YXJnZXQgZnJlcSAlbHVIeiwgZGl2aXNvciAldVxuIiwKKwkJbGNkY2xrLCBtY2xrLCBkaXYpOwogCiAJcmV0dXJuIGRpdjsKIH0KQEAgLTg3MCwxNCArODgyLDE1IEBACiBzdGF0aWMgdm9pZCBweGFfY2FtZXJhX2FjdGl2YXRlKHN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYpCiB7CiAJc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBjZGV2LT5wZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2OwogCXUzMiBjaWNyNCA9IDA7CiAKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJSZWdpc3RlcmVkIHBsYXRmb3JtIGRldmljZSBhdCAlcCBkYXRhICVwXG4iLAorCWRldl9kYmcoZGV2LCAiUmVnaXN0ZXJlZCBwbGF0Zm9ybSBkZXZpY2UgYXQgJXAgZGF0YSAlcFxuIiwKIAkJcGNkZXYsIHBkYXRhKTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgewotCQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICIlczogSW5pdCBncGlvc1xuIiwgX19mdW5jX18pOwotCQlwZGF0YS0+aW5pdChwY2Rldi0+c29jX2hvc3QuZGV2KTsKKwkJZGV2X2RiZyhkZXYsICIlczogSW5pdCBncGlvc1xuIiwgX19mdW5jX18pOworCQlwZGF0YS0+aW5pdChkZXYpOwogCX0KIAogCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KQEAgLTkxOSw3ICs5MzIsOCBAQAogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOwogCiAJc3RhdHVzID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSVNSKTsKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJDYW1lcmEgaW50ZXJydXB0IHN0YXR1cyAweCVseFxuIiwgc3RhdHVzKTsKKwlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXYsCisJCSJDYW1lcmEgaW50ZXJydXB0IHN0YXR1cyAweCVseFxuIiwgc3RhdHVzKTsKIAogCWlmICghc3RhdHVzKQogCQlyZXR1cm4gSVJRX05PTkU7CkBAIC05NTEsMjQgKzk2NSwxOCBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JaW50IHJldDsKIAotCWlmIChwY2Rldi0+aWNkKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBlYnVzeTsKLQl9Ci0KLQlkZXZfaW5mbygmaWNkLT5kZXYsICJQWEEgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCi0JCSBpY2QtPmRldm51bSk7CisJaWYgKHBjZGV2LT5pY2QpCisJCXJldHVybiAtRUJVU1k7CiAKIAlweGFfY2FtZXJhX2FjdGl2YXRlKHBjZGV2KTsKLQlyZXQgPSBpY2QtPm9wcy0+aW5pdChpY2QpOwogCi0JaWYgKCFyZXQpCi0JCXBjZGV2LT5pY2QgPSBpY2Q7CisJcGNkZXYtPmljZCA9IGljZDsKIAotZWJ1c3k6Ci0JcmV0dXJuIHJldDsKKwlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJQWEEgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCisJCSBpY2QtPmRldm51bSk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwpAQCAtOTc5LDcgKzk4Nyw3IEBACiAKIAlCVUdfT04oaWNkICE9IHBjZGV2LT5pY2QpOwogCi0JZGV2X2luZm8oJmljZC0+ZGV2LCAiUFhBIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiUFhBIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKIAkvKiBkaXNhYmxlIGNhcHR1cmUsIGRpc2FibGUgaW50ZXJydXB0cyAqLwpAQCAtOTkwLDggKzk5OCw2IEBACiAJRENTUihwY2Rldi0+ZG1hX2NoYW5zWzFdKSA9IDA7CiAJRENTUihwY2Rldi0+ZG1hX2NoYW5zWzJdKSA9IDA7CiAKLQlpY2QtPm9wcy0+cmVsZWFzZShpY2QpOwotCiAJcHhhX2NhbWVyYV9kZWFjdGl2YXRlKHBjZGV2KTsKIAogCXBjZGV2LT5pY2QgPSBOVUxMOwpAQCAtMTAzOSwxMyArMTA0NSwxMDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9zZXR1cF9jaWNyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgX191MzIgcGl4Zm10KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBkdywgYnBwOworCXUzMiBjaWNyMCwgY2ljcjEsIGNpY3IyLCBjaWNyMywgY2ljcjQgPSAwOworCisJLyogRGF0YXdpZHRoIGlzIG5vdyBndWFyYW50ZWVkIHRvIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgdGhyZWUgdmFsdWVzLgorCSAqIFdlIGZpeCBiaXQtcGVyLXBpeGVsIGVxdWFsIHRvIGRhdGEtd2lkdGguLi4gKi8KKwlzd2l0Y2ggKGZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0spIHsKKwljYXNlIFNPQ0FNX0RBVEFXSURUSF8xMDoKKwkJZHcgPSA0OworCQlicHAgPSAweDQwOworCQlicmVhazsKKwljYXNlIFNPQ0FNX0RBVEFXSURUSF85OgorCQlkdyA9IDM7CisJCWJwcCA9IDB4MjA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIEFjdHVhbGx5IGl0IGNhbiBvbmx5IGJlIDggbm93LAorCQkgKiBkZWZhdWx0IGlzIGp1c3QgdG8gc2lsZW5jZSBjb21waWxlciB3YXJuaW5ncyAqLworCWNhc2UgU09DQU1fREFUQVdJRFRIXzg6CisJCWR3ID0gMjsKKwkJYnBwID0gMDsKKwl9CisKKwlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9QQ0xLX0VOKQorCQljaWNyNCB8PSBDSUNSNF9QQ0xLX0VOOworCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX01DTEtfRU4pCisJCWNpY3I0IHw9IENJQ1I0X01DTEtfRU47CisJaWYgKGZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfRkFMTElORykKKwkJY2ljcjQgfD0gQ0lDUjRfUENQOworCWlmIChmbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpCisJCWNpY3I0IHw9IENJQ1I0X0hTUDsKKwlpZiAoZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XKQorCQljaWNyNCB8PSBDSUNSNF9WU1A7CisKKwljaWNyMCA9IF9fcmF3X3JlYWRsKHBjZGV2LT5iYXNlICsgQ0lDUjApOworCWlmIChjaWNyMCAmIENJQ1IwX0VOQikKKwkJX19yYXdfd3JpdGVsKGNpY3IwICYgfkNJQ1IwX0VOQiwgcGNkZXYtPmJhc2UgKyBDSUNSMCk7CisKKwljaWNyMSA9IENJQ1IxX1BQTF9WQUwoaWNkLT51c2VyX3dpZHRoIC0gMSkgfCBicHAgfCBkdzsKKworCXN3aXRjaCAocGl4Zm10KSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKKwkJcGNkZXYtPmNoYW5uZWxzID0gMzsKKwkJY2ljcjEgfD0gQ0lDUjFfWUNCQ1JfRjsKKwkJLyoKKwkJICogTm9ybWFsbHksIHB4YSBidXMgd2FudHMgYXMgaW5wdXQgVVlWWSBmb3JtYXQuIFdlIGFsbG93IGFsbAorCQkgKiByZW9yZGVyaW5ncyBvZiB0aGUgWVVWNDIyIGZvcm1hdCwgYXMgbm8gcHJvY2Vzc2luZyBpcyBkb25lLAorCQkgKiBhbmQgdGhlIFlVViBzdHJlYW0gaXMganVzdCBwYXNzZWQgdGhyb3VnaCB3aXRob3V0IGFueQorCQkgKiB0cmFuc2Zvcm1hdGlvbi4gTm90ZSB0aGF0IFVZVlkgaXMgdGhlIG9ubHkgZm9ybWF0IHRoYXQKKwkJICogc2hvdWxkIGJlIHVzZWQgaWYgcHhhIGZyYW1lYnVmZmVyIE92ZXJsYXkyIGlzIHVzZWQuCisJCSAqLworCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6CisJCWNpY3IxIHw9IENJQ1IxX0NPTE9SX1NQX1ZBTCgyKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQljaWNyMSB8PSBDSUNSMV9SR0JfQlBQX1ZBTCgxKSB8IENJQ1IxX1JHQlRfQ09OVl9WQUwoMikgfAorCQkJQ0lDUjFfVEJJVCB8IENJQ1IxX0NPTE9SX1NQX1ZBTCgxKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQljaWNyMSB8PSBDSUNSMV9DT0xPUl9TUF9WQUwoMSkgfCBDSUNSMV9SR0JfQlBQX1ZBTCgyKTsKKwkJYnJlYWs7CisJfQorCisJY2ljcjIgPSAwOworCWNpY3IzID0gQ0lDUjNfTFBGX1ZBTChpY2QtPnVzZXJfaGVpZ2h0IC0gMSkgfAorCQlDSUNSM19CRldfVkFMKG1pbigodW5zaWduZWQgc2hvcnQpMjU1LCBpY2QtPnlfc2tpcF90b3ApKTsKKwljaWNyNCB8PSBwY2Rldi0+bWNsa19kaXZpc29yOworCisJX19yYXdfd3JpdGVsKGNpY3IxLCBwY2Rldi0+YmFzZSArIENJQ1IxKTsKKwlfX3Jhd193cml0ZWwoY2ljcjIsIHBjZGV2LT5iYXNlICsgQ0lDUjIpOworCV9fcmF3X3dyaXRlbChjaWNyMywgcGNkZXYtPmJhc2UgKyBDSUNSMyk7CisJX19yYXdfd3JpdGVsKGNpY3I0LCBwY2Rldi0+YmFzZSArIENJQ1I0KTsKKworCS8qIENJRiBpbnRlcnJ1cHRzIGFyZSBub3QgdXNlZCwgb25seSBETUEgKi8KKwljaWNyMCA9IChjaWNyMCAmIENJQ1IwX0VOQikgfCAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9NQVNURVIgPworCQlDSUNSMF9TSU1fTVAgOiAoQ0lDUjBfU0xfQ0FQX0VOIHwgQ0lDUjBfU0lNX1NQKSk7CisJY2ljcjAgfD0gQ0lDUjBfRE1BRU4gfCBDSUNSMF9JUlFfTUFTSzsKKwlfX3Jhd193cml0ZWwoY2ljcjAsIHBjZGV2LT5iYXNlICsgQ0lDUjApOworfQorCiBzdGF0aWMgaW50IHB4YV9jYW1lcmFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgX191MzIgcGl4Zm10KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JdW5zaWduZWQgbG9uZyBkdywgYnBwLCBidXNfZmxhZ3MsIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOwotCXUzMiBjaWNyMCwgY2ljcjEsIGNpY3IyLCBjaWNyMywgY2ljcjQgPSAwOworCXVuc2lnbmVkIGxvbmcgYnVzX2ZsYWdzLCBjYW1lcmFfZmxhZ3MsIGNvbW1vbl9mbGFnczsKIAlpbnQgcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShwY2RldiwgaWNkLT5idXN3aWR0aCwgJmJ1c19mbGFncyk7CisJc3RydWN0IHB4YV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OwogCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC0xMDgzLDg3ICsxMTc2LDEzIEBACiAJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkc7CiAJfQogCisJY2FtLT5mbGFncyA9IGNvbW1vbl9mbGFnczsKKwogCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIERhdGF3aWR0aCBpcyBub3cgZ3VhcmFudGVlZCB0byBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIHRocmVlIHZhbHVlcy4KLQkgKiBXZSBmaXggYml0LXBlci1waXhlbCBlcXVhbCB0byBkYXRhLXdpZHRoLi4uICovCi0Jc3dpdGNoIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSykgewotCWNhc2UgU09DQU1fREFUQVdJRFRIXzEwOgotCQlkdyA9IDQ7Ci0JCWJwcCA9IDB4NDA7Ci0JCWJyZWFrOwotCWNhc2UgU09DQU1fREFUQVdJRFRIXzk6Ci0JCWR3ID0gMzsKLQkJYnBwID0gMHgyMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogQWN0dWFsbHkgaXQgY2FuIG9ubHkgYmUgOCBub3csCi0JCSAqIGRlZmF1bHQgaXMganVzdCB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzICovCi0JY2FzZSBTT0NBTV9EQVRBV0lEVEhfODoKLQkJZHcgPSAyOwotCQlicHAgPSAwOwotCX0KLQotCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX1BDTEtfRU4pCi0JCWNpY3I0IHw9IENJQ1I0X1BDTEtfRU47Ci0JaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfTUNMS19FTikKLQkJY2ljcjQgfD0gQ0lDUjRfTUNMS19FTjsKLQlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfRkFMTElORykKLQkJY2ljcjQgfD0gQ0lDUjRfUENQOwotCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XKQotCQljaWNyNCB8PSBDSUNSNF9IU1A7Ci0JaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpCi0JCWNpY3I0IHw9IENJQ1I0X1ZTUDsKLQotCWNpY3IwID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSUNSMCk7Ci0JaWYgKGNpY3IwICYgQ0lDUjBfRU5CKQotCQlfX3Jhd193cml0ZWwoY2ljcjAgJiB+Q0lDUjBfRU5CLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKLQotCWNpY3IxID0gQ0lDUjFfUFBMX1ZBTChpY2QtPndpZHRoIC0gMSkgfCBicHAgfCBkdzsKLQotCXN3aXRjaCAocGl4Zm10KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKLQkJcGNkZXYtPmNoYW5uZWxzID0gMzsKLQkJY2ljcjEgfD0gQ0lDUjFfWUNCQ1JfRjsKLQkJLyoKLQkJICogTm9ybWFsbHksIHB4YSBidXMgd2FudHMgYXMgaW5wdXQgVVlWWSBmb3JtYXQuIFdlIGFsbG93IGFsbAotCQkgKiByZW9yZGVyaW5ncyBvZiB0aGUgWVVWNDIyIGZvcm1hdCwgYXMgbm8gcHJvY2Vzc2luZyBpcyBkb25lLAotCQkgKiBhbmQgdGhlIFlVViBzdHJlYW0gaXMganVzdCBwYXNzZWQgdGhyb3VnaCB3aXRob3V0IGFueQotCQkgKiB0cmFuc2Zvcm1hdGlvbi4gTm90ZSB0aGF0IFVZVlkgaXMgdGhlIG9ubHkgZm9ybWF0IHRoYXQKLQkJICogc2hvdWxkIGJlIHVzZWQgaWYgcHhhIGZyYW1lYnVmZmVyIE92ZXJsYXkyIGlzIHVzZWQuCi0JCSAqLwotCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6Ci0JCWNpY3IxIHw9IENJQ1IxX0NPTE9SX1NQX1ZBTCgyKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgotCQljaWNyMSB8PSBDSUNSMV9SR0JfQlBQX1ZBTCgxKSB8IENJQ1IxX1JHQlRfQ09OVl9WQUwoMikgfAotCQkJQ0lDUjFfVEJJVCB8IENJQ1IxX0NPTE9SX1NQX1ZBTCgxKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgotCQljaWNyMSB8PSBDSUNSMV9DT0xPUl9TUF9WQUwoMSkgfCBDSUNSMV9SR0JfQlBQX1ZBTCgyKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2ljcjIgPSAwOwotCWNpY3IzID0gQ0lDUjNfTFBGX1ZBTChpY2QtPmhlaWdodCAtIDEpIHwKLQkJQ0lDUjNfQkZXX1ZBTChtaW4oKHVuc2lnbmVkIHNob3J0KTI1NSwgaWNkLT55X3NraXBfdG9wKSk7Ci0JY2ljcjQgfD0gcGNkZXYtPm1jbGtfZGl2aXNvcjsKLQotCV9fcmF3X3dyaXRlbChjaWNyMSwgcGNkZXYtPmJhc2UgKyBDSUNSMSk7Ci0JX19yYXdfd3JpdGVsKGNpY3IyLCBwY2Rldi0+YmFzZSArIENJQ1IyKTsKLQlfX3Jhd193cml0ZWwoY2ljcjMsIHBjZGV2LT5iYXNlICsgQ0lDUjMpOwotCV9fcmF3X3dyaXRlbChjaWNyNCwgcGNkZXYtPmJhc2UgKyBDSUNSNCk7Ci0KLQkvKiBDSUYgaW50ZXJydXB0cyBhcmUgbm90IHVzZWQsIG9ubHkgRE1BICovCi0JY2ljcjAgPSAoY2ljcjAgJiBDSUNSMF9FTkIpIHwgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfTUFTVEVSID8KLQkJQ0lDUjBfU0lNX01QIDogKENJQ1IwX1NMX0NBUF9FTiB8IENJQ1IwX1NJTV9TUCkpOwotCWNpY3IwIHw9IENJQ1IwX0RNQUVOIHwgQ0lDUjBfSVJRX01BU0s7Ci0JX19yYXdfd3JpdGVsKGNpY3IwLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKKwlweGFfY2FtZXJhX3NldHVwX2NpY3IoaWNkLCBjb21tb25fZmxhZ3MsIHBpeGZtdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMjcsOCArMTI0Niw5IEBACiBzdGF0aWMgaW50IHB4YV9jYW1lcmFfZ2V0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBpZHgsCiAJCQkJICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAlpbnQgZm9ybWF0cyA9IDAsIGJ1c3dpZHRoLCByZXQ7CisJc3RydWN0IHB4YV9jYW0gKmNhbTsKIAogCWJ1c3dpZHRoID0gcmVxdWlyZWRfYnVzd2lkdGgoaWNkLT5mb3JtYXRzICsgaWR4KTsKIApAQCAtMTIzOSw2ICsxMjU5LDE2IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwogCisJaWYgKCFpY2QtPmhvc3RfcHJpdikgeworCQljYW0gPSBremFsbG9jKHNpemVvZigqY2FtKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FtKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJaWNkLT5ob3N0X3ByaXYgPSBjYW07CisJfSBlbHNlIHsKKwkJY2FtID0gaWNkLT5ob3N0X3ByaXY7CisJfQorCiAJc3dpdGNoIChpY2QtPmZvcm1hdHNbaWR4XS5mb3VyY2MpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgogCQlmb3JtYXRzKys7CkBAIC0xMjQ3LDcgKzEyNzcsNyBAQAogCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CiAJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKIAkJCXhsYXRlKys7Ci0JCQlkZXZfZGJnKGljaS0+ZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKKwkJCWRldl9kYmcoZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKIAkJCQlweGFfY2FtZXJhX2Zvcm1hdHNbMF0ubmFtZSwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQpAQCAtMTI2Miw3ICsxMjkyLDcgQEAKIAkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwogCQkJeGxhdGUtPmJ1c3dpZHRoID0gYnVzd2lkdGg7CiAJCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgcGFja2VkXG4iLAorCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHBhY2tlZFxuIiwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQogCQlicmVhazsKQEAgLTEyNzQsNyArMTMwNCw3IEBACiAJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKIAkJCXhsYXRlLT5idXN3aWR0aCA9IGljZC0+Zm9ybWF0c1tpZHhdLmRlcHRoOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoaWNpLT5kZXYsCisJCQlkZXZfZGJnKGRldiwKIAkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyBpbiBwYXNzLXRocm91Z2ggbW9kZVxuIiwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQpAQCAtMTI4MywzMSArMTMxMyw4MCBAQAogCXJldHVybiBmb3JtYXRzOwogfQogCi1zdGF0aWMgaW50IHB4YV9jYW1lcmFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyB2b2lkIHB4YV9jYW1lcmFfcHV0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJa2ZyZWUoaWNkLT5ob3N0X3ByaXYpOworCWljZC0+aG9zdF9wcml2ID0gTlVMTDsKK30KKworc3RhdGljIGludCBweGFfY2FtZXJhX2NoZWNrX2ZyYW1lKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCkKK3sKKwkvKiBsaW1pdCB0byBweGEgaGFyZHdhcmUgY2FwYWJpbGl0aWVzICovCisJcmV0dXJuIHBpeC0+aGVpZ2h0IDwgMzIgfHwgcGl4LT5oZWlnaHQgPiAyMDQ4IHx8IHBpeC0+d2lkdGggPCA0OCB8fAorCQlwaXgtPndpZHRoID4gMjA0OCB8fCAocGl4LT53aWR0aCAmIDB4MDEpOworfQorCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmEtPmM7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJc3RydWN0IHNvY19jYW1lcmFfc2Vuc2Ugc2Vuc2UgPSB7CiAJCS5tYXN0ZXJfY2xvY2sgPSBwY2Rldi0+bWNsaywKIAkJLnBpeGVsX2Nsb2NrX21heCA9IHBjZGV2LT5jaWNsayAvIDQsCiAJfTsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4LCBwaXhfdG1wOworCXN0cnVjdCBweGFfY2FtICpjYW0gPSBpY2QtPmhvc3RfcHJpdjsKIAlpbnQgcmV0OwogCiAJLyogSWYgUENMSyBpcyB1c2VkIHRvIGxhdGNoIGRhdGEgZnJvbSB0aGUgc2Vuc29yLCBjaGVjayBzZW5zZSAqLwogCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX1BDTEtfRU4pCiAJCWljZC0+c2Vuc2UgPSAmc2Vuc2U7CiAKLQlyZXQgPSBpY2QtPm9wcy0+c2V0X2Nyb3AoaWNkLCByZWN0KTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19jcm9wLCBhKTsKIAogCWljZC0+c2Vuc2UgPSBOVUxMOwogCiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X3dhcm4oaWNpLT5kZXYsICJGYWlsZWQgdG8gY3JvcCB0byAldXgldUAldToldVxuIiwKKwkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIGNyb3AgdG8gJXV4JXVAJXU6JXVcbiIsCiAJCQkgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKLQl9IGVsc2UgaWYgKHNlbnNlLmZsYWdzICYgU09DQU1fU0VOU0VfUENMS19DSEFOR0VEKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJZi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfZm10LCAmZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlwaXhfdG1wID0gKnBpeDsKKwlpZiAocHhhX2NhbWVyYV9jaGVja19mcmFtZShwaXgpKSB7CisJCS8qCisJCSAqIENhbWVyYSBjcm9wcGluZyBwcm9kdWNlZCBhIGZyYW1lIGJleW9uZCBvdXIgY2FwYWJpbGl0aWVzLgorCQkgKiBGSVhNRToganVzdCBleHRyYWN0IGEgc3ViZnJhbWUsIHRoYXQgd2UgY2FuIHByb2Nlc3MuCisJCSAqLworCQl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJnBpeC0+d2lkdGgsIDQ4LCAyMDQ4LCAxLAorCQkJJnBpeC0+aGVpZ2h0LCAzMiwgMjA0OCwgMCwKKwkJCWljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVVWNDIyUCA/CisJCQkJNCA6IDApOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsICZmKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChweGFfY2FtZXJhX2NoZWNrX2ZyYW1lKHBpeCkpIHsKKwkJCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwKKwkJCQkgIkluY29uc2lzdGVudCBzdGF0ZS4gVXNlIFNfRk1UIHRvIHJlcGFpclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmIChzZW5zZS5mbGFncyAmIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCkgewogCQlpZiAoc2Vuc2UucGl4ZWxfY2xvY2sgPiBzZW5zZS5waXhlbF9jbG9ja19tYXgpIHsKLQkJCWRldl9lcnIoaWNpLT5kZXYsCisJCQlkZXZfZXJyKGRldiwKIAkJCQkicGl4ZWwgY2xvY2sgJWx1IHNldCBieSB0aGUgY2FtZXJhIHRvbyBoaWdoISIsCiAJCQkJc2Vuc2UucGl4ZWxfY2xvY2spOwogCQkJcmV0dXJuIC1FSU87CkBAIC0xMzE1LDYgKzEzOTQsMTEgQEAKIAkJcmVjYWxjdWxhdGVfZmlmb190aW1lb3V0KHBjZGV2LCBzZW5zZS5waXhlbF9jbG9jayk7CiAJfQogCisJaWNkLT51c2VyX3dpZHRoID0gcGl4LT53aWR0aDsKKwlpY2QtPnVzZXJfaGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisKKwlweGFfY2FtZXJhX3NldHVwX2NpY3IoaWNkLCBjYW0tPmZsYWdzLCBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTMyMyw2ICsxNDA3LDggQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY2FtX2ZtdCA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSA9IE5VTEw7CiAJc3RydWN0IHNvY19jYW1lcmFfc2Vuc2Ugc2Vuc2UgPSB7CkBAIC0xMzM1LDcgKzE0MjEsNyBAQAogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOwogCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJZGV2X3dhcm4oZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4LT5waXhlbGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTM0NiwxNiArMTQzMiwyMSBAQAogCQlpY2QtPnNlbnNlID0gJnNlbnNlOwogCiAJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IGNhbV9mbXQtPmZvdXJjYzsKLQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsICZjYW1fZik7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKIAogCWljZC0+c2Vuc2UgPSBOVUxMOwogCiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X3dhcm4oaWNpLT5kZXYsICJGYWlsZWQgdG8gY29uZmlndXJlIGZvciBmb3JtYXQgJXhcbiIsCisJCWRldl93YXJuKGRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgZm9yIGZvcm1hdCAleFxuIiwKIAkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKKwl9IGVsc2UgaWYgKHB4YV9jYW1lcmFfY2hlY2tfZnJhbWUocGl4KSkgeworCQlkZXZfd2FybihkZXYsCisJCQkgIkNhbWVyYSBkcml2ZXIgcHJvZHVjZWQgYW4gdW5zdXBwb3J0ZWQgZnJhbWUgJWR4JWRcbiIsCisJCQkgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQlyZXQgPSAtRUlOVkFMOwogCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKIAkJaWYgKHNlbnNlLnBpeGVsX2Nsb2NrID4gc2Vuc2UucGl4ZWxfY2xvY2tfbWF4KSB7Ci0JCQlkZXZfZXJyKGljaS0+ZGV2LAorCQkJZGV2X2VycihkZXYsCiAJCQkJInBpeGVsIGNsb2NrICVsdSBzZXQgYnkgdGhlIGNhbWVyYSB0b28gaGlnaCEiLAogCQkJCXNlbnNlLnBpeGVsX2Nsb2NrKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtMTM3NSw2ICsxNDY2LDcgQEAKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCV9fdTMyIHBpeGZtdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CkBAIC0xMzgzLDcgKzE0NzUsNyBAQAogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKCF4bGF0ZSkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCWRldl93YXJuKGljaS0+djRsMl9kZXYuZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMzk1LDcgKzE0ODcsNyBAQAogCSAqLwogCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcGl4LT53aWR0aCwgNDgsIDIwNDgsIDEsCiAJCQkgICAgICAmcGl4LT5oZWlnaHQsIDMyLCAyMDQ4LCAwLAotCQkJICAgICAgeGxhdGUtPmhvc3RfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyMlAgPyA0IDogMCk7CisJCQkgICAgICBwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVVjQyMlAgPyA0IDogMCk7CiAKIAlwaXgtPmJ5dGVzcGVybGluZSA9IHBpeC0+d2lkdGggKgogCQlESVZfUk9VTkRfVVAoeGxhdGUtPmhvc3RfZm10LT5kZXB0aCwgOCk7CkBAIC0xNDA0LDE1ICsxNDk2LDE1IEBACiAJLyogY2FtZXJhIGhhcyB0byBzZWUgaXRzIGZvcm1hdCwgYnV0IHRoZSB1c2VyIHRoZSBvcmlnaW5hbCBvbmUgKi8KIAlwaXgtPnBpeGVsZm9ybWF0ID0geGxhdGUtPmNhbV9mbXQtPmZvdXJjYzsKIAkvKiBsaW1pdCB0byBzZW5zb3IgY2FwYWJpbGl0aWVzICovCi0JcmV0ID0gaWNkLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKLQlwaXgtPnBpeGVsZm9ybWF0ID0geGxhdGUtPmhvc3RfZm10LT5mb3VyY2M7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9mbXQsIGYpOworCXBpeC0+cGl4ZWxmb3JtYXQgPSBwaXhmbXQ7CiAKIAlmaWVsZCA9IHBpeC0+ZmllbGQ7CiAKIAlpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpIHsKIAkJcGl4LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAl9IGVsc2UgaWYgKGZpZWxkICE9IFY0TDJfRklFTERfTk9ORSkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkZpZWxkIHR5cGUgJWQgdW5zdXBwb3J0ZWQuXG4iLCBmaWVsZCk7CisJCWRldl9lcnIoaWNkLT5kZXYucGFyZW50LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsIGZpZWxkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNTE4LDYgKzE2MTAsNyBAQAogCS5yZXN1bWUJCT0gcHhhX2NhbWVyYV9yZXN1bWUsCiAJLnNldF9jcm9wCT0gcHhhX2NhbWVyYV9zZXRfY3JvcCwKIAkuZ2V0X2Zvcm1hdHMJPSBweGFfY2FtZXJhX2dldF9mb3JtYXRzLAorCS5wdXRfZm9ybWF0cwk9IHB4YV9jYW1lcmFfcHV0X2Zvcm1hdHMsCiAJLnNldF9mbXQJPSBweGFfY2FtZXJhX3NldF9mbXQsCiAJLnRyeV9mbXQJPSBweGFfY2FtZXJhX3RyeV9mbXQsCiAJLmluaXRfdmlkZW9idWYJPSBweGFfY2FtZXJhX2luaXRfdmlkZW9idWYsCkBAIC0xNTc1LDggKzE2NjgsNyBAQAogCQlwY2Rldi0+bWNsayA9IDIwMDAwMDAwOwogCX0KIAotCXBjZGV2LT5zb2NfaG9zdC5kZXYgPSAmcGRldi0+ZGV2OwotCXBjZGV2LT5tY2xrX2Rpdmlzb3IgPSBtY2xrX2dldF9kaXZpc29yKHBjZGV2KTsKKwlwY2Rldi0+bWNsa19kaXZpc29yID0gbWNsa19nZXRfZGl2aXNvcihwZGV2LCBwY2Rldik7CiAKIAlJTklUX0xJU1RfSEVBRCgmcGNkZXYtPmNhcHR1cmUpOwogCXNwaW5fbG9ja19pbml0KCZwY2Rldi0+bG9jayk7CkBAIC0xNjQxLDYgKzE3MzMsNyBAQAogCXBjZGV2LT5zb2NfaG9zdC5kcnZfbmFtZQk9IFBYQV9DQU1fRFJWX05BTUU7CiAJcGNkZXYtPnNvY19ob3N0Lm9wcwkJPSAmcHhhX3NvY19jYW1lcmFfaG9zdF9vcHM7CiAJcGNkZXYtPnNvY19ob3N0LnByaXYJCT0gcGNkZXY7CisJcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldgk9ICZwZGV2LT5kZXY7CiAJcGNkZXYtPnNvY19ob3N0Lm5yCQk9IHBkZXYtPmlkOwogCiAJZXJyID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKCZwY2Rldi0+c29jX2hvc3QpOwpAQCAtMTcyMiwzICsxODE1LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUFhBMjd4IFNvQyBDYW1lcmEgSG9zdCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIFBYQV9DQU1fRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggMWIyOTQ4Ny4uNzExNDViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC00MTY0LDcgKzQxNjQsNyBAQAogCQkvKkRtaXRyeSBCZWxpbW92IDxkLmJlbGltb3ZAZ21haWwuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNTA1IFJEUyIsCiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAyMDAwMDAsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAvKiBGSVhNRSB0byBNSzUgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNSzUsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULApAQCAtNDIyOSw3ICs0MjI5LDcgQEAKIAkJLypEbWl0cnkgQmVsaW1vdiA8ZC5iZWxpbW92QGdtYWlsLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDUwNyBSRFMiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAotCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgLyogRklYTUUgdG8gTUs1ICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUs1LAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKQEAgLTQzODAsNyArNDM4MCw3IEBACiAJCS8qIEFuZHJleSBNZWxuaWtvZmYgPHRlbW5vdGFAa212LnJ1PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNjA3IEZNIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKLQkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC8qIEZJWE1FIHRvIE1LNSAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1LNSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC00NDA4LDcgKzQ0MDgsNyBAQAogCQkvKiBBbmRyZXkgTWVsbmlrb2ZmIDx0ZW1ub3RhQGttdi5ydT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDYwOSBGTSIsCiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAvKiBGSVhNRSB0byBNSzUgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNSzUsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULApAQCAtNDQ5NCw3ICs0NDk0LDcgQEAKIAkJLyogQW5kcmV5IE1lbG5pa29mZiA8dGVtbm90YUBrbXYucnU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA2MDcgUkRTIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKLQkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC8qIEZJWE1FIHRvIE1LNSAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1LNSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC00NTIzLDcgKzQ1MjMsNyBAQAogCQkvKiBBbmRyZXkgTWVsbmlrb2ZmIDx0ZW1ub3RhQGttdi5ydT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDYwOSBSRFMiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAotCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgLyogRklYTUUgdG8gTUs1ICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUs1LAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKQEAgLTQ2MzAsNyArNDYzMCw3IEBACiAJCS8qIEFsZXhleSBPc2lwb3YgPGxpb24tc2ltYmFAcHJpZGVsYW5kcy5ydT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIE02IEV4dHJhIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKLQkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC8qIEZJWE1FIHRvIE1LNSAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1LNSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC01MjU3LDYgKzUyNTcsMjcgQEAKIAkJCS5hbXV4ID0gVFYsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9aT0xJRF9IWUJSSURfUENJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlpvbGlkIEh5YnJpZCBUViBUdW5lciBQQ0kiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudHVuZXJfY29uZmlnICAgPSAwLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkudHNfdHlwZQk9IFNBQTcxMzRfTVBFR19UU19QQVJBTExFTCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0gfSwKKwkJLnJhZGlvID0gewkvKiB1bnRlc3RlZCAqLworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJfSwKKwl9LAogCiB9OwogCkBAIC02MzkwLDYgKzY0MTEsMTIgQEAKIAkJLnN1YmRldmljZSAgICA9IDB4MDEzOCwgLyogTGlmZVZpZXcgRmx5VFYgUHJpbWUzMCBPRU0gKi8KIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfUk9WRVJNRURJQV9MSU5LX1BST19GTSwKIAl9LCB7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLnN1YmRldmljZSAgICA9IDB4MjAwNCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfWk9MSURfSFlCUklEX1BDSSwKKwl9LCB7CiAJCS8qIC0tLSBib2FyZHMgd2l0aG91dCBlZXByb20gKyBzdWJzeXN0ZW0gSUQgLS0tICovCiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKQEAgLTcyMDgsMjIgKzcyMzUsMjIgQEAKIAkJaWYgKGRldi0+cmFkaW9fdHlwZSAhPSBVTlNFVCkKIAkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJZGV2LT5yYWRpb19hZGRyKTsKKwkJCQlkZXYtPnJhZGlvX2FkZHIsIE5VTEwpOwogCQlpZiAoaGFzX2RlbW9kKQotCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+djRsMl9kZXYsCisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19hZGFwLCAidHVuZXIiLCAidHVuZXIiLAotCQkJCXY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCQkJMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKIAkJaWYgKGRldi0+dHVuZXJfYWRkciA9PSBBRERSX1VOU0VUKSB7CiAJCQllbnVtIHY0bDJfaTJjX3R1bmVyX3R5cGUgdHlwZSA9CiAJCQkJaGFzX2RlbW9kID8gQUREUlNfVFZfV0lUSF9ERU1PRCA6IEFERFJTX1RWOwogCi0JCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT52NGwyX2RldiwKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJdjRsMl9pMmNfdHVuZXJfYWRkcnModHlwZSkpOworCQkJCTAsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKHR5cGUpKTsKIAkJfSBlbHNlIHsKIAkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJZGV2LT50dW5lcl9hZGRyKTsKKwkJCQlkZXYtPnR1bmVyX2FkZHIsIE5VTEwpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggY2I3OGM5NS4uZjg3NzU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9CiAJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKIAkJCQkic2FhNjc1MmhzIiwgInNhYTY3NTJocyIsCi0JCQkJc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0uZW1wcmVzc19hZGRyKTsKKwkJCQlzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5lbXByZXNzX2FkZHIsIE5VTEwpOwogCiAJCWlmIChzZCkKIAkJCXNkLT5ncnBfaWQgPSBHUlBfRU1QUkVTUzsKQEAgLTEwMDksOSArMTAwOSw5IEBACiAJaWYgKHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJkc19hZGRyKSB7CiAJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZkZXYtPnY0bDJfZGV2LAorCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2FkYXAsCSJzYWE2NTg4IiwgInNhYTY1ODgiLAotCQkJCXNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJkc19hZGRyKTsKKwkJCQkwLCBJMkNfQUREUlMoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmRzX2FkZHIpKTsKIAkJaWYgKHNkKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgUkRTIGRlY29kZXJcbiIsIGRldi0+bmFtZSk7CiAJCQlkZXYtPmhhc19yZHMgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCBlYmRlMjFkLi5hMjZlOTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtMTAwNywxMiArMTAwNywyOSBAQAogCS5zdGRfbWFwID0gJmhhdXBwYXVnZV90ZGExODI3MV9zdGRfbWFwLAogCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCiAJLmNvbmZpZyAgPSAzLAorCS5vdXRwdXRfb3B0ID0gVERBMTgyNzFfT1VUUFVUX0xUX09GRiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdGRhODI5eF9jb25maWcgdGRhODI5eF9ub19wcm9iZSA9IHsKIAkucHJvYmVfdHVuZXIgPSBUREE4MjlYX0RPTlRfUFJPQkUsCiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTEwMDQ4X2NvbmZpZyB6b2xpZF90ZGExMDA0OF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgICAgPSAweDEwID4+IDEsCisJLm91dHB1dF9tb2RlICAgICAgPSBUREExMDA0OF9QQVJBTExFTF9PVVRQVVQsCisJLmZ3YnVsa3dyaXRlbGVuICAgPSBUREExMDA0OF9CVUxLV1JJVEVfMjAwLAorCS5pbnZlcnNpb24gICAgICAgID0gVERBMTAwNDhfSU5WRVJTSU9OX09OLAorCS5kdHY2X2lmX2ZyZXFfa2h6ID0gVERBMTAwNDhfSUZfMzMwMCwKKwkuZHR2N19pZl9mcmVxX2toeiA9IFREQTEwMDQ4X0lGXzM1MDAsCisJLmR0djhfaWZfZnJlcV9raHogPSBUREExMDA0OF9JRl80MDAwLAorCS5jbGtfZnJlcV9raHogICAgID0gVERBMTAwNDhfQ0xLXzE2MDAwLAorCS5kaXNhYmxlX2dhdGVfYWNjZXNzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIHpvbGlkX3RkYTE4MjcxX2NvbmZpZyA9IHsKKwkuZ2F0ZSAgICA9IFREQTE4MjcxX0dBVEVfQU5BTE9HLAorfTsKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBDb3JlIGNvZGUKICAqLwpAQCAtMTQ4OCw2ICsxNTA1LDE5IEBACiAJCQkJCV9fZnVuY19fKTsKIAogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfWk9MSURfSFlCUklEX1BDSToKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ4X2F0dGFjaCwKKwkJCQkJICAgICAgICZ6b2xpZF90ZGExMDA0OF9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAmZGV2LT5pMmNfYWRhcCwgMHg0YiwKKwkJCQkgICAmdGRhODI5eF9ub19wcm9iZSk7CisJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgMHg2MCwgJmRldi0+aTJjX2FkYXAsCisJCQkJICAgJnpvbGlkX3RkYTE4MjcxX2NvbmZpZyk7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJd3ByaW50aygiSHVoPyB1bmtub3duIERWQiBjYXJkP1xuIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggZTFlODNjNy4uYTBlOGM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0yNTEsNiArMjUxLDEwIEBACiAJaWYgKGRhdGFbMTBdICE9IDB4NmIgJiYgZGF0YVsxMV0gIT0gMHg4NiAmJiBkaXNhYmxlX290aGVyX2lyKQogCQlyZXR1cm4gMDsKIAorCS8qIFdyb25nIGRhdGEgZGVjb2RlIGZpeCAqLworCWlmIChkYXRhWzldICE9ICh1bnNpZ25lZCBjaGFyKSh+ZGF0YVs4XSkpCisJCXJldHVybiAwOworCiAJKmlyX2tleSA9IGRhdGFbOV07CiAJKmlyX3JhdyA9IGRhdGFbOV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IGQxOGJiOTYuLjZlZTNlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMjk2LDYgKzI5Niw3IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT181MDUgIDE3MAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9YNyAgICAgICAgICAgICAxNzEKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9ST1ZFUk1FRElBX0xJTktfUFJPX0ZNIDE3MgorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1pPTElEX0hZQlJJRF9QQ0kJCTE3MwogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDMyCiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzMjYzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9LY29uZmlnCkBAIC0wLDAgKzEsMTggQEAKK2NvbmZpZyBWSURFT19TQUE3MTY0CisJdHJpc3RhdGUgIk5YUCBTQUE3MTY0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCisJc2VsZWN0IEkyQ19BTEdPQklUCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBWSURFT19UVkVFUFJPTQorCXNlbGVjdCBWSURFT0JVRl9EVkIKKwlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TNUgxNDExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBOWFAgU0FBNzE2NCBiYXNlZAorCSAgVFYgY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxNjQKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzI5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMiBAQAorc2FhNzE2NC1vYmpzCTo9IHNhYTcxNjQtY2FyZHMubyBzYWE3MTY0LWNvcmUubyBzYWE3MTY0LWkyYy5vIHNhYTcxNjQtZHZiLm8gXAorCQkJc2FhNzE2NC1mdy5vIHNhYTcxNjQtYnVzLm8gc2FhNzE2NC1jbWQubyBzYWE3MTY0LWFwaS5vIFwKKwkJCXNhYTcxNjQtYnVmZmVyLm8KKworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxNjQpICs9IHNhYTcxNjQubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKKworRVhUUkFfQ0ZMQUdTICs9ICQoZXh0cmEtY2ZsYWdzLXkpICQoZXh0cmEtY2ZsYWdzLW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmRmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwpAQCAtMCwwICsxLDYwMCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKyNpbmNsdWRlICJzYWE3MTY0LmgiCisKK2ludCBzYWE3MTY0X2FwaV90cmFuc2l0aW9uX3BvcnQoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0LCB1OCBtb2RlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKHBvcnQtPmRldiwgcG9ydC0+aHdjZmcudW5pdGlkLCBTRVRfQ1VSLAorCQlTQUFfU1RBVEVfQ09OVFJPTCwgc2l6ZW9mKG1vZGUpLCAmbW9kZSk7CisJaWYgKHJldCAhPSBTQUFfT0spCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2FhNzE2NF9hcGlfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHUzMiAqdmVyc2lvbikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChkZXYsIDAsIEdFVF9DVVIsCisJCUdFVF9GV19WRVJTSU9OX0NPTlRST0wsIHNpemVvZih1MzIpLCB2ZXJzaW9uKTsKKwlpZiAocmV0ICE9IFNBQV9PSykKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBzYWE3MTY0X2FwaV9yZWFkX2VlcHJvbShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwl1OCByZWdbXSA9IHsgMHgwZiwgMHgwMCB9OworCisJaWYgKGJ1ZmxlbiA8IDEyOCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBBc3N1bXB0aW9uOiBIYXVwcGF1Z2UgZWVwcm9tIGlzIGF0IDB4YTAgb24gb24gYnVzIDAgKi8KKwkvKiBUT0RPOiBQdWxsIHRoZSBkZXRhaWxzIGZyb20gdGhlIGJvYXJkcyBzdHJ1Y3QgKi8KKwlyZXR1cm4gc2FhNzE2NF9hcGlfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgMHhhMCA+PiAxLCBzaXplb2YocmVnKSwKKwkJJnJlZ1swXSwgMTI4LCBidWYpOworfQorCisKK2ludCBzYWE3MTY0X2FwaV9jb25maWd1cmVfcG9ydF9tcGVnMnRzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LAorCXN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCwKKwl0bUNvbVJlc1RTRm9ybWF0RGVzY3JIZWFkZXJfdCAqdHNmbXQpCit7CisJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgIGJGb3JtYXRJbmRleCA9IDB4JXhcbiIsIHRzZm10LT5iRm9ybWF0SW5kZXgpOworCWRwcmludGsoREJHTFZMX0FQSSwgIiAgICBiRGF0YU9mZnNldCAgPSAweCV4XG4iLCB0c2ZtdC0+YkRhdGFPZmZzZXQpOworCWRwcmludGsoREJHTFZMX0FQSSwgIiAgICBiUGFja2V0TGVuZ3RoPSAweCV4XG4iLCB0c2ZtdC0+YlBhY2tldExlbmd0aCk7CisJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgIGJTdHJpZGVMZW5ndGg9IDB4JXhcbiIsIHRzZm10LT5iU3RyaWRlTGVuZ3RoKTsKKwlkcHJpbnRrKERCR0xWTF9BUEksICIgICAgYmd1aWQgICAgICAgID0gKC4uLi4pXG4iKTsKKworCS8qIENhY2hlIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGluIHRoZSBwb3J0ICovCisKKwlwb3J0LT5idWZjb3VudGVyID0gcG9ydC0+aHdjZmcuQkFSTG9jYXRpb247CisJcG9ydC0+cGl0Y2ggPSBwb3J0LT5od2NmZy5CQVJMb2NhdGlvbiArICgyICogc2l6ZW9mKHUzMikpOworCXBvcnQtPmJ1ZnNpemUgPSBwb3J0LT5od2NmZy5CQVJMb2NhdGlvbiArICgzICogc2l6ZW9mKHUzMikpOworCXBvcnQtPmJ1Zm9mZnNldCA9IHBvcnQtPmh3Y2ZnLkJBUkxvY2F0aW9uICsgKDQgKiBzaXplb2YodTMyKSk7CisJcG9ydC0+YnVmcHRyMzJsID0gcG9ydC0+aHdjZmcuQkFSTG9jYXRpb24gKworCQkoNCAqIHNpemVvZih1MzIpKSArCisJCShzaXplb2YodTMyKSAqIHBvcnQtPmh3Y2ZnLmJ1ZmZlcmNvdW50KSArIHNpemVvZih1MzIpOworCXBvcnQtPmJ1ZnB0cjMyaCA9IHBvcnQtPmh3Y2ZnLkJBUkxvY2F0aW9uICsKKwkJKDQgKiBzaXplb2YodTMyKSkgKworCQkoc2l6ZW9mKHUzMikgKiBwb3J0LT5od2NmZy5idWZmZXJjb3VudCk7CisJcG9ydC0+YnVmcHRyNjQgPSBwb3J0LT5od2NmZy5CQVJMb2NhdGlvbiArCisJCSg0ICogc2l6ZW9mKHUzMikpICsKKwkJKHNpemVvZih1MzIpICogcG9ydC0+aHdjZmcuYnVmZmVyY291bnQpOworCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gcG9ydC0+aHdjZmcuQkFSTG9jYXRpb24gPSAweCV4XG4iLAorCQlwb3J0LT5od2NmZy5CQVJMb2NhdGlvbik7CisKKwlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IFZTX0ZPUk1BVF9NUEVHVFMgKGJlY29tZXMgZGV2LT50c1slZF0pXG4iLAorCQlwb3J0LT5ucik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNhYTcxNjRfYXBpX2R1bXBfc3ViZGV2cyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQgPSAwOworCXUzMiBpZHgsIG5leHRfb2Zmc2V0OworCWludCBpOworCXRtQ29tUmVzRGVzY3JIZWFkZXJfdCAqaGRyLCAqdDsKKwl0bUNvbVJlc0V4dERldkRlc2NySGVhZGVyX3QgKmV4dGhkcjsKKwl0bUNvbVJlc1BhdGhEZXNjckhlYWRlcl90ICpwYXRoaGRyOworCXRtQ29tUmVzQW50VGVybURlc2NySGVhZGVyX3QgKmFudHRlcm1oZHI7CisJdG1Db21SZXNUdW5lckRlc2NySGVhZGVyX3QgKnR1bmVydW5pdGhkcjsKKwl0bUNvbVJlc0RNQVRlcm1EZXNjckhlYWRlcl90ICp2Y291dHB1dHRlcm1oZHI7CisJdG1Db21SZXNUU0Zvcm1hdERlc2NySGVhZGVyX3QgKnRzZm10OworCXUzMiBjdXJycGF0aCA9IDA7CisKKwlkcHJpbnRrKERCR0xWTF9BUEksCisJCSIlcyg/LD8sJWQpIHNpemVvZih0bUNvbVJlc0Rlc2NySGVhZGVyX3QpID0gJWQgYnl0ZXNcbiIsCisJCV9fZnVuY19fLCBsZW4sICh1MzIpc2l6ZW9mKHRtQ29tUmVzRGVzY3JIZWFkZXJfdCkpOworCisJZm9yIChpZHggPSAwOyBpZHggPCAobGVuIC0gc2l6ZW9mKHRtQ29tUmVzRGVzY3JIZWFkZXJfdCkpOyApIHsKKworCQloZHIgPSAodG1Db21SZXNEZXNjckhlYWRlcl90ICopKGJ1ZiArIGlkeCk7CisKKwkJaWYgKGhkci0+dHlwZSAhPSBDU19JTlRFUkZBQ0UpCisJCQlyZXR1cm4gU0FBX0VSUl9OT1RfU1VQUE9SVEVEOworCisJCWRwcmludGsoREJHTFZMX0FQSSwgIkAgMHgleCA9IFxuIiwgaWR4KTsKKwkJc3dpdGNoIChoZHItPnN1YnR5cGUpIHsKKwkJY2FzZSBHRU5FUkFMX1JFUVVFU1Q6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgR0VORVJBTF9SRVFVRVNUXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFZDX1RVTkVSX1BBVEg6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgVkNfVFVORVJfUEFUSFxuIik7CisJCQlwYXRoaGRyID0gKHRtQ29tUmVzUGF0aERlc2NySGVhZGVyX3QgKikoYnVmICsgaWR4KTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgcGF0aGlkID0gMHgleFxuIiwKKwkJCQlwYXRoaGRyLT5wYXRoaWQpOworCQkJY3VycnBhdGggPSBwYXRoaGRyLT5wYXRoaWQ7CisJCQlicmVhazsKKwkJY2FzZSBWQ19JTlBVVF9URVJNSU5BTDoKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBWQ19JTlBVVF9URVJNSU5BTFxuIik7CisJCQlhbnR0ZXJtaGRyID0KKwkJCQkodG1Db21SZXNBbnRUZXJtRGVzY3JIZWFkZXJfdCAqKShidWYgKyBpZHgpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB0ZXJtaW5hbGlkICAgPSAweCV4XG4iLAorCQkJCWFudHRlcm1oZHItPnRlcm1pbmFsaWQpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB0ZXJtaW5hbHR5cGUgPSAweCV4XG4iLAorCQkJCWFudHRlcm1oZHItPnRlcm1pbmFsdHlwZSk7CisJCQlzd2l0Y2ggKGFudHRlcm1oZHItPnRlcm1pbmFsdHlwZSkgeworCQkJY2FzZSBJVFRfQU5URU5OQToKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IElUVF9BTlRFTk5BXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTElORV9DT05ORUNUT1I6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBMSU5FX0NPTk5FQ1RPUlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNQRElGX0NPTk5FQ1RPUjoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IFNQRElGX0NPTk5FQ1RPUlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTVBPU0lURV9DT05ORUNUT1I6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLAorCQkJCQkiICAgPSBDT01QT1NJVEVfQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1ZJREVPX0NPTk5FQ1RPUjoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IFNWSURFT19DT05ORUNUT1JcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBDT01QT05FTlRfQ09OTkVDVE9SOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgID0gQ09NUE9ORU5UX0NPTk5FQ1RPUlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUQU5EQVJEX0RNQToKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IFNUQU5EQVJEX0RNQVxuIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gdW5kZWZpbmVkICgweCV4KVxuIiwKKwkJCQkJYW50dGVybWhkci0+dGVybWluYWx0eXBlKTsKKwkJCX0KKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgYXNzb2N0ZXJtaW5hbD0gMHgleFxuIiwKKwkJCQlhbnR0ZXJtaGRyLT5hc3NvY3Rlcm1pbmFsKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgaXRlcm1pbmFsICAgID0gMHgleFxuIiwKKwkJCQlhbnR0ZXJtaGRyLT5pdGVybWluYWwpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBjb250cm9sc2l6ZSAgPSAweCV4XG4iLAorCQkJCWFudHRlcm1oZHItPmNvbnRyb2xzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFZDX09VVFBVVF9URVJNSU5BTDoKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBWQ19PVVRQVVRfVEVSTUlOQUxcbiIpOworCQkJdmNvdXRwdXR0ZXJtaGRyID0KKwkJCQkodG1Db21SZXNETUFUZXJtRGVzY3JIZWFkZXJfdCAqKShidWYgKyBpZHgpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB1bml0aWQgPSAweCV4XG4iLAorCQkJCXZjb3V0cHV0dGVybWhkci0+dW5pdGlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgdGVybWluYWx0eXBlID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPnRlcm1pbmFsdHlwZSk7CisJCQlzd2l0Y2ggKHZjb3V0cHV0dGVybWhkci0+dGVybWluYWx0eXBlKSB7CisJCQljYXNlIElUVF9BTlRFTk5BOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gSVRUX0FOVEVOTkFcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBMSU5FX0NPTk5FQ1RPUjoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IExJTkVfQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1BESUZfQ09OTkVDVE9SOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gU1BESUZfQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09NUE9TSVRFX0NPTk5FQ1RPUjoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IENPTVBPU0lURV9DT05ORUNUT1JcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVklERU9fQ09OTkVDVE9SOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gU1ZJREVPX0NPTk5FQ1RPUlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTVBPTkVOVF9DT05ORUNUT1I6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLAorCQkJCQkiICAgPSBDT01QT05FTlRfQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RBTkRBUkRfRE1BOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gU1RBTkRBUkRfRE1BXG4iKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSB1bmRlZmluZWQgKDB4JXgpXG4iLAorCQkJCQl2Y291dHB1dHRlcm1oZHItPnRlcm1pbmFsdHlwZSk7CisJCQl9CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGFzc29jdGVybWluYWw9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5hc3NvY3Rlcm1pbmFsKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgc291cmNlaWQgICAgID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPnNvdXJjZWlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgaXRlcm1pbmFsICAgID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPml0ZXJtaW5hbCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIEJBUkxvY2F0aW9uICA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5CQVJMb2NhdGlvbik7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGZsYWdzICAgICAgICA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5mbGFncyk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGludGVycnVwdGlkICA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5pbnRlcnJ1cHRpZCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGJ1ZmZlcmNvdW50ICA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5idWZmZXJjb3VudCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIG1ldGFkYXRhc2l6ZSA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5tZXRhZGF0YXNpemUpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBjb250cm9sc2l6ZSAgPSAweCV4XG4iLAorCQkJCXZjb3V0cHV0dGVybWhkci0+Y29udHJvbHNpemUpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBudW1mb3JtYXRzICAgPSAweCV4XG4iLAorCQkJCXZjb3V0cHV0dGVybWhkci0+bnVtZm9ybWF0cyk7CisKKwkJCXQgPSAodG1Db21SZXNEZXNjckhlYWRlcl90ICopCisJCQkJKCh0bUNvbVJlc0RNQVRlcm1EZXNjckhlYWRlcl90ICopKGJ1ZiArIGlkeCkpOworCQkJbmV4dF9vZmZzZXQgPSBpZHggKyAodmNvdXRwdXR0ZXJtaGRyLT5sZW4pOworCQkJZm9yIChpID0gMDsgaSA8IHZjb3V0cHV0dGVybWhkci0+bnVtZm9ybWF0czsgaSsrKSB7CisJCQkJdCA9ICh0bUNvbVJlc0Rlc2NySGVhZGVyX3QgKikKKwkJCQkJKGJ1ZiArIG5leHRfb2Zmc2V0KTsKKwkJCQlzd2l0Y2ggKHQtPnN1YnR5cGUpIHsKKwkJCQljYXNlIFZTX0ZPUk1BVF9NUEVHMlRTOgorCQkJCQl0c2ZtdCA9CisJCQkJCSh0bUNvbVJlc1RTRm9ybWF0RGVzY3JIZWFkZXJfdCAqKXQ7CisJCQkJCWlmIChjdXJycGF0aCA9PSAxKQorCQkJCQkJcG9ydCA9ICZkZXYtPnRzMTsKKwkJCQkJZWxzZQorCQkJCQkJcG9ydCA9ICZkZXYtPnRzMjsKKwkJCQkJbWVtY3B5KCZwb3J0LT5od2NmZywgdmNvdXRwdXR0ZXJtaGRyLAorCQkJCQkJc2l6ZW9mKCp2Y291dHB1dHRlcm1oZHIpKTsKKwkJCQkJc2FhNzE2NF9hcGlfY29uZmlndXJlX3BvcnRfbXBlZzJ0cyhkZXYsCisJCQkJCQlwb3J0LCB0c2ZtdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVlNfRk9STUFUX01QRUcyUFM6CisJCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJCSIgICA9IFZTX0ZPUk1BVF9NUEVHMlBTXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWU19GT1JNQVRfVkJJOgorCQkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCQkiICAgPSBWU19GT1JNQVRfVkJJXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWU19GT1JNQVRfUkRTOgorCQkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCQkiICAgPSBWU19GT1JNQVRfUkRTXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWU19GT1JNQVRfVU5DT01QUkVTU0VEOgorCQkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IFZTX0ZPUk1BVF9VTkNPTVBSRVNTRURcbiIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZTX0ZPUk1BVF9UWVBFOgorCQkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCQkiICAgPSBWU19GT1JNQVRfVFlQRVxuIik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJCSIgICA9IHVuZGVmaW5lZCAoMHgleClcbiIsCisJCQkJCQl0LT5zdWJ0eXBlKTsKKwkJCQl9CisJCQkJbmV4dF9vZmZzZXQgKz0gdC0+bGVuOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9VTklUOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIFRVTkVSX1VOSVRcbiIpOworCQkJdHVuZXJ1bml0aGRyID0KKwkJCQkodG1Db21SZXNUdW5lckRlc2NySGVhZGVyX3QgKikoYnVmICsgaWR4KTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgdW5pdGlkID0gMHgleFxuIiwKKwkJCQl0dW5lcnVuaXRoZHItPnVuaXRpZCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIHNvdXJjZWlkID0gMHgleFxuIiwKKwkJCQl0dW5lcnVuaXRoZHItPnNvdXJjZWlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgaXVuaXQgPSAweCV4XG4iLAorCQkJCXR1bmVydW5pdGhkci0+aXVuaXQpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB0dW5pbmdzdGFuZGFyZHMgPSAweCV4XG4iLAorCQkJCXR1bmVydW5pdGhkci0+dHVuaW5nc3RhbmRhcmRzKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgY29udHJvbHNpemUgPSAweCV4XG4iLAorCQkJCXR1bmVydW5pdGhkci0+Y29udHJvbHNpemUpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBjb250cm9scyA9IDB4JXhcbiIsCisJCQkJdHVuZXJ1bml0aGRyLT5jb250cm9scyk7CisJCQlicmVhazsKKwkJY2FzZSBWQ19TRUxFQ1RPUl9VTklUOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIFZDX1NFTEVDVE9SX1VOSVRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgVkNfUFJPQ0VTU0lOR19VTklUOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIFZDX1BST0NFU1NJTkdfVU5JVFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBGRUFUVVJFX1VOSVQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgRkVBVFVSRV9VTklUXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEVOQ09ERVJfVU5JVDoKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBFTkNPREVSX1VOSVRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRVhURU5TSU9OX1VOSVQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgRVhURU5TSU9OX1VOSVRcbiIpOworCQkJZXh0aGRyID0gKHRtQ29tUmVzRXh0RGV2RGVzY3JIZWFkZXJfdCAqKShidWYgKyBpZHgpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB1bml0aWQgPSAweCV4XG4iLAorCQkJCWV4dGhkci0+dW5pdGlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgZGV2aWNlaWQgPSAweCV4XG4iLAorCQkJCWV4dGhkci0+ZGV2aWNlaWQpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBkZXZpY2V0eXBlID0gMHgleFxuIiwKKwkJCQlleHRoZHItPmRldmljZXR5cGUpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4MSkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IERlY29kZXIgRGV2aWNlXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDIpCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBHUElPIFNvdXJjZVxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHg0KQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gVmlkZW8gRGVjb2RlclxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHg4KQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gQXVkaW8gRGVjb2RlclxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHgyMCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IENyb3NzYmFyXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDQwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gVHVuZXJcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4ODApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBJRiBQTExcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4MTAwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gRGVtb2R1bGF0b3JcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4MjAwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gUkRTIERlY29kZXJcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4NDAwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gRW5jb2RlclxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHg4MDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBJUiBEZWNvZGVyXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDEwMDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBFRVBST01cbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4MjAwMCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IFZCSSBEZWNvZGVyXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDEwMDAwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgID0gU3RyZWFtaW5nIERldmljZVxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHgyMDAwMCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IERSTSBEZXZpY2VcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4NDAwMDAwMDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLAorCQkJCQkiICAgPSBHZW5lcmljIERldmljZVxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHg4MDAwMDAwMCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IENvbmZpZyBTcGFjZSBEZXZpY2VcbiIpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBudW1ncGlvcGlucyA9IDB4JXhcbiIsCisJCQkJZXh0aGRyLT5udW1ncGlvcGlucyk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIG51bWdwaW9ncm91cHMgPSAweCV4XG4iLAorCQkJCWV4dGhkci0+bnVtZ3Bpb2dyb3Vwcyk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGNvbnRyb2xzaXplID0gMHgleFxuIiwKKwkJCQlleHRoZHItPmNvbnRyb2xzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFBWQ19JTkZSQVJFRF9VTklUOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIFBWQ19JTkZSQVJFRF9VTklUXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIERSTV9VTklUOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIERSTV9VTklUXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiZGVmYXVsdCAlZFxuIiwgaGRyLT5zdWJ0eXBlKTsKKwkJfQorCisJCWRwcmludGsoREJHTFZMX0FQSSwgIiAxLiV4XG4iLCBoZHItPmxlbik7CisJCWRwcmludGsoREJHTFZMX0FQSSwgIiAyLiV4XG4iLCBoZHItPnR5cGUpOworCQlkcHJpbnRrKERCR0xWTF9BUEksICIgMy4leFxuIiwgaGRyLT5zdWJ0eXBlKTsKKwkJZHByaW50ayhEQkdMVkxfQVBJLCAiIDQuJXhcbiIsIGhkci0+dW5pdGlkKTsKKworCQlpZHggKz0gaGRyLT5sZW47CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBzYWE3MTY0X2FwaV9lbnVtX3N1YmRldnMoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJaW50IHJldDsKKwl1MzIgYnVmbGVuID0gMDsKKwl1OCAqYnVmOworCisJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJLyogR2V0IHRoZSB0b3RhbCBkZXNjcmlwdG9yIGxlbmd0aCAqLworCXJldCA9IHNhYTcxNjRfY21kX3NlbmQoZGV2LCAwLCBHRVRfTEVOLAorCQlHRVRfREVTQ1JJUFRPUlNfQ09OVFJPTCwgc2l6ZW9mKGJ1ZmxlbiksICZidWZsZW4pOworCWlmIChyZXQgIT0gU0FBX09LKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOworCisJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoKSB0b3RhbCBkZXNjcmlwdG9yIHNpemUgPSAlZCBieXRlcy5cbiIsCisJCV9fZnVuY19fLCBidWZsZW4pOworCisJLyogQWxsb2NhdGUgZW5vdWdoIHN0b3JhZ2UgZm9yIGFsbCBvZiB0aGUgZGVzY3MgKi8KKwlidWYgPSBremFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gU0FBX0VSUl9OT19SRVNPVVJDRVM7CisKKwkvKiBSZXRyaWV2ZSB0aGVtICovCisJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChkZXYsIDAsIEdFVF9DVVIsCisJCUdFVF9ERVNDUklQVE9SU19DT05UUk9MLCBidWZsZW4sIGJ1Zik7CisJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRlYnVnICYgREJHTFZMX0FQSSkKKwkJc2FhNzE2NF9kdW1waGV4MTYoZGV2LCBidWYsIChidWZsZW4vMTYpKjE2KTsKKworCXNhYTcxNjRfYXBpX2R1bXBfc3ViZGV2cyhkZXYsIGJ1ZiwgYnVmbGVuKTsKKworb3V0OgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHNhYTcxNjRfYXBpX2kyY19yZWFkKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzLCB1OCBhZGRyLCB1MzIgcmVnbGVuLCB1OCAqcmVnLAorCXUzMiBkYXRhbGVuLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCXUxNiBsZW4gPSAwOworCWludCB1bml0aWQ7CisJdTMyIHJlZ3ZhbDsKKwl1OCBidWZbMjU2XTsKKwlpbnQgcmV0OworCisJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJaWYgKHJlZ2xlbiA+IDQpCisJCXJldHVybiAtRUlPOworCisJaWYgKHJlZ2xlbiA9PSAxKQorCQlyZWd2YWwgPSAqKHJlZyk7CisJZWxzZQorCWlmIChyZWdsZW4gPT0gMikKKwkJcmVndmFsID0gKCgqKHJlZykgPDwgOCkgfHwgKihyZWcrMSkpOworCWVsc2UKKwlpZiAocmVnbGVuID09IDMpCisJCXJlZ3ZhbCA9ICgoKihyZWcpIDw8IDE2KSB8ICgqKHJlZysxKSA8PCA4KSB8ICoocmVnKzIpKTsKKwllbHNlCisJaWYgKHJlZ2xlbiA9PSA0KQorCQlyZWd2YWwgPSAoKCoocmVnKSA8PCAyNCkgfCAoKihyZWcrMSkgPDwgMTYpIHwKKwkJCSgqKHJlZysyKSA8PCA4KSB8ICoocmVnKzMpKTsKKworCS8qIFByZXBhcmUgdGhlIHNlbmQgYnVmZmVyICovCisJLyogQnl0ZXMgMDAtMDMgc291cmNlIHJlZ2lzdGVyIGxlbmd0aAorCSAqICAgICAgIDA0LTA3IHNvdXJjZSBieXRlcyB0byByZWFkCisJICogICAgICAgMDguLi4gcmVnaXN0ZXIgYWRkcmVzcworCSAqLworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwltZW1jcHkoKGJ1ZiArIDIgKiBzaXplb2YodTMyKSArIDApLCByZWcsIHJlZ2xlbik7CisJKigodTMyICopKGJ1ZiArIDAgKiBzaXplb2YodTMyKSkpID0gcmVnbGVuOworCSooKHUzMiAqKShidWYgKyAxICogc2l6ZW9mKHUzMikpKSA9IGRhdGFsZW47CisKKwl1bml0aWQgPSBzYWE3MTY0X2kyY2FkZHJfdG9fdW5pdGlkKGJ1cywgYWRkcik7CisJaWYgKHVuaXRpZCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMoKSBlcnJvciwgY2Fubm90IHRyYW5zbGF0ZSByZWdhZGRyIDB4JXggdG8gdW5pdGlkXG4iLAorCQkJX19mdW5jX18sIGFkZHIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKGJ1cy0+ZGV2LCB1bml0aWQsIEdFVF9MRU4sCisJCUVYVV9SRUdJU1RFUl9BQ0NFU1NfQ09OVFJPTCwgc2l6ZW9mKGxlbiksICZsZW4pOworCWlmIChyZXQgIT0gU0FBX09LKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0KDEpID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRwcmludGsoREJHTFZMX0FQSSwgIiVzKCkgbGVuID0gJWQgYnl0ZXNcbiIsIF9fZnVuY19fLCBsZW4pOworCisJaWYgKGRlYnVnICYgREJHTFZMX0kyQykKKwkJc2FhNzE2NF9kdW1waGV4MTYoZGV2LCBidWYsIDIgKiAxNik7CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKGJ1cy0+ZGV2LCB1bml0aWQsIEdFVF9DVVIsCisJCUVYVV9SRUdJU1RFUl9BQ0NFU1NfQ09OVFJPTCwgbGVuLCAmYnVmKTsKKwlpZiAocmV0ICE9IFNBQV9PSykKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQoMikgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKKwllbHNlIHsKKwkJaWYgKGRlYnVnICYgREJHTFZMX0kyQykKKwkJCXNhYTcxNjRfZHVtcGhleDE2KGRldiwgYnVmLCBzaXplb2YoYnVmKSk7CisJCW1lbWNweShkYXRhLCAoYnVmICsgMiAqIHNpemVvZih1MzIpICsgcmVnbGVuKSwgZGF0YWxlbik7CisJfQorCisJcmV0dXJuIHJldCA9PSBTQUFfT0sgPyAwIDogLUVJTzsKK30KKworLyogRm9yIGEgZ2l2ZW4gOCBiaXQgaTJjIGFkZHJlc3MgZGV2aWNlLCB3cml0ZSB0aGUgYnVmZmVyICovCitpbnQgc2FhNzE2NF9hcGlfaTJjX3dyaXRlKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzLCB1OCBhZGRyLCB1MzIgZGF0YWxlbiwKKwl1OCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCXUxNiBsZW4gPSAwOworCWludCB1bml0aWQ7CisJaW50IHJlZ2xlbjsKKwl1OCBidWZbMjU2XTsKKwlpbnQgcmV0OworCisJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJaWYgKChkYXRhbGVuID09IDApIHx8IChkYXRhbGVuID4gMjMyKSkKKwkJcmV0dXJuIC1FSU87CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKwl1bml0aWQgPSBzYWE3MTY0X2kyY2FkZHJfdG9fdW5pdGlkKGJ1cywgYWRkcik7CisJaWYgKHVuaXRpZCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMoKSBlcnJvciwgY2Fubm90IHRyYW5zbGF0ZSByZWdhZGRyIDB4JXggdG8gdW5pdGlkXG4iLAorCQkJX19mdW5jX18sIGFkZHIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZWdsZW4gPSBzYWE3MTY0X2kyY2FkZHJfdG9fcmVnbGVuKGJ1cywgYWRkcik7CisJaWYgKHVuaXRpZCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMoKSBlcnJvciwgY2Fubm90IHRyYW5zbGF0ZSByZWdhZGRyIHRvIHJlZ2xlblxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChidXMtPmRldiwgdW5pdGlkLCBHRVRfTEVOLAorCQlFWFVfUkVHSVNURVJfQUNDRVNTX0NPTlRST0wsIHNpemVvZihsZW4pLCAmbGVuKTsKKwlpZiAocmV0ICE9IFNBQV9PSykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCgxKSA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkcHJpbnRrKERCR0xWTF9BUEksICIlcygpIGxlbiA9ICVkIGJ5dGVzXG4iLCBfX2Z1bmNfXywgbGVuKTsKKworCS8qIFByZXBhcmUgdGhlIHNlbmQgYnVmZmVyICovCisJLyogQnl0ZXMgMDAtMDMgZGVzdCByZWdpc3RlciBsZW5ndGgKKwkgKiAgICAgICAwNC0wNyBkZXN0IGJ5dGVzIHRvIHdyaXRlCisJICogICAgICAgMDguLi4gcmVnaXN0ZXIgYWRkcmVzcworCSAqLworCSooKHUzMiAqKShidWYgKyAwICogc2l6ZW9mKHUzMikpKSA9IHJlZ2xlbjsKKwkqKCh1MzIgKikoYnVmICsgMSAqIHNpemVvZih1MzIpKSkgPSBkYXRhbGVuIC0gcmVnbGVuOworCW1lbWNweSgoYnVmICsgMiAqIHNpemVvZih1MzIpKSwgZGF0YSwgZGF0YWxlbik7CisKKwlpZiAoZGVidWcgJiBEQkdMVkxfSTJDKQorCQlzYWE3MTY0X2R1bXBoZXgxNihkZXYsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChidXMtPmRldiwgdW5pdGlkLCBTRVRfQ1VSLAorCQlFWFVfUkVHSVNURVJfQUNDRVNTX0NPTlRST0wsIGxlbiwgJmJ1Zik7CisJaWYgKHJldCAhPSBTQUFfT0spCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0KDIpID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gcmV0ID09IFNBQV9PSyA/IDAgOiAtRUlPOworfQorCisKK2ludCBzYWE3MTY0X2FwaV9tb2RpZnlfZ3BpbyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggdW5pdGlkLAorCXU4IHBpbiwgdTggc3RhdGUpCit7CisJaW50IHJldDsKKwl0bUNvbVJlc0dQSU9fdCB0OworCisJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoMHgleCwgJWQsICVkKVxuIiwKKwkJX19mdW5jX18sIHVuaXRpZCwgcGluLCBzdGF0ZSk7CisKKwlpZiAoKHBpbiA+IDcpIHx8IChzdGF0ZSA+IDIpKQorCQlyZXR1cm4gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCisJdC5waW4gPSBwaW47CisJdC5zdGF0ZSA9IHN0YXRlOworCisJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChkZXYsIHVuaXRpZCwgU0VUX0NVUiwKKwkJRVhVX0dQSU9fQ09OVFJPTCwgc2l6ZW9mKHQpLCAmdCk7CisJaWYgKHJldCAhPSBTQUFfT0spCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHNhYTcxNjRfYXBpX3NldF9ncGlvYml0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCB1bml0aWQsCisJdTggcGluKQoreworCXJldHVybiBzYWE3MTY0X2FwaV9tb2RpZnlfZ3BpbyhkZXYsIHVuaXRpZCwgcGluLCAxKTsKK30KKworaW50IHNhYTcxNjRfYXBpX2NsZWFyX2dwaW9iaXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHVuaXRpZCwKKwl1OCBwaW4pCit7CisJcmV0dXJuIHNhYTcxNjRfYXBpX21vZGlmeV9ncGlvKGRldiwgdW5pdGlkLCBwaW4sIDApOworfQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVmZmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2E1YzgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVmZmVyLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgTlhQIFNBQTcxNjQgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAic2FhNzE2NC5oIgorCisvKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZm9yIGJ1ZmZlciBoYW5kbGluZyBsb29rcyBsaWtlIHRoaXM6CisKKyArLXUzMiB3aWRlLS0tLS0tLS0tLS0tLSsKKyB8ICAgICAgICAgICAgICAgICAgICAgICsKKyArLXU2NCB3aWRlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBDdXJyZW50QnVmZmVyUHRyICAgICArIFBvaW50ZXIgdG8gY3VycmVudCBQQ0kgYnVmZmVyID4tKworICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8IFVudXNlZCAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgUGl0Y2ggICAgICAgICAgICAgICAgKyA9IDE4OCAoYnl0ZXMpICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgfCBQQ0kgYnVmZmVyIHNpemUgICAgICArID0gcGl0Y2ggKiBudW1iZXIgb2YgbGluZXMgKDMxMikgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8MHwgQnVmMCBXcml0ZSBPZmZzZXQgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorIHwxfCBCdWYxIFdyaXRlIE9mZnNldCAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgfDJ8IEJ1ZjIgV3JpdGUgT2Zmc2V0ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8M3wgQnVmMyBXcml0ZSBPZmZzZXQgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIC4uLiBNb3JlIHdyaXRlIG9mZnNldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICB8CisgKzB8IHNldCBvZiBwdHJzIHRvIFBDSSBwYWdldGFibGVzICAgICAgICAgICAgICsgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgIHwKKyArMXwgc2V0IG9mIHB0cnMgdG8gUENJIHBhZ2V0YWJsZXMgICAgICAgICAgICAgKyA8LS0tLS0tLS0rCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyArMnwgc2V0IG9mIHB0cnMgdG8gUENJIHBhZ2V0YWJsZXMgICAgICAgICAgICAgKworICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKzN8IHNldCBvZiBwdHJzIHRvIFBDSSBwYWdldGFibGVzICAgICAgICAgICAgICsgPi0tKworICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgIHwKKyAuLi4gTW9yZSBidWZmZXIgcG9pbnRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsKKwkJCQkJCSAgICArLT58IHB0WzBdIFRTIGRhdGEgIHwKKwkJCQkJCSAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsKKwkJCQkJCSAgICB8CisJCQkJCQkgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0rCisJCQkJCQkgICAgKy0+fCBwdFsxXSBUUyBkYXRhICB8CisJCQkJCQkgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0rCisJCQkJCQkgICAgfCBldGMKKyAqLworCisvKiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIgc3RydWN0dXJlIGFuZCBhc3NvY2lhdGVkIFBDSSBzcGFjZSBpbiBieXRlcy4KKyAqIGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKHU2NCkKKyAqLworc3RydWN0IHNhYTcxNjRfYnVmZmVyICpzYWE3MTY0X2J1ZmZlcl9hbGxvYyhzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQsCisJdTMyIGxlbikKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKmJ1ZiA9IDA7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJaW50IGk7CisKKwlpZiAoKGxlbiA9PSAwKSB8fCAobGVuID49IDY1NTM2KSB8fCAobGVuICUgc2l6ZW9mKHU2NCkpKSB7CisJCWxvZ193YXJuKCIlcygpIFNBQV9FUlJfQkFEX1BBUkFNRVRFUlxuIiwgX19mdW5jX18pOworCQlnb3RvIHJldDsKKwl9CisKKwlidWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJbG9nX3dhcm4oIiVzKCkgU0FBX0VSUl9OT19SRVNPVVJDRVNcbiIsIF9fZnVuY19fKTsKKwkJZ290byByZXQ7CisJfQorCisJYnVmLT5wb3J0ID0gcG9ydDsKKwlidWYtPmZsYWdzID0gU0FBNzE2NF9CVUZGRVJfRlJFRTsKKwkvKiBUT0RPOiBhcmcgbGVuIGlzIGJlaW5nIGlnbm9yZWQgKi8KKwlidWYtPnBjaV9zaXplID0gU0FBNzE2NF9QVF9FTlRSSUVTICogMHgxMDAwOworCWJ1Zi0+cHRfc2l6ZSA9IChTQUE3MTY0X1BUX0VOVFJJRVMgKiBzaXplb2YodTY0KSkgKyAweDEwMDA7CisKKwkvKiBBbGxvY2F0ZSBjb250aWd1b3VzIG1lbW9yeSAqLworCWJ1Zi0+Y3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocG9ydC0+ZGV2LT5wY2ksIGJ1Zi0+cGNpX3NpemUsCisJCSZidWYtPmRtYSk7CisJaWYgKCFidWYtPmNwdSkKKwkJZ290byBmYWlsMTsKKworCWJ1Zi0+cHRfY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocG9ydC0+ZGV2LT5wY2ksIGJ1Zi0+cHRfc2l6ZSwKKwkJJmJ1Zi0+cHRfZG1hKTsKKwlpZiAoIWJ1Zi0+cHRfY3B1KQorCQlnb3RvIGZhaWwyOworCisJLyogaW5pdCB0aGUgYnVmZmVycyB0byBhIGtub3duIHBhdHRlcm4sIGVhc2llciBkdXJpbmcgZGVidWdnaW5nICovCisJbWVtc2V0KGJ1Zi0+Y3B1LCAweGZmLCBidWYtPnBjaV9zaXplKTsKKwltZW1zZXQoYnVmLT5wdF9jcHUsIDB4ZmYsIGJ1Zi0+cHRfc2l6ZSk7CisKKwlkcHJpbnRrKERCR0xWTF9CVUYsICIlcygpICAgYWxsb2NhdGVkIGJ1ZmZlciBAIDB4JXBcbiIsIF9fZnVuY19fLCBidWYpOworCWRwcmludGsoREJHTFZMX0JVRiwgIiAgcGNpX2NwdSBAIDB4JXAgICAgZG1hIEAgMHglMDhseCBsZW4gPSAweCV4XG4iLAorCQlidWYtPmNwdSwgKGxvbmcpYnVmLT5kbWEsIGJ1Zi0+cGNpX3NpemUpOworCWRwcmludGsoREJHTFZMX0JVRiwgIiAgIHB0X2NwdSBAIDB4JXAgcHRfZG1hIEAgMHglMDhseCBsZW4gPSAweCV4XG4iLAorCQlidWYtPnB0X2NwdSwgKGxvbmcpYnVmLT5wdF9kbWEsIGJ1Zi0+cHRfc2l6ZSk7CisKKwkvKiBGb3JtYXQgdGhlIFBhZ2UgVGFibGUgRW50cmllcyB0byBwb2ludCBpbnRvIHRoZSBkYXRhIGJ1ZmZlciAqLworCWZvciAoaSA9IDAgOyBpIDwgU0FBNzE2NF9QVF9FTlRSSUVTOyBpKyspIHsKKworCQkqKGJ1Zi0+cHRfY3B1ICsgaSkgPSBidWYtPmRtYSArIChpICogMHgxMDAwKTsgLyogVE9ETyAqLworCisJfQorCisJZ290byByZXQ7CisKK2ZhaWwyOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQocG9ydC0+ZGV2LT5wY2ksIGJ1Zi0+cGNpX3NpemUsIGJ1Zi0+Y3B1LCBidWYtPmRtYSk7CitmYWlsMToKKwlrZnJlZShidWYpOworCisJYnVmID0gMDsKK3JldDoKKwlyZXR1cm4gYnVmOworfQorCitpbnQgc2FhNzE2NF9idWZmZXJfZGVhbGxvYyhzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQsCisJc3RydWN0IHNhYTcxNjRfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisKKwlpZiAoKGJ1ZiA9PSAwKSB8fCAocG9ydCA9PSAwKSkKKwkJcmV0dXJuIFNBQV9FUlJfQkFEX1BBUkFNRVRFUjsKKworCWRwcmludGsoREJHTFZMX0JVRiwgIiVzKCkgZGVhbGxvY2F0aW5nIGJ1ZmZlciBAIDB4JXBcbiIsIF9fZnVuY19fLCBidWYpOworCisJaWYgKGJ1Zi0+ZmxhZ3MgIT0gU0FBNzE2NF9CVUZGRVJfRlJFRSkKKwkJbG9nX3dhcm4oIiBmcmVlaW5nIGEgbm9uLWZyZWUgYnVmZmVyXG4iKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocG9ydC0+ZGV2LT5wY2ksIGJ1Zi0+cGNpX3NpemUsIGJ1Zi0+Y3B1LCBidWYtPmRtYSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChwb3J0LT5kZXYtPnBjaSwgYnVmLT5wdF9zaXplLCBidWYtPnB0X2NwdSwKKwkJYnVmLT5wdF9kbWEpOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiBTQUFfT0s7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWJ1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhMDQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWJ1cy5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgInNhYTcxNjQuaCIKKworLyogVGhlIG1lc3NhZ2UgYnVzIHRvL2Zyb20gdGhlIGZpcm13YXJlIGlzIGEgcmluZyBidWZmZXIgaW4gUENJIGFkZHJlc3MKKyAqIHNwYWNlLiBFc3RhYmxpc2ggdGhlIGRlZmF1bHRzLgorICovCitpbnQgc2FhNzE2NF9idXNfc2V0dXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJdG1Db21SZXNCdXNJbmZvX3QgKmIJPSAmZGV2LT5idXM7CisKKwltdXRleF9pbml0KCZiLT5sb2NrKTsKKworCWItPlR5cGUJCQk9IFRZUEVfQlVTX1BDSWU7CisJYi0+bV93TWF4UmVxU2l6ZQk9IFNBQV9ERVZJQ0VfTUFYUkVRVUVTVFNJWkU7CisKKwliLT5tX3Bkd1NldFJpbmcJCT0gKHU4ICopKGRldi0+Ym1taW8gKworCQkoKHUzMilkZXYtPmJ1c2Rlc2MuQ29tbWFuZFJpbmcpKTsKKworCWItPm1fZHdTaXplU2V0UmluZwk9IFNBQV9ERVZJQ0VfQlVGRkVSQkxPQ0tTSVpFOworCisJYi0+bV9wZHdHZXRSaW5nCQk9ICh1OCAqKShkZXYtPmJtbWlvICsKKwkJKCh1MzIpZGV2LT5idXNkZXNjLlJlc3BvbnNlUmluZykpOworCisJYi0+bV9kd1NpemVHZXRSaW5nCT0gU0FBX0RFVklDRV9CVUZGRVJCTE9DS1NJWkU7CisKKwliLT5tX3Bkd1NldFdyaXRlUG9zCT0gKHUzMiAqKSgodTggKikoZGV2LT5ibW1pbyArCisJCSgodTMyKWRldi0+aW50ZmRlc2MuQkFSTG9jYXRpb24pICsgKDIgKiBzaXplb2YodTY0KSkpKTsKKworCWItPm1fcGR3U2V0UmVhZFBvcwk9ICh1MzIgKikoKHU4ICopYi0+bV9wZHdTZXRXcml0ZVBvcyArCisJCTEgKiBzaXplb2YodTMyKSk7CisKKwliLT5tX3Bkd0dldFdyaXRlUG9zCT0gKHUzMiAqKSgodTggKiliLT5tX3Bkd1NldFdyaXRlUG9zICsKKwkJMiAqIHNpemVvZih1MzIpKTsKKworCWItPm1fcGR3R2V0UmVhZFBvcwk9ICh1MzIgKikoKHU4ICopYi0+bV9wZHdTZXRXcml0ZVBvcyArCisJCTMgKiBzaXplb2YodTMyKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzYWE3MTY0X2J1c19kdW1wKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCXRtQ29tUmVzQnVzSW5mb190ICpiID0gJmRldi0+YnVzOworCisJZHByaW50ayhEQkdMVkxfQlVTLCAiRHVtcGluZyB0aGUgYnVzIHN0cnVjdHVyZTpcbiIpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAudHlwZSAgICAgICAgICAgICA9ICVkXG4iLCBiLT5UeXBlKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLmRldi0+Ym1taW8gICAgICAgPSAweCVwXG4iLCBkZXYtPmJtbWlvKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLm1fd01heFJlcVNpemUgICAgPSAweCV4XG4iLCBiLT5tX3dNYXhSZXFTaXplKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLm1fcGR3U2V0UmluZyAgICAgPSAweCVwXG4iLCBiLT5tX3Bkd1NldFJpbmcpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAubV9kd1NpemVTZXRSaW5nICA9IDB4JXhcbiIsIGItPm1fZHdTaXplU2V0UmluZyk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5tX3Bkd0dldFJpbmcgICAgID0gMHglcFxuIiwgYi0+bV9wZHdHZXRSaW5nKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLm1fZHdTaXplR2V0UmluZyAgPSAweCV4XG4iLCBiLT5tX2R3U2l6ZUdldFJpbmcpOworCisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5tX3Bkd1NldFdyaXRlUG9zID0gMHglcCAoMHglMDh4KVxuIiwKKwkJYi0+bV9wZHdTZXRXcml0ZVBvcywgKmItPm1fcGR3U2V0V3JpdGVQb3MpOworCisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5tX3Bkd1NldFJlYWRQb3MgID0gMHglcCAoMHglMDh4KVxuIiwKKwkJYi0+bV9wZHdTZXRSZWFkUG9zLCAqYi0+bV9wZHdTZXRSZWFkUG9zKTsKKworCWRwcmludGsoREJHTFZMX0JVUywgIiAubV9wZHdHZXRXcml0ZVBvcyA9IDB4JXAgKDB4JTA4eClcbiIsCisJCWItPm1fcGR3R2V0V3JpdGVQb3MsICpiLT5tX3Bkd0dldFdyaXRlUG9zKTsKKworCWRwcmludGsoREJHTFZMX0JVUywgIiAubV9wZHdHZXRSZWFkUG9zICA9IDB4JXAgKDB4JTA4eClcbiIsCisJCWItPm1fcGR3R2V0UmVhZFBvcywgKmItPm1fcGR3R2V0UmVhZFBvcyk7Cit9CisKK3ZvaWQgc2FhNzE2NF9idXNfZHVtcG1zZyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdG1Db21SZXNJbmZvX3QqIG0sIHZvaWQgKmJ1ZikKK3sKKwlkcHJpbnRrKERCR0xWTF9CVVMsICJEdW1waW5nIG1zZyBzdHJ1Y3R1cmU6XG4iKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLmlkICAgICAgICAgICAgICAgPSAlZFxuIiwgICBtLT5pZCk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5mbGFncyAgICAgICAgICAgID0gMHgleFxuIiwgbS0+ZmxhZ3MpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAuc2l6ZSAgICAgICAgICAgICA9IDB4JXhcbiIsIG0tPnNpemUpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAuY29tbWFuZCAgICAgICAgICA9IDB4JXhcbiIsIG0tPmNvbW1hbmQpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAuY29udHJvbHNlbGVjdG9yICA9IDB4JXhcbiIsIG0tPmNvbnRyb2xzZWxlY3Rvcik7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5zZXFubyAgICAgICAgICAgID0gJWRcbiIsICAgbS0+c2Vxbm8pOworCWlmIChidWYpCisJCWRwcmludGsoREJHTFZMX0JVUywgIiAuYnVmZmVyIChpZ25vcmVkKVxuIik7Cit9CisKKy8qCisgKiBQbGFjZXMgYSBjb21tYW5kIG9yIGEgcmVzcG9uc2Ugb24gdGhlIGJ1cy4gVGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90CisgKiBrbm93IGlmIGl0IGlzIGEgY29tbWFuZCBvciBhIHJlc3BvbnNlIGl0IGp1c3QgcGxhY2VzIHRoZSBkYXRhIG9uIHRoZQorICogYnVzIGRlcGVuZGluZyBvbiB0aGUgYnVzIGluZm9ybWF0aW9uIGdpdmVuIGluIHRoZSB0bUNvbVJlc0J1c0luZm9fdAorICogc3RydWN0dXJlLiBJZiB0aGUgY29tbWFuZCBvciByZXNwb25zZSBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVzIHJpbmcKKyAqIGJ1ZmZlciBpdCB3aWxsIGJlIHJlZnVzZWQuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogIFNBQV9PSyAgICAgVGhlIGZ1bmN0aW9uIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqICA8IDAgICAgICAgIE9uZSBvciBtb3JlIG1lbWJlcnMgYXJlIG5vdCBpbml0aWFsaXplZC4KKyAqLworaW50IHNhYTcxNjRfYnVzX3NldChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdG1Db21SZXNJbmZvX3QqIG1zZywgdm9pZCAqYnVmKQoreworCXRtQ29tUmVzQnVzSW5mb190ICpidXMgPSAmZGV2LT5idXM7CisJdTMyIGJ5dGVzX3RvX3dyaXRlLCByZWFkX2Rpc3RhbmNlLCB0aW1lb3V0LCBjdXJyX3NycCwgY3Vycl9zd3A7CisJdTMyIG5ld19zd3AsIHNwYWNlX3JlbTsKKwlpbnQgcmV0ID0gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCisJaWYgKCFtc2cpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpICFtc2dcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFNBQV9FUlJfQkFEX1BBUkFNRVRFUjsKKwl9CisKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltc2ctPnNpemUgPSBjcHVfdG9fbGUxNihtc2ctPnNpemUpOworCW1zZy0+Y29tbWFuZCA9IGNwdV90b19sZTE2KG1zZy0+Y29tbWFuZCk7CisJbXNnLT5jb250cm9sc2VsZWN0b3IgPSBjcHVfdG9fbGUxNihtc2ctPmNvbnRyb2xzZWxlY3Rvcik7CisKKwlpZiAobXNnLT5zaXplID4gZGV2LT5idXMubV93TWF4UmVxU2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgRXhjZWVkZWQgZGV2LT5idXMubV93TWF4UmVxU2l6ZVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIFNBQV9FUlJfQkFEX1BBUkFNRVRFUjsKKwl9CisKKwlpZiAoKG1zZy0+c2l6ZSA+IDApICYmIChidWYgPT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIE1pc3NpbmcgbWVzc2FnZSBidWZmZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFNBQV9FUlJfQkFEX1BBUkFNRVRFUjsKKwl9CisKKwkvKiBMb2NrIHRoZSBidXMgZnJvbSBhbnkgb3RoZXIgYWNjZXNzICovCisJbXV0ZXhfbG9jaygmYnVzLT5sb2NrKTsKKworCWJ5dGVzX3RvX3dyaXRlID0gc2l6ZW9mKCptc2cpICsgbXNnLT5zaXplOworCXJlYWRfZGlzdGFuY2UgPSAwOworCXRpbWVvdXQgPSBTQUFfQlVTX1RJTUVPVVQ7CisJY3Vycl9zcnAgPSBsZTMyX3RvX2NwdSgqYnVzLT5tX3Bkd1NldFJlYWRQb3MpOworCWN1cnJfc3dwID0gbGUzMl90b19jcHUoKmJ1cy0+bV9wZHdTZXRXcml0ZVBvcyk7CisKKwkvKiBEZWFsIHdpdGggcmluZyB3cmFwcGluZyBpc3N1ZXMgKi8KKwlpZiAoY3Vycl9zcnAgPiBjdXJyX3N3cCkKKwkJLyogVGhlIHJpbmcgaGFzIG5vdCB3cmFwcGVkIHlldCAqLworCQlyZWFkX2Rpc3RhbmNlID0gY3Vycl9zcnAgLSBjdXJyX3N3cDsKKwllbHNlCisJCS8qIERlYWwgd2l0aCB0aGUgd3JhcHBlZCByaW5nICovCisJCXJlYWRfZGlzdGFuY2UgPSAoY3Vycl9zcnAgKyBidXMtPm1fZHdTaXplU2V0UmluZykgLSBjdXJyX3N3cDsKKworCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgYnl0ZXNfdG9fd3JpdGUgPSAlZFxuIiwgX19mdW5jX18sCisJCWJ5dGVzX3RvX3dyaXRlKTsKKworCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgcmVhZF9kaXN0YW5jZSA9ICVkXG4iLCBfX2Z1bmNfXywKKwkJcmVhZF9kaXN0YW5jZSk7CisKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIGN1cnJfc3JwID0gJXhcbiIsIF9fZnVuY19fLCBjdXJyX3NycCk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSBjdXJyX3N3cCA9ICV4XG4iLCBfX2Z1bmNfXywgY3Vycl9zd3ApOworCisJLyogUHJvY2VzcyB0aGUgbXNnIGFuZCB3cml0ZSB0aGUgY29udGVudCBvbnRvIHRoZSBidXMgKi8KKwl3aGlsZSAoYnl0ZXNfdG9fd3JpdGUgPj0gcmVhZF9kaXN0YW5jZSkgeworCisJCWlmICh0aW1lb3V0LS0gPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGJ1cyB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSBTQUFfRVJSX05PX1JFU09VUkNFUzsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogVE9ETzogUmV2aWV3IHRoaXMgZGVsYXksIGVmZmljaWVudD8gKi8KKwkJLyogV2FpdCwgYWxsb3dpbmcgdGhlIGhhcmR3YXJlIGZldGNoIHRpbWUgKi8KKwkJbWRlbGF5KDEpOworCisJCS8qIENoZWNrIHRoZSBzcGFjZSB1c2FnZSBhZ2FpbiAqLworCQljdXJyX3NycCA9IGxlMzJfdG9fY3B1KCpidXMtPm1fcGR3U2V0UmVhZFBvcyk7CisKKwkJLyogRGVhbCB3aXRoIHJpbmcgd3JhcHBpbmcgaXNzdWVzICovCisJCWlmIChjdXJyX3NycCA+IGN1cnJfc3dwKQorCQkJLyogUmVhZCBkaWRuJ3Qgd3JhcCBhcm91bmQgdGhlIGJ1ZmZlciAqLworCQkJcmVhZF9kaXN0YW5jZSA9IGN1cnJfc3JwIC0gY3Vycl9zd3A7CisJCWVsc2UKKwkJCS8qIERlYWwgd2l0aCB0aGUgd3JhcHBlZCByaW5nICovCisJCQlyZWFkX2Rpc3RhbmNlID0gKGN1cnJfc3JwICsgYnVzLT5tX2R3U2l6ZVNldFJpbmcpIC0KKwkJCQljdXJyX3N3cDsKKworCX0KKworCS8qIENhbGN1bGF0ZSB0aGUgbmV3IHdyaXRlIHBvc2l0aW9uICovCisJbmV3X3N3cCA9IGN1cnJfc3dwICsgYnl0ZXNfdG9fd3JpdGU7CisKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIG5ld19zd3AgPSAleFxuIiwgX19mdW5jX18sIG5ld19zd3ApOworCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgYnVzLT5tX2R3U2l6ZVNldFJpbmcgPSAleFxuIiwgX19mdW5jX18sCisJCWJ1cy0+bV9kd1NpemVTZXRSaW5nKTsKKworCS8qIE1lbnRhbCBOb3RlOiBsaW5lIDQ2MiB0bW1oQ29tUmVzQnVzUENJZS5jcHAgKi8KKworCS8qIENoZWNrIGlmIHdlJ3JlIGdvaW5nIHRvIHdyYXAgYWdhaW4gKi8KKwlpZiAobmV3X3N3cCA+IGJ1cy0+bV9kd1NpemVTZXRSaW5nKSB7CisKKwkJLyogUmluZyB3cmFwcyAqLworCQluZXdfc3dwIC09IGJ1cy0+bV9kd1NpemVTZXRSaW5nOworCisJCXNwYWNlX3JlbSA9IGJ1cy0+bV9kd1NpemVTZXRSaW5nIC0gY3Vycl9zd3A7CisKKwkJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSBzcGFjZV9yZW0gPSAleFxuIiwgX19mdW5jX18sCisJCQlzcGFjZV9yZW0pOworCisJCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgc2l6ZW9mKCptc2cpID0gJWRcbiIsIF9fZnVuY19fLAorCQkJKHUzMilzaXplb2YoKm1zZykpOworCisJCWlmIChzcGFjZV9yZW0gPCBzaXplb2YoKm1zZykpIHsKKwkJCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgdHI0XG4iLCBfX2Z1bmNfXyk7CisKKwkJCS8qIFNwbGl0IHRoZSBtc2cgaW50byBwaWVjZXMgYXMgdGhlIHJpbmcgd3JhcHMgKi8KKwkJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZyArIGN1cnJfc3dwLCBtc2csIHNwYWNlX3JlbSk7CisJCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcsICh1OCAqKW1zZyArIHNwYWNlX3JlbSwKKwkJCQlzaXplb2YoKm1zZykgLSBzcGFjZV9yZW0pOworCisJCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcgKyBzaXplb2YoKm1zZykgLSBzcGFjZV9yZW0sCisJCQkJYnVmLCBtc2ctPnNpemUpOworCisJCX0gZWxzZSBpZiAoc3BhY2VfcmVtID09IHNpemVvZigqbXNnKSkgeworCQkJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSB0cjVcbiIsIF9fZnVuY19fKTsKKworCQkJLyogQWRkaXRpb25hbCBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJpbmcgKi8KKwkJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZyArIGN1cnJfc3dwLCBtc2csIHNpemVvZigqbXNnKSk7CisJCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcsIGJ1ZiwgbXNnLT5zaXplKTsKKworCQl9IGVsc2UgeworCQkJLyogQWRkaXRpb25hbCBkYXRhIHdyYXBzIGFyb3VuZCB0aGUgcmluZyAqLworCQkJbWVtY3B5KGJ1cy0+bV9wZHdTZXRSaW5nICsgY3Vycl9zd3AsIG1zZywgc2l6ZW9mKCptc2cpKTsKKwkJCWlmIChtc2ctPnNpemUgPiAwKSB7CisJCQkJbWVtY3B5KGJ1cy0+bV9wZHdTZXRSaW5nICsgY3Vycl9zd3AgKworCQkJCQlzaXplb2YoKm1zZyksIGJ1Ziwgc3BhY2VfcmVtIC0KKwkJCQkJc2l6ZW9mKCptc2cpKTsKKwkJCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcsICh1OCAqKWJ1ZiArCisJCQkJCXNwYWNlX3JlbSAtIHNpemVvZigqbXNnKSwKKwkJCQkJYnl0ZXNfdG9fd3JpdGUgLSBzcGFjZV9yZW0pOworCQkJfQorCisJCX0KKworCX0gLyogKG5ld19zd3AgPiBidXMtPm1fZHdTaXplU2V0UmluZykgKi8KKwllbHNlIHsKKwkJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSB0cjZcbiIsIF9fZnVuY19fKTsKKworCQkvKiBUaGUgcmluZyBidWZmZXIgZG9lc24ndCB3cmFwLCB0d28gc2ltcGxlIGNvcGllcyAqLworCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcgKyBjdXJyX3N3cCwgbXNnLCBzaXplb2YoKm1zZykpOworCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcgKyBjdXJyX3N3cCArIHNpemVvZigqbXNnKSwgYnVmLAorCQkJbXNnLT5zaXplKTsKKwl9CisKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIG5ld19zd3AgPSAleFxuIiwgX19mdW5jX18sIG5ld19zd3ApOworCisJLyogVE9ETzogQ29udmVydCBhbGwgb2YgdGhlIGRpcmVjdCBQQ0kgd3JpdGVzIGludG8KKwkgKiBzYWE3MTY0X3dyaXRlbC9iIGNhbGxzIGZvciBjb25zaXN0ZW5jeS4KKwkgKi8KKworCS8qIFVwZGF0ZSB0aGUgYnVzIHdyaXRlIHBvc2l0aW9uICovCisJKmJ1cy0+bV9wZHdTZXRXcml0ZVBvcyA9IGNwdV90b19sZTMyKG5ld19zd3ApOworCXJldCA9IFNBQV9PSzsKKworb3V0OgorCW11dGV4X3VubG9jaygmYnVzLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmVjZWl2ZSBhIGNvbW1hbmQgb3IgYSByZXNwb25zZSBmcm9tIHRoZSBidXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdAorICoga25vdyBpZiBpdCBpcyBhIGNvbW1hbmQgb3IgYSByZXNwb25zZSBpdCBzaW1wbHkgZGVxdWV1ZXMgdGhlIGRhdGEsCisgKiBkZXBlbmRpbmcgb24gdGhlIGJ1cyBpbmZvcm1hdGlvbiBnaXZlbiBpbiB0aGUgdG1Db21SZXNCdXNJbmZvX3Qgc3RydWN0dXJlLgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqICAwICAgICAgICAgIFRoZSBmdW5jdGlvbiBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiAgPCAwICAgICAgICBPbmUgb3IgbW9yZSBtZW1iZXJzIGFyZSBub3QgaW5pdGlhbGl6ZWQuCisgKi8KK2ludCBzYWE3MTY0X2J1c19nZXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHRtQ29tUmVzSW5mb190KiBtc2csIHZvaWQgKmJ1ZiwKKwlpbnQgcGVla29ubHkpCit7CisJdG1Db21SZXNCdXNJbmZvX3QgKmJ1cyA9ICZkZXYtPmJ1czsKKwl1MzIgYnl0ZXNfdG9fcmVhZCwgd3JpdGVfZGlzdGFuY2UsIGN1cnJfZ3JwLCBjdXJyX2d3cCwKKwkJbmV3X2dycCwgYnVmX3NpemUsIHNwYWNlX3JlbTsKKwl0bUNvbVJlc0luZm9fdCBtc2dfdG1wOworCWludCByZXQgPSBTQUFfRVJSX0JBRF9QQVJBTUVURVI7CisKKwlpZiAobXNnID09IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAobXNnLT5zaXplID4gZGV2LT5idXMubV93TWF4UmVxU2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgRXhjZWVkZWQgZGV2LT5idXMubV93TWF4UmVxU2l6ZVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoKHBlZWtvbmx5ID09IDApICYmIChtc2ctPnNpemUgPiAwKSAmJiAoYnVmID09IDApKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzKCkgTWlzc2luZyBtc2cgYnVmLCBzaXplIHNob3VsZCBiZSAlZCBieXRlc1xuIiwKKwkJCV9fZnVuY19fLCBtc2ctPnNpemUpOworCQlyZXR1cm4gcmV0OworCX0KKworCW11dGV4X2xvY2soJmJ1cy0+bG9jayk7CisKKwkvKiBQZWVrIHRoZSBidXMgdG8gc2VlIGlmIGEgbXNnIGV4aXN0cywgaWYgaXQncyBub3Qgd2hhdCB3ZSdyZSBleHBlY3RpbmcKKwkgKiB0aGVuIHJldHVybiBjbGVhbmx5IGVsc2UgcmVhZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBidXMuCisJICovCisJY3Vycl9nd3AgPSBsZTMyX3RvX2NwdSgqYnVzLT5tX3Bkd0dldFdyaXRlUG9zKTsKKwljdXJyX2dycCA9IGxlMzJfdG9fY3B1KCpidXMtPm1fcGR3R2V0UmVhZFBvcyk7CisKKwlpZiAoY3Vycl9nd3AgPT0gY3Vycl9ncnApIHsKKwkJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSBObyBtZXNzYWdlIG9uIHRoZSBidXNcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gU0FBX0VSUl9FTVBUWTsKKwkJZ290byBvdXQ7CisJfQorCisJYnl0ZXNfdG9fcmVhZCA9IHNpemVvZigqbXNnKTsKKworCS8qIENhbGN1bGF0ZSB3cml0ZSBkaXN0YW5jZSB0byBjdXJyZW50IHJlYWQgcG9zaXRpb24gKi8KKwl3cml0ZV9kaXN0YW5jZSA9IDA7CisJaWYgKGN1cnJfZ3dwID49IGN1cnJfZ3JwKQorCQkvKiBXcml0ZSBkb2Vzbid0IHdyYXAgYXJvdW5kIHRoZSByaW5nICovCisJCXdyaXRlX2Rpc3RhbmNlID0gY3Vycl9nd3AgLSBjdXJyX2dycDsKKwllbHNlCisJCS8qIFdyaXRlIHdyYXBzIGFyb3VuZCB0aGUgcmluZyAqLworCQl3cml0ZV9kaXN0YW5jZSA9IGN1cnJfZ3dwICsgYnVzLT5tX2R3U2l6ZUdldFJpbmcgLSBjdXJyX2dycDsKKworCWlmIChieXRlc190b19yZWFkID4gd3JpdGVfZGlzdGFuY2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIE5vIG1lc3NhZ2UvcmVzcG9uc2UgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gU0FBX0VSUl9JTlZBTElEX0NPTU1BTkQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIENhbGN1bGF0ZSB0aGUgbmV3IHJlYWQgcG9zaXRpb24gKi8KKwluZXdfZ3JwID0gY3Vycl9ncnAgKyBieXRlc190b19yZWFkOworCWlmIChuZXdfZ3JwID4gYnVzLT5tX2R3U2l6ZUdldFJpbmcpIHsKKworCQkvKiBSaW5nIHdyYXBzICovCisJCW5ld19ncnAgLT0gYnVzLT5tX2R3U2l6ZUdldFJpbmc7CisJCXNwYWNlX3JlbSA9IGJ1cy0+bV9kd1NpemVHZXRSaW5nIC0gY3Vycl9ncnA7CisKKwkJbWVtY3B5KCZtc2dfdG1wLCBidXMtPm1fcGR3R2V0UmluZyArIGN1cnJfZ3JwLCBzcGFjZV9yZW0pOworCQltZW1jcHkoKHU4ICopJm1zZ190bXAgKyBzcGFjZV9yZW0sIGJ1cy0+bV9wZHdHZXRSaW5nLAorCQkJYnl0ZXNfdG9fcmVhZCAtIHNwYWNlX3JlbSk7CisKKwl9IGVsc2UgeworCQkvKiBObyB3cmFwcGluZyAqLworCQltZW1jcHkoJm1zZ190bXAsIGJ1cy0+bV9wZHdHZXRSaW5nICsgY3Vycl9ncnAsIGJ5dGVzX3RvX3JlYWQpOworCX0KKworCS8qIE5vIG5lZWQgdG8gdXBkYXRlIHRoZSByZWFkIHBvc2l0aW9ucywgYmVjYXVzZSB0aGlzIHdhcyBhIHBlZWsgKi8KKwkvKiBJZiB0aGUgY2FsbGVyIHNwZWNpZmljYWxseSB3YW50IHRvIHBlZWssIHJldHVybiAqLworCWlmIChwZWVrb25seSkgeworCQltZW1jcHkobXNnLCAmbXNnX3RtcCwgc2l6ZW9mKCptc2cpKTsKKwkJZ290byBwZWVrb3V0OworCX0KKworCS8qIENoZWNrIGlmIHRoZSBjb21tYW5kL3Jlc3BvbnNlIG1hdGNoZXMgd2hhdCBpcyBleHBlY3RlZCAqLworCWlmICgobXNnX3RtcC5pZCAhPSBtc2ctPmlkKSB8fCAobXNnX3RtcC5jb21tYW5kICE9IG1zZy0+Y29tbWFuZCkgfHwKKwkJKG1zZ190bXAuY29udHJvbHNlbGVjdG9yICE9IG1zZy0+Y29udHJvbHNlbGVjdG9yKSB8fAorCQkobXNnX3RtcC5zZXFubyAhPSBtc2ctPnNlcW5vKSB8fCAobXNnX3RtcC5zaXplICE9IG1zZy0+c2l6ZSkpIHsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgVW5leHBlY3RlZCBtc2cgbWlzcy1tYXRjaFxuIiwgX19mdW5jX18pOworCQlzYWE3MTY0X2J1c19kdW1wbXNnKGRldiwgbXNnLCBidWYpOworCQlzYWE3MTY0X2J1c19kdW1wbXNnKGRldiwgJm1zZ190bXAsIDApOworCQlyZXQgPSBTQUFfRVJSX0lOVkFMSURfQ09NTUFORDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHRoZSBhY3R1YWwgY29tbWFuZCBhbmQgcmVzcG9uc2UgZnJvbSB0aGUgYnVzICovCisJYnVmX3NpemUgPSBtc2ctPnNpemU7CisKKwlieXRlc190b19yZWFkID0gc2l6ZW9mKCptc2cpICsgbXNnLT5zaXplOworCS8qIENhbGN1bGF0ZSB3cml0ZSBkaXN0YW5jZSB0byBjdXJyZW50IHJlYWQgcG9zaXRpb24gKi8KKwl3cml0ZV9kaXN0YW5jZSA9IDA7CisJaWYgKGN1cnJfZ3dwID49IGN1cnJfZ3JwKQorCQkvKiBXcml0ZSBkb2Vzbid0IHdyYXAgYXJvdW5kIHRoZSByaW5nICovCisJCXdyaXRlX2Rpc3RhbmNlID0gY3Vycl9nd3AgLSBjdXJyX2dycDsKKwllbHNlCisJCS8qIFdyaXRlIHdyYXBzIGFyb3VuZCB0aGUgcmluZyAqLworCQl3cml0ZV9kaXN0YW5jZSA9IGN1cnJfZ3dwICsgYnVzLT5tX2R3U2l6ZUdldFJpbmcgLSBjdXJyX2dycDsKKworCWlmIChieXRlc190b19yZWFkID4gd3JpdGVfZGlzdGFuY2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIEludmFsaWQgYnVzIHN0YXRlLCBtaXNzaW5nIG1zZyAiCisJCQkib3IgbWFuZ2xlZCByaW5nLCBmYXVsdHkgSC9XIC8gYmFkIGNvZGU/XG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IFNBQV9FUlJfSU5WQUxJRF9DT01NQU5EOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDYWxjdWxhdGUgdGhlIG5ldyByZWFkIHBvc2l0aW9uICovCisJbmV3X2dycCA9IGN1cnJfZ3JwICsgYnl0ZXNfdG9fcmVhZDsKKwlpZiAobmV3X2dycCA+IGJ1cy0+bV9kd1NpemVHZXRSaW5nKSB7CisKKwkJLyogUmluZyB3cmFwcyAqLworCQluZXdfZ3JwIC09IGJ1cy0+bV9kd1NpemVHZXRSaW5nOworCQlzcGFjZV9yZW0gPSBidXMtPm1fZHdTaXplR2V0UmluZyAtIGN1cnJfZ3JwOworCisJCWlmIChzcGFjZV9yZW0gPCBzaXplb2YoKm1zZykpIHsKKwkJCS8qIG1zZyB3cmFwcyBhcm91bmQgdGhlIHJpbmcgKi8KKwkJCW1lbWNweShtc2csIGJ1cy0+bV9wZHdHZXRSaW5nICsgY3Vycl9ncnAsIHNwYWNlX3JlbSk7CisJCQltZW1jcHkoKHU4ICopbXNnICsgc3BhY2VfcmVtLCBidXMtPm1fcGR3R2V0UmluZywKKwkJCQlzaXplb2YoKm1zZykgLSBzcGFjZV9yZW0pOworCQkJaWYgKGJ1ZikKKwkJCQltZW1jcHkoYnVmLCBidXMtPm1fcGR3R2V0UmluZyArIHNpemVvZigqbXNnKSAtCisJCQkJCXNwYWNlX3JlbSwgYnVmX3NpemUpOworCisJCX0gZWxzZSBpZiAoc3BhY2VfcmVtID09IHNpemVvZigqbXNnKSkgeworCQkJbWVtY3B5KG1zZywgYnVzLT5tX3Bkd0dldFJpbmcgKyBjdXJyX2dycCwgc2l6ZW9mKCptc2cpKTsKKwkJCWlmIChidWYpCisJCQkJbWVtY3B5KGJ1ZiwgYnVzLT5tX3Bkd0dldFJpbmcsIGJ1Zl9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEFkZGl0aW9uYWwgZGF0YSB3cmFwcyBhcm91bmQgdGhlIHJpbmcgKi8KKwkJCW1lbWNweShtc2csIGJ1cy0+bV9wZHdHZXRSaW5nICsgY3Vycl9ncnAsIHNpemVvZigqbXNnKSk7CisJCQlpZiAoYnVmKSB7CisJCQkJbWVtY3B5KGJ1ZiwgYnVzLT5tX3Bkd0dldFJpbmcgKyBjdXJyX2dycCArCisJCQkJCXNpemVvZigqbXNnKSwgc3BhY2VfcmVtIC0gc2l6ZW9mKCptc2cpKTsKKwkJCQltZW1jcHkoYnVmICsgc3BhY2VfcmVtIC0gc2l6ZW9mKCptc2cpLAorCQkJCQlidXMtPm1fcGR3R2V0UmluZywgYnl0ZXNfdG9fcmVhZCAtCisJCQkJCXNwYWNlX3JlbSk7CisJCQl9CisKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogTm8gd3JhcHBpbmcgKi8KKwkJbWVtY3B5KG1zZywgYnVzLT5tX3Bkd0dldFJpbmcgKyBjdXJyX2dycCwgc2l6ZW9mKCptc2cpKTsKKwkJaWYgKGJ1ZikKKwkJCW1lbWNweShidWYsIGJ1cy0+bV9wZHdHZXRSaW5nICsgY3Vycl9ncnAgKyBzaXplb2YoKm1zZyksCisJCQkJYnVmX3NpemUpOworCX0KKworCS8qIFVwZGF0ZSB0aGUgcmVhZCBwb3NpdGlvbnMsIGFkanVzdGluZyB0aGUgcmluZyAqLworCSpidXMtPm1fcGR3R2V0UmVhZFBvcyA9IGNwdV90b19sZTMyKG5ld19ncnApOworCitwZWVrb3V0OgorCW1zZy0+c2l6ZSA9IGxlMTZfdG9fY3B1KG1zZy0+c2l6ZSk7CisJbXNnLT5jb21tYW5kID0gbGUxNl90b19jcHUobXNnLT5jb21tYW5kKTsKKwltc2ctPmNvbnRyb2xzZWxlY3RvciA9IGxlMTZfdG9fY3B1KG1zZy0+Y29udHJvbHNlbGVjdG9yKTsKKwlyZXQgPSBTQUFfT0s7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZidXMtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jYXJkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzI5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jYXJkcy5jCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAic2FhNzE2NC5oIgorCisvKiBUaGUgQnJpZGdlIEFQSSBuZWVkcyB0byB1bmRlcnN0YW5kIHJlZ2lzdGVyIHdpZHRocyAoaW4gYnl0ZXMpIGZvciB0aGUKKyAqIGF0dGFjaGVkIEkyQyBkZXZpY2VzLCBzbyB3ZSBjYW4gc2ltcGxpZnkgdGhlIHZpcnR1YWwgaTJjIG1lY2hhbnNtcworICogYW5kIGtlZXAgdGhlIC1pMmMuYyBpbXBsZW1lbnRhdGlvbiBjbGVhbi4KKyAqLworI2RlZmluZSBSRUdMRU5fOGJpdAkxCisjZGVmaW5lIFJFR0xFTl8xNmJpdAkyCisKK3N0cnVjdCBzYWE3MTY0X2JvYXJkIHNhYTcxNjRfYm9hcmRzW10gPSB7CisJW1NBQTcxNjRfQk9BUkRfVU5LTk9XTl0gPSB7CisJCS8qIEJyaWRnZSB3aWxsIG5vdCBsb2FkIGFueSBmaXJtd2FyZSwgd2l0aG91dCBrbm93aW5nCisJCSAqIHRoZSByZXYgdGhpcyB3b3VsZCBiZSBmYXRhbC4gKi8KKwkJLm5hbWUJCT0gIlVua25vd24iLAorCX0sCisJW1NBQTcxNjRfQk9BUkRfVU5LTk9XTl9SRVYyXSA9IHsKKwkJLyogQnJpZGdlIHdpbGwgbG9hZCB0aGUgdjIgZi93IGFuZCBkdW1wIGRlc2NyaXB0b3JzICovCisJCS8qIFJlcXVpcmVkIGR1cmluZyBuZXcgYm9hcmQgYnJpbmd1cCAqLworCQkubmFtZQkJPSAiR2VuZXJpYyBSZXYyIiwKKwkJLmNoaXByZXYJPSBTQUE3MTY0X0NISVBfUkVWMiwKKwl9LAorCVtTQUE3MTY0X0JPQVJEX1VOS05PV05fUkVWM10gPSB7CisJCS8qIEJyaWRnZSB3aWxsIGxvYWQgdGhlIHYyIGYvdyBhbmQgZHVtcCBkZXNjcmlwdG9ycyAqLworCQkvKiBSZXF1aXJlZCBkdXJpbmcgbmV3IGJvYXJkIGJyaW5ndXAgKi8KKwkJLm5hbWUJCT0gIkdlbmVyaWMgUmV2MyIsCisJCS5jaGlwcmV2CT0gU0FBNzE2NF9DSElQX1JFVjMsCisJfSwKKwlbU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMF0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCIsCisJCS5wb3J0YQkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkucG9ydGIJCT0gU0FBNzE2NF9NUEVHX0RWQiwKKwkJLmNoaXByZXYJPSBTQUE3MTY0X0NISVBfUkVWMywKKwkJLnVuaXQJCT0ge3sKKwkJCS5pZAkJPSAweDFkLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0VFUFJPTSwKKwkJCS5uYW1lCQk9ICI0SyBFRVBST00iLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMCwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGEwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDQsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfVFVORVIsCisJCQkubmFtZQkJPSAiVERBMTgyNzEtMSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YzAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxYiwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0yIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDFlLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiVERBMTAwNDgtMSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxZiwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIlREQTEwMDQ4LTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDEyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSB9LAorCX0sCisJW1NBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMl0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCIsCisJCS5wb3J0YQkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkucG9ydGIJCT0gU0FBNzE2NF9NUEVHX0RWQiwKKwkJLmNoaXByZXYJPSBTQUE3MTY0X0NISVBfUkVWMiwKKwkJLnVuaXQJCT0ge3sKKwkJCS5pZAkJPSAweDA2LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0VFUFJPTSwKKwkJCS5uYW1lCQk9ICI0SyBFRVBST00iLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMCwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGEwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDQsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfVFVORVIsCisJCQkubmFtZQkJPSAiVERBMTgyNzEtMSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YzAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNSwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIlREQTEwMDQ4LTEiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDEwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MWUsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfVFVORVIsCisJCQkubmFtZQkJPSAiVERBMTgyNzEtMiIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YzAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxZiwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIlREQTEwMDQ4LTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDEyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSB9LAorCX0sCisJW1NBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfM10gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCIsCisJCS5wb3J0YQkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkucG9ydGIJCT0gU0FBNzE2NF9NUEVHX0RWQiwKKwkJLmNoaXByZXYJPSBTQUE3MTY0X0NISVBfUkVWMiwKKwkJLnVuaXQJCT0ge3sKKwkJCS5pZAkJPSAweDFkLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0VFUFJPTSwKKwkJCS5uYW1lCQk9ICI0SyBFRVBST00iLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMCwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGEwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDQsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfVFVORVIsCisJCQkubmFtZQkJPSAiVERBMTgyNzEtMSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YzAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNSwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9BTkFMT0dfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiVERBODI5MC0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHg4NCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDFiLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MWMsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfQU5BTE9HX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIlREQTgyOTAtMiIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4ODQgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxZSwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIlREQTEwMDQ4LTEiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDEwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MWYsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJUREExMDA0OC0yIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgxMiA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0gfSwKKwl9LAorCVtTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIyMjUwIiwKKwkJLnBvcnRhCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5wb3J0YgkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkuY2hpcHJldgk9IFNBQTcxNjRfQ0hJUF9SRVYzLAorCQkudW5pdAkJPSB7eworCQkJLmlkCQk9IDB4MjIsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRUVQUk9NLAorCQkJLm5hbWUJCT0gIjRLIEVFUFJPTSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18wLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA3LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiQ1gyNDIyOC9TNUgxNDExLTEgKFRPUCkiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDMyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDgsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMSAoUUFNKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzQgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxZSwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0yIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDIwLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiQ1gyNDIyOC9TNUgxNDExLTIgKFRPUCkiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDMyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MjMsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMiAoUUFNKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzQgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9IH0sCisJfSwKKwlbU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8yXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIyMjUwIiwKKwkJLnBvcnRhCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5wb3J0YgkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkuY2hpcHJldgk9IFNBQTcxNjRfQ0hJUF9SRVYzLAorCQkudW5pdAkJPSB7eworCQkJLmlkCQk9IDB4MjgsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRUVQUk9NLAorCQkJLm5hbWUJCT0gIjRLIEVFUFJPTSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18wLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA3LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiQ1gyNDIyOC9TNUgxNDExLTEgKFRPUCkiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDMyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDgsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMSAoUUFNKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzQgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgyNCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0yIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDI2LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiQ1gyNDIyOC9TNUgxNDExLTIgKFRPUCkiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDMyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MjksCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMiAoUUFNKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzQgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9IH0sCisJfSwKKwlbU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8zXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIyMjUwIiwKKwkJLnBvcnRhCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5wb3J0YgkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkuY2hpcHJldgk9IFNBQTcxNjRfQ0hJUF9SRVYzLAorCQkudW5pdAkJPSB7eworCQkJLmlkCQk9IDB4MjYsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRUVQUk9NLAorCQkJLm5hbWUJCT0gIjRLIEVFUFJPTSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18wLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA3LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiQ1gyNDIyOC9TNUgxNDExLTEgKFRPUCkiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDMyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDgsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMSAoUUFNKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzQgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgyMiwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0yIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDI0LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiQ1gyNDIyOC9TNUgxNDExLTIgKFRPUCkiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDMyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MjcsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMiAoUUFNKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzQgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9IH0sCisJfSwKK307Citjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzE2NF9iY291bnQgPSBBUlJBWV9TSVpFKHNhYTcxNjRfYm9hcmRzKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBQQ0kgc3Vic3lzdGVtIElEcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworc3RydWN0IHNhYTcxNjRfc3ViaWQgc2FhNzE2NF9zdWJpZHNbXSA9IHsKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDg4ODAsCisJCS5jYXJkICAgICAgPSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4ODgxMCwKKwkJLmNhcmQgICAgICA9IFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg4OTgwLAorCQkuY2FyZCAgICAgID0gU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDg5MDAsCisJCS5jYXJkICAgICAgPSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzIsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg4OTAxLAorCQkuY2FyZCAgICAgID0gU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMF8zLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4ODhBMSwKKwkJLmNhcmQgICAgICA9IFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTBfMywKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDg4OTEsCisJCS5jYXJkICAgICAgPSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzIsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg4ODUxLAorCQkuY2FyZCAgICAgID0gU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8yLAorCX0sCit9OworY29uc3QgdW5zaWduZWQgaW50IHNhYTcxNjRfaWRjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzE2NF9zdWJpZHMpOworCit2b2lkIHNhYTcxNjRfY2FyZF9saXN0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCWludCBpOworCisJaWYgKDAgPT0gZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IgJiYKKwkgICAgMCA9PSBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlczogQm9hcmQgaGFzIG5vIHZhbGlkIFBDSWUgU3Vic3lzdGVtIElEIGFuZCBjYW4ndFxuIgorCQkJIiVzOiBiZSBhdXRvZGV0ZWN0ZWQuIFBhc3MgY2FyZD08bj4gaW5zbW9kIG9wdGlvbiB0b1xuIgorCQkJIiVzOiB3b3JrYXJvdW5kIHRoYXQuIFNlbmQgY29tcGxhaW50cyB0byB0aGUgdmVuZG9yXG4iCisJCQkiJXM6IG9mIHRoZSBUViBjYXJkLiBCZXN0IHJlZ2FyZHMsXG4iCisJCQkiJXM6ICAgICAgICAgLS0gdHV4XG4iLAorCQkJZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBZb3VyIGJvYXJkIGlzbid0IGtub3duICh5ZXQpIHRvIHRoZSBkcml2ZXIuXG4iCisJCQkiJXM6IFRyeSB0byBwaWNrIG9uZSBvZiB0aGUgZXhpc3RpbmcgY2FyZCBjb25maWdzIHZpYVxuIgorCQkJIiVzOiBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uLiAgVXBkYXRpbmcgdG8gdGhlIGxhdGVzdFxuIgorCQkJIiVzOiB2ZXJzaW9uIG1pZ2h0IGhlbHAgYXMgd2VsbC5cbiIsCisJCQlkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUpOworCX0KKworCXByaW50ayhLRVJOX0VSUiAiJXM6IEhlcmUgYXJlIHZhbGlkIGNob2ljZXMgZm9yIHRoZSBjYXJkPTxuPiBpbnNtb2QgIgorCQkib3B0aW9uOlxuIiwgZGV2LT5uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYWE3MTY0X2Jjb3VudDsgaSsrKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgICBjYXJkPSVkIC0+ICVzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBpLCBzYWE3MTY0X2JvYXJkc1tpXS5uYW1lKTsKK30KKworLyogVE9ETzogY2xlYW4gdGhpcyBkZWZpbmUgdXAgaW50byB0aGUgLWNhcmRzLmMgc3RydWN0cyAqLworI2RlZmluZSBQQ0lFQlJJREdFX1VOSVRJRCAyCisKK3ZvaWQgc2FhNzE2NF9ncGlvX3NldHVwKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCisKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDA6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzI6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzM6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8yOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8zOgorCQkvKgorCQlHUElPIDI6IHM1aDE0MTEgLyB0ZGExMDA0OC0xIGRlbW9kIHJlc2V0CisJCUdQSU8gMzogczVoMTQxMSAvIHRkYTEwMDQ4LTIgZGVtb2QgcmVzZXQKKwkJR1BJTyA3OiBJUkJsYXN0ZXIgWmlsb2cgcmVzZXQKKwkJICovCisKKwkJLyogUmVzZXQgcGFydHMgYnkgZ29pbmcgaW4gYW5kIG91dCBvZiByZXNldCAqLworCQlzYWE3MTY0X2FwaV9jbGVhcl9ncGlvYml0KGRldiwgUENJRUJSSURHRV9VTklUSUQsIDIpOworCQlzYWE3MTY0X2FwaV9jbGVhcl9ncGlvYml0KGRldiwgUENJRUJSSURHRV9VTklUSUQsIDMpOworCisJCW1zbGVlcCgxMCk7CisKKwkJc2FhNzE2NF9hcGlfc2V0X2dwaW9iaXQoZGV2LCBQQ0lFQlJJREdFX1VOSVRJRCwgMik7CisJCXNhYTcxNjRfYXBpX3NldF9ncGlvYml0KGRldiwgUENJRUJSSURHRV9VTklUSUQsIDMpOworCQlicmVhazsKKwl9CisKK30KKworc3RhdGljIHZvaWQgaGF1cHBhdWdlX2VlcHJvbShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggKmVlcHJvbV9kYXRhKQoreworCXN0cnVjdCB0dmVlcHJvbSB0djsKKworCS8qIFRPRE86IEFzc3VtcHRpb246IGVlcHJvbSBvbiBidXMgMCAqLworCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmRldi0+aTJjX2J1c1swXS5pMmNfY2xpZW50LCAmdHYsCisJCWVlcHJvbV9kYXRhKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBzdXBwb3J0IHRoZSBib2FyZCBtb2RlbCAqLworCXN3aXRjaCAodHYubW9kZWwpIHsKKwljYXNlIDg4MDAxOgorCQkvKiBEZXZlbG9wbWVudCBib2FyZCAtIExpbWl0IGNpcmN1bGF0aW9uICovCisJCS8qIFdpblRWLUhWUjIyNTAgKFBDSWUsIFJldGFpbCwgZnVsbC1oZWlnaHQgYnJhY2tldCkKKwkJICogQVRTQy9RQU0gKFREQTE4MjcxL1M1SDE0MTEpIGFuZCBiYXNpYyBhbmFsb2csIG5vIElSLCBGTSAqLworCWNhc2UgODgwMjE6CisJCS8qIFdpblRWLUhWUjIyNTAgKFBDSWUsIFJldGFpbCwgZnVsbC1oZWlnaHQgYnJhY2tldCkKKwkJICogQVRTQy9RQU0gKFREQTE4MjcxL1M1SDE0MTEpIGFuZCBiYXNpYyBhbmFsb2csIE1DRSBDSVIsIEZNICovCisJCWJyZWFrOworCWNhc2UgODgwNDE6CisJCS8qIFdpblRWLUhWUjIyNTAgKFBDSWUsIFJldGFpbCwgZnVsbC1oZWlnaHQgYnJhY2tldCkKKwkJICogQVRTQy9RQU0gKFREQTE4MjcxL1M1SDE0MTEpIGFuZCBiYXNpYyBhbmFsb2csIG5vIElSLCBGTSAqLworCQlicmVhazsKKwljYXNlIDg4MDYxOgorCQkvKiBXaW5UVi1IVlIyMjUwIChQQ0llLCBSZXRhaWwsIGZ1bGwtaGVpZ2h0IGJyYWNrZXQpCisJCSAqIEFUU0MvUUFNIChUREExODI3MS9TNUgxNDExKSBhbmQgYmFzaWMgYW5hbG9nLCBGTSAqLworCQlicmVhazsKKwljYXNlIDg5NTE5OgorCWNhc2UgODk2MDk6CisJCS8qIFdpblRWLUhWUjIyMDAgKFBDSWUsIFJldGFpbCwgZnVsbC1oZWlnaHQpCisJCSAqIERWQi1UIChUREExODI3MS9UREExMDA0OCkgYW5kIGJhc2ljIGFuYWxvZywgbm8gSVIgKi8KKwkJYnJlYWs7CisJY2FzZSA4OTYxOToKKwkJLyogV2luVFYtSFZSMjIwMCAoUENJZSwgUmV0YWlsLCBoYWxmLWhlaWdodCkKKwkJICogRFZCLVQgKFREQTE4MjcxL1REQTEwMDQ4KSBhbmQgYmFzaWMgYW5hbG9nLCBubyBJUiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXYXJuaW5nOiBVbmtub3duIEhhdXBwYXVnZSBtb2RlbCAjJWRcbiIsCisJCQlkZXYtPm5hbWUsIHR2Lm1vZGVsKTsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhhdXBwYXVnZSBlZXByb206IG1vZGVsPSVkXG4iLCBkZXYtPm5hbWUsCisJCXR2Lm1vZGVsKTsKK30KKwordm9pZCBzYWE3MTY0X2NhcmRfc2V0dXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJc3RhdGljIHU4IGVlcHJvbVsyNTZdOworCisJaWYgKGRldi0+aTJjX2J1c1swXS5pMmNfcmMgPT0gMCkgeworCQlpZiAoc2FhNzE2NF9hcGlfcmVhZF9lZXByb20oZGV2LCAmZWVwcm9tWzBdLAorCQkJc2l6ZW9mKGVlcHJvbSkpIDwgMCkKKwkJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDA6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzI6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzM6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8yOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8zOgorCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgJmVlcHJvbVswXSk7CisJCWJyZWFrOworCX0KK30KKworLyogV2l0aCBtb3N0IG90aGVyIGRyaXZlcnMsIHRoZSBrZXJuZWwgZXhwZWN0cyB0byBjb21tdW5pY2F0ZSB3aXRoIHN1YmRyaXZlcnMKKyAqIHRocm91Z2ggaTJjLiBUaGlzIGJyaWRnZSBkb2VzIG5vdCBhbGxvdyB0aGF0LCBpdCBkb2VzIG5vdCBleHBvc2UgYW55IGRpcmVjdAorICogYWNjZXNzIHRvIEkyQy4gSW5zdGVhZCB3ZSBoYXZlIHRvIGNvbW11bmljYXRlIHRocm91Z2ggdGhlIGRldmljZSBmL3cgZm9yCisgKiByZWdpc3RlciBhY2Nlc3MgdG8gJ3Byb2Nlc3NpbmcgdW5pdHMnLiBFYWNoIHVuaXQgaGFzIGEgdW5pcXVlCisgKiBpZCwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIHBoeXNpY2FsIGltcGxlbWVudGF0aW9uIG9jY3VycyBhY3Jvc3MKKyAqIHRoZSB0aHJlZSBwaHlzaWNhbCBpMmMgYnVzc2VzLiBUaGUgYmVpbmcgc2FpZCBpZiB3ZSB3YW50IGxldmVyZ2Ugb2YKKyAqIHRoZSBleGlzdGluZyBrZXJuZWwgZHJpdmVycyBmb3IgdHVuZXJzIGFuZCBkZW1vZHMgd2UgaGF2ZSB0byAnc3BlYWsgaTJjJywKKyAqIHRvIHRoaXMgYnJpZGdlIGltcGxlbWVudHMgMyB2aXJ0dWFsIGkyYyBidXNlcy4gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbgorICogZm9yIHRob3NlLgorICoKKyAqIERlc2NyaXB0aW9uOiBUcmFuc2xhdGUgdGhlIGtlcm5lbHMgbm90aW9uIG9mIGFuIGkyYyBhZGRyZXNzIGFuZCBidXMgaW50bworICogdGhlIGFwcHJvcHJpYXRlIHVuaXRpZC4KKyAqLworaW50IHNhYTcxNjRfaTJjYWRkcl90b191bml0aWQoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIGludCBhZGRyKQoreworCS8qIEZvciBhIGdpdmVuIGJ1cyBhbmQgaTJjIGRldmljZSBhZGRyZXNzLCByZXR1cm4gdGhlIHNhYTcxNjQgdW5pcXVlCisJICogdW5pdGlkLiA8IDAgb24gZXJyb3IgKi8KKworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gYnVzLT5kZXY7CisJc3RydWN0IHNhYTcxNjRfdW5pdCAqdW5pdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTQUE3MTY0X01BWF9VTklUUzsgaSsrKSB7CisJCXVuaXQgPSAmc2FhNzE2NF9ib2FyZHNbZGV2LT5ib2FyZF0udW5pdFtpXTsKKworCQlpZiAodW5pdC0+dHlwZSA9PSBTQUE3MTY0X1VOSVRfVU5ERUZJTkVEKQorCQkJY29udGludWU7CisJCWlmICgoYnVzLT5uciA9PSB1bml0LT5pMmNfYnVzX25yKSAmJgorCQkJKGFkZHIgPT0gdW5pdC0+aTJjX2J1c19hZGRyKSkKKwkJCXJldHVybiB1bml0LT5pZDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qIFRoZSA3MTY0IEFQSSBuZWVkcyB0byBrbm93IHRoZSBpMmMgcmVnaXN0ZXIgbGVuZ3RoIGluIGFkdmFuY2UuCisgKiB0aGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uLiBCYXNlZCBvbiBhIHNwZWNpZmljIGNoaXAgYWRkciBhbmQgYnVzIHJldHVybiB0aGUKKyAqIHJlZyBsZW5ndGguCisgKi8KK2ludCBzYWE3MTY0X2kyY2FkZHJfdG9fcmVnbGVuKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzLCBpbnQgYWRkcikKK3sKKwkvKiBGb3IgYSBnaXZlbiBidXMgYW5kIGkyYyBkZXZpY2UgYWRkcmVzcywgcmV0dXJuIHRoZQorCSAqIHNhYTcxNjQgcmVnaXN0cnkgYWRkcmVzcyB3aWR0aC4gPCAwIG9uIGVycm9yCisJICovCisKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCXN0cnVjdCBzYWE3MTY0X3VuaXQgKnVuaXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0FBNzE2NF9NQVhfVU5JVFM7IGkrKykgeworCQl1bml0ID0gJnNhYTcxNjRfYm9hcmRzW2Rldi0+Ym9hcmRdLnVuaXRbaV07CisKKwkJaWYgKHVuaXQtPnR5cGUgPT0gU0FBNzE2NF9VTklUX1VOREVGSU5FRCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoYnVzLT5uciA9PSB1bml0LT5pMmNfYnVzX25yKSAmJgorCQkJKGFkZHIgPT0gdW5pdC0+aTJjX2J1c19hZGRyKSkKKwkJCXJldHVybiB1bml0LT5pMmNfcmVnX2xlbjsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisvKiBUT0RPOiBpbXBsZW1lbnQgYSAnZmluZGVlcHJvbScgZnVuY3RpbyBsaWtlIHRoZSBhYm92ZSBhbmQgZml4IGFueSBvdGhlcgorICogZWVwcm9tIHJlbGF0ZWQgdG9kbydzIGluIC1hcGkuYy4KKyAqLworCisvKiBUcmFuc2xhdGUgYSB1bml0aWQgaW50byBhIHggcmVhZGFibGUgZGV2aWNlIG5hbWUsIGZvciBkaXNwbGF5IHB1cnBvc2VzLiAgKi8KK2NoYXIgKnNhYTcxNjRfdW5pdGlkX25hbWUoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHVuaXRpZCkKK3sKKwljaGFyICp1bmRlZmVkID0gIlVOREVGSU5FRCI7CisJY2hhciAqYnJpZGdlID0gIkJSSURHRSI7CisJc3RydWN0IHNhYTcxNjRfdW5pdCAqdW5pdDsKKwlpbnQgaTsKKworCWlmICh1bml0aWQgPT0gMCkKKwkJcmV0dXJuIGJyaWRnZTsKKworCWZvciAoaSA9IDA7IGkgPCBTQUE3MTY0X01BWF9VTklUUzsgaSsrKSB7CisJCXVuaXQgPSAmc2FhNzE2NF9ib2FyZHNbZGV2LT5ib2FyZF0udW5pdFtpXTsKKworCQlpZiAodW5pdC0+dHlwZSA9PSBTQUE3MTY0X1VOSVRfVU5ERUZJTkVEKQorCQkJY29udGludWU7CisKKwkJaWYgKHVuaXRpZCA9PSB1bml0LT5pZCkKKwkJCQlyZXR1cm4gdW5pdC0+bmFtZTsKKwl9CisKKwlyZXR1cm4gdW5kZWZlZDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDk3ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMKQEAgLTAsMCArMSw1NzIgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgTlhQIFNBQTcxNjQgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSAic2FhNzE2NC5oIgorCitpbnQgc2FhNzE2NF9jbWRfYWxsb2Nfc2Vxbm8oc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJaW50IGksIHJldCA9IC0xOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgU0FBX0NNRF9NQVhfTVNHX1VOSVRTOyBpKyspIHsKKwkJaWYgKGRldi0+Y21kc1tpXS5pbnVzZSA9PSAwKSB7CisJCQlkZXYtPmNtZHNbaV0uaW51c2UgPSAxOworCQkJZGV2LT5jbWRzW2ldLnNpZ25hbGxlZCA9IDA7CisJCQlkZXYtPmNtZHNbaV0udGltZW91dCA9IDA7CisJCQlyZXQgPSBkZXYtPmNtZHNbaV0uc2Vxbm87CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNhYTcxNjRfY21kX2ZyZWVfc2Vxbm8oc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHNlcW5vKQoreworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKChkZXYtPmNtZHNbc2Vxbm9dLmludXNlID09IDEpICYmCisJCShkZXYtPmNtZHNbc2Vxbm9dLnNlcW5vID09IHNlcW5vKSkgeworCQlkZXYtPmNtZHNbc2Vxbm9dLmludXNlID0gMDsKKwkJZGV2LT5jbWRzW3NlcW5vXS5zaWduYWxsZWQgPSAwOworCQlkZXYtPmNtZHNbc2Vxbm9dLnRpbWVvdXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7Cit9CisKK3ZvaWQgc2FhNzE2NF9jbWRfdGltZW91dF9zZXFubyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggc2Vxbm8pCit7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoKGRldi0+Y21kc1tzZXFub10uaW51c2UgPT0gMSkgJiYKKwkJKGRldi0+Y21kc1tzZXFub10uc2Vxbm8gPT0gc2Vxbm8pKSB7CisJCWRldi0+Y21kc1tzZXFub10udGltZW91dCA9IDE7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKK30KKwordTMyIHNhYTcxNjRfY21kX3RpbWVvdXRfZ2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCBzZXFubykKK3sKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKChkZXYtPmNtZHNbc2Vxbm9dLmludXNlID09IDEpICYmCisJCShkZXYtPmNtZHNbc2Vxbm9dLnNlcW5vID09IHNlcW5vKSkgeworCQlyZXQgPSBkZXYtPmNtZHNbc2Vxbm9dLnRpbWVvdXQ7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbW1hbmRzIHRvIHRoZSBmL3cgZ2V0IG1hcnNoZWxsZWQgdG8vZnJvbSB0aGlzIGNvZGUgdGhlbiBvbnRvIHRoZSBQQ0kKKyAqIC1idXMvYyBydW5uaW5nIGJ1ZmZlci4gKi8KK2ludCBzYWE3MTY0X2lycV9kZXF1ZXVlKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCWludCByZXQgPSBTQUFfT0s7CisJdTMyIHRpbWVvdXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKnEgPSAwOworCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIFdoaWxlIGFueSBvdXRzdGFuZCBtZXNzYWdlIG9uIHRoZSBidXMgZXhpc3RzLi4uICovCisJZG8geworCisJCS8qIFBlZWsgdGhlIG1zZyBidXMgKi8KKwkJdG1Db21SZXNJbmZvX3QgdFJzcCA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCQlyZXQgPSBzYWE3MTY0X2J1c19nZXQoZGV2LCAmdFJzcCwgTlVMTCwgMSk7CisJCWlmIChyZXQgIT0gU0FBX09LKQorCQkJYnJlYWs7CisKKwkJcSA9ICZkZXYtPmNtZHNbdFJzcC5zZXFub10ud2FpdDsKKwkJdGltZW91dCA9IHNhYTcxNjRfY21kX3RpbWVvdXRfZ2V0KGRldiwgdFJzcC5zZXFubyk7CisJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgdGltZW91dCA9ICVkXG4iLCBfX2Z1bmNfXywgdGltZW91dCk7CisJCWlmICghdGltZW91dCkgeworCQkJZHByaW50ayhEQkdMVkxfQ01ELAorCQkJCSIlcygpIHNpZ25hbGxlZCBzZXFubyglZCkgKGZvciBkZXF1ZXVlKVxuIiwKKwkJCQlfX2Z1bmNfXywgdFJzcC5zZXFubyk7CisJCQlkZXYtPmNtZHNbdFJzcC5zZXFub10uc2lnbmFsbGVkID0gMTsKKwkJCXdha2VfdXAocSk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiJXMoKSBmb3VuZCB0aW1lZCBvdXQgY29tbWFuZCBvbiB0aGUgYnVzXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCX0KKwl9IHdoaWxlICgwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbW1hbmRzIHRvIHRoZSBmL3cgZ2V0IG1hcnNoZWxsZWQgdG8vZnJvbSB0aGlzIGNvZGUgdGhlbiBvbnRvIHRoZSBQQ0kKKyAqIC1idXMvYyBydW5uaW5nIGJ1ZmZlci4gKi8KK2ludCBzYWE3MTY0X2NtZF9kZXF1ZXVlKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCWludCBsb29wID0gMTsKKwlpbnQgcmV0OworCXUzMiB0aW1lb3V0OworCXdhaXRfcXVldWVfaGVhZF90ICpxID0gMDsKKwl1OCB0bXBbNTEyXTsKKwlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwl3aGlsZSAobG9vcCkgeworCisJCXRtQ29tUmVzSW5mb190IHRSc3AgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKwkJcmV0ID0gc2FhNzE2NF9idXNfZ2V0KGRldiwgJnRSc3AsIE5VTEwsIDEpOworCQlpZiAocmV0ID09IFNBQV9FUlJfRU1QVFkpCisJCQlyZXR1cm4gU0FBX09LOworCisJCWlmIChyZXQgIT0gU0FBX09LKQorCQkJcmV0dXJuIHJldDsKKworCQlxID0gJmRldi0+Y21kc1t0UnNwLnNlcW5vXS53YWl0OworCQl0aW1lb3V0ID0gc2FhNzE2NF9jbWRfdGltZW91dF9nZXQoZGV2LCB0UnNwLnNlcW5vKTsKKwkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSB0aW1lb3V0ID0gJWRcbiIsIF9fZnVuY19fLCB0aW1lb3V0KTsKKwkJaWYgKHRpbWVvdXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZm91bmQgdGltZWQgb3V0IGNvbW1hbmQgb24gdGhlIGJ1c1xuIik7CisKKwkJCS8qIENsZWFuIHRoZSBidXMgKi8KKwkJCXJldCA9IHNhYTcxNjRfYnVzX2dldChkZXYsICZ0UnNwLCAmdG1wLCAwKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicmV0ID0gJXhcbiIsIHJldCk7CisJCQlpZiAocmV0ID09IFNBQV9FUlJfRU1QVFkpCisJCQkJLyogU29tZW9uZSBlbHNlIGFscmVhZHkgZmV0Y2hlZCB0aGUgcmVzcG9uc2UgKi8KKwkJCQlyZXR1cm4gU0FBX09LOworCisJCQlpZiAocmV0ICE9IFNBQV9PSykKKwkJCQlyZXR1cm4gcmV0OworCisJCQlpZiAodFJzcC5mbGFncyAmIFBWQ19DTURGTEFHX0NPTlRJTlVFKQorCQkJCXByaW50ayhLRVJOX0VSUiAic3BsaXQgcmVzcG9uc2VcbiIpOworCQkJZWxzZQorCQkJCXNhYTcxNjRfY21kX2ZyZWVfc2Vxbm8oZGV2LCB0UnNwLnNlcW5vKTsKKworCQkJcHJpbnRrKEtFUk5fRVJSICIgdGltZW91dCBjb250aW51ZVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgc2lnbmFsbGVkIHNlcW5vKCVkKSAoZm9yIGRlcXVldWUpXG4iLAorCQkJX19mdW5jX18sIHRSc3Auc2Vxbm8pOworCQlkZXYtPmNtZHNbdFJzcC5zZXFub10uc2lnbmFsbGVkID0gMTsKKwkJd2FrZV91cChxKTsKKwkJcmV0dXJuIFNBQV9PSzsKKwl9CisKKwlyZXR1cm4gU0FBX09LOworfQorCitpbnQgc2FhNzE2NF9jbWRfc2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB0bUNvbVJlc0luZm9fdCogbXNnLCB2b2lkICpidWYpCit7CisJdG1Db21SZXNCdXNJbmZvX3QgKmJ1cyA9ICZkZXYtPmJ1czsKKwl1OCBjbWRfc2VudDsKKwl1MTYgc2l6ZSwgaWR4OworCXUzMiBjbWRzOworCXZvaWQgKnRtcDsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAoIW1zZykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgIW1zZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCX0KKworCW11dGV4X2xvY2soJmRldi0+Y21kc1ttc2ctPmlkXS5sb2NrKTsKKworCXNpemUgPSBtc2ctPnNpemU7CisJaWR4ID0gMDsKKwljbWRzID0gc2l6ZSAvIGJ1cy0+bV93TWF4UmVxU2l6ZTsKKwlpZiAoc2l6ZSAlIGJ1cy0+bV93TWF4UmVxU2l6ZSA9PSAwKQorCQljbWRzIC09IDE7CisKKwljbWRfc2VudCA9IDA7CisKKwkvKiBTcGxpdCB0aGUgcmVxdWVzdCBpbnRvIHNtYWxsZXIgY2h1bmtzICovCisJZm9yIChpZHggPSAwOyBpZHggPCBjbWRzOyBpZHgrKykgeworCisJCW1zZy0+ZmxhZ3MgfD0gU0FBX0NNREZMQUdfQ09OVElOVUU7CisJCW1zZy0+c2l6ZSA9IGJ1cy0+bV93TWF4UmVxU2l6ZTsKKwkJdG1wID0gYnVmICsgaWR4ICogYnVzLT5tX3dNYXhSZXFTaXplOworCisJCXJldCA9IHNhYTcxNjRfYnVzX3NldChkZXYsIG1zZywgdG1wKTsKKwkJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBzZXQgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCQkJaWYgKGNtZF9zZW50KSB7CisJCQkJcmV0ID0gU0FBX0VSUl9CVVNZOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJcmV0ID0gU0FBX0VSUl9PVkVSRkxPVzsKKwkJCWdvdG8gb3V0OworCQl9CisJCWNtZF9zZW50ID0gMTsKKwl9CisKKwkvKiBJZiBub3QgdGhlIGxhc3QgY29tbWFuZC4uLiAqLworCWlmIChpZHggIT0gMCkKKwkJbXNnLT5mbGFncyAmPSB+U0FBX0NNREZMQUdfQ09OVElOVUU7CisKKwltc2ctPnNpemUgPSBzaXplIC0gaWR4ICogYnVzLT5tX3dNYXhSZXFTaXplOworCisJcmV0ID0gc2FhNzE2NF9idXNfc2V0KGRldiwgbXNnLCBidWYgKyBpZHggKiBidXMtPm1fd01heFJlcVNpemUpOworCWlmIChyZXQgIT0gU0FBX09LKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBzZXQgbGFzdCBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJCWlmIChjbWRfc2VudCkgeworCQkJcmV0ID0gU0FBX0VSUl9CVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0gU0FBX0VSUl9PVkVSRkxPVzsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IFNBQV9PSzsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5jbWRzW21zZy0+aWRdLmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qIFdhaXQgZm9yIGEgc2lnbmFsIGV2ZW50LCB3aXRob3V0IGhvbGRpbmcgYSBtdXRleC4gRWl0aGVyIHJldHVybiBUSU1FT1VUIGlmCisgKiB0aGUgZXZlbnQgbmV2ZXIgb2NjdXJlZCwgb3IgU0FBX09LIGlmIGl0IHdhcyBzaWduYWxlZCBkdXJpbmcgdGhlIHdhaXQuCisgKi8KK2ludCBzYWE3MTY0X2NtZF93YWl0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCBzZXFubykKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqcSA9IDA7CisJaW50IHJldCA9IFNBQV9CVVNfVElNRU9VVDsKKwl1bnNpZ25lZCBsb25nIHN0YW1wOworCWludCByOworCisJaWYgKGRlYnVnID49IDQpCisJCXNhYTcxNjRfYnVzX2R1bXAoZGV2KTsKKworCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKHNlcW5vPSVkKVxuIiwgX19mdW5jX18sIHNlcW5vKTsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKChkZXYtPmNtZHNbc2Vxbm9dLmludXNlID09IDEpICYmCisJCShkZXYtPmNtZHNbc2Vxbm9dLnNlcW5vID09IHNlcW5vKSkgeworCQlxID0gJmRldi0+Y21kc1tzZXFub10ud2FpdDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKHEpIHsKKwkJLyogSWYgd2UgaGF2ZW4ndCBiZWVuIHNpZ25hbGxlZCB3ZSBuZWVkIHRvIHdhaXQgKi8KKwkJaWYgKGRldi0+Y21kc1tzZXFub10uc2lnbmFsbGVkID09IDApIHsKKwkJCXN0YW1wID0gamlmZmllczsKKwkJCWRwcmludGsoREJHTFZMX0NNRCwKKwkJCQkiJXMoc2Vxbm89JWQpIFdhaXRpbmcgKHNpZ25hbGxlZD0lZClcbiIsCisJCQkJX19mdW5jX18sIHNlcW5vLCBkZXYtPmNtZHNbc2Vxbm9dLnNpZ25hbGxlZCk7CisKKwkJCS8qIFdhaXQgZm9yIHNpZ25hbGxlZCB0byBiZSBmbGFnZ2VkIG9yIHRpbWVvdXQgKi8KKwkJCS8qIEluIGEgaGlnaGx5IHN0cmVzc2VkIHN5c3RlbSB0aGlzIGNhbiBlYXNpbHkgZXh0ZW5kCisJCQkgKiBpbnRvIG11bHRpcGxlIHNlY29uZHMgYmVmb3JlIHRoZSBkZWZlcnJlZCB3b3JrZXIKKwkJCSAqIGlzIHNjaGVkdWxlZCwgYW5kIHdlJ3JlIHdva2VuIHVwIHZpYSBzaWduYWwuCisJCQkgKiBXZSB0eXBpY2FsbHkgYXJlIHNpZ25hbGxlZCBpbiA8IDUwbXMgYnV0IGl0IGNhbgorCQkJICogdGFrZSBNVUNIIGxvbmdlci4KKwkJCSAqLworCQkJd2FpdF9ldmVudF90aW1lb3V0KCpxLCBkZXYtPmNtZHNbc2Vxbm9dLnNpZ25hbGxlZCwgKEhaICogd2FpdHNlY3MpKTsKKwkJCXIgPSB0aW1lX2JlZm9yZShqaWZmaWVzLCBzdGFtcCArIChIWiAqIHdhaXRzZWNzKSk7CisJCQlpZiAocikKKwkJCQlyZXQgPSBTQUFfT0s7CisJCQllbHNlCisJCQkJc2FhNzE2NF9jbWRfdGltZW91dF9zZXFubyhkZXYsIHNlcW5vKTsKKworCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoc2Vxbm89JWQpIFdhaXRpbmcgcmVzID0gJWQgIgorCQkJCSIoc2lnbmFsbGVkPSVkKVxuIiwgX19mdW5jX18sIHNlcW5vLCByLAorCQkJCWRldi0+Y21kc1tzZXFub10uc2lnbmFsbGVkKTsKKwkJfSBlbHNlCisJCQlyZXQgPSBTQUFfT0s7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0VSUiAiJXMoc2Vxbm89JWQpIHNlcW5vIGlzIGludmFsaWRcbiIsCisJCQlfX2Z1bmNfXywgc2Vxbm8pOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzYWE3MTY0X2NtZF9zaWduYWwoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHNlcW5vKQoreworCWludCBpOworCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IFNBQV9DTURfTUFYX01TR19VTklUUzsgaSsrKSB7CisJCWlmIChkZXYtPmNtZHNbaV0uaW51c2UgPT0gMSkgeworCQkJZHByaW50ayhEQkdMVkxfQ01ELAorCQkJCSJzZXFubyAlZCBpbnVzZSwgc2lnID0gJWQsIHQvb3V0ID0gJWRcbiIsCisJCQkJZGV2LT5jbWRzW2ldLnNlcW5vLAorCQkJCWRldi0+Y21kc1tpXS5zaWduYWxsZWQsCisJCQkJZGV2LT5jbWRzW2ldLnRpbWVvdXQpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNBQV9DTURfTUFYX01TR19VTklUUzsgaSsrKSB7CisJCWlmICgoZGV2LT5jbWRzW2ldLmludXNlID09IDEpICYmICgoaSA9PSAwKSB8fAorCQkJKGRldi0+Y21kc1tpXS5zaWduYWxsZWQpIHx8IChkZXYtPmNtZHNbaV0udGltZW91dCkpKSB7CisJCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcyhzZXFubz0lZCkgY2FsbGluZyB3YWtlX3VwXG4iLAorCQkJCV9fZnVuY19fLCBpKTsKKwkJCWRldi0+Y21kc1tpXS5zaWduYWxsZWQgPSAxOworCQkJd2FrZV91cCgmZGV2LT5jbWRzW2ldLndhaXQpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKK30KKworaW50IHNhYTcxNjRfY21kX3NlbmQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IGlkLCB0bUNvbVJlc0NtZF90IGNvbW1hbmQsCisJdTE2IGNvbnRyb2xzZWxlY3RvciwgdTE2IHNpemUsIHZvaWQgKmJ1ZikKK3sKKwl0bUNvbVJlc0luZm9fdCBjb21tYW5kX3QsICpwY29tbWFuZF90OworCXRtQ29tUmVzSW5mb190IHJlc3BvbnNlX3QsICpwcmVzcG9uc2VfdDsKKwl1OCBlcnJkYXRhWzI1Nl07CisJdTE2IHJlc3BfZHNpemU7CisJdTE2IGRhdGFfcmVjZDsKKwl1MzIgbG9vcDsKKwlpbnQgcmV0OworCWludCBzYWZldHkgPSAwOworCisJZHByaW50ayhEQkdMVkxfQ01ELCAiJXModW5pdGlkID0gJXMgKCVkKSAsIGNvbW1hbmQgPSAweCV4LCAiCisJCSJzZWwgPSAweCV4KVxuIiwgX19mdW5jX18sIHNhYTcxNjRfdW5pdGlkX25hbWUoZGV2LCBpZCksIGlkLAorCQljb21tYW5kLCBjb250cm9sc2VsZWN0b3IpOworCisJaWYgKChzaXplID09IDApIHx8IChidWYgPT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIEludmFsaWQgcGFyYW1cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFNBQV9FUlJfQkFEX1BBUkFNRVRFUjsKKwl9CisKKwkvKiBQcmVwYXJlIHNvbWUgYmFzaWMgY29tbWFuZC9yZXNwb25zZSBzdHJ1Y3R1cmVzICovCisJbWVtc2V0KCZjb21tYW5kX3QsIDAsIHNpemVvZihjb21tYW5kX3QpKTsKKwltZW1zZXQoJnJlc3BvbnNlX3QsIDAsIHNpemVvZigmcmVzcG9uc2VfdCkpOworCXBjb21tYW5kX3QgPSAmY29tbWFuZF90OworCXByZXNwb25zZV90ID0gJnJlc3BvbnNlX3Q7CisJY29tbWFuZF90LmlkID0gaWQ7CisJY29tbWFuZF90LmNvbW1hbmQgPSBjb21tYW5kOworCWNvbW1hbmRfdC5jb250cm9sc2VsZWN0b3IgPSBjb250cm9sc2VsZWN0b3I7CisJY29tbWFuZF90LnNpemUgPSBzaXplOworCisJLyogQWxsb2NhdGUgYSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyICovCisJcmV0ID0gc2FhNzE2NF9jbWRfYWxsb2Nfc2Vxbm8oZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgTm8gZnJlZSBzZXF1ZW5jZXNcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gU0FBX0VSUl9OT19SRVNPVVJDRVM7CisJCWdvdG8gb3V0OworCX0KKworCWNvbW1hbmRfdC5zZXFubyA9ICh1OClyZXQ7CisKKwkvKiBTZW5kIENvbW1hbmQgKi8KKwlyZXNwX2RzaXplID0gc2l6ZTsKKwlwY29tbWFuZF90LT5zaXplID0gc2l6ZTsKKworCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgcGNvbW1hbmRfdC5zZXFubyA9ICVkXG4iLAorCQlfX2Z1bmNfXywgcGNvbW1hbmRfdC0+c2Vxbm8pOworCisJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBwY29tbWFuZF90LnNpemUgPSAlZFxuIiwKKwkJX19mdW5jX18sIHBjb21tYW5kX3QtPnNpemUpOworCisJcmV0ID0gc2FhNzE2NF9jbWRfc2V0KGRldiwgcGNvbW1hbmRfdCwgYnVmKTsKKwlpZiAocmV0ICE9IFNBQV9PSykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgc2V0IGNvbW1hbmQgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCQlpZiAocmV0ICE9IFNBQV9FUlJfQlVTWSkKKwkJCXNhYTcxNjRfY21kX2ZyZWVfc2Vxbm8oZGV2LCBwY29tbWFuZF90LT5zZXFubyk7CisJCWVsc2UKKwkJCS8qIEZsYWcgYSB0aW1lb3V0LCBiZWNhdXNlIGF0IGxlYXN0IG9uZQorCQkJICogY29tbWFuZCB3YXMgc2VudCAqLworCQkJc2FhNzE2NF9jbWRfdGltZW91dF9zZXFubyhkZXYsIHBjb21tYW5kX3QtPnNlcW5vKTsKKworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBXaXRoIHNwbGl0IHJlc3BvbnNlcyB3ZSBoYXZlIHRvIGNvbGxlY3QgdGhlIG1zZ3MgcGllY2UgYnkgcGllY2UgKi8KKwlkYXRhX3JlY2QgPSAwOworCWxvb3AgPSAxOworCXdoaWxlIChsb29wKSB7CisJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgbG9vcFxuIiwgX19mdW5jX18pOworCisJCXJldCA9IHNhYTcxNjRfY21kX3dhaXQoZGV2LCBwY29tbWFuZF90LT5zZXFubyk7CisJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgbG9vcCByZXQgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkJLyogaWYgcG93ZXIgaXMgZG93biBhbmQgdGhpcyBpcyBub3QgYSBwb3dlciBjb21tYW5kIC4uLiAqLworCisJCWlmIChyZXQgPT0gU0FBX0JVU19USU1FT1VUKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkV2ZW50IHRpbWVkIG91dFxuIik7CisJCQlzYWE3MTY0X2NtZF90aW1lb3V0X3NlcW5vKGRldiwgcGNvbW1hbmRfdC0+c2Vxbm8pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChyZXQgIT0gU0FBX09LKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNwdXJpb3VzIGVycm9yXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBQZWVrIHJlc3BvbnNlICovCisJCXJldCA9IHNhYTcxNjRfYnVzX2dldChkZXYsIHByZXNwb25zZV90LCBOVUxMLCAxKTsKKwkJaWYgKHJldCA9PSBTQUFfRVJSX0VNUFRZKSB7CisJCQlkcHJpbnRrKDQsICIlcygpIFNBQV9FUlJfRU1QVFlcbiIsIF9fZnVuY19fKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZXQgIT0gU0FBX09LKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInBlZWsgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIHByZXNwb25zZV90LT5zZXFubyA9ICVkXG4iLAorCQkJX19mdW5jX18sIHByZXNwb25zZV90LT5zZXFubyk7CisKKwkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBwcmVzcG9uc2VfdC0+ZmxhZ3MgPSAweCV4XG4iLAorCQkJX19mdW5jX18sIHByZXNwb25zZV90LT5mbGFncyk7CisKKwkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBwcmVzcG9uc2VfdC0+c2l6ZSA9ICVkXG4iLAorCQkJX19mdW5jX18sIHByZXNwb25zZV90LT5zaXplKTsKKworCQkvKiBDaGVjayBpZiB0aGUgcmVzcG9uc2Ugd2FzIGZvciBvdXIgY29tbWFuZCAqLworCQlpZiAocHJlc3BvbnNlX3QtPnNlcW5vICE9IHBjb21tYW5kX3QtPnNlcW5vKSB7CisKKwkJCWRwcmludGsoREJHTFZMX0NNRCwKKwkJCQkid3JvbmcgZXZlbnQ6IHNlcW5vID0gJWQsICIKKwkJCQkiZXhwZWN0ZWQgc2Vxbm8gPSAlZCwgIgorCQkJCSJ3aWxsIGRlcXVldWUgcmVnYXJkbGVzc1xuIiwKKwkJCQlwcmVzcG9uc2VfdC0+c2Vxbm8sIHBjb21tYW5kX3QtPnNlcW5vKTsKKworCQkJcmV0ID0gc2FhNzE2NF9jbWRfZGVxdWV1ZShkZXYpOworCQkJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImRlcXVldWUgZmFpbGVkLCByZXQgPSAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJCQlpZiAoc2FmZXR5KysgPiAxNikgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJImRlcXVldWUgZXhjZWVkZWQsIHNhZmV0eSBleGl0XG4iKTsKKwkJCQkJcmV0dXJuIFNBQV9FUlJfQlVTWTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChwcmVzcG9uc2VfdC0+ZmxhZ3MgJiBQVkNfUkVTUE9OU0VGTEFHX0VSUk9SKSAhPSAwKSB7CisKKwkJCW1lbXNldCgmZXJyZGF0YVswXSwgMCwgc2l6ZW9mKGVycmRhdGEpKTsKKworCQkJcmV0ID0gc2FhNzE2NF9idXNfZ2V0KGRldiwgcHJlc3BvbnNlX3QsICZlcnJkYXRhWzBdLCAwKTsKKwkJCWlmIChyZXQgIT0gU0FBX09LKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJnZXQgZXJyb3IoMilcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCXNhYTcxNjRfY21kX2ZyZWVfc2Vxbm8oZGV2LCBwY29tbWFuZF90LT5zZXFubyk7CisKKwkJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgZXJyZGF0YSAlMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCV9fZnVuY19fLCBlcnJkYXRhWzBdLCBlcnJkYXRhWzFdLCBlcnJkYXRhWzJdLAorCQkJCWVycmRhdGFbM10pOworCisJCQkvKiBNYXAgZXJyb3IgY29kZXMgKi8KKwkJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgY21kLCBlcnJvciBjb2RlICA9IDB4JXhcbiIsCisJCQkJX19mdW5jX18sIGVycmRhdGFbMF0pOworCisJCQlzd2l0Y2ggKGVycmRhdGFbMF0pIHsKKwkJCWNhc2UgUFZDX0VSUk9SQ09ERV9JTlZBTElEX0NPTU1BTkQ6CisJCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBJTlZBTElEX0NPTU1BTkRcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlyZXQgPSBTQUFfRVJSX0lOVkFMSURfQ09NTUFORDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUFZDX0VSUk9SQ09ERV9JTlZBTElEX0RBVEE6CisJCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBJTlZBTElEX0RBVEFcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlyZXQgPSBTQUFfRVJSX0JBRF9QQVJBTUVURVI7CisJCQkJYnJlYWs7CisJCQljYXNlIFBWQ19FUlJPUkNPREVfVElNRU9VVDoKKwkJCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIFRJTUVPVVRcbiIsIF9fZnVuY19fKTsKKwkJCQlyZXQgPSBTQUFfRVJSX1RJTUVPVVQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFBWQ19FUlJPUkNPREVfTkFLOgorCQkJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgTkFLXG4iLCBfX2Z1bmNfXyk7CisJCQkJcmV0ID0gU0FBX0VSUl9OVUxMX1BBQ0tFVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUFZDX0VSUk9SQ09ERV9VTktOT1dOOgorCQkJY2FzZSBQVkNfRVJST1JDT0RFX0lOVkFMSURfQ09OVFJPTDoKKwkJCQlkcHJpbnRrKERCR0xWTF9DTUQsCisJCQkJCSIlcygpIFVOS05PV04gT1IgSU5WQUxJRCBDT05UUk9MXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQlkZWZhdWx0OgorCQkJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgVU5LTk9XTlxuIiwgX19mdW5jX18pOworCQkJCXJldCA9IFNBQV9FUlJfTk9UX1NVUFBPUlRFRDsKKwkJCX0KKworCQkJLyogU2VlIG9mIG90aGVyIGNvbW1hbmRzIGFyZSBvbiB0aGUgYnVzICovCisJCQlpZiAoc2FhNzE2NF9jbWRfZGVxdWV1ZShkZXYpICE9IFNBQV9PSykKKwkJCQlwcmludGsoS0VSTl9FUlIgImRlcXVldWUoMikgZmFpbGVkXG4iKTsKKworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCS8qIElmIHJlc3BvbnNlIGlzIGludmFsaWQgKi8KKwkJaWYgKChwcmVzcG9uc2VfdC0+aWQgIT0gcGNvbW1hbmRfdC0+aWQpIHx8CisJCQkocHJlc3BvbnNlX3QtPmNvbW1hbmQgIT0gcGNvbW1hbmRfdC0+Y29tbWFuZCkgfHwKKwkJCShwcmVzcG9uc2VfdC0+Y29udHJvbHNlbGVjdG9yICE9CisJCQkJcGNvbW1hbmRfdC0+Y29udHJvbHNlbGVjdG9yKSB8fAorCQkJKCgocmVzcF9kc2l6ZSAtIGRhdGFfcmVjZCkgIT0gcHJlc3BvbnNlX3QtPnNpemUpICYmCisJCQkJIShwcmVzcG9uc2VfdC0+ZmxhZ3MgJiBQVkNfQ01ERkxBR19DT05USU5VRSkpIHx8CisJCQkoKHJlc3BfZHNpemUgLSBkYXRhX3JlY2QpIDwgcHJlc3BvbnNlX3QtPnNpemUpKSB7CisKKwkJCS8qIEludmFsaWQgKi8KKwkJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgSW52YWxpZFxuIiwgX19mdW5jX18pOworCQkJcmV0ID0gc2FhNzE2NF9idXNfZ2V0KGRldiwgcHJlc3BvbnNlX3QsIDAsIDApOworCQkJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImdldCBmYWlsZWRcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCS8qIFNlZSBvZiBvdGhlciBjb21tYW5kcyBhcmUgb24gdGhlIGJ1cyAqLworCQkJaWYgKHNhYTcxNjRfY21kX2RlcXVldWUoZGV2KSAhPSBTQUFfT0spCisJCQkJcHJpbnRrKEtFUk5fRVJSICJkZXF1ZXVlKDMpIGZhaWxlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE9LLCBub3cgd2UncmUgYWN0dWFsbHkgZ2V0dGluZyBvdXQgY29ycmVjdCByZXNwb25zZSAqLworCQlyZXQgPSBzYWE3MTY0X2J1c19nZXQoZGV2LCBwcmVzcG9uc2VfdCwgYnVmICsgZGF0YV9yZWNkLCAwKTsKKwkJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ2V0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZGF0YV9yZWNkID0gcHJlc3BvbnNlX3QtPnNpemUgKyBkYXRhX3JlY2Q7CisJCWlmIChyZXNwX2RzaXplID09IGRhdGFfcmVjZCkgeworCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBSZXNwIHJlY2RcbiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU2VlIG9mIG90aGVyIGNvbW1hbmRzIGFyZSBvbiB0aGUgYnVzICovCisJCWlmIChzYWE3MTY0X2NtZF9kZXF1ZXVlKGRldikgIT0gU0FBX09LKQorCQkJcHJpbnRrKEtFUk5fRVJSICJkZXF1ZXVlKDMpIGZhaWxlZFxuIik7CisKKwkJY29udGludWU7CisKKwl9IC8qIChsb29wKSAqLworCisJLyogUmVsZWFzZSB0aGUgc2VxdWVuY2UgbnVtYmVyIGFsbG9jYXRpb24gKi8KKwlzYWE3MTY0X2NtZF9mcmVlX3NlcW5vKGRldiwgcGNvbW1hbmRfdC0+c2Vxbm8pOworCisJLyogaWYgcG93ZXJkb3duIHNpZ25hbCBhbGwgcGVuZGluZyBjb21tYW5kcyAqLworCisJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBDYWxsaW5nIGRlcXVldWUgdGhlbiBleGl0XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBTZWUgb2Ygb3RoZXIgY29tbWFuZHMgYXJlIG9uIHRoZSBidXMgKi8KKwlpZiAoc2FhNzE2NF9jbWRfZGVxdWV1ZShkZXYpICE9IFNBQV9PSykKKwkJcHJpbnRrKEtFUk5fRVJSICJkZXF1ZXVlKDQpIGZhaWxlZFxuIik7CisKKwlyZXQgPSBTQUFfT0s7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZGJlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jb3JlLmMKQEAgLTAsMCArMSw3NDAgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgTlhQIFNBQTcxNjQgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgInNhYTcxNjQuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIE5YUCBTQUE3MTY0IGJhc2VkIFRWIGNhcmRzIik7CitNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgIDEgQmFzaWMKKyAgMgorICA0IGkyYworICA4IGFwaQorIDE2IGNtZAorIDMyIGJ1cworICovCisKK3Vuc2lnbmVkIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKKwordW5zaWduZWQgaW50IHdhaXRzZWNzID0gMTA7Cittb2R1bGVfcGFyYW0od2FpdHNlY3MsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAidGltZW91dCBvbiBmaXJtd2FyZSBtZXNzYWdlcyIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGNhcmRbXSAgPSB7WzAgLi4uIChTQUE3MTY0X01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07Cittb2R1bGVfcGFyYW1fYXJyYXkoY2FyZCwgIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmQsICJjYXJkIHR5cGUiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzYWE3MTY0X2RldmNvdW50OworCitzdGF0aWMgREVGSU5FX01VVEVYKGRldmxpc3QpOworTElTVF9IRUFEKHNhYTcxNjRfZGV2bGlzdCk7CisKKyNkZWZpbmUgSU5UX1NJWkUgMTYKKworc3RhdGljIHZvaWQgc2FhNzE2NF93b3JrX2NtZGhhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBzYWE3MTY0X2Rldiwgd29ya2NtZCk7CisKKwkvKiBXYWtlIHVwIGFueSBjb21wbGV0ZSBjb21tYW5kcyAqLworCXNhYTcxNjRfaXJxX2RlcXVldWUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2FhNzE2NF9idWZmZXJfZGVsaXZlcihzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQgPSBidWYtPnBvcnQ7CisKKwkvKiBGZWVkIHRoZSB0cmFuc3BvcnQgcGF5bG9hZCBpbnRvIHRoZSBrZXJuZWwgZGVtdXggKi8KKwlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJnBvcnQtPmR2Yi5kZW11eCwgKHU4ICopYnVmLT5jcHUsCisJCVNBQTcxNjRfVFNfTlVNQkVSX09GX0xJTkVTKTsKKworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2FhNzE2NF9pcnFfdHMoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCXN0cnVjdCBzYWE3MTY0X2J1ZmZlciAqYnVmOworCXN0cnVjdCBsaXN0X2hlYWQgKmMsICpuOworCWludCB3cCwgaSA9IDAsIHJwOworCisJLyogRmluZCB0aGUgY3VycmVudCB3cml0ZSBwb2ludCBmcm9tIHRoZSBoYXJkd2FyZSAqLworCXdwID0gc2FhNzE2NF9yZWFkbChwb3J0LT5idWZjb3VudGVyKTsKKwlpZiAod3AgPiAocG9ydC0+aHdjZmcuYnVmZmVyY291bnQgLSAxKSkKKwkJQlVHKCk7CisKKwkvKiBGaW5kIHRoZSBwcmV2aW91cyBidWZmZXIgdG8gdGhlIGN1cnJlbnQgd3JpdGUgcG9pbnQgKi8KKwlpZiAod3AgPT0gMCkKKwkJcnAgPSA3OworCWVsc2UKKwkJcnAgPSB3cCAtIDE7CisKKwkvKiBMb29rdXAgdGhlIFdQIGluIHRoZSBidWZmZXIgbGlzdCAqLworCS8qIFRPRE86IHR1cm4gdGhpcyBpbnRvIGEgd29ya2VyIHRocmVhZCAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShjLCBuLCAmcG9ydC0+ZG1hcXVldWUubGlzdCkgeworCQlidWYgPSBsaXN0X2VudHJ5KGMsIHN0cnVjdCBzYWE3MTY0X2J1ZmZlciwgbGlzdCk7CisJCWlmIChpKysgPiBwb3J0LT5od2NmZy5idWZmZXJjb3VudCkKKwkJCUJVRygpOworCisJCWlmIChidWYtPm5yID09IHJwKSB7CisJCQkvKiBGb3VuZCB0aGUgYnVmZmVyLCBkZWFsIHdpdGggaXQgKi8KKwkJCWRwcmludGsoREJHTFZMX0lSUSwgIiVzKCkgd3A6ICVkIHByb2Nlc3Npbmc6ICVkXG4iLAorCQkJCV9fZnVuY19fLCB3cCwgcnApOworCQkJc2FhNzE2NF9idWZmZXJfZGVsaXZlcihidWYpOworCQkJYnJlYWs7CisJCX0KKworCX0KKwlyZXR1cm4gMDsKK30KKworLyogUHJpbWFyeSBJUlEgaGFuZGxlciBhbmQgZGlzcGF0Y2ggbWVjaGFuaXNtICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2FhNzE2NF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gZGV2X2lkOworCXUzMiBpbnRpZCwgaW50c3RhdFtJTlRfU0laRS80XTsKKwlpbnQgaSwgaGFuZGxlZCA9IDAsIGJpdDsKKworCWlmIChkZXYgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgTm8gZGV2aWNlIHNwZWNpZmllZFxuIiwgX19mdW5jX18pOworCQloYW5kbGVkID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ2hlY2sgdGhhdCB0aGUgaGFyZHdhcmUgaXMgYWNjZXNzYWJsZS4gSWYgdGhlIHN0YXR1cyBieXRlcyBhcmUKKwkgKiAweEZGIHRoZW4gdGhlIGRldmljZSBpcyBub3QgYWNjZXNzYWJsZSwgdGhlIHRoZSBJUlEgYmVsb25ncworCSAqIHRvIGFub3RoZXIgZHJpdmVyLgorCSAqIDQgeCB1MzIgaW50ZXJydXB0IHJlZ2lzdGVycy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSU5UX1NJWkUvNDsgaSsrKSB7CisKKwkJLyogVE9ETzogQ29udmVydCBpbnRvIHNhYTcxNjRfcmVhZGwoKSAqLworCQkvKiBSZWFkIHRoZSA0IGhhcmR3YXJlIGludGVycnVwdCByZWdpc3RlcnMgKi8KKwkJaW50c3RhdFtpXSA9IHNhYTcxNjRfcmVhZGwoZGV2LT5pbnRfc3RhdHVzICsgKGkgKiA0KSk7CisKKwkJaWYgKGludHN0YXRbaV0pCisJCQloYW5kbGVkID0gMTsKKwl9CisJaWYgKGhhbmRsZWQgPT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBGb3IgZWFjaCBvZiB0aGUgSFcgaW50ZXJydXB0IHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBJTlRfU0laRS80OyBpKyspIHsKKworCQlpZiAoaW50c3RhdFtpXSkgeworCQkJLyogRWFjaCBmdW5jdGlvbiBvZiB0aGUgYm9hcmQgaGFzIGl0J3Mgb3duIGludGVycnVwdGlkLgorCQkJICogRmluZCB0aGUgZnVuY3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlbiBjYWxsCisJCQkgKiBpdCdzIGhhbmRsZXIuCisJCQkgKi8KKwkJCWZvciAoYml0ID0gMDsgYml0IDwgMzI7IGJpdCsrKSB7CisKKwkJCQlpZiAoKChpbnRzdGF0W2ldID4+IGJpdCkgJiAweDAwMDAwMDAxKSA9PSAwKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qIENhbGN1bGF0ZSB0aGUgaW50ZXJydXB0IGlkICgweDAwIHRvIDB4N2YpICovCisKKwkJCQlpbnRpZCA9IChpICogMzIpICsgYml0OworCQkJCWlmIChpbnRpZCA9PSBkZXYtPmludGZkZXNjLmJJbnRlcnJ1cHRJZCkgeworCQkJCQkvKiBBIHJlc3BvbnNlIHRvIGFuIGNtZC9hcGkgY2FsbCAqLworCQkJCQlzY2hlZHVsZV93b3JrKCZkZXYtPndvcmtjbWQpOworCQkJCX0gZWxzZSBpZiAoaW50aWQgPT0KKwkJCQkJZGV2LT50czEuaHdjZmcuaW50ZXJydXB0aWQpIHsKKworCQkJCQkvKiBUcmFuc3BvcnQgcGF0aCAxICovCisJCQkJCXNhYTcxNjRfaXJxX3RzKCZkZXYtPnRzMSk7CisKKwkJCQl9IGVsc2UgaWYgKGludGlkID09CisJCQkJCWRldi0+dHMyLmh3Y2ZnLmludGVycnVwdGlkKSB7CisKKwkJCQkJLyogVHJhbnNwb3J0IHBhdGggMiAqLworCQkJCQlzYWE3MTY0X2lycV90cygmZGV2LT50czIpOworCisJCQkJfSBlbHNlIHsKKwkJCQkJLyogRmluZCB0aGUgZnVuY3Rpb24gKi8KKwkJCQkJZHByaW50ayhEQkdMVkxfSVJRLAorCQkJCQkJIiVzKCkgdW5oYW5kbGVkIGludGVycnVwdCAiCisJCQkJCQkicmVnIDB4JXggYml0IDB4JXggIgorCQkJCQkJImludGlkID0gMHgleFxuIiwKKwkJCQkJCV9fZnVuY19fLCBpLCBiaXQsIGludGlkKTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIEFjayBpdCAqLworCQkJc2FhNzE2NF93cml0ZWwoZGV2LT5pbnRfYWNrICsgKGkgKiA0KSwgaW50c3RhdFtpXSk7CisKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKwordm9pZCBzYWE3MTY0X2dldGZpcm13YXJlc3RhdHVzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCXN0cnVjdCBzYWE3MTY0X2Z3X3N0YXR1cyAqcyA9ICZkZXYtPmZ3X3N0YXR1czsKKworCWRldi0+Zndfc3RhdHVzLnN0YXR1cyA9IHNhYTcxNjRfcmVhZGwoU0FBX0RFVklDRV9TWVNJTklUX1NUQVRVUyk7CisJZGV2LT5md19zdGF0dXMubW9kZSA9IHNhYTcxNjRfcmVhZGwoU0FBX0RFVklDRV9TWVNJTklUX01PREUpOworCWRldi0+Zndfc3RhdHVzLnNwZWMgPSBzYWE3MTY0X3JlYWRsKFNBQV9ERVZJQ0VfU1lTSU5JVF9TUEVDKTsKKwlkZXYtPmZ3X3N0YXR1cy5pbnN0ID0gc2FhNzE2NF9yZWFkbChTQUFfREVWSUNFX1NZU0lOSVRfSU5TVCk7CisJZGV2LT5md19zdGF0dXMuY3B1bG9hZCA9IHNhYTcxNjRfcmVhZGwoU0FBX0RFVklDRV9TWVNJTklUX0NQVUxPQUQpOworCWRldi0+Zndfc3RhdHVzLnJlbWFpbmhlYXAgPQorCQlzYWE3MTY0X3JlYWRsKFNBQV9ERVZJQ0VfU1lTSU5JVF9SRU1BSU5IRUFQKTsKKworCWRwcmludGsoMSwgIkZpcm13YXJlIHN0YXR1czpcbiIpOworCWRwcmludGsoMSwgIiAuc3RhdHVzICAgICA9IDB4JTA4eFxuIiwgcy0+c3RhdHVzKTsKKwlkcHJpbnRrKDEsICIgLm1vZGUgICAgICAgPSAweCUwOHhcbiIsIHMtPm1vZGUpOworCWRwcmludGsoMSwgIiAuc3BlYyAgICAgICA9IDB4JTA4eFxuIiwgcy0+c3BlYyk7CisJZHByaW50aygxLCAiIC5pbnN0ICAgICAgID0gMHglMDh4XG4iLCBzLT5pbnN0KTsKKwlkcHJpbnRrKDEsICIgLmNwdWxvYWQgICAgPSAweCUwOHhcbiIsIHMtPmNwdWxvYWQpOworCWRwcmludGsoMSwgIiAucmVtYWluaGVhcCA9IDB4JTA4eFxuIiwgcy0+cmVtYWluaGVhcCk7Cit9CisKK3UzMiBzYWE3MTY0X2dldGN1cnJlbnRmaXJtd2FyZXZlcnNpb24oc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IHNhYTcxNjRfcmVhZGwoU0FBX0RFVklDRV9WRVJTSU9OKTsKKwlkcHJpbnRrKDEsICJEZXZpY2UgcnVubmluZyBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkLiVkICgweCV4KVxuIiwKKwkJKHJlZyAmIDB4MDAwMGZjMDApID4+IDEwLAorCQkocmVnICYgMHgwMDAwMDNlMCkgPj4gNSwKKwkJKHJlZyAmIDB4MDAwMDAwMWYpLAorCQkocmVnICYgMHhmZmZmMDAwMCkgPj4gMTYsCisJCXJlZyk7CisKKwlyZXR1cm4gcmVnOworfQorCisvKiBUT0RPOiBEZWJ1Z2dpbmcgZnVuYywgcmVtb3ZlICovCit2b2lkIHNhYTcxNjRfZHVtcGhleDE2KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0+ICIKKwkJIjAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDA4IDA5IDBhIDBiIDBjIDBkIDBlIDBmXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMTYpCisJCXByaW50ayhLRVJOX0lORk8gIiAgICAgICAgIFsweCUwOHhdICIKKwkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIgorCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgaSwKKwkJKihidWYraSswKSwgKihidWYraSsxKSwgKihidWYraSsyKSwgKihidWYraSszKSwKKwkJKihidWYraSs0KSwgKihidWYraSs1KSwgKihidWYraSs2KSwgKihidWYraSs3KSwKKwkJKihidWYraSs4KSwgKihidWYraSs5KSwgKihidWYraSsxMCksICooYnVmK2krMTEpLAorCQkqKGJ1ZitpKzEyKSwgKihidWYraSsxMyksICooYnVmK2krMTQpLCAqKGJ1ZitpKzE1KSk7Cit9CisKKy8qIFRPRE86IERlYnVnZ2luZyBmdW5jLCByZW1vdmUgKi8KK3ZvaWQgc2FhNzE2NF9kdW1wcmVncyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTMyIGFkZHIpCit7CisJaW50IGk7CisKKwlkcHJpbnRrKDEsICItLS0tLS0tLS0tLS0tLS0tLS0tLT4gIgorCQkiMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMDggMDkgMGEgMGIgMGMgMGQgMGUgMGZcbiIpOworCisJZm9yIChpID0gMDsgaSA8IDB4MTAwOyBpICs9IDE2KQorCQlkcHJpbnRrKDEsICJyZWdpb24wWzB4JTA4eF0gPSAiCisJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IgorCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsIGksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDApLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyAxKSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgMiksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDMpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyA0KSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgNSksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDYpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyA3KSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgOCksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDkpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyAxMCksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDExKSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgMTIpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyAxMyksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDE0KSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgMTUpCisJCQkpOworfQorCitzdGF0aWMgdm9pZCBzYWE3MTY0X2R1bXBfaHdkZXNjKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCWRwcmludGsoMSwgIkAweCVwIGh3ZGVzYyBzaXplb2YodG1Db21SZXNIV0Rlc2NyX3QpID0gJWQgYnl0ZXNcbiIsCisJCSZkZXYtPmh3ZGVzYywgKHUzMilzaXplb2YodG1Db21SZXNIV0Rlc2NyX3QpKTsKKworCWRwcmludGsoMSwgIiAuYkxlbmd0aCA9IDB4JXhcbiIsIGRldi0+aHdkZXNjLmJMZW5ndGgpOworCWRwcmludGsoMSwgIiAuYkRlc2NyaXB0b3JUeXBlID0gMHgleFxuIiwgZGV2LT5od2Rlc2MuYkRlc2NyaXB0b3JUeXBlKTsKKwlkcHJpbnRrKDEsICIgLmJEZXNjcmlwdG9yU3VidHlwZSA9IDB4JXhcbiIsCisJCWRldi0+aHdkZXNjLmJEZXNjcmlwdG9yU3VidHlwZSk7CisKKwlkcHJpbnRrKDEsICIgLmJjZFNwZWNWZXJzaW9uID0gMHgleFxuIiwgZGV2LT5od2Rlc2MuYmNkU3BlY1ZlcnNpb24pOworCWRwcmludGsoMSwgIiAuZHdDbG9ja0ZyZXF1ZW5jeSA9IDB4JXhcbiIsIGRldi0+aHdkZXNjLmR3Q2xvY2tGcmVxdWVuY3kpOworCWRwcmludGsoMSwgIiAuZHdDbG9ja1VwZGF0ZVJlcyA9IDB4JXhcbiIsIGRldi0+aHdkZXNjLmR3Q2xvY2tVcGRhdGVSZXMpOworCWRwcmludGsoMSwgIiAuYkNhcGFiaWxpdGllcyA9IDB4JXhcbiIsIGRldi0+aHdkZXNjLmJDYXBhYmlsaXRpZXMpOworCWRwcmludGsoMSwgIiAuZHdEZXZpY2VSZWdpc3RlcnNMb2NhdGlvbiA9IDB4JXhcbiIsCisJCWRldi0+aHdkZXNjLmR3RGV2aWNlUmVnaXN0ZXJzTG9jYXRpb24pOworCisJZHByaW50aygxLCAiIC5kd0hvc3RNZW1vcnlSZWdpb24gPSAweCV4XG4iLAorCQlkZXYtPmh3ZGVzYy5kd0hvc3RNZW1vcnlSZWdpb24pOworCisJZHByaW50aygxLCAiIC5kd0hvc3RNZW1vcnlSZWdpb25TaXplID0gMHgleFxuIiwKKwkJZGV2LT5od2Rlc2MuZHdIb3N0TWVtb3J5UmVnaW9uU2l6ZSk7CisKKwlkcHJpbnRrKDEsICIgLmR3SG9zdEhpYmVybmF0TWVtUmVnaW9uID0gMHgleFxuIiwKKwkJZGV2LT5od2Rlc2MuZHdIb3N0SGliZXJuYXRNZW1SZWdpb24pOworCisJZHByaW50aygxLCAiIC5kd0hvc3RIaWJlcm5hdE1lbVJlZ2lvblNpemUgPSAweCV4XG4iLAorCQlkZXYtPmh3ZGVzYy5kd0hvc3RIaWJlcm5hdE1lbVJlZ2lvblNpemUpOworfQorCitzdGF0aWMgdm9pZCBzYWE3MTY0X2R1bXBfaW50ZmRlc2Moc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJZHByaW50aygxLCAiQDB4JXAgaW50ZmRlc2MgIgorCQkic2l6ZW9mKHRtQ29tUmVzSW50ZXJmYWNlRGVzY3JfdCkgPSAlZCBieXRlc1xuIiwKKwkJJmRldi0+aW50ZmRlc2MsICh1MzIpc2l6ZW9mKHRtQ29tUmVzSW50ZXJmYWNlRGVzY3JfdCkpOworCisJZHByaW50aygxLCAiIC5iTGVuZ3RoID0gMHgleFxuIiwgZGV2LT5pbnRmZGVzYy5iTGVuZ3RoKTsKKwlkcHJpbnRrKDEsICIgLmJEZXNjcmlwdG9yVHlwZSA9IDB4JXhcbiIsIGRldi0+aW50ZmRlc2MuYkRlc2NyaXB0b3JUeXBlKTsKKwlkcHJpbnRrKDEsICIgLmJEZXNjcmlwdG9yU3VidHlwZSA9IDB4JXhcbiIsCisJCWRldi0+aW50ZmRlc2MuYkRlc2NyaXB0b3JTdWJ0eXBlKTsKKworCWRwcmludGsoMSwgIiAuYkZsYWdzID0gMHgleFxuIiwgZGV2LT5pbnRmZGVzYy5iRmxhZ3MpOworCWRwcmludGsoMSwgIiAuYkludGVyZmFjZVR5cGUgPSAweCV4XG4iLCBkZXYtPmludGZkZXNjLmJJbnRlcmZhY2VUeXBlKTsKKwlkcHJpbnRrKDEsICIgLmJJbnRlcmZhY2VJZCA9IDB4JXhcbiIsIGRldi0+aW50ZmRlc2MuYkludGVyZmFjZUlkKTsKKwlkcHJpbnRrKDEsICIgLmJCYXNlSW50ZXJmYWNlID0gMHgleFxuIiwgZGV2LT5pbnRmZGVzYy5iQmFzZUludGVyZmFjZSk7CisJZHByaW50aygxLCAiIC5iSW50ZXJydXB0SWQgPSAweCV4XG4iLCBkZXYtPmludGZkZXNjLmJJbnRlcnJ1cHRJZCk7CisJZHByaW50aygxLCAiIC5iRGVidWdJbnRlcnJ1cHRJZCA9IDB4JXhcbiIsCisJCWRldi0+aW50ZmRlc2MuYkRlYnVnSW50ZXJydXB0SWQpOworCisJZHByaW50aygxLCAiIC5CQVJMb2NhdGlvbiA9IDB4JXhcbiIsIGRldi0+aW50ZmRlc2MuQkFSTG9jYXRpb24pOworfQorCitzdGF0aWMgdm9pZCBzYWE3MTY0X2R1bXBfYnVzZGVzYyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlkcHJpbnRrKDEsICJAMHglcCBidXNkZXNjIHNpemVvZih0bUNvbVJlc0J1c0Rlc2NyX3QpID0gJWQgYnl0ZXNcbiIsCisJCSZkZXYtPmJ1c2Rlc2MsICh1MzIpc2l6ZW9mKHRtQ29tUmVzQnVzRGVzY3JfdCkpOworCisJZHByaW50aygxLCAiIC5Db21tYW5kUmluZyAgID0gMHglMDE2THhcbiIsIGRldi0+YnVzZGVzYy5Db21tYW5kUmluZyk7CisJZHByaW50aygxLCAiIC5SZXNwb25zZVJpbmcgID0gMHglMDE2THhcbiIsIGRldi0+YnVzZGVzYy5SZXNwb25zZVJpbmcpOworCWRwcmludGsoMSwgIiAuQ29tbWFuZFdyaXRlICA9IDB4JXhcbiIsIGRldi0+YnVzZGVzYy5Db21tYW5kV3JpdGUpOworCWRwcmludGsoMSwgIiAuQ29tbWFuZFJlYWQgICA9IDB4JXhcbiIsIGRldi0+YnVzZGVzYy5Db21tYW5kUmVhZCk7CisJZHByaW50aygxLCAiIC5SZXNwb25zZVdyaXRlID0gMHgleFxuIiwgZGV2LT5idXNkZXNjLlJlc3BvbnNlV3JpdGUpOworCWRwcmludGsoMSwgIiAuUmVzcG9uc2VSZWFkICA9IDB4JXhcbiIsIGRldi0+YnVzZGVzYy5SZXNwb25zZVJlYWQpOworfQorCisvKiBNdWNoIG9mIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCBQQ0kgcmVnaXN0ZXJzIGFyZSBjb25maWd1cmVkCisgKiBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gZmlybXdhcmUuIFdlIGhhdmUgdG8gY2FjaGUgc29tZSBpbml0aWFsCisgKiBzdHJ1Y3R1cmVzIHRoZW4gdXNlIHRoZXNlIHRvIGxvY2F0ZSBvdGhlciBpbXBvcnRhbnQgc3RydWN0dXJlcworICogZnJvbSBQQ0kgc3BhY2UuCisgKi8KK3N0YXRpYyB2b2lkIHNhYTcxNjRfZ2V0X2Rlc2NyaXB0b3JzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCW1lbWNweSgmZGV2LT5od2Rlc2MsIGRldi0+Ym1taW8sIHNpemVvZih0bUNvbVJlc0hXRGVzY3JfdCkpOworCW1lbWNweSgmZGV2LT5pbnRmZGVzYywgZGV2LT5ibW1pbyArIHNpemVvZih0bUNvbVJlc0hXRGVzY3JfdCksCisJCXNpemVvZih0bUNvbVJlc0ludGVyZmFjZURlc2NyX3QpKTsKKwltZW1jcHkoJmRldi0+YnVzZGVzYywgZGV2LT5ibW1pbyArIGRldi0+aW50ZmRlc2MuQkFSTG9jYXRpb24sCisJCXNpemVvZih0bUNvbVJlc0J1c0Rlc2NyX3QpKTsKKworCWlmIChkZXYtPmh3ZGVzYy5iTGVuZ3RoICE9IHNpemVvZih0bUNvbVJlc0hXRGVzY3JfdCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTdHJ1Y3R1cmUgdG1Db21SZXNIV0Rlc2NyX3QgaXMgbWFuZ2xlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTmVlZCAleCBnb3QgJWRcbiIsIGRldi0+aHdkZXNjLmJMZW5ndGgsCisJCQkodTMyKXNpemVvZih0bUNvbVJlc0hXRGVzY3JfdCkpOworCX0gZWxzZQorCQlzYWE3MTY0X2R1bXBfaHdkZXNjKGRldik7CisKKwlpZiAoZGV2LT5pbnRmZGVzYy5iTGVuZ3RoICE9IHNpemVvZih0bUNvbVJlc0ludGVyZmFjZURlc2NyX3QpKSB7CisJCXByaW50ayhLRVJOX0VSUiAic3RydWN0IHRtQ29tUmVzSW50ZXJmYWNlRGVzY3JfdCBpcyBtYW5nbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJOZWVkICV4IGdvdCAlZFxuIiwgZGV2LT5pbnRmZGVzYy5iTGVuZ3RoLAorCQkJKHUzMilzaXplb2YodG1Db21SZXNJbnRlcmZhY2VEZXNjcl90KSk7CisJfSBlbHNlCisJCXNhYTcxNjRfZHVtcF9pbnRmZGVzYyhkZXYpOworCisJc2FhNzE2NF9kdW1wX2J1c2Rlc2MoZGV2KTsKK30KKworc3RhdGljIGludCBzYWE3MTY0X3BjaV9xdWlya3Moc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3Jlc291cmNlcyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApLCBkZXYtPm5hbWUpKSB7CisKKwkJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDIpLAorCQkJcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMiksIGRldi0+bmFtZSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgTU1JTyBtZW1vcnkgQCAweCVsbHggb3IgMHglbGx4XG4iLAorCQlkZXYtPm5hbWUsCisJCSh1NjQpcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJKHU2NClwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDIpKTsKKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzE2NF9kZXZfc2V0dXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJaW50IGk7CisKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWF0b21pY19pbmMoJmRldi0+cmVmY291bnQpOworCWRldi0+bnIgPSBzYWE3MTY0X2RldmNvdW50Kys7CisKKwlzcHJpbnRmKGRldi0+bmFtZSwgInNhYTcxNjRbJWRdIiwgZGV2LT5ucik7CisKKwltdXRleF9sb2NrKCZkZXZsaXN0KTsKKwlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsICZzYWE3MTY0X2Rldmxpc3QpOworCW11dGV4X3VubG9jaygmZGV2bGlzdCk7CisKKwkvKiBib2FyZCBjb25maWcgKi8KKwlkZXYtPmJvYXJkID0gVU5TRVQ7CisJaWYgKGNhcmRbZGV2LT5ucl0gPCBzYWE3MTY0X2Jjb3VudCkKKwkJZGV2LT5ib2FyZCA9IGNhcmRbZGV2LT5ucl07CisKKwlmb3IgKGkgPSAwOyBVTlNFVCA9PSBkZXYtPmJvYXJkICAmJiAgaSA8IHNhYTcxNjRfaWRjb3VudDsgaSsrKQorCQlpZiAoZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IgPT0gc2FhNzE2NF9zdWJpZHNbaV0uc3VidmVuZG9yICYmCisJCQlkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSA9PQorCQkJCXNhYTcxNjRfc3ViaWRzW2ldLnN1YmRldmljZSkKKwkJCQlkZXYtPmJvYXJkID0gc2FhNzE2NF9zdWJpZHNbaV0uY2FyZDsKKworCWlmIChVTlNFVCA9PSBkZXYtPmJvYXJkKSB7CisJCWRldi0+Ym9hcmQgPSBTQUE3MTY0X0JPQVJEX1VOS05PV047CisJCXNhYTcxNjRfY2FyZF9saXN0KGRldik7CisJfQorCisJZGV2LT5wY2lfYnVzICA9IGRldi0+cGNpLT5idXMtPm51bWJlcjsKKwlkZXYtPnBjaV9zbG90ID0gUENJX1NMT1QoZGV2LT5wY2ktPmRldmZuKTsKKworCS8qIEkyQyBEZWZhdWx0cyAvIHNldHVwICovCisJZGV2LT5pMmNfYnVzWzBdLmRldiA9IGRldjsKKwlkZXYtPmkyY19idXNbMF0ubnIgPSAwOworCWRldi0+aTJjX2J1c1sxXS5kZXYgPSBkZXY7CisJZGV2LT5pMmNfYnVzWzFdLm5yID0gMTsKKwlkZXYtPmkyY19idXNbMl0uZGV2ID0gZGV2OworCWRldi0+aTJjX2J1c1syXS5uciA9IDI7CisKKwkvKiBUcmFuc3BvcnQgcG9ydCBBIERlZmF1bHRzIC8gc2V0dXAgKi8KKwlkZXYtPnRzMS5kZXYgPSBkZXY7CisJZGV2LT50czEubnIgPSAwOworCW11dGV4X2luaXQoJmRldi0+dHMxLmR2Yi5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT50czEuZG1hcXVldWUubGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dHMxLmR1bW15X2RtYXF1ZXVlLmxpc3QpOworCW11dGV4X2luaXQoJmRldi0+dHMxLmRtYXF1ZXVlX2xvY2spOworCW11dGV4X2luaXQoJmRldi0+dHMxLmR1bW15X2RtYXF1ZXVlX2xvY2spOworCisJLyogVHJhbnNwb3J0IHBvcnQgQiBEZWZhdWx0cyAvIHNldHVwICovCisJZGV2LT50czIuZGV2ID0gZGV2OworCWRldi0+dHMyLm5yID0gMTsKKwltdXRleF9pbml0KCZkZXYtPnRzMi5kdmIubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dHMyLmRtYXF1ZXVlLmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnRzMi5kdW1teV9kbWFxdWV1ZS5saXN0KTsKKwltdXRleF9pbml0KCZkZXYtPnRzMi5kbWFxdWV1ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPnRzMi5kdW1teV9kbWFxdWV1ZV9sb2NrKTsKKworCWlmIChnZXRfcmVzb3VyY2VzKGRldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ09SRSAlcyBObyBtb3JlIFBDSWUgcmVzb3VyY2VzIGZvciAiCisJCSAgICAgICAic3Vic3lzdGVtOiAlMDR4OiUwNHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkgICAgICAgZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpOworCisJCXNhYTcxNjRfZGV2Y291bnQtLTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogUENJL2UgYWxsb2NhdGlvbnMgKi8KKwlkZXYtPmxtbWlvID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApLAorCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSk7CisKKwlkZXYtPmxtbWlvMiA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAyKSwKKwkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMikpOworCisJZGV2LT5ibW1pbyA9ICh1OCBfX2lvbWVtICopZGV2LT5sbW1pbzsKKwlkZXYtPmJtbWlvMiA9ICh1OCBfX2lvbWVtICopZGV2LT5sbW1pbzI7CisKKwkvKiBJbmVycnVwdCBhbmQgYWNrIHJlZ2lzdGVyIGxvY2F0aW9ucyBvZmZzZXQgb2YgYm1taW8gKi8KKwlkZXYtPmludF9zdGF0dXMgPSAweDE4MzAwMCArIDB4ZjgwOworCWRldi0+aW50X2FjayA9IDB4MTgzMDAwICsgMHhmOTA7CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJDT1JFICVzOiBzdWJzeXN0ZW06ICUwNHg6JTA0eCwgYm9hcmQ6ICVzIFtjYXJkPSVkLCVzXVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKKwkgICAgICAgZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UsIHNhYTcxNjRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCisJICAgICAgIGRldi0+Ym9hcmQsIGNhcmRbZGV2LT5ucl0gPT0gZGV2LT5ib2FyZCA/CisJICAgICAgICJpbnNtb2Qgb3B0aW9uIiA6ICJhdXRvZGV0ZWN0ZWQiKTsKKworCXNhYTcxNjRfcGNpX3F1aXJrcyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxNjRfZGV2X3VucmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApKTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDIpLAorCQlwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAyKSk7CisKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+cmVmY291bnQpKQorCQlyZXR1cm47CisKKwlpb3VubWFwKGRldi0+bG1taW8pOworCWlvdW5tYXAoZGV2LT5sbW1pbzIpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzYWE3MTY0X2luaXRkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2OworCWludCBlcnIsIGk7CisJdTMyIHZlcnNpb247CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHBjaSBpbml0ICovCisJZGV2LT5wY2kgPSBwY2lfZGV2OworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWxfZnJlZTsKKwl9CisKKwlpZiAoc2FhNzE2NF9kZXZfc2V0dXAoZGV2KSA8IDApIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsX2ZyZWU7CisJfQorCisJLyogcHJpbnQgcGNpIGluZm8gKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZkZXYtPnBjaV9yZXYpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAgJmRldi0+cGNpX2xhdCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMDogZm91bmQgYXQgJXMsIHJldjogJWQsIGlycTogJWQsICIKKwkgICAgICAgImxhdGVuY3k6ICVkLCBtbWlvOiAweCVsbHhcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgcGNpX25hbWUocGNpX2RldiksIGRldi0+cGNpX3JldiwgcGNpX2Rldi0+aXJxLAorCSAgICAgICBkZXYtPnBjaV9sYXQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDApKTsKKworCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOworCS8qIFRPRE8gKi8KKwlpZiAoIXBjaV9kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJCXByaW50aygiJXMvMDogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsIGRldi0+bmFtZSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBzYWE3MTY0X2lycSwKKwkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IElSUSAlZFxuIiwgZGV2LT5uYW1lLAorCQkJcGNpX2Rldi0+aXJxKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBmYWlsX2lycTsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgZGV2KTsKKworCS8qIEluaXQgdGhlIGludGVybmFsIGNvbW1hbmQgbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBTQUFfQ01EX01BWF9NU0dfVU5JVFM7IGkrKykgeworCQlkZXYtPmNtZHNbaV0uc2Vxbm8gPSBpOworCQlkZXYtPmNtZHNbaV0uaW51c2UgPSAwOworCQltdXRleF9pbml0KCZkZXYtPmNtZHNbaV0ubG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+Y21kc1tpXS53YWl0KTsKKwl9CisKKwkvKiBXZSBuZWVkIGEgZGVmZXJyZWQgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGNtZCBoYW5kbGluZyAqLworCUlOSVRfV09SSygmZGV2LT53b3JrY21kLCBzYWE3MTY0X3dvcmtfY21kaGFuZGxlcik7CisKKwkvKiBPbmx5IGxvYWQgdGhlIGZpcm13YXJlIGlmIHdlIGtub3cgdGhlIGJvYXJkICovCisJaWYgKGRldi0+Ym9hcmQgIT0gU0FBNzE2NF9CT0FSRF9VTktOT1dOKSB7CisKKwkJZXJyID0gc2FhNzE2NF9kb3dubG9hZGZpcm13YXJlKGRldik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiRmFpbGVkIHRvIGJvb3QgZmlybXdhcmUsIG5vIGZlYXR1cmVzICIKKwkJCQkicmVnaXN0ZXJlZFxuIik7CisJCQlnb3RvIGZhaWxfZnc7CisJCX0KKworCQlzYWE3MTY0X2dldF9kZXNjcmlwdG9ycyhkZXYpOworCQlzYWE3MTY0X2R1bXByZWdzKGRldiwgMCk7CisJCXNhYTcxNjRfZ2V0Y3VycmVudGZpcm13YXJldmVyc2lvbihkZXYpOworCQlzYWE3MTY0X2dldGZpcm13YXJlc3RhdHVzKGRldik7CisJCWVyciA9IHNhYTcxNjRfYnVzX3NldHVwKGRldik7CisJCWlmIChlcnIgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIkZhaWxlZCB0byBzZXR1cCB0aGUgYnVzLCB3aWxsIGNvbnRpbnVlXG4iKTsKKwkJc2FhNzE2NF9idXNfZHVtcChkZXYpOworCisJCS8qIFBpbmcgdGhlIHJ1bm5pbmcgZmlybXdhcmUgdmlhIHRoZSBjb21tYW5kIGJ1cyBhbmQgZ2V0IHRoZQorCQkgKiBmaXJtd2FyZSB2ZXJzaW9uLCB0aGlzIGNoZWNrcyB0aGUgYnVzIGlzIHJ1bm5pbmcgT0suCisJCSAqLworCQl2ZXJzaW9uID0gMDsKKwkJaWYgKHNhYTcxNjRfYXBpX2dldF9md192ZXJzaW9uKGRldiwgJnZlcnNpb24pID09IFNBQV9PSykKKwkJCWRwcmludGsoMSwgIkJ1cyBpcyBvcGVyYXRpbmcgY29ycmVjdGx5IHVzaW5nICIKKwkJCQkidmVyc2lvbiAlZC4lZC4lZC4lZCAoMHgleClcbiIsCisJCQkJKHZlcnNpb24gJiAweDAwMDBmYzAwKSA+PiAxMCwKKwkJCQkodmVyc2lvbiAmIDB4MDAwMDAzZTApID4+IDUsCisJCQkJKHZlcnNpb24gJiAweDAwMDAwMDFmKSwKKwkJCQkodmVyc2lvbiAmIDB4ZmZmZjAwMDApID4+IDE2LAorCQkJCXZlcnNpb24pOworCQllbHNlCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiRmFpbGVkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGZpcm13YXJlXG4iKTsKKworCQkvKiBCcmluZyB1cCB0aGUgSTJDIGJ1c2VzICovCisJCXNhYTcxNjRfaTJjX3JlZ2lzdGVyKCZkZXYtPmkyY19idXNbMF0pOworCQlzYWE3MTY0X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzFdKTsKKwkJc2FhNzE2NF9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1syXSk7CisJCXNhYTcxNjRfZ3Bpb19zZXR1cChkZXYpOworCQlzYWE3MTY0X2NhcmRfc2V0dXAoZGV2KTsKKworCisJCS8qIFBhcnNlIHRoZSBkeW5hbWljIGRldmljZSBjb25maWd1cmF0aW9uLCBmaW5kIHZhcmlvdXMKKwkJICogbWVkaWEgZW5kcG9pbnRzIChNUEVHLCBXTVYsIFBTLCBUUykgYW5kIGNhY2hlIHRoZWlyCisJCSAqIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBpbnRvIHRoZSBkcml2ZXIsIHNvIHdlIGNhbgorCQkgKiByZWZlcmVuY2UgdGhlbSBsYXRlciBkdXJpbmcgc2ltZXRoaW5nX3JlZ2lzdGVyKCkgZnVuYywKKwkJICogaW50ZXJydXB0IGhhbmRsZXJzLCBkZWZlcnJlZCB3b3JrIGhhbmRsZXJzIGV0Yy4KKwkJICovCisJCXNhYTcxNjRfYXBpX2VudW1fc3ViZGV2cyhkZXYpOworCisJCS8qIEJlZ2luIHRvIGNyZWF0ZSB0aGUgdmlkZW8gc3ViLXN5c3RlbXMgYW5kIHJlZ2lzdGVyIGZ1bmNzICovCisJCWlmIChzYWE3MTY0X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YSA9PSBTQUE3MTY0X01QRUdfRFZCKSB7CisJCQlpZiAoc2FhNzE2NF9kdmJfcmVnaXN0ZXIoJmRldi0+dHMxKSA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgRmFpbGVkIHRvIHJlZ2lzdGVyICIKKwkJCQkJImR2YiBhZGFwdGVycyBvbiBwb3J0YVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJfQorCQl9CisKKwkJaWYgKHNhYTcxNjRfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiID09IFNBQTcxNjRfTVBFR19EVkIpIHsKKwkJCWlmIChzYWE3MTY0X2R2Yl9yZWdpc3RlcigmZGV2LT50czIpIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiIlcygpIEZhaWxlZCB0byByZWdpc3RlciAiCisJCQkJCSJkdmIgYWRhcHRlcnMgb24gcG9ydGJcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCX0KKwkJfQorCisJfSAvKiAhPSBCT0FSRF9VTktOT1dOICovCisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgVW5zdXBwb3J0ZWQgYm9hcmQgZGV0ZWN0ZWQsICIKKwkJCSJyZWdpc3RlcmluZyB3aXRob3V0IGZpcm13YXJlXG4iLCBfX2Z1bmNfXyk7CisKKwlkcHJpbnRrKDEsICIlcygpIHBhcmFtZXRlciBkZWJ1ZyA9ICVkXG4iLCBfX2Z1bmNfXywgZGVidWcpOworCWRwcmludGsoMSwgIiVzKCkgcGFyYW1ldGVyIHdhaXRzZWNzID0gJWRcbiIsIF9fZnVuY19fLCB3YWl0c2Vjcyk7CisKK2ZhaWxfZnc6CisJcmV0dXJuIDA7CisKK2ZhaWxfaXJxOgorCXNhYTcxNjRfZGV2X3VucmVnaXN0ZXIoZGV2KTsKK2ZhaWxfZnJlZToKKwlrZnJlZShkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxNjRfc2h1dGRvd24oc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2FhNzE2NF9maW5pZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCisJc2FhNzE2NF9zaHV0ZG93bihkZXYpOworCisJaWYgKHNhYTcxNjRfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRhID09IFNBQTcxNjRfTVBFR19EVkIpCisJCXNhYTcxNjRfZHZiX3VucmVnaXN0ZXIoJmRldi0+dHMxKTsKKworCWlmIChzYWE3MTY0X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YiA9PSBTQUE3MTY0X01QRUdfRFZCKQorCQlzYWE3MTY0X2R2Yl91bnJlZ2lzdGVyKCZkZXYtPnRzMik7CisKKwlzYWE3MTY0X2kyY191bnJlZ2lzdGVyKCZkZXYtPmkyY19idXNbMF0pOworCXNhYTcxNjRfaTJjX3VucmVnaXN0ZXIoJmRldi0+aTJjX2J1c1sxXSk7CisJc2FhNzE2NF9pMmNfdW5yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzJdKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKKworCS8qIHVucmVnaXN0ZXIgc3R1ZmYgKi8KKwlmcmVlX2lycShwY2lfZGV2LT5pcnEsIGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworCisJbXV0ZXhfbG9jaygmZGV2bGlzdCk7CisJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKKworCXNhYTcxNjRfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKwlrZnJlZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2FhNzE2NF9wY2lfdGJsW10gPSB7CisJeworCQkvKiBTQUE3MTY0ICovCisJCS52ZW5kb3IgICAgICAgPSAweDExMzEsCisJCS5kZXZpY2UgICAgICAgPSAweDcxNjQsCisJCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKKwl9LCB7CisJCS8qIC0tLSBlbmQgb2YgbGlzdCAtLS0gKi8KKwl9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNhYTcxNjRfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzYWE3MTY0X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgID0gInNhYTcxNjQiLAorCS5pZF90YWJsZSA9IHNhYTcxNjRfcGNpX3RibCwKKwkucHJvYmUgICAgPSBzYWE3MTY0X2luaXRkZXYsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3Aoc2FhNzE2NF9maW5pZGV2KSwKKwkvKiBUT0RPICovCisJLnN1c3BlbmQgID0gTlVMTCwKKwkucmVzdW1lICAgPSBOVUxMLAorfTsKKworc3RhdGljIGludCBzYWE3MTY0X2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJzYWE3MTY0IGRyaXZlciBsb2FkZWRcbiIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzYWE3MTY0X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBzYWE3MTY0X2Zpbmkodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTcxNjRfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNhYTcxNjRfaW5pdCk7Cittb2R1bGVfZXhpdChzYWE3MTY0X2ZpbmkpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWR2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMmQ4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1kdmIuYwpAQCAtMCwwICsxLDYwMiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJzYWE3MTY0LmgiCisKKyNpbmNsdWRlICJ0ZGExMDA0OC5oIgorI2luY2x1ZGUgInRkYTE4MjcxLmgiCisjaW5jbHVkZSAiczVoMTQxMS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJzYWE3MTY0IgorCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworLyogYWRkciBpcyBpbiB0aGUgY2FyZCBzdHJ1Y3QsIGdldCBpdCBmcm9tIHRoZXJlICovCitzdGF0aWMgc3RydWN0IHRkYTEwMDQ4X2NvbmZpZyBoYXVwcGF1Z2VfaHZyMjIwMF8xX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyAgICA9IDB4MTAgPj4gMSwKKwkub3V0cHV0X21vZGUgICAgICA9IFREQTEwMDQ4X1NFUklBTF9PVVRQVVQsCisJLmZ3YnVsa3dyaXRlbGVuICAgPSBUREExMDA0OF9CVUxLV1JJVEVfMjAwLAorCS5pbnZlcnNpb24gICAgICAgID0gVERBMTAwNDhfSU5WRVJTSU9OX09OLAorCS5kdHY2X2lmX2ZyZXFfa2h6ID0gVERBMTAwNDhfSUZfMzMwMCwKKwkuZHR2N19pZl9mcmVxX2toeiA9IFREQTEwMDQ4X0lGXzM1MDAsCisJLmR0djhfaWZfZnJlcV9raHogPSBUREExMDA0OF9JRl80MDAwLAorCS5jbGtfZnJlcV9raHogICAgID0gVERBMTAwNDhfQ0xLXzE2MDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNDhfY29uZmlnIGhhdXBwYXVnZV9odnIyMjAwXzJfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzICAgID0gMHgxMiA+PiAxLAorCS5vdXRwdXRfbW9kZSAgICAgID0gVERBMTAwNDhfU0VSSUFMX09VVFBVVCwKKwkuZndidWxrd3JpdGVsZW4gICA9IFREQTEwMDQ4X0JVTEtXUklURV8yMDAsCisJLmludmVyc2lvbiAgICAgICAgPSBUREExMDA0OF9JTlZFUlNJT05fT04sCisJLmR0djZfaWZfZnJlcV9raHogPSBUREExMDA0OF9JRl8zMzAwLAorCS5kdHY3X2lmX2ZyZXFfa2h6ID0gVERBMTAwNDhfSUZfMzUwMCwKKwkuZHR2OF9pZl9mcmVxX2toeiA9IFREQTEwMDQ4X0lGXzQwMDAsCisJLmNsa19mcmVxX2toeiAgICAgPSBUREExMDA0OF9DTEtfMTYwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXAgaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAgPSB7CisJLmF0c2NfNiAgID0geyAuaWZfZnJlcSA9IDMyNTAsIC5hZ2NfbW9kZSA9IDMsIC5zdGQgPSAzLAorCQkgICAgICAuaWZfbHZsID0gNiwgLnJmYWdjX3RvcCA9IDB4MzcgfSwKKwkucWFtXzYgICAgPSB7IC5pZl9mcmVxID0gNDAwMCwgLmFnY19tb2RlID0gMywgLnN0ZCA9IDAsCisJCSAgICAgIC5pZl9sdmwgPSA2LCAucmZhZ2NfdG9wID0gMHgzNyB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX2h2cjIyeDBfdHVuZXJfY29uZmlnID0geworCS5zdGRfbWFwCT0gJmhhdXBwYXVnZV90ZGExODI3MV9zdGRfbWFwLAorCS5nYXRlCQk9IFREQTE4MjcxX0dBVEVfQU5BTE9HLAorCS5yb2xlCQk9IFREQTE4MjcxX01BU1RFUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGhhdXBwYXVnZV9odnIyMngwc190dW5lcl9jb25maWcgPSB7CisJLnN0ZF9tYXAJPSAmaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAsCisJLmdhdGUJCT0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLnJvbGUJCT0gVERBMTgyNzFfU0xBVkUsCisJLnJmX2NhbF9vbl9zdGFydHVwID0gMQorfTsKKworc3RhdGljIHN0cnVjdCBzNWgxNDExX2NvbmZpZyBoYXVwcGF1Z2VfczVoMTQxMV9jb25maWcgPSB7CisJLm91dHB1dF9tb2RlICAgPSBTNUgxNDExX1NFUklBTF9PVVRQVVQsCisJLmdwaW8gICAgICAgICAgPSBTNUgxNDExX0dQSU9fT04sCisJLnFhbV9pZiAgICAgICAgPSBTNUgxNDExX0lGXzQwMDAsCisJLnZzYl9pZiAgICAgICAgPSBTNUgxNDExX0lGXzMyNTAsCisJLmludmVyc2lvbiAgICAgPSBTNUgxNDExX0lOVkVSU0lPTl9PTiwKKwkuc3RhdHVzX21vZGUgICA9IFM1SDE0MTFfREVNT0RMT0NLSU5HLAorCS5tcGVnX3RpbWluZyAgID0gUzVIMTQxMV9NUEVHVElNSU5HX0NPTlRJTk9VU19OT05JTlZFUlRJTkdfQ0xPQ0ssCit9OworCitzdGF0aWMgaW50IHNhYTcxNjRfZHZiX3N0b3BfdHNwb3J0KHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9TVE9QKTsKKwlpZiAoKHJldCAhPSBTQUFfT0spICYmIChyZXQgIT0gU0FBX0VSUl9BTFJFQURZX1NUT1BQRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBzdG9wIHRyYW5zaXRpb24gZmFpbGVkLCByZXQgPSAweCV4XG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldCA9IC1FSU87CisJfSBlbHNlIHsKKwkJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMoKSAgICBTdG9wcGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYWE3MTY0X2R2Yl9hY3F1aXJlX3RzcG9ydChzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfQUNRVUlSRSk7CisJaWYgKChyZXQgIT0gU0FBX09LKSAmJiAocmV0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgYWNxdWlyZSB0cmFuc2l0aW9uIGZhaWxlZCwgcmV0ID0gMHgleFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZSB7CisJCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKCkgQWNxdWlyZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhYTcxNjRfZHZiX3BhdXNlX3RzcG9ydChzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfUEFVU0UpOworCWlmICgocmV0ICE9IFNBQV9PSykgJiYgKHJldCAhPSBTQUFfRVJSX0FMUkVBRFlfU1RPUFBFRCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHBhdXNlIHRyYW5zaXRpb24gZmFpbGVkLCByZXQgPSAweCV4XG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldCA9IC1FSU87CisJfSBlbHNlIHsKKwkJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMoKSAgIFBhdXNlZFxuIiwgX19mdW5jX18pOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIEZpcm13YXJlIGlzIHZlcnkgd2luZG93cyBjZW50cmljLCBtZWFuaW5nIHlvdSBoYXZlIHRvIHRyYW5zaXRpb24KKyAqIHRoZSBwYXJ0IHRocm91Z2ggQVZTdHJlYW0gLyBLUyBXaW5kb3dzIHN0YWdlcywgZm9yd2FyZHMgb3IgYmFja3dhcmRzLgorICogU3RhdGVzIGFyZTogc3RvcHBlZCwgYWNxdWlyZWQgKGgvdyksIHBhdXNlZCwgc3RhcnRlZC4KKyAqLworc3RhdGljIGludCBzYWE3MTY0X2R2Yl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJaW50IHJldDsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKHBvcnQ9JWQpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnIpOworCisJcmV0ID0gc2FhNzE2NF9kdmJfcGF1c2VfdHNwb3J0KHBvcnQpOworCXJldCA9IHNhYTcxNjRfZHZiX2FjcXVpcmVfdHNwb3J0KHBvcnQpOworCXJldCA9IHNhYTcxNjRfZHZiX3N0b3BfdHNwb3J0KHBvcnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYWE3MTY0X2R2Yl9jZmdfdHNwb3J0KHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCkKK3sKKwl0bUhXU3RyZWFtUGFyYW1ldGVyc190ICpwYXJhbXMgPSAmcG9ydC0+aHdfc3RyZWFtaW5ncGFyYW1zOworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCXN0cnVjdCBzYWE3MTY0X2J1ZmZlciAqYnVmOworCXN0cnVjdCBsaXN0X2hlYWQgKmMsICpuOworCWludCBpID0gMDsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKHBvcnQ9JWQpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnIpOworCisJc2FhNzE2NF93cml0ZWwocG9ydC0+cGl0Y2gsIHBhcmFtcy0+cGl0Y2gpOworCXNhYTcxNjRfd3JpdGVsKHBvcnQtPmJ1ZnNpemUsIHBhcmFtcy0+cGl0Y2ggKiBwYXJhbXMtPm51bWJlcm9mbGluZXMpOworCisJZHByaW50ayhEQkdMVkxfRFZCLCAiIGNvbmZpZ3VyZWQ6XG4iKTsKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgICBsbW1pbyAgICAgICAweCVwXG4iLCBkZXYtPmxtbWlvKTsKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgICBidWZjb3VudGVyICAweCV4ID0gMHgleFxuIiwgcG9ydC0+YnVmY291bnRlciwKKwkJc2FhNzE2NF9yZWFkbChwb3J0LT5idWZjb3VudGVyKSk7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgICBwaXRjaCAgICAgICAweCV4ID0gJWRcbiIsIHBvcnQtPnBpdGNoLAorCQlzYWE3MTY0X3JlYWRsKHBvcnQtPnBpdGNoKSk7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgICBidWZzaXplICAgICAweCV4ID0gJWRcbiIsIHBvcnQtPmJ1ZnNpemUsCisJCXNhYTcxNjRfcmVhZGwocG9ydC0+YnVmc2l6ZSkpOworCisJZHByaW50ayhEQkdMVkxfRFZCLCAiICAgYnVmZmVyY291bnQgPSAlZFxuIiwgcG9ydC0+aHdjZmcuYnVmZmVyY291bnQpOworCWRwcmludGsoREJHTFZMX0RWQiwgIiAgIGJ1Zm9mZnNldCA9IDB4JXhcbiIsIHBvcnQtPmJ1Zm9mZnNldCk7CisJZHByaW50ayhEQkdMVkxfRFZCLCAiICAgYnVmcHRyMzJoID0gMHgleFxuIiwgcG9ydC0+YnVmcHRyMzJoKTsKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgICBidWZwdHIzMmwgPSAweCV4XG4iLCBwb3J0LT5idWZwdHIzMmwpOworCisJLyogUG9rZSB0aGUgYnVmZmVycyBhbmQgb2Zmc2V0cyBpbnRvIFBDSSBzcGFjZSAqLworCW11dGV4X2xvY2soJnBvcnQtPmRtYXF1ZXVlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShjLCBuLCAmcG9ydC0+ZG1hcXVldWUubGlzdCkgeworCQlidWYgPSBsaXN0X2VudHJ5KGMsIHN0cnVjdCBzYWE3MTY0X2J1ZmZlciwgbGlzdCk7CisKKwkJLyogVE9ETzogUmV2aWV3IHRoaXMgaW4gbGlnaHQgb2YgMzJ2NjQgYXNzaWdubWVudHMgKi8KKwkJc2FhNzE2NF93cml0ZWwocG9ydC0+YnVmb2Zmc2V0ICsgKHNpemVvZih1MzIpICogaSksIDApOworCQlzYWE3MTY0X3dyaXRlbChwb3J0LT5idWZwdHIzMmggKyAoKHNpemVvZih1MzIpICogMikgKiBpKSwKKwkJCWJ1Zi0+cHRfZG1hKTsKKwkJc2FhNzE2NF93cml0ZWwocG9ydC0+YnVmcHRyMzJsICsgKChzaXplb2YodTMyKSAqIDIpICogaSksIDApOworCisJCWRwcmludGsoREJHTFZMX0RWQiwKKwkJCSIgICBidWZbJWRdIG9mZnNldCAweCVsbHggKDB4JXgpICIKKwkJCSJidWYgMHglbGx4LyVsbHggKDB4JXgvJXgpXG4iLAorCQkJaSwKKwkJCSh1NjQpcG9ydC0+YnVmb2Zmc2V0ICsgKGkgKiBzaXplb2YodTMyKSksCisJCQlzYWE3MTY0X3JlYWRsKHBvcnQtPmJ1Zm9mZnNldCArIChzaXplb2YodTMyKSAqIGkpKSwKKwkJCSh1NjQpcG9ydC0+YnVmcHRyMzJoICsgKChzaXplb2YodTMyKSAqIDIpICogaSksCisJCQkodTY0KXBvcnQtPmJ1ZnB0cjMybCArICgoc2l6ZW9mKHUzMikgKiAyKSAqIGkpLAorCQkJc2FhNzE2NF9yZWFkbChwb3J0LT5idWZwdHIzMmggKyAoKHNpemVvZih1MzIpICogaSkKKwkJCQkqIDIpKSwKKwkJCXNhYTcxNjRfcmVhZGwocG9ydC0+YnVmcHRyMzJsICsgKChzaXplb2YodTMyKSAqIGkpCisJCQkJKiAyKSkpOworCisJCWlmIChpKysgPiBwb3J0LT5od2NmZy5idWZmZXJjb3VudCkKKwkJCUJVRygpOworCisJfQorCW11dGV4X3VubG9jaygmcG9ydC0+ZG1hcXVldWVfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTY0X2R2Yl9zdGFydF90c3BvcnQoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCWludCByZXQgPSAwLCByZXN1bHQ7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIlcyhwb3J0PSVkKVxuIiwgX19mdW5jX18sIHBvcnQtPm5yKTsKKworCXNhYTcxNjRfZHZiX2NmZ190c3BvcnQocG9ydCk7CisKKwkvKiBBY3F1aXJlIHRoZSBoYXJkd2FyZSAqLworCXJlc3VsdCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfQUNRVUlSRSk7CisJaWYgKChyZXN1bHQgIT0gU0FBX09LKSAmJiAocmVzdWx0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgYWNxdWlyZSB0cmFuc2l0aW9uIGZhaWxlZCwgcmVzID0gMHgleFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOworCisJCS8qIFN0b3AgdGhlIGhhcmR3YXJlLCByZWdhcmRsZXNzICovCisJCXJlc3VsdCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfU1RPUCk7CisJCWlmICgocmVzdWx0ICE9IFNBQV9PSykgJiYgKHJlc3VsdCAhPSBTQUFfRVJSX0FMUkVBRFlfU1RPUFBFRCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBhY3F1aXJlL2ZvcmNlZCBzdG9wIHRyYW5zaXRpb24gIgorCQkJCSJmYWlsZWQsIHJlcyA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQl9CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0gZWxzZQorCQlkcHJpbnRrKERCR0xWTF9EVkIsICIlcygpICAgQWNxdWlyZWRcbiIsIF9fZnVuY19fKTsKKworCS8qIFBhdXNlIHRoZSBoYXJkd2FyZSAqLworCXJlc3VsdCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfUEFVU0UpOworCWlmICgocmVzdWx0ICE9IFNBQV9PSykgJiYgKHJlc3VsdCAhPSBTQUFfRVJSX0FMUkVBRFlfU1RPUFBFRCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHBhdXNlIHRyYW5zaXRpb24gZmFpbGVkLCByZXMgPSAweCV4XG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOworCisJCS8qIFN0b3AgdGhlIGhhcmR3YXJlLCByZWdhcmRsZXNzICovCisJCXJlc3VsdCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfU1RPUCk7CisJCWlmICgocmVzdWx0ICE9IFNBQV9PSykgJiYgKHJlc3VsdCAhPSBTQUFfRVJSX0FMUkVBRFlfU1RPUFBFRCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBwYXVzZS9mb3JjZWQgc3RvcCB0cmFuc2l0aW9uICIKKwkJCQkiZmFpbGVkLCByZXMgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJfQorCisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0gZWxzZQorCQlkcHJpbnRrKERCR0xWTF9EVkIsICIlcygpICAgUGF1c2VkXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBTdGFydCB0aGUgaGFyZHdhcmUgKi8KKwlyZXN1bHQgPSBzYWE3MTY0X2FwaV90cmFuc2l0aW9uX3BvcnQocG9ydCwgU0FBX0RNQVNUQVRFX1JVTik7CisJaWYgKChyZXN1bHQgIT0gU0FBX09LKSAmJiAocmVzdWx0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgcnVuIHRyYW5zaXRpb24gZmFpbGVkLCByZXN1bHQgPSAweCV4XG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOworCisJCS8qIFN0b3AgdGhlIGhhcmR3YXJlLCByZWdhcmRsZXNzICovCisJCXJlc3VsdCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfU1RPUCk7CisJCWlmICgocmVzdWx0ICE9IFNBQV9PSykgJiYgKHJlc3VsdCAhPSBTQUFfRVJSX0FMUkVBRFlfU1RPUFBFRCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBydW4vZm9yY2VkIHN0b3AgdHJhbnNpdGlvbiAiCisJCQkJImZhaWxlZCwgcmVzID0gMHgleFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCX0KKworCQlyZXQgPSAtRUlPOworCX0gZWxzZQorCQlkcHJpbnRrKERCR0xWTF9EVkIsICIlcygpICAgUnVubmluZ1xuIiwgX19mdW5jX18pOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYWE3MTY0X2R2Yl9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKK3sKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OworCXN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKikgZGVtdXgtPnByaXY7CisJc3RydWN0IHNhYTcxNjRfZHZiICpkdmIgPSAmcG9ydC0+ZHZiOworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCWludCByZXQgPSAwOworCisJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMocG9ydD0lZClcbiIsIF9fZnVuY19fLCBwb3J0LT5ucik7CisKKwlpZiAoIWRlbXV4LT5kbXguZnJvbnRlbmQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGR2YikgeworCQltdXRleF9sb2NrKCZkdmItPmxvY2spOworCQlpZiAoZHZiLT5mZWVkaW5nKysgPT0gMCkgeworCQkJLyogU3RhcnQgdHJhbnNwb3J0ICovCisJCQlyZXQgPSBzYWE3MTY0X2R2Yl9zdGFydF90c3BvcnQocG9ydCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZkdmItPmxvY2spOworCQlkcHJpbnRrKERCR0xWTF9EVkIsICIlcyhwb3J0PSVkKSBub3cgZmVlZGluZyA9ICVkXG4iLAorCQkJX19mdW5jX18sIHBvcnQtPm5yLCBkdmItPmZlZWRpbmcpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzE2NF9kdmJfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKK3sKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OworCXN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKikgZGVtdXgtPnByaXY7CisJc3RydWN0IHNhYTcxNjRfZHZiICpkdmIgPSAmcG9ydC0+ZHZiOworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCWludCByZXQgPSAwOworCisJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMocG9ydD0lZClcbiIsIF9fZnVuY19fLCBwb3J0LT5ucik7CisKKwlpZiAoZHZiKSB7CisJCW11dGV4X2xvY2soJmR2Yi0+bG9jayk7CisJCWlmICgtLWR2Yi0+ZmVlZGluZyA9PSAwKSB7CisJCQkvKiBTdG9wIHRyYW5zcG9ydCAqLworCQkJcmV0ID0gc2FhNzE2NF9kdmJfc3RvcF9zdHJlYW1pbmcocG9ydCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZkdmItPmxvY2spOworCQlkcHJpbnRrKERCR0xWTF9EVkIsICIlcyhwb3J0PSVkKSBub3cgZmVlZGluZyA9ICVkXG4iLAorCQkJX19mdW5jX18sIHBvcnQtPm5yLCBkdmItPmZlZWRpbmcpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kdmIgKmR2YiA9ICZwb3J0LT5kdmI7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJc3RydWN0IHNhYTcxNjRfYnVmZmVyICpidWY7CisJaW50IHJlc3VsdCwgaTsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKHBvcnQ9JWQpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnIpOworCisJLyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGlzIGFjdGl2ZSAqLworCWlmIChwb3J0LT5od2NmZy5CQVJMb2NhdGlvbiA9PSAwKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyIGZhaWxlZCAiCisJCSAgICAgICAiKGVycm5vID0gJWQpLCBOTyBQQ0kgY29uZmlndXJhdGlvblxuIiwKKwkJCURSSVZFUl9OQU1FLCByZXN1bHQpOworCQlnb3RvIGZhaWxfYWRhcHRlcjsKKwl9CisKKwkvKiBJbml0IGFuZCBlc3RhYmxpc2ggZGVmYXVsdHMgKi8KKwlwb3J0LT5od19zdHJlYW1pbmdwYXJhbXMuYml0c3BlcnNhbXBsZSA9IDg7CisJcG9ydC0+aHdfc3RyZWFtaW5ncGFyYW1zLnNhbXBsZXNwZXJsaW5lID0gMTg4OworCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5udW1iZXJvZmxpbmVzID0KKwkJKFNBQTcxNjRfVFNfTlVNQkVSX09GX0xJTkVTICogMTg4KSAvIDE4ODsKKworCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5waXRjaCA9IDE4ODsKKwlwb3J0LT5od19zdHJlYW1pbmdwYXJhbXMubGluZXRocmVzaG9sZCA9IDA7CisJcG9ydC0+aHdfc3RyZWFtaW5ncGFyYW1zLnBhZ2V0YWJsZWxpc3R2aXJ0ID0gMDsKKwlwb3J0LT5od19zdHJlYW1pbmdwYXJhbXMucGFnZXRhYmxlbGlzdHBoeXMgPSAwOworCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5udW1wYWdldGFibGVzID0gMiArCisJCSgoU0FBNzE2NF9UU19OVU1CRVJfT0ZfTElORVMgKiAxODgpIC8gUEFHRV9TSVpFKTsKKworCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5udW1wYWdldGFibGVlbnRyaWVzID0gcG9ydC0+aHdjZmcuYnVmZmVyY291bnQ7CisKKwkvKiBBbGxvY2F0ZSB0aGUgUENJIHJlc291cmNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5od2NmZy5idWZmZXJjb3VudDsgaSsrKSB7CisJCWJ1ZiA9IHNhYTcxNjRfYnVmZmVyX2FsbG9jKHBvcnQsCisJCQlwb3J0LT5od19zdHJlYW1pbmdwYXJhbXMubnVtYmVyb2ZsaW5lcyAqCisJCQlwb3J0LT5od19zdHJlYW1pbmdwYXJhbXMucGl0Y2gpOworCisJCWlmICghYnVmKSB7CisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZHZiX3JlZ2lzdGVyX2FkYXB0ZXIgZmFpbGVkICIKKwkJCSAgICAgICAiKGVycm5vID0gJWQpLCB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyc1xuIiwKKwkJCQlEUklWRVJfTkFNRSwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbF9hZGFwdGVyOworCQl9CisJCWJ1Zi0+bnIgPSBpOworCisJCW11dGV4X2xvY2soJnBvcnQtPmRtYXF1ZXVlX2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZwb3J0LT5kbWFxdWV1ZS5saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5kbWFxdWV1ZV9sb2NrKTsKKwl9CisKKwkvKiByZWdpc3RlciBhZGFwdGVyICovCisJcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlciwgRFJJVkVSX05BTUUsIFRISVNfTU9EVUxFLAorCQkJJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyIGZhaWxlZCAiCisJCSAgICAgICAiKGVycm5vID0gJWQpXG4iLCBEUklWRVJfTkFNRSwgcmVzdWx0KTsKKwkJZ290byBmYWlsX2FkYXB0ZXI7CisJfQorCWR2Yi0+YWRhcHRlci5wcml2ID0gcG9ydDsKKworCS8qIHJlZ2lzdGVyIGZyb250ZW5kICovCisJcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkdmItPmFkYXB0ZXIsIGR2Yi0+ZnJvbnRlbmQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCBmYWlsZWQgIgorCQkgICAgICAgIihlcnJubyA9ICVkKVxuIiwgRFJJVkVSX05BTUUsIHJlc3VsdCk7CisJCWdvdG8gZmFpbF9mcm9udGVuZDsKKwl9CisKKwkvKiByZWdpc3RlciBkZW11eCBzdHVmZiAqLworCWR2Yi0+ZGVtdXguZG14LmNhcGFiaWxpdGllcyA9CisJCURNWF9UU19GSUxURVJJTkcgfCBETVhfU0VDVElPTl9GSUxURVJJTkcgfAorCQlETVhfTUVNT1JZX0JBU0VEX0ZJTFRFUklORzsKKwlkdmItPmRlbXV4LnByaXYgICAgICAgPSBwb3J0OworCWR2Yi0+ZGVtdXguZmlsdGVybnVtICA9IDI1NjsKKwlkdmItPmRlbXV4LmZlZWRudW0gICAgPSAyNTY7CisJZHZiLT5kZW11eC5zdGFydF9mZWVkID0gc2FhNzE2NF9kdmJfc3RhcnRfZmVlZDsKKwlkdmItPmRlbXV4LnN0b3BfZmVlZCAgPSBzYWE3MTY0X2R2Yl9zdG9wX2ZlZWQ7CisJcmVzdWx0ID0gZHZiX2RteF9pbml0KCZkdmItPmRlbXV4KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkdmJfZG14X2luaXQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKKwkJICAgICAgIERSSVZFUl9OQU1FLCByZXN1bHQpOworCQlnb3RvIGZhaWxfZG14OworCX0KKworCWR2Yi0+ZG14ZGV2LmZpbHRlcm51bSAgICA9IDI1NjsKKwlkdmItPmRteGRldi5kZW11eCAgICAgICAgPSAmZHZiLT5kZW11eC5kbXg7CisJZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKKwlyZXN1bHQgPSBkdmJfZG14ZGV2X2luaXQoJmR2Yi0+ZG14ZGV2LCAmZHZiLT5hZGFwdGVyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkdmJfZG14ZGV2X2luaXQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKKwkJICAgICAgIERSSVZFUl9OQU1FLCByZXN1bHQpOworCQlnb3RvIGZhaWxfZG14ZGV2OworCX0KKworCWR2Yi0+ZmVfaHcuc291cmNlID0gRE1YX0ZST05URU5EXzA7CisJcmVzdWx0ID0gZHZiLT5kZW11eC5kbXguYWRkX2Zyb250ZW5kKCZkdmItPmRlbXV4LmRteCwgJmR2Yi0+ZmVfaHcpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9mcm9udGVuZCBmYWlsZWQgIgorCQkgICAgICAgIihETVhfRlJPTlRFTkRfMCwgZXJybm8gPSAlZClcbiIsIERSSVZFUl9OQU1FLCByZXN1bHQpOworCQlnb3RvIGZhaWxfZmVfaHc7CisJfQorCisJZHZiLT5mZV9tZW0uc291cmNlID0gRE1YX01FTU9SWV9GRTsKKwlyZXN1bHQgPSBkdmItPmRlbXV4LmRteC5hZGRfZnJvbnRlbmQoJmR2Yi0+ZGVtdXguZG14LCAmZHZiLT5mZV9tZW0pOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9mcm9udGVuZCBmYWlsZWQgIgorCQkgICAgICAgIihETVhfTUVNT1JZX0ZFLCBlcnJubyA9ICVkKVxuIiwgRFJJVkVSX05BTUUsIHJlc3VsdCk7CisJCWdvdG8gZmFpbF9mZV9tZW07CisJfQorCisJcmVzdWx0ID0gZHZiLT5kZW11eC5kbXguY29ubmVjdF9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX2h3KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb25uZWN0X2Zyb250ZW5kIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCisJCSAgICAgICBEUklWRVJfTkFNRSwgcmVzdWx0KTsKKwkJZ290byBmYWlsX2ZlX2Nvbm47CisJfQorCisJLyogcmVnaXN0ZXIgbmV0d29yayBhZGFwdGVyICovCisJZHZiX25ldF9pbml0KCZkdmItPmFkYXB0ZXIsICZkdmItPm5ldCwgJmR2Yi0+ZGVtdXguZG14KTsKKwlyZXR1cm4gMDsKKworZmFpbF9mZV9jb25uOgorCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX21lbSk7CitmYWlsX2ZlX21lbToKKwlkdmItPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2Yi0+ZGVtdXguZG14LCAmZHZiLT5mZV9odyk7CitmYWlsX2ZlX2h3OgorCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZHZiLT5kbXhkZXYpOworZmFpbF9kbXhkZXY6CisJZHZiX2RteF9yZWxlYXNlKCZkdmItPmRlbXV4KTsKK2ZhaWxfZG14OgorCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZnJvbnRlbmQpOworZmFpbF9mcm9udGVuZDoKKwlkdmJfZnJvbnRlbmRfZGV0YWNoKGR2Yi0+ZnJvbnRlbmQpOworCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlcik7CitmYWlsX2FkYXB0ZXI6CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHNhYTcxNjRfZHZiX3VucmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBzYWE3MTY0X2R2YiAqZHZiID0gJnBvcnQtPmR2YjsKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKmI7CisJc3RydWN0IGxpc3RfaGVhZCAqYywgKm47CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBSZW1vdmUgYW55IGFsbG9jYXRlZCBidWZmZXJzICovCisJbXV0ZXhfbG9jaygmcG9ydC0+ZG1hcXVldWVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGMsIG4sICZwb3J0LT5kbWFxdWV1ZS5saXN0KSB7CisJCWIgPSBsaXN0X2VudHJ5KGMsIHN0cnVjdCBzYWE3MTY0X2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsKGMpOworCQlzYWE3MTY0X2J1ZmZlcl9kZWFsbG9jKHBvcnQsIGIpOworCX0KKwltdXRleF91bmxvY2soJnBvcnQtPmRtYXF1ZXVlX2xvY2spOworCisJaWYgKGR2Yi0+ZnJvbnRlbmQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlkdmJfbmV0X3JlbGVhc2UoJmR2Yi0+bmV0KTsKKwlkdmItPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2Yi0+ZGVtdXguZG14LCAmZHZiLT5mZV9tZW0pOworCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX2h3KTsKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmR2Yi0+ZG14ZGV2KTsKKwlkdmJfZG14X3JlbGVhc2UoJmR2Yi0+ZGVtdXgpOworCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZnJvbnRlbmQpOworCWR2Yl9mcm9udGVuZF9kZXRhY2goZHZiLT5mcm9udGVuZCk7CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyKTsKKwlyZXR1cm4gMDsKK30KKworLyogQWxsIHRoZSBEVkIgYXR0YWNoIGNhbGxzIGdvIGhlcmUsIHRoaXMgZnVuY3Rpb24gZ2V0J3MgbW9kaWZpZWQKKyAqIGZvciBlYWNoIG5ldyBjYXJkLgorICovCitpbnQgc2FhNzE2NF9kdmJfcmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCXN0cnVjdCBzYWE3MTY0X2R2YiAqZHZiID0gJnBvcnQtPmR2YjsKKwlzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmkyY19idXMgPSBOVUxMOworCWludCByZXQ7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBpbml0IGZyb250ZW5kICovCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMF8yOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMF8zOgorCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1twb3J0LT5uciArIDFdOworCQlzd2l0Y2ggKHBvcnQtPm5yKSB7CisJCWNhc2UgMDoKKwkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAorCQkJCSZoYXVwcGF1Z2VfaHZyMjIwMF8xX2NvbmZpZywKKwkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOworCisJCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCQkvKiBUT0RPOiBhZGRyIGlzIGluIHRoZSBjYXJkIHN0cnVjdCAqLworCQkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQkJCTB4YzAgPj4gMSwgJmkyY19idXMtPmkyY19hZGFwLAorCQkJCQkmaGF1cHBhdWdlX2h2cjIyeDBfdHVuZXJfY29uZmlnKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAorCQkJCSZoYXVwcGF1Z2VfaHZyMjIwMF8yX2NvbmZpZywKKwkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOworCisJCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCQkvKiBUT0RPOiBhZGRyIGlzIGluIHRoZSBjYXJkIHN0cnVjdCAqLworCQkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQkJCTB4YzAgPj4gMSwgJmkyY19idXMtPmkyY19hZGFwLAorCQkJCQkmaGF1cHBhdWdlX2h2cjIyeDBzX3R1bmVyX2NvbmZpZyk7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MDoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTBfMjoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTBfMzoKKwkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbcG9ydC0+bnIgKyAxXTsKKworCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAorCQkJJmhhdXBwYXVnZV9zNWgxNDExX2NvbmZpZywKKwkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisKKwkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAocG9ydC0+bnIgPT0gMCkgeworCQkJCS8qIE1hc3RlciBUREExODI3MSAqLworCQkJCS8qIFRPRE86IGFkZHIgaXMgaW4gdGhlIGNhcmQgc3RydWN0ICovCisJCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCQkJMHhjMCA+PiAxLCAmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCSZoYXVwcGF1Z2VfaHZyMjJ4MF90dW5lcl9jb25maWcpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTbGF2ZSBUREExODI3MSAqLworCQkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQkJCTB4YzAgPj4gMSwgJmkyY19idXMtPmkyY19hZGFwLAorCQkJCQkmaGF1cHBhdWdlX2h2cjIyeDBzX3R1bmVyX2NvbmZpZyk7CisJCQl9CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgZnJvbnRlbmQgaXNuJ3Qgc3VwcG9ydGVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJfQorCWlmIChOVUxMID09IGR2Yi0+ZnJvbnRlbmQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIEZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCisKKwkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCisJcmV0ID0gZHZiX3JlZ2lzdGVyKHBvcnQpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChkdmItPmZyb250ZW5kLT5vcHMucmVsZWFzZSkKKwkJCWR2Yi0+ZnJvbnRlbmQtPm9wcy5yZWxlYXNlKGR2Yi0+ZnJvbnRlbmQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1mdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTBhZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZncuYwpAQCAtMCwwICsxLDYxMyBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAic2FhNzE2NC5oIgorCisjZGVmaW5lIFNBQTcxNjRfUkVWMl9GSVJNV0FSRQkJInY0bC1zYWE3MTY0LTEuMC4yLmZ3IgorI2RlZmluZSBTQUE3MTY0X1JFVjJfRklSTVdBUkVfU0laRQkzOTc4NjA4CisKKyNkZWZpbmUgU0FBNzE2NF9SRVYzX0ZJUk1XQVJFCQkidjRsLXNhYTcxNjQtMS4wLjMuZnciCisjZGVmaW5lIFNBQTcxNjRfUkVWM19GSVJNV0FSRV9TSVpFCTM5Nzg2MDgKKworc3RydWN0IGZ3X2hlYWRlciB7CisJdTMyCWZpcm13YXJlc2l6ZTsKKwl1MzIJYnNsc2l6ZTsKKwl1MzIJcmVzZXJ2ZWQ7CisJdTMyCXZlcnNpb247Cit9OworCitpbnQgc2FhNzE2NF9kbF93YWl0X2FjayhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTMyIHJlZykKK3sKKwl1MzIgdGltZW91dCA9IFNBQV9ERVZJQ0VfVElNRU9VVDsKKwl3aGlsZSAoKHNhYTcxNjRfcmVhZGwocmVnKSAmIDB4MDEpID09IDApIHsKKwkJdGltZW91dCAtPSAxMDsKKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVvdXQgKG5vIGQvbCBhY2spXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJbXNsZWVwKDEwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBzYWE3MTY0X2RsX3dhaXRfY2xyKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1MzIgcmVnKQoreworCXUzMiB0aW1lb3V0ID0gU0FBX0RFVklDRV9USU1FT1VUOworCXdoaWxlIChzYWE3MTY0X3JlYWRsKHJlZykgJiAweDAxKSB7CisJCXRpbWVvdXQgLT0gMTA7CisJCWlmICh0aW1lb3V0ID09IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lb3V0IChubyBkL2wgY2xyKVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCW1zbGVlcCgxMDApOworCX0KKworCXJldHVybiAwOworfQorCisvKiBUT0RPOiBtb3ZlIGRsZmxhZ3MgaW50byBkZXYtPiBhbmQgY2hhbmdlIHRvIHdyaXRlL3JlYWRsL2IgKi8KKy8qIFRPRE86IEV4Y2Vzc2l2ZSBsZXZlbHMgb2YgZGVidWcgKi8KK2ludCBzYWE3MTY0X2Rvd25sb2FkaW1hZ2Uoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4ICpzcmMsIHUzMiBzcmNzaXplLAorCXUzMiBkbGZsYWdzLCB1OCAqZHN0LCB1MzIgZHN0c2l6ZSkKK3sKKwl1MzIgcmVnLCB0aW1lb3V0LCBvZmZzZXQ7CisJdTggKnNyY2J1ZiA9IE5VTEw7CisJaW50IHJldDsKKworCXUzMiBkbGZsYWcgPSBkbGZsYWdzOworCXUzMiBkbGZsYWdfYWNrID0gZGxmbGFnICsgNDsKKwl1MzIgZHJmbGFnID0gZGxmbGFnX2FjayArIDQ7CisJdTMyIGRyZmxhZ19hY2sgPSBkcmZsYWcgKyA0OworCXUzMiBibGVmbGFnID0gZHJmbGFnX2FjayArIDQ7CisKKwlkcHJpbnRrKERCR0xWTF9GVywKKwkJIiVzKGltYWdlPSVwLCBzaXplPSVkLCBmbGFncz0weCV4LCBkc3Q9JXAsIGRzdHNpemU9MHgleClcbiIsCisJCV9fZnVuY19fLCBzcmMsIHNyY3NpemUsIGRsZmxhZ3MsIGRzdCwgZHN0c2l6ZSk7CisKKwlpZiAoKHNyYyA9PSAwKSB8fCAoZHN0ID09IDApKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCXNyY2J1ZiA9IGt6YWxsb2MoNCAqIDEwNDg1NzYsIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IHNyY2J1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3Jjc2l6ZSA+ICg0KjEwNDg1NzYpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweShzcmNidWYsIHNyYywgc3Jjc2l6ZSk7CisKKwlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgZGxmbGFnID0gMHgleFxuIiwgX19mdW5jX18sIGRsZmxhZyk7CisJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIGRsZmxhZ19hY2sgPSAweCV4XG4iLCBfX2Z1bmNfXywgZGxmbGFnX2Fjayk7CisJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIGRyZmxhZyA9IDB4JXhcbiIsIF9fZnVuY19fLCBkcmZsYWcpOworCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBkcmZsYWdfYWNrID0gMHgleFxuIiwgX19mdW5jX18sIGRyZmxhZ19hY2spOworCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBibGVmbGFnID0gMHgleFxuIiwgX19mdW5jX18sIGJsZWZsYWcpOworCisJcmVnID0gc2FhNzE2NF9yZWFkbChkbGZsYWcpOworCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBkbGZsYWcgKDB4JXgpPSAweCV4XG4iLCBfX2Z1bmNfXywgZGxmbGFnLCByZWcpOworCWlmIChyZWcgPT0gMSkKKwkJZHByaW50ayhEQkdMVkxfRlcsCisJCQkiJXMoKSBEb3dubG9hZCBmbGFnIGFscmVhZHkgc2V0LCBwbGVhc2UgcmVib290XG4iLAorCQkJX19mdW5jX18pOworCisJLyogSW5kaWNhdGUgZG93bmxvYWQgc3RhcnQgKi8KKwlzYWE3MTY0X3dyaXRlbChkbGZsYWcsIDEpOworCXJldCA9IHNhYTcxNjRfZGxfd2FpdF9hY2soZGV2LCBkbGZsYWdfYWNrKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBBY2sgZG93bmxvYWQgc3RhcnQsIHRoZW4gd2FpdCBmb3Igd2FpdCAqLworCXNhYTcxNjRfd3JpdGVsKGRsZmxhZywgMCk7CisJcmV0ID0gc2FhNzE2NF9kbF93YWl0X2NscihkZXYsIGRsZmxhZ19hY2spOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIERlYWwgd2l0aCB0aGUgcmF3IGZpcm13YXJlLCBpbiB0aGUgYXBwcm9wcmlhdGUgY2h1bmsgc2l6ZSAqLworCWZvciAob2Zmc2V0ID0gMDsgc3Jjc2l6ZSA+IGRzdHNpemU7CisJCXNyY3NpemUgLT0gZHN0c2l6ZSwgb2Zmc2V0ICs9IGRzdHNpemUpIHsKKworCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgbWVtY3B5ICVkXG4iLCBfX2Z1bmNfXywgZHN0c2l6ZSk7CisJCW1lbWNweShkc3QsIHNyY2J1ZiArIG9mZnNldCwgZHN0c2l6ZSk7CisKKwkJLyogRmxhZyB0aGUgZGF0YSBhcyByZWFkeSAqLworCQlzYWE3MTY0X3dyaXRlbChkcmZsYWcsIDEpOworCQlyZXQgPSBzYWE3MTY0X2RsX3dhaXRfYWNrKGRldiwgZHJmbGFnX2Fjayk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJLyogV2FpdCBmb3IgaW5kaWNhdGlvbiBkYXRhIHdhcyByZWNlaXZlZCAqLworCQlzYWE3MTY0X3dyaXRlbChkcmZsYWcsIDApOworCQlyZXQgPSBzYWE3MTY0X2RsX3dhaXRfY2xyKGRldiwgZHJmbGFnX2Fjayk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwl9CisKKwlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgbWVtY3B5KGwpICVkXG4iLCBfX2Z1bmNfXywgZHN0c2l6ZSk7CisJLyogV3JpdGUgbGFzdCBibG9jayB0byB0aGUgZGV2aWNlICovCisJbWVtY3B5KGRzdCwgc3JjYnVmK29mZnNldCwgc3Jjc2l6ZSk7CisKKwkvKiBGbGFnIHRoZSBkYXRhIGFzIHJlYWR5ICovCisJc2FhNzE2NF93cml0ZWwoZHJmbGFnLCAxKTsKKwlyZXQgPSBzYWE3MTY0X2RsX3dhaXRfYWNrKGRldiwgZHJmbGFnX2Fjayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc2FhNzE2NF93cml0ZWwoZHJmbGFnLCAwKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoc2FhNzE2NF9yZWFkbChibGVmbGFnKSAhPSBTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpIHsKKwkJaWYgKHNhYTcxNjRfcmVhZGwoYmxlZmxhZykgJiBTQUFfREVWSUNFX0lNQUdFX0NPUlJVUFQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBpbWFnZSBjb3JydXB0XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChzYWE3MTY0X3JlYWRsKGJsZWZsYWcpICYgU0FBX0RFVklDRV9NRU1PUllfQ09SUlVQVCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGRldmljZSBtZW1vcnkgY29ycnVwdFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW1zbGVlcCgxMCk7CisJCWlmICh0aW1lb3V0KysgPiA2MCkKKwkJCWJyZWFrOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIiVzKCkgSW1hZ2UgZG93bmxvYWRlZCwgYm9vdGluZy4uLlxuIiwgX19mdW5jX18pOworCisJcmV0ID0gc2FhNzE2NF9kbF93YWl0X2NscihkZXYsIGRyZmxhZ19hY2spOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXByaW50ayhLRVJOX0lORk8gIiVzKCkgSW1hZ2UgYm9vdGVkIHN1Y2Nlc3NmdWxseS5cbiIsIF9fZnVuY19fKTsKKwlyZXQgPSAwOworCitvdXQ6CisJa2ZyZWUoc3JjYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBUT0RPOiBFeGNlc3NpdmUgZGVidWcgKi8KKy8qIExvYWQgdGhlIGZpcm13YXJlLiBPcHRpb25hbGx5IGl0IGNhbiBiZSBpbiBST00gb3IgbmV3ZXIgdmVyc2lvbnMKKyAqIGNhbiBiZSBvbiBkaXNrLCBzYXZpbmcgdGhlIGV4cGVuc2Ugb2YgdGhlIFJPTSBoYXJkd2FyZS4gKi8KK2ludCBzYWE3MTY0X2Rvd25sb2FkZmlybXdhcmUoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJLyogdTMyIHNlY29uZF90aW1lb3V0ID0gNjAgKiBTQUFfREVWSUNFX1RJTUVPVVQ7ICovCisJdTMyIHRtcCwgZmlsZXNpemUsIHZlcnNpb24sIGVycl9mbGFncywgZmlyc3RfdGltZW91dCwgZndsZW5ndGg7CisJdTMyIHNlY29uZF90aW1lb3V0LCB1cGRhdGVib290bG9hZGVyID0gMSwgYm9vdGxvYWRlcnNpemUgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOworCXN0cnVjdCBmd19oZWFkZXIgKmhkciwgKmJvb3RoZHIgPSBOVUxMLCAqZndoZHI7CisJdTMyIGJvb3Rsb2FkZXJ2ZXJzaW9uID0gMCwgZndsb2FkZXJzaXplOworCXU4ICpib290bG9hZGVyb2Zmc2V0ID0gTlVMTCwgKmZ3bG9hZGVyb2Zmc2V0OworCWNoYXIgKmZ3bmFtZTsKKwlpbnQgcmV0OworCisJZHByaW50ayhEQkdMVkxfRlcsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc2FhNzE2NF9ib2FyZHNbZGV2LT5ib2FyZF0uY2hpcHJldiA9PSBTQUE3MTY0X0NISVBfUkVWMikgeworCQlmd25hbWUgPSBTQUE3MTY0X1JFVjJfRklSTVdBUkU7CisJCWZ3bGVuZ3RoID0gU0FBNzE2NF9SRVYyX0ZJUk1XQVJFX1NJWkU7CisJfSBlbHNlIHsKKwkJZnduYW1lID0gU0FBNzE2NF9SRVYzX0ZJUk1XQVJFOworCQlmd2xlbmd0aCA9IFNBQTcxNjRfUkVWM19GSVJNV0FSRV9TSVpFOworCX0KKworCXZlcnNpb24gPSBzYWE3MTY0X2dldGN1cnJlbnRmaXJtd2FyZXZlcnNpb24oZGV2KTsKKworCWlmICh2ZXJzaW9uID09IDB4MDApIHsKKworCQlzZWNvbmRfdGltZW91dCA9IDEwMDsKKwkJZmlyc3RfdGltZW91dCA9IDEwMDsKKwkJZXJyX2ZsYWdzID0gc2FhNzE2NF9yZWFkbChTQUFfQk9PVExPQURFUkVSUk9SX0ZMQUdTKTsKKwkJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIGVycl9mbGFncyA9ICV4XG4iLAorCQkJX19mdW5jX18sIGVycl9mbGFncyk7CisKKwkJd2hpbGUgKGVycl9mbGFncyAhPSBTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpIHsKKwkJCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBlcnJfZmxhZ3MgPSAleFxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyX2ZsYWdzKTsKKwkJCW1zbGVlcCgxMCk7CisKKwkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX0lNQUdFX0NPUlJVUFQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmlybXdhcmUgY29ycnVwdFxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGVycl9mbGFncyAmIFNBQV9ERVZJQ0VfTUVNT1JZX0NPUlJVUFQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZGV2aWNlIG1lbW9yeSBjb3JydXB0XG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZXJyX2ZsYWdzICYgU0FBX0RFVklDRV9OT19JTUFHRSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBubyBmaXJzdCBpbWFnZVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZXJyX2ZsYWdzICYgU0FBX0RFVklDRV9JTUFHRV9TRUFSQ0hJTkcpIHsKKwkJCQlmaXJzdF90aW1lb3V0IC09IDEwOworCQkJCWlmIChmaXJzdF90aW1lb3V0ID09IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkiJXMoKSBubyBmaXJzdCBpbWFnZVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIGlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX0lNQUdFX0xPQURJTkcpIHsKKwkJCQlzZWNvbmRfdGltZW91dCAtPSAxMDsKKwkJCQlpZiAoc2Vjb25kX3RpbWVvdXQgPT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJIiVzKCkgRlcgbG9hZCB0aW1lIGV4Y2VlZGVkXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXNlY29uZF90aW1lb3V0IC09IDEwOworCQkJCWlmIChzZWNvbmRfdGltZW91dCA9PSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiJXMoKSBVbmtub3duIGJvb3Rsb2FkZXIgZmxhZ3MgMHgleFxuIiwKKwkJCQkJCV9fZnVuY19fLCBlcnJfZmxhZ3MpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWVycl9mbGFncyA9IHNhYTcxNjRfcmVhZGwoU0FBX0JPT1RMT0FERVJFUlJPUl9GTEFHUyk7CisJCX0gLyogV2hpbGUgIT0gQm9vdGluZyAqLworCisJCWlmIChlcnJfZmxhZ3MgPT0gU0FBX0RFVklDRV9JTUFHRV9CT09USU5HKSB7CisJCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgTG9hZGVyIDEgaGFzIGxvYWRlZC5cbiIsCisJCQkJX19mdW5jX18pOworCQkJZmlyc3RfdGltZW91dCA9IFNBQV9ERVZJQ0VfVElNRU9VVDsKKwkJCXNlY29uZF90aW1lb3V0ID0gNjAgKiBTQUFfREVWSUNFX1RJTUVPVVQ7CisJCQlzZWNvbmRfdGltZW91dCA9IDEwMDsKKworCQkJZXJyX2ZsYWdzID0gc2FhNzE2NF9yZWFkbChTQUFfU0VDT05EU1RBR0VFUlJPUl9GTEFHUyk7CisJCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgZXJyX2ZsYWdzMiA9ICV4XG4iLAorCQkJCV9fZnVuY19fLCBlcnJfZmxhZ3MpOworCQkJd2hpbGUgKGVycl9mbGFncyAhPSBTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpIHsKKwkJCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgZXJyX2ZsYWdzMiA9ICV4XG4iLAorCQkJCQlfX2Z1bmNfXywgZXJyX2ZsYWdzKTsKKwkJCQltc2xlZXAoMTApOworCisJCQkJaWYgKGVycl9mbGFncyAmIFNBQV9ERVZJQ0VfSU1BR0VfQ09SUlVQVCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSIlcygpIGZpcm13YXJlIGNvcnJ1cHRcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoZXJyX2ZsYWdzICYgU0FBX0RFVklDRV9NRU1PUllfQ09SUlVQVCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSIlcygpIGRldmljZSBtZW1vcnkgY29ycnVwdFxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX05PX0lNQUdFKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBubyBmaXJzdCBpbWFnZVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX0lNQUdFX1NFQVJDSElORykgeworCQkJCQlmaXJzdF90aW1lb3V0IC09IDEwOworCQkJCQlpZiAoZmlyc3RfdGltZW91dCA9PSAwKSB7CisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSIlcygpIG5vIHNlY29uZCBpbWFnZVxuIiwKKwkJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoZXJyX2ZsYWdzICYKKwkJCQkJU0FBX0RFVklDRV9JTUFHRV9MT0FESU5HKSB7CisJCQkJCXNlY29uZF90aW1lb3V0IC09IDEwOworCQkJCQlpZiAoc2Vjb25kX3RpbWVvdXQgPT0gMCkgeworCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkiJXMoKSBGVyBsb2FkIHRpbWUgZXhjZWVkZWRcbiIsCisJCQkJCQkJX19mdW5jX18pOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlzZWNvbmRfdGltZW91dCAtPSAxMDsKKwkJCQkJaWYgKHNlY29uZF90aW1lb3V0ID09IDApIHsKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiJXMoKSBVbmtub3duIGJvb3Rsb2FkZXIgZmxhZ3MgMHgleFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgZXJyX2ZsYWdzKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQkJZXJyX2ZsYWdzID0KKwkJCQlzYWE3MTY0X3JlYWRsKFNBQV9TRUNPTkRTVEFHRUVSUk9SX0ZMQUdTKTsKKwkJCX0gLyogZXJyX2ZsYWdzICE9IFNBQV9ERVZJQ0VfSU1BR0VfQk9PVElORyAqLworCisJCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgTG9hZGVyIGZsYWdzIDE6MHgleCAyOjB4JXguXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCXNhYTcxNjRfcmVhZGwoU0FBX0JPT1RMT0FERVJFUlJPUl9GTEFHUyksCisJCQkJc2FhNzE2NF9yZWFkbChTQUFfU0VDT05EU1RBR0VFUlJPUl9GTEFHUykpOworCisJCX0gLyogZXJyX2ZsYWdzID09IFNBQV9ERVZJQ0VfSU1BR0VfQk9PVElORyAqLworCisJCS8qIEl0J3MgcG9zc2libGUgZm9yIGJvdGggZmlybXdhcmVzIHRvIGhhdmUgYm9vdGVkLAorCQkgKiBidXQgdGhhdCBkb2Vzbid0IG1lYW4gdGhleSd2ZSBmaW5pc2hlZCBib290aW5nIHlldC4KKwkJICovCisJCWlmICgoc2FhNzE2NF9yZWFkbChTQUFfQk9PVExPQURFUkVSUk9SX0ZMQUdTKSA9PQorCQkJU0FBX0RFVklDRV9JTUFHRV9CT09USU5HKSAmJgorCQkJKHNhYTcxNjRfcmVhZGwoU0FBX1NFQ09ORFNUQUdFRVJST1JfRkxBR1MpID09CisJCQlTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpKSB7CisKKworCQkJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIExvYWRlciAyIGhhcyBsb2FkZWQuXG4iLAorCQkJCV9fZnVuY19fKTsKKworCQkJZmlyc3RfdGltZW91dCA9IFNBQV9ERVZJQ0VfVElNRU9VVDsKKwkJCXdoaWxlIChmaXJzdF90aW1lb3V0KSB7CisJCQkJbXNsZWVwKDEwKTsKKworCQkJCXZlcnNpb24gPQorCQkJCQlzYWE3MTY0X2dldGN1cnJlbnRmaXJtd2FyZXZlcnNpb24oZGV2KTsKKwkJCQlpZiAodmVyc2lvbikgeworCQkJCQlkcHJpbnRrKERCR0xWTF9GVywKKwkJCQkJIiVzKCkgQWxsIGYvdyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlmaXJzdF90aW1lb3V0IC09IDEwOworCQkJCQlpZiAoZmlyc3RfdGltZW91dCA9PSAwKSB7CisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSIlcygpIEZXIGRpZCBub3QgYm9vdFxuIiwKKwkJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQl2ZXJzaW9uID0gc2FhNzE2NF9nZXRjdXJyZW50ZmlybXdhcmV2ZXJzaW9uKGRldik7CisJfSAvKiB2ZXJzaW9uID09IDAgKi8KKworCS8qIEhhcyB0aGUgZmlybXdhcmUgcmVhbGx5IGJvb3RlZD8gKi8KKwlpZiAoKHNhYTcxNjRfcmVhZGwoU0FBX0JPT1RMT0FERVJFUlJPUl9GTEFHUykgPT0KKwkJU0FBX0RFVklDRV9JTUFHRV9CT09USU5HKSAmJgorCQkoc2FhNzE2NF9yZWFkbChTQUFfU0VDT05EU1RBR0VFUlJPUl9GTEFHUykgPT0KKwkJU0FBX0RFVklDRV9JTUFHRV9CT09USU5HKSAmJiAodmVyc2lvbiA9PSAwKSkgeworCisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzKCkgVGhlIGZpcm13YXJlIGh1bmcsIHByb2JhYmx5IGJhZCBmaXJtd2FyZVxuIiwKKwkJCV9fZnVuY19fKTsKKworCQkvKiBUZWxsIHRoZSBzZWNvbmQgc3RhZ2UgbG9hZGVyIHdlIGhhdmUgYSBkZWFkbG9jayAqLworCQlzYWE3MTY0X3dyaXRlbChTQUFfREVWSUNFX0RFQURMT0NLX0RFVEVDVEVEX09GRlNFVCwKKwkJCVNBQV9ERVZJQ0VfREVBRExPQ0tfREVURUNURUQpOworCisJCXNhYTcxNjRfZ2V0ZmlybXdhcmVzdGF0dXMoZGV2KTsKKworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkcHJpbnRrKERCR0xWTF9GVywgIkRldmljZSBoYXMgRmlybXdhcmUgVmVyc2lvbiAlZC4lZC4lZC4lZFxuIiwKKwkJKHZlcnNpb24gJiAweDAwMDBmYzAwKSA+PiAxMCwKKwkJKHZlcnNpb24gJiAweDAwMDAwM2UwKSA+PiA1LAorCQkodmVyc2lvbiAmIDB4MDAwMDAwMWYpLAorCQkodmVyc2lvbiAmIDB4ZmZmZjAwMDApID4+IDE2KTsKKworCS8qIExvYWQgdGhlIGZpcm13d2FyZSBmcm9tIHRoZSBkaXNrIGlmIHJlcXVpcmVkICovCisJaWYgKHZlcnNpb24gPT0gMCkgeworCisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcylcbiIsCisJCQlfX2Z1bmNfXywgZnduYW1lKTsKKworCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZnduYW1lLCAmZGV2LT5wY2ktPmRldik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBVcGxvYWQgZmFpbGVkLiAiCisJCQkJIihmaWxlIG5vdCBmb3VuZD8pXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgZmlybXdhcmUgcmVhZCAlWnUgYnl0ZXMuXG4iLAorCQkJX19mdW5jX18sIGZ3LT5zaXplKTsKKworCQlpZiAoZnctPnNpemUgIT0gZndsZW5ndGgpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAieGM1MDAwOiBmaXJtd2FyZSBpbmNvcnJlY3Qgc2l6ZVxuIik7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGZpcm13YXJlIGxvYWRlZC5cbiIsIF9fZnVuY19fKTsKKworCQloZHIgPSAoc3RydWN0IGZ3X2hlYWRlciAqKWZ3LT5kYXRhOworCQlwcmludGsoS0VSTl9JTkZPICJGaXJtd2FyZSBmaWxlIGhlYWRlciBwYXJ0IDE6XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIC5GaXJtd2FyZVNpemUgPSAweCV4XG4iLCBoZHItPmZpcm13YXJlc2l6ZSk7CisJCXByaW50ayhLRVJOX0lORk8gIiAuQlNMU2l6ZSA9IDB4JXhcbiIsIGhkci0+YnNsc2l6ZSk7CisJCXByaW50ayhLRVJOX0lORk8gIiAuUmVzZXJ2ZWQgPSAweCV4XG4iLCBoZHItPnJlc2VydmVkKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIC5WZXJzaW9uID0gMHgleFxuIiwgaGRyLT52ZXJzaW9uKTsKKworCQkvKiBSZXRyZWl2ZSBib290bG9hZGVyIGlmIHJlcWQgKi8KKwkJaWYgKChoZHItPmZpcm13YXJlc2l6ZSA9PSAwKSAmJiAoaGRyLT5ic2xzaXplID09IDApKQorCQkJLyogU2Vjb25kIGJvb3Rsb2FkZXIgaW4gdGhlIGZpcm13YXJlIGZpbGUgKi8KKwkJCWZpbGVzaXplID0gaGRyLT5yZXNlcnZlZCAqIDE2OworCQllbHNlCisJCQlmaWxlc2l6ZSA9IChoZHItPmZpcm13YXJlc2l6ZSArIGhkci0+YnNsc2l6ZSkgKgorCQkJCTE2ICsgc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpOworCisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgU2VjQm9vdExvYWRlci5GaWxlU2l6ZSA9ICVkXG4iLAorCQkJX19mdW5jX18sIGZpbGVzaXplKTsKKworCQkvKiBHZXQgYm9vdGxvYWRlciAoaWYgcmVxZCkgYW5kIGZpcm13YXJlIGhlYWRlciAqLworCQlpZiAoKGhkci0+ZmlybXdhcmVzaXplID09IDApICYmIChoZHItPmJzbHNpemUgPT0gMCkpIHsKKwkJCS8qIFNlY29uZCBib290IGxvYWRlciBpcyByZXF1aXJlZCAqLworCisJCQkvKiBHZXQgdGhlIGxvYWRlciBoZWFkZXIgKi8KKwkJCWJvb3RoZHIgPSAoc3RydWN0IGZ3X2hlYWRlciAqKShmdy0+ZGF0YSArCisJCQkJc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpKTsKKworCQkJYm9vdGxvYWRlcnZlcnNpb24gPQorCQkJCXNhYTcxNjRfcmVhZGwoU0FBX0RFVklDRV8yTkRfVkVSU0lPTik7CisJCQlkcHJpbnRrKERCR0xWTF9GVywgIk9uYm9hcmQgQm9vdExvYWRlcjpcbiIpOworCQkJZHByaW50ayhEQkdMVkxfRlcsICItPkZsYWcgMHgleFxuIiwKKwkJCQlzYWE3MTY0X3JlYWRsKFNBQV9CT09UTE9BREVSRVJST1JfRkxBR1MpKTsKKwkJCWRwcmludGsoREJHTFZMX0ZXLCAiLT5BY2sgMHgleFxuIiwKKwkJCQlzYWE3MTY0X3JlYWRsKFNBQV9EQVRBUkVBRFlfRkxBR19BQ0spKTsKKwkJCWRwcmludGsoREJHTFZMX0ZXLCAiLT5GVyBWZXJzaW9uIDB4JXhcbiIsIHZlcnNpb24pOworCQkJZHByaW50ayhEQkdMVkxfRlcsICItPkxvYWRlciBWZXJzaW9uIDB4JXhcbiIsCisJCQkJYm9vdGxvYWRlcnZlcnNpb24pOworCisJCQlpZiAoKHNhYTcxNjRfcmVhZGwoU0FBX0JPT1RMT0FERVJFUlJPUl9GTEFHUykgPT0KKwkJCQkweDAzKSAmJiAoc2FhNzE2NF9yZWFkbChTQUFfREFUQVJFQURZX0ZMQUdfQUNLKQorCQkJCT09IDB4MDApICYmICh2ZXJzaW9uID09IDB4MDApKSB7CisKKwkJCQlkcHJpbnRrKERCR0xWTF9GVywgIkJvb3RMb2FkZXIgdmVyc2lvbiBpbiAgIgorCQkJCQkicm9tICVkLiVkLiVkLiVkXG4iLAorCQkJCQkoYm9vdGxvYWRlcnZlcnNpb24gJiAweDAwMDBmYzAwKSA+PiAxMCwKKwkJCQkJKGJvb3Rsb2FkZXJ2ZXJzaW9uICYgMHgwMDAwMDNlMCkgPj4gNSwKKwkJCQkJKGJvb3Rsb2FkZXJ2ZXJzaW9uICYgMHgwMDAwMDAxZiksCisJCQkJCShib290bG9hZGVydmVyc2lvbiAmIDB4ZmZmZjAwMDApID4+IDE2CisJCQkJCSk7CisJCQkJZHByaW50ayhEQkdMVkxfRlcsICJCb290TG9hZGVyIHZlcnNpb24gIgorCQkJCQkiaW4gZmlsZSAlZC4lZC4lZC4lZFxuIiwKKwkJCQkJKGJvb3RoZHItPnZlcnNpb24gJiAweDAwMDBmYzAwKSA+PiAxMCwKKwkJCQkJKGJvb3RoZHItPnZlcnNpb24gJiAweDAwMDAwM2UwKSA+PiA1LAorCQkJCQkoYm9vdGhkci0+dmVyc2lvbiAmIDB4MDAwMDAwMWYpLAorCQkJCQkoYm9vdGhkci0+dmVyc2lvbiAmIDB4ZmZmZjAwMDApID4+IDE2CisJCQkJCSk7CisKKwkJCQlpZiAoYm9vdGxvYWRlcnZlcnNpb24gPT0gYm9vdGhkci0+dmVyc2lvbikKKwkJCQkJdXBkYXRlYm9vdGxvYWRlciA9IDA7CisJCQl9CisKKwkJCS8qIENhbGN1bGF0ZSBvZmZzZXQgdG8gZmlybXdhcmUgaGVhZGVyICovCisJCQl0bXAgPSAoYm9vdGhkci0+ZmlybXdhcmVzaXplICsgYm9vdGhkci0+YnNsc2l6ZSkgKiAxNiArCisJCQkJKHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpKTsKKworCQkJZndoZHIgPSAoc3RydWN0IGZ3X2hlYWRlciAqKShmdy0+ZGF0YSt0bXApOworCQl9IGVsc2UgeworCQkJLyogTm8gc2Vjb25kIGJvb3QgbG9hZGVyICovCisJCQlmd2hkciA9IGhkcjsKKwkJfQorCisJCWRwcmludGsoREJHTFZMX0ZXLCAiRmlybXdhcmUgdmVyc2lvbiBpbiBmaWxlICVkLiVkLiVkLiVkXG4iLAorCQkJKGZ3aGRyLT52ZXJzaW9uICYgMHgwMDAwZmMwMCkgPj4gMTAsCisJCQkoZndoZHItPnZlcnNpb24gJiAweDAwMDAwM2UwKSA+PiA1LAorCQkJKGZ3aGRyLT52ZXJzaW9uICYgMHgwMDAwMDAxZiksCisJCQkoZndoZHItPnZlcnNpb24gJiAweGZmZmYwMDAwKSA+PiAxNgorCQkJKTsKKworCQlpZiAodmVyc2lvbiA9PSBmd2hkci0+dmVyc2lvbikgeworCQkJLyogTm8gZG93bmxvYWQsIGZpcm13YXJlIGFscmVhZHkgb24gYm9hcmQgKi8KKwkJCXJldCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICgoaGRyLT5maXJtd2FyZXNpemUgPT0gMCkgJiYgKGhkci0+YnNsc2l6ZSA9PSAwKSkgeworCQkJaWYgKHVwZGF0ZWJvb3Rsb2FkZXIpIHsKKwkJCQkvKiBHZXQgcmVhZHkgdG8gdXBsb2FkIHRoZSBib290bG9hZGVyICovCisJCQkJYm9vdGxvYWRlcnNpemUgPSAoYm9vdGhkci0+ZmlybXdhcmVzaXplICsKKwkJCQkJYm9vdGhkci0+YnNsc2l6ZSkgKiAxNiArCisJCQkJCXNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKTsKKworCQkJCWJvb3Rsb2FkZXJvZmZzZXQgPSAodTggKikoZnctPmRhdGEgKworCQkJCQlzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOworCisJCQkJZHByaW50ayhEQkdMVkxfRlcsICJib290bG9hZGVyIGQvbCBzdGFydHMuXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlcygpIEZpcm13YXJlU2l6ZSA9IDB4JXhcbiIsCisJCQkJCV9fZnVuY19fLCBib290aGRyLT5maXJtd2FyZXNpemUpOworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgQlNMU2l6ZSA9IDB4JXhcbiIsCisJCQkJCV9fZnVuY19fLCBib290aGRyLT5ic2xzaXplKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlcygpIFJlc2VydmVkID0gMHgleFxuIiwKKwkJCQkJX19mdW5jX18sIGJvb3RoZHItPnJlc2VydmVkKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlcygpIFZlcnNpb24gPSAweCV4XG4iLAorCQkJCQlfX2Z1bmNfXywgYm9vdGhkci0+dmVyc2lvbik7CisJCQkJcmV0ID0gc2FhNzE2NF9kb3dubG9hZGltYWdlKAorCQkJCQlkZXYsCisJCQkJCWJvb3Rsb2FkZXJvZmZzZXQsCisJCQkJCWJvb3Rsb2FkZXJzaXplLAorCQkJCQlTQUFfRE9XTkxPQURfRkxBR1MsCisJCQkJCWRldi0+Ym1taW8gKyBTQUFfREVWSUNFX0RPV05MT0FEX09GRlNFVCwKKwkJCQkJU0FBX0RFVklDRV9CVUZGRVJCTE9DS1NJWkUpOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJImJvb3Rsb2FkZXIgZC9sIGhhcyBmYWlsZWRcbiIpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJZHByaW50ayhEQkdMVkxfRlcsCisJCQkJCSJib290bG9hZGVyIGRvd25sb2FkIGNvbXBsZXRlLlxuIik7CisKKwkJCX0KKworCQkJcHJpbnRrKEtFUk5fRVJSICJzdGFydGluZyBmaXJtd2FyZSBkb3dubG9hZCgyKVxuIik7CisJCQlib290bG9hZGVyc2l6ZSA9IChib290aGRyLT5maXJtd2FyZXNpemUgKworCQkJCWJvb3RoZHItPmJzbHNpemUpICogMTYgKworCQkJCXNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKTsKKworCQkJYm9vdGxvYWRlcm9mZnNldCA9CisJCQkJKHU4ICopKGZ3LT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpKTsKKworCQkJZndsb2FkZXJvZmZzZXQgPSBib290bG9hZGVyb2Zmc2V0ICsgYm9vdGxvYWRlcnNpemU7CisKKwkJCS8qIFRPRE86IGZpeCB0aGlzIGJvdW5kcyBvdmVycnVuIGhlcmUgd2l0aCBvbGQgZi93cyAqLworCQkJZndsb2FkZXJzaXplID0gKGZ3aGRyLT5maXJtd2FyZXNpemUgKyBmd2hkci0+YnNsc2l6ZSkgKgorCQkJCTE2ICsgc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpOworCisJCQlyZXQgPSBzYWE3MTY0X2Rvd25sb2FkaW1hZ2UoCisJCQkJZGV2LAorCQkJCWZ3bG9hZGVyb2Zmc2V0LAorCQkJCWZ3bG9hZGVyc2l6ZSwKKwkJCQlTQUFfREVWSUNFXzJORF9ET1dOTE9BREZMQUdfT0ZGU0VULAorCQkJCWRldi0+Ym1taW8gKyBTQUFfREVWSUNFXzJORF9ET1dOTE9BRF9PRkZTRVQsCisJCQkJU0FBX0RFVklDRV8yTkRfQlVGRkVSQkxPQ0tTSVpFKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJcHJpbnRrKEtFUk5fRVJSICJmaXJtd2FyZSBkb3dubG9hZCBjb21wbGV0ZS5cbiIpOworCisJCX0gZWxzZSB7CisKKwkJCS8qIE5vIGJvb3Rsb2FkZXIgdXBkYXRlIHJlcWQsIGRvd25sb2FkIGZpcm13YXJlIG9ubHkgKi8KKwkJCXByaW50ayhLRVJOX0VSUiAic3RhcnRpbmcgZmlybXdhcmUgZG93bmxvYWQoMylcbiIpOworCisJCQlyZXQgPSBzYWE3MTY0X2Rvd25sb2FkaW1hZ2UoCisJCQkJZGV2LAorCQkJCSh1OCAqKWZ3LT5kYXRhLAorCQkJCWZ3LT5zaXplLAorCQkJCVNBQV9ET1dOTE9BRF9GTEFHUywKKwkJCQlkZXYtPmJtbWlvICsgU0FBX0RFVklDRV9ET1dOTE9BRF9PRkZTRVQsCisJCQkJU0FBX0RFVklDRV9CVUZGRVJCTE9DS1NJWkUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlwcmludGsoS0VSTl9FUlIgImZpcm13YXJlIGRvd25sb2FkIGNvbXBsZXRlLlxuIik7CisJCX0KKwl9CisKKwlyZXQgPSAwOworCitvdXQ6CisJaWYgKGZ3KQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYWU5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1pMmMuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAic2FhNzE2NC5oIgorCitzdGF0aWMgaW50IGkyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCWludCBpLCByZXR2YWwgPSAwOworCisJZHByaW50ayhEQkdMVkxfSTJDLCAiJXMobnVtID0gJWQpXG4iLCBfX2Z1bmNfXywgbnVtKTsKKworCWZvciAoaSA9IDAgOyBpIDwgbnVtOyBpKyspIHsKKwkJZHByaW50ayhEQkdMVkxfSTJDLCAiJXMobnVtID0gJWQpIGFkZHIgPSAweCUwMnggIGxlbiA9IDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgbnVtLCBtc2dzW2ldLmFkZHIsIG1zZ3NbaV0ubGVuKTsKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJLyogVW5zdXBwb3J0ZWQgLSBZZXQqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIFVuc3VwcG9ydGVkIC0gWWV0XG4iLCBfX2Z1bmNfXyk7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChpICsgMSA8IG51bSAmJiAobXNnc1tpICsgMV0uZmxhZ3MgJiBJMkNfTV9SRCkgJiYKKwkJCSAgIG1zZ3NbaV0uYWRkciA9PSBtc2dzW2kgKyAxXS5hZGRyKSB7CisJCQkvKiB3cml0ZSB0aGVuIHJlYWQgZnJvbSBzYW1lIGFkZHJlc3MgKi8KKworCQkJcmV0dmFsID0gc2FhNzE2NF9hcGlfaTJjX3JlYWQoYnVzLCBtc2dzW2ldLmFkZHIsCisJCQkJbXNnc1tpXS5sZW4sIG1zZ3NbaV0uYnVmLAorCQkJCW1zZ3NbaSsxXS5sZW4sIG1zZ3NbaSsxXS5idWYKKwkJCQkpOworCisJCQlpKys7CisKKwkJCWlmIChyZXR2YWwgPCAwKQorCQkJCWdvdG8gZXJyOworCQl9IGVsc2UgeworCQkJLyogd3JpdGUgKi8KKwkJCXJldHZhbCA9IHNhYTcxNjRfYXBpX2kyY193cml0ZShidXMsIG1zZ3NbaV0uYWRkciwKKwkJCQltc2dzW2ldLmxlbiwgbXNnc1tpXS5idWYpOworCQl9CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBlcnI7CisJfQorCXJldHVybiBudW07CisKKyBlcnI6CisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCBzYWE3MTY0X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIHVuc2lnbmVkIGludCBjbWQsCisJdm9pZCAqYXJnKQoreworCWlmIChidXMtPmkyY19yYyAhPSAwKQorCQlyZXR1cm47CisKKwlpMmNfY2xpZW50c19jb21tYW5kKCZidXMtPmkyY19hZGFwLCBjbWQsIGFyZyk7Cit9CisKK3N0YXRpYyB1MzIgc2FhNzE2NF9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gc2FhNzE2NF9pMmNfYWxnb190ZW1wbGF0ZSA9IHsKKwkubWFzdGVyX3hmZXIJPSBpMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IHNhYTcxNjRfZnVuY3Rpb25hbGl0eSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgc2FhNzE2NF9pMmNfYWRhcF90ZW1wbGF0ZSA9IHsKKwkubmFtZSAgICAgICAgICAgICAgPSAic2FhNzE2NCIsCisJLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLmFsZ28gICAgICAgICAgICAgID0gJnNhYTcxNjRfaTJjX2FsZ29fdGVtcGxhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgc2FhNzE2NF9pMmNfY2xpZW50X3RlbXBsYXRlID0geworCS5uYW1lCT0gInNhYTcxNjQgaW50ZXJuYWwiLAorfTsKKworaW50IHNhYTcxNjRfaTJjX3JlZ2lzdGVyKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzKQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gYnVzLT5kZXY7CisKKwlkcHJpbnRrKERCR0xWTF9JMkMsICIlcyhidXMgPSAlZClcbiIsIF9fZnVuY19fLCBidXMtPm5yKTsKKworCW1lbWNweSgmYnVzLT5pMmNfYWRhcCwgJnNhYTcxNjRfaTJjX2FkYXBfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZihidXMtPmkyY19hZGFwKSk7CisKKwltZW1jcHkoJmJ1cy0+aTJjX2FsZ28sICZzYWE3MTY0X2kyY19hbGdvX3RlbXBsYXRlLAorCSAgICAgICBzaXplb2YoYnVzLT5pMmNfYWxnbykpOworCisJbWVtY3B5KCZidXMtPmkyY19jbGllbnQsICZzYWE3MTY0X2kyY19jbGllbnRfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZihidXMtPmkyY19jbGllbnQpKTsKKworCWJ1cy0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZkZXYtPnBjaS0+ZGV2OworCisJc3RybGNweShidXMtPmkyY19hZGFwLm5hbWUsIGJ1cy0+ZGV2LT5uYW1lLAorCQlzaXplb2YoYnVzLT5pMmNfYWRhcC5uYW1lKSk7CisKKwlidXMtPmkyY19hbGdvLmRhdGEgPSBidXM7CisJYnVzLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBidXM7CisJaTJjX3NldF9hZGFwZGF0YSgmYnVzLT5pMmNfYWRhcCwgYnVzKTsKKwlpMmNfYWRkX2FkYXB0ZXIoJmJ1cy0+aTJjX2FkYXApOworCisJYnVzLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmYnVzLT5pMmNfYWRhcDsKKworCWlmICgwICE9IGJ1cy0+aTJjX3JjKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyIEZBSUxFRFxuIiwKKwkJCWRldi0+bmFtZSwgYnVzLT5ucik7CisKKwlyZXR1cm4gYnVzLT5pMmNfcmM7Cit9CisKK2ludCBzYWE3MTY0X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzKQoreworCWkyY19kZWxfYWRhcHRlcigmYnVzLT5pMmNfYWRhcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmU0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1yZWcuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFRPRE86IFJldGVzdCB0aGUgZHJpdmVyIHdpdGggZXJyb3JzIGV4cHJlc3NlZCBhcyBuZWdhdGl2ZXMgKi8KKworLyogUmVzdWx0IGNvZGVzICovCisjZGVmaW5lIFNBQV9PSwkJCQkwCisjZGVmaW5lIFNBQV9FUlJfQkFEX1BBUkFNRVRFUgkJMHgwOQorI2RlZmluZSBTQUFfRVJSX05PX1JFU09VUkNFUwkJMHgwYworI2RlZmluZSBTQUFfRVJSX05PVF9TVVBQT1JURUQJCTB4MTMKKyNkZWZpbmUgU0FBX0VSUl9CVVNZCQkJMHgxNQorI2RlZmluZSBTQUFfRVJSX1JFQUQJCQkweDE3CisjZGVmaW5lIFNBQV9FUlJfVElNRU9VVAkJCTB4MWYKKyNkZWZpbmUgU0FBX0VSUl9PVkVSRkxPVwkJMHgyMAorI2RlZmluZSBTQUFfRVJSX0VNUFRZCQkJMHgyMgorI2RlZmluZSBTQUFfRVJSX05PVF9TVEFSVEVECQkweDIzCisjZGVmaW5lIFNBQV9FUlJfQUxSRUFEWV9TVEFSVEVECQkweDI0CisjZGVmaW5lIFNBQV9FUlJfTk9UX1NUT1BQRUQJCTB4MjUKKyNkZWZpbmUgU0FBX0VSUl9BTFJFQURZX1NUT1BQRUQJCTB4MjYKKyNkZWZpbmUgU0FBX0VSUl9JTlZBTElEX0NPTU1BTkQJCTB4M2UKKyNkZWZpbmUgU0FBX0VSUl9OVUxMX1BBQ0tFVAkJMHg1OQorCisvKiBFcnJvcnMgYW5kIGZsYWdzIGZyb20gdGhlIHNpbGljb24gKi8KKyNkZWZpbmUgUFZDX0VSUk9SQ09ERV9VTktOT1dOCQkweDAwCisjZGVmaW5lIFBWQ19FUlJPUkNPREVfSU5WQUxJRF9DT01NQU5ECTB4MDEKKyNkZWZpbmUgUFZDX0VSUk9SQ09ERV9JTlZBTElEX0NPTlRST0wJMHgwMgorI2RlZmluZSBQVkNfRVJST1JDT0RFX0lOVkFMSURfREFUQQkweDAzCisjZGVmaW5lIFBWQ19FUlJPUkNPREVfVElNRU9VVAkJMHgwNAorI2RlZmluZSBQVkNfRVJST1JDT0RFX05BSwkJMHgwNQorI2RlZmluZSBQVkNfUkVTUE9OU0VGTEFHX0VSUk9SCQkweDAxCisjZGVmaW5lIFBWQ19SRVNQT05TRUZMQUdfT1ZFUkZMT1cJMHgwMgorI2RlZmluZSBQVkNfUkVTUE9OU0VGTEFHX1JFU0VUCQkweDA0CisjZGVmaW5lIFBWQ19SRVNQT05TRUZMQUdfSU5URVJGQUNFCTB4MDgKKyNkZWZpbmUgUFZDX1JFU1BPTlNFRkxBR19DT05USU5VRUQJMHgxMAorI2RlZmluZSBQVkNfQ01ERkxBR19JTlRFUlJVUFQJCTB4MDIKKyNkZWZpbmUgUFZDX0NNREZMQUdfSU5URVJGQUNFCQkweDA0CisjZGVmaW5lIFBWQ19DTURGTEFHX1NFUklBTElaRQkJMHgwOAorI2RlZmluZSBQVkNfQ01ERkxBR19DT05USU5VRQkJMHgxMAorCisvKiBTaWxpY29uIENvbW1hbmRzICovCisjZGVmaW5lIEdFVF9ERVNDUklQVE9SU19DT05UUk9MCQkweDAxCisjZGVmaW5lIEdFVF9TVFJJTkdfQ09OVFJPTAkJMHgwMworI2RlZmluZSBHRVRfTEFOR1VBR0VfQ09OVFJPTAkJMHgwNQorI2RlZmluZSBTRVRfUE9XRVJfQ09OVFJPTAkJMHgwNworI2RlZmluZSBHRVRfRldfVkVSU0lPTl9DT05UUk9MCQkweDA5CisjZGVmaW5lIFNFVF9ERUJVR19MRVZFTF9DT05UUk9MCQkweDBCCisjZGVmaW5lIEdFVF9ERUJVR19EQVRBX0NPTlRST0wJCTB4MEMKKyNkZWZpbmUgR0VUX1BST0RVQ1RJT05fSU5GT19DT05UUk9MCTB4MEQKKworLyogY21kIGRlZmluZXMgKi8KKyNkZWZpbmUgU0FBX0NNREZMQUdfQ09OVElOVUUJCTB4MTAKKyNkZWZpbmUgU0FBX0NNRF9NQVhfTVNHX1VOSVRTCQkyNTYKKworLyogU29tZSBkZWZpbmVzICovCisjZGVmaW5lIFNBQV9CVVNfVElNRU9VVAkJCTUwCisjZGVmaW5lIFNBQV9ERVZJQ0VfVElNRU9VVAkJNTAwMAorI2RlZmluZSBTQUFfREVWSUNFX01BWFJFUVVFU1RTSVpFCTI1NgorCisvKiBSZWdpc3RlciBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU0FBX0RFVklDRV9WRVJTSU9OCQkweDMwCisjZGVmaW5lIFNBQV9ET1dOTE9BRF9GTEFHUwkJMHgzNAorI2RlZmluZSBTQUFfRE9XTkxPQURfRkxBRwkJMHgzNAorI2RlZmluZSBTQUFfRE9XTkxPQURfRkxBR19BQ0sJCTB4MzgKKyNkZWZpbmUgU0FBX0RBVEFSRUFEWV9GTEFHCQkweDNDCisjZGVmaW5lIFNBQV9EQVRBUkVBRFlfRkxBR19BQ0sJCTB4NDAKKworLyogQm9vdCBsb2FkZXIgcmVnaXN0ZXIgYW5kIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTQUFfQk9PVExPQURFUkVSUk9SX0ZMQUdTCTB4NDQKKyNkZWZpbmUgU0FBX0RFVklDRV9JTUFHRV9TRUFSQ0hJTkcJMHgwMQorI2RlZmluZSBTQUFfREVWSUNFX0lNQUdFX0xPQURJTkcJMHgwMgorI2RlZmluZSBTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcJMHgwMworI2RlZmluZSBTQUFfREVWSUNFX0lNQUdFX0NPUlJVUFQJMHgwNAorI2RlZmluZSBTQUFfREVWSUNFX01FTU9SWV9DT1JSVVBUCTB4MDgKKyNkZWZpbmUgU0FBX0RFVklDRV9OT19JTUFHRQkJMHgxMAorCisvKiBSZWdpc3RlciBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU0FBX0RFVklDRV8yTkRfVkVSU0lPTgkJCTB4NTAKKyNkZWZpbmUgU0FBX0RFVklDRV8yTkRfRE9XTkxPQURGTEFHX09GRlNFVAkweDU0CisKKy8qIFJlZ2lzdGVyIGFkZHJlc3NlcyAqLworI2RlZmluZSBTQUFfU0VDT05EU1RBR0VFUlJPUl9GTEFHUwkJMHg2NAorCisvKiBCb290bG9hZGVyIHJlZ3MgYW5kIGZsYWdzICovCisjZGVmaW5lIFNBQV9ERVZJQ0VfREVBRExPQ0tfREVURUNURURfT0ZGU0VUCTB4NkMKKyNkZWZpbmUgU0FBX0RFVklDRV9ERUFETE9DS19ERVRFQ1RFRAkJMHhERUFEREVBRAorCisvKiBCYXNpYyBmaXJtd2FyZSBzdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNBQV9ERVZJQ0VfU1lTSU5JVF9TVEFUVVNfT0ZGU0VUCTB4NzAKKyNkZWZpbmUgU0FBX0RFVklDRV9TWVNJTklUX1NUQVRVUwkJMHg3MAorI2RlZmluZSBTQUFfREVWSUNFX1NZU0lOSVRfTU9ERQkJCTB4NzQKKyNkZWZpbmUgU0FBX0RFVklDRV9TWVNJTklUX1NQRUMJCQkweDc4CisjZGVmaW5lIFNBQV9ERVZJQ0VfU1lTSU5JVF9JTlNUCQkJMHg3QworI2RlZmluZSBTQUFfREVWSUNFX1NZU0lOSVRfQ1BVTE9BRAkJMHg4MAorI2RlZmluZSBTQUFfREVWSUNFX1NZU0lOSVRfUkVNQUlOSEVBUAkJMHg4NAorCisjZGVmaW5lIFNBQV9ERVZJQ0VfRE9XTkxPQURfT0ZGU0VUCQkweDEwMDAKKyNkZWZpbmUgU0FBX0RFVklDRV9CVUZGRVJCTE9DS1NJWkUJCTB4MTAwMAorCisjZGVmaW5lIFNBQV9ERVZJQ0VfMk5EX0JVRkZFUkJMT0NLU0laRQkJMHgxMDAwMDAKKyNkZWZpbmUgU0FBX0RFVklDRV8yTkRfRE9XTkxPQURfT0ZGU0VUCQkweDIwMDAwMAorCisvKiBEZXNjcmlwdG9ycyAqLworI2RlZmluZSBDU19JTlRFUkZBQ0UJMHgyNAorCisvKiBEZXNjcmlwdG9yIHN1YnR5cGVzICovCisjZGVmaW5lIFZDX0lOUFVUX1RFUk1JTkFMCQkweDAyCisjZGVmaW5lIFZDX09VVFBVVF9URVJNSU5BTAkJMHgwMworI2RlZmluZSBWQ19TRUxFQ1RPUl9VTklUCQkweDA0CisjZGVmaW5lIFZDX1BST0NFU1NJTkdfVU5JVAkJMHgwNQorI2RlZmluZSBGRUFUVVJFX1VOSVQJCQkweDA2CisjZGVmaW5lIFRVTkVSX1VOSVQJCQkweDA5CisjZGVmaW5lIEVOQ09ERVJfVU5JVAkJCTB4MEEKKyNkZWZpbmUgRVhURU5TSU9OX1VOSVQJCQkweDBCCisjZGVmaW5lIFZDX1RVTkVSX1BBVEgJCQkweEYwCisjZGVmaW5lIFBWQ19IQVJEV0FSRV9ERVNDUklQVE9SCQkweEYxCisjZGVmaW5lIFBWQ19JTlRFUkZBQ0VfREVTQ1JJUFRPUgkweEYyCisjZGVmaW5lIFBWQ19JTkZSQVJFRF9VTklUCQkweEYzCisjZGVmaW5lIERSTV9VTklUCQkJMHhGNAorI2RlZmluZSBHRU5FUkFMX1JFUVVFU1QJCQkweEY1CisKKy8qIEZvcm1hdCBUeXBlcyAqLworI2RlZmluZSBWU19GT1JNQVRfVFlQRSAgICAgICAgIDB4MDIKKyNkZWZpbmUgVlNfRk9STUFUX1RZUEVfSSAgICAgICAweDAxCisjZGVmaW5lIFZTX0ZPUk1BVF9VTkNPTVBSRVNTRUQgMHgwNAorI2RlZmluZSBWU19GUkFNRV9VTkNPTVBSRVNTRUQgIDB4MDUKKyNkZWZpbmUgVlNfRk9STUFUX01QRUcyUFMgICAgICAweDA5CisjZGVmaW5lIFZTX0ZPUk1BVF9NUEVHMlRTICAgICAgMHgwQQorI2RlZmluZSBWU19GT1JNQVRfTVBFRzRTTCAgICAgIDB4MEIKKyNkZWZpbmUgVlNfRk9STUFUX1dNOSAgICAgICAgICAweDBDCisjZGVmaW5lIFZTX0ZPUk1BVF9ESVZYICAgICAgICAgMHgwRAorI2RlZmluZSBWU19GT1JNQVRfVkJJICAgICAgICAgIDB4MEUKKyNkZWZpbmUgVlNfRk9STUFUX1JEUyAgICAgICAgICAweDBGCisKKy8qIERldmljZSBleHRlbnNpb24gY29tbWFuZHMgKi8KKyNkZWZpbmUgRVhVX1JFR0lTVEVSX0FDQ0VTU19DT05UUk9MCTB4MDAKKyNkZWZpbmUgRVhVX0dQSU9fQ09OVFJPTAkJMHgwMQorI2RlZmluZSBFWFVfR1BJT19HUk9VUF9DT05UUk9MCQkweDAyCisjZGVmaW5lIEVYVV9JTlRFUlJVUFRfQ09OVFJPTAkJMHgwMworCisvKiBTdGF0ZSBUcmFuc2l0aW9uIGFuZCBhcmdzICovCisjZGVmaW5lIFNBQV9TVEFURV9DT05UUk9MCTB4MDMKKyNkZWZpbmUgU0FBX0RNQVNUQVRFX1NUT1AJMHgwMAorI2RlZmluZSBTQUFfRE1BU1RBVEVfQUNRVUlSRQkweDAxCisjZGVmaW5lIFNBQV9ETUFTVEFURV9QQVVTRQkweDAyCisjZGVmaW5lIFNBQV9ETUFTVEFURV9SVU4JMHgwMworCisvKiBIYXJkd2FyZSByZWdpc3RlcnMgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdHlwZXMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwOTNmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXR5cGVzLmgKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgTlhQIFNBQTcxNjQgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBUT0RPOiBDbGVhbnVwIGFuZCBzaG9ydGVuIHRoZSBuYW1lc3BhY2UgKi8KKworLyogU29tZSBzdHJ1Y3R1ZXMgYXJlIHBhc3NlZCBkaXJlY3RseSB0by9mcm9tIHRoZSBmaXJtd2FyZSBhbmQKKyAqIGhhdmUgc3RyaWN0IGFsaWdubWVudCByZXF1aXJlbWVudHMuIFRoaXMgaXMgb25lIG9mIHRoZW0uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1OAliTGVuZ3RoOworCXU4CWJEZXNjcmlwdG9yVHlwZTsKKwl1OAliRGVzY3JpcHRvclN1YnR5cGU7CisJdTE2CWJjZFNwZWNWZXJzaW9uOworCXUzMglkd0Nsb2NrRnJlcXVlbmN5OworCXUzMglkd0Nsb2NrVXBkYXRlUmVzOworCXU4CWJDYXBhYmlsaXRpZXM7CisJdTMyCWR3RGV2aWNlUmVnaXN0ZXJzTG9jYXRpb247CisJdTMyCWR3SG9zdE1lbW9yeVJlZ2lvbjsKKwl1MzIJZHdIb3N0TWVtb3J5UmVnaW9uU2l6ZTsKKwl1MzIJZHdIb3N0SGliZXJuYXRNZW1SZWdpb247CisJdTMyCWR3SG9zdEhpYmVybmF0TWVtUmVnaW9uU2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNIV0Rlc2NyX3Q7CisKKy8qIFRoaXMgaXMgRFdPUkQgYWxpZ25lZCBvbiB3aW5kb3dzIGJ1dCBJIGNhbid0IGZpbmQgdGhlIHJpZ2h0CisgKiBnY2Mgc3ludGF4IHRvIG1hdGNoIHRoZSBiaW5hcnkgZGF0YSBmcm9tIHRoZSBkZXZpY2UuCisgKiBJJ3ZlIG1hbnVhbGx5IHBhZGRlZCB3aXRoIFJlc2VydmVkWzNdIGJ5dGVzIHRvIG1hdGNoIHRoZSBoYXJkd2FyZSwKKyAqIGJ1dCB0aGlzIGNvdWxkIGJyZWFrIGlmIEdDQyBkZWNpZXMgdG8gcGFjayBpbiBhIGRpZmZlcmVudCB3YXkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1OAliTGVuZ3RoOworCXU4CWJEZXNjcmlwdG9yVHlwZTsKKwl1OAliRGVzY3JpcHRvclN1YnR5cGU7CisJdTgJYkZsYWdzOworCXU4CWJJbnRlcmZhY2VUeXBlOworCXU4CWJJbnRlcmZhY2VJZDsKKwl1OAliQmFzZUludGVyZmFjZTsKKwl1OAliSW50ZXJydXB0SWQ7CisJdTgJYkRlYnVnSW50ZXJydXB0SWQ7CisJdTgJQkFSTG9jYXRpb247CisJdTgJUmVzZXJ2ZWRbM107Cit9IHRtQ29tUmVzSW50ZXJmYWNlRGVzY3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NAlDb21tYW5kUmluZzsKKwl1NjQJUmVzcG9uc2VSaW5nOworCXUzMglDb21tYW5kV3JpdGU7CisJdTMyCUNvbW1hbmRSZWFkOworCXUzMglSZXNwb25zZVdyaXRlOworCXUzMglSZXNwb25zZVJlYWQ7Cit9IHRtQ29tUmVzQnVzRGVzY3JfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlOT05FCQk9IDAsCisJVFlQRV9CVVNfUENJCT0gMSwKKwlUWVBFX0JVU19QQ0llCT0gMiwKKwlUWVBFX0JVU19VU0IJPSAzLAorCVRZUEVfQlVTX0kyQwk9IDQKK30gdG1CdXNUeXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl0bUJ1c1R5cGVfdCBUeXBlOworCXUxNgltX3dNYXhSZXFTaXplOworCXU4CSptX3Bkd1NldFJpbmc7CisJdTMyCW1fZHdTaXplU2V0UmluZzsKKwl1OAkqbV9wZHdHZXRSaW5nOworCXUzMgltX2R3U2l6ZUdldFJpbmc7CisJdTMyCSptX3Bkd1NldFdyaXRlUG9zOworCXUzMgkqbV9wZHdTZXRSZWFkUG9zOworCXUzMgkqbV9wZHdHZXRXcml0ZVBvczsKKwl1MzIJKm1fcGR3R2V0UmVhZFBvczsKKworCS8qIEFsbCBhY2Nlc3MgaXMgcHJvdGVjdGVkICovCisJc3RydWN0IG11dGV4IGxvY2s7CisKK30gdG1Db21SZXNCdXNJbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAlpZDsKKwl1OAlmbGFnczsKKwl1MTYJc2l6ZTsKKwl1MzIJY29tbWFuZDsKKwl1MTYJY29udHJvbHNlbGVjdG9yOworCXU4CXNlcW5vOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0bUNvbVJlc0luZm9fdDsKKwordHlwZWRlZiBlbnVtIHsKKwlTRVRfQ1VSICA9IDB4MDEsCisJR0VUX0NVUiAgPSAweDgxLAorCUdFVF9NSU4gID0gMHg4MiwKKwlHRVRfTUFYICA9IDB4ODMsCisJR0VUX1JFUyAgPSAweDg0LAorCUdFVF9MRU4gID0gMHg4NSwKKwlHRVRfSU5GTyA9IDB4ODYsCisJR0VUX0RFRiAgPSAweDg3Cit9IHRtQ29tUmVzQ21kX3Q7CisKK3N0cnVjdCBjbWQgeworCXU4IHNlcW5vOworCXUzMiBpbnVzZTsKKwl1MzIgdGltZW91dDsKKwl1MzIgc2lnbmFsbGVkOworCXN0cnVjdCBtdXRleCBsb2NrOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyCXBhdGhpZDsKKwl1MzIJc2l6ZTsKKwl2b2lkCSpkZXNjcmlwdG9yOworfSB0bURlc2NyaXB0b3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CWxlbjsKKwl1OAl0eXBlOworCXU4CXN1YnR5cGU7CisJdTgJdW5pdGlkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0bUNvbVJlc0Rlc2NySGVhZGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAlsZW47CisJdTgJdHlwZTsKKwl1OAlzdWJ0eXBlOworCXU4CXVuaXRpZDsKKwl1MzIJZGV2aWNldHlwZTsKKwl1MTYJZGV2aWNlaWQ7CisJdTMyCW51bWdwaW9waW5zOworCXU4CW51bWdwaW9ncm91cHM7CisJdTgJY29udHJvbHNpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRtQ29tUmVzRXh0RGV2RGVzY3JIZWFkZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMglwaW47CisJdTgJc3RhdGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRtQ29tUmVzR1BJT190OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTgJbGVuOworCXU4CXR5cGU7CisJdTgJc3VidHlwZTsKKwl1OAlwYXRoaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRtQ29tUmVzUGF0aERlc2NySGVhZGVyX3Q7CisKKy8qIHRlcm1pbmFsdHlwZSAqLwordHlwZWRlZiBlbnVtIHsKKwlJVFRfQU5URU5OQSAgICAgICAgICAgICAgPSAweDAyMDMsCisJTElORV9DT05ORUNUT1IgICAgICAgICAgID0gMHgwNjAzLAorCVNQRElGX0NPTk5FQ1RPUiAgICAgICAgICA9IDB4MDYwNSwKKwlDT01QT1NJVEVfQ09OTkVDVE9SICAgICAgPSAweDA0MDEsCisJU1ZJREVPX0NPTk5FQ1RPUiAgICAgICAgID0gMHgwNDAyLAorCUNPTVBPTkVOVF9DT05ORUNUT1IgICAgICA9IDB4MDQwMywKKwlTVEFOREFSRF9ETUEgICAgICAgICAgICAgPSAweEYxMDEKK30gdG1Db21SZXNUZXJtVHlwZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTgJbGVuOworCXU4CXR5cGU7CisJdTgJc3VidHlwZTsKKwl1OAl0ZXJtaW5hbGlkOworCXUxNgl0ZXJtaW5hbHR5cGU7CisJdTgJYXNzb2N0ZXJtaW5hbDsKKwl1OAlpdGVybWluYWw7CisJdTgJY29udHJvbHNpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRtQ29tUmVzQW50VGVybURlc2NySGVhZGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAlsZW47CisJdTgJdHlwZTsKKwl1OAlzdWJ0eXBlOworCXU4CXVuaXRpZDsKKwl1OAlzb3VyY2VpZDsKKwl1OAlpdW5pdDsKKwl1MzIJdHVuaW5nc3RhbmRhcmRzOworCXU4CWNvbnRyb2xzaXplOworCXUzMgljb250cm9sczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNUdW5lckRlc2NySGVhZGVyX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJLyogdGhlIGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGFueSB2YWxpZCBkYXRhICovCisJVE1fQlVGRkVSX0ZMQUdfRU1QVFksCisKKwkvKiB0aGUgYnVmZmVyIGlzIGZpbGxlZCB3aXRoIHZhbGlkIGRhdGEgKi8KKwlUTV9CVUZGRVJfRkxBR19ET05FLAorCisJLyogdGhlIGJ1ZmZlciBpcyB0aGUgZHVtbXkgYnVmZmVyIC0gVE9ETz8/PyAqLworCVRNX0JVRkZFUl9GTEFHX0RVTU1ZX0JVRkZFUgorfSB0bUJ1ZmZlckZsYWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NAkJKnBhZ2V0YWJsZXZpcnQ7CisJdTY0CQlwYWdldGFibGVwaHlzOworCXUxNgkJb2Zmc2V0OworCXU4CQkqY29udGV4dDsKKwl1NjQJCXRpbWVzdGFtcDsKKwl0bUJ1ZmZlckZsYWdfdAlCdWZmZXJGbGFnX3Q7CisJdTMyCQlsb3N0YnVmZmVyczsKKwl1MzIJCXZhbGlkYnVmZmVyczsKKwl1NjQJCSpkdW1teXBhZ2V2aXJ0OworCXU2NAkJZHVtbXlwYWdlcGh5czsKKwl1NjQJCSphZGRyZXNzdmlydDsKK30gdG1CdWZmZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMgliaXRzcGVyc2FtcGxlOworCXUzMglzYW1wbGVzcGVybGluZTsKKwl1MzIJbnVtYmVyb2ZsaW5lczsKKwl1MzIJcGl0Y2g7CisJdTMyCWxpbmV0aHJlc2hvbGQ7CisJdTY0CSoqcGFnZXRhYmxlbGlzdHZpcnQ7CisJdTY0CSpwYWdldGFibGVsaXN0cGh5czsKKwl1MzIJbnVtcGFnZXRhYmxlczsKKwl1MzIJbnVtcGFnZXRhYmxlZW50cmllczsKK30gdG1IV1N0cmVhbVBhcmFtZXRlcnNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXRtSFdTdHJlYW1QYXJhbWV0ZXJzX3QJCUhXU3RyZWFtUGFyYW1ldGVyc190OworCXU2NAkJCQlxd0R1bW15UGFnZVRhYmxlUGh5czsKKwl1NjQJCQkJKnBEdW1teVBhZ2VUYWJsZVZpcnQ7Cit9IHRtU3RyZWFtUGFyYW1ldGVyc190OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTgJbGVuOworCXU4CXR5cGU7CisJdTgJc3VidHlsZTsKKwl1OAl1bml0aWQ7CisJdTE2CXRlcm1pbmFsdHlwZTsKKwl1OAlhc3NvY3Rlcm1pbmFsOworCXU4CXNvdXJjZWlkOworCXU4CWl0ZXJtaW5hbDsKKwl1MzIJQkFSTG9jYXRpb247CisJdTgJZmxhZ3M7CisJdTgJaW50ZXJydXB0aWQ7CisJdTgJYnVmZmVyY291bnQ7CisJdTgJbWV0YWRhdGFzaXplOworCXU4CW51bWZvcm1hdHM7CisJdTgJY29udHJvbHNpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRtQ29tUmVzRE1BVGVybURlc2NySGVhZGVyX3Q7CisKKy8qCisgKgorICogRGVzY3JpcHRpb246CisgKiAgVGhpcyBpcyB0aGUgdHJhbnNwb3J0IHN0cmVhbSBmb3JtYXQgaGVhZGVyLgorICoKKyAqIFNldHRpbmdzOgorICogIGJMZW5ndGggICAgICAgICAgICAgICAgIC0gVGhlIHNpemUgb2YgdGhpcyBkZXNjcmlwdG9yIGluIGJ5dGVzLgorICogIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIC0gQ1NfSU5URVJGQUNFLgorICogIGJEZXNjcmlwdG9yU3VidHlwZSAgICAgIC0gVlNfRk9STUFUX01QRUcyVFMgZGVzY3JpcHRvciBzdWJ0eXBlLgorICogIGJGb3JtYXRJbmRleCAgICAgICAgICAgIC0gQSBub24temVybyBjb25zdGFudCB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuCisgKiAgYkRhdGFPZmZzZXQgICAgICAgICAgICAgLSBPZmZzZXQgdG8gVFNQIHBhY2tldCB3aXRoaW4gTVBFRy0yIFRTIHRyYW5zcG9ydAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlLCBpbiBieXRlcy4KKyAqICBiUGFja2V0TGVuZ3RoICAgICAgICAgICAtIExlbmd0aCBvZiBUU1AgcGFja2V0LCBpbiBieXRlcyAodHlwaWNhbGx5IDE4OCkuCisgKiAgYlN0cmlkZUxlbmd0aCAgICAgICAgICAgLSBMZW5ndGggb2YgTVBFRy0yIFRTIHRyYW5zcG9ydCBzdHJpZGUuCisgKiAgZ3VpZFN0cmlkZUZvcm1hdCAgICAgICAgLSBBIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIGluZGljYXRpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgb2YgdGhlIHN0cmlkZSBkYXRhIChpZiBhbnkpLiBTZXQgdG8gemVyb3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZXJlIGlzIG5vIFN0cmlkZSBEYXRhLCBvciBpZiB0aGUgU3RyaWRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIGlzIHRvIGJlIGlnbm9yZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CWxlbjsKKwl1OAl0eXBlOworCXU4CXN1YnR5cGU7CisJdTgJYkZvcm1hdEluZGV4OworCXU4CWJEYXRhT2Zmc2V0OworCXU4CWJQYWNrZXRMZW5ndGg7CisJdTgJYlN0cmlkZUxlbmd0aDsKKwl1OAlndWlkU3RyaWRlRm9ybWF0WzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNUU0Zvcm1hdERlc2NySGVhZGVyX3Q7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTMwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC5oCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKwlEcml2ZXIgYXJjaGl0ZWN0dXJlCisJKioqKioqKioqKioqKioqKioqKgorCisJc2FhNzE2NF9jb3JlLmMvYnVmZmVyLmMvY2FyZHMuYy9pMmMuYy9kdmIuYworCQl8CTogU3RhbmRhcmQgTGludXggZHJpdmVyIGZyYW1ld29yayBmb3IgY3JlYXRpbmcKKwkJfAk6IGV4cG9zaW5nIGFuZCBtYW5hZ2luZyBpbnRlcmZhY2VzIHRvIHRoZSByZXN0CisJCXwJOiBvZiB0aGUga2VybmVsIG9yIHVzZXJsYW5kLiBBbHNvIHVzZXMgX2Z3LmMgdG8gbG9hZAorCQl8CTogZmlybXdhcmUgZGlyZWN0IGludG8gdGhlIFBDSWUgYnVzLCBieXBhc3NpbmcgbGF5ZXJzLgorCQlWCisJc2FhNzE2NF9hcGkuLigpCTogVHJhbnNsYXRlIGtlcm5lbCBzcGVjaWZpYyBmdW5jdGlvbnMvZmVhdHVyZXMKKwkJfAk6IGludG8gY29tbWFuZCBidWZmZXJzLgorCQlWCisJc2FhNzE2NF9jbWQuLigpCTogTWFuYWdlcyB0aGUgZmxvdyBvZiBjb21tYW5kIHBhY2tldHMgb24vb2ZmLAorCQl8CTogdGhlIGJ1cy4gRGVhbCB3aXRoIGJ1cyBlcnJvcnMsIHRpbWVvdXRzIGV0Yy4KKwkJVgorCXNhYTcxNjRfYnVzLi4oKSA6IE1hbmFnZSBhIHJlYWQvd3JpdGUgbWVtb3J5IHJpbmcgYnVmZmVyIGluIHRoZQorCQl8CTogUENJZSBBZGRyZXNzIHNwYWNlLgorCQl8CisJCXwJCXNhYTcxNjRfZncuLi4oKQk6IExvYWQgYW55IGZyaW13YXJlCisJCXwJCQl8CTogZGlyZWN0IGludG8gdGhlIGRldmljZQorCQlWCQkJVgorCTwtIC0tLS0tLS0tLS0tLS0tLS0tIFBDSWUgYWRkcmVzcyBzcGFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtPgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorCisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWR2Yi5oPgorCisjaW5jbHVkZSAic2FhNzE2NC1yZWcuaCIKKyNpbmNsdWRlICJzYWE3MTY0LXR5cGVzLmgiCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2RlZmluZSBTQUE3MTY0X01BWEJPQVJEUyA4CisKKyNkZWZpbmUgVU5TRVQgKC0xVSkKKyNkZWZpbmUgU0FBNzE2NF9CT0FSRF9OT0FVVE8JCQlVTlNFVAorI2RlZmluZSBTQUE3MTY0X0JPQVJEX1VOS05PV04JCQkwCisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfVU5LTk9XTl9SRVYyCQkxCisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfVU5LTk9XTl9SRVYzCQkyCisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTAJCTMKKyNkZWZpbmUgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMAkJNAorI2RlZmluZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzIJNQorI2RlZmluZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzMJNgorI2RlZmluZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzIJNworI2RlZmluZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzMJOAorCisjZGVmaW5lIFNBQTcxNjRfTUFYX1VOSVRTCQk4CisjZGVmaW5lIFNBQTcxNjRfVFNfTlVNQkVSX09GX0xJTkVTCTMxMgorI2RlZmluZSBTQUE3MTY0X1BUX0VOVFJJRVMJCTE2IC8qICgzMTIgKiAxODgpIC8gNDA5NiAqLworCisjZGVmaW5lIERCR0xWTF9GVyAgICA0CisjZGVmaW5lIERCR0xWTF9EVkIgICA4CisjZGVmaW5lIERCR0xWTF9JMkMgIDE2CisjZGVmaW5lIERCR0xWTF9BUEkgIDMyCisjZGVmaW5lIERCR0xWTF9DTUQgIDY0CisjZGVmaW5lIERCR0xWTF9CVVMgMTI4CisjZGVmaW5lIERCR0xWTF9JUlEgMjU2CisjZGVmaW5lIERCR0xWTF9CVUYgNTEyCisKK2VudW0gcG9ydF90IHsKKwlTQUE3MTY0X01QRUdfVU5ERUZJTkVEID0gMCwKKwlTQUE3MTY0X01QRUdfRFZCLAorfTsKKworZW51bSBzYWE3MTY0X2kyY19idXNfbnIgeworCVNBQTcxNjRfSTJDX0JVU18wID0gMCwKKwlTQUE3MTY0X0kyQ19CVVNfMSwKKwlTQUE3MTY0X0kyQ19CVVNfMiwKK307CisKK2VudW0gc2FhNzE2NF9idWZmZXJfZmxhZ3MgeworCVNBQTcxNjRfQlVGRkVSX1VOREVGSU5FRCA9IDAsCisJU0FBNzE2NF9CVUZGRVJfRlJFRSwKKwlTQUE3MTY0X0JVRkZFUl9CVVNZLAorCVNBQTcxNjRfQlVGRkVSX0ZVTEwKK307CisKK2VudW0gc2FhNzE2NF91bml0X3R5cGUgeworCVNBQTcxNjRfVU5JVF9VTkRFRklORUQgPSAwLAorCVNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCVNBQTcxNjRfVU5JVF9BTkFMT0dfREVNT0RVTEFUT1IsCisJU0FBNzE2NF9VTklUX1RVTkVSLAorCVNBQTcxNjRfVU5JVF9FRVBST00sCisJU0FBNzE2NF9VTklUX1pJTE9HX0lSQkxBU1RFUiwKKwlTQUE3MTY0X1VOSVRfRU5DT0RFUiwKK307CisKKy8qIFRoZSBQQ0llIGJyaWRnZSBkb2Vzbid0IGdyYW50IGRpcmVjdCBhY2Nlc3MgdG8gaTJjLgorICogSW5zdGVhZCwgeW91IGFkZHJlc3MgaTJjIGRldmljZXMgdXNpbmcgYSB1bmlxZWx5CisgKiBhbGxvY2F0ZWQgJ3VuaXRpZCcgdmFsdWUgdmlhIGEgbWVzc2FnaW5nIEFQSS4gVGhpcworICogaXMgYSBwcm9ibGVtLiBUaGUga2VybmVsIGFuZCBleGlzdGluZyBkZW1vZC90dW5lcgorICogZHJpdmVycyBleHBlY3QgdG8gdGFsayAnaTJjJywgc28gd2UgaGF2ZSB0byBtYWludGFpbgorICogYSB0cmFuc2xhdGlvbiBsYXllciwgYW5kIGEgc2VyaWVzIG9mIGZ1bmN0aW9ucyB0bworICogY29udmVydCBpMmMgYnVzICsgZGV2aWNlIGFkZHJlc3MgaW50byBhIHVuaXQgaWQuCisgKi8KK3N0cnVjdCBzYWE3MTY0X3VuaXQgeworCWVudW0gc2FhNzE2NF91bml0X3R5cGUgdHlwZTsKKwl1OAlpZDsKKwljaGFyCSpuYW1lOworCWVudW0gc2FhNzE2NF9pMmNfYnVzX25yIGkyY19idXNfbnI7CisJdTgJaTJjX2J1c19hZGRyOworCXU4CWkyY19yZWdfbGVuOworfTsKKworc3RydWN0IHNhYTcxNjRfYm9hcmQgeworCWNoYXIJKm5hbWU7CisJZW51bSBwb3J0X3QgcG9ydGEsIHBvcnRiOworCWVudW0geworCQlTQUE3MTY0X0NISVBfVU5ERUZJTkVEID0gMCwKKwkJU0FBNzE2NF9DSElQX1JFVjIsCisJCVNBQTcxNjRfQ0hJUF9SRVYzLAorCX0gY2hpcHJldjsKKwlzdHJ1Y3QJc2FhNzE2NF91bml0IHVuaXRbU0FBNzE2NF9NQVhfVU5JVFNdOworfTsKKworc3RydWN0IHNhYTcxNjRfc3ViaWQgeworCXUxNiAgICAgc3VidmVuZG9yOworCXUxNiAgICAgc3ViZGV2aWNlOworCXUzMiAgICAgY2FyZDsKK307CisKK3N0cnVjdCBzYWE3MTY0X2Z3X3N0YXR1cyB7CisKKwkvKiBSSVNDIENvcmUgZGV0YWlscyAqLworCXUzMglzdGF0dXM7CisJdTMyCW1vZGU7CisJdTMyCXNwZWM7CisJdTMyCWluc3Q7CisJdTMyCWNwdWxvYWQ7CisJdTMyCXJlbWFpbmhlYXA7CisKKwkvKiBGaXJtd2FyZSB2ZXJzaW9uICovCisJdTMyCXZlcnNpb247CisJdTMyCW1ham9yOworCXUzMglzdWI7CisJdTMyCXJlbDsKKwl1MzIJYnVpbGRucjsKK307CisKK3N0cnVjdCBzYWE3MTY0X2R2YiB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGR2Yl9hZGFwdGVyIGFkYXB0ZXI7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZnJvbnRlbmQ7CisJc3RydWN0IGR2Yl9kZW11eCBkZW11eDsKKwlzdHJ1Y3QgZG14ZGV2IGRteGRldjsKKwlzdHJ1Y3QgZG14X2Zyb250ZW5kIGZlX2h3OworCXN0cnVjdCBkbXhfZnJvbnRlbmQgZmVfbWVtOworCXN0cnVjdCBkdmJfbmV0IG5ldDsKKwlpbnQgZmVlZGluZzsKK307CisKK3N0cnVjdCBzYWE3MTY0X2kyYyB7CisJc3RydWN0IHNhYTcxNjRfZGV2CQkqZGV2OworCisJZW51bSBzYWE3MTY0X2kyY19idXNfbnIJCW5yOworCisJLyogSTJDIEkvTyAqLworCXN0cnVjdCBpMmNfYWRhcHRlcgkJaTJjX2FkYXA7CisJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhCWkyY19hbGdvOworCXN0cnVjdCBpMmNfY2xpZW50CQlpMmNfY2xpZW50OworCXUzMgkJCQlpMmNfcmM7Cit9OworCitzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQ7CisKK3N0cnVjdCBzYWE3MTY0X2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJdTMyIG5yOworCisJc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0OworCisJLyogSGFyZHdhcmUgU3BlY2lmaWMgKi8KKwkvKiBQQ0kgTWVtb3J5IGFsbG9jYXRpb25zICovCisJZW51bSBzYWE3MTY0X2J1ZmZlcl9mbGFncyBmbGFnczsgLyogRnJlZSwgQnVzeSwgRnVsbCAqLworCisJLyogQSBibG9jayBvZiBwYWdlIGFsaWduIFBDSSBtZW1vcnkgKi8KKwl1MzIgcGNpX3NpemU7CS8qIFBDSSBhbGxvY2F0aW9uIHNpemUgaW4gYnl0ZXMgKi8KKwl1NjQgKmNwdTsJLyogVmlydHVhbCBhZGRyZXNzICovCisJZG1hX2FkZHJfdCBkbWE7CS8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KKworCS8qIEEgcGFnZSB0YWJsZSB0aGF0IHNwbGl0cyB0aGUgYmxvY2sgaW50byBhIG51bWJlciBvZiBlbnRyaWVzICovCisJdTMyIHB0X3NpemU7CQkvKiBQQ0kgYWxsb2NhdGlvbiBzaXplIGluIGJ5dGVzICovCisJdTY0ICpwdF9jcHU7CQkvKiBWaXJ0dWFsIGFkZHJlc3MgKi8KKwlkbWFfYWRkcl90IHB0X2RtYTsJLyogUGh5c2ljYWwgYWRkcmVzcyAqLworfTsKKworc3RydWN0IHNhYTcxNjRfdHNwb3J0IHsKKworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2OworCWludCBucjsKKwllbnVtIHBvcnRfdCB0eXBlOworCisJc3RydWN0IHNhYTcxNjRfZHZiIGR2YjsKKworCS8qIEhXIHJlbGF0ZWQgc3RyZWFtIHBhcmFtZXRlcnMgKi8KKwl0bUhXU3RyZWFtUGFyYW1ldGVyc190IGh3X3N0cmVhbWluZ3BhcmFtczsKKworCS8qIERNQSBjb25maWd1cmF0aW9uIHZhbHVlcywgaXMgc2VlZGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiAqLworCXRtQ29tUmVzRE1BVGVybURlc2NySGVhZGVyX3QgaHdjZmc7CisKKwkvKiBoYXJkd2FyZSBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKwl1MzIgYnVmY291bnRlcjsKKwl1MzIgcGl0Y2g7CisJdTMyIGJ1ZnNpemU7CisJdTMyIGJ1Zm9mZnNldDsKKwl1MzIgYnVmcHRyMzJsOworCXUzMiBidWZwdHIzMmg7CisJdTY0IGJ1ZnB0cjY0OworCisJdTMyIG51bXB0ZTsJLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gYXJyYXksIG9ubHkgdmFsaWQgaW4gaGVhZCAqLworCXN0cnVjdCBtdXRleCBkbWFxdWV1ZV9sb2NrOworCXN0cnVjdCBtdXRleCBkdW1teV9kbWFxdWV1ZV9sb2NrOworCXN0cnVjdCBzYWE3MTY0X2J1ZmZlciBkbWFxdWV1ZTsKKwlzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgZHVtbXlfZG1hcXVldWU7CisKK307CisKK3N0cnVjdCBzYWE3MTY0X2RldiB7CisJc3RydWN0IGxpc3RfaGVhZAlkZXZsaXN0OworCWF0b21pY190CQlyZWZjb3VudDsKKworCS8qIHBjaSBzdHVmZiAqLworCXN0cnVjdCBwY2lfZGV2CSpwY2k7CisJdW5zaWduZWQgY2hhcglwY2lfcmV2LCBwY2lfbGF0OworCWludAkJcGNpX2J1cywgcGNpX3Nsb3Q7CisJdTMyCQlfX2lvbWVtICpsbW1pbzsKKwl1OAkJX19pb21lbSAqYm1taW87CisJdTMyCQlfX2lvbWVtICpsbW1pbzI7CisJdTgJCV9faW9tZW0gKmJtbWlvMjsKKwlpbnQJCXBjaV9pcnFtYXNrOworCisJLyogYm9hcmQgZGV0YWlscyAqLworCWludAlucjsKKwlpbnQJaHdyZXZpc2lvbjsKKwl1MzIJYm9hcmQ7CisJY2hhcgluYW1lWzMyXTsKKworCS8qIGZpcm13YXJlIHN0YXR1cyAqLworCXN0cnVjdCBzYWE3MTY0X2Z3X3N0YXR1cwlmd19zdGF0dXM7CisKKwl0bUNvbVJlc0hXRGVzY3JfdAkJaHdkZXNjOworCXRtQ29tUmVzSW50ZXJmYWNlRGVzY3JfdAlpbnRmZGVzYzsKKwl0bUNvbVJlc0J1c0Rlc2NyX3QJCWJ1c2Rlc2M7CisKKwl0bUNvbVJlc0J1c0luZm9fdAkJYnVzOworCisJLyogSW50ZXJydXB0IHN0YXR1cyBhbmQgYWNrIHJlZ2lzdGVycyAqLworCXUzMiBpbnRfc3RhdHVzOworCXUzMiBpbnRfYWNrOworCisJc3RydWN0IGNtZAkJCWNtZHNbU0FBX0NNRF9NQVhfTVNHX1VOSVRTXTsKKwlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOworCisJLyogSTJjIHJlbGF0ZWQgKi8KKwlzdHJ1Y3Qgc2FhNzE2NF9pMmMgaTJjX2J1c1szXTsKKworCS8qIFRyYW5zcG9ydCByZWxhdGVkICovCisJc3RydWN0IHNhYTcxNjRfdHNwb3J0IHRzMSwgdHMyOworCisJLyogRGVmZXJyZWQgY29tbWFuZC9hcGkgaW50ZXJydXB0cyBoYW5kbGluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrY21kOworCit9OworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzYWE3MTY0X2Rldmxpc3Q7CitleHRlcm4gdW5zaWduZWQgaW50IHdhaXRzZWNzOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogc2FhNzE2NC1jb3JlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3ZvaWQgc2FhNzE2NF9kdW1wcmVncyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTMyIGFkZHIpOwordm9pZCBzYWE3MTY0X2R1bXBoZXgxNihzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggKmJ1ZiwgaW50IGxlbik7Cit2b2lkIHNhYTcxNjRfZ2V0ZmlybXdhcmVzdGF0dXMoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpOwordTMyIHNhYTcxNjRfZ2V0Y3VycmVudGZpcm13YXJldmVyc2lvbihzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWZ3LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworaW50IHNhYTcxNjRfZG93bmxvYWRmaXJtd2FyZShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworZXh0ZXJuIGludCBzYWE3MTY0X2kyY19yZWdpc3RlcihzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cyk7CitleHRlcm4gaW50IHNhYTcxNjRfaTJjX3VucmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfaTJjICpidXMpOworZXh0ZXJuIHZvaWQgc2FhNzE2NF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzLAorCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWJ1cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworaW50IHNhYTcxNjRfYnVzX3NldHVwKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKK3ZvaWQgc2FhNzE2NF9idXNfZHVtcChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7CitpbnQgc2FhNzE2NF9idXNfc2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB0bUNvbVJlc0luZm9fdCogbXNnLCB2b2lkICpidWYpOworaW50IHNhYTcxNjRfYnVzX2dldChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdG1Db21SZXNJbmZvX3QqIG1zZywKKwl2b2lkICpidWYsIGludCBwZWVrb25seSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWNtZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworaW50IHNhYTcxNjRfY21kX3NlbmQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsCisJdTggaWQsIHRtQ29tUmVzQ21kX3QgY29tbWFuZCwgdTE2IGNvbnRyb2xzZWxlY3RvciwKKwl1MTYgc2l6ZSwgdm9pZCAqYnVmKTsKK3ZvaWQgc2FhNzE2NF9jbWRfc2lnbmFsKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCBzZXFubyk7CitpbnQgc2FhNzE2NF9pcnFfZGVxdWV1ZShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWFwaS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworaW50IHNhYTcxNjRfYXBpX2dldF9md192ZXJzaW9uKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1MzIgKnZlcnNpb24pOworaW50IHNhYTcxNjRfYXBpX2VudW1fc3ViZGV2cyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7CitpbnQgc2FhNzE2NF9hcGlfaTJjX3JlYWQoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIHU4IGFkZHIsIHUzMiByZWdsZW4sIHU4ICpyZWcsCisJdTMyIGRhdGFsZW4sIHU4ICpkYXRhKTsKK2ludCBzYWE3MTY0X2FwaV9pMmNfd3JpdGUoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIHU4IGFkZHIsCisJdTMyIGRhdGFsZW4sIHU4ICpkYXRhKTsKK2ludCBzYWE3MTY0X2FwaV9kaWZfd3JpdGUoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIHU4IGFkZHIsCisJdTMyIGRhdGFsZW4sIHU4ICpkYXRhKTsKK2ludCBzYWE3MTY0X2FwaV9yZWFkX2VlcHJvbShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggKmJ1ZiwgaW50IGJ1Zmxlbik7CitpbnQgc2FhNzE2NF9hcGlfc2V0X2dwaW9iaXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHVuaXRpZCwgdTggcGluKTsKK2ludCBzYWE3MTY0X2FwaV9jbGVhcl9ncGlvYml0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCB1bml0aWQsIHU4IHBpbik7CitpbnQgc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCwgdTggbW9kZSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWNhcmRzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworZXh0ZXJuIHN0cnVjdCBzYWE3MTY0X2JvYXJkIHNhYTcxNjRfYm9hcmRzW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHNhYTcxNjRfYmNvdW50OworCitleHRlcm4gc3RydWN0IHNhYTcxNjRfc3ViaWQgc2FhNzE2NF9zdWJpZHNbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzE2NF9pZGNvdW50OworCitleHRlcm4gdm9pZCBzYWE3MTY0X2NhcmRfbGlzdChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7CitleHRlcm4gdm9pZCBzYWE3MTY0X2dwaW9fc2V0dXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgc2FhNzE2NF9jYXJkX3NldHVwKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKKworZXh0ZXJuIGludCBzYWE3MTY0X2kyY2FkZHJfdG9fcmVnbGVuKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzLCBpbnQgYWRkcik7CitleHRlcm4gaW50IHNhYTcxNjRfaTJjYWRkcl90b191bml0aWQoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIGludCBhZGRyKTsKK2V4dGVybiBjaGFyICpzYWE3MTY0X3VuaXRpZF9uYW1lKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCB1bml0aWQpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogc2FhNzE2NC1kdmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2V4dGVybiBpbnQgc2FhNzE2NF9kdmJfcmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KTsKK2V4dGVybiBpbnQgc2FhNzE2NF9kdmJfdW5yZWdpc3RlcihzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogc2FhNzE2NC1idWZmZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2V4dGVybiBzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKnNhYTcxNjRfYnVmZmVyX2FsbG9jKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCwKKwl1MzIgbGVuKTsKK2V4dGVybiBpbnQgc2FhNzE2NF9idWZmZXJfZGVhbGxvYyhzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQsCisJc3RydWN0IHNhYTcxNjRfYnVmZmVyICpidWYpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitleHRlcm4gdW5zaWduZWQgaW50IGRlYnVnOworI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLilcCisJZG8geyBpZiAoZGVidWcgJiBsZXZlbClcCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIGRldi0+bmFtZSwgIyMgYXJnKTtcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBsb2dfd2FybihmbXQsIGFyZy4uLilcCisJZG8geyBcCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZtdCwgZGV2LT5uYW1lLCAjIyBhcmcpO1wKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGxvZ19lcnIoZm10LCBhcmcuLi4pXAorCWRvIHsgXAorCQlwcmludGsoS0VSTl9FUlJPUiAiJXM6ICIgZm10LCBkZXYtPm5hbWUsICMjIGFyZyk7XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgc2FhNzE2NF9yZWFkbChyZWcpIHJlYWRsKGRldi0+bG1taW8gKyAoKHJlZykgPj4gMikpCisjZGVmaW5lIHNhYTcxNjRfd3JpdGVsKHJlZywgdmFsdWUpIHdyaXRlbCgodmFsdWUpLCBkZXYtPmxtbWlvICsgKChyZWcpID4+IDIpKQorCisKKyNkZWZpbmUgc2FhNzE2NF9yZWFkYihyZWcpICAgICAgICAgICAgIHJlYWRsKGRldi0+Ym1taW8gKyAocmVnKSkKKyNkZWZpbmUgc2FhNzE2NF93cml0ZWIocmVnLCB2YWx1ZSkgICAgIHdyaXRlbCgodmFsdWUpLCBkZXYtPmJtbWlvICsgKHJlZykpCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCA2MWM0N2I4Li41YWI3YzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC03NCw2ICs3NCwxMyBAQAogI2RlZmluZSBDREJZUjIgMHg5OCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgWSByZWdpc3RlciAyICovCiAjZGVmaW5lIENEQkNSMiAweDljIC8qIENhcHR1cmUgZGF0YSBib3R0b20tZmllbGQgYWRkcmVzcyBDIHJlZ2lzdGVyIDIgKi8KIAorI3VuZGVmIERFQlVHX0dFT01FVFJZCisjaWZkZWYgREVCVUdfR0VPTUVUUlkKKyNkZWZpbmUgZGV2X2dlbwlkZXZfaW5mbworI2Vsc2UKKyNkZWZpbmUgZGV2X2dlbwlkZXZfZGJnCisjZW5kaWYKKwogLyogcGVyIHZpZGVvIGZyYW1lIGJ1ZmZlciAqLwogc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyIHsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHZiOyAvKiB2NGwgYnVmZmVyIG11c3QgYmUgZmlyc3QgKi8KQEAgLTkyLDEwICs5OSwyMSBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNhcHR1cmU7CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYWN0aXZlOwotCWludCBpc19pbnRlcmxhY2VkOwogCiAJc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyAqcGRhdGE7CiAKKwl1MzIgY2ZsY3I7CisKKwl1bnNpZ25lZCBpbnQgaXNfaW50ZXJsYWNlZDoxOworCXVuc2lnbmVkIGludCBpbWFnZV9tb2RlOjE7CisJdW5zaWduZWQgaW50IGlzXzE2Yml0OjE7Cit9OworCitzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0geworCXN0cnVjdCB2NGwyX3JlY3QgY2V1X3JlY3Q7CisJdW5zaWduZWQgaW50IGNhbV93aWR0aDsKKwl1bnNpZ25lZCBpbnQgY2FtX2hlaWdodDsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZXh0cmFfZm10OwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpjYW1lcmFfZm10OwogfTsKIApAQCAtMTQ2LDcgKzE2NCw4IEBACiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlpbnQgYnl0ZXNfcGVyX3BpeGVsID0gKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMzsKIAotCSpzaXplID0gUEFHRV9BTElHTihpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKiBieXRlc19wZXJfcGl4ZWwpOworCSpzaXplID0gUEFHRV9BTElHTihpY2QtPnVzZXJfd2lkdGggKiBpY2QtPnVzZXJfaGVpZ2h0ICoKKwkJCSAgIGJ5dGVzX3Blcl9waXhlbCk7CiAKIAlpZiAoMCA9PSAqY291bnQpCiAJCSpjb3VudCA9IDI7CkBAIC0xNTYsNyArMTc1LDcgQEAKIAkJCSgqY291bnQpLS07CiAJfQogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NSw4ICsxODQsOSBAQAogCQkJc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJXpkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCiAJCSZidWYtPnZiLCBidWYtPnZiLmJhZGRyLCBidWYtPnZiLmJzaXplKTsKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKQEAgLTE3NCw3ICsxOTQsNyBAQAogCiAJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLCAwLCAwKTsKIAl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsICZidWYtPnZiKTsKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZyZWVkXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhkZXYsICIlcyBmcmVlZFxuIiwgX19mdW5jX18pOwogCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOwogfQogCkBAIC0yMDUsNyArMjI1LDcgQEAKIAlwaHlzX2FkZHJfdG9wID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKTsKIAljZXVfd3JpdGUocGNkZXYsIENEQVlSLCBwaHlzX2FkZHJfdG9wKTsKIAlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKLQkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPndpZHRoOworCQlwaHlzX2FkZHJfYm90dG9tID0gcGh5c19hZGRyX3RvcCArIGljZC0+dXNlcl93aWR0aDsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREJZUiwgcGh5c19hZGRyX2JvdHRvbSk7CiAJfQogCkBAIC0yMTQsMTAgKzIzNCwxMiBAQAogCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6CiAJY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjoKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgotCQlwaHlzX2FkZHJfdG9wICs9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodDsKKwkJcGh5c19hZGRyX3RvcCArPSBpY2QtPnVzZXJfd2lkdGggKgorCQkJaWNkLT51c2VyX2hlaWdodDsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREFDUiwgcGh5c19hZGRyX3RvcCk7CiAJCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlZCkgewotCQkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPndpZHRoOworCQkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKworCQkJCWljZC0+dXNlcl93aWR0aDsKIAkJCWNldV93cml0ZShwY2RldiwgQ0RCQ1IsIHBoeXNfYWRkcl9ib3R0b20pOwogCQl9CiAJfQpAQCAtMjM2LDcgKzI1OCw3IEBACiAKIAlidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2J1ZmZlciwgdmIpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlemRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJXpkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCS8qIEFkZGVkIGxpc3QgaGVhZCBpbml0aWFsaXphdGlvbiBvbiBhbGxvYyAqLwpAQCAtMjUxLDEyICsyNzMsMTIgQEAKIAlCVUdfT04oTlVMTCA9PSBpY2QtPmN1cnJlbnRfZm10KTsKIAogCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8Ci0JICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8Ci0JICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPndpZHRoCSE9IGljZC0+dXNlcl93aWR0aCB8fAorCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+dXNlcl9oZWlnaHQgfHwKIAkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CiAJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKLQkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKLQkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+d2lkdGgJPSBpY2QtPnVzZXJfd2lkdGg7CisJCXZiLT5oZWlnaHQJPSBpY2QtPnVzZXJfaGVpZ2h0OwogCQl2Yi0+ZmllbGQJPSBmaWVsZDsKIAkJdmItPnN0YXRlCT0gVklERU9CVUZfTkVFRFNfSU5JVDsKIAl9CkBAIC0yODksNyArMzExLDcgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlemRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJXpkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKQEAgLTMwNCw2ICszMjYsMjcgQEAKIHN0YXRpYyB2b2lkIHNoX21vYmlsZV9jZXVfdmlkZW9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAogCQkJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocGNkZXYtPmFjdGl2ZSA9PSB2YikgeworCQkvKiBkaXNhYmxlIGNhcHR1cmUgKHJlbGVhc2UgRE1BIGJ1ZmZlciksIHJlc2V0ICovCisJCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDEgPDwgMTYpOworCQlwY2Rldi0+YWN0aXZlID0gTlVMTDsKKwl9CisKKwlpZiAoKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9BQ1RJVkUgfHwgdmItPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgJiYKKwkgICAgIWxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpIHsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKwogCWZyZWVfYnVmZmVyKHZxLCBjb250YWluZXJfb2YodmIsIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2J1ZmZlciwgdmIpKTsKIH0KIApAQCAtMzIzLDYgKzM2NiwxMCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOwogCiAJdmIgPSBwY2Rldi0+YWN0aXZlOworCWlmICghdmIpCisJCS8qIFN0YWxlIGludGVycnVwdCBmcm9tIGEgcmVsZWFzZWQgYnVmZmVyICovCisJCWdvdG8gb3V0OworCiAJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKIAogCWlmICghbGlzdF9lbXB0eSgmcGNkZXYtPmNhcHR1cmUpKQpAQCAtMzM3LDYgKzM4NCw4IEBACiAJZG9fZ2V0dGltZW9mZGF5KCZ2Yi0+dHMpOwogCXZiLT5maWVsZF9jb3VudCsrOwogCXdha2VfdXAoJnZiLT5kb25lKTsKKworb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zNDcsMjggKzM5NiwyMyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JaW50IHJldCA9IC1FQlVTWTsKIAogCWlmIChwY2Rldi0+aWNkKQotCQlnb3RvIGVycjsKKwkJcmV0dXJuIC1FQlVTWTsKIAotCWRldl9pbmZvKCZpY2QtPmRldiwKKwlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsCiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAotCXJldCA9IGljZC0+b3BzLT5pbml0KGljZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQlwbV9ydW50aW1lX2dldF9zeW5jKGljaS0+ZGV2KTsKKwljbGtfZW5hYmxlKHBjZGV2LT5jbGspOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMSA8PCAxNik7IC8qIHJlc2V0ICovCiAJd2hpbGUgKGNldV9yZWFkKHBjZGV2LCBDU1RTUikgJiAxKQogCQltc2xlZXAoMSk7CiAKIAlwY2Rldi0+aWNkID0gaWNkOwotZXJyOgotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwpAQCAtMzk0LDI1ICs0MzgsMTUxIEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CiAKLQlwbV9ydW50aW1lX3B1dF9zeW5jKGljaS0+ZGV2KTsKKwljbGtfZGlzYWJsZShwY2Rldi0+Y2xrKTsKIAotCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7Ci0KLQlkZXZfaW5mbygmaWNkLT5kZXYsCisJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LAogCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAogCXBjZGV2LT5pY2QgPSBOVUxMOwogfQogCisvKgorICogU2VlIGNoYXB0ZXIgMjkuNC4xMiAiQ2FwdHVyZSBGaWx0ZXIgQ29udHJvbCBSZWdpc3RlciAoQ0ZMQ1IpIgorICogaW4gU0g3NzIyIEhhcmR3YXJlIE1hbnVhbAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNpemVfZHN0KHVuc2lnbmVkIGludCBzcmMsIHVuc2lnbmVkIGludCBzY2FsZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFudF9wcmUgPSBzY2FsZSA+PiAxMjsKKwlpZiAoIXNyYyB8fCAhc2NhbGUpCisJCXJldHVybiBzcmM7CisJcmV0dXJuICgobWFudF9wcmUgKyAyICogKHNyYyAtIDEpKSAvICgyICogbWFudF9wcmUpIC0gMSkgKgorCQltYW50X3ByZSAqIDQwOTYgLyBzY2FsZSArIDE7Cit9CisKK3N0YXRpYyB1MTYgY2FsY19zY2FsZSh1bnNpZ25lZCBpbnQgc3JjLCB1bnNpZ25lZCBpbnQgKmRzdCkKK3sKKwl1MTYgc2NhbGU7CisKKwlpZiAoc3JjID09ICpkc3QpCisJCXJldHVybiAwOworCisJc2NhbGUgPSAoc3JjICogNDA5NiAvICpkc3QpICYgfjc7CisKKwl3aGlsZSAoc2NhbGUgPiA0MDk2ICYmIHNpemVfZHN0KHNyYywgc2NhbGUpIDwgKmRzdCkKKwkJc2NhbGUgLT0gODsKKworCSpkc3QgPSBzaXplX2RzdChzcmMsIHNjYWxlKTsKKworCXJldHVybiBzY2FsZTsKK30KKworLyogcmVjdCBpcyBndWFyYW50ZWVkIHRvIG5vdCBleGNlZWQgdGhlIHNjYWxlZCBjYW1lcmEgcmVjdGFuZ2xlICovCitzdGF0aWMgdm9pZCBzaF9tb2JpbGVfY2V1X3NldF9yZWN0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgIHVuc2lnbmVkIGludCBvdXRfd2lkdGgsCisJCQkJICAgdW5zaWduZWQgaW50IG91dF9oZWlnaHQpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfY2FtICpjYW0gPSBpY2QtPmhvc3RfcHJpdjsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmNhbS0+Y2V1X3JlY3Q7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgaGVpZ2h0LCB3aWR0aCwgY2R3ZHJfd2lkdGgsIGluX3dpZHRoLCBpbl9oZWlnaHQ7CisJdW5zaWduZWQgaW50IGxlZnRfb2Zmc2V0LCB0b3Bfb2Zmc2V0OworCXUzMiBjYW1vcjsKKworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiQ3JvcCAldXgldUAldToldVxuIiwKKwkJcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKKworCWxlZnRfb2Zmc2V0CT0gcmVjdC0+bGVmdDsKKwl0b3Bfb2Zmc2V0CT0gcmVjdC0+dG9wOworCisJaWYgKHBjZGV2LT5pbWFnZV9tb2RlKSB7CisJCWluX3dpZHRoID0gcmVjdC0+d2lkdGg7CisJCWlmICghcGNkZXYtPmlzXzE2Yml0KSB7CisJCQlpbl93aWR0aCAqPSAyOworCQkJbGVmdF9vZmZzZXQgKj0gMjsKKwkJfQorCQl3aWR0aCA9IGNkd2RyX3dpZHRoID0gb3V0X3dpZHRoOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCB3X2ZhY3RvciA9IChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCArIDcpID4+IDM7CisKKwkJd2lkdGggPSBvdXRfd2lkdGggKiB3X2ZhY3RvciAvIDI7CisKKwkJaWYgKCFwY2Rldi0+aXNfMTZiaXQpCisJCQl3X2ZhY3RvciAqPSAyOworCisJCWluX3dpZHRoID0gcmVjdC0+d2lkdGggKiB3X2ZhY3RvciAvIDI7CisJCWxlZnRfb2Zmc2V0ID0gbGVmdF9vZmZzZXQgKiB3X2ZhY3RvciAvIDI7CisKKwkJY2R3ZHJfd2lkdGggPSB3aWR0aCAqIDI7CisJfQorCisJaGVpZ2h0ID0gb3V0X2hlaWdodDsKKwlpbl9oZWlnaHQgPSByZWN0LT5oZWlnaHQ7CisJaWYgKHBjZGV2LT5pc19pbnRlcmxhY2VkKSB7CisJCWhlaWdodCAvPSAyOworCQlpbl9oZWlnaHQgLz0gMjsKKwkJdG9wX29mZnNldCAvPSAyOworCQljZHdkcl93aWR0aCAqPSAyOworCX0KKworCS8qIFNldCBDQU1PUiwgQ0FQV1IsIENGU1pSLCB0YWtlIGNhcmUgb2YgQ0RXRFIgKi8KKwljYW1vciA9IGxlZnRfb2Zmc2V0IHwgKHRvcF9vZmZzZXQgPDwgMTYpOworCisJZGV2X2dlbyhpY2QtPmRldi5wYXJlbnQsCisJCSJDQU1PUiAweCV4LCBDQVBXUiAweCV4LCBDRlNaUiAweCV4LCBDRFdEUiAweCV4XG4iLCBjYW1vciwKKwkJKGluX2hlaWdodCA8PCAxNikgfCBpbl93aWR0aCwgKGhlaWdodCA8PCAxNikgfCB3aWR0aCwKKwkJY2R3ZHJfd2lkdGgpOworCisJY2V1X3dyaXRlKHBjZGV2LCBDQU1PUiwgY2Ftb3IpOworCWNldV93cml0ZShwY2RldiwgQ0FQV1IsIChpbl9oZWlnaHQgPDwgMTYpIHwgaW5fd2lkdGgpOworCWNldV93cml0ZShwY2RldiwgQ0ZTWlIsIChoZWlnaHQgPDwgMTYpIHwgd2lkdGgpOworCWNldV93cml0ZShwY2RldiwgQ0RXRFIsIGNkd2RyX3dpZHRoKTsKK30KKworc3RhdGljIHUzMiBjYXB0dXJlX3NhdmVfcmVzZXQoc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldikKK3sKKwl1MzIgY2Fwc3IgPSBjZXVfcmVhZChwY2RldiwgQ0FQU1IpOworCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDEgPDwgMTYpOyAvKiByZXNldCwgc3RvcCBjYXB0dXJlICovCisJcmV0dXJuIGNhcHNyOworfQorCitzdGF0aWMgdm9pZCBjYXB0dXJlX3Jlc3RvcmUoc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiwgdTMyIGNhcHNyKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMCAqIEhaOworCisJLyoKKwkgKiBXYWl0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWUuIEl0IGNhbiB0YWtlIGEgbG9uZyB0aW1lLAorCSAqIGJ1dCBpZiBpdCBoYXMgYmVlbiBhYm9ydGVkIGJ5IGEgQ0FQU1IgcmVzZXQsIGl0IHNob3VsZSBleGl0IHNvb25lci4KKwkgKi8KKwl3aGlsZSAoKGNldV9yZWFkKHBjZGV2LCBDU1RTUikgJiAxKSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJbXNsZWVwKDEpOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJZGV2X2VycihwY2Rldi0+aWNpLnY0bDJfZGV2LmRldiwKKwkJCSJUaW1lb3V0IHdhaXRpbmcgZm9yIGZyYW1lIGVuZCEgSW50ZXJmYWNlIHByb2JsZW0/XG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFdhaXQgdW50aWwgcmVzZXQgY2xlYXJzLCB0aGlzIHNoYWxsIG5vdCBoYW5nLi4uICovCisJd2hpbGUgKGNldV9yZWFkKHBjZGV2LCBDQVBTUikgJiAoMSA8PCAxNikpCisJCXVkZWxheSgxMCk7CisKKwkvKiBBbnl0aGluZyB0byByZXN0b3JlPyAqLworCWlmIChjYXBzciAmIH4oMSA8PCAxNikpCisJCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIGNhcHNyKTsKK30KKwogc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJICAgICAgIF9fdTMyIHBpeGZtdCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwotCWludCByZXQsIGJ1c3dpZHRoLCB3aWR0aCwgaGVpZ2h0LCBjZnN6cl93aWR0aCwgY2R3ZHJfd2lkdGg7CisJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzLCB2YWx1ZTsKLQlpbnQgeXV2X21vZGUsIHl1dl9saW5lc2tpcDsKKwlpbnQgeXV2X2xpbmVza2lwOworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CisJdTMyIGNhcHNyID0gY2FwdHVyZV9zYXZlX3Jlc2V0KHBjZGV2KTsKIAogCWNhbWVyYV9mbGFncyA9IGljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0oaWNkKTsKIAljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywKQEAgLTQyNiwxMCArNTk2LDEwIEBACiAKIAlzd2l0Y2ggKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLKSB7CiAJY2FzZSBTT0NBTV9EQVRBV0lEVEhfODoKLQkJYnVzd2lkdGggPSA4OworCQlwY2Rldi0+aXNfMTZiaXQgPSAwOwogCQlicmVhazsKIAljYXNlIFNPQ0FNX0RBVEFXSURUSF8xNjoKLQkJYnVzd2lkdGggPSAxNjsKKwkJcGNkZXYtPmlzXzE2Yml0ID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MzksNyArNjA5LDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENSQ01QUiwgMCk7CiAKIAl2YWx1ZSA9IDB4MDAwMDAwMTA7IC8qIGRhdGEgZmV0Y2ggYnkgZGVmYXVsdCAqLwotCXl1dl9tb2RlID0geXV2X2xpbmVza2lwID0gMDsKKwl5dXZfbGluZXNraXAgPSAwOwogCiAJc3dpdGNoIChpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgpAQCAtNDQ4LDggKzYxOCw3IEBACiAJCS8qIGZhbGwtdGhyb3VnaCAqLwogCWNhc2UgVjRMMl9QSVhfRk1UX05WMTY6CiAJY2FzZSBWNEwyX1BJWF9GTVRfTlY2MToKLQkJeXV2X21vZGUgPSAxOwotCQlzd2l0Y2ggKHBjZGV2LT5jYW1lcmFfZm10LT5mb3VyY2MpIHsKKwkJc3dpdGNoIChjYW0tPmNhbWVyYV9mbXQtPmZvdXJjYykgewogCQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgogCQkJdmFsdWUgPSAweDAwMDAwMDAwOyAvKiBDYjAsIFkwLCBDcjAsIFkxICovCiAJCQlicmVhazsKQEAgLTQ3MywzNiArNjQyLDE2IEBACiAKIAl2YWx1ZSB8PSBjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XID8gMSA8PCAxIDogMDsKIAl2YWx1ZSB8PSBjb21tb25fZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XID8gMSA8PCAwIDogMDsKLQl2YWx1ZSB8PSBidXN3aWR0aCA9PSAxNiA/IDEgPDwgMTIgOiAwOworCXZhbHVlIHw9IHBjZGV2LT5pc18xNmJpdCA/IDEgPDwgMTIgOiAwOwogCWNldV93cml0ZShwY2RldiwgQ0FNQ1IsIHZhbHVlKTsKIAogCWNldV93cml0ZShwY2RldiwgQ0FQQ1IsIDB4MDAzMDAwMDApOwogCWNldV93cml0ZShwY2RldiwgQ0FJRlIsIHBjZGV2LT5pc19pbnRlcmxhY2VkID8gMHgxMDEgOiAwKTsKIAorCXNoX21vYmlsZV9jZXVfc2V0X3JlY3QoaWNkLCBpY2QtPnVzZXJfd2lkdGgsIGljZC0+dXNlcl9oZWlnaHQpOwogCW1kZWxheSgxKTsKIAotCWlmICh5dXZfbW9kZSkgewotCQl3aWR0aCA9IGljZC0+d2lkdGggKiAyOwotCQl3aWR0aCA9IGJ1c3dpZHRoID09IDE2ID8gd2lkdGggLyAyIDogd2lkdGg7Ci0JCWNmc3pyX3dpZHRoID0gY2R3ZHJfd2lkdGggPSBpY2QtPndpZHRoOwotCX0gZWxzZSB7Ci0JCXdpZHRoID0gaWNkLT53aWR0aCAqICgoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzKTsKLQkJd2lkdGggPSBidXN3aWR0aCA9PSAxNiA/IHdpZHRoIC8gMiA6IHdpZHRoOwotCQljZnN6cl93aWR0aCA9IGJ1c3dpZHRoID09IDggPyB3aWR0aCAvIDIgOiB3aWR0aDsKLQkJY2R3ZHJfd2lkdGggPSBidXN3aWR0aCA9PSAxNiA/IHdpZHRoICogMiA6IHdpZHRoOwotCX0KLQotCWhlaWdodCA9IGljZC0+aGVpZ2h0OwotCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlZCkgewotCQloZWlnaHQgLz0gMjsKLQkJY2R3ZHJfd2lkdGggKj0gMjsKLQl9Ci0KLQljZXVfd3JpdGUocGNkZXYsIENBTU9SLCAwKTsKLQljZXVfd3JpdGUocGNkZXYsIENBUFdSLCAoaGVpZ2h0IDw8IDE2KSB8IHdpZHRoKTsKLQljZXVfd3JpdGUocGNkZXYsIENGTENSLCAwKTsgLyogbm8gc2NhbGluZyAqLwotCWNldV93cml0ZShwY2RldiwgQ0ZTWlIsIChoZWlnaHQgPDwgMTYpIHwgY2ZzenJfd2lkdGgpOwotCWNldV93cml0ZShwY2RldiwgQ0xGQ1IsIDApOyAvKiBubyBsb3dwYXNzIGZpbHRlciAqLworCWNldV93cml0ZShwY2RldiwgQ0ZMQ1IsIHBjZGV2LT5jZmxjcik7CiAKIAkvKiBBIGZldyB3b3JkcyBhYm91dCBieXRlIG9yZGVyIChvYnNlcnZlZCBpbiBCaWcgRW5kaWFuIG1vZGUpCiAJICoKQEAgLTUyMSwxMCArNjcwLDE1IEBACiAJCXZhbHVlICY9IH4weDAwMDAwMDEwOyAvKiBjb252ZXJ0IDQ6MjoyIC0+IDQ6MjowICovCiAKIAljZXVfd3JpdGUocGNkZXYsIENET0NSLCB2YWx1ZSk7Ci0KLQljZXVfd3JpdGUocGNkZXYsIENEV0RSLCBjZHdkcl93aWR0aCk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDRldDUiwgMCk7IC8qIGtlZXAgImRhdGFmZXRjaCBmaXJld2FsbCIgZGlzYWJsZWQgKi8KIAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiU19GTVQgc3VjY2Vzc2Z1bCBmb3IgJWMlYyVjJWMgJXV4JXVcbiIsCisJCXBpeGZtdCAmIDB4ZmYsIChwaXhmbXQgPj4gOCkgJiAweGZmLAorCQkocGl4Zm10ID4+IDE2KSAmIDB4ZmYsIChwaXhmbXQgPj4gMjQpICYgMHhmZiwKKwkJaWNkLT51c2VyX3dpZHRoLCBpY2QtPnVzZXJfaGVpZ2h0KTsKKworCWNhcHR1cmVfcmVzdG9yZShwY2RldiwgY2Fwc3IpOworCiAJLyogbm90IGluIGJ1bmRsZSBtb2RlOiBza2lwIENCRFNSLCBDREFZUjIsIENEQUNSMiwgQ0RCWVIyLCBDREJDUjIgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTU3NCwyNCArNzI4LDM1IEBACiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfZ2V0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBpZHgsCiAJCQkJICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAlpbnQgcmV0LCBrLCBuOwogCWludCBmb3JtYXRzID0gMDsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbTsKIAogCXJldCA9IHNoX21vYmlsZV9jZXVfdHJ5X2J1c19wYXJhbShpY2QpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gMDsKIAorCWlmICghaWNkLT5ob3N0X3ByaXYpIHsKKwkJY2FtID0ga3phbGxvYyhzaXplb2YoKmNhbSksIEdGUF9LRVJORUwpOworCQlpZiAoIWNhbSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWljZC0+aG9zdF9wcml2ID0gY2FtOworCX0gZWxzZSB7CisJCWNhbSA9IGljZC0+aG9zdF9wcml2OworCX0KKwogCS8qIEJlZ2lubmluZyBvZiBhIHBhc3MgKi8KIAlpZiAoIWlkeCkKLQkJaWNkLT5ob3N0X3ByaXYgPSBOVUxMOworCQljYW0tPmV4dHJhX2ZtdCA9IE5VTEw7CiAKIAlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgewogCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CiAJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgogCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6Ci0JCWlmIChpY2QtPmhvc3RfcHJpdikKKwkJaWYgKGNhbS0+ZXh0cmFfZm10KQogCQkJZ290byBhZGRfc2luZ2xlX2Zvcm1hdDsKIAogCQkvKgpAQCAtNjAzLDcgKzc2OCw3IEBACiAJCSAqIHRoZSBob3N0X3ByaXYgcG9pbnRlciBhbmQgY2hlY2sgd2hldGhlciB0aGUgZm9ybWF0IHlvdSdyZQogCQkgKiBnb2luZyB0byBhZGQgbm93IGlzIGFscmVhZHkgdGhlcmUuCiAJCSAqLwotCQlpY2QtPmhvc3RfcHJpdiA9ICh2b2lkICopc2hfbW9iaWxlX2NldV9mb3JtYXRzOworCQljYW0tPmV4dHJhX2ZtdCA9ICh2b2lkICopc2hfbW9iaWxlX2NldV9mb3JtYXRzOwogCiAJCW4gPSBBUlJBWV9TSVpFKHNoX21vYmlsZV9jZXVfZm9ybWF0cyk7CiAJCWZvcm1hdHMgKz0gbjsKQEAgLTYxMiw3ICs3NzcsNyBAQAogCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CiAJCQl4bGF0ZS0+YnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaWR4XS5kZXB0aDsKIAkJCXhsYXRlKys7Ci0JCQlkZXZfZGJnKGljaS0+ZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKKwkJCWRldl9kYmcoZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKIAkJCQlzaF9tb2JpbGVfY2V1X2Zvcm1hdHNba10ubmFtZSwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQpAQCAtNjI1LDcgKzc5MCw3IEBACiAJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKIAkJCXhsYXRlLT5idXN3aWR0aCA9IGljZC0+Zm9ybWF0c1tpZHhdLmRlcHRoOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoaWNpLT5kZXYsCisJCQlkZXZfZGJnKGRldiwKIAkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyBpbiBwYXNzLXRocm91Z2ggbW9kZVxuIiwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQpAQCAtNjM0LDgyICs3OTksNzE0IEBACiAJcmV0dXJuIGZvcm1hdHM7CiB9CiAKLXN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgdm9pZCBzaF9tb2JpbGVfY2V1X3B1dF9mb3JtYXRzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXJldHVybiBpY2QtPm9wcy0+c2V0X2Nyb3AoaWNkLCByZWN0KTsKKwlrZnJlZShpY2QtPmhvc3RfcHJpdik7CisJaWNkLT5ob3N0X3ByaXYgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorLyogQ2hlY2sgaWYgYW55IGRpbWVuc2lvbiBvZiByMSBpcyBzbWFsbGVyIHRoYW4gcmVzcGVjdGl2ZSBvbmUgb2YgcjIgKi8KK3N0YXRpYyBib29sIGlzX3NtYWxsZXIoc3RydWN0IHY0bDJfcmVjdCAqcjEsIHN0cnVjdCB2NGwyX3JlY3QgKnIyKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JX191MzIgcGl4Zm10ID0gZi0+Zm10LnBpeC5waXhlbGZvcm1hdDsKLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwotCXN0cnVjdCB2NGwyX2Zvcm1hdCBjYW1fZiA9ICpmOworCXJldHVybiByMS0+d2lkdGggPCByMi0+d2lkdGggfHwgcjEtPmhlaWdodCA8IHIyLT5oZWlnaHQ7Cit9CisKKy8qIENoZWNrIGlmIHIxIGZhaWxzIHRvIGNvdmVyIHIyICovCitzdGF0aWMgYm9vbCBpc19pbnNpZGUoc3RydWN0IHY0bDJfcmVjdCAqcjEsIHN0cnVjdCB2NGwyX3JlY3QgKnIyKQoreworCXJldHVybiByMS0+bGVmdCA+IHIyLT5sZWZ0IHx8IHIxLT50b3AgPiByMi0+dG9wIHx8CisJCXIxLT5sZWZ0ICsgcjEtPndpZHRoIDwgcjItPmxlZnQgKyByMi0+d2lkdGggfHwKKwkJcjEtPnRvcCArIHIxLT5oZWlnaHQgPCByMi0+dG9wICsgcjItPmhlaWdodDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzY2FsZV9kb3duKHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgc2NhbGUpCit7CisJcmV0dXJuIChzaXplICogNDA5NiArIHNjYWxlIC8gMikgLyBzY2FsZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzY2FsZV91cCh1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHNjYWxlKQoreworCXJldHVybiAoc2l6ZSAqIHNjYWxlICsgMjA0OCkgLyA0MDk2OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfZ2VuZXJpY19zY2FsZSh1bnNpZ25lZCBpbnQgaW5wdXQsIHVuc2lnbmVkIGludCBvdXRwdXQpCit7CisJcmV0dXJuIChpbnB1dCAqIDQwOTYgKyBvdXRwdXQgLyAyKSAvIG91dHB1dDsKK30KKworc3RhdGljIGludCBjbGllbnRfZ19yZWN0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IHY0bDJfY3JvcCBjcm9wOworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY2FwOwogCWludCByZXQ7CiAKLQl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKLQlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfY3JvcCwgJmNyb3ApOworCWlmICghcmV0KSB7CisJCSpyZWN0ID0gY3JvcC5jOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOwotCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgJmNhbV9mKTsKKwkvKiBDYW1lcmEgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCAuZ19jcm9wKCksIGFzc3VtZSBkZWZhdWx0IHJlY3RhbmdsZSAqLworCWNhcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCi0JaWYgKCFyZXQpIHsKLQkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKLQkJaWNkLT5jdXJyZW50X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKLQkJcGNkZXYtPmNhbWVyYV9mbXQgPSB4bGF0ZS0+Y2FtX2ZtdDsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgY3JvcGNhcCwgJmNhcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkqcmVjdCA9IGNhcC5kZWZyZWN0OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoZSBjb21tb24gZm9yIGJvdGggc2NhbGluZyBhbmQgY3JvcHBpbmcgaXRlcmF0aXZlIGFwcHJvYWNoIGlzOgorICogMS4gdHJ5IGlmIHRoZSBjbGllbnQgY2FuIHByb2R1Y2UgZXhhY3RseSB3aGF0IHJlcXVlc3RlZCBieSB0aGUgdXNlcgorICogMi4gaWYgKDEpIGZhaWxlZCwgdHJ5IHRvIGRvdWJsZSB0aGUgY2xpZW50IGltYWdlIHVudGlsIHdlIGdldCBvbmUgYmlnIGVub3VnaAorICogMy4gaWYgKDIpIGZhaWxlZCwgdHJ5IHRvIHJlcXVlc3QgdGhlIG1heGltdW0gaW1hZ2UKKyAqLworc3RhdGljIGludCBjbGllbnRfc19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AsCisJCQkgc3RydWN0IHY0bDJfY3JvcCAqY2FtX2Nyb3ApCit7CisJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCA9ICZjcm9wLT5jLCAqY2FtX3JlY3QgPSAmY2FtX2Nyb3AtPmM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc2QtPnY0bDJfZGV2LT5kZXY7CisJc3RydWN0IHY0bDJfY3JvcGNhcCBjYXA7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKKworCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2Nyb3AsIGNyb3ApOworCXJldCA9IGNsaWVudF9nX3JlY3Qoc2QsIGNhbV9yZWN0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogTm93IGNhbV9jcm9wIGNvbnRhaW5zIHRoZSBjdXJyZW50IGNhbWVyYSBpbnB1dCByZWN0YW5nbGUsIGFuZCBpdCBtdXN0CisJICogYmUgd2l0aGluIGNhbWVyYSBjcm9wY2FwIGJvdW5kcworCSAqLworCWlmICghbWVtY21wKHJlY3QsIGNhbV9yZWN0LCBzaXplb2YoKnJlY3QpKSkgeworCQkvKiBFdmVuIGlmIGNhbWVyYSBTX0NST1AgZmFpbGVkLCBidXQgY2FtZXJhIHJlY3RhbmdsZSBtYXRjaGVzICovCisJCWRldl9kYmcoZGV2LCAiQ2FtZXJhIFNfQ1JPUCBzdWNjZXNzZnVsIGZvciAldXgldUAldToldVxuIiwKKwkJCXJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFRyeSB0byBmaXggY3JvcHBpbmcsIHRoYXQgY2FtZXJhIGhhc24ndCBtYW5hZ2VkIHRvIHNldCAqLworCWRldl9nZW8oZGV2LCAiRml4IGNhbWVyYSBTX0NST1AgZm9yICV1eCV1QCV1OiV1IHRvICV1eCV1QCV1OiV1XG4iLAorCQljYW1fcmVjdC0+d2lkdGgsIGNhbV9yZWN0LT5oZWlnaHQsCisJCWNhbV9yZWN0LT5sZWZ0LCBjYW1fcmVjdC0+dG9wLAorCQlyZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5sZWZ0LCByZWN0LT50b3ApOworCisJLyogV2UgbmVlZCBzZW5zb3IgbWF4aW11bSByZWN0YW5nbGUgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgY3JvcGNhcCwgJmNhcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QtPmxlZnQsICZyZWN0LT53aWR0aCwgY2FwLmJvdW5kcy5sZWZ0LCAyLAorCQkJICAgICAgY2FwLmJvdW5kcy53aWR0aCk7CisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LT50b3AsICZyZWN0LT5oZWlnaHQsIGNhcC5ib3VuZHMudG9wLCA0LAorCQkJICAgICAgY2FwLmJvdW5kcy5oZWlnaHQpOworCisJLyoKKwkgKiBQb3B1bGFyIHNwZWNpYWwgY2FzZSAtIHNvbWUgY2FtZXJhcyBjYW4gb25seSBoYW5kbGUgZml4ZWQgc2l6ZXMgbGlrZQorCSAqIFFWR0EsIFZHQSwuLi4gVGFrZSBjYXJlIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisJICovCisJd2lkdGggPSBtYXgoY2FtX3JlY3QtPndpZHRoLCAyKTsKKwloZWlnaHQgPSBtYXgoY2FtX3JlY3QtPmhlaWdodCwgMik7CisKKwl3aGlsZSAoIXJldCAmJiAoaXNfc21hbGxlcihjYW1fcmVjdCwgcmVjdCkgfHwKKwkJCWlzX2luc2lkZShjYW1fcmVjdCwgcmVjdCkpICYmCisJICAgICAgIChjYXAuYm91bmRzLndpZHRoID4gd2lkdGggfHwgY2FwLmJvdW5kcy5oZWlnaHQgPiBoZWlnaHQpKSB7CisKKwkJd2lkdGggKj0gMjsKKwkJaGVpZ2h0ICo9IDI7CisKKwkJY2FtX3JlY3QtPndpZHRoID0gd2lkdGg7CisJCWNhbV9yZWN0LT5oZWlnaHQgPSBoZWlnaHQ7CisKKwkJLyoKKwkJICogV2UgZG8gbm90IGtub3cgd2hhdCBjYXBhYmlsaXRpZXMgdGhlIGNhbWVyYSBoYXMgdG8gc2V0IHVwCisJCSAqIGxlZnQgYW5kIHRvcCBib3JkZXJzLiBXZSBjb3VsZCB0cnkgdG8gYmUgc21hcnRlciBpbiBpdGVyYXRpbmcKKwkJICogdGhlbSwgZS5nLiwgaWYgY2FtZXJhIGN1cnJlbnQgbGVmdCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlCisJCSAqIHRhcmdldCBsZWZ0LCBzZXQgaXQgdG8gdGhlIG1pZGRsZSBwb2ludCBiZXR3ZWVuIHRoZSBjdXJyZW50CisJCSAqIGxlZnQgYW5kIG1pbmltdW0gbGVmdC4gQnV0IHRoYXQgd291bGQgYWRkIHRvbyBtdWNoCisJCSAqIGNvbXBsZXhpdHk6IHdlIHdvdWxkIGhhdmUgdG8gaXRlcmF0ZSBlYWNoIGJvcmRlciBzZXBhcmF0ZWx5LgorCQkgKi8KKwkJaWYgKGNhbV9yZWN0LT5sZWZ0ID4gcmVjdC0+bGVmdCkKKwkJCWNhbV9yZWN0LT5sZWZ0ID0gY2FwLmJvdW5kcy5sZWZ0OworCisJCWlmIChjYW1fcmVjdC0+bGVmdCArIGNhbV9yZWN0LT53aWR0aCA8IHJlY3QtPmxlZnQgKyByZWN0LT53aWR0aCkKKwkJCWNhbV9yZWN0LT53aWR0aCA9IHJlY3QtPmxlZnQgKyByZWN0LT53aWR0aCAtCisJCQkJY2FtX3JlY3QtPmxlZnQ7CisKKwkJaWYgKGNhbV9yZWN0LT50b3AgPiByZWN0LT50b3ApCisJCQljYW1fcmVjdC0+dG9wID0gY2FwLmJvdW5kcy50b3A7CisKKwkJaWYgKGNhbV9yZWN0LT50b3AgKyBjYW1fcmVjdC0+aGVpZ2h0IDwgcmVjdC0+dG9wICsgcmVjdC0+aGVpZ2h0KQorCQkJY2FtX3JlY3QtPmhlaWdodCA9IHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCAtCisJCQkJY2FtX3JlY3QtPnRvcDsKKworCQl2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19jcm9wLCBjYW1fY3JvcCk7CisJCXJldCA9IGNsaWVudF9nX3JlY3Qoc2QsIGNhbV9yZWN0KTsKKwkJZGV2X2dlbyhkZXYsICJDYW1lcmEgU19DUk9QICVkIGZvciAldXgldUAldToldVxuIiwgcmV0LAorCQkJY2FtX3JlY3QtPndpZHRoLCBjYW1fcmVjdC0+aGVpZ2h0LAorCQkJY2FtX3JlY3QtPmxlZnQsIGNhbV9yZWN0LT50b3ApOworCX0KKworCS8qIFNfQ1JPUCBtdXN0IG5vdCBtb2RpZnkgdGhlIHJlY3RhbmdsZSAqLworCWlmIChpc19zbWFsbGVyKGNhbV9yZWN0LCByZWN0KSB8fCBpc19pbnNpZGUoY2FtX3JlY3QsIHJlY3QpKSB7CisJCS8qCisJCSAqIFRoZSBjYW1lcmEgZmFpbGVkIHRvIGNvbmZpZ3VyZSBhIHN1aXRhYmxlIGNyb3BwaW5nLAorCQkgKiB3ZSBjYW5ub3QgdXNlIHRoZSBjdXJyZW50IHJlY3RhbmdsZSwgc2V0IHRvIG1heAorCQkgKi8KKwkJKmNhbV9yZWN0ID0gY2FwLmJvdW5kczsKKwkJdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfY3JvcCwgY2FtX2Nyb3ApOworCQlyZXQgPSBjbGllbnRfZ19yZWN0KHNkLCBjYW1fcmVjdCk7CisJCWRldl9nZW8oZGV2LCAiQ2FtZXJhIFNfQ1JPUCAlZCBmb3IgbWF4ICV1eCV1QCV1OiV1XG4iLCByZXQsCisJCQljYW1fcmVjdC0+d2lkdGgsIGNhbV9yZWN0LT5oZWlnaHQsCisJCQljYW1fcmVjdC0+bGVmdCwgY2FtX3JlY3QtPnRvcCk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCitzdGF0aWMgaW50IGdldF9jYW1lcmFfc2NhbGVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QsCisJCQkgICAgIHVuc2lnbmVkIGludCAqc2NhbGVfaCwgdW5zaWduZWQgaW50ICpzY2FsZV92KQoreworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmOworCWludCByZXQ7CisKKwlmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19mbXQsICZmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKHJlY3QtPndpZHRoLCBmLmZtdC5waXgud2lkdGgpOworCSpzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKHJlY3QtPmhlaWdodCwgZi5mbXQucGl4LmhlaWdodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfY2FtZXJhX3N1YndpbihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfcmVjdCAqY2FtX3N1YnJlY3QsCisJCQkgICAgIHVuc2lnbmVkIGludCBjYW1faHNjYWxlLCB1bnNpZ25lZCBpbnQgY2FtX3ZzY2FsZSkKK3sKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OworCXN0cnVjdCB2NGwyX3JlY3QgKmNldV9yZWN0ID0gJmNhbS0+Y2V1X3JlY3Q7CisKKwlpZiAoIWNldV9yZWN0LT53aWR0aCkgeworCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZjsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYuZm10LnBpeDsKKwkJaW50IHJldDsKKwkJLyogRmlyc3QgdGltZSAqLworCisJCWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19mbXQsICZmKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWRldl9nZW8oZGV2LCAiY2FtZXJhIGZtdCAldXgldVxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCisJCWlmIChwaXgtPndpZHRoID4gMjU2MCkgeworCQkJY2V1X3JlY3QtPndpZHRoCSA9IDI1NjA7CisJCQljZXVfcmVjdC0+bGVmdAkgPSAocGl4LT53aWR0aCAtIDI1NjApIC8gMjsKKwkJfSBlbHNlIHsKKwkJCWNldV9yZWN0LT53aWR0aAkgPSBwaXgtPndpZHRoOworCQkJY2V1X3JlY3QtPmxlZnQJID0gMDsKKwkJfQorCisJCWlmIChwaXgtPmhlaWdodCA+IDE5MjApIHsKKwkJCWNldV9yZWN0LT5oZWlnaHQgPSAxOTIwOworCQkJY2V1X3JlY3QtPnRvcAkgPSAocGl4LT5oZWlnaHQgLSAxOTIwKSAvIDI7CisJCX0gZWxzZSB7CisJCQljZXVfcmVjdC0+aGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisJCQljZXVfcmVjdC0+dG9wCSA9IDA7CisJCX0KKworCQlkZXZfZ2VvKGRldiwgImluaXRpYWxpc2VkIENFVSByZWN0ICV1eCV1QCV1OiV1XG4iLAorCQkJY2V1X3JlY3QtPndpZHRoLCBjZXVfcmVjdC0+aGVpZ2h0LAorCQkJY2V1X3JlY3QtPmxlZnQsIGNldV9yZWN0LT50b3ApOworCX0KKworCWNhbV9zdWJyZWN0LT53aWR0aAk9IHNjYWxlX3VwKGNldV9yZWN0LT53aWR0aCwgY2FtX2hzY2FsZSk7CisJY2FtX3N1YnJlY3QtPmxlZnQJPSBzY2FsZV91cChjZXVfcmVjdC0+bGVmdCwgY2FtX2hzY2FsZSk7CisJY2FtX3N1YnJlY3QtPmhlaWdodAk9IHNjYWxlX3VwKGNldV9yZWN0LT5oZWlnaHQsIGNhbV92c2NhbGUpOworCWNhbV9zdWJyZWN0LT50b3AJPSBzY2FsZV91cChjZXVfcmVjdC0+dG9wLCBjYW1fdnNjYWxlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsaWVudF9zX2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmLAorCQkJYm9vbCBjZXVfY2FuX3NjYWxlKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBwaXgtPndpZHRoLCBoZWlnaHQgPSBwaXgtPmhlaWdodCwgdG1wX3csIHRtcF9oOworCXVuc2lnbmVkIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CisJc3RydWN0IHY0bDJfY3JvcGNhcCBjYXA7CisJaW50IHJldDsKKworCWNhcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGNyb3BjYXAsICZjYXApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbWF4X3dpZHRoID0gbWluKGNhcC5ib3VuZHMud2lkdGgsIDI1NjApOworCW1heF9oZWlnaHQgPSBtaW4oY2FwLmJvdW5kcy5oZWlnaHQsIDE5MjApOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9nZW8oZGV2LCAiY2FtZXJhIHNjYWxlZCB0byAldXgldVxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCisJaWYgKCh3aWR0aCA9PSBwaXgtPndpZHRoICYmIGhlaWdodCA9PSBwaXgtPmhlaWdodCkgfHwgIWNldV9jYW5fc2NhbGUpCisJCXJldHVybiAwOworCisJLyogQ2FtZXJhIHNldCBhIGZvcm1hdCwgYnV0IGdlb21ldHJ5IGlzIG5vdCBwcmVjaXNlLCB0cnkgdG8gaW1wcm92ZSAqLworCXRtcF93ID0gcGl4LT53aWR0aDsKKwl0bXBfaCA9IHBpeC0+aGVpZ2h0OworCisJLyogd2lkdGggPD0gbWF4X3dpZHRoICYmIGhlaWdodCA8PSBtYXhfaGVpZ2h0IC0gZ3VhcmFudGVlZCBieSB0cnlfZm10ICovCisJd2hpbGUgKCh3aWR0aCA+IHRtcF93IHx8IGhlaWdodCA+IHRtcF9oKSAmJgorCSAgICAgICB0bXBfdyA8IG1heF93aWR0aCAmJiB0bXBfaCA8IG1heF9oZWlnaHQpIHsKKwkJdG1wX3cgPSBtaW4oMiAqIHRtcF93LCBtYXhfd2lkdGgpOworCQl0bXBfaCA9IG1pbigyICogdG1wX2gsIG1heF9oZWlnaHQpOworCQlwaXgtPndpZHRoID0gdG1wX3c7CisJCXBpeC0+aGVpZ2h0ID0gdG1wX2g7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgZik7CisJCWRldl9nZW8oZGV2LCAiQ2FtZXJhIHNjYWxlZCB0byAldXgldVxuIiwKKwkJCXBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCS8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLworCQkJZGV2X2VycihkZXYsICJDbGllbnQgZmFpbGVkIHRvIHNldCBmb3JtYXQ6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIEByZWN0CS0gY2FtZXJhIGNyb3BwZWQgcmVjdGFuZ2xlCisgKiBAc3ViX3JlY3QJLSBDRVUgY3JvcHBlZCByZWN0YW5nbGUsIG1hcHBlZCBiYWNrIHRvIGNhbWVyYSBpbnB1dCBhcmVhCisgKiBAY2V1X3JlY3QJLSBvbiBvdXRwdXQgY2FsY3VsYXRlZCBDRVUgY3JvcCByZWN0YW5nbGUKKyAqLworc3RhdGljIGludCBjbGllbnRfc2NhbGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QsCisJCQlzdHJ1Y3QgdjRsMl9yZWN0ICpzdWJfcmVjdCwgc3RydWN0IHY0bDJfcmVjdCAqY2V1X3JlY3QsCisJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsIGJvb2wgY2V1X2Nhbl9zY2FsZSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZl90bXAgPSAqZjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhfdG1wID0gJmZfdG1wLmZtdC5waXg7CisJdW5zaWduZWQgaW50IHNjYWxlX2gsIHNjYWxlX3Y7CisJaW50IHJldDsKKworCS8qIDUuIEFwcGx5IGl0ZXJhdGl2ZSBjYW1lcmEgU19GTVQgZm9yIGNhbWVyYSB1c2VyIHdpbmRvdy4gKi8KKwlyZXQgPSBjbGllbnRfc19mbXQoaWNkLCAmZl90bXAsIGNldV9jYW5fc2NhbGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2X2dlbyhkZXYsICI1OiBjYW1lcmEgc2NhbGVkIHRvICV1eCV1XG4iLAorCQlwaXhfdG1wLT53aWR0aCwgcGl4X3RtcC0+aGVpZ2h0KTsKKworCS8qIDYuIFJldHJpZXZlIGNhbWVyYSBvdXRwdXQgd2luZG93IChnX2ZtdCkgKi8KKworCS8qIHVubmVlZGVkIC0gaXQgaXMgYWxyZWFkeSBpbiAiZl90bXAiICovCisKKwkvKiA3LiBDYWxjdWxhdGUgbmV3IGNhbWVyYSBzY2FsZXMuICovCisJcmV0ID0gZ2V0X2NhbWVyYV9zY2FsZXMoc2QsIHJlY3QsICZzY2FsZV9oLCAmc2NhbGVfdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZ2VvKGRldiwgIjc6IGNhbWVyYSBzY2FsZXMgJXU6JXVcbiIsIHNjYWxlX2gsIHNjYWxlX3YpOworCisJY2FtLT5jYW1fd2lkdGgJCT0gcGl4X3RtcC0+d2lkdGg7CisJY2FtLT5jYW1faGVpZ2h0CQk9IHBpeF90bXAtPmhlaWdodDsKKwlmLT5mbXQucGl4LndpZHRoCT0gcGl4X3RtcC0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQJPSBwaXhfdG1wLT5oZWlnaHQ7CisKKwkvKgorCSAqIDguIENhbGN1bGF0ZSBuZXcgQ0VVIGNyb3AgLSBhcHBseSBjYW1lcmEgc2NhbGVzIHRvIHByZXZpb3VzbHkKKwkgKiAgICBjYWxjdWxhdGVkICJlZmZlY3RpdmUiIGNyb3AuCisJICovCisJY2V1X3JlY3QtPmxlZnQgPSBzY2FsZV9kb3duKHN1Yl9yZWN0LT5sZWZ0LCBzY2FsZV9oKTsKKwljZXVfcmVjdC0+d2lkdGggPSBzY2FsZV9kb3duKHN1Yl9yZWN0LT53aWR0aCwgc2NhbGVfaCk7CisJY2V1X3JlY3QtPnRvcCA9IHNjYWxlX2Rvd24oc3ViX3JlY3QtPnRvcCwgc2NhbGVfdik7CisJY2V1X3JlY3QtPmhlaWdodCA9IHNjYWxlX2Rvd24oc3ViX3JlY3QtPmhlaWdodCwgc2NhbGVfdik7CisKKwlkZXZfZ2VvKGRldiwgIjg6IG5ldyBDRVUgcmVjdCAldXgldUAldToldVxuIiwKKwkJY2V1X3JlY3QtPndpZHRoLCBjZXVfcmVjdC0+aGVpZ2h0LAorCQljZXVfcmVjdC0+bGVmdCwgY2V1X3JlY3QtPnRvcCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IGNvbWJpbmVkIHNjYWxlcyAqLworc3RhdGljIGludCBnZXRfc2NhbGVzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkgICAgICB1bnNpZ25lZCBpbnQgKnNjYWxlX2gsIHVuc2lnbmVkIGludCAqc2NhbGVfdikKK3sKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXN0cnVjdCB2NGwyX2Nyb3AgY2FtX2Nyb3A7CisJdW5zaWduZWQgaW50IHdpZHRoX2luLCBoZWlnaHRfaW47CisJaW50IHJldDsKKworCWNhbV9jcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXQgPSBjbGllbnRfZ19yZWN0KHNkLCAmY2FtX2Nyb3AuYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBnZXRfY2FtZXJhX3NjYWxlcyhzZCwgJmNhbV9jcm9wLmMsIHNjYWxlX2gsIHNjYWxlX3YpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJd2lkdGhfaW4gPSBzY2FsZV91cChjYW0tPmNldV9yZWN0LndpZHRoLCAqc2NhbGVfaCk7CisJaGVpZ2h0X2luID0gc2NhbGVfdXAoY2FtLT5jZXVfcmVjdC5oZWlnaHQsICpzY2FsZV92KTsKKworCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbS0+Y2V1X3JlY3Qud2lkdGgsIGljZC0+dXNlcl93aWR0aCk7CisJKnNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtLT5jZXVfcmVjdC5oZWlnaHQsIGljZC0+dXNlcl9oZWlnaHQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDRVUgY2FuIHNjYWxlIGFuZCBjcm9wLCBidXQgd2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBiYW5kd2lkdGggYW5kIGtpbGwgdGhlCisgKiBmcmFtZXJhdGUgYnkgYWx3YXlzIHJlcXVlc3RpbmcgdGhlIG1heGltdW0gaW1hZ2UgZnJvbSB0aGUgY2xpZW50LiBTZWUKKyAqIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2hfbW9iaWxlX2NhbWVyYV9jZXUudHh0IGZvciBhIGRlc2NyaXB0aW9uIG9mCisgKiBzY2FsaW5nIGFuZCBjcm9wcGluZyBhbGdvcml0aG1zIGFuZCBmb3IgdGhlIG1lYW5pbmcgb2YgcmVmZXJlbmNlZCBoZXJlIHN0ZXBzLgorICovCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9jcm9wICphKQoreworCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmYS0+YzsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXN0cnVjdCB2NGwyX2Nyb3AgY2FtX2Nyb3A7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfY2FtICpjYW0gPSBpY2QtPmhvc3RfcHJpdjsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpjYW1fcmVjdCA9ICZjYW1fY3JvcC5jLCAqY2V1X3JlY3QgPSAmY2FtLT5jZXVfcmVjdDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJc3RydWN0IHY0bDJfZm9ybWF0IGY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYuZm10LnBpeDsKKwl1bnNpZ25lZCBpbnQgc2NhbGVfY29tYl9oLCBzY2FsZV9jb21iX3YsIHNjYWxlX2NldV9oLCBzY2FsZV9jZXVfdiwKKwkJb3V0X3dpZHRoLCBvdXRfaGVpZ2h0OworCXUzMiBjYXBzciwgY2ZsY3I7CisJaW50IHJldDsKKworCS8qIDEuIENhbGN1bGF0ZSBjdXJyZW50IGNvbWJpbmVkIHNjYWxlcy4gKi8KKwlyZXQgPSBnZXRfc2NhbGVzKGljZCwgJnNjYWxlX2NvbWJfaCwgJnNjYWxlX2NvbWJfdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZ2VvKGRldiwgIjE6IGNvbWJpbmVkIHNjYWxlcyAldToldVxuIiwgc2NhbGVfY29tYl9oLCBzY2FsZV9jb21iX3YpOworCisJLyogMi4gQXBwbHkgaXRlcmF0aXZlIGNhbWVyYSBTX0NST1AgZm9yIG5ldyBpbnB1dCB3aW5kb3cuICovCisJcmV0ID0gY2xpZW50X3NfY3JvcChzZCwgYSwgJmNhbV9jcm9wKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9nZW8oZGV2LCAiMjogY2FtZXJhIGNyb3BwZWQgdG8gJXV4JXVAJXU6JXVcbiIsCisJCWNhbV9yZWN0LT53aWR0aCwgY2FtX3JlY3QtPmhlaWdodCwKKwkJY2FtX3JlY3QtPmxlZnQsIGNhbV9yZWN0LT50b3ApOworCisJLyogT24gc3VjY2VzcyBjYW1fY3JvcCBjb250YWlucyBjdXJyZW50IGNhbWVyYSBjcm9wICovCisKKwkvKgorCSAqIDMuIElmIG9sZCBjb21iaW5lZCBzY2FsZXMgYXBwbGllZCB0byBuZXcgY3JvcCBwcm9kdWNlIGFuIGltcG9zc2libGUKKwkgKiAgICB1c2VyIHdpbmRvdywgYWRqdXN0IHNjYWxlcyB0byBwcm9kdWNlIG5lYXJlc3QgcG9zc2libGUgd2luZG93LgorCSAqLworCW91dF93aWR0aAk9IHNjYWxlX2Rvd24ocmVjdC0+d2lkdGgsIHNjYWxlX2NvbWJfaCk7CisJb3V0X2hlaWdodAk9IHNjYWxlX2Rvd24ocmVjdC0+aGVpZ2h0LCBzY2FsZV9jb21iX3YpOworCisJaWYgKG91dF93aWR0aCA+IDI1NjApCisJCW91dF93aWR0aCA9IDI1NjA7CisJZWxzZSBpZiAob3V0X3dpZHRoIDwgMikKKwkJb3V0X3dpZHRoID0gMjsKKworCWlmIChvdXRfaGVpZ2h0ID4gMTkyMCkKKwkJb3V0X2hlaWdodCA9IDE5MjA7CisJZWxzZSBpZiAob3V0X2hlaWdodCA8IDQpCisJCW91dF9oZWlnaHQgPSA0OworCisJZGV2X2dlbyhkZXYsICIzOiBBZGp1c3RlZCBvdXRwdXQgJXV4JXVcbiIsIG91dF93aWR0aCwgb3V0X2hlaWdodCk7CisKKwkvKiA0LiBVc2UgR19DUk9QIHRvIHJldHJpZXZlIGFjdHVhbCBpbnB1dCB3aW5kb3c6IGFscmVhZHkgaW4gY2FtX2Nyb3AgKi8KKworCS8qCisJICogNS4gVXNpbmcgYWN0dWFsIGlucHV0IHdpbmRvdyBhbmQgY2FsY3VsYXRlZCBjb21iaW5lZCBzY2FsZXMgY2FsY3VsYXRlCisJICogICAgY2FtZXJhIHRhcmdldCBvdXRwdXQgd2luZG93LgorCSAqLworCXBpeC0+d2lkdGgJCT0gc2NhbGVfZG93bihjYW1fcmVjdC0+d2lkdGgsIHNjYWxlX2NvbWJfaCk7CisJcGl4LT5oZWlnaHQJCT0gc2NhbGVfZG93bihjYW1fcmVjdC0+aGVpZ2h0LCBzY2FsZV9jb21iX3YpOworCisJZGV2X2dlbyhkZXYsICI1OiBjYW1lcmEgdGFyZ2V0ICV1eCV1XG4iLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKKwkvKiA2LiAtIDkuICovCisJcGl4LT5waXhlbGZvcm1hdAk9IGNhbS0+Y2FtZXJhX2ZtdC0+Zm91cmNjOworCXBpeC0+Y29sb3JzcGFjZQkJPSBjYW0tPmNhbWVyYV9mbXQtPmNvbG9yc3BhY2U7CisKKwljYXBzciA9IGNhcHR1cmVfc2F2ZV9yZXNldChwY2Rldik7CisJZGV2X2RiZyhkZXYsICJDQVBTUiAweCV4LCBDRkxDUiAweCV4XG4iLCBjYXBzciwgcGNkZXYtPmNmbGNyKTsKKworCS8qIE1ha2UgcmVsYXRpdmUgdG8gY2FtZXJhIHJlY3RhbmdsZSAqLworCXJlY3QtPmxlZnQJCS09IGNhbV9yZWN0LT5sZWZ0OworCXJlY3QtPnRvcAkJLT0gY2FtX3JlY3QtPnRvcDsKKworCWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldCA9IGNsaWVudF9zY2FsZShpY2QsIGNhbV9yZWN0LCByZWN0LCBjZXVfcmVjdCwgJmYsCisJCQkgICBwY2Rldi0+aW1hZ2VfbW9kZSAmJiAhcGNkZXYtPmlzX2ludGVybGFjZWQpOworCisJZGV2X2dlbyhkZXYsICI2LTk6ICVkXG4iLCByZXQpOworCisJLyogMTAuIFVzZSBDRVUgY3JvcHBpbmcgdG8gY3JvcCB0byB0aGUgbmV3IHdpbmRvdy4gKi8KKwlzaF9tb2JpbGVfY2V1X3NldF9yZWN0KGljZCwgb3V0X3dpZHRoLCBvdXRfaGVpZ2h0KTsKKworCWRldl9nZW8oZGV2LCAiMTA6IENFVSBjcm9wcGVkIHRvICV1eCV1QCV1OiV1XG4iLAorCQljZXVfcmVjdC0+d2lkdGgsIGNldV9yZWN0LT5oZWlnaHQsCisJCWNldV9yZWN0LT5sZWZ0LCBjZXVfcmVjdC0+dG9wKTsKKworCS8qCisJICogMTEuIENhbGN1bGF0ZSBDRVUgc2NhbGVzIGZyb20gY2FtZXJhIHNjYWxlcyBmcm9tIHJlc3VsdHMgb2YgKDEwKSBhbmQKKwkgKiAgICAgdXNlciB3aW5kb3cgZnJvbSAoMykKKwkgKi8KKwlzY2FsZV9jZXVfaCA9IGNhbGNfc2NhbGUoY2V1X3JlY3QtPndpZHRoLCAmb3V0X3dpZHRoKTsKKwlzY2FsZV9jZXVfdiA9IGNhbGNfc2NhbGUoY2V1X3JlY3QtPmhlaWdodCwgJm91dF9oZWlnaHQpOworCisJZGV2X2dlbyhkZXYsICIxMTogQ0VVIHNjYWxlcyAldToldVxuIiwgc2NhbGVfY2V1X2gsIHNjYWxlX2NldV92KTsKKworCS8qIDEyLiBBcHBseSBDRVUgc2NhbGVzLiAqLworCWNmbGNyID0gc2NhbGVfY2V1X2ggfCAoc2NhbGVfY2V1X3YgPDwgMTYpOworCWlmIChjZmxjciAhPSBwY2Rldi0+Y2ZsY3IpIHsKKwkJcGNkZXYtPmNmbGNyID0gY2ZsY3I7CisJCWNldV93cml0ZShwY2RldiwgQ0ZMQ1IsIGNmbGNyKTsKKwl9CisKKwkvKiBSZXN0b3JlIGNhcHR1cmUgKi8KKwlpZiAocGNkZXYtPmFjdGl2ZSkKKwkJY2Fwc3IgfD0gMTsKKwljYXB0dXJlX3Jlc3RvcmUocGNkZXYsIGNhcHNyKTsKKworCWljZC0+dXNlcl93aWR0aCA9IG91dF93aWR0aDsKKwlpY2QtPnVzZXJfaGVpZ2h0ID0gb3V0X2hlaWdodDsKKworCS8qIEV2ZW4gaWYgb25seSBjYW1lcmEgY3JvcHBpbmcgc3VjY2VlZGVkICovCisJcmV0dXJuIHJldDsKK30KKworLyogU2ltaWxhciB0byBzZXRfY3JvcCBtdWx0aXN0YWdlIGl0ZXJhdGl2ZSBhbGdvcml0aG0gKi8KK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX2Zvcm1hdCBjYW1fZiA9ICpmOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhbV9waXggPSAmY2FtX2YuZm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwotCV9fdTMyIHBpeGZtdCA9IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CisJc3RydWN0IHY0bDJfY3JvcCBjYW1fY3JvcDsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpjYW1fcmVjdCA9ICZjYW1fY3JvcC5jLCBjYW1fc3VicmVjdCwgY2V1X3JlY3Q7CisJdW5zaWduZWQgaW50IHNjYWxlX2NhbV9oLCBzY2FsZV9jYW1fdjsKKwl1MTYgc2NhbGVfdiwgc2NhbGVfaDsKKwlpbnQgcmV0OworCWJvb2wgaXNfaW50ZXJsYWNlZCwgaW1hZ2VfbW9kZTsKKworCXN3aXRjaCAocGl4LT5maWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQlpc19pbnRlcmxhY2VkID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0FOWToKKwlkZWZhdWx0OgorCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQkvKiBmYWxsLXRocm91Z2ggKi8KKwljYXNlIFY0TDJfRklFTERfTk9ORToKKwkJaXNfaW50ZXJsYWNlZCA9IGZhbHNlOworCQlicmVhazsKKwl9CisKKwl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKGRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIDEuIENhbGN1bGF0ZSBjdXJyZW50IGNhbWVyYSBzY2FsZXMuICovCisJY2FtX2Nyb3AudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldCA9IGNsaWVudF9nX3JlY3Qoc2QsIGNhbV9yZWN0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdldF9jYW1lcmFfc2NhbGVzKHNkLCBjYW1fcmVjdCwgJnNjYWxlX2NhbV9oLCAmc2NhbGVfY2FtX3YpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2X2dlbyhkZXYsICIxOiBjYW1lcmEgc2NhbGVzICV1OiV1XG4iLCBzY2FsZV9jYW1faCwgc2NhbGVfY2FtX3YpOworCisJLyoKKwkgKiAyLiBDYWxjdWxhdGUgImVmZmVjdGl2ZSIgaW5wdXQgY3JvcCAoc2Vuc29yIHN1YndpbmRvdykgLSBDRVUgY3JvcAorCSAqICAgIHNjYWxlZCBiYWNrIGF0IGN1cnJlbnQgY2FtZXJhIHNjYWxlcyBvbnRvIGlucHV0IHdpbmRvdy4KKwkgKi8KKwlyZXQgPSBnZXRfY2FtZXJhX3N1YndpbihpY2QsICZjYW1fc3VicmVjdCwgc2NhbGVfY2FtX2gsIHNjYWxlX2NhbV92KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9nZW8oZGV2LCAiMjogc3Vid2luICV1eCV1QCV1OiV1XG4iLAorCQljYW1fc3VicmVjdC53aWR0aCwgY2FtX3N1YnJlY3QuaGVpZ2h0LAorCQljYW1fc3VicmVjdC5sZWZ0LCBjYW1fc3VicmVjdC50b3ApOworCisJLyoKKwkgKiAzLiBDYWxjdWxhdGUgbmV3IGNvbWJpbmVkIHNjYWxlcyBmcm9tICJlZmZlY3RpdmUiIGlucHV0IHdpbmRvdyB0bworCSAqICAgIHJlcXVlc3RlZCB1c2VyIHdpbmRvdy4KKwkgKi8KKwlzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbV9zdWJyZWN0LndpZHRoLCBwaXgtPndpZHRoKTsKKwlzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbV9zdWJyZWN0LmhlaWdodCwgcGl4LT5oZWlnaHQpOworCisJZGV2X2dlbyhkZXYsICIzOiBzY2FsZXMgJXU6JXVcbiIsIHNjYWxlX2gsIHNjYWxlX3YpOworCisJLyoKKwkgKiA0LiBDYWxjdWxhdGUgY2FtZXJhIG91dHB1dCB3aW5kb3cgYnkgYXBwbHlpbmcgY29tYmluZWQgc2NhbGVzIHRvIHJlYWwKKwkgKiAgICBpbnB1dCB3aW5kb3cuCisJICovCisJY2FtX3BpeC0+d2lkdGggPSBzY2FsZV9kb3duKGNhbV9yZWN0LT53aWR0aCwgc2NhbGVfaCk7CisJY2FtX3BpeC0+aGVpZ2h0ID0gc2NhbGVfZG93bihjYW1fcmVjdC0+aGVpZ2h0LCBzY2FsZV92KTsKKwljYW1fcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CisKKwlzd2l0Y2ggKHBpeGZtdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6CisJY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjE2OgorCWNhc2UgVjRMMl9QSVhfRk1UX05WNjE6CisJCWltYWdlX21vZGUgPSB0cnVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpbWFnZV9tb2RlID0gZmFsc2U7CisJfQorCisJZGV2X2dlbyhkZXYsICI0OiBjYW1lcmEgb3V0cHV0ICV1eCV1XG4iLAorCQljYW1fcGl4LT53aWR0aCwgY2FtX3BpeC0+aGVpZ2h0KTsKKworCS8qIDUuIC0gOS4gKi8KKwlyZXQgPSBjbGllbnRfc2NhbGUoaWNkLCBjYW1fcmVjdCwgJmNhbV9zdWJyZWN0LCAmY2V1X3JlY3QsICZjYW1fZiwKKwkJCSAgIGltYWdlX21vZGUgJiYgIWlzX2ludGVybGFjZWQpOworCisJZGV2X2dlbyhkZXYsICI1LTk6IGNsaWVudCBzY2FsZSAlZFxuIiwgcmV0KTsKKworCS8qIERvbmUgd2l0aCB0aGUgY2FtZXJhLiBOb3cgc2VlIGlmIHdlIGNhbiBpbXByb3ZlIHRoZSByZXN1bHQgKi8KKworCWRldl9kYmcoZGV2LCAiQ2FtZXJhICVkIGZtdCAldXgldSwgcmVxdWVzdGVkICV1eCV1XG4iLAorCQlyZXQsIGNhbV9waXgtPndpZHRoLCBjYW1fcGl4LT5oZWlnaHQsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIDEwLiBVc2UgQ0VVIHNjYWxpbmcgdG8gc2NhbGUgdG8gdGhlIHJlcXVlc3RlZCB1c2VyIHdpbmRvdy4gKi8KKworCS8qIFdlIGNhbm5vdCBzY2FsZSB1cCAqLworCWlmIChwaXgtPndpZHRoID4gY2FtX3BpeC0+d2lkdGgpCisJCXBpeC0+d2lkdGggPSBjYW1fcGl4LT53aWR0aDsKKwlpZiAocGl4LT53aWR0aCA+IGNldV9yZWN0LndpZHRoKQorCQlwaXgtPndpZHRoID0gY2V1X3JlY3Qud2lkdGg7CisKKwlpZiAocGl4LT5oZWlnaHQgPiBjYW1fcGl4LT5oZWlnaHQpCisJCXBpeC0+aGVpZ2h0ID0gY2FtX3BpeC0+aGVpZ2h0OworCWlmIChwaXgtPmhlaWdodCA+IGNldV9yZWN0LmhlaWdodCkKKwkJcGl4LT5oZWlnaHQgPSBjZXVfcmVjdC5oZWlnaHQ7CisKKwkvKiBMZXQncyByb2NrOiBzY2FsZSBwaXgtPnt3aWR0aCB4IGhlaWdodH0gZG93biB0byB3aWR0aCB4IGhlaWdodCAqLworCXNjYWxlX2ggPSBjYWxjX3NjYWxlKGNldV9yZWN0LndpZHRoLCAmcGl4LT53aWR0aCk7CisJc2NhbGVfdiA9IGNhbGNfc2NhbGUoY2V1X3JlY3QuaGVpZ2h0LCAmcGl4LT5oZWlnaHQpOworCisJZGV2X2dlbyhkZXYsICIxMDogVzogJXUgOiAweCV4ID0gJXUsIEg6ICV1IDogMHgleCA9ICV1XG4iLAorCQljZXVfcmVjdC53aWR0aCwgc2NhbGVfaCwgcGl4LT53aWR0aCwKKwkJY2V1X3JlY3QuaGVpZ2h0LCBzY2FsZV92LCBwaXgtPmhlaWdodCk7CisKKwlwY2Rldi0+Y2ZsY3IgPSBzY2FsZV9oIHwgKHNjYWxlX3YgPDwgMTYpOworCisJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKKwlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OworCWNhbS0+Y2FtZXJhX2ZtdCA9IHhsYXRlLT5jYW1fZm10OworCWNhbS0+Y2V1X3JlY3QgPSBjZXVfcmVjdDsKKworCXBjZGV2LT5pc19pbnRlcmxhY2VkID0gaXNfaW50ZXJsYWNlZDsKKwlwY2Rldi0+aW1hZ2VfbW9kZSA9IGltYWdlX21vZGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCV9fdTMyIHBpeGZtdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJaW50IHdpZHRoLCBoZWlnaHQ7CiAJaW50IHJldDsKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwogCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOworCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBGSVhNRTogY2FsY3VsYXRlIHVzaW5nIGRlcHRoIGFuZCBidXMgd2lkdGggKi8KIAotCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmZi0+Zm10LnBpeC53aWR0aCwgMiwgMjU2MCwgMSwKLQkJCSAgICAgICZmLT5mbXQucGl4LmhlaWdodCwgNCwgMTkyMCwgMiwgMCk7CisJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZwaXgtPndpZHRoLCAyLCAyNTYwLCAxLAorCQkJICAgICAgJnBpeC0+aGVpZ2h0LCA0LCAxOTIwLCAyLCAwKTsKIAotCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gZi0+Zm10LnBpeC53aWR0aCAqCisJd2lkdGggPSBwaXgtPndpZHRoOworCWhlaWdodCA9IHBpeC0+aGVpZ2h0OworCisJcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICoKIAkJRElWX1JPVU5EX1VQKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgsIDgpOwotCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKKwlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogcGl4LT5ieXRlc3BlcmxpbmU7CisKKwlwaXgtPnBpeGVsZm9ybWF0ID0geGxhdGUtPmNhbV9mbXQtPmZvdXJjYzsKIAogCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KLQlyZXQgPSBpY2QtPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfZm10LCBmKTsKKwlwaXgtPnBpeGVsZm9ybWF0ID0gcGl4Zm10OwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0Jc3dpdGNoIChmLT5mbXQucGl4LmZpZWxkKSB7Ci0JY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCXBjZGV2LT5pc19pbnRlcmxhY2VkID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0ZJRUxEX0FOWToKLQkJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQkJLyogZmFsbC10aHJvdWdoICovCi0JY2FzZSBWNEwyX0ZJRUxEX05PTkU6Ci0JCXBjZGV2LT5pc19pbnRlcmxhY2VkID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7CisJc3dpdGNoIChwaXhmbXQpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgorCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6CisJY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjoKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgorCQkvKiBGSVhNRTogY2hlY2sgYWdhaW5zdCByZWN0X21heCBhZnRlciBjb252ZXJ0aW5nIHNvYy1jYW1lcmEgKi8KKwkJLyogV2UgY2FuIHNjYWxlIHByZWNpc2VseSwgbmVlZCBhIGJpZ2dlciBpbWFnZSBmcm9tIGNhbWVyYSAqLworCQlpZiAocGl4LT53aWR0aCA8IHdpZHRoIHx8IHBpeC0+aGVpZ2h0IDwgaGVpZ2h0KSB7CisJCQlpbnQgdG1wX3cgPSBwaXgtPndpZHRoLCB0bXBfaCA9IHBpeC0+aGVpZ2h0OworCQkJcGl4LT53aWR0aCA9IDI1NjA7CisJCQlwaXgtPmhlaWdodCA9IDE5MjA7CisJCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X2ZtdCwgZik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCS8qIFNob3VsZG4ndCBhY3R1YWxseSBoYXBwZW4uLi4gKi8KKwkJCQlkZXZfZXJyKGljZC0+ZGV2LnBhcmVudCwKKwkJCQkJIkZJWE1FOiB0cnlfZm10KCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCQkJcGl4LT53aWR0aCA9IHRtcF93OworCQkJCXBpeC0+aGVpZ2h0ID0gdG1wX2g7CisJCQl9CisJCX0KKwkJaWYgKHBpeC0+d2lkdGggPiB3aWR0aCkKKwkJCXBpeC0+d2lkdGggPSB3aWR0aDsKKwkJaWYgKHBpeC0+aGVpZ2h0ID4gaGVpZ2h0KQorCQkJcGl4LT5oZWlnaHQgPSBoZWlnaHQ7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTc2OSw3ICsxNTY2LDcgQEAKIAogCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLAogCQkJCSAgICAgICAmc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9vcHMsCi0JCQkJICAgICAgIGljaS0+ZGV2LCAmcGNkZXYtPmxvY2ssCisJCQkJICAgICAgIGljZC0+ZGV2LnBhcmVudCwgJnBjZGV2LT5sb2NrLAogCQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCiAJCQkJICAgICAgIHBjZGV2LT5pc19pbnRlcmxhY2VkID8KIAkJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIDogVjRMMl9GSUVMRF9OT05FLApAQCAtNzc3LDIyICsxNTc0LDc2IEBACiAJCQkJICAgICAgIGljZCk7CiB9CiAKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9nZXRfY3RybChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwl1MzIgdmFsOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgorCQl2YWwgPSBjZXVfcmVhZChwY2RldiwgQ0xGQ1IpOworCQljdHJsLT52YWx1ZSA9IHZhbCBeIDE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2N0cmwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCXN3aXRjaCAoaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjKSB7CisJCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6CisJCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6CisJCWNhc2UgVjRMMl9QSVhfRk1UX05WMTY6CisJCWNhc2UgVjRMMl9QSVhfRk1UX05WNjE6CisJCQljZXVfd3JpdGUocGNkZXYsIENMRkNSLCAhY3RybC0+dmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgc2hfbW9iaWxlX2NldV9jb250cm9sc1tdID0geworCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkxvdy1wYXNzIGZpbHRlciIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0X29wcyBzaF9tb2JpbGVfY2V1X2hvc3Rfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuYWRkCQk9IHNoX21vYmlsZV9jZXVfYWRkX2RldmljZSwKIAkucmVtb3ZlCQk9IHNoX21vYmlsZV9jZXVfcmVtb3ZlX2RldmljZSwKIAkuZ2V0X2Zvcm1hdHMJPSBzaF9tb2JpbGVfY2V1X2dldF9mb3JtYXRzLAorCS5wdXRfZm9ybWF0cwk9IHNoX21vYmlsZV9jZXVfcHV0X2Zvcm1hdHMsCiAJLnNldF9jcm9wCT0gc2hfbW9iaWxlX2NldV9zZXRfY3JvcCwKIAkuc2V0X2ZtdAk9IHNoX21vYmlsZV9jZXVfc2V0X2ZtdCwKIAkudHJ5X2ZtdAk9IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdCwKKwkuc2V0X2N0cmwJPSBzaF9tb2JpbGVfY2V1X3NldF9jdHJsLAorCS5nZXRfY3RybAk9IHNoX21vYmlsZV9jZXVfZ2V0X2N0cmwsCiAJLnJlcWJ1ZnMJPSBzaF9tb2JpbGVfY2V1X3JlcWJ1ZnMsCiAJLnBvbGwJCT0gc2hfbW9iaWxlX2NldV9wb2xsLAogCS5xdWVyeWNhcAk9IHNoX21vYmlsZV9jZXVfcXVlcnljYXAsCiAJLnNldF9idXNfcGFyYW0JPSBzaF9tb2JpbGVfY2V1X3NldF9idXNfcGFyYW0sCiAJLmluaXRfdmlkZW9idWYJPSBzaF9tb2JpbGVfY2V1X2luaXRfdmlkZW9idWYsCisJLmNvbnRyb2xzCT0gc2hfbW9iaWxlX2NldV9jb250cm9scywKKwkubnVtX2NvbnRyb2xzCT0gQVJSQVlfU0laRShzaF9tb2JpbGVfY2V1X2NvbnRyb2xzKSwKIH07CiAKLXN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2hfbW9iaWxlX2NldV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC04NjUsNyArMTcxNiw3IEBACiAJcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CiAKIAlwY2Rldi0+aWNpLnByaXYgPSBwY2RldjsKLQlwY2Rldi0+aWNpLmRldiA9ICZwZGV2LT5kZXY7CisJcGNkZXYtPmljaS52NGwyX2Rldi5kZXYgPSAmcGRldi0+ZGV2OwogCXBjZGV2LT5pY2kubnIgPSBwZGV2LT5pZDsKIAlwY2Rldi0+aWNpLmRydl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJcGNkZXYtPmljaS5vcHMgPSAmc2hfbW9iaWxlX2NldV9ob3N0X29wczsKQEAgLTg4OSw3ICsxNzQwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzaF9tb2JpbGVfY2V1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKnNvY19ob3N0ID0gdG9fc29jX2NhbWVyYV9ob3N0KCZwZGV2LT5kZXYpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBjb250YWluZXJfb2Yoc29jX2hvc3QsCkBAIC05MjcsNyArMTc3OCw3IEBACiAJCS5wbQk9ICZzaF9tb2JpbGVfY2V1X2Rldl9wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gc2hfbW9iaWxlX2NldV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNoX21vYmlsZV9jZXVfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19leGl0X3Aoc2hfbW9iaWxlX2NldV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2hfbW9iaWxlX2NldV9pbml0KHZvaWQpCkBAIC05NDYsMyArMTc5Nyw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWFnbnVzIERhbW0iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2hfbW9iaWxlX2NldSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCmluZGV4IDIzZWRmZGMuLjlkODRjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKQEAgLTE5NTQsOCArMTk1NCwxMCBAQAogCQkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAogCQkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8CiAJCQkJICAgIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpLAotCQkJCSAgICBjYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ICoKLQkJCQkgICAgMTAwMCAqIG1zZWNzX3RvX2ppZmZpZXMoMSkgKTsKKwkJCQkgICAgbXNlY3NfdG9famlmZmllcygKKwkJCQkJY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqIDEwMDAKKwkJCQkgICAgKQorCQkJCSAgKTsKIAkJCWlmICh0aW1lb3V0IDwgMCkgewogCQkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJCXJldHVybiB0aW1lb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA5ZjVhZTgxLi41OWFhN2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtMjEsMTUgKzIxLDE1IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgogCiAvKiBEZWZhdWx0IHRvIFZHQSByZXNvbHV0aW9uICovCkBAIC0zOCw3ICszOCw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoaG9zdHMpOwogc3RhdGljIExJU1RfSEVBRChkZXZpY2VzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgobGlzdF9sb2NrKTsJCS8qIFByb3RlY3RzIHRoZSBsaXN0IG9mIGhvc3RzICovCiAKIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpzb2NfY2FtZXJhX2Zvcm1hdF9ieV9mb3VyY2MoCiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGludCBmb3VyY2MpCkBAIC0xNTIsMTIgKzE1Miw5IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAKLQlpZiAoaWNkLT5vcHMtPnNldF9zdGQpCi0JCXJldCA9IGljZC0+b3BzLT5zZXRfc3RkKGljZCwgYSk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3N0ZCwgKmEpOwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTE3MCw4ICsxNjcsNiBAQAogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzOiAlZFxuIiwgX19mdW5jX18sIHAtPm1lbW9yeSk7Ci0KIAlyZXQgPSB2aWRlb2J1Zl9yZXFidWZzKCZpY2YtPnZiX3ZpZHEsIHApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMjA5LDEwICsyMDQsMTEgQEAKIAlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmljZi0+dmJfdmlkcSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCisvKiBBbHdheXMgZW50ZXJlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9pbml0X3VzZXJfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQlpbnQgaSwgZm10cyA9IDA7CisJaW50IGksIGZtdHMgPSAwLCByZXQ7CiAKIAlpZiAoIWljaS0+b3BzLT5nZXRfZm9ybWF0cykKIAkJLyoKQEAgLTIyNSw4ICsyMjEsMTIgQEAKIAkJICogRmlyc3QgcGFzcyAtIG9ubHkgY291bnQgZm9ybWF0cyB0aGlzIGhvc3Qtc2Vuc29yCiAJCSAqIGNvbmZpZ3VyYXRpb24gY2FuIHByb3ZpZGUKIAkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBpY2QtPm51bV9mb3JtYXRzOyBpKyspCi0JCQlmbXRzICs9IGljaS0+b3BzLT5nZXRfZm9ybWF0cyhpY2QsIGksIE5VTEwpOworCQlmb3IgKGkgPSAwOyBpIDwgaWNkLT5udW1fZm9ybWF0czsgaSsrKSB7CisJCQlyZXQgPSBpY2ktPm9wcy0+Z2V0X2Zvcm1hdHMoaWNkLCBpLCBOVUxMKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlmbXRzICs9IHJldDsKKwkJfQogCiAJaWYgKCFmbXRzKQogCQlyZXR1cm4gLUVOWElPOwpAQCAtMjQ4LDIwICsyNDgsMzkgQEAKIAkJCWljZC0+dXNlcl9mb3JtYXRzW2ldLmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpOwogCQkJaWNkLT51c2VyX2Zvcm1hdHNbaV0uYnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaV0uZGVwdGg7CiAJCX0gZWxzZSB7Ci0JCQlmbXRzICs9IGljaS0+b3BzLT5nZXRfZm9ybWF0cyhpY2QsIGksCi0JCQkJCQkgICAgICAmaWNkLT51c2VyX2Zvcm1hdHNbZm10c10pOworCQkJcmV0ID0gaWNpLT5vcHMtPmdldF9mb3JtYXRzKGljZCwgaSwKKwkJCQkJCSAgICAmaWNkLT51c2VyX2Zvcm1hdHNbZm10c10pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlZ2ZtdDsKKwkJCWZtdHMgKz0gcmV0OwogCQl9CiAKIAlpY2QtPmN1cnJlbnRfZm10ID0gaWNkLT51c2VyX2Zvcm1hdHNbMF0uaG9zdF9mbXQ7CiAKIAlyZXR1cm4gMDsKKworZWdmbXQ6CisJaWNkLT5udW1fdXNlcl9mb3JtYXRzID0gMDsKKwl2ZnJlZShpY2QtPnVzZXJfZm9ybWF0cyk7CisJcmV0dXJuIHJldDsKIH0KIAorLyogQWx3YXlzIGVudGVyZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCiBzdGF0aWMgdm9pZCBzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogeworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCisJaWYgKGljaS0+b3BzLT5wdXRfZm9ybWF0cykKKwkJaWNpLT5vcHMtPnB1dF9mb3JtYXRzKGljZCk7CisJaWNkLT5jdXJyZW50X2ZtdCA9IE5VTEw7CisJaWNkLT5udW1fdXNlcl9mb3JtYXRzID0gMDsKIAl2ZnJlZShpY2QtPnVzZXJfZm9ybWF0cyk7CisJaWNkLT51c2VyX2Zvcm1hdHMgPSBOVUxMOwogfQogCisjZGVmaW5lIHBpeGZtdHN0cih4KSAoeCkgJiAweGZmLCAoKHgpID4+IDgpICYgMHhmZiwgKCh4KSA+PiAxNikgJiAweGZmLCBcCisJKCh4KSA+PiAyNCkgJiAweGZmCisKIC8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKQEAgLTI3MSw2ICsyOTAsOSBAQAogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCWludCByZXQ7CiAKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlNfRk1UKCVjJWMlYyVjLCAldXgldSlcbiIsCisJCXBpeGZtdHN0cihwaXgtPnBpeGVsZm9ybWF0KSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCiAJLyogV2UgYWx3YXlzIGNhbGwgdHJ5X2ZtdCgpIGJlZm9yZSBzZXRfZm10KCkgb3Igc2V0X2Nyb3AoKSAqLwogCXJldCA9IGljaS0+b3BzLT50cnlfZm10KGljZCwgZik7CiAJaWYgKHJldCA8IDApCkBAIC0yODEsMTMgKzMwMywxMyBAQAogCQlyZXR1cm4gcmV0OwogCX0gZWxzZSBpZiAoIWljZC0+Y3VycmVudF9mbXQgfHwKIAkJICAgaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjICE9IHBpeC0+cGl4ZWxmb3JtYXQpIHsKLQkJZGV2X2VycihpY2ktPmRldiwKKwkJZGV2X2VycigmaWNkLT5kZXYsCiAJCQkiSG9zdCBkcml2ZXIgaGFzbid0IHNldCB1cCBjdXJyZW50IGZvcm1hdCBjb3JyZWN0bHkhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWNkLT53aWR0aAkJPSBwaXgtPndpZHRoOwotCWljZC0+aGVpZ2h0CQk9IHBpeC0+aGVpZ2h0OworCWljZC0+dXNlcl93aWR0aAkJPSBwaXgtPndpZHRoOworCWljZC0+dXNlcl9oZWlnaHQJPSBwaXgtPmhlaWdodDsKIAlpY2YtPnZiX3ZpZHEuZmllbGQJPQogCQlpY2QtPmZpZWxkCT0gcGl4LT5maWVsZDsKIApAQCAtMjk2LDcgKzMxOCw3IEBACiAJCQkgZi0+dHlwZSk7CiAKIAlkZXZfZGJnKCZpY2QtPmRldiwgInNldCB3aWR0aDogJWQgaGVpZ2h0OiAlZFxuIiwKLQkJaWNkLT53aWR0aCwgaWNkLT5oZWlnaHQpOworCQlpY2QtPnVzZXJfd2lkdGgsIGljZC0+dXNlcl9oZWlnaHQpOwogCiAJLyogc2V0IHBoeXNpY2FsIGJ1cyBwYXJhbWV0ZXJzICovCiAJcmV0dXJuIGljaS0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CkBAIC0zMDQsMzggKzMyNiwzNSBAQAogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY29udGFpbmVyX29mKHZkZXYtPnBhcmVudCwKKwkJCQkJCSAgICAgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlLAorCQkJCQkJICAgICBkZXYpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2Y7CiAJaW50IHJldDsKIAorCWlmICghaWNkLT5vcHMpCisJCS8qIE5vIGRldmljZSBkcml2ZXIgYXR0YWNoZWQgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwogCWljZiA9IHZtYWxsb2Moc2l6ZW9mKCppY2YpKTsKIAlpZiAoIWljZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKgotCSAqIEl0IGlzIHNhZmUgdG8gZGVyZWZlcmVuY2UgdGhlc2UgcG9pbnRlcnMgbm93IGFzIGxvbmcgYXMgYSB1c2VyIGhhcwotCSAqIHRoZSB2aWRlbyBkZXZpY2Ugb3BlbiAtIHdlIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIGhlbGQgY2RldiByZWZlcmVuY2UuCi0JICovCi0KLQl2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlpY2QgPSBjb250YWluZXJfb2YodmRldi0+cGFyZW50LCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UsIGRldik7Ci0JaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGljZC0+b3BzLT5vd25lcikpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJDb3VsZG4ndCBsb2NrIHNlbnNvciBkcml2ZXIuXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlbWdkOwotCX0KLQogCWlmICghdHJ5X21vZHVsZV9nZXQoaWNpLT5vcHMtPm93bmVyKSkgewogCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGxvY2sgY2FwdHVyZSBidXMgZHJpdmVyLlxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZW1naTsKIAl9CiAKLQkvKiBQcm90ZWN0IGFnYWluc3QgaWNkLT5yZW1vdmUoKSB1bnRpbCB3ZSBtb2R1bGVfZ2V0KCkgYm90aCBkcml2ZXJzLiAqLworCS8qCisJICogUHJvdGVjdCBhZ2FpbnN0IGljZC0+b3BzLT5yZW1vdmUoKSB1bnRpbCB3ZSBtb2R1bGVfZ2V0KCkgYm90aAorCSAqIGRyaXZlcnMuCisJICovCiAJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAogCWljZi0+aWNkID0gaWNkOwpAQCAtMzQ3LDE0ICszNjYsMjQgQEAKIAkJc3RydWN0IHY0bDJfZm9ybWF0IGYgPSB7CiAJCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCS5mbXQucGl4ID0gewotCQkJCS53aWR0aAkJPSBpY2QtPndpZHRoLAotCQkJCS5oZWlnaHQJCT0gaWNkLT5oZWlnaHQsCisJCQkJLndpZHRoCQk9IGljZC0+dXNlcl93aWR0aCwKKwkJCQkuaGVpZ2h0CQk9IGljZC0+dXNlcl9oZWlnaHQsCiAJCQkJLmZpZWxkCQk9IGljZC0+ZmllbGQsCiAJCQkJLnBpeGVsZm9ybWF0CT0gaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjLAogCQkJCS5jb2xvcnNwYWNlCT0gaWNkLT5jdXJyZW50X2ZtdC0+Y29sb3JzcGFjZSwKIAkJCX0sCiAJCX07CiAKKwkJaWYgKGljbC0+cG93ZXIpIHsKKwkJCXJldCA9IGljbC0+cG93ZXIoaWNkLT5wZGV2LCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZXBvd2VyOworCQl9CisKKwkJLyogVGhlIGNhbWVyYSBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBvbiwgdHJ5IHRvIHJlc2V0ICovCisJCWlmIChpY2wtPnJlc2V0KQorCQkJaWNsLT5yZXNldChpY2QtPnBkZXYpOworCiAJCXJldCA9IGljaS0+b3BzLT5hZGQoaWNkKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ291bGRuJ3QgYWN0aXZhdGUgdGhlIGNhbWVyYTogJWRcbiIsIHJldCk7CkBAIC0zNjcsMjggKzM5NiwyOSBAQAogCQkJZ290byBlc2ZtdDsKIAl9CiAKLQltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7Ci0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBpY2Y7CiAJZGV2X2RiZygmaWNkLT5kZXYsICJjYW1lcmEgZGV2aWNlIG9wZW5cbiIpOwogCiAJaWNpLT5vcHMtPmluaXRfdmlkZW9idWYoJmljZi0+dmJfdmlkcSwgaWNkKTsKIAorCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKKwogCXJldHVybiAwOwogCiAJLyoKLQkgKiBGaXJzdCB0aHJlZSBlcnJvcnMgYXJlIGVudGVyZWQgd2l0aCB0aGUgLnZpZGVvX2xvY2sgaGVsZAorCSAqIEZpcnN0IGZpdmUgZXJyb3JzIGFyZSBlbnRlcmVkIHdpdGggdGhlIC52aWRlb19sb2NrIGhlbGQKIAkgKiBhbmQgdXNlX2NvdW50ID09IDEKIAkgKi8KIGVzZm10OgogCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIGVpY2lhZGQ6CisJaWYgKGljbC0+cG93ZXIpCisJCWljbC0+cG93ZXIoaWNkLT5wZGV2LCAwKTsKK2Vwb3dlcjoKIAlpY2QtPnVzZV9jb3VudC0tOwogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAltb2R1bGVfcHV0KGljaS0+b3BzLT5vd25lcik7CiBlbWdpOgotCW1vZHVsZV9wdXQoaWNkLT5vcHMtPm93bmVyKTsKLWVtZ2Q6CiAJdmZyZWUoaWNmKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzk4LDIxICs0MjgsMjQgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaWNkLT52ZGV2OwogCiAJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAlpY2QtPnVzZV9jb3VudC0tOwotCWlmICghaWNkLT51c2VfY291bnQpCisJaWYgKCFpY2QtPnVzZV9jb3VudCkgeworCQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwogCQlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7CisJCWlmIChpY2wtPnBvd2VyKQorCQkJaWNsLT5wb3dlcihpY2QtPnBkZXYsIDApOworCX0KIAogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAotCW1vZHVsZV9wdXQoaWNkLT5vcHMtPm93bmVyKTsKIAltb2R1bGVfcHV0KGljaS0+b3BzLT5vd25lcik7CiAKIAl2ZnJlZShpY2YpOwogCi0JZGV2X2RiZyh2ZGV2LT5wYXJlbnQsICJjYW1lcmEgZGV2aWNlIGNsb3NlXG4iKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgImNhbWVyYSBkZXZpY2UgY2xvc2VcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MjIsMTAgKzQ1NSw5IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGljZC0+dmRldjsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAotCWRldl9lcnIodmRldi0+cGFyZW50LCAiY2FtZXJhIGRldmljZSByZWFkIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJZGV2X2VycigmaWNkLT5kZXYsICJjYW1lcmEgZGV2aWNlIHJlYWQgbm90IGltcGxlbWVudGVkXG4iKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC00ODMsOCArNTE1LDggQEAKIAogCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKIAotCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZpY2YtPnZiX3ZpZHEpKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiU19GTVQgZGVuaWVkOiBxdWV1ZSBidXN5XG4iKTsKKwlpZiAoaWNmLT52Yl92aWRxLmJ1ZnNbMF0pIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJTX0ZNVCBkZW5pZWQ6IHF1ZXVlIGluaXRpYWxpc2VkXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIHVubG9jazsKIAl9CkBAIC01MjUsOCArNTU3LDggQEAKIAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCi0JcGl4LT53aWR0aAkJPSBpY2QtPndpZHRoOwotCXBpeC0+aGVpZ2h0CQk9IGljZC0+aGVpZ2h0OworCXBpeC0+d2lkdGgJCT0gaWNkLT51c2VyX3dpZHRoOworCXBpeC0+aGVpZ2h0CQk9IGljZC0+dXNlcl9oZWlnaHQ7CiAJcGl4LT5maWVsZAkJPSBpY2YtPnZiX3ZpZHEuZmllbGQ7CiAJcGl4LT5waXhlbGZvcm1hdAk9IGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYzsKIAlwaXgtPmJ5dGVzcGVybGluZQk9IHBpeC0+d2lkdGggKgpAQCAtNTU1LDE4ICs1ODcsMTcgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlpZiAoaSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAotCWljZC0+b3BzLT5zdGFydF9jYXB0dXJlKGljZCk7CisJdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAogCS8qIFRoaXMgY2FsbHMgYnVmX3F1ZXVlIGZyb20gaG9zdCBkcml2ZXIncyB2aWRlb2J1Zl9xdWV1ZV9vcHMgKi8KIAlyZXQgPSB2aWRlb2J1Zl9zdHJlYW1vbigmaWNmLT52Yl92aWRxKTsKQEAgLTU4MSwxMSArNjEyLDEwIEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQogCWlmIChpICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU5NSw3ICs2MjUsNyBAQAogCSAqIHJlbWFpbmluZyBidWZmZXJzLiBXaGVuIHRoZSBsYXN0IGJ1ZmZlciBpcyBmcmVlZCwgc3RvcCBjYXB0dXJlICovCiAJdmlkZW9idWZfc3RyZWFtb2ZmKCZpY2YtPnZiX3ZpZHEpOwogCi0JaWNkLT5vcHMtPnN0b3BfY2FwdHVyZShpY2QpOworCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAKIAltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CiAKQEAgLTYwNyw2ICs2MzcsNyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCWludCBpOwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CkBAIC02MTQsNiArNjQ1LDE1IEBACiAJaWYgKCFxYy0+aWQpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogRmlyc3QgY2hlY2sgaG9zdCBjb250cm9scyAqLworCWZvciAoaSA9IDA7IGkgPCBpY2ktPm9wcy0+bnVtX2NvbnRyb2xzOyBpKyspCisJCWlmIChxYy0+aWQgPT0gaWNpLT5vcHMtPmNvbnRyb2xzW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYoaWNpLT5vcHMtPmNvbnRyb2xzW2ldKSwKKwkJCQlzaXplb2YoKnFjKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJLyogVGhlbiBkZXZpY2UgY29udHJvbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaWNkLT5vcHMtPm51bV9jb250cm9sczsgaSsrKQogCQlpZiAocWMtPmlkID09IGljZC0+b3BzLT5jb250cm9sc1tpXS5pZCkgewogCQkJbWVtY3B5KHFjLCAmKGljZC0+b3BzLT5jb250cm9sc1tpXSksCkBAIC02MjksMjUgKzY2OSwxOSBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCWludCByZXQ7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0dBSU46Ci0JCWlmIChpY2QtPmdhaW4gPT0gKHVuc2lnbmVkIHNob3J0KX4wKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWN0cmwtPnZhbHVlID0gaWNkLT5nYWluOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgotCQlpZiAoaWNkLT5leHBvc3VyZSA9PSAodW5zaWduZWQgc2hvcnQpfjApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3RybC0+dmFsdWUgPSBpY2QtPmV4cG9zdXJlOwotCQlyZXR1cm4gMDsKKwlpZiAoaWNpLT5vcHMtPmdldF9jdHJsKSB7CisJCXJldCA9IGljaS0+b3BzLT5nZXRfY3RybChpY2QsIGN0cmwpOworCQlpZiAocmV0ICE9IC1FTk9JT0NUTENNRCkKKwkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGljZC0+b3BzLT5nZXRfY29udHJvbCkKLQkJcmV0dXJuIGljZC0+b3BzLT5nZXRfY29udHJvbChpY2QsIGN0cmwpOwotCXJldHVybiAtRUlOVkFMOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX2N0cmwsIGN0cmwpOwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtNjU1LDEyICs2ODksMTkgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlpbnQgcmV0OwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlpZiAoaWNkLT5vcHMtPnNldF9jb250cm9sKQotCQlyZXR1cm4gaWNkLT5vcHMtPnNldF9jb250cm9sKGljZCwgY3RybCk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKGljaS0+b3BzLT5zZXRfY3RybCkgeworCQlyZXQgPSBpY2ktPm9wcy0+c2V0X2N0cmwoaWNkLCBjdHJsKTsKKwkJaWYgKHJldCAhPSAtRU5PSU9DVExDTUQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX2N0cmwsIGN0cmwpOwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCkBAIC02NjgsMjAgKzcwOSw5IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAKLQlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWEtPmJvdW5kcy5sZWZ0CQkJPSBpY2QtPnhfbWluOwotCWEtPmJvdW5kcy50b3AJCQk9IGljZC0+eV9taW47Ci0JYS0+Ym91bmRzLndpZHRoCQkJPSBpY2QtPndpZHRoX21heDsKLQlhLT5ib3VuZHMuaGVpZ2h0CQk9IGljZC0+aGVpZ2h0X21heDsKLQlhLT5kZWZyZWN0LmxlZnQJCQk9IGljZC0+eF9taW47Ci0JYS0+ZGVmcmVjdC50b3AJCQk9IGljZC0+eV9taW47Ci0JYS0+ZGVmcmVjdC53aWR0aAkJPSBERUZBVUxUX1dJRFRIOwotCWEtPmRlZnJlY3QuaGVpZ2h0CQk9IERFRkFVTFRfSEVJR0hUOwotCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7Ci0JYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGljaS0+b3BzLT5jcm9wY2FwKGljZCwgYSk7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtNjg5LDM2ICs3MTksNTMgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlpbnQgcmV0OwogCi0JYS0+dHlwZQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JYS0+Yy5sZWZ0CT0gaWNkLT54X2N1cnJlbnQ7Ci0JYS0+Yy50b3AJPSBpY2QtPnlfY3VycmVudDsKLQlhLT5jLndpZHRoCT0gaWNkLT53aWR0aDsKLQlhLT5jLmhlaWdodAk9IGljZC0+aGVpZ2h0OworCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKKwlyZXQgPSBpY2ktPm9wcy0+Z2V0X2Nyb3AoaWNkLCBhKTsKKwltdXRleF91bmxvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBBY2NvcmRpbmcgdG8gdGhlIFY0TDIgQVBJLCBkcml2ZXJzIHNoYWxsIG5vdCB1cGRhdGUgdGhlIHN0cnVjdCB2NGwyX2Nyb3AKKyAqIGFyZ3VtZW50IHdpdGggdGhlIGFjdHVhbCBnZW9tZXRyeSwgaW5zdGVhZCwgdGhlIHVzZXIgc2hhbGwgdXNlIEdfQ1JPUCB0bworICogcmV0cmlldmUgaXQuIEhvd2V2ZXIsIHdlIGV4cGVjdCBjYW1lcmEgaG9zdCBhbmQgY2xpZW50IGRyaXZlcnMgdG8gdXBkYXRlCisgKiB0aGUgYXJndW1lbnQsIHdoaWNoIHdlIHRoZW4gdXNlIGludGVybmFsbHksIGJ1dCBkbyBub3QgcmV0dXJuIHRvIHRoZSB1c2VyLgorICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCSAgICAgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmEtPmM7CisJc3RydWN0IHY0bDJfY3JvcCBjdXJyZW50X2Nyb3A7CiAJaW50IHJldDsKIAogCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlNfQ1JPUCgldXgldUAldToldSlcbiIsCisJCXJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CisKIAkvKiBDcm9wcGluZyBpcyBhbGxvd2VkIGR1cmluZyBhIHJ1bm5pbmcgY2FwdHVyZSwgZ3VhcmQgY29uc2lzdGVuY3kgKi8KIAltdXRleF9sb2NrKCZpY2YtPnZiX3ZpZHEudmJfbG9jayk7CiAKLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2Nyb3AoaWNkLCAmYS0+Yyk7Ci0JaWYgKCFyZXQpIHsKLQkJaWNkLT53aWR0aAk9IGEtPmMud2lkdGg7Ci0JCWljZC0+aGVpZ2h0CT0gYS0+Yy5oZWlnaHQ7Ci0JCWljZC0+eF9jdXJyZW50CT0gYS0+Yy5sZWZ0OwotCQlpY2QtPnlfY3VycmVudAk9IGEtPmMudG9wOworCS8qIElmIGdldF9jcm9wIGZhaWxzLCB3ZSdsbCBsZXQgaG9zdCBhbmQgLyBvciBjbGllbnQgZHJpdmVycyBkZWNpZGUgKi8KKwlyZXQgPSBpY2ktPm9wcy0+Z2V0X2Nyb3AoaWNkLCAmY3VycmVudF9jcm9wKTsKKworCS8qIFByb2hpYml0IHdpbmRvdyBzaXplIGNoYW5nZSB3aXRoIGluaXRpYWxpc2VkIGJ1ZmZlcnMgKi8KKwlpZiAoaWNmLT52Yl92aWRxLmJ1ZnNbMF0gJiYgIXJldCAmJgorCSAgICAoYS0+Yy53aWR0aCAhPSBjdXJyZW50X2Nyb3AuYy53aWR0aCB8fAorCSAgICAgYS0+Yy5oZWlnaHQgIT0gY3VycmVudF9jcm9wLmMuaGVpZ2h0KSkgeworCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJCSJTX0NST1AgZGVuaWVkOiBxdWV1ZSBpbml0aWFsaXNlZCBhbmQgc2l6ZXMgZGlmZmVyXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCX0gZWxzZSB7CisJCXJldCA9IGljaS0+b3BzLT5zZXRfY3JvcChpY2QsIGEpOwogCX0KIAogCW11dGV4X3VubG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOwpAQCAtNzMxLDExICs3NzgsOSBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCi0JaWYgKCFpY2QtPm9wcy0+Z2V0X2NoaXBfaWQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGljZC0+b3BzLT5nZXRfY2hpcF9pZChpY2QsIGlkKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgZ19jaGlwX2lkZW50LCBpZCk7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCkBAIC03NDQsMTEgKzc4OSw5IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAKLQlpZiAoIWljZC0+b3BzLT5nZXRfcmVnaXN0ZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGljZC0+b3BzLT5nZXRfcmVnaXN0ZXIoaWNkLCByZWcpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCkBAIC03NTYsMzcgKzc5OSwxMiBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCi0JaWYgKCFpY2QtPm9wcy0+c2V0X3JlZ2lzdGVyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBpY2QtPm9wcy0+c2V0X3JlZ2lzdGVyKGljZCwgcmVnKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGRldmljZV9yZWdpc3Rlcl9saW5rKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCWludCByZXQgPSBkZXZfc2V0X25hbWUoJmljZC0+ZGV2LCAiJXUtJXUiLCBpY2QtPmlmYWNlLCBpY2QtPmRldm51bSk7Ci0KLQlpZiAoIXJldCkKLQkJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZpY2QtPmRldik7Ci0KLQlpZiAocmV0IDwgMCkgewotCQkvKiBQcmV2ZW50IGNhbGxpbmcgZGV2aWNlX3VucmVnaXN0ZXIoKSAqLwotCQlpY2QtPmRldi5wYXJlbnQgPSBOVUxMOwotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNhbm5vdCByZWdpc3RlciBkZXZpY2U6ICVkXG4iLCByZXQpOwotCS8qIEV2ZW4gaWYgcHJvYmUoKSB3YXMgdW5zdWNjZXNzZnVsIGZvciBhbGwgcmVnaXN0ZXJlZCBkcml2ZXJzLAotCSAqIGRldmljZV9yZWdpc3RlcigpIHJldHVybnMgMCwgYW5kIHdlIGFkZCB0aGUgbGluaywganVzdCB0bwotCSAqIGRvY3VtZW50IHRoaXMgY2FtZXJhJ3MgY29udHJvbCBkZXZpY2UgKi8KLQl9IGVsc2UgaWYgKGljZC0+Y29udHJvbCkKLQkJLyogSGF2ZSB0byBzeXNmc19yZW1vdmVfbGluaygpIGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpPyAqLwotCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmljZC0+ZGV2LmtvYmosICZpY2QtPmNvbnRyb2wtPmtvYmosCi0JCQkJICAgICAgImNvbnRyb2wiKSkKLQkJCWRldl93YXJuKCZpY2QtPmRldiwKLQkJCQkgIkZhaWxlZCBjcmVhdGluZyB0aGUgY29udHJvbCBzeW1saW5rXG4iKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKiBTbyBmYXIgdGhpcyBmdW5jdGlvbiBjYW5ub3QgZmFpbCAqLwogc3RhdGljIHZvaWQgc2Nhbl9hZGRfaG9zdChzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kpCiB7CkBAIC03OTYsMTA2ICs4MTQsMTkzIEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGljZCwgJmRldmljZXMsIGxpc3QpIHsKIAkJaWYgKGljZC0+aWZhY2UgPT0gaWNpLT5ucikgewotCQkJaWNkLT5kZXYucGFyZW50ID0gaWNpLT5kZXY7Ci0JCQlkZXZpY2VfcmVnaXN0ZXJfbGluayhpY2QpOworCQkJaW50IHJldDsKKwkJCWljZC0+ZGV2LnBhcmVudCA9IGljaS0+djRsMl9kZXYuZGV2OworCQkJZGV2X3NldF9uYW1lKCZpY2QtPmRldiwgIiV1LSV1IiwgaWNkLT5pZmFjZSwKKwkJCQkgICAgIGljZC0+ZGV2bnVtKTsKKwkJCXJldCA9IGRldmljZV9yZWdpc3RlcigmaWNkLT5kZXYpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlpY2QtPmRldi5wYXJlbnQgPSBOVUxMOworCQkJCWRldl9lcnIoJmljZC0+ZGV2LAorCQkJCQkiQ2Fubm90IHJlZ2lzdGVyIGRldmljZTogJWRcbiIsIHJldCk7CisJCQl9CiAJCX0KIAl9CiAKIAltdXRleF91bmxvY2soJmxpc3RfbG9jayk7CiB9CiAKLS8qIHJldHVybjogMCBpZiBubyBtYXRjaCBmb3VuZCBvciBhIG1hdGNoIGZvdW5kIGFuZAotICogZGV2aWNlX3JlZ2lzdGVyKCkgc3VjY2Vzc2Z1bCwgZXJyb3IgY29kZSBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgc2Nhbl9hZGRfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorI2lmZGVmIENPTkZJR19JMkNfQk9BUkRJTkZPCitzdGF0aWMgaW50IHNvY19jYW1lcmFfaW5pdF9pMmMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGkyY19nZXRfYWRhcHRlcihpY2wtPmkyY19hZGFwdGVyX2lkKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldjsKKwlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmbGlzdF9sb2NrKTsKLQotCWxpc3RfYWRkX3RhaWwoJmljZC0+bGlzdCwgJmRldmljZXMpOwotCi0JLyogV2F0Y2ggb3V0IGZvciBjbGFzc19mb3JfZWFjaF9kZXZpY2UgLyBjbGFzc19maW5kX2RldmljZSBBUEkgYnkKLQkgKiBEYXZlIFlvdW5nIDxoaWRhdmUuZGFya3N0YXJAZ21haWwuY29tPiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaWNpLCAmaG9zdHMsIGxpc3QpIHsKLQkJaWYgKGljZC0+aWZhY2UgPT0gaWNpLT5ucikgewotCQkJcmV0ID0gMTsKLQkJCWljZC0+ZGV2LnBhcmVudCA9IGljaS0+ZGV2OwotCQkJYnJlYWs7Ci0JCX0KKwlpZiAoIWFkYXApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJDYW5ub3QgZ2V0IEkyQyBhZGFwdGVyICMlZC4gTm8gZHJpdmVyP1xuIiwKKwkJCWljbC0+aTJjX2FkYXB0ZXJfaWQpOworCQlnb3RvIGVpMmNnYTsKIAl9CiAKLQltdXRleF91bmxvY2soJmxpc3RfbG9jayk7CisJaWNsLT5ib2FyZF9pbmZvLT5wbGF0Zm9ybV9kYXRhID0gaWNkOwogCi0JaWYgKHJldCkKLQkJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyX2xpbmsoaWNkKTsKKwlzdWJkZXYgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZpY2ktPnY0bDJfZGV2LCBhZGFwLAorCQkJCWljbC0+bW9kdWxlX25hbWUsIGljbC0+Ym9hcmRfaW5mbywgTlVMTCk7CisJaWYgKCFzdWJkZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlaTJjbmQ7CisJfQogCisJY2xpZW50ID0gc3ViZGV2LT5wcml2OworCisJLyogVXNlIHRvX2kyY19jbGllbnQoZGV2KSB0byByZWNvdmVyIHRoZSBpMmMgY2xpZW50ICovCisJZGV2X3NldF9kcnZkYXRhKCZpY2QtPmRldiwgJmNsaWVudC0+ZGV2KTsKKworCXJldHVybiAwOworZWkyY25kOgorCWkyY19wdXRfYWRhcHRlcihhZGFwKTsKK2VpMmNnYToKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBzb2NfY2FtZXJhX2ZyZWVfaTJjKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPQorCQl0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlkZXZfc2V0X2RydmRhdGEoJmljZC0+ZGV2LCBOVUxMKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJaTJjX3B1dF9hZGFwdGVyKGNsaWVudC0+YWRhcHRlcik7Cit9CisjZWxzZQorI2RlZmluZSBzb2NfY2FtZXJhX2luaXRfaTJjKGljZCwgaWNsKQkoLUVOT0RFVikKKyNkZWZpbmUgc29jX2NhbWVyYV9mcmVlX2kyYyhpY2QpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV92aWRlb19zdGFydChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CitzdGF0aWMgaW50IHZpZGVvX2Rldl9jcmVhdGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOworLyogQ2FsbGVkIGR1cmluZyBob3N0LWRyaXZlciBwcm9iZSAqLwogc3RhdGljIGludCBzb2NfY2FtZXJhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHRvX3NvY19jYW1lcmFfZGV2KGRldik7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGRldi0+cGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwlzdHJ1Y3QgZGV2aWNlICpjb250cm9sID0gTlVMTDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmID0gey50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFfTsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBQb3NzaWJsZSByYWNlIHNjZW5hcmlvOgotCSAqIG1vZHByb2JlIDxjYW1lcmEtaG9zdC1kcml2ZXI+IHRyaWdnZXJzIF9fZnVuY19fCi0JICogYXQgdGhpcyBtb21lbnQgcmVzcGVjdGl2ZSA8Y2FtZXJhLXNlbnNvci1kcml2ZXI+IGdldHMgcm1tb2QnZWQKLQkgKiB0byBwcm90ZWN0IHRha2UgbW9kdWxlIHJlZmVyZW5jZXMuCi0JICovCisJZGV2X2luZm8oZGV2LCAiUHJvYmluZyAlc1xuIiwgZGV2X25hbWUoZGV2KSk7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGljZC0+b3BzLT5vd25lcikpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJDb3VsZG4ndCBsb2NrIHNlbnNvciBkcml2ZXIuXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlbWdkOworCWlmIChpY2wtPnBvd2VyKSB7CisJCXJldCA9IGljbC0+cG93ZXIoaWNkLT5wZGV2LCAxKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb24gdGhlIGNhbWVyYS5cbiIpOworCQkJZ290byBlcG93ZXI7CisJCX0KIAl9CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGljaS0+b3BzLT5vd25lcikpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJDb3VsZG4ndCBsb2NrIGNhcHR1cmUgYnVzIGRyaXZlci5cbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVtZ2k7Ci0JfQorCS8qIFRoZSBjYW1lcmEgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkgb24sIHRyeSB0byByZXNldCAqLworCWlmIChpY2wtPnJlc2V0KQorCQlpY2wtPnJlc2V0KGljZC0+cGRldik7CiAKLQltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwotCi0JLyogV2Ugb25seSBjYWxsIC0+YWRkKCkgaGVyZSB0byBhY3RpdmF0ZSBhbmQgcHJvYmUgdGhlIGNhbWVyYS4KLQkgKiBXZSBzaGFsbCAtPnJlbW92ZSgpIGFuZCBkZWFjdGl2YXRlIGl0IGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuICovCiAJcmV0ID0gaWNpLT5vcHMtPmFkZChpY2QpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVpYWRkOworCQlnb3RvIGVhZGQ7CiAKLQlyZXQgPSBpY2QtPm9wcy0+cHJvYmUoaWNkKTsKLQlpZiAocmV0ID49IDApIHsKLQkJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKKwkvKiBNdXN0IGhhdmUgaWNkLT52ZGV2IGJlZm9yZSByZWdpc3RlcmluZyB0aGUgZGV2aWNlICovCisJcmV0ID0gdmlkZW9fZGV2X2NyZWF0ZShpY2QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGV2ZGM7CiAKLQkJcWN0cmwgPSBzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoaWNkLT5vcHMsIFY0TDJfQ0lEX0dBSU4pOwotCQlpY2QtPmdhaW4gPSBxY3RybCA/IHFjdHJsLT5kZWZhdWx0X3ZhbHVlIDogKHVuc2lnbmVkIHNob3J0KX4wOwotCQlxY3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybChpY2QtPm9wcywgVjRMMl9DSURfRVhQT1NVUkUpOwotCQlpY2QtPmV4cG9zdXJlID0gcWN0cmwgPyBxY3RybC0+ZGVmYXVsdF92YWx1ZSA6Ci0JCQkodW5zaWduZWQgc2hvcnQpfjA7CisJLyogTm9uLWkyYyBjYW1lcmFzLCBlLmcuLCBzb2NfY2FtZXJhX3BsYXRmb3JtLCBoYXZlIG5vIGJvYXJkX2luZm8gKi8KKwlpZiAoaWNsLT5ib2FyZF9pbmZvKSB7CisJCXJldCA9IHNvY19jYW1lcmFfaW5pdF9pMmMoaWNkLCBpY2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZWFkZGRldjsKKwl9IGVsc2UgaWYgKCFpY2wtPmFkZF9kZXZpY2UgfHwgIWljbC0+ZGVsX2RldmljZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVhZGRkZXY7CisJfSBlbHNlIHsKKwkJaWYgKGljbC0+bW9kdWxlX25hbWUpCisJCQlyZXQgPSByZXF1ZXN0X21vZHVsZShpY2wtPm1vZHVsZV9uYW1lKTsKIAotCQlyZXQgPSBzb2NfY2FtZXJhX2luaXRfdXNlcl9mb3JtYXRzKGljZCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlpZiAoaWNkLT5vcHMtPnJlbW92ZSkKLQkJCQlpY2QtPm9wcy0+cmVtb3ZlKGljZCk7Ci0JCQlnb3RvIGVpdWZtdDsKKwkJcmV0ID0gaWNsLT5hZGRfZGV2aWNlKGljbCwgJmljZC0+ZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVhZGRkZXY7CisKKwkJLyoKKwkJICogRklYTUU6IHRoaXMgaXMgcmFjeSwgaGF2ZSB0byB1c2UgZHJpdmVyLWJpbmRpbmcgbm90aWZpY2F0aW9uLAorCQkgKiB3aGVuIGl0IGlzIGF2YWlsYWJsZQorCQkgKi8KKwkJY29udHJvbCA9IHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpOworCQlpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wtPmRyaXZlciB8fCAhZGV2X2dldF9kcnZkYXRhKGNvbnRyb2wpIHx8CisJCSAgICAhdHJ5X21vZHVsZV9nZXQoY29udHJvbC0+ZHJpdmVyLT5vd25lcikpIHsKKwkJCWljbC0+ZGVsX2RldmljZShpY2wpOworCQkJZ290byBlbm9kcnY7CiAJCX0KLQotCQlpY2QtPmhlaWdodAk9IERFRkFVTFRfSEVJR0hUOwotCQlpY2QtPndpZHRoCT0gREVGQVVMVF9XSURUSDsKLQkJaWNkLT5maWVsZAk9IFY0TDJfRklFTERfQU5ZOwogCX0KIAotZWl1Zm10OgorCS8qIEF0IHRoaXMgcG9pbnQgY2xpZW50IC5wcm9iZSgpIHNob3VsZCBoYXZlIHJ1biBhbHJlYWR5ICovCisJcmV0ID0gc29jX2NhbWVyYV9pbml0X3VzZXJfZm9ybWF0cyhpY2QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVpdWZtdDsKKworCWljZC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0FOWTsKKworCS8qIC4uLl92aWRlb19zdGFydCgpIHdpbGwgY3JlYXRlIGEgZGV2aWNlIG5vZGUsIHNvIHdlIGhhdmUgdG8gcHJvdGVjdCAqLworCW11dGV4X2xvY2soJmljZC0+dmlkZW9fbG9jayk7CisKKwlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXZpZHN0YXJ0OworCisJLyogVHJ5IHRvIGltcHJvdmUgb3VyIGd1ZXNzIG9mIGEgcmVhc29uYWJsZSB3aW5kb3cgZm9ybWF0ICovCisJc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCWlmICghdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfZm10LCAmZikpIHsKKwkJaWNkLT51c2VyX3dpZHRoCQk9IGYuZm10LnBpeC53aWR0aDsKKwkJaWNkLT51c2VyX2hlaWdodAk9IGYuZm10LnBpeC5oZWlnaHQ7CisJfQorCisJLyogRG8gd2UgaGF2ZSB0byBzeXNmc19yZW1vdmVfbGluaygpIGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpPyAqLworCWlmIChzeXNmc19jcmVhdGVfbGluaygmaWNkLT5kZXYua29iaiwgJnRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpLT5rb2JqLAorCQkJICAgICAgImNvbnRyb2wiKSkKKwkJZGV2X3dhcm4oJmljZC0+ZGV2LCAiRmFpbGVkIGNyZWF0aW5nIHRoZSBjb250cm9sIHN5bWxpbmtcbiIpOworCiAJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwotZWlhZGQ6CisKKwlpZiAoaWNsLT5wb3dlcikKKwkJaWNsLT5wb3dlcihpY2QtPnBkZXYsIDApOworCiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwotCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKLWVtZ2k6Ci0JbW9kdWxlX3B1dChpY2QtPm9wcy0+b3duZXIpOwotZW1nZDoKKworCXJldHVybiAwOworCitldmlkc3RhcnQ6CisJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOworCXNvY19jYW1lcmFfZnJlZV91c2VyX2Zvcm1hdHMoaWNkKTsKK2VpdWZtdDoKKwlpZiAoaWNsLT5ib2FyZF9pbmZvKSB7CisJCXNvY19jYW1lcmFfZnJlZV9pMmMoaWNkKTsKKwl9IGVsc2UgeworCQlpY2wtPmRlbF9kZXZpY2UoaWNsKTsKKwkJbW9kdWxlX3B1dChjb250cm9sLT5kcml2ZXItPm93bmVyKTsKKwl9Citlbm9kcnY6CitlYWRkZGV2OgorCXZpZGVvX2RldmljZV9yZWxlYXNlKGljZC0+dmRldik7CitldmRjOgorCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKK2VhZGQ6CisJaWYgKGljbC0+cG93ZXIpCisJCWljbC0+cG93ZXIoaWNkLT5wZGV2LCAwKTsKK2Vwb3dlcjoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05MDQsMTIgKzEwMDksMjggQEAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaWNkLT52ZGV2OwogCi0JbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKLQlpZiAoaWNkLT5vcHMtPnJlbW92ZSkKLQkJaWNkLT5vcHMtPnJlbW92ZShpY2QpOwotCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKKwlCVUdfT04oIWRldi0+cGFyZW50KTsKIAorCWlmICh2ZGV2KSB7CisJCW11dGV4X2xvY2soJmljZC0+dmlkZW9fbG9jayk7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkZXYpOworCQlpY2QtPnZkZXYgPSBOVUxMOworCQltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CisJfQorCisJaWYgKGljbC0+Ym9hcmRfaW5mbykgeworCQlzb2NfY2FtZXJhX2ZyZWVfaTJjKGljZCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpID8KKwkJCXRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpLT5kcml2ZXIgOiBOVUxMOworCQlpZiAoZHJ2KSB7CisJCQlpY2wtPmRlbF9kZXZpY2UoaWNsKTsKKwkJCW1vZHVsZV9wdXQoZHJ2LT5vd25lcik7CisJCX0KKwl9CiAJc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOwogCiAJcmV0dXJuIDA7CkBAIC05NTcsMTQgKzEwNzgsMzMgQEAKIHsKIH0KIAorc3RhdGljIGludCBkZWZhdWx0X2Nyb3BjYXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgY3JvcGNhcCwgYSk7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9nX2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2Nyb3AsIGEpOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfc19jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19jcm9wLCBhKTsKK30KKwogaW50IHNvY19jYW1lcmFfaG9zdF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaXg7CisJaW50IHJldDsKIAogCWlmICghaWNpIHx8ICFpY2ktPm9wcyB8fAogCSAgICAhaWNpLT5vcHMtPnRyeV9mbXQgfHwKIAkgICAgIWljaS0+b3BzLT5zZXRfZm10IHx8Ci0JICAgICFpY2ktPm9wcy0+c2V0X2Nyb3AgfHwKIAkgICAgIWljaS0+b3BzLT5zZXRfYnVzX3BhcmFtIHx8CiAJICAgICFpY2ktPm9wcy0+cXVlcnljYXAgfHwKIAkgICAgIWljaS0+b3BzLT5pbml0X3ZpZGVvYnVmIHx8CkBAIC05NzIsMTggKzExMTIsMjcgQEAKIAkgICAgIWljaS0+b3BzLT5hZGQgfHwKIAkgICAgIWljaS0+b3BzLT5yZW1vdmUgfHwKIAkgICAgIWljaS0+b3BzLT5wb2xsIHx8Ci0JICAgICFpY2ktPmRldikKKwkgICAgIWljaS0+djRsMl9kZXYuZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghaWNpLT5vcHMtPnNldF9jcm9wKQorCQlpY2ktPm9wcy0+c2V0X2Nyb3AgPSBkZWZhdWx0X3NfY3JvcDsKKwlpZiAoIWljaS0+b3BzLT5nZXRfY3JvcCkKKwkJaWNpLT5vcHMtPmdldF9jcm9wID0gZGVmYXVsdF9nX2Nyb3A7CisJaWYgKCFpY2ktPm9wcy0+Y3JvcGNhcCkKKwkJaWNpLT5vcHMtPmNyb3BjYXAgPSBkZWZhdWx0X2Nyb3BjYXA7CisKIAltdXRleF9sb2NrKCZsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaXgsICZob3N0cywgbGlzdCkgewogCQlpZiAoaXgtPm5yID09IGljaS0+bnIpIHsKLQkJCW11dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGVkZXZyZWc7CiAJCX0KIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoaWNpLT5kZXYsIGljaSk7CisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoaWNpLT52NGwyX2Rldi5kZXYsICZpY2ktPnY0bDJfZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlZGV2cmVnOwogCiAJbGlzdF9hZGRfdGFpbCgmaWNpLT5saXN0LCAmaG9zdHMpOwogCW11dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKQEAgLTk5MSw2ICsxMTQwLDEwIEBACiAJc2Nhbl9hZGRfaG9zdChpY2kpOwogCiAJcmV0dXJuIDA7CisKK2VkZXZyZWc6CisJbXV0ZXhfdW5sb2NrKCZsaXN0X2xvY2spOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfaG9zdF9yZWdpc3Rlcik7CiAKQEAgLTEwMDQsNDIgKzExNTcsMzQgQEAKIAlsaXN0X2RlbCgmaWNpLT5saXN0KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWNkLCAmZGV2aWNlcywgbGlzdCkgewotCQlpZiAoaWNkLT5kZXYucGFyZW50ID09IGljaS0+ZGV2KSB7CisJCWlmIChpY2QtPmlmYWNlID09IGljaS0+bnIpIHsKKwkJCS8qIFRoZSBidXMtPnJlbW92ZSB3aWxsIGJlIGNhbGxlZCAqLwogCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmljZC0+ZGV2KTsKIAkJCS8qIE5vdCBiZWZvcmUgZGV2aWNlX3VucmVnaXN0ZXIoKSwgLnJlbW92ZQogCQkJICogbmVlZHMgcGFyZW50IHRvIGNhbGwgaWNpLT5vcHMtPnJlbW92ZSgpICovCiAJCQlpY2QtPmRldi5wYXJlbnQgPSBOVUxMOworCisJCQkvKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQorCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQiICovCiAJCQltZW1zZXQoJmljZC0+ZGV2LmtvYmosIDAsIHNpemVvZihpY2QtPmRldi5rb2JqKSk7CiAJCX0KIAl9CiAKIAltdXRleF91bmxvY2soJmxpc3RfbG9jayk7CiAKLQlkZXZfc2V0X2RydmRhdGEoaWNpLT5kZXYsIE5VTEwpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmljaS0+djRsMl9kZXYpOwogfQogRVhQT1JUX1NZTUJPTChzb2NfY2FtZXJhX2hvc3RfdW5yZWdpc3Rlcik7CiAKIC8qIEltYWdlIGNhcHR1cmUgZGV2aWNlICovCi1pbnQgc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaXg7CiAJaW50IG51bSA9IC0xLCBpOwogCi0JaWYgKCFpY2QgfHwgIWljZC0+b3BzIHx8Ci0JICAgICFpY2QtPm9wcy0+cHJvYmUgfHwKLQkgICAgIWljZC0+b3BzLT5pbml0IHx8Ci0JICAgICFpY2QtPm9wcy0+cmVsZWFzZSB8fAotCSAgICAhaWNkLT5vcHMtPnN0YXJ0X2NhcHR1cmUgfHwKLQkgICAgIWljZC0+b3BzLT5zdG9wX2NhcHR1cmUgfHwKLQkgICAgIWljZC0+b3BzLT5zZXRfY3JvcCB8fAotCSAgICAhaWNkLT5vcHMtPnNldF9mbXQgfHwKLQkgICAgIWljZC0+b3BzLT50cnlfZm10IHx8Ci0JICAgICFpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtIHx8Ci0JICAgICFpY2QtPm9wcy0+c2V0X2J1c19wYXJhbSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgMjU2ICYmIG51bSA8IDA7IGkrKykgewogCQludW0gPSBpOworCQkvKiBDaGVjayBpZiB0aGlzIGluZGV4IGlzIGF2YWlsYWJsZSBvbiB0aGlzIGludGVyZmFjZSAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl4LCAmZGV2aWNlcywgbGlzdCkgewogCQkJaWYgKGl4LT5pZmFjZSA9PSBpY2QtPmlmYWNlICYmIGl4LT5kZXZudW0gPT0gaSkgewogCQkJCW51bSA9IC0xOwpAQCAtMTA2MSwyMSArMTIwNiwxNSBAQAogCWljZC0+aG9zdF9wcml2CQk9IE5VTEw7CiAJbXV0ZXhfaW5pdCgmaWNkLT52aWRlb19sb2NrKTsKIAotCXJldHVybiBzY2FuX2FkZF9kZXZpY2UoaWNkKTsKLX0KLUVYUE9SVF9TWU1CT0woc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIpOworCWxpc3RfYWRkX3RhaWwoJmljZC0+bGlzdCwgJmRldmljZXMpOwogCi12b2lkIHNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0JbXV0ZXhfbG9jaygmbGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmaWNkLT5saXN0KTsKLQotCS8qIFRoZSBidXMtPnJlbW92ZSB3aWxsIGJlIGV2ZW50dWFsbHkgY2FsbGVkICovCi0JaWYgKGljZC0+ZGV2LnBhcmVudCkKLQkJZGV2aWNlX3VucmVnaXN0ZXIoJmljZC0+ZGV2KTsKLQltdXRleF91bmxvY2soJmxpc3RfbG9jayk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHNvY19jYW1lcmFfaW9jdGxfb3BzID0gewogCS52aWRpb2NfcXVlcnljYXAJID0gc29jX2NhbWVyYV9xdWVyeWNhcCwKQEAgLTExMDYsMjMgKzEyNDUsMTMgQEAKICNlbmRpZgogfTsKIAotLyoKLSAqIFVzdWFsbHkgY2FsbGVkIGZyb20gdGhlIHN0cnVjdCBzb2NfY2FtZXJhX29wcyAucHJvYmUoKSBtZXRob2QsIGkuZS4sIGZyb20KLSAqIHNvY19jYW1lcmFfcHJvYmUoKSBhYm92ZSB3aXRoIC52aWRlb19sb2NrIGhlbGQKLSAqLwotaW50IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IHZpZGVvX2Rldl9jcmVhdGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CiAKLQlpZiAoIWljZC0+ZGV2LnBhcmVudCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl2ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CiAJaWYgKCF2ZGV2KQotCQlnb3RvIGV2aWRhbGxvY2Q7Ci0JZGV2X2RiZyhpY2ktPmRldiwgIkFsbG9jYXRlZCB2aWRlb19kZXZpY2UgJXBcbiIsIHZkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKIAogCXN0cmxjcHkodmRldi0+bmFtZSwgaWNpLT5kcnZfbmFtZSwgc2l6ZW9mKHZkZXYtPm5hbWUpKTsKIApAQCAtMTEzMiw4NyArMTI2MSw5MyBAQAogCXZkZXYtPmlvY3RsX29wcwkJPSAmc29jX2NhbWVyYV9pb2N0bF9vcHM7CiAJdmRldi0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2ZGV2LT5taW5vcgkJPSAtMTsKLQl2ZGV2LT50dm5vcm1zCQk9IFY0TDJfU1REX1VOS05PV04sCisJdmRldi0+dHZub3JtcwkJPSBWNEwyX1NURF9VTktOT1dOOwogCi0JZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZkZXYtPm1pbm9yKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKHZkZXYtPnBhcmVudCwgInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWRcbiIpOwotCQlnb3RvIGV2aWRyZWdkOwotCX0KIAlpY2QtPnZkZXYgPSB2ZGV2OwogCiAJcmV0dXJuIDA7Ci0KLWV2aWRyZWdkOgotCXZpZGVvX2RldmljZV9yZWxlYXNlKHZkZXYpOwotZXZpZGFsbG9jZDoKLQlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KTsKIAotLyogQ2FsbGVkIGZyb20gY2xpZW50IC5yZW1vdmUoKSBtZXRob2RzIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwotdm9pZCBzb2NfY2FtZXJhX3ZpZGVvX3N0b3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCisvKgorICogQ2FsbGVkIGZyb20gc29jX2NhbWVyYV9wcm9iZSgpIGFib3ZlICh3aXRoIC52aWRlb19sb2NrIGhlbGQ/Pz8pCisgKi8KK3N0YXRpYyBpbnQgc29jX2NhbWVyYV92aWRlb19zdGFydChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaWNkLT52ZGV2OworCWludCByZXQ7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKCFpY2QtPmRldi5wYXJlbnQpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwgIXZkZXYpCi0JCXJldHVybjsKKwlpZiAoIWljZC0+b3BzIHx8CisJICAgICFpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtIHx8CisJICAgICFpY2QtPm9wcy0+c2V0X2J1c19wYXJhbSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2ZGV2KTsKLQlpY2QtPnZkZXYgPSBOVUxMOworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShpY2QtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJICAgIGljZC0+dmRldi0+bWlub3IpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfdmlkZW9fc3RvcCk7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNvY19jYW1lcmFfcGRydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOworCWludCByZXQ7CiAKIAlpZiAoIWljbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhZGFwID0gaTJjX2dldF9hZGFwdGVyKGljbC0+aTJjX2FkYXB0ZXJfaWQpOwotCWlmICghYWRhcCkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBhZGFwdGVyICMlZC4gTm8gZHJpdmVyP1xuIiwKLQkJCSBpY2wtPmkyY19hZGFwdGVyX2lkKTsKLQkJLyogLUVOT0RFViBhbmQgLUVOWElPIGRvIG5vdCBwcm9kdWNlIGFuIGVycm9yIG9uIHByb2JlKCkuLi4gKi8KLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JaWNsLT5ib2FyZF9pbmZvLT5wbGF0Zm9ybV9kYXRhID0gaWNsOwotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXAsIGljbC0+Ym9hcmRfaW5mbyk7Ci0JaWYgKCFjbGllbnQpIHsKLQkJaTJjX3B1dF9hZGFwdGVyKGFkYXApOworCWljZCA9IGt6YWxsb2Moc2l6ZW9mKCppY2QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWljZCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2xpZW50KTsKKwlpY2QtPmlmYWNlID0gaWNsLT5idXNfaWQ7CisJaWNkLT5wZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpY2QpOworCWljZC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBpY2w7CisKKwlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVzY2RldnJlZzsKKworCWljZC0+dXNlcl93aWR0aAkJPSBERUZBVUxUX1dJRFRIOworCWljZC0+dXNlcl9oZWlnaHQJPSBERUZBVUxUX0hFSUdIVDsKIAogCXJldHVybiAwOworCitlc2NkZXZyZWc6CisJa2ZyZWUoaWNkKTsKKworCXJldHVybiByZXQ7CiB9CiAKKy8qIE9ubHkgY2FsbGVkIG9uIHJtbW9kIGZvciBlYWNoIHBsYXRmb3JtIGRldmljZSwgc2luY2UgdGhleSBhcmUgbm90CisgKiBob3QtcGx1Z2dhYmxlLiBOb3cgd2Uga25vdywgdGhhdCBhbGwgb3VyIHVzZXJzIC0gaG9zdHMgYW5kIGRldmljZXMgaGF2ZQorICogYmVlbiB1bmxvYWRlZCBhbHJlYWR5ICovCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBzb2NfY2FtZXJhX3BkcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFpY2QpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7Ci0JaTJjX3B1dF9hZGFwdGVyKGNsaWVudC0+YWRhcHRlcik7CisJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcihpY2QpOworCisJa2ZyZWUoaWNkKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBfX3JlZmRhdGEgc29jX2NhbWVyYV9wZHJ2ID0gewotCS5wcm9iZQk9IHNvY19jYW1lcmFfcGRydl9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3Aoc29jX2NhbWVyYV9wZHJ2X3JlbW92ZSksCi0JLmRyaXZlcgk9IHsKLQkJLm5hbWUgPSAic29jLWNhbWVyYS1wZHJ2IiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlbW92ZSAgPSBfX2RldmV4aXRfcChzb2NfY2FtZXJhX3BkcnZfcmVtb3ZlKSwKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTEyMjUsNyArMTM2MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlZHJ2cjsKIAotCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc29jX2NhbWVyYV9wZHJ2KTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnNvY19jYW1lcmFfcGRydiwgc29jX2NhbWVyYV9wZHJ2X3Byb2JlKTsKIAlpZiAocmV0KQogCQlnb3RvIGVwZHI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggYzQ4Njc2My4uYjZhNTc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTE2LDU0ICsxNiwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAKIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm87Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2OwogCXN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IGZvcm1hdDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICoKLXNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqZ2V0X3ByaXYoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2ICpwcml2OwotCXByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2LCBpY2QpOwotCXJldHVybiBwcml2LT5pbmZvOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzdWJkZXYsIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYsIHN1YmRldik7CiB9CiAKLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmdldF9pbmZvKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7Ci0KLQlpZiAocC0+cG93ZXIpCi0JCXAtPnBvd2VyKDEpOwotCi0JcmV0dXJuIDA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9CisJCXRvX3BsYXRmb3JtX2RldmljZSh0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKSk7CisJcmV0dXJuIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogfQogCi1zdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7Ci0KLQlpZiAocC0+cG93ZXIpCi0JCXAtPnBvd2VyKDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7Ci0JcmV0dXJuIHAtPnNldF9jYXB0dXJlKHAsIDEpOwotfQotCi1zdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RvcF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7Ci0JcmV0dXJuIHAtPnNldF9jYXB0dXJlKHAsIDApOworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlyZXR1cm4gcC0+c2V0X2NhcHR1cmUocCwgZW5hYmxlKTsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC03NSwyNiArNTMsMTQgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBzb2NfY2FtZXJhX3BsYXRmb3JtX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBnZXRfaW5mbyhpY2QpOwogCXJldHVybiBwLT5idXNfcGFyYW07CiB9CiAKLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCitzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKIAlwaXgtPndpZHRoID0gcC0+Zm9ybWF0LndpZHRoOwpAQCAtMTAyLDgyICs2OCw5OSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgdm9pZCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCQkgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2ICpwcml2OwotCXByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2LCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgKnByaXYgPSBnZXRfcHJpdihwZGV2KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlwcml2LT5mb3JtYXQubmFtZSA9IHByaXYtPmluZm8tPmZvcm1hdF9uYW1lOwotCXByaXYtPmZvcm1hdC5kZXB0aCA9IHByaXYtPmluZm8tPmZvcm1hdF9kZXB0aDsKLQlwcml2LT5mb3JtYXQuZm91cmNjID0gcHJpdi0+aW5mby0+Zm9ybWF0LnBpeGVsZm9ybWF0OwotCXByaXYtPmZvcm1hdC5jb2xvcnNwYWNlID0gcHJpdi0+aW5mby0+Zm9ybWF0LmNvbG9yc3BhY2U7CisJcHJpdi0+Zm9ybWF0Lm5hbWUgPSBwLT5mb3JtYXRfbmFtZTsKKwlwcml2LT5mb3JtYXQuZGVwdGggPSBwLT5mb3JtYXRfZGVwdGg7CisJcHJpdi0+Zm9ybWF0LmZvdXJjYyA9IHAtPmZvcm1hdC5waXhlbGZvcm1hdDsKKwlwcml2LT5mb3JtYXQuY29sb3JzcGFjZSA9IHAtPmZvcm1hdC5jb2xvcnNwYWNlOwogCiAJaWNkLT5mb3JtYXRzID0gJnByaXYtPmZvcm1hdDsKIAlpY2QtPm51bV9mb3JtYXRzID0gMTsKLQotCXJldHVybiBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNvY19jYW1lcmFfcGxhdGZvcm1fdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOwotfQorc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBwbGF0Zm9ybV9zdWJkZXZfY29yZV9vcHM7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHBsYXRmb3JtX3N1YmRldl92aWRlb19vcHMgPSB7CisJLnNfc3RyZWFtCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zX3N0cmVhbSwKKwkudHJ5X2ZtdAk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHBsYXRmb3JtX3N1YmRldl9vcHMgPSB7CisJLmNvcmUJPSAmcGxhdGZvcm1fc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZwbGF0Zm9ybV9zdWJkZXZfdmlkZW9fb3BzLAorfTsKIAogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBzb2NfY2FtZXJhX3BsYXRmb3JtX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV92aWRlb19wcm9iZSwKLQkucmVtb3ZlCQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3ZpZGVvX3JlbW92ZSwKLQkuaW5pdAkJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9pbml0LAotCS5yZWxlYXNlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fcmVsZWFzZSwKLQkuc3RhcnRfY2FwdHVyZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3N0YXJ0X2NhcHR1cmUsCi0JLnN0b3BfY2FwdHVyZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3N0b3BfY2FwdHVyZSwKLQkuc2V0X2Nyb3AJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfY3JvcCwKLQkuc2V0X2ZtdAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9mbXQsCi0JLnRyeV9mbXQJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2J1c19wYXJhbSwKIAkucXVlcnlfYnVzX3BhcmFtCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9xdWVyeV9idXNfcGFyYW0sCiB9OwogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2k7CiAJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqcHJpdjsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwOworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKIAlpbnQgcmV0OwogCi0JcCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoIXAtPmRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiUGxhdGZvcm0gaGFzIG5vdCBzZXQgc29jX2NhbWVyYV9kZXZpY2UgcG9pbnRlciFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJpdi0+aW5mbyA9IHA7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJaWNkID0gdG9fc29jX2NhbWVyYV9kZXYocC0+ZGV2KTsKIAotCWljZCA9ICZwcml2LT5pY2Q7Ci0JaWNkLT5vcHMJPSAmc29jX2NhbWVyYV9wbGF0Zm9ybV9vcHM7Ci0JaWNkLT5jb250cm9sCT0gJnBkZXYtPmRldjsKLQlpY2QtPndpZHRoX21pbgk9IDA7Ci0JaWNkLT53aWR0aF9tYXgJPSBwcml2LT5pbmZvLT5mb3JtYXQud2lkdGg7Ci0JaWNkLT5oZWlnaHRfbWluCT0gMDsKLQlpY2QtPmhlaWdodF9tYXgJPSBwcml2LT5pbmZvLT5mb3JtYXQuaGVpZ2h0OwotCWljZC0+eV9za2lwX3RvcAk9IDA7Ci0JaWNkLT5pZmFjZQk9IHByaXYtPmluZm8tPmlmYWNlOworCS8qIHNvYy1jYW1lcmEgY29udmVudGlvbjogY29udHJvbCdzIGRydmRhdGEgcG9pbnRzIHRvIHRoZSBzdWJkZXYgKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCAmcHJpdi0+c3ViZGV2KTsKKwkvKiBTZXQgdGhlIGNvbnRyb2wgZGV2aWNlIHJlZmVyZW5jZSAqLworCWRldl9zZXRfZHJ2ZGF0YSgmaWNkLT5kZXYsICZwZGV2LT5kZXYpOwogCi0JcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKKwlpY2QtPnlfc2tpcF90b3AJCT0gMDsKKwlpY2QtPm9wcwkJPSAmc29jX2NhbWVyYV9wbGF0Zm9ybV9vcHM7CisKKwlpY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKworCXNvY19jYW1lcmFfcGxhdGZvcm1fdmlkZW9fcHJvYmUoaWNkLCBwZGV2KTsKKworCXY0bDJfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgJnBsYXRmb3JtX3N1YmRldl9vcHMpOworCXY0bDJfc2V0X3N1YmRldmRhdGEoJnByaXYtPnN1YmRldiwgcCk7CisJc3RybmNweShwcml2LT5zdWJkZXYubmFtZSwgZGV2X25hbWUoJnBkZXYtPmRldiksIFY0TDJfU1VCREVWX05BTUVfU0laRSk7CisKKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJmljaS0+djRsMl9kZXYsICZwcml2LT5zdWJkZXYpOwogCWlmIChyZXQpCi0JCWtmcmVlKHByaXYpOworCQlnb3RvIGV2ZHJzOwogCiAJcmV0dXJuIHJldDsKKworZXZkcnM6CisJaWNkLT5vcHMgPSBOVUxMOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKHByaXYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqcHJpdiA9IGdldF9wcml2KHBkZXYpOworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHRvX3NvY19jYW1lcmFfZGV2KHAtPmRldik7CiAKLQlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZwcml2LT5pY2QpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZwcml2LT5zdWJkZXYpOworCWljZC0+b3BzID0gTlVMTDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShwcml2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NSw2ICsxNjgsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29jX2NhbWVyYV9wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLmRyaXZlciAJPSB7CiAJCS5uYW1lCT0gInNvY19jYW1lcmFfcGxhdGZvcm0iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3Byb2JlLAogCS5yZW1vdmUJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9yZW1vdmUsCkBAIC0yMDYsMyArMTkwLDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU29DIENhbWVyYSBQbGF0Zm9ybSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1hZ251cyBEYW1tIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNvY19jYW1lcmFfcGxhdGZvcm0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggMjgxNmYxOC4uYWJhOTJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ0dW5lci1zaW1wbGUuaCIKICNpbmNsdWRlICJ0ZGE5ODg3LmgiCiAjaW5jbHVkZSAieGM1MDAwLmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC00MjAsNiArNDIxLDE3IEBACiAJCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CiAJCWJyZWFrOwogCX0KKwljYXNlIFRVTkVSX05YUF9UREExODI3MToKKwl7CisJCXN0cnVjdCB0ZGExODI3MV9jb25maWcgY2ZnID0geworCQkJLmNvbmZpZyA9IHQtPmNvbmZpZywKKwkJfTsKKworCQlpZiAoIWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCAmdC0+ZmUsIHQtPmkyYy0+YWRkciwKKwkJCQl0LT5pMmMtPmFkYXB0ZXIsICZjZmcpKQorCQkJZ290byBhdHRhY2hfZmFpbGVkOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsICZ0LT5mZSwKIAkJCQl0LT5pMmMtPmFkYXB0ZXIsIHQtPmkyYy0+YWRkciwgdC0+dHlwZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eC5jCmluZGV4IDM3NTBmN2YuLjI0NDM3MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eC5jCkBAIC0zMSw3ICszMSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pbnQtZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZwNTE0eC5oPgogCiAjaW5jbHVkZSAidHZwNTE0eF9yZWdzLmgiCkBAIC00OSwxNSArNTIsMTEgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkdW1wX3JlZyhjbGllbnQsIHJlZywgdmFsKQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCXZhbCA9IHR2cDUxNHhfcmVhZF9yZWcoY2xpZW50LCByZWcpOwkJXAotCQl2NGxfaW5mbyhjbGllbnQsICJSZWcoMHglLjJYKTogMHglLjJYXG4iLCByZWcsIHZhbCk7IFwKLQl9IHdoaWxlICgwKQorTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFZQNTE0WCBsaW51eCBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vKioKLSAqIGVudW0gdHZwNTE0eF9zdGQgLSBlbnVtIGZvciBzdXBwb3J0ZWQgc3RhbmRhcmRzCi0gKi8KKy8qIGVudW0gdHZwNTE0eF9zdGQgLSBlbnVtIGZvciBzdXBwb3J0ZWQgc3RhbmRhcmRzICovCiBlbnVtIHR2cDUxNHhfc3RkIHsKIAlTVERfTlRTQ19NSiA9IDAsCiAJU1REX1BBTF9CREdISU4sCkBAIC02NSwxNCArNjQsNiBAQAogfTsKIAogLyoqCi0gKiBlbnVtIHR2cDUxNHhfc3RhdGUgLSBlbnVtIGZvciBkaWZmZXJlbnQgZGVjb2RlciBzdGF0ZXMKLSAqLwotZW51bSB0dnA1MTR4X3N0YXRlIHsKLQlTVEFURV9OT1RfREVURUNURUQsCi0JU1RBVEVfREVURUNURUQKLX07Ci0KLS8qKgogICogc3RydWN0IHR2cDUxNHhfc3RkX2luZm8gLSBTdHJ1Y3R1cmUgdG8gc3RvcmUgc3RhbmRhcmQgaW5mb3JtYXRpb25zCiAgKiBAd2lkdGg6IExpbmUgd2lkdGggaW4gcGl4ZWxzCiAgKiBAaGVpZ2h0Ok51bWJlciBvZiBhY3RpdmUgbGluZXMKQEAgLTg5LDMzICs4MCwyNyBAQAogc3RhdGljIHN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHRbMHg0MF07CiAvKioKICAqIHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgLSBUVlA1MTQ2LzQ3IGRlY29kZXIgb2JqZWN0Ci0gKiBAdjRsMl9pbnRfZGV2aWNlOiBTbGF2ZSBoYW5kbGUKLSAqIEB0dnA1MTR4X3NsYXZlOiBTbGF2ZSBwb2ludGVyIHdoaWNoIGlzIHVzZWQgYnkgQHY0bDJfaW50X2RldmljZQorICogQHNkOiBTdWJkZXZpY2UgU2xhdmUgaGFuZGxlCiAgKiBAdHZwNTE0eF9yZWdzOiBjb3B5IG9mIGh3J3MgcmVncyB3aXRoIHByZXNldCB2YWx1ZXMuCiAgKiBAcGRhdGE6IEJvYXJkIHNwZWNpZmljCi0gKiBAY2xpZW50OiBJMkMgY2xpZW50IGRhdGEKLSAqIEBpZDogRW50cnkgZnJvbSBJMkMgdGFibGUKICAqIEB2ZXI6IENoaXAgdmVyc2lvbgotICogQHN0YXRlOiBUVlA1MTQ2LzQ3IGRlY29kZXIgc3RhdGUgLSBkZXRlY3RlZCBvciBub3QtZGV0ZWN0ZWQKKyAqIEBzdHJlYW1pbmc6IFRWUDUxNDYvNDcgZGVjb2RlciBzdHJlYW1pbmcgLSBlbmFibGVkIG9yIGRpc2FibGVkLgogICogQHBpeDogQ3VycmVudCBwaXhlbCBmb3JtYXQKICAqIEBudW1fZm10czogTnVtYmVyIG9mIGZvcm1hdHMKICAqIEBmbXRfbGlzdDogRm9ybWF0IGxpc3QKICAqIEBjdXJyZW50X3N0ZDogQ3VycmVudCBzdGFuZGFyZAogICogQG51bV9zdGRzOiBOdW1iZXIgb2Ygc3RhbmRhcmRzCiAgKiBAc3RkX2xpc3Q6IFN0YW5kYXJkcyBsaXN0Ci0gKiBAcm91dGU6IGlucHV0IGFuZCBvdXRwdXQgcm91dGluZyBhdCBjaGlwIGxldmVsCisgKiBAaW5wdXQ6IElucHV0IHJvdXRpbmcgYXQgY2hpcCBsZXZlbAorICogQG91dHB1dDogT3V0cHV0IHJvdXRpbmcgYXQgY2hpcCBsZXZlbAogICovCiBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyIHsKLQlzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlIHY0bDJfaW50X2RldmljZTsKLQlzdHJ1Y3QgdjRsMl9pbnRfc2xhdmUgdHZwNTE0eF9zbGF2ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnc1tBUlJBWV9TSVpFKHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdCldOwogCWNvbnN0IHN0cnVjdCB0dnA1MTR4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0KLQlzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQ7CiAKIAlpbnQgdmVyOwotCWVudW0gdHZwNTE0eF9zdGF0ZSBzdGF0ZTsKKwlpbnQgc3RyZWFtaW5nOwogCiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7CiAJaW50IG51bV9mbXRzOwpAQCAtMTI0LDE1ICsxMDksMTggQEAKIAllbnVtIHR2cDUxNHhfc3RkIGN1cnJlbnRfc3RkOwogCWludCBudW1fc3RkczsKIAlzdHJ1Y3QgdHZwNTE0eF9zdGRfaW5mbyAqc3RkX2xpc3Q7Ci0KLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCS8qIElucHV0IGFuZCBPdXRwdXQgUm91dGluZyBwYXJhbWV0ZXJzICovCisJdTMyIGlucHV0OworCXUzMiBvdXRwdXQ7CiB9OwogCiAvKiBUVlA1MTR4IGRlZmF1bHQgcmVnaXN0ZXIgdmFsdWVzICovCiBzdGF0aWMgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdFtdID0gewotCXtUT0tfV1JJVEUsIFJFR19JTlBVVF9TRUwsIDB4MDV9LAkvKiBDb21wb3NpdGUgc2VsZWN0ZWQgKi8KKwkvKiBDb21wb3NpdGUgc2VsZWN0ZWQgKi8KKwl7VE9LX1dSSVRFLCBSRUdfSU5QVVRfU0VMLCAweDA1fSwKIAl7VE9LX1dSSVRFLCBSRUdfQUZFX0dBSU5fQ1RSTCwgMHgwRn0sCi0Je1RPS19XUklURSwgUkVHX1ZJREVPX1NURCwgMHgwMH0sCS8qIEF1dG8gbW9kZSAqLworCS8qIEF1dG8gbW9kZSAqLworCXtUT0tfV1JJVEUsIFJFR19WSURFT19TVEQsIDB4MDB9LAogCXtUT0tfV1JJVEUsIFJFR19PUEVSQVRJT05fTU9ERSwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfQVVUT1NXSVRDSF9NQVNLLCAweDNGfSwKIAl7VE9LX1dSSVRFLCBSRUdfQ09MT1JfS0lMTEVSLCAweDEwfSwKQEAgLTE0NSw1MyArMTMzLDc0IEBACiAJe1RPS19XUklURSwgUkVHX0hVRSwgMHgwMH0sCiAJe1RPS19XUklURSwgUkVHX0NIUk9NQV9DT05UUk9MMSwgMHgwMH0sCiAJe1RPS19XUklURSwgUkVHX0NIUk9NQV9DT05UUk9MMiwgMHgwRX0sCi0Je1RPS19TS0lQLCAweDBGLCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgwRiwgMHgwMH0sCiAJe1RPS19XUklURSwgUkVHX0NPTVBfUFJfU0FUVVJBVElPTiwgMHg4MH0sCiAJe1RPS19XUklURSwgUkVHX0NPTVBfWV9DT05UUkFTVCwgMHg4MH0sCiAJe1RPS19XUklURSwgUkVHX0NPTVBfUEJfU0FUVVJBVElPTiwgMHg4MH0sCi0Je1RPS19TS0lQLCAweDEzLCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgxMywgMHgwMH0sCiAJe1RPS19XUklURSwgUkVHX0NPTVBfWV9CUklHSFRORVNTLCAweDgwfSwKLQl7VE9LX1NLSVAsIDB4MTUsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLwotCXtUT0tfU0tJUCwgUkVHX0FWSURfU1RBUlRfUElYRUxfTFNCLCAweDU1fSwJLyogTlRTQyB0aW1pbmcgKi8KKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgxNSwgMHgwMH0sCisJLyogTlRTQyB0aW1pbmcgKi8KKwl7VE9LX1NLSVAsIFJFR19BVklEX1NUQVJUX1BJWEVMX0xTQiwgMHg1NX0sCiAJe1RPS19TS0lQLCBSRUdfQVZJRF9TVEFSVF9QSVhFTF9NU0IsIDB4MDB9LAogCXtUT0tfU0tJUCwgUkVHX0FWSURfU1RPUF9QSVhFTF9MU0IsIDB4MjV9LAogCXtUT0tfU0tJUCwgUkVHX0FWSURfU1RPUF9QSVhFTF9NU0IsIDB4MDN9LAotCXtUT0tfU0tJUCwgUkVHX0hTWU5DX1NUQVJUX1BJWEVMX0xTQiwgMHgwMH0sCS8qIE5UU0MgdGltaW5nICovCisJLyogTlRTQyB0aW1pbmcgKi8KKwl7VE9LX1NLSVAsIFJFR19IU1lOQ19TVEFSVF9QSVhFTF9MU0IsIDB4MDB9LAogCXtUT0tfU0tJUCwgUkVHX0hTWU5DX1NUQVJUX1BJWEVMX01TQiwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfSFNZTkNfU1RPUF9QSVhFTF9MU0IsIDB4NDB9LAogCXtUT0tfU0tJUCwgUkVHX0hTWU5DX1NUT1BfUElYRUxfTVNCLCAweDAwfSwKLQl7VE9LX1NLSVAsIFJFR19WU1lOQ19TVEFSVF9MSU5FX0xTQiwgMHgwNH0sCS8qIE5UU0MgdGltaW5nICovCisJLyogTlRTQyB0aW1pbmcgKi8KKwl7VE9LX1NLSVAsIFJFR19WU1lOQ19TVEFSVF9MSU5FX0xTQiwgMHgwNH0sCiAJe1RPS19TS0lQLCBSRUdfVlNZTkNfU1RBUlRfTElORV9NU0IsIDB4MDB9LAogCXtUT0tfU0tJUCwgUkVHX1ZTWU5DX1NUT1BfTElORV9MU0IsIDB4MDd9LAogCXtUT0tfU0tJUCwgUkVHX1ZTWU5DX1NUT1BfTElORV9NU0IsIDB4MDB9LAotCXtUT0tfU0tJUCwgUkVHX1ZCTEtfU1RBUlRfTElORV9MU0IsIDB4MDF9LAkvKiBOVFNDIHRpbWluZyAqLworCS8qIE5UU0MgdGltaW5nICovCisJe1RPS19TS0lQLCBSRUdfVkJMS19TVEFSVF9MSU5FX0xTQiwgMHgwMX0sCiAJe1RPS19TS0lQLCBSRUdfVkJMS19TVEFSVF9MSU5FX01TQiwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfVkJMS19TVE9QX0xJTkVfTFNCLCAweDE1fSwKIAl7VE9LX1NLSVAsIFJFR19WQkxLX1NUT1BfTElORV9NU0IsIDB4MDB9LAotCXtUT0tfU0tJUCwgMHgyNiwgMHgwMH0sCS8qIFJlc2VydmVkICovCi0Je1RPS19TS0lQLCAweDI3LCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgyNiwgMHgwMH0sCisJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1NLSVAsIDB4MjcsIDB4MDB9LAogCXtUT0tfU0tJUCwgUkVHX0ZBU1RfU1dUSUNIX0NPTlRST0wsIDB4Q0N9LAotCXtUT0tfU0tJUCwgMHgyOSwgMHgwMH0sCS8qIFJlc2VydmVkICovCisJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1NLSVAsIDB4MjksIDB4MDB9LAogCXtUT0tfU0tJUCwgUkVHX0ZBU1RfU1dUSUNIX1NDQVJUX0RFTEFZLCAweDAwfSwKLQl7VE9LX1NLSVAsIDB4MkIsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDJCLCAweDAwfSwKIAl7VE9LX1NLSVAsIFJFR19TQ0FSVF9ERUxBWSwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfQ1RJX0RFTEFZLCAweDAwfSwKIAl7VE9LX1NLSVAsIFJFR19DVElfQ09OVFJPTCwgMHgwMH0sCi0Je1RPS19TS0lQLCAweDJGLCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KLQl7VE9LX1NLSVAsIDB4MzAsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLwotCXtUT0tfU0tJUCwgMHgzMSwgMHgwMH0sCS8qIFJlc2VydmVkICovCi0Je1RPS19XUklURSwgUkVHX1NZTkNfQ09OVFJPTCwgMHgwMH0sCS8qIEhTLCBWUyBhY3RpdmUgaGlnaCAqLwotCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSMSwgMHgwMH0sCS8qIDEwLWJpdCBCVC42NTYgKi8KLQl7VE9LX1dSSVRFLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjIsIDB4MTF9LAkvKiBFbmFibGUgY2xrICYgZGF0YSAqLwotCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSMywgMHhFRX0sCS8qIEVuYWJsZSBBVklEICYgRkxEICovCi0Je1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVI0LCAweEFGfSwJLyogRW5hYmxlIFZTICYgSFMgKi8KKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgyRiwgMHgwMH0sCisJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1NLSVAsIDB4MzAsIDB4MDB9LAorCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDMxLCAweDAwfSwKKwkvKiBIUywgVlMgYWN0aXZlIGhpZ2ggKi8KKwl7VE9LX1dSSVRFLCBSRUdfU1lOQ19DT05UUk9MLCAweDAwfSwKKwkvKiAxMC1iaXQgQlQuNjU2ICovCisJe1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVIxLCAweDAwfSwKKwkvKiBFbmFibGUgY2xrICYgZGF0YSAqLworCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSMiwgMHgxMX0sCisJLyogRW5hYmxlIEFWSUQgJiBGTEQgKi8KKwl7VE9LX1dSSVRFLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjMsIDB4RUV9LAorCS8qIEVuYWJsZSBWUyAmIEhTICovCisJe1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVI0LCAweEFGfSwKIAl7VE9LX1dSSVRFLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjUsIDB4RkZ9LAogCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSNiwgMHhGRn0sCi0Je1RPS19XUklURSwgUkVHX0NMRUFSX0xPU1RfTE9DSywgMHgwMX0sCS8qIENsZWFyIHN0YXR1cyAqLworCS8qIENsZWFyIHN0YXR1cyAqLworCXtUT0tfV1JJVEUsIFJFR19DTEVBUl9MT1NUX0xPQ0ssIDB4MDF9LAogCXtUT0tfVEVSTSwgMCwgMH0sCiB9OwogCi0vKiBMaXN0IG9mIGltYWdlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IFRWUDUxNDYvNDcgZGVjb2RlcgorLyoqCisgKiBMaXN0IG9mIGltYWdlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IFRWUDUxNDYvNDcgZGVjb2RlcgogICogQ3VycmVudGx5IHdlIGFyZSB1c2luZyA4IGJpdCBtb2RlIG9ubHksIGJ1dCBjYW4gYmUKICAqIGV4dGVuZGVkIHRvIDEwLzIwIGJpdCBtb2RlLgogICovCkBAIC0yMDUsNyArMjE0LDcgQEAKIAl9LAogfTsKIAotLyoKKy8qKgogICogU3VwcG9ydGVkIHN0YW5kYXJkcyAtCiAgKgogICogQ3VycmVudGx5IHN1cHBvcnRzIHR3byBzdGFuZGFyZHMgb25seSwgbmVlZCB0byBhZGQgc3VwcG9ydCBmb3IgcmVzdCBvZiB0aGUKQEAgLTI0MCwzNSArMjQ5LDMyIEBACiAJfSwKIAkvKiBTdGFuZGFyZDogbmVlZCB0byBhZGQgZm9yIGFkZGl0aW9uYWwgc3RhbmRhcmQgKi8KIH07Ci0vKgotICogQ29udHJvbCBzdHJ1Y3R1cmUgZm9yIEF1dG8gR2FpbgotICogICAgIFRoaXMgaXMgdGVtcG9yYXJ5IGRhdGEsIHdpbGwgZ2V0IHJlcGxhY2VkIG9uY2UKLSAqICAgICB2NGwyX2N0cmxfcXVlcnlfZmlsbCBzdXBwb3J0cyBpdC4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB0dnA1MTR4X2F1dG9nYWluX2N0cmwgPSB7Ci0JLmlkID0gVjRMMl9DSURfQVVUT0dBSU4sCi0JLm5hbWUgPSAiR2FpbiwgQXV0b21hdGljIiwKLQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JLm1pbmltdW0gPSAwLAotCS5tYXhpbXVtID0gMSwKLQkuc3RlcCA9IDEsCi0JLmRlZmF1bHRfdmFsdWUgPSAxLAotfTsKIAotLyoKLSAqIFJlYWQgYSB2YWx1ZSBmcm9tIGEgcmVnaXN0ZXIgaW4gYW4gVFZQNTE0Ni80NyBkZWNvZGVyIGRldmljZS4KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICp0b19kZWNvZGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHR2cDUxNHhfZGVjb2Rlciwgc2QpOworfQorCisKKy8qKgorICogdHZwNTE0eF9yZWFkX3JlZygpIC0gUmVhZCBhIHZhbHVlIGZyb20gYSByZWdpc3RlciBpbiBhbiBUVlA1MTQ2LzQ3LgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAcmVnOiBUVlA1MTQ2LzQ3IHJlZ2lzdGVyIGFkZHJlc3MKKyAqCiAgKiBSZXR1cm5zIHZhbHVlIHJlYWQgaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gKC0xKSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgdHZwNTE0eF9yZWFkX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW50IHR2cDUxNHhfcmVhZF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogewotCWludCBlcnI7Ci0JaW50IHJldHJ5ID0gMDsKKwlpbnQgZXJyLCByZXRyeSA9IDA7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiByZWFkX2FnYWluOgogCiAJZXJyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIAlpZiAoZXJyID09IC0xKSB7CiAJCWlmIChyZXRyeSA8PSBJMkNfUkVUUllfQ09VTlQpIHsKLQkJCXY0bF93YXJuKGNsaWVudCwgIlJlYWQ6IHJldHJ5IC4uLiAlZFxuIiwgcmV0cnkpOworCQkJdjRsMl93YXJuKHNkLCAiUmVhZDogcmV0cnkgLi4uICVkXG4iLCByZXRyeSk7CiAJCQlyZXRyeSsrOwogCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOwogCQkJZ290byByZWFkX2FnYWluOwpAQCAtMjc4LDIwICsyODQsMzkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKgorLyoqCisgKiBkdW1wX3JlZygpIC0gZHVtcCB0aGUgcmVnaXN0ZXIgY29udGVudCBvZiBUVlA1MTQ2LzQ3LgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAcmVnOiBUVlA1MTQ2LzQ3IHJlZ2lzdGVyIGFkZHJlc3MKKyAqLworc3RhdGljIHZvaWQgZHVtcF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSB0dnA1MTR4X3JlYWRfcmVnKHNkLCByZWcpOworCXY0bDJfaW5mbyhzZCwgIlJlZygweCUuMlgpOiAweCUuMlhcbiIsIHJlZywgdmFsKTsKK30KKworLyoqCisgKiB0dnA1MTR4X3dyaXRlX3JlZygpIC0gV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIGluIFRWUDUxNDYvNDcKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQHJlZzogVFZQNTE0Ni80NyByZWdpc3RlciBhZGRyZXNzCisgKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSByZWdpc3RlcgorICoKICAqIFdyaXRlIGEgdmFsdWUgdG8gYSByZWdpc3RlciBpbiBhbiBUVlA1MTQ2LzQ3IGRlY29kZXIgZGV2aWNlLgogICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCB0dnA1MTR4X3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKK3N0YXRpYyBpbnQgdHZwNTE0eF93cml0ZV9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWwpCiB7Ci0JaW50IGVycjsKLQlpbnQgcmV0cnkgPSAwOworCWludCBlcnIsIHJldHJ5ID0gMDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIHdyaXRlX2FnYWluOgogCiAJZXJyID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKIAlpZiAoZXJyKSB7CiAJCWlmIChyZXRyeSA8PSBJMkNfUkVUUllfQ09VTlQpIHsKLQkJCXY0bF93YXJuKGNsaWVudCwgIldyaXRlOiByZXRyeSAuLi4gJWRcbiIsIHJldHJ5KTsKKwkJCXY0bDJfd2FybihzZCwgIldyaXRlOiByZXRyeSAuLi4gJWRcbiIsIHJldHJ5KTsKIAkJCXJldHJ5Kys7CiAJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CiAJCQlnb3RvIHdyaXRlX2FnYWluOwpAQCAtMzAxLDE3ICszMjYsMTkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKgotICogdHZwNTE0eF93cml0ZV9yZWdzIDogSW5pdGlhbGl6ZXMgYSBsaXN0IG9mIFRWUDUxNDYvNDcgcmVnaXN0ZXJzCisvKioKKyAqIHR2cDUxNHhfd3JpdGVfcmVncygpIDogSW5pdGlhbGl6ZXMgYSBsaXN0IG9mIFRWUDUxNDYvNDcgcmVnaXN0ZXJzCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEByZWdsaXN0OiBsaXN0IG9mIFRWUDUxNDYvNDcgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMKKyAqCisgKiBJbml0aWFsaXplcyBhIGxpc3Qgb2YgVFZQNTE0Ni80NyByZWdpc3RlcnM6LQogICoJCWlmIHRva2VuIGlzIFRPS19URVJNLCB0aGVuIGVudGlyZSB3cml0ZSBvcGVyYXRpb24gdGVybWluYXRlcwogICoJCWlmIHRva2VuIGlzIFRPS19ERUxBWSwgdGhlbiBhIGRlbGF5IG9mICd2YWwnIG1zZWMgaXMgaW50cm9kdWNlZAogICoJCWlmIHRva2VuIGlzIFRPS19TS0lQLCB0aGVuIHRoZSByZWdpc3RlciB3cml0ZSBpcyBza2lwcGVkCiAgKgkJaWYgdG9rZW4gaXMgVE9LX1dSSVRFLCB0aGVuIHRoZSByZWdpc3RlciB3cml0ZSBpcyBwZXJmb3JtZWQKLSAqCi0gKiByZWdsaXN0IC0gbGlzdCBvZiByZWdpc3RlcnMgdG8gYmUgd3JpdHRlbgogICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCB0dnA1MTR4X3dyaXRlX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgdHZwNTE0eF93cml0ZV9yZWdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9yZWcgcmVnbGlzdFtdKQogewogCWludCBlcnI7CkBAIC0zMjYsMzEgKzM1MywzMyBAQAogCQlpZiAobmV4dC0+dG9rZW4gPT0gVE9LX1NLSVApCiAJCQljb250aW51ZTsKIAotCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhjbGllbnQsIG5leHQtPnJlZywgKHU4KSBuZXh0LT52YWwpOworCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgbmV4dC0+cmVnLCAodTgpIG5leHQtPnZhbCk7CiAJCWlmIChlcnIpIHsKLQkJCXY0bF9lcnIoY2xpZW50LCAiV3JpdGUgZmFpbGVkLiBFcnJbJWRdXG4iLCBlcnIpOworCQkJdjRsMl9lcnIoc2QsICJXcml0ZSBmYWlsZWQuIEVyclslZF1cbiIsIGVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCXJldHVybiAwOwogfQogCi0vKgotICogdHZwNTE0eF9nZXRfY3VycmVudF9zdGQ6Ci0gKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YW5kYXJkIGRldGVjdGVkIGJ5IFRWUDUxNDYvNDcKKy8qKgorICogdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoKSA6IEdldCB0aGUgY3VycmVudCBzdGFuZGFyZCBkZXRlY3RlZCBieSBUVlA1MTQ2LzQ3CisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqCisgKiBHZXQgY3VycmVudCBzdGFuZGFyZCBkZXRlY3RlZCBieSBUVlA1MTQ2LzQ3LCBTVERfSU5WQUxJRCBpZiB0aGVyZSBpcyBubworICogc3RhbmRhcmQgZGV0ZWN0ZWQuCiAgKi8KLXN0YXRpYyBlbnVtIHR2cDUxNHhfc3RkIHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKHN0cnVjdCB0dnA1MTR4X2RlY29kZXIKLQkJCQkJCSpkZWNvZGVyKQorc3RhdGljIGVudW0gdHZwNTE0eF9zdGQgdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAl1OCBzdGQsIHN0ZF9zdGF0dXM7CiAKLQlzdGQgPSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZJREVPX1NURCk7Ci0JaWYgKChzdGQgJiBWSURFT19TVERfTUFTSykgPT0gVklERU9fU1REX0FVVE9fU1dJVENIX0JJVCkgeworCXN0ZCA9IHR2cDUxNHhfcmVhZF9yZWcoc2QsIFJFR19WSURFT19TVEQpOworCWlmICgoc3RkICYgVklERU9fU1REX01BU0spID09IFZJREVPX1NURF9BVVRPX1NXSVRDSF9CSVQpCiAJCS8qIHVzZSB0aGUgc3RhbmRhcmQgc3RhdHVzIHJlZ2lzdGVyICovCi0JCXN0ZF9zdGF0dXMgPSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwKLQkJCQlSRUdfVklERU9fU1REX1NUQVRVUyk7Ci0JfSBlbHNlCi0JCXN0ZF9zdGF0dXMgPSBzdGQ7CS8qIHVzZSB0aGUgc3RhbmRhcmQgcmVnaXN0ZXIgaXRzZWxmICovCisJCXN0ZF9zdGF0dXMgPSB0dnA1MTR4X3JlYWRfcmVnKHNkLCBSRUdfVklERU9fU1REX1NUQVRVUyk7CisJZWxzZQorCQkvKiB1c2UgdGhlIHN0YW5kYXJkIHJlZ2lzdGVyIGl0c2VsZiAqLworCQlzdGRfc3RhdHVzID0gc3RkOwogCiAJc3dpdGNoIChzdGRfc3RhdHVzICYgVklERU9fU1REX01BU0spIHsKIAljYXNlIFZJREVPX1NURF9OVFNDX01KX0JJVDoKQEAgLTM2Niw5NCArMzk1LDk5IEBACiAJcmV0dXJuIFNURF9JTlZBTElEOwogfQogCi0vKgotICogVFZQNTE0Ni80NyByZWdpc3RlciBkdW1wIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIHR2cDUxNHhfcmVnX2R1bXAoc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcikKKy8qIFRWUDUxNDYvNDcgcmVnaXN0ZXIgZHVtcCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgdHZwNTE0eF9yZWdfZHVtcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXU4IHZhbHVlOwotCi0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfSU5QVVRfU0VMLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQUZFX0dBSU5fQ1RSTCwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZJREVPX1NURCwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09QRVJBVElPTl9NT0RFLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ09MT1JfS0lMTEVSLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfTFVNQV9DT05UUk9MMSwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0xVTUFfQ09OVFJPTDIsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19MVU1BX0NPTlRST0wzLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQlJJR0hUTkVTUywgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NPTlRSQVNULCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfU0FUVVJBVElPTiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0hVRSwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NIUk9NQV9DT05UUk9MMSwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NIUk9NQV9DT05UUk9MMiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NPTVBfUFJfU0FUVVJBVElPTiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NPTVBfWV9DT05UUkFTVCwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NPTVBfUEJfU0FUVVJBVElPTiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NPTVBfWV9CUklHSFRORVNTLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQVZJRF9TVEFSVF9QSVhFTF9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19BVklEX1NUQVJUX1BJWEVMX01TQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0FWSURfU1RPUF9QSVhFTF9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19BVklEX1NUT1BfUElYRUxfTVNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfSFNZTkNfU1RBUlRfUElYRUxfTFNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfSFNZTkNfU1RBUlRfUElYRUxfTVNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfSFNZTkNfU1RPUF9QSVhFTF9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19IU1lOQ19TVE9QX1BJWEVMX01TQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTFNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVlNZTkNfU1RBUlRfTElORV9NU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WU1lOQ19TVE9QX0xJTkVfTFNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVlNZTkNfU1RPUF9MSU5FX01TQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZCTEtfU1RBUlRfTElORV9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WQkxLX1NUQVJUX0xJTkVfTVNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVkJMS19TVE9QX0xJTkVfTFNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVkJMS19TVE9QX0xJTkVfTVNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfU1lOQ19DT05UUk9MLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjEsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PVVRQVVRfRk9STUFUVEVSMiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVIzLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjQsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PVVRQVVRfRk9STUFUVEVSNSwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVI2LCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ0xFQVJfTE9TVF9MT0NLLCB2YWx1ZSk7CisJZHVtcF9yZWcoc2QsIFJFR19JTlBVVF9TRUwpOworCWR1bXBfcmVnKHNkLCBSRUdfQUZFX0dBSU5fQ1RSTCk7CisJZHVtcF9yZWcoc2QsIFJFR19WSURFT19TVEQpOworCWR1bXBfcmVnKHNkLCBSRUdfT1BFUkFUSU9OX01PREUpOworCWR1bXBfcmVnKHNkLCBSRUdfQ09MT1JfS0lMTEVSKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0xVTUFfQ09OVFJPTDEpOworCWR1bXBfcmVnKHNkLCBSRUdfTFVNQV9DT05UUk9MMik7CisJZHVtcF9yZWcoc2QsIFJFR19MVU1BX0NPTlRST0wzKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0JSSUdIVE5FU1MpOworCWR1bXBfcmVnKHNkLCBSRUdfQ09OVFJBU1QpOworCWR1bXBfcmVnKHNkLCBSRUdfU0FUVVJBVElPTik7CisJZHVtcF9yZWcoc2QsIFJFR19IVUUpOworCWR1bXBfcmVnKHNkLCBSRUdfQ0hST01BX0NPTlRST0wxKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0NIUk9NQV9DT05UUk9MMik7CisJZHVtcF9yZWcoc2QsIFJFR19DT01QX1BSX1NBVFVSQVRJT04pOworCWR1bXBfcmVnKHNkLCBSRUdfQ09NUF9ZX0NPTlRSQVNUKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0NPTVBfUEJfU0FUVVJBVElPTik7CisJZHVtcF9yZWcoc2QsIFJFR19DT01QX1lfQlJJR0hUTkVTUyk7CisJZHVtcF9yZWcoc2QsIFJFR19BVklEX1NUQVJUX1BJWEVMX0xTQik7CisJZHVtcF9yZWcoc2QsIFJFR19BVklEX1NUQVJUX1BJWEVMX01TQik7CisJZHVtcF9yZWcoc2QsIFJFR19BVklEX1NUT1BfUElYRUxfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0FWSURfU1RPUF9QSVhFTF9NU0IpOworCWR1bXBfcmVnKHNkLCBSRUdfSFNZTkNfU1RBUlRfUElYRUxfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0hTWU5DX1NUQVJUX1BJWEVMX01TQik7CisJZHVtcF9yZWcoc2QsIFJFR19IU1lOQ19TVE9QX1BJWEVMX0xTQik7CisJZHVtcF9yZWcoc2QsIFJFR19IU1lOQ19TVE9QX1BJWEVMX01TQik7CisJZHVtcF9yZWcoc2QsIFJFR19WU1lOQ19TVEFSVF9MSU5FX0xTQik7CisJZHVtcF9yZWcoc2QsIFJFR19WU1lOQ19TVEFSVF9MSU5FX01TQik7CisJZHVtcF9yZWcoc2QsIFJFR19WU1lOQ19TVE9QX0xJTkVfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZTWU5DX1NUT1BfTElORV9NU0IpOworCWR1bXBfcmVnKHNkLCBSRUdfVkJMS19TVEFSVF9MSU5FX0xTQik7CisJZHVtcF9yZWcoc2QsIFJFR19WQkxLX1NUQVJUX0xJTkVfTVNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZCTEtfU1RPUF9MSU5FX0xTQik7CisJZHVtcF9yZWcoc2QsIFJFR19WQkxLX1NUT1BfTElORV9NU0IpOworCWR1bXBfcmVnKHNkLCBSRUdfU1lOQ19DT05UUk9MKTsKKwlkdW1wX3JlZyhzZCwgUkVHX09VVFBVVF9GT1JNQVRURVIxKTsKKwlkdW1wX3JlZyhzZCwgUkVHX09VVFBVVF9GT1JNQVRURVIyKTsKKwlkdW1wX3JlZyhzZCwgUkVHX09VVFBVVF9GT1JNQVRURVIzKTsKKwlkdW1wX3JlZyhzZCwgUkVHX09VVFBVVF9GT1JNQVRURVI0KTsKKwlkdW1wX3JlZyhzZCwgUkVHX09VVFBVVF9GT1JNQVRURVI1KTsKKwlkdW1wX3JlZyhzZCwgUkVHX09VVFBVVF9GT1JNQVRURVI2KTsKKwlkdW1wX3JlZyhzZCwgUkVHX0NMRUFSX0xPU1RfTE9DSyk7CiB9CiAKLS8qCi0gKiBDb25maWd1cmUgdGhlIFRWUDUxNDYvNDcgd2l0aCB0aGUgY3VycmVudCByZWdpc3RlciBzZXR0aW5ncworLyoqCisgKiB0dnA1MTR4X2NvbmZpZ3VyZSgpIC0gQ29uZmlndXJlIHRoZSBUVlA1MTQ2LzQ3IHJlZ2lzdGVycworICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAZGVjb2RlcjogcHRyIHRvIHR2cDUxNHhfZGVjb2RlciBzdHJ1Y3R1cmUKKyAqCiAgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHR2cDUxNHhfY29uZmlndXJlKHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIpCitzdGF0aWMgaW50IHR2cDUxNHhfY29uZmlndXJlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIpCiB7CiAJaW50IGVycjsKIAogCS8qIGNvbW1vbiByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLwogCWVyciA9Ci0JICAgIHR2cDUxNHhfd3JpdGVfcmVncyhkZWNvZGVyLT5jbGllbnQsIGRlY29kZXItPnR2cDUxNHhfcmVncyk7CisJICAgIHR2cDUxNHhfd3JpdGVfcmVncyhzZCwgZGVjb2Rlci0+dHZwNTE0eF9yZWdzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKGRlYnVnKQotCQl0dnA1MTR4X3JlZ19kdW1wKGRlY29kZXIpOworCQl0dnA1MTR4X3JlZ19kdW1wKHNkKTsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogRGV0ZWN0IGlmIGFuIHR2cDUxNHggaXMgcHJlc2VudCwgYW5kIGlmIHNvIHdoaWNoIHJldmlzaW9uLgorLyoqCisgKiB0dnA1MTR4X2RldGVjdCgpIC0gRGV0ZWN0IGlmIGFuIHR2cDUxNHggaXMgcHJlc2VudCwgYW5kIGlmIHNvIHdoaWNoIHJldmlzaW9uLgorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBkZWNvZGVyOiBwb2ludGVyIHRvIHR2cDUxNHhfZGVjb2RlciBzdHJ1Y3R1cmUKKyAqCiAgKiBBIGRldmljZSBpcyBjb25zaWRlcmVkIHRvIGJlIGRldGVjdGVkIGlmIHRoZSBjaGlwIElEIChMU0IgYW5kIE1TQikKICAqIHJlZ2lzdGVycyBtYXRjaCB0aGUgZXhwZWN0ZWQgdmFsdWVzLgogICogQW55IHZhbHVlIG9mIHRoZSByb20gdmVyc2lvbiByZWdpc3RlciBpcyBhY2NlcHRlZC4KICAqIFJldHVybnMgRU5PREVWIGVycm9yIG51bWJlciBpZiBubyBkZXZpY2UgaXMgZGV0ZWN0ZWQsIG9yIHplcm8KICAqIGlmIGEgZGV2aWNlIGlzIGRldGVjdGVkLgogICovCi1zdGF0aWMgaW50IHR2cDUxNHhfZGV0ZWN0KHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIpCitzdGF0aWMgaW50IHR2cDUxNHhfZGV0ZWN0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIpCiB7CiAJdTggY2hpcF9pZF9tc2IsIGNoaXBfaWRfbHNiLCByb21fdmVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWNoaXBfaWRfbXNiID0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DSElQX0lEX01TQik7Ci0JY2hpcF9pZF9sc2IgPSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NISVBfSURfTFNCKTsKLQlyb21fdmVyID0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19ST01fVkVSU0lPTik7CisJY2hpcF9pZF9tc2IgPSB0dnA1MTR4X3JlYWRfcmVnKHNkLCBSRUdfQ0hJUF9JRF9NU0IpOworCWNoaXBfaWRfbHNiID0gdHZwNTE0eF9yZWFkX3JlZyhzZCwgUkVHX0NISVBfSURfTFNCKTsKKwlyb21fdmVyID0gdHZwNTE0eF9yZWFkX3JlZyhzZCwgUkVHX1JPTV9WRVJTSU9OKTsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCSAiY2hpcCBpZCBkZXRlY3RlZCBtc2I6MHgleCBsc2I6MHgleCByb20gdmVyc2lvbjoweCV4XG4iLAogCQkgY2hpcF9pZF9tc2IsIGNoaXBfaWRfbHNiLCByb21fdmVyKTsKIAlpZiAoKGNoaXBfaWRfbXNiICE9IFRWUDUxNFhfQ0hJUF9JRF9NU0IpCkBAIC00NjIsMzggKzQ5NiwzMCBAQAogCQkvKiBXZSBkaWRuJ3QgcmVhZCB0aGUgdmFsdWVzIHdlIGV4cGVjdGVkLCBzbyB0aGlzIG11c3Qgbm90IGJlCiAJCSAqIGFuIFRWUDUxNDYvNDcuCiAJCSAqLwotCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCSJjaGlwIGlkIG1pc21hdGNoIG1zYjoweCV4IGxzYjoweCV4XG4iLAotCQkJY2hpcF9pZF9tc2IsIGNoaXBfaWRfbHNiKTsKKwkJdjRsMl9lcnIoc2QsICJjaGlwIGlkIG1pc21hdGNoIG1zYjoweCV4IGxzYjoweCV4XG4iLAorCQkJCWNoaXBfaWRfbXNiLCBjaGlwX2lkX2xzYik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWRlY29kZXItPnZlciA9IHJvbV92ZXI7Ci0JZGVjb2Rlci0+c3RhdGUgPSBTVEFURV9ERVRFQ1RFRDsKIAotCXY0bF9pbmZvKGRlY29kZXItPmNsaWVudCwKLQkJCSIlcyBmb3VuZCBhdCAweCV4ICglcylcbiIsIGRlY29kZXItPmNsaWVudC0+bmFtZSwKLQkJCWRlY29kZXItPmNsaWVudC0+YWRkciA8PCAxLAotCQkJZGVjb2Rlci0+Y2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwl2NGwyX2luZm8oc2QsICIlcyAoVmVyc2lvbiAtIDB4JS4yeCkgZm91bmQgYXQgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5uYW1lLCBkZWNvZGVyLT52ZXIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEZvbGxvd2luZyBhcmUgZGVjb2RlciBpbnRlcmZhY2UgZnVuY3Rpb25zIGltcGxlbWVudGVkIGJ5Ci0gKiBUVlA1MTQ2LzQ3IGRlY29kZXIgZHJpdmVyLgotICovCi0KIC8qKgotICogaW9jdGxfcXVlcnlzdGQgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19RVUVSWVNURCBpb2N0bAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X3F1ZXJ5c3RkKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHF1ZXJ5c3RkCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQogICogQHN0ZF9pZDogc3RhbmRhcmQgVjRMMiBzdGRfaWQgaW9jdGwgZW51bQogICoKICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhbmRhcmQgZGV0ZWN0ZWQgYnkgVFZQNTE0Ni80Ny4gSWYgbm8gYWN0aXZlIGlucHV0IGlzCiAgKiBkZXRlY3RlZCwgcmV0dXJucyAtRUlOVkFMCiAgKi8KLXN0YXRpYyBpbnQgaW9jdGxfcXVlcnlzdGQoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3N0YXRpYyBpbnQgdHZwNTE0eF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkX2lkKQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAllbnVtIHR2cDUxNHhfc3RkIGN1cnJlbnRfc3RkOwogCWVudW0gdHZwNTE0eF9pbnB1dCBpbnB1dF9zZWw7CiAJdTggc3luY19sb2NrX3N0YXR1cywgbG9ja19tYXNrOwpAQCAtNTAyLDExICs1MjgsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBnZXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgKi8KLQljdXJyZW50X3N0ZCA9IHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKGRlY29kZXIpOworCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoc2QpOwogCWlmIChjdXJyZW50X3N0ZCA9PSBTVERfSU5WQUxJRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbnB1dF9zZWwgPSBkZWNvZGVyLT5yb3V0ZS5pbnB1dDsKKwlpbnB1dF9zZWwgPSBkZWNvZGVyLT5pbnB1dDsKIAogCXN3aXRjaCAoaW5wdXRfc2VsKSB7CiAJY2FzZSBJTlBVVF9DVkJTX1ZJMUE6CkBAIC01NDQsNDIgKzU3MCwzOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogY2hlY2sgd2hldGhlciBzaWduYWwgaXMgbG9ja2VkICovCi0Jc3luY19sb2NrX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfU1RBVFVTMSk7CisJc3luY19sb2NrX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoc2QsIFJFR19TVEFUVVMxKTsKIAlpZiAobG9ja19tYXNrICE9IChzeW5jX2xvY2tfc3RhdHVzICYgbG9ja19tYXNrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CS8qIE5vIGlucHV0IGRldGVjdGVkICovCiAKIAlkZWNvZGVyLT5jdXJyZW50X3N0ZCA9IGN1cnJlbnRfc3RkOwogCSpzdGRfaWQgPSBkZWNvZGVyLT5zdGRfbGlzdFtjdXJyZW50X3N0ZF0uc3RhbmRhcmQuaWQ7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsICJDdXJyZW50IFNURDogJXMiLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkN1cnJlbnQgU1REOiAlcyIsCiAJCQlkZWNvZGVyLT5zdGRfbGlzdFtjdXJyZW50X3N0ZF0uc3RhbmRhcmQubmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogaW9jdGxfc19zdGQgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19TX1NURCBpb2N0bAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X3Nfc3RkKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHNfc3RkCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQogICogQHN0ZF9pZDogc3RhbmRhcmQgVjRMMiB2NGwyX3N0ZF9pZCBpb2N0bCBlbnVtCiAgKgogICogSWYgc3RkX2lkIGlzIHN1cHBvcnRlZCwgc2V0cyB0aGUgcmVxdWVzdGVkIHN0YW5kYXJkLiBPdGhlcndpc2UsIHJldHVybnMKICAqIC1FSU5WQUwKICAqLwotc3RhdGljIGludCBpb2N0bF9zX3N0ZChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCB2NGwyX3N0ZF9pZCAqc3RkX2lkKQorc3RhdGljIGludCB0dnA1MTR4X3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZF9pZCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJaW50IGVyciwgaTsKIAotCWlmIChzdGRfaWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgZGVjb2Rlci0+bnVtX3N0ZHM7IGkrKykKLQkJaWYgKCpzdGRfaWQgJiBkZWNvZGVyLT5zdGRfbGlzdFtpXS5zdGFuZGFyZC5pZCkKKwkJaWYgKHN0ZF9pZCAmIGRlY29kZXItPnN0ZF9saXN0W2ldLnN0YW5kYXJkLmlkKQogCQkJYnJlYWs7CiAKIAlpZiAoKGkgPT0gZGVjb2Rlci0+bnVtX3N0ZHMpIHx8IChpID09IFNURF9JTlZBTElEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WSURFT19TVEQsCisJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoc2QsIFJFR19WSURFT19TVEQsCiAJCQkJZGVjb2Rlci0+c3RkX2xpc3RbaV0udmlkZW9fc3RkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtNTg4LDI0ICs2MTEsMjYgQEAKIAlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1ZJREVPX1NURF0udmFsID0KIAkJZGVjb2Rlci0+c3RkX2xpc3RbaV0udmlkZW9fc3RkOwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LCAiU3RhbmRhcmQgc2V0IHRvOiAlcyIsCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU3RhbmRhcmQgc2V0IHRvOiAlcyIsCiAJCQlkZWNvZGVyLT5zdGRfbGlzdFtpXS5zdGFuZGFyZC5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBpb2N0bF9zX3JvdXRpbmcgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19TX0lOUFVUIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBpbmRleDogbnVtYmVyIG9mIHRoZSBpbnB1dAorICogdHZwNTE0eF9zX3JvdXRpbmcoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3Igc19yb3V0aW5nCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGlucHV0OiBpbnB1dCBzZWxlY3RvciBmb3Igcm91dGluZyB0aGUgc2lnbmFsCisgKiBAb3V0cHV0OiBvdXRwdXQgc2VsZWN0b3IgZm9yIHJvdXRpbmcgdGhlIHNpZ25hbAorICogQGNvbmZpZzogY29uZmlnIHZhbHVlLiBOb3QgdXNlZAogICoKICAqIElmIGluZGV4IGlzIHZhbGlkLCBzZWxlY3RzIHRoZSByZXF1ZXN0ZWQgaW5wdXQuIE90aGVyd2lzZSwgcmV0dXJucyAtRUlOVkFMIGlmCiAgKiB0aGUgaW5wdXQgaXMgbm90IHN1cHBvcnRlZCBvciB0aGVyZSBpcyBubyBhY3RpdmUgc2lnbmFsIHByZXNlbnQgaW4gdGhlCiAgKiBzZWxlY3RlZCBpbnB1dC4KICAqLwotc3RhdGljIGludCBpb2N0bF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywKLQkJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3N0YXRpYyBpbnQgdHZwNTE0eF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQl1MzIgaW5wdXQsIHUzMiBvdXRwdXQsIHUzMiBjb25maWcpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHRvX2RlY29kZXIoc2QpOwogCWludCBlcnI7CiAJZW51bSB0dnA1MTR4X2lucHV0IGlucHV0X3NlbDsKIAllbnVtIHR2cDUxNHhfb3V0cHV0IG91dHB1dF9zZWw7CkBAIC02MTMsMjAgKzYzOCwyMSBAQAogCXU4IHN5bmNfbG9ja19zdGF0dXMsIGxvY2tfbWFzazsKIAlpbnQgdHJ5X2NvdW50ID0gTE9DS19SRVRSWV9DT1VOVDsKIAotCWlmICgoIXJvdXRlKSB8fCAocm91dGUtPmlucHV0ID49IElOUFVUX0lOVkFMSUQpIHx8Ci0JCQkocm91dGUtPm91dHB1dCA+PSBPVVRQVVRfSU5WQUxJRCkpCi0JCXJldHVybiAtRUlOVkFMOwkvKiBJbmRleCBvdXQgb2YgYm91bmQgKi8KKwlpZiAoKGlucHV0ID49IElOUFVUX0lOVkFMSUQpIHx8CisJCQkob3V0cHV0ID49IE9VVFBVVF9JTlZBTElEKSkKKwkJLyogSW5kZXggb3V0IG9mIGJvdW5kICovCisJCXJldHVybiAtRUlOVkFMOwogCi0JaW5wdXRfc2VsID0gcm91dGUtPmlucHV0OwotCW91dHB1dF9zZWwgPSByb3V0ZS0+b3V0cHV0OworCWlucHV0X3NlbCA9IGlucHV0OworCW91dHB1dF9zZWwgPSBvdXRwdXQ7CiAKLQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19JTlBVVF9TRUwsIGlucHV0X3NlbCk7CisJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoc2QsIFJFR19JTlBVVF9TRUwsIGlucHV0X3NlbCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCW91dHB1dF9zZWwgfD0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsCisJb3V0cHV0X3NlbCB8PSB0dnA1MTR4X3JlYWRfcmVnKHNkLAogCQkJUkVHX09VVFBVVF9GT1JNQVRURVIxKSAmIDB4NzsKLQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PVVRQVVRfRk9STUFUVEVSMSwKKwllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgUkVHX09VVFBVVF9GT1JNQVRURVIxLAogCQkJb3V0cHV0X3NlbCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTYzNyw3ICs2NjMsNyBAQAogCS8qIENsZWFyIHN0YXR1cyAqLwogCW1zbGVlcChMT0NLX1JFVFJZX0RFTEFZKTsKIAllcnIgPQotCSAgICB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DTEVBUl9MT1NUX0xPQ0ssIDB4MDEpOworCSAgICB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgUkVHX0NMRUFSX0xPU1RfTE9DSywgMHgwMSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjcyLDcgKzY5OCw3IEBACiAJCWxvY2tfbWFzayA9IFNUQVRVU19IT1JaX1NZTkNfTE9DS19CSVQgfAogCQkJU1RBVFVTX1ZJUlRfU1lOQ19MT0NLX0JJVDsKIAkJYnJlYWs7Ci0JLypOZWVkIHRvIGFkZCBvdGhlciBpbnRlcmZhY2VzKi8KKwkvKiBOZWVkIHRvIGFkZCBvdGhlciBpbnRlcmZhY2VzKi8KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC02ODIsNDIgKzcwOCw0MSBAQAogCQltc2xlZXAoTE9DS19SRVRSWV9ERUxBWSk7CiAKIAkJLyogZ2V0IHRoZSBjdXJyZW50IHN0YW5kYXJkIGZvciBmdXR1cmUgcmVmZXJlbmNlICovCi0JCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoZGVjb2Rlcik7CisJCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoc2QpOwogCQlpZiAoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpCiAJCQljb250aW51ZTsKIAotCQlzeW5jX2xvY2tfc3RhdHVzID0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsCisJCXN5bmNfbG9ja19zdGF0dXMgPSB0dnA1MTR4X3JlYWRfcmVnKHNkLAogCQkJCVJFR19TVEFUVVMxKTsKIAkJaWYgKGxvY2tfbWFzayA9PSAoc3luY19sb2NrX3N0YXR1cyAmIGxvY2tfbWFzaykpCi0JCQlicmVhazsJLyogSW5wdXQgZGV0ZWN0ZWQgKi8KKwkJCS8qIElucHV0IGRldGVjdGVkICovCisJCQlicmVhazsKIAl9CiAKIAlpZiAoKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKSB8fCAodHJ5X2NvdW50IDwgMCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGVjb2Rlci0+Y3VycmVudF9zdGQgPSBjdXJyZW50X3N0ZDsKLQlkZWNvZGVyLT5yb3V0ZS5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKLQlkZWNvZGVyLT5yb3V0ZS5vdXRwdXQgPSByb3V0ZS0+b3V0cHV0OworCWRlY29kZXItPmlucHV0ID0gaW5wdXQ7CisJZGVjb2Rlci0+b3V0cHV0ID0gb3V0cHV0OwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAotCQkJIklucHV0IHNldCB0bzogJWQsIHN0ZCA6ICVkIiwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJJbnB1dCBzZXQgdG86ICVkLCBzdGQgOiAlZCIsCiAJCQlpbnB1dF9zZWwsIGN1cnJlbnRfc3RkKTsKIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqIGlvY3RsX3F1ZXJ5Y3RybCAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX1FVRVJZQ1RSTCBpb2N0bAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X3F1ZXJ5Y3RybCgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBxdWVyeWN0cmwKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAcWN0cmw6IHN0YW5kYXJkIFY0TDIgdjRsMl9xdWVyeWN0cmwgc3RydWN0dXJlCiAgKgogICogSWYgdGhlIHJlcXVlc3RlZCBjb250cm9sIGlzIHN1cHBvcnRlZCwgcmV0dXJucyB0aGUgY29udHJvbCBpbmZvcm1hdGlvbi4KICAqIE90aGVyd2lzZSwgcmV0dXJucyAtRUlOVkFMIGlmIHRoZSBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWlvY3RsX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQordHZwNTE0eF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAogCWlmIChxY3RybCA9PSBOVUxMKQpAQCAtNzI1LDEzICs3NTAsMTMgQEAKIAogCXN3aXRjaCAocWN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkvKiBCcmlnaHRuZXNzIHN1cHBvcnRlZCBpcyAoMC0yNTUpLAotCQkgKi8KKwkJLyogQnJpZ2h0bmVzcyBzdXBwb3J0ZWQgaXMgKDAtMjU1KSwgKi8KIAkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMTI4KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCS8qIFNhdHVyYXRpb24gYW5kIENvbnRyYXN0IHN1cHBvcnRlZCBpcyAtCisJCS8qKgorCQkgKiBTYXR1cmF0aW9uIGFuZCBDb250cmFzdCBzdXBwb3J0ZWQgaXMgLQogCQkgKglDb250cmFzdDogMCAtIDI1NSAoRGVmYXVsdCAtIDEyOCkKIAkJICoJU2F0dXJhdGlvbjogMCAtIDI1NSAoRGVmYXVsdCAtIDEyOCkKIAkJICovCkBAIC03NDQsMzAgKzc2OSwyNyBAQAogCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgLTE4MCwgMTgwLCAxODAsIDApOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgotCQkvKiBBdXRvZ2FpbiBpcyBlaXRoZXIgMCBvciAxKi8KLQkJbWVtY3B5KHFjdHJsLCAmdHZwNTE0eF9hdXRvZ2Fpbl9jdHJsLAotCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwpKTsKLQkJZXJyID0gMDsKKwkJLyoqCisJCSAqIEF1dG8gR2FpbiBzdXBwb3J0ZWQgaXMgLQorCQkgKiAJMCAtIDEgKERlZmF1bHQgLSAxKQorCQkgKi8KKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCSJpbnZhbGlkIGNvbnRyb2wgaWQgJWRcbiIsIHFjdHJsLT5pZCk7CisJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBjb250cm9sIGlkICVkXG4iLCBxY3RybC0+aWQpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwKLQkJCSJRdWVyeSBDb250cm9sOiAlcyA6IE1pbiAtICVkLCBNYXggLSAlZCwgRGVmIC0gJWQiLAotCQkJcWN0cmwtPm5hbWUsCi0JCQlxY3RybC0+bWluaW11bSwKLQkJCXFjdHJsLT5tYXhpbXVtLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlF1ZXJ5IENvbnRyb2w6JXM6IE1pbiAtICVkLCBNYXggLSAlZCwgRGVmIC0gJWQiLAorCQkJcWN0cmwtPm5hbWUsIHFjdHJsLT5taW5pbXVtLCBxY3RybC0+bWF4aW11bSwKIAkJCXFjdHJsLT5kZWZhdWx0X3ZhbHVlKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIC8qKgotICogaW9jdGxfZ19jdHJsIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfR19DVFJMIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIHR2cDUxNHhfZ19jdHJsKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIGdfY3RybAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKICAqIEBjdHJsOiBwb2ludGVyIHRvIHY0bDJfY29udHJvbCBzdHJ1Y3R1cmUKICAqCiAgKiBJZiB0aGUgcmVxdWVzdGVkIGNvbnRyb2wgaXMgc3VwcG9ydGVkLCByZXR1cm5zIHRoZSBjb250cm9sJ3MgY3VycmVudApAQCAtNzc1LDkgKzc5Nyw5IEBACiAgKiBzdXBwb3J0ZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWlvY3RsX2dfY3RybChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQordHZwNTE0eF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAKIAlpZiAoY3RybCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgxMSw3NCArODMzLDcwIEBACiAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCi0JCQkiaW52YWxpZCBjb250cm9sIGlkICVkXG4iLCBjdHJsLT5pZCk7CisJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBjb250cm9sIGlkICVkXG4iLCBjdHJsLT5pZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwKLQkJCSJHZXQgQ29udHJvbDogSUQgLSAlZCAtICVkIiwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJHZXQgQ29udHJvbDogSUQgLSAlZCAtICVkIiwKIAkJCWN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogaW9jdGxfc19jdHJsIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfU19DVFJMIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIHR2cDUxNHhfc19jdHJsKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHNfY3RybAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKICAqIEBjdHJsOiBwb2ludGVyIHRvIHY0bDJfY29udHJvbCBzdHJ1Y3R1cmUKICAqCiAgKiBJZiB0aGUgcmVxdWVzdGVkIGNvbnRyb2wgaXMgc3VwcG9ydGVkLCBzZXRzIHRoZSBjb250cm9sJ3MgY3VycmVudAogICogdmFsdWUgaW4gSFcuIE90aGVyd2lzZSwgcmV0dXJucyAtRUlOVkFMIGlmIHRoZSBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWlvY3RsX3NfY3RybChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQordHZwNTE0eF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJaW50IGVyciA9IC1FSU5WQUwsIHZhbHVlOwogCiAJaWYgKGN0cmwgPT0gTlVMTCkKIAkJcmV0dXJuIGVycjsKIAotCXZhbHVlID0gKF9fczMyKSBjdHJsLT52YWx1ZTsKKwl2YWx1ZSA9IGN0cmwtPnZhbHVlOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDI1NSkgewotCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCi0JCQkJCSJpbnZhbGlkIGJyaWdodG5lc3Mgc2V0dGluZyAlZFxuIiwKKwkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9Ci0JCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0JSSUdIVE5FU1MsCisJCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKHNkLCBSRUdfQlJJR0hUTkVTUywKIAkJCQl2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCiAJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQlJJR0hUTkVTU10udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKLQkJCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAotCQkJCQkiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLAorCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9Ci0JCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NPTlRSQVNULAotCQkJCXZhbHVlKTsKKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoc2QsIFJFR19DT05UUkFTVCwgdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKKwogCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0NPTlRSQVNUXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7Ci0JCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCQkJImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLAorCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwKIAkJCQkJY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KLQkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfU0FUVVJBVElPTiwKLQkJCQl2YWx1ZSk7CisJCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKHNkLCBSRUdfU0FUVVJBVElPTiwgdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKKwogCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1NBVFVSQVRJT05dLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKQEAgLTg4OSwxNSArOTA3LDEzIEBACiAJCWVsc2UgaWYgKHZhbHVlID09IDApCiAJCQl2YWx1ZSA9IDA7CiAJCWVsc2UgewotCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCi0JCQkJCSJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLAotCQkJCQljdHJsLT52YWx1ZSk7CisJCQl2NGwyX2VycihzZCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9Ci0JCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0hVRSwKLQkJCQl2YWx1ZSk7CisJCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKHNkLCBSRUdfSFVFLCB2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCiAJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfSFVFXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKQEAgLTkwNiw0MSArOTIyLDM4IEBACiAJCWVsc2UgaWYgKHZhbHVlID09IDApCiAJCQl2YWx1ZSA9IDB4MEM7CiAJCWVsc2UgewotCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCi0JCQkJCSJpbnZhbGlkIGF1dG8gZ2FpbiBzZXR0aW5nICVkXG4iLAorCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGF1dG8gZ2FpbiBzZXR0aW5nICVkXG4iLAogCQkJCQljdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQotCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19BRkVfR0FJTl9DVFJMLAotCQkJCXZhbHVlKTsKKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoc2QsIFJFR19BRkVfR0FJTl9DVFJMLCB2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCiAJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQUZFX0dBSU5fQ1RSTF0udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAotCQkJImludmFsaWQgY29udHJvbCBpZCAlZFxuIiwgY3RybC0+aWQpOworCQl2NGwyX2VycihzZCwgImludmFsaWQgY29udHJvbCBpZCAlZFxuIiwgY3RybC0+aWQpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwKLQkJCSJTZXQgQ29udHJvbDogSUQgLSAlZCAtICVkIiwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZXQgQ29udHJvbDogSUQgLSAlZCAtICVkIiwKIAkJCWN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAKIAlyZXR1cm4gZXJyOwogfQogCiAvKioKLSAqIGlvY3RsX2VudW1fZm10X2NhcCAtIEltcGxlbWVudCB0aGUgQ0FQVFVSRSBidWZmZXIgVklESU9DX0VOVU1fRk1UIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIHR2cDUxNHhfZW51bV9mbXRfY2FwKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIGVudW1fZm10CisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQogICogQGZtdDogc3RhbmRhcmQgVjRMMiBWSURJT0NfRU5VTV9GTVQgaW9jdGwgc3RydWN0dXJlCiAgKgogICogSW1wbGVtZW50IHRoZSBWSURJT0NfRU5VTV9GTVQgaW9jdGwgdG8gZW51bWVyYXRlIHN1cHBvcnRlZCBmb3JtYXRzCiAgKi8KIHN0YXRpYyBpbnQKLWlvY3RsX2VudW1fZm10X2NhcChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCit0dnA1MTR4X2VudW1fZm10X2NhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHRvX2RlY29kZXIoc2QpOwogCWludCBpbmRleDsKIAogCWlmIChmbXQgPT0gTlVMTCkKQEAgLTk0OCwyNCArOTYxLDI1IEBACiAKIAlpbmRleCA9IGZtdC0+aW5kZXg7CiAJaWYgKChpbmRleCA+PSBkZWNvZGVyLT5udW1fZm10cykgfHwgKGluZGV4IDwgMCkpCi0JCXJldHVybiAtRUlOVkFMOwkvKiBJbmRleCBvdXQgb2YgYm91bmQgKi8KKwkJLyogSW5kZXggb3V0IG9mIGJvdW5kICovCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwkvKiBvbmx5IGNhcHR1cmUgaXMgc3VwcG9ydGVkICovCisJCS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1jcHkoZm10LCAmZGVjb2Rlci0+Zm10X2xpc3RbaW5kZXhdLAogCQlzaXplb2Yoc3RydWN0IHY0bDJfZm10ZGVzYykpOwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAotCQkJIkN1cnJlbnQgRk1UOiBpbmRleCAtICVkICglcykiLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkN1cnJlbnQgRk1UOiBpbmRleCAtICVkICglcykiLAogCQkJZGVjb2Rlci0+Zm10X2xpc3RbaW5kZXhdLmluZGV4LAogCQkJZGVjb2Rlci0+Zm10X2xpc3RbaW5kZXhdLmRlc2NyaXB0aW9uKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBpb2N0bF90cnlfZm10X2NhcCAtIEltcGxlbWVudCB0aGUgQ0FQVFVSRSBidWZmZXIgVklESU9DX1RSWV9GTVQgaW9jdGwKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogdHZwNTE0eF90cnlfZm10X2NhcCgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB0cnlfZm10CisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQogICogQGY6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBWSURJT0NfVFJZX0ZNVCBpb2N0bCBzdHJ1Y3R1cmUKICAqCiAgKiBJbXBsZW1lbnQgdGhlIFZJRElPQ19UUllfRk1UIGlvY3RsIGZvciB0aGUgQ0FQVFVSRSBidWZmZXIgdHlwZS4gVGhpcwpAQCAtOTczLDkgKzk4Nyw5IEBACiAgKiB3aXRob3V0IGFjdHVhbGx5IG1ha2luZyBpdCB0YWtlIGVmZmVjdC4KICAqLwogc3RhdGljIGludAotaW9jdGxfdHJ5X2ZtdF9jYXAoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQordHZwNTE0eF90cnlfZm10X2NhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHRvX2RlY29kZXIoc2QpOwogCWludCBpZm10OwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKIAllbnVtIHR2cDUxNHhfc3RkIGN1cnJlbnRfc3RkOwpAQCAtOTg0LDEyICs5OTgsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KIAkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAogCXBpeCA9ICZmLT5mbXQucGl4OwogCiAJLyogQ2FsY3VsYXRlIGhlaWdodCBhbmQgd2lkdGggYmFzZWQgb24gY3VycmVudCBzdGFuZGFyZCAqLwotCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoZGVjb2Rlcik7CisJY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChzZCk7CiAJaWYgKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTAwMyw3ICsxMDE4LDggQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaWZtdCA9PSBkZWNvZGVyLT5udW1fZm10cykKLQkJaWZtdCA9IDA7CS8qIE5vbmUgb2YgdGhlIGZvcm1hdCBtYXRjaGVkLCBzZWxlY3QgZGVmYXVsdCAqLworCQkvKiBOb25lIG9mIHRoZSBmb3JtYXQgbWF0Y2hlZCwgc2VsZWN0IGRlZmF1bHQgKi8KKwkJaWZtdCA9IDA7CiAJcGl4LT5waXhlbGZvcm1hdCA9IGRlY29kZXItPmZtdF9saXN0W2lmbXRdLnBpeGVsZm9ybWF0OwogCiAJcGl4LT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKQEAgLTEwMTIsOCArMTAyOCw3IEBACiAJcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKIAlwaXgtPnByaXYgPSAwOwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAotCQkJIlRyeSBGTVQ6IHBpeGVsZm9ybWF0IC0gJXMsIGJ5dGVzcGVybGluZSAtICVkIgorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlRyeSBGTVQ6IHBpeGVsZm9ybWF0IC0gJXMsIGJ5dGVzcGVybGluZSAtICVkIgogCQkJIldpZHRoIC0gJWQsIEhlaWdodCAtICVkIiwKIAkJCWRlY29kZXItPmZtdF9saXN0W2lmbXRdLmRlc2NyaXB0aW9uLCBwaXgtPmJ5dGVzcGVybGluZSwKIAkJCXBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKQEAgLTEwMjEsOCArMTAzNiw4IEBACiB9CiAKIC8qKgotICogaW9jdGxfc19mbXRfY2FwIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfU19GTVQgaW9jdGwKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogdHZwNTE0eF9zX2ZtdF9jYXAoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3Igc19mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19TX0ZNVCBpb2N0bCBzdHJ1Y3R1cmUKICAqCiAgKiBJZiB0aGUgcmVxdWVzdGVkIGZvcm1hdCBpcyBzdXBwb3J0ZWQsIGNvbmZpZ3VyZXMgdGhlIEhXIHRvIHVzZSB0aGF0CkBAIC0xMDMwLDkgKzEwNDUsOSBAQAogICogY29ycmVjdGx5IGNvbmZpZ3VyZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWlvY3RsX3NfZm10X2NhcChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit0dnA1MTR4X3NfZm10X2NhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHRvX2RlY29kZXIoc2QpOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKIAlpbnQgcnZhbDsKIApAQCAtMTA0MCwxMCArMTA1NSwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwkJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBpeCA9ICZmLT5mbXQucGl4OwotCXJ2YWwgPSBpb2N0bF90cnlfZm10X2NhcChzLCBmKTsKKwlydmFsID0gdHZwNTE0eF90cnlfZm10X2NhcChzZCwgZik7CiAJaWYgKHJ2YWwpCiAJCXJldHVybiBydmFsOwogCkBAIC0xMDUzLDI4ICsxMDY5LDI4IEBACiB9CiAKIC8qKgotICogaW9jdGxfZ19mbXRfY2FwIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBpb2N0bF9nX2ZtdF9jYXAKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogdHZwNTE0eF9nX2ZtdF9jYXAoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdHZwNTE0eF9nX2ZtdF9jYXAKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHY0bDJfZm9ybWF0IHN0cnVjdHVyZQogICoKICAqIFJldHVybnMgdGhlIGRlY29kZXIncyBjdXJyZW50IHBpeGVsIGZvcm1hdCBpbiB0aGUgdjRsMl9mb3JtYXQKICAqIHBhcmFtZXRlci4KICAqLwogc3RhdGljIGludAotaW9jdGxfZ19mbXRfY2FwKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3R2cDUxNHhfZ19mbXRfY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAKIAlpZiAoZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwkJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWYtPmZtdC5waXggPSBkZWNvZGVyLT5waXg7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCi0JCQkiQ3VycmVudCBGTVQ6IGJ5dGVzcGVybGluZSAtICVkIgorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkN1cnJlbnQgRk1UOiBieXRlc3BlcmxpbmUgLSAlZCIKIAkJCSJXaWR0aCAtICVkLCBIZWlnaHQgLSAlZCIsCiAJCQlkZWNvZGVyLT5waXguYnl0ZXNwZXJsaW5lLAogCQkJZGVjb2Rlci0+cGl4LndpZHRoLCBkZWNvZGVyLT5waXguaGVpZ2h0KTsKQEAgLTEwODIsMTYgKzEwOTgsMTYgQEAKIH0KIAogLyoqCi0gKiBpb2N0bF9nX3Bhcm0gLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19HX1BBUk0gaW9jdGwKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogdHZwNTE0eF9nX3Bhcm0oKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgZ19wYXJtCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQogICogQGE6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBWSURJT0NfR19QQVJNIGlvY3RsIHN0cnVjdHVyZQogICoKICAqIFJldHVybnMgdGhlIGRlY29kZXIncyB2aWRlbyBDQVBUVVJFIHBhcmFtZXRlcnMuCiAgKi8KIHN0YXRpYyBpbnQKLWlvY3RsX2dfcGFybShzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQordHZwNTE0eF9nX3Bhcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwYXJtOwogCWVudW0gdHZwNTE0eF9zdGQgY3VycmVudF9zdGQ7CiAKQEAgLTEwOTksMTMgKzExMTUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwkvKiBvbmx5IGNhcHR1cmUgaXMgc3VwcG9ydGVkICovCisJCS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7CiAJYS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAogCS8qIGdldCB0aGUgY3VycmVudCBzdGFuZGFyZCAqLwotCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoZGVjb2Rlcik7CisJY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChzZCk7CiAJaWYgKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTEyMCwxNyArMTEzNywxNyBAQAogfQogCiAvKioKLSAqIGlvY3RsX3NfcGFybSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX1NfUEFSTSBpb2N0bAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X3NfcGFybSgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBzX3Bhcm0KKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAYTogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19TX1BBUk0gaW9jdGwgc3RydWN0dXJlCiAgKgogICogQ29uZmlndXJlcyB0aGUgZGVjb2RlciB0byB1c2UgdGhlIGlucHV0IHBhcmFtZXRlcnMsIGlmIHBvc3NpYmxlLiBJZgogICogbm90IHBvc3NpYmxlLCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgogICovCiBzdGF0aWMgaW50Ci1pb2N0bF9zX3Bhcm0oc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkKK3R2cDUxNHhfc19wYXJtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHRvX2RlY29kZXIoc2QpOwogCXN0cnVjdCB2NGwyX2ZyYWN0ICp0aW1lcGVyZnJhbWU7CiAJZW51bSB0dnA1MTR4X3N0ZCBjdXJyZW50X3N0ZDsKIApAQCAtMTEzOCwxMiArMTE1NSwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwkJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXRpbWVwZXJmcmFtZSA9ICZhLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lOwogCiAJLyogZ2V0IHRoZSBjdXJyZW50IHN0YW5kYXJkICovCi0JY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChkZWNvZGVyKTsKKwljdXJyZW50X3N0ZCA9IHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKHNkKTsKIAlpZiAoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTU2LDExMSArMTE3NCw1OCBAQAogfQogCiAvKioKLSAqIGlvY3RsX2dfaWZwYXJtIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB2aWRpb2NfaW50X2dfaWZwYXJtX251bQotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHZpZGlvY19pbnRfZ19pZnBhcm1fbnVtIGlvY3RsIHN0cnVjdHVyZQorICogdHZwNTE0eF9zX3N0cmVhbSgpIC0gVjRMMiBkZWNvZGVyIGkvZiBoYW5kbGVyIGZvciBzX3N0cmVhbQorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBlbmFibGU6IHN0cmVhbWluZyBlbmFibGUgb3IgZGlzYWJsZQogICoKLSAqIEdldHMgc2xhdmUgaW50ZXJmYWNlIHBhcmFtZXRlcnMuCi0gKiBDYWxjdWxhdGVzIHRoZSByZXF1aXJlZCB4Y2xrIHZhbHVlIHRvIHN1cHBvcnQgdGhlIHJlcXVlc3RlZAotICogY2xvY2sgcGFyYW1ldGVycyBpbiBwLiBUaGlzIHZhbHVlIGlzIHJldHVybmVkIGluIHRoZSBwCi0gKiBwYXJhbWV0ZXIuCisgKiBTZXRzIHN0cmVhbWluZyB0byBlbmFibGUgb3IgZGlzYWJsZSwgaWYgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBpbnQgaW9jdGxfZ19pZnBhcm0oc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgc3RydWN0IHY0bDJfaWZwYXJtICpwKQorc3RhdGljIGludCB0dnA1MTR4X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7Ci0JaW50IHJ2YWw7Ci0KLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChOVUxMID09IGRlY29kZXItPnBkYXRhLT5pZnBhcm0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcnZhbCA9IGRlY29kZXItPnBkYXRhLT5pZnBhcm0ocCk7Ci0JaWYgKHJ2YWwpIHsKLQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsICJnX2lmcGFybS5FcnJbJWRdXG4iLCBydmFsKTsKLQkJcmV0dXJuIHJ2YWw7Ci0JfQotCi0JcC0+dS5idDY1Ni5jbG9ja19jdXJyID0gVFZQNTE0WF9YQ0xLX0JUNjU2OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaW9jdGxfZ19wcml2IC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB2aWRpb2NfaW50X2dfcHJpdl9udW0KLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQotICogQHA6IHZvaWQgcG9pbnRlciB0byBob2xkIGRlY29kZXIncyBwcml2YXRlIGRhdGEgYWRkcmVzcwotICoKLSAqIFJldHVybnMgZGV2aWNlJ3MgKGRlY29kZXIncykgcHJpdmF0ZSBkYXRhIGFyZWEgYWRkcmVzcyBpbiBwIHBhcmFtZXRlcgotICovCi1zdGF0aWMgaW50IGlvY3RsX2dfcHJpdihzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCB2b2lkICpwKQotewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OwotCi0JaWYgKE5VTEwgPT0gZGVjb2Rlci0+cGRhdGEtPnByaXZfZGF0YV9zZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGRlY29kZXItPnBkYXRhLT5wcml2X2RhdGFfc2V0KHApOwotfQotCi0vKioKLSAqIGlvY3RsX3NfcG93ZXIgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHZpZGlvY19pbnRfc19wb3dlcl9udW0KLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQotICogQG9uOiBwb3dlciBzdGF0ZSB0byB3aGljaCBkZXZpY2UgaXMgdG8gYmUgc2V0Ci0gKgotICogU2V0cyBkZXZpY2VzIHBvd2VyIHN0YXRlIHRvIHJlcXVyZXN0ZWQgc3RhdGUsIGlmIHBvc3NpYmxlLgotICovCi1zdGF0aWMgaW50IGlvY3RsX3NfcG93ZXIoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgZW51bSB2NGwyX3Bvd2VyIG9uKQotewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OwogCWludCBlcnIgPSAwOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAKLQlzd2l0Y2ggKG9uKSB7Ci0JY2FzZSBWNEwyX1BPV0VSX09GRjoKKwlpZiAoZGVjb2Rlci0+c3RyZWFtaW5nID09IGVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGVuYWJsZSkgeworCWNhc2UgMDoKKwl7CiAJCS8qIFBvd2VyIERvd24gU2VxdWVuY2UgKi8KLQkJZXJyID0KLQkJICAgIHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09QRVJBVElPTl9NT0RFLAotCQkJCQkweDAxKTsKLQkJLyogRGlzYWJsZSBtdXggZm9yIFRWUDUxNDYvNDcgZGVjb2RlciBkYXRhIHBhdGggKi8KLQkJaWYgKGRlY29kZXItPnBkYXRhLT5wb3dlcl9zZXQpCi0JCQllcnIgfD0gZGVjb2Rlci0+cGRhdGEtPnBvd2VyX3NldChvbik7Ci0JCWRlY29kZXItPnN0YXRlID0gU1RBVEVfTk9UX0RFVEVDVEVEOwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9QT1dFUl9TVEFOREJZOgotCQlpZiAoZGVjb2Rlci0+cGRhdGEtPnBvd2VyX3NldCkKLQkJCWVyciA9IGRlY29kZXItPnBkYXRhLT5wb3dlcl9zZXQob24pOwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9QT1dFUl9PTjoKLQkJLyogRW5hYmxlIG11eCBmb3IgVFZQNTE0Ni80NyBkZWNvZGVyIGRhdGEgcGF0aCAqLwotCQlpZiAoKGRlY29kZXItPnBkYXRhLT5wb3dlcl9zZXQpICYmCi0JCQkJKGRlY29kZXItPnN0YXRlID09IFNUQVRFX05PVF9ERVRFQ1RFRCkpIHsKLQkJCWludCBpOwotCQkJc3RydWN0IHR2cDUxNHhfaW5pdF9zZXEgKmludF9zZXEgPQotCQkJCShzdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSAqKQotCQkJCWRlY29kZXItPmlkLT5kcml2ZXJfZGF0YTsKLQotCQkJZXJyID0gZGVjb2Rlci0+cGRhdGEtPnBvd2VyX3NldChvbik7Ci0KLQkJCS8qIFBvd2VyIFVwIFNlcXVlbmNlICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgaW50X3NlcS0+bm9fcmVnczsgaSsrKSB7Ci0JCQkJZXJyIHw9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwKLQkJCQkJCWludF9zZXEtPmluaXRfcmVnX3NlcVtpXS5yZWcsCi0JCQkJCQlpbnRfc2VxLT5pbml0X3JlZ19zZXFbaV0udmFsKTsKLQkJCX0KLQkJCS8qIERldGVjdCB0aGUgc2Vuc29yIGlzIG5vdCBhbHJlYWR5IGRldGVjdGVkICovCi0JCQllcnIgfD0gdHZwNTE0eF9kZXRlY3QoZGVjb2Rlcik7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCi0JCQkJCQkiVW5hYmxlIHRvIGRldGVjdCBkZWNvZGVyXG4iKTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQorCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAxKTsKKwkJaWYgKGVycikgeworCQkJdjRsMl9lcnIoc2QsICJVbmFibGUgdG8gdHVybiBvZmYgZGVjb2RlclxuIik7CisJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCWVyciB8PSB0dnA1MTR4X2NvbmZpZ3VyZShkZWNvZGVyKTsKKwkJZGVjb2Rlci0+c3RyZWFtaW5nID0gZW5hYmxlOwogCQlicmVhazsKKwl9CisJY2FzZSAxOgorCXsKKwkJc3RydWN0IHR2cDUxNHhfcmVnICppbnRfc2VxID0gKHN0cnVjdCB0dnA1MTR4X3JlZyAqKQorCQkJCWNsaWVudC0+ZHJpdmVyLT5pZF90YWJsZS0+ZHJpdmVyX2RhdGE7CiAKKwkJLyogUG93ZXIgVXAgU2VxdWVuY2UgKi8KKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWdzKHNkLCBpbnRfc2VxKTsKKwkJaWYgKGVycikgeworCQkJdjRsMl9lcnIoc2QsICJVbmFibGUgdG8gdHVybiBvbiBkZWNvZGVyXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJLyogRGV0ZWN0IGlmIG5vdCBhbHJlYWR5IGRldGVjdGVkICovCisJCWVyciA9IHR2cDUxNHhfZGV0ZWN0KHNkLCBkZWNvZGVyKTsKKwkJaWYgKGVycikgeworCQkJdjRsMl9lcnIoc2QsICJVbmFibGUgdG8gZGV0ZWN0IGRlY29kZXJcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQllcnIgPSB0dnA1MTR4X2NvbmZpZ3VyZShzZCwgZGVjb2Rlcik7CisJCWlmIChlcnIpIHsKKwkJCXY0bDJfZXJyKHNkLCAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBkZWNvZGVyXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZGVjb2Rlci0+c3RyZWFtaW5nID0gZW5hYmxlOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0RFVjsKIAkJYnJlYWs7CkBAIC0xMjY5LDkzICsxMjM0LDM4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyoqCi0gKiBpb2N0bF9pbml0IC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfSU5UX0lOSVQKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQotICoKLSAqIEluaXRpYWxpemUgdGhlIGRlY29kZXIgZGV2aWNlIChjYWxscyB0dnA1MTR4X2NvbmZpZ3VyZSgpKQotICovCi1zdGF0aWMgaW50IGlvY3RsX2luaXQoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcykKLXsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdHZwNTE0eF9jb3JlX29wcyA9IHsKKwkucXVlcnljdHJsID0gdHZwNTE0eF9xdWVyeWN0cmwsCisJLmdfY3RybCA9IHR2cDUxNHhfZ19jdHJsLAorCS5zX2N0cmwgPSB0dnA1MTR4X3NfY3RybCwKKwkuc19zdGQgPSB0dnA1MTR4X3Nfc3RkLAorfTsKIAotCS8qIFNldCBkZWZhdWx0IHN0YW5kYXJkIHRvIGF1dG8gKi8KLQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1ZJREVPX1NURF0udmFsID0KLQkgICAgVklERU9fU1REX0FVVE9fU1dJVENIX0JJVDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHR2cDUxNHhfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB0dnA1MTR4X3Nfcm91dGluZywKKwkucXVlcnlzdGQgPSB0dnA1MTR4X3F1ZXJ5c3RkLAorCS5lbnVtX2ZtdCA9IHR2cDUxNHhfZW51bV9mbXRfY2FwLAorCS5nX2ZtdCA9IHR2cDUxNHhfZ19mbXRfY2FwLAorCS50cnlfZm10ID0gdHZwNTE0eF90cnlfZm10X2NhcCwKKwkuc19mbXQgPSB0dnA1MTR4X3NfZm10X2NhcCwKKwkuZ19wYXJtID0gdHZwNTE0eF9nX3Bhcm0sCisJLnNfcGFybSA9IHR2cDUxNHhfc19wYXJtLAorCS5zX3N0cmVhbSA9IHR2cDUxNHhfc19zdHJlYW0sCit9OwogCi0JcmV0dXJuIHR2cDUxNHhfY29uZmlndXJlKGRlY29kZXIpOwotfQotCi0vKioKLSAqIGlvY3RsX2Rldl9leGl0IC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB2aWRpb2NfaW50X2Rldl9leGl0X251bQotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogRGVsaW5pdGlhbGlzZSB0aGUgZGV2LiBhdCBzbGF2ZSBkZXRhY2guIFRoZSBjb21wbGVtZW50IG9mIGlvY3RsX2Rldl9pbml0LgotICovCi1zdGF0aWMgaW50IGlvY3RsX2Rldl9leGl0KHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaW9jdGxfZGV2X2luaXQgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHZpZGlvY19pbnRfZGV2X2luaXRfbnVtCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKLSAqCi0gKiBJbml0aWFsaXNlIHRoZSBkZXZpY2Ugd2hlbiBzbGF2ZSBhdHRhY2hlcyB0byB0aGUgbWFzdGVyLiBSZXR1cm5zIDAgaWYKLSAqIFRWUDUxNDYvNDcgZGV2aWNlIGNvdWxkIGJlIGZvdW5kLCBvdGhlcndpc2UgcmV0dXJucyBhcHByb3ByaWF0ZSBlcnJvci4KLSAqLwotc3RhdGljIGludCBpb2N0bF9kZXZfaW5pdChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzKQotewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OwotCWludCBlcnI7Ci0KLQllcnIgPSB0dnA1MTR4X2RldGVjdChkZWNvZGVyKTsKLQlpZiAoZXJyIDwgMCkgewotCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCSJVbmFibGUgdG8gZGV0ZWN0IGRlY29kZXJcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXY0bF9pbmZvKGRlY29kZXItPmNsaWVudCwKLQkJICJjaGlwIHZlcnNpb24gMHglLjJ4IGRldGVjdGVkXG4iLCBkZWNvZGVyLT52ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnRfaW9jdGxfZGVzYyB0dnA1MTR4X2lvY3RsX2Rlc2NbXSA9IHsKLQl7dmlkaW9jX2ludF9kZXZfaW5pdF9udW0sICh2NGwyX2ludF9pb2N0bF9mdW5jKikgaW9jdGxfZGV2X2luaXR9LAotCXt2aWRpb2NfaW50X2Rldl9leGl0X251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9kZXZfZXhpdH0sCi0Je3ZpZGlvY19pbnRfc19wb3dlcl9udW0sICh2NGwyX2ludF9pb2N0bF9mdW5jKikgaW9jdGxfc19wb3dlcn0sCi0Je3ZpZGlvY19pbnRfZ19wcml2X251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9nX3ByaXZ9LAotCXt2aWRpb2NfaW50X2dfaWZwYXJtX251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9nX2lmcGFybX0sCi0Je3ZpZGlvY19pbnRfaW5pdF9udW0sICh2NGwyX2ludF9pb2N0bF9mdW5jKikgaW9jdGxfaW5pdH0sCi0Je3ZpZGlvY19pbnRfZW51bV9mbXRfY2FwX251bSwKLQkgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfZW51bV9mbXRfY2FwfSwKLQl7dmlkaW9jX2ludF90cnlfZm10X2NhcF9udW0sCi0JICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3RyeV9mbXRfY2FwfSwKLQl7dmlkaW9jX2ludF9nX2ZtdF9jYXBfbnVtLAotCSAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9nX2ZtdF9jYXB9LAotCXt2aWRpb2NfaW50X3NfZm10X2NhcF9udW0sCi0JICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3NfZm10X2NhcH0sCi0Je3ZpZGlvY19pbnRfZ19wYXJtX251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfZ19wYXJtfSwKLQl7dmlkaW9jX2ludF9zX3Bhcm1fbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9zX3Bhcm19LAotCXt2aWRpb2NfaW50X3F1ZXJ5Y3RybF9udW0sCi0JICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3F1ZXJ5Y3RybH0sCi0Je3ZpZGlvY19pbnRfZ19jdHJsX251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfZ19jdHJsfSwKLQl7dmlkaW9jX2ludF9zX2N0cmxfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9zX2N0cmx9LAotCXt2aWRpb2NfaW50X3F1ZXJ5c3RkX251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfcXVlcnlzdGR9LAotCXt2aWRpb2NfaW50X3Nfc3RkX251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfc19zdGR9LAotCXt2aWRpb2NfaW50X3NfdmlkZW9fcm91dGluZ19udW0sCi0JCSh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3Nfcm91dGluZ30sCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0dnA1MTR4X29wcyA9IHsKKwkuY29yZSA9ICZ0dnA1MTR4X2NvcmVfb3BzLAorCS52aWRlbyA9ICZ0dnA1MTR4X3ZpZGVvX29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyIHR2cDUxNHhfZGV2ID0gewotCS5zdGF0ZSA9IFNUQVRFX05PVF9ERVRFQ1RFRCwKKwkuc3RyZWFtaW5nID0gMCwKIAogCS5mbXRfbGlzdCA9IHR2cDUxNHhfZm10X2xpc3QsCiAJLm51bV9mbXRzID0gQVJSQVlfU0laRSh0dnA1MTR4X2ZtdF9saXN0KSwKIAotCS5waXggPSB7CQkvKiBEZWZhdWx0IHRvIE5UU0MgOC1iaXQgWVVWIDQyMiAqLworCS5waXggPSB7CisJCS8qIERlZmF1bHQgdG8gTlRTQyA4LWJpdCBZVVYgNDIyICovCiAJCS53aWR0aCA9IE5UU0NfTlVNX0FDVElWRV9QSVhFTFMsCiAJCS5oZWlnaHQgPSBOVFNDX05VTV9BQ1RJVkVfTElORVMsCiAJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZLApAQCAtMTM2OSwyMCArMTI3OSwxMyBAQAogCS5jdXJyZW50X3N0ZCA9IFNURF9OVFNDX01KLAogCS5zdGRfbGlzdCA9IHR2cDUxNHhfc3RkX2xpc3QsCiAJLm51bV9zdGRzID0gQVJSQVlfU0laRSh0dnA1MTR4X3N0ZF9saXN0KSwKLQkudjRsMl9pbnRfZGV2aWNlID0gewotCQkubW9kdWxlID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gVFZQNTE0WF9NT0RVTEVfTkFNRSwKLQkJLnR5cGUgPSB2NGwyX2ludF90eXBlX3NsYXZlLAotCX0sCi0JLnR2cDUxNHhfc2xhdmUgPSB7Ci0JCS5pb2N0bHMgPSB0dnA1MTR4X2lvY3RsX2Rlc2MsCi0JCS5udW1faW9jdGxzID0gQVJSQVlfU0laRSh0dnA1MTR4X2lvY3RsX2Rlc2MpLAotCX0sCisKIH07CiAKIC8qKgotICogdHZwNTE0eF9wcm9iZSAtIGRlY29kZXIgZHJpdmVyIGkyYyBwcm9iZSBoYW5kbGVyCisgKiB0dnA1MTR4X3Byb2JlKCkgLSBkZWNvZGVyIGRyaXZlciBpMmMgcHJvYmUgaGFuZGxlcgogICogQGNsaWVudDogaTJjIGRyaXZlciBjbGllbnQgZGV2aWNlIHN0cnVjdHVyZQorICogQGlkOiBpMmMgZHJpdmVyIGlkIHRhYmxlCiAgKgogICogUmVnaXN0ZXIgZGVjb2RlciBhcyBhbiBpMmMgY2xpZW50IGRldmljZSBhbmQgVjRMMgogICogZGV2aWNlLgpAQCAtMTM5MSw4OCArMTI5NCw3MSBAQAogdHZwNTE0eF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcjsKLQlpbnQgZXJyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRUlPOwogCisJaWYgKCFjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXY0bDJfZXJyKGNsaWVudCwgIk5vIHBsYXRmb3JtIGRhdGEhIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZigqZGVjb2RlciksIEdGUF9LRVJORUwpOwogCWlmICghZGVjb2RlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKLQkJdjRsX2VycihjbGllbnQsICJObyBwbGF0Zm9ybSBkYXRhISFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQorCS8qIEluaXRpYWxpemUgdGhlIHR2cDUxNHhfZGVjb2RlciB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwogCSpkZWNvZGVyID0gdHZwNTE0eF9kZXY7Ci0JZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlLnByaXYgPSBkZWNvZGVyOwotCWRlY29kZXItPnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UudS5zbGF2ZSA9ICZkZWNvZGVyLT50dnA1MTR4X3NsYXZlOworCS8qIENvcHkgZGVmYXVsdCByZWdpc3RlciBjb25maWd1cmF0aW9uICovCiAJbWVtY3B5KGRlY29kZXItPnR2cDUxNHhfcmVncywgdHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0LAogCQkJc2l6ZW9mKHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdCkpOwotCS8qCisKKwkvKiBDb3B5IGJvYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uIGhlcmUgKi8KKwlkZWNvZGVyLT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwkvKioKIAkgKiBGZXRjaCBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhLCBhbmQgY29uZmlndXJlIHRoZQogCSAqIHR2cDUxNHhfcmVnX2xpc3RbXSBhY2NvcmRpbmdseS4gU2luY2UgdGhpcyBpcyBvbmUKIAkgKiB0aW1lIGNvbmZpZ3VyYXRpb24sIG5vIG5lZWQgdG8gcHJlc2VydmUuCiAJICovCiAJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19PVVRQVVRfRk9STUFUVEVSMl0udmFsIHw9Ci0JCQkoZGVjb2Rlci0+cGRhdGEtPmNsa19wb2xhcml0eSA8PCAxKTsKKwkJKGRlY29kZXItPnBkYXRhLT5jbGtfcG9sYXJpdHkgPDwgMSk7CiAJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19TWU5DX0NPTlRST0xdLnZhbCB8PQotCQkJKChkZWNvZGVyLT5wZGF0YS0+aHNfcG9sYXJpdHkgPDwgMikgfAotCQkJKGRlY29kZXItPnBkYXRhLT52c19wb2xhcml0eSA8PCAzKSk7Ci0JLyoKLQkgKiBTYXZlIHRoZSBpZCBkYXRhLCByZXF1aXJlZCBmb3IgcG93ZXIgdXAgc2VxdWVuY2UKLQkgKi8KLQlkZWNvZGVyLT5pZCA9IChzdHJ1Y3QgaTJjX2RldmljZV9pZCAqKWlkOwotCS8qIEF0dGFjaCB0byBNYXN0ZXIgKi8KLQlzdHJjcHkoZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlLnUuc2xhdmUtPmF0dGFjaF90bywKLQkJCWRlY29kZXItPnBkYXRhLT5tYXN0ZXIpOwotCWRlY29kZXItPmNsaWVudCA9IGNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKKwkJKChkZWNvZGVyLT5wZGF0YS0+aHNfcG9sYXJpdHkgPDwgMikgfAorCQkgKGRlY29kZXItPnBkYXRhLT52c19wb2xhcml0eSA8PCAzKSk7CisJLyogU2V0IGRlZmF1bHQgc3RhbmRhcmQgdG8gYXV0byAqLworCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfVklERU9fU1REXS52YWwgPQorCQlWSURFT19TVERfQVVUT19TV0lUQ0hfQklUOwogCiAJLyogUmVnaXN0ZXIgd2l0aCBWNEwyIGxheWVyIGFzIHNsYXZlIGRldmljZSAqLwotCWVyciA9IHY0bDJfaW50X2RldmljZV9yZWdpc3RlcigmZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKLQlpZiAoZXJyKSB7Ci0JCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwotCQl2NGxfZXJyKGNsaWVudCwKLQkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgdG8gdjRsMi4gRXJyWyVkXVxuIiwgZXJyKTsKLQkJZ290byBvdXRfZnJlZTsKKwlzZCA9ICZkZWNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdHZwNTE0eF9vcHMpOwogCi0JfSBlbHNlCi0JCXY0bF9pbmZvKGNsaWVudCwgIlJlZ2lzdGVyZWQgdG8gdjRsMiBtYXN0ZXIgJXMhIVxuIiwKLQkJCQlkZWNvZGVyLT5wZGF0YS0+bWFzdGVyKTsKKwl2NGwyX2luZm8oc2QsICIlcyBkZWNvZGVyIGRyaXZlciByZWdpc3RlcmVkICEhXG4iLCBzZC0+bmFtZSk7CisKIAlyZXR1cm4gMDsKIAotb3V0X2ZyZWU6Ci0Ja2ZyZWUoZGVjb2Rlcik7Ci0JcmV0dXJuIGVycjsKIH0KIAogLyoqCi0gKiB0dnA1MTR4X3JlbW92ZSAtIGRlY29kZXIgZHJpdmVyIGkyYyByZW1vdmUgaGFuZGxlcgorICogdHZwNTE0eF9yZW1vdmUoKSAtIGRlY29kZXIgZHJpdmVyIGkyYyByZW1vdmUgaGFuZGxlcgogICogQGNsaWVudDogaTJjIGRyaXZlciBjbGllbnQgZGV2aWNlIHN0cnVjdHVyZQogICoKICAqIFVucmVnaXN0ZXIgZGVjb2RlciBhcyBhbiBpMmMgY2xpZW50IGRldmljZSBhbmQgVjRMMgogICogZGV2aWNlLiBDb21wbGVtZW50IG9mIHR2cDUxNHhfcHJvYmUoKS4KICAqLwotc3RhdGljIGludCBfX2V4aXQgdHZwNTE0eF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdHZwNTE0eF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAotCWlmICghY2xpZW50LT5hZGFwdGVyKQotCQlyZXR1cm4gLUVOT0RFVjsJLyogb3VyIGNsaWVudCBpc24ndCBhdHRhY2hlZCAqLwotCi0JdjRsMl9pbnRfZGV2aWNlX3VucmVnaXN0ZXIoJmRlY29kZXItPnY0bDJfaW50X2RldmljZSk7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwogCWtmcmVlKGRlY29kZXIpOwogCXJldHVybiAwOwogfQotLyoKLSAqIFRWUDUxNDYgSW5pdC9Qb3dlciBvbiBTZXF1ZW5jZQotICovCisvKiBUVlA1MTQ2IEluaXQvUG93ZXIgb24gU2VxdWVuY2UgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0Nl9pbml0X3JlZ19zZXFbXSA9IHsKIAl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzEsIDB4MDJ9LAogCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMiwgMHgwMH0sCkBAIC0xNDg1LDE0ICsxMzcxLDEwIEBACiAJe1RPS19XUklURSwgUkVHX1ZCVVNfREFUQV9BQ0NFU1NfTk9fVkJVU19BRERSX0lOQ1IsIDB4MDB9LAogCXtUT0tfV1JJVEUsIFJFR19PUEVSQVRJT05fTU9ERSwgMHgwMX0sCiAJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAwfSwKKwl7VE9LX1RFUk0sIDAsIDB9LAogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSB0dnA1MTQ2X2luaXQgPSB7Ci0JLm5vX3JlZ3MgPSBBUlJBWV9TSVpFKHR2cDUxNDZfaW5pdF9yZWdfc2VxKSwKLQkuaW5pdF9yZWdfc2VxID0gdHZwNTE0Nl9pbml0X3JlZ19zZXEsCi19OwotLyoKLSAqIFRWUDUxNDcgSW5pdC9Qb3dlciBvbiBTZXF1ZW5jZQotICovCisKKy8qIFRWUDUxNDcgSW5pdC9Qb3dlciBvbiBTZXF1ZW5jZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTQ3X2luaXRfcmVnX3NlcVtdID0JewogCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMSwgMHgwMn0sCiAJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MyLCAweDAwfSwKQEAgLTE1MTIsNzEgKzEzOTQsNTEgQEAKIAl7VE9LX1dSSVRFLCBSRUdfVkJVU19EQVRBX0FDQ0VTU19OT19WQlVTX0FERFJfSU5DUiwgMHgwMH0sCiAJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAxfSwKIAl7VE9LX1dSSVRFLCBSRUdfT1BFUkFUSU9OX01PREUsIDB4MDB9LAorCXtUT0tfVEVSTSwgMCwgMH0sCiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA1MTR4X2luaXRfc2VxIHR2cDUxNDdfaW5pdCA9IHsKLQkubm9fcmVncyA9IEFSUkFZX1NJWkUodHZwNTE0N19pbml0X3JlZ19zZXEpLAotCS5pbml0X3JlZ19zZXEgPSB0dnA1MTQ3X2luaXRfcmVnX3NlcSwKLX07Ci0vKgotICogVFZQNTE0Nk0yL1RWUDUxNDdNMSBJbml0L1Bvd2VyIG9uIFNlcXVlbmNlCi0gKi8KKworLyogVFZQNTE0Nk0yL1RWUDUxNDdNMSBJbml0L1Bvd2VyIG9uIFNlcXVlbmNlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhtX2luaXRfcmVnX3NlcVtdID0gewogCXtUT0tfV1JJVEUsIFJFR19PUEVSQVRJT05fTU9ERSwgMHgwMX0sCiAJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAwfSwKKwl7VE9LX1RFUk0sIDAsIDB9LAogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSB0dnA1MTR4bV9pbml0ID0gewotCS5ub19yZWdzID0gQVJSQVlfU0laRSh0dnA1MTR4bV9pbml0X3JlZ19zZXEpLAotCS5pbml0X3JlZ19zZXEgPSB0dnA1MTR4bV9pbml0X3JlZ19zZXEsCi19OwotLyoKKworLyoqCiAgKiBJMkMgRGV2aWNlIFRhYmxlIC0KICAqCiAgKiBuYW1lIC0gTmFtZSBvZiB0aGUgYWN0dWFsIGRldmljZS9jaGlwLgogICogZHJpdmVyX2RhdGEgLSBEcml2ZXIgZGF0YQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHZwNTE0eF9pZFtdID0gewotCXsidHZwNTE0NiIsICh1bnNpZ25lZCBsb25nKSZ0dnA1MTQ2X2luaXR9LAotCXsidHZwNTE0Nm0yIiwgKHVuc2lnbmVkIGxvbmcpJnR2cDUxNHhtX2luaXR9LAotCXsidHZwNTE0NyIsICh1bnNpZ25lZCBsb25nKSZ0dnA1MTQ3X2luaXR9LAotCXsidHZwNTE0N20xIiwgKHVuc2lnbmVkIGxvbmcpJnR2cDUxNHhtX2luaXR9LAorCXsidHZwNTE0NiIsICh1bnNpZ25lZCBsb25nKXR2cDUxNDZfaW5pdF9yZWdfc2VxfSwKKwl7InR2cDUxNDZtMiIsICh1bnNpZ25lZCBsb25nKXR2cDUxNHhtX2luaXRfcmVnX3NlcX0sCisJeyJ0dnA1MTQ3IiwgKHVuc2lnbmVkIGxvbmcpdHZwNTE0N19pbml0X3JlZ19zZXF9LAorCXsidHZwNTE0N20xIiwgKHVuc2lnbmVkIGxvbmcpdHZwNTE0eG1faW5pdF9yZWdfc2VxfSwKIAl7fSwKIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0dnA1MTR4X2lkKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHR2cDUxNHhfaTJjX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0dnA1MTR4X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkgICAubmFtZSA9IFRWUDUxNFhfTU9EVUxFX05BTUUsCi0JCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCQkgICB9LAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBUVlA1MTRYX01PRFVMRV9OQU1FLAorCX0sCiAJLnByb2JlID0gdHZwNTE0eF9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AodHZwNTE0eF9yZW1vdmUpLAorCS5yZW1vdmUgPSB0dnA1MTR4X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB0dnA1MTR4X2lkLAogfTsKIAotLyoqCi0gKiB0dnA1MTR4X2luaXQKLSAqCi0gKiBNb2R1bGUgaW5pdCBmdW5jdGlvbgotICovCiBzdGF0aWMgaW50IF9faW5pdCB0dnA1MTR4X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnR2cDUxNHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0dnA1MTR4X2RyaXZlcik7CiB9CiAKLS8qKgotICogdHZwNTE0eF9jbGVhbnVwCi0gKgotICogTW9kdWxlIGV4aXQgZnVuY3Rpb24KLSAqLwotc3RhdGljIHZvaWQgX19leGl0IHR2cDUxNHhfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHR2cDUxNHhfZXhpdCh2b2lkKQogewotCWkyY19kZWxfZHJpdmVyKCZ0dnA1MTR4X2kyY19kcml2ZXIpOworCWkyY19kZWxfZHJpdmVyKCZ0dnA1MTR4X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHR2cDUxNHhfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0dnA1MTR4X2NsZWFudXApOwotCi1NT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJUVlA1MTRYIGxpbnV4IGRlY29kZXIgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfZXhpdCh0dnA1MTR4X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4X3JlZ3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eF9yZWdzLmgKaW5kZXggMzUxNjIwYS4uMThmMjlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4X3JlZ3MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHhfcmVncy5oCkBAIC0yODQsMTQgKzI4NCw0IEBACiAJdTMyIHZhbDsKIH07CiAKLS8qKgotICogc3RydWN0IHR2cDUxNHhfaW5pdF9zZXEgLSBTdHJ1Y3R1cmUgZm9yIFRWUDUxNDYvNDcvNDZNMi80N00xIHBvd2VyIHVwCi0gKgkJU2VxdWVuY2UuCi0gKiBAIG5vX3JlZ3MgLSBOdW1iZXIgb2YgcmVnaXN0ZXJzIHRvIHdyaXRlIGZvciBwb3dlciB1cCBzZXF1ZW5jZS4KLSAqIEAgaW5pdF9yZWdfc2VxIC0gQXJyYXkgb2YgcmVnaXN0ZXJzIGFuZCByZXNwZWN0aXZlIHZhbHVlIHRvIHdyaXRlLgotICovCi1zdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSB7Ci0JdW5zaWduZWQgaW50IG5vX3JlZ3M7Ci0JY29uc3Qgc3RydWN0IHR2cDUxNHhfcmVnICppbml0X3JlZ19zZXE7Ci19OwogI2VuZGlmCQkJCS8qIGlmbmRlZiBfVFZQNTE0WF9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCmluZGV4IGFhNTA2NWUuLjI2OWFiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KICNpbmNsdWRlIDxtZWRpYS90dzk5MTAuaD4KIApAQCAtMjIzLDkgKzIyMyw4IEBACiB9OwogCiBzdHJ1Y3QgdHc5OTEwX3ByaXYgeworCXN0cnVjdCB2NGwyX3N1YmRldiAgICAgICAgICAgICAgICBzdWJkZXY7CiAJc3RydWN0IHR3OTkxMF92aWRlb19pbmZvICAgICAgICppbmZvOwotCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgICAgICAqY2xpZW50OwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAgICAgICAgaWNkOwogCWNvbnN0IHN0cnVjdCB0dzk5MTBfc2NhbGVfY3RybCAqc2NhbGU7CiB9OwogCkBAIC0zNTYsNiArMzU1LDEyIEBACiAvKgogICogZ2VuZXJhbCBmdW5jdGlvbgogICovCitzdGF0aWMgc3RydWN0IHR3OTkxMF9wcml2ICp0b190dzk5MTAoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsCisJCQkgICAgc3ViZGV2KTsKK30KKwogc3RhdGljIGludCB0dzk5MTBfc2V0X3NjYWxlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZSkKIHsKQEAgLTUwOSw0NCArNTE0LDIwIEBACiAvKgogICogc29jX2NhbWVyYV9vcHMgZnVuY3Rpb24KICAqLwotc3RhdGljIGludCB0dzk5MTBfaW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgdHc5OTEwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOwotCWludCByZXQgPSAwOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSB0b190dzk5MTAoY2xpZW50KTsKIAotCWlmIChwcml2LT5pbmZvLT5saW5rLnBvd2VyKSB7Ci0JCXJldCA9IHByaXYtPmluZm8tPmxpbmsucG93ZXIoJnByaXYtPmNsaWVudC0+ZGV2LCAxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChwcml2LT5pbmZvLT5saW5rLnJlc2V0KQotCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnJlc2V0KCZwcml2LT5jbGllbnQtPmRldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHR3OTkxMF9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChwcml2LT5pbmZvLT5saW5rLnBvd2VyKQotCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnBvd2VyKCZwcml2LT5jbGllbnQtPmRldiwgMCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHR3OTkxMF9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKKwlpZiAoIWVuYWJsZSkKKwkJcmV0dXJuIDA7CiAKIAlpZiAoIXByaXYtPnNjYWxlKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAibm9ybSBzZWxlY3QgZXJyb3JcbiIpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm5vcm0gc2VsZWN0IGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICVkeCVkXG4iLAorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXMgJWR4JWRcbiIsCiAJCSBwcml2LT5zY2FsZS0+bmFtZSwKIAkJIHByaXYtPnNjYWxlLT53aWR0aCwKIAkJIHByaXYtPnNjYWxlLT5oZWlnaHQpOwpAQCAtNTU0LDExICs1MzUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdHc5OTEwX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTU2Nyw4ICs1NDMsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0dzk5MTBfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBwcml2LT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSB0b190dzk5MTAoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fTUFTVEVSIHwKIAkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8CiAJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBwcml2LT5pbmZvLT5idXN3aWR0aDsKQEAgLTU3NiwyMSArNTUzLDExIEBACiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKLXsKLQlpZC0+aWRlbnQgPSBWNEwyX0lERU5UX1RXOTkxMDsKLQlpZC0+cmV2aXNpb24gPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHc5OTEwX3NldF9zdGQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgIHY0bDJfc3RkX2lkICphKQorc3RhdGljIGludCB0dzk5MTBfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgbm9ybSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmICgqYSAmIChWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMKSkKKwlpZiAobm9ybSAmIChWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMKSkKIAkJcmV0ID0gMDsKIAogCXJldHVybiByZXQ7CkBAIC02MDYsMTcgKzU3MywyNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotc3RhdGljIGludCB0dzk5MTBfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCB0dzk5MTBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQogewotCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKKwlpZC0+aWRlbnQgPSBWNEwyX0lERU5UX1RXOTkxMDsKKwlpZC0+cmV2aXNpb24gPSAwOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHR3OTkxMF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAlpbnQgcmV0OwogCiAJaWYgKHJlZy0+cmVnID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCByZWctPnJlZyk7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLT5yZWcpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC02MjgsMjMgKzYwNCwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF9zZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IHR3OTkxMF9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAKIAlpZiAocmVnLT5yZWcgPiAweGZmIHx8CiAJICAgIHJlZy0+dmFsID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIHJlZy0+cmVnLCByZWctPnZhbCk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWctPnJlZywgcmVnLT52YWwpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgdHc5OTEwX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgdHc5OTEwX3NfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewotCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmEtPmM7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgICAgICAgICAgICAgICAgIHJldCAgPSAtRUlOVkFMOwogCXU4ICAgICAgICAgICAgICAgICAgdmFsOwogCkBAIC02NTgsOCArNjM2LDggQEAKIAkvKgogCSAqIHJlc2V0IGhhcmR3YXJlCiAJICovCi0JdHc5OTEwX3Jlc2V0KHByaXYtPmNsaWVudCk7Ci0JcmV0ID0gdHc5OTEwX3dyaXRlX2FycmF5KHByaXYtPmNsaWVudCwgdHc5OTEwX2RlZmF1bHRfcmVncyk7CisJdHc5OTEwX3Jlc2V0KGNsaWVudCk7CisJcmV0ID0gdHc5OTEwX3dyaXRlX2FycmF5KGNsaWVudCwgdHc5OTEwX2RlZmF1bHRfcmVncyk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CiAKQEAgLTY3MCw3ICs2NDgsNyBAQAogCWlmIChTT0NBTV9EQVRBV0lEVEhfMTYgPT0gcHJpdi0+aW5mby0+YnVzd2lkdGgpCiAJCXZhbCA9IExFTjsKIAotCXJldCA9IHR3OTkxMF9tYXNrX3NldChwcml2LT5jbGllbnQsIE9QRk9STSwgTEVOLCB2YWwpOworCXJldCA9IHR3OTkxMF9tYXNrX3NldChjbGllbnQsIE9QRk9STSwgTEVOLCB2YWwpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIHR3OTkxMF9zZXRfZm10X2Vycm9yOwogCkBAIC02OTgsNTIgKzY3NiwxMzkgQEAKIAkJdmFsID0gMDsKIAl9CiAKLQlyZXQgPSB0dzk5MTBfbWFza19zZXQocHJpdi0+Y2xpZW50LCBWQklDTlRMLCBSVFNFTF9NQVNLLCB2YWwpOworCXJldCA9IHR3OTkxMF9tYXNrX3NldChjbGllbnQsIFZCSUNOVEwsIFJUU0VMX01BU0ssIHZhbCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CiAKIAkvKgogCSAqIHNldCBzY2FsZQogCSAqLwotCXJldCA9IHR3OTkxMF9zZXRfc2NhbGUocHJpdi0+Y2xpZW50LCBwcml2LT5zY2FsZSk7CisJcmV0ID0gdHc5OTEwX3NldF9zY2FsZShjbGllbnQsIHByaXYtPnNjYWxlKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byB0dzk5MTBfc2V0X2ZtdF9lcnJvcjsKIAogCS8qCiAJICogc2V0IGNyb3BwaW5nCiAJICovCi0JcmV0ID0gdHc5OTEwX3NldF9jcm9wcGluZyhwcml2LT5jbGllbnQsICZ0dzk5MTBfY3JvcHBpbmdfY3RybCk7CisJcmV0ID0gdHc5OTEwX3NldF9jcm9wcGluZyhjbGllbnQsICZ0dzk5MTBfY3JvcHBpbmdfY3RybCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CiAKIAkvKgogCSAqIHNldCBoc3luYwogCSAqLwotCXJldCA9IHR3OTkxMF9zZXRfaHN5bmMocHJpdi0+Y2xpZW50LCAmdHc5OTEwX2hzeW5jX2N0cmwpOworCXJldCA9IHR3OTkxMF9zZXRfaHN5bmMoY2xpZW50LCAmdHc5OTEwX2hzeW5jX2N0cmwpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIHR3OTkxMF9zZXRfZm10X2Vycm9yOwogCisJcmVjdC0+d2lkdGggPSBwcml2LT5zY2FsZS0+d2lkdGg7CisJcmVjdC0+aGVpZ2h0ID0gcHJpdi0+c2NhbGUtPmhlaWdodDsKKwlyZWN0LT5sZWZ0ID0gMDsKKwlyZWN0LT50b3AgPSAwOworCiAJcmV0dXJuIHJldDsKIAogdHc5OTEwX3NldF9mbXRfZXJyb3I6CiAKLQl0dzk5MTBfcmVzZXQocHJpdi0+Y2xpZW50KTsKKwl0dzk5MTBfcmVzZXQoY2xpZW50KTsKIAlwcml2LT5zY2FsZSA9IE5VTEw7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IHR3OTkxMF9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CisKKwlpZiAoIXByaXYtPnNjYWxlKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcCA9IHsKKwkJCS5jID0geworCQkJCS5sZWZ0CT0gMCwKKwkJCQkudG9wCT0gMCwKKwkJCQkud2lkdGgJPSA2NDAsCisJCQkJLmhlaWdodAk9IDQ4MCwKKwkJCX0sCisJCX07CisJCXJldCA9IHR3OTkxMF9zX2Nyb3Aoc2QsICZjcm9wKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWEtPmMubGVmdAk9IDA7CisJYS0+Yy50b3AJPSAwOworCWEtPmMud2lkdGgJPSBwcml2LT5zY2FsZS0+d2lkdGg7CisJYS0+Yy5oZWlnaHQJPSBwcml2LT5zY2FsZS0+aGVpZ2h0OworCWEtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX2Nyb3BjYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqYSkKK3sKKwlhLT5ib3VuZHMubGVmdAkJCT0gMDsKKwlhLT5ib3VuZHMudG9wCQkJPSAwOworCWEtPmJvdW5kcy53aWR0aAkJCT0gNzY4OworCWEtPmJvdW5kcy5oZWlnaHQJCT0gNTc2OworCWEtPmRlZnJlY3QubGVmdAkJCT0gMDsKKwlhLT5kZWZyZWN0LnRvcAkJCT0gMDsKKwlhLT5kZWZyZWN0LndpZHRoCQk9IDY0MDsKKwlhLT5kZWZyZWN0LmhlaWdodAkJPSA0ODA7CisJYS0+dHlwZQkJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlhLT5waXhlbGFzcGVjdC5udW1lcmF0b3IJPSAxOworCWEtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yCT0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR3OTkxMF9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwotCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKLQkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKLQkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAotCQkud2lkdGgJPSBwaXgtPndpZHRoLAotCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisKKwlpZiAoIXByaXYtPnNjYWxlKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcCA9IHsKKwkJCS5jID0geworCQkJCS5sZWZ0CT0gMCwKKwkJCQkudG9wCT0gMCwKKwkJCQkud2lkdGgJPSA2NDAsCisJCQkJLmhlaWdodAk9IDQ4MCwKKwkJCX0sCisJCX07CisJCXJldCA9IHR3OTkxMF9zX2Nyb3Aoc2QsICZjcm9wKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWYtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXBpeC0+d2lkdGgJCT0gcHJpdi0+c2NhbGUtPndpZHRoOworCXBpeC0+aGVpZ2h0CQk9IHByaXYtPnNjYWxlLT5oZWlnaHQ7CisJcGl4LT5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9WWVVZOworCXBpeC0+Y29sb3JzcGFjZQkJPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJLyogU2VlIHR3OTkxMF9zX2Nyb3AoKSAtIG5vIHByb3BlciBjcm9wcGluZyBzdXBwb3J0ICovCisJc3RydWN0IHY0bDJfY3JvcCBhID0geworCQkuYyA9IHsKKwkJCS5sZWZ0CT0gMCwKKwkJCS50b3AJPSAwLAorCQkJLndpZHRoCT0gcGl4LT53aWR0aCwKKwkJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwkJfSwKIAl9OwotCWludCBpOworCWludCBpLCByZXQ7CiAKIAkvKgogCSAqIGNoZWNrIGNvbG9yIGZvcm1hdApAQCAtNzU1LDE5ICs4MjAsMjUgQEAKIAlpZiAoaSA9PSBBUlJBWV9TSVpFKHR3OTkxMF9jb2xvcl9mbXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiB0dzk5MTBfc2V0X2Nyb3AoaWNkLCAmcmVjdCk7CisJcmV0ID0gdHc5OTEwX3NfY3JvcChzZCwgJmEpOworCWlmICghcmV0KSB7CisJCXBpeC0+d2lkdGggPSBwcml2LT5zY2FsZS0+d2lkdGg7CisJCXBpeC0+aGVpZ2h0ID0gcHJpdi0+c2NhbGUtPmhlaWdodDsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB0dzk5MTBfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCB0dzk5MTBfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlOwogCiAJaWYgKFY0TDJfRklFTERfQU5ZID09IHBpeC0+ZmllbGQpIHsKIAkJcGl4LT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKIAl9IGVsc2UgaWYgKFY0TDJfRklFTERfSU5URVJMQUNFRCAhPSBwaXgtPmZpZWxkKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiRmllbGQgdHlwZSBpbnZhbGlkLlxuIik7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmllbGQgdHlwZSBpbnZhbGlkLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzg0LDExICs4NTUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0dzk5MTBfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IHR3OTkxMF92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOwogCXMzMiB2YWw7Ci0JaW50IHJldDsKIAogCS8qCiAJICogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KQEAgLTgwMyw3ICs4NzQsNyBAQAogCSAqLwogCWlmIChTT0NBTV9EQVRBV0lEVEhfMTYgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGggJiYKIAkgICAgU09DQU1fREFUQVdJRFRIXzggICE9IHByaXYtPmluZm8tPmJ1c3dpZHRoKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiYnVzIHdpZHRoIGVycm9yXG4iKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJidXMgd2lkdGggZXJyb3JcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTgxMyw1NCArODg0LDU0IEBACiAJLyoKIAkgKiBjaGVjayBhbmQgc2hvdyBQcm9kdWN0IElECiAJICovCi0JdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgSUQpOworCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIElEKTsKKwogCWlmICgweDBCICE9IEdFVF9JRCh2YWwpIHx8CiAJICAgIDB4MDAgIT0gR0VUX1JlVih2YWwpKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LAorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKIAkJCSJQcm9kdWN0IElEIGVycm9yICV4OiV4XG4iLCBHRVRfSUQodmFsKSwgR0VUX1JlVih2YWwpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGV2X2luZm8oJmljZC0+ZGV2LAorCWRldl9pbmZvKCZjbGllbnQtPmRldiwKIAkJICJ0dzk5MTAgUHJvZHVjdCBJRCAlMHg6JTB4XG4iLCBHRVRfSUQodmFsKSwgR0VUX1JlVih2YWwpKTsKIAotCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCWljZC0+dmRldi0+dHZub3JtcyAgICAgID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTDsKIAlpY2QtPnZkZXYtPmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0M7CiAKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB0dzk5MTBfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIHR3OTkxMF9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCQk9IHR3OTkxMF92aWRlb19wcm9iZSwKLQkucmVtb3ZlCQkJPSB0dzk5MTBfdmlkZW9fcmVtb3ZlLAotCS5pbml0CQkJPSB0dzk5MTBfaW5pdCwKLQkucmVsZWFzZQkJPSB0dzk5MTBfcmVsZWFzZSwKLQkuc3RhcnRfY2FwdHVyZQkJPSB0dzk5MTBfc3RhcnRfY2FwdHVyZSwKLQkuc3RvcF9jYXB0dXJlCQk9IHR3OTkxMF9zdG9wX2NhcHR1cmUsCi0JLnNldF9jcm9wCQk9IHR3OTkxMF9zZXRfY3JvcCwKLQkuc2V0X2ZtdAkJPSB0dzk5MTBfc2V0X2ZtdCwKLQkudHJ5X2ZtdAkJPSB0dzk5MTBfdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSB0dzk5MTBfc2V0X2J1c19wYXJhbSwKIAkucXVlcnlfYnVzX3BhcmFtCT0gdHc5OTEwX3F1ZXJ5X2J1c19wYXJhbSwKLQkuZ2V0X2NoaXBfaWQJCT0gdHc5OTEwX2dldF9jaGlwX2lkLAotCS5zZXRfc3RkCQk9IHR3OTkxMF9zZXRfc3RkLAogCS5lbnVtX2lucHV0CQk9IHR3OTkxMF9lbnVtX2lucHV0LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0dzk5MTBfc3ViZGV2X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQJPSB0dzk5MTBfZ19jaGlwX2lkZW50LAorCS5zX3N0ZAkJPSB0dzk5MTBfc19zdGQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS5nZXRfcmVnaXN0ZXIJCT0gdHc5OTEwX2dldF9yZWdpc3RlciwKLQkuc2V0X3JlZ2lzdGVyCQk9IHR3OTkxMF9zZXRfcmVnaXN0ZXIsCisJLmdfcmVnaXN0ZXIJPSB0dzk5MTBfZ19yZWdpc3RlciwKKwkuc19yZWdpc3Rlcgk9IHR3OTkxMF9zX3JlZ2lzdGVyLAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB0dzk5MTBfc3ViZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JPSB0dzk5MTBfc19zdHJlYW0sCisJLmdfZm10CQk9IHR3OTkxMF9nX2ZtdCwKKwkuc19mbXQJCT0gdHc5OTEwX3NfZm10LAorCS50cnlfZm10CT0gdHc5OTEwX3RyeV9mbXQsCisJLmNyb3BjYXAJPSB0dzk5MTBfY3JvcGNhcCwKKwkuZ19jcm9wCQk9IHR3OTkxMF9nX2Nyb3AsCisJLnNfY3JvcAkJPSB0dzk5MTBfc19jcm9wLAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdHc5OTEwX3N1YmRldl9vcHMgPSB7CisJLmNvcmUJPSAmdHc5OTEwX3N1YmRldl9jb3JlX29wcywKKwkudmlkZW8JPSAmdHc5OTEwX3N1YmRldl92aWRlb19vcHMsCit9OworCiAvKgogICogaTJjX2RyaXZlciBmdW5jdGlvbgogICovCkBAIC04NzEsMTggKzk0MiwyNCBAQAogewogCXN0cnVjdCB0dzk5MTBfcHJpdiAgICAgICAgICAgICAqcHJpdjsKIAlzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8gICAgICAgKmluZm87Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAgICAgICppY2Q7Ci0JY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHJldDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgICAgICAgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAgICAgICphZGFwdGVyID0KKwkJdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICAgICAgICAgKmljbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKIAotCWlmICghY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSkKKwlpZiAoIWljZCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlRXOTkxMDogbWlzc2luZyBzb2MtY2FtZXJhIGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CisJaWYgKCFpY2wpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5mbyA9IGNvbnRhaW5lcl9vZihjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhLAotCQkJICAgIHN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbywgbGluayk7CisJaW5mbyA9IGNvbnRhaW5lcl9vZihpY2wsIHN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbywgbGluayk7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCksCi0JCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJIkkyQy1BZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCAiCiAJCQkiSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBXG4iKTsKQEAgLTg5NCw0MCArOTcxLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcHJpdi0+aW5mbyAgID0gaW5mbzsKLQlwcml2LT5jbGllbnQgPSBjbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcHJpdik7CiAKLQlpY2QgICAgICAgICAgPSAmcHJpdi0+aWNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KCZwcml2LT5zdWJkZXYsIGNsaWVudCwgJnR3OTkxMF9zdWJkZXZfb3BzKTsKKwogCWljZC0+b3BzICAgICA9ICZ0dzk5MTBfb3BzOwotCWljZC0+Y29udHJvbCA9ICZjbGllbnQtPmRldjsKIAlpY2QtPmlmYWNlICAgPSBpbmZvLT5saW5rLmJ1c19pZDsKIAotCS8qCi0JICogc2V0IHdpZHRoIGFuZCBoZWlnaHQKLQkgKi8KLQlpY2QtPndpZHRoX21heCAgPSB0dzk5MTBfbnRzY19zY2FsZXNbMF0ud2lkdGg7IC8qIHNldCBkZWZhdWx0ICovCi0JaWNkLT53aWR0aF9taW4gID0gdHc5OTEwX250c2Nfc2NhbGVzWzBdLndpZHRoOwotCWljZC0+aGVpZ2h0X21heCA9IHR3OTkxMF9udHNjX3NjYWxlc1swXS5oZWlnaHQ7Ci0JaWNkLT5oZWlnaHRfbWluID0gdHc5OTEwX250c2Nfc2NhbGVzWzBdLmhlaWdodDsKLQotCXNjYWxlID0gdHc5OTEwX250c2Nfc2NhbGVzOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR3OTkxMF9udHNjX3NjYWxlcyk7IGkrKykgewotCQlpY2QtPndpZHRoX21heCAgPSBtYXgoc2NhbGVbaV0ud2lkdGgsICBpY2QtPndpZHRoX21heCk7Ci0JCWljZC0+d2lkdGhfbWluICA9IG1pbihzY2FsZVtpXS53aWR0aCwgIGljZC0+d2lkdGhfbWluKTsKLQkJaWNkLT5oZWlnaHRfbWF4ID0gbWF4KHNjYWxlW2ldLmhlaWdodCwgaWNkLT5oZWlnaHRfbWF4KTsKLQkJaWNkLT5oZWlnaHRfbWluID0gbWluKHNjYWxlW2ldLmhlaWdodCwgaWNkLT5oZWlnaHRfbWluKTsKLQl9Ci0Jc2NhbGUgPSB0dzk5MTBfcGFsX3NjYWxlczsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dzk5MTBfcGFsX3NjYWxlcyk7IGkrKykgewotCQlpY2QtPndpZHRoX21heCAgPSBtYXgoc2NhbGVbaV0ud2lkdGgsICBpY2QtPndpZHRoX21heCk7Ci0JCWljZC0+d2lkdGhfbWluICA9IG1pbihzY2FsZVtpXS53aWR0aCwgIGljZC0+d2lkdGhfbWluKTsKLQkJaWNkLT5oZWlnaHRfbWF4ID0gbWF4KHNjYWxlW2ldLmhlaWdodCwgaWNkLT5oZWlnaHRfbWF4KTsKLQkJaWNkLT5oZWlnaHRfbWluID0gbWluKHNjYWxlW2ldLmhlaWdodCwgaWNkLT5oZWlnaHRfbWluKTsKLQl9Ci0KLQlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOwotCisJcmV0ID0gdHc5OTEwX3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50KTsKIAlpZiAocmV0KSB7CisJCWljZC0+b3BzID0gTlVMTDsKIAkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJCWtmcmVlKHByaXYpOwogCX0KQEAgLTkzNyw5ICs5ODksMTAgQEAKIAogc3RhdGljIGludCB0dzk5MTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0Jc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmcHJpdi0+aWNkKTsKKwlpY2QtPm9wcyA9IE5VTEw7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUocHJpdik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKaW5kZXggMWZlNWJlZi4uZjk3ZmQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwpAQCAtMjQ2LDkgKzI0Niw5IEBACiAJc3dpdGNoICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uQ29kZWMpIHsKIAljYXNlIENPREVDX1NBQTcxMTM6CiAJY2FzZSBDT0RFQ19TQUE3MTExOgotCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmdXNidmlzaW9uLT52NGwyX2RldiwKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmdXNidmlzaW9uLT52NGwyX2RldiwKIAkJCQkmdXNidmlzaW9uLT5pMmNfYWRhcCwgInNhYTcxMTUiLAotCQkJCSJzYWE3MTE1X2F1dG8iLCBzYWE3MTF4X2FkZHJzKTsKKwkJCQkic2FhNzExNV9hdXRvIiwgMCwgc2FhNzExeF9hZGRycyk7CiAJCWJyZWFrOwogCX0KIAlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlR1bmVyID09IDEpIHsKQEAgLTI1NiwxNiArMjU2LDE2IEBACiAJCWVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlOwogCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCi0JCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+djRsMl9kZXYsCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmdXNidmlzaW9uLT52NGwyX2RldiwKIAkJCQkmdXNidmlzaW9uLT5pMmNfYWRhcCwgInR1bmVyIiwKLQkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOworCQkJCSJ0dW5lciIsIDAsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CiAJCS8qIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGZvdW5kIGEgZGVtb2Qgb3Igbm90LCBzZWxlY3QKIAkJICAgdGhlIHR1bmVyIHR5cGUuICovCiAJCXR5cGUgPSBzZCA/IEFERFJTX1RWX1dJVEhfREVNT0QgOiBBRERSU19UVjsKIAotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ1c2J2aXNpb24tPnY0bDJfZGV2LAorCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJnVzYnZpc2lvbi0+djRsMl9kZXYsCiAJCQkJJnVzYnZpc2lvbi0+aTJjX2FkYXAsICJ0dW5lciIsCi0JCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnModHlwZSkpOworCQkJCSJ0dW5lciIsIDAsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKHR5cGUpKTsKIAogCQlpZiAodXNidmlzaW9uLT50dW5lcl90eXBlICE9IC0xKSB7CiAJCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX1JBRElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwppbmRleCA1Yjc1N2YzLi5mOTYwZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwpAQCAtMTI0LDEzICsxMjQsMTQgQEAKIAlpbnQgcmV0OwogCiAJc2l6ZSA9IHN0cmVhbS0+ZGV2LT51dmNfdmVyc2lvbiA+PSAweDAxMTAgPyAzNCA6IDI2OworCWlmICgoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19QUk9CRV9ERUYpICYmCisJCQlxdWVyeSA9PSBVVkNfR0VUX0RFRikKKwkJcmV0dXJuIC1FSU87CisKIAlkYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICgoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19QUk9CRV9ERUYpICYmIHF1ZXJ5ID09IFVWQ19HRVRfREVGKQotCQlyZXR1cm4gLUVJTzsKLQogCXJldCA9IF9fdXZjX3F1ZXJ5X2N0cmwoc3RyZWFtLT5kZXYsIHF1ZXJ5LCAwLCBzdHJlYW0tPmludGZudW0sCiAJCXByb2JlID8gVVZDX1ZTX1BST0JFX0NPTlRST0wgOiBVVkNfVlNfQ09NTUlUX0NPTlRST0wsIGRhdGEsCiAJCXNpemUsIFVWQ19DVFJMX1NUUkVBTUlOR19USU1FT1VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwppbmRleCA3NjFmYmQ2Li4wYzIxMDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCkBAIC01NjQsMTAgKzU2NCw5IEBACiAJCWJyZWFrOwogCX0KIAljaGFuLT5ub3JtID0gMDsKLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKTsKLQlpZiAoZXJyIDwgMCkKLQkJZHByaW50aygiVklESU9DR0NIQU4gLyBWSURJT0NfR19TVEQ6ICVsZFxuIiwgZXJyKTsKLQlpZiAoZXJyID09IDApIHsKKwkvKiBOb3RlOiBHX1NURCBtaWdodCBub3QgYmUgcHJlc2VudCBmb3IgcmFkaW8gcmVjZWl2ZXJzLAorCSAqIHNvIHdlIHNob3VsZCBpZ25vcmUgYW55IGVycm9ycy4gKi8KKwlpZiAoZHJ2KGZpbGUsIFZJRElPQ19HX1NURCwgJnNpZCkgPT0gMCkgewogCQlpZiAoc2lkICYgVjRMMl9TVERfUEFMKQogCQkJY2hhbi0+bm9ybSA9IFZJREVPX01PREVfUEFMOwogCQlpZiAoc2lkICYgVjRMMl9TVERfTlRTQykKQEAgLTc3NiwxMCArNzc1LDkgQEAKIAkJCXR1bi0+ZmxhZ3MgfD0gVklERU9fVFVORVJfU0VDQU07CiAJfQogCi0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX1NURCwgJnNpZCk7Ci0JaWYgKGVyciA8IDApCi0JCWRwcmludGsoIlZJRElPQ0dUVU5FUiAvIFZJRElPQ19HX1NURDogJWxkXG4iLCBlcnIpOwotCWlmIChlcnIgPT0gMCkgeworCS8qIE5vdGU6IEdfU1REIG1pZ2h0IG5vdCBiZSBwcmVzZW50IGZvciByYWRpbyByZWNlaXZlcnMsCisJICogc28gd2Ugc2hvdWxkIGlnbm9yZSBhbnkgZXJyb3JzLiAqLworCWlmIChkcnYoZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKSA9PSAwKSB7CiAJCWlmIChzaWQgJiBWNEwyX1NURF9QQUwpCiAJCQl0dW4tPm1vZGUgPSBWSURFT19NT0RFX1BBTDsKIAkJaWYgKHNpZCAmIFY0TDJfU1REX05UU0MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggM2EwYzY0OS4uZjVhOTNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtODE0LDEzOSArODE0LDYgQEAKIAogCiAvKiBMb2FkIGFuIGkyYyBzdWItZGV2aWNlLiAqLwotc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCi0JCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IGNoYXIgKmNsaWVudF90eXBlLCB1OCBhZGRyKQotewotCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBOVUxMOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0KLQlCVUdfT04oIXY0bDJfZGV2KTsKLQotCWlmIChtb2R1bGVfbmFtZSkKLQkJcmVxdWVzdF9tb2R1bGUobW9kdWxlX25hbWUpOwotCi0JLyogU2V0dXAgdGhlIGkyYyBib2FyZCBpbmZvIHdpdGggdGhlIGRldmljZSB0eXBlIGFuZAotCSAgIHRoZSBkZXZpY2UgYWRkcmVzcy4gKi8KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0Jc3RybGNweShpbmZvLnR5cGUsIGNsaWVudF90eXBlLCBzaXplb2YoaW5mby50eXBlKSk7Ci0JaW5mby5hZGRyID0gYWRkcjsKLQotCS8qIENyZWF0ZSB0aGUgaTJjIGNsaWVudCAqLwotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQkvKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlIHRoYXQKLQkgICBjLT5kcml2ZXIgaXMgTlVMTCBpZiB0aGUgZHJpdmVyIGlzIHN0aWxsIGJlaW5nIGxvYWRlZC4KLQkgICBXZSBuZWVkIGJldHRlciBzdXBwb3J0IGZyb20gdGhlIGtlcm5lbCBzbyB0aGF0IHdlCi0JICAgY2FuIGVhc2lseSB3YWl0IGZvciB0aGUgbG9hZCB0byBmaW5pc2guICovCi0JaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBMb2NrIHRoZSBtb2R1bGUgc28gd2UgY2FuIHNhZmVseSBnZXQgdGhlIHY0bDJfc3ViZGV2IHBvaW50ZXIgKi8KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKQotCQlnb3RvIGVycm9yOwotCXNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQkvKiBSZWdpc3RlciB3aXRoIHRoZSB2NGwyX2RldmljZSB3aGljaCBpbmNyZWFzZXMgdGhlIG1vZHVsZSdzCi0JICAgdXNlIGNvdW50IGFzIHdlbGwuICovCi0JaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldih2NGwyX2Rldiwgc2QpKQotCQlzZCA9IE5VTEw7Ci0JLyogRGVjcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgdG8gbWF0Y2ggdGhlIGZpcnN0IHRyeV9tb2R1bGVfZ2V0LiAqLwotCW1vZHVsZV9wdXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0KLQlpZiAoc2QpIHsKLQkJLyogV2UgcmV0dXJuIGVycm9ycyBmcm9tIHY0bDJfc3ViZGV2X2NhbGwgb25seSBpZiB3ZSBoYXZlIHRoZQotCQkgICBjYWxsYmFjayBhcyB0aGUgLnNfY29uZmlnIGlzIG5vdCBtYW5kYXRvcnkgKi8KLQkJaW50IGVyciA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfY29uZmlnLCAwLCBOVUxMKTsKLQotCQlpZiAoZXJyICYmIGVyciAhPSAtRU5PSU9DVExDTUQpIHsKLQkJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKLQkJCXNkID0gTlVMTDsKLQkJfQotCX0KLQotZXJyb3I6Ci0JLyogSWYgd2UgaGF2ZSBhIGNsaWVudCBidXQgbm8gc3ViZGV2LCB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZAotCSAgIHdlIG11c3QgdW5yZWdpc3RlciB0aGUgY2xpZW50LiAqLwotCWlmIChjbGllbnQgJiYgc2QgPT0gTlVMTCkKLQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7Ci0JcmV0dXJuIHNkOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3N1YmRldik7Ci0KLS8qIFByb2JlIGFuZCBsb2FkIGFuIGkyYyBzdWItZGV2aWNlLiAqLwotc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsCi0JY29uc3QgdW5zaWduZWQgc2hvcnQgKmFkZHJzKQotewotCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBOVUxMOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBOVUxMOwotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCi0JQlVHX09OKCF2NGwyX2Rldik7Ci0KLQlpZiAobW9kdWxlX25hbWUpCi0JCXJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lKTsKLQotCS8qIFNldHVwIHRoZSBpMmMgYm9hcmQgaW5mbyB3aXRoIHRoZSBkZXZpY2UgdHlwZSBhbmQKLQkgICB0aGUgZGV2aWNlIGFkZHJlc3MuICovCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwotCXN0cmxjcHkoaW5mby50eXBlLCBjbGllbnRfdHlwZSwgc2l6ZW9mKGluZm8udHlwZSkpOwotCi0JLyogUHJvYmUgYW5kIGNyZWF0ZSB0aGUgaTJjIGNsaWVudCAqLwotCWNsaWVudCA9IGkyY19uZXdfcHJvYmVkX2RldmljZShhZGFwdGVyLCAmaW5mbywgYWRkcnMpOwotCS8qIE5vdGU6IGl0IGlzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmUgdGhhdAotCSAgIGMtPmRyaXZlciBpcyBOVUxMIGlmIHRoZSBkcml2ZXIgaXMgc3RpbGwgYmVpbmcgbG9hZGVkLgotCSAgIFdlIG5lZWQgYmV0dGVyIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNvIHRoYXQgd2UKLQkgICBjYW4gZWFzaWx5IHdhaXQgZm9yIHRoZSBsb2FkIHRvIGZpbmlzaC4gKi8KLQlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKLQkJZ290byBlcnJvcjsKLQotCS8qIExvY2sgdGhlIG1vZHVsZSBzbyB3ZSBjYW4gc2FmZWx5IGdldCB0aGUgdjRsMl9zdWJkZXYgcG9pbnRlciAqLwotCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcikpCi0JCWdvdG8gZXJyb3I7Ci0Jc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHY0bDJfZGV2aWNlIHdoaWNoIGluY3JlYXNlcyB0aGUgbW9kdWxlJ3MKLQkgICB1c2UgY291bnQgYXMgd2VsbC4gKi8KLQlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHY0bDJfZGV2LCBzZCkpCi0JCXNkID0gTlVMTDsKLQkvKiBEZWNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCB0byBtYXRjaCB0aGUgZmlyc3QgdHJ5X21vZHVsZV9nZXQuICovCi0JbW9kdWxlX3B1dChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQotCWlmIChzZCkgewotCQkvKiBXZSByZXR1cm4gZXJyb3JzIGZyb20gdjRsMl9zdWJkZXZfY2FsbCBvbmx5IGlmIHdlIGhhdmUgdGhlCi0JCSAgIGNhbGxiYWNrIGFzIHRoZSAuc19jb25maWcgaXMgbm90IG1hbmRhdG9yeSAqLwotCQlpbnQgZXJyID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19jb25maWcsIDAsIE5VTEwpOwotCi0JCWlmIChlcnIgJiYgZXJyICE9IC1FTk9JT0NUTENNRCkgewotCQkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCQkJc2QgPSBOVUxMOwotCQl9Ci0JfQotCi1lcnJvcjoKLQkvKiBJZiB3ZSBoYXZlIGEgY2xpZW50IGJ1dCBubyBzdWJkZXYsIHRoZW4gc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kCi0JICAgd2UgbXVzdCB1bnJlZ2lzdGVyIHRoZSBjbGllbnQuICovCi0JaWYgKGNsaWVudCAmJiBzZCA9PSBOVUxMKQotCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKLQlyZXR1cm4gc2Q7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldik7Ci0KLXN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXZfYWRkcihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAotCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCBjaGFyICpjbGllbnRfdHlwZSwgdTggYWRkcikKLXsKLQl1bnNpZ25lZCBzaG9ydCBhZGRyc1syXSA9IHsgYWRkciwgSTJDX0NMSUVOVF9FTkQgfTsKLQotCXJldHVybiB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldih2NGwyX2RldiwgYWRhcHRlciwKLQkJCW1vZHVsZV9uYW1lLCBjbGllbnRfdHlwZSwgYWRkcnMpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXZfYWRkcik7Ci0KLS8qIExvYWQgYW4gaTJjIHN1Yi1kZXZpY2UuICovCiBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKIAkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICptb2R1bGVfbmFtZSwKIAkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHJvYmVfYWRkcnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKaW5kZXggYTdmMWI2OS4uNTAwY2JlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwpAQCAtNjYsNyArNjYsNDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmljZVtWSURFT19OVU1fREVWSUNFU107CiBzdGF0aWMgREVGSU5FX01VVEVYKHZpZGVvZGV2X2xvY2spOwotc3RhdGljIERFQ0xBUkVfQklUTUFQKHZpZGVvX251bXNbVkZMX1RZUEVfTUFYXSwgVklERU9fTlVNX0RFVklDRVMpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGRldm5vZGVfbnVtc1tWRkxfVFlQRV9NQVhdLCBWSURFT19OVU1fREVWSUNFUyk7CisKKy8qIERldmljZSBub2RlIHV0aWxpdHkgZnVuY3Rpb25zICovCisKKy8qIE5vdGU6IHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIGFsbCBhc3N1bWUgdGhhdCB2ZmxfdHlwZSBpcyBpbiB0aGUgcmFuZ2UKKyAgIFswLCBWRkxfVFlQRV9NQVgtMV0uICovCisKKyNpZmRlZiBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTCisvKiBSZXR1cm4gdGhlIGJpdG1hcCBjb3JyZXNwb25kaW5nIHRvIHZmbF90eXBlLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICpkZXZub2RlX2JpdHMoaW50IHZmbF90eXBlKQoreworCS8qIEFueSB0eXBlcyBub3QgYXNzaWduZWQgdG8gZml4ZWQgbWlub3IgcmFuZ2VzIG11c3QgYmUgbWFwcGVkIHRvCisJICAgb25lIHNpbmdsZSBiaXRtYXAgZm9yIHRoZSBwdXJwb3NlcyBvZiBmaW5kaW5nIGEgZnJlZSBub2RlIG51bWJlcgorCSAgIHNpbmNlIGFsbCB0aG9zZSB1bmFzc2lnbmVkIHR5cGVzIHVzZSB0aGUgc2FtZSBtaW5vciByYW5nZS4gKi8KKwlpbnQgaWR4ID0gKHZmbF90eXBlID4gVkZMX1RZUEVfVlRYKSA/IFZGTF9UWVBFX01BWCAtIDEgOiB2ZmxfdHlwZTsKKworCXJldHVybiBkZXZub2RlX251bXNbaWR4XTsKK30KKyNlbHNlCisvKiBSZXR1cm4gdGhlIGJpdG1hcCBjb3JyZXNwb25kaW5nIHRvIHZmbF90eXBlLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICpkZXZub2RlX2JpdHMoaW50IHZmbF90eXBlKQoreworCXJldHVybiBkZXZub2RlX251bXNbdmZsX3R5cGVdOworfQorI2VuZGlmCisKKy8qIE1hcmsgZGV2aWNlIG5vZGUgbnVtYmVyIHZkZXYtPm51bSBhcyB1c2VkICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2bm9kZV9zZXQoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwlzZXRfYml0KHZkZXYtPm51bSwgZGV2bm9kZV9iaXRzKHZkZXYtPnZmbF90eXBlKSk7Cit9CisKKy8qIE1hcmsgZGV2aWNlIG5vZGUgbnVtYmVyIHZkZXYtPm51bSBhcyB1bnVzZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZub2RlX2NsZWFyKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJY2xlYXJfYml0KHZkZXYtPm51bSwgZGV2bm9kZV9iaXRzKHZkZXYtPnZmbF90eXBlKSk7Cit9CisKKy8qIFRyeSB0byBmaW5kIGEgZnJlZSBkZXZpY2Ugbm9kZSBudW1iZXIgaW4gdGhlIHJhbmdlIFtmcm9tLCB0bz4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRldm5vZGVfZmluZChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgZnJvbSwgaW50IHRvKQoreworCXJldHVybiBmaW5kX25leHRfemVyb19iaXQoZGV2bm9kZV9iaXRzKHZkZXYtPnZmbF90eXBlKSwgdG8sIGZyb20pOworfQogCiBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZpY2VfYWxsb2Modm9pZCkKIHsKQEAgLTExOSw4ICsxNjEsOCBAQAogCSAgIHRoZSByZWxlYXNlKCkgY2FsbGJhY2suICovCiAJdmRldi0+Y2RldiA9IE5VTEw7CiAKLQkvKiBNYXJrIG1pbm9yIGFzIGZyZWUgKi8KLQljbGVhcl9iaXQodmRldi0+bnVtLCB2aWRlb19udW1zW3ZkZXYtPnZmbF90eXBlXSk7CisJLyogTWFyayBkZXZpY2Ugbm9kZSBudW1iZXIgYXMgZnJlZSAqLworCWRldm5vZGVfY2xlYXIodmRldik7CiAKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCkBAIC0yOTksMzIgKzM0MSwyOCBAQAogfTsKIAogLyoqCi0gKiBnZXRfaW5kZXggLSBhc3NpZ24gc3RyZWFtIG51bWJlciBiYXNlZCBvbiBwYXJlbnQgZGV2aWNlCisgKiBnZXRfaW5kZXggLSBhc3NpZ24gc3RyZWFtIGluZGV4IG51bWJlciBiYXNlZCBvbiBwYXJlbnQgZGV2aWNlCiAgKiBAdmRldjogdmlkZW9fZGV2aWNlIHRvIGFzc2lnbiBpbmRleCBudW1iZXIgdG8sIHZkZXYtPnBhcmVudCBzaG91bGQgYmUgYXNzaWduZWQKLSAqIEBudW06ICAtMSBpZiBhdXRvIGFzc2lnbiwgcmVxdWVzdGVkIG51bWJlciBvdGhlcndpc2UKICAqCiAgKiBOb3RlIHRoYXQgd2hlbiB0aGlzIGlzIGNhbGxlZCB0aGUgbmV3IGRldmljZSBoYXMgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQKLSAqIGluIHRoZSB2aWRlb19kZXZpY2UgYXJyYXkuCisgKiBpbiB0aGUgdmlkZW9fZGV2aWNlIGFycmF5LCBidXQgaXQgd2FzIGFibGUgdG8gb2J0YWluIGEgbWlub3IgbnVtYmVyLgogICoKLSAqIFJldHVybnMgLUVORklMRSBpZiBudW0gaXMgYWxyZWFkeSBpbiB1c2UsIGEgZnJlZSBpbmRleCBudW1iZXIgaWYKLSAqIHN1Y2Nlc3NmdWwuCisgKiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIGFsd2F5cyBvYnRhaW4gYSBmcmVlIHN0cmVhbSBpbmRleCBudW1iZXIgc2luY2UKKyAqIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGlzIHRoYXQgdGhlcmUgYXJlIFZJREVPX05VTV9ERVZJQ0VTIC0gMSBzbG90cyBpbgorICogdXNlIG9mIHRoZSB2aWRlb19kZXZpY2UgYXJyYXkuCisgKgorICogUmV0dXJucyBhIGZyZWUgaW5kZXggbnVtYmVyLgogICovCi1zdGF0aWMgaW50IGdldF9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgbnVtKQorc3RhdGljIGludCBnZXRfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKIHsKIAkvKiBUaGlzIGNhbiBiZSBzdGF0aWMgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZ2xvYmFsCiAJICAgdmlkZW9kZXZfbG9jayBoZWxkLiAqLwogCXN0YXRpYyBERUNMQVJFX0JJVE1BUCh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7CiAJaW50IGk7CiAKLQlpZiAobnVtID49IFZJREVPX05VTV9ERVZJQ0VTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidmlkZW9kZXY6ICVzIG51bSBpcyB0b28gbGFyZ2VcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogU29tZSBkcml2ZXJzIGRvIG5vdCBzZXQgdGhlIHBhcmVudC4gSW4gdGhhdCBjYXNlIGFsd2F5cyByZXR1cm4KLQkgICBudW0gb3IgMC4gKi8KKwkvKiBTb21lIGRyaXZlcnMgZG8gbm90IHNldCB0aGUgcGFyZW50LiBJbiB0aGF0IGNhc2UgYWx3YXlzIHJldHVybiAwLiAqLwogCWlmICh2ZGV2LT5wYXJlbnQgPT0gTlVMTCkKLQkJcmV0dXJuIG51bSA+PSAwID8gbnVtIDogMDsKKwkJcmV0dXJuIDA7CiAKIAliaXRtYXBfemVybyh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7CiAKQEAgLTMzNSwzNSArMzczLDIzIEBACiAJCX0KIAl9CiAKLQlpZiAobnVtID49IDApIHsKLQkJaWYgKHRlc3RfYml0KG51bSwgdXNlZCkpCi0JCQlyZXR1cm4gLUVORklMRTsKLQkJcmV0dXJuIG51bTsKLQl9Ci0KLQlpID0gZmluZF9maXJzdF96ZXJvX2JpdCh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7Ci0JcmV0dXJuIGkgPT0gVklERU9fTlVNX0RFVklDRVMgPyAtRU5GSUxFIDogaTsKKwlyZXR1cm4gZmluZF9maXJzdF96ZXJvX2JpdCh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7CiB9CiAKLWludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IHR5cGUsIGludCBucikKLXsKLQlyZXR1cm4gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KHZkZXYsIHR5cGUsIG5yLCAtMSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHZpZGVvX3JlZ2lzdGVyX2RldmljZSk7Ci0KIC8qKgotICoJdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4IC0gcmVnaXN0ZXIgdmlkZW80bGludXggZGV2aWNlcworICoJdmlkZW9fcmVnaXN0ZXJfZGV2aWNlIC0gcmVnaXN0ZXIgdmlkZW80bGludXggZGV2aWNlcwogICoJQHZkZXY6IHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgd2Ugd2FudCB0byByZWdpc3RlcgogICoJQHR5cGU6IHR5cGUgb2YgZGV2aWNlIHRvIHJlZ2lzdGVyCi0gKglAbnI6ICAgd2hpY2ggZGV2aWNlIG51bWJlciAoMCA9PSAvZGV2L3ZpZGVvMCwgMSA9PSAvZGV2L3ZpZGVvMSwgLi4uCisgKglAbnI6ICAgd2hpY2ggZGV2aWNlIG5vZGUgbnVtYmVyICgwID09IC9kZXYvdmlkZW8wLCAxID09IC9kZXYvdmlkZW8xLCAuLi4KICAqICAgICAgICAgICAgIC0xID09IGZpcnN0IGZyZWUpCi0gKglAaW5kZXg6IHN0cmVhbSBudW1iZXIgYmFzZWQgb24gcGFyZW50IGRldmljZTsKLSAqCQktMSBpZiBhdXRvIGFzc2lnbiwgcmVxdWVzdGVkIG51bWJlciBvdGhlcndpc2UKKyAqCUB3YXJuX2lmX25yX2luX3VzZTogd2FybiBpZiB0aGUgZGVzaXJlZCBkZXZpY2Ugbm9kZSBudW1iZXIKKyAqCSAgICAgICB3YXMgYWxyZWFkeSBpbiB1c2UgYW5kIGFub3RoZXIgbnVtYmVyIHdhcyBjaG9zZW4gaW5zdGVhZC4KICAqCi0gKglUaGUgcmVnaXN0cmF0aW9uIGNvZGUgYXNzaWducyBtaW5vciBudW1iZXJzIGJhc2VkIG9uIHRoZSB0eXBlCi0gKglyZXF1ZXN0ZWQuIC1FTkZJTEUgaXMgcmV0dXJuZWQgaW4gYWxsIHRoZSBkZXZpY2Ugc2xvdHMgZm9yIHRoaXMKLSAqCWNhdGVnb3J5IGFyZSBmdWxsLiBJZiBub3QgdGhlbiB0aGUgbWlub3IgZmllbGQgaXMgc2V0IGFuZCB0aGUKLSAqCWRyaXZlciBpbml0aWFsaXplIGZ1bmN0aW9uIGlzIGNhbGxlZCAoaWYgbm9uICVOVUxMKS4KKyAqCVRoZSByZWdpc3RyYXRpb24gY29kZSBhc3NpZ25zIG1pbm9yIG51bWJlcnMgYW5kIGRldmljZSBub2RlIG51bWJlcnMKKyAqCWJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgdHlwZSBhbmQgcmVnaXN0ZXJzIHRoZSBuZXcgZGV2aWNlIG5vZGUgd2l0aAorICoJdGhlIGtlcm5lbC4KKyAqCUFuIGVycm9yIGlzIHJldHVybmVkIGlmIG5vIGZyZWUgbWlub3Igb3IgZGV2aWNlIG5vZGUgbnVtYmVyIGNvdWxkIGJlCisgKglmb3VuZCwgb3IgaWYgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgZGV2aWNlIG5vZGUgZmFpbGVkLgogICoKICAqCVplcm8gaXMgcmV0dXJuZWQgb24gc3VjY2Vzcy4KICAqCkBAIC0zNzcsOCArNDAzLDggQEAKICAqCiAgKgklVkZMX1RZUEVfUkFESU8gLSBBIHJhZGlvIGNhcmQKICAqLwotaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yLAotCQkJCQlpbnQgaW5kZXgpCitzdGF0aWMgaW50IF9fdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIsCisJCWludCB3YXJuX2lmX25yX2luX3VzZSkKIHsKIAlpbnQgaSA9IDA7CiAJaW50IHJldDsKQEAgLTQyMSw3ICs0NDcsNyBAQAogCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+ZGV2KQogCQl2ZGV2LT5wYXJlbnQgPSB2ZGV2LT52NGwyX2Rldi0+ZGV2OwogCi0JLyogUGFydCAyOiBmaW5kIGEgZnJlZSBtaW5vciwga2VybmVsIG51bWJlciBhbmQgZGV2aWNlIGluZGV4LiAqLworCS8qIFBhcnQgMjogZmluZCBhIGZyZWUgbWlub3IsIGRldmljZSBub2RlIG51bWJlciBhbmQgZGV2aWNlIGluZGV4LiAqLwogI2lmZGVmIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMKIAkvKiBLZWVwIHRoZSByYW5nZXMgZm9yIHRoZSBmaXJzdCBmb3VyIHR5cGVzIGZvciBoaXN0b3JpY2FsCiAJICogcmVhc29ucy4KQEAgLTQ1MiwyMSArNDc4LDIyIEBACiAJfQogI2VuZGlmCiAKLQkvKiBQaWNrIGEgbWlub3IgbnVtYmVyICovCisJLyogUGljayBhIGRldmljZSBub2RlIG51bWJlciAqLwogCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwotCW5yID0gZmluZF9uZXh0X3plcm9fYml0KHZpZGVvX251bXNbdHlwZV0sIG1pbm9yX2NudCwgbnIgPT0gLTEgPyAwIDogbnIpOworCW5yID0gZGV2bm9kZV9maW5kKHZkZXYsIG5yID09IC0xID8gMCA6IG5yLCBtaW5vcl9jbnQpOwogCWlmIChuciA9PSBtaW5vcl9jbnQpCi0JCW5yID0gZmluZF9maXJzdF96ZXJvX2JpdCh2aWRlb19udW1zW3R5cGVdLCBtaW5vcl9jbnQpOworCQluciA9IGRldm5vZGVfZmluZCh2ZGV2LCAwLCBtaW5vcl9jbnQpOwogCWlmIChuciA9PSBtaW5vcl9jbnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3QgZ2V0IGEgZnJlZSBrZXJuZWwgbnVtYmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3QgZ2V0IGEgZnJlZSBkZXZpY2Ugbm9kZSBudW1iZXJcbiIpOwogCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCQlyZXR1cm4gLUVORklMRTsKIAl9CiAjaWZkZWYgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUwotCS8qIDEtb24tMSBtYXBwaW5nIG9mIGtlcm5lbCBudW1iZXIgdG8gbWlub3IgbnVtYmVyICovCisJLyogMS1vbi0xIG1hcHBpbmcgb2YgZGV2aWNlIG5vZGUgbnVtYmVyIHRvIG1pbm9yIG51bWJlciAqLwogCWkgPSBucjsKICNlbHNlCi0JLyogVGhlIGtlcm5lbCBudW1iZXIgYW5kIG1pbm9yIG51bWJlcnMgYXJlIGluZGVwZW5kZW50ICovCisJLyogVGhlIGRldmljZSBub2RlIG51bWJlciBhbmQgbWlub3IgbnVtYmVycyBhcmUgaW5kZXBlbmRlbnQsIHNvCisJICAgd2UganVzdCBmaW5kIHRoZSBmaXJzdCBmcmVlIG1pbm9yIG51bWJlci4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgVklERU9fTlVNX0RFVklDRVM7IGkrKykKIAkJaWYgKHZpZGVvX2RldmljZVtpXSA9PSBOVUxMKQogCQkJYnJlYWs7CkBAIC00NzgsMTcgKzUwNSwxMyBAQAogI2VuZGlmCiAJdmRldi0+bWlub3IgPSBpICsgbWlub3Jfb2Zmc2V0OwogCXZkZXYtPm51bSA9IG5yOwotCXNldF9iaXQobnIsIHZpZGVvX251bXNbdHlwZV0pOworCWRldm5vZGVfc2V0KHZkZXYpOworCiAJLyogU2hvdWxkIG5vdCBoYXBwZW4gc2luY2Ugd2UgdGhvdWdodCB0aGlzIG1pbm9yIHdhcyBmcmVlICovCiAJV0FSTl9PTih2aWRlb19kZXZpY2VbdmRldi0+bWlub3JdICE9IE5VTEwpOwotCXJldCA9IHZkZXYtPmluZGV4ID0gZ2V0X2luZGV4KHZkZXYsIGluZGV4KTsKKwl2ZGV2LT5pbmRleCA9IGdldF9pbmRleCh2ZGV2KTsKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCi0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZ2V0X2luZGV4IGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCiAJLyogUGFydCAzOiBJbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgZGV2aWNlICovCiAJdmRldi0+Y2RldiA9IGNkZXZfYWxsb2MoKTsKIAlpZiAodmRldi0+Y2RldiA9PSBOVUxMKSB7CkBAIC01MTcsNyArNTQwLDcgQEAKIAl2ZGV2LT5kZXYuZGV2dCA9IE1LREVWKFZJREVPX01BSk9SLCB2ZGV2LT5taW5vcik7CiAJaWYgKHZkZXYtPnBhcmVudCkKIAkJdmRldi0+ZGV2LnBhcmVudCA9IHZkZXYtPnBhcmVudDsKLQlkZXZfc2V0X25hbWUoJnZkZXYtPmRldiwgIiVzJWQiLCBuYW1lX2Jhc2UsIG5yKTsKKwlkZXZfc2V0X25hbWUoJnZkZXYtPmRldiwgIiVzJWQiLCBuYW1lX2Jhc2UsIHZkZXYtPm51bSk7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZ2ZGV2LT5kZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKQEAgLTUyNyw2ICs1NTAsMTAgQEAKIAkgICByZWZlcmVuY2UgdG8gdGhlIGRldmljZSBnb2VzIGF3YXkuICovCiAJdmRldi0+ZGV2LnJlbGVhc2UgPSB2NGwyX2RldmljZV9yZWxlYXNlOwogCisJaWYgKG5yICE9IC0xICYmIG5yICE9IHZkZXYtPm51bSAmJiB3YXJuX2lmX25yX2luX3VzZSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlcXVlc3RlZCAlcyVkLCBnb3QgJXMlZFxuIiwKKwkJCQlfX2Z1bmNfXywgbmFtZV9iYXNlLCBuciwgbmFtZV9iYXNlLCB2ZGV2LT5udW0pOworCiAJLyogUGFydCA1OiBBY3RpdmF0ZSB0aGlzIG1pbm9yLiBUaGUgY2hhciBkZXZpY2UgY2FuIG5vdyBiZSB1c2VkLiAqLwogCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwogCXZpZGVvX2RldmljZVt2ZGV2LT5taW5vcl0gPSB2ZGV2OwpAQCAtNTM3LDEzICs1NjQsMjQgQEAKIAltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIAlpZiAodmRldi0+Y2RldikKIAkJY2Rldl9kZWwodmRldi0+Y2Rldik7Ci0JY2xlYXJfYml0KHZkZXYtPm51bSwgdmlkZW9fbnVtc1t0eXBlXSk7CisJZGV2bm9kZV9jbGVhcih2ZGV2KTsKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCS8qIE1hcmsgdGhpcyB2aWRlbyBkZXZpY2UgYXMgbmV2ZXIgaGF2aW5nIGJlZW4gcmVnaXN0ZXJlZC4gKi8KIAl2ZGV2LT5taW5vciA9IC0xOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleCk7CisKK2ludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IHR5cGUsIGludCBucikKK3sKKwlyZXR1cm4gX192aWRlb19yZWdpc3Rlcl9kZXZpY2UodmRldiwgdHlwZSwgbnIsIDEpOworfQorRVhQT1JUX1NZTUJPTCh2aWRlb19yZWdpc3Rlcl9kZXZpY2UpOworCitpbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX25vX3dhcm4oc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IHR5cGUsIGludCBucikKK3sKKwlyZXR1cm4gX192aWRlb19yZWdpc3Rlcl9kZXZpY2UodmRldiwgdHlwZSwgbnIsIDApOworfQorRVhQT1JUX1NZTUJPTCh2aWRlb19yZWdpc3Rlcl9kZXZpY2Vfbm9fd2Fybik7CiAKIC8qKgogICoJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UgLSB1bnJlZ2lzdGVyIGEgdmlkZW80bGludXggZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IGYzYjZlMTUuLmNkNmEzNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC00MzMzLDExICs0MzMzLDExIEBACiAJdmlub19pbml0X3N0YWdlKys7CiAKIAl2aW5vX2RydmRhdGEtPmRlY29kZXIgPQotCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2LAotCQkJJnZpbm9faTJjX2FkYXB0ZXIsICJzYWE3MTkxIiwgInNhYTcxOTEiLCAweDQ1KTsKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmdmlub19kcnZkYXRhLT52NGwyX2RldiwgJnZpbm9faTJjX2FkYXB0ZXIsCisJCQkgICAgICAgInNhYTcxOTEiLCAic2FhNzE5MSIsIDAsIEkyQ19BRERSUygweDQ1KSk7CiAJdmlub19kcnZkYXRhLT5jYW1lcmEgPQotCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2LAotCQkJJnZpbm9faTJjX2FkYXB0ZXIsICJpbmR5Y2FtIiwgImluZHljYW0iLCAweDJiKTsKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmdmlub19kcnZkYXRhLT52NGwyX2RldiwgJnZpbm9faTJjX2FkYXB0ZXIsCisJCQkgICAgICAgImluZHljYW0iLCAiaW5keWNhbSIsIDAsIEkyQ19BRERSUygweDJiKSk7CiAKIAlkcHJpbnRrKCJpbml0IGNvbXBsZXRlIVxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKaW5kZXggNjAyNDg0ZC4uMzdmY2RjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKQEAgLTM1MTUsOSArMzUxNSw5IEBACiAJdzk5NjhjZl90dXJuX29uX2xlZChjYW0pOwogCiAJdzk5NjhjZl9pMmNfaW5pdChjYW0pOwotCWNhbS0+c2Vuc29yX3NkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNhbS0+djRsMl9kZXYsCisJY2FtLT5zZW5zb3Jfc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjYW0tPnY0bDJfZGV2LAogCQkJJmNhbS0+aTJjX2FkYXB0ZXIsCi0JCQkib3ZjYW1jaGlwIiwgIm92Y2FtY2hpcCIsIGFkZHJzKTsKKwkJCSJvdmNhbWNoaXAiLCAib3ZjYW1jaGlwIiwgMCwgYWRkcnMpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOwogCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKaW5kZXggOTY5NzEwNC4uYjNjNjQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCkBAIC04MTksOCArODE5LDEwIEBACiAJCQkgICAgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgfHwKIAkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8CiAJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCksCi0JCQkgICAgY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqCi0JCQkgICAgMTAwMCAqIG1zZWNzX3RvX2ppZmZpZXMoMSkgKTsKKwkJCSAgICBtc2Vjc190b19qaWZmaWVzKAorCQkJCWNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgKiAxMDAwCisJCQkgICAgKQorCQkJICApOwogCQlpZiAodGltZW91dCA8IDApIHsKIAkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJcmV0dXJuIHRpbWVvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCmluZGV4IDBjNGQ5YjEuLmJlNzA1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCkBAIC0xMzU3LDE1ICsxMzU3LDE1IEBACiAJCWdvdG8genJfZnJlZV9pcnE7CiAJfQogCi0JenItPmRlY29kZXIgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmenItPnY0bDJfZGV2LAorCXpyLT5kZWNvZGVyID0gdjRsMl9pMmNfbmV3X3N1YmRldigmenItPnY0bDJfZGV2LAogCQkmenItPmkyY19hZGFwdGVyLCB6ci0+Y2FyZC5tb2RfZGVjb2RlciwgenItPmNhcmQuaTJjX2RlY29kZXIsCi0JCXpyLT5jYXJkLmFkZHJzX2RlY29kZXIpOworCQkwLCB6ci0+Y2FyZC5hZGRyc19kZWNvZGVyKTsKIAogCWlmICh6ci0+Y2FyZC5tb2RfZW5jb2RlcikKLQkJenItPmVuY29kZXIgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmenItPnY0bDJfZGV2LAorCQl6ci0+ZW5jb2RlciA9IHY0bDJfaTJjX25ld19zdWJkZXYoJnpyLT52NGwyX2RldiwKIAkJCSZ6ci0+aTJjX2FkYXB0ZXIsCiAJCQl6ci0+Y2FyZC5tb2RfZW5jb2RlciwgenItPmNhcmQuaTJjX2VuY29kZXIsCi0JCQl6ci0+Y2FyZC5hZGRyc19lbmNvZGVyKTsKKwkJCTAsIHpyLT5jYXJkLmFkZHJzX2VuY29kZXIpOwogCiAJZHByaW50aygyLAogCQlLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgdmlkZW9jb2RlYyBidXMuLi5cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCmluZGV4IDc4NDdiYmMuLmJkODNmYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCkBAIC0yMzUsNyArMjM1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtc19ibG9ja19iZG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbXNfYmxvY2tfYmRvcHMgPSB7CiAJLm9wZW4gICAgPSBtc3Byb19ibG9ja19iZF9vcGVuLAogCS5yZWxlYXNlID0gbXNwcm9fYmxvY2tfYmRfcmVsZWFzZSwKIAkuZ2V0Z2VvICA9IG1zcHJvX2Jsb2NrX2JkX2dldGdlbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggNzZmYTJlZS4uNjEwZTkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTY4MjEsNyArNjgyMSw3IEBACiAJKnNpemUgPSB5OwogfQogLyoqCi0gKgltcHRfc2V0X3Rhc2ttZ210X2luX3Byb2dyZXNzX2ZsYWcgLSBzZXQgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRhc2sgbWFuYWdtZW50CisgKgltcHRfc2V0X3Rhc2ttZ210X2luX3Byb2dyZXNzX2ZsYWcgLSBzZXQgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRhc2sgbWFuYWdlbWVudAogICoJQGlvYzogUG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKICAqCiAgKglSZXR1cm5zIDAgZm9yIFNVQ0NFU1Mgb3IgLTEgaWYgRkFJTEVELgpAQCAtNjg1NCw3ICs2ODU0LDcgQEAKIEVYUE9SVF9TWU1CT0wobXB0X3NldF90YXNrbWdtdF9pbl9wcm9ncmVzc19mbGFnKTsKIAogLyoqCi0gKgltcHRfY2xlYXJfdGFza21nbXRfaW5fcHJvZ3Jlc3NfZmxhZyAtIGNsZWFyIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCB0YXNrIG1hbmFnbWVudAorICoJbXB0X2NsZWFyX3Rhc2ttZ210X2luX3Byb2dyZXNzX2ZsYWcgLSBjbGVhciBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGFzayBtYW5hZ2VtZW50CiAgKglAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQogICoKICAqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCmluZGV4IDMzNWQ0YzcuLmQ1MDViNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYwpAQCAtOTI1LDcgKzkyNSw3IEBACiB9OwogCiAvKiBJMk8gQmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgZGVmaW5pdGlvbiAqLwotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpMm9fYmxvY2tfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaTJvX2Jsb2NrX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBpMm9fYmxvY2tfb3BlbiwKIAkucmVsZWFzZSA9IGkyb19ibG9ja19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKaW5kZXggYzUzM2Y4Ni4uNTQ0N2RhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCkBAIC02NDcsNyArNjQ3LDcgQEAKIAl1OCBzZXR0aW5nOwogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhYjMxMDBfaW5pdF9zZXR0aW5nIF9faW5pdGRhdGEKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWIzMTAwX2luaXRfc2V0dGluZyBfX2luaXRjb25zdAogYWIzMTAwX2luaXRfc2V0dGluZ3NbXSA9IHsKIAl7CiAJCS5hYnJlZyA9IEFCMzEwMF9NQ0EsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9lengtcGNhcC5jIGIvZHJpdmVycy9tZmQvZXp4LXBjYXAuYwppbmRleCAwMTZiZTQ5Li44NzYyODg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZXp4LXBjYXAuYworKysgYi9kcml2ZXJzL21mZC9lengtcGNhcC5jCkBAIC01NDgsMyArNTQ4LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkRhbmllbCBSaWJlaXJvIC8gSGFyYWxkIFdlbHRlIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1vdG9yb2xhIFBDQVAyIEFTSUMgRHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInNwaTplengtcGNhcCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMgYi9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYwppbmRleCA3OGMyMTM1Li4yYWZjMDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYworKysgYi9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYwpAQCAtNDgsOSArNDgsMTEgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCB1Y2IxNDAwICp1Y2I7CiAJc3RydWN0IHVjYjE0MDBfdHMgdWNiX3RzOworCXN0cnVjdCB1Y2IxNDAwX2dwaW8gdWNiX2dwaW87CiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwogCiAJbWVtc2V0KCZ1Y2JfdHMsIDAsIHNpemVvZih1Y2JfdHMpKTsKKwltZW1zZXQoJnVjYl9ncGlvLCAwLCBzaXplb2YodWNiX2dwaW8pKTsKIAogCXVjYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2IxNDAwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1Y2IpIHsKQEAgLTY4LDI1ICs3MCw0NCBAQAogCQlnb3RvIGVycjA7CiAJfQogCisJLyogR1BJTyAqLworCXVjYl9ncGlvLmFjOTcgPSBhYzk3OworCXVjYi0+dWNiMTQwMF9ncGlvID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ1Y2IxNDAwX2dwaW8iLCAtMSk7CisJaWYgKCF1Y2ItPnVjYjE0MDBfZ3BpbykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQorCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSh1Y2ItPnVjYjE0MDBfZ3BpbywgJnVjYl9ncGlvLAorCQkJCQlzaXplb2YodWNiX2dwaW8pKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjE7CisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZCh1Y2ItPnVjYjE0MDBfZ3Bpbyk7CisJaWYgKGVycikKKwkJZ290byBlcnIxOworCiAJLyogVE9VQ0hTQ1JFRU4gKi8KIAl1Y2JfdHMuYWM5NyA9IGFjOTc7CiAJdWNiLT51Y2IxNDAwX3RzID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ1Y2IxNDAwX3RzIiwgLTEpOwogCWlmICghdWNiLT51Y2IxNDAwX3RzKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMDsKKwkJZ290byBlcnIyOwogCX0KIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEodWNiLT51Y2IxNDAwX3RzLCAmdWNiX3RzLAogCQkJCQlzaXplb2YodWNiX3RzKSk7CiAJaWYgKGVycikKLQkJZ290byBlcnIxOworCQlnb3RvIGVycjM7CiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZCh1Y2ItPnVjYjE0MDBfdHMpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnIzOwogCiAJcmV0dXJuIDA7CiAKLWVycjE6CitlcnIzOgogCXBsYXRmb3JtX2RldmljZV9wdXQodWNiLT51Y2IxNDAwX3RzKTsKK2VycjI6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodWNiLT51Y2IxNDAwX2dwaW8pOworZXJyMToKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHVjYi0+dWNiMTQwMF9ncGlvKTsKIGVycjA6CiAJa2ZyZWUodWNiKTsKIGVycjoKQEAgLTk4LDYgKzExOSw4IEBACiAJc3RydWN0IHVjYjE0MDAgKnVjYiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodWNiLT51Y2IxNDAwX3RzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih1Y2ItPnVjYjE0MDBfZ3Bpbyk7CisKIAlrZnJlZSh1Y2IpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMgYi9kcml2ZXJzL21pc2MvZWVwcm9tL2F0MjUuYwppbmRleCAyZTUzNWEwLi5kOTAyZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZWVwcm9tL2F0MjUuYworKysgYi9kcml2ZXJzL21pc2MvZWVwcm9tL2F0MjUuYwpAQCAtNDE3LDQgKzQxNyw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgbW9zdCBTUEkgRUVQUk9NcyIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQorTU9EVUxFX0FMSUFTKCJzcGk6YXQyNSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jCmluZGV4IGRlOTY2YTYuLmFlY2Y0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbWZzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAlyZXR1cm4gZ2V0X3NiX3NpbmdsZShmc3QsIGZsYWdzLCBkYXRhLCBpYm1hc21mc19maWxsX3N1cGVyLCBtbnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaWJtYXNtZnNfc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaWJtYXNtZnNfc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2xrZHRtLmMgYi9kcml2ZXJzL21pc2MvbGtkdG0uYwppbmRleCAxYmZlNWQxLi4zNjQ4YjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbGtkdG0uYworKysgYi9kcml2ZXJzL21pc2MvbGtkdG0uYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAKIAlzd2l0Y2ggKGNwb2ludCkgewogCWNhc2UgSU5UX0hBUkRXQVJFX0VOVFJZOgotCQlsa2R0bS5rcC5zeW1ib2xfbmFtZSA9ICJfX2RvX0lSUSI7CisJCWxrZHRtLmtwLnN5bWJvbF9uYW1lID0gImRvX0lSUSI7CiAJCWxrZHRtLmVudHJ5ID0gKGtwcm9iZV9vcGNvZGVfdCopIGpwX2RvX2lycTsKIAkJYnJlYWs7CiAJY2FzZSBJTlRfSFdfSVJRX0VOOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IGFkYzIwNWMuLjg1ZjBlOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1tY19iZG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbW1jX2Jkb3BzID0gewogCS5vcGVuCQkJPSBtbWNfYmxrX29wZW4sCiAJLnJlbGVhc2UJCT0gbW1jX2Jsa19yZWxlYXNlLAogCS5nZXRnZW8JCQk9IG1tY19ibGtfZ2V0Z2VvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwppbmRleCBkODRjODgwLi43ZGFiMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwpAQCAtMzQ0LDYgKzM0NCwxMDEgQEAKIEVYUE9SVF9TWU1CT0wobW1jX2FsaWduX2RhdGFfc2l6ZSk7CiAKIC8qKgorICoJbW1jX2hvc3RfZW5hYmxlIC0gZW5hYmxlIGEgaG9zdC4KKyAqCUBob3N0OiBtbWMgaG9zdCB0byBlbmFibGUKKyAqCisgKglIb3N0cyB0aGF0IHN1cHBvcnQgcG93ZXIgc2F2aW5nIGNhbiB1c2UgdGhlICdlbmFibGUnIGFuZCAnZGlzYWJsZScKKyAqCW1ldGhvZHMgdG8gZXhpdCBhbmQgZW50ZXIgcG93ZXIgc2F2aW5nIHN0YXRlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqCXNlZSBjb21tZW50cyBmb3Igc3RydWN0IG1tY19ob3N0X29wcy4KKyAqLworaW50IG1tY19ob3N0X2VuYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaWYgKCEoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfRElTQUJMRSkpCisJCXJldHVybiAwOworCisJaWYgKGhvc3QtPmVuX2Rpc19yZWN1cnMpCisJCXJldHVybiAwOworCisJaWYgKGhvc3QtPm5lc3RpbmdfY250KyspCisJCXJldHVybiAwOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZob3N0LT5kaXNhYmxlKTsKKworCWlmIChob3N0LT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChob3N0LT5vcHMtPmVuYWJsZSkgeworCQlpbnQgZXJyOworCisJCWhvc3QtPmVuX2Rpc19yZWN1cnMgPSAxOworCQllcnIgPSBob3N0LT5vcHMtPmVuYWJsZShob3N0KTsKKwkJaG9zdC0+ZW5fZGlzX3JlY3VycyA9IDA7CisKKwkJaWYgKGVycikgeworCQkJcHJfZGVidWcoIiVzOiBlbmFibGUgZXJyb3IgJWRcbiIsCisJCQkJIG1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisJaG9zdC0+ZW5hYmxlZCA9IDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19ob3N0X2VuYWJsZSk7CisKK3N0YXRpYyBpbnQgbW1jX2hvc3RfZG9fZGlzYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGludCBsYXp5KQoreworCWlmIChob3N0LT5vcHMtPmRpc2FibGUpIHsKKwkJaW50IGVycjsKKworCQlob3N0LT5lbl9kaXNfcmVjdXJzID0gMTsKKwkJZXJyID0gaG9zdC0+b3BzLT5kaXNhYmxlKGhvc3QsIGxhenkpOworCQlob3N0LT5lbl9kaXNfcmVjdXJzID0gMDsKKworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJfZGVidWcoIiVzOiBkaXNhYmxlIGVycm9yICVkXG4iLAorCQkJCSBtbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChlcnIgPiAwKSB7CisJCQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhlcnIpOworCisJCQltbWNfc2NoZWR1bGVfZGVsYXllZF93b3JrKCZob3N0LT5kaXNhYmxlLCBkZWxheSk7CisJCX0KKwl9CisJaG9zdC0+ZW5hYmxlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJbW1jX2hvc3RfZGlzYWJsZSAtIGRpc2FibGUgYSBob3N0LgorICoJQGhvc3Q6IG1tYyBob3N0IHRvIGRpc2FibGUKKyAqCisgKglIb3N0cyB0aGF0IHN1cHBvcnQgcG93ZXIgc2F2aW5nIGNhbiB1c2UgdGhlICdlbmFibGUnIGFuZCAnZGlzYWJsZScKKyAqCW1ldGhvZHMgdG8gZXhpdCBhbmQgZW50ZXIgcG93ZXIgc2F2aW5nIHN0YXRlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqCXNlZSBjb21tZW50cyBmb3Igc3RydWN0IG1tY19ob3N0X29wcy4KKyAqLworaW50IG1tY19ob3N0X2Rpc2FibGUoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWludCBlcnI7CisKKwlpZiAoIShob3N0LT5jYXBzICYgTU1DX0NBUF9ESVNBQkxFKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaG9zdC0+ZW5fZGlzX3JlY3VycykKKwkJcmV0dXJuIDA7CisKKwlpZiAoLS1ob3N0LT5uZXN0aW5nX2NudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWhvc3QtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJZXJyID0gbW1jX2hvc3RfZG9fZGlzYWJsZShob3N0LCAwKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChtbWNfaG9zdF9kaXNhYmxlKTsKKworLyoqCiAgKglfX21tY19jbGFpbV9ob3N0IC0gZXhjbHVzaXZlbHkgY2xhaW0gYSBob3N0CiAgKglAaG9zdDogbW1jIGhvc3QgdG8gY2xhaW0KICAqCUBhYm9ydDogd2hldGhlciBvciBub3QgdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgYWJvcnRlZApAQCAtMzY2LDI1ICs0NjEsMTExIEBACiAJd2hpbGUgKDEpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlzdG9wID0gYWJvcnQgPyBhdG9taWNfcmVhZChhYm9ydCkgOiAwOwotCQlpZiAoc3RvcCB8fCAhaG9zdC0+Y2xhaW1lZCkKKwkJaWYgKHN0b3AgfHwgIWhvc3QtPmNsYWltZWQgfHwgaG9zdC0+Y2xhaW1lciA9PSBjdXJyZW50KQogCQkJYnJlYWs7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAkJc2NoZWR1bGUoKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlpZiAoIXN0b3ApCisJaWYgKCFzdG9wKSB7CiAJCWhvc3QtPmNsYWltZWQgPSAxOwotCWVsc2UKKwkJaG9zdC0+Y2xhaW1lciA9IGN1cnJlbnQ7CisJCWhvc3QtPmNsYWltX2NudCArPSAxOworCX0gZWxzZQogCQl3YWtlX3VwKCZob3N0LT53cSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZob3N0LT53cSwgJndhaXQpOworCWlmICghc3RvcCkKKwkJbW1jX2hvc3RfZW5hYmxlKGhvc3QpOwogCXJldHVybiBzdG9wOwogfQogCiBFWFBPUlRfU1lNQk9MKF9fbW1jX2NsYWltX2hvc3QpOwogCiAvKioKKyAqCW1tY190cnlfY2xhaW1faG9zdCAtIHRyeSBleGNsdXNpdmVseSB0byBjbGFpbSBhIGhvc3QKKyAqCUBob3N0OiBtbWMgaG9zdCB0byBjbGFpbQorICoKKyAqCVJldHVybnMgJTEgaWYgdGhlIGhvc3QgaXMgY2xhaW1lZCwgJTAgb3RoZXJ3aXNlLgorICovCitpbnQgbW1jX3RyeV9jbGFpbV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpbnQgY2xhaW1lZF9ob3N0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWhvc3QtPmNsYWltZWQgfHwgaG9zdC0+Y2xhaW1lciA9PSBjdXJyZW50KSB7CisJCWhvc3QtPmNsYWltZWQgPSAxOworCQlob3N0LT5jbGFpbWVyID0gY3VycmVudDsKKwkJaG9zdC0+Y2xhaW1fY250ICs9IDE7CisJCWNsYWltZWRfaG9zdCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY2xhaW1lZF9ob3N0OworfQorRVhQT1JUX1NZTUJPTChtbWNfdHJ5X2NsYWltX2hvc3QpOworCitzdGF0aWMgdm9pZCBtbWNfZG9fcmVsZWFzZV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoLS1ob3N0LT5jbGFpbV9jbnQpIHsKKwkJLyogUmVsZWFzZSBmb3IgbmVzdGVkIGNsYWltICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlob3N0LT5jbGFpbWVkID0gMDsKKwkJaG9zdC0+Y2xhaW1lciA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJd2FrZV91cCgmaG9zdC0+d3EpOworCX0KK30KKwordm9pZCBtbWNfaG9zdF9kZWVwZXJfZGlzYWJsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1tY19ob3N0ICpob3N0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbWNfaG9zdCwgZGlzYWJsZS53b3JrKTsKKworCS8qIElmIHRoZSBob3N0IGlzIGNsYWltZWQgdGhlbiB3ZSBkbyBub3Qgd2FudCB0byBkaXNhYmxlIGl0IGFueW1vcmUgKi8KKwlpZiAoIW1tY190cnlfY2xhaW1faG9zdChob3N0KSkKKwkJcmV0dXJuOworCW1tY19ob3N0X2RvX2Rpc2FibGUoaG9zdCwgMSk7CisJbW1jX2RvX3JlbGVhc2VfaG9zdChob3N0KTsKK30KKworLyoqCisgKgltbWNfaG9zdF9sYXp5X2Rpc2FibGUgLSBsYXppbHkgZGlzYWJsZSBhIGhvc3QuCisgKglAaG9zdDogbW1jIGhvc3QgdG8gZGlzYWJsZQorICoKKyAqCUhvc3RzIHRoYXQgc3VwcG9ydCBwb3dlciBzYXZpbmcgY2FuIHVzZSB0aGUgJ2VuYWJsZScgYW5kICdkaXNhYmxlJworICoJbWV0aG9kcyB0byBleGl0IGFuZCBlbnRlciBwb3dlciBzYXZpbmcgc3RhdGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICoJc2VlIGNvbW1lbnRzIGZvciBzdHJ1Y3QgbW1jX2hvc3Rfb3BzLgorICovCitpbnQgbW1jX2hvc3RfbGF6eV9kaXNhYmxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpZiAoIShob3N0LT5jYXBzICYgTU1DX0NBUF9ESVNBQkxFKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaG9zdC0+ZW5fZGlzX3JlY3VycykKKwkJcmV0dXJuIDA7CisKKwlpZiAoLS1ob3N0LT5uZXN0aW5nX2NudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWhvc3QtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGhvc3QtPmRpc2FibGVfZGVsYXkpIHsKKwkJbW1jX3NjaGVkdWxlX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGlzYWJsZSwKKwkJCQltc2Vjc190b19qaWZmaWVzKGhvc3QtPmRpc2FibGVfZGVsYXkpKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiBtbWNfaG9zdF9kb19kaXNhYmxlKGhvc3QsIDEpOworfQorRVhQT1JUX1NZTUJPTChtbWNfaG9zdF9sYXp5X2Rpc2FibGUpOworCisvKioKICAqCW1tY19yZWxlYXNlX2hvc3QgLSByZWxlYXNlIGEgaG9zdAogICoJQGhvc3Q6IG1tYyBob3N0IHRvIHJlbGVhc2UKICAqCkBAIC0zOTMsMTUgKzU3NCwxMSBAQAogICovCiB2b2lkIG1tY19yZWxlYXNlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0JaG9zdC0+Y2xhaW1lZCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCW1tY19ob3N0X2xhenlfZGlzYWJsZShob3N0KTsKIAotCXdha2VfdXAoJmhvc3QtPndxKTsKKwltbWNfZG9fcmVsZWFzZV9ob3N0KGhvc3QpOwogfQogCiBFWFBPUlRfU1lNQk9MKG1tY19yZWxlYXNlX2hvc3QpOwpAQCAtNjg3LDcgKzg2NCwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBtbWNfcG93ZXJfdXAoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewotCWludCBiaXQgPSBmbHMoaG9zdC0+b2NyX2F2YWlsKSAtIDE7CisJaW50IGJpdDsKKworCS8qIElmIG9jciBpcyBzZXQsIHdlIHVzZSBpdCAqLworCWlmIChob3N0LT5vY3IpCisJCWJpdCA9IGZmcyhob3N0LT5vY3IpIC0gMTsKKwllbHNlCisJCWJpdCA9IGZscyhob3N0LT5vY3JfYXZhaWwpIC0gMTsKIAogCWhvc3QtPmlvcy52ZGQgPSBiaXQ7CiAJaWYgKG1tY19ob3N0X2lzX3NwaShob3N0KSkgewpAQCAtOTQ3LDYgKzExMzAsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKICNlbmRpZgogCisJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX0RJU0FCTEUpCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhvc3QtPmRpc2FibGUpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhvc3QtPmRldGVjdCk7CiAJbW1jX2ZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKQEAgLTk1OCw2ICsxMTQzLDggQEAKIAkJbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJCW1tY19kZXRhY2hfYnVzKGhvc3QpOwogCQltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOworCQltbWNfYnVzX3B1dChob3N0KTsKKwkJcmV0dXJuOwogCX0KIAltbWNfYnVzX3B1dChob3N0KTsKIApAQCAtOTY2LDYgKzExNTMsODAgQEAKIAltbWNfcG93ZXJfb2ZmKGhvc3QpOwogfQogCit2b2lkIG1tY19wb3dlcl9zYXZlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCW1tY19idXNfZ2V0KGhvc3QpOworCisJaWYgKCFob3N0LT5idXNfb3BzIHx8IGhvc3QtPmJ1c19kZWFkIHx8ICFob3N0LT5idXNfb3BzLT5wb3dlcl9yZXN0b3JlKSB7CisJCW1tY19idXNfcHV0KGhvc3QpOworCQlyZXR1cm47CisJfQorCisJaWYgKGhvc3QtPmJ1c19vcHMtPnBvd2VyX3NhdmUpCisJCWhvc3QtPmJ1c19vcHMtPnBvd2VyX3NhdmUoaG9zdCk7CisKKwltbWNfYnVzX3B1dChob3N0KTsKKworCW1tY19wb3dlcl9vZmYoaG9zdCk7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19wb3dlcl9zYXZlX2hvc3QpOworCit2b2lkIG1tY19wb3dlcl9yZXN0b3JlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCW1tY19idXNfZ2V0KGhvc3QpOworCisJaWYgKCFob3N0LT5idXNfb3BzIHx8IGhvc3QtPmJ1c19kZWFkIHx8ICFob3N0LT5idXNfb3BzLT5wb3dlcl9yZXN0b3JlKSB7CisJCW1tY19idXNfcHV0KGhvc3QpOworCQlyZXR1cm47CisJfQorCisJbW1jX3Bvd2VyX3VwKGhvc3QpOworCWhvc3QtPmJ1c19vcHMtPnBvd2VyX3Jlc3RvcmUoaG9zdCk7CisKKwltbWNfYnVzX3B1dChob3N0KTsKK30KK0VYUE9SVF9TWU1CT0wobW1jX3Bvd2VyX3Jlc3RvcmVfaG9zdCk7CisKK2ludCBtbWNfY2FyZF9hd2FrZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaW50IGVyciA9IC1FTk9TWVM7CisKKwltbWNfYnVzX2dldChob3N0KTsKKworCWlmIChob3N0LT5idXNfb3BzICYmICFob3N0LT5idXNfZGVhZCAmJiBob3N0LT5idXNfb3BzLT5hd2FrZSkKKwkJZXJyID0gaG9zdC0+YnVzX29wcy0+YXdha2UoaG9zdCk7CisKKwltbWNfYnVzX3B1dChob3N0KTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19jYXJkX2F3YWtlKTsKKworaW50IG1tY19jYXJkX3NsZWVwKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpbnQgZXJyID0gLUVOT1NZUzsKKworCW1tY19idXNfZ2V0KGhvc3QpOworCisJaWYgKGhvc3QtPmJ1c19vcHMgJiYgIWhvc3QtPmJ1c19kZWFkICYmIGhvc3QtPmJ1c19vcHMtPmF3YWtlKQorCQllcnIgPSBob3N0LT5idXNfb3BzLT5zbGVlcChob3N0KTsKKworCW1tY19idXNfcHV0KGhvc3QpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wobW1jX2NhcmRfc2xlZXApOworCitpbnQgbW1jX2NhcmRfY2FuX3NsZWVwKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBob3N0LT5jYXJkOworCisJaWYgKGNhcmQgJiYgbW1jX2NhcmRfbW1jKGNhcmQpICYmIGNhcmQtPmV4dF9jc2QucmV2ID49IDMpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtbWNfY2FyZF9jYW5fc2xlZXApOworCiAjaWZkZWYgQ09ORklHX1BNCiAKIC8qKgpAQCAtOTc1LDI3ICsxMjM2LDM2IEBACiAgKi8KIGludCBtbWNfc3VzcGVuZF9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCWludCBlcnIgPSAwOworCisJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX0RJU0FCTEUpCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhvc3QtPmRpc2FibGUpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhvc3QtPmRldGVjdCk7CiAJbW1jX2ZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAltbWNfYnVzX2dldChob3N0KTsKIAlpZiAoaG9zdC0+YnVzX29wcyAmJiAhaG9zdC0+YnVzX2RlYWQpIHsKIAkJaWYgKGhvc3QtPmJ1c19vcHMtPnN1c3BlbmQpCi0JCQlob3N0LT5idXNfb3BzLT5zdXNwZW5kKGhvc3QpOwotCQlpZiAoIWhvc3QtPmJ1c19vcHMtPnJlc3VtZSkgeworCQkJZXJyID0gaG9zdC0+YnVzX29wcy0+c3VzcGVuZChob3N0KTsKKwkJaWYgKGVyciA9PSAtRU5PU1lTIHx8ICFob3N0LT5idXNfb3BzLT5yZXN1bWUpIHsKKwkJCS8qCisJCQkgKiBXZSBzaW1wbHkgInJlbW92ZSIgdGhlIGNhcmQgaW4gdGhpcyBjYXNlLgorCQkJICogSXQgd2lsbCBiZSByZWRldGVjdGVkIG9uIHJlc3VtZS4KKwkJCSAqLwogCQkJaWYgKGhvc3QtPmJ1c19vcHMtPnJlbW92ZSkKIAkJCQlob3N0LT5idXNfb3BzLT5yZW1vdmUoaG9zdCk7Ci0KIAkJCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogCQkJbW1jX2RldGFjaF9idXMoaG9zdCk7CiAJCQltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOworCQkJZXJyID0gMDsKIAkJfQogCX0KIAltbWNfYnVzX3B1dChob3N0KTsKIAotCW1tY19wb3dlcl9vZmYoaG9zdCk7CisJaWYgKCFlcnIpCisJCW1tY19wb3dlcl9vZmYoaG9zdCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBFWFBPUlRfU1lNQk9MKG1tY19zdXNwZW5kX2hvc3QpOwpAQCAtMTAwNiwxMiArMTI3NiwyNiBAQAogICovCiBpbnQgbW1jX3Jlc3VtZV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKKwlpbnQgZXJyID0gMDsKKwogCW1tY19idXNfZ2V0KGhvc3QpOwogCWlmIChob3N0LT5idXNfb3BzICYmICFob3N0LT5idXNfZGVhZCkgewogCQltbWNfcG93ZXJfdXAoaG9zdCk7CiAJCW1tY19zZWxlY3Rfdm9sdGFnZShob3N0LCBob3N0LT5vY3IpOwogCQlCVUdfT04oIWhvc3QtPmJ1c19vcHMtPnJlc3VtZSk7Ci0JCWhvc3QtPmJ1c19vcHMtPnJlc3VtZShob3N0KTsKKwkJZXJyID0gaG9zdC0+YnVzX29wcy0+cmVzdW1lKGhvc3QpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXJyb3IgJWQgZHVyaW5nIHJlc3VtZSAiCisJCQkJCSAgICAiKGNhcmQgd2FzIHJlbW92ZWQ/KVxuIiwKKwkJCQkJICAgIG1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKKwkJCWlmIChob3N0LT5idXNfb3BzLT5yZW1vdmUpCisJCQkJaG9zdC0+YnVzX29wcy0+cmVtb3ZlKGhvc3QpOworCQkJbW1jX2NsYWltX2hvc3QoaG9zdCk7CisJCQltbWNfZGV0YWNoX2J1cyhob3N0KTsKKwkJCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisJCQkvKiBubyBuZWVkIHRvIGJvdGhlciB1cHBlciBsYXllcnMgKi8KKwkJCWVyciA9IDA7CisJCX0KIAl9CiAJbW1jX2J1c19wdXQoaG9zdCk7CiAKQEAgLTEwMjEsNyArMTMwNSw3IEBACiAJICovCiAJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdCwgMSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBFWFBPUlRfU1lNQk9MKG1tY19yZXN1bWVfaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCmluZGV4IGM4MTllZmYuLjY3YWU2YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCkBAIC0xNiwxMCArMTYsMTQgQEAKICNkZWZpbmUgTU1DX0NNRF9SRVRSSUVTICAgICAgICAzCiAKIHN0cnVjdCBtbWNfYnVzX29wcyB7CisJaW50ICgqYXdha2UpKHN0cnVjdCBtbWNfaG9zdCAqKTsKKwlpbnQgKCpzbGVlcCkoc3RydWN0IG1tY19ob3N0ICopOwogCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCBtbWNfaG9zdCAqKTsKIAl2b2lkICgqZGV0ZWN0KShzdHJ1Y3QgbW1jX2hvc3QgKik7Ci0Jdm9pZCAoKnN1c3BlbmQpKHN0cnVjdCBtbWNfaG9zdCAqKTsKLQl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgbW1jX2hvc3QgKik7CisJaW50ICgqc3VzcGVuZCkoc3RydWN0IG1tY19ob3N0ICopOworCWludCAoKnJlc3VtZSkoc3RydWN0IG1tY19ob3N0ICopOworCXZvaWQgKCpwb3dlcl9zYXZlKShzdHJ1Y3QgbW1jX2hvc3QgKik7CisJdm9pZCAoKnBvd2VyX3Jlc3RvcmUpKHN0cnVjdCBtbWNfaG9zdCAqKTsKIH07CiAKIHZvaWQgbW1jX2F0dGFjaF9idXMoc3RydWN0IG1tY19ob3N0ICpob3N0LCBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgKm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCmluZGV4IDVlOTQ1ZTYuLmEyNjhkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCkBAIC04Myw2ICs4Myw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhvc3QtPndxKTsKIAlJTklUX0RFTEFZRURfV09SSygmaG9zdC0+ZGV0ZWN0LCBtbWNfcmVzY2FuKTsKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZob3N0LT5kaXNhYmxlLCBtbWNfaG9zdF9kZWVwZXJfZGlzYWJsZSk7CiAKIAkvKgogCSAqIEJ5IGRlZmF1bHQsIGhvc3RzIGRvIG5vdCBzdXBwb3J0IFNHSU8gb3IgbGFyZ2UgcmVxdWVzdHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2hvc3QuaCBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5oCmluZGV4IGMyZGMzZDIuLjhjODdlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5oCkBAIC0xNCw1ICsxNCw3IEBACiBpbnQgbW1jX3JlZ2lzdGVyX2hvc3RfY2xhc3Modm9pZCk7CiB2b2lkIG1tY191bnJlZ2lzdGVyX2hvc3RfY2xhc3Modm9pZCk7CiAKK3ZvaWQgbW1jX2hvc3RfZGVlcGVyX2Rpc2FibGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IDJmYjlkNWYuLmJmZWZjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtMTYwLDcgKzE2MCw2IEBACiB7CiAJaW50IGVycjsKIAl1OCAqZXh0X2NzZDsKLQl1bnNpZ25lZCBpbnQgZXh0X2NzZF9zdHJ1Y3Q7CiAKIAlCVUdfT04oIWNhcmQpOwogCkBAIC0xODAsMTEgKzE3OSwxMSBAQAogCiAJZXJyID0gbW1jX3NlbmRfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKIAlpZiAoZXJyKSB7Ci0JCS8qCi0JCSAqIFdlIGFsbCBob3N0cyB0aGF0IGNhbm5vdCBwZXJmb3JtIHRoZSBjb21tYW5kCi0JCSAqIHRvIGZhaWwgbW9yZSBncmFjZWZ1bGx5Ci0JCSAqLwotCQlpZiAoZXJyICE9IC1FSU5WQUwpCisJCS8qIElmIHRoZSBob3N0IG9yIHRoZSBjYXJkIGNhbid0IGRvIHRoZSBzd2l0Y2gsCisJCSAqIGZhaWwgbW9yZSBncmFjZWZ1bGx5LiAqLworCQlpZiAoKGVyciAhPSAtRUlOVkFMKQorCQkgJiYgKGVyciAhPSAtRU5PU1lTKQorCQkgJiYgKGVyciAhPSAtRUZBVUxUKSkKIAkJCWdvdG8gb3V0OwogCiAJCS8qCkBAIC0yMDcsMTYgKzIwNiwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlleHRfY3NkX3N0cnVjdCA9IGV4dF9jc2RbRVhUX0NTRF9SRVZdOwotCWlmIChleHRfY3NkX3N0cnVjdCA+IDMpIHsKKwljYXJkLT5leHRfY3NkLnJldiA9IGV4dF9jc2RbRVhUX0NTRF9SRVZdOworCWlmIChjYXJkLT5leHRfY3NkLnJldiA+IDMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5yZWNvZ25pc2VkIEVYVF9DU0Qgc3RydWN0dXJlICIKIAkJCSJ2ZXJzaW9uICVkXG4iLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCi0JCQlleHRfY3NkX3N0cnVjdCk7CisJCQljYXJkLT5leHRfY3NkLnJldik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChleHRfY3NkX3N0cnVjdCA+PSAyKSB7CisJaWYgKGNhcmQtPmV4dF9jc2QucmV2ID49IDIpIHsKIAkJY2FyZC0+ZXh0X2NzZC5zZWN0b3JzID0KIAkJCWV4dF9jc2RbRVhUX0NTRF9TRUNfQ05UICsgMF0gPDwgMCB8CiAJCQlleHRfY3NkW0VYVF9DU0RfU0VDX0NOVCArIDFdIDw8IDggfApAQCAtMjQxLDYgKzI0MCwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoY2FyZC0+ZXh0X2NzZC5yZXYgPj0gMykgeworCQl1OCBzYV9zaGlmdCA9IGV4dF9jc2RbRVhUX0NTRF9TX0FfVElNRU9VVF07CisKKwkJLyogU2xlZXAgLyBhd2FrZSB0aW1lb3V0IGluIDEwMG5zIHVuaXRzICovCisJCWlmIChzYV9zaGlmdCA+IDAgJiYgc2Ffc2hpZnQgPD0gMHgxNykKKwkJCWNhcmQtPmV4dF9jc2Quc2FfdGltZW91dCA9CisJCQkJCTEgPDwgZXh0X2NzZFtFWFRfQ1NEX1NfQV9USU1FT1VUXTsKKwl9CisKIG91dDoKIAlrZnJlZShleHRfY3NkKTsKIApAQCAtNDA4LDEyICs0MTYsMTcgQEAKIAkJKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX01NQ19ISUdIU1BFRUQpKSB7CiAJCWVyciA9IG1tY19zd2l0Y2goY2FyZCwgRVhUX0NTRF9DTURfU0VUX05PUk1BTCwKIAkJCUVYVF9DU0RfSFNfVElNSU5HLCAxKTsKLQkJaWYgKGVycikKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVCQURNU0cpCiAJCQlnb3RvIGZyZWVfY2FyZDsKIAotCQltbWNfY2FyZF9zZXRfaGlnaHNwZWVkKGNhcmQpOwotCi0JCW1tY19zZXRfdGltaW5nKGNhcmQtPmhvc3QsIE1NQ19USU1JTkdfTU1DX0hTKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHN3aXRjaCB0byBoaWdoc3BlZWQgZmFpbGVkXG4iLAorCQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJCQllcnIgPSAwOworCQl9IGVsc2UgeworCQkJbW1jX2NhcmRfc2V0X2hpZ2hzcGVlZChjYXJkKTsKKwkJCW1tY19zZXRfdGltaW5nKGNhcmQtPmhvc3QsIE1NQ19USU1JTkdfTU1DX0hTKTsKKwkJfQogCX0KIAogCS8qCkBAIC00NDgsMTAgKzQ2MSwxNyBAQAogCQllcnIgPSBtbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCiAJCQkJIEVYVF9DU0RfQlVTX1dJRFRILCBleHRfY3NkX2JpdCk7CiAKLQkJaWYgKGVycikKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVCQURNU0cpCiAJCQlnb3RvIGZyZWVfY2FyZDsKIAotCQltbWNfc2V0X2J1c193aWR0aChjYXJkLT5ob3N0LCBidXNfd2lkdGgpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc3dpdGNoIHRvIGJ1cyB3aWR0aCAlZCAiCisJCQkgICAgICAgImZhaWxlZFxuIiwgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAorCQkJICAgICAgIDEgPDwgYnVzX3dpZHRoKTsKKwkJCWVyciA9IDA7CisJCX0gZWxzZSB7CisJCQltbWNfc2V0X2J1c193aWR0aChjYXJkLT5ob3N0LCBidXNfd2lkdGgpOworCQl9CiAJfQogCiAJaWYgKCFvbGRjYXJkKQpAQCAtNTA3LDEyICs1MjcsMTAgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUKLQogLyoKICAqIFN1c3BlbmQgY2FsbGJhY2sgZnJvbSBob3N0LgogICovCi1zdGF0aWMgdm9pZCBtbWNfc3VzcGVuZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCitzdGF0aWMgaW50IG1tY19zdXNwZW5kKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKIAlCVUdfT04oIWhvc3QpOwogCUJVR19PTighaG9zdC0+Y2FyZCk7CkBAIC01MjIsNiArNTQwLDggQEAKIAkJbW1jX2Rlc2VsZWN0X2NhcmRzKGhvc3QpOwogCWhvc3QtPmNhcmQtPnN0YXRlICY9IH5NTUNfU1RBVEVfSElHSFNQRUVEOwogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTUzMCw3ICs1NTAsNyBAQAogICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBkZXRlcm1pbmUgaWYgdGhlIHNhbWUgY2FyZCBpcyBzdGlsbCBwcmVzZW50CiAgKiBhbmQsIGlmIHNvLCByZXN0b3JlIGFsbCBzdGF0ZSB0byBpdC4KICAqLwotc3RhdGljIHZvaWQgbW1jX3Jlc3VtZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCitzdGF0aWMgaW50IG1tY19yZXN1bWUoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewogCWludCBlcnI7CiAKQEAgLTU0MSwzMCArNTYxLDk5IEBACiAJZXJyID0gbW1jX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIGhvc3QtPmNhcmQpOwogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAKLQlpZiAoZXJyKSB7Ci0JCW1tY19yZW1vdmUoaG9zdCk7Ci0KLQkJbW1jX2NsYWltX2hvc3QoaG9zdCk7Ci0JCW1tY19kZXRhY2hfYnVzKGhvc3QpOwotCQltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwotCX0KLQorCXJldHVybiBlcnI7CiB9CiAKLSNlbHNlCitzdGF0aWMgdm9pZCBtbWNfcG93ZXJfcmVzdG9yZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaG9zdC0+Y2FyZC0+c3RhdGUgJj0gfk1NQ19TVEFURV9ISUdIU1BFRUQ7CisJbW1jX2NsYWltX2hvc3QoaG9zdCk7CisJbW1jX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIGhvc3QtPmNhcmQpOworCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7Cit9CiAKLSNkZWZpbmUgbW1jX3N1c3BlbmQgTlVMTAotI2RlZmluZSBtbWNfcmVzdW1lIE5VTEwKK3N0YXRpYyBpbnQgbW1jX3NsZWVwKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBob3N0LT5jYXJkOworCWludCBlcnIgPSAtRU5PU1lTOwogCi0jZW5kaWYKKwlpZiAoY2FyZCAmJiBjYXJkLT5leHRfY3NkLnJldiA+PSAzKSB7CisJCWVyciA9IG1tY19jYXJkX3NsZWVwYXdha2UoaG9zdCwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJcHJfZGVidWcoIiVzOiBFcnJvciAlZCB3aGlsZSBwdXR0aW5nIGNhcmQgaW50byBzbGVlcCIsCisJCQkJIG1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1tY19hd2FrZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gaG9zdC0+Y2FyZDsKKwlpbnQgZXJyID0gLUVOT1NZUzsKKworCWlmIChjYXJkICYmIGNhcmQtPmV4dF9jc2QucmV2ID49IDMpIHsKKwkJZXJyID0gbW1jX2NhcmRfc2xlZXBhd2FrZShob3N0LCAwKTsKKwkJaWYgKGVyciA8IDApCisJCQlwcl9kZWJ1ZygiJXM6IEVycm9yICVkIHdoaWxlIGF3YWtpbmcgc2xlZXBpbmcgY2FyZCIsCisJCQkJIG1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgbW1jX29wcyA9IHsKKwkuYXdha2UgPSBtbWNfYXdha2UsCisJLnNsZWVwID0gbW1jX3NsZWVwLAogCS5yZW1vdmUgPSBtbWNfcmVtb3ZlLAogCS5kZXRlY3QgPSBtbWNfZGV0ZWN0LAogCS5zdXNwZW5kID0gbW1jX3N1c3BlbmQsCiAJLnJlc3VtZSA9IG1tY19yZXN1bWUsCisJLnBvd2VyX3Jlc3RvcmUgPSBtbWNfcG93ZXJfcmVzdG9yZSwKIH07CiAKK3N0YXRpYyB2b2lkIG1tY19hdHRhY2hfYnVzX29wcyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJbW1jX2F0dGFjaF9idXMoaG9zdCwgJm1tY19vcHMpOworfQorCisjZWxzZQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19vcHMgPSB7CisJLmF3YWtlID0gbW1jX2F3YWtlLAorCS5zbGVlcCA9IG1tY19zbGVlcCwKKwkucmVtb3ZlID0gbW1jX3JlbW92ZSwKKwkuZGV0ZWN0ID0gbW1jX2RldGVjdCwKKwkuc3VzcGVuZCA9IE5VTEwsCisJLnJlc3VtZSA9IE5VTEwsCisJLnBvd2VyX3Jlc3RvcmUgPSBtbWNfcG93ZXJfcmVzdG9yZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgbW1jX29wc191bnNhZmUgPSB7CisJLmF3YWtlID0gbW1jX2F3YWtlLAorCS5zbGVlcCA9IG1tY19zbGVlcCwKKwkucmVtb3ZlID0gbW1jX3JlbW92ZSwKKwkuZGV0ZWN0ID0gbW1jX2RldGVjdCwKKwkuc3VzcGVuZCA9IG1tY19zdXNwZW5kLAorCS5yZXN1bWUgPSBtbWNfcmVzdW1lLAorCS5wb3dlcl9yZXN0b3JlID0gbW1jX3Bvd2VyX3Jlc3RvcmUsCit9OworCitzdGF0aWMgdm9pZCBtbWNfYXR0YWNoX2J1c19vcHMoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyAqYnVzX29wczsKKworCWlmIChob3N0LT5jYXBzICYgTU1DX0NBUF9OT05SRU1PVkFCTEUpCisJCWJ1c19vcHMgPSAmbW1jX29wc191bnNhZmU7CisJZWxzZQorCQlidXNfb3BzID0gJm1tY19vcHM7CisJbW1jX2F0dGFjaF9idXMoaG9zdCwgYnVzX29wcyk7Cit9CisKKyNlbmRpZgorCiAvKgogICogU3RhcnRpbmcgcG9pbnQgZm9yIE1NQyBjYXJkIGluaXQuCiAgKi8KQEAgLTU3NSw3ICs2NjQsNyBAQAogCUJVR19PTighaG9zdCk7CiAJV0FSTl9PTighaG9zdC0+Y2xhaW1lZCk7CiAKLQltbWNfYXR0YWNoX2J1cyhob3N0LCAmbW1jX29wcyk7CisJbW1jX2F0dGFjaF9idXNfb3BzKGhvc3QpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGdldCBPQ1IgYSBkaWZmZXJlbnQgd2F5IGZvciBTUEkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCmluZGV4IDM0Y2UyNzAuLmQyY2I1YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCkBAIC01Nyw2ICs1Nyw0MiBAQAogCXJldHVybiBfbW1jX3NlbGVjdF9jYXJkKGhvc3QsIE5VTEwpOwogfQogCitpbnQgbW1jX2NhcmRfc2xlZXBhd2FrZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGludCBzbGVlcCkKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IGhvc3QtPmNhcmQ7CisJaW50IGVycjsKKworCWlmIChzbGVlcCkKKwkJbW1jX2Rlc2VsZWN0X2NhcmRzKGhvc3QpOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsKKworCWNtZC5vcGNvZGUgPSBNTUNfU0xFRVBfQVdBS0U7CisJY21kLmFyZyA9IGNhcmQtPnJjYSA8PCAxNjsKKwlpZiAoc2xlZXApCisJCWNtZC5hcmcgfD0gMSA8PCAxNTsKKworCWNtZC5mbGFncyA9IE1NQ19SU1BfUjFCIHwgTU1DX0NNRF9BQzsKKwllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGhvc3QsICZjbWQsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKgorCSAqIElmIHRoZSBob3N0IGRvZXMgbm90IHdhaXQgd2hpbGUgdGhlIGNhcmQgc2lnbmFscyBidXN5LCB0aGVuIHdlIHdpbGwKKwkgKiB3aWxsIGhhdmUgdG8gd2FpdCB0aGUgc2xlZXAvYXdha2UgdGltZW91dC4gIE5vdGUsIHdlIGNhbm5vdCB1c2UgdGhlCisJICogU0VORF9TVEFUVVMgY29tbWFuZCB0byBwb2xsIHRoZSBzdGF0dXMgYmVjYXVzZSB0aGF0IGNvbW1hbmQgKGFuZCBtb3N0CisJICogb3RoZXJzKSBpcyBpbnZhbGlkIHdoaWxlIHRoZSBjYXJkIHNsZWVwcy4KKwkgKi8KKwlpZiAoIShob3N0LT5jYXBzICYgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1kpKQorCQltbWNfZGVsYXkoRElWX1JPVU5EX1VQKGNhcmQtPmV4dF9jc2Quc2FfdGltZW91dCwgMTAwMDApKTsKKworCWlmICghc2xlZXApCisJCWVyciA9IG1tY19zZWxlY3RfY2FyZChjYXJkKTsKKworCXJldHVybiBlcnI7Cit9CisKIGludCBtbWNfZ29faWRsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CiAJaW50IGVycjsKQEAgLTM1NCw2ICszOTAsNyBAQAogewogCWludCBlcnI7CiAJc3RydWN0IG1tY19jb21tYW5kIGNtZDsKKwl1MzIgc3RhdHVzOwogCiAJQlVHX09OKCFjYXJkKTsKIAlCVUdfT04oIWNhcmQtPmhvc3QpOwpAQCAtMzcxLDYgKzQwOCwyOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwkvKiBNdXN0IGNoZWNrIHN0YXR1cyB0byBiZSBzdXJlIG9mIG5vIGVycm9ycyAqLworCWRvIHsKKwkJZXJyID0gbW1jX3NlbmRfc3RhdHVzKGNhcmQsICZzdGF0dXMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKGNhcmQtPmhvc3QtPmNhcHMgJiBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWSkKKwkJCWJyZWFrOworCQlpZiAobW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoUjFfQ1VSUkVOVF9TVEFURShzdGF0dXMpID09IDcpOworCisJaWYgKG1tY19ob3N0X2lzX3NwaShjYXJkLT5ob3N0KSkgeworCQlpZiAoc3RhdHVzICYgUjFfU1BJX0lMTEVHQUxfQ09NTUFORCkKKwkJCXJldHVybiAtRUJBRE1TRzsKKwl9IGVsc2UgeworCQlpZiAoc3RhdHVzICYgMHhGREZGQTAwMCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmV4cGVjdGVkIHN0YXR1cyAlI3ggYWZ0ZXIgIgorCQkJICAgICAgICJzd2l0Y2giLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIHN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBSMV9TV0lUQ0hfRVJST1IpCisJCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5oIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKaW5kZXggMTc4NTRiZi4uNjUzZWI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKQEAgLTI1LDYgKzI1LDcgQEAKIGludCBtbWNfc2VuZF9jaWQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgKmNpZCk7CiBpbnQgbW1jX3NwaV9yZWFkX29jcihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGludCBoaWdoY2FwLCB1MzIgKm9jcnApOwogaW50IG1tY19zcGlfc2V0X2NyYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGludCB1c2VfY3JjKTsKK2ludCBtbWNfY2FyZF9zbGVlcGF3YWtlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IHNsZWVwKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwppbmRleCA3YWQ2NDZmLi4xMGIyYTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZC5jCkBAIC0yMTAsMTEgKzIxMCwxMSBAQAogCiAJZXJyID0gbW1jX3NkX3N3aXRjaChjYXJkLCAwLCAwLCAxLCBzdGF0dXMpOwogCWlmIChlcnIpIHsKLQkJLyoKLQkJICogV2UgYWxsIGhvc3RzIHRoYXQgY2Fubm90IHBlcmZvcm0gdGhlIGNvbW1hbmQKLQkJICogdG8gZmFpbCBtb3JlIGdyYWNlZnVsbHkKLQkJICovCi0JCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJLyogSWYgdGhlIGhvc3Qgb3IgdGhlIGNhcmQgY2FuJ3QgZG8gdGhlIHN3aXRjaCwKKwkJICogZmFpbCBtb3JlIGdyYWNlZnVsbHkuICovCisJCWlmICgoZXJyICE9IC1FSU5WQUwpCisJCSAmJiAoZXJyICE9IC1FTk9TWVMpCisJCSAmJiAoZXJyICE9IC1FRkFVTFQpKQogCQkJZ290byBvdXQ7CiAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHByb2JsZW0gcmVhZGluZyBzd2l0Y2ggIgpAQCAtNTYxLDEyICs1NjEsMTAgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUKLQogLyoKICAqIFN1c3BlbmQgY2FsbGJhY2sgZnJvbSBob3N0LgogICovCi1zdGF0aWMgdm9pZCBtbWNfc2Rfc3VzcGVuZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCitzdGF0aWMgaW50IG1tY19zZF9zdXNwZW5kKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKIAlCVUdfT04oIWhvc3QpOwogCUJVR19PTighaG9zdC0+Y2FyZCk7CkBAIC01NzYsNiArNTc0LDggQEAKIAkJbW1jX2Rlc2VsZWN0X2NhcmRzKGhvc3QpOwogCWhvc3QtPmNhcmQtPnN0YXRlICY9IH5NTUNfU1RBVEVfSElHSFNQRUVEOwogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTU4NCw3ICs1ODQsNyBAQAogICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBkZXRlcm1pbmUgaWYgdGhlIHNhbWUgY2FyZCBpcyBzdGlsbCBwcmVzZW50CiAgKiBhbmQsIGlmIHNvLCByZXN0b3JlIGFsbCBzdGF0ZSB0byBpdC4KICAqLwotc3RhdGljIHZvaWQgbW1jX3NkX3Jlc3VtZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCitzdGF0aWMgaW50IG1tY19zZF9yZXN1bWUoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewogCWludCBlcnI7CiAKQEAgLTU5NSwzMCArNTk1LDYzIEBACiAJZXJyID0gbW1jX3NkX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIGhvc3QtPmNhcmQpOwogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAKLQlpZiAoZXJyKSB7Ci0JCW1tY19zZF9yZW1vdmUoaG9zdCk7Ci0KLQkJbW1jX2NsYWltX2hvc3QoaG9zdCk7Ci0JCW1tY19kZXRhY2hfYnVzKGhvc3QpOwotCQltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwotCX0KLQorCXJldHVybiBlcnI7CiB9CiAKLSNlbHNlCitzdGF0aWMgdm9pZCBtbWNfc2RfcG93ZXJfcmVzdG9yZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaG9zdC0+Y2FyZC0+c3RhdGUgJj0gfk1NQ19TVEFURV9ISUdIU1BFRUQ7CisJbW1jX2NsYWltX2hvc3QoaG9zdCk7CisJbW1jX3NkX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIGhvc3QtPmNhcmQpOworCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7Cit9CiAKLSNkZWZpbmUgbW1jX3NkX3N1c3BlbmQgTlVMTAotI2RlZmluZSBtbWNfc2RfcmVzdW1lIE5VTEwKLQotI2VuZGlmCisjaWZkZWYgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgbW1jX3NkX29wcyA9IHsKIAkucmVtb3ZlID0gbW1jX3NkX3JlbW92ZSwKIAkuZGV0ZWN0ID0gbW1jX3NkX2RldGVjdCwKIAkuc3VzcGVuZCA9IG1tY19zZF9zdXNwZW5kLAogCS5yZXN1bWUgPSBtbWNfc2RfcmVzdW1lLAorCS5wb3dlcl9yZXN0b3JlID0gbW1jX3NkX3Bvd2VyX3Jlc3RvcmUsCiB9OwogCitzdGF0aWMgdm9pZCBtbWNfc2RfYXR0YWNoX2J1c19vcHMoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCW1tY19hdHRhY2hfYnVzKGhvc3QsICZtbWNfc2Rfb3BzKTsKK30KKworI2Vsc2UKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfc2Rfb3BzID0geworCS5yZW1vdmUgPSBtbWNfc2RfcmVtb3ZlLAorCS5kZXRlY3QgPSBtbWNfc2RfZGV0ZWN0LAorCS5zdXNwZW5kID0gTlVMTCwKKwkucmVzdW1lID0gTlVMTCwKKwkucG93ZXJfcmVzdG9yZSA9IG1tY19zZF9wb3dlcl9yZXN0b3JlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfc2Rfb3BzX3Vuc2FmZSA9IHsKKwkucmVtb3ZlID0gbW1jX3NkX3JlbW92ZSwKKwkuZGV0ZWN0ID0gbW1jX3NkX2RldGVjdCwKKwkuc3VzcGVuZCA9IG1tY19zZF9zdXNwZW5kLAorCS5yZXN1bWUgPSBtbWNfc2RfcmVzdW1lLAorCS5wb3dlcl9yZXN0b3JlID0gbW1jX3NkX3Bvd2VyX3Jlc3RvcmUsCit9OworCitzdGF0aWMgdm9pZCBtbWNfc2RfYXR0YWNoX2J1c19vcHMoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyAqYnVzX29wczsKKworCWlmIChob3N0LT5jYXBzICYgTU1DX0NBUF9OT05SRU1PVkFCTEUpCisJCWJ1c19vcHMgPSAmbW1jX3NkX29wc191bnNhZmU7CisJZWxzZQorCQlidXNfb3BzID0gJm1tY19zZF9vcHM7CisJbW1jX2F0dGFjaF9idXMoaG9zdCwgYnVzX29wcyk7Cit9CisKKyNlbmRpZgorCiAvKgogICogU3RhcnRpbmcgcG9pbnQgZm9yIFNEIGNhcmQgaW5pdC4KICAqLwpAQCAtNjI5LDcgKzY2Miw3IEBACiAJQlVHX09OKCFob3N0KTsKIAlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKIAotCW1tY19hdHRhY2hfYnVzKGhvc3QsICZtbWNfc2Rfb3BzKTsKKwltbWNfc2RfYXR0YWNoX2J1c19vcHMoaG9zdCk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gZ2V0IE9DUiBhIGRpZmZlcmVudCB3YXkgZm9yIFNQSS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKaW5kZXggZmI5OWNjZi4uY2RiODQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKQEAgLTE2NSw2ICsxNjUsMjkgQEAKIH0KIAogLyoKKyAqIElmIGRlc2lyZWQsIGRpc2Nvbm5lY3QgdGhlIHB1bGwtdXAgcmVzaXN0b3Igb24gQ0QvREFUWzNdIChwaW4gMSkKKyAqIG9mIHRoZSBjYXJkLiBUaGlzIG1heSBiZSByZXF1aXJlZCBvbiBjZXJ0YWluIHNldHVwcyBvZiBib2FyZHMsCisgKiBjb250cm9sbGVycyBhbmQgZW1iZWRkZWQgc2RpbyBkZXZpY2Ugd2hpY2ggZG8gbm90IG5lZWQgdGhlIGNhcmQncworICogcHVsbC11cC4gQXMgYSByZXN1bHQsIGNhcmQgZGV0ZWN0aW9uIGlzIGRpc2FibGVkIGFuZCBwb3dlciBpcyBzYXZlZC4KKyAqLworc3RhdGljIGludCBzZGlvX2Rpc2FibGVfY2Qoc3RydWN0IG1tY19jYXJkICpjYXJkKQoreworCWludCByZXQ7CisJdTggY3RybDsKKworCWlmICghY2FyZC0+Y2Njci5kaXNhYmxlX2NkKQorCQlyZXR1cm4gMDsKKworCXJldCA9IG1tY19pb19yd19kaXJlY3QoY2FyZCwgMCwgMCwgU0RJT19DQ0NSX0lGLCAwLCAmY3RybCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWN0cmwgfD0gU0RJT19CVVNfQ0RfRElTQUJMRTsKKworCXJldHVybiBtbWNfaW9fcndfZGlyZWN0KGNhcmQsIDEsIDAsIFNESU9fQ0NDUl9JRiwgY3RybCwgTlVMTCk7Cit9CisKKy8qCiAgKiBUZXN0IGlmIHRoZSBjYXJkIHN1cHBvcnRzIGhpZ2gtc3BlZWQgbW9kZSBhbmQsIGlmIHNvLCBzd2l0Y2ggdG8gaXQuCiAgKi8KIHN0YXRpYyBpbnQgc2Rpb19lbmFibGVfaHMoc3RydWN0IG1tY19jYXJkICpjYXJkKQpAQCAtMTk1LDYgKzIxOCwxMzUgQEAKIH0KIAogLyoKKyAqIEhhbmRsZSB0aGUgZGV0ZWN0aW9uIGFuZCBpbml0aWFsaXNhdGlvbiBvZiBhIGNhcmQuCisgKgorICogSW4gdGhlIGNhc2Ugb2YgYSByZXN1bWUsICJvbGRjYXJkIiB3aWxsIGNvbnRhaW4gdGhlIGNhcmQKKyAqIHdlJ3JlIHRyeWluZyB0byByZWluaXRpYWxpc2UuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3NkaW9faW5pdF9jYXJkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jciwKKwkJCSAgICAgIHN0cnVjdCBtbWNfY2FyZCAqb2xkY2FyZCkKK3sKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKworCUJVR19PTighaG9zdCk7CisJV0FSTl9PTighaG9zdC0+Y2xhaW1lZCk7CisKKwkvKgorCSAqIEluZm9ybSB0aGUgY2FyZCBvZiB0aGUgdm9sdGFnZQorCSAqLworCWVyciA9IG1tY19zZW5kX2lvX29wX2NvbmQoaG9zdCwgaG9zdC0+b2NyLCAmb2NyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCS8qCisJICogRm9yIFNQSSwgZW5hYmxlIENSQyBhcyBhcHByb3ByaWF0ZS4KKwkgKi8KKwlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CisJCWVyciA9IG1tY19zcGlfc2V0X2NyYyhob3N0LCB1c2Vfc3BpX2NyYyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGNhcmQgc3RydWN0dXJlLgorCSAqLworCWNhcmQgPSBtbWNfYWxsb2NfY2FyZChob3N0LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNhcmQpKSB7CisJCWVyciA9IFBUUl9FUlIoY2FyZCk7CisJCWdvdG8gZXJyOworCX0KKworCWNhcmQtPnR5cGUgPSBNTUNfVFlQRV9TRElPOworCisJLyoKKwkgKiBGb3IgbmF0aXZlIGJ1c3NlczogIHNldCBjYXJkIFJDQSBhbmQgcXVpdCBvcGVuIGRyYWluIG1vZGUuCisJICovCisJaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKKwkJZXJyID0gbW1jX3NlbmRfcmVsYXRpdmVfYWRkcihob3N0LCAmY2FyZC0+cmNhKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVtb3ZlOworCisJCW1tY19zZXRfYnVzX21vZGUoaG9zdCwgTU1DX0JVU01PREVfUFVTSFBVTEwpOworCX0KKworCS8qCisJICogU2VsZWN0IGNhcmQsIGFzIGFsbCBmb2xsb3dpbmcgY29tbWFuZHMgcmVseSBvbiB0aGF0LgorCSAqLworCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CisJCWVyciA9IG1tY19zZWxlY3RfY2FyZChjYXJkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVtb3ZlOworCX0KKworCS8qCisJICogUmVhZCB0aGUgY29tbW9uIHJlZ2lzdGVycy4KKwkgKi8KKwllcnIgPSBzZGlvX3JlYWRfY2NjcihjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlbW92ZTsKKworCS8qCisJICogUmVhZCB0aGUgY29tbW9uIENJUyB0dXBsZXMuCisJICovCisJZXJyID0gc2Rpb19yZWFkX2NvbW1vbl9jaXMoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byByZW1vdmU7CisKKwlpZiAob2xkY2FyZCkgeworCQlpbnQgc2FtZSA9IChjYXJkLT5jaXMudmVuZG9yID09IG9sZGNhcmQtPmNpcy52ZW5kb3IgJiYKKwkJCSAgICBjYXJkLT5jaXMuZGV2aWNlID09IG9sZGNhcmQtPmNpcy5kZXZpY2UpOworCQltbWNfcmVtb3ZlX2NhcmQoY2FyZCk7CisJCWlmICghc2FtZSkgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gZXJyOworCQl9CisJCWNhcmQgPSBvbGRjYXJkOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFN3aXRjaCB0byBoaWdoLXNwZWVkIChpZiBzdXBwb3J0ZWQpLgorCSAqLworCWVyciA9IHNkaW9fZW5hYmxlX2hzKGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gcmVtb3ZlOworCisJLyoKKwkgKiBDaGFuZ2UgdG8gdGhlIGNhcmQncyBtYXhpbXVtIHNwZWVkLgorCSAqLworCWlmIChtbWNfY2FyZF9oaWdoc3BlZWQoY2FyZCkpIHsKKwkJLyoKKwkJICogVGhlIFNESU8gc3BlY2lmaWNhdGlvbiBkb2Vzbid0IG1lbnRpb24gaG93CisJCSAqIHRoZSBDSVMgdHJhbnNmZXIgc3BlZWQgcmVnaXN0ZXIgcmVsYXRlcyB0bworCQkgKiBoaWdoLXNwZWVkLCBidXQgaXQgc2VlbXMgdGhhdCA1MCBNSHogaXMKKwkJICogbWFuZGF0b3J5LgorCQkgKi8KKwkJbW1jX3NldF9jbG9jayhob3N0LCA1MDAwMDAwMCk7CisJfSBlbHNlIHsKKwkJbW1jX3NldF9jbG9jayhob3N0LCBjYXJkLT5jaXMubWF4X2R0cik7CisJfQorCisJLyoKKwkgKiBTd2l0Y2ggdG8gd2lkZXIgYnVzIChpZiBzdXBwb3J0ZWQpLgorCSAqLworCWVyciA9IHNkaW9fZW5hYmxlX3dpZGUoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byByZW1vdmU7CisKKwlpZiAoIW9sZGNhcmQpCisJCWhvc3QtPmNhcmQgPSBjYXJkOworCXJldHVybiAwOworCityZW1vdmU6CisJaWYgKCFvbGRjYXJkKQorCQltbWNfcmVtb3ZlX2NhcmQoY2FyZCk7CisKK2VycjoKKwlyZXR1cm4gZXJyOworfQorCisvKgogICogSG9zdCBpcyBiZWluZyByZW1vdmVkLiBGcmVlIHVwIHRoZSBjdXJyZW50IGNhcmQuCiAgKi8KIHN0YXRpYyB2b2lkIG1tY19zZGlvX3JlbW92ZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCkBAIC0yNDMsMTAgKzM5NSw3NyBAQAogCX0KIH0KIAorLyoKKyAqIFNESU8gc3VzcGVuZC4gIFdlIG5lZWQgdG8gc3VzcGVuZCBhbGwgZnVuY3Rpb25zIHNlcGFyYXRlbHkuCisgKiBUaGVyZWZvcmUgYWxsIHJlZ2lzdGVyZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSBkcml2ZXJzIHdpdGggc3VzcGVuZAorICogYW5kIHJlc3VtZSBtZXRob2RzLiAgRmFpbGluZyB0aGF0IHdlIHNpbXBseSByZW1vdmUgdGhlIHdob2xlIGNhcmQuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3NkaW9fc3VzcGVuZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+Y2FyZC0+c2Rpb19mdW5jczsgaSsrKSB7CisJCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBob3N0LT5jYXJkLT5zZGlvX2Z1bmNbaV07CisJCWlmIChmdW5jICYmIHNkaW9fZnVuY19wcmVzZW50KGZ1bmMpICYmIGZ1bmMtPmRldi5kcml2ZXIpIHsKKwkJCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbW9wcyA9IGZ1bmMtPmRldi5kcml2ZXItPnBtOworCQkJaWYgKCFwbW9wcyB8fCAhcG1vcHMtPnN1c3BlbmQgfHwgIXBtb3BzLT5yZXN1bWUpIHsKKwkJCQkvKiBmb3JjZSByZW1vdmFsIG9mIGVudGlyZSBjYXJkIGluIHRoYXQgY2FzZSAqLworCQkJCWVyciA9IC1FTk9TWVM7CisJCQl9IGVsc2UKKwkJCQllcnIgPSBwbW9wcy0+c3VzcGVuZCgmZnVuYy0+ZGV2KTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJd2hpbGUgKGVyciAmJiAtLWkgPj0gMCkgeworCQlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gaG9zdC0+Y2FyZC0+c2Rpb19mdW5jW2ldOworCQlpZiAoZnVuYyAmJiBzZGlvX2Z1bmNfcHJlc2VudChmdW5jKSAmJiBmdW5jLT5kZXYuZHJpdmVyKSB7CisJCQljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG1vcHMgPSBmdW5jLT5kZXYuZHJpdmVyLT5wbTsKKwkJCXBtb3BzLT5yZXN1bWUoJmZ1bmMtPmRldik7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1tY19zZGlvX3Jlc3VtZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaW50IGksIGVycjsKKworCUJVR19PTighaG9zdCk7CisJQlVHX09OKCFob3N0LT5jYXJkKTsKKworCS8qIEJhc2ljIGNhcmQgcmVpbml0aWFsaXphdGlvbi4gKi8KKwltbWNfY2xhaW1faG9zdChob3N0KTsKKwllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+b2NyLCBob3N0LT5jYXJkKTsKKwltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOworCisJLyoKKwkgKiBJZiB0aGUgY2FyZCBsb29rZWQgdG8gYmUgdGhlIHNhbWUgYXMgYmVmb3JlIHN1c3BlbmRpbmcsIHRoZW4KKwkgKiB3ZSBwcm9jZWVkIHRvIHJlc3VtZSBhbGwgY2FyZCBmdW5jdGlvbnMuICBJZiBvbmUgb2YgdGhlbSByZXR1cm5zCisJICogYW4gZXJyb3IgdGhlbiB3ZSBzaW1wbHkgcmV0dXJuIHRoYXQgZXJyb3IgdG8gdGhlIGNvcmUgYW5kIHRoZQorCSAqIGNhcmQgd2lsbCBiZSByZWRldGVjdGVkIGFzIG5ldy4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgorCSAqIHRoZSBmdW5jdGlvbiBkcml2ZXIgdG8gcGVyZm9ybSBmdXJ0aGVyIHRlc3RzIHdpdGggdGhlIGV4dHJhCisJICoga25vd2xlZGdlIGl0IGhhcyBvZiB0aGUgY2FyZCB0byBjb25maXJtIHRoZSBjYXJkIGlzIGluZGVlZCB0aGUKKwkgKiBzYW1lIGFzIGJlZm9yZSBzdXNwZW5kaW5nIChzYW1lIE1BQyBhZGRyZXNzIGZvciBuZXR3b3JrIGNhcmRzLAorCSAqIGV0Yy4pIGFuZCByZXR1cm4gYW4gZXJyb3Igb3RoZXJ3aXNlLgorCSAqLworCWZvciAoaSA9IDA7ICFlcnIgJiYgaSA8IGhvc3QtPmNhcmQtPnNkaW9fZnVuY3M7IGkrKykgeworCQlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gaG9zdC0+Y2FyZC0+c2Rpb19mdW5jW2ldOworCQlpZiAoZnVuYyAmJiBzZGlvX2Z1bmNfcHJlc2VudChmdW5jKSAmJiBmdW5jLT5kZXYuZHJpdmVyKSB7CisJCQljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG1vcHMgPSBmdW5jLT5kZXYuZHJpdmVyLT5wbTsKKwkJCWVyciA9IHBtb3BzLT5yZXN1bWUoJmZ1bmMtPmRldik7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19zZGlvX29wcyA9IHsKIAkucmVtb3ZlID0gbW1jX3NkaW9fcmVtb3ZlLAogCS5kZXRlY3QgPSBtbWNfc2Rpb19kZXRlY3QsCisJLnN1c3BlbmQgPSBtbWNfc2Rpb19zdXNwZW5kLAorCS5yZXN1bWUgPSBtbWNfc2Rpb19yZXN1bWUsCiB9OwogCiAKQEAgLTI3NSwxMyArNDk0LDYgQEAKIAkJb2NyICY9IH4weDdGOwogCX0KIAotCWlmIChvY3IgJiBNTUNfVkREXzE2NV8xOTUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFNESU8gY2FyZCBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgIgotCQkgICAgICAgImluY29tcGxldGVseSBkZWZpbmVkICdsb3cgdm9sdGFnZSByYW5nZScuIFRoaXMgIgotCQkgICAgICAgIndpbGwgYmUgaWdub3JlZC5cbiIsIG1tY19ob3N0bmFtZShob3N0KSk7Ci0JCW9jciAmPSB+TU1DX1ZERF8xNjVfMTk1OwotCX0KLQogCWhvc3QtPm9jciA9IG1tY19zZWxlY3Rfdm9sdGFnZShob3N0LCBvY3IpOwogCiAJLyoKQEAgLTI5MywxMDEgKzUwNSwyMyBAQAogCX0KIAogCS8qCi0JICogSW5mb3JtIHRoZSBjYXJkIG9mIHRoZSB2b2x0YWdlCisJICogRGV0ZWN0IGFuZCBpbml0IHRoZSBjYXJkLgogCSAqLwotCWVyciA9IG1tY19zZW5kX2lvX29wX2NvbmQoaG9zdCwgaG9zdC0+b2NyLCAmb2NyKTsKKwllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+b2NyLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycjsKLQotCS8qCi0JICogRm9yIFNQSSwgZW5hYmxlIENSQyBhcyBhcHByb3ByaWF0ZS4KLQkgKi8KLQlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7Ci0JCWVyciA9IG1tY19zcGlfc2V0X2NyYyhob3N0LCB1c2Vfc3BpX2NyYyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycjsKLQl9CisJY2FyZCA9IGhvc3QtPmNhcmQ7CiAKIAkvKgogCSAqIFRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIG9uIHRoZSBjYXJkIGlzIGVuY29kZWQgaW5zaWRlCiAJICogdGhlIG9jci4KIAkgKi8KLQlmdW5jcyA9IChvY3IgJiAweDcwMDAwMDAwKSA+PiAyODsKKwljYXJkLT5zZGlvX2Z1bmNzID0gZnVuY3MgPSAob2NyICYgMHg3MDAwMDAwMCkgPj4gMjg7CiAKIAkvKgotCSAqIEFsbG9jYXRlIGNhcmQgc3RydWN0dXJlLgorCSAqIElmIG5lZWRlZCwgZGlzY29ubmVjdCBjYXJkIGRldGVjdGlvbiBwdWxsLXVwIHJlc2lzdG9yLgogCSAqLwotCWNhcmQgPSBtbWNfYWxsb2NfY2FyZChob3N0LCBOVUxMKTsKLQlpZiAoSVNfRVJSKGNhcmQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoY2FyZCk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWNhcmQtPnR5cGUgPSBNTUNfVFlQRV9TRElPOwotCWNhcmQtPnNkaW9fZnVuY3MgPSBmdW5jczsKLQotCWhvc3QtPmNhcmQgPSBjYXJkOwotCi0JLyoKLQkgKiBGb3IgbmF0aXZlIGJ1c3NlczogIHNldCBjYXJkIFJDQSBhbmQgcXVpdCBvcGVuIGRyYWluIG1vZGUuCi0JICovCi0JaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKLQkJZXJyID0gbW1jX3NlbmRfcmVsYXRpdmVfYWRkcihob3N0LCAmY2FyZC0+cmNhKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gcmVtb3ZlOwotCi0JCW1tY19zZXRfYnVzX21vZGUoaG9zdCwgTU1DX0JVU01PREVfUFVTSFBVTEwpOwotCX0KLQotCS8qCi0JICogU2VsZWN0IGNhcmQsIGFzIGFsbCBmb2xsb3dpbmcgY29tbWFuZHMgcmVseSBvbiB0aGF0LgotCSAqLwotCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7Ci0JCWVyciA9IG1tY19zZWxlY3RfY2FyZChjYXJkKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gcmVtb3ZlOwotCX0KLQotCS8qCi0JICogUmVhZCB0aGUgY29tbW9uIHJlZ2lzdGVycy4KLQkgKi8KLQllcnIgPSBzZGlvX3JlYWRfY2NjcihjYXJkKTsKLQlpZiAoZXJyKQotCQlnb3RvIHJlbW92ZTsKLQotCS8qCi0JICogUmVhZCB0aGUgY29tbW9uIENJUyB0dXBsZXMuCi0JICovCi0JZXJyID0gc2Rpb19yZWFkX2NvbW1vbl9jaXMoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byByZW1vdmU7Ci0KLQkvKgotCSAqIFN3aXRjaCB0byBoaWdoLXNwZWVkIChpZiBzdXBwb3J0ZWQpLgotCSAqLwotCWVyciA9IHNkaW9fZW5hYmxlX2hzKGNhcmQpOwotCWlmIChlcnIpCi0JCWdvdG8gcmVtb3ZlOwotCi0JLyoKLQkgKiBDaGFuZ2UgdG8gdGhlIGNhcmQncyBtYXhpbXVtIHNwZWVkLgotCSAqLwotCWlmIChtbWNfY2FyZF9oaWdoc3BlZWQoY2FyZCkpIHsKLQkJLyoKLQkJICogVGhlIFNESU8gc3BlY2lmaWNhdGlvbiBkb2Vzbid0IG1lbnRpb24gaG93Ci0JCSAqIHRoZSBDSVMgdHJhbnNmZXIgc3BlZWQgcmVnaXN0ZXIgcmVsYXRlcyB0bwotCQkgKiBoaWdoLXNwZWVkLCBidXQgaXQgc2VlbXMgdGhhdCA1MCBNSHogaXMKLQkJICogbWFuZGF0b3J5LgotCQkgKi8KLQkJbW1jX3NldF9jbG9jayhob3N0LCA1MDAwMDAwMCk7Ci0JfSBlbHNlIHsKLQkJbW1jX3NldF9jbG9jayhob3N0LCBjYXJkLT5jaXMubWF4X2R0cik7Ci0JfQotCi0JLyoKLQkgKiBTd2l0Y2ggdG8gd2lkZXIgYnVzIChpZiBzdXBwb3J0ZWQpLgotCSAqLwotCWVyciA9IHNkaW9fZW5hYmxlX3dpZGUoY2FyZCk7CisJZXJyID0gc2Rpb19kaXNhYmxlX2NkKGNhcmQpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVtb3ZlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKaW5kZXggNDYyODRiNS4uZDM3NDY0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYwpAQCAtMjAsOSArMjAsNiBAQAogI2luY2x1ZGUgInNkaW9fY2lzLmgiCiAjaW5jbHVkZSAic2Rpb19idXMuaCIKIAotI2RlZmluZSBkZXZfdG9fc2Rpb19mdW5jKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19mdW5jLCBkZXYpCi0jZGVmaW5lIHRvX3NkaW9fZHJpdmVyKGQpICAgICAgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzZGlvX2RyaXZlciwgZHJ2KQotCiAvKiBzaG93IGNvbmZpZ3VyYXRpb24gZmllbGRzICovCiAjZGVmaW5lIHNkaW9fY29uZmlnX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKaW5kZXggOTYzZjI5My4uNjYzNjM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwpAQCAtNDAsNyArNDAsNyBAQAogCQkJbnJfc3RyaW5ncysrOwogCX0KIAotCWlmIChidWZbaS0xXSAhPSAnXDAnKSB7CisJaWYgKG5yX3N0cmluZ3MgPCA0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNESU86IGlnbm9yaW5nIGJyb2tlbiBDSVNUUExfVkVSU18xXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9faW8uYwppbmRleCBmNjFmYzJkLi5mOWFhOGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9faW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9faW8uYwpAQCAtNjI0LDcgKzYyNCw3IEBACiAKIAlCVUdfT04oIWZ1bmMpOwogCi0JaWYgKGFkZHIgPCAweEYwIHx8IGFkZHIgPiAweEZGKSB7CisJaWYgKChhZGRyIDwgMHhGMCB8fCBhZGRyID4gMHhGRikgJiYgKCFtbWNfY2FyZF9sZW5pZW50X2ZuMChmdW5jLT5jYXJkKSkpIHsKIAkJaWYgKGVycl9yZXQpCiAJCQkqZXJyX3JldCA9IC1FSU5WQUw7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCA4OTFlZjE4Li43Y2IwNTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC0xMzIsMTEgKzEzMiwxMSBAQAogCiBjb25maWcgTU1DX09NQVBfSFMKIAl0cmlzdGF0ZSAiVEkgT01BUCBIaWdoIFNwZWVkIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0MzAgfHwgQVJDSF9PTUFQMworCWRlcGVuZHMgb24gQVJDSF9PTUFQMjQzMCB8fCBBUkNIX09NQVAzIHx8IEFSQ0hfT01BUDQKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIFRJIE9NQVAgSGlnaCBTcGVlZCBNdWx0aW1lZGlhIGNhcmQgSW50ZXJmYWNlLgotCSAgSWYgeW91IGhhdmUgYW4gT01BUDI0MzAgb3IgT01BUDMgYm9hcmQgd2l0aCBhIE11bHRpbWVkaWEgQ2FyZCBzbG90LAotCSAgc2F5IFkgb3IgTSBoZXJlLgorCSAgSWYgeW91IGhhdmUgYW4gT01BUDI0MzAgb3IgT01BUDMgYm9hcmQgb3IgT01BUDQgYm9hcmQgd2l0aCBhCisJICBNdWx0aW1lZGlhIENhcmQgc2xvdCwgc2F5IFkgb3IgTSBoZXJlLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0xNjAsNiArMTYwLDEyIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2Nob2ljZQorCXByb21wdCAiQXRtZWwgU0QvTU1DIERyaXZlciIKKwlkZWZhdWx0IE1NQ19BVE1FTE1DSSBpZiBBVlIzMgorCWhlbHAKKwkgIENob29zZSB3aGljaCBkcml2ZXIgdG8gdXNlIGZvciB0aGUgQXRtZWwgTUNJIFNpbGljb24KKwogY29uZmlnIE1NQ19BVDkxCiAJdHJpc3RhdGUgIkFUOTEgU0QvTU1DIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTEKQEAgLTE3MCwxNyArMTc2LDE5IEBACiAKIGNvbmZpZyBNTUNfQVRNRUxNQ0kKIAl0cmlzdGF0ZSAiQXRtZWwgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVZSMzIKKwlkZXBlbmRzIG9uIEFWUjMyIHx8IEFSQ0hfQVQ5MQogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgQXRtZWwgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIuIElmCi0JICB5b3UgaGF2ZSBhbiBBVDMyIChBVlIzMikgcGxhdGZvcm0gd2l0aCBhIE11bHRpbWVkaWEgQ2FyZAotCSAgc2xvdCwgc2F5IFkgb3IgTSBoZXJlLgorCSAgeW91IGhhdmUgYW4gQVQzMiAoQVZSMzIpIG9yIEFUOTEgcGxhdGZvcm0gd2l0aCBhIE11bHRpbWVkaWEKKwkgIENhcmQgc2xvdCwgc2F5IFkgb3IgTSBoZXJlLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitlbmRjaG9pY2UKKwogY29uZmlnIE1NQ19BVE1FTE1DSV9ETUEKIAlib29sICJBdG1lbCBNQ0kgRE1BIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBNTUNfQVRNRUxNQ0kgJiYgRE1BX0VOR0lORSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIE1NQ19BVE1FTE1DSSAmJiBBVlIzMiAmJiBETUFfRU5HSU5FICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaGF2ZSB0aGUgQXRtZWwgTUNJIGRyaXZlciB1c2UgYSBETUEgZW5naW5lIHRvCiAJICBkbyBkYXRhIHRyYW5zZmVycyBhbmQgdGh1cyBpbmNyZWFzZSB0aGUgdGhyb3VnaHB1dCBhbmQKQEAgLTE5OSw2ICsyMDcsMTMgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1NQ19NU003WDAwQQorCXRyaXN0YXRlICJRdWFsY29tbSBNU00gN1gwMEEgU0RDQyBDb250cm9sbGVyIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBNTUMgJiYgQVJDSF9NU00KKwloZWxwCisJICBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBTRC9NTUMgY2VsbCBmb3VuZCBpbiB0aGUKKyAgICAgICAgICBNU00gN1gwMEEgY29udHJvbGxlcnMgZnJvbSBRdWFsY29tbS4KKwogY29uZmlnIE1NQ19NWEMKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIGkuTVgyLzMgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9NWEMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCmluZGV4IGNmMTUzZjYuLmFiY2IwNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX01NQ19BVDkxKQkJKz0gYXQ5MV9tY2kubwogb2JqLSQoQ09ORklHX01NQ19BVE1FTE1DSSkJKz0gYXRtZWwtbWNpLm8KIG9iai0kKENPTkZJR19NTUNfVElGTV9TRCkJKz0gdGlmbV9zZC5vCitvYmotJChDT05GSUdfTU1DX01TTTdYMDBBKQkrPSBtc21fc2RjYy5vCiBvYmotJChDT05GSUdfTU1DX01WU0RJTykJKz0gbXZzZGlvLm8KIG9iai0kKENPTkZJR19NTUNfU1BJKQkJKz0gbW1jX3NwaS5vCiBpZmVxICgkKENPTkZJR19PRikseSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IDdiNjAzZTQuLjA2NWZhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAorI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogCiAjaW5jbHVkZSAiYXRtZWwtbWNpLXJlZ3MuaCIKQEAgLTIxMCw2ICsyMTEsMTggQEAKIAlzZXRfYml0KGV2ZW50LCAmaG9zdC0+cGVuZGluZ19ldmVudHMpCiAKIC8qCisgKiBFbmFibGUgb3IgZGlzYWJsZSBmZWF0dXJlcy9yZWdpc3RlcnMgYmFzZWQgb24KKyAqIHdoZXRoZXIgdGhlIHByb2Nlc3NvciBzdXBwb3J0cyB0aGVtCisgKi8KK3N0YXRpYyBib29sIG1jaV9oYXNfcndwcm9vZih2b2lkKQoreworCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXJtOTIwMCgpKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKK30KKworLyoKICAqIFRoZSBkZWJ1Z2ZzIHN0dWZmIGJlbG93IGlzIG1vc3RseSBvcHRpbWl6ZWQgYXdheSB3aGVuCiAgKiBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldC4KICAqLwpAQCAtMjc2LDggKzI4OSwxMyBAQAogCQlbM10JPSAiQkxLRSIsCiAJCVs0XQk9ICJEVElQIiwKIAkJWzVdCT0gIk5PVEJVU1kiLAorCQlbNl0JPSAiRU5EUlgiLAorCQlbN10JPSAiRU5EVFgiLAogCQlbOF0JPSAiU0RJT0lSUUEiLAogCQlbOV0JPSAiU0RJT0lSUUIiLAorCQlbMTJdCT0gIlNESU9XQUlUIiwKKwkJWzE0XQk9ICJSWEJVRkYiLAorCQlbMTVdCT0gIlRYQlVGRSIsCiAJCVsxNl0JPSAiUklOREUiLAogCQlbMTddCT0gIlJESVJFIiwKIAkJWzE4XQk9ICJSQ1JDRSIsCkBAIC0yODUsNiArMzAzLDExIEBACiAJCVsyMF0JPSAiUlRPRSIsCiAJCVsyMV0JPSAiRENSQ0UiLAogCQlbMjJdCT0gIkRUT0UiLAorCQlbMjNdCT0gIkNTVE9FIiwKKwkJWzI0XQk9ICJCTEtPVlJFIiwKKwkJWzI1XQk9ICJETUFET05FIiwKKwkJWzI2XQk9ICJGSUZPRU1QVFkiLAorCQlbMjddCT0gIlhGUkRPTkUiLAogCQlbMzBdCT0gIk9WUkUiLAogCQlbMzFdCT0gIlVOUkUiLAogCX07CkBAIC04NDksMTMgKzg3MiwxNSBAQAogCQkJY2xrZGl2ID0gMjU1OwogCQl9CiAKKwkJaG9zdC0+bW9kZV9yZWcgPSBNQ0lfTVJfQ0xLRElWKGNsa2Rpdik7CisKIAkJLyoKIAkJICogV1JQUk9PRiBhbmQgUkRQUk9PRiBwcmV2ZW50IG92ZXJydW5zL3VuZGVycnVucyBieQogCQkgKiBzdG9wcGluZyB0aGUgY2xvY2sgd2hlbiB0aGUgRklGTyBpcyBmdWxsL2VtcHR5LgogCQkgKiBUaGlzIHN0YXRlIGlzIG5vdCBleHBlY3RlZCB0byBsYXN0IGZvciBsb25nLgogCQkgKi8KLQkJaG9zdC0+bW9kZV9yZWcgPSBNQ0lfTVJfQ0xLRElWKGNsa2RpdikgfCBNQ0lfTVJfV1JQUk9PRgotCQkJCQl8IE1DSV9NUl9SRFBST09GOworCQlpZiAobWNpX2hhc19yd3Byb29mKCkpCisJCQlob3N0LT5tb2RlX3JlZyB8PSAoTUNJX01SX1dSUFJPT0YgfCBNQ0lfTVJfUkRQUk9PRik7CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmhvc3QtPnF1ZXVlKSkKIAkJCW1jaV93cml0ZWwoaG9zdCwgTVIsIGhvc3QtPm1vZGVfcmVnKTsKQEAgLTE2NDgsOCArMTY3MywxMCBAQAogCQkJbnJfc2xvdHMrKzsKIAl9CiAKLQlpZiAoIW5yX3Nsb3RzKQorCWlmICghbnJfc2xvdHMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW5pdCBmYWlsZWQ6IG5vIHNsb3QgZGVmaW5lZFxuIik7CiAJCWdvdG8gZXJyX2luaXRfc2xvdDsKKwl9CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LAogCQkJIkF0bWVsIE1DSSBjb250cm9sbGVyIGF0IDB4JTA4bHggaXJxICVkLCAldSBzbG90c1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMKaW5kZXggYTQ2MTAxNy4uZDU1ZmU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMKQEAgLTE1NjIsMyArMTU2Miw0IEBACiAJCSJIYW5zLVBldGVyIE5pbHNzb24sIEphbiBOaWtpdGVua28iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU1BJIFNEL01NQyBob3N0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6bW1jX3NwaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYTQ2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKQEAgLTAsMCArMSwxMjg3IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYyAtIFF1YWxjb21tIE1TTSA3WDAwQSBTRENDIERyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluYywKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucywgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQmFzZWQgb24gbW1jaS5jCisgKgorICogQXV0aG9yOiBTYW4gTWVoYXQgKHNhbkBhbmRyb2lkLmNvbSkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2h0Y19wd3JzaW5rLmg+CisKKyNpbmNsdWRlICJtc21fc2RjYy5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJtc20tc2RjYyIKKworc3RhdGljIHVuc2lnbmVkIGludCBtc21zZGNjX2ZtaW4gPSAxNDQwMDA7CitzdGF0aWMgdW5zaWduZWQgaW50IG1zbXNkY2NfZm1heCA9IDUwMDAwMDAwOworc3RhdGljIHVuc2lnbmVkIGludCBtc21zZGNjXzRiaXQgPSAxOworc3RhdGljIHVuc2lnbmVkIGludCBtc21zZGNjX3B3cnNhdmUgPSAxOworc3RhdGljIHVuc2lnbmVkIGludCBtc21zZGNjX3Bpb3BvbGwgPSAxOworc3RhdGljIHVuc2lnbmVkIGludCBtc21zZGNjX3NkaW9pcnE7CisKKyNkZWZpbmUgUElPX1NQSU5NQVggMzAKKyNkZWZpbmUgQ01EX1NQSU5NQVggMjAKKworc3RhdGljIHZvaWQKK21zbXNkY2Nfc3RhcnRfY29tbWFuZChzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwKKwkJICAgICAgdTMyIGMpOworCitzdGF0aWMgdm9pZAorbXNtc2RjY19yZXF1ZXN0X2VuZChzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKK3sKKwl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lDT01NQU5EKTsKKworCUJVR19PTihob3N0LT5jdXJyLmRhdGEpOworCisJaG9zdC0+Y3Vyci5tcnEgPSBOVUxMOworCWhvc3QtPmN1cnIuY21kID0gTlVMTDsKKworCWlmIChtcnEtPmRhdGEpCisJCW1ycS0+ZGF0YS0+Ynl0ZXNfeGZlcmVkID0gaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZDsKKwlpZiAobXJxLT5jbWQtPmVycm9yID09IC1FVElNRURPVVQpCisJCW1kZWxheSg1KTsKKworCS8qCisJICogTmVlZCB0byBkcm9wIHRoZSBob3N0IGxvY2sgaGVyZTsgbW1jX3JlcXVlc3RfZG9uZSBtYXkgY2FsbAorCSAqIGJhY2sgaW50byB0aGUgZHJpdmVyLi4uCisJICovCisJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCittc21zZGNjX3N0b3BfZGF0YShzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0KQoreworCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSURBVEFDVFJMKTsKKwlob3N0LT5jdXJyLmRhdGEgPSBOVUxMOworCWhvc3QtPmN1cnIuZ290X2RhdGFlbmQgPSBob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kID0gMDsKK30KKwordWludDMyX3QgbXNtc2RjY19maWZvX2FkZHIoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCkKK3sKKwlzd2l0Y2ggKGhvc3QtPnBkZXZfaWQpIHsKKwljYXNlIDE6CisJCXJldHVybiBNU01fU0RDMV9QSFlTICsgTU1DSUZJRk87CisJY2FzZSAyOgorCQlyZXR1cm4gTVNNX1NEQzJfUEhZUyArIE1NQ0lGSUZPOworCWNhc2UgMzoKKwkJcmV0dXJuIE1TTV9TREMzX1BIWVMgKyBNTUNJRklGTzsKKwljYXNlIDQ6CisJCXJldHVybiBNU01fU0RDNF9QSFlTICsgTU1DSUZJRk87CisJfQorCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXNtc2RjY19kbWFfY29tcGxldGVfZnVuYyhzdHJ1Y3QgbXNtX2Rtb3ZfY21kICpjbWQsCisJCQkgIHVuc2lnbmVkIGludCByZXN1bHQsCisJCQkgIHN0cnVjdCBtc21fZG1vdl9lcnJkYXRhICplcnIpCit7CisJc3RydWN0IG1zbXNkY2NfZG1hX2RhdGEJKmRtYV9kYXRhID0KKwkJY29udGFpbmVyX29mKGNtZCwgc3RydWN0IG1zbXNkY2NfZG1hX2RhdGEsIGhkcik7CisJc3RydWN0IG1zbXNkY2NfaG9zdAkqaG9zdCA9IGRtYV9kYXRhLT5ob3N0OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwltcnEgPSBob3N0LT5jdXJyLm1ycTsKKwlCVUdfT04oIW1ycSk7CisKKwlpZiAoIShyZXN1bHQgJiBETU9WX1JTTFRfVkFMSUQpKSB7CisJCXByX2VycigibXNtc2RjYzogSW52YWxpZCBEYXRhTW92ZXIgcmVzdWx0XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJlc3VsdCAmIERNT1ZfUlNMVF9ET05FKSB7CisJCWhvc3QtPmN1cnIuZGF0YV94ZmVyZWQgPSBob3N0LT5jdXJyLnhmZXJfc2l6ZTsKKwl9IGVsc2UgeworCQkvKiBFcnJvciBvciBmbHVzaCAgKi8KKwkJaWYgKHJlc3VsdCAmIERNT1ZfUlNMVF9FUlJPUikKKwkJCXByX2VycigiJXM6IERNQSBlcnJvciAoMHglLjh4KVxuIiwKKwkJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCAmIERNT1ZfUlNMVF9GTFVTSCkKKwkJCXByX2VycigiJXM6IERNQSBjaGFubmVsIGZsdXNoZWQgKDB4JS44eClcbiIsCisJCQkgICAgICAgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIHJlc3VsdCk7CisJCWlmIChlcnIpCisJCQlwcl9lcnIoIkZsdXNoIGRhdGE6ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4XG4iLAorCQkJICAgICAgIGVyci0+Zmx1c2hbMF0sIGVyci0+Zmx1c2hbMV0sIGVyci0+Zmx1c2hbMl0sCisJCQkgICAgICAgZXJyLT5mbHVzaFszXSwgZXJyLT5mbHVzaFs0XSwgZXJyLT5mbHVzaFs1XSk7CisJCWlmICghbXJxLT5kYXRhLT5lcnJvcikKKwkJCW1ycS0+ZGF0YS0+ZXJyb3IgPSAtRUlPOworCX0KKwlob3N0LT5kbWEuYnVzeSA9IDA7CisJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnNnLCBob3N0LT5kbWEubnVtX2VudHMsCisJCSAgICAgaG9zdC0+ZG1hLmRpcik7CisKKwlpZiAoaG9zdC0+Y3Vyci51c2VyX3BhZ2VzKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBob3N0LT5kbWEuc2c7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBob3N0LT5kbWEubnVtX2VudHM7IGkrKykKKwkJCWZsdXNoX2RjYWNoZV9wYWdlKHNnX3BhZ2Uoc2crKykpOworCX0KKworCWhvc3QtPmRtYS5zZyA9IE5VTEw7CisKKwlpZiAoKGhvc3QtPmN1cnIuZ290X2RhdGFlbmQgJiYgaG9zdC0+Y3Vyci5nb3RfZGF0YWJsa2VuZCkKKwkgICAgIHx8IG1ycS0+ZGF0YS0+ZXJyb3IpIHsKKworCQkvKgorCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGdvdHRlbiBvdXIgREFUQUVORCAvIERBVEFCTEtFTkQKKwkJICogZm9yIHRoaXMgcmVxdWVzdCwgdGhlbiBjb21wbGV0ZSBpdCB0aHJvdWdoIGhlcmUuCisJCSAqLworCQltc21zZGNjX3N0b3BfZGF0YShob3N0KTsKKworCQlpZiAoIW1ycS0+ZGF0YS0+ZXJyb3IpCisJCQlob3N0LT5jdXJyLmRhdGFfeGZlcmVkID0gaG9zdC0+Y3Vyci54ZmVyX3NpemU7CisJCWlmICghbXJxLT5kYXRhLT5zdG9wIHx8IG1ycS0+Y21kLT5lcnJvcikgeworCQkJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJQ09NTUFORCk7CisJCQlob3N0LT5jdXJyLm1ycSA9IE5VTEw7CisJCQlob3N0LT5jdXJyLmNtZCA9IE5VTEw7CisJCQltcnEtPmRhdGEtPmJ5dGVzX3hmZXJlZCA9IGhvc3QtPmN1cnIuZGF0YV94ZmVyZWQ7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCW1zbXNkY2Nfc3RhcnRfY29tbWFuZChob3N0LCBtcnEtPmRhdGEtPnN0b3AsIDApOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfZG1hKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwlpZiAoaG9zdC0+ZG1hLmNoYW5uZWwgPT0gLTEpCisJCXJldHVybiAtRU5PRU5UOworCisJaWYgKChkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrcykgPCBNQ0lfRklGT1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgoZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3MpICUgTUNJX0ZJRk9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc21zZGNjX2NvbmZpZ19kbWEoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXN0cnVjdCBtc21zZGNjX25jX2RtYWRhdGEgKm5jOworCWRtb3ZfYm94ICpib3g7CisJdWludDMyX3Qgcm93czsKKwl1aW50MzJfdCBjcmNpOworCXVuc2lnbmVkIGludCBuOworCWludCBpLCByYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gZGF0YS0+c2c7CisKKwlyYyA9IHZhbGlkYXRlX2RtYShob3N0LCBkYXRhKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWhvc3QtPmRtYS5zZyA9IGRhdGEtPnNnOworCWhvc3QtPmRtYS5udW1fZW50cyA9IGRhdGEtPnNnX2xlbjsKKworCW5jID0gaG9zdC0+ZG1hLm5jOworCisJc3dpdGNoIChob3N0LT5wZGV2X2lkKSB7CisJY2FzZSAxOgorCQljcmNpID0gTVNNU0RDQ19DUkNJX1NEQzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY3JjaSA9IE1TTVNEQ0NfQ1JDSV9TREMyOworCQlicmVhazsKKwljYXNlIDM6CisJCWNyY2kgPSBNU01TRENDX0NSQ0lfU0RDMzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQljcmNpID0gTVNNU0RDQ19DUkNJX1NEQzQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWhvc3QtPmRtYS5zZyA9IE5VTEw7CisJCWhvc3QtPmRtYS5udW1fZW50cyA9IDA7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCWhvc3QtPmRtYS5kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisJZWxzZQorCQlob3N0LT5kbWEuZGlyID0gRE1BX1RPX0RFVklDRTsKKworCWhvc3QtPmN1cnIudXNlcl9wYWdlcyA9IDA7CisKKwluID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmRtYS5zZywKKwkJICAgICAgIGhvc3QtPmRtYS5udW1fZW50cywgaG9zdC0+ZG1hLmRpcik7CisKKwlpZiAobiAhPSBob3N0LT5kbWEubnVtX2VudHMpIHsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIG1hcCBpbiBhbGwgc2cgZWxlbWVudHNcbiIsCisJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCWhvc3QtPmRtYS5zZyA9IE5VTEw7CisJCWhvc3QtPmRtYS5udW1fZW50cyA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJveCA9ICZuYy0+Y21kWzBdOworCWZvciAoaSA9IDA7IGkgPCBob3N0LT5kbWEubnVtX2VudHM7IGkrKykgeworCQlib3gtPmNtZCA9IENNRF9NT0RFX0JPWDsKKworCQlpZiAoaSA9PSAoaG9zdC0+ZG1hLm51bV9lbnRzIC0gMSkpCisJCQlib3gtPmNtZCB8PSBDTURfTEM7CisJCXJvd3MgPSAoc2dfZG1hX2xlbihzZykgJSBNQ0lfRklGT1NJWkUpID8KKwkJCShzZ19kbWFfbGVuKHNnKSAvIE1DSV9GSUZPU0laRSkgKyAxIDoKKwkJCShzZ19kbWFfbGVuKHNnKSAvIE1DSV9GSUZPU0laRSkgOworCisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCWJveC0+c3JjX3Jvd19hZGRyID0gbXNtc2RjY19maWZvX2FkZHIoaG9zdCk7CisJCQlib3gtPmRzdF9yb3dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKworCQkJYm94LT5zcmNfZHN0X2xlbiA9IChNQ0lfRklGT1NJWkUgPDwgMTYpIHwKKwkJCQkJICAgKE1DSV9GSUZPU0laRSk7CisJCQlib3gtPnJvd19vZmZzZXQgPSBNQ0lfRklGT1NJWkU7CisKKwkJCWJveC0+bnVtX3Jvd3MgPSByb3dzICogKCgxIDw8IDE2KSArIDEpOworCQkJYm94LT5jbWQgfD0gQ01EX1NSQ19DUkNJKGNyY2kpOworCQl9IGVsc2UgeworCQkJYm94LT5zcmNfcm93X2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCQlib3gtPmRzdF9yb3dfYWRkciA9IG1zbXNkY2NfZmlmb19hZGRyKGhvc3QpOworCisJCQlib3gtPnNyY19kc3RfbGVuID0gKE1DSV9GSUZPU0laRSA8PCAxNikgfAorCQkJCQkgICAoTUNJX0ZJRk9TSVpFKTsKKwkJCWJveC0+cm93X29mZnNldCA9IChNQ0lfRklGT1NJWkUgPDwgMTYpOworCisJCQlib3gtPm51bV9yb3dzID0gcm93cyAqICgoMSA8PCAxNikgKyAxKTsKKwkJCWJveC0+Y21kIHw9IENNRF9EU1RfQ1JDSShjcmNpKTsKKwkJfQorCQlib3grKzsKKwkJc2crKzsKKwl9CisKKwkvKiBsb2NhdGlvbiBvZiBjb21tYW5kIGJsb2NrIG11c3QgYmUgNjQgYml0IGFsaWduZWQgKi8KKwlCVUdfT04oaG9zdC0+ZG1hLmNtZF9idXNhZGRyICYgMHgwNyk7CisKKwluYy0+Y21kcHRyID0gKGhvc3QtPmRtYS5jbWRfYnVzYWRkciA+PiAzKSB8IENNRF9QVFJfTFA7CisJaG9zdC0+ZG1hLmhkci5jbWRwdHIgPSBETU9WX0NNRF9QVFJfTElTVCB8CisJCQkgICAgICAgRE1PVl9DTURfQUREUihob3N0LT5kbWEuY21kcHRyX2J1c2FkZHIpOworCWhvc3QtPmRtYS5oZHIuY29tcGxldGVfZnVuYyA9IG1zbXNkY2NfZG1hX2NvbXBsZXRlX2Z1bmM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK21zbXNkY2Nfc3RhcnRfZGF0YShzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IGRhdGFjdHJsLCB0aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBjbGtzOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGhvc3QtPmJhc2U7CisJdW5zaWduZWQgaW50IHBpb19pcnFtYXNrID0gMDsKKworCWhvc3QtPmN1cnIuZGF0YSA9IGRhdGE7CisJaG9zdC0+Y3Vyci54ZmVyX3NpemUgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKKwlob3N0LT5jdXJyLnhmZXJfcmVtYWluID0gaG9zdC0+Y3Vyci54ZmVyX3NpemU7CisJaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZCA9IDA7CisJaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCA9IDA7CisJaG9zdC0+Y3Vyci5nb3RfZGF0YWJsa2VuZCA9IDA7CisKKwltZW1zZXQoJmhvc3QtPnBpbywgMCwgc2l6ZW9mKGhvc3QtPnBpbykpOworCisJY2xrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpZGF0YS0+dGltZW91dF9ucyAqIGhvc3QtPmNsa19yYXRlOworCWRvX2RpdihjbGtzLCBOU0VDX1BFUl9TRUMpOworCXRpbWVvdXQgPSBkYXRhLT50aW1lb3V0X2Nsa3MgKyAodW5zaWduZWQgaW50KWNsa3M7CisJd3JpdGVsKHRpbWVvdXQsIGJhc2UgKyBNTUNJREFUQVRJTUVSKTsKKworCXdyaXRlbChob3N0LT5jdXJyLnhmZXJfc2l6ZSwgYmFzZSArIE1NQ0lEQVRBTEVOR1RIKTsKKworCWRhdGFjdHJsID0gTUNJX0RQU01fRU5BQkxFIHwgKGRhdGEtPmJsa3N6IDw8IDQpOworCisJaWYgKCFtc21zZGNjX2NvbmZpZ19kbWEoaG9zdCwgZGF0YSkpCisJCWRhdGFjdHJsIHw9IE1DSV9EUFNNX0RNQUVOQUJMRTsKKwllbHNlIHsKKwkJaG9zdC0+cGlvLnNnID0gZGF0YS0+c2c7CisJCWhvc3QtPnBpby5zZ19sZW4gPSBkYXRhLT5zZ19sZW47CisJCWhvc3QtPnBpby5zZ19vZmYgPSAwOworCisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCXBpb19pcnFtYXNrID0gTUNJX1JYRklGT0hBTEZGVUxMTUFTSzsKKwkJCWlmIChob3N0LT5jdXJyLnhmZXJfcmVtYWluIDwgTUNJX0ZJRk9TSVpFKQorCQkJCXBpb19pcnFtYXNrIHw9IE1DSV9SWERBVEFBVkxCTE1BU0s7CisJCX0gZWxzZQorCQkJcGlvX2lycW1hc2sgPSBNQ0lfVFhGSUZPSEFMRkVNUFRZTUFTSzsKKwl9CisKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQlkYXRhY3RybCB8PSBNQ0lfRFBTTV9ESVJFQ1RJT047CisKKwl3cml0ZWwocGlvX2lycW1hc2ssIGJhc2UgKyBNTUNJTUFTSzEpOworCXdyaXRlbChkYXRhY3RybCwgYmFzZSArIE1NQ0lEQVRBQ1RSTCk7CisKKwlpZiAoZGF0YWN0cmwgJiBNQ0lfRFBTTV9ETUFFTkFCTEUpIHsKKwkJaG9zdC0+ZG1hLmJ1c3kgPSAxOworCQltc21fZG1vdl9lbnF1ZXVlX2NtZChob3N0LT5kbWEuY2hhbm5lbCwgJmhvc3QtPmRtYS5oZHIpOworCX0KK30KKworc3RhdGljIHZvaWQKK21zbXNkY2Nfc3RhcnRfY29tbWFuZChzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwgdTMyIGMpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaG9zdC0+YmFzZTsKKworCWlmIChyZWFkbChiYXNlICsgTU1DSUNPTU1BTkQpICYgTUNJX0NQU01fRU5BQkxFKSB7CisJCXdyaXRlbCgwLCBiYXNlICsgTU1DSUNPTU1BTkQpOworCQl1ZGVsYXkoMiArICgoNSAqIDEwMDAwMDApIC8gaG9zdC0+Y2xrX3JhdGUpKTsKKwl9CisKKwljIHw9IGNtZC0+b3Bjb2RlIHwgTUNJX0NQU01fRU5BQkxFOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikKKwkJCWMgfD0gTUNJX0NQU01fTE9OR1JTUDsKKwkJYyB8PSBNQ0lfQ1BTTV9SRVNQT05TRTsKKwl9CisKKwlpZiAoY21kLT5vcGNvZGUgPT0gMTcgfHwgY21kLT5vcGNvZGUgPT0gMTggfHwKKwkgICAgY21kLT5vcGNvZGUgPT0gMjQgfHwgY21kLT5vcGNvZGUgPT0gMjUgfHwKKwkgICAgY21kLT5vcGNvZGUgPT0gNTMpCisJCWMgfD0gTUNJX0NTUE1fREFUQ01EOworCisJaWYgKGNtZCA9PSBjbWQtPm1ycS0+c3RvcCkKKwkJYyB8PSBNQ0lfQ1NQTV9NQ0lBQk9SVDsKKworCWhvc3QtPmN1cnIuY21kID0gY21kOworCisJaG9zdC0+c3RhdHMuY21kcysrOworCisJd3JpdGVsKGNtZC0+YXJnLCBiYXNlICsgTU1DSUFSR1VNRU5UKTsKKwl3cml0ZWwoYywgYmFzZSArIE1NQ0lDT01NQU5EKTsKK30KKworc3RhdGljIHZvaWQKK21zbXNkY2NfZGF0YV9lcnIoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhLAorCQkgdW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwlpZiAoc3RhdHVzICYgTUNJX0RBVEFDUkNGQUlMKSB7CisJCXByX2VycigiJXM6IERhdGEgQ1JDIGVycm9yXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCXByX2VycigiJXM6IG9wY29kZSAweCUuOHhcbiIsIF9fZnVuY19fLAorCQkgICAgICAgZGF0YS0+bXJxLT5jbWQtPm9wY29kZSk7CisJCXByX2VycigiJXM6IGJsa3N6ICVkLCBibG9ja3MgJWRcbiIsIF9fZnVuY19fLAorCQkgICAgICAgZGF0YS0+Ymxrc3osIGRhdGEtPmJsb2Nrcyk7CisJCWRhdGEtPmVycm9yID0gLUVJTFNFUTsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9EQVRBVElNRU9VVCkgeworCQlwcl9lcnIoIiVzOiBEYXRhIHRpbWVvdXRcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOworCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNJX1JYT1ZFUlJVTikgeworCQlwcl9lcnIoIiVzOiBSWCBvdmVycnVuXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCWRhdGEtPmVycm9yID0gLUVJTzsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9UWFVOREVSUlVOKSB7CisJCXByX2VycigiJXM6IFRYIHVuZGVycnVuXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCWRhdGEtPmVycm9yID0gLUVJTzsKKwl9IGVsc2UgeworCQlwcl9lcnIoIiVzOiBVbmtub3duIGVycm9yICgweCUuOHgpXG4iLAorCQkgICAgICAgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIHN0YXR1cyk7CisJCWRhdGEtPmVycm9yID0gLUVJTzsKKwl9Cit9CisKKworc3RhdGljIGludAorbXNtc2RjY19waW9fcmVhZChzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCByZW1haW4pCit7CisJdm9pZCBfX2lvbWVtCSpiYXNlID0gaG9zdC0+YmFzZTsKKwl1aW50MzJfdAkqcHRyID0gKHVpbnQzMl90ICopIGJ1ZmZlcjsKKwlpbnQJCWNvdW50ID0gMDsKKworCXdoaWxlIChyZWFkbChiYXNlICsgTU1DSVNUQVRVUykgJiBNQ0lfUlhEQVRBQVZMQkwpIHsKKworCQkqcHRyID0gcmVhZGwoYmFzZSArIE1NQ0lGSUZPICsgKGNvdW50ICUgTUNJX0ZJRk9TSVpFKSk7CisJCXB0cisrOworCQljb3VudCArPSBzaXplb2YodWludDMyX3QpOworCisJCXJlbWFpbiAtPSAgc2l6ZW9mKHVpbnQzMl90KTsKKwkJaWYgKHJlbWFpbiA9PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludAorbXNtc2RjY19waW9fd3JpdGUoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgY2hhciAqYnVmZmVyLAorCQkgIHVuc2lnbmVkIGludCByZW1haW4sIHUzMiBzdGF0dXMpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaG9zdC0+YmFzZTsKKwljaGFyICpwdHIgPSBidWZmZXI7CisKKwlkbyB7CisJCXVuc2lnbmVkIGludCBjb3VudCwgbWF4Y250OworCisJCW1heGNudCA9IHN0YXR1cyAmIE1DSV9UWEZJRk9FTVBUWSA/IE1DSV9GSUZPU0laRSA6CisJCQkJCQkgICAgTUNJX0ZJRk9IQUxGU0laRTsKKwkJY291bnQgPSBtaW4ocmVtYWluLCBtYXhjbnQpOworCisJCXdyaXRlc2woYmFzZSArIE1NQ0lGSUZPLCBwdHIsIGNvdW50ID4+IDIpOworCQlwdHIgKz0gY291bnQ7CisJCXJlbWFpbiAtPSBjb3VudDsKKworCQlpZiAocmVtYWluID09IDApCisJCQlicmVhazsKKworCQlzdGF0dXMgPSByZWFkbChiYXNlICsgTU1DSVNUQVRVUyk7CisJfSB3aGlsZSAoc3RhdHVzICYgTUNJX1RYRklGT0hBTEZFTVBUWSk7CisKKwlyZXR1cm4gcHRyIC0gYnVmZmVyOworfQorCitzdGF0aWMgaW50Cittc21zZGNjX3NwaW5fb25fc3RhdHVzKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHVpbnQzMl90IG1hc2ssIGludCBtYXhzcGluKQoreworCXdoaWxlIChtYXhzcGluKSB7CisJCWlmICgocmVhZGwoaG9zdC0+YmFzZSArIE1NQ0lTVEFUVVMpICYgbWFzaykpCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEpOworCQktLW1heHNwaW47CisJfQorCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50Cittc21zZGNjX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtc21zZGNjX2hvc3QJKmhvc3QgPSBkZXZfaWQ7CisJdm9pZCBfX2lvbWVtCQkqYmFzZSA9IGhvc3QtPmJhc2U7CisJdWludDMyX3QJCXN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRsKGJhc2UgKyBNTUNJU1RBVFVTKTsKKworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdW5zaWduZWQgaW50IHJlbWFpbiwgbGVuOworCQljaGFyICpidWZmZXI7CisKKwkJaWYgKCEoc3RhdHVzICYgKE1DSV9UWEZJRk9IQUxGRU1QVFkgfCBNQ0lfUlhEQVRBQVZMQkwpKSkgeworCQkJaWYgKGhvc3QtPmN1cnIueGZlcl9yZW1haW4gPT0gMCB8fCAhbXNtc2RjY19waW9wb2xsKQorCQkJCWJyZWFrOworCisJCQlpZiAobXNtc2RjY19zcGluX29uX3N0YXR1cyhob3N0LAorCQkJCQkJICAgKE1DSV9UWEZJRk9IQUxGRU1QVFkgfAorCQkJCQkJICAgTUNJX1JYREFUQUFWTEJMKSwKKwkJCQkJCSAgIFBJT19TUElOTUFYKSkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogTWFwIHRoZSBjdXJyZW50IHNjYXR0ZXIgYnVmZmVyICovCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJYnVmZmVyID0ga21hcF9hdG9taWMoc2dfcGFnZShob3N0LT5waW8uc2cpLAorCQkJCSAgICAgS01fQklPX1NSQ19JUlEpICsgaG9zdC0+cGlvLnNnLT5vZmZzZXQ7CisJCWJ1ZmZlciArPSBob3N0LT5waW8uc2dfb2ZmOworCQlyZW1haW4gPSBob3N0LT5waW8uc2ctPmxlbmd0aCAtIGhvc3QtPnBpby5zZ19vZmY7CisJCWxlbiA9IDA7CisJCWlmIChzdGF0dXMgJiBNQ0lfUlhBQ1RJVkUpCisJCQlsZW4gPSBtc21zZGNjX3Bpb19yZWFkKGhvc3QsIGJ1ZmZlciwgcmVtYWluKTsKKwkJaWYgKHN0YXR1cyAmIE1DSV9UWEFDVElWRSkKKwkJCWxlbiA9IG1zbXNkY2NfcGlvX3dyaXRlKGhvc3QsIGJ1ZmZlciwgcmVtYWluLCBzdGF0dXMpOworCisJCS8qIFVubWFwIHRoZSBidWZmZXIgKi8KKwkJa3VubWFwX2F0b21pYyhidWZmZXIsIEtNX0JJT19TUkNfSVJRKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWhvc3QtPnBpby5zZ19vZmYgKz0gbGVuOworCQlob3N0LT5jdXJyLnhmZXJfcmVtYWluIC09IGxlbjsKKwkJaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZCArPSBsZW47CisJCXJlbWFpbiAtPSBsZW47CisKKwkJaWYgKHJlbWFpbiA9PSAwKSB7CisJCQkvKiBUaGlzIHNnIHBhZ2UgaXMgZnVsbCAtIGRvIHNvbWUgaG91c2VrZWVwaW5nICovCisJCQlpZiAoc3RhdHVzICYgTUNJX1JYQUNUSVZFICYmIGhvc3QtPmN1cnIudXNlcl9wYWdlcykKKwkJCQlmbHVzaF9kY2FjaGVfcGFnZShzZ19wYWdlKGhvc3QtPnBpby5zZykpOworCisJCQlpZiAoIS0taG9zdC0+cGlvLnNnX2xlbikgeworCQkJCW1lbXNldCgmaG9zdC0+cGlvLCAwLCBzaXplb2YoaG9zdC0+cGlvKSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIEFkdmFuY2UgdG8gbmV4dCBzZyAqLworCQkJaG9zdC0+cGlvLnNnKys7CisJCQlob3N0LT5waW8uc2dfb2ZmID0gMDsKKwkJfQorCisJCXN0YXR1cyA9IHJlYWRsKGJhc2UgKyBNTUNJU1RBVFVTKTsKKwl9IHdoaWxlICgxKTsKKworCWlmIChzdGF0dXMgJiBNQ0lfUlhBQ1RJVkUgJiYgaG9zdC0+Y3Vyci54ZmVyX3JlbWFpbiA8IE1DSV9GSUZPU0laRSkKKwkJd3JpdGVsKE1DSV9SWERBVEFBVkxCTE1BU0ssIGJhc2UgKyBNTUNJTUFTSzEpOworCisJaWYgKCFob3N0LT5jdXJyLnhmZXJfcmVtYWluKQorCQl3cml0ZWwoMCwgYmFzZSArIE1NQ0lNQVNLMSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG1zbXNkY2NfZG9fY21kaXJxKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHVpbnQzMl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPmN1cnIuY21kOworCXZvaWQgX19pb21lbQkgICAqYmFzZSA9IGhvc3QtPmJhc2U7CisKKwlob3N0LT5jdXJyLmNtZCA9IE5VTEw7CisJY21kLT5yZXNwWzBdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTApOworCWNtZC0+cmVzcFsxXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UxKTsKKwljbWQtPnJlc3BbMl0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMik7CisJY21kLT5yZXNwWzNdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTMpOworCisJZGVsX3RpbWVyKCZob3N0LT5jb21tYW5kX3RpbWVyKTsKKwlpZiAoc3RhdHVzICYgTUNJX0NNRFRJTUVPVVQpIHsKKwkJY21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisJfSBlbHNlIGlmIChzdGF0dXMgJiBNQ0lfQ01EQ1JDRkFJTCAmJgorCQkgICBjbWQtPmZsYWdzICYgTU1DX1JTUF9DUkMpIHsKKwkJcHJfZXJyKCIlczogQ29tbWFuZCBDUkMgZXJyb3JcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJY21kLT5lcnJvciA9IC1FSUxTRVE7CisJfQorCisJaWYgKCFjbWQtPmRhdGEgfHwgY21kLT5lcnJvcikgeworCQlpZiAoaG9zdC0+Y3Vyci5kYXRhICYmIGhvc3QtPmRtYS5zZykKKwkJCW1zbV9kbW92X3N0b3BfY21kKGhvc3QtPmRtYS5jaGFubmVsLAorCQkJCQkgICZob3N0LT5kbWEuaGRyLCAwKTsKKwkJZWxzZSBpZiAoaG9zdC0+Y3Vyci5kYXRhKSB7IC8qIE5vbiBETUEgKi8KKwkJCW1zbXNkY2Nfc3RvcF9kYXRhKGhvc3QpOworCQkJbXNtc2RjY19yZXF1ZXN0X2VuZChob3N0LCBjbWQtPm1ycSk7CisJCX0gZWxzZSAvKiBob3N0LT5kYXRhID09IE5VTEwgKi8KKwkJCW1zbXNkY2NfcmVxdWVzdF9lbmQoaG9zdCwgY21kLT5tcnEpOworCX0gZWxzZSBpZiAoIShjbWQtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkpCisJCW1zbXNkY2Nfc3RhcnRfZGF0YShob3N0LCBjbWQtPmRhdGEpOworfQorCitzdGF0aWMgdm9pZAorbXNtc2RjY19oYW5kbGVfaXJxX2RhdGEoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgdTMyIHN0YXR1cywKKwkJCXZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5jdXJyLmRhdGE7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIENoZWNrIGZvciBkYXRhIGVycm9ycyAqLworCWlmIChzdGF0dXMgJiAoTUNJX0RBVEFDUkNGQUlMIHwgTUNJX0RBVEFUSU1FT1VUIHwKKwkJICAgICAgTUNJX1RYVU5ERVJSVU4gfCBNQ0lfUlhPVkVSUlVOKSkgeworCQltc21zZGNjX2RhdGFfZXJyKGhvc3QsIGRhdGEsIHN0YXR1cyk7CisJCWhvc3QtPmN1cnIuZGF0YV94ZmVyZWQgPSAwOworCQlpZiAoaG9zdC0+ZG1hLnNnKQorCQkJbXNtX2Rtb3Zfc3RvcF9jbWQoaG9zdC0+ZG1hLmNoYW5uZWwsCisJCQkJCSAgJmhvc3QtPmRtYS5oZHIsIDApOworCQllbHNlIHsKKwkJCW1zbXNkY2Nfc3RvcF9kYXRhKGhvc3QpOworCQkJaWYgKCFkYXRhLT5zdG9wKQorCQkJCW1zbXNkY2NfcmVxdWVzdF9lbmQoaG9zdCwgZGF0YS0+bXJxKTsKKwkJCWVsc2UKKwkJCQltc21zZGNjX3N0YXJ0X2NvbW1hbmQoaG9zdCwgZGF0YS0+c3RvcCwgMCk7CisJCX0KKwl9CisKKwkvKiBDaGVjayBmb3IgZGF0YSBkb25lICovCisJaWYgKCFob3N0LT5jdXJyLmdvdF9kYXRhZW5kICYmIChzdGF0dXMgJiBNQ0lfREFUQUVORCkpCisJCWhvc3QtPmN1cnIuZ290X2RhdGFlbmQgPSAxOworCisJaWYgKCFob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kICYmIChzdGF0dXMgJiBNQ0lfREFUQUJMT0NLRU5EKSkKKwkJaG9zdC0+Y3Vyci5nb3RfZGF0YWJsa2VuZCA9IDE7CisKKwkvKgorCSAqIElmIERNQSBpcyBzdGlsbCBpbiBwcm9ncmVzcywgd2UgY29tcGxldGUgdmlhIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKKwkgKi8KKwlpZiAoaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCAmJiBob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kICYmCisJICAgICFob3N0LT5kbWEuYnVzeSkgeworCQkvKgorCQkgKiBUaGVyZSBhcHBlYXJzIHRvIGJlIGFuIGlzc3VlIGluIHRoZSBjb250cm9sbGVyIHdoZXJlCisJCSAqIGlmIHlvdSByZXF1ZXN0IGEgc21hbGwgYmxvY2sgdHJhbnNmZXIgKDwgZmlmbyBzaXplKSwKKwkJICogeW91IG1heSBnZXQgeW91ciBEQVRBRU5EL0RBVEFCTEtFTkQgaXJxIHdpdGhvdXQgdGhlCisJCSAqIFBJTyBkYXRhIGlycS4KKwkJICoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIHN0aWxsIGRhdGEgdG8gYmUgcmVhZCwKKwkJICogYW5kIHNpbXVsYXRlIGEgUElPIGlycS4KKwkJICovCisJCWlmIChyZWFkbChiYXNlICsgTU1DSVNUQVRVUykgJiBNQ0lfUlhEQVRBQVZMQkwpCisJCQltc21zZGNjX3Bpb19pcnEoMSwgaG9zdCk7CisKKwkJbXNtc2RjY19zdG9wX2RhdGEoaG9zdCk7CisJCWlmICghZGF0YS0+ZXJyb3IpCisJCQlob3N0LT5jdXJyLmRhdGFfeGZlcmVkID0gaG9zdC0+Y3Vyci54ZmVyX3NpemU7CisKKwkJaWYgKCFkYXRhLT5zdG9wKQorCQkJbXNtc2RjY19yZXF1ZXN0X2VuZChob3N0LCBkYXRhLT5tcnEpOworCQllbHNlCisJCQltc21zZGNjX3N0YXJ0X2NvbW1hbmQoaG9zdCwgZGF0YS0+c3RvcCwgMCk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK21zbXNkY2NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0CSpob3N0ID0gZGV2X2lkOworCXZvaWQgX19pb21lbQkJKmJhc2UgPSBob3N0LT5iYXNlOworCXUzMgkJCXN0YXR1czsKKwlpbnQJCQlyZXQgPSAwOworCWludAkJCWNhcmRpbnQgPSAwOworCisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKworCWRvIHsKKwkJc3RhdHVzID0gcmVhZGwoYmFzZSArIE1NQ0lTVEFUVVMpOworCisJCXN0YXR1cyAmPSAocmVhZGwoYmFzZSArIE1NQ0lNQVNLMCkgfCBNQ0lfREFUQUJMT0NLRU5ETUFTSyk7CisJCXdyaXRlbChzdGF0dXMsIGJhc2UgKyBNTUNJQ0xFQVIpOworCisJCW1zbXNkY2NfaGFuZGxlX2lycV9kYXRhKGhvc3QsIHN0YXR1cywgYmFzZSk7CisKKwkJaWYgKHN0YXR1cyAmIChNQ0lfQ01EU0VOVCB8IE1DSV9DTURSRVNQRU5EIHwgTUNJX0NNRENSQ0ZBSUwgfAorCQkJICAgICAgTUNJX0NNRFRJTUVPVVQpICYmIGhvc3QtPmN1cnIuY21kKSB7CisJCQltc21zZGNjX2RvX2NtZGlycShob3N0LCBzdGF0dXMpOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIE1DSV9TRElPSU5UT1BFUikgeworCQkJY2FyZGludCA9IDE7CisJCQlzdGF0dXMgJj0gfk1DSV9TRElPSU5UT1BFUjsKKwkJfQorCQlyZXQgPSAxOworCX0gd2hpbGUgKHN0YXR1cyk7CisKKwlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gZGVsYXkgaGFuZGxpbmcgdGhlIGNhcmQgaW50ZXJydXB0IGFzIGl0IGNhbGxzCisJICogYmFjayBpbnRvIHRoZSBkcml2ZXIuCisJICovCisJaWYgKGNhcmRpbnQpCisJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkCittc21zZGNjX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGhvc3QtPmN1cnIubXJxICE9IE5VTEwpOworCVdBUk5fT04oaG9zdC0+cHdyID09IDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWhvc3QtPnN0YXRzLnJlcXMrKzsKKworCWlmIChob3N0LT5lamVjdCkgeworCQlpZiAobXJxLT5kYXRhICYmICEobXJxLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpKSB7CisJCQltcnEtPmNtZC0+ZXJyb3IgPSAwOworCQkJbXJxLT5kYXRhLT5ieXRlc194ZmVyZWQgPSBtcnEtPmRhdGEtPmJsa3N6ICoKKwkJCQkJCSAgbXJxLT5kYXRhLT5ibG9ja3M7CisJCX0gZWxzZQorCQkJbXJxLT5jbWQtPmVycm9yID0gLUVOT01FRElVTTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJCW1tY19yZXF1ZXN0X2RvbmUobW1jLCBtcnEpOworCQlyZXR1cm47CisJfQorCisJaG9zdC0+Y3Vyci5tcnEgPSBtcnE7CisKKwlpZiAobXJxLT5kYXRhICYmIG1ycS0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQltc21zZGNjX3N0YXJ0X2RhdGEoaG9zdCwgbXJxLT5kYXRhKTsKKworCW1zbXNkY2Nfc3RhcnRfY29tbWFuZChob3N0LCBtcnEtPmNtZCwgMCk7CisKKwlpZiAoaG9zdC0+Y21kcG9sbCAmJiAhbXNtc2RjY19zcGluX29uX3N0YXR1cyhob3N0LAorCQkJCU1DSV9DTURSRVNQRU5EfE1DSV9DTURDUkNGQUlMfE1DSV9DTURUSU1FT1VULAorCQkJCUNNRF9TUElOTUFYKSkgeworCQl1aW50MzJfdCBzdGF0dXMgPSByZWFkbChob3N0LT5iYXNlICsgTU1DSVNUQVRVUyk7CisJCW1zbXNkY2NfZG9fY21kaXJxKGhvc3QsIHN0YXR1cyk7CisJCXdyaXRlbChNQ0lfQ01EUkVTUEVORCB8IE1DSV9DTURDUkNGQUlMIHwgTUNJX0NNRFRJTUVPVVQsCisJCSAgICAgICBob3N0LT5iYXNlICsgTU1DSUNMRUFSKTsKKwkJaG9zdC0+c3RhdHMuY21kcG9sbF9oaXRzKys7CisJfSBlbHNlIHsKKwkJaG9zdC0+c3RhdHMuY21kcG9sbF9taXNzZXMrKzsKKwkJbW9kX3RpbWVyKCZob3N0LT5jb21tYW5kX3RpbWVyLCBqaWZmaWVzICsgSFopOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCittc21zZGNjX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdTMyIGNsayA9IDAsIHB3ciA9IDA7CisJaW50IHJjOworCisJaWYgKGlvcy0+Y2xvY2spIHsKKworCQlpZiAoIWhvc3QtPmNsa3Nfb24pIHsKKwkJCWNsa19lbmFibGUoaG9zdC0+cGNsayk7CisJCQljbGtfZW5hYmxlKGhvc3QtPmNsayk7CisJCQlob3N0LT5jbGtzX29uID0gMTsKKwkJfQorCQlpZiAoaW9zLT5jbG9jayAhPSBob3N0LT5jbGtfcmF0ZSkgeworCQkJcmMgPSBjbGtfc2V0X3JhdGUoaG9zdC0+Y2xrLCBpb3MtPmNsb2NrKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcHJfZXJyKCIlczogRXJyb3Igc2V0dGluZyBjbG9jayByYXRlICglZClcbiIsCisJCQkJICAgICAgIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLCByYyk7CisJCQllbHNlCisJCQkJaG9zdC0+Y2xrX3JhdGUgPSBpb3MtPmNsb2NrOworCQl9CisJCWNsayB8PSBNQ0lfQ0xLX0VOQUJMRTsKKwl9CisKKwlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQorCQljbGsgfD0gKDIgPDwgMTApOyAvKiBTZXQgV0lERUJVUyAqLworCisJaWYgKGlvcy0+Y2xvY2sgPiA0MDAwMDAgJiYgbXNtc2RjY19wd3JzYXZlKQorCQljbGsgfD0gKDEgPDwgOSk7IC8qIFBXUlNBVkUgKi8KKworCWNsayB8PSAoMSA8PCAxMik7IC8qIEZMT1dfRU5BICovCisJY2xrIHw9ICgxIDw8IDE1KTsgLyogZmVlZGJhY2sgY2xvY2sgKi8KKworCWlmIChob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKQorCQlwd3IgfD0gaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZChtbWNfZGV2KG1tYyksIGlvcy0+dmRkKTsKKworCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CisJY2FzZSBNTUNfUE9XRVJfT0ZGOgorCQlodGNfcHdyc2lua19zZXQoUFdSU0lOS19TRENBUkQsIDApOworCQlicmVhazsKKwljYXNlIE1NQ19QT1dFUl9VUDoKKwkJcHdyIHw9IE1DSV9QV1JfVVA7CisJCWJyZWFrOworCWNhc2UgTU1DX1BPV0VSX09OOgorCQlodGNfcHdyc2lua19zZXQoUFdSU0lOS19TRENBUkQsIDEwMCk7CisJCXB3ciB8PSBNQ0lfUFdSX09OOworCQlicmVhazsKKwl9CisKKwlpZiAoaW9zLT5idXNfbW9kZSA9PSBNTUNfQlVTTU9ERV9PUEVORFJBSU4pCisJCXB3ciB8PSBNQ0lfT0Q7CisKKwl3cml0ZWwoY2xrLCBob3N0LT5iYXNlICsgTU1DSUNMT0NLKTsKKworCWlmIChob3N0LT5wd3IgIT0gcHdyKSB7CisJCWhvc3QtPnB3ciA9IHB3cjsKKwkJd3JpdGVsKHB3ciwgaG9zdC0+YmFzZSArIE1NQ0lQT1dFUik7CisJfQorCisJaWYgKCEoY2xrICYgTUNJX0NMS19FTkFCTEUpICYmIGhvc3QtPmNsa3Nfb24pIHsKKwkJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKKwkJY2xrX2Rpc2FibGUoaG9zdC0+cGNsayk7CisJCWhvc3QtPmNsa3Nfb24gPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgbXNtc2RjY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCit7CisJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpZiAobXNtc2RjY19zZGlvaXJxID09IDEpIHsKKwkJc3RhdHVzID0gcmVhZGwoaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CisJCWlmIChlbmFibGUpCisJCQlzdGF0dXMgfD0gTUNJX1NESU9JTlRPUEVSTUFTSzsKKwkJZWxzZQorCQkJc3RhdHVzICY9IH5NQ0lfU0RJT0lOVE9QRVJNQVNLOworCQlob3N0LT5zYXZlZF9pcnEwbWFzayA9IHN0YXR1czsKKwkJd3JpdGVsKHN0YXR1cywgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgbXNtc2RjY19vcHMgPSB7CisJLnJlcXVlc3QJPSBtc21zZGNjX3JlcXVlc3QsCisJLnNldF9pb3MJPSBtc21zZGNjX3NldF9pb3MsCisJLmVuYWJsZV9zZGlvX2lycSA9IG1zbXNkY2NfZW5hYmxlX3NkaW9faXJxLAorfTsKKworc3RhdGljIHZvaWQKK21zbXNkY2NfY2hlY2tfc3RhdHVzKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gKHN0cnVjdCBtc21zZGNjX2hvc3QgKilkYXRhOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlpZiAoIWhvc3QtPnBsYXQtPnN0YXR1cykgeworCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIDApOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGF0dXMgPSBob3N0LT5wbGF0LT5zdGF0dXMobW1jX2Rldihob3N0LT5tbWMpKTsKKwlob3N0LT5lamVjdCA9ICFzdGF0dXM7CisJaWYgKHN0YXR1cyBeIGhvc3QtPm9sZHN0YXQpIHsKKwkJcHJfaW5mbygiJXM6IFNsb3Qgc3RhdHVzIGNoYW5nZSBkZXRlY3RlZCAoJWQgLT4gJWQpXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGhvc3QtPm9sZHN0YXQsIHN0YXR1cyk7CisJCWlmIChzdGF0dXMpCisJCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsICg1ICogSFopIC8gMik7CisJCWVsc2UKKwkJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7CisJfQorCisJaG9zdC0+b2xkc3RhdCA9IHN0YXR1czsKKworb3V0OgorCWlmIChob3N0LT50aW1lci5mdW5jdGlvbikKKwkJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIEhaKTsKK30KKworc3RhdGljIGlycXJldHVybl90Cittc21zZGNjX3BsYXRmb3JtX3N0YXR1c19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVkXG4iLCBfX2Z1bmNfXywgaXJxKTsKKwltc21zZGNjX2NoZWNrX3N0YXR1cygodW5zaWduZWQgbG9uZykgaG9zdCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZAorbXNtc2RjY19zdGF0dXNfbm90aWZ5X2NiKGludCBjYXJkX3ByZXNlbnQsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gZGV2X2lkOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjYXJkX3ByZXNlbnQgJWRcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLAorCSAgICAgICBjYXJkX3ByZXNlbnQpOworCW1zbXNkY2NfY2hlY2tfc3RhdHVzKCh1bnNpZ25lZCBsb25nKSBob3N0KTsKK30KKworLyoKKyAqIGNhbGxlZCB3aGVuIGEgY29tbWFuZCBleHBpcmVzLgorICogRHVtcCBzb21lIGRlYnVnZ2luZywgYW5kIHRoZW4gZXJyb3IKKyAqIG91dCB0aGUgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkCittc21zZGNjX2NvbW1hbmRfZXhwaXJlZCh1bnNpZ25lZCBsb25nIF9kYXRhKQoreworCXN0cnVjdCBtc21zZGNjX2hvc3QJKmhvc3QgPSAoc3RydWN0IG1zbXNkY2NfaG9zdCAqKSBfZGF0YTsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QJKm1ycTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbXJxID0gaG9zdC0+Y3Vyci5tcnE7CisKKwlpZiAoIW1ycSkgeworCQlwcl9pbmZvKCIlczogQ29tbWFuZCBleHBpcnkgbWlzZmlyZVxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJcHJfZXJyKCIlczogQ29tbWFuZCB0aW1lb3V0ICglcCAlcCAlcCAlcClcbiIsCisJICAgICAgIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBtcnEsIG1ycS0+Y21kLAorCSAgICAgICBtcnEtPmRhdGEsIGhvc3QtPmRtYS5zZyk7CisKKwltcnEtPmNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCW1zbXNkY2Nfc3RvcF9kYXRhKGhvc3QpOworCisJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJQ09NTUFORCk7CisKKwlob3N0LT5jdXJyLm1ycSA9IE5VTEw7CisJaG9zdC0+Y3Vyci5jbWQgPSBOVUxMOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworfQorCitzdGF0aWMgaW50Cittc21zZGNjX2luaXRfZG1hKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QpCit7CisJbWVtc2V0KCZob3N0LT5kbWEsIDAsIHNpemVvZihzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YSkpOworCWhvc3QtPmRtYS5ob3N0ID0gaG9zdDsKKwlob3N0LT5kbWEuY2hhbm5lbCA9IC0xOworCisJaWYgKCFob3N0LT5kbWFyZXMpCisJCXJldHVybiAtRU5PREVWOworCisJaG9zdC0+ZG1hLm5jID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBtc21zZGNjX25jX2RtYWRhdGEpLAorCQkJCQkgICZob3N0LT5kbWEubmNfYnVzYWRkciwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoaG9zdC0+ZG1hLm5jID09IE5VTEwpIHsKKwkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoaG9zdC0+ZG1hLm5jLCAweDAwLCBzaXplb2Yoc3RydWN0IG1zbXNkY2NfbmNfZG1hZGF0YSkpOworCWhvc3QtPmRtYS5jbWRfYnVzYWRkciA9IGhvc3QtPmRtYS5uY19idXNhZGRyOworCWhvc3QtPmRtYS5jbWRwdHJfYnVzYWRkciA9IGhvc3QtPmRtYS5uY19idXNhZGRyICsKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgbXNtc2RjY19uY19kbWFkYXRhLCBjbWRwdHIpOworCWhvc3QtPmRtYS5jaGFubmVsID0gaG9zdC0+ZG1hcmVzLT5zdGFydDsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX01NQ19NU003WDAwQV9SRVNVTUVfSU5fV1EKK3N0YXRpYyB2b2lkCitkb19yZXN1bWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXNtc2RjY19ob3N0LCByZXN1bWVfdGFzayk7CisJc3RydWN0IG1tY19ob3N0CSptbWMgPSBob3N0LT5tbWM7CisKKwlpZiAobW1jKSB7CisJCW1tY19yZXN1bWVfaG9zdChtbWMpOworCQlpZiAoaG9zdC0+c3RhdF9pcnEpCisJCQllbmFibGVfaXJxKGhvc3QtPnN0YXRfaXJxKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGludAorbXNtc2RjY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IHJlc291cmNlICpjbWRfaXJxcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnBpb19pcnFyZXMgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqc3RhdF9pcnFyZXMgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqbWVtcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmRtYXJlcyA9IE5VTEw7CisJaW50IHJldDsKKworCS8qIG11c3QgaGF2ZSBwbGF0Zm9ybSBkYXRhICovCisJaWYgKCFwbGF0KSB7CisJCXByX2VycigiJXM6IFBsYXRmb3JtIGRhdGEgbm90IGF2YWlsYWJsZVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRldi0+aWQgPCAxIHx8IHBkZXYtPmlkID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGRldi0+cmVzb3VyY2UgPT0gTlVMTCB8fCBwZGV2LT5udW1fcmVzb3VyY2VzIDwgMikgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIHJlc291cmNlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkbWFyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWNtZF9pcnFyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLAorCQkJCQkJICAiY21kX2lycSIpOworCXBpb19pcnFyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLAorCQkJCQkJICAicGlvX2lycSIpOworCXN0YXRfaXJxcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwKKwkJCQkJCSAgICJzdGF0dXNfaXJxIik7CisKKwlpZiAoIWNtZF9pcnFyZXMgfHwgIXBpb19pcnFyZXMgfHwgIW1lbXJlcykgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIHJlc291cmNlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyoKKwkgKiBTZXR1cCBvdXIgaG9zdCBzdHJ1Y3R1cmUKKwkgKi8KKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgbXNtc2RjY19ob3N0KSwgJnBkZXYtPmRldik7CisJaWYgKCFtbWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+cGRldl9pZCA9IHBkZXYtPmlkOworCWhvc3QtPnBsYXQgPSBwbGF0OworCWhvc3QtPm1tYyA9IG1tYzsKKworCWhvc3QtPmNtZHBvbGwgPSAxOworCisJaG9zdC0+YmFzZSA9IGlvcmVtYXAobWVtcmVzLT5zdGFydCwgUEFHRV9TSVpFKTsKKwlpZiAoIWhvc3QtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaG9zdC0+Y21kX2lycXJlcyA9IGNtZF9pcnFyZXM7CisJaG9zdC0+cGlvX2lycXJlcyA9IHBpb19pcnFyZXM7CisJaG9zdC0+bWVtcmVzID0gbWVtcmVzOworCWhvc3QtPmRtYXJlcyA9IGRtYXJlczsKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisKKwkvKgorCSAqIFNldHVwIERNQQorCSAqLworCW1zbXNkY2NfaW5pdF9kbWEoaG9zdCk7CisKKwkvKgorCSAqIFNldHVwIG1haW4gcGVyaXBoZXJhbCBidXMgY2xvY2sKKwkgKi8KKwlob3N0LT5wY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2RjX3BjbGsiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPnBjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoaG9zdC0+cGNsayk7CisJCWdvdG8gaG9zdF9mcmVlOworCX0KKworCXJldCA9IGNsa19lbmFibGUoaG9zdC0+cGNsayk7CisJaWYgKHJldCkKKwkJZ290byBwY2xrX3B1dDsKKworCWhvc3QtPnBjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShob3N0LT5wY2xrKTsKKworCS8qCisJICogU2V0dXAgU0RDIE1NQyBjbG9jaworCSAqLworCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNkY19jbGsiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOworCQlnb3RvIHBjbGtfZGlzYWJsZTsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKGhvc3QtPmNsayk7CisJaWYgKHJldCkKKwkJZ290byBjbGtfcHV0OworCisJcmV0ID0gY2xrX3NldF9yYXRlKGhvc3QtPmNsaywgbXNtc2RjY19mbWluKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiJXM6IENsb2NrIHJhdGUgc2V0IGZhaWxlZCAoJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBjbGtfZGlzYWJsZTsKKwl9CisKKwlob3N0LT5jbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShob3N0LT5jbGspOworCisJaG9zdC0+Y2xrc19vbiA9IDE7CisKKwkvKgorCSAqIFNldHVwIE1NQyBob3N0IHN0cnVjdHVyZQorCSAqLworCW1tYy0+b3BzID0gJm1zbXNkY2Nfb3BzOworCW1tYy0+Zl9taW4gPSBtc21zZGNjX2ZtaW47CisJbW1jLT5mX21heCA9IG1zbXNkY2NfZm1heDsKKwltbWMtPm9jcl9hdmFpbCA9IHBsYXQtPm9jcl9tYXNrOworCisJaWYgKG1zbXNkY2NfNGJpdCkKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKKwlpZiAobXNtc2RjY19zZGlvaXJxKQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9TRElPX0lSUTsKKwltbWMtPmNhcHMgfD0gTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQ7CisKKwltbWMtPm1heF9waHlzX3NlZ3MgPSBOUl9TRzsKKwltbWMtPm1heF9od19zZWdzID0gTlJfU0c7CisJbW1jLT5tYXhfYmxrX3NpemUgPSA0MDk2OwkvKiBNQ0lfREFUQV9DVEwgQkxPQ0tTSVpFIHVwIHRvIDQwOTYgKi8KKwltbWMtPm1heF9ibGtfY291bnQgPSA2NTUzNjsKKworCW1tYy0+bWF4X3JlcV9zaXplID0gMzM1NTQ0MzI7CS8qIE1DSV9EQVRBX0xFTkdUSCBpcyAyNSBiaXRzICovCisJbW1jLT5tYXhfc2VnX3NpemUgPSBtbWMtPm1heF9yZXFfc2l6ZTsKKworCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKwl3cml0ZWwoMHg1ZTAwN2ZmLCBob3N0LT5iYXNlICsgTU1DSUNMRUFSKTsgLyogQWRkOiAxIDw8IDI1ICovCisKKwl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CisJaG9zdC0+c2F2ZWRfaXJxMG1hc2sgPSBNQ0lfSVJRRU5BQkxFOworCisJLyoKKwkgKiBTZXR1cCBjYXJkIGRldGVjdCBjaGFuZ2UKKwkgKi8KKworCW1lbXNldCgmaG9zdC0+dGltZXIsIDAsIHNpemVvZihob3N0LT50aW1lcikpOworCisJaWYgKHN0YXRfaXJxcmVzICYmICEoc3RhdF9pcnFyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkpIHsKKwkJdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IElSUUZfU0hBUkVEIHwKKwkJCShzdGF0X2lycXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyk7CisKKwkJaG9zdC0+c3RhdF9pcnEgPSBzdGF0X2lycXJlcy0+c3RhcnQ7CisJCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPnN0YXRfaXJxLAorCQkJCSAgbXNtc2RjY19wbGF0Zm9ybV9zdGF0dXNfaXJxLAorCQkJCSAgaXJxZmxhZ3MsCisJCQkJICBEUklWRVJfTkFNRSAiIChzbG90KSIsCisJCQkJICBob3N0KTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGdldCBzbG90IElSUSAlZCAoJWQpXG4iLAorCQkJICAgICAgIG1tY19ob3N0bmFtZShtbWMpLCBob3N0LT5zdGF0X2lycSwgcmV0KTsKKwkJCWdvdG8gY2xrX2Rpc2FibGU7CisJCX0KKwl9IGVsc2UgaWYgKHBsYXQtPnJlZ2lzdGVyX3N0YXR1c19ub3RpZnkpIHsKKwkJcGxhdC0+cmVnaXN0ZXJfc3RhdHVzX25vdGlmeShtc21zZGNjX3N0YXR1c19ub3RpZnlfY2IsIGhvc3QpOworCX0gZWxzZSBpZiAoIXBsYXQtPnN0YXR1cykKKwkJcHJfZXJyKCIlczogTm8gY2FyZCBkZXRlY3QgZmFjaWxpdGllcyBhdmFpbGFibGVcbiIsCisJCSAgICAgICBtbWNfaG9zdG5hbWUobW1jKSk7CisJZWxzZSB7CisJCWluaXRfdGltZXIoJmhvc3QtPnRpbWVyKTsKKwkJaG9zdC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhvc3Q7CisJCWhvc3QtPnRpbWVyLmZ1bmN0aW9uID0gbXNtc2RjY19jaGVja19zdGF0dXM7CisJCWhvc3QtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCWFkZF90aW1lcigmaG9zdC0+dGltZXIpOworCX0KKworCWlmIChwbGF0LT5zdGF0dXMpIHsKKwkJaG9zdC0+b2xkc3RhdCA9IGhvc3QtPnBsYXQtPnN0YXR1cyhtbWNfZGV2KGhvc3QtPm1tYykpOworCQlob3N0LT5lamVjdCA9ICFob3N0LT5vbGRzdGF0OworCX0KKworCS8qCisJICogU2V0dXAgYSBjb21tYW5kIHRpbWVyLiBXZSBjdXJyZW50bHkgbmVlZCB0aGlzIGR1ZSB0bworCSAqIHNvbWUgJ3N0cmFuZ2UnIHRpbWVvdXQgLyBlcnJvciBoYW5kbGluZyBzaXR1YXRpb25zLgorCSAqLworCWluaXRfdGltZXIoJmhvc3QtPmNvbW1hbmRfdGltZXIpOworCWhvc3QtPmNvbW1hbmRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBob3N0OworCWhvc3QtPmNvbW1hbmRfdGltZXIuZnVuY3Rpb24gPSBtc21zZGNjX2NvbW1hbmRfZXhwaXJlZDsKKworCXJldCA9IHJlcXVlc3RfaXJxKGNtZF9pcnFyZXMtPnN0YXJ0LCBtc21zZGNjX2lycSwgSVJRRl9TSEFSRUQsCisJCQkgIERSSVZFUl9OQU1FICIgKGNtZCkiLCBob3N0KTsKKwlpZiAocmV0KQorCQlnb3RvIHN0YXRfaXJxX2ZyZWU7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwaW9faXJxcmVzLT5zdGFydCwgbXNtc2RjY19waW9faXJxLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJJVkVSX05BTUUgIiAocGlvKSIsIGhvc3QpOworCWlmIChyZXQpCisJCWdvdG8gY21kX2lycV9mcmVlOworCisJbW1jX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CisJbW1jX2FkZF9ob3N0KG1tYyk7CisKKwlwcl9pbmZvKCIlczogUXVhbGNvbW0gTVNNIFNEQ0MgYXQgMHglMDE2bGx4IGlycSAlZCwlZCBkbWEgJWRcbiIsCisJCW1tY19ob3N0bmFtZShtbWMpLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbXJlcy0+c3RhcnQsCisJCSh1bnNpZ25lZCBpbnQpIGNtZF9pcnFyZXMtPnN0YXJ0LAorCQkodW5zaWduZWQgaW50KSBob3N0LT5zdGF0X2lycSwgaG9zdC0+ZG1hLmNoYW5uZWwpOworCXByX2luZm8oIiVzOiA0IGJpdCBkYXRhIG1vZGUgJXNcbiIsIG1tY19ob3N0bmFtZShtbWMpLAorCQkobW1jLT5jYXBzICYgTU1DX0NBUF80X0JJVF9EQVRBID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOworCXByX2luZm8oIiVzOiBNTUMgY2xvY2sgJXUgLT4gJXUgSHosIFBDTEsgJXUgSHpcbiIsCisJCW1tY19ob3N0bmFtZShtbWMpLCBtc21zZGNjX2ZtaW4sIG1zbXNkY2NfZm1heCwgaG9zdC0+cGNsa19yYXRlKTsKKwlwcl9pbmZvKCIlczogU2xvdCBlamVjdCBzdGF0dXMgPSAlZFxuIiwgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QtPmVqZWN0KTsKKwlwcl9pbmZvKCIlczogUG93ZXIgc2F2ZSBmZWF0dXJlIGVuYWJsZSA9ICVkXG4iLAorCQltbWNfaG9zdG5hbWUobW1jKSwgbXNtc2RjY19wd3JzYXZlKTsKKworCWlmIChob3N0LT5kbWEuY2hhbm5lbCAhPSAtMSkgeworCQlwcl9pbmZvKCIlczogRE0gbm9uLWNhY2hlZCBidWZmZXIgYXQgJXAsIGRtYV9hZGRyIDB4JS44eFxuIiwKKwkJCW1tY19ob3N0bmFtZShtbWMpLCBob3N0LT5kbWEubmMsIGhvc3QtPmRtYS5uY19idXNhZGRyKTsKKwkJcHJfaW5mbygiJXM6IERNIGNtZCBidXNhZGRyIDB4JS44eCwgY21kcHRyIGJ1c2FkZHIgMHglLjh4XG4iLAorCQkJbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QtPmRtYS5jbWRfYnVzYWRkciwKKwkJCWhvc3QtPmRtYS5jbWRwdHJfYnVzYWRkcik7CisJfSBlbHNlCisJCXByX2luZm8oIiVzOiBQSU8gdHJhbnNmZXIgZW5hYmxlZFxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOworCWlmIChob3N0LT50aW1lci5mdW5jdGlvbikKKwkJcHJfaW5mbygiJXM6IFBvbGxpbmcgc3RhdHVzIG1vZGUgZW5hYmxlZFxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOworCisJcmV0dXJuIDA7CisgY21kX2lycV9mcmVlOgorCWZyZWVfaXJxKGNtZF9pcnFyZXMtPnN0YXJ0LCBob3N0KTsKKyBzdGF0X2lycV9mcmVlOgorCWlmIChob3N0LT5zdGF0X2lycSkKKwkJZnJlZV9pcnEoaG9zdC0+c3RhdF9pcnEsIGhvc3QpOworIGNsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CisgY2xrX3B1dDoKKwljbGtfcHV0KGhvc3QtPmNsayk7CisgcGNsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlKGhvc3QtPnBjbGspOworIHBjbGtfcHV0OgorCWNsa19wdXQoaG9zdC0+cGNsayk7CisgaG9zdF9mcmVlOgorCW1tY19mcmVlX2hvc3QobW1jKTsKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorbXNtc2RjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gbW1jX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJjID0gMDsKKworCWlmIChtbWMpIHsKKwkJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwkJaWYgKGhvc3QtPnN0YXRfaXJxKQorCQkJZGlzYWJsZV9pcnEoaG9zdC0+c3RhdF9pcnEpOworCisJCWlmIChtbWMtPmNhcmQgJiYgbW1jLT5jYXJkLT50eXBlICE9IE1NQ19UWVBFX1NESU8pCisJCQlyYyA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisJCWlmICghcmMpIHsKKwkJCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKworCQkJaWYgKGhvc3QtPmNsa3Nfb24pIHsKKwkJCQljbGtfZGlzYWJsZShob3N0LT5jbGspOworCQkJCWNsa19kaXNhYmxlKGhvc3QtPnBjbGspOworCQkJCWhvc3QtPmNsa3Nfb24gPSAwOworCQkJfQorCQl9CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorbXNtc2RjY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gbW1jX2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChtbWMpIHsKKwkJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoIWhvc3QtPmNsa3Nfb24pIHsKKwkJCWNsa19lbmFibGUoaG9zdC0+cGNsayk7CisJCQljbGtfZW5hYmxlKGhvc3QtPmNsayk7CisJCQlob3N0LT5jbGtzX29uID0gMTsKKwkJfQorCisJCXdyaXRlbChob3N0LT5zYXZlZF9pcnEwbWFzaywgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJCWlmIChtbWMtPmNhcmQgJiYgbW1jLT5jYXJkLT50eXBlICE9IE1NQ19UWVBFX1NESU8pCisJCQltbWNfcmVzdW1lX2hvc3QobW1jKTsKKwkJCWlmIChob3N0LT5zdGF0X2lycSkKKwkJCQllbmFibGVfaXJxKGhvc3QtPnN0YXRfaXJxKTsKKwkJZWxzZSBpZiAoaG9zdC0+c3RhdF9pcnEpCisJCQllbmFibGVfaXJxKGhvc3QtPnN0YXRfaXJxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1zbXNkY2NfZHJpdmVyID0geworCS5wcm9iZQkJPSBtc21zZGNjX3Byb2JlLAorCS5zdXNwZW5kCT0gbXNtc2RjY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gbXNtc2RjY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1zbV9zZGNjIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXNtc2RjY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXNtc2RjY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXNtc2RjY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1zbXNkY2NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXNtc2RjY19pbml0KTsKK21vZHVsZV9leGl0KG1zbXNkY2NfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUXVhbGNvbW0gTVNNIDdYMDBBIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmggYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4NDQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL21tYy9ob3N0L21zbXNkY2MuaCAtIFFDVCBNU003SyBTREMgQ29udHJvbGxlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogLSBCYXNlZCBvbiBtbWNpLmgKKyAqLworCisjaWZuZGVmIF9NU01fU0RDQ19ICisjZGVmaW5lIF9NU01fU0RDQ19ICisKKyNkZWZpbmUgTVNNU0RDQ19DUkNJX1NEQzEJNgorI2RlZmluZSBNU01TRENDX0NSQ0lfU0RDMgk3CisjZGVmaW5lIE1TTVNEQ0NfQ1JDSV9TREMzCTEyCisjZGVmaW5lIE1TTVNEQ0NfQ1JDSV9TREM0CTEzCisKKyNkZWZpbmUgTU1DSVBPV0VSCQkweDAwMAorI2RlZmluZSBNQ0lfUFdSX09GRgkJMHgwMAorI2RlZmluZSBNQ0lfUFdSX1VQCQkweDAyCisjZGVmaW5lIE1DSV9QV1JfT04JCTB4MDMKKyNkZWZpbmUgTUNJX09ECQkJKDEgPDwgNikKKworI2RlZmluZSBNTUNJQ0xPQ0sJCTB4MDA0CisjZGVmaW5lIE1DSV9DTEtfRU5BQkxFCQkoMSA8PCA4KQorI2RlZmluZSBNQ0lfQ0xLX1BXUlNBVkUJCSgxIDw8IDkpCisjZGVmaW5lIE1DSV9DTEtfV0lERUJVUwkJKDEgPDwgMTApCisjZGVmaW5lIE1DSV9DTEtfRkxPV0VOQQkJKDEgPDwgMTIpCisjZGVmaW5lIE1DSV9DTEtfSU5WRVJUT1VUCSgxIDw8IDEzKQorI2RlZmluZSBNQ0lfQ0xLX1NFTEVDVElOCSgxIDw8IDE0KQorCisjZGVmaW5lIE1NQ0lBUkdVTUVOVAkJMHgwMDgKKyNkZWZpbmUgTU1DSUNPTU1BTkQJCTB4MDBjCisjZGVmaW5lIE1DSV9DUFNNX1JFU1BPTlNFCSgxIDw8IDYpCisjZGVmaW5lIE1DSV9DUFNNX0xPTkdSU1AJKDEgPDwgNykKKyNkZWZpbmUgTUNJX0NQU01fSU5URVJSVVBUCSgxIDw8IDgpCisjZGVmaW5lIE1DSV9DUFNNX1BFTkRJTkcJKDEgPDwgOSkKKyNkZWZpbmUgTUNJX0NQU01fRU5BQkxFCQkoMSA8PCAxMCkKKyNkZWZpbmUgTUNJX0NQU01fUFJPR0VOQQkoMSA8PCAxMSkKKyNkZWZpbmUgTUNJX0NTUE1fREFUQ01ECQkoMSA8PCAxMikKKyNkZWZpbmUgTUNJX0NTUE1fTUNJQUJPUlQJKDEgPDwgMTMpCisjZGVmaW5lIE1DSV9DU1BNX0NDU0VOQUJMRQkoMSA8PCAxNCkKKyNkZWZpbmUgTUNJX0NTUE1fQ0NTRElTQUJMRQkoMSA8PCAxNSkKKworCisjZGVmaW5lIE1NQ0lSRVNQQ01ECQkweDAxMAorI2RlZmluZSBNTUNJUkVTUE9OU0UwCQkweDAxNAorI2RlZmluZSBNTUNJUkVTUE9OU0UxCQkweDAxOAorI2RlZmluZSBNTUNJUkVTUE9OU0UyCQkweDAxYworI2RlZmluZSBNTUNJUkVTUE9OU0UzCQkweDAyMAorI2RlZmluZSBNTUNJREFUQVRJTUVSCQkweDAyNAorI2RlZmluZSBNTUNJREFUQUxFTkdUSAkJMHgwMjgKKworI2RlZmluZSBNTUNJREFUQUNUUkwJCTB4MDJjCisjZGVmaW5lIE1DSV9EUFNNX0VOQUJMRQkJKDEgPDwgMCkKKyNkZWZpbmUgTUNJX0RQU01fRElSRUNUSU9OCSgxIDw8IDEpCisjZGVmaW5lIE1DSV9EUFNNX01PREUJCSgxIDw8IDIpCisjZGVmaW5lIE1DSV9EUFNNX0RNQUVOQUJMRQkoMSA8PCAzKQorCisjZGVmaW5lIE1NQ0lEQVRBQ05UCQkweDAzMAorI2RlZmluZSBNTUNJU1RBVFVTCQkweDAzNAorI2RlZmluZSBNQ0lfQ01EQ1JDRkFJTAkJKDEgPDwgMCkKKyNkZWZpbmUgTUNJX0RBVEFDUkNGQUlMCQkoMSA8PCAxKQorI2RlZmluZSBNQ0lfQ01EVElNRU9VVAkJKDEgPDwgMikKKyNkZWZpbmUgTUNJX0RBVEFUSU1FT1VUCQkoMSA8PCAzKQorI2RlZmluZSBNQ0lfVFhVTkRFUlJVTgkJKDEgPDwgNCkKKyNkZWZpbmUgTUNJX1JYT1ZFUlJVTgkJKDEgPDwgNSkKKyNkZWZpbmUgTUNJX0NNRFJFU1BFTkQJCSgxIDw8IDYpCisjZGVmaW5lIE1DSV9DTURTRU5UCQkoMSA8PCA3KQorI2RlZmluZSBNQ0lfREFUQUVORAkJKDEgPDwgOCkKKyNkZWZpbmUgTUNJX0RBVEFCTE9DS0VORAkoMSA8PCAxMCkKKyNkZWZpbmUgTUNJX0NNREFDVElWRQkJKDEgPDwgMTEpCisjZGVmaW5lIE1DSV9UWEFDVElWRQkJKDEgPDwgMTIpCisjZGVmaW5lIE1DSV9SWEFDVElWRQkJKDEgPDwgMTMpCisjZGVmaW5lIE1DSV9UWEZJRk9IQUxGRU1QVFkJKDEgPDwgMTQpCisjZGVmaW5lIE1DSV9SWEZJRk9IQUxGRlVMTAkoMSA8PCAxNSkKKyNkZWZpbmUgTUNJX1RYRklGT0ZVTEwJCSgxIDw8IDE2KQorI2RlZmluZSBNQ0lfUlhGSUZPRlVMTAkJKDEgPDwgMTcpCisjZGVmaW5lIE1DSV9UWEZJRk9FTVBUWQkJKDEgPDwgMTgpCisjZGVmaW5lIE1DSV9SWEZJRk9FTVBUWQkJKDEgPDwgMTkpCisjZGVmaW5lIE1DSV9UWERBVEFBVkxCTAkJKDEgPDwgMjApCisjZGVmaW5lIE1DSV9SWERBVEFBVkxCTAkJKDEgPDwgMjEpCisjZGVmaW5lIE1DSV9TRElPSU5UUgkJKDEgPDwgMjIpCisjZGVmaW5lIE1DSV9QUk9HRE9ORQkJKDEgPDwgMjMpCisjZGVmaW5lIE1DSV9BVEFDTURDT01QTAkJKDEgPDwgMjQpCisjZGVmaW5lIE1DSV9TRElPSU5UT1BFUgkJKDEgPDwgMjUpCisjZGVmaW5lIE1DSV9DQ1NUSU1FT1VUCQkoMSA8PCAyNikKKworI2RlZmluZSBNTUNJQ0xFQVIJCTB4MDM4CisjZGVmaW5lIE1DSV9DTURDUkNGQUlMQ0xSCSgxIDw8IDApCisjZGVmaW5lIE1DSV9EQVRBQ1JDRkFJTENMUgkoMSA8PCAxKQorI2RlZmluZSBNQ0lfQ01EVElNRU9VVENMUgkoMSA8PCAyKQorI2RlZmluZSBNQ0lfREFUQVRJTUVPVVRDTFIJKDEgPDwgMykKKyNkZWZpbmUgTUNJX1RYVU5ERVJSVU5DTFIJKDEgPDwgNCkKKyNkZWZpbmUgTUNJX1JYT1ZFUlJVTkNMUgkoMSA8PCA1KQorI2RlZmluZSBNQ0lfQ01EUkVTUEVORENMUgkoMSA8PCA2KQorI2RlZmluZSBNQ0lfQ01EU0VOVENMUgkJKDEgPDwgNykKKyNkZWZpbmUgTUNJX0RBVEFFTkRDTFIJCSgxIDw8IDgpCisjZGVmaW5lIE1DSV9EQVRBQkxPQ0tFTkRDTFIJKDEgPDwgMTApCisKKyNkZWZpbmUgTU1DSU1BU0swCQkweDAzYworI2RlZmluZSBNQ0lfQ01EQ1JDRkFJTE1BU0sJKDEgPDwgMCkKKyNkZWZpbmUgTUNJX0RBVEFDUkNGQUlMTUFTSwkoMSA8PCAxKQorI2RlZmluZSBNQ0lfQ01EVElNRU9VVE1BU0sJKDEgPDwgMikKKyNkZWZpbmUgTUNJX0RBVEFUSU1FT1VUTUFTSwkoMSA8PCAzKQorI2RlZmluZSBNQ0lfVFhVTkRFUlJVTk1BU0sJKDEgPDwgNCkKKyNkZWZpbmUgTUNJX1JYT1ZFUlJVTk1BU0sJKDEgPDwgNSkKKyNkZWZpbmUgTUNJX0NNRFJFU1BFTkRNQVNLCSgxIDw8IDYpCisjZGVmaW5lIE1DSV9DTURTRU5UTUFTSwkJKDEgPDwgNykKKyNkZWZpbmUgTUNJX0RBVEFFTkRNQVNLCQkoMSA8PCA4KQorI2RlZmluZSBNQ0lfREFUQUJMT0NLRU5ETUFTSwkoMSA8PCAxMCkKKyNkZWZpbmUgTUNJX0NNREFDVElWRU1BU0sJKDEgPDwgMTEpCisjZGVmaW5lIE1DSV9UWEFDVElWRU1BU0sJKDEgPDwgMTIpCisjZGVmaW5lIE1DSV9SWEFDVElWRU1BU0sJKDEgPDwgMTMpCisjZGVmaW5lIE1DSV9UWEZJRk9IQUxGRU1QVFlNQVNLCSgxIDw8IDE0KQorI2RlZmluZSBNQ0lfUlhGSUZPSEFMRkZVTExNQVNLCSgxIDw8IDE1KQorI2RlZmluZSBNQ0lfVFhGSUZPRlVMTE1BU0sJKDEgPDwgMTYpCisjZGVmaW5lIE1DSV9SWEZJRk9GVUxMTUFTSwkoMSA8PCAxNykKKyNkZWZpbmUgTUNJX1RYRklGT0VNUFRZTUFTSwkoMSA8PCAxOCkKKyNkZWZpbmUgTUNJX1JYRklGT0VNUFRZTUFTSwkoMSA8PCAxOSkKKyNkZWZpbmUgTUNJX1RYREFUQUFWTEJMTUFTSwkoMSA8PCAyMCkKKyNkZWZpbmUgTUNJX1JYREFUQUFWTEJMTUFTSwkoMSA8PCAyMSkKKyNkZWZpbmUgTUNJX1NESU9JTlRNQVNLCQkoMSA8PCAyMikKKyNkZWZpbmUgTUNJX1BST0dET05FTUFTSwkoMSA8PCAyMykKKyNkZWZpbmUgTUNJX0FUQUNNRENPTVBMTUFTSwkoMSA8PCAyNCkKKyNkZWZpbmUgTUNJX1NESU9JTlRPUEVSTUFTSwkoMSA8PCAyNSkKKyNkZWZpbmUgTUNJX0NDU1RJTUVPVVRNQVNLCSgxIDw8IDI2KQorCisjZGVmaW5lIE1NQ0lNQVNLMQkJMHgwNDAKKyNkZWZpbmUgTU1DSUZJRk9DTlQJCTB4MDQ0CisjZGVmaW5lIE1DSUNDU1RJTUVSCQkweDA1OAorCisjZGVmaW5lIE1NQ0lGSUZPCQkweDA4MCAvKiB0byAweDBiYyAqLworCisjZGVmaW5lIE1DSV9JUlFFTkFCTEUJXAorCShNQ0lfQ01EQ1JDRkFJTE1BU0t8TUNJX0RBVEFDUkNGQUlMTUFTS3xNQ0lfQ01EVElNRU9VVE1BU0t8CVwKKwlNQ0lfREFUQVRJTUVPVVRNQVNLfE1DSV9UWFVOREVSUlVOTUFTS3xNQ0lfUlhPVkVSUlVOTUFTS3wJXAorCU1DSV9DTURSRVNQRU5ETUFTS3xNQ0lfQ01EU0VOVE1BU0t8TUNJX0RBVEFFTkRNQVNLKQorCisvKgorICogVGhlIHNpemUgb2YgdGhlIEZJRk8gaW4gYnl0ZXMuCisgKi8KKyNkZWZpbmUgTUNJX0ZJRk9TSVpFCSgxNio0KQorCisjZGVmaW5lIE1DSV9GSUZPSEFMRlNJWkUgKE1DSV9GSUZPU0laRSAvIDIpCisKKyNkZWZpbmUgTlJfU0cJCTMyCisKK3N0cnVjdCBjbGs7CisKK3N0cnVjdCBtc21zZGNjX25jX2RtYWRhdGEgeworCWRtb3ZfYm94CWNtZFtOUl9TR107CisJdWludDMyX3QJY21kcHRyOworfTsKKworc3RydWN0IG1zbXNkY2NfZG1hX2RhdGEgeworCXN0cnVjdCBtc21zZGNjX25jX2RtYWRhdGEJKm5jOworCWRtYV9hZGRyX3QJCQluY19idXNhZGRyOworCWRtYV9hZGRyX3QJCQljbWRfYnVzYWRkcjsKKwlkbWFfYWRkcl90CQkJY21kcHRyX2J1c2FkZHI7CisKKwlzdHJ1Y3QgbXNtX2Rtb3ZfY21kCQloZHI7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24JCWRpcjsKKworCXN0cnVjdCBzY2F0dGVybGlzdAkJKnNnOworCWludAkJCQludW1fZW50czsKKworCWludAkJCQljaGFubmVsOworCXN0cnVjdCBtc21zZGNjX2hvc3QJCSpob3N0OworCWludAkJCQlidXN5OyAvKiBTZXQgaWYgRE0gaXMgYnVzeSAqLworfTsKKworc3RydWN0IG1zbXNkY2NfcGlvX2RhdGEgeworCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CisJdW5zaWduZWQgaW50CQlzZ19sZW47CisJdW5zaWduZWQgaW50CQlzZ19vZmY7Cit9OworCitzdHJ1Y3QgbXNtc2RjY19jdXJyX3JlcSB7CisJc3RydWN0IG1tY19yZXF1ZXN0CSptcnE7CisJc3RydWN0IG1tY19jb21tYW5kCSpjbWQ7CisJc3RydWN0IG1tY19kYXRhCQkqZGF0YTsKKwl1bnNpZ25lZCBpbnQJCXhmZXJfc2l6ZTsJLyogVG90YWwgZGF0YSBzaXplICovCisJdW5zaWduZWQgaW50CQl4ZmVyX3JlbWFpbjsJLyogQnl0ZXMgcmVtYWluaW5nIHRvIHNlbmQgKi8KKwl1bnNpZ25lZCBpbnQJCWRhdGFfeGZlcmVkOwkvKiBCeXRlcyBhY2tlZCBieSBCTEtFTkQgaXJxICovCisJaW50CQkJZ290X2RhdGFlbmQ7CisJaW50CQkJZ290X2RhdGFibGtlbmQ7CisJaW50CQkJdXNlcl9wYWdlczsKK307CisKK3N0cnVjdCBtc21zZGNjX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgcmVxczsKKwl1bnNpZ25lZCBpbnQgY21kczsKKwl1bnNpZ25lZCBpbnQgY21kcG9sbF9oaXRzOworCXVuc2lnbmVkIGludCBjbWRwb2xsX21pc3NlczsKK307CisKK3N0cnVjdCBtc21zZGNjX2hvc3QgeworCXN0cnVjdCByZXNvdXJjZQkJKmNtZF9pcnFyZXM7CisJc3RydWN0IHJlc291cmNlCQkqcGlvX2lycXJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSptZW1yZXM7CisJc3RydWN0IHJlc291cmNlCQkqZG1hcmVzOworCXZvaWQgX19pb21lbQkJKmJhc2U7CisJaW50CQkJcGRldl9pZDsKKwl1bnNpZ25lZCBpbnQJCXN0YXRfaXJxOworCisJc3RydWN0IG1zbXNkY2NfY3Vycl9yZXEJY3VycjsKKworCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKKwlzdHJ1Y3QgY2xrCQkqY2xrOwkJLyogbWFpbiBNTUMgYnVzIGNsb2NrICovCisJc3RydWN0IGNsawkJKnBjbGs7CQkvKiBTRENDIHBlcmlwaGVyYWwgYnVzIGNsb2NrICovCisJdW5zaWduZWQgaW50CQljbGtzX29uOwkvKiBzZXQgaWYgY2xvY2tzIGFyZSBlbmFibGVkICovCisJc3RydWN0IHRpbWVyX2xpc3QJY29tbWFuZF90aW1lcjsKKworCXVuc2lnbmVkIGludAkJZWplY3Q7CQkvKiBlamVjdCBzdGF0ZSAqLworCisJc3BpbmxvY2tfdAkJbG9jazsKKworCXVuc2lnbmVkIGludAkJY2xrX3JhdGU7CS8qIEN1cnJlbnQgY2xvY2sgcmF0ZSAqLworCXVuc2lnbmVkIGludAkJcGNsa19yYXRlOworCisJdTMyCQkJcHdyOworCXUzMgkJCXNhdmVkX2lycTBtYXNrOwkvKiBNTUNJTUFTSzAgcmVnIHZhbHVlICovCisJc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhICpwbGF0OworCisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisJdW5zaWduZWQgaW50CQlvbGRzdGF0OworCisJc3RydWN0IG1zbXNkY2NfZG1hX2RhdGEJZG1hOworCXN0cnVjdCBtc21zZGNjX3Bpb19kYXRhCXBpbzsKKwlpbnQJCQljbWRwb2xsOworCXN0cnVjdCBtc21zZGNjX3N0YXRzCXN0YXRzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwppbmRleCBiYzE0YmIxLi44ODY3MTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCX0KIAogCS8qIEZvciB0aGUgRE1BIGNhc2UgdGhlIERNQSBlbmdpbmUgaGFuZGxlcyB0aGUgZGF0YSB0cmFuc2ZlcgotCSAqIGF1dG9tYXRpY2FsbHkuIEZvciBub24gRE1BIHdlIGhhdmUgdG8gdG8gaXQgb3Vyc2VsdmVzLgorCSAqIGF1dG9tYXRpY2FsbHkuIEZvciBub24gRE1BIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLgogCSAqIERvbid0IGRvIGl0IGluIGludGVycnVwdCBjb250ZXh0IHRob3VnaC4KIAkgKi8KIAlpZiAoIW14Y21jaV91c2VfZG1hKGhvc3QpICYmIGhvc3QtPmRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IDFjZjljZmIuLjQ0ODdjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCkBAIC0xNyw2ICsxNyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtMjUsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KQEAgLTM1LDYgKzM4LDcgQEAKIAogLyogT01BUCBIU01NQyBIb3N0IENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCiAjZGVmaW5lIE9NQVBfSFNNTUNfU1lTQ09ORklHCTB4MDAxMAorI2RlZmluZSBPTUFQX0hTTU1DX1NZU1NUQVRVUwkweDAwMTQKICNkZWZpbmUgT01BUF9IU01NQ19DT04JCTB4MDAyQwogI2RlZmluZSBPTUFQX0hTTU1DX0JMSwkJMHgwMTA0CiAjZGVmaW5lIE9NQVBfSFNNTUNfQVJHCQkweDAxMDgKQEAgLTcwLDYgKzc0LDggQEAKICNkZWZpbmUgRFRPX01BU0sJCTB4MDAwRjAwMDAKICNkZWZpbmUgRFRPX1NISUZUCQkxNgogI2RlZmluZSBJTlRfRU5fTUFTSwkJMHgzMDdGMDAzMworI2RlZmluZSBCV1JfRU5BQkxFCQkoMSA8PCA0KQorI2RlZmluZSBCUlJfRU5BQkxFCQkoMSA8PCA1KQogI2RlZmluZSBJTklUX1NUUkVBTQkJKDEgPDwgMSkKICNkZWZpbmUgRFBfU0VMRUNUCQkoMSA8PCAyMSkKICNkZWZpbmUgRERJUgkJCSgxIDw8IDQpCkBAIC05Miw2ICs5OCw4IEBACiAjZGVmaW5lIERVQUxfVk9MVF9PQ1JfQklUCTcKICNkZWZpbmUgU1JDCQkJKDEgPDwgMjUpCiAjZGVmaW5lIFNSRAkJCSgxIDw8IDI2KQorI2RlZmluZSBTT0ZUUkVTRVQJCSgxIDw8IDEpCisjZGVmaW5lIFJFU0VURE9ORQkJKDEgPDwgMCkKIAogLyoKICAqIEZJWE1FOiBNb3N0IGxpa2VseSBhbGwgdGhlIGRhdGEgdXNpbmcgdGhlc2UgX0RFVklEIGRlZmluZXMgc2hvdWxkIGNvbWUKQEAgLTEwMSwxMSArMTA5LDE4IEBACiAjZGVmaW5lIE9NQVBfTU1DMV9ERVZJRAkJMAogI2RlZmluZSBPTUFQX01NQzJfREVWSUQJCTEKICNkZWZpbmUgT01BUF9NTUMzX0RFVklECQkyCisjZGVmaW5lIE9NQVBfTU1DNF9ERVZJRAkJMworI2RlZmluZSBPTUFQX01NQzVfREVWSUQJCTQKIAogI2RlZmluZSBNTUNfVElNRU9VVF9NUwkJMjAKICNkZWZpbmUgT01BUF9NTUNfTUFTVEVSX0NMT0NLCTk2MDAwMDAwCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkibW1jaS1vbWFwLWhzIgogCisvKiBUaW1lb3V0cyBmb3IgZW50ZXJpbmcgcG93ZXIgc2F2aW5nIHN0YXRlcyBvbiBpbmFjdGl2aXR5LCBtc2VjICovCisjZGVmaW5lIE9NQVBfTU1DX0RJU0FCTEVEX1RJTUVPVVQJMTAwCisjZGVmaW5lIE9NQVBfTU1DX1NMRUVQX1RJTUVPVVQJCTEwMDAKKyNkZWZpbmUgT01BUF9NTUNfT0ZGX1RJTUVPVVQJCTgwMDAKKwogLyoKICAqIE9uZSBjb250cm9sbGVyIGNhbiBoYXZlIG11bHRpcGxlIHNsb3RzLCBsaWtlIG9uIHNvbWUgb21hcCBib2FyZHMgdXNpbmcKICAqIG9tYXAuYyBjb250cm9sbGVyIGRyaXZlci4gTHVja2lseSB0aGlzIGlzIG5vdCBjdXJyZW50bHkgZG9uZSBvbiBhbnkga25vd24KQEAgLTEyMiw3ICsxMzcsNyBAQAogI2RlZmluZSBPTUFQX0hTTU1DX1dSSVRFKGJhc2UsIHJlZywgdmFsKSBcCiAJX19yYXdfd3JpdGVsKCh2YWwpLCAoYmFzZSkgKyBPTUFQX0hTTU1DXyMjcmVnKQogCi1zdHJ1Y3QgbW1jX29tYXBfaG9zdCB7CitzdHJ1Y3Qgb21hcF9oc21tY19ob3N0IHsKIAlzdHJ1Y3QJZGV2aWNlCQkqZGV2OwogCXN0cnVjdAltbWNfaG9zdAkqbW1jOwogCXN0cnVjdAltbWNfcmVxdWVzdAkqbXJxOwpAQCAtMTM1LDI3ICsxNTAsMzUgQEAKIAlzdHJ1Y3QJd29ya19zdHJ1Y3QJbW1jX2NhcmRkZXRlY3Rfd29yazsKIAl2b2lkCV9faW9tZW0JCSpiYXNlOwogCXJlc291cmNlX3NpemVfdAkJbWFwYmFzZTsKKwlzcGlubG9ja190CQlpcnFfbG9jazsgLyogUHJldmVudCByYWNlcyB3aXRoIGlycSBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJdW5zaWduZWQgaW50CQlpZDsKIAl1bnNpZ25lZCBpbnQJCWRtYV9sZW47CiAJdW5zaWduZWQgaW50CQlkbWFfc2dfaWR4OwogCXVuc2lnbmVkIGNoYXIJCWJ1c19tb2RlOworCXVuc2lnbmVkIGNoYXIJCXBvd2VyX21vZGU7CiAJdTMyCQkJKmJ1ZmZlcjsKIAl1MzIJCQlieXRlc2xlZnQ7CiAJaW50CQkJc3VzcGVuZGVkOwogCWludAkJCWlycTsKLQlpbnQJCQljYXJkZGV0ZWN0OwogCWludAkJCXVzZV9kbWEsIGRtYV9jaDsKIAlpbnQJCQlkbWFfbGluZV90eCwgZG1hX2xpbmVfcng7CiAJaW50CQkJc2xvdF9pZDsKLQlpbnQJCQlkYmNsa19lbmFibGVkOworCWludAkJCWdvdF9kYmNsazsKIAlpbnQJCQlyZXNwb25zZV9idXN5OworCWludAkJCWNvbnRleHRfbG9zczsKKwlpbnQJCQlkcG1fc3RhdGU7CisJaW50CQkJdmRkOworCWludAkJCXByb3RlY3RfY2FyZDsKKwlpbnQJCQlyZXFzX2Jsb2NrZWQ7CisKIAlzdHJ1Y3QJb21hcF9tbWNfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CiB9OwogCiAvKgogICogU3RvcCBjbG9jayB0byB0aGUgY2FyZAogICovCi1zdGF0aWMgdm9pZCBvbWFwX21tY19zdG9wX2Nsb2NrKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgb21hcF9oc21tY19zdG9wX2Nsb2NrKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7CiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDVEwsCiAJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpICYgfkNFTik7CkBAIC0xNjMsMTUgKzE4NiwxNzggQEAKIAkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJNTUMgQ2xvY2sgaXMgbm90IHN0b3BlZFxuIik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KKworLyoKKyAqIFJlc3RvcmUgdGhlIE1NQyBob3N0IGNvbnRleHQsIGlmIGl0IHdhcyBsb3N0IGFzIHJlc3VsdCBvZiBhCisgKiBwb3dlciBzdGF0ZSBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgb21hcF9oc21tY19jb250ZXh0X3Jlc3RvcmUoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2lvcyAqaW9zID0gJmhvc3QtPm1tYy0+aW9zOworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOworCWludCBjb250ZXh0X2xvc3MgPSAwOworCXUzMiBoY3RsLCBjYXBhLCBjb247CisJdTE2IGRzb3IgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCWlmIChwZGF0YS0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCkgeworCQljb250ZXh0X2xvc3MgPSBwZGF0YS0+Z2V0X2NvbnRleHRfbG9zc19jb3VudChob3N0LT5kZXYpOworCQlpZiAoY29udGV4dF9sb3NzIDwgMCkKKwkJCXJldHVybiAxOworCX0KKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiY29udGV4dCB3YXMgJXNsb3N0XG4iLAorCQljb250ZXh0X2xvc3MgPT0gaG9zdC0+Y29udGV4dF9sb3NzID8gIm5vdCAiIDogIiIpOworCWlmIChob3N0LT5jb250ZXh0X2xvc3MgPT0gY29udGV4dF9sb3NzKQorCQlyZXR1cm4gMTsKKworCS8qIFdhaXQgZm9yIGhhcmR3YXJlIHJlc2V0ICovCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1NQ19USU1FT1VUX01TKTsKKwl3aGlsZSAoKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNTVEFUVVMpICYgUkVTRVRET05FKSAhPSBSRVNFVERPTkUKKwkJJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCTsKKworCS8qIERvIHNvZnR3YXJlIHJlc2V0ICovCisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDT05GSUcsIFNPRlRSRVNFVCk7CisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1NQ19USU1FT1VUX01TKTsKKwl3aGlsZSAoKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNTVEFUVVMpICYgUkVTRVRET05FKSAhPSBSRVNFVERPTkUKKwkJJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCTsKKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ09ORklHLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NPTkZJRykgfCBBVVRPSURMRSk7CisKKwlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklEKSB7CisJCWlmIChob3N0LT5wb3dlcl9tb2RlICE9IE1NQ19QT1dFUl9PRkYgJiYKKwkJICAgICgxIDw8IGlvcy0+dmRkKSA8PSBNTUNfVkREXzIzXzI0KQorCQkJaGN0bCA9IFNEVlMxODsKKwkJZWxzZQorCQkJaGN0bCA9IFNEVlMzMDsKKwkJY2FwYSA9IFZTMzAgfCBWUzE4OworCX0gZWxzZSB7CisJCWhjdGwgPSBTRFZTMTg7CisJCWNhcGEgPSBWUzE4OworCX0KKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKKwkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSB8IGhjdGwpOworCisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDQVBBLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENBUEEpIHwgY2FwYSk7CisKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgfCBTREJQKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhNTUNfVElNRU9VVF9NUyk7CisJd2hpbGUgKChPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiBTREJQKSAhPSBTREJQCisJCSYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCQk7CisKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNUQVQsIFNUQVRfQ0xFQVIpOworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSVNFLCBJTlRfRU5fTUFTSyk7CisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJRSwgSU5UX0VOX01BU0spOworCisJLyogRG8gbm90IGluaXRpYWxpemUgY2FyZC1zcGVjaWZpYyB0aGluZ3MgaWYgdGhlIHBvd2VyIGlzIG9mZiAqLworCWlmIChob3N0LT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCisJCWdvdG8gb3V0OworCisJY29uID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7CisJc3dpdGNoIChpb3MtPmJ1c193aWR0aCkgeworCWNhc2UgTU1DX0JVU19XSURUSF84OgorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uIHwgRFc4KTsKKwkJYnJlYWs7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzQ6CisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gJiB+RFc4KTsKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpIHwgRk9VUl9CSVQpOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfMToKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGNvbiAmIH5EVzgpOworCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiB+Rk9VUl9CSVQpOworCQlicmVhazsKKwl9CisKKwlpZiAoaW9zLT5jbG9jaykgeworCQlkc29yID0gT01BUF9NTUNfTUFTVEVSX0NMT0NLIC8gaW9zLT5jbG9jazsKKwkJaWYgKGRzb3IgPCAxKQorCQkJZHNvciA9IDE7CisKKwkJaWYgKE9NQVBfTU1DX01BU1RFUl9DTE9DSyAvIGRzb3IgPiBpb3MtPmNsb2NrKQorCQkJZHNvcisrOworCisJCWlmIChkc29yID4gMjUwKQorCQkJZHNvciA9IDI1MDsKKwl9CisKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NUTCwKKwkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgJiB+Q0VOKTsKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NUTCwgKGRzb3IgPDwgNikgfCAoRFRPIDw8IDE2KSk7CisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDVEwsCisJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpIHwgSUNFKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhNTUNfVElNRU9VVF9NUyk7CisJd2hpbGUgKChPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ1RMKSAmIElDUykgIT0gSUNTCisJCSYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCQk7CisKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NUTCwKKwkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgfCBDRU4pOworCisJY29uID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7CisJaWYgKGlvcy0+YnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOKQorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uIHwgT0QpOworCWVsc2UKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGNvbiAmIH5PRCk7CitvdXQ6CisJaG9zdC0+Y29udGV4dF9sb3NzID0gY29udGV4dF9sb3NzOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJjb250ZXh0IGlzIHJlc3RvcmVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNhdmUgdGhlIE1NQyBob3N0IGNvbnRleHQgKHN0b3JlIHRoZSBudW1iZXIgb2YgcG93ZXIgc3RhdGUgY2hhbmdlcyBzbyBmYXIpLgorICovCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2NvbnRleHRfc2F2ZShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOworCWludCBjb250ZXh0X2xvc3M7CisKKwlpZiAocGRhdGEtPmdldF9jb250ZXh0X2xvc3NfY291bnQpIHsKKwkJY29udGV4dF9sb3NzID0gcGRhdGEtPmdldF9jb250ZXh0X2xvc3NfY291bnQoaG9zdC0+ZGV2KTsKKwkJaWYgKGNvbnRleHRfbG9zcyA8IDApCisJCQlyZXR1cm47CisJCWhvc3QtPmNvbnRleHRfbG9zcyA9IGNvbnRleHRfbG9zczsKKwl9Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19jb250ZXh0X3Jlc3RvcmUoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcF9oc21tY19jb250ZXh0X3NhdmUoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKK30KKworI2VuZGlmCisKIC8qCiAgKiBTZW5kIGluaXQgc3RyZWFtIHNlcXVlbmNlIHRvIGNhcmQKICAqIGJlZm9yZSBzZW5kaW5nIElETEUgY29tbWFuZAogICovCi1zdGF0aWMgdm9pZCBzZW5kX2luaXRfc3RyZWFtKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgc2VuZF9pbml0X3N0cmVhbShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQogewogCWludCByZWcgPSAwOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAorCWlmIChob3N0LT5wcm90ZWN0X2NhcmQpCisJCXJldHVybjsKKwogCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sCiAJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDT04pIHwgSU5JVF9TVFJFQU0pOwpAQCAtMTgzLDUxICszNjksNTMgQEAKIAogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLAogCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKSAmIH5JTklUX1NUUkVBTSk7CisKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNUQVQsIFNUQVRfQ0xFQVIpOworCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTVEFUKTsKKwogCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKIH0KIAogc3RhdGljIGlubGluZQotaW50IG1tY19vbWFwX2NvdmVyX2lzX2Nsb3NlZChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCkKK2ludCBvbWFwX2hzbW1jX2NvdmVyX2lzX2Nsb3NlZChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQogewogCWludCByID0gMTsKIAotCWlmIChob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0uZ2V0X2NvdmVyX3N0YXRlKQotCQlyID0gaG9zdC0+cGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYsCi0JCQlob3N0LT5zbG90X2lkKTsKKwlpZiAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKQorCQlyID0gbW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCk7CiAJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1tbWNfb21hcF9zaG93X2NvdmVyX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorb21hcF9oc21tY19zaG93X2NvdmVyX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1tY19ob3N0LCBjbGFzc19kZXYpOwotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtbWNfb21hcF9jb3Zlcl9pc19jbG9zZWQoaG9zdCkgPyAiY2xvc2VkIiA6Ci0JCSAgICAgICAib3BlbiIpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkJb21hcF9oc21tY19jb3Zlcl9pc19jbG9zZWQoaG9zdCkgPyAiY2xvc2VkIiA6ICJvcGVuIik7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihjb3Zlcl9zd2l0Y2gsIFNfSVJVR08sIG1tY19vbWFwX3Nob3dfY292ZXJfc3dpdGNoLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjb3Zlcl9zd2l0Y2gsIFNfSVJVR08sIG9tYXBfaHNtbWNfc2hvd19jb3Zlcl9zd2l0Y2gsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotbW1jX29tYXBfc2hvd19zbG90X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK29tYXBfaHNtbWNfc2hvd19zbG90X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtbWNfaG9zdCwgY2xhc3NfZGV2KTsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0Jc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSBzbG90ID0gaG9zdC0+cGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNsb3QubmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1tY19zbG90KGhvc3QpLm5hbWUpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoc2xvdF9uYW1lLCBTX0lSVUdPLCBtbWNfb21hcF9zaG93X3Nsb3RfbmFtZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc2xvdF9uYW1lLCBTX0lSVUdPLCBvbWFwX2hzbW1jX3Nob3dfc2xvdF9uYW1lLCBOVUxMKTsKIAogLyoKICAqIENvbmZpZ3VyZSB0aGUgcmVzcG9uc2UgdHlwZSBhbmQgc2VuZCB0aGUgY21kLgogICovCiBzdGF0aWMgdm9pZAotbW1jX29tYXBfc3RhcnRfY29tbWFuZChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQsCitvbWFwX2hzbW1jX3N0YXJ0X2NvbW1hbmQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQsCiAJc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWludCBjbWRyZWcgPSAwLCByZXNwdHlwZSA9IDAsIGNtZHR5cGUgPSAwOwpAQCAtMjQxLDcgKzQyOSwxMiBAQAogCSAqLwogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgU1RBVF9DTEVBUik7CiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJU0UsIElOVF9FTl9NQVNLKTsKLQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLCBJTlRfRU5fTUFTSyk7CisKKwlpZiAoaG9zdC0+dXNlX2RtYSkKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJRSwKKwkJCQkgSU5UX0VOX01BU0sgJiB+KEJSUl9FTkFCTEUgfCBCV1JfRU5BQkxFKSk7CisJZWxzZQorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLCBJTlRfRU5fTUFTSyk7CiAKIAlob3N0LT5yZXNwb25zZV9idXN5ID0gMDsKIAlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgewpAQCAtMjc1LDEyICs0NjgsMjAgQEAKIAlpZiAoaG9zdC0+dXNlX2RtYSkKIAkJY21kcmVnIHw9IERNQV9FTjsKIAorCS8qCisJICogSW4gYW4gaW50ZXJydXB0IGNvbnRleHQgKGkuZS4gU1RPUCBjb21tYW5kKSwgdGhlIHNwaW5sb2NrIGlzIHVubG9ja2VkCisJICogYnkgdGhlIGludGVycnVwdCBoYW5kbGVyLCBvdGhlcndpc2UgKGkuZS4gZm9yIGEgbmV3IHJlcXVlc3QpIGl0IGlzCisJICogdW5sb2NrZWQgaGVyZS4KKwkgKi8KKwlpZiAoIWluX2ludGVycnVwdCgpKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5pcnFfbG9jaywgaG9zdC0+ZmxhZ3MpOworCiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBBUkcsIGNtZC0+YXJnKTsKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENNRCwgY21kcmVnKTsKIH0KIAogc3RhdGljIGludAotbW1jX29tYXBfZ2V0X2RtYV9kaXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK29tYXBfaHNtbWNfZ2V0X2RtYV9kaXIoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQogCQlyZXR1cm4gRE1BX1RPX0RFVklDRTsKQEAgLTI5MiwxMSArNDkzLDE4IEBACiAgKiBOb3RpZnkgdGhlIHRyYW5zZmVyIGNvbXBsZXRlIHRvIE1NQyBjb3JlCiAgKi8KIHN0YXRpYyB2b2lkCi1tbWNfb21hcF94ZmVyX2RvbmUoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK29tYXBfaHNtbWNfeGZlcl9kb25lKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRhdGEpIHsKIAkJc3RydWN0IG1tY19yZXF1ZXN0ICptcnEgPSBob3N0LT5tcnE7CiAKKwkJLyogVEMgYmVmb3JlIENDIGZyb20gQ01ENiAtIGRvbid0IGtub3cgd2h5LCBidXQgaXQgaGFwcGVucyAqLworCQlpZiAoaG9zdC0+Y21kICYmIGhvc3QtPmNtZC0+b3Bjb2RlID09IDYgJiYKKwkJICAgIGhvc3QtPnJlc3BvbnNlX2J1c3kpIHsKKwkJCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAwOworCQkJcmV0dXJuOworCQl9CisKIAkJaG9zdC0+bXJxID0gTlVMTDsKIAkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7CiAJCXJldHVybjsKQEAgLTMwNiw3ICs1MTQsNyBAQAogCiAJaWYgKGhvc3QtPnVzZV9kbWEgJiYgaG9zdC0+ZG1hX2NoICE9IC0xKQogCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+ZG1hX2xlbiwKLQkJCW1tY19vbWFwX2dldF9kbWFfZGlyKGhvc3QsIGRhdGEpKTsKKwkJCW9tYXBfaHNtbWNfZ2V0X2RtYV9kaXIoaG9zdCwgZGF0YSkpOwogCiAJaWYgKCFkYXRhLT5lcnJvcikKIAkJZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IGRhdGEtPmJsb2NrcyAqIChkYXRhLT5ibGtzeik7CkBAIC0zMTgsMTQgKzUyNiwxNCBAQAogCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgZGF0YS0+bXJxKTsKIAkJcmV0dXJuOwogCX0KLQltbWNfb21hcF9zdGFydF9jb21tYW5kKGhvc3QsIGRhdGEtPnN0b3AsIE5VTEwpOworCW9tYXBfaHNtbWNfc3RhcnRfY29tbWFuZChob3N0LCBkYXRhLT5zdG9wLCBOVUxMKTsKIH0KIAogLyoKICAqIE5vdGlmeSB0aGUgY29yZSBhYm91dCBjb21tYW5kIGNvbXBsZXRpb24KICAqLwogc3RhdGljIHZvaWQKLW1tY19vbWFwX2NtZF9kb25lKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK29tYXBfaHNtbWNfY21kX2RvbmUoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCiB7CiAJaG9zdC0+Y21kID0gTlVMTDsKIApAQCAtMzUwLDEzICs1NTgsMTMgQEAKIC8qCiAgKiBETUEgY2xlYW4gdXAgZm9yIGNvbW1hbmQgZXJyb3JzCiAgKi8KLXN0YXRpYyB2b2lkIG1tY19kbWFfY2xlYW51cChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgaW50IGVycm5vKQorc3RhdGljIHZvaWQgb21hcF9oc21tY19kbWFfY2xlYW51cChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LCBpbnQgZXJybm8pCiB7CiAJaG9zdC0+ZGF0YS0+ZXJyb3IgPSBlcnJubzsKIAogCWlmIChob3N0LT51c2VfZG1hICYmIGhvc3QtPmRtYV9jaCAhPSAtMSkgewogCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5kYXRhLT5zZywgaG9zdC0+ZG1hX2xlbiwKLQkJCW1tY19vbWFwX2dldF9kbWFfZGlyKGhvc3QsIGhvc3QtPmRhdGEpKTsKKwkJCW9tYXBfaHNtbWNfZ2V0X2RtYV9kaXIoaG9zdCwgaG9zdC0+ZGF0YSkpOwogCQlvbWFwX2ZyZWVfZG1hKGhvc3QtPmRtYV9jaCk7CiAJCWhvc3QtPmRtYV9jaCA9IC0xOwogCQl1cCgmaG9zdC0+c2VtKTsKQEAgLTM2OCwxMCArNTc2LDEwIEBACiAgKiBSZWFkYWJsZSBlcnJvciBvdXRwdXQKICAqLwogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLXN0YXRpYyB2b2lkIG1tY19vbWFwX3JlcG9ydF9pcnEoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHUzMiBzdGF0dXMpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3JlcG9ydF9pcnEoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwgdTMyIHN0YXR1cykKIHsKIAkvKiAtLS0gbWVhbnMgcmVzZXJ2ZWQgYml0IHdpdGhvdXQgZGVmaW5pdGlvbiBhdCBkb2N1bWVudGF0aW9uICovCi0Jc3RhdGljIGNvbnN0IGNoYXIgKm1tY19vbWFwX3N0YXR1c19iaXRzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKm9tYXBfaHNtbWNfc3RhdHVzX2JpdHNbXSA9IHsKIAkJIkNDIiwgIlRDIiwgIkJHRSIsICItLS0iLCAiQldSIiwgIkJSUiIsICItLS0iLCAiLS0tIiwgIkNJUlEiLAogCQkiT0JJIiwgIi0tLSIsICItLS0iLCAiLS0tIiwgIi0tLSIsICItLS0iLCAiRVJSSSIsICJDVE8iLCAiQ0NSQyIsCiAJCSJDRUIiLCAiQ0lFIiwgIkRUTyIsICJEQ1JDIiwgIkRFQiIsICItLS0iLCAiQUNFIiwgIi0tLSIsCkBAIC0zODQsOSArNTkyLDkgQEAKIAlsZW4gPSBzcHJpbnRmKGJ1ZiwgIk1NQyBJUlEgMHgleCA6Iiwgc3RhdHVzKTsKIAlidWYgKz0gbGVuOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW1jX29tYXBfc3RhdHVzX2JpdHMpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9oc21tY19zdGF0dXNfYml0cyk7IGkrKykKIAkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7Ci0JCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiAlcyIsIG1tY19vbWFwX3N0YXR1c19iaXRzW2ldKTsKKwkJCWxlbiA9IHNwcmludGYoYnVmLCAiICVzIiwgb21hcF9oc21tY19zdGF0dXNfYml0c1tpXSk7CiAJCQlidWYgKz0gbGVuOwogCQl9CiAKQEAgLTQwMSw4ICs2MDksOCBAQAogICogIFNSQyBvciBTUkQgYml0IG9mIFNZU0NUTCByZWdpc3RlcgogICogQ2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0CiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtbWNfb21hcF9yZXNldF9jb250cm9sbGVyX2ZzbShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwKLQkJdW5zaWduZWQgbG9uZyBiaXQpCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9oc21tY19yZXNldF9jb250cm9sbGVyX2ZzbShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBiaXQpCiB7CiAJdW5zaWduZWQgbG9uZyBpID0gMDsKIAl1bnNpZ25lZCBsb25nIGxpbWl0ID0gKGxvb3BzX3Blcl9qaWZmeSAqCkBAIC00MjQsMTcgKzYzMiwyMCBAQAogLyoKICAqIE1NQyBjb250cm9sbGVyIElSUSBoYW5kbGVyCiAgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNfb21hcF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IG9tYXBfaHNtbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IGRldl9pZDsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2lkOwogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKIAlpbnQgZW5kX2NtZCA9IDAsIGVuZF90cmFucyA9IDAsIHN0YXR1czsKIAorCXNwaW5fbG9jaygmaG9zdC0+aXJxX2xvY2spOworCiAJaWYgKGhvc3QtPm1ycSA9PSBOVUxMKSB7CiAJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwKIAkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTVEFUKSk7CiAJCS8qIEZsdXNoIHBvc3RlZCB3cml0ZSAqLwogCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1RBVCk7CisJCXNwaW5fdW5sb2NrKCZob3N0LT5pcnFfbG9jayk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKQEAgLTQ0NCwxMyArNjU1LDE0IEBACiAKIAlpZiAoc3RhdHVzICYgRVJSKSB7CiAjaWZkZWYgQ09ORklHX01NQ19ERUJVRwotCQltbWNfb21hcF9yZXBvcnRfaXJxKGhvc3QsIHN0YXR1cyk7CisJCW9tYXBfaHNtbWNfcmVwb3J0X2lycShob3N0LCBzdGF0dXMpOwogI2VuZGlmCiAJCWlmICgoc3RhdHVzICYgQ01EX1RJTUVPVVQpIHx8CiAJCQkoc3RhdHVzICYgQ01EX0NSQykpIHsKIAkJCWlmIChob3N0LT5jbWQpIHsKIAkJCQlpZiAoc3RhdHVzICYgQ01EX1RJTUVPVVQpIHsKLQkJCQkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JDKTsKKwkJCQkJb21hcF9oc21tY19yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LAorCQkJCQkJCQkJU1JDKTsKIAkJCQkJaG9zdC0+Y21kLT5lcnJvciA9IC1FVElNRURPVVQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJaG9zdC0+Y21kLT5lcnJvciA9IC1FSUxTRVE7CkBAIC00NTksOSArNjcxLDEwIEBACiAJCQl9CiAJCQlpZiAoaG9zdC0+ZGF0YSB8fCBob3N0LT5yZXNwb25zZV9idXN5KSB7CiAJCQkJaWYgKGhvc3QtPmRhdGEpCi0JCQkJCW1tY19kbWFfY2xlYW51cChob3N0LCAtRVRJTUVET1VUKTsKKwkJCQkJb21hcF9oc21tY19kbWFfY2xlYW51cChob3N0LAorCQkJCQkJCQktRVRJTUVET1VUKTsKIAkJCQlob3N0LT5yZXNwb25zZV9idXN5ID0gMDsKLQkJCQltbWNfb21hcF9yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LCBTUkQpOworCQkJCW9tYXBfaHNtbWNfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKIAkJCX0KIAkJfQogCQlpZiAoKHN0YXR1cyAmIERBVEFfVElNRU9VVCkgfHwKQEAgLTQ3MSwxMSArNjg0LDExIEBACiAJCQkJCQktRVRJTUVET1VUIDogLUVJTFNFUTsKIAogCQkJCWlmIChob3N0LT5kYXRhKQotCQkJCQltbWNfZG1hX2NsZWFudXAoaG9zdCwgZXJyKTsKKwkJCQkJb21hcF9oc21tY19kbWFfY2xlYW51cChob3N0LCBlcnIpOwogCQkJCWVsc2UKIAkJCQkJaG9zdC0+bXJxLT5jbWQtPmVycm9yID0gZXJyOwogCQkJCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAwOwotCQkJCW1tY19vbWFwX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CisJCQkJb21hcF9oc21tY19yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LCBTUkQpOwogCQkJCWVuZF90cmFucyA9IDE7CiAJCQl9CiAJCX0KQEAgLTQ5NCwxNCArNzA3LDE2IEBACiAJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNUQVQpOwogCiAJaWYgKGVuZF9jbWQgfHwgKChzdGF0dXMgJiBDQykgJiYgaG9zdC0+Y21kKSkKLQkJbW1jX29tYXBfY21kX2RvbmUoaG9zdCwgaG9zdC0+Y21kKTsKLQlpZiAoZW5kX3RyYW5zIHx8IChzdGF0dXMgJiBUQykpCi0JCW1tY19vbWFwX3hmZXJfZG9uZShob3N0LCBkYXRhKTsKKwkJb21hcF9oc21tY19jbWRfZG9uZShob3N0LCBob3N0LT5jbWQpOworCWlmICgoZW5kX3RyYW5zIHx8IChzdGF0dXMgJiBUQykpICYmIGhvc3QtPm1ycSkKKwkJb21hcF9oc21tY194ZmVyX2RvbmUoaG9zdCwgZGF0YSk7CisKKwlzcGluX3VubG9jaygmaG9zdC0+aXJxX2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc2RfYnVzX3Bvd2VyKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgc2V0X3NkX2J1c19wb3dlcihzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQogewogCXVuc2lnbmVkIGxvbmcgaTsKIApAQCAtNTIxLDcgKzczNiw3IEBACiAgKiBUaGUgTU1DMiB0cmFuc2NlaXZlciBjb250cm9scyBhcmUgdXNlZCBpbnN0ZWFkIG9mIERBVDQuLkRBVDcuCiAgKiBTb21lIGNoaXBzLCBsaWtlIGVNTUMgb25lcywgdXNlIGludGVybmFsIHRyYW5zY2VpdmVycy4KICAqLwotc3RhdGljIGludCBvbWFwX21tY19zd2l0Y2hfb3Bjb25kKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBpbnQgdmRkKQorc3RhdGljIGludCBvbWFwX2hzbW1jX3N3aXRjaF9vcGNvbmQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwgaW50IHZkZCkKIHsKIAl1MzIgcmVnX3ZhbCA9IDA7CiAJaW50IHJldDsKQEAgLTUyOSwyMiArNzQ0LDI0IEBACiAJLyogRGlzYWJsZSB0aGUgY2xvY2tzICovCiAJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7Ci0JY2xrX2Rpc2FibGUoaG9zdC0+ZGJjbGspOworCWlmIChob3N0LT5nb3RfZGJjbGspCisJCWNsa19kaXNhYmxlKGhvc3QtPmRiY2xrKTsKIAogCS8qIFR1cm4gdGhlIHBvd2VyIG9mZiAqLwogCXJldCA9IG1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsIDApOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byBlcnI7CiAKIAkvKiBUdXJuIHRoZSBwb3dlciBPTiB3aXRoIGdpdmVuIFZERCAxLjggb3IgMy4wdiAqLwotCXJldCA9IG1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDEsIHZkZCk7CisJaWYgKCFyZXQpCisJCXJldCA9IG1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDEsCisJCQkJCSAgICAgICB2ZGQpOworCWNsa19lbmFibGUoaG9zdC0+aWNsayk7CisJY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKKwlpZiAoaG9zdC0+Z290X2RiY2xrKQorCQljbGtfZW5hYmxlKGhvc3QtPmRiY2xrKTsKKwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBlcnI7CiAKLQljbGtfZW5hYmxlKGhvc3QtPmZjbGspOwotCWNsa19lbmFibGUoaG9zdC0+aWNsayk7Ci0JY2xrX2VuYWJsZShob3N0LT5kYmNsayk7Ci0KIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCiAJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIFNEVlNDTFIpOwogCXJlZ192YWwgPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCk7CkBAIC01NTIsNyArNzY5LDcgQEAKIAkvKgogCSAqIElmIGEgTU1DIGR1YWwgdm9sdGFnZSBjYXJkIGlzIGRldGVjdGVkLCB0aGUgc2V0X2lvcyBmbiBjYWxscwogCSAqIHRoaXMgZm4gd2l0aCBWREQgYml0IHNldCBmb3IgMS44Vi4gVXBvbiBjYXJkIHJlbW92YWwgZnJvbSB0aGUKLQkgKiBzbG90LCBvbWFwX21tY19zZXRfaW9zIHNldHMgdGhlIFZERCBiYWNrIHRvIDNWIG9uIE1NQ19QT1dFUl9PRkYuCisJICogc2xvdCwgb21hcF9oc21tY19zZXRfaW9zIHNldHMgdGhlIFZERCBiYWNrIHRvIDNWIG9uIE1NQ19QT1dFUl9PRkYuCiAJICoKIAkgKiBDb3BlIHdpdGggYSBiaXQgb2Ygc2xvcCBpbiB0aGUgcmFuZ2UgLi4uIHBlciBkYXRhIHNoZWV0czoKIAkgKiAgLSAiMS44ViIgZm9yIHZkZHNfbW1jMS92ZGRzX21tYzFhIGNhbiBiZSB1cCB0byAyLjQ1ViBtYXgsCkBAIC01NzgsMjUgKzc5NSw1OSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIFByb3RlY3QgdGhlIGNhcmQgd2hpbGUgdGhlIGNvdmVyIGlzIG9wZW4gKi8KK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfcHJvdGVjdF9jYXJkKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJaWYgKCFtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUpCisJCXJldHVybjsKKworCWhvc3QtPnJlcXNfYmxvY2tlZCA9IDA7CisJaWYgKG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpKSB7CisJCWlmIChob3N0LT5wcm90ZWN0X2NhcmQpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb3ZlciBpcyBjbG9zZWQsICIKKwkJCQkJICJjYXJkIGlzIG5vdyBhY2Nlc3NpYmxlXG4iLAorCQkJCQkgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQkJaG9zdC0+cHJvdGVjdF9jYXJkID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghaG9zdC0+cHJvdGVjdF9jYXJkKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogY292ZXIgaXMgb3BlbiwgIgorCQkJCQkgImNhcmQgaXMgbm93IGluYWNjZXNzaWJsZVxuIiwKKwkJCQkJIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJCWhvc3QtPnByb3RlY3RfY2FyZCA9IDE7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBXb3JrIEl0ZW0gdG8gbm90aWZ5IHRoZSBjb3JlIGFib3V0IGNhcmQgaW5zZXJ0aW9uL3JlbW92YWwKICAqLwotc3RhdGljIHZvaWQgbW1jX29tYXBfZGV0ZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZGV0ZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbW1jX29tYXBfaG9zdCwKLQkJCQkJCW1tY19jYXJkZGV0ZWN0X3dvcmspOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9tYXBfaHNtbWNfaG9zdCwgbW1jX2NhcmRkZXRlY3Rfd29yayk7CiAJc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSAqc2xvdCA9ICZtbWNfc2xvdChob3N0KTsKKwlpbnQgY2FyZGRldGVjdDsKIAotCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCkKLQkJaG9zdC0+Y2FyZGRldGVjdCA9IHNsb3QtPmNhcmRfZGV0ZWN0KHNsb3QtPmNhcmRfZGV0ZWN0X2lycSk7Ci0JZWxzZQotCQlob3N0LT5jYXJkZGV0ZWN0ID0gLUVOT1NZUzsKKwlpZiAoaG9zdC0+c3VzcGVuZGVkKQorCQlyZXR1cm47CiAKIAlzeXNmc19ub3RpZnkoJmhvc3QtPm1tYy0+Y2xhc3NfZGV2LmtvYmosIE5VTEwsICJjb3Zlcl9zd2l0Y2giKTsKLQlpZiAoaG9zdC0+Y2FyZGRldGVjdCkgeworCisJaWYgKHNsb3QtPmNhcmRfZGV0ZWN0KQorCQljYXJkZGV0ZWN0ID0gc2xvdC0+Y2FyZF9kZXRlY3Qoc2xvdC0+Y2FyZF9kZXRlY3RfaXJxKTsKKwllbHNlIHsKKwkJb21hcF9oc21tY19wcm90ZWN0X2NhcmQoaG9zdCk7CisJCWNhcmRkZXRlY3QgPSAtRU5PU1lTOworCX0KKworCWlmIChjYXJkZGV0ZWN0KSB7CiAJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgKEhaICogMjAwKSAvIDEwMDApOwogCX0gZWxzZSB7Ci0JCW1tY19vbWFwX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CisJCW1tY19ob3N0X2VuYWJsZShob3N0LT5tbWMpOworCQlvbWFwX2hzbW1jX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CisJCW1tY19ob3N0X2xhenlfZGlzYWJsZShob3N0LT5tbWMpOworCiAJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgKEhaICogNTApIC8gMTAwMCk7CiAJfQogfQpAQCAtNjA0LDE2ICs4NTUsMTggQEAKIC8qCiAgKiBJU1IgZm9yIGhhbmRsaW5nIGNhcmQgaW5zZXJ0aW9uIGFuZCByZW1vdmFsCiAgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21tY19jZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX2hzbW1jX2NkX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gKHN0cnVjdCBtbWNfb21hcF9ob3N0ICopZGV2X2lkOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSAoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqKWRldl9pZDsKIAorCWlmIChob3N0LT5zdXNwZW5kZWQpCisJCXJldHVybiBJUlFfSEFORExFRDsKIAlzY2hlZHVsZV93b3JrKCZob3N0LT5tbWNfY2FyZGRldGVjdF93b3JrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBtbWNfb21hcF9nZXRfZG1hX3N5bmNfZGV2KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAorc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF9kbWFfc3luY19kZXYoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwKIAkJCQkgICAgIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAlpbnQgc3luY19kZXY7CkBAIC02MjUsNyArODc4LDcgQEAKIAlyZXR1cm4gc3luY19kZXY7CiB9CiAKLXN0YXRpYyB2b2lkIG1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW1zKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAorc3RhdGljIHZvaWQgb21hcF9oc21tY19jb25maWdfZG1hX3BhcmFtcyhzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAogCQkJCSAgICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEsCiAJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsKQogewpAQCAtNjM5LDcgKzg5Miw3IEBACiAJCQlzZ19kbWFfYWRkcmVzcyhzZ2wpLCAwLCAwKTsKIAl9IGVsc2UgewogCQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhkbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCQkoaG9zdC0+bWFwYmFzZSArIE9NQVBfSFNNTUNfREFUQSksIDAsIDApOworCQkJKGhvc3QtPm1hcGJhc2UgKyBPTUFQX0hTTU1DX0RBVEEpLCAwLCAwKTsKIAkJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCiAJCQlzZ19kbWFfYWRkcmVzcyhzZ2wpLCAwLCAwKTsKIAl9CkBAIC02NDksNyArOTAyLDcgQEAKIAogCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZG1hX2NoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAogCQkJYmxrc3ogLyA0LCBuYmxrLCBPTUFQX0RNQV9TWU5DX0ZSQU1FLAotCQkJbW1jX29tYXBfZ2V0X2RtYV9zeW5jX2Rldihob3N0LCBkYXRhKSwKKwkJCW9tYXBfaHNtbWNfZ2V0X2RtYV9zeW5jX2Rldihob3N0LCBkYXRhKSwKIAkJCSEoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkpOwogCiAJb21hcF9zdGFydF9kbWEoZG1hX2NoKTsKQEAgLTY1OCw5ICs5MTEsOSBAQAogLyoKICAqIERNQSBjYWxsIGJhY2sgZnVuY3Rpb24KICAqLwotc3RhdGljIHZvaWQgbW1jX29tYXBfZG1hX2NiKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2RtYV9jYihpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGF0YTsKIAogCWlmIChjaF9zdGF0dXMgJiBPTUFQMl9ETUFfTUlTQUxJR05FRF9FUlJfSVJRKQogCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1JU0FMSUdORURfQURSU19FUlJcbiIpOwpAQCAtNjcxLDcgKzkyNCw3IEBACiAJaG9zdC0+ZG1hX3NnX2lkeCsrOwogCWlmIChob3N0LT5kbWFfc2dfaWR4IDwgaG9zdC0+ZG1hX2xlbikgewogCQkvKiBGaXJlIHVwIHRoZSBuZXh0IHRyYW5zZmVyLiAqLwotCQltbWNfb21hcF9jb25maWdfZG1hX3BhcmFtcyhob3N0LCBob3N0LT5kYXRhLAorCQlvbWFwX2hzbW1jX2NvbmZpZ19kbWFfcGFyYW1zKGhvc3QsIGhvc3QtPmRhdGEsCiAJCQkJCSAgIGhvc3QtPmRhdGEtPnNnICsgaG9zdC0+ZG1hX3NnX2lkeCk7CiAJCXJldHVybjsKIAl9CkBAIC02ODgsMTQgKzk0MSwxNCBAQAogLyoKICAqIFJvdXRpbmUgdG8gY29uZmlndXJlIGFuZCBzdGFydCBETUEgZm9yIHRoZSBNTUMgY2FyZAogICovCi1zdGF0aWMgaW50Ci1tbWNfb21hcF9zdGFydF9kbWFfdHJhbnNmZXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBvbWFwX2hzbW1jX3N0YXJ0X2RtYV90cmFuc2ZlcihzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAorCQkJCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKIHsKIAlpbnQgZG1hX2NoID0gMCwgcmV0ID0gMCwgZXJyID0gMSwgaTsKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSByZXEtPmRhdGE7CiAKIAkvKiBTYW5pdHkgY2hlY2s6IGFsbCB0aGUgU0cgZW50cmllcyBtdXN0IGJlIGFsaWduZWQgYnkgYmxvY2sgc2l6ZS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+ZG1hX2xlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnNnX2xlbjsgaSsrKSB7CiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOwogCiAJCXNnbCA9IGRhdGEtPnNnICsgaTsKQEAgLTcyNiw4ICs5NzksOCBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXQgPSBvbWFwX3JlcXVlc3RfZG1hKG1tY19vbWFwX2dldF9kbWFfc3luY19kZXYoaG9zdCwgZGF0YSksICJNTUMvU0QiLAotCQkJICAgICAgIG1tY19vbWFwX2RtYV9jYixob3N0LCAmZG1hX2NoKTsKKwlyZXQgPSBvbWFwX3JlcXVlc3RfZG1hKG9tYXBfaHNtbWNfZ2V0X2RtYV9zeW5jX2Rldihob3N0LCBkYXRhKSwKKwkJCSAgICAgICAiTU1DL1NEIiwgb21hcF9oc21tY19kbWFfY2IsIGhvc3QsICZkbWFfY2gpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKIAkJCSIlczogb21hcF9yZXF1ZXN0X2RtYSgpIGZhaWxlZCB3aXRoICVkXG4iLApAQCAtNzM2LDE3ICs5ODksMTggQEAKIAl9CiAKIAlob3N0LT5kbWFfbGVuID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAotCQkJZGF0YS0+c2dfbGVuLCBtbWNfb21hcF9nZXRfZG1hX2Rpcihob3N0LCBkYXRhKSk7CisJCQlkYXRhLT5zZ19sZW4sIG9tYXBfaHNtbWNfZ2V0X2RtYV9kaXIoaG9zdCwgZGF0YSkpOwogCWhvc3QtPmRtYV9jaCA9IGRtYV9jaDsKIAlob3N0LT5kbWFfc2dfaWR4ID0gMDsKIAotCW1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW1zKGhvc3QsIGRhdGEsIGRhdGEtPnNnKTsKKwlvbWFwX2hzbW1jX2NvbmZpZ19kbWFfcGFyYW1zKGhvc3QsIGRhdGEsIGRhdGEtPnNnKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfZGF0YV90aW1lb3V0KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAotCQkJICAgICBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIHNldF9kYXRhX3RpbWVvdXQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHRpbWVvdXRfbnMsCisJCQkgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0X2Nsa3MpCiB7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQsIGN5Y2xlX25zOwogCXVpbnQzMl90IHJlZywgY2xrZCwgZHRvID0gMDsKQEAgLTc1Nyw4ICsxMDExLDggQEAKIAkJY2xrZCA9IDE7CiAKIAljeWNsZV9ucyA9IDEwMDAwMDAwMDAgLyAoY2xrX2dldF9yYXRlKGhvc3QtPmZjbGspIC8gY2xrZCk7Ci0JdGltZW91dCA9IHJlcS0+ZGF0YS0+dGltZW91dF9ucyAvIGN5Y2xlX25zOwotCXRpbWVvdXQgKz0gcmVxLT5kYXRhLT50aW1lb3V0X2Nsa3M7CisJdGltZW91dCA9IHRpbWVvdXRfbnMgLyBjeWNsZV9uczsKKwl0aW1lb3V0ICs9IHRpbWVvdXRfY2xrczsKIAlpZiAodGltZW91dCkgewogCQl3aGlsZSAoKHRpbWVvdXQgJiAweDgwMDAwMDAwKSA9PSAwKSB7CiAJCQlkdG8gKz0gMTsKQEAgLTc4NSwyMiArMTAzOSwyOCBAQAogICogQ29uZmlndXJlIGJsb2NrIGxlbmd0aCBmb3IgTU1DL1NEIGNhcmRzIGFuZCBpbml0aWF0ZSB0aGUgdHJhbnNmZXIuCiAgKi8KIHN0YXRpYyBpbnQKLW1tY19vbWFwX3ByZXBhcmVfZGF0YShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCitvbWFwX2hzbW1jX3ByZXBhcmVfZGF0YShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKIHsKIAlpbnQgcmV0OwogCWhvc3QtPmRhdGEgPSByZXEtPmRhdGE7CiAKIAlpZiAocmVxLT5kYXRhID09IE5VTEwpIHsKIAkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBCTEssIDApOworCQkvKgorCQkgKiBTZXQgYW4gYXJiaXRyYXJ5IDEwMG1zIGRhdGEgdGltZW91dCBmb3IgY29tbWFuZHMgd2l0aAorCQkgKiBidXN5IHNpZ25hbC4KKwkJICovCisJCWlmIChyZXEtPmNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0JVU1kpCisJCQlzZXRfZGF0YV90aW1lb3V0KGhvc3QsIDEwMDAwMDAwMFUsIDApOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEJMSywgKHJlcS0+ZGF0YS0+Ymxrc3opCiAJCQkJCXwgKHJlcS0+ZGF0YS0+YmxvY2tzIDw8IDE2KSk7Ci0Jc2V0X2RhdGFfdGltZW91dChob3N0LCByZXEpOworCXNldF9kYXRhX3RpbWVvdXQoaG9zdCwgcmVxLT5kYXRhLT50aW1lb3V0X25zLCByZXEtPmRhdGEtPnRpbWVvdXRfY2xrcyk7CiAKIAlpZiAoaG9zdC0+dXNlX2RtYSkgewotCQlyZXQgPSBtbWNfb21hcF9zdGFydF9kbWFfdHJhbnNmZXIoaG9zdCwgcmVxKTsKKwkJcmV0ID0gb21hcF9oc21tY19zdGFydF9kbWFfdHJhbnNmZXIoaG9zdCwgcmVxKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1NQyBzdGFydCBkbWEgZmFpbHVyZVxuIik7CiAJCQlyZXR1cm4gcmV0OwpAQCAtODEyLDM1ICsxMDcyLDkyIEBACiAvKgogICogUmVxdWVzdCBmdW5jdGlvbi4gZm9yIHJlYWQvd3JpdGUgb3BlcmF0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXBfbW1jX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgb21hcF9oc21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaW50IGVycjsKIAorCS8qCisJICogUHJldmVudCByYWNlcyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBiZWNhdXNlIG9mIHVuZXhwZWN0ZWQKKwkgKiBpbnRlcnJ1cHRzLCBidXQgbm90IGlmIHdlIGFyZSBhbHJlYWR5IGluIGludGVycnVwdCBjb250ZXh0IGkuZS4KKwkgKiByZXRyaWVzLgorCSAqLworCWlmICghaW5faW50ZXJydXB0KCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmlycV9sb2NrLCBob3N0LT5mbGFncyk7CisJCS8qCisJCSAqIFByb3RlY3QgdGhlIGNhcmQgZnJvbSBJL08gaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eQorCQkgKiBpdCBjYW4gYmUgcmVtb3ZlZC4KKwkJICovCisJCWlmIChob3N0LT5wcm90ZWN0X2NhcmQpIHsKKwkJCWlmIChob3N0LT5yZXFzX2Jsb2NrZWQgPCAzKSB7CisJCQkJLyoKKwkJCQkgKiBFbnN1cmUgdGhlIGNvbnRyb2xsZXIgaXMgbGVmdCBpbiBhIGNvbnNpc3RlbnQKKwkJCQkgKiBzdGF0ZSBieSByZXNldHRpbmcgdGhlIGNvbW1hbmQgYW5kIGRhdGEgc3RhdGUKKwkJCQkgKiBtYWNoaW5lcy4KKwkJCQkgKi8KKwkJCQlvbWFwX2hzbW1jX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CisJCQkJb21hcF9oc21tY19yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LCBTUkMpOworCQkJCWhvc3QtPnJlcXNfYmxvY2tlZCArPSAxOworCQkJfQorCQkJcmVxLT5jbWQtPmVycm9yID0gLUVCQURGOworCQkJaWYgKHJlcS0+ZGF0YSkKKwkJCQlyZXEtPmRhdGEtPmVycm9yID0gLUVCQURGOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+aXJxX2xvY2ssIGhvc3QtPmZsYWdzKTsKKwkJCW1tY19yZXF1ZXN0X2RvbmUobW1jLCByZXEpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKGhvc3QtPnJlcXNfYmxvY2tlZCkKKwkJCWhvc3QtPnJlcXNfYmxvY2tlZCA9IDA7CisJfQogCVdBUk5fT04oaG9zdC0+bXJxICE9IE5VTEwpOwogCWhvc3QtPm1ycSA9IHJlcTsKLQltbWNfb21hcF9wcmVwYXJlX2RhdGEoaG9zdCwgcmVxKTsKLQltbWNfb21hcF9zdGFydF9jb21tYW5kKGhvc3QsIHJlcS0+Y21kLCByZXEtPmRhdGEpOworCWVyciA9IG9tYXBfaHNtbWNfcHJlcGFyZV9kYXRhKGhvc3QsIHJlcSk7CisJaWYgKGVycikgeworCQlyZXEtPmNtZC0+ZXJyb3IgPSBlcnI7CisJCWlmIChyZXEtPmRhdGEpCisJCQlyZXEtPmRhdGEtPmVycm9yID0gZXJyOworCQlob3N0LT5tcnEgPSBOVUxMOworCQlpZiAoIWluX2ludGVycnVwdCgpKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+aXJxX2xvY2ssIGhvc3QtPmZsYWdzKTsKKwkJbW1jX3JlcXVlc3RfZG9uZShtbWMsIHJlcSk7CisJCXJldHVybjsKKwl9CisKKwlvbWFwX2hzbW1jX3N0YXJ0X2NvbW1hbmQoaG9zdCwgcmVxLT5jbWQsIHJlcS0+ZGF0YSk7CiB9CiAKLQogLyogUm91dGluZSB0byBjb25maWd1cmUgY2xvY2sgdmFsdWVzLiBFeHBvc2VkIEFQSSB0byBjb3JlICovCi1zdGF0aWMgdm9pZCBvbWFwX21tY19zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQorc3RhdGljIHZvaWQgb21hcF9oc21tY19zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAl1MTYgZHNvciA9IDA7CiAJdW5zaWduZWQgbG9uZyByZWd2YWw7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXUzMiBjb247CisJaW50IGRvX3NlbmRfaW5pdF9zdHJlYW0gPSAwOwogCi0Jc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKLQljYXNlIE1NQ19QT1dFUl9PRkY6Ci0JCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsIDApOwotCQlicmVhazsKLQljYXNlIE1NQ19QT1dFUl9VUDoKLQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMSwgaW9zLT52ZGQpOwotCQlicmVhazsKKwltbWNfaG9zdF9lbmFibGUoaG9zdC0+bW1jKTsKKworCWlmIChpb3MtPnBvd2VyX21vZGUgIT0gaG9zdC0+cG93ZXJfbW9kZSkgeworCQlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgeworCQljYXNlIE1NQ19QT1dFUl9PRkY6CisJCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLAorCQkJCQkJIDAsIDApOworCQkJaG9zdC0+dmRkID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19QT1dFUl9VUDoKKwkJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsCisJCQkJCQkgMSwgaW9zLT52ZGQpOworCQkJaG9zdC0+dmRkID0gaW9zLT52ZGQ7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfUE9XRVJfT046CisJCQlkb19zZW5kX2luaXRfc3RyZWFtID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWhvc3QtPnBvd2VyX21vZGUgPSBpb3MtPnBvd2VyX21vZGU7CiAJfQogCisJLyogRklYTUU6IHNldCByZWdpc3RlcnMgYmFzZWQgb25seSBvbiBjaGFuZ2VzIHRvIGlvcyAqLworCiAJY29uID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7CiAJc3dpdGNoIChtbWMtPmlvcy5idXNfd2lkdGgpIHsKIAljYXNlIE1NQ19CVVNfV0lEVEhfODoKQEAgLTg3MCw4ICsxMTg3LDggQEAKIAkJCQkgKiBNTUNfUE9XRVJfVVAgdXBvbiByZWNhbGN1bGF0aW5nIHRoZSB2b2x0YWdlLgogCQkJCSAqIHZkZCAxLjh2LgogCQkJCSAqLwotCQkJCWlmIChvbWFwX21tY19zd2l0Y2hfb3Bjb25kKGhvc3QsIGlvcy0+dmRkKSAhPSAwKQotCQkJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCWlmIChvbWFwX2hzbW1jX3N3aXRjaF9vcGNvbmQoaG9zdCwgaW9zLT52ZGQpICE9IDApCisJCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCiAJCQkJCQkiU3dpdGNoIG9wZXJhdGlvbiBmYWlsZWRcbiIpOwogCQl9CiAJfQpAQCAtODg3LDcgKzEyMDQsNyBAQAogCQlpZiAoZHNvciA+IDI1MCkKIAkJCWRzb3IgPSAyNTA7CiAJfQotCW9tYXBfbW1jX3N0b3BfY2xvY2soaG9zdCk7CisJb21hcF9oc21tY19zdG9wX2Nsb2NrKGhvc3QpOwogCXJlZ3ZhbCA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpOwogCXJlZ3ZhbCA9IHJlZ3ZhbCAmIH4oQ0xLRF9NQVNLKTsKIAlyZWd2YWwgPSByZWd2YWwgfCAoZHNvciA8PCA2KSB8IChEVE8gPDwgMTYpOwpAQCAtODk3LDQyICsxMjE0LDQ3IEBACiAKIAkvKiBXYWl0IHRpbGwgdGhlIElDUyBiaXQgaXMgc2V0ICovCiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1NQ19USU1FT1VUX01TKTsKLQl3aGlsZSAoKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpICYgSUNTKSAhPSAweDIKKwl3aGlsZSAoKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpICYgSUNTKSAhPSBJQ1MKIAkJJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCiAJCW1zbGVlcCgxKTsKIAogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ1RMLAogCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ1RMKSB8IENFTik7CiAKLQlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PTikKKwlpZiAoZG9fc2VuZF9pbml0X3N0cmVhbSkKIAkJc2VuZF9pbml0X3N0cmVhbShob3N0KTsKIAorCWNvbiA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDT04pOwogCWlmIChpb3MtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTikKLQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sCi0JCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTikgfCBPRCk7CisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gfCBPRCk7CisJZWxzZQorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uICYgfk9EKTsKKworCWlmIChob3N0LT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCisJCW1tY19ob3N0X2Rpc2FibGUoaG9zdC0+bW1jKTsKKwllbHNlCisJCW1tY19ob3N0X2xhenlfZGlzYWJsZShob3N0LT5tbWMpOwogfQogCiBzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBob3N0LT5wZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCWlmICghcGRhdGEtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0KQorCWlmICghbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QpCiAJCXJldHVybiAtRU5PU1lTOwotCXJldHVybiBwZGF0YS0+c2xvdHNbMF0uY2FyZF9kZXRlY3QocGRhdGEtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSk7CisJcmV0dXJuIG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JaWYgKCFwZGF0YS0+c2xvdHNbMF0uZ2V0X3JvKQorCWlmICghbW1jX3Nsb3QoaG9zdCkuZ2V0X3JvKQogCQlyZXR1cm4gLUVOT1NZUzsKLQlyZXR1cm4gcGRhdGEtPnNsb3RzWzBdLmdldF9ybyhob3N0LT5kZXYsIDApOworCXJldHVybiBtbWNfc2xvdChob3N0KS5nZXRfcm8oaG9zdC0+ZGV2LCAwKTsKIH0KIAotc3RhdGljIHZvaWQgb21hcF9oc21tY19pbml0KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgb21hcF9oc21tY19jb25mX2J1c19wb3dlcihzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQogewogCXUzMiBoY3RsLCBjYXBhLCB2YWx1ZTsKIApAQCAtOTU5LDE5ICsxMjgxLDM0MCBAQAogCXNldF9zZF9idXNfcG93ZXIoaG9zdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19vbWFwX29wcyA9IHsKLQkucmVxdWVzdCA9IG9tYXBfbW1jX3JlcXVlc3QsCi0JLnNldF9pb3MgPSBvbWFwX21tY19zZXRfaW9zLAorLyoKKyAqIER5bmFtaWMgcG93ZXIgc2F2aW5nIGhhbmRsaW5nLCBGU006CisgKiAgIEVOQUJMRUQgLT4gRElTQUJMRUQgLT4gQ0FSRFNMRUVQIC8gUkVHU0xFRVAgLT4gT0ZGCisgKiAgICAgXl9fX19fX19fX19ffCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8X19fX19fX19fX19fX19fX19fX19fX3xfX19fX19fX19fX19fX19fX19fX19ffAorICoKKyAqIEVOQUJMRUQ6ICAgbW1jIGhvc3QgaXMgZnVsbHkgZnVuY3Rpb25hbAorICogRElTQUJMRUQ6ICBmY2xrIGlzIG9mZgorICogQ0FSRFNMRUVQOiBmY2xrIGlzIG9mZiwgY2FyZCBpcyBhc2xlZXAsIHZvbHRhZ2UgcmVndWxhdG9yIGlzIGFzbGVlcAorICogUkVHU0xFRVA6ICBmY2xrIGlzIG9mZiwgdm9sdGFnZSByZWd1bGF0b3IgaXMgYXNsZWVwCisgKiBPRkY6ICAgICAgIGZjbGsgaXMgb2ZmLCB2b2x0YWdlIHJlZ3VsYXRvciBpcyBvZmYKKyAqCisgKiBUcmFuc2l0aW9uIGhhbmRsZXJzIHJldHVybiB0aGUgdGltZW91dCBmb3IgdGhlIG5leHQgc3RhdGUgdHJhbnNpdGlvbgorICogb3IgbmVnYXRpdmUgZXJyb3IuCisgKi8KKworZW51bSB7RU5BQkxFRCA9IDAsIERJU0FCTEVELCBDQVJEU0xFRVAsIFJFR1NMRUVQLCBPRkZ9OworCisvKiBIYW5kbGVyIGZvciBbRU5BQkxFRCAtPiBESVNBQkxFRF0gdHJhbnNpdGlvbiAqLworc3RhdGljIGludCBvbWFwX2hzbW1jX2VuYWJsZWRfdG9fZGlzYWJsZWQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlvbWFwX2hzbW1jX2NvbnRleHRfc2F2ZShob3N0KTsKKwljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKKwlob3N0LT5kcG1fc3RhdGUgPSBESVNBQkxFRDsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRU5BQkxFRCAtPiBESVNBQkxFRFxuIik7CisKKwlpZiAoaG9zdC0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtc2Vjc190b19qaWZmaWVzKE9NQVBfTU1DX1NMRUVQX1RJTUVPVVQpOworfQorCisvKiBIYW5kbGVyIGZvciBbRElTQUJMRUQgLT4gUkVHU0xFRVAgLyBDQVJEU0xFRVBdIHRyYW5zaXRpb24gKi8KK3N0YXRpYyBpbnQgb21hcF9oc21tY19kaXNhYmxlZF90b19zbGVlcChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCWludCBlcnIsIG5ld19zdGF0ZTsKKworCWlmICghbW1jX3RyeV9jbGFpbV9ob3N0KGhvc3QtPm1tYykpCisJCXJldHVybiAwOworCisJY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKKwlvbWFwX2hzbW1jX2NvbnRleHRfcmVzdG9yZShob3N0KTsKKwlpZiAobW1jX2NhcmRfY2FuX3NsZWVwKGhvc3QtPm1tYykpIHsKKwkJZXJyID0gbW1jX2NhcmRfc2xlZXAoaG9zdC0+bW1jKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCQkJbW1jX3JlbGVhc2VfaG9zdChob3N0LT5tbWMpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQluZXdfc3RhdGUgPSBDQVJEU0xFRVA7CisJfSBlbHNlIHsKKwkJbmV3X3N0YXRlID0gUkVHU0xFRVA7CisJfQorCWlmIChtbWNfc2xvdChob3N0KS5zZXRfc2xlZXApCisJCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcChob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDEsIDAsCisJCQkJCSBuZXdfc3RhdGUgPT0gQ0FSRFNMRUVQKTsKKwkvKiBGSVhNRTogdHVybiBvZmYgYnVzIHBvd2VyIGFuZCBwZXJoYXBzIGludGVycnVwdHMgdG9vICovCisJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CisJaG9zdC0+ZHBtX3N0YXRlID0gbmV3X3N0YXRlOworCisJbW1jX3JlbGVhc2VfaG9zdChob3N0LT5tbWMpOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJESVNBQkxFRCAtPiAlc1xuIiwKKwkJaG9zdC0+ZHBtX3N0YXRlID09IENBUkRTTEVFUCA/ICJDQVJEU0xFRVAiIDogIlJFR1NMRUVQIik7CisKKwlpZiAoKGhvc3QtPm1tYy0+Y2FwcyAmIE1NQ19DQVBfTk9OUkVNT1ZBQkxFKSB8fAorCSAgICBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCB8fAorCSAgICAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlICYmCisJICAgICBtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKSkpCisJCXJldHVybiBtc2Vjc190b19qaWZmaWVzKE9NQVBfTU1DX09GRl9USU1FT1VUKTsKKworCXJldHVybiAwOworfQorCisvKiBIYW5kbGVyIGZvciBbUkVHU0xFRVAgLyBDQVJEU0xFRVAgLT4gT0ZGXSB0cmFuc2l0aW9uICovCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfc2xlZXBfdG9fb2ZmKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJaWYgKCFtbWNfdHJ5X2NsYWltX2hvc3QoaG9zdC0+bW1jKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoISgoaG9zdC0+bW1jLT5jYXBzICYgTU1DX0NBUF9OT05SRU1PVkFCTEUpIHx8CisJICAgICAgbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QgfHwKKwkgICAgICAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlICYmCisJICAgICAgIG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpKSkpIHsKKwkJbW1jX3JlbGVhc2VfaG9zdChob3N0LT5tbWMpOworCQlyZXR1cm4gMDsKKwl9CisKKwltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAwLCAwKTsKKwlob3N0LT52ZGQgPSAwOworCWhvc3QtPnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfT0ZGOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlcyAtPiBPRkZcbiIsCisJCWhvc3QtPmRwbV9zdGF0ZSA9PSBDQVJEU0xFRVAgPyAiQ0FSRFNMRUVQIiA6ICJSRUdTTEVFUCIpOworCisJaG9zdC0+ZHBtX3N0YXRlID0gT0ZGOworCisJbW1jX3JlbGVhc2VfaG9zdChob3N0LT5tbWMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEhhbmRsZXIgZm9yIFtESVNBQkxFRCAtPiBFTkFCTEVEXSB0cmFuc2l0aW9uICovCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZGlzYWJsZWRfdG9fZW5hYmxlZChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCWludCBlcnI7CisKKwllcnIgPSBjbGtfZW5hYmxlKGhvc3QtPmZjbGspOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJb21hcF9oc21tY19jb250ZXh0X3Jlc3RvcmUoaG9zdCk7CisJaG9zdC0+ZHBtX3N0YXRlID0gRU5BQkxFRDsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRElTQUJMRUQgLT4gRU5BQkxFRFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogSGFuZGxlciBmb3IgW1NMRUVQIC0+IEVOQUJMRURdIHRyYW5zaXRpb24gKi8KK3N0YXRpYyBpbnQgb21hcF9oc21tY19zbGVlcF90b19lbmFibGVkKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJaWYgKCFtbWNfdHJ5X2NsYWltX2hvc3QoaG9zdC0+bW1jKSkKKwkJcmV0dXJuIDA7CisKKwljbGtfZW5hYmxlKGhvc3QtPmZjbGspOworCW9tYXBfaHNtbWNfY29udGV4dF9yZXN0b3JlKGhvc3QpOworCWlmIChtbWNfc2xvdChob3N0KS5zZXRfc2xlZXApCisJCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcChob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsCisJCQkgaG9zdC0+dmRkLCBob3N0LT5kcG1fc3RhdGUgPT0gQ0FSRFNMRUVQKTsKKwlpZiAobW1jX2NhcmRfY2FuX3NsZWVwKGhvc3QtPm1tYykpCisJCW1tY19jYXJkX2F3YWtlKGhvc3QtPm1tYyk7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzIC0+IEVOQUJMRURcbiIsCisJCWhvc3QtPmRwbV9zdGF0ZSA9PSBDQVJEU0xFRVAgPyAiQ0FSRFNMRUVQIiA6ICJSRUdTTEVFUCIpOworCisJaG9zdC0+ZHBtX3N0YXRlID0gRU5BQkxFRDsKKworCW1tY19yZWxlYXNlX2hvc3QoaG9zdC0+bW1jKTsKKworCXJldHVybiAwOworfQorCisvKiBIYW5kbGVyIGZvciBbT0ZGIC0+IEVOQUJMRURdIHRyYW5zaXRpb24gKi8KK3N0YXRpYyBpbnQgb21hcF9oc21tY19vZmZfdG9fZW5hYmxlZChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCWNsa19lbmFibGUoaG9zdC0+ZmNsayk7CisKKwlvbWFwX2hzbW1jX2NvbnRleHRfcmVzdG9yZShob3N0KTsKKwlvbWFwX2hzbW1jX2NvbmZfYnVzX3Bvd2VyKGhvc3QpOworCW1tY19wb3dlcl9yZXN0b3JlX2hvc3QoaG9zdC0+bW1jKTsKKworCWhvc3QtPmRwbV9zdGF0ZSA9IEVOQUJMRUQ7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk9GRiAtPiBFTkFCTEVEXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQnJpbmcgTU1DIGhvc3QgdG8gRU5BQkxFRCBmcm9tIGFueSBvdGhlciBQTSBzdGF0ZS4KKyAqLworc3RhdGljIGludCBvbWFwX2hzbW1jX2VuYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCXN3aXRjaCAoaG9zdC0+ZHBtX3N0YXRlKSB7CisJY2FzZSBESVNBQkxFRDoKKwkJcmV0dXJuIG9tYXBfaHNtbWNfZGlzYWJsZWRfdG9fZW5hYmxlZChob3N0KTsKKwljYXNlIENBUkRTTEVFUDoKKwljYXNlIFJFR1NMRUVQOgorCQlyZXR1cm4gb21hcF9oc21tY19zbGVlcF90b19lbmFibGVkKGhvc3QpOworCWNhc2UgT0ZGOgorCQlyZXR1cm4gb21hcF9oc21tY19vZmZfdG9fZW5hYmxlZChob3N0KTsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVOS05PV04gc3RhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiBCcmluZyBNTUMgaG9zdCBpbiBQTSBzdGF0ZSAob25lIGxldmVsIGRlZXBlcikuCisgKi8KK3N0YXRpYyBpbnQgb21hcF9oc21tY19kaXNhYmxlKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgbGF6eSkKK3sKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCXN3aXRjaCAoaG9zdC0+ZHBtX3N0YXRlKSB7CisJY2FzZSBFTkFCTEVEOiB7CisJCWludCBkZWxheTsKKworCQlkZWxheSA9IG9tYXBfaHNtbWNfZW5hYmxlZF90b19kaXNhYmxlZChob3N0KTsKKwkJaWYgKGxhenkgfHwgZGVsYXkgPCAwKQorCQkJcmV0dXJuIGRlbGF5OworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBESVNBQkxFRDoKKwkJcmV0dXJuIG9tYXBfaHNtbWNfZGlzYWJsZWRfdG9fc2xlZXAoaG9zdCk7CisJY2FzZSBDQVJEU0xFRVA6CisJY2FzZSBSRUdTTEVFUDoKKwkJcmV0dXJuIG9tYXBfaHNtbWNfc2xlZXBfdG9fb2ZmKGhvc3QpOworCWRlZmF1bHQ6CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiVU5LTk9XTiBzdGF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBvbWFwX2hzbW1jX2VuYWJsZV9mY2xrKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCWludCBlcnI7CisKKwllcnIgPSBjbGtfZW5hYmxlKGhvc3QtPmZjbGspOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJtbWNfZmNsazogZW5hYmxlZFxuIik7CisJb21hcF9oc21tY19jb250ZXh0X3Jlc3RvcmUoaG9zdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19kaXNhYmxlX2ZjbGsoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBsYXp5KQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJb21hcF9oc21tY19jb250ZXh0X3NhdmUoaG9zdCk7CisJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJtbWNfZmNsazogZGlzYWJsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBvbWFwX2hzbW1jX29wcyA9IHsKKwkuZW5hYmxlID0gb21hcF9oc21tY19lbmFibGVfZmNsaywKKwkuZGlzYWJsZSA9IG9tYXBfaHNtbWNfZGlzYWJsZV9mY2xrLAorCS5yZXF1ZXN0ID0gb21hcF9oc21tY19yZXF1ZXN0LAorCS5zZXRfaW9zID0gb21hcF9oc21tY19zZXRfaW9zLAogCS5nZXRfY2QgPSBvbWFwX2hzbW1jX2dldF9jZCwKIAkuZ2V0X3JvID0gb21hcF9oc21tY19nZXRfcm8sCiAJLyogTllFVCAtLSBlbmFibGVfc2Rpb19pcnEgKi8KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXBfbW1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBvbWFwX2hzbW1jX3BzX29wcyA9IHsKKwkuZW5hYmxlID0gb21hcF9oc21tY19lbmFibGUsCisJLmRpc2FibGUgPSBvbWFwX2hzbW1jX2Rpc2FibGUsCisJLnJlcXVlc3QgPSBvbWFwX2hzbW1jX3JlcXVlc3QsCisJLnNldF9pb3MgPSBvbWFwX2hzbW1jX3NldF9pb3MsCisJLmdldF9jZCA9IG9tYXBfaHNtbWNfZ2V0X2NkLAorCS5nZXRfcm8gPSBvbWFwX2hzbW1jX2dldF9ybywKKwkvKiBOWUVUIC0tIGVuYWJsZV9zZGlvX2lycSAqLworfTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHMtPnByaXZhdGU7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaW50IGNvbnRleHRfbG9zcyA9IDA7CisKKwlpZiAoaG9zdC0+cGRhdGEtPmdldF9jb250ZXh0X2xvc3NfY291bnQpCisJCWNvbnRleHRfbG9zcyA9IGhvc3QtPnBkYXRhLT5nZXRfY29udGV4dF9sb3NzX2NvdW50KGhvc3QtPmRldik7CisKKwlzZXFfcHJpbnRmKHMsICJtbWMlZDpcbiIKKwkJCSIgZW5hYmxlZDpcdCVkXG4iCisJCQkiIGRwbV9zdGF0ZTpcdCVkXG4iCisJCQkiIG5lc3RpbmdfY250Olx0JWRcbiIKKwkJCSIgY3R4X2xvc3M6XHQlZDolZFxuIgorCQkJIlxucmVnczpcbiIsCisJCQltbWMtPmluZGV4LCBtbWMtPmVuYWJsZWQgPyAxIDogMCwKKwkJCWhvc3QtPmRwbV9zdGF0ZSwgbW1jLT5uZXN0aW5nX2NudCwKKwkJCWhvc3QtPmNvbnRleHRfbG9zcywgY29udGV4dF9sb3NzKTsKKworCWlmIChob3N0LT5zdXNwZW5kZWQgfHwgaG9zdC0+ZHBtX3N0YXRlID09IE9GRikgeworCQlzZXFfcHJpbnRmKHMsICJob3N0IHN1c3BlbmRlZCwgY2FuJ3QgcmVhZCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY2xrX2VuYWJsZShob3N0LT5mY2xrKSAhPSAwKSB7CisJCXNlcV9wcmludGYocywgImNhbid0IHJlYWQgdGhlIHJlZ3NcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKHMsICJTWVNDT05GSUc6XHQweCUwOHhcbiIsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ09ORklHKSk7CisJc2VxX3ByaW50ZihzLCAiQ09OOlx0XHQweCUwOHhcbiIsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKSk7CisJc2VxX3ByaW50ZihzLCAiSENUTDpcdFx0MHglMDh4XG4iLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpKTsKKwlzZXFfcHJpbnRmKHMsICJTWVNDVEw6XHRcdDB4JTA4eFxuIiwKKwkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpKTsKKwlzZXFfcHJpbnRmKHMsICJJRTpcdFx0MHglMDh4XG4iLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIElFKSk7CisJc2VxX3ByaW50ZihzLCAiSVNFOlx0XHQweCUwOHhcbiIsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSVNFKSk7CisJc2VxX3ByaW50ZihzLCAiQ0FQQTpcdFx0MHglMDh4XG4iLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENBUEEpKTsKKworCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG9tYXBfaHNtbWNfcmVnc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW1jX3JlZ3NfZm9wcyA9IHsKKwkub3BlbiAgICAgICAgICAgPSBvbWFwX2hzbW1jX3JlZ3Nfb3BlbiwKKwkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgICAgICAgID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2RlYnVnZnMoc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJaWYgKG1tYy0+ZGVidWdmc19yb290KQorCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdzIiwgU19JUlVTUiwgbW1jLT5kZWJ1Z2ZzX3Jvb3QsCisJCQltbWMsICZtbWNfcmVnc19mb3BzKTsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgb21hcF9oc21tY19kZWJ1Z2ZzKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworfQorCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgb21hcF9oc21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gTlVMTDsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0ID0gMCwgaXJxOwogCkBAIC05OTUsNyArMTYzOCw3IEBACiAJaWYgKHJlcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtbWNfb21hcF9ob3N0KSwgJnBkZXYtPmRldik7CisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjsKQEAgLTEwMTMsMTUgKzE2NTYsMjEgQEAKIAlob3N0LT5zbG90X2lkCT0gMDsKIAlob3N0LT5tYXBiYXNlCT0gcmVzLT5zdGFydDsKIAlob3N0LT5iYXNlCT0gaW9yZW1hcChob3N0LT5tYXBiYXNlLCBTWl80Syk7CisJaG9zdC0+cG93ZXJfbW9kZSA9IC0xOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7Ci0JSU5JVF9XT1JLKCZob3N0LT5tbWNfY2FyZGRldGVjdF93b3JrLCBtbWNfb21hcF9kZXRlY3QpOworCUlOSVRfV09SSygmaG9zdC0+bW1jX2NhcmRkZXRlY3Rfd29yaywgb21hcF9oc21tY19kZXRlY3QpOwogCi0JbW1jLT5vcHMJPSAmbW1jX29tYXBfb3BzOworCWlmIChtbWNfc2xvdChob3N0KS5wb3dlcl9zYXZpbmcpCisJCW1tYy0+b3BzCT0gJm9tYXBfaHNtbWNfcHNfb3BzOworCWVsc2UKKwkJbW1jLT5vcHMJPSAmb21hcF9oc21tY19vcHM7CisKIAltbWMtPmZfbWluCT0gNDAwMDAwOwogCW1tYy0+Zl9tYXgJPSA1MjAwMDAwMDsKIAogCXNlbWFfaW5pdCgmaG9zdC0+c2VtLCAxKTsKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+aXJxX2xvY2spOwogCiAJaG9zdC0+aWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwogCWlmIChJU19FUlIoaG9zdC0+aWNsaykpIHsKQEAgLTEwMzcsMzEgKzE2ODYsNDIgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCWlmIChjbGtfZW5hYmxlKGhvc3QtPmZjbGspICE9IDApIHsKKwlvbWFwX2hzbW1jX2NvbnRleHRfc2F2ZShob3N0KTsKKworCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX0RJU0FCTEU7CisJbW1jX3NldF9kaXNhYmxlX2RlbGF5KG1tYywgT01BUF9NTUNfRElTQUJMRURfVElNRU9VVCk7CisJLyogd2Ugc3RhcnQgb2ZmIGluIERJU0FCTEVEIHN0YXRlICovCisJaG9zdC0+ZHBtX3N0YXRlID0gRElTQUJMRUQ7CisKKwlpZiAobW1jX2hvc3RfZW5hYmxlKGhvc3QtPm1tYykgIT0gMCkgewogCQljbGtfcHV0KGhvc3QtPmljbGspOwogCQljbGtfcHV0KGhvc3QtPmZjbGspOwogCQlnb3RvIGVycjE7CiAJfQogCiAJaWYgKGNsa19lbmFibGUoaG9zdC0+aWNsaykgIT0gMCkgewotCQljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKKwkJbW1jX2hvc3RfZGlzYWJsZShob3N0LT5tbWMpOwogCQljbGtfcHV0KGhvc3QtPmljbGspOwogCQljbGtfcHV0KGhvc3QtPmZjbGspOwogCQlnb3RvIGVycjE7CiAJfQogCi0JaG9zdC0+ZGJjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNoc2RiX2ZjayIpOwotCS8qCi0JICogTU1DIGNhbiBzdGlsbCB3b3JrIHdpdGhvdXQgZGVib3VuY2UgY2xvY2suCi0JICovCi0JaWYgKElTX0VSUihob3N0LT5kYmNsaykpCi0JCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgIkZhaWxlZCB0byBnZXQgZGVib3VuY2UgY2xvY2tcbiIpOwotCWVsc2UKLQkJaWYgKGNsa19lbmFibGUoaG9zdC0+ZGJjbGspICE9IDApCi0JCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkVuYWJsaW5nIGRlYm91bmNlIgotCQkJCQkJCSIgY2xrIGZhaWxlZFxuIik7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCWhvc3QtPmRiY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jaHNkYl9mY2siKTsKKwkJLyoKKwkJICogTU1DIGNhbiBzdGlsbCB3b3JrIHdpdGhvdXQgZGVib3VuY2UgY2xvY2suCisJCSAqLworCQlpZiAoSVNfRVJSKGhvc3QtPmRiY2xrKSkKKwkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkiRmFpbGVkIHRvIGdldCBkZWJvdW5jZSBjbG9ja1xuIik7CiAJCWVsc2UKLQkJCWhvc3QtPmRiY2xrX2VuYWJsZWQgPSAxOworCQkJaG9zdC0+Z290X2RiY2xrID0gMTsKKworCQlpZiAoaG9zdC0+Z290X2RiY2xrKQorCQkJaWYgKGNsa19lbmFibGUoaG9zdC0+ZGJjbGspICE9IDApCisJCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJFbmFibGluZyBkZWJvdW5jZSIKKwkJCQkJCQkiIGNsayBmYWlsZWRcbiIpOworCX0KIAogCS8qIFNpbmNlIHdlIGRvIG9ubHkgU0cgZW11bGF0aW9uLCB3ZSBjYW4gaGF2ZSBhcyBtYW55IHNlZ3MKIAkgKiBhcyB3ZSB3YW50LiAqLwpAQCAtMTA3MywxNCArMTczMywxOCBAQAogCW1tYy0+bWF4X3JlcV9zaXplID0gbW1jLT5tYXhfYmxrX3NpemUgKiBtbWMtPm1heF9ibGtfY291bnQ7CiAJbW1jLT5tYXhfc2VnX3NpemUgPSBtbWMtPm1heF9yZXFfc2l6ZTsKIAotCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRDsKKwltbWMtPmNhcHMgfD0gTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQgfAorCQkgICAgIE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZOwogCi0JaWYgKHBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS53aXJlcyA+PSA4KQorCWlmIChtbWNfc2xvdChob3N0KS53aXJlcyA+PSA4KQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF84X0JJVF9EQVRBOwotCWVsc2UgaWYgKHBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS53aXJlcyA+PSA0KQorCWVsc2UgaWYgKG1tY19zbG90KGhvc3QpLndpcmVzID49IDQpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKLQlvbWFwX2hzbW1jX2luaXQoaG9zdCk7CisJaWYgKG1tY19zbG90KGhvc3QpLm5vbnJlbW92YWJsZSkKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFOworCisJb21hcF9oc21tY19jb25mX2J1c19wb3dlcihob3N0KTsKIAogCS8qIFNlbGVjdCBETUEgbGluZXMgKi8KIAlzd2l0Y2ggKGhvc3QtPmlkKSB7CkBAIC0xMDk2LDEzICsxNzYwLDIxIEBACiAJCWhvc3QtPmRtYV9saW5lX3R4ID0gT01BUDM0WFhfRE1BX01NQzNfVFg7CiAJCWhvc3QtPmRtYV9saW5lX3J4ID0gT01BUDM0WFhfRE1BX01NQzNfUlg7CiAJCWJyZWFrOworCWNhc2UgT01BUF9NTUM0X0RFVklEOgorCQlob3N0LT5kbWFfbGluZV90eCA9IE9NQVA0NFhYX0RNQV9NTUM0X1RYOworCQlob3N0LT5kbWFfbGluZV9yeCA9IE9NQVA0NFhYX0RNQV9NTUM0X1JYOworCQlicmVhazsKKwljYXNlIE9NQVBfTU1DNV9ERVZJRDoKKwkJaG9zdC0+ZG1hX2xpbmVfdHggPSBPTUFQNDRYWF9ETUFfTU1DNV9UWDsKKwkJaG9zdC0+ZG1hX2xpbmVfcnggPSBPTUFQNDRYWF9ETUFfTU1DNV9SWDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJJbnZhbGlkIE1NQyBpZFxuIik7CiAJCWdvdG8gZXJyX2lycTsKIAl9CiAKIAkvKiBSZXF1ZXN0IElSUSBmb3IgTU1DIG9wZXJhdGlvbnMgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIG1tY19vbWFwX2lycSwgSVJRRl9ESVNBQkxFRCwKKwlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIG9tYXBfaHNtbWNfaXJxLCBJUlFGX0RJU0FCTEVELAogCQkJbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpOwogCWlmIChyZXQpIHsKIAkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJVbmFibGUgdG8gZ3JhYiBIU01NQyBJUlFcbiIpOwpAQCAtMTExMiw3ICsxNzg0LDggQEAKIAkvKiBpbml0aWFsaXplIHBvd2VyIHN1cHBsaWVzLCBncGlvcywgZXRjICovCiAJaWYgKHBkYXRhLT5pbml0ICE9IE5VTEwpIHsKIAkJaWYgKHBkYXRhLT5pbml0KCZwZGV2LT5kZXYpICE9IDApIHsKLQkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAibGF0ZSBpbml0IGVycm9yXG4iKTsKKwkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAorCQkJCSJVbmFibGUgdG8gY29uZmlndXJlIE1NQyBJUlFzXG4iKTsKIAkJCWdvdG8gZXJyX2lycV9jZF9pbml0OwogCQl9CiAJfQpAQCAtMTEyMSw3ICsxNzk0LDcgQEAKIAkvKiBSZXF1ZXN0IElSUSBmb3IgY2FyZCBkZXRlY3QgKi8KIAlpZiAoKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSkpIHsKIAkJcmV0ID0gcmVxdWVzdF9pcnEobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxLAotCQkJCSAgb21hcF9tbWNfY2RfaGFuZGxlciwKKwkJCQkgIG9tYXBfaHNtbWNfY2RfaGFuZGxlciwKIAkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORwogCQkJCQkgIHwgSVJRRl9ESVNBQkxFRCwKIAkJCQkgIG1tY19ob3N0bmFtZShtbWMpLCBob3N0KTsKQEAgLTExMzUsMjEgKzE4MDgsMjYgQEAKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElTRSwgSU5UX0VOX01BU0spOwogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIElOVF9FTl9NQVNLKTsKIAorCW1tY19ob3N0X2xhenlfZGlzYWJsZShob3N0LT5tbWMpOworCisJb21hcF9oc21tY19wcm90ZWN0X2NhcmQoaG9zdCk7CisKIAltbWNfYWRkX2hvc3QobW1jKTsKIAotCWlmIChob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0ubmFtZSAhPSBOVUxMKSB7CisJaWYgKG1tY19zbG90KGhvc3QpLm5hbWUgIT0gTlVMTCkgewogCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LCAmZGV2X2F0dHJfc2xvdF9uYW1lKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9zbG90X25hbWU7CiAJfQotCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEgJiYKLQkgICAgaG9zdC0+cGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLmdldF9jb3Zlcl9zdGF0ZSkgeworCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEgJiYgbW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKSB7CiAJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbW1jLT5jbGFzc19kZXYsCiAJCQkJCSZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX2NvdmVyX3N3aXRjaDsKIAl9CiAKKwlvbWFwX2hzbW1jX2RlYnVnZnMobW1jKTsKKwogCXJldHVybiAwOwogCiBlcnJfY292ZXJfc3dpdGNoOgpAQCAtMTE2MSwxMSArMTgzOSwxMSBAQAogZXJyX2lycV9jZF9pbml0OgogCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiBlcnJfaXJxOgotCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCW1tY19ob3N0X2Rpc2FibGUoaG9zdC0+bW1jKTsKIAljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKIAljbGtfcHV0KGhvc3QtPmZjbGspOwogCWNsa19wdXQoaG9zdC0+aWNsayk7Ci0JaWYgKGhvc3QtPmRiY2xrX2VuYWJsZWQpIHsKKwlpZiAoaG9zdC0+Z290X2RiY2xrKSB7CiAJCWNsa19kaXNhYmxlKGhvc3QtPmRiY2xrKTsKIAkJY2xrX3B1dChob3N0LT5kYmNsayk7CiAJfQpAQCAtMTE4MCwxMiArMTg1OCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9tbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlpZiAoaG9zdCkgeworCQltbWNfaG9zdF9lbmFibGUoaG9zdC0+bW1jKTsKIAkJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CiAJCWlmIChob3N0LT5wZGF0YS0+Y2xlYW51cCkKIAkJCWhvc3QtPnBkYXRhLT5jbGVhbnVwKCZwZGV2LT5kZXYpOwpAQCAtMTE5NCwxMSArMTg3MywxMSBAQAogCQkJZnJlZV9pcnEobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxLCBob3N0KTsKIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCQljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKKwkJbW1jX2hvc3RfZGlzYWJsZShob3N0LT5tbWMpOwogCQljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKIAkJY2xrX3B1dChob3N0LT5mY2xrKTsKIAkJY2xrX3B1dChob3N0LT5pY2xrKTsKLQkJaWYgKGhvc3QtPmRiY2xrX2VuYWJsZWQpIHsKKwkJaWYgKGhvc3QtPmdvdF9kYmNsaykgewogCQkJY2xrX2Rpc2FibGUoaG9zdC0+ZGJjbGspOwogCQkJY2xrX3B1dChob3N0LT5kYmNsayk7CiAJCX0KQEAgLTEyMTYsMzYgKzE4OTUsNTEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBvbWFwX21tY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChob3N0ICYmIGhvc3QtPnN1c3BlbmRlZCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaG9zdCkgeworCQlob3N0LT5zdXNwZW5kZWQgPSAxOworCQlpZiAoaG9zdC0+cGRhdGEtPnN1c3BlbmQpIHsKKwkJCXJldCA9IGhvc3QtPnBkYXRhLT5zdXNwZW5kKCZwZGV2LT5kZXYsCisJCQkJCQkJaG9zdC0+c2xvdF9pZCk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkJCSJVbmFibGUgdG8gaGFuZGxlIE1NQyBib2FyZCIKKwkJCQkJIiBsZXZlbCBzdXNwZW5kXG4iKTsKKwkJCQlob3N0LT5zdXNwZW5kZWQgPSAwOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwkJY2FuY2VsX3dvcmtfc3luYygmaG9zdC0+bW1jX2NhcmRkZXRlY3Rfd29yayk7CisJCW1tY19ob3N0X2VuYWJsZShob3N0LT5tbWMpOwogCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KGhvc3QtPm1tYywgc3RhdGUpOwogCQlpZiAocmV0ID09IDApIHsKLQkJCWhvc3QtPnN1c3BlbmRlZCA9IDE7Ci0KIAkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSVNFLCAwKTsKIAkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIDApOwogCi0JCQlpZiAoaG9zdC0+cGRhdGEtPnN1c3BlbmQpIHsKLQkJCQlyZXQgPSBob3N0LT5wZGF0YS0+c3VzcGVuZCgmcGRldi0+ZGV2LAotCQkJCQkJCQlob3N0LT5zbG90X2lkKTsKLQkJCQlpZiAocmV0KQotCQkJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJCQkJCSJVbmFibGUgdG8gaGFuZGxlIE1NQyBib2FyZCIKLQkJCQkJCSIgbGV2ZWwgc3VzcGVuZFxuIik7Ci0JCQl9CiAKIAkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKLQkJCQkJIE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIH5TREJQKTsKLQkJCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIH5TREJQKTsKKwkJCW1tY19ob3N0X2Rpc2FibGUoaG9zdC0+bW1jKTsKIAkJCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwotCQkJY2xrX2Rpc2FibGUoaG9zdC0+ZGJjbGspOworCQkJaWYgKGhvc3QtPmdvdF9kYmNsaykKKwkJCQljbGtfZGlzYWJsZShob3N0LT5kYmNsayk7CisJCX0gZWxzZSB7CisJCQlob3N0LT5zdXNwZW5kZWQgPSAwOworCQkJaWYgKGhvc3QtPnBkYXRhLT5yZXN1bWUpIHsKKwkJCQlyZXQgPSBob3N0LT5wZGF0YS0+cmVzdW1lKCZwZGV2LT5kZXYsCisJCQkJCQkJICBob3N0LT5zbG90X2lkKTsKKwkJCQlpZiAocmV0KQorCQkJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkJCSJVbm1hc2sgaW50ZXJydXB0IGZhaWxlZFxuIik7CisJCQl9CisJCQltbWNfaG9zdF9kaXNhYmxlKGhvc3QtPm1tYyk7CiAJCX0KIAogCX0KQEAgLTEyNTMsMzIgKzE5NDcsMjggQEAKIH0KIAogLyogUm91dGluZSB0byByZXN1bWUgdGhlIE1NQyBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgb21hcF9tbWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoaG9zdCAmJiAhaG9zdC0+c3VzcGVuZGVkKQogCQlyZXR1cm4gMDsKIAogCWlmIChob3N0KSB7Ci0KLQkJcmV0ID0gY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKKwkJcmV0ID0gY2xrX2VuYWJsZShob3N0LT5pY2xrKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gY2xrX2VuX2VycjsKIAotCQlyZXQgPSBjbGtfZW5hYmxlKGhvc3QtPmljbGspOwotCQlpZiAocmV0KSB7Ci0JCQljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKLQkJCWNsa19wdXQoaG9zdC0+ZmNsayk7CisJCWlmIChtbWNfaG9zdF9lbmFibGUoaG9zdC0+bW1jKSAhPSAwKSB7CisJCQljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKIAkJCWdvdG8gY2xrX2VuX2VycjsKIAkJfQogCi0JCWlmIChjbGtfZW5hYmxlKGhvc3QtPmRiY2xrKSAhPSAwKQotCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCi0JCQkJCSJFbmFibGluZyBkZWJvdW5jZSBjbGsgZmFpbGVkXG4iKTsKKwkJaWYgKGhvc3QtPmdvdF9kYmNsaykKKwkJCWNsa19lbmFibGUoaG9zdC0+ZGJjbGspOwogCi0JCW9tYXBfaHNtbWNfaW5pdChob3N0KTsKKwkJb21hcF9oc21tY19jb25mX2J1c19wb3dlcihob3N0KTsKIAogCQlpZiAoaG9zdC0+cGRhdGEtPnJlc3VtZSkgewogCQkJcmV0ID0gaG9zdC0+cGRhdGEtPnJlc3VtZSgmcGRldi0+ZGV2LCBob3N0LT5zbG90X2lkKTsKQEAgLTEyODcsMTAgKzE5NzcsMTQgQEAKIAkJCQkJIlVubWFzayBpbnRlcnJ1cHQgZmFpbGVkXG4iKTsKIAkJfQogCisJCW9tYXBfaHNtbWNfcHJvdGVjdF9jYXJkKGhvc3QpOworCiAJCS8qIE5vdGlmeSB0aGUgY29yZSB0byByZXN1bWUgdGhlIGhvc3QgKi8KIAkJcmV0ID0gbW1jX3Jlc3VtZV9ob3N0KGhvc3QtPm1tYyk7CiAJCWlmIChyZXQgPT0gMCkKIAkJCWhvc3QtPnN1c3BlbmRlZCA9IDA7CisKKwkJbW1jX2hvc3RfbGF6eV9kaXNhYmxlKGhvc3QtPm1tYyk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTEzMDIsMzUgKzE5OTYsMzQgQEAKIH0KIAogI2Vsc2UKLSNkZWZpbmUgb21hcF9tbWNfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIG9tYXBfbW1jX3Jlc3VtZQkJTlVMTAorI2RlZmluZSBvbWFwX2hzbW1jX3N1c3BlbmQJTlVMTAorI2RlZmluZSBvbWFwX2hzbW1jX3Jlc3VtZQkJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfbW1jX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gb21hcF9tbWNfcHJvYmUsCi0JLnJlbW92ZQkJPSBvbWFwX21tY19yZW1vdmUsCi0JLnN1c3BlbmQJPSBvbWFwX21tY19zdXNwZW5kLAotCS5yZXN1bWUJCT0gb21hcF9tbWNfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9oc21tY19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBvbWFwX2hzbW1jX3JlbW92ZSwKKwkuc3VzcGVuZAk9IG9tYXBfaHNtbWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9tYXBfaHNtbWNfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZSA9IERSSVZFUl9OQU1FLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgb21hcF9tbWNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcF9oc21tY19pbml0KHZvaWQpCiB7CiAJLyogUmVnaXN0ZXIgdGhlIE1NQyBkcml2ZXIgKi8KLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX21tY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfaHNtbWNfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG9tYXBfbW1jX2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2hzbW1jX2NsZWFudXAodm9pZCkKIHsKIAkvKiBVbnJlZ2lzdGVyIE1NQyBkcml2ZXIgKi8KLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9tbWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9oc21tY19kcml2ZXIpOwogfQogCi1tb2R1bGVfaW5pdChvbWFwX21tY19pbml0KTsKLW1vZHVsZV9leGl0KG9tYXBfbW1jX2NsZWFudXApOworbW9kdWxlX2luaXQob21hcF9oc21tY19pbml0KTsKK21vZHVsZV9leGl0KG9tYXBfaHNtbWNfY2xlYW51cCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiT01BUCBIaWdoIFNwZWVkIE11bHRpbWVkaWEgQ2FyZCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuYwppbmRleCAxZThhYTU5MC4uMDFhYjkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSAic2RoY2kuaCIKIAogc3RydWN0IHNkaGNpX29mX2RhdGEgewpAQCAtNDgsNiArNDksOCBAQAogI2RlZmluZSBFU0RIQ19DTE9DS19IQ0tFTgkweDAwMDAwMDAyCiAjZGVmaW5lIEVTREhDX0NMT0NLX0lQR0VOCTB4MDAwMDAwMDEKIAorI2RlZmluZSBFU0RIQ19IT1NUX0NPTlRST0xfUkVTCTB4MDUKKwogc3RhdGljIHUzMiBlc2RoY19yZWFkbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKIHsKIAlyZXR1cm4gaW5fYmUzMihob3N0LT5pb2FkZHIgKyByZWcpOwpAQCAtMTA5LDEzICsxMTIsMTcgQEAKIAlpbnQgYmFzZSA9IHJlZyAmIH4weDM7CiAJaW50IHNoaWZ0ID0gKHJlZyAmIDB4MykgKiA4OwogCisJLyogUHJldmVudCBTREhDSSBjb3JlIGZyb20gd3JpdGluZyByZXNlcnZlZCBiaXRzIChlLmcuIEhJU1BEKS4gKi8KKwlpZiAocmVnID09IFNESENJX0hPU1RfQ09OVFJPTCkKKwkJdmFsICY9IH5FU0RIQ19IT1NUX0NPTlRST0xfUkVTOworCiAJY2xyc2V0Yml0c19iZTMyKGhvc3QtPmlvYWRkciArIGJhc2UgLCAweGZmIDw8IHNoaWZ0LCB2YWwgPDwgc2hpZnQpOwogfQogCiBzdGF0aWMgdm9pZCBlc2RoY19zZXRfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjbG9jaykKIHsKLQlpbnQgZGl2OwogCWludCBwcmVfZGl2ID0gMjsKKwlpbnQgZGl2ID0gMTsKIAogCWNscmJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19TWVNURU1fQ09OVFJPTCwgRVNESENfQ0xPQ0tfSVBHRU4gfAogCQkgIEVTREhDX0NMT0NLX0hDS0VOIHwgRVNESENfQ0xPQ0tfUEVSRU4gfCBFU0RIQ19DTE9DS19NQVNLKTsKQEAgLTEyMywxOSArMTMwLDE3IEBACiAJaWYgKGNsb2NrID09IDApCiAJCWdvdG8gb3V0OwogCi0JaWYgKGhvc3QtPm1heF9jbGsgLyAxNiA+IGNsb2NrKSB7Ci0JCWZvciAoOyBwcmVfZGl2IDwgMjU2OyBwcmVfZGl2ICo9IDIpIHsKLQkJCWlmIChob3N0LT5tYXhfY2xrIC8gcHJlX2RpdiA8IGNsb2NrICogMTYpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9CisJd2hpbGUgKGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IC8gMTYgPiBjbG9jayAmJiBwcmVfZGl2IDwgMjU2KQorCQlwcmVfZGl2ICo9IDI7CiAKLQlmb3IgKGRpdiA9IDE7IGRpdiA8PSAxNjsgZGl2KyspIHsKLQkJaWYgKGhvc3QtPm1heF9jbGsgLyAoZGl2ICogcHJlX2RpdikgPD0gY2xvY2spCi0JCQlicmVhazsKLQl9CisJd2hpbGUgKGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IC8gZGl2ID4gY2xvY2sgJiYgZGl2IDwgMTYpCisJCWRpdisrOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJkZXNpcmVkIFNEIGNsb2NrOiAlZCwgYWN0dWFsOiAlZFxuIiwKKwkJY2xvY2ssIGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IC8gZGl2KTsKIAogCXByZV9kaXYgPj49IDE7CisJZGl2LS07CiAKIAlzZXRiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfU1lTVEVNX0NPTlRST0wsIEVTREhDX0NMT0NLX0lQR0VOIHwKIAkJICBFU0RIQ19DTE9DS19IQ0tFTiB8IEVTREhDX0NMT0NLX1BFUkVOIHwKQEAgLTE2NSwxOSArMTcwLDEyIEBACiAJcmV0dXJuIG9mX2hvc3QtPmNsb2NrIC8gMjU2IC8gMTY7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXNkaGNfZ2V0X3RpbWVvdXRfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCi17Ci0Jc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwotCi0JcmV0dXJuIG9mX2hvc3QtPmNsb2NrIC8gMTAwMDsKLX0KLQogc3RhdGljIHN0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2VzZGhjID0gewogCS5xdWlya3MgPSBTREhDSV9RVUlSS19GT1JDRV9CTEtfU1pfMjA0OCB8CiAJCSAgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OIHwKLQkJICBTREhDSV9RVUlSS19JTlZFUlRFRF9XUklURV9QUk9URUNUIHwKIAkJICBTREhDSV9RVUlSS19OT19CVVNZX0lSUSB8CiAJCSAgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0sgfAorCQkgIFNESENJX1FVSVJLX0RBVEFfVElNRU9VVF9VU0VTX1NEQ0xLIHwKIAkJICBTREhDSV9RVUlSS19QSU9fTkVFRFNfREVMQVkgfAogCQkgIFNESENJX1FVSVJLX1JFU1RPUkVfSVJRU19BRlRFUl9SRVNFVCB8CiAJCSAgU0RIQ0lfUVVJUktfTk9fQ0FSRF9OT19SRVNFVCwKQEAgLTE5Miw3ICsxOTAsNiBAQAogCQkuZW5hYmxlX2RtYSA9IGVzZGhjX2VuYWJsZV9kbWEsCiAJCS5nZXRfbWF4X2Nsb2NrID0gZXNkaGNfZ2V0X21heF9jbG9jaywKIAkJLmdldF9taW5fY2xvY2sgPSBlc2RoY19nZXRfbWluX2Nsb2NrLAotCQkuZ2V0X3RpbWVvdXRfY2xvY2sgPSBlc2RoY19nZXRfdGltZW91dF9jbG9jaywKIAl9LAogfTsKIApAQCAtMjE5LDYgKzIxNiwxNSBAQAogCiAjZW5kaWYKIAorc3RhdGljIGJvb2wgX19kZXZpbml0IHNkaGNpX29mX3dwX2ludmVydGVkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgInNkaGNpLHdwLWludmVydGVkIiwgTlVMTCkpCisJCXJldHVybiB0cnVlOworCisJLyogT2xkIGRldmljZSB0cmVlcyBkb24ndCBoYXZlIHRoZSB3cC1pbnZlcnRlZCBwcm9wZXJ0eS4gKi8KKwlyZXR1cm4gbWFjaGluZV9pcyhtcGM4Mzd4X3JkYikgfHwgbWFjaGluZV9pcyhtcGM4Mzd4X21kcyk7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAogCQkJCSBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKQEAgLTI2MSw2ICsyNjcsOSBAQAogCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSwxLWJpdC1vbmx5IiwgTlVMTCkpCiAJCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19GT1JDRV8xX0JJVF9EQVRBOwogCisJaWYgKHNkaGNpX29mX3dwX2ludmVydGVkKG5wKSkKKwkJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1Q7CisKIAljbGsgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmc2l6ZSk7CiAJaWYgKGNsayAmJiBzaXplID09IHNpemVvZigqY2xrKSAmJiAqY2xrKQogCQlvZl9ob3N0LT5jbG9jayA9ICpjbGs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwppbmRleCAyZjE1Y2MxLi5lMDM1NjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKQEAgLTgzLDcgKzgzLDggQEAKIAlpZiAoY2hpcC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lCTSkKIAkJY2hpcC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0NMT0NLX0JFRk9SRV9SRVNFVDsKIAotCWlmIChjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0FNU1VORykKKwlpZiAoY2hpcC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcgfHwKKwkgICAgY2hpcC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NPTlkpCiAJCWNoaXAtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19OT19DQVJEX05PX1JFU0VUOwogCiAJcmV0dXJuIDA7CkBAIC0zOTUsNyArMzk2LDcgQEAKIAogCWlmICgoKHBkZXYtPmNsYXNzICYgMHhGRkZGMDApID09IChQQ0lfQ0xBU1NfU1lTVEVNX1NESENJIDw8IDgpKSAmJgogCQkoKHBkZXYtPmNsYXNzICYgMHgwMDAwRkYpICE9IFBDSV9TREhDSV9JRkRNQSkgJiYKLQkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkpIHsKKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX1NETUEpKSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJXaWxsIHVzZSBETUEgbW9kZSBldmVuIHRob3VnaCBIVyAiCiAJCQkiZG9lc24ndCBmdWxseSBjbGFpbSB0byBzdXBwb3J0IGl0LlxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IGZjOTZmOGMuLmMyNzlmYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTU5MSw2ICs1OTEsOSBAQAogCXRhcmdldF90aW1lb3V0ID0gZGF0YS0+dGltZW91dF9ucyAvIDEwMDAgKwogCQlkYXRhLT50aW1lb3V0X2Nsa3MgLyBob3N0LT5jbG9jazsKIAorCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSykKKwkJaG9zdC0+dGltZW91dF9jbGsgPSBob3N0LT5jbG9jayAvIDEwMDA7CisKIAkvKgogCSAqIEZpZ3VyZSBvdXQgbmVlZGVkIGN5Y2xlcy4KIAkgKiBXZSBkbyB0aGlzIGluIHN0ZXBzIGluIG9yZGVyIHRvIGZpdCBpbnNpZGUgYSAzMiBiaXQgaW50LgpAQCAtNjUyLDcgKzY1NSw3IEBACiAJY291bnQgPSBzZGhjaV9jYWxjX3RpbWVvdXQoaG9zdCwgZGF0YSk7CiAJc2RoY2lfd3JpdGViKGhvc3QsIGNvdW50LCBTREhDSV9USU1FT1VUX0NPTlRST0wpOwogCi0JaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkKKwlpZiAoaG9zdC0+ZmxhZ3MgJiAoU0RIQ0lfVVNFX1NETUEgfCBTREhDSV9VU0VfQURNQSkpCiAJCWhvc3QtPmZsYWdzIHw9IFNESENJX1JFUV9VU0VfRE1BOwogCiAJLyoKQEAgLTk5MSw4ICs5OTQsOCBAQAogCWNsayB8PSBTREhDSV9DTE9DS19JTlRfRU47CiAJc2RoY2lfd3JpdGV3KGhvc3QsIGNsaywgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CiAKLQkvKiBXYWl0IG1heCAxMCBtcyAqLwotCXRpbWVvdXQgPSAxMDsKKwkvKiBXYWl0IG1heCAyMCBtcyAqLworCXRpbWVvdXQgPSAyMDsKIAl3aGlsZSAoISgoY2xrID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkpCiAJCSYgU0RIQ0lfQ0xPQ0tfSU5UX1NUQUJMRSkpIHsKIAkJaWYgKHRpbWVvdXQgPT0gMCkgewpAQCAtMTU5Nyw3ICsxNjAwLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkgeworCWlmIChob3N0LT5mbGFncyAmIChTREhDSV9VU0VfU0RNQSB8IFNESENJX1VTRV9BRE1BKSkgewogCQlpZiAoaG9zdC0+b3BzLT5lbmFibGVfZG1hKQogCQkJaG9zdC0+b3BzLT5lbmFibGVfZG1hKGhvc3QpOwogCX0KQEAgLTE2NzgsMjMgKzE2ODEsMjAgQEAKIAljYXBzID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQ0FQQUJJTElUSUVTKTsKIAogCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19GT1JDRV9ETUEpCi0JCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9ETUE7Ci0JZWxzZSBpZiAoIShjYXBzICYgU0RIQ0lfQ0FOX0RPX0RNQSkpCi0JCURCRygiQ29udHJvbGxlciBkb2Vzbid0IGhhdmUgRE1BIGNhcGFiaWxpdHlcbiIpOworCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfU0RNQTsKKwllbHNlIGlmICghKGNhcHMgJiBTREhDSV9DQU5fRE9fU0RNQSkpCisJCURCRygiQ29udHJvbGxlciBkb2Vzbid0IGhhdmUgU0RNQSBjYXBhYmlsaXR5XG4iKTsKIAllbHNlCi0JCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9ETUE7CisJCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9TRE1BOwogCiAJaWYgKChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19CUk9LRU5fRE1BKSAmJgotCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKSkgeworCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfU0RNQSkpIHsKIAkJREJHKCJEaXNhYmxpbmcgRE1BIGFzIGl0IGlzIG1hcmtlZCBicm9rZW5cbiIpOwotCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX0RNQTsKKwkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1VTRV9TRE1BOwogCX0KIAotCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpIHsKLQkJaWYgKChob3N0LT52ZXJzaW9uID49IFNESENJX1NQRUNfMjAwKSAmJgotCQkJCShjYXBzICYgU0RIQ0lfQ0FOX0RPX0FETUEyKSkKLQkJCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9BRE1BOwotCX0KKwlpZiAoKGhvc3QtPnZlcnNpb24gPj0gU0RIQ0lfU1BFQ18yMDApICYmIChjYXBzICYgU0RIQ0lfQ0FOX0RPX0FETUEyKSkKKwkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfVVNFX0FETUE7CiAKIAlpZiAoKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0JST0tFTl9BRE1BKSAmJgogCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkpIHsKQEAgLTE3MDIsMTMgKzE3MDIsMTQgQEAKIAkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1VTRV9BRE1BOwogCX0KIAotCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpIHsKKwlpZiAoaG9zdC0+ZmxhZ3MgJiAoU0RIQ0lfVVNFX1NETUEgfCBTREhDSV9VU0VfQURNQSkpIHsKIAkJaWYgKGhvc3QtPm9wcy0+ZW5hYmxlX2RtYSkgewogCQkJaWYgKGhvc3QtPm9wcy0+ZW5hYmxlX2RtYShob3N0KSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBzdWl0YWJsZSBETUEgIgogCQkJCQkiYXZhaWxhYmxlLiBGYWxsaW5nIGJhY2sgdG8gUElPLlxuIiwKIAkJCQkJbW1jX2hvc3RuYW1lKG1tYykpOwotCQkJCWhvc3QtPmZsYWdzICY9IH4oU0RIQ0lfVVNFX0RNQSB8IFNESENJX1VTRV9BRE1BKTsKKwkJCQlob3N0LT5mbGFncyAmPQorCQkJCQl+KFNESENJX1VTRV9TRE1BIHwgU0RIQ0lfVVNFX0FETUEpOwogCQkJfQogCQl9CiAJfQpAQCAtMTczNiw3ICsxNzM3LDcgQEAKIAkgKiBtYXNrLCBidXQgUElPIGRvZXMgbm90IG5lZWQgdGhlIGh3IHNoaW0gc28gd2Ugc2V0IGEgbmV3CiAJICogbWFzayBoZXJlIGluIHRoYXQgY2FzZS4KIAkgKi8KLQlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpKSB7CisJaWYgKCEoaG9zdC0+ZmxhZ3MgJiAoU0RIQ0lfVVNFX1NETUEgfCBTREhDSV9VU0VfQURNQSkpKSB7CiAJCWhvc3QtPmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTsKIAkJbW1jX2Rldihob3N0LT5tbWMpLT5kbWFfbWFzayA9ICZob3N0LT5kbWFfbWFzazsKIAl9CkBAIC0xNzU3LDEzICsxNzU4LDE1IEBACiAJaG9zdC0+dGltZW91dF9jbGsgPQogCQkoY2FwcyAmIFNESENJX1RJTUVPVVRfQ0xLX01BU0spID4+IFNESENJX1RJTUVPVVRfQ0xLX1NISUZUOwogCWlmIChob3N0LT50aW1lb3V0X2NsayA9PSAwKSB7Ci0JCWlmICghaG9zdC0+b3BzLT5nZXRfdGltZW91dF9jbG9jaykgeworCQlpZiAoaG9zdC0+b3BzLT5nZXRfdGltZW91dF9jbG9jaykgeworCQkJaG9zdC0+dGltZW91dF9jbGsgPSBob3N0LT5vcHMtPmdldF90aW1lb3V0X2Nsb2NrKGhvc3QpOworCQl9IGVsc2UgaWYgKCEoaG9zdC0+cXVpcmtzICYKKwkJCQlTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSykpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IHRpbWVvdXQgY2xvY2sgIgogCQkJICAgICAgICJmcmVxdWVuY3kuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlob3N0LT50aW1lb3V0X2NsayA9IGhvc3QtPm9wcy0+Z2V0X3RpbWVvdXRfY2xvY2soaG9zdCk7CiAJfQogCWlmIChjYXBzICYgU0RIQ0lfVElNRU9VVF9DTEtfVU5JVCkKIAkJaG9zdC0+dGltZW91dF9jbGsgKj0gMTAwMDsKQEAgLTE3NzIsNyArMTc3NSw4IEBACiAJICogU2V0IGhvc3QgcGFyYW1ldGVycy4KIAkgKi8KIAltbWMtPm9wcyA9ICZzZGhjaV9vcHM7Ci0JaWYgKGhvc3QtPm9wcy0+Z2V0X21pbl9jbG9jaykKKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0sgJiYKKwkJCWhvc3QtPm9wcy0+c2V0X2Nsb2NrICYmIGhvc3QtPm9wcy0+Z2V0X21pbl9jbG9jaykKIAkJbW1jLT5mX21pbiA9IGhvc3QtPm9wcy0+Z2V0X21pbl9jbG9jayhob3N0KTsKIAllbHNlCiAJCW1tYy0+Zl9taW4gPSBob3N0LT5tYXhfY2xrIC8gMjU2OwpAQCAtMTgxMCw3ICsxODE0LDcgQEAKIAkgKi8KIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkKIAkJbW1jLT5tYXhfaHdfc2VncyA9IDEyODsKLQllbHNlIGlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpCisJZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfU0RNQSkKIAkJbW1jLT5tYXhfaHdfc2VncyA9IDE7CiAJZWxzZSAvKiBQSU8gKi8KIAkJbW1jLT5tYXhfaHdfc2VncyA9IDEyODsKQEAgLTE4OTMsMTAgKzE4OTcsMTAgQEAKIAogCW1tY19hZGRfaG9zdChtbWMpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNESENJIGNvbnRyb2xsZXIgb24gJXMgWyVzXSB1c2luZyAlcyVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBTREhDSSBjb250cm9sbGVyIG9uICVzIFslc10gdXNpbmcgJXNcbiIsCiAJCW1tY19ob3N0bmFtZShtbWMpLCBob3N0LT5od19uYW1lLCBkZXZfbmFtZShtbWNfZGV2KG1tYykpLAotCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSk/IkEiOiIiLAotCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKT8iRE1BIjoiUElPIik7CisJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKSA/ICJBRE1BIiA6CisJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9TRE1BKSA/ICJETUEiIDogIlBJTyIpOwogCiAJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKaW5kZXggYzc3ZTlmZi4uY2U1ZjFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaApAQCAtMTQzLDcgKzE0Myw3IEBACiAjZGVmaW5lICBTREhDSV9DQU5fRE9fQURNQTIJMHgwMDA4MDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOX0RPX0FETUExCTB4MDAxMDAwMDAKICNkZWZpbmUgIFNESENJX0NBTl9ET19ISVNQRAkweDAwMjAwMDAwCi0jZGVmaW5lICBTREhDSV9DQU5fRE9fRE1BCTB4MDA0MDAwMDAKKyNkZWZpbmUgIFNESENJX0NBTl9ET19TRE1BCTB4MDA0MDAwMDAKICNkZWZpbmUgIFNESENJX0NBTl9WRERfMzMwCTB4MDEwMDAwMDAKICNkZWZpbmUgIFNESENJX0NBTl9WRERfMzAwCTB4MDIwMDAwMDAKICNkZWZpbmUgIFNESENJX0NBTl9WRERfMTgwCTB4MDQwMDAwMDAKQEAgLTIzMiw2ICsyMzIsOCBAQAogI2RlZmluZSBTREhDSV9RVUlSS19GT1JDRV8xX0JJVF9EQVRBCQkJKDE8PDIyKQogLyogQ29udHJvbGxlciBuZWVkcyAxMG1zIGRlbGF5IGJldHdlZW4gYXBwbHlpbmcgcG93ZXIgYW5kIGNsb2NrICovCiAjZGVmaW5lIFNESENJX1FVSVJLX0RFTEFZX0FGVEVSX1BPV0VSCQkJKDE8PDIzKQorLyogQ29udHJvbGxlciB1c2VzIFNEQ0xLIGluc3RlYWQgb2YgVE1DTEsgZm9yIGRhdGEgdGltZW91dHMgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfREFUQV9USU1FT1VUX1VTRVNfU0RDTEsJCSgxPDwyNCkKIAogCWludAkJCWlycTsJCS8qIERldmljZSBJUlEgKi8KIAl2b2lkIF9faW9tZW0gKgkJaW9hZGRyOwkJLyogTWFwcGVkIGFkZHJlc3MgKi8KQEAgLTI1MCw3ICsyNTIsNyBAQAogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBNdXRleCAqLwogCiAJaW50CQkJZmxhZ3M7CQkvKiBIb3N0IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgU0RIQ0lfVVNFX0RNQQkJKDE8PDApCQkvKiBIb3N0IGlzIERNQSBjYXBhYmxlICovCisjZGVmaW5lIFNESENJX1VTRV9TRE1BCQkoMTw8MCkJCS8qIEhvc3QgaXMgU0RNQSBjYXBhYmxlICovCiAjZGVmaW5lIFNESENJX1VTRV9BRE1BCQkoMTw8MSkJCS8qIEhvc3QgaXMgQURNQSBjYXBhYmxlICovCiAjZGVmaW5lIFNESENJX1JFUV9VU0VfRE1BCSgxPDwyKQkJLyogVXNlIERNQSBmb3IgdGhpcyByZXEuICovCiAjZGVmaW5lIFNESENJX0RFVklDRV9ERUFECSgxPDwzKQkJLyogRGV2aWNlIHVucmVzcG9uc2l2ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKaW5kZXggYjhlMzVhMC4uZTRlYzM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCkBAIC0yNSw2ICsyNSwxNCBAQAogCWhlbHAKIAkgIERldGVybWluZXMgdGhlIHZlcmJvc2l0eSBsZXZlbCBvZiB0aGUgTVREIGRlYnVnZ2luZyBtZXNzYWdlcy4KIAorY29uZmlnIE1URF9URVNUUworCXRyaXN0YXRlICJNVEQgdGVzdHMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIG0KKwloZWxwCisJICBUaGlzIG9wdGlvbiBpbmNsdWRlcyB2YXJpb3VzIE1URCB0ZXN0cyBpbnRvIGNvbXBpbGF0aW9uLiBUaGUgdGVzdHMKKwkgIHNob3VsZCBub3JtYWxseSBiZSBjb21waWxlZCBhcyBrZXJuZWwgbW9kdWxlcy4gVGhlIG1vZHVsZXMgcGVyZm9ybQorCSAgdmFyaW91cyBjaGVja3MgYW5kIHZlcmlmaWNhdGlvbnMgd2hlbiBsb2FkZWQuCisKIGNvbmZpZyBNVERfQ09OQ0FUCiAJdHJpc3RhdGUgIk1URCBjb25jYXRlbmF0aW5nIHN1cHBvcnQiCiAJaGVscApAQCAtNDUsMTQgKzUzLDYgQEAKIAkgIGRldmljZXMuIFBhcnRpdGlvbmluZyBvbiBORlRMICdkZXZpY2VzJyBpcyBhIGRpZmZlcmVudCAtIHRoYXQncyB0aGUKIAkgICdub3JtYWwnIGZvcm0gb2YgcGFydGl0aW9uaW5nIHVzZWQgb24gYSBibG9jayBkZXZpY2UuCiAKLWNvbmZpZyBNVERfVEVTVFMKLQl0cmlzdGF0ZSAiTVREIHRlc3RzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBtCi0JaGVscAotCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgdmFyaW91cyBNVEQgdGVzdHMgaW50byBjb21waWxhdGlvbi4gVGhlIHRlc3RzCi0JICBzaG91bGQgbm9ybWFsbHkgYmUgY29tcGlsZWQgYXMga2VybmVsIG1vZHVsZXMuIFRoZSBtb2R1bGVzIHBlcmZvcm0KLQkgIHZhcmlvdXMgY2hlY2tzIGFuZCB2ZXJpZmljYXRpb25zIHdoZW4gbG9hZGVkLgotCiBjb25maWcgTVREX1JFREJPT1RfUEFSVFMKIAl0cmlzdGF0ZSAiUmVkQm9vdCBwYXJ0aXRpb24gdGFibGUgcGFyc2luZyIKIAlkZXBlbmRzIG9uIE1URF9QQVJUSVRJT05TCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9hZnMuYyBiL2RyaXZlcnMvbXRkL2Fmcy5jCmluZGV4IGQwNzJjYTUuLmNlYzdhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2Fmcy5jCisrKyBiL2RyaXZlcnMvbXRkL2Fmcy5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAkJcGFydHNbaWR4XS5vZmZzZXQJPSBpbWdfcHRyOwogCQlwYXJ0c1tpZHhdLm1hc2tfZmxhZ3MJPSAwOwogCi0JCXByaW50aygiICBtdGQlZDogYXQgMHglMDh4LCAlNWRLQiwgJTh1LCAlc1xuIiwKKwkJcHJpbnRrKCIgIG10ZCVkOiBhdCAweCUwOHgsICU1bGx1S2lCLCAlOHUsICVzXG4iLAogCQkJaWR4LCBpbWdfcHRyLCBwYXJ0c1tpZHhdLnNpemUgLyAxMDI0LAogCQkJaWlzLmltYWdlTnVtYmVyLCBzdHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCmluZGV4IDYxZWE4MzMuLjk0YmI2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCkBAIC0yODIsMTYgKzI4Miw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBmaXh1cF9NMjlXMTI4R193cml0ZV9idWZmZXIoc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQgKnBhcmFtKQotewotCXN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OwotCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwotCWlmIChjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCkgewotCQlwcl93YXJuaW5nKCJEb24ndCB1c2Ugd3JpdGUgYnVmZmVyIG9uIFNUIGZsYXNoIE0yOVcxMjhHXG4iKTsKLQkJY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXAgPSAwOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBjZmlfZml4dXAgY2ZpX2ZpeHVwX3RhYmxlW10gPSB7CiAJeyBDRklfTUZSX0FUTUVMLCBDRklfSURfQU5ZLCBmaXh1cF9jb252ZXJ0X2F0bWVsX3ByaSwgTlVMTCB9LAogI2lmZGVmIEFNRF9CT09UTE9DX0JVRwpAQCAtMzA4LDcgKzI5OCw2IEBACiAJeyBDRklfTUZSX0FNRCwgMHgxMzAxLCBmaXh1cF9zMjlnbDA2NG5fc2VjdG9ycywgTlVMTCwgfSwKIAl7IENGSV9NRlJfQU1ELCAweDFhMDAsIGZpeHVwX3MyOWdsMDMybl9zZWN0b3JzLCBOVUxMLCB9LAogCXsgQ0ZJX01GUl9BTUQsIDB4MWEwMSwgZml4dXBfczI5Z2wwMzJuX3NlY3RvcnMsIE5VTEwsIH0sCi0JeyBDRklfTUZSX1NULCAgMHgyMjdFLCBmaXh1cF9NMjlXMTI4R193cml0ZV9idWZmZXIsIE5VTEwsIH0sCiAjaWYgIUZPUkNFX1dPUkRfV1JJVEUKIAl7IENGSV9NRlJfQU5ZLCBDRklfSURfQU5ZLCBmaXh1cF91c2Vfd3JpdGVfYnVmZmVycywgTlVMTCwgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzNGQ0MGUyLi5jNWE4NGZkCi0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYwpAQCAtODEsNiArODEsMTAgQEAKIHsKIAljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKIAljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwkvKiBNMjlXMTI4RyBmbGFzaGVzIHJlcXVpcmUgYW4gYWRkaXRpb25hbCByZXNldCBjb21tYW5kCisJICAgd2hlbiBleGl0IHFyeSBtb2RlICovCisJaWYgKChjZmktPm1mciA9PSBDRklfTUZSX1NUKSAmJiAoY2ZpLT5pZCA9PSAweDIyN0UgfHwgY2ZpLT5pZCA9PSAweDdFKSkKKwkJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X21vZGVfb2ZmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKaW5kZXggY2NjNGNmYy4uNzM2YTNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCkBAIC0xMTEsNiArMTExLDExIEBACiAjZGVmaW5lIEkyOEYzMjBCM0IJMHg4ODk3CiAjZGVmaW5lIEkyOEY2NDBCM1QJMHg4ODk4CiAjZGVmaW5lIEkyOEY2NDBCM0IJMHg4ODk5CisjZGVmaW5lIEkyOEY2NDBDM0IJMHg4OENECisjZGVmaW5lIEkyOEYxNjBGM1QJMHg4OEYzCisjZGVmaW5lIEkyOEYxNjBGM0IJMHg4OEY0CisjZGVmaW5lIEkyOEYxNjBDM1QJMHg4OEMyCisjZGVmaW5lIEkyOEYxNjBDM0IJMHg4OEMzCiAjZGVmaW5lIEk4MjgwMkFCCTB4MDBhZAogI2RlZmluZSBJODI4MDJBQwkweDAwYWMKIApAQCAtMTUwLDYgKzE1NSw3IEBACiAjZGVmaW5lIE01MExQVzA4MCAgICAgICAweDAwMkYKICNkZWZpbmUgTTUwRkxXMDgwQQkweDAwODAKICNkZWZpbmUgTTUwRkxXMDgwQgkweDAwODEKKyNkZWZpbmUgUFNENDI1Nkc2VgkweDAwZTkKIAogLyogU1NUICovCiAjZGVmaW5lIFNTVDI5RUUwMjAJMHgwMDEwCkBAIC0yMDEsNiArMjA3LDcgQEAKIAlNVERfVUFERFJfMHgwNTU1XzB4MDJBQSwKIAlNVERfVUFERFJfMHgwNTU1XzB4MEFBQSwKIAlNVERfVUFERFJfMHg1NTU1XzB4MkFBQSwKKwlNVERfVUFERFJfMHgwQUFBXzB4MDU1NCwKIAlNVERfVUFERFJfMHgwQUFBXzB4MDU1NSwKIAlNVERfVUFERFJfMHhBQUFBXzB4NTU1NSwKIAlNVERfVUFERFJfRE9OVF9DQVJFLAkJLyogUmVxdWlyZXMgYW4gYXJiaXRyYXJ5IGFkZHJlc3MgKi8KQEAgLTI0NSw2ICsyNTIsMTEgQEAKIAkJLmFkZHIyID0gMHgyYWFhCiAJfSwKIAorCVtNVERfVUFERFJfMHgwQUFBXzB4MDU1NF0gPSB7CisJCS5hZGRyMSA9IDB4MEFBQSwKKwkJLmFkZHIyID0gMHgwNTU0CisJfSwKKwogCVtNVERfVUFERFJfMHgwQUFBXzB4MDU1NV0gPSB7CiAJCS5hZGRyMSA9IDB4MEFBQSwKIAkJLmFkZHIyID0gMHgwNTU1CkBAIC0xMTAzLDYgKzExMTUsMTkgQEAKIAkJfQogCX0sIHsKIAkJLm1mcl9pZAkJPSBNQU5VRkFDVFVSRVJfSU5URUwsCisJCS5kZXZfaWQJCT0gSTI4RjY0MEMzQiwKKwkJLm5hbWUJCT0gIkludGVsIDI4RjY0MEMzQiIsCisJCS5kZXZ0eXBlcwk9IENGSV9ERVZJQ0VUWVBFX1gxNiwKKwkJLnVhZGRyCQk9IE1URF9VQUREUl9VTk5FQ0VTU0FSWSwKKwkJLmRldl9zaXplCT0gU0laRV84TWlCLAorCQkuY21kX3NldAk9IFBfSURfSU5URUxfU1RELAorCQkubnJfcmVnaW9ucwk9IDIsCisJCS5yZWdpb25zCT0geworCQkJRVJBU0VJTkZPKDB4MDIwMDAsIDgpLAorCQkJRVJBU0VJTkZPKDB4MTAwMDAsIDEyNyksCisJCX0KKwl9LCB7CisJCS5tZnJfaWQJCT0gTUFOVUZBQ1RVUkVSX0lOVEVMLAogCQkuZGV2X2lkCQk9IEk4MjgwMkFCLAogCQkubmFtZQkJPSAiSW50ZWwgODI4MDJBQiIsCiAJCS5kZXZ0eXBlcwk9IENGSV9ERVZJQ0VUWVBFX1g4LApAQCAtMTE1Niw4ICsxMTgxLDggQEAKIAkJLm1mcl9pZAkJPSBNQU5VRkFDVFVSRVJfTkVDLAogCQkuZGV2X2lkCQk9IFVQRDI5RjA2NDExNSwKIAkJLm5hbWUJCT0gIk5FQyB1UEQyOUYwNjQxMTUiLAotCQkuZGV2dHlwZXMJPSBDRklfREVWSUNFVFlQRV9YMTZ8Q0ZJX0RFVklDRVRZUEVfWDgsCi0JCS51YWRkcgkJPSBNVERfVUFERFJfMHgwNTU1XzB4MDJBQSwJLyogPz8/PyAqLworCQkuZGV2dHlwZXMJPSBDRklfREVWSUNFVFlQRV9YMTYsCisJCS51YWRkcgkJPSBNVERfVUFERFJfMHhBQUFBXzB4NTU1NSwKIAkJLmRldl9zaXplCT0gU0laRV84TWlCLAogCQkuY21kX3NldAk9IFBfSURfQU1EX1NURCwKIAkJLm5yX3JlZ2lvbnMJPSAzLApAQCAtMTcyNiw2ICsxNzUxLDE4IEBACiAJCQlFUkFTRUlORk8oMHgxMDAwLDE2KSwKIAkJfQogCX0sIHsKKwkJLm1mcl9pZAkJPSAweGZmMDAgfCBNQU5VRkFDVFVSRVJfU1QsCisJCS5kZXZfaWQJCT0gMHhmZjAwIHwgUFNENDI1Nkc2ViwKKwkJLm5hbWUJCT0gIlNUIFBTRDQyNTZHNlYiLAorCQkuZGV2dHlwZXMJPSBDRklfREVWSUNFVFlQRV9YMTYsCisJCS51YWRkcgkJPSBNVERfVUFERFJfMHgwQUFBXzB4MDU1NCwKKwkJLmRldl9zaXplCT0gU0laRV8xTWlCLAorCQkuY21kX3NldAk9IFBfSURfQU1EX1NURCwKKwkJLm5yX3JlZ2lvbnMJPSAxLAorCQkucmVnaW9ucwk9IHsKKwkJCUVSQVNFSU5GTygweDEwMDAwLDE2KSwKKwkJfQorCX0sIHsKIAkJLm1mcl9pZAkJPSBNQU5VRkFDVFVSRVJfVE9TSElCQSwKIAkJLmRldl9pZAkJPSBUQzU4RlZUMTYwLAogCQkubmFtZQkJPSAiVG9zaGliYSBUQzU4RlZUMTYwIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCAzMjVmYWI5Mi4uYzIyMjUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwpAQCAtMTA0LDYgKzEwNCwxNiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgRkFTVF9SRUFEIGFjY2VzcyBzdXBwb3J0ZWQgYnkgU1QgTTI1UHh4LgogCitjb25maWcgTVREX1NTVDI1TAorCXRyaXN0YXRlICJTdXBwb3J0IFNTVDI1TCAobm9uIEpFREVDKSBTUEkgRmxhc2ggY2hpcHMiCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSCisJaGVscAorCSAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUgbm9uIEpFREVDIFNTVDI1TCBTUEkgZmxhc2ggY2hpcHMsIHVzZWQKKwkgIGZvciBwcm9ncmFtIGFuZCBkYXRhIHN0b3JhZ2UuCisKKwkgIFNldCB1cCB5b3VyIHNwaSBkZXZpY2VzIHdpdGggdGhlIHJpZ2h0IGJvYXJkLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEsCisJICBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGRldmljZSBwYXJ0aXRpb25pbmcuCisKIGNvbmZpZyBNVERfU0xSQU0KIAl0cmlzdGF0ZSAiVW5jYWNoZWQgc3lzdGVtIFJBTSIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQppbmRleCAwOTkzZDVjLi5hYjVjOWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKQEAgLTE2LDMgKzE2LDQgQEAKIG9iai0kKENPTkZJR19NVERfQkxPQ0syTVREKQkrPSBibG9jazJtdGQubwogb2JqLSQoQ09ORklHX01URF9EQVRBRkxBU0gpCSs9IG10ZF9kYXRhZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9NMjVQODApCSs9IG0yNXA4MC5vCitvYmotJChDT05GSUdfTVREX1NTVDI1TCkJKz0gc3N0MjVsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbGFydC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKaW5kZXggNTc4ZGUxYy4uZjQzNTlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKQEAgLTM5Myw3ICszOTMsOCBAQAogCSogZXJhc2UgcmFuZ2UgaXMgYWxpZ25lZCB3aXRoIHRoZSBlcmFzZSBzaXplIHdoaWNoIGlzIGluCiAJKiBlZmZlY3QgaGVyZS4KIAkqLwotICAgaWYgKGluc3RyLT5hZGRyICYgKG10ZC0+ZXJhc2VyZWdpb25zW2ldLmVyYXNlc2l6ZSAtIDEpKSByZXR1cm4gKC1FSU5WQUwpOworICAgaWYgKGkgPCAwIHx8IChpbnN0ci0+YWRkciAmIChtdGQtPmVyYXNlcmVnaW9uc1tpXS5lcmFzZXNpemUgLSAxKSkpCisgICAgICByZXR1cm4gLUVJTlZBTDsKIAogICAgLyogUmVtZW1iZXIgdGhlIGVyYXNlIHJlZ2lvbiB3ZSBzdGFydCBvbiAqLwogICAgZmlyc3QgPSBpOwpAQCAtNDA5LDcgKzQxMCw4IEBACiAgICBpLS07CiAKICAgIC8qIGlzIHRoZSBlbmQgYWxpZ25lZCBvbiBhIGJsb2NrIGJvdW5kYXJ5PyAqLwotICAgaWYgKChpbnN0ci0+YWRkciArIGluc3RyLT5sZW4pICYgKG10ZC0+ZXJhc2VyZWdpb25zW2ldLmVyYXNlc2l6ZSAtIDEpKSByZXR1cm4gKC1FSU5WQUwpOworICAgaWYgKGkgPCAwIHx8ICgoaW5zdHItPmFkZHIgKyBpbnN0ci0+bGVuKSAmIChtdGQtPmVyYXNlcmVnaW9uc1tpXS5lcmFzZXNpemUgLSAxKSkpCisgICAgICByZXR1cm4gLUVJTlZBTDsKIAogICAgYWRkciA9IGluc3RyLT5hZGRyOwogICAgbGVuID0gaW5zdHItPmxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCmluZGV4IDEwZWQxOTUuLjM3OWMzMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwpAQCAtNDQsNiArNDQsMTEgQEAKICNkZWZpbmUJT1BDT0RFX1NFCQkweGQ4CS8qIFNlY3RvciBlcmFzZSAodXN1YWxseSA2NEtpQikgKi8KICNkZWZpbmUJT1BDT0RFX1JESUQJCTB4OWYJLyogUmVhZCBKRURFQyBJRCAqLwogCisvKiBVc2VkIGZvciBTU1QgZmxhc2hlcyBvbmx5LiAqLworI2RlZmluZQlPUENPREVfQlAJCTB4MDIJLyogQnl0ZSBwcm9ncmFtICovCisjZGVmaW5lCU9QQ09ERV9XUkRJCQkweDA0CS8qIFdyaXRlIGRpc2FibGUgKi8KKyNkZWZpbmUJT1BDT0RFX0FBSV9XUAkJMHhhZAkvKiBBdXRvIGFkZHJlc3MgaW5jcmVtZW50IHdvcmQgcHJvZ3JhbSAqLworCiAvKiBTdGF0dXMgUmVnaXN0ZXIgYml0cy4gKi8KICNkZWZpbmUJU1JfV0lQCQkJMQkvKiBXcml0ZSBpbiBwcm9ncmVzcyAqLwogI2RlZmluZQlTUl9XRUwJCQkyCS8qIFdyaXRlIGVuYWJsZSBsYXRjaCAqLwpAQCAtMTMyLDYgKzEzNywxNSBAQAogCXJldHVybiBzcGlfd3JpdGVfdGhlbl9yZWFkKGZsYXNoLT5zcGksICZjb2RlLCAxLCBOVUxMLCAwKTsKIH0KIAorLyoKKyAqIFNlbmQgd3JpdGUgZGlzYmxlIGluc3RydWN0aW9uIHRvIHRoZSBjaGlwLgorICovCitzdGF0aWMgaW5saW5lIGludCB3cml0ZV9kaXNhYmxlKHN0cnVjdCBtMjVwICpmbGFzaCkKK3sKKwl1OAljb2RlID0gT1BDT0RFX1dSREk7CisKKwlyZXR1cm4gc3BpX3dyaXRlX3RoZW5fcmVhZChmbGFzaC0+c3BpLCAmY29kZSwgMSwgTlVMTCwgMCk7Cit9CiAKIC8qCiAgKiBTZXJ2aWNlIHJvdXRpbmUgdG8gcmVhZCBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgcmVhZHksIG9yIHRpbWVvdXQgb2NjdXJzLgpAQCAtNDU0LDYgKzQ2OCwxMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzc3Rfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBtMjVwICpmbGFzaCA9IG10ZF90b19tMjVwKG10ZCk7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXNpemVfdCBhY3R1YWw7CisJaW50IGNtZF9zeiwgcmV0OworCisJaWYgKHJldGxlbikKKwkJKnJldGxlbiA9IDA7CisKKwkvKiBzYW5pdHkgY2hlY2tzICovCisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJaWYgKHRvICsgbGVuID4gZmxhc2gtPm10ZC5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCAoc2l6ZW9mIHQpKTsKKworCXRbMF0udHhfYnVmID0gZmxhc2gtPmNvbW1hbmQ7CisJdFswXS5sZW4gPSBDTURfU0laRTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJdFsxXS50eF9idWYgPSBidWY7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCW11dGV4X2xvY2soJmZsYXNoLT5sb2NrKTsKKworCS8qIFdhaXQgdW50aWwgZmluaXNoZWQgcHJldmlvdXMgd3JpdGUgY29tbWFuZC4gKi8KKwlyZXQgPSB3YWl0X3RpbGxfcmVhZHkoZmxhc2gpOworCWlmIChyZXQpCisJCWdvdG8gdGltZV9vdXQ7CisKKwl3cml0ZV9lbmFibGUoZmxhc2gpOworCisJYWN0dWFsID0gdG8gJSAyOworCS8qIFN0YXJ0IHdyaXRlIGZyb20gb2RkIGFkZHJlc3MuICovCisJaWYgKGFjdHVhbCkgeworCQlmbGFzaC0+Y29tbWFuZFswXSA9IE9QQ09ERV9CUDsKKwkJZmxhc2gtPmNvbW1hbmRbMV0gPSB0byA+PiAxNjsKKwkJZmxhc2gtPmNvbW1hbmRbMl0gPSB0byA+PiA4OworCQlmbGFzaC0+Y29tbWFuZFszXSA9IHRvOworCisJCS8qIHdyaXRlIG9uZSBieXRlLiAqLworCQl0WzFdLmxlbiA9IDE7CisJCXNwaV9zeW5jKGZsYXNoLT5zcGksICZtKTsKKwkJcmV0ID0gd2FpdF90aWxsX3JlYWR5KGZsYXNoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdGltZV9vdXQ7CisJCSpyZXRsZW4gKz0gbS5hY3R1YWxfbGVuZ3RoIC0gQ01EX1NJWkU7CisJfQorCXRvICs9IGFjdHVhbDsKKworCWZsYXNoLT5jb21tYW5kWzBdID0gT1BDT0RFX0FBSV9XUDsKKwlmbGFzaC0+Y29tbWFuZFsxXSA9IHRvID4+IDE2OworCWZsYXNoLT5jb21tYW5kWzJdID0gdG8gPj4gODsKKwlmbGFzaC0+Y29tbWFuZFszXSA9IHRvOworCisJLyogV3JpdGUgb3V0IG1vc3Qgb2YgdGhlIGRhdGEgaGVyZS4gKi8KKwljbWRfc3ogPSBDTURfU0laRTsKKwlmb3IgKDsgYWN0dWFsIDwgbGVuIC0gMTsgYWN0dWFsICs9IDIpIHsKKwkJdFswXS5sZW4gPSBjbWRfc3o7CisJCS8qIHdyaXRlIHR3byBieXRlcy4gKi8KKwkJdFsxXS5sZW4gPSAyOworCQl0WzFdLnR4X2J1ZiA9IGJ1ZiArIGFjdHVhbDsKKworCQlzcGlfc3luYyhmbGFzaC0+c3BpLCAmbSk7CisJCXJldCA9IHdhaXRfdGlsbF9yZWFkeShmbGFzaCk7CisJCWlmIChyZXQpCisJCQlnb3RvIHRpbWVfb3V0OworCQkqcmV0bGVuICs9IG0uYWN0dWFsX2xlbmd0aCAtIGNtZF9zejsKKwkJY21kX3N6ID0gMTsKKwkJdG8gKz0gMjsKKwl9CisJd3JpdGVfZGlzYWJsZShmbGFzaCk7CisJcmV0ID0gd2FpdF90aWxsX3JlYWR5KGZsYXNoKTsKKwlpZiAocmV0KQorCQlnb3RvIHRpbWVfb3V0OworCisJLyogV3JpdGUgb3V0IHRyYWlsaW5nIGJ5dGUgaWYgaXQgZXhpc3RzLiAqLworCWlmIChhY3R1YWwgIT0gbGVuKSB7CisJCXdyaXRlX2VuYWJsZShmbGFzaCk7CisJCWZsYXNoLT5jb21tYW5kWzBdID0gT1BDT0RFX0JQOworCQlmbGFzaC0+Y29tbWFuZFsxXSA9IHRvID4+IDE2OworCQlmbGFzaC0+Y29tbWFuZFsyXSA9IHRvID4+IDg7CisJCWZsYXNoLT5jb21tYW5kWzNdID0gdG87CisJCXRbMF0ubGVuID0gQ01EX1NJWkU7CisJCXRbMV0ubGVuID0gMTsKKwkJdFsxXS50eF9idWYgPSBidWYgKyBhY3R1YWw7CisKKwkJc3BpX3N5bmMoZmxhc2gtPnNwaSwgJm0pOworCQlyZXQgPSB3YWl0X3RpbGxfcmVhZHkoZmxhc2gpOworCQlpZiAocmV0KQorCQkJZ290byB0aW1lX291dDsKKwkJKnJldGxlbiArPSBtLmFjdHVhbF9sZW5ndGggLSBDTURfU0laRTsKKwkJd3JpdGVfZGlzYWJsZShmbGFzaCk7CisJfQorCit0aW1lX291dDoKKwltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNTAxLDcgKzYyMCwxMCBAQAogCXsgImF0MjZkZjMyMSIsICAweDFmNDcwMSwgMCwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKIAogCS8qIE1hY3Jvbml4ICovCisJeyAibXgyNWwzMjA1ZCIsIDB4YzIyMDE2LCAwLCA2NCAqIDEwMjQsIDY0LCB9LAorCXsgIm14MjVsNjQwNWQiLCAweGMyMjAxNywgMCwgNjQgKiAxMDI0LCAxMjgsIH0sCiAJeyAibXgyNWwxMjgwNWQiLCAweGMyMjAxOCwgMCwgNjQgKiAxMDI0LCAyNTYsIH0sCisJeyAibXgyNWwxMjg1NWUiLCAweGMyMjYxOCwgMCwgNjQgKiAxMDI0LCAyNTYsIH0sCiAKIAkvKiBTcGFuc2lvbiAtLSBzaW5nbGUgKGxhcmdlKSBzZWN0b3Igc2l6ZSBvbmx5LCBhdCBsZWFzdAogCSAqIGZvciB0aGUgY2hpcHMgbGlzdGVkIGhlcmUgKHdpdGhvdXQgYm9vdCBzZWN0b3JzKS4KQEAgLTUxMSwxNCArNjMzLDIwIEBACiAJeyAiczI1c2wwMTZhIiwgMHgwMTAyMTQsIDAsIDY0ICogMTAyNCwgMzIsIH0sCiAJeyAiczI1c2wwMzJhIiwgMHgwMTAyMTUsIDAsIDY0ICogMTAyNCwgNjQsIH0sCiAJeyAiczI1c2wwNjRhIiwgMHgwMTAyMTYsIDAsIDY0ICogMTAyNCwgMTI4LCB9LAotICAgICAgICB7ICJzMjVzbDEyODAwIiwgMHgwMTIwMTgsIDB4MDMwMCwgMjU2ICogMTAyNCwgNjQsIH0sCisJeyAiczI1c2wxMjgwMCIsIDB4MDEyMDE4LCAweDAzMDAsIDI1NiAqIDEwMjQsIDY0LCB9LAogCXsgInMyNXNsMTI4MDEiLCAweDAxMjAxOCwgMHgwMzAxLCA2NCAqIDEwMjQsIDI1NiwgfSwKKwl7ICJzMjVmbDEyOXAwIiwgMHgwMTIwMTgsIDB4NGQwMCwgMjU2ICogMTAyNCwgNjQsIH0sCisJeyAiczI1ZmwxMjlwMSIsIDB4MDEyMDE4LCAweDRkMDEsIDY0ICogMTAyNCwgMjU2LCB9LAogCiAJLyogU1NUIC0tIGxhcmdlIGVyYXNlIHNpemVzIGFyZSAib3ZlcmxheXMiLCAic2VjdG9ycyIgYXJlIDRLICovCiAJeyAic3N0MjV2ZjA0MGIiLCAweGJmMjU4ZCwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAogCXsgInNzdDI1dmYwODBiIiwgMHhiZjI1OGUsIDAsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCiAJeyAic3N0MjV2ZjAxNmIiLCAweGJmMjU0MSwgMCwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKIAl7ICJzc3QyNXZmMDMyYiIsIDB4YmYyNTRhLCAwLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAorCXsgInNzdDI1d2Y1MTIiLCAgMHhiZjI1MDEsIDAsIDY0ICogMTAyNCwgMSwgU0VDVF80SywgfSwKKwl7ICJzc3QyNXdmMDEwIiwgIDB4YmYyNTAyLCAwLCA2NCAqIDEwMjQsIDIsIFNFQ1RfNEssIH0sCisJeyAic3N0MjV3ZjAyMCIsICAweGJmMjUwMywgMCwgNjQgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAorCXsgInNzdDI1d2YwNDAiLCAgMHhiZjI1MDQsIDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKIAogCS8qIFNUIE1pY3JvZWxlY3Ryb25pY3MgLS0gbmV3ZXIgcHJvZHVjdGlvbiBtYXkgaGF2ZSBmZWF0dXJlIHVwZGF0ZXMgKi8KIAl7ICJtMjVwMDUiLCAgMHgyMDIwMTAsICAwLCAzMiAqIDEwMjQsIDIsIH0sCkBAIC02NjcsNyArNzk1LDEyIEBACiAJZmxhc2gtPm10ZC5zaXplID0gaW5mby0+c2VjdG9yX3NpemUgKiBpbmZvLT5uX3NlY3RvcnM7CiAJZmxhc2gtPm10ZC5lcmFzZSA9IG0yNXA4MF9lcmFzZTsKIAlmbGFzaC0+bXRkLnJlYWQgPSBtMjVwODBfcmVhZDsKLQlmbGFzaC0+bXRkLndyaXRlID0gbTI1cDgwX3dyaXRlOworCisJLyogc3N0IGZsYXNoIGNoaXBzIHVzZSBBQUkgd29yZCBwcm9ncmFtICovCisJaWYgKGluZm8tPmplZGVjX2lkID4+IDE2ID09IDB4YmYpCisJCWZsYXNoLT5tdGQud3JpdGUgPSBzc3Rfd3JpdGU7CisJZWxzZQorCQlmbGFzaC0+bXRkLndyaXRlID0gbTI1cDgwX3dyaXRlOwogCiAJLyogcHJlZmVyICJzbWFsbCBzZWN0b3IiIGVyYXNlIGlmIHBvc3NpYmxlICovCiAJaWYgKGluZm8tPmZsYWdzICYgU0VDVF80SykgewpAQCAtNzc2LDEzICs5MDksMTMgQEAKIH07CiAKIAotc3RhdGljIGludCBtMjVwODBfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbTI1cDgwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbTI1cDgwX2RyaXZlcik7CiB9CiAKIAotc3RhdGljIHZvaWQgbTI1cDgwX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtMjVwODBfZXhpdCh2b2lkKQogewogCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbTI1cDgwX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCmluZGV4IDQzOTc2YWEuLjkzZTM2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAkJKHZvaWQpIGRhdGFmbGFzaF93YWl0cmVhZHkocHJpdi0+c3BpKTsKIAogCi0jaWZkZWYgQ09ORklHX01URF9EQVRBRkxBU0hfVkVSSUZZX1dSSVRFCisjaWZkZWYgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZCiAKIAkJLyogKDMpIENvbXBhcmUgdG8gQnVmZmVyMSAqLwogCQlhZGRyID0gcGFnZWFkZHIgPDwgcHJpdi0+cGFnZV9vZmZzZXQ7CkBAIC00MzAsNyArNDMwLDcgQEAKIAkJfSBlbHNlCiAJCQlzdGF0dXMgPSAwOwogCi0jZW5kaWYJLyogQ09ORklHX01URF9EQVRBRkxBU0hfVkVSSUZZX1dSSVRFICovCisjZW5kaWYJLyogQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZICovCiAKIAkJcmVtYWluaW5nID0gcmVtYWluaW5nIC0gd3JpdGVsZW47CiAJCXBhZ2VhZGRyKys7CkBAIC05NjYsMyArOTY2LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkFuZHJldyBWaWN0b3IsIERhdmlkIEJyb3duZWxsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBEYXRhRmxhc2ggZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInNwaTptdGRfZGF0YWZsYXNoIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMKaW5kZXggMDg4ZmJiNy4uMTY5NmJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9waHJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcGhyYW0uYwpAQCAtMTQsNiArMTQsOSBAQAogICogRXhhbXBsZToKICAqCXBocmFtPXN3YXAsNjRNaSwxMjhNaSBwaHJhbT10ZXN0LDkwME1pLDFNaQogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgInBocmFtOiAiIGZtdAorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjMsOCArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAKLSNkZWZpbmUgRVJST1IoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgInBocmFtOiAiIGZtdCAsICMjIGFyZ3MpCi0KIHN0cnVjdCBwaHJhbV9tdGRfbGlzdCB7CiAJc3RydWN0IG10ZF9pbmZvIG10ZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xMzIsNyArMTMzLDcgQEAKIAlyZXQgPSAtRUlPOwogCW5ldy0+bXRkLnByaXYgPSBpb3JlbWFwKHN0YXJ0LCBsZW4pOwogCWlmICghbmV3LT5tdGQucHJpdikgewotCQlFUlJPUigiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlwcl9lcnIoImlvcmVtYXAgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQxOwogCX0KIApAQCAtMTUyLDcgKzE1Myw3IEBACiAKIAlyZXQgPSAtRUFHQUlOOwogCWlmIChhZGRfbXRkX2RldmljZSgmbmV3LT5tdGQpKSB7Ci0JCUVSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV3IGRldmljZVxuIik7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldyBkZXZpY2VcbiIpOwogCQlnb3RvIG91dDI7CiAJfQogCkBAIC0yMjcsOCArMjI4LDggQEAKIAogCiAjZGVmaW5lIHBhcnNlX2VycihmbXQsIGFyZ3MuLi4pIGRvIHsJXAotCUVSUk9SKGZtdCAsICMjIGFyZ3MpOwlcCi0JcmV0dXJuIDA7CQlcCisJcHJfZXJyKGZtdCAsICMjIGFyZ3MpOwlcCisJcmV0dXJuIDE7CQlcCiB9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50IHBocmFtX3NldHVwKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCkBAIC0yNTYsMTIgKzI1Nyw4IEBACiAJCXBhcnNlX2Vycigibm90IGVub3VnaCBhcmd1bWVudHNcbiIpOwogCiAJcmV0ID0gcGFyc2VfbmFtZSgmbmFtZSwgdG9rZW5bMF0pOwotCWlmIChyZXQgPT0gLUVOT01FTSkKLQkJcGFyc2VfZXJyKCJvdXQgb2YgbWVtb3J5XG4iKTsKLQlpZiAocmV0ID09IC1FTk9TUEMpCi0JCXBhcnNlX2VycigibmFtZSB0b28gbG9uZ1xuIik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBwYXJzZV9udW0zMigmc3RhcnQsIHRva2VuWzFdKTsKIAlpZiAocmV0KSB7CkBAIC0yNzUsOSArMjcyLDExIEBACiAJCXBhcnNlX2VycigiaWxsZWdhbCBkZXZpY2UgbGVuZ3RoXG4iKTsKIAl9CiAKLQlyZWdpc3Rlcl9kZXZpY2UobmFtZSwgc3RhcnQsIGxlbik7CisJcmV0ID0gcmVnaXN0ZXJfZGV2aWNlKG5hbWUsIHN0YXJ0LCBsZW4pOworCWlmICghcmV0KQorCQlwcl9pbmZvKCIlcyBkZXZpY2U6ICUjeCBhdCAlI3hcbiIsIG5hbWUsIGxlbiwgc3RhcnQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogbW9kdWxlX3BhcmFtX2NhbGwocGhyYW0sIHBocmFtX3NldHVwLCBOVUxMLCBOVUxMLCAwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jCmluZGV4IDAwMjQ4ZTguLjNhYTA1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBpbml0X3NscmFtKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3NscmFtKHZvaWQpCiB7CiAJY2hhciAqZGV2bmFtZTsKIAlpbnQgaTsKQEAgLTM0MSw3ICszNDEsNyBAQAogI2Vsc2UKIAlpbnQgY291bnQ7CiAKLQlmb3IgKGNvdW50ID0gMDsgKG1hcFtjb3VudF0pICYmIChjb3VudCA8IFNMUkFNX01BWF9ERVZJQ0VTX1BBUkFNUyk7CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgU0xSQU1fTUFYX0RFVklDRVNfUEFSQU1TICYmIG1hcFtjb3VudF07CiAJCQljb3VudCsrKSB7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3NzdDI1bC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmJhZjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYwpAQCAtMCwwICsxLDUxMiBAQAorLyoKKyAqIHNzdDI1bC5jCisgKgorICogRHJpdmVyIGZvciBTU1QyNUwgU1BJIEZsYXNoIGNoaXBzCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDkgQmx1ZXdhdGVyIFN5c3RlbXMgTHRkCisgKiBBdXRob3I6IEFuZHJlIFJlbmF1ZCA8YW5kcmVAYmx1ZXdhdGVyc3lzLmNvbT4KKyAqIEF1dGhvcjogUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBtMjVwODAuYworICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgorCisvKiBFcmFzZXMgY2FuIHRha2UgdXAgdG8gMyBzZWNvbmRzISAqLworI2RlZmluZSBNQVhfUkVBRFlfV0FJVF9KSUZGSUVTCW1zZWNzX3RvX2ppZmZpZXMoMzAwMCkKKworI2RlZmluZSBTU1QyNUxfQ01EX1dSU1IJCTB4MDEJLyogV3JpdGUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFNTVDI1TF9DTURfV1JESQkJMHgwNAkvKiBXcml0ZSBkaXNhYmxlICovCisjZGVmaW5lIFNTVDI1TF9DTURfUkRTUgkJMHgwNQkvKiBSZWFkIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBTU1QyNUxfQ01EX1dSRU4JCTB4MDYJLyogV3JpdGUgZW5hYmxlICovCisjZGVmaW5lIFNTVDI1TF9DTURfUkVBRAkJMHgwMwkvKiBIaWdoIHNwZWVkIHJlYWQgKi8KKworI2RlZmluZSBTU1QyNUxfQ01EX0VXU1IJCTB4NTAJLyogRW5hYmxlIHdyaXRlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBTU1QyNUxfQ01EX1NFQ1RPUl9FUkFTRQkweDIwCS8qIEVyYXNlIHNlY3RvciAqLworI2RlZmluZSBTU1QyNUxfQ01EX1JFQURfSUQJMHg5MAkvKiBSZWFkIGRldmljZSBJRCAqLworI2RlZmluZSBTU1QyNUxfQ01EX0FBSV9QUk9HUkFNCTB4YWYJLyogQXV0byBhZGRyZXNzIGluY3JlbWVudCAqLworCisjZGVmaW5lIFNTVDI1TF9TVEFUVVNfQlVTWQkoMSA8PCAwKQkvKiBDaGlwIGlzIGJ1c3kgKi8KKyNkZWZpbmUgU1NUMjVMX1NUQVRVU19XUkVOCSgxIDw8IDEpCS8qIFdyaXRlIGVuYWJsZWQgKi8KKyNkZWZpbmUgU1NUMjVMX1NUQVRVU19CUDAJKDEgPDwgMikJLyogQmxvY2sgcHJvdGVjdGlvbiAwICovCisjZGVmaW5lIFNTVDI1TF9TVEFUVVNfQlAxCSgxIDw8IDMpCS8qIEJsb2NrIHByb3RlY3Rpb24gMSAqLworCitzdHJ1Y3Qgc3N0MjVsX2ZsYXNoIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3QgbXRkX2luZm8JCW10ZDsKKworCWludCAJCQlwYXJ0aXRpb25lZDsKK307CisKK3N0cnVjdCBmbGFzaF9pbmZvIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwl1aW50MTZfdAkJZGV2aWNlX2lkOworCXVuc2lnbmVkCQlwYWdlX3NpemU7CisJdW5zaWduZWQJCW5yX3BhZ2VzOworCXVuc2lnbmVkCQllcmFzZV9zaXplOworfTsKKworI2RlZmluZSB0b19zc3QyNWxfZmxhc2goeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBzc3QyNWxfZmxhc2gsIG10ZCkKKworc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvIF9faW5pdGRhdGEgc3N0MjVsX2ZsYXNoX2luZm9bXSA9IHsKKwl7InNzdDI1bGYwMjBhIiwgMHhiZjQzLCAyNTYsIDEwMjQsIDQwOTZ9LAorCXsic3N0MjVsZjA0MGEiLAkweGJmNDQsCTI1NiwgMjA0OCwgNDA5Nn0sCit9OworCitzdGF0aWMgaW50IHNzdDI1bF9zdGF0dXMoc3RydWN0IHNzdDI1bF9mbGFzaCAqZmxhc2gsIGludCAqc3RhdHVzKQoreworCXVuc2lnbmVkIGNoYXIgY29tbWFuZCwgcmVzcG9uc2U7CisJaW50IGVycjsKKworCWNvbW1hbmQgPSBTU1QyNUxfQ01EX1JEU1I7CisJZXJyID0gc3BpX3dyaXRlX3RoZW5fcmVhZChmbGFzaC0+c3BpLCAmY29tbWFuZCwgMSwgJnJlc3BvbnNlLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCSpzdGF0dXMgPSByZXNwb25zZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc3QyNWxfd3JpdGVfZW5hYmxlKHN0cnVjdCBzc3QyNWxfZmxhc2ggKmZsYXNoLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGNoYXIgY29tbWFuZFsyXTsKKwlpbnQgc3RhdHVzLCBlcnI7CisKKwljb21tYW5kWzBdID0gZW5hYmxlID8gU1NUMjVMX0NNRF9XUkVOIDogU1NUMjVMX0NNRF9XUkRJOworCWVyciA9IHNwaV93cml0ZShmbGFzaC0+c3BpLCBjb21tYW5kLCAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJY29tbWFuZFswXSA9IFNTVDI1TF9DTURfRVdTUjsKKwllcnIgPSBzcGlfd3JpdGUoZmxhc2gtPnNwaSwgY29tbWFuZCwgMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWNvbW1hbmRbMF0gPSBTU1QyNUxfQ01EX1dSU1I7CisJY29tbWFuZFsxXSA9IGVuYWJsZSA/IDAgOiBTU1QyNUxfU1RBVFVTX0JQMCB8IFNTVDI1TF9TVEFUVVNfQlAxOworCWVyciA9IHNwaV93cml0ZShmbGFzaC0+c3BpLCBjb21tYW5kLCAyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGVuYWJsZSkgeworCQllcnIgPSBzc3QyNWxfc3RhdHVzKGZsYXNoLCAmc3RhdHVzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmICghKHN0YXR1cyAmIFNTVDI1TF9TVEFUVVNfV1JFTikpCisJCQlyZXR1cm4gLUVST0ZTOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzdDI1bF93YWl0X3RpbGxfcmVhZHkoc3RydWN0IHNzdDI1bF9mbGFzaCAqZmxhc2gpCit7CisJdW5zaWduZWQgbG9uZyBkZWFkbGluZTsKKwlpbnQgc3RhdHVzLCBlcnI7CisKKwlkZWFkbGluZSA9IGppZmZpZXMgKyBNQVhfUkVBRFlfV0FJVF9KSUZGSUVTOworCWRvIHsKKwkJZXJyID0gc3N0MjVsX3N0YXR1cyhmbGFzaCwgJnN0YXR1cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoIShzdGF0dXMgJiBTU1QyNUxfU1RBVFVTX0JVU1kpKQorCQkJcmV0dXJuIDA7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJfSB3aGlsZSAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZGVhZGxpbmUpKTsKKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IHNzdDI1bF9lcmFzZV9zZWN0b3Ioc3RydWN0IHNzdDI1bF9mbGFzaCAqZmxhc2gsIHVpbnQzMl90IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmRbNF07CisJaW50IGVycjsKKworCWVyciA9IHNzdDI1bF93cml0ZV9lbmFibGUoZmxhc2gsIDEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwljb21tYW5kWzBdID0gU1NUMjVMX0NNRF9TRUNUT1JfRVJBU0U7CisJY29tbWFuZFsxXSA9IG9mZnNldCA+PiAxNjsKKwljb21tYW5kWzJdID0gb2Zmc2V0ID4+IDg7CisJY29tbWFuZFszXSA9IG9mZnNldDsKKwllcnIgPSBzcGlfd3JpdGUoZmxhc2gtPnNwaSwgY29tbWFuZCwgNCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNzdDI1bF93YWl0X3RpbGxfcmVhZHkoZmxhc2gpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc3N0MjVsX3dyaXRlX2VuYWJsZShmbGFzaCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3N0MjVsX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCit7CisJc3RydWN0IHNzdDI1bF9mbGFzaCAqZmxhc2ggPSB0b19zc3QyNWxfZmxhc2gobXRkKTsKKwl1aW50MzJfdCBhZGRyLCBlbmQ7CisJaW50IGVycjsKKworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAoaW5zdHItPmFkZHIgKyBpbnN0ci0+bGVuID4gZmxhc2gtPm10ZC5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodWludDMyX3QpaW5zdHItPmxlbiAlIG10ZC0+ZXJhc2VzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodWludDMyX3QpaW5zdHItPmFkZHIgJSBtdGQtPmVyYXNlc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZGRyID0gaW5zdHItPmFkZHI7CisJZW5kID0gYWRkciArIGluc3RyLT5sZW47CisKKwltdXRleF9sb2NrKCZmbGFzaC0+bG9jayk7CisKKwllcnIgPSBzc3QyNWxfd2FpdF90aWxsX3JlYWR5KGZsYXNoKTsKKwlpZiAoZXJyKSB7CisJCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOworCQlyZXR1cm4gZXJyOworCX0KKworCXdoaWxlIChhZGRyIDwgZW5kKSB7CisJCWVyciA9IHNzdDI1bF9lcmFzZV9zZWN0b3IoZmxhc2gsIGFkZHIpOworCQlpZiAoZXJyKSB7CisJCQltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKKwkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CisJCQlkZXZfZXJyKCZmbGFzaC0+c3BpLT5kZXYsICJFcmFzZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWFkZHIgKz0gbXRkLT5lcmFzZXNpemU7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisKKwlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKKwltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzdDI1bF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJICAgICAgIHNpemVfdCAqcmV0bGVuLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IHNzdDI1bF9mbGFzaCAqZmxhc2ggPSB0b19zc3QyNWxfZmxhc2gobXRkKTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRyYW5zZmVyWzJdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtZXNzYWdlOworCXVuc2lnbmVkIGNoYXIgY29tbWFuZFs0XTsKKwlpbnQgcmV0OworCisJLyogU2FuaXR5IGNoZWNraW5nICovCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChmcm9tICsgbGVuID4gZmxhc2gtPm10ZC5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZXRsZW4pCisJCSpyZXRsZW4gPSAwOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbWVzc2FnZSk7CisJbWVtc2V0KCZ0cmFuc2ZlciwgMCwgc2l6ZW9mKHRyYW5zZmVyKSk7CisKKwljb21tYW5kWzBdID0gU1NUMjVMX0NNRF9SRUFEOworCWNvbW1hbmRbMV0gPSBmcm9tID4+IDE2OworCWNvbW1hbmRbMl0gPSBmcm9tID4+IDg7CisJY29tbWFuZFszXSA9IGZyb207CisKKwl0cmFuc2ZlclswXS50eF9idWYgPSBjb21tYW5kOworCXRyYW5zZmVyWzBdLmxlbiA9IHNpemVvZihjb21tYW5kKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdHJhbnNmZXJbMF0sICZtZXNzYWdlKTsKKworCXRyYW5zZmVyWzFdLnJ4X2J1ZiA9IGJ1ZjsKKwl0cmFuc2ZlclsxXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRyYW5zZmVyWzFdLCAmbWVzc2FnZSk7CisKKwltdXRleF9sb2NrKCZmbGFzaC0+bG9jayk7CisKKwkvKiBXYWl0IGZvciBwcmV2aW91cyB3cml0ZS9lcmFzZSB0byBjb21wbGV0ZSAqLworCXJldCA9IHNzdDI1bF93YWl0X3RpbGxfcmVhZHkoZmxhc2gpOworCWlmIChyZXQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJCXJldHVybiByZXQ7CisJfQorCisJc3BpX3N5bmMoZmxhc2gtPnNwaSwgJm1lc3NhZ2UpOworCisJaWYgKHJldGxlbiAmJiBtZXNzYWdlLmFjdHVhbF9sZW5ndGggPiBzaXplb2YoY29tbWFuZCkpCisJCSpyZXRsZW4gKz0gbWVzc2FnZS5hY3R1YWxfbGVuZ3RoIC0gc2l6ZW9mKGNvbW1hbmQpOworCisJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3N0MjVsX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBzc3QyNWxfZmxhc2ggKmZsYXNoID0gdG9fc3N0MjVsX2ZsYXNoKG10ZCk7CisJaW50IGksIGosIHJldCwgYnl0ZXMsIGNvcGllZCA9IDA7CisJdW5zaWduZWQgY2hhciBjb21tYW5kWzVdOworCisJLyogU2FuaXR5IGNoZWNrcyAqLworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCWlmICh0byArIGxlbiA+IGZsYXNoLT5tdGQuc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHVpbnQzMl90KXRvICUgbXRkLT53cml0ZXNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZmxhc2gtPmxvY2spOworCisJcmV0ID0gc3N0MjVsX3dyaXRlX2VuYWJsZShmbGFzaCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IG10ZC0+d3JpdGVzaXplKSB7CisJCXJldCA9IHNzdDI1bF93YWl0X3RpbGxfcmVhZHkoZmxhc2gpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJLyogV3JpdGUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHBhZ2UgKi8KKwkJY29tbWFuZFswXSA9IFNTVDI1TF9DTURfQUFJX1BST0dSQU07CisJCWNvbW1hbmRbMV0gPSAodG8gKyBpKSA+PiAxNjsKKwkJY29tbWFuZFsyXSA9ICh0byArIGkpID4+IDg7CisJCWNvbW1hbmRbM10gPSAodG8gKyBpKTsKKwkJY29tbWFuZFs0XSA9IGJ1ZltpXTsKKwkJcmV0ID0gc3BpX3dyaXRlKGZsYXNoLT5zcGksIGNvbW1hbmQsIDUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQljb3BpZWQrKzsKKworCQkvKgorCQkgKiBXcml0ZSB0aGUgcmVtYWluaW5nIGJ5dGVzIHVzaW5nIGF1dG8gYWRkcmVzcworCQkgKiBpbmNyZW1lbnQgbW9kZQorCQkgKi8KKwkJYnl0ZXMgPSBtaW5fdCh1aW50MzJfdCwgbXRkLT53cml0ZXNpemUsIGxlbiAtIGkpOworCQlmb3IgKGogPSAxOyBqIDwgYnl0ZXM7IGorKywgY29waWVkKyspIHsKKwkJCXJldCA9IHNzdDI1bF93YWl0X3RpbGxfcmVhZHkoZmxhc2gpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKworCQkJY29tbWFuZFsxXSA9IGJ1ZltpICsgal07CisJCQlyZXQgPSBzcGlfd3JpdGUoZmxhc2gtPnNwaSwgY29tbWFuZCwgMik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJcmV0ID0gc3N0MjVsX3dyaXRlX2VuYWJsZShmbGFzaCwgMCk7CisKKwlpZiAocmV0bGVuKQorCQkqcmV0bGVuID0gY29waWVkOworCisJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvICpfX2luaXQgc3N0MjVsX21hdGNoX2RldmljZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBmbGFzaF9pbmZvICpmbGFzaF9pbmZvID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmRbNF0sIHJlc3BvbnNlOworCWludCBpLCBlcnI7CisJdWludDE2X3QgaWQ7CisKKwljb21tYW5kWzBdID0gU1NUMjVMX0NNRF9SRUFEX0lEOworCWNvbW1hbmRbMV0gPSAwOworCWNvbW1hbmRbMl0gPSAwOworCWNvbW1hbmRbM10gPSAwOworCWVyciA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCBjb21tYW5kLCBzaXplb2YoY29tbWFuZCksICZyZXNwb25zZSwgMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJlcnJvciByZWFkaW5nIGRldmljZSBpZCBtc2JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZCA9IHJlc3BvbnNlIDw8IDg7CisKKwljb21tYW5kWzBdID0gU1NUMjVMX0NNRF9SRUFEX0lEOworCWNvbW1hbmRbMV0gPSAwOworCWNvbW1hbmRbMl0gPSAwOworCWNvbW1hbmRbM10gPSAxOworCWVyciA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCBjb21tYW5kLCBzaXplb2YoY29tbWFuZCksICZyZXNwb25zZSwgMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJlcnJvciByZWFkaW5nIGRldmljZSBpZCBsc2JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZCB8PSByZXNwb25zZTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzdDI1bF9mbGFzaF9pbmZvKTsgaSsrKQorCQlpZiAoc3N0MjVsX2ZsYXNoX2luZm9baV0uZGV2aWNlX2lkID09IGlkKQorCQkJZmxhc2hfaW5mbyA9ICZzc3QyNWxfZmxhc2hfaW5mb1tpXTsKKworCWlmICghZmxhc2hfaW5mbykKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJ1bmtub3duIGlkICUuNHhcbiIsIGlkKTsKKworCXJldHVybiBmbGFzaF9pbmZvOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzc3QyNWxfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgZmxhc2hfaW5mbyAqZmxhc2hfaW5mbzsKKwlzdHJ1Y3Qgc3N0MjVsX2ZsYXNoICpmbGFzaDsKKwlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqZGF0YTsKKwlpbnQgcmV0LCBpOworCisJZmxhc2hfaW5mbyA9IHNzdDI1bF9tYXRjaF9kZXZpY2Uoc3BpKTsKKwlpZiAoIWZsYXNoX2luZm8pCisJCXJldHVybiAtRU5PREVWOworCisJZmxhc2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3N0MjVsX2ZsYXNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbGFzaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmbGFzaC0+c3BpID0gc3BpOworCW11dGV4X2luaXQoJmZsYXNoLT5sb2NrKTsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBmbGFzaCk7CisKKwlkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoZGF0YSAmJiBkYXRhLT5uYW1lKQorCQlmbGFzaC0+bXRkLm5hbWUgPSBkYXRhLT5uYW1lOworCWVsc2UKKwkJZmxhc2gtPm10ZC5uYW1lID0gZGV2X25hbWUoJnNwaS0+ZGV2KTsKKworCWZsYXNoLT5tdGQudHlwZQkJPSBNVERfTk9SRkxBU0g7CisJZmxhc2gtPm10ZC5mbGFncwk9IE1URF9DQVBfTk9SRkxBU0g7CisJZmxhc2gtPm10ZC5lcmFzZXNpemUJPSBmbGFzaF9pbmZvLT5lcmFzZV9zaXplOworCWZsYXNoLT5tdGQud3JpdGVzaXplCT0gZmxhc2hfaW5mby0+cGFnZV9zaXplOworCWZsYXNoLT5tdGQuc2l6ZQkJPSBmbGFzaF9pbmZvLT5wYWdlX3NpemUgKiBmbGFzaF9pbmZvLT5ucl9wYWdlczsKKwlmbGFzaC0+bXRkLmVyYXNlCT0gc3N0MjVsX2VyYXNlOworCWZsYXNoLT5tdGQucmVhZAkJPSBzc3QyNWxfcmVhZDsKKwlmbGFzaC0+bXRkLndyaXRlIAk9IHNzdDI1bF93cml0ZTsKKworCWRldl9pbmZvKCZzcGktPmRldiwgIiVzICglbGxkIEtpQilcbiIsIGZsYXNoX2luZm8tPm5hbWUsCisJCSAobG9uZyBsb25nKWZsYXNoLT5tdGQuc2l6ZSA+PiAxMCk7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwyLAorCSAgICAgICJtdGQgLm5hbWUgPSAlcywgLnNpemUgPSAweCVsbHggKCVsbGRNaUIpICIKKwkgICAgICAiLmVyYXNlc2l6ZSA9IDB4JS44eCAoJXVLaUIpIC5udW1lcmFzZXJlZ2lvbnMgPSAlZFxuIiwKKwkgICAgICBmbGFzaC0+bXRkLm5hbWUsCisJICAgICAgKGxvbmcgbG9uZylmbGFzaC0+bXRkLnNpemUsIChsb25nIGxvbmcpKGZsYXNoLT5tdGQuc2l6ZSA+PiAyMCksCisJICAgICAgZmxhc2gtPm10ZC5lcmFzZXNpemUsIGZsYXNoLT5tdGQuZXJhc2VzaXplIC8gMTAyNCwKKwkgICAgICBmbGFzaC0+bXRkLm51bWVyYXNlcmVnaW9ucyk7CisKKwlpZiAoZmxhc2gtPm10ZC5udW1lcmFzZXJlZ2lvbnMpCisJCWZvciAoaSA9IDA7IGkgPCBmbGFzaC0+bXRkLm51bWVyYXNlcmVnaW9uczsgaSsrKQorCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMiwKKwkJCSAgICAgICJtdGQuZXJhc2VyZWdpb25zWyVkXSA9IHsgLm9mZnNldCA9IDB4JWxseCwgIgorCQkJICAgICAgIi5lcmFzZXNpemUgPSAweCUuOHggKCV1S2lCKSwgIgorCQkJICAgICAgIi5udW1ibG9ja3MgPSAlZCB9XG4iLAorCQkJICAgICAgaSwgKGxvbmcgbG9uZylmbGFzaC0+bXRkLmVyYXNlcmVnaW9uc1tpXS5vZmZzZXQsCisJCQkgICAgICBmbGFzaC0+bXRkLmVyYXNlcmVnaW9uc1tpXS5lcmFzZXNpemUsCisJCQkgICAgICBmbGFzaC0+bXRkLmVyYXNlcmVnaW9uc1tpXS5lcmFzZXNpemUgLyAxMDI0LAorCQkJICAgICAgZmxhc2gtPm10ZC5lcmFzZXJlZ2lvbnNbaV0ubnVtYmxvY2tzKTsKKworCWlmIChtdGRfaGFzX3BhcnRpdGlvbnMoKSkgeworCQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMgPSBOVUxMOworCQlpbnQgbnJfcGFydHMgPSAwOworCisJCWlmIChtdGRfaGFzX2NtZGxpbmVwYXJ0KCkpIHsKKwkJCXN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0KKwkJCQl7ImNtZGxpbmVwYXJ0IiwgTlVMTH07CisKKwkJCW5yX3BhcnRzID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoJmZsYXNoLT5tdGQsCisJCQkJCQkJcGFydF9wcm9iZXMsCisJCQkJCQkJJnBhcnRzLCAwKTsKKwkJfQorCisJCWlmIChucl9wYXJ0cyA8PSAwICYmIGRhdGEgJiYgZGF0YS0+cGFydHMpIHsKKwkJCXBhcnRzID0gZGF0YS0+cGFydHM7CisJCQlucl9wYXJ0cyA9IGRhdGEtPm5yX3BhcnRzOworCQl9CisKKwkJaWYgKG5yX3BhcnRzID4gMCkgeworCQkJZm9yIChpID0gMDsgaSA8IG5yX3BhcnRzOyBpKyspIHsKKwkJCQlERUJVRyhNVERfREVCVUdfTEVWRUwyLCAicGFydGl0aW9uc1slZF0gPSAiCisJCQkJICAgICAgInsubmFtZSA9ICVzLCAub2Zmc2V0ID0gMHglbGx4LCAiCisJCQkJICAgICAgIi5zaXplID0gMHglbGx4ICglbGxkS2lCKSB9XG4iLAorCQkJCSAgICAgIGksIHBhcnRzW2ldLm5hbWUsCisJCQkJICAgICAgKGxvbmcgbG9uZylwYXJ0c1tpXS5vZmZzZXQsCisJCQkJICAgICAgKGxvbmcgbG9uZylwYXJ0c1tpXS5zaXplLAorCQkJCSAgICAgIChsb25nIGxvbmcpKHBhcnRzW2ldLnNpemUgPj4gMTApKTsKKwkJCX0KKworCQkJZmxhc2gtPnBhcnRpdGlvbmVkID0gMTsKKwkJCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoJmZsYXNoLT5tdGQsCisJCQkJCQkgIHBhcnRzLCBucl9wYXJ0cyk7CisJCX0KKworCX0gZWxzZSBpZiAoZGF0YS0+bnJfcGFydHMpIHsKKwkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAiaWdub3JpbmcgJWQgZGVmYXVsdCBwYXJ0aXRpb25zIG9uICVzXG4iLAorCQkJIGRhdGEtPm5yX3BhcnRzLCBkYXRhLT5uYW1lKTsKKwl9CisKKwlyZXQgPSBhZGRfbXRkX2RldmljZSgmZmxhc2gtPm10ZCk7CisJaWYgKHJldCA9PSAxKSB7CisJCWtmcmVlKGZsYXNoKTsKKwkJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBzc3QyNWxfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNzdDI1bF9mbGFzaCAqZmxhc2ggPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKG10ZF9oYXNfcGFydGl0aW9ucygpICYmIGZsYXNoLT5wYXJ0aXRpb25lZCkKKwkJcmV0ID0gZGVsX210ZF9wYXJ0aXRpb25zKCZmbGFzaC0+bXRkKTsKKwllbHNlCisJCXJldCA9IGRlbF9tdGRfZGV2aWNlKCZmbGFzaC0+bXRkKTsKKwlpZiAocmV0ID09IDApCisJCWtmcmVlKGZsYXNoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgc3N0MjVsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJzc3QyNWwiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gc3N0MjVsX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3Aoc3N0MjVsX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzc3QyNWxfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZzc3QyNWxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNzdDI1bF9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzc3QyNWxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3N0MjVsX2luaXQpOworbW9kdWxlX2V4aXQoc3N0MjVsX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBTUEkgZHJpdmVyIGZvciBTU1QyNUwgRmxhc2ggY2hpcHMiKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJlIFJlbmF1ZCA8YW5kcmVAYmx1ZXdhdGVyc3lzLmNvbT4sICIKKwkgICAgICAiUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2Z0bC5jIGIvZHJpdmVycy9tdGQvZnRsLmMKaW5kZXggYTc5MGMwNi4uZTU2ZDZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZnRsLmMKKysrIGIvZHJpdmVycy9tdGQvZnRsLmMKQEAgLTEwOTksNyArMTA5OSw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGludCBpbml0X2Z0bCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5pdF9mdGwodm9pZCkKIHsKIAlyZXR1cm4gcmVnaXN0ZXJfbXRkX2Jsa3RyYW5zKCZmdGxfdHIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMgYi9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGQ4Y2YyOWMuLjhhY2E1NTIKLS0tIGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCQkJICogd2FpdGluZyB0byBiZSBwaWNrZWQgdXAuIFdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gZm9sZAogCQkJICogYSBjaGFpbiB0byBtYWtlIHJvb20uCiAJCQkgKi8KLQkJCXRoaXNFVU4gPSBJTkZUTF9tYWtlZnJlZWJsb2NrKGluZnRsLCBCTE9DS19OSUwpOworCQkJdGhpc0VVTiA9IElORlRMX21ha2VmcmVlYmxvY2soaW5mdGwsIGJsb2NrKTsKIAogCQkJLyoKIAkJCSAqIEhvcGVmdWxseSB3ZSBmcmVlIHNvbWV0aGluZywgbGV0cyB0cnkgYWdhaW4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggN2E1OGJkNS4uM2E5YTk2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtNDg0LDkgKzQ4NCwxOSBAQAogCiAJICBJZiBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgYmZpbi1hc3luYy1mbGFzaC4KIAorY29uZmlnIE1URF9HUElPX0FERFIKKwl0cmlzdGF0ZSAiR1BJTy1hc3Npc3RlZCBGbGFzaCBDaGlwIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBNVERfQ09NUExFWF9NQVBQSU5HUworCXNlbGVjdCBNVERfUEFSVElUSU9OUworCWhlbHAKKwkgIE1hcCBkcml2ZXIgd2hpY2ggYWxsb3dzIGZsYXNoZXMgdG8gYmUgcGFydGlhbGx5IHBoeXNpY2FsbHkgYWRkcmVzc2VkCisJICBhbmQgYXNzaXN0ZWQgYnkgR1BJT3MuCisKKwkgIElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCBncGlvLWFkZHItZmxhc2guCisKIGNvbmZpZyBNVERfVUNMSU5VWAogCWJvb2wgIkdlbmVyaWMgdUNsaW51eCBSQU0vUk9NIGZpbGVzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1URF9QQVJUSVRJT05TICYmIE1URF9SQU0gJiYgIU1NVQorCWRlcGVuZHMgb24gTVREX1BBUlRJVElPTlMgJiYgTVREX1JBTT15ICYmICFNTVUKIAloZWxwCiAJICBNYXAgZHJpdmVyIHRvIHN1cHBvcnQgaW1hZ2UgYmFzZWQgZmlsZXN5c3RlbXMgZm9yIHVDbGludXguCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDViZWIwNjYuLjFkNWNmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNTgsNSArNTgsNCBAQAogb2JqLSQoQ09ORklHX01URF9PTUFQX05PUikJKz0gb21hcF9ub3Iubwogb2JqLSQoQ09ORklHX01URF9JTlRFTF9WUl9OT1IpCSs9IGludGVsX3ZyX25vci5vCiBvYmotJChDT05GSUdfTVREX0JGSU5fQVNZTkMpCSs9IGJmaW4tYXN5bmMtZmxhc2gubwotb2JqLSQoQ09ORklHX01URF9SQlRYNDkzOSkJKz0gcmJ0eDQ5MzktZmxhc2gubwotb2JqLSQoQ09ORklHX01URF9WTVUpCQkrPSB2bXUtZmxhc2gubworb2JqLSQoQ09ORklHX01URF9HUElPX0FERFIpCSs9IGdwaW8tYWRkci1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGVmOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIGRyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMKKyAqCisgKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBmbGFzaCBkZXZpY2UgaXMgbW9zdGx5IGFkZHJlc3NlZCB1c2luZyBwaHlzaWNhbAorICogbGluZSBhbmQgc3VwcGxlbWVudGVkIGJ5IEdQSU9zLiAgVGhpcyB3YXkgeW91IGNhbiBob29rIHVwIHNheSBhIDhNaUIgZmxhc2gKKyAqIHRvIGEgMk1pQiBtZW1vcnkgcmFuZ2UgYW5kIHVzZSB0aGUgR1BJT3MgdG8gc2VsZWN0IGEgcGFydGljdWxhciByYW5nZS4KKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwMCBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBwcl9kZXZpbml0KGZtdCwgYXJncy4uLikgKHsgc3RhdGljIGNvbnN0IF9fZGV2aW5pdGNvbnN0IGNoYXIgX19mbXRbXSA9IGZtdDsgcHJpbnRrKF9fZm10LCAjIyBhcmdzKTsgfSkKKworI2RlZmluZSBEUklWRVJfTkFNRSAiZ3Bpby1hZGRyLWZsYXNoIgorI2RlZmluZSBQRlggRFJJVkVSX05BTUUgIjogIgorCisvKioKKyAqIHN0cnVjdCBhc3luY19zdGF0ZSAtIGtlZXAgR1BJTyBmbGFzaCBzdGF0ZQorICoJQG10ZDogICAgICAgICBNVEQgc3RhdGUgZm9yIHRoaXMgbWFwcGluZworICoJQG1hcDogICAgICAgICBNVEQgbWFwIHN0YXRlIGZvciB0aGlzIGZsYXNoCisgKglAZ3Bpb19jb3VudDogIG51bWJlciBvZiBHUElPcyB1c2VkIHRvIGFkZHJlc3MKKyAqCUBncGlvX2FkZHJzOiAgYXJyYXkgb2YgR1BJT3MgdG8gdHdpZGRsZQorICoJQGdwaW9fdmFsdWVzOiBjYWNoZWQgR1BJTyB2YWx1ZXMKKyAqCUB3aW5fc2l6ZTogICAgZGVkaWNhdGVkIG1lbW9yeSBzaXplIChpZiBubyBHUElPcykKKyAqLworc3RydWN0IGFzeW5jX3N0YXRlIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbWFwX2luZm8gbWFwOworCXNpemVfdCBncGlvX2NvdW50OworCXVuc2lnbmVkICpncGlvX2FkZHJzOworCWludCAqZ3Bpb192YWx1ZXM7CisJdW5zaWduZWQgbG9uZyB3aW5fc2l6ZTsKK307CisjZGVmaW5lIGdmX21hcF9pbmZvX3RvX3N0YXRlKG1pKSAoKHN0cnVjdCBhc3luY19zdGF0ZSAqKShtaSktPm1hcF9wcml2XzEpCisKKy8qKgorICogZ2Zfc2V0X2dwaW9zKCkgLSBzZXQgR1BJTyBhZGRyZXNzIGxpbmVzIHRvIGFjY2VzcyBzcGVjaWZpZWQgZmxhc2ggb2Zmc2V0CisgKglAc3RhdGU6IEdQSU8gZmxhc2ggc3RhdGUKKyAqCUBvZnM6ICAgZGVzaXJlZCBvZmZzZXQgdG8gYWNjZXNzCisgKgorICogUmF0aGVyIHRoYW4gY2FsbCB0aGUgR1BJTyBmcmFtZXdvcmsgZXZlcnkgdGltZSwgY2FjaGUgdGhlIGxhc3QtcHJvZ3JhbW1lZAorICogdmFsdWUuICBUaGlzIHNwZWVkcyB1cCBzZXF1ZW50aWFsIGFjY2Vzc2VzICh3aGljaCBhcmUgYnkgZmFyIHRoZSBtb3N0IGNvbW1vbgorICogdHlwZSkuICBXZSByZWx5IG9uIHRoZSBHUElPIGZyYW1ld29yayB0byB0cmVhdCBub24temVybyB2YWx1ZSBhcyBoaWdoIHNvCisgKiB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbm9ybWFsaXplIHRoZSBiaXRzLgorICovCitzdGF0aWMgdm9pZCBnZl9zZXRfZ3Bpb3Moc3RydWN0IGFzeW5jX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBvZnMpCit7CisJc2l6ZV90IGkgPSAwOworCWludCB2YWx1ZTsKKwlvZnMgLz0gc3RhdGUtPndpbl9zaXplOworCWRvIHsKKwkJdmFsdWUgPSBvZnMgJiAoMSA8PCBpKTsKKwkJaWYgKHN0YXRlLT5ncGlvX3ZhbHVlc1tpXSAhPSB2YWx1ZSkgeworCQkJZ3Bpb19zZXRfdmFsdWUoc3RhdGUtPmdwaW9fYWRkcnNbaV0sIHZhbHVlKTsKKwkJCXN0YXRlLT5ncGlvX3ZhbHVlc1tpXSA9IHZhbHVlOworCQl9CisJfSB3aGlsZSAoKytpIDwgc3RhdGUtPmdwaW9fY291bnQpOworfQorCisvKioKKyAqIGdmX3JlYWQoKSAtIHJlYWQgYSB3b3JkIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0CisgKglAbWFwOiBNVEQgbWFwIHN0YXRlCisgKglAb2ZzOiBkZXNpcmVkIG9mZnNldCB0byByZWFkCisgKi8KK3N0YXRpYyBtYXBfd29yZCBnZl9yZWFkKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIG9mcykKK3sKKwlzdHJ1Y3QgYXN5bmNfc3RhdGUgKnN0YXRlID0gZ2ZfbWFwX2luZm9fdG9fc3RhdGUobWFwKTsKKwl1aW50MTZfdCB3b3JkOworCW1hcF93b3JkIHRlc3Q7CisKKwlnZl9zZXRfZ3Bpb3Moc3RhdGUsIG9mcyk7CisKKwl3b3JkID0gcmVhZHcobWFwLT52aXJ0ICsgKG9mcyAlIHN0YXRlLT53aW5fc2l6ZSkpOworCXRlc3QueFswXSA9IHdvcmQ7CisJcmV0dXJuIHRlc3Q7Cit9CisKKy8qKgorICogZ2ZfY29weV9mcm9tKCkgLSBjb3B5IGEgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBmbGFzaAorICoJQG1hcDogIE1URCBtYXAgc3RhdGUKKyAqCUB0bzogICBtZW1vcnkgdG8gY29weSB0bworICoJQGZyb206IGZsYXNoIG9mZnNldCB0byBjb3B5IGZyb20KKyAqCUBsZW46ICBob3cgbXVjaCB0byBjb3B5CisgKgorICogV2UgcmVseSBvbiB0aGUgTVREIGxheWVyIHRvIGNodW5rIHVwIGNvcGllcyBzdWNoIHRoYXQgYSBzaW5nbGUgcmVxdWVzdCBoZXJlCisgKiB3aWxsIG5vdCBjcm9zcyBhIHdpbmRvdyBzaXplLiAgVGhpcyBhbGxvd3MgdXMgdG8gb25seSB3aWdnbGUgdGhlIEdQSU9zIG9uY2UKKyAqIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYSBub3JtYWwgbWVtY3B5LiAgUmVhZGluZyB0aGUgaGlnaGVyIGxheWVyIGNvZGUgc2hvd3MKKyAqIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UsIGJ1dCBhZGQgYSBCVUdfT04oKSB0byBmdXR1cmUgcHJvb2YuCisgKi8KK3N0YXRpYyB2b2lkIGdmX2NvcHlfZnJvbShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgZnJvbSwgc3NpemVfdCBsZW4pCit7CisJc3RydWN0IGFzeW5jX3N0YXRlICpzdGF0ZSA9IGdmX21hcF9pbmZvX3RvX3N0YXRlKG1hcCk7CisKKwlnZl9zZXRfZ3Bpb3Moc3RhdGUsIGZyb20pOworCisJLyogQlVHIGlmIG9wZXJhdGlvbiBjcm9zc2VzIHRoZSB3aW5fc2l6ZSAqLworCUJVR19PTighKChmcm9tICsgbGVuKSAlIHN0YXRlLT53aW5fc2l6ZSA8PSAoZnJvbSArIGxlbikpKTsKKworCS8qIG9wZXJhdGlvbiBkb2VzIG5vdCBjcm9zcyB0aGUgd2luX3NpemUsIHNvIG9uZSBzaG90IGl0ICovCisJbWVtY3B5X2Zyb21pbyh0bywgbWFwLT52aXJ0ICsgKGZyb20gJSBzdGF0ZS0+d2luX3NpemUpLCBsZW4pOworfQorCisvKioKKyAqIGdmX3dyaXRlKCkgLSB3cml0ZSBhIHdvcmQgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQKKyAqCUBtYXA6IE1URCBtYXAgc3RhdGUKKyAqCUBvZnM6IGRlc2lyZWQgb2Zmc2V0IHRvIHdyaXRlCisgKi8KK3N0YXRpYyB2b2lkIGdmX3dyaXRlKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBtYXBfd29yZCBkMSwgdW5zaWduZWQgbG9uZyBvZnMpCit7CisJc3RydWN0IGFzeW5jX3N0YXRlICpzdGF0ZSA9IGdmX21hcF9pbmZvX3RvX3N0YXRlKG1hcCk7CisJdWludDE2X3QgZDsKKworCWdmX3NldF9ncGlvcyhzdGF0ZSwgb2ZzKTsKKworCWQgPSBkMS54WzBdOworCXdyaXRldyhkLCBtYXAtPnZpcnQgKyAob2ZzICUgc3RhdGUtPndpbl9zaXplKSk7Cit9CisKKy8qKgorICogZ2ZfY29weV90bygpIC0gY29weSBhIGNodW5rIG9mIGRhdGEgdG8gdGhlIGZsYXNoCisgKglAbWFwOiAgTVREIG1hcCBzdGF0ZQorICoJQHRvOiAgIGZsYXNoIG9mZnNldCB0byBjb3B5IHRvCisgKglAZnJvbTogbWVtb3J5IHRvIGNvcHkgZnJvbQorICoJQGxlbjogIGhvdyBtdWNoIHRvIGNvcHkKKyAqCisgKiBTZWUgZ2ZfY29weV9mcm9tKCkgY2F2ZWF0LgorICovCitzdGF0aWMgdm9pZCBnZl9jb3B5X3RvKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIHRvLCBjb25zdCB2b2lkICpmcm9tLCBzc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYXN5bmNfc3RhdGUgKnN0YXRlID0gZ2ZfbWFwX2luZm9fdG9fc3RhdGUobWFwKTsKKworCWdmX3NldF9ncGlvcyhzdGF0ZSwgdG8pOworCisJLyogQlVHIGlmIG9wZXJhdGlvbiBjcm9zc2VzIHRoZSB3aW5fc2l6ZSAqLworCUJVR19PTighKCh0byArIGxlbikgJSBzdGF0ZS0+d2luX3NpemUgPD0gKHRvICsgbGVuKSkpOworCisJLyogb3BlcmF0aW9uIGRvZXMgbm90IGNyb3NzIHRoZSB3aW5fc2l6ZSwgc28gb25lIHNob3QgaXQgKi8KKwltZW1jcHlfdG9pbyhtYXAtPnZpcnQgKyAodG8gJSBzdGF0ZS0+d2luX3NpemUpLCBmcm9tLCBsZW4pOworfQorCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCitzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZV90eXBlc1tdID0geyAiY21kbGluZXBhcnQiLCAiUmVkQm9vdCIsIE5VTEwgfTsKKyNlbmRpZgorCisvKioKKyAqIGdwaW9fZmxhc2hfcHJvYmUoKSAtIHNldHVwIGEgbWFwcGluZyBmb3IgYSBHUElPIGFzc2lzdGVkIGZsYXNoCisgKglAcGRldjogcGxhdGZvcm0gZGV2aWNlCisgKgorICogVGhlIHBsYXRmb3JtIHJlc291cmNlIGxheW91dCBleHBlY3RlZCBsb29rcyBzb21ldGhpbmcgbGlrZToKKyAqIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbnNbXSA9IHsgLi4uIH07CisgKiBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGZsYXNoX2RhdGEgPSB7IC4uLiB9OworICogdW5zaWduZWQgZmxhc2hfZ3Bpb3NbXSA9IHsgR1BJT19YWCwgR1BJT19YWCwgLi4uIH07CisgKiBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2VbXSA9IHsKKyAqCXsKKyAqCQkubmFtZSAgPSAiY2ZpX3Byb2JlIiwKKyAqCQkuc3RhcnQgPSAweDIwMDAwMDAwLAorICoJCS5lbmQgICA9IDB4MjAxZmZmZmYsCisgKgkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisgKgl9LCB7CisgKgkJLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZmxhc2hfZ3Bpb3MsCisgKgkJLmVuZCAgID0gQVJSQVlfU0laRShmbGFzaF9ncGlvcyksCisgKgkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisgKgl9CisgKiB9OworICogc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbGFzaF9kZXZpY2UgPSB7CisgKgkubmFtZSAgICAgICAgICA9ICJncGlvLWFkZHItZmxhc2giLAorICoJLmRldiAgICAgICAgICAgPSB7IC5wbGF0Zm9ybV9kYXRhID0gJmZsYXNoX2RhdGEsIH0sCisgKgkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZmxhc2hfcmVzb3VyY2UpLAorICoJLnJlc291cmNlICAgICAgPSBmbGFzaF9yZXNvdXJjZSwKKyAqCS4uLgorICogfTsKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgZ3Bpb19mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc2l6ZV90IGksIGFycl9zaXplOworCXN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqbWVtb3J5OworCXN0cnVjdCByZXNvdXJjZSAqZ3Bpb3M7CisJc3RydWN0IGFzeW5jX3N0YXRlICpzdGF0ZTsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJbWVtb3J5ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlncGlvcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisKKwlpZiAoIW1lbW9yeSB8fCAhZ3Bpb3MgfHwgIWdwaW9zLT5lbmQpCisJCXJldHVybiAtRUlOVkFMOworCisJYXJyX3NpemUgPSBzaXplb2YoaW50KSAqIGdwaW9zLT5lbmQ7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpICsgYXJyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhdGUtPmdwaW9fY291bnQgICAgID0gZ3Bpb3MtPmVuZDsKKwlzdGF0ZS0+Z3Bpb19hZGRycyAgICAgPSAodm9pZCAqKWdwaW9zLT5zdGFydDsKKwlzdGF0ZS0+Z3Bpb192YWx1ZXMgICAgPSAodm9pZCAqKShzdGF0ZSArIDEpOworCXN0YXRlLT53aW5fc2l6ZSAgICAgICA9IG1lbW9yeS0+ZW5kIC0gbWVtb3J5LT5zdGFydCArIDE7CisJbWVtc2V0KHN0YXRlLT5ncGlvX3ZhbHVlcywgMHhmZiwgYXJyX3NpemUpOworCisJc3RhdGUtPm1hcC5uYW1lICAgICAgID0gRFJJVkVSX05BTUU7CisJc3RhdGUtPm1hcC5yZWFkICAgICAgID0gZ2ZfcmVhZDsKKwlzdGF0ZS0+bWFwLmNvcHlfZnJvbSAgPSBnZl9jb3B5X2Zyb207CisJc3RhdGUtPm1hcC53cml0ZSAgICAgID0gZ2Zfd3JpdGU7CisJc3RhdGUtPm1hcC5jb3B5X3RvICAgID0gZ2ZfY29weV90bzsKKwlzdGF0ZS0+bWFwLmJhbmt3aWR0aCAgPSBwZGF0YS0+d2lkdGg7CisJc3RhdGUtPm1hcC5zaXplICAgICAgID0gc3RhdGUtPndpbl9zaXplICogKDEgPDwgc3RhdGUtPmdwaW9fY291bnQpOworCXN0YXRlLT5tYXAudmlydCAgICAgICA9ICh2b2lkIF9faW9tZW0gKiltZW1vcnktPnN0YXJ0OworCXN0YXRlLT5tYXAucGh5cyAgICAgICA9IE5PX1hJUDsKKwlzdGF0ZS0+bWFwLm1hcF9wcml2XzEgPSAodW5zaWduZWQgbG9uZylzdGF0ZTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHN0YXRlKTsKKworCWkgPSAwOworCWRvIHsKKwkJaWYgKGdwaW9fcmVxdWVzdChzdGF0ZS0+Z3Bpb19hZGRyc1tpXSwgRFJJVkVSX05BTUUpKSB7CisJCQlwcl9kZXZpbml0KEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyAlZFxuIiwKKwkJCQlzdGF0ZS0+Z3Bpb19hZGRyc1tpXSk7CisJCQl3aGlsZSAoaS0tKQorCQkJCWdwaW9fZnJlZShzdGF0ZS0+Z3Bpb19hZGRyc1tpXSk7CisJCQlrZnJlZShzdGF0ZSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChzdGF0ZS0+Z3Bpb19hZGRyc1tpXSwgMCk7CisJfSB3aGlsZSAoKytpIDwgc3RhdGUtPmdwaW9fY291bnQpOworCisJcHJfZGV2aW5pdChLRVJOX05PVElDRSBQRlggInByb2JpbmcgJWQtYml0IGZsYXNoIGJ1c1xuIiwKKwkJc3RhdGUtPm1hcC5iYW5rd2lkdGggKiA4KTsKKwlzdGF0ZS0+bXRkID0gZG9fbWFwX3Byb2JlKG1lbW9yeS0+bmFtZSwgJnN0YXRlLT5tYXApOworCWlmICghc3RhdGUtPm10ZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPmdwaW9fY291bnQ7ICsraSkKKwkJCWdwaW9fZnJlZShzdGF0ZS0+Z3Bpb19hZGRyc1tpXSk7CisJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlyZXQgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhzdGF0ZS0+bXRkLCBwYXJ0X3Byb2JlX3R5cGVzLCAmcGRhdGEtPnBhcnRzLCAwKTsKKwlpZiAocmV0ID4gMCkgeworCQlwcl9kZXZpbml0KEtFUk5fTk9USUNFIFBGWCAiVXNpbmcgY29tbWFuZGxpbmUgcGFydGl0aW9uIGRlZmluaXRpb25cbiIpOworCQlhZGRfbXRkX3BhcnRpdGlvbnMoc3RhdGUtPm10ZCwgcGRhdGEtPnBhcnRzLCByZXQpOworCQlrZnJlZShwZGF0YS0+cGFydHMpOworCisJfSBlbHNlIGlmIChwZGF0YS0+bnJfcGFydHMpIHsKKwkJcHJfZGV2aW5pdChLRVJOX05PVElDRSBQRlggIlVzaW5nIGJvYXJkIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iKTsKKwkJYWRkX210ZF9wYXJ0aXRpb25zKHN0YXRlLT5tdGQsIHBkYXRhLT5wYXJ0cywgcGRhdGEtPm5yX3BhcnRzKTsKKworCX0gZWxzZQorI2VuZGlmCisJeworCQlwcl9kZXZpbml0KEtFUk5fTk9USUNFIFBGWCAibm8gcGFydGl0aW9uIGluZm8gYXZhaWxhYmxlLCByZWdpc3RlcmluZyB3aG9sZSBmbGFzaCBhdCBvbmNlXG4iKTsKKwkJYWRkX210ZF9kZXZpY2Uoc3RhdGUtPm10ZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdwaW9fZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFzeW5jX3N0YXRlICpzdGF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNpemVfdCBpID0gMDsKKwlkbyB7CisJCWdwaW9fZnJlZShzdGF0ZS0+Z3Bpb19hZGRyc1tpXSk7CisJfSB3aGlsZSAoKytpIDwgc3RhdGUtPmdwaW9fY291bnQpOworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWRlbF9tdGRfcGFydGl0aW9ucyhzdGF0ZS0+bXRkKTsKKyNlbmRpZgorCW1hcF9kZXN0cm95KHN0YXRlLT5tdGQpOworCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ3Bpb19mbGFzaF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGdwaW9fZmxhc2hfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChncGlvX2ZsYXNoX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdwaW9fZmxhc2hfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdwaW9fZmxhc2hfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGdwaW9fZmxhc2hfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBncGlvX2ZsYXNoX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ3Bpb19mbGFzaF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoZ3Bpb19mbGFzaF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgZmxhc2hlcyBhZGRyZXNzZWQgcGh5c2ljYWxseSBhbmQgd2l0aCBncGlvcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwppbmRleCBkNGZiOWEzLi4xYmRmMGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaW5mby0+bWFwLmJhbmt3aWR0aCA9IDE7CiAKIAkvKgotIAkgKiBtYXBfcHJpdl8yIGlzIHVzZWQgdG8gc3RvcmUgYSBwdHIgdG8gdG8gdGhlIGJhbmtfc2V0dXAgcm91dGluZQorIAkgKiBtYXBfcHJpdl8yIGlzIHVzZWQgdG8gc3RvcmUgYSBwdHIgdG8gdGhlIGJhbmtfc2V0dXAgcm91dGluZQogIAkgKi8KIAlpbmZvLT5tYXAubWFwX3ByaXZfMiA9ICh1bnNpZ25lZCBsb25nKSBpeHBfZGF0YS0+YmFua19zZXR1cDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYwppbmRleCAzOWQzNTdiLi42MWU0ZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYwpAQCAtMTkwLDYgKzE5MCw3IEBACiAJY29uc3QgdTMyICpwOwogCWludCByZWdfdHVwbGVfc2l6ZTsKIAlzdHJ1Y3QgbXRkX2luZm8gKiptdGRfbGlzdCA9IE5VTEw7CisJcmVzb3VyY2Vfc2l6ZV90IHJlc19zaXplOwogCiAJcmVnX3R1cGxlX3NpemUgPSAob2Zfbl9hZGRyX2NlbGxzKGRwKSArIG9mX25fc2l6ZV9jZWxscyhkcCkpICogc2l6ZW9mKHUzMik7CiAKQEAgLTIwNCw3ICsyMDUsNyBAQAogCQlkZXZfZXJyKCZkZXYtPmRldiwgIk1hbGZvcm1lZCByZWcgcHJvcGVydHkgb24gJXNcbiIsCiAJCQkJZGV2LT5ub2RlLT5mdWxsX25hbWUpOwogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9vdXQ7CisJCWdvdG8gZXJyX2ZsYXNoX3JlbW92ZTsKIAl9CiAJY291bnQgLz0gcmVnX3R1cGxlX3NpemU7CiAKQEAgLTIxMiwxNCArMjEzLDE0IEBACiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9mbGFzaCkgKwogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBvZl9mbGFzaF9saXN0KSAqIGNvdW50LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCi0JCWdvdG8gZXJyX291dDsKLQotCW10ZF9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSAqIGNvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8pCi0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfZmxhc2hfcmVtb3ZlOwogCiAJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CiAKKwltdGRfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKiBjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGRfbGlzdCkKKwkJZ290byBlcnJfZmxhc2hfcmVtb3ZlOworCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZXJyID0gLUVOWElPOwogCQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkcCwgaSwgJnJlcykpIHsKQEAgLTIzMyw4ICsyMzQsOCBAQAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMuZW5kKTsKIAogCQllcnIgPSAtRUJVU1k7Ci0JCWluZm8tPmxpc3RbaV0ucmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy5zdGFydCwgcmVzLmVuZCAtCi0JCQkJCQkgICAgICAgcmVzLnN0YXJ0ICsgMSwKKwkJcmVzX3NpemUgPSByZXNvdXJjZV9zaXplKCZyZXMpOworCQlpbmZvLT5saXN0W2ldLnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIHJlc19zaXplLAogCQkJCQkJICAgICAgIGRldl9uYW1lKCZkZXYtPmRldikpOwogCQlpZiAoIWluZm8tPmxpc3RbaV0ucmVzKQogCQkJZ290byBlcnJfb3V0OwpAQCAtMjQ5LDcgKzI1MCw3IEBACiAKIAkJaW5mby0+bGlzdFtpXS5tYXAubmFtZSA9IGRldl9uYW1lKCZkZXYtPmRldik7CiAJCWluZm8tPmxpc3RbaV0ubWFwLnBoeXMgPSByZXMuc3RhcnQ7Ci0JCWluZm8tPmxpc3RbaV0ubWFwLnNpemUgPSByZXMuZW5kIC0gcmVzLnN0YXJ0ICsgMTsKKwkJaW5mby0+bGlzdFtpXS5tYXAuc2l6ZSA9IHJlc19zaXplOwogCQlpbmZvLT5saXN0W2ldLm1hcC5iYW5rd2lkdGggPSAqd2lkdGg7CiAKIAkJZXJyID0gLUVOT01FTTsKQEAgLTMzOCw2ICszMzksNyBAQAogCiBlcnJfb3V0OgogCWtmcmVlKG10ZF9saXN0KTsKK2Vycl9mbGFzaF9yZW1vdmU6CiAJb2ZfZmxhc2hfcmVtb3ZlKGRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzYwLDYgKzM2MiwxMCBAQAogCQkuZGF0YQkJPSAodm9pZCAqKSJqZWRlY19wcm9iZSIsCiAJfSwKIAl7CisJCS5jb21wYXRpYmxlICAgICA9ICJtdGQtcmFtIiwKKwkJLmRhdGEgICAgICAgICAgID0gKHZvaWQgKikibWFwX3JhbSIsCisJfSwKKwl7CiAJCS50eXBlCQk9ICJyb20iLAogCQkuY29tcGF0aWJsZQk9ICJkaXJlY3QtbWFwcGVkIgogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKaW5kZXggNDljOWVjZS4uZGFmYjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJLyogc2V0dXAgbWFwIHBhcmFtZXRlcnMgKi8KIAogCWluZm8tPm1hcC5waHlzID0gcmVzLT5zdGFydDsKLQlpbmZvLT5tYXAuc2l6ZSA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMTsKKwlpbmZvLT5tYXAuc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAlpbmZvLT5tYXAubmFtZSA9IHBkYXRhLT5tYXBuYW1lICE9IE5VTEwgPwogCQkJKGNoYXIgKilwZGF0YS0+bWFwbmFtZSA6IChjaGFyICopcGRldi0+bmFtZTsKIAlpbmZvLT5tYXAuYmFua3dpZHRoID0gcGRhdGEtPmJhbmt3aWR0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcG1jbXNwLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BtY21zcC1mbGFzaC5jCmluZGV4IDQ3NjhiZDUuLmM4ZmQ4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcG1jbXNwLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wbWNtc3AtZmxhc2guYwpAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X21zcF9mbGFzaCh2b2lkKQogewotCWludCBpLCBqOworCWludCBpLCBqLCByZXQgPSAtRU5PTUVNOwogCWludCBvZmZzZXQsIGNvZmY7CiAJY2hhciAqZW52OwogCWludCBwY250OwpAQCAtNzUsMTQgKzc1LDE2IEBACiAJcHJpbnRrKEtFUk5fTk9USUNFICJGb3VuZCAlZCBQTUMgZmxhc2ggZGV2aWNlc1xuIiwgZmNudCk7CiAKIAltc3BfZmxhc2ggPSBrbWFsbG9jKGZjbnQgKiBzaXplb2Yoc3RydWN0IG1hcF9pbmZvICopLCBHRlBfS0VSTkVMKTsKLQltc3BfcGFydHMgPSBrbWFsbG9jKGZjbnQgKiBzaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24gKiksIEdGUF9LRVJORUwpOwotCW1zcF9tYXBzID0ga2NhbGxvYyhmY250LCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtc3BfZmxhc2ggfHwgIW1zcF9wYXJ0cyB8fCAhbXNwX21hcHMpIHsKLQkJa2ZyZWUobXNwX21hcHMpOwotCQlrZnJlZShtc3BfcGFydHMpOwotCQlrZnJlZShtc3BfZmxhc2gpOworCWlmICghbXNwX2ZsYXNoKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKKwltc3BfcGFydHMgPSBrbWFsbG9jKGZjbnQgKiBzaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24gKiksIEdGUF9LRVJORUwpOworCWlmICghbXNwX3BhcnRzKQorCQlnb3RvIGZyZWVfbXNwX2ZsYXNoOworCisJbXNwX21hcHMgPSBrY2FsbG9jKGZjbnQsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zcF9tYXBzKQorCQlnb3RvIGZyZWVfbXNwX3BhcnRzOwogCiAJLyogbG9vcCBvdmVyIHRoZSBmbGFzaCBkZXZpY2VzLCBpbml0aWFsaXppbmcgZWFjaCAqLwogCWZvciAoaSA9IDA7IGkgPCBmY250OyBpKyspIHsKQEAgLTEwMCwxMyArMTAyLDE4IEBACiAKIAkJbXNwX3BhcnRzW2ldID0ga2NhbGxvYyhwY250LCBzaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24pLAogCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtc3BfcGFydHNbaV0pCisJCQlnb3RvIGNsZWFudXBfbG9vcDsKIAogCQkvKiBub3cgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlcyBwcm9wZXIgKi8KIAkJZmxhc2hfbmFtZVs1XSA9ICcwJyArIGk7CiAJCWVudiA9IHByb21fZ2V0ZW52KGZsYXNoX25hbWUpOwogCi0JCWlmIChzc2NhbmYoZW52LCAiJXg6JXgiLCAmYWRkciwgJnNpemUpIDwgMikKLQkJCXJldHVybiAtRU5YSU87CisJCWlmIChzc2NhbmYoZW52LCAiJXg6JXgiLCAmYWRkciwgJnNpemUpIDwgMikgeworCQkJcmV0ID0gLUVOWElPOworCQkJa2ZyZWUobXNwX3BhcnRzW2ldKTsKKwkJCWdvdG8gY2xlYW51cF9sb29wOworCQl9CiAJCWFkZHIgPSBDUEhZU0FERFIoYWRkcik7CiAKIAkJcHJpbnRrKEtFUk5fTk9USUNFCkBAIC0xMjIsMTMgKzEyOSwyMyBAQAogCQkgKi8KIAkJaWYgKHNpemUgPiBDT05GSUdfTVNQX0ZMQVNIX01BUF9MSU1JVCkKIAkJCXNpemUgPSBDT05GSUdfTVNQX0ZMQVNIX01BUF9MSU1JVDsKLQkJbXNwX21hcHNbaV0udmlydCA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7Ci0JCW1zcF9tYXBzW2ldLmJhbmt3aWR0aCA9IDE7Ci0JCW1zcF9tYXBzW2ldLm5hbWUgPSBzdHJuY3B5KGttYWxsb2MoNywgR0ZQX0tFUk5FTCksCi0JCQkJCWZsYXNoX25hbWUsIDcpOwogCi0JCWlmIChtc3BfbWFwc1tpXS52aXJ0ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOWElPOworCQltc3BfbWFwc1tpXS52aXJ0ID0gaW9yZW1hcChhZGRyLCBzaXplKTsKKwkJaWYgKG1zcF9tYXBzW2ldLnZpcnQgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOWElPOworCQkJa2ZyZWUobXNwX3BhcnRzW2ldKTsKKwkJCWdvdG8gY2xlYW51cF9sb29wOworCQl9CisKKwkJbXNwX21hcHNbaV0uYmFua3dpZHRoID0gMTsKKwkJbXNwX21hcHNbaV0ubmFtZSA9IGttYWxsb2MoNywgR0ZQX0tFUk5FTCk7CisJCWlmICghbXNwX21hcHNbaV0ubmFtZSkgeworCQkJaW91bm1hcChtc3BfbWFwc1tpXS52aXJ0KTsKKwkJCWtmcmVlKG1zcF9wYXJ0c1tpXSk7CisJCQlnb3RvIGNsZWFudXBfbG9vcDsKKwkJfQorCisJCW1zcF9tYXBzW2ldLm5hbWUgPSBzdHJuY3B5KG1zcF9tYXBzW2ldLm5hbWUsIGZsYXNoX25hbWUsIDcpOwogCiAJCWZvciAoaiA9IDA7IGogPCBwY250OyBqKyspIHsKIAkJCXBhcnRfbmFtZVs1XSA9ICcwJyArIGk7CkBAIC0xMzYsOCArMTUzLDE0IEBACiAKIAkJCWVudiA9IHByb21fZ2V0ZW52KHBhcnRfbmFtZSk7CiAKLQkJCWlmIChzc2NhbmYoZW52LCAiJXg6JXg6JW4iLCAmb2Zmc2V0LCAmc2l6ZSwgJmNvZmYpIDwgMikKLQkJCQlyZXR1cm4gLUVOWElPOworCQkJaWYgKHNzY2FuZihlbnYsICIleDoleDolbiIsICZvZmZzZXQsICZzaXplLAorCQkJCQkJJmNvZmYpIDwgMikgeworCQkJCXJldCA9IC1FTlhJTzsKKwkJCQlrZnJlZShtc3BfbWFwc1tpXS5uYW1lKTsKKwkJCQlpb3VubWFwKG1zcF9tYXBzW2ldLnZpcnQpOworCQkJCWtmcmVlKG1zcF9wYXJ0c1tpXSk7CisJCQkJZ290byBjbGVhbnVwX2xvb3A7CisJCQl9CiAKIAkJCW1zcF9wYXJ0c1tpXVtqXS5zaXplID0gc2l6ZTsKIAkJCW1zcF9wYXJ0c1tpXVtqXS5vZmZzZXQgPSBvZmZzZXQ7CkBAIC0xNTIsMTggKzE3NSwzNyBAQAogCQkJYWRkX210ZF9wYXJ0aXRpb25zKG1zcF9mbGFzaFtpXSwgbXNwX3BhcnRzW2ldLCBwY250KTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQkJcmV0dXJuIC1FTlhJTzsKKwkJCXJldCA9IC1FTlhJTzsKKwkJCWtmcmVlKG1zcF9tYXBzW2ldLm5hbWUpOworCQkJaW91bm1hcChtc3BfbWFwc1tpXS52aXJ0KTsKKwkJCWtmcmVlKG1zcF9wYXJ0c1tpXSk7CisJCQlnb3RvIGNsZWFudXBfbG9vcDsKIAkJfQogCX0KIAogCXJldHVybiAwOworCitjbGVhbnVwX2xvb3A6CisJd2hpbGUgKGktLSkgeworCQlkZWxfbXRkX3BhcnRpdGlvbnMobXNwX2ZsYXNoW2ldKTsKKwkJbWFwX2Rlc3Ryb3kobXNwX2ZsYXNoW2ldKTsKKwkJa2ZyZWUobXNwX21hcHNbaV0ubmFtZSk7CisJCWlvdW5tYXAobXNwX21hcHNbaV0udmlydCk7CisJCWtmcmVlKG1zcF9wYXJ0c1tpXSk7CisJfQorCWtmcmVlKG1zcF9tYXBzKTsKK2ZyZWVfbXNwX3BhcnRzOgorCWtmcmVlKG1zcF9wYXJ0cyk7CitmcmVlX21zcF9mbGFzaDoKKwlrZnJlZShtc3BfZmxhc2gpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX21zcF9mbGFzaCh2b2lkKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihtc3BfZmxhc2gpIC8gc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbyAqKik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBmY250OyBpKyspIHsKIAkJZGVsX210ZF9wYXJ0aXRpb25zKG1zcF9mbGFzaFtpXSk7CiAJCW1hcF9kZXN0cm95KG1zcF9mbGFzaFtpXSk7CiAJCWlvdW5tYXAoKHZvaWQgKiltc3BfbWFwc1tpXS52aXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdWNsaW51eC5jIGIvZHJpdmVycy9tdGQvbWFwcy91Y2xpbnV4LmMKaW5kZXggZDQzMTRmYi4uMzUwMDkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy91Y2xpbnV4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy91Y2xpbnV4LmMKQEAgLTg5LDcgKzg5LDExIEBACiAJbXRkLT5wcml2ID0gbWFwcDsKIAogCXVjbGludXhfcmFtX210ZGluZm8gPSBtdGQ7CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJYWRkX210ZF9wYXJ0aXRpb25zKG10ZCwgdWNsaW51eF9yb21mcywgTlVNX1BBUlRJVElPTlMpOworI2Vsc2UKKwlhZGRfbXRkX2RldmljZShtdGQpOworI2VuZGlmCiAKIAlyZXR1cm4oMCk7CiB9CkBAIC05OSw3ICsxMDMsMTEgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1Y2xpbnV4X210ZF9jbGVhbnVwKHZvaWQpCiB7CiAJaWYgKHVjbGludXhfcmFtX210ZGluZm8pIHsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAkJZGVsX210ZF9wYXJ0aXRpb25zKHVjbGludXhfcmFtX210ZGluZm8pOworI2Vsc2UKKwkJZGVsX210ZF9kZXZpY2UodWNsaW51eF9yYW1fbXRkaW5mbyk7CisjZW5kaWYKIAkJbWFwX2Rlc3Ryb3kodWNsaW51eF9yYW1fbXRkaW5mbyk7CiAJCXVjbGludXhfcmFtX210ZGluZm8gPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMgYi9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCmluZGV4IDdiYWJhNDAuLjBhY2JmNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG10ZF9ibGt0cmFuc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG10ZF9ibGt0cmFuc19vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGJsa3RyYW5zX29wZW4sCiAJLnJlbGVhc2UJPSBibGt0cmFuc19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkYmxvY2suYyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKaW5kZXggMmQ3MDI5NS4uOWY0MWIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkYmxvY2suYworKysgYi9kcml2ZXJzL210ZC9tdGRibG9jay5jCkBAIC04NCw3ICs4NCw3IEBACiAJcmVtb3ZlX3dhaXRfcXVldWUoJndhaXRfcSwgJndhaXQpOwogCiAJLyoKLQkgKiBOZXh0LCB3cml0aGUgZGF0YSB0byBmbGFzaC4KKwkgKiBOZXh0LCB3cml0ZSB0aGUgZGF0YSB0byBmbGFzaC4KIAkgKi8KIAogCXJldCA9IG10ZC0+d3JpdGUobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggNzkyYjU0Ny4uZGI2ZGU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogCQkgKiB0by1iZS1lcmFzZWQgYXJlYSBiZWdpbnMuIFZlcmlmeSB0aGF0IHRoZSBzdGFydGluZwogCQkgKiBvZmZzZXQgaXMgYWxpZ25lZCB0byB0aGlzIHJlZ2lvbidzIGVyYXNlIHNpemU6CiAJCSAqLwotCQlpZiAoaW5zdHItPmFkZHIgJiAoZXJhc2VfcmVnaW9uc1tpXS5lcmFzZXNpemUgLSAxKSkKKwkJaWYgKGkgPCAwIHx8IGluc3RyLT5hZGRyICYgKGVyYXNlX3JlZ2lvbnNbaV0uZXJhc2VzaXplIC0gMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkvKgpAQCAtNDQwLDggKzQ0MCw4IEBACiAJCS8qCiAJCSAqIGNoZWNrIGlmIHRoZSBlbmRpbmcgb2Zmc2V0IGlzIGFsaWduZWQgdG8gdGhpcyByZWdpb24ncyBlcmFzZSBzaXplCiAJCSAqLwotCQlpZiAoKGluc3RyLT5hZGRyICsgaW5zdHItPmxlbikgJiAoZXJhc2VfcmVnaW9uc1tpXS5lcmFzZXNpemUgLQotCQkJCQkJICAxKSkKKwkJaWYgKGkgPCAwIHx8ICgoaW5zdHItPmFkZHIgKyBpbnN0ci0+bGVuKSAmCisJCQkJCShlcmFzZV9yZWdpb25zW2ldLmVyYXNlc2l6ZSAtIDEpKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY29yZS5jIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCmluZGV4IDY5MDA3YTYuLjQ2N2E0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKQEAgLTIxMywxMSArMjEzLDExIEBACiAJTlVMTCwKIH07CiAKLXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbXRkX2dyb3VwID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbXRkX2dyb3VwID0gewogCS5hdHRycwkJPSBtdGRfYXR0cnMsCiB9OwogCi1jb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptdGRfZ3JvdXBzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXRkX2dyb3Vwc1tdID0gewogCSZtdGRfZ3JvdXAsCiAJTlVMTCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKaW5kZXggNzQyNTA0ZS4uYjgwNDNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwpAQCAtNDUzLDcgKzQ1Myw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBtYXggJiYgcmVnaW9uc1tpXS5vZmZzZXQgPD0gc2xhdmUtPm9mZnNldDsgaSsrKQogCQkJOwogCQkvKiBUaGUgbG9vcCBzZWFyY2hlZCBmb3IgdGhlIHJlZ2lvbiBfYmVoaW5kXyB0aGUgZmlyc3Qgb25lICovCi0JCWktLTsKKwkJaWYgKGkgPiAwKQorCQkJaS0tOwogCiAJCS8qIFBpY2sgYmlnZ2VzdCBlcmFzZXNpemUgKi8KIAkJZm9yICg7IGkgPCBtYXggJiYgcmVnaW9uc1tpXS5vZmZzZXQgPCBlbmQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IGNlOTZjMDkuLjJmZGEwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTgwLDYgKzgwLDIzIEBACiAJaGVscAogICAgICAgICAgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gVGV4YXMgSW5zdHJ1bWVudHMgT01BUDIgYW5kIE9NQVAzIHBsYXRmb3Jtcy4KIAorY29uZmlnIE1URF9OQU5EX09NQVBfUFJFRkVUQ0gKKwlib29sICJHUE1DIHByZWZldGNoIHN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggZGV2aWNlIgorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgTVREX05BTkRfT01BUDIKKwlkZWZhdWx0IHkKKwloZWxwCisJIFRoZSBOQU5EIGRldmljZSBjYW4gYmUgYWNjZXNzZWQgZm9yIFJlYWQvV3JpdGUgdXNpbmcgR1BNQyBQUkVGRVRDSCBlbmdpbmUKKwkgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UuCisKK2NvbmZpZyBNVERfTkFORF9PTUFQX1BSRUZFVENIX0RNQQorCWRlcGVuZHMgb24gTVREX05BTkRfT01BUF9QUkVGRVRDSAorCWJvb2wgIkRNQSBtb2RlIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgVGhlIEdQTUMgUFJFRkVUQ0ggZW5naW5lIGNhbiBiZSBjb25maWd1cmVkIGVpZ3RoZXIgaW4gTVBVIGludGVycnVwdCBtb2RlCisJIG9yIGluIERNQSBpbnRlcnJ1cHQgbW9kZS4KKwkgU2F5IHkgZm9yIERNQSBtb2RlIG9yIE1QVSBtb2RlIHdpbGwgYmUgdXNlZAorCiBjb25maWcgTVREX05BTkRfVFM3MjUwCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFRTLTcyNTAgYm9hcmQiCiAJZGVwZW5kcyBvbiBNQUNIX1RTNzJYWApAQCAtNDI2LDYgKzQ0MywxMiBAQAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgb24gdGhlCiAJICBNWEMgcHJvY2Vzc29ycy4KIAorY29uZmlnIE1URF9OQU5EX05PTUFESUsKKwl0cmlzdGF0ZSAiU1QgTm9tYWRpayA4ODE1IE5BTkQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfTk9NQURJSworCWhlbHAKKwkgIERyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbiB0aGUgTm9tYWRpaywgd2l0aCBFQ0MuCisKIGNvbmZpZyBNVERfTkFORF9TSF9GTENUTAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIG9uIFJlbmVzYXMgU3VwZXJIIEZMQ1RMIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgU1VQRVJIICYmIENQVV9TVUJUWVBFX1NINzcyMwpAQCAtNDUyLDQgKzQ3NSwxMSBAQAogCWhlbHAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTkFORCBGbGFzaCBjaGlwcyB3aXJlZCBvbnRvIFNvY3JhdGVzIGJvYXJkLgogCitjb25maWcgTVREX05BTkRfVzkwUDkxMAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIG9uIHc5MHA5MTAgZXZhbHVhdGlvbiBib2FyZC4iCisJZGVwZW5kcyBvbiBBUkNIX1c5MFg5MDAgJiYgTVREX1BBUlRJVElPTlMKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgRmxhc2ggb24gZXZhbHVhdGlvbiBib2FyZCBiYXNlZAorCSAgb24gdzkwcDkxMC4KKwogZW5kaWYgIyBNVERfTkFORApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKaW5kZXggZjNhNzg2Yi4uNjk1MGQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCkBAIC00MCw1ICs0MCw3IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfTVhDKQkJKz0gbXhjX25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1NPQ1JBVEVTKQkJKz0gc29jcmF0ZXNfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfVFhYOU5ERk1DKQkrPSB0eHg5bmRmbWMubworb2JqLSQoQ09ORklHX01URF9OQU5EX1c5MFA5MTApCQkrPSB3OTBwOTEwX25hbmQubworb2JqLSQoQ09ORklHX01URF9OQU5EX05PTUFESUspCQkrPSBub21hZGlrX25hbmQubwogCiBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwppbmRleCAyMGM4MjhiLi5mOGU5OTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAgKiBidWY6ICAgICAgICBidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCiAgKi8KIHN0YXRpYyBpbnQgYXRtZWxfbmFuZF9yZWFkX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3QgKmJ1ZikKKwkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKIHsKIAlpbnQgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOwogCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jCmluZGV4IDI5YWNkMDYuLmM4MjhkOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jYWZlX25hbmQuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAgKiB3ZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZy4KICAqLwogc3RhdGljIGludCBjYWZlX25hbmRfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAotCQkJICAgICAgIHVpbnQ4X3QgKmJ1ZikKKwkJCSAgICAgICB1aW50OF90ICpidWYsIGludCBwYWdlKQogewogCXN0cnVjdCBjYWZlX3ByaXYgKmNhZmUgPSBtdGQtPnByaXY7CiAKQEAgLTkwMywxMiArOTAzLDEyIEBACiAJLnJlc3VtZSA9IGNhZmVfbmFuZF9yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IGNhZmVfbmFuZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjYWZlX25hbmRfaW5pdCh2b2lkKQogewogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjYWZlX25hbmRfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGNhZmVfbmFuZF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FmZV9uYW5kX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfbmFuZF9wY2lfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYwppbmRleCAxMDA4MWU2Li44MjZjYWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NteDI3MF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotc3RhdGljIGludCBjbXgyNzBfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY214MjcwX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZTsKQEAgLTI2MSw3ICsyNjEsNyBAQAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgY214MjcwX2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbXgyNzBfY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwogCW5hbmRfcmVsZWFzZShjbXgyNzBfbmFuZF9tdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kYXZpbmNpX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvZGF2aW5jaV9uYW5kLmMKaW5kZXggMGZhZDY0OC4uZjEzZjViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kYXZpbmNpX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2RhdmluY2lfbmFuZC5jCkBAIC0zNDgsNiArMzQ4LDEyIEBACiAJaWYgKCEoc3luZHJvbWVbMF0gfCBzeW5kcm9tZVsxXSB8IHN5bmRyb21lWzJdIHwgc3luZHJvbWVbM10pKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICogQ2xlYXIgYW55IHByZXZpb3VzIGFkZHJlc3MgY2FsY3VsYXRpb24gYnkgZG9pbmcgYSBkdW1teSByZWFkIG9mIGFuCisJICogZXJyb3IgYWRkcmVzcyByZWdpc3Rlci4KKwkgKi8KKwlkYXZpbmNpX25hbmRfcmVhZGwoaW5mbywgTkFORF9FUlJfQUREMV9PRkZTRVQpOworCiAJLyogU3RhcnQgYWRkcmVzcyBjYWxjdWxhdGlvbiwgYW5kIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLgogCSAqIFdlIF9jb3VsZF8gc3RhcnQgcmVhZGluZyBtb3JlIGRhdGEgd2hpbGUgdGhpcyBpcyB3b3JraW5nLAogCSAqIHRvIHNwZWVkIHVwIHRoZSBvdmVyYWxsIHBhZ2UgcmVhZC4KQEAgLTM1OSw4ICszNjUsMTAgQEAKIAogCQlzd2l0Y2ggKChmc3IgPj4gOCkgJiAweDBmKSB7CiAJCWNhc2UgMDoJCS8qIG5vIGVycm9yLCBzaG91bGQgbm90IGhhcHBlbiAqLworCQkJZGF2aW5jaV9uYW5kX3JlYWRsKGluZm8sIE5BTkRfRVJSX0VSUlZBTDFfT0ZGU0VUKTsKIAkJCXJldHVybiAwOwogCQljYXNlIDE6CQkvKiBmaXZlIG9yIG1vcmUgZXJyb3JzIGRldGVjdGVkICovCisJCQlkYXZpbmNpX25hbmRfcmVhZGwoaW5mbywgTkFORF9FUlJfRVJSVkFMMV9PRkZTRVQpOwogCQkJcmV0dXJuIC1FSU87CiAJCWNhc2UgMjoJCS8qIGVycm9yIGFkZHJlc3NlcyBjb21wdXRlZCAqLwogCQljYXNlIDM6CkBAIC01MDAsNiArNTA4LDI2IEBACiAJfSwKIH07CiAKKy8qIEFuIEVDQyBsYXlvdXQgZm9yIHVzaW5nIDQtYml0IEVDQyB3aXRoIGxhcmdlLXBhZ2UgKDIwNDhieXRlcykgZmxhc2gsCisgKiBzdG9yaW5nIHRlbiBFQ0MgYnl0ZXMgcGx1cyB0aGUgbWFudWZhY3R1cmVyJ3MgYmFkIGJsb2NrIG1hcmtlciBieXRlLAorICogYW5kIG5vdCBvdmVybGFwcGluZyB0aGUgZGVmYXVsdCBCQlQgbWFya2Vycy4KKyAqLworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBod2VjYzRfMjA0OCBfX2luaXRjb25zdCA9IHsKKwkuZWNjYnl0ZXMgPSA0MCwKKwkuZWNjcG9zID0geworCQkvKiBhdCB0aGUgZW5kIG9mIHNwYXJlIHNlY3RvciAqLworCQkyNCwgMjUsIDI2LCAyNywgMjgsIDI5LAkzMCwgMzEsIDMyLCAzMywKKwkJMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwJNDAsIDQxLCA0MiwgNDMsCisJCTQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLAorCQk1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywKKwkJfSwKKwkub29iZnJlZSA9IHsKKwkJLyogMiBieXRlcyBhdCBvZmZzZXQgMCBob2xkIG1hbnVmYWN0dXJlciBiYWRibG9jayBtYXJrZXJzICovCisJCXsub2Zmc2V0ID0gMiwgLmxlbmd0aCA9IDIyLCB9LAorCQkvKiA1IGJ5dGVzIGF0IG9mZnNldCA4IGhvbGQgQkJUIG1hcmtlcnMgKi8KKwkJLyogOCBieXRlcyBhdCBvZmZzZXQgMTYgaG9sZCBKRkZTMiBjbGVhbiBtYXJrZXJzICovCisJfSwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IG5hbmRfZGF2aW5jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtNjkwLDE1ICs3MTgsMjAgQEAKIAkJCQlpbmZvLT5tdGQub29ic2l6ZSAtIDE2OwogCQkJZ290byBzeW5kcm9tZV9kb25lOwogCQl9CisJCWlmIChjaHVua3MgPT0gNCkgeworCQkJaW5mby0+ZWNjbGF5b3V0ID0gaHdlY2M0XzIwNDg7CisJCQlpbmZvLT5jaGlwLmVjYy5tb2RlID0gTkFORF9FQ0NfSFdfT09CX0ZJUlNUOworCQkJZ290byBzeW5kcm9tZV9kb25lOworCQl9CiAKLQkJLyogRm9yIGxhcmdlIHBhZ2UgY2hpcHMgd2UnbGwgYmUgd2FudGluZyB0byB1c2UgYQotCQkgKiBub3QteWV0LWltcGxlbWVudGVkIG1vZGUgdGhhdCByZWFkcyBPT0IgZGF0YQotCQkgKiBiZWZvcmUgcmVhZGluZyB0aGUgYm9keSBvZiB0aGUgcGFnZSwgdG8gYXZvaWQKLQkJICogdGhlICJpbmZpeCBPT0IiIG1vZGVsIG9mIE5BTkRfRUNDX0hXX1NZTkRST01FCi0JCSAqIChhbmQgcHJlc2VydmUgbWFudWZhY3R1cmVyIGJhZGJsb2NrIG1hcmtpbmdzKS4KKwkJLyogNEtpQiBwYWdlIGNoaXBzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4gVGhlIGVjY3BvcyBmcm9tCisJCSAqIG5hbmRfZWNjbGF5b3V0IGNhbm5vdCBob2xkIDgwIGJ5dGVzIGFuZCBjaGFuZ2UgdG8gZWNjcG9zW10KKwkJICogYnJlYWtzIHVzZXJzcGFjZSBpb2N0bCBpbnRlcmZhY2Ugd2l0aCBtdGQtdXRpbHMuIE9uY2Ugd2UKKwkJICogcmVzb2x2ZSB0aGlzIGlzc3VlLCBOQU5EX0VDQ19IV19PT0JfRklSU1QgbW9kZSBjYW4gYmUgdXNlZAorCQkgKiBmb3IgdGhlIDRLaUIgcGFnZSBjaGlwcy4KIAkJICovCiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJubyA0LWJpdCBFQ0Mgc3VwcG9ydCB5ZXQgIgotCQkJCSJmb3IgbGFyZ2UgcGFnZSBOQU5EXG4iKTsKKwkJCQkiZm9yIDRLaUItcGFnZSBOQU5EXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBlcnJfc2NhbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwppbmRleCAxZjZlYjI1Li5kZGQzN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwpAQCAtNzM5LDcgKzczOSw4IEBACiAKIHN0YXRpYyBpbnQgZnNsX2VsYmNfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZikKKwkJCSAgICAgIHVpbnQ4X3QgKmJ1ZiwKKwkJCSAgICAgIGludCBwYWdlKQogewogCWZzbF9lbGJjX3JlYWRfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CiAJZnNsX2VsYmNfcmVhZF9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCmluZGV4IDc2YmVlYTQuLjY1YjI2ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKQEAgLTg1Nyw2ICs4NTcsMTcgQEAKIAl9CiB9CiAKKy8qIERlZmluZSBzb21lIGdlbmVyaWMgYmFkIC8gZ29vZCBibG9jayBzY2FuIHBhdHRlcm4gd2hpY2ggYXJlIHVzZWQKKyAqIHdoaWxlIHNjYW5uaW5nIGEgZGV2aWNlIGZvciBmYWN0b3J5IG1hcmtlZCBnb29kIC8gYmFkIGJsb2Nrcy4gKi8KK3N0YXRpYyB1aW50OF90IHNjYW5fZmZfcGF0dGVybltdID0geyAweGZmLCAweGZmIH07CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc21hbGxwYWdlX21lbW9yeWJhc2VkID0geworCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTjJORFBBR0UsCisJLm9mZnMgPSA1LAorCS5sZW4gPSAxLAorCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBteGNuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CkBAIC05NzMsNyArOTg0LDEwIEBACiAJCWdvdG8gZXNjYW47CiAJfQogCi0JaG9zdC0+cGFnZXNpemVfMmsgPSAobXRkLT53cml0ZXNpemUgPT0gMjA0OCkgPyAxIDogMDsKKwlpZiAobXRkLT53cml0ZXNpemUgPT0gMjA0OCkgeworCQlob3N0LT5wYWdlc2l6ZV8yayA9IDE7CisJCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAmc21hbGxwYWdlX21lbW9yeWJhc2VkOworCX0KIAogCWlmICh0aGlzLT5lY2MubW9kZSA9PSBOQU5EX0VDQ19IVykgewogCQlzd2l0Y2ggKG10ZC0+b29ic2l6ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggOGMyMWI4OS4uMjIxMTM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC02ODgsOCArNjg4LDcgQEAKICByZXRyeToKIAlzcGluX2xvY2sobG9jayk7CiAKLQkvKiBIYXJkd2FyZSBjb250cm9sbGVyIHNoYXJlZCBhbW9uZyBpbmRlcGVuZGVuZCBkZXZpY2VzICovCi0JLyogSGFyZHdhcmUgY29udHJvbGxlciBzaGFyZWQgYW1vbmcgaW5kZXBlbmRlbmQgZGV2aWNlcyAqLworCS8qIEhhcmR3YXJlIGNvbnRyb2xsZXIgc2hhcmVkIGFtb25nIGluZGVwZW5kZW50IGRldmljZXMgKi8KIAlpZiAoIWNoaXAtPmNvbnRyb2xsZXItPmFjdGl2ZSkKIAkJY2hpcC0+Y29udHJvbGxlci0+YWN0aXZlID0gY2hpcDsKIApAQCAtNzY2LDcgKzc2NSw3IEBACiAgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycywgd2hpY2ggdXNlIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAotCQkJICAgICAgdWludDhfdCAqYnVmKQorCQkJICAgICAgdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKIHsKIAljaGlwLT5yZWFkX2J1ZihtdGQsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOwogCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKQEAgLTc4Miw3ICs3ODEsNyBAQAogICogV2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcgZXZlbiB3aGVuIE9PQiBpc24ndCB1c2VkLgogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3Jhd19zeW5kcm9tZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKLQkJCSAgICAgIHVpbnQ4X3QgKmJ1ZikKKwkJCSAgICAgIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCiB7CiAJaW50IGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKIAlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CkBAIC04MjEsNyArODIwLDcgQEAKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKICAqLwogc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9zd2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKLQkJCQl1aW50OF90ICpidWYpCisJCQkJdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKIHsKIAlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOwogCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKQEAgLTgzMSw3ICs4MzAsNyBAQAogCXVpbnQ4X3QgKmVjY19jb2RlID0gY2hpcC0+YnVmZmVycy0+ZWNjY29kZTsKIAl1aW50MzJfdCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOwogCi0JY2hpcC0+ZWNjLnJlYWRfcGFnZV9yYXcobXRkLCBjaGlwLCBidWYpOworCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3KG10ZCwgY2hpcCwgYnVmLCBwYWdlKTsKIAogCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCiAJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOwpAQCAtOTQ0LDcgKzk0Myw3IEBACiAgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycyB3aGljaCBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCi0JCQkJdWludDhfdCAqYnVmKQorCQkJCXVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCiB7CiAJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKIAlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CkBAIC05ODAsNiArOTc5LDU0IEBACiB9CiAKIC8qKgorICogbmFuZF9yZWFkX3BhZ2VfaHdlY2Nfb29iX2ZpcnN0IC0gW1JFUExBQ0FCTEVdIGh3IGVjYywgcmVhZCBvb2IgZmlyc3QKKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICoKKyAqIEhhcmR3YXJlIEVDQyBmb3IgbGFyZ2UgcGFnZSBjaGlwcywgcmVxdWlyZSBPT0IgdG8gYmUgcmVhZCBmaXJzdC4KKyAqIEZvciB0aGlzIEVDQyBtb2RlLCB0aGUgd3JpdGVfcGFnZSBtZXRob2QgaXMgcmUtdXNlZCBmcm9tIEVDQ19IVy4KKyAqIFRoZXNlIG1ldGhvZHMgcmVhZC93cml0ZSBFQ0MgZnJvbSB0aGUgT09CIGFyZWEsIHVubGlrZSB0aGUKKyAqIEVDQ19IV19TWU5EUk9NRSBzdXBwb3J0IHdpdGggbXVsdGlwbGUgRUNDIHN0ZXBzLCBmb2xsb3dzIHRoZQorICogImluZml4IEVDQyIgc2NoZW1lIGFuZCByZWFkcy93cml0ZXMgRUNDIGZyb20gdGhlIGRhdGEgYXJlYSwgYnkKKyAqIG92ZXJ3cml0aW5nIHRoZSBOQU5EIG1hbnVmYWN0dXJlciBiYWQgYmxvY2sgbWFya2luZ3MuCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfaHdlY2Nfb29iX2ZpcnN0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKnAgPSBidWY7CisJdWludDhfdCAqZWNjX2NvZGUgPSBjaGlwLT5idWZmZXJzLT5lY2Njb2RlOworCXVpbnQzMl90ICplY2Nwb3MgPSBjaGlwLT5lY2MubGF5b3V0LT5lY2Nwb3M7CisJdWludDhfdCAqZWNjX2NhbGMgPSBjaGlwLT5idWZmZXJzLT5lY2NjYWxjOworCisJLyogUmVhZCB0aGUgT09CIGFyZWEgZmlyc3QgKi8KKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgMCwgcGFnZSk7CisJY2hpcC0+cmVhZF9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFEMCwgMCwgcGFnZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnRvdGFsOyBpKyspCisJCWVjY19jb2RlW2ldID0gY2hpcC0+b29iX3BvaVtlY2Nwb3NbaV1dOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQlpbnQgc3RhdDsKKworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19SRUFEKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBwLCBlY2NzaXplKTsKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZlY2NfY2FsY1tpXSk7CisKKwkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCBOVUxMKTsKKwkJaWYgKHN0YXQgPCAwKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBuYW5kX3JlYWRfcGFnZV9zeW5kcm9tZSAtIFtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2Mgc3luZHJvbSBiYXNlZCBwYWdlIHJlYWQKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQpAQCAtOTg5LDcgKzEwMzYsNyBAQAogICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCi0JCQkJICAgdWludDhfdCAqYnVmKQorCQkJCSAgIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCiB7CiAJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKIAlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CkBAIC0xMTMxLDExICsxMTc4LDEzIEBACiAKIAkJCS8qIE5vdyByZWFkIHRoZSBwYWdlIGludG8gdGhlIGJ1ZmZlciAqLwogCQkJaWYgKHVubGlrZWx5KG9wcy0+bW9kZSA9PSBNVERfT09CX1JBVykpCi0JCQkJcmV0ID0gY2hpcC0+ZWNjLnJlYWRfcGFnZV9yYXcobXRkLCBjaGlwLCBidWZwb2kpOworCQkJCXJldCA9IGNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3KG10ZCwgY2hpcCwKKwkJCQkJCQkgICAgICBidWZwb2ksIHBhZ2UpOwogCQkJZWxzZSBpZiAoIWFsaWduZWQgJiYgTkFORF9TVUJQQUdFX1JFQUQoY2hpcCkgJiYgIW9vYikKIAkJCQlyZXQgPSBjaGlwLT5lY2MucmVhZF9zdWJwYWdlKG10ZCwgY2hpcCwgY29sLCBieXRlcywgYnVmcG9pKTsKIAkJCWVsc2UKLQkJCQlyZXQgPSBjaGlwLT5lY2MucmVhZF9wYWdlKG10ZCwgY2hpcCwgYnVmcG9pKTsKKwkJCQlyZXQgPSBjaGlwLT5lY2MucmVhZF9wYWdlKG10ZCwgY2hpcCwgYnVmcG9pLAorCQkJCQkJCSAgcGFnZSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIApAQCAtMTQxMyw4ICsxNDYyLDggQEAKIAlpbnQgbGVuOwogCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+b29iYnVmOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfcmVhZF9vb2I6IGZyb20gPSAweCUwOEx4LCBsZW4gPSAlaVxuIiwKLQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZyb20sIHJlYWRsZW4pOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogZnJvbSA9IDB4JTA4THgsIGxlbiA9ICVpXG4iLAorCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpZnJvbSwgcmVhZGxlbik7CiAKIAlpZiAob3BzLT5tb2RlID09IE1URF9PT0JfQVVUTykKIAkJbGVuID0gY2hpcC0+ZWNjLmxheW91dC0+b29iYXZhaWw7CkBAIC0xNDIyLDggKzE0NzEsOCBAQAogCQlsZW4gPSBtdGQtPm9vYnNpemU7CiAKIAlpZiAodW5saWtlbHkob3BzLT5vb2JvZmZzID49IGxlbikpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6ICIKLQkJCSJBdHRlbXB0IHRvIHN0YXJ0IHJlYWQgb3V0c2lkZSBvb2JcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEF0dGVtcHQgdG8gc3RhcnQgcmVhZCAiCisJCQkJCSJvdXRzaWRlIG9vYlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE0MzEsOCArMTQ4MCw4IEBACiAJaWYgKHVubGlrZWx5KGZyb20gPj0gbXRkLT5zaXplIHx8CiAJCSAgICAgb3BzLT5vb2JvZmZzICsgcmVhZGxlbiA+ICgobXRkLT5zaXplID4+IGNoaXAtPnBhZ2Vfc2hpZnQpIC0KIAkJCQkJKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCkpICogbGVuKSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX29vYjogIgotCQkJIkF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgIgorCQkJCQkib2YgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTUwNiw4ICsxNTU1LDggQEAKIAogCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAob3BzLT5kYXRidWYgJiYgKGZyb20gKyBvcHMtPmxlbikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6ICIKLQkJICAgICAgIkF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogQXR0ZW1wdCByZWFkICIKKwkJCQkiYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xODE2LDggKzE4NjUsOCBAQAogCiAJLyogcmVqZWN0IHdyaXRlcywgd2hpY2ggYXJlIG5vdCBwYWdlIGFsaWduZWQgKi8KIAlpZiAoTk9UQUxJR05FRCh0bykgfHwgTk9UQUxJR05FRChvcHMtPmxlbikpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJuYW5kX3dyaXRlOiAiCi0JCSAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBBdHRlbXB0IHRvIHdyaXRlIG5vdCAiCisJCQkJInBhZ2UgYWxpZ25lZCBkYXRhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTk0NCw4ICsxOTkzLDggQEAKIAlpbnQgY2hpcG5yLCBwYWdlLCBzdGF0dXMsIGxlbjsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfd3JpdGVfb29iOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCi0JICAgICAgKHVuc2lnbmVkIGludCl0bywgKGludClvcHMtPm9vYmxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCisJCQkgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpdG8sIChpbnQpb3BzLT5vb2JsZW4pOwogCiAJaWYgKG9wcy0+bW9kZSA9PSBNVERfT09CX0FVVE8pCiAJCWxlbiA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsOwpAQCAtMTk1NCwxNCArMjAwMywxNCBAQAogCiAJLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2UgKi8KIAlpZiAoKG9wcy0+b29ib2ZmcyArIG9wcy0+b29ibGVuKSA+IGxlbikgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6ICIKLQkJICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgcGFnZVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogQXR0ZW1wdCB0byB3cml0ZSAiCisJCQkJInBhc3QgZW5kIG9mIHBhZ2VcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHVubGlrZWx5KG9wcy0+b29ib2ZmcyA+PSBsZW4pKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2RvX3dyaXRlX29vYjogIgotCQkJIkF0dGVtcHQgdG8gc3RhcnQgd3JpdGUgb3V0c2lkZSBvb2JcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEF0dGVtcHQgdG8gc3RhcnQgIgorCQkJCSJ3cml0ZSBvdXRzaWRlIG9vYlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5NzAsOCArMjAxOSw4IEBACiAJCSAgICAgb3BzLT5vb2JvZmZzICsgb3BzLT5vb2JsZW4gPgogCQkJKChtdGQtPnNpemUgPj4gY2hpcC0+cGFnZV9zaGlmdCkgLQogCQkJICh0byA+PiBjaGlwLT5wYWdlX3NoaWZ0KSkgKiBsZW4pKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2RvX3dyaXRlX29vYjogIgotCQkJIkF0dGVtcHQgd3JpdGUgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEF0dGVtcHQgd3JpdGUgYmV5b25kICIKKwkJCQkiZW5kIG9mIGRldmljZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIwMjYsOCArMjA3NSw4IEBACiAKIAkvKiBEbyBub3QgYWxsb3cgd3JpdGVzIHBhc3QgZW5kIG9mIGRldmljZSAqLwogCWlmIChvcHMtPmRhdGJ1ZiAmJiAodG8gKyBvcHMtPmxlbikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfb29iOiAiCi0JCSAgICAgICJBdHRlbXB0IHdyaXRlIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBBdHRlbXB0IHdyaXRlIGJleW9uZCAiCisJCQkJImVuZCBvZiBkZXZpY2VcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMTE3LDI2ICsyMTY2LDI3IEBACiAJdW5zaWduZWQgaW50IGJidF9tYXNrZWRfcGFnZSA9IDB4ZmZmZmZmZmY7CiAJbG9mZl90IGxlbjsKIAotCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTAxMmxseCwgbGVuID0gJWxsdVxuIiwKLQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluc3RyLT5hZGRyLCAodW5zaWduZWQgbG9uZyBsb25nKWluc3RyLT5sZW4pOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogc3RhcnQgPSAweCUwMTJsbHgsIGxlbiA9ICVsbHVcbiIsCisJCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpaW5zdHItPmFkZHIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbnN0ci0+bGVuKTsKIAogCS8qIFN0YXJ0IGFkZHJlc3MgbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLwogCWlmIChpbnN0ci0+YWRkciAmICgoMSA8PCBjaGlwLT5waHlzX2VyYXNlX3NoaWZ0KSAtIDEpKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBVbmFsaWduZWQgYWRkcmVzc1xuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogVW5hbGlnbmVkIGFkZHJlc3NcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTGVuZ3RoIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KIAlpZiAoaW5zdHItPmxlbiAmICgoMSA8PCBjaGlwLT5waHlzX2VyYXNlX3NoaWZ0KSAtIDEpKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiCi0JCSAgICAgICJMZW5ndGggbm90IGJsb2NrIGFsaWduZWRcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IExlbmd0aCBub3QgYmxvY2sgYWxpZ25lZFxuIiwKKwkJCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBEbyBub3QgYWxsb3cgZXJhc2UgcGFzdCBlbmQgb2YgZGV2aWNlICovCiAJaWYgKChpbnN0ci0+bGVuICsgaW5zdHItPmFkZHIpID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiCi0JCSAgICAgICJFcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEVyYXNlIHBhc3QgZW5kIG9mIGRldmljZVxuIiwKKwkJCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIxNTcsOCArMjIwNyw4IEBACiAKIAkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCiAJaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIgotCQkgICAgICAiRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZCEhIVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZCEhIVxuIiwKKwkJCQkJX19mdW5jX18pOwogCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwogCQlnb3RvIGVyYXNlX2V4aXQ7CiAJfQpAQCAtMjE4Myw4ICsyMjMzLDggQEAKIAkJICovCiAJCWlmIChuYW5kX2Jsb2NrX2NoZWNrYmFkKG10ZCwgKChsb2ZmX3QpIHBhZ2UpIDw8CiAJCQkJCWNoaXAtPnBhZ2Vfc2hpZnQsIDAsIGFsbG93YmJ0KSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmFuZF9lcmFzZTogYXR0ZW1wdCB0byBlcmFzZSBhICIKLQkJCSAgICAgICAiYmFkIGJsb2NrIGF0IHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBhdHRlbXB0IHRvIGVyYXNlIGEgYmFkIGJsb2NrICIKKwkJCQkJImF0IHBhZ2UgMHglMDh4XG4iLCBfX2Z1bmNfXywgcGFnZSk7CiAJCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwogCQkJZ290byBlcmFzZV9leGl0OwogCQl9CkBAIC0yMjExLDggKzIyNjEsOCBAQAogCiAJCS8qIFNlZSBpZiBibG9jayBlcmFzZSBzdWNjZWVkZWQgKi8KIAkJaWYgKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiCi0JCQkgICAgICAiRmFpbGVkIGVyYXNlLCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEZhaWxlZCBlcmFzZSwgIgorCQkJCQkicGFnZSAweCUwOHhcbiIsIF9fZnVuY19fLCBwYWdlKTsKIAkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CiAJCQlpbnN0ci0+ZmFpbF9hZGRyID0KIAkJCQkoKGxvZmZfdClwYWdlIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpOwpAQCAtMjI3Miw5ICsyMzIyLDkgQEAKIAkJaWYgKCFyZXdyaXRlX2JidFtjaGlwbnJdKQogCQkJY29udGludWU7CiAJCS8qIHVwZGF0ZSB0aGUgQkJUIGZvciBjaGlwICovCi0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlX25hbmQ6IG5hbmRfdXBkYXRlX2JidCAiCi0JCSAgICAgICIoJWQ6MHglMGxseCAweCUweClcbiIsIGNoaXBuciwgcmV3cml0ZV9iYnRbY2hpcG5yXSwKLQkJICAgICAgY2hpcC0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdKTsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBuYW5kX3VwZGF0ZV9iYnQgIgorCQkJIiglZDoweCUwbGx4IDB4JTB4KVxuIiwgX19mdW5jX18sIGNoaXBuciwKKwkJCXJld3JpdGVfYmJ0W2NoaXBucl0sIGNoaXAtPmJidF90ZC0+cGFnZXNbY2hpcG5yXSk7CiAJCW5hbmRfdXBkYXRlX2JidChtdGQsIHJld3JpdGVfYmJ0W2NoaXBucl0pOwogCX0KIApAQCAtMjI5Miw3ICsyMzQyLDcgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfc3luYzogY2FsbGVkXG4iKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6IGNhbGxlZFxuIiwgX19mdW5jX18pOwogCiAJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCiAJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfU1lOQ0lORyk7CkBAIC0yMzU2LDggKzI0MDYsOCBAQAogCWlmIChjaGlwLT5zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpCiAJCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAibmFuZF9yZXN1bWUoKSBjYWxsZWQgZm9yIGEgY2hpcCB3aGljaCBpcyBub3QgIgotCQkgICAgICAgImluIHN1c3BlbmRlZCBzdGF0ZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgY2FsbGVkIGZvciBhIGNoaXAgd2hpY2ggaXMgbm90ICIKKwkJICAgICAgICJpbiBzdXNwZW5kZWQgc3RhdGVcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoKQEAgLTI2NzEsNiArMjcyMSwxNyBAQAogCSAqLwogCiAJc3dpdGNoIChjaGlwLT5lY2MubW9kZSkgeworCWNhc2UgTkFORF9FQ0NfSFdfT09CX0ZJUlNUOgorCQkvKiBTaW1pbGFyIHRvIE5BTkRfRUNDX0hXLCBidXQgYSBzZXBhcmF0ZSByZWFkX3BhZ2UgaGFuZGxlICovCisJCWlmICghY2hpcC0+ZWNjLmNhbGN1bGF0ZSB8fCAhY2hpcC0+ZWNjLmNvcnJlY3QgfHwKKwkJICAgICAhY2hpcC0+ZWNjLmh3Y3RsKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBFQ0MgZnVuY3Rpb25zIHN1cHBsaWVkOyAiCisJCQkgICAgICAgIkhhcmR3YXJlIEVDQyBub3QgcG9zc2libGVcbiIpOworCQkJQlVHKCk7CisJCX0KKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9wYWdlKQorCQkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX2h3ZWNjX29vYl9maXJzdDsKKwogCWNhc2UgTkFORF9FQ0NfSFc6CiAJCS8qIFVzZSBzdGFuZGFyZCBod2VjYyByZWFkIHBhZ2UgZnVuY3Rpb24gPyAqLwogCQlpZiAoIWNoaXAtPmVjYy5yZWFkX3BhZ2UpCkBAIC0yNjkzLDcgKzI3NTQsNyBAQAogCQkgICAgIGNoaXAtPmVjYy5yZWFkX3BhZ2UgPT0gbmFuZF9yZWFkX3BhZ2VfaHdlY2MgfHwKIAkJICAgICAhY2hpcC0+ZWNjLndyaXRlX3BhZ2UgfHwKIAkJICAgICBjaGlwLT5lY2Mud3JpdGVfcGFnZSA9PSBuYW5kX3dyaXRlX3BhZ2VfaHdlY2MpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBFQ0MgZnVuY3Rpb25zIHN1cHBsaWVkLCAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBFQ0MgZnVuY3Rpb25zIHN1cHBsaWVkOyAiCiAJCQkgICAgICAgIkhhcmR3YXJlIEVDQyBub3QgcG9zc2libGVcbiIpOwogCQkJQlVHKCk7CiAJCX0KQEAgLTI3MjgsNyArMjc4OSw4IEBACiAJCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CiAJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOwogCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOwotCQljaGlwLT5lY2Muc2l6ZSA9IDI1NjsKKwkJaWYgKCFjaGlwLT5lY2Muc2l6ZSkKKwkJCWNoaXAtPmVjYy5zaXplID0gMjU2OwogCQljaGlwLT5lY2MuYnl0ZXMgPSAzOwogCQlicmVhazsKIApAQCAtMjg1OCw3ICsyOTIwLDggQEAKIAogCS8qIE1hbnkgY2FsbGVycyBnb3QgdGhpcyB3cm9uZywgc28gY2hlY2sgZm9yIGl0IGZvciBhIHdoaWxlLi4uICovCiAJaWYgKCFtdGQtPm93bmVyICYmIGNhbGxlcl9pc19tb2R1bGUoKSkgewotCQlwcmludGsoS0VSTl9DUklUICJuYW5kX3NjYW4oKSBjYWxsZWQgd2l0aCBOVUxMIG10ZC0+b3duZXIhXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiJXMgY2FsbGVkIHdpdGggTlVMTCBtdGQtPm93bmVyIVxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCUJVRygpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCmluZGV4IGMwY2I4N2QuLmRiN2FlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKQEAgLTQxNywyMiArNDE3LDIyIEBACiBFWFBPUlRfU1lNQk9MKG5hbmRfY2FsY3VsYXRlX2VjYyk7CiAKIC8qKgotICogbmFuZF9jb3JyZWN0X2RhdGEgLSBbTkFORCBJbnRlcmZhY2VdIERldGVjdCBhbmQgY29ycmVjdCBiaXQgZXJyb3IocykKLSAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKKyAqIF9fbmFuZF9jb3JyZWN0X2RhdGEgLSBbTkFORCBJbnRlcmZhY2VdIERldGVjdCBhbmQgY29ycmVjdCBiaXQgZXJyb3IocykKICAqIEBidWY6CXJhdyBkYXRhIHJlYWQgZnJvbSB0aGUgY2hpcAogICogQHJlYWRfZWNjOglFQ0MgZnJvbSB0aGUgY2hpcAogICogQGNhbGNfZWNjOgl0aGUgRUNDIGNhbGN1bGF0ZWQgZnJvbSByYXcgZGF0YQorICogQGVjY3NpemU6CWRhdGEgYnl0ZXMgcGVyIGVjYyBzdGVwICgyNTYgb3IgNTEyKQogICoKLSAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYvNTEyIGJ5dGUgYmxvY2sKKyAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciBlY2NzaXplIGJ5dGUgYmxvY2sKICAqLwotaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCSAgICAgIHVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykKK2ludCBfX25hbmRfY29ycmVjdF9kYXRhKHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCXVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYywKKwkJCXVuc2lnbmVkIGludCBlY2NzaXplKQogewogCXVuc2lnbmVkIGNoYXIgYjAsIGIxLCBiMiwgYml0X2FkZHI7CiAJdW5zaWduZWQgaW50IGJ5dGVfYWRkcjsKIAkvKiAyNTYgb3IgNTEyIGJ5dGVzL2VjYyAgKi8KLQljb25zdCB1aW50MzJfdCBlY2NzaXplX211bHQgPQotCQkJKCgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPmVjYy5zaXplKSA+PiA4OworCWNvbnN0IHVpbnQzMl90IGVjY3NpemVfbXVsdCA9IGVjY3NpemUgPj4gODsKIAogCS8qCiAJICogYjAgdG8gYjIgaW5kaWNhdGUgd2hpY2ggYml0IGlzIGZhdWx0eSAoaWYgYW55KQpAQCAtNDk1LDYgKzQ5NSwyMyBAQAogCXByaW50ayhLRVJOX0VSUiAidW5jb3JyZWN0YWJsZSBlcnJvciA6ICIpOwogCXJldHVybiAtMTsKIH0KK0VYUE9SVF9TWU1CT0woX19uYW5kX2NvcnJlY3RfZGF0YSk7CisKKy8qKgorICogbmFuZF9jb3JyZWN0X2RhdGEgLSBbTkFORCBJbnRlcmZhY2VdIERldGVjdCBhbmQgY29ycmVjdCBiaXQgZXJyb3IocykKKyAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKKyAqIEBidWY6CXJhdyBkYXRhIHJlYWQgZnJvbSB0aGUgY2hpcAorICogQHJlYWRfZWNjOglFQ0MgZnJvbSB0aGUgY2hpcAorICogQGNhbGNfZWNjOgl0aGUgRUNDIGNhbGN1bGF0ZWQgZnJvbSByYXcgZGF0YQorICoKKyAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYvNTEyIGJ5dGUgYmxvY2sKKyAqLworaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykKK3sKKwlyZXR1cm4gX19uYW5kX2NvcnJlY3RfZGF0YShidWYsIHJlYWRfZWNjLCBjYWxjX2VjYywKKwkJCQkgICAoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSk7Cit9CiBFWFBPUlRfU1lNQk9MKG5hbmRfY29ycmVjdF9kYXRhKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwppbmRleCA4OWJmODVhLi40MGI1NjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwpAQCAtMTAyLDggKzEwMiw4IEBACiAJd21iKCk7CiAJZWNjID0gaW5fYmUzMihuZGZjLT5uZGZjYmFzZSArIE5ERkNfRUNDKTsKIAkvKiBUaGUgTkRGQyB1c2VzIFNtYXJ0IE1lZGlhIChTTUMpIGJ5dGVzIG9yZGVyICovCi0JZWNjX2NvZGVbMF0gPSBwWzJdOwotCWVjY19jb2RlWzFdID0gcFsxXTsKKwllY2NfY29kZVswXSA9IHBbMV07CisJZWNjX2NvZGVbMV0gPSBwWzJdOwogCWVjY19jb2RlWzJdID0gcFszXTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9ub21hZGlrX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbm9tYWRpa19uYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzMDJkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbm9tYWRpa19uYW5kLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiAgZHJpdmVycy9tdGQvbmFuZC9ub21hZGlrX25hbmQuYworICoKKyAqICBPdmVydmlldzoKKyAqICAJRHJpdmVyIGZvciBvbi1ib2FyZCBOQU5EIGZsYXNoIG9uIE5vbWFkaWsgUGxhdGZvcm1zCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDcgU1RNaWNyb2VsZWN0cm9uaWNzIFB2dC4gTHRkLgorICogQXV0aG9yOiBTYWNoaW4gVmVybWEgPHNhY2hpbi52ZXJtYUBzdC5jb20+CisgKgorICogQ29weXJpZ2h0IMKpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9mc21jLmg+CisKKyNpbmNsdWRlIDxtdGQvbXRkLWFiaS5oPgorCitzdHJ1Y3Qgbm9tYWRpa19uYW5kX2hvc3QgeworCXN0cnVjdCBtdGRfaW5mbwkJbXRkOworCXN0cnVjdCBuYW5kX2NoaXAJbmFuZDsKKwl2b2lkIF9faW9tZW0gKmRhdGFfdmE7CisJdm9pZCBfX2lvbWVtICpjbWRfdmE7CisJdm9pZCBfX2lvbWVtICphZGRyX3ZhOworCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmJ0X2Rlc2M7Cit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5vbWFkaWtfZWNjX2xheW91dCA9IHsKKwkuZWNjYnl0ZXMgPSAzICogNCwKKwkuZWNjcG9zID0geyAvKiBlYWNoIHN1YnBhZ2UgaGFzIDE2IGJ5dGVzOiBwb3MgMiwzLDQgaG9zdHMgRUNDICovCisJCTB4MDIsIDB4MDMsIDB4MDQsCisJCTB4MTIsIDB4MTMsIDB4MTQsCisJCTB4MjIsIDB4MjMsIDB4MjQsCisJCTB4MzIsIDB4MzMsIDB4MzR9LAorCS8qIGxldCdzIGtlZXAgYnl0ZXMgNSw2LDcgZm9yIHVzLCBqdXN0IGluIGNhc2Ugd2UgY2hhbmdlIEVDQyBhbGdvICovCisJLm9vYmZyZWUgPSB7IHsweDA4LCAweDA4fSwgezB4MTgsIDB4MDh9LCB7MHgyOCwgMHgwOH0sIHsweDM4LCAweDA4fSB9LAorfTsKKworc3RhdGljIHZvaWQgbm9tYWRpa19lY2NfY29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCit7CisJLyogTm8gbmVlZCB0byBlbmFibGUgaHcgZWNjLCBpdCdzIG9uIGJ5IGRlZmF1bHQgKi8KK30KKworc3RhdGljIHZvaWQgbm9tYWRpa19jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3Qgbm9tYWRpa19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kLT5wcml2OworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWIoY21kLCBob3N0LT5jbWRfdmEpOworCWVsc2UKKwkJd3JpdGViKGNtZCwgaG9zdC0+YWRkcl92YSk7Cit9CisKK3N0YXRpYyBpbnQgbm9tYWRpa19uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5vbWFkaWtfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBub21hZGlrX25hbmRfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQgPSAwOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZGV2aWNlIHN0cnVjdHVyZSAoYW5kIHplcm8gaXQpICovCisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub21hZGlrX25hbmRfaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBDYWxsIHRoZSBjbGllbnQncyBpbml0IGZ1bmN0aW9uLCBpZiBhbnkgKi8KKwlpZiAocGRhdGEtPmluaXQpCisJCXJldCA9IHBkYXRhLT5pbml0KCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW5pdCBmdW5jdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBpb3JlbWFwIHRocmVlIHJlZ2lvbnMgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAibmFuZF9hZGRyIik7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCWhvc3QtPmFkZHJfdmEgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIm5hbmRfZGF0YSIpOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwlob3N0LT5kYXRhX3ZhID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJuYW5kX2NtZCIpOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwlob3N0LT5jbWRfdmEgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJaWYgKCFob3N0LT5hZGRyX3ZhIHx8ICFob3N0LT5kYXRhX3ZhIHx8ICFob3N0LT5jbWRfdmEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJLyogTGluayBhbGwgcHJpdmF0ZSBwb2ludGVycyAqLworCW10ZCA9ICZob3N0LT5tdGQ7CisJbmFuZCA9ICZob3N0LT5uYW5kOworCW10ZC0+cHJpdiA9IG5hbmQ7CisJbmFuZC0+cHJpdiA9IGhvc3Q7CisKKwlob3N0LT5tdGQub3duZXIgPSBUSElTX01PRFVMRTsKKwluYW5kLT5JT19BRERSX1IgPSBob3N0LT5kYXRhX3ZhOworCW5hbmQtPklPX0FERFJfVyA9IGhvc3QtPmRhdGFfdmE7CisJbmFuZC0+Y21kX2N0cmwgPSBub21hZGlrX2NtZF9jdHJsOworCisJLyoKKwkgKiBUaGlzIHN0YW56YSBkZWNsYXJlcyBFQ0NfSFcgYnV0IHVzZXMgc29mdCByb3V0aW5lcy4gSXQncyBiZWNhdXNlCisJICogSFcgY2xhaW1zIHRvIG1ha2UgdGhlIGNhbGN1bGF0aW9uIGJ1dCBub3QgdGhlIGNvcnJlY3Rpb24uIEhvd2V2ZXIsCisJICogSSBoYXZlbid0IG1hbmFnZWQgdG8gZ2V0IHRoZSBkZXNpcmVkIGRhdGEgb3V0IG9mIGl0IHVudGlsIG5vdy4KKwkgKi8KKwluYW5kLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJbmFuZC0+ZWNjLmxheW91dCA9ICZub21hZGlrX2VjY19sYXlvdXQ7CisJbmFuZC0+ZWNjLmh3Y3RsID0gbm9tYWRpa19lY2NfY29udHJvbDsKKwluYW5kLT5lY2Muc2l6ZSA9IDUxMjsKKwluYW5kLT5lY2MuYnl0ZXMgPSAzOworCisJbmFuZC0+b3B0aW9ucyA9IHBkYXRhLT5vcHRpb25zOworCisJLyoKKwkgKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UKKwkgKi8KKwlpZiAobmFuZF9zY2FuKCZob3N0LT5tdGQsIDEpKSB7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJYWRkX210ZF9wYXJ0aXRpb25zKCZob3N0LT5tdGQsIHBkYXRhLT5wYXJ0cywgcGRhdGEtPm5wYXJ0cyk7CisjZWxzZQorCXByX2luZm8oIlJlZ2lzdGVyaW5nICVzIGFzIHdob2xlIGRldmljZVxuIiwgbXRkLT5uYW1lKTsKKwlhZGRfbXRkX2RldmljZShtdGQpOworI2VuZGlmCisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKKwlyZXR1cm4gMDsKKworIGVycl91bm1hcDoKKwlpZiAoaG9zdC0+Y21kX3ZhKQorCQlpb3VubWFwKGhvc3QtPmNtZF92YSk7CisJaWYgKGhvc3QtPmRhdGFfdmEpCisJCWlvdW5tYXAoaG9zdC0+ZGF0YV92YSk7CisJaWYgKGhvc3QtPmFkZHJfdmEpCisJCWlvdW5tYXAoaG9zdC0+YWRkcl92YSk7CisgZXJyOgorCWtmcmVlKGhvc3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDbGVhbiB1cCByb3V0aW5lCisgKi8KK3N0YXRpYyBpbnQgbm9tYWRpa19uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBub21hZGlrX25hbmRfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBub21hZGlrX25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YS0+ZXhpdCkKKwkJcGRhdGEtPmV4aXQoKTsKKworCWlmIChob3N0KSB7CisJCWlvdW5tYXAoaG9zdC0+Y21kX3ZhKTsKKwkJaW91bm1hcChob3N0LT5kYXRhX3ZhKTsKKwkJaW91bm1hcChob3N0LT5hZGRyX3ZhKTsKKwkJa2ZyZWUoaG9zdCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vbWFkaWtfbmFuZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgbm9tYWRpa19uYW5kX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKwlpZiAoaG9zdCkKKwkJcmV0ID0gaG9zdC0+bXRkLnN1c3BlbmQoJmhvc3QtPm10ZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBub21hZGlrX25hbmRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgbm9tYWRpa19uYW5kX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoaG9zdCkKKwkJaG9zdC0+bXRkLnJlc3VtZSgmaG9zdC0+bXRkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG5vbWFkaWtfbmFuZF9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBub21hZGlrX25hbmRfc3VzcGVuZCwKKwkucmVzdW1lID0gbm9tYWRpa19uYW5kX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5vbWFkaWtfbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlID0gbm9tYWRpa19uYW5kX3Byb2JlLAorCS5yZW1vdmUgPSBub21hZGlrX25hbmRfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJub21hZGlrX25hbmQiLAorCQkucG0gPSAmbm9tYWRpa19uYW5kX3BtX29wcywKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmFuZF9ub21hZGlrX2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCJOb21hZGlrIE5BTkQgZHJpdmVyXG4iKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZub21hZGlrX25hbmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5hbmRfbm9tYWRpa19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5vbWFkaWtfbmFuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChuYW5kX25vbWFkaWtfaW5pdCk7Cittb2R1bGVfZXhpdChuYW5kX25vbWFkaWtfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlNUIE1pY3JvZWxlY3Ryb25pY3MgKHNhY2hpbi52ZXJtYUBzdC5jb20pIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5BTkQgZHJpdmVyIGZvciBOb21hZGlrIFBsYXRmb3JtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL29tYXAyLmMgYi9kcml2ZXJzL210ZC9uYW5kL29tYXAyLmMKaW5kZXggZWJkMDdlOS4uMDkwYWI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9vbWFwMi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYwpAQCAtMTgsOCArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLQorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CiAKQEAgLTExMiw2ICsxMTEsMjcgQEAKIHN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENICitzdGF0aWMgaW50IHVzZV9wcmVmZXRjaCA9IDE7CisKKy8qICJtb2Rwcm9iZSAuLi4gdXNlX3ByZWZldGNoPTAiIGV0YyAqLworbW9kdWxlX3BhcmFtKHVzZV9wcmVmZXRjaCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9wcmVmZXRjaCwgImVuYWJsZS9kaXNhYmxlIHVzZSBvZiBQUkVGRVRDSCIpOworCisjaWZkZWYgQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0hfRE1BCitzdGF0aWMgaW50IHVzZV9kbWEgPSAxOworCisvKiAibW9kcHJvYmUgLi4uIHVzZV9kbWE9MCIgZXRjICovCittb2R1bGVfcGFyYW0odXNlX2RtYSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9kbWEsICJlbmFibGUvZGlzYWJsZSB1c2Ugb2YgRE1BIik7CisjZWxzZQorY29uc3QgaW50IHVzZV9kbWE7CisjZW5kaWYKKyNlbHNlCitjb25zdCBpbnQgdXNlX3ByZWZldGNoOworY29uc3QgaW50IHVzZV9kbWE7CisjZW5kaWYKKwogc3RydWN0IG9tYXBfbmFuZF9pbmZvIHsKIAlzdHJ1Y3QgbmFuZF9od19jb250cm9sCQljb250cm9sbGVyOwogCXN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CkBAIC0xMjQsNiArMTQ0LDkgQEAKIAl1bnNpZ25lZCBsb25nCQkJcGh5c19iYXNlOwogCXZvaWQgX19pb21lbQkJCSpncG1jX2NzX2Jhc2VhZGRyOwogCXZvaWQgX19pb21lbQkJCSpncG1jX2Jhc2VhZGRyOworCXZvaWQgX19pb21lbQkJCSpuYW5kX3ByZWZfZmlmb19hZGQ7CisJc3RydWN0IGNvbXBsZXRpb24JCWNvbXA7CisJaW50CQkJCWRtYV9jaDsKIH07CiAKIC8qKgpAQCAtMTg5LDYgKzIxMiwzOCBAQAogfQogCiAvKioKKyAqIG9tYXBfcmVhZF9idWY4IC0gcmVhZCBkYXRhIGZyb20gTkFORCBjb250cm9sbGVyIGludG8gYnVmZmVyCisgKiBAbXRkOiBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGJ1ZjogYnVmZmVyIHRvIHN0b3JlIGRhdGUKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byByZWFkCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfcmVhZF9idWY4KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gbXRkLT5wcml2OworCisJaW9yZWFkOF9yZXAobmFuZC0+SU9fQUREUl9SLCBidWYsIGxlbik7Cit9CisKKy8qKgorICogb21hcF93cml0ZV9idWY4IC0gd3JpdGUgYnVmZmVyIHRvIE5BTkQgY29udHJvbGxlcgorICogQG10ZDogTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBidWY6IGRhdGEgYnVmZmVyCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqLworc3RhdGljIHZvaWQgb21hcF93cml0ZV9idWY4KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAorCQkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOworCXVfY2hhciAqcCA9ICh1X2NoYXIgKilidWY7CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJaW93cml0ZTgoKnArKywgaW5mby0+bmFuZC5JT19BRERSX1cpOworCQl3aGlsZSAoR1BNQ19CVUZfRU1QVFkgPT0gKHJlYWRsKGluZm8tPmdwbWNfYmFzZWFkZHIgKworCQkJCQkJR1BNQ19TVEFUVVMpICYgR1BNQ19CVUZfRlVMTCkpOworCX0KK30KKworLyoqCiAgKiBvbWFwX3JlYWRfYnVmMTYgLSByZWFkIGRhdGEgZnJvbSBOQU5EIGNvbnRyb2xsZXIgaW50byBidWZmZXIKICAqIEBtdGQ6IE1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAYnVmOiBidWZmZXIgdG8gc3RvcmUgZGF0ZQpAQCAtMTk4LDcgKzI1Myw3IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKIAotCV9fcmF3X3JlYWRzdyhuYW5kLT5JT19BRERSX1IsIGJ1ZiwgbGVuIC8gMik7CisJaW9yZWFkMTZfcmVwKG5hbmQtPklPX0FERFJfUiwgYnVmLCBsZW4gLyAyKTsKIH0KIAogLyoqCkBAIC0yMTcsMTMgKzI3MiwyNDIgQEAKIAlsZW4gPj49IDE7CiAKIAl3aGlsZSAobGVuLS0pIHsKLQkJd3JpdGV3KCpwKyssIGluZm8tPm5hbmQuSU9fQUREUl9XKTsKKwkJaW93cml0ZTE2KCpwKyssIGluZm8tPm5hbmQuSU9fQUREUl9XKTsKIAogCQl3aGlsZSAoR1BNQ19CVUZfRU1QVFkgPT0gKHJlYWRsKGluZm8tPmdwbWNfYmFzZWFkZHIgKwogCQkJCQkJR1BNQ19TVEFUVVMpICYgR1BNQ19CVUZfRlVMTCkpCiAJCQk7CiAJfQogfQorCisvKioKKyAqIG9tYXBfcmVhZF9idWZfcHJlZiAtIHJlYWQgZGF0YSBmcm9tIE5BTkQgY29udHJvbGxlciBpbnRvIGJ1ZmZlcgorICogQG10ZDogTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBidWY6IGJ1ZmZlciB0byBzdG9yZSBkYXRlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICovCitzdGF0aWMgdm9pZCBvbWFwX3JlYWRfYnVmX3ByZWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBvbWFwX25hbmRfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihtdGQsCisJCQkJCQlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8sIG10ZCk7CisJdWludDMyX3QgcGZwd19zdGF0dXMgPSAwLCByX2NvdW50ID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgKnAgPSAodTMyICopYnVmOworCisJLyogdGFrZSBjYXJlIG9mIHN1YnBhZ2UgcmVhZHMgKi8KKwlmb3IgKDsgbGVuICUgNCAhPSAwOyApIHsKKwkJKmJ1ZisrID0gX19yYXdfcmVhZGIoaW5mby0+bmFuZC5JT19BRERSX1IpOworCQlsZW4tLTsKKwl9CisJcCA9ICh1MzIgKikgYnVmOworCisJLyogY29uZmlndXJlIGFuZCBzdGFydCBwcmVmZXRjaCB0cmFuc2ZlciAqLworCXJldCA9IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGluZm8tPmdwbWNfY3MsIDB4MCwgbGVuLCAweDApOworCWlmIChyZXQpIHsKKwkJLyogUEZQVyBlbmdpbmUgaXMgYnVzeSwgdXNlIGNwdSBjb3B5IG1ldGhvZCAqLworCQlpZiAoaW5mby0+bmFuZC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCW9tYXBfcmVhZF9idWYxNihtdGQsIGJ1ZiwgbGVuKTsKKwkJZWxzZQorCQkJb21hcF9yZWFkX2J1ZjgobXRkLCBidWYsIGxlbik7CisJfSBlbHNlIHsKKwkJZG8geworCQkJcGZwd19zdGF0dXMgPSBncG1jX3ByZWZldGNoX3N0YXR1cygpOworCQkJcl9jb3VudCA9ICgocGZwd19zdGF0dXMgPj4gMjQpICYgMHg3RikgPj4gMjsKKwkJCWlvcmVhZDMyX3JlcChpbmZvLT5uYW5kX3ByZWZfZmlmb19hZGQsIHAsIHJfY291bnQpOworCQkJcCArPSByX2NvdW50OworCQkJbGVuIC09IHJfY291bnQgPDwgMjsKKwkJfSB3aGlsZSAobGVuKTsKKworCQkvKiBkaXNhYmxlIGFuZCBzdG9wIHRoZSBQRlBXIGVuZ2luZSAqLworCQlncG1jX3ByZWZldGNoX3Jlc2V0KCk7CisJfQorfQorCisvKioKKyAqIG9tYXBfd3JpdGVfYnVmX3ByZWYgLSB3cml0ZSBidWZmZXIgdG8gTkFORCBjb250cm9sbGVyCisgKiBAbXRkOiBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGJ1ZjogZGF0YSBidWZmZXIKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICovCitzdGF0aWMgdm9pZCBvbWFwX3dyaXRlX2J1Zl9wcmVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAorCQkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOworCXVpbnQzMl90IHBmcHdfc3RhdHVzID0gMCwgd19jb3VudCA9IDA7CisJaW50IGkgPSAwLCByZXQgPSAwOworCXUxNiAqcCA9ICh1MTYgKikgYnVmOworCisJLyogdGFrZSBjYXJlIG9mIHN1YnBhZ2Ugd3JpdGVzICovCisJaWYgKGxlbiAlIDIgIT0gMCkgeworCQl3cml0ZWIoKmJ1ZiwgaW5mby0+bmFuZC5JT19BRERSX1IpOworCQlwID0gKHUxNiAqKShidWYgKyAxKTsKKwkJbGVuLS07CisJfQorCisJLyogIGNvbmZpZ3VyZSBhbmQgc3RhcnQgcHJlZmV0Y2ggdHJhbnNmZXIgKi8KKwlyZXQgPSBncG1jX3ByZWZldGNoX2VuYWJsZShpbmZvLT5ncG1jX2NzLCAweDAsIGxlbiwgMHgxKTsKKwlpZiAocmV0KSB7CisJCS8qIFBGUFcgZW5naW5lIGlzIGJ1c3ksIHVzZSBjcHUgY29weSBtZXRob2QgKi8KKwkJaWYgKGluZm8tPm5hbmQub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQlvbWFwX3dyaXRlX2J1ZjE2KG10ZCwgYnVmLCBsZW4pOworCQllbHNlCisJCQlvbWFwX3dyaXRlX2J1ZjgobXRkLCBidWYsIGxlbik7CisJfSBlbHNlIHsKKwkJcGZwd19zdGF0dXMgPSBncG1jX3ByZWZldGNoX3N0YXR1cygpOworCQl3aGlsZSAocGZwd19zdGF0dXMgJiAweDNGRkYpIHsKKwkJCXdfY291bnQgPSAoKHBmcHdfc3RhdHVzID4+IDI0KSAmIDB4N0YpID4+IDE7CisJCQlmb3IgKGkgPSAwOyAoaSA8IHdfY291bnQpICYmIGxlbjsgaSsrLCBsZW4gLT0gMikKKwkJCQlpb3dyaXRlMTYoKnArKywgaW5mby0+bmFuZF9wcmVmX2ZpZm9fYWRkKTsKKwkJCXBmcHdfc3RhdHVzID0gZ3BtY19wcmVmZXRjaF9zdGF0dXMoKTsKKwkJfQorCisJCS8qIGRpc2FibGUgYW5kIHN0b3AgdGhlIFBGUFcgZW5naW5lICovCisJCWdwbWNfcHJlZmV0Y2hfcmVzZXQoKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSF9ETUEKKy8qCisgKiBvbWFwX25hbmRfZG1hX2NiOiBjYWxsYmFjayBvbiB0aGUgY29tcGxldGlvbiBvZiBkbWEgdHJhbnNmZXIKKyAqIEBsY2g6IGxvZ2ljYWwgY2hhbm5lbAorICogQGNoX3NhdHV0czogY2hhbm5lbCBzdGF0dXMKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGNvbXBsZXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgb21hcF9uYW5kX2RtYV9jYihpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKSBkYXRhKTsKK30KKworLyoKKyAqIG9tYXBfbmFuZF9kbWFfdHJhbnNmZXI6IGNvbmZpZ2VyIGFuZCBzdGFydCBkbWEgdHJhbnNmZXIKKyAqIEBtdGQ6IE1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogdmlydHVhbCBhZGRyZXNzIGluIFJBTSBvZiBzb3VyY2UvZGVzdGluYXRpb24KKyAqIEBsZW46IG51bWJlciBvZiBkYXRhIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkCisgKiBAaXNfd3JpdGU6IGZsYWcgZm9yIHJlYWQvd3JpdGUgb3BlcmF0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfbmFuZF9kbWFfdHJhbnNmZXIoc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQgKmFkZHIsCisJCQkJCXVuc2lnbmVkIGludCBsZW4sIGludCBpc193cml0ZSkKK3sKKwlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAorCQkJCQlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8sIG10ZCk7CisJdWludDMyX3QgcHJlZmV0Y2hfc3RhdHVzID0gMDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBpc193cml0ZSA/IERNQV9UT19ERVZJQ0UgOgorCQkJCQkJCURNQV9GUk9NX0RFVklDRTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCByZXQ7CisKKwkvKiBUaGUgZmlmbyBkZXB0aCBpcyA2NCBieXRlcy4gV2UgaGF2ZSBhIHN5bmMgYXQgZWFjaCBmcmFtZSBhbmQgZnJhbWUKKwkgKiBsZW5ndGggaXMgNjQgYnl0ZXMuCisJICovCisJaW50IGJ1Zl9sZW4gPSBsZW4gPj4gNjsKKworCWlmIChhZGRyID49IGhpZ2hfbWVtb3J5KSB7CisJCXN0cnVjdCBwYWdlICpwMTsKKworCQlpZiAoKChzaXplX3QpYWRkciAmIFBBR0VfTUFTSykgIT0KKwkJCSgoc2l6ZV90KShhZGRyICsgbGVuIC0gMSkgJiBQQUdFX01BU0spKQorCQkJZ290byBvdXRfY29weTsKKwkJcDEgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisJCWlmICghcDEpCisJCQlnb3RvIG91dF9jb3B5OworCQlhZGRyID0gcGFnZV9hZGRyZXNzKHAxKSArICgoc2l6ZV90KWFkZHIgJiB+UEFHRV9NQVNLKTsKKwl9CisKKwlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZpbmZvLT5wZGV2LT5kZXYsIGFkZHIsIGxlbiwgZGlyKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmluZm8tPnBkZXYtPmRldiwgZG1hX2FkZHIpKSB7CisJCWRldl9lcnIoJmluZm8tPnBkZXYtPmRldiwKKwkJCSJDb3VsZG4ndCBETUEgbWFwIGEgJWQgYnl0ZSBidWZmZXJcbiIsIGxlbik7CisJCWdvdG8gb3V0X2NvcHk7CisJfQorCisJaWYgKGlzX3dyaXRlKSB7CisJICAgIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbmZvLT5kbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJCQkJaW5mby0+cGh5c19iYXNlLCAwLCAwKTsKKwkgICAgb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoaW5mby0+ZG1hX2NoLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkJCQlkbWFfYWRkciwgMCwgMCk7CisJICAgIG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoaW5mby0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCQkweDEwLCBidWZfbGVuLCBPTUFQX0RNQV9TWU5DX0ZSQU1FLAorCQkJCQlPTUFQMjRYWF9ETUFfR1BNQywgT01BUF9ETUFfRFNUX1NZTkMpOworCX0gZWxzZSB7CisJICAgIG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGluZm8tPmRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQkJCQlpbmZvLT5waHlzX2Jhc2UsIDAsIDApOworCSAgICBvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoaW5mby0+ZG1hX2NoLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkJCQlkbWFfYWRkciwgMCwgMCk7CisJICAgIG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoaW5mby0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCQkweDEwLCBidWZfbGVuLCBPTUFQX0RNQV9TWU5DX0ZSQU1FLAorCQkJCQlPTUFQMjRYWF9ETUFfR1BNQywgT01BUF9ETUFfU1JDX1NZTkMpOworCX0KKwkvKiAgY29uZmlndXJlIGFuZCBzdGFydCBwcmVmZXRjaCB0cmFuc2ZlciAqLworCXJldCA9IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGluZm8tPmdwbWNfY3MsIDB4MSwgbGVuLCBpc193cml0ZSk7CisJaWYgKHJldCkKKwkJLyogUEZQVyBlbmdpbmUgaXMgYnVzeSwgdXNlIGNwdSBjb3B5IG1ldGhvZGUgKi8KKwkJZ290byBvdXRfY29weTsKKworCWluaXRfY29tcGxldGlvbigmaW5mby0+Y29tcCk7CisKKwlvbWFwX3N0YXJ0X2RtYShpbmZvLT5kbWFfY2gpOworCisJLyogc2V0dXAgYW5kIHN0YXJ0IERNQSB1c2luZyBkbWFfYWRkciAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmluZm8tPmNvbXApOworCisJd2hpbGUgKDB4M2ZmZiAmIChwcmVmZXRjaF9zdGF0dXMgPSBncG1jX3ByZWZldGNoX3N0YXR1cygpKSkKKwkJOworCS8qIGRpc2FibGUgYW5kIHN0b3AgdGhlIFBGUFcgZW5naW5lICovCisJZ3BtY19wcmVmZXRjaF9yZXNldCgpOworCisJZG1hX3VubWFwX3NpbmdsZSgmaW5mby0+cGRldi0+ZGV2LCBkbWFfYWRkciwgbGVuLCBkaXIpOworCXJldHVybiAwOworCitvdXRfY29weToKKwlpZiAoaW5mby0+bmFuZC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJaXNfd3JpdGUgPT0gMCA/IG9tYXBfcmVhZF9idWYxNihtdGQsICh1X2NoYXIgKikgYWRkciwgbGVuKQorCQkJOiBvbWFwX3dyaXRlX2J1ZjE2KG10ZCwgKHVfY2hhciAqKSBhZGRyLCBsZW4pOworCWVsc2UKKwkJaXNfd3JpdGUgPT0gMCA/IG9tYXBfcmVhZF9idWY4KG10ZCwgKHVfY2hhciAqKSBhZGRyLCBsZW4pCisJCQk6IG9tYXBfd3JpdGVfYnVmOChtdGQsICh1X2NoYXIgKikgYWRkciwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBvbWFwX25hbmRfZG1hX2NiKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpIHt9CitzdGF0aWMgaW5saW5lIGludCBvbWFwX25hbmRfZG1hX3RyYW5zZmVyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB2b2lkICphZGRyLAorCQkJCQl1bnNpZ25lZCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoqCisgKiBvbWFwX3JlYWRfYnVmX2RtYV9wcmVmIC0gcmVhZCBkYXRhIGZyb20gTkFORCBjb250cm9sbGVyIGludG8gYnVmZmVyCisgKiBAbXRkOiBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGJ1ZjogYnVmZmVyIHRvIHN0b3JlIGRhdGUKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byByZWFkCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfcmVhZF9idWZfZG1hX3ByZWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWlmIChsZW4gPD0gbXRkLT5vb2JzaXplKQorCQlvbWFwX3JlYWRfYnVmX3ByZWYobXRkLCBidWYsIGxlbik7CisJZWxzZQorCQkvKiBzdGFydCB0cmFuc2ZlciBpbiBETUEgbW9kZSAqLworCQlvbWFwX25hbmRfZG1hX3RyYW5zZmVyKG10ZCwgYnVmLCBsZW4sIDB4MCk7Cit9CisKKy8qKgorICogb21hcF93cml0ZV9idWZfZG1hX3ByZWYgLSB3cml0ZSBidWZmZXIgdG8gTkFORCBjb250cm9sbGVyCisgKiBAbXRkOiBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGJ1ZjogZGF0YSBidWZmZXIKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICovCitzdGF0aWMgdm9pZCBvbWFwX3dyaXRlX2J1Zl9kbWFfcHJlZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJaWYgKGxlbiA8PSBtdGQtPm9vYnNpemUpCisJCW9tYXBfd3JpdGVfYnVmX3ByZWYobXRkLCBidWYsIGxlbik7CisJZWxzZQorCQkvKiBzdGFydCB0cmFuc2ZlciBpbiBETUEgbW9kZSAqLworCQlvbWFwX25hbmRfZG1hX3RyYW5zZmVyKG10ZCwgYnVmLCBsZW4sIDB4MSk7Cit9CisKIC8qKgogICogb21hcF92ZXJpZnlfYnVmIC0gVmVyaWZ5IGNoaXAgZGF0YSBhZ2FpbnN0IGJ1ZmZlcgogICogQG10ZDogTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTY1OCwxNyArOTQyLDEyIEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlbGVhc2VfbWVtX3JlZ2lvbjsKIAl9CisKIAlpbmZvLT5uYW5kLmNvbnRyb2xsZXIgPSAmaW5mby0+Y29udHJvbGxlcjsKIAogCWluZm8tPm5hbmQuSU9fQUREUl9XID0gaW5mby0+bmFuZC5JT19BRERSX1I7CiAJaW5mby0+bmFuZC5jbWRfY3RybCAgPSBvbWFwX2h3Y29udHJvbDsKIAotCS8qIFJFVklTSVQ6ICBvbmx5IHN1cHBvcnRzIDE2LWJpdCBOQU5EIGZsYXNoICovCi0KLQlpbmZvLT5uYW5kLnJlYWRfYnVmICAgPSBvbWFwX3JlYWRfYnVmMTY7Ci0JaW5mby0+bmFuZC53cml0ZV9idWYgID0gb21hcF93cml0ZV9idWYxNjsKLQlpbmZvLT5uYW5kLnZlcmlmeV9idWYgPSBvbWFwX3ZlcmlmeV9idWY7Ci0KIAkvKgogCSAqIElmIFJEWS9CU1kgbGluZSBpcyBjb25uZWN0ZWQgdG8gT01BUCB0aGVuIHVzZSB0aGUgb21hcCByZWFkeQogCSAqIGZ1bmNydGlvbiBhbmQgdGhlIGdlbmVyaWMgbmFuZF93YWl0IGZ1bmN0aW9uIHdoaWNoIHJlYWRzIHRoZSBzdGF0dXMKQEAgLTY4OSw2ICs5NjgsNDAgQEAKIAkJCQkJCQkJPT0gMHgxMDAwKQogCQlpbmZvLT5uYW5kLm9wdGlvbnMgIHw9IE5BTkRfQlVTV0lEVEhfMTY7CiAKKwlpZiAodXNlX3ByZWZldGNoKSB7CisJCS8qIGNvcHkgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiBuYW5kIGJhc2UgZm9yIGZpZm8gYWNjZXNzICovCisJCWluZm8tPm5hbmRfcHJlZl9maWZvX2FkZCA9IGluZm8tPm5hbmQuSU9fQUREUl9SOworCisJCWluZm8tPm5hbmQucmVhZF9idWYgICA9IG9tYXBfcmVhZF9idWZfcHJlZjsKKwkJaW5mby0+bmFuZC53cml0ZV9idWYgID0gb21hcF93cml0ZV9idWZfcHJlZjsKKwkJaWYgKHVzZV9kbWEpIHsKKwkJCWVyciA9IG9tYXBfcmVxdWVzdF9kbWEoT01BUDI0WFhfRE1BX0dQTUMsICJOQU5EIiwKKwkJCQlvbWFwX25hbmRfZG1hX2NiLCAmaW5mby0+Y29tcCwgJmluZm8tPmRtYV9jaCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWluZm8tPmRtYV9jaCA9IC0xOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSByZXF1ZXN0IGZhaWxlZC4iCisJCQkJCSIgTm9uLWRtYSBkYXRhIHRyYW5zZmVyIG1vZGVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGluZm8tPmRtYV9jaCwKKwkJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCQkJCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbmZvLT5kbWFfY2gsCisJCQkJCQlPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKworCQkJCWluZm8tPm5hbmQucmVhZF9idWYgICA9IG9tYXBfcmVhZF9idWZfZG1hX3ByZWY7CisJCQkJaW5mby0+bmFuZC53cml0ZV9idWYgID0gb21hcF93cml0ZV9idWZfZG1hX3ByZWY7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaW5mby0+bmFuZC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgeworCQkJaW5mby0+bmFuZC5yZWFkX2J1ZiAgID0gb21hcF9yZWFkX2J1ZjE2OworCQkJaW5mby0+bmFuZC53cml0ZV9idWYgID0gb21hcF93cml0ZV9idWYxNjsKKwkJfSBlbHNlIHsKKwkJCWluZm8tPm5hbmQucmVhZF9idWYgICA9IG9tYXBfcmVhZF9idWY4OworCQkJaW5mby0+bmFuZC53cml0ZV9idWYgID0gb21hcF93cml0ZV9idWY4OworCQl9CisJfQorCWluZm8tPm5hbmQudmVyaWZ5X2J1ZiA9IG9tYXBfdmVyaWZ5X2J1ZjsKKwogI2lmZGVmIENPTkZJR19NVERfTkFORF9PTUFQX0hXRUNDCiAJaW5mby0+bmFuZC5lY2MuYnl0ZXMJCT0gMzsKIAlpbmZvLT5uYW5kLmVjYy5zaXplCQk9IDUxMjsKQEAgLTc0NCw5ICsxMDU3LDEyIEBACiAJc3RydWN0IG9tYXBfbmFuZF9pbmZvICppbmZvID0gbXRkLT5wcml2OwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWYgKHVzZV9kbWEpCisJCW9tYXBfZnJlZV9kbWEoaW5mby0+ZG1hX2NoKTsKKwogCS8qIFJlbGVhc2UgTkFORCBkZXZpY2UsIGl0cyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFuZCBwYXJ0aXRpb25zICovCiAJbmFuZF9yZWxlYXNlKCZpbmZvLT5tdGQpOwotCWlvdW5tYXAoaW5mby0+bmFuZC5JT19BRERSX1IpOworCWlvdW5tYXAoaW5mby0+bmFuZF9wcmVmX2ZpZm9fYWRkKTsKIAlrZnJlZSgmaW5mby0+bXRkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc2Myw2ICsxMDc5LDE1IEBACiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX25hbmRfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIiVzIGRyaXZlciBpbml0aWFsaXppbmdcbiIsIERSSVZFUl9OQU1FKTsKKworCS8qIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgaWYgZHJpdmVyIGlzIGJlaW5nCisJICogbG9hZGVkIHJ1biB0aW1lIGFzIGEgbW9kdWxlCisJICovCisJaWYgKCgxID09IHVzZV9kbWEpICYmICgwID09IHVzZV9wcmVmZXRjaCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyJXcm9uZyBwYXJhbWV0ZXJzOiAndXNlX2RtYScgY2FuIG5vdCBiZSAxICIKKwkJCQkid2l0aG91dCB1c2VfcHJlZmV0Y2gnLiBQcmVmZXRjaCB3aWxsIG5vdCBiZSIKKwkJCQkiIHVzZWQgaW4gZWl0aGVyIG1vZGUgKG1wdSBvciBkbWEpXG4iKTsKKwl9CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9uYW5kX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvb3Jpb25fbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9vcmlvbl9uYW5kLmMKaW5kZXggMGQ5ZDRiYy4uZjU5YzA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9vcmlvbl9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9vcmlvbl9uYW5kLmMKQEAgLTE3MSw3ICsxNzEsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvcmlvbl9uYW5kX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gb3Jpb25fbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9yaW9uX25hbmRfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAib3Jpb25fbmFuZCIsCkBAIC0xODEsNyArMTgwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgb3Jpb25fbmFuZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb3Jpb25fbmFuZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm9yaW9uX25hbmRfZHJpdmVyLCBvcmlvbl9uYW5kX3Byb2JlKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9yaW9uX25hbmRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCmluZGV4IDMwYThjZTYuLjZlYTUyMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogCUVSUl9TRU5EQ01ECT0gLTIsCiAJRVJSX0RCRVJSCT0gLTMsCiAJRVJSX0JCRVJSCT0gLTQsCisJRVJSX1NCRVJSCT0gLTUsCiB9OwogCiBlbnVtIHsKQEAgLTU2NCwxMSArNTY1LDEzIEBACiAKIAlzdGF0dXMgPSBuYW5kX3JlYWRsKGluZm8sIE5EU1IpOwogCi0JaWYgKHN0YXR1cyAmIChORFNSX1JERFJFUSB8IE5EU1JfREJFUlIpKSB7CisJaWYgKHN0YXR1cyAmIChORFNSX1JERFJFUSB8IE5EU1JfREJFUlIgfCBORFNSX1NCRVJSKSkgewogCQlpZiAoc3RhdHVzICYgTkRTUl9EQkVSUikKIAkJCWluZm8tPnJldGNvZGUgPSBFUlJfREJFUlI7CisJCWVsc2UgaWYgKHN0YXR1cyAmIE5EU1JfU0JFUlIpCisJCQlpbmZvLT5yZXRjb2RlID0gRVJSX1NCRVJSOwogCi0JCWRpc2FibGVfaW50KGluZm8sIE5EU1JfUkREUkVRIHwgTkRTUl9EQkVSUik7CisJCWRpc2FibGVfaW50KGluZm8sIE5EU1JfUkREUkVRIHwgTkRTUl9EQkVSUiB8IE5EU1JfU0JFUlIpOwogCiAJCWlmIChpbmZvLT51c2VfZG1hKSB7CiAJCQlpbmZvLT5zdGF0ZSA9IFNUQVRFX0RNQV9SRUFESU5HOwpAQCAtNjcwLDcgKzY3Myw3IEBACiAJCWlmIChwcmVwYXJlX3JlYWRfcHJvZ19jbWQoaW5mbywgY21kc2V0LT5yZWFkMSwgY29sdW1uLCBwYWdlX2FkZHIpKQogCQkJYnJlYWs7CiAKLQkJcHhhM3h4X25hbmRfZG9fY21kKGluZm8sIE5EU1JfUkREUkVRIHwgTkRTUl9EQkVSUik7CisJCXB4YTN4eF9uYW5kX2RvX2NtZChpbmZvLCBORFNSX1JERFJFUSB8IE5EU1JfREJFUlIgfCBORFNSX1NCRVJSKTsKIAogCQkvKiBXZSBvbmx5IGFyZSBPT0IsIHNvIGlmIHRoZSBkYXRhIGhhcyBlcnJvciwgZG9lcyBub3QgbWF0dGVyICovCiAJCWlmIChpbmZvLT5yZXRjb2RlID09IEVSUl9EQkVSUikKQEAgLTY4Nyw3ICs2OTAsNyBAQAogCQlpZiAocHJlcGFyZV9yZWFkX3Byb2dfY21kKGluZm8sIGNtZHNldC0+cmVhZDEsIGNvbHVtbiwgcGFnZV9hZGRyKSkKIAkJCWJyZWFrOwogCi0JCXB4YTN4eF9uYW5kX2RvX2NtZChpbmZvLCBORFNSX1JERFJFUSB8IE5EU1JfREJFUlIpOworCQlweGEzeHhfbmFuZF9kb19jbWQoaW5mbywgTkRTUl9SRERSRVEgfCBORFNSX0RCRVJSIHwgTkRTUl9TQkVSUik7CiAKIAkJaWYgKGluZm8tPnJldGNvZGUgPT0gRVJSX0RCRVJSKSB7CiAJCQkvKiBmb3IgYmxhbmsgcGFnZSAoYWxsIDB4ZmYpLCBIVyB3aWxsIGNhbGN1bGF0ZSBpdHMgRUNDIGFzCkBAIC04NjEsOCArODY0LDEyIEBACiAJICogY29uc2lkZXIgaXQgYXMgYSBlY2MgZXJyb3Igd2hpY2ggd2lsbCB0ZWxsIHRoZSBjYWxsZXIgdGhlCiAJICogcmVhZCBmYWlsIFdlIGhhdmUgZGlzdGluZ3Vpc2ggYWxsIHRoZSBlcnJvcnMsIGJ1dCB0aGUKIAkgKiBuYW5kX3JlYWRfZWNjIG9ubHkgY2hlY2sgdGhpcyBmdW5jdGlvbiByZXR1cm4gdmFsdWUKKwkgKgorCSAqIENvcnJlY3RlZCAoc2luZ2xlLWJpdCkgZXJyb3JzIG11c3QgYWxzbyBiZSBub3RlZC4KIAkgKi8KLQlpZiAoaW5mby0+cmV0Y29kZSAhPSBFUlJfTk9ORSkKKwlpZiAoaW5mby0+cmV0Y29kZSA9PSBFUlJfU0JFUlIpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGluZm8tPnJldGNvZGUgIT0gRVJSX05PTkUpCiAJCXJldHVybiAtMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCmluZGV4IDJiYzg5NjYuLjAyYmVmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKQEAgLTMyOSw3ICszMjksNyBAQAogfQogCiBzdGF0aWMgaW50IGZsY3RsX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKLQkJCQl1aW50OF90ICpidWYpCisJCQkJdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKIHsKIAlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOwogCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKQEAgLTg1Nyw3ICs4NTcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbGN0bF9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IGZsY3RsX3Byb2JlLAogCS5yZW1vdmUJCT0gZmxjdGxfcmVtb3ZlLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gInNoX2ZsY3RsIiwKQEAgLTg2Nyw3ICs4NjYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBmbGN0bF9uYW5kX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZmbGN0bF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmZsY3RsX2RyaXZlciwgZmxjdGxfcHJvYmUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmxjdGxfbmFuZF9jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3RtaW9fbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC90bWlvX25hbmQuYwppbmRleCBkYWE2YTRjLi45MmM3MzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3RtaW9fbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvdG1pb19uYW5kLmMKQEAgLTMwMSw2ICszMDEsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0bWlvX25hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCXVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykKK3sKKwlpbnQgcjAsIHIxOworCisJLyogYXNzdW1lIGVjYy5zaXplID0gNTEyIGFuZCBlY2MuYnl0ZXMgPSA2ICovCisJcjAgPSBfX25hbmRfY29ycmVjdF9kYXRhKGJ1ZiwgcmVhZF9lY2MsIGNhbGNfZWNjLCAyNTYpOworCWlmIChyMCA8IDApCisJCXJldHVybiByMDsKKwlyMSA9IF9fbmFuZF9jb3JyZWN0X2RhdGEoYnVmICsgMjU2LCByZWFkX2VjYyArIDMsIGNhbGNfZWNjICsgMywgMjU2KTsKKwlpZiAocjEgPCAwKQorCQlyZXR1cm4gcjE7CisJcmV0dXJuIHIwICsgcjE7Cit9CisKIHN0YXRpYyBpbnQgdG1pb19od19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgc3RydWN0IHRtaW9fbmFuZCAqdG1pbykKIHsKIAlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSAoc3RydWN0IG1mZF9jZWxsICopZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTQyNCw3ICs0MzksNyBAQAogCW5hbmRfY2hpcC0+ZWNjLmJ5dGVzID0gNjsKIAluYW5kX2NoaXAtPmVjYy5od2N0bCA9IHRtaW9fbmFuZF9lbmFibGVfaHdlY2M7CiAJbmFuZF9jaGlwLT5lY2MuY2FsY3VsYXRlID0gdG1pb19uYW5kX2NhbGN1bGF0ZV9lY2M7Ci0JbmFuZF9jaGlwLT5lY2MuY29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhOworCW5hbmRfY2hpcC0+ZWNjLmNvcnJlY3QgPSB0bWlvX25hbmRfY29ycmVjdF9kYXRhOwogCiAJaWYgKGRhdGEpCiAJCW5hbmRfY2hpcC0+YmFkYmxvY2tfcGF0dGVybiA9IGRhdGEtPmJhZGJsb2NrX3BhdHRlcm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3R4eDluZGZtYy5jIGIvZHJpdmVycy9tdGQvbmFuZC90eHg5bmRmbWMuYwppbmRleCA0ODgwODhlLi43M2FmODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3R4eDluZGZtYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvdHh4OW5kZm1jLmMKQEAgLTE4OSwxOCArMTg5LDQzIEBACiAJCQkJICAgdWludDhfdCAqZWNjX2NvZGUpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gbXRkX3RvX3BsYXRkZXYobXRkKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCBlY2NieXRlczsKIAl1MzIgbWNyID0gdHh4OW5kZm1jX3JlYWQoZGV2LCBUWFg5X05ERk1DUik7CiAKIAltY3IgJj0gflRYWDlfTkRGTUNSX0VDQ19BTEw7CiAJdHh4OW5kZm1jX3dyaXRlKGRldiwgbWNyIHwgVFhYOV9OREZNQ1JfRUNDX09GRiwgVFhYOV9OREZNQ1IpOwogCXR4eDluZGZtY193cml0ZShkZXYsIG1jciB8IFRYWDlfTkRGTUNSX0VDQ19SRUFELCBUWFg5X05ERk1DUik7Ci0JZWNjX2NvZGVbMV0gPSB0eHg5bmRmbWNfcmVhZChkZXYsIFRYWDlfTkRGRFRSKTsKLQllY2NfY29kZVswXSA9IHR4eDluZGZtY19yZWFkKGRldiwgVFhYOV9OREZEVFIpOwotCWVjY19jb2RlWzJdID0gdHh4OW5kZm1jX3JlYWQoZGV2LCBUWFg5X05ERkRUUik7CisJZm9yIChlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsgZWNjYnl0ZXMgPiAwOyBlY2NieXRlcyAtPSAzKSB7CisJCWVjY19jb2RlWzFdID0gdHh4OW5kZm1jX3JlYWQoZGV2LCBUWFg5X05ERkRUUik7CisJCWVjY19jb2RlWzBdID0gdHh4OW5kZm1jX3JlYWQoZGV2LCBUWFg5X05ERkRUUik7CisJCWVjY19jb2RlWzJdID0gdHh4OW5kZm1jX3JlYWQoZGV2LCBUWFg5X05ERkRUUik7CisJCWVjY19jb2RlICs9IDM7CisJfQogCXR4eDluZGZtY193cml0ZShkZXYsIG1jciB8IFRYWDlfTkRGTUNSX0VDQ19PRkYsIFRYWDlfTkRGTUNSKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0eHg5bmRmbWNfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCXVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCBlY2NzaXplOworCWludCBjb3JyZWN0ZWQgPSAwOworCWludCBzdGF0OworCisJZm9yIChlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7IGVjY3NpemUgPiAwOyBlY2NzaXplIC09IDI1NikgeworCQlzdGF0ID0gX19uYW5kX2NvcnJlY3RfZGF0YShidWYsIHJlYWRfZWNjLCBjYWxjX2VjYywgMjU2KTsKKwkJaWYgKHN0YXQgPCAwKQorCQkJcmV0dXJuIHN0YXQ7CisJCWNvcnJlY3RlZCArPSBzdGF0OworCQlidWYgKz0gMjU2OworCQlyZWFkX2VjYyArPSAzOworCQljYWxjX2VjYyArPSAzOworCX0KKwlyZXR1cm4gY29ycmVjdGVkOworfQorCiBzdGF0aWMgdm9pZCB0eHg5bmRmbWNfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSBtdGRfdG9fcGxhdGRldihtdGQpOwpAQCAtMjQ0LDYgKzI2OSwyMiBAQAogI2RlZmluZSBUWFg5TkRGTUNfTlNfVE9fQ1lDKGdidXNjbGssIG5zKSBcCiAJRElWX1JPVU5EX1VQKChucykgKiBESVZfUk9VTkRfVVAoZ2J1c2NsaywgMTAwMCksIDEwMDAwMDApCiAKK3N0YXRpYyBpbnQgdHh4OW5kZm1jX25hbmRfc2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBuYW5kX3NjYW5faWRlbnQobXRkLCAxKTsKKwlpZiAoIXJldCkgeworCQlpZiAobXRkLT53cml0ZXNpemUgPj0gNTEyKSB7CisJCQljaGlwLT5lY2Muc2l6ZSA9IG10ZC0+d3JpdGVzaXplOworCQkJY2hpcC0+ZWNjLmJ5dGVzID0gMyAqIChtdGQtPndyaXRlc2l6ZSAvIDI1Nik7CisJCX0KKwkJcmV0ID0gbmFuZF9zY2FuX3RhaWwobXRkKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBfX2luaXQgdHh4OW5kZm1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHh4OW5kZm1jX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtMzIxLDkgKzM2MiwxMCBAQAogCQljaGlwLT5jbWRfY3RybCA9IHR4eDluZGZtY19jbWRfY3RybDsKIAkJY2hpcC0+ZGV2X3JlYWR5ID0gdHh4OW5kZm1jX2Rldl9yZWFkeTsKIAkJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IHR4eDluZGZtY19jYWxjdWxhdGVfZWNjOwotCQljaGlwLT5lY2MuY29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhOworCQljaGlwLT5lY2MuY29ycmVjdCA9IHR4eDluZGZtY19jb3JyZWN0X2RhdGE7CiAJCWNoaXAtPmVjYy5od2N0bCA9IHR4eDluZGZtY19lbmFibGVfaHdlY2M7CiAJCWNoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CisJCS8qIHR4eDluZGZtY19uYW5kX3NjYW4gd2lsbCBvdmVyd3JpdGUgZWNjLnNpemUgYW5kIGVjYy5ieXRlcyAqLwogCQljaGlwLT5lY2Muc2l6ZSA9IDI1NjsKIAkJY2hpcC0+ZWNjLmJ5dGVzID0gMzsKIAkJY2hpcC0+Y2hpcF9kZWxheSA9IDEwMDsKQEAgLTM0OSw3ICszOTEsNyBAQAogCQlpZiAocGxhdC0+d2lkZV9tYXNrICYgKDEgPDwgaSkpCiAJCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CiAKLQkJaWYgKG5hbmRfc2NhbihtdGQsIDEpKSB7CisJCWlmICh0eHg5bmRmbWNfbmFuZF9zY2FuKG10ZCkpIHsKIAkJCWtmcmVlKHR4eDlfcHJpdi0+bXRkbmFtZSk7CiAJCQlrZnJlZSh0eHg5X3ByaXYpOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3c5MHA5MTBfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC93OTBwOTEwX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjgwZTczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC93OTBwOTEwX25hbmQuYwpAQCAtMCwwICsxLDM4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNkZWZpbmUgUkVHX0ZNSUNTUiAgIAkweDAwCisjZGVmaW5lIFJFR19TTUNTUiAgICAJMHhhMAorI2RlZmluZSBSRUdfU01JU1IgICAgCTB4YWMKKyNkZWZpbmUgUkVHX1NNQ01EICAgIAkweGIwCisjZGVmaW5lIFJFR19TTUFERFIgICAJMHhiNAorI2RlZmluZSBSRUdfU01EQVRBICAgCTB4YjgKKworI2RlZmluZSBSRVNFVF9GTUkJMHgwMQorI2RlZmluZSBOQU5EX0VOCQkweDA4CisjZGVmaW5lIFJFQURZQlVTWQkoMHgwMSA8PCAxOCkKKworI2RlZmluZSBTV1JTVAkJMHgwMQorI2RlZmluZSBQU0laRQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgRE1BUldFTgkJKDB4MDMgPDwgMSkKKyNkZWZpbmUgQlVTV0lECQkoMHgwMSA8PCA0KQorI2RlZmluZSBFQ0M0RU4JCSgweDAxIDw8IDUpCisjZGVmaW5lIFdQCQkoMHgwMSA8PCAyNCkKKyNkZWZpbmUgTkFORENTCQkoMHgwMSA8PCAyNSkKKyNkZWZpbmUgRU5EQUREUgkJKDB4MDEgPDwgMzEpCisKKyNkZWZpbmUgcmVhZF9kYXRhX3JlZyhkZXYpCQlcCisJX19yYXdfcmVhZGwoKGRldiktPnJlZyArIFJFR19TTURBVEEpCisKKyNkZWZpbmUgd3JpdGVfZGF0YV9yZWcoZGV2LCB2YWwpCVwKKwlfX3Jhd193cml0ZWwoKHZhbCksIChkZXYpLT5yZWcgKyBSRUdfU01EQVRBKQorCisjZGVmaW5lIHdyaXRlX2NtZF9yZWcoZGV2LCB2YWwpCQlcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAoZGV2KS0+cmVnICsgUkVHX1NNQ01EKQorCisjZGVmaW5lIHdyaXRlX2FkZHJfcmVnKGRldiwgdmFsKQlcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAoZGV2KS0+cmVnICsgUkVHX1NNQUREUikKKworc3RydWN0IHc5MHA5MTBfbmFuZCB7CisJc3RydWN0IG10ZF9pbmZvIG10ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwIGNoaXA7CisJdm9pZCBfX2lvbWVtICpyZWc7CisJc3RydWN0IGNsayAqY2xrOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25zW10gPSB7CisJeworCSAubmFtZSA9ICJOQU5EIEZTIDAiLAorCSAub2Zmc2V0ID0gMCwKKwkgLnNpemUgPSA4ICogMTAyNCAqIDEwMjQKKwl9LAorCXsKKwkgLm5hbWUgPSAiTkFORCBGUyAxIiwKKwkgLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMCisJfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdzkwcDkxMF9uYW5kX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJldDsKKwlzdHJ1Y3QgdzkwcDkxMF9uYW5kICpuYW5kOworCisJbmFuZCA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCB3OTBwOTEwX25hbmQsIG10ZCk7CisKKwlyZXQgPSAodW5zaWduZWQgY2hhcilyZWFkX2RhdGFfcmVnKG5hbmQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdzkwcDkxMF9uYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQkJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCXN0cnVjdCB3OTBwOTEwX25hbmQgKm5hbmQ7CisKKwluYW5kID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IHc5MHA5MTBfbmFuZCwgbXRkKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJYnVmW2ldID0gKHVuc2lnbmVkIGNoYXIpcmVhZF9kYXRhX3JlZyhuYW5kKTsKK30KKworc3RhdGljIHZvaWQgdzkwcDkxMF9uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCXN0cnVjdCB3OTBwOTEwX25hbmQgKm5hbmQ7CisKKwluYW5kID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IHc5MHA5MTBfbmFuZCwgbXRkKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJd3JpdGVfZGF0YV9yZWcobmFuZCwgYnVmW2ldKTsKK30KKworc3RhdGljIGludCB3OTBwOTEwX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdzkwcDkxMF9uYW5kICpuYW5kOworCisJbmFuZCA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCB3OTBwOTEwX25hbmQsIG10ZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGJ1ZltpXSAhPSAodW5zaWduZWQgY2hhcilyZWFkX2RhdGFfcmVnKG5hbmQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdzkwcDkxMF9jaGVja19yYihzdHJ1Y3QgdzkwcDkxMF9uYW5kICpuYW5kKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJc3Bpbl9sb2NrKCZuYW5kLT5sb2NrKTsKKwl2YWwgPSBfX3Jhd19yZWFkbChSRUdfU01JU1IpOworCXZhbCAmPSBSRUFEWUJVU1k7CisJc3Bpbl91bmxvY2soJm5hbmQtPmxvY2spOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCB3OTBwOTEwX25hbmRfZGV2cmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHc5MHA5MTBfbmFuZCAqbmFuZDsKKwlpbnQgcmVhZHk7CisKKwluYW5kID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IHc5MHA5MTBfbmFuZCwgbXRkKTsKKworCXJlYWR5ID0gKHc5MHA5MTBfY2hlY2tfcmIobmFuZCkpID8gMSA6IDA7CisJcmV0dXJuIHJlYWR5OworfQorCitzdGF0aWMgdm9pZCB3OTBwOTEwX25hbmRfY29tbWFuZF9scChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCXVuc2lnbmVkIGludCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQoreworCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IHc5MHA5MTBfbmFuZCAqbmFuZDsKKworCW5hbmQgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3QgdzkwcDkxMF9uYW5kLCBtdGQpOworCisJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQikgeworCQljb2x1bW4gKz0gbXRkLT53cml0ZXNpemU7CisJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsKKwl9CisKKwl3cml0ZV9jbWRfcmVnKG5hbmQsIGNvbW1hbmQgJiAweGZmKTsKKworCWlmIChjb2x1bW4gIT0gLTEgfHwgcGFnZV9hZGRyICE9IC0xKSB7CisKKwkJaWYgKGNvbHVtbiAhPSAtMSkgeworCQkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJCWNvbHVtbiA+Pj0gMTsKKwkJCXdyaXRlX2FkZHJfcmVnKG5hbmQsIGNvbHVtbik7CisJCQl3cml0ZV9hZGRyX3JlZyhuYW5kLCBjb2x1bW4gPj4gOCB8IEVOREFERFIpOworCQl9CisJCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJCXdyaXRlX2FkZHJfcmVnKG5hbmQsIHBhZ2VfYWRkcik7CisKKwkJCWlmIChjaGlwLT5jaGlwc2l6ZSA+ICgxMjggPDwgMjApKSB7CisJCQkJd3JpdGVfYWRkcl9yZWcobmFuZCwgcGFnZV9hZGRyID4+IDgpOworCQkJCXdyaXRlX2FkZHJfcmVnKG5hbmQsIHBhZ2VfYWRkciA+PiAxNiB8IEVOREFERFIpOworCQkJfSBlbHNlIHsKKwkJCQl3cml0ZV9hZGRyX3JlZyhuYW5kLCBwYWdlX2FkZHIgPj4gOCB8IEVOREFERFIpOworCQkJfQorCQl9CisJfQorCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBOQU5EX0NNRF9DQUNIRURQUk9HOgorCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CisJY2FzZSBOQU5EX0NNRF9FUkFTRTE6CisJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwljYXNlIE5BTkRfQ01EX1JORElOOgorCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCWNhc2UgTkFORF9DTURfREVQTEVURTE6CisJCXJldHVybjsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SOgorCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMDoKKwljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjE6CisJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IyOgorCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMzoKKwkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOworCQlyZXR1cm47CisKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KQorCQkJYnJlYWs7CisJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKKworCQl3cml0ZV9jbWRfcmVnKG5hbmQsIE5BTkRfQ01EX1NUQVRVUyk7CisJCXdyaXRlX2NtZF9yZWcobmFuZCwgY29tbWFuZCk7CisKKwkJd2hpbGUgKCF3OTBwOTEwX2NoZWNrX3JiKG5hbmQpKQorCQkJOworCisJCXJldHVybjsKKworCWNhc2UgTkFORF9DTURfUk5ET1VUOgorCQl3cml0ZV9jbWRfcmVnKG5hbmQsIE5BTkRfQ01EX1JORE9VVFNUQVJUKTsKKwkJcmV0dXJuOworCisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKworCQl3cml0ZV9jbWRfcmVnKG5hbmQsIE5BTkRfQ01EX1JFQURTVEFSVCk7CisJZGVmYXVsdDoKKworCQlpZiAoIWNoaXAtPmRldl9yZWFkeSkgeworCQkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KKwkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KKwluZGVsYXkoMTAwKTsKKworCXdoaWxlICghY2hpcC0+ZGV2X3JlYWR5KG10ZCkpCisJCTsKK30KKworCitzdGF0aWMgdm9pZCB3OTBwOTEwX25hbmRfZW5hYmxlKHN0cnVjdCB3OTBwOTEwX25hbmQgKm5hbmQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlzcGluX2xvY2soJm5hbmQtPmxvY2spOworCV9fcmF3X3dyaXRlbChSRVNFVF9GTUksIChuYW5kLT5yZWcgKyBSRUdfRk1JQ1NSKSk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChuYW5kLT5yZWcgKyBSRUdfRk1JQ1NSKTsKKworCWlmICghKHZhbCAmIE5BTkRfRU4pKQorCQlfX3Jhd193cml0ZWwodmFsIHwgTkFORF9FTiwgUkVHX0ZNSUNTUik7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChuYW5kLT5yZWcgKyBSRUdfU01DU1IpOworCisJdmFsICY9IH4oU1dSU1R8UFNJWkV8RE1BUldFTnxCVVNXSUR8RUNDNEVOfE5BTkRDUyk7CisJdmFsIHw9IFdQOworCisJX19yYXdfd3JpdGVsKHZhbCwgbmFuZC0+cmVnICsgUkVHX1NNQ1NSKTsKKworCXNwaW5fdW5sb2NrKCZuYW5kLT5sb2NrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdzkwcDkxMF9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHc5MHA5MTBfbmFuZCAqdzkwcDkxMF9uYW5kOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXA7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJldHZhbCA9IDA7CisKKwl3OTBwOTEwX25hbmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzkwcDkxMF9uYW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3OTBwOTEwX25hbmQpCisJCXJldHVybiAtRU5PTUVNOworCWNoaXAgPSAmKHc5MHA5MTBfbmFuZC0+Y2hpcCk7CisKKwl3OTBwOTEwX25hbmQtPm10ZC5wcml2CT0gY2hpcDsKKwl3OTBwOTEwX25hbmQtPm10ZC5vd25lcgk9IFRISVNfTU9EVUxFOworCXNwaW5fbG9ja19pbml0KCZ3OTBwOTEwX25hbmQtPmxvY2spOworCisJdzkwcDkxMF9uYW5kLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIodzkwcDkxMF9uYW5kLT5jbGspKSB7CisJCXJldHZhbCA9IC1FTk9FTlQ7CisJCWdvdG8gZmFpbDE7CisJfQorCWNsa19lbmFibGUodzkwcDkxMF9uYW5kLT5jbGspOworCisJY2hpcC0+Y21kZnVuYwkJPSB3OTBwOTEwX25hbmRfY29tbWFuZF9scDsKKwljaGlwLT5kZXZfcmVhZHkJCT0gdzkwcDkxMF9uYW5kX2RldnJlYWR5OworCWNoaXAtPnJlYWRfYnl0ZQkJPSB3OTBwOTEwX25hbmRfcmVhZF9ieXRlOworCWNoaXAtPndyaXRlX2J1ZgkJPSB3OTBwOTEwX25hbmRfd3JpdGVfYnVmOworCWNoaXAtPnJlYWRfYnVmCQk9IHc5MHA5MTBfbmFuZF9yZWFkX2J1ZjsKKwljaGlwLT52ZXJpZnlfYnVmCT0gdzkwcDkxMF92ZXJpZnlfYnVmOworCWNoaXAtPmNoaXBfZGVsYXkJPSA1MDsKKwljaGlwLT5vcHRpb25zCQk9IDA7CisJY2hpcC0+ZWNjLm1vZGUJCT0gTkFORF9FQ0NfU09GVDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0dmFsID0gLUVOWElPOworCQlnb3RvIGZhaWwxOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpIHsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGZhaWwxOworCX0KKworCXc5MHA5MTBfbmFuZC0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghdzkwcDkxMF9uYW5kLT5yZWcpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBmYWlsMjsKKwl9CisKKwl3OTBwOTEwX25hbmRfZW5hYmxlKHc5MHA5MTBfbmFuZCk7CisKKwlpZiAobmFuZF9zY2FuKCYodzkwcDkxMF9uYW5kLT5tdGQpLCAxKSkgeworCQlyZXR2YWwgPSAtRU5YSU87CisJCWdvdG8gZmFpbDM7CisJfQorCisJYWRkX210ZF9wYXJ0aXRpb25zKCYodzkwcDkxMF9uYW5kLT5tdGQpLCBwYXJ0aXRpb25zLAorCQkJCQkJQVJSQVlfU0laRShwYXJ0aXRpb25zKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3OTBwOTEwX25hbmQpOworCisJcmV0dXJuIHJldHZhbDsKKworZmFpbDM6CWlvdW5tYXAodzkwcDkxMF9uYW5kLT5yZWcpOworZmFpbDI6CXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbDE6CWtmcmVlKHc5MHA5MTBfbmFuZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdzkwcDkxMF9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3OTBwOTEwX25hbmQgKnc5MHA5MTBfbmFuZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJaW91bm1hcCh3OTBwOTEwX25hbmQtPnJlZyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJY2xrX2Rpc2FibGUodzkwcDkxMF9uYW5kLT5jbGspOworCWNsa19wdXQodzkwcDkxMF9uYW5kLT5jbGspOworCisJa2ZyZWUodzkwcDkxMF9uYW5kKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHc5MHA5MTBfbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHc5MHA5MTBfbmFuZF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHc5MHA5MTBfbmFuZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ3OTBwOTEwLWZtaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3OTBwOTEwX25hbmRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnc5MHA5MTBfbmFuZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdzkwcDkxMF9uYW5kX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzkwcDkxMF9uYW5kX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHc5MHA5MTBfbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KHc5MHA5MTBfbmFuZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ3OTBwOTEwIG5hbmQgZHJpdmVyISIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3OTBwOTEwLWZtaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb2ZwYXJ0LmMgYi9kcml2ZXJzL210ZC9vZnBhcnQuYwppbmRleCAzZTE2NGYwLi42MmQ2YTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vZnBhcnQuYworKysgYi9kcml2ZXJzL210ZC9vZnBhcnQuYwpAQCAtNDYsMjEgKzQ2LDEyIEBACiAJCWNvbnN0IHUzMiAqcmVnOwogCQlpbnQgbGVuOwogCi0JCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBwYXJ0aXRpb24gbm9kZSAqLwotCQlwYXJ0bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShwcCwgIm5hbWUiLCAmbGVuKTsKLQkJaWYgKHN0cmNtcChwYXJ0bmFtZSwgInBhcnRpdGlvbiIpICE9IDApIHsKKwkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KHBwLCAicmVnIiwgJmxlbik7CisJCWlmICghcmVnKSB7CiAJCQlucl9wYXJ0cy0tOwogCQkJY29udGludWU7CiAJCX0KIAotCQlyZWcgPSBvZl9nZXRfcHJvcGVydHkocHAsICJyZWciLCAmbGVuKTsKLQkJaWYgKCFyZWcgfHwgKGxlbiAhPSAyICogc2l6ZW9mKHUzMikpKSB7Ci0JCQlvZl9ub2RlX3B1dChwcCk7Ci0JCQlkZXZfZXJyKGRldiwgIkludmFsaWQgJ3JlZycgb24gJXNcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7Ci0JCQlrZnJlZSgqcHBhcnRzKTsKLQkJCSpwcGFydHMgPSBOVUxMOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAkJKCpwcGFydHMpW2ldLm9mZnNldCA9IHJlZ1swXTsKIAkJKCpwcGFydHMpW2ldLnNpemUgPSByZWdbMV07CiAKQEAgLTc1LDYgKzY2LDE0IEBACiAJCWkrKzsKIAl9CiAKKwlpZiAoIWkpIHsKKwkJb2Zfbm9kZV9wdXQocHApOworCQlkZXZfZXJyKGRldiwgIk5vIHZhbGlkIHBhcnRpdGlvbiBmb3VuZCBvbiAlc1xuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJa2ZyZWUoKnBwYXJ0cyk7CisJCSpwcGFydHMgPSBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlyZXR1cm4gbnJfcGFydHM7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwppbmRleCA3OWZhNzllLi5hMzhmNTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogbWVudWNvbmZpZyBNVERfT05FTkFORAogCXRyaXN0YXRlICJPbmVOQU5EIERldmljZSBTdXBwb3J0IgogCWRlcGVuZHMgb24gTVRECisJc2VsZWN0IE1URF9QQVJUSVRJT05TCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyBhbGwgdHlwZSBvZiBPbmVOQU5EIGZsYXNoCiAJICBkZXZpY2VzLiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiBzZWUKQEAgLTIzLDcgKzI0LDYgQEAKIAogY29uZmlnIE1URF9PTkVOQU5EX0dFTkVSSUMKIAl0cmlzdGF0ZSAiT25lTkFORCBGbGFzaCBkZXZpY2UgdmlhIHBsYXRmb3JtIGRldmljZSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBUk0KIAloZWxwCiAJICBTdXBwb3J0IGZvciBPbmVOQU5EIGZsYXNoIHZpYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLgogCkBAIC02Niw3ICs2Niw2IEBACiAKIGNvbmZpZyBNVERfT05FTkFORF9TSU0KIAl0cmlzdGF0ZSAiT25lTkFORCBzaW11bGF0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1URF9QQVJUSVRJT05TCiAJaGVscAogCSAgVGhlIHNpbXVsYXRvciBtYXkgc2ltdWxhdGUgdmFyaW91cyBPbmVOQU5EIGZsYXNoIGNoaXBzIGZvciB0aGUKIAkgIE9uZU5BTkQgTVREIGxheWVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwppbmRleCAzYTQ5NmMzLi5lNzg5MTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwpAQCAtMTksMTIgKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNkZWZpbmUgRFJJVkVSX05BTUUJIm9uZW5hbmQiCi0KKy8qCisgKiBOb3RlOiBEcml2ZXIgbmFtZSBhbmQgcGxhdGZvcm0gZGF0YSBmb3JtYXQgaGF2ZSBiZWVuIHVwZGF0ZWQhCisgKgorICogVGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgaXMgbmFtZWQgIm9uZW5hbmQtZmxhc2giIGFuZCB0YWtlcyBzdHJ1Y3QKKyAqIG9uZW5hbmRfcGxhdGZvcm1fZGF0YSBhcyBwbGF0Zm9ybSBkYXRhLiBUaGUgb2xkIEFSTS1zcGVjaWZpYyB2ZXJzaW9uCisgKiB3aXRoIHRoZSBuYW1lICJvbmVuYW5kIiB1c2VkIHRvIHRha2Ugc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEuCisgKi8KKyNkZWZpbmUgRFJJVkVSX05BTUUJIm9uZW5hbmQtZmxhc2giCiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIHN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMLCAgfTsKQEAgLTM5LDE2ICs0MywxNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19vbmVuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJaW50IGVycjsKIAogCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb25lbmFuZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPmRldi5kcml2ZXItPm5hbWUpKSB7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgZGV2X25hbWUoJnBkZXYtPmRldikpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXRfZnJlZV9pbmZvOwogCX0KQEAgLTU5LDcgKzYzLDcgQEAKIAkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOwogCX0KIAotCWluZm8tPm9uZW5hbmQubW1jb250cm9sID0gcGRhdGEtPm1tY29udHJvbDsKKwlpbmZvLT5vbmVuYW5kLm1tY29udHJvbCA9IHBkYXRhID8gcGRhdGEtPm1tY29udHJvbCA6IDA7CiAJaW5mby0+b25lbmFuZC5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCiAJaW5mby0+bXRkLm5hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKQEAgLTc1LDcgKzc5LDcgQEAKIAllcnIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucygmaW5mby0+bXRkLCBwYXJ0X3Byb2JlcywgJmluZm8tPnBhcnRzLCAwKTsKIAlpZiAoZXJyID4gMCkKIAkJYWRkX210ZF9wYXJ0aXRpb25zKCZpbmZvLT5tdGQsIGluZm8tPnBhcnRzLCBlcnIpOwotCWVsc2UgaWYgKGVyciA8PSAwICYmIHBkYXRhLT5wYXJ0cykKKwllbHNlIGlmIChlcnIgPD0gMCAmJiBwZGF0YSAmJiBwZGF0YS0+cGFydHMpCiAJCWFkZF9tdGRfcGFydGl0aW9ucygmaW5mby0+bXRkLCBwZGF0YS0+cGFydHMsIHBkYXRhLT5ucl9wYXJ0cyk7CiAJZWxzZQogI2VuZGlmCkBAIC05OSw3ICsxMDMsNyBAQAogewogCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJdW5zaWduZWQgbG9uZyBzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IDZlODI5MDkuLmZmNjZlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMTE5MSw3ICsxMTkxLDcgQEAKICAJCQkvKgogIAkJCSAqIENoaXAgYm91bmRhcnkgaGFuZGxpbmcgaW4gRERQCiAgCQkJICogTm93IHdlIGlzc3VlZCBjaGlwIDEgcmVhZCBhbmQgcG9pbnRlZCBjaGlwIDEKLSAJCQkgKiBidWZmZXJhbSBzbyB3ZSBoYXZlIHRvIHBvaW50IGNoaXAgMCBidWZmZXJhbS4KKwkJCSAqIGJ1ZmZlcnJhbSBzbyB3ZSBoYXZlIHRvIHBvaW50IGNoaXAgMCBidWZmZXJyYW0uCiAgCQkJICovCiAgCQkJaWYgKE9ORU5BTkRfSVNfRERQKHRoaXMpICYmCiAgCQkJICAgIHVubGlrZWx5KGZyb20gPT0gKHRoaXMtPmNoaXBzaXplID4+IDEpKSkgewpAQCAtMTg2Nyw4ICsxODY3LDggQEAKIAkJCU9ORU5BTkRfU0VUX05FWFRfQlVGRkVSUkFNKHRoaXMpOwogCiAJCS8qCi0JCSAqIDIgUExBTkUsIE1MQywgYW5kIEZsZXgtT25lTkFORCBkb2Vzbid0IHN1cHBvcnQKLQkJICogd3JpdGUtd2hpbGUtcHJvZ3JhbWUgZmVhdHVyZS4KKwkJICogMiBQTEFORSwgTUxDLCBhbmQgRmxleC1PbmVOQU5EIGRvIG5vdCBzdXBwb3J0CisJCSAqIHdyaXRlLXdoaWxlLXByb2dyYW0gZmVhdHVyZS4KIAkJICovCiAJCWlmICghT05FTkFORF9JU18yUExBTkUodGhpcykgJiYgIWZpcnN0KSB7CiAJCQlPTkVOQU5EX1NFVF9QUkVWX0JVRkZFUlJBTSh0aGlzKTsKQEAgLTE4NzksNyArMTg3OSw3IEBACiAJCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCBwcmV2LCAhcmV0ICYmICFwcmV2X3N1YnBhZ2UpOwogCQkJaWYgKHJldCkgewogCQkJCXdyaXR0ZW4gLT0gcHJldmxlbjsKLQkJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb3BzX25vbG9jazogd3JpdGUgZmlsYWVkICVkXG4iLCByZXQpOworCQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZV9vcHNfbm9sb2NrOiB3cml0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTE5MDUsNyArMTkwNSw3IEBACiAJCQkvKiBJbiBwYXJ0aWFsIHBhZ2Ugd3JpdGUgd2UgZG9uJ3QgdXBkYXRlIGJ1ZmZlcnJhbSAqLwogCQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sICFyZXQgJiYgIXN1YnBhZ2UpOwogCQkJaWYgKHJldCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZV9vcHNfbm9sb2NrOiB3cml0ZSBmaWxhZWQgJWRcbiIsIHJldCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dyaXRlX29wc19ub2xvY2s6IHdyaXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMjIwMSw3ICsyMjAxLDcgQEAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9FUkFTSU5HKTsKIAotCS8qIExvb3AgdGhyb3VnaHQgdGhlIHBhZ2VzICovCisJLyogTG9vcCB0aHJvdWdoIHRoZSBibG9ja3MgKi8KIAlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0lORzsKIAogCXdoaWxlIChsZW4pIHsKQEAgLTIzMjgsNyArMjMyOCw3IEBACiAgICAgICAgIGlmIChiYm0tPmJidCkKICAgICAgICAgICAgICAgICBiYm0tPmJidFtibG9jayA+PiAyXSB8PSAweDAxIDw8ICgoYmxvY2sgJiAweDAzKSA8PCAxKTsKIAotICAgICAgICAvKiBXZSB3cml0ZSB0d28gYnl0ZXMsIHNvIHdlIGRvbnQgaGF2ZSB0byBtZXNzIHdpdGggMTYgYml0IGFjY2VzcyAqLworICAgICAgICAvKiBXZSB3cml0ZSB0d28gYnl0ZXMsIHNvIHdlIGRvbid0IGhhdmUgdG8gbWVzcyB3aXRoIDE2LWJpdCBhY2Nlc3MgKi8KICAgICAgICAgb2ZzICs9IG10ZC0+b29ic2l6ZSArIChiYm0tPmJhZGJsb2NrcG9zICYgfjB4MDEpOwogCS8qIEZJWE1FIDogV2hhdCB0byBkbyB3aGVuIG1hcmtpbmcgU0xDIGJsb2NrIGluIHBhcnRpdGlvbgogCSAqIAkgICB3aXRoIE1MQyBlcmFzZXNpemU/IEZvciBub3csIGl0IGlzIG5vdCBhZHZpc2FibGUgdG8KQEAgLTI1NTcsNyArMjU1Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfTVREX09ORU5BTkRfT1RQCiAKLS8qIEludGVyYWwgT1RQIG9wZXJhdGlvbiAqLworLyogSW50ZXJuYWwgT1RQIG9wZXJhdGlvbiAqLwogdHlwZWRlZiBpbnQgKCpvdHBfb3BfdCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmb3JtLCBzaXplX3QgbGVuLAogCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwogCkBAIC0yOTIxLDcgKzI5MjEsNyBAQAogCQl0aGlzLT5vcHRpb25zIHw9IE9ORU5BTkRfSEFTXzJQTEFORTsKIAogCWNhc2UgT05FTkFORF9ERVZJQ0VfREVOU0lUWV8yR2I6Ci0JCS8qIDJHYiBERFAgZG9uJ3QgaGF2ZSAyIHBsYW5lICovCisJCS8qIDJHYiBERFAgZG9lcyBub3QgaGF2ZSAyIHBsYW5lICovCiAJCWlmICghT05FTkFORF9JU19ERFAodGhpcykpCiAJCQl0aGlzLT5vcHRpb25zIHw9IE9ORU5BTkRfSEFTXzJQTEFORTsKIAkJdGhpcy0+b3B0aW9ucyB8PSBPTkVOQU5EX0hBU19VTkxPQ0tfQUxMOwpAQCAtMzM2NCw3ICszMzY0LDcgQEAKIAkvKiBJdCdzIHJlYWwgcGFnZSBzaXplICovCiAJdGhpcy0+d3JpdGVzaXplID0gbXRkLT53cml0ZXNpemU7CiAKLQkvKiBSRVZJU1Q6IE11bHRpY2hpcCBoYW5kbGluZyAqLworCS8qIFJFVklTSVQ6IE11bHRpY2hpcCBoYW5kbGluZyAqLwogCiAJaWYgKEZMRVhPTkVOQU5EKHRoaXMpKQogCQlmbGV4b25lbmFuZF9nZXRfc2l6ZShtdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdGVzdHMvbXRkX29vYnRlc3QuYyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9vb2J0ZXN0LmMKaW5kZXggYTE4ZThkMi4uNTU1M2NkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdGVzdHMvbXRkX29vYnRlc3QuYworKysgYi9kcml2ZXJzL210ZC90ZXN0cy9tdGRfb29idGVzdC5jCkBAIC01MTIsNyArNTEyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlhZGRyMCA9IDA7Ci0JZm9yIChpID0gMDsgYmJ0W2ldICYmIGkgPCBlYmNudDsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBlYmNudCAmJiBiYnRbaV07ICsraSkKIAkJYWRkcjAgKz0gbXRkLT5lcmFzZXNpemU7CiAKIAkvKiBBdHRlbXB0IHRvIHdyaXRlIG9mZiBlbmQgb2YgT09CICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC90ZXN0cy9tdGRfcGFnZXRlc3QuYyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9wYWdldGVzdC5jCmluZGV4IDk2NDg4MTguLjEwM2NhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9wYWdldGVzdC5jCisrKyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9wYWdldGVzdC5jCkBAIC0xMTYsMTEgKzExNiwxMSBAQAogCWxvZmZfdCBhZGRyID0gZWJudW0gKiBtdGQtPmVyYXNlc2l6ZTsKIAogCWFkZHIwID0gMDsKLQlmb3IgKGkgPSAwOyBiYnRbaV0gJiYgaSA8IGViY250OyArK2kpCisJZm9yIChpID0gMDsgaSA8IGViY250ICYmIGJidFtpXTsgKytpKQogCQlhZGRyMCArPSBtdGQtPmVyYXNlc2l6ZTsKIAogCWFkZHJuID0gbXRkLT5zaXplOwotCWZvciAoaSA9IDA7IGJidFtlYmNudCAtIGkgLSAxXSAmJiBpIDwgZWJjbnQ7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgZWJjbnQgJiYgYmJ0W2ViY250IC0gaSAtIDFdOyArK2kpCiAJCWFkZHJuIC09IG10ZC0+ZXJhc2VzaXplOwogCiAJc2V0X3JhbmRvbV9kYXRhKHdyaXRlYnVmLCBtdGQtPmVyYXNlc2l6ZSk7CkBAIC0yMTksMTEgKzIxOSwxMSBAQAogCW1lbXNldChwcDEsIDAsIHBnc2l6ZSAqIDQpOwogCiAJYWRkcjAgPSAwOwotCWZvciAoaSA9IDA7IGJidFtpXSAmJiBpIDwgZWJjbnQ7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgZWJjbnQgJiYgYmJ0W2ldOyArK2kpCiAJCWFkZHIwICs9IG10ZC0+ZXJhc2VzaXplOwogCiAJYWRkcm4gPSBtdGQtPnNpemU7Ci0JZm9yIChpID0gMDsgYmJ0W2ViY250IC0gaSAtIDFdICYmIGkgPCBlYmNudDsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBlYmNudCAmJiBiYnRbZWJjbnQgLSBpIC0gMV07ICsraSkKIAkJYWRkcm4gLT0gbXRkLT5lcmFzZXNpemU7CiAKIAkvKiBSZWFkIDJuZC10by1sYXN0IHBhZ2UgdG8gcHAxICovCkBAIC0zMTcsNyArMzE3LDcgQEAKIAogCWVibnVtID0gMDsKIAlhZGRyMCA9IDA7Ci0JZm9yIChpID0gMDsgYmJ0W2ldICYmIGkgPCBlYmNudDsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGViY250ICYmIGJidFtpXTsgKytpKSB7CiAJCWFkZHIwICs9IG10ZC0+ZXJhc2VzaXplOwogCQllYm51bSArPSAxOwogCX0KQEAgLTQxMyw3ICs0MTMsNyBAQAogCiAJZWJudW0gPSAwOwogCWFkZHIwID0gMDsKLQlmb3IgKGkgPSAwOyBiYnRbaV0gJiYgaSA8IGViY250OyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgZWJjbnQgJiYgYmJ0W2ldOyArK2kpIHsKIAkJYWRkcjAgKz0gbXRkLT5lcmFzZXNpemU7CiAJCWVibnVtICs9IDE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmMgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwppbmRleCA1NGIwMTg2Li40ODc2OTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvZGVidWcuYworKysgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwpAQCAtMTk2LDQgKzE5NiwzNiBAQAogCXByaW50ayhLRVJOX0RFQlVHICJcdDFzdCAxNiBjaGFyYWN0ZXJzIG9mIG5hbWU6ICVzXG4iLCBubSk7CiB9CiAKKy8qKgorICogdWJpX2RiZ19kdW1wX2ZsYXNoIC0gZHVtcCBhIHJlZ2lvbiBvZiBmbGFzaC4KKyAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAcG51bTogdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgbnVtYmVyIHRvIGR1bXAKKyAqIEBvZmZzZXQ6IHRoZSBzdGFydGluZyBvZmZzZXQgd2l0aGluIHRoZSBwaHlzaWNhbCBlcmFzZWJsb2NrIHRvIGR1bXAKKyAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiB0byBkdW1wCisgKi8KK3ZvaWQgdWJpX2RiZ19kdW1wX2ZsYXNoKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQoreworCWludCBlcnI7CisJc2l6ZV90IHJlYWQ7CisJdm9pZCAqYnVmOworCWxvZmZfdCBhZGRyID0gKGxvZmZfdClwbnVtICogdWJpLT5wZWJfc2l6ZSArIG9mZnNldDsKKworCWJ1ZiA9IHZtYWxsb2MobGVuKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCWVyciA9IHViaS0+bXRkLT5yZWFkKHViaS0+bXRkLCBhZGRyLCBsZW4sICZyZWFkLCBidWYpOworCWlmIChlcnIgJiYgZXJyICE9IC1FVUNMRUFOKSB7CisJCXViaV9lcnIoImVycm9yICVkIHdoaWxlIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBQRUIgJWQ6JWQsICIKKwkJCSJyZWFkICV6ZCBieXRlcyIsIGVyciwgbGVuLCBwbnVtLCBvZmZzZXQsIHJlYWQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkYmdfbXNnKCJkdW1waW5nICVkIGJ5dGVzIG9mIGRhdGEgZnJvbSBQRUIgJWQsIG9mZnNldCAlZCIsCisJCWxlbiwgcG51bSwgb2Zmc2V0KTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAzMiwgMSwgYnVmLCBsZW4sIDEpOworb3V0OgorCXZmcmVlKGJ1Zik7CisJcmV0dXJuOworfQorCiAjZW5kaWYgLyogQ09ORklHX01URF9VQklfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9kZWJ1Zy5oIGIvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmgKaW5kZXggYTRkYTdhMC4uZjMwYmNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmgKKysrIGIvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmgKQEAgLTU1LDYgKzU1LDcgQEAKIHZvaWQgdWJpX2RiZ19kdW1wX3N2KGNvbnN0IHN0cnVjdCB1Ymlfc2Nhbl92b2x1bWUgKnN2KTsKIHZvaWQgdWJpX2RiZ19kdW1wX3NlYihjb25zdCBzdHJ1Y3QgdWJpX3NjYW5fbGViICpzZWIsIGludCB0eXBlKTsKIHZvaWQgdWJpX2RiZ19kdW1wX21rdm9sX3JlcShjb25zdCBzdHJ1Y3QgdWJpX21rdm9sX3JlcSAqcmVxKTsKK3ZvaWQgdWJpX2RiZ19kdW1wX2ZsYXNoKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKIAogI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX01TRwogLyogR2VuZXJhbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KQEAgLTE2Nyw2ICsxNjgsNyBAQAogI2RlZmluZSB1YmlfZGJnX2R1bXBfc3Yoc3YpICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIHViaV9kYmdfZHVtcF9zZWIoc2ViLCB0eXBlKSAgICAgICh7fSkKICNkZWZpbmUgdWJpX2RiZ19kdW1wX21rdm9sX3JlcShyZXEpICAgICAgKHt9KQorI2RlZmluZSB1YmlfZGJnX2R1bXBfZmxhc2godWJpLCBwbnVtLCBvZmZzZXQsIGxlbikgKHt9KQogCiAjZGVmaW5lIFVCSV9JT19ERUJVRyAgICAgICAgICAgICAgIDAKICNkZWZpbmUgREJHX0RJU0FCTEVfQkdUICAgICAgICAgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2ViYS5jIGIvZHJpdmVycy9tdGQvdWJpL2ViYS5jCmluZGV4IGU0ZDllZjAuLjlmODdjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9lYmEuYworKysgYi9kcml2ZXJzL210ZC91YmkvZWJhLmMKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAJfQogCiAJLyoKLQkgKiBOb3cgd2UgaGF2ZSBnb3QgdG8gY2FsY3VsYXRlIGhvdyBtdWNoIGRhdGEgd2UgaGF2ZSB0byB0byBjb3B5LiBJbgorCSAqIE5vdyB3ZSBoYXZlIGdvdCB0byBjYWxjdWxhdGUgaG93IG11Y2ggZGF0YSB3ZSBoYXZlIHRvIGNvcHkuIEluCiAJICogY2FzZSBvZiBhIHN0YXRpYyB2b2x1bWUgaXQgaXMgZmFpcmx5IGVhc3kgLSB0aGUgVklEIGhlYWRlciBjb250YWlucwogCSAqIHRoZSBkYXRhIHNpemUuIEluIGNhc2Ugb2YgYSBkeW5hbWljIHZvbHVtZSBpdCBpcyBtb3JlIGRpZmZpY3VsdCAtIHdlCiAJICogaGF2ZSB0byByZWFkIHRoZSBjb250ZW50cywgY3V0IDB4RkYgYnl0ZXMgZnJvbSB0aGUgZW5kIGFuZCBjb3B5IG9ubHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9pby5jIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKaW5kZXggNGNiNjk5Mi4uOGFhNTFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2lvLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKQEAgLTI2OSw2ICsyNjksNyBAQAogCQl1YmlfZXJyKCJlcnJvciAlZCB3aGlsZSB3cml0aW5nICVkIGJ5dGVzIHRvIFBFQiAlZDolZCwgd3JpdHRlbiAiCiAJCQkiJXpkIGJ5dGVzIiwgZXJyLCBsZW4sIHBudW0sIG9mZnNldCwgd3JpdHRlbik7CiAJCXViaV9kYmdfZHVtcF9zdGFjaygpOworCQl1YmlfZGJnX2R1bXBfZmxhc2godWJpLCBwbnVtLCBvZmZzZXQsIGxlbik7CiAJfSBlbHNlCiAJCXViaV9hc3NlcnQod3JpdHRlbiA9PSBsZW4pOwogCkBAIC00NzUsMzAgKzQ3Niw0NiBAQAogICovCiBzdGF0aWMgaW50IG5vcl9lcmFzZV9wcmVwYXJlKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtKQogewotCWludCBlcnI7CisJaW50IGVyciwgZXJyMTsKIAlzaXplX3Qgd3JpdHRlbjsKIAlsb2ZmX3QgYWRkcjsKIAl1aW50MzJfdCBkYXRhID0gMDsKKwlzdHJ1Y3QgdWJpX3ZpZF9oZHIgdmlkX2hkcjsKIAotCWFkZHIgPSAobG9mZl90KXBudW0gKiB1YmktPnBlYl9zaXplOworCWFkZHIgPSAobG9mZl90KXBudW0gKiB1YmktPnBlYl9zaXplICsgdWJpLT52aWRfaGRyX2Fsb2Zmc2V0OwogCWVyciA9IHViaS0+bXRkLT53cml0ZSh1YmktPm10ZCwgYWRkciwgNCwgJndyaXR0ZW4sICh2b2lkICopJmRhdGEpOwotCWlmIChlcnIpIHsKLQkJdWJpX2VycigiZXJyb3IgJWQgd2hpbGUgd3JpdGluZyA0IGJ5dGVzIHRvIFBFQiAlZDolZCwgd3JpdHRlbiAiCi0JCQkiJXpkIGJ5dGVzIiwgZXJyLCBwbnVtLCAwLCB3cml0dGVuKTsKLQkJdWJpX2RiZ19kdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBlcnI7CisJaWYgKCFlcnIpIHsKKwkJYWRkciAtPSB1YmktPnZpZF9oZHJfYWxvZmZzZXQ7CisJCWVyciA9IHViaS0+bXRkLT53cml0ZSh1YmktPm10ZCwgYWRkciwgNCwgJndyaXR0ZW4sCisJCQkJICAgICAgKHZvaWQgKikmZGF0YSk7CisJCWlmICghZXJyKQorCQkJcmV0dXJuIDA7CiAJfQogCi0JYWRkciArPSB1YmktPnZpZF9oZHJfYWxvZmZzZXQ7Ci0JZXJyID0gdWJpLT5tdGQtPndyaXRlKHViaS0+bXRkLCBhZGRyLCA0LCAmd3JpdHRlbiwgKHZvaWQgKikmZGF0YSk7Ci0JaWYgKGVycikgewotCQl1YmlfZXJyKCJlcnJvciAlZCB3aGlsZSB3cml0aW5nIDQgYnl0ZXMgdG8gUEVCICVkOiVkLCB3cml0dGVuICIKLQkJCSIlemQgYnl0ZXMiLCBlcnIsIHBudW0sIHViaS0+dmlkX2hkcl9hbG9mZnNldCwgd3JpdHRlbik7Ci0JCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkvKgorCSAqIFdlIGZhaWxlZCB0byB3cml0ZSB0byB0aGUgbWVkaWEuIFRoaXMgd2FzIG9ic2VydmVkIHdpdGggU3BhbnNpb24KKwkgKiBTMjlHTDUxMk4gTk9SIGZsYXNoLiBNb3N0IHByb2JhYmx5IHRoZSBlcmFzZWJsb2NrIGVyYXN1cmUgd2FzCisJICogaW50ZXJydXB0ZWQgYXQgYSB2ZXJ5IGluYXBwcm9wcmlhdGUgbW9tZW50LCBzbyBpdCBiZWNhbWUgdW53cml0YWJsZS4KKwkgKiBJbiB0aGlzIGNhc2Ugd2UgcHJvYmFibHkgYW55d2F5IGhhdmUgZ2FyYmFnZSBpbiB0aGlzIFBFQi4KKwkgKi8KKwllcnIxID0gdWJpX2lvX3JlYWRfdmlkX2hkcih1YmksIHBudW0sICZ2aWRfaGRyLCAwKTsKKwlpZiAoZXJyMSA9PSBVQklfSU9fQkFEX1ZJRF9IRFIpCisJCS8qCisJCSAqIFRoZSBWSUQgaGVhZGVyIGlzIGNvcnJ1cHRlZCwgc28gd2UgY2FuIHNhZmVseSBlcmFzZSB0aGlzCisJCSAqIFBFQiBhbmQgbm90IGFmcmFpZCB0aGF0IGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHZhbGlkIFBFQiBpbgorCQkgKiBjYXNlIG9mIGFuIHVuY2xlYW4gcmVib290LgorCQkgKi8KKwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMDsKKwkvKgorCSAqIFRoZSBQRUIgY29udGFpbnMgYSB2YWxpZCBWSUQgaGVhZGVyLCBidXQgd2UgY2Fubm90IGludmFsaWRhdGUgaXQuCisJICogU3VwcG9zZWRseSB0aGUgZmxhc2ggbWVkaWEgb3IgdGhlIGRyaXZlciBpcyBzY3Jld2VkIHVwLCBzbyByZXR1cm4gYW4KKwkgKiBlcnJvci4KKwkgKi8KKwl1YmlfZXJyKCJjYW5ub3QgaW52YWxpZGF0ZSBQRUIgJWQsIHdyaXRlIHJldHVybmVkICVkIHJlYWQgcmV0dXJuZWQgJWQiLAorCQlwbnVtLCBlcnIsIGVycjEpOworCXViaV9kYmdfZHVtcF9mbGFzaCh1YmksIHBudW0sIDAsIHViaS0+cGViX3NpemUpOworCXJldHVybiAtRUlPOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IGI4NDc3NDUuLmU3MTYxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtNzUsOSArNzUsMTAgQEAKIAkJZGJnX2JsZCgiYWRkIHRvIGZyZWU6IFBFQiAlZCwgRUMgJWQiLCBwbnVtLCBlYyk7CiAJZWxzZSBpZiAobGlzdCA9PSAmc2ktPmVyYXNlKQogCQlkYmdfYmxkKCJhZGQgdG8gZXJhc2U6IFBFQiAlZCwgRUMgJWQiLCBwbnVtLCBlYyk7Ci0JZWxzZSBpZiAobGlzdCA9PSAmc2ktPmNvcnIpCisJZWxzZSBpZiAobGlzdCA9PSAmc2ktPmNvcnIpIHsKIAkJZGJnX2JsZCgiYWRkIHRvIGNvcnJ1cHRlZDogUEVCICVkLCBFQyAlZCIsIHBudW0sIGVjKTsKLQllbHNlIGlmIChsaXN0ID09ICZzaS0+YWxpZW4pCisJCXNpLT5jb3JyX2NvdW50ICs9IDE7CisJfSBlbHNlIGlmIChsaXN0ID09ICZzaS0+YWxpZW4pCiAJCWRiZ19ibGQoImFkZCB0byBhbGllbjogUEVCICVkLCBFQyAlZCIsIHBudW0sIGVjKTsKIAllbHNlCiAJCUJVRygpOwpAQCAtODY0LDcgKzg2NSw5IEBACiAJCX0KIAl9CiAKLQkvKiBCb3RoIFVCSSBoZWFkZXJzIHNlZW0gdG8gYmUgZmluZSAqLworCWlmIChlY19jb3JyKQorCQl1Ymlfd2FybigidmFsaWQgVklEIGhlYWRlciBidXQgY29ycnVwdGVkIEVDIGhlYWRlciBhdCBQRUIgJWQiLAorCQkJIHBudW0pOwogCWVyciA9IHViaV9zY2FuX2FkZF91c2VkKHViaSwgc2ksIHBudW0sIGVjLCB2aWRoLCBiaXRmbGlwcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTkzNiw2ICs5MzksMTkgQEAKIAkJdWJpX21zZygiZW1wdHkgTVREIGRldmljZSBkZXRlY3RlZCIpOwogCiAJLyoKKwkgKiBGZXcgY29ycnVwdGVkIFBFQnMgYXJlIG5vdCBhIHByb2JsZW0gYW5kIG1heSBiZSBqdXN0IGEgcmVzdWx0IG9mCisJICogdW5jbGVhbiByZWJvb3RzLiBIb3dldmVyLCBtYW55IG9mIHRoZW0gbWF5IGluZGljYXRlIHNvbWUgcHJvYmxlbXMKKwkgKiB3aXRoIHRoZSBmbGFzaCBIVyBvciBkcml2ZXIuIFByaW50IGEgd2FybmluZyBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKHNpLT5jb3JyX2NvdW50ID49IDggfHwgc2ktPmNvcnJfY291bnQgPj0gdWJpLT5wZWJfY291bnQgLyA0KSB7CisJCXViaV93YXJuKCIlZCBQRUJzIGFyZSBjb3JydXB0ZWQiLCBzaS0+Y29ycl9jb3VudCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvcnJ1cHRlZCBQRUJzIGFyZToiKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZWIsICZzaS0+Y29yciwgdS5saXN0KQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICVkIiwgc2ViLT5wbnVtKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwl9CisKKwkvKgogCSAqIEluIGNhc2Ugb2YgdW5rbm93biBlcmFzZSBjb3VudGVyIHdlIHVzZSB0aGUgbWVhbiBlcmFzZSBjb3VudGVyCiAJICogdmFsdWUuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAppbmRleCAxMDE3Y2YxLi5iYWIzMTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKQEAgLTEwMiw2ICsxMDIsNyBAQAogICogQG1lYW5fZWM6IG1lYW4gZXJhc2UgY291bnRlciB2YWx1ZQogICogQGVjX3N1bTogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAZWNfY291bnQ6IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYworICogQGNvcnJfY291bnQ6IGNvdW50IG9mIGNvcnJ1cHRlZCBQRUJzCiAgKiBAaW1hZ2Vfc2VxX3NldDogaW5kaWNhdGVzIEB1YmktPmltYWdlX3NlcSBpcyBrbm93bgogICoKICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlc3VsdCBvZiBzY2FubmluZyBhbmQgbWF5IGJlIHVzZWQgYnkgb3RoZXIKQEAgLTEyNSw2ICsxMjYsNyBAQAogCWludCBtZWFuX2VjOwogCXVpbnQ2NF90IGVjX3N1bTsKIAlpbnQgZWNfY291bnQ7CisJaW50IGNvcnJfY291bnQ7CiAJaW50IGltYWdlX3NlcV9zZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvdWJpLmggYi9kcml2ZXJzL210ZC91YmkvdWJpLmgKaW5kZXggNmE1ZmU5Ni4uMWFmMDgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3ViaS5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS91YmkuaApAQCAtNTcwLDcgKzU3MCw3IEBACiAKIC8qCiAgKiB1YmlfcmJfZm9yX2VhY2hfZW50cnkgLSB3YWxrIGFuIFJCLXRyZWUuCi0gKiBAcmI6IGEgcG9pbnRlciB0byB0eXBlICdzdHJ1Y3QgcmJfbm9kZScgdG8gdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyCisgKiBAcmI6IGEgcG9pbnRlciB0byB0eXBlICdzdHJ1Y3QgcmJfbm9kZScgdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyCiAgKiBAcG9zOiBhIHBvaW50ZXIgdG8gUkItdHJlZSBlbnRyeSB0eXBlIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlcgogICogQHJvb3Q6IFJCLXRyZWUncyByb290CiAgKiBAbWVtYmVyOiB0aGUgbmFtZSBvZiB0aGUgJ3N0cnVjdCByYl9ub2RlJyB3aXRoaW4gdGhlIFJCLXRyZWUgZW50cnkKQEAgLTU3OSw3ICs1NzksOCBAQAogCWZvciAocmIgPSByYl9maXJzdChyb290KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkgICAgIHBvcyA9IChyYiA/IGNvbnRhaW5lcl9vZihyYiwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpIDogTlVMTCk7ICAgICBcCiAJICAgICByYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICAgcmIgPSByYl9uZXh0KHJiKSwgcG9zID0gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisJICAgICByYiA9IHJiX25leHQocmIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgcG9zID0gKHJiID8gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKnBvcyksIG1lbWJlcikgOiBOVUxMKSkKIAogLyoqCiAgKiB1YmlfemFsbG9jX3ZpZF9oZHIgLSBhbGxvY2F0ZSBhIHZvbHVtZSBpZGVudGlmaWVyIGhlYWRlciBvYmplY3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCmluZGV4IDY0NmRmYzUuLjhlYTljNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCkBAIC0xMjMsNyArMTIzLDYgQEAKIAlCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIHNrYiwgInJ4Iik7CiAKIAlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKLTsKIAluZXRpZl9yeChza2IpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwppbmRleCAwODNlMjEwLi42NmJjYmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKQEAgLTE0OSw3ICsxNDksNiBAQAogCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKIAogCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwotOwogCW5ldGlmX3J4KHNrYik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKaW5kZXggMDY5NWJlMS4uYWE3NmNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKQEAgLTMxMjIsNyArMzEyMiw3IEBACiAgICBUaGUgZmllbGRzIGFyZTpbNDowXSAtIHRhaWwgcG9pbnRlcjsgWzEwOjVdIC0gTGluayBMaXN0IHNpemU7IDE1OjExXSAtCiAgICBoZWFkZXIgcG9pbnRlci4gKi8KICNkZWZpbmUgVENNX1JFR19YWF9UQUJMRQkJCQkJIDB4NTAyNDAKLS8qIFtSVyA0XSBMb2FkIHZhbHVlIGZvciBmb3IgY2ZjIGFjIGNyZWRpdCBjbnQuICovCisvKiBbUlcgNF0gTG9hZCB2YWx1ZSBmb3IgY2ZjIGFjIGNyZWRpdCBjbnQuICovCiAjZGVmaW5lIFRNX1JFR19DRkNfQUNfQ1JEQ05UX1ZBTAkJCQkgMHgxNjQyMDgKIC8qIFtSVyA0XSBMb2FkIHZhbHVlIGZvciBjZmMgY2xkIGNyZWRpdCBjbnQuICovCiAjZGVmaW5lIFRNX1JFR19DRkNfQ0xEX0NSRENOVF9WQUwJCQkJIDB4MTY0MjEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggY2VhNWNmZS4uYzNmYTMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMTk4Nyw3ICsxOTg3LDcgQEAKIAkJCS8vIGZpbmQgbmV3IGFnZ3JlZ2F0b3IgZm9yIHRoZSByZWxhdGVkIHBvcnQocykKIAkJCW5ld19hZ2dyZWdhdG9yID0gX19nZXRfZmlyc3RfYWdnKHBvcnQpOwogCQkJZm9yICg7IG5ld19hZ2dyZWdhdG9yOyBuZXdfYWdncmVnYXRvciA9IF9fZ2V0X25leHRfYWdnKG5ld19hZ2dyZWdhdG9yKSkgewotCQkJCS8vIGlmIHRoZSBuZXcgYWdncmVnYXRvciBpcyBlbXB0eSwgb3IgaXQgY29ubmVjdGVkIHRvIHRvIG91ciBwb3J0IG9ubHkKKwkJCQkvLyBpZiB0aGUgbmV3IGFnZ3JlZ2F0b3IgaXMgZW1wdHksIG9yIGl0IGlzIGNvbm5lY3RlZCB0byBvdXIgcG9ydCBvbmx5CiAJCQkJaWYgKCFuZXdfYWdncmVnYXRvci0+bGFnX3BvcnRzIHx8ICgobmV3X2FnZ3JlZ2F0b3ItPmxhZ19wb3J0cyA9PSBwb3J0KSAmJiAhbmV3X2FnZ3JlZ2F0b3ItPmxhZ19wb3J0cy0+bmV4dF9wb3J0X2luX2FnZ3JlZ2F0b3IpKSB7CiAJCQkJCWJyZWFrOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IGNkYTZiMzkuLjQ1YWMyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwpAQCAtMzAzNSw3ICszMDM1LDcgQEAKICAgICAgICAgICAgICAgICAvKiBJZiBUQkkgY29tcGF0aWJpbGl0eSBpcyB3YXMgcHJldmlvdXNseSBvZmYsIHR1cm4gaXQgb24uIEZvcgogICAgICAgICAgICAgICAgICAqIGNvbXBhdGliaWxpdHkgd2l0aCBhIFRCSSBsaW5rIHBhcnRuZXIsIHdlIHdpbGwgc3RvcmUgYmFkCiAgICAgICAgICAgICAgICAgICogcGFja2V0cy4gU29tZSBmcmFtZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIGJ5dGUgb24gdGhlIGVuZCBhbmQKLSAgICAgICAgICAgICAgICAgKiB3aWxsIGxvb2sgbGlrZSBDUkMgZXJyb3JzIHRvIHRvIHRoZSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgKiB3aWxsIGxvb2sgbGlrZSBDUkMgZXJyb3JzIHRvIHRoZSBoYXJkd2FyZS4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAoIWh3LT50YmlfY29tcGF0aWJpbGl0eV9vbikgewogICAgICAgICAgICAgICAgICAgICBody0+dGJpX2NvbXBhdGliaWxpdHlfb24gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCmluZGV4IDM3NDc0NTdmNS4uYmM3YzViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYwpAQCAtNzUxLDcgKzc1MSw3IEBACiAKIAltdXRleF9sb2NrKCZlaGVhX2J1c21hcF9tdXRleCk7CiAJZWhlYV9tcl9sZW4gPSAwOwotCXJldCA9IHdhbGtfbWVtb3J5X3Jlc291cmNlKDAsIDFVTEwgPDwgTUFYX1BIWVNNRU1fQklUUywgTlVMTCwKKwlyZXQgPSB3YWxrX3N5c3RlbV9yYW1fcmFuZ2UoMCwgMVVMTCA8PCBNQVhfUEhZU01FTV9CSVRTLCBOVUxMLAogCQkJCSAgIGVoZWFfY3JlYXRlX2J1c21hcF9jYWxsYmFjayk7CiAJbXV0ZXhfdW5sb2NrKCZlaGVhX2J1c21hcF9tdXRleCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCmluZGV4IDExN2ZjNmMuLjY2ODEzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKKysrIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwpAQCAtMTY2NiwzICsxNjY2LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZGVidWcubXNnX2VuYWJsZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyB2ZXJib3NpdHkgbGV2ZWwgKDA9bm9uZSwgLi4uLCBmZmZmPWFsbCkiKTsKK01PRFVMRV9BTElBUygic3BpOiIgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCAyMjM0MTE4Li42YzE0NGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJcnh0aW1lICA9IGdldF9pY3R0X3ZhbHVlKHByaXYtPnJ4aWMpOwogCXJ4Y291bnQgPSBnZXRfaWNmdF92YWx1ZShwcml2LT5yeGljKTsKIAl0eHRpbWUgID0gZ2V0X2ljdHRfdmFsdWUocHJpdi0+dHhpYyk7Ci0JdHhjb3VudCA9IGdldF9pY2Z0X3ZhbHVlKHByaXYtPnR4aWMpOzsKKwl0eGNvdW50ID0gZ2V0X2ljZnRfdmFsdWUocHJpdi0+dHhpYyk7CiAJY3ZhbHMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gZ2Zhcl90aWNrczJ1c2Vjcyhwcml2LCByeHRpbWUpOwogCWN2YWxzLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IHJ4Y291bnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwppbmRleCAxZDdkN2ZlLi44OWM4MmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCkBAIC0yNTU2LDEzICsyNTU2LDEzIEBACiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJtZGlvLWRldmljZSIsICZkZXYtPm1kaW9fcGgsIDApKQogCQlkZXYtPm1kaW9fcGggPSAwOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAiem1paS1kZXZpY2UiLCAmZGV2LT56bWlpX3BoLCAwKSkKLQkJZGV2LT56bWlpX3BoID0gMDs7CisJCWRldi0+em1paV9waCA9IDA7CiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJ6bWlpLWNoYW5uZWwiLCAmZGV2LT56bWlpX3BvcnQsIDApKQotCQlkZXYtPnptaWlfcG9ydCA9IDB4ZmZmZmZmZmY7OworCQlkZXYtPnptaWlfcG9ydCA9IDB4ZmZmZmZmZmY7CiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJyZ21paS1kZXZpY2UiLCAmZGV2LT5yZ21paV9waCwgMCkpCi0JCWRldi0+cmdtaWlfcGggPSAwOzsKKwkJZGV2LT5yZ21paV9waCA9IDA7CiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJyZ21paS1jaGFubmVsIiwgJmRldi0+cmdtaWlfcG9ydCwgMCkpCi0JCWRldi0+cmdtaWlfcG9ydCA9IDB4ZmZmZmZmZmY7OworCQlkZXYtPnJnbWlpX3BvcnQgPSAweGZmZmZmZmZmOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAiZmlmby1lbnRyeS1zaXplIiwgJmRldi0+Zmlmb19lbnRyeV9zaXplLCAwKSkKIAkJZGV2LT5maWZvX2VudHJ5X3NpemUgPSAxNjsKIAlpZiAoZW1hY19yZWFkX3VpbnRfcHJvcChucCwgIm1hbC1idXJzdC1zaXplIiwgJmRldi0+bWFsX2J1cnN0X3NpemUsIDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBkMjYzOWM0Li41ZDZjMTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMzk2Niw3ICszOTY2LDcgQEAKIAkvKiBWRnMgYXJlIGxpbWl0ZWQgdG8gdXNpbmcgdGhlIE1UQSBoYXNoIHRhYmxlIGZvciB0aGVpciBtdWx0aWNhc3QKIAkgKiBhZGRyZXNzZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQl2Zl9kYXRhLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07OworCQl2Zl9kYXRhLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07CiAKIAkvKiBGbHVzaCBhbmQgcmVzZXQgdGhlIG10YSB3aXRoIHRoZSBuZXcgdmFsdWVzICovCiAJaWdiX3NldF9yeF9tb2RlKGFkYXB0ZXItPm5ldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTEuYyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCmluZGV4IDU0N2FjN2MuLjIzNzgzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCkBAIC0xMzIxLDMgKzEzMjEsNCBAQAogCiBtb2R1bGVfcGFyYW1fbmFtZWQobWVzc2FnZSwgbXNnX2VuYWJsZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWVzc2FnZSwgIk1lc3NhZ2UgdmVyYm9zaXR5IGxldmVsICgwPW5vbmUsIDMxPWFsbCkiKTsKK01PRFVMRV9BTElBUygic3BpOmtzODg1MSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCmluZGV4IGRhOGQwYTAuLmYyYTE5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKQEAgLTg2NSw3ICs4NjUsNyBAQAogCWRjcnMgPSBkY3JfcmVzb3VyY2Vfc3RhcnQobnAsIDApOwogCWlmIChkY3JzID09IDApIHsKIAkJZGV2X2Vycigmb3AtPmRldiwgImNvdWxkIG5vdCBnZXQgRE1BIHJlZ2lzdGVyIGFkZHJlc3NcbiIpOwotCQlnb3RvIG5vZGV2OzsKKwkJZ290byBub2RldjsKIAl9CiAJbHAtPnNkbWFfZGNycyA9IGRjcl9tYXAobnAsIGRjcnMsIGRjcl9yZXNvdXJjZV9sZW4obnAsIDApKTsKIAlkZXZfZGJnKCZvcC0+ZGV2LCAiRENSIGJhc2U6ICV4XG4iLCBkY3JzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCBmYjY1YjQyLi4xZDBkNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAlzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCWludCBlcnIgPSAtRU5YSU8sIGk7CiAKLQkvKiBFbmFibGUgbWFuYWdtZW50IHBvcnQgKi8KKwkvKiBFbmFibGUgbWFuYWdlbWVudCBwb3J0ICovCiAJbWFjYl93cml0ZWwoYnAsIE5DUiwgTUFDQl9CSVQoTVBFKSk7CiAKIAlicC0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTIuYyBiL2RyaXZlcnMvbmV0L25pNTIuYwppbmRleCBiZDBhYzY5Li5hYWQzYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1Mi5jCkBAIC02MTUsMTAgKzYxNSwxMCBAQAogCS8qIGFkZHJfbGVuIHwhc3JjX2luc2VydCB8cHJlLWxlbiB8bG9vcGJhY2sgKi8KIAl3cml0ZWIoMHgyZSwgJmNmZ19jbWQtPmFkcl9sZW4pOwogCXdyaXRlYigweDAwLCAmY2ZnX2NtZC0+cHJpb3JpdHkpOwotCXdyaXRlYigweDYwLCAmY2ZnX2NtZC0+aWZzKTs7CisJd3JpdGViKDB4NjAsICZjZmdfY21kLT5pZnMpOwogCXdyaXRlYigweDAwLCAmY2ZnX2NtZC0+dGltZV9sb3cpOwogCXdyaXRlYigweGYyLCAmY2ZnX2NtZC0+dGltZV9oaWdoKTsKLQl3cml0ZWIoMHgwMCwgJmNmZ19jbWQtPnByb21pc2MpOzsKKwl3cml0ZWIoMHgwMCwgJmNmZ19jbWQtPnByb21pc2MpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCWludCBsZW4gPSAoKGNoYXIgX19pb21lbSAqKXAtPmlzY3AgLSAoY2hhciBfX2lvbWVtICopcHRyIC0gOCkgLyA2OwogCQlpZiAobnVtX2FkZHJzID4gbGVuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuYyBiL2RyaXZlcnMvbmV0L25pdS5jCmluZGV4IDc2Y2MyNjEuLmY5MzY0ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC01NjE1LDcgKzU2MTUsNyBAQAogCS8qIFRoZSBYTUFDX01JTiByZWdpc3RlciBvbmx5IGFjY2VwdHMgdmFsdWVzIGZvciBUWCBtaW4gd2hpY2gKIAkgKiBoYXZlIHRoZSBsb3cgMyBiaXRzIGNsZWFyZWQuCiAJICovCi0JQlVJTERfQlVHX09OKG1pbiAmIDB4Nyk7CisJQlVHX09OKG1pbiAmIDB4Nyk7CiAKIAlpZiAobnAtPmZsYWdzICYgTklVX0ZMQUdTX1hNQUMpCiAJCW5pdV9pbml0X3R4X3htYWMobnAsIG1pbiwgbWF4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDIyMDUyOTIuLjc3ODNjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtMjYzMCw3ICsyNjMwLDcgQEAKIAkgICAgRkxBR1NfTEk7CQkvKiBMb2FkIGlycSBkZWxheSB2YWx1ZXMgKi8KIAlpZiAocnhfcmluZy0+bGJxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTEw7CS8qIExvYWQgbGJxIHZhbHVlcyAqLwotCQl0bXAgPSAodTY0KXJ4X3JpbmctPmxicV9iYXNlX2RtYTs7CisJCXRtcCA9ICh1NjQpcnhfcmluZy0+bGJxX2Jhc2VfZG1hOwogCQliYXNlX2luZGlyZWN0X3B0ciA9IChfX2xlNjQgKikgcnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3Q7CiAJCXBhZ2VfZW50cmllcyA9IDA7CiAJCWRvIHsKQEAgLTI2NTQsNyArMjY1NCw3IEBACiAJfQogCWlmIChyeF9yaW5nLT5zYnFfbGVuKSB7CiAJCWNxaWNiLT5mbGFncyB8PSBGTEFHU19MUzsJLyogTG9hZCBzYnEgdmFsdWVzICovCi0JCXRtcCA9ICh1NjQpcnhfcmluZy0+c2JxX2Jhc2VfZG1hOzsKKwkJdG1wID0gKHU2NClyeF9yaW5nLT5zYnFfYmFzZV9kbWE7CiAJCWJhc2VfaW5kaXJlY3RfcHRyID0gKF9fbGU2NCAqKSByeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdDsKIAkJcGFnZV9lbnRyaWVzID0gMDsKIAkJZG8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcmlvbmV0LmMgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwppbmRleCBiYzk4ZTdmLi5lZGU5MzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yaW9uZXQuYworKysgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwpAQCAtNzIsNyArNzIsNyBAQAogc3RhdGljIGludCByaW9uZXRfY2FwYWJsZSA9IDE7CiAKIC8qCi0gKiBUaGlzIGlzIGEgZmFzdCBsb29rdXAgdGFibGUgZm9yIGZvciB0cmFuc2xhdGluZyBUWAorICogVGhpcyBpcyBhIGZhc3QgbG9va3VwIHRhYmxlIGZvciB0cmFuc2xhdGluZyBUWAogICogRXRoZXJuZXQgcGFja2V0cyBpbnRvIGEgZGVzdGluYXRpb24gUklPIGRldmljZS4gSXQKICAqIGNvdWxkIGJlIG1hZGUgaW50byBhIGhhc2ggdGFibGUgdG8gc2F2ZSBtZW1vcnkgZGVwZW5kaW5nCiAgKiBvbiBzeXN0ZW0gdHJhZGUtb2Zmcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCmluZGV4IGYxZGYyZWMuLmU2YjMzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwpAQCAtOTYwLDcgKzk2MCw3IEBACiAJCQkvKlBDODhiKi8KIAkJCWlmICghcGh5LT5jZl9qb2luKSB7CiAJCQkJcGh5LT5jZl9qb2luID0gVFJVRSA7Ci0JCQkJcXVldWVfZXZlbnQoc21jLEVWRU5UX0NGTSxDRl9KT0lOK25wKSA7IDsKKwkJCQlxdWV1ZV9ldmVudChzbWMsRVZFTlRfQ0ZNLENGX0pPSU4rbnApIDsKIAkJCX0KIAkJCWlmIChjbWQgPT0gUENfSk9JTikKIAkJCQlHT19TVEFURShQQzhfQUNUSVZFKSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3BtZi5jIGIvZHJpdmVycy9uZXQvc2tmcC9wbWYuYwppbmRleCA3OWU2NjVlLi5hMzIwZmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3BtZi5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvcG1mLmMKQEAgLTgwNyw5ICs4MDcsOSBAQAogCQkJCW1pYl9wLT5mZGRpUE9SVExlckZsYWcgOwogCQkJc3AtPnA0MDUwX3BhZCA9IDAgOwogCQkJc3AtPnA0MDUwX2N1dG9mZiA9Ci0JCQkJbWliX3AtPmZkZGlQT1JUTGVyX0N1dG9mZiA7IDsKKwkJCQltaWJfcC0+ZmRkaVBPUlRMZXJfQ3V0b2ZmIDsKIAkJCXNwLT5wNDA1MF9hbGFybSA9Ci0JCQkJbWliX3AtPmZkZGlQT1JUTGVyX0FsYXJtIDsgOworCQkJCW1pYl9wLT5mZGRpUE9SVExlcl9BbGFybSA7CiAJCQlzcC0+cDQwNTBfZXN0aW1hdGUgPQogCQkJCW1pYl9wLT5mZGRpUE9SVExlcl9Fc3RpbWF0ZSA7CiAJCQlzcC0+cDQwNTBfcmVqZWN0X2N0ID0KQEAgLTgyOSw3ICs4MjksNyBAQAogCQkJc3AtPnA0MDUxX3BvcnR0eXBlID0KIAkJCQltaWJfcC0+ZmRkaVBPUlRNeV9UeXBlIDsKIAkJCXNwLT5wNDA1MV9jb25uZWN0c3RhdGUgPQotCQkJCW1pYl9wLT5mZGRpUE9SVENvbm5lY3RTdGF0ZSA7IDsKKwkJCQltaWJfcC0+ZmRkaVBPUlRDb25uZWN0U3RhdGUgOwogCQkJc3AtPnA0MDUxX3BjX25laWdoYm9yID0KIAkJCQltaWJfcC0+ZmRkaVBPUlROZWlnaGJvclR5cGUgOwogCQkJc3AtPnA0MDUxX3BjX3dpdGhob2xkID0KQEAgLTg1Myw3ICs4NTMsNyBAQAogCQkJc3RydWN0IHNtdF9wXzQwNTMJKnNwIDsKIAkJCXNwID0gKHN0cnVjdCBzbXRfcF80MDUzICopIHRvIDsKIAkJCXNwLT5wNDA1M19tdWx0aXBsZSA9Ci0JCQkJbWliX3AtPmZkZGlQT1JUTXVsdGlwbGVfUCA7IDsKKwkJCQltaWJfcC0+ZmRkaVBPUlRNdWx0aXBsZV9QIDsKIAkJCXNwLT5wNDA1M19hdmFpbGFibGVwYXRocyA9CiAJCQkJbWliX3AtPmZkZGlQT1JUQXZhaWxhYmxlUGF0aHMgOwogCQkJc3AtPnA0MDUzX2N1cnJlbnRwYXRoID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCA2MmU4NTJlLi41NWJhZDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlpZiAoc2tnZS0+d29sICYgV0FLRV9NQUdJQykKIAkJY3RybCB8PSBXT0xfQ1RMX0VOQV9QTUVfT05fTUFHSUNfUEtUfFdPTF9DVExfRU5BX01BR0lDX1BLVF9VTklUOwogCWVsc2UKLQkJY3RybCB8PSBXT0xfQ1RMX0RJU19QTUVfT05fTUFHSUNfUEtUfFdPTF9DVExfRElTX01BR0lDX1BLVF9VTklUOzsKKwkJY3RybCB8PSBXT0xfQ1RMX0RJU19QTUVfT05fTUFHSUNfUEtUfFdPTF9DVExfRElTX01BR0lDX1BLVF9VTklUOwogCiAJY3RybCB8PSBXT0xfQ1RMX0RJU19QTUVfT05fUEFUVEVSTnxXT0xfQ1RMX0RJU19QQVRURVJOX1VOSVQ7CiAJc2tnZV93cml0ZTE2KGh3LCBXT0xfUkVHUyhwb3J0LCBXT0xfQ1RSTF9TVEFUKSwgY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggNGJiNTJlOS4uMTUxNDBmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtNzY1LDcgKzc2NSw3IEBACiAJaWYgKHNreTItPndvbCAmIFdBS0VfTUFHSUMpCiAJCWN0cmwgfD0gV09MX0NUTF9FTkFfUE1FX09OX01BR0lDX1BLVHxXT0xfQ1RMX0VOQV9NQUdJQ19QS1RfVU5JVDsKIAllbHNlCi0JCWN0cmwgfD0gV09MX0NUTF9ESVNfUE1FX09OX01BR0lDX1BLVHxXT0xfQ1RMX0RJU19NQUdJQ19QS1RfVU5JVDs7CisJCWN0cmwgfD0gV09MX0NUTF9ESVNfUE1FX09OX01BR0lDX1BLVHxXT0xfQ1RMX0RJU19NQUdJQ19QS1RfVU5JVDsKIAogCWN0cmwgfD0gV09MX0NUTF9ESVNfUE1FX09OX1BBVFRFUk58V09MX0NUTF9ESVNfUEFUVEVSTl9VTklUOwogCXNreTJfd3JpdGUxNihodywgV09MX1JFR1MocG9ydCwgV09MX0NUUkxfU1RBVCksIGN0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC5jCmluZGV4IDI2ZjZlZTkuLmUxN2M1MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuYworKysgYi9kcml2ZXJzL25ldC9zbGlwLmMKQEAgLTYxNiw2ICs2MTYsMTQgQEAKIAlzbF9mcmVlX2J1ZnMoc2wpOwogfQogCisvKiBIb29rIHRoZSBkZXN0cnVjdG9yIHNvIHdlIGNhbiBmcmVlIHNsaXAgZGV2aWNlcyBhdCB0aGUgcmlnaHQgcG9pbnQgaW4gdGltZSAqLworc3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaSA9IGRldi0+YmFzZV9hZGRyOworCWZyZWVfbmV0ZGV2KGRldik7CisJc2xpcF9kZXZzW2ldID0gTlVMTDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbF9uZXRkZXZfb3BzID0gewogCS5uZG9faW5pdAkJPSBzbF9pbml0LAogCS5uZG9fdW5pbml0CSAgCT0gc2xfdW5pbml0LApAQCAtNjM0LDcgKzY0Miw3IEBACiBzdGF0aWMgdm9pZCBzbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+bmV0ZGV2X29wcwkJPSAmc2xfbmV0ZGV2X29wczsKLQlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CisJZGV2LT5kZXN0cnVjdG9yCQk9IHNsX2ZyZWVfbmV0ZGV2OwogCiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwogCWRldi0+YWRkcl9sZW4JCT0gMDsKQEAgLTcxMiw4ICs3MjAsNiBAQAogc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyhkZXZfdCBsaW5lKQogewogCWludCBpOwotCWludCBzZWwgPSAtMTsKLQlpbnQgc2NvcmUgPSAtMTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7CiAKQEAgLTcyNCw1NSArNzMwLDcgQEAKIAkJZGV2ID0gc2xpcF9kZXZzW2ldOwogCQlpZiAoZGV2ID09IE5VTEwpCiAJCQlicmVhazsKLQotCQlzbCA9IG5ldGRldl9wcml2KGRldik7Ci0JCWlmIChzbC0+bGVhc2VkKSB7Ci0JCQlpZiAoc2wtPmxpbmUgIT0gbGluZSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChzbC0+dHR5KQotCQkJCXJldHVybiBOVUxMOwotCi0JCQkvKiBDbGVhciBFU0NBUEUgJiBFUlJPUiBmbGFncyAqLwotCQkJc2wtPmZsYWdzICY9ICgxIDw8IFNMRl9JTlVTRSk7Ci0JCQlyZXR1cm4gc2w7Ci0JCX0KLQotCQlpZiAoc2wtPnR0eSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjdXJyZW50LT5waWQgPT0gc2wtPnBpZCkgewotCQkJaWYgKHNsLT5saW5lID09IGxpbmUgJiYgc2NvcmUgPCAzKSB7Ci0JCQkJc2VsID0gaTsKLQkJCQlzY29yZSA9IDM7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoc2NvcmUgPCAyKSB7Ci0JCQkJc2VsID0gaTsKLQkJCQlzY29yZSA9IDI7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc2wtPmxpbmUgPT0gbGluZSAmJiBzY29yZSA8IDEpIHsKLQkJCXNlbCA9IGk7Ci0JCQlzY29yZSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc2NvcmUgPCAwKSB7Ci0JCQlzZWwgPSBpOwotCQkJc2NvcmUgPSAwOwotCQl9CiAJfQotCi0JaWYgKHNlbCA+PSAwKSB7Ci0JCWkgPSBzZWw7Ci0JCWRldiA9IHNsaXBfZGV2c1tpXTsKLQkJaWYgKHNjb3JlID4gMSkgewotCQkJc2wgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJc2wtPmZsYWdzICY9ICgxIDw8IFNMRl9JTlVTRSk7Ci0JCQlyZXR1cm4gc2w7Ci0JCX0KLQl9Ci0KIAkvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi8KIAlpZiAoaSA+PSBzbGlwX21heGRldikKIAkJcmV0dXJuIE5VTEw7CkBAIC05MDksMzAgKzg2NywxMyBAQAogfQogCiAvKgotCi0gIEZJWE1FOiAxLDIgYXJlIGZpeGVkIDMgd2FzIG5ldmVyIHRydWUgYW55d2F5LgotCi0gICBMZXQgbWUgdG8gYmxhbWUgYSBiaXQuCi0gICAxLiBUVFkgbW9kdWxlIGNhbGxzIHRoaXMgZnVuc3Rpb24gb24gc29mdCBpbnRlcnJ1cHQuCi0gICAyLiBUVFkgbW9kdWxlIGNhbGxzIHRoaXMgZnVuY3Rpb24gV0lUSCBNQVNLRUQgSU5URVJSVVBUUyEKLSAgIDMuIFRUWSBtb2R1bGUgZG9lcyBub3Qgbm90aWZ5IHVzIGFib3V0IGxpbmUgZGlzY2lwbGluZQotICAgICAgc2h1dGRvd24sCi0KLSAgIFNlZW1zLCBub3cgaXQgaXMgY2xlYW4uIFRoZSBzb2x1dGlvbiBpcyB0byBjb25zaWRlciBuZXRkZXZpY2UgYW5kCi0gICBsaW5lIGRpc2NpcGxpbmUgc2lkZXMgYXMgdHdvIGluZGVwZW5kZW50IHRocmVhZHMuCi0KLSAgIEJ5LXByb2R1Y3QgKG5vdCBkZXNpcmVkKTogc2w/IGRvZXMgbm90IGZlZWwgaGFuZ3VwcyBhbmQgcmVtYWlucyBvcGVuLgotICAgSXQgaXMgc3VwcG9zZWQsIHRoYXQgdXNlciBsZXZlbCBwcm9ncmFtIChkaXAsIGRpYWxkLCBzbGF0dGFjaC4uLikKLSAgIHdpbGwgY2F0Y2ggU0lHSFVQIGFuZCBtYWtlIHRoZSByZXN0IG9mIHdvcmsuCi0KLSAgIEkgc2VlIG5vIHdheSB0byBtYWtlIG1vcmUgd2l0aCBjdXJyZW50IHR0eSBjb2RlLiAtLUFOSwotICovCi0KLS8qCiAgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLgogICogVGhpcyBtZWFucyBmbHVzaGluZyBvdXQgYW55IHBlbmRpbmcgcXVldWVzLCBhbmQgdGhlbiByZXR1cm5pbmcuIFRoaXMKICAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy4KKyAqCisgKiBXZSBhbHNvIHVzZSB0aGlzIG1ldGhvZCBmbyBhIGhhbmd1cCBldmVudAogICovCisKIHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc2xpcCAqc2wgPSB0dHktPmRpc2NfZGF0YTsKQEAgLTk1MSwxMCArODkyLDE2IEBACiAJZGVsX3RpbWVyX3N5bmMoJnNsLT5rZWVwYWxpdmVfdGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZzbC0+b3V0ZmlsbF90aW1lcik7CiAjZW5kaWYKLQotCS8qIENvdW50IHJlZmVyZW5jZXMgZnJvbSBUVFkgbW9kdWxlICovCisJLyogRmx1c2ggbmV0d29yayBzaWRlICovCisJdW5yZWdpc3Rlcl9uZXRkZXYoc2wtPmRldik7CisJLyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqLwogfQogCitzdGF0aWMgaW50IHNsaXBfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc2xpcF9jbG9zZSh0dHkpOworCXJldHVybiAwOworfQogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKgkJCVNUQU5EQVJEIFNMSVAgRU5DQVBTVUxBVElPTgkJICAJICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTMxMSw2ICsxMjU4LDcgQEAKIAkubmFtZSAJCT0gInNsaXAiLAogCS5vcGVuIAkJPSBzbGlwX29wZW4sCiAJLmNsb3NlCSAJPSBzbGlwX2Nsb3NlLAorCS5oYW5ndXAJIAk9IHNsaXBfaGFuZ3VwLAogCS5pb2N0bAkJPSBzbGlwX2lvY3RsLAogCS5yZWNlaXZlX2J1Zgk9IHNsaXBfcmVjZWl2ZV9idWYsCiAJLndyaXRlX3dha2V1cAk9IHNsaXBfd3JpdGVfd2FrZXVwLApAQCAtMTM4NCw2ICsxMzMyLDggQEAKIAkJfQogCX0gd2hpbGUgKGJ1c3kgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwogCisJLyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kCisJICAgcGhhc2UgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBzbGlwX21heGRldjsgaSsrKSB7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggM2Y1ZDI4OC4uZDNlZTE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTEzNzAsNyArMTM3MCw3IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdHVuX21pc2NkZXYgPSB7CiAJLm1pbm9yID0gVFVOX01JTk9SLAogCS5uYW1lID0gInR1biIsCi0JLmRldm5vZGUgPSAibmV0L3R1biIsCisJLm5vZGVuYW1lID0gIm5ldC90dW4iLAogCS5mb3BzID0gJnR1bl9mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMKaW5kZXggNDVjZWJmYi4uMjMzMDA2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jCkBAIC0zMDAsMjAgKzMwMCwyMyBAQAogCQkJCQlyZXR1cm4gMDsKIAkJCX0KIAotCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYjItPmRhdGEKLQkJCQkJKyBsZW4gLSBFVEhfRkNTX0xFTik7Ci0JCQlza2JfdHJpbShza2IyLCBsZW4gLSBFVEhfRkNTX0xFTik7Ci0KIAkJCS8qCiAJCQkgKiBUaGUgYm1DUkMgaGVscHMgdG8gZGVub3RlIHdoZW4gdGhlIENSQyBmaWVsZCBpbgogCQkJICogdGhlIEV0aGVybmV0IGZyYW1lIGNvbnRhaW5zIGEgY2FsY3VsYXRlZCBDUkM6CiAJCQkgKglibUNSQyA9IDEJOiBDUkMgaXMgY2FsY3VsYXRlZAogCQkJICoJYm1DUkMgPSAwCTogQ1JDID0gMHhERUFEQkVFRgogCQkJICovCi0JCQlpZiAoaGVhZGVyICYgQklUKDE0KSkKLQkJCQljcmMyID0gfmNyYzMyX2xlKH4wLCBza2IyLT5kYXRhLCBza2IyLT5sZW4pOwotCQkJZWxzZQorCQkJaWYgKGhlYWRlciAmIEJJVCgxNCkpIHsKKwkJCQljcmMgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiMi0+ZGF0YQorCQkJCQkJKyBsZW4gLSBFVEhfRkNTX0xFTik7CisJCQkJY3JjMiA9IH5jcmMzMl9sZSh+MCwgc2tiMi0+ZGF0YSwgc2tiMi0+bGVuCisJCQkJCQktIEVUSF9GQ1NfTEVOKTsKKwkJCX0gZWxzZSB7CisJCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9iZTMyKHNrYjItPmRhdGEKKwkJCQkJCSsgbGVuIC0gRVRIX0ZDU19MRU4pOwogCQkJCWNyYzIgPSAweGRlYWRiZWVmOworCQkJfQorCQkJc2tiX3RyaW0oc2tiMiwgbGVuIC0gRVRIX0ZDU19MRU4pOwogCiAJCQlpZiAoaXNfbGFzdCkKIAkJCQlyZXR1cm4gY3JjID09IGNyYzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggMzIyNjZmYi4uNWM0OThkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgpAQCAtMzIwLDcgKzMyMSw3IEBACiAJCXNrYl9xdWV1ZV9oZWFkKCZ2aS0+cmVjdiwgc2tiKTsKIAogCQllcnIgPSB2aS0+cnZxLT52cV9vcHMtPmFkZF9idWYodmktPnJ2cSwgc2csIDAsIG51bSwgc2tiKTsKLQkJaWYgKGVycikgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc2tiX3VubGluayhza2IsICZ2aS0+cmVjdik7CiAJCQl0cmltX3BhZ2VzKHZpLCBza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNzMsNyArMzc0LDcgQEAKIAkJc2tiX3F1ZXVlX2hlYWQoJnZpLT5yZWN2LCBza2IpOwogCiAJCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCBzZywgMCwgMSwgc2tiKTsKLQkJaWYgKGVycikgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc2tiX3VubGluayhza2IsICZ2aS0+cmVjdik7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwpAQCAtNTI3LDcgKzUyOCw3IEBACiAJbnVtID0gc2tiX3RvX3NndmVjKHNrYiwgc2crMSwgMCwgc2tiLT5sZW4pICsgMTsKIAogCWVyciA9IHZpLT5zdnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+c3ZxLCBzZywgbnVtLCAwLCBza2IpOwotCWlmICghZXJyICYmICF2aS0+ZnJlZV9pbl90YXNrbGV0KQorCWlmIChlcnIgPj0gMCAmJiAhdmktPmZyZWVfaW5fdGFza2xldCkKIAkJbW9kX3RpbWVyKCZ2aS0+eG1pdF9mcmVlX3RpbWVyLCBqaWZmaWVzICsgKEhaLzEwKSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNTM4LDcgKzUzOSw3IEBACiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSAodm9pZCAqKWRhdGE7CiAKIAluZXRpZl90eF9sb2NrX2JoKHZpLT5kZXYpOwotCWlmICh2aS0+bGFzdF94bWl0X3NrYiAmJiB4bWl0X3NrYih2aSwgdmktPmxhc3RfeG1pdF9za2IpID09IDApIHsKKwlpZiAodmktPmxhc3RfeG1pdF9za2IgJiYgeG1pdF9za2IodmksIHZpLT5sYXN0X3htaXRfc2tiKSA+PSAwKSB7CiAJCXZpLT5zdnEtPnZxX29wcy0+a2ljayh2aS0+c3ZxKTsKIAkJdmktPmxhc3RfeG1pdF9za2IgPSBOVUxMOwogCX0KQEAgLTU1Nyw3ICs1NTgsNyBAQAogCiAJLyogSWYgd2UgaGFzIGEgYnVmZmVyIGxlZnQgb3ZlciBmcm9tIGxhc3QgdGltZSwgc2VuZCBpdCBub3cuICovCiAJaWYgKHVubGlrZWx5KHZpLT5sYXN0X3htaXRfc2tiKSAmJgotCSAgICB4bWl0X3NrYih2aSwgdmktPmxhc3RfeG1pdF9za2IpICE9IDApCisJICAgIHhtaXRfc2tiKHZpLCB2aS0+bGFzdF94bWl0X3NrYikgPCAwKQogCQlnb3RvIHN0b3BfcXVldWU7CiAKIAl2aS0+bGFzdF94bWl0X3NrYiA9IE5VTEw7CkBAIC01NjUsNyArNTY2LDcgQEAKIAkvKiBQdXQgbmV3IG9uZSBpbiBzZW5kIHF1ZXVlIGFuZCBkbyB0cmFuc21pdCAqLwogCWlmIChsaWtlbHkoc2tiKSkgewogCQlfX3NrYl9xdWV1ZV9oZWFkKCZ2aS0+c2VuZCwgc2tiKTsKLQkJaWYgKHhtaXRfc2tiKHZpLCBza2IpICE9IDApIHsKKwkJaWYgKHhtaXRfc2tiKHZpLCBza2IpIDwgMCkgewogCQkJdmktPmxhc3RfeG1pdF9za2IgPSBza2I7CiAJCQlza2IgPSBOVUxMOwogCQkJZ290byBzdG9wX3F1ZXVlOwpAQCAtNjY4LDcgKzY2OSw3IEBACiAJCXNnX3NldF9idWYoJnNnW2kgKyAxXSwgc2dfdmlydChzKSwgcy0+bGVuZ3RoKTsKIAlzZ19zZXRfYnVmKCZzZ1tvdXQgKyBpbiAtIDFdLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CiAKLQlCVUdfT04odmktPmN2cS0+dnFfb3BzLT5hZGRfYnVmKHZpLT5jdnEsIHNnLCBvdXQsIGluLCB2aSkpOworCUJVR19PTih2aS0+Y3ZxLT52cV9vcHMtPmFkZF9idWYodmktPmN2cSwgc2csIG91dCwgaW4sIHZpKSA8IDApOwogCiAJdmktPmN2cS0+dnFfb3BzLT5raWNrKHZpLT5jdnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKaW5kZXggNjI3NzlhNS4uM2U5NGYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaApAQCAtMTU0MSw3ICsxNTQxLDcgQEAKIAlyeGRfaW5mby0+bDRfY2tzdW1fdmFsaWQgPQogCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fQ09SUkVDVF9HRVQocnhkcC0+Y29udHJvbF8wKTsKIAlyeGRfaW5mby0+bDRfY2tzdW0gPQotCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7OworCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CiAJcnhkX2luZm8tPmZyYW1lID0KIAkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0VUSEVSX0VOQ0FQX0dFVChyeGRwLT5jb250cm9sXzApOwogCXJ4ZF9pbmZvLT5wcm90byA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwppbmRleCBiMzc4MDM3Li4wNjhkN2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKQEAgLTIzNTAsNyArMjM1MCw3IEBACiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CiAJLyogMCAtIFR4LCAxIC0gUnggICovCiAJaW50IHRpbV9tc2l4X2lkWzRdOwotCWludCBhbGFybV9tc2l4X2lkID0gMCwgbXNpeF9pbnRyX3ZlY3QgPSAwOzsKKwlpbnQgYWxhcm1fbXNpeF9pZCA9IDAsIG1zaXhfaW50cl92ZWN0ID0gMDsKIAl2ZGV2LT5pbnRyX2NudCA9IDA7CiAKIAkvKiBhbGxvY2F0ZSBtc2l4IHZlY3RvcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaAppbmRleCBkZWJhZDA3Li5jNjNlYTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCkBAIC05ODIsNyArOTgyLDcgQEAKICNkZWZpbmUgQVI1S181NDE0X0NCQ0ZHX0JVRl9ESVMJMHgxMAkvKiBEaXNhYmxlIGJ1ZmZlciAqLwogCiAvKgotICogUENJLUUgUG93ZXIgbWFuYWdtZW50IGNvbmZpZ3VyYXRpb24KKyAqIFBDSS1FIFBvd2VyIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbgogICogYW5kIHN0YXR1cyByZWdpc3RlciBbNTQyNCtdCiAgKi8KICNkZWZpbmUJQVI1S19QQ0lFX1BNX0NUTAkJMHg0MDY4CQkJLyogUmVnaXN0ZXIgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggYTNiMzZiMy4uY2NlMTg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC0zMzMwLDcgKzMzMzAsNyBAQAogCXByaXYtPndzdGF0cy5xdWFsLnVwZGF0ZWQgJj0gfklXX1FVQUxfUVVBTF9JTlZBTElEOwogfQogCi0vKiBkZWFscyB3aXRoIGluY29taW5nIG1hbmFnbWVudCBmcmFtZXMuICovCisvKiBkZWFscyB3aXRoIGluY29taW5nIG1hbmFnZW1lbnQgZnJhbWVzLiAqLwogc3RhdGljIHZvaWQgYXRtZWxfbWFuYWdlbWVudF9mcmFtZShzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLAogCQkJCSAgIHUxNiBmcmFtZV9sZW4sIHU4IHJzc2kpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCmluZGV4IDQ0NmUzMjcuLmNiOGJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0xMjIyLDMgKzEyMjIsNCBAQAogTU9EVUxFX0FVVEhPUigiQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+LCAiCiAJICAgICAgIkNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpsaWJlcnRhc19zcGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwppbmRleCAwNTQ1OGQ5Li5hZmQyNmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC03MzEsMyArNzMxLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPiIpOworTU9EVUxFX0FMSUFTKCJzcGk6Y3gzMTEweCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX21haW4uYwppbmRleCA1ODA5ZWY1Li4xMTAzMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX21haW4uYwpAQCAtMTQyNiwzICsxNDI2LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiVEkgd2wxMjUxIFdpcmVsZXMgTEFOIERyaXZlciBDb3JlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BTElBUygic3BpOndsMTJ4eCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IDVlMTEwYTIuLjRlNzlhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCXJldHVybiByOwogfQogCi0vKiBNQUMgYWRkcmVzczogaWYgY3VzdG9tIG1hYyBhZGRyZXNzZXMgYXJlIHRvIHRvIGJlIHVzZWQgQ1JfTUFDX0FERFJfUDEgYW5kCisvKiBNQUMgYWRkcmVzczogaWYgY3VzdG9tIG1hYyBhZGRyZXNzZXMgYXJlIHRvIGJlIHVzZWQgQ1JfTUFDX0FERFJfUDEgYW5kCiAgKiAgICAgICAgICAgICAgQ1JfTUFDX0FERFJfUDIgbXVzdCBiZSBvdmVyd3JpdHRlbgogICovCiBpbnQgemRfd3JpdGVfbWFjX2FkZHIoc3RydWN0IHpkX2NoaXAgKmNoaXAsIGNvbnN0IHU4ICptYWNfYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYmFzZS5jIGIvZHJpdmVycy9vZi9iYXNlLmMKaW5kZXggNjlmODVjMC4uZGRmMjI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9iYXNlLmMKKysrIGIvZHJpdmVycy9vZi9iYXNlLmMKQEAgLTQ0Nyw3ICs0NDcsNiBAQAogc3RhdGljIHN0cnVjdCBvZl9tb2RhbGlhc190YWJsZSBvZl9tb2RhbGlhc190YWJsZVtdID0gewogCXsgImZzbCxtY3UtbXBjODM0OWVtaXR4IiwgIm1jdS1tcGM4MzQ5ZW1pdHgiIH0sCiAJeyAibW1jLXNwaS1zbG90IiwgIm1tY19zcGkiIH0sCi0JeyAic3RtLG0yNXA0MCIsICJtMjVwODAiIH0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVmcy5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKaW5kZXggYjdlNGNlZS4uMjc2NmE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKQEAgLTM1LDcgKzM1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlIAk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCmluZGV4IGE0NWIwYzAuLmE2YjRhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAKIAkqKiBIb3QtUGx1Zy9SZW1vdmFsIG9mIFBDSSBjYXJkcy4gKGFrYSBQQ0kgT0xBUkQpLgogCSovCiAKLQlpb3ZhX3NwYWNlX3NpemUgPSAodTMyKSAobnVtX3BoeXNwYWdlcyAvIGNvdW50X3BhcmlzY19kcml2ZXIoJmNjaW9fZHJpdmVyKSk7CisJaW92YV9zcGFjZV9zaXplID0gKHUzMikgKHRvdGFscmFtX3BhZ2VzIC8gY291bnRfcGFyaXNjX2RyaXZlcigmY2Npb19kcml2ZXIpKTsKIAogCS8qIGxpbWl0IElPVkEgc3BhY2Ugc2l6ZSB0byAxTUItMUdCICovCiAKQEAgLTEzMDUsNyArMTMwNSw3IEBACiAKIAlEQkdfSU5JVCgiJXMoKSBocGEgMHglcCBtZW0gJWx1TUIgSU9WICVkTUIgKCVkIGJpdHMpXG4iLAogCQkJX19mdW5jX18sIGlvYy0+aW9jX3JlZ3MsCi0JCQkodW5zaWduZWQgbG9uZykgbnVtX3BoeXNwYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSwKKwkJCSh1bnNpZ25lZCBsb25nKSB0b3RhbHJhbV9wYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSwKIAkJCWlvdmFfc3BhY2Vfc2l6ZT4+MjAsCiAJCQlpb3Zfb3JkZXIgKyBQQUdFX1NISUZUKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwppbmRleCAxMjNkOGZlLi41N2E2ZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwpAQCAtMTM5MCw3ICsxMzkwLDcgQEAKIAkqKiBmb3IgRE1BIGhpbnRzIC0gZXJnbyBvbmx5IDMwIGJpdHMgbWF4LgogCSovCiAKLQlpb3ZhX3NwYWNlX3NpemUgPSAodTMyKSAobnVtX3BoeXNwYWdlcy9nbG9iYWxfaW9jX2NudCk7CisJaW92YV9zcGFjZV9zaXplID0gKHUzMikgKHRvdGFscmFtX3BhZ2VzL2dsb2JhbF9pb2NfY250KTsKIAogCS8qIGxpbWl0IElPVkEgc3BhY2Ugc2l6ZSB0byAxTUItMUdCICovCiAJaWYgKGlvdmFfc3BhY2Vfc2l6ZSA8ICgxIDw8ICgyMCAtIFBBR0VfU0hJRlQpKSkgewpAQCAtMTQxNSw3ICsxNDE1LDcgQEAKIAlEQkdfSU5JVCgiJXMoKSBocGEgMHglbHggbWVtICVsZE1CIElPViAlZE1CICglZCBiaXRzKVxuIiwKIAkJCV9fZnVuY19fLAogCQkJaW9jLT5pb2NfaHBhLAotCQkJKHVuc2lnbmVkIGxvbmcpIG51bV9waHlzcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCksCisJCQkodW5zaWduZWQgbG9uZykgdG90YWxyYW1fcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCksCiAJCQlpb3ZhX3NwYWNlX3NpemU+PjIwLAogCQkJaW92X29yZGVyICsgUEFHRV9TSElGVCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2RtYXIuYyBiL2RyaXZlcnMvcGNpL2RtYXIuYwppbmRleCBhYjk5NzgzLi4xNGJiYWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9kbWFyLmMKKysrIGIvZHJpdmVycy9wY2kvZG1hci5jCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAotI3VuZGVmIFBSRUZJWAotI2RlZmluZSBQUkVGSVggIkRNQVI6IgorI2RlZmluZSBQUkVGSVggIkRNQVI6ICIKIAogLyogTm8gbG9ja3MgYXJlIG5lZWRlZCBhcyBETUEgcmVtYXBwaW5nIGhhcmR3YXJlIHVuaXQKICAqIGxpc3QgaXMgY29uc3RydWN0ZWQgYXQgYm9vdCB0aW1lIGFuZCBob3RwbHVnIG9mCkBAIC01NzcsOSArNTc3LDYgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIk5vIEFUU1IgZm91bmRcbiIpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCXBhcnNlX2lvYXBpY3NfdW5kZXJfaXIoKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC02MzksMjAgKzYzNiwzMSBAQAogCWlvbW11LT5jYXAgPSBkbWFyX3JlYWRxKGlvbW11LT5yZWcgKyBETUFSX0NBUF9SRUcpOwogCWlvbW11LT5lY2FwID0gZG1hcl9yZWFkcShpb21tdS0+cmVnICsgRE1BUl9FQ0FQX1JFRyk7CiAKKwlpZiAoaW9tbXUtPmNhcCA9PSAodWludDY0X3QpLTEgJiYgaW9tbXUtPmVjYXAgPT0gKHVpbnQ2NF90KS0xKSB7CisJCS8qIFByb21vdGUgYW4gYXR0aXR1ZGUgb2YgdmlvbGVuY2UgdG8gYSBCSU9TIGVuZ2luZWVyIHRvZGF5ICovCisJCVdBUk4oMSwgIllvdXIgQklPUyBpcyBicm9rZW47IERNQVIgcmVwb3J0ZWQgYXQgYWRkcmVzcyAlbGx4IHJldHVybnMgYWxsIG9uZXMhXG4iCisJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJICAgICBkcmhkLT5yZWdfYmFzZV9hZGRyLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisKICNpZmRlZiBDT05GSUdfRE1BUgogCWFnYXcgPSBpb21tdV9jYWxjdWxhdGVfYWdhdyhpb21tdSk7CiAJaWYgKGFnYXcgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIkNhbm5vdCBnZXQgYSB2YWxpZCBhZ2F3IGZvciBpb21tdSAoc2VxX2lkID0gJWQpXG4iLAogCQkgICAgICAgaW9tbXUtPnNlcV9pZCk7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyX3VubWFwOwogCX0KIAltc2FnYXcgPSBpb21tdV9jYWxjdWxhdGVfbWF4X3NhZ2F3KGlvbW11KTsKIAlpZiAobXNhZ2F3IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJDYW5ub3QgZ2V0IGEgdmFsaWQgbWF4IGFnYXcgZm9yIGlvbW11IChzZXFfaWQgPSAlZClcbiIsCiAJCQlpb21tdS0+c2VxX2lkKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBlcnJfdW5tYXA7CiAJfQogI2VuZGlmCiAJaW9tbXUtPmFnYXcgPSBhZ2F3OwpAQCAtNjcyLDcgKzY4MCw3IEBACiAJfQogCiAJdmVyID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfVkVSX1JFRyk7Ci0JcHJfZGVidWcoIklPTU1VICVsbHg6IHZlciAlZDolZCBjYXAgJWxseCBlY2FwICVsbHhcbiIsCisJcHJfaW5mbygiSU9NTVUgJWxseDogdmVyICVkOiVkIGNhcCAlbGx4IGVjYXAgJWxseFxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylkcmhkLT5yZWdfYmFzZV9hZGRyLAogCQlETUFSX1ZFUl9NQUpPUih2ZXIpLCBETUFSX1ZFUl9NSU5PUih2ZXIpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWlvbW11LT5jYXAsCkBAIC02ODIsNyArNjkwLDEwIEBACiAKIAlkcmhkLT5pb21tdSA9IGlvbW11OwogCXJldHVybiAwOwotZXJyb3I6CisKKyBlcnJfdW5tYXA6CisJaW91bm1hcChpb21tdS0+cmVnKTsKKyBlcnJvcjoKIAlrZnJlZShpb21tdSk7CiAJcmV0dXJuIC0xOwogfQpAQCAtMTIxOSw3ICsxMjMwLDcgQEAKIAkJCQlzb3VyY2VfaWQsIGd1ZXN0X2FkZHIpOwogCiAJCWZhdWx0X2luZGV4Kys7Ci0JCWlmIChmYXVsdF9pbmRleCA+IGNhcF9udW1fZmF1bHRfcmVncyhpb21tdS0+Y2FwKSkKKwkJaWYgKGZhdWx0X2luZGV4ID49IGNhcF9udW1fZmF1bHRfcmVncyhpb21tdS0+Y2FwKSkKIAkJCWZhdWx0X2luZGV4ID0gMDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKIAl9CkBAIC0xMzEyLDMgKzEzMjMsMTMgQEAKIAogCXJldHVybiAwOwogfQorCisvKgorICogQ2hlY2sgaW50ZXJydXB0IHJlbWFwcGluZyBzdXBwb3J0IGluIERNQVIgdGFibGUgZGVzY3JpcHRpb24uCisgKi8KK2ludCBkbWFyX2lyX3N1cHBvcnQodm9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOworCWRtYXIgPSAoc3RydWN0IGFjcGlfdGFibGVfZG1hciAqKWRtYXJfdGJsOworCXJldHVybiBkbWFyLT5mbGFncyAmIDB4MTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYwppbmRleCA1YmVmYTdlLi5hOWQ5MjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCkBAIC0zOTgsMjMgKzM5OCwyMSBAQAogCWFjcGlfaGFuZGxlICpwaGFuZGxlID0gKGFjcGlfaGFuZGxlICopY29udGV4dDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7IAogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBpbmZvX2J1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm9fYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZXJyKCIlczogIEZhaWxlZCB0byBnZXQgZGV2aWNlIGluZm9ybWF0aW9uIHN0YXR1cz0weCV4XG4iLAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWluZm8gPSBpbmZvX2J1ZmZlci5wb2ludGVyOwotCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSkgLSAxXSA9ICdcMCc7CisJaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZC5sZW5ndGgpIC0gMV0gPSAnXDAnOwogCiAJaWYgKGluZm8tPmN1cnJlbnRfc3RhdHVzICYmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgotCQkJKCFzdHJjbXAoaW5mby0+aGFyZHdhcmVfaWQudmFsdWUsIElCTV9IQVJEV0FSRV9JRDEpIHx8Ci0JCQkgIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwgSUJNX0hBUkRXQVJFX0lEMikpKSB7CisJCQkoIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsIElCTV9IQVJEV0FSRV9JRDEpIHx8CisJCQkgIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsIElCTV9IQVJEV0FSRV9JRDIpKSkgewogCQlkYmcoImZvdW5kIGhhcmR3YXJlOiAlcywgaGFuZGxlOiAlcFxuIiwKLQkJCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlLCBoYW5kbGUpOworCQkJaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nLCBoYW5kbGUpOwogCQkqcGhhbmRsZSA9IGhhbmRsZTsKIAkJLyogcmV0dXJuaW5nIG5vbi16ZXJvIGNhdXNlcyB0aGUgc2VhcmNoIHRvIHN0b3AKIAkJICogYW5kIHJldHVybnMgdGhpcyB2YWx1ZSB0byB0aGUgY2FsbGVyIG9mIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggNTYyMjIxZS4uODU1ZGQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSAicGNpLmgiCkBAIC01Niw4ICs1NywxNCBAQAogCiAjZGVmaW5lIE1BWF9BR0FXX1dJRFRIIDY0CiAKLSNkZWZpbmUgRE9NQUlOX01BWF9BRERSKGdhdykgKCgoKHU2NCkxKSA8PCBnYXcpIC0gMSkKLSNkZWZpbmUgRE9NQUlOX01BWF9QRk4oZ2F3KSAgKCgoKHU2NCkxKSA8PCAoZ2F3LVZURF9QQUdFX1NISUZUKSkgLSAxKQorI2RlZmluZSBfX0RPTUFJTl9NQVhfUEZOKGdhdykgICgoKCh1aW50NjRfdCkxKSA8PCAoZ2F3LVZURF9QQUdFX1NISUZUKSkgLSAxKQorI2RlZmluZSBfX0RPTUFJTl9NQVhfQUREUihnYXcpICgoKCh1aW50NjRfdCkxKSA8PCBnYXcpIC0gMSkKKworLyogV2UgbGltaXQgRE9NQUlOX01BWF9QRk4gdG8gZml0IGluIGFuIHVuc2lnbmVkIGxvbmcsIGFuZCBET01BSU5fTUFYX0FERFIKKyAgIHRvIG1hdGNoLiBUaGF0IHdheSwgd2UgY2FuIHVzZSAndW5zaWduZWQgbG9uZycgZm9yIFBGTnMgd2l0aCBpbXB1bml0eS4gKi8KKyNkZWZpbmUgRE9NQUlOX01BWF9QRk4oZ2F3KQkoKHVuc2lnbmVkIGxvbmcpIG1pbl90KHVpbnQ2NF90LCBcCisJCQkJX19ET01BSU5fTUFYX1BGTihnYXcpLCAodW5zaWduZWQgbG9uZyktMSkpCisjZGVmaW5lIERPTUFJTl9NQVhfQUREUihnYXcpCSgoKHVpbnQ2NF90KV9fRE9NQUlOX01BWF9QRk4oZ2F3KSkgPDwgVlREX1BBR0VfU0hJRlQpCiAKICNkZWZpbmUgSU9WQV9QRk4oYWRkcikJCSgoYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgRE1BXzMyQklUX1BGTgkJSU9WQV9QRk4oRE1BX0JJVF9NQVNLKDMyKSkKQEAgLTI1Miw3ICsyNTksOCBAQAogICogCTIuIEl0IG1hcHMgdG8gZWFjaCBpb21tdSBpZiBzdWNjZXNzZnVsLgogICoJMy4gRWFjaCBpb21tdSBtYXBwcyB0byB0aGlzIGRvbWFpbiBpZiBzdWNjZXNzZnVsLgogICovCi1zdHJ1Y3QgZG1hcl9kb21haW4gKnNpX2RvbWFpbjsKK3N0YXRpYyBzdHJ1Y3QgZG1hcl9kb21haW4gKnNpX2RvbWFpbjsKK3N0YXRpYyBpbnQgaHdfcGFzc190aHJvdWdoID0gMTsKIAogLyogZGV2aWNlcyB1bmRlciB0aGUgc2FtZSBwMnAgYnJpZGdlIGFyZSBvd25lZCBpbiBvbmUgZG9tYWluICovCiAjZGVmaW5lIERPTUFJTl9GTEFHX1AyUF9NVUxUSVBMRV9ERVZJQ0VTICgxIDw8IDApCkBAIC03MjgsNyArNzM2LDcgQEAKIAkJCQlyZXR1cm4gTlVMTDsKIAogCQkJZG9tYWluX2ZsdXNoX2NhY2hlKGRvbWFpbiwgdG1wX3BhZ2UsIFZURF9QQUdFX1NJWkUpOwotCQkJcHRldmFsID0gKHZpcnRfdG9fZG1hX3Bmbih0bXBfcGFnZSkgPDwgVlREX1BBR0VfU0hJRlQpIHwgRE1BX1BURV9SRUFEIHwgRE1BX1BURV9XUklURTsKKwkJCXB0ZXZhbCA9ICgodWludDY0X3QpdmlydF90b19kbWFfcGZuKHRtcF9wYWdlKSA8PCBWVERfUEFHRV9TSElGVCkgfCBETUFfUFRFX1JFQUQgfCBETUFfUFRFX1dSSVRFOwogCQkJaWYgKGNtcHhjaGc2NCgmcHRlLT52YWwsIDBVTEwsIHB0ZXZhbCkpIHsKIAkJCQkvKiBTb21lb25lIGVsc2Ugc2V0IGl0IHdoaWxlIHdlIHdlcmUgdGhpbmtpbmc7IHVzZSB0aGVpcnMuICovCiAJCQkJZnJlZV9wZ3RhYmxlX3BhZ2UodG1wX3BhZ2UpOwpAQCAtNzc4LDkgKzc4NiwxMCBAQAogCiAJQlVHX09OKGFkZHJfd2lkdGggPCBCSVRTX1BFUl9MT05HICYmIHN0YXJ0X3BmbiA+PiBhZGRyX3dpZHRoKTsKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgbGFzdF9wZm4gPj4gYWRkcl93aWR0aCk7CisJQlVHX09OKHN0YXJ0X3BmbiA+IGxhc3RfcGZuKTsKIAogCS8qIHdlIGRvbid0IG5lZWQgbG9jayBoZXJlOyBub2JvZHkgZWxzZSB0b3VjaGVzIHRoZSBpb3ZhIHJhbmdlICovCi0Jd2hpbGUgKHN0YXJ0X3BmbiA8PSBsYXN0X3BmbikgeworCWRvIHsKIAkJZmlyc3RfcHRlID0gcHRlID0gZG1hX3Bmbl9sZXZlbF9wdGUoZG9tYWluLCBzdGFydF9wZm4sIDEpOwogCQlpZiAoIXB0ZSkgewogCQkJc3RhcnRfcGZuID0gYWxpZ25fdG9fbGV2ZWwoc3RhcnRfcGZuICsgMSwgMik7CkBAIC03OTQsNyArODAzLDggQEAKIAogCQlkb21haW5fZmx1c2hfY2FjaGUoZG9tYWluLCBmaXJzdF9wdGUsCiAJCQkJICAgKHZvaWQgKilwdGUgLSAodm9pZCAqKWZpcnN0X3B0ZSk7Ci0JfQorCisJfSB3aGlsZSAoc3RhcnRfcGZuICYmIHN0YXJ0X3BmbiA8PSBsYXN0X3Bmbik7CiB9CiAKIC8qIGZyZWUgcGFnZSB0YWJsZSBwYWdlcy4gbGFzdCBsZXZlbCBwdGUgc2hvdWxkIGFscmVhZHkgYmUgY2xlYXJlZCAqLwpAQCAtODEwLDYgKzgyMCw3IEBACiAKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgc3RhcnRfcGZuID4+IGFkZHJfd2lkdGgpOwogCUJVR19PTihhZGRyX3dpZHRoIDwgQklUU19QRVJfTE9ORyAmJiBsYXN0X3BmbiA+PiBhZGRyX3dpZHRoKTsKKwlCVUdfT04oc3RhcnRfcGZuID4gbGFzdF9wZm4pOwogCiAJLyogV2UgZG9uJ3QgbmVlZCBsb2NrIGhlcmU7IG5vYm9keSBlbHNlIHRvdWNoZXMgdGhlIGlvdmEgcmFuZ2UgKi8KIAlsZXZlbCA9IDI7CkBAIC04MjAsNyArODMxLDcgQEAKIAkJaWYgKHRtcCArIGxldmVsX3NpemUobGV2ZWwpIC0gMSA+IGxhc3RfcGZuKQogCQkJcmV0dXJuOwogCi0JCXdoaWxlICh0bXAgKyBsZXZlbF9zaXplKGxldmVsKSAtIDEgPD0gbGFzdF9wZm4pIHsKKwkJZG8gewogCQkJZmlyc3RfcHRlID0gcHRlID0gZG1hX3Bmbl9sZXZlbF9wdGUoZG9tYWluLCB0bXAsIGxldmVsKTsKIAkJCWlmICghcHRlKSB7CiAJCQkJdG1wID0gYWxpZ25fdG9fbGV2ZWwodG1wICsgMSwgbGV2ZWwgKyAxKTsKQEAgLTgzOSw3ICs4NTAsNyBAQAogCQkJZG9tYWluX2ZsdXNoX2NhY2hlKGRvbWFpbiwgZmlyc3RfcHRlLAogCQkJCQkgICAodm9pZCAqKXB0ZSAtICh2b2lkICopZmlyc3RfcHRlKTsKIAkJCQotCQl9CisJCX0gd2hpbGUgKHRtcCAmJiB0bXAgKyBsZXZlbF9zaXplKGxldmVsKSAtIDEgPD0gbGFzdF9wZm4pOwogCQlsZXZlbCsrOwogCX0KIAkvKiBmcmVlIHBnZCAqLwpAQCAtMTE1OCw2ICsxMTY5LDggQEAKIAlwcl9kZWJ1ZygiTnVtYmVyIG9mIERvbWFpbnMgc3VwcG9ydGQgPCVsZD5cbiIsIG5kb21haW5zKTsKIAlubG9uZ3MgPSBCSVRTX1RPX0xPTkdTKG5kb21haW5zKTsKIAorCXNwaW5fbG9ja19pbml0KCZpb21tdS0+bG9jayk7CisKIAkvKiBUQkQ6IHRoZXJlIG1pZ2h0IGJlIDY0SyBkb21haW5zLAogCSAqIGNvbnNpZGVyIG90aGVyIGFsbG9jYXRpb24gZm9yIGZ1dHVyZSBjaGlwCiAJICovCkBAIC0xMTcwLDEyICsxMTgzLDkgQEAKIAkJCUdGUF9LRVJORUwpOwogCWlmICghaW9tbXUtPmRvbWFpbnMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBbGxvY2F0aW5nIGRvbWFpbiBhcnJheSBmYWlsZWRcbiIpOwotCQlrZnJlZShpb21tdS0+ZG9tYWluX2lkcyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZpb21tdS0+bG9jayk7Ci0KIAkvKgogCSAqIGlmIENhY2hpbmcgbW9kZSBpcyBzZXQsIHRoZW4gaW52YWxpZCB0cmFuc2xhdGlvbnMgYXJlIHRhZ2dlZAogCSAqIHdpdGggZG9tYWluaWQgMC4gSGVuY2Ugd2UgbmVlZCB0byBwcmUtYWxsb2NhdGUgaXQuCkBAIC0xMTk1LDIyICsxMjA1LDI0IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWkgPSBmaW5kX2ZpcnN0X2JpdChpb21tdS0+ZG9tYWluX2lkcywgY2FwX25kb21zKGlvbW11LT5jYXApKTsKLQlmb3IgKDsgaSA8IGNhcF9uZG9tcyhpb21tdS0+Y2FwKTsgKSB7Ci0JCWRvbWFpbiA9IGlvbW11LT5kb21haW5zW2ldOwotCQljbGVhcl9iaXQoaSwgaW9tbXUtPmRvbWFpbl9pZHMpOworCWlmICgoaW9tbXUtPmRvbWFpbnMpICYmIChpb21tdS0+ZG9tYWluX2lkcykpIHsKKwkJaSA9IGZpbmRfZmlyc3RfYml0KGlvbW11LT5kb21haW5faWRzLCBjYXBfbmRvbXMoaW9tbXUtPmNhcCkpOworCQlmb3IgKDsgaSA8IGNhcF9uZG9tcyhpb21tdS0+Y2FwKTsgKSB7CisJCQlkb21haW4gPSBpb21tdS0+ZG9tYWluc1tpXTsKKwkJCWNsZWFyX2JpdChpLCBpb21tdS0+ZG9tYWluX2lkcyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOwotCQlpZiAoLS1kb21haW4tPmlvbW11X2NvdW50ID09IDApIHsKLQkJCWlmIChkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKQotCQkJCXZtX2RvbWFpbl9leGl0KGRvbWFpbik7Ci0JCQllbHNlCi0JCQkJZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmlvbW11X2xvY2ssIGZsYWdzKTsKKwkJCWlmICgtLWRvbWFpbi0+aW9tbXVfY291bnQgPT0gMCkgeworCQkJCWlmIChkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKQorCQkJCQl2bV9kb21haW5fZXhpdChkb21haW4pOworCQkJCWVsc2UKKwkJCQkJZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOworCisJCQlpID0gZmluZF9uZXh0X2JpdChpb21tdS0+ZG9tYWluX2lkcywKKwkJCQljYXBfbmRvbXMoaW9tbXUtPmNhcCksIGkrMSk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5pb21tdV9sb2NrLCBmbGFncyk7Ci0KLQkJaSA9IGZpbmRfbmV4dF9iaXQoaW9tbXUtPmRvbWFpbl9pZHMsCi0JCQljYXBfbmRvbXMoaW9tbXUtPmNhcCksIGkrMSk7CiAJfQogCiAJaWYgKGlvbW11LT5nY21kICYgRE1BX0dDTURfVEUpCkBAIC0xMzEwLDcgKzEzMjIsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlvdmFfZG9tYWluIHJlc2VydmVkX2lvdmFfbGlzdDsKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmVzZXJ2ZWRfYWxsb2Nfa2V5Owogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByZXNlcnZlZF9yYnRyZWVfa2V5OwogCiBzdGF0aWMgdm9pZCBkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKHZvaWQpCkBAIC0xMzIxLDggKzEzMzIsNiBAQAogCiAJaW5pdF9pb3ZhX2RvbWFpbigmcmVzZXJ2ZWRfaW92YV9saXN0LCBETUFfMzJCSVRfUEZOKTsKIAotCWxvY2tkZXBfc2V0X2NsYXNzKCZyZXNlcnZlZF9pb3ZhX2xpc3QuaW92YV9hbGxvY19sb2NrLAotCQkmcmVzZXJ2ZWRfYWxsb2Nfa2V5KTsKIAlsb2NrZGVwX3NldF9jbGFzcygmcmVzZXJ2ZWRfaW92YV9saXN0LmlvdmFfcmJ0cmVlX2xvY2ssCiAJCSZyZXNlcnZlZF9yYnRyZWVfa2V5KTsKIApAQCAtMTk1OSwxNCArMTk2OCwzNSBAQAogCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluOwogCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJJT01NVTogU2V0dGluZyBpZGVudGl0eSBtYXAgZm9yIGRldmljZSAlcyBbMHglTHggLSAweCVMeF1cbiIsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpLCBzdGFydCwgZW5kKTsKLQogCWRvbWFpbiA9IGdldF9kb21haW5fZm9yX2RldihwZGV2LCBERUZBVUxUX0RPTUFJTl9BRERSRVNTX1dJRFRIKTsKIAlpZiAoIWRvbWFpbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBGb3IgX2hhcmR3YXJlXyBwYXNzdGhyb3VnaCwgZG9uJ3QgYm90aGVyLiBCdXQgZm9yIHNvZnR3YXJlCisJICAgcGFzc3Rocm91Z2gsIHdlIGRvIGl0IGFueXdheSAtLSBpdCBtYXkgaW5kaWNhdGUgYSBtZW1vcnkKKwkgICByYW5nZSB3aGljaCBpcyByZXNlcnZlZCBpbiBFODIwLCBzbyB3aGljaCBkaWRuJ3QgZ2V0IHNldAorCSAgIHVwIHRvIHN0YXJ0IHdpdGggaW4gc2lfZG9tYWluICovCisJaWYgKGRvbWFpbiA9PSBzaV9kb21haW4gJiYgaHdfcGFzc190aHJvdWdoKSB7CisJCXByaW50aygiSWdub3JpbmcgaWRlbnRpdHkgbWFwIGZvciBIVyBwYXNzdGhyb3VnaCBkZXZpY2UgJXMgWzB4JUx4IC0gMHglTHhdXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldiksIHN0YXJ0LCBlbmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJJT01NVTogU2V0dGluZyBpZGVudGl0eSBtYXAgZm9yIGRldmljZSAlcyBbMHglTHggLSAweCVMeF1cbiIsCisJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBzdGFydCwgZW5kKTsKKwkKKwlpZiAoZW5kID4+IGFnYXdfdG9fd2lkdGgoZG9tYWluLT5hZ2F3KSkgeworCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBSTVJSIGV4Y2VlZHMgcGVybWl0dGVkIGFkZHJlc3Mgd2lkdGggKCVkIGJpdHMpXG4iCisJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJICAgICBhZ2F3X3RvX3dpZHRoKGRvbWFpbi0+YWdhdyksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVSU0lPTiksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCiAJcmV0ID0gaW9tbXVfZG9tYWluX2lkZW50aXR5X21hcChkb21haW4sIHN0YXJ0LCBlbmQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CkBAIC0yMDE3LDIzICsyMDQ3LDYgQEAKIH0KICNlbmRpZiAvKiAhQ09ORklHX0RNQVJfRkxQWV9XQSAqLwogCi0vKiBJbml0aWFsaXplIGVhY2ggY29udGV4dCBlbnRyeSBhcyBwYXNzIHRocm91Z2guKi8KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfY29udGV4dF9wYXNzX3Rocm91Z2godm9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7Ci0Jc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47Ci0JaW50IHJldDsKLQotCWZvcl9lYWNoX3BjaV9kZXYocGRldikgewotCQlkb21haW4gPSBnZXRfZG9tYWluX2Zvcl9kZXYocGRldiwgREVGQVVMVF9ET01BSU5fQUREUkVTU19XSURUSCk7Ci0JCXJldCA9IGRvbWFpbl9jb250ZXh0X21hcHBpbmcoZG9tYWluLCBwZGV2LAotCQkJCQkgICAgIENPTlRFWFRfVFRfUEFTU19USFJPVUdIKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1kX2RvbWFpbl9pbml0KHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCBpbnQgZ3Vlc3Rfd2lkdGgpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzaV9kb21haW5fd29ya19mbih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKQEAgLTIwNDgsNyArMjA2MSw3IEBACiAKIH0KIAotc3RhdGljIGludCBzaV9kb21haW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2lfZG9tYWluX2luaXQoaW50IGh3KQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwpAQCAtMjA3NSw2ICsyMDg4LDkgQEAKIAogCXNpX2RvbWFpbi0+ZmxhZ3MgPSBET01BSU5fRkxBR19TVEFUSUNfSURFTlRJVFk7CiAKKwlpZiAoaHcpCisJCXJldHVybiAwOworCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCXdvcmtfd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQsIHNpX2RvbWFpbl93b3JrX2ZuLCAmcmV0KTsKIAkJaWYgKHJldCkKQEAgLTIxMDEsMTUgKzIxMTcsMjMgQEAKIH0KIAogc3RhdGljIGludCBkb21haW5fYWRkX2Rldl9pbmZvKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLAotCQkJCSAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCisJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgaW50IHRyYW5zbGF0aW9uKQogewogCXN0cnVjdCBkZXZpY2VfZG9tYWluX2luZm8gKmluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCiAJaW5mbyA9IGFsbG9jX2RldmluZm9fbWVtKCk7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXJldCA9IGRvbWFpbl9jb250ZXh0X21hcHBpbmcoZG9tYWluLCBwZGV2LCB0cmFuc2xhdGlvbik7CisJaWYgKHJldCkgeworCQlmcmVlX2RldmluZm9fbWVtKGluZm8pOworCQlyZXR1cm4gcmV0OworCX0KKwogCWluZm8tPnNlZ21lbnQgPSBwY2lfZG9tYWluX25yKHBkZXYtPmJ1cyk7CiAJaW5mby0+YnVzID0gcGRldi0+YnVzLT5udW1iZXI7CiAJaW5mby0+ZGV2Zm4gPSBwZGV2LT5kZXZmbjsKQEAgLTIxNjYsMjcgKzIxOTAsMjUgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpb21tdV9wcmVwYXJlX3N0YXRpY19pZGVudGl0eV9tYXBwaW5nKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpb21tdV9wcmVwYXJlX3N0YXRpY19pZGVudGl0eV9tYXBwaW5nKGludCBodykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAJaW50IHJldDsKIAotCXJldCA9IHNpX2RvbWFpbl9pbml0KCk7CisJcmV0ID0gc2lfZG9tYWluX2luaXQoaHcpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CiAJCWlmIChpb21tdV9zaG91bGRfaWRlbnRpdHlfbWFwKHBkZXYsIDEpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJJT01NVTogaWRlbnRpdHkgbWFwcGluZyBmb3IgZGV2aWNlICVzXG4iLAotCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIklPTU1VOiAlcyBpZGVudGl0eSBtYXBwaW5nIGZvciBkZXZpY2UgJXNcbiIsCisJCQkgICAgICAgaHcgPyAiaGFyZHdhcmUiIDogInNvZnR3YXJlIiwgcGNpX25hbWUocGRldikpOwogCi0JCQlyZXQgPSBkb21haW5fY29udGV4dF9tYXBwaW5nKHNpX2RvbWFpbiwgcGRldiwKKwkJCXJldCA9IGRvbWFpbl9hZGRfZGV2X2luZm8oc2lfZG9tYWluLCBwZGV2LAorCQkJCQkJICAgICBodyA/IENPTlRFWFRfVFRfUEFTU19USFJPVUdIIDoKIAkJCQkJCSAgICAgQ09OVEVYVF9UVF9NVUxUSV9MRVZFTCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7Ci0JCQlyZXQgPSBkb21haW5fYWRkX2Rldl9pbmZvKHNpX2RvbWFpbiwgcGRldik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTIyMDAsMTQgKzIyMjIsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJaW50IGksIHJldDsKLQlpbnQgcGFzc190aHJvdWdoID0gMTsKLQotCS8qCi0JICogSW4gY2FzZSBwYXNzIHRocm91Z2ggY2FuIG5vdCBiZSBlbmFibGVkLCBpb21tdSB0cmllcyB0byB1c2UgaWRlbnRpdHkKLQkgKiBtYXBwaW5nLgotCSAqLwotCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAxOwogCiAJLyoKIAkgKiBmb3IgZWFjaCBkcmhkCkBAIC0yMjM1LDcgKzIyNDksNiBAQAogCWRlZmVycmVkX2ZsdXNoID0ga3phbGxvYyhnX251bV9vZl9pb21tdXMgKgogCQlzaXplb2Yoc3RydWN0IGRlZmVycmVkX2ZsdXNoX3RhYmxlcyksIEdGUF9LRVJORUwpOwogCWlmICghZGVmZXJyZWRfZmx1c2gpIHsKLQkJa2ZyZWUoZ19pb21tdXMpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTIyNjIsMTQgKzIyNzUsOCBAQAogCQkJZ290byBlcnJvcjsKIAkJfQogCQlpZiAoIWVjYXBfcGFzc190aHJvdWdoKGlvbW11LT5lY2FwKSkKLQkJCXBhc3NfdGhyb3VnaCA9IDA7CisJCQlod19wYXNzX3Rocm91Z2ggPSAwOwogCX0KLQlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQotCQlpZiAoIXBhc3NfdGhyb3VnaCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJQYXNzIFRocm91Z2ggaXMgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS5cbiIpOwotCQkJaW9tbXVfcGFzc190aHJvdWdoID0gMDsKLQkJfQogCiAJLyoKIAkgKiBTdGFydCBmcm9tIHRoZSBzYW5lIGlvbW11IGhhcmR3YXJlIHN0YXRlLgpAQCAtMjMyNCw2MyArMjMzMSw1NiBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBJZiBwYXNzIHRocm91Z2ggaXMgc2V0IGFuZCBlbmFibGVkLCBjb250ZXh0IGVudHJpZXMgb2YgYWxsIHBjaQotCSAqIGRldmljZXMgYXJlIGludGlhbGl6ZWQgYnkgcGFzcyB0aHJvdWdoIHRyYW5zbGF0aW9uIHR5cGUuCi0JICovCi0JaWYgKGlvbW11X3Bhc3NfdGhyb3VnaCkgewotCQlyZXQgPSBpbml0X2NvbnRleHRfcGFzc190aHJvdWdoKCk7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IFBhc3MgdGhyb3VnaCBpbml0IGZhaWxlZC5cbiIpOwotCQkJaW9tbXVfcGFzc190aHJvdWdoID0gMDsKLQkJfQotCX0KLQorCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAxOworI2lmZGVmIENPTkZJR19ETUFSX0JST0tFTl9HRlhfV0EKKwllbHNlCisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAyOworI2VuZGlmCiAJLyoKIAkgKiBJZiBwYXNzIHRocm91Z2ggaXMgbm90IHNldCBvciBub3QgZW5hYmxlZCwgc2V0dXAgY29udGV4dCBlbnRyaWVzIGZvcgogCSAqIGlkZW50aXR5IG1hcHBpbmdzIGZvciBybXJyLCBnZngsIGFuZCBpc2EgYW5kIG1heSBmYWxsIGJhY2sgdG8gc3RhdGljCiAJICogaWRlbnRpdHkgbWFwcGluZyBpZiBpb21tdV9pZGVudGl0eV9tYXBwaW5nIGlzIHNldC4KIAkgKi8KLQlpZiAoIWlvbW11X3Bhc3NfdGhyb3VnaCkgewotI2lmZGVmIENPTkZJR19ETUFSX0JST0tFTl9HRlhfV0EKLQkJaWYgKCFpb21tdV9pZGVudGl0eV9tYXBwaW5nKQotCQkJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyA9IDI7Ci0jZW5kaWYKLQkJaWYgKGlvbW11X2lkZW50aXR5X21hcHBpbmcpCi0JCQlpb21tdV9wcmVwYXJlX3N0YXRpY19pZGVudGl0eV9tYXBwaW5nKCk7Ci0JCS8qCi0JCSAqIEZvciBlYWNoIHJtcnIKLQkJICogICBmb3IgZWFjaCBkZXYgYXR0YWNoZWQgdG8gcm1ycgotCQkgKiAgIGRvCi0JCSAqICAgICBsb2NhdGUgZHJoZCBmb3IgZGV2LCBhbGxvYyBkb21haW4gZm9yIGRldgotCQkgKiAgICAgYWxsb2NhdGUgZnJlZSBkb21haW4KLQkJICogICAgIGFsbG9jYXRlIHBhZ2UgdGFibGUgZW50cmllcyBmb3Igcm1ycgotCQkgKiAgICAgaWYgY29udGV4dCBub3QgYWxsb2NhdGVkIGZvciBidXMKLQkJICogICAgICAgICAgIGFsbG9jYXRlIGFuZCBpbml0IGNvbnRleHQKLQkJICogICAgICAgICAgIHNldCBwcmVzZW50IGluIHJvb3QgdGFibGUgZm9yIHRoaXMgYnVzCi0JCSAqICAgICBpbml0IGNvbnRleHQgd2l0aCBkb21haW4sIHRyYW5zbGF0aW9uIGV0YwotCQkgKiAgICBlbmRmb3IKLQkJICogZW5kZm9yCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICJJT01NVTogU2V0dGluZyBSTVJSOlxuIik7Ci0JCWZvcl9lYWNoX3JtcnJfdW5pdHMocm1ycikgewotCQkJZm9yIChpID0gMDsgaSA8IHJtcnItPmRldmljZXNfY250OyBpKyspIHsKLQkJCQlwZGV2ID0gcm1yci0+ZGV2aWNlc1tpXTsKLQkJCQkvKgotCQkJCSAqIHNvbWUgQklPUyBsaXN0cyBub24tZXhpc3QgZGV2aWNlcyBpbiBETUFSCi0JCQkJICogdGFibGUuCi0JCQkJICovCi0JCQkJaWYgKCFwZGV2KQotCQkJCQljb250aW51ZTsKLQkJCQlyZXQgPSBpb21tdV9wcmVwYXJlX3JtcnJfZGV2KHJtcnIsIHBkZXYpOwotCQkJCWlmIChyZXQpCi0JCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAiSU9NTVU6IG1hcHBpbmcgcmVzZXJ2ZWQgcmVnaW9uIGZhaWxlZFxuIik7Ci0JCQl9CisJaWYgKGlvbW11X2lkZW50aXR5X21hcHBpbmcpIHsKKwkJcmV0ID0gaW9tbXVfcHJlcGFyZV9zdGF0aWNfaWRlbnRpdHlfbWFwcGluZyhod19wYXNzX3Rocm91Z2gpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9DUklUICJGYWlsZWQgdG8gc2V0dXAgSU9NTVUgcGFzcy10aHJvdWdoXG4iKTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KLQotCQlpb21tdV9wcmVwYXJlX2lzYSgpOwogCX0KKwkvKgorCSAqIEZvciBlYWNoIHJtcnIKKwkgKiAgIGZvciBlYWNoIGRldiBhdHRhY2hlZCB0byBybXJyCisJICogICBkbworCSAqICAgICBsb2NhdGUgZHJoZCBmb3IgZGV2LCBhbGxvYyBkb21haW4gZm9yIGRldgorCSAqICAgICBhbGxvY2F0ZSBmcmVlIGRvbWFpbgorCSAqICAgICBhbGxvY2F0ZSBwYWdlIHRhYmxlIGVudHJpZXMgZm9yIHJtcnIKKwkgKiAgICAgaWYgY29udGV4dCBub3QgYWxsb2NhdGVkIGZvciBidXMKKwkgKiAgICAgICAgICAgYWxsb2NhdGUgYW5kIGluaXQgY29udGV4dAorCSAqICAgICAgICAgICBzZXQgcHJlc2VudCBpbiByb290IHRhYmxlIGZvciB0aGlzIGJ1cworCSAqICAgICBpbml0IGNvbnRleHQgd2l0aCBkb21haW4sIHRyYW5zbGF0aW9uIGV0YworCSAqICAgIGVuZGZvcgorCSAqIGVuZGZvcgorCSAqLworCXByaW50ayhLRVJOX0lORk8gIklPTU1VOiBTZXR0aW5nIFJNUlI6XG4iKTsKKwlmb3JfZWFjaF9ybXJyX3VuaXRzKHJtcnIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJtcnItPmRldmljZXNfY250OyBpKyspIHsKKwkJCXBkZXYgPSBybXJyLT5kZXZpY2VzW2ldOworCQkJLyoKKwkJCSAqIHNvbWUgQklPUyBsaXN0cyBub24tZXhpc3QgZGV2aWNlcyBpbiBETUFSCisJCQkgKiB0YWJsZS4KKwkJCSAqLworCQkJaWYgKCFwZGV2KQorCQkJCWNvbnRpbnVlOworCQkJcmV0ID0gaW9tbXVfcHJlcGFyZV9ybXJyX2RldihybXJyLCBwZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJJT01NVTogbWFwcGluZyByZXNlcnZlZCByZWdpb24gZmFpbGVkXG4iKTsKKwkJfQorCX0KKworCWlvbW11X3ByZXBhcmVfaXNhKCk7CiAKIAkvKgogCSAqIGZvciBlYWNoIGRyaGQKQEAgLTI0MDQsMTEgKzI0MDQsMTIgQEAKIAogCQlpb21tdS0+Zmx1c2guZmx1c2hfY29udGV4dChpb21tdSwgMCwgMCwgMCwgRE1BX0NDTURfR0xPQkFMX0lOVkwpOwogCQlpb21tdS0+Zmx1c2guZmx1c2hfaW90bGIoaW9tbXUsIDAsIDAsIDAsIERNQV9UTEJfR0xPQkFMX0ZMVVNIKTsKLQkJaW9tbXVfZGlzYWJsZV9wcm90ZWN0X21lbV9yZWdpb25zKGlvbW11KTsKIAogCQlyZXQgPSBpb21tdV9lbmFibGVfdHJhbnNsYXRpb24oaW9tbXUpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcjsKKworCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoaW9tbXUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjQ1NSw4ICsyNDU2LDcgQEAKIAlyZXR1cm4gaW92YTsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWFyX2RvbWFpbiAqCi1nZXRfdmFsaWRfZG9tYWluX2Zvcl9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgc3RydWN0IGRtYXJfZG9tYWluICpfX2dldF92YWxpZF9kb21haW5fZm9yX2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbjsKIAlpbnQgcmV0OwpAQCAtMjQ4NCw2ICsyNDg0LDE4IEBACiAJcmV0dXJuIGRvbWFpbjsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hcl9kb21haW4gKmdldF92YWxpZF9kb21haW5fZm9yX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZG9tYWluX2luZm8gKmluZm87CisKKwkvKiBObyBsb2NrIGhlcmUsIGFzc3VtZXMgbm8gZG9tYWluIGV4aXQgaW4gbm9ybWFsIGNhc2UgKi8KKwlpbmZvID0gZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXU7CisJaWYgKGxpa2VseShpbmZvKSkKKwkJcmV0dXJuIGluZm8tPmRvbWFpbjsKKworCXJldHVybiBfX2dldF92YWxpZF9kb21haW5fZm9yX2RldihkZXYpOworfQorCiBzdGF0aWMgaW50IGlvbW11X2R1bW15KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXJldHVybiBwZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXUgPT0gRFVNTVlfREVWSUNFX0RPTUFJTl9JTkZPOwpAQCAtMjUyNiwxMCArMjUzOCwxMCBAQAogCQkgKi8KIAkJaWYgKGlvbW11X3Nob3VsZF9pZGVudGl0eV9tYXAocGRldiwgMCkpIHsKIAkJCWludCByZXQ7Ci0JCQlyZXQgPSBkb21haW5fYWRkX2Rldl9pbmZvKHNpX2RvbWFpbiwgcGRldik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiAwOwotCQkJcmV0ID0gZG9tYWluX2NvbnRleHRfbWFwcGluZyhzaV9kb21haW4sIHBkZXYsIENPTlRFWFRfVFRfTVVMVElfTEVWRUwpOworCQkJcmV0ID0gZG9tYWluX2FkZF9kZXZfaW5mbyhzaV9kb21haW4sIHBkZXYsCisJCQkJCQkgIGh3X3Bhc3NfdGhyb3VnaCA/CisJCQkJCQkgIENPTlRFWFRfVFRfUEFTU19USFJPVUdIIDoKKwkJCQkJCSAgQ09OVEVYVF9UVF9NVUxUSV9MRVZFTCk7CiAJCQlpZiAoIXJldCkgewogCQkJCXByaW50ayhLRVJOX0lORk8gIjY0Yml0ICVzIHVzZXMgaWRlbnRpdHkgbWFwcGluZ1xuIiwKIAkJCQkgICAgICAgcGNpX25hbWUocGRldikpOwpAQCAtMjYzOCwxMCArMjY1MCw5IEBACiAJCQl1bnNpZ25lZCBsb25nIG1hc2s7CiAJCQlzdHJ1Y3QgaW92YSAqaW92YSA9IGRlZmVycmVkX2ZsdXNoW2ldLmlvdmFbal07CiAKLQkJCW1hc2sgPSAoaW92YS0+cGZuX2hpIC0gaW92YS0+cGZuX2xvICsgMSkgPDwgUEFHRV9TSElGVDsKLQkJCW1hc2sgPSBpbG9nMihtYXNrID4+IFZURF9QQUdFX1NISUZUKTsKKwkJCW1hc2sgPSBpbG9nMihtbV90b19kbWFfcGZuKGlvdmEtPnBmbl9oaSAtIGlvdmEtPnBmbl9sbyArIDEpKTsKIAkJCWlvbW11X2ZsdXNoX2Rldl9pb3RsYihkZWZlcnJlZF9mbHVzaFtpXS5kb21haW5bal0sCi0JCQkJCWlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZULCBtYXNrKTsKKwkJCQkJKHVpbnQ2NF90KWlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZULCBtYXNrKTsKIAkJCV9fZnJlZV9pb3ZhKCZkZWZlcnJlZF9mbHVzaFtpXS5kb21haW5bal0tPmlvdmFkLCBpb3ZhKTsKIAkJfQogCQlkZWZlcnJlZF9mbHVzaFtpXS5uZXh0ID0gMDsKQEAgLTI3MzQsMTIgKzI3NDUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwgc2l6ZV90IHNpemUsCi0JCQkgICAgICAgaW50IGRpcikKLXsKLQlpbnRlbF91bm1hcF9wYWdlKGRldiwgZGV2X2FkZHIsIHNpemUsIGRpciwgTlVMTCk7Ci19Ci0KIHN0YXRpYyB2b2lkICppbnRlbF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCiAJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKIHsKQEAgLTI3NzIsNyArMjc3Nyw3IEBACiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAKLQlpbnRlbF91bm1hcF9zaW5nbGUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwlpbnRlbF91bm1hcF9wYWdlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCwgTlVMTCk7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgb3JkZXIpOwogfQogCkBAIC0yODA4LDExICsyODEzLDE4IEBACiAJLyogZnJlZSBwYWdlIHRhYmxlcyAqLwogCWRtYV9wdGVfZnJlZV9wYWdldGFibGUoZG9tYWluLCBzdGFydF9wZm4sIGxhc3RfcGZuKTsKIAotCWlvbW11X2ZsdXNoX2lvdGxiX3BzaShpb21tdSwgZG9tYWluLT5pZCwgc3RhcnRfcGZuLAotCQkJICAgICAgKGxhc3RfcGZuIC0gc3RhcnRfcGZuICsgMSkpOwotCi0JLyogZnJlZSBpb3ZhICovCi0JX19mcmVlX2lvdmEoJmRvbWFpbi0+aW92YWQsIGlvdmEpOworCWlmIChpbnRlbF9pb21tdV9zdHJpY3QpIHsKKwkJaW9tbXVfZmx1c2hfaW90bGJfcHNpKGlvbW11LCBkb21haW4tPmlkLCBzdGFydF9wZm4sCisJCQkJICAgICAgbGFzdF9wZm4gLSBzdGFydF9wZm4gKyAxKTsKKwkJLyogZnJlZSBpb3ZhICovCisJCV9fZnJlZV9pb3ZhKCZkb21haW4tPmlvdmFkLCBpb3ZhKTsKKwl9IGVsc2UgeworCQlhZGRfdW5tYXAoZG9tYWluLCBpb3ZhKTsKKwkJLyoKKwkJICogcXVldWUgdXAgdGhlIHJlbGVhc2Ugb2YgdGhlIHVubWFwIHRvIHNhdmUgdGhlIDEvNnRoIG9mIHRoZQorCQkgKiBjcHUgdXNlZCB1cCBieSB0aGUgaW90bGIgZmx1c2ggb3BlcmF0aW9uLi4uCisJCSAqLworCX0KIH0KIAogc3RhdGljIGludCBpbnRlbF9ub250cmFuc2xhdGVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmhkZGV2LApAQCAtMzA1Niw4ICszMDY4LDggQEAKIAkJCQkJICAgRE1BX0NDTURfR0xPQkFMX0lOVkwpOwogCQlpb21tdS0+Zmx1c2guZmx1c2hfaW90bGIoaW9tbXUsIDAsIDAsIDAsCiAJCQkJCSBETUFfVExCX0dMT0JBTF9GTFVTSCk7Ci0JCWlvbW11X2Rpc2FibGVfcHJvdGVjdF9tZW1fcmVnaW9ucyhpb21tdSk7CiAJCWlvbW11X2VuYWJsZV90cmFuc2xhdGlvbihpb21tdSk7CisJCWlvbW11X2Rpc2FibGVfcHJvdGVjdF9tZW1fcmVnaW9ucyhpb21tdSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMjA1LDcgKzMyMTcsNyBAQAogCSAqIENoZWNrIHRoZSBuZWVkIGZvciBETUEtcmVtYXBwaW5nIGluaXRpYWxpemF0aW9uIG5vdy4KIAkgKiBBYm92ZSBpbml0aWFsaXphdGlvbiB3aWxsIGFsc28gYmUgdXNlZCBieSBJbnRlcnJ1cHQtcmVtYXBwaW5nLgogCSAqLwotCWlmIChub19pb21tdSB8fCAoc3dpb3RsYiAmJiAhaW9tbXVfcGFzc190aHJvdWdoKSB8fCBkbWFyX2Rpc2FibGVkKQorCWlmIChub19pb21tdSB8fCBzd2lvdGxiIHx8IGRtYXJfZGlzYWJsZWQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaW9tbXVfaW5pdF9tZW1wb29sKCk7CkBAIC0zMjI3LDE0ICszMjM5LDcgQEAKIAogCWluaXRfdGltZXIoJnVubWFwX3RpbWVyKTsKIAlmb3JjZV9pb21tdSA9IDE7Ci0KLQlpZiAoIWlvbW11X3Bhc3NfdGhyb3VnaCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTXVsdGktbGV2ZWwgcGFnZS10YWJsZSB0cmFuc2xhdGlvbiBmb3IgRE1BUi5cbiIpOwotCQlkbWFfb3BzID0gJmludGVsX2RtYV9vcHM7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJETUFSOiBQYXNzIHRocm91Z2ggdHJhbnNsYXRpb24gZm9yIERNQVIuXG4iKTsKKwlkbWFfb3BzID0gJmludGVsX2RtYV9vcHM7CiAKIAlpbml0X2lvbW11X3N5c2ZzKCk7CiAKQEAgLTM1MTcsNyArMzUyMiw2IEBACiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlpbnQgYWRkcl93aWR0aDsKIAl1NjQgZW5kOwotCWludCByZXQ7CiAKIAkvKiBub3JtYWxseSBwZGV2IGlzIG5vdCBtYXBwZWQgKi8KIAlpZiAodW5saWtlbHkoZG9tYWluX2NvbnRleHRfbWFwcGVkKHBkZXYpKSkgewpAQCAtMzU0OSwxMiArMzU1Myw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldCA9IGRvbWFpbl9hZGRfZGV2X2luZm8oZG1hcl9kb21haW4sIHBkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBkb21haW5fY29udGV4dF9tYXBwaW5nKGRtYXJfZG9tYWluLCBwZGV2LCBDT05URVhUX1RUX01VTFRJX0xFVkVMKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBkb21haW5fYWRkX2Rldl9pbmZvKGRtYXJfZG9tYWluLCBwZGV2LCBDT05URVhUX1RUX01VTFRJX0xFVkVMKTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfaW9tbXVfZGV0YWNoX2RldmljZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA0NDgwMzY0Li4wZWQ3OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTYwMyw2ICs2MDMsOSBAQAogCWlmIChkaXNhYmxlX2ludHJlbWFwKQogCQlyZXR1cm4gMDsKIAorCWlmICghZG1hcl9pcl9zdXBwb3J0KCkpCisJCXJldHVybiAwOworCiAJZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKIAkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGRyaGQtPmlvbW11OwogCkBAIC02MTgsNiArNjIxLDExIEBACiAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOwogCWludCBzZXR1cCA9IDA7CiAKKwlpZiAocGFyc2VfaW9hcGljc191bmRlcl9pcigpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm90IGVuYWJsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7CiAJCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBkcmhkLT5pb21tdTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92YS5jIGIvZHJpdmVycy9wY2kvaW92YS5jCmluZGV4IDQ2ZGQ0NDAuLjc5MTQ5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdmEuYworKysgYi9kcml2ZXJzL3BjaS9pb3ZhLmMKQEAgLTIyLDcgKzIyLDYgQEAKIHZvaWQKIGluaXRfaW92YV9kb21haW4oc3RydWN0IGlvdmFfZG9tYWluICppb3ZhZCwgdW5zaWduZWQgbG9uZyBwZm5fMzJiaXQpCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpb3ZhZC0+aW92YV9yYnRyZWVfbG9jayk7CiAJaW92YWQtPnJicm9vdCA9IFJCX1JPT1Q7CiAJaW92YWQtPmNhY2hlZDMyX25vZGUgPSBOVUxMOwpAQCAtMjA1LDcgKzIwNCw2IEBACiAJdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4sCiAJYm9vbCBzaXplX2FsaWduZWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaW92YSAqbmV3X2lvdmE7CiAJaW50IHJldDsKIApAQCAtMjE5LDExICsyMTcsOSBAQAogCWlmIChzaXplX2FsaWduZWQpCiAJCXNpemUgPSBfX3JvdW5kdXBfcG93X29mX3R3byhzaXplKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb3ZhZC0+aW92YV9hbGxvY19sb2NrLCBmbGFncyk7CiAJcmV0ID0gX19hbGxvY19hbmRfaW5zZXJ0X2lvdmFfcmFuZ2UoaW92YWQsIHNpemUsIGxpbWl0X3BmbiwKIAkJCW5ld19pb3ZhLCBzaXplX2FsaWduZWQpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW92YWQtPmlvdmFfYWxsb2NfbG9jaywgZmxhZ3MpOwogCWlmIChyZXQpIHsKIAkJZnJlZV9pb3ZhX21lbShuZXdfaW92YSk7CiAJCXJldHVybiBOVUxMOwpAQCAtMzgxLDggKzM3Nyw3IEBACiAJc3RydWN0IGlvdmEgKmlvdmE7CiAJdW5zaWduZWQgaW50IG92ZXJsYXAgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJmlvdmFkLT5pb3ZhX3JidHJlZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW92YWQtPmlvdmFfcmJ0cmVlX2xvY2ssIGZsYWdzKTsKIAlmb3IgKG5vZGUgPSByYl9maXJzdCgmaW92YWQtPnJicm9vdCk7IG5vZGU7IG5vZGUgPSByYl9uZXh0KG5vZGUpKSB7CiAJCWlmIChfX2lzX3JhbmdlX292ZXJsYXAobm9kZSwgcGZuX2xvLCBwZm5faGkpKSB7CiAJCQlpb3ZhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb3ZhLCBub2RlKTsKQEAgLTQwMiw4ICszOTcsNyBAQAogCWlvdmEgPSBfX2luc2VydF9uZXdfcmFuZ2UoaW92YWQsIHBmbl9sbywgcGZuX2hpKTsKIGZpbmlzaDoKIAotCXNwaW5fdW5sb2NrKCZpb3ZhZC0+aW92YV9yYnRyZWVfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW92YWQtPmlvdmFfYWxsb2NfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvdmFkLT5pb3ZhX3JidHJlZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGlvdmE7CiB9CiAKQEAgLTQyMCw4ICs0MTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnJvbS0+aW92YV9hbGxvY19sb2NrLCBmbGFncyk7Ci0Jc3Bpbl9sb2NrKCZmcm9tLT5pb3ZhX3JidHJlZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJvbS0+aW92YV9yYnRyZWVfbG9jaywgZmxhZ3MpOwogCWZvciAobm9kZSA9IHJiX2ZpcnN0KCZmcm9tLT5yYnJvb3QpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkgewogCQlzdHJ1Y3QgaW92YSAqaW92YSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaW92YSwgbm9kZSk7CiAJCXN0cnVjdCBpb3ZhICpuZXdfaW92YTsKQEAgLTQzMCw2ICs0MjMsNSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJSZXNlcnZlIGlvdmEgcmFuZ2UgJWx4QCVseCBmYWlsZWRcbiIsCiAJCQkJaW92YS0+cGZuX2xvLCBpb3ZhLT5wZm5fbG8pOwogCX0KLQlzcGluX3VubG9jaygmZnJvbS0+aW92YV9yYnRyZWVfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbS0+aW92YV9hbGxvY19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbS0+aW92YV9yYnRyZWVfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCA3YjQyNGUwLi4zMmM0NDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCkBAIC0xMDUsMzcgKzEwNiw0MCBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3BjY2FyZCA9IE5VTEw7CiAKLXN0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2soc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgdm9pZCAqZCkKK3N0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2soc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgdm9pZCAqX20pCiB7Ci0JY2hhciAqKnAgPSBkOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IF9tOwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IGNvbnRhaW5lcl9vZihkcml2ZXIsCiAJCQkJCQkgICBzdHJ1Y3QgcGNtY2lhX2RyaXZlciwgZHJ2KTsKIAotCSpwICs9IHNwcmludGYoKnAsICIlLTI0LjI0cyAxICVkXG4iLCBwX2Rydi0+ZHJ2Lm5hbWUsCisJc2VxX3ByaW50ZihtLCAiJS0yNC4yNHMgMSAlZFxuIiwgcF9kcnYtPmRydi5uYW1lLAogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJCSAgICAgIChwX2Rydi0+b3duZXIpID8gbW9kdWxlX3JlZmNvdW50KHBfZHJ2LT5vd25lcikgOiAxCiAjZWxzZQogCQkgICAgICAxCiAjZW5kaWYKIAkpOwotCWQgPSAodm9pZCAqKSBwOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnMoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywKLQkJCSAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcGNjYXJkX2RyaXZlcnNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyICpwID0gYnVmOwotCWludCByYzsKLQotCXJjID0gYnVzX2Zvcl9lYWNoX2RydigmcGNtY2lhX2J1c190eXBlLCBOVUxMLAotCQkJICAgICAgKHZvaWQgKikgJnAsIHByb2NfcmVhZF9kcml2ZXJzX2NhbGxiYWNrKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlyZXR1cm4gKHAgLSBidWYpOworCXJldHVybiBidXNfZm9yX2VhY2hfZHJ2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsCisJCQkJbSwgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2spOwogfQorCitzdGF0aWMgaW50IHBjY2FyZF9kcml2ZXJzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcGNjYXJkX2RyaXZlcnNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGNjYXJkX2RyaXZlcnNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwY2NhcmRfZHJpdmVyc19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYKIAogCkBAIC0xMDExLDcgKzEwMTUsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcHJvY19wY2NhcmQgPSBwcm9jX21rZGlyKCJidXMvcGNjYXJkIiwgTlVMTCk7CiAJaWYgKHByb2NfcGNjYXJkKQotCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJkcml2ZXJzIiwwLHByb2NfcGNjYXJkLHByb2NfcmVhZF9kcml2ZXJzLE5VTEwpOworCQlwcm9jX2NyZWF0ZSgiZHJpdmVycyIsIDAsIHByb2NfcGNjYXJkLCAmcGNjYXJkX2RyaXZlcnNfcHJvY19mb3BzKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfam9ybmFkYTcyMC5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2pvcm5hZGE3MjAuYwppbmRleCA1N2NhMDg1Li43ZWVkYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfam9ybmFkYTcyMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9qb3JuYWRhNzIwLmMKQEAgLTE2LDg5ICsxNiwxMDMgQEAKIAogI2luY2x1ZGUgInNhMTExMV9nZW5lcmljLmgiCiAKLSNkZWZpbmUgU09DS0VUMF9QT1dFUiAgIEdQSU9fR1BJTzAKLSNkZWZpbmUgU09DS0VUMF8zViAgICAgIEdQSU9fR1BJTzIKLSNkZWZpbmUgU09DS0VUMV9QT1dFUiAgIChHUElPX0dQSU8xIHwgR1BJT19HUElPMykKLSN3YXJuaW5nICoqKiBEb2VzIFNPQ0tFVDFfM1YgYWN0dWFsbHkgZG8gYW55dGhpbmc/CisvKiBEb2VzIFNPQ0tFVDFfM1YgYWN0dWFsbHkgZG8gYW55dGhpbmc/ICovCisjZGVmaW5lIFNPQ0tFVDBfUE9XRVIJR1BJT19HUElPMAorI2RlZmluZSBTT0NLRVQwXzNWCUdQSU9fR1BJTzIKKyNkZWZpbmUgU09DS0VUMV9QT1dFUgkoR1BJT19HUElPMSB8IEdQSU9fR1BJTzMpCiAjZGVmaW5lIFNPQ0tFVDFfM1YJR1BJT19HUElPMwogCiBzdGF0aWMgaW50IGpvcm5hZGE3MjBfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0gIC8qCi0gICAqIFdoYXQgaXMgYWxsIHRoaXMgY3JhcCBmb3I/Ci0gICAqLwotICBHUkVSIHw9IDB4MDAwMDAwMDI7Ci0gIC8qIFNldCBHUElPX0E8MzoxPiB0byBiZSBvdXRwdXRzIGZvciBQQ01DSUEvQ0YgcG93ZXIgY29udHJvbGxlcjogKi8KLSAgc2ExMTExX3NldF9pb19kaXIoU0ExMTExX0RFVihza3QtPmRldiksIEdQSU9fQTB8R1BJT19BMXxHUElPX0EyfEdQSU9fQTMsIDAsIDApOwotICBzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBHUElPX0EwfEdQSU9fQTF8R1BJT19BMnxHUElPX0EzLCAwKTsKLSAgc2ExMTExX3NldF9zbGVlcF9pbyhTQTExMTFfREVWKHNrdC0+ZGV2KSwgR1BJT19BMHxHUElPX0ExfEdQSU9fQTJ8R1BJT19BMywgMCk7CisJdW5zaWduZWQgaW50IHBpbiA9IEdQSU9fQTAgfCBHUElPX0ExIHwgR1BJT19BMiB8IEdQSU9fQTM7CiAKLSAgcmV0dXJuIHNhMTExMV9wY21jaWFfaHdfaW5pdChza3QpOworCS8qCisJKiBXaGF0IGlzIGFsbCB0aGlzIGNyYXAgZm9yPworCSovCisJR1JFUiB8PSAweDAwMDAwMDAyOworCS8qIFNldCBHUElPX0E8MzoxPiB0byBiZSBvdXRwdXRzIGZvciBQQ01DSUEvQ0YgcG93ZXIgY29udHJvbGxlcjogKi8KKwlzYTExMTFfc2V0X2lvX2RpcihTQTExMTFfREVWKHNrdC0+ZGV2KSwgcGluLCAwLCAwKTsKKwlzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwaW4sIDApOworCXNhMTExMV9zZXRfc2xlZXBfaW8oU0ExMTExX0RFVihza3QtPmRldiksIHBpbiwgMCk7CisKKwlyZXR1cm4gc2ExMTExX3BjbWNpYV9od19pbml0KHNrdCk7CiB9CiAKIHN0YXRpYyBpbnQKIGpvcm5hZGE3MjBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsIGNvbnN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKIHsKLSAgdW5zaWduZWQgaW50IHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0OwotICBpbnQgcmV0OworCXVuc2lnbmVkIGludCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldDsKKwlpbnQgcmV0OwogCi1wcmludGsoIiVzKCk6IGNvbmZpZyBzb2NrZXQgJWQgdmNjICVkIHZwcCAlZFxuIiwgX19mdW5jX18sCi0Jc2t0LT5uciwgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogY29uZmlnIHNvY2tldCAlZCB2Y2MgJWQgdnBwICVkXG4iLCBfX2Z1bmNfXywKKwkJc2t0LT5uciwgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCk7CiAKLSAgc3dpdGNoIChza3QtPm5yKSB7Ci0gIGNhc2UgMDoKLSAgICBwYV9kd3JfbWFzayA9IFNPQ0tFVDBfUE9XRVIgfCBTT0NLRVQwXzNWOworCXN3aXRjaCAoc2t0LT5ucikgeworCWNhc2UgMDoKKwkJcGFfZHdyX21hc2sgPSBTT0NLRVQwX1BPV0VSIHwgU09DS0VUMF8zVjsKIAotICAgIHN3aXRjaCAoc3RhdGUtPlZjYykgewotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSAwOglwYV9kd3Jfc2V0ID0gMDsJCQkJCWJyZWFrOwotICAgIGNhc2UgMzM6CXBhX2R3cl9zZXQgPSBTT0NLRVQwX1BPV0VSIHwgU09DS0VUMF8zVjsJYnJlYWs7Ci0gICAgY2FzZSA1MDoJcGFfZHdyX3NldCA9IFNPQ0tFVDBfUE9XRVI7CQkJYnJlYWs7Ci0gICAgfQotICAgIGJyZWFrOworCQlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSAgMDoKKwkJCXBhX2R3cl9zZXQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMzM6CisJCQlwYV9kd3Jfc2V0ID0gU09DS0VUMF9QT1dFUiB8IFNPQ0tFVDBfM1Y7CisJCQlicmVhazsKKwkJY2FzZSA1MDoKKwkJCXBhX2R3cl9zZXQgPSBTT0NLRVQwX1BPV0VSOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAKLSAgY2FzZSAxOgotICAgIHBhX2R3cl9tYXNrID0gU09DS0VUMV9QT1dFUjsKKwljYXNlIDE6CisJCXBhX2R3cl9tYXNrID0gU09DS0VUMV9QT1dFUjsKIAotICAgIHN3aXRjaCAoc3RhdGUtPlZjYykgewotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSAwOglwYV9kd3Jfc2V0ID0gMDsJCQkJCWJyZWFrOwotICAgIGNhc2UgMzM6CXBhX2R3cl9zZXQgPSBTT0NLRVQxX1BPV0VSOwkJCWJyZWFrOwotICAgIGNhc2UgNTA6CXBhX2R3cl9zZXQgPSBTT0NLRVQxX1BPV0VSOwkJCWJyZWFrOwotICAgIH0KLSAgICBicmVhazsKKwkJc3dpdGNoIChzdGF0ZS0+VmNjKSB7CisJCWRlZmF1bHQ6CisJCWNhc2UgMDoKKwkJCXBhX2R3cl9zZXQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMzM6CisJCQlwYV9kd3Jfc2V0ID0gU09DS0VUMV9QT1dFUjsKKwkJCWJyZWFrOworCQljYXNlIDUwOgorCQkJcGFfZHdyX3NldCA9IFNPQ0tFVDFfUE9XRVI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAotICBkZWZhdWx0OgotICAgIHJldHVybiAtMTsKLSAgfQorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CiAKLSAgaWYgKHN0YXRlLT5WcHAgIT0gc3RhdGUtPlZjYyAmJiBzdGF0ZS0+VnBwICE9IDApIHsKLSAgICBwcmludGsoS0VSTl9FUlIgIiVzKCk6IHNsb3QgY2Fubm90IHN1cHBvcnQgVlBQICV1XG4iLAotCSAgIF9fZnVuY19fLCBzdGF0ZS0+VnBwKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KKwlpZiAoc3RhdGUtPlZwcCAhPSBzdGF0ZS0+VmNjICYmIHN0YXRlLT5WcHAgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IHNsb3QgY2Fubm90IHN1cHBvcnQgVlBQICV1XG4iLAorCQkJX19mdW5jX18sIHN0YXRlLT5WcHApOworCQlyZXR1cm4gLUVQRVJNOworCX0KIAotICByZXQgPSBzYTExMTFfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc2t0LCBzdGF0ZSk7Ci0gIGlmIChyZXQgPT0gMCkgewotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcmV0ID0gc2ExMTExX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHNrdCwgc3RhdGUpOworCWlmIChyZXQgPT0gMCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotICAgIHNhMTExMV9zZXRfaW8oU0ExMTExX0RFVihza3QtPmRldiksIHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0KTsKLSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0gIH0KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CiAKLSAgcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgam9ybmFkYTcyMF9wY21jaWFfb3BzID0gewotICAub3duZXIJCT0gVEhJU19NT0RVTEUsCi0gIC5od19pbml0CQk9IGpvcm5hZGE3MjBfcGNtY2lhX2h3X2luaXQsCi0gIC5od19zaHV0ZG93bgkJPSBzYTExMTFfcGNtY2lhX2h3X3NodXRkb3duLAotICAuc29ja2V0X3N0YXRlCQk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N0YXRlLAotICAuY29uZmlndXJlX3NvY2tldAk9IGpvcm5hZGE3MjBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuaHdfaW5pdAkJPSBqb3JuYWRhNzIwX3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93bgkJPSBzYTExMTFfcGNtY2lhX2h3X3NodXRkb3duLAorCS5zb2NrZXRfc3RhdGUJCT0gc2ExMTExX3BjbWNpYV9zb2NrZXRfc3RhdGUsCisJLmNvbmZpZ3VyZV9zb2NrZXQJPSBqb3JuYWRhNzIwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAogCi0gIC5zb2NrZXRfaW5pdAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9pbml0LAotICAuc29ja2V0X3N1c3BlbmQJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAorCS5zb2NrZXRfaW5pdAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogfTsKIAogaW50IF9fZGV2aW5pdCBwY21jaWFfam9ybmFkYTcyMF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggNzM3ZmU1ZC4uYjQ1OWU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogLyoKICAqIENsb3NlIGl0IGRvd24gLSByZWxlYXNlIG91ciByZXNvdXJjZXMgYW5kIGdvIGhvbWUuLgogICovCi1zdGF0aWMgdm9pZCB5ZW50YV9jbG9zZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHllbnRhX2Nsb3NlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHllbnRhX3NvY2tldCAqc29jayA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCA3N2M2MDk3Li41NWNhMzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTk5LDYgKzk5LDcgQEAKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIElOUFVUCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTIHx8IExFRFNfQ0xBU1M9bgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGxhcHRvcHMgYnVpbHQgYnkgRnVqaXRzdToKIApAQCAtMzk2LDYgKzM5NywxNSBAQAogCSAgTk9URTogVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIHNvb24sCiAJICB1c2UgYXN1cy1sYXB0b3AgaW5zdGVhZC4KIAorY29uZmlnIFRPUFNUQVJfTEFQVE9QCisJdHJpc3RhdGUgIlRvcHN0YXIgTGFwdG9wIEV4dHJhcyIKKwlkZXBlbmRzIG9uIEFDUEkKKwlkZXBlbmRzIG9uIElOUFVUCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBob3RrZXlzIGZvdW5kIG9uIFRvcHN0YXIgbGFwdG9wcy4KKworCSAgSWYgeW91IGhhdmUgYSBUb3BzdGFyIGxhcHRvcCwgc2F5IFkgb3IgTSBoZXJlLgorCiBjb25maWcgQUNQSV9UT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIEV4dHJhcyIKIAlkZXBlbmRzIG9uIEFDUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKaW5kZXggNjQxYjhiZi4uZDFjMTYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKQEAgLTE5LDQgKzE5LDUgQEAKIG9iai0kKENPTkZJR19JTlRFTF9NRU5MT1cpCSs9IGludGVsX21lbmxvdy5vCiBvYmotJChDT05GSUdfQUNQSV9XTUkpCQkrPSB3bWkubwogb2JqLSQoQ09ORklHX0FDUElfQVNVUykJCSs9IGFzdXNfYWNwaS5vCitvYmotJChDT05GSUdfVE9QU1RBUl9MQVBUT1ApCSs9IHRvcHN0YXItbGFwdG9wLm8KIG9iai0kKENPTkZJR19BQ1BJX1RPU0hJQkEpCSs9IHRvc2hpYmFfYWNwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKaW5kZXggYmRmZWUxNy4uMGE4ZjczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwpAQCAtNTIsNyArNTIsNyBAQAogICovCiAjdW5kZWYgU1RBUlRfSU5fS0VSTkVMX01PREUKIAotI2RlZmluZSBEUlZfVkVSICIwLjUuMTMiCisjZGVmaW5lIERSVl9WRVIgIjAuNS4xNyIKIAogLyoKICAqIEFjY29yZGluZyB0byB0aGUgQXRvbSBOMjcwIGRhdGFzaGVldCwKQEAgLTkwLDYgKzkwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFuc3RhdGUgPSBBQ0VSSERGX0ZBTl9BVVRPOwogc3RhdGljIGNoYXIgZm9yY2VfYmlvc1sxNl07CitzdGF0aWMgY2hhciBmb3JjZV9wcm9kdWN0WzE2XTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHJldl9pbnRlcnZhbDsKIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aHpfZGV2Owogc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNsX2RldjsKQEAgLTEwNywzNCArMTA4LDYyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJFbmFibGUgdmVyYm9zZSBkbWVzZyBvdXRwdXQiKTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcoZm9yY2VfYmlvcywgZm9yY2VfYmlvcywgMTYsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9iaW9zLCAiRm9yY2UgQklPUyB2ZXJzaW9uIGFuZCBvbWl0IEJJT1MgY2hlY2siKTsKK21vZHVsZV9wYXJhbV9zdHJpbmcoZm9yY2VfcHJvZHVjdCwgZm9yY2VfcHJvZHVjdCwgMTYsIDApOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9wcm9kdWN0LCAiRm9yY2UgQklPUyBwcm9kdWN0IGFuZCBvbWl0IEJJT1MgY2hlY2siKTsKKworLyoKKyAqIGNtZF9vZmY6IHRvIHN3aXRjaCB0aGUgZmFuIGNvbXBsZXRlbHkgb2ZmIC8gdG8gY2hlY2sgaWYgdGhlIGZhbiBpcyBvZmYKKyAqCWNtZF9hdXRvOiB0byBzZXQgdGhlIEJJT1MgaW4gY29udHJvbCBvZiB0aGUgZmFuLiBUaGUgQklPUyByZWd1bGF0ZXMgdGhlbgorICoJCXRoZSBmYW4gc3BlZWQgZGVwZW5kaW5nIG9uIHRoZSB0ZW1wZXJhdHVyZQorICovCitzdHJ1Y3QgZmFuY21kIHsKKwl1OCBjbWRfb2ZmOworCXU4IGNtZF9hdXRvOworfTsKIAogLyogQklPUyBzZXR0aW5ncyAqLwogc3RydWN0IGJpb3Nfc2V0dGluZ3NfdCB7CiAJY29uc3QgY2hhciAqdmVuZG9yOworCWNvbnN0IGNoYXIgKnByb2R1Y3Q7CiAJY29uc3QgY2hhciAqdmVyc2lvbjsKIAl1bnNpZ25lZCBjaGFyIGZhbnJlZzsKIAl1bnNpZ25lZCBjaGFyIHRlbXByZWc7Ci0JdW5zaWduZWQgY2hhciBmYW5jbWRbMl07IC8qIGZhbiBvZmYgYW5kIGF1dG8gY29tbWFuZHMgKi8KKwlzdHJ1Y3QgZmFuY21kIGNtZDsKIH07CiAKIC8qIFJlZ2lzdGVyIGFkZHJlc3NlcyBhbmQgdmFsdWVzIGZvciBkaWZmZXJlbnQgQklPUyB2ZXJzaW9ucyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBiaW9zX3NldHRpbmdzX3QgYmlvc190YmxbXSA9IHsKLQl7IkFjZXIiLCAidjAuMzEwOSIsIDB4NTUsIDB4NTgsIHsweDFmLCAweDAwfSB9LAotCXsiQWNlciIsICJ2MC4zMTE0IiwgMHg1NSwgMHg1OCwgezB4MWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAidjAuMzMwNCIsIDB4NTUsIDB4NTgsIHsweGFmLCAweDAwfSB9LAotCXsiQWNlciIsICJ2MC4zMzA1IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKLQl7IkFjZXIiLCAidjAuMzMwOSIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDAwfSB9LAotCXsiQWNlciIsICJ2MC4zMzEwIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCi0JeyJHYXRld2F5IiwgInYwLjMxMDMiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKLQl7IlBhY2thcmQgQmVsbCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCi0JeyIiLCAiIiwgMCwgMCwgezAsIDB9IH0KKwkvKiBBT0ExMTAgKi8KKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMDkiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwkvKiBBT0ExNTAgKi8KKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwkvKiBzcGVjaWFsIEJJT1MgLyBvdGhlciAqLworCXsiR2F0ZXdheSIsICJBT0ExMTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDAwfSB9LAorCXsiR2F0ZXdheSIsICJBT0ExNTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPQTE1MCIsICJ2MC4zMTA0IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiQU9BMTEwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJBT0ExNTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDAwfSB9LAorCS8qIHBld3Bldy10ZXJtaW5hdG9yICovCisJeyIiLCAiIiwgIiIsIDAsIDAsIHswLCAwfSB9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJpb3Nfc2V0dGluZ3NfdCAqYmlvc19jZmcgX19yZWFkX21vc3RseTsKIAotCiBzdGF0aWMgaW50IGFjZXJoZGZfZ2V0X3RlbXAoaW50ICp0ZW1wKQogewogCXU4IHJlYWRfdGVtcDsKQEAgLTE1MCwxMyArMTc5LDE0IEBACiBzdGF0aWMgaW50IGFjZXJoZGZfZ2V0X2ZhbnN0YXRlKGludCAqc3RhdGUpCiB7CiAJdTggZmFuOwotCWJvb2wgdG1wOwogCiAJaWYgKGVjX3JlYWQoYmlvc19jZmctPmZhbnJlZywgJmZhbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdG1wID0gKGZhbiA9PSBiaW9zX2NmZy0+ZmFuY21kW0FDRVJIREZfRkFOX09GRl0pOwotCSpzdGF0ZSA9IHRtcCA/IEFDRVJIREZfRkFOX09GRiA6IEFDRVJIREZfRkFOX0FVVE87CisJaWYgKGZhbiAhPSBiaW9zX2NmZy0+Y21kLmNtZF9vZmYpCisJCSpzdGF0ZSA9IEFDRVJIREZfRkFOX0FVVE87CisJZWxzZQorCQkqc3RhdGUgPSBBQ0VSSERGX0ZBTl9PRkY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NSw3ICsyMDUsOCBAQAogCQlzdGF0ZSA9IEFDRVJIREZfRkFOX0FVVE87CiAJfQogCi0JY21kID0gYmlvc19jZmctPmZhbmNtZFtzdGF0ZV07CisJY21kID0gKHN0YXRlID09IEFDRVJIREZfRkFOX09GRikgPyBiaW9zX2NmZy0+Y21kLmNtZF9vZmYKKwkJCQkJIDogYmlvc19jZmctPmNtZC5jbWRfYXV0bzsKIAlmYW5zdGF0ZSA9IHN0YXRlOwogCiAJZWNfd3JpdGUoYmlvc19jZmctPmZhbnJlZywgY21kKTsKQEAgLTQwOCw3ICs0MzksNyBAQAogfTsKIAogLyogc3VzcGVuZCAvIHJlc3VtZSBmdW5jdGlvbmFsaXR5ICovCi1zdGF0aWMgaW50IGFjZXJoZGZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYWNlcmhkZl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAoa2VybmVsbW9kZSkKIAkJYWNlcmhkZl9jaGFuZ2VfZmFuc3RhdGUoQUNFUkhERl9GQU5fQVVUTyk7CkBAIC00MTksMTQgKzQ1MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWNlcmhkZl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQotewotCWlmICh2ZXJib3NlKQotCQlwcl9ub3RpY2UoInJlc3VtaW5nXG4iKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhY2VyaGRmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTQzNywxNSArNDYwLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWNlcmhkZl9kcnYgPSB7CitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWNlcmhkZl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBhY2VyaGRmX3N1c3BlbmQsCisJLmZyZWV6ZSAgPSBhY2VyaGRmX3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhY2VyaGRmX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhY2VyaGRmIiwKKwkJLm5hbWUgID0gImFjZXJoZGYiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtICAgID0gJmFjZXJoZGZfcG1fb3BzLAogCX0sCiAJLnByb2JlID0gYWNlcmhkZl9wcm9iZSwKIAkucmVtb3ZlID0gYWNlcmhkZl9yZW1vdmUsCi0JLnN1c3BlbmQgPSBhY2VyaGRmX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGFjZXJoZGZfcmVzdW1lLAogfTsKIAogCkBAIC00NTQsMzIgKzQ4MSw0MCBAQAogewogCWNoYXIgY29uc3QgKnZlbmRvciwgKnZlcnNpb24sICpwcm9kdWN0OwogCWludCBpOworCXVuc2lnbmVkIGxvbmcgcHJvZF9sZW4gPSAwOwogCiAJLyogZ2V0IEJJT1MgZGF0YSAqLwogCXZlbmRvciAgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9TWVNfVkVORE9SKTsKIAl2ZXJzaW9uID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKTsKIAlwcm9kdWN0ID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKTsKIAorCiAJcHJfaW5mbygiQWNlciBBc3BpcmUgT25lIEZhbiBkcml2ZXIsIHYuJXNcbiIsIERSVl9WRVIpOwogCi0JaWYgKCFmb3JjZV9iaW9zWzBdKSB7Ci0JCWlmIChzdHJuY21wKHByb2R1Y3QsICJBTyIsIDIpKSB7Ci0JCQlwcl9lcnIoIm5vIEFzcGlyZSBPbmUgaGFyZHdhcmUgZm91bmRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQlwcl9pbmZvKCJmb3JjaW5nIEJJT1MgdmVyc2lvbjogJXNcbiIsIHZlcnNpb24pOworCWlmIChmb3JjZV9iaW9zWzBdKSB7CiAJCXZlcnNpb24gPSBmb3JjZV9iaW9zOworCQlwcl9pbmZvKCJmb3JjaW5nIEJJT1MgdmVyc2lvbjogJXNcbiIsIHZlcnNpb24pOwogCQlrZXJuZWxtb2RlID0gMDsKIAl9CiAKKwlpZiAoZm9yY2VfcHJvZHVjdFswXSkgeworCQlwcm9kdWN0ID0gZm9yY2VfcHJvZHVjdDsKKwkJcHJfaW5mbygiZm9yY2luZyBCSU9TIHByb2R1Y3Q6ICVzXG4iLCBwcm9kdWN0KTsKKwkJa2VybmVsbW9kZSA9IDA7CisJfQorCisJcHJvZF9sZW4gPSBzdHJsZW4ocHJvZHVjdCk7CisKIAlpZiAodmVyYm9zZSkKIAkJcHJfaW5mbygiQklPUyBpbmZvOiAlcyAlcywgcHJvZHVjdDogJXNcbiIsCiAJCQl2ZW5kb3IsIHZlcnNpb24sIHByb2R1Y3QpOwogCiAJLyogc2VhcmNoIEJJT1MgdmVyc2lvbiBhbmQgdmVuZG9yIGluIEJJT1Mgc2V0dGluZ3MgdGFibGUgKi8KIAlmb3IgKGkgPSAwOyBiaW9zX3RibFtpXS52ZXJzaW9uWzBdOyBpKyspIHsKLQkJaWYgKCFzdHJjbXAoYmlvc190YmxbaV0udmVuZG9yLCB2ZW5kb3IpICYmCisJCWlmIChzdHJsZW4oYmlvc190YmxbaV0ucHJvZHVjdCkgPj0gcHJvZF9sZW4gJiYKKwkJICAgICFzdHJuY21wKGJpb3NfdGJsW2ldLnByb2R1Y3QsIHByb2R1Y3QsCisJCQkgICBzdHJsZW4oYmlvc190YmxbaV0ucHJvZHVjdCkpICYmCisJCSAgICAhc3RyY21wKGJpb3NfdGJsW2ldLnZlbmRvciwgdmVuZG9yKSAmJgogCQkgICAgIXN0cmNtcChiaW9zX3RibFtpXS52ZXJzaW9uLCB2ZXJzaW9uKSkgewogCQkJYmlvc19jZmcgPSAmYmlvc190YmxbaV07CiAJCQlicmVhazsKQEAgLTQ4Nyw4ICs1MjIsOCBAQAogCX0KIAogCWlmICghYmlvc19jZmcpIHsKLQkJcHJfZXJyKCJ1bmtub3duICh1bnN1cHBvcnRlZCkgQklPUyB2ZXJzaW9uICVzLyVzLCAiCi0JCQkicGxlYXNlIHJlcG9ydCwgYWJvcnRpbmchXG4iLCB2ZW5kb3IsIHZlcnNpb24pOworCQlwcl9lcnIoInVua25vd24gKHVuc3VwcG9ydGVkKSBCSU9TIHZlcnNpb24gJXMvJXMvJXMsICIKKwkJCSJwbGVhc2UgcmVwb3J0LCBhYm9ydGluZyFcbiIsIHZlbmRvciwgcHJvZHVjdCwgdmVyc2lvbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTA5LDcgKzU0NCw3IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFjZXJoZGZfZHJ2KTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFjZXJoZGZfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01MjUsNyArNTYwLDcgQEAKIAkJcmV0dXJuOwogCiAJcGxhdGZvcm1fZGV2aWNlX2RlbChhY2VyaGRmX2Rldik7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFjZXJoZGZfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWNlcmhkZl9kcml2ZXIpOwogfQogCiBzdGF0aWMgaW50IGFjZXJoZGZfcmVnaXN0ZXJfdGhlcm1hbCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggZGI2NTdiYi4uYjM5ZDJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC03NywxNSArNzcsMTYgQEAKICAqIEZsYWdzIGZvciBob3RrIHN0YXR1cwogICogV0xfT04gYW5kIEJUX09OIGFyZSBhbHNvIHVzZWQgZm9yIHdpcmVsZXNzX3N0YXR1cygpCiAgKi8KLSNkZWZpbmUgV0xfT04gICAgICAgMHgwMQkvL2ludGVybmFsIFdpZmkKLSNkZWZpbmUgQlRfT04gICAgICAgMHgwMgkvL2ludGVybmFsIEJsdWV0b290aAotI2RlZmluZSBNTEVEX09OICAgICAweDA0CS8vbWFpbCBMRUQKLSNkZWZpbmUgVExFRF9PTiAgICAgMHgwOAkvL3RvdWNocGFkIExFRAotI2RlZmluZSBSTEVEX09OICAgICAweDEwCS8vUmVjb3JkIExFRAotI2RlZmluZSBQTEVEX09OICAgICAweDIwCS8vUGhvbmUgTEVECi0jZGVmaW5lIEdMRURfT04gICAgIDB4NDAJLy9HYW1pbmcgTEVECi0jZGVmaW5lIExDRF9PTiAgICAgIDB4ODAJLy9MQ0QgYmFja2xpZ2h0Ci0jZGVmaW5lIEdQU19PTiAgICAgIDB4MTAwCS8vR1BTCisjZGVmaW5lIFdMX09OICAgICAgIDB4MDEJLyogaW50ZXJuYWwgV2lmaSAqLworI2RlZmluZSBCVF9PTiAgICAgICAweDAyCS8qIGludGVybmFsIEJsdWV0b290aCAqLworI2RlZmluZSBNTEVEX09OICAgICAweDA0CS8qIG1haWwgTEVEICovCisjZGVmaW5lIFRMRURfT04gICAgIDB4MDgJLyogdG91Y2hwYWQgTEVEICovCisjZGVmaW5lIFJMRURfT04gICAgIDB4MTAJLyogUmVjb3JkIExFRCAqLworI2RlZmluZSBQTEVEX09OICAgICAweDIwCS8qIFBob25lIExFRCAqLworI2RlZmluZSBHTEVEX09OICAgICAweDQwCS8qIEdhbWluZyBMRUQgKi8KKyNkZWZpbmUgTENEX09OICAgICAgMHg4MAkvKiBMQ0QgYmFja2xpZ2h0ICovCisjZGVmaW5lIEdQU19PTiAgICAgIDB4MTAwCS8qIEdQUyAqLworI2RlZmluZSBLRVlfT04gICAgICAweDIwMAkvKiBLZXlib2FyZCBiYWNrbGlnaHQgKi8KIAogI2RlZmluZSBBU1VTX0xPRyAgICBBU1VTX0hPVEtfRklMRSAiOiAiCiAjZGVmaW5lIEFTVVNfRVJSICAgIEtFUk5fRVJSICAgIEFTVVNfTE9HCkBAIC05OCw3ICs5OSw4IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oQVNVU19IT1RLX05BTUUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vKiBXQVBGIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBGbitGeCB3bGFuIGtleQorLyoKKyAqIFdBUEYgZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIEZuK0Z4IHdsYW4ga2V5CiAgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIHZhbHVlcyBpcyB5ZXQgdG8gYmUgZm91bmQsIGJ1dAogICogbW9zdCBvZiB0aGUgdGltZToKICAqIDB4MCB3aWxsIGRvIG5vdGhpbmcKQEAgLTEyNSw3ICsxMjcsOCBAQAogLyogTEVERCAqLwogQVNVU19IQU5ETEUobGVkZF9zZXQsIEFTVVNfSE9US19QUkVGSVggIlNMQ00iKTsKIAotLyogQmx1ZXRvb3RoIGFuZCBXTEFOCisvKgorICogQmx1ZXRvb3RoIGFuZCBXTEFOCiAgKiBXTEVEIGFuZCBCTEVEIGFyZSBub3QgaGFuZGxlZCBsaWtlIG90aGVyIFhMRUQsIGJlY2F1c2UgaW4gc29tZSBkc2R0CiAgKiB0aGV5IGFsc28gY29udHJvbCB0aGUgV0xBTi9CbHVldG9vdGggZGV2aWNlLgogICovCkBAIC0xNDksMjIgKzE1MiwzMiBAQAogCiAvKiBEaXNwbGF5ICovCiBBU1VTX0hBTkRMRShkaXNwbGF5X3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU0RTUCIpOwotQVNVU19IQU5ETEUoZGlzcGxheV9nZXQsICJcXF9TQi5QQ0kwLlAwUDEuVkdBLkdFVEQiLAkvKiAgQTZCLCBBNksgQTZSIEE3RCBGM0pNIEw0UiBNNlIgQTNHCi0JCQkJCQkJICAgTTZBIE02ViBWWC0xIFY2SiBWNlYgVzNaICovCi0JICAgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAkvKiBBM0UgQTRLLCBBNEQgQTRMIEE2SiBBN0ogQThKIFo3MVYgTTlWCi0JCQkJCSAgIFM1QSBNNUEgejMzQSBXMUpjIFcyViBHMSAqLwotCSAgICAiXFxfU0IuUENJMC5QMFAzLlZHQS5HRVREIiwJLyogQTZWIEE2USAqLwotCSAgICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwJLyogQTZULCBBNk0gKi8KLQkgICAgIlxcX1NCLlBDSTAuUENJMS5WR0FDLk5NQVAiLAkvKiBMM0MgKi8KLQkgICAgIlxcX1NCLlBDSTAuVkdBLkdFVEQiLAkvKiBaOTZGICovCi0JICAgICJcXEFDVEQiLAkJLyogQTJEICovCi0JICAgICJcXEFEVkciLAkJLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KLQkgICAgIlxcRE5YVCIsCQkvKiBQMzAgKi8KLQkgICAgIlxcSU5GQiIsCQkvKiBBMkggRDEgTDJEIEwzRCBMM0ggTDJFIEw1RCBMNUMgTTFBIE0yRSBMNEwgVzNWICovCi0JICAgICJcXFNTVEUiKTsJCS8qIEEzRiBBNkYgQTNOIEEzTCBNNk4gVzNOIFc2QSAqLworQVNVU19IQU5ETEUoZGlzcGxheV9nZXQsCisJICAgIC8qIEE2QiwgQTZLIEE2UiBBN0QgRjNKTSBMNFIgTTZSIEEzRyBNNkEgTTZWIFZYLTEgVjZKIFY2ViBXM1ogKi8KKwkgICAgIlxcX1NCLlBDSTAuUDBQMS5WR0EuR0VURCIsCisJICAgIC8qIEEzRSBBNEssIEE0RCBBNEwgQTZKIEE3SiBBOEogWjcxViBNOVYgUzVBIE01QSB6MzNBIFcxSmMgVzJWIEcxICovCisJICAgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAorCSAgICAvKiBBNlYgQTZRICovCisJICAgICJcXF9TQi5QQ0kwLlAwUDMuVkdBLkdFVEQiLAorCSAgICAvKiBBNlQsIEE2TSAqLworCSAgICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwKKwkgICAgLyogTDNDICovCisJICAgICJcXF9TQi5QQ0kwLlBDSTEuVkdBQy5OTUFQIiwKKwkgICAgLyogWjk2RiAqLworCSAgICAiXFxfU0IuUENJMC5WR0EuR0VURCIsCisJICAgIC8qIEEyRCAqLworCSAgICAiXFxBQ1REIiwKKwkgICAgLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KKwkgICAgIlxcQURWRyIsCisJICAgIC8qIFAzMCAqLworCSAgICAiXFxETlhUIiwKKwkgICAgLyogQTJIIEQxIEwyRCBMM0QgTDNIIEwyRSBMNUQgTDVDIE0xQSBNMkUgTDRMIFczViAqLworCSAgICAiXFxJTkZCIiwKKwkgICAgLyogQTNGIEE2RiBBM04gQTNMIE02TiBXM04gVzZBICovCisJICAgICJcXFNTVEUiKTsKIAotQVNVU19IQU5ETEUobHNfc3dpdGNoLCBBU1VTX0hPVEtfUFJFRklYICJBTFNDIik7CS8qIFo3MUEgWjcxViAqLwotQVNVU19IQU5ETEUobHNfbGV2ZWwsIEFTVVNfSE9US19QUkVGSVggIkFMU0wiKTsJLyogWjcxQSBaNzFWICovCitBU1VTX0hBTkRMRShsc19zd2l0Y2gsIEFTVVNfSE9US19QUkVGSVggIkFMU0MiKTsgLyogWjcxQSBaNzFWICovCitBU1VTX0hBTkRMRShsc19sZXZlbCwgQVNVU19IT1RLX1BSRUZJWCAiQUxTTCIpOwkgLyogWjcxQSBaNzFWICovCiAKIC8qIEdQUyAqLwogLyogUjJIIHVzZSBkaWZmZXJlbnQgaGFuZGxlIGZvciBHUFMgb24vb2ZmICovCkBAIC0xNzIsMTkgKzE4NSwyMyBAQAogQVNVU19IQU5ETEUoZ3BzX29mZiwgQVNVU19IT1RLX1BSRUZJWCAiU0RPRiIpOwkvKiBSMkggKi8KIEFTVVNfSEFORExFKGdwc19zdGF0dXMsIEFTVVNfSE9US19QUkVGSVggIkdQU1QiKTsKIAorLyogS2V5Ym9hcmQgbGlnaHQgKi8KK0FTVVNfSEFORExFKGtsZWRfc2V0LCBBU1VTX0hPVEtfUFJFRklYICJTTEtCIik7CitBU1VTX0hBTkRMRShrbGVkX2dldCwgQVNVU19IT1RLX1BSRUZJWCAiR0xLQiIpOworCiAvKgogICogVGhpcyBpcyB0aGUgbWFpbiBzdHJ1Y3R1cmUsIHdlIGNhbiB1c2UgaXQgdG8gc3RvcmUgYW55dGhpbmcgaW50ZXJlc3RpbmcKICAqIGFib3V0IHRoZSBob3RrIGRldmljZQogICovCiBzdHJ1Y3QgYXN1c19ob3RrIHsKLQljaGFyICpuYW1lOwkJLy9sYXB0b3AgbmFtZQotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwkvL3RoZSBkZXZpY2Ugd2UgYXJlIGluCi0JYWNwaV9oYW5kbGUgaGFuZGxlOwkvL3RoZSBoYW5kbGUgb2YgdGhlIGhvdGsgZGV2aWNlCi0JY2hhciBzdGF0dXM7CQkvL3N0YXR1cyBvZiB0aGUgaG90aywgZm9yIExFRHMsIC4uLgotCXUzMiBsZWRkX3N0YXR1czsJLy9zdGF0dXMgb2YgdGhlIExFRCBkaXNwbGF5Ci0JdTggbGlnaHRfbGV2ZWw7CQkvL2xpZ2h0IHNlbnNvciBsZXZlbAotCXU4IGxpZ2h0X3N3aXRjaDsJLy9saWdodCBzZW5zb3Igc3dpdGNoIHZhbHVlCi0JdTE2IGV2ZW50X2NvdW50WzEyOF07CS8vY291bnQgZm9yIGVhY2ggZXZlbnQgVE9ETyBtYWtlIHRoaXMgYmV0dGVyCisJY2hhciAqbmFtZTsJCS8qIGxhcHRvcCBuYW1lICovCisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CS8qIHRoZSBkZXZpY2Ugd2UgYXJlIGluICovCisJYWNwaV9oYW5kbGUgaGFuZGxlOwkvKiB0aGUgaGFuZGxlIG9mIHRoZSBob3RrIGRldmljZSAqLworCWNoYXIgc3RhdHVzOwkJLyogc3RhdHVzIG9mIHRoZSBob3RrLCBmb3IgTEVEcywgLi4uICovCisJdTMyIGxlZGRfc3RhdHVzOwkvKiBzdGF0dXMgb2YgdGhlIExFRCBkaXNwbGF5ICovCisJdTggbGlnaHRfbGV2ZWw7CQkvKiBsaWdodCBzZW5zb3IgbGV2ZWwgKi8KKwl1OCBsaWdodF9zd2l0Y2g7CS8qIGxpZ2h0IHNlbnNvciBzd2l0Y2ggdmFsdWUgKi8KKwl1MTYgZXZlbnRfY291bnRbMTI4XTsJLyogY291bnQgZm9yIGVhY2ggZXZlbnQgVE9ETyBtYWtlIHRoaXMgYmV0dGVyICovCiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CiAJdTE2ICprZXljb2RlX21hcDsKIH07CkBAIC0yMzcsMjggKzI1NCwzNSBAQAogCS51cGRhdGVfc3RhdHVzID0gdXBkYXRlX2JsX3N0YXR1cywKIH07CiAKLS8qIFRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSB1cGRhdGUgdGhlIExFRCdzLCBhbmQgYXJlIGNhbGxlZCBmcm9tIGEKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgdXBkYXRlIHRoZSBMRUQncywgYW5kIGFyZSBjYWxsZWQgZnJvbSBhCiAgKiB3b3JrcXVldWUuIEJ5IGRvaW5nIHRoaXMgYXMgc2VwYXJhdGUgd29yayByYXRoZXIgdGhhbiB3aGVuIHRoZSBMRUQKICAqIHN1YnN5c3RlbSBhc2tzLCB3ZSBhdm9pZCBtZXNzaW5nIHdpdGggdGhlIEFzdXMgQUNQSSBzdHVmZiBkdXJpbmcgYQotICogcG90ZW50aWFsbHkgYmFkIHRpbWUsIHN1Y2ggYXMgYSB0aW1lciBpbnRlcnJ1cHQuICovCisgKiBwb3RlbnRpYWxseSBiYWQgdGltZSwgc3VjaCBhcyBhIHRpbWVyIGludGVycnVwdC4KKyAqLwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRfd29ya3F1ZXVlOwogCi0jZGVmaW5lIEFTVVNfTEVEKG9iamVjdCwgbGVkbmFtZSkJCQkJCVwKKyNkZWZpbmUgQVNVU19MRUQob2JqZWN0LCBsZWRuYW1lLCBtYXgpCQkJCQlcCiAJc3RhdGljIHZvaWQgb2JqZWN0IyNfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwJXAogCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSk7CVwKKwlzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBvYmplY3QjI19sZWRfZ2V0KAkJCVwKKwkJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwkJCQlcCiAJc3RhdGljIHZvaWQgb2JqZWN0IyNfbGVkX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpOwlcCiAJc3RhdGljIGludCBvYmplY3QjI19sZWRfd2s7CQkJCQlcCiAJc3RhdGljIERFQ0xBUkVfV09SSyhvYmplY3QjI19sZWRfd29yaywgb2JqZWN0IyNfbGVkX3VwZGF0ZSk7CVwKIAlzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBvYmplY3QjI19sZWQgPSB7CQkJXAogCQkubmFtZSAgICAgICAgICAgPSAiYXN1czo6IiBsZWRuYW1lLAkJCVwKIAkJLmJyaWdodG5lc3Nfc2V0ID0gb2JqZWN0IyNfbGVkX3NldCwJCQlcCisJCS5icmlnaHRuZXNzX2dldCA9IG9iamVjdCMjX2xlZF9nZXQsCQkJXAorCQkubWF4X2JyaWdodG5lc3MgPSBtYXgJCQkJCVwKIAl9CiAKLUFTVVNfTEVEKG1sZWQsICJtYWlsIik7Ci1BU1VTX0xFRCh0bGVkLCAidG91Y2hwYWQiKTsKLUFTVVNfTEVEKHJsZWQsICJyZWNvcmQiKTsKLUFTVVNfTEVEKHBsZWQsICJwaG9uZSIpOwotQVNVU19MRUQoZ2xlZCwgImdhbWluZyIpOworQVNVU19MRUQobWxlZCwgIm1haWwiLCAxKTsKK0FTVVNfTEVEKHRsZWQsICJ0b3VjaHBhZCIsIDEpOworQVNVU19MRUQocmxlZCwgInJlY29yZCIsIDEpOworQVNVU19MRUQocGxlZCwgInBob25lIiwgMSk7CitBU1VTX0xFRChnbGVkLCAiZ2FtaW5nIiwgMSk7CitBU1VTX0xFRChrbGVkLCAia2JkX2JhY2tsaWdodCIsIDMpOwogCiBzdHJ1Y3Qga2V5X2VudHJ5IHsKIAljaGFyIHR5cGU7CkBAIC0yNzgsMTYgKzMwMiwyMyBAQAogCXtLRV9LRVksIDB4NDEsIEtFWV9ORVhUU09OR30sCiAJe0tFX0tFWSwgMHg0MywgS0VZX1NUT1BDRH0sCiAJe0tFX0tFWSwgMHg0NSwgS0VZX1BMQVlQQVVTRX0sCisJe0tFX0tFWSwgMHg0YywgS0VZX01FRElBfSwKIAl7S0VfS0VZLCAweDUwLCBLRVlfRU1BSUx9LAogCXtLRV9LRVksIDB4NTEsIEtFWV9XV1d9LAorCXtLRV9LRVksIDB4NTUsIEtFWV9DQUxDfSwKIAl7S0VfS0VZLCAweDVDLCBLRVlfU0NSRUVOTE9DS30sICAvKiBTY3JlZW5sb2NrICovCiAJe0tFX0tFWSwgMHg1RCwgS0VZX1dMQU59LAorCXtLRV9LRVksIDB4NUUsIEtFWV9XTEFOfSwKKwl7S0VfS0VZLCAweDVGLCBLRVlfV0xBTn0sCisJe0tFX0tFWSwgMHg2MCwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCiAJe0tFX0tFWSwgMHg2MSwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCiAJe0tFX0tFWSwgMHg2QiwgQlROX1RPVUNIfSwgLyogTG9jayBNb3VzZSAqLwogCXtLRV9LRVksIDB4ODIsIEtFWV9DQU1FUkF9LAogCXtLRV9LRVksIDB4OEEsIEtFWV9QUk9HMX0sCiAJe0tFX0tFWSwgMHg5NSwgS0VZX01FRElBfSwKIAl7S0VfS0VZLCAweDk5LCBLRVlfUEhPTkV9LAorCXtLRV9LRVksIDB4YzQsIEtFWV9LQkRJTExVTVVQfSwKKwl7S0VfS0VZLCAweGM1LCBLRVlfS0JESUxMVU1ET1dOfSwKIAl7S0VfRU5ELCAwfSwKIH07CiAKQEAgLTMwMSw4ICszMzIsOCBAQAogc3RhdGljIGludCB3cml0ZV9hY3BpX2ludChhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgaW50IHZhbCwKIAkJCSAgc3RydWN0IGFjcGlfYnVmZmVyICpvdXRwdXQpCiB7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwkvL2xpc3Qgb2YgaW5wdXQgcGFyYW1ldGVycyAoYW4gaW50IGhlcmUpCi0JdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOwkvL3RoZSBvbmx5IHBhcmFtIHdlIHVzZQorCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsJLyogbGlzdCBvZiBpbnB1dCBwYXJhbWV0ZXJzIChhbiBpbnQpICovCisJdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOwkvKiB0aGUgb25seSBwYXJhbSB3ZSB1c2UgKi8KIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlpZiAoIWhhbmRsZSkKQEAgLTM5OSw2ICs0MzAsMTEgQEAKIAl7CQkJCQkJCQlcCiAJCWludCB2YWx1ZSA9IG9iamVjdCMjX2xlZF93azsJCQkJXAogCQl3cml0ZV9zdGF0dXMob2JqZWN0IyNfc2V0X2hhbmRsZSwgdmFsdWUsIChtYXNrKSk7CVwKKwl9CQkJCQkJCQlcCisJc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mgb2JqZWN0IyNfbGVkX2dldCgJCQlcCisJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQkJCQlcCisJewkJCQkJCQkJXAorCQlyZXR1cm4gbGVkX2NkZXYtPmJyaWdodG5lc3M7CQkJCVwKIAl9CiAKIEFTVVNfTEVEX0hBTkRMRVIobWxlZCwgTUxFRF9PTik7CkBAIC00MDcsNiArNDQzLDYwIEBACiBBU1VTX0xFRF9IQU5ETEVSKHRsZWQsIFRMRURfT04pOwogQVNVU19MRURfSEFORExFUihnbGVkLCBHTEVEX09OKTsKIAorLyoKKyAqIEtleWJvYXJkIGJhY2tsaWdodAorICovCitzdGF0aWMgaW50IGdldF9rbGVkX2x2bCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBrYmx2OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CisJYWNwaV9zdGF0dXMgcnY7CisKKwlwYXJhbXMuY291bnQgPSAxOworCXBhcmFtcy5wb2ludGVyID0gJmluX29iajsKKwlpbl9vYmoudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX29iai5pbnRlZ2VyLnZhbHVlID0gMjsKKworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGtsZWRfZ2V0X2hhbmRsZSwgTlVMTCwgJnBhcmFtcywgJmtibHYpOworCWlmIChBQ1BJX0ZBSUxVUkUocnYpKSB7CisJCXByX3dhcm5pbmcoIkVycm9yIHJlYWRpbmcga2xlZCBsZXZlbFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4ga2JsdjsKK30KKworc3RhdGljIGludCBzZXRfa2xlZF9sdmwoaW50IGtibHYpCit7CisJaWYgKGtibHYgPiAwKQorCQlrYmx2ID0gKDEgPDwgNykgfCAoa2JsdiAmIDB4N0YpOworCWVsc2UKKwkJa2JsdiA9IDA7CisKKwlpZiAod3JpdGVfYWNwaV9pbnQoa2xlZF9zZXRfaGFuZGxlLCBOVUxMLCBrYmx2LCBOVUxMKSkgeworCQlwcl93YXJuaW5nKCJLZXlib2FyZCBMRUQgZGlzcGxheSB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGtsZWRfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCWtsZWRfbGVkX3drID0gdmFsdWU7CisJcXVldWVfd29yayhsZWRfd29ya3F1ZXVlLCAma2xlZF9sZWRfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGtsZWRfbGVkX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCit7CisJc2V0X2tsZWRfbHZsKGtsZWRfbGVkX3drKTsKK30KKworc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mga2xlZF9sZWRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCXJldHVybiBnZXRfa2xlZF9sdmwoKTsKK30KKwogc3RhdGljIGludCBnZXRfbGNkX3N0YXRlKHZvaWQpCiB7CiAJcmV0dXJuIHJlYWRfc3RhdHVzKExDRF9PTik7CkBAIC00OTgsNyArNTg4LDcgQEAKIHsKIAlpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKLQljaGFyIGJ1ZlsxNl07CQkvL2Vub3VnaCBmb3IgYWxsIGluZm8KKwljaGFyIGJ1ZlsxNl07CQkvKiBlbm91Z2ggZm9yIGFsbCBpbmZvICovCiAJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKIAogCS8qCkBAIC01MTYsNyArNjA2LDE3IEBACiAJICovCiAJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaG90ay0+aGFuZGxlLCAiU0ZVTiIsIE5VTEwsICZ0ZW1wKTsKIAlpZiAoIUFDUElfRkFJTFVSRShydikpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTRlVOIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTRlVOIHZhbHVlICAgICAgICAgOiAlI3hcbiIsCisJCQkgICAgICAgKHVpbnQpIHRlbXApOworCS8qCisJICogVGhlIEhXUlMgbWV0aG9kIHJldHVybiBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGhhcmR3YXJlLgorCSAqIDB4ODAgYml0IGlzIGZvciBXTEFOLCAweDEwMCBmb3IgQmx1ZXRvb3RoLgorCSAqIFRoZSBzaWduaWZpY2FuY2Ugb2Ygb3RoZXJzIGlzIHlldCB0byBiZSBmb3VuZC4KKwkgKiBJZiB3ZSBkb24ndCBmaW5kIHRoZSBtZXRob2QsIHdlIGFzc3VtZSB0aGUgZGV2aWNlIGFyZSBwcmVzZW50LgorCSAqLworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhvdGstPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmdGVtcCk7CisJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiSFJXUyB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKIAkvKgogCSAqIEFub3RoZXIgdmFsdWUgZm9yIHVzZXJzcGFjZTogdGhlIEFTWU0gbWV0aG9kIHJldHVybnMgMHgwMiBmb3IKQEAgLTUyNyw3ICs2MjcsNyBAQAogCSAqLwogCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhvdGstPmhhbmRsZSwgIkFTWU0iLCBOVUxMLCAmdGVtcCk7CiAJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogMHglMDR4XG4iLAorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKIAlpZiAoYXN1c19pbmZvKSB7CiAJCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+bGVuZ3RoKTsKQEAgLTY0OCw4ICs3NDgsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSAwOwogCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CiAKLQkvKiBJbiBtb3N0IG9mIHRoZSBjYXNlLCB3ZSBrbm93IGhvdyB0byBzZXQgdGhlIGRpc3BsYXksIGJ1dCBzb21ldGltZQotCSAgIHdlIGNhbid0IHJlYWQgaXQgKi8KKwkvKgorCSAqIEluIG1vc3Qgb2YgdGhlIGNhc2UsIHdlIGtub3cgaG93IHRvIHNldCB0aGUgZGlzcGxheSwgYnV0IHNvbWV0aW1lCisJICogd2UgY2FuJ3QgcmVhZCBpdAorCSAqLwogCWlmIChkaXNwbGF5X2dldF9oYW5kbGUpIHsKIAkJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGlzcGxheV9nZXRfaGFuZGxlLCBOVUxMLAogCQkJCQkgICBOVUxMLCAmdmFsdWUpOwpAQCAtMTAzNyw2ICsxMTM5LDkgQEAKIAogCUFTVVNfSEFORExFX0lOSVQobGVkZF9zZXQpOwogCisJQVNVU19IQU5ETEVfSU5JVChrbGVkX3NldCk7CisJQVNVU19IQU5ETEVfSU5JVChrbGVkX2dldCk7CisKIAkvKgogCSAqIFRoZSBIV1JTIG1ldGhvZCByZXR1cm4gaW5mb3JtYXRpb25zIGFib3V0IHRoZSBoYXJkd2FyZS4KIAkgKiAweDgwIGJpdCBpcyBmb3IgV0xBTiwgMHgxMDAgZm9yIEJsdWV0b290aC4KQEAgLTEwNjMsOCArMTE2OCwxMCBAQAogCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9zZXQpOwogCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9nZXQpOwogCi0JLyogVGhlcmUgaXMgYSBsb3Qgb2YgbW9kZWxzIHdpdGggIkFMU0wiLCBidXQgYSBmZXcgZ2V0Ci0JICAgYSByZWFsIGxpZ2h0IHNlbnMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgaXQuICovCisJLyoKKwkgKiBUaGVyZSBpcyBhIGxvdCBvZiBtb2RlbHMgd2l0aCAiQUxTTCIsIGJ1dCBhIGZldyBnZXQKKwkgKiBhIHJlYWwgbGlnaHQgc2Vucywgc28gd2UgbmVlZCB0byBjaGVjayBpdC4KKwkgKi8KIAlpZiAoIUFTVVNfSEFORExFX0lOSVQobHNfc3dpdGNoKSkKIAkJQVNVU19IQU5ETEVfSU5JVChsc19sZXZlbCk7CiAKQEAgLTExNjgsNiArMTI3NSwxMCBAQAogCS8qIExDRCBCYWNrbGlnaHQgaXMgb24gYnkgZGVmYXVsdCAqLwogCXdyaXRlX3N0YXR1cyhOVUxMLCAxLCBMQ0RfT04pOwogCisJLyogS2V5Ym9hcmQgQmFja2xpZ2h0IGlzIG9uIGJ5IGRlZmF1bHQgKi8KKwlpZiAoa2xlZF9zZXRfaGFuZGxlKQorCQlzZXRfa2xlZF9sdmwoMSk7CisKIAkvKiBMRUQgZGlzcGxheSBpcyBvZmYgYnkgZGVmYXVsdCAqLwogCWhvdGstPmxlZGRfc3RhdHVzID0gMHhGRkY7CiAKQEAgLTEyMjIsNiArMTMzMyw3IEBACiAJQVNVU19MRURfVU5SRUdJU1RFUihwbGVkKTsKIAlBU1VTX0xFRF9VTlJFR0lTVEVSKHJsZWQpOwogCUFTVVNfTEVEX1VOUkVHSVNURVIoZ2xlZCk7CisJQVNVU19MRURfVU5SRUdJU1RFUihrbGVkKTsKIH0KIAogc3RhdGljIHZvaWQgYXN1c19pbnB1dF9leGl0KHZvaWQpCkBAIC0xMzAxLDEzICsxNDEzLDIwIEBACiAJaWYgKHJ2KQogCQlnb3RvIG91dDQ7CiAKLQlsZWRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxlZF93b3JrcXVldWUiKTsKLQlpZiAoIWxlZF93b3JrcXVldWUpCisJaWYgKGtsZWRfc2V0X2hhbmRsZSAmJiBrbGVkX2dldF9oYW5kbGUpCisJCXJ2ID0gQVNVU19MRURfUkVHSVNURVIoa2xlZCwgZGV2KTsKKwlpZiAocnYpCiAJCWdvdG8gb3V0NTsKIAorCWxlZF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibGVkX3dvcmtxdWV1ZSIpOworCWlmICghbGVkX3dvcmtxdWV1ZSkKKwkJZ290byBvdXQ2OworCiAJcmV0dXJuIDA7Ci1vdXQ1Ogorb3V0NjoKIAlydiA9IC1FTk9NRU07CisJQVNVU19MRURfVU5SRUdJU1RFUihrbGVkKTsKK291dDU6CiAJQVNVU19MRURfVU5SRUdJU1RFUihnbGVkKTsKIG91dDQ6CiAJQVNVU19MRURfVU5SRUdJU1RFUihwbGVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKaW5kZXggMjIyZmZiODkuLmRhM2MwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC0xNDIsMTggKzE0MiwyOCBAQAogCXN0cnVjdCByZmtpbGwgKndsYW5fcmZraWxsOwogCXN0cnVjdCByZmtpbGwgKmJsdWV0b290aF9yZmtpbGw7CiAJc3RydWN0IHJma2lsbCAqd3dhbjNnX3Jma2lsbDsKKwlzdHJ1Y3QgcmZraWxsICp3aW1heF9yZmtpbGw7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwotCXN0cnVjdCB3b3JrX3N0cnVjdCBob3RwbHVnX3dvcms7CisJc3RydWN0IG11dGV4IGhvdHBsdWdfbG9jazsKIH07CiAKIC8qIFRoZSBhY3R1YWwgZGV2aWNlIHRoZSBkcml2ZXIgYmluZHMgdG8gKi8KIHN0YXRpYyBzdHJ1Y3QgZWVlcGNfaG90ayAqZWhvdGs7CiAKIC8qIFBsYXRmb3JtIGRldmljZS9kcml2ZXIgKi8KK3N0YXRpYyBpbnQgZWVlcGNfaG90a190aGF3KHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZWVlcGNfcG1fb3BzID0geworCS50aGF3ID0gZWVlcGNfaG90a190aGF3LAorCS5yZXN0b3JlID0gZWVlcGNfaG90a19yZXN0b3JlLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGxhdGZvcm1fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gRUVFUENfSE9US19GSUxFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJmVlZXBjX3BtX29wcywKIAl9CiB9OwogCkBAIC0xOTIsNyArMjAyLDYgQEAKICAqLwogc3RhdGljIGludCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7Ci1zdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyB2b2lkIGVlZXBjX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGVlZXBjX2RldmljZV9pZHNbXSA9IHsKQEAgLTIwOSw3ICsyMTgsNiBAQAogCS5vcHMgPSB7CiAJCS5hZGQgPSBlZWVwY19ob3RrX2FkZCwKIAkJLnJlbW92ZSA9IGVlZXBjX2hvdGtfcmVtb3ZlLAotCQkucmVzdW1lID0gZWVlcGNfaG90a19yZXN1bWUsCiAJCS5ub3RpZnkgPSBlZWVwY19ob3RrX25vdGlmeSwKIAl9LAogfTsKQEAgLTU3OSw3ICs1ODcsNiBAQAogCiBzdGF0aWMgaW50IGVlZXBjX2hvdGtfY2hlY2sodm9pZCkKIHsKLQljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlpbnQgcmVzdWx0OwogCkBAIC02MDQsMzEgKzYxMSw2IEBACiAJCQlwcl9pbmZvKCJHZXQgY29udHJvbCBtZXRob2RzIHN1cHBvcnRlZDogMHgleFxuIiwKIAkJCQllaG90ay0+Y21fc3VwcG9ydGVkKTsKIAkJfQotCQllaG90ay0+aW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQkJaWYgKCFlaG90ay0+aW5wdXRkZXYpIHsKLQkJCXByX2luZm8oIlVuYWJsZSB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2VcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZWhvdGstPmlucHV0ZGV2LT5uYW1lID0gIkFzdXMgRWVlUEMgZXh0cmEgYnV0dG9ucyI7Ci0JCWVob3RrLT5pbnB1dGRldi0+cGh5cyA9IEVFRVBDX0hPVEtfRklMRSAiL2lucHV0MCI7Ci0JCWVob3RrLT5pbnB1dGRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCQllaG90ay0+aW5wdXRkZXYtPmdldGtleWNvZGUgPSBlZWVwY19nZXRrZXljb2RlOwotCQllaG90ay0+aW5wdXRkZXYtPnNldGtleWNvZGUgPSBlZWVwY19zZXRrZXljb2RlOwotCi0JCWZvciAoa2V5ID0gZWVlcGNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgewotCQkJc3dpdGNoIChrZXktPnR5cGUpIHsKLQkJCWNhc2UgS0VfS0VZOgotCQkJCXNldF9iaXQoRVZfS0VZLCBlaG90ay0+aW5wdXRkZXYtPmV2Yml0KTsKLQkJCQlzZXRfYml0KGtleS0+a2V5Y29kZSwgZWhvdGstPmlucHV0ZGV2LT5rZXliaXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJlc3VsdCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShlaG90ay0+aW5wdXRkZXYpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlwcl9pbmZvKCJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKLQkJCWlucHV0X2ZyZWVfZGV2aWNlKGVob3RrLT5pbnB1dGRldik7Ci0JCQlyZXR1cm4gMDsKLQkJfQogCX0gZWxzZSB7CiAJCXByX2VycigiSG90a2V5IGRldmljZSBub3QgcHJlc2VudCwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY2MSw0MCArNjQzLDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGVlZXBjX2hvdHBsdWdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfaG90cGx1Zyh2b2lkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IHBjaV9idXMgKmJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKLQlib29sIGJsb2NrZWQ7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlib29sIGJsb2NrZWQgPSBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKCk7CiAKLQlpZiAoIWJ1cykgewotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBQQ0kgYnVzIDE/XG4iKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoZWhvdGstPndsYW5fcmZraWxsKQorCQlyZmtpbGxfc2V0X3N3X3N0YXRlKGVob3RrLT53bGFuX3Jma2lsbCwgYmxvY2tlZCk7CiAKLQlibG9ja2VkID0gZWVlcGNfd2xhbl9yZmtpbGxfYmxvY2tlZCgpOwotCWlmICghYmxvY2tlZCkgewotCQlkZXYgPSBwY2lfZ2V0X3Nsb3QoYnVzLCAwKTsKLQkJaWYgKGRldikgewotCQkJLyogRGV2aWNlIGFscmVhZHkgcHJlc2VudCAqLwotCQkJcGNpX2Rldl9wdXQoZGV2KTsKLQkJCXJldHVybjsKKwltdXRleF9sb2NrKCZlaG90ay0+aG90cGx1Z19sb2NrKTsKKworCWlmIChlaG90ay0+aG90cGx1Z19zbG90KSB7CisJCWJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKKwkJaWYgKCFidXMpIHsKKwkJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBmaW5kIFBDSSBidXMgMT9cbiIpOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCAwKTsKLQkJaWYgKGRldikgewotCQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7Ci0JCQlpZiAocGNpX2J1c19hZGRfZGV2aWNlKGRldikpCi0JCQkJcHJfZXJyKCJVbmFibGUgdG8gaG90cGx1ZyB3aWZpXG4iKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWRldiA9IHBjaV9nZXRfc2xvdChidXMsIDApOwotCQlpZiAoZGV2KSB7Ci0JCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoZGV2KTsKLQkJCXBjaV9kZXZfcHV0KGRldik7CisKKwkJaWYgKCFibG9ja2VkKSB7CisJCQlkZXYgPSBwY2lfZ2V0X3Nsb3QoYnVzLCAwKTsKKwkJCWlmIChkZXYpIHsKKwkJCQkvKiBEZXZpY2UgYWxyZWFkeSBwcmVzZW50ICovCisJCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCQlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgMCk7CisJCQlpZiAoZGV2KSB7CisJCQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CisJCQkJaWYgKHBjaV9idXNfYWRkX2RldmljZShkZXYpKQorCQkJCQlwcl9lcnIoIlVuYWJsZSB0byBob3RwbHVnIHdpZmlcbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2ID0gcGNpX2dldF9zbG90KGJ1cywgMCk7CisJCQlpZiAoZGV2KSB7CisJCQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7CisJCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCX0KIAkJfQogCX0KIAotCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPndsYW5fcmZraWxsLCBibG9ja2VkKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZlaG90ay0+aG90cGx1Z19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKQEAgLTcwMiw3ICs2OTIsNyBAQAogCWlmIChldmVudCAhPSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0spCiAJCXJldHVybjsKIAotCXNjaGVkdWxlX3dvcmsoJmVob3RrLT5ob3RwbHVnX3dvcmspOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGVlZXBjX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCkBAIC04MzksNjYgKzgyOSwzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCi17Ci0JaW50IHJlc3VsdDsKLQotCWlmICghZGV2aWNlKQotCQkgcmV0dXJuIC1FSU5WQUw7Ci0JcHJfbm90aWNlKEVFRVBDX0hPVEtfTkFNRSAiXG4iKTsKLQllaG90ayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZWVwY19ob3RrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlaG90aykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZWhvdGstPmluaXRfZmxhZyA9IERJU0FCTEVfQVNMX1dMQU4gfCBESVNBQkxFX0FTTF9ESVNQTEFZU1dJVENIOwotCWVob3RrLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKLQlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBFRUVQQ19IT1RLX0RFVklDRV9OQU1FKTsKLQlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgRUVFUENfSE9US19DTEFTUyk7Ci0JZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVob3RrOwotCWVob3RrLT5kZXZpY2UgPSBkZXZpY2U7Ci0JcmVzdWx0ID0gZWVlcGNfaG90a19jaGVjaygpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZWhvdGtfZmFpbDsKLQotCXJldHVybiAwOwotCi0gZWhvdGtfZmFpbDoKLQlrZnJlZShlaG90ayk7Ci0JZWhvdGsgPSBOVUxMOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBlZWVwY19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCi17Ci0JaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJIHJldHVybiAtRUlOVkFMOwotCi0Ja2ZyZWUoZWhvdGspOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBlZWVwY19ob3RrX3RoYXcoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCWlmIChlaG90ay0+d2xhbl9yZmtpbGwpIHsKIAkJYm9vbCB3bGFuOwogCi0JCS8qIFdvcmthcm91bmQgLSBpdCBzZWVtcyB0aGF0IF9QVFMgZGlzYWJsZXMgdGhlIHdpcmVsZXNzCi0JCSAgIHdpdGhvdXQgbm90aWZpY2F0aW9uIG9yIGNoYW5naW5nIHRoZSB2YWx1ZSByZWFkIGJ5IFdMQU4uCi0JCSAgIE5vcm1hbGx5IHRoaXMgaXMgZmluZSBiZWNhdXNlIHRoZSBjb3JyZWN0IHZhbHVlIGlzIHJlc3RvcmVkCi0JCSAgIGZyb20gdGhlIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9uIHJlc3VtZSwgYnV0IHdlIG5lZWQgdG8gZG8KLQkJICAgaXQgb3Vyc2VsZiBpZiBjYXNlIHN1c3BlbmQgaXMgYWJvcnRlZCwgb3Igd2UgbG9zZSB3aXJlbGVzcy4KKwkJLyoKKwkJICogV29yayBhcm91bmQgYmlvcyBidWcgLSBhY3BpIF9QVFMgdHVybnMgb2ZmIHRoZSB3aXJlbGVzcyBsZWQKKwkJICogZHVyaW5nIHN1c3BlbmQuICBOb3JtYWxseSBpdCByZXN0b3JlcyBpdCBvbiByZXN1bWUsIGJ1dAorCQkgKiB3ZSBzaG91bGQga2ljayBpdCBvdXJzZWx2ZXMgaW4gY2FzZSBoaWJlcm5hdGlvbiBpcyBhYm9ydGVkLgogCQkgKi8KIAkJd2xhbiA9IGdldF9hY3BpKENNX0FTTF9XTEFOKTsKIAkJc2V0X2FjcGkoQ01fQVNMX1dMQU4sIHdsYW4pOwotCi0JCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPndsYW5fcmZraWxsLCB3bGFuICE9IDEpOwotCi0JCXNjaGVkdWxlX3dvcmsoJmVob3RrLT5ob3RwbHVnX3dvcmspOwogCX0KIAorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJLyogUmVmcmVzaCBib3RoIHdsYW4gcmZraWxsIHN0YXRlIGFuZCBwY2kgaG90cGx1ZyAqLworCWlmIChlaG90ay0+d2xhbl9yZmtpbGwpCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7CisKIAlpZiAoZWhvdGstPmJsdWV0b290aF9yZmtpbGwpCiAJCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPmJsdWV0b290aF9yZmtpbGwsCiAJCQkJICAgIGdldF9hY3BpKENNX0FTTF9CTFVFVE9PVEgpICE9IDEpOworCWlmIChlaG90ay0+d3dhbjNnX3Jma2lsbCkKKwkJcmZraWxsX3NldF9zd19zdGF0ZShlaG90ay0+d3dhbjNnX3Jma2lsbCwKKwkJCQkgICAgZ2V0X2FjcGkoQ01fQVNMXzNHKSAhPSAxKTsKKwlpZiAoZWhvdGstPndpbWF4X3Jma2lsbCkKKwkJcmZraWxsX3NldF9zd19zdGF0ZShlaG90ay0+d2ltYXhfcmZraWxsLAorCQkJCSAgICBnZXRfYWNwaShDTV9BU0xfV0lNQVgpICE9IDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDE5LDE2ICs5ODEsMzcgQEAKIAogc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2V4aXQodm9pZCkKIHsKKwllZWVwY191bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA1Iik7CiAJZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNiIpOwogCWVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCJcXF9TQi5QQ0kwLlAwUDciKTsKLQlpZiAoZWhvdGstPndsYW5fcmZraWxsKQorCWlmIChlaG90ay0+d2xhbl9yZmtpbGwpIHsKIAkJcmZraWxsX3VucmVnaXN0ZXIoZWhvdGstPndsYW5fcmZraWxsKTsKLQlpZiAoZWhvdGstPmJsdWV0b290aF9yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT5ibHVldG9vdGhfcmZraWxsKTsKLQlpZiAoZWhvdGstPnd3YW4zZ19yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT53d2FuM2dfcmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3koZWhvdGstPndsYW5fcmZraWxsKTsKKwkJZWhvdGstPndsYW5fcmZraWxsID0gTlVMTDsKKwl9CisJLyoKKwkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbCBzdGF0ZSB3YXMgY2hhbmdlZCBhZnRlcgorCSAqIGVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCkKKwkgKi8KKwllZWVwY19yZmtpbGxfaG90cGx1ZygpOwogCWlmIChlaG90ay0+aG90cGx1Z19zbG90KQogCQlwY2lfaHBfZGVyZWdpc3RlcihlaG90ay0+aG90cGx1Z19zbG90KTsKKworCWlmIChlaG90ay0+Ymx1ZXRvb3RoX3Jma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3RlcihlaG90ay0+Ymx1ZXRvb3RoX3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGVob3RrLT5ibHVldG9vdGhfcmZraWxsKTsKKwkJZWhvdGstPmJsdWV0b290aF9yZmtpbGwgPSBOVUxMOworCX0KKwlpZiAoZWhvdGstPnd3YW4zZ19yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIoZWhvdGstPnd3YW4zZ19yZmtpbGwpOworCQlyZmtpbGxfZGVzdHJveShlaG90ay0+d3dhbjNnX3Jma2lsbCk7CisJCWVob3RrLT53d2FuM2dfcmZraWxsID0gTlVMTDsKKwl9CisJaWYgKGVob3RrLT53aW1heF9yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIoZWhvdGstPndpbWF4X3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGVob3RrLT53aW1heF9yZmtpbGwpOworCQllaG90ay0+d2ltYXhfcmZraWxsID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGVlZXBjX2lucHV0X2V4aXQodm9pZCkKQEAgLTEwNTAsMTkgKzEwMzMsNiBAQAogCWVlZXBjX2h3bW9uX2RldmljZSA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBlZWVwY19sYXB0b3BfZXhpdCh2b2lkKQotewotCWVlZXBjX2JhY2tsaWdodF9leGl0KCk7Ci0JZWVlcGNfcmZraWxsX2V4aXQoKTsKLQllZWVwY19pbnB1dF9leGl0KCk7Ci0JZWVlcGNfaHdtb25fZXhpdCgpOwotCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwbGF0Zm9ybV9kZXZpY2UtPmRldi5rb2JqLAotCQkJICAgJnBsYXRmb3JtX2F0dHJpYnV0ZV9ncm91cCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdGZvcm1fZHJpdmVyKTsKLX0KLQogc3RhdGljIGludCBlZWVwY19uZXdfcmZraWxsKHN0cnVjdCByZmtpbGwgKipyZmtpbGwsCiAJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgIGVudW0gcmZraWxsX3R5cGUgdHlwZSwgaW50IGNtKQpAQCAtMTA5NCwxMCArMTA2NCw3IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlJTklUX1dPUksoJmVob3RrLT5ob3RwbHVnX3dvcmssIGVlZXBjX2hvdHBsdWdfd29yayk7Ci0KLQllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNiIpOwotCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA3Iik7CisJbXV0ZXhfaW5pdCgmZWhvdGstPmhvdHBsdWdfbG9jayk7CiAKIAlyZXN1bHQgPSBlZWVwY19uZXdfcmZraWxsKCZlaG90ay0+d2xhbl9yZmtpbGwsCiAJCQkJICAiZWVlcGMtd2xhbiIsIGRldiwKQEAgLTExMjAsNiArMTA4NywxMyBAQAogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCiAJCWdvdG8gZXhpdDsKIAorCXJlc3VsdCA9IGVlZXBjX25ld19yZmtpbGwoJmVob3RrLT53aW1heF9yZmtpbGwsCisJCQkJICAiZWVlcGMtd2ltYXgiLCBkZXYsCisJCQkJICBSRktJTExfVFlQRV9XSU1BWCwgQ01fQVNMX1dJTUFYKTsKKworCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCisJCWdvdG8gZXhpdDsKKwogCXJlc3VsdCA9IGVlZXBjX3NldHVwX3BjaV9ob3RwbHVnKCk7CiAJLyoKIAkgKiBJZiB3ZSBnZXQgLUVCVVNZIHRoZW4gc29tZXRoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhlIFBDSSBob3RwbHVnIC0KQEAgLTExMjgsNiArMTEwMiwxNSBAQAogCWlmIChyZXN1bHQgPT0gLUVCVVNZKQogCQlyZXN1bHQgPSAwOwogCisJZWVlcGNfcmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCJcXF9TQi5QQ0kwLlAwUDUiKTsKKwllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNiIpOworCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA3Iik7CisJLyoKKwkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbCBzdGF0ZSB3YXMgY2hhbmdlZCBkdXJpbmcKKwkgKiBzZXR1cC4KKwkgKi8KKwllZWVwY19yZmtpbGxfaG90cGx1ZygpOworCiBleGl0OgogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCiAJCWVlZXBjX3Jma2lsbF9leGl0KCk7CkBAIC0xMTcyLDIxICsxMTU1LDYxIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZWVlcGNfbGFwdG9wX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgZWVlcGNfaW5wdXRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWludCByZXN1bHQ7CisKKwllaG90ay0+aW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWVob3RrLT5pbnB1dGRldikgeworCQlwcl9pbmZvKCJVbmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWVob3RrLT5pbnB1dGRldi0+bmFtZSA9ICJBc3VzIEVlZVBDIGV4dHJhIGJ1dHRvbnMiOworCWVob3RrLT5pbnB1dGRldi0+ZGV2LnBhcmVudCA9IGRldjsKKwllaG90ay0+aW5wdXRkZXYtPnBoeXMgPSBFRUVQQ19IT1RLX0ZJTEUgIi9pbnB1dDAiOworCWVob3RrLT5pbnB1dGRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWVob3RrLT5pbnB1dGRldi0+Z2V0a2V5Y29kZSA9IGVlZXBjX2dldGtleWNvZGU7CisJZWhvdGstPmlucHV0ZGV2LT5zZXRrZXljb2RlID0gZWVlcGNfc2V0a2V5Y29kZTsKKworCWZvciAoa2V5ID0gZWVlcGNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgeworCQlzd2l0Y2ggKGtleS0+dHlwZSkgeworCQljYXNlIEtFX0tFWToKKwkJCXNldF9iaXQoRVZfS0VZLCBlaG90ay0+aW5wdXRkZXYtPmV2Yml0KTsKKwkJCXNldF9iaXQoa2V5LT5rZXljb2RlLCBlaG90ay0+aW5wdXRkZXYtPmtleWJpdCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXN1bHQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZWhvdGstPmlucHV0ZGV2KTsKKwlpZiAocmVzdWx0KSB7CisJCXByX2luZm8oIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlpbnB1dF9mcmVlX2RldmljZShlaG90ay0+aW5wdXRkZXYpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJlc3VsdDsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmVlZXBjX2hvdGtfZHJpdmVyKTsKLQlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKLQlpZiAoIWVob3RrKSB7Ci0JCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHJfbm90aWNlKEVFRVBDX0hPVEtfTkFNRSAiXG4iKTsKKwllaG90ayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZWVwY19ob3RrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlaG90aykKKwkJcmV0dXJuIC1FTk9NRU07CisJZWhvdGstPmluaXRfZmxhZyA9IERJU0FCTEVfQVNMX1dMQU4gfCBESVNBQkxFX0FTTF9ESVNQTEFZU1dJVENIOworCWVob3RrLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBFRUVQQ19IT1RLX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgRUVFUENfSE9US19DTEFTUyk7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVob3RrOworCWVob3RrLT5kZXZpY2UgPSBkZXZpY2U7CiAKKwlyZXN1bHQgPSBlZWVwY19ob3RrX2NoZWNrKCk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX3BsYXRmb3JtX2RyaXZlcjsKIAllZWVwY19lbmFibGVfY2FtZXJhKCk7CiAKIAkvKiBSZWdpc3RlciBwbGF0Zm9ybSBzdHVmZiAqLwpAQCAtMTIxNiw2ICsxMjM5LDEwIEBACiAJCXByX2luZm8oIkJhY2tsaWdodCBjb250cm9sbGVkIGJ5IEFDUEkgdmlkZW8gIgogCQkJImRyaXZlclxuIik7CiAKKwlyZXN1bHQgPSBlZWVwY19pbnB1dF9pbml0KGRldik7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX2lucHV0OworCiAJcmVzdWx0ID0gZWVlcGNfaHdtb25faW5pdChkZXYpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZmFpbF9od21vbjsKQEAgLTEyMjUsOSArMTI1MiwxMiBAQAogCQlnb3RvIGZhaWxfcmZraWxsOwogCiAJcmV0dXJuIDA7CisKIGZhaWxfcmZraWxsOgogCWVlZXBjX2h3bW9uX2V4aXQoKTsKIGZhaWxfaHdtb246CisJZWVlcGNfaW5wdXRfZXhpdCgpOworZmFpbF9pbnB1dDoKIAllZWVwY19iYWNrbGlnaHRfZXhpdCgpOwogZmFpbF9iYWNrbGlnaHQ6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwbGF0Zm9ybV9kZXZpY2UtPmRldi5rb2JqLApAQCAtMTIzOSw5ICsxMjY5LDQ5IEBACiBmYWlsX3BsYXRmb3JtX2RldmljZTE6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CiBmYWlsX3BsYXRmb3JtX2RyaXZlcjoKLQllZWVwY19pbnB1dF9leGl0KCk7CisJa2ZyZWUoZWhvdGspOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludCBlZWVwY19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCit7CisJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZWVwY19iYWNrbGlnaHRfZXhpdCgpOworCWVlZXBjX3Jma2lsbF9leGl0KCk7CisJZWVlcGNfaW5wdXRfZXhpdCgpOworCWVlZXBjX2h3bW9uX2V4aXQoKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBsYXRmb3JtX2RldmljZS0+ZGV2LmtvYmosCisJCQkgICAmcGxhdGZvcm1fYXR0cmlidXRlX2dyb3VwKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwbGF0Zm9ybV9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworCisJa2ZyZWUoZWhvdGspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlZWVwY19sYXB0b3BfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJaWYgKCFlaG90aykgeworCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmZWVlcGNfaG90a19kcml2ZXIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlZWVwY19sYXB0b3BfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7Cit9CisKIG1vZHVsZV9pbml0KGVlZXBjX2xhcHRvcF9pbml0KTsKIG1vZHVsZV9leGl0KGVlZXBjX2xhcHRvcF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IDIxOGI5YTEuLmYzNWFlZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtNjYsMTEgKzY2LDExIEBACiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19vdXRwdXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1MpIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1NfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNlbmRpZgogCi0jZGVmaW5lIEZVSklUU1VfRFJJVkVSX1ZFUlNJT04gIjAuNS4wIgorI2RlZmluZSBGVUpJVFNVX0RSSVZFUl9WRVJTSU9OICIwLjYuMCIKIAogI2RlZmluZSBGVUpJVFNVX0xDRF9OX0xFVkVMUyA4CiAKQEAgLTk2LDcgKzk2LDcgQEAKIC8qIEZVTkMgaW50ZXJmYWNlIC0gcmVzcG9uc2VzICovCiAjZGVmaW5lIFVOU1VQUE9SVEVEX0NNRCAweDgwMDAwMDAwCiAKLSNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1MpIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1NfTU9EVUxFKQogLyogRlVOQyBpbnRlcmZhY2UgLSBMRUQgY29udHJvbCAqLwogI2RlZmluZSBGVU5DX0xFRF9PRkYJMHgxCiAjZGVmaW5lIEZVTkNfTEVEX09OCTB4MzAwMDEKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX2Z1aml0c3VfaG90a2V5X25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KTsKIAotI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTU19NT0RVTEUpCiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBsb2dvbGFtcF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2Rldik7CiBzdGF0aWMgdm9pZCBsb2dvbGFtcF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJcmV0dXJuIG91dF9vYmouaW50ZWdlci52YWx1ZTsKIH0KIAotI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTU19NT0RVTEUpCiAvKiBMRUQgY2xhc3MgY2FsbGJhY2tzICovCiAKIHN0YXRpYyB2b2lkIGxvZ29sYW1wX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LApAQCAtMzI0LDkgKzMyNCw2IEBACiAJaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+PSBmdWppdHN1LT5tYXhfYnJpZ2h0bmVzcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWZ1aml0c3UpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGZ1aml0c3UtPmFjcGlfaGFuZGxlLCAiU0JMTCIsICZoYW5kbGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX0VSUk9SLCAiU0JMTCBub3QgcHJlc2VudFxuIik7CkBAIC0zNTUsOSArMzUyLDYgQEAKIAlpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IGZ1aml0c3UtPm1heF9icmlnaHRuZXNzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghZnVqaXRzdSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZnVqaXRzdS0+YWNwaV9oYW5kbGUsICJTQkwyIiwgJmhhbmRsZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfRVJST1IsICJTQkwyIG5vdCBwcmVzZW50XG4iKTsKQEAgLTY5NywxMCArNjkxLDEwIEBACiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3Bvd2VyKGZ1aml0c3UtPmFjcGlfaGFuZGxlLCAmc3RhdGUpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHBvd2VyIHN0YXRlXG4iKTsKLQkJZ290byBlbmQ7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfaW5wdXRfZGV2OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlcyBbJXNdICglcylcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiQUNQSTogJXMgWyVzXSAoJXMpXG4iLAogCSAgICAgICBhY3BpX2RldmljZV9uYW1lKGRldmljZSksIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLAogCSAgICAgICAhZGV2aWNlLT5wb3dlci5zdGF0ZSA/ICJvbiIgOiAib2ZmIik7CiAKQEAgLTcyOCwyNSArNzIyLDIyIEBACiAKIAlyZXR1cm4gcmVzdWx0OwogCi1lbmQ6CitlcnJfdW5yZWdpc3Rlcl9pbnB1dF9kZXY6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogZXJyX2ZyZWVfaW5wdXRfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIGVycl9zdG9wOgotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX2Z1aml0c3VfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgZnVqaXRzdV90ICpmdWppdHN1ID0gTlVMTDsKKwlzdHJ1Y3QgZnVqaXRzdV90ICpmdWppdHN1ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdS0+aW5wdXQ7CiAKLQlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAKLQlmdWppdHN1ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCi0JaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwogCiAJZnVqaXRzdS0+YWNwaV9oYW5kbGUgPSBOVUxMOwogCkBAIC04NzEsMTAgKzg2MiwxMCBAQAogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9wb3dlcihmdWppdHN1X2hvdGtleS0+YWNwaV9oYW5kbGUsICZzdGF0ZSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgcG93ZXIgc3RhdGVcbiIpOwotCQlnb3RvIGVuZDsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9pbnB1dF9kZXY7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKCVzKVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiAlcyBbJXNdICglcylcbiIsCiAJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSksCiAJICAgICAgICFkZXZpY2UtPnBvd2VyLnN0YXRlID8gIm9uIiA6ICJvZmYiKTsKIApAQCAtOTExLDcgKzkwMiw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiZnVqaXRzdS1sYXB0b3A6IEJUTkk6IFsweCV4XVxuIiwKIAkJY2FsbF9mZXh0X2Z1bmMoRlVOQ19CVVRUT05TLCAweDAsIDB4MCwgMHgwKSk7CiAKLQkjaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTX01PRFVMRSkKIAlpZiAoY2FsbF9mZXh0X2Z1bmMoRlVOQ19MRURTLCAweDAsIDB4MCwgMHgwKSAmIExPR09MQU1QX1BPV0VST04pIHsKIAkJcmVzdWx0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZmdWppdHN1LT5wZl9kZXZpY2UtPmRldiwKIAkJCQkJCSZsb2dvbGFtcF9sZWQpOwpAQCAtOTM0LDMzICs5MjUsNDEgQEAKIAkJCSJMRUQgaGFuZGxlciBmb3Iga2V5Ym9hcmQgbGFtcHMsIGVycm9yICVpXG4iLCByZXN1bHQpOwogCQl9CiAJfQotCSNlbmRpZgorI2VuZGlmCiAKIAlyZXR1cm4gcmVzdWx0OwogCi1lbmQ6CitlcnJfdW5yZWdpc3Rlcl9pbnB1dF9kZXY6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogZXJyX2ZyZWVfaW5wdXRfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIGVycl9mcmVlX2ZpZm86CiAJa2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CiBlcnJfc3RvcDoKLQogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9mdWppdHN1X2hvdGtleV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewotCXN0cnVjdCBmdWppdHN1X2hvdGtleV90ICpmdWppdHN1X2hvdGtleSA9IE5VTEw7CisJc3RydWN0IGZ1aml0c3VfaG90a2V5X3QgKmZ1aml0c3VfaG90a2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdV9ob3RrZXktPmlucHV0OwogCi0JaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisjaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKwlpZiAoZnVqaXRzdV9ob3RrZXktPmxvZ29sYW1wX3JlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOwogCi0JZnVqaXRzdV9ob3RrZXkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJaWYgKGZ1aml0c3VfaG90a2V5LT5rYmxhbXBzX3JlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZrYmxhbXBzX2xlZCk7CisjZW5kaWYKIAotCWZ1aml0c3VfaG90a2V5LT5hY3BpX2hhbmRsZSA9IE5VTEw7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwogCiAJa2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CiAKKwlmdWppdHN1X2hvdGtleS0+YWNwaV9oYW5kbGUgPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMzAsOCArMTEyOSwxMSBAQAogCQlmdWppdHN1LT5ibF9kZXZpY2UgPQogCQkJYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiZnVqaXRzdS1sYXB0b3AiLCBOVUxMLCBOVUxMLAogCQkJCQkJICAmZnVqaXRzdWJsX29wcyk7Ci0JCWlmIChJU19FUlIoZnVqaXRzdS0+YmxfZGV2aWNlKSkKLQkJCXJldHVybiBQVFJfRVJSKGZ1aml0c3UtPmJsX2RldmljZSk7CisJCWlmIChJU19FUlIoZnVqaXRzdS0+YmxfZGV2aWNlKSkgeworCQkJcmV0ID0gUFRSX0VSUihmdWppdHN1LT5ibF9kZXZpY2UpOworCQkJZnVqaXRzdS0+YmxfZGV2aWNlID0gTlVMTDsKKwkJCWdvdG8gZmFpbF9zeXNmc19ncm91cDsKKwkJfQogCQltYXhfYnJpZ2h0bmVzcyA9IGZ1aml0c3UtPm1heF9icmlnaHRuZXNzOwogCQlmdWppdHN1LT5ibF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gbWF4X2JyaWdodG5lc3MgLSAxOwogCQlmdWppdHN1LT5ibF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSBmdWppdHN1LT5icmlnaHRuZXNzX2xldmVsOwpAQCAtMTE3MSwzMiArMTE3MywyMiBAQAogCXJldHVybiAwOwogCiBmYWlsX2hvdGtleTE6Ci0KIAlrZnJlZShmdWppdHN1X2hvdGtleSk7Ci0KIGZhaWxfaG90a2V5OgotCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZ1aml0c3VwZl9kcml2ZXIpOwotCiBmYWlsX2JhY2tsaWdodDoKLQogCWlmIChmdWppdHN1LT5ibF9kZXZpY2UpCiAJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihmdWppdHN1LT5ibF9kZXZpY2UpOwotCitmYWlsX3N5c2ZzX2dyb3VwOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmZnVqaXRzdS0+cGZfZGV2aWNlLT5kZXYua29iaiwKKwkJCSAgICZmdWppdHN1cGZfYXR0cmlidXRlX2dyb3VwKTsKIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjoKLQogCXBsYXRmb3JtX2RldmljZV9kZWwoZnVqaXRzdS0+cGZfZGV2aWNlKTsKLQogZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOgotCiAJcGxhdGZvcm1fZGV2aWNlX3B1dChmdWppdHN1LT5wZl9kZXZpY2UpOwotCiBmYWlsX3BsYXRmb3JtX2RyaXZlcjoKLQogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Z1aml0c3VfZHJpdmVyKTsKLQogZmFpbF9hY3BpOgotCiAJa2ZyZWUoZnVqaXRzdSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTIwNCwyOSArMTE5NiwyNCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZnVqaXRzdV9jbGVhbnVwKHZvaWQpCiB7Ci0JI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCi0JaWYgKGZ1aml0c3VfaG90a2V5LT5sb2dvbGFtcF9yZWdpc3RlcmVkICE9IDApCi0JCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Z1aml0c3VfaG90a2V5X2RyaXZlcik7CiAKLQlpZiAoZnVqaXRzdV9ob3RrZXktPmtibGFtcHNfcmVnaXN0ZXJlZCAhPSAwKQotCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3Rlcigma2JsYW1wc19sZWQpOwotCSNlbmRpZgorCWtmcmVlKGZ1aml0c3VfaG90a2V5KTsKKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmdWppdHN1cGZfZHJpdmVyKTsKKworCWlmIChmdWppdHN1LT5ibF9kZXZpY2UpCisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihmdWppdHN1LT5ibF9kZXZpY2UpOwogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZmdWppdHN1LT5wZl9kZXZpY2UtPmRldi5rb2JqLAogCQkJICAgJmZ1aml0c3VwZl9hdHRyaWJ1dGVfZ3JvdXApOworCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnVqaXRzdS0+cGZfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZnVqaXRzdXBmX2RyaXZlcik7Ci0JaWYgKGZ1aml0c3UtPmJsX2RldmljZSkKLQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGZ1aml0c3UtPmJsX2RldmljZSk7CiAKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9mdWppdHN1X2RyaXZlcik7CiAKIAlrZnJlZShmdWppdHN1KTsKIAotCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Z1aml0c3VfaG90a2V5X2RyaXZlcik7Ci0KLQlrZnJlZShmdWppdHN1X2hvdGtleSk7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJmdWppdHN1LWxhcHRvcDogZHJpdmVyIHVubG9hZGVkLlxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggYWYwNGY1Yi4uYzI4NDIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKQEAgLTUwNyw3ICs1MDcsNyBAQAogCX0KIAlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkgewogCQlyZmtpbGxfdW5yZWdpc3RlcihibHVldG9vdGhfcmZraWxsKTsKLQkJcmZraWxsX2Rlc3Ryb3kod2lmaV9yZmtpbGwpOworCQlyZmtpbGxfZGVzdHJveShibHVldG9vdGhfcmZraWxsKTsKIAl9CiAJaWYgKHd3YW5fcmZraWxsKSB7CiAJCXJma2lsbF91bnJlZ2lzdGVyKHd3YW5fcmZraWxsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IGRhZmFhNGEuLmY5ZjY4ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtOTc2LDE1ICs5NzYsMTIgQEAKIAkJCQkgICAgICB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKQogewogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwogCi0JaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpKSkgewotCQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7Ci0KKwlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9QRlggIm1ldGhvZDogbmFtZTogJTQuNHMsIGFyZ3MgJVhcbiIsCiAJCQkoY2hhciAqKSZpbmZvLT5uYW1lLCBpbmZvLT5wYXJhbV9jb3VudCk7CiAKLQkJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCQlrZnJlZShpbmZvKTsKIAl9CiAKIAlyZXR1cm4gQUVfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZTg1NjAwOC4uZjc4ZDI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMTI3OCw2ICsxMjc4LDcgQEAKIAl0cF9yZmsgPSB0cGFjcGlfcmZraWxsX3N3aXRjaGVzW2lkXTsKIAlpZiAodHBfcmZrKSB7CiAJCXJma2lsbF91bnJlZ2lzdGVyKHRwX3Jmay0+cmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3kodHBfcmZrLT5yZmtpbGwpOwogCQl0cGFjcGlfcmZraWxsX3N3aXRjaGVzW2lkXSA9IE5VTEw7CiAJCWtmcmVlKHRwX3Jmayk7CiAJfQpAQCAtMTYwMSw2ICsxNjAyLDE5NiBAQAogI2VuZGlmCiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaXJtd2FyZSBEYXRhCisgKi8KKworLyoKKyAqIFRhYmxlIG9mIHJlY29tbWVuZGVkIG1pbmltdW0gQklPUyB2ZXJzaW9ucworICoKKyAqIFJlYXNvbnMgZm9yIGxpc3Rpbmc6CisgKiAgICAxLiBTdGFibGUgQklPUywgbGlzdGVkIGJlY2F1c2UgdGhlIHVua25vd24gYW1tb3VudCBvZgorICogICAgICAgYnVncyBhbmQgYmFkIEFDUEkgYmVoYXZpb3VyIG9uIG9sZGVyIHZlcnNpb25zCisgKgorICogICAgMi4gQklPUyBvciBFQyBmdyB3aXRoIGtub3duIGJ1Z3MgdGhhdCB0cmlnZ2VyIG9uIExpbnV4CisgKgorICogICAgMy4gQklPUyB3aXRoIGtub3duIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBpbiBvbGRlciB2ZXJzaW9ucworICoKKyAqICBXZSByZWNvbW1lbmQgdGhlIGxhdGVzdCBCSU9TIGFuZCBFQyB2ZXJzaW9uLgorICogIFdlIG9ubHkgc3VwcG9ydCB0aGUgbGF0ZXN0IEJJT1MgYW5kIEVDIGZ3IHZlcnNpb24gYXMgYSBydWxlLgorICoKKyAqICBTb3VyY2VzOiBJQk0gVGhpbmtQYWQgUHVibGljIFdlYiBEb2N1bWVudHMgKHVwZGF0ZSBjaGFuZ2Vsb2dzKSwKKyAqICBJbmZvcm1hdGlvbiBmcm9tIHVzZXJzIGluIFRoaW5rV2lraQorICoKKyAqICBXQVJOSU5HOiB3ZSB1c2UgdGhpcyB0YWJsZSBhbHNvIHRvIGRldGVjdCB0aGF0IHRoZSBtYWNoaW5lIGlzCisgKiAgYSBUaGlua1BhZCBpbiBzb21lIGNhc2VzLCBzbyBkb24ndCByZW1vdmUgZW50cmllcyBsaWdodGx5LgorICovCisKKyNkZWZpbmUgVFBWX1EoX192LCBfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikJCVwKKwl7IC52ZW5kb3IJPSAoX192KSwJCQlcCisJICAuYmlvcwkJPSBUUElEKF9faWQxLCBfX2lkMiksCQlcCisJICAuZWMJCT0gVFBBQ1BJX01BVENIX0FOWSwJCVwKKwkgIC5xdWlya3MJPSBUUEFDUElfTUFUQ0hfQU5ZIDw8IDE2CVwKKwkJCSAgfCAoX19idjEpIDw8IDggfCAoX19idjIpIH0KKworI2RlZmluZSBUUFZfUV9YKF9fdiwgX19iaWQxLCBfX2JpZDIsIF9fYnYxLCBfX2J2MiwJXAorCQlfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKQkJXAorCXsgLnZlbmRvcgk9IChfX3YpLAkJCVwKKwkgIC5iaW9zCQk9IFRQSUQoX19iaWQxLCBfX2JpZDIpLAkJXAorCSAgLmVjCQk9IFRQSUQoX19laWQxLCBfX2VpZDIpLAkJXAorCSAgLnF1aXJrcwk9IChfX2V2MSkgPDwgMjQgfCAoX19ldjIpIDw8IDE2IFwKKwkJCSAgfCAoX19idjEpIDw8IDggfCAoX19idjIpIH0KKworI2RlZmluZSBUUFZfUUkwKF9faWQxLCBfX2lkMiwgX19idjEsIF9fYnYyKSBcCisJVFBWX1EoUENJX1ZFTkRPUl9JRF9JQk0sIF9faWQxLCBfX2lkMiwgX19idjEsIF9fYnYyKQorCisjZGVmaW5lIFRQVl9RSTEoX19pZDEsIF9faWQyLCBfX2J2MSwgX19idjIsIF9fZXYxLCBfX2V2MikgXAorCVRQVl9RX1goUENJX1ZFTkRPUl9JRF9JQk0sIF9faWQxLCBfX2lkMiwgCVwKKwkJX19idjEsIF9fYnYyLCBfX2lkMSwgX19pZDIsIF9fZXYxLCBfX2V2MikKKworI2RlZmluZSBUUFZfUUkyKF9fYmlkMSwgX19iaWQyLCBfX2J2MSwgX19idjIsCQlcCisJCV9fZWlkMSwgX19laWQyLCBfX2V2MSwgX19ldjIpIAkJXAorCVRQVl9RX1goUENJX1ZFTkRPUl9JRF9JQk0sIF9fYmlkMSwgX19iaWQyLCAJXAorCQlfX2J2MSwgX19idjIsIF9fZWlkMSwgX19laWQyLCBfX2V2MSwgX19ldjIpCisKKyNkZWZpbmUgVFBWX1FMMChfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikgXAorCVRQVl9RKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikKKworI2RlZmluZSBUUFZfUUwxKF9faWQxLCBfX2lkMiwgX19idjEsIF9fYnYyLCBfX2V2MSwgX19ldjIpIFwKKwlUUFZfUV9YKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2lkMSwgX19pZDIsIAlcCisJCV9fYnYxLCBfX2J2MiwgX19pZDEsIF9faWQyLCBfX2V2MSwgX19ldjIpCisKKyNkZWZpbmUgVFBWX1FMMihfX2JpZDEsIF9fYmlkMiwgX19idjEsIF9fYnYyLAkJXAorCQlfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKSAJCVwKKwlUUFZfUV9YKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2JpZDEsIF9fYmlkMiwgCVwKKwkJX19idjEsIF9fYnYyLCBfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwYWNwaV9xdWlyayB0cGFjcGlfYmlvc192ZXJzaW9uX3F0YWJsZVtdIF9faW5pdGNvbnN0ID0geworCS8qICBOdW1lcmljIG1vZGVscyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAgICAgIEZXIE1PREVMICAgQklPUyBWRVJTCSAgICAgICovCisJVFBWX1FJMCgnSScsICdNJywgICc2JywgJzUnKSwJCSAvKiA1NzAgKi8KKwlUUFZfUUkwKCdJJywgJ1UnLCAgJzInLCAnNicpLAkJIC8qIDU3MEUgKi8KKwlUUFZfUUkwKCdJJywgJ0InLCAgJzUnLCAnNCcpLAkJIC8qIDYwMCAqLworCVRQVl9RSTAoJ0knLCAnSCcsICAnNCcsICc3JyksCQkgLyogNjAwRSAqLworCVRQVl9RSTAoJ0knLCAnTicsICAnMycsICc2JyksCQkgLyogNjAwRSAqLworCVRQVl9RSTAoJ0knLCAnVCcsICAnNScsICc1JyksCQkgLyogNjAwWCAqLworCVRQVl9RSTAoJ0knLCAnRCcsICAnNCcsICc4JyksCQkgLyogNzcwLCA3NzBFLCA3NzBFRCAqLworCVRQVl9RSTAoJ0knLCAnSScsICAnNCcsICcyJyksCQkgLyogNzcwWCAqLworCVRQVl9RSTAoJ0knLCAnTycsICAnMicsICczJyksCQkgLyogNzcwWiAqLworCisJLyogQS1zZXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgICAgRlcgTU9ERUwgICBCSU9TIFZFUlMgIEVDIFZFUlMgKi8KKwlUUFZfUUkwKCdJJywgJ1cnLCAgJzUnLCAnOScpLAkJIC8qIEEyMG0gKi8KKwlUUFZfUUkwKCdJJywgJ1YnLCAgJzYnLCAnOScpLAkJIC8qIEEyMHAgKi8KKwlUUFZfUUkwKCcxJywgJzAnLCAgJzInLCAnNicpLAkJIC8qIEEyMWUsIEEyMmUgKi8KKwlUUFZfUUkwKCdLJywgJ1UnLCAgJzMnLCAnNicpLAkJIC8qIEEyMWUgKi8KKwlUUFZfUUkwKCdLJywgJ1gnLCAgJzMnLCAnNicpLAkJIC8qIEEyMW0sIEEyMm0gKi8KKwlUUFZfUUkwKCdLJywgJ1knLCAgJzMnLCAnOCcpLAkJIC8qIEEyMXAsIEEyMnAgKi8KKwlUUFZfUUkwKCcxJywgJ0InLCAgJzEnLCAnNycpLAkJIC8qIEEyMmUgKi8KKwlUUFZfUUkwKCcxJywgJzMnLCAgJzInLCAnMCcpLAkJIC8qIEEyMm0gKi8KKwlUUFZfUUkwKCcxJywgJ0UnLCAgJzcnLCAnMycpLAkJIC8qIEEzMC9wICgwKSAqLworCVRQVl9RSTEoJzEnLCAnRycsICAnNCcsICcxJywgICcxJywgJzcnKSwgLyogQTMxL3AgKDApICovCisJVFBWX1FJMSgnMScsICdOJywgICcxJywgJzYnLCAgJzAnLCAnNycpLCAvKiBBMzEvcCAoMCkgKi8KKworCS8qIEctc2VyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAgICAgIEZXIE1PREVMICAgQklPUyBWRVJTCSAgICAgICovCisJVFBWX1FJMCgnMScsICdUJywgICdBJywgJzYnKSwJCSAvKiBHNDAgKi8KKwlUUFZfUUkwKCcxJywgJ1gnLCAgJzUnLCAnNycpLAkJIC8qIEc0MSAqLworCisJLyogUi1zZXJpZXMsIFQtc2VyaWVzIC0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgICAgRlcgTU9ERUwgICBCSU9TIFZFUlMgIEVDIFZFUlMgKi8KKwlUUFZfUUkwKCcxJywgJ0MnLCAgJ0YnLCAnMCcpLAkJIC8qIFIzMCAqLworCVRQVl9RSTAoJzEnLCAnRicsICAnRicsICcxJyksCQkgLyogUjMxICovCisJVFBWX1FJMCgnMScsICdNJywgICc5JywgJzcnKSwJCSAvKiBSMzIgKi8KKwlUUFZfUUkwKCcxJywgJ08nLCAgJzYnLCAnMScpLAkJIC8qIFI0MCAqLworCVRQVl9RSTAoJzEnLCAnUCcsICAnNicsICc1JyksCQkgLyogUjQwICovCisJVFBWX1FJMCgnMScsICdTJywgICc3JywgJzAnKSwJCSAvKiBSNDBlICovCisJVFBWX1FJMSgnMScsICdSJywgICdEJywgJ1InLCAgJzcnLCAnMScpLCAvKiBSNTAvcCwgUjUxLAorCQkJCQkJICAgIFQ0MC9wLCBUNDEvcCwgVDQyL3AgKDEpICovCisJVFBWX1FJMSgnMScsICdWJywgICc3JywgJzEnLCAgJzInLCAnOCcpLCAvKiBSNTBlLCBSNTEgKDEpICovCisJVFBWX1FJMSgnNycsICc4JywgICc3JywgJzEnLCAgJzAnLCAnNicpLCAvKiBSNTFlICgxKSAqLworCVRQVl9RSTEoJzcnLCAnNicsICAnNicsICc5JywgICcxJywgJzYnKSwgLyogUjUyICgxKSAqLworCVRQVl9RSTEoJzcnLCAnMCcsICAnNicsICc5JywgICcyJywgJzgnKSwgLyogUjUyLCBUNDMgKDEpICovCisKKwlUUFZfUUkwKCdJJywgJ1knLCAgJzYnLCAnMScpLAkJIC8qIFQyMCAqLworCVRQVl9RSTAoJ0snLCAnWicsICAnMycsICc0JyksCQkgLyogVDIxICovCisJVFBWX1FJMCgnMScsICc2JywgICczJywgJzInKSwJCSAvKiBUMjIgKi8KKwlUUFZfUUkxKCcxJywgJ0EnLCAgJzYnLCAnNCcsICAnMicsICczJyksIC8qIFQyMyAoMCkgKi8KKwlUUFZfUUkxKCcxJywgJ0knLCAgJzcnLCAnMScsICAnMicsICcwJyksIC8qIFQzMCAoMCkgKi8KKwlUUFZfUUkxKCcxJywgJ1knLCAgJzYnLCAnNScsICAnMicsICc5JyksIC8qIFQ0My9wICgxKSAqLworCisJVFBWX1FMMSgnNycsICc5JywgICdFJywgJzMnLCAgJzUnLCAnMCcpLCAvKiBUNjAvcCAqLworCVRQVl9RTDEoJzcnLCAnQycsICAnRCcsICcyJywgICcyJywgJzInKSwgLyogUjYwLCBSNjBpICovCisJVFBWX1FMMCgnNycsICdFJywgICdEJywgJzAnKSwJCSAvKiBSNjBlLCBSNjBpICovCisKKwkvKiAgICAgIEJJT1MgRlcgICAgQklPUyBWRVJTICBFQyBGVyAgICAgRUMgVkVSUyAqLworCVRQVl9RSTIoJzEnLCAnVycsICAnOScsICcwJywgICcxJywgJ1YnLCAnMicsICc4JyksIC8qIFI1MGUgKDEpICovCisJVFBWX1FMMignNycsICdJJywgICczJywgJzQnLCAgJzcnLCAnOScsICc1JywgJzAnKSwgLyogVDYwL3Agd2lkZSAqLworCisJLyogWC1zZXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgICAgRlcgTU9ERUwgICBCSU9TIFZFUlMgIEVDIFZFUlMgKi8KKwlUUFZfUUkwKCdJJywgJ1onLCAgJzknLCAnRCcpLAkJIC8qIFgyMCwgWDIxICovCisJVFBWX1FJMCgnMScsICdEJywgICc3JywgJzAnKSwJCSAvKiBYMjIsIFgyMywgWDI0ICovCisJVFBWX1FJMSgnMScsICdLJywgICc0JywgJzgnLCAgJzEnLCAnOCcpLCAvKiBYMzAgKDApICovCisJVFBWX1FJMSgnMScsICdRJywgICc5JywgJzcnLCAgJzInLCAnMycpLCAvKiBYMzEsIFgzMiAoMCkgKi8KKwlUUFZfUUkxKCcxJywgJ1UnLCAgJ0QnLCAnMycsICAnQicsICcyJyksIC8qIFg0MCAoMCkgKi8KKwlUUFZfUUkxKCc3JywgJzQnLCAgJzYnLCAnNCcsICAnMicsICc3JyksIC8qIFg0MSAoMCkgKi8KKwlUUFZfUUkxKCc3JywgJzUnLCAgJzYnLCAnMCcsICAnMicsICcwJyksIC8qIFg0MXQgKDApICovCisKKwlUUFZfUUwwKCc3JywgJ0InLCAgJ0QnLCAnNycpLAkJIC8qIFg2MC9zICovCisJVFBWX1FMMCgnNycsICdKJywgICczJywgJzAnKSwJCSAvKiBYNjB0ICovCisKKwkvKiAoMCkgLSBvbGRlciB2ZXJzaW9ucyBsYWNrIERNSSBFQyBmdyBzdHJpbmcgYW5kIGZ1bmN0aW9uYWxpdHkgKi8KKwkvKiAoMSkgLSBvbGRlciB2ZXJzaW9ucyBrbm93biB0byBsYWNrIGZ1bmN0aW9uYWxpdHkgKi8KK307CisKKyN1bmRlZiBUUFZfUUwxCisjdW5kZWYgVFBWX1FMMAorI3VuZGVmIFRQVl9RSTIKKyN1bmRlZiBUUFZfUUkxCisjdW5kZWYgVFBWX1FJMAorI3VuZGVmIFRQVl9RX1gKKyN1bmRlZiBUUFZfUQorCitzdGF0aWMgdm9pZCBfX2luaXQgdHBhY3BpX2NoZWNrX291dGRhdGVkX2Z3KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmd3ZlcnM7CisJdTE2IGVjX3ZlcnNpb24sIGJpb3NfdmVyc2lvbjsKKworCWZ3dmVycyA9IHRwYWNwaV9jaGVja19xdWlya3ModHBhY3BpX2Jpb3NfdmVyc2lvbl9xdGFibGUsCisJCQkJQVJSQVlfU0laRSh0cGFjcGlfYmlvc192ZXJzaW9uX3F0YWJsZSkpOworCisJaWYgKCFmd3ZlcnMpCisJCXJldHVybjsKKworCWJpb3NfdmVyc2lvbiA9IGZ3dmVycyAmIDB4ZmZmZlU7CisJZWNfdmVyc2lvbiA9IChmd3ZlcnMgPj4gMTYpICYgMHhmZmZmVTsKKworCS8qIG5vdGUgdGhhdCB1bmtub3duIHZlcnNpb25zIGFyZSBzZXQgdG8gMHgwMDAwIGFuZCB3ZSB1c2UgdGhhdCAqLworCWlmICgoYmlvc192ZXJzaW9uID4gdGhpbmtwYWRfaWQuYmlvc19yZWxlYXNlKSB8fAorCSAgICAoZWNfdmVyc2lvbiA+IHRoaW5rcGFkX2lkLmVjX3JlbGVhc2UgJiYKKwkJCQllY192ZXJzaW9uICE9IFRQQUNQSV9NQVRDSF9BTlkpKSB7CisJCS8qCisJCSAqIFRoZSBjaGFuZ2Vsb2dzIHdvdWxkIGxldCB1cyB0cmFjayBkb3duIHRoZSBleGFjdAorCQkgKiByZWFzb24sIGJ1dCBpdCBpcyBqdXN0IHRvbyBtdWNoIG9mIGEgcGFpbiB0byB0cmFjaworCQkgKiBpdC4gIFdlIG9ubHkgbGlzdCBCSU9TZXMgdGhhdCBhcmUgZWl0aGVyIHJlYWxseQorCQkgKiBicm9rZW4sIG9yIHJlYWxseSBzdGFibGUgdG8gYmVnaW4gd2l0aCwgc28gaXQgaXMKKwkJICogYmVzdCBpZiB0aGUgdXNlciB1cGdyYWRlcyB0aGUgZmlybXdhcmUgYW55d2F5LgorCQkgKi8KKwkJcHJpbnRrKFRQQUNQSV9XQVJOCisJCQkiV0FSTklORzogT3V0ZGF0ZWQgVGhpbmtQYWQgQklPUy9FQyBmaXJtd2FyZVxuIik7CisJCXByaW50ayhUUEFDUElfV0FSTgorCQkJIldBUk5JTkc6IFRoaXMgZmlybXdhcmUgbWF5IGJlIG1pc3NpbmcgY3JpdGljYWwgYnVnICIKKwkJCSJmaXhlcyBhbmQvb3IgaW1wb3J0YW50IGZlYXR1cmVzXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIF9faW5pdCB0cGFjcGlfaXNfZndfa25vd24odm9pZCkKK3sKKwlyZXR1cm4gdHBhY3BpX2NoZWNrX3F1aXJrcyh0cGFjcGlfYmlvc192ZXJzaW9uX3F0YWJsZSwKKwkJCUFSUkFZX1NJWkUodHBhY3BpX2Jpb3NfdmVyc2lvbl9xdGFibGUpKSAhPSAwOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNjM0LDYgKzE4MjUsNyBAQAogCQkJKHRoaW5rcGFkX2lkLm51bW1vZGVsX3N0cikgPwogCQkJCXRoaW5rcGFkX2lkLm51bW1vZGVsX3N0ciA6ICJ1bmtub3duIik7CiAKKwl0cGFjcGlfY2hlY2tfb3V0ZGF0ZWRfZncoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTczMSwxNiArMTkyMyw0MiBAQAogICAgICAgIHU4IHZvbHVtZV9sZXZlbDsKIH07CiAKKy8qIGt0aHJlYWQgZm9yIHRoZSBob3RrZXkgcG9sbGVyICovCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICp0cGFjcGlfaG90a2V5X3Rhc2s7Ci1zdGF0aWMgdTMyIGhvdGtleV9zb3VyY2VfbWFzazsJCS8qIGJpdCBtYXNrIDA9QUNQSSwxPU5WUkFNICovCi1zdGF0aWMgaW50IGhvdGtleV9wb2xsX2ZyZXEgPSAxMDsJLyogSHogKi8KKworLyogQWNxdWlyZWQgd2hpbGUgdGhlIHBvbGxlciBrdGhyZWFkIGlzIHJ1bm5pbmcsIHVzZSB0byBzeW5jIHN0YXJ0L3N0b3AgKi8KIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggaG90a2V5X3RocmVhZF9tdXRleDsKKworLyoKKyAqIEFjcXVpcmUgbXV0ZXggdG8gd3JpdGUgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzLgorICogSW5jcmVtZW50IGhvdGtleV9jb25maWdfY2hhbmdlIHdoZW4gY2hhbmdpbmcgdGhlbS4KKyAqCisgKiBTZWUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVC9IT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorICovCiBzdGF0aWMgc3RydWN0IG11dGV4IGhvdGtleV90aHJlYWRfZGF0YV9tdXRleDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG90a2V5X2NvbmZpZ19jaGFuZ2U7CiAKKy8qCisgKiBob3RrZXkgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzCisgKgorICogTXVzdCBiZSBhdG9taWMgb3IgcmVhZGVycyB3aWxsIGFsc28gbmVlZCB0byBhY3F1aXJlIG11dGV4CisgKi8KK3N0YXRpYyB1MzIgaG90a2V5X3NvdXJjZV9tYXNrOwkJLyogYml0IG1hc2sgMD1BQ1BJLDE9TlZSQU0gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaG90a2V5X3BvbGxfZnJlcSA9IDEwOyAvKiBIeiAqLworCisjZGVmaW5lIEhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQgXAorCWRvIHsgXAorCQltdXRleF9sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOyBcCisJCWhvdGtleV9jb25maWdfY2hhbmdlKys7IFwKKwl9IHdoaWxlICgwKTsKKyNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQgXAorCW11dGV4X3VubG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKKwogI2Vsc2UgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KIAogI2RlZmluZSBob3RrZXlfc291cmNlX21hc2sgMFUKKyNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAorI2RlZmluZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAogCiAjZW5kaWYgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KIApAQCAtMTc2NSwxOSArMTk4Myw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX3NldCAqaG90a2V5X2Rldl9hdHRyaWJ1dGVzOwogCi0jaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLSNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVCBcCi0JZG8geyBcCi0JCW11dGV4X2xvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7IFwKLQkJaG90a2V5X2NvbmZpZ19jaGFuZ2UrKzsgXAotCX0gd2hpbGUgKDApOwotI2RlZmluZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORCBcCi0JbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwotI2Vsc2UKLSNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAotI2RlZmluZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAotI2VuZGlmIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCi0KIC8qIEhLRVkuTUhLRygpIHJldHVybiBiaXRzICovCiAjZGVmaW5lIFRQX0hPVEtFWV9UQUJMRVRfTUFTSyAoMSA8PCAzKQogCkBAIC0xODIyLDcgKzIwMjcsOSBAQAogCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZtLCAiREhLTiIsICJkIikpCiAJCQlyZXR1cm4gLUVJTzsKIAl9CisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAogCWhvdGtleV9tYXNrID0gbSB8IChob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfbWFzayk7CisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKIAogCXJldHVybiAwOwogfQpAQCAtMjA3NSw2ICsyMjgyLDcgQEAKIAl1bnNpZ25lZCBpbnQgc2ksIHNvOwogCXVuc2lnbmVkIGxvbmcgdDsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2RldGVjdG9yLCBtdXN0X3Jlc2V0OworCXVuc2lnbmVkIGludCBwb2xsX2ZyZXE7CiAKIAltdXRleF9sb2NrKCZob3RrZXlfdGhyZWFkX211dGV4KTsKIApAQCAtMjA5MSwxMiArMjI5OSwxNyBAQAogCW11dGV4X2xvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7CiAJY2hhbmdlX2RldGVjdG9yID0gaG90a2V5X2NvbmZpZ19jaGFuZ2U7CiAJbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCXBvbGxfZnJlcSA9IGhvdGtleV9wb2xsX2ZyZXE7CiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwogCWhvdGtleV9yZWFkX252cmFtKCZzW3NvXSwgbWFzayk7CiAKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiBob3RrZXlfcG9sbF9mcmVxKSB7Ci0JCWlmICh0ID09IDApCi0JCQl0ID0gMTAwMC9ob3RrZXlfcG9sbF9mcmVxOworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWlmICh0ID09IDApIHsKKwkJCWlmIChsaWtlbHkocG9sbF9mcmVxKSkKKwkJCQl0ID0gMTAwMC9wb2xsX2ZyZXE7CisJCQllbHNlCisJCQkJdCA9IDEwMDsJLyogc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLworCQl9CiAJCXQgPSBtc2xlZXBfaW50ZXJydXB0aWJsZSh0KTsKIAkJaWYgKHVubGlrZWx5KGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpCiAJCQlicmVhazsKQEAgLTIxMTIsNiArMjMyNSw3IEBACiAJCQljaGFuZ2VfZGV0ZWN0b3IgPSBob3RrZXlfY29uZmlnX2NoYW5nZTsKIAkJfQogCQltYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJCXBvbGxfZnJlcSA9IGhvdGtleV9wb2xsX2ZyZXE7CiAJCW11dGV4X3VubG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKIAogCQlpZiAobGlrZWx5KG1hc2spKSB7CkBAIC0yMTMxLDYgKzIzNDUsNyBAQAogCXJldHVybiAwOwogfQogCisvKiBjYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQgKi8KIHN0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3N0b3Bfc3luYyh2b2lkKQogewogCWlmICh0cGFjcGlfaG90a2V5X3Rhc2spIHsKQEAgLTIxNDcsMTAgKzIzNjIsMTEgQEAKIH0KIAogLyogY2FsbCB3aXRoIGhvdGtleV9tdXRleCBoZWxkICovCi1zdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cChpbnQgbWF5X3dhcm4pCitzdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cChib29sIG1heV93YXJuKQogewotCWlmICgoaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2spICE9IDAgJiYKLQkgICAgaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKKwl1MzIgaG90a2V5c190b19wb2xsID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisKKwlpZiAoaG90a2V5c190b19wb2xsICE9IDAgJiYgaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKIAkgICAgKHRwYWNwaV9pbnB1dGRldi0+dXNlcnMgPiAwIHx8IGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpKSB7CiAJCWlmICghdHBhY3BpX2hvdGtleV90YXNrKSB7CiAJCQl0cGFjcGlfaG90a2V5X3Rhc2sgPSBrdGhyZWFkX3J1bihob3RrZXlfa3RocmVhZCwKQEAgLTIxNjQsMjYgKzIzODAsMzcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWhvdGtleV9wb2xsX3N0b3Bfc3luYygpOwotCQlpZiAobWF5X3dhcm4gJiYKLQkJICAgIGhvdGtleV9zb3VyY2VfbWFzayAhPSAwICYmIGhvdGtleV9wb2xsX2ZyZXEgPT0gMCkgeworCQlpZiAobWF5X3dhcm4gJiYgaG90a2V5c190b19wb2xsICE9IDAgJiYKKwkJICAgIGhvdGtleV9wb2xsX2ZyZXEgPT0gMCkgewogCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKIAkJCQkiaG90IGtleXMgMHglMDh4IHJlcXVpcmUgcG9sbGluZywgIgogCQkJCSJ3aGljaCBpcyBjdXJyZW50bHkgZGlzYWJsZWRcbiIsCi0JCQkJaG90a2V5X3NvdXJjZV9tYXNrKTsKKwkJCQlob3RrZXlzX3RvX3BvbGwpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGludCBtYXlfd2FybikKK3N0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwX3NhZmUoYm9vbCBtYXlfd2FybikKIHsKIAltdXRleF9sb2NrKCZob3RrZXlfbXV0ZXgpOwogCWhvdGtleV9wb2xsX3NldHVwKG1heV93YXJuKTsKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiB9CiAKKy8qIGNhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZCAqLworc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0X2ZyZXEodW5zaWduZWQgaW50IGZyZXEpCit7CisJaWYgKCFmcmVxKQorCQlob3RrZXlfcG9sbF9zdG9wX3N5bmMoKTsKKworCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKKwlob3RrZXlfcG9sbF9mcmVxID0gZnJlcTsKKwlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorfQorCiAjZWxzZSAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTCAqLwogCi1zdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGludCBfX3VudXNlZCkKK3N0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwX3NhZmUoYm9vbCBfX3VudXNlZCkKIHsKIH0KIApAQCAtMjIwMSw3ICsyNDI4LDcgQEAKIAljYXNlIFRQQUNQSV9MSUZFX0VYSVRJTkc6CiAJCXJldHVybiAtRUJVU1k7CiAJY2FzZSBUUEFDUElfTElGRV9SVU5OSU5HOgotCQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKDApOworCQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGZhbHNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjE0LDcgKzI0NDEsNyBAQAogewogCS8qIGRpc2FibGUgaG90a2V5IHBvbGxpbmcgd2hlbiBwb3NzaWJsZSAqLwogCWlmICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcpCi0JCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoMCk7CisJCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoZmFsc2UpOwogfQogCiAvKiBzeXNmcyBob3RrZXkgZW5hYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIyODgsNyArMjUxNSw3IEBACiAJcmVzID0gaG90a2V5X21hc2tfc2V0KHQpOwogCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLQlob3RrZXlfcG9sbF9zZXR1cCgxKTsKKwlob3RrZXlfcG9sbF9zZXR1cCh0cnVlKTsKICNlbmRpZgogCiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwpAQCAtMjMxOCw2ICsyNTQ1LDggQEAKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogeworCXByaW50a19kZXByZWNhdGVkX2F0dHJpYnV0ZSgiaG90a2V5X2Jpb3NfbWFzayIsCisJCQkiVGhpcyBhdHRyaWJ1dGUgaXMgdXNlbGVzcy4iKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwOHhcbiIsIGhvdGtleV9vcmlnX21hc2spOwogfQogCkBAIC0yMzc3LDcgKzI2MDYsOCBAQAogCWhvdGtleV9zb3VyY2VfbWFzayA9IHQ7CiAJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKIAotCWhvdGtleV9wb2xsX3NldHVwKDEpOworCWhvdGtleV9wb2xsX3NldHVwKHRydWUpOworCWhvdGtleV9tYXNrX3NldChob3RrZXlfbWFzayk7CiAKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiAKQEAgLTI0MTAsOSArMjY0MCw5IEBACiAJaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlob3RrZXlfcG9sbF9mcmVxID0gdDsKKwlob3RrZXlfcG9sbF9zZXRfZnJlcSh0KTsKKwlob3RrZXlfcG9sbF9zZXR1cCh0cnVlKTsKIAotCWhvdGtleV9wb2xsX3NldHVwKDEpOwogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAogCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiaG90a2V5X3BvbGxfZnJlcSIsICJzZXQgdG8gJWx1XG4iLCB0KTsKQEAgLTI2MDMsNyArMjgzMyw5IEBACiBzdGF0aWMgdm9pZCBob3RrZXlfZXhpdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCisJbXV0ZXhfbG9jaygmaG90a2V5X211dGV4KTsKIAlob3RrZXlfcG9sbF9zdG9wX3N5bmMoKTsKKwltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiAjZW5kaWYKIAogCWlmIChob3RrZXlfZGV2X2F0dHJpYnV0ZXMpCkBAIC0yNjIzLDYgKzI4NTUsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBob3RrZXlfdW5tYXAoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQoreworCWlmIChob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdICE9IEtFWV9SRVNFUlZFRCkgeworCQljbGVhcl9iaXQoaG90a2V5X2tleWNvZGVfbWFwW3NjYW5jb2RlXSwKKwkJCSAgdHBhY3BpX2lucHV0ZGV2LT5rZXliaXQpOworCQlob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdID0gS0VZX1JFU0VSVkVEOworCX0KK30KKwogc3RhdGljIGludCBfX2luaXQgaG90a2V5X2luaXQoc3RydWN0IGlibV9pbml0X3N0cnVjdCAqaWlibSkKIHsKIAkvKiBSZXF1aXJlbWVudHMgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0IGtleW1hcHM6CkBAIC0yNzAxLDExICsyOTQyLDExIEBACiAJCUtFWV9VTktOT1dOLAkvKiAweDBEOiBGTitJTlNFUlQgKi8KIAkJS0VZX1VOS05PV04sCS8qIDB4MEU6IEZOK0RFTEVURSAqLwogCi0JCS8qIFRoZXNlIGVpdGhlciBoYXZlIHRvIGdvIHRocm91Z2ggQUNQSSB2aWRlbywgb3IKLQkJICogYWN0IGxpa2UgaW4gdGhlIElCTSBUaGlua1BhZHMsIHNvIGRvbid0IGV2ZXIKLQkJICogZW5hYmxlIHRoZW0gYnkgZGVmYXVsdCAqLwotCQlLRVlfUkVTRVJWRUQsCS8qIDB4MEY6IEZOK0hPTUUgKGJyaWdodG5lc3MgdXApICovCi0JCUtFWV9SRVNFUlZFRCwJLyogMHgxMDogRk4rRU5EIChicmlnaHRuZXNzIGRvd24pICovCisJCS8qIFRoZXNlIHNob3VsZCBiZSBlbmFibGVkIC0tb25seS0tIHdoZW4gQUNQSSB2aWRlbworCQkgKiBpcyBkaXNhYmxlZCAoaS5lLiBpbiAidmVuZG9yIiBtb2RlKSwgYW5kIGFyZSBoYW5kbGVkCisJCSAqIGluIGEgc3BlY2lhbCB3YXkgYnkgdGhlIGluaXQgY29kZSAqLworCQlLRVlfQlJJR0hUTkVTU1VQLAkvKiAweDBGOiBGTitIT01FIChicmlnaHRuZXNzIHVwKSAqLworCQlLRVlfQlJJR0hUTkVTU0RPV04sCS8qIDB4MTA6IEZOK0VORCAoYnJpZ2h0bmVzcyBkb3duKSAqLwogCiAJCUtFWV9SRVNFUlZFRCwJLyogMHgxMTogRk4rUEdVUCAodGhpbmtsaWdodCB0b2dnbGUpICovCiAKQEAgLTI4MzEsMTkgKzMwNzIsNiBAQAogCQkJZ290byBlcnJfZXhpdDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKLQkJCQkJJiB+aG90a2V5X2FsbF9tYXNrOwotCX0gZWxzZSB7Ci0JCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSzsKLQl9Ci0KLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCi0JCSAgICAiaG90a2V5IHNvdXJjZSBtYXNrIDB4JTA4eCwgcG9sbGluZyBmcmVxICVkXG4iLAotCQkgICAgaG90a2V5X3NvdXJjZV9tYXNrLCBob3RrZXlfcG9sbF9mcmVxKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUdGQUNJTElUSUVTCiAJaWYgKGRiZ193bHN3ZW11bCkgewogCQl0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdyA9IDE7CkBAIC0yOTQ0LDE3ICszMTcyLDMxIEBACiAJCSAgICAgICAiRGlzYWJsaW5nIHRoaW5rcGFkLWFjcGkgYnJpZ2h0bmVzcyBldmVudHMgIgogCQkgICAgICAgImJ5IGRlZmF1bHQuLi5cbiIpOwogCi0JCS8qIFRoZSBob3RrZXlfcmVzZXJ2ZWRfbWFzayBjaGFuZ2UgYmVsb3cgaXMgbm90Ci0JCSAqIG5lY2Vzc2FyeSB3aGlsZSB0aGUga2V5cyBhcmUgYXQgS0VZX1JFU0VSVkVEIGluIHRoZQotCQkgKiBkZWZhdWx0IG1hcCwgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnksIGxlYXZlIGl0Ci0JCSAqIGhlcmUgYXMgYSBtYXJrZXIgb2Ygd2hhdCB3ZSBoYXZlIHRvIGRvLCBlc3BlY2lhbGx5Ci0JCSAqIHdoZW4gd2UgZmluYWxseSBiZWNvbWUgYWJsZSB0byBzZXQgdGhpcyBhdCBydW50aW1lCi0JCSAqIG9uIHJlc3BvbnNlIHRvIFgub3JnIHJlcXVlc3RzICovCisJCS8qIERpc2FibGUgYnJpZ2h0bmVzcyB1cC9kb3duIG9uIExlbm92byB0aGlua3BhZHMgd2hlbgorCQkgKiBBQ1BJIGlzIGhhbmRsaW5nIHRoZW0sIG90aGVyd2lzZSBpdCBpcyBwbGFpbiBpbXBvc3NpYmxlCisJCSAqIGZvciB1c2Vyc3BhY2UgdG8gZG8gc29tZXRoaW5nIGV2ZW4gcmVtb3RlbHkgc2FuZSAqLwogCQlob3RrZXlfcmVzZXJ2ZWRfbWFzayB8PQogCQkJKDEgPDwgVFBfQUNQSV9IT1RLRVlTQ0FOX0ZOSE9NRSkKIAkJCXwgKDEgPDwgVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORU5EKTsKKwkJaG90a2V5X3VubWFwKFRQX0FDUElfSE9US0VZU0NBTl9GTkhPTUUpOworCQlob3RrZXlfdW5tYXAoVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORU5EKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAorCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgeworCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKKwkJCQkJJiB+aG90a2V5X2FsbF9tYXNrCisJCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOworCX0gZWxzZSB7CisJCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSworCQkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKKwl9CisKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSAgICAiaG90a2V5IHNvdXJjZSBtYXNrIDB4JTA4eCwgcG9sbGluZyBmcmVxICV1XG4iLAorCQkgICAgaG90a2V5X3NvdXJjZV9tYXNrLCBob3RrZXlfcG9sbF9mcmVxKTsKKyNlbmRpZgorCiAJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkiZW5hYmxpbmcgZmlybXdhcmUgSEtFWSBldmVudCBpbnRlcmZhY2UuLi5cbiIpOwogCXJlcyA9IGhvdGtleV9zdGF0dXNfc2V0KHRydWUpOwpAQCAtMjk3OCw3ICszMjIwLDcgQEAKIAl0cGFjcGlfaW5wdXRkZXYtPm9wZW4gPSAmaG90a2V5X2lucHV0ZGV2X29wZW47CiAJdHBhY3BpX2lucHV0ZGV2LT5jbG9zZSA9ICZob3RrZXlfaW5wdXRkZXZfY2xvc2U7CiAKLQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKDEpOworCWhvdGtleV9wb2xsX3NldHVwX3NhZmUodHJ1ZSk7CiAJdHBhY3BpX3NlbmRfcmFkaW9zd191cGRhdGUoKTsKIAl0cGFjcGlfaW5wdXRfc2VuZF90YWJsZXRzdygpOwogCkBAIC0zMjY2LDcgKzM1MDgsNyBAQAogCWhvdGtleV90YWJsZXRfbW9kZV9ub3RpZnlfY2hhbmdlKCk7CiAJaG90a2V5X3dha2V1cF9yZWFzb25fbm90aWZ5X2NoYW5nZSgpOwogCWhvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlX25vdGlmeV9jaGFuZ2UoKTsKLQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKDApOworCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoZmFsc2UpOwogfQogCiAvKiBwcm9jZnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMzMzgsNyArMzU4MCw4IEBACiAJCQlob3RrZXlfZW5hYmxlZGlzYWJsZV93YXJuKDApOwogCQkJcmVzID0gLUVQRVJNOwogCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJyZXNldCIpID09IDApIHsKLQkJCW1hc2sgPSBob3RrZXlfb3JpZ19tYXNrOworCQkJbWFzayA9IChob3RrZXlfYWxsX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spCisJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7CiAJCX0gZWxzZSBpZiAoc3NjYW5mKGNtZCwgIjB4JXgiLCAmbWFzaykgPT0gMSkgewogCQkJLyogbWFzayBzZXQgKi8KIAkJfSBlbHNlIGlmIChzc2NhbmYoY21kLCAiJXgiLCAmbWFzaykgPT0gMSkgewpAQCAtNTY1NSwxNiArNTg5OCwxNiBAQAogCS8qIE1vZGVscyB3aXRoIEFUSSBHUFVzIGtub3duIHRvIHJlcXVpcmUgRUNOVlJBTSBtb2RlICovCiAJVFBBQ1BJX1FfSUJNKCcxJywgJ1knLCBUUEFDUElfQlJHSFRfUV9FQyksCS8qIFQ0My9wIEFUSSAqLwogCi0JLyogTW9kZWxzIHdpdGggQVRJIEdQVXMgKHdhaXRpbmcgY29uZmlybWF0aW9uKSAqLwotCVRQQUNQSV9RX0lCTSgnMScsICdSJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKKwkvKiBNb2RlbHMgd2l0aCBBVEkgR1BVcyB0aGF0IGNhbiB1c2UgRUNOVlJBTSAqLworCVRQQUNQSV9RX0lCTSgnMScsICdSJywgVFBBQ1BJX0JSR0hUX1FfRUMpLAogCVRQQUNQSV9RX0lCTSgnMScsICdRJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKIAlUUEFDUElfUV9JQk0oJzcnLCAnNicsIFRQQUNQSV9CUkdIVF9RX0FTS3xUUEFDUElfQlJHSFRfUV9FQyksCiAJVFBBQ1BJX1FfSUJNKCc3JywgJzgnLCBUUEFDUElfQlJHSFRfUV9BU0t8VFBBQ1BJX0JSR0hUX1FfRUMpLAogCi0JLyogTW9kZWxzIHdpdGggSW50ZWwgRXh0cmVtZSBHcmFwaGljcyAyICh3YWl0aW5nIGNvbmZpcm1hdGlvbikgKi8KKwkvKiBNb2RlbHMgd2l0aCBJbnRlbCBFeHRyZW1lIEdyYXBoaWNzIDIgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnVScsIFRQQUNQSV9CUkdIVF9RX05PRUMpLAogCVRQQUNQSV9RX0lCTSgnMScsICdWJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAogCVRQQUNQSV9RX0lCTSgnMScsICdXJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAotCVRQQUNQSV9RX0lCTSgnMScsICdVJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAogCiAJLyogTW9kZWxzIHdpdGggSW50ZWwgR01BOTAwICovCiAJVFBBQ1BJX1FfSUJNKCc3JywgJzAnLCBUUEFDUElfQlJHSFRfUV9OT0VDKSwJLyogVDQzLCBSNTIgKi8KQEAgLTc1MjQsOSArNzc2NywxMSBAQAogCiAJLyoKIAkgKiBOb24tYW5jaWVudCBtb2RlbHMgaGF2ZSBiZXR0ZXIgRE1JIHRhZ2dpbmcsIGJ1dCB2ZXJ5IG9sZCBtb2RlbHMKLQkgKiBkb24ndC4KKwkgKiBkb24ndC4gIHRwYWNwaV9pc19md19rbm93bigpIGlzIGEgY2hlYXQgdG8gaGVscCBpbiB0aGF0IGNhc2UuCiAJICovCi0JaXNfdGhpbmtwYWQgPSAodGhpbmtwYWRfaWQubW9kZWxfc3RyICE9IE5VTEwpOworCWlzX3RoaW5rcGFkID0gKHRoaW5rcGFkX2lkLm1vZGVsX3N0ciAhPSBOVUxMKSB8fAorCQkgICAgICAodGhpbmtwYWRfaWQuZWNfbW9kZWwgIT0gMCkgfHwKKwkJICAgICAgdHBhY3BpX2lzX2Z3X2tub3duKCk7CiAKIAkvKiBlYyBpcyByZXF1aXJlZCBiZWNhdXNlIG1hbnkgb3RoZXIgaGFuZGxlcyBhcmUgcmVsYXRpdmUgdG8gaXQgKi8KIAlUUEFDUElfQUNQSUhBTkRMRV9JTklUKGVjKTsKQEAgLTc1MzcsMTMgKzc3ODIsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKgotCSAqIFJpc2tzIGEgcmVncmVzc2lvbiBvbiB2ZXJ5IG9sZCBtYWNoaW5lcywgYnV0IHJlZHVjZXMgcG90ZW50aWFsCi0JICogZmFsc2UgcG9zaXRpdmVzIGEgZGFtbiBncmVhdCBkZWFsCi0JICovCi0JaWYgKCFpc190aGlua3BhZCkKLQkJaXNfdGhpbmtwYWQgPSAodGhpbmtwYWRfaWQudmVuZG9yID09IFBDSV9WRU5ET1JfSURfSUJNKTsKLQogCWlmICghaXNfdGhpbmtwYWQgJiYgIWZvcmNlX2xvYWQpCiAJCXJldHVybiAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3BzdGFyLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9wc3Rhci1sYXB0b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmYzZDRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9wc3Rhci1sYXB0b3AuYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIEFDUEkgZHJpdmVyIGZvciBUb3BzdGFyIG5vdGVib29rcyAoaG90a2V5cyBzdXBwb3J0IG9ubHkpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CisgKgorICogSW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgZXhpc3RpbmcgeDg2IHBsYXRmb3JtIGRyaXZlcnMsIGluIHNwZWNpYWwKKyAqIGFzdXMvZWVwYy9mdWppdHN1LWxhcHRvcCwgdGhhbmtzIHRvIHRoZWlyIGF1dGhvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworI2RlZmluZSBBQ1BJX1RPUFNUQVJfQ0xBU1MgInRvcHN0YXIiCisKK3N0cnVjdCB0b3BzdGFyX2hrZXkgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworfTsKKworc3RydWN0IHRwc19rZXlfZW50cnkgeworCXU4IGNvZGU7CisJdTE2IGtleWNvZGU7Cit9OworCitzdGF0aWMgc3RydWN0IHRwc19rZXlfZW50cnkgdG9wc3Rhcl9rZXltYXBbXSA9IHsKKwl7IDB4ODAsIEtFWV9CUklHSFRORVNTVVAgfSwKKwl7IDB4ODEsIEtFWV9CUklHSFRORVNTRE9XTiB9LAorCXsgMHg4MywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDg0LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHg4NSwgS0VZX01VVEUgfSwKKwl7IDB4ODYsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKKwl7IDB4ODcsIEtFWV9GMTMgfSwgLyogdG91Y2hwYWQgZW5hYmxlL2Rpc2FibGUga2V5ICovCisJeyAweDg4LCBLRVlfV0xBTiB9LAorCXsgMHg4YSwgS0VZX1dXVyB9LAorCXsgMHg4YiwgS0VZX01BSUwgfSwKKwl7IDB4OGMsIEtFWV9NRURJQSB9LAorCXsgMHg5NiwgS0VZX0YxNCB9LCAvKiBHIGtleT8gKi8KKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqdHBzX2dldF9rZXlfYnlfc2NhbmNvZGUoaW50IGNvZGUpCit7CisJc3RydWN0IHRwc19rZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gdG9wc3Rhcl9rZXltYXA7IGtleS0+Y29kZTsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+Y29kZSkKKwkJCXJldHVybiBrZXk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCB0cHNfa2V5X2VudHJ5ICp0cHNfZ2V0X2tleV9ieV9rZXljb2RlKGludCBjb2RlKQoreworCXN0cnVjdCB0cHNfa2V5X2VudHJ5ICprZXk7CisKKwlmb3IgKGtleSA9IHRvcHN0YXJfa2V5bWFwOyBrZXktPmNvZGU7IGtleSsrKQorCQlpZiAoY29kZSA9PSBrZXktPmtleWNvZGUpCisJCQlyZXR1cm4ga2V5OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfdG9wc3Rhcl9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5OworCXN0YXRpYyBib29sIGR1cF9ldm50WzJdOworCWJvb2wgKmR1cDsKKwlzdHJ1Y3QgdG9wc3Rhcl9oa2V5ICpoa2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCisJLyogMHg4MyBhbmQgMHg4NCBrZXkgZXZlbnRzIGNvbWVzIGR1cGxpY2F0ZWQuLi4gKi8KKwlpZiAoZXZlbnQgPT0gMHg4MyB8fCBldmVudCA9PSAweDg0KSB7CisJCWR1cCA9ICZkdXBfZXZudFtldmVudCAtIDB4ODNdOworCQlpZiAoKmR1cCkgeworCQkJKmR1cCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisJCSpkdXAgPSB0cnVlOworCX0KKworCS8qCisJICogJ0cga2V5JyBnZW5lcmF0ZSB0d28gZXZlbnQgY29kZXMsIGNvbnZlcnQgdG8gb25seQorCSAqIG9uZSBldmVudC9rZXkgY29kZSBmb3Igbm93ICgzRyBzd2l0Y2g/KQorCSAqLworCWlmIChldmVudCA9PSAweDk3KQorCQlldmVudCA9IDB4OTY7CisKKwlrZXkgPSB0cHNfZ2V0X2tleV9ieV9zY2FuY29kZShldmVudCk7CisJaWYgKGtleSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGhrZXktPmlucHV0ZGV2LCBrZXktPmtleWNvZGUsIDEpOworCQlpbnB1dF9zeW5jKGhrZXktPmlucHV0ZGV2KTsKKwkJaW5wdXRfcmVwb3J0X2tleShoa2V5LT5pbnB1dGRldiwga2V5LT5rZXljb2RlLCAwKTsKKwkJaW5wdXRfc3luYyhoa2V5LT5pbnB1dGRldik7CisJCXJldHVybjsKKwl9CisKKwkvKiBLbm93biBub24gaG90a2V5IGV2ZW50cyBkb24ndCBoYW5kbGVkIG9yIHRoYXQgd2UgZG9uJ3QgY2FyZSB5ZXQgKi8KKwlpZiAoZXZlbnQgPT0gMHg4ZSB8fCBldmVudCA9PSAweDhmIHx8IGV2ZW50ID09IDB4OTApCisJCXJldHVybjsKKworCXByX2luZm8oInVua25vd24gZXZlbnQgPSAweCUwMnhcbiIsIGV2ZW50KTsKK30KKworc3RhdGljIGludCBhY3BpX3RvcHN0YXJfZm5jeF9zd2l0Y2goc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGJvb2wgc3RhdGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0IGZuY3hfcGFyYW1zWzFdID0geworCQl7IC50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVIgfQorCX07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgZm5jeF9hcmdfbGlzdCA9IHsgMSwgJmZuY3hfcGFyYW1zWzBdIH07CisKKwlmbmN4X3BhcmFtc1swXS5pbnRlZ2VyLnZhbHVlID0gc3RhdGUgPyAweDg2IDogMHg4NzsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIkZOQ1giLCAmZm5jeF9hcmdfbGlzdCwgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHN3aXRjaCBGTkNYIG5vdGlmaWNhdGlvbnNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3BzdGFyX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5ID0gdHBzX2dldF9rZXlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOworCisJaWYgKCFrZXkpCisJCXJldHVybiAtRUlOVkFMOworCisJKmtleWNvZGUgPSBrZXktPmtleWNvZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9wc3Rhcl9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5OworCWludCBvbGRfa2V5Y29kZTsKKworCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXkgPSB0cHNfZ2V0X2tleV9ieV9zY2FuY29kZShzY2FuY29kZSk7CisKKwlpZiAoIWtleSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvbGRfa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKKwlrZXktPmtleWNvZGUgPSBrZXljb2RlOworCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCWlmICghdHBzX2dldF9rZXlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCisJCWNsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfdG9wc3Rhcl9pbml0X2hrZXkoc3RydWN0IHRvcHN0YXJfaGtleSAqaGtleSkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5OworCisJaGtleS0+aW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWhrZXktPmlucHV0ZGV2KSB7CisJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwloa2V5LT5pbnB1dGRldi0+bmFtZSA9ICJUb3BzdGFyIExhcHRvcCBleHRyYSBidXR0b25zIjsKKwloa2V5LT5pbnB1dGRldi0+cGh5cyA9ICJ0b3BzdGFyL2lucHV0MCI7CisJaGtleS0+aW5wdXRkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwloa2V5LT5pbnB1dGRldi0+Z2V0a2V5Y29kZSA9IHRvcHN0YXJfZ2V0a2V5Y29kZTsKKwloa2V5LT5pbnB1dGRldi0+c2V0a2V5Y29kZSA9IHRvcHN0YXJfc2V0a2V5Y29kZTsKKwlmb3IgKGtleSA9IHRvcHN0YXJfa2V5bWFwOyBrZXktPmNvZGU7IGtleSsrKSB7CisJCXNldF9iaXQoRVZfS0VZLCBoa2V5LT5pbnB1dGRldi0+ZXZiaXQpOworCQlzZXRfYml0KGtleS0+a2V5Y29kZSwgaGtleS0+aW5wdXRkZXYtPmtleWJpdCk7CisJfQorCWlmIChpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaGtleS0+aW5wdXRkZXYpKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGhrZXktPmlucHV0ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV90b3BzdGFyX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdG9wc3Rhcl9oa2V5ICp0cHNfaGtleTsKKworCXRwc19oa2V5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRvcHN0YXJfaGtleSksIEdGUF9LRVJORUwpOworCWlmICghdHBzX2hrZXkpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgIlRvcHN0YXIgVFBTQUNQSSIpOworCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1RPUFNUQVJfQ0xBU1MpOworCisJaWYgKGFjcGlfdG9wc3Rhcl9mbmN4X3N3aXRjaChkZXZpY2UsIHRydWUpKQorCQlnb3RvIGFkZF9lcnI7CisKKwlpZiAoYWNwaV90b3BzdGFyX2luaXRfaGtleSh0cHNfaGtleSkpCisJCWdvdG8gYWRkX2VycjsKKworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSB0cHNfaGtleTsKKwlyZXR1cm4gMDsKKworYWRkX2VycjoKKwlrZnJlZSh0cHNfaGtleSk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV90b3BzdGFyX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCit7CisJc3RydWN0IHRvcHN0YXJfaGtleSAqdHBzX2hrZXkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisKKwlhY3BpX3RvcHN0YXJfZm5jeF9zd2l0Y2goZGV2aWNlLCBmYWxzZSk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh0cHNfaGtleS0+aW5wdXRkZXYpOworCWtmcmVlKHRwc19oa2V5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHRvcHN0YXJfZGV2aWNlX2lkc1tdID0geworCXsgIlRQU0FDUEkwMSIsIDAgfSwKKwl7ICIiLCAwIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCB0b3BzdGFyX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfdG9wc3Rhcl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiVG9wc3RhciBsYXB0b3AgQUNQSSBkcml2ZXIiLAorCS5jbGFzcyA9IEFDUElfVE9QU1RBUl9DTEFTUywKKwkuaWRzID0gdG9wc3Rhcl9kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBhY3BpX3RvcHN0YXJfYWRkLAorCQkucmVtb3ZlID0gYWNwaV90b3BzdGFyX3JlbW92ZSwKKwkJLm5vdGlmeSA9IGFjcGlfdG9wc3Rhcl9ub3RpZnksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvcHN0YXJfbGFwdG9wX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3RvcHN0YXJfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gIlRvcHN0YXIgTGFwdG9wIEFDUEkgZXh0cmFzIGRyaXZlciBsb2FkZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3BzdGFyX2xhcHRvcF9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfdG9wc3Rhcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3BzdGFyX2xhcHRvcF9pbml0KTsKK21vZHVsZV9leGl0KHRvcHN0YXJfbGFwdG9wX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRvcHN0YXIgTGFwdG9wIEFDUEkgRXh0cmFzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwppbmRleCBmMjE1YTU5Li4xNzdmOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwpAQCAtNDIsNyArNDIsNiBAQAogCiAjZGVmaW5lIEFDUElfV01JX0NMQVNTICJ3bWkiCiAKLSN1bmRlZiBQUkVGSVgKICNkZWZpbmUgUFJFRklYICJBQ1BJOiBXTUk6ICIKIAogc3RhdGljIERFRklORV9NVVRFWCh3bWlfZGF0YV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2RyaXZlci5jIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKaW5kZXggNTI3ZWU3Ni4uY2QxMWIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKQEAgLTEzNSw2ICsxMzUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcG5wX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBucF9kZXYgKnBucF9kZXYgPSB0b19wbnBfZGV2KGRldik7CisJc3RydWN0IHBucF9kcml2ZXIgKmRydiA9IHBucF9kZXYtPmRyaXZlcjsKKworCWlmIChkcnYgJiYgZHJ2LT5zaHV0ZG93bikKKwkJZHJ2LT5zaHV0ZG93bihwbnBfZGV2KTsKK30KKwogc3RhdGljIGludCBwbnBfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKIAlzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldiA9IHRvX3BucF9kZXYoZGV2KTsKQEAgLTIwMyw2ICsyMTIsNyBAQAogCS5tYXRjaCAgID0gcG5wX2J1c19tYXRjaCwKIAkucHJvYmUgICA9IHBucF9kZXZpY2VfcHJvYmUsCiAJLnJlbW92ZSAgPSBwbnBfZGV2aWNlX3JlbW92ZSwKKwkuc2h1dGRvd24gPSBwbnBfZGV2aWNlX3NodXRkb3duLAogCS5zdXNwZW5kID0gcG5wX2J1c19zdXNwZW5kLAogCS5yZXN1bWUgID0gcG5wX2J1c19yZXN1bWUsCiAJLmRldl9hdHRycyA9IHBucF9pbnRlcmZhY2VfYXR0cnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IDk0OTY0OTRmLi5jMDdmZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwpAQCAtMTk0LDEzICsxOTQsMTMgQEAKIAkJcG5wYWNwaV9wYXJzZV9yZXNvdXJjZV9vcHRpb25fZGF0YShkZXYpOwogCiAJaWYgKGRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OworCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspIHsKLQkJCWlmICghaXNwbnBpZGFjcGkoY2lkX2xpc3QtPmlkW2ldLnZhbHVlKSkKKwkJCWlmICghaXNwbnBpZGFjcGkoY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpKQogCQkJCWNvbnRpbnVlOwotCQkJcG5wX2FkZF9pZChkZXYsIGNpZF9saXN0LT5pZFtpXS52YWx1ZSk7CisJCQlwbnBfYWRkX2lkKGRldiwgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKaW5kZXggYmRiYzRmNy4uY2VhNmNlZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZworKysgYi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKQEAgLTI5LDYgKzI5LDEzIEBACiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IEFQTSBzdGF0dXMgZW11bGF0aW9uIHVzaW5nCiAJICBiYXR0ZXJ5IGNsYXNzIGRldmljZXMuCiAKK2NvbmZpZyBXTTgzMVhfUE9XRVIKKwl0cmlzdGF0ZSAiV004MzFYIFBNVSBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUZEX1dNODMxWAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBwb3dlciBtYW5hZ2VtZW50IHVuaXQKKwkgIHByb3ZpZGVkIGJ5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTgzMXggUE1JQ3MuCisKIGNvbmZpZyBXTTgzNTBfUE9XRVIKICAgICAgICAgdHJpc3RhdGUgIldNODM1MCBQTVUgc3VwcG9ydCIKICAgICAgICAgZGVwZW5kcyBvbiBNRkRfV004MzUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQppbmRleCAzODBkMTdjLi5iOTZmMjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIAogb2JqLSQoQ09ORklHX1BEQV9QT1dFUikJCSs9IHBkYV9wb3dlci5vCiBvYmotJChDT05GSUdfQVBNX1BPV0VSKQkJKz0gYXBtX3Bvd2VyLm8KK29iai0kKENPTkZJR19XTTgzMVhfUE9XRVIpCSs9IHdtODMxeF9wb3dlci5vCiBvYmotJChDT05GSUdfV004MzUwX1BPV0VSKQkrPSB3bTgzNTBfcG93ZXIubwogCiBvYmotJChDT05GSUdfQkFUVEVSWV9EUzI3NjApCSs9IGRzMjc2MF9iYXR0ZXJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYwppbmRleCA1MjBiNWM0Li42ZjFkYmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2RzMjc2MF9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9kczI3NjBfYmF0dGVyeS5jCkBAIC01Niw2ICs1Niw3IEBACiAJc3RydWN0IGRldmljZSAqdzFfZGV2OwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptb25pdG9yX3dxdWV1ZTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1vbml0b3Jfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNldF9jaGFyZ2VkX3dvcms7CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlX3RpbWUgPSAxMDAwOwpAQCAtNjYsNiArNjcsMTQgQEAKIG1vZHVsZV9wYXJhbShwbW9kX2VuYWJsZWQsIGJvb2wsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwbW9kX2VuYWJsZWQsICJQTU9EIGVuYWJsZSBiaXQiKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCByYXRlZF9jYXBhY2l0eTsKK21vZHVsZV9wYXJhbShyYXRlZF9jYXBhY2l0eSwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJhdGVkX2NhcGFjaXR5LCAicmF0ZWQgYmF0dGVyeSBjYXBhY2l0eSwgMTAqbUFoIG9yIGluZGV4Iik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3VycmVudF9hY2N1bTsKK21vZHVsZV9wYXJhbShjdXJyZW50X2FjY3VtLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY3VycmVudF9hY2N1bSwgImN1cnJlbnQgYWNjdW11bGF0b3IgdmFsdWUiKTsKKwogLyogU29tZSBiYXR0ZXJpZXMgaGF2ZSB0aGVpciByYXRlZCBjYXBhY2l0eSBzdG9yZWQgYSBOICogMTAgbUFoLCB3aGlsZQogICogb3RoZXJzIHVzZSBhbiBpbmRleCBpbnRvIHRoaXMgdGFibGUuICovCiBzdGF0aWMgaW50IHJhdGVkX2NhcGFjaXRpZXNbXSA9IHsKQEAgLTE2OCw4ICsxNzcsMTMgQEAKIAlkaS0+ZnVsbF9hY3RpdmVfdUFoID0gZGktPnJhd1tEUzI3NjBfQUNUSVZFX0ZVTExdIDw8IDggfAogCQkJICAgICAgZGktPnJhd1tEUzI3NjBfQUNUSVZFX0ZVTEwgKyAxXTsKIAotCXNjYWxlWzBdID0gZGktPnJhd1tEUzI3NjBfQUNUSVZFX0ZVTExdIDw8IDggfAotCQkgICBkaS0+cmF3W0RTMjc2MF9BQ1RJVkVfRlVMTCArIDFdOworCS8qIElmIHRoZSBmdWxsX2FjdGl2ZV91QWggdmFsdWUgaXMgbm90IGdpdmVuLCBmYWxsIGJhY2sgdG8gdGhlIHJhdGVkCisJICogY2FwYWNpdHkuIFRoaXMgaXMgbGlrZWx5IHRvIGhhcHBlbiB3aGVuIGNoaXBzIGFyZSBub3QgcGFydCBvZiB0aGUKKwkgKiBiYXR0ZXJ5IHBhY2sgYW5kIGlzIHRoZXJlZm9yZSBub3QgYm9vdHN0cmFwcGVkLiAqLworCWlmIChkaS0+ZnVsbF9hY3RpdmVfdUFoID09IDApCisJCWRpLT5mdWxsX2FjdGl2ZV91QWggPSBkaS0+cmF0ZWRfY2FwYWNpdHkgLyAxMDAwTDsKKworCXNjYWxlWzBdID0gZGktPmZ1bGxfYWN0aXZlX3VBaDsKIAlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKQogCQlzY2FsZVtpXSA9IHNjYWxlW2kgLSAxXSArIGRpLT5yYXdbRFMyNzYwX0FDVElWRV9GVUxMICsgMiArIGldOwogCkBAIC0xOTcsMTUgKzIxMSwzMSBAQAogCWlmIChkaS0+cmVtX2NhcGFjaXR5ID4gMTAwKQogCQlkaS0+cmVtX2NhcGFjaXR5ID0gMTAwOwogCi0JaWYgKGRpLT5jdXJyZW50X3VBKQotCQlkaS0+bGlmZV9zZWMgPSAtKChkaS0+YWNjdW1fY3VycmVudF91QWggLSBkaS0+ZW1wdHlfdUFoKSAqCi0JCQkJIDM2MDBMKSAvIGRpLT5jdXJyZW50X3VBOworCWlmIChkaS0+Y3VycmVudF91QSA+PSAxMDBMKQorCQlkaS0+bGlmZV9zZWMgPSAtKChkaS0+YWNjdW1fY3VycmVudF91QWggLSBkaS0+ZW1wdHlfdUFoKSAqIDM2TCkKKwkJCQkJLyAoZGktPmN1cnJlbnRfdUEgLyAxMDBMKTsKIAllbHNlCiAJCWRpLT5saWZlX3NlYyA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZHMyNzYwX2JhdHRlcnlfc2V0X2N1cnJlbnRfYWNjdW0oc3RydWN0IGRzMjc2MF9kZXZpY2VfaW5mbyAqZGksCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGFjcl92YWwpCit7CisJdW5zaWduZWQgY2hhciBhY3JbMl07CisKKwkvKiBhY3IgaXMgaW4gdW5pdHMgb2YgMC4yNSBtQWggKi8KKwlhY3JfdmFsICo9IDRMOworCWFjcl92YWwgLz0gMTAwMDsKKworCWFjclswXSA9IGFjcl92YWwgPj4gODsKKwlhY3JbMV0gPSBhY3JfdmFsICYgMHhmZjsKKworCWlmICh3MV9kczI3NjBfd3JpdGUoZGktPncxX2RldiwgYWNyLCBEUzI3NjBfQ1VSUkVOVF9BQ0NVTV9NU0IsIDIpIDwgMikKKwkJZGV2X3dhcm4oZGktPmRldiwgIkFDUiB3cml0ZSBmYWlsZWRcbiIpOworfQorCiBzdGF0aWMgdm9pZCBkczI3NjBfYmF0dGVyeV91cGRhdGVfc3RhdHVzKHN0cnVjdCBkczI3NjBfZGV2aWNlX2luZm8gKmRpKQogewogCWludCBvbGRfY2hhcmdlX3N0YXR1cyA9IGRpLT5jaGFyZ2Vfc3RhdHVzOwpAQCAtMjM3LDIxICsyNjcsOSBAQAogCQkJaWYgKGRpLT5mdWxsX2NvdW50ZXIgPCAyKSB7CiAJCQkJZGktPmNoYXJnZV9zdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOwogCQkJfSBlbHNlIHsKLQkJCQl1bnNpZ25lZCBjaGFyIGFjclsyXTsKLQkJCQlpbnQgYWNyX3ZhbDsKLQotCQkJCS8qIGFjciBpcyBpbiB1bml0cyBvZiAwLjI1IG1BaCAqLwotCQkJCWFjcl92YWwgPSBkaS0+ZnVsbF9hY3RpdmVfdUFoICogNEwgLyAxMDAwOwotCi0JCQkJYWNyWzBdID0gYWNyX3ZhbCA+PiA4OwotCQkJCWFjclsxXSA9IGFjcl92YWwgJiAweGZmOwotCi0JCQkJaWYgKHcxX2RzMjc2MF93cml0ZShkaS0+dzFfZGV2LCBhY3IsCi0JCQkJICAgIERTMjc2MF9DVVJSRU5UX0FDQ1VNX01TQiwgMikgPCAyKQotCQkJCQlkZXZfd2FybihkaS0+ZGV2LAotCQkJCQkJICJBQ1IgcmVzZXQgZmFpbGVkXG4iKTsKLQogCQkJCWRpLT5jaGFyZ2Vfc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19GVUxMOworCQkJCWRzMjc2MF9iYXR0ZXJ5X3NldF9jdXJyZW50X2FjY3VtKGRpLAorCQkJCQkJZGktPmZ1bGxfYWN0aXZlX3VBaCk7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewpAQCAtMjc0LDYgKzI5MiwxNyBAQAogCXcxX2RzMjc2MF9yZWNhbGxfZWVwcm9tKGRpLT53MV9kZXYsIERTMjc2MF9FRVBST01fQkxPQ0sxKTsKIH0KIAorc3RhdGljIHZvaWQgZHMyNzYwX2JhdHRlcnlfd3JpdGVfcmF0ZWRfY2FwYWNpdHkoc3RydWN0IGRzMjc2MF9kZXZpY2VfaW5mbyAqZGksCisJCQkJCQl1bnNpZ25lZCBjaGFyIHJhdGVkX2NhcGFjaXR5KQoreworCWlmIChyYXRlZF9jYXBhY2l0eSA9PSBkaS0+cmF3W0RTMjc2MF9SQVRFRF9DQVBBQ0lUWV0pCisJCXJldHVybjsKKworCXcxX2RzMjc2MF93cml0ZShkaS0+dzFfZGV2LCAmcmF0ZWRfY2FwYWNpdHksIERTMjc2MF9SQVRFRF9DQVBBQ0lUWSwgMSk7CisJdzFfZHMyNzYwX3N0b3JlX2VlcHJvbShkaS0+dzFfZGV2LCBEUzI3NjBfRUVQUk9NX0JMT0NLMSk7CisJdzFfZHMyNzYwX3JlY2FsbF9lZXByb20oZGktPncxX2RldiwgRFMyNzYwX0VFUFJPTV9CTE9DSzEpOworfQorCiBzdGF0aWMgdm9pZCBkczI3NjBfYmF0dGVyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZHMyNzYwX2RldmljZV9pbmZvICpkaSA9IGNvbnRhaW5lcl9vZih3b3JrLApAQCAtMjk5LDYgKzMyOCw1MiBAQAogCXF1ZXVlX2RlbGF5ZWRfd29yayhkaS0+bW9uaXRvcl93cXVldWUsICZkaS0+bW9uaXRvcl93b3JrLCBIWi8xMCk7CiB9CiAKKworc3RhdGljIHZvaWQgZHMyNzYwX2JhdHRlcnlfc2V0X2NoYXJnZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJY2hhciBiaWFzOworCXN0cnVjdCBkczI3NjBfZGV2aWNlX2luZm8gKmRpID0gY29udGFpbmVyX29mKHdvcmssCisJCXN0cnVjdCBkczI3NjBfZGV2aWNlX2luZm8sIHNldF9jaGFyZ2VkX3dvcmsud29yayk7CisKKwlkZXZfZGJnKGRpLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJZHMyNzYwX2JhdHRlcnlfcmVhZF9zdGF0dXMoZGkpOworCisJLyogV2hlbiB3ZSBnZXQgbm90aWZpZWQgYnkgZXh0ZXJuYWwgY2lyY3VpdHJ5IHRoYXQgdGhlIGJhdHRlcnkgaXMKKwkgKiBjb25zaWRlcmVkIGZ1bGx5IGNoYXJnZWQgbm93LCB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gY3VycmVudAorCSAqIGZsb3cgYW55IG1vcmUuIEhvd2V2ZXIsIHRoZSBkczI3NjAncyBpbnRlcm5hbCBjdXJyZW50IG1ldGVyIGlzCisJICogdG9vIGluYWNjdXJhdGUgdG8gcmVseSBvbiAtIHNwZWMgc2F5IHNvbWV0aGluZyB+MTUlIGZhaWx1cmUuCisJICogSGVuY2UsIHdlIHVzZSB0aGUgY3VycmVudCBvZmZzZXQgYmlhcyByZWdpc3RlciB0byBjb21wZW5zYXRlCisJICogdGhhdCBlcnJvci4KKwkgKi8KKworCWlmICghcG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQoJmRpLT5iYXQpKQorCQlyZXR1cm47CisKKwliaWFzID0gKHNpZ25lZCBjaGFyKSBkaS0+Y3VycmVudF9yYXcgKworCQkoc2lnbmVkIGNoYXIpIGRpLT5yYXdbRFMyNzYwX0NVUlJFTlRfT0ZGU0VUX0JJQVNdOworCisJZGV2X2RiZyhkaS0+ZGV2LCAiJXM6IGJpYXMgPSAlZFxuIiwgX19mdW5jX18sIGJpYXMpOworCisJdzFfZHMyNzYwX3dyaXRlKGRpLT53MV9kZXYsICZiaWFzLCBEUzI3NjBfQ1VSUkVOVF9PRkZTRVRfQklBUywgMSk7CisJdzFfZHMyNzYwX3N0b3JlX2VlcHJvbShkaS0+dzFfZGV2LCBEUzI3NjBfRUVQUk9NX0JMT0NLMSk7CisJdzFfZHMyNzYwX3JlY2FsbF9lZXByb20oZGktPncxX2RldiwgRFMyNzYwX0VFUFJPTV9CTE9DSzEpOworCisJLyogV3JpdGUgdG8gdGhlIGRpLT5yYXdbXSBidWZmZXIgZGlyZWN0bHkgLSB0aGUgQ1VSUkVOVF9PRkZTRVRfQklBUworCSAqIHZhbHVlIHdvbid0IGJlIHJlYWQgYmFjayBieSBkczI3NjBfYmF0dGVyeV9yZWFkX3N0YXR1cygpICovCisJZGktPnJhd1tEUzI3NjBfQ1VSUkVOVF9PRkZTRVRfQklBU10gPSBiaWFzOworfQorCitzdGF0aWMgdm9pZCBkczI3NjBfYmF0dGVyeV9zZXRfY2hhcmdlZChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpCit7CisJc3RydWN0IGRzMjc2MF9kZXZpY2VfaW5mbyAqZGkgPSB0b19kczI3NjBfZGV2aWNlX2luZm8ocHN5KTsKKworCS8qIHBvc3Rwb25lIHRoZSBhY3R1YWwgd29yayBieSAyMCBzZWNzLiBUaGlzIGlzIGZvciBkZWJvdW5jaW5nIEdQSU8KKwkgKiBzaWduYWxzIGFuZCB0byBsZXQgdGhlIGN1cnJlbnQgdmFsdWUgc2V0dGxlLiBTZWUgQU40MTg4LiAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRpLT5zZXRfY2hhcmdlZF93b3JrKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoZGktPm1vbml0b3Jfd3F1ZXVlLCAmZGktPnNldF9jaGFyZ2VkX3dvcmssIEhaICogMjApOworfQorCiBzdGF0aWMgaW50IGRzMjc2MF9iYXR0ZXJ5X2dldF9wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCiAJCQkJICAgICAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKIAkJCQkgICAgICAgdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKQEAgLTMzNyw2ICs0MTIsMTIgQEAKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CiAJCXZhbC0+aW50dmFsID0gZGktPnRlbXBfQzsKIAkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBkaS0+bGlmZV9zZWM7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CisJCXZhbC0+aW50dmFsID0gZGktPnJlbV9jYXBhY2l0eTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMzUzLDYgKzQzNCw4IEBACiAJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0VNUFRZLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9OT1csCiAJUE9XRVJfU1VQUExZX1BST1BfVEVNUCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKIH07CiAKIHN0YXRpYyBpbnQgZHMyNzYwX2JhdHRlcnlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTM3NiwxNyArNDU5LDEyIEBACiAJZGktPmJhdC5wcm9wZXJ0aWVzCT0gZHMyNzYwX2JhdHRlcnlfcHJvcHM7CiAJZGktPmJhdC5udW1fcHJvcGVydGllcwk9IEFSUkFZX1NJWkUoZHMyNzYwX2JhdHRlcnlfcHJvcHMpOwogCWRpLT5iYXQuZ2V0X3Byb3BlcnR5CT0gZHMyNzYwX2JhdHRlcnlfZ2V0X3Byb3BlcnR5OworCWRpLT5iYXQuc2V0X2NoYXJnZWQJPSBkczI3NjBfYmF0dGVyeV9zZXRfY2hhcmdlZDsKIAlkaS0+YmF0LmV4dGVybmFsX3Bvd2VyX2NoYW5nZWQgPQogCQkJCSAgZHMyNzYwX2JhdHRlcnlfZXh0ZXJuYWxfcG93ZXJfY2hhbmdlZDsKIAogCWRpLT5jaGFyZ2Vfc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19VTktOT1dOOwogCi0JcmV0dmFsID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZkaS0+YmF0KTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoZGktPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYXR0ZXJ5XG4iKTsKLQkJZ290byBiYXR0X2ZhaWxlZDsKLQl9Ci0KIAkvKiBlbmFibGUgc2xlZXAgbW9kZSBmZWF0dXJlICovCiAJZHMyNzYwX2JhdHRlcnlfcmVhZF9zdGF0dXMoZGkpOwogCXN0YXR1cyA9IGRpLT5yYXdbRFMyNzYwX1NUQVRVU19SRUddOwpAQCAtMzk3LDcgKzQ3NSwyNCBAQAogCiAJZHMyNzYwX2JhdHRlcnlfd3JpdGVfc3RhdHVzKGRpLCBzdGF0dXMpOwogCisJLyogc2V0IHJhdGVkIGNhcGFjaXR5IGZyb20gbW9kdWxlIHBhcmFtICovCisJaWYgKHJhdGVkX2NhcGFjaXR5KQorCQlkczI3NjBfYmF0dGVyeV93cml0ZV9yYXRlZF9jYXBhY2l0eShkaSwgcmF0ZWRfY2FwYWNpdHkpOworCisJLyogc2V0IGN1cnJlbnQgYWNjdW11bGF0b3IgaWYgZ2l2ZW4gYXMgcGFyYW1ldGVyLgorCSAqIHRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBmb3IgYm9vdHN0cmFwcGluZyB0aGUgdmFsdWUgKi8KKwlpZiAoY3VycmVudF9hY2N1bSkKKwkJZHMyNzYwX2JhdHRlcnlfc2V0X2N1cnJlbnRfYWNjdW0oZGksIGN1cnJlbnRfYWNjdW0pOworCisJcmV0dmFsID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZkaS0+YmF0KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoZGktPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYXR0ZXJ5XG4iKTsKKwkJZ290byBiYXR0X2ZhaWxlZDsKKwl9CisKIAlJTklUX0RFTEFZRURfV09SSygmZGktPm1vbml0b3Jfd29yaywgZHMyNzYwX2JhdHRlcnlfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmRpLT5zZXRfY2hhcmdlZF93b3JrLAorCQkJICBkczI3NjBfYmF0dGVyeV9zZXRfY2hhcmdlZF93b3JrKTsKIAlkaS0+bW9uaXRvcl93cXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFkaS0+bW9uaXRvcl93cXVldWUpIHsKIAkJcmV0dmFsID0gLUVTUkNIOwpAQCAtNDIyLDYgKzUxNyw4IEBACiAKIAljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUoZGktPm1vbml0b3Jfd3F1ZXVlLAogCQkJCQkgICZkaS0+bW9uaXRvcl93b3JrKTsKKwljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUoZGktPm1vbml0b3Jfd3F1ZXVlLAorCQkJCQkgICZkaS0+c2V0X2NoYXJnZWRfd29yayk7CiAJZGVzdHJveV93b3JrcXVldWUoZGktPm1vbml0b3Jfd3F1ZXVlKTsKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGktPmJhdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvb2xwY19iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL29scGNfYmF0dGVyeS5jCmluZGV4IDU4ZTQxOTIuLjhmZWZlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvb2xwY19iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9vbHBjX2JhdHRlcnkuYwpAQCAtMTAsNyArMTAsOSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CkBAIC0yMzEsNiArMjMzLDE0IEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9UWVBFOgorCQlpZiAoZWNfYnl0ZSAmIEJBVF9TVEFUX1RSSUNLTEUpCisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9UUklDS0xFOworCQllbHNlIGlmIChlY19ieXRlICYgQkFUX1NUQVRfQ0hBUkdJTkcpCisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9GQVNUOworCQllbHNlCisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9OT05FOworCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CiAJCXZhbC0+aW50dmFsID0gISEoZWNfYnl0ZSAmIChCQVRfU1RBVF9QUkVTRU5UIHwKIAkJCQkJICAgIEJBVF9TVEFUX1RSSUNLTEUpKTsKQEAgLTI3Niw2ICsyODYsMTQgQEAKIAkJCXJldHVybiByZXQ7CiAJCXZhbC0+aW50dmFsID0gZWNfYnl0ZTsKIAkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWV9MRVZFTDoKKwkJaWYgKGVjX2J5dGUgJiBCQVRfU1RBVF9GVUxMKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfQ0FQQUNJVFlfTEVWRUxfRlVMTDsKKwkJZWxzZSBpZiAoZWNfYnl0ZSAmIEJBVF9TVEFUX0xPVykKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX0NBUEFDSVRZX0xFVkVMX0xPVzsKKwkJZWxzZQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfQ0FQQUNJVFlfTEVWRUxfTk9STUFMOworCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9URU1QLCBOVUxMLCAwLCAodm9pZCAqKSZlY193b3JkLCAyKTsKIAkJaWYgKHJldCkKQEAgLTMxNSwxMiArMzMzLDE0IEBACiAKIHN0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBvbHBjX2JhdF9wcm9wc1tdID0gewogCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfVFlQRSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAogCVBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSCwKIAlQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZLAogCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfQVZHLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZX0xFVkVMLAogCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsCiAJUE9XRVJfU1VQUExZX1BST1BfVEVNUF9BTUJJRU5ULAogCVBPV0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwKQEAgLTM3MCw2ICszOTAsMjkgQEAKIAkucmVhZCA9IG9scGNfYmF0X2VlcHJvbV9yZWFkLAogfTsKIAorLyogQWxsb3cgdXNlcnNwYWNlIHRvIHNlZSB0aGUgc3BlY2lmaWMgZXJyb3IgdmFsdWUgcHVsbGVkIGZyb20gdGhlIEVDICovCisKK3N0YXRpYyBzc2l6ZV90IG9scGNfYmF0X2Vycm9yX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXVpbnQ4X3QgZWNfYnl0ZTsKKwlzc2l6ZV90IHJldDsKKworCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9FUlJDT0RFLCBOVUxMLCAwLCAmZWNfYnl0ZSwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZWNfYnl0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBvbHBjX2JhdF9lcnJvciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAiZXJyb3IiLAorCQkubW9kZSA9IFNfSVJVR08sCisJfSwKKwkuc2hvdyA9IG9scGNfYmF0X2Vycm9yX3JlYWQsCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJSW5pdGlhbGlzYXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MzMsOCArNDc2LDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBlZXByb21fZmFpbGVkOwogCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9scGNfYmF0LmRldiwgJm9scGNfYmF0X2Vycm9yKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2ZhaWxlZDsKKwogCWdvdG8gc3VjY2VzczsKIAorZXJyb3JfZmFpbGVkOgorCWRldmljZV9yZW1vdmVfYmluX2ZpbGUob2xwY19iYXQuZGV2LCAmb2xwY19iYXRfZWVwcm9tKTsKIGVlcHJvbV9mYWlsZWQ6CiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJm9scGNfYmF0KTsKIGJhdHRlcnlfZmFpbGVkOgpAQCAtNDQ3LDYgKzQ5Niw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbHBjX2JhdF9leGl0KHZvaWQpCiB7CisJZGV2aWNlX3JlbW92ZV9maWxlKG9scGNfYmF0LmRldiwgJm9scGNfYmF0X2Vycm9yKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKG9scGNfYmF0LmRldiwgJm9scGNfYmF0X2VlcHJvbSk7CiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJm9scGNfYmF0KTsKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3Rlcigmb2xwY19hYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9jb3JlLmMgYi9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9jb3JlLmMKaW5kZXggNTUyMDA0MC4uY2NlNzViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwpAQCAtMTgsNyArMTgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgInBvd2VyX3N1cHBseS5oIgogCisvKiBleHBvcnRlZCBmb3IgdGhlIEFQTSBQb3dlciBkcml2ZXIsIEFQTSBlbXVsYXRpb24gKi8KIHN0cnVjdCBjbGFzcyAqcG93ZXJfc3VwcGx5X2NsYXNzOworRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2NsYXNzKTsKIAogc3RhdGljIGludCBfX3Bvd2VyX3N1cHBseV9jaGFuZ2VkX3dvcmsoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewpAQCAtNTUsNiArNTcsNyBAQAogCiAJc2NoZWR1bGVfd29yaygmcHN5LT5jaGFuZ2VkX3dvcmspOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2NoYW5nZWQpOwogCiBzdGF0aWMgaW50IF9fcG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewpAQCAtODYsNiArODksNyBAQAogCiAJcmV0dXJuIGVycm9yOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQpOwogCiBzdGF0aWMgaW50IF9fcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CkBAIC0xMTAsNiArMTE0LDM1IEBACiAKIAlyZXR1cm4gZXJyb3I7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKTsKKworaW50IHBvd2VyX3N1cHBseV9zZXRfYmF0dGVyeV9jaGFyZ2VkKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSkKK3sKKwlpZiAocHN5LT50eXBlID09IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlkgJiYgcHN5LT5zZXRfY2hhcmdlZCkgeworCQlwc3ktPnNldF9jaGFyZ2VkKHBzeSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3NldF9iYXR0ZXJ5X2NoYXJnZWQpOworCitzdGF0aWMgaW50IHBvd2VyX3N1cHBseV9tYXRjaF9kZXZpY2VfYnlfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IGRhdGE7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3RyY21wKHBzeS0+bmFtZSwgbmFtZSkgPT0gMDsKK30KKworc3RydWN0IHBvd2VyX3N1cHBseSAqcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UocG93ZXJfc3VwcGx5X2NsYXNzLCBOVUxMLCBuYW1lLAorCQkJCQlwb3dlcl9zdXBwbHlfbWF0Y2hfZGV2aWNlX2J5X25hbWUpOworCisJcmV0dXJuIGRldiA/IGRldl9nZXRfZHJ2ZGF0YShkZXYpIDogTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9nZXRfYnlfbmFtZSk7CiAKIGludCBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpCiB7CkBAIC0xNDQsNiArMTc3LDcgQEAKIHN1Y2Nlc3M6CiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3JlZ2lzdGVyKTsKIAogdm9pZCBwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcihzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpCiB7CkBAIC0xNTIsNiArMTg2LDcgQEAKIAlwb3dlcl9zdXBwbHlfcmVtb3ZlX2F0dHJzKHBzeSk7CiAJZGV2aWNlX3VucmVnaXN0ZXIocHN5LT5kZXYpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBwb3dlcl9zdXBwbHlfY2xhc3NfaW5pdCh2b2lkKQogewpAQCAtMTcwLDE1ICsyMDUsNiBAQAogCWNsYXNzX2Rlc3Ryb3kocG93ZXJfc3VwcGx5X2NsYXNzKTsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2NoYW5nZWQpOwotRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQpOwotRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIpOwotCi0vKiBleHBvcnRlZCBmb3IgdGhlIEFQTSBQb3dlciBkcml2ZXIsIEFQTSBlbXVsYXRpb24gKi8KLUVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9jbGFzcyk7Ci0KIHN1YnN5c19pbml0Y2FsbChwb3dlcl9zdXBwbHlfY2xhc3NfaW5pdCk7CiBtb2R1bGVfZXhpdChwb3dlcl9zdXBwbHlfY2xhc3NfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMgYi9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCmluZGV4IGRhNzM1OTEuLjA4MTQ0MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYwpAQCAtNDMsNiArNDMsOSBAQAogCXN0YXRpYyBjaGFyICpzdGF0dXNfdGV4dFtdID0gewogCQkiVW5rbm93biIsICJDaGFyZ2luZyIsICJEaXNjaGFyZ2luZyIsICJOb3QgY2hhcmdpbmciLCAiRnVsbCIKIAl9OworCXN0YXRpYyBjaGFyICpjaGFyZ2VfdHlwZVtdID0geworCQkiVW5rbm93biIsICJOL0EiLCAiVHJpY2tsZSIsICJGYXN0IgorCX07CiAJc3RhdGljIGNoYXIgKmhlYWx0aF90ZXh0W10gPSB7CiAJCSJVbmtub3duIiwgIkdvb2QiLCAiT3ZlcmhlYXQiLCAiRGVhZCIsICJPdmVyIHZvbHRhZ2UiLAogCQkiVW5zcGVjaWZpZWQgZmFpbHVyZSIsICJDb2xkIiwKQEAgLTUxLDYgKzU0LDkgQEAKIAkJIlVua25vd24iLCAiTmlNSCIsICJMaS1pb24iLCAiTGktcG9seSIsICJMaUZlIiwgIk5pQ2QiLAogCQkiTGlNbiIKIAl9OworCXN0YXRpYyBjaGFyICpjYXBhY2l0eV9sZXZlbF90ZXh0W10gPSB7CisJCSJVbmtub3duIiwgIkNyaXRpY2FsIiwgIkxvdyIsICJOb3JtYWwiLCAiSGlnaCIsICJGdWxsIgorCX07CiAJc3NpemVfdCByZXQ7CiAJc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJY29uc3QgcHRyZGlmZl90IG9mZiA9IGF0dHIgLSBwb3dlcl9zdXBwbHlfYXR0cnM7CkBAIC02NywxMCArNzMsMTQgQEAKIAogCWlmIChvZmYgPT0gUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3RhdHVzX3RleHRbdmFsdWUuaW50dmFsXSk7CisJZWxzZSBpZiAob2ZmID09IFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9UWVBFKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2hhcmdlX3R5cGVbdmFsdWUuaW50dmFsXSk7CiAJZWxzZSBpZiAob2ZmID09IFBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSCkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGhlYWx0aF90ZXh0W3ZhbHVlLmludHZhbF0pOwogCWVsc2UgaWYgKG9mZiA9PSBQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdGVjaG5vbG9neV90ZXh0W3ZhbHVlLmludHZhbF0pOworCWVsc2UgaWYgKG9mZiA9PSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWV9MRVZFTCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNhcGFjaXR5X2xldmVsX3RleHRbdmFsdWUuaW50dmFsXSk7CiAJZWxzZSBpZiAob2ZmID49IFBPV0VSX1NVUFBMWV9QUk9QX01PREVMX05BTUUpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB2YWx1ZS5zdHJ2YWwpOwogCkBAIC04MSw2ICs5MSw3IEBACiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcG93ZXJfc3VwcGx5X2F0dHJzW10gPSB7CiAJLyogUHJvcGVydGllcyBvZiB0eXBlIGBpbnQnICovCiAJUE9XRVJfU1VQUExZX0FUVFIoc3RhdHVzKSwKKwlQT1dFUl9TVVBQTFlfQVRUUihjaGFyZ2VfdHlwZSksCiAJUE9XRVJfU1VQUExZX0FUVFIoaGVhbHRoKSwKIAlQT1dFUl9TVVBQTFlfQVRUUihwcmVzZW50KSwKIAlQT1dFUl9TVVBQTFlfQVRUUihvbmxpbmUpLApAQCAtMTA5LDYgKzEyMCw3IEBACiAJUE9XRVJfU1VQUExZX0FUVFIoZW5lcmd5X25vdyksCiAJUE9XRVJfU1VQUExZX0FUVFIoZW5lcmd5X2F2ZyksCiAJUE9XRVJfU1VQUExZX0FUVFIoY2FwYWNpdHkpLAorCVBPV0VSX1NVUFBMWV9BVFRSKGNhcGFjaXR5X2xldmVsKSwKIAlQT1dFUl9TVVBQTFlfQVRUUih0ZW1wKSwKIAlQT1dFUl9TVVBQTFlfQVRUUih0ZW1wX2FtYmllbnQpLAogCVBPV0VSX1NVUFBMWV9BVFRSKHRpbWVfdG9fZW1wdHlfbm93KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvd204MzF4X3Bvd2VyLmMgYi9kcml2ZXJzL3Bvd2VyL3dtODMxeF9wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNGM4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3dtODMxeF9wb3dlci5jCkBAIC0wLDAgKzEsNzc5IEBACisvKgorICogUE1VIGRyaXZlciBmb3IgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHdtODMxeCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L2F1eGFkYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvcG11Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorCitzdHJ1Y3Qgd204MzF4X3Bvd2VyIHsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXg7CisJc3RydWN0IHBvd2VyX3N1cHBseSB3YWxsOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmFja3VwOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgdXNiOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0dGVyeTsKK307CisKK3N0YXRpYyBpbnQgd204MzF4X3Bvd2VyX2NoZWNrX29ubGluZShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGludCBzdXBwbHksCisJCQkJICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBXTTgzMVhfU1lTVEVNX1NUQVRVUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV0ICYgc3VwcGx5KQorCQl2YWwtPmludHZhbCA9IDE7CisJZWxzZQorCQl2YWwtPmludHZhbCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzMXhfcG93ZXJfcmVhZF92b2x0YWdlKHN0cnVjdCB3bTgzMXggKndtODMxeCwKKwkJCQkgICAgIGVudW0gd204MzF4X2F1eGFkYyBzcmMsCisJCQkJICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bTgzMXhfYXV4YWRjX3JlYWRfdXYod204MzF4LCBzcmMpOworCWlmIChyZXQgPj0gMCkKKwkJdmFsLT5pbnR2YWwgPSByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJV0FMTCBQb3dlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgd204MzF4X3dhbGxfZ2V0X3Byb3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCWVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCB3bTgzMXhfcG93ZXIgKndtODMxeF9wb3dlciA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfcG93ZXItPndtODMxeDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6CisJCXJldCA9IHdtODMxeF9wb3dlcl9jaGVja19vbmxpbmUod204MzF4LCBXTTgzMVhfUFdSX1dBTEwsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCXJldCA9IHdtODMxeF9wb3dlcl9yZWFkX3ZvbHRhZ2Uod204MzF4LCBXTTgzMVhfQVVYX1dBTEwsIHZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSB3bTgzMXhfd2FsbF9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlVU0IgUG93ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHdtODMxeF91c2JfZ2V0X3Byb3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJICAgICAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCSAgICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCB3bTgzMXhfcG93ZXIgKndtODMxeF9wb3dlciA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfcG93ZXItPndtODMxeDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6CisJCXJldCA9IHdtODMxeF9wb3dlcl9jaGVja19vbmxpbmUod204MzF4LCBXTTgzMVhfUFdSX1VTQiwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJcmV0ID0gd204MzF4X3Bvd2VyX3JlYWRfdm9sdGFnZSh3bTgzMXgsIFdNODMxWF9BVVhfVVNCLCB2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgd204MzF4X3VzYl9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlCYXR0ZXJ5IHByb3BlcnRpZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBjaGdfbWFwIHsKKwlpbnQgdmFsOworCWludCByZWdfdmFsOworfTsKKworc3RhdGljIHN0cnVjdCBjaGdfbWFwIHRyaWNrbGVfaWxpbXNbXSA9IHsKKwl7ICA1MCwgMCA8PCBXTTgzMVhfQ0hHX1RSS0xfSUxJTV9TSElGVCB9LAorCXsgMTAwLCAxIDw8IFdNODMxWF9DSEdfVFJLTF9JTElNX1NISUZUIH0sCisJeyAxNTAsIDIgPDwgV004MzFYX0NIR19UUktMX0lMSU1fU0hJRlQgfSwKKwl7IDIwMCwgMyA8PCBXTTgzMVhfQ0hHX1RSS0xfSUxJTV9TSElGVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjaGdfbWFwIHZzZWxzW10gPSB7CisJeyA0MDUwLCAwIDw8IFdNODMxWF9DSEdfVlNFTF9TSElGVCB9LAorCXsgNDEwMCwgMSA8PCBXTTgzMVhfQ0hHX1ZTRUxfU0hJRlQgfSwKKwl7IDQxNTAsIDIgPDwgV004MzFYX0NIR19WU0VMX1NISUZUIH0sCisJeyA0MjAwLCAzIDw8IFdNODMxWF9DSEdfVlNFTF9TSElGVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjaGdfbWFwIGZhc3RfaWxpbXNbXSA9IHsKKwl7ICAgIDAsICAwIDw8IFdNODMxWF9DSEdfRkFTVF9JTElNX1NISUZUIH0sCisJeyAgIDUwLCAgMSA8PCBXTTgzMVhfQ0hHX0ZBU1RfSUxJTV9TSElGVCB9LAorCXsgIDEwMCwgIDIgPDwgV004MzFYX0NIR19GQVNUX0lMSU1fU0hJRlQgfSwKKwl7ICAxNTAsICAzIDw8IFdNODMxWF9DSEdfRkFTVF9JTElNX1NISUZUIH0sCisJeyAgMjAwLCAgNCA8PCBXTTgzMVhfQ0hHX0ZBU1RfSUxJTV9TSElGVCB9LAorCXsgIDI1MCwgIDUgPDwgV004MzFYX0NIR19GQVNUX0lMSU1fU0hJRlQgfSwKKwl7ICAzMDAsICA2IDw8IFdNODMxWF9DSEdfRkFTVF9JTElNX1NISUZUIH0sCisJeyAgMzUwLCAgNyA8PCBXTTgzMVhfQ0hHX0ZBU1RfSUxJTV9TSElGVCB9LAorCXsgIDQwMCwgIDggPDwgV004MzFYX0NIR19GQVNUX0lMSU1fU0hJRlQgfSwKKwl7ICA0NTAsICA5IDw8IFdNODMxWF9DSEdfRkFTVF9JTElNX1NISUZUIH0sCisJeyAgNTAwLCAxMCA8PCBXTTgzMVhfQ0hHX0ZBU1RfSUxJTV9TSElGVCB9LAorCXsgIDYwMCwgMTEgPDwgV004MzFYX0NIR19GQVNUX0lMSU1fU0hJRlQgfSwKKwl7ICA3MDAsIDEyIDw8IFdNODMxWF9DSEdfRkFTVF9JTElNX1NISUZUIH0sCisJeyAgODAwLCAxMyA8PCBXTTgzMVhfQ0hHX0ZBU1RfSUxJTV9TSElGVCB9LAorCXsgIDkwMCwgMTQgPDwgV004MzFYX0NIR19GQVNUX0lMSU1fU0hJRlQgfSwKKwl7IDEwMDAsIDE1IDw8IFdNODMxWF9DSEdfRkFTVF9JTElNX1NISUZUIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNoZ19tYXAgZW9jX2l0ZXJtc1tdID0geworCXsgMjAsIDAgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorCXsgMzAsIDEgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorCXsgNDAsIDIgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorCXsgNTAsIDMgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorCXsgNjAsIDQgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorCXsgNzAsIDUgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorCXsgODAsIDYgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorCXsgOTAsIDcgPDwgV004MzFYX0NIR19JVEVSTV9TSElGVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjaGdfbWFwIGNoZ190aW1lc1tdID0geworCXsgIDYwLCAgMCA8PCBXTTgzMVhfQ0hHX1RJTUVfU0hJRlQgfSwKKwl7ICA5MCwgIDEgPDwgV004MzFYX0NIR19USU1FX1NISUZUIH0sCisJeyAxMjAsICAyIDw8IFdNODMxWF9DSEdfVElNRV9TSElGVCB9LAorCXsgMTUwLCAgMyA8PCBXTTgzMVhfQ0hHX1RJTUVfU0hJRlQgfSwKKwl7IDE4MCwgIDQgPDwgV004MzFYX0NIR19USU1FX1NISUZUIH0sCisJeyAyMTAsICA1IDw8IFdNODMxWF9DSEdfVElNRV9TSElGVCB9LAorCXsgMjQwLCAgNiA8PCBXTTgzMVhfQ0hHX1RJTUVfU0hJRlQgfSwKKwl7IDI3MCwgIDcgPDwgV004MzFYX0NIR19USU1FX1NISUZUIH0sCisJeyAzMDAsICA4IDw8IFdNODMxWF9DSEdfVElNRV9TSElGVCB9LAorCXsgMzMwLCAgOSA8PCBXTTgzMVhfQ0hHX1RJTUVfU0hJRlQgfSwKKwl7IDM2MCwgMTAgPDwgV004MzFYX0NIR19USU1FX1NISUZUIH0sCisJeyAzOTAsIDExIDw8IFdNODMxWF9DSEdfVElNRV9TSElGVCB9LAorCXsgNDIwLCAxMiA8PCBXTTgzMVhfQ0hHX1RJTUVfU0hJRlQgfSwKKwl7IDQ1MCwgMTMgPDwgV004MzFYX0NIR19USU1FX1NISUZUIH0sCisJeyA0ODAsIDE0IDw8IFdNODMxWF9DSEdfVElNRV9TSElGVCB9LAorCXsgNTEwLCAxNSA8PCBXTTgzMVhfQ0hHX1RJTUVfU0hJRlQgfSwKK307CisKK3N0YXRpYyB2b2lkIHdtODMxeF9iYXR0ZXlfYXBwbHlfY29uZmlnKHN0cnVjdCB3bTgzMXggKndtODMxeCwKKwkJCQkgICAgICAgc3RydWN0IGNoZ19tYXAgKm1hcCwgaW50IGNvdW50LCBpbnQgdmFsLAorCQkJCSAgICAgICBpbnQgKnJlZywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqdW5pdHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJaWYgKHZhbCA9PSBtYXBbaV0udmFsKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gY291bnQpIHsKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkludmFsaWQgJXMgJWQlc1xuIiwKKwkJCW5hbWUsIHZhbCwgdW5pdHMpOworCX0gZWxzZSB7CisJCSpyZWcgfD0gbWFwW2ldLnJlZ192YWw7CisJCWRldl9kYmcod204MzF4LT5kZXYsICJTZXQgJXMgb2YgJWQlc1xuIiwgbmFtZSwgdmFsLCB1bml0cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3bTgzMXhfY29uZmlnX2JhdHRlcnkoc3RydWN0IHdtODMxeCAqd204MzF4KQoreworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKndtODMxeF9wZGF0YSA9IHdtODMxeC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB3bTgzMXhfYmF0dGVyeV9wZGF0YSAqcGRhdGE7CisJaW50IHJldCwgcmVnMSwgcmVnMjsKKworCWlmICghd204MzF4X3BkYXRhIHx8ICF3bTgzMXhfcGRhdGEtPmJhdHRlcnkpIHsKKwkJZGV2X3dhcm4od204MzF4LT5kZXYsCisJCQkgIk5vIGJhdHRlcnkgY2hhcmdlciBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBkYXRhID0gd204MzF4X3BkYXRhLT5iYXR0ZXJ5OworCisJcmVnMSA9IDA7CisJcmVnMiA9IDA7CisKKwlpZiAoIXBkYXRhLT5lbmFibGUpIHsKKwkJZGV2X2luZm8od204MzF4LT5kZXYsICJCYXR0ZXJ5IGNoYXJnZXIgZGlzYWJsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJcmVnMSB8PSBXTTgzMVhfQ0hHX0VOQTsKKwlpZiAocGRhdGEtPm9mZl9tYXNrKQorCQlyZWcyIHw9IFdNODMxWF9DSEdfT0ZGX01TSzsKKwlpZiAocGRhdGEtPmZhc3RfZW5hYmxlKQorCQlyZWcxIHw9IFdNODMxWF9DSEdfRkFTVDsKKworCXdtODMxeF9iYXR0ZXlfYXBwbHlfY29uZmlnKHdtODMxeCwgdHJpY2tsZV9pbGltcywKKwkJCQkgICBBUlJBWV9TSVpFKHRyaWNrbGVfaWxpbXMpLAorCQkJCSAgIHBkYXRhLT50cmlja2xlX2lsaW0sICZyZWcyLAorCQkJCSAgICJ0cmlja2xlIGNoYXJnZSBjdXJyZW50IGxpbWl0IiwgIm1BIik7CisKKwl3bTgzMXhfYmF0dGV5X2FwcGx5X2NvbmZpZyh3bTgzMXgsIHZzZWxzLCBBUlJBWV9TSVpFKHZzZWxzKSwKKwkJCQkgICBwZGF0YS0+dnNlbCwgJnJlZzIsCisJCQkJICAgInRhcmdldCB2b2x0YWdlIiwgIm1WIik7CisKKwl3bTgzMXhfYmF0dGV5X2FwcGx5X2NvbmZpZyh3bTgzMXgsIGZhc3RfaWxpbXMsIEFSUkFZX1NJWkUoZmFzdF9pbGltcyksCisJCQkJICAgcGRhdGEtPmZhc3RfaWxpbSwgJnJlZzIsCisJCQkJICAgImZhc3QgY2hhcmdlIGN1cnJlbnQgbGltaXQiLCAibUEiKTsKKworCXdtODMxeF9iYXR0ZXlfYXBwbHlfY29uZmlnKHdtODMxeCwgZW9jX2l0ZXJtcywgQVJSQVlfU0laRShlb2NfaXRlcm1zKSwKKwkJCQkgICBwZGF0YS0+ZW9jX2l0ZXJtLCAmcmVnMSwKKwkJCQkgICAiZW5kIG9mIGNoYXJnZSBjdXJyZW50IHRocmVzaG9sZCIsICJtQSIpOworCisJd204MzF4X2JhdHRleV9hcHBseV9jb25maWcod204MzF4LCBjaGdfdGltZXMsIEFSUkFZX1NJWkUoY2hnX3RpbWVzKSwKKwkJCQkgICBwZGF0YS0+dGltZW91dCwgJnJlZzIsCisJCQkJICAgImNoYXJnZXIgdGltZW91dCIsICJtaW4iKTsKKworCXJldCA9IHdtODMxeF9yZWdfdW5sb2NrKHdtODMxeCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gdW5sb2NrIHJlZ2lzdGVyczogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfQ0hBUkdFUl9DT05UUk9MXzEsCisJCQkgICAgICBXTTgzMVhfQ0hHX0VOQV9NQVNLIHwKKwkJCSAgICAgIFdNODMxWF9DSEdfRkFTVF9NQVNLIHwKKwkJCSAgICAgIFdNODMxWF9DSEdfSVRFUk1fTUFTSyB8CisJCQkgICAgICBXTTgzMVhfQ0hHX0lURVJNX01BU0ssCisJCQkgICAgICByZWcxKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gc2V0IGNoYXJnZXIgY29udHJvbCAxOiAlZFxuIiwKKwkJCXJldCk7CisKKwlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfQ0hBUkdFUl9DT05UUk9MXzIsCisJCQkgICAgICBXTTgzMVhfQ0hHX09GRl9NU0sgfAorCQkJICAgICAgV004MzFYX0NIR19USU1FX01BU0sgfAorCQkJICAgICAgV004MzFYX0NIR19GQVNUX0lMSU1fTUFTSyB8CisJCQkgICAgICBXTTgzMVhfQ0hHX1RSS0xfSUxJTV9NQVNLIHwKKwkJCSAgICAgIFdNODMxWF9DSEdfVlNFTF9NQVNLLAorCQkJICAgICAgcmVnMik7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjaGFyZ2VyIGNvbnRyb2wgMjogJWRcbiIsCisJCQlyZXQpOworCisJd204MzF4X3JlZ19sb2NrKHdtODMxeCk7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhdF9jaGVja19zdGF0dXMoc3RydWN0IHdtODMxeCAqd204MzF4LCBpbnQgKnN0YXR1cykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX1NZU1RFTV9TVEFUVVMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCAmIFdNODMxWF9QV1JfU1JDX0JBVFQpIHsKKwkJKnN0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkc7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIFdNODMxWF9DSEFSR0VSX1NUQVRVUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKHJldCAmIFdNODMxWF9DSEdfU1RBVEVfTUFTSykgeworCWNhc2UgV004MzFYX0NIR19TVEFURV9PRkY6CisJCSpzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05PVF9DSEFSR0lORzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzMVhfQ0hHX1NUQVRFX1RSSUNLTEU6CisJY2FzZSBXTTgzMVhfQ0hHX1NUQVRFX0ZBU1Q6CisJCSpzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCSpzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODMxeF9iYXRfY2hlY2tfdHlwZShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGludCAqdHlwZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0NIQVJHRVJfU1RBVFVTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAocmV0ICYgV004MzFYX0NIR19TVEFURV9NQVNLKSB7CisJY2FzZSBXTTgzMVhfQ0hHX1NUQVRFX1RSSUNLTEU6CisJY2FzZSBXTTgzMVhfQ0hHX1NUQVRFX1RSSUNLTEVfT1Q6CisJCSp0eXBlID0gUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX1RSSUNLTEU7CisJCWJyZWFrOworCWNhc2UgV004MzFYX0NIR19TVEFURV9GQVNUOgorCWNhc2UgV004MzFYX0NIR19TVEFURV9GQVNUX09UOgorCQkqdHlwZSA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9GQVNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqdHlwZSA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9OT05FOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzMXhfYmF0X2NoZWNrX2hlYWx0aChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGludCAqaGVhbHRoKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBXTTgzMVhfQ0hBUkdFUl9TVEFUVVMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCAmIFdNODMxWF9CQVRUX0hPVF9TVFMpIHsKKwkJKmhlYWx0aCA9IFBPV0VSX1NVUFBMWV9IRUFMVEhfT1ZFUkhFQVQ7CisJCXJldHVybiAwOworCX0KKworCWlmIChyZXQgJiBXTTgzMVhfQkFUVF9DT0xEX1NUUykgeworCQkqaGVhbHRoID0gUE9XRVJfU1VQUExZX0hFQUxUSF9DT0xEOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmV0ICYgV004MzFYX0JBVFRfT1ZfU1RTKSB7CisJCSpoZWFsdGggPSBQT1dFUl9TVVBQTFlfSEVBTFRIX09WRVJWT0xUQUdFOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHJldCAmIFdNODMxWF9DSEdfU1RBVEVfTUFTSykgeworCWNhc2UgV004MzFYX0NIR19TVEFURV9UUklDS0xFX09UOgorCWNhc2UgV004MzFYX0NIR19TVEFURV9GQVNUX09UOgorCQkqaGVhbHRoID0gUE9XRVJfU1VQUExZX0hFQUxUSF9PVkVSSEVBVDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzMVhfQ0hHX1NUQVRFX0RFRkVDVElWRToKKwkJKmhlYWx0aCA9IFBPV0VSX1NVUFBMWV9IRUFMVEhfVU5TUEVDX0ZBSUxVUkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpoZWFsdGggPSBQT1dFUl9TVVBQTFlfSEVBTFRIX0dPT0Q7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODMxeF9iYXRfZ2V0X3Byb3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJICAgICAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCSAgICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCB3bTgzMXhfcG93ZXIgKndtODMxeF9wb3dlciA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfcG93ZXItPndtODMxeDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCXJldCA9IHdtODMxeF9iYXRfY2hlY2tfc3RhdHVzKHdtODMxeCwgJnZhbC0+aW50dmFsKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6CisJCXJldCA9IHdtODMxeF9wb3dlcl9jaGVja19vbmxpbmUod204MzF4LCBXTTgzMVhfUFdSX1NSQ19CQVRULAorCQkJCQkJdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJcmV0ID0gd204MzF4X3Bvd2VyX3JlYWRfdm9sdGFnZSh3bTgzMXgsIFdNODMxWF9BVVhfQkFUVCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9IRUFMVEg6CisJCXJldCA9IHdtODMxeF9iYXRfY2hlY2tfaGVhbHRoKHdtODMxeCwgJnZhbC0+aW50dmFsKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfVFlQRToKKwkJcmV0ID0gd204MzF4X2JhdF9jaGVja190eXBlKHdtODMxeCwgJnZhbC0+aW50dmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHdtODMxeF9iYXRfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCisJUE9XRVJfU1VQUExZX1BST1BfT05MSU5FLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfVFlQRSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTgzMXhfYmF0X2lycXNbXSA9IHsKKwkiQkFUVCBIT1QiLAorCSJCQVRUIENPTEQiLAorCSJCQVRUIEZBSUwiLAorCSJPViIsCisJIkVORCIsCisJIlRPIiwKKwkiTU9ERSIsCisJIlNUQVJUIiwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfYmF0X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bTgzMXhfcG93ZXIgKndtODMxeF9wb3dlciA9IGRhdGE7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gd204MzF4X3Bvd2VyLT53bTgzMXg7CisKKwlkZXZfZGJnKHdtODMxeC0+ZGV2LCAiQmF0dGVyeSBzdGF0dXMgY2hhbmdlZDogJWRcbiIsIGlycSk7CisKKwkvKiBUaGUgYmF0dGVyeSBjaGFyZ2VyIGlzIGF1dG9ub21vdXMgc28gd2UgZG9uJ3QgbmVlZCB0byBkbworCSAqIGFueXRoaW5nIGV4Y2VwdCBraWNrIHVzZXIgc3BhY2UgKi8KKwlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmd204MzF4X3Bvd2VyLT5iYXR0ZXJ5KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJQmFja3VwIHN1cHBseSBwcm9wZXJ0aWVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB3bTgzMXhfY29uZmlnX2JhY2t1cChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgpCit7CisJc3RydWN0IHdtODMxeF9wZGF0YSAqd204MzF4X3BkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHdtODMxeF9iYWNrdXBfcGRhdGEgKnBkYXRhOworCWludCByZXQsIHJlZzsKKworCWlmICghd204MzF4X3BkYXRhIHx8ICF3bTgzMXhfcGRhdGEtPmJhY2t1cCkgeworCQlkZXZfd2Fybih3bTgzMXgtPmRldiwKKwkJCSAiTm8gYmFja3VwIGJhdHRlcnkgY2hhcmdlciBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBkYXRhID0gd204MzF4X3BkYXRhLT5iYWNrdXA7CisKKwlyZWcgPSAwOworCisJaWYgKHBkYXRhLT5jaGFyZ2VyX2VuYWJsZSkKKwkJcmVnIHw9IFdNODMxWF9CS1VQX0NIR19FTkEgfCBXTTgzMVhfQktVUF9CQVRUX0RFVF9FTkE7CisJaWYgKHBkYXRhLT5ub19jb25zdGFudF92b2x0YWdlKQorCQlyZWcgfD0gV004MzFYX0JLVVBfQ0hHX01PREU7CisKKwlzd2l0Y2ggKHBkYXRhLT52bGltKSB7CisJY2FzZSAyNTAwOgorCQlicmVhazsKKwljYXNlIDMxMDA6CisJCXJlZyB8PSBXTTgzMVhfQktVUF9DSEdfVkxJTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkludmFsaWQgYmFja3VwIHZvbHRhZ2UgbGltaXQgJWRtVlxuIiwKKwkJCXBkYXRhLT52bGltKTsKKwl9CisKKwlzd2l0Y2ggKHBkYXRhLT5pbGltKSB7CisJY2FzZSAxMDA6CisJCWJyZWFrOworCWNhc2UgMjAwOgorCQlyZWcgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSAzMDA6CisJCXJlZyB8PSAyOworCQlicmVhazsKKwljYXNlIDQwMDoKKwkJcmVnIHw9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIod204MzF4LT5kZXYsICJJbnZhbGlkIGJhY2t1cCBjdXJyZW50IGxpbWl0ICVkdUFcbiIsCisJCQlwZGF0YS0+aWxpbSk7CisJfQorCisJcmV0ID0gd204MzF4X3JlZ191bmxvY2sod204MzF4KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byB1bmxvY2sgcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9CQUNLVVBfQ0hBUkdFUl9DT05UUk9MLAorCQkJICAgICAgV004MzFYX0JLVVBfQ0hHX0VOQV9NQVNLIHwKKwkJCSAgICAgIFdNODMxWF9CS1VQX0NIR19NT0RFX01BU0sgfAorCQkJICAgICAgV004MzFYX0JLVVBfQkFUVF9ERVRfRU5BX01BU0sgfAorCQkJICAgICAgV004MzFYX0JLVVBfQ0hHX1ZMSU1fTUFTSyB8CisJCQkgICAgICBXTTgzMVhfQktVUF9DSEdfSUxJTV9NQVNLLAorCQkJICAgICAgcmVnKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIod204MzF4LT5kZXYsCisJCQkiRmFpbGVkIHRvIHNldCBiYWNrdXAgY2hhcmdlciBjb25maWc6ICVkXG4iLCByZXQpOworCisJd204MzF4X3JlZ19sb2NrKHdtODMxeCk7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2t1cF9nZXRfcHJvcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkJICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCB3bTgzMXhfcG93ZXIgKndtODMxeF9wb3dlciA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfcG93ZXItPndtODMxeDsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIFdNODMxWF9CQUNLVVBfQ0hBUkdFUl9DT05UUk9MKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCWlmIChyZXQgJiBXTTgzMVhfQktVUF9DSEdfU1RTKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQllbHNlCisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOworCQlicmVhazsKKworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCXJldCA9IHdtODMxeF9wb3dlcl9yZWFkX3ZvbHRhZ2Uod204MzF4LCBXTTgzMVhfQVVYX0JLVVBfQkFUVCwKKwkJCQkJCXZhbCk7CisJCWJyZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UOgorCQlpZiAocmV0ICYgV004MzFYX0JLVVBfQ0hHX1NUUykKKwkJCXZhbC0+aW50dmFsID0gMTsKKwkJZWxzZQorCQkJdmFsLT5pbnR2YWwgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSB3bTgzMXhfYmFja3VwX3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJSW5pdGlhbGlzYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfc3lzbG9faXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHdtODMxeF9wb3dlciAqd204MzF4X3Bvd2VyID0gZGF0YTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfcG93ZXItPndtODMxeDsKKworCS8qIE5vdCBtdWNoIHdlIGNhbiBhY3R1YWxseSAqZG8qIGJ1dCB0ZWxsIHBlb3BsZSBmb3IKKwkgKiBwb3N0ZXJpdHksIHdlJ3JlIHByb2JhYmx5IGFib3V0IHRvIHJ1biBvdXQgb2YgcG93ZXIuICovCisJZGV2X2NyaXQod204MzF4LT5kZXYsICJTWVNWREQgdW5kZXIgdm9sdGFnZVxuIik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfcHdyX3NyY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd204MzF4X3Bvd2VyICp3bTgzMXhfcG93ZXIgPSBkYXRhOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF9wb3dlci0+d204MzF4OworCisJZGV2X2RiZyh3bTgzMXgtPmRldiwgIlBvd2VyIHNvdXJjZSBjaGFuZ2VkXG4iKTsKKworCS8qIEp1c3Qgbm90aWZ5IGZvciBldmVyeXRoaW5nIC0gbGl0dGxlIGhhcm0gaW4gb3Zlcm5vdGlmeWluZy4KKwkgKiBUaGUgYmFja3VwIGJhdHRlcnkgaXMgbm90IGEgcG93ZXIgc291cmNlIHdoaWxlIHRoZSBzeXN0ZW0KKwkgKiBpcyBydW5uaW5nIHNvIHNraXAgdGhhdC4KKwkgKi8KKwlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmd204MzF4X3Bvd2VyLT5iYXR0ZXJ5KTsKKwlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmd204MzF4X3Bvd2VyLT51c2IpOworCXBvd2VyX3N1cHBseV9jaGFuZ2VkKCZ3bTgzMXhfcG93ZXItPndhbGwpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCB3bTgzMXhfcG93ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODMxeF9wb3dlciAqcG93ZXI7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqdXNiOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhdHRlcnk7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqd2FsbDsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpiYWNrdXA7CisJaW50IHJldCwgaXJxLCBpOworCisJcG93ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204MzF4X3Bvd2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBvd2VyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcG93ZXItPndtODMxeCA9IHdtODMxeDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwb3dlcik7CisKKwl1c2IgPSAmcG93ZXItPnVzYjsKKwliYXR0ZXJ5ID0gJnBvd2VyLT5iYXR0ZXJ5OworCXdhbGwgPSAmcG93ZXItPndhbGw7CisJYmFja3VwID0gJnBvd2VyLT5iYWNrdXA7CisKKwkvKiBXZSBpZ25vcmUgY29uZmlndXJhdGlvbiBmYWlsdXJlcyBzaW5jZSB3ZSBjYW4gc3RpbGwgcmVhZCBiYWNrCisJICogdGhlIHN0YXR1cyB3aXRob3V0IGVuYWJsaW5nIGVpdGhlciBvZiB0aGUgY2hhcmdlcnMuCisJICovCisJd204MzF4X2NvbmZpZ19iYXR0ZXJ5KHdtODMxeCk7CisJd204MzF4X2NvbmZpZ19iYWNrdXAod204MzF4KTsKKworCXdhbGwtPm5hbWUgPSAid204MzF4LXdhbGwiOworCXdhbGwtPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9NQUlOUzsKKwl3YWxsLT5wcm9wZXJ0aWVzID0gd204MzF4X3dhbGxfcHJvcHM7CisJd2FsbC0+bnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKHdtODMxeF93YWxsX3Byb3BzKTsKKwl3YWxsLT5nZXRfcHJvcGVydHkgPSB3bTgzMXhfd2FsbF9nZXRfcHJvcDsKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwgd2FsbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfa21hbGxvYzsKKworCWJhdHRlcnktPm5hbWUgPSAid204MzF4LWJhdHRlcnkiOworCWJhdHRlcnktPnByb3BlcnRpZXMgPSB3bTgzMXhfYmF0X3Byb3BzOworCWJhdHRlcnktPm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRSh3bTgzMXhfYmF0X3Byb3BzKTsKKwliYXR0ZXJ5LT5nZXRfcHJvcGVydHkgPSB3bTgzMXhfYmF0X2dldF9wcm9wOworCWJhdHRlcnktPnVzZV9mb3JfYXBtID0gMTsKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwgYmF0dGVyeSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfd2FsbDsKKworCXVzYi0+bmFtZSA9ICJ3bTgzMXgtdXNiIiwKKwl1c2ItPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9VU0I7CisJdXNiLT5wcm9wZXJ0aWVzID0gd204MzF4X3VzYl9wcm9wczsKKwl1c2ItPm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRSh3bTgzMXhfdXNiX3Byb3BzKTsKKwl1c2ItPmdldF9wcm9wZXJ0eSA9IHdtODMxeF91c2JfZ2V0X3Byb3A7CisJcmV0ID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHVzYik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYmF0dGVyeTsKKworCWJhY2t1cC0+bmFtZSA9ICJ3bTgzMXgtYmFja3VwIjsKKwliYWNrdXAtPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOworCWJhY2t1cC0+cHJvcGVydGllcyA9IHdtODMxeF9iYWNrdXBfcHJvcHM7CisJYmFja3VwLT5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUod204MzF4X2JhY2t1cF9wcm9wcyk7CisJYmFja3VwLT5nZXRfcHJvcGVydHkgPSB3bTgzMXhfYmFja3VwX2dldF9wcm9wOworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCBiYWNrdXApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3VzYjsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJTWVNMTyIpOworCXJldCA9IHdtODMxeF9yZXF1ZXN0X2lycSh3bTgzMXgsIGlycSwgd204MzF4X3N5c2xvX2lycSwKKwkJCQkgSVJRRl9UUklHR0VSX1JJU0lORywgIlNZU0xPIiwKKwkJCQkgcG93ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBTWVNMTyBJUlEgJWQ6ICVkXG4iLAorCQkJaXJxLCByZXQpOworCQlnb3RvIGVycl9iYWNrdXA7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIlBXUiBTUkMiKTsKKwlyZXQgPSB3bTgzMXhfcmVxdWVzdF9pcnEod204MzF4LCBpcnEsIHdtODMxeF9wd3Jfc3JjX2lycSwKKwkJCQkgSVJRRl9UUklHR0VSX1JJU0lORywgIlBvd2VyIHNvdXJjZSIsCisJCQkJIHBvd2VyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgUFdSIFNSQyBJUlEgJWQ6ICVkXG4iLAorCQkJaXJxLCByZXQpOworCQlnb3RvIGVycl9zeXNsbzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzMXhfYmF0X2lycXMpOyBpKyspIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgd204MzF4X2JhdF9pcnFzW2ldKTsKKwkJcmV0ID0gd204MzF4X3JlcXVlc3RfaXJxKHdtODMxeCwgaXJxLCB3bTgzMXhfYmF0X2lycSwKKwkJCQkJIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJCSB3bTgzMXhfYmF0X2lycXNbaV0sCisJCQkJCSBwb3dlcik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCAlcyBJUlEgJWQ6ICVkXG4iLAorCQkJCXdtODMxeF9iYXRfaXJxc1tpXSwgaXJxLCByZXQpOworCQkJZ290byBlcnJfYmF0X2lycTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7CisKK2Vycl9iYXRfaXJxOgorCWZvciAoOyBpID49IDA7IGktLSkgeworCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCB3bTgzMXhfYmF0X2lycXNbaV0pOworCQl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBpcnEsIHBvd2VyKTsKKwl9CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIlBXUiBTUkMiKTsKKwl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBpcnEsIHBvd2VyKTsKK2Vycl9zeXNsbzoKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiU1lTTE8iKTsKKwl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBpcnEsIHBvd2VyKTsKK2Vycl9iYWNrdXA6CisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoYmFja3VwKTsKK2Vycl91c2I6CisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIodXNiKTsKK2Vycl9iYXR0ZXJ5OgorCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKGJhdHRlcnkpOworZXJyX3dhbGw6CisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIod2FsbCk7CitlcnJfa21hbGxvYzoKKwlrZnJlZShwb3dlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204MzF4X3Bvd2VyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTgzMXhfcG93ZXIgKndtODMxeF9wb3dlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF9wb3dlci0+d204MzF4OworCWludCBpcnEsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzMXhfYmF0X2lycXMpOyBpKyspIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgd204MzF4X2JhdF9pcnFzW2ldKTsKKwkJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgaXJxLCB3bTgzMXhfcG93ZXIpOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJQV1IgU1JDIik7CisJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgaXJxLCB3bTgzMXhfcG93ZXIpOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIlNZU0xPIik7CisJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgaXJxLCB3bTgzMXhfcG93ZXIpOworCisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJndtODMxeF9wb3dlci0+YmFja3VwKTsKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3Rlcigmd204MzF4X3Bvd2VyLT5iYXR0ZXJ5KTsKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3Rlcigmd204MzF4X3Bvd2VyLT53YWxsKTsKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3Rlcigmd204MzF4X3Bvd2VyLT51c2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzMXhfcG93ZXJfZHJpdmVyID0geworCS5wcm9iZSA9IHdtODMxeF9wb3dlcl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod204MzF4X3Bvd2VyX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204MzF4LXBvd2VyIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204MzF4X3Bvd2VyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfcG93ZXJfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODMxeF9wb3dlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODMxeF9wb3dlcl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODMxeF9wb3dlcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzF4X3Bvd2VyX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyIHN1cHBseSBkcml2ZXIgZm9yIFdNODMxeCBQTUlDcyIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODMxeC1wb3dlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci93bTgzNTBfcG93ZXIuYyBiL2RyaXZlcnMvcG93ZXIvd204MzUwX3Bvd2VyLmMKaW5kZXggMWIxNmJmMy4uMjhiMDI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci93bTgzNTBfcG93ZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL3dtODM1MF9wb3dlci5jCkBAIC0zMjEsNiArMzIxLDI0IEBACiAJcmV0dXJuIFBPV0VSX1NVUFBMWV9IRUFMVEhfR09PRDsKIH0KIAorc3RhdGljIGludCB3bTgzNTBfYmF0X2dldF9jaGFyZ2VfdHlwZShzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJaW50IHN0YXRlOworCisJc3RhdGUgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQkFUVEVSWV9DSEFSR0VSX0NPTlRST0xfMikgJgorCSAgICBXTTgzNTBfQ0hHX1NUU19NQVNLOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFdNODM1MF9DSEdfU1RTX09GRjoKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9OT05FOworCWNhc2UgV004MzUwX0NIR19TVFNfVFJJQ0tMRToKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9UUklDS0xFOworCWNhc2UgV004MzUwX0NIR19TVFNfRkFTVDoKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9GQVNUOworCWRlZmF1bHQ6CisJCXJldHVybiBQT1dFUl9TVVBQTFlfQ0hBUkdFX1RZUEVfVU5LTk9XTjsKKwl9Cit9CisKIHN0YXRpYyBpbnQgd204MzUwX2JhdF9nZXRfcHJvcGVydHkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAogCQkJCSAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKIAkJCQkgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQpAQCAtMzQyLDYgKzM2MCw5IEBACiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9IRUFMVEg6CiAJCXZhbC0+aW50dmFsID0gd204MzUwX2JhdF9jaGVja19oZWFsdGgod204MzUwKTsKIAkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfVFlQRToKKwkJdmFsLT5pbnR2YWwgPSB3bTgzNTBfYmF0X2dldF9jaGFyZ2VfdHlwZSh3bTgzNTApOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTM1NSw2ICszNzYsNyBAQAogCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKIAlQT1dFUl9TVVBQTFlfUFJPUF9IRUFMVEgsCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX1RZUEUsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMKaW5kZXggYjc4NzMzNS4uZjJiZmQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYwpAQCAtMjIsMTcgKzIyLDIwIEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogc3RhdGljIERFRklORV9NVVRFWChiYXRfbG9jayk7CiBzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGJhdF93b3JrOwogc3RydWN0IG11dGV4IHdvcmtfbG9jazsKIHN0YXRpYyBpbnQgYmF0X3N0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKLXN0YXRpYyBzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyAqcGRhdGE7CitzdGF0aWMgc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gKmdwZGF0YTsKIHN0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSAqcHJvcDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgd205N3h4X3JlYWRfYmF0KHN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhdF9wcykKIHsKKwlzdHJ1Y3Qgd205N3h4X3BkYXRhICp3bWRhdGEgPSBiYXRfcHMtPmRldi0+cGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB3bTk3eHhfYmF0dF9wZGF0YSAqcGRhdGEgPSB3bWRhdGEtPmJhdHRfcGRhdGE7CisKIAlyZXR1cm4gd205N3h4X3JlYWRfYXV4X2FkYyhkZXZfZ2V0X2RydmRhdGEoYmF0X3BzLT5kZXYtPnBhcmVudCksCiAJCQkJCXBkYXRhLT5iYXR0X2F1eCkgKiBwZGF0YS0+YmF0dF9tdWx0IC8KIAkJCQkJcGRhdGEtPmJhdHRfZGl2OwpAQCAtNDAsNiArNDMsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3bTk3eHhfcmVhZF90ZW1wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhdF9wcykKIHsKKwlzdHJ1Y3Qgd205N3h4X3BkYXRhICp3bWRhdGEgPSBiYXRfcHMtPmRldi0+cGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB3bTk3eHhfYmF0dF9wZGF0YSAqcGRhdGEgPSB3bWRhdGEtPmJhdHRfcGRhdGE7CisKIAlyZXR1cm4gd205N3h4X3JlYWRfYXV4X2FkYyhkZXZfZ2V0X2RydmRhdGEoYmF0X3BzLT5kZXYtPnBhcmVudCksCiAJCQkJCXBkYXRhLT50ZW1wX2F1eCkgKiBwZGF0YS0+dGVtcF9tdWx0IC8KIAkJCQkJcGRhdGEtPnRlbXBfZGl2OwpAQCAtNDksNiArNTUsOSBAQAogCQkJICAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKIAkJCSAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQogeworCXN0cnVjdCB3bTk3eHhfcGRhdGEgKndtZGF0YSA9IGJhdF9wcy0+ZGV2LT5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHdtOTd4eF9iYXR0X3BkYXRhICpwZGF0YSA9IHdtZGF0YS0+YmF0dF9wZGF0YTsKKwogCXN3aXRjaCAocHNwKSB7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CiAJCXZhbC0+aW50dmFsID0gYmF0X3N0YXR1czsKQEAgLTk3LDYgKzEwNiw4IEBACiBzdGF0aWMgdm9pZCB3bTk3eHhfYmF0X3VwZGF0ZShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpiYXRfcHMpCiB7CiAJaW50IG9sZF9zdGF0dXMgPSBiYXRfc3RhdHVzOworCXN0cnVjdCB3bTk3eHhfcGRhdGEgKndtZGF0YSA9IGJhdF9wcy0+ZGV2LT5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHdtOTd4eF9iYXR0X3BkYXRhICpwZGF0YSA9IHdtZGF0YS0+YmF0dF9wZGF0YTsKIAogCW11dGV4X2xvY2soJndvcmtfbG9jayk7CiAKQEAgLTEyNywyMSArMTM4LDI5IEBACiAJd205N3h4X2JhdF91cGRhdGUoJmJhdF9wcyk7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTk3eHhfY2hyZ19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzY2hlZHVsZV93b3JrKCZiYXRfd29yayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHdtOTd4eF9iYXRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgd205N3h4X2JhdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtOTd4eF9iYXRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgd205N3h4X2JhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXNjaGVkdWxlX3dvcmsoJmJhdF93b3JrKTsKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHdtOTd4eF9iYXRfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHdtOTd4eF9iYXRfcmVzdW1lIE5VTEwKKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHdtOTd4eF9iYXRfcG1fb3BzID0geworCS5zdXNwZW5kCT0gd205N3h4X2JhdF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gd205N3h4X2JhdF9yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdtOTd4eF9iYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpAQCAtMTQ5LDYgKzE2OCwxNSBAQAogCWludCByZXQgPSAwOwogCWludCBwcm9wcyA9IDE7CS8qIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQgKi8KIAlpbnQgaSA9IDA7CisJc3RydWN0IHdtOTd4eF9wZGF0YSAqd21kYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgd205N3h4X2JhdHRfcGRhdGEgKnBkYXRhOworCisJaWYgKGdwZGF0YSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkRvIG5vdCBwYXNzIHBsYXRmb3JtX2RhdGEgdGhyb3VnaCAiCisJCQkid205N3h4X2JhdF9zZXRfcGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCXBkYXRhID0gd21kYXRhLT5iYXR0X3BkYXRhOwogCiAJaWYgKGRldi0+aWQgIT0gLTEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTU2LDE3ICsxODQsMjIgQEAKIAltdXRleF9pbml0KCZ3b3JrX2xvY2spOwogCiAJaWYgKCFwZGF0YSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIlBsZWFzZSB1c2Ugd205N3h4X2JhdF9zZXRfcGRhdGFcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIHBsYXRmb3JtX2RhdGEgc3VwcGxpZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocGRhdGEtPmNoYXJnZV9ncGlvID49IDAgJiYgZ3Bpb19pc192YWxpZChwZGF0YS0+Y2hhcmdlX2dwaW8pKSB7CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmNoYXJnZV9ncGlvKSkgewogCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmNoYXJnZV9ncGlvLCAiQkFUVCBDSFJHIik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPmNoYXJnZV9ncGlvKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyMjsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEocGRhdGEtPmNoYXJnZV9ncGlvKSwKKwkJCQl3bTk3eHhfY2hyZ19pcnEsIElSUUZfRElTQUJMRUQsCisJCQkJIkFDIERldGVjdCIsIDApOworCQlpZiAocmV0KQorCQkJZ290byBlcnIyOwogCQlwcm9wcysrOwkvKiBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMgKi8KIAl9CiAKQEAgLTE4Myw3ICsyMTYsNyBAQAogCiAJcHJvcCA9IGt6YWxsb2MocHJvcHMgKiBzaXplb2YoKnByb3ApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByb3ApCi0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIzOwogCiAJcHJvcFtpKytdID0gUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVDsKIAlpZiAocGRhdGEtPmNoYXJnZV9ncGlvID49IDApCkBAIC0yMTYsMjEgKzI0OSwzMCBAQAogCWlmICghcmV0KQogCQlzY2hlZHVsZV93b3JrKCZiYXRfd29yayk7CiAJZWxzZQotCQlnb3RvIGVycjM7CisJCWdvdG8gZXJyNDsKIAogCXJldHVybiAwOwotZXJyMzoKK2VycjQ6CiAJa2ZyZWUocHJvcCk7CitlcnIzOgorCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5jaGFyZ2VfZ3BpbykpCisJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5jaGFyZ2VfZ3BpbyksIGRldik7CiBlcnIyOgotCWdwaW9fZnJlZShwZGF0YS0+Y2hhcmdlX2dwaW8pOworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5jaGFyZ2VfZ3BpbykpCisJCWdwaW9fZnJlZShwZGF0YS0+Y2hhcmdlX2dwaW8pOwogZXJyOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHdtOTd4eF9iYXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlpZiAocGRhdGEgJiYgcGRhdGEtPmNoYXJnZV9ncGlvICYmIHBkYXRhLT5jaGFyZ2VfZ3BpbyA+PSAwKQorCXN0cnVjdCB3bTk3eHhfcGRhdGEgKndtZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHdtOTd4eF9iYXR0X3BkYXRhICpwZGF0YSA9IHdtZGF0YS0+YmF0dF9wZGF0YTsKKworCWlmIChwZGF0YSAmJiBncGlvX2lzX3ZhbGlkKHBkYXRhLT5jaGFyZ2VfZ3BpbykpIHsKKwkJZnJlZV9pcnEoZ3Bpb190b19pcnEocGRhdGEtPmNoYXJnZV9ncGlvKSwgZGV2KTsKIAkJZ3Bpb19mcmVlKHBkYXRhLT5jaGFyZ2VfZ3Bpbyk7CisJfQogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmJhdF9wcyk7CiAJa2ZyZWUocHJvcCk7CkBAIC0yNDEsMTEgKzI4MywxMiBAQAogCS5kcml2ZXIJPSB7CiAJCS5uYW1lCT0gIndtOTd4eC1iYXR0ZXJ5IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZ3bTk3eHhfYmF0X3BtX29wcywKKyNlbmRpZgogCX0sCiAJLnByb2JlCQk9IHdtOTd4eF9iYXRfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTk3eHhfYmF0X3JlbW92ZSksCi0JLnN1c3BlbmQJPSB3bTk3eHhfYmF0X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSB3bTk3eHhfYmF0X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHdtOTd4eF9iYXRfaW5pdCh2b2lkKQpAQCAtMjU4LDkgKzMwMSw5IEBACiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtOTd4eF9iYXRfZHJpdmVyKTsKIH0KIAotdm9pZCBfX2luaXQgd205N3h4X2JhdF9zZXRfcGRhdGEoc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gKmRhdGEpCit2b2lkIHdtOTd4eF9iYXRfc2V0X3BkYXRhKHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvICpkYXRhKQogewotCXBkYXRhID0gZGF0YTsKKwlncGRhdGEgPSBkYXRhOwogfQogRVhQT1JUX1NZTUJPTF9HUEwod205N3h4X2JhdF9zZXRfcGRhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCAyZGM0MmJiLi5iY2JiMTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTEsNiArMSw1IEBACiBtZW51Y29uZmlnIFJFR1VMQVRPUgogCWJvb2wgIlZvbHRhZ2UgYW5kIEN1cnJlbnQgUmVndWxhdG9yIFN1cHBvcnQiCi0JZGVmYXVsdCBuCiAJaGVscAogCSAgR2VuZXJpYyBWb2x0YWdlIGFuZCBDdXJyZW50IFJlZ3VsYXRvciBzdXBwb3J0LgogCkBAIC0zMCw3ICsyOSw2IEBACiAKIGNvbmZpZyBSRUdVTEFUT1JfRklYRURfVk9MVEFHRQogCXRyaXN0YXRlICJGaXhlZCB2b2x0YWdlIHJlZ3VsYXRvciBzdXBwb3J0IgotCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGZpeGVkIHZvbHRhZ2UgcmVndWxhdG9ycywKIAkgIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aGljaCB1c2UgYSBjb21iaW5hdGlvbiBvZiBzb2Z0d2FyZQpAQCAtMzgsNyArMzYsNiBAQAogCiBjb25maWcgUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIKIAl0cmlzdGF0ZSAiVmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydCIKLQlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIHZpcnR1YWwgY29uc3VtZXIgZm9yIHRoZSB2b2x0YWdlIGFuZAogICAgICAgICAgIGN1cnJlbnQgcmVndWxhdG9yIEFQSSB3aGljaCBwcm92aWRlcyBzeXNmcyBjb250cm9scyBmb3IKQEAgLTQ5LDE3ICs0NiwxNSBAQAogCiBjb25maWcgUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUgogCXRyaXN0YXRlICJVc2Vyc3BhY2UgcmVndWxhdG9yIGNvbnN1bWVyIHN1cHBvcnQiCi0JZGVmYXVsdCBuCiAJaGVscAogCSAgVGhlcmUgYXJlIHNvbWUgY2xhc3NlcyBvZiBkZXZpY2VzIHRoYXQgYXJlIGNvbnRyb2xsZWQgZW50aXJlbHkKLQkgIGZyb20gdXNlciBzcGFjZS4gVXNlcnNhcGNlIGNvbnN1bWVyIGRyaXZlciBwcm92aWRlcyBhYmlsaXR5IHRvCisJICBmcm9tIHVzZXIgc3BhY2UuIFVzZXJzcGFjZSBjb25zdW1lciBkcml2ZXIgcHJvdmlkZXMgYWJpbGl0eSB0bwogCSAgY29udHJvbCBwb3dlciBzdXBwbGllcyBmb3Igc3VjaCBkZXZpY2VzLgogCiAgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgbm8uCiAKIGNvbmZpZyBSRUdVTEFUT1JfQlEyNDAyMgogCXRyaXN0YXRlICJUSSBicTI0MDIyIER1YWwgSW5wdXQgMS1DZWxsIExpLUlvbiBDaGFyZ2VyIElDIgotCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGNvbnRyb2xzIGEgVEkgYnEyNDAyMiBDaGFyZ2VyIGF0dGFjaGVkIHZpYQogCSAgR1BJT3MuIFRoZSBwcm92aWRlZCBjdXJyZW50IHJlZ3VsYXRvciBjYW4gZW5hYmxlL2Rpc2FibGUKQEAgLTY5LDcgKzY0LDYgQEAKIGNvbmZpZyBSRUdVTEFUT1JfTUFYMTU4NgogCXRyaXN0YXRlICJNYXhpbSAxNTg2LzE1ODcgdm9sdGFnZSByZWd1bGF0b3IiCiAJZGVwZW5kcyBvbiBJMkMKLQlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGRyaXZlciBjb250cm9scyBhIE1heGltIDE1ODYgb3IgMTU4NyB2b2x0YWdlIG91dHB1dAogCSAgcmVndWxhdG9yIHZpYSBJMkMgYnVzLiBUaGUgcHJvdmlkZWQgcmVndWxhdG9yIGlzIHN1aXRhYmxlCkBAIC0xNDcsNSArMTQxLDIxIEBACiAJIEFCMzEwMCBhbmFsb2cgYmFzZWJhbmQgZGVhbGluZyB3aXRoIHBvd2VyIHJlZ3VsYXRvcnMKIAkgZm9yIHRoZSBzeXN0ZW0uCiAKK2NvbmZpZyBSRUdVTEFUT1JfVFBTNjUwMjMKKwl0cmlzdGF0ZSAiVEkgVFBTNjUwMjMgUG93ZXIgcmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFRQUzY1MDIzIHZvbHRhZ2UgcmVndWxhdG9yIGNoaXBzLiBUUFM2NTAyMyBwcm92aWRlcworCSAgdGhyZWUgc3RlcC1kb3duIGNvbnZlcnRlcnMgYW5kIHR3byBnZW5lcmFsLXB1cnBvc2UgTERPIHZvbHRhZ2UgcmVndWxhdG9ycy4KKwkgIEl0IHN1cHBvcnRzIFRJJ3Mgc29mdHdhcmUgYmFzZWQgQ2xhc3MtMiBTbWFydFJlZmxleCBpbXBsZW1lbnRhdGlvbi4KKworY29uZmlnIFJFR1VMQVRPUl9UUFM2NTA3WAorCXRyaXN0YXRlICJUSSBUUFM2NTA3WCBQb3dlciByZWd1bGF0b3JzIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgVFBTNjUwN1ggdm9sdGFnZSByZWd1bGF0b3IgY2hpcHMuIFRQUzY1MDdYIHByb3ZpZGVzCisJICB0aHJlZSBzdGVwLWRvd24gY29udmVydGVycyBhbmQgdHdvIGdlbmVyYWwtcHVycG9zZSBMRE8gdm9sdGFnZSByZWd1bGF0b3JzLgorCSAgSXQgc3VwcG9ydHMgVEkncyBzb2Z0d2FyZSBiYXNlZCBDbGFzcy0yIFNtYXJ0UmVmbGV4IGltcGxlbWVudGF0aW9uLgorCiBlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IDc2OGIzMzEuLjQyNTdhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC0yMyw0ICsyMyw3IEBACiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01DMTM3ODMpICs9IG1jMTM3ODMubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9BQjMxMDApICs9IGFiMzEwMC5vCiAKK29iai0kKENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMpICs9IHRwczY1MDIzLXJlZ3VsYXRvci5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYKSArPSB0cHM2NTA3eC1yZWd1bGF0b3IubworCiBjY2ZsYWdzLSQoQ09ORklHX1JFR1VMQVRPUl9ERUJVRykgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IDkxYmE5YmYuLjc0NGVhMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTM3LDcgKzM3LDcgQEAKICAqLwogc3RydWN0IHJlZ3VsYXRvcl9tYXAgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJY29uc3QgY2hhciAqZGV2X25hbWU7ICAgLyogVGhlIGRldl9uYW1lKCkgZm9yIHRoZSBjb25zdW1lciAqLwogCWNvbnN0IGNoYXIgKnN1cHBseTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogfTsKQEAgLTIzMiw3ICsyMzIsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJY29uc3QgY2hhciAqbmFtZTsKIAotCWlmIChyZGV2LT5jb25zdHJhaW50cy0+bmFtZSkKKwlpZiAocmRldi0+Y29uc3RyYWludHMgJiYgcmRldi0+Y29uc3RyYWludHMtPm5hbWUpCiAJCW5hbWUgPSByZGV2LT5jb25zdHJhaW50cy0+bmFtZTsKIAllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQogCQluYW1lID0gcmRldi0+ZGVzYy0+bmFtZTsKQEAgLTI4MCw4ICsyODAsMTMgQEAKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCByZXQ7CiAKLQlyZXR1cm4gcmVndWxhdG9yX3ByaW50X3N0YXRlKGJ1ZiwgX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJkZXYpKTsKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CisJcmV0ID0gcmVndWxhdG9yX3ByaW50X3N0YXRlKGJ1ZiwgX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJkZXYpKTsKKwltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIDA0NDQsIHJlZ3VsYXRvcl9zdGF0ZV9zaG93LCBOVUxMKTsKIApAQCAtODU3LDIzICs4NjIsMzkgQEAKICAqIHNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5OiBCaW5kIGEgcmVndWxhdG9yIHRvIGEgc3ltYm9saWMgc3VwcGx5CiAgKiBAcmRldjogICAgICAgICByZWd1bGF0b3Igc291cmNlCiAgKiBAY29uc3VtZXJfZGV2OiBkZXZpY2UgdGhlIHN1cHBseSBhcHBsaWVzIHRvCisgKiBAY29uc3VtZXJfZGV2X25hbWU6IGRldl9uYW1lKCkgc3RyaW5nIGZvciBkZXZpY2Ugc3VwcGx5IGFwcGxpZXMgdG8KICAqIEBzdXBwbHk6ICAgICAgIHN5bWJvbGljIG5hbWUgZm9yIHN1cHBseQogICoKICAqIEFsbG93cyBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBjb2RlIHRvIG1hcCBwaHlzaWNhbCByZWd1bGF0b3IKICAqIHNvdXJjZXMgdG8gc3ltYm9saWMgbmFtZXMgZm9yIHN1cHBsaWVzIGZvciB1c2UgYnkgZGV2aWNlcy4gIERldmljZXMKICAqIHNob3VsZCB1c2UgdGhlc2Ugc3ltYm9saWMgbmFtZXMgdG8gcmVxdWVzdCByZWd1bGF0b3JzLCBhdm9pZGluZyB0aGUKICAqIG5lZWQgdG8gcHJvdmlkZSBib2FyZC1zcGVjaWZpYyByZWd1bGF0b3IgbmFtZXMgYXMgcGxhdGZvcm0gZGF0YS4KKyAqCisgKiBPbmx5IG9uZSBvZiBjb25zdW1lcl9kZXYgYW5kIGNvbnN1bWVyX2Rldl9uYW1lIG1heSBiZSBzcGVjaWZpZWQuCiAgKi8KIHN0YXRpYyBpbnQgc2V0X2NvbnN1bWVyX2RldmljZV9zdXBwbHkoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0Jc3RydWN0IGRldmljZSAqY29uc3VtZXJfZGV2LCBjb25zdCBjaGFyICpzdXBwbHkpCisJc3RydWN0IGRldmljZSAqY29uc3VtZXJfZGV2LCBjb25zdCBjaGFyICpjb25zdW1lcl9kZXZfbmFtZSwKKwljb25zdCBjaGFyICpzdXBwbHkpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9tYXAgKm5vZGU7CisJaW50IGhhc19kZXY7CisKKwlpZiAoY29uc3VtZXJfZGV2ICYmIGNvbnN1bWVyX2Rldl9uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY29uc3VtZXJfZGV2X25hbWUgJiYgY29uc3VtZXJfZGV2KQorCQljb25zdW1lcl9kZXZfbmFtZSA9IGRldl9uYW1lKGNvbnN1bWVyX2Rldik7CiAKIAlpZiAoc3VwcGx5ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGNvbnN1bWVyX2Rldl9uYW1lICE9IE5VTEwpCisJCWhhc19kZXYgPSAxOworCWVsc2UKKwkJaGFzX2RldiA9IDA7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZyZWd1bGF0b3JfbWFwX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGNvbnN1bWVyX2RldiAhPSBub2RlLT5kZXYpCisJCWlmIChjb25zdW1lcl9kZXZfbmFtZSAhPSBub2RlLT5kZXZfbmFtZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc3RyY21wKG5vZGUtPnN1cHBseSwgc3VwcGx5KSAhPSAwKQogCQkJY29udGludWU7CkBAIC04ODYsMzAgKzkwNyw0NSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCW5vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX21hcCksIEdGUF9LRVJORUwpOworCW5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX21hcCksIEdGUF9LRVJORUwpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJbm9kZS0+cmVndWxhdG9yID0gcmRldjsKLQlub2RlLT5kZXYgPSBjb25zdW1lcl9kZXY7CiAJbm9kZS0+c3VwcGx5ID0gc3VwcGx5OwogCisJaWYgKGhhc19kZXYpIHsKKwkJbm9kZS0+ZGV2X25hbWUgPSBrc3RyZHVwKGNvbnN1bWVyX2Rldl9uYW1lLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5vZGUtPmRldl9uYW1lID09IE5VTEwpIHsKKwkJCWtmcmVlKG5vZGUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKIAlsaXN0X2FkZCgmbm9kZS0+bGlzdCwgJnJlZ3VsYXRvcl9tYXBfbGlzdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHVuc2V0X2NvbnN1bWVyX2RldmljZV9zdXBwbHkoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0Jc3RydWN0IGRldmljZSAqY29uc3VtZXJfZGV2KQorCWNvbnN0IGNoYXIgKmNvbnN1bWVyX2Rldl9uYW1lLCBzdHJ1Y3QgZGV2aWNlICpjb25zdW1lcl9kZXYpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9tYXAgKm5vZGUsICpuOwogCisJaWYgKGNvbnN1bWVyX2RldiAmJiAhY29uc3VtZXJfZGV2X25hbWUpCisJCWNvbnN1bWVyX2Rldl9uYW1lID0gZGV2X25hbWUoY29uc3VtZXJfZGV2KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmcmVndWxhdG9yX21hcF9saXN0LCBsaXN0KSB7Ci0JCWlmIChyZGV2ID09IG5vZGUtPnJlZ3VsYXRvciAmJgotCQkJY29uc3VtZXJfZGV2ID09IG5vZGUtPmRldikgewotCQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOwotCQkJa2ZyZWUobm9kZSk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJaWYgKHJkZXYgIT0gbm9kZS0+cmVndWxhdG9yKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbnN1bWVyX2Rldl9uYW1lICYmIG5vZGUtPmRldl9uYW1lICYmCisJCSAgICBzdHJjbXAoY29uc3VtZXJfZGV2X25hbWUsIG5vZGUtPmRldl9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKKwkJa2ZyZWUobm9kZS0+ZGV2X25hbWUpOworCQlrZnJlZShub2RlKTsKKwkJcmV0dXJuOwogCX0KIH0KIApAQCAtOTIwLDYgKzk1Niw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZyZWd1bGF0b3JfbWFwX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHJkZXYgPT0gbm9kZS0+cmVndWxhdG9yKSB7CiAJCQlsaXN0X2RlbCgmbm9kZS0+bGlzdCk7CisJCQlrZnJlZShub2RlLT5kZXZfbmFtZSk7CiAJCQlrZnJlZShub2RlKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTAwMSw2ICsxMDM4LDc3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qIEludGVybmFsIHJlZ3VsYXRvciByZXF1ZXN0IGZ1bmN0aW9uICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqX3JlZ3VsYXRvcl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCwKKwkJCQkJaW50IGV4Y2x1c2l2ZSkKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwlzdHJ1Y3QgcmVndWxhdG9yX21hcCAqbWFwOworCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciA9IEVSUl9QVFIoLUVOT0RFVik7CisJY29uc3QgY2hhciAqZGV2bmFtZSA9IE5VTEw7CisJaW50IHJldDsKKworCWlmIChpZCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yOiBnZXQoKSB3aXRoIG5vIGlkZW50aWZpZXJcbiIpOworCQlyZXR1cm4gcmVndWxhdG9yOworCX0KKworCWlmIChkZXYpCisJCWRldm5hbWUgPSBkZXZfbmFtZShkZXYpOworCisJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXAsICZyZWd1bGF0b3JfbWFwX2xpc3QsIGxpc3QpIHsKKwkJLyogSWYgdGhlIG1hcHBpbmcgaGFzIGEgZGV2aWNlIHNldCB1cCBpdCBtdXN0IG1hdGNoICovCisJCWlmIChtYXAtPmRldl9uYW1lICYmCisJCSAgICAoIWRldm5hbWUgfHwgc3RyY21wKG1hcC0+ZGV2X25hbWUsIGRldm5hbWUpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJjbXAobWFwLT5zdXBwbHksIGlkKSA9PSAwKSB7CisJCQlyZGV2ID0gbWFwLT5yZWd1bGF0b3I7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCXJldHVybiByZWd1bGF0b3I7CisKK2ZvdW5kOgorCWlmIChyZGV2LT5leGNsdXNpdmUpIHsKKwkJcmVndWxhdG9yID0gRVJSX1BUUigtRVBFUk0pOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZXhjbHVzaXZlICYmIHJkZXYtPm9wZW5fY291bnQpIHsKKwkJcmVndWxhdG9yID0gRVJSX1BUUigtRUJVU1kpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJkZXYtPm93bmVyKSkKKwkJZ290byBvdXQ7CisKKwlyZWd1bGF0b3IgPSBjcmVhdGVfcmVndWxhdG9yKHJkZXYsIGRldiwgaWQpOworCWlmIChyZWd1bGF0b3IgPT0gTlVMTCkgeworCQlyZWd1bGF0b3IgPSBFUlJfUFRSKC1FTk9NRU0pOworCQltb2R1bGVfcHV0KHJkZXYtPm93bmVyKTsKKwl9CisKKwlyZGV2LT5vcGVuX2NvdW50Kys7CisJaWYgKGV4Y2x1c2l2ZSkgeworCQlyZGV2LT5leGNsdXNpdmUgPSAxOworCisJCXJldCA9IF9yZWd1bGF0b3JfaXNfZW5hYmxlZChyZGV2KTsKKwkJaWYgKHJldCA+IDApCisJCQlyZGV2LT51c2VfY291bnQgPSAxOworCQllbHNlCisJCQlyZGV2LT51c2VfY291bnQgPSAwOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCisJcmV0dXJuIHJlZ3VsYXRvcjsKK30KKwogLyoqCiAgKiByZWd1bGF0b3JfZ2V0IC0gbG9va3VwIGFuZCBvYnRhaW4gYSByZWZlcmVuY2UgdG8gYSByZWd1bGF0b3IuCiAgKiBAZGV2OiBkZXZpY2UgZm9yIHJlZ3VsYXRvciAiY29uc3VtZXIiCkBAIC0xMDE2LDQ0ICsxMTI0LDM4IEBACiAgKi8KIHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlzdHJ1Y3QgcmVndWxhdG9yX21hcCAqbWFwOwotCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciA9IEVSUl9QVFIoLUVOT0RFVik7Ci0KLQlpZiAoaWQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInJlZ3VsYXRvcjogZ2V0KCkgd2l0aCBubyBpZGVudGlmaWVyXG4iKTsKLQkJcmV0dXJuIHJlZ3VsYXRvcjsKLQl9Ci0KLQltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnJlZ3VsYXRvcl9tYXBfbGlzdCwgbGlzdCkgewotCQlpZiAoZGV2ID09IG1hcC0+ZGV2ICYmCi0JCSAgICBzdHJjbXAobWFwLT5zdXBwbHksIGlkKSA9PSAwKSB7Ci0JCQlyZGV2ID0gbWFwLT5yZWd1bGF0b3I7Ci0JCQlnb3RvIGZvdW5kOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZWd1bGF0b3I7Ci0KLWZvdW5kOgotCWlmICghdHJ5X21vZHVsZV9nZXQocmRldi0+b3duZXIpKQotCQlnb3RvIG91dDsKLQotCXJlZ3VsYXRvciA9IGNyZWF0ZV9yZWd1bGF0b3IocmRldiwgZGV2LCBpZCk7Ci0JaWYgKHJlZ3VsYXRvciA9PSBOVUxMKSB7Ci0JCXJlZ3VsYXRvciA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCW1vZHVsZV9wdXQocmRldi0+b3duZXIpOwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZWd1bGF0b3I7CisJcmV0dXJuIF9yZWd1bGF0b3JfZ2V0KGRldiwgaWQsIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2dldCk7CiAKIC8qKgorICogcmVndWxhdG9yX2dldF9leGNsdXNpdmUgLSBvYnRhaW4gZXhjbHVzaXZlIGFjY2VzcyB0byBhIHJlZ3VsYXRvci4KKyAqIEBkZXY6IGRldmljZSBmb3IgcmVndWxhdG9yICJjb25zdW1lciIKKyAqIEBpZDogU3VwcGx5IG5hbWUgb3IgcmVndWxhdG9yIElELgorICoKKyAqIFJldHVybnMgYSBzdHJ1Y3QgcmVndWxhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ3VsYXRvciBwcm9kdWNlciwKKyAqIG9yIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgT3RoZXIgY29uc3VtZXJzIHdpbGwgYmUKKyAqIHVuYWJsZSB0byBvYnRhaW4gdGhpcyByZWZlcmVuY2UgaXMgaGVsZCBhbmQgdGhlIHVzZSBjb3VudCBmb3IgdGhlCisgKiByZWd1bGF0b3Igd2lsbCBiZSBpbml0aWFsaXNlZCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQorICogcmVndWxhdG9yLgorICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBjb25zdW1lcnMgd2hpY2ggY2Fubm90IHRvbGVyYXRlIHNoYXJlZAorICogdXNlIG9mIHRoZSByZWd1bGF0b3Igc3VjaCBhcyB0aG9zZSB3aGljaCBuZWVkIHRvIGZvcmNlIHRoZQorICogcmVndWxhdG9yIG9mZiBmb3IgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIGhhcmR3YXJlIHRoZXkgYXJlCisgKiBjb250cm9sbGluZy4KKyAqCisgKiBVc2Ugb2Ygc3VwcGx5IG5hbWVzIGNvbmZpZ3VyZWQgdmlhIHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseSgpIGlzCisgKiBzdHJvbmdseSBlbmNvdXJhZ2VkLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3VwcGx5IG5hbWUgdXNlZAorICogc2hvdWxkIG1hdGNoIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSBzdXBwbHkgYW5kL29yIHRoZSByZWxldmFudAorICogZGV2aWNlIHBpbnMgaW4gdGhlIGRhdGFzaGVldC4KKyAqLworc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yX2dldF9leGNsdXNpdmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4gX3JlZ3VsYXRvcl9nZXQoZGV2LCBpZCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZ2V0X2V4Y2x1c2l2ZSk7CisKKy8qKgogICogcmVndWxhdG9yX3B1dCAtICJmcmVlIiB0aGUgcmVndWxhdG9yIHNvdXJjZQogICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQogICoKQEAgLTEwODEsMjEgKzExODMsMjkgQEAKIAlsaXN0X2RlbCgmcmVndWxhdG9yLT5saXN0KTsKIAlrZnJlZShyZWd1bGF0b3IpOwogCisJcmRldi0+b3Blbl9jb3VudC0tOworCXJkZXYtPmV4Y2x1c2l2ZSA9IDA7CisKIAltb2R1bGVfcHV0KHJkZXYtPm93bmVyKTsKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9wdXQpOwogCitzdGF0aWMgaW50IF9yZWd1bGF0b3JfY2FuX2NoYW5nZV9zdGF0dXMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKKwkJcmV0dXJuIDA7CisKKwlpZiAocmRldi0+Y29uc3RyYWludHMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIC8qIGxvY2tzIGhlbGQgYnkgcmVndWxhdG9yX2VuYWJsZSgpICovCiBzdGF0aWMgaW50IF9yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCWludCByZXQgPSAtRUlOVkFMOwotCi0JaWYgKCFyZGV2LT5jb25zdHJhaW50cykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBoYXMgbm8gY29uc3RyYWludHNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWludCByZXQ7CiAKIAkvKiBkbyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgc3VwcGx5IHJlZ3VsYXRvciBmaXJzdCAqLwogCWlmIChyZGV2LT5zdXBwbHkpIHsKQEAgLTExMDgsMjQgKzEyMTgsMzUgQEAKIAl9CiAKIAkvKiBjaGVjayB2b2x0YWdlIGFuZCByZXF1ZXN0ZWQgbG9hZCBiZWZvcmUgZW5hYmxpbmcgKi8KLQlpZiAocmRldi0+ZGVzYy0+b3BzLT5lbmFibGUpIHsKKwlpZiAocmRldi0+Y29uc3RyYWludHMgJiYKKwkgICAgKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayAmIFJFR1VMQVRPUl9DSEFOR0VfRFJNUykpCisJCWRybXNfdUFfdXBkYXRlKHJkZXYpOwogCi0JCWlmIChyZGV2LT5jb25zdHJhaW50cyAmJgotCQkJKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayAmCi0JCQlSRUdVTEFUT1JfQ0hBTkdFX0RSTVMpKQotCQkJZHJtc191QV91cGRhdGUocmRldik7CisJaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAwKSB7CisJCS8qIFRoZSByZWd1bGF0b3IgbWF5IG9uIGlmIGl0J3Mgbm90IHN3aXRjaGFibGUgb3IgbGVmdCBvbiAqLworCQlyZXQgPSBfcmVndWxhdG9yX2lzX2VuYWJsZWQocmRldik7CisJCWlmIChyZXQgPT0gLUVJTlZBTCB8fCByZXQgPT0gMCkgeworCQkJaWYgKCFfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpKQorCQkJCXJldHVybiAtRVBFUk07CiAKLQkJcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5lbmFibGUocmRldik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZW5hYmxlICVzOiAlZFxuIiwKKwkJCWlmIChyZGV2LT5kZXNjLT5vcHMtPmVuYWJsZSkgeworCQkJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+ZW5hYmxlKHJkZXYpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlyZXR1cm4gcmV0OworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpc19lbmFibGVkKCkgZmFpbGVkIGZvciAlczogJWRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIHJkZXYtPmRlc2MtPm5hbWUsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCXJkZXYtPnVzZV9jb3VudCsrOwotCQlyZXR1cm4gcmV0OworCQkvKiBGYWxsdGhyb3VnaCBvbiBwb3NpdGl2ZSByZXR1cm4gdmFsdWVzIC0gYWxyZWFkeSBlbmFibGVkICovCiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZGV2LT51c2VfY291bnQrKzsKKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTExNjUsNyArMTI4Niw4IEBACiAJaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAxICYmICFyZGV2LT5jb25zdHJhaW50cy0+YWx3YXlzX29uKSB7CiAKIAkJLyogd2UgYXJlIGxhc3QgdXNlciAqLwotCQlpZiAocmRldi0+ZGVzYy0+b3BzLT5kaXNhYmxlKSB7CisJCWlmIChfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpICYmCisJCSAgICByZGV2LT5kZXNjLT5vcHMtPmRpc2FibGUpIHsKIAkJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+ZGlzYWJsZShyZGV2KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGRpc2FibGUgJXNcbiIsCkBAIC0xMjY1LDIwICsxMzg3LDExIEBACiAKIHN0YXRpYyBpbnQgX3JlZ3VsYXRvcl9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7Ci0KIAkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAoIXJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKCFyZGV2LT5kZXNjLT5vcHMtPmlzX2VuYWJsZWQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5pc19lbmFibGVkKHJkZXYpOwotb3V0OgotCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZChyZGV2KTsKIH0KIAogLyoqCkBAIC0xMjk1LDcgKzE0MDgsMTMgQEAKICAqLwogaW50IHJlZ3VsYXRvcl9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcikKIHsKLQlyZXR1cm4gX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJlZ3VsYXRvci0+cmRldik7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnJlZ3VsYXRvci0+cmRldi0+bXV0ZXgpOworCXJldCA9IF9yZWd1bGF0b3JfaXNfZW5hYmxlZChyZWd1bGF0b3ItPnJkZXYpOworCW11dGV4X3VubG9jaygmcmVndWxhdG9yLT5yZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2lzX2VuYWJsZWQpOwogCkBAIC0xMzUwLDYgKzE0NjksMzUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UpOwogCiAvKioKKyAqIHJlZ3VsYXRvcl9pc19zdXBwb3J0ZWRfdm9sdGFnZSAtIGNoZWNrIGlmIGEgdm9sdGFnZSByYW5nZSBjYW4gYmUgc3VwcG9ydGVkCisgKgorICogQHJlZ3VsYXRvcjogUmVndWxhdG9yIHRvIGNoZWNrLgorICogQG1pbl91VjogTWluaW11bSByZXF1aXJlZCB2b2x0YWdlIGluIHVWLgorICogQG1heF91VjogTWF4aW11bSByZXF1aXJlZCB2b2x0YWdlIGluIHVWLgorICoKKyAqIFJldHVybnMgYSBib29sZWFuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IHJlZ3VsYXRvcl9pc19zdXBwb3J0ZWRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpbnQgaSwgdm9sdGFnZXMsIHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhyZWd1bGF0b3IpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXZvbHRhZ2VzID0gcmV0OworCisJZm9yIChpID0gMDsgaSA8IHZvbHRhZ2VzOyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZShyZWd1bGF0b3IsIGkpOworCisJCWlmIChyZXQgPj0gbWluX3VWICYmIHJldCA8PSBtYXhfdVYpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UgLSBzZXQgcmVndWxhdG9yIG91dHB1dCB2b2x0YWdlCiAgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCiAgKiBAbWluX3VWOiBNaW5pbXVtIHJlcXVpcmVkIHZvbHRhZ2UgaW4gdVYKQEAgLTIwOTEsMTEgKzIyMzksMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaW5pdF9kYXRhLT5udW1fY29uc3VtZXJfc3VwcGxpZXM7IGkrKykgewogCQlyZXQgPSBzZXRfY29uc3VtZXJfZGV2aWNlX3N1cHBseShyZGV2LAogCQkJaW5pdF9kYXRhLT5jb25zdW1lcl9zdXBwbGllc1tpXS5kZXYsCisJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldl9uYW1lLAogCQkJaW5pdF9kYXRhLT5jb25zdW1lcl9zdXBwbGllc1tpXS5zdXBwbHkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQogCQkJCXVuc2V0X2NvbnN1bWVyX2RldmljZV9zdXBwbHkocmRldiwKLQkJCQkJaW5pdF9kYXRhLT5jb25zdW1lcl9zdXBwbGllc1tpXS5kZXYpOworCQkJCSAgICBpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldl9uYW1lLAorCQkJCSAgICBpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldik7CiAJCQlnb3RvIHNjcnViOwogCQl9CiAJfQpAQCAtMjEzMCw2ICsyMjgwLDcgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCVdBUk5fT04ocmRldi0+b3Blbl9jb3VudCk7CiAJdW5zZXRfcmVndWxhdG9yX3N1cHBsaWVzKHJkZXYpOwogCWxpc3RfZGVsKCZyZGV2LT5saXN0KTsKIAlpZiAocmRldi0+c3VwcGx5KQpAQCAtMjI3NywxNCArMjQyOCwxNCBAQAogCQlvcHMgPSByZGV2LT5kZXNjLT5vcHM7CiAJCWMgPSByZGV2LT5jb25zdHJhaW50czsKIAotCQlpZiAoYy0+bmFtZSkKKwkJaWYgKGMgJiYgYy0+bmFtZSkKIAkJCW5hbWUgPSBjLT5uYW1lOwogCQllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQogCQkJbmFtZSA9IHJkZXYtPmRlc2MtPm5hbWU7CiAJCWVsc2UKIAkJCW5hbWUgPSAicmVndWxhdG9yIjsKIAotCQlpZiAoIW9wcy0+ZGlzYWJsZSB8fCBjLT5hbHdheXNfb24pCisJCWlmICghb3BzLT5kaXNhYmxlIHx8IChjICYmIGMtPmFsd2F5c19vbikpCiAJCQljb250aW51ZTsKIAogCQltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCmluZGV4IGI4Yjg5ZWYuLmFhMjI0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCkBAIC02NCw2ICs2NCwxNCBAQAogI2RlZmluZSBEQTkwMzRfTURUVjIJCSgweDMzKQogI2RlZmluZSBEQTkwMzRfTVZSQwkJKDB4MzQpCiAKKy8qIERBOTAzNSBSZWdpc3RlcnMuIERBOTAzNCBSZWdpc3RlcnMgYXJlIGNvbXB0YWJpbGUgdG8gREE5MDM1LiAqLworI2RlZmluZSBEQTkwMzVfT1ZFUjMJCSgweDEyKQorI2RlZmluZSBEQTkwMzVfVkNDMgkJKDB4MWYpCisjZGVmaW5lIERBOTAzNV8zRFRWMQkJKDB4MmMpCisjZGVmaW5lIERBOTAzNV8zRFRWMgkJKDB4MmQpCisjZGVmaW5lIERBOTAzNV8zVlJDCQkoMHgyZSkKKyNkZWZpbmUgREE5MDM1X0FVVE9TS0lQCQkoMHgyZikKKwogc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAKQEAgLTc5LDYgKzg3LDEwIEBACiAJaW50CWVuYWJsZV9iaXQ7CiB9OwogCitzdGF0aWMgaW50IGRhOTAzNF9sZG8xMl9kYXRhW10gPSB7IDE3MDAsIDE3NTAsIDE4MDAsIDE4NTAsIDE5MDAsIDE5NTAsCisJCQkJICAgMjAwMCwgMjA1MCwgMjcwMCwgMjc1MCwgMjgwMCwgMjg1MCwKKwkJCQkgICAyOTAwLCAyOTUwLCAzMDAwLCAzMDUwIH07CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdG9fZGE5MDN4X2RldihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlyZXR1cm4gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQtPnBhcmVudDsKQEAgLTE2Miw2ICsxNzQsMTcgQEAKIAlyZXR1cm4gISEocmVnX3ZhbCAmICgxIDw8IGluZm8tPmVuYWJsZV9iaXQpKTsKIH0KIAorc3RhdGljIGludCBkYTkwM3hfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAqIHNlbGVjdG9yOworCWlmIChyZXQgPiBpbmZvLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiByZXQ7Cit9CisKIC8qIERBOTAzMCBzcGVjaWZpYyBvcGVyYXRpb25zICovCiBzdGF0aWMgaW50IGRhOTAzMF9zZXRfbGRvMV8xNV92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCSAgICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQpAQCAtMjc4LDcgKzMwMSw3IEBACiAJfQogCiAJdmFsID0gKG1pbl91ViAtIGluZm8tPm1pbl91ViArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7Ci0JdmFsID0gKHZhbCA+IDcgfHwgdmFsIDwgMjApID8gOCA6IHZhbCAtIDEyOworCXZhbCA9ICh2YWwgPj0gMjApID8gdmFsIC0gMTIgOiAoKHZhbCA+IDcpID8gOCA6IHZhbCk7CiAJdmFsIDw8PSBpbmZvLT52b2xfc2hpZnQ7CiAJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKIApAQCAtMzA1LDkgKzMyOCwxOCBAQAogCXJldHVybiBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWICogdmFsOwogfQogCitzdGF0aWMgaW50IGRhOTAzNF9saXN0X2xkbzEyX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlpZiAoc2VsZWN0b3IgPiBBUlJBWV9TSVpFKGRhOTAzNF9sZG8xMl9kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRhOTAzNF9sZG8xMl9kYXRhW3NlbGVjdG9yXSAqIDEwMDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBkYTkwM3hfcmVndWxhdG9yX2xkb19vcHMgPSB7CiAJLnNldF92b2x0YWdlCT0gZGE5MDN4X3NldF9sZG9fdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwM3hfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzeF9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTMxNyw2ICszNDksNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzMF9yZWd1bGF0b3JfbGRvMTRfb3BzID0gewogCS5zZXRfdm9sdGFnZQk9IGRhOTAzMF9zZXRfbGRvMTRfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwMzBfZ2V0X2xkbzE0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzeF9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTMyNiw2ICszNTksNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzMF9yZWd1bGF0b3JfbGRvMV8xNV9vcHMgPSB7CiAJLnNldF92b2x0YWdlCT0gZGE5MDMwX3NldF9sZG8xXzE1X3ZvbHRhZ2UsCiAJLmdldF92b2x0YWdlCT0gZGE5MDN4X2dldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UJPSBkYTkwM3hfbGlzdF92b2x0YWdlLAogCS5lbmFibGUJCT0gZGE5MDN4X2VuYWJsZSwKIAkuZGlzYWJsZQk9IGRhOTAzeF9kaXNhYmxlLAogCS5pc19lbmFibGVkCT0gZGE5MDN4X2lzX2VuYWJsZWQsCkBAIC0zMzQsNiArMzY4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBkYTkwMzRfcmVndWxhdG9yX2R2Y19vcHMgPSB7CiAJLnNldF92b2x0YWdlCT0gZGE5MDM0X3NldF9kdmNfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwM3hfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzeF9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTM0Myw2ICszNzgsNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzID0gewogCS5zZXRfdm9sdGFnZQk9IGRhOTAzNF9zZXRfbGRvMTJfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwMzRfZ2V0X2xkbzEyX3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzNF9saXN0X2xkbzEyX3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTM1NSw2ICszOTEsNyBAQAogCQkub3BzCT0gJmRhOTAzeF9yZWd1bGF0b3JfbGRvX29wcywJCQlcCiAJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKIAkJLmlkCT0gX3BtaWMjI19JRF9MRE8jI19pZCwJCQkJXAorCQkubl92b2x0YWdlcyA9IChzdGVwKSA/ICgobWF4IC0gbWluKSAvIHN0ZXAgKyAxKSA6IDEsCVwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCQkJCQlcCiAJfSwJCQkJCQkJCVwKIAkubWluX3VWCQk9IChtaW4pICogMTAwMCwJCQkJCVwKQEAgLTM2NywyNCArNDA0LDI1IEBACiAJLmVuYWJsZV9iaXQJPSAoZWJpdCksCQkJCQlcCiB9CiAKLSNkZWZpbmUgREE5MDM0X0RWQyhfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgZXJlZywgZWJpdCkgXAorI2RlZmluZSBEQTkwM3hfRFZDKF9wbWljLCBfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgZXJlZywgZWJpdCkgXAogewkJCQkJCQkJCVwKIAkuZGVzYwk9IHsJCQkJCQkJXAogCQkubmFtZQk9ICNfaWQsCQkJCQkJXAogCQkub3BzCT0gJmRhOTAzNF9yZWd1bGF0b3JfZHZjX29wcywJCQlcCiAJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKLQkJLmlkCT0gREE5MDM0X0lEXyMjX2lkLAkJCQlcCisJCS5pZAk9IF9wbWljIyNfSURfIyNfaWQsCQkJCVwKKwkJLm5fdm9sdGFnZXMgPSAoc3RlcCkgPyAoKG1heCAtIG1pbikgLyBzdGVwICsgMSkgOiAxLAlcCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAkJCQkJXAogCX0sCQkJCQkJCQlcCiAJLm1pbl91VgkJPSAobWluKSAqIDEwMDAsCQkJCQlcCiAJLm1heF91VgkJPSAobWF4KSAqIDEwMDAsCQkJCQlcCiAJLnN0ZXBfdVYJPSAoc3RlcCkgKiAxMDAwLAkJCQlcCi0JLnZvbF9yZWcJPSBEQTkwMzRfIyN2cmVnLAkJCQlcCisJLnZvbF9yZWcJPSBfcG1pYyMjXyMjdnJlZywJCQkJXAogCS52b2xfc2hpZnQJPSAoMCksCQkJCQkJXAogCS52b2xfbmJpdHMJPSAobmJpdHMpLAkJCQkJXAotCS51cGRhdGVfcmVnCT0gREE5MDM0XyMjdXJlZywJCQkJXAorCS51cGRhdGVfcmVnCT0gX3BtaWMjI18jI3VyZWcsCQkJCVwKIAkudXBkYXRlX2JpdAk9ICh1Yml0KSwJCQkJCVwKLQkuZW5hYmxlX3JlZwk9IERBOTAzNF8jI2VyZWcsCQkJCVwKKwkuZW5hYmxlX3JlZwk9IF9wbWljIyNfIyNlcmVnLAkJCQlcCiAJLmVuYWJsZV9iaXQJPSAoZWJpdCksCQkJCQlcCiB9CiAKQEAgLTM5NCw4ICs0MzIsMjIgQEAKICNkZWZpbmUgREE5MDMwX0xETyhfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBzaGlmdCwgbmJpdHMsIGVyZWcsIGViaXQpCVwKIAlEQTkwM3hfTERPKERBOTAzMCwgX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgc2hpZnQsIG5iaXRzLCBlcmVnLCBlYml0KQogCisjZGVmaW5lIERBOTAzMF9EVkMoX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgbmJpdHMsIHVyZWcsIHViaXQsIGVyZWcsIGViaXQpIFwKKwlEQTkwM3hfRFZDKERBOTAzMCwgX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgbmJpdHMsIHVyZWcsIHViaXQsIFwKKwkJICAgZXJlZywgZWJpdCkKKworI2RlZmluZSBEQTkwMzRfRFZDKF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIG5iaXRzLCB1cmVnLCB1Yml0LCBlcmVnLCBlYml0KSBcCisJREE5MDN4X0RWQyhEQTkwMzQsIF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIG5iaXRzLCB1cmVnLCB1Yml0LCBcCisJCSAgIGVyZWcsIGViaXQpCisKKyNkZWZpbmUgREE5MDM1X0RWQyhfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgZXJlZywgZWJpdCkgXAorCURBOTAzeF9EVkMoREE5MDM1LCBfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgXAorCQkgICBlcmVnLCBlYml0KQorCiBzdGF0aWMgc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyBkYTkwM3hfcmVndWxhdG9yX2luZm9bXSA9IHsKIAkvKiBEQTkwMzAgKi8KKwlEQTkwMzBfRFZDKEJVQ0syLCA4NTAsIDE2MjUsIDI1LCBCVUNLMkRWTTEsIDUsIEJVQ0syRFZNMSwgNywgUkNUTDExLCAwKSwKKwogCURBOTAzMF9MRE8oIDEsIDEyMDAsIDMyMDAsIDEwMCwgICAgTERPMSwgMCwgNSwgUkNUTDEyLCAxKSwKIAlEQTkwMzBfTERPKCAyLCAxODAwLCAzMjAwLCAxMDAsICAgTERPMjMsIDAsIDQsIFJDVEwxMiwgMiksCiAJREE5MDMwX0xETyggMywgMTgwMCwgMzIwMCwgMTAwLCAgIExETzIzLCA0LCA0LCBSQ1RMMTIsIDMpLApAQCAtNDE3LDkgKzQ2OSw5IEBACiAJREE5MDMwX0xETygxMywgMjEwMCwgMjEwMCwgMCwgSU5WQUwsIDAsIDAsIFJDVEwxMSwgMyksIC8qIGZpeGVkIEAyLjFWICovCiAKIAkvKiBEQTkwMzQgKi8KLQlEQTkwMzRfRFZDKEJVQ0sxLCA3MjUsIDE1MDAsIDI1LCBBRFRWMSwgNSwgVkNDMSwgMCwgT1ZFUjEsIDApLAotCURBOTAzNF9EVkMoQlVDSzIsIDcyNSwgMTUwMCwgMjUsIENEVFYxLCA1LCBWQ0MxLCAyLCBPVkVSMSwgMSksCi0JREE5MDM0X0RWQyhMRE8yLCAgNzI1LCAxNTAwLCAyNSwgU0RUVjEsIDUsIFZDQzEsIDQsIE9WRVIxLCAyKSwKKwlEQTkwMzRfRFZDKEJVQ0sxLCA3MjUsIDE1MDAsIDI1LCBBRFRWMiwgNSwgVkNDMSwgMCwgT1ZFUjEsIDApLAorCURBOTAzNF9EVkMoQlVDSzIsIDcyNSwgMTUwMCwgMjUsIENEVFYyLCA1LCBWQ0MxLCAyLCBPVkVSMSwgMSksCisJREE5MDM0X0RWQyhMRE8yLCAgNzI1LCAxNTAwLCAyNSwgU0RUVjIsIDUsIFZDQzEsIDQsIE9WRVIxLCAyKSwKIAlEQTkwMzRfRFZDKExETzEsIDE3MDAsIDIwNzUsIDI1LCBNRFRWMSwgNCwgVkNDMSwgNiwgT1ZFUjMsIDQpLAogCiAJREE5MDM0X0xETyggMywgMTgwMCwgMzMwMCwgMTAwLCAgTERPNjQzLCAwLCA0LCBPVkVSMywgNSksCkBAIC00MzUsNiArNDg3LDkgQEAKIAlEQTkwMzRfTERPKDE0LCAxODAwLCAzMzAwLCAxMDAsIExETzE1MTQsIDAsIDQsIE9WRVIzLCAwKSwKIAlEQTkwMzRfTERPKDE1LCAxODAwLCAzMzAwLCAxMDAsIExETzE1MTQsIDQsIDQsIE9WRVIzLCAxKSwKIAlEQTkwMzRfTERPKDUsIDMxMDAsIDMxMDAsIDAsIElOVkFMLCAwLCAwLCBPVkVSMywgNyksIC8qIGZpeGVkIEAzLjFWICovCisKKwkvKiBEQTkwMzUgKi8KKwlEQTkwMzVfRFZDKEJVQ0szLCAxODAwLCAyMjAwLCAxMDAsIDNEVFYxLCAzLCBWQ0MyLCAwLCBPVkVSMywgMyksCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmZpbmRfcmVndWxhdG9yX2luZm8oaW50IGlkKQpAQCAtNDYyLDggKzUxNywxMCBAQAogCX0KIAogCS8qIFdvcmthcm91bmQgZm9yIHRoZSB3ZWlyZCBMRE8xMiB2b2x0YWdlIHNldHRpbmcgKi8KLQlpZiAocmktPmRlc2MuaWQgPT0gREE5MDM0X0lEX0xETzEyKQorCWlmIChyaS0+ZGVzYy5pZCA9PSBEQTkwMzRfSURfTERPMTIpIHsKIAkJcmktPmRlc2Mub3BzID0gJmRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzOworCQlyaS0+ZGVzYy5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShkYTkwMzRfbGRvMTJfZGF0YSk7CisJfQogCiAJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xNCkKIAkJcmktPmRlc2Mub3BzID0gJmRhOTAzMF9yZWd1bGF0b3JfbGRvMTRfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKaW5kZXggY2RjNjc0Zi4uZjhiMjk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCkBAIC01LDYgKzUsOSBAQAogICoKICAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiAgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBSb2dlciBRdWFkcm9zIDxleHQtcm9nZXIucXVhZHJvc0Bub2tpYS5jb20+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQpAQCAtMjAsMjAgKzIzLDQ1IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldjsKIAlpbnQgbWljcm92b2x0czsKKwlpbnQgZ3BpbzsKKwl1bnNpZ25lZCBlbmFibGVfaGlnaDoxOworCXVuc2lnbmVkIGlzX2VuYWJsZWQ6MTsKIH07CiAKIHN0YXRpYyBpbnQgZml4ZWRfdm9sdGFnZV9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCiB7Ci0JcmV0dXJuIDE7CisJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBkYXRhLT5pc19lbmFibGVkOwogfQogCiBzdGF0aWMgaW50IGZpeGVkX3ZvbHRhZ2VfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCiB7CisJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmdwaW8pKSB7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRhdGEtPmdwaW8sIGRhdGEtPmVuYWJsZV9oaWdoKTsKKwkJZGF0YS0+aXNfZW5hYmxlZCA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZml4ZWRfdm9sdGFnZV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmdwaW8pKSB7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRhdGEtPmdwaW8sICFkYXRhLT5lbmFibGVfaGlnaCk7CisJCWRhdGEtPmlzX2VuYWJsZWQgPSAwOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC01OCw2ICs4Niw3IEBACiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZml4ZWRfdm9sdGFnZV9vcHMgPSB7CiAJLmlzX2VuYWJsZWQgPSBmaXhlZF92b2x0YWdlX2lzX2VuYWJsZWQsCiAJLmVuYWJsZSA9IGZpeGVkX3ZvbHRhZ2VfZW5hYmxlLAorCS5kaXNhYmxlID0gZml4ZWRfdm9sdGFnZV9kaXNhYmxlLAogCS5nZXRfdm9sdGFnZSA9IGZpeGVkX3ZvbHRhZ2VfZ2V0X3ZvbHRhZ2UsCiAJLmxpc3Rfdm9sdGFnZSA9IGZpeGVkX3ZvbHRhZ2VfbGlzdF92b2x0YWdlLAogfTsKQEAgLTcwLDEyICs5OSwxNCBAQAogCiAJZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZHJ2ZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2UgZGF0YVxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KIAogCWRydmRhdGEtPmRlc2MubmFtZSA9IGtzdHJkdXAoY29uZmlnLT5zdXBwbHlfbmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRydmRhdGEtPmRlc2MubmFtZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBzdXBwbHkgbmFtZVxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KQEAgLTg1LDEyICsxMTYsNjIgQEAKIAlkcnZkYXRhLT5kZXNjLm5fdm9sdGFnZXMgPSAxOwogCiAJZHJ2ZGF0YS0+bWljcm92b2x0cyA9IGNvbmZpZy0+bWljcm92b2x0czsKKwlkcnZkYXRhLT5ncGlvID0gY29uZmlnLT5ncGlvOworCisJaWYgKGdwaW9faXNfdmFsaWQoY29uZmlnLT5ncGlvKSkgeworCQlkcnZkYXRhLT5lbmFibGVfaGlnaCA9IGNvbmZpZy0+ZW5hYmxlX2hpZ2g7CisKKwkJLyogRklYTUU6IFJlbW92ZSBiZWxvdyBwcmludCB3YXJuaW5nCisJCSAqCisJCSAqIGNvbmZpZy0+Z3BpbyBtdXN0IGJlIHNldCB0byAtRUlOVkFMIGJ5IHBsYXRmb3JtIGNvZGUgaWYKKwkJICogR1BJTyBjb250cm9sIGlzIG5vdCByZXF1aXJlZC4gSG93ZXZlciwgZWFybHkgYWRvcHRlcnMKKwkJICogbm90IHJlcXVpcmluZyBHUElPIGNvbnRyb2wgbWF5IGZvcmdldCB0byBpbml0aWFsaXplCisJCSAqIGNvbmZpZy0+Z3BpbyB0byAtRUlOVkFMLiBUaGlzIHdpbGwgY2F1c2UgR1BJTyAwIHRvIGJlIHVzZWQKKwkJICogZm9yIEdQSU8gY29udHJvbC4KKwkJICoKKwkJICogVGhpcyB3YXJuaW5nIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB1c2VycworCQkgKiBmb3IgdGhpcyBkcml2ZXIuCisJCSAqLworCQlpZiAoIWNvbmZpZy0+Z3BpbykKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJInVzaW5nIEdQSU8gMCBmb3IgcmVndWxhdG9yIGVuYWJsZSBjb250cm9sXG4iKTsKKworCQlyZXQgPSBncGlvX3JlcXVlc3QoY29uZmlnLT5ncGlvLCBjb25maWctPnN1cHBseV9uYW1lKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJICAgIkNvdWxkIG5vdCBvYnRhaW4gcmVndWxhdG9yIGVuYWJsZSBHUElPICVkOiAlZFxuIiwKKwkJCQkJCQljb25maWctPmdwaW8sIHJldCk7CisJCQlnb3RvIGVycl9uYW1lOworCQl9CisKKwkJLyogc2V0IG91dHB1dCBkaXJlY3Rpb24gd2l0aG91dCBjaGFuZ2luZyBzdGF0ZQorCQkgKiB0byBwcmV2ZW50IGdsaXRjaAorCQkgKi8KKwkJZHJ2ZGF0YS0+aXNfZW5hYmxlZCA9IGNvbmZpZy0+ZW5hYmxlZF9hdF9ib290OworCQlyZXQgPSBkcnZkYXRhLT5pc19lbmFibGVkID8KKwkJCQljb25maWctPmVuYWJsZV9oaWdoIDogIWNvbmZpZy0+ZW5hYmxlX2hpZ2g7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGNvbmZpZy0+Z3BpbywgcmV0KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJICAgIkNvdWxkIG5vdCBjb25maWd1cmUgcmVndWxhdG9yIGVuYWJsZSBHUElPICVkIGRpcmVjdGlvbjogJWRcbiIsCisJCQkJCQkJY29uZmlnLT5ncGlvLCByZXQpOworCQkJZ290byBlcnJfZ3BpbzsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogUmVndWxhdG9yIHdpdGhvdXQgR1BJTyBjb250cm9sIGlzIGNvbnNpZGVyZWQKKwkJICogYWx3YXlzIGVuYWJsZWQKKwkJICovCisJCWRydmRhdGEtPmlzX2VuYWJsZWQgPSAxOworCX0KIAogCWRydmRhdGEtPmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmZHJ2ZGF0YS0+ZGVzYywgJnBkZXYtPmRldiwKIAkJCQkJICBjb25maWctPmluaXRfZGF0YSwgZHJ2ZGF0YSk7CiAJaWYgKElTX0VSUihkcnZkYXRhLT5kZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoZHJ2ZGF0YS0+ZGV2KTsKLQkJZ290byBlcnJfbmFtZTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dwaW87CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2ZGF0YSk7CkBAIC0xMDAsNiArMTgxLDkgQEAKIAogCXJldHVybiAwOwogCitlcnJfZ3BpbzoKKwlpZiAoZ3Bpb19pc192YWxpZChjb25maWctPmdwaW8pKQorCQlncGlvX2ZyZWUoY29uZmlnLT5ncGlvKTsKIGVycl9uYW1lOgogCWtmcmVlKGRydmRhdGEtPmRlc2MubmFtZSk7CiBlcnI6CkBAIC0xMTUsNiArMTk5LDkgQEAKIAlrZnJlZShkcnZkYXRhLT5kZXNjLm5hbWUpOwogCWtmcmVlKGRydmRhdGEpOwogCisJaWYgKGdwaW9faXNfdmFsaWQoZHJ2ZGF0YS0+Z3BpbykpCisJCWdwaW9fZnJlZShkcnZkYXRhLT5ncGlvKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCmluZGV4IGE2MTAxOGEuLjc4MDNhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbHAzOTcxX21vZHVsZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IC1FTk9ERVY7CisJaW50IHJldDsKIAogCXJldCA9IGkyY19hZGRfZHJpdmVyKCZscDM5NzFfaTJjX2RyaXZlcik7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwppbmRleCA4ZTE0OTAwLi4wODAzZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwpAQCAtMjQsMTEgKzI0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbWZkL3BjZjUwNjMzL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvcGNmNTA2MzMvcG1pYy5oPgogCi0jZGVmaW5lIFBDRjUwNjMzX1JFR1VMQVRPUihfbmFtZSwgX2lkKSAJCVwKKyNkZWZpbmUgUENGNTA2MzNfUkVHVUxBVE9SKF9uYW1lLCBfaWQsIF9uKSAJCVwKIAl7CQkJCQlcCiAJCS5uYW1lID0gX25hbWUsIAkJCVwKIAkJLmlkID0gX2lkLAkJCVwKIAkJLm9wcyA9ICZwY2Y1MDYzM19yZWd1bGF0b3Jfb3BzLAlcCisJCS5uX3ZvbHRhZ2VzID0gX24sIFwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwgCVwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsIAkJXAogCX0KQEAgLTE0OSwzMyArMTUwLDIwIEBACiAJcmV0dXJuIHBjZjUwNjMzX3JlZ193cml0ZShwY2YsIHJlZ25yLCB2b2x0X2JpdHMpOwogfQogCi1zdGF0aWMgaW50IHBjZjUwNjMzX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgcGNmNTA2MzNfcmVndWxhdG9yX3ZvbHRhZ2VfdmFsdWUoZW51bSBwY2Y1MDYzM19yZWd1bGF0b3JfaWQgaWQsCisJCQkJCQl1OCBiaXRzKQogewotCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOwotCWludCByZWd1bGF0b3JfaWQsIG1pbGxpdm9sdHMsIHZvbHRfYml0czsKLQl1OCByZWducjsKKwlpbnQgbWlsbGl2b2x0czsKIAotCXBjZiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7OwotCi0JcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaWYgKHJlZ3VsYXRvcl9pZCA+PSBQQ0Y1MDYzM19OVU1fUkVHVUxBVE9SUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWduciA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9yZWdpc3RlcnNbcmVndWxhdG9yX2lkXTsKLQotCXZvbHRfYml0cyA9IHBjZjUwNjMzX3JlZ19yZWFkKHBjZiwgcmVnbnIpOwotCWlmICh2b2x0X2JpdHMgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlzd2l0Y2ggKHJlZ3VsYXRvcl9pZCkgeworCXN3aXRjaCAoaWQpIHsKIAljYXNlIFBDRjUwNjMzX1JFR1VMQVRPUl9BVVRPOgotCQltaWxsaXZvbHRzID0gYXV0b192b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBhdXRvX3ZvbHRhZ2VfdmFsdWUoYml0cyk7CiAJCWJyZWFrOwogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04xOgotCQltaWxsaXZvbHRzID0gZG93bl92b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBkb3duX3ZvbHRhZ2VfdmFsdWUoYml0cyk7CiAJCWJyZWFrOwogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04yOgotCQltaWxsaXZvbHRzID0gZG93bl92b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBkb3duX3ZvbHRhZ2VfdmFsdWUoYml0cyk7CiAJCWJyZWFrOwogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0xETzE6CiAJY2FzZSBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMjoKQEAgLTE4NCw3ICsxNzIsNyBAQAogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0xETzU6CiAJY2FzZSBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNjoKIAljYXNlIFBDRjUwNjMzX1JFR1VMQVRPUl9IQ0xETzoKLQkJbWlsbGl2b2x0cyA9IGxkb192b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBsZG9fdm9sdGFnZV92YWx1ZShiaXRzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTMsNiArMTgxLDQ5IEBACiAJcmV0dXJuIG1pbGxpdm9sdHMgKiAxMDAwOwogfQogCitzdGF0aWMgaW50IHBjZjUwNjMzX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgcGNmNTA2MzMgKnBjZjsKKwlpbnQgcmVndWxhdG9yX2lkOworCXU4IHZvbHRfYml0cywgcmVnbnI7CisKKwlwY2YgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7CisJaWYgKHJlZ3VsYXRvcl9pZCA+PSBQQ0Y1MDYzM19OVU1fUkVHVUxBVE9SUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWduciA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9yZWdpc3RlcnNbcmVndWxhdG9yX2lkXTsKKworCXZvbHRfYml0cyA9IHBjZjUwNjMzX3JlZ19yZWFkKHBjZiwgcmVnbnIpOworCisJcmV0dXJuIHBjZjUwNjMzX3JlZ3VsYXRvcl92b2x0YWdlX3ZhbHVlKHJlZ3VsYXRvcl9pZCwgdm9sdF9iaXRzKTsKK30KKworc3RhdGljIGludCBwY2Y1MDYzM19yZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOworCWludCByZWd1bGF0b3JfaWQ7CisKKwlwY2YgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7CisKKwlzd2l0Y2ggKHJlZ3VsYXRvcl9pZCkgeworCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0FVVE86CisJCWluZGV4ICs9IDB4MmY7CisJCWJyZWFrOworCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0hDTERPOgorCQlpbmRleCArPSAweDAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcGNmNTA2MzNfcmVndWxhdG9yX3ZvbHRhZ2VfdmFsdWUocmVndWxhdG9yX2lkLCBpbmRleCk7Cit9CisKIHN0YXRpYyBpbnQgcGNmNTA2MzNfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcGNmNTA2MzMgKnBjZiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CkBAIC0yNDYsNiArMjc3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBwY2Y1MDYzM19yZWd1bGF0b3Jfb3BzID0gewogCS5zZXRfdm9sdGFnZSA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UgPSBwY2Y1MDYzM19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZSA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZSA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9lbmFibGUsCiAJLmRpc2FibGUgPSBwY2Y1MDYzM19yZWd1bGF0b3JfZGlzYWJsZSwKIAkuaXNfZW5hYmxlZCA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9pc19lbmFibGVkLApAQCAtMjUzLDI3ICsyODUsMjcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9BVVRPXSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigiYXV0byIsIFBDRjUwNjMzX1JFR1VMQVRPUl9BVVRPKSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJhdXRvIiwgUENGNTA2MzNfUkVHVUxBVE9SX0FVVE8sIDgwKSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX0RPV04xXSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigiZG93bjEiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfRE9XTjEpLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImRvd24xIiwgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04xLCA5NSksCiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9ET1dOMl0gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImRvd24yIiwgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04yKSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJkb3duMiIsIFBDRjUwNjMzX1JFR1VMQVRPUl9ET1dOMiwgOTUpLAogCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMV0gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzEiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMSksCisJCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvMSIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE8xLCAyNyksCiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE8yXSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvMiIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE8yKSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG8yIiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzIsIDI3KSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX0xETzNdID0KLQkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG8zIiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzMpLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzMiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMywgMjcpLAogCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNF0gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzQiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNCksCisJCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvNCIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE80LCAyNyksCiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE81XSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvNSIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE81KSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG81IiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzUsIDI3KSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX0xETzZdID0KLQkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG82IiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzYpLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzYiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNiwgMjcpLAogCVtQQ0Y1MDYzM19SRUdVTEFUT1JfSENMRE9dID0KLQkJUENGNTA2MzNfUkVHVUxBVE9SKCJoY2xkbyIsIFBDRjUwNjMzX1JFR1VMQVRPUl9IQ0xETyksCisJCVBDRjUwNjMzX1JFR1VMQVRPUigiaGNsZG8iLCBQQ0Y1MDYzM19SRUdVTEFUT1JfSENMRE8sIDI2KSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX01FTUxET10gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoIm1lbWxkbyIsIFBDRjUwNjMzX1JFR1VMQVRPUl9NRU1MRE8pLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoIm1lbWxkbyIsIFBDRjUwNjMzX1JFR1VMQVRPUl9NRU1MRE8sIDApLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGNmNTA2MzNfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTAyMy1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZmRhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTAyMy1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIHRwczY1MDIzLXJlZ3VsYXRvci5jCisgKgorICogU3VwcG9ydHMgVFBTNjUwMjMgUmVndWxhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnQgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkga2luZCwKKyAqIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZQlUUFM2NTAyM19SRUdfVkVSU0lPTgkJMAorI2RlZmluZQlUUFM2NTAyM19SRUdfUEdPT0RaCQkxCisjZGVmaW5lCVRQUzY1MDIzX1JFR19NQVNLCQkyCisjZGVmaW5lCVRQUzY1MDIzX1JFR19SRUdfQ1RSTAkJMworI2RlZmluZQlUUFM2NTAyM19SRUdfQ09OX0NUUkwJCTQKKyNkZWZpbmUJVFBTNjUwMjNfUkVHX0NPTl9DVFJMMgkJNQorI2RlZmluZQlUUFM2NTAyM19SRUdfREVGX0NPUkUJCTYKKyNkZWZpbmUJVFBTNjUwMjNfUkVHX0RFRlNMRVcJCTcKKyNkZWZpbmUJVFBTNjUwMjNfUkVHX0xET19DVFJMCQk4CisKKy8qIFBHT09EWiBiaXRmaWVsZHMgKi8KKyNkZWZpbmUJVFBTNjUwMjNfUEdPT0RaX1BXUkZBSUxaCUJJVCg3KQorI2RlZmluZQlUUFM2NTAyM19QR09PRFpfTE9XQkFUVFoJQklUKDYpCisjZGVmaW5lCVRQUzY1MDIzX1BHT09EWl9WRENEQzEJCUJJVCg1KQorI2RlZmluZQlUUFM2NTAyM19QR09PRFpfVkRDREMyCQlCSVQoNCkKKyNkZWZpbmUJVFBTNjUwMjNfUEdPT0RaX1ZEQ0RDMwkJQklUKDMpCisjZGVmaW5lCVRQUzY1MDIzX1BHT09EWl9MRE8yCQlCSVQoMikKKyNkZWZpbmUJVFBTNjUwMjNfUEdPT0RaX0xETzEJCUJJVCgxKQorCisvKiBNQVNLIGJpdGZpZWxkcyAqLworI2RlZmluZQlUUFM2NTAyM19NQVNLX1BXUkZBSUxaCQlCSVQoNykKKyNkZWZpbmUJVFBTNjUwMjNfTUFTS19MT1dCQVRUWgkJQklUKDYpCisjZGVmaW5lCVRQUzY1MDIzX01BU0tfVkRDREMxCQlCSVQoNSkKKyNkZWZpbmUJVFBTNjUwMjNfTUFTS19WRENEQzIJCUJJVCg0KQorI2RlZmluZQlUUFM2NTAyM19NQVNLX1ZEQ0RDMwkJQklUKDMpCisjZGVmaW5lCVRQUzY1MDIzX01BU0tfTERPMgkJQklUKDIpCisjZGVmaW5lCVRQUzY1MDIzX01BU0tfTERPMQkJQklUKDEpCisKKy8qIFJFR19DVFJMIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTAyM19SRUdfQ1RSTF9WRENEQzFfRU4JQklUKDUpCisjZGVmaW5lIFRQUzY1MDIzX1JFR19DVFJMX1ZEQ0RDMl9FTglCSVQoNCkKKyNkZWZpbmUgVFBTNjUwMjNfUkVHX0NUUkxfVkRDREMzX0VOCUJJVCgzKQorI2RlZmluZSBUUFM2NTAyM19SRUdfQ1RSTF9MRE8yX0VOCUJJVCgyKQorI2RlZmluZSBUUFM2NTAyM19SRUdfQ1RSTF9MRE8xX0VOCUJJVCgxKQorCisvKiBMRE9fQ1RSTCBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTERPX0NUUkxfTERPeF9TSElGVChsZG9faWQpCSgobGRvX2lkKSo0KQorI2RlZmluZSBUUFM2NTAyM19MRE9fQ1RSTF9MRE94X01BU0sobGRvX2lkKQkoMHhGMCA+PiAoKGxkb19pZCkqNCkpCisKKy8qIE51bWJlciBvZiBzdGVwLWRvd24gY29udmVydGVycyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTlVNX0RDREMJCTMKKy8qIE51bWJlciBvZiBMRE8gdm9sdGFnZSByZWd1bGF0b3JzICBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTlVNX0xETwkJMgorLyogTnVtYmVyIG9mIHRvdGFsIHJlZ3VsYXRvcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRQUzY1MDIzX05VTV9SRUdVTEFUT1IJKFRQUzY1MDIzX05VTV9EQ0RDICsgVFBTNjUwMjNfTlVNX0xETykKKworLyogRENEQ3MgKi8KKyNkZWZpbmUgVFBTNjUwMjNfRENEQ18xCQkJMAorI2RlZmluZSBUUFM2NTAyM19EQ0RDXzIJCQkxCisjZGVmaW5lIFRQUzY1MDIzX0RDRENfMwkJCTIKKy8qIExET3MgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTERPXzEJCQkzCisjZGVmaW5lIFRQUzY1MDIzX0xET18yCQkJNAorCisjZGVmaW5lIFRQUzY1MDIzX01BWF9SRUdfSUQJCVRQUzY1MDIzX0xET18yCisKKy8qIFN1cHBvcnRlZCB2b2x0YWdlIHZhbHVlcyBmb3IgcmVndWxhdG9ycyAqLworc3RhdGljIGNvbnN0IHUxNiBWRENEQzFfVlNFTF90YWJsZVtdID0geworCTgwMCwgODI1LCA4NTAsIDg3NSwKKwk5MDAsIDkyNSwgOTUwLCA5NzUsCisJMTAwMCwgMTAyNSwgMTA1MCwgMTA3NSwKKwkxMTAwLCAxMTI1LCAxMTUwLCAxMTc1LAorCTEyMDAsIDEyMjUsIDEyNTAsIDEyNzUsCisJMTMwMCwgMTMyNSwgMTM1MCwgMTM3NSwKKwkxNDAwLCAxNDI1LCAxNDUwLCAxNDc1LAorCTE1MDAsIDE1MjUsIDE1NTAsIDE2MDAsCit9OworCitzdGF0aWMgY29uc3QgdTE2IExETzFfVlNFTF90YWJsZVtdID0geworCTEwMDAsIDExMDAsIDEzMDAsIDE4MDAsCisJMjIwMCwgMjYwMCwgMjgwMCwgMzE1MCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgTERPMl9WU0VMX3RhYmxlW10gPSB7CisJMTA1MCwgMTIwMCwgMTMwMCwgMTgwMCwKKwkyNTAwLCAyODAwLCAzMDAwLCAzMzAwLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBudW1fdm9sdGFnZXNbXSA9IHtBUlJBWV9TSVpFKFZEQ0RDMV9WU0VMX3RhYmxlKSwKKwkJCQkwLCAwLCBBUlJBWV9TSVpFKExETzFfVlNFTF90YWJsZSksCisJCQkJQVJSQVlfU0laRShMRE8yX1ZTRUxfdGFibGUpfTsKKworLyogUmVndWxhdG9yIHNwZWNpZmljIGRldGFpbHMgKi8KK3N0cnVjdCB0cHNfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBtaW5fdVY7CisJdW5zaWduZWQgbWF4X3VWOworCWJvb2wgZml4ZWQ7CisJdTggdGFibGVfbGVuOworCWNvbnN0IHUxNiAqdGFibGU7Cit9OworCisvKiBQTUlDIGRldGFpbHMgKi8KK3N0cnVjdCB0cHNfcG1pYyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2NbVFBTNjUwMjNfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldltUUFM2NTAyM19OVU1fUkVHVUxBVE9SXTsKKwljb25zdCBzdHJ1Y3QgdHBzX2luZm8gKmluZm9bVFBTNjUwMjNfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IG11dGV4IGlvX2xvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIGludCB0cHNfNjUwMjNfcmVhZChzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnKQoreworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRwc182NTAyM193cml0ZShzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnLCB1OCB2YWwpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCB0cHNfNjUwMjNfc2V0X2JpdHMoc3RydWN0IHRwc19wbWljICp0cHMsIHU4IHJlZywgdTggbWFzaykKK3sKKwlpbnQgZXJyLCBkYXRhOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVhZCh0cHMsIHJlZyk7CisJaWYgKGRhdGEgPCAwKSB7CisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJSZWFkIGZyb20gcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCQllcnIgPSBkYXRhOworCQlnb3RvIG91dDsKKwl9CisKKwlkYXRhIHw9IG1hc2s7CisJZXJyID0gdHBzXzY1MDIzX3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiV3JpdGUgZm9yIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRwc182NTAyM19jbGVhcl9iaXRzKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcsIHU4IG1hc2spCit7CisJaW50IGVyciwgZGF0YTsKKworCW11dGV4X2xvY2soJnRwcy0+aW9fbG9jayk7CisKKwlkYXRhID0gdHBzXzY1MDIzX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkgeworCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKwkJZXJyID0gZGF0YTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSAmPSB+bWFzazsKKworCWVyciA9IHRwc182NTAyM193cml0ZSh0cHMsIHJlZywgZGF0YSk7CisJaWYgKGVycikKKwkJZGV2X2VycigmdHBzLT5jbGllbnQtPmRldiwgIldyaXRlIGZvciByZWcgMHgleCBmYWlsZWRcbiIsIHJlZyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnRwcy0+aW9fbG9jayk7CisJcmV0dXJuIGVycjsKKworfQorCitzdGF0aWMgaW50IHRwc182NTAyM19yZWdfcmVhZChzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnKQoreworCWludCBkYXRhOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVhZCh0cHMsIHJlZyk7CisJaWYgKGRhdGEgPCAwKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGludCB0cHNfNjUwMjNfcmVnX3dyaXRlKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWVyciA9IHRwc182NTAyM193cml0ZSh0cHMsIHJlZywgdmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2VycigmdHBzLT5jbGllbnQtPmRldiwgIldyaXRlIGZvciByZWcgMHgleCBmYWlsZWRcbiIsIHJlZyk7CisKKwltdXRleF91bmxvY2soJnRwcy0+aW9fbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19kY2RjX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisJdTggc2hpZnQ7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDIzX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwMjNfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwMjNfTlVNX1JFR1VMQVRPUiAtIGRjZGM7CisJZGF0YSA9IHRwc182NTAyM19yZWdfcmVhZCh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCk7CisKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCWVsc2UKKwkJcmV0dXJuIChkYXRhICYgMTw8c2hpZnQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfbGRvX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChsZG8gPCBUUFM2NTAyM19MRE9fMSB8fCBsZG8gPiBUUFM2NTAyM19MRE9fMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IChsZG8gPT0gVFBTNjUwMjNfTERPXzEgPyAxIDogMik7CisJZGF0YSA9IHRwc182NTAyM19yZWdfcmVhZCh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCk7CisKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCWVsc2UKKwkJcmV0dXJuIChkYXRhICYgMTw8c2hpZnQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfZGNkY19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisJdTggc2hpZnQ7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDIzX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwMjNfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwMjNfTlVNX1JFR1VMQVRPUiAtIGRjZGM7CisJcmV0dXJuIHRwc182NTAyM19zZXRfYml0cyh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfZGNkY19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGRjZGMgPCBUUFM2NTAyM19EQ0RDXzEgfHwgZGNkYyA+IFRQUzY1MDIzX0RDRENfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDIzX05VTV9SRUdVTEFUT1IgLSBkY2RjOworCXJldHVybiB0cHNfNjUwMjNfY2xlYXJfYml0cyh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gKGxkbyA9PSBUUFM2NTAyM19MRE9fMSA/IDEgOiAyKTsKKwlyZXR1cm4gdHBzXzY1MDIzX3NldF9iaXRzKHRwcywgVFBTNjUwMjNfUkVHX1JFR19DVFJMLCAxIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19sZG9fZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gKGxkbyA9PSBUUFM2NTAyM19MRE9fMSA/IDEgOiAyKTsKKwlyZXR1cm4gdHBzXzY1MDIzX2NsZWFyX2JpdHModHBzLCBUUFM2NTAyM19SRUdfUkVHX0NUUkwsIDEgPDwgc2hpZnQpOworfQorCitzdGF0aWMgaW50IHRwczY1MDIzX2RjZGNfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDIzX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwMjNfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkY2RjID09IFRQUzY1MDIzX0RDRENfMSkgeworCQlkYXRhID0gdHBzXzY1MDIzX3JlZ19yZWFkKHRwcywgVFBTNjUwMjNfUkVHX0RFRl9DT1JFKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIGRhdGE7CisJCWRhdGEgJj0gKHRwcy0+aW5mb1tkY2RjXS0+dGFibGVfbGVuIC0gMSk7CisJCXJldHVybiB0cHMtPmluZm9bZGNkY10tPnRhYmxlW2RhdGFdICogMTAwMDsKKwl9IGVsc2UKKwkJcmV0dXJuIHRwcy0+aW5mb1tkY2RjXS0+bWluX3VWOworfQorCitzdGF0aWMgaW50IHRwczY1MDIzX2RjZGNfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkY2RjID0gcmRldl9nZXRfaWQoZGV2KTsKKwlpbnQgdnNlbDsKKworCWlmIChkY2RjICE9IFRQUzY1MDIzX0RDRENfMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWluX3VWIDwgdHBzLT5pbmZvW2RjZGNdLT5taW5fdVYKKwkJCXx8IG1pbl91ViA+IHRwcy0+aW5mb1tkY2RjXS0+bWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobWF4X3VWIDwgdHBzLT5pbmZvW2RjZGNdLT5taW5fdVYKKwkJCXx8IG1heF91ViA+IHRwcy0+aW5mb1tkY2RjXS0+bWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAodnNlbCA9IDA7IHZzZWwgPCB0cHMtPmluZm9bZGNkY10tPnRhYmxlX2xlbjsgdnNlbCsrKSB7CisJCWludCBtViA9IHRwcy0+aW5mb1tkY2RjXS0+dGFibGVbdnNlbF07CisJCWludCB1ViA9IG1WICogMTAwMDsKKworCQkvKiBCcmVhayBhdCB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KKwkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpCisJCQlicmVhazsKKwl9CisKKwkvKiB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgaW4gY2FzZSB3ZSBmb3VuZCBhIG1hdGNoICovCisJaWYgKHZzZWwgPT0gdHBzLT5pbmZvW2RjZGNdLT50YWJsZV9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UKKwkJcmV0dXJuIHRwc182NTAyM19yZWdfd3JpdGUodHBzLCBUUFM2NTAyM19SRUdfREVGX0NPUkUsIHZzZWwpOworfQorCitzdGF0aWMgaW50IHRwczY1MDIzX2xkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVnX3JlYWQodHBzLCBUUFM2NTAyM19SRUdfTERPX0NUUkwpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhID4+PSAoVFBTNjUwMjNfTERPX0NUUkxfTERPeF9TSElGVChsZG8gLSBUUFM2NTAyM19MRE9fMSkpOworCWRhdGEgJj0gKHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW4gLSAxKTsKKwlyZXR1cm4gdHBzLT5pbmZvW2xkb10tPnRhYmxlW2RhdGFdICogMTAwMDsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCB2c2VsLCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtaW5fdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1pbl91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1heF91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW47IHZzZWwrKykgeworCQlpbnQgbVYgPSB0cHMtPmluZm9bbGRvXS0+dGFibGVbdnNlbF07CisJCWludCB1ViA9IG1WICogMTAwMDsKKworCQkvKiBCcmVhayBhdCB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KKwkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpCisJCQlicmVhazsKKwl9CisKKwlpZiAodnNlbCA9PSB0cHMtPmluZm9bbGRvXS0+dGFibGVfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVnX3JlYWQodHBzLCBUUFM2NTAyM19SRUdfTERPX0NUUkwpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IFRQUzY1MDIzX0xET19DVFJMX0xET3hfTUFTSyhsZG8gLSBUUFM2NTAyM19MRE9fMSk7CisJZGF0YSB8PSAodnNlbCA8PCAoVFBTNjUwMjNfTERPX0NUUkxfTERPeF9TSElGVChsZG8gLSBUUFM2NTAyM19MRE9fMSkpKTsKKwlyZXR1cm4gdHBzXzY1MDIzX3JlZ193cml0ZSh0cHMsIFRQUzY1MDIzX1JFR19MRE9fQ1RSTCwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfZGNkY19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGRjZGMgPCBUUFM2NTAyM19EQ0RDXzEgfHwgZGNkYyA+IFRQUzY1MDIzX0RDRENfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGNkYyA9PSBUUFM2NTAyM19EQ0RDXzEpIHsKKwkJaWYgKHNlbGVjdG9yID49IHRwcy0+aW5mb1tkY2RjXS0+dGFibGVfbGVuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UKKwkJCXJldHVybiB0cHMtPmluZm9bZGNkY10tPnRhYmxlW3NlbGVjdG9yXSAqIDEwMDA7CisJfSBlbHNlCisJCXJldHVybiB0cHMtPmluZm9bZGNkY10tPm1pbl91VjsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19sZG9fbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJCXVuc2lnbmVkIHNlbGVjdG9yKQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzZWxlY3RvciA+PSB0cHMtPmluZm9bbGRvXS0+dGFibGVfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlCisJCXJldHVybiB0cHMtPmluZm9bbGRvXS0+dGFibGVbc2VsZWN0b3JdICogMTAwMDsKK30KKworLyogT3BlcmF0aW9ucyBwZXJtaXR0ZWQgb24gVkRDREN4ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHBzNjUwMjNfZGNkY19vcHMgPSB7CisJLmlzX2VuYWJsZWQgPSB0cHM2NTAyM19kY2RjX2lzX2VuYWJsZWQsCisJLmVuYWJsZSA9IHRwczY1MDIzX2RjZGNfZW5hYmxlLAorCS5kaXNhYmxlID0gdHBzNjUwMjNfZGNkY19kaXNhYmxlLAorCS5nZXRfdm9sdGFnZSA9IHRwczY1MDIzX2RjZGNfZ2V0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gdHBzNjUwMjNfZGNkY19zZXRfdm9sdGFnZSwKKwkubGlzdF92b2x0YWdlID0gdHBzNjUwMjNfZGNkY19saXN0X3ZvbHRhZ2UsCit9OworCisvKiBPcGVyYXRpb25zIHBlcm1pdHRlZCBvbiBMRE94ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHBzNjUwMjNfbGRvX29wcyA9IHsKKwkuaXNfZW5hYmxlZCA9IHRwczY1MDIzX2xkb19pc19lbmFibGVkLAorCS5lbmFibGUgPSB0cHM2NTAyM19sZG9fZW5hYmxlLAorCS5kaXNhYmxlID0gdHBzNjUwMjNfbGRvX2Rpc2FibGUsCisJLmdldF92b2x0YWdlID0gdHBzNjUwMjNfbGRvX2dldF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IHRwczY1MDIzX2xkb19zZXRfdm9sdGFnZSwKKwkubGlzdF92b2x0YWdlID0gdHBzNjUwMjNfbGRvX2xpc3Rfdm9sdGFnZSwKK307CisKK3N0YXRpYworaW50IHRwc182NTAyM19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RhdGljIGludCBkZXNjX2lkOworCWNvbnN0IHN0cnVjdCB0cHNfaW5mbyAqaW5mbyA9ICh2b2lkICopaWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJc3RydWN0IHRwc19wbWljICp0cHM7CisJaW50IGk7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKioKKwkgKiBpbml0X2RhdGEgcG9pbnRzIHRvIGFycmF5IG9mIHJlZ3VsYXRvcl9pbml0IHN0cnVjdHVyZXMKKwkgKiBjb21pbmcgZnJvbSB0aGUgYm9hcmQtZXZtIGZpbGUuCisJICovCisJaW5pdF9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghaW5pdF9kYXRhKQorCQlyZXR1cm4gLUVJTzsKKworCXRwcyA9IGt6YWxsb2Moc2l6ZW9mKCp0cHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZ0cHMtPmlvX2xvY2spOworCisJLyogY29tbW9uIGZvciBhbGwgcmVndWxhdG9ycyAqLworCXRwcy0+Y2xpZW50ID0gY2xpZW50OworCisJZm9yIChpID0gMDsgaSA8IFRQUzY1MDIzX05VTV9SRUdVTEFUT1I7IGkrKywgaW5mbysrLCBpbml0X2RhdGErKykgeworCQkvKiBTdG9yZSByZWd1bGF0b3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwkJdHBzLT5pbmZvW2ldID0gaW5mbzsKKworCQl0cHMtPmRlc2NbaV0ubmFtZSA9IGluZm8tPm5hbWU7CisJCXRwcy0+ZGVzY1tpXS5pZCA9IGRlc2NfaWQrKzsKKwkJdHBzLT5kZXNjW2ldLm5fdm9sdGFnZXMgPSBudW1fdm9sdGFnZXNbaV07CisJCXRwcy0+ZGVzY1tpXS5vcHMgPSAoaSA+IFRQUzY1MDIzX0RDRENfMyA/CisJCQkJCSZ0cHM2NTAyM19sZG9fb3BzIDogJnRwczY1MDIzX2RjZGNfb3BzKTsKKwkJdHBzLT5kZXNjW2ldLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwkJdHBzLT5kZXNjW2ldLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkJLyogUmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgKi8KKwkJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmdHBzLT5kZXNjW2ldLCAmY2xpZW50LT5kZXYsCisJCQkJCQkJCWluaXRfZGF0YSwgdHBzKTsKKwkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQkJaWQtPm5hbWUpOworCisJCQkvKiBVbnJlZ2lzdGVyICovCisJCQl3aGlsZSAoaSkKKwkJCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbLS1pXSk7CisKKwkJCXRwcy0+Y2xpZW50ID0gTlVMTDsKKworCQkJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCQkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJCQlrZnJlZSh0cHMpOworCQkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJCX0KKworCQkvKiBTYXZlIHJlZ3VsYXRvciBmb3IgY2xlYW51cCAqLworCQl0cHMtPnJkZXZbaV0gPSByZGV2OworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHRwcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0cHNfNjUwMjNfcmVtb3ZlIC0gVFBTNjUwMjMgZHJpdmVyIGkyYyByZW1vdmUgaGFuZGxlcgorICogQGNsaWVudDogaTJjIGRyaXZlciBjbGllbnQgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFVucmVnaXN0ZXIgVFBTIGRyaXZlciBhcyBhbiBpMmMgY2xpZW50IGRldmljZSBkcml2ZXIKKyAqLworc3RhdGljIGludCBfX2RldmV4aXQgdHBzXzY1MDIzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFBTNjUwMjNfTlVNX1JFR1VMQVRPUjsgaSsrKQorCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbaV0pOworCisJdHBzLT5jbGllbnQgPSBOVUxMOworCisJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKHRwcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cHNfaW5mbyB0cHM2NTAyM19yZWdzW10gPSB7CisJeworCQkubmFtZSA9ICJWRENEQzEiLAorCQkubWluX3VWID0gIDgwMDAwMCwKKwkJLm1heF91ViA9IDE2MDAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKFZEQ0RDMV9WU0VMX3RhYmxlKSwKKwkJLnRhYmxlID0gVkRDREMxX1ZTRUxfdGFibGUsCisJfSwKKwl7CisJCS5uYW1lID0gIlZEQ0RDMiIsCisJCS5taW5fdVYgPSAgMzMwMDAwMCwKKwkJLm1heF91ViA9IDMzMDAwMDAsCisJCS5maXhlZCA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIlZEQ0RDMyIsCisJCS5taW5fdVYgPSAgMTgwMDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS5maXhlZCA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzEiLAorCQkubWluX3VWID0gMTAwMDAwMCwKKwkJLm1heF91ViA9IDMxNTAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKExETzFfVlNFTF90YWJsZSksCisJCS50YWJsZSA9IExETzFfVlNFTF90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJCS5taW5fdVYgPSAxMDUwMDAwLAorCQkubWF4X3VWID0gMzMwMDAwMCwKKwkJLnRhYmxlX2xlbiA9IEFSUkFZX1NJWkUoTERPMl9WU0VMX3RhYmxlKSwKKwkJLnRhYmxlID0gTERPMl9WU0VMX3RhYmxlLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHBzXzY1MDIzX2lkW10gPSB7CisJey5uYW1lID0gInRwczY1MDIzIiwKKwkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgdHBzNjUwMjNfcmVncyx9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0cHNfNjUwMjNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBzXzY1MDIzX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBzNjUwMjMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHRwc182NTAyM19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodHBzXzY1MDIzX3JlbW92ZSksCisJLmlkX3RhYmxlID0gdHBzXzY1MDIzX2lkLAorfTsKKworLyoqCisgKiB0cHNfNjUwMjNfaW5pdAorICoKKyAqIE1vZHVsZSBpbml0IGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRwc182NTAyM19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0cHNfNjUwMjNfaTJjX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHBzXzY1MDIzX2luaXQpOworCisvKioKKyAqIHRwc182NTAyM19jbGVhbnVwCisgKgorICogTW9kdWxlIGV4aXQgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHRwc182NTAyM19jbGVhbnVwKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnRwc182NTAyM19pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRwc182NTAyM19jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFBTNjUwMjMgdm9sdGFnZSByZWd1bGF0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA3eC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTZkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA3eC1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDcxNCBAQAorLyoKKyAqIHRwczY1MDd4LXJlZ3VsYXRvci5jCisgKgorICogUmVndWxhdG9yIGRyaXZlciBmb3IgVFBTNjUwNzMgUE1JQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50IEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55IGtpbmQsCisgKiB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJVFBTNjUwN1hfUkVHX1BQQVRIMQkJCQkwWDAxCisjZGVmaW5lCVRQUzY1MDdYX1JFR19JTlQJCQkJMFgwMgorI2RlZmluZQlUUFM2NTA3WF9SRUdfQ0hHQ09ORklHMAkJCQkwWDAzCisjZGVmaW5lCVRQUzY1MDdYX1JFR19DSEdDT05GSUcxCQkJCTBYMDQKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0NIR0NPTkZJRzIJCQkJMFgwNQorI2RlZmluZQlUUFM2NTA3WF9SRUdfQ0hHQ09ORklHMwkJCQkwWDA2CisjZGVmaW5lCVRQUzY1MDdYX1JFR19SRUdfQURDT05GSUcJCQkwWDA3CisjZGVmaW5lCVRQUzY1MDdYX1JFR19UU0NNT0RFCQkJCTBYMDgKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0FEUkVTVUxUXzEJCQkJMFgwOQorI2RlZmluZQlUUFM2NTA3WF9SRUdfQURSRVNVTFRfMgkJCQkwWDBBCisjZGVmaW5lCVRQUzY1MDdYX1JFR19QR09PRAkJCQkwWDBCCisjZGVmaW5lCVRQUzY1MDdYX1JFR19QR09PRE1BU0sJCQkJMFgwQworI2RlZmluZQlUUFM2NTA3WF9SRUdfQ09OX0NUUkwxCQkJCTBYMEQKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0NPTl9DVFJMMgkJCQkwWDBFCisjZGVmaW5lCVRQUzY1MDdYX1JFR19DT05fQ1RSTDMJCQkJMFgwRgorI2RlZmluZQlUUFM2NTA3WF9SRUdfREVGRENEQzEJCQkJMFgxMAorI2RlZmluZQlUUFM2NTA3WF9SRUdfREVGRENEQzJfTE9XCQkJMFgxMQorI2RlZmluZQlUUFM2NTA3WF9SRUdfREVGRENEQzJfSElHSAkJCTBYMTIKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0RFRkRDREMzX0xPVwkJCTBYMTMKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0RFRkRDREMzX0hJR0gJCQkwWDE0CisjZGVmaW5lCVRQUzY1MDdYX1JFR19ERUZTTEVXCQkJCTBYMTUKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0xET19DVFJMMQkJCQkwWDE2CisjZGVmaW5lCVRQUzY1MDdYX1JFR19ERUZMRE8yCQkJCTBYMTcKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX1dMRURfQ1RSTDEJCQkJMFgxOAorI2RlZmluZQlUUFM2NTA3WF9SRUdfV0xFRF9DVFJMMgkJCQkwWDE5CisKKy8qIENPTl9DVFJMMSBiaXRmaWVsZHMgKi8KKyNkZWZpbmUJVFBTNjUwN1hfQ09OX0NUUkwxX0RDREMxX0VOQUJMRQkJQklUKDQpCisjZGVmaW5lCVRQUzY1MDdYX0NPTl9DVFJMMV9EQ0RDMl9FTkFCTEUJCUJJVCgzKQorI2RlZmluZQlUUFM2NTA3WF9DT05fQ1RSTDFfRENEQzNfRU5BQkxFCQlCSVQoMikKKyNkZWZpbmUJVFBTNjUwN1hfQ09OX0NUUkwxX0xETzFfRU5BQkxFCQlCSVQoMSkKKyNkZWZpbmUJVFBTNjUwN1hfQ09OX0NUUkwxX0xETzJfRU5BQkxFCQlCSVQoMCkKKworLyogREVGRENEQzEgYml0ZmllbGRzICovCisjZGVmaW5lIFRQUzY1MDdYX0RFRkRDREMxX0RDREMxX0VYVF9BREpfRU4JQklUKDcpCisjZGVmaW5lIFRQUzY1MDdYX0RFRkRDREMxX0RDREMxX01BU0sJCTBYM0YKKworLyogREVGRENEQzJfTE9XIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9ERUZEQ0RDMl9MT1dfRENEQzJfTUFTSwkwWDNGCisKKy8qIERFRkRDREMyX0hJR0ggYml0ZmllbGRzICovCisjZGVmaW5lIFRQUzY1MDdYX0RFRkRDREMyX0hJR0hfRENEQzJfTUFTSwkwWDNGCisKKy8qIERFRkRDREMzX0xPVyBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgVFBTNjUwN1hfREVGRENEQzNfTE9XX0RDREMzX01BU0sJMFgzRgorCisvKiBERUZEQ0RDM19ISUdIIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9ERUZEQ0RDM19ISUdIX0RDREMzX01BU0sJMFgzRgorCisvKiBUUFM2NTA3WF9SRUdfTERPX0NUUkwxIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9SRUdfTERPX0NUUkwxX0xETzFfTUFTSwkwWDBGCisKKy8qIFRQUzY1MDdYX1JFR19ERUZMRE8yIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9SRUdfREVGTERPMl9MRE8yX01BU0sJCTBYM0YKKworLyogVkRDREMgTUFTSyAqLworI2RlZmluZSBUUFM2NTA3WF9ERUZEQ0RDWF9EQ0RDX01BU0sJCTBYM0YKKworLyogRENEQydzICovCisjZGVmaW5lIFRQUzY1MDdYX0RDRENfMQkJCQkwCisjZGVmaW5lIFRQUzY1MDdYX0RDRENfMgkJCQkxCisjZGVmaW5lIFRQUzY1MDdYX0RDRENfMwkJCQkyCisvKiBMRE9zICovCisjZGVmaW5lIFRQUzY1MDdYX0xET18xCQkJCTMKKyNkZWZpbmUgVFBTNjUwN1hfTERPXzIJCQkJNAorCisjZGVmaW5lIFRQUzY1MDdYX01BWF9SRUdfSUQJCQlUUFM2NTA3WF9MRE9fMgorCisvKiBOdW1iZXIgb2Ygc3RlcC1kb3duIGNvbnZlcnRlcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRQUzY1MDdYX05VTV9EQ0RDCQkJMworLyogTnVtYmVyIG9mIExETyB2b2x0YWdlIHJlZ3VsYXRvcnMgIGF2YWlsYWJsZSAqLworI2RlZmluZSBUUFM2NTA3WF9OVU1fTERPCQkJMgorLyogTnVtYmVyIG9mIHRvdGFsIHJlZ3VsYXRvcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRQUzY1MDdYX05VTV9SRUdVTEFUT1IJCShUUFM2NTA3WF9OVU1fRENEQyArIFRQUzY1MDdYX05VTV9MRE8pCisKKy8qIFN1cHBvcnRlZCB2b2x0YWdlIHZhbHVlcyBmb3IgcmVndWxhdG9ycyAoaW4gbWlsbGlWb2x0cykgKi8KK3N0YXRpYyBjb25zdCB1MTYgVkRDREN4X1ZTRUxfdGFibGVbXSA9IHsKKwk3MjUsIDc1MCwgNzc1LCA4MDAsCisJODI1LCA4NTAsIDg3NSwgOTAwLAorCTkyNSwgOTUwLCA5NzUsIDEwMDAsCisJMTAyNSwgMTA1MCwgMTA3NSwgMTEwMCwKKwkxMTI1LCAxMTUwLCAxMTc1LCAxMjAwLAorCTEyMjUsIDEyNTAsIDEyNzUsIDEzMDAsCisJMTMyNSwgMTM1MCwgMTM3NSwgMTQwMCwKKwkxNDI1LCAxNDUwLCAxNDc1LCAxNTAwLAorCTE1NTAsIDE2MDAsIDE2NTAsIDE3MDAsCisJMTc1MCwgMTgwMCwgMTg1MCwgMTkwMCwKKwkxOTUwLCAyMDAwLCAyMDUwLCAyMTAwLAorCTIxNTAsIDIyMDAsIDIyNTAsIDIzMDAsCisJMjM1MCwgMjQwMCwgMjQ1MCwgMjUwMCwKKwkyNTUwLCAyNjAwLCAyNjUwLCAyNzAwLAorCTI3NTAsIDI4MDAsIDI4NTAsIDI5MDAsCisJMzAwMCwgMzEwMCwgMzIwMCwgMzMwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgTERPMV9WU0VMX3RhYmxlW10gPSB7CisJMTAwMCwgMTEwMCwgMTIwMCwgMTI1MCwKKwkxMzAwLCAxMzUwLCAxNDAwLCAxNTAwLAorCTE2MDAsIDE4MDAsIDI1MDAsIDI3NTAsCisJMjgwMCwgMzAwMCwgMzEwMCwgMzMwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgTERPMl9WU0VMX3RhYmxlW10gPSB7CisJNzI1LCA3NTAsIDc3NSwgODAwLAorCTgyNSwgODUwLCA4NzUsIDkwMCwKKwk5MjUsIDk1MCwgOTc1LCAxMDAwLAorCTEwMjUsIDEwNTAsIDEwNzUsIDExMDAsCisJMTEyNSwgMTE1MCwgMTE3NSwgMTIwMCwKKwkxMjI1LCAxMjUwLCAxMjc1LCAxMzAwLAorCTEzMjUsIDEzNTAsIDEzNzUsIDE0MDAsCisJMTQyNSwgMTQ1MCwgMTQ3NSwgMTUwMCwKKwkxNTUwLCAxNjAwLCAxNjUwLCAxNzAwLAorCTE3NTAsIDE4MDAsIDE4NTAsIDE5MDAsCisJMTk1MCwgMjAwMCwgMjA1MCwgMjEwMCwKKwkyMTUwLCAyMjAwLCAyMjUwLCAyMzAwLAorCTIzNTAsIDI0MDAsIDI0NTAsIDI1MDAsCisJMjU1MCwgMjYwMCwgMjY1MCwgMjcwMCwKKwkyNzUwLCAyODAwLCAyODUwLCAyOTAwLAorCTMwMDAsIDMxMDAsIDMyMDAsIDMzMDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG51bV92b2x0YWdlc1tdID0ge0FSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkJCUFSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkJCUFSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkJCUFSUkFZX1NJWkUoTERPMV9WU0VMX3RhYmxlKSwKKwkJCQlBUlJBWV9TSVpFKExETzJfVlNFTF90YWJsZSl9OworCitzdHJ1Y3QgdHBzX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbWluX3VWOworCXVuc2lnbmVkIG1heF91VjsKKwl1OCB0YWJsZV9sZW47CisJY29uc3QgdTE2ICp0YWJsZTsKK307CisKK3N0cnVjdCB0cHNfcG1pYyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2NbVFBTNjUwN1hfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldltUUFM2NTA3WF9OVU1fUkVHVUxBVE9SXTsKKwljb25zdCBzdHJ1Y3QgdHBzX2luZm8gKmluZm9bVFBTNjUwN1hfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IG11dGV4IGlvX2xvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIGludCB0cHNfNjUwN3hfcmVhZChzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnKQoreworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRwc182NTA3eF93cml0ZShzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnLCB1OCB2YWwpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCB0cHNfNjUwN3hfc2V0X2JpdHMoc3RydWN0IHRwc19wbWljICp0cHMsIHU4IHJlZywgdTggbWFzaykKK3sKKwlpbnQgZXJyLCBkYXRhOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWRhdGEgPSB0cHNfNjUwN3hfcmVhZCh0cHMsIHJlZyk7CisJaWYgKGRhdGEgPCAwKSB7CisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJSZWFkIGZyb20gcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCQllcnIgPSBkYXRhOworCQlnb3RvIG91dDsKKwl9CisKKwlkYXRhIHw9IG1hc2s7CisJZXJyID0gdHBzXzY1MDd4X3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiV3JpdGUgZm9yIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRwc182NTA3eF9jbGVhcl9iaXRzKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcsIHU4IG1hc2spCit7CisJaW50IGVyciwgZGF0YTsKKworCW11dGV4X2xvY2soJnRwcy0+aW9fbG9jayk7CisKKwlkYXRhID0gdHBzXzY1MDd4X3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkgeworCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKwkJZXJyID0gZGF0YTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSAmPSB+bWFzazsKKwllcnIgPSB0cHNfNjUwN3hfd3JpdGUodHBzLCByZWcsIGRhdGEpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJXcml0ZSBmb3IgcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0cHMtPmlvX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdHBzXzY1MDd4X3JlZ19yZWFkKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcpCit7CisJaW50IGRhdGE7CisKKwltdXRleF9sb2NrKCZ0cHMtPmlvX2xvY2spOworCisJZGF0YSA9IHRwc182NTA3eF9yZWFkKHRwcywgcmVnKTsKKwlpZiAoZGF0YSA8IDApCisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJSZWFkIGZyb20gcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCisJbXV0ZXhfdW5sb2NrKCZ0cHMtPmlvX2xvY2spOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IHRwc182NTA3eF9yZWdfd3JpdGUoc3RydWN0IHRwc19wbWljICp0cHMsIHU4IHJlZywgdTggdmFsKQoreworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ0cHMtPmlvX2xvY2spOworCisJZXJyID0gdHBzXzY1MDd4X3dyaXRlKHRwcywgcmVnLCB2YWwpOworCWlmIChlcnIgPCAwKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiV3JpdGUgZm9yIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRwczY1MDd4X2RjZGNfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCBkY2RjID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChkY2RjIDwgVFBTNjUwN1hfRENEQ18xIHx8IGRjZGMgPiBUUFM2NTA3WF9EQ0RDXzMpCisJCXJldHVybiAtRUlOVkFMOworCisJc2hpZnQgPSBUUFM2NTA3WF9NQVhfUkVHX0lEIC0gZGNkYzsKKwlkYXRhID0gdHBzXzY1MDd4X3JlZ19yZWFkKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSk7CisKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCWVsc2UKKwkJcmV0dXJuIChkYXRhICYgMTw8c2hpZnQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChsZG8gPCBUUFM2NTA3WF9MRE9fMSB8fCBsZG8gPiBUUFM2NTA3WF9MRE9fMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDdYX01BWF9SRUdfSUQgLSBsZG87CisJZGF0YSA9IHRwc182NTA3eF9yZWdfcmVhZCh0cHMsIFRQUzY1MDdYX1JFR19DT05fQ1RSTDEpOworCisJaWYgKGRhdGEgPCAwKQorCQlyZXR1cm4gZGF0YTsKKwllbHNlCisJCXJldHVybiAoZGF0YSAmIDE8PHNoaWZ0KSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IHRwczY1MDd4X2RjZGNfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGRjZGMgPCBUUFM2NTA3WF9EQ0RDXzEgfHwgZGNkYyA+IFRQUzY1MDdYX0RDRENfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDdYX01BWF9SRUdfSUQgLSBkY2RjOworCXJldHVybiB0cHNfNjUwN3hfc2V0X2JpdHModHBzLCBUUFM2NTA3WF9SRUdfQ09OX0NUUkwxLCAxIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIGludCB0cHM2NTA3eF9kY2RjX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisJdTggc2hpZnQ7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDdYX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwN1hfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwN1hfTUFYX1JFR19JRCAtIGRjZGM7CisJcmV0dXJuIHRwc182NTA3eF9jbGVhcl9iaXRzKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGxkbyA8IFRQUzY1MDdYX0xET18xIHx8IGxkbyA+IFRQUzY1MDdYX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwN1hfTUFYX1JFR19JRCAtIGxkbzsKKwlyZXR1cm4gdHBzXzY1MDd4X3NldF9iaXRzKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChsZG8gPCBUUFM2NTA3WF9MRE9fMSB8fCBsZG8gPiBUUFM2NTA3WF9MRE9fMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDdYX01BWF9SRUdfSUQgLSBsZG87CisJcmV0dXJuIHRwc182NTA3eF9jbGVhcl9iaXRzKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfZGNkY19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCBkY2RjID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCByZWc7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFRQUzY1MDdYX0RDRENfMToKKwkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMxOworCQlicmVhazsKKwljYXNlIFRQUzY1MDdYX0RDRENfMjoKKwkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMyX0xPVzsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTA3WF9EQ0RDXzM6CisJCXJlZyA9IFRQUzY1MDdYX1JFR19ERUZEQ0RDM19MT1c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhdGEgPSB0cHNfNjUwN3hfcmVnX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IFRQUzY1MDdYX0RFRkRDRENYX0RDRENfTUFTSzsKKwlyZXR1cm4gdHBzLT5pbmZvW2RjZGNdLT50YWJsZVtkYXRhXSAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfZGNkY19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAorCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRhdGEsIHZzZWwsIGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCXU4IHJlZzsKKworCXN3aXRjaCAoZGNkYykgeworCWNhc2UgVFBTNjUwN1hfRENEQ18xOgorCQlyZWcgPSBUUFM2NTA3WF9SRUdfREVGRENEQzE7CisJCWJyZWFrOworCWNhc2UgVFBTNjUwN1hfRENEQ18yOgorCQlyZWcgPSBUUFM2NTA3WF9SRUdfREVGRENEQzJfTE9XOworCQlicmVhazsKKwljYXNlIFRQUzY1MDdYX0RDRENfMzoKKwkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMzX0xPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG1pbl91ViA8IHRwcy0+aW5mb1tkY2RjXS0+bWluX3VWCisJCXx8IG1pbl91ViA+IHRwcy0+aW5mb1tkY2RjXS0+bWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobWF4X3VWIDwgdHBzLT5pbmZvW2RjZGNdLT5taW5fdVYKKwkJfHwgbWF4X3VWID4gdHBzLT5pbmZvW2RjZGNdLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IHRwcy0+aW5mb1tkY2RjXS0+dGFibGVfbGVuOyB2c2VsKyspIHsKKwkJaW50IG1WID0gdHBzLT5pbmZvW2RjZGNdLT50YWJsZVt2c2VsXTsKKwkJaW50IHVWID0gbVYgKiAxMDAwOworCisJCS8qIEJyZWFrIGF0IHRoZSBmaXJzdCBpbi1yYW5nZSB2YWx1ZSAqLworCQlpZiAobWluX3VWIDw9IHVWICYmIHVWIDw9IG1heF91VikKKwkJCWJyZWFrOworCX0KKworCS8qIHdyaXRlIHRvIHRoZSByZWdpc3RlciBpbiBjYXNlIHdlIGZvdW5kIGEgbWF0Y2ggKi8KKwlpZiAodnNlbCA9PSB0cHMtPmluZm9bZGNkY10tPnRhYmxlX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhID0gdHBzXzY1MDd4X3JlZ19yZWFkKHRwcywgcmVnKTsKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCisJZGF0YSAmPSB+VFBTNjUwN1hfREVGRENEQ1hfRENEQ19NQVNLOworCWRhdGEgfD0gdnNlbDsKKworCXJldHVybiB0cHNfNjUwN3hfcmVnX3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKK30KKworc3RhdGljIGludCB0cHM2NTA3eF9sZG9fZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCByZWcsIG1hc2s7CisKKwlpZiAobGRvIDwgVFBTNjUwN1hfTERPXzEgfHwgbGRvID4gVFBTNjUwN1hfTERPXzIpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgeworCQlyZWcgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDEgOiBUUFM2NTA3WF9SRUdfREVGTERPMik7CisJCW1hc2sgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDFfTERPMV9NQVNLIDoKKwkJCQlUUFM2NTA3WF9SRUdfREVGTERPMl9MRE8yX01BU0spOworCX0KKworCWRhdGEgPSB0cHNfNjUwN3hfcmVnX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IG1hc2s7CisJcmV0dXJuIHRwcy0+aW5mb1tsZG9dLT50YWJsZVtkYXRhXSAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgdnNlbCwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCByZWcsIG1hc2s7CisKKwlpZiAobGRvIDwgVFBTNjUwN1hfTERPXzEgfHwgbGRvID4gVFBTNjUwN1hfTERPXzIpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgeworCQlyZWcgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDEgOiBUUFM2NTA3WF9SRUdfREVGTERPMik7CisJCW1hc2sgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDFfTERPMV9NQVNLIDoKKwkJCQlUUFM2NTA3WF9SRUdfREVGTERPMl9MRE8yX01BU0spOworCX0KKworCWlmIChtaW5fdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1pbl91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1heF91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW47IHZzZWwrKykgeworCQlpbnQgbVYgPSB0cHMtPmluZm9bbGRvXS0+dGFibGVbdnNlbF07CisJCWludCB1ViA9IG1WICogMTAwMDsKKworCQkvKiBCcmVhayBhdCB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KKwkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpCisJCQlicmVhazsKKwl9CisKKwlpZiAodnNlbCA9PSB0cHMtPmluZm9bbGRvXS0+dGFibGVfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEgPSB0cHNfNjUwN3hfcmVnX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IH5tYXNrOworCWRhdGEgfD0gdnNlbDsKKworCXJldHVybiB0cHNfNjUwN3hfcmVnX3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKK30KKworc3RhdGljIGludCB0cHM2NTA3eF9kY2RjX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAorCQkJCQl1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDdYX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwN1hfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzZWxlY3RvciA+PSB0cHMtPmluZm9bZGNkY10tPnRhYmxlX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZQorCQlyZXR1cm4gdHBzLT5pbmZvW2RjZGNdLT50YWJsZVtzZWxlY3Rvcl0gKiAxMDAwOworfQorCitzdGF0aWMgaW50IHRwczY1MDd4X2xkb19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGxkbyA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwlpZiAobGRvIDwgVFBTNjUwN1hfTERPXzEgfHwgbGRvID4gVFBTNjUwN1hfTERPXzIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNlbGVjdG9yID49IHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UKKwkJcmV0dXJuIHRwcy0+aW5mb1tsZG9dLT50YWJsZVtzZWxlY3Rvcl0gKiAxMDAwOworfQorCisvKiBPcGVyYXRpb25zIHBlcm1pdHRlZCBvbiBWRENEQ3ggKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTA3eF9kY2RjX29wcyA9IHsKKwkuaXNfZW5hYmxlZCA9IHRwczY1MDd4X2RjZGNfaXNfZW5hYmxlZCwKKwkuZW5hYmxlID0gdHBzNjUwN3hfZGNkY19lbmFibGUsCisJLmRpc2FibGUgPSB0cHM2NTA3eF9kY2RjX2Rpc2FibGUsCisJLmdldF92b2x0YWdlID0gdHBzNjUwN3hfZGNkY19nZXRfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9kY2RjX3NldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9kY2RjX2xpc3Rfdm9sdGFnZSwKK307CisKKy8qIE9wZXJhdGlvbnMgcGVybWl0dGVkIG9uIExET3ggKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTA3eF9sZG9fb3BzID0geworCS5pc19lbmFibGVkID0gdHBzNjUwN3hfbGRvX2lzX2VuYWJsZWQsCisJLmVuYWJsZSA9IHRwczY1MDd4X2xkb19lbmFibGUsCisJLmRpc2FibGUgPSB0cHM2NTA3eF9sZG9fZGlzYWJsZSwKKwkuZ2V0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9sZG9fZ2V0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gdHBzNjUwN3hfbGRvX3NldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9sZG9fbGlzdF92b2x0YWdlLAorfTsKKworc3RhdGljCitpbnQgdHBzXzY1MDd4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdGF0aWMgaW50IGRlc2NfaWQ7CisJY29uc3Qgc3RydWN0IHRwc19pbmZvICppbmZvID0gKHZvaWQgKilpZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwczsKKwlpbnQgaTsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRUlPOworCisJLyoqCisJICogaW5pdF9kYXRhIHBvaW50cyB0byBhcnJheSBvZiByZWd1bGF0b3JfaW5pdCBzdHJ1Y3R1cmVzCisJICogY29taW5nIGZyb20gdGhlIGJvYXJkLWV2bSBmaWxlLgorCSAqLworCWluaXRfZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIWluaXRfZGF0YSkKKwkJcmV0dXJuIC1FSU87CisKKwl0cHMgPSBremFsbG9jKHNpemVvZigqdHBzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cHMpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmdHBzLT5pb19sb2NrKTsKKworCS8qIGNvbW1vbiBmb3IgYWxsIHJlZ3VsYXRvcnMgKi8KKwl0cHMtPmNsaWVudCA9IGNsaWVudDsKKworCWZvciAoaSA9IDA7IGkgPCBUUFM2NTA3WF9OVU1fUkVHVUxBVE9SOyBpKyssIGluZm8rKywgaW5pdF9kYXRhKyspIHsKKwkJLyogUmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgKi8KKwkJdHBzLT5pbmZvW2ldID0gaW5mbzsKKwkJdHBzLT5kZXNjW2ldLm5hbWUgPSBpbmZvLT5uYW1lOworCQl0cHMtPmRlc2NbaV0uaWQgPSBkZXNjX2lkKys7CisJCXRwcy0+ZGVzY1tpXS5uX3ZvbHRhZ2VzID0gbnVtX3ZvbHRhZ2VzW2ldOworCQl0cHMtPmRlc2NbaV0ub3BzID0gKGkgPiBUUFM2NTA3WF9EQ0RDXzMgPworCQkJCSZ0cHM2NTA3eF9sZG9fb3BzIDogJnRwczY1MDd4X2RjZGNfb3BzKTsKKwkJdHBzLT5kZXNjW2ldLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwkJdHBzLT5kZXNjW2ldLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmdHBzLT5kZXNjW2ldLAorCQkJCQkmY2xpZW50LT5kZXYsIGluaXRfZGF0YSwgdHBzKTsKKwkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQkJaWQtPm5hbWUpOworCisJCQkvKiBVbnJlZ2lzdGVyICovCisJCQl3aGlsZSAoaSkKKwkJCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbLS1pXSk7CisKKwkJCXRwcy0+Y2xpZW50ID0gTlVMTDsKKworCQkJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCQkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisKKwkJCWtmcmVlKHRwcyk7CisJCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJfQorCisJCS8qIFNhdmUgcmVndWxhdG9yIGZvciBjbGVhbnVwICovCisJCXRwcy0+cmRldltpXSA9IHJkZXY7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHBzKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHRwc182NTA3eF9yZW1vdmUgLSBUUFM2NTA3eCBkcml2ZXIgaTJjIHJlbW92ZSBoYW5kbGVyCisgKiBAY2xpZW50OiBpMmMgZHJpdmVyIGNsaWVudCBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVW5yZWdpc3RlciBUUFMgZHJpdmVyIGFzIGFuIGkyYyBjbGllbnQgZGV2aWNlIGRyaXZlcgorICovCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0cHNfNjUwN3hfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBUUFM2NTA3WF9OVU1fUkVHVUxBVE9SOyBpKyspCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHRwcy0+cmRldltpXSk7CisKKwl0cHMtPmNsaWVudCA9IE5VTEw7CisKKwkvKiBjbGVhciB0aGUgY2xpZW50IGRhdGEgaW4gaTJjICovCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUodHBzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwc19pbmZvIHRwczY1MDd4X3JlZ3NbXSA9IHsKKwl7CisJCS5uYW1lID0gIlZEQ0RDMSIsCisJCS5taW5fdVYgPSA3MjUwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudGFibGVfbGVuID0gQVJSQVlfU0laRShWRENEQ3hfVlNFTF90YWJsZSksCisJCS50YWJsZSA9IFZEQ0RDeF9WU0VMX3RhYmxlLAorCX0sCisJeworCQkubmFtZSA9ICJWRENEQzIiLAorCQkubWluX3VWID0gNzI1MDAwLAorCQkubWF4X3VWID0gMzMwMDAwMCwKKwkJLnRhYmxlX2xlbiA9IEFSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkudGFibGUgPSBWRENEQ3hfVlNFTF90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiVkRDREMzIiwKKwkJLm1pbl91ViA9IDcyNTAwMCwKKwkJLm1heF91ViA9IDMzMDAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKFZEQ0RDeF9WU0VMX3RhYmxlKSwKKwkJLnRhYmxlID0gVkRDREN4X1ZTRUxfdGFibGUsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzEiLAorCQkubWluX3VWID0gMTAwMDAwMCwKKwkJLm1heF91ViA9IDMzMDAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKExETzFfVlNFTF90YWJsZSksCisJCS50YWJsZSA9IExETzFfVlNFTF90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJCS5taW5fdVYgPSA3MjUwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudGFibGVfbGVuID0gQVJSQVlfU0laRShMRE8yX1ZTRUxfdGFibGUpLAorCQkudGFibGUgPSBMRE8yX1ZTRUxfdGFibGUsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0cHNfNjUwN3hfaWRbXSA9IHsKKwl7Lm5hbWUgPSAidHBzNjUwN3giLAorCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB0cHM2NTA3eF9yZWdzLH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0cHNfNjUwN3hfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBzXzY1MDd4X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBzNjUwN3giLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHRwc182NTA3eF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodHBzXzY1MDd4X3JlbW92ZSksCisJLmlkX3RhYmxlID0gdHBzXzY1MDd4X2lkLAorfTsKKworLyoqCisgKiB0cHNfNjUwN3hfaW5pdAorICoKKyAqIE1vZHVsZSBpbml0IGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRwc182NTA3eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0cHNfNjUwN3hfaTJjX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHBzXzY1MDd4X2luaXQpOworCisvKioKKyAqIHRwc182NTA3eF9jbGVhbnVwCisgKgorICogTW9kdWxlIGV4aXQgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHRwc182NTA3eF9jbGVhbnVwKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnRwc182NTA3eF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRwc182NTA3eF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFBTNjUwN3ggdm9sdGFnZSByZWd1bGF0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jCmluZGV4IDA2ZDJmYTkuLjQ0OTE3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jCkBAIC05MywxNiArOTMsMjEgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCByZWdfc2hvd19uYW1lLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGF0ZSwgMDY0NCwgcmVnX3Nob3dfc3RhdGUsIHJlZ19zZXRfc3RhdGUpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfbmFtZSwKLQkmZGV2X2F0dHJfc3RhdGUsCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJJmRldl9hdHRyX3N0YXRlLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGF0dHJfZ3JvdXAgPSB7CisJLmF0dHJzCT0gYXR0cmlidXRlcywKIH07CiAKIHN0YXRpYyBpbnQgcmVndWxhdG9yX3VzZXJzcGFjZV9jb25zdW1lcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZWd1bGF0b3JfdXNlcnNwYWNlX2NvbnN1bWVyX2RhdGEgKnBkYXRhOwogCXN0cnVjdCB1c2Vyc3BhY2VfY29uc3VtZXJfZGF0YSAqZHJ2ZGF0YTsKLQlpbnQgcmV0LCBpOworCWludCByZXQ7CiAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcGRhdGEpCkBAIC0xMjUsMzEgKzEzMCwyOSBAQAogCQlnb3RvIGVycl9hbGxvY19zdXBwbGllczsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdHRyaWJ1dGVzKTsgaSsrKSB7Ci0JCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCBhdHRyaWJ1dGVzW2ldKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJZ290byBlcnJfY3JlYXRlX2F0dHJzOwotCX0KKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmYXR0cl9ncm91cCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycl9jcmVhdGVfYXR0cnM7CiAKLQlpZiAocGRhdGEtPmluaXRfb24pCisJaWYgKHBkYXRhLT5pbml0X29uKSB7CiAJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShkcnZkYXRhLT5udW1fc3VwcGxpZXMsCiAJCQkJCSAgICBkcnZkYXRhLT5zdXBwbGllcyk7Ci0KLQlkcnZkYXRhLT5lbmFibGVkID0gcGRhdGEtPmluaXRfb247Ci0KLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgaW5pdGlhbCBzdGF0ZTogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX2NyZWF0ZV9hdHRyczsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gc2V0IGluaXRpYWwgc3RhdGU6ICVkXG4iLCByZXQpOworCQkJZ290byBlcnJfZW5hYmxlOworCQl9CiAJfQogCisJZHJ2ZGF0YS0+ZW5hYmxlZCA9IHBkYXRhLT5pbml0X29uOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydmRhdGEpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9jcmVhdGVfYXR0cnM6Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXR0cmlidXRlcyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsIGF0dHJpYnV0ZXNbaV0pOworZXJyX2VuYWJsZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmYXR0cl9ncm91cCk7CiAKK2Vycl9jcmVhdGVfYXR0cnM6CiAJcmVndWxhdG9yX2J1bGtfZnJlZShkcnZkYXRhLT5udW1fc3VwcGxpZXMsIGRydmRhdGEtPnN1cHBsaWVzKTsKIAogZXJyX2FsbG9jX3N1cHBsaWVzOgpAQCAtMTYwLDEwICsxNjMsOCBAQAogc3RhdGljIGludCByZWd1bGF0b3JfdXNlcnNwYWNlX2NvbnN1bWVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1c2Vyc3BhY2VfY29uc3VtZXJfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXR0cmlidXRlcyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsIGF0dHJpYnV0ZXNbaV0pOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZhdHRyX2dyb3VwKTsKIAogCWlmIChkYXRhLT5lbmFibGVkKQogCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKGRhdGEtPm51bV9zdXBwbGllcywgZGF0YS0+c3VwcGxpZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jCmluZGV4IGU3ZGI1NjYuLmFkZGMwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMKQEAgLTI3LDcxICsyNyw4MSBAQAogCXVuc2lnbmVkIGludCBtb2RlOwogfTsKIAotc3RhdGljIHZvaWQgdXBkYXRlX3ZvbHRhZ2VfY29uc3RyYWludHMoc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YSAqZGF0YSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV92b2x0YWdlX2NvbnN0cmFpbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YSAqZGF0YSkKIHsKIAlpbnQgcmV0OwogCiAJaWYgKGRhdGEtPm1pbl91ViAmJiBkYXRhLT5tYXhfdVYKIAkgICAgJiYgZGF0YS0+bWluX3VWIDw9IGRhdGEtPm1heF91VikgeworCQlkZXZfZGJnKGRldiwgIlJlcXVlc3RpbmcgJWQtJWR1VlxuIiwKKwkJCWRhdGEtPm1pbl91ViwgZGF0YS0+bWF4X3VWKTsKIAkJcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGRhdGEtPnJlZ3VsYXRvciwKLQkJCQkJICAgIGRhdGEtPm1pbl91ViwgZGF0YS0+bWF4X3VWKTsKKwkJCQkJZGF0YS0+bWluX3VWLCBkYXRhLT5tYXhfdVYpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yX3NldF92b2x0YWdlKCkgZmFpbGVkOiAlZFxuIiwKLQkJCSAgICAgICByZXQpOworCQkJZGV2X2VycihkZXYsCisJCQkJInJlZ3VsYXRvcl9zZXRfdm9sdGFnZSgpIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAlpZiAoZGF0YS0+bWluX3VWICYmIGRhdGEtPm1heF91ViAmJiAhZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+cmVndWxhdG9yKTsKIAkJaWYgKHJldCA9PSAwKQogCQkJZGF0YS0+ZW5hYmxlZCA9IDE7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yX2VuYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9lbmFibGUoKSBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CiAJfQogCiAJaWYgKCEoZGF0YS0+bWluX3VWICYmIGRhdGEtPm1heF91VikgJiYgZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkRpc2FibGluZyByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShkYXRhLT5yZWd1bGF0b3IpOwogCQlpZiAocmV0ID09IDApCiAJCQlkYXRhLT5lbmFibGVkID0gMDsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSICJyZWd1bGF0b3JfZGlzYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9kaXNhYmxlKCkgZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX2N1cnJlbnRfbGltaXRfY29uc3RyYWludHMoc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YQotCQkJCQkJKmRhdGEpCitzdGF0aWMgdm9pZCB1cGRhdGVfY3VycmVudF9saW1pdF9jb25zdHJhaW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YSAqZGF0YSkKIHsKIAlpbnQgcmV0OwogCiAJaWYgKGRhdGEtPm1heF91QQogCSAgICAmJiBkYXRhLT5taW5fdUEgPD0gZGF0YS0+bWF4X3VBKSB7CisJCWRldl9kYmcoZGV2LCAiUmVxdWVzdGluZyAlZC0lZHVBXG4iLAorCQkJZGF0YS0+bWluX3VBLCBkYXRhLT5tYXhfdUEpOwogCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2N1cnJlbnRfbGltaXQoZGF0YS0+cmVndWxhdG9yLAogCQkJCQlkYXRhLT5taW5fdUEsIGRhdGEtPm1heF91QSk7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJcHJfZXJyKCJyZWd1bGF0b3Jfc2V0X2N1cnJlbnRfbGltaXQoKSBmYWlsZWQ6ICVkXG4iLAotCQkJICAgICAgIHJldCk7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkicmVndWxhdG9yX3NldF9jdXJyZW50X2xpbWl0KCkgZmFpbGVkOiAlZFxuIiwKKwkJCQlyZXQpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJaWYgKGRhdGEtPm1heF91QSAmJiAhZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+cmVndWxhdG9yKTsKIAkJaWYgKHJldCA9PSAwKQogCQkJZGF0YS0+ZW5hYmxlZCA9IDE7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yX2VuYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9lbmFibGUoKSBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CiAJfQogCiAJaWYgKCEoZGF0YS0+bWluX3VBICYmIGRhdGEtPm1heF91QSkgJiYgZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkRpc2FibGluZyByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShkYXRhLT5yZWd1bGF0b3IpOwogCQlpZiAocmV0ID09IDApCiAJCQlkYXRhLT5lbmFibGVkID0gMDsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSICJyZWd1bGF0b3JfZGlzYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9kaXNhYmxlKCkgZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwogCX0KIH0KQEAgLTExNSw3ICsxMjUsNyBAQAogCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCiAJZGF0YS0+bWluX3VWID0gdmFsOwotCXVwZGF0ZV92b2x0YWdlX2NvbnN0cmFpbnRzKGRhdGEpOworCXVwZGF0ZV92b2x0YWdlX2NvbnN0cmFpbnRzKGRldiwgZGF0YSk7CiAKIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCkBAIC0xNDEsNyArMTUxLDcgQEAKIAltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAogCWRhdGEtPm1heF91ViA9IHZhbDsKLQl1cGRhdGVfdm9sdGFnZV9jb25zdHJhaW50cyhkYXRhKTsKKwl1cGRhdGVfdm9sdGFnZV9jb25zdHJhaW50cyhkZXYsIGRhdGEpOwogCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIApAQCAtMTY3LDcgKzE3Nyw3IEBACiAJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAKIAlkYXRhLT5taW5fdUEgPSB2YWw7Ci0JdXBkYXRlX2N1cnJlbnRfbGltaXRfY29uc3RyYWludHMoZGF0YSk7CisJdXBkYXRlX2N1cnJlbnRfbGltaXRfY29uc3RyYWludHMoZGV2LCBkYXRhKTsKIAogCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAKQEAgLTE5Myw3ICsyMDMsNyBAQAogCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCiAJZGF0YS0+bWF4X3VBID0gdmFsOwotCXVwZGF0ZV9jdXJyZW50X2xpbWl0X2NvbnN0cmFpbnRzKGRhdGEpOworCXVwZGF0ZV9jdXJyZW50X2xpbWl0X2NvbnN0cmFpbnRzKGRldiwgZGF0YSk7CiAKIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCkBAIC0yNzYsOCArMjg2LDcgQEAKIAogCWRydmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlydHVhbF9jb25zdW1lcl9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRydmRhdGEgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbXV0ZXhfaW5pdCgmZHJ2ZGF0YS0+bG9jayk7CkBAIC0yODUsMTMgKzI5NCwxOCBAQAogCWRydmRhdGEtPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgcmVnX2lkKTsKIAlpZiAoSVNfRVJSKGRydmRhdGEtPnJlZ3VsYXRvcikpIHsKIAkJcmV0ID0gUFRSX0VSUihkcnZkYXRhLT5yZWd1bGF0b3IpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gb2J0YWluIHN1cHBseSAnJXMnOiAlZFxuIiwKKwkJCXJlZ19pZCwgcmV0KTsKIAkJZ290byBlcnI7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXR0cmlidXRlcyk7IGkrKykgewogCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgYXR0cmlidXRlc1tpXSk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCWdvdG8gZXJyOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgYXR0ciAlZDogJWRcbiIsCisJCQkJaSwgcmV0KTsKKwkJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKKwkJfQogCX0KIAogCWRydmRhdGEtPm1vZGUgPSByZWd1bGF0b3JfZ2V0X21vZGUoZHJ2ZGF0YS0+cmVndWxhdG9yKTsKQEAgLTMwMCw2ICszMTQsOCBAQAogCiAJcmV0dXJuIDA7CiAKK2Vycl9yZWd1bGF0b3I6CisJcmVndWxhdG9yX3B1dChkcnZkYXRhLT5yZWd1bGF0b3IpOwogZXJyOgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJpYnV0ZXMpOyBpKyspCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCBhdHRyaWJ1dGVzW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwppbmRleCAxN2EwMGIwLi43NjhiZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCkBAIC0xNDE5LDYgKzE0MTksOCBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJldDsKKwlpZiAocmVnIDwgMCB8fCByZWcgPj0gTlVNX1dNODM1MF9SRUdVTEFUT1JTKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh3bTgzNTAtPnBtaWMucGRldltyZWddKQogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggNzM3NzFiMC4uM2MyMGRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0zNzgsNiArMzc4LDE1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczMyMzQuCiAKK2NvbmZpZyBSVENfRFJWX1BDRjIxMjMKKwl0cmlzdGF0ZSAiTlhQIFBDRjIxMjMiCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBOWFAgUENGMjEyMworCSAgUlRDIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjIxMjMuCisKIGVuZGlmICMgU1BJX01BU1RFUgogCiBjb21tZW50ICJQbGF0Zm9ybSBSVEMgZHJpdmVycyIKQEAgLTUwMCw2ICs1MDksMTcgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBpZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgInJ0Yy1tNDh0NTkiLgogCitjb25maWcgUlRDX01YQworCXRyaXN0YXRlICJGcmVlc2NhbGUgTVhDIFJlYWwgVGltZSBDbG9jayIKKwlkZXBlbmRzIG9uIEFSQ0hfTVhDCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MKKwloZWxwCisJICAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVhDCisJICAgUlRDIG1vZHVsZS4KKworCSAgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBpZiBzbywgdGhlIG1vZHVsZQorCSAgIHdpbGwgYmUgY2FsbGVkICJydGMtbXhjIi4KKwogY29uZmlnIFJUQ19EUlZfQlE0ODAyCiAJdHJpc3RhdGUgIlRJIEJRNDgwMiIKIAloZWxwCkBAIC03NzgsNCArNzk4LDMzIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1wczMuCiAKK2NvbmZpZyBSVENfRFJWX0NPSDkwMTMzMQorCXRyaXN0YXRlICJTVC1Fcmljc3NvbiBDT0ggOTAxIDMzMSBSVEMiCisJZGVwZW5kcyBvbiBBUkNIX1UzMDAKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgYWNjZXNzIHRvIFNULUVyaWNzc29uCisJICBDT0ggOTAxIDMzMSBSVEMgY2xvY2sgZm91bmQgaW4gc29tZSBTVC1Fcmljc3NvbiBNb2JpbGUKKwkgIFBsYXRmb3Jtcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCAicnRjLWNvaDkwMTMzMSIuCisKKworY29uZmlnIFJUQ19EUlZfU1RNUAorCXRyaXN0YXRlICJGcmVlc2NhbGUgU1RNUDN4eHggUlRDIgorCWRlcGVuZHMgb24gQVJDSF9TVE1QM1hYWAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZSBvbmJvYXJkCisJICBTVE1QM3h4eCBSVEMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXN0bXAzeHh4LgorCitjb25maWcgUlRDX0RSVl9QQ0FQCisJdHJpc3RhdGUgIlBDQVAgUlRDIgorCWRlcGVuZHMgb24gRVpYX1BDQVAKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIFJUQyBmb3VuZCBvbgorCSAgdGhlIFBDQVAyIEFTSUMgdXNlZCBvbiBzb21lIE1vdG9yb2xhIHBob25lcy4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggNWUxNTJmZi4uYWEzZmJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDkgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQkrPSBydGMtYXQ5MXNhbTkubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQVUxWFhYKQkrPSBydGMtYXUxeHh4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0JGSU4pCSs9IHJ0Yy1iZmluLm8KK29iai0kKENPTkZJR19SVENfRFJWX0JRNDgwMikJKz0gcnRjLWJxNDgwMi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9DTU9TKQkrPSBydGMtY21vcy5vCitvYmotJChDT05GSUdfUlRDX0RSVl9DT0g5MDEzMzEpCSs9IHJ0Yy1jb2g5MDEzMzEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRE0zNTVFVk0pCSs9IHJ0Yy1kbTM1NWV2bS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzEyMTYpCSs9IHJ0Yy1kczEyMTYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMjg2KQkrPSBydGMtZHMxMjg2Lm8KQEAgLTQwLDI0ICs0MiwyNiBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfRUZJKQkrPSBydGMtZWZpLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0VQOTNYWCkJKz0gcnRjLWVwOTN4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9GTTMxMzApCSs9IHJ0Yy1mbTMxMzAubworb2JqLSQoQ09ORklHX1JUQ19EUlZfR0VORVJJQykJKz0gcnRjLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfSVNMMTIwOCkJKz0gcnRjLWlzbDEyMDgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQxVDgwKQkrPSBydGMtbTQxdDgwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX000MVQ5NCkJKz0gcnRjLW00MXQ5NC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUMzUpCSs9IHJ0Yy1tNDh0MzUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDU5KQkrPSBydGMtbTQ4dDU5Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000OFQ4NikJKz0gcnRjLW00OHQ4Ni5vCi1vYmotJChDT05GSUdfUlRDX0RSVl9CUTQ4MDIpCSs9IHJ0Yy1icTQ4MDIubwotb2JqLSQoQ09ORklHX1JUQ19EUlZfU1VONFYpCSs9IHJ0Yy1zdW40di5vCi1vYmotJChDT05GSUdfUlRDX0RSVl9TVEFSRklSRSkJKz0gcnRjLXN0YXJmaXJlLm8KK29iai0kKENPTkZJR19SVENfTVhDKQkJKz0gcnRjLW14Yy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NQVg2OTAwKQkrPSBydGMtbWF4NjkwMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NQVg2OTAyKQkrPSBydGMtbWF4NjkwMi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NVikJKz0gcnRjLW12Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX09NQVApCSs9IHJ0Yy1vbWFwLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BDQVApCSs9IHJ0Yy1wY2FwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjg1NjMpCSs9IHJ0Yy1wY2Y4NTYzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjg1ODMpCSs9IHJ0Yy1wY2Y4NTgzLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BDRjIxMjMpCSs9IHJ0Yy1wY2YyMTIzLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BDRjUwNjMzKQkrPSBydGMtcGNmNTA2MzMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzApCSs9IHJ0Yy1wbDAzMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMSkJKz0gcnRjLXBsMDMxLm8KLW9iai0kKENPTkZJR19SVENfRFJWX0dFTkVSSUMpCSs9IHJ0Yy1nZW5lcmljLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BTMykJKz0gcnRjLXBzMy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QWEEpCSs9IHJ0Yy1weGEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUjk3MDEpCSs9IHJ0Yy1yOTcwMS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9SUzVDMzEzKQkrPSBydGMtcnM1YzMxMy5vCkBAIC02OSw3ICs3MywxMCBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfUzNDKQkrPSBydGMtczNjLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1NBMTEwMCkJKz0gcnRjLXNhMTEwMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9TSCkJKz0gcnRjLXNoLm8KK29iai0kKENPTkZJR19SVENfRFJWX1NUQVJGSVJFKQkrPSBydGMtc3RhcmZpcmUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfU1RLMTdUQTgpCSs9IHJ0Yy1zdGsxN3RhOC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9TVE1QKQkrPSBydGMtc3RtcDN4eHgubworb2JqLSQoQ09ORklHX1JUQ19EUlZfU1VONFYpCSs9IHJ0Yy1zdW40di5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9URVNUKQkrPSBydGMtdGVzdC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9UV0w0MDMwKQkrPSBydGMtdHdsNDAzMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9UWDQ5MzkpCSs9IHJ0Yy10eDQ5MzkubwpAQCAtNzgsNSArODUsMyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfV004MzFYKQkrPSBydGMtd204MzF4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1dNODM1MCkJKz0gcnRjLXdtODM1MC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9YMTIwNSkJKz0gcnRjLXgxMjA1Lm8KLW9iai0kKENPTkZJR19SVENfRFJWX1BDRjUwNjMzKQkrPSBydGMtcGNmNTA2MzMubwotb2JqLSQoQ09ORklHX1JUQ19EUlZfUFMzKQkrPSBydGMtcHMzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IGI1YmY5MzcuLmJjOGJiY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJCQkJCUFUOTFfUlRDX0NBTEVWKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKEFUOTFfSURfU1lTLCBhdDkxX3J0Y19pbnRlcnJ1cHQsCi0JCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAorCQkJCUlSUUZfU0hBUkVELAogCQkJCSJhdDkxX3J0YyIsIHBkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdDkxX3J0YzogSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwKQEAgLTM0MCw3ICszNDAsNyBAQAogCiBzdGF0aWMgdTMyIGF0OTFfcnRjX2ltcjsKIAotc3RhdGljIGludCBhdDkxX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJLyogdGhpcyBJUlEgaXMgc2hhcmVkIHdpdGggREJHVSBhbmQgb3RoZXIgaGFyZHdhcmUgd2hpY2ggaXNuJ3QKIAkgKiBuZWNlc3NhcmlseSBkb2luZyBQTSBsaWtlIHdlIGFyZS4uLgpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJYXQ5MV9ydGNfaW1yID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JUQ19JTVIpCiAJCQkmIChBVDkxX1JUQ19BTEFSTXxBVDkxX1JUQ19TRUNFVik7CiAJaWYgKGF0OTFfcnRjX2ltcikgewotCQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQkJZW5hYmxlX2lycV93YWtlKEFUOTFfSURfU1lTKTsKIAkJZWxzZQogCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBhdDkxX3J0Y19pbXIpOwpAQCAtMzU2LDI4ICszNTYsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdDkxX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAoYXQ5MV9ydGNfaW1yKSB7Ci0JCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCQlkaXNhYmxlX2lycV93YWtlKEFUOTFfSURfU1lTKTsKIAkJZWxzZQogCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBhdDkxX3J0Y19pbXIpOwogCX0KIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGF0OTFfcnRjX3BtID0geworCS5zdXNwZW5kID0JYXQ5MV9ydGNfc3VzcGVuZCwKKwkucmVzdW1lID0JYXQ5MV9ydGNfcmVzdW1lLAorfTsKKworI2RlZmluZSBhdDkxX3J0Y19wbV9wdHIJJmF0OTFfcnRjX3BtCisKICNlbHNlCi0jZGVmaW5lIGF0OTFfcnRjX3N1c3BlbmQgTlVMTAotI2RlZmluZSBhdDkxX3J0Y19yZXN1bWUgIE5VTEwKKyNkZWZpbmUgYXQ5MV9ydGNfcG1fcHRyCU5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxX3J0Y19kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcChhdDkxX3J0Y19yZW1vdmUpLAotCS5zdXNwZW5kCT0gYXQ5MV9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGF0OTFfcnRjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiYXQ5MV9ydGMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gYXQ5MV9ydGNfcG1fcHRyLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jIGIvZHJpdmVycy9ydGMvcnRjLWJmaW4uYwppbmRleCBhMTE4ZWIwLi5iMTE0ODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKQEAgLTM4Myw3ICszODMsNyBAQAogCX0KIAogCS8qIEdyYWIgdGhlIElSUSBhbmQgaW5pdCB0aGUgaGFyZHdhcmUgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfUlRDLCBiZmluX3J0Y19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBwZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9SVEMsIGJmaW5fcnRjX2ludGVycnVwdCwgMCwgcGRldi0+bmFtZSwgZGV2KTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBlcnJfcmVnOwogCS8qIHNvbWV0aW1lcyB0aGUgYm9vdGxvYWRlciB0b3VjaGVkIHRoaW5ncywgYnV0IHRoZSB3cml0ZSBjb21wbGV0ZSB3YXMgbm90CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlMWZhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFJlYWwgVGltZSBDbG9jayBpbnRlcmZhY2UgZm9yIFNULUVyaWNzc29uIEFCIENPSCA5MDEgMzMxIFJUQy4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEJhc2VkIG9uIHJ0Yy1wbDAzMS5jIGJ5IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyoKKyAqIFJlZ2lzdGVycyBpbiB0aGUgQ09IIDkwMSAzMzEKKyAqLworLyogQWxhcm0gdmFsdWUgMzJiaXQgKFIvVykgKi8KKyNkZWZpbmUgQ09IOTAxMzMxX0FMQVJNCQkweDAwVQorLyogVXNlZCB0byBzZXQgY3VycmVudCB0aW1lIDMyYml0IChSL1cpICovCisjZGVmaW5lIENPSDkwMTMzMV9TRVRfVElNRQkweDA0VQorLyogSW5kaWNhdGlvbiBpZiBjdXJyZW50IHRpbWUgaXMgdmFsaWQgMzJiaXQgKFIvLSkgKi8KKyNkZWZpbmUgQ09IOTAxMzMxX1ZBTElECQkweDA4VQorLyogUmVhZCB0aGUgY3VycmVudCB0aW1lIDMyYml0IChSLy0pICovCisjZGVmaW5lIENPSDkwMTMzMV9DVVJfVElNRQkweDBjVQorLyogRXZlbnQgcmVnaXN0ZXIgZm9yIHRoZSAiYWxhcm0iIGludGVycnVwdCAqLworI2RlZmluZSBDT0g5MDEzMzFfSVJRX0VWRU5UCTB4MTBVCisvKiBNYXNrIHJlZ2lzdGVyIGZvciB0aGUgImFsYXJtIiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ09IOTAxMzMxX0lSUV9NQVNLCTB4MTRVCisvKiBGb3JjZSByZWdpc3RlciBmb3IgdGhlICJhbGFybSIgaW50ZXJydXB0ICovCisjZGVmaW5lIENPSDkwMTMzMV9JUlFfRk9SQ0UJMHgxOFUKKworLyoKKyAqIFJlZmVyZW5jZSB0byBSVEMgYmxvY2sgY2xvY2sKKyAqIE5vdGljZSB0aGF0IHRoZSBmcmVxdWVudCBjbGtfZW5hYmxlKCkvY2xrX2Rpc2FibGUoKSBvbiB0aGlzCisgKiBjbG9jayBpcyBtYWlubHkgdG8gYmUgYWJsZSB0byB0dXJuIG9uL29mZiBvdGhlciBjbG9ja3MgaW4gdGhlCisgKiBoaWVyYXJjaHkgYXMgbmVlZGVkLCB0aGUgUlRDIGNsb2NrIGlzIGFsd2F5cyBvbiBhbnl3YXkuCisgKi8KK3N0cnVjdCBjb2g5MDEzMzFfcG9ydCB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdTMyIHBoeWJhc2U7CisJdTMyIHBoeXNpemU7CisJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZTsKKwlpbnQgaXJxOworI2lmZGVmIENPTkZJR19QTQorCXUzMiBpcnFtYXNrc3RvcmU7CisjZW5kaWYKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjb2g5MDEzMzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvaDkwMTMzMV9wb3J0ICpydGFwID0gZGF0YTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwkvKiBBY2sgSVJRICovCisJd3JpdGVsKDEsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9FVkVOVCk7CisJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKwkvKiBTZXQgYWxhcm0gZmxhZyAqLworCXJ0Y191cGRhdGVfaXJxKHJ0YXAtPnJ0YywgMSwgUlRDX0FGKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBjb2g5MDEzMzFfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwkvKiBDaGVjayBpZiB0aGUgdGltZSBpcyB2YWxpZCAqLworCWlmIChyZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9WQUxJRCkpIHsKKwkJcnRjX3RpbWVfdG9fdG0ocmVhZGwocnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfQ1VSX1RJTUUpLCB0bSk7CisJCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisJCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworCX0KKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGNvaDkwMTMzMV9zZXRfbW1zcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgc2VjcykKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwl3cml0ZWwoc2VjcywgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfU0VUX1RJTUUpOworCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2g5MDEzMzFfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwlydGNfdGltZV90b190bShyZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9BTEFSTSksICZhbGFybS0+dGltZSk7CisJYWxhcm0tPnBlbmRpbmcgPSByZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfRVZFTlQpICYgMVU7CisJYWxhcm0tPmVuYWJsZWQgPSByZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSykgJiAxVTsKKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29oOTAxMzMxX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHRpbWU7CisKKwlydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZ0aW1lKTsKKwljbGtfZW5hYmxlKHJ0YXAtPmNsayk7CisJd3JpdGVsKHRpbWUsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0FMQVJNKTsKKwl3cml0ZWwoYWxhcm0tPmVuYWJsZWQsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29oOTAxMzMxX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwlpZiAoZW5hYmxlZCkKKwkJd3JpdGVsKDEsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwllbHNlCisJCXdyaXRlbCgwLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CisJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGNvaDkwMTMzMV9vcHMgPSB7CisJLnJlYWRfdGltZSA9IGNvaDkwMTMzMV9yZWFkX3RpbWUsCisJLnNldF9tbXNzID0gY29oOTAxMzMxX3NldF9tbXNzLAorCS5yZWFkX2FsYXJtID0gY29oOTAxMzMxX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybSA9IGNvaDkwMTMzMV9zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBjb2g5MDEzMzFfYWxhcm1faXJxX2VuYWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19leGl0IGNvaDkwMTMzMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlpZiAocnRhcCkgeworCQlmcmVlX2lycShydGFwLT5pcnEsIHJ0YXApOworCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRhcC0+cnRjKTsKKwkJY2xrX3B1dChydGFwLT5jbGspOworCQlpb3VubWFwKHJ0YXAtPnZpcnRiYXNlKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJ0YXAtPnBoeWJhc2UsIHJ0YXAtPnBoeXNpemUpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJa2ZyZWUocnRhcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgY29oOTAxMzMxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlydGFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvaDkwMTMzMV9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFydGFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBvdXRfbm9fcmVzb3VyY2U7CisJfQorCXJ0YXAtPnBoeWJhc2UgPSByZXMtPnN0YXJ0OworCXJ0YXAtPnBoeXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHJ0YXAtPnBoeWJhc2UsIHJ0YXAtPnBoeXNpemUsCisJCQkgICAgICAgInJ0Yy1jb2g5MDEzMzEiKSA9PSBOVUxMKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfbm9fbWVtcmVnaW9uOworCX0KKworCXJ0YXAtPnZpcnRiYXNlID0gaW9yZW1hcChydGFwLT5waHliYXNlLCBydGFwLT5waHlzaXplKTsKKwlpZiAoIXJ0YXAtPnZpcnRiYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX3JlbWFwOworCX0KKworCXJ0YXAtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJlcXVlc3RfaXJxKHJ0YXAtPmlycSwgY29oOTAxMzMxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKKwkJCSJSVEMgQ09IIDkwMSAzMzEgQWxhcm0iLCBydGFwKSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9ub19pcnE7CisJfQorCisJcnRhcC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJ0YXAtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGFwLT5jbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGNsb2NrXG4iKTsKKwkJZ290byBvdXRfbm9fY2xrOworCX0KKworCS8qIFdlIGVuYWJsZS9kaXNhYmxlIHRoZSBjbG9jayBvbmx5IHRvIGFzc3VyZSBpdCB3b3JrcyAqLworCXJldCA9IGNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBlbmFibGUgY2xvY2tcbiIpOworCQlnb3RvIG91dF9ub19jbGtfZW5hYmxlOworCX0KKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcnRhcC0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiY29oOTAxMzMxIiwgJnBkZXYtPmRldiwgJmNvaDkwMTMzMV9vcHMsCisJCQkJCSBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGFwLT5ydGMpKSB7CisJCXJldCA9IFBUUl9FUlIocnRhcC0+cnRjKTsKKwkJZ290byBvdXRfbm9fcnRjOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0YXApOworCisJcmV0dXJuIDA7CisKKyBvdXRfbm9fcnRjOgorIG91dF9ub19jbGtfZW5hYmxlOgorCWNsa19wdXQocnRhcC0+Y2xrKTsKKyBvdXRfbm9fY2xrOgorCWZyZWVfaXJxKHJ0YXAtPmlycSwgcnRhcCk7Cisgb3V0X25vX2lycToKKwlpb3VubWFwKHJ0YXAtPnZpcnRiYXNlKTsKKyBvdXRfbm9fcmVtYXA6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cisgb3V0X25vX21lbXJlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24ocnRhcC0+cGh5YmFzZSwgU1pfNEspOworIG91dF9ub19yZXNvdXJjZToKKwlrZnJlZShydGFwKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGNvaDkwMTMzMV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwkvKgorCSAqIElmIHRoaXMgUlRDIGFsYXJtIHdpbGwgYmUgdXNlZCBmb3Igd2FraW5nIHRoZSBzeXN0ZW0gdXAsCisJICogZG9uJ3QgZGlzYWJsZSBpdCBvZiBjb3Vyc2UuIEVsc2Ugd2UganVzdCBkaXNhYmxlIHRoZSBhbGFybQorCSAqIGFuZCBhd2FpdCBzdXNwZW5zaW9uLgorCSAqLworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgeworCQllbmFibGVfaXJxX3dha2UocnRhcC0+aXJxKTsKKwl9IGVsc2UgeworCQljbGtfZW5hYmxlKHJ0YXAtPmNsayk7CisJCXJ0YXAtPmlycW1hc2tzdG9yZSA9IHJlYWRsKHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwkJd3JpdGVsKDAsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwkJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29oOTAxMzMxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjb2g5MDEzMzFfcG9ydCAqcnRhcCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShydGFwLT5pcnEpOworCWVsc2UKKwkJY2xrX2VuYWJsZShydGFwLT5jbGspOworCQl3cml0ZWwocnRhcC0+aXJxbWFza3N0b3JlLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CisJCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBjb2g5MDEzMzFfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGNvaDkwMTMzMV9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNvaDkwMTMzMV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjb2g5MDEzMzFfcG9ydCAqcnRhcCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwl3cml0ZWwoMCwgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfSVJRX01BU0spOworCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvaDkwMTMzMV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnRjLWNvaDkwMTMzMSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZXhpdF9wKGNvaDkwMTMzMV9yZW1vdmUpLAorCS5zdXNwZW5kID0gY29oOTAxMzMxX3N1c3BlbmQsCisJLnJlc3VtZSA9IGNvaDkwMTMzMV9yZXN1bWUsCisJLnNodXRkb3duID0gY29oOTAxMzMxX3NodXRkb3duLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY29oOTAxMzMxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjb2g5MDEzMzFfZHJpdmVyLCBjb2g5MDEzMzFfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY29oOTAxMzMxX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29oOTAxMzMxX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNvaDkwMTMzMV9pbml0KTsKK21vZHVsZV9leGl0KGNvaDkwMTMzMV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1QtRXJpY3Nzb24gQUIgQ09IIDkwMSAzMzEgUlRDIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCmluZGV4IDhmNDEwZTUuLjI3MzZiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKQEAgLTg0MSwzICs4NDEsNCBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBkcml2ZXIgZm9yIERTMTMwNSBhbmQgRFMxMzA2IGNoaXBzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpydGMtZHMxMzA1Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKaW5kZXggNDdhOTNjMC4uZWI5OWVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwpAQCAtODk2LDggKzg5Niw3IEBACiAJcmV0dXJuIDA7CiAKIGV4aXRfaXJxOgotCWlmIChkczEzMDctPnJ0YykKLQkJcnRjX2RldmljZV91bnJlZ2lzdGVyKGRzMTMwNy0+cnRjKTsKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZHMxMzA3LT5ydGMpOwogZXhpdF9mcmVlOgogCWtmcmVlKGRzMTMwNyk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzOTAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzOTAuYwppbmRleCBlMDFiOTU1Li5jZGI3MDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzkwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM5MC5jCkBAIC0xODksMyArMTg5LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGFsbGFzL01heGltIERTMTM5MC85My85NCBTUEkgUlRDIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWFyayBKYWNrc29uIDxtcGZqQG1pbWMuY28udWs+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpydGMtZHMxMzkwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMKaW5kZXggYzUxNTg5ZS4uYTc3NGNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzQuYwpAQCAtMTg4LDMgKzE4OCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRTMzIzNCBTUEkgUlRDIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGVubmlzIEFiZXJpbGxhIDxkZW56enpob21lQHlhaG9vLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOmRzMzIzNCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCmluZGV4IDU1MTMzMmUuLjlkYTAyZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKQEAgLTEyOCwxMiArMTI4LDE2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAocmVzID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsX2ZyZWU7CisJfQogCiAJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7Ci0JaWYgKHJlcyA9PSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOworCWlmIChyZXMgPT0gTlVMTCkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9mcmVlOworCX0KIAogCWVwOTN4eF9ydGMtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZXA5M3h4X3J0Yy0+bW1pb19iYXNlID09IE5VTEwpIHsKQEAgLTE2OSw2ICsxNzMsOCBAQAogCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiAJfQogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbF9mcmVlOgorCWtmcmVlKGVwOTN4eF9ydGMpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYwppbmRleCBjM2ExOGM1Li5jOGM5N2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCkBAIC0xNzEsMyArMTcxLDQgQEAKIE1PRFVMRV9BVVRIT1IoIktpbSBCLiBIZWlubyA8S2ltLkhlaW5vQGJsdWVnaWdhLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTVCBNNDFUOTQgU1BJIFJUQyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6cnRjLW00MXQ5NCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKaW5kZXggMzZhOGVhOS4uNjU3NDAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCkBAIC0xNzUsMyArMTc1LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTiAoIm1heDY5MDIgc3BpIFJUQyBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IgKCJSYXBoYWVsIEFzc2VuYXQiKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpydGMtbWF4NjkwMiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jIGIvZHJpdmVycy9ydGMvcnRjLW14Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZDUwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBSVENfSU5QVVRfQ0xLXzMyNzY4SFoJKDB4MDAgPDwgNSkKKyNkZWZpbmUgUlRDX0lOUFVUX0NMS18zMjAwMEhaCSgweDAxIDw8IDUpCisjZGVmaW5lIFJUQ19JTlBVVF9DTEtfMzg0MDBIWgkoMHgwMiA8PCA1KQorCisjZGVmaW5lIFJUQ19TV19CSVQgICAgICAoMSA8PCAwKQorI2RlZmluZSBSVENfQUxNX0JJVCAgICAgKDEgPDwgMikKKyNkZWZpbmUgUlRDXzFIWl9CSVQgICAgICgxIDw8IDQpCisjZGVmaW5lIFJUQ18ySFpfQklUICAgICAoMSA8PCA3KQorI2RlZmluZSBSVENfU0FNMF9CSVQgICAgKDEgPDwgOCkKKyNkZWZpbmUgUlRDX1NBTTFfQklUICAgICgxIDw8IDkpCisjZGVmaW5lIFJUQ19TQU0yX0JJVCAgICAoMSA8PCAxMCkKKyNkZWZpbmUgUlRDX1NBTTNfQklUICAgICgxIDw8IDExKQorI2RlZmluZSBSVENfU0FNNF9CSVQgICAgKDEgPDwgMTIpCisjZGVmaW5lIFJUQ19TQU01X0JJVCAgICAoMSA8PCAxMykKKyNkZWZpbmUgUlRDX1NBTTZfQklUICAgICgxIDw8IDE0KQorI2RlZmluZSBSVENfU0FNN19CSVQgICAgKDEgPDwgMTUpCisjZGVmaW5lIFBJVF9BTExfT04gICAgICAoUlRDXzJIWl9CSVQgfCBSVENfU0FNMF9CSVQgfCBSVENfU0FNMV9CSVQgfCBcCisJCQkgUlRDX1NBTTJfQklUIHwgUlRDX1NBTTNfQklUIHwgUlRDX1NBTTRfQklUIHwgXAorCQkJIFJUQ19TQU01X0JJVCB8IFJUQ19TQU02X0JJVCB8IFJUQ19TQU03X0JJVCkKKworI2RlZmluZSBSVENfRU5BQkxFX0JJVCAgKDEgPDwgNykKKworI2RlZmluZSBNQVhfUElFX05VTSAgICAgOQorI2RlZmluZSBNQVhfUElFX0ZSRVEgICAgNTEyCitzdGF0aWMgY29uc3QgdTMyIFBJRV9CSVRfREVGW01BWF9QSUVfTlVNXVsyXSA9IHsKKwl7IDIsCQlSVENfMkhaX0JJVCB9LAorCXsgNCwJCVJUQ19TQU0wX0JJVCB9LAorCXsgOCwJCVJUQ19TQU0xX0JJVCB9LAorCXsgMTYsCQlSVENfU0FNMl9CSVQgfSwKKwl7IDMyLAkJUlRDX1NBTTNfQklUIH0sCisJeyA2NCwJCVJUQ19TQU00X0JJVCB9LAorCXsgMTI4LAkJUlRDX1NBTTVfQklUIH0sCisJeyAyNTYsCQlSVENfU0FNNl9CSVQgfSwKKwl7IE1BWF9QSUVfRlJFUSwJUlRDX1NBTTdfQklUIH0sCit9OworCisvKiBUaG9zZSBhcmUgdGhlIGJpdHMgZnJvbSBhIGNsYXNzaWMgUlRDIHdlIHdhbnQgdG8gbWltaWMgKi8KKyNkZWZpbmUgUlRDX0lSUUYJMHg4MAkvKiBhbnkgb2YgdGhlIGZvbGxvd2luZyAzIGlzIGFjdGl2ZSAqLworI2RlZmluZSBSVENfUEYJCTB4NDAJLyogUGVyaW9kaWMgaW50ZXJydXB0ICovCisjZGVmaW5lIFJUQ19BRgkJMHgyMAkvKiBBbGFybSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUlRDX1VGCQkweDEwCS8qIFVwZGF0ZSBpbnRlcnJ1cHQgZm9yIDFIeiBSVEMgKi8KKworI2RlZmluZSBNWENfUlRDX1RJTUUJMAorI2RlZmluZSBNWENfUlRDX0FMQVJNCTEKKworI2RlZmluZSBSVENfSE9VUk1JTgkweDAwCS8qICAzMmJpdCBydGMgaG91ci9taW4gY291bnRlciByZWcgKi8KKyNkZWZpbmUgUlRDX1NFQ09ORAkweDA0CS8qICAzMmJpdCBydGMgc2Vjb25kcyBjb3VudGVyIHJlZyAqLworI2RlZmluZSBSVENfQUxSTV9ITQkweDA4CS8qICAzMmJpdCBydGMgYWxhcm0gaG91ci9taW4gcmVnICovCisjZGVmaW5lIFJUQ19BTFJNX1NFQwkweDBDCS8qICAzMmJpdCBydGMgYWxhcm0gc2Vjb25kcyByZWcgKi8KKyNkZWZpbmUgUlRDX1JUQ0NUTAkweDEwCS8qICAzMmJpdCBydGMgY29udHJvbCByZWcgKi8KKyNkZWZpbmUgUlRDX1JUQ0lTUgkweDE0CS8qICAzMmJpdCBydGMgaW50ZXJydXB0IHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgUlRDX1JUQ0lFTlIJMHgxOAkvKiAgMzJiaXQgcnRjIGludGVycnVwdCBlbmFibGUgcmVnICovCisjZGVmaW5lIFJUQ19TVFBXQ0gJMHgxQwkvKiAgMzJiaXQgcnRjIHN0b3B3YXRjaCBtaW4gcmVnICovCisjZGVmaW5lIFJUQ19EQVlSCTB4MjAJLyogIDMyYml0IHJ0YyBkYXlzIGNvdW50ZXIgcmVnICovCisjZGVmaW5lIFJUQ19EQVlBTEFSTQkweDI0CS8qICAzMmJpdCBydGMgZGF5IGFsYXJtIHJlZyAqLworI2RlZmluZSBSVENfVEVTVDEJMHgyOAkvKiAgMzJiaXQgcnRjIHRlc3QgcmVnIDEgKi8KKyNkZWZpbmUgUlRDX1RFU1QyCTB4MkMJLyogIDMyYml0IHJ0YyB0ZXN0IHJlZyAyICovCisjZGVmaW5lIFJUQ19URVNUMwkweDMwCS8qICAzMmJpdCBydGMgdGVzdCByZWcgMyAqLworCitzdHJ1Y3QgcnRjX3BsYXRfZGF0YSB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBpbnQgaXJxZW47CisJaW50IGFscm1fc2VjOworCWludCBhbHJtX21pbjsKKwlpbnQgYWxybV9ob3VyOworCWludCBhbHJtX21kYXk7CisJc3RydWN0IHRpbWVzcGVjIG14Y19ydGNfZGVsdGE7CisJc3RydWN0IHJ0Y190aW1lIGdfcnRjX2FsYXJtOworfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBvYnRhaW4gdGhlIFJUQyB0aW1lIG9yIHRoZSBhbGFybSB2YWx1ZSBpbgorICogc2Vjb25kLgorICovCitzdGF0aWMgdTMyIGdldF9hbGFybV9vcl90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHRpbWVfYWxhcm0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKwl1MzIgZGF5ID0gMCwgaHIgPSAwLCBtaW4gPSAwLCBzZWMgPSAwLCBocl9taW4gPSAwOworCisJc3dpdGNoICh0aW1lX2FsYXJtKSB7CisJY2FzZSBNWENfUlRDX1RJTUU6CisJCWRheSA9IHJlYWR3KGlvYWRkciArIFJUQ19EQVlSKTsKKwkJaHJfbWluID0gcmVhZHcoaW9hZGRyICsgUlRDX0hPVVJNSU4pOworCQlzZWMgPSByZWFkdyhpb2FkZHIgKyBSVENfU0VDT05EKTsKKwkJYnJlYWs7CisJY2FzZSBNWENfUlRDX0FMQVJNOgorCQlkYXkgPSByZWFkdyhpb2FkZHIgKyBSVENfREFZQUxBUk0pOworCQlocl9taW4gPSByZWFkdyhpb2FkZHIgKyBSVENfQUxSTV9ITSkgJiAweGZmZmY7CisJCXNlYyA9IHJlYWR3KGlvYWRkciArIFJUQ19BTFJNX1NFQyk7CisJCWJyZWFrOworCX0KKworCWhyID0gaHJfbWluID4+IDg7CisJbWluID0gaHJfbWluICYgMHhmZjsKKworCXJldHVybiAoKChkYXkgKiAyNCArIGhyKSAqIDYwKSArIG1pbikgKiA2MCArIHNlYzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUlRDIGFsYXJtIHZhbHVlIG9yIHRoZSB0aW1lIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBzZXRfYWxhcm1fb3JfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCB0aW1lX2FsYXJtLCB1MzIgdGltZSkKK3sKKwl1MzIgZGF5LCBociwgbWluLCBzZWMsIHRlbXA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKworCWRheSA9IHRpbWUgLyA4NjQwMDsKKwl0aW1lIC09IGRheSAqIDg2NDAwOworCisJLyogdGltZSBpcyB3aXRoaW4gYSBkYXkgbm93ICovCisJaHIgPSB0aW1lIC8gMzYwMDsKKwl0aW1lIC09IGhyICogMzYwMDsKKworCS8qIHRpbWUgaXMgd2l0aGluIGFuIGhvdXIgbm93ICovCisJbWluID0gdGltZSAvIDYwOworCXNlYyA9IHRpbWUgLSBtaW4gKiA2MDsKKworCXRlbXAgPSAoaHIgPDwgOCkgKyBtaW47CisKKwlzd2l0Y2ggKHRpbWVfYWxhcm0pIHsKKwljYXNlIE1YQ19SVENfVElNRToKKwkJd3JpdGV3KGRheSwgaW9hZGRyICsgUlRDX0RBWVIpOworCQl3cml0ZXcoc2VjLCBpb2FkZHIgKyBSVENfU0VDT05EKTsKKwkJd3JpdGV3KHRlbXAsIGlvYWRkciArIFJUQ19IT1VSTUlOKTsKKwkJYnJlYWs7CisJY2FzZSBNWENfUlRDX0FMQVJNOgorCQl3cml0ZXcoZGF5LCBpb2FkZHIgKyBSVENfREFZQUxBUk0pOworCQl3cml0ZXcoc2VjLCBpb2FkZHIgKyBSVENfQUxSTV9TRUMpOworCQl3cml0ZXcodGVtcCwgaW9hZGRyICsgUlRDX0FMUk1fSE0pOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIFJUQyBhbGFybSByZWdpc3RlcnMgYW5kIHRoZW4gY2xlYXJzIGFsbCB0aGUKKyAqIGludGVycnVwdCBzdGF0dXMgYml0cy4KKyAqLworc3RhdGljIGludCBydGNfdXBkYXRlX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICphbHJtKQoreworCXN0cnVjdCBydGNfdGltZSBhbGFybV90bSwgbm93X3RtOworCXVuc2lnbmVkIGxvbmcgbm93LCB0aW1lOworCWludCByZXQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKworCW5vdyA9IGdldF9hbGFybV9vcl90aW1lKGRldiwgTVhDX1JUQ19USU1FKTsKKwlydGNfdGltZV90b190bShub3csICZub3dfdG0pOworCWFsYXJtX3RtLnRtX3llYXIgPSBub3dfdG0udG1feWVhcjsKKwlhbGFybV90bS50bV9tb24gPSBub3dfdG0udG1fbW9uOworCWFsYXJtX3RtLnRtX21kYXkgPSBub3dfdG0udG1fbWRheTsKKwlhbGFybV90bS50bV9ob3VyID0gYWxybS0+dG1faG91cjsKKwlhbGFybV90bS50bV9taW4gPSBhbHJtLT50bV9taW47CisJYWxhcm1fdG0udG1fc2VjID0gYWxybS0+dG1fc2VjOworCXJ0Y190bV90b190aW1lKCZub3dfdG0sICZub3cpOworCXJ0Y190bV90b190aW1lKCZhbGFybV90bSwgJnRpbWUpOworCisJaWYgKHRpbWUgPCBub3cpIHsKKwkJdGltZSArPSA2MCAqIDYwICogMjQ7CisJCXJ0Y190aW1lX3RvX3RtKHRpbWUsICZhbGFybV90bSk7CisJfQorCisJcmV0ID0gcnRjX3RtX3RvX3RpbWUoJmFsYXJtX3RtLCAmdGltZSk7CisKKwkvKiBjbGVhciBhbGwgdGhlIGludGVycnVwdCBzdGF0dXMgYml0cyAqLworCXdyaXRldyhyZWFkdyhpb2FkZHIgKyBSVENfUlRDSVNSKSwgaW9hZGRyICsgUlRDX1JUQ0lTUik7CisJc2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX0FMQVJNLCB0aW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJUQyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLiAqLworc3RhdGljIGlycXJldHVybl90IG14Y19ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2X2lkOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKwl1MzIgc3RhdHVzOworCXUzMiBldmVudHMgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXN0YXR1cyA9IHJlYWR3KGlvYWRkciArIFJUQ19SVENJU1IpICYgcmVhZHcoaW9hZGRyICsgUlRDX1JUQ0lFTlIpOworCS8qIGNsZWFyIGludGVycnVwdCBzb3VyY2VzICovCisJd3JpdGV3KHN0YXR1cywgaW9hZGRyICsgUlRDX1JUQ0lTUik7CisKKwkvKiBjbGVhciBhbGFybSBpbnRlcnJ1cHQgaWYgaXQgaGFzIG9jY3VycmVkICovCisJaWYgKHN0YXR1cyAmIFJUQ19BTE1fQklUKQorCQlzdGF0dXMgJj0gflJUQ19BTE1fQklUOworCisJLyogdXBkYXRlIGlycSBkYXRhICYgY291bnRlciAqLworCWlmIChzdGF0dXMgJiBSVENfQUxNX0JJVCkKKwkJZXZlbnRzIHw9IChSVENfQUYgfCBSVENfSVJRRik7CisKKwlpZiAoc3RhdHVzICYgUlRDXzFIWl9CSVQpCisJCWV2ZW50cyB8PSAoUlRDX1VGIHwgUlRDX0lSUUYpOworCisJaWYgKHN0YXR1cyAmIFBJVF9BTExfT04pCisJCWV2ZW50cyB8PSAoUlRDX1BGIHwgUlRDX0lSUUYpOworCisJaWYgKChzdGF0dXMgJiBSVENfQUxNX0JJVCkgJiYgcnRjX3ZhbGlkX3RtKCZwZGF0YS0+Z19ydGNfYWxhcm0pKQorCQlydGNfdXBkYXRlX2FsYXJtKCZwZGV2LT5kZXYsICZwZGF0YS0+Z19ydGNfYWxhcm0pOworCisJcnRjX3VwZGF0ZV9pcnEocGRhdGEtPnJ0YywgMSwgZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIENsZWFyIGFsbCBpbnRlcnJ1cHRzIGFuZCByZWxlYXNlIHRoZSBJUlEKKyAqLworc3RhdGljIHZvaWQgbXhjX3J0Y19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCisJLyogRGlzYWJsZSBhbGwgcnRjIGludGVycnVwdHMgKi8KKwl3cml0ZXcoMCwgaW9hZGRyICsgUlRDX1JUQ0lFTlIpOworCisJLyogQ2xlYXIgYWxsIGludGVycnVwdCBzdGF0dXMgKi8KKwl3cml0ZXcoMHhmZmZmZmZmZiwgaW9hZGRyICsgUlRDX1JUQ0lTUik7CisKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXhjX3J0Y19pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGJpdCwKKwkJCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyOworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJcmVnID0gcmVhZHcoaW9hZGRyICsgUlRDX1JUQ0lFTlIpOworCisJaWYgKGVuYWJsZWQpCisJCXJlZyB8PSBiaXQ7CisJZWxzZQorCQlyZWcgJj0gfmJpdDsKKworCXdyaXRldyhyZWcsIGlvYWRkciArIFJUQ19SVENJRU5SKTsKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKK30KKworc3RhdGljIGludCBteGNfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlteGNfcnRjX2lycV9lbmFibGUoZGV2LCBSVENfQUxNX0JJVCwgZW5hYmxlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhjX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCW14Y19ydGNfaXJxX2VuYWJsZShkZXYsIFJUQ18xSFpfQklULCBlbmFibGVkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGN1cnJlbnQgUlRDIHRpbWUgaW50byB0bSBpbiBHcmVnb3JpYW4gZGF0ZS4KKyAqLworc3RhdGljIGludCBteGNfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdTMyIHZhbDsKKworCS8qIEF2b2lkIHJvbGwtb3ZlciBmcm9tIHJlYWRpbmcgdGhlIGRpZmZlcmVudCByZWdpc3RlcnMgKi8KKwlkbyB7CisJCXZhbCA9IGdldF9hbGFybV9vcl90aW1lKGRldiwgTVhDX1JUQ19USU1FKTsKKwl9IHdoaWxlICh2YWwgIT0gZ2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX1RJTUUpKTsKKworCXJ0Y190aW1lX3RvX3RtKHZhbCwgdG0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGludGVybmFsIFJUQyB0aW1lIGJhc2VkIG9uIHRtIGluIEdyZWdvcmlhbiBkYXRlLgorICovCitzdGF0aWMgaW50IG14Y19ydGNfc2V0X21tc3Moc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHRpbWUpCit7CisJLyogQXZvaWQgcm9sbC1vdmVyIGZyb20gcmVhZGluZyB0aGUgZGlmZmVyZW50IHJlZ2lzdGVycyAqLworCWRvIHsKKwkJc2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX1RJTUUsIHRpbWUpOworCX0gd2hpbGUgKHRpbWUgIT0gZ2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX1RJTUUpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgY3VycmVudCBhbGFybSB2YWx1ZSBpbnRvIHRoZSBwYXNzZWQgaW4gJ2Fscm0nCisgKiBhcmd1bWVudC4gSXQgdXBkYXRlcyB0aGUgYWxybSdzIHBlbmRpbmcgZmllbGQgdmFsdWUgYmFzZWQgb24gdGhlIHdoZXRoZXIKKyAqIGFuIGFsYXJtIGludGVycnVwdCBvY2N1cnMgb3Igbm90LgorICovCitzdGF0aWMgaW50IG14Y19ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CisKKwlydGNfdGltZV90b190bShnZXRfYWxhcm1fb3JfdGltZShkZXYsIE1YQ19SVENfQUxBUk0pLCAmYWxybS0+dGltZSk7CisJYWxybS0+cGVuZGluZyA9ICgocmVhZHcoaW9hZGRyICsgUlRDX1JUQ0lTUikgJiBSVENfQUxNX0JJVCkpID8gMSA6IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUlRDIGFsYXJtIGJhc2VkIG9uIHBhc3NlZCBpbiBhbHJtLgorICovCitzdGF0aWMgaW50IG14Y19ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlpZiAocnRjX3ZhbGlkX3RtKCZhbHJtLT50aW1lKSkgeworCQlpZiAoYWxybS0+dGltZS50bV9zZWMgPiA1OSB8fAorCQkgICAgYWxybS0+dGltZS50bV9ob3VyID4gMjMgfHwKKwkJICAgIGFscm0tPnRpbWUudG1fbWluID4gNTkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSBydGNfdXBkYXRlX2FsYXJtKGRldiwgJmFscm0tPnRpbWUpOworCX0gZWxzZSB7CisJCXJldCA9IHJ0Y192YWxpZF90bSgmYWxybS0+dGltZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHJ0Y191cGRhdGVfYWxhcm0oZGV2LCAmYWxybS0+dGltZSk7CisJfQorCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1lbWNweSgmcGRhdGEtPmdfcnRjX2FsYXJtLCAmYWxybS0+dGltZSwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOworCW14Y19ydGNfaXJxX2VuYWJsZShkZXYsIFJUQ19BTE1fQklULCBhbHJtLT5lbmFibGVkKTsKKworCXJldHVybiAwOworfQorCisvKiBSVEMgbGF5ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBteGNfcnRjX29wcyA9IHsKKwkucmVsZWFzZQkJPSBteGNfcnRjX3JlbGVhc2UsCisJLnJlYWRfdGltZQkJPSBteGNfcnRjX3JlYWRfdGltZSwKKwkuc2V0X21tc3MJCT0gbXhjX3J0Y19zZXRfbW1zcywKKwkucmVhZF9hbGFybQkJPSBteGNfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQkJPSBteGNfcnRjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZQk9IG14Y19ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUJPSBteGNfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhjX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IE5VTEw7CisJdTMyIHJlZzsKKwlpbnQgcmV0LCByYXRlOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcGRhdGEtPmlvYWRkciA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImNraWwiKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJY2xrX3B1dChjbGspOworCisJaWYgKHJhdGUgPT0gMzI3NjgpCisJCXJlZyA9IFJUQ19JTlBVVF9DTEtfMzI3NjhIWjsKKwllbHNlIGlmIChyYXRlID09IDMyMDAwKQorCQlyZWcgPSBSVENfSU5QVVRfQ0xLXzMyMDAwSFo7CisJZWxzZSBpZiAocmF0ZSA9PSAzODQwMCkKKwkJcmVnID0gUlRDX0lOUFVUX0NMS18zODQwMEhaOworCWVsc2UgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJydGMgY2xvY2sgaXMgbm90IHZhbGlkICglbHUpXG4iLAorCQkJY2xrX2dldF9yYXRlKGNsaykpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXRfZnJlZV9wZGF0YTsKKwl9CisKKwlyZWcgfD0gUlRDX0VOQUJMRV9CSVQ7CisJd3JpdGV3KHJlZywgKHBkYXRhLT5pb2FkZHIgKyBSVENfUlRDQ1RMKSk7CisJaWYgKCgocmVhZHcocGRhdGEtPmlvYWRkciArIFJUQ19SVENDVEwpKSAmIFJUQ19FTkFCTEVfQklUKSA9PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImhhcmR3YXJlIG1vZHVsZSBjYW4ndCBiZSBlbmFibGVkIVxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdF9mcmVlX3BkYXRhOworCX0KKworCXBkYXRhLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJydGMiKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgY2xvY2shXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+Y2xrKTsKKwkJZ290byBleGl0X2ZyZWVfcGRhdGE7CisJfQorCisJY2xrX2VuYWJsZShwZGF0YS0+Y2xrKTsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgJnBkZXYtPmRldiwgJm14Y19ydGNfb3BzLAorCQkJCSAgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7CisJCWdvdG8gZXhpdF9wdXRfY2xrOworCX0KKworCXBkYXRhLT5ydGMgPSBydGM7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOworCisJLyogQ29uZmlndXJlIGFuZCBlbmFibGUgdGhlIFJUQyAqLworCXBkYXRhLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJaWYgKHBkYXRhLT5pcnEgPj0gMCAmJgorCSAgICByZXF1ZXN0X2lycShwZGF0YS0+aXJxLCBteGNfcnRjX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQlwZGV2LT5uYW1lLCBwZGV2KSA8IDApIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImludGVycnVwdCBub3QgYXZhaWxhYmxlLlxuIik7CisJCXBkYXRhLT5pcnEgPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9wdXRfY2xrOgorCWNsa19wdXQocGRhdGEtPmNsayk7CisKK2V4aXRfZnJlZV9wZGF0YToKKwlrZnJlZShwZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBteGNfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOworCisJaWYgKHBkYXRhLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEocGRhdGEtPmlycSwgcGRldik7CisKKwljbGtfZGlzYWJsZShwZGF0YS0+Y2xrKTsKKwljbGtfcHV0KHBkYXRhLT5jbGspOworCWtmcmVlKHBkYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZQk9ICJteGNfcnRjIiwKKwkJICAgLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG14Y19ydGNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y19ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm14Y19ydGNfZHJpdmVyLCBteGNfcnRjX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14Y19ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteGNfcnRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG14Y19ydGNfaW5pdCk7Cittb2R1bGVfZXhpdChteGNfcnRjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSVEMgZHJpdmVyIGZvciBGcmVlc2NhbGUgTVhDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCmluZGV4IGJkMWNlOGUuLjA1ODdkNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtNDMwLDcgKzQzMCw3IEBACiAKIHN0YXRpYyBpbnQgX19leGl0IG9tYXBfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTs7CisJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNhcC5jIGIvZHJpdmVycy9ydGMvcnRjLXBjYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTljMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjYXAuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqICBwY2FwIHJ0YyBjb2RlIGZvciBNb3Rvcm9sYSBFWlggcGhvbmVzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBndWltaW5nIHpodW8gPGdtemh1b0BnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBSaWJlaXJvIDxkcnd5cm1AZ21haWwuY29tPgorICoKKyAqICBCYXNlZCBvbiBNb3Rvcm9sYSdzIHJ0Yy5jIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IE1vdG9yb2xhCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZXp4LXBjYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworc3RydWN0IHBjYXBfcnRjIHsKKwlzdHJ1Y3QgcGNhcF9jaGlwICpwY2FwOworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNhcF9ydGNfaXJxKGludCBpcnEsIHZvaWQgKl9wY2FwX3J0YykKK3sKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gX3BjYXBfcnRjOworCXVuc2lnbmVkIGxvbmcgcnRjX2V2ZW50czsKKworCWlmIChpcnEgPT0gcGNhcF90b19pcnEocGNhcF9ydGMtPnBjYXAsIFBDQVBfSVJRXzFIWikpCisJCXJ0Y19ldmVudHMgPSBSVENfSVJRRiB8IFJUQ19VRjsKKwllbHNlIGlmIChpcnEgPT0gcGNhcF90b19pcnEocGNhcF9ydGMtPnBjYXAsIFBDQVBfSVJRX1RPREEpKQorCQlydGNfZXZlbnRzID0gUlRDX0lSUUYgfCBSVENfQUY7CisJZWxzZQorCQlydGNfZXZlbnRzID0gMDsKKworCXJ0Y191cGRhdGVfaXJxKHBjYXBfcnRjLT5ydGMsIDEsIHJ0Y19ldmVudHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBwY2FwX3J0YyAqcGNhcF9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcnRjX3RpbWUgKnRtID0gJmFscm0tPnRpbWU7CisJdW5zaWduZWQgbG9uZyBzZWNzOworCXUzMiB0b2Q7CS8qIHRpbWUgb2YgZGF5LCBzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0ICovCisJdTMyIGRheXM7CS8qIGRheXMgc2luY2UgMS8xLzE5NzAgKi8KKworCWV6eF9wY2FwX3JlYWQocGNhcF9ydGMtPnBjYXAsIFBDQVBfUkVHX1JUQ19UT0RBLCAmdG9kKTsKKwlzZWNzID0gdG9kICYgUENBUF9SVENfVE9EX01BU0s7CisKKwllenhfcGNhcF9yZWFkKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfREFZQSwgJmRheXMpOworCXNlY3MgKz0gKGRheXMgJiBQQ0FQX1JUQ19EQVlfTUFTSykgKiBTRUNfUEVSX0RBWTsKKworCXJ0Y190aW1lX3RvX3RtKHNlY3MsIHRtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjYXBfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJ0Y190aW1lICp0bSA9ICZhbHJtLT50aW1lOworCXVuc2lnbmVkIGxvbmcgc2VjczsKKwl1MzIgdG9kLCBkYXlzOworCisJcnRjX3RtX3RvX3RpbWUodG0sICZzZWNzKTsKKworCXRvZCA9IHNlY3MgJSBTRUNfUEVSX0RBWTsKKwllenhfcGNhcF93cml0ZShwY2FwX3J0Yy0+cGNhcCwgUENBUF9SRUdfUlRDX1RPREEsIHRvZCk7CisKKwlkYXlzID0gc2VjcyAvIFNFQ19QRVJfREFZOworCWV6eF9wY2FwX3dyaXRlKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfREFZQSwgZGF5cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgbG9uZyBzZWNzOworCXUzMiB0b2QsIGRheXM7CisKKwllenhfcGNhcF9yZWFkKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfVE9ELCAmdG9kKTsKKwlzZWNzID0gdG9kICYgUENBUF9SVENfVE9EX01BU0s7CisKKwllenhfcGNhcF9yZWFkKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfREFZLCAmZGF5cyk7CisJc2VjcyArPSAoZGF5cyAmIFBDQVBfUlRDX0RBWV9NQVNLKSAqIFNFQ19QRVJfREFZOworCisJcnRjX3RpbWVfdG9fdG0oc2VjcywgdG0pOworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgcGNhcF9ydGNfc2V0X21tc3Moc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHNlY3MpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBwY2FwX3J0YyAqcGNhcF9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1MzIgdG9kLCBkYXlzOworCisJdG9kID0gc2VjcyAlIFNFQ19QRVJfREFZOworCWV6eF9wY2FwX3dyaXRlKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfVE9ELCB0b2QpOworCisJZGF5cyA9IHNlY3MgLyBTRUNfUEVSX0RBWTsKKwllenhfcGNhcF93cml0ZShwY2FwX3J0Yy0+cGNhcCwgUENBUF9SRUdfUlRDX0RBWSwgZGF5cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y19pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBpcnEsIHVuc2lnbmVkIGludCBlbikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHBjYXBfcnRjICpwY2FwX3J0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGVuKQorCQllbmFibGVfaXJxKHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBwaXJxKSk7CisJZWxzZQorCQlkaXNhYmxlX2lycShwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgcGlycSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNhcF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbikKK3sKKwlyZXR1cm4gcGNhcF9ydGNfaXJxX2VuYWJsZShkZXYsIFBDQVBfSVJRX1RPREEsIGVuKTsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbikKK3sKKwlyZXR1cm4gcGNhcF9ydGNfaXJxX2VuYWJsZShkZXYsIFBDQVBfSVJRXzFIWiwgZW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGNhcF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBwY2FwX3J0Y19yZWFkX3RpbWUsCisJLnJlYWRfYWxhcm0gPSBwY2FwX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBwY2FwX3J0Y19zZXRfYWxhcm0sCisJLnNldF9tbXNzID0gcGNhcF9ydGNfc2V0X21tc3MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBwY2FwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAorCS51cGRhdGVfaXJxX2VuYWJsZSA9IHBjYXBfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcGNhcF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjOworCWludCB0aW1lcl9pcnEsIGFsYXJtX2lycTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXBjYXBfcnRjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjYXBfcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2FwX3J0YykKKwkJcmV0dXJuIGVycjsKKworCXBjYXBfcnRjLT5wY2FwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCisJcGNhcF9ydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBjYXAiLCAmcGRldi0+ZGV2LAorCQkJCSAgJnBjYXBfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocGNhcF9ydGMtPnJ0YykpIHsKKwkJZXJyID0gUFRSX0VSUihwY2FwX3J0Yy0+cnRjKTsKKwkJZ290byBmYWlsX3J0YzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwY2FwX3J0Yyk7CisKKwl0aW1lcl9pcnEgPSBwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgUENBUF9JUlFfMUhaKTsKKwlhbGFybV9pcnEgPSBwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgUENBUF9JUlFfVE9EQSk7CisKKwllcnIgPSByZXF1ZXN0X2lycSh0aW1lcl9pcnEsIHBjYXBfcnRjX2lycSwgMCwgIlJUQyBUaW1lciIsIHBjYXBfcnRjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfdGltZXI7CisKKwllcnIgPSByZXF1ZXN0X2lycShhbGFybV9pcnEsIHBjYXBfcnRjX2lycSwgMCwgIlJUQyBBbGFybSIsIHBjYXBfcnRjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfYWxhcm07CisKKwlyZXR1cm4gMDsKK2ZhaWxfYWxhcm06CisJZnJlZV9pcnEodGltZXJfaXJxLCBwY2FwX3J0Yyk7CitmYWlsX3RpbWVyOgorCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwY2FwX3J0Yy0+cnRjKTsKK2ZhaWxfcnRjOgorCWtmcmVlKHBjYXBfcnRjKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwY2FwX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlmcmVlX2lycShwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgUENBUF9JUlFfMUhaKSwgcGNhcF9ydGMpOworCWZyZWVfaXJxKHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV9UT0RBKSwgcGNhcF9ydGMpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwY2FwX3J0Yy0+cnRjKTsKKwlrZnJlZShwY2FwX3J0Yyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNhcF9ydGNfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2RldmV4aXRfcChwY2FwX3J0Y19yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lICA9ICJwY2FwLXJ0YyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBydGNfcGNhcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmcGNhcF9ydGNfZHJpdmVyLCBwY2FwX3J0Y19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBydGNfcGNhcF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjYXBfcnRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJ0Y19wY2FwX2luaXQpOworbW9kdWxlX2V4aXQocnRjX3BjYXBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTW90b3JvbGEgcGNhcCBydGMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJndWltaW5nIHpodW8gPGdtemh1b0BnbWFpbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmMjEyMy5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjIxMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzVkZjlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjIxMjMuYwpAQCAtMCwwICsxLDM2NCBAQAorLyoKKyAqIEFuIFNQSSBkcml2ZXIgZm9yIHRoZSBQaGlsaXBzIFBDRjIxMjMgUlRDCisgKiBDb3B5cmlnaHQgMjAwOSBDeWJlciBTd2l0Y2hpbmcsIEluYy4KKyAqCisgKiBBdXRob3I6IENocmlzIFZlcmdlcyA8Y2hyaXN2QGN5YmVyc3dpdGNoaW5nLmNvbT4KKyAqIE1haW50YWluZXJzOiBodHRwOi8vd3d3LmN5YmVyc3dpdGNoaW5nLmNvbQorICoKKyAqIGJhc2VkIG9uIHRoZSBSUzVDMzQ4IGRyaXZlciBpbiB0aGlzIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIFRoYW5rcyB0byBDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpcGVsbEBmc2ZlLm9yZz4gZm9yCisgKiB0aGUgc3lzZnMgY29udHJpYnV0aW9ucyB0byB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIENTIGlzIGFjdGl2ZSBoaWdoLCBzbyBwbGF0Zm9ybSBkYXRhCisgKiBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZToKKyAqCisgKiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7CisgKiAJLi4uCisgKiAJeworICogCQkubW9kYWxpYXMJCT0gInJ0Yy1wY2YyMTIzIiwKKyAqIAkJLmNoaXBfc2VsZWN0CQk9IDEsCisgKiAJCS5jb250cm9sbGVyX2RhdGEJPSAodm9pZCAqKUFUOTFfUElOX1BBMTAsCisgKgkJLm1heF9zcGVlZF9oegkJPSAxMDAwICogMTAwMCwKKyAqCQkubW9kZQkJCT0gU1BJX0NTX0hJR0gsCisgKgkJLmJ1c19udW0JCT0gMCwKKyAqCX0sCisgKgkuLi4KKyAqfTsKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjYiCisKKyNkZWZpbmUgUENGMjEyM19SRUdfQ1RSTDEJKDB4MDApCS8qIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBQQ0YyMTIzX1JFR19DVFJMMgkoMHgwMSkJLyogQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFBDRjIxMjNfUkVHX1NDCQkoMHgwMikJLyogZGF0ZXRpbWUgKi8KKyNkZWZpbmUgUENGMjEyM19SRUdfTU4JCSgweDAzKQorI2RlZmluZSBQQ0YyMTIzX1JFR19IUgkJKDB4MDQpCisjZGVmaW5lIFBDRjIxMjNfUkVHX0RNCQkoMHgwNSkKKyNkZWZpbmUgUENGMjEyM19SRUdfRFcJCSgweDA2KQorI2RlZmluZSBQQ0YyMTIzX1JFR19NTwkJKDB4MDcpCisjZGVmaW5lIFBDRjIxMjNfUkVHX1lSCQkoMHgwOCkKKworI2RlZmluZSBQQ0YyMTIzX1NVQkFERFIJCSgxIDw8IDQpCisjZGVmaW5lIFBDRjIxMjNfV1JJVEUJCSgoMCA8PCA3KSB8IFBDRjIxMjNfU1VCQUREUikKKyNkZWZpbmUgUENGMjEyM19SRUFECQkoKDEgPDwgNykgfCBQQ0YyMTIzX1NVQkFERFIpCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwY2YyMTIzX2RyaXZlcjsKKworc3RydWN0IHBjZjIxMjNfc3lzZnNfcmVnIHsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOworCWNoYXIgbmFtZVsyXTsKK307CisKK3N0cnVjdCBwY2YyMTIzX3BsYXRfZGF0YSB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgcGNmMjEyM19zeXNmc19yZWcgcmVnc1sxNl07Cit9OworCisvKgorICogQ2F1c2VzIGEgMzAgbmFub3NlY29uZCBkZWxheSB0byBlbnN1cmUgdGhhdCB0aGUgUENGMjEyMyBjaGlwIHNlbGVjdAorICogaXMgcmVsZWFzZWQgcHJvcGVybHkgYWZ0ZXIgYW4gU1BJIHdyaXRlLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAqIGNhbGxlZCBhZnRlciBFVkVSWSByZWFkL3dyaXRlIGNhbGwgb3ZlciBTUEkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2YyMTIzX2RlbGF5X3RyZWModm9pZCkKK3sKKwluZGVsYXkoMzApOworfQorCitzdGF0aWMgc3NpemVfdCBwY2YyMTIzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGNmMjEyM19zeXNmc19yZWcgKnI7CisJdTggdHhidWZbMV0sIHJ4YnVmWzFdOworCXVuc2lnbmVkIGxvbmcgcmVnOworCWludCByZXQ7CisKKwlyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwY2YyMTIzX3N5c2ZzX3JlZywgYXR0cik7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoci0+bmFtZSwgMTYsICZyZWcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR4YnVmWzBdID0gUENGMjEyM19SRUFEIHwgcmVnOworCXJldCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCB0eGJ1ZiwgMSwgcnhidWYsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwlwY2YyMTIzX2RlbGF5X3RyZWMoKTsKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIweCV4XG4iLCByeGJ1ZlswXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjZjIxMjNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCBwY2YyMTIzX3N5c2ZzX3JlZyAqcjsKKwl1OCB0eGJ1ZlsyXTsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWludCByZXQ7CisKKwlyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwY2YyMTIzX3N5c2ZzX3JlZywgYXR0cik7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoci0+bmFtZSwgMTYsICZyZWcpCisJCXx8IHN0cmljdF9zdHJ0b3VsKGJ1ZmZlciwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR4YnVmWzBdID0gUENGMjEyM19XUklURSB8IHJlZzsKKwl0eGJ1ZlsxXSA9IHZhbDsKKwlyZXQgPSBzcGlfd3JpdGUoc3BpLCB0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlPOworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBwY2YyMTIzX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJdTggdHhidWZbMV0sIHJ4YnVmWzddOworCWludCByZXQ7CisKKwl0eGJ1ZlswXSA9IFBDRjIxMjNfUkVBRCB8IFBDRjIxMjNfUkVHX1NDOworCXJldCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCB0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSwKKwkJCXJ4YnVmLCBzaXplb2YocnhidWYpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlwY2YyMTIzX2RlbGF5X3RyZWMoKTsKKworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJ4YnVmWzBdICYgMHg3Rik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocnhidWZbMV0gJiAweDdGKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocnhidWZbMl0gJiAweDNGKTsgLyogcnRjIGhyIDAtMjMgKi8KKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocnhidWZbM10gJiAweDNGKTsKKwl0bS0+dG1fd2RheSA9IHJ4YnVmWzRdICYgMHgwNzsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyeGJ1Zls1XSAmIDB4MUYpIC0gMTsgLyogcnRjIG1uIDEtMTIgKi8KKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocnhidWZbNl0pOworCWlmICh0bS0+dG1feWVhciA8IDcwKQorCQl0bS0+dG1feWVhciArPSAxMDA7CS8qIGFzc3VtZSB3ZSBhcmUgaW4gMTk3MC4uLjIwNjkgKi8KKworCWRldl9kYmcoZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCisJCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAorCQkJX19mdW5jX18sCisJCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKKwkJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOworCisJLyogdGhlIGNsb2NrIGNhbiBnaXZlIG91dCBpbnZhbGlkIGRhdGV0aW1lLCBidXQgd2UgY2Fubm90IHJldHVybgorCSAqIC1FSU5WQUwgb3RoZXJ3aXNlIGh3Y2xvY2sgd2lsbCByZWZ1c2UgdG8gc2V0IHRoZSB0aW1lIG9uIGJvb3R1cC4KKwkgKi8KKwlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApCisJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjZjIxMjNfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXU4IHR4YnVmWzhdOworCWludCByZXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgorCQkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKKwkJCV9fZnVuY19fLAorCQkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCisJCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKKworCS8qIFN0b3AgdGhlIGNvdW50ZXIgZmlyc3QgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfV1JJVEUgfCBQQ0YyMTIzX1JFR19DVFJMMTsKKwl0eGJ1ZlsxXSA9IDB4MjA7CisJcmV0ID0gc3BpX3dyaXRlKHNwaSwgdHhidWYsIDIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJLyogU2V0IHRoZSBuZXcgdGltZSAqLworCXR4YnVmWzBdID0gUENGMjEyM19XUklURSB8IFBDRjIxMjNfUkVHX1NDOworCXR4YnVmWzFdID0gYmluMmJjZCh0bS0+dG1fc2VjICYgMHg3Rik7CisJdHhidWZbMl0gPSBiaW4yYmNkKHRtLT50bV9taW4gJiAweDdGKTsKKwl0eGJ1ZlszXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIgJiAweDNGKTsKKwl0eGJ1Zls0XSA9IGJpbjJiY2QodG0tPnRtX21kYXkgJiAweDNGKTsKKwl0eGJ1Zls1XSA9IHRtLT50bV93ZGF5ICYgMHgwNzsKKwl0eGJ1Zls2XSA9IGJpbjJiY2QoKHRtLT50bV9tb24gKyAxKSAmIDB4MUYpOyAvKiBydGMgbW4gMS0xMiAqLworCXR4YnVmWzddID0gYmluMmJjZCh0bS0+dG1feWVhciA8IDEwMCA/IHRtLT50bV95ZWFyIDogdG0tPnRtX3llYXIgLSAxMDApOworCisJcmV0ID0gc3BpX3dyaXRlKHNwaSwgdHhidWYsIHNpemVvZih0eGJ1ZikpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJLyogU3RhcnQgdGhlIGNvdW50ZXIgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfV1JJVEUgfCBQQ0YyMTIzX1JFR19DVFJMMTsKKwl0eGJ1ZlsxXSA9IDB4MDA7CisJcmV0ID0gc3BpX3dyaXRlKHNwaSwgdHhidWYsIDIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwY2YyMTIzX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZQk9IHBjZjIxMjNfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBwY2YyMTIzX3J0Y19zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBjZjIxMjNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCBwY2YyMTIzX3BsYXRfZGF0YSAqcGRhdGE7CisJdTggdHhidWZbMl0sIHJ4YnVmWzJdOworCWludCByZXQsIGk7CisKKwlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2YyMTIzX3BsYXRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCXNwaS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKworCS8qIFNlbmQgYSBzb2Z0d2FyZSByZXNldCBjb21tYW5kICovCisJdHhidWZbMF0gPSBQQ0YyMTIzX1dSSVRFIHwgUENGMjEyM19SRUdfQ1RSTDE7CisJdHhidWZbMV0gPSAweDU4OworCWRldl9kYmcoJnNwaS0+ZGV2LCAicmVzZXR0aW5nIFJUQyAoMHglMDJYIDB4JTAyWClcbiIsCisJCQl0eGJ1ZlswXSwgdHhidWZbMV0pOworCXJldCA9IHNwaV93cml0ZShzcGksIHR4YnVmLCAyICogc2l6ZW9mKHU4KSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8ga2ZyZWVfZXhpdDsKKwlwY2YyMTIzX2RlbGF5X3RyZWMoKTsKKworCS8qIFN0b3AgdGhlIGNvdW50ZXIgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfV1JJVEUgfCBQQ0YyMTIzX1JFR19DVFJMMTsKKwl0eGJ1ZlsxXSA9IDB4MjA7CisJZGV2X2RiZygmc3BpLT5kZXYsICJzdG9wcGluZyBSVEMgKDB4JTAyWCAweCUwMlgpXG4iLAorCQkJdHhidWZbMF0sIHR4YnVmWzFdKTsKKwlyZXQgPSBzcGlfd3JpdGUoc3BpLCB0eGJ1ZiwgMiAqIHNpemVvZih1OCkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGtmcmVlX2V4aXQ7CisJcGNmMjEyM19kZWxheV90cmVjKCk7CisKKwkvKiBTZWUgaWYgdGhlIGNvdW50ZXIgd2FzIGFjdHVhbGx5IHN0b3BwZWQgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfUkVBRCB8IFBDRjIxMjNfUkVHX0NUUkwxOworCWRldl9kYmcoJnNwaS0+ZGV2LCAiY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9mIFJUQyAoMHglMDJYKVxuIiwKKwkJCXR4YnVmWzBdKTsKKwlyZXQgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgdHhidWYsIDEgKiBzaXplb2YodTgpLAorCQkJCQlyeGJ1ZiwgMiAqIHNpemVvZih1OCkpOworCWRldl9kYmcoJnNwaS0+ZGV2LCAicmVjZWl2ZWQgZGF0YSBmcm9tIFJUQyAoMHglMDJYIDB4JTAyWClcbiIsCisJCQlyeGJ1ZlswXSwgcnhidWZbMV0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGtmcmVlX2V4aXQ7CisJcGNmMjEyM19kZWxheV90cmVjKCk7CisKKwlpZiAoIShyeGJ1ZlswXSAmIDB4MjApKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiY2hpcCBub3QgZm91bmRcbiIpOworCQlnb3RvIGtmcmVlX2V4aXQ7CisJfQorCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiY2hpcCBmb3VuZCwgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJzcGljbGsgJXUgS0h6LlxuIiwKKwkJCShzcGktPm1heF9zcGVlZF9oeiArIDUwMCkgLyAxMDAwKTsKKworCS8qIFN0YXJ0IHRoZSBjb3VudGVyICovCisJdHhidWZbMF0gPSBQQ0YyMTIzX1dSSVRFIHwgUENGMjEyM19SRUdfQ1RSTDE7CisJdHhidWZbMV0gPSAweDAwOworCXJldCA9IHNwaV93cml0ZShzcGksIHR4YnVmLCBzaXplb2YodHhidWYpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBrZnJlZV9leGl0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJLyogRmluYWxpemUgdGhlIGluaXRpYWxpemF0aW9uICovCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwY2YyMTIzX2RyaXZlci5kcml2ZXIubmFtZSwgJnNwaS0+ZGV2LAorCQkJJnBjZjIxMjNfcnRjX29wcywgVEhJU19NT0RVTEUpOworCisJaWYgKElTX0VSUihydGMpKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyLlxuIik7CisJCXJldCA9IFBUUl9FUlIocnRjKTsKKwkJZ290byBrZnJlZV9leGl0OworCX0KKworCXBkYXRhLT5ydGMgPSBydGM7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlzcHJpbnRmKHBkYXRhLT5yZWdzW2ldLm5hbWUsICIlMXgiLCBpKTsKKwkJcGRhdGEtPnJlZ3NbaV0uYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUjsKKwkJcGRhdGEtPnJlZ3NbaV0uYXR0ci5hdHRyLm5hbWUgPSBwZGF0YS0+cmVnc1tpXS5uYW1lOworCQlwZGF0YS0+cmVnc1tpXS5hdHRyLnNob3cgPSBwY2YyMTIzX3Nob3c7CisJCXBkYXRhLT5yZWdzW2ldLmF0dHIuc3RvcmUgPSBwY2YyMTIzX3N0b3JlOworCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNwaS0+ZGV2LCAmcGRhdGEtPnJlZ3NbaV0uYXR0cik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBzeXNmcyAlc1xuIiwKKwkJCQlwZGF0YS0+cmVnc1tpXS5uYW1lKTsKKwkJCWdvdG8gc3lzZnNfZXhpdDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitzeXNmc19leGl0OgorCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJnBkYXRhLT5yZWdzW2ldLmF0dHIpOworCitrZnJlZV9leGl0OgorCWtmcmVlKHBkYXRhKTsKKwlzcGktPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBjZjIxMjNfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHBjZjIxMjNfcGxhdF9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IGk7CisKKwlpZiAocGRhdGEpIHsKKwkJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBkYXRhLT5ydGM7CisKKwkJaWYgKHJ0YykKKwkJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWlmIChwZGF0YS0+cmVnc1tpXS5uYW1lWzBdKQorCQkJCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsCisJCQkJCQkgICAmcGRhdGEtPnJlZ3NbaV0uYXR0cik7CisJCWtmcmVlKHBkYXRhKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHBjZjIxMjNfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCQkubmFtZQk9ICJydGMtcGNmMjEyMyIsCisJCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gcGNmMjEyM19wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocGNmMjEyM19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGNmMjEyM19pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnBjZjIxMjNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBjZjIxMjNfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNmMjEyM19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJDaHJpcyBWZXJnZXMgPGNocmlzdkBjeWJlcnN3aXRjaGluZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5YUCBQQ0YyMTIzIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKworbW9kdWxlX2luaXQocGNmMjEyM19pbml0KTsKK21vZHVsZV9leGl0KHBjZjIxMjNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yOTcwMS5jCmluZGV4IDQyMDI4ZjIuLjliZWJhNDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYwpAQCAtMTc0LDMgKzE3NCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oInI5NzAxIHNwaSBSVEMgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSA8ZGFtbUBvcGVuc291cmNlLnNlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6cnRjLXI5NzAxIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYwppbmRleCBkZDFlMmJjLi4yMDk5MDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKQEAgLTI1MSwzICsyNTEsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWNvaCBSUzVDMzQ4IFJUQyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygic3BpOnJ0Yy1yczVjMzQ4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc3RtcDN4eHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1zdG1wM3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Y2UxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtc3RtcDN4eHguYwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIEZyZWVzY2FsZSBTVE1QMzdYWC9TVE1QMzc4WCBSZWFsIFRpbWUgQ2xvY2sgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFNpZ21hdGVsLCBJbmMuCisgKiBQZXRlciBIYXJ0bGV5LCA8cGV0ZXIuaGFydGxleUBzaWdtYXRlbC5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisKKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bWFjaC9zdG1wM3h4eC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ydGMuaD4KKworc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhIHsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXVuc2lnbmVkIGlycV9jb3VudDsKKwl2b2lkIF9faW9tZW0gKmlvOworCWludCBpcnFfYWxhcm0sIGlycV8xbXNlYzsKK307CisKK3N0YXRpYyB2b2lkIHN0bXAzeHh4X3dhaXRfdGltZShzdHJ1Y3Qgc3RtcDN4eHhfcnRjX2RhdGEgKnJ0Y19kYXRhKQoreworCS8qCisJICogVGhlIGRhdGFzaGVldCBkb2Vzbid0IHNheSB3aGljaCB3YXkgcm91bmQgdGhlCisJICogTkVXX1JFR1MvU1RBTEVfUkVHUyBiaXRmaWVsZHMgZ28uIEluIGZhY3QgaXQncyAweDE9UDAsCisJICogMHgyPVAxLCAuLiwgMHgyMD1QNSwgMHg0MD1BTEFSTSwgMHg4MD1TRUNPTkRTCisJICovCisJd2hpbGUgKF9fcmF3X3JlYWRsKHJ0Y19kYXRhLT5pbyArIEhXX1JUQ19TVEFUKSAmCisJCQlCRigweDgwLCBSVENfU1RBVF9TVEFMRV9SRUdTKSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKKy8qIFRpbWUgcmVhZC93cml0ZSAqLworc3RhdGljIGludCBzdG1wM3h4eF9ydGNfZ2V0dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqcnRjX3RtKQoreworCXN0cnVjdCBzdG1wM3h4eF9ydGNfZGF0YSAqcnRjX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXN0bXAzeHh4X3dhaXRfdGltZShydGNfZGF0YSk7CisJcnRjX3RpbWVfdG9fdG0oX19yYXdfcmVhZGwocnRjX2RhdGEtPmlvICsgSFdfUlRDX1NFQ09ORFMpLCBydGNfdG0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bXAzeHh4X3J0Y19zZXRfbW1zcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgdCkKK3sKKwlzdHJ1Y3Qgc3RtcDN4eHhfcnRjX2RhdGEgKnJ0Y19kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlfX3Jhd193cml0ZWwodCwgcnRjX2RhdGEtPmlvICsgSFdfUlRDX1NFQ09ORFMpOworCXN0bXAzeHh4X3dhaXRfdGltZShydGNfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGludGVycnVwdChzKSBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtcDN4eHhfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXZfaWQpOworCXUzMiBzdGF0dXM7CisJdTMyIGV2ZW50cyA9IDA7CisKKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChydGNfZGF0YS0+aW8gKyBIV19SVENfQ1RSTCkgJgorCQkJKEJNX1JUQ19DVFJMX0FMQVJNX0lSUSB8IEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRKTsKKworCWlmIChzdGF0dXMgJiBCTV9SVENfQ1RSTF9BTEFSTV9JUlEpIHsKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX0FMQVJNX0lSUSwKKwkJCQlydGNfZGF0YS0+aW8gKyBIV19SVENfQ1RSTCk7CisJCWV2ZW50cyB8PSBSVENfQUYgfCBSVENfSVJRRjsKKwl9CisKKwlpZiAoc3RhdHVzICYgQk1fUlRDX0NUUkxfT05FTVNFQ19JUlEpIHsKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRLAorCQkJCXJ0Y19kYXRhLT5pbyArIEhXX1JUQ19DVFJMKTsKKwkJaWYgKCsrcnRjX2RhdGEtPmlycV9jb3VudCAlIDEwMDAgPT0gMCkgeworCQkJZXZlbnRzIHw9IFJUQ19VRiB8IFJUQ19JUlFGOworCQkJcnRjX2RhdGEtPmlycV9jb3VudCA9IDA7CisJCX0KKwl9CisKKwlpZiAoZXZlbnRzKQorCQlydGNfdXBkYXRlX2lycShydGNfZGF0YS0+cnRjLCAxLCBldmVudHMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHN0bXAzeHh4X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3Qgc3RtcDN4eHhfcnRjX2RhdGEgKnJ0Y19kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdm9pZCBfX2lvbWVtICpwID0gcnRjX2RhdGEtPmlvICsgSFdfUlRDX1BFUlNJU1RFTlQwLAorCQkgICAgICpjdGwgPSBydGNfZGF0YS0+aW8gKyBIV19SVENfQ1RSTDsKKworCWlmIChlbmFibGVkKSB7CisJCXN0bXAzeHh4X3NldGwoQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX0VOIHwKKwkJCSAgICAgIEJNX1JUQ19QRVJTSVNURU5UMF9BTEFSTV9XQUtFX0VOLCBwKTsKKwkJc3RtcDN4eHhfc2V0bChCTV9SVENfQ1RSTF9BTEFSTV9JUlFfRU4sIGN0bCk7CisJfSBlbHNlIHsKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19QRVJTSVNURU5UMF9BTEFSTV9FTiB8CisJCQkgICAgICBCTV9SVENfUEVSU0lTVEVOVDBfQUxBUk1fV0FLRV9FTiwgcCk7CisJCXN0bXAzeHh4X2NsZWFybChCTV9SVENfQ1RSTF9BTEFSTV9JUlFfRU4sIGN0bCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bXAzeHh4X3VwZGF0ZV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGVuYWJsZWQpCisJCXN0bXAzeHh4X3NldGwoQk1fUlRDX0NUUkxfT05FTVNFQ19JUlFfRU4sCisJCQkJcnRjX2RhdGEtPmlvICsgSFdfUlRDX0NUUkwpOworCWVsc2UKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRX0VOLAorCQkJCXJ0Y19kYXRhLT5pbyArIEhXX1JUQ19DVFJMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG1wM3h4eF9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbG0pCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcnRjX3RpbWVfdG9fdG0oX19yYXdfcmVhZGwocnRjX2RhdGEtPmlvICsgSFdfUlRDX0FMQVJNKSwgJmFsbS0+dGltZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbG0pCit7CisJdW5zaWduZWQgbG9uZyB0OworCXN0cnVjdCBzdG1wM3h4eF9ydGNfZGF0YSAqcnRjX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJ0Y190bV90b190aW1lKCZhbG0tPnRpbWUsICZ0KTsKKwlfX3Jhd193cml0ZWwodCwgcnRjX2RhdGEtPmlvICsgSFdfUlRDX0FMQVJNKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHN0bXAzeHh4X3J0Y19vcHMgPSB7CisJLmFsYXJtX2lycV9lbmFibGUgPQorCQkJICBzdG1wM3h4eF9hbGFybV9pcnFfZW5hYmxlLAorCS51cGRhdGVfaXJxX2VuYWJsZSA9CisJCQkgIHN0bXAzeHh4X3VwZGF0ZV9pcnFfZW5hYmxlLAorCS5yZWFkX3RpbWUJPSBzdG1wM3h4eF9ydGNfZ2V0dGltZSwKKwkuc2V0X21tc3MJPSBzdG1wM3h4eF9ydGNfc2V0X21tc3MsCisJLnJlYWRfYWxhcm0JPSBzdG1wM3h4eF9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gc3RtcDN4eHhfcnRjX3NldF9hbGFybSwKK307CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzdG1wM3h4eF9ydGNfZGF0YSAqcnRjX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICghcnRjX2RhdGEpCisJCXJldHVybiAwOworCisJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRX0VOIHwgQk1fUlRDX0NUUkxfQUxBUk1fSVJRX0VOLAorCQkJcnRjX2RhdGEtPmlvICsgSFdfUlRDX0NUUkwpOworCWZyZWVfaXJxKHJ0Y19kYXRhLT5pcnFfYWxhcm0sICZwZGV2LT5kZXYpOworCWZyZWVfaXJxKHJ0Y19kYXRhLT5pcnFfMW1zZWMsICZwZGV2LT5kZXYpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGNfZGF0YS0+cnRjKTsKKwlpb3VubWFwKHJ0Y19kYXRhLT5pbyk7CisJa2ZyZWUocnRjX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGVycjsKKworCXJ0Y19kYXRhID0ga3phbGxvYyhzaXplb2YgKnJ0Y19kYXRhLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0Y19kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlc291cmNlXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJ0Y19kYXRhLT5pbyA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCWlmICghcnRjX2RhdGEtPmlvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlydGNfZGF0YS0+aXJxX2FsYXJtID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlydGNfZGF0YS0+aXJxXzFtc2VjID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKworCWlmICghKF9fcmF3X3JlYWRsKEhXX1JUQ19TVEFUICsgcnRjX2RhdGEtPmlvKSAmCisJCQlCTV9SVENfU1RBVF9SVENfUFJFU0VOVCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gZGV2aWNlIG9uYm9hcmRcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dF9yZW1hcDsKKwl9CisKKwlzdG1wM3h4eF9yZXNldF9ibG9jayhydGNfZGF0YS0+aW8sIHRydWUpOworCXN0bXAzeHh4X2NsZWFybChCTV9SVENfUEVSU0lTVEVOVDBfQUxBUk1fRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0VfRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0UsCisJCQlydGNfZGF0YS0+aW8gKyBIV19SVENfUEVSU0lTVEVOVDApOworCXJ0Y19kYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCisJCQkJJnN0bXAzeHh4X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0Y19kYXRhLT5ydGMpKSB7CisJCWVyciA9IFBUUl9FUlIocnRjX2RhdGEtPnJ0Yyk7CisJCWdvdG8gb3V0X3JlbWFwOworCX0KKworCXJ0Y19kYXRhLT5pcnFfY291bnQgPSAwOworCWVyciA9IHJlcXVlc3RfaXJxKHJ0Y19kYXRhLT5pcnFfYWxhcm0sIHN0bXAzeHh4X3J0Y19pbnRlcnJ1cHQsCisJCQlJUlFGX0RJU0FCTEVELCAiUlRDIGFsYXJtIiwgJnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY2xhaW0gSVJRJWRcbiIsCisJCQlydGNfZGF0YS0+aXJxX2FsYXJtKTsKKwkJZ290byBvdXRfaXJxX2FsYXJtOworCX0KKwllcnIgPSByZXF1ZXN0X2lycShydGNfZGF0YS0+aXJxXzFtc2VjLCBzdG1wM3h4eF9ydGNfaW50ZXJydXB0LAorCQkJSVJRRl9ESVNBQkxFRCwgIlJUQyB0aWNrIiwgJnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY2xhaW0gSVJRJWRcbiIsCisJCQlydGNfZGF0YS0+aXJxXzFtc2VjKTsKKwkJZ290byBvdXRfaXJxMTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGNfZGF0YSk7CisKKwlyZXR1cm4gMDsKKworb3V0X2lycTE6CisJZnJlZV9pcnEocnRjX2RhdGEtPmlycV9hbGFybSwgJnBkZXYtPmRldik7CitvdXRfaXJxX2FsYXJtOgorCXN0bXAzeHh4X2NsZWFybChCTV9SVENfQ1RSTF9PTkVNU0VDX0lSUV9FTiB8IEJNX1JUQ19DVFJMX0FMQVJNX0lSUV9FTiwKKwkJCXJ0Y19kYXRhLT5pbyArIEhXX1JUQ19DVFJMKTsKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjX2RhdGEtPnJ0Yyk7CitvdXRfcmVtYXA6CisJaW91bm1hcChydGNfZGF0YS0+aW8pOworb3V0X2ZyZWU6CisJa2ZyZWUocnRjX2RhdGEpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlzdG1wM3h4eF9yZXNldF9ibG9jayhydGNfZGF0YS0+aW8sIHRydWUpOworCXN0bXAzeHh4X2NsZWFybChCTV9SVENfUEVSU0lTVEVOVDBfQUxBUk1fRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0VfRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0UsCisJCQlydGNfZGF0YS0+aW8gKyBIV19SVENfUEVSU0lTVEVOVDApOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgc3RtcDN4eHhfcnRjX3N1c3BlbmQJTlVMTAorI2RlZmluZSBzdG1wM3h4eF9ydGNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdG1wM3h4eF9ydGNkcnYgPSB7CisJLnByb2JlCQk9IHN0bXAzeHh4X3J0Y19wcm9iZSwKKwkucmVtb3ZlCQk9IHN0bXAzeHh4X3J0Y19yZW1vdmUsCisJLnN1c3BlbmQJPSBzdG1wM3h4eF9ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHN0bXAzeHh4X3J0Y19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInN0bXAzeHh4LXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzdG1wM3h4eF9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN0bXAzeHh4X3J0Y2Rydik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdG1wM3h4eF9ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzdG1wM3h4eF9ydGNkcnYpOworfQorCittb2R1bGVfaW5pdChzdG1wM3h4eF9ydGNfaW5pdCk7Cittb2R1bGVfZXhpdChzdG1wM3h4eF9ydGNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU1RNUDN4eHggUlRDIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiZG1pdHJ5IHBlcnZ1c2hpbiA8ZHBlcnZ1c2hpbkBlbWJlZGRlZGFsbGV5LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKaW5kZXggMjUzMWNlNC4uN2RkMjNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKQEAgLTEwMiw2ICsxMDIsMTkgQEAKIAlyZXR1cm4gbjsKIH0KIAorc3RhdGljIHNzaXplX3QKK3J0Y19zeXNmc19zaG93X2hjdG9zeXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworI2lmZGVmIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UKKwlpZiAoc3RyY21wKGRldl9uYW1lKCZ0b19ydGNfZGV2aWNlKGRldiktPmRldiksCisJCSAgIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpID09IDApCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOworCWVsc2UKKyNlbmRpZgorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKK30KKwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHJ0Y19hdHRyc1tdID0gewogCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBydGNfc3lzZnNfc2hvd19uYW1lLCBOVUxMKSwKIAlfX0FUVFIoZGF0ZSwgU19JUlVHTywgcnRjX3N5c2ZzX3Nob3dfZGF0ZSwgTlVMTCksCkBAIC0xMDksNiArMTIyLDcgQEAKIAlfX0FUVFIoc2luY2VfZXBvY2gsIFNfSVJVR08sIHJ0Y19zeXNmc19zaG93X3NpbmNlX2Vwb2NoLCBOVUxMKSwKIAlfX0FUVFIobWF4X3VzZXJfZnJlcSwgU19JUlVHTyB8IFNfSVdVU1IsIHJ0Y19zeXNmc19zaG93X21heF91c2VyX2ZyZXEsCiAJCQlydGNfc3lzZnNfc2V0X21heF91c2VyX2ZyZXEpLAorCV9fQVRUUihoY3Rvc3lzLCBTX0lSVUdPLCBydGNfc3lzZnNfc2hvd19oY3Rvc3lzLCBOVUxMKSwKIAl7IH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCBlMTA5ZGE0Li5kYWQwNDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTIxNDYsNyArMjE0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucworY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zCiBkYXNkX2RldmljZV9vcGVyYXRpb25zID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBkYXNkX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYTFjZTU3My4uYWIzNTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtNzA2LDcgKzcwNiw3IEBACiAJICAgICAgIHNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKIAlFQkNBU0ModWlkLT5zZXJpYWwsIHNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKIAl1aWQtPnNzaWQgPSBwcml2YXRlLT5nbmVxLT5zdWJzeXN0ZW1JRDsKLQl1aWQtPnJlYWxfdW5pdF9hZGRyID0gcHJpdmF0ZS0+bmVkLT51bml0X2FkZHI7OworCXVpZC0+cmVhbF91bml0X2FkZHIgPSBwcml2YXRlLT5uZWQtPnVuaXRfYWRkcjsKIAlpZiAocHJpdmF0ZS0+c25lcSkgewogCQl1aWQtPnR5cGUgPSBwcml2YXRlLT5zbmVxLT5zdWFfZmxhZ3M7CiAJCWlmICh1aWQtPnR5cGUgPT0gVUFfQkFTRV9QQVZfQUxJQVMpCkBAIC05MzUsNiArOTM1LDcgQEAKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CisJbWVtc2V0KCZwcml2YXRlLT5mZWF0dXJlcywgMCwgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMpKTsKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEgLyogUFNGICovCSsgMSAvKiBSU1NEICovLAogCQkJCSAgIChzaXplb2Yoc3RydWN0IGRhc2RfcHNmX3Byc3NkX2RhdGEpICsKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMpKSwKQEAgLTk4Miw3ICs5ODMsOSBAQAogCQlmZWF0dXJlcyA9IChzdHJ1Y3QgZGFzZF9yc3NkX2ZlYXR1cmVzICopIChwcnNzZHAgKyAxKTsKIAkJbWVtY3B5KCZwcml2YXRlLT5mZWF0dXJlcywgZmVhdHVyZXMsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGRhc2RfcnNzZF9mZWF0dXJlcykpOwotCX0KKwl9IGVsc2UKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiUmVhZGluZyBkZXZpY2UgZmVhdHVyZSBjb2RlcyIKKwkJCSAiIGZhaWxlZCB3aXRoIHJjPSVkXG4iLCByYyk7CiAJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgY3FyLT5tZW1kZXYpOwogCXJldHVybiByYzsKIH0KQEAgLTExNDQsOSArMTE0Nyw3IEBACiAJfQogCiAJLyogUmVhZCBGZWF0dXJlIENvZGVzICovCi0JcmMgPSBkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwotCWlmIChyYykKLQkJZ290byBvdXRfZXJyMzsKKwlkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCBEQVNEX0VDS0RfTUFHSUMsCkBAIC0zMjQxLDkgKzMyNDIsNyBAQAogCX0KIAogCS8qIFJlYWQgRmVhdHVyZSBDb2RlcyAqLwotCXJjID0gZGFzZF9lY2tkX3JlYWRfZmVhdHVyZXMoZGV2aWNlKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2VycjsKKwlkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCiAJbWVtc2V0KCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgc2l6ZW9mKHByaXZhdGUtPnJkY19kYXRhKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IDVlNDdhMWUuLjhhZmQ5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC01NDAsNyArNTQwLDcgQEAKIGV4dGVybiBkZWJ1Z19pbmZvX3QgKmRhc2RfZGVidWdfYXJlYTsKIGV4dGVybiBzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCBkYXNkX2dsb2JhbF9wcm9maWxlOwogZXh0ZXJuIHVuc2lnbmVkIGludCBkYXNkX3Byb2ZpbGVfbGV2ZWw7Ci1leHRlcm4gc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRhc2RfZGV2aWNlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRhc2RfZGV2aWNlX29wZXJhdGlvbnM7CiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFzZF9wYWdlX2NhY2hlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYwppbmRleCBkMzQ2MTc2Li5mNzZmNGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyBjaGFyIGRjc3NibGtfc2VnbWVudHNbRENTU0JMS19QQVJNX0xFTl0gPSAiXDAiOwogCiBzdGF0aWMgaW50IGRjc3NibGtfbWFqb3I7Ci1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRjc3NibGtfZGV2b3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkY3NzYmxrX2Rldm9wcyA9IHsKIAkub3duZXIgICAJPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICAJPSBkY3NzYmxrX29wZW4sCiAJLnJlbGVhc2UgCT0gZGNzc2Jsa19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwppbmRleCBlZTYwNGU5Li4xMTZkMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeHByYW1fZGV2b3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeHByYW1fZGV2b3BzID0KIHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkuZ2V0Z2VvCT0geHByYW1fZ2V0Z2VvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDRjYjllNzAuLjY0ZjU3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTUwLDcgKzUwLDcgQEAKIHN0YXRpYyBpbnQgdGFwZWJsb2NrX21lZGl1bV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICopOwogc3RhdGljIGludCB0YXBlYmxvY2tfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICopOwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHRhcGVibG9ja19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB0YXBlYmxvY2tfZm9wcyA9IHsKIAkub3duZXIJCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkgPSB0YXBlYmxvY2tfb3BlbiwKIAkucmVsZWFzZQkgPSB0YXBlYmxvY2tfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDM5M2M3M2MuLjkxYzI1NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMzEsOCArMzEsNyBAQAogI2luY2x1ZGUgImNocC5oIgogCiBpbnQgY3NzX2luaXRfZG9uZSA9IDA7Ci1zdGF0aWMgaW50IG5lZWRfcmVwcm9iZSA9IDA7Ci1zdGF0aWMgaW50IG1heF9zc2lkID0gMDsKK2ludCBtYXhfc3NpZDsKIAogc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjaGFubmVsX3N1YnN5c3RlbXNbX19NQVhfQ1NTSUQgKyAxXTsKIApAQCAtMzE1LDEyICszMTQsMTggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAKLQlzY2ggPSBjc3NfYWxsb2Nfc3ViY2hhbm5lbChzY2hpZCk7Ci0JaWYgKElTX0VSUihzY2gpKQotCQlyZXR1cm4gUFRSX0VSUihzY2gpOworCWlmIChjaW9faXNfY29uc29sZShzY2hpZCkpCisJCXNjaCA9IGNpb19nZXRfY29uc29sZV9zdWJjaGFubmVsKCk7CisJZWxzZSB7CisJCXNjaCA9IGNzc19hbGxvY19zdWJjaGFubmVsKHNjaGlkKTsKKwkJaWYgKElTX0VSUihzY2gpKQorCQkJcmV0dXJuIFBUUl9FUlIoc2NoKTsKKwl9CiAJcmV0ID0gY3NzX3JlZ2lzdGVyX3N1YmNoYW5uZWwoc2NoKTsKLQlpZiAocmV0KQotCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7CisJaWYgKHJldCkgeworCQlpZiAoIWNpb19pc19jb25zb2xlKHNjaGlkKSkKKwkJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDA5LDEwICs0MTQsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBpZHNldCAqc2xvd19zdWJjaGFubmVsX3NldDsKIHN0YXRpYyBzcGlubG9ja190IHNsb3dfc3ViY2hhbm5lbF9sb2NrOworc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IGNzc19ldmFsX3dxOworc3RhdGljIGF0b21pY190IGNzc19ldmFsX3NjaGVkdWxlZDsKIAogc3RhdGljIGludCBfX2luaXQgc2xvd19zdWJjaGFubmVsX2luaXQodm9pZCkKIHsKIAlzcGluX2xvY2tfaW5pdCgmc2xvd19zdWJjaGFubmVsX2xvY2spOworCWF0b21pY19zZXQoJmNzc19ldmFsX3NjaGVkdWxlZCwgMCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY3NzX2V2YWxfd3EpOwogCXNsb3dfc3ViY2hhbm5lbF9zZXQgPSBpZHNldF9zY2hfbmV3KCk7CiAJaWYgKCFzbG93X3N1YmNoYW5uZWxfc2V0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgImNvdWxkIG5vdCBhbGxvY2F0ZSBzbG93IHN1YmNoYW5uZWwgc2V0XG4iKTsKQEAgLTQ2OCw5ICs0NzcsMTcgQEAKIAogc3RhdGljIHZvaWQgY3NzX3Nsb3dfcGF0aF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlDSU9fVFJBQ0VfRVZFTlQoNCwgInNsb3dwYXRoIik7CiAJZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoc2xvd19ldmFsX2tub3duX2ZuLCBzbG93X2V2YWxfdW5rbm93bl9mbiwKIAkJCQkgICBOVUxMKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoaWRzZXRfaXNfZW1wdHkoc2xvd19zdWJjaGFubmVsX3NldCkpIHsKKwkJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAwKTsKKwkJd2FrZV91cCgmY3NzX2V2YWxfd3EpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgREVDTEFSRV9XT1JLKHNsb3dfcGF0aF93b3JrLCBjc3Nfc2xvd19wYXRoX2Z1bmMpOwpAQCAtNDgyLDYgKzQ5OSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIAlpZHNldF9zY2hfYWRkKHNsb3dfc3ViY2hhbm5lbF9zZXQsIHNjaGlkKTsKKwlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwogCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiB9CkBAIC00OTIsODAgKzUxMCw1MyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfZmlsbChzbG93X3N1YmNoYW5uZWxfc2V0KTsKKwlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwogCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgX191bnNldF9yZWdpc3RlcmVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaWRzZXQgKnNldCA9IGRhdGE7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoZGV2KTsKKworCWlkc2V0X3NjaF9kZWwoc2V0LCBzY2gtPnNjaGlkKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjc3Nfc2NoZWR1bGVfZXZhbF9hbGxfdW5yZWcodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZHNldCAqdW5yZWdfc2V0OworCisJLyogRmluZCB1bnJlZ2lzdGVyZWQgc3ViY2hhbm5lbHMuICovCisJdW5yZWdfc2V0ID0gaWRzZXRfc2NoX25ldygpOworCWlmICghdW5yZWdfc2V0KSB7CisJCS8qIEZhbGxiYWNrLiAqLworCQljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKKwkJcmV0dXJuOworCX0KKwlpZHNldF9maWxsKHVucmVnX3NldCk7CisJYnVzX2Zvcl9lYWNoX2RldigmY3NzX2J1c190eXBlLCBOVUxMLCB1bnJlZ19zZXQsIF9fdW5zZXRfcmVnaXN0ZXJlZCk7CisJLyogQXBwbHkgdG8gc2xvd19zdWJjaGFubmVsX3NldC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZHNldF9hZGRfc2V0KHNsb3dfc3ViY2hhbm5lbF9zZXQsIHVucmVnX3NldCk7CisJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAxKTsKKwlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNsb3dfcGF0aF93b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlkc2V0X2ZyZWUodW5yZWdfc2V0KTsKK30KKwogdm9pZCBjc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKHZvaWQpCiB7CiAJZmx1c2hfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7CiB9CiAKLS8qIFJlcHJvYmUgc3ViY2hhbm5lbCBpZiB1bnJlZ2lzdGVyZWQuICovCi1zdGF0aWMgaW50IHJlcHJvYmVfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmV0OwotCi0JQ0lPX01TR19FVkVOVCg2LCAiY2lvOiByZXByb2JlIDAuJXguJTA0eFxuIiwKLQkJICAgICAgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vKTsKLQlpZiAobmVlZF9yZXByb2JlKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJldCA9IGNzc19wcm9iZV9kZXZpY2Uoc2NoaWQpOwotCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAwOgotCQlicmVhazsKLQljYXNlIC1FTlhJTzoKLQljYXNlIC1FTk9NRU06Ci0JY2FzZSAtRUlPOgotCQkvKiBUaGVzZSBzaG91bGQgYWJvcnQgbG9vcGluZyAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAwOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcHJvYmVfYWZ0ZXJfaWRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKLXsKLQkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KLQl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKLQkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7Ci0JaWYgKG5lZWRfcmVwcm9iZSkKLQkJY3NzX3NjaGVkdWxlX3JlcHJvYmUoKTsKLX0KLQotc3RhdGljIERFQ0xBUkVfV09SSyhyZXByb2JlX2lkbGVfd29yaywgcmVwcm9iZV9hZnRlcl9pZGxlKTsKLQotLyogV29yayBmdW5jdGlvbiB1c2VkIHRvIHJlcHJvYmUgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KLXN0YXRpYyB2b2lkIHJlcHJvYmVfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQotewotCWludCByZXQ7Ci0KLQlDSU9fTVNHX0VWRU5UKDQsICJyZXByb2JlIHN0YXJ0XG4iKTsKLQotCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLwotCWlmIChhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSAhPSAwKSB7Ci0JCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmcmVwcm9iZV9pZGxlX3dvcmspOwotCQlyZXR1cm47Ci0JfQotCW5lZWRfcmVwcm9iZSA9IDA7Ci0JcmV0ID0gZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoTlVMTCwgcmVwcm9iZV9zdWJjaGFubmVsLCBOVUxMKTsKLQotCUNJT19NU0dfRVZFTlQoNCwgInJlcHJvYmUgZG9uZSAocmM9JWQsIG5lZWRfcmVwcm9iZT0lZClcbiIsIHJldCwKLQkJICAgICAgbmVlZF9yZXByb2JlKTsKLX0KLQotc3RhdGljIERFQ0xBUkVfV09SSyhjc3NfcmVwcm9iZV93b3JrLCByZXByb2JlX2FsbCk7Ci0KIC8qIFNjaGVkdWxlIHJlcHJvYmluZyBvZiBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogdm9pZCBjc3Nfc2NoZWR1bGVfcmVwcm9iZSh2b2lkKQogewotCW5lZWRfcmVwcm9iZSA9IDE7Ci0JcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjc3NfcmVwcm9iZV93b3JrKTsKKwljc3Nfc2NoZWR1bGVfZXZhbF9hbGxfdW5yZWcoKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoY3NzX3NjaGVkdWxlX3JlcHJvYmUpOwogCiAvKgpAQCAtNjAxLDQ5ICs1OTIsNiBAQAogCWNzc19ldmFsdWF0ZV9zdWJjaGFubmVsKG1jaGtfc2NoaWQsIDApOwogfQogCi1zdGF0aWMgaW50IF9faW5pdAotX19pbml0X2NoYW5uZWxfc3Vic3lzdGVtKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0JaW50IHJldDsKLQotCWlmIChjaW9faXNfY29uc29sZShzY2hpZCkpCi0JCXNjaCA9IGNpb19nZXRfY29uc29sZV9zdWJjaGFubmVsKCk7Ci0JZWxzZSB7Ci0JCXNjaCA9IGNzc19hbGxvY19zdWJjaGFubmVsKHNjaGlkKTsKLQkJaWYgKElTX0VSUihzY2gpKQotCQkJcmV0ID0gUFRSX0VSUihzY2gpOwotCQllbHNlCi0JCQlyZXQgPSAwOwotCQlzd2l0Y2ggKHJldCkgewotCQljYXNlIDA6Ci0JCQlicmVhazsKLQkJY2FzZSAtRU5PTUVNOgotCQkJcGFuaWMoIk91dCBvZiBtZW1vcnkgaW4gaW5pdF9jaGFubmVsX3N1YnN5c3RlbVxuIik7Ci0JCS8qIC1FTlhJTzogbm8gbW9yZSBzdWJjaGFubmVscy4gKi8KLQkJY2FzZSAtRU5YSU86Ci0JCQlyZXR1cm4gcmV0OwotCQkvKiAtRUlPOiB0aGlzIHN1YmNoYW5uZWwgc2V0IG5vdCBzdXBwb3J0ZWQuICovCi0JCWNhc2UgLUVJTzoKLQkJCXJldHVybiByZXQ7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQkvKgotCSAqIFdlIHJlZ2lzdGVyIEFMTCB2YWxpZCBzdWJjaGFubmVscyBpbiBpb2luZm8sIGV2ZW4gdGhvc2UKLQkgKiB0aGF0IGhhdmUgYmVlbiBwcmVzZW50IGJlZm9yZSBpbml0X2NoYW5uZWxfc3Vic3lzdGVtLgotCSAqIFRoZXNlIHN1YmNoYW5uZWxzIGNhbid0IGhhdmUgYmVlbiByZWdpc3RlcmVkIHlldCAoa21hbGxvYwotCSAqIG5vdCB3b3JraW5nKSBzbyB3ZSBkbyBpdCBub3cuIFRoaXMgaXMgdHJ1ZSBlLmcuIGZvciB0aGUKLQkgKiBjb25zb2xlIHN1YmNoYW5uZWwuCi0JICovCi0JaWYgKGNzc19yZWdpc3Rlcl9zdWJjaGFubmVsKHNjaCkpIHsKLQkJaWYgKCFjaW9faXNfY29uc29sZShzY2hpZCkpCi0JCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQKIGNzc19nZW5lcmF0ZV9wZ2lkKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzLCB1MzIgdG9kX2hpZ2gpCiB7CkBAIC04NTQsMTkgKzgwMiwzMCBAQAogICogVGhlIHN0cnVjdCBzdWJjaGFubmVsJ3MgYXJlIGNyZWF0ZWQgZHVyaW5nIHByb2JpbmcgKGV4Y2VwdCBmb3IgdGhlCiAgKiBzdGF0aWMgY29uc29sZSBzdWJjaGFubmVsKS4KICAqLwotc3RhdGljIGludCBfX2luaXQKLWluaXRfY2hhbm5lbF9zdWJzeXN0ZW0gKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjc3NfYnVzX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0LCBpOwogCiAJcmV0ID0gY2hzY19kZXRlcm1pbmVfY3NzX2NoYXJhY3RlcmlzdGljcygpOwogCWlmIChyZXQgPT0gLUVOT01FTSkKLQkJZ290byBvdXQ7IC8qIE5vIG5lZWQgdG8gY29udGludWUuICovCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gY2hzY19hbGxvY19zZWlfYXJlYSgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJLyogVHJ5IHRvIGVuYWJsZSBNU1MuICovCisJcmV0ID0gY2hzY19lbmFibGVfZmFjaWxpdHkoQ0hTQ19TREFfT0NfTVNTKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDogLyogU3VjY2Vzcy4gKi8KKwkJbWF4X3NzaWQgPSBfX01BWF9TU0lEOworCQlicmVhazsKKwljYXNlIC1FTk9NRU06CisJCWdvdG8gb3V0OworCWRlZmF1bHQ6CisJCW1heF9zc2lkID0gMDsKKwl9CisKIAlyZXQgPSBzbG93X3N1YmNoYW5uZWxfaW5pdCgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtODc4LDE3ICs4MzcsNiBAQAogCWlmICgocmV0ID0gYnVzX3JlZ2lzdGVyKCZjc3NfYnVzX3R5cGUpKSkKIAkJZ290byBvdXQ7CiAKLQkvKiBUcnkgdG8gZW5hYmxlIE1TUy4gKi8KLQlyZXQgPSBjaHNjX2VuYWJsZV9mYWNpbGl0eShDSFNDX1NEQV9PQ19NU1MpOwotCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAwOiAvKiBTdWNjZXNzLiAqLwotCQltYXhfc3NpZCA9IF9fTUFYX1NTSUQ7Ci0JCWJyZWFrOwotCWNhc2UgLUVOT01FTToKLQkJZ290byBvdXRfYnVzOwotCWRlZmF1bHQ6Ci0JCW1heF9zc2lkID0gMDsKLQl9CiAJLyogU2V0dXAgY3NzIHN0cnVjdHVyZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDw9IF9fTUFYX0NTU0lEOyBpKyspIHsKIAkJc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3M7CkBAIC05MzQsNyArODgyLDYgQEAKIAkvKiBFbmFibGUgZGVmYXVsdCBpc2MgZm9yIEkvTyBzdWJjaGFubmVscy4gKi8KIAlpc2NfcmVnaXN0ZXIoSU9fU0NIX0lTQyk7CiAKLQlmb3JfZWFjaF9zdWJjaGFubmVsKF9faW5pdF9jaGFubmVsX3N1YnN5c3RlbSwgTlVMTCk7CiAJcmV0dXJuIDA7CiBvdXRfZmlsZToKIAlpZiAoY3NzX2Noc2NfY2hhcmFjdGVyaXN0aWNzLnNlY20pCkBAIC05NTUsMTcgKzkwMiw3NiBAQAogCQkJCQkgICAmZGV2X2F0dHJfY21fZW5hYmxlKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJmNzcy0+ZGV2aWNlKTsKIAl9Ci1vdXRfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZjc3NfYnVzX3R5cGUpOwogb3V0OgogCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWNoc2NfZnJlZV9zZWlfYXJlYSgpOwotCWtmcmVlKHNsb3dfc3ViY2hhbm5lbF9zZXQpOworCWlkc2V0X2ZyZWUoc2xvd19zdWJjaGFubmVsX3NldCk7CiAJcHJfYWxlcnQoIlRoZSBDU1MgZGV2aWNlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAiCiAJCSAiZXJybm89JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGNzc19idXNfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8PSBfX01BWF9DU1NJRDsgaSsrKSB7CisJCWNzcyA9IGNoYW5uZWxfc3Vic3lzdGVtc1tpXTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldik7CisJCWNzcy0+cHNldWRvX3N1YmNoYW5uZWwgPSBOVUxMOworCQlpZiAoY3NzX2Noc2NfY2hhcmFjdGVyaXN0aWNzLnNlY20pCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNzcy0+ZGV2aWNlLCAmZGV2X2F0dHJfY21fZW5hYmxlKTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmNzcy0+ZGV2aWNlKTsKKwl9CisJYnVzX3VucmVnaXN0ZXIoJmNzc19idXNfdHlwZSk7CisJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUyk7CisJY2hzY19mcmVlX3NlaV9hcmVhKCk7CisJaWRzZXRfZnJlZShzbG93X3N1YmNoYW5uZWxfc2V0KTsKKwlpc2NfdW5yZWdpc3RlcihJT19TQ0hfSVNDKTsKK30KKworc3RhdGljIGludCBfX2luaXQgY2hhbm5lbF9zdWJzeXN0ZW1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjc3NfYnVzX2luaXQoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaW9fc3ViY2hhbm5lbF9pbml0KCk7CisJaWYgKHJldCkKKwkJY3NzX2J1c19jbGVhbnVwKCk7CisKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKGNoYW5uZWxfc3Vic3lzdGVtX2luaXQpOworCitzdGF0aWMgaW50IGNzc19zZXR0bGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBjc3NfZHJpdmVyICpjc3NkcnYgPSB0b19jc3Nkcml2ZXIoZHJ2KTsKKworCWlmIChjc3NkcnYtPnNldHRsZSkKKwkJY3NzZHJ2LT5zZXR0bGUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhaXQgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBkZXZpY2VzIHRvIGZpbmlzaCwgdG8gbWFrZSBzdXJlIHdlIGFyZQorICogZG9uZSB3aXRoIG91ciBzZXR1cCBpZiB0aGUgc2VhcmNoIGZvciB0aGUgcm9vdCBkZXZpY2Ugc3RhcnRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBjaGFubmVsX3N1YnN5c3RlbV9pbml0X3N5bmModm9pZCkKK3sKKwkvKiBTdGFydCBpbml0aWFsIHN1YmNoYW5uZWwgZXZhbHVhdGlvbi4gKi8KKwljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKKwkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCisJd2FpdF9ldmVudChjc3NfZXZhbF93cSwgYXRvbWljX3JlYWQoJmNzc19ldmFsX3NjaGVkdWxlZCkgPT0gMCk7CisJLyogV2FpdCBmb3IgdGhlIHN1YmNoYW5uZWwgdHlwZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0byBmaW5pc2ggKi8KKwlyZXR1cm4gYnVzX2Zvcl9lYWNoX2RydigmY3NzX2J1c190eXBlLCBOVUxMLCBOVUxMLCBjc3Nfc2V0dGxlKTsKK30KK3N1YnN5c19pbml0Y2FsbF9zeW5jKGNoYW5uZWxfc3Vic3lzdGVtX2luaXRfc3luYyk7CisKIGludCBzY2hfaXNfcHNldWRvX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKQogewogCXJldHVybiBzY2ggPT0gdG9fY3NzKHNjaC0+ZGV2LnBhcmVudCktPnBzZXVkb19zdWJjaGFubmVsOwpAQCAtMTEzNSw3ICsxMTQxLDUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNzc19kcml2ZXJfdW5yZWdpc3Rlcik7CiAKLXN1YnN5c19pbml0Y2FsbChpbml0X2NoYW5uZWxfc3Vic3lzdGVtKTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogRVhQT1JUX1NZTUJPTChjc3NfYnVzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaCBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKaW5kZXggOTc2M2VlZS4uNjhkNmIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCkBAIC03NSw2ICs3NSw3IEBACiAgKiBAZnJlZXplOiBjYWxsYmFjayBmb3IgZnJlZXppbmcgZHVyaW5nIGhpYmVybmF0aW9uIHNuYXBzaG90dGluZwogICogQHRoYXc6IHVuZG8gd29yayBkb25lIGluIEBmcmVlemUKICAqIEByZXN0b3JlOiBjYWxsYmFjayBmb3IgcmVzdG9yaW5nIGFmdGVyIGhpYmVybmF0aW9uCisgKiBAc2V0dGxlOiB3YWl0IGZvciBhc3luY2hyb25vdXMgd29yayB0byBmaW5pc2gKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZXZpY2UgZHJpdmVyCiAgKi8KIHN0cnVjdCBjc3NfZHJpdmVyIHsKQEAgLTkyLDYgKzkzLDcgQEAKIAlpbnQgKCpmcmVlemUpKHN0cnVjdCBzdWJjaGFubmVsICopOwogCWludCAoKnRoYXcpIChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIAlpbnQgKCpyZXN0b3JlKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKKwl2b2lkICgqc2V0dGxlKSh2b2lkKTsKIAljb25zdCBjaGFyICpuYW1lOwogfTsKIApAQCAtMTA5LDYgKzExMSw3IEBACiBleHRlcm4gaW50IGNzc19wcm9iZV9kZXZpY2Uoc3RydWN0IHN1YmNoYW5uZWxfaWQpOwogZXh0ZXJuIHN0cnVjdCBzdWJjaGFubmVsICpnZXRfc3ViY2hhbm5lbF9ieV9zY2hpZChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCk7CiBleHRlcm4gaW50IGNzc19pbml0X2RvbmU7CitleHRlcm4gaW50IG1heF9zc2lkOwogaW50IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKGludCAoKmZuX2tub3duKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqLCB2b2lkICopLAogCQkJICAgICAgIGludCAoKmZuX3Vua25vd24pKHN0cnVjdCBzdWJjaGFubmVsX2lkLAogCQkJICAgICAgIHZvaWQgKiksIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggNjUyN2YzZi4uZjc4MGJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xMzEsNiArMTMxLDEwIEBACiBzdGF0aWMgaW50IGlvX3N1YmNoYW5uZWxfc2NoX2V2ZW50KHN0cnVjdCBzdWJjaGFubmVsICosIGludCk7CiBzdGF0aWMgaW50IGlvX3N1YmNoYW5uZWxfY2hwX2V2ZW50KHN0cnVjdCBzdWJjaGFubmVsICosIHN0cnVjdCBjaHBfbGluayAqLAogCQkJCSAgIGludCk7CitzdGF0aWMgdm9pZCByZWNvdmVyeV9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV93b3JrOword2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOworYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwogCiBzdGF0aWMgc3RydWN0IGNzc19kZXZpY2VfaWQgaW9fc3ViY2hhbm5lbF9pZHNbXSA9IHsKIAl7IC5tYXRjaF9mbGFncyA9IDB4MSwgLnR5cGUgPSBTVUJDSEFOTkVMX1RZUEVfSU8sIH0sCkBAIC0xNTEsNiArMTU1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlvX3N1YmNoYW5uZWxfc2V0dGxlKHZvaWQpCit7CisJd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCisJCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOworCWZsdXNoX3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOworfQorCiBzdGF0aWMgc3RydWN0IGNzc19kcml2ZXIgaW9fc3ViY2hhbm5lbF9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnN1YmNoYW5uZWxfdHlwZSA9IGlvX3N1YmNoYW5uZWxfaWRzLApAQCAtMTYyLDE2ICsxNzMsMTAgQEAKIAkucmVtb3ZlID0gaW9fc3ViY2hhbm5lbF9yZW1vdmUsCiAJLnNodXRkb3duID0gaW9fc3ViY2hhbm5lbF9zaHV0ZG93biwKIAkucHJlcGFyZSA9IGlvX3N1YmNoYW5uZWxfcHJlcGFyZSwKKwkuc2V0dGxlID0gaW9fc3ViY2hhbm5lbF9zZXR0bGUsCiB9OwogCi1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV93b3JrOwotd2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOwotYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwotCi1zdGF0aWMgdm9pZCByZWNvdmVyeV9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1pbml0X2Njd19idXNfdHlwZSAodm9pZCkKK2ludCBfX2luaXQgaW9fc3ViY2hhbm5lbF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtMTgxLDEwICsxODYsMTAgQEAKIAogCWNjd19kZXZpY2Vfd29yayA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjaW8iKTsKIAlpZiAoIWNjd19kZXZpY2Vfd29yaykKLQkJcmV0dXJuIC1FTk9NRU07IC8qIEZJWE1FOiBiZXR0ZXIgZXJybm8gPyAqLworCQlyZXR1cm4gLUVOT01FTTsKIAlzbG93X3BhdGhfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3Nsb3djcnciKTsKIAlpZiAoIXNsb3dfcGF0aF93cSkgewotCQlyZXQgPSAtRU5PTUVNOyAvKiBGSVhNRTogYmV0dGVyIGVycm5vID8gKi8KKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfZXJyOwogCX0KIAlpZiAoKHJldCA9IGJ1c19yZWdpc3RlciAoJmNjd19idXNfdHlwZSkpKQpAQCAtMTk0LDkgKzE5OSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZXJyOwogCi0Jd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCi0JCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOwotCWZsdXNoX3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOwogCXJldHVybiAwOwogb3V0X2VycjoKIAlpZiAoY2N3X2RldmljZV93b3JrKQpAQCAtMjA2LDE2ICsyMDgsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdAotY2xlYW51cF9jY3dfYnVzX3R5cGUgKHZvaWQpCi17Ci0JY3NzX2RyaXZlcl91bnJlZ2lzdGVyKCZpb19zdWJjaGFubmVsX2RyaXZlcik7Ci0JYnVzX3VucmVnaXN0ZXIoJmNjd19idXNfdHlwZSk7Ci0JZGVzdHJveV93b3JrcXVldWUoY2N3X2RldmljZV93b3JrKTsKLX0KLQotc3Vic3lzX2luaXRjYWxsKGluaXRfY2N3X2J1c190eXBlKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfY2N3X2J1c190eXBlKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiBkZXZpY2UgaGFuZGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IGUzOTc1MTAuLmVkMzlhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtNzQsNiArNzQsNyBAQAogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjY3dfZGV2aWNlX3dvcms7CiBleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOwogZXh0ZXJuIGF0b21pY190IGNjd19kZXZpY2VfaW5pdF9jb3VudDsKK2ludCBfX2luaXQgaW9fc3ViY2hhbm5lbF9pbml0KHZvaWQpOwogCiB2b2lkIGlvX3N1YmNoYW5uZWxfcmVjb2dfZG9uZShzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CiB2b2lkIGlvX3N1YmNoYW5uZWxfaW5pdF9jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmMKaW5kZXggY2Y4ZjI0YS4uNGQxMDk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9pZHNldC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuYwpAQCAtNzgsNyArNzgsNyBAQAogCiBzdHJ1Y3QgaWRzZXQgKmlkc2V0X3NjaF9uZXcodm9pZCkKIHsKLQlyZXR1cm4gaWRzZXRfbmV3KF9fTUFYX1NTSUQgKyAxLCBfX01BWF9TVUJDSEFOTkVMICsgMSk7CisJcmV0dXJuIGlkc2V0X25ldyhtYXhfc3NpZCArIDEsIF9fTUFYX1NVQkNIQU5ORUwgKyAxKTsKIH0KIAogdm9pZCBpZHNldF9zY2hfYWRkKHN0cnVjdCBpZHNldCAqc2V0LCBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCkKQEAgLTExMCwzICsxMTAsMjMgQEAKIAl9CiAJcmV0dXJuIHJjOwogfQorCitpbnQgaWRzZXRfaXNfZW1wdHkoc3RydWN0IGlkc2V0ICpzZXQpCit7CisJaW50IGJpdG51bTsKKworCWJpdG51bSA9IGZpbmRfZmlyc3RfYml0KHNldC0+Yml0bWFwLCBzZXQtPm51bV9zc2lkICogc2V0LT5udW1faWQpOworCWlmIChiaXRudW0gPj0gc2V0LT5udW1fc3NpZCAqIHNldC0+bnVtX2lkKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpZHNldF9hZGRfc2V0KHN0cnVjdCBpZHNldCAqdG8sIHN0cnVjdCBpZHNldCAqZnJvbSkKK3sKKwl1bnNpZ25lZCBsb25nIGksIGxlbjsKKworCWxlbiA9IG1pbihfX0JJVE9QU19XT1JEUyh0by0+bnVtX3NzaWQgKiB0by0+bnVtX2lkKSwKKwkJICBfX0JJVE9QU19XT1JEUyhmcm9tLT5udW1fc3NpZCAqIGZyb20tPm51bV9pZCkpOworCWZvciAoaSA9IDA7IGkgPCBsZW4gOyBpKyspCisJCXRvLT5iaXRtYXBbaV0gfD0gZnJvbS0+Yml0bWFwW2ldOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9pZHNldC5oIGIvZHJpdmVycy9zMzkwL2Npby9pZHNldC5oCmluZGV4IDUyODA2NWMuLjc1NDNkYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmgKQEAgLTIxLDUgKzIxLDcgQEAKIHZvaWQgaWRzZXRfc2NoX2RlbChzdHJ1Y3QgaWRzZXQgKnNldCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgaWQpOwogaW50IGlkc2V0X3NjaF9jb250YWlucyhzdHJ1Y3QgaWRzZXQgKnNldCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgaWQpOwogaW50IGlkc2V0X3NjaF9nZXRfZmlyc3Qoc3RydWN0IGlkc2V0ICpzZXQsIHN0cnVjdCBzdWJjaGFubmVsX2lkICppZCk7CitpbnQgaWRzZXRfaXNfZW1wdHkoc3RydWN0IGlkc2V0ICpzZXQpOwordm9pZCBpZHNldF9hZGRfc2V0KHN0cnVjdCBpZHNldCAqdG8sIHN0cnVjdCBpZHNldCAqZnJvbSk7CiAKICNlbmRpZiAvKiBTMzkwX0lEU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDlhZWY0MDIuLjRiZTZlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJaWYgKCghcS0+aXNfaW5wdXRfcSAmJgogCSAgICAocS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMCkpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLm91dGJvdW5kX3RhcmdldF9mdWxsKTsKLQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIk9VVEZVTEwgRlRDOiUzZCIsCisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJPVVRGVUxMIEZUQzolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQxOCw3ICs0MTgsNyBAQAogewogCWludCBuZXc7CiAKLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gcHJpbTogJTNkIiwgY291bnQpOworCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJpbiBwcmltOiAlMDJ4IiwgY291bnQpOwogCiAJLyogZm9yIFFFQlNNIHRoZSBBQ0sgd2FzIGFscmVhZHkgc2V0IGJ5IEVRQlMgKi8KIAlpZiAoaXNfcWVic20ocSkpIHsKQEAgLTQ1NSw2ICs0NTUsOCBAQAogCWNvdW50LS07CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuOworCS8qIG5lZWQgdG8gY2hhbmdlIEFMTCBidWZmZXJzIHRvIGdldCBtb3JlIGludGVycnVwdHMgKi8KKwlzZXRfYnVmX3N0YXRlcyhxLCBxLT5maXJzdF90b19jaGVjaywgU0xTQl9QX0lOUFVUX05PVF9JTklULCBjb3VudCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCkBAIC01NDUsNyArNTQ3LDcgQEAKIAkgKiBoYXMgKHByb2JhYmx5KSBub3QgbW92ZWQgKHNlZSBxZGlvX2luYm91bmRfcHJvY2Vzc2luZykuCiAJICovCiAJaWYgKGdldF91c2VjcygpID4gcS0+dS5pbi50aW1lc3RhbXAgKyBRRElPX0lOUFVUX1RIUkVTSE9MRCkgewotCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gZG9uZTolM2QiLAorCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gZG9uZTolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCkBAIC01NjUsMTEgKzU2NywxMCBAQAogCiAJaWYgKHEtPmlzX2lucHV0X3EpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcik7Ci0JCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOwotCX0gZWxzZSB7Ci0JCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IG5yOiUxZCIsIHEtPm5yKTsKLQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKLQl9CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolMDJ4IGM6JTAyeCIsIHN0YXJ0LCBjb3VudCk7CisJfSBlbHNlCisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IHM6JTAyeCBjOiUwMngiLAorCQkJICAgICAgc3RhcnQsIGNvdW50KTsKIAogCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKIAkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwpAQCAtNjMzLDcgKzYzNCw3IEBACiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgU0xTQl9QX09VVFBVVF9FTVBUWToKIAkJLyogdGhlIGFkYXB0ZXIgZ290IGl0ICovCi0JCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJvdXQgZW1wdHk6JTFkICUzZCIsIHEtPm5yLCBjb3VudCk7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJvdXQgZW1wdHk6JTFkICUwMngiLCBxLT5uciwgY291bnQpOwogCiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwpAQCAtMTQ4MSwxMCArMTQ4Miw5IEBACiAJZ2V0X2J1Zl9zdGF0ZShxLCBwcmV2X2J1ZihidWZuciksICZzdGF0ZSwgMCk7CiAJaWYgKHN0YXRlICE9IFNMU0JfQ1VfT1VUUFVUX1BSSU1FRCkKIAkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKLQllbHNlIHsKLQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImZhc3QtcmVxIik7CisJZWxzZQogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZmFzdF9yZXF1ZXVlKTsKLQl9CisKIG91dDoKIAl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAlyZXR1cm4gcmM7CkBAIC0xNTEwLDEyICsxNTEwLDggQEAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGNhbGxmbGFncyAmIFFESU9fRkxBR19TWU5DX0lOUFVUKQotCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBpcnFfcHRyLCAiZG9RRElPIGlucHV0Iik7Ci0JZWxzZQotCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBpcnFfcHRyLCAiZG9RRElPIG91dHB1dCIpOwotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGlycV9wdHIsICJxOiUxZCBmbGFnOiU0eCIsIHFfbnIsIGNhbGxmbGFncyk7Ci0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgaXJxX3B0ciwgImJ1ZjolMmQgY250OiUzZCIsIGJ1Zm5yLCBjb3VudCk7CisJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgaXJxX3B0ciwKKwkJICAgICAgImRvJTAyeCBiOiUwMnggYzolMDJ4IiwgY2FsbGZsYWdzLCBidWZuciwgY291bnQpOwogCiAJaWYgKGlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX0FDVElWRSkKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCmluZGV4IDA5MGIzMmEuLjEyOTQ4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpAQCAtNjAsNiArNjAsNyBAQAogc3RhdGljIHZvaWQgYXBfaW50ZXJydXB0X2hhbmRsZXIodm9pZCAqdW51c2VkMSwgdm9pZCAqdW51c2VkMik7CiBzdGF0aWMgdm9pZCBhcF9yZXNldChzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOwogc3RhdGljIHZvaWQgYXBfY29uZmlnX3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpOworc3RhdGljIGludCBhcF9zZWxlY3RfZG9tYWluKHZvaWQpOwogCiAvKgogICogTW9kdWxlIGRlc2NyaXB0aW9uLgpAQCAtMTA5LDYgKzExMCwxMCBAQAogCiAvKiBTdXNwZW5kIGZsYWcgKi8KIHN0YXRpYyBpbnQgYXBfc3VzcGVuZF9mbGFnOworLyogRmxhZyB0byBjaGVjayBpZiBkb21haW4gd2FzIHNldCB0aHJvdWdoIG1vZHVsZSBwYXJhbWV0ZXIgZG9tYWluPS4gVGhpcyBpcworICogaW1wb3J0YW50IHdoZW4gc3Vwc2VuZCBhbmQgcmVzdW1lIGlzIGRvbmUgaW4gYSB6L1ZNIGVudmlyb25tZW50IHdoZXJlIHRoZQorICogZG9tYWluIG1pZ2h0IGNoYW5nZS4gKi8KK3N0YXRpYyBpbnQgdXNlcl9zZXRfZG9tYWluID0gMDsKIHN0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgYXBfYnVzX3R5cGU7CiAKIC8qKgpAQCAtNjQzLDYgKzY0OCw3IEBACiAJCQlkZXN0cm95X3dvcmtxdWV1ZShhcF93b3JrX3F1ZXVlKTsKIAkJCWFwX3dvcmtfcXVldWUgPSBOVUxMOwogCQl9CisKIAkJdGFza2xldF9kaXNhYmxlKCZhcF90YXNrbGV0KTsKIAl9CiAJLyogUG9sbCBvbiB0aGUgZGV2aWNlIHVudGlsIGFsbCByZXF1ZXN0cyBhcmUgZmluaXNoZWQuICovCkBAIC02NTMsNyArNjU5LDEwIEBACiAJCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOwogCX0gd2hpbGUgKChmbGFncyAmIDEpIHx8IChmbGFncyAmIDIpKTsKIAotCWFwX2RldmljZV9yZW1vdmUoZGV2KTsKKwlzcGluX2xvY2tfYmgoJmFwX2Rldi0+bG9jayk7CisJYXBfZGV2LT51bnJlZ2lzdGVyZWQgPSAxOworCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2NiwxMSArNjc1LDEwIEBACiAJCWFwX3N1c3BlbmRfZmxhZyA9IDA7CiAJCWlmICghYXBfaW50ZXJydXB0c19hdmFpbGFibGUoKSkKIAkJCWFwX2ludGVycnVwdF9pbmRpY2F0b3IgPSBOVUxMOwotCQlhcF9kZXZpY2VfcHJvYmUoZGV2KTsKLQkJYXBfcmVzZXQoYXBfZGV2KTsKLQkJc2V0dXBfdGltZXIoJmFwX2Rldi0+dGltZW91dCwgYXBfcmVxdWVzdF90aW1lb3V0LAotCQkJICAgICh1bnNpZ25lZCBsb25nKSBhcF9kZXYpOwotCQlhcF9zY2FuX2J1cyhOVUxMKTsKKwkJaWYgKCF1c2VyX3NldF9kb21haW4pIHsKKwkJCWFwX2RvbWFpbl9pbmRleCA9IC0xOworCQkJYXBfc2VsZWN0X2RvbWFpbigpOworCQl9CiAJCWluaXRfdGltZXIoJmFwX2NvbmZpZ190aW1lcik7CiAJCWFwX2NvbmZpZ190aW1lci5mdW5jdGlvbiA9IGFwX2NvbmZpZ190aW1lb3V0OwogCQlhcF9jb25maWdfdGltZXIuZGF0YSA9IDA7CkBAIC02ODYsMTIgKzY5NCwxNCBAQAogCQkJdGFza2xldF9zY2hlZHVsZSgmYXBfdGFza2xldCk7CiAJCWlmIChhcF90aHJlYWRfZmxhZykKIAkJCXJjID0gYXBfcG9sbF90aHJlYWRfc3RhcnQoKTsKLQl9IGVsc2UgewotCQlhcF9kZXZpY2VfcHJvYmUoZGV2KTsKLQkJYXBfcmVzZXQoYXBfZGV2KTsKLQkJc2V0dXBfdGltZXIoJmFwX2Rldi0+dGltZW91dCwgYXBfcmVxdWVzdF90aW1lb3V0LAotCQkJICAgICh1bnNpZ25lZCBsb25nKSBhcF9kZXYpOwogCX0KKwlpZiAoQVBfUUlEX1FVRVVFKGFwX2Rldi0+cWlkKSAhPSBhcF9kb21haW5faW5kZXgpIHsKKwkJc3Bpbl9sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworCQlhcF9kZXYtPnFpZCA9IEFQX01LUUlEKEFQX1FJRF9ERVZJQ0UoYXBfZGV2LT5xaWQpLAorCQkJCSAgICAgICBhcF9kb21haW5faW5kZXgpOworCQlzcGluX3VubG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKKwl9CisJcXVldWVfd29yayhhcF93b3JrX3F1ZXVlLCAmYXBfY29uZmlnX3dvcmspOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTA3OSw2ICsxMDg5LDggQEAKIAkJCXNwaW5fbG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKIAkJCWlmIChyYyB8fCBhcF9kZXYtPnVucmVnaXN0ZXJlZCkgewogCQkJCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworCQkJCWlmIChhcF9kZXYtPnVucmVnaXN0ZXJlZCkKKwkJCQkJaS0tOwogCQkJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJCQkJcHV0X2RldmljZShkZXYpOwogCQkJCWNvbnRpbnVlOwpAQCAtMTU4Niw2ICsxNTk4LDEyIEBACiAJCQkgICBhcF9kb21haW5faW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJLyogSW4gcmVzdW1lIGNhbGxiYWNrIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgdXNlciBoYWQgc2V0IHRoZSBkb21haW4uCisJICogSWYgc28sIHdlIGNhbiBub3QganVzdCByZXNldCBpdC4KKwkgKi8KKwlpZiAoYXBfZG9tYWluX2luZGV4ID49IDApCisJCXVzZXJfc2V0X2RvbWFpbiA9IDE7CisKIAlpZiAoYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpICE9IDApIHsKIAkJcHJfd2FybmluZygiVGhlIGhhcmR3YXJlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0ICIKIAkJCSAgICJBUCBpbnN0cnVjdGlvbnNcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCBhNGIyYzU3Li5jODRlYWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMjExMyw3ICsyMTEzLDcgQEAKIAlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAKICAgICAgICAgaWYgKGNvdW50ID49IElGTkFNU0laKQotICAgICAgICAgICAgICAgIGNvdW50ID0gSUZOQU1TSVogLSAxOzsKKyAgICAgICAgICAgICAgICBjb3VudCA9IElGTkFNU0laIC0gMTsKIAogCWZvciAoaSA9IDAsIHAgPSBidWY7IGkgPCBjb3VudCAmJiAqcDsgaSsrLCBwKyspIHsKIAkJaWYgKCpwID09ICdcbicgfHwgKnAgPT0gJyAnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCAzZmY3MjZhLi4wZTFhMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJaWYgKHVubGlrZWx5KChzdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkgfHwKIAkJICAgICAhKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSkpIHsKIAkJemZjcF9zY3NpX2NvbW1hbmRfZmFpbChzY3BudCwgRElEX0VSUk9SKTsKLQkJcmV0dXJuIDA7OworCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXQgPSB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2sodW5pdCwgc2NwbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jCmluZGV4IDZkNDY1MTYuLjg2OWEzMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UganNmX2RldiA9IHsgSlNGX01JTk9SLCAianNmbGFzaCIsICZqc2ZfZm9wcyB9OwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGpzZmRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMganNmZF9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwppbmRleCBlNmYyYmI3Li44ZGZiNTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwpAQCAtNTIyMyw3ICs1MjIzLDcgQEAKIAogCS8qCiAJICogU2V0dXAgdGhlIGFsbG93ZWQgU0NTSSBTZXF1ZW5jZXMgYmFzZWQgb24gb3BlcmF0aW9uYWwgbW9kZS4KLQkgKiBJZiB3ZSBhcmUgYSB0YXJnZXQsIHdlJ2xsIGVuYWxiZSBzZWxlY3QgaW4gb3BlcmF0aW9ucyBvbmNlCisJICogSWYgd2UgYXJlIGEgdGFyZ2V0LCB3ZSdsbCBlbmFibGUgc2VsZWN0IGluIG9wZXJhdGlvbnMgb25jZQogCSAqIHdlJ3ZlIGhhZCBhIGx1biBlbmFibGVkLgogCSAqLwogCXNjc2lzZXFfdGVtcGxhdGUgPSBFTlNFTE98RU5BVVRPQVROT3xFTkFVVE9BVE5QOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCmluZGV4IDkwNmNlZjUuLjQxZTFiMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKQEAgLTEzNDAsNyArMTM0MCw3IEBACiAJcmVzcF9oZHItPm9wY29kZSA9IGxvZ2luLT5vcF9jb2RlOwogCXJlc3BfaGRyLT5mbGFncyA9IGxvZ2luLT5yZXNwb25zZV9mbGFnczsKIAlyZXNwX2hkci0+bWF4X3ZlcnNpb24gPSBsb2dpbi0+dmVyc2lvbl9tYXg7Ci0JcmVzcF9oZHItPmFjdGl2ZV92ZXJzaW9uID0gbG9naW4tPnZlcnNpb25fYWN0aXZlOzsKKwlyZXNwX2hkci0+YWN0aXZlX3ZlcnNpb24gPSBsb2dpbi0+dmVyc2lvbl9hY3RpdmU7CiAJcmVzcF9oZHItPmhsZW5ndGggPSAwOwogCiAJaHRvbjI0KHJlc3BfaGRyLT5kbGVuZ3RoLCBsb2dpbi0+ZGF0YV9sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCmluZGV4IDYyYTRjMjAuLjExYWU1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCmluZGV4IDk5Mjg3MDQuLmQ5YjBlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vdmlvLmg+Ci0jaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCmluZGV4IDlkZjdlZDMuLjlhMWJkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAJCXZwb3J0LT5jdF9mbGFncyAmPSB+RkNfQ1RfUkZGX0lEOwogCQlDdFJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwID0KIAkJICAgIGJlMTZfdG9fY3B1KFNMSV9DVE5TX1JGRl9JRCk7Ci0JCUN0UmVxLT51bi5yZmYuUG9ydElkID0gY3B1X3RvX2JlMzIodnBvcnQtPmZjX215RElEKTs7CisJCUN0UmVxLT51bi5yZmYuUG9ydElkID0gY3B1X3RvX2JlMzIodnBvcnQtPmZjX215RElEKTsKIAkJQ3RSZXEtPnVuLnJmZi5mYml0cyA9IEZDNF9GRUFUVVJFX0lOSVQ7CiAJCUN0UmVxLT51bi5yZmYudHlwZV9jb2RlID0gRkNfRkNQX0RBVEE7CiAJCWNtcGwgPSBscGZjX2NtcGxfY3RfY21kX3JmZl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCA3ZGMzZDE4Li5hMzlhZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC03MTgsNyArNzE4LDcgQEAKICAqIG1lZ2FzYXNfYnVpbGRfbGRpbyAtCVByZXBhcmVzIElPcyB0byBsb2dpY2FsIGRldmljZXMKICAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQogICogQHNjcDoJCVNDU0kgY29tbWFuZAotICogQGNtZDoJCUNvbW1hbmQgdG8gdG8gYmUgcHJlcGFyZWQKKyAqIEBjbWQ6CQlDb21tYW5kIHRvIGJlIHByZXBhcmVkCiAgKgogICogRnJhbWVzIChhbmQgYWNjb21wYW55aW5nIFNHTHMpIGZvciByZWd1bGFyIFNDU0kgSU9zIHVzZSB0aGlzIGZ1bmN0aW9uLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCmluZGV4IDQwZTNjYWYuLjgzYzhiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCkBAIC0xNDIyLDcgKzE0MjIsNyBAQAogLyoqCiAgKiBxbGE0eHh4X2RlbF9mcm9tX2FjdGl2ZV9hcnJheSAtIHJldHVybnMgYW4gYWN0aXZlIHNyYgogICogQGhhOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCi0gKiBAaW5kZXg6IGluZGV4IGludG8gdG8gdGhlIGFjdGl2ZV9hcnJheQorICogQGluZGV4OiBpbmRleCBpbnRvIHRoZSBhY3RpdmVfYXJyYXkKICAqCiAgKiBUaGlzIHJvdXRpbmUgcmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgc3JiIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgKICAqKi8KQEAgLTE1MDAsNyArMTUwMCw3IEBACiAKIC8qKgogICogcWxhNHh4eF9laF93YWl0X2Zvcl9jb21tYW5kcyAtIHdhaXQgZm9yIGFjdGl2ZSBjbWRzIHRvIGZpbmlzaC4KLSAqIEBoYTogcG9pbnRlciB0byB0byBIQkEKKyAqIEBoYTogcG9pbnRlciB0byBIQkEKICAqIEB0OiB0YXJnZXQgaWQKICAqIEBsOiBsdW4gaWQKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IGE4OWM0MjEuLjhkZDk2ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC05NTYsNyArOTU2LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHNkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHNkX2ZvcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gc2Rfb3BlbiwKIAkucmVsZWFzZQkJPSBzZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA0OTY4YzRjLi44NDhiNTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMjIzMyw3ICsyMjMzLDcgQEAKIAkub3BlbiA9IHNnX3Byb2Nfb3Blbl9kZXYsCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07Ci1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBkZXZfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IGRldl9zZXFfbmV4dCwKIAkuc3RvcCAgPSBkZXZfc2VxX3N0b3AsCkBAIC0yMjQ2LDcgKzIyNDYsNyBAQAogCS5vcGVuID0gc2dfcHJvY19vcGVuX2RldnN0cnMsCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07Ci1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldnN0cnNfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGV2c3Ryc19zZXFfb3BzID0gewogCS5zdGFydCA9IGRldl9zZXFfc3RhcnQsCiAJLm5leHQgID0gZGV2X3NlcV9uZXh0LAogCS5zdG9wICA9IGRldl9zZXFfc3RvcCwKQEAgLTIyNTksNyArMjI1OSw3IEBACiAJLm9wZW4gPSBzZ19wcm9jX29wZW5fZGVidWcsCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07Ci1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRlYnVnX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRlYnVnX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gZGV2X3NlcV9zdGFydCwKIAkubmV4dCAgPSBkZXZfc2VxX25leHQsCiAJLnN0b3AgID0gZGV2X3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCBjY2UwZmU0Li5lYjYxZjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNTI1LDcgKzUyNSw3IEBACiAJcmV0dXJuIGNkcm9tX21lZGlhX2NoYW5nZWQoJmNkLT5jZGkpOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHNyX2Jkb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgc3JfYmRvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBzcl9ibG9ja19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggY2I2ZDg1ZC4uMWUzZDE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2VyaWFsMjEyODVfcnhfY2hhcnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIHJ4cywgbWF4X2NvdW50ID0gMjU2OwogCiAJc3RhdHVzID0gKkNTUl9VQVJURkxHOwpAQCAtMTI0LDcgKzEyNCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2VyaWFsMjEyODVfdHhfY2hhcnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCWludCBjb3VudCA9IDI1NjsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKQEAgLTIzNSw4ICsyMzUsOCBAQAogCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsgCiAJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CiAKLQlpZiAocG9ydC0+aW5mbyAmJiBwb3J0LT5pbmZvLT5wb3J0LnR0eSkgewotCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJaWYgKHBvcnQtPnN0YXRlICYmIHBvcnQtPnN0YXRlLT5wb3J0LnR0eSkgeworCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCQl1bnNpZ25lZCBpbnQgYiA9IHBvcnQtPnVhcnRjbGsgLyAoMTYgKiBxdW90KTsKIAkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiLCBiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggZmI4NjdhOS4uMjIwOTYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTM4Miw3ICsxMzgyLDcgQEAKIHN0YXRpYyB2b2lkCiByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIHVuc2lnbmVkIGludCAqc3RhdHVzKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGNoYXIgY2gsIGxzciA9ICpzdGF0dXM7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKIAljaGFyIGZsYWc7CkBAIC0xNDU3LDcgKzE0NTcsNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAodXAtPnBvcnQueF9jaGFyKSB7CkBAIC0xNTAwLDcgKzE1MDAsNyBAQAogCXN0YXR1cyB8PSB1cC0+bXNyX3NhdmVkX2ZsYWdzOwogCXVwLT5tc3Jfc2F2ZWRfZmxhZ3MgPSAwOwogCWlmIChzdGF0dXMgJiBVQVJUX01TUl9BTllfREVMVEEgJiYgdXAtPmllciAmIFVBUlRfSUVSX01TSSAmJgotCSAgICB1cC0+cG9ydC5pbmZvICE9IE5VTEwpIHsKKwkgICAgdXAtPnBvcnQuc3RhdGUgIT0gTlVMTCkgewogCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfVEVSSSkKIAkJCXVwLT5wb3J0Lmljb3VudC5ybmcrKzsKIAkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0REU1IpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQAogCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENUUykKIAkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVwLT5wb3J0LCBzdGF0dXMgJiBVQVJUX01TUl9DVFMpOwogCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnVwLT5saXN0KTsKIAkJaS0+aGVhZCA9ICZ1cC0+bGlzdDsKIAkJc3Bpbl91bmxvY2tfaXJxKCZpLT5sb2NrKTsKLQorCQlpcnFfZmxhZ3MgfD0gdXAtPnBvcnQuaXJxZmxhZ3M7CiAJCXJldCA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSwgc2VyaWFsODI1MF9pbnRlcnJ1cHQsCiAJCQkJICBpcnFfZmxhZ3MsICJzZXJpYWwiLCBpKTsKIAkJaWYgKHJldCA8IDApCkBAIC0xNzY0LDcgKzE3NjQsNyBAQAogCXVwLT5sc3Jfc2F2ZWRfZmxhZ3MgfD0gbHNyICYgTFNSX1NBVkVfRkxBR1M7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCWlmICgoaWlyICYgVUFSVF9JSVJfTk9fSU5UKSAmJiAodXAtPmllciAmIFVBUlRfSUVSX1RIUkkpICYmCi0JICAgICghdWFydF9jaXJjX2VtcHR5KCZ1cC0+cG9ydC5pbmZvLT54bWl0KSB8fCB1cC0+cG9ydC54X2NoYXIpICYmCisJICAgICghdWFydF9jaXJjX2VtcHR5KCZ1cC0+cG9ydC5zdGF0ZS0+eG1pdCkgfHwgdXAtPnBvcnQueF9jaGFyKSAmJgogCSAgICAobHNyICYgVUFSVF9MU1JfVEhSRSkpIHsKIAkJaWlyICY9IH4oVUFSVF9JSVJfSUQgfCBVQVJUX0lJUl9OT19JTlQpOwogCQlpaXIgfD0gVUFSVF9JSVJfVEhSSTsKQEAgLTIwMjYsNyArMjAyNiw3IEBACiAJCSAqIGFsbG93IHJlZ2lzdGVyIGNoYW5nZXMgdG8gYmVjb21lIHZpc2libGUuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwotCQlpZiAodXAtPnBvcnQuZmxhZ3MgJiBVUEZfU0hBUkVfSVJRKQorCQlpZiAodXAtPnBvcnQuaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkKIAkJCWRpc2FibGVfaXJxX25vc3luYyh1cC0+cG9ydC5pcnEpOwogCiAJCXdhaXRfZm9yX3htaXRyKHVwLCBVQVJUX0xTUl9USFJFKTsKQEAgLTIwMzksNyArMjAzOSw3IEBACiAJCWlpciA9IHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpOwogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgMCk7CiAKLQkJaWYgKHVwLT5wb3J0LmZsYWdzICYgVVBGX1NIQVJFX0lSUSkKKwkJaWYgKHVwLT5wb3J0LmlycWZsYWdzICYgSVJRRl9TSEFSRUQpCiAJCQllbmFibGVfaXJxKHVwLT5wb3J0LmlycSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIApAQCAtMjI3Miw3ICsyMjcyLDkgQEAKIAkvKgogCSAqIEFzayB0aGUgY29yZSB0byBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgZm9yIHVzLgogCSAqLwotCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAxNiAvIDB4ZmZmZiwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAxNik7CiAJcXVvdCA9IHNlcmlhbDgyNTBfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CiAKIAkvKgpAQCAtMjY3MSw2ICsyNjczLDcgQEAKIAkgICAgIGkrKywgdXArKykgewogCQl1cC0+cG9ydC5pb2Jhc2UgICA9IG9sZF9zZXJpYWxfcG9ydFtpXS5wb3J0OwogCQl1cC0+cG9ydC5pcnEgICAgICA9IGlycV9jYW5vbmljYWxpemUob2xkX3NlcmlhbF9wb3J0W2ldLmlycSk7CisJCXVwLT5wb3J0LmlycWZsYWdzID0gb2xkX3NlcmlhbF9wb3J0W2ldLmlycWZsYWdzOwogCQl1cC0+cG9ydC51YXJ0Y2xrICA9IG9sZF9zZXJpYWxfcG9ydFtpXS5iYXVkX2Jhc2UgKiAxNjsKIAkJdXAtPnBvcnQuZmxhZ3MgICAgPSBvbGRfc2VyaWFsX3BvcnRbaV0uZmxhZ3M7CiAJCXVwLT5wb3J0Lmh1YjYgICAgID0gb2xkX3NlcmlhbF9wb3J0W2ldLmh1YjY7CkBAIC0yNjc5LDcgKzI2ODIsNyBAQAogCQl1cC0+cG9ydC5yZWdzaGlmdCA9IG9sZF9zZXJpYWxfcG9ydFtpXS5pb21lbV9yZWdfc2hpZnQ7CiAJCXNldF9pb19mcm9tX3VwaW8oJnVwLT5wb3J0KTsKIAkJaWYgKHNoYXJlX2lycXMpCi0JCQl1cC0+cG9ydC5mbGFncyB8PSBVUEZfU0hBUkVfSVJROworCQkJdXAtPnBvcnQuaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJfQogfQogCkBAIC0yODY5LDYgKzI4NzIsNyBAQAogCXAtPmlvYmFzZSAgICAgICA9IHBvcnQtPmlvYmFzZTsKIAlwLT5tZW1iYXNlICAgICAgPSBwb3J0LT5tZW1iYXNlOwogCXAtPmlycSAgICAgICAgICA9IHBvcnQtPmlycTsKKwlwLT5pcnFmbGFncyAgICAgPSBwb3J0LT5pcnFmbGFnczsKIAlwLT51YXJ0Y2xrICAgICAgPSBwb3J0LT51YXJ0Y2xrOwogCXAtPmZpZm9zaXplICAgICA9IHBvcnQtPmZpZm9zaXplOwogCXAtPnJlZ3NoaWZ0ICAgICA9IHBvcnQtPnJlZ3NoaWZ0OwpAQCAtMjk0Miw2ICsyOTQ2LDcgQEAKIAkJcG9ydC5pb2Jhc2UJCT0gcC0+aW9iYXNlOwogCQlwb3J0Lm1lbWJhc2UJCT0gcC0+bWVtYmFzZTsKIAkJcG9ydC5pcnEJCT0gcC0+aXJxOworCQlwb3J0LmlycWZsYWdzCQk9IHAtPmlycWZsYWdzOwogCQlwb3J0LnVhcnRjbGsJCT0gcC0+dWFydGNsazsKIAkJcG9ydC5yZWdzaGlmdAkJPSBwLT5yZWdzaGlmdDsKIAkJcG9ydC5pb3R5cGUJCT0gcC0+aW90eXBlOwpAQCAtMjk1NCw3ICsyOTU5LDcgQEAKIAkJcG9ydC5zZXJpYWxfb3V0CQk9IHAtPnNlcmlhbF9vdXQ7CiAJCXBvcnQuZGV2CQk9ICZkZXYtPmRldjsKIAkJaWYgKHNoYXJlX2lycXMpCi0JCQlwb3J0LmZsYWdzIHw9IFVQRl9TSEFSRV9JUlE7CisJCQlwb3J0LmlycWZsYWdzIHw9IElSUUZfU0hBUkVEOwogCQlyZXQgPSBzZXJpYWw4MjUwX3JlZ2lzdGVyX3BvcnQoJnBvcnQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgcG9ydCBhdCBpbmRleCAlZCAiCkBAIC0zMDk2LDYgKzMxMDEsNyBAQAogCQl1YXJ0LT5wb3J0LmlvYmFzZSAgICAgICA9IHBvcnQtPmlvYmFzZTsKIAkJdWFydC0+cG9ydC5tZW1iYXNlICAgICAgPSBwb3J0LT5tZW1iYXNlOwogCQl1YXJ0LT5wb3J0LmlycSAgICAgICAgICA9IHBvcnQtPmlycTsKKwkJdWFydC0+cG9ydC5pcnFmbGFncyAgICAgPSBwb3J0LT5pcnFmbGFnczsKIAkJdWFydC0+cG9ydC51YXJ0Y2xrICAgICAgPSBwb3J0LT51YXJ0Y2xrOwogCQl1YXJ0LT5wb3J0LmZpZm9zaXplICAgICA9IHBvcnQtPmZpZm9zaXplOwogCQl1YXJ0LT5wb3J0LnJlZ3NoaWZ0ICAgICA9IHBvcnQtPnJlZ3NoaWZ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5oIGIvZHJpdmVycy9zZXJpYWwvODI1MC5oCmluZGV4IDUyMDI2MDMuLjZlMTllYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuaAorKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGlvX3R5cGU7CiAJdW5zaWduZWQgY2hhciAqaW9tZW1fYmFzZTsKIAl1bnNpZ25lZCBzaG9ydCBpb21lbV9yZWdfc2hpZnQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKaW5kZXggNThhNDg3OS4uNDI5YThhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAKIHN0YXRpYyB2b2lkIHBsMDEwX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIHJzciwgbWF4X2NvdW50ID0gMjU2OwogCiAJc3RhdHVzID0gcmVhZGIodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBzdGF0aWMgdm9pZCBwbDAxMF90eF9jaGFycyhzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAodWFwLT5wb3J0LnhfY2hhcikgewpAQCAtMjI1LDcgKzIyNSw3IEBACiAJaWYgKGRlbHRhICYgVUFSVDAxeF9GUl9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVhcC0+cG9ydCwgc3RhdHVzICYgVUFSVDAxeF9GUl9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1YXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWFwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHBsMDEwX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKaW5kZXggNzJiYTBjNi4uZWY3YWRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyB2b2lkIHBsMDExX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIG1heF9jb3VudCA9IDI1NjsKIAogCXN0YXR1cyA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9GUik7CkBAIC0xNzUsNyArMTc1LDcgQEAKIAogc3RhdGljIHZvaWQgcGwwMTFfdHhfY2hhcnMoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaW50IGNvdW50OwogCiAJaWYgKHVhcC0+cG9ydC54X2NoYXIpIHsKQEAgLTIyNiw3ICsyMjYsNyBAQAogCWlmIChkZWx0YSAmIFVBUlQwMXhfRlJfQ1RTKQogCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKCZ1YXAtPnBvcnQsIHN0YXR1cyAmIFVBUlQwMXhfRlJfQ1RTKTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWFwLT5wb3J0LmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVhcC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBwbDAxMV9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwppbmRleCA2MDdkNDNhLi4zNTUxYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGF0bWVsX3R4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJaWYgKHBvcnQtPnhfY2hhciAmJiBVQVJUX0dFVF9DU1IocG9ydCkgJiBBVE1FTF9VU19UWFJEWSkgewogCQlVQVJUX1BVVF9DSEFSKHBvcnQsIHBvcnQtPnhfY2hhcik7CkBAIC01NjAsNyArNTYwLDcgQEAKIHN0YXRpYyB2b2lkIGF0bWVsX3R4X2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSB0b19hdG1lbF91YXJ0X3BvcnQocG9ydCk7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCXN0cnVjdCBhdG1lbF9kbWFfYnVmZmVyICpwZGMgPSAmYXRtZWxfcG9ydC0+cGRjX3R4OwogCWludCBjb3VudDsKIApAQCAtNjYzLDE0ICs2NjMsMTQgQEAKIAkgKiB1YXJ0X3N0YXJ0KCksIHdoaWNoIHRha2VzIHRoZSBsb2NrLgogCSAqLwogCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKLQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5pbmZvLT5wb3J0LnR0eSk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+c3RhdGUtPnBvcnQudHR5KTsKIAlzcGluX2xvY2soJnBvcnQtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBhdG1lbF9yeF9mcm9tX2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSB0b19hdG1lbF91YXJ0X3BvcnQocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJc3RydWN0IGF0bWVsX2RtYV9idWZmZXIgKnBkYzsKIAlpbnQgcnhfaWR4ID0gYXRtZWxfcG9ydC0+cGRjX3J4X2lkeDsKIAl1bnNpZ25lZCBpbnQgaGVhZDsKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQlpZiAoc3RhdHVzX2NoYW5nZSAmIEFUTUVMX1VTX0NUUykKIAkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwgIShzdGF0dXMgJiBBVE1FTF9VU19DVFMpKTsKIAotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkJYXRtZWxfcG9ydC0+aXJxX3N0YXR1c19wcmV2ID0gc3RhdHVzOwogCX0KQEAgLTc5NSw3ICs3OTUsNyBAQAogc3RhdGljIGludCBhdG1lbF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IHRvX2F0bWVsX3VhcnRfcG9ydChwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAlpbnQgcmV0dmFsOwogCiAJLyoKQEAgLTg1NCw3ICs4NTQsNyBAQAogCX0KIAlpZiAoYXRtZWxfdXNlX2RtYV90eChwb3J0KSkgewogCQlzdHJ1Y3QgYXRtZWxfZG1hX2J1ZmZlciAqcGRjID0gJmF0bWVsX3BvcnQtPnBkY190eDsKLQkJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCQlwZGMtPmJ1ZiA9IHhtaXQtPmJ1ZjsKIAkJcGRjLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHBvcnQtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCmluZGV4IGI0YTc2NTAuLjUwYWJiN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwpAQCAtNDIsNiArNDIsMTAgQEAKICMgdW5kZWYgQ09ORklHX0VBUkxZX1BSSU5USwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFCisjIHVuZGVmIENPTkZJR19FQVJMWV9QUklOVEsKKyNlbmRpZgorCiAvKiBVQVJUIG5hbWUgYW5kIGRldmljZSBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBCRklOX1NFUklBTF9OQU1FCSJ0dHlCRiIKICNkZWZpbmUgQkZJTl9TRVJJQUxfTUFKT1IJMjA0CkBAIC0xNDAsNyArMTQ0LDcgQEAKIHsKIAlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKXBvcnQ7CiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0LT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcnQtPnBvcnQuc3RhdGUtPnhtaXQ7CiAjZW5kaWYKIAogCXdoaWxlICghKFVBUlRfR0VUX0xTUih1YXJ0KSAmIFRFTVQpKQpAQCAtMTY3LDcgKzE3MSw3IEBACiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICopcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdWFydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdWFydC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMKIAlpZiAodWFydC0+c2N0cyAmJiAhKGJmaW5fc2VyaWFsX2dldF9tY3RybCgmdWFydC0+cG9ydCkgJiBUSU9DTV9DVFMpKSB7CkBAIC0yMzksMTAgKzI0MywxMCBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQlpZiAoIXVhcnQtPnBvcnQuaW5mbyB8fCAhdWFydC0+cG9ydC5pbmZvLT5wb3J0LnR0eSkKKwlpZiAoIXVhcnQtPnBvcnQuc3RhdGUgfHwgIXVhcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5KQogCQlyZXR1cm47CiAjZW5kaWYKLQl0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnBvcnQudHR5OworCXR0eSA9IHVhcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJaWYgKEFOT01BTFlfMDUwMDAzNjMpIHsKIAkJLyogVGhlIEJGNTMzIChhbmQgQkY1NjEpIGZhbWlseSBvZiBwcm9jZXNzb3JzIGhhdmUgYSBuaWNlIGFub21hbHkKQEAgLTMyNyw3ICszMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF90eF9jaGFycyhzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0LT5wb3J0LnN0YXRlLT54bWl0OwogCiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQoJnVhcnQtPnBvcnQpKSB7CiAjaWZkZWYgQ09ORklHX0JGNTR4CkBAIC0zOTQsNyArMzk4LDcgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BCiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9kbWFfdHhfY2hhcnMoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcnQtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFydC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAogCXVhcnQtPnR4X2RvbmUgPSAwOwogCkBAIC00MzIsNyArNDM2LDcgQEAKIAogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfZG1hX3J4X2NoYXJzKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAlpbnQgaSwgZmxnLCBzdGF0dXM7CiAKIAlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7CkBAIC01MjUsNyArNTI5LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBiZmluX3NlcmlhbF9kbWFfdHhfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IGRldl9pZDsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0LT5wb3J0LnN0YXRlLT54bWl0OwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0hBUkRfQ1RTUlRTCiAJaWYgKHVhcnQtPnNjdHMgJiYgIShiZmluX3NlcmlhbF9nZXRfbWN0cmwoJnVhcnQtPnBvcnQpJlRJT0NNX0NUUykpIHsKQEAgLTk2MSwxMCArOTY1LDEwIEBACiAJaW50IGxpbmUgPSBwb3J0LT5saW5lOwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAotCWlmIChsaW5lID49IHBvcnQtPmluZm8tPnBvcnQudHR5LT5kcml2ZXItPm51bSkKKwlpZiAobGluZSA+PSBwb3J0LT5zdGF0ZS0+cG9ydC50dHktPmRyaXZlci0+bnVtKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKHBvcnQtPmluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2xpbmUpIHsKKwlzd2l0Y2ggKHBvcnQtPnN0YXRlLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19saW5lKSB7CiAJY2FzZSBOX0lSREE6CiAJCXZhbCA9IFVBUlRfR0VUX0dDVEwoJmJmaW5fc2VyaWFsX3BvcnRzW2xpbmVdKTsKIAkJdmFsIHw9IChJUkVOIHwgUlBPTEMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwppbmRleCBjMTA4YjFhLi4wODhiYjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3BvcnRfdWFydF9yeF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gZGV2X2lkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBjaDsKIAogCWRvIHsKQEAgLTIwNSw3ICsyMDUsNyBAQAogc3RhdGljIGlycXJldHVybl90IHNwb3J0X3VhcnRfZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXQgPSBTUE9SVF9HRVRfU1RBVCh1cCk7CiAKIAkvKiBPdmVyZmxvdyBpbiBSWCBGSUZPICovCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogc3RhdGljIHZvaWQgc3BvcnRfdWFydF90eF9jaGFycyhzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlpZiAoU1BPUlRfR0VUX1NUQVQodXApICYgVFhGKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jIGIvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYwppbmRleCA4MGU3NjQyLi5iNmFjZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKQEAgLTkzLDcgKzkzLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjbHBzNzExeHVhcnRfaW50X3J4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAKIAlzdGF0dXMgPSBjbHBzX3JlYWRsKFNZU0ZMRyhwb3J0KSk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjbHBzNzExeHVhcnRfaW50X3R4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggZjhkZjA2OC4uOGQzNDliMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgY2g7CiAJdTggKmNwOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7CiAJY2JkX3QgX19pb21lbSAqYmRwOwogCXUxNiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9kei5jIGIvZHJpdmVycy9zZXJpYWwvZHouYwppbmRleCA2MDQyYjg3Li41NzQyMWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9kei5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2R6LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXdoaWxlICgoc3RhdHVzID0gZHpfaW4oZHBvcnQsIERaX1JCVUYpKSAmIERaX0RWQUwpIHsKIAkJZHBvcnQgPSAmbXV4LT5kcG9ydFtMSU5FKHN0YXR1cyldOwogCQl1cG9ydCA9ICZkcG9ydC0+cG9ydDsKLQkJdHR5ID0gdXBvcnQtPmluZm8tPnBvcnQudHR5OwkvKiBwb2ludCB0byB0aGUgcHJvcGVyIGRldiAqLworCQl0dHkgPSB1cG9ydC0+c3RhdGUtPnBvcnQudHR5OwkvKiBwb2ludCB0byB0aGUgcHJvcGVyIGRldiAqLwogCiAJCWNoID0gVUNIQVIoc3RhdHVzKTsJCS8qIGdyYWIgdGhlIGNoYXIgKi8KIAkJZmxhZyA9IFRUWV9OT1JNQUw7CkBAIC0yNDksNyArMjQ5LDcgQEAKIAl9CiAJZm9yIChpID0gMDsgaSA8IERaX05CX1BPUlQ7IGkrKykKIAkJaWYgKGxpbmVzX3J4W2ldKQotCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gobXV4LT5kcG9ydFtpXS5wb3J0LmluZm8tPnBvcnQudHR5KTsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKG11eC0+ZHBvcnRbaV0ucG9ydC5zdGF0ZS0+cG9ydC50dHkpOwogfQogCiAvKgpAQCAtMjY4LDcgKzI2OCw3IEBACiAKIAlzdGF0dXMgPSBkel9pbihkcG9ydCwgRFpfQ1NSKTsKIAlkcG9ydCA9ICZtdXgtPmRwb3J0W0xJTkUoc3RhdHVzKV07Ci0JeG1pdCA9ICZkcG9ydC0+cG9ydC5pbmZvLT54bWl0OworCXhtaXQgPSAmZHBvcnQtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlpZiAoZHBvcnQtPnBvcnQueF9jaGFyKSB7CQkvKiBYT04vWE9GRiBjaGFycyAqLwogCQlkel9vdXQoZHBvcnQsIERaX1REUiwgZHBvcnQtPnBvcnQueF9jaGFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2ljb20uYyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwppbmRleCBjZDFiNmE0Li4yZDdmZWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaWNvbS5jCkBAIC02MTcsNyArNjE3LDcgQEAKIAkgKiBkaXNhYmxlIGJyZWFrIGNvbmRpdGlvbgogCSAqLwogCWNtZFJlZyA9IHJlYWRiKCZpY29tX3BvcnQtPmRyYW0tPkNtZFJlZyk7Ci0JaWYgKChjbWRSZWcgfCBDTURfU05EX0JSRUFLKSA9PSBDTURfU05EX0JSRUFLKSB7CisJaWYgKGNtZFJlZyAmIENNRF9TTkRfQlJFQUspIHsKIAkJd3JpdGViKGNtZFJlZyAmIH5DTURfU05EX0JSRUFLLCAmaWNvbV9wb3J0LT5kcmFtLT5DbWRSZWcpOwogCX0KIH0KQEAgLTYyNyw3ICs2MjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZGF0YV9jb3VudDsKIAl1bnNpZ25lZCBjaGFyIGNtZFJlZzsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlpbnQgdGVtcF90YWlsID0gcG9ydC0+aW5mby0+eG1pdC50YWlsOworCWludCB0ZW1wX3RhaWwgPSBwb3J0LT5zdGF0ZS0+eG1pdC50YWlsOwogCiAJdHJhY2UoSUNPTV9QT1JULCAiV1JJVEUiLCAwKTsKIApAQCAtNjM4LDExICs2MzgsMTEgQEAKIAl9CiAKIAlkYXRhX2NvdW50ID0gMDsKLQl3aGlsZSAoKHBvcnQtPmluZm8tPnhtaXQuaGVhZCAhPSB0ZW1wX3RhaWwpICYmCisJd2hpbGUgKChwb3J0LT5zdGF0ZS0+eG1pdC5oZWFkICE9IHRlbXBfdGFpbCkgJiYKIAkgICAgICAgKGRhdGFfY291bnQgPD0gWE1JVF9CVUZGX1NaKSkgewogCiAJCUlDT01fUE9SVC0+eG1pdF9idWZbZGF0YV9jb3VudCsrXSA9Ci0JCSAgICBwb3J0LT5pbmZvLT54bWl0LmJ1Zlt0ZW1wX3RhaWxdOworCQkgICAgcG9ydC0+c3RhdGUtPnhtaXQuYnVmW3RlbXBfdGFpbF07CiAKIAkJdGVtcF90YWlsKys7CiAJCXRlbXBfdGFpbCAmPSAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKQEAgLTY5NCw4ICs2OTQsOCBAQAogCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmaWNvbV9wb3J0LT51YXJ0X3BvcnQsCiAJCQkJCSAgICAgICBkZWx0YV9zdGF0dXMgJiBJQ09NX0NUUyk7CiAKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpY29tX3BvcnQtPnVhcnRfcG9ydC5pbmZvLT4KLQkJCQkgICAgICBkZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaWNvbV9wb3J0LT51YXJ0X3BvcnQuc3RhdGUtPgorCQkJCSAgICAgIHBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCQlvbGRfc3RhdHVzID0gc3RhdHVzOwogCX0KIAlzcGluX3VubG9jaygmaWNvbV9wb3J0LT51YXJ0X3BvcnQubG9jayk7CkBAIC03MTgsMTAgKzcxOCwxMCBAQAogCQlpY29tX3BvcnQtPnVhcnRfcG9ydC5pY291bnQudHggKz0gY291bnQ7CiAKIAkJZm9yIChpPTA7IGk8Y291bnQgJiYKLQkJCSF1YXJ0X2NpcmNfZW1wdHkoJmljb21fcG9ydC0+dWFydF9wb3J0LmluZm8tPnhtaXQpOyBpKyspIHsKKwkJCSF1YXJ0X2NpcmNfZW1wdHkoJmljb21fcG9ydC0+dWFydF9wb3J0LnN0YXRlLT54bWl0KTsgaSsrKSB7CiAKLQkJCWljb21fcG9ydC0+dWFydF9wb3J0LmluZm8tPnhtaXQudGFpbCsrOwotCQkJaWNvbV9wb3J0LT51YXJ0X3BvcnQuaW5mby0+eG1pdC50YWlsICY9CisJCQlpY29tX3BvcnQtPnVhcnRfcG9ydC5zdGF0ZS0+eG1pdC50YWlsKys7CisJCQlpY29tX3BvcnQtPnVhcnRfcG9ydC5zdGF0ZS0+eG1pdC50YWlsICY9CiAJCQkJKFVBUlRfWE1JVF9TSVpFIC0gMSk7CiAJCX0KIApAQCAtNzM1LDcgKzczNSw3IEBACiBzdGF0aWMgdm9pZCByZWN2X2ludGVycnVwdCh1MTYgcG9ydF9pbnRfcmVnLCBzdHJ1Y3QgaWNvbV9wb3J0ICppY29tX3BvcnQpCiB7CiAJc2hvcnQgaW50IGNvdW50LCByY3ZfYnVmZjsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaWNvbV9wb3J0LT51YXJ0X3BvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGljb21fcG9ydC0+dWFydF9wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBzaG9ydCBpbnQgc3RhdHVzOwogCXN0cnVjdCB1YXJ0X2ljb3VudCAqaWNvdW50OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCA3NDg1YWZkLi4xODEzMGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJaWYgKGNoYW5nZWQgJiBUSU9DTV9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCBzdGF0dXMgJiBUSU9DTV9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIC8qCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gKHN0cnVjdCBpbXhfcG9ydCAqKWRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChzcG9ydC0+cG9ydC5pbmZvKSB7CisJaWYgKHNwb3J0LT5wb3J0LnN0YXRlKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJCWlteF9tY3RybF9jaGVjayhzcG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTMyMyw3ICszMjMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW14X3RyYW5zbWl0X2J1ZmZlcihzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAogCXdoaWxlICghKHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVVFMpICYgVVRTX1RYRlVMTCkpIHsKIAkJLyogc2VuZCB4bWl0LT5idWZbeG1pdC0+dGFpbF0KQEAgLTM4OCw3ICszODgsNyBAQAogCiAJd3JpdGVsKFVTUjFfUlRTRCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpOwogCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCAhIXZhbCk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3R4aW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNwb3J0LT5wb3J0LmxvY2ssZmxhZ3MpOwpAQCAtNDI3LDcgKzQyNyw3IEBACiB7CiAJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9pZDsKIAl1bnNpZ25lZCBpbnQgcngsZmxnLGlnbm9yZWQgPSAwOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzcG9ydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRlbXA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3BvcnQtPnBvcnQubG9jayxmbGFncyk7CkBAIC05MDAsMTEgKzkwMCwxMSBAQAogCXJhdGlvbmFsX2Jlc3RfYXBwcm94aW1hdGlvbigxNiAqIGRpdiAqIGJhdWQsIHNwb3J0LT5wb3J0LnVhcnRjbGssCiAJCTEgPDwgMTYsIDEgPDwgMTYsICZudW0sICZkZW5vbSk7CiAKLQlpZiAocG9ydC0+aW5mbyAmJiBwb3J0LT5pbmZvLT5wb3J0LnR0eSkgeworCWlmIChwb3J0LT5zdGF0ZSAmJiBwb3J0LT5zdGF0ZS0+cG9ydC50dHkpIHsKIAkJdGRpdjY0ID0gc3BvcnQtPnBvcnQudWFydGNsazsKIAkJdGRpdjY0ICo9IG51bTsKIAkJZG9fZGl2KHRkaXY2NCwgZGVub20gKiAxNiAqIGRpdik7Ci0JCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHNwb3J0LT5wb3J0LmluZm8tPnBvcnQudHR5LAorCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC50dHksCiAJCQkJKHNwZWVkX3QpdGRpdjY0LCAoc3BlZWRfdCl0ZGl2NjQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKaW5kZXggYWUzNjk5ZC4uZDg5ODNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCkBAIC04OTcsMjUgKzg5NywyNSBAQAogCWNoYXIgKnN0YXJ0OwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGlvYzNfcG9ydCAqcG9ydCA9IGdldF9pb2MzX3BvcnQodGhlX3BvcnQpOwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCF0aGVfcG9ydCkKIAkJcmV0dXJuOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCi0JaW5mbyA9IHRoZV9wb3J0LT5pbmZvOwotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOworCXR0eSA9IHN0YXRlLT5wb3J0LnR0eTsKIAotCWlmICh1YXJ0X2NpcmNfZW1wdHkoJmluZm8tPnhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZCh0aGVfcG9ydCkpIHsKKwlpZiAodWFydF9jaXJjX2VtcHR5KCZzdGF0ZS0+eG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHRoZV9wb3J0KSkgewogCQkvKiBOb3RoaW5nIHRvIGRvIG9yIGh3IHN0b3BwZWQgKi8KIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX0FMTF9PVVRQVVQsIDApOwogCQlyZXR1cm47CiAJfQogCi0JaGVhZCA9IGluZm8tPnhtaXQuaGVhZDsKLQl0YWlsID0gaW5mby0+eG1pdC50YWlsOwotCXN0YXJ0ID0gKGNoYXIgKikmaW5mby0+eG1pdC5idWZbdGFpbF07CisJaGVhZCA9IHN0YXRlLT54bWl0LmhlYWQ7CisJdGFpbCA9IHN0YXRlLT54bWl0LnRhaWw7CisJc3RhcnQgPSAoY2hhciAqKSZzdGF0ZS0+eG1pdC5idWZbdGFpbF07CiAKIAkvKiB3cml0ZSBvdXQgYWxsIHRoZSBkYXRhIG9yIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwogCXhtaXRfY291bnQgPSAoaGVhZCA8IHRhaWwpID8gKFVBUlRfWE1JVF9TSVpFIC0gdGFpbCkgOiAoaGVhZCAtIHRhaWwpOwpAQCAtOTI4LDE0ICs5MjgsMTQgQEAKIAkJCS8qIGFkdmFuY2UgdGhlIHBvaW50ZXJzICovCiAJCQl0YWlsICs9IHJlc3VsdDsKIAkJCXRhaWwgJj0gVUFSVF9YTUlUX1NJWkUgLSAxOwotCQkJaW5mby0+eG1pdC50YWlsID0gdGFpbDsKLQkJCXN0YXJ0ID0gKGNoYXIgKikmaW5mby0+eG1pdC5idWZbdGFpbF07CisJCQlzdGF0ZS0+eG1pdC50YWlsID0gdGFpbDsKKwkJCXN0YXJ0ID0gKGNoYXIgKikmc3RhdGUtPnhtaXQuYnVmW3RhaWxdOwogCQl9CiAJfQotCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmaW5mby0+eG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKCZzdGF0ZS0+eG1pdCkgPCBXQUtFVVBfQ0hBUlMpCiAJCXVhcnRfd3JpdGVfd2FrZXVwKHRoZV9wb3J0KTsKIAotCWlmICh1YXJ0X2NpcmNfZW1wdHkoJmluZm8tPnhtaXQpKSB7CisJaWYgKHVhcnRfY2lyY19lbXB0eSgmc3RhdGUtPnhtaXQpKSB7CiAJCXNldF9ub3RpZmljYXRpb24ocG9ydCwgTl9PVVRQVVRfTE9XQVQsIDApOwogCX0gZWxzZSB7CiAJCXNldF9ub3RpZmljYXRpb24ocG9ydCwgTl9PVVRQVVRfTE9XQVQsIDEpOwpAQCAtOTU2LDcgKzk1Niw3IEBACiAJdW5zaWduZWQgaW50IGNmbGFnOwogCWludCBiYXVkOwogCWludCBuZXdfcGFyaXR5ID0gMCwgbmV3X3Bhcml0eV9lbmFibGUgPSAwLCBuZXdfc3RvcCA9IDAsIG5ld19kYXRhID0gODsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOwogCiAJY2ZsYWcgPSBuZXdfdGVybWlvcy0+Y19jZmxhZzsKIApAQCAtOTk3LDE0ICs5OTcsMTQgQEAKIAogCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgPSBOX0FMTF9JTlBVVDsKIAotCWluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJc3RhdGUtPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQorCWlmIChJX0lHTlBBUihzdGF0ZS0+cG9ydC50dHkpKQogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH4oTl9QQVJJVFlfRVJST1IKIAkJCQkJCSAgfCBOX0ZSQU1JTkdfRVJST1IpOwotCWlmIChJX0lHTkJSSyhpbmZvLT5wb3J0LnR0eSkpIHsKKwlpZiAoSV9JR05CUksoc3RhdGUtPnBvcnQudHR5KSkgewogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX0JSRUFLOwotCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQorCQlpZiAoSV9JR05QQVIoc3RhdGUtPnBvcnQudHR5KSkKIAkJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fT1ZFUlJVTl9FUlJPUjsKIAl9CiAJaWYgKCEoY2ZsYWcgJiBDUkVBRCkpIHsKQEAgLTEyODYsOCArMTI4Niw4IEBACiAJCQkJCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlCiAJCQkJCQkJKHBvcnQtPmlwX3BvcnQsIDApOwogCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlCi0JCQkJCQkgICAgKCZ0aGVfcG9ydC0+aW5mby0+Ci0JCQkJCQkgICAgIGRlbHRhX21zcl93YWl0KTsKKwkJCQkJCSAgICAoJnRoZV9wb3J0LT5zdGF0ZS0+CisJCQkJCQkgICAgIHBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCQkJCQl9CiAKIAkJCQkJLyogSWYgd2UgaGFkIGFueSBkYXRhIHRvIHJldHVybiwgd2UKQEAgLTEzOTIsMjEgKzEzOTIsMjEgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGNoYXIgY2hbTUFYX0NIQVJTXTsKIAlpbnQgcmVhZF9jb3VudCA9IDAsIHJlYWRfcm9vbSwgZmxpcCA9IDA7Ci0Jc3RydWN0IHVhcnRfaW5mbyAqaW5mbyA9IHRoZV9wb3J0LT5pbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHRoZV9wb3J0LT5zdGF0ZTsKIAlzdHJ1Y3QgaW9jM19wb3J0ICpwb3J0ID0gZ2V0X2lvYzNfcG9ydCh0aGVfcG9ydCk7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAKIAkvKiBNYWtlIHN1cmUgYWxsIHRoZSBwb2ludGVycyBhcmUgImdvb2QiIG9uZXMgKi8KLQlpZiAoIWluZm8pCisJaWYgKCFzdGF0ZSkKIAkJcmV0dXJuIDA7Ci0JaWYgKCFpbmZvLT5wb3J0LnR0eSkKKwlpZiAoIXN0YXRlLT5wb3J0LnR0eSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIShwb3J0LT5pcF9mbGFncyAmIElOUFVUX0VOQUJMRSkpCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9wb3J0LT5sb2NrLCBwZmxhZ3MpOwotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXR0eSA9IHN0YXRlLT5wb3J0LnR0eTsKIAogCXJlYWRfY291bnQgPSBkb19yZWFkKHRoZV9wb3J0LCBjaCwgTUFYX0NIQVJTKTsKIAlpZiAocmVhZF9jb3VudCA+IDApIHsKQEAgLTE0OTEsNyArMTQ5MSw3IEBACiAJCQkJdWFydF9oYW5kbGVfZGNkX2NoYW5nZSh0aGVfcG9ydCwKIAkJCQkJCXNoYWRvdyAmIFNIQURPV19EQ0QpOwogCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZQotCQkJCSAgICAoJnRoZV9wb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJICAgICgmdGhlX3BvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJCX0gZWxzZSBpZiAoKHBvcnQtPmlwX25vdGlmeSAmIE5fRERDRCkKIAkJCQkgICAmJiAhKHNoYWRvdyAmIFNIQURPV19EQ0QpKSB7CiAJCQkJLyogRmxhZyBkZWx0YSBEQ0Qvbm8gRENEICovCkBAIC0xNTExLDcgKzE1MTEsNyBAQAogCQkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UodGhlX3BvcnQsIHNoYWRvdwogCQkJCQkJJiBTSEFET1dfQ1RTKTsKIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUKLQkJCQkgICAgKCZ0aGVfcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCSAgICAoJnRoZV9wb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJCQl9CiAJCX0KIApAQCAtMTcyMSwxNCArMTcyMSwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgcG9ydF9mbGFnczsKIAlzdHJ1Y3QgaW9jM19wb3J0ICpwb3J0OwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJcG9ydCA9IGdldF9pb2MzX3BvcnQodGhlX3BvcnQpOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCi0JaW5mbyA9IHRoZV9wb3J0LT5pbmZvOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9wb3J0LT5sb2NrLCBwb3J0X2ZsYWdzKTsKIAlzZXRfbm90aWZpY2F0aW9uKHBvcnQsIE5fQUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCmluZGV4IGU1YzU4ZmUuLjJlMDJjMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwpAQCAtMTYyNywyNSArMTYyNywyNSBAQAogCWNoYXIgKnN0YXJ0OwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGlvYzRfcG9ydCAqcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCF0aGVfcG9ydCkKIAkJcmV0dXJuOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCi0JaW5mbyA9IHRoZV9wb3J0LT5pbmZvOwotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOworCXR0eSA9IHN0YXRlLT5wb3J0LnR0eTsKIAotCWlmICh1YXJ0X2NpcmNfZW1wdHkoJmluZm8tPnhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZCh0aGVfcG9ydCkpIHsKKwlpZiAodWFydF9jaXJjX2VtcHR5KCZzdGF0ZS0+eG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHRoZV9wb3J0KSkgewogCQkvKiBOb3RoaW5nIHRvIGRvIG9yIGh3IHN0b3BwZWQgKi8KIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX0FMTF9PVVRQVVQsIDApOwogCQlyZXR1cm47CiAJfQogCi0JaGVhZCA9IGluZm8tPnhtaXQuaGVhZDsKLQl0YWlsID0gaW5mby0+eG1pdC50YWlsOwotCXN0YXJ0ID0gKGNoYXIgKikmaW5mby0+eG1pdC5idWZbdGFpbF07CisJaGVhZCA9IHN0YXRlLT54bWl0LmhlYWQ7CisJdGFpbCA9IHN0YXRlLT54bWl0LnRhaWw7CisJc3RhcnQgPSAoY2hhciAqKSZzdGF0ZS0+eG1pdC5idWZbdGFpbF07CiAKIAkvKiB3cml0ZSBvdXQgYWxsIHRoZSBkYXRhIG9yIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwogCXhtaXRfY291bnQgPSAoaGVhZCA8IHRhaWwpID8gKFVBUlRfWE1JVF9TSVpFIC0gdGFpbCkgOiAoaGVhZCAtIHRhaWwpOwpAQCAtMTY1OCwxNCArMTY1OCwxNCBAQAogCQkJLyogYWR2YW5jZSB0aGUgcG9pbnRlcnMgKi8KIAkJCXRhaWwgKz0gcmVzdWx0OwogCQkJdGFpbCAmPSBVQVJUX1hNSVRfU0laRSAtIDE7Ci0JCQlpbmZvLT54bWl0LnRhaWwgPSB0YWlsOwotCQkJc3RhcnQgPSAoY2hhciAqKSZpbmZvLT54bWl0LmJ1Zlt0YWlsXTsKKwkJCXN0YXRlLT54bWl0LnRhaWwgPSB0YWlsOworCQkJc3RhcnQgPSAoY2hhciAqKSZzdGF0ZS0+eG1pdC5idWZbdGFpbF07CiAJCX0KIAl9Ci0JaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKCZpbmZvLT54bWl0KSA8IFdBS0VVUF9DSEFSUykKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoJnN0YXRlLT54bWl0KSA8IFdBS0VVUF9DSEFSUykKIAkJdWFydF93cml0ZV93YWtldXAodGhlX3BvcnQpOwogCi0JaWYgKHVhcnRfY2lyY19lbXB0eSgmaW5mby0+eG1pdCkpIHsKKwlpZiAodWFydF9jaXJjX2VtcHR5KCZzdGF0ZS0+eG1pdCkpIHsKIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX09VVFBVVF9MT1dBVCwgMCk7CiAJfSBlbHNlIHsKIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX09VVFBVVF9MT1dBVCwgMSk7CkBAIC0xNjg2LDcgKzE2ODYsNyBAQAogCWludCBiYXVkLCBiaXRzOwogCXVuc2lnbmVkIGNmbGFnOwogCWludCBuZXdfcGFyaXR5ID0gMCwgbmV3X3Bhcml0eV9lbmFibGUgPSAwLCBuZXdfc3RvcCA9IDAsIG5ld19kYXRhID0gODsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOwogCiAJY2ZsYWcgPSBuZXdfdGVybWlvcy0+Y19jZmxhZzsKIApAQCAtMTczOCwxNCArMTczOCwxNCBAQAogCiAJdGhlX3BvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IE5fQUxMX0lOUFVUOwogCi0JaW5mby0+cG9ydC50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlzdGF0ZS0+cG9ydC50dHktPmxvd19sYXRlbmN5ID0gMTsKIAotCWlmIChJX0lHTlBBUihpbmZvLT5wb3J0LnR0eSkpCisJaWYgKElfSUdOUEFSKHN0YXRlLT5wb3J0LnR0eSkpCiAJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfihOX1BBUklUWV9FUlJPUgogCQkJCQkJfCBOX0ZSQU1JTkdfRVJST1IpOwotCWlmIChJX0lHTkJSSyhpbmZvLT5wb3J0LnR0eSkpIHsKKwlpZiAoSV9JR05CUksoc3RhdGUtPnBvcnQudHR5KSkgewogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX0JSRUFLOwotCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQorCQlpZiAoSV9JR05QQVIoc3RhdGUtPnBvcnQudHR5KSkKIAkJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fT1ZFUlJVTl9FUlJPUjsKIAl9CiAJaWYgKCEoY2ZsYWcgJiBDUkVBRCkpIHsKQEAgLTE3ODQsNyArMTc4NCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBpYzRfc3RhcnR1cF9sb2NhbChzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCkKIHsKIAlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0OwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCF0aGVfcG9ydCkKIAkJcmV0dXJuIC0xOwpAQCAtMTc5Myw3ICsxNzkzLDcgQEAKIAlpZiAoIXBvcnQpCiAJCXJldHVybiAtMTsKIAotCWluZm8gPSB0aGVfcG9ydC0+aW5mbzsKKwlzdGF0ZSA9IHRoZV9wb3J0LT5zdGF0ZTsKIAogCWxvY2FsX29wZW4ocG9ydCk7CiAKQEAgLTE4MDEsNyArMTgwMSw3IEBACiAJaW9jNF9zZXRfcHJvdG8ocG9ydCwgdGhlX3BvcnQtPm1hcGJhc2UpOwogCiAJLyogc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQgKi8KLQlpb2M0X2NoYW5nZV9zcGVlZCh0aGVfcG9ydCwgaW5mby0+cG9ydC50dHktPnRlcm1pb3MsCisJaW9jNF9jaGFuZ2Vfc3BlZWQodGhlX3BvcnQsIHN0YXRlLT5wb3J0LnR0eS0+dGVybWlvcywKIAkJCSAgKHN0cnVjdCBrdGVybWlvcyAqKTApOwogCiAJcmV0dXJuIDA7CkBAIC0xODgyLDcgKzE4ODIsNyBAQAogCQkJCXRoZV9wb3J0ID0gcG9ydC0+aXBfcG9ydDsKIAkJCQl0aGVfcG9ydC0+aWNvdW50LmRjZCA9IDE7CiAJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlCi0JCQkJCSAgICAoJnRoZV9wb3J0LT4gaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCQkgICAgKCZ0aGVfcG9ydC0+c3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCQkJfSBlbHNlIGlmICgocG9ydC0+aXBfbm90aWZ5ICYgTl9ERENEKQogCQkJCQkmJiAhKHNoYWRvdyAmIElPQzRfU0hBRE9XX0RDRCkpIHsKIAkJCQkvKiBGbGFnIGRlbHRhIERDRC9ubyBEQ0QgKi8KQEAgLTE5MDQsNyArMTkwNCw3IEBACiAJCQkJdGhlX3BvcnQtPmljb3VudC5jdHMgPQogCQkJCQkoc2hhZG93ICYgSU9DNF9TSEFET1dfQ1RTKSA/IDEgOiAwOwogCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZQotCQkJCQkoJnRoZV9wb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJCSgmdGhlX3BvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJCX0KIAkJfQogCkBAIC0yMjM2LDggKzIyMzYsOCBAQAogCQkJCQkJICAgJiYgcG9ydC0+aXBfcG9ydCkgewogCQkJCQkJdGhlX3BvcnQtPmljb3VudC5kY2QgPSAwOwogCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlCi0JCQkJCQkgICAgKCZ0aGVfcG9ydC0+aW5mby0+Ci0JCQkJCQkJZGVsdGFfbXNyX3dhaXQpOworCQkJCQkJICAgICgmdGhlX3BvcnQtPnN0YXRlLT4KKwkJCQkJCQlwb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJCQkJfQogCiAJCQkJCS8qIElmIHdlIGhhZCBhbnkgZGF0YSB0byByZXR1cm4sIHdlCkBAIC0yMzQxLDE3ICsyMzQxLDE3IEBACiAJdW5zaWduZWQgY2hhciBjaFtJT0M0X01BWF9DSEFSU107CiAJaW50IHJlYWRfY291bnQsIHJlcXVlc3RfY291bnQgPSBJT0M0X01BWF9DSEFSUzsKIAlzdHJ1Y3QgdWFydF9pY291bnQgKmljb3VudDsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCiAJLyogTWFrZSBzdXJlIGFsbCB0aGUgcG9pbnRlcnMgYXJlICJnb29kIiBvbmVzICovCi0JaWYgKCFpbmZvKQorCWlmICghc3RhdGUpCiAJCXJldHVybjsKLQlpZiAoIWluZm8tPnBvcnQudHR5KQorCWlmICghc3RhdGUtPnBvcnQudHR5KQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX3BvcnQtPmxvY2ssIHBmbGFncyk7Ci0JdHR5ID0gaW5mby0+cG9ydC50dHk7CisJdHR5ID0gc3RhdGUtPnBvcnQudHR5OwogCiAJcmVxdWVzdF9jb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgSU9DNF9NQVhfQ0hBUlMpOwogCkBAIC0yNDMwLDE5ICsyNDMwLDE5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0X2ZsYWdzOwogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IHVhcnRfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGU7CiAKIAlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CiAJaWYgKCFwb3J0KQogCQlyZXR1cm47CiAKLQlpbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RhdGUgPSB0aGVfcG9ydC0+c3RhdGU7CiAJcG9ydC0+aXBfcG9ydCA9IE5VTEw7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAotCWlmIChpbmZvLT5wb3J0LnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCWlmIChzdGF0ZS0+cG9ydC50dHkpCisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmc3RhdGUtPnBvcnQudHR5LT5mbGFncyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX3BvcnQtPmxvY2ssIHBvcnRfZmxhZ3MpOwogCXNldF9ub3RpZmljYXRpb24ocG9ydCwgTl9BTEwsIDApOwpAQCAtMjUzOCw3ICsyNTM4LDcgQEAKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7CiAJc3RydWN0IGlvYzRfY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHBvcnRfZmxhZ3M7CiAKIAlpZiAoIXRoZV9wb3J0KQpAQCAtMjU0Niw3ICsyNTQ2LDcgQEAKIAlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMSk7CiAJaWYgKCFwb3J0KQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RhdGUgPSB0aGVfcG9ydC0+c3RhdGU7CiAKIAljb250cm9sID0gcG9ydC0+aXBfY29udHJvbDsKIAlpZiAoIWNvbnRyb2wpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKaW5kZXggMGQ5YWNiZC4uZWJmZjRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKQEAgLTI1Niw5ICsyNTYsOSBAQAogCXVuc2lnbmVkIGludCByMTsKIAogCXR0eSA9IE5VTEw7Ci0JaWYgKHVwLT5wb3J0LmluZm8gIT0gTlVMTCAmJgotCSAgICB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eSAhPSBOVUxMKQotCQl0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlpZiAodXAtPnBvcnQuc3RhdGUgIT0gTlVMTCAmJgorCSAgICB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHkgIT0gTlVMTCkKKwkJdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJZm9yICg7OykgewogCQljaCA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdXAtPnBvcnQsCiAJCQkJCSAgICAgICAoc3RhdHVzICYgQ1RTKSk7CiAKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCX0KIAogCXVwLT5wcmV2X3N0YXR1cyA9IHN0YXR1czsKQEAgLTQwNCw5ICs0MDQsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVwLT5wb3J0LmluZm8gPT0gTlVMTCkKKwlpZiAodXAtPnBvcnQuc3RhdGUgPT0gTlVMTCkKIAkJZ290byBhY2tfdHhfaW50OwotCXhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwl4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCiAJCWdvdG8gYWNrX3R4X2ludDsKIAlpZiAodWFydF90eF9zdG9wcGVkKCZ1cC0+cG9ydCkpCkBAIC02MDcsNyArNjA3LDcgQEAKIAkJcG9ydC0+aWNvdW50LnR4Kys7CiAJCXBvcnQtPnhfY2hhciA9IDA7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCQl3cml0ZWIoeG1pdC0+YnVmW3htaXQtPnRhaWxdLCAmY2hhbm5lbC0+ZGF0YSk7CiAJCVpTREVMQVkoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCmluZGV4IDlkYWRhYTExLi5iNGIxMjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKQEAgLTk4OSw3ICs5ODksNyBAQAogCQkJeyAgICAgNTAsIEI1MCAgICAgfSwKIAkJfTsKIAotCQljZmxhZyA9IENfQkFVRChjaC0+dWFydF9wb3J0LmluZm8tPnBvcnQudHR5KTsKKwkJY2ZsYWcgPSBDX0JBVUQoY2gtPnVhcnRfcG9ydC5zdGF0ZS0+cG9ydC50dHkpOwogCQliYXVkID0gOTYwMDsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmF1ZF9yYXRlcyk7IGkrKykgewogCQkJaWYgKGJhdWRfcmF0ZXNbaV0uY2ZsYWcgPT0gY2ZsYWcpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCmluZGV4IDAwZjQ1NzcuLjc0MzljMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGxvY2tfZmxhZ3MpOwotCXRlcm1pb3MgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eS0+dGVybWlvczsKKwl0ZXJtaW9zID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT50ZXJtaW9zOwogCWlmIChjaCA9PSB0ZXJtaW9zLT5jX2NjW1ZTVEFSVF0pCiAJCWNoYW5uZWwtPmNoX2JkLT5iZF9vcHMtPnNlbmRfc3RhcnRfY2hhcmFjdGVyKGNoYW5uZWwpOwogCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAljaGFubmVsLT5jaF9jYWNoZWRfbHNyID0gMDsKIAljaGFubmVsLT5jaF9zdG9wc19zZW50ID0gMDsKIAotCXRlcm1pb3MgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eS0+dGVybWlvczsKKwl0ZXJtaW9zID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT50ZXJtaW9zOwogCWNoYW5uZWwtPmNoX2NfY2ZsYWcJPSB0ZXJtaW9zLT5jX2NmbGFnOwogCWNoYW5uZWwtPmNoX2NfaWZsYWcJPSB0ZXJtaW9zLT5jX2lmbGFnOwogCWNoYW5uZWwtPmNoX2Nfb2ZsYWcJPSB0ZXJtaW9zLT5jX29mbGFnOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJanNtX3ByaW50ayhDTE9TRSwgSU5GTywgJmNoYW5uZWwtPmNoX2JkLT5wY2lfZGV2LCAic3RhcnRcbiIpOwogCiAJYmQgPSBjaGFubmVsLT5jaF9iZDsKLQl0cyA9IHBvcnQtPmluZm8tPnBvcnQudHR5LT50ZXJtaW9zOworCXRzID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT50ZXJtaW9zOwogCiAJY2hhbm5lbC0+Y2hfZmxhZ3MgJj0gfihDSF9TVE9QSSk7CiAKQEAgLTUzMCw3ICs1MzAsNyBAQAogCWlmICghY2gpCiAJCXJldHVybjsKIAotCXRwID0gY2gtPnVhcnRfcG9ydC5pbmZvLT5wb3J0LnR0eTsKKwl0cCA9IGNoLT51YXJ0X3BvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJYmQgPSBjaC0+Y2hfYmQ7CiAJaWYoIWJkKQpAQCAtODQ5LDcgKzg0OSw3IEBACiAJdTE2IHRhaWw7CiAJdTE2IHRtYXNrOwogCXUzMiByZW1haW47Ci0JaW50IHRlbXBfdGFpbCA9IHBvcnQtPmluZm8tPnhtaXQudGFpbDsKKwlpbnQgdGVtcF90YWlsID0gcG9ydC0+c3RhdGUtPnhtaXQudGFpbDsKIAlzdHJ1Y3QganNtX2NoYW5uZWwgKmNoYW5uZWwgPSAoc3RydWN0IGpzbV9jaGFubmVsICopcG9ydDsKIAogCXRtYXNrID0gV1FVRVVFTUFTSzsKQEAgLTg2NSwxMCArODY1LDEwIEBACiAJZGF0YV9jb3VudCA9IDA7CiAJaWYgKGJ1ZmNvdW50ID49IHJlbWFpbikgewogCQlidWZjb3VudCAtPSByZW1haW47Ci0JCXdoaWxlICgocG9ydC0+aW5mby0+eG1pdC5oZWFkICE9IHRlbXBfdGFpbCkgJiYKKwkJd2hpbGUgKChwb3J0LT5zdGF0ZS0+eG1pdC5oZWFkICE9IHRlbXBfdGFpbCkgJiYKIAkJKGRhdGFfY291bnQgPCByZW1haW4pKSB7CiAJCQljaGFubmVsLT5jaF93cXVldWVbaGVhZCsrXSA9Ci0JCQlwb3J0LT5pbmZvLT54bWl0LmJ1Zlt0ZW1wX3RhaWxdOworCQkJcG9ydC0+c3RhdGUtPnhtaXQuYnVmW3RlbXBfdGFpbF07CiAKIAkJCXRlbXBfdGFpbCsrOwogCQkJdGVtcF90YWlsICY9IChVQVJUX1hNSVRfU0laRSAtIDEpOwpAQCAtODgwLDEwICs4ODAsMTAgQEAKIAlkYXRhX2NvdW50MSA9IDA7CiAJaWYgKGJ1ZmNvdW50ID4gMCkgewogCQlyZW1haW4gPSBidWZjb3VudDsKLQkJd2hpbGUgKChwb3J0LT5pbmZvLT54bWl0LmhlYWQgIT0gdGVtcF90YWlsKSAmJgorCQl3aGlsZSAoKHBvcnQtPnN0YXRlLT54bWl0LmhlYWQgIT0gdGVtcF90YWlsKSAmJgogCQkJKGRhdGFfY291bnQxIDwgcmVtYWluKSkgewogCQkJY2hhbm5lbC0+Y2hfd3F1ZXVlW2hlYWQrK10gPQotCQkJCXBvcnQtPmluZm8tPnhtaXQuYnVmW3RlbXBfdGFpbF07CisJCQkJcG9ydC0+c3RhdGUtPnhtaXQuYnVmW3RlbXBfdGFpbF07CiAKIAkJCXRlbXBfdGFpbCsrOwogCQkJdGVtcF90YWlsICY9IChVQVJUX1hNSVRfU0laRSAtIDEpOwpAQCAtODkyLDcgKzg5Miw3IEBACiAJCX0KIAl9CiAKLQlwb3J0LT5pbmZvLT54bWl0LnRhaWwgPSB0ZW1wX3RhaWw7CisJcG9ydC0+c3RhdGUtPnhtaXQudGFpbCA9IHRlbXBfdGFpbDsKIAogCWRhdGFfY291bnQgKz0gZGF0YV9jb3VudDE7CiAJaWYgKGRhdGFfY291bnQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCmluZGV4IDYxMWM5N2EuLmJlYTVjMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwpAQCAtMjg2LDcgKzI4Niw3IEBACiB7CiAjaWZkZWYgQ09ORklHX1NFUklBTF9NMzJSX1BMRFNJTwogCXN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqKXBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCiAJaWYgKCEodXAtPmllciAmIFVBUlRfSUVSX1RIUkkpKSB7CiAJCXVwLT5pZXIgfD0gVUFSVF9JRVJfVEhSSTsKQEAgLTMyNSw3ICszMjUsNyBAQAogCiBzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCwgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaDsKIAl1bnNpZ25lZCBjaGFyIGZsYWc7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKQEAgLTM5OCw3ICszOTgsNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXApCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWludCBjb3VudDsKIAogCWlmICh1cC0+cG9ydC54X2NoYXIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21heDMxMDAuYyBiL2RyaXZlcnMvc2VyaWFsL21heDMxMDAuYwppbmRleCA5ZmQzM2U1Li4zYzMwYzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tYXgzMTAwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbWF4MzEwMC5jCkBAIC0xODQsNyArMTg0LDcgQEAKIHsKIAlzdHJ1Y3QgbWF4MzEwMF9wb3J0ICpzID0gKHN0cnVjdCBtYXgzMTAwX3BvcnQgKilkYXRhOwogCi0JaWYgKHMtPnBvcnQuaW5mbykgeworCWlmIChzLT5wb3J0LnN0YXRlKSB7CiAJCW1heDMxMDBfZG93b3JrKHMpOwogCQltb2RfdGltZXIoJnMtPnRpbWVyLCBqaWZmaWVzICsgcy0+cG9sbF90aW1lKTsKIAl9CkBAIC0yNjEsNyArMjYxLDcgQEAKIAlpbnQgcnhjaGFyczsKIAl1MTYgdHgsIHJ4OwogCWludCBjb25mLCBjY29uZiwgcnRzLCBjcnRzOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnMtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlkZXZfZGJnKCZzLT5zcGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTMwNyw4ICszMDcsOCBAQAogCQkJfQogCQl9CiAKLQkJaWYgKHJ4Y2hhcnMgPiAxNiAmJiBzLT5wb3J0LmluZm8tPnBvcnQudHR5ICE9IE5VTEwpIHsKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHMtPnBvcnQuaW5mby0+cG9ydC50dHkpOworCQlpZiAocnhjaGFycyA+IDE2ICYmIHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5ICE9IE5VTEwpIHsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5KTsKIAkJCXJ4Y2hhcnMgPSAwOwogCQl9CiAJCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKQEAgLTMyMCw4ICszMjAsOCBAQAogCQkgICghdWFydF9jaXJjX2VtcHR5KHhtaXQpICYmCiAJCSAgICF1YXJ0X3R4X3N0b3BwZWQoJnMtPnBvcnQpKSkpOwogCi0JaWYgKHJ4Y2hhcnMgPiAwICYmIHMtPnBvcnQuaW5mby0+cG9ydC50dHkgIT0gTlVMTCkKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocy0+cG9ydC5pbmZvLT5wb3J0LnR0eSk7CisJaWYgKHJ4Y2hhcnMgPiAwICYmIHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5ICE9IE5VTEwpCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG1heDMxMDBfaXJxKGludCBpcnFubywgdm9pZCAqZGV2X2lkKQpAQCAtNDI5LDcgKzQyOSw3IEBACiAJaW50IGJhdWQgPSAwOwogCXVuc2lnbmVkIGNmbGFnOwogCXUzMiBwYXJhbV9uZXcsIHBhcmFtX21hc2ssIHBhcml0eSA9IDA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHMtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJZGV2X2RiZygmcy0+c3BpLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCWlmICghdHR5KQpAQCAtNTI5LDcgKzUyOSw3IEBACiAJCQlNQVgzMTAwX1NUQVRVU19PRTsKIAogCS8qIHdlIGFyZSBzZW5kaW5nIGNoYXIgZnJvbSBhIHdvcmtxdWV1ZSBzbyBlbmFibGUgKi8KLQlzLT5wb3J0LmluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJcy0+cG9ydC5zdGF0ZS0+cG9ydC50dHktPmxvd19sYXRlbmN5ID0gMTsKIAogCWlmIChzLT5wb2xsX3RpbWUgPiAwKQogCQlkZWxfdGltZXJfc3luYygmcy0+dGltZXIpOwpAQCAtOTI1LDMgKzkyNSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDMxMDAgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpcGVsbEBldm9sd2FyZS5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTptYXgzMTAwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tY2YuYyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCmluZGV4IDBlZWZiMDcuLmI0NDM4MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJdWFydF9pbnNlcnRfY2hhcihwb3J0LCBzdGF0dXMsIE1DRlVBUlRfVVNSX1JYT1ZFUlJVTiwgY2gsIGZsYWcpOwogCX0KIAotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPmluZm8tPnBvcnQudHR5KTsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5zdGF0ZS0+cG9ydC50dHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzMSw3ICszMzEsNyBAQAogc3RhdGljIHZvaWQgbWNmX3R4X2NoYXJzKHN0cnVjdCBtY2ZfdWFydCAqcHApCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcC0+cG9ydDsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CiAJCS8qIFNlbmQgc3BlY2lhbCBjaGFyIC0gcHJvYmFibHkgZmxvdyBjb250cm9sICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IGFiYmQxNDYuLmQ3YmNkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03NDUsNyArNzQ1LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBtcGM1Mnh4X3VhcnRfaW50X3J4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaCwgZmxhZzsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAKQEAgLTgxMiw3ICs4MTIsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIG1wYzUyeHhfdWFydF9pbnRfdHhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAkvKiBQcm9jZXNzIG91dCBvZiBiYW5kIGNoYXJzICovCiAJaWYgKHBvcnQtPnhfY2hhcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCmluZGV4IDYxZDNhZGUuLmI1NDk2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKQEAgLTkzNiw3ICs5MzYsNyBAQAogc3RhdGljIGludCBtcHNjX3J4X2ludHIoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkKIHsKIAlzdHJ1Y3QgbXBzY19yeF9kZXNjICpyeHJlOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwaS0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcGktPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXUzMgljbWRzdGF0LCBieXRlc19pbiwgaTsKIAlpbnQJcmMgPSAwOwogCXU4CSpicDsKQEAgLTExMDksNyArMTEwOSw3IEBACiAKIHN0YXRpYyB2b2lkIG1wc2NfY29weV90eF9kYXRhKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBpLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBpLT5wb3J0LnN0YXRlLT54bWl0OwogCXU4ICpicDsKIAl1MzIgaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5jCmluZGV4IGY3YzI0YmEuLmIwNWM1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAogc3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHNyOwogCiAJLyoKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiBzdGF0aWMgdm9pZCBoYW5kbGVfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAJc3RydWN0IG1zbV9wb3J0ICptc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOwogCWludCBzZW50X3R4OwogCkBAIC0xNjksNyArMTY5LDcgQEAKIHsKIAltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUkVTRVRfQ1RTLCBVQVJUX0NSKTsKIAlwb3J0LT5pY291bnQuY3RzKys7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtc21faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL211eC5jIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKaW5kZXggOTUzYTVmZi4uNzU3MWFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXV4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKQEAgLTE5OSw3ICsxOTksNyBAQAogc3RhdGljIHZvaWQgbXV4X3dyaXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IGNvdW50OwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCWlmKHBvcnQtPnhfY2hhcikgewogCQlVQVJUX1BVVF9DSEFSKHBvcnQsIHBvcnQtPnhfY2hhcik7CkBAIC0yNDMsNyArMjQzLDcgQEAKIHN0YXRpYyB2b2lkIG11eF9yZWFkKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IGRhdGE7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJX191MzIgc3RhcnRfY291bnQgPSBwb3J0LT5pY291bnQucng7CiAKIAl3aGlsZSgxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYwppbmRleCAzZTVkZGE4Li43NzM1YzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL25ldHgtc2VyaWFsLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0eF90cmFuc21pdF9idWZmZXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CiAJCXdyaXRlbChwb3J0LT54X2NoYXIsIHBvcnQtPm1lbWJhc2UgKyBVQVJUX0RSKTsKQEAgLTE4NSw3ICsxODUsNyBAQAogCiBzdGF0aWMgdm9pZCBuZXR4X3R4aW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQocG9ydCkpIHsKIAkJbmV0eF9zdG9wX3R4KHBvcnQpOwpAQCAtMjAxLDcgKzIwMSw3IEBACiBzdGF0aWMgdm9pZCBuZXR4X3J4aW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJdW5zaWduZWQgY2hhciByeCwgZmxnLCBzdGF0dXM7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAKIAl3aGlsZSAoIShyZWFkbChwb3J0LT5tZW1iYXNlICsgVUFSVF9GUikgJiBGUl9SWEZFKSkgewogCQlyeCA9IHJlYWRsKHBvcnQtPm1lbWJhc2UgKyBVQVJUX0RSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL253cHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKaW5kZXggOWUxNTBiMS4uZTFhYjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogc3RhdGljIGlycXJldHVybl90IG53cHNlcmlhbF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBud3BzZXJpYWxfcG9ydCAqdXAgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJaXJxcmV0dXJuX3QgcmV0OwogCXVuc2lnbmVkIGludCBpaXI7CiAJdW5zaWduZWQgY2hhciBjaDsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCXN0cnVjdCBud3BzZXJpYWxfcG9ydCAqdXA7CiAJc3RydWN0IGNpcmNfYnVmICp4bWl0OwogCXVwID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBud3BzZXJpYWxfcG9ydCwgcG9ydCk7Ci0JeG1pdCAgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwl4bWl0ICA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKIAkJbndwc2VyaWFsX3B1dGNoYXIodXAsIHVwLT5wb3J0LnhfY2hhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKaW5kZXggOWMxMjQzZi4uMDcwMGNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwpAQCAtMjQyLDEyICsyNDIsMTIgQEAKIAl9CiAKIAkvKiBTYW5pdHkgY2hlY2ssIG1ha2Ugc3VyZSB0aGUgb2xkIGJ1ZyBpcyBubyBsb25nZXIgaGFwcGVuaW5nICovCi0JaWYgKHVhcC0+cG9ydC5pbmZvID09IE5VTEwgfHwgdWFwLT5wb3J0LmluZm8tPnBvcnQudHR5ID09IE5VTEwpIHsKKwlpZiAodWFwLT5wb3J0LnN0YXRlID09IE5VTEwgfHwgdWFwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eSA9PSBOVUxMKSB7CiAJCVdBUk5fT04oMSk7CiAJCSh2b2lkKXJlYWRfenNkYXRhKHVhcCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQl0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJdHR5ID0gdWFwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAogCXdoaWxlICgxKSB7CiAJCWVycm9yID0gMDsKQEAgLTM2OSw3ICszNjksNyBAQAogCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdWFwLT5wb3J0LAogCQkJCQkgICAgICAgIShzdGF0dXMgJiBDVFMpKTsKIAotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVhcC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWFwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgQlJLX0FCUlQpCkBAIC00MjAsOSArNDIwLDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1YXAtPnBvcnQuaW5mbyA9PSBOVUxMKQorCWlmICh1YXAtPnBvcnQuc3RhdGUgPT0gTlVMTCkKIAkJZ290byBhY2tfdHhfaW50OwotCXhtaXQgPSAmdWFwLT5wb3J0LmluZm8tPnhtaXQ7CisJeG1pdCA9ICZ1YXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkgewogCQl1YXJ0X3dyaXRlX3dha2V1cCgmdWFwLT5wb3J0KTsKIAkJZ290byBhY2tfdHhfaW50OwpAQCAtNjU1LDcgKzY1NSw3IEBACiAJCXBvcnQtPmljb3VudC50eCsrOwogCQlwb3J0LT54X2NoYXIgPSAwOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAkJd3JpdGVfenNkYXRhKHVhcCwgeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKIAkJenNzeW5jKHVhcCk7CkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogCXN0YXRlID0gcG16X3VhcnRfcmVnLnN0YXRlICsgdWFwLT5wb3J0LmxpbmU7CiAKIAltdXRleF9sb2NrKCZwbXpfaXJxX211dGV4KTsKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnN0YXRlLT5wb3J0Lm11dGV4KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1YXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCkBAIC0xNjc2LDcgKzE2NzYsNyBAQAogCS8qIFNodXQgdGhlIGNoaXAgZG93biAqLwogCXBtel9zZXRfc2NjX3Bvd2VyKHVhcCwgMCk7CiAKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+cG9ydC5tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZwbXpfaXJxX211dGV4KTsKIAogCXBtel9kZWJ1Zygic3VzcGVuZCwgc3dpdGNoaW5nIGNvbXBsZXRlXG4iKTsKQEAgLTE3MDUsNyArMTcwNSw3IEBACiAJc3RhdGUgPSBwbXpfdWFydF9yZWcuc3RhdGUgKyB1YXAtPnBvcnQubGluZTsKIAogCW11dGV4X2xvY2soJnBtel9pcnFfbXV0ZXgpOwotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPnBvcnQubXV0ZXgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVhcC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJaWYgKCFaU19JU19PUEVOKHVhcCkgJiYgIVpTX0lTX0NPTlModWFwKSkgewpAQCAtMTczNyw3ICsxNzM3LDcgQEAKIAl9CiAKICBiYWlsOgotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5wb3J0Lm11dGV4KTsKIAltdXRleF91bmxvY2soJnBtel9pcnFfbXV0ZXgpOwogCiAJLyogUmlnaHQgbm93LCB3ZSBkZWFsIHdpdGggZGVsYXkgYnkgYmxvY2tpbmcgaGVyZSwgSSdsbCBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG54OHh4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYwppbmRleCAxYmI4ZjFiLi4wYWE3NWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJaWYgKGNoYW5nZWQgJiBUSU9DTV9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCBzdGF0dXMgJiBUSU9DTV9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIC8qCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlzdHJ1Y3QgcG54OHh4eF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3QgcG54OHh4eF9wb3J0ICopZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHNwb3J0LT5wb3J0LmluZm8pIHsKKwlpZiAoc3BvcnQtPnBvcnQuc3RhdGUpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKIAkJcG54OHh4eF9tY3RybF9jaGVjayhzcG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTE4MSw3ICsxODEsNyBAQAogCiBzdGF0aWMgdm9pZCBwbng4eHh4X3J4X2NoYXJzKHN0cnVjdCBwbng4eHh4X3BvcnQgKnNwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzcG9ydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAKIAlzdGF0dXMgPSBGSUZPX1RPX1NNKHNlcmlhbF9pbihzcG9ydCwgUE5YOFhYWF9GSUZPKSkgfApAQCAtMjQzLDcgKzI0Myw3IEBACiAKIHN0YXRpYyB2b2lkIHBueDh4eHhfdHhfY2hhcnMoc3RydWN0IHBueDh4eHhfcG9ydCAqc3BvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LnN0YXRlLT54bWl0OwogCiAJaWYgKHNwb3J0LT5wb3J0LnhfY2hhcikgewogCQlzZXJpYWxfb3V0KHNwb3J0LCBQTlg4WFhYX0ZJRk8sIHNwb3J0LT5wb3J0LnhfY2hhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IGE0OGE4YTEuLjY0NDNiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC05Niw3ICs5Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICp1cCwgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IGNoLCBmbGFnOwogCWludCBtYXhfY291bnQgPSAyNTY7CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9weGFfcG9ydCAqdXApCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWludCBjb3VudDsKIAogCWlmICh1cC0+cG9ydC54X2NoYXIpIHsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ1RTKQogCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKCZ1cC0+cG9ydCwgc3RhdHVzICYgVUFSVF9NU1JfQ1RTKTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCA5NDUzMGYwLi43ZjVlMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJaWYgKGNoYW5nZWQgJiBUSU9DTV9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCBzdGF0dXMgJiBUSU9DTV9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIC8qCkBAIC0xMjksNyArMTI5LDcgQEAKIAlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gKHN0cnVjdCBzYTExMDBfcG9ydCAqKWRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChzcG9ydC0+cG9ydC5pbmZvKSB7CisJaWYgKHNwb3J0LT5wb3J0LnN0YXRlKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJCXNhMTEwMF9tY3RybF9jaGVjayhzcG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTE4OSw3ICsxODksNyBAQAogc3RhdGljIHZvaWQKIHNhMTEwMF9yeF9jaGFycyhzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzcG9ydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAKIAlzdGF0dXMgPSBVVFNSMV9UT19TTShVQVJUX0dFVF9VVFNSMShzcG9ydCkpIHwKQEAgLTIzOSw3ICsyMzksNyBAQAogCiBzdGF0aWMgdm9pZCBzYTExMDBfdHhfY2hhcnMoc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmc3BvcnQtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmc3BvcnQtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlpZiAoc3BvcnQtPnBvcnQueF9jaGFyKSB7CiAJCVVBUlRfUFVUX0NIQVIoc3BvcnQsIHNwb3J0LT5wb3J0LnhfY2hhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKaW5kZXggYzg4NTFhMC4uMTUyM2U4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiB7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0ID0gZGV2X2lkOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmb3VycG9ydC0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgdWZjb24sIGNoLCBmbGFnLCB1ZnN0YXQsIHVlcnN0YXQ7CiAJaW50IG1heF9jb3VudCA9IDY0OwogCkBAIC0yODEsNyArMjgxLDcgQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQgPSBpZDsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJm91cnBvcnQtPnBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCWludCBjb3VudCA9IDI1NjsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKQEAgLTk5MiwxMCArOTkyLDEwIEBACiAJCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvczsKIAkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAotCQlpZiAodXBvcnQtPmluZm8gPT0gTlVMTCkKKwkJaWYgKHVwb3J0LT5zdGF0ZSA9PSBOVUxMKQogCQkJZ290byBleGl0OwogCi0JCXR0eSA9IHVwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwkJdHR5ID0gdXBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAogCQlpZiAodHR5ID09IE5VTEwpCiAJCQlnb3RvIGV4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYjEyNTAtZHVhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCmluZGV4IDMxOWU4YjguLmEyZjJiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCkBAIC0zODQsMTMgKzM4NCwxMyBAQAogCQl1YXJ0X2luc2VydF9jaGFyKHVwb3J0LCBzdGF0dXMsIE1fRFVBUlRfT1ZSVU5fRVJSLCBjaCwgZmxhZyk7CiAJfQogCi0JdHR5X2ZsaXBfYnVmZmVyX3B1c2godXBvcnQtPmluZm8tPnBvcnQudHR5KTsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh1cG9ydC0+c3RhdGUtPnBvcnQudHR5KTsKIH0KIAogc3RhdGljIHZvaWQgc2JkX3RyYW5zbWl0X2NoYXJzKHN0cnVjdCBzYmRfcG9ydCAqc3BvcnQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSAmc3BvcnQtPnBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LnN0YXRlLT54bWl0OwogCXVuc2lnbmVkIGludCBtYXNrOwogCWludCBzdG9wX3R4OwogCkBAIC00NDAsNyArNDQwLDcgQEAKIAogCWlmIChkZWx0YSAmICgoTV9EVUFSVF9JTl9QSU4yX1ZBTCB8IE1fRFVBUlRfSU5fUElOMF9WQUwpIDw8CiAJCSAgICAgU19EVUFSVF9JTl9QSU5fQ0hORykpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cG9ydC0+c3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2JkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYzI2eHguYyBiL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCmluZGV4IGUwYmUxMWMuLjc1MDM4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCkBAIC0xNDAsOCArMTQwLDggQEAKIAljaGFyIGZsYWc7CiAJdTggc3RhdHVzOwogCi0JaWYgKHBvcnQtPmluZm8gIT0gTlVMTCkJCS8qIFVub3BlbmVkIHNlcmlhbCBjb25zb2xlICovCi0JCXR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCWlmIChwb3J0LT5zdGF0ZSAhPSBOVUxMKQkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KKwkJdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCiAJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CiAJCXN0YXR1cyA9IFJFQURfU0NfUE9SVChwb3J0LCBTUik7CkBAIC0xOTAsMTAgKzE5MCwxMCBAQAogewogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdDsKIAotCWlmICghcG9ydC0+aW5mbykKKwlpZiAoIXBvcnQtPnN0YXRlKQogCQlyZXR1cm47CiAKLQl4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZChwb3J0KSkgewogCQlzYzI2eHhfZGlzYWJsZV9pcnEocG9ydCwgSU1SX1RYUkRZKTsKIAkJcmV0dXJuOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAvKiBwb3J0LT5sb2NrIGhlbGQgYnkgY2FsbGVyLiAgKi8KIHN0YXRpYyB2b2lkIHNjMjZ4eF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCXdoaWxlICghdWFydF9jaXJjX2VtcHR5KHhtaXQpKSB7CiAJCWlmICghKFJFQURfU0NfUE9SVChwb3J0LCBTUikgJiBTUl9UWFJEWSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IGIwYmIyOWQuLjE2ODliZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4gLyogZm9yIHNlcmlhbF9zdGF0ZSBhbmQgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCAqLworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCkBAIC01Miw4ICs1Miw2IEBACiAKICNkZWZpbmUgSElHSF9CSVRTX09GRlNFVAkoKHNpemVvZihsb25nKS1zaXplb2YoaW50KSkqOCkKIAotI2RlZmluZSB1YXJ0X3VzZXJzKHN0YXRlKQkoKHN0YXRlKS0+Y291bnQgKyAoc3RhdGUpLT5pbmZvLnBvcnQuYmxvY2tlZF9vcGVuKQotCiAjaWZkZWYgQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEUKICNkZWZpbmUgdWFydF9jb25zb2xlKHBvcnQpCSgocG9ydCktPmNvbnMgJiYgKHBvcnQpLT5jb25zLT5pbmRleCA9PSAocG9ydCktPmxpbmUpCiAjZWxzZQpAQCAtNzEsMTkgKzY5LDE5IEBACiAgKi8KIHZvaWQgdWFydF93cml0ZV93YWtldXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gcG9ydC0+aW5mbzsKKwlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBwb3J0LT5zdGF0ZTsKIAkvKgogCSAqIFRoaXMgbWVhbnMgeW91IGNhbGxlZCB0aGlzIGZ1bmN0aW9uIF9hZnRlcl8gdGhlIHBvcnQgd2FzCiAJICogY2xvc2VkLiAgTm8gY29va2llIGZvciB5b3UuCiAJICovCi0JQlVHX09OKCFpbmZvKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50bGV0KTsKKwlCVUdfT04oIXN0YXRlKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZzdGF0ZS0+dGxldCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVhcnRfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtOTQsOSArOTIsOSBAQAogc3RhdGljIHZvaWQgX191YXJ0X3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAKLQlpZiAoIXVhcnRfY2lyY19lbXB0eSgmc3RhdGUtPmluZm8ueG1pdCkgJiYgc3RhdGUtPmluZm8ueG1pdC5idWYgJiYKKwlpZiAoIXVhcnRfY2lyY19lbXB0eSgmc3RhdGUtPnhtaXQpICYmIHN0YXRlLT54bWl0LmJ1ZiAmJgogCSAgICAhdHR5LT5zdG9wcGVkICYmICF0dHktPmh3X3N0b3BwZWQpCiAJCXBvcnQtPm9wcy0+c3RhcnRfdHgocG9ydCk7CiB9CkBAIC0xMDQsNyArMTAyLDcgQEAKIHN0YXRpYyB2b2lkIHVhcnRfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTExNSw3ICsxMTMsNyBAQAogc3RhdGljIHZvaWQgdWFydF90YXNrbGV0X2FjdGlvbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCB1YXJ0X3N0YXRlICopZGF0YTsKLQl0dHlfd2FrZXVwKHN0YXRlLT5pbmZvLnBvcnQudHR5KTsKKwl0dHlfd2FrZXVwKHN0YXRlLT5wb3J0LnR0eSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMTQxLDEyICsxMzksMTIgQEAKICAqLwogc3RhdGljIGludCB1YXJ0X3N0YXJ0dXAoc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCBpbnQgaW5pdF9odykKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWlmIChpbmZvLT5mbGFncyAmIFVJRl9JTklUSUFMSVpFRCkKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMTU0LDI2ICsxNTIsMjYgQEAKIAkgKiBvbmNlIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IG9wZW5lZCB0aGUgcG9ydC4gIEFsc28gc2V0CiAJICogdXAgdGhlIHR0eS0+YWx0X3NwZWVkIGtsdWRnZQogCSAqLwotCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnBvcnQtPnR0eS0+ZmxhZ3MpOwogCi0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQorCWlmICh1cG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04pCiAJCXJldHVybiAwOwogCiAJLyoKIAkgKiBJbml0aWFsaXNlIGFuZCBhbGxvY2F0ZSB0aGUgdHJhbnNtaXQgYW5kIHRlbXBvcmFyeQogCSAqIGJ1ZmZlci4KIAkgKi8KLQlpZiAoIWluZm8tPnhtaXQuYnVmKSB7CisJaWYgKCFzdGF0ZS0+eG1pdC5idWYpIHsKIAkJLyogVGhpcyBpcyBwcm90ZWN0ZWQgYnkgdGhlIHBlciBwb3J0IG11dGV4ICovCiAJCXBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICghcGFnZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCWluZm8tPnhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTsKLQkJdWFydF9jaXJjX2NsZWFyKCZpbmZvLT54bWl0KTsKKwkJc3RhdGUtPnhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTsKKwkJdWFydF9jaXJjX2NsZWFyKCZzdGF0ZS0+eG1pdCk7CiAJfQogCi0JcmV0dmFsID0gcG9ydC0+b3BzLT5zdGFydHVwKHBvcnQpOworCXJldHZhbCA9IHVwb3J0LT5vcHMtPnN0YXJ0dXAodXBvcnQpOwogCWlmIChyZXR2YWwgPT0gMCkgewogCQlpZiAoaW5pdF9odykgewogCQkJLyoKQEAgLTE4NSwyMCArMTgzLDIwIEBACiAJCQkgKiBTZXR1cCB0aGUgUlRTIGFuZCBEVFIgc2lnbmFscyBvbmNlIHRoZQogCQkJICogcG9ydCBpcyBvcGVuIGFuZCByZWFkeSB0byByZXNwb25kLgogCQkJICovCi0JCQlpZiAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKLQkJCQl1YXJ0X3NldF9tY3RybChwb3J0LCBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOworCQkJaWYgKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQorCQkJCXVhcnRfc2V0X21jdHJsKHVwb3J0LCBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOwogCQl9CiAKLQkJaWYgKGluZm8tPmZsYWdzICYgVUlGX0NUU19GTE9XKSB7Ci0JCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJCWlmICghKHBvcnQtPm9wcy0+Z2V0X21jdHJsKHBvcnQpICYgVElPQ01fQ1RTKSkKLQkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7Ci0JCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgeworCQkJc3Bpbl9sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCQkJaWYgKCEodXBvcnQtPm9wcy0+Z2V0X21jdHJsKHVwb3J0KSAmIFRJT0NNX0NUUykpCisJCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdXBvcnQtPmxvY2spOwogCQl9CiAKLQkJaW5mby0+ZmxhZ3MgfD0gVUlGX0lOSVRJQUxJWkVEOworCQlzZXRfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPmZsYWdzKTsKIAotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnBvcnQtPnR0eS0+ZmxhZ3MpOwogCX0KIAogCWlmIChyZXR2YWwgJiYgY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTIxNCw5ICsyMTIsOSBAQAogICovCiBzdGF0aWMgdm9pZCB1YXJ0X3NodXRkb3duKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwogCiAJLyoKIAkgKiBTZXQgdGhlIFRUWSBJTyBlcnJvciBtYXJrZXIKQEAgLTIyNCwxNCArMjIyLDEyIEBACiAJaWYgKHR0eSkKIAkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAotCWlmIChpbmZvLT5mbGFncyAmIFVJRl9JTklUSUFMSVpFRCkgewotCQlpbmZvLT5mbGFncyAmPSB+VUlGX0lOSVRJQUxJWkVEOwotCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5mbGFncykpIHsKIAkJLyoKIAkJICogVHVybiBvZmYgRFRSIGFuZCBSVFMgZWFybHkuCiAJCSAqLwogCQlpZiAoIXR0eSB8fCAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQotCQkJdWFydF9jbGVhcl9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworCQkJdWFydF9jbGVhcl9tY3RybCh1cG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAogCQkvKgogCQkgKiBjbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3M6IHdlIG1heSBmcmVlCkBAIC0yNDAsMzAgKzIzNiwzMCBAQAogCQkgKiBhbnkgb3V0c3RhbmRpbmcgZmlsZSBkZXNjcmlwdG9ycyBzaG91bGQgYmUgcG9pbnRpbmcgYXQKIAkJICogaHVuZ191cF90dHlfZm9wcyBub3cuCiAJCSAqLwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkJLyoKIAkJICogRnJlZSB0aGUgSVJRIGFuZCBkaXNhYmxlIHRoZSBwb3J0LgogCQkgKi8KLQkJcG9ydC0+b3BzLT5zaHV0ZG93bihwb3J0KTsKKwkJdXBvcnQtPm9wcy0+c2h1dGRvd24odXBvcnQpOwogCiAJCS8qCiAJCSAqIEVuc3VyZSB0aGF0IHRoZSBJUlEgaGFuZGxlciBpc24ndCBydW5uaW5nIG9uIGFub3RoZXIgQ1BVLgogCQkgKi8KLQkJc3luY2hyb25pemVfaXJxKHBvcnQtPmlycSk7CisJCXN5bmNocm9uaXplX2lycSh1cG9ydC0+aXJxKTsKIAl9CiAKIAkvKgogCSAqIGtpbGwgb2ZmIG91ciB0YXNrbGV0CiAJICovCi0JdGFza2xldF9raWxsKCZpbmZvLT50bGV0KTsKKwl0YXNrbGV0X2tpbGwoJnN0YXRlLT50bGV0KTsKIAogCS8qCiAJICogRnJlZSB0aGUgdHJhbnNtaXQgYnVmZmVyIHBhZ2UuCiAJICovCi0JaWYgKGluZm8tPnhtaXQuYnVmKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylpbmZvLT54bWl0LmJ1Zik7Ci0JCWluZm8tPnhtaXQuYnVmID0gTlVMTDsKKwlpZiAoc3RhdGUtPnhtaXQuYnVmKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzdGF0ZS0+eG1pdC5idWYpOworCQlzdGF0ZS0+eG1pdC5idWYgPSBOVUxMOwogCX0KIH0KIApAQCAtNDMwLDE1ICs0MjYsMTYgQEAKIHN0YXRpYyB2b2lkCiB1YXJ0X2NoYW5nZV9zcGVlZChzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHN0YXRlLT5pbmZvLnBvcnQudHR5OwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIG5vIHR0eSwgdGVybWlvcywgb3IgdGhlIHBvcnQgZG9lcyBub3QgZXhpc3QsCiAJICogdGhlbiB3ZSBjYW4ndCBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoaXMgcG9ydC4KIAkgKi8KLQlpZiAoIXR0eSB8fCAhdHR5LT50ZXJtaW9zIHx8IHBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQorCWlmICghdHR5IHx8ICF0dHktPnRlcm1pb3MgfHwgdXBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQogCQlyZXR1cm47CiAKIAl0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOwpAQCAtNDQ3LDE2ICs0NDQsMTYgQEAKIAkgKiBTZXQgZmxhZ3MgYmFzZWQgb24gdGVybWlvcyBjZmxhZwogCSAqLwogCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykKLQkJc3RhdGUtPmluZm8uZmxhZ3MgfD0gVUlGX0NUU19GTE9XOworCQlzZXRfYml0KEFTWU5DQl9DVFNfRkxPVywgJnBvcnQtPmZsYWdzKTsKIAllbHNlCi0JCXN0YXRlLT5pbmZvLmZsYWdzICY9IH5VSUZfQ1RTX0ZMT1c7CisJCWNsZWFyX2JpdChBU1lOQ0JfQ1RTX0ZMT1csICZwb3J0LT5mbGFncyk7CiAKIAlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKLQkJc3RhdGUtPmluZm8uZmxhZ3MgJj0gflVJRl9DSEVDS19DRDsKKwkJY2xlYXJfYml0KEFTWU5DQl9DSEVDS19DRCwgJnBvcnQtPmZsYWdzKTsKIAllbHNlCi0JCXN0YXRlLT5pbmZvLmZsYWdzIHw9IFVJRl9DSEVDS19DRDsKKwkJc2V0X2JpdChBU1lOQ0JfQ0hFQ0tfQ0QsICZwb3J0LT5mbGFncyk7CiAKLQlwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHBvcnQsIHRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKKwl1cG9ydC0+b3BzLT5zZXRfdGVybWlvcyh1cG9ydCwgdGVybWlvcywgb2xkX3Rlcm1pb3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtNDgyLDcgKzQ3OSw3IEBACiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotCXJldHVybiBfX3VhcnRfcHV0X2NoYXIoc3RhdGUtPnBvcnQsICZzdGF0ZS0+aW5mby54bWl0LCBjaCk7CisJcmV0dXJuIF9fdWFydF9wdXRfY2hhcihzdGF0ZS0+dWFydF9wb3J0LCAmc3RhdGUtPnhtaXQsIGNoKTsKIH0KIAogc3RhdGljIHZvaWQgdWFydF9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNTA4LDggKzUwNSw4IEBACiAJCXJldHVybiAtRUwzSExUOwogCX0KIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKLQljaXJjID0gJnN0YXRlLT5pbmZvLnhtaXQ7CisJcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CisJY2lyYyA9ICZzdGF0ZS0+eG1pdDsKIAogCWlmICghY2lyYy0+YnVmKQogCQlyZXR1cm4gMDsKQEAgLTUzOSw5ICs1MzYsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+cG9ydC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IHVhcnRfY2lyY19jaGFyc19mcmVlKCZzdGF0ZS0+aW5mby54bWl0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+cG9ydC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gdWFydF9jaXJjX2NoYXJzX2ZyZWUoJnN0YXRlLT54bWl0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTUxLDkgKzU0OCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gdWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoJnN0YXRlLT5pbmZvLnhtaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT51YXJ0X3BvcnQtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSB1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmc3RhdGUtPnhtaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT51YXJ0X3BvcnQtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NzIsMTEgKzU2OSwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JcG9ydCA9IHN0YXRlLT5wb3J0OworCXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXByX2RlYnVnKCJ1YXJ0X2ZsdXNoX2J1ZmZlciglZCkgY2FsbGVkXG4iLCB0dHktPmluZGV4KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JdWFydF9jaXJjX2NsZWFyKCZzdGF0ZS0+aW5mby54bWl0KTsKKwl1YXJ0X2NpcmNfY2xlYXIoJnN0YXRlLT54bWl0KTsKIAlpZiAocG9ydC0+b3BzLT5mbHVzaF9idWZmZXIpCiAJCXBvcnQtPm9wcy0+Zmx1c2hfYnVmZmVyKHBvcnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTU5MCw3ICs1ODcsNyBAQAogc3RhdGljIHZvaWQgdWFydF9zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwb3J0LT5vcHMtPnNlbmRfeGNoYXIpCkBAIC02MTMsMTMgKzYxMCwxMyBAQAogCQl1YXJ0X3NlbmRfeGNoYXIodHR5LCBTVE9QX0NIQVIodHR5KSk7CiAKIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykKLQkJdWFydF9jbGVhcl9tY3RybChzdGF0ZS0+cG9ydCwgVElPQ01fUlRTKTsKKwkJdWFydF9jbGVhcl9tY3RybChzdGF0ZS0+dWFydF9wb3J0LCBUSU9DTV9SVFMpOwogfQogCiBzdGF0aWMgdm9pZCB1YXJ0X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAogCWlmIChJX0lYT0ZGKHR0eSkpIHsKIAkJaWYgKHBvcnQtPnhfY2hhcikKQEAgLTYzNSwzNSArNjMyLDM2IEBACiBzdGF0aWMgaW50IHVhcnRfZ2V0X2luZm8oc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLAogCQkJIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CiAKIAltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwogCiAJLyogRW5zdXJlIHRoZSBzdGF0ZSB3ZSBjb3B5IGlzIGNvbnNpc3RlbnQgYW5kIG5vIGhhcmR3YXJlIGNoYW5nZXMKIAkgICBvY2N1ciBhcyB3ZSBnbyAqLwotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCi0JdG1wLnR5cGUJICAgID0gcG9ydC0+dHlwZTsKLQl0bXAubGluZQkgICAgPSBwb3J0LT5saW5lOwotCXRtcC5wb3J0CSAgICA9IHBvcnQtPmlvYmFzZTsKKwl0bXAudHlwZQkgICAgPSB1cG9ydC0+dHlwZTsKKwl0bXAubGluZQkgICAgPSB1cG9ydC0+bGluZTsKKwl0bXAucG9ydAkgICAgPSB1cG9ydC0+aW9iYXNlOwogCWlmIChISUdIX0JJVFNfT0ZGU0VUKQotCQl0bXAucG9ydF9oaWdoID0gKGxvbmcpIHBvcnQtPmlvYmFzZSA+PiBISUdIX0JJVFNfT0ZGU0VUOwotCXRtcC5pcnEJCSAgICA9IHBvcnQtPmlycTsKLQl0bXAuZmxhZ3MJICAgID0gcG9ydC0+ZmxhZ3M7Ci0JdG1wLnhtaXRfZmlmb19zaXplICA9IHBvcnQtPmZpZm9zaXplOwotCXRtcC5iYXVkX2Jhc2UJICAgID0gcG9ydC0+dWFydGNsayAvIDE2OwotCXRtcC5jbG9zZV9kZWxheQkgICAgPSBzdGF0ZS0+Y2xvc2VfZGVsYXkgLyAxMDsKLQl0bXAuY2xvc2luZ193YWl0ICAgID0gc3RhdGUtPmNsb3Npbmdfd2FpdCA9PSBVU0ZfQ0xPU0lOR19XQUlUX05PTkUgPworCQl0bXAucG9ydF9oaWdoID0gKGxvbmcpIHVwb3J0LT5pb2Jhc2UgPj4gSElHSF9CSVRTX09GRlNFVDsKKwl0bXAuaXJxCQkgICAgPSB1cG9ydC0+aXJxOworCXRtcC5mbGFncwkgICAgPSB1cG9ydC0+ZmxhZ3M7CisJdG1wLnhtaXRfZmlmb19zaXplICA9IHVwb3J0LT5maWZvc2l6ZTsKKwl0bXAuYmF1ZF9iYXNlCSAgICA9IHVwb3J0LT51YXJ0Y2xrIC8gMTY7CisJdG1wLmNsb3NlX2RlbGF5CSAgICA9IHBvcnQtPmNsb3NlX2RlbGF5IC8gMTA7CisJdG1wLmNsb3Npbmdfd2FpdCAgICA9IHBvcnQtPmNsb3Npbmdfd2FpdCA9PSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSA/CiAJCQkJQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUgOgotCQkJCXN0YXRlLT5jbG9zaW5nX3dhaXQgLyAxMDsKLQl0bXAuY3VzdG9tX2Rpdmlzb3IgID0gcG9ydC0+Y3VzdG9tX2Rpdmlzb3I7Ci0JdG1wLmh1YjYJICAgID0gcG9ydC0+aHViNjsKLQl0bXAuaW9fdHlwZSAgICAgICAgID0gcG9ydC0+aW90eXBlOwotCXRtcC5pb21lbV9yZWdfc2hpZnQgPSBwb3J0LT5yZWdzaGlmdDsKLQl0bXAuaW9tZW1fYmFzZSAgICAgID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylwb3J0LT5tYXBiYXNlOworCQkJCXBvcnQtPmNsb3Npbmdfd2FpdCAvIDEwOworCXRtcC5jdXN0b21fZGl2aXNvciAgPSB1cG9ydC0+Y3VzdG9tX2Rpdmlzb3I7CisJdG1wLmh1YjYJICAgID0gdXBvcnQtPmh1YjY7CisJdG1wLmlvX3R5cGUgICAgICAgICA9IHVwb3J0LT5pb3R5cGU7CisJdG1wLmlvbWVtX3JlZ19zaGlmdCA9IHVwb3J0LT5yZWdzaGlmdDsKKwl0bXAuaW9tZW1fYmFzZSAgICAgID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyl1cG9ydC0+bWFwYmFzZTsKIAotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAogCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNjc0LDcgKzY3Miw4IEBACiAJCQkgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpuZXdpbmZvKQogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBuZXdfcG9ydDsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2lycSwgY2hhbmdlX3BvcnQsIGNsb3Npbmdfd2FpdDsKIAl1bnNpZ25lZCBpbnQgb2xkX2N1c3RvbV9kaXZpc29yLCBjbG9zZV9kZWxheTsKQEAgLTY5MSw1OCArNjkwLDU4IEBACiAJbmV3X3NlcmlhbC5pcnEgPSBpcnFfY2Fub25pY2FsaXplKG5ld19zZXJpYWwuaXJxKTsKIAljbG9zZV9kZWxheSA9IG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgKiAxMDsKIAljbG9zaW5nX3dhaXQgPSBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdCA9PSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSA/Ci0JCQlVU0ZfQ0xPU0lOR19XQUlUX05PTkUgOiBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdCAqIDEwOworCQkJQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUgOiBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdCAqIDEwOwogCiAJLyoKLQkgKiBUaGlzIHNlbWFwaG9yZSBwcm90ZWN0cyBzdGF0ZS0+Y291bnQuICBJdCBpcyBhbHNvCisJICogVGhpcyBzZW1hcGhvcmUgcHJvdGVjdHMgcG9ydC0+Y291bnQuICBJdCBpcyBhbHNvCiAJICogdmVyeSB1c2VmdWwgdG8gcHJldmVudCBvcGVucy4gIEFsc28sIHRha2UgdGhlCiAJICogcG9ydCBjb25maWd1cmF0aW9uIHNlbWFwaG9yZSB0byBtYWtlIHN1cmUgdGhhdCBhCiAJICogbW9kdWxlIGluc2VydGlvbi9yZW1vdmFsIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nCiAJICogdW5kZXIgdXMuCiAJICovCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CiAKLQljaGFuZ2VfaXJxICA9ICEocG9ydC0+ZmxhZ3MgJiBVUEZfRklYRURfUE9SVCkKLQkJJiYgbmV3X3NlcmlhbC5pcnEgIT0gcG9ydC0+aXJxOworCWNoYW5nZV9pcnEgID0gISh1cG9ydC0+ZmxhZ3MgJiBVUEZfRklYRURfUE9SVCkKKwkJJiYgbmV3X3NlcmlhbC5pcnEgIT0gdXBvcnQtPmlycTsKIAogCS8qCiAJICogU2luY2UgY2hhbmdpbmcgdGhlICd0eXBlJyBvZiB0aGUgcG9ydCBjaGFuZ2VzIGl0cyByZXNvdXJjZQogCSAqIGFsbG9jYXRpb25zLCB3ZSBzaG91bGQgdHJlYXQgdHlwZSBjaGFuZ2VzIHRoZSBzYW1lIGFzCiAJICogSU8gcG9ydCBjaGFuZ2VzLgogCSAqLwotCWNoYW5nZV9wb3J0ID0gIShwb3J0LT5mbGFncyAmIFVQRl9GSVhFRF9QT1JUKQotCQkmJiAobmV3X3BvcnQgIT0gcG9ydC0+aW9iYXNlIHx8Ci0JCSAgICAodW5zaWduZWQgbG9uZyluZXdfc2VyaWFsLmlvbWVtX2Jhc2UgIT0gcG9ydC0+bWFwYmFzZSB8fAotCQkgICAgbmV3X3NlcmlhbC5odWI2ICE9IHBvcnQtPmh1YjYgfHwKLQkJICAgIG5ld19zZXJpYWwuaW9fdHlwZSAhPSBwb3J0LT5pb3R5cGUgfHwKLQkJICAgIG5ld19zZXJpYWwuaW9tZW1fcmVnX3NoaWZ0ICE9IHBvcnQtPnJlZ3NoaWZ0IHx8Ci0JCSAgICBuZXdfc2VyaWFsLnR5cGUgIT0gcG9ydC0+dHlwZSk7CisJY2hhbmdlX3BvcnQgPSAhKHVwb3J0LT5mbGFncyAmIFVQRl9GSVhFRF9QT1JUKQorCQkmJiAobmV3X3BvcnQgIT0gdXBvcnQtPmlvYmFzZSB8fAorCQkgICAgKHVuc2lnbmVkIGxvbmcpbmV3X3NlcmlhbC5pb21lbV9iYXNlICE9IHVwb3J0LT5tYXBiYXNlIHx8CisJCSAgICBuZXdfc2VyaWFsLmh1YjYgIT0gdXBvcnQtPmh1YjYgfHwKKwkJICAgIG5ld19zZXJpYWwuaW9fdHlwZSAhPSB1cG9ydC0+aW90eXBlIHx8CisJCSAgICBuZXdfc2VyaWFsLmlvbWVtX3JlZ19zaGlmdCAhPSB1cG9ydC0+cmVnc2hpZnQgfHwKKwkJICAgIG5ld19zZXJpYWwudHlwZSAhPSB1cG9ydC0+dHlwZSk7CiAKLQlvbGRfZmxhZ3MgPSBwb3J0LT5mbGFnczsKKwlvbGRfZmxhZ3MgPSB1cG9ydC0+ZmxhZ3M7CiAJbmV3X2ZsYWdzID0gbmV3X3NlcmlhbC5mbGFnczsKLQlvbGRfY3VzdG9tX2Rpdmlzb3IgPSBwb3J0LT5jdXN0b21fZGl2aXNvcjsKKwlvbGRfY3VzdG9tX2Rpdmlzb3IgPSB1cG9ydC0+Y3VzdG9tX2Rpdmlzb3I7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJcmV0dmFsID0gLUVQRVJNOwogCQlpZiAoY2hhbmdlX2lycSB8fCBjaGFuZ2VfcG9ydCB8fAotCQkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlICE9IHBvcnQtPnVhcnRjbGsgLyAxNikgfHwKLQkJICAgIChjbG9zZV9kZWxheSAhPSBzdGF0ZS0+Y2xvc2VfZGVsYXkpIHx8Ci0JCSAgICAoY2xvc2luZ193YWl0ICE9IHN0YXRlLT5jbG9zaW5nX3dhaXQpIHx8CisJCSAgICAobmV3X3NlcmlhbC5iYXVkX2Jhc2UgIT0gdXBvcnQtPnVhcnRjbGsgLyAxNikgfHwKKwkJICAgIChjbG9zZV9kZWxheSAhPSBwb3J0LT5jbG9zZV9kZWxheSkgfHwKKwkJICAgIChjbG9zaW5nX3dhaXQgIT0gcG9ydC0+Y2xvc2luZ193YWl0KSB8fAogCQkgICAgKG5ld19zZXJpYWwueG1pdF9maWZvX3NpemUgJiYKLQkJICAgICBuZXdfc2VyaWFsLnhtaXRfZmlmb19zaXplICE9IHBvcnQtPmZpZm9zaXplKSB8fAorCQkgICAgIG5ld19zZXJpYWwueG1pdF9maWZvX3NpemUgIT0gdXBvcnQtPmZpZm9zaXplKSB8fAogCQkgICAgKCgobmV3X2ZsYWdzIF4gb2xkX2ZsYWdzKSAmIH5VUEZfVVNSX01BU0spICE9IDApKQogCQkJZ290byBleGl0OwotCQlwb3J0LT5mbGFncyA9ICgocG9ydC0+ZmxhZ3MgJiB+VVBGX1VTUl9NQVNLKSB8CisJCXVwb3J0LT5mbGFncyA9ICgodXBvcnQtPmZsYWdzICYgflVQRl9VU1JfTUFTSykgfAogCQkJICAgICAgIChuZXdfZmxhZ3MgJiBVUEZfVVNSX01BU0spKTsKLQkJcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOworCQl1cG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOwogCQlnb3RvIGNoZWNrX2FuZF9leGl0OwogCX0KIAogCS8qCiAJICogQXNrIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIHRvIHZlcmlmeSB0aGUgc2V0dGluZ3MuCiAJICovCi0JaWYgKHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQpCi0JCXJldHZhbCA9IHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQocG9ydCwgJm5ld19zZXJpYWwpOworCWlmICh1cG9ydC0+b3BzLT52ZXJpZnlfcG9ydCkKKwkJcmV0dmFsID0gdXBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQodXBvcnQsICZuZXdfc2VyaWFsKTsKIAogCWlmICgobmV3X3NlcmlhbC5pcnEgPj0gbnJfaXJxcykgfHwgKG5ld19zZXJpYWwuaXJxIDwgMCkgfHwKIAkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlIDwgOTYwMCkpCkBAIC03NTcsNyArNzU2LDcgQEAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIHRoZSBzb2xlIHVzZXIgb2YgdGhpcyBwb3J0LgogCQkgKi8KLQkJaWYgKHVhcnRfdXNlcnMoc3RhdGUpID4gMSkKKwkJaWYgKHR0eV9wb3J0X3VzZXJzKHBvcnQpID4gMSkKIAkJCWdvdG8gZXhpdDsKIAogCQkvKgpAQCAtNzcxLDMxICs3NzAsMzEgQEAKIAkJdW5zaWduZWQgbG9uZyBvbGRfaW9iYXNlLCBvbGRfbWFwYmFzZTsKIAkJdW5zaWduZWQgaW50IG9sZF90eXBlLCBvbGRfaW90eXBlLCBvbGRfaHViNiwgb2xkX3NoaWZ0OwogCi0JCW9sZF9pb2Jhc2UgPSBwb3J0LT5pb2Jhc2U7Ci0JCW9sZF9tYXBiYXNlID0gcG9ydC0+bWFwYmFzZTsKLQkJb2xkX3R5cGUgPSBwb3J0LT50eXBlOwotCQlvbGRfaHViNiA9IHBvcnQtPmh1YjY7Ci0JCW9sZF9pb3R5cGUgPSBwb3J0LT5pb3R5cGU7Ci0JCW9sZF9zaGlmdCA9IHBvcnQtPnJlZ3NoaWZ0OworCQlvbGRfaW9iYXNlID0gdXBvcnQtPmlvYmFzZTsKKwkJb2xkX21hcGJhc2UgPSB1cG9ydC0+bWFwYmFzZTsKKwkJb2xkX3R5cGUgPSB1cG9ydC0+dHlwZTsKKwkJb2xkX2h1YjYgPSB1cG9ydC0+aHViNjsKKwkJb2xkX2lvdHlwZSA9IHVwb3J0LT5pb3R5cGU7CisJCW9sZF9zaGlmdCA9IHVwb3J0LT5yZWdzaGlmdDsKIAogCQkvKgogCQkgKiBGcmVlIGFuZCByZWxlYXNlIG9sZCByZWdpb25zCiAJCSAqLwogCQlpZiAob2xkX3R5cGUgIT0gUE9SVF9VTktOT1dOKQotCQkJcG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQocG9ydCk7CisJCQl1cG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQodXBvcnQpOwogCi0JCXBvcnQtPmlvYmFzZSA9IG5ld19wb3J0OwotCQlwb3J0LT50eXBlID0gbmV3X3NlcmlhbC50eXBlOwotCQlwb3J0LT5odWI2ID0gbmV3X3NlcmlhbC5odWI2OwotCQlwb3J0LT5pb3R5cGUgPSBuZXdfc2VyaWFsLmlvX3R5cGU7Ci0JCXBvcnQtPnJlZ3NoaWZ0ID0gbmV3X3NlcmlhbC5pb21lbV9yZWdfc2hpZnQ7Ci0JCXBvcnQtPm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZyluZXdfc2VyaWFsLmlvbWVtX2Jhc2U7CisJCXVwb3J0LT5pb2Jhc2UgPSBuZXdfcG9ydDsKKwkJdXBvcnQtPnR5cGUgPSBuZXdfc2VyaWFsLnR5cGU7CisJCXVwb3J0LT5odWI2ID0gbmV3X3NlcmlhbC5odWI2OworCQl1cG9ydC0+aW90eXBlID0gbmV3X3NlcmlhbC5pb190eXBlOworCQl1cG9ydC0+cmVnc2hpZnQgPSBuZXdfc2VyaWFsLmlvbWVtX3JlZ19zaGlmdDsKKwkJdXBvcnQtPm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZyluZXdfc2VyaWFsLmlvbWVtX2Jhc2U7CiAKIAkJLyoKIAkJICogQ2xhaW0gYW5kIG1hcCB0aGUgbmV3IHJlZ2lvbnMKIAkJICovCi0JCWlmIChwb3J0LT50eXBlICE9IFBPUlRfVU5LTk9XTikgewotCQkJcmV0dmFsID0gcG9ydC0+b3BzLT5yZXF1ZXN0X3BvcnQocG9ydCk7CisJCWlmICh1cG9ydC0+dHlwZSAhPSBQT1JUX1VOS05PV04pIHsKKwkJCXJldHZhbCA9IHVwb3J0LT5vcHMtPnJlcXVlc3RfcG9ydCh1cG9ydCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBBbHdheXMgc3VjY2VzcyAtIEplYW4gSUkgKi8KIAkJCXJldHZhbCA9IDA7CkBAIC04MDYsMTkgKzgwNSwxOSBAQAogCQkgKiBuZXcgcG9ydCwgdHJ5IHRvIHJlc3RvcmUgdGhlIG9sZCBzZXR0aW5ncy4KIAkJICovCiAJCWlmIChyZXR2YWwgJiYgb2xkX3R5cGUgIT0gUE9SVF9VTktOT1dOKSB7Ci0JCQlwb3J0LT5pb2Jhc2UgPSBvbGRfaW9iYXNlOwotCQkJcG9ydC0+dHlwZSA9IG9sZF90eXBlOwotCQkJcG9ydC0+aHViNiA9IG9sZF9odWI2OwotCQkJcG9ydC0+aW90eXBlID0gb2xkX2lvdHlwZTsKLQkJCXBvcnQtPnJlZ3NoaWZ0ID0gb2xkX3NoaWZ0OwotCQkJcG9ydC0+bWFwYmFzZSA9IG9sZF9tYXBiYXNlOwotCQkJcmV0dmFsID0gcG9ydC0+b3BzLT5yZXF1ZXN0X3BvcnQocG9ydCk7CisJCQl1cG9ydC0+aW9iYXNlID0gb2xkX2lvYmFzZTsKKwkJCXVwb3J0LT50eXBlID0gb2xkX3R5cGU7CisJCQl1cG9ydC0+aHViNiA9IG9sZF9odWI2OworCQkJdXBvcnQtPmlvdHlwZSA9IG9sZF9pb3R5cGU7CisJCQl1cG9ydC0+cmVnc2hpZnQgPSBvbGRfc2hpZnQ7CisJCQl1cG9ydC0+bWFwYmFzZSA9IG9sZF9tYXBiYXNlOworCQkJcmV0dmFsID0gdXBvcnQtPm9wcy0+cmVxdWVzdF9wb3J0KHVwb3J0KTsKIAkJCS8qCiAJCQkgKiBJZiB3ZSBmYWlsZWQgdG8gcmVzdG9yZSB0aGUgb2xkIHNldHRpbmdzLAogCQkJICogd2UgZmFpbCBsaWtlIHRoaXMuCiAJCQkgKi8KIAkJCWlmIChyZXR2YWwpCi0JCQkJcG9ydC0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKKwkJCQl1cG9ydC0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKIAogCQkJLyoKIAkJCSAqIFdlIGZhaWxlZCBhbnl3YXkuCkBAIC04MzAsNDUgKzgyOSw0NSBAQAogCX0KIAogCWlmIChjaGFuZ2VfaXJxKQotCQlwb3J0LT5pcnEgICAgICA9IG5ld19zZXJpYWwuaXJxOwotCWlmICghKHBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1BPUlQpKQotCQlwb3J0LT51YXJ0Y2xrICA9IG5ld19zZXJpYWwuYmF1ZF9iYXNlICogMTY7Ci0JcG9ydC0+ZmxhZ3MgICAgICAgICAgICA9IChwb3J0LT5mbGFncyAmIH5VUEZfQ0hBTkdFX01BU0spIHwKKwkJdXBvcnQtPmlycSAgICAgID0gbmV3X3NlcmlhbC5pcnE7CisJaWYgKCEodXBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1BPUlQpKQorCQl1cG9ydC0+dWFydGNsayAgPSBuZXdfc2VyaWFsLmJhdWRfYmFzZSAqIDE2OworCXVwb3J0LT5mbGFncyAgICAgICAgICAgID0gKHVwb3J0LT5mbGFncyAmIH5VUEZfQ0hBTkdFX01BU0spIHwKIAkJCQkgKG5ld19mbGFncyAmIFVQRl9DSEFOR0VfTUFTSyk7Ci0JcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgICA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7Ci0Jc3RhdGUtPmNsb3NlX2RlbGF5ICAgICA9IGNsb3NlX2RlbGF5OwotCXN0YXRlLT5jbG9zaW5nX3dhaXQgICAgPSBjbG9zaW5nX3dhaXQ7CisJdXBvcnQtPmN1c3RvbV9kaXZpc29yICAgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOworCXBvcnQtPmNsb3NlX2RlbGF5ICAgICA9IGNsb3NlX2RlbGF5OworCXBvcnQtPmNsb3Npbmdfd2FpdCAgICA9IGNsb3Npbmdfd2FpdDsKIAlpZiAobmV3X3NlcmlhbC54bWl0X2ZpZm9fc2l6ZSkKLQkJcG9ydC0+Zmlmb3NpemUgPSBuZXdfc2VyaWFsLnhtaXRfZmlmb19zaXplOwotCWlmIChzdGF0ZS0+aW5mby5wb3J0LnR0eSkKLQkJc3RhdGUtPmluZm8ucG9ydC50dHktPmxvd19sYXRlbmN5ID0KLQkJCShwb3J0LT5mbGFncyAmIFVQRl9MT1dfTEFURU5DWSkgPyAxIDogMDsKKwkJdXBvcnQtPmZpZm9zaXplID0gbmV3X3NlcmlhbC54bWl0X2ZpZm9fc2l6ZTsKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0KKwkJCSh1cG9ydC0+ZmxhZ3MgJiBVUEZfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAKICBjaGVja19hbmRfZXhpdDoKIAlyZXR2YWwgPSAwOwotCWlmIChwb3J0LT50eXBlID09IFBPUlRfVU5LTk9XTikKKwlpZiAodXBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQogCQlnb3RvIGV4aXQ7Ci0JaWYgKHN0YXRlLT5pbmZvLmZsYWdzICYgVUlGX0lOSVRJQUxJWkVEKSB7Ci0JCWlmICgoKG9sZF9mbGFncyBeIHBvcnQtPmZsYWdzKSAmIFVQRl9TUERfTUFTSykgfHwKLQkJICAgIG9sZF9jdXN0b21fZGl2aXNvciAhPSBwb3J0LT5jdXN0b21fZGl2aXNvcikgeworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCWlmICgoKG9sZF9mbGFncyBeIHVwb3J0LT5mbGFncykgJiBVUEZfU1BEX01BU0spIHx8CisJCSAgICBvbGRfY3VzdG9tX2Rpdmlzb3IgIT0gdXBvcnQtPmN1c3RvbV9kaXZpc29yKSB7CiAJCQkvKgogCQkJICogSWYgdGhleSdyZSBzZXR0aW5nIHVwIGEgY3VzdG9tIGRpdmlzb3Igb3Igc3BlZWQsCiAJCQkgKiBpbnN0ZWFkIG9mIGNsZWFyaW5nIGl0LCB0aGVuIGJpdGNoIGFib3V0IGl0LiBObwogCQkJICogbmVlZCB0byByYXRlLWxpbWl0OyBpdCdzIENBUF9TWVNfQURNSU4gb25seS4KIAkJCSAqLwotCQkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX1NQRF9NQVNLKSB7CisJCQlpZiAodXBvcnQtPmZsYWdzICYgVVBGX1NQRF9NQVNLKSB7CiAJCQkJY2hhciBidWZbNjRdOwogCQkJCXByaW50ayhLRVJOX05PVElDRQogCQkJCSAgICAgICAiJXMgc2V0cyBjdXN0b20gc3BlZWQgb24gJXMuIFRoaXMgIgogCQkJCSAgICAgICAiaXMgZGVwcmVjYXRlZC5cbiIsIGN1cnJlbnQtPmNvbW0sCi0JCQkJICAgICAgIHR0eV9uYW1lKHN0YXRlLT5pbmZvLnBvcnQudHR5LCBidWYpKTsKKwkJCQkgICAgICAgdHR5X25hbWUocG9ydC0+dHR5LCBidWYpKTsKIAkJCX0KIAkJCXVhcnRfY2hhbmdlX3NwZWVkKHN0YXRlLCBOVUxMKTsKIAkJfQogCX0gZWxzZQogCQlyZXR2YWwgPSB1YXJ0X3N0YXJ0dXAoc3RhdGUsIDEpOwogIGV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTg4MCwxMCArODc5LDExIEBACiBzdGF0aWMgaW50IHVhcnRfZ2V0X2xzcl9pbmZvKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwKIAkJCSAgICAgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJdW5zaWduZWQgaW50IHJlc3VsdDsKIAotCXJlc3VsdCA9IHBvcnQtPm9wcy0+dHhfZW1wdHkocG9ydCk7CisJcmVzdWx0ID0gdXBvcnQtPm9wcy0+dHhfZW1wdHkodXBvcnQpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBhYm91dCB0byBsb2FkIHNvbWV0aGluZyBpbnRvIHRoZSB0cmFuc21pdApAQCAtODkxLDkgKzg5MSw5IEBACiAJICogYXZvaWQgYSByYWNlIGNvbmRpdGlvbiAoZGVwZW5kaW5nIG9uIHdoZW4gdGhlIHRyYW5zbWl0CiAJICogaW50ZXJydXB0IGhhcHBlbnMpLgogCSAqLwotCWlmIChwb3J0LT54X2NoYXIgfHwKLQkgICAgKCh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmc3RhdGUtPmluZm8ueG1pdCkgPiAwKSAmJgotCSAgICAgIXN0YXRlLT5pbmZvLnBvcnQudHR5LT5zdG9wcGVkICYmICFzdGF0ZS0+aW5mby5wb3J0LnR0eS0+aHdfc3RvcHBlZCkpCisJaWYgKHVwb3J0LT54X2NoYXIgfHwKKwkgICAgKCh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmc3RhdGUtPnhtaXQpID4gMCkgJiYKKwkgICAgICFwb3J0LT50dHktPnN0b3BwZWQgJiYgIXBvcnQtPnR0eS0+aHdfc3RvcHBlZCkpCiAJCXJlc3VsdCAmPSB+VElPQ1NFUl9URU1UOwogCiAJcmV0dXJuIHB1dF91c2VyKHJlc3VsdCwgdmFsdWUpOwpAQCAtOTAyLDE5ICs5MDIsMjAgQEAKIHN0YXRpYyBpbnQgdWFydF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCWludCByZXN1bHQgPSAtRUlPOwogCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CiAJaWYgKCghZmlsZSB8fCAhdHR5X2h1bmdfdXBfcChmaWxlKSkgJiYKIAkgICAgISh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKLQkJcmVzdWx0ID0gcG9ydC0+bWN0cmw7CisJCXJlc3VsdCA9IHVwb3J0LT5tY3RybDsKIAotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJcmVzdWx0IHw9IHBvcnQtPm9wcy0+Z2V0X21jdHJsKHBvcnQpOwotCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCXJlc3VsdCB8PSB1cG9ydC0+b3BzLT5nZXRfbWN0cmwodXBvcnQpOworCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkyNCwzNiArOTI1LDM5IEBACiAJICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJaW50IHJldCA9IC1FSU87CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAlpZiAoKCFmaWxlIHx8ICF0dHlfaHVuZ191cF9wKGZpbGUpKSAmJgogCSAgICAhKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgewotCQl1YXJ0X3VwZGF0ZV9tY3RybChwb3J0LCBzZXQsIGNsZWFyKTsKKwkJdWFydF91cGRhdGVfbWN0cmwodXBvcnQsIHNldCwgY2xlYXIpOwogCQlyZXQgPSAwOwogCX0KLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB1YXJ0X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCi0JaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQotCQlwb3J0LT5vcHMtPmJyZWFrX2N0bChwb3J0LCBicmVha19zdGF0ZSk7CisJaWYgKHVwb3J0LT50eXBlICE9IFBPUlRfVU5LTk9XTikKKwkJdXBvcnQtPm9wcy0+YnJlYWtfY3RsKHVwb3J0LCBicmVha19zdGF0ZSk7CiAKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9kb19hdXRvY29uZmlnKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlpbnQgZmxhZ3MsIHJldDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTk2NCwzMyArOTY4LDMzIEBACiAJICogY2hhbmdpbmcsIGFuZCBoZW5jZSBhbnkgZXh0cmEgb3BlbnMgb2YgdGhlIHBvcnQgd2hpbGUKIAkgKiB3ZSdyZSBhdXRvLWNvbmZpZ3VyaW5nLgogCSAqLwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnN0YXRlLT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJcmV0ID0gLUVCVVNZOwotCWlmICh1YXJ0X3VzZXJzKHN0YXRlKSA9PSAxKSB7CisJaWYgKHR0eV9wb3J0X3VzZXJzKHBvcnQpID09IDEpIHsKIAkJdWFydF9zaHV0ZG93bihzdGF0ZSk7CiAKIAkJLyoKIAkJICogSWYgd2UgYWxyZWFkeSBoYXZlIGEgcG9ydCB0eXBlIGNvbmZpZ3VyZWQsCiAJCSAqIHdlIG11c3QgcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgogCQkgKi8KLQkJaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQotCQkJcG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQocG9ydCk7CisJCWlmICh1cG9ydC0+dHlwZSAhPSBQT1JUX1VOS05PV04pCisJCQl1cG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQodXBvcnQpOwogCiAJCWZsYWdzID0gVUFSVF9DT05GSUdfVFlQRTsKLQkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0FVVE9fSVJRKQorCQlpZiAodXBvcnQtPmZsYWdzICYgVVBGX0FVVE9fSVJRKQogCQkJZmxhZ3MgfD0gVUFSVF9DT05GSUdfSVJROwogCiAJCS8qCiAJCSAqIFRoaXMgd2lsbCBjbGFpbSB0aGUgcG9ydHMgcmVzb3VyY2VzIGlmCiAJCSAqIGEgcG9ydCBpcyBmb3VuZC4KIAkJICovCi0JCXBvcnQtPm9wcy0+Y29uZmlnX3BvcnQocG9ydCwgZmxhZ3MpOworCQl1cG9ydC0+b3BzLT5jb25maWdfcG9ydCh1cG9ydCwgZmxhZ3MpOwogCiAJCXJldCA9IHVhcnRfc3RhcnR1cChzdGF0ZSwgMSk7CiAJfQotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05OTksMTEgKzEwMDMsMTUgQEAKICAqIC0gbWFzayBwYXNzZWQgaW4gYXJnIGZvciBsaW5lcyBvZiBpbnRlcmVzdAogICogICAodXNlIHwnZWQgVElPQ01fUk5HL0RTUi9DRC9DVFMgZm9yIG1hc2tpbmcpCiAgKiBDYWxsZXIgc2hvdWxkIHVzZSBUSU9DR0lDT1VOVCB0byBzZWUgd2hpY2ggb25lIGl0IHdhcworICoKKyAqIEZJWE1FOiBUaGlzIHdhbnRzIGV4dHJhY3RpbmcgaW50byBhIGNvbW1vbiBhbGwgZHJpdmVyIGltcGxlbWVudGF0aW9uCisgKiBvZiBUSU9DTVdBSVQgdXNpbmcgdHR5X3BvcnQuCiAgKi8KIHN0YXRpYyBpbnQKIHVhcnRfd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzdHJ1Y3QgdWFydF9pY291bnQgY3ByZXYsIGNub3c7CiAJaW50IHJldDsKQEAgLTEwMTEsMjAgKzEwMTksMjAgQEAKIAkvKgogCSAqIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5CiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JbWVtY3B5KCZjcHJldiwgJnBvcnQtPmljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpOworCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwltZW1jcHkoJmNwcmV2LCAmdXBvcnQtPmljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpOwogCiAJLyoKIAkgKiBGb3JjZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cyBvbgogCSAqLwotCXBvcnQtPm9wcy0+ZW5hYmxlX21zKHBvcnQpOwotCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJdXBvcnQtPm9wcy0+ZW5hYmxlX21zKHVwb3J0KTsKKwlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAotCWFkZF93YWl0X3F1ZXVlKCZzdGF0ZS0+aW5mby5kZWx0YV9tc3Jfd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5kZWx0YV9tc3Jfd2FpdCwgJndhaXQpOwogCWZvciAoOzspIHsKLQkJc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JCW1lbWNweSgmY25vdywgJnBvcnQtPmljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpOwotCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCW1lbWNweSgmY25vdywgJnVwb3J0LT5pY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIApAQCAtMTA0OCw3ICsxMDU2LDcgQEAKIAl9CiAKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc3RhdGUtPmluZm8uZGVsdGFfbXNyX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+ZGVsdGFfbXNyX3dhaXQsICZ3YWl0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDY0LDExICsxMDcyLDExIEBACiB7CiAJc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3QgaWNvdW50OwogCXN0cnVjdCB1YXJ0X2ljb3VudCBjbm93OwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAKLQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQltZW1jcHkoJmNub3csICZwb3J0LT5pY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTsKLQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwltZW1jcHkoJmNub3csICZ1cG9ydC0+aWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CiAKIAlpY291bnQuY3RzICAgICAgICAgPSBjbm93LmN0czsKIAlpY291bnQuZHNyICAgICAgICAgPSBjbm93LmRzcjsKQEAgLTEwOTMsNiArMTEwMSw3IEBACiAJICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJdm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IHJldCA9IC1FTk9JT0NUTENNRDsKIApAQCAtMTE0Myw3ICsxMTUyLDcgQEAKIAlpZiAocmV0ICE9IC1FTk9JT0NUTENNRCkKIAkJZ290byBvdXQ7CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7CiAJCXJldCA9IC1FSU87CkBAIC0xMTYwLDE0ICsxMTY5LDE0IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDogewotCQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7Ci0JCWlmIChwb3J0LT5vcHMtPmlvY3RsKQotCQkJcmV0ID0gcG9ydC0+b3BzLT5pb2N0bChwb3J0LCBjbWQsIGFyZyk7CisJCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwkJaWYgKHVwb3J0LT5vcHMtPmlvY3RsKQorCQkJcmV0ID0gdXBvcnQtPm9wcy0+aW9jdGwodXBvcnQsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJfQogCX0KIG91dF91cDoKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNzUsMTAgKzExODQsMTAgQEAKIHN0YXRpYyB2b2lkIHVhcnRfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCi0JaWYgKHBvcnQtPm9wcy0+c2V0X2xkaXNjKQotCQlwb3J0LT5vcHMtPnNldF9sZGlzYyhwb3J0KTsKKwlpZiAodXBvcnQtPm9wcy0+c2V0X2xkaXNjKQorCQl1cG9ydC0+b3BzLT5zZXRfbGRpc2ModXBvcnQpOwogfQogCiBzdGF0aWMgdm9pZCB1YXJ0X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC0xMjA3LDcgKzEyMTYsNyBAQAogCiAJLyogSGFuZGxlIHRyYW5zaXRpb24gdG8gQjAgc3RhdHVzICovCiAJaWYgKChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSAmJiAhKGNmbGFnICYgQ0JBVUQpKQotCQl1YXJ0X2NsZWFyX21jdHJsKHN0YXRlLT5wb3J0LCBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOworCQl1YXJ0X2NsZWFyX21jdHJsKHN0YXRlLT51YXJ0X3BvcnQsIFRJT0NNX1JUUyB8IFRJT0NNX0RUUik7CiAKIAkvKiBIYW5kbGUgdHJhbnNpdGlvbiBhd2F5IGZyb20gQjAgc3RhdHVzICovCiAJaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgJiYgKGNmbGFnICYgQ0JBVUQpKSB7CkBAIC0xMjE1LDI1ICsxMjI0LDI1IEBACiAJCWlmICghKGNmbGFnICYgQ1JUU0NUUykgfHwKIAkJICAgICF0ZXN0X2JpdChUVFlfVEhST1RUTEVELCAmdHR5LT5mbGFncykpCiAJCQltYXNrIHw9IFRJT0NNX1JUUzsKLQkJdWFydF9zZXRfbWN0cmwoc3RhdGUtPnBvcnQsIG1hc2spOworCQl1YXJ0X3NldF9tY3RybChzdGF0ZS0+dWFydF9wb3J0LCBtYXNrKTsKIAl9CiAKIAkvKiBIYW5kbGUgdHVybmluZyBvZmYgQ1JUU0NUUyAqLwogCWlmICgob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSAmJiAhKGNmbGFnICYgQ1JUU0NUUykpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CiAJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCV9fdWFydF9zdGFydCh0dHkpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+cG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CiAJfQogCiAJLyogSGFuZGxlIHR1cm5pbmcgb24gQ1JUU0NUUyAqLwogCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYgKGNmbGFnICYgQ1JUU0NUUykpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7Ci0JCWlmICghKHN0YXRlLT5wb3J0LT5vcHMtPmdldF9tY3RybChzdGF0ZS0+cG9ydCkgJiBUSU9DTV9DVFMpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CisJCWlmICghKHN0YXRlLT51YXJ0X3BvcnQtPm9wcy0+Z2V0X21jdHJsKHN0YXRlLT51YXJ0X3BvcnQpICYgVElPQ01fQ1RTKSkgewogCQkJdHR5LT5od19zdG9wcGVkID0gMTsKLQkJCXN0YXRlLT5wb3J0LT5vcHMtPnN0b3BfdHgoc3RhdGUtPnBvcnQpOworCQkJc3RhdGUtPnVhcnRfcG9ydC0+b3BzLT5zdG9wX3R4KHN0YXRlLT51YXJ0X3BvcnQpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT51YXJ0X3BvcnQtPmxvY2ssIGZsYWdzKTsKIAl9CiAjaWYgMAogCS8qCkBAIC0xMjQ0LDcgKzEyNTMsNyBAQAogCSAqLwogCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAmJgogCSAgICAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3RhdGUtPnVhcnRfcG9ydC5vcGVuX3dhaXQpOwogI2VuZGlmCiB9CiAKQEAgLTEyNTYsNDAgKzEyNjUsMzkgQEAKIHN0YXRpYyB2b2lkIHVhcnRfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydDsKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQotCQlyZXR1cm47CisJdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAKLQlwb3J0ID0gc3RhdGUtPnBvcnQ7CisJcHJfZGVidWcoInVhcnRfY2xvc2UoJWQpIGNhbGxlZFxuIiwgdXBvcnQtPmxpbmUpOwogCi0JcHJfZGVidWcoInVhcnRfY2xvc2UoJWQpIGNhbGxlZFxuIiwgcG9ydC0+bGluZSk7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKHN0YXRlLT5jb3VudCAhPSAxKSkgeworCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAocG9ydC0+Y291bnQgIT0gMSkpIHsKIAkJLyoKIAkJICogVWgsIG9oLiAgdHR5LT5jb3VudCBpcyAxLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0dHkKLQkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBzdGF0ZS0+Y291bnQgc2hvdWxkIGFsd2F5cworCQkgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIHBvcnQtPmNvdW50IHNob3VsZCBhbHdheXMKIAkJICogYmUgb25lIGluIHRoZXNlIGNvbmRpdGlvbnMuICBJZiBpdCdzIGdyZWF0ZXIgdGhhbgogCQkgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2JsZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKIAkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCiAJCSAqLwogCQlwcmludGsoS0VSTl9FUlIgInVhcnRfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgdHR5LT5jb3VudCBpcyAxLCAiCi0JCSAgICAgICAic3RhdGUtPmNvdW50IGlzICVkXG4iLCBzdGF0ZS0+Y291bnQpOwotCQlzdGF0ZS0+Y291bnQgPSAxOworCQkgICAgICAgInBvcnQtPmNvdW50IGlzICVkXG4iLCBwb3J0LT5jb3VudCk7CisJCXBvcnQtPmNvdW50ID0gMTsKIAl9Ci0JaWYgKC0tc3RhdGUtPmNvdW50IDwgMCkgeworCWlmICgtLXBvcnQtPmNvdW50IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInVhcnRfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudCBmb3IgJXM6ICVkXG4iLAotCQkgICAgICAgdHR5LT5uYW1lLCBzdGF0ZS0+Y291bnQpOwotCQlzdGF0ZS0+Y291bnQgPSAwOworCQkgICAgICAgdHR5LT5uYW1lLCBwb3J0LT5jb3VudCk7CisJCXBvcnQtPmNvdW50ID0gMDsKIAl9Ci0JaWYgKHN0YXRlLT5jb3VudCkKKwlpZiAocG9ydC0+Y291bnQpCiAJCWdvdG8gZG9uZTsKIAogCS8qCkBAIC0xMjk5LDI0ICsxMzA3LDI0IEBACiAJICovCiAJdHR5LT5jbG9zaW5nID0gMTsKIAotCWlmIChzdGF0ZS0+Y2xvc2luZ193YWl0ICE9IFVTRl9DTE9TSU5HX1dBSVRfTk9ORSkKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIG1zZWNzX3RvX2ppZmZpZXMoc3RhdGUtPmNsb3Npbmdfd2FpdCkpOworCWlmIChwb3J0LT5jbG9zaW5nX3dhaXQgIT0gQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUpCisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBtc2Vjc190b19qaWZmaWVzKHBvcnQtPmNsb3Npbmdfd2FpdCkpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50LCB3ZSBzdG9wIGFjY2VwdGluZyBpbnB1dC4gIFRvIGRvIHRoaXMsIHdlCiAJICogZGlzYWJsZSB0aGUgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHRzLgogCSAqLwotCWlmIChzdGF0ZS0+aW5mby5mbGFncyAmIFVJRl9JTklUSUFMSVpFRCkgeworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JCXBvcnQtPm9wcy0+c3RvcF9yeChwb3J0KTsKKwkJdXBvcnQtPm9wcy0+c3RvcF9yeCh1cG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKIAkJICogaGFzIGNvbXBsZXRlbHkgZHJhaW5lZDsgdGhpcyBpcyBlc3BlY2lhbGx5CiAJCSAqIGltcG9ydGFudCBpZiB0aGVyZSBpcyBhIHRyYW5zbWl0IEZJRk8hCiAJCSAqLwotCQl1YXJ0X3dhaXRfdW50aWxfc2VudCh0dHksIHBvcnQtPnRpbWVvdXQpOworCQl1YXJ0X3dhaXRfdW50aWxfc2VudCh0dHksIHVwb3J0LT50aW1lb3V0KTsKIAl9CiAKIAl1YXJ0X3NodXRkb3duKHN0YXRlKTsKQEAgLTEzMjUsMjkgKzEzMzMsMjkgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0Jc3RhdGUtPmluZm8ucG9ydC50dHkgPSBOVUxMOworCXR0eV9wb3J0X3R0eV9zZXQocG9ydCwgTlVMTCk7CiAKLQlpZiAoc3RhdGUtPmluZm8ucG9ydC5ibG9ja2VkX29wZW4pIHsKLQkJaWYgKHN0YXRlLT5jbG9zZV9kZWxheSkKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHN0YXRlLT5jbG9zZV9kZWxheSk7Ci0JfSBlbHNlIGlmICghdWFydF9jb25zb2xlKHBvcnQpKSB7CisJaWYgKHBvcnQtPmJsb2NrZWRfb3BlbikgeworCQlpZiAocG9ydC0+Y2xvc2VfZGVsYXkpCisJCQltc2xlZXBfaW50ZXJydXB0aWJsZShwb3J0LT5jbG9zZV9kZWxheSk7CisJfSBlbHNlIGlmICghdWFydF9jb25zb2xlKHVwb3J0KSkgewogCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMyk7CiAJfQogCiAJLyoKIAkgKiBXYWtlIHVwIGFueW9uZSB0cnlpbmcgdG8gb3BlbiB0aGlzIHBvcnQuCiAJICovCi0Jc3RhdGUtPmluZm8uZmxhZ3MgJj0gflVJRl9OT1JNQUxfQUNUSVZFOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3RhdGUtPmluZm8ucG9ydC5vcGVuX3dhaXQpOworCWNsZWFyX2JpdChBU1lOQ0JfTk9STUFMX0FDVElWRSwgJnBvcnQtPmZsYWdzKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CiAKLSBkb25lOgotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVhcnRfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXVuc2lnbmVkIGxvbmcgY2hhcl90aW1lLCBleHBpcmU7CiAKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04gfHwgcG9ydC0+Zmlmb3NpemUgPT0gMCkKQEAgLTE0MTIsMjIgKzE0MjAsMjIgQEAKIHN0YXRpYyB2b2lkIHVhcnRfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKLQlwcl9kZWJ1ZygidWFydF9oYW5ndXAoJWQpXG4iLCBzdGF0ZS0+cG9ydC0+bGluZSk7CisJcHJfZGVidWcoInVhcnRfaGFuZ3VwKCVkKVxuIiwgc3RhdGUtPnVhcnRfcG9ydC0+bGluZSk7CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWlmIChpbmZvLT5mbGFncyAmIFVJRl9OT1JNQUxfQUNUSVZFKSB7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX05PUk1BTF9BQ1RJVkUpIHsKIAkJdWFydF9mbHVzaF9idWZmZXIodHR5KTsKIAkJdWFydF9zaHV0ZG93bihzdGF0ZSk7Ci0JCXN0YXRlLT5jb3VudCA9IDA7Ci0JCWluZm8tPmZsYWdzICY9IH5VSUZfTk9STUFMX0FDVElWRTsKLQkJaW5mby0+cG9ydC50dHkgPSBOVUxMOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXBvcnQtPmNvdW50ID0gMDsKKwkJY2xlYXJfYml0KEFTWU5DQl9OT1JNQUxfQUNUSVZFLCAmcG9ydC0+ZmxhZ3MpOworCQl0dHlfcG9ydF90dHlfc2V0KHBvcnQsIE5VTEwpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOwogCX0KLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiB9CiAKIC8qCkBAIC0xNDM4LDggKzE0NDYsOCBAQAogICovCiBzdGF0aWMgdm9pZCB1YXJ0X3VwZGF0ZV90ZXJtaW9zKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3RhdGUtPmluZm8ucG9ydC50dHk7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+cG9ydC50dHk7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAKIAlpZiAodWFydF9jb25zb2xlKHBvcnQpICYmIHBvcnQtPmNvbnMtPmNmbGFnKSB7CiAJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IHBvcnQtPmNvbnMtPmNmbGFnOwpAQCAtMTQ3MywyNyArMTQ4MSwyNyBAQAogdWFydF9ibG9ja190aWxfcmVhZHkoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXVuc2lnbmVkIGludCBtY3RybDsKIAotCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuKys7Ci0Jc3RhdGUtPmNvdW50LS07CisJcG9ydC0+YmxvY2tlZF9vcGVuKys7CisJcG9ydC0+Y291bnQtLTsKIAotCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKIAl3aGlsZSAoMSkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCS8qCiAJCSAqIElmIHdlIGhhdmUgYmVlbiBodW5nIHVwLCB0ZWxsIHVzZXJzcGFjZS9yZXN0YXJ0IG9wZW4uCiAJCSAqLwotCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBpbmZvLT5wb3J0LnR0eSA9PSBOVUxMKQorCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBwb3J0LT50dHkgPT0gTlVMTCkKIAkJCWJyZWFrOwogCiAJCS8qCiAJCSAqIElmIHRoZSBwb3J0IGhhcyBiZWVuIGNsb3NlZCwgdGVsbCB1c2Vyc3BhY2UvcmVzdGFydCBvcGVuLgogCQkgKi8KLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBVSUZfSU5JVElBTElaRUQpKQorCQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC0xNTA2LDggKzE1MTQsOCBAQAogCQkgKiBoYXZlIHNldCBUVFlfSU9fRVJST1IgZm9yIGEgbm9uLWV4aXN0YW50IHBvcnQuCiAJCSAqLwogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAotCQkgICAgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSB8fAotCQkgICAgKGluZm8tPnBvcnQudHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpKQorCQkgICAgKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgfHwKKwkJICAgIChwb3J0LT50dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTUxNSwzNyArMTUyMywzNyBAQAogCQkgKiBub3Qgc2V0IFJUUyBoZXJlIC0gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgY2F0Y2gKIAkJICogdGhlIGRhdGEgZnJvbSB0aGUgbW9kZW0uCiAJCSAqLwotCQlpZiAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKLQkJCXVhcnRfc2V0X21jdHJsKHBvcnQsIFRJT0NNX0RUUik7CisJCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJCXVhcnRfc2V0X21jdHJsKHVwb3J0LCBUSU9DTV9EVFIpOwogCiAJCS8qCiAJCSAqIGFuZCB3YWl0IGZvciB0aGUgY2FycmllciB0byBpbmRpY2F0ZSB0aGF0IHRoZQogCQkgKiBtb2RlbSBpcyByZWFkeSBmb3IgdXMuCiAJCSAqLwotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJcG9ydC0+b3BzLT5lbmFibGVfbXMocG9ydCk7Ci0JCW1jdHJsID0gcG9ydC0+b3BzLT5nZXRfbWN0cmwocG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwkJdXBvcnQtPm9wcy0+ZW5hYmxlX21zKHVwb3J0KTsKKwkJbWN0cmwgPSB1cG9ydC0+b3BzLT5nZXRfbWN0cmwodXBvcnQpOworCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAkJaWYgKG1jdHJsICYgVElPQ01fQ0FSKQogCQkJYnJlYWs7CiAKLQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKIAotCXN0YXRlLT5jb3VudCsrOwotCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuLS07CisJcG9ydC0+Y291bnQrKzsKKwlwb3J0LT5ibG9ja2VkX29wZW4tLTsKIAogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmICghaW5mby0+cG9ydC50dHkgfHwgdHR5X2h1bmdfdXBfcChmaWxwKSkKKwlpZiAoIXBvcnQtPnR0eSB8fCB0dHlfaHVuZ191cF9wKGZpbHApKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldHVybiAwOwpAQCAtMTU1NCwyNCArMTU2MiwyNiBAQAogc3RhdGljIHN0cnVjdCB1YXJ0X3N0YXRlICp1YXJ0X2dldChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgaW50IGxpbmUpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0ID0gMDsKIAogCXN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc3RhdGUtPm11dGV4KSkgeworCXBvcnQgPSAmc3RhdGUtPnBvcnQ7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKSB7CiAJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBlcnI7CiAJfQogCi0Jc3RhdGUtPmNvdW50Kys7Ci0JaWYgKCFzdGF0ZS0+cG9ydCB8fCBzdGF0ZS0+cG9ydC0+ZmxhZ3MgJiBVUEZfREVBRCkgeworCXBvcnQtPmNvdW50Kys7CisJaWYgKCFzdGF0ZS0+dWFydF9wb3J0IHx8IHN0YXRlLT51YXJ0X3BvcnQtPmZsYWdzICYgVVBGX0RFQUQpIHsKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl91bmxvY2s7CiAJfQogCXJldHVybiBzdGF0ZTsKIAogIGVycl91bmxvY2s6Ci0Jc3RhdGUtPmNvdW50LS07Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCXBvcnQtPmNvdW50LS07CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAgZXJyOgogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CkBAIC0xNTkwLDYgKzE2MDAsNyBAQAogewogCXN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2ID0gKHN0cnVjdCB1YXJ0X2RyaXZlciAqKXR0eS0+ZHJpdmVyLT5kcml2ZXJfc3RhdGU7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0dmFsLCBsaW5lID0gdHR5LT5pbmRleDsKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKQEAgLTE2MDYsMTYgKzE2MTcsMTggQEAKIAogCS8qCiAJICogV2UgdGFrZSB0aGUgc2VtYXBob3JlIGluc2lkZSB1YXJ0X2dldCB0byBndWFyYW50ZWUgdGhhdCB3ZSB3b24ndAotCSAqIGJlIHJlLWVudGVyZWQgd2hpbGUgYWxsb2NhdGluZyB0aGUgaW5mbyBzdHJ1Y3R1cmUsIG9yIHdoaWxlIHdlCisJICogYmUgcmUtZW50ZXJlZCB3aGlsZSBhbGxvY2F0aW5nIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUsIG9yIHdoaWxlIHdlCiAJICogcmVxdWVzdCBhbnkgSVJRcyB0aGF0IHRoZSBkcml2ZXIgbWF5IG5lZWQuICBUaGlzIGFsc28gaGFzIHRoZSBuaWNlCiAJICogc2lkZS1lZmZlY3QgdGhhdCBpdCBkZWxheXMgdGhlIGFjdGlvbiBvZiB1YXJ0X2hhbmd1cCwgc28gd2UgY2FuCi0JICogZ3VhcmFudGVlIHRoYXQgaW5mby0+cG9ydC50dHkgd2lsbCBhbHdheXMgY29udGFpbiBzb21ldGhpbmcgcmVhc29uYWJsZS4KKwkgKiBndWFyYW50ZWUgdGhhdCBzdGF0ZS0+cG9ydC50dHkgd2lsbCBhbHdheXMgY29udGFpbiBzb21ldGhpbmcKKwkgKiByZWFzb25hYmxlLgogCSAqLwogCXN0YXRlID0gdWFydF9nZXQoZHJ2LCBsaW5lKTsKIAlpZiAoSVNfRVJSKHN0YXRlKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHN0YXRlKTsKIAkJZ290byBmYWlsOwogCX0KKwlwb3J0ID0gJnN0YXRlLT5wb3J0OwogCiAJLyoKIAkgKiBPbmNlIHdlIHNldCB0dHktPmRyaXZlcl9kYXRhIGhlcmUsIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQKQEAgLTE2MjMsMjUgKzE2MzYsMjUgQEAKIAkgKiBBbnkgZmFpbHVyZXMgZnJvbSBoZXJlIG9ud2FyZHMgc2hvdWxkIG5vdCB0b3VjaCB0aGUgY291bnQuCiAJICovCiAJdHR5LT5kcml2ZXJfZGF0YSA9IHN0YXRlOwotCXN0YXRlLT5wb3J0LT5pbmZvID0gJnN0YXRlLT5pbmZvOwotCXR0eS0+bG93X2xhdGVuY3kgPSAoc3RhdGUtPnBvcnQtPmZsYWdzICYgVVBGX0xPV19MQVRFTkNZKSA/IDEgOiAwOworCXN0YXRlLT51YXJ0X3BvcnQtPnN0YXRlID0gc3RhdGU7CisJdHR5LT5sb3dfbGF0ZW5jeSA9IChzdGF0ZS0+dWFydF9wb3J0LT5mbGFncyAmIFVQRl9MT1dfTEFURU5DWSkgPyAxIDogMDsKIAl0dHktPmFsdF9zcGVlZCA9IDA7Ci0Jc3RhdGUtPmluZm8ucG9ydC50dHkgPSB0dHk7CisJdHR5X3BvcnRfdHR5X3NldChwb3J0LCB0dHkpOwogCiAJLyoKIAkgKiBJZiB0aGUgcG9ydCBpcyBpbiB0aGUgbWlkZGxlIG9mIGNsb3NpbmcsIGJhaWwgb3V0IG5vdy4KIAkgKi8KIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgewogCQlyZXR2YWwgPSAtRUFHQUlOOwotCQlzdGF0ZS0+Y291bnQtLTsKLQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCQlwb3J0LT5jb3VudC0tOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAkJZ290byBmYWlsOwogCX0KIAogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBkZXZpY2UgaXMgaW4gRDAgc3RhdGUuCiAJICovCi0JaWYgKHN0YXRlLT5jb3VudCA9PSAxKQorCWlmIChwb3J0LT5jb3VudCA9PSAxKQogCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMCk7CiAKIAkvKgpAQCAtMTY1NCwxOCArMTY2NywxOCBAQAogCSAqLwogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dmFsID0gdWFydF9ibG9ja190aWxfcmVhZHkoZmlscCwgc3RhdGUpOwotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgZmlyc3Qgb3BlbiB0byBzdWNjZWVkLCBhZGp1c3QgdGhpbmdzIHRvIHN1aXQuCiAJICovCi0JaWYgKHJldHZhbCA9PSAwICYmICEoc3RhdGUtPmluZm8uZmxhZ3MgJiBVSUZfTk9STUFMX0FDVElWRSkpIHsKLQkJc3RhdGUtPmluZm8uZmxhZ3MgfD0gVUlGX05PUk1BTF9BQ1RJVkU7CisJaWYgKHJldHZhbCA9PSAwICYmICEocG9ydC0+ZmxhZ3MgJiBBU1lOQ19OT1JNQUxfQUNUSVZFKSkgeworCQlzZXRfYml0KEFTWU5DQl9OT1JNQUxfQUNUSVZFLCAmcG9ydC0+ZmxhZ3MpOwogCiAJCXVhcnRfdXBkYXRlX3Rlcm1pb3Moc3RhdGUpOwogCX0KIAotIGZhaWw6CitmYWlsOgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE2ODcsNTcgKzE3MDAsNTggQEAKIHN0YXRpYyB2b2lkIHVhcnRfbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIGludCBpKQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IGRydi0+c3RhdGUgKyBpOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlpbnQgcG1fc3RhdGU7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAljaGFyIHN0YXRfYnVmWzMyXTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCBtbWlvOwogCi0JaWYgKCFwb3J0KQorCWlmICghdXBvcnQpCiAJCXJldHVybjsKIAotCW1taW8gPSBwb3J0LT5pb3R5cGUgPj0gVVBJT19NRU07CisJbW1pbyA9IHVwb3J0LT5pb3R5cGUgPj0gVVBJT19NRU07CiAJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgJXMlMDhsbFggaXJxOiVkIiwKLQkJCXBvcnQtPmxpbmUsIHVhcnRfdHlwZShwb3J0KSwKKwkJCXVwb3J0LT5saW5lLCB1YXJ0X3R5cGUodXBvcnQpLAogCQkJbW1pbyA/ICJtbWlvOjB4IiA6ICJwb3J0OiIsCi0JCQltbWlvID8gKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT5tYXBiYXNlCi0JCQkgICAgIDogKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+aW9iYXNlLAotCQkJcG9ydC0+aXJxKTsKKwkJCW1taW8gPyAodW5zaWduZWQgbG9uZyBsb25nKXVwb3J0LT5tYXBiYXNlCisJCQkgICAgIDogKHVuc2lnbmVkIGxvbmcgbG9uZyl1cG9ydC0+aW9iYXNlLAorCQkJdXBvcnQtPmlycSk7CiAKLQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04pIHsKKwlpZiAodXBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKSB7CiAJCXNlcV9wdXRjKG0sICdcbicpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCQlwbV9zdGF0ZSA9IHN0YXRlLT5wbV9zdGF0ZTsKIAkJaWYgKHBtX3N0YXRlKQogCQkJdWFydF9jaGFuZ2VfcG0oc3RhdGUsIDApOwotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJc3RhdHVzID0gcG9ydC0+b3BzLT5nZXRfbWN0cmwocG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwkJc3RhdHVzID0gdXBvcnQtPm9wcy0+Z2V0X21jdHJsKHVwb3J0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CiAJCWlmIChwbV9zdGF0ZSkKIAkJCXVhcnRfY2hhbmdlX3BtKHN0YXRlLCBwbV9zdGF0ZSk7Ci0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAKIAkJc2VxX3ByaW50ZihtLCAiIHR4OiVkIHJ4OiVkIiwKLQkJCQlwb3J0LT5pY291bnQudHgsIHBvcnQtPmljb3VudC5yeCk7Ci0JCWlmIChwb3J0LT5pY291bnQuZnJhbWUpCisJCQkJdXBvcnQtPmljb3VudC50eCwgdXBvcnQtPmljb3VudC5yeCk7CisJCWlmICh1cG9ydC0+aWNvdW50LmZyYW1lKQogCQkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwKLQkJCQlwb3J0LT5pY291bnQuZnJhbWUpOwotCQlpZiAocG9ydC0+aWNvdW50LnBhcml0eSkKKwkJCQl1cG9ydC0+aWNvdW50LmZyYW1lKTsKKwkJaWYgKHVwb3J0LT5pY291bnQucGFyaXR5KQogCQkJc2VxX3ByaW50ZihtLCAiIHBlOiVkIiwKLQkJCQlwb3J0LT5pY291bnQucGFyaXR5KTsKLQkJaWYgKHBvcnQtPmljb3VudC5icmspCisJCQkJdXBvcnQtPmljb3VudC5wYXJpdHkpOworCQlpZiAodXBvcnQtPmljb3VudC5icmspCiAJCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwKLQkJCQlwb3J0LT5pY291bnQuYnJrKTsKLQkJaWYgKHBvcnQtPmljb3VudC5vdmVycnVuKQorCQkJCXVwb3J0LT5pY291bnQuYnJrKTsKKwkJaWYgKHVwb3J0LT5pY291bnQub3ZlcnJ1bikKIAkJCXNlcV9wcmludGYobSwgIiBvZTolZCIsCi0JCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4pOworCQkJCXVwb3J0LT5pY291bnQub3ZlcnJ1bik7CiAKICNkZWZpbmUgSU5GT0JJVChiaXQsIHN0cikgXAotCWlmIChwb3J0LT5tY3RybCAmIChiaXQpKSBcCisJaWYgKHVwb3J0LT5tY3RybCAmIChiaXQpKSBcCiAJCXN0cm5jYXQoc3RhdF9idWYsIChzdHIpLCBzaXplb2Yoc3RhdF9idWYpIC0gXAogCQkJc3RybGVuKHN0YXRfYnVmKSAtIDIpCiAjZGVmaW5lIFNUQVRCSVQoYml0LCBzdHIpIFwKQEAgLTE5NTgsNyArMTk3Miw3IEBACiAKIHN0YXRpYyB2b2lkIHVhcnRfY2hhbmdlX3BtKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgaW50IHBtX3N0YXRlKQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAogCWlmIChzdGF0ZS0+cG1fc3RhdGUgIT0gcG1fc3RhdGUpIHsKIAkJaWYgKHBvcnQtPm9wcy0+cG0pCkBAIC0xOTgyLDEzMiArMTk5NiwxMzggQEAKIAlyZXR1cm4gZGV2LT5kZXZ0ID09IGRldnQ7IC8qIEFjdHVhbGx5LCBvbmx5IG9uZSB0dHkgcGVyIHBvcnQgKi8KIH0KIAotaW50IHVhcnRfc3VzcGVuZF9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoraW50IHVhcnRfc3VzcGVuZF9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgcG9ydC0+bGluZTsKKwlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgdXBvcnQtPmxpbmU7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXN0cnVjdCBkZXZpY2UgKnR0eV9kZXY7Ci0Jc3RydWN0IHVhcnRfbWF0Y2ggbWF0Y2ggPSB7cG9ydCwgZHJ2fTsKKwlzdHJ1Y3QgdWFydF9tYXRjaCBtYXRjaCA9IHt1cG9ydCwgZHJ2fTsKIAotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCi0JaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCAmJiB1YXJ0X2NvbnNvbGUocG9ydCkpIHsKKwlpZiAoIWNvbnNvbGVfc3VzcGVuZF9lbmFibGVkICYmIHVhcnRfY29uc29sZSh1cG9ydCkpIHsKIAkJLyogd2UncmUgZ29pbmcgdG8gYXZvaWQgc3VzcGVuZGluZyBzZXJpYWwgY29uc29sZSAqLwotCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQocG9ydC0+ZGV2LCAmbWF0Y2gsIHNlcmlhbF9tYXRjaF9wb3J0KTsKKwl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQodXBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKHR0eV9kZXYpKSB7Ci0JCWVuYWJsZV9pcnFfd2FrZShwb3J0LT5pcnEpOworCQllbmFibGVfaXJxX3dha2UodXBvcnQtPmlycSk7CiAJCXB1dF9kZXZpY2UodHR5X2Rldik7Ci0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJCXJldHVybiAwOwogCX0KLQlwb3J0LT5zdXNwZW5kZWQgPSAxOworCXVwb3J0LT5zdXNwZW5kZWQgPSAxOwogCi0JaWYgKHN0YXRlLT5pbmZvLmZsYWdzICYgVUlGX0lOSVRJQUxJWkVEKSB7Ci0JCWNvbnN0IHN0cnVjdCB1YXJ0X29wcyAqb3BzID0gcG9ydC0+b3BzOworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCWNvbnN0IHN0cnVjdCB1YXJ0X29wcyAqb3BzID0gdXBvcnQtPm9wczsKIAkJaW50IHRyaWVzOwogCi0JCXN0YXRlLT5pbmZvLmZsYWdzID0gKHN0YXRlLT5pbmZvLmZsYWdzICYgflVJRl9JTklUSUFMSVpFRCkKLQkJCQkgICAgIHwgVUlGX1NVU1BFTkRFRDsKKwkJc2V0X2JpdChBU1lOQ0JfU1VTUEVOREVELCAmcG9ydC0+ZmxhZ3MpOworCQljbGVhcl9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+ZmxhZ3MpOwogCi0JCXNwaW5fbG9ja19pcnEoJnBvcnQtPmxvY2spOwotCQlvcHMtPnN0b3BfdHgocG9ydCk7Ci0JCW9wcy0+c2V0X21jdHJsKHBvcnQsIDApOwotCQlvcHMtPnN0b3BfcngocG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwkJb3BzLT5zdG9wX3R4KHVwb3J0KTsKKwkJb3BzLT5zZXRfbWN0cmwodXBvcnQsIDApOworCQlvcHMtPnN0b3BfcngodXBvcnQpOworCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAogCQkvKgogCQkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXR0ZXIgdG8gZW1wdHkuCiAJCSAqLwotCQlmb3IgKHRyaWVzID0gMzsgIW9wcy0+dHhfZW1wdHkocG9ydCkgJiYgdHJpZXM7IHRyaWVzLS0pCisJCWZvciAodHJpZXMgPSAzOyAhb3BzLT50eF9lbXB0eSh1cG9ydCkgJiYgdHJpZXM7IHRyaWVzLS0pCiAJCQltc2xlZXAoMTApOwogCQlpZiAoIXRyaWVzKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlcyVzJXMlZDogVW5hYmxlIHRvIGRyYWluICIKIAkJCQkJInRyYW5zbWl0dGVyXG4iLAotCQkJICAgICAgIHBvcnQtPmRldiA/IGRldl9uYW1lKHBvcnQtPmRldikgOiAiIiwKLQkJCSAgICAgICBwb3J0LT5kZXYgPyAiOiAiIDogIiIsCisJCQkgICAgICAgdXBvcnQtPmRldiA/IGRldl9uYW1lKHVwb3J0LT5kZXYpIDogIiIsCisJCQkgICAgICAgdXBvcnQtPmRldiA/ICI6ICIgOiAiIiwKIAkJCSAgICAgICBkcnYtPmRldl9uYW1lLAotCQkJICAgICAgIGRydi0+dHR5X2RyaXZlci0+bmFtZV9iYXNlICsgcG9ydC0+bGluZSk7CisJCQkgICAgICAgZHJ2LT50dHlfZHJpdmVyLT5uYW1lX2Jhc2UgKyB1cG9ydC0+bGluZSk7CiAKLQkJb3BzLT5zaHV0ZG93bihwb3J0KTsKKwkJb3BzLT5zaHV0ZG93bih1cG9ydCk7CiAJfQogCiAJLyoKIAkgKiBEaXNhYmxlIHRoZSBjb25zb2xlIGRldmljZSBiZWZvcmUgc3VzcGVuZGluZy4KIAkgKi8KLQlpZiAodWFydF9jb25zb2xlKHBvcnQpKQotCQljb25zb2xlX3N0b3AocG9ydC0+Y29ucyk7CisJaWYgKHVhcnRfY29uc29sZSh1cG9ydCkpCisJCWNvbnNvbGVfc3RvcCh1cG9ydC0+Y29ucyk7CiAKIAl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMyk7CiAKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVhcnRfcmVzdW1lX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitpbnQgdWFydF9yZXN1bWVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIHBvcnQtPmxpbmU7CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIHVwb3J0LT5saW5lOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OwotCXN0cnVjdCB1YXJ0X21hdGNoIG1hdGNoID0ge3BvcnQsIGRydn07CisJc3RydWN0IHVhcnRfbWF0Y2ggbWF0Y2ggPSB7dXBvcnQsIGRydn07CisJc3RydWN0IGt0ZXJtaW9zIHRlcm1pb3M7CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAotCWlmICghY29uc29sZV9zdXNwZW5kX2VuYWJsZWQgJiYgdWFydF9jb25zb2xlKHBvcnQpKSB7CisJaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCAmJiB1YXJ0X2NvbnNvbGUodXBvcnQpKSB7CiAJCS8qIG5vIG5lZWQgdG8gcmVzdW1lIHNlcmlhbCBjb25zb2xlLCBpdCB3YXNuJ3Qgc3VzcGVuZGVkICovCi0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JdHR5X2RldiA9IGRldmljZV9maW5kX2NoaWxkKHBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7Ci0JaWYgKCFwb3J0LT5zdXNwZW5kZWQgJiYgZGV2aWNlX21heV93YWtldXAodHR5X2RldikpIHsKLQkJZGlzYWJsZV9pcnFfd2FrZShwb3J0LT5pcnEpOwotCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQlwb3J0LT5zdXNwZW5kZWQgPSAwOwotCi0JLyoKLQkgKiBSZS1lbmFibGUgdGhlIGNvbnNvbGUgZGV2aWNlIGFmdGVyIHN1c3BlbmRpbmcuCi0JICovCi0JaWYgKHVhcnRfY29uc29sZShwb3J0KSkgewotCQlzdHJ1Y3Qga3Rlcm1pb3MgdGVybWlvczsKLQogCQkvKgogCQkgKiBGaXJzdCB0cnkgdG8gdXNlIHRoZSBjb25zb2xlIGNmbGFnIHNldHRpbmcuCiAJCSAqLwogCQltZW1zZXQoJnRlcm1pb3MsIDAsIHNpemVvZihzdHJ1Y3Qga3Rlcm1pb3MpKTsKLQkJdGVybWlvcy5jX2NmbGFnID0gcG9ydC0+Y29ucy0+Y2ZsYWc7Ci0KKwkJdGVybWlvcy5jX2NmbGFnID0gdXBvcnQtPmNvbnMtPmNmbGFnOwogCQkvKgogCQkgKiBJZiB0aGF0J3MgdW5zZXQsIHVzZSB0aGUgdHR5IHRlcm1pb3Mgc2V0dGluZy4KIAkJICovCi0JCWlmIChzdGF0ZS0+aW5mby5wb3J0LnR0eSAmJiB0ZXJtaW9zLmNfY2ZsYWcgPT0gMCkKLQkJCXRlcm1pb3MgPSAqc3RhdGUtPmluZm8ucG9ydC50dHktPnRlcm1pb3M7Ci0KLQkJdWFydF9jaGFuZ2VfcG0oc3RhdGUsIDApOwotCQlwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHBvcnQsICZ0ZXJtaW9zLCBOVUxMKTsKLQkJY29uc29sZV9zdGFydChwb3J0LT5jb25zKTsKKwkJaWYgKHRlcm1pb3MuY19jZmxhZyA9PSAwKQorCQkJdGVybWlvcyA9ICpzdGF0ZS0+cG9ydC50dHktPnRlcm1pb3M7CisJCWVsc2UgeworCQkJdGVybWlvcy5jX2lzcGVlZCA9IHRlcm1pb3MuY19vc3BlZWQgPQorCQkJCXR0eV90ZXJtaW9zX2lucHV0X2JhdWRfcmF0ZSgmdGVybWlvcyk7CisJCQl0ZXJtaW9zLmNfaXNwZWVkID0gdGVybWlvcy5jX29zcGVlZCA9CisJCQkJdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKCZ0ZXJtaW9zKTsKKwkJfQorCQl1cG9ydC0+b3BzLT5zZXRfdGVybWlvcyh1cG9ydCwgJnRlcm1pb3MsIE5VTEwpOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHN0YXRlLT5pbmZvLmZsYWdzICYgVUlGX1NVU1BFTkRFRCkgewotCQljb25zdCBzdHJ1Y3QgdWFydF9vcHMgKm9wcyA9IHBvcnQtPm9wczsKKwl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQodXBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7CisJaWYgKCF1cG9ydC0+c3VzcGVuZGVkICYmIGRldmljZV9tYXlfd2FrZXVwKHR0eV9kZXYpKSB7CisJCWRpc2FibGVfaXJxX3dha2UodXBvcnQtPmlycSk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisJdXBvcnQtPnN1c3BlbmRlZCA9IDA7CisKKwkvKgorCSAqIFJlLWVuYWJsZSB0aGUgY29uc29sZSBkZXZpY2UgYWZ0ZXIgc3VzcGVuZGluZy4KKwkgKi8KKwlpZiAodWFydF9jb25zb2xlKHVwb3J0KSkgeworCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMCk7CisJCXVwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHVwb3J0LCAmdGVybWlvcywgTlVMTCk7CisJCWNvbnNvbGVfc3RhcnQodXBvcnQtPmNvbnMpOworCX0KKworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX1NVU1BFTkRFRCkgeworCQljb25zdCBzdHJ1Y3QgdWFydF9vcHMgKm9wcyA9IHVwb3J0LT5vcHM7CiAJCWludCByZXQ7CiAKIAkJdWFydF9jaGFuZ2VfcG0oc3RhdGUsIDApOwotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJb3BzLT5zZXRfbWN0cmwocG9ydCwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JCXJldCA9IG9wcy0+c3RhcnR1cChwb3J0KTsKKwkJc3Bpbl9sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCQlvcHMtPnNldF9tY3RybCh1cG9ydCwgMCk7CisJCXNwaW5fdW5sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCQlyZXQgPSBvcHMtPnN0YXJ0dXAodXBvcnQpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCXVhcnRfY2hhbmdlX3NwZWVkKHN0YXRlLCBOVUxMKTsKLQkJCXNwaW5fbG9ja19pcnEoJnBvcnQtPmxvY2spOwotCQkJb3BzLT5zZXRfbWN0cmwocG9ydCwgcG9ydC0+bWN0cmwpOwotCQkJb3BzLT5zdGFydF90eChwb3J0KTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JCQlzdGF0ZS0+aW5mby5mbGFncyB8PSBVSUZfSU5JVElBTElaRUQ7CisJCQlzcGluX2xvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCQlvcHMtPnNldF9tY3RybCh1cG9ydCwgdXBvcnQtPm1jdHJsKTsKKwkJCW9wcy0+c3RhcnRfdHgodXBvcnQpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCQlzZXRfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPmZsYWdzKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBGYWlsZWQgdG8gcmVzdW1lIC0gbWF5YmUgaGFyZHdhcmUgd2VudCBhd2F5PwpAQCAtMjExNywxMCArMjEzNywxMCBAQAogCQkJdWFydF9zaHV0ZG93bihzdGF0ZSk7CiAJCX0KIAotCQlzdGF0ZS0+aW5mby5mbGFncyAmPSB+VUlGX1NVU1BFTkRFRDsKKwkJY2xlYXJfYml0KEFTWU5DQl9TVVNQRU5ERUQsICZwb3J0LT5mbGFncyk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjMyLDEwICsyMjUyLDEwIEBACiAJaW50IHBhcml0eSA9ICduJzsKIAlpbnQgZmxvdyA9ICduJzsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCWlmICghc3RhdGUgfHwgIXN0YXRlLT51YXJ0X3BvcnQpCiAJCXJldHVybiAtMTsKIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlpZiAoIShwb3J0LT5vcHMtPnBvbGxfZ2V0X2NoYXIgJiYgcG9ydC0+b3BzLT5wb2xsX3B1dF9jaGFyKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0yMjUzLDEwICsyMjczLDEwIEBACiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCWlmICghc3RhdGUgfHwgIXN0YXRlLT51YXJ0X3BvcnQpCiAJCXJldHVybiAtMTsKIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlyZXR1cm4gcG9ydC0+b3BzLT5wb2xsX2dldF9jaGFyKHBvcnQpOwogfQogCkBAIC0yMjY2LDEwICsyMjg2LDEwIEBACiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCWlmICghc3RhdGUgfHwgIXN0YXRlLT51YXJ0X3BvcnQpCiAJCXJldHVybjsKIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlwb3J0LT5vcHMtPnBvbGxfcHV0X2NoYXIocG9ydCwgY2gpOwogfQogI2VuZGlmCkBAIC0yMzYwLDE0ICsyMzgwLDEyIEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IGRydi0+bnI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgaTsKKwkJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCi0JCXN0YXRlLT5jbG9zZV9kZWxheSAgICAgPSA1MDA7CS8qIC41IHNlY29uZHMgKi8KLQkJc3RhdGUtPmNsb3Npbmdfd2FpdCAgICA9IDMwMDAwOwkvKiAzMCBzZWNvbmRzICovCi0JCW11dGV4X2luaXQoJnN0YXRlLT5tdXRleCk7Ci0KLQkJdHR5X3BvcnRfaW5pdCgmc3RhdGUtPmluZm8ucG9ydCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0YXRlLT5pbmZvLmRlbHRhX21zcl93YWl0KTsKLQkJdGFza2xldF9pbml0KCZzdGF0ZS0+aW5mby50bGV0LCB1YXJ0X3Rhc2tsZXRfYWN0aW9uLAorCQl0dHlfcG9ydF9pbml0KHBvcnQpOworCQlwb3J0LT5jbG9zZV9kZWxheSAgICAgPSA1MDA7CS8qIC41IHNlY29uZHMgKi8KKwkJcG9ydC0+Y2xvc2luZ193YWl0ICAgID0gMzAwMDA7CS8qIDMwIHNlY29uZHMgKi8KKwkJdGFza2xldF9pbml0KCZzdGF0ZS0+dGxldCwgdWFydF90YXNrbGV0X2FjdGlvbiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpc3RhdGUpOwogCX0KIApAQCAtMjQwOCw2OSArMjQyNiw3MSBAQAogLyoqCiAgKgl1YXJ0X2FkZF9vbmVfcG9ydCAtIGF0dGFjaCBhIGRyaXZlci1kZWZpbmVkIHBvcnQgc3RydWN0dXJlCiAgKglAZHJ2OiBwb2ludGVyIHRvIHRoZSB1YXJ0IGxvdyBsZXZlbCBkcml2ZXIgc3RydWN0dXJlIGZvciB0aGlzIHBvcnQKLSAqCUBwb3J0OiB1YXJ0IHBvcnQgc3RydWN0dXJlIHRvIHVzZSBmb3IgdGhpcyBwb3J0LgorICoJQHVwb3J0OiB1YXJ0IHBvcnQgc3RydWN0dXJlIHRvIHVzZSBmb3IgdGhpcyBwb3J0LgogICoKICAqCVRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcmVnaXN0ZXIgaXRzIG93biB1YXJ0X3BvcnQgc3RydWN0dXJlCiAgKgl3aXRoIHRoZSBjb3JlIGRyaXZlci4gIFRoZSBtYWluIHB1cnBvc2UgaXMgdG8gYWxsb3cgdGhlIGxvdwogICoJbGV2ZWwgdWFydCBkcml2ZXJzIHRvIGV4cGFuZCB1YXJ0X3BvcnQsIHJhdGhlciB0aGFuIGhhdmluZyB5ZXQKICAqCW1vcmUgbGV2ZWxzIG9mIHN0cnVjdHVyZXMuCiAgKi8KLWludCB1YXJ0X2FkZF9vbmVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK2ludCB1YXJ0X2FkZF9vbmVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OwogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAotCWlmIChwb3J0LT5saW5lID49IGRydi0+bnIpCisJaWYgKHVwb3J0LT5saW5lID49IGRydi0+bnIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RhdGUgPSBkcnYtPnN0YXRlICsgcG9ydC0+bGluZTsKKwlzdGF0ZSA9IGRydi0+c3RhdGUgKyB1cG9ydC0+bGluZTsKKwlwb3J0ID0gJnN0YXRlLT5wb3J0OwogCiAJbXV0ZXhfbG9jaygmcG9ydF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQlpZiAoc3RhdGUtPnBvcnQpIHsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CisJaWYgKHN0YXRlLT51YXJ0X3BvcnQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3RhdGUtPnBvcnQgPSBwb3J0OworCXN0YXRlLT51YXJ0X3BvcnQgPSB1cG9ydDsKIAlzdGF0ZS0+cG1fc3RhdGUgPSAtMTsKIAotCXBvcnQtPmNvbnMgPSBkcnYtPmNvbnM7Ci0JcG9ydC0+aW5mbyA9ICZzdGF0ZS0+aW5mbzsKKwl1cG9ydC0+Y29ucyA9IGRydi0+Y29uczsKKwl1cG9ydC0+c3RhdGUgPSBzdGF0ZTsKIAogCS8qCiAJICogSWYgdGhpcyBwb3J0IGlzIGEgY29uc29sZSwgdGhlbiB0aGUgc3BpbmxvY2sgaXMgYWxyZWFkeQogCSAqIGluaXRpYWxpc2VkLgogCSAqLwotCWlmICghKHVhcnRfY29uc29sZShwb3J0KSAmJiAocG9ydC0+Y29ucy0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkpKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKLQkJbG9ja2RlcF9zZXRfY2xhc3MoJnBvcnQtPmxvY2ssICZwb3J0X2xvY2tfa2V5KTsKKwlpZiAoISh1YXJ0X2NvbnNvbGUodXBvcnQpICYmICh1cG9ydC0+Y29ucy0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkpKSB7CisJCXNwaW5fbG9ja19pbml0KCZ1cG9ydC0+bG9jayk7CisJCWxvY2tkZXBfc2V0X2NsYXNzKCZ1cG9ydC0+bG9jaywgJnBvcnRfbG9ja19rZXkpOwogCX0KIAotCXVhcnRfY29uZmlndXJlX3BvcnQoZHJ2LCBzdGF0ZSwgcG9ydCk7CisJdWFydF9jb25maWd1cmVfcG9ydChkcnYsIHN0YXRlLCB1cG9ydCk7CiAKIAkvKgogCSAqIFJlZ2lzdGVyIHRoZSBwb3J0IHdoZXRoZXIgaXQncyBkZXRlY3RlZCBvciBub3QuICBUaGlzIGFsbG93cwogCSAqIHNldHNlcmlhbCB0byBiZSB1c2VkIHRvIGFsdGVyIHRoaXMgcG9ydHMgcGFyYW1ldGVycy4KIAkgKi8KLQl0dHlfZGV2ID0gdHR5X3JlZ2lzdGVyX2RldmljZShkcnYtPnR0eV9kcml2ZXIsIHBvcnQtPmxpbmUsIHBvcnQtPmRldik7CisJdHR5X2RldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UoZHJ2LT50dHlfZHJpdmVyLCB1cG9ydC0+bGluZSwgdXBvcnQtPmRldik7CiAJaWYgKGxpa2VseSghSVNfRVJSKHR0eV9kZXYpKSkgewogCQlkZXZpY2VfaW5pdF93YWtldXAodHR5X2RldiwgMSk7CiAJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSh0dHlfZGV2LCAwKTsKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgcmVnaXN0ZXIgdHR5IGRldmljZSBvbiBsaW5lICVkXG4iLAotCQkgICAgICAgcG9ydC0+bGluZSk7CisJCSAgICAgICB1cG9ydC0+bGluZSk7CiAKIAkvKgogCSAqIEVuc3VyZSBVUEZfREVBRCBpcyBub3Qgc2V0LgogCSAqLwotCXBvcnQtPmZsYWdzICY9IH5VUEZfREVBRDsKKwl1cG9ydC0+ZmxhZ3MgJj0gflVQRl9ERUFEOwogCiAgb3V0OgotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAltdXRleF91bmxvY2soJnBvcnRfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTI0NzksMjIgKzI0OTksMjIgQEAKIC8qKgogICoJdWFydF9yZW1vdmVfb25lX3BvcnQgLSBkZXRhY2ggYSBkcml2ZXIgZGVmaW5lZCBwb3J0IHN0cnVjdHVyZQogICoJQGRydjogcG9pbnRlciB0byB0aGUgdWFydCBsb3cgbGV2ZWwgZHJpdmVyIHN0cnVjdHVyZSBmb3IgdGhpcyBwb3J0Ci0gKglAcG9ydDogdWFydCBwb3J0IHN0cnVjdHVyZSBmb3IgdGhpcyBwb3J0CisgKglAdXBvcnQ6IHVhcnQgcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoaXMgcG9ydAogICoKICAqCVRoaXMgdW5ob29rcyAoYW5kIGhhbmdzIHVwKSB0aGUgc3BlY2lmaWVkIHBvcnQgc3RydWN0dXJlIGZyb20gdGhlCiAgKgljb3JlIGRyaXZlci4gIE5vIGZ1cnRoZXIgY2FsbHMgd2lsbCBiZSBtYWRlIHRvIHRoZSBsb3ctbGV2ZWwgY29kZQogICoJZm9yIHRoaXMgcG9ydC4KICAqLwotaW50IHVhcnRfcmVtb3ZlX29uZV9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoraW50IHVhcnRfcmVtb3ZlX29uZV9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgcG9ydC0+bGluZTsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IGRydi0+c3RhdGUgKyB1cG9ydC0+bGluZTsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCi0JaWYgKHN0YXRlLT5wb3J0ICE9IHBvcnQpCisJaWYgKHN0YXRlLT51YXJ0X3BvcnQgIT0gdXBvcnQpCiAJCXByaW50ayhLRVJOX0FMRVJUICJSZW1vdmluZyB3cm9uZyBwb3J0OiAlcCAhPSAlcFxuIiwKLQkJCXN0YXRlLT5wb3J0LCBwb3J0KTsKKwkJCXN0YXRlLT51YXJ0X3BvcnQsIHVwb3J0KTsKIAogCW11dGV4X2xvY2soJnBvcnRfbXV0ZXgpOwogCkBAIC0yNTAyLDM3ICsyNTIyLDM1IEBACiAJICogTWFyayB0aGUgcG9ydCAiZGVhZCIgLSB0aGlzIHByZXZlbnRzIGFueSBvcGVucyBmcm9tCiAJICogc3VjY2VlZGluZyB3aGlsZSB3ZSBzaHV0IGRvd24gdGhlIHBvcnQuCiAJICovCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQlwb3J0LT5mbGFncyB8PSBVUEZfREVBRDsKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCXVwb3J0LT5mbGFncyB8PSBVUEZfREVBRDsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAogCS8qCiAJICogUmVtb3ZlIHRoZSBkZXZpY2VzIGZyb20gdGhlIHR0eSBsYXllcgogCSAqLwotCXR0eV91bnJlZ2lzdGVyX2RldmljZShkcnYtPnR0eV9kcml2ZXIsIHBvcnQtPmxpbmUpOworCXR0eV91bnJlZ2lzdGVyX2RldmljZShkcnYtPnR0eV9kcml2ZXIsIHVwb3J0LT5saW5lKTsKIAotCWluZm8gPSAmc3RhdGUtPmluZm87Ci0JaWYgKGluZm8gJiYgaW5mby0+cG9ydC50dHkpCi0JCXR0eV92aGFuZ3VwKGluZm8tPnBvcnQudHR5KTsKKwlpZiAocG9ydC0+dHR5KQorCQl0dHlfdmhhbmd1cChwb3J0LT50dHkpOwogCiAJLyoKIAkgKiBGcmVlIHRoZSBwb3J0IElPIGFuZCBtZW1vcnkgcmVzb3VyY2VzLCBpZiBhbnkuCiAJICovCi0JaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQotCQlwb3J0LT5vcHMtPnJlbGVhc2VfcG9ydChwb3J0KTsKKwlpZiAodXBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQorCQl1cG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQodXBvcnQpOwogCiAJLyoKIAkgKiBJbmRpY2F0ZSB0aGF0IHRoZXJlIGlzbid0IGEgcG9ydCBoZXJlIGFueW1vcmUuCiAJICovCi0JcG9ydC0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKKwl1cG9ydC0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKIAogCS8qCiAJICogS2lsbCB0aGUgdGFza2xldCwgYW5kIGZyZWUgcmVzb3VyY2VzLgogCSAqLwotCWlmIChpbmZvKQotCQl0YXNrbGV0X2tpbGwoJmluZm8tPnRsZXQpOworCXRhc2tsZXRfa2lsbCgmc3RhdGUtPnRsZXQpOwogCi0Jc3RhdGUtPnBvcnQgPSBOVUxMOworCXN0YXRlLT51YXJ0X3BvcnQgPSBOVUxMOwogCW11dGV4X3VubG9jaygmcG9ydF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggZWQ0NjQ4Yi4uYTNiYjQ5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTg4NCw2ICs4ODQsNyBAQAogCVBDTUNJQV9ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgweDAxOTIsIDB4YTU1NSwgIlNXXzU1NV9TRVIuY2lzIiksICAvKiBTaWVycmEgQWlyY2FyZCA1NTUgQ0RNQSAxeHJ0dCBNb2RlbSAtLSBwcmUgdXBkYXRlICovCiAJUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDEzZiwgMHhhNTU1LCAiU1dfNTU1X1NFUi5jaXMiKSwgIC8qIFNpZXJyYSBBaXJjYXJkIDU1NSBDRE1BIDF4cnR0IE1vZGVtIC0tIHBvc3QgdXBkYXRlICovCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJNdWx0aVRlY2giLCAiUENNQ0lBIDU2SyBEYXRhRmF4IiwgMHg4NDIwNDdlZSwgMHhjMmVmY2YwMywgImNpcy9NVDU2MzRaTFguY2lzIiksCisJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1Qi0yIiwgMHg5NjkxM2E4NSwgMHgyN2FiNTQzNywgIkNPTXBhZDIuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1Qi00IiwgMHg5NjkxM2E4NSwgMHhjZWM4ZjEwMiwgIkNPTXBhZDQuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyMygiQURWQU5URUNIIiwgIkNPTXBhZC0zMi84NSIsICIxLjAiLCAweDk2OTEzYTg1LCAweDhmYmU5MmFlLCAweDA4NzdiNjI3LCAiQ09NcGFkMi5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMigiUlMtQ09NIDJQIiwgMHhhZDIwYjE1NiwgImNpcy9SUy1DT00tMlAuY2lzIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKaW5kZXggNTJkYjVjYy4uMmU3MWJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2tzODY5NS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qga3M4Njk1dWFydF9yeF9jaGFycyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjaCwgbHNyLCBmbGcsIG1heF9jb3VudCA9IDI1NjsKIAogCXN0YXR1cyA9IFVBUlRfR0VUX0xTUihwb3J0KTsJCS8qIGNsZWFycyBwZW5kaW5nIExTUiBpbnRlcnJ1cHRzICovCkBAIC0yMTAsNyArMjEwLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBrczg2OTV1YXJ0X3R4X2NoYXJzKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CkBAIC0yNjYsNyArMjY2LDcgQEAKIAlpZiAoc3RhdHVzICYgVVJNU19VUlRFUkkpCiAJCXBvcnQtPmljb3VudC5ybmcrKzsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+c3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKaW5kZXggYTdiZjAyNC4uZWE3NDQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogc3RhdGljIHZvaWQgbGg3YTQweHVhcnRfcnhfY2hhcnMgKHN0cnVjdCB1YXJ0X3BvcnQqIHBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QqIHR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0KiB0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJaW50IGNiUnhNYXggPSAyNTY7CS8qIChHcm9zcykgbGltaXQgb24gcmVjZWl2ZSAqLwogCXVuc2lnbmVkIGludCBkYXRhOwkvKiBSZWNlaXZlZCBkYXRhIGFuZCBzdGF0dXMgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZzsKQEAgLTE4NCw3ICsxODQsNyBAQAogCiBzdGF0aWMgdm9pZCBsaDdhNDB4dWFydF90eF9jaGFycyAoc3RydWN0IHVhcnRfcG9ydCogcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYqIHhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYqIHhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAJaW50IGNiVHhNYXggPSBwb3J0LT5maWZvc2l6ZTsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCWlmIChkZWx0YSAmIENUUykKIAkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSAocG9ydCwgc3RhdHVzICYgQ1RTKTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBsaDdhNDB4dWFydF9pbnQgKGludCBpcnEsIHZvaWQqIGRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IDU0ZGQxNmQuLjBmN2NmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHJlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCwgdW5zaWduZWQgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaDsKIAl1bnNpZ25lZCBpbnQgZGlzciA9ICpzdGF0dXM7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKQEAgLTM0OCw3ICszNDgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNtaXRfY2hhcnMoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaW50IGNvdW50OwogCiAJaWYgKHVwLT5wb3J0LnhfY2hhcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCAzMmRjMmZjLi44NTExOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMzYxLDcgKzM2MSw3IEBACiAKIHN0YXRpYyB2b2lkIHNjaV90cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAl1bnNpZ25lZCBpbnQgc3RvcHBlZCA9IHVhcnRfdHhfc3RvcHBlZChwb3J0KTsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJdW5zaWduZWQgc2hvcnQgY3RybDsKQEAgLTQyNiw3ICs0MjYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHNjaV9yZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNjaV9wb3J0ICpzY2lfcG9ydCA9IHRvX3NjaV9wb3J0KHBvcnQpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCWludCBpLCBjb3VudCwgY29waWVkID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJdW5zaWduZWQgY2hhciBmbGFnOwpAQCAtNTQ2LDcgKzU0Niw3IEBACiB7CiAJaW50IGNvcGllZCA9IDA7CiAJdW5zaWduZWQgc2hvcnQgc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAogCWlmIChzdGF0dXMgJiBTQ3hTUl9PUkVSKHBvcnQpKSB7CiAJCS8qIG92ZXJydW4gZXJyb3IgKi8KQEAgLTYwMCw3ICs2MDAsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzY2lfaGFuZGxlX2ZpZm9fb3ZlcnJ1bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCWludCBjb3BpZWQgPSAwOwogCiAJaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9TQ0lGKQpAQCAtNjIzLDcgKzYyMyw3IEBACiB7CiAJaW50IGNvcGllZCA9IDA7CiAJdW5zaWduZWQgc2hvcnQgc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSB0b19zY2lfcG9ydChwb3J0KTsKIAogCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYyBiL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYwppbmRleCBkNTI3NmMwLi45Nzk0ZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCkBAIC00NjksOSArNDY5LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChwb3J0LT5zY19wb3J0LmluZm8pIHsKKwlpZiAocG9ydC0+c2NfcG9ydC5zdGF0ZSkgewogCQkvKiBUaGUgc2VyaWFsX2NvcmUgc3R1ZmZzIGFyZSBpbml0aWxpemVkLCB1c2UgdGhlbSAqLwotCQl0dHkgPSBwb3J0LT5zY19wb3J0LmluZm8tPnBvcnQudHR5OworCQl0dHkgPSBwb3J0LT5zY19wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAl9CiAJZWxzZSB7CiAJCS8qIE5vdCByZWdpc3RlcmVkIHlldCAtIGNhbid0IHBhc3MgdG8gdHR5IGxheWVyLiAgKi8KQEAgLTU1MCw5ICs1NTAsOSBAQAogCiAJQlVHX09OKCFwb3J0LT5zY19pc19hc3luY2gpOwogCi0JaWYgKHBvcnQtPnNjX3BvcnQuaW5mbykgeworCWlmIChwb3J0LT5zY19wb3J0LnN0YXRlKSB7CiAJCS8qIFdlJ3JlIGluaXRpbGl6ZWQsIHVzaW5nIHNlcmlhbCBjb3JlIGluZnJhc3RydWN0dXJlICovCi0JCXhtaXQgPSAmcG9ydC0+c2NfcG9ydC5pbmZvLT54bWl0OworCQl4bWl0ID0gJnBvcnQtPnNjX3BvcnQuc3RhdGUtPnhtaXQ7CiAJfSBlbHNlIHsKIAkJLyogUHJvYmFibHkgc25fc2FsX3N3aXRjaF90b19hc3luY2ggaGFzIGJlZW4gcnVuIGJ1dCBzZXJpYWwgY29yZSBpc24ndAogCQkgKiBpbml0aWxpemVkIHlldC4gIEp1c3QgcmV0dXJuLiAgV3JpdGVzIGFyZSBnb2luZyB0aHJvdWdoCkBAIC05MjcsNyArOTI3LDcgQEAKIAkvKiBXZSBjYW4ndCBsb29rIGF0IHRoZSB4bWl0IGJ1ZmZlciBpZiB3ZSdyZSBub3QgcmVnaXN0ZXJlZCB3aXRoIHNlcmlhbCBjb3JlCiAJICogIHlldC4gIFNvIG9ubHkgZG8gdGhlIGZhbmN5IHJlY292ZXJ5IGFmdGVyIHJlZ2lzdGVyaW5nCiAJICovCi0JaWYgKCFwb3J0LT5zY19wb3J0LmluZm8pIHsKKwlpZiAoIXBvcnQtPnNjX3BvcnQuc3RhdGUpIHsKIAkJLyogTm90IHlldCByZWdpc3RlcmVkIHdpdGggc2VyaWFsIGNvcmUgLSBzaW1wbGUgY2FzZSAqLwogCQlwdXRzX3Jhd19maXhlZChwb3J0LT5zY19vcHMtPnNhbF9wdXRzX3JhdywgcywgY291bnQpOwogCQlyZXR1cm47CkBAIC05MzYsOCArOTM2LDggQEAKIAkvKiBzb21lYm9keSByZWFsbHkgd2FudHMgdGhpcyBvdXRwdXQsIG1pZ2h0IGJlIGFuCiAJICogb29wcywga2RiLCBwYW5pYywgZXRjLiAgbWFrZSBzdXJlIHRoZXkgZ2V0IGl0LiAqLwogCWlmIChzcGluX2lzX2xvY2tlZCgmcG9ydC0+c2NfcG9ydC5sb2NrKSkgewotCQlpbnQgbGhlYWQgPSBwb3J0LT5zY19wb3J0LmluZm8tPnhtaXQuaGVhZDsKLQkJaW50IGx0YWlsID0gcG9ydC0+c2NfcG9ydC5pbmZvLT54bWl0LnRhaWw7CisJCWludCBsaGVhZCA9IHBvcnQtPnNjX3BvcnQuc3RhdGUtPnhtaXQuaGVhZDsKKwkJaW50IGx0YWlsID0gcG9ydC0+c2NfcG9ydC5zdGF0ZS0+eG1pdC50YWlsOwogCQlpbnQgY291bnRlciwgZ290X2xvY2sgPSAwOwogCiAJCS8qCkBAIC05NjIsMTMgKzk2MiwxMyBAQAogCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBzdGlsbCBsb2NrZWQgKi8KLQkJCQlpZiAoKGxoZWFkICE9IHBvcnQtPnNjX3BvcnQuaW5mby0+eG1pdC5oZWFkKQorCQkJCWlmICgobGhlYWQgIT0gcG9ydC0+c2NfcG9ydC5zdGF0ZS0+eG1pdC5oZWFkKQogCQkJCSAgICB8fCAobHRhaWwgIT0KLQkJCQkJcG9ydC0+c2NfcG9ydC5pbmZvLT54bWl0LnRhaWwpKSB7CisJCQkJCXBvcnQtPnNjX3BvcnQuc3RhdGUtPnhtaXQudGFpbCkpIHsKIAkJCQkJbGhlYWQgPQotCQkJCQkJcG9ydC0+c2NfcG9ydC5pbmZvLT54bWl0LmhlYWQ7CisJCQkJCQlwb3J0LT5zY19wb3J0LnN0YXRlLT54bWl0LmhlYWQ7CiAJCQkJCWx0YWlsID0KLQkJCQkJCXBvcnQtPnNjX3BvcnQuaW5mby0+eG1pdC50YWlsOworCQkJCQkJcG9ydC0+c2NfcG9ydC5zdGF0ZS0+eG1pdC50YWlsOwogCQkJCQljb3VudGVyID0gMDsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5odi5jIGIvZHJpdmVycy9zZXJpYWwvc3VuaHYuYwppbmRleCAxZGY1MzI1Li5kNTQ4NjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKQEAgLTE4NCw4ICsxODQsOCBAQAogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBOVUxMOwogCi0JaWYgKHBvcnQtPmluZm8gIT0gTlVMTCkJCS8qIFVub3BlbmVkIHNlcmlhbCBjb25zb2xlICovCi0JCXR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCWlmIChwb3J0LT5zdGF0ZSAhPSBOVUxMKQkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KKwkJdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCiAJaWYgKHN1bmh2X29wcy0+cmVjZWl2ZV9jaGFycyhwb3J0LCB0dHkpKQogCQlzdW5fZG9fYnJlYWsoKTsKQEAgLTE5NywxMCArMTk3LDEwIEBACiB7CiAJc3RydWN0IGNpcmNfYnVmICp4bWl0OwogCi0JaWYgKCFwb3J0LT5pbmZvKQorCWlmICghcG9ydC0+c3RhdGUpCiAJCXJldHVybjsKIAotCXhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwl4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHBvcnQpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKaW5kZXggMDM1NWVmZS4uZDFhZDM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKQEAgLTExNyw4ICsxMTcsOCBAQAogCWludCBjb3VudCA9IDA7CiAJaW50IGk7CiAKLQlpZiAodXAtPnBvcnQuaW5mbyAhPSBOVUxMKQkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KLQkJdHR5ID0gdXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJaWYgKHVwLT5wb3J0LnN0YXRlICE9IE5VTEwpCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLworCQl0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAKIAkvKiBSZWFkIG51bWJlciBvZiBCWVRFUyAoQ2hhcmFjdGVyICsgU3RhdHVzKSBhdmFpbGFibGUuICovCiAJaWYgKHN0YXQtPnNyZWcuaXNyMCAmIFNBQjgyNTMyX0lTUjBfUlBGKSB7CkBAIC0yMjksNyArMjI5LDcgQEAKIHN0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0ICp1cCwKIAkJCSAgIHVuaW9uIHNhYjgyNTMyX2lycV9zdGF0dXMgKnN0YXQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWludCBpOwogCiAJaWYgKHN0YXQtPnNyZWcuaXNyMSAmIFNBQjgyNTMyX0lTUjFfQUxMUykgewpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCXVwLT5wb3J0Lmljb3VudC5kc3IrKzsKIAl9CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHN1bnNhYl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtNDI5LDcgKzQyOSw3IEBACiBzdGF0aWMgdm9pZCBzdW5zYWJfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKikgcG9ydDsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaW50IGk7CiAKIAl1cC0+aW50ZXJydXB0X21hc2sxICY9IH4oU0FCODI1MzJfSU1SMV9BTExTfFNBQjgyNTMyX0lNUjFfWFBSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCmluZGV4IDQ3YzY4MzcuLjY4ZDI2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwpAQCAtMzExLDcgKzMxMSw3IEBACiBzdGF0aWMgc3RydWN0IHR0eV9zdHJ1Y3QgKgogcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cCwgdW5zaWduZWQgY2hhciAqc3RhdHVzKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGNoYXIgY2gsIGZsYWc7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKIAlpbnQgc2F3X2NvbnNvbGVfYnJrID0gMDsKQEAgLTM4OSw3ICszODksNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaW50IGNvdW50OwogCiAJaWYgKHVwLT5wb3J0LnhfY2hhcikgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVwLT5wb3J0LCBzdGF0dXMgJiBVQVJUX01TUl9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzdW5zdV9zZXJpYWxfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCmluZGV4IGUwOWQzY2UuLmVmNjkzYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwpAQCAtMzI4LDkgKzMyOCw5IEBACiAJdW5zaWduZWQgY2hhciBjaCwgcjEsIGZsYWc7CiAKIAl0dHkgPSBOVUxMOwotCWlmICh1cC0+cG9ydC5pbmZvICE9IE5VTEwgJiYJCS8qIFVub3BlbmVkIHNlcmlhbCBjb25zb2xlICovCi0JICAgIHVwLT5wb3J0LmluZm8tPnBvcnQudHR5ICE9IE5VTEwpCS8qIEtleWJvYXJkIHx8IG1vdXNlICovCi0JCXR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCWlmICh1cC0+cG9ydC5zdGF0ZSAhPSBOVUxMICYmCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLworCSAgICB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHkgIT0gTlVMTCkJLyogS2V5Ym9hcmQgfHwgbW91c2UgKi8KKwkJdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJZm9yICg7OykgewogCkBAIC00NTEsNyArNDUxLDcgQEAKIAkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVwLT5wb3J0LAogCQkJCQkgICAgICAgKHN0YXR1cyAmIENUUykpOwogCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAl9CiAKIAl1cC0+cHJldl9zdGF0dXMgPSBzdGF0dXM7CkBAIC01MDEsOSArNTAxLDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1cC0+cG9ydC5pbmZvID09IE5VTEwpCisJaWYgKHVwLT5wb3J0LnN0YXRlID09IE5VTEwpCiAJCWdvdG8gYWNrX3R4X2ludDsKLQl4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJeG1pdCA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQogCQlnb3RvIGFja190eF9pbnQ7CiAKQEAgLTcwNSw3ICs3MDUsNyBAQAogCQlwb3J0LT5pY291bnQudHgrKzsKIAkJcG9ydC0+eF9jaGFyID0gMDsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwkJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJCXdyaXRlYih4bWl0LT5idWZbeG1pdC0+dGFpbF0sICZjaGFubmVsLT5kYXRhKTsKIAkJWlNERUxBWSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmMKaW5kZXggMDYzYTMxMy4uMzRiMzFkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAKIHN0YXRpYyB2b2lkIHRpbWJ1YXJ0X3J4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAKIAl3aGlsZSAoaW9yZWFkMzIocG9ydC0+bWVtYmFzZSArIFRJTUJVQVJUX0lTUikgJiBSWERQKSB7CiAJCXU4IGNoID0gaW9yZWFkOChwb3J0LT5tZW1iYXNlICsgVElNQlVBUlRfUlhGSUZPKTsKQEAgLTg2LDcgKzg2LDcgQEAKIAl9CiAKIAlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7Ci0JdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+aW5mby0+cG9ydC50dHkpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPnN0YXRlLT5wb3J0LnR0eSk7CiAJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKIAogCWRldl9kYmcocG9ydC0+ZGV2LCAiJXMgLSB0b3RhbCByZWFkICVkIGJ5dGVzXG4iLApAQCAtOTUsNyArOTUsNyBAQAogCiBzdGF0aWMgdm9pZCB0aW1idWFydF90eF9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCXdoaWxlICghKGlvcmVhZDMyKHBvcnQtPm1lbWJhc2UgKyBUSU1CVUFSVF9JU1IpICYgVFhCRikgJiYKIAkJIXVhcnRfY2lyY19lbXB0eSh4bWl0KSkgewpAQCAtMTE4LDcgKzExOCw3IEBACiB7CiAJc3RydWN0IHRpbWJ1YXJ0X3BvcnQgKnVhcnQgPQogCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHRpbWJ1YXJ0X3BvcnQsIHBvcnQpOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHBvcnQpKQogCQlyZXR1cm47CkBAIC0yMzEsNyArMjMxLDcgQEAKIAkJaW93cml0ZTMyKENUU19ERUxUQSwgcG9ydC0+bWVtYmFzZSArIFRJTUJVQVJUX0lTUik7CiAJCWN0cyA9IHRpbWJ1YXJ0X2dldF9tY3RybChwb3J0KTsKIAkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZShwb3J0LCBjdHMgJiBUSU9DTV9DVFMpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCiAJKmllciB8PSBDVFNfREVMVEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jIGIvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYwppbmRleCAzMzE3MTQ4Li4zNzdmMjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAogc3RhdGljIGludCB1bGl0ZV9yZWNlaXZlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBzdGF0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGNoYXIgY2ggPSAwOwogCWNoYXIgZmxhZyA9IFRUWV9OT1JNQUw7CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiBzdGF0aWMgaW50IHVsaXRlX3RyYW5zbWl0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBzdGF0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCAgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJaWYgKHN0YXQgJiBVTElURV9TVEFUVVNfVFhGVUxMKQogCQlyZXR1cm4gMDsKQEAgLTE1NCwxNyArMTU0LDIyIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgdWxpdGVfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCWludCBidXN5OworCWludCBidXN5LCBuID0gMDsKIAogCWRvIHsKIAkJaW50IHN0YXQgPSByZWFkYihwb3J0LT5tZW1iYXNlICsgVUxJVEVfU1RBVFVTKTsKIAkJYnVzeSAgPSB1bGl0ZV9yZWNlaXZlKHBvcnQsIHN0YXQpOwogCQlidXN5IHw9IHVsaXRlX3RyYW5zbWl0KHBvcnQsIHN0YXQpOworCQluKys7CiAJfSB3aGlsZSAoYnVzeSk7CiAKLQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5pbmZvLT5wb3J0LnR0eSk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJLyogd29yayBkb25lPyAqLworCWlmIChuID4gMSkgeworCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5zdGF0ZS0+cG9ydC50dHkpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfSBlbHNlIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB1bGl0ZV90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtMjIxLDcgKzIyNiw3IEBACiAJaW50IHJldDsKIAogCXJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgdWxpdGVfaXNyLAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLCAidWFydGxpdGUiLCBwb3J0KTsKKwkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sICJ1YXJ0bGl0ZSIsIHBvcnQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCmluZGV4IGU5NDVlNzguLjBjMDhmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJdW5zaWduZWQgY2hhciAqcDsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZxZV9wb3J0LT5wb3J0OwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCWJkcCA9IHFlX3BvcnQtPnJ4X2N1cjsKIApAQCAtNDY2LDcgKzQ2Niw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciBjaCwgKmNwOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcWVfcG9ydC0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAlzdHJ1Y3QgcWVfYmQgKmJkcDsKIAl1MTYgc3RhdHVzOwogCXVuc2lnbmVkIGludCBmbGc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMgYi9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKaW5kZXggZGFjNTUwZS4uM2JlYjZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJY2hhciBmbGFnOwogCWludCBtYXhfY291bnQgPSBSWF9NQVhfQ09VTlQ7CiAKLQl0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwl0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJbHNyID0gKnN0YXR1czsKIAogCWRvIHsKQEAgLTM4Niw3ICszODYsNyBAQAogCWlmIChtc3IgJiBVQVJUX01TUl9EQ1RTKQogCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKHBvcnQsIG1zciAmIFVBUlRfTVNSX0NUUyk7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0zOTQsNyArMzk0LDcgQEAKIAlzdHJ1Y3QgY2lyY19idWYgKnhtaXQ7CiAJaW50IG1heF9jb3VudCA9IFRYX01BWF9DT1VOVDsKIAotCXhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwl4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJaWYgKHBvcnQtPnhfY2hhcikgewogCQlzaXVfd3JpdGUocG9ydCwgVUFSVF9UWCwgcG9ydC0+eF9jaGFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3pzLmMgYi9kcml2ZXJzL3NlcmlhbC96cy5jCmluZGV4IGQ4YzI4MDkuLjFhN2ZkM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3pzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvenMuYwpAQCAtNjAyLDEyICs2MDIsMTIgQEAKIAkJdWFydF9pbnNlcnRfY2hhcih1cG9ydCwgc3RhdHVzLCBSeF9PVlIsIGNoLCBmbGFnKTsKIAl9CiAKLQl0dHlfZmxpcF9idWZmZXJfcHVzaCh1cG9ydC0+aW5mby0+cG9ydC50dHkpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHVwb3J0LT5zdGF0ZS0+cG9ydC50dHkpOwogfQogCiBzdGF0aWMgdm9pZCB6c19yYXdfdHJhbnNtaXRfY2hhcnMoc3RydWN0IHpzX3BvcnQgKnpwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ6cG9ydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ6cG9ydC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAogCS8qIFhPTi9YT0ZGIGNoYXJzLiAgKi8KIAlpZiAoenBvcnQtPnBvcnQueF9jaGFyKSB7CkBAIC02ODYsNyArNjg2LDcgQEAKIAkJCXVwb3J0LT5pY291bnQucm5nKys7CiAKIAkJaWYgKGRlbHRhKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cG9ydC0+c3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCiAJCXNwaW5fbG9jaygmc2NjLT56bG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZmkvS2NvbmZpZyBiL2RyaXZlcnMvc2ZpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxMTUxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2ZpL0tjb25maWcKQEAgLTAsMCArMSwxNyBAQAorIworIyBTRkkgQ29uZmlndXJhdGlvbgorIworCittZW51Y29uZmlnIFNGSQorCWJvb2wgIlNGSSAoU2ltcGxlIEZpcm13YXJlIEludGVyZmFjZSkgU3VwcG9ydCIKKwktLS1oZWxwLS0tCisJVGhlIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgKFNGSSkgcHJvdmlkZXMgYSBsaWdodHdlaWdodCBtZXRob2QKKwlmb3IgcGxhdGZvcm0gZmlybXdhcmUgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbQorCXZpYSBzdGF0aWMgdGFibGVzIGluIG1lbW9yeS4gIEtlcm5lbCBTRkkgc3VwcG9ydCBpcyByZXF1aXJlZCB0bworCWJvb3Qgb24gU0ZJLW9ubHkgcGxhdGZvcm1zLiAgQ3VycmVudGx5LCBhbGwgU0ZJLW9ubHkgcGxhdGZvcm1zIGFyZQorCWJhc2VkIG9uIHRoZSAybmQgZ2VuZXJhdGlvbiBJbnRlbCBBdG9tIHByb2Nlc3NvciBwbGF0Zm9ybSwKKwljb2RlLW5hbWVkIE1vb3Jlc3Rvd24uCisKKwlGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly9zaW1wbGVmaXJtd2FyZS5vcmcKKworCVNheSAnWScgaGVyZSB0byBlbmFibGUgdGhlIGtlcm5lbCB0byBib290IG9uIFNGSS1vbmx5IHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2ZpL01ha2VmaWxlIGIvZHJpdmVycy9zZmkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0MzczMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2ZpL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLXkJKz0gc2ZpX2FjcGkubworb2JqLXkJKz0gc2ZpX2NvcmUubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NmaS9zZmlfYWNwaS5jIGIvZHJpdmVycy9zZmkvc2ZpX2FjcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGFiYTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZmkvc2ZpX2FjcGkuYwpAQCAtMCwwICsxLDE3NSBAQAorLyogc2ZpX2FjcGkuYyBTaW1wbGUgRmlybXdhcmUgSW50ZXJmYWNlIC0gQUNQSSBleHRlbnNpb25zICovCisKKy8qCisKKyAgVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAgcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorCisgIEdQTCBMSUNFTlNFIFNVTU1BUlkKKworICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKworICBCU0QgTElDRU5TRQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiU0ZJIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKyNpbmNsdWRlICJzZmlfY29yZS5oIgorCisvKgorICogU0ZJIGNhbiBhY2Nlc3MgQUNQSS1kZWZpbmVkIHRhYmxlcyB2aWEgYW4gb3B0aW9uYWwgQUNQSSBYU0RULgorICoKKyAqIFRoaXMgYWxsb3dzIHJlLXVzZSwgYW5kIGF2b2lkcyByZS1kZWZpbml0aW9uLCBvZiBzdGFuZGFyZCB0YWJsZXMuCisgKiBGb3IgZXhhbXBsZSwgdGhlICJNQ0ZHIiB0YWJsZSBpcyBkZWZpbmVkIGJ5IFBDSSwgcmVzZXJ2ZWQgYnkgQUNQSSwKKyAqIGFuZCBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50IG1hbnkgU0ZJLW9ubHkgc3lzdGVtcy4KKyAqLworCitzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfeHNkdCAqeHNkdF92YSBfX3JlYWRfbW9zdGx5OworCisjZGVmaW5lIFhTRFRfR0VUX05VTV9FTlRSSUVTKHB0YWJsZSwgZW50cnlfdHlwZSkgXAorCSgocHRhYmxlLT5oZWFkZXIubGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpIC8gXAorCShzaXplb2YoZW50cnlfdHlwZSkpKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICphY3BpX3RvX3NmaV90aCgKKwkJCQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRoKQoreworCXJldHVybiAoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKil0aDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnNmaV90b19hY3BpX3RoKAorCQkJCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0aCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXRoOworfQorCisvKgorICogc2ZpX2FjcGlfcGFyc2VfeHNkdCgpCisgKgorICogUGFyc2UgdGhlIEFDUEkgWFNEVCBmb3IgbGF0ZXIgYWNjZXNzIGJ5IHNmaV9hY3BpX3RhYmxlX3BhcnNlKCkuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNmaV9hY3BpX3BhcnNlX3hzZHQoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoKQoreworCXN0cnVjdCBzZmlfdGFibGVfa2V5IGtleSA9IFNGSV9BTllfS0VZOworCWludCB0YmxfY250LCBpOworCXZvaWQgKnJldDsKKworCXhzZHRfdmEgPSAoc3RydWN0IGFjcGlfdGFibGVfeHNkdCAqKXRoOworCXRibF9jbnQgPSBYU0RUX0dFVF9OVU1fRU5UUklFUyh4c2R0X3ZhLCB1NjQpOworCWZvciAoaSA9IDA7IGkgPCB0YmxfY250OyBpKyspIHsKKwkJcmV0ID0gc2ZpX2NoZWNrX3RhYmxlKHhzZHRfdmEtPnRhYmxlX29mZnNldF9lbnRyeVtpXSwgJmtleSk7CisJCWlmIChJU19FUlIocmV0KSkgeworCQkJZGlzYWJsZV9zZmkoKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgX19pbml0IHNmaV9hY3BpX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSB4c2R0X2tleSA9IHsgLnNpZyA9IFNGSV9TSUdfWFNEVCB9OworCisJc2ZpX3RhYmxlX3BhcnNlKFNGSV9TSUdfWFNEVCwgTlVMTCwgTlVMTCwgc2ZpX2FjcGlfcGFyc2VfeHNkdCk7CisKKwkvKiBPbmx5IGNhbGwgdGhlIGdldF90YWJsZSB0byBrZWVwIHRoZSB0YWJsZSBtYXBwZWQgKi8KKwl4c2R0X3ZhID0gKHN0cnVjdCBhY3BpX3RhYmxlX3hzZHQgKilzZmlfZ2V0X3RhYmxlKCZ4c2R0X2tleSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnNmaV9hY3BpX2dldF90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSAqa2V5KQoreworCXUzMiB0YmxfY250LCBpOworCXZvaWQgKnJldDsKKworCXRibF9jbnQgPSBYU0RUX0dFVF9OVU1fRU5UUklFUyh4c2R0X3ZhLCB1NjQpOworCWZvciAoaSA9IDA7IGkgPCB0YmxfY250OyBpKyspIHsKKwkJcmV0ID0gc2ZpX2NoZWNrX3RhYmxlKHhzZHRfdmEtPnRhYmxlX29mZnNldF9lbnRyeVtpXSwga2V5KTsKKwkJaWYgKCFJU19FUlIocmV0KSAmJiByZXQpCisJCQlyZXR1cm4gc2ZpX3RvX2FjcGlfdGgocmV0KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2ZpX2FjcGlfcHV0X3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpCit7CisJc2ZpX3B1dF90YWJsZShhY3BpX3RvX3NmaV90aCh0YWJsZSkpOworfQorCisvKgorICogc2ZpX2FjcGlfdGFibGVfcGFyc2UoKQorICoKKyAqIEZpbmQgc3BlY2lmaWVkIHRhYmxlIGluIFhTRFQsIHJ1biBoYW5kbGVyIG9uIGl0IGFuZCByZXR1cm4gaXRzIHJldHVybiB2YWx1ZQorICovCitpbnQgc2ZpX2FjcGlfdGFibGVfcGFyc2UoY2hhciAqc2lnbmF0dXJlLCBjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCwKKwkJCWludCgqaGFuZGxlcikoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopKQoreworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworCXN0cnVjdCBzZmlfdGFibGVfa2V5IGtleTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzZmlfZGlzYWJsZWQpCisJCXJldHVybiAtMTsKKworCWtleS5zaWcgPSBzaWduYXR1cmU7CisJa2V5Lm9lbV9pZCA9IG9lbV9pZDsKKwlrZXkub2VtX3RhYmxlX2lkID0gb2VtX3RhYmxlX2lkOworCisJdGFibGUgPSBzZmlfYWNwaV9nZXRfdGFibGUoJmtleSk7CisJaWYgKCF0YWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBoYW5kbGVyKHRhYmxlKTsKKwlzZmlfYWNwaV9wdXRfdGFibGUodGFibGUpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NmaS9zZmlfY29yZS5jIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I0OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYwpAQCAtMCwwICsxLDQwNyBAQAorLyogc2ZpX2NvcmUuYyBTaW1wbGUgRmlybXdhcmUgSW50ZXJmYWNlIC0gY29yZSBpbnRlcm5hbHMgKi8KKworLyoKKworICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisKKyAgR1BMIExJQ0VOU0UgU1VNTUFSWQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorCisgIEJTRCBMSUNFTlNFCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJTRkkiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2ZpLmg+CisKKyNpbmNsdWRlICJzZmlfY29yZS5oIgorCisjZGVmaW5lIE9OX1NBTUVfUEFHRShhZGRyMSwgYWRkcjIpIFwKKwkoKCh1bnNpZ25lZCBsb25nKShhZGRyMSkgJiBQQUdFX01BU0spID09IFwKKwkoKHVuc2lnbmVkIGxvbmcpKGFkZHIyKSAmIFBBR0VfTUFTSykpCisjZGVmaW5lIFRBQkxFX09OX1BBR0UocGFnZSwgdGFibGUsIHNpemUpIChPTl9TQU1FX1BBR0UocGFnZSwgdGFibGUpICYmIFwKKwkJCQlPTl9TQU1FX1BBR0UocGFnZSwgdGFibGUgKyBzaXplKSkKKworaW50IHNmaV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChzZmlfZGlzYWJsZWQpOworCitzdGF0aWMgdTY0IHN5c3RfcGEgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqc3lzdF92YSBfX3JlYWRfbW9zdGx5OworCisvKgorICogRlcgY3JlYXRlcyBhbmQgc2F2ZXMgdGhlIFNGSSB0YWJsZXMgaW4gbWVtb3J5LiBXaGVuIHRoZXNlIHRhYmxlcyBnZXQKKyAqIHVzZWQsIHRoZXkgbWF5IG5lZWQgdG8gYmUgbWFwcGVkIHRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgYW5kIHRoZSBtYXBwaW5nCisgKiBjYW4gaGFwcGVuIGJlZm9yZSBvciBhZnRlciB0aGUgaW9yZW1hcCgpIGlzIHJlYWR5LCBzbyBhIGZsYWcgaXMgbmVlZGVkCisgKiB0byBpbmRpY2F0aW5nIHRoaXMKKyAqLworc3RhdGljIHUzMiBzZmlfdXNlX2lvcmVtYXAgX19yZWFkX21vc3RseTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqc2ZpX21hcF9tZW1vcnkodTY0IHBoeXMsIHUzMiBzaXplKQoreworCWlmICghcGh5cyB8fCAhc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoc2ZpX3VzZV9pb3JlbWFwKQorCQlyZXR1cm4gaW9yZW1hcChwaHlzLCBzaXplKTsKKwllbHNlCisJCXJldHVybiBlYXJseV9pb3JlbWFwKHBoeXMsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBzZmlfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgdTMyIHNpemUpCit7CisJaWYgKCF2aXJ0IHx8ICFzaXplKQorCQlyZXR1cm47CisKKwlpZiAoc2ZpX3VzZV9pb3JlbWFwKQorCQlpb3VubWFwKHZpcnQpOworCWVsc2UKKwkJZWFybHlfaW91bm1hcCh2aXJ0LCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgc2ZpX3ByaW50X3RhYmxlX2hlYWRlcih1bnNpZ25lZCBsb25nIGxvbmcgcGEsCisJCQkJc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKmhlYWRlcikKK3sKKwlwcl9pbmZvKCIlNC40cyAlbGxYLCAlMDRYICh2JWQgJTYuNnMgJTguOHMpXG4iLAorCQloZWFkZXItPnNpZywgcGEsCisJCWhlYWRlci0+bGVuLCBoZWFkZXItPnJldiwgaGVhZGVyLT5vZW1faWQsCisJCWhlYWRlci0+b2VtX3RhYmxlX2lkKTsKK30KKworLyoKKyAqIHNmaV92ZXJpZnlfdGFibGUoKQorICogU2FuaXR5IGNoZWNrIHRhYmxlIGxlbmdoLCBjYWxjdWxhdGUgY2hlY2tzdW0KKyAqLworc3RhdGljIF9faW5pdCBpbnQgc2ZpX3ZlcmlmeV90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpCit7CisKKwl1OCBjaGVja3N1bSA9IDA7CisJdTggKnB1Y2hhciA9ICh1OCAqKXRhYmxlOworCXUzMiBsZW5ndGggPSB0YWJsZS0+bGVuOworCisJLyogU2FuaXR5IGNoZWNrIHRhYmxlIGxlbmd0aCBhZ2FpbnN0IGFyYml0cmFyeSAxTUIgbGltaXQgKi8KKwlpZiAobGVuZ3RoID4gMHgxMDAwMDApIHsKKwkJcHJfZXJyKCJJbnZhbGlkIHRhYmxlIGxlbmd0aCAweCV4XG4iLCBsZW5ndGgpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKGxlbmd0aC0tKQorCQljaGVja3N1bSArPSAqcHVjaGFyKys7CisKKwlpZiAoY2hlY2tzdW0pIHsKKwkJcHJfZXJyKCJDaGVja3N1bSAlMi4yWCBzaG91bGQgYmUgJTIuMlhcbiIsCisJCQl0YWJsZS0+Y3N1bSwgdGFibGUtPmNzdW0gLSBjaGVja3N1bSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZmlfbWFwX3RhYmxlKCkKKyAqCisgKiBSZXR1cm4gYWRkcmVzcyBvZiBtYXBwZWQgdGFibGUKKyAqIENoZWNrIGZvciBjb21tb24gY2FzZSB0aGF0IHdlIGNhbiByZS11c2UgbWFwcGluZyB0byBTWVNULAorICogd2hpY2ggcmVxdWlyZXMgc3lzdF9wYSwgc3lzdF92YSB0byBiZSBpbml0aWFsaXplZC4KKyAqLworc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnNmaV9tYXBfdGFibGUodTY0IHBhKQoreworCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0aDsKKwl1MzIgbGVuZ3RoOworCisJaWYgKCFUQUJMRV9PTl9QQUdFKHN5c3RfcGEsIHBhLCBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIpKSkKKwkJdGggPSBzZmlfbWFwX21lbW9yeShwYSwgc2l6ZW9mKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyKSk7CisJZWxzZQorCQl0aCA9ICh2b2lkICopc3lzdF92YSArIChwYSAtIHN5c3RfcGEpOworCisJIC8qIElmIHRhYmxlIGZpdHMgb24gc2FtZSBwYWdlIGFzIGl0cyBoZWFkZXIsIHdlIGFyZSBkb25lICovCisJaWYgKFRBQkxFX09OX1BBR0UodGgsIHRoLCB0aC0+bGVuKSkKKwkJcmV0dXJuIHRoOworCisJLyogRW50aXJlIHRhYmxlIGRvZXMgbm90IGZpdCBvbiBzYW1lIHBhZ2UgYXMgU1lTVCAqLworCWxlbmd0aCA9IHRoLT5sZW47CisJaWYgKCFUQUJMRV9PTl9QQUdFKHN5c3RfcGEsIHBhLCBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIpKSkKKwkJc2ZpX3VubWFwX21lbW9yeSh0aCwgc2l6ZW9mKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyKSk7CisKKwlyZXR1cm4gc2ZpX21hcF9tZW1vcnkocGEsIGxlbmd0aCk7Cit9CisKKy8qCisgKiBzZmlfdW5tYXBfdGFibGUoKQorICoKKyAqIFVuZG9lcyBlZmZlY3Qgb2Ygc2ZpX21hcF90YWJsZSgpIGJ5IHVubWFwcGluZyB0YWJsZQorICogaWYgaXQgZGlkIG5vdCBjb21wbGV0ZWx5IGZpdCBvbiBzYW1lIHBhZ2UgYXMgU1lTVC4KKyAqLwordm9pZCBzZmlfdW5tYXBfdGFibGUoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoKQoreworCWlmICghVEFCTEVfT05fUEFHRShzeXN0X3ZhLCB0aCwgdGgtPmxlbikpCisJCXNmaV91bm1hcF9tZW1vcnkodGgsIFRBQkxFX09OX1BBR0UodGgsIHRoLCB0aC0+bGVuKSA/CisJCQkJCXNpemVvZigqdGgpIDogdGgtPmxlbik7Cit9CisKK3N0YXRpYyBpbnQgc2ZpX3RhYmxlX2NoZWNrX2tleShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGgsCisJCQkJc3RydWN0IHNmaV90YWJsZV9rZXkgKmtleSkKK3sKKworCWlmIChzdHJuY21wKHRoLT5zaWcsIGtleS0+c2lnLCBTRklfU0lHTkFUVVJFX1NJWkUpCisJCXx8IChrZXktPm9lbV9pZCAmJiBzdHJuY21wKHRoLT5vZW1faWQsCisJCQkJa2V5LT5vZW1faWQsIFNGSV9PRU1fSURfU0laRSkpCisJCXx8IChrZXktPm9lbV90YWJsZV9pZCAmJiBzdHJuY21wKHRoLT5vZW1fdGFibGVfaWQsCisJCQkJa2V5LT5vZW1fdGFibGVfaWQsIFNGSV9PRU1fVEFCTEVfSURfU0laRSkpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIGluIDIgY2FzZXM6CisgKiAxLiB1c2VkIHRvIGVudW1lcmF0ZSBhbmQgdmVyaWZ5IHRoZSB0YWJsZXMgYWRkcmVzc2VkIGJ5IFNZU1QvWFNEVCwKKyAqICAgIHRodXMgbm8gc2lnbmF0dXJlIHdpbGwgYmUgZ2l2ZW4gKGluIGtlcm5lbCBib290IHBoYXNlKQorICogMi4gdXNlZCB0byBwYXJzZSBvbmUgc3BlY2lmaWMgdGFibGUsIHNpZ25hdHVyZSBtdXN0IGV4aXN0LCBhbmQKKyAqICAgIHRoZSBtYXBwZWQgdmlydCBhZGRyZXNzIHdpbGwgYmUgcmV0dXJuZWQsIGFuZCB0aGUgdmlydCBzcGFjZQorICogICAgd2lsbCBiZSByZWxlYXNlZCBieSBjYWxsIHNmaV9wdXRfdGFibGUoKSBsYXRlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCU5VTEw6CQkJd2hlbiBjYW4ndCBmaW5kIGEgdGFibGUgbWF0Y2hpbmcgdGhlIGtleQorICoJRVJSX1BUUihlcnJvcik6CQllcnJvciB2YWx1ZQorICoJdmlydCB0YWJsZSBhZGRyZXNzOgl3aGVuIGEgbWF0Y2hlZCB0YWJsZSBpcyBmb3VuZAorICovCitzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqc2ZpX2NoZWNrX3RhYmxlKHU2NCBwYSwgc3RydWN0IHNmaV90YWJsZV9rZXkgKmtleSkKK3sKKwlzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGg7CisJdm9pZCAqcmV0ID0gTlVMTDsKKworCXRoID0gc2ZpX21hcF90YWJsZShwYSk7CisJaWYgKCF0aCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAoIWtleS0+c2lnKSB7CisJCXNmaV9wcmludF90YWJsZV9oZWFkZXIocGEsIHRoKTsKKwkJaWYgKHNmaV92ZXJpZnlfdGFibGUodGgpKQorCQkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwl9IGVsc2UgeworCQlpZiAoIXNmaV90YWJsZV9jaGVja19rZXkodGgsIGtleSkpCisJCQlyZXR1cm4gdGg7CS8qIFN1Y2Nlc3MgKi8KKwl9CisKKwlzZmlfdW5tYXBfdGFibGUodGgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBzZmlfZ2V0X3RhYmxlKCkKKyAqCisgKiBTZWFyY2ggU1lTVCBmb3IgdGhlIHNwZWNpZmllZCB0YWJsZSB3aXRoIHRoZSBzaWduYXR1cmUgaW4KKyAqIHRoZSBrZXksIGFuZCByZXR1cm4gdGhlIG1hcHBlZCB0YWJsZQorICovCitzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqc2ZpX2dldF90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSAqa2V5KQoreworCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0aDsKKwl1MzIgdGJsX2NudCwgaTsKKworCXRibF9jbnQgPSBTRklfR0VUX05VTV9FTlRSSUVTKHN5c3RfdmEsIHU2NCk7CisJZm9yIChpID0gMDsgaSA8IHRibF9jbnQ7IGkrKykgeworCQl0aCA9IHNmaV9jaGVja190YWJsZShzeXN0X3ZhLT5wZW50cnlbaV0sIGtleSk7CisJCWlmICghSVNfRVJSKHRoKSAmJiB0aCkKKwkJCXJldHVybiB0aDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBzZmlfcHV0X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0aCkKK3sKKwlzZmlfdW5tYXBfdGFibGUodGgpOworfQorCisvKiBGaW5kIHRhYmxlIHdpdGggc2lnbmF0dXJlLCBydW4gaGFuZGxlciBvbiBpdCAqLworaW50IHNmaV90YWJsZV9wYXJzZShjaGFyICpzaWduYXR1cmUsIGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkLAorCQkJc2ZpX3RhYmxlX2hhbmRsZXIgaGFuZGxlcikKK3sKKwlzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworCXN0cnVjdCBzZmlfdGFibGVfa2V5IGtleTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChzZmlfZGlzYWJsZWQgfHwgIWhhbmRsZXIgfHwgIXNpZ25hdHVyZSkKKwkJZ290byBleGl0OworCisJa2V5LnNpZyA9IHNpZ25hdHVyZTsKKwlrZXkub2VtX2lkID0gb2VtX2lkOworCWtleS5vZW1fdGFibGVfaWQgPSBvZW1fdGFibGVfaWQ7CisKKwl0YWJsZSA9IHNmaV9nZXRfdGFibGUoJmtleSk7CisJaWYgKCF0YWJsZSkKKwkJZ290byBleGl0OworCisJcmV0ID0gaGFuZGxlcih0YWJsZSk7CisJc2ZpX3B1dF90YWJsZSh0YWJsZSk7CitleGl0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZmlfdGFibGVfcGFyc2UpOworCisvKgorICogc2ZpX3BhcnNlX3N5c3QoKQorICogQ2hlY2tzdW0gYWxsIHRoZSB0YWJsZXMgaW4gU1lTVCBhbmQgcHJpbnQgdGhlaXIgaGVhZGVycworICoKKyAqIHN1Y2Nlc3M6IHNldCBzeXN0X3ZhLCByZXR1cm4gMAorICovCitzdGF0aWMgaW50IF9faW5pdCBzZmlfcGFyc2Vfc3lzdCh2b2lkKQoreworCXN0cnVjdCBzZmlfdGFibGVfa2V5IGtleSA9IFNGSV9BTllfS0VZOworCWludCB0YmxfY250LCBpOworCXZvaWQgKnJldDsKKworCXN5c3RfdmEgPSBzZmlfbWFwX21lbW9yeShzeXN0X3BhLCBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9zaW1wbGUpKTsKKwlpZiAoIXN5c3RfdmEpCisJCXJldHVybiAtRU5PTUVNOworCisJdGJsX2NudCA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc3lzdF92YSwgdTY0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGJsX2NudDsgaSsrKSB7CisJCXJldCA9IHNmaV9jaGVja190YWJsZShzeXN0X3ZhLT5wZW50cnlbaV0sICZrZXkpOworCQlpZiAoSVNfRVJSKHJldCkpCisJCQlyZXR1cm4gUFRSX0VSUihyZXQpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhlIE9TIGZpbmRzIHRoZSBTeXN0ZW0gVGFibGUgYnkgc2VhcmNoaW5nIDE2LWJ5dGUgYm91bmRhcmllcyBiZXR3ZWVuCisgKiBwaHlzaWNhbCBhZGRyZXNzIDB4MDAwRTAwMDAgYW5kIDB4MDAwRkZGRkYuIFRoZSBPUyBzaGFsbCBzZWFyY2ggdGhpcyByZWdpb24KKyAqIHN0YXJ0aW5nIGF0IHRoZSBsb3cgYWRkcmVzcyBhbmQgc2hhbGwgc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgMXN0IHZhbGlkIFNGSQorICogU3lzdGVtIFRhYmxlIGlzIGZvdW5kLgorICoKKyAqIHN1Y2Nlc3M6IHNldCBzeXN0X3BhLCByZXR1cm4gMAorICogZmFpbDogcmV0dXJuIC0xCisgKi8KK3N0YXRpYyBfX2luaXQgaW50IHNmaV9maW5kX3N5c3Qodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGVuOworCXZvaWQgKnN0YXJ0OworCisJbGVuID0gU0ZJX1NZU1RfU0VBUkNIX0VORCAtIFNGSV9TWVNUX1NFQVJDSF9CRUdJTjsKKwlzdGFydCA9IHNmaV9tYXBfbWVtb3J5KFNGSV9TWVNUX1NFQVJDSF9CRUdJTiwgbGVuKTsKKwlpZiAoIXN0YXJ0KQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGxlbjsgb2Zmc2V0ICs9IDE2KSB7CisJCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICpzeXN0X2hkcjsKKworCQlzeXN0X2hkciA9IHN0YXJ0ICsgb2Zmc2V0OworCQlpZiAoc3RybmNtcChzeXN0X2hkci0+c2lnLCBTRklfU0lHX1NZU1QsCisJCQkJU0ZJX1NJR05BVFVSRV9TSVpFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzeXN0X2hkci0+bGVuID4gUEFHRV9TSVpFKQorCQkJY29udGludWU7CisKKwkJc2ZpX3ByaW50X3RhYmxlX2hlYWRlcihTRklfU1lTVF9TRUFSQ0hfQkVHSU4gKyBvZmZzZXQsCisJCQkJCXN5c3RfaGRyKTsKKworCQlpZiAoc2ZpX3ZlcmlmeV90YWJsZShzeXN0X2hkcikpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBFbmZvcmNlIFNGSSBzcGVjIG1hbmRhdGUgdGhhdCBTWVNUIHJlc2lkZSB3aXRoaW4gYSBwYWdlLgorCQkgKi8KKwkJaWYgKCFPTl9TQU1FX1BBR0Uoc3lzdF9wYSwgc3lzdF9wYSArIHN5c3RfaGRyLT5sZW4pKSB7CisJCQlwcl9pbmZvKCJTWVNUIDB4JWxseCArIDB4JXggY3Jvc3NlcyBwYWdlXG4iLAorCQkJCQlzeXN0X3BhLCBzeXN0X2hkci0+bGVuKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3VjY2VzcyAqLworCQlzeXN0X3BhID0gU0ZJX1NZU1RfU0VBUkNIX0JFR0lOICsgb2Zmc2V0OworCQlzZmlfdW5tYXBfbWVtb3J5KHN0YXJ0LCBsZW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZmlfdW5tYXBfbWVtb3J5KHN0YXJ0LCBsZW4pOworCXJldHVybiAtMTsKK30KKwordm9pZCBfX2luaXQgc2ZpX2luaXQodm9pZCkKK3sKKwlpZiAoIWFjcGlfZGlzYWJsZWQpCisJCWRpc2FibGVfc2ZpKCk7CisKKwlpZiAoc2ZpX2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlwcl9pbmZvKCJTaW1wbGUgRmlybXdhcmUgSW50ZXJmYWNlIHYwLjcgaHR0cDovL3NpbXBsZWZpcm13YXJlLm9yZ1xuIik7CisKKwlpZiAoc2ZpX2ZpbmRfc3lzdCgpIHx8IHNmaV9wYXJzZV9zeXN0KCkgfHwgc2ZpX3BsYXRmb3JtX2luaXQoKSkKKwkJZGlzYWJsZV9zZmkoKTsKKworCXJldHVybjsKK30KKwordm9pZCBfX2luaXQgc2ZpX2luaXRfbGF0ZSh2b2lkKQoreworCWludCBsZW5ndGg7CisKKwlpZiAoc2ZpX2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlsZW5ndGggPSBzeXN0X3ZhLT5oZWFkZXIubGVuOworCXNmaV91bm1hcF9tZW1vcnkoc3lzdF92YSwgc2l6ZW9mKHN0cnVjdCBzZmlfdGFibGVfc2ltcGxlKSk7CisKKwkvKiBVc2UgaW9yZW1hcCBub3cgYWZ0ZXIgaXQgaXMgcmVhZHkgKi8KKwlzZmlfdXNlX2lvcmVtYXAgPSAxOworCXN5c3RfdmEgPSBzZmlfbWFwX21lbW9yeShzeXN0X3BhLCBsZW5ndGgpOworCisJc2ZpX2FjcGlfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZmkvc2ZpX2NvcmUuaCBiL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4MmQzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmgKQEAgLTAsMCArMSw3MCBAQAorLyogc2ZpX2NvcmUuaCBTaW1wbGUgRmlybXdhcmUgSW50ZXJmYWNlLCBpbnRlcm5hbCBoZWFkZXIgKi8KKworLyoKKworICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisKKyAgR1BMIExJQ0VOU0UgU1VNTUFSWQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorCisgIEJTRCBMSUNFTlNFCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworc3RydWN0IHNmaV90YWJsZV9rZXl7CisJY2hhcgkqc2lnOworCWNoYXIJKm9lbV9pZDsKKwljaGFyCSpvZW1fdGFibGVfaWQ7Cit9OworCisjZGVmaW5lIFNGSV9BTllfS0VZIHsgLnNpZyA9IE5VTEwsIC5vZW1faWQgPSBOVUxMLCAub2VtX3RhYmxlX2lkID0gTlVMTCB9CisKK2V4dGVybiBpbnQgX19pbml0IHNmaV9hY3BpX2luaXQodm9pZCk7CitleHRlcm4gIHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICpzZmlfY2hlY2tfdGFibGUodTY0IHBhZGRyLAorCQkJCQlzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSAqa2V5KTsKK3N0cnVjdCBzZmlfdGFibGVfaGVhZGVyICpzZmlfZ2V0X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpOworZXh0ZXJuIHZvaWQgc2ZpX3B1dF90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKaW5kZXggMmM3MzNjMi4uNGI2ZjdjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnCkBAIC0xMTcsMTAgKzExNywxMSBAQAogCSAgc3BlZWQgd2l0aCBhIGN1c3RvbSB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyOyBzZWUgdGhlIHNvdXJjZSBjb2RlLgogCiBjb25maWcgU1BJX0lNWAotCXRyaXN0YXRlICJGcmVlc2NhbGUgaU1YIFNQSSBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9NWDEgJiYgRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBpLk1YIFNQSSBjb250cm9sbGVycyIKKwlkZXBlbmRzIG9uIEFSQ0hfTVhDCisJc2VsZWN0IFNQSV9CSVRCQU5HCiAJaGVscAotCSAgVGhpcyBlbmFibGVzIHVzaW5nIHRoZSBGcmVlc2NhbGUgaU1YIFNQSSBjb250cm9sbGVyIGluIG1hc3RlcgorCSAgVGhpcyBlbmFibGVzIHVzaW5nIHRoZSBGcmVlc2NhbGUgaS5NWCBTUEkgY29udHJvbGxlcnMgaW4gbWFzdGVyCiAJICBtb2RlLgogCiBjb25maWcgU1BJX0xNNzBfTExQCkBAIC0xNzMsMTEgKzE3NCwyMSBAQAogCXRyaXN0YXRlICJBUk0gQU1CQSBQTDAyMiBTU1AgY29udHJvbGxlciAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEFSTV9BTUJBICYmIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgeSBpZiBNQUNIX1UzMDAKKwlkZWZhdWx0IHkgaWYgQVJDSF9SRUFMVklFVworCWRlZmF1bHQgeSBpZiBJTlRFR1JBVE9SX0lNUEQxCisJZGVmYXVsdCB5IGlmIEFSQ0hfVkVSU0FUSUxFCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBBUk0oUikgQU1CQShSKSBQcmltZUNlbGwgUEwwMjIgU1NQCiAJICBjb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBlbWJlZGRlZCBzeXN0ZW0gd2l0aCBhbiBBTUJBKFIpCiAJICBidXMgYW5kIGEgUEwwMjIgY29udHJvbGxlciwgc2F5IFkgb3IgTSBoZXJlLgogCitjb25maWcgU1BJX1BQQzR4eAorCXRyaXN0YXRlICJQUEM0eHggU1BJIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBQUEMzMiAmJiA0eHggJiYgU1BJX01BU1RFUgorCXNlbGVjdCBTUElfQklUQkFORworCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBhIGRyaXZlciBmb3IgdGhlIFBQQzR4eCBTUEkgQ29udHJvbGxlci4KKwogY29uZmlnIFNQSV9QWEEyWFgKIAl0cmlzdGF0ZSAiUFhBMnh4IFNTUCBTUEkgbWFzdGVyIgogCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgRVhQRVJJTUVOVEFMCkBAIC0yMTEsNiArMjIyLDEyIEBACiAJaGVscAogCSAgU1BJIGRyaXZlciBmb3IgU3VwZXJIIFNDSSBibG9ja3MuCiAKK2NvbmZpZyBTUElfU1RNUDNYWFgKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIFNUTVAzN3h4LzM3OHggU1BJL1NTUCBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gQVJDSF9TVE1QM1hYWCAmJiBTUElfTUFTVEVSCisJaGVscAorCSAgU1BJIGRyaXZlciBmb3IgRnJlZXNjYWxlIFNUTVAzN3h4LzM3OHggU29DIFNTUCBpbnRlcmZhY2UKKwogY29uZmlnIFNQSV9UWFg5CiAJdHJpc3RhdGUgIlRvc2hpYmEgVFh4OSBTUEkgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIEdFTkVSSUNfR1BJTyAmJiBDUFVfVFg0OVhYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IDNkZTQwOGQuLjZkN2EzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xNyw3ICsxNyw3IEBACiBvYmotJChDT05GSUdfU1BJX0FVMTU1MCkJCSs9IGF1MTU1MF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9CVVRURVJGTFkpCQkrPSBzcGlfYnV0dGVyZmx5Lm8KIG9iai0kKENPTkZJR19TUElfR1BJTykJCQkrPSBzcGlfZ3Bpby5vCi1vYmotJChDT05GSUdfU1BJX0lNWCkJCQkrPSBzcGlfaW14Lm8KK29iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IG14Y19zcGkubwogb2JqLSQoQ09ORklHX1NQSV9MTTcwX0xMUCkJCSs9IHNwaV9sbTcwbGxwLm8KIG9iai0kKENPTkZJR19TUElfUFhBMlhYKQkJKz0gcHhhMnh4X3NwaS5vCiBvYmotJChDT05GSUdfU1BJX09NQVBfVVdJUkUpCQkrPSBvbWFwX3V3aXJlLm8KQEAgLTI2LDExICsyNiwxMyBAQAogb2JqLSQoQ09ORklHX1NQSV9QTDAyMikJCQkrPSBhbWJhLXBsMDIyLm8KIG9iai0kKENPTkZJR19TUElfTVBDNTJ4eF9QU0MpCQkrPSBtcGM1Mnh4X3BzY19zcGkubwogb2JqLSQoQ09ORklHX1NQSV9NUEM4eHh4KQkJKz0gc3BpX21wYzh4eHgubworb2JqLSQoQ09ORklHX1NQSV9QUEM0eHgpCQkrPSBzcGlfcHBjNHh4Lm8KIG9iai0kKENPTkZJR19TUElfUzNDMjRYWF9HUElPKQkJKz0gc3BpX3MzYzI0eHhfZ3Bpby5vCiBvYmotJChDT05GSUdfU1BJX1MzQzI0WFgpCQkrPSBzcGlfczNjMjR4eC5vCiBvYmotJChDT05GSUdfU1BJX1RYWDkpCQkJKz0gc3BpX3R4eDkubwogb2JqLSQoQ09ORklHX1NQSV9YSUxJTlgpCQkrPSB4aWxpbnhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfU0hfU0NJKQkJKz0gc3BpX3NoX3NjaS5vCitvYmotJChDT05GSUdfU1BJX1NUTVAzWFhYKQkJKz0gc3BpX3N0bXAubwogIyAJLi4uIGFkZCBhYm92ZSB0aGlzIGxpbmUgLi4uCiAKICMgU1BJIHByb3RvY29sIGRyaXZlcnMgKGRldmljZS9saW5rIG9uIGJ1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL214Y19zcGkuYyBiL2RyaXZlcnMvc3BpL214Y19zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ0NzIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvbXhjX3NwaS5jCkBAIC0wLDAgKzEsNjg1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJzcGlfaW14IgorCisjZGVmaW5lIE1YQ19DU1BJUlhEQVRBCQkweDAwCisjZGVmaW5lIE1YQ19DU1BJVFhEQVRBCQkweDA0CisjZGVmaW5lIE1YQ19DU1BJQ1RSTAkJMHgwOAorI2RlZmluZSBNWENfQ1NQSUlOVAkJMHgwYworI2RlZmluZSBNWENfUkVTRVQJCTB4MWMKKworLyogZ2VuZXJpYyBkZWZpbmVzIHRvIGFic3RyYWN0IGZyb20gdGhlIGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXRzICovCisjZGVmaW5lIE1YQ19JTlRfUlIJKDEgPDwgMCkgLyogUmVjZWl2ZSBkYXRhIHJlYWR5IGludGVycnVwdCAqLworI2RlZmluZSBNWENfSU5UX1RFCSgxIDw8IDEpIC8qIFRyYW5zbWl0IEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisKK3N0cnVjdCBteGNfc3BpX2NvbmZpZyB7CisJdW5zaWduZWQgaW50IHNwZWVkX2h6OworCXVuc2lnbmVkIGludCBicHc7CisJdW5zaWduZWQgaW50IG1vZGU7CisJaW50IGNzOworfTsKKworc3RydWN0IG14Y19zcGlfZGF0YSB7CisJc3RydWN0IHNwaV9iaXRiYW5nIGJpdGJhbmc7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiB4ZmVyX2RvbmU7CisJdm9pZCAqYmFzZTsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBsb25nIHNwaV9jbGs7CisJaW50ICpjaGlwc2VsZWN0OworCisJdW5zaWduZWQgaW50IGNvdW50OworCXZvaWQgKCp0eCkoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKKwl2b2lkICgqcngpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7CisJdm9pZCAqcnhfYnVmOworCWNvbnN0IHZvaWQgKnR4X2J1ZjsKKwl1bnNpZ25lZCBpbnQgdHhmaWZvOyAvKiBudW1iZXIgb2Ygd29yZHMgcHVzaGVkIGluIHR4IEZJRk8gKi8KKworCS8qIFNvQyBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwl2b2lkICgqaW50Y3RybCkoc3RydWN0IG14Y19zcGlfZGF0YSAqLCBpbnQpOworCWludCAoKmNvbmZpZykoc3RydWN0IG14Y19zcGlfZGF0YSAqLCBzdHJ1Y3QgbXhjX3NwaV9jb25maWcgKik7CisJdm9pZCAoKnRyaWdnZXIpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7CisJaW50ICgqcnhfYXZhaWxhYmxlKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICopOworfTsKKworI2RlZmluZSBNWENfU1BJX0JVRl9SWCh0eXBlKQkJCQkJCVwKK3N0YXRpYyB2b2lkIG14Y19zcGlfYnVmX3J4XyMjdHlwZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJUlhEQVRBKTsJXAorCQkJCQkJCQkJXAorCWlmIChteGNfc3BpLT5yeF9idWYpIHsJCQkJCQlcCisJCSoodHlwZSAqKW14Y19zcGktPnJ4X2J1ZiA9IHZhbDsJCQkJXAorCQlteGNfc3BpLT5yeF9idWYgKz0gc2l6ZW9mKHR5cGUpOwkJCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgTVhDX1NQSV9CVUZfVFgodHlwZSkJCQkJCQlcCitzdGF0aWMgdm9pZCBteGNfc3BpX2J1Zl90eF8jI3R5cGUoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkJCVwKK3sJCQkJCQkJCQlcCisJdHlwZSB2YWwgPSAwOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKG14Y19zcGktPnR4X2J1ZikgewkJCQkJCVwKKwkJdmFsID0gKih0eXBlICopbXhjX3NwaS0+dHhfYnVmOwkJCQlcCisJCW14Y19zcGktPnR4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlteGNfc3BpLT5jb3VudCAtPSBzaXplb2YodHlwZSk7CQkJCQlcCisJCQkJCQkJCQlcCisJd3JpdGVsKHZhbCwgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJVFhEQVRBKTsJCQlcCit9CisKK01YQ19TUElfQlVGX1JYKHU4KQorTVhDX1NQSV9CVUZfVFgodTgpCitNWENfU1BJX0JVRl9SWCh1MTYpCitNWENfU1BJX0JVRl9UWCh1MTYpCitNWENfU1BJX0JVRl9SWCh1MzIpCitNWENfU1BJX0JVRl9UWCh1MzIpCisKKy8qIEZpcnN0IGVudHJ5IGlzIHJlc2VydmVkLCBzZWNvbmQgZW50cnkgaXMgdmFsaWQgb25seSBpZiBTREhDX1NQSUVOIGlzIHNldAorICogKHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdGhlIGNhc2UgaW4gdGhpcyBkcml2ZXIpCisgKi8KK3N0YXRpYyBpbnQgbXhjX2Nsa2RpdnNbXSA9IHswLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDI0LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAxOTIsCisJMjU2LCAzODQsIDUxMiwgNzY4LCAxMDI0fTsKKworLyogTVgyMSwgTVgyNyAqLworc3RhdGljIHVuc2lnbmVkIGludCBteGNfc3BpX2Nsa2Rpdl8xKHVuc2lnbmVkIGludCBmaW4sCisJCXVuc2lnbmVkIGludCBmc3BpKQoreworCWludCBpLCBtYXg7CisKKwlpZiAoY3B1X2lzX214MjEoKSkKKwkJbWF4ID0gMTg7CisJZWxzZQorCQltYXggPSAxNjsKKworCWZvciAoaSA9IDI7IGkgPCBtYXg7IGkrKykKKwkJaWYgKGZzcGkgKiBteGNfY2xrZGl2c1tpXSA+PSBmaW4pCisJCQlyZXR1cm4gaTsKKworCXJldHVybiBtYXg7Cit9CisKKy8qIE1YMSwgTVgzMSwgTVgzNSAqLworc3RhdGljIHVuc2lnbmVkIGludCBteGNfc3BpX2Nsa2Rpdl8yKHVuc2lnbmVkIGludCBmaW4sCisJCXVuc2lnbmVkIGludCBmc3BpKQoreworCWludCBpLCBkaXYgPSA0OworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpZiAoZnNwaSAqIGRpdiA+PSBmaW4pCisJCQlyZXR1cm4gaTsKKwkJZGl2IDw8PSAxOworCX0KKworCXJldHVybiA3OworfQorCisjZGVmaW5lIE1YMzFfSU5UUkVHX1RFRU4JKDEgPDwgMCkKKyNkZWZpbmUgTVgzMV9JTlRSRUdfUlJFTgkoMSA8PCAzKQorCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfWENICSgxIDw8IDIpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUE9MCSgxIDw8IDQpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfU1NDVEwJKDEgPDwgNikKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU1BPTAkoMSA8PCA3KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX0JDX1NISUZUCTgKKyNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVAkyMAorI2RlZmluZSBNWDMxX0NTUElDVFJMX0NTX1NISUZUCTI0CisjZGVmaW5lIE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQJMTIKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9EUl9TSElGVAkxNgorCisjZGVmaW5lIE1YMzFfQ1NQSVNUQVRVUwkJMHgxNAorI2RlZmluZSBNWDMxX1NUQVRVU19SUgkJKDEgPDwgMykKKworLyogVGhlc2UgZnVuY3Rpb25zIGFsc28gd29yayBmb3IgdGhlIGkuTVgzNSwgYnV0IGJlIGF3YXJlIHRoYXQKKyAqIHRoZSBpLk1YMzUgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dCBmb3IgYml0cworICogd2UgZG8gbm90IHVzZSBoZXJlLgorICovCitzdGF0aWMgdm9pZCBteDMxX2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQorCQl2YWwgfD0gTVgzMV9JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMzFfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDMxX3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MzFfY29uZmlnKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksCisJCXN0cnVjdCBteGNfc3BpX2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDMxX0NTUElDVFJMX0VOQUJMRSB8IE1YMzFfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IG14Y19zcGlfY2xrZGl2XzIobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgzMV9DU1BJQ1RSTF9EUl9TSElGVDsKKworCWlmIChjcHVfaXNfbXgzMSgpKQorCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzMV9DU1BJQ1RSTF9CQ19TSElGVDsKKwllbHNlIGlmIChjcHVfaXNfbXgzNSgpKSB7CisJCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDM1X0NTUElDVFJMX0JMX1NISUZUOworCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9TU0NUTDsKKwl9CisKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BIQTsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BPTDsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTUE9MOworCWlmIChjb25maWctPmNzIDwgMCkgeworCQlpZiAoY3B1X2lzX214MzEoKSkKKwkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDMxX0NTUElDVFJMX0NTX1NISUZUOworCQllbHNlIGlmIChjcHVfaXNfbXgzNSgpKQorCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQ7CisJfQorCisJd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDMxX3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQoreworCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVgzMV9DU1BJU1RBVFVTKSAmIE1YMzFfU1RBVFVTX1JSOworfQorCisjZGVmaW5lIE1YMjdfSU5UUkVHX1JSCQkoMSA8PCA0KQorI2RlZmluZSBNWDI3X0lOVFJFR19URUVOCSgxIDw8IDkpCisjZGVmaW5lIE1YMjdfSU5UUkVHX1JSRU4JKDEgPDwgMTMpCisKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QT0wJKDEgPDwgNSkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QSEEJKDEgPDwgNikKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9TU1BPTAkoMSA8PCA4KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX1hDSAkoMSA8PCA5KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX0VOQUJMRQkoMSA8PCAxMCkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMTEpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRFJfU0hJRlQJMTQKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9DU19TSElGVAkxOQorCitzdGF0aWMgdm9pZCBteDI3X2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQorCQl2YWwgfD0gTVgyN19JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMjdfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDI3X3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MjdfY29uZmlnKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksCisJCXN0cnVjdCBteGNfc3BpX2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDI3X0NTUElDVFJMX0VOQUJMRSB8IE1YMjdfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IG14Y19zcGlfY2xrZGl2XzEobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgyN19DU1BJQ1RSTF9EUl9TSElGVDsKKwlyZWcgfD0gY29uZmlnLT5icHcgLSAxOworCisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QSEE7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QT0w7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DU19ISUdIKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9TU1BPTDsKKwlpZiAoY29uZmlnLT5jcyA8IDApCisJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDI3X0NTUElDVFJMX0NTX1NISUZUOworCisJd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDI3X3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQoreworCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgyN19JTlRSRUdfUlI7Cit9CisKKyNkZWZpbmUgTVgxX0lOVFJFR19SUgkJKDEgPDwgMykKKyNkZWZpbmUgTVgxX0lOVFJFR19URUVOCQkoMSA8PCA4KQorI2RlZmluZSBNWDFfSU5UUkVHX1JSRU4JCSgxIDw8IDExKQorCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX1BIQQkoMSA8PCA1KQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfWENICSgxIDw8IDgpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgOSkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMCkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX0RSX1NISUZUCTEzCisKK3N0YXRpYyB2b2lkIG14MV9pbnRjdHJsKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKKwkJdmFsIHw9IE1YMV9JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMV9JTlRSRUdfUlJFTjsKKworCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Cit9CisKK3N0YXRpYyB2b2lkIG14MV90cmlnZ2VyKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCXJlZyB8PSBNWDFfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MV9jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKKwkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgaW50IHJlZyA9IE1YMV9DU1BJQ1RSTF9FTkFCTEUgfCBNWDFfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IG14Y19zcGlfY2xrZGl2XzIobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgxX0NTUElDVFJMX0RSX1NISUZUOworCXJlZyB8PSBjb25maWctPmJwdyAtIDE7CisKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCisJCXJlZyB8PSBNWDFfQ1NQSUNUUkxfUEhBOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKKwkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QT0w7CisKKwl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MV9yeF9hdmFpbGFibGUoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKK3sKKwlyZXR1cm4gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJSU5UKSAmIE1YMV9JTlRSRUdfUlI7Cit9CisKK3N0YXRpYyB2b2lkIG14Y19zcGlfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1bnNpZ25lZCBpbnQgY3MgPSAwOworCWludCBncGlvID0gbXhjX3NwaS0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKKwlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgY29uZmlnOworCisJaWYgKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKQorCQljcyA9IDE7CisKKwlpZiAoaXNfYWN0aXZlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKKwkJaWYgKGdwaW8gPj0gMCkKKwkJCWdwaW9fc2V0X3ZhbHVlKGdwaW8sICFjcyk7CisJCXJldHVybjsKKwl9CisKKwljb25maWcuYnB3ID0gc3BpLT5iaXRzX3Blcl93b3JkOworCWNvbmZpZy5zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OworCWNvbmZpZy5tb2RlID0gc3BpLT5tb2RlOworCWNvbmZpZy5jcyA9IG14Y19zcGktPmNoaXBzZWxlY3Rbc3BpLT5jaGlwX3NlbGVjdF07CisKKwlteGNfc3BpLT5jb25maWcobXhjX3NwaSwgJmNvbmZpZyk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBmdW5jdGlvbnMgZm9yIHRyYW5zZmVyICovCisJaWYgKGNvbmZpZy5icHcgPD0gOCkgeworCQlteGNfc3BpLT5yeCA9IG14Y19zcGlfYnVmX3J4X3U4OworCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3U4OworCX0gZWxzZSBpZiAoY29uZmlnLmJwdyA8PSAxNikgeworCQlteGNfc3BpLT5yeCA9IG14Y19zcGlfYnVmX3J4X3UxNjsKKwkJbXhjX3NwaS0+dHggPSBteGNfc3BpX2J1Zl90eF91MTY7CisJfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDMyKSB7CisJCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTMyOworCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3UzMjsKKwl9IGVsc2UKKwkJQlVHKCk7CisKKwlpZiAoZ3BpbyA+PSAwKQorCQlncGlvX3NldF92YWx1ZShncGlvLCBjcyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG14Y19zcGlfcHVzaChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQoreworCXdoaWxlIChteGNfc3BpLT50eGZpZm8gPCA4KSB7CisJCWlmICghbXhjX3NwaS0+Y291bnQpCisJCQlicmVhazsKKwkJbXhjX3NwaS0+dHgobXhjX3NwaSk7CisJCW14Y19zcGktPnR4ZmlmbysrOworCX0KKworCW14Y19zcGktPnRyaWdnZXIobXhjX3NwaSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteGNfc3BpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IGRldl9pZDsKKworCXdoaWxlIChteGNfc3BpLT5yeF9hdmFpbGFibGUobXhjX3NwaSkpIHsKKwkJbXhjX3NwaS0+cngobXhjX3NwaSk7CisJCW14Y19zcGktPnR4Zmlmby0tOworCX0KKworCWlmIChteGNfc3BpLT5jb3VudCkgeworCQlteGNfc3BpX3B1c2gobXhjX3NwaSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAobXhjX3NwaS0+dHhmaWZvKSB7CisJCS8qIE5vIGRhdGEgbGVmdCB0byBwdXNoLCBidXQgc3RpbGwgd2FpdGluZyBmb3IgcnggZGF0YSwKKwkJICogZW5hYmxlIHJlY2VpdmUgZGF0YSBhdmFpbGFibGUgaW50ZXJydXB0LgorCQkgKi8KKwkJbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCBNWENfSU5UX1JSKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCW14Y19zcGktPmludGN0cmwobXhjX3NwaSwgMCk7CisJY29tcGxldGUoJm14Y19zcGktPnhmZXJfZG9uZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbXhjX3NwaV9zZXR1cHhmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc3RydWN0IG14Y19zcGlfY29uZmlnIGNvbmZpZzsKKworCWNvbmZpZy5icHcgPSB0ID8gdC0+Yml0c19wZXJfd29yZCA6IHNwaS0+Yml0c19wZXJfd29yZDsKKwljb25maWcuc3BlZWRfaHogID0gdCA/IHQtPnNwZWVkX2h6IDogc3BpLT5tYXhfc3BlZWRfaHo7CisJY29uZmlnLm1vZGUgPSBzcGktPm1vZGU7CisKKwlteGNfc3BpLT5jb25maWcobXhjX3NwaSwgJmNvbmZpZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteGNfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIpCit7CisJc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJbXhjX3NwaS0+dHhfYnVmID0gdHJhbnNmZXItPnR4X2J1ZjsKKwlteGNfc3BpLT5yeF9idWYgPSB0cmFuc2Zlci0+cnhfYnVmOworCW14Y19zcGktPmNvdW50ID0gdHJhbnNmZXItPmxlbjsKKwlteGNfc3BpLT50eGZpZm8gPSAwOworCisJaW5pdF9jb21wbGV0aW9uKCZteGNfc3BpLT54ZmVyX2RvbmUpOworCisJbXhjX3NwaV9wdXNoKG14Y19zcGkpOworCisJbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCBNWENfSU5UX1RFKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7CisKKwlyZXR1cm4gdHJhbnNmZXItPmxlbjsKK30KKworc3RhdGljIGludCBteGNfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCisJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisKKwlwcl9kZWJ1ZygiJXM6IG1vZGUgJWQsICV1IGJwdywgJWQgaHpcbiIsIF9fZnVuY19fLAorCQkgc3BpLT5tb2RlLCBzcGktPmJpdHNfcGVyX3dvcmQsIHNwaS0+bWF4X3NwZWVkX2h6KTsKKworCW14Y19zcGlfY2hpcHNlbGVjdChzcGksIEJJVEJBTkdfQ1NfSU5BQ1RJVkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG14Y19zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworfQorCitzdGF0aWMgaW50IF9faW5pdCBteGNfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9pbXhfbWFzdGVyICpteGNfcGxhdGZvcm1faW5mbzsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGksIHJldDsKKworCW14Y19wbGF0Zm9ybV9pbmZvID0gKHN0cnVjdCBzcGlfaW14X21hc3RlciAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghbXhjX3BsYXRmb3JtX2luZm8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IHRoZSBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG14Y19zcGlfZGF0YSkpOworCWlmICghbWFzdGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1hc3Rlcik7CisKKwltYXN0ZXItPmJ1c19udW0gPSBwZGV2LT5pZDsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPm51bV9jaGlwc2VsZWN0OworCisJbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlteGNfc3BpLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJbXhjX3NwaS0+Y2hpcHNlbGVjdCA9IG14Y19wbGF0Zm9ybV9pbmZvLT5jaGlwc2VsZWN0OworCisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgeworCQlpZiAobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSA8IDApCisJCQljb250aW51ZTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG14Y19zcGktPmNoaXBzZWxlY3RbaV0sIERSSVZFUl9OQU1FKTsKKwkJaWYgKHJldCkgeworCQkJaS0tOworCQkJd2hpbGUgKGkgPiAwKQorCQkJCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCisJCQkJCWdwaW9fZnJlZShteGNfc3BpLT5jaGlwc2VsZWN0W2ktLV0pOworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGNzIGdwaW9zIik7CisJCQlnb3RvIG91dF9tYXN0ZXJfcHV0OworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChteGNfc3BpLT5jaGlwc2VsZWN0W2ldLCAxKTsKKwl9CisKKwlteGNfc3BpLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBteGNfc3BpX2NoaXBzZWxlY3Q7CisJbXhjX3NwaS0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IG14Y19zcGlfc2V0dXB4ZmVyOworCW14Y19zcGktPmJpdGJhbmcudHhyeF9idWZzID0gbXhjX3NwaV90cmFuc2ZlcjsKKwlteGNfc3BpLT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgPSBteGNfc3BpX3NldHVwOworCW14Y19zcGktPmJpdGJhbmcubWFzdGVyLT5jbGVhbnVwID0gbXhjX3NwaV9jbGVhbnVwOworCisJaW5pdF9jb21wbGV0aW9uKCZteGNfc3BpLT54ZmVyX2RvbmUpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgcGxhdGZvcm0gcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ncGlvX2ZyZWU7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9ncGlvX2ZyZWU7CisJfQorCisJbXhjX3NwaS0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIW14Y19zcGktPmJhc2UpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfcmVsZWFzZV9tZW07CisJfQorCisJbXhjX3NwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIW14Y19zcGktPmlycSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKG14Y19zcGktPmlycSwgbXhjX3NwaV9pc3IsIDAsIERSSVZFUl9OQU1FLCBteGNfc3BpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpcnElZDogJWRcbiIsIG14Y19zcGktPmlycSwgcmV0KTsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisKKwlpZiAoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKSB7CisJCW14Y19zcGktPmludGN0cmwgPSBteDMxX2ludGN0cmw7CisJCW14Y19zcGktPmNvbmZpZyA9IG14MzFfY29uZmlnOworCQlteGNfc3BpLT50cmlnZ2VyID0gbXgzMV90cmlnZ2VyOworCQlteGNfc3BpLT5yeF9hdmFpbGFibGUgPSBteDMxX3J4X2F2YWlsYWJsZTsKKwl9IGVsc2UgIGlmIChjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpIHsKKwkJbXhjX3NwaS0+aW50Y3RybCA9IG14MjdfaW50Y3RybDsKKwkJbXhjX3NwaS0+Y29uZmlnID0gbXgyN19jb25maWc7CisJCW14Y19zcGktPnRyaWdnZXIgPSBteDI3X3RyaWdnZXI7CisJCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MjdfcnhfYXZhaWxhYmxlOworCX0gZWxzZSBpZiAoY3B1X2lzX214MSgpKSB7CisJCW14Y19zcGktPmludGN0cmwgPSBteDFfaW50Y3RybDsKKwkJbXhjX3NwaS0+Y29uZmlnID0gbXgxX2NvbmZpZzsKKwkJbXhjX3NwaS0+dHJpZ2dlciA9IG14MV90cmlnZ2VyOworCQlteGNfc3BpLT5yeF9hdmFpbGFibGUgPSBteDFfcnhfYXZhaWxhYmxlOworCX0gZWxzZQorCQlCVUcoKTsKKworCW14Y19zcGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihteGNfc3BpLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgY2xvY2tcbiIpOworCQlyZXQgPSBQVFJfRVJSKG14Y19zcGktPmNsayk7CisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCX0KKworCWNsa19lbmFibGUobXhjX3NwaS0+Y2xrKTsKKwlteGNfc3BpLT5zcGlfY2xrID0gY2xrX2dldF9yYXRlKG14Y19zcGktPmNsayk7CisKKwlpZiAoIWNwdV9pc19teDMxKCkgfHwgIWNwdV9pc19teDM1KCkpCisJCXdyaXRlbCgxLCBteGNfc3BpLT5iYXNlICsgTVhDX1JFU0VUKTsKKworCW14Y19zcGktPmludGN0cmwobXhjX3NwaSwgMCk7CisKKwlyZXQgPSBzcGlfYml0YmFuZ19zdGFydCgmbXhjX3NwaS0+Yml0YmFuZyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJiaXRiYW5nIHN0YXJ0IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9jbGtfcHV0OworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcm9iZWRcbiIpOworCisJcmV0dXJuIHJldDsKKworb3V0X2Nsa19wdXQ6CisJY2xrX2Rpc2FibGUobXhjX3NwaS0+Y2xrKTsKKwljbGtfcHV0KG14Y19zcGktPmNsayk7CitvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEobXhjX3NwaS0+aXJxLCBteGNfc3BpKTsKK291dF9pb3VubWFwOgorCWlvdW5tYXAobXhjX3NwaS0+YmFzZSk7CitvdXRfcmVsZWFzZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitvdXRfZ3Bpb19mcmVlOgorCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCisJCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCisJCQlncGlvX2ZyZWUobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSk7CitvdXRfbWFzdGVyX3B1dDoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCWtmcmVlKG1hc3Rlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgbXhjX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJaW50IGk7CisKKwlzcGlfYml0YmFuZ19zdG9wKCZteGNfc3BpLT5iaXRiYW5nKTsKKworCXdyaXRlbCgwLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKwljbGtfZGlzYWJsZShteGNfc3BpLT5jbGspOworCWNsa19wdXQobXhjX3NwaS0+Y2xrKTsKKwlmcmVlX2lycShteGNfc3BpLT5pcnEsIG14Y19zcGkpOworCWlvdW5tYXAobXhjX3NwaS0+YmFzZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKQorCQlpZiAobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSA+PSAwKQorCQkJZ3Bpb19mcmVlKG14Y19zcGktPmNoaXBzZWxlY3RbaV0pOworCisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhjX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCisJLnByb2JlID0gbXhjX3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19leGl0X3AobXhjX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhjX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXhjX3NwaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXhjX3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14Y19zcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXhjX3NwaV9pbml0KTsKK21vZHVsZV9leGl0KG14Y19zcGlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU1BJIE1hc3RlciBDb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggOWI4MGFkMy4uYmExYTg3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC00MSw2ICs0MSw5IEBACiAKICNkZWZpbmUgT01BUDJfTUNTUElfTUFYX0ZSRVEJCTQ4MDAwMDAwCiAKKy8qIE9NQVAyIGhhcyAzIFNQSSBjb250cm9sbGVycywgd2hpbGUgT01BUDMgaGFzIDQgKi8KKyNkZWZpbmUgT01BUDJfTUNTUElfTUFYX0NUUkwgCQk0CisKICNkZWZpbmUgT01BUDJfTUNTUElfUkVWSVNJT04JCTB4MDAKICNkZWZpbmUgT01BUDJfTUNTUElfU1lTQ09ORklHCQkweDEwCiAjZGVmaW5lIE9NQVAyX01DU1BJX1NZU1NUQVRVUwkJMHgxNApAQCAtNTksNDAgKzYyLDQwIEBACiAKIC8qIHBlci1yZWdpc3RlciBiaXRtYXNrczogKi8KIAotI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfU01BUlRJRExFCSgyIDw8IDMpCi0jZGVmaW5lIE9NQVAyX01DU1BJX1NZU0NPTkZJR19FTkFXQUtFVVAJKDEgPDwgMikKLSNkZWZpbmUgT01BUDJfTUNTUElfU1lTQ09ORklHX0FVVE9JRExFCSgxIDw8IDApCi0jZGVmaW5lIE9NQVAyX01DU1BJX1NZU0NPTkZJR19TT0ZUUkVTRVQJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDJfTUNTUElfU1lTQ09ORklHX1NNQVJUSURMRQlCSVQoNCkKKyNkZWZpbmUgT01BUDJfTUNTUElfU1lTQ09ORklHX0VOQVdBS0VVUAlCSVQoMikKKyNkZWZpbmUgT01BUDJfTUNTUElfU1lTQ09ORklHX0FVVE9JRExFCUJJVCgwKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfU09GVFJFU0VUCUJJVCgxKQogCi0jZGVmaW5lIE9NQVAyX01DU1BJX1NZU1NUQVRVU19SRVNFVERPTkUJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDJfTUNTUElfU1lTU1RBVFVTX1JFU0VURE9ORQlCSVQoMCkKIAotI2RlZmluZSBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfU0lOR0xFCSgxIDw8IDApCi0jZGVmaW5lIE9NQVAyX01DU1BJX01PRFVMQ1RSTF9NUwkoMSA8PCAyKQotI2RlZmluZSBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfU1RFU1QJKDEgPDwgMykKKyNkZWZpbmUgT01BUDJfTUNTUElfTU9EVUxDVFJMX1NJTkdMRQlCSVQoMCkKKyNkZWZpbmUgT01BUDJfTUNTUElfTU9EVUxDVFJMX01TCUJJVCgyKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfU1RFU1QJQklUKDMpCiAKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1BIQQkJKDEgPDwgMCkKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1BPTAkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1BIQQkJQklUKDApCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9QT0wJCUJJVCgxKQogI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfQ0xLRF9NQVNLCSgweDBmIDw8IDIpCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9FUE9MCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfRVBPTAkJQklUKDYpCiAjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9XTF9NQVNLCSgweDFmIDw8IDcpCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9UUk1fUlhfT05MWQkoMHgwMSA8PCAxMikKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1RSTV9UWF9PTkxZCSgweDAyIDw8IDEyKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfVFJNX1JYX09OTFkJQklUKDEyKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfVFJNX1RYX09OTFkJQklUKDEzKQogI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfVFJNX01BU0sJKDB4MDMgPDwgMTIpCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9ETUFXCQkoMSA8PCAxNCkKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0RNQVIJCSgxIDw8IDE1KQotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfRFBFMAkJKDEgPDwgMTYpCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9EUEUxCQkoMSA8PCAxNykKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0lTCQkoMSA8PCAxOCkKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1RVUkJPCSgxIDw8IDE5KQotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfRk9SQ0UJKDEgPDwgMjApCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9ETUFXCQlCSVQoMTQpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9ETUFSCQlCSVQoMTUpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9EUEUwCQlCSVQoMTYpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9EUEUxCQlCSVQoMTcpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9JUwkJQklUKDE4KQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfVFVSQk8JQklUKDE5KQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfRk9SQ0UJQklUKDIwKQogCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIU1RBVF9SWFMJCSgxIDw8IDApCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIU1RBVF9UWFMJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIU1RBVF9FT1QJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIU1RBVF9SWFMJCUJJVCgwKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSFNUQVRfVFhTCQlCSVQoMSkKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hTVEFUX0VPVAkJQklUKDIpCiAKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDVFJMX0VOCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENUUkxfRU4JCUJJVCgwKQogCi0jZGVmaW5lIE9NQVAyX01DU1BJX1dBS0VVUEVOQUJMRV9XS0VOCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyX01DU1BJX1dBS0VVUEVOQUJMRV9XS0VOCUJJVCgwKQogCiAvKiBXZSBoYXZlIDIgRE1BIGNoYW5uZWxzIHBlciBDUywgb25lIGZvciBSWCBhbmQgb25lIGZvciBUWCAqLwogc3RydWN0IG9tYXAyX21jc3BpX2RtYSB7CkBAIC0xMzEsOCArMTM0LDIzIEBACiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsKIAl1bnNpZ25lZCBsb25nCQlwaHlzOwogCWludAkJCXdvcmRfbGVuOworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwkvKiBDb250ZXh0IHNhdmUgYW5kIHJlc3RvcmUgc2hhZG93IHJlZ2lzdGVyICovCisJdTMyCQkJY2hjb25mMDsKIH07CiAKKy8qIHVzZWQgZm9yIGNvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSwgc3RydWN0dXJlIG1lbWJlcnMgdG8gYmUgdXBkYXRlZCB3aGVuZXZlcgorICogY29ycmVzcG9uZGluZyByZWdpc3RlcnMgYXJlIG1vZGlmaWVkLgorICovCitzdHJ1Y3Qgb21hcDJfbWNzcGlfcmVncyB7CisJdTMyIHN5c2NvbmZpZzsKKwl1MzIgbW9kdWxjdHJsOworCXUzMiB3YWtldXBlbmFibGU7CisJc3RydWN0IGxpc3RfaGVhZCBjczsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfcmVncyBvbWFwMl9tY3NwaV9jdHhbT01BUDJfTUNTUElfTUFYX0NUUkxdOworCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm9tYXAyX21jc3BpX3dxOwogCiAjZGVmaW5lIE1PRF9SRUdfQklUKHZhbCwgbWFzaywgc2V0KSBkbyB7IFwKQEAgLTE3MiwxMiArMTkwLDI3IEBACiAJcmV0dXJuIF9fcmF3X3JlYWRsKGNzLT5iYXNlICsgaWR4KTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbWNzcGlfY2FjaGVkX2NoY29uZjAoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgb21hcDJfbWNzcGlfY3MgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOworCisJcmV0dXJuIGNzLT5jaGNvbmYwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWNzcGlfd3JpdGVfY2hjb25mMChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1MzIgdmFsKQoreworCXN0cnVjdCBvbWFwMl9tY3NwaV9jcyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisKKwljcy0+Y2hjb25mMCA9IHZhbDsKKwltY3NwaV93cml0ZV9jc19yZWcoc3BpLCBPTUFQMl9NQ1NQSV9DSENPTkYwLCB2YWwpOworfQorCiBzdGF0aWMgdm9pZCBvbWFwMl9tY3NwaV9zZXRfZG1hX3JlcShjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAogCQlpbnQgaXNfcmVhZCwgaW50IGVuYWJsZSkKIHsKIAl1MzIgbCwgcnc7CiAKLQlsID0gbWNzcGlfcmVhZF9jc19yZWcoc3BpLCBPTUFQMl9NQ1NQSV9DSENPTkYwKTsKKwlsID0gbWNzcGlfY2FjaGVkX2NoY29uZjAoc3BpKTsKIAogCWlmIChpc19yZWFkKSAvKiAxIGlzIHJlYWQsIDAgd3JpdGUgKi8KIAkJcncgPSBPTUFQMl9NQ1NQSV9DSENPTkZfRE1BUjsKQEAgLTE4NSw3ICsyMTgsNyBAQAogCQlydyA9IE9NQVAyX01DU1BJX0NIQ09ORl9ETUFXOwogCiAJTU9EX1JFR19CSVQobCwgcncsIGVuYWJsZSk7Ci0JbWNzcGlfd3JpdGVfY3NfcmVnKHNwaSwgT01BUDJfTUNTUElfQ0hDT05GMCwgbCk7CisJbWNzcGlfd3JpdGVfY2hjb25mMChzcGksIGwpOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwMl9tY3NwaV9zZXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBlbmFibGUpCkBAIC0yMDAsOSArMjMzLDkgQEAKIHsKIAl1MzIgbDsKIAotCWwgPSBtY3NwaV9yZWFkX2NzX3JlZyhzcGksIE9NQVAyX01DU1BJX0NIQ09ORjApOworCWwgPSBtY3NwaV9jYWNoZWRfY2hjb25mMChzcGkpOwogCU1PRF9SRUdfQklUKGwsIE9NQVAyX01DU1BJX0NIQ09ORl9GT1JDRSwgY3NfYWN0aXZlKTsKLQltY3NwaV93cml0ZV9jc19yZWcoc3BpLCBPTUFQMl9NQ1NQSV9DSENPTkYwLCBsKTsKKwltY3NwaV93cml0ZV9jaGNvbmYwKHNwaSwgbCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXAyX21jc3BpX3NldF9tYXN0ZXJfbW9kZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQpAQCAtMjE3LDYgKzI1MCw0NiBAQAogCU1PRF9SRUdfQklUKGwsIE9NQVAyX01DU1BJX01PRFVMQ1RSTF9NUywgMCk7CiAJTU9EX1JFR19CSVQobCwgT01BUDJfTUNTUElfTU9EVUxDVFJMX1NJTkdMRSwgMSk7CiAJbWNzcGlfd3JpdGVfcmVnKG1hc3RlciwgT01BUDJfTUNTUElfTU9EVUxDVFJMLCBsKTsKKworCW9tYXAyX21jc3BpX2N0eFttYXN0ZXItPmJ1c19udW0gLSAxXS5tb2R1bGN0cmwgPSBsOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9tY3NwaV9yZXN0b3JlX2N0eChzdHJ1Y3Qgb21hcDJfbWNzcGkgKm1jc3BpKQoreworCXN0cnVjdCBzcGlfbWFzdGVyICpzcGlfY250cmw7CisJc3RydWN0IG9tYXAyX21jc3BpX2NzICpjczsKKwlzcGlfY250cmwgPSBtY3NwaS0+bWFzdGVyOworCisJLyogTWNTUEk6IGNvbnRleHQgcmVzdG9yZSAqLworCW1jc3BpX3dyaXRlX3JlZyhzcGlfY250cmwsIE9NQVAyX01DU1BJX01PRFVMQ1RSTCwKKwkJCW9tYXAyX21jc3BpX2N0eFtzcGlfY250cmwtPmJ1c19udW0gLSAxXS5tb2R1bGN0cmwpOworCisJbWNzcGlfd3JpdGVfcmVnKHNwaV9jbnRybCwgT01BUDJfTUNTUElfU1lTQ09ORklHLAorCQkJb21hcDJfbWNzcGlfY3R4W3NwaV9jbnRybC0+YnVzX251bSAtIDFdLnN5c2NvbmZpZyk7CisKKwltY3NwaV93cml0ZV9yZWcoc3BpX2NudHJsLCBPTUFQMl9NQ1NQSV9XQUtFVVBFTkFCTEUsCisJCQlvbWFwMl9tY3NwaV9jdHhbc3BpX2NudHJsLT5idXNfbnVtIC0gMV0ud2FrZXVwZW5hYmxlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3MsICZvbWFwMl9tY3NwaV9jdHhbc3BpX2NudHJsLT5idXNfbnVtIC0gMV0uY3MsCisJCQlub2RlKQorCQlfX3Jhd193cml0ZWwoY3MtPmNoY29uZjAsIGNzLT5iYXNlICsgT01BUDJfTUNTUElfQ0hDT05GMCk7Cit9CitzdGF0aWMgdm9pZCBvbWFwMl9tY3NwaV9kaXNhYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcDJfbWNzcGkgKm1jc3BpKQoreworCWNsa19kaXNhYmxlKG1jc3BpLT5pY2spOworCWNsa19kaXNhYmxlKG1jc3BpLT5mY2spOworfQorCitzdGF0aWMgaW50IG9tYXAyX21jc3BpX2VuYWJsZV9jbG9ja3Moc3RydWN0IG9tYXAyX21jc3BpICptY3NwaSkKK3sKKwlpZiAoY2xrX2VuYWJsZShtY3NwaS0+aWNrKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGNsa19lbmFibGUobWNzcGktPmZjaykpCisJCXJldHVybiAtRU5PREVWOworCisJb21hcDJfbWNzcGlfcmVzdG9yZV9jdHgobWNzcGkpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZApAQCAtMzU3LDcgKzQzMCw3IEBACiAJYyA9IGNvdW50OwogCXdvcmRfbGVuID0gY3MtPndvcmRfbGVuOwogCi0JbCA9IG1jc3BpX3JlYWRfY3NfcmVnKHNwaSwgT01BUDJfTUNTUElfQ0hDT05GMCk7CisJbCA9IG1jc3BpX2NhY2hlZF9jaGNvbmYwKHNwaSk7CiAJbCAmPSB+T01BUDJfTUNTUElfQ0hDT05GX1RSTV9NQVNLOwogCiAJLyogV2Ugc3RvcmUgdGhlIHByZS1jYWxjdWxhdGVkIHJlZ2lzdGVyIGFkZHJlc3NlcyBvbiBzdGFjayB0byBzcGVlZApAQCAtMzk3LDggKzQ3MCw3IEBACiAJCQkJICogbW9yZSB3b3JkIGkvbzogc3dpdGNoIHRvIHJ4K3R4CiAJCQkJICovCiAJCQkJaWYgKGMgPT0gMCAmJiB0eCA9PSBOVUxMKQotCQkJCQltY3NwaV93cml0ZV9jc19yZWcoc3BpLAotCQkJCQkJCU9NQVAyX01DU1BJX0NIQ09ORjAsIGwpOworCQkJCQltY3NwaV93cml0ZV9jaGNvbmYwKHNwaSwgbCk7CiAJCQkJKnJ4KysgPSBfX3Jhd19yZWFkbChyeF9yZWcpOwogI2lmZGVmIFZFUkJPU0UKIAkJCQlkZXZfZGJnKCZzcGktPmRldiwgInJlYWQtJWQgJTAyeFxuIiwKQEAgLTQzNiw4ICs1MDgsNyBAQAogCQkJCSAqIG1vcmUgd29yZCBpL286IHN3aXRjaCB0byByeCt0eAogCQkJCSAqLwogCQkJCWlmIChjID09IDAgJiYgdHggPT0gTlVMTCkKLQkJCQkJbWNzcGlfd3JpdGVfY3NfcmVnKHNwaSwKLQkJCQkJCQlPTUFQMl9NQ1NQSV9DSENPTkYwLCBsKTsKKwkJCQkJbWNzcGlfd3JpdGVfY2hjb25mMChzcGksIGwpOwogCQkJCSpyeCsrID0gX19yYXdfcmVhZGwocnhfcmVnKTsKICNpZmRlZiBWRVJCT1NFCiAJCQkJZGV2X2RiZygmc3BpLT5kZXYsICJyZWFkLSVkICUwNHhcbiIsCkBAIC00NzUsOCArNTQ2LDcgQEAKIAkJCQkgKiBtb3JlIHdvcmQgaS9vOiBzd2l0Y2ggdG8gcngrdHgKIAkJCQkgKi8KIAkJCQlpZiAoYyA9PSAwICYmIHR4ID09IE5VTEwpCi0JCQkJCW1jc3BpX3dyaXRlX2NzX3JlZyhzcGksCi0JCQkJCQkJT01BUDJfTUNTUElfQ0hDT05GMCwgbCk7CisJCQkJCW1jc3BpX3dyaXRlX2NoY29uZjAoc3BpLCBsKTsKIAkJCQkqcngrKyA9IF9fcmF3X3JlYWRsKHJ4X3JlZyk7CiAjaWZkZWYgVkVSQk9TRQogCQkJCWRldl9kYmcoJnNwaS0+ZGV2LCAicmVhZC0lZCAlMDR4XG4iLApAQCAtNTA1LDEwICs1NzUsMTIgQEAKIHsKIAlzdHJ1Y3Qgb21hcDJfbWNzcGlfY3MgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOwogCXN0cnVjdCBvbWFwMl9tY3NwaSAqbWNzcGk7CisJc3RydWN0IHNwaV9tYXN0ZXIgKnNwaV9jbnRybDsKIAl1MzIgbCA9IDAsIGRpdiA9IDA7CiAJdTggd29yZF9sZW4gPSBzcGktPmJpdHNfcGVyX3dvcmQ7CiAKIAltY3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXNwaV9jbnRybCA9IG1jc3BpLT5tYXN0ZXI7CiAKIAlpZiAodCAhPSBOVUxMICYmIHQtPmJpdHNfcGVyX3dvcmQpCiAJCXdvcmRfbGVuID0gdC0+Yml0c19wZXJfd29yZDsKQEAgLTUyMiw3ICs1OTQsNyBAQAogCX0gZWxzZQogCQlkaXYgPSAxNTsKIAotCWwgPSBtY3NwaV9yZWFkX2NzX3JlZyhzcGksIE9NQVAyX01DU1BJX0NIQ09ORjApOworCWwgPSBtY3NwaV9jYWNoZWRfY2hjb25mMChzcGkpOwogCiAJLyogc3RhbmRhcmQgNC13aXJlIG1hc3RlciBtb2RlOiAgU0NLLCBNT1NJL291dCwgTUlTTy9pbiwgbkNTCiAJICogUkVWSVNJVDogdGhpcyBjb250cm9sbGVyIGNvdWxkIHN1cHBvcnQgU1BJXzNXSVJFIG1vZGUuCkBAIC01NTQsNyArNjI2LDcgQEAKIAllbHNlCiAJCWwgJj0gfk9NQVAyX01DU1BJX0NIQ09ORl9QSEE7CiAKLQltY3NwaV93cml0ZV9jc19yZWcoc3BpLCBPTUFQMl9NQ1NQSV9DSENPTkYwLCBsKTsKKwltY3NwaV93cml0ZV9jaGNvbmYwKHNwaSwgbCk7CiAKIAlkZXZfZGJnKCZzcGktPmRldiwgInNldHVwOiBzcGVlZCAlZCwgc2FtcGxlICVzIGVkZ2UsIGNsayAlc1xuIiwKIAkJCU9NQVAyX01DU1BJX01BWF9GUkVRIC8gKDEgPDwgZGl2KSwKQEAgLTY0Nyw3ICs3MTksMTEgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQljcy0+YmFzZSA9IG1jc3BpLT5iYXNlICsgc3BpLT5jaGlwX3NlbGVjdCAqIDB4MTQ7CiAJCWNzLT5waHlzID0gbWNzcGktPnBoeXMgKyBzcGktPmNoaXBfc2VsZWN0ICogMHgxNDsKKwkJY3MtPmNoY29uZjAgPSAwOwogCQlzcGktPmNvbnRyb2xsZXJfc3RhdGUgPSBjczsKKwkJLyogTGluayB0aGlzIHRvIGNvbnRleHQgc2F2ZSBsaXN0ICovCisJCWxpc3RfYWRkX3RhaWwoJmNzLT5ub2RlLAorCQkJJm9tYXAyX21jc3BpX2N0eFttY3NwaS0+bWFzdGVyLT5idXNfbnVtIC0gMV0uY3MpOwogCX0KIAogCWlmIChtY3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsID09IC0xCkBAIC02NTcsMTEgKzczMywxMSBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQljbGtfZW5hYmxlKG1jc3BpLT5pY2spOwotCWNsa19lbmFibGUobWNzcGktPmZjayk7CisJaWYgKG9tYXAyX21jc3BpX2VuYWJsZV9jbG9ja3MobWNzcGkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldCA9IG9tYXAyX21jc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7Ci0JY2xrX2Rpc2FibGUobWNzcGktPmZjayk7Ci0JY2xrX2Rpc2FibGUobWNzcGktPmljayk7CisJb21hcDJfbWNzcGlfZGlzYWJsZV9jbG9ja3MobWNzcGkpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY3MCwxMCArNzQ2LDE1IEBACiB7CiAJc3RydWN0IG9tYXAyX21jc3BpCSptY3NwaTsKIAlzdHJ1Y3Qgb21hcDJfbWNzcGlfZG1hCSptY3NwaV9kbWE7CisJc3RydWN0IG9tYXAyX21jc3BpX2NzCSpjczsKIAogCW1jc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAJbWNzcGlfZG1hID0gJm1jc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07CiAKKwkvKiBVbmxpbmsgY29udHJvbGxlciBzdGF0ZSBmcm9tIGNvbnRleHQgc2F2ZSBsaXN0ICovCisJY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisJbGlzdF9kZWwoJmNzLT5ub2RlKTsKKwogCWtmcmVlKHNwaS0+Y29udHJvbGxlcl9zdGF0ZSk7CiAKIAlpZiAobWNzcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCAhPSAtMSkgewpAQCAtNjkzLDggKzc3NCw4IEBACiAJbWNzcGkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG9tYXAyX21jc3BpLCB3b3JrKTsKIAlzcGluX2xvY2tfaXJxKCZtY3NwaS0+bG9jayk7CiAKLQljbGtfZW5hYmxlKG1jc3BpLT5pY2spOwotCWNsa19lbmFibGUobWNzcGktPmZjayk7CisJaWYgKG9tYXAyX21jc3BpX2VuYWJsZV9jbG9ja3MobWNzcGkpKQorCQlnb3RvIG91dDsKIAogCS8qIFdlIG9ubHkgZW5hYmxlIG9uZSBjaGFubmVsIGF0IGEgdGltZSAtLSB0aGUgb25lIHdob3NlIG1lc3NhZ2UgaXMKIAkgKiBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgLS0gYWx0aG91Z2ggdGhpcyBjb250cm9sbGVyIHdvdWxkIGdsYWRseQpAQCAtNzQxLDEzICs4MjIsMTMgQEAKIAkJCQljc19hY3RpdmUgPSAxOwogCQkJfQogCi0JCQljaGNvbmYgPSBtY3NwaV9yZWFkX2NzX3JlZyhzcGksIE9NQVAyX01DU1BJX0NIQ09ORjApOworCQkJY2hjb25mID0gbWNzcGlfY2FjaGVkX2NoY29uZjAoc3BpKTsKIAkJCWNoY29uZiAmPSB+T01BUDJfTUNTUElfQ0hDT05GX1RSTV9NQVNLOwogCQkJaWYgKHQtPnR4X2J1ZiA9PSBOVUxMKQogCQkJCWNoY29uZiB8PSBPTUFQMl9NQ1NQSV9DSENPTkZfVFJNX1JYX09OTFk7CiAJCQllbHNlIGlmICh0LT5yeF9idWYgPT0gTlVMTCkKIAkJCQljaGNvbmYgfD0gT01BUDJfTUNTUElfQ0hDT05GX1RSTV9UWF9PTkxZOwotCQkJbWNzcGlfd3JpdGVfY3NfcmVnKHNwaSwgT01BUDJfTUNTUElfQ0hDT05GMCwgY2hjb25mKTsKKwkJCW1jc3BpX3dyaXRlX2NoY29uZjAoc3BpLCBjaGNvbmYpOwogCiAJCQlpZiAodC0+bGVuKSB7CiAJCQkJdW5zaWduZWQJY291bnQ7CkBAIC03OTYsOSArODc3LDkgQEAKIAkJc3Bpbl9sb2NrX2lycSgmbWNzcGktPmxvY2spOwogCX0KIAotCWNsa19kaXNhYmxlKG1jc3BpLT5mY2spOwotCWNsa19kaXNhYmxlKG1jc3BpLT5pY2spOworCW9tYXAyX21jc3BpX2Rpc2FibGVfY2xvY2tzKG1jc3BpKTsKIAorb3V0OgogCXNwaW5fdW5sb2NrX2lycSgmbWNzcGktPmxvY2spOwogfQogCkBAIC04ODUsOCArOTY2LDggQEAKIAlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyID0gbWNzcGktPm1hc3RlcjsKIAl1MzIJCQl0bXA7CiAKLQljbGtfZW5hYmxlKG1jc3BpLT5pY2spOwotCWNsa19lbmFibGUobWNzcGktPmZjayk7CisJaWYgKG9tYXAyX21jc3BpX2VuYWJsZV9jbG9ja3MobWNzcGkpKQorCQlyZXR1cm4gLTE7CiAKIAltY3NwaV93cml0ZV9yZWcobWFzdGVyLCBPTUFQMl9NQ1NQSV9TWVNDT05GSUcsCiAJCQlPTUFQMl9NQ1NQSV9TWVNDT05GSUdfU09GVFJFU0VUKTsKQEAgLTg5NCwxOCArOTc1LDE4IEBACiAJCXRtcCA9IG1jc3BpX3JlYWRfcmVnKG1hc3RlciwgT01BUDJfTUNTUElfU1lTU1RBVFVTKTsKIAl9IHdoaWxlICghKHRtcCAmIE9NQVAyX01DU1BJX1NZU1NUQVRVU19SRVNFVERPTkUpKTsKIAotCW1jc3BpX3dyaXRlX3JlZyhtYXN0ZXIsIE9NQVAyX01DU1BJX1NZU0NPTkZJRywKLQkJCU9NQVAyX01DU1BJX1NZU0NPTkZJR19BVVRPSURMRSB8Ci0JCQlPTUFQMl9NQ1NQSV9TWVNDT05GSUdfRU5BV0FLRVVQIHwKLQkJCU9NQVAyX01DU1BJX1NZU0NPTkZJR19TTUFSVElETEUpOworCXRtcCA9IE9NQVAyX01DU1BJX1NZU0NPTkZJR19BVVRPSURMRSB8CisJCU9NQVAyX01DU1BJX1NZU0NPTkZJR19FTkFXQUtFVVAgfAorCQlPTUFQMl9NQ1NQSV9TWVNDT05GSUdfU01BUlRJRExFOworCW1jc3BpX3dyaXRlX3JlZyhtYXN0ZXIsIE9NQVAyX01DU1BJX1NZU0NPTkZJRywgdG1wKTsKKwlvbWFwMl9tY3NwaV9jdHhbbWFzdGVyLT5idXNfbnVtIC0gMV0uc3lzY29uZmlnID0gdG1wOwogCi0JbWNzcGlfd3JpdGVfcmVnKG1hc3RlciwgT01BUDJfTUNTUElfV0FLRVVQRU5BQkxFLAotCQkJT01BUDJfTUNTUElfV0FLRVVQRU5BQkxFX1dLRU4pOworCXRtcCA9IE9NQVAyX01DU1BJX1dBS0VVUEVOQUJMRV9XS0VOOworCW1jc3BpX3dyaXRlX3JlZyhtYXN0ZXIsIE9NQVAyX01DU1BJX1dBS0VVUEVOQUJMRSwgdG1wKTsKKwlvbWFwMl9tY3NwaV9jdHhbbWFzdGVyLT5idXNfbnVtIC0gMV0ud2FrZXVwZW5hYmxlID0gdG1wOwogCiAJb21hcDJfbWNzcGlfc2V0X21hc3Rlcl9tb2RlKG1hc3Rlcik7Ci0KLQljbGtfZGlzYWJsZShtY3NwaS0+ZmNrKTsKLQljbGtfZGlzYWJsZShtY3NwaS0+aWNrKTsKKwlvbWFwMl9tY3NwaV9kaXNhYmxlX2Nsb2NrcyhtY3NwaSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkzMyw3ICsxMDE0LDggQEAKIAlPTUFQMjRYWF9ETUFfU1BJMl9UWDEsCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIHN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaTNfcnhkbWFfaWRbXSA9IHsKIAlPTUFQMjRYWF9ETUFfU1BJM19SWDAsCiAJT01BUDI0WFhfRE1BX1NQSTNfUlgxLApAQCAtOTQ1LDcgKzEwMjcsNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpNF9yeGRtYV9pZFtdID0gewogCU9NQVAzNFhYX0RNQV9TUEk0X1JYMCwKIH07CkBAIC05NzUsMTQgKzEwNTcsMTUgQEAKIAkJdHhkbWFfaWQgPSBzcGkyX3R4ZG1hX2lkOwogCQludW1fY2hpcHNlbGVjdCA9IDI7CiAJCWJyZWFrOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgXAorCXx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAJY2FzZSAzOgogCQlyeGRtYV9pZCA9IHNwaTNfcnhkbWFfaWQ7CiAJCXR4ZG1hX2lkID0gc3BpM190eGRtYV9pZDsKIAkJbnVtX2NoaXBzZWxlY3QgPSAyOwogCQlicmVhazsKICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIAljYXNlIDQ6CiAJCXJ4ZG1hX2lkID0gc3BpNF9yeGRtYV9pZDsKIAkJdHhkbWFfaWQgPSBzcGk0X3R4ZG1hX2lkOwpAQCAtMTAzOCw2ICsxMTIxLDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZtY3NwaS0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm1jc3BpLT5tc2dfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZvbWFwMl9tY3NwaV9jdHhbbWFzdGVyLT5idXNfbnVtIC0gMV0uY3MpOwogCiAJbWNzcGktPmljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwogCWlmIChJU19FUlIobWNzcGktPmljaykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwppbmRleCA4OTgwYTU2Li5lNzViYTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAl1bnNpZ25lZAliaXRzID0gdXN0LT5iaXRzX3Blcl93b3JkOwogCXVuc2lnbmVkCWJ5dGVzOwogCXUxNgkJdmFsLCB3OwotCWludAkJc3RhdHVzID0gMDs7CisJaW50CQlzdGF0dXMgPSAwOwogCiAJaWYgKCF0LT50eF9idWYgJiYgIXQtPnJ4X2J1ZikKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggZDk0OWRiZi4uMzFkZDU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMTcyOSw3ICsxNzI5LDcgQEAKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZkcml2ZXIsIHB4YTJ4eF9zcGlfcHJvYmUpOwogfQotbW9kdWxlX2luaXQocHhhMnh4X3NwaV9pbml0KTsKK3N1YnN5c19pbml0Y2FsbChweGEyeHhfc3BpX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHhhMnh4X3NwaV9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS5jCmluZGV4IDcwODQ1Y2MuLmI3NmYyNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKIApAQCAtNTksOSArNjAsMzIgQEAKICAqIGFuZCB0aGUgc3lzZnMgdmVyc2lvbiBtYWtlcyBjb2xkcGx1ZyB3b3JrIHRvby4KICAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgKnNwaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqaWQsCisJCQkJCQljb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc2RldikKK3sKKwl3aGlsZSAoaWQtPm5hbWVbMF0pIHsKKwkJaWYgKCFzdHJjbXAoc2Rldi0+bW9kYWxpYXMsIGlkLT5uYW1lKSkKKwkJCXJldHVybiBpZDsKKwkJaWQrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkICpzcGlfZ2V0X2RldmljZV9pZChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc2RldikKK3sKKwljb25zdCBzdHJ1Y3Qgc3BpX2RyaXZlciAqc2RydiA9IHRvX3NwaV9kcml2ZXIoc2Rldi0+ZGV2LmRyaXZlcik7CisKKwlyZXR1cm4gc3BpX21hdGNoX2lkKHNkcnYtPmlkX3RhYmxlLCBzZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNwaV9nZXRfZGV2aWNlX2lkKTsKKwogc3RhdGljIGludCBzcGlfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKIAljb25zdCBzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCWNvbnN0IHN0cnVjdCBzcGlfZHJpdmVyCSpzZHJ2ID0gdG9fc3BpX2RyaXZlcihkcnYpOworCisJaWYgKHNkcnYtPmlkX3RhYmxlKQorCQlyZXR1cm4gISFzcGlfbWF0Y2hfaWQoc2Rydi0+aWRfdGFibGUsIHNwaSk7CiAKIAlyZXR1cm4gc3RyY21wKHNwaS0+bW9kYWxpYXMsIGRydi0+bmFtZSkgPT0gMDsKIH0KQEAgLTcwLDcgKzk0LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc3BpX2RldmljZQkJKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKIAotCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPSVzIiwgc3BpLT5tb2RhbGlhcyk7CisJYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9JXMlcyIsIFNQSV9NT0RVTEVfUFJFRklYLCBzcGktPm1vZGFsaWFzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjM5LDYgKzY2Myw2NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BpX3NldHVwKTsKIAorLyoqCisgKiBzcGlfYXN5bmMgLSBhc3luY2hyb25vdXMgU1BJIHRyYW5zZmVyCisgKiBAc3BpOiBkZXZpY2Ugd2l0aCB3aGljaCBkYXRhIHdpbGwgYmUgZXhjaGFuZ2VkCisgKiBAbWVzc2FnZTogZGVzY3JpYmVzIHRoZSBkYXRhIHRyYW5zZmVycywgaW5jbHVkaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIENvbnRleHQ6IGFueSAoaXJxcyBtYXkgYmUgYmxvY2tlZCwgZXRjKQorICoKKyAqIFRoaXMgY2FsbCBtYXkgYmUgdXNlZCBpbl9pcnEgYW5kIG90aGVyIGNvbnRleHRzIHdoaWNoIGNhbid0IHNsZWVwLAorICogYXMgd2VsbCBhcyBmcm9tIHRhc2sgY29udGV4dHMgd2hpY2ggY2FuIHNsZWVwLgorICoKKyAqIFRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGludm9rZWQgaW4gYSBjb250ZXh0IHdoaWNoIGNhbid0IHNsZWVwLgorICogQmVmb3JlIHRoYXQgaW52b2NhdGlvbiwgdGhlIHZhbHVlIG9mIG1lc3NhZ2UtPnN0YXR1cyBpcyB1bmRlZmluZWQuCisgKiBXaGVuIHRoZSBjYWxsYmFjayBpcyBpc3N1ZWQsIG1lc3NhZ2UtPnN0YXR1cyBob2xkcyBlaXRoZXIgemVybyAodG8KKyAqIGluZGljYXRlIGNvbXBsZXRlIHN1Y2Nlc3MpIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4gIEFmdGVyIHRoYXQKKyAqIGNhbGxiYWNrIHJldHVybnMsIHRoZSBkcml2ZXIgd2hpY2ggaXNzdWVkIHRoZSB0cmFuc2ZlciByZXF1ZXN0IG1heQorICogZGVhbGxvY2F0ZSB0aGUgYXNzb2NpYXRlZCBtZW1vcnk7IGl0J3Mgbm8gbG9uZ2VyIGluIHVzZSBieSBhbnkgU1BJCisgKiBjb3JlIG9yIGNvbnRyb2xsZXIgZHJpdmVyIGNvZGUuCisgKgorICogTm90ZSB0aGF0IGFsdGhvdWdoIGFsbCBtZXNzYWdlcyB0byBhIHNwaV9kZXZpY2UgYXJlIGhhbmRsZWQgaW4KKyAqIEZJRk8gb3JkZXIsIG1lc3NhZ2VzIG1heSBnbyB0byBkaWZmZXJlbnQgZGV2aWNlcyBpbiBvdGhlciBvcmRlcnMuCisgKiBTb21lIGRldmljZSBtaWdodCBiZSBoaWdoZXIgcHJpb3JpdHksIG9yIGhhdmUgdmFyaW91cyAiaGFyZCIgYWNjZXNzCisgKiB0aW1lIHJlcXVpcmVtZW50cywgZm9yIGV4YW1wbGUuCisgKgorICogT24gZGV0ZWN0aW9uIG9mIGFueSBmYXVsdCBkdXJpbmcgdGhlIHRyYW5zZmVyLCBwcm9jZXNzaW5nIG9mCisgKiB0aGUgZW50aXJlIG1lc3NhZ2UgaXMgYWJvcnRlZCwgYW5kIHRoZSBkZXZpY2UgaXMgZGVzZWxlY3RlZC4KKyAqIFVudGlsIHJldHVybmluZyBmcm9tIHRoZSBhc3NvY2lhdGVkIG1lc3NhZ2UgY29tcGxldGlvbiBjYWxsYmFjaywKKyAqIG5vIG90aGVyIHNwaV9tZXNzYWdlIHF1ZXVlZCB0byB0aGF0IGRldmljZSB3aWxsIGJlIHByb2Nlc3NlZC4KKyAqIChUaGlzIHJ1bGUgYXBwbGllcyBlcXVhbGx5IHRvIGFsbCB0aGUgc3luY2hyb25vdXMgdHJhbnNmZXIgY2FsbHMsCisgKiB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIHRoaXMgY29yZSBhc3luY2hyb25vdXMgcHJpbWl0aXZlLikKKyAqLworaW50IHNwaV9hc3luYyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1lc3NhZ2UpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaS0+bWFzdGVyOworCisJLyogSGFsZi1kdXBsZXggbGlua3MgaW5jbHVkZSBvcmlnaW5hbCBNaWNyb1dpcmUsIGFuZCBvbmVzIHdpdGgKKwkgKiBvbmx5IG9uZSBkYXRhIHBpbiBsaWtlIFNQSV8zV0lSRSAoc3dpdGNoZXMgZGlyZWN0aW9uKSBvciB3aGVyZQorCSAqIGVpdGhlciBNT1NJIG9yIE1JU08gaXMgbWlzc2luZy4gIFRoZXkgY2FuIGFsc28gYmUgY2F1c2VkIGJ5CisJICogc29mdHdhcmUgbGltaXRhdGlvbnMuCisJICovCisJaWYgKChtYXN0ZXItPmZsYWdzICYgU1BJX01BU1RFUl9IQUxGX0RVUExFWCkKKwkJCXx8IChzcGktPm1vZGUgJiBTUElfM1dJUkUpKSB7CisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXI7CisJCXVuc2lnbmVkIGZsYWdzID0gbWFzdGVyLT5mbGFnczsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXIsICZtZXNzYWdlLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKKwkJCWlmICh4ZmVyLT5yeF9idWYgJiYgeGZlci0+dHhfYnVmKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKChmbGFncyAmIFNQSV9NQVNURVJfTk9fVFgpICYmIHhmZXItPnR4X2J1ZikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICgoZmxhZ3MgJiBTUElfTUFTVEVSX05PX1JYKSAmJiB4ZmVyLT5yeF9idWYpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwltZXNzYWdlLT5zcGkgPSBzcGk7CisJbWVzc2FnZS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJldHVybiBtYXN0ZXItPnRyYW5zZmVyKHNwaSwgbWVzc2FnZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzcGlfYXN5bmMpOworCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5NWU0NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcwICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL3NwaS9zcGlfaW14LmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU1dBUFAKLSAqCUFuZHJlYSBQYXRlcm5pYW5pIDxhLnBhdGVybmlhbmlAc3dhcHAtZW5nLml0PgotICoKLSAqIEluaXRpYWwgdmVyc2lvbiBpbnNwaXJlZCBieToKLSAqCWxpbnV4LTIuNi4xNy1yYzMtbW0xL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC1kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL3NwaV9pbXguaD4KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFNQSSBSZWdpc3RlcnMgb2Zmc2V0cyBmcm9tIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFNQSV9SWERBVEEJCSgweDAwKQotI2RlZmluZSBTUElfVFhEQVRBCQkoMHgwNCkKLSNkZWZpbmUgU1BJX0NPTlRST0wJCSgweDA4KQotI2RlZmluZSBTUElfSU5UX1NUQVRVUwkJKDB4MEMpCi0jZGVmaW5lIFNQSV9URVNUCQkoMHgxMCkKLSNkZWZpbmUgU1BJX1BFUklPRAkJKDB4MTQpCi0jZGVmaW5lIFNQSV9ETUEJCQkoMHgxOCkKLSNkZWZpbmUgU1BJX1JFU0VUCQkoMHgxQykKLQotLyogU1BJIENvbnRyb2wgUmVnaXN0ZXIgQml0IEZpZWxkcyAmIE1hc2tzICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX0JJVENPVU5UX01BU0sJKDB4RikJCS8qIEJpdCBDb3VudCBNYXNrICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX0JJVENPVU5UKG4pCQkoKChuKSAtIDEpICYgU1BJX0NPTlRST0xfQklUQ09VTlRfTUFTSykKLSNkZWZpbmUgU1BJX0NPTlRST0xfUE9MCQkJKDB4MSA8PCA0KSAgICAgIC8qIENsb2NrIFBvbGFyaXR5IE1hc2sgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfUE9MX0FDVF9ISUdICSgweDAgPDwgNCkgICAgICAvKiBBY3RpdmUgaGlnaCBwb2wuICgwPWlkbGUpICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1BPTF9BQ1RfTE9XCQkoMHgxIDw8IDQpICAgICAgLyogQWN0aXZlIGxvdyBwb2wuICgxPWlkbGUpICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1BIQQkJCSgweDEgPDwgNSkgICAgICAvKiBDbG9jayBQaGFzZSBNYXNrICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1BIQV8wCQkoMHgwIDw8IDUpICAgICAgLyogQ2xvY2sgUGhhc2UgMCAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9QSEFfMQkJKDB4MSA8PCA1KSAgICAgIC8qIENsb2NrIFBoYXNlIDEgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfU1NDVEwJCSgweDEgPDwgNikgICAgICAvKiAvU1MgV2F2ZWZvcm0gU2VsZWN0IE1hc2sgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfU1NDVExfMAkJKDB4MCA8PCA2KSAgICAgIC8qIE1hc3RlcjogL1NTIHN0YXlzIGxvdyBiZXR3ZWVuIFNQSSBidXJzdAotCQkJCQkJCSAgIFNsYXZlOiBSWEZJRk8gYWR2YW5jZWQgYnkgQklUX0NPVU5UICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1NTQ1RMXzEJCSgweDEgPDwgNikgICAgICAvKiBNYXN0ZXI6IC9TUyBpbnNlcnQgcHVsc2UgYmV0d2VlbiBTUEkgYnVyc3QKLQkJCQkJCQkgICBTbGF2ZTogUlhGSUZPIGFkdmFuY2VkIGJ5IC9TUyByaXNpbmcgZWRnZSAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9TU1BPTAkJKDB4MSA8PCA3KSAgICAgIC8qIC9TUyBQb2xhcml0eSBTZWxlY3QgTWFzayAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9TU1BPTF9BQ1RfTE9XCSgweDAgPDwgNykgICAgICAvKiAvU1MgQWN0aXZlIGxvdyAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9TU1BPTF9BQ1RfSElHSAkoMHgxIDw8IDcpICAgICAgLyogL1NTIEFjdGl2ZSBoaWdoICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1hDSAkJCSgweDEgPDwgOCkgICAgICAvKiBFeGNoYW5nZSAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9TUElFTgkJKDB4MSA8PCA5KSAgICAgIC8qIFNQSSBNb2R1bGUgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX01PREUJCSgweDEgPDwgMTApICAgICAvKiBTUEkgTW9kZSBTZWxlY3QgTWFzayAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9NT0RFX1NMQVZFCQkoMHgwIDw8IDEwKSAgICAgLyogU1BJIE1vZGUgU2xhdmUgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfTU9ERV9NQVNURVIJCSgweDEgPDwgMTApICAgICAvKiBTUEkgTW9kZSBNYXN0ZXIgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfRFJDVEwJCSgweDMgPDwgMTEpICAgICAvKiAvU1BJX1JEWSBDb250cm9sIE1hc2sgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfRFJDVExfMAkJKDB4MCA8PCAxMSkgICAgIC8qIElnbm9yZSAvU1BJX1JEWSAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9EUkNUTF8xCQkoMHgxIDw8IDExKSAgICAgLyogL1NQSV9SRFkgZmFsbGluZyBlZGdlIHRyaWdnZXJzIGlucHV0ICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX0RSQ1RMXzIJCSgweDIgPDwgMTEpICAgICAvKiAvU1BJX1JEWSBhY3RpdmUgbG93IGxldmVsIHRyaWdnZXJzIGlucHV0ICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX0RBVEFSQVRFCQkoMHg3IDw8IDEzKSAgICAgLyogRGF0YSBSYXRlIE1hc2sgKi8KLSNkZWZpbmUgU1BJX1BFUkNMSzJfRElWX01JTgkJKDApCQkvKiBQRVJDTEsyOjQgKi8KLSNkZWZpbmUgU1BJX1BFUkNMSzJfRElWX01BWAkJKDcpCQkvKiBQRVJDTEsyOjUxMiAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9EQVRBUkFURV9NSU4JKFNQSV9QRVJDTEsyX0RJVl9NQVggPDwgMTMpCi0jZGVmaW5lIFNQSV9DT05UUk9MX0RBVEFSQVRFX01BWAkoU1BJX1BFUkNMSzJfRElWX01JTiA8PCAxMykKLSNkZWZpbmUgU1BJX0NPTlRST0xfREFUQVJBVEVfQkFECShTUElfQ09OVFJPTF9EQVRBUkFURV9NSU4gKyAxKQotCi0vKiBTUEkgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciBCaXQgRmllbGRzICYgTWFza3MgKi8KLSNkZWZpbmUgU1BJX1NUQVRVU19URQkoMHgxIDw8IDApCS8qIFRYRklGTyBFbXB0eSBTdGF0dXMgKi8KLSNkZWZpbmUgU1BJX1NUQVRVU19USAkoMHgxIDw8IDEpICAgICAgLyogVFhGSUZPIEhhbGYgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9TVEFUVVNfVEYJKDB4MSA8PCAyKSAgICAgIC8qIFRYRklGTyBGdWxsIFN0YXR1cyAqLwotI2RlZmluZSBTUElfU1RBVFVTX1JSCSgweDEgPDwgMykgICAgICAvKiBSWEZJRk8gRGF0YSBSZWFkeSBTdGF0dXMgKi8KLSNkZWZpbmUgU1BJX1NUQVRVU19SSAkoMHgxIDw8IDQpICAgICAgLyogUlhGSUZPIEhhbGYgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9TVEFUVVNfUkYJKDB4MSA8PCA1KSAgICAgIC8qIFJYRklGTyBGdWxsIFN0YXR1cyAqLwotI2RlZmluZSBTUElfU1RBVFVTX1JPCSgweDEgPDwgNikgICAgICAvKiBSWEZJRk8gT3ZlcmZsb3cgKi8KLSNkZWZpbmUgU1BJX1NUQVRVU19CTwkoMHgxIDw8IDcpICAgICAgLyogQml0IENvdW50IE92ZXJmbG93ICovCi0jZGVmaW5lIFNQSV9TVEFUVVMJKDB4RkYpCQkvKiBTUEkgU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgU1BJX0lOVEVOX1RFCSgweDEgPDwgOCkgICAgICAvKiBUWEZJRk8gRW1wdHkgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfSU5URU5fVEgJKDB4MSA8PCA5KSAgICAgIC8qIFRYRklGTyBIYWxmIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgU1BJX0lOVEVOX1RGCSgweDEgPDwgMTApICAgICAvKiBUWEZJRk8gRnVsbCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9JTlRFTl9SRQkoMHgxIDw8IDExKSAgICAgLyogUlhGSUZPIERhdGEgUmVhZHkgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfSU5URU5fUkgJKDB4MSA8PCAxMikgICAgIC8qIFJYRklGTyBIYWxmIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgU1BJX0lOVEVOX1JGCSgweDEgPDwgMTMpICAgICAvKiBSWEZJRk8gRnVsbCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9JTlRFTl9STwkoMHgxIDw8IDE0KSAgICAgLyogUlhGSUZPIE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgU1BJX0lOVEVOX0JPCSgweDEgPDwgMTUpICAgICAvKiBCaXQgQ291bnQgT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfSU5URU4JKDB4RkYgPDwgOCkJLyogU1BJIEludGVycnVwdCBFbmFibGUgTWFzayAqLwotCi0vKiBTUEkgVGVzdCBSZWdpc3RlciBCaXQgRmllbGRzICYgTWFza3MgKi8KLSNkZWZpbmUgU1BJX1RFU1RfVFhDTlQJCSgweEYgPDwgMCkJLyogVFhGSUZPIENvdW50ZXIgKi8KLSNkZWZpbmUgU1BJX1RFU1RfUlhDTlRfTFNCCSg0KQkJLyogUlhGSUZPIENvdW50ZXIgTFNCICovCi0jZGVmaW5lIFNQSV9URVNUX1JYQ05UCQkoMHhGIDw8IDQpCS8qIFJYRklGTyBDb3VudGVyICovCi0jZGVmaW5lIFNQSV9URVNUX1NTVEFUVVMJKDB4RiA8PCA4KQkvKiBTdGF0ZSBNYWNoaW5lIFN0YXR1cyAqLwotI2RlZmluZSBTUElfVEVTVF9MQkMJCSgweDEgPDwgMTQpCS8qIExvb3AgQmFjayBDb250cm9sICovCi0KLS8qIFNQSSBQZXJpb2QgUmVnaXN0ZXIgQml0IEZpZWxkcyAmIE1hc2tzICovCi0jZGVmaW5lIFNQSV9QRVJJT0RfV0FJVAkJKDB4N0ZGRiA8PCAwKQkvKiBXYWl0IEJldHdlZW4gVHJhbnNhY3Rpb25zICovCi0jZGVmaW5lIFNQSV9QRVJJT0RfTUFYX1dBSVQJKDB4N0ZGRikJLyogTWF4IFdhaXQgQmV0d2VlbgotCQkJCQkJCVRyYW5zYWN0aW9ucyAqLwotI2RlZmluZSBTUElfUEVSSU9EX0NTUkMJCSgweDEgPDwgMTUpCS8qIFBlcmlvZCBDbG9jayBTb3VyY2UgTWFzayAqLwotI2RlZmluZSBTUElfUEVSSU9EX0NTUkNfQkNMSwkoMHgwIDw8IDE1KQkvKiBQZXJpb2QgQ2xvY2sgU291cmNlIGlzCi0JCQkJCQkJQml0IENsb2NrICovCi0jZGVmaW5lIFNQSV9QRVJJT0RfQ1NSQ18zMjc2OAkoMHgxIDw8IDE1KQkvKiBQZXJpb2QgQ2xvY2sgU291cmNlIGlzCi0JCQkJCQkJMzIuNzY4IEtIeiBDbG9jayAqLwotCi0vKiBTUEkgRE1BIFJlZ2lzdGVyIEJpdCBGaWVsZHMgJiBNYXNrcyAqLwotI2RlZmluZSBTUElfRE1BX1JIRE1BCSgweDEgPDwgNCkJLyogUlhGSUZPIEhhbGYgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9ETUFfUkZETUEJKDB4MSA8PCA1KSAgICAgIC8qIFJYRklGTyBGdWxsIFN0YXR1cyAqLwotI2RlZmluZSBTUElfRE1BX1RFRE1BCSgweDEgPDwgNikgICAgICAvKiBUWEZJRk8gRW1wdHkgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9ETUFfVEhETUEJKDB4MSA8PCA3KSAgICAgIC8qIFRYRklGTyBIYWxmIFN0YXR1cyAqLwotI2RlZmluZSBTUElfRE1BX1JIREVOCSgweDEgPDwgMTIpCS8qIFJYRklGTyBIYWxmIERNQSBSZXF1ZXN0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfRE1BX1JGREVOCSgweDEgPDwgMTMpICAgICAvKiBSWEZJRk8gRnVsbCBETUEgUmVxdWVzdCBFbmFibGUgKi8KLSNkZWZpbmUgU1BJX0RNQV9URURFTgkoMHgxIDw8IDE0KSAgICAgLyogVFhGSUZPIEVtcHR5IERNQSBSZXF1ZXN0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfRE1BX1RIREVOCSgweDEgPDwgMTUpICAgICAvKiBUWEZJRk8gSGFsZiBETUEgUmVxdWVzdCBFbmFibGUgKi8KLQotLyogU1BJIFNvZnQgUmVzZXQgUmVnaXN0ZXIgQml0IEZpZWxkcyAmIE1hc2tzICovCi0jZGVmaW5lIFNQSV9SRVNFVF9TVEFSVAkoMHgxKQkJLyogU3RhcnQgKi8KLQotLyogRGVmYXVsdCBTUEkgY29uZmlndXJhdGlvbiB2YWx1ZXMgKi8KLSNkZWZpbmUgU1BJX0RFRkFVTFRfQ09OVFJPTAkJXAotKAkJCQkJXAotCVNQSV9DT05UUk9MX0JJVENPVU5UKDE2KSB8IAlcCi0JU1BJX0NPTlRST0xfUE9MX0FDVF9ISUdIIHwJXAotCVNQSV9DT05UUk9MX1BIQV8wIHwJCVwKLQlTUElfQ09OVFJPTF9TUElFTiB8CQlcCi0JU1BJX0NPTlRST0xfU1NDVExfMSB8CQlcCi0JU1BJX0NPTlRST0xfTU9ERV9NQVNURVIgfAlcCi0JU1BJX0NPTlRST0xfRFJDVExfMCB8CQlcCi0JU1BJX0NPTlRST0xfREFUQVJBVEVfTUlOCVwKLSkKLSNkZWZpbmUgU1BJX0RFRkFVTFRfRU5BQkxFX0xPT1BCQUNLCSgwKQotI2RlZmluZSBTUElfREVGQVVMVF9FTkFCTEVfRE1BCQkoMCkKLSNkZWZpbmUgU1BJX0RFRkFVTFRfUEVSSU9EX1dBSVQJCSg4KQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVFgvUlggU1BJIEZJRk8gc2l6ZSAqLwotI2RlZmluZSBTUElfRklGT19ERVBUSAkJCSg4KQotI2RlZmluZSBTUElfRklGT19CWVRFX1dJRFRICQkoMikKLSNkZWZpbmUgU1BJX0ZJRk9fT1ZFUkZMT1dfTUFSR0lOCSgyKQotCi0vKiBETUEgYnVyc3QgbGVuZ3RoIGZvciBoYWxmIGZ1bGwvZW1wdHkgcmVxdWVzdCB0cmlnZ2VyICovCi0jZGVmaW5lIFNQSV9ETUFfQkxSCQkJKFNQSV9GSUZPX0RFUFRIICogU1BJX0ZJRk9fQllURV9XSURUSCAvIDIpCi0KLS8qIER1bW15IGNoYXIgb3V0cHV0IHRvIGFjaGlldmUgcmVhZHMuCi0gICBDaG9vc2luZyBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gYWxsIHplcm9lcyBtYXkgaGVscCBwYXR0ZXJuIHJlY29naXRpb24KLSAgIGZvciBvc2NpbGxvc2NvcGUgYW5hbHlzaXMsIGJ1dCBtYXkgYnJlYWsgc29tZSBkcml2ZXJzLiAqLwotI2RlZmluZSBTUElfRFVNTVlfdTgJCQkwCi0jZGVmaW5lIFNQSV9EVU1NWV91MTYJCQkoKFNQSV9EVU1NWV91OCA8PCA4KSB8IFNQSV9EVU1NWV91OCkKLSNkZWZpbmUgU1BJX0RVTU1ZX3UzMgkJCSgoU1BJX0RVTU1ZX3UxNiA8PCAxNikgfCBTUElfRFVNTVlfdTE2KQotCi0vKioKLSAqIE1hY3JvIHRvIGNoYW5nZSBhIHUzMiBmaWVsZDoKLSAqIEByIDogcmVnaXN0ZXIgdG8gZWRpdAotICogQG0gOiBiaXQgbWFzawotICogQHYgOiBuZXcgdmFsdWUgZm9yIHRoZSBmaWVsZCBjb3JyZWN0bHkgYml0LWFsbGlnbmVkCi0qLwotI2RlZmluZSB1MzJfRURJVChyLCBtLCB2KQkJciA9IChyICYgfihtKSkgfCAodikKLQotLyogTWVzc2FnZSBzdGF0ZSAqLwotI2RlZmluZSBTVEFSVF9TVEFURQkJCSgodm9pZCopMCkKLSNkZWZpbmUgUlVOTklOR19TVEFURQkJCSgodm9pZCopMSkKLSNkZWZpbmUgRE9ORV9TVEFURQkJCSgodm9pZCopMikKLSNkZWZpbmUgRVJST1JfU1RBVEUJCQkoKHZvaWQqKS0xKQotCi0vKiBRdWV1ZSBzdGF0ZSAqLwotI2RlZmluZSBRVUVVRV9SVU5OSU5HCQkJKDApCi0jZGVmaW5lIFFVRVVFX1NUT1BQRUQJCQkoMSkKLQotI2RlZmluZSBJU19ETUFfQUxJR05FRCh4KSAJCSgoKHUzMikoeCkgJiAweDAzKSA9PSAwKQotI2RlZmluZSBETUFfQUxJR05NRU5UCQkJNAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogRHJpdmVyIGRhdGEgc3RydWN0cyAqLwotCi0vKiBDb250ZXh0ICovCi1zdHJ1Y3QgZHJpdmVyX2RhdGEgewotCS8qIERyaXZlciBtb2RlbCBob29rdXAgKi8KLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyogU1BJIGZyYW1ld29yayBob29rdXAgKi8KLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCi0JLyogSU1YIGhvb2t1cCAqLwotCXN0cnVjdCBzcGlfaW14X21hc3RlciAqbWFzdGVyX2luZm87Ci0KLQkvKiBNZW1vcnkgcmVzb3VyY2VzIGFuZCBTUEkgcmVncyB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlzdHJ1Y3QgcmVzb3VyY2UgKmlvYXJlYTsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7Ci0KLQkvKiBTUEkgUlhfREFUQSBwaHlzaWNhbCBhZGRyZXNzICovCi0JZG1hX2FkZHJfdCByZF9kYXRhX3BoeXM7Ci0KLQkvKiBEcml2ZXIgbWVzc2FnZSBxdWV1ZSAqLwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcXVldWU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7Ci0JaW50IGJ1c3k7Ci0JaW50IHJ1bjsKLQotCS8qIE1lc3NhZ2UgVHJhbnNmZXIgcHVtcCAqLwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBwdW1wX3RyYW5zZmVyczsKLQotCS8qIEN1cnJlbnQgbWVzc2FnZSwgdHJhbnNmZXIgYW5kIHN0YXRlICovCi0Jc3RydWN0IHNwaV9tZXNzYWdlICpjdXJfbXNnOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgKmN1cl90cmFuc2ZlcjsKLQlzdHJ1Y3QgY2hpcF9kYXRhICpjdXJfY2hpcDsKLQotCS8qIFJkIC8gV3IgYnVmZmVycyBwb2ludGVycyAqLwotCXNpemVfdCBsZW47Ci0Jdm9pZCAqdHg7Ci0Jdm9pZCAqdHhfZW5kOwotCXZvaWQgKnJ4OwotCXZvaWQgKnJ4X2VuZDsKLQotCXU4IHJkX29ubHk7Ci0JdTggbl9ieXRlczsKLQlpbnQgY3NfY2hhbmdlOwotCi0JLyogRnVuY3Rpb24gcG9pbnRlcnMgKi8KLQlpcnFyZXR1cm5fdCAoKnRyYW5zZmVyX2hhbmRsZXIpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOwotCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Ci0KLQkvKiBETUEgc2V0dXAgKi8KLQlpbnQgcnhfY2hhbm5lbDsKLQlpbnQgdHhfY2hhbm5lbDsKLQlkbWFfYWRkcl90IHJ4X2RtYTsKLQlkbWFfYWRkcl90IHR4X2RtYTsKLQlpbnQgcnhfZG1hX25lZWRzX3VubWFwOwotCWludCB0eF9kbWFfbmVlZHNfdW5tYXA7Ci0Jc2l6ZV90IHR4X21hcF9sZW47Ci0JdTMyIGR1bW15X2RtYV9idWYgX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCi0Jc3RydWN0IGNsayAqY2xrOwotfTsKLQotLyogUnVudGltZSBzdGF0ZSAqLwotc3RydWN0IGNoaXBfZGF0YSB7Ci0JdTMyIGNvbnRyb2w7Ci0JdTMyIHBlcmlvZDsKLQl1MzIgdGVzdDsKLQotCXU4IGVuYWJsZV9kbWE6MTsKLQl1OCBiaXRzX3Blcl93b3JkOwotCXU4IG5fYnl0ZXM7Ci0JdTMyIG1heF9zcGVlZF9oejsKLQotCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Ci19OwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi1zdGF0aWMgdm9pZCBwdW1wX21lc3NhZ2VzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXN0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0JdTMyIGNvbnRyb2w7Ci0KLQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiZmx1c2hcbiIpOwotCi0JLyogV2FpdCBmb3IgZW5kIG9mIHRyYW5zYWN0aW9uICovCi0JZG8gewotCQljb250cm9sID0gcmVhZGwocmVncyArIFNQSV9DT05UUk9MKTsKLQl9IHdoaWxlIChjb250cm9sICYgU1BJX0NPTlRST0xfWENIKTsKLQotCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCi0JICAgaGFuZGxlZCBpbiBwdW1wX3RyYW5zZmVycyAqLwotCWlmIChkcnZfZGF0YS0+Y3NfY2hhbmdlKQotCQlkcnZfZGF0YS0+Y3NfY29udHJvbChTUElfQ1NfREVBU1NFUlQpOwotCi0JLyogRGlzYWJsZSBTUEkgdG8gZmx1c2ggRklGT3MgKi8KLQl3cml0ZWwoY29udHJvbCAmIH5TUElfQ09OVFJPTF9TUElFTiwgcmVncyArIFNQSV9DT05UUk9MKTsKLQl3cml0ZWwoY29udHJvbCwgcmVncyArIFNQSV9DT05UUk9MKTsKLX0KLQotc3RhdGljIHZvaWQgcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IGRydl9kYXRhLT5yZWdzOwotCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7Ci0KLQkvKiBMb2FkIGNoaXAgcmVnaXN0ZXJzICovCi0JZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJInJlc3RvcmVfc3RhdGVcbiIKLQkJIiAgICB0ZXN0ICAgID0gMHglMDhYXG4iCi0JCSIgICAgY29udHJvbCA9IDB4JTA4WFxuIiwKLQkJY2hpcC0+dGVzdCwKLQkJY2hpcC0+Y29udHJvbCk7Ci0Jd3JpdGVsKGNoaXAtPnRlc3QsIHJlZ3MgKyBTUElfVEVTVCk7Ci0Jd3JpdGVsKGNoaXAtPnBlcmlvZCwgcmVncyArIFNQSV9QRVJJT0QpOwotCXdyaXRlbCgwLCByZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCXdyaXRlbChjaGlwLT5jb250cm9sLCByZWdzICsgU1BJX0NPTlRST0wpOwotfQotCi1zdGF0aWMgdm9pZCBudWxsX2NzX2NvbnRyb2wodTMyIGNvbW1hbmQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGRhdGFfdG9fd3JpdGUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQlyZXR1cm4gKCh1MzIpKGRydl9kYXRhLT50eF9lbmQgLSBkcnZfZGF0YS0+dHgpKSAvIGRydl9kYXRhLT5uX2J5dGVzOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBkYXRhX3RvX3JlYWQoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQlyZXR1cm4gKCh1MzIpKGRydl9kYXRhLT5yeF9lbmQgLSBkcnZfZGF0YS0+cngpKSAvIGRydl9kYXRhLT5uX2J5dGVzOwotfQotCi1zdGF0aWMgaW50IHdyaXRlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0Jdm9pZCAqdHggPSBkcnZfZGF0YS0+dHg7Ci0Jdm9pZCAqdHhfZW5kID0gZHJ2X2RhdGEtPnR4X2VuZDsKLQl1OCBuX2J5dGVzID0gZHJ2X2RhdGEtPm5fYnl0ZXM7Ci0JdTMyIHJlbWFpbmluZ193cml0ZXM7Ci0JdTMyIGZpZm9fYXZhaWxfc3BhY2U7Ci0JdTMyIG47Ci0JdTE2IGQ7Ci0KLQkvKiBDb21wdXRlIGhvdyBtYW55IGZpZm8gd3JpdGVzIHRvIGRvICovCi0JcmVtYWluaW5nX3dyaXRlcyA9ICh1MzIpKHR4X2VuZCAtIHR4KSAvIG5fYnl0ZXM7Ci0JZmlmb19hdmFpbF9zcGFjZSA9IFNQSV9GSUZPX0RFUFRIIC0KLQkJCQkocmVhZGwocmVncyArIFNQSV9URVNUKSAmIFNQSV9URVNUX1RYQ05UKTsKLQlpZiAoZHJ2X2RhdGEtPnJ4ICYmIChmaWZvX2F2YWlsX3NwYWNlID4gU1BJX0ZJRk9fT1ZFUkZMT1dfTUFSR0lOKSkKLQkJLyogRml4IG1pc3VuZGVyc3Rvb2QgcmVjZWl2ZSBvdmVyZmxvdyAqLwotCQlmaWZvX2F2YWlsX3NwYWNlIC09IFNQSV9GSUZPX09WRVJGTE9XX01BUkdJTjsKLQluID0gbWluKHJlbWFpbmluZ193cml0ZXMsIGZpZm9fYXZhaWxfc3BhY2UpOwotCi0JZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJIndyaXRlIHR5cGUgJXNcbiIKLQkJIiAgICByZW1haW5pbmcgd3JpdGVzID0gJWRcbiIKLQkJIiAgICBmaWZvIGF2YWlsIHNwYWNlID0gJWRcbiIKLQkJIiAgICBmaWZvIHdyaXRlcyAgICAgID0gJWRcbiIsCi0JCShuX2J5dGVzID09IDEpID8gInU4IiA6ICJ1MTYiLAotCQlyZW1haW5pbmdfd3JpdGVzLAotCQlmaWZvX2F2YWlsX3NwYWNlLAotCQluKTsKLQotCWlmIChuID4gMCkgewotCQkvKiBGaWxsIFNQSSBUWEZJRk8gKi8KLQkJaWYgKGRydl9kYXRhLT5yZF9vbmx5KSB7Ci0JCQl0eCArPSBuICogbl9ieXRlczsKLQkJCXdoaWxlIChuLS0pCi0JCQkJd3JpdGVsKFNQSV9EVU1NWV91MTYsIHJlZ3MgKyBTUElfVFhEQVRBKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChuX2J5dGVzID09IDEpIHsKLQkJCQl3aGlsZSAobi0tKSB7Ci0JCQkJCWQgPSAqKHU4Kil0eDsKLQkJCQkJd3JpdGVsKGQsIHJlZ3MgKyBTUElfVFhEQVRBKTsKLQkJCQkJdHggKz0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXdoaWxlIChuLS0pIHsKLQkJCQkJZCA9ICoodTE2Kil0eDsKLQkJCQkJd3JpdGVsKGQsIHJlZ3MgKyBTUElfVFhEQVRBKTsKLQkJCQkJdHggKz0gMjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvKiBUcmlnZ2VyIHRyYW5zZmVyICovCi0JCXdyaXRlbChyZWFkbChyZWdzICsgU1BJX0NPTlRST0wpIHwgU1BJX0NPTlRST0xfWENILAotCQkJcmVncyArIFNQSV9DT05UUk9MKTsKLQotCQkvKiBVcGRhdGUgdHggcG9pbnRlciAqLwotCQlkcnZfZGF0YS0+dHggPSB0eDsKLQl9Ci0KLQlyZXR1cm4gKHR4ID49IHR4X2VuZCk7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IGRydl9kYXRhLT5yZWdzOwotCXZvaWQgKnJ4ID0gZHJ2X2RhdGEtPnJ4OwotCXZvaWQgKnJ4X2VuZCA9IGRydl9kYXRhLT5yeF9lbmQ7Ci0JdTggbl9ieXRlcyA9IGRydl9kYXRhLT5uX2J5dGVzOwotCXUzMiByZW1haW5pbmdfcmVhZHM7Ci0JdTMyIGZpZm9fcnhjbnQ7Ci0JdTMyIG47Ci0JdTE2IGQ7Ci0KLQkvKiBDb21wdXRlIGhvdyBtYW55IGZpZm8gcmVhZHMgdG8gZG8gKi8KLQlyZW1haW5pbmdfcmVhZHMgPSAodTMyKShyeF9lbmQgLSByeCkgLyBuX2J5dGVzOwotCWZpZm9fcnhjbnQgPSAocmVhZGwocmVncyArIFNQSV9URVNUKSAmIFNQSV9URVNUX1JYQ05UKSA+PgotCQkJU1BJX1RFU1RfUlhDTlRfTFNCOwotCW4gPSBtaW4ocmVtYWluaW5nX3JlYWRzLCBmaWZvX3J4Y250KTsKLQotCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCSJyZWFkIHR5cGUgJXNcbiIKLQkJIiAgICByZW1haW5pbmcgcmVhZHMgPSAlZFxuIgotCQkiICAgIGZpZm8gcnggY291bnQgICA9ICVkXG4iCi0JCSIgICAgZmlmbyByZWFkcyAgICAgID0gJWRcbiIsCi0JCShuX2J5dGVzID09IDEpID8gInU4IiA6ICJ1MTYiLAotCQlyZW1haW5pbmdfcmVhZHMsCi0JCWZpZm9fcnhjbnQsCi0JCW4pOwotCi0JaWYgKG4gPiAwKSB7Ci0JCS8qIFJlYWQgU1BJIFJYRklGTyAqLwotCQlpZiAobl9ieXRlcyA9PSAxKSB7Ci0JCQl3aGlsZSAobi0tKSB7Ci0JCQkJZCA9IHJlYWRsKHJlZ3MgKyBTUElfUlhEQVRBKTsKLQkJCQkqKCh1OCopcngpID0gZDsKLQkJCQlyeCArPSAxOwotCQkJfQotCQl9IGVsc2UgewotCQkJd2hpbGUgKG4tLSkgewotCQkJCWQgPSByZWFkbChyZWdzICsgU1BJX1JYREFUQSk7Ci0JCQkJKigodTE2KilyeCkgPSBkOwotCQkJCXJ4ICs9IDI7Ci0JCQl9Ci0JCX0KLQotCQkvKiBVcGRhdGUgcnggcG9pbnRlciAqLwotCQlkcnZfZGF0YS0+cnggPSByeDsKLQl9Ci0KLQlyZXR1cm4gKHJ4ID49IHJ4X2VuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkICpuZXh0X3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFucyA9IGRydl9kYXRhLT5jdXJfdHJhbnNmZXI7Ci0KLQkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KLQlpZiAodHJhbnMtPnRyYW5zZmVyX2xpc3QubmV4dCAhPSAmbXNnLT50cmFuc2ZlcnMpIHsKLQkJZHJ2X2RhdGEtPmN1cl90cmFuc2ZlciA9Ci0JCQlsaXN0X2VudHJ5KHRyYW5zLT50cmFuc2Zlcl9saXN0Lm5leHQsCi0JCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIsCi0JCQkJCXRyYW5zZmVyX2xpc3QpOwotCQlyZXR1cm4gUlVOTklOR19TVEFURTsKLQl9Ci0KLQlyZXR1cm4gRE9ORV9TVEFURTsKLX0KLQotc3RhdGljIGludCBtYXBfZG1hX2J1ZmZlcnMoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZzsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jdm9pZCAqYnVmOwotCi0JZHJ2X2RhdGEtPnJ4X2RtYV9uZWVkc191bm1hcCA9IDA7Ci0JZHJ2X2RhdGEtPnR4X2RtYV9uZWVkc191bm1hcCA9IDA7Ci0KLQlpZiAoIWRydl9kYXRhLT5tYXN0ZXJfaW5mby0+ZW5hYmxlX2RtYSB8fAotCQkhZHJ2X2RhdGEtPmN1cl9jaGlwLT5lbmFibGVfZG1hKQotCQkJcmV0dXJuIC0xOwotCi0JbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0JZGV2ID0gJm1zZy0+c3BpLT5kZXY7Ci0JaWYgKG1zZy0+aXNfZG1hX21hcHBlZCkgewotCQlpZiAoZHJ2X2RhdGEtPnR4X2RtYSkKLQkJCS8qIFRoZSBjYWxsZXIgcHJvdmlkZWQgYXQgbGVhc3QgZG1hIGFuZCBjcHUgdmlydHVhbAotCQkJICAgYWRkcmVzcyBmb3Igd3JpdGU7IHB1bXBfdHJhbnNmZXJzKCkgd2lsbCBjb25zaWRlciB0aGUKLQkJCSAgIHRyYW5zZmVyIGFzIHdyaXRlIG9ubHkgaWYgY3B1IHJ4IHZpcnR1YWwgYWRkcmVzcyBpcwotCQkJICAgTlVMTCAqLwotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKGRydl9kYXRhLT5yeF9kbWEpIHsKLQkJCS8qIFRoZSBjYWxsZXIgcHJvdmlkZWQgZG1hIGFuZCBjcHUgdmlydHVhbCBhZGRyZXNzIHRvCi0JCQkgICBwZXJmb3JtZSByZWFkIG9ubHkgdHJhbnNmZXIgLS0+Ci0JCQkgICB1c2UgZHJ2X2RhdGEtPmR1bW15X2RtYV9idWYgZm9yIGR1bW15IHdyaXRlcyB0bwotCQkJICAgYWNoaXZlIHJlYWRzICovCi0JCQlidWYgPSAmZHJ2X2RhdGEtPmR1bW15X2RtYV9idWY7Ci0JCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiA9IHNpemVvZihkcnZfZGF0YS0+ZHVtbXlfZG1hX2J1Zik7Ci0JCQlkcnZfZGF0YS0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LAotCQkJCQkJCWJ1ZiwKLQkJCQkJCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiwKLQkJCQkJCQlETUFfVE9fREVWSUNFKTsKLQkJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRydl9kYXRhLT50eF9kbWEpKQotCQkJCXJldHVybiAtMTsKLQotCQkJZHJ2X2RhdGEtPnR4X2RtYV9uZWVkc191bm1hcCA9IDE7Ci0KLQkJCS8qIEZsYWdzIHRyYW5zZmVyIGFzIHJkX29ubHkgZm9yIHB1bXBfdHJhbnNmZXJzKCkgRE1BCi0JCQkgICByZWdzIHByb2dyYW1taW5nIChzaG91bGQgYmUgcmVkdW5kYW50KSAqLwotCQkJZHJ2X2RhdGEtPnR4ID0gTlVMTDsKLQotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoIUlTX0RNQV9BTElHTkVEKGRydl9kYXRhLT5yeCkgfHwgIUlTX0RNQV9BTElHTkVEKGRydl9kYXRhLT50eCkpCi0JCXJldHVybiAtMTsKLQotCWlmIChkcnZfZGF0YS0+dHggPT0gTlVMTCkgewotCQkvKiBSZWFkIG9ubHkgbWVzc2FnZSAtLT4gdXNlIGRydl9kYXRhLT5kdW1teV9kbWFfYnVmIGZvciBkdW1teQotCQkgICB3cml0ZXMgdG8gYWNoaXZlIHJlYWRzICovCi0JCWJ1ZiA9ICZkcnZfZGF0YS0+ZHVtbXlfZG1hX2J1ZjsKLQkJZHJ2X2RhdGEtPnR4X21hcF9sZW4gPSBzaXplb2YoZHJ2X2RhdGEtPmR1bW15X2RtYV9idWYpOwotCX0gZWxzZSB7Ci0JCWJ1ZiA9IGRydl9kYXRhLT50eDsKLQkJZHJ2X2RhdGEtPnR4X21hcF9sZW4gPSBkcnZfZGF0YS0+bGVuOwotCX0KLQlkcnZfZGF0YS0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LAotCQkJCQlidWYsCi0JCQkJCWRydl9kYXRhLT50eF9tYXBfbGVuLAotCQkJCQlETUFfVE9fREVWSUNFKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkcnZfZGF0YS0+dHhfZG1hKSkKLQkJcmV0dXJuIC0xOwotCWRydl9kYXRhLT50eF9kbWFfbmVlZHNfdW5tYXAgPSAxOwotCi0JLyogTlVMTCByeCBtZWFucyB3cml0ZS1vbmx5IHRyYW5zZmVyIGFuZCBubyBtYXAgbmVlZGVkCi0JICogc2luY2UgcnggRE1BIHdpbGwgbm90IGJlIHVzZWQgKi8KLQlpZiAoZHJ2X2RhdGEtPnJ4KSB7Ci0JCWJ1ZiA9IGRydl9kYXRhLT5yeDsKLQkJZHJ2X2RhdGEtPnJ4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKGRldiwKLQkJCQkJCWJ1ZiwKLQkJCQkJCWRydl9kYXRhLT5sZW4sCi0JCQkJCQlETUFfRlJPTV9ERVZJQ0UpOwotCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkcnZfZGF0YS0+cnhfZG1hKSkgewotCQkJaWYgKGRydl9kYXRhLT50eF9kbWEpIHsKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwKLQkJCQkJCWRydl9kYXRhLT50eF9kbWEsCi0JCQkJCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiwKLQkJCQkJCURNQV9UT19ERVZJQ0UpOwotCQkJCWRydl9kYXRhLT50eF9kbWFfbmVlZHNfdW5tYXAgPSAwOwotCQkJfQotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWRydl9kYXRhLT5yeF9kbWFfbmVlZHNfdW5tYXAgPSAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hcF9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJm1zZy0+c3BpLT5kZXY7Ci0KLQlpZiAoZHJ2X2RhdGEtPnJ4X2RtYV9uZWVkc191bm1hcCkgewotCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwKLQkJCQlkcnZfZGF0YS0+cnhfZG1hLAotCQkJCWRydl9kYXRhLT5sZW4sCi0JCQkJRE1BX0ZST01fREVWSUNFKTsKLQkJZHJ2X2RhdGEtPnJ4X2RtYV9uZWVkc191bm1hcCA9IDA7Ci0JfQotCWlmIChkcnZfZGF0YS0+dHhfZG1hX25lZWRzX3VubWFwKSB7Ci0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCWRydl9kYXRhLT50eF9kbWEsCi0JCQkJZHJ2X2RhdGEtPnR4X21hcF9sZW4sCi0JCQkJRE1BX1RPX0RFVklDRSk7Ci0JCWRydl9kYXRhLT50eF9kbWFfbmVlZHNfdW5tYXAgPSAwOwotCX0KLX0KLQotLyogQ2FsbGVyIGFscmVhZHkgc2V0IG1lc3NhZ2UtPnN0YXR1cyAoZG1hIGlzIGFscmVhZHkgYmxvY2tlZCkgKi8KLXN0YXRpYyB2b2lkIGdpdmViYWNrKHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSwgc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBkcnZfZGF0YS0+cmVnczsKLQotCS8qIEJyaW5nIFNQSSB0byBzbGVlcDsgcmVzdG9yZV9zdGF0ZSgpIGFuZCBwdW1wX3RyYW5zZmVyKCkKLQkgICB3aWxsIGRvIG5ldyBzZXR1cCAqLwotCXdyaXRlbCgwLCByZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCXdyaXRlbCgwLCByZWdzICsgU1BJX0RNQSk7Ci0KLQkvKiBVbmNvbmRpdGlvbmVkIGRlc2VsY3QgKi8KLQlkcnZfZGF0YS0+Y3NfY29udHJvbChTUElfQ1NfREVBU1NFUlQpOwotCi0JbWVzc2FnZS0+c3RhdGUgPSBOVUxMOwotCWlmIChtZXNzYWdlLT5jb21wbGV0ZSkKLQkJbWVzc2FnZS0+Y29tcGxldGUobWVzc2FnZS0+Y29udGV4dCk7Ci0KLQlkcnZfZGF0YS0+Y3VyX21zZyA9IE5VTEw7Ci0JZHJ2X2RhdGEtPmN1cl90cmFuc2ZlciA9IE5VTEw7Ci0JZHJ2X2RhdGEtPmN1cl9jaGlwID0gTlVMTDsKLQlxdWV1ZV93b3JrKGRydl9kYXRhLT53b3JrcXVldWUsICZkcnZfZGF0YS0+d29yayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9lcnJfaGFuZGxlcihpbnQgY2hhbm5lbCwgdm9pZCAqZGF0YSwgaW50IGVycmNvZGUpCi17Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRhdGE7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKLQotCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJkbWFfZXJyX2hhbmRsZXJcbiIpOwotCi0JLyogRGlzYWJsZSBib3RoIHJ4IGFuZCB0eCBkbWEgY2hhbm5lbHMgKi8KLQlpbXhfZG1hX2Rpc2FibGUoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpOwotCWlteF9kbWFfZGlzYWJsZShkcnZfZGF0YS0+dHhfY2hhbm5lbCk7Ci0JdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwotCi0JZmx1c2goZHJ2X2RhdGEpOwotCi0JbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOwotCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV90eF9oYW5kbGVyKGludCBjaGFubmVsLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBkYXRhOwotCi0JZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImRtYV90eF9oYW5kbGVyXG4iKTsKLQotCWlteF9kbWFfZGlzYWJsZShjaGFubmVsKTsKLQotCS8qIE5vdyB3YWl0cyBmb3IgVFggRklGTyBlbXB0eSAqLwotCXdyaXRlbChTUElfSU5URU5fVEUsIGRydl9kYXRhLT5yZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG1hX3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0JdTMyIHN0YXR1czsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOwotCXZvaWQgX19pb21lbSAqcmVncyA9IGRydl9kYXRhLT5yZWdzOwotCi0Jc3RhdHVzID0gcmVhZGwocmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQotCWlmICgoc3RhdHVzICYgKFNQSV9JTlRFTl9STyB8IFNQSV9TVEFUVVNfUk8pKQotCQkJPT0gKFNQSV9JTlRFTl9STyB8IFNQSV9TVEFUVVNfUk8pKSB7Ci0JCXdyaXRlbChzdGF0dXMgJiB+U1BJX0lOVEVOLCByZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCi0JCWlteF9kbWFfZGlzYWJsZShkcnZfZGF0YS0+dHhfY2hhbm5lbCk7Ci0JCWlteF9kbWFfZGlzYWJsZShkcnZfZGF0YS0+cnhfY2hhbm5lbCk7Ci0JCXVubWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKTsKLQotCQlmbHVzaChkcnZfZGF0YSk7Ci0KLQkJZGV2X3dhcm4oJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJImRtYV90cmFuc2ZlciAtIGZpZm8gb3ZlcnVuXG4iKTsKLQotCQltc2ctPnN0YXRlID0gRVJST1JfU1RBVEU7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci0KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWlmIChzdGF0dXMgJiBTUElfU1RBVFVTX1RFKSB7Ci0JCXdyaXRlbChzdGF0dXMgJiB+U1BJX0lOVEVOX1RFLCByZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCi0JCWlmIChkcnZfZGF0YS0+cngpIHsKLQkJCS8qIFdhaXQgZW5kIG9mIHRyYW5zZmVyIGJlZm9yZSByZWFkIHRyYWlsaW5nIGRhdGEgKi8KLQkJCXdoaWxlIChyZWFkbChyZWdzICsgU1BJX0NPTlRST0wpICYgU1BJX0NPTlRST0xfWENIKQotCQkJCWNwdV9yZWxheCgpOwotCi0JCQlpbXhfZG1hX2Rpc2FibGUoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpOwotCQkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwotCi0JCQkvKiBSZWxlYXNlIGNoaXAgc2VsZWN0IGlmIHJlcXVlc3RlZCwgdHJhbnNmZXIgZGVsYXlzIGFyZQotCQkJICAgaGFuZGxlZCBpbiBwdW1wX3RyYW5zZmVycygpICovCi0JCQlpZiAoZHJ2X2RhdGEtPmNzX2NoYW5nZSkKLQkJCQlkcnZfZGF0YS0+Y3NfY29udHJvbChTUElfQ1NfREVBU1NFUlQpOwotCi0JCQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIHRyYWlsaW5nIGRhdGEgYW5kIHJlYWQgdGhlbSAqLwotCQkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkiZG1hX3RyYW5zZmVyIC0gdGVzdCA9IDB4JTA4WFxuIiwKLQkJCQlyZWFkbChyZWdzICsgU1BJX1RFU1QpKTsKLQkJCWRydl9kYXRhLT5yeCA9IGRydl9kYXRhLT5yeF9lbmQgLQotCQkJCQkoKHJlYWRsKHJlZ3MgKyBTUElfVEVTVCkgJgotCQkJCQlTUElfVEVTVF9SWENOVCkgPj4KLQkJCQkJU1BJX1RFU1RfUlhDTlRfTFNCKSpkcnZfZGF0YS0+bl9ieXRlczsKLQkJCXJlYWQoZHJ2X2RhdGEpOwotCQl9IGVsc2UgewotCQkJLyogV3JpdGUgb25seSB0cmFuc2ZlciAqLwotCQkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwotCi0JCQlmbHVzaChkcnZfZGF0YSk7Ci0JCX0KLQotCQkvKiBFbmQgb2YgdHJhbnNmZXIsIHVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgKi8KLQkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGRydl9kYXRhLT5sZW47Ci0KLQkJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCi0JCW1zZy0+c3RhdGUgPSBuZXh0X3RyYW5zZmVyKGRydl9kYXRhKTsKLQotCQkvKiBTY2hlZHVsZSB0cmFuc2ZlciB0YXNrbGV0ICovCi0JCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci0KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCS8qIE9wcHMgcHJvYmxlbSBkZXRlY3RlZCAqLwotCXJldHVybiBJUlFfTk9ORTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF93cm9ubHlfdHJhbnNmZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOwotCXZvaWQgX19pb21lbSAqcmVncyA9IGRydl9kYXRhLT5yZWdzOwotCXUzMiBzdGF0dXM7Ci0JaXJxcmV0dXJuX3QgaGFuZGxlZCA9IElSUV9OT05FOwotCi0Jc3RhdHVzID0gcmVhZGwocmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQotCWlmIChzdGF0dXMgJiBTUElfSU5URU5fVEUpIHsKLQkJLyogVFhGSUZPIEVtcHR5IEludGVycnVwdCBvbiB0aGUgbGFzdCB0cmFuc2ZlcmVkIHdvcmQgKi8KLQkJd3JpdGVsKHN0YXR1cyAmIH5TUElfSU5URU4sIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0JCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkiaW50ZXJydXB0X3dyb25seV90cmFuc2ZlciAtIGVuZCBvZiB0eFxuIik7Ci0KLQkJZmx1c2goZHJ2X2RhdGEpOwotCi0JCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgKi8KLQkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGRydl9kYXRhLT5sZW47Ci0KLQkJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCi0JCW1zZy0+c3RhdGUgPSBuZXh0X3RyYW5zZmVyKGRydl9kYXRhKTsKLQotCQkvKiBTY2hlZHVsZSB0cmFuc2ZlciB0YXNrbGV0ICovCi0JCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci0KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChzdGF0dXMgJiBTUElfU1RBVFVTX1RIKSB7Ci0JCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCSJpbnRlcnJ1cHRfd3Jvbmx5X3RyYW5zZmVyIC0gc3RhdHVzID0gMHglMDhYXG4iLAotCQkJCXN0YXR1cyk7Ci0KLQkJCS8qIFB1bXAgZGF0YSAqLwotCQkJaWYgKHdyaXRlKGRydl9kYXRhKSkgewotCQkJCS8qIEVuZCBvZiBUWEZJRk8gd3JpdGVzLAotCQkJCSAgIG5vdyB3YWl0IHVudGlsIFRYRklGTyBpcyBlbXB0eSAqLwotCQkJCXdyaXRlbChTUElfSU5URU5fVEUsIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCi0JCQlzdGF0dXMgPSByZWFkbChyZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCi0JCQkvKiBXZSBkaWQgc29tZXRoaW5nICovCi0JCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gaGFuZGxlZDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF90cmFuc2ZlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0JdTMyIHN0YXR1cywgY29udHJvbDsKLQlpcnFyZXR1cm5fdCBoYW5kbGVkID0gSVJRX05PTkU7Ci0JdW5zaWduZWQgbG9uZyBsaW1pdDsKLQotCXN0YXR1cyA9IHJlYWRsKHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0KLQlpZiAoc3RhdHVzICYgU1BJX0lOVEVOX1RFKSB7Ci0JCS8qIFRYRklGTyBFbXB0eSBJbnRlcnJ1cHQgb24gdGhlIGxhc3QgdHJhbnNmZXJlZCB3b3JkICovCi0JCXdyaXRlbChzdGF0dXMgJiB+U1BJX0lOVEVOLCByZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJImludGVycnVwdF90cmFuc2ZlciAtIGVuZCBvZiB0eFxuIik7Ci0KLQkJaWYgKG1zZy0+c3RhdGUgPT0gRVJST1JfU1RBVEUpIHsKLQkJCS8qIFJYRklGTyBvdmVycnVuIHdhcyBkZXRlY3RlZCBhbmQgbWVzc2FnZSBhYm9ydGVkICovCi0JCQlmbHVzaChkcnZfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBXYWl0IGZvciBlbmQgb2YgdHJhbnNhY3Rpb24gKi8KLQkJCWRvIHsKLQkJCQljb250cm9sID0gcmVhZGwocmVncyArIFNQSV9DT05UUk9MKTsKLQkJCX0gd2hpbGUgKGNvbnRyb2wgJiBTUElfQ09OVFJPTF9YQ0gpOwotCi0JCQkvKiBSZWxlYXNlIGNoaXAgc2VsZWN0IGlmIHJlcXVlc3RlZCwgdHJhbnNmZXIgZGVsYXlzIGFyZQotCQkJICAgaGFuZGxlZCBpbiBwdW1wX3RyYW5zZmVycyAqLwotCQkJaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCi0JCQkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woU1BJX0NTX0RFQVNTRVJUKTsKLQotCQkJLyogUmVhZCB0cmFpbGluZyBieXRlcyAqLwotCQkJbGltaXQgPSBsb29wc19wZXJfamlmZnkgPDwgMTsKLQkJCXdoaWxlICgocmVhZChkcnZfZGF0YSkgPT0gMCkgJiYgLS1saW1pdCkKLQkJCQljcHVfcmVsYXgoKTsKLQotCQkJaWYgKGxpbWl0ID09IDApCi0JCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkJImludGVycnVwdF90cmFuc2ZlciAtICIKLQkJCQkJInRyYWlsaW5nIGJ5dGUgcmVhZCBmYWlsZWRcbiIpOwotCQkJZWxzZQotCQkJCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJCSJpbnRlcnJ1cHRfdHJhbnNmZXIgLSBlbmQgb2YgcnhcbiIpOwotCi0JCQkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkICovCi0JCQltc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbjsKLQotCQkJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCi0JCQltc2ctPnN0YXRlID0gbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7Ci0JCX0KLQotCQkvKiBTY2hlZHVsZSB0cmFuc2ZlciB0YXNrbGV0ICovCi0JCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci0KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChzdGF0dXMgJiAoU1BJX1NUQVRVU19USCB8IFNQSV9TVEFUVVNfUk8pKSB7Ci0JCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCSJpbnRlcnJ1cHRfdHJhbnNmZXIgLSBzdGF0dXMgPSAweCUwOFhcbiIsCi0JCQkJc3RhdHVzKTsKLQotCQkJaWYgKHN0YXR1cyAmIFNQSV9TVEFUVVNfUk8pIHsKLQkJCQkvKiBSWEZJRk8gb3ZlcnJ1biwgYWJvcnQgbWVzc2FnZSBlbmQgd2FpdAotCQkJCSAgIHVudGlsIFRYRklGTyBpcyBlbXB0eSAqLwotCQkJCXdyaXRlbChTUElfSU5URU5fVEUsIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0KLQkJCQlkZXZfd2FybigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkJImludGVycnVwdF90cmFuc2ZlciAtIGZpZm8gb3ZlcnVuXG4iCi0JCQkJCSIgICAgZGF0YSBub3QgeWV0IHdyaXR0ZW4gPSAlZFxuIgotCQkJCQkiICAgIGRhdGEgbm90IHlldCByZWFkICAgID0gJWRcbiIsCi0JCQkJCWRhdGFfdG9fd3JpdGUoZHJ2X2RhdGEpLAotCQkJCQlkYXRhX3RvX3JlYWQoZHJ2X2RhdGEpKTsKLQotCQkJCW1zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKLQotCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJCX0KLQotCQkJLyogUHVtcCBkYXRhICovCi0JCQlyZWFkKGRydl9kYXRhKTsKLQkJCWlmICh3cml0ZShkcnZfZGF0YSkpIHsKLQkJCQkvKiBFbmQgb2YgVFhGSUZPIHdyaXRlcywKLQkJCQkgICBub3cgd2FpdCB1bnRpbCBUWEZJRk8gaXMgZW1wdHkgKi8KLQkJCQl3cml0ZWwoU1BJX0lOVEVOX1RFLCByZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJCX0KLQotCQkJc3RhdHVzID0gcmVhZGwocmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQotCQkJLyogV2UgZGlkIHNvbWV0aGluZyAqLwotCQkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwotCQl9Ci0JfQotCi0JcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzcGlfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gKHN0cnVjdCBkcml2ZXJfZGF0YSAqKWRldl9pZDsKLQotCWlmICghZHJ2X2RhdGEtPmN1cl9tc2cpIHsKLQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCSJzcGlfaW50IC0gYmFkIG1lc3NhZ2Ugc3RhdGVcbiIpOwotCQkvKiBOZXZlciBmYWlsICovCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlyZXR1cm4gZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIoZHJ2X2RhdGEpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBzcGlfc3BlZWRfaHooc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSwgdTMyIGRhdGFfcmF0ZSkKLXsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGRydl9kYXRhLT5jbGspIC8gKDQgPDwgKChkYXRhX3JhdGUpID4+IDEzKSk7Ci19Ci0KLXN0YXRpYyB1MzIgc3BpX2RhdGFfcmF0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhLCB1MzIgc3BlZWRfaHopCi17Ci0JdTMyIGRpdjsKLQl1MzIgcXVhbnRpemVkX2h6ID0gY2xrX2dldF9yYXRlKGRydl9kYXRhLT5jbGspID4+IDI7Ci0KLQlmb3IgKGRpdiA9IFNQSV9QRVJDTEsyX0RJVl9NSU47Ci0JCWRpdiA8PSBTUElfUEVSQ0xLMl9ESVZfTUFYOwotCQlkaXYrKywgcXVhbnRpemVkX2h6ID4+PSAxKSB7Ci0JCQlpZiAocXVhbnRpemVkX2h6IDw9IHNwZWVkX2h6KQotCQkJCS8qIE1heCBhdmFpbGFibGUgc3BlZWQgTEVRIHJlcXVpcmVkIHNwZWVkICovCi0JCQkJcmV0dXJuIGRpdiA8PCAxMzsKLQl9Ci0JcmV0dXJuIFNQSV9DT05UUk9MX0RBVEFSQVRFX0JBRDsKLX0KLQotc3RhdGljIHZvaWQgcHVtcF90cmFuc2ZlcnModW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSAoc3RydWN0IGRyaXZlcl9kYXRhICopZGF0YTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1lc3NhZ2U7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIsICpwcmV2aW91czsKLQlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwOwotCXZvaWQgX19pb21lbSAqcmVnczsKLQl1MzIgdG1wLCBjb250cm9sOwotCi0JZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgInB1bXBfdHJhbnNmZXJcbiIpOwotCi0JbWVzc2FnZSA9IGRydl9kYXRhLT5jdXJfbXNnOwotCi0JLyogSGFuZGxlIGZvciBhYm9ydCAqLwotCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBFUlJPUl9TVEFURSkgewotCQltZXNzYWdlLT5zdGF0dXMgPSAtRUlPOwotCQlnaXZlYmFjayhtZXNzYWdlLCBkcnZfZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBIYW5kbGUgZW5kIG9mIG1lc3NhZ2UgKi8KLQlpZiAobWVzc2FnZS0+c3RhdGUgPT0gRE9ORV9TVEFURSkgewotCQltZXNzYWdlLT5zdGF0dXMgPSAwOwotCQlnaXZlYmFjayhtZXNzYWdlLCBkcnZfZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljaGlwID0gZHJ2X2RhdGEtPmN1cl9jaGlwOwotCi0JLyogRGVsYXkgaWYgcmVxdWVzdGVkIGF0IGVuZCBvZiB0cmFuc2ZlciovCi0JdHJhbnNmZXIgPSBkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyOwotCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBSVU5OSU5HX1NUQVRFKSB7Ci0JCXByZXZpb3VzID0gbGlzdF9lbnRyeSh0cmFuc2Zlci0+dHJhbnNmZXJfbGlzdC5wcmV2LAotCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAotCQkJCQl0cmFuc2Zlcl9saXN0KTsKLQkJaWYgKHByZXZpb3VzLT5kZWxheV91c2VjcykKLQkJCXVkZWxheShwcmV2aW91cy0+ZGVsYXlfdXNlY3MpOwotCX0gZWxzZSB7Ci0JCS8qIFNUQVJUX1NUQVRFICovCi0JCW1lc3NhZ2UtPnN0YXRlID0gUlVOTklOR19TVEFURTsKLQkJZHJ2X2RhdGEtPmNzX2NvbnRyb2wgPSBjaGlwLT5jc19jb250cm9sOwotCX0KLQotCXRyYW5zZmVyID0gZHJ2X2RhdGEtPmN1cl90cmFuc2ZlcjsKLQlkcnZfZGF0YS0+dHggPSAodm9pZCAqKXRyYW5zZmVyLT50eF9idWY7Ci0JZHJ2X2RhdGEtPnR4X2VuZCA9IGRydl9kYXRhLT50eCArIHRyYW5zZmVyLT5sZW47Ci0JZHJ2X2RhdGEtPnJ4ID0gdHJhbnNmZXItPnJ4X2J1ZjsKLQlkcnZfZGF0YS0+cnhfZW5kID0gZHJ2X2RhdGEtPnJ4ICsgdHJhbnNmZXItPmxlbjsKLQlkcnZfZGF0YS0+cnhfZG1hID0gdHJhbnNmZXItPnJ4X2RtYTsKLQlkcnZfZGF0YS0+dHhfZG1hID0gdHJhbnNmZXItPnR4X2RtYTsKLQlkcnZfZGF0YS0+bGVuID0gdHJhbnNmZXItPmxlbjsKLQlkcnZfZGF0YS0+Y3NfY2hhbmdlID0gdHJhbnNmZXItPmNzX2NoYW5nZTsKLQlkcnZfZGF0YS0+cmRfb25seSA9IChkcnZfZGF0YS0+dHggPT0gTlVMTCk7Ci0KLQlyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0JY29udHJvbCA9IHJlYWRsKHJlZ3MgKyBTUElfQ09OVFJPTCk7Ci0KLQkvKiBCaXRzIHBlciB3b3JkIHNldHVwICovCi0JdG1wID0gdHJhbnNmZXItPmJpdHNfcGVyX3dvcmQ7Ci0JaWYgKHRtcCA9PSAwKSB7Ci0JCS8qIFVzZSBkZXZpY2Ugc2V0dXAgKi8KLQkJdG1wID0gY2hpcC0+Yml0c19wZXJfd29yZDsKLQkJZHJ2X2RhdGEtPm5fYnl0ZXMgPSBjaGlwLT5uX2J5dGVzOwotCX0gZWxzZQotCQkvKiBVc2UgcGVyLXRyYW5zZmVyIHNldHVwICovCi0JCWRydl9kYXRhLT5uX2J5dGVzID0gKHRtcCA8PSA4KSA/IDEgOiAyOwotCXUzMl9FRElUKGNvbnRyb2wsIFNQSV9DT05UUk9MX0JJVENPVU5UX01BU0ssIHRtcCAtIDEpOwotCi0JLyogU3BlZWQgc2V0dXAgKHN1cmVseSB2YWxpZCBiZWNhdXNlIGFscmVhZHkgY2hlY2tlZCkgKi8KLQl0bXAgPSB0cmFuc2Zlci0+c3BlZWRfaHo7Ci0JaWYgKHRtcCA9PSAwKQotCQl0bXAgPSBjaGlwLT5tYXhfc3BlZWRfaHo7Ci0JdG1wID0gc3BpX2RhdGFfcmF0ZShkcnZfZGF0YSwgdG1wKTsKLQl1MzJfRURJVChjb250cm9sLCBTUElfQ09OVFJPTF9EQVRBUkFURSwgdG1wKTsKLQotCXdyaXRlbChjb250cm9sLCByZWdzICsgU1BJX0NPTlRST0wpOwotCi0JLyogQXNzZXJ0IGRldmljZSBjaGlwLXNlbGVjdCAqLwotCWRydl9kYXRhLT5jc19jb250cm9sKFNQSV9DU19BU1NFUlQpOwotCi0JLyogRE1BIGNhbm5vdCByZWFkL3dyaXRlIFNQSSBGSUZPcyBvdGhlciB0aGFuIDE2IGJpdHMgYXQgYSB0aW1lOyBoZW5jZQotCSAgIGlmIGJpdHNfcGVyX3dvcmQgaXMgbGVzcyBvciBlcXVhbCA4IFBJTyB0cmFuc2ZlcnMgYXJlIHBlcmZvcm1lZC4KLQkgICBNb3Jlb3ZlciBETUEgaXMgY29udmluaWVudCBmb3IgdHJhbnNmZXIgbGVuZ3RoIGJpZ2dlciB0aGFuIEZJRk9zCi0JICAgYnl0ZSBzaXplLiAqLwotCWlmICgoZHJ2X2RhdGEtPm5fYnl0ZXMgPT0gMikgJiYKLQkJKGRydl9kYXRhLT5sZW4gPiBTUElfRklGT19ERVBUSCpTUElfRklGT19CWVRFX1dJRFRIKSAmJgotCQkobWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKSA9PSAwKSkgewotCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJInB1bXAgZG1hIHRyYW5zZmVyXG4iCi0JCQkiICAgIHR4ICAgICAgPSAlcFxuIgotCQkJIiAgICB0eF9kbWEgID0gJTA4WFxuIgotCQkJIiAgICByeCAgICAgID0gJXBcbiIKLQkJCSIgICAgcnhfZG1hICA9ICUwOFhcbiIKLQkJCSIgICAgbGVuICAgICA9ICVkXG4iLAotCQkJZHJ2X2RhdGEtPnR4LAotCQkJKHVuc2lnbmVkIGludClkcnZfZGF0YS0+dHhfZG1hLAotCQkJZHJ2X2RhdGEtPnJ4LAotCQkJKHVuc2lnbmVkIGludClkcnZfZGF0YS0+cnhfZG1hLAotCQkJZHJ2X2RhdGEtPmxlbik7Ci0KLQkJLyogRW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQkJZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIgPSBkbWFfdHJhbnNmZXI7Ci0KLQkJLyogVHJpZ2dlciB0cmFuc2ZlciAqLwotCQl3cml0ZWwocmVhZGwocmVncyArIFNQSV9DT05UUk9MKSB8IFNQSV9DT05UUk9MX1hDSCwKLQkJCXJlZ3MgKyBTUElfQ09OVFJPTCk7Ci0KLQkJLyogU2V0dXAgdHggRE1BICovCi0JCWlmIChkcnZfZGF0YS0+dHgpCi0JCQkvKiBMaW5lYXIgc291cmNlIGFkZHJlc3MgKi8KLQkJCUNDUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPQotCQkJCUNDUl9ETU9EX0ZJRk8gfAotCQkJCUNDUl9TTU9EX0xJTkVBUiB8Ci0JCQkJQ0NSX1NTSVpfMzIgfCBDQ1JfRFNJWl8xNiB8Ci0JCQkJQ0NSX1JFTjsKLQkJZWxzZQotCQkJLyogUmVhZCBvbmx5IHRyYW5zZmVyIC0+IGZpeGVkIHNvdXJjZSBhZGRyZXNzIGZvcgotCQkJICAgZHVtbXkgd3JpdGUgdG8gYWNoaXZlIHJlYWQgKi8KLQkJCUNDUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPQotCQkJCUNDUl9ETU9EX0ZJRk8gfAotCQkJCUNDUl9TTU9EX0ZJRk8gfAotCQkJCUNDUl9TU0laXzMyIHwgQ0NSX0RTSVpfMTYgfAotCQkJCUNDUl9SRU47Ci0KLQkJaW14X2RtYV9zZXR1cF9zaW5nbGUoCi0JCQlkcnZfZGF0YS0+dHhfY2hhbm5lbCwKLQkJCWRydl9kYXRhLT50eF9kbWEsCi0JCQlkcnZfZGF0YS0+bGVuLAotCQkJZHJ2X2RhdGEtPnJkX2RhdGFfcGh5cyArIDQsCi0JCQlETUFfTU9ERV9XUklURSk7Ci0KLQkJaWYgKGRydl9kYXRhLT5yeCkgewotCQkJLyogU2V0dXAgcnggRE1BIGZvciBsaW5lYXIgZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCQkJQ0NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9Ci0JCQkJQ0NSX0RNT0RfTElORUFSIHwKLQkJCQlDQ1JfU01PRF9GSUZPIHwKLQkJCQlDQ1JfRFNJWl8zMiB8IENDUl9TU0laXzE2IHwKLQkJCQlDQ1JfUkVOOwotCQkJaW14X2RtYV9zZXR1cF9zaW5nbGUoCi0JCQkJZHJ2X2RhdGEtPnJ4X2NoYW5uZWwsCi0JCQkJZHJ2X2RhdGEtPnJ4X2RtYSwKLQkJCQlkcnZfZGF0YS0+bGVuLAotCQkJCWRydl9kYXRhLT5yZF9kYXRhX3BoeXMsCi0JCQkJRE1BX01PREVfUkVBRCk7Ci0JCQlpbXhfZG1hX2VuYWJsZShkcnZfZGF0YS0+cnhfY2hhbm5lbCk7Ci0KLQkJCS8qIEVuYWJsZSBTUEkgaW50ZXJydXB0ICovCi0JCQl3cml0ZWwoU1BJX0lOVEVOX1JPLCByZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCi0JCQkvKiBTZXQgU1BJIHRvIHJlcXVlc3QgRE1BIHNlcnZpY2Ugb24gYm90aAotCQkJICAgUnggYW5kIFR4IGhhbGYgZmlmbyB3YXRlcm1hcmsgKi8KLQkJCXdyaXRlbChTUElfRE1BX1JIREVOIHwgU1BJX0RNQV9USERFTiwgcmVncyArIFNQSV9ETUEpOwotCQl9IGVsc2UKLQkJCS8qIFdyaXRlIG9ubHkgYWNjZXNzIC0+IHNldCBTUEkgdG8gcmVxdWVzdCBETUEKLQkJCSAgIHNlcnZpY2Ugb24gVHggaGFsZiBmaWZvIHdhdGVybWFyayAqLwotCQkJd3JpdGVsKFNQSV9ETUFfVEhERU4sIHJlZ3MgKyBTUElfRE1BKTsKLQotCQlpbXhfZG1hX2VuYWJsZShkcnZfZGF0YS0+dHhfY2hhbm5lbCk7Ci0JfSBlbHNlIHsKLQkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCSJwdW1wIHBpbyB0cmFuc2ZlclxuIgotCQkJIiAgICB0eCAgICAgID0gJXBcbiIKLQkJCSIgICAgcnggICAgICA9ICVwXG4iCi0JCQkiICAgIGxlbiAgICAgPSAlZFxuIiwKLQkJCWRydl9kYXRhLT50eCwKLQkJCWRydl9kYXRhLT5yeCwKLQkJCWRydl9kYXRhLT5sZW4pOwotCi0JCS8qIEVuc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGludGVycnVwdCBoYW5kbGVyCSovCi0JCWlmIChkcnZfZGF0YS0+cngpCi0JCQlkcnZfZGF0YS0+dHJhbnNmZXJfaGFuZGxlciA9IGludGVycnVwdF90cmFuc2ZlcjsKLQkJZWxzZQotCQkJZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIgPSBpbnRlcnJ1cHRfd3Jvbmx5X3RyYW5zZmVyOwotCi0JCS8qIEVuYWJsZSBTUEkgaW50ZXJydXB0ICovCi0JCWlmIChkcnZfZGF0YS0+cngpCi0JCQl3cml0ZWwoU1BJX0lOVEVOX1RIIHwgU1BJX0lOVEVOX1JPLAotCQkJCXJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0JCWVsc2UKLQkJCXdyaXRlbChTUElfSU5URU5fVEgsIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwdW1wX21lc3NhZ2VzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0KLQkJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRyaXZlcl9kYXRhLCB3b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTG9jayBxdWV1ZSBhbmQgY2hlY2sgZm9yIHF1ZXVlIHdvcmsgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSB8fCBkcnZfZGF0YS0+cnVuID09IFFVRVVFX1NUT1BQRUQpIHsKLQkJZHJ2X2RhdGEtPmJ1c3kgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgYWxyZWFkeSBydW5uaW5nIGEgbWVzc2FnZSAqLwotCWlmIChkcnZfZGF0YS0+Y3VyX21zZykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogRXh0cmFjdCBoZWFkIG9mIHF1ZXVlICovCi0JZHJ2X2RhdGEtPmN1cl9tc2cgPSBsaXN0X2VudHJ5KGRydl9kYXRhLT5xdWV1ZS5uZXh0LAotCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UsIHF1ZXVlKTsKLQlsaXN0X2RlbF9pbml0KCZkcnZfZGF0YS0+Y3VyX21zZy0+cXVldWUpOwotCWRydl9kYXRhLT5idXN5ID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCi0JLyogSW5pdGlhbCBtZXNzYWdlIHN0YXRlICovCi0JZHJ2X2RhdGEtPmN1cl9tc2ctPnN0YXRlID0gU1RBUlRfU1RBVEU7Ci0JZHJ2X2RhdGEtPmN1cl90cmFuc2ZlciA9IGxpc3RfZW50cnkoZHJ2X2RhdGEtPmN1cl9tc2ctPnRyYW5zZmVycy5uZXh0LAotCQkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKLQkJCQkJCXRyYW5zZmVyX2xpc3QpOwotCi0JLyogU2V0dXAgdGhlIFNQSSB1c2luZyB0aGUgcGVyIGNoaXAgY29uZmlndXJhdGlvbiAqLwotCWRydl9kYXRhLT5jdXJfY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShkcnZfZGF0YS0+Y3VyX21zZy0+c3BpKTsKLQlyZXN0b3JlX3N0YXRlKGRydl9kYXRhKTsKLQotCS8qIE1hcmsgYXMgYnVzeSBhbmQgbGF1bmNoIHRyYW5zZmVycyAqLwotCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCi17Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCXUzMiBtaW5fc3BlZWRfaHosIG1heF9zcGVlZF9oeiwgdG1wOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnRyYW5zOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQltc2ctPmFjdHVhbF9sZW5ndGggPSAwOwotCi0JLyogUGVyIHRyYW5zZmVyIHNldHVwIGNoZWNrICovCi0JbWluX3NwZWVkX2h6ID0gc3BpX3NwZWVkX2h6KGRydl9kYXRhLCBTUElfQ09OVFJPTF9EQVRBUkFURV9NSU4pOwotCW1heF9zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OwotCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZtc2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgewotCQl0bXAgPSB0cmFucy0+Yml0c19wZXJfd29yZDsKLQkJaWYgKHRtcCA+IDE2KSB7Ci0JCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCSJtZXNzYWdlIHJlamVjdGVkIDogIgotCQkJCSJpbnZhbGlkIHRyYW5zZmVyIGJpdHNfcGVyX3dvcmQgKCVkIGJpdHMpXG4iLAotCQkJCXRtcCk7Ci0JCQlnb3RvIG1zZ19yZWplY3RlZDsKLQkJfQotCQl0bXAgPSB0cmFucy0+c3BlZWRfaHo7Ci0JCWlmICh0bXApIHsKLQkJCWlmICh0bXAgPCBtaW5fc3BlZWRfaHopIHsKLQkJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCQkibWVzc2FnZSByZWplY3RlZCA6ICIKLQkJCQkJImRldmljZSBtaW4gc3BlZWQgKCVkIEh6KSBleGNlZWRzICIKLQkJCQkJInJlcXVpcmVkIHRyYW5zZmVyIHNwZWVkICglZCBIeilcbiIsCi0JCQkJCW1pbl9zcGVlZF9oeiwKLQkJCQkJdG1wKTsKLQkJCQlnb3RvIG1zZ19yZWplY3RlZDsKLQkJCX0gZWxzZSBpZiAodG1wID4gbWF4X3NwZWVkX2h6KSB7Ci0JCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkJIm1lc3NhZ2UgcmVqZWN0ZWQgOiAiCi0JCQkJCSJ0cmFuc2ZlciBzcGVlZCAoJWQgSHopIGV4Y2VlZHMgIgotCQkJCQkiZGV2aWNlIG1heCBzcGVlZCAoJWQgSHopXG4iLAotCQkJCQl0bXAsCi0JCQkJCW1heF9zcGVlZF9oeik7Ci0JCQkJZ290byBtc2dfcmVqZWN0ZWQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBNZXNzYWdlIGFjY2VwdGVkICovCi0JbXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7Ci0JbXNnLT5zdGF0ZSA9IFNUQVJUX1NUQVRFOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGRydl9kYXRhLT5ydW4gPT0gUVVFVUVfU1RPUFBFRCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVTSFVURE9XTjsKLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZtc2ctPnF1ZXVlLCAmZHJ2X2RhdGEtPnF1ZXVlKTsKLQlpZiAoZHJ2X2RhdGEtPnJ1biA9PSBRVUVVRV9SVU5OSU5HICYmICFkcnZfZGF0YS0+YnVzeSkKLQkJcXVldWVfd29yayhkcnZfZGF0YS0+d29ya3F1ZXVlLCAmZHJ2X2RhdGEtPndvcmspOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLQotbXNnX3JlamVjdGVkOgotCS8qIE1lc3NhZ2UgcmVqZWN0ZWQgYW5kIG5vdCBxdWV1ZWQgKi8KLQltc2ctPnN0YXR1cyA9IC1FSU5WQUw7Ci0JbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOwotCWlmIChtc2ctPmNvbXBsZXRlKQotCQltc2ctPmNvbXBsZXRlKG1zZy0+Y29udGV4dCk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qIE9uIGZpcnN0IHNldHVwIGJhZCB2YWx1ZXMgbXVzdCBmcmVlIGNoaXBfZGF0YSBtZW1vcnkgc2luY2Ugd2lsbCBjYXVzZQotICAgc3BpX25ld19kZXZpY2UgdG8gZmFpbC4gQmFkIHZhbHVlIHNldHVwIGZyb20gcHJvdG9jb2wgZHJpdmVyIGFyZSBzaW1wbHkgbm90Ci0gICBhcHBsaWVkIGFuZCBub3RpZmllZCB0byB0aGUgY2FsbGluZyBkcml2ZXIuICovCi1zdGF0aWMgaW50IHNldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCXN0cnVjdCBzcGlfaW14X2NoaXAgKmNoaXBfaW5mbzsKLQlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwOwotCWludCBmaXJzdF9zZXR1cCA9IDA7Ci0JdTMyIHRtcDsKLQlpbnQgc3RhdHVzID0gMDsKLQotCS8qIEdldCBjb250cm9sbGVyIGRhdGEgKi8KLQljaGlwX2luZm8gPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKLQotCS8qIEdldCBjb250cm9sbGVyX3N0YXRlICovCi0JY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOwotCWlmIChjaGlwID09IE5VTEwpIHsKLQkJZmlyc3Rfc2V0dXAgPSAxOwotCi0JCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hpcF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY2hpcCkgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsCi0JCQkJInNldHVwIC0gY2Fubm90IGFsbG9jYXRlIGNvbnRyb2xsZXIgc3RhdGVcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJY2hpcC0+Y29udHJvbCA9IFNQSV9ERUZBVUxUX0NPTlRST0w7Ci0KLQkJaWYgKGNoaXBfaW5mbyA9PSBOVUxMKSB7Ci0JCQkvKiBzcGlfYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEgbm90IGlzIHN1cHBsaWVkICovCi0JCQljaGlwX2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3BpX2lteF9jaGlwKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFjaGlwX2luZm8pIHsKLQkJCQlkZXZfZXJyKCZzcGktPmRldiwKLQkJCQkJInNldHVwIC0gIgotCQkJCQkiY2Fubm90IGFsbG9jYXRlIGNvbnRyb2xsZXIgZGF0YVxuIik7Ci0JCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycl9maXJzdF9zZXR1cDsKLQkJCX0KLQkJCS8qIFNldCBjb250cm9sbGVyIGRhdGEgZGVmYXVsdCB2YWx1ZSAqLwotCQkJY2hpcF9pbmZvLT5lbmFibGVfbG9vcGJhY2sgPQotCQkJCQkJU1BJX0RFRkFVTFRfRU5BQkxFX0xPT1BCQUNLOwotCQkJY2hpcF9pbmZvLT5lbmFibGVfZG1hID0gU1BJX0RFRkFVTFRfRU5BQkxFX0RNQTsKLQkJCWNoaXBfaW5mby0+aW5zX3NzX3B1bHNlID0gMTsKLQkJCWNoaXBfaW5mby0+YmNsa193YWl0ID0gU1BJX0RFRkFVTFRfUEVSSU9EX1dBSVQ7Ci0JCQljaGlwX2luZm8tPmNzX2NvbnRyb2wgPSBudWxsX2NzX2NvbnRyb2w7Ci0JCX0KLQl9Ci0KLQkvKiBOb3cgc2V0IGNvbnRyb2xsZXIgc3RhdGUgYmFzZWQgb24gY29udHJvbGxlciBkYXRhICovCi0KLQlpZiAoZmlyc3Rfc2V0dXApIHsKLQkJLyogU1BJIGxvb3BiYWNrICovCi0JCWlmIChjaGlwX2luZm8tPmVuYWJsZV9sb29wYmFjaykKLQkJCWNoaXAtPnRlc3QgPSBTUElfVEVTVF9MQkM7Ci0JCWVsc2UKLQkJCWNoaXAtPnRlc3QgPSAwOwotCi0JCS8qIFNQSSBkbWEgZHJpdmVuICovCi0JCWNoaXAtPmVuYWJsZV9kbWEgPSBjaGlwX2luZm8tPmVuYWJsZV9kbWE7Ci0KLQkJLyogU1BJIC9TUyBwdWxzZSBiZXR3ZWVuIHNwaSBidXJzdCAqLwotCQlpZiAoY2hpcF9pbmZvLT5pbnNfc3NfcHVsc2UpCi0JCQl1MzJfRURJVChjaGlwLT5jb250cm9sLAotCQkJCVNQSV9DT05UUk9MX1NTQ1RMLCBTUElfQ09OVFJPTF9TU0NUTF8xKTsKLQkJZWxzZQotCQkJdTMyX0VESVQoY2hpcC0+Y29udHJvbCwKLQkJCQlTUElfQ09OVFJPTF9TU0NUTCwgU1BJX0NPTlRST0xfU1NDVExfMCk7Ci0KLQkJLyogU1BJIGJjbGsgd2FpdHMgYmV0d2VlbiBlYWNoIGJpdHNfcGVyX3dvcmQgc3BpIGJ1cnN0ICovCi0JCWlmIChjaGlwX2luZm8tPmJjbGtfd2FpdCA+IFNQSV9QRVJJT0RfTUFYX1dBSVQpIHsKLQkJCWRldl9lcnIoJnNwaS0+ZGV2LAotCQkJCSJzZXR1cCAtICIKLQkJCQkiYmNsa193YWl0IGV4Y2VlZHMgbWF4IGFsbG93ZWQgKCVkKVxuIiwKLQkJCQlTUElfUEVSSU9EX01BWF9XQUlUKTsKLQkJCWdvdG8gZXJyX2ZpcnN0X3NldHVwOwotCQl9Ci0JCWNoaXAtPnBlcmlvZCA9IFNQSV9QRVJJT0RfQ1NSQ19CQ0xLIHwKLQkJCQkoY2hpcF9pbmZvLT5iY2xrX3dhaXQgJiBTUElfUEVSSU9EX1dBSVQpOwotCX0KLQotCS8qIFNQSSBtb2RlICovCi0JdG1wID0gc3BpLT5tb2RlOwotCWlmICh0bXAgJiBTUElfQ1NfSElHSCkgewotCQl1MzJfRURJVChjaGlwLT5jb250cm9sLAotCQkJCVNQSV9DT05UUk9MX1NTUE9MLCBTUElfQ09OVFJPTF9TU1BPTF9BQ1RfSElHSCk7Ci0JfQotCXN3aXRjaCAodG1wICYgU1BJX01PREVfMykgewotCWNhc2UgU1BJX01PREVfMDoKLQkJdG1wID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTUElfTU9ERV8xOgotCQl0bXAgPSBTUElfQ09OVFJPTF9QSEFfMTsKLQkJYnJlYWs7Ci0JY2FzZSBTUElfTU9ERV8yOgotCQl0bXAgPSBTUElfQ09OVFJPTF9QT0xfQUNUX0xPVzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogU1BJX01PREVfMyAqLwotCQl0bXAgPSBTUElfQ09OVFJPTF9QSEFfMSB8IFNQSV9DT05UUk9MX1BPTF9BQ1RfTE9XOwotCQlicmVhazsKLQl9Ci0JdTMyX0VESVQoY2hpcC0+Y29udHJvbCwgU1BJX0NPTlRST0xfUE9MIHwgU1BJX0NPTlRST0xfUEhBLCB0bXApOwotCi0JLyogU1BJIHdvcmQgd2lkdGggKi8KLQl0bXAgPSBzcGktPmJpdHNfcGVyX3dvcmQ7Ci0JaWYgKHRtcCA+IDE2KSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LAotCQkJInNldHVwIC0gIgotCQkJImludmFsaWQgYml0c19wZXJfd29yZCAoJWQpXG4iLAotCQkJdG1wKTsKLQkJaWYgKGZpcnN0X3NldHVwKQotCQkJZ290byBlcnJfZmlyc3Rfc2V0dXA7Ci0JCWVsc2UgewotCQkJLyogVW5kbyBzZXR1cCB1c2luZyBjaGlwIGFzIGJhY2t1cCBjb3B5ICovCi0JCQl0bXAgPSBjaGlwLT5iaXRzX3Blcl93b3JkOwotCQkJc3BpLT5iaXRzX3Blcl93b3JkID0gdG1wOwotCQl9Ci0JfQotCWNoaXAtPmJpdHNfcGVyX3dvcmQgPSB0bXA7Ci0JdTMyX0VESVQoY2hpcC0+Y29udHJvbCwgU1BJX0NPTlRST0xfQklUQ09VTlRfTUFTSywgdG1wIC0gMSk7Ci0JY2hpcC0+bl9ieXRlcyA9ICh0bXAgPD0gOCkgPyAxIDogMjsKLQotCS8qIFNQSSBkYXRhcmF0ZSAqLwotCXRtcCA9IHNwaV9kYXRhX3JhdGUoZHJ2X2RhdGEsIHNwaS0+bWF4X3NwZWVkX2h6KTsKLQlpZiAodG1wID09IFNQSV9DT05UUk9MX0RBVEFSQVRFX0JBRCkgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQlkZXZfZXJyKCZzcGktPmRldiwKLQkJCSJzZXR1cCAtICIKLQkJCSJIVyBtaW4gc3BlZWQgKCVkIEh6KSBleGNlZWRzIHJlcXVpcmVkICIKLQkJCSJtYXggc3BlZWQgKCVkIEh6KVxuIiwKLQkJCXNwaV9zcGVlZF9oeihkcnZfZGF0YSwgU1BJX0NPTlRST0xfREFUQVJBVEVfTUlOKSwKLQkJCXNwaS0+bWF4X3NwZWVkX2h6KTsKLQkJaWYgKGZpcnN0X3NldHVwKQotCQkJZ290byBlcnJfZmlyc3Rfc2V0dXA7Ci0JCWVsc2UKLQkJCS8qIFVuZG8gc2V0dXAgdXNpbmcgY2hpcCBhcyBiYWNrdXAgY29weSAqLwotCQkJc3BpLT5tYXhfc3BlZWRfaHogPSBjaGlwLT5tYXhfc3BlZWRfaHo7Ci0JfSBlbHNlIHsKLQkJdTMyX0VESVQoY2hpcC0+Y29udHJvbCwgU1BJX0NPTlRST0xfREFUQVJBVEUsIHRtcCk7Ci0JCS8qIEFjdHVhbCByb3VuZGVkIG1heF9zcGVlZF9oeiAqLwotCQl0bXAgPSBzcGlfc3BlZWRfaHooZHJ2X2RhdGEsIHRtcCk7Ci0JCXNwaS0+bWF4X3NwZWVkX2h6ID0gdG1wOwotCQljaGlwLT5tYXhfc3BlZWRfaHogPSB0bXA7Ci0JfQotCi0JLyogU1BJIGNoaXAtc2VsZWN0IG1hbmFnZW1lbnQgKi8KLQlpZiAoY2hpcF9pbmZvLT5jc19jb250cm9sKQotCQljaGlwLT5jc19jb250cm9sID0gY2hpcF9pbmZvLT5jc19jb250cm9sOwotCWVsc2UKLQkJY2hpcC0+Y3NfY29udHJvbCA9IG51bGxfY3NfY29udHJvbDsKLQotCS8qIFNhdmUgY29udHJvbGxlcl9zdGF0ZSAqLwotCXNwaV9zZXRfY3RsZGF0YShzcGksIGNoaXApOwotCi0JLyogU3VtbWFyeSAqLwotCWRldl9kYmcoJnNwaS0+ZGV2LAotCQkic2V0dXAgc3VjY2VkZWRcbiIKLQkJIiAgICBsb29wYmFjayBlbmFibGUgICA9ICVzXG4iCi0JCSIgICAgZG1hIGVuYWJsZSAgICAgICAgPSAlc1xuIgotCQkiICAgIGluc2VydCAvc3MgcHVsc2UgID0gJXNcbiIKLQkJIiAgICBwZXJpb2Qgd2FpdCAgICAgICA9ICVkXG4iCi0JCSIgICAgbW9kZSAgICAgICAgICAgICAgPSAlZFxuIgotCQkiICAgIGJpdHMgcGVyIHdvcmQgICAgID0gJWRcbiIKLQkJIiAgICBtaW4gc3BlZWQgICAgICAgICA9ICVkIEh6XG4iCi0JCSIgICAgcm91bmRlZCBtYXggc3BlZWQgPSAlZCBIelxuIiwKLQkJY2hpcC0+dGVzdCAmIFNQSV9URVNUX0xCQyA/ICJZZXMiIDogIk5vIiwKLQkJY2hpcC0+ZW5hYmxlX2RtYSA/ICJZZXMiIDogIk5vIiwKLQkJY2hpcC0+Y29udHJvbCAmIFNQSV9DT05UUk9MX1NTQ1RMID8gIlllcyIgOiAiTm8iLAotCQljaGlwLT5wZXJpb2QgJiBTUElfUEVSSU9EX1dBSVQsCi0JCXNwaS0+bW9kZSwKLQkJc3BpLT5iaXRzX3Blcl93b3JkLAotCQlzcGlfc3BlZWRfaHooZHJ2X2RhdGEsIFNQSV9DT05UUk9MX0RBVEFSQVRFX01JTiksCi0JCXNwaS0+bWF4X3NwZWVkX2h6KTsKLQlyZXR1cm4gc3RhdHVzOwotCi1lcnJfZmlyc3Rfc2V0dXA6Ci0Ja2ZyZWUoY2hpcCk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCWtmcmVlKHNwaV9nZXRfY3RsZGF0YShzcGkpKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9xdWV1ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCUlOSVRfTElTVF9IRUFEKCZkcnZfZGF0YS0+cXVldWUpOwotCXNwaW5fbG9ja19pbml0KCZkcnZfZGF0YS0+bG9jayk7Ci0KLQlkcnZfZGF0YS0+cnVuID0gUVVFVUVfU1RPUFBFRDsKLQlkcnZfZGF0YS0+YnVzeSA9IDA7Ci0KLQl0YXNrbGV0X2luaXQoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycywKLQkJCXB1bXBfdHJhbnNmZXJzLAkodW5zaWduZWQgbG9uZylkcnZfZGF0YSk7Ci0KLQlJTklUX1dPUksoJmRydl9kYXRhLT53b3JrLCBwdW1wX21lc3NhZ2VzKTsKLQlkcnZfZGF0YS0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCQkJZGV2X25hbWUoZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudCkpOwotCWlmIChkcnZfZGF0YS0+d29ya3F1ZXVlID09IE5VTEwpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGFydF9xdWV1ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChkcnZfZGF0YS0+cnVuID09IFFVRVVFX1JVTk5JTkcgfHwgZHJ2X2RhdGEtPmJ1c3kpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlkcnZfZGF0YS0+cnVuID0gUVVFVUVfUlVOTklORzsKLQlkcnZfZGF0YS0+Y3VyX21zZyA9IE5VTEw7Ci0JZHJ2X2RhdGEtPmN1cl90cmFuc2ZlciA9IE5VTEw7Ci0JZHJ2X2RhdGEtPmN1cl9jaGlwID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCi0JcXVldWVfd29yayhkcnZfZGF0YS0+d29ya3F1ZXVlLCAmZHJ2X2RhdGEtPndvcmspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RvcF9xdWV1ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbGltaXQgPSA1MDA7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFRoaXMgaXMgYSBiaXQgbGFtZSwgYnV0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNvbW1vbiBleGVjdXRpb24gcGF0aC4KLQkgKiBBIHdhaXRfcXVldWUgb24gdGhlIGRydl9kYXRhLT5idXN5IGNvdWxkIGJlIHVzZWQsIGJ1dCB0aGVuIHRoZSBjb21tb24KLQkgKiBleGVjdXRpb24gcGF0aCAocHVtcF9tZXNzYWdlcykgd291bGQgYmUgcmVxdWlyZWQgdG8gY2FsbCB3YWtlX3VwIG9yCi0JICogZnJpZW5kcyBvbiBldmVyeSBTUEkgbWVzc2FnZS4gRG8gdGhpcyBpbnN0ZWFkICovCi0JZHJ2X2RhdGEtPnJ1biA9IFFVRVVFX1NUT1BQRUQ7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkcnZfZGF0YS0+cXVldWUpICYmIGRydl9kYXRhLT5idXN5ICYmIGxpbWl0LS0pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQkJbXNsZWVwKDEwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKCFsaXN0X2VtcHR5KCZkcnZfZGF0YS0+cXVldWUpIHx8IGRydl9kYXRhLT5idXN5KQotCQlzdGF0dXMgPSAtRUJVU1k7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBkZXN0cm95X3F1ZXVlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IHN0b3BfcXVldWUoZHJ2X2RhdGEpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIHN0YXR1czsKLQotCWlmIChkcnZfZGF0YS0+d29ya3F1ZXVlKQotCQlkZXN0cm95X3dvcmtxdWV1ZShkcnZfZGF0YS0+d29ya3F1ZXVlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzcGlfaW14X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKnBsYXRmb3JtX2luZm87Ci0Jc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpcnEsIHN0YXR1cyA9IDA7Ci0KLQlwbGF0Zm9ybV9pbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWlmIChwbGF0Zm9ybV9pbmZvID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKLQkJc3RhdHVzID0gLUVOT0RFVjsKLQkJZ290byBlcnJfbm9fcGRhdGE7Ci0JfQotCi0JLyogQWxsb2NhdGUgbWFzdGVyIHdpdGggc3BhY2UgZm9yIGRydl9kYXRhICovCi0JbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcihkZXYsIHNpemVvZihzdHJ1Y3QgZHJpdmVyX2RhdGEpKTsKLQlpZiAoIW1hc3RlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIGNhbm5vdCBhbGxvYyBzcGlfbWFzdGVyXG4iKTsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBlcnJfbm9fbWVtOwotCX0KLQlkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlkcnZfZGF0YS0+bWFzdGVyID0gbWFzdGVyOwotCWRydl9kYXRhLT5tYXN0ZXJfaW5mbyA9IHBsYXRmb3JtX2luZm87Ci0JZHJ2X2RhdGEtPnBkZXYgPSBwZGV2OwotCi0JLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCi0JbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0NTX0hJR0g7Ci0KLQltYXN0ZXItPmJ1c19udW0gPSBwZGV2LT5pZDsKLQltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGxhdGZvcm1faW5mby0+bnVtX2NoaXBzZWxlY3Q7Ci0JbWFzdGVyLT5kbWFfYWxpZ25tZW50ID0gRE1BX0FMSUdOTUVOVDsKLQltYXN0ZXItPmNsZWFudXAgPSBjbGVhbnVwOwotCW1hc3Rlci0+c2V0dXAgPSBzZXR1cDsKLQltYXN0ZXItPnRyYW5zZmVyID0gdHJhbnNmZXI7Ci0KLQlkcnZfZGF0YS0+ZHVtbXlfZG1hX2J1ZiA9IFNQSV9EVU1NWV91MzI7Ci0KLQlkcnZfZGF0YS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGVyY2xrMiIpOwotCWlmIChJU19FUlIoZHJ2X2RhdGEtPmNsaykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBjYW5ub3QgZ2V0IGNsb2NrXG4iKTsKLQkJc3RhdHVzID0gUFRSX0VSUihkcnZfZGF0YS0+Y2xrKTsKLQkJZ290byBlcnJfbm9fY2xrOwotCX0KLQljbGtfZW5hYmxlKGRydl9kYXRhLT5jbGspOwotCi0JLyogRmluZCBhbmQgbWFwIHJlc291cmNlcyAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBNRU0gcmVzb3VyY2VzIG5vdCBkZWZpbmVkXG4iKTsKLQkJc3RhdHVzID0gLUVOT0RFVjsKLQkJZ290byBlcnJfbm9faW9yZXM7Ci0JfQotCWRydl9kYXRhLT5pb2FyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwKLQkJCQkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkJCQlwZGV2LT5uYW1lKTsKLQlpZiAoZHJ2X2RhdGEtPmlvYXJlYSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JlIC0gY2Fubm90IHJlc2VydmUgcmVnaW9uXG4iKTsKLQkJc3RhdHVzID0gLUVOWElPOwotCQlnb3RvIGVycl9ub19pb3JlczsKLQl9Ci0JZHJ2X2RhdGEtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwotCWlmIChkcnZfZGF0YS0+cmVncyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JlIC0gY2Fubm90IG1hcCBJT1xuIik7Ci0JCXN0YXR1cyA9IC1FTlhJTzsKLQkJZ290byBlcnJfbm9faW9tYXA7Ci0JfQotCWRydl9kYXRhLT5yZF9kYXRhX3BoeXMgPSAoZG1hX2FkZHJfdClyZXMtPnN0YXJ0OwotCi0JLyogQXR0YWNoIHRvIElSUSAqLwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBJUlEgcmVzb3VyY2Ugbm90IGRlZmluZWRcbiIpOwotCQlzdGF0dXMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9ub19pcnFyZXM7Ci0JfQotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgc3BpX2ludCwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICAgZGV2X25hbWUoZGV2KSwgZHJ2X2RhdGEpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JlIC0gY2Fubm90IGdldCBJUlEgKCVkKVxuIiwgc3RhdHVzKTsKLQkJZ290byBlcnJfbm9faXJxcmVzOwotCX0KLQotCS8qIFNldHVwIERNQSBpZiByZXF1ZXN0ZWQgKi8KLQlkcnZfZGF0YS0+dHhfY2hhbm5lbCA9IC0xOwotCWRydl9kYXRhLT5yeF9jaGFubmVsID0gLTE7Ci0JaWYgKHBsYXRmb3JtX2luZm8tPmVuYWJsZV9kbWEpIHsKLQkJLyogR2V0IHJ4IERNQSBjaGFubmVsICovCi0JCWRydl9kYXRhLT5yeF9jaGFubmVsID0gaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8oInNwaV9pbXhfcngiLAotCQkJCQkJCSAgICAgICBETUFfUFJJT19ISUdIKTsKLQkJaWYgKGRydl9kYXRhLT5yeF9jaGFubmVsIDwgMCkgewotCQkJZGV2X2VycihkZXYsCi0JCQkJInByb2JlIC0gcHJvYmxlbSAoJWQpIHJlcXVlc3RpbmcgcnggY2hhbm5lbFxuIiwKLQkJCQlkcnZfZGF0YS0+cnhfY2hhbm5lbCk7Ci0JCQlnb3RvIGVycl9ub19yeGRtYTsKLQkJfSBlbHNlCi0JCQlpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGRydl9kYXRhLT5yeF9jaGFubmVsLCBOVUxMLAotCQkJCQkJZG1hX2Vycl9oYW5kbGVyLCBkcnZfZGF0YSk7Ci0KLQkJLyogR2V0IHR4IERNQSBjaGFubmVsICovCi0JCWRydl9kYXRhLT50eF9jaGFubmVsID0gaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8oInNwaV9pbXhfdHgiLAotCQkJCQkJCSAgICAgICBETUFfUFJJT19NRURJVU0pOwotCQlpZiAoZHJ2X2RhdGEtPnR4X2NoYW5uZWwgPCAwKSB7Ci0JCQlkZXZfZXJyKGRldiwKLQkJCQkicHJvYmUgLSBwcm9ibGVtICglZCkgcmVxdWVzdGluZyB0eCBjaGFubmVsXG4iLAotCQkJCWRydl9kYXRhLT50eF9jaGFubmVsKTsKLQkJCWlteF9kbWFfZnJlZShkcnZfZGF0YS0+cnhfY2hhbm5lbCk7Ci0JCQlnb3RvIGVycl9ub190eGRtYTsKLQkJfSBlbHNlCi0JCQlpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGRydl9kYXRhLT50eF9jaGFubmVsLAotCQkJCQkJZG1hX3R4X2hhbmRsZXIsIGRtYV9lcnJfaGFuZGxlciwKLQkJCQkJCWRydl9kYXRhKTsKLQotCQkvKiBTZXQgcmVxdWVzdCBzb3VyY2UgYW5kIGJ1cnN0IGxlbmd0aCBmb3IgYWxsb2NhdGVkIGNoYW5uZWxzICovCi0JCXN3aXRjaCAoZHJ2X2RhdGEtPnBkZXYtPmlkKSB7Ci0JCWNhc2UgMToKLQkJCS8qIFVzaW5nIFNQSTEgKi8KLQkJCVJTU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gRE1BX1JFUV9TUEkxX1I7Ci0JCQlSU1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IERNQV9SRVFfU1BJMV9UOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCS8qIFVzaW5nIFNQSTIgKi8KLQkJCVJTU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gRE1BX1JFUV9TUEkyX1I7Ci0JCQlSU1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IERNQV9SRVFfU1BJMl9UOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGRldiwgInByb2JlIC0gYmFkIFNQSSBJZFxuIik7Ci0JCQlpbXhfZG1hX2ZyZWUoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpOwotCQkJaW14X2RtYV9mcmVlKGRydl9kYXRhLT50eF9jaGFubmVsKTsKLQkJCXN0YXR1cyA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycl9ub19kZXZpZDsKLQkJfQotCQlCTFIoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gU1BJX0RNQV9CTFI7Ci0JCUJMUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBTUElfRE1BX0JMUjsKLQl9Ci0KLQkvKiBMb2FkIGRlZmF1bHQgU1BJIGNvbmZpZ3VyYXRpb24gKi8KLQl3cml0ZWwoU1BJX1JFU0VUX1NUQVJULCBkcnZfZGF0YS0+cmVncyArIFNQSV9SRVNFVCk7Ci0Jd3JpdGVsKDAsIGRydl9kYXRhLT5yZWdzICsgU1BJX1JFU0VUKTsKLQl3cml0ZWwoU1BJX0RFRkFVTFRfQ09OVFJPTCwgZHJ2X2RhdGEtPnJlZ3MgKyBTUElfQ09OVFJPTCk7Ci0KLQkvKiBJbml0aWFsIGFuZCBzdGFydCBxdWV1ZSAqLwotCXN0YXR1cyA9IGluaXRfcXVldWUoZHJ2X2RhdGEpOwotCWlmIChzdGF0dXMgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIHByb2JsZW0gaW5pdGlhbGl6aW5nIHF1ZXVlXG4iKTsKLQkJZ290byBlcnJfaW5pdF9xdWV1ZTsKLQl9Ci0Jc3RhdHVzID0gc3RhcnRfcXVldWUoZHJ2X2RhdGEpOwotCWlmIChzdGF0dXMgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIHByb2JsZW0gc3RhcnRpbmcgcXVldWVcbiIpOwotCQlnb3RvIGVycl9zdGFydF9xdWV1ZTsKLQl9Ci0KLQkvKiBSZWdpc3RlciB3aXRoIHRoZSBTUEkgZnJhbWV3b3JrICovCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2X2RhdGEpOwotCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBwcm9ibGVtIHJlZ2lzdGVyaW5nIHNwaSBtYXN0ZXJcbiIpOwotCQlnb3RvIGVycl9zcGlfcmVnaXN0ZXI7Ci0JfQotCi0JZGV2X2RiZyhkZXYsICJwcm9iZSBzdWNjZWRlZFxuIik7Ci0JcmV0dXJuIDA7Ci0KLWVycl9pbml0X3F1ZXVlOgotZXJyX3N0YXJ0X3F1ZXVlOgotZXJyX3NwaV9yZWdpc3RlcjoKLQlkZXN0cm95X3F1ZXVlKGRydl9kYXRhKTsKLQotZXJyX25vX3J4ZG1hOgotZXJyX25vX3R4ZG1hOgotZXJyX25vX2RldmlkOgotCWZyZWVfaXJxKGlycSwgZHJ2X2RhdGEpOwotCi1lcnJfbm9faXJxcmVzOgotCWlvdW5tYXAoZHJ2X2RhdGEtPnJlZ3MpOwotCi1lcnJfbm9faW9tYXA6Ci0JcmVsZWFzZV9yZXNvdXJjZShkcnZfZGF0YS0+aW9hcmVhKTsKLQlrZnJlZShkcnZfZGF0YS0+aW9hcmVhKTsKLQotZXJyX25vX2lvcmVzOgotCWNsa19kaXNhYmxlKGRydl9kYXRhLT5jbGspOwotCWNsa19wdXQoZHJ2X2RhdGEtPmNsayk7Ci0KLWVycl9ub19jbGs6Ci0Jc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKLQotZXJyX25vX3BkYXRhOgotZXJyX25vX21lbToKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IF9fZXhpdCBzcGlfaW14X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaXJxOwotCWludCBzdGF0dXMgPSAwOwotCi0JaWYgKCFkcnZfZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQl0YXNrbGV0X2tpbGwoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci0KLQkvKiBSZW1vdmUgdGhlIHF1ZXVlICovCi0Jc3RhdHVzID0gZGVzdHJveV9xdWV1ZShkcnZfZGF0YSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInF1ZXVlIHJlbW92ZSBmYWlsZWQgKCVkKVxuIiwgc3RhdHVzKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkvKiBSZXNldCBTUEkgKi8KLQl3cml0ZWwoU1BJX1JFU0VUX1NUQVJULCBkcnZfZGF0YS0+cmVncyArIFNQSV9SRVNFVCk7Ci0Jd3JpdGVsKDAsIGRydl9kYXRhLT5yZWdzICsgU1BJX1JFU0VUKTsKLQotCS8qIFJlbGVhc2UgRE1BICovCi0JaWYgKGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+ZW5hYmxlX2RtYSkgewotCQlSU1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IDA7Ci0JCVJTU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gMDsKLQkJaW14X2RtYV9mcmVlKGRydl9kYXRhLT50eF9jaGFubmVsKTsKLQkJaW14X2RtYV9mcmVlKGRydl9kYXRhLT5yeF9jaGFubmVsKTsKLQl9Ci0KLQkvKiBSZWxlYXNlIElSUSAqLwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKGlycSA+PSAwKQotCQlmcmVlX2lycShpcnEsIGRydl9kYXRhKTsKLQotCWNsa19kaXNhYmxlKGRydl9kYXRhLT5jbGspOwotCWNsa19wdXQoZHJ2X2RhdGEtPmNsayk7Ci0KLQkvKiBSZWxlYXNlIG1hcCByZXNvdXJjZXMgKi8KLQlpb3VubWFwKGRydl9kYXRhLT5yZWdzKTsKLQlyZWxlYXNlX3Jlc291cmNlKGRydl9kYXRhLT5pb2FyZWEpOwotCWtmcmVlKGRydl9kYXRhLT5pb2FyZWEpOwotCi0JLyogRGlzY29ubmVjdCBmcm9tIHRoZSBTUEkgZnJhbWV3b3JrICovCi0Jc3BpX3VucmVnaXN0ZXJfbWFzdGVyKGRydl9kYXRhLT5tYXN0ZXIpOwotCXNwaV9tYXN0ZXJfcHV0KGRydl9kYXRhLT5tYXN0ZXIpOwotCi0JLyogUHJldmVudCBkb3VibGUgcmVtb3ZlICovCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZW1vdmUgc3VjY2VkZWRcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwaV9pbXhfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQkvKiBSZXNldCBTUEkgKi8KLQl3cml0ZWwoU1BJX1JFU0VUX1NUQVJULCBkcnZfZGF0YS0+cmVncyArIFNQSV9SRVNFVCk7Ci0Jd3JpdGVsKDAsIGRydl9kYXRhLT5yZWdzICsgU1BJX1JFU0VUKTsKLQotCWRldl9kYmcoJnBkZXYtPmRldiwgInNodXRkb3duIHN1Y2NlZGVkXG4iKTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IHNwaV9pbXhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBzdGF0dXMgPSAwOwotCi0Jc3RhdHVzID0gc3RvcF9xdWV1ZShkcnZfZGF0YSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJzdXNwZW5kIGNhbm5vdCBzdG9wIHF1ZXVlXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJzdXNwZW5kZWRcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3BpX2lteF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkvKiBTdGFydCB0aGUgcXVldWUgcnVubmluZyAqLwotCXN0YXR1cyA9IHN0YXJ0X3F1ZXVlKGRydl9kYXRhKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gc3RhcnRpbmcgcXVldWUgKCVkKVxuIiwgc3RhdHVzKTsKLQllbHNlCi0JCWRldl9kYmcoJnBkZXYtPmRldiwgInJlc3VtZWRcbiIpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLSNlbHNlCi0jZGVmaW5lIHNwaV9pbXhfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHNwaV9pbXhfcmVzdW1lIE5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCi1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNwaV9pbXgiKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNwaV9pbXgiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5yZW1vdmUgPSBfX2V4aXRfcChzcGlfaW14X3JlbW92ZSksCi0JLnNodXRkb3duID0gc3BpX2lteF9zaHV0ZG93biwKLQkuc3VzcGVuZCA9IHNwaV9pbXhfc3VzcGVuZCwKLQkucmVzdW1lID0gc3BpX2lteF9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzcGlfaW14X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZkcml2ZXIsIHNwaV9pbXhfcHJvYmUpOwotfQotbW9kdWxlX2luaXQoc3BpX2lteF9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHNwaV9pbXhfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXIpOwotfQotbW9kdWxlX2V4aXQoc3BpX2lteF9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiQW5kcmVhIFBhdGVybmlhbmksIDxhLnBhdGVybmlhbmlAc3dhcHAtZW5nLml0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJpTVggU1BJIENvbnRyb2xsZXIgRHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwYTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYwpAQCAtMCwwICsxLDYxMiBAQAorLyoKKyAqIFNQSV9QUEM0WFggU1BJIGNvbnRyb2xsZXIgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA4IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqIENvcHlyaWdodCAyMDA5IEhhcnJpcyBDb3Jwb3JhdGlvbiwgU3RldmVuIEEuIEZhbGNvIDxzZmFsY29AaGFycmlzLmNvbT4KKyAqCisgKiBCYXNlZCBpbiBwYXJ0IG9uIGRyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQmVuIERvb2tzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFRoZSBQUEM0eHggU1BJIGNvbnRyb2xsZXIgaGFzIG5vIEZJRk8gc28gZWFjaCBzZW50L3JlY2VpdmVkIGJ5dGUgd2lsbAorICogZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIHRoZSBDUFUuIFRoaXMgY2FuIGNhdXNlIGhpZ2ggQ1BVIHV0aWxpemF0aW9uLgorICogVGhpcyBkcml2ZXIgYWxsb3dzIHBsYXRmb3JtcyB0byByZWR1Y2UgdGhlIGludGVycnVwdCBsb2FkIG9uIHRoZSBDUFUKKyAqIGR1cmluZyBTUEkgdHJhbnNmZXJzIGJ5IHNldHRpbmcgbWF4X3NwZWVkX2h6IHZpYSB0aGUgZGV2aWNlIHRyZWUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2Rjci5oPgorI2luY2x1ZGUgPGFzbS9kY3ItcmVncy5oPgorCisvKiBiaXRzIGluIG1vZGUgcmVnaXN0ZXIgLSBiaXQgMCBpcyBNU2IgKi8KKworLyoKKyAqIFNQSV9QUEM0WFhfTU9ERV9TQ1AgPSAwIG1lYW5zICJkYXRhIGxhdGNoZWQgb24gdHJhaWxpbmcgZWRnZSBvZiBjbG9jayIKKyAqIFNQSV9QUEM0WFhfTU9ERV9TQ1AgPSAxIG1lYW5zICJkYXRhIGxhdGNoZWQgb24gbGVhZGluZyBlZGdlIG9mIGNsb2NrIgorICogTm90ZTogVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiBDUEhBLgorICovCisjZGVmaW5lIFNQSV9QUEM0WFhfTU9ERV9TQ1AJKDB4ODAgPj4gMykKKworLyogU1BJX1BQQzRYWF9NT0RFX1NQRSA9IDEgbWVhbnMgInBvcnQgZW5hYmxlZCIgKi8KKyNkZWZpbmUgU1BJX1BQQzRYWF9NT0RFX1NQRQkoMHg4MCA+PiA0KQorCisvKgorICogU1BJX1BQQzRYWF9NT0RFX1JEID0gMCBtZWFucyAiTVNCIGZpcnN0IiAtIHRoaXMgaXMgdGhlIG5vcm1hbCBtb2RlCisgKiBTUElfUFBDNFhYX01PREVfUkQgPSAxIG1lYW5zICJMU0IgZmlyc3QiIC0gdGhpcyBpcyBiaXQtcmV2ZXJzZWQgbW9kZQorICogTm90ZTogVGhpcyBpcyBpZGVudGljYWwgdG8gU1BJX0xTQl9GSVJTVC4KKyAqLworI2RlZmluZSBTUElfUFBDNFhYX01PREVfUkQJKDB4ODAgPj4gNSkKKworLyoKKyAqIFNQSV9QUEM0WFhfTU9ERV9DSSA9IDAgbWVhbnMgImNsb2NrIGlkbGVzIGxvdyIKKyAqIFNQSV9QUEM0WFhfTU9ERV9DSSA9IDEgbWVhbnMgImNsb2NrIGlkbGVzIGhpZ2giCisgKiBOb3RlOiBUaGlzIGlzIGlkZW50aWNhbCB0byBDUE9MLgorICovCisjZGVmaW5lIFNQSV9QUEM0WFhfTU9ERV9DSQkoMHg4MCA+PiA2KQorCisvKgorICogU1BJX1BQQzRYWF9NT0RFX0lMID0gMCBtZWFucyAibG9vcGJhY2sgZGlzYWJsZSIKKyAqIFNQSV9QUEM0WFhfTU9ERV9JTCA9IDEgbWVhbnMgImxvb3BiYWNrIGVuYWJsZSIKKyAqLworI2RlZmluZSBTUElfUFBDNFhYX01PREVfSUwJKDB4ODAgPj4gNykKKworLyogYml0cyBpbiBjb250cm9sIHJlZ2lzdGVyICovCisvKiBzdGFydHMgYSB0cmFuc2ZlciB3aGVuIHNldCAqLworI2RlZmluZSBTUElfUFBDNFhYX0NSX1NUUgkoMHg4MCA+PiA3KQorCisvKiBiaXRzIGluIHN0YXR1cyByZWdpc3RlciAqLworLyogcG9ydCBpcyBidXN5IHdpdGggYSB0cmFuc2ZlciAqLworI2RlZmluZSBTUElfUFBDNFhYX1NSX0JTWQkoMHg4MCA+PiA2KQorLyogUnhEIHJlYWR5ICovCisjZGVmaW5lIFNQSV9QUEM0WFhfU1JfUkJSCSgweDgwID4+IDcpCisKKy8qIGNsb2NrIHNldHRpbmdzIChTQ1AgYW5kIENJKSBmb3IgdmFyaW91cyBTUEkgbW9kZXMgKi8KKyNkZWZpbmUgU1BJX0NMS19NT0RFMAkoU1BJX1BQQzRYWF9NT0RFX1NDUCB8IDApCisjZGVmaW5lIFNQSV9DTEtfTU9ERTEJKDAgfCAwKQorI2RlZmluZSBTUElfQ0xLX01PREUyCShTUElfUFBDNFhYX01PREVfU0NQIHwgU1BJX1BQQzRYWF9NT0RFX0NJKQorI2RlZmluZSBTUElfQ0xLX01PREUzCSgwIHwgU1BJX1BQQzRYWF9NT0RFX0NJKQorCisjZGVmaW5lIERSSVZFUl9OQU1FCSJzcGlfcHBjNHh4X29mIgorCitzdHJ1Y3Qgc3BpX3BwYzR4eF9yZWdzIHsKKwl1OCBtb2RlOworCXU4IHJ4ZDsKKwl1OCB0eGQ7CisJdTggY3I7CisJdTggc3I7CisJdTggZHVtbXk7CisJLyoKKwkgKiBDbG9jayBkaXZpc29yIG1vZHVsdXMgcmVnaXN0ZXIKKwkgKiBUaGlzIHVzZXMgdGhlIGZvbGx3aW5nIGZvcm11bGE6CisJICogICAgU0NQQ2xrT3V0ID0gT1BCQ0xLLyg0KENETSArIDEpKQorCSAqIG9yCisJICogICAgQ0RNID0gKE9QQkNMSy80KlNDUENsa091dCkgLSAxCisJICogYml0IDAgaXMgdGhlIE1TYiEKKwkgKi8KKwl1OCBjZG07Cit9OworCisvKiBTUEkgQ29udHJvbGxlciBkcml2ZXIncyBwcml2YXRlIGRhdGEuICovCitzdHJ1Y3QgcHBjNHh4X3NwaSB7CisJLyogYml0YmFuZyBoYXMgdG8gYmUgZmlyc3QgKi8KKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcgYml0YmFuZzsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCisJdTY0IG1hcGJhc2U7CisJdTY0IG1hcHNpemU7CisJaW50IGlycW51bTsKKwkvKiBuZWVkIHRoaXMgdG8gc2V0IHRoZSBTUEkgY2xvY2sgKi8KKwl1bnNpZ25lZCBpbnQgb3BiX2ZyZXE7CisKKwkvKiBmb3IgdHJhbnNmZXJzICovCisJaW50IGxlbjsKKwlpbnQgY291bnQ7CisJLyogZGF0YSBidWZmZXJzICovCisJY29uc3QgdW5zaWduZWQgY2hhciAqdHg7CisJdW5zaWduZWQgY2hhciAqcng7CisKKwlpbnQgKmdwaW9zOworCisJc3RydWN0IHNwaV9wcGM0eHhfcmVncyBfX2lvbWVtICpyZWdzOyAvKiBwb2ludGVyIHRvIHRoZSByZWdpc3RlcnMgKi8KKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKK307CisKKy8qIG5lZWQgdGhpcyBzbyB3ZSBjYW4gc2V0IHRoZSBjbG9jayBpbiB0aGUgY2hpcHNlbGVjdCByb3V0aW5lICovCitzdHJ1Y3Qgc3BpX3BwYzR4eF9jcyB7CisJdTggbW9kZTsKK307CisKK3N0YXRpYyBpbnQgc3BpX3BwYzR4eF90eHJ4KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHBwYzR4eF9zcGkgKmh3OworCXU4IGRhdGE7CisKKwlkZXZfZGJnKCZzcGktPmRldiwgInR4cng6IHR4ICVwLCByeCAlcCwgbGVuICVkXG4iLAorCQl0LT50eF9idWYsIHQtPnJ4X2J1ZiwgdC0+bGVuKTsKKworCWh3ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlody0+dHggPSB0LT50eF9idWY7CisJaHctPnJ4ID0gdC0+cnhfYnVmOworCWh3LT5sZW4gPSB0LT5sZW47CisJaHctPmNvdW50ID0gMDsKKworCS8qIHNlbmQgdGhlIGZpcnN0IGJ5dGUgKi8KKwlkYXRhID0gaHctPnR4ID8gaHctPnR4WzBdIDogMDsKKwlvdXRfOCgmaHctPnJlZ3MtPnR4ZCwgZGF0YSk7CisJb3V0XzgoJmh3LT5yZWdzLT5jciwgU1BJX1BQQzRYWF9DUl9TVFIpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh3LT5kb25lKTsKKworCXJldHVybiBody0+Y291bnQ7Cit9CisKK3N0YXRpYyBpbnQgc3BpX3BwYzR4eF9zZXR1cHhmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgcHBjNHh4X3NwaSAqaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3Qgc3BpX3BwYzR4eF9jcyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisJaW50IHNjcjsKKwl1OCBjZG0gPSAwOworCXUzMiBzcGVlZDsKKwl1OCBiaXRzX3Blcl93b3JkOworCisJLyogU3RhcnQgd2l0aCB0aGUgZ2VuZXJpYyBjb25maWd1cmF0aW9uIGZvciB0aGlzIGRldmljZS4gKi8KKwliaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOworCXNwZWVkID0gc3BpLT5tYXhfc3BlZWRfaHo7CisKKwkvKgorCSAqIE1vZGlmeSB0aGUgY29uZmlndXJhdGlvbiBpZiB0aGUgdHJhbnNmZXIgb3ZlcnJpZGVzIGl0LiAgRG8gbm90IGFsbG93CisJICogdGhlIHRyYW5zZmVyIHRvIG92ZXJ3cml0ZSB0aGUgZ2VuZXJpYyBjb25maWd1cmF0aW9uIHdpdGggemVyb3MuCisJICovCisJaWYgKHQpIHsKKwkJaWYgKHQtPmJpdHNfcGVyX3dvcmQpCisJCQliaXRzX3Blcl93b3JkID0gdC0+Yml0c19wZXJfd29yZDsKKworCQlpZiAodC0+c3BlZWRfaHopCisJCQlzcGVlZCA9IG1pbih0LT5zcGVlZF9oeiwgc3BpLT5tYXhfc3BlZWRfaHopOworCX0KKworCWlmIChiaXRzX3Blcl93b3JkICE9IDgpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJpbnZhbGlkIGJpdHMtcGVyLXdvcmQgKCVkKVxuIiwKKwkJCQliaXRzX3Blcl93b3JkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzcGVlZCB8fCAoc3BlZWQgPiBzcGktPm1heF9zcGVlZF9oeikpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJpbnZhbGlkIHNwZWVkX2h6ICglZClcbiIsIHNwZWVkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV3JpdGUgbmV3IGNvbmZpZ3JhdGlvbiAqLworCW91dF84KCZody0+cmVncy0+bW9kZSwgY3MtPm1vZGUpOworCisJLyogU2V0IHRoZSBjbG9jayAqLworCS8qIG9wYl9mcmVxIHdhcyBhbHJlYWR5IGRpdmlkZWQgYnkgNCAqLworCXNjciA9IChody0+b3BiX2ZyZXEgLyBzcGVlZCkgLSAxOworCWlmIChzY3IgPiAwKQorCQljZG0gPSBtaW4oc2NyLCAweGZmKTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LCAic2V0dGluZyBwcmUtc2NhbGVyIHRvICVkIChoeiAlZClcbiIsIGNkbSwgc3BlZWQpOworCisJaWYgKGluXzgoJmh3LT5yZWdzLT5jZG0pICE9IGNkbSkKKwkJb3V0XzgoJmh3LT5yZWdzLT5jZG0sIGNkbSk7CisKKwlzcGluX2xvY2soJmh3LT5iaXRiYW5nLmxvY2spOworCWlmICghaHctPmJpdGJhbmcuYnVzeSkgeworCQlody0+Yml0YmFuZy5jaGlwc2VsZWN0KHNwaSwgQklUQkFOR19DU19JTkFDVElWRSk7CisJCS8qIE5lZWQgdG8gbmRlbGF5IGhlcmU/ICovCisJfQorCXNwaW5fdW5sb2NrKCZody0+Yml0YmFuZy5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwaV9wcGM0eHhfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc3BpX3BwYzR4eF9jcyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkICE9IDgpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJpbnZhbGlkIGJpdHMtcGVyLXdvcmQgKCVkKVxuIiwKKwkJCXNwaS0+Yml0c19wZXJfd29yZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghc3BpLT5tYXhfc3BlZWRfaHopIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJpbnZhbGlkIG1heF9zcGVlZF9oeiAobXVzdCBiZSBub24temVybylcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3MgPT0gTlVMTCkgeworCQljcyA9IGt6YWxsb2Moc2l6ZW9mICpjcywgR0ZQX0tFUk5FTCk7CisJCWlmICghY3MpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3BpLT5jb250cm9sbGVyX3N0YXRlID0gY3M7CisJfQorCisJLyoKKwkgKiBXZSBzZXQgYWxsIGJpdHMgb2YgdGhlIFNQSTBfTU9ERSByZWdpc3Rlciwgc28sCisJICogbm8gbmVlZCB0byByZWFkLW1vZGlmeS13cml0ZQorCSAqLworCWNzLT5tb2RlID0gU1BJX1BQQzRYWF9NT0RFX1NQRTsKKworCXN3aXRjaCAoc3BpLT5tb2RlICYgKFNQSV9DUEhBIHwgU1BJX0NQT0wpKSB7CisJY2FzZSBTUElfTU9ERV8wOgorCQljcy0+bW9kZSB8PSBTUElfQ0xLX01PREUwOworCQlicmVhazsKKwljYXNlIFNQSV9NT0RFXzE6CisJCWNzLT5tb2RlIHw9IFNQSV9DTEtfTU9ERTE7CisJCWJyZWFrOworCWNhc2UgU1BJX01PREVfMjoKKwkJY3MtPm1vZGUgfD0gU1BJX0NMS19NT0RFMjsKKwkJYnJlYWs7CisJY2FzZSBTUElfTU9ERV8zOgorCQljcy0+bW9kZSB8PSBTUElfQ0xLX01PREUzOworCQlicmVhazsKKwl9CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkKKwkJY3MtPm1vZGUgfD0gU1BJX1BQQzRYWF9NT0RFX1JEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9wcGM0eHhfY2hpcHNlbChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHBwYzR4eF9zcGkgKmh3ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdW5zaWduZWQgaW50IGNzID0gc3BpLT5jaGlwX3NlbGVjdDsKKwl1bnNpZ25lZCBpbnQgY3Nwb2w7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBjaGlwIHNlbGVjdHMgYXQgYWxsLCBvciBpZiB0aGlzIGlzIHRoZSBzcGVjaWFsCisJICogY2FzZSBvZiBhIG5vbi1leGlzdGVudCAoZHVtbXkpIGNoaXAgc2VsZWN0LCBkbyBub3RoaW5nLgorCSAqLworCisJaWYgKCFody0+bWFzdGVyLT5udW1fY2hpcHNlbGVjdCB8fCBody0+Z3Bpb3NbY3NdID09IC1FRVhJU1QpCisJCXJldHVybjsKKworCWNzcG9sID0gc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMDsKKwlpZiAodmFsdWUgPT0gQklUQkFOR19DU19JTkFDVElWRSkKKwkJY3Nwb2wgPSAhY3Nwb2w7CisKKwlncGlvX3NldF92YWx1ZShody0+Z3Bpb3NbY3NdLCBjc3BvbCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzcGlfcHBjNHh4X2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBwYzR4eF9zcGkgKmh3OworCXU4IHN0YXR1czsKKwl1OCBkYXRhOworCXVuc2lnbmVkIGludCBjb3VudDsKKworCWh3ID0gKHN0cnVjdCBwcGM0eHhfc3BpICopZGV2X2lkOworCisJc3RhdHVzID0gaW5fOCgmaHctPnJlZ3MtPnNyKTsKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyoKKwkgKiBCU1kgZGUtYXNzZXJ0cyBvbmUgY3ljbGUgYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiAgVGhlCisJICogaW50ZXJydXB0IGlzIGFzc2VydGVkIGFmdGVyIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4gIFRoZSBleGFjdAorCSAqIHJlbGF0aW9uc2hpcCBpcyBub3QgZG9jdW1lbnRlZCwgaGVuY2UgdGhpcyBjb2RlLgorCSAqLworCisJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFNQSV9QUEM0WFhfU1JfQlNZKSkgeworCQl1OCBsc3RhdHVzOworCQlpbnQgY250ID0gMDsKKworCQlkZXZfZGJnKGh3LT5kZXYsICJnb3QgaW50ZXJydXB0IGJ1dCBzcGkgc3RpbGwgYnVzeT9cbiIpOworCQlkbyB7CisJCQluZGVsYXkoMTApOworCQkJbHN0YXR1cyA9IGluXzgoJmh3LT5yZWdzLT5zcik7CisJCX0gd2hpbGUgKCsrY250IDwgMTAwICYmIGxzdGF0dXMgJiBTUElfUFBDNFhYX1NSX0JTWSk7CisKKwkJaWYgKGNudCA+PSAxMDApIHsKKwkJCWRldl9lcnIoaHctPmRldiwgImJ1c3l3YWl0OiB0b28gbWFueSBsb29wcyFcbiIpOworCQkJY29tcGxldGUoJmh3LT5kb25lKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfSBlbHNlIHsKKwkJCS8qIHN0YXR1cyBpcyBhbHdheXMgMSAoUkJSKSBoZXJlICovCisJCQlzdGF0dXMgPSBpbl84KCZody0+cmVncy0+c3IpOworCQkJZGV2X2RiZyhody0+ZGV2LCAibG9vcHMgJWQgc3RhdHVzICV4XG4iLCBjbnQsIHN0YXR1cyk7CisJCX0KKwl9CisKKwljb3VudCA9IGh3LT5jb3VudDsKKwlody0+Y291bnQrKzsKKworCS8qIFJCUiB0cmlnZ2VyZWQgdGhpcyBpbnRlcnJ1cHQuICBUaGVyZWZvcmUsIGRhdGEgbXVzdCBiZSByZWFkeS4gKi8KKwlkYXRhID0gaW5fOCgmaHctPnJlZ3MtPnJ4ZCk7CisJaWYgKGh3LT5yeCkKKwkJaHctPnJ4W2NvdW50XSA9IGRhdGE7CisKKwljb3VudCsrOworCisJaWYgKGNvdW50IDwgaHctPmxlbikgeworCQlkYXRhID0gaHctPnR4ID8gaHctPnR4W2NvdW50XSA6IDA7CisJCW91dF84KCZody0+cmVncy0+dHhkLCBkYXRhKTsKKwkJb3V0XzgoJmh3LT5yZWdzLT5jciwgU1BJX1BQQzRYWF9DUl9TVFIpOworCX0gZWxzZSB7CisJCWNvbXBsZXRlKCZody0+ZG9uZSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzcGlfcHBjNHh4X2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlrZnJlZShzcGktPmNvbnRyb2xsZXJfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBzcGlfcHBjNHh4X2VuYWJsZShzdHJ1Y3QgcHBjNHh4X3NwaSAqaHcpCit7CisJLyoKKwkgKiBPbiBhbGwgNHh4IFBQQydzIHRoZSBTUEkgYnVzIGlzIHNoYXJlZC9tdWx0aXBsZXhlZCB3aXRoCisJICogdGhlIDJuZCBJMkMgYnVzLiBXZSBuZWVkIHRvIGVuYWJsZSB0aGUgdGhlIFNQSSBidXMgYmVmb3JlCisJICogdXNpbmcgaXQuCisJICovCisKKwkvKiBuZWVkIHRvIGNsZWFyIGJpdCAxNCB0byBlbmFibGUgU1BDICovCisJZGNyaV9jbHJzZXQoU0RSMCwgU0RSMF9QRkMxLCAweDgwMDAwMDAwID4+IDE0LCAwKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9ncGlvcyhzdHJ1Y3QgcHBjNHh4X3NwaSAqaHcpCit7CisJaWYgKGh3LT5tYXN0ZXItPm51bV9jaGlwc2VsZWN0KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKKwkJCWlmIChncGlvX2lzX3ZhbGlkKGh3LT5ncGlvc1tpXSkpCisJCQkJZ3Bpb19mcmVlKGh3LT5ncGlvc1tpXSk7CisKKwkJa2ZyZWUoaHctPmdwaW9zKTsKKwkJaHctPmdwaW9zID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBvZl9kZXZpY2UgbGF5ZXIgc3R1ZmYuLi4KKyAqLworc3RhdGljIGludCBfX2luaXQgc3BpX3BwYzR4eF9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgcHBjNHh4X3NwaSAqaHc7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcgKmJicDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9wLT5ub2RlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvcC0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb3BibnA7CisJaW50IHJldDsKKwlpbnQgbnVtX2dwaW9zOworCWNvbnN0IHVuc2lnbmVkIGludCAqY2xrOworCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcihkZXYsIHNpemVvZiAqaHcpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2X3NldF9kcnZkYXRhKGRldiwgbWFzdGVyKTsKKwlodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlody0+bWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKKwlody0+ZGV2ID0gZGV2OworCisJaW5pdF9jb21wbGV0aW9uKCZody0+ZG9uZSk7CisKKwkvKgorCSAqIEEgY291bnQgb2YgemVybyBpbXBsaWVzIGEgc2luZ2xlIFNQSSBkZXZpY2Ugd2l0aG91dCBhbnkgY2hpcC1zZWxlY3QuCisJICogTm90ZSB0aGF0IG9mX2dwaW9fY291bnQgY291bnRzIGFsbCBncGlvcyBhc3NpZ25lZCB0byB0aGlzIHNwaSBtYXN0ZXIuCisJICogVGhpcyBpbmNsdWRlcyBib3RoICJudWxsIiBncGlvJ3MgYW5kIHJlYWwgb25lcy4KKwkgKi8KKwludW1fZ3Bpb3MgPSBvZl9ncGlvX2NvdW50KG5wKTsKKwlpZiAobnVtX2dwaW9zKSB7CisJCWludCBpOworCisJCWh3LT5ncGlvcyA9IGt6YWxsb2Moc2l6ZW9mKGludCkgKiBudW1fZ3Bpb3MsIEdGUF9LRVJORUwpOworCQlpZiAoIWh3LT5ncGlvcykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZnJlZV9tYXN0ZXI7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2dwaW9zOyBpKyspIHsKKwkJCWludCBncGlvOworCQkJZW51bSBvZl9ncGlvX2ZsYWdzIGZsYWdzOworCisJCQlncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MobnAsIGksICZmbGFncyk7CisJCQlody0+Z3Bpb3NbaV0gPSBncGlvOworCisJCQlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgeworCQkJCS8qIFJlYWwgQ1MgLSBzZXQgdGhlIGluaXRpYWwgc3RhdGUuICovCisJCQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIG5wLT5uYW1lKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlkZXZfZXJyKGRldiwgImNhbid0IHJlcXVlc3QgZ3BpbyAiCisJCQkJCQkJIiMlZDogJWRcbiIsIGksIHJldCk7CisJCQkJCWdvdG8gZnJlZV9ncGlvczsKKwkJCQl9CisKKwkJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywKKwkJCQkJCSEhKGZsYWdzICYgT0ZfR1BJT19BQ1RJVkVfTE9XKSk7CisJCQl9IGVsc2UgaWYgKGdwaW8gPT0gLUVFWElTVCkgeworCQkJCTsgLyogTm8gQ1MsIGJ1dCB0aGF0J3MgT0suICovCisJCQl9IGVsc2UgeworCQkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBncGlvICMlZDogJWRcbiIsIGksIGdwaW8pOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBmcmVlX2dwaW9zOworCQkJfQorCQl9CisJfQorCisJLyogU2V0dXAgdGhlIHN0YXRlIGZvciB0aGUgYml0YmFuZyBkcml2ZXIgKi8KKwliYnAgPSAmaHctPmJpdGJhbmc7CisJYmJwLT5tYXN0ZXIgPSBody0+bWFzdGVyOworCWJicC0+c2V0dXBfdHJhbnNmZXIgPSBzcGlfcHBjNHh4X3NldHVweGZlcjsKKwliYnAtPmNoaXBzZWxlY3QgPSBzcGlfcHBjNHh4X2NoaXBzZWw7CisJYmJwLT50eHJ4X2J1ZnMgPSBzcGlfcHBjNHh4X3R4cng7CisJYmJwLT51c2VfZG1hID0gMDsKKwliYnAtPm1hc3Rlci0+c2V0dXAgPSBzcGlfcHBjNHh4X3NldHVwOworCWJicC0+bWFzdGVyLT5jbGVhbnVwID0gc3BpX3BwYzR4eF9jbGVhbnVwOworCisJLyogQWxsb2NhdGUgYnVzIG51bSBkeW5hbWljYWxseS4gKi8KKwliYnAtPm1hc3Rlci0+YnVzX251bSA9IC0xOworCisJLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCisJYmJwLT5tYXN0ZXItPm1vZGVfYml0cyA9CisJCVNQSV9DUEhBIHwgU1BJX0NQT0wgfCBTUElfQ1NfSElHSCB8IFNQSV9MU0JfRklSU1Q7CisKKwkvKiB0aGlzIG1hbnkgcGlucyBpbiBhbGwgR1BJTyBjb250cm9sbGVycyAqLworCWJicC0+bWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IG51bV9ncGlvczsKKworCS8qIEdldCB0aGUgY2xvY2sgZm9yIHRoZSBPUEIgKi8KKwlvcGJucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJpYm0sb3BiIik7CisJaWYgKG9wYm5wID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJPUEI6IGNhbm5vdCBmaW5kIG5vZGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfZ3Bpb3M7CisJfQorCS8qIEdldCB0aGUgY2xvY2sgKEh6KSBmb3IgdGhlIE9QQiAqLworCWNsayA9IG9mX2dldF9wcm9wZXJ0eShvcGJucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCWlmIChjbGsgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIk9QQjogbm8gY2xvY2stZnJlcXVlbmN5IHByb3BlcnR5IHNldFxuIik7CisJCW9mX25vZGVfcHV0KG9wYm5wKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX2dwaW9zOworCX0KKwlody0+b3BiX2ZyZXEgPSAqY2xrOworCWh3LT5vcGJfZnJlcSA+Pj0gMjsKKwlvZl9ub2RlX3B1dChvcGJucCk7CisKKwlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzb3VyY2UpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJlcnJvciB3aGlsZSBwYXJzaW5nIGRldmljZSBub2RlIHJlc291cmNlXG4iKTsKKwkJZ290byBmcmVlX2dwaW9zOworCX0KKwlody0+bWFwYmFzZSA9IHJlc291cmNlLnN0YXJ0OworCWh3LT5tYXBzaXplID0gcmVzb3VyY2UuZW5kIC0gcmVzb3VyY2Uuc3RhcnQgKyAxOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKGh3LT5tYXBzaXplIDwgc2l6ZW9mKHN0cnVjdCBzcGlfcHBjNHh4X3JlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAidG9vIHNtYWxsIHRvIG1hcCByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfZ3Bpb3M7CisJfQorCisJLyogUmVxdWVzdCBJUlEgKi8KKwlody0+aXJxbnVtID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCXJldCA9IHJlcXVlc3RfaXJxKGh3LT5pcnFudW0sIHNwaV9wcGM0eHhfaW50LAorCQkJICBJUlFGX0RJU0FCTEVELCAic3BpX3BwYzR4eF9vZiIsICh2b2lkICopaHcpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0XG4iKTsKKwkJZ290byBmcmVlX2dwaW9zOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGh3LT5tYXBiYXNlLCBody0+bWFwc2l6ZSwgRFJJVkVSX05BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAicmVzb3VyY2UgdW5hdmFpbGFibGVcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcmVxdWVzdF9tZW1fZXJyb3I7CisJfQorCisJaHctPnJlZ3MgPSBpb3JlbWFwKGh3LT5tYXBiYXNlLCBzaXplb2Yoc3RydWN0IHNwaV9wcGM0eHhfcmVncykpOworCisJaWYgKCFody0+cmVncykgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBtZW1vcnkgbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBtYXBfaW9fZXJyb3I7CisJfQorCisJc3BpX3BwYzR4eF9lbmFibGUoaHcpOworCisJLyogRmluYWxseSByZWdpc3RlciBvdXIgc3BpIGNvbnRyb2xsZXIgKi8KKwlkZXYtPmRtYV9tYXNrID0gMDsKKwlyZXQgPSBzcGlfYml0YmFuZ19zdGFydChiYnApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIG1hc3RlclxuIik7CisJCWdvdG8gdW5tYXBfcmVnczsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJkcml2ZXIgaW5pdGlhbGl6ZWRcbiIpOworCW9mX3JlZ2lzdGVyX3NwaV9kZXZpY2VzKG1hc3RlciwgbnApOworCisJcmV0dXJuIDA7CisKK3VubWFwX3JlZ3M6CisJaW91bm1hcChody0+cmVncyk7CittYXBfaW9fZXJyb3I6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGh3LT5tYXBiYXNlLCBody0+bWFwc2l6ZSk7CityZXF1ZXN0X21lbV9lcnJvcjoKKwlmcmVlX2lycShody0+aXJxbnVtLCBodyk7CitmcmVlX2dwaW9zOgorCWZyZWVfZ3Bpb3MoaHcpOworZnJlZV9tYXN0ZXI6CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCWRldl9lcnIoZGV2LCAiaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBzcGlfcHBjNHh4X29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgcHBjNHh4X3NwaSAqaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlzcGlfYml0YmFuZ19zdG9wKCZody0+Yml0YmFuZyk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaHctPm1hcGJhc2UsIGh3LT5tYXBzaXplKTsKKwlmcmVlX2lycShody0+aXJxbnVtLCBodyk7CisJaW91bm1hcChody0+cmVncyk7CisJZnJlZV9ncGlvcyhodyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9wcGM0eHhfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImlibSxwcGM0eHgtc3BpIiwgfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNwaV9wcGM0eHhfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBzcGlfcHBjNHh4X29mX2RyaXZlciA9IHsKKwkubWF0Y2hfdGFibGUgPSBzcGlfcHBjNHh4X29mX21hdGNoLAorCS5wcm9iZSA9IHNwaV9wcGM0eHhfb2ZfcHJvYmUsCisJLnJlbW92ZSA9IF9fZXhpdF9wKHNwaV9wcGM0eHhfb2ZfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3BpX3BwYzR4eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc3BpX3BwYzR4eF9vZl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc3BpX3BwYzR4eF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNwaV9wcGM0eHhfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzcGlfcHBjNHh4X29mX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzcGlfcHBjNHh4X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJHYXJ5IEplbm5lam9obiAmIFN0ZWZhbiBSb2VzZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTaW1wbGUgUFBDNHh4IFNQSSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCmluZGV4IDNmMzExOWQuLjMzZDk0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwpAQCAtMjAsMTcgKzIwLDI4IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLmg+CiAKKy8qKgorICogczNjMjR4eF9zcGlfZGV2c3RhdGUgLSBwZXIgZGV2aWNlIGRhdGEKKyAqIEBoejogTGFzdCBmcmVxdWVuY3kgY2FsY3VsYXRlZCBmb3IgQHNwcHJlIGZpZWxkLgorICogQG1vZGU6IExhc3QgbW9kZSBzZXR0aW5nIGZvciB0aGUgQHNwY29uIGZpZWxkLgorICogQHNwY29uOiBWYWx1ZSB0byB3cml0ZSB0byB0aGUgU1BDT04gcmVnaXN0ZXIuCisgKiBAc3BwcmU6IFZhbHVlIHRvIHdyaXRlIHRvIHRoZSBTUFBSRSByZWdpc3Rlci4KKyAqLworc3RydWN0IHMzYzI0eHhfc3BpX2RldnN0YXRlIHsKKwl1bnNpZ25lZCBpbnQJaHo7CisJdW5zaWduZWQgaW50CW1vZGU7CisJdTgJCXNwY29uOworCXU4CQlzcHByZTsKK307CisKIHN0cnVjdCBzM2MyNHh4X3NwaSB7CiAJLyogYml0YmFuZyBoYXMgdG8gYmUgZmlyc3QgKi8KIAlzdHJ1Y3Qgc3BpX2JpdGJhbmcJIGJpdGJhbmc7CkBAIC03MSw0MyArODIsMzEgQEAKIAogc3RhdGljIHZvaWQgczNjMjR4eF9zcGlfY2hpcHNlbChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCiB7CisJc3RydWN0IHMzYzI0eHhfc3BpX2RldnN0YXRlICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKIAlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gdG9faHcoc3BpKTsKIAl1bnNpZ25lZCBpbnQgY3Nwb2wgPSBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDEgOiAwOwotCXVuc2lnbmVkIGludCBzcGNvbjsKKworCS8qIGNoYW5nZSB0aGUgY2hpcHNlbGVjdCBzdGF0ZSBhbmQgdGhlIHN0YXRlIG9mIHRoZSBzcGkgZW5naW5lIGNsb2NrICovCiAKIAlzd2l0Y2ggKHZhbHVlKSB7CiAJY2FzZSBCSVRCQU5HX0NTX0lOQUNUSVZFOgogCQlody0+c2V0X2NzKGh3LT5wZGF0YSwgc3BpLT5jaGlwX3NlbGVjdCwgY3Nwb2xeMSk7CisJCXdyaXRlYihjcy0+c3Bjb24sIGh3LT5yZWdzICsgUzNDMjQxMF9TUENPTik7CiAJCWJyZWFrOwogCiAJY2FzZSBCSVRCQU5HX0NTX0FDVElWRToKLQkJc3Bjb24gPSByZWFkYihody0+cmVncyArIFMzQzI0MTBfU1BDT04pOwotCi0JCWlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkKLQkJCXNwY29uIHw9IFMzQzI0MTBfU1BDT05fQ1BIQV9GTVRCOwotCQllbHNlCi0JCQlzcGNvbiAmPSB+UzNDMjQxMF9TUENPTl9DUEhBX0ZNVEI7Ci0KLQkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQotCQkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9DUE9MX0hJR0g7Ci0JCWVsc2UKLQkJCXNwY29uICY9IH5TM0MyNDEwX1NQQ09OX0NQT0xfSElHSDsKLQotCQlzcGNvbiB8PSBTM0MyNDEwX1NQQ09OX0VOU0NLOwotCi0JCS8qIHdyaXRlIG5ldyBjb25maWdyYXRpb24gKi8KLQotCQl3cml0ZWIoc3Bjb24sIGh3LT5yZWdzICsgUzNDMjQxMF9TUENPTik7CisJCXdyaXRlYihjcy0+c3Bjb24gfCBTM0MyNDEwX1NQQ09OX0VOU0NLLAorCQkgICAgICAgaHctPnJlZ3MgKyBTM0MyNDEwX1NQQ09OKTsKIAkJaHctPnNldF9jcyhody0+cGRhdGEsIHNwaS0+Y2hpcF9zZWxlY3QsIGNzcG9sKTsKLQogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zcGlfc2V0dXB4ZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCi0JCQkJIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3VwZGF0ZV9zdGF0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSAgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQogewogCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSB0b19odyhzcGkpOworCXN0cnVjdCBzM2MyNHh4X3NwaV9kZXZzdGF0ZSAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CiAJdW5zaWduZWQgaW50IGJwdzsKIAl1bnNpZ25lZCBpbnQgaHo7CiAJdW5zaWduZWQgaW50IGRpdjsKQEAgLTEyNywxNyArMTI2LDczIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNsayA9IGNsa19nZXRfcmF0ZShody0+Y2xrKTsKLQlkaXYgPSBESVZfUk9VTkRfVVAoY2xrLCBoeiAqIDIpIC0gMTsKKwlpZiAoc3BpLT5tb2RlICE9IGNzLT5tb2RlKSB7CisJCXU4IHNwY29uID0gU1BDT05fREVGQVVMVDsKIAotCWlmIChkaXYgPiAyNTUpCi0JCWRpdiA9IDI1NTsKKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQorCQkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9DUEhBX0ZNVEI7CiAKLQlkZXZfZGJnKCZzcGktPmRldiwgInNldHRpbmcgcHJlLXNjYWxlciB0byAlZCAod2FudGVkICVkLCBnb3QgJWxkKVxuIiwKLQkJZGl2LCBoeiwgY2xrIC8gKDIgKiAoZGl2ICsgMSkpKTsKKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQorCQkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9DUE9MX0hJR0g7CiAKKwkJY3MtPm1vZGUgPSBzcGktPm1vZGU7CisJCWNzLT5zcGNvbiA9IHNwY29uOworCX0KIAotCXdyaXRlYihkaXYsIGh3LT5yZWdzICsgUzNDMjQxMF9TUFBSRSk7CisJaWYgKGNzLT5oeiAhPSBoeikgeworCQljbGsgPSBjbGtfZ2V0X3JhdGUoaHctPmNsayk7CisJCWRpdiA9IERJVl9ST1VORF9VUChjbGssIGh6ICogMikgLSAxOworCisJCWlmIChkaXYgPiAyNTUpCisJCQlkaXYgPSAyNTU7CisKKwkJZGV2X2RiZygmc3BpLT5kZXYsICJwcmUtc2NhbGVyPSVkICh3YW50ZWQgJWQsIGdvdCAlbGQpXG4iLAorCQkJZGl2LCBoeiwgY2xrIC8gKDIgKiAoZGl2ICsgMSkpKTsKKworCQljcy0+aHogPSBoejsKKwkJY3MtPnNwcHJlID0gZGl2OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBzM2MyNHh4X3NwaV9kZXZzdGF0ZSAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHRvX2h3KHNwaSk7CisJaW50IHJldDsKKworCXJldCA9IHMzYzI0eHhfc3BpX3VwZGF0ZV9zdGF0ZShzcGksIHQpOworCWlmICghcmV0KQorCQl3cml0ZWIoY3MtPnNwcHJlLCBody0+cmVncyArIFMzQzI0MTBfU1BQUkUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzM2MyNHh4X3NwaV9kZXZzdGF0ZSAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHRvX2h3KHNwaSk7CisJaW50IHJldDsKKworCS8qIGFsbG9jYXRlIHNldHRpbmdzIG9uIHRoZSBmaXJzdCBjYWxsICovCisJaWYgKCFjcykgeworCQljcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X3NwaV9kZXZzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIWNzKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgIm5vIG1lbW9yeSBmb3IgY29udHJvbGxlciBzdGF0ZVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWNzLT5zcGNvbiA9IFNQQ09OX0RFRkFVTFQ7CisJCWNzLT5oeiA9IC0xOworCQlzcGktPmNvbnRyb2xsZXJfc3RhdGUgPSBjczsKKwl9CisKKwkvKiBpbml0aWFsaXNlIHRoZSBzdGF0ZSBmcm9tIHRoZSBkZXZpY2UgKi8KKwlyZXQgPSBzM2MyNHh4X3NwaV91cGRhdGVfc3RhdGUoc3BpLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrKCZody0+Yml0YmFuZy5sb2NrKTsKIAlpZiAoIWh3LT5iaXRiYW5nLmJ1c3kpIHsKQEAgLTE0OSwxNyArMjA0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNHh4X3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIHZvaWQgczNjMjR4eF9zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBzM2MyNHh4X3NwaV9zZXR1cHhmZXIoc3BpLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZzcGktPmRldiwgInNldHVweGZlciByZXR1cm5lZCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlrZnJlZShzcGktPmNvbnRyb2xsZXJfc3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod190eGJ5dGUoc3RydWN0IHMzYzI0eHhfc3BpICpodywgaW50IGNvdW50KQpAQCAtMjg5LDcgKzMzNiw5IEBACiAJaHctPmJpdGJhbmcuc2V0dXBfdHJhbnNmZXIgPSBzM2MyNHh4X3NwaV9zZXR1cHhmZXI7CiAJaHctPmJpdGJhbmcuY2hpcHNlbGVjdCAgICAgPSBzM2MyNHh4X3NwaV9jaGlwc2VsOwogCWh3LT5iaXRiYW5nLnR4cnhfYnVmcyAgICAgID0gczNjMjR4eF9zcGlfdHhyeDsKLQlody0+Yml0YmFuZy5tYXN0ZXItPnNldHVwICA9IHMzYzI0eHhfc3BpX3NldHVwOworCisJaHctPm1hc3Rlci0+c2V0dXAgID0gczNjMjR4eF9zcGlfc2V0dXA7CisJaHctPm1hc3Rlci0+Y2xlYW51cCA9IHMzYzI0eHhfc3BpX2NsZWFudXA7CiAKIAlkZXZfZGJnKGh3LT5kZXYsICJiaXRiYW5nIGF0ICVwXG4iLCAmaHctPmJpdGJhbmcpOwogCkBAIC0zMDIsNyArMzUxLDcgQEAKIAkJZ290byBlcnJfbm9faW9yZXM7CiAJfQogCi0JaHctPmlvYXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSsxLAorCWh3LT5pb2FyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCQlwZGV2LT5uYW1lKTsKIAogCWlmIChody0+aW9hcmVhID09IE5VTEwpIHsKQEAgLTMxMSw3ICszNjAsNyBAQAogCQlnb3RvIGVycl9ub19pb3JlczsKIAl9CiAKLQlody0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMSk7CisJaHctPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGh3LT5yZWdzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBJT1xuIik7CiAJCWVyciA9IC1FTlhJTzsKQEAgLTM4OCw3ICs0MzcsNyBAQAogCiAgZXJyX25vX2lvcmVzOgogIGVycl9ub19wZGF0YToKLQlzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTs7CisJc3BpX21hc3Rlcl9wdXQoaHctPm1hc3Rlcik7CiAKICBlcnJfbm9tZW06CiAJcmV0dXJuIGVycjsKQEAgLTQyMSw5ICs0NzAsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zcGlfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQorc3RhdGljIGludCBzM2MyNHh4X3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKIAogCWlmIChody0+cGRhdGEgJiYgaHctPnBkYXRhLT5ncGlvX3NldHVwKQogCQlody0+cGRhdGEtPmdwaW9fc2V0dXAoaHctPnBkYXRhLCAwKTsKQEAgLTQzMiwyNyArNDgxLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CiAKIAlzM2MyNHh4X3NwaV9pbml0aWFsc2V0dXAoaHcpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgczNjMjR4eF9zcGlfcG1vcHMgPSB7CisJLnN1c3BlbmQJPSBzM2MyNHh4X3NwaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9zcGlfcmVzdW1lLAorfTsKKworI2RlZmluZSBTM0MyNFhYX1NQSV9QTU9QUyAmczNjMjR4eF9zcGlfcG1vcHMKICNlbHNlCi0jZGVmaW5lIHMzYzI0eHhfc3BpX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNHh4X3NwaV9yZXN1bWUgIE5VTEwKLSNlbmRpZgorI2RlZmluZSBTM0MyNFhYX1NQSV9QTU9QUyBOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMC1zcGkiKTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0eHhfc3BpX2RyaXZlciA9IHsKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHMzYzI0eHhfc3BpX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBzM2MyNHh4X3NwaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjMjR4eF9zcGlfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzM2MyNDEwLXNwaSIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSBTM0MyNFhYX1NQSV9QTU9QUywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3N0bXAuYyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg3MWRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBGcmVlc2NhbGUgU1RNUDM3OFggU1BJIG1hc3RlciBkcml2ZXIKKyAqCisgKiBBdXRob3I6IGRtaXRyeSBwZXJ2dXNoaW4gPGRpbWthQGVtYmVkZGVkYWxsZXkuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBFbWJlZGRlZCBBbGxleSBTb2x1dGlvbnMsIEluYyBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKy8qCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxtYWNoL3N0bXAzeHh4Lmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmguaD4KKworCisvKiAwIG1lYW5zIERNQSBtb2RlKHJlY29tbWVuZGVkLCBkZWZhdWx0KSwgITAgLSBQSU8gbW9kZSAqLworc3RhdGljIGludCBwaW87CitzdGF0aWMgaW50IGNsb2NrOworCisvKiBkZWZhdWx0IHRpbWVvdXQgZm9yIGJ1c3kgd2FpdHMgaXMgMiBzZWNvbmRzICovCisjZGVmaW5lIFNUTVBfU1BJX1RJTUVPVVQJKDIgKiBIWikKKworc3RydWN0IHN0bXBfc3BpIHsKKwlpbnQJCWlkOworCisJdm9pZCAqICBfX2lvbWVtIHJlZ3M7CS8qIHZhZGRyIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVycyAqLworCisJaW50CQlpcnEsIGVycl9pcnE7CisJdTMyCQlkbWE7CisJc3RydWN0IHN0bXAzeHh4X2RtYV9kZXNjcmlwdG9yIGQ7CisKKwl1MzIJCXNwZWVkX2toejsKKwl1MzIJCXNhdmVkX3RpbWluZ3M7CisJdTMyCQlkaXZpZGVyOworCisJc3RydWN0IGNsawkqY2xrOworCXN0cnVjdCBkZXZpY2UJKm1hc3Rlcl9kZXY7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOworCisJLyogbG9jayBwcm90ZWN0cyBxdWV1ZSBhY2Nlc3MgKi8KKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Cit9OworCisjZGVmaW5lIGJ1c3lfd2FpdChjb25kKQkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGVuZF9qaWZmaWVzID0gamlmZmllcyArIFNUTVBfU1BJX1RJTUVPVVQ7CQlcCisJYm9vbCBzdWNjZWVkZWQgPSBmYWxzZTsJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoY29uZCkgewkJCQkJCVwKKwkJCXN1Y2NlZWRlZCA9IHRydWU7CQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJCWNwdV9yZWxheCgpOwkJCQkJCVwKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShlbmRfamlmZmllcywgamlmZmllcykpOwkJCVwKKwlzdWNjZWVkZWQ7CQkJCQkJCVwKKwl9KQorCisvKioKKyAqIHN0bXBfc3BpX2luaXRfaHcKKyAqIEluaXRpYWxpemUgdGhlIFNTUCBwb3J0CisgKi8KK3N0YXRpYyBpbnQgc3RtcF9zcGlfaW5pdF9odyhzdHJ1Y3Qgc3RtcF9zcGkgKnNzKQoreworCWludCBlcnIgPSAwOworCXZvaWQgKnBpbnMgPSBzcy0+bWFzdGVyX2Rldi0+cGxhdGZvcm1fZGF0YTsKKworCWVyciA9IHN0bXAzeHh4X3JlcXVlc3RfcGluX2dyb3VwKHBpbnMsIGRldl9uYW1lKHNzLT5tYXN0ZXJfZGV2KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzcy0+Y2xrID0gY2xrX2dldChOVUxMLCAic3NwIik7CisJaWYgKElTX0VSUihzcy0+Y2xrKSkgeworCQllcnIgPSBQVFJfRVJSKHNzLT5jbGspOworCQlnb3RvIG91dF9mcmVlX3BpbnM7CisJfQorCWNsa19lbmFibGUoc3MtPmNsayk7CisKKwlzdG1wM3h4eF9yZXNldF9ibG9jayhzcy0+cmVncywgZmFsc2UpOworCXN0bXAzeHh4X2RtYV9yZXNldF9jaGFubmVsKHNzLT5kbWEpOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlX3BpbnM6CisJc3RtcDN4eHhfcmVsZWFzZV9waW5fZ3JvdXAocGlucywgZGV2X25hbWUoc3MtPm1hc3Rlcl9kZXYpKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzdG1wX3NwaV9yZWxlYXNlX2h3KHN0cnVjdCBzdG1wX3NwaSAqc3MpCit7CisJdm9pZCAqcGlucyA9IHNzLT5tYXN0ZXJfZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHNzLT5jbGsgJiYgIUlTX0VSUihzcy0+Y2xrKSkgeworCQljbGtfZGlzYWJsZShzcy0+Y2xrKTsKKwkJY2xrX3B1dChzcy0+Y2xrKTsKKwl9CisJc3RtcDN4eHhfcmVsZWFzZV9waW5fZ3JvdXAocGlucywgZGV2X25hbWUoc3MtPm1hc3Rlcl9kZXYpKTsKK30KKworc3RhdGljIGludCBzdG1wX3NwaV9zZXR1cF90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXU4IGJpdHNfcGVyX3dvcmQ7CisJdTMyIGh6OworCXN0cnVjdCBzdG1wX3NwaSAqc3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1MTYgcmF0ZTsKKworCWJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisJaWYgKHQgJiYgdC0+Yml0c19wZXJfd29yZCkKKwkJYml0c19wZXJfd29yZCA9IHQtPmJpdHNfcGVyX3dvcmQ7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBzcGVlZDoKKwkgKgktIGJ5IGRlZmF1bHQsIHVzZSBtYXhpbXVtIHNwZWVkIGZyb20gc3NwIGNsaworCSAqCS0gaWYgZGV2aWNlIG92ZXJyaWRlcyBpdCwgdXNlIGl0CisJICoJLSBpZiB0cmFuc2ZlciBzcGVjaWZpZXMgb3RoZXIgc3BlZWQsIHVzZSB0cmFuc2ZlcidzIG9uZQorCSAqLworCWh6ID0gMTAwMCAqIHNzLT5zcGVlZF9raHogLyBzcy0+ZGl2aWRlcjsKKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHopCisJCWh6ID0gbWluKGh6LCBzcGktPm1heF9zcGVlZF9oeik7CisJaWYgKHQgJiYgdC0+c3BlZWRfaHopCisJCWh6ID0gbWluKGh6LCB0LT5zcGVlZF9oeik7CisKKwlpZiAoaHogPT0gMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIkNhbm5vdCBjb250aW51ZSB3aXRoIHplcm8gY2xvY2tcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYml0c19wZXJfd29yZCAhPSA4KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiJXMsIHVuc3VwcG9ydGVkIGJpdHNfcGVyX3dvcmQ9JWRcbiIsCisJCQlfX2Z1bmNfXywgYml0c19wZXJfd29yZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoJnNwaS0+ZGV2LCAiUmVxdWVzdGVkIGNsayByYXRlID0gJXVIeiwgbWF4ID0gJXVIei8lZCA9ICV1SHpcbiIsCisJCWh6LCBzcy0+c3BlZWRfa2h6LCBzcy0+ZGl2aWRlciwKKwkJc3MtPnNwZWVkX2toeiAqIDEwMDAgLyBzcy0+ZGl2aWRlcik7CisKKwlpZiAoc3MtPnNwZWVkX2toeiAqIDEwMDAgLyBzcy0+ZGl2aWRlciA8IGh6KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiJXMsIHVuc3VwcG9ydGVkIGNsb2NrIHJhdGUgJXVIelxuIiwKKwkJCV9fZnVuY19fLCBoeik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJhdGUgPSAxMDAwICogc3MtPnNwZWVkX2toei9zcy0+ZGl2aWRlci9oejsKKworCXdyaXRlbChCRihzcy0+ZGl2aWRlciwgU1NQX1RJTUlOR19DTE9DS19ESVZJREUpCQl8CisJICAgICAgIEJGKHJhdGUgLSAxLCBTU1BfVElNSU5HX0NMT0NLX1JBVEUpLAorCSAgICAgICBIV19TU1BfVElNSU5HICsgc3MtPnJlZ3MpOworCisJd3JpdGVsKEJGKDEgLyogbW9kZSBTUEkgKi8sIFNTUF9DVFJMMV9TU1BfTU9ERSkJCXwKKwkgICAgICAgQkYoNCAvKiA4IGJpdHMgICAqLywgU1NQX0NUUkwxX1dPUkRfTEVOR1RIKQl8CisJICAgICAgICgoc3BpLT5tb2RlICYgU1BJX0NQT0wpID8gQk1fU1NQX0NUUkwxX1BPTEFSSVRZIDogMCkgfAorCSAgICAgICAoKHNwaS0+bW9kZSAmIFNQSV9DUEhBKSA/IEJNX1NTUF9DVFJMMV9QSEFTRSA6IDApIHwKKwkgICAgICAgKHBpbyA/IDAgOiBCTV9TU1BfQ1RSTDFfRE1BX0VOQUJMRSksCisJICAgICAgIHNzLT5yZWdzICsgSFdfU1NQX0NUUkwxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bXBfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJLyogc3BpX3NldHVwKCkgZG9lcyBiYXNpYyBjaGVja3MsCisJICogc3RtcF9zcGlfc2V0dXBfdHJhbnNmZXIoKSBkb2VzIG1vcmUgbGF0ZXIKKwkgKi8KKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkICE9IDgpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICIlcywgdW5zdXBwb3J0ZWQgYml0c19wZXJfd29yZD0lZFxuIiwKKwkJCV9fZnVuY19fLCBzcGktPmJpdHNfcGVyX3dvcmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHN0bXBfc3BpX2NzKHVuc2lnbmVkIGNzKQoreworCXJldHVybiAgKChjcyAmIDEpID8gQk1fU1NQX0NUUkwwX1dBSVRfRk9SX0NNRCA6IDApIHwKKwkJKChjcyAmIDIpID8gQk1fU1NQX0NUUkwwX1dBSVRfRk9SX0lSUSA6IDApOworfQorCitzdGF0aWMgaW50IHN0bXBfc3BpX3R4cnhfZG1hKHN0cnVjdCBzdG1wX3NwaSAqc3MsIGludCBjcywKKwkJdW5zaWduZWQgY2hhciAqYnVmLCBkbWFfYWRkcl90IGRtYV9idWYsIGludCBsZW4sCisJCWludCBmaXJzdCwgaW50IGxhc3QsIGJvb2wgd3JpdGUpCit7CisJdTMyIGMwID0gMDsKKwlkbWFfYWRkcl90IHNwaV9idWZfZG1hID0gZG1hX2J1ZjsKKwlpbnQgc3RhdHVzID0gMDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSB3cml0ZSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0U7CisKKwljMCB8PSAoZmlyc3QgPyBCTV9TU1BfQ1RSTDBfTE9DS19DUyA6IDApOworCWMwIHw9IChsYXN0ID8gQk1fU1NQX0NUUkwwX0lHTk9SRV9DUkMgOiAwKTsKKwljMCB8PSAod3JpdGUgPyAwIDogQk1fU1NQX0NUUkwwX1JFQUQpOworCWMwIHw9IEJNX1NTUF9DVFJMMF9EQVRBX1hGRVI7CisKKwljMCB8PSBzdG1wX3NwaV9jcyhjcyk7CisKKwljMCB8PSBCRihsZW4sIFNTUF9DVFJMMF9YRkVSX0NPVU5UKTsKKworCWlmICghZG1hX2J1ZikKKwkJc3BpX2J1Zl9kbWEgPSBkbWFfbWFwX3NpbmdsZShzcy0+bWFzdGVyX2RldiwgYnVmLCBsZW4sIGRpcik7CisKKwlzcy0+ZC5jb21tYW5kLT5jbWQgPQorCQlCRihsZW4sIEFQQkhfQ0huX0NNRF9YRkVSX0NPVU5UKQl8CisJCUJGKDEsIEFQQkhfQ0huX0NNRF9DTURXT1JEUykJCXwKKwkJQk1fQVBCSF9DSG5fQ01EX1dBSVQ0RU5EQ01ECQl8CisJCUJNX0FQQkhfQ0huX0NNRF9JUlFPTkNNUExUCQl8CisJCUJGKHdyaXRlID8gQlZfQVBCSF9DSG5fQ01EX0NPTU1BTkRfX0RNQV9SRUFEIDoKKwkJCSAgIEJWX0FQQkhfQ0huX0NNRF9DT01NQU5EX19ETUFfV1JJVEUsCisJCSAgIEFQQkhfQ0huX0NNRF9DT01NQU5EKTsKKwlzcy0+ZC5jb21tYW5kLT5waW9fd29yZHNbMF0gPSBjMDsKKwlzcy0+ZC5jb21tYW5kLT5idWZfcHRyID0gc3BpX2J1Zl9kbWE7CisKKwlzdG1wM3h4eF9kbWFfcmVzZXRfY2hhbm5lbChzcy0+ZG1hKTsKKwlzdG1wM3h4eF9kbWFfY2xlYXJfaW50ZXJydXB0KHNzLT5kbWEpOworCXN0bXAzeHh4X2RtYV9lbmFibGVfaW50ZXJydXB0KHNzLT5kbWEpOworCWluaXRfY29tcGxldGlvbigmc3MtPmRvbmUpOworCXN0bXAzeHh4X2RtYV9nbyhzcy0+ZG1hLCAmc3MtPmQsIDEpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNzLT5kb25lKTsKKworCWlmICghYnVzeV93YWl0KHJlYWRsKHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKSAmIEJNX1NTUF9DVFJMMF9SVU4pKQorCQlzdGF0dXMgPSBFVElNRURPVVQ7CisKKwlpZiAoIWRtYV9idWYpCisJCWRtYV91bm1hcF9zaW5nbGUoc3MtPm1hc3Rlcl9kZXYsIHNwaV9idWZfZG1hLCBsZW4sIGRpcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtcF9zcGlfZW5hYmxlKHN0cnVjdCBzdG1wX3NwaSAqc3MpCit7CisJc3RtcDN4eHhfc2V0bChCTV9TU1BfQ1RSTDBfTE9DS19DUywgc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworCXN0bXAzeHh4X2NsZWFybChCTV9TU1BfQ1RSTDBfSUdOT1JFX0NSQywgc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtcF9zcGlfZGlzYWJsZShzdHJ1Y3Qgc3RtcF9zcGkgKnNzKQoreworCXN0bXAzeHh4X2NsZWFybChCTV9TU1BfQ1RSTDBfTE9DS19DUywgc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworCXN0bXAzeHh4X3NldGwoQk1fU1NQX0NUUkwwX0lHTk9SRV9DUkMsIHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKTsKK30KKworc3RhdGljIGludCBzdG1wX3NwaV90eHJ4X3BpbyhzdHJ1Y3Qgc3RtcF9zcGkgKnNzLCBpbnQgY3MsCisJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJYm9vbCBmaXJzdCwgYm9vbCBsYXN0LCBib29sIHdyaXRlKQoreworCWlmIChmaXJzdCkKKwkJc3RtcF9zcGlfZW5hYmxlKHNzKTsKKworCXN0bXAzeHh4X3NldGwoc3RtcF9zcGlfY3MoY3MpLCBzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJaWYgKGxhc3QgJiYgbGVuIDw9IDApCisJCQlzdG1wX3NwaV9kaXNhYmxlKHNzKTsKKworCQlzdG1wM3h4eF9jbGVhcmwoQk1fU1NQX0NUUkwwX1hGRVJfQ09VTlQsCisJCQkJc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworCQlzdG1wM3h4eF9zZXRsKDEsIHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKTsKKworCQlpZiAod3JpdGUpCisJCQlzdG1wM3h4eF9jbGVhcmwoQk1fU1NQX0NUUkwwX1JFQUQsCisJCQkJCXNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKTsKKwkJZWxzZQorCQkJc3RtcDN4eHhfc2V0bChCTV9TU1BfQ1RSTDBfUkVBRCwKKwkJCQkJc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworCisJCS8qIFJ1biEgKi8KKwkJc3RtcDN4eHhfc2V0bChCTV9TU1BfQ1RSTDBfUlVOLCBzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7CisKKwkJaWYgKCFidXN5X3dhaXQocmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApICYKKwkJCQlCTV9TU1BfQ1RSTDBfUlVOKSkKKwkJCWJyZWFrOworCisJCWlmICh3cml0ZSkKKwkJCXdyaXRlbCgqYnVmLCBzcy0+cmVncyArIEhXX1NTUF9EQVRBKTsKKworCQkvKiBTZXQgVFJBTlNGRVIgKi8KKwkJc3RtcDN4eHhfc2V0bChCTV9TU1BfQ1RSTDBfREFUQV9YRkVSLCBzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7CisKKwkJaWYgKCF3cml0ZSkgeworCQkJaWYgKGJ1c3lfd2FpdCgocmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfU1RBVFVTKSAmCisJCQkJCUJNX1NTUF9TVEFUVVNfRklGT19FTVBUWSkpKQorCQkJCWJyZWFrOworCQkJKmJ1ZiA9IHJlYWRsKHNzLT5yZWdzICsgSFdfU1NQX0RBVEEpICYgMHhGRjsKKwkJfQorCisJCWlmICghYnVzeV93YWl0KHJlYWRsKHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKSAmCisJCQkJCUJNX1NTUF9DVFJMMF9SVU4pKQorCQkJYnJlYWs7CisKKwkJLyogYWR2YW5jZSB0byB0aGUgbmV4dCBieXRlICovCisJCWJ1ZisrOworCX0KKworCXJldHVybiBsZW4gPCAwID8gMCA6IC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgc3RtcF9zcGlfaGFuZGxlX21lc3NhZ2Uoc3RydWN0IHN0bXBfc3BpICpzcywgc3RydWN0IHNwaV9tZXNzYWdlICptKQoreworCWJvb2wgZmlyc3QsIGxhc3Q7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqdCwgKnRtcF90OworCWludCBzdGF0dXMgPSAwOworCWludCBjczsKKworCWNzID0gbS0+c3BpLT5jaGlwX3NlbGVjdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0LCB0bXBfdCwgJm0tPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCisJCWZpcnN0ID0gKCZ0LT50cmFuc2Zlcl9saXN0ID09IG0tPnRyYW5zZmVycy5uZXh0KTsKKwkJbGFzdCA9ICgmdC0+dHJhbnNmZXJfbGlzdCA9PSBtLT50cmFuc2ZlcnMucHJldik7CisKKwkJaWYgKGZpcnN0IHx8IHQtPnNwZWVkX2h6IHx8IHQtPmJpdHNfcGVyX3dvcmQpCisJCQlzdG1wX3NwaV9zZXR1cF90cmFuc2ZlcihtLT5zcGksIHQpOworCisJCS8qIHJlamVjdCAibm90IGxhc3QiIHRyYW5zZmVycyB3aGljaCByZXF1ZXN0IHRvIGNoYW5nZSBjcyAqLworCQlpZiAodC0+Y3NfY2hhbmdlICYmICFsYXN0KSB7CisJCQlkZXZfZXJyKCZtLT5zcGktPmRldiwKKwkJCQkiTWVzc2FnZSB3aXRoIHQtPmNzX2NoYW5nZSBoYXMgYmVlbiBza2lwcGVkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHQtPnR4X2J1ZikgeworCQkJc3RhdHVzID0gcGlvID8KKwkJCSAgIHN0bXBfc3BpX3R4cnhfcGlvKHNzLCBjcywgKHZvaWQgKil0LT50eF9idWYsCisJCQkJICAgdC0+bGVuLCBmaXJzdCwgbGFzdCwgdHJ1ZSkgOgorCQkJICAgc3RtcF9zcGlfdHhyeF9kbWEoc3MsIGNzLCAodm9pZCAqKXQtPnR4X2J1ZiwKKwkJCQkgICB0LT50eF9kbWEsIHQtPmxlbiwgZmlyc3QsIGxhc3QsIHRydWUpOworI2lmZGVmIERFQlVHCisJCQlpZiAodC0+bGVuIDwgMHgxMCkKKwkJCQlwcmludF9oZXhfZHVtcF9ieXRlcygiVHggIiwKKwkJCQkJRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCQl0LT50eF9idWYsIHQtPmxlbik7CisJCQllbHNlCisJCQkJcHJfZGVidWcoIlR4OiAlZCBieXRlc1xuIiwgdC0+bGVuKTsKKyNlbmRpZgorCQl9CisJCWlmICh0LT5yeF9idWYpIHsKKwkJCXN0YXR1cyA9IHBpbyA/CisJCQkgICBzdG1wX3NwaV90eHJ4X3BpbyhzcywgY3MsIHQtPnJ4X2J1ZiwKKwkJCQkgICB0LT5sZW4sIGZpcnN0LCBsYXN0LCBmYWxzZSkgOgorCQkJICAgc3RtcF9zcGlfdHhyeF9kbWEoc3MsIGNzLCB0LT5yeF9idWYsCisJCQkJICAgdC0+cnhfZG1hLCB0LT5sZW4sIGZpcnN0LCBsYXN0LCBmYWxzZSk7CisjaWZkZWYgREVCVUcKKwkJCWlmICh0LT5sZW4gPCAweDEwKQorCQkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJSeCAiLAorCQkJCQlEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCXQtPnJ4X2J1ZiwgdC0+bGVuKTsKKwkJCWVsc2UKKwkJCQlwcl9kZWJ1ZygiUng6ICVkIGJ5dGVzXG4iLCB0LT5sZW4pOworI2VuZGlmCisJCX0KKworCQlpZiAodC0+ZGVsYXlfdXNlY3MpCisJCQl1ZGVsYXkodC0+ZGVsYXlfdXNlY3MpOworCisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHN0bXBfc3BpX2hhbmRsZSAtIGhhbmRsZSBtZXNzYWdlcyBmcm9tIHRoZSBxdWV1ZQorICovCitzdGF0aWMgdm9pZCBzdG1wX3NwaV9oYW5kbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBzdG1wX3NwaSAqc3MgPSBjb250YWluZXJfb2Yodywgc3RydWN0IHN0bXBfc3BpLCB3b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcy0+bG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmc3MtPnF1ZXVlKSkgeworCQltID0gbGlzdF9lbnRyeShzcy0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisJCWxpc3RfZGVsX2luaXQoJm0tPnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3MtPmxvY2ssIGZsYWdzKTsKKworCQltLT5zdGF0dXMgPSBzdG1wX3NwaV9oYW5kbGVfbWVzc2FnZShzcywgbSk7CisJCW0tPmNvbXBsZXRlKG0tPmNvbnRleHQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzcy0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuOworfQorCisvKioKKyAqIHN0bXBfc3BpX3RyYW5zZmVyIC0gcGVyZm9ybSBtZXNzYWdlIHRyYW5zZmVyLgorICogQ2FsbGVkIGluZGlyZWN0bHkgZnJvbSBzcGlfYXN5bmMsIHF1ZXVlcyBhbGwgdGhlIG1lc3NhZ2VzIHRvCisgKiBzcGlfaGFuZGxlX21lc3NhZ2UuCisgKiBAc3BpOiBzcGkgZGV2aWNlCisgKiBAbTogbWVzc2FnZSB0byBiZSBxdWV1ZWQKKyAqLworc3RhdGljIGludCBzdG1wX3NwaV90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm0pCit7CisJc3RydWN0IHN0bXBfc3BpICpzcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNzLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbS0+cXVldWUsICZzcy0+cXVldWUpOworCXF1ZXVlX3dvcmsoc3MtPndvcmtxdWV1ZSwgJnNzLT53b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtcF9zcGlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc3RtcF9zcGkgKnNzID0gZGV2X2lkOworCisJc3RtcDN4eHhfZG1hX2NsZWFyX2ludGVycnVwdChzcy0+ZG1hKTsKKwljb21wbGV0ZSgmc3MtPmRvbmUpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHN0bXBfc3BpX2lycV9lcnIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzdG1wX3NwaSAqc3MgPSBkZXZfaWQ7CisJdTMyIGMxLCBzdDsKKworCWMxID0gcmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDEpOworCXN0ID0gcmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfU1RBVFVTKTsKKwlkZXZfZXJyKHNzLT5tYXN0ZXJfZGV2LCAiJXM6IHN0YXR1cyA9IDB4JTA4WCwgYzEgPSAweCUwOFhcbiIsCisJCV9fZnVuY19fLCBzdCwgYzEpOworCXN0bXAzeHh4X2NsZWFybChjMSAmIDB4Q0NDQzAwMDAsIHNzLT5yZWdzICsgSFdfU1NQX0NUUkwxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3RtcF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHN0bXBfc3BpICpzczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBzdG1wX3NwaSkpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDA7CisJfQorCW1hc3Rlci0+ZmxhZ3MgPSBTUElfTUFTVEVSX0hBTEZfRFVQTEVYOworCisJc3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBtYXN0ZXIpOworCisJLyogR2V0IHJlc291cmNlcyhtZW1vcnksIElSUSkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcHV0X21hc3RlcjsKKwl9CisJc3MtPnJlZ3MgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKKwlpZiAoIXNzLT5yZWdzKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3B1dF9tYXN0ZXI7CisJfQorCisJc3MtPm1hc3Rlcl9kZXYgPSAmZGV2LT5kZXY7CisJc3MtPmlkID0gZGV2LT5pZDsKKworCUlOSVRfV09SSygmc3MtPndvcmssIHN0bXBfc3BpX2hhbmRsZSk7CisJSU5JVF9MSVNUX0hFQUQoJnNzLT5xdWV1ZSk7CisJc3Bpbl9sb2NrX2luaXQoJnNzLT5sb2NrKTsKKworCXNzLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXZfbmFtZSgmZGV2LT5kZXYpKTsKKwlpZiAoIXNzLT53b3JrcXVldWUpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dF9wdXRfbWFzdGVyOworCX0KKwltYXN0ZXItPnRyYW5zZmVyID0gc3RtcF9zcGlfdHJhbnNmZXI7CisJbWFzdGVyLT5zZXR1cCA9IHN0bXBfc3BpX3NldHVwOworCisJLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBOworCisJc3MtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlpZiAoc3MtPmlycSA8IDApIHsKKwkJZXJyID0gc3MtPmlycTsKKwkJZ290byBvdXRfcHV0X21hc3RlcjsKKwl9CisJc3MtPmVycl9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMSk7CisJaWYgKHNzLT5lcnJfaXJxIDwgMCkgeworCQllcnIgPSBzcy0+ZXJyX2lycTsKKwkJZ290byBvdXRfcHV0X21hc3RlcjsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcHV0X21hc3RlcjsKKwl9CisKKwlzcy0+ZG1hID0gci0+c3RhcnQ7CisJZXJyID0gc3RtcDN4eHhfZG1hX3JlcXVlc3Qoc3MtPmRtYSwgJmRldi0+ZGV2LCBkZXZfbmFtZSgmZGV2LT5kZXYpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9wdXRfbWFzdGVyOworCisJZXJyID0gc3RtcDN4eHhfZG1hX2FsbG9jYXRlX2NvbW1hbmQoc3MtPmRtYSwgJnNzLT5kKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2RtYTsKKworCW1hc3Rlci0+YnVzX251bSA9IGRldi0+aWQ7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IDE7CisKKwkvKiBTUEkgY29udHJvbGxlciBpbml0aWFsaXphdGlvbnMgKi8KKwllcnIgPSBzdG1wX3NwaV9pbml0X2h3KHNzKTsKKwlpZiAoZXJyKSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiY2Fubm90IGluaXRpYWxpemUgaGFyZHdhcmVcbiIpOworCQlnb3RvIG91dF9mcmVlX2RtYV9kZXNjOworCX0KKworCWlmIChjbG9jaykgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJjbG9jayByYXRlIGZvcmNlZCB0byAlZFxuIiwgY2xvY2spOworCQljbGtfc2V0X3JhdGUoc3MtPmNsaywgY2xvY2spOworCX0KKwlzcy0+c3BlZWRfa2h6ID0gY2xrX2dldF9yYXRlKHNzLT5jbGspOworCXNzLT5kaXZpZGVyID0gMjsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJtYXggcG9zc2libGUgc3BlZWQgJWQgPSAlbGQvJWQga0h6XG4iLAorCQlzcy0+c3BlZWRfa2h6LCBjbGtfZ2V0X3JhdGUoc3MtPmNsayksIHNzLT5kaXZpZGVyKTsKKworCS8qIFJlZ2lzdGVyIGZvciBTUEkgaW50ZXJydXB0ICovCisJZXJyID0gcmVxdWVzdF9pcnEoc3MtPmlycSwgc3RtcF9zcGlfaXJxLCAwLAorCQkJICBkZXZfbmFtZSgmZGV2LT5kZXYpLCBzcyk7CisJaWYgKGVycikgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgJWRcbiIsIGVycik7CisJCWdvdG8gb3V0X3JlbGVhc2VfaHc7CisJfQorCisJLyogLi5hbmQgc2hhcmVkIGludGVycnVwdCBmb3IgYWxsIFNTUCBjb250cm9sbGVycyAqLworCWVyciA9IHJlcXVlc3RfaXJxKHNzLT5lcnJfaXJxLCBzdG1wX3NwaV9pcnFfZXJyLCBJUlFGX1NIQVJFRCwKKwkJCSAgZGV2X25hbWUoJmRldi0+ZGV2KSwgc3MpOworCWlmIChlcnIpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJyZXF1ZXN0X2lycShlcnJvcikgZmFpbGVkLCAlZFxuIiwgZXJyKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJZXJyID0gc3BpX3JlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgc3BpIG1hc3RlciwgJWRcbiIsIGVycik7CisJCWdvdG8gb3V0X2ZyZWVfaXJxXzI7CisJfQorCWRldl9pbmZvKCZkZXYtPmRldiwgImF0IChtYXBwZWQpIDB4JTA4WCwgaXJxPSVkLCBidXMgJWQsICVzIG1vZGVcbiIsCisJCQkodTMyKXNzLT5yZWdzLCBzcy0+aXJxLCBtYXN0ZXItPmJ1c19udW0sCisJCQlwaW8gPyAiUElPIiA6ICJETUEiKTsKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaXJxXzI6CisJZnJlZV9pcnEoc3MtPmVycl9pcnEsIHNzKTsKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShzcy0+aXJxLCBzcyk7CitvdXRfZnJlZV9kbWFfZGVzYzoKKwlzdG1wM3h4eF9kbWFfZnJlZV9jb21tYW5kKHNzLT5kbWEsICZzcy0+ZCk7CitvdXRfZnJlZV9kbWE6CisJc3RtcDN4eHhfZG1hX3JlbGVhc2Uoc3MtPmRtYSk7CitvdXRfcmVsZWFzZV9odzoKKwlzdG1wX3NwaV9yZWxlYXNlX2h3KHNzKTsKK291dF9wdXRfbWFzdGVyOgorCWlmIChzcy0+d29ya3F1ZXVlKQorCQlkZXN0cm95X3dvcmtxdWV1ZShzcy0+d29ya3F1ZXVlKTsKKwlpZiAoc3MtPnJlZ3MpCisJCWlvdW5tYXAoc3MtPnJlZ3MpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKK291dDA6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3RtcF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtcF9zcGkgKnNzOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwltYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkKKwkJZ290byBvdXQwOworCXNzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisKKwlmcmVlX2lycShzcy0+ZXJyX2lycSwgc3MpOworCWZyZWVfaXJxKHNzLT5pcnEsIHNzKTsKKwlzdG1wM3h4eF9kbWFfZnJlZV9jb21tYW5kKHNzLT5kbWEsICZzcy0+ZCk7CisJc3RtcDN4eHhfZG1hX3JlbGVhc2Uoc3MtPmRtYSk7CisJc3RtcF9zcGlfcmVsZWFzZV9odyhzcyk7CisJZGVzdHJveV93b3JrcXVldWUoc3MtPndvcmtxdWV1ZSk7CisJaW91bm1hcChzcy0+cmVncyk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworb3V0MDoKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzdG1wX3NwaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBwbXNnKQoreworCXN0cnVjdCBzdG1wX3NwaSAqc3M7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKworCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJc3MtPnNhdmVkX3RpbWluZ3MgPSByZWFkbChIV19TU1BfVElNSU5HICsgc3MtPnJlZ3MpOworCWNsa19kaXNhYmxlKHNzLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcF9zcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHN0bXBfc3BpICpzczsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCisJbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwljbGtfZW5hYmxlKHNzLT5jbGspOworCXN0bXAzeHh4X3Jlc2V0X2Jsb2NrKHNzLT5yZWdzLCBmYWxzZSk7CisJd3JpdGVsKHNzLT5zYXZlZF90aW1pbmdzLCBzcy0+cmVncyArIEhXX1NTUF9USU1JTkcpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHN0bXBfc3BpX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzdG1wX3NwaV9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdG1wX3NwaV9kcml2ZXIgPSB7CisJLnByb2JlCT0gc3RtcF9zcGlfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHN0bXBfc3BpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic3RtcDN4eHhfc3NwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCA9IHN0bXBfc3BpX3N1c3BlbmQsCisJLnJlc3VtZSAgPSBzdG1wX3NwaV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzdG1wX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc3RtcF9zcGlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHN0bXBfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3RtcF9zcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3RtcF9zcGlfaW5pdCk7Cittb2R1bGVfZXhpdChzdG1wX3NwaV9leGl0KTsKK21vZHVsZV9wYXJhbShwaW8sIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2xvY2ssIGludCwgU19JUlVHTyk7CitNT0RVTEVfQVVUSE9SKCJkbWl0cnkgcGVydnVzaGluIDxkcGVydnVzaGluQGVtYmVkZGVkYWxsZXkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVE1QM3h4eCBTUEkvU1NQIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpZGV2LmMgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwppbmRleCA2MDZlN2E0Li5mOTIxYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlkZXYuYworKysgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwpAQCAtNjg4LDMgKzY4OCw0IEBACiBNT0RVTEVfQVVUSE9SKCJBbmRyZWEgUGF0ZXJuaWFuaSwgPGEucGF0ZXJuaWFuaUBzd2FwcC1lbmcuaXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlVzZXIgbW9kZSBTUEkgZGV2aWNlIGludGVyZmFjZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6c3BpZGV2Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS90bGU2MngwLmMgYi9kcml2ZXJzL3NwaS90bGU2MngwLmMKaW5kZXggNDU1OTkxZi4uYmY5NTQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvdGxlNjJ4MC5jCisrKyBiL2RyaXZlcnMvc3BpL3RsZTYyeDAuYwpAQCAtMzI5LDMgKzMyOSw0IEBACiBNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlRMRTYyeDAgU1BJIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJzcGk6dGxlNjJ4MCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCAxMGQzZmNmLi44MmIzNDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNDcsNiArNDcsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggYzMwMDkzYi4uYjFjYWQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG9iai0kKENPTkZJR19FVDEzMVgpCQkrPSBldDEzMXgvCiBvYmotJChDT05GSUdfU0xJQ09TUykJCSs9IHNsaWNvc3MvCiBvYmotJChDT05GSUdfVklERU9fR083MDA3KQkrPSBnbzcwMDcvCitvYmotJChDT05GSUdfVklERU9fQ1gyNTgyMSkJKz0gY3gyNTgyMS8KIG9iai0kKENPTkZJR19VU0JfSVBfQ09NTU9OKQkrPSB1c2JpcC8KIG9iai0kKENPTkZJR19XMzVVTkQpCQkrPSB3aW5ib25kLwogb2JqLSQoQ09ORklHX1BSSVNNMl9VU0IpCSs9IHdsYW4tbmcvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjc3NTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvS2NvbmZpZwpAQCAtMCwwICsxLDM0IEBACitjb25maWcgVklERU9fQ1gyNTgyMQorCXRyaXN0YXRlICJDb25leGFudCBjeDI1ODIxIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBJTlBVVAorCXNlbGVjdCBJMkNfQUxHT0JJVAorCXNlbGVjdCBWSURFT19CVENYCisJc2VsZWN0IFZJREVPX1RWRUVQUk9NCisJc2VsZWN0IFZJREVPX0lSCisJc2VsZWN0IFZJREVPQlVGX0RWQgorCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKKwlzZWxlY3QgVklERU9fQ1gyNTg0MAorCXNlbGVjdCBWSURFT19DWDIzNDFYCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgQ29uZXhhbnQgMjU4MjEgYmFzZWQKKwkgIFRWIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDI1ODIxCisKK2NvbmZpZyBWSURFT19DWDI1ODIxX0FMU0EKKwl0cmlzdGF0ZSAiQ29uZXhhbnQgMjU4MjEgRE1BIGF1ZGlvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19DWDI1ODIxICYmIFNORCAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU05EX1BDTQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIGRpcmVjdCAoRE1BKSBhdWRpbyBvbgorCSAgQ29uZXhhbnQgMjU4MjEgYmFzZWQgY2FwdHVyZSBjYXJkcyB1c2luZyBBTFNBLgorCisJICBJdCBvbmx5IHdvcmtzIHdpdGggYm9hcmRzIHdpdGggZnVuY3Rpb24gMDEgZW5hYmxlZC4KKwkgIFRvIGNoZWNrIGlmIHlvdXIgYm9hcmQgc3VwcG9ydHMsIHVzZSBsc3BjaSAtbi4KKwkgIElmIHN1cHBvcnRlZCwgeW91IHNob3VsZCBzZWUgMTRmMTo4ODAxIG9yIDE0ZjE6ODgxMQorCSAgUENJIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3gyNTgyMS1hbHNhLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjg3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitjeDI1ODIxLW9ianMJOj0gY3gyNTgyMS1jb3JlLm8gY3gyNTgyMS1jYXJkcy5vIGN4MjU4MjEtaTJjLm8gY3gyNTgyMS1ncGlvLm8gCQkJCVwKKwkJCQljeDI1ODIxLW1lZHVzYS12aWRlby5vIGN4MjU4MjEtdmlkZW8ubyBjeDI1ODIxLXZpZGVvMC5vIGN4MjU4MjEtdmlkZW8xLm8gICAgXAorCQkJCWN4MjU4MjEtdmlkZW8yLm8gY3gyNTgyMS12aWRlbzMubyBjeDI1ODIxLXZpZGVvNC5vIGN4MjU4MjEtdmlkZW81Lm8gICAgICAgICBcCisJCQkJY3gyNTgyMS12aWRlbzYubyBjeDI1ODIxLXZpZGVvNy5vIGN4MjU4MjEtdmlkdXBzOS5vIGN4MjU4MjEtdmlkdXBzMTAubyAgICAgIFwKKwkJCQljeDI1ODIxLWF1ZHVwczExLm8gY3gyNTgyMS12aWRlby11cHN0cmVhbS5vIGN4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLm8gCVwKKwkJCQljeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLm8gY3gyNTgyMS12aWRlb2lvY3RsLm8KKworb2JqLSQoQ09ORklHX1ZJREVPX0NYMjU4MjEpICs9IGN4MjU4MjEubworb2JqLSQoQ09ORklHX1ZJREVPX0NYMjU4MjFfQUxTQSkgKz0gY3gyNTgyMS1hbHNhLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliYTUwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL1JFQURNRQpAQCAtMCwwICsxLDYgQEAKK1RvZG86CisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBzcGFyc2UgY2xlYW51cHMKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hbHNhLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVlZjEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hbHNhLmMKQEAgLTAsMCArMSw3ODkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoJQmFzZWQgb24gU0FBNzEzeCBBTFNBIGRyaXZlciBhbmQgQ1g4OCBkcml2ZXIKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAiY3gyNTgyMS5oIgorI2luY2x1ZGUgImN4MjU4MjEtcmVnLmgiCisKKyNkZWZpbmUgQVVESU9fU1JBTV9DSEFOTkVMCVNSQU1fQ0gwOAorCisjZGVmaW5lIGRwcmludGsobGV2ZWwsZm10LCBhcmcuLi4pCWlmIChkZWJ1ZyA+PSBsZXZlbCkgXAorCXByaW50ayhLRVJOX0lORk8gIiVzLzE6ICIgZm10LCBjaGlwLT5kZXYtPm5hbWUgLCAjIyBhcmcpCisKKyNkZWZpbmUgZHByaW50a19jb3JlKGxldmVsLGZtdCwgYXJnLi4uKQlpZiAoZGVidWcgPj0gbGV2ZWwpIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMvMTogIiBmbXQsIGNoaXAtPmRldi0+bmFtZSAsICMjIGFyZykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlEYXRhIHR5cGUgZGVjbGFyYXRpb25zIC0gQ2FuIGJlIG1vZGVkIHRvIGEgaGVhZGVyIGZpbGUgbGF0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfY3gyNTgyMV9jYXJkc1tTTkRSVl9DQVJEU107CitzdGF0aWMgaW50IGRldm5vOworCitzdHJ1Y3QgY3gyNTgyMV9hdWRpb19kZXYgeworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIHE7CisKKwkvKiBwY2kgaS9vICovCisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKworCS8qIGF1ZGlvIGNvbnRyb2xzICovCisJaW50IGlycTsKKworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXNwaW5sb2NrX3QgcmVnX2xvY2s7CisJYXRvbWljX3QgY291bnQ7CisKKwl1bnNpZ25lZCBpbnQgZG1hX3NpemU7CisJdW5zaWduZWQgaW50IHBlcmlvZF9zaXplOworCXVuc2lnbmVkIGludCBudW1fcGVyaW9kczsKKworCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYV9yaXNjOworCisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKK307Cit0eXBlZGVmIHN0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiBzbmRfY3gyNTgyMV9jYXJkX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCU1vZHVsZSBnbG9iYWwgc3RhdGljIHZhcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSB7IDEsWzEgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDEgfTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBjeDI1ODIxIHNvdW5kY2FyZC4gZGVmYXVsdCBlbmFibGVkLiIpOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIGN4MjU4MjEgY2FwdHVyZSBpbnRlcmZhY2UocykuIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkJTW9kdWxlIG1hY3JvcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBkcml2ZXIgbW9kdWxlIGZvciBjeDI1ODIxIGJhc2VkIGNhcHR1cmUgY2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIkhpZXAgSHV5bmgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0NvbmV4YW50LDI1ODIxfSIpOwkvLyJ7e0NvbmV4YW50LDIzODgxfSwiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlNb2R1bGUgc3BlY2lmaWMgZnVudGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29uc3RhbnRzIHRha2VuIGZyb20gY3g4OC1yZWcuaCAqLworI2RlZmluZSBBVURfSU5UX0ROX1JJU0NJMSAgICAgICAoMSA8PCAgMCkKKyNkZWZpbmUgQVVEX0lOVF9VUF9SSVNDSTEgICAgICAgKDEgPDwgIDEpCisjZGVmaW5lIEFVRF9JTlRfUkRTX0ROX1JJU0NJMSAgICgxIDw8ICAyKQorI2RlZmluZSBBVURfSU5UX0ROX1JJU0NJMiAgICAgICAoMSA8PCAgNCkJLyogeWVzLCAzIGlzIHNraXBwZWQgKi8KKyNkZWZpbmUgQVVEX0lOVF9VUF9SSVNDSTIgICAgICAgKDEgPDwgIDUpCisjZGVmaW5lIEFVRF9JTlRfUkRTX0ROX1JJU0NJMiAgICgxIDw8ICA2KQorI2RlZmluZSBBVURfSU5UX0ROX1NZTkMgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgQVVEX0lOVF9VUF9TWU5DICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIEFVRF9JTlRfUkRTX0ROX1NZTkMgICAgICgxIDw8IDE0KQorI2RlZmluZSBBVURfSU5UX09QQ19FUlIgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgQVVEX0lOVF9CRVJfSVJRICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIEFVRF9JTlRfTUNIR19JUlEgICAgICAgICgxIDw8IDIxKQorI2RlZmluZSBHUF9DT1VOVF9DT05UUk9MX1JFU0VUCTB4MworCisjZGVmaW5lIFBDSV9NU0tfQVVEX0VYVCAgICgxIDw8ICA0KQorI2RlZmluZSBQQ0lfTVNLX0FVRF9JTlQgICAoMSA8PCAgMykKKy8qCisgKiBCT0FSRCBTcGVjaWZpYzogU2V0cyBhdWRpbyBETUEKKyAqLworCitzdGF0aWMgaW50IF9jeDI1ODIxX3N0YXJ0X2F1ZGlvX2RtYShzbmRfY3gyNTgyMV9jYXJkX3QgKiBjaGlwKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0gY2hpcC0+YnVmOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gY2hpcC0+ZGV2OworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmF1ZGlvX2NoID0KKwkgICAgJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tBVURJT19TUkFNX0NIQU5ORUxdOworCXUzMiB0bXAgPSAwOworCisJLy8gZW5hYmxlIG91dHB1dCBvbiB0aGUgR1BJTyAwIGZvciB0aGUgTUNMSyBBREMgKEF1ZGlvKQorCWN4MjU4MjFfc2V0X2dwaW9waW5fZGlyZWN0aW9uKGNoaXAtPmRldiwgMCwgMCk7CisKKwkvKiBNYWtlIHN1cmUgUklTQy9GSUZPIGFyZSBvZmYgYmVmb3JlIGNoYW5naW5nIEZJRk8vUklTQyBzZXR0aW5ncyAqLworCWN4X2NsZWFyKEFVRF9JTlRfRE1BX0NUTCwKKwkJIEZMRF9BVURfRFNUX0FfUklTQ19FTiB8IEZMRF9BVURfRFNUX0FfRklGT19FTik7CisKKwkvKiBzZXR1cCBmaWZvICsgZm9ybWF0IC0gb3V0IGNoYW5uZWwgKi8KKwljeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF9hdWRpbyhjaGlwLT5kZXYsIGF1ZGlvX2NoLCBidWYtPmJwbCwKKwkJCQkJIGJ1Zi0+cmlzYy5kbWEpOworCisJLyogc2V0cyBicGwgc2l6ZSAqLworCWN4X3dyaXRlKEFVRF9BX0xOR1RILCBidWYtPmJwbCk7CisKKwkvKiByZXNldCBjb3VudGVyICovCisJY3hfd3JpdGUoQVVEX0FfR1BDTlRfQ1RMLCBHUF9DT1VOVF9DT05UUk9MX1JFU0VUKTsJLy9HUF9DT1VOVF9DT05UUk9MX1JFU0VUID0gMHgzCisJYXRvbWljX3NldCgmY2hpcC0+Y291bnQsIDApOworCisJLy9TZXQgdGhlIGlucHV0IG1vZGUgdG8gMTYtYml0CisJdG1wID0gY3hfcmVhZChBVURfQV9DRkcpOworCWN4X3dyaXRlKEFVRF9BX0NGRywKKwkJIHRtcCB8IEZMRF9BVURfRFNUX1BLX01PREUgfCBGTERfQVVEX0RTVF9FTkFCTEUgfAorCQkgRkxEX0FVRF9DTEtfRU5BQkxFKTsKKworCS8vcHJpbnRrKEtFUk5fSU5GTyAiREVCVUc6IFN0YXJ0IGF1ZGlvIERNQSwgJWQgQi9saW5lLCBjbWRzX3N0YXJ0KDB4JXgpPSAlZCBsaW5lcy9GSUZPLCAlZCBwZXJpb2RzLCAlZCAiCisJLy8gICAgICAiYnl0ZSBidWZmZXJcbiIsIGJ1Zi0+YnBsLCBhdWRpb19jaC0+Y21kc19zdGFydCwgY3hfcmVhZChhdWRpb19jaC0+Y21kc19zdGFydCArIDEyKT4+MSwKKwkvLyAgICAgIGNoaXAtPm51bV9wZXJpb2RzLCBidWYtPmJwbCAqIGNoaXAtPm51bV9wZXJpb2RzKTsKKworCS8qIEVuYWJsZXMgY29ycmVzcG9uZGluZyBiaXRzIGF0IEFVRF9JTlRfU1RBVCAqLworCWN4X3dyaXRlKEFVRF9BX0lOVF9NU0ssCisJCSBGTERfQVVEX0RTVF9SSVNDSTEgfCBGTERfQVVEX0RTVF9PRiB8IEZMRF9BVURfRFNUX1NZTkMgfAorCQkgRkxEX0FVRF9EU1RfT1BDX0VSUik7CisKKwkvKiBDbGVhbiBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgYml0cyBhbHJlYWR5IHNldCAqLworCWN4X3dyaXRlKEFVRF9BX0lOVF9TVEFULCB+MCk7CisKKwkvKiBlbmFibGUgYXVkaW8gaXJxcyAqLworCWN4X3NldChQQ0lfSU5UX01TSywgY2hpcC0+ZGV2LT5wY2lfaXJxbWFzayB8IFBDSV9NU0tfQVVEX0lOVCk7CisKKwkvLyBUdXJuIG9uIGF1ZGlvIGRvd25zdHJlYW0gZmlmbyBhbmQgcmlzYyBlbmFibGUgMHgxMDEKKwl0bXAgPSBjeF9yZWFkKEFVRF9JTlRfRE1BX0NUTCk7CisJY3hfc2V0KEFVRF9JTlRfRE1BX0NUTCwKKwkgICAgICAgdG1wIHwgKEZMRF9BVURfRFNUX0FfUklTQ19FTiB8IEZMRF9BVURfRFNUX0FfRklGT19FTikpOworCisJbWRlbGF5KDEwMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBCT0FSRCBTcGVjaWZpYzogUmVzZXRzIGF1ZGlvIERNQQorICovCitzdGF0aWMgaW50IF9jeDI1ODIxX3N0b3BfYXVkaW9fZG1hKHNuZF9jeDI1ODIxX2NhcmRfdCAqIGNoaXApCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGlwLT5kZXY7CisKKwkvKiBzdG9wIGRtYSAqLworCWN4X2NsZWFyKEFVRF9JTlRfRE1BX0NUTCwKKwkJIEZMRF9BVURfRFNUX0FfUklTQ19FTiB8IEZMRF9BVURfRFNUX0FfRklGT19FTik7CisKKwkvKiBkaXNhYmxlIGlycXMgKi8KKwljeF9jbGVhcihQQ0lfSU5UX01TSywgUENJX01TS19BVURfSU5UKTsKKwljeF9jbGVhcihBVURfQV9JTlRfTVNLLAorCQkgQVVEX0lOVF9PUENfRVJSIHwgQVVEX0lOVF9ETl9TWU5DIHwgQVVEX0lOVF9ETl9SSVNDSTIgfAorCQkgQVVEX0lOVF9ETl9SSVNDSTEpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTUFYX0lSUV9MT09QIDUwCisKKy8qCisgKiBCT0FSRCBTcGVjaWZpYzogSVJRIGRtYSBiaXRzCisgKi8KK3N0YXRpYyBjaGFyICpjeDI1ODIxX2F1ZF9pcnFzWzMyXSA9IHsKKwkiZG5fcmlzY2kxIiwgInVwX3Jpc2NpMSIsICJyZHNfZG5fcmlzYzEiLAkvKiAwLTIgKi8KKwlOVUxMLAkJCS8qIHJlc2VydmVkICovCisJImRuX3Jpc2NpMiIsICJ1cF9yaXNjaTIiLCAicmRzX2RuX3Jpc2MyIiwJLyogNC02ICovCisJTlVMTCwJCQkvKiByZXNlcnZlZCAqLworCSJkbmZfb2YiLCAidXBmX3VmIiwgInJkc19kbmZfdWYiLAkvKiA4LTEwICovCisJTlVMTCwJCQkvKiByZXNlcnZlZCAqLworCSJkbl9zeW5jIiwgInVwX3N5bmMiLCAicmRzX2RuX3N5bmMiLAkvKiAxMi0xNCAqLworCU5VTEwsCQkJLyogcmVzZXJ2ZWQgKi8KKwkib3BjX2VyciIsICJwYXJfZXJyIiwgInJpcF9lcnIiLAkvKiAxNi0xOCAqLworCSJwY2lfYWJvcnQiLCAiYmVyX2lycSIsICJtY2hnX2lycSIJLyogMTktMjEgKi8KK307CisKKy8qCisgKiBCT0FSRCBTcGVjaWZpYzogVGhyZWF0cyBJUlEgYXVkaW8gc3BlY2lmaWMgY2FsbHMKKyAqLworc3RhdGljIHZvaWQgY3gyNTgyMV9hdWRfaXJxKHNuZF9jeDI1ODIxX2NhcmRfdCAqIGNoaXAsIHUzMiBzdGF0dXMsIHUzMiBtYXNrKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gY2hpcC0+ZGV2OworCisJaWYgKDAgPT0gKHN0YXR1cyAmIG1hc2spKSB7CisJCXJldHVybjsKKwl9CisKKwljeF93cml0ZShBVURfQV9JTlRfU1RBVCwgc3RhdHVzKTsKKwlpZiAoZGVidWcgPiAxIHx8IChzdGF0dXMgJiBtYXNrICYgfjB4ZmYpKQorCQljeDI1ODIxX3ByaW50X2lycWJpdHMoZGV2LT5uYW1lLCAiaXJxIGF1ZCIsCisJCQkJICAgICAgY3gyNTgyMV9hdWRfaXJxcywKKwkJCQkgICAgICBBUlJBWV9TSVpFKGN4MjU4MjFfYXVkX2lycXMpLCBzdGF0dXMsCisJCQkJICAgICAgbWFzayk7CisKKwkvKiByaXNjIG9wIGNvZGUgZXJyb3IgKi8KKwlpZiAoc3RhdHVzICYgQVVEX0lOVF9PUENfRVJSKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkcgJXMvMTogQXVkaW8gcmlzYyBvcCBjb2RlIGVycm9yXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKworCQljeF9jbGVhcihBVURfSU5UX0RNQV9DVEwsCisJCQkgRkxEX0FVRF9EU1RfQV9SSVNDX0VOIHwgRkxEX0FVRF9EU1RfQV9GSUZPX0VOKTsKKwkJY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcF9hdWRpbyhkZXYsCisJCQkJCQkmY3gyNTgyMV9zcmFtX2NoYW5uZWxzCisJCQkJCQlbQVVESU9fU1JBTV9DSEFOTkVMXSk7CisJfQorCWlmIChzdGF0dXMgJiBBVURfSU5UX0ROX1NZTkMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORyAlczogRG93bnN0cmVhbSBzeW5jIGVycm9yIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWN4X3dyaXRlKEFVRF9BX0dQQ05UX0NUTCwgR1BfQ09VTlRfQ09OVFJPTF9SRVNFVCk7CisJCXJldHVybjsKKwl9CisKKwkvKiByaXNjMSBkb3duc3RyZWFtICovCisJaWYgKHN0YXR1cyAmIEFVRF9JTlRfRE5fUklTQ0kxKSB7CisJCWF0b21pY19zZXQoJmNoaXAtPmNvdW50LCBjeF9yZWFkKEFVRF9BX0dQQ05UKSk7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+c3Vic3RyZWFtKTsKKwl9Cit9CisKKy8qCisgKiBCT0FSRCBTcGVjaWZpYzogSGFuZGxlcyBJUlEgY2FsbHMKKyAqLworc3RhdGljIGlycXJldHVybl90IGN4MjU4MjFfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzbmRfY3gyNTgyMV9jYXJkX3QgKmNoaXAgPSBkZXZfaWQ7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGlwLT5kZXY7CisJdTMyIHN0YXR1cywgcGNpX3N0YXR1czsKKwl1MzIgYXVkaW50X3N0YXR1cywgYXVkaW50X21hc2s7CisJaW50IGxvb3AsIGhhbmRsZWQgPSAwOworCWludCBhdWRpbnRfY291bnQgPSAwOworCisJYXVkaW50X3N0YXR1cyA9IGN4X3JlYWQoQVVEX0FfSU5UX1NUQVQpOworCWF1ZGludF9tYXNrID0gY3hfcmVhZChBVURfQV9JTlRfTVNLKTsKKwlhdWRpbnRfY291bnQgPSBjeF9yZWFkKEFVRF9BX0dQQ05UKTsKKwlzdGF0dXMgPSBjeF9yZWFkKFBDSV9JTlRfU1RBVCk7CisKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTsgbG9vcCsrKSB7CisJCXN0YXR1cyA9IGN4X3JlYWQoUENJX0lOVF9TVEFUKTsKKwkJaWYgKDAgPT0gc3RhdHVzKSB7CisJCQlzdGF0dXMgPSBjeF9yZWFkKFBDSV9JTlRfU1RBVCk7CisJCQlhdWRpbnRfc3RhdHVzID0gY3hfcmVhZChBVURfQV9JTlRfU1RBVCk7CisJCQlhdWRpbnRfbWFzayA9IGN4X3JlYWQoQVVEX0FfSU5UX01TSyk7CisKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQloYW5kbGVkID0gMTsKKwkJCQljeF93cml0ZShQQ0lfSU5UX1NUQVQsIHN0YXR1cyk7CisKKwkJCQljeDI1ODIxX2F1ZF9pcnEoY2hpcCwgYXVkaW50X3N0YXR1cywKKwkJCQkJCWF1ZGludF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJaGFuZGxlZCA9IDE7CisJCWN4X3dyaXRlKFBDSV9JTlRfU1RBVCwgc3RhdHVzKTsKKworCQljeDI1ODIxX2F1ZF9pcnEoY2hpcCwgYXVkaW50X3N0YXR1cywgYXVkaW50X21hc2spOworCX0KKworCXBjaV9zdGF0dXMgPSBjeF9yZWFkKFBDSV9JTlRfU1RBVCk7CisKKwlpZiAoaGFuZGxlZCkKKwkJY3hfd3JpdGUoUENJX0lOVF9TVEFULCBwY2lfc3RhdHVzKTsKKworICAgICAgb3V0OgorCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCitzdGF0aWMgaW50IGRzcF9idWZmZXJfZnJlZShzbmRfY3gyNTgyMV9jYXJkX3QgKiBjaGlwKQoreworCUJVR19PTighY2hpcC0+ZG1hX3NpemUpOworCisJZHByaW50aygyLCAiRnJlZWluZyBidWZmZXJcbiIpOworCXZpZGVvYnVmX3NnX2RtYV91bm1hcCgmY2hpcC0+cGNpLT5kZXYsIGNoaXAtPmRtYV9yaXNjKTsKKwl2aWRlb2J1Zl9kbWFfZnJlZShjaGlwLT5kbWFfcmlzYyk7CisJYnRjeF9yaXNjbWVtX2ZyZWUoY2hpcC0+cGNpLCAmY2hpcC0+YnVmLT5yaXNjKTsKKwlrZnJlZShjaGlwLT5idWYpOworCisJY2hpcC0+ZG1hX3Jpc2MgPSBOVUxMOworCWNoaXAtPmRtYV9zaXplID0gMDsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJCUFMU0EgUENNIEludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEaWdpdGFsIGhhcmR3YXJlIGRlZmluaXRpb24KKyAqLworI2RlZmluZSBERUZBVUxUX0ZJRk9fU0laRQkzODQKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfY3gyNTgyMV9kaWdpdGFsX2h3ID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJICAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkvKiBBbmFsb2cgYXVkaW8gb3V0cHV0IHdpbGwgYmUgZnVsbCBvZiBjbGlja3MgYW5kIHBvcHMgaWYgdGhlcmUKKwkgICBhcmUgbm90IGV4YWN0bHkgZm91ciBsaW5lcyBpbiB0aGUgU1JBTSBGSUZPIGJ1ZmZlci4gICovCisJLnBlcmlvZF9ieXRlc19taW4gPSBERUZBVUxUX0ZJRk9fU0laRSAvIDMsCisJLnBlcmlvZF9ieXRlc19tYXggPSBERUZBVUxUX0ZJRk9fU0laRSAvIDMsCisJLnBlcmlvZHNfbWluID0gMSwKKwkucGVyaW9kc19tYXggPSBBVURJT19MSU5FX1NJWkUsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAoQVVESU9fTElORV9TSVpFICogQVVESU9fTElORV9TSVpFKSwJLy8xMjgqMTI4ID0gMTYzODQgPSAxMDI0ICogMTYKK307CisKKy8qCisgKiBhdWRpbyBwY20gY2FwdHVyZSBvcGVuIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBpbnQgc25kX2N4MjU4MjFfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc25kX2N4MjU4MjFfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgYnBsID0gMDsKKworCWlmICghY2hpcCkgeworCQlwcmludGsoS0VSTl9FUlIgIkRFQlVHOiBjeDI1ODIxIGNhbid0IGZpbmQgZGV2aWNlIHN0cnVjdC4iCisJCSAgICAgICAiIENhbid0IHByb2NlZWQgd2l0aCBvcGVuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXJyID0KKwkgICAgc25kX3BjbV9od19jb25zdHJhaW50X3BvdzIocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIF9lcnJvcjsKKworCWNoaXAtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKworCXJ1bnRpbWUtPmh3ID0gc25kX2N4MjU4MjFfZGlnaXRhbF9odzsKKworCWlmIChjeDI1ODIxX3NyYW1fY2hhbm5lbHNbQVVESU9fU1JBTV9DSEFOTkVMXS5maWZvX3NpemUgIT0KKwkgICAgREVGQVVMVF9GSUZPX1NJWkUpIHsKKwkJYnBsID0gY3gyNTgyMV9zcmFtX2NoYW5uZWxzW0FVRElPX1NSQU1fQ0hBTk5FTF0uZmlmb19zaXplIC8gMzsJLy9zaW5jZSB0aGVyZSBhcmUgMyBhdWRpbyBDbHVzdGVycworCQlicGwgJj0gfjc7CS8qIG11c3QgYmUgbXVsdGlwbGUgb2YgOCAqLworCisJCWlmIChicGwgPiBBVURJT19MSU5FX1NJWkUpIHsKKwkJCWJwbCA9IEFVRElPX0xJTkVfU0laRTsKKwkJfQorCQlydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWluID0gYnBsOworCQlydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWF4ID0gYnBsOworCX0KKworCXJldHVybiAwOworICAgICAgX2Vycm9yOgorCWRwcmludGsoMSwgIkVycm9yIG9wZW5pbmcgUENNIVxuIik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIGF1ZGlvIGNsb3NlIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBpbnQgc25kX2N4MjU4MjFfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBod19wYXJhbXMgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBzbmRfY3gyNTgyMV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXNuZF9jeDI1ODIxX2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWE7CisKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKwlpbnQgcmV0OworCisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJZHNwX2J1ZmZlcl9mcmVlKGNoaXApOworCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKKwl9CisKKwljaGlwLT5wZXJpb2Rfc2l6ZSA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKKwljaGlwLT5udW1fcGVyaW9kcyA9IHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7CisJY2hpcC0+ZG1hX3NpemUgPSBjaGlwLT5wZXJpb2Rfc2l6ZSAqIHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7CisKKwlCVUdfT04oIWNoaXAtPmRtYV9zaXplKTsKKwlCVUdfT04oY2hpcC0+bnVtX3BlcmlvZHMgJiAoY2hpcC0+bnVtX3BlcmlvZHMgLSAxKSk7CisKKwlidWYgPSB2aWRlb2J1Zl9zZ19hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChOVUxMID09IGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY2hpcC0+cGVyaW9kX3NpemUgPiBBVURJT19MSU5FX1NJWkUpIHsKKwkJY2hpcC0+cGVyaW9kX3NpemUgPSBBVURJT19MSU5FX1NJWkU7CisJfQorCisJYnVmLT52Yi5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCWJ1Zi0+dmIuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJYnVmLT52Yi53aWR0aCA9IGNoaXAtPnBlcmlvZF9zaXplOworCWJ1Zi0+YnBsID0gY2hpcC0+cGVyaW9kX3NpemU7CisJYnVmLT52Yi5oZWlnaHQgPSBjaGlwLT5udW1fcGVyaW9kczsKKwlidWYtPnZiLnNpemUgPSBjaGlwLT5kbWFfc2l6ZTsKKworCWRtYSA9IHZpZGVvYnVmX3RvX2RtYSgmYnVmLT52Yik7CisJdmlkZW9idWZfZG1hX2luaXQoZG1hKTsKKworCXJldCA9IHZpZGVvYnVmX2RtYV9pbml0X2tlcm5lbChkbWEsIFBDSV9ETUFfRlJPTURFVklDRSwKKwkJCQkgICAgICAgKFBBR0VfQUxJR04oYnVmLT52Yi5zaXplKSA+PgorCQkJCQlQQUdFX1NISUZUKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSB2aWRlb2J1Zl9zZ19kbWFfbWFwKCZjaGlwLT5wY2ktPmRldiwgZG1hKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9CisJICAgIGN4MjU4MjFfcmlzY19kYXRhYnVmZmVyX2F1ZGlvKGNoaXAtPnBjaSwgJmJ1Zi0+cmlzYywgZG1hLT5zZ2xpc3QsCisJCQkJCSAgYnVmLT52Yi53aWR0aCwgYnVmLT52Yi5oZWlnaHQsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJERUJVRzogRVJST1IgYWZ0ZXIgY3gyNTgyMV9yaXNjX2RhdGFidWZmZXJfYXVkaW8oKSBcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIExvb3AgYmFjayB0byBzdGFydCBvZiBwcm9ncmFtICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOworCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJY2hpcC0+YnVmID0gYnVmOworCWNoaXAtPmRtYV9yaXNjID0gZG1hOworCisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPmRtYV9yaXNjLT52bWFsbG9jOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID0gY2hpcC0+ZG1hX3NpemU7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciA9IDA7CisKKwlyZXR1cm4gMDsKKworICAgICAgZXJyb3I6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaHcgZnJlZSBjYWxsYmFjaworICovCitzdGF0aWMgaW50IHNuZF9jeDI1ODIxX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc25kX2N4MjU4MjFfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJZHNwX2J1ZmZlcl9mcmVlKGNoaXApOworCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHByZXBhcmUgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBzbmRfY3gyNTgyMV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCisvKgorICogdHJpZ2dlciBjYWxsYmFjaworICovCitzdGF0aWMgaW50IHNuZF9jeDI1ODIxX2NhcmRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgaW50IGNtZCkKK3sKKwlzbmRfY3gyNTgyMV9jYXJkX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IGVyciA9IDA7CisKKwkvKiBMb2NhbCBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGRpc2FibGVkIGJ5IEFMU0EgKi8KKwlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJZXJyID0gX2N4MjU4MjFfc3RhcnRfYXVkaW9fZG1hKGNoaXApOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWVyciA9IF9jeDI1ODIxX3N0b3BfYXVkaW9fZG1hKGNoaXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIHBvaW50ZXIgY2FsbGJhY2sKKyAqLworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9jeDI1ODIxX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCisJCQkJCSAgICAgKnN1YnN0cmVhbSkKK3sKKwlzbmRfY3gyNTgyMV9jYXJkX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1MTYgY291bnQ7CisKKwljb3VudCA9IGF0b21pY19yZWFkKCZjaGlwLT5jb3VudCk7CisKKwlyZXR1cm4gcnVudGltZS0+cGVyaW9kX3NpemUgKiAoY291bnQgJiAocnVudGltZS0+cGVyaW9kcyAtIDEpKTsKK30KKworLyoKKyAqIHBhZ2UgY2FsbGJhY2sgKG5lZWRlZCBmb3IgbW1hcCkKKyAqLworc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfY3gyNTgyMV9wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdm9pZCAqcGFnZXB0ciA9IHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQ7CisKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOworfQorCisvKgorICogb3BlcmF0b3JzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2N4MjU4MjFfcGNtX29wcyA9IHsKKwkub3BlbiA9IHNuZF9jeDI1ODIxX3BjbV9vcGVuLAorCS5jbG9zZSA9IHNuZF9jeDI1ODIxX2Nsb3NlLAorCS5pb2N0bCA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBzbmRfY3gyNTgyMV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBzbmRfY3gyNTgyMV9od19mcmVlLAorCS5wcmVwYXJlID0gc25kX2N4MjU4MjFfcHJlcGFyZSwKKwkudHJpZ2dlciA9IHNuZF9jeDI1ODIxX2NhcmRfdHJpZ2dlciwKKwkucG9pbnRlciA9IHNuZF9jeDI1ODIxX3BvaW50ZXIsCisJLnBhZ2UgPSBzbmRfY3gyNTgyMV9wYWdlLAorfTsKKworLyoKKyAqIEFMU0EgY3JlYXRlIGEgUENNIGRldmljZTogIENhbGxlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgYm9hcmQuIFNldHMgdXAgdGhlIG5hbWUgYW5kIGhvb2tzIHVwCisgKiAgdGhlIGNhbGxiYWNrcworICovCitzdGF0aWMgaW50IHNuZF9jeDI1ODIxX3BjbShzbmRfY3gyNTgyMV9jYXJkX3QgKiBjaGlwLCBpbnQgZGV2aWNlLCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGVycjsKKworCWVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsIG5hbWUsIGRldmljZSwgMCwgMSwgJnBjbSk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRVJST1I6IEZBSUxFRCBzbmRfcGNtX25ldygpIGluICVzXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gZXJyOworCX0KKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlzdHJjcHkocGNtLT5uYW1lLCBuYW1lKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfY3gyNTgyMV9wY21fb3BzKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJQmFzaWMgRmxvdyBmb3IgU291bmQgRGV2aWNlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBQQ0kgSUQgVGFibGUgLSAxNGYxOjg4MDEgYW5kIDE0ZjE6ODgxMSBtZWFucyBmdW5jdGlvbiAxOiBBdWRpbworICogT25seSBib2FyZHMgd2l0aCBlZXByb20gYW5kIGJ5dGUgMSBhdCBlZXByb209MSBoYXZlIGl0CisgKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4MjU4MjFfYXVkaW9fcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJezB4MTRmMSwgMHgwOTIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MCx9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3gyNTgyMV9hdWRpb19wY2lfdGJsKTsKKworLyoKKyAqIE5vdCB1c2VkIGluIHRoZSBmdW5jdGlvbiBzbmRfY3gyNTgyMV9kZXZfZnJlZSBzbyByZW1vdmluZworICogZnJvbSB0aGUgZmlsZS4KKyAqLworLyoKK3N0YXRpYyBpbnQgc25kX2N4MjU4MjFfZnJlZShzbmRfY3gyNTgyMV9jYXJkX3QgKmNoaXApCit7CisJaWYgKGNoaXAtPmlycSA+PSAwKQorCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCisJY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihjaGlwLT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOworCisJcmV0dXJuIDA7Cit9CisqLworCisvKgorICogQ29tcG9uZW50IERlc3RydWN0b3IKKyAqLworc3RhdGljIHZvaWQgc25kX2N4MjU4MjFfZGV2X2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXNuZF9jeDI1ODIxX2NhcmRfdCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCS8vc25kX2N4MjU4MjFfZnJlZShjaGlwKTsKKwlzbmRfY2FyZF9mcmVlKGNoaXAtPmNhcmQpOworfQorCisvKgorICogQWxzYSBDb25zdHJ1Y3RvciAtIENvbXBvbmVudCBwcm9iZQorICovCitzdGF0aWMgaW50IGN4MjU4MjFfYXVkaW9faW5pdGRldihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc25kX2N4MjU4MjFfY2FyZF90ICpjaGlwOworCWludCBlcnI7CisKKwlpZiAoZGV2bm8gPj0gU05EUlZfQ0FSRFMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiREVCVUcgRVJST1I6IGRldm5vID49IFNORFJWX0NBUkRTICVzXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gKC1FTk9ERVYpOworCX0KKworCWlmICghZW5hYmxlW2Rldm5vXSkgeworCQkrK2Rldm5vOworCQlwcmludGsoS0VSTl9JTkZPICJERUJVRyBFUlJPUjogIWVuYWJsZVtkZXZub10gJXNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuICgtRU5PRU5UKTsKKwl9CisKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLAorCQkJIHNpemVvZihzbmRfY3gyNTgyMV9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkRFQlVHIEVSUk9SOiBjYW5ub3QgY3JlYXRlIHNuZF9jYXJkX25ldyBpbiAlc1xuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiY3gyNTgyMSIpOworCisJLyogQ2FyZCAiY3JlYXRpb24iICovCisJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2N4MjU4MjFfZGV2X2ZyZWU7CisJY2hpcCA9IChzbmRfY3gyNTgyMV9jYXJkX3QgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CisKKwljaGlwLT5kZXYgPSBkZXY7CisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJY2hpcC0+cGNpID0gZGV2LT5wY2k7CisJY2hpcC0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKTsKKworCWNoaXAtPmlycSA9IGRldi0+cGNpLT5pcnE7CisKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPnBjaS0+aXJxLCBjeDI1ODIxX2lycSwKKwkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBjaGlwLT5kZXYtPm5hbWUsIGNoaXApOworCisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUiAlczogY2FuJ3QgZ2V0IElSUSAlZCBmb3IgQUxTQVxuIiwKKwkJICAgICAgIGNoaXAtPmRldi0+bmFtZSwgZGV2LT5wY2ktPmlycSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKChlcnIgPSBzbmRfY3gyNTgyMV9wY20oY2hpcCwgMCwgImN4MjU4MjEgRGlnaXRhbCIpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkRFQlVHIEVSUk9SOiBjYW5ub3QgY3JlYXRlIHNuZF9jeDI1ODIxX3BjbSAlc1xuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZjaGlwLT5wY2ktPmRldik7CisKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiY3gyNTgyMSIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCBpcnEgJWQiLCBjaGlwLT5kZXYtPm5hbWUsCisJCWNoaXAtPmlvYmFzZSwgY2hpcC0+aXJxKTsKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiQ1gyNTgyMSIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvJWk6IEFMU0Egc3VwcG9ydCBmb3IgY3gyNTgyMSBib2FyZHNcbiIsCisJICAgICAgIGNhcmQtPmRyaXZlciwgZGV2bm8pOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiREVCVUcgRVJST1I6IGNhbm5vdCByZWdpc3RlciBzb3VuZCBjYXJkICVzXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIGVycm9yOworCX0KKworCXNuZF9jeDI1ODIxX2NhcmRzW2Rldm5vXSA9IGNhcmQ7CisKKwlkZXZubysrOworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkJTElOVVggTU9EVUxFIElOSVQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgY3gyNTgyMV9hdWRpb19maW5pKHZvaWQpCit7CisJc25kX2NhcmRfZnJlZShzbmRfY3gyNTgyMV9jYXJkc1swXSk7Cit9CisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6ZXIKKyAqCisgKiBMb29wcyB0aHJvdWdoIHByZXNlbnQgc2FhNzEzNCBjYXJkcywgYW5kIGFzc2lnbnMgYW4gQUxTQSBkZXZpY2UKKyAqIHRvIGVhY2ggb25lCisgKgorICovCitzdGF0aWMgaW50IGN4MjU4MjFfYWxzYV9pbml0KHZvaWQpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKKwkJZGV2ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCQljeDI1ODIxX2F1ZGlvX2luaXRkZXYoZGV2KTsKKwl9CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJjeDI1ODIxIEVSUk9SIEFMU0E6IG5vIGN4MjU4MjEgY2FyZHMgZm91bmRcbiIpOworCisJcmV0dXJuIDA7CisKK30KKworbGF0ZV9pbml0Y2FsbChjeDI1ODIxX2Fsc2FfaW5pdCk7Cittb2R1bGVfZXhpdChjeDI1ODIxX2F1ZGlvX2ZpbmkpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8tdXBzdHJlYW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8tdXBzdHJlYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGRkZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5jCkBAIC0wLDAgKzEsODA0IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4sIDxzaHUubGluQGNvbmV4YW50LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorI2luY2x1ZGUgImN4MjU4MjEtYXVkaW8tdXBzdHJlYW0uaCIKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDI1ODIxIGJhc2VkIFRWIGNhcmRzIik7CitNT0RVTEVfQVVUSE9SKCJIaWVwIEh1eW5oIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBfaW50cl9tc2sgPQorICAgIEZMRF9BVURfU1JDX1JJU0NJMSB8IEZMRF9BVURfU1JDX09GIHwgRkxEX0FVRF9TUkNfU1lOQyB8CisgICAgRkxEX0FVRF9TUkNfT1BDX0VSUjsKKworaW50IGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX3Vwc3RyZWFtX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IGJwbCwgdTMyIHJpc2MpCit7CisJdW5zaWduZWQgaW50IGksIGxpbmVzOworCXUzMiBjZHQ7CisKKwlpZiAoY2gtPmNtZHNfc3RhcnQgPT0gMCkgeworCQljeF93cml0ZShjaC0+cHRyMV9yZWcsIDApOworCQljeF93cml0ZShjaC0+cHRyMl9yZWcsIDApOworCQljeF93cml0ZShjaC0+Y250Ml9yZWcsIDApOworCQljeF93cml0ZShjaC0+Y250MV9yZWcsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwlicGwgPSAoYnBsICsgNykgJiB+NzsJLyogYWxpZ25tZW50ICovCisJY2R0ID0gY2gtPmNkdDsKKwlsaW5lcyA9IGNoLT5maWZvX3NpemUgLyBicGw7CisKKwlpZiAobGluZXMgPiAzKSB7CisJCWxpbmVzID0gMzsKKwl9CisKKwlCVUdfT04obGluZXMgPCAyKTsKKworCS8qIHdyaXRlIENEVCAqLworCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSwgY2gtPmZpZm9fc3RhcnQgKyBicGwgKiBpKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgNCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDgsIDApOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyAxMiwgMCk7CisJfQorCisJLyogd3JpdGUgQ01EUyAqLworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMCwgcmlzYyk7CisKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDQsIDApOworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgOCwgY2R0KTsKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDEyLCBBVURJT19DRFRfU0laRV9RVyk7CisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxNiwgY2gtPmN0cmxfc3RhcnQpOworCisJLy9JUSBzaXplCisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgQVVESU9fSVFfU0laRV9EVyk7CisKKwlmb3IgKGkgPSAyNDsgaSA8IDgwOyBpICs9IDQpCisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgaSwgMCk7CisKKwkvKiBmaWxsIHJlZ2lzdGVycyAqLworCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgY2gtPmZpZm9fc3RhcnQpOworCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgY2R0KTsKKwljeF93cml0ZShjaC0+Y250Ml9yZWcsIEFVRElPX0NEVF9TSVpFX1FXKTsKKwljeF93cml0ZShjaC0+Y250MV9yZWcsIEFVRElPX0NMVVNURVJfU0laRV9RVyAtIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2xlMzIgKmN4MjU4MjFfcmlzY19maWVsZF91cHN0cmVhbV9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJCSBfX2xlMzIgKiBycCwKKwkJCQkJCSBkbWFfYWRkcl90IGRhdGFidWZfcGh5c19hZGRyLAorCQkJCQkJIHVuc2lnbmVkIGludCBicGwsCisJCQkJCQkgaW50IGZpZm9fZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBsaW5lOworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPQorCSAgICAmZGV2LT5zcmFtX2NoYW5uZWxzW2Rldi0+X2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0XTsKKwlpbnQgb2Zmc2V0ID0gMDsKKworCS8qIHNjYW4gbGluZXMgKi8KKwlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgTElORVNfUEVSX0FVRElPX0JVRkZFUjsgbGluZSsrKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1JFQUQgfCBSSVNDX1NPTCB8IFJJU0NfRU9MIHwgYnBsKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKGRhdGFidWZfcGh5c19hZGRyICsgb2Zmc2V0KTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwkJLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBlbmFibGUgdGhlIEZJRk8gYWZ0ZXIgdGhlIGZpcnN0IDMgbGluZXMKKwkJLy8gRm9yIHRoZSB1cHN0cmVhbSBhdWRpbyBjaGFubmVsLCB0aGUgcmlzYyBlbmdpbmUgd2lsbCBlbmFibGUgdGhlIEZJRk8uCisJCWlmIChmaWZvX2VuYWJsZSAmJiBsaW5lID09IDIpIHsKKwkJCSoocnArKykgPSBSSVNDX1dSSVRFQ1I7CisJCQkqKHJwKyspID0gc3JhbV9jaC0+ZG1hX2N0bDsKKwkJCSoocnArKykgPSBzcmFtX2NoLT5mbGRfYXVkX2ZpZm9fZW47CisJCQkqKHJwKyspID0gMHgwMDAwMDAyMDsKKwkJfQorCisJCW9mZnNldCArPSBBVURJT19MSU5FX1NJWkU7CisJfQorCisJcmV0dXJuIHJwOworfQorCitpbnQgY3gyNTgyMV9yaXNjX2J1ZmZlcl91cHN0cmVhbV9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGJwbCwgdW5zaWduZWQgaW50IGxpbmVzKQoreworCV9fbGUzMiAqcnA7CisJaW50IGZpZm9fZW5hYmxlID0gMDsKKwlpbnQgZnJhbWUgPSAwLCBpID0gMDsKKwlpbnQgZnJhbWVfc2l6ZSA9IEFVRElPX0RBVEFfQlVGX1NaOworCWludCBkYXRhYnVmX29mZnNldCA9IDA7CisJaW50IHJpc2NfZmxhZyA9IFJJU0NfQ05UX0lOQzsKKwlkbWFfYWRkcl90IHJpc2NfcGh5c19qdW1wX2FkZHI7CisKKwkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgUmlzYyBidWZmZXIgcHJvZ3JhbSAqLworCXJwID0gZGV2LT5fcmlzY192aXJ0X2FkZHI7CisKKwkvKiBzeW5jIGluc3RydWN0aW9uICovCisJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgQVVESU9fU1lOQ19MSU5FKTsKKworCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IE5VTV9BVURJT19GUkFNRVM7IGZyYW1lKyspIHsKKwkJZGF0YWJ1Zl9vZmZzZXQgPSBmcmFtZV9zaXplICogZnJhbWU7CisKKwkJaWYgKGZyYW1lID09IDApIHsKKwkJCWZpZm9fZW5hYmxlID0gMTsKKwkJCXJpc2NfZmxhZyA9IFJJU0NfQ05UX1JFU0VUOworCQl9IGVsc2UgeworCQkJZmlmb19lbmFibGUgPSAwOworCQkJcmlzY19mbGFnID0gUklTQ19DTlRfSU5DOworCQl9CisKKwkJLy9DYWxjdWxhdGUgcGh5c2ljYWwganVtcCBhZGRyZXNzCisJCWlmICgoZnJhbWUgKyAxKSA9PSBOVU1fQVVESU9fRlJBTUVTKSB7CisJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0KKwkJCSAgICBkZXYtPl9yaXNjX3BoeXNfc3RhcnRfYWRkciArCisJCQkgICAgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkU7CisJCX0gZWxzZSB7CisJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0KKwkJCSAgICBkZXYtPl9yaXNjX3BoeXNfc3RhcnRfYWRkciArCisJCQkgICAgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKworCQkJICAgIEFVRElPX1JJU0NfRE1BX0JVRl9TSVpFICogKGZyYW1lICsgMSk7CisJCX0KKworCQlycCA9IGN4MjU4MjFfcmlzY19maWVsZF91cHN0cmVhbV9hdWRpbyhkZXYsIHJwLAorCQkJCQkJICAgICAgIGRldi0+CisJCQkJCQkgICAgICAgX2F1ZGlvZGF0YV9idWZfcGh5c19hZGRyCisJCQkJCQkgICAgICAgKyBkYXRhYnVmX29mZnNldCwgYnBsLAorCQkJCQkJICAgICAgIGZpZm9fZW5hYmxlKTsKKworCQlpZiAoVVNFX1JJU0NfTk9PUF9BVURJTykgeworCQkJZm9yIChpID0gMDsgaSA8IE5VTV9OT19PUFM7IGkrKykgeworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX05PT1ApOworCQkJfQorCQl9CisKKwkJLy8gTG9vcCB0byAoTnRoKUZyYW1lUklTQyBvciB0byBTdGFydCBvZiBSaXNjIHByb2dyYW0gJiBnZW5lcmF0ZSBJUlEKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IHJpc2NfZmxhZyk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjX3BoeXNfanVtcF9hZGRyKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOworCisJCS8vUmVjYWxjdWxhdGUgdmlydHVhbCBhZGRyZXNzIGJhc2VkIG9uIGZyYW1lIGluZGV4CisJCXJwID0gZGV2LT5fcmlzY192aXJ0X2FkZHIgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSAvIDQgKworCQkgICAgKEFVRElPX1JJU0NfRE1BX0JVRl9TSVpFICogKGZyYW1lICsgMSkgLyA0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjeDI1ODIxX2ZyZWVfbWVtb3J5X2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWlmIChkZXYtPl9yaXNjX3ZpcnRfYWRkcikgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPl9hdWRpb3Jpc2Nfc2l6ZSwKKwkJCQkgICAgZGV2LT5fcmlzY192aXJ0X2FkZHIsIGRldi0+X3Jpc2NfcGh5c19hZGRyKTsKKwkJZGV2LT5fcmlzY192aXJ0X2FkZHIgPSBOVUxMOworCX0KKworCWlmIChkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkcikgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPl9hdWRpb2RhdGFfYnVmX3NpemUsCisJCQkJICAgIGRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyLAorCQkJCSAgICBkZXYtPl9hdWRpb2RhdGFfYnVmX3BoeXNfYWRkcik7CisJCWRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPQorCSAgICAmZGV2LT5zcmFtX2NoYW5uZWxzW0FVRElPX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9CXTsKKwl1MzIgdG1wID0gMDsKKworCWlmICghZGV2LT5fYXVkaW9faXNfcnVubmluZykgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogTm8gYXVkaW8gZmlsZSBpcyBjdXJyZW50bHkgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvL0Rpc2FibGUgUklTQyBpbnRlcnJ1cHRzCisJY3hfd3JpdGUoc3JhbV9jaC0+aW50X21zaywgMCk7CisKKwkvL1R1cm4gT0ZGIHJpc2MgYW5kIGZpZm8gZW5hYmxlIGluIEFVRF9ETUFfQ05UUkwKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCWN4X3dyaXRlKHNyYW1fY2gtPmRtYV9jdGwsCisJCSB0bXAgJiB+KHNyYW1fY2gtPmZsZF9hdWRfZmlmb19lbiB8IHNyYW1fY2gtPmZsZF9hdWRfcmlzY19lbikpOworCisJLy9DbGVhciBkYXRhIGJ1ZmZlciBtZW1vcnkKKwlpZiAoZGV2LT5fYXVkaW9kYXRhX2J1Zl92aXJ0X2FkZHIpCisJCW1lbXNldChkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkciwgMCwKKwkJICAgICAgIGRldi0+X2F1ZGlvZGF0YV9idWZfc2l6ZSk7CisKKwlkZXYtPl9hdWRpb19pc19ydW5uaW5nID0gMDsKKwlkZXYtPl9pc19maXJzdF9hdWRpb19mcmFtZSA9IDA7CisJZGV2LT5fYXVkaW9mcmFtZV9jb3VudCA9IDA7CisJZGV2LT5fYXVkaW9maWxlX3N0YXR1cyA9IEVORF9PRl9GSUxFOworCisJaWYgKGRldi0+X2lycV9hdWRpb19xdWV1ZXMpIHsKKwkJa2ZyZWUoZGV2LT5faXJxX2F1ZGlvX3F1ZXVlcyk7CisJCWRldi0+X2lycV9hdWRpb19xdWV1ZXMgPSBOVUxMOworCX0KKworCWlmIChkZXYtPl9hdWRpb2ZpbGVuYW1lICE9IE5VTEwpCisJCWtmcmVlKGRldi0+X2F1ZGlvZmlsZW5hbWUpOworfQorCit2b2lkIGN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+X2F1ZGlvX2lzX3J1bm5pbmcpIHsKKwkJY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX2F1ZGlvKGRldik7CisJfQorCisJY3gyNTgyMV9mcmVlX21lbW9yeV9hdWRpbyhkZXYpOworfQorCitpbnQgY3gyNTgyMV9nZXRfYXVkaW9fZGF0YShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCSAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJc3RydWN0IGZpbGUgKm15ZmlsZTsKKwlpbnQgZnJhbWVfaW5kZXhfdGVtcCA9IGRldi0+X2F1ZGlvZnJhbWVfaW5kZXg7CisJaW50IGkgPSAwOworCWludCBsaW5lX3NpemUgPSBBVURJT19MSU5FX1NJWkU7CisJaW50IGZyYW1lX3NpemUgPSBBVURJT19EQVRBX0JVRl9TWjsKKwlpbnQgZnJhbWVfb2Zmc2V0ID0gZnJhbWVfc2l6ZSAqIGZyYW1lX2luZGV4X3RlbXA7CisJc3NpemVfdCB2ZnNfcmVhZF9yZXR2YWwgPSAwOworCWNoYXIgbXlidWZbbGluZV9zaXplXTsKKwlsb2ZmX3QgZmlsZV9vZmZzZXQgPSBkZXYtPl9hdWRpb2ZyYW1lX2NvdW50ICogZnJhbWVfc2l6ZTsKKwlsb2ZmX3QgcG9zOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKKwlpZiAoZGV2LT5fYXVkaW9maWxlX3N0YXR1cyA9PSBFTkRfT0ZfRklMRSkKKwkJcmV0dXJuIDA7CisKKwlteWZpbGUgPSBmaWxwX29wZW4oZGV2LT5fYXVkaW9maWxlbmFtZSwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7CisKKwlpZiAoSVNfRVJSKG15ZmlsZSkpIHsKKwkJY29uc3QgaW50IG9wZW5fZXJybm8gPSAtUFRSX0VSUihteWZpbGUpOworCQlwcmludGsoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkISBcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5fYXVkaW9maWxlbmFtZSwgb3Blbl9lcnJubyk7CisJCXJldHVybiBQVFJfRVJSKG15ZmlsZSk7CisJfSBlbHNlIHsKKwkJaWYgKCEobXlmaWxlLT5mX29wKSkgeworCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJaWYgKCFteWZpbGUtPmZfb3AtPnJlYWQpIHsKKwkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISBcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlwb3MgPSBteWZpbGUtPmZfcG9zOworCQlvbGRfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+X2F1ZGlvX2xpbmVzX2NvdW50OyBpKyspIHsKKwkJCXBvcyA9IGZpbGVfb2Zmc2V0OworCisJCQl2ZnNfcmVhZF9yZXR2YWwgPQorCQkJICAgIHZmc19yZWFkKG15ZmlsZSwgbXlidWYsIGxpbmVfc2l6ZSwgJnBvcyk7CisKKwkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPiAwICYmIHZmc19yZWFkX3JldHZhbCA9PSBsaW5lX3NpemUKKwkJCSAgICAmJiBkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkciAhPSBOVUxMKSB7CisJCQkJbWVtY3B5KCh2b2lkICopKGRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyICsKKwkJCQkJCWZyYW1lX29mZnNldCAvIDQpLCBteWJ1ZiwKKwkJCQkgICAgICAgdmZzX3JlYWRfcmV0dmFsKTsKKwkJCX0KKworCQkJZmlsZV9vZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOworCQkJZnJhbWVfb2Zmc2V0ICs9IHZmc19yZWFkX3JldHZhbDsKKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIkRvbmU6IGV4aXQgJXMoKSBzaW5jZSBubyBtb3JlIGJ5dGVzIHRvIHJlYWQgZnJvbSBBdWRpbyBmaWxlLlxuIiwKKwkJCQkgICAgICAgX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGkgPiAwKQorCQkJZGV2LT5fYXVkaW9mcmFtZV9jb3VudCsrOworCisJCWRldi0+X2F1ZGlvZmlsZV9zdGF0dXMgPQorCQkgICAgKHZmc19yZWFkX3JldHZhbCA9PSBsaW5lX3NpemUpID8gSU5fUFJPR1JFU1MgOiBFTkRfT0ZfRklMRTsKKworCQlzZXRfZnMob2xkX2ZzKTsKKwkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX2F1ZGlvdXBzX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDI1ODIxX2RldiwgX2F1ZGlvX3dvcmtfZW50cnkpOworCisJaWYgKCFkZXYpIHsKKwkJcHJpbnRrKCJFUlJPUiAlcygpOiBzaW5jZSBjb250YWluZXJfb2Yod29ya19zdHJ1Y3QpIEZBSUxFRCEgXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJY3gyNTgyMV9nZXRfYXVkaW9fZGF0YShkZXYsCisJCQkgICAgICAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPgorCQkJCQkJICAgX2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0XSk7Cit9CisKK2ludCBjeDI1ODIxX29wZW5maWxlX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwlzdHJ1Y3QgZmlsZSAqbXlmaWxlOworCWludCBpID0gMCwgaiA9IDA7CisJaW50IGxpbmVfc2l6ZSA9IEFVRElPX0xJTkVfU0laRTsKKwlzc2l6ZV90IHZmc19yZWFkX3JldHZhbCA9IDA7CisJY2hhciBteWJ1ZltsaW5lX3NpemVdOworCWxvZmZfdCBwb3M7CisJbG9mZl90IG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKTA7CisJbW1fc2VnbWVudF90IG9sZF9mczsKKworCW15ZmlsZSA9IGZpbHBfb3BlbihkZXYtPl9hdWRpb2ZpbGVuYW1lLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLCAwKTsKKworCWlmIChJU19FUlIobXlmaWxlKSkgeworCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7CisJCXByaW50aygiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhIFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9hdWRpb2ZpbGVuYW1lLCBvcGVuX2Vycm5vKTsKKwkJcmV0dXJuIFBUUl9FUlIobXlmaWxlKTsKKwl9IGVsc2UgeworCQlpZiAoIShteWZpbGUtPmZfb3ApKSB7CisJCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEgXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJaWYgKCFteWZpbGUtPmZfb3AtPnJlYWQpIHsKKwkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISBcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlwb3MgPSBteWZpbGUtPmZfcG9zOworCQlvbGRfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9BVURJT19GUkFNRVM7IGorKykgeworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+X2F1ZGlvX2xpbmVzX2NvdW50OyBpKyspIHsKKwkJCQlwb3MgPSBvZmZzZXQ7CisKKwkJCQl2ZnNfcmVhZF9yZXR2YWwgPQorCQkJCSAgICB2ZnNfcmVhZChteWZpbGUsIG15YnVmLCBsaW5lX3NpemUsICZwb3MpOworCisJCQkJaWYgKHZmc19yZWFkX3JldHZhbCA+IDAKKwkJCQkgICAgJiYgdmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZQorCQkJCSAgICAmJiBkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkciAhPSBOVUxMKSB7CisJCQkJCW1lbWNweSgodm9pZCAqKShkZXYtPgorCQkJCQkJCV9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkcgorCQkJCQkJCSsgb2Zmc2V0IC8gNCksIG15YnVmLAorCQkJCQkgICAgICAgdmZzX3JlYWRfcmV0dmFsKTsKKwkJCQl9CisKKwkJCQlvZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOworCisJCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSAgICAgICAiRG9uZTogZXhpdCAlcygpIHNpbmNlIG5vIG1vcmUgYnl0ZXMgdG8gcmVhZCBmcm9tIEF1ZGlvIGZpbGUuXG4iLAorCQkJCQkgICAgICAgX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpID4gMCkgeworCQkJCWRldi0+X2F1ZGlvZnJhbWVfY291bnQrKzsKKwkJCX0KKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJZGV2LT5fYXVkaW9maWxlX3N0YXR1cyA9CisJCSAgICAodmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZSkgPyBJTl9QUk9HUkVTUyA6IEVORF9PRl9GSUxFOworCisJCXNldF9mcyhvbGRfZnMpOworCQlteWZpbGUtPmZfcG9zID0gMDsKKwkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjU4MjFfYXVkaW9fdXBzdHJlYW1fYnVmZmVyX3ByZXBhcmUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCQkgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCwKKwkJCQkJCSBpbnQgYnBsKQoreworCWludCByZXQgPSAwOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJZG1hX2FkZHJfdCBkYXRhX2RtYV9hZGRyOworCisJY3gyNTgyMV9mcmVlX21lbW9yeV9hdWRpbyhkZXYpOworCisJZGV2LT5fcmlzY192aXJ0X2FkZHIgPQorCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT5hdWRpb191cHN0cmVhbV9yaXNjYnVmX3NpemUsCisJCQkJICZkbWFfYWRkcik7CisJZGV2LT5fcmlzY192aXJ0X3N0YXJ0X2FkZHIgPSBkZXYtPl9yaXNjX3ZpcnRfYWRkcjsKKwlkZXYtPl9yaXNjX3BoeXNfc3RhcnRfYWRkciA9IGRtYV9hZGRyOworCWRldi0+X3Jpc2NfcGh5c19hZGRyID0gZG1hX2FkZHI7CisJZGV2LT5fYXVkaW9yaXNjX3NpemUgPSBkZXYtPmF1ZGlvX3Vwc3RyZWFtX3Jpc2NidWZfc2l6ZTsKKworCWlmICghZGV2LT5fcmlzY192aXJ0X2FkZHIpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjEgRVJST1I6IHBjaV9hbGxvY19jb25zaXN0ZW50KCkgRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgUklTQyBwcm9ncmFtISBSZXR1cm5pbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8vQ2xlYXIgb3V0IG1lbW9yeSBhdCBhZGRyZXNzCisJbWVtc2V0KGRldi0+X3Jpc2NfdmlydF9hZGRyLCAwLCBkZXYtPl9hdWRpb3Jpc2Nfc2l6ZSk7CisKKwkvL0ZvciBBdWRpbyBEYXRhIGJ1ZmZlciBhbGxvY2F0aW9uCisJZGV2LT5fYXVkaW9kYXRhX2J1Zl92aXJ0X2FkZHIgPQorCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT5hdWRpb191cHN0cmVhbV9kYXRhYnVmX3NpemUsCisJCQkJICZkYXRhX2RtYV9hZGRyKTsKKwlkZXYtPl9hdWRpb2RhdGFfYnVmX3BoeXNfYWRkciA9IGRhdGFfZG1hX2FkZHI7CisJZGV2LT5fYXVkaW9kYXRhX2J1Zl9zaXplID0gZGV2LT5hdWRpb191cHN0cmVhbV9kYXRhYnVmX3NpemU7CisKKwlpZiAoIWRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxIEVSUk9SOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpIEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgYnVmZmVyISBSZXR1cm5pbmcuIFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvL0NsZWFyIG91dCBtZW1vcnkgYXQgYWRkcmVzcworCW1lbXNldChkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkciwgMCwgZGV2LT5fYXVkaW9kYXRhX2J1Zl9zaXplKTsKKworCXJldCA9IGN4MjU4MjFfb3BlbmZpbGVfYXVkaW8oZGV2LCBzcmFtX2NoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8vQ3JlYXRpbmcgUklTQyBwcm9ncmFtcworCXJldCA9CisJICAgIGN4MjU4MjFfcmlzY19idWZmZXJfdXBzdHJlYW1fYXVkaW8oZGV2LCBkZXYtPnBjaSwgYnBsLAorCQkJCQkgICAgICAgZGV2LT5fYXVkaW9fbGluZXNfY291bnQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiY3gyNTgyMSBFUlJPUiBjcmVhdGluZyBhdWRpbyB1cHN0cmVhbSBSSVNDIHByb2dyYW1zISBcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY3gyNTgyMV9hdWRpb191cHN0cmVhbV9pcnEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFuX251bSwKKwkJCSAgICAgICB1MzIgc3RhdHVzKQoreworCWludCBpID0gMDsKKwl1MzIgaW50X21za190bXA7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dOworCWRtYV9hZGRyX3QgcmlzY19waHlzX2p1bXBfYWRkcjsKKwlfX2xlMzIgKnJwOworCisJaWYgKHN0YXR1cyAmIEZMRF9BVURfU1JDX1JJU0NJMSkgeworCQkvL0dldCBpbnRlcnJ1cHRfaW5kZXggb2YgdGhlIHByb2dyYW0gdGhhdCBpbnRlcnJ1cHRlZAorCQl1MzIgcHJvZ19jbnQgPSBjeF9yZWFkKGNoYW5uZWwtPmdwY250KTsKKworCQkvL1NpbmNlIHdlJ3ZlIGlkZW50aWZpZWQgb3VyIElSUSwgY2xlYXIgb3VyIGJpdHMgZnJvbSB0aGUgaW50ZXJydXB0IG1hc2sgYW5kIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzCisJCWN4X3dyaXRlKGNoYW5uZWwtPmludF9tc2ssIDApOworCQljeF93cml0ZShjaGFubmVsLT5pbnRfc3RhdCwgY3hfcmVhZChjaGFubmVsLT5pbnRfc3RhdCkpOworCisJCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisKKwkJd2hpbGUgKHByb2dfY250ICE9IGRldi0+X2xhc3RfaW5kZXhfaXJxKSB7CisJCQkvL1VwZGF0ZSBfbGFzdF9pbmRleF9pcnEKKwkJCWlmIChkZXYtPl9sYXN0X2luZGV4X2lycSA8IChOVU1CRVJfT0ZfUFJPR1JBTVMgLSAxKSkgeworCQkJCWRldi0+X2xhc3RfaW5kZXhfaXJxKys7CisJCQl9IGVsc2UgeworCQkJCWRldi0+X2xhc3RfaW5kZXhfaXJxID0gMDsKKwkJCX0KKworCQkJZGV2LT5fYXVkaW9mcmFtZV9pbmRleCA9IGRldi0+X2xhc3RfaW5kZXhfaXJxOworCisJCQlxdWV1ZV93b3JrKGRldi0+X2lycV9hdWRpb19xdWV1ZXMsCisJCQkJICAgJmRldi0+X2F1ZGlvX3dvcmtfZW50cnkpOworCQl9CisKKwkJaWYgKGRldi0+X2lzX2ZpcnN0X2F1ZGlvX2ZyYW1lKSB7CisJCQlkZXYtPl9pc19maXJzdF9hdWRpb19mcmFtZSA9IDA7CisKKwkJCWlmIChkZXYtPl9yaXNjX3ZpcnRfc3RhcnRfYWRkciAhPSBOVUxMKSB7CisJCQkJcmlzY19waHlzX2p1bXBfYWRkciA9CisJCQkJICAgIGRldi0+X3Jpc2NfcGh5c19zdGFydF9hZGRyICsKKwkJCQkgICAgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKworCQkJCSAgICBBVURJT19SSVNDX0RNQV9CVUZfU0laRTsKKworCQkJCXJwID0gY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtX2F1ZGlvKGRldiwKKwkJCQkJCQkJICAgICAgIGRldi0+CisJCQkJCQkJCSAgICAgICBfcmlzY192aXJ0X3N0YXJ0X2FkZHIKKwkJCQkJCQkJICAgICAgICsgMSwKKwkJCQkJCQkJICAgICAgIGRldi0+CisJCQkJCQkJCSAgICAgICBfYXVkaW9kYXRhX2J1Zl9waHlzX2FkZHIsCisJCQkJCQkJCSAgICAgICBBVURJT19MSU5FX1NJWkUsCisJCQkJCQkJCSAgICAgICBGSUZPX0RJU0FCTEUpOworCisJCQkJaWYgKFVTRV9SSVNDX05PT1BfQVVESU8pIHsKKwkJCQkJZm9yIChpID0gMDsgaSA8IE5VTV9OT19PUFM7IGkrKykgeworCQkJCQkJKihycCsrKSA9CisJCQkJCQkgICAgY3B1X3RvX2xlMzIoUklTQ19OT09QKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkvLyBKdW1wIHRvIDJuZCBBdWRpbyBGcmFtZQorCQkJCSoocnArKykgPQorCQkJCSAgICBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfAorCQkJCQkJUklTQ19DTlRfUkVTRVQpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjX3BoeXNfanVtcF9hZGRyKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CisJCQl9CisJCX0KKworCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXR1cyAmIEZMRF9BVURfU1JDX09GKQorCQkJcHJpbnRrKCIlczogQXVkaW8gUmVjZWl2ZWQgT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisKKwkJaWYgKHN0YXR1cyAmIEZMRF9BVURfU1JDX1NZTkMpCisJCQlwcmludGsoIiVzOiBBdWRpbyBSZWNlaXZlZCBTeW5jIEVycm9yIEludGVycnVwdCFcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCisJCWlmIChzdGF0dXMgJiBGTERfQVVEX1NSQ19PUENfRVJSKQorCQkJcHJpbnRrKCIlczogQXVkaW8gUmVjZWl2ZWQgT3BDb2RlIEVycm9yIEludGVycnVwdCFcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCisJCS8vIFJlYWQgYW5kIHdyaXRlIGJhY2sgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2xlYXIgb3VyIGJpdHMKKwkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X3N0YXQsIGN4X3JlYWQoY2hhbm5lbC0+aW50X3N0YXQpKTsKKwl9CisKKwlpZiAoZGV2LT5fYXVkaW9maWxlX3N0YXR1cyA9PSBFTkRfT0ZfRklMRSkgeworCQlwcmludGsoImN4MjU4MjE6IEVPRiBDaGFubmVsIEF1ZGlvIEZyYW1lY291bnQgPSAlZFxuIiwKKwkJICAgICAgIGRldi0+X2F1ZGlvZnJhbWVfY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCS8vRWxTRSwgc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgcmUtZW5hYmxlIGlycS4KKwlpbnRfbXNrX3RtcCA9IGN4X3JlYWQoY2hhbm5lbC0+aW50X21zayk7CisJY3hfd3JpdGUoY2hhbm5lbC0+aW50X21zaywgaW50X21za190bXAgfD0gX2ludHJfbXNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3gyNTgyMV91cHN0cmVhbV9pcnFfYXVkaW8oaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZGV2X2lkOworCXUzMiBtc2tfc3RhdCwgYXVkaW9fc3RhdHVzOworCWludCBoYW5kbGVkID0gMDsKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtMTsKKworCXNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2Rldi0+X2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0XTsKKworCW1za19zdGF0ID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXN0YXQpOworCWF1ZGlvX3N0YXR1cyA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X3N0YXQpOworCisJLy8gT25seSBkZWFsIHdpdGggb3VyIGludGVycnVwdAorCWlmIChhdWRpb19zdGF0dXMpIHsKKwkJaGFuZGxlZCA9CisJCSAgICBjeDI1ODIxX2F1ZGlvX3Vwc3RyZWFtX2lycShkZXYsCisJCQkJCSAgICAgICBkZXYtPgorCQkJCQkgICAgICAgX2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0LAorCQkJCQkgICAgICAgYXVkaW9fc3RhdHVzKTsKKwl9CisKKwlpZiAoaGFuZGxlZCA8IDApIHsKKwkJY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX2F1ZGlvKGRldik7CisJfSBlbHNlIHsKKwkJaGFuZGxlZCArPSBoYW5kbGVkOworCX0KKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX3dhaXRfZmlmb19lbmFibGUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoKQoreworCWludCBjb3VudCA9IDA7CisJdTMyIHRtcDsKKworCWRvIHsKKwkJLy9XYWl0IDEwIG1pY3Jvc2Vjb25kIGJlZm9yZSBjaGVja2luZyB0byBzZWUgaWYgdGhlIEZJRk8gaXMgdHVybmVkIE9OLgorCQl1ZGVsYXkoMTApOworCisJCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisKKwkJaWYgKGNvdW50KysgPiAxMDAwKQkvLzEwIG1pbGxpc2Vjb25kIHRpbWVvdXQKKwkJeworCQkJcHJpbnRrCisJCQkgICAgKCJjeDI1ODIxIEVSUk9SOiAlcygpIGZpZm8gaXMgTk9UIHR1cm5lZCBvbi4gVGltZW91dCFcbiIsCisJCQkgICAgIF9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfQorCisJfSB3aGlsZSAoISh0bXAgJiBzcmFtX2NoLT5mbGRfYXVkX2ZpZm9fZW4pKTsKKworfQorCitpbnQgY3gyNTgyMV9zdGFydF9hdWRpb19kbWFfdXBzdHJlYW0oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoKQoreworCXUzMiB0bXAgPSAwOworCWludCBlcnIgPSAwOworCisJLy8gU2V0IHRoZSBwaHlzaWNhbCBzdGFydCBhZGRyZXNzIG9mIHRoZSBSSVNDIHByb2dyYW0gaW4gdGhlIGluaXRpYWwgcHJvZ3JhbSBjb3VudGVyKElQQykgbWVtYmVyIG9mIHRoZSBDTURTLgorCWN4X3dyaXRlKHNyYW1fY2gtPmNtZHNfc3RhcnQgKyAwLCBkZXYtPl9yaXNjX3BoeXNfYWRkcik7CisJY3hfd3JpdGUoc3JhbV9jaC0+Y21kc19zdGFydCArIDQsIDApOwkvKiBSaXNjIElQQyBIaWdoIDY0IGJpdHMgNjMtMzIgKi8KKworCS8qIHJlc2V0IGNvdW50ZXIgKi8KKwljeF93cml0ZShzcmFtX2NoLT5ncGNudF9jdGwsIDMpOworCisJLy9TZXQgdGhlIGxpbmUgbGVuZ3RoICAgICAgIChJdCBsb29rcyBsaWtlIHdlIGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgbGluZSBsZW5ndGgpCisJY3hfd3JpdGUoc3JhbV9jaC0+YXVkX2xlbmd0aCwgQVVESU9fTElORV9TSVpFICYgRkxEX0FVRF9EU1RfTE5fTE5HVEgpOworCisJLy9TZXQgdGhlIGlucHV0IG1vZGUgdG8gMTYtYml0CisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5hdWRfY2ZnKTsKKwl0bXAgfD0KKwkgICAgRkxEX0FVRF9TUkNfRU5BQkxFIHwgRkxEX0FVRF9EU1RfUEtfTU9ERSB8IEZMRF9BVURfQ0xLX0VOQUJMRSB8CisJICAgIEZMRF9BVURfTUFTVEVSX01PREUgfCBGTERfQVVEX0NMS19TRUxFQ1RfUExMX0QgfCBGTERfQVVEX1NPTllfTU9ERTsKKwljeF93cml0ZShzcmFtX2NoLT5hdWRfY2ZnLCB0bXApOworCisJLy8gUmVhZCBhbmQgd3JpdGUgYmFjayB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBjbGVhciBpdAorCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X3N0YXQpOworCWN4X3dyaXRlKHNyYW1fY2gtPmludF9zdGF0LCB0bXApOworCisJLy8gQ2xlYXIgb3VyIGJpdHMgZnJvbSB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KKwljeF93cml0ZShzcmFtX2NoLT5pbnRfc3RhdCwgX2ludHJfbXNrKTsKKworCS8vU2V0IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgZW5hYmxlIGlycS4KKwljeF9zZXQoUENJX0lOVF9NU0ssIGN4X3JlYWQoUENJX0lOVF9NU0spIHwgKDEgPDwgc3JhbV9jaC0+aXJxX2JpdCkpOworCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X21zayk7CisJY3hfd3JpdGUoc3JhbV9jaC0+aW50X21zaywgdG1wIHw9IF9pbnRyX21zayk7CisKKwllcnIgPQorCSAgICByZXF1ZXN0X2lycShkZXYtPnBjaS0+aXJxLCBjeDI1ODIxX3Vwc3RyZWFtX2lycV9hdWRpbywKKwkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2LT5uYW1lLCBkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCB1cHN0cmVhbSBJUlEgJWRcbiIsIGRldi0+bmFtZSwKKwkJICAgICAgIGRldi0+cGNpLT5pcnEpOworCQlnb3RvIGZhaWxfaXJxOworCX0KKworCS8vIFN0YXJ0IHRoZSBETUEgIGVuZ2luZQorCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisJY3hfc2V0KHNyYW1fY2gtPmRtYV9jdGwsIHRtcCB8IHNyYW1fY2gtPmZsZF9hdWRfcmlzY19lbik7CisKKwlkZXYtPl9hdWRpb19pc19ydW5uaW5nID0gMTsKKwlkZXYtPl9pc19maXJzdF9hdWRpb19mcmFtZSA9IDE7CisKKwkvLyBUaGUgZmlmb19lbiBiaXQgdHVybnMgb24gYnkgdGhlIGZpcnN0IFJpc2MgcHJvZ3JhbQorCWN4MjU4MjFfd2FpdF9maWZvX2VuYWJsZShkZXYsIHNyYW1fY2gpOworCisJcmV0dXJuIDA7CisKKyAgICAgIGZhaWxfaXJxOgorCWN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY3gyNTgyMV9hdWRpb191cHN0cmVhbV9pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbm5lbF9zZWxlY3QpCit7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaDsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgc3RyX2xlbmd0aCA9IDA7CisKKwlpZiAoZGV2LT5fYXVkaW9faXNfcnVubmluZykgeworCQlwcmludGsoIkF1ZGlvIENoYW5uZWwgaXMgc3RpbGwgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5fYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3QgPSBjaGFubmVsX3NlbGVjdDsKKwlzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFubmVsX3NlbGVjdF07CisKKwkvL1dvcmsgcXVldWUKKwlJTklUX1dPUksoJmRldi0+X2F1ZGlvX3dvcmtfZW50cnksIGN4MjU4MjFfYXVkaW91cHNfaGFuZGxlcik7CisJZGV2LT5faXJxX2F1ZGlvX3F1ZXVlcyA9CisJICAgIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjeDI1ODIxX2F1ZGlvd29ya3F1ZXVlIik7CisKKwlpZiAoIWRldi0+X2lycV9hdWRpb19xdWV1ZXMpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjEgRVJST1I6IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCkgZm9yIEF1ZGlvIEZBSUxFRCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYtPl9sYXN0X2luZGV4X2lycSA9IDA7CisJZGV2LT5fYXVkaW9faXNfcnVubmluZyA9IDA7CisJZGV2LT5fYXVkaW9mcmFtZV9jb3VudCA9IDA7CisJZGV2LT5fYXVkaW9maWxlX3N0YXR1cyA9IFJFU0VUX1NUQVRVUzsKKwlkZXYtPl9hdWRpb19saW5lc19jb3VudCA9IExJTkVTX1BFUl9BVURJT19CVUZGRVI7CisJX2xpbmVfc2l6ZSA9IEFVRElPX0xJTkVfU0laRTsKKworCWlmIChkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUpIHsKKwkJc3RyX2xlbmd0aCA9IHN0cmxlbihkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUpOworCQlkZXYtPl9hdWRpb2ZpbGVuYW1lID0KKwkJICAgIChjaGFyICopa21hbGxvYyhzdHJfbGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkZXYtPl9hdWRpb2ZpbGVuYW1lKQorCQkJZ290byBlcnJvcjsKKworCQltZW1jcHkoZGV2LT5fYXVkaW9maWxlbmFtZSwgZGV2LT5pbnB1dF9hdWRpb2ZpbGVuYW1lLAorCQkgICAgICAgc3RyX2xlbmd0aCArIDEpOworCisJCS8vRGVmYXVsdCBpZiBmaWxlbmFtZSBpcyBlbXB0eSBzdHJpbmcKKwkJaWYgKHN0cmNtcChkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUsICIiKSA9PSAwKSB7CisJCQlkZXYtPl9hdWRpb2ZpbGVuYW1lID0gIi9yb290L2F1ZGlvR09PRC53YXYiOworCQl9CisJfSBlbHNlIHsKKwkJc3RyX2xlbmd0aCA9IHN0cmxlbihfZGVmYXVsdEF1ZGlvTmFtZSk7CisJCWRldi0+X2F1ZGlvZmlsZW5hbWUgPQorCQkgICAgKGNoYXIgKilrbWFsbG9jKHN0cl9sZW5ndGggKyAxLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWRldi0+X2F1ZGlvZmlsZW5hbWUpCisJCQlnb3RvIGVycm9yOworCisJCW1lbWNweShkZXYtPl9hdWRpb2ZpbGVuYW1lLCBfZGVmYXVsdEF1ZGlvTmFtZSwgc3RyX2xlbmd0aCArIDEpOworCX0KKworCXJldHZhbCA9CisJICAgIGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX3Vwc3RyZWFtX2F1ZGlvKGRldiwgc3JhbV9jaCwgX2xpbmVfc2l6ZSwKKwkJCQkJCSAgICAgIDApOworCisJZGV2LT5hdWRpb191cHN0cmVhbV9yaXNjYnVmX3NpemUgPQorCSAgICBBVURJT19SSVNDX0RNQV9CVUZfU0laRSAqIE5VTV9BVURJT19QUk9HUyArCisJICAgIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFOworCWRldi0+YXVkaW9fdXBzdHJlYW1fZGF0YWJ1Zl9zaXplID0gQVVESU9fREFUQV9CVUZfU1ogKiBOVU1fQVVESU9fUFJPR1M7CisKKwkvL0FsbG9jYXRpbmcgYnVmZmVycyBhbmQgcHJlcGFyZSBSSVNDIHByb2dyYW0KKwlyZXR2YWwgPQorCSAgICBjeDI1ODIxX2F1ZGlvX3Vwc3RyZWFtX2J1ZmZlcl9wcmVwYXJlKGRldiwgc3JhbV9jaCwgX2xpbmVfc2l6ZSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IEZhaWxlZCB0byBzZXQgdXAgQXVkaW8gdXBzdHJlYW0gYnVmZmVycyFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIGVycm9yOworCX0KKwkvL1N0YXJ0IFJJU0MgZW5naW5lCisJY3gyNTgyMV9zdGFydF9hdWRpb19kbWFfdXBzdHJlYW0oZGV2LCBzcmFtX2NoKTsKKworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGRldik7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTg3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8aGllcC5odXluaEBjb25leGFudC5jb20+LCA8c2h1LmxpbkBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNkZWZpbmUgTlVNX0FVRElPX1BST0dTICAgICAgIDgKKyNkZWZpbmUgTlVNX0FVRElPX0ZSQU1FUyAgICAgIDgKKyNkZWZpbmUgRU5EX09GX0ZJTEUgICAgICAgICAgIDAKKyNkZWZpbmUgSU5fUFJPR1JFU1MgICAgICAgICAgIDEKKyNkZWZpbmUgUkVTRVRfU1RBVFVTICAgICAgICAgIC0xCisjZGVmaW5lIEZJRk9fRElTQUJMRSAgICAgICAgICAwCisjZGVmaW5lIEZJRk9fRU5BQkxFICAgICAgICAgICAxCisjZGVmaW5lIE5VTV9OT19PUFMgICAgICAgICAgICA0CisKKyNkZWZpbmUgUklTQ19SRUFEX0lOU1RSVUNUSU9OX1NJWkUgICAgICAxMgorI2RlZmluZSBSSVNDX0pVTVBfSU5TVFJVQ1RJT05fU0laRSAgICAgIDEyCisjZGVmaW5lIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICAgMTYKKyNkZWZpbmUgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgICAgICA0CisjZGVmaW5lIERXT1JEX1NJWkUgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVURJT19TWU5DX0xJTkUgICAgICAgICAgICAgICAgIDQKKworI2RlZmluZSBMSU5FU19QRVJfQVVESU9fQlVGRkVSICAgICAgMTUKKyNkZWZpbmUgQVVESU9fTElORV9TSVpFICAgICAgICAgICAgIDEyOAorI2RlZmluZSBBVURJT19EQVRBX0JVRl9TWiAgICAgICAgICAgKEFVRElPX0xJTkVfU0laRSAqIExJTkVTX1BFUl9BVURJT19CVUZGRVIpCisKKyNkZWZpbmUgVVNFX1JJU0NfTk9PUF9BVURJTyAgIDEKKworI2lmZGVmIFVTRV9SSVNDX05PT1BfQVVESU8KKyNkZWZpbmUgQVVESU9fUklTQ19ETUFfQlVGX1NJWkUgICAgKCBMSU5FU19QRVJfQVVESU9fQlVGRkVSKlJJU0NfUkVBRF9JTlNUUlVDVElPTl9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBOVU1fTk9fT1BTKkRXT1JEX1NJWkUgKyBSSVNDX0pVTVBfSU5TVFJVQ1RJT05fU0laRSkKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9SSVNDX05PT1BfQVVESU8KKyNkZWZpbmUgQVVESU9fUklTQ19ETUFfQlVGX1NJWkUgICAgKCBMSU5FU19QRVJfQVVESU9fQlVGRkVSKlJJU0NfUkVBRF9JTlNUUlVDVElPTl9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX0pVTVBfSU5TVFJVQ1RJT05fU0laRSkKKyNlbmRpZgorCitzdGF0aWMgaW50IF9saW5lX3NpemU7CitjaGFyICpfZGVmYXVsdEF1ZGlvTmFtZSA9ICIvcm9vdC9hdWRpb0dPT0Qud2F2IjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDNmNDJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19DWDI1ODIxX0FVRElPX0hfXworI2RlZmluZSBfX0NYMjU4MjFfQVVESU9fSF9fCisKKyNkZWZpbmUgVVNFX1JJU0NfTk9PUCAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTElORVNfUEVSX0JVRkZFUiAgICAgICAgICAgIDE1CisjZGVmaW5lIEFVRElPX0xJTkVfU0laRSAgICAgICAgICAgICAxMjgKKworLy9OdW1iZXIgb2YgYnVmZmVyIHByb2dyYW1zIHRvIHVzZSBhdCBvbmNlLgorI2RlZmluZSBOVU1CRVJfT0ZfUFJPR1JBTVMgIDgKKworLy9NYXggc2l6ZSBvZiB0aGUgUklTQyBwcm9ncmFtIGZvciBhIGJ1ZmZlci4gLSB3b3JzdCBjYXNlIGlzIDIgd3JpdGVzIHBlciBsaW5lCisvLyBTcGFjZSBpcyBhbHNvIGFkZGVkIGZvciB0aGUgNCBuby1vcCBpbnN0cnVjdGlvbnMgYWRkZWQgb24gdGhlIGVuZC4KKworI2lmbmRlZiBVU0VfUklTQ19OT09QCisjZGVmaW5lIE1BWF9CVUZGRVJfUFJPR1JBTV9TSVpFICAgICBcCisgICAgKDIqTElORVNfUEVSX0JVRkZFUipSSVNDX1dSSVRFX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSo0KQorI2VuZGlmCisKKy8vIE1BRSAxMiBKdWx5IDIwMDUgVHJ5IHRvIHVzZSBOT09QIFJJU0MgaW5zdHJ1Y3Rpb24gaW5zdGVhZAorI2lmZGVmIFVTRV9SSVNDX05PT1AKKyNkZWZpbmUgTUFYX0JVRkZFUl9QUk9HUkFNX1NJWkUgICAgIFwKKyAgICAoMipMSU5FU19QRVJfQlVGRkVSKlJJU0NfV1JJVEVfSU5TVFJVQ1RJT05fU0laRSArIFJJU0NfTk9PUF9JTlNUUlVDVElPTl9TSVpFKjQpCisjZW5kaWYKKworLy9TaXplcyBvZiB2YXJpb3VzIGluc3RydWN0aW9ucyBpbiBieXRlcy4gIFVzZWQgd2hlbiBhZGRpbmcgaW5zdHJ1Y3Rpb25zLgorI2RlZmluZSBSSVNDX1dSSVRFX0lOU1RSVUNUSU9OX1NJWkUgMTIKKyNkZWZpbmUgUklTQ19KVU1QX0lOU1RSVUNUSU9OX1NJWkUgIDEyCisjZGVmaW5lIFJJU0NfU0tJUF9JTlNUUlVDVElPTl9TSVpFICA0CisjZGVmaW5lIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICA0CisjZGVmaW5lIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICAxNgorI2RlZmluZSBSSVNDX05PT1BfSU5TVFJVQ1RJT05fU0laRSA0CisKKyNkZWZpbmUgTUFYX0FVRElPX0RNQV9CVUZGRVJfU0laRSAoTUFYX0JVRkZFUl9QUk9HUkFNX1NJWkUgKiBOVU1CRVJfT0ZfUFJPR1JBTVMgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZHVwczExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZHVwczExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4Yjg5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYwpAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMTFdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gxMV0pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDExXQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gxMV0tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gMTA7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoVjRMMl9QSVhfRk1UX1lVWVYpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU8xMSkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzExKSkgeworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCgpIGNhcHR1cmUgKi8KKwkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7CisJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJLy9jeF93cml0ZShjaGFubmVsMTEtPmRtYV9jdGwsIDApOworCisJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU8xMSkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPMTEpOworCX0KKworCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xMSkpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMTEpOworCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXNfZnJlZShkZXYsIGZoLCByZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgdmlkZW9faW9jdGxfdXBzdHJlYW0xMShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBjb21tYW5kID0gMDsKKwlzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKmRhdGFfZnJvbV91c2VyOworCisJZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICopYXJnOworCisJaWYgKCFkYXRhX2Zyb21fdXNlcikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMSBpbiAlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCisJCSAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKwlpZiAoY29tbWFuZCAhPSBVUFNUUkVBTV9TVEFSVF9BVURJTyAmJiBjb21tYW5kICE9IFVQU1RSRUFNX1NUT1BfQVVESU8pIHsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5pbnB1dF9maWxlbmFtZSA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKKwlkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7CisJZGV2LT52aWRfc3RkbmFtZSA9IGRhdGFfZnJvbV91c2VyLT52aWRfc3RkbmFtZTsKKwlkZXYtPnBpeGVsX2Zvcm1hdCA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7CisJZGV2LT5jaGFubmVsX3NlbGVjdCA9IGRhdGFfZnJvbV91c2VyLT5jaGFubmVsX3NlbGVjdDsKKwlkZXYtPmNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgVVBTVFJFQU1fU1RBUlRfQVVESU86CisJCWN4MjU4MjFfc3RhcnRfdXBzdHJlYW1fYXVkaW8oZGV2LCBkYXRhX2Zyb21fdXNlcik7CisJCWJyZWFrOworCisJY2FzZSBVUFNUUkVBTV9TVE9QX0FVRElPOgorCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fYXVkaW8oZGV2KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8vIGV4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bF91cHN0cmVhbTExLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTEgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS1hdWRpb3Vwc3RyZWFtIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYmlmZnVuY3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYmlmZnVuY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzI2YTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1iaWZmdW5jcy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0JJVEZVTkNTX0gKKyNkZWZpbmUgX0JJVEZVTkNTX0gKKworI2RlZmluZSBTZXRCaXQoQml0KSAgKDEgPDwgQml0KQorCitpbmxpbmUgdTggZ2V0Qml0KHUzMiBzYW1wbGUsIHU4IGluZGV4KQoreworCXJldHVybiAodTgpICgoc2FtcGxlID4+IGluZGV4KSAmIDEpOworfQorCitpbmxpbmUgdTMyIGNsZWFyQml0QXRQb3ModTMyIHZhbHVlLCB1OCBiaXQpCit7CisJcmV0dXJuIHZhbHVlICYgfigxIDw8IGJpdCk7Cit9CisKK2lubGluZSB1MzIgc2V0Qml0QXRQb3ModTMyIHNhbXBsZSwgdTggYml0KQoreworCXNhbXBsZSB8PSAoMSA8PCBiaXQpOworCXJldHVybiBzYW1wbGU7CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWNhcmRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWNhcmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwYjllYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY2FyZHMuYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqCUJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bWVkaWEvY3gyNTg0MC5oPgorCisjaW5jbHVkZSAiY3gyNTgyMS5oIgorI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgorCisvLyBib2FyZCBjb25maWcgaW5mbworCitzdHJ1Y3QgY3gyNTgyMV9ib2FyZCBjeDI1ODIxX2JvYXJkc1tdID0geworCVtVTktOT1dOX0JPQVJEXSA9IHsKKwkJCSAgIC5uYW1lID0gIlVOS05PV04vR0VORVJJQyIsCisJCQkgICAvLyBFbnN1cmUgc2FmZSBkZWZhdWx0IGZvciB1bmtub3duIGJvYXJkcworCQkJICAgLmNsa19mcmVxID0gMCwKKwkJCSAgIH0sCisKKwlbQ1gyNTgyMV9CT0FSRF0gPSB7CisJCQkgICAubmFtZSA9ICJDWDI1ODIxIiwKKwkJCSAgIC5wb3J0YiA9IENYMjU4MjFfUkFXLAorCQkJICAgLnBvcnRjID0gQ1gyNTgyMV8yNjQsCisJCQkgICAuaW5wdXRbMF0udHlwZSA9IENYMjU4MjFfVk1VWF9DT01QT1NJVEUsCisJCQkgICB9LAorCit9OworCitjb25zdCB1bnNpZ25lZCBpbnQgY3gyNTgyMV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjU4MjFfYm9hcmRzKTsKKworc3RydWN0IGN4MjU4MjFfc3ViaWQgY3gyNTgyMV9zdWJpZHNbXSA9IHsKKwl7CisJIC5zdWJ2ZW5kb3IgPSAweDE0ZjEsCisJIC5zdWJkZXZpY2UgPSAweDA5MjAsCisJIC5jYXJkID0gQ1gyNTgyMV9CT0FSRCwKKwkgfSwKK307CisKK3ZvaWQgY3gyNTgyMV9jYXJkX3NldHVwKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCXN0YXRpYyB1OCBlZXByb21bMjU2XTsKKworCWlmIChkZXYtPmkyY19idXNbMF0uaTJjX3JjID09IDApIHsKKwkJZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQuYWRkciA9IDB4YTAgPj4gMTsKKwkJdHZlZXByb21fcmVhZCgmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsIGVlcHJvbSwKKwkJCSAgICAgIHNpemVvZihlZXByb20pKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhY2VhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWNvcmUuYwpAQCAtMCwwICsxLDE1NTEgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiY3gyNTgyMS5oIgorI2luY2x1ZGUgImN4MjU4MjEtc3JhbS5oIgorI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEF0aGVuYSBjYXJkcyIpOworTU9EVUxFX0FVVEhPUigiU2h1IExpbiAtIEhpZXAgSHV5bmgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RydWN0IGxpc3RfaGVhZCBjeDI1ODIxX2Rldmxpc3Q7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtdID0ge1swIC4uLiAoQ1gyNTgyMV9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9OworbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmQsICJjYXJkIHR5cGUiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjeDI1ODIxX2RldmNvdW50ID0gMDsKKworc3RhdGljIERFRklORV9NVVRFWChkZXZsaXN0KTsKK0xJU1RfSEVBRChjeDI1ODIxX2Rldmxpc3QpOworCitzdHJ1Y3Qgc3JhbV9jaGFubmVsIGN4MjU4MjFfc3JhbV9jaGFubmVsc1tdID0geworCVtTUkFNX0NIMDBdID0geworCQkgICAgICAgLmkgPSBTUkFNX0NIMDAsCisJCSAgICAgICAubmFtZSA9ICJWSUQgQSIsCisJCSAgICAgICAuY21kc19zdGFydCA9IFZJRF9BX0RPV05fQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gVklEX0FfSVEsCisJCSAgICAgICAuY2R0ID0gVklEX0FfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBWSURfQV9ET1dOX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSAoVklEX0NMVVNURVJfU0laRSA8PCAyKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTFfUFRSMSwKKwkJICAgICAgIC5wdHIyX3JlZyA9IERNQTFfUFRSMiwKKwkJICAgICAgIC5jbnQxX3JlZyA9IERNQTFfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTFfQ05UMiwKKwkJICAgICAgIC5pbnRfbXNrID0gVklEX0FfSU5UX01TSywKKwkJICAgICAgIC5pbnRfc3RhdCA9IFZJRF9BX0lOVF9TVEFULAorCQkgICAgICAgLmludF9tc3RhdCA9IFZJRF9BX0lOVF9NU1RBVCwKKwkJICAgICAgIC5kbWFfY3RsID0gVklEX0RTVF9BX0RNQV9DVEwsCisJCSAgICAgICAuZ3BjbnRfY3RsID0gVklEX0RTVF9BX0dQQ05UX0NUTCwKKwkJICAgICAgIC5ncGNudCA9IFZJRF9EU1RfQV9HUENOVCwKKwkJICAgICAgIC52aXBfY3RsID0gVklEX0RTVF9BX1ZJUF9DVEwsCisJCSAgICAgICAucGl4X2ZybXQgPSBWSURfRFNUX0FfUElYX0ZSTVQsCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gwMV0gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gwMSwKKwkJICAgICAgIC5uYW1lID0gIlZJRCBCIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0JfRE9XTl9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfQl9JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfQl9DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9CX0RPV05fQ0xVU1RFUl8xLAorCQkgICAgICAgLmZpZm9fc2l6ZSA9IChWSURfQ0xVU1RFUl9TSVpFIDw8IDIpLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BMl9QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BMl9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BMl9DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BMl9DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfQl9JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0JfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0JfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfRFNUX0JfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfRFNUX0JfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX0RTVF9CX0dQQ05ULAorCQkgICAgICAgLnZpcF9jdGwgPSBWSURfRFNUX0JfVklQX0NUTCwKKwkJICAgICAgIC5waXhfZnJtdCA9IFZJRF9EU1RfQl9QSVhfRlJNVCwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDAyXSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDAyLAorCQkgICAgICAgLm5hbWUgPSAiVklEIEMiLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBWSURfQ19ET1dOX0NNRFMsCisJCSAgICAgICAuY3RybF9zdGFydCA9IFZJRF9DX0lRLAorCQkgICAgICAgLmNkdCA9IFZJRF9DX0NEVCwKKwkJICAgICAgIC5maWZvX3N0YXJ0ID0gVklEX0NfRE9XTl9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKFZJRF9DTFVTVEVSX1NJWkUgPDwgMiksCisJCSAgICAgICAucHRyMV9yZWcgPSBETUEzX1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUEzX1BUUjIsCisJCSAgICAgICAuY250MV9yZWcgPSBETUEzX0NOVDEsCisJCSAgICAgICAuY250Ml9yZWcgPSBETUEzX0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IFZJRF9DX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBWSURfQ19JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBWSURfQ19JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IFZJRF9EU1RfQ19ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IFZJRF9EU1RfQ19HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBWSURfRFNUX0NfR1BDTlQsCisJCSAgICAgICAudmlwX2N0bCA9IFZJRF9EU1RfQ19WSVBfQ1RMLAorCQkgICAgICAgLnBpeF9mcm10ID0gVklEX0RTVF9DX1BJWF9GUk1ULAorCQkgICAgICAgfSwKKworCVtTUkFNX0NIMDNdID0geworCQkgICAgICAgLmkgPSBTUkFNX0NIMDMsCisJCSAgICAgICAubmFtZSA9ICJWSUQgRCIsCisJCSAgICAgICAuY21kc19zdGFydCA9IFZJRF9EX0RPV05fQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gVklEX0RfSVEsCisJCSAgICAgICAuY2R0ID0gVklEX0RfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBWSURfRF9ET1dOX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSAoVklEX0NMVVNURVJfU0laRSA8PCAyKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTRfUFRSMSwKKwkJICAgICAgIC5wdHIyX3JlZyA9IERNQTRfUFRSMiwKKwkJICAgICAgIC5jbnQxX3JlZyA9IERNQTRfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTRfQ05UMiwKKwkJICAgICAgIC5pbnRfbXNrID0gVklEX0RfSU5UX01TSywKKwkJICAgICAgIC5pbnRfc3RhdCA9IFZJRF9EX0lOVF9TVEFULAorCQkgICAgICAgLmludF9tc3RhdCA9IFZJRF9EX0lOVF9NU1RBVCwKKwkJICAgICAgIC5kbWFfY3RsID0gVklEX0RTVF9EX0RNQV9DVEwsCisJCSAgICAgICAuZ3BjbnRfY3RsID0gVklEX0RTVF9EX0dQQ05UX0NUTCwKKwkJICAgICAgIC5ncGNudCA9IFZJRF9EU1RfRF9HUENOVCwKKwkJICAgICAgIC52aXBfY3RsID0gVklEX0RTVF9EX1ZJUF9DVEwsCisJCSAgICAgICAucGl4X2ZybXQgPSBWSURfRFNUX0RfUElYX0ZSTVQsCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gwNF0gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gwNCwKKwkJICAgICAgIC5uYW1lID0gIlZJRCBFIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0VfRE9XTl9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfRV9JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfRV9DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9FX0RPV05fQ0xVU1RFUl8xLAorCQkgICAgICAgLmZpZm9fc2l6ZSA9IChWSURfQ0xVU1RFUl9TSVpFIDw8IDIpLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BNV9QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BNV9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BNV9DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BNV9DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfRV9JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0VfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0VfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfRFNUX0VfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfRFNUX0VfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX0RTVF9FX0dQQ05ULAorCQkgICAgICAgLnZpcF9jdGwgPSBWSURfRFNUX0VfVklQX0NUTCwKKwkJICAgICAgIC5waXhfZnJtdCA9IFZJRF9EU1RfRV9QSVhfRlJNVCwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDA1XSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDA1LAorCQkgICAgICAgLm5hbWUgPSAiVklEIEYiLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBWSURfRl9ET1dOX0NNRFMsCisJCSAgICAgICAuY3RybF9zdGFydCA9IFZJRF9GX0lRLAorCQkgICAgICAgLmNkdCA9IFZJRF9GX0NEVCwKKwkJICAgICAgIC5maWZvX3N0YXJ0ID0gVklEX0ZfRE9XTl9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKFZJRF9DTFVTVEVSX1NJWkUgPDwgMiksCisJCSAgICAgICAucHRyMV9yZWcgPSBETUE2X1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUE2X1BUUjIsCisJCSAgICAgICAuY250MV9yZWcgPSBETUE2X0NOVDEsCisJCSAgICAgICAuY250Ml9yZWcgPSBETUE2X0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IFZJRF9GX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBWSURfRl9JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBWSURfRl9JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IFZJRF9EU1RfRl9ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IFZJRF9EU1RfRl9HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBWSURfRFNUX0ZfR1BDTlQsCisJCSAgICAgICAudmlwX2N0bCA9IFZJRF9EU1RfRl9WSVBfQ1RMLAorCQkgICAgICAgLnBpeF9mcm10ID0gVklEX0RTVF9GX1BJWF9GUk1ULAorCQkgICAgICAgfSwKKworCVtTUkFNX0NIMDZdID0geworCQkgICAgICAgLmkgPSBTUkFNX0NIMDYsCisJCSAgICAgICAubmFtZSA9ICJWSUQgRyIsCisJCSAgICAgICAuY21kc19zdGFydCA9IFZJRF9HX0RPV05fQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gVklEX0dfSVEsCisJCSAgICAgICAuY2R0ID0gVklEX0dfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBWSURfR19ET1dOX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSAoVklEX0NMVVNURVJfU0laRSA8PCAyKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTdfUFRSMSwKKwkJICAgICAgIC5wdHIyX3JlZyA9IERNQTdfUFRSMiwKKwkJICAgICAgIC5jbnQxX3JlZyA9IERNQTdfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTdfQ05UMiwKKwkJICAgICAgIC5pbnRfbXNrID0gVklEX0dfSU5UX01TSywKKwkJICAgICAgIC5pbnRfc3RhdCA9IFZJRF9HX0lOVF9TVEFULAorCQkgICAgICAgLmludF9tc3RhdCA9IFZJRF9HX0lOVF9NU1RBVCwKKwkJICAgICAgIC5kbWFfY3RsID0gVklEX0RTVF9HX0RNQV9DVEwsCisJCSAgICAgICAuZ3BjbnRfY3RsID0gVklEX0RTVF9HX0dQQ05UX0NUTCwKKwkJICAgICAgIC5ncGNudCA9IFZJRF9EU1RfR19HUENOVCwKKwkJICAgICAgIC52aXBfY3RsID0gVklEX0RTVF9HX1ZJUF9DVEwsCisJCSAgICAgICAucGl4X2ZybXQgPSBWSURfRFNUX0dfUElYX0ZSTVQsCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gwN10gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gwNywKKwkJICAgICAgIC5uYW1lID0gIlZJRCBIIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0hfRE9XTl9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfSF9JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfSF9DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9IX0RPV05fQ0xVU1RFUl8xLAorCQkgICAgICAgLmZpZm9fc2l6ZSA9IChWSURfQ0xVU1RFUl9TSVpFIDw8IDIpLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BOF9QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BOF9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BOF9DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BOF9DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfSF9JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0hfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0hfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfRFNUX0hfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfRFNUX0hfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX0RTVF9IX0dQQ05ULAorCQkgICAgICAgLnZpcF9jdGwgPSBWSURfRFNUX0hfVklQX0NUTCwKKwkJICAgICAgIC5waXhfZnJtdCA9IFZJRF9EU1RfSF9QSVhfRlJNVCwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDA4XSA9IHsKKwkJICAgICAgIC5uYW1lID0gImF1ZGlvIGZyb20iLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBBVURfQV9ET1dOX0NNRFMsCisJCSAgICAgICAuY3RybF9zdGFydCA9IEFVRF9BX0lRLAorCQkgICAgICAgLmNkdCA9IEFVRF9BX0NEVCwKKwkJICAgICAgIC5maWZvX3N0YXJ0ID0gQVVEX0FfRE9XTl9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gQVVESU9fQ0xVU1RFUl9TSVpFICogMywKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTE3X1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUExN19QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BMTdfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTE3X0NOVDIsCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gwOV0gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gwOSwKKwkJICAgICAgIC5uYW1lID0gIlZJRCBVcHN0cmVhbSBJIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0lfVVBfQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gVklEX0lfSVEsCisJCSAgICAgICAuY2R0ID0gVklEX0lfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBWSURfSV9VUF9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKFZJRF9DTFVTVEVSX1NJWkUgPDwgMiksCisJCSAgICAgICAucHRyMV9yZWcgPSBETUExNV9QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BMTVfUFRSMiwKKwkJICAgICAgIC5jbnQxX3JlZyA9IERNQTE1X0NOVDEsCisJCSAgICAgICAuY250Ml9yZWcgPSBETUExNV9DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfSV9JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0lfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0lfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfU1JDX0lfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfU1JDX0lfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX1NSQ19JX0dQQ05ULAorCisJCSAgICAgICAudmlkX2ZtdF9jdGwgPSBWSURfU1JDX0lfRk1UX0NUTCwKKwkJICAgICAgIC52aWRfYWN0aXZlX2N0bDEgPSBWSURfU1JDX0lfQUNUSVZFX0NUTDEsCisJCSAgICAgICAudmlkX2FjdGl2ZV9jdGwyID0gVklEX1NSQ19JX0FDVElWRV9DVEwyLAorCQkgICAgICAgLnZpZF9jZHRfc2l6ZSA9IFZJRF9TUkNfSV9DRFRfU1osCisJCSAgICAgICAuaXJxX2JpdCA9IDgsCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gxMF0gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gxMCwKKwkJICAgICAgIC5uYW1lID0gIlZJRCBVcHN0cmVhbSBKIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0pfVVBfQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gVklEX0pfSVEsCisJCSAgICAgICAuY2R0ID0gVklEX0pfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBWSURfSl9VUF9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKFZJRF9DTFVTVEVSX1NJWkUgPDwgMiksCisJCSAgICAgICAucHRyMV9yZWcgPSBETUExNl9QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BMTZfUFRSMiwKKwkJICAgICAgIC5jbnQxX3JlZyA9IERNQTE2X0NOVDEsCisJCSAgICAgICAuY250Ml9yZWcgPSBETUExNl9DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfSl9JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0pfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0pfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfU1JDX0pfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfU1JDX0pfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX1NSQ19KX0dQQ05ULAorCisJCSAgICAgICAudmlkX2ZtdF9jdGwgPSBWSURfU1JDX0pfRk1UX0NUTCwKKwkJICAgICAgIC52aWRfYWN0aXZlX2N0bDEgPSBWSURfU1JDX0pfQUNUSVZFX0NUTDEsCisJCSAgICAgICAudmlkX2FjdGl2ZV9jdGwyID0gVklEX1NSQ19KX0FDVElWRV9DVEwyLAorCQkgICAgICAgLnZpZF9jZHRfc2l6ZSA9IFZJRF9TUkNfSl9DRFRfU1osCisJCSAgICAgICAuaXJxX2JpdCA9IDksCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gxMV0gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gxMSwKKwkJICAgICAgIC5uYW1lID0gIkF1ZGlvIFVwc3RyZWFtIENoYW5uZWwgQiIsCisJCSAgICAgICAuY21kc19zdGFydCA9IEFVRF9CX1VQX0NNRFMsCisJCSAgICAgICAuY3RybF9zdGFydCA9IEFVRF9CX0lRLAorCQkgICAgICAgLmNkdCA9IEFVRF9CX0NEVCwKKwkJICAgICAgIC5maWZvX3N0YXJ0ID0gQVVEX0JfVVBfQ0xVU1RFUl8xLAorCQkgICAgICAgLmZpZm9fc2l6ZSA9IChBVURJT19DTFVTVEVSX1NJWkUgKiAzKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTIyX1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUEyMl9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BMjJfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTIyX0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IEFVRF9CX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBBVURfQl9JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBBVURfQl9JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IEFVRF9JTlRfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBBVURfQl9HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBBVURfQl9HUENOVCwKKwkJICAgICAgIC5hdWRfbGVuZ3RoID0gQVVEX0JfTE5HVEgsCisJCSAgICAgICAuYXVkX2NmZyA9IEFVRF9CX0NGRywKKwkJICAgICAgIC5mbGRfYXVkX2ZpZm9fZW4gPSBGTERfQVVEX1NSQ19CX0ZJRk9fRU4sCisJCSAgICAgICAuZmxkX2F1ZF9yaXNjX2VuID0gRkxEX0FVRF9TUkNfQl9SSVNDX0VOLAorCQkgICAgICAgLmlycV9iaXQgPSAxMSwKKwkJICAgICAgIH0sCit9OworCitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsMCA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDAwXTsKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwxID0gJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tTUkFNX0NIMDFdOworc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDIgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwMl07CitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsMyA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDAzXTsKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw0ID0gJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tTUkFNX0NIMDRdOworc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDUgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNV07CitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsNiA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDA2XTsKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw3ID0gJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tTUkFNX0NIMDddOworc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDkgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwOV07CitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsMTAgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gxMF07CitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsMTEgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gxMV07CisKK3N0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIG1wZWdxOworCitzdGF0aWMgaW50IGN4MjU4MjFfcmlzY19kZWNvZGUodTMyIHJpc2MpCit7CisJc3RhdGljIGNoYXIgKmluc3RyWzE2XSA9IHsKKwkJW1JJU0NfU1lOQyA+PiAyOF0gPSAic3luYyIsCisJCVtSSVNDX1dSSVRFID4+IDI4XSA9ICJ3cml0ZSIsCisJCVtSSVNDX1dSSVRFQyA+PiAyOF0gPSAid3JpdGVjIiwKKwkJW1JJU0NfUkVBRCA+PiAyOF0gPSAicmVhZCIsCisJCVtSSVNDX1JFQURDID4+IDI4XSA9ICJyZWFkYyIsCisJCVtSSVNDX0pVTVAgPj4gMjhdID0gImp1bXAiLAorCQlbUklTQ19TS0lQID4+IDI4XSA9ICJza2lwIiwKKwkJW1JJU0NfV1JJVEVSTSA+PiAyOF0gPSAid3JpdGVybSIsCisJCVtSSVNDX1dSSVRFQ00gPj4gMjhdID0gIndyaXRlY20iLAorCQlbUklTQ19XUklURUNSID4+IDI4XSA9ICJ3cml0ZWNyIiwKKwl9OworCXN0YXRpYyBpbnQgaW5jclsxNl0gPSB7CisJCVtSSVNDX1dSSVRFID4+IDI4XSA9IDMsCisJCVtSSVNDX0pVTVAgPj4gMjhdID0gMywKKwkJW1JJU0NfU0tJUCA+PiAyOF0gPSAxLAorCQlbUklTQ19TWU5DID4+IDI4XSA9IDEsCisJCVtSSVNDX1dSSVRFUk0gPj4gMjhdID0gMywKKwkJW1JJU0NfV1JJVEVDTSA+PiAyOF0gPSAzLAorCQlbUklTQ19XUklURUNSID4+IDI4XSA9IDQsCisJfTsKKwlzdGF0aWMgY2hhciAqYml0c1tdID0geworCQkiMTIiLCAiMTMiLCAiMTQiLCAicmVzeW5jIiwKKwkJImNudDAiLCAiY250MSIsICIxOCIsICIxOSIsCisJCSIyMCIsICIyMSIsICIyMiIsICIyMyIsCisJCSJpcnExIiwgImlycTIiLCAiZW9sIiwgInNvbCIsCisJfTsKKwlpbnQgaTsKKworCXByaW50aygiMHglMDh4IFsgJXMiLCByaXNjLAorCSAgICAgICBpbnN0cltyaXNjID4+IDI4XSA/IGluc3RyW3Jpc2MgPj4gMjhdIDogIklOVkFMSUQiKTsKKwlmb3IgKGkgPSBBUlJBWV9TSVpFKGJpdHMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHJpc2MgJiAoMSA8PCAoaSArIDEyKSkpCisJCQlwcmludGsoIiAlcyIsIGJpdHNbaV0pOworCX0KKwlwcmludGsoIiBjb3VudD0lZCBdXG4iLCByaXNjICYgMHhmZmYpOworCXJldHVybiBpbmNyW3Jpc2MgPj4gMjhdID8gaW5jcltyaXNjID4+IDI4XSA6IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGkyY19zbGF2ZV9kaWRfYWNrKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApCit7CisJc3RydWN0IGN4MjU4MjFfaTJjICpidXMgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gYnVzLT5kZXY7CisJcmV0dXJuIGN4X3JlYWQoYnVzLT5yZWdfc3RhdCkgJiAweDAxOworfQorCit2b2lkIGN4X2kyY19yZWFkX3ByaW50KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCB1MzIgcmVnLCBjb25zdCBjaGFyICpyZWdfc3RyaW5nKQoreworCWludCB0bXAgPSAwOworCXUzMiB2YWx1ZSA9IDA7CisKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgcmVnLCAmdG1wKTsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9yZWdpc3RlcnNfaW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwl1MzIgdG1wOworCisJLy8gZW5hYmxlIFJVTl9SSVNDIGluIFBlY29zCisJY3hfd3JpdGUoREVWX0NOVFJMMiwgMHgyMCk7CisKKwkvLyBTZXQgdGhlIG1hc3RlciBQQ0kgaW50ZXJydXB0IG1hc2tzIHRvIGVuYWJsZSB2aWRlbywgYXVkaW8sIE1CSUYsIGFuZCBHUElPIGludGVycnVwdHMKKwkvLyBJMkMgaW50ZXJydXB0IG1hc2tpbmcgaXMgaGFuZGxlZCBieSB0aGUgSTJDIG9iamVjdHMgdGhlbXNlbHZlcy4KKwljeF93cml0ZShQQ0lfSU5UX01TSywgMHgyMDAxRkZGRik7CisKKwl0bXAgPSBjeF9yZWFkKFJEUl9UTENUTDApOworCXRtcCAmPSB+RkxEX0NGR19SQ0JfQ0tfRU47CS8vIENsZWFyIHRoZSBSQ0JfQ0tfRU4gYml0CisJY3hfd3JpdGUoUkRSX1RMQ1RMMCwgdG1wKTsKKworCS8vIFBMTC1BIHNldHRpbmcgZm9yIHRoZSBBdWRpbyBNYXN0ZXIgQ2xvY2sKKwljeF93cml0ZShQTExfQV9JTlRfRlJBQywgMHg5ODA3QTU4Qik7CisKKwkvLyBQTExfQV9QT1NUID0gMHgxQywgUExMX0FfT1VUX1RPX1BJTiA9IDB4MQorCWN4X3dyaXRlKFBMTF9BX1BPU1RfU1RBVF9CSVNULCAweDgwMDAwMTlDKTsKKworCS8vIGNsZWFyIHJlc2V0IGJpdCBbMzFdCisJdG1wID0gY3hfcmVhZChQTExfQV9JTlRfRlJBQyk7CisJY3hfd3JpdGUoUExMX0FfSU5UX0ZSQUMsIHRtcCAmIDB4N0ZGRkZGRkYpOworCisJLy8gUExMLUIgc2V0dGluZyBmb3IgTW9iaWx5Z2VuIEhvc3QgQnVzIEludGVyZmFjZQorCWN4X3dyaXRlKFBMTF9CX0lOVF9GUkFDLCAweDk4ODNBODZGKTsKKworCS8vIFBMTF9CX1BPU1QgPSAweEQsIFBMTF9CX09VVF9UT19QSU4gPSAweDAKKwljeF93cml0ZShQTExfQl9QT1NUX1NUQVRfQklTVCwgMHg4MDAwMDE4RCk7CisKKwkvLyBjbGVhciByZXNldCBiaXQgWzMxXQorCXRtcCA9IGN4X3JlYWQoUExMX0JfSU5UX0ZSQUMpOworCWN4X3dyaXRlKFBMTF9CX0lOVF9GUkFDLCB0bXAgJiAweDdGRkZGRkZGKTsKKworCS8vIFBMTC1DIHNldHRpbmcgZm9yIHZpZGVvIHVwc3RyZWFtIGNoYW5uZWwKKwljeF93cml0ZShQTExfQ19JTlRfRlJBQywgMHg5NkEwRUEzRik7CisKKwkvLyBQTExfQ19QT1NUID0gMHgzLCBQTExfQ19PVVRfVE9fUElOID0gMHgwCisJY3hfd3JpdGUoUExMX0NfUE9TVF9TVEFUX0JJU1QsIDB4ODAwMDAxMDMpOworCisJLy8gY2xlYXIgcmVzZXQgYml0IFszMV0KKwl0bXAgPSBjeF9yZWFkKFBMTF9DX0lOVF9GUkFDKTsKKwljeF93cml0ZShQTExfQ19JTlRfRlJBQywgdG1wICYgMHg3RkZGRkZGRik7CisKKwkvLyBQTEwtRCBzZXR0aW5nIGZvciBhdWRpbyB1cHN0cmVhbSBjaGFubmVsCisJY3hfd3JpdGUoUExMX0RfSU5UX0ZSQUMsIDB4OTg3NTdGNUIpOworCisJLy8gUExMX0RfUE9TVCA9IDB4MTMsIFBMTF9EX09VVF9UT19QSU4gPSAweDAKKwljeF93cml0ZShQTExfRF9QT1NUX1NUQVRfQklTVCwgMHg4MDAwMDExMyk7CisKKwkvLyBjbGVhciByZXNldCBiaXQgWzMxXQorCXRtcCA9IGN4X3JlYWQoUExMX0RfSU5UX0ZSQUMpOworCWN4X3dyaXRlKFBMTF9EX0lOVF9GUkFDLCB0bXAgJiAweDdGRkZGRkZGKTsKKworCS8vIFRoaXMgc2VsZWN0cyB0aGUgUExMIEMgY2xvY2sgc291cmNlIGZvciB0aGUgdmlkZW8gdXBzdHJlYW0gY2hhbm5lbCBJIGFuZCBKCisJdG1wID0gY3hfcmVhZChWSURfQ0hfQ0xLX1NFTCk7CisJY3hfd3JpdGUoVklEX0NIX0NMS19TRUwsICh0bXAgJiAweDAwRkZGRkZGKSB8IDB4MjQwMDAwMDApOworCisJLy8gNjU2L1ZJUCBTUkMgVXBzdHJlYW0gQ2hhbm5lbCBJICYgSiBhbmQgNyAtIEhvc3QgQnVzIEludGVyZmFjZSBmb3IgY2hhbm5lbCBBLUMKKwkvL3NlbGVjdCA2NTYvVklQIERTVCBmb3IgZG93bnN0cmVhbSBDaGFubmVsIEEgLSBDCisJdG1wID0gY3hfcmVhZChWSURfQ0hfTU9ERV9TRUwpOworCS8vY3hfd3JpdGUoIFZJRF9DSF9NT0RFX1NFTCwgdG1wIHwgMHgxQjAwMDFGRik7CisJY3hfd3JpdGUoVklEX0NIX01PREVfU0VMLCB0bXAgJiAweEZGRkZGRTAwKTsKKworCS8vIGVuYWJsZXMgNjU2IHBvcnQgSSBhbmQgSiBhcyBvdXRwdXQKKwl0bXAgPSBjeF9yZWFkKENMS19SU1QpOworCXRtcCB8PSBGTERfVVNFX0FMVF9QTExfUkVGOwkvLyB1c2UgZXh0ZXJuYWwgQUxUX1BMTF9SRUYgcGluIGFzIGl0cyByZWZlcmVuY2UgY2xvY2sgaW5zdGVhZAorCWN4X3dyaXRlKENMS19SU1QsIHRtcCAmIH4oRkxEX1ZJRF9JX0NMS19OT0UgfCBGTERfVklEX0pfQ0xLX05PRSkpOworCisJbWRlbGF5KDEwMCk7Cit9CisKK2ludCBjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnBsLCB1MzIgcmlzYykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbGluZXM7CisJdTMyIGNkdDsKKworCWlmIChjaC0+Y21kc19zdGFydCA9PSAwKSB7CisJCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgMCk7CisJCXJldHVybiAwOworCX0KKworCWJwbCA9IChicGwgKyA3KSAmIH43OwkvKiBhbGlnbm1lbnQgKi8KKwljZHQgPSBjaC0+Y2R0OworCWxpbmVzID0gY2gtPmZpZm9fc2l6ZSAvIGJwbDsKKworCWlmIChsaW5lcyA+IDQpIHsKKwkJbGluZXMgPSA0OworCX0KKworCUJVR19PTihsaW5lcyA8IDIpOworCisJY3hfd3JpdGUoOCArIDAsIFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJY3hfd3JpdGUoOCArIDQsIDgpOworCWN4X3dyaXRlKDggKyA4LCAwKTsKKworCS8qIHdyaXRlIENEVCAqLworCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSwgY2gtPmZpZm9fc3RhcnQgKyBicGwgKiBpKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgNCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDgsIDApOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyAxMiwgMCk7CisJfQorCisJLy9pbml0IHRoZSBmaXJzdCBjZHQgYnVmZmVyCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQorCQljeF93cml0ZShjaC0+Zmlmb19zdGFydCArIDQgKiBpLCBpKTsKKworCS8qIHdyaXRlIENNRFMgKi8KKwlpZiAoY2gtPmp1bXBvbmx5KSB7CisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMCwgOCk7CisJfSBlbHNlIHsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCByaXNjKTsKKwl9CisKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDQsIDApOwkvKiA2NCBiaXRzIDYzLTMyICovCisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyA4LCBjZHQpOworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTIsIChsaW5lcyAqIDE2KSA+PiAzKTsKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDE2LCBjaC0+Y3RybF9zdGFydCk7CisKKwlpZiAoY2gtPmp1bXBvbmx5KQorCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCAweDgwMDAwMDAwIHwgKDY0ID4+IDIpKTsKKwllbHNlCisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMjAsIDY0ID4+IDIpOworCisJZm9yIChpID0gMjQ7IGkgPCA4MDsgaSArPSA0KQorCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIGksIDApOworCisJLyogZmlsbCByZWdpc3RlcnMgKi8KKwljeF93cml0ZShjaC0+cHRyMV9yZWcsIGNoLT5maWZvX3N0YXJ0KTsKKwljeF93cml0ZShjaC0+cHRyMl9yZWcsIGNkdCk7CisJY3hfd3JpdGUoY2gtPmNudDJfcmVnLCAobGluZXMgKiAxNikgPj4gMyk7CisJY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAoYnBsID4+IDMpIC0gMSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgYnBsLCB1MzIgcmlzYykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbGluZXM7CisJdTMyIGNkdDsKKworCWlmIChjaC0+Y21kc19zdGFydCA9PSAwKSB7CisJCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgMCk7CisJCXJldHVybiAwOworCX0KKworCWJwbCA9IChicGwgKyA3KSAmIH43OwkvKiBhbGlnbm1lbnQgKi8KKwljZHQgPSBjaC0+Y2R0OworCWxpbmVzID0gY2gtPmZpZm9fc2l6ZSAvIGJwbDsKKworCWlmIChsaW5lcyA+IDMpIHsKKwkJbGluZXMgPSAzOwkvL2ZvciBBVURJTworCX0KKworCUJVR19PTihsaW5lcyA8IDIpOworCisJY3hfd3JpdGUoOCArIDAsIFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJY3hfd3JpdGUoOCArIDQsIDgpOworCWN4X3dyaXRlKDggKyA4LCAwKTsKKworCS8qIHdyaXRlIENEVCAqLworCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSwgY2gtPmZpZm9fc3RhcnQgKyBicGwgKiBpKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgNCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDgsIDApOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyAxMiwgMCk7CisJfQorCisJLyogd3JpdGUgQ01EUyAqLworCWlmIChjaC0+anVtcG9ubHkpIHsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCA4KTsKKwl9IGVsc2UgeworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDAsIHJpc2MpOworCX0KKworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgNCwgMCk7CS8qIDY0IGJpdHMgNjMtMzIgKi8KKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDgsIGNkdCk7CisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxMiwgKGxpbmVzICogMTYpID4+IDMpOworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTYsIGNoLT5jdHJsX3N0YXJ0KTsKKworCS8vSVEgc2l6ZQorCWlmIChjaC0+anVtcG9ubHkpIHsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgMHg4MDAwMDAwMCB8ICg2NCA+PiAyKSk7CisJfSBlbHNlIHsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgNjQgPj4gMik7CisJfQorCisJLy96ZXJvIG91dAorCWZvciAoaSA9IDI0OyBpIDwgODA7IGkgKz0gNCkKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyBpLCAwKTsKKworCS8qIGZpbGwgcmVnaXN0ZXJzICovCisJY3hfd3JpdGUoY2gtPnB0cjFfcmVnLCBjaC0+Zmlmb19zdGFydCk7CisJY3hfd3JpdGUoY2gtPnB0cjJfcmVnLCBjZHQpOworCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgKGxpbmVzICogMTYpID4+IDMpOworCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgKGJwbCA+PiAzKSAtIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gpCit7CisJc3RhdGljIGNoYXIgKm5hbWVbXSA9IHsKKwkJImluaXQgcmlzYyBsbyIsCisJCSJpbml0IHJpc2MgaGkiLAorCQkiY2R0IGJhc2UiLAorCQkiY2R0IHNpemUiLAorCQkiaXEgYmFzZSIsCisJCSJpcSBzaXplIiwKKwkJInJpc2MgcGMgbG8iLAorCQkicmlzYyBwYyBoaSIsCisJCSJpcSB3ciBwdHIiLAorCQkiaXEgcmQgcHRyIiwKKwkJImNkdCBjdXJyZW50IiwKKwkJInBjaSB0YXJnZXQgbG8iLAorCQkicGNpIHRhcmdldCBoaSIsCisJCSJsaW5lIC8gYnl0ZSIsCisJfTsKKwl1MzIgcmlzYzsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgbjsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyAtIGRtYSBjaGFubmVsIHN0YXR1cyBkdW1wXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIGNoLT5uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYW1lKTsgaSsrKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbWRzICsgMHglMng6ICAgJS0xNXM6IDB4JTA4eFxuIiwgaSAqIDQsCisJCSAgICAgICBuYW1lW2ldLCBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCAqIGkpKTsKKworCWogPSBpICogNDsKKwlmb3IgKGkgPSAwOyBpIDwgNDspIHsKKwkJcmlzYyA9IGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogKGkgKyAxNCkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbWRzICsgMHglMng6ICAgcmlzYyVkOiAiLCBqICsgaSAqIDQsIGkpOworCQlpICs9IGN4MjU4MjFfcmlzY19kZWNvZGUocmlzYyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8ICg2NCA+PiAyKTsgaSArPSBuKSB7CisJCXJpc2MgPSBjeF9yZWFkKGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGkpOworCQkvKiBObyBjb25zaWRlcmF0aW9uIGZvciBiaXRzIDYzLTMyICovCisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RybCArIDB4JTJ4ICgweCUwOHgpOiBpcSAleDogIiwgaSAqIDQsCisJCSAgICAgICBjaC0+Y3RybF9zdGFydCArIDQgKiBpLCBpKTsKKwkJbiA9IGN4MjU4MjFfcmlzY19kZWNvZGUocmlzYyk7CisJCWZvciAoaiA9IDE7IGogPCBuOyBqKyspIHsKKwkJCXJpc2MgPSBjeF9yZWFkKGNoLT5jdHJsX3N0YXJ0ICsgNCAqIChpICsgaikpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJjdHJsICsgMHglMnggOiAgIGlxICV4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCisJCQkgICAgICAgNCAqIChpICsgaiksIGkgKyBqLCByaXNjLCBqKTsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAorCSAgICAgICBjaC0+Zmlmb19zdGFydCwgY2gtPmZpZm9fc3RhcnQgKyBjaC0+Zmlmb19zaXplKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKKwkgICAgICAgY2gtPmN0cmxfc3RhcnQsIGNoLT5jdHJsX3N0YXJ0ICsgNiAqIDE2KTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBwdHIxX3JlZzogMHglMDh4XG4iLAorCSAgICAgICBjeF9yZWFkKGNoLT5wdHIxX3JlZykpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCisJICAgICAgIGN4X3JlYWQoY2gtPnB0cjJfcmVnKSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKKwkgICAgICAgY3hfcmVhZChjaC0+Y250MV9yZWcpKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjbnQyX3JlZzogMHglMDh4XG4iLAorCSAgICAgICBjeF9yZWFkKGNoLT5jbnQyX3JlZykpOworfQorCit2b2lkIGN4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXBfYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCkKK3sKKwlzdGF0aWMgY2hhciAqbmFtZVtdID0geworCQkiaW5pdCByaXNjIGxvIiwKKwkJImluaXQgcmlzYyBoaSIsCisJCSJjZHQgYmFzZSIsCisJCSJjZHQgc2l6ZSIsCisJCSJpcSBiYXNlIiwKKwkJImlxIHNpemUiLAorCQkicmlzYyBwYyBsbyIsCisJCSJyaXNjIHBjIGhpIiwKKwkJImlxIHdyIHB0ciIsCisJCSJpcSByZCBwdHIiLAorCQkiY2R0IGN1cnJlbnQiLAorCQkicGNpIHRhcmdldCBsbyIsCisJCSJwY2kgdGFyZ2V0IGhpIiwKKwkJImxpbmUgLyBieXRlIiwKKwl9OworCisJdTMyIHJpc2MsIHZhbHVlLCB0bXA7CisJdW5zaWduZWQgaW50IGksIGosIG47CisKKwlwcmludGsoS0VSTl9JTkZPICJcbiVzOiAlcyAtIGRtYSBBdWRpbyBjaGFubmVsIHN0YXR1cyBkdW1wXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGNoLT5uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hbWUpOyBpKyspCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjbWRzICsgMHglMng6ICAgJS0xNXM6IDB4JTA4eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaSAqIDQsIG5hbWVbaV0sCisJCSAgICAgICBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCAqIGkpKTsKKworCWogPSBpICogNDsKKwlmb3IgKGkgPSAwOyBpIDwgNDspIHsKKwkJcmlzYyA9IGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogKGkgKyAxNCkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbWRzICsgMHglMng6ICAgcmlzYyVkOiAiLCBqICsgaSAqIDQsIGkpOworCQlpICs9IGN4MjU4MjFfcmlzY19kZWNvZGUocmlzYyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8ICg2NCA+PiAyKTsgaSArPSBuKSB7CisJCXJpc2MgPSBjeF9yZWFkKGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGkpOworCQkvKiBObyBjb25zaWRlcmF0aW9uIGZvciBiaXRzIDYzLTMyICovCisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RybCArIDB4JTJ4ICgweCUwOHgpOiBpcSAleDogIiwgaSAqIDQsCisJCSAgICAgICBjaC0+Y3RybF9zdGFydCArIDQgKiBpLCBpKTsKKwkJbiA9IGN4MjU4MjFfcmlzY19kZWNvZGUocmlzYyk7CisKKwkJZm9yIChqID0gMTsgaiA8IG47IGorKykgeworCQkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogKGkgKyBqKSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImN0cmwgKyAweCUyeCA6ICAgaXEgJXg6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKKwkJCSAgICAgICA0ICogKGkgKyBqKSwgaSArIGosIHJpc2MsIGopOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgZmlmbzogMHglMDh4IC0+IDB4JXhcbiIsCisJICAgICAgIGNoLT5maWZvX3N0YXJ0LCBjaC0+Zmlmb19zdGFydCArIGNoLT5maWZvX3NpemUpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGN0cmw6IDB4JTA4eCAtPiAweCV4XG4iLAorCSAgICAgICBjaC0+Y3RybF9zdGFydCwgY2gtPmN0cmxfc3RhcnQgKyA2ICogMTYpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIHB0cjFfcmVnOiAweCUwOHhcbiIsCisJICAgICAgIGN4X3JlYWQoY2gtPnB0cjFfcmVnKSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgcHRyMl9yZWc6IDB4JTA4eFxuIiwKKwkgICAgICAgY3hfcmVhZChjaC0+cHRyMl9yZWcpKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjbnQxX3JlZzogMHglMDh4XG4iLAorCSAgICAgICBjeF9yZWFkKGNoLT5jbnQxX3JlZykpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGNudDJfcmVnOiAweCUwOHhcbiIsCisJICAgICAgIGN4X3JlYWQoY2gtPmNudDJfcmVnKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJpc2MgPSBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNTYgKyAoaSAqIDQpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW5zdHJ1Y3Rpb24gJWQgPSAweCV4XG4iLCBpLCByaXNjKTsKKwl9CisKKwkvL3JlYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBjZHQgYnVmZmVyCisJcmlzYyA9IGN4X3JlYWQoQVVEX0FfQ0RUKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJcbnJlYWQgY2R0IGxvYz0weCV4XG4iLCByaXNjKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCW4gPSBjeF9yZWFkKHJpc2MgKyBpICogNCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIjB4JXggIiwgbik7CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgIlxuXG4iKTsKKworCXZhbHVlID0gY3hfcmVhZChDTEtfUlNUKTsKKwlDWDI1ODIxX0lORk8oIiBDTEtfUlNUID0gMHgleCBcblxuIiwgdmFsdWUpOworCisJdmFsdWUgPSBjeF9yZWFkKFBMTF9BX1BPU1RfU1RBVF9CSVNUKTsKKwlDWDI1ODIxX0lORk8oIiBQTExfQV9QT1NUX1NUQVRfQklTVCA9IDB4JXggXG5cbiIsIHZhbHVlKTsKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0FfSU5UX0ZSQUMpOworCUNYMjU4MjFfSU5GTygiIFBMTF9BX0lOVF9GUkFDID0gMHgleCBcblxuIiwgdmFsdWUpOworCisJdmFsdWUgPSBjeF9yZWFkKFBMTF9CX1BPU1RfU1RBVF9CSVNUKTsKKwlDWDI1ODIxX0lORk8oIiBQTExfQl9QT1NUX1NUQVRfQklTVCA9IDB4JXggXG5cbiIsIHZhbHVlKTsKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0JfSU5UX0ZSQUMpOworCUNYMjU4MjFfSU5GTygiIFBMTF9CX0lOVF9GUkFDID0gMHgleCBcblxuIiwgdmFsdWUpOworCisJdmFsdWUgPSBjeF9yZWFkKFBMTF9DX1BPU1RfU1RBVF9CSVNUKTsKKwlDWDI1ODIxX0lORk8oIiBQTExfQ19QT1NUX1NUQVRfQklTVCA9IDB4JXggXG5cbiIsIHZhbHVlKTsKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0NfSU5UX0ZSQUMpOworCUNYMjU4MjFfSU5GTygiIFBMTF9DX0lOVF9GUkFDID0gMHgleCBcblxuIiwgdmFsdWUpOworCisJdmFsdWUgPSBjeF9yZWFkKFBMTF9EX1BPU1RfU1RBVF9CSVNUKTsKKwlDWDI1ODIxX0lORk8oIiBQTExfRF9QT1NUX1NUQVRfQklTVCA9IDB4JXggXG5cbiIsIHZhbHVlKTsKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0RfSU5UX0ZSQUMpOworCUNYMjU4MjFfSU5GTygiIFBMTF9EX0lOVF9GUkFDID0gMHgleCBcblxuIiwgdmFsdWUpOworCisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIEFGRV9BQl9ESUFHX0NUUkwsICZ0bXApOworCUNYMjU4MjFfSU5GTygiIEFGRV9BQl9ESUFHX0NUUkwgKDB4MTA5MDAwOTApID0gMHgleCBcblxuIiwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX3NodXRkb3duKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWludCBpOworCisJLyogZGlzYWJsZSBSSVNDIGNvbnRyb2xsZXIgKi8KKwljeF93cml0ZShERVZfQ05UUkwyLCAwKTsKKworCS8qIERpc2FibGUgVmlkZW8gQS9CIGFjdGl2aXR5ICovCisJZm9yIChpID0gMDsgaSA8IFZJRF9DSEFOTkVMX05VTTsgaSsrKSB7CisJCWN4X3dyaXRlKGRldi0+c3JhbV9jaGFubmVsc1tpXS5kbWFfY3RsLCAwKTsKKwkJY3hfd3JpdGUoZGV2LT5zcmFtX2NoYW5uZWxzW2ldLmludF9tc2ssIDApOworCX0KKworCWZvciAoaSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSTsgaSA8PSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0o7CisJICAgICBpKyspIHsKKwkJY3hfd3JpdGUoZGV2LT5zcmFtX2NoYW5uZWxzW2ldLmRtYV9jdGwsIDApOworCQljeF93cml0ZShkZXYtPnNyYW1fY2hhbm5lbHNbaV0uaW50X21zaywgMCk7CisJfQorCisJLyogRGlzYWJsZSBBdWRpbyBhY3Rpdml0eSAqLworCWN4X3dyaXRlKEFVRF9JTlRfRE1BX0NUTCwgMCk7CisKKwkvKiBEaXNhYmxlIFNlcmlhbCBwb3J0ICovCisJY3hfd3JpdGUoVUFSVF9DVEwsIDApOworCisJLyogRGlzYWJsZSBJbnRlcnJ1cHRzICovCisJY3hfd3JpdGUoUENJX0lOVF9NU0ssIDApOworCWN4X3dyaXRlKEFVRF9BX0lOVF9NU0ssIDApOworfQorCit2b2lkIGN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5uZWxfc2VsZWN0LAorCQkJICAgICAgdTMyIGZvcm1hdCkKK3sKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaDsKKworCWlmIChjaGFubmVsX3NlbGVjdCA8PSA3ICYmIGNoYW5uZWxfc2VsZWN0ID49IDApIHsKKwkJY2ggPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW2NoYW5uZWxfc2VsZWN0XTsKKwkJY3hfd3JpdGUoY2gtPnBpeF9mcm10LCBmb3JtYXQpOworCQlkZXYtPnBpeGVsX2Zvcm1hdHNbY2hhbm5lbF9zZWxlY3RdID0gZm9ybWF0OworCX0KK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9zZXRfdmlwX21vZGUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoKQoreworCWN4X3dyaXRlKGNoLT5waXhfZnJtdCwgUElYRUxfRlJNVF80MjIpOworCWN4X3dyaXRlKGNoLT52aXBfY3RsLCBQSVhFTF9FTkdJTkVfVklQMSk7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfaW5pdGlhbGl6ZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpbnQgaTsKKworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWN4MjU4MjFfc2h1dGRvd24oZGV2KTsKKwljeF93cml0ZShQQ0lfSU5UX1NUQVQsIDB4ZmZmZmZmZmYpOworCisJZm9yIChpID0gMDsgaSA8IFZJRF9DSEFOTkVMX05VTTsgaSsrKQorCQljeF93cml0ZShkZXYtPnNyYW1fY2hhbm5lbHNbaV0uaW50X3N0YXQsIDB4ZmZmZmZmZmYpOworCisJY3hfd3JpdGUoQVVEX0FfSU5UX1NUQVQsIDB4ZmZmZmZmZmYpOworCWN4X3dyaXRlKEFVRF9CX0lOVF9TVEFULCAweGZmZmZmZmZmKTsKKwljeF93cml0ZShBVURfQ19JTlRfU1RBVCwgMHhmZmZmZmZmZik7CisJY3hfd3JpdGUoQVVEX0RfSU5UX1NUQVQsIDB4ZmZmZmZmZmYpOworCWN4X3dyaXRlKEFVRF9FX0lOVF9TVEFULCAweGZmZmZmZmZmKTsKKworCWN4X3dyaXRlKENMS19ERUxBWSwgY3hfcmVhZChDTEtfREVMQVkpICYgMHg4MDAwMDAwMCk7CisJY3hfd3JpdGUoUEFEX0NUUkwsIDB4MTIpOwkvL2ZvciBJMkMKKwljeDI1ODIxX3JlZ2lzdGVyc19pbml0KGRldik7CS8vaW5pdCBQZWNvcyByZWdpc3RlcnMKKwltZGVsYXkoMTAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBWSURfQ0hBTk5FTF9OVU07IGkrKykgeworCQljeDI1ODIxX3NldF92aXBfbW9kZShkZXYsICZkZXYtPnNyYW1fY2hhbm5lbHNbaV0pOworCQljeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cChkZXYsICZkZXYtPnNyYW1fY2hhbm5lbHNbaV0sIDE0NDAsCisJCQkJCSAgIDApOworCQlkZXYtPnBpeGVsX2Zvcm1hdHNbaV0gPSBQSVhFTF9GUk1UXzQyMjsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25baV0gPSBGQUxTRTsKKwl9CisKKwkvL1Byb2JhYmx5IG9ubHkgYWZmZWN0IERvd25zdHJlYW0KKwlmb3IgKGkgPSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0k7IGkgPD0gVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9KOworCSAgICAgaSsrKSB7CisJCWN4MjU4MjFfc2V0X3ZpcF9tb2RlKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1tpXSk7CisJfQorCisJY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXBfYXVkaW8oZGV2LCAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwOF0sCisJCQkJCSAxMjgsIDApOworCisJY3gyNTgyMV9ncGlvX2luaXQoZGV2KTsKK30KKworc3RhdGljIGludCBnZXRfcmVzb3VyY2VzKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24KKwkgICAgKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApLAorCSAgICAgZGV2LT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgTU1JTyBtZW1vcnkgQCAweCVsbHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApKTsKKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfZGV2X2NoZWNrcmV2aXNpb24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJZGV2LT5od3JldmlzaW9uID0gY3hfcmVhZChSRFJfQ0ZHMikgJiAweGZmOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBIYXJkd2FyZSByZXZpc2lvbiA9IDB4JTAyeFxuIiwgX19mdW5jX18sCisJICAgICAgIGRldi0+aHdyZXZpc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfaW91bm1hcChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFJlbGVhc2luZyBJTyBtZW1vcnkgKi8KKwlpZiAoZGV2LT5sbW1pbyAhPSBOVUxMKSB7CisJCUNYMjU4MjFfSU5GTygiUmVsZWFzaW5nIGxtbWlvLlxuIik7CisJCWlvdW5tYXAoZGV2LT5sbW1pbyk7CisJCWRldi0+bG1taW8gPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBjeDI1ODIxX2Rldl9zZXR1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpbnQgaW9fc2l6ZSA9IDAsIGk7CisKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb190ZW1wbGF0ZVtdID0geworCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTAsCisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMSwKKwkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGUyLAorCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTMsCisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNCwKKwkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGU1LAorCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTYsCisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNywKKwkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGU5LAorCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTEwLAorCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTExLAorCQkmY3gyNTgyMV92aWRlb2lvY3RsX3RlbXBsYXRlLAorCX07CisKKwlwcmludGsoS0VSTl9JTkZPICJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJjeDI1ODIxIHNldCB1cFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7CisKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCisJYXRvbWljX2luYygmZGV2LT5yZWZjb3VudCk7CisKKwlkZXYtPm5yID0gKytjeDI1ODIxX2RldmNvdW50OworCXNwcmludGYoZGV2LT5uYW1lLCAiY3gyNTgyMVslZF0iLCBkZXYtPm5yKTsKKworCW11dGV4X2xvY2soJmRldmxpc3QpOworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwgJmN4MjU4MjFfZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKKworCXN0cmNweShjeDI1ODIxX2JvYXJkc1tVTktOT1dOX0JPQVJEXS5uYW1lLCAidW5rbm93biIpOworCXN0cmNweShjeDI1ODIxX2JvYXJkc1tDWDI1ODIxX0JPQVJEXS5uYW1lLCAiY3gyNTgyMSIpOworCisJaWYgKGRldi0+cGNpLT5kZXZpY2UgIT0gMHg4MjEwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIlcygpIEV4aXRpbmcuIEluY29ycmVjdCBIYXJkd2FyZSBkZXZpY2UgPSAweCUwMnhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5wY2ktPmRldmljZSk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJBdGhlbmEgSGFyZHdhcmUgZGV2aWNlID0gMHglMDJ4XG4iLAorCQkgICAgICAgZGV2LT5wY2ktPmRldmljZSk7CisJfQorCisJLyogQXBwbHkgYSBzZW5zaWJsZSBjbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBQQ0llIGJyaWRnZSAqLworCWRldi0+Y2xrX2ZyZXEgPSAyODAwMDAwMDsKKwlkZXYtPnNyYW1fY2hhbm5lbHMgPSBjeDI1ODIxX3NyYW1fY2hhbm5lbHM7CisKKwlpZiAoZGV2LT5uciA+IDEpIHsKKwkJQ1gyNTgyMV9JTkZPKCJkZXYtPm5yID4gMSEiKTsKKwl9CisKKwkvKiBib2FyZCBjb25maWcgKi8KKwlkZXYtPmJvYXJkID0gMTsJCS8vY2FyZFtkZXYtPm5yXTsKKwlkZXYtPl9tYXhfbnVtX2RlY29kZXJzID0gTUFYX0RFQ09ERVJTOworCisJZGV2LT5wY2lfYnVzID0gZGV2LT5wY2ktPmJ1cy0+bnVtYmVyOworCWRldi0+cGNpX3Nsb3QgPSBQQ0lfU0xPVChkZXYtPnBjaS0+ZGV2Zm4pOworCWRldi0+cGNpX2lycW1hc2sgPSAweDAwMWYwMDsKKworCS8qIEV4dGVybmFsIE1hc3RlciAxIEJ1cyAqLworCWRldi0+aTJjX2J1c1swXS5uciA9IDA7CisJZGV2LT5pMmNfYnVzWzBdLmRldiA9IGRldjsKKwlkZXYtPmkyY19idXNbMF0ucmVnX3N0YXQgPSBJMkMxX1NUQVQ7CisJZGV2LT5pMmNfYnVzWzBdLnJlZ19jdHJsID0gSTJDMV9DVFJMOworCWRldi0+aTJjX2J1c1swXS5yZWdfYWRkciA9IEkyQzFfQUREUjsKKwlkZXYtPmkyY19idXNbMF0ucmVnX3JkYXRhID0gSTJDMV9SREFUQTsKKwlkZXYtPmkyY19idXNbMF0ucmVnX3dkYXRhID0gSTJDMV9XREFUQTsKKwlkZXYtPmkyY19idXNbMF0uaTJjX3BlcmlvZCA9ICgweDA3IDw8IDI0KTsJLyogMS45NU1IeiAqLworCisKKwlpZiAoZ2V0X3Jlc291cmNlcyhkZXYpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIE5vIG1vcmUgUENJZSByZXNvdXJjZXMgZm9yICIKKwkJICAgICAgICJzdWJzeXN0ZW06ICUwNHg6JTA0eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCisJCSAgICAgICBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CisKKwkJY3gyNTgyMV9kZXZjb3VudC0tOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBQQ0llIHN0dWZmICovCisJZGV2LT5iYXNlX2lvX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApOworCWlvX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKTsKKworCWlmICghZGV2LT5iYXNlX2lvX2FkZHIpIHsKKwkJQ1gyNTgyMV9FUlIoIk5vIFBDSSBNZW1vcnkgcmVzb3VyY2VzLCBleGl0aW5nIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldi0+bG1taW8gPSBpb3JlbWFwKGRldi0+YmFzZV9pb19hZGRyLCBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSk7CisKKwlpZiAoIWRldi0+bG1taW8pIHsKKwkJQ1gyNTgyMV9FUlIKKwkJICAgICgiaW9yZW1hcCBmYWlsZWQsIG1heWJlIGluY3JlYXNpbmcgX19WTUFMTE9DX1JFU0VSVkUgaW4gcGFnZS5oXG4iKTsKKwkJY3gyNTgyMV9pb3VubWFwKGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldi0+Ym1taW8gPSAodTggX19pb21lbSAqKSBkZXYtPmxtbWlvOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN1YnN5c3RlbTogJTA0eDolMDR4LCBib2FyZDogJXMgW2NhcmQ9JWQsJXNdXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAorCSAgICAgICBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSwgY3gyNTgyMV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwKKwkgICAgICAgZGV2LT5ib2FyZCwgY2FyZFtkZXYtPm5yXSA9PSBkZXYtPmJvYXJkID8KKwkgICAgICAgImluc21vZCBvcHRpb24iIDogImF1dG9kZXRlY3RlZCIpOworCisJLyogaW5pdCBoYXJkd2FyZSAqLworCWN4MjU4MjFfaW5pdGlhbGl6ZShkZXYpOworCisJY3gyNTgyMV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1swXSk7CisvLyAgY3gyNTgyMV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1sxXSk7CisvLyAgY3gyNTgyMV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1syXSk7CisKKwlDWDI1ODIxX0lORk8oImkyYyByZWdpc3RlciEgYnVzLT5pMmNfcmMgPSAlZFxuIiwKKwkJICAgICBkZXYtPmkyY19idXNbMF0uaTJjX3JjKTsKKworCWN4MjU4MjFfY2FyZF9zZXR1cChkZXYpOworCW1lZHVzYV92aWRlb19pbml0KGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspIHsKKwkJaWYgKGN4MjU4MjFfdmlkZW9fcmVnaXN0ZXIoZGV2LCBpLCB2aWRlb190ZW1wbGF0ZVtpXSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXMoKSBGYWlsZWQgdG8gcmVnaXN0ZXIgYW5hbG9nIHZpZGVvIGFkYXB0ZXJzIG9uIFZJRCBjaGFubmVsICVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpKTsKKwkJfQorCX0KKworCWZvciAoaSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSTsKKwkgICAgIGkgPD0gQVVESU9fVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0I7IGkrKykgeworCQkvL1NpbmNlIHdlIGRvbid0IGhhdmUgdGVtcGxhdGU4IGZvciBBdWRpbyBEb3duc3RyZWFtCisJCWlmIChjeDI1ODIxX3ZpZGVvX3JlZ2lzdGVyKGRldiwgaSwgdmlkZW9fdGVtcGxhdGVbaSAtIDFdKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcygpIEZhaWxlZCB0byByZWdpc3RlciBhbmFsb2cgdmlkZW8gYWRhcHRlcnMgZm9yIFVwc3RyZWFtIGNoYW5uZWwgJWQuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpKTsKKwkJfQorCX0KKworCS8vIHJlZ2lzdGVyIElPQ1RMIGRldmljZQorCWRldi0+aW9jdGxfZGV2ID0KKwkgICAgY3gyNTgyMV92ZGV2X2luaXQoZGV2LCBkZXYtPnBjaSwgdmlkZW9fdGVtcGxhdGVbVklERU9fSU9DVExfQ0hdLAorCQkJICAgICAgInZpZGVvIik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlCisJICAgIChkZXYtPmlvY3RsX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgVklERU9fSU9DVExfQ0gpIDwgMCkgeworCQljeDI1ODIxX3ZpZGVvaW9jdGxfdW5yZWdpc3RlcihkZXYpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlcygpIEZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBhZGFwdGVyIGZvciBJT0NUTCBzbyByZWxlYXNpbmcuXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCX0KKworCWN4MjU4MjFfZGV2X2NoZWNrcmV2aXNpb24oZGV2KTsKKwlDWDI1ODIxX0lORk8oImN4MjU4MjEgc2V0dXAgZG9uZSFcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3gyNTgyMV9zdGFydF91cHN0cmVhbV92aWRlb19jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICAgc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICp1cF9kYXRhKQoreworCWRldi0+X2lzTlRTQyA9ICFzdHJjbXAoZGV2LT52aWRfc3RkbmFtZSwgIk5UU0MiKSA/IDEgOiAwOworCisJZGV2LT50dm5vcm0gPSAhZGV2LT5faXNOVFNDID8gVjRMMl9TVERfUEFMX0JHIDogVjRMMl9TVERfTlRTQ19NOworCW1lZHVzYV9zZXRfdmlkZW9zdGFuZGFyZChkZXYpOworCisJY3gyNTgyMV92aWR1cHN0cmVhbV9pbml0X2NoMShkZXYsIGRldi0+Y2hhbm5lbF9zZWxlY3QsCisJCQkJICAgICBkZXYtPnBpeGVsX2Zvcm1hdCk7Cit9CisKK3ZvaWQgY3gyNTgyMV9zdGFydF91cHN0cmVhbV92aWRlb19jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICAgc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICp1cF9kYXRhKQoreworCWRldi0+X2lzTlRTQ19jaDIgPSAhc3RyY21wKGRldi0+dmlkX3N0ZG5hbWVfY2gyLCAiTlRTQyIpID8gMSA6IDA7CisKKwlkZXYtPnR2bm9ybSA9ICFkZXYtPl9pc05UU0NfY2gyID8gVjRMMl9TVERfUEFMX0JHIDogVjRMMl9TVERfTlRTQ19NOworCW1lZHVzYV9zZXRfdmlkZW9zdGFuZGFyZChkZXYpOworCisJY3gyNTgyMV92aWR1cHN0cmVhbV9pbml0X2NoMihkZXYsIGRldi0+Y2hhbm5lbF9zZWxlY3RfY2gyLAorCQkJCSAgICAgZGV2LT5waXhlbF9mb3JtYXRfY2gyKTsKK30KKwordm9pZCBjeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICp1cF9kYXRhKQoreworCWN4MjU4MjFfYXVkaW9fdXBzdHJlYW1faW5pdChkZXYsIEFVRElPX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9CKTsKK30KKwordm9pZCBjeDI1ODIxX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWludCBpOworCisJaWYgKCFkZXYtPmJhc2VfaW9fYWRkcikKKwkJcmV0dXJuOworCisJY3gyNTgyMV9mcmVlX21lbV91cHN0cmVhbV9jaDEoZGV2KTsKKwljeDI1ODIxX2ZyZWVfbWVtX3Vwc3RyZWFtX2NoMihkZXYpOworCWN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fYXVkaW8oZGV2KTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfaW9fYWRkciwgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCkpOworCisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnJlZmNvdW50KSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IFZJRF9DSEFOTkVMX05VTTsgaSsrKQorCQljeDI1ODIxX3ZpZGVvX3VucmVnaXN0ZXIoZGV2LCBpKTsKKworCWZvciAoaSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSTsKKwkgICAgIGkgPD0gQVVESU9fVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0I7IGkrKykgeworCQljeDI1ODIxX3ZpZGVvX3VucmVnaXN0ZXIoZGV2LCBpKTsKKwl9CisKKwljeDI1ODIxX3ZpZGVvaW9jdGxfdW5yZWdpc3RlcihkZXYpOworCisJY3gyNTgyMV9pMmNfdW5yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzBdKTsKKwljeDI1ODIxX2lvdW5tYXAoZGV2KTsKK30KKworc3RhdGljIF9fbGUzMiAqY3gyNTgyMV9yaXNjX2ZpZWxkKF9fbGUzMiAqIHJwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCQkgIHVuc2lnbmVkIGludCBvZmZzZXQsIHUzMiBzeW5jX2xpbmUsCisJCQkJICB1bnNpZ25lZCBpbnQgYnBsLCB1bnNpZ25lZCBpbnQgcGFkZGluZywKKwkJCQkgIHVuc2lnbmVkIGludCBsaW5lcykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBsaW5lLCB0b2RvOworCisJLyogc3luYyBpbnN0cnVjdGlvbiAqLworCWlmIChzeW5jX2xpbmUgIT0gTk9fU1lOQ19MSU5FKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1JFU1lOQyB8IHN5bmNfbGluZSk7CisJfQorCisJLyogc2NhbiBsaW5lcyAqLworCXNnID0gc2dsaXN0OworCWZvciAobGluZSA9IDA7IGxpbmUgPCBsaW5lczsgbGluZSsrKSB7CisJCXdoaWxlIChvZmZzZXQgJiYgb2Zmc2V0ID49IHNnX2RtYV9sZW4oc2cpKSB7CisJCQlvZmZzZXQgLT0gc2dfZG1hX2xlbihzZyk7CisJCQlzZysrOworCQl9CisJCWlmIChicGwgPD0gc2dfZG1hX2xlbihzZykgLSBvZmZzZXQpIHsKKwkJCS8qIGZpdHMgaW50byBjdXJyZW50IGNodW5rICovCisJCQkqKHJwKyspID0KKwkJCSAgICBjcHVfdG9fbGUzMihSSVNDX1dSSVRFIHwgUklTQ19TT0wgfCBSSVNDX0VPTCB8IGJwbCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpICsgb2Zmc2V0KTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCQkJb2Zmc2V0ICs9IGJwbDsKKwkJfSBlbHNlIHsKKwkJCS8qIHNjYW5saW5lIG5lZWRzIHRvIGJlIHNwbGl0ICovCisJCQl0b2RvID0gYnBsOworCQkJKihycCsrKSA9CisJCQkgICAgY3B1X3RvX2xlMzIoUklTQ19XUklURSB8IFJJU0NfU09MIHwKKwkJCQkJKHNnX2RtYV9sZW4oc2cpIC0gb2Zmc2V0KSk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpICsgb2Zmc2V0KTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCQkJdG9kbyAtPSAoc2dfZG1hX2xlbihzZykgLSBvZmZzZXQpOworCQkJb2Zmc2V0ID0gMDsKKwkJCXNnKys7CisJCQl3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7CisJCQkJKihycCsrKSA9CisJCQkJICAgIGNwdV90b19sZTMyKFJJU0NfV1JJVEUgfCBzZ19kbWFfbGVuKHNnKSk7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisJCQkJdG9kbyAtPSBzZ19kbWFfbGVuKHNnKTsKKwkJCQlzZysrOworCQkJfQorCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEUgfCBSSVNDX0VPTCB8IHRvZG8pOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKwkJCW9mZnNldCArPSB0b2RvOworCQl9CisKKwkJb2Zmc2V0ICs9IHBhZGRpbmc7CisJfQorCisJcmV0dXJuIHJwOworfQorCitpbnQgY3gyNTgyMV9yaXNjX2J1ZmZlcihzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAorCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIHVuc2lnbmVkIGludCB0b3Bfb2Zmc2V0LAorCQkJdW5zaWduZWQgaW50IGJvdHRvbV9vZmZzZXQsIHVuc2lnbmVkIGludCBicGwsCisJCQl1bnNpZ25lZCBpbnQgcGFkZGluZywgdW5zaWduZWQgaW50IGxpbmVzKQoreworCXUzMiBpbnN0cnVjdGlvbnM7CisJdTMyIGZpZWxkczsKKwlfX2xlMzIgKnJwOworCWludCByYzsKKworCWZpZWxkcyA9IDA7CisJaWYgKFVOU0VUICE9IHRvcF9vZmZzZXQpCisJCWZpZWxkcysrOworCWlmIChVTlNFVCAhPSBib3R0b21fb2Zmc2V0KQorCQlmaWVsZHMrKzsKKworCS8qIGVzdGltYXRlIHJpc2MgbWVtOiB3b3JzdCBjYXNlIGlzIG9uZSB3cml0ZSBwZXIgcGFnZSBib3JkZXIgKworCSAgIG9uZSB3cml0ZSBwZXIgc2NhbiBsaW5lICsgc3luY3MgKyBqdW1wIChhbGwgMiBkd29yZHMpLiAgUGFkZGluZworCSAgIGNhbiBjYXVzZSBuZXh0IGJwbCB0byBzdGFydCBjbG9zZSB0byBhIHBhZ2UgYm9yZGVyLiAgRmlyc3QgRE1BCisJICAgcmVnaW9uIG1heSBiZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFICovCisJLyogd3JpdGUgYW5kIGp1bXAgbmVlZCBhbmQgZXh0cmEgZHdvcmQgKi8KKwlpbnN0cnVjdGlvbnMgPQorCSAgICBmaWVsZHMgKiAoMSArICgoYnBsICsgcGFkZGluZykgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lcyk7CisJaW5zdHJ1Y3Rpb25zICs9IDI7CisJcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCBpbnN0cnVjdGlvbnMgKiAxMik7CisKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiB3cml0ZSByaXNjIGluc3RydWN0aW9ucyAqLworCXJwID0gcmlzYy0+Y3B1OworCisJaWYgKFVOU0VUICE9IHRvcF9vZmZzZXQpIHsKKwkJcnAgPSBjeDI1ODIxX3Jpc2NfZmllbGQocnAsIHNnbGlzdCwgdG9wX29mZnNldCwgMCwgYnBsLCBwYWRkaW5nLAorCQkJCQlsaW5lcyk7CisJfQorCisJaWYgKFVOU0VUICE9IGJvdHRvbV9vZmZzZXQpIHsKKwkJcnAgPSBjeDI1ODIxX3Jpc2NfZmllbGQocnAsIHNnbGlzdCwgYm90dG9tX29mZnNldCwgMHgyMDAsIGJwbCwKKwkJCQkJcGFkZGluZywgbGluZXMpOworCX0KKworCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLworCXJpc2MtPmptcCA9IHJwOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19sZTMyICpjeDI1ODIxX3Jpc2NfZmllbGRfYXVkaW8oX19sZTMyICogcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MzIgc3luY19saW5lLAorCQkJCQl1bnNpZ25lZCBpbnQgYnBsLCB1bnNpZ25lZCBpbnQgcGFkZGluZywKKwkJCQkJdW5zaWduZWQgaW50IGxpbmVzLCB1bnNpZ25lZCBpbnQgbHBpKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGxpbmUsIHRvZG8sIHNvbDsKKworCS8qIHN5bmMgaW5zdHJ1Y3Rpb24gKi8KKwlpZiAoc3luY19saW5lICE9IE5PX1NZTkNfTElORSkKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgc3luY19saW5lKTsKKworCS8qIHNjYW4gbGluZXMgKi8KKwlzZyA9IHNnbGlzdDsKKwlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgbGluZXM7IGxpbmUrKykgeworCQl3aGlsZSAob2Zmc2V0ICYmIG9mZnNldCA+PSBzZ19kbWFfbGVuKHNnKSkgeworCQkJb2Zmc2V0IC09IHNnX2RtYV9sZW4oc2cpOworCQkJc2crKzsKKwkJfQorCisJCWlmIChscGkgJiYgbGluZSA+IDAgJiYgIShsaW5lICUgbHBpKSkKKwkJCXNvbCA9IFJJU0NfU09MIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DOworCQllbHNlCisJCQlzb2wgPSBSSVNDX1NPTDsKKworCQlpZiAoYnBsIDw9IHNnX2RtYV9sZW4oc2cpIC0gb2Zmc2V0KSB7CisJCQkvKiBmaXRzIGludG8gY3VycmVudCBjaHVuayAqLworCQkJKihycCsrKSA9CisJCQkgICAgY3B1X3RvX2xlMzIoUklTQ19XUklURSB8IHNvbCB8IFJJU0NfRU9MIHwgYnBsKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykgKyBvZmZzZXQpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisJCQlvZmZzZXQgKz0gYnBsOworCQl9IGVsc2UgeworCQkJLyogc2NhbmxpbmUgbmVlZHMgdG8gYmUgc3BsaXQgKi8KKwkJCXRvZG8gPSBicGw7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURSB8IHNvbCB8CisJCQkJCSAgICAgIChzZ19kbWFfbGVuKHNnKSAtIG9mZnNldCkpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSArIG9mZnNldCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKwkJCXRvZG8gLT0gKHNnX2RtYV9sZW4oc2cpIC0gb2Zmc2V0KTsKKwkJCW9mZnNldCA9IDA7CisJCQlzZysrOworCQkJd2hpbGUgKHRvZG8gPiBzZ19kbWFfbGVuKHNnKSkgeworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFIHwKKwkJCQkJCSAgICAgIHNnX2RtYV9sZW4oc2cpKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKwkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOworCQkJCXNnKys7CisJCQl9CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURSB8IFJJU0NfRU9MIHwgdG9kbyk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCQkJb2Zmc2V0ICs9IHRvZG87CisJCX0KKwkJb2Zmc2V0ICs9IHBhZGRpbmc7CisJfQorCisJcmV0dXJuIHJwOworfQorCitpbnQgY3gyNTgyMV9yaXNjX2RhdGFidWZmZXJfYXVkaW8oc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MsCisJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCQkgIHVuc2lnbmVkIGludCBicGwsCisJCQkJICB1bnNpZ25lZCBpbnQgbGluZXMsIHVuc2lnbmVkIGludCBscGkpCit7CisJdTMyIGluc3RydWN0aW9uczsKKwlfX2xlMzIgKnJwOworCWludCByYzsKKworCS8qIGVzdGltYXRlIHJpc2MgbWVtOiB3b3JzdCBjYXNlIGlzIG9uZSB3cml0ZSBwZXIgcGFnZSBib3JkZXIgKworCSAgIG9uZSB3cml0ZSBwZXIgc2NhbiBsaW5lICsgc3luY3MgKyBqdW1wIChhbGwgMiBkd29yZHMpLiAgSGVyZQorCSAgIHRoZXJlIGlzIG5vIHBhZGRpbmcgYW5kIG5vIHN5bmMuICBGaXJzdCBETUEgcmVnaW9uIG1heSBiZSBzbWFsbGVyCisJICAgdGhhbiBQQUdFX1NJWkUgKi8KKwkvKiBKdW1wIGFuZCB3cml0ZSBuZWVkIGFuIGV4dHJhIGR3b3JkICovCisJaW5zdHJ1Y3Rpb25zID0gMSArIChicGwgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lczsKKwlpbnN0cnVjdGlvbnMgKz0gMTsKKworCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCBpbnN0cnVjdGlvbnMgKiAxMikpIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KKwlycCA9IHJpc2MtPmNwdTsKKwlycCA9IGN4MjU4MjFfcmlzY19maWVsZF9hdWRpbyhycCwgc2dsaXN0LCAwLCBOT19TWU5DX0xJTkUsIGJwbCwgMCwKKwkJCQkgICAgICBsaW5lcywgbHBpKTsKKworCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLworCXJpc2MtPmptcCA9IHJwOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGN4MjU4MjFfcmlzY19zdG9wcGVyKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MsCisJCQkgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlfX2xlMzIgKnJwOworCWludCByYzsKKworCXJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgNCAqIDE2KTsKKworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIHdyaXRlIHJpc2MgaW5zdHJ1Y3Rpb25zICovCisJcnAgPSByaXNjLT5jcHU7CisKKwkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURUNSIHwgUklTQ19JUlExKTsKKwkqKHJwKyspID0gY3B1X3RvX2xlMzIocmVnKTsKKwkqKHJwKyspID0gY3B1X3RvX2xlMzIodmFsdWUpOworCSoocnArKykgPSBjcHVfdG9fbGUzMihtYXNrKTsKKwkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QKTsKKwkqKHJwKyspID0gY3B1X3RvX2xlMzIocmlzYy0+ZG1hKTsKKwkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCBjeDI1ODIxX2ZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hID0gdmlkZW9idWZfdG9fZG1hKCZidWYtPnZiKTsKKworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLCAwLCAwKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAocSwgZG1hKTsKKwl2aWRlb2J1Zl9kbWFfZnJlZShkbWEpOworCWJ0Y3hfcmlzY21lbV9mcmVlKHRvX3BjaV9kZXYocS0+ZGV2KSwgJmJ1Zi0+cmlzYyk7CisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjeDI1ODIxX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBkZXZfaWQ7CisJdTMyIHBjaV9zdGF0dXMsIHBjaV9tYXNrOworCXUzMiB2aWRfc3RhdHVzOworCWludCBpLCBoYW5kbGVkID0gMDsKKwl1MzIgbWFza1s4XSA9IHsgMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4IH07CisKKwlwY2lfc3RhdHVzID0gY3hfcmVhZChQQ0lfSU5UX1NUQVQpOworCXBjaV9tYXNrID0gY3hfcmVhZChQQ0lfSU5UX01TSyk7CisKKwlpZiAocGNpX3N0YXR1cyA9PSAwKQorCQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IGkgPCBWSURfQ0hBTk5FTF9OVU07IGkrKykgeworCQlpZiAocGNpX3N0YXR1cyAmIG1hc2tbaV0pIHsKKwkJCXZpZF9zdGF0dXMgPSBjeF9yZWFkKGRldi0+c3JhbV9jaGFubmVsc1tpXS5pbnRfc3RhdCk7CisKKwkJCWlmICh2aWRfc3RhdHVzKQorCQkJCWhhbmRsZWQgKz0KKwkJCQkgICAgY3gyNTgyMV92aWRlb19pcnEoZGV2LCBpLCB2aWRfc3RhdHVzKTsKKworCQkJY3hfd3JpdGUoUENJX0lOVF9TVEFULCBtYXNrW2ldKTsKKwkJfQorCX0KKworICAgICAgb3V0OgorCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCit2b2lkIGN4MjU4MjFfcHJpbnRfaXJxYml0cyhjaGFyICpuYW1lLCBjaGFyICp0YWcsIGNoYXIgKipzdHJpbmdzLAorCQkJICAgaW50IGxlbiwgdTMyIGJpdHMsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGludCBpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcyBbMHgleF0iLCBuYW1lLCB0YWcsIGJpdHMpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICghKGJpdHMgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmluZ3NbaV0pCisJCQlwcmludGsoIiAlcyIsIHN0cmluZ3NbaV0pOworCQllbHNlCisJCQlwcmludGsoIiAlZCIsIGkpOworCQlpZiAoIShtYXNrICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCXByaW50aygiKiIpOworCX0KKwlwcmludGsoIlxuIik7Cit9CisKK3N0cnVjdCBjeDI1ODIxX2RldiAqY3gyNTgyMV9kZXZfZ2V0KHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKwlyZXR1cm4gZGV2OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjeDI1ODIxX2luaXRkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OworCWludCBlcnIgPSAwOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGNpX2Rldi0+ZGV2LCAmZGV2LT52NGwyX2Rldik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbF9mcmVlOworCisJLyogcGNpIGluaXQgKi8KKwlkZXYtPnBjaSA9IHBjaV9kZXY7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CisJCWVyciA9IC1FSU87CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNpIGVuYWJsZSBmYWlsZWQhICIpOworCisJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RldmljZTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJjeDI1ODIxIEF0aGVuYSBwY2kgZW5hYmxlICEgXG4iKTsKKworCWlmIChjeDI1ODIxX2Rldl9zZXR1cChkZXYpIDwgMCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxfdW5yZWdpc3Rlcl9kZXZpY2U7CisJfQorCisJLyogcHJpbnQgcGNpIGluZm8gKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZkZXYtPnBjaV9yZXYpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmZGV2LT5wY2lfbGF0KTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8wOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgorCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWxseFxuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSwgZGV2LT5wY2lfcmV2LCBwY2lfZGV2LT5pcnEsCisJICAgICAgIGRldi0+cGNpX2xhdCwgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPmJhc2VfaW9fYWRkcik7CisKKwlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKKwlpZiAoIXBjaV9kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJCXByaW50aygiJXMvMDogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsIGRldi0+bmFtZSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJZXJyID0KKwkgICAgcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBjeDI1ODIxX2lycSwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAorCQkJZGV2LT5uYW1lLCBkZXYpOworCisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IElSUSAlZFxuIiwgZGV2LT5uYW1lLAorCQkgICAgICAgcGNpX2Rldi0+aXJxKTsKKwkJZ290byBmYWlsX2lycTsKKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgZmFpbF9pcnE6CisJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNTgyMSBjeDI1ODIxX2luaXRkZXYoKSBjYW4ndCBnZXQgSVJRICEgXG4iKTsKKwljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGRldik7CisKKyAgICAgIGZhaWxfdW5yZWdpc3Rlcl9kZXZpY2U6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisKKyAgICAgIGZhaWxfZnJlZToKKwlrZnJlZShkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjeDI1ODIxX2ZpbmlkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGdldF9jeDI1ODIxKHY0bDJfZGV2KTsKKworCWN4MjU4MjFfc2h1dGRvd24oZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CisKKwkvKiB1bnJlZ2lzdGVyIHN0dWZmICovCisJaWYgKHBjaV9kZXYtPmlycSkKKwkJZnJlZV9pcnEocGNpX2Rldi0+aXJxLCBkZXYpOworCisJbXV0ZXhfbG9jaygmZGV2bGlzdCk7CisJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKKworCWN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwlrZnJlZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3gyNTgyMV9wY2lfdGJsW10gPSB7CisJeworCSAvKiBDWDI1ODIxIEF0aGVuYSAqLworCSAudmVuZG9yID0gMHgxNGYxLAorCSAuZGV2aWNlID0gMHg4MjEwLAorCSAuc3VidmVuZG9yID0gMHgxNGYxLAorCSAuc3ViZGV2aWNlID0gMHgwOTIwLAorCSB9LAorCXsKKwkgLyogLS0tIGVuZCBvZiBsaXN0IC0tLSAqLworCSB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3gyNTgyMV9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGN4MjU4MjFfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjeDI1ODIxIiwKKwkuaWRfdGFibGUgPSBjeDI1ODIxX3BjaV90YmwsCisJLnByb2JlID0gY3gyNTgyMV9pbml0ZGV2LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChjeDI1ODIxX2ZpbmlkZXYpLAorCS8qIFRPRE8gKi8KKwkuc3VzcGVuZCA9IE5VTEwsCisJLnJlc3VtZSA9IE5VTEwsCit9OworCitzdGF0aWMgaW50IGN4MjU4MjFfaW5pdCh2b2lkKQoreworCUlOSVRfTElTVF9IRUFEKCZjeDI1ODIxX2Rldmxpc3QpOworCXByaW50ayhLRVJOX0lORk8gImN4MjU4MjEgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAorCSAgICAgICAoQ1gyNTgyMV9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKKwkgICAgICAgKENYMjU4MjFfVkVSU0lPTl9DT0RFID4+IDgpICYgMHhmZiwgQ1gyNTgyMV9WRVJTSU9OX0NPREUgJiAweGZmKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3gyNTgyMV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9maW5pKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjeDI1ODIxX3BjaV9kcml2ZXIpOworfQorCitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfZGV2bGlzdCk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfc3JhbV9jaGFubmVscyk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfcHJpbnRfaXJxYml0cyk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfZGV2X2dldCk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfZGV2X3VucmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cCk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXApOworRVhQT1JUX1NZTUJPTChjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF9hdWRpbyk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXBfYXVkaW8pOworRVhQT1JUX1NZTUJPTChjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbyk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfc2V0X2dwaW9waW5fZGlyZWN0aW9uKTsKKworbW9kdWxlX2luaXQoY3gyNTgyMV9pbml0KTsKK21vZHVsZV9leGl0KGN4MjU4MjFfZmluaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWdwaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTM3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWdwaW8uYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqIEdQSU8gc3R1ZmZzICoqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY3gyNTgyMV9zZXRfZ3Bpb3Bpbl9kaXJlY3Rpb24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgaW50IHBpbl9udW1iZXIsIGludCBwaW5fbG9naWNfdmFsdWUpCit7CisJaW50IGJpdCA9IHBpbl9udW1iZXI7CisJdTMyIGdwaW9fb2VfcmVnID0gR1BJT19MT19PRTsKKwl1MzIgZ3Bpb19yZWdpc3RlciA9IDA7CisJdTMyIHZhbHVlID0gMDsKKworCS8vIENoZWNrIGZvciB2YWxpZCBwaW5OdW1iZXIKKwlpZiAocGluX251bWJlciA+PSA0NykKKwkJcmV0dXJuOworCisJaWYgKHBpbl9udW1iZXIgPiAzMSkgeworCQliaXQgPSBwaW5fbnVtYmVyIC0gMzE7CisJCWdwaW9fb2VfcmVnID0gR1BJT19ISV9PRTsKKwl9CisJLy8gSGVyZSB3ZSB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBHUElPcyAwIGFuZCAxIGFyZSBvdXRwdXQuIGtlZXAgdGhlIHJlc3QgYXMgaXMKKwlncGlvX3JlZ2lzdGVyID0gY3hfcmVhZChncGlvX29lX3JlZyk7CisKKwlpZiAocGluX2xvZ2ljX3ZhbHVlID09IDEpIHsKKwkJdmFsdWUgPSBncGlvX3JlZ2lzdGVyIHwgU2V0X0dQSU9fQml0KGJpdCk7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBncGlvX3JlZ2lzdGVyICYgQ2xlYXJfR1BJT19CaXQoYml0KTsKKwl9CisKKwljeF93cml0ZShncGlvX29lX3JlZywgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX3NldF9ncGlvcGluX2xvZ2ljdmFsdWUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgIGludCBwaW5fbnVtYmVyLCBpbnQgcGluX2xvZ2ljX3ZhbHVlKQoreworCWludCBiaXQgPSBwaW5fbnVtYmVyOworCXUzMiBncGlvX3JlZyA9IEdQSU9fTE87CisJdTMyIHZhbHVlID0gMDsKKworCS8vIENoZWNrIGZvciB2YWxpZCBwaW5OdW1iZXIKKwlpZiAocGluX251bWJlciA+PSA0NykKKwkJcmV0dXJuOworCisJY3gyNTgyMV9zZXRfZ3Bpb3Bpbl9kaXJlY3Rpb24oZGV2LCBwaW5fbnVtYmVyLCAwKTsJLy8gY2hhbmdlIHRvIG91dHB1dCBkaXJlY3Rpb24KKworCWlmIChwaW5fbnVtYmVyID4gMzEpIHsKKwkJYml0ID0gcGluX251bWJlciAtIDMxOworCQlncGlvX3JlZyA9IEdQSU9fSEk7CisJfQorCisJdmFsdWUgPSBjeF9yZWFkKGdwaW9fcmVnKTsKKworCWlmIChwaW5fbG9naWNfdmFsdWUgPT0gMCkgeworCQl2YWx1ZSAmPSBDbGVhcl9HUElPX0JpdChiaXQpOworCX0gZWxzZSB7CisJCXZhbHVlIHw9IFNldF9HUElPX0JpdChiaXQpOworCX0KKworCWN4X3dyaXRlKGdwaW9fcmVnLCB2YWx1ZSk7Cit9CisKK3ZvaWQgY3gyNTgyMV9ncGlvX2luaXQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIENYMjU4MjFfQk9BUkRfQ09ORVhBTlRfQVRIRU5BMTA6CisJZGVmYXVsdDoKKwkJLy9zZXQgR1BJTyA1IHRvIHNlbGVjdCB0aGUgcGF0aCBmb3IgTWVkdXNhL0F0aGVuYQorCQljeDI1ODIxX3NldF9ncGlvcGluX2xvZ2ljdmFsdWUoZGV2LCA1LCAxKTsKKwkJbWRlbGF5KDIwKTsKKwkJYnJlYWs7CisJfQorCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWdwaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDc2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWdwaW8uaApAQCAtMCwwICsxLDIgQEAKKwordm9pZCBjeDI1ODIxX2dwaW9faW5pdChzdHJ1Y3QgYXRoZW5hX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtaTJjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZjI2ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWkyYy5jCkBAIC0wLDAgKzEsNDE5IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqCUJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS5oIgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IGkyY19kZWJ1ZzsKK21vZHVsZV9wYXJhbShpMmNfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGkyY19kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbaTJjXSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGkyY19zY2FuID0gMDsKK21vZHVsZV9wYXJhbShpMmNfc2NhbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaTJjX3NjYW4sICJzY2FuIGkyYyBidXMgYXQgaW5zbW9kIHRpbWUiKTsKKworI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLilcCisJZG8geyBpZiAoaTJjX2RlYnVnID49IGxldmVsKVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzA6ICIgZm10LCBkZXYtPm5hbWUsICMjIGFyZyk7XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSTJDX1dBSVRfREVMQVkgMzIKKyNkZWZpbmUgSTJDX1dBSVRfUkVUUlkgNjQKKworI2RlZmluZSBJMkNfRVhURU5EICAoMSA8PCAzKQorI2RlZmluZSBJMkNfTk9TVE9QICAoMSA8PCA0KQorCitzdGF0aWMgaW5saW5lIGludCBpMmNfc2xhdmVfZGlkX2FjayhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQoreworCXN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCXJldHVybiBjeF9yZWFkKGJ1cy0+cmVnX3N0YXQpICYgMHgwMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTJjX2lzX2J1c3koc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cyA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBidXMtPmRldjsKKwlyZXR1cm4gY3hfcmVhZChidXMtPnJlZ19zdGF0KSAmIDB4MDIgPyAxIDogMDsKK30KKworc3RhdGljIGludCBpMmNfd2FpdF9kb25lKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApCit7CisJaW50IGNvdW50OworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgSTJDX1dBSVRfUkVUUlk7IGNvdW50KyspIHsKKwkJaWYgKCFpMmNfaXNfYnVzeShpMmNfYWRhcCkpCisJCQlicmVhazsKKwkJdWRlbGF5KEkyQ19XQUlUX0RFTEFZKTsKKwl9CisKKwlpZiAoSTJDX1dBSVRfUkVUUlkgPT0gY291bnQpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3NlbmRieXRlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfbXNnICptc2csIGludCBqb2luZWRfcmxlbikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cyA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBidXMtPmRldjsKKwl1MzIgd2RhdGEsIGFkZHIsIGN0cmw7CisJaW50IHJldHZhbCwgY250OworCisJaWYgKGpvaW5lZF9ybGVuKQorCQlkcHJpbnRrKDEsICIlcyhtc2ctPndsZW49JWQsIG5leHRtc2ctPnJsZW49JWQpXG4iLCBfX2Z1bmNfXywKKwkJCW1zZy0+bGVuLCBqb2luZWRfcmxlbik7CisJZWxzZQorCQlkcHJpbnRrKDEsICIlcyhtc2ctPmxlbj0lZClcbiIsIF9fZnVuY19fLCBtc2ctPmxlbik7CisKKwkvKiBEZWFsIHdpdGggaTJjIHByb2JlIGZ1bmN0aW9ucyB3aXRoIHplcm8gcGF5bG9hZCAqLworCWlmIChtc2ctPmxlbiA9PSAwKSB7CisJCWN4X3dyaXRlKGJ1cy0+cmVnX2FkZHIsIG1zZy0+YWRkciA8PCAyNSk7CisJCWN4X3dyaXRlKGJ1cy0+cmVnX2N0cmwsIGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDIpKTsKKworCQlpZiAoIWkyY193YWl0X2RvbmUoaTJjX2FkYXApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJaWYgKCFpMmNfc2xhdmVfZGlkX2FjayhpMmNfYWRhcCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlkcHJpbnRrKDEsICIlcygpIHJldHVybnMgMFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBkZXYsIHJlZyArIGZpcnN0IGJ5dGUgKi8KKwlhZGRyID0gKG1zZy0+YWRkciA8PCAyNSkgfCBtc2ctPmJ1ZlswXTsKKwl3ZGF0YSA9IG1zZy0+YnVmWzBdOworCisJY3RybCA9IGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDEyKSB8ICgxIDw8IDIpOworCisJaWYgKG1zZy0+bGVuID4gMSkKKwkJY3RybCB8PSBJMkNfTk9TVE9QIHwgSTJDX0VYVEVORDsKKwllbHNlIGlmIChqb2luZWRfcmxlbikKKwkJY3RybCB8PSBJMkNfTk9TVE9QOworCisJY3hfd3JpdGUoYnVzLT5yZWdfYWRkciwgYWRkcik7CisJY3hfd3JpdGUoYnVzLT5yZWdfd2RhdGEsIHdkYXRhKTsKKwljeF93cml0ZShidXMtPnJlZ19jdHJsLCBjdHJsKTsKKworCXJldHZhbCA9IGkyY193YWl0X2RvbmUoaTJjX2FkYXApOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycjsKKworCWlmIChyZXR2YWwgPT0gMCkKKwkJZ290byBlaW87CisKKwlpZiAoaTJjX2RlYnVnKSB7CisJCWlmICghKGN0cmwgJiBJMkNfTk9TVE9QKSkKKwkJCXByaW50aygiID5cbiIpOworCX0KKworCWZvciAoY250ID0gMTsgY250IDwgbXNnLT5sZW47IGNudCsrKSB7CisJCS8qIGZvbGxvd2luZyBieXRlcyAqLworCQl3ZGF0YSA9IG1zZy0+YnVmW2NudF07CisJCWN0cmwgPSBidXMtPmkyY19wZXJpb2QgfCAoMSA8PCAxMikgfCAoMSA8PCAyKTsKKworCQlpZiAoY250IDwgbXNnLT5sZW4gLSAxKQorCQkJY3RybCB8PSBJMkNfTk9TVE9QIHwgSTJDX0VYVEVORDsKKwkJZWxzZSBpZiAoam9pbmVkX3JsZW4pCisJCQljdHJsIHw9IEkyQ19OT1NUT1A7CisKKwkJY3hfd3JpdGUoYnVzLT5yZWdfYWRkciwgYWRkcik7CisJCWN4X3dyaXRlKGJ1cy0+cmVnX3dkYXRhLCB3ZGF0YSk7CisJCWN4X3dyaXRlKGJ1cy0+cmVnX2N0cmwsIGN0cmwpOworCisJCXJldHZhbCA9IGkyY193YWl0X2RvbmUoaTJjX2FkYXApOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCWdvdG8gZWlvOworCisJCWlmIChpMmNfZGVidWcpIHsKKwkJCWRwcmludGsoMSwgIiAlMDJ4IiwgbXNnLT5idWZbY250XSk7CisJCQlpZiAoIShjdHJsICYgSTJDX05PU1RPUCkpCisJCQkJZHByaW50aygxLCAiID5cbiIpOworCQl9CisJfQorCisJcmV0dXJuIG1zZy0+bGVuOworCisgICAgICBlaW86CisJcmV0dmFsID0gLUVJTzsKKyAgICAgIGVycjoKKwlpZiAoaTJjX2RlYnVnKQorCQlwcmludGsoS0VSTl9FUlIgIiBFUlI6ICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3JlYWRieXRlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfbXNnICptc2csIGludCBqb2luZWQpCit7CisJc3RydWN0IGN4MjU4MjFfaTJjICpidXMgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gYnVzLT5kZXY7CisJdTMyIGN0cmwsIGNudDsKKwlpbnQgcmV0dmFsOworCisJaWYgKGkyY19kZWJ1ZyAmJiAham9pbmVkKQorCQlkcHJpbnRrKDEsICI2LSVzKG1zZy0+bGVuPSVkKVxuIiwgX19mdW5jX18sIG1zZy0+bGVuKTsKKworCS8qIERlYWwgd2l0aCBpMmMgcHJvYmUgZnVuY3Rpb25zIHdpdGggemVybyBwYXlsb2FkICovCisJaWYgKG1zZy0+bGVuID09IDApIHsKKwkJY3hfd3JpdGUoYnVzLT5yZWdfYWRkciwgbXNnLT5hZGRyIDw8IDI1KTsKKwkJY3hfd3JpdGUoYnVzLT5yZWdfY3RybCwgYnVzLT5pMmNfcGVyaW9kIHwgKDEgPDwgMikgfCAxKTsKKwkJaWYgKCFpMmNfd2FpdF9kb25lKGkyY19hZGFwKSkKKwkJCXJldHVybiAtRUlPOworCQlpZiAoIWkyY19zbGF2ZV9kaWRfYWNrKGkyY19hZGFwKSkKKwkJCXJldHVybiAtRUlPOworCisJCWRwcmludGsoMSwgIiVzKCkgcmV0dXJucyAwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChpMmNfZGVidWcpIHsKKwkJaWYgKGpvaW5lZCkKKwkJCWRwcmludGsoMSwgIiBSIik7CisJCWVsc2UKKwkJCWRwcmludGsoMSwgIiA8UiAlMDJ4IiwgKG1zZy0+YWRkciA8PCAxKSArIDEpOworCX0KKworCWZvciAoY250ID0gMDsgY250IDwgbXNnLT5sZW47IGNudCsrKSB7CisKKwkJY3RybCA9IGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDEyKSB8ICgxIDw8IDIpIHwgMTsKKworCQlpZiAoY250IDwgbXNnLT5sZW4gLSAxKQorCQkJY3RybCB8PSBJMkNfTk9TVE9QIHwgSTJDX0VYVEVORDsKKworCQljeF93cml0ZShidXMtPnJlZ19hZGRyLCBtc2ctPmFkZHIgPDwgMjUpOworCQljeF93cml0ZShidXMtPnJlZ19jdHJsLCBjdHJsKTsKKworCQlyZXR2YWwgPSBpMmNfd2FpdF9kb25lKGkyY19hZGFwKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJZ290byBlaW87CisJCW1zZy0+YnVmW2NudF0gPSBjeF9yZWFkKGJ1cy0+cmVnX3JkYXRhKSAmIDB4ZmY7CisKKwkJaWYgKGkyY19kZWJ1ZykgeworCQkJZHByaW50aygxLCAiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKKwkJCWlmICghKGN0cmwgJiBJMkNfTk9TVE9QKSkKKwkJCQlkcHJpbnRrKDEsICIgPlxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gbXNnLT5sZW47CisgICAgICBlaW86CisJcmV0dmFsID0gLUVJTzsKKyAgICAgIGVycjoKKwlpZiAoaTJjX2RlYnVnKQorCQlwcmludGsoS0VSTl9FUlIgIiBFUlI6ICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IGN4MjU4MjFfaTJjICpidXMgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gYnVzLT5kZXY7CisJaW50IGksIHJldHZhbCA9IDA7CisKKwlkcHJpbnRrKDEsICIlcyhudW0gPSAlZClcbiIsIF9fZnVuY19fLCBudW0pOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWRwcmludGsoMSwgIiVzKG51bSA9ICVkKSBhZGRyID0gMHglMDJ4ICBsZW4gPSAweCV4XG4iLAorCQkJX19mdW5jX18sIG51bSwgbXNnc1tpXS5hZGRyLCBtc2dzW2ldLmxlbik7CisKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJLyogcmVhZCAqLworCQkJcmV0dmFsID0gaTJjX3JlYWRieXRlcyhpMmNfYWRhcCwgJm1zZ3NbaV0sIDApOworCQl9IGVsc2UgaWYgKGkgKyAxIDwgbnVtICYmIChtc2dzW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSAmJgorCQkJICAgbXNnc1tpXS5hZGRyID09IG1zZ3NbaSArIDFdLmFkZHIpIHsKKwkJCS8qIHdyaXRlIHRoZW4gcmVhZCBmcm9tIHNhbWUgYWRkcmVzcyAqLworCQkJcmV0dmFsID0KKwkJCSAgICBpMmNfc2VuZGJ5dGVzKGkyY19hZGFwLCAmbXNnc1tpXSwgbXNnc1tpICsgMV0ubGVuKTsKKworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJZ290byBlcnI7CisJCQlpKys7CisJCQlyZXR2YWwgPSBpMmNfcmVhZGJ5dGVzKGkyY19hZGFwLCAmbXNnc1tpXSwgMSk7CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSAqLworCQkJcmV0dmFsID0gaTJjX3NlbmRieXRlcyhpMmNfYWRhcCwgJm1zZ3NbaV0sIDApOworCQl9CisKKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisJcmV0dXJuIG51bTsKKworICAgICAgZXJyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHUzMiBjeDI1ODIxX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwKKwkgICAgSTJDX0ZVTkNfSTJDIHwKKwkgICAgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBIHwKKwkgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBjeDI1ODIxX2kyY19hbGdvX3RlbXBsYXRlID0geworCS5tYXN0ZXJfeGZlciA9IGkyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gY3gyNTgyMV9mdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBjeDI1ODIxX2kyY19hZGFwX3RlbXBsYXRlID0geworCS5uYW1lID0gImN4MjU4MjEiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5hbGdvID0gJmN4MjU4MjFfaTJjX2FsZ29fdGVtcGxhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY3gyNTgyMV9pMmNfY2xpZW50X3RlbXBsYXRlID0geworCS5uYW1lID0gImN4MjU4MjEgaW50ZXJuYWwiLAorfTsKKworLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCitpbnQgY3gyNTgyMV9pMmNfcmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfaTJjICpidXMpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBidXMtPmRldjsKKworCWRwcmludGsoMSwgIiVzKGJ1cyA9ICVkKVxuIiwgX19mdW5jX18sIGJ1cy0+bnIpOworCisJbWVtY3B5KCZidXMtPmkyY19hZGFwLCAmY3gyNTgyMV9pMmNfYWRhcF90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKGJ1cy0+aTJjX2FkYXApKTsKKwltZW1jcHkoJmJ1cy0+aTJjX2FsZ28sICZjeDI1ODIxX2kyY19hbGdvX3RlbXBsYXRlLAorCSAgICAgICBzaXplb2YoYnVzLT5pMmNfYWxnbykpOworCW1lbWNweSgmYnVzLT5pMmNfY2xpZW50LCAmY3gyNTgyMV9pMmNfY2xpZW50X3RlbXBsYXRlLAorCSAgICAgICBzaXplb2YoYnVzLT5pMmNfY2xpZW50KSk7CisKKwlidXMtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5wY2ktPmRldjsKKworCXN0cmxjcHkoYnVzLT5pMmNfYWRhcC5uYW1lLCBidXMtPmRldi0+bmFtZSwgc2l6ZW9mKGJ1cy0+aTJjX2FkYXAubmFtZSkpOworCisJYnVzLT5pMmNfYWxnby5kYXRhID0gYnVzOworCWJ1cy0+aTJjX2FkYXAuYWxnb19kYXRhID0gYnVzOworCWkyY19zZXRfYWRhcGRhdGEoJmJ1cy0+aTJjX2FkYXAsICZkZXYtPnY0bDJfZGV2KTsKKwlpMmNfYWRkX2FkYXB0ZXIoJmJ1cy0+aTJjX2FkYXApOworCisJYnVzLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmYnVzLT5pMmNfYWRhcDsKKworCS8vc2V0IHVwIHRoZSBJMmMKKwlidXMtPmkyY19jbGllbnQuYWRkciA9ICgweDg4ID4+IDEpOworCisJcmV0dXJuIGJ1cy0+aTJjX3JjOworfQorCitpbnQgY3gyNTgyMV9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cykKK3sKKwlpMmNfZGVsX2FkYXB0ZXIoJmJ1cy0+aTJjX2FkYXApOworCXJldHVybiAwOworfQorCit2b2lkIGN4MjU4MjFfYXZfY2xrKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgZW5hYmxlKQoreworCS8qIHdyaXRlIDAgdG8gYnVzIDIgYWRkciAweDE0NCB2aWEgaTJ4X3hmZXIoKSAqLworCWNoYXIgYnVmZmVyWzNdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwlkcHJpbnRrKDEsICIlcyhlbmFibGVkID0gJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKKworCS8qIFJlZ2lzdGVyIDB4MTQ0ICovCisJYnVmZmVyWzBdID0gMHgwMTsKKwlidWZmZXJbMV0gPSAweDQ0OworCWlmIChlbmFibGUgPT0gMSkKKwkJYnVmZmVyWzJdID0gMHgwNTsKKwllbHNlCisJCWJ1ZmZlclsyXSA9IDB4MDA7CisKKwltc2cuYWRkciA9IDB4NDQ7CisJbXNnLmZsYWdzID0gSTJDX01fVEVOOworCW1zZy5sZW4gPSAzOworCW1zZy5idWYgPSBidWZmZXI7CisKKwlpMmNfeGZlcigmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLCAmbXNnLCAxKTsKK30KKworaW50IGN4MjU4MjFfaTJjX3JlYWQoc3RydWN0IGN4MjU4MjFfaTJjICpidXMsIHUxNiByZWdfYWRkciwgaW50ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmJ1cy0+aTJjX2NsaWVudDsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgdiA9IDA7CisJdTggYWRkclsyXSA9IHsgMCwgMCB9OworCXU4IGJ1Zls0XSA9IHsgMCwgMCwgMCwgMCB9OworCisJc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHsKKwkJeworCQkgLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCSAuZmxhZ3MgPSAwLAorCQkgLmxlbiA9IDIsCisJCSAuYnVmID0gYWRkciwKKwkJIH0sIHsKKwkJICAgICAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJICAgICAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJICAgICAubGVuID0gNCwKKwkJICAgICAuYnVmID0gYnVmLAorCQkgICAgIH0KKwl9OworCisJYWRkclswXSA9IChyZWdfYWRkciA+PiA4KTsKKwlhZGRyWzFdID0gKHJlZ19hZGRyICYgMHhmZik7CisJbXNnc1swXS5hZGRyID0gMHg0NDsKKwltc2dzWzFdLmFkZHIgPSAweDQ0OworCisJcmV0dmFsID0gaTJjX3hmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAyKTsKKworCXYgPSAoYnVmWzNdIDw8IDI0KSB8IChidWZbMl0gPDwgMTYpIHwgKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlswXTsKKwkqdmFsdWUgPSB2OworCisJcmV0dXJuIHY7Cit9CisKK2ludCBjeDI1ODIxX2kyY193cml0ZShzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cywgdTE2IHJlZ19hZGRyLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZidXMtPmkyY19jbGllbnQ7CisJaW50IHJldHZhbCA9IDA7CisJdTggYnVmWzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzFdID0geworCQl7CisJCSAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJIC5mbGFncyA9IDAsCisJCSAubGVuID0gNiwKKwkJIC5idWYgPSBidWYsCisJCSB9CisJfTsKKworCWJ1ZlswXSA9IHJlZ19hZGRyID4+IDg7CisJYnVmWzFdID0gcmVnX2FkZHIgJiAweGZmOworCWJ1Zls1XSA9ICh2YWx1ZSA+PiAyNCkgJiAweGZmOworCWJ1Zls0XSA9ICh2YWx1ZSA+PiAxNikgJiAweGZmOworCWJ1ZlszXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisJYnVmWzJdID0gdmFsdWUgJiAweGZmOworCWNsaWVudC0+ZmxhZ3MgPSAwOworCW1zZ3NbMF0uYWRkciA9IDB4NDQ7CisKKwlyZXR2YWwgPSBpMmNfeGZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDEpOworCisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLWRlZmluZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLWRlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQyMTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtZGVmaW5lcy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX01FRFVTQV9ERUZfSF8KKyNkZWZpbmUgX01FRFVTQV9ERUZfSF8KKworLy8gVmlkZW8gZGVvY2RlciB0aGF0IHdlIHN1cHBvcnRlZAorI2RlZmluZSBWREVDX0EJCTAKKyNkZWZpbmUgVkRFQ19CCQkxCisjZGVmaW5lIFZERUNfQwkJMgorI2RlZmluZSBWREVDX0QJCTMKKyNkZWZpbmUgVkRFQ19FCQk0CisjZGVmaW5lIFZERUNfRgkJNQorI2RlZmluZSBWREVDX0cJCTYKKyNkZWZpbmUgVkRFQ19ICQk3CisKKy8vI2RlZmluZSBBVVRPX1NXSVRDSF9CSVRbXSAgPSB7IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfTsKKworLy8gVGhlIGZvbGxvd2luZyBiaXQgcG9zaXRpb24gZW5hYmxlcyBhdXRvbWF0aWMgc291cmNlIHN3aXRjaGluZyBmb3IgZGVjb2RlciBBLUguCisvLyBEaXNwbGF5IGluZGV4IHBlciBjYW1lcmEuCisvLyNkZWZpbmUgVkRFQ19JTkRFWFtdID0gezAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDd9OworCisvLyBTZWxlY3QgaW5wdXQgYml0IHRvIHZpZGVvIGRlY29kZXIgQS1ILgorLy8jZGVmaW5lIENIX1NSQ19TRUxfQklUW10gPSB7MjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxfTsKKworLy8gZW5kIG9mIGRpc3BsYXkgc2VxdWVuY2UKKyNkZWZpbmUgRU5EX09GX1NFUQkJCQkJMHhGOworCisvLyByZWdpc3RyeSBzdHJpbmcgc2l6ZQorI2RlZmluZSBNQVhfUkVHSVNUUllfU1oJCQkJCTQwOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXJlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjOTBmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXJlZy5oCkBAIC0wLDAgKzEsNDU1IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUVEVVNBX1JFR0lTVEVSU19fCisjZGVmaW5lIF9fTUVEVVNBX1JFR0lTVEVSU19fCisKKy8vIFNlcmlhbCBTbGF2ZSBSZWdpc3RlcnMKKyNkZWZpbmUJSE9TVF9SRUdJU1RFUjEJCQkJMHgwMDAwCisjZGVmaW5lCUhPU1RfUkVHSVNURVIyCQkJCTB4MDAwMQorCisvLyBDaGlwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzCisjZGVmaW5lCUNISVBfQ1RSTAkJCQkJMHgwMTAwCisjZGVmaW5lCUFGRV9BQl9DVFJMCQkJCQkweDAxMDQKKyNkZWZpbmUJQUZFX0NEX0NUUkwJCQkJCTB4MDEwOAorI2RlZmluZQlBRkVfRUZfQ1RSTAkJCQkJMHgwMTBDCisjZGVmaW5lCUFGRV9HSF9DVFJMCQkJCQkweDAxMTAKKyNkZWZpbmUJREVOQ19BQl9DVFJMCQkJCTB4MDExNAorI2RlZmluZQlCWVBfQUJfQ1RSTAkJCQkJMHgwMTE4CisjZGVmaW5lCU1PTl9BX0NUUkwJCQkJCTB4MDExQworI2RlZmluZQlESVNQX1NFUV9BCQkJCQkweDAxMjAKKyNkZWZpbmUJRElTUF9TRVFfQgkJCQkJMHgwMTI0CisjZGVmaW5lCURJU1BfQUJfQ05UCQkJCQkweDAxMjgKKyNkZWZpbmUJRElTUF9DRF9DTlQJCQkJCTB4MDEyQworI2RlZmluZQlESVNQX0VGX0NOVAkJCQkJMHgwMTMwCisjZGVmaW5lCURJU1BfR0hfQ05UCQkJCQkweDAxMzQKKyNkZWZpbmUJRElTUF9JSl9DTlQJCQkJCTB4MDEzOAorI2RlZmluZQlQSU5fT0VfQ1RSTAkJCQkJMHgwMTNDCisjZGVmaW5lCVBJTl9TUERfQ1RSTAkJCQkweDAxNDAKKyNkZWZpbmUJUElOX1NQRF9DVFJMMgkJCQkweDAxNDQKKyNkZWZpbmUJSVJRX1NUQVRfQ1RSTAkJCQkweDAxNDgKKyNkZWZpbmUJUE9XRVJfQ1RSTF9BQgkJCQkweDAxNEMKKyNkZWZpbmUJUE9XRVJfQ1RSTF9DRAkJCQkweDAxNTAKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FRgkJCQkweDAxNTQKKyNkZWZpbmUJUE9XRVJfQ1RSTF9HSAkJCQkweDAxNTgKKyNkZWZpbmUJVFVORV9DVFJMCQkJCQkweDAxNUMKKyNkZWZpbmUJQklBU19DVFJMCQkJCQkweDAxNjAKKyNkZWZpbmUJQUZFX0FCX0RJQUdfQ1RSTAkJCTB4MDE2NAorI2RlZmluZQlBRkVfQ0RfRElBR19DVFJMCQkJMHgwMTY4CisjZGVmaW5lCUFGRV9FRl9ESUFHX0NUUkwJCQkweDAxNkMKKyNkZWZpbmUJQUZFX0dIX0RJQUdfQ1RSTAkJCTB4MDE3MAorI2RlZmluZQlQTExfQUJfRElBR19DVFJMCQkJMHgwMTc0CisjZGVmaW5lCVBMTF9DRF9ESUFHX0NUUkwJCQkweDAxNzgKKyNkZWZpbmUJUExMX0VGX0RJQUdfQ1RSTAkJCTB4MDE3QworI2RlZmluZQlQTExfR0hfRElBR19DVFJMCQkJMHgwMTgwCisjZGVmaW5lCVRFU1RfQ1RSTAkJCQkJMHgwMTg0CisjZGVmaW5lCUJJU1RfU1RBVAkJCQkJMHgwMTg4CisjZGVmaW5lCUJJU1RfU1RBVDIJCQkJCTB4MDE4QworI2RlZmluZQlCSVNUX1ZJRF9QTExfQUJfU1RBVAkJMHgwMTkwCisjZGVmaW5lCUJJU1RfVklEX1BMTF9DRF9TVEFUCQkweDAxOTQKKyNkZWZpbmUJQklTVF9WSURfUExMX0VGX1NUQVQJCTB4MDE5OAorI2RlZmluZQlCSVNUX1ZJRF9QTExfR0hfU1RBVAkJMHgwMTlDCisjZGVmaW5lCURMTF9ESUFHX0NUUkwJCQkJMHgwMUEwCisjZGVmaW5lCURFVl9DSF9JRF9DVFJMCQkJCTB4MDFBNAorI2RlZmluZQlBQklTVF9DVFJMX1NUQVRVUwkJCTB4MDFBOAorI2RlZmluZQlBQklTVF9GUkVRCQkJCQkweDAxQUMKKyNkZWZpbmUJQUJJU1RfR09FUlRfU0hJRlQJCQkweDAxQjAKKyNkZWZpbmUJQUJJU1RfQ09FRjEyCQkJCTB4MDFCNAorI2RlZmluZQlBQklTVF9DT0VGMzQJCQkJMHgwMUI4CisjZGVmaW5lCUFCSVNUX0NPRUY1NgkJCQkweDAxQkMKKyNkZWZpbmUJQUJJU1RfQ09FRjdfU05SCQkJCTB4MDFDMAorI2RlZmluZQlBQklTVF9BRENfQ0FMCQkJCTB4MDFDNAorI2RlZmluZQlBQklTVF9CSU4xX1ZHQTAJCQkJMHgwMUM4CisjZGVmaW5lCUFCSVNUX0JJTjJfVkdBMQkJCQkweDAxQ0MKKyNkZWZpbmUJQUJJU1RfQklOM19WR0EyCQkJCTB4MDFEMAorI2RlZmluZQlBQklTVF9CSU40X1ZHQTMJCQkJMHgwMUQ0CisjZGVmaW5lCUFCSVNUX0JJTjVfVkdBNAkJCQkweDAxRDgKKyNkZWZpbmUJQUJJU1RfQklONl9WR0E1CQkJCTB4MDFEQworI2RlZmluZQlBQklTVF9CSU43X1ZHQTYJCQkJMHgweDFFMAorI2RlZmluZQlBQklTVF9DTEFNUF9BCQkJCTB4MHgxRTQKKyNkZWZpbmUJQUJJU1RfQ0xBTVBfQgkJCQkweDB4MUU4CisjZGVmaW5lCUFCSVNUX0NMQU1QX0MJCQkJMHgwMUVDCisjZGVmaW5lCUFCSVNUX0NMQU1QX0QJCQkJMHgwMUYwCisjZGVmaW5lCUFCSVNUX0NMQU1QX0UJCQkJMHgwMUY0CisjZGVmaW5lCUFCSVNUX0NMQU1QX0YJCQkJMHgwMUY4CisKKy8vICAgICAgICAgICAgICBEaWdpdGFsIFZpZGVvIEVuY29kZXIgQSBSZWdpc3RlcnMKKyNkZWZpbmUJREVOQ19BX1JFR18xCQkJCQkweDAyMDAKKyNkZWZpbmUJREVOQ19BX1JFR18yCQkJCQkweDAyMDQKKyNkZWZpbmUJREVOQ19BX1JFR18zCQkJCQkweDAyMDgKKyNkZWZpbmUJREVOQ19BX1JFR180CQkJCQkweDAyMEMKKyNkZWZpbmUJREVOQ19BX1JFR181CQkJCQkweDAyMTAKKyNkZWZpbmUJREVOQ19BX1JFR182CQkJCQkweDAyMTQKKyNkZWZpbmUJREVOQ19BX1JFR183CQkJCQkweDAyMTgKKyNkZWZpbmUJREVOQ19BX1JFR184CQkJCQkweDAyMUMKKworLy8gICAgICBEaWdpdGFsIFZpZGVvIEVuY29kZXIgQiBSZWdpc3RlcnMKKyNkZWZpbmUJREVOQ19CX1JFR18xCQkJCQkweDAzMDAKKyNkZWZpbmUJREVOQ19CX1JFR18yCQkJCQkweDAzMDQKKyNkZWZpbmUJREVOQ19CX1JFR18zCQkJCQkweDAzMDgKKyNkZWZpbmUJREVOQ19CX1JFR180CQkJCQkweDAzMEMKKyNkZWZpbmUJREVOQ19CX1JFR181CQkJCQkweDAzMTAKKyNkZWZpbmUJREVOQ19CX1JFR182CQkJCQkweDAzMTQKKyNkZWZpbmUJREVOQ19CX1JFR183CQkJCQkweDAzMTgKKyNkZWZpbmUJREVOQ19CX1JFR184CQkJCQkweDAzMUMKKworLy8gICAgICAgICAgICAgIFZpZGVvIERlY29kZXIgQSBSZWdpc3RlcnMKKyNkZWZpbmUJTU9ERV9DVFJMCQkJCQkJMHgxMDAwCisjZGVmaW5lCU9VVF9DVFJMMQkJCQkJCTB4MTAwNAorI2RlZmluZQlPVVRfQ1RSTF9OUwkJCQkJCTB4MTAwOAorI2RlZmluZQlHRU5fU1RBVAkJCQkJCTB4MTAwQworI2RlZmluZQlJTlRfU1RBVF9NQVNLCQkJCQkweDEwMTAKKyNkZWZpbmUJTFVNQV9DVFJMCQkJCQkJMHgxMDE0CisjZGVmaW5lCUNIUk9NQV9DVFJMCQkJCQkJMHgxMDE4CisjZGVmaW5lCUNSVVNIX0NUUkwJCQkJCQkweDEwMUMKKyNkZWZpbmUJSE9SSVpfVElNX0NUUkwJCQkJCTB4MTAyMAorI2RlZmluZQlWRVJUX1RJTV9DVFJMCQkJCQkweDEwMjQKKyNkZWZpbmUJTUlTQ19USU1fQ1RSTAkJCQkJMHgxMDI4CisjZGVmaW5lCUZJRUxEX0NPVU5UCQkJCQkJMHgxMDJDCisjZGVmaW5lCUhTQ0FMRV9DVFJMCQkJCQkJMHgxMDMwCisjZGVmaW5lCVZTQ0FMRV9DVFJMCQkJCQkJMHgxMDM0CisjZGVmaW5lCU1BTl9WR0FfQ1RSTAkJCQkJMHgxMDM4CisjZGVmaW5lCU1BTl9BR0NfQ1RSTAkJCQkJMHgxMDNDCisjZGVmaW5lCURGRV9DVFJMMQkJCQkJCTB4MTA0MAorI2RlZmluZQlERkVfQ1RSTDIJCQkJCQkweDEwNDQKKyNkZWZpbmUJREZFX0NUUkwzCQkJCQkJMHgxMDQ4CisjZGVmaW5lCVBMTF9DVFJMCQkJCQkJMHgxMDRDCisjZGVmaW5lCVBMTF9DVFJMX0ZBU1QJCQkJCTB4MTA1MAorI2RlZmluZQlIVExfQ1RSTAkJCQkJCTB4MTA1NAorI2RlZmluZQlTUkNfQ0ZHCQkJCQkJCTB4MTA1OAorI2RlZmluZQlTQ19TVEVQX1NJWkUJCQkJCTB4MTA1QworI2RlZmluZQlTQ19DT05WRVJHRV9DVFJMCQkJCTB4MTA2MAorI2RlZmluZQlTQ19MT09QX0NUUkwJCQkJCTB4MTA2NAorI2RlZmluZQlDT01CXzJEX0hGU19DRkcJCQkJCTB4MTA2OAorI2RlZmluZQlDT01CXzJEX0hGRF9DRkcJCQkJCTB4MTA2QworI2RlZmluZQlDT01CXzJEX0xGX0NGRwkJCQkJMHgxMDcwCisjZGVmaW5lCUNPTUJfMkRfQkxFTkQJCQkJCTB4MTA3NAorI2RlZmluZQlDT01CX01JU0NfQ1RSTAkJCQkJMHgxMDc4CisjZGVmaW5lCUNPTUJfRkxBVF9USFJFU0hfQ1RSTAkJCTB4MTA3QworI2RlZmluZQlDT01CX1RFU1QJCQkJCQkweDEwODAKKyNkZWZpbmUJQlBfTUlTQ19DVFJMCQkJCQkweDEwODQKKyNkZWZpbmUJVkNSX0RFVF9DVFJMCQkJCQkweDEwODgKKyNkZWZpbmUJTk9JU0VfREVUX0NUUkwJCQkJCTB4MTA4QworI2RlZmluZQlDT01CX0ZMQVRfTk9JU0VfQ1RSTAkJCTB4MTA5MAorI2RlZmluZQlWRVJTSU9OCQkJCQkJCTB4MTFGOAorI2RlZmluZQlTT0ZUX1JTVF9DVFJMCQkJCQkweDExRkMKKworLy8gICAgICBWaWRlbyBEZWNvZGVyIEIgUmVnaXN0ZXJzCisjZGVmaW5lCVZERUNfQl9NT0RFX0NUUkwJCQkJMHgxMjAwCisjZGVmaW5lCVZERUNfQl9PVVRfQ1RSTDEJCQkJMHgxMjA0CisjZGVmaW5lCVZERUNfQl9PVVRfQ1RSTF9OUwkJCQkweDEyMDgKKyNkZWZpbmUJVkRFQ19CX0dFTl9TVEFUCQkJCQkweDEyMEMKKyNkZWZpbmUJVkRFQ19CX0lOVF9TVEFUX01BU0sJCQkweDEyMTAKKyNkZWZpbmUJVkRFQ19CX0xVTUFfQ1RSTAkJCQkweDEyMTQKKyNkZWZpbmUJVkRFQ19CX0NIUk9NQV9DVFJMCQkJCTB4MTIxOAorI2RlZmluZQlWREVDX0JfQ1JVU0hfQ1RSTAkJCQkweDEyMUMKKyNkZWZpbmUJVkRFQ19CX0hPUklaX1RJTV9DVFJMCQkJMHgxMjIwCisjZGVmaW5lCVZERUNfQl9WRVJUX1RJTV9DVFJMCQkJMHgxMjI0CisjZGVmaW5lCVZERUNfQl9NSVNDX1RJTV9DVFJMCQkJMHgxMjI4CisjZGVmaW5lCVZERUNfQl9GSUVMRF9DT1VOVAkJCQkweDEyMkMKKyNkZWZpbmUJVkRFQ19CX0hTQ0FMRV9DVFJMCQkJCTB4MTIzMAorI2RlZmluZQlWREVDX0JfVlNDQUxFX0NUUkwJCQkJMHgxMjM0CisjZGVmaW5lCVZERUNfQl9NQU5fVkdBX0NUUkwJCQkJMHgxMjM4CisjZGVmaW5lCVZERUNfQl9NQU5fQUdDX0NUUkwJCQkJMHgxMjNDCisjZGVmaW5lCVZERUNfQl9ERkVfQ1RSTDEJCQkJMHgxMjQwCisjZGVmaW5lCVZERUNfQl9ERkVfQ1RSTDIJCQkJMHgxMjQ0CisjZGVmaW5lCVZERUNfQl9ERkVfQ1RSTDMJCQkJMHgxMjQ4CisjZGVmaW5lCVZERUNfQl9QTExfQ1RSTAkJCQkJMHgxMjRDCisjZGVmaW5lCVZERUNfQl9QTExfQ1RSTF9GQVNUCQkJMHgxMjUwCisjZGVmaW5lCVZERUNfQl9IVExfQ1RSTAkJCQkJMHgxMjU0CisjZGVmaW5lCVZERUNfQl9TUkNfQ0ZHCQkJCQkweDEyNTgKKyNkZWZpbmUJVkRFQ19CX1NDX1NURVBfU0laRQkJCQkweDEyNUMKKyNkZWZpbmUJVkRFQ19CX1NDX0NPTlZFUkdFX0NUUkwJCQkweDEyNjAKKyNkZWZpbmUJVkRFQ19CX1NDX0xPT1BfQ1RSTAkJCQkweDEyNjQKKyNkZWZpbmUJVkRFQ19CX0NPTUJfMkRfSEZTX0NGRwkJCTB4MTI2OAorI2RlZmluZQlWREVDX0JfQ09NQl8yRF9IRkRfQ0ZHCQkJMHgxMjZDCisjZGVmaW5lCVZERUNfQl9DT01CXzJEX0xGX0NGRwkJCTB4MTI3MAorI2RlZmluZQlWREVDX0JfQ09NQl8yRF9CTEVORAkJCTB4MTI3NAorI2RlZmluZQlWREVDX0JfQ09NQl9NSVNDX0NUUkwJCQkweDEyNzgKKyNkZWZpbmUJVkRFQ19CX0NPTUJfRkxBVF9USFJFU0hfQ1RSTAkweDEyN0MKKyNkZWZpbmUJVkRFQ19CX0NPTUJfVEVTVAkJCQkweDEyODAKKyNkZWZpbmUJVkRFQ19CX0JQX01JU0NfQ1RSTAkJCQkweDEyODQKKyNkZWZpbmUJVkRFQ19CX1ZDUl9ERVRfQ1RSTAkJCQkweDEyODgKKyNkZWZpbmUJVkRFQ19CX05PSVNFX0RFVF9DVFJMCQkJMHgxMjhDCisjZGVmaW5lCVZERUNfQl9DT01CX0ZMQVRfTk9JU0VfQ1RSTAkJMHgxMjkwCisjZGVmaW5lCVZERUNfQl9WRVJTSU9OCQkJCQkweDEzRjgKKyNkZWZpbmUJVkRFQ19CX1NPRlRfUlNUX0NUUkwJCQkweDEzRkMKKworLy8gVmlkZW8gRGVjb2RlciBDIFJlZ2lzdGVycworI2RlZmluZQlWREVDX0NfTU9ERV9DVFJMCQkJCTB4MTQwMAorI2RlZmluZQlWREVDX0NfT1VUX0NUUkwxCQkJCTB4MTQwNAorI2RlZmluZQlWREVDX0NfT1VUX0NUUkxfTlMJCQkJMHgxNDA4CisjZGVmaW5lCVZERUNfQ19HRU5fU1RBVAkJCQkJMHgxNDBDCisjZGVmaW5lCVZERUNfQ19JTlRfU1RBVF9NQVNLCQkJMHgxNDEwCisjZGVmaW5lIFZERUNfQ19MVU1BX0NUUkwJCQkJMHgxNDE0CisjZGVmaW5lIFZERUNfQ19DSFJPTUFfQ1RSTAkJCQkweDE0MTgKKyNkZWZpbmUJVkRFQ19DX0NSVVNIX0NUUkwJCQkJMHgxNDFDCisjZGVmaW5lCVZERUNfQ19IT1JJWl9USU1fQ1RSTAkJCTB4MTQyMAorI2RlZmluZQlWREVDX0NfVkVSVF9USU1fQ1RSTAkJCTB4MTQyNAorI2RlZmluZQlWREVDX0NfTUlTQ19USU1fQ1RSTAkJCTB4MTQyOAorI2RlZmluZQlWREVDX0NfRklFTERfQ09VTlQJCQkJMHgxNDJDCisjZGVmaW5lCVZERUNfQ19IU0NBTEVfQ1RSTAkJCQkweDE0MzAKKyNkZWZpbmUJVkRFQ19DX1ZTQ0FMRV9DVFJMCQkJCTB4MTQzNAorI2RlZmluZQlWREVDX0NfTUFOX1ZHQV9DVFJMCQkJCTB4MTQzOAorI2RlZmluZQlWREVDX0NfTUFOX0FHQ19DVFJMCQkJCTB4MTQzQworI2RlZmluZQlWREVDX0NfREZFX0NUUkwxCQkJCTB4MTQ0MAorI2RlZmluZQlWREVDX0NfREZFX0NUUkwyCQkJCTB4MTQ0NAorI2RlZmluZQlWREVDX0NfREZFX0NUUkwzCQkJCTB4MTQ0OAorI2RlZmluZQlWREVDX0NfUExMX0NUUkwJCQkJCTB4MTQ0QworI2RlZmluZQlWREVDX0NfUExMX0NUUkxfRkFTVAkJCTB4MTQ1MAorI2RlZmluZQlWREVDX0NfSFRMX0NUUkwJCQkJCTB4MTQ1NAorI2RlZmluZQlWREVDX0NfU1JDX0NGRwkJCQkJMHgxNDU4CisjZGVmaW5lCVZERUNfQ19TQ19TVEVQX1NJWkUJCQkJMHgxNDVDCisjZGVmaW5lCVZERUNfQ19TQ19DT05WRVJHRV9DVFJMCQkJMHgxNDYwCisjZGVmaW5lCVZERUNfQ19TQ19MT09QX0NUUkwJCQkJMHgxNDY0CisjZGVmaW5lCVZERUNfQ19DT01CXzJEX0hGU19DRkcJCQkweDE0NjgKKyNkZWZpbmUJVkRFQ19DX0NPTUJfMkRfSEZEX0NGRwkJCTB4MTQ2QworI2RlZmluZQlWREVDX0NfQ09NQl8yRF9MRl9DRkcJCQkweDE0NzAKKyNkZWZpbmUJVkRFQ19DX0NPTUJfMkRfQkxFTkQJCQkweDE0NzQKKyNkZWZpbmUJVkRFQ19DX0NPTUJfTUlTQ19DVFJMCQkJMHgxNDc4CisjZGVmaW5lCVZERUNfQ19DT01CX0ZMQVRfVEhSRVNIX0NUUkwJMHgxNDdDCisjZGVmaW5lCVZERUNfQ19DT01CX1RFU1QJCQkJMHgxNDgwCisjZGVmaW5lCVZERUNfQ19CUF9NSVNDX0NUUkwJCQkJMHgxNDg0CisjZGVmaW5lCVZERUNfQ19WQ1JfREVUX0NUUkwJCQkJMHgxNDg4CisjZGVmaW5lCVZERUNfQ19OT0lTRV9ERVRfQ1RSTAkJCTB4MTQ4QworI2RlZmluZQlWREVDX0NfQ09NQl9GTEFUX05PSVNFX0NUUkwJCTB4MTQ5MAorI2RlZmluZQlWREVDX0NfVkVSU0lPTgkJCQkJMHgxNUY4CisjZGVmaW5lCVZERUNfQ19TT0ZUX1JTVF9DVFJMCQkJMHgxNUZDCisKKy8vIFZpZGVvIERlY29kZXIgRCBSZWdpc3RlcnMKKyNkZWZpbmUgVkRFQ19EX01PREVfQ1RSTAkJCQkweDE2MDAKKyNkZWZpbmUgVkRFQ19EX09VVF9DVFJMMQkJCQkweDE2MDQKKyNkZWZpbmUgVkRFQ19EX09VVF9DVFJMX05TCQkJCTB4MTYwOAorI2RlZmluZSBWREVDX0RfR0VOX1NUQVQJCQkJCTB4MTYwQworI2RlZmluZSBWREVDX0RfSU5UX1NUQVRfTUFTSwkJCTB4MTYxMAorI2RlZmluZSBWREVDX0RfTFVNQV9DVFJMCQkJCTB4MTYxNAorI2RlZmluZSBWREVDX0RfQ0hST01BX0NUUkwJCQkJMHgxNjE4CisjZGVmaW5lIFZERUNfRF9DUlVTSF9DVFJMCQkJCTB4MTYxQworI2RlZmluZSBWREVDX0RfSE9SSVpfVElNX0NUUkwJCQkweDE2MjAKKyNkZWZpbmUgVkRFQ19EX1ZFUlRfVElNX0NUUkwJCQkweDE2MjQKKyNkZWZpbmUgVkRFQ19EX01JU0NfVElNX0NUUkwJCQkweDE2MjgKKyNkZWZpbmUgVkRFQ19EX0ZJRUxEX0NPVU5UCQkJCTB4MTYyQworI2RlZmluZSBWREVDX0RfSFNDQUxFX0NUUkwJCQkJMHgxNjMwCisjZGVmaW5lIFZERUNfRF9WU0NBTEVfQ1RSTAkJCQkweDE2MzQKKyNkZWZpbmUgVkRFQ19EX01BTl9WR0FfQ1RSTAkJCQkweDE2MzgKKyNkZWZpbmUgVkRFQ19EX01BTl9BR0NfQ1RSTAkJCQkweDE2M0MKKyNkZWZpbmUgVkRFQ19EX0RGRV9DVFJMMQkJCQkweDE2NDAKKyNkZWZpbmUgVkRFQ19EX0RGRV9DVFJMMgkJCQkweDE2NDQKKyNkZWZpbmUgVkRFQ19EX0RGRV9DVFJMMwkJCQkweDE2NDgKKyNkZWZpbmUgVkRFQ19EX1BMTF9DVFJMCQkJCQkweDE2NEMKKyNkZWZpbmUgVkRFQ19EX1BMTF9DVFJMX0ZBU1QJCQkweDE2NTAKKyNkZWZpbmUgVkRFQ19EX0hUTF9DVFJMCQkJCQkweDE2NTQKKyNkZWZpbmUgVkRFQ19EX1NSQ19DRkcJCQkJCTB4MTY1OAorI2RlZmluZSBWREVDX0RfU0NfU1RFUF9TSVpFCQkJCTB4MTY1QworI2RlZmluZSBWREVDX0RfU0NfQ09OVkVSR0VfQ1RSTAkJCTB4MTY2MAorI2RlZmluZSBWREVDX0RfU0NfTE9PUF9DVFJMCQkJCTB4MTY2NAorI2RlZmluZSBWREVDX0RfQ09NQl8yRF9IRlNfQ0ZHCQkJMHgxNjY4CisjZGVmaW5lIFZERUNfRF9DT01CXzJEX0hGRF9DRkcJCQkweDE2NkMKKyNkZWZpbmUgVkRFQ19EX0NPTUJfMkRfTEZfQ0ZHCQkJMHgxNjcwCisjZGVmaW5lIFZERUNfRF9DT01CXzJEX0JMRU5ECQkJMHgxNjc0CisjZGVmaW5lIFZERUNfRF9DT01CX01JU0NfQ1RSTAkJCTB4MTY3OAorI2RlZmluZSBWREVDX0RfQ09NQl9GTEFUX1RIUkVTSF9DVFJMCTB4MTY3QworI2RlZmluZSBWREVDX0RfQ09NQl9URVNUCQkJCTB4MTY4MAorI2RlZmluZSBWREVDX0RfQlBfTUlTQ19DVFJMCQkJCTB4MTY4NAorI2RlZmluZSBWREVDX0RfVkNSX0RFVF9DVFJMCQkJCTB4MTY4OAorI2RlZmluZSBWREVDX0RfTk9JU0VfREVUX0NUUkwJCQkweDE2OEMKKyNkZWZpbmUgVkRFQ19EX0NPTUJfRkxBVF9OT0lTRV9DVFJMCQkweDE2OTAKKyNkZWZpbmUgVkRFQ19EX1ZFUlNJT04JCQkJCTB4MTdGOAorI2RlZmluZSBWREVDX0RfU09GVF9SU1RfQ1RSTAkJCTB4MTdGQworCisvLyBWaWRlbyBEZWNvZGVyIEUgUmVnaXN0ZXJzCisjZGVmaW5lCVZERUNfRV9NT0RFX0NUUkwJCQkJMHgxODAwCisjZGVmaW5lCVZERUNfRV9PVVRfQ1RSTDEJCQkJMHgxODA0CisjZGVmaW5lCVZERUNfRV9PVVRfQ1RSTF9OUwkJCQkweDE4MDgKKyNkZWZpbmUJVkRFQ19FX0dFTl9TVEFUCQkJCQkweDE4MEMKKyNkZWZpbmUJVkRFQ19FX0lOVF9TVEFUX01BU0sJCQkweDE4MTAKKyNkZWZpbmUJVkRFQ19FX0xVTUFfQ1RSTAkJCQkweDE4MTQKKyNkZWZpbmUJVkRFQ19FX0NIUk9NQV9DVFJMCQkJCTB4MTgxOAorI2RlZmluZQlWREVDX0VfQ1JVU0hfQ1RSTAkJCQkweDE4MUMKKyNkZWZpbmUJVkRFQ19FX0hPUklaX1RJTV9DVFJMCQkJMHgxODIwCisjZGVmaW5lCVZERUNfRV9WRVJUX1RJTV9DVFJMCQkJMHgxODI0CisjZGVmaW5lCVZERUNfRV9NSVNDX1RJTV9DVFJMCQkJMHgxODI4CisjZGVmaW5lCVZERUNfRV9GSUVMRF9DT1VOVAkJCQkweDE4MkMKKyNkZWZpbmUJVkRFQ19FX0hTQ0FMRV9DVFJMCQkJCTB4MTgzMAorI2RlZmluZQlWREVDX0VfVlNDQUxFX0NUUkwJCQkJMHgxODM0CisjZGVmaW5lCVZERUNfRV9NQU5fVkdBX0NUUkwJCQkJMHgxODM4CisjZGVmaW5lCVZERUNfRV9NQU5fQUdDX0NUUkwJCQkJMHgxODNDCisjZGVmaW5lCVZERUNfRV9ERkVfQ1RSTDEJCQkJMHgxODQwCisjZGVmaW5lCVZERUNfRV9ERkVfQ1RSTDIJCQkJMHgxODQ0CisjZGVmaW5lCVZERUNfRV9ERkVfQ1RSTDMJCQkJMHgxODQ4CisjZGVmaW5lCVZERUNfRV9QTExfQ1RSTAkJCQkJMHgxODRDCisjZGVmaW5lCVZERUNfRV9QTExfQ1RSTF9GQVNUCQkJMHgxODUwCisjZGVmaW5lCVZERUNfRV9IVExfQ1RSTAkJCQkJMHgxODU0CisjZGVmaW5lCVZERUNfRV9TUkNfQ0ZHCQkJCQkweDE4NTgKKyNkZWZpbmUJVkRFQ19FX1NDX1NURVBfU0laRQkJCQkweDE4NUMKKyNkZWZpbmUJVkRFQ19FX1NDX0NPTlZFUkdFX0NUUkwJCQkweDE4NjAKKyNkZWZpbmUJVkRFQ19FX1NDX0xPT1BfQ1RSTAkJCQkweDE4NjQKKyNkZWZpbmUJVkRFQ19FX0NPTUJfMkRfSEZTX0NGRwkJCTB4MTg2OAorI2RlZmluZQlWREVDX0VfQ09NQl8yRF9IRkRfQ0ZHCQkJMHgxODZDCisjZGVmaW5lCVZERUNfRV9DT01CXzJEX0xGX0NGRwkJCTB4MTg3MAorI2RlZmluZQlWREVDX0VfQ09NQl8yRF9CTEVORAkJCTB4MTg3NAorI2RlZmluZQlWREVDX0VfQ09NQl9NSVNDX0NUUkwJCQkweDE4NzgKKyNkZWZpbmUJVkRFQ19FX0NPTUJfRkxBVF9USFJFU0hfQ1RSTAkweDE4N0MKKyNkZWZpbmUJVkRFQ19FX0NPTUJfVEVTVAkJCQkweDE4ODAKKyNkZWZpbmUJVkRFQ19FX0JQX01JU0NfQ1RSTAkJCQkweDE4ODQKKyNkZWZpbmUJVkRFQ19FX1ZDUl9ERVRfQ1RSTAkJCQkweDE4ODgKKyNkZWZpbmUJVkRFQ19FX05PSVNFX0RFVF9DVFJMCQkJMHgxODhDCisjZGVmaW5lCVZERUNfRV9DT01CX0ZMQVRfTk9JU0VfQ1RSTAkJMHgxODkwCisjZGVmaW5lCVZERUNfRV9WRVJTSU9OCQkJCQkweDE5RjgKKyNkZWZpbmUJVkRFQ19FX1NPRlRfUlNUX0NUUkwJCQkweDE5RkMKKworLy8gVmlkZW8gRGVjb2RlciBGIFJlZ2lzdGVycworI2RlZmluZQlWREVDX0ZfTU9ERV9DVFJMCQkJCTB4MUEwMAorI2RlZmluZQlWREVDX0ZfT1VUX0NUUkwxCQkJCTB4MUEwNAorI2RlZmluZQlWREVDX0ZfT1VUX0NUUkxfTlMJCQkJMHgxQTA4CisjZGVmaW5lCVZERUNfRl9HRU5fU1RBVAkJCQkJMHgxQTBDCisjZGVmaW5lCVZERUNfRl9JTlRfU1RBVF9NQVNLCQkJMHgxQTEwCisjZGVmaW5lCVZERUNfRl9MVU1BX0NUUkwJCQkJMHgxQTE0CisjZGVmaW5lCVZERUNfRl9DSFJPTUFfQ1RSTAkJCQkweDFBMTgKKyNkZWZpbmUJVkRFQ19GX0NSVVNIX0NUUkwJCQkJMHgxQTFDCisjZGVmaW5lCVZERUNfRl9IT1JJWl9USU1fQ1RSTAkJCTB4MUEyMAorI2RlZmluZQlWREVDX0ZfVkVSVF9USU1fQ1RSTAkJCTB4MUEyNAorI2RlZmluZQlWREVDX0ZfTUlTQ19USU1fQ1RSTAkJCTB4MUEyOAorI2RlZmluZQlWREVDX0ZfRklFTERfQ09VTlQJCQkJMHgxQTJDCisjZGVmaW5lCVZERUNfRl9IU0NBTEVfQ1RSTAkJCQkweDFBMzAKKyNkZWZpbmUJVkRFQ19GX1ZTQ0FMRV9DVFJMCQkJCTB4MUEzNAorI2RlZmluZQlWREVDX0ZfTUFOX1ZHQV9DVFJMCQkJCTB4MUEzOAorI2RlZmluZQlWREVDX0ZfTUFOX0FHQ19DVFJMCQkJCTB4MUEzQworI2RlZmluZQlWREVDX0ZfREZFX0NUUkwxCQkJCTB4MUE0MAorI2RlZmluZQlWREVDX0ZfREZFX0NUUkwyCQkJCTB4MUE0NAorI2RlZmluZQlWREVDX0ZfREZFX0NUUkwzCQkJCTB4MUE0OAorI2RlZmluZQlWREVDX0ZfUExMX0NUUkwJCQkJCTB4MUE0QworI2RlZmluZQlWREVDX0ZfUExMX0NUUkxfRkFTVAkJCTB4MUE1MAorI2RlZmluZQlWREVDX0ZfSFRMX0NUUkwJCQkJCTB4MUE1NAorI2RlZmluZQlWREVDX0ZfU1JDX0NGRwkJCQkJMHgxQTU4CisjZGVmaW5lCVZERUNfRl9TQ19TVEVQX1NJWkUJCQkJMHgxQTVDCisjZGVmaW5lCVZERUNfRl9TQ19DT05WRVJHRV9DVFJMCQkJMHgxQTYwCisjZGVmaW5lCVZERUNfRl9TQ19MT09QX0NUUkwJCQkJMHgxQTY0CisjZGVmaW5lCVZERUNfRl9DT01CXzJEX0hGU19DRkcJCQkweDFBNjgKKyNkZWZpbmUJVkRFQ19GX0NPTUJfMkRfSEZEX0NGRwkJCTB4MUE2QworI2RlZmluZQlWREVDX0ZfQ09NQl8yRF9MRl9DRkcJCQkweDFBNzAKKyNkZWZpbmUJVkRFQ19GX0NPTUJfMkRfQkxFTkQJCQkweDFBNzQKKyNkZWZpbmUJVkRFQ19GX0NPTUJfTUlTQ19DVFJMCQkJMHgxQTc4CisjZGVmaW5lCVZERUNfRl9DT01CX0ZMQVRfVEhSRVNIX0NUUkwJMHgxQTdDCisjZGVmaW5lCVZERUNfRl9DT01CX1RFU1QJCQkJMHgxQTgwCisjZGVmaW5lCVZERUNfRl9CUF9NSVNDX0NUUkwJCQkJMHgxQTg0CisjZGVmaW5lCVZERUNfRl9WQ1JfREVUX0NUUkwJCQkJMHgxQTg4CisjZGVmaW5lCVZERUNfRl9OT0lTRV9ERVRfQ1RSTAkJCTB4MUE4QworI2RlZmluZQlWREVDX0ZfQ09NQl9GTEFUX05PSVNFX0NUUkwJCTB4MUE5MAorI2RlZmluZQlWREVDX0ZfVkVSU0lPTgkJCQkJMHgxQkY4CisjZGVmaW5lCVZERUNfRl9TT0ZUX1JTVF9DVFJMCQkJMHgxQkZDCisKKy8vIFZpZGVvIERlY29kZXIgRyBSZWdpc3RlcnMKKyNkZWZpbmUJVkRFQ19HX01PREVfQ1RSTAkJCQkweDFDMDAKKyNkZWZpbmUJVkRFQ19HX09VVF9DVFJMMQkJCQkweDFDMDQKKyNkZWZpbmUJVkRFQ19HX09VVF9DVFJMX05TCQkJCTB4MUMwOAorI2RlZmluZQlWREVDX0dfR0VOX1NUQVQJCQkJCTB4MUMwQworI2RlZmluZQlWREVDX0dfSU5UX1NUQVRfTUFTSwkJCTB4MUMxMAorI2RlZmluZQlWREVDX0dfTFVNQV9DVFJMCQkJCTB4MUMxNAorI2RlZmluZQlWREVDX0dfQ0hST01BX0NUUkwJCQkJMHgxQzE4CisjZGVmaW5lCVZERUNfR19DUlVTSF9DVFJMCQkJCTB4MUMxQworI2RlZmluZQlWREVDX0dfSE9SSVpfVElNX0NUUkwJCQkweDFDMjAKKyNkZWZpbmUJVkRFQ19HX1ZFUlRfVElNX0NUUkwJCQkweDFDMjQKKyNkZWZpbmUJVkRFQ19HX01JU0NfVElNX0NUUkwJCQkweDFDMjgKKyNkZWZpbmUJVkRFQ19HX0ZJRUxEX0NPVU5UCQkJCTB4MUMyQworI2RlZmluZQlWREVDX0dfSFNDQUxFX0NUUkwJCQkJMHgxQzMwCisjZGVmaW5lCVZERUNfR19WU0NBTEVfQ1RSTAkJCQkweDFDMzQKKyNkZWZpbmUJVkRFQ19HX01BTl9WR0FfQ1RSTAkJCQkweDFDMzgKKyNkZWZpbmUJVkRFQ19HX01BTl9BR0NfQ1RSTAkJCQkweDFDM0MKKyNkZWZpbmUJVkRFQ19HX0RGRV9DVFJMMQkJCQkweDFDNDAKKyNkZWZpbmUJVkRFQ19HX0RGRV9DVFJMMgkJCQkweDFDNDQKKyNkZWZpbmUJVkRFQ19HX0RGRV9DVFJMMwkJCQkweDFDNDgKKyNkZWZpbmUJVkRFQ19HX1BMTF9DVFJMCQkJCQkweDFDNEMKKyNkZWZpbmUJVkRFQ19HX1BMTF9DVFJMX0ZBU1QJCQkweDFDNTAKKyNkZWZpbmUJVkRFQ19HX0hUTF9DVFJMCQkJCQkweDFDNTQKKyNkZWZpbmUJVkRFQ19HX1NSQ19DRkcJCQkJCTB4MUM1OAorI2RlZmluZQlWREVDX0dfU0NfU1RFUF9TSVpFCQkJCTB4MUM1QworI2RlZmluZQlWREVDX0dfU0NfQ09OVkVSR0VfQ1RSTAkJCTB4MUM2MAorI2RlZmluZQlWREVDX0dfU0NfTE9PUF9DVFJMCQkJCTB4MUM2NAorI2RlZmluZQlWREVDX0dfQ09NQl8yRF9IRlNfQ0ZHCQkJMHgxQzY4CisjZGVmaW5lCVZERUNfR19DT01CXzJEX0hGRF9DRkcJCQkweDFDNkMKKyNkZWZpbmUJVkRFQ19HX0NPTUJfMkRfTEZfQ0ZHCQkJMHgxQzcwCisjZGVmaW5lCVZERUNfR19DT01CXzJEX0JMRU5ECQkJMHgxQzc0CisjZGVmaW5lCVZERUNfR19DT01CX01JU0NfQ1RSTAkJCTB4MUM3OAorI2RlZmluZQlWREVDX0dfQ09NQl9GTEFUX1RIUkVTSF9DVFJMCTB4MUM3QworI2RlZmluZQlWREVDX0dfQ09NQl9URVNUCQkJCTB4MUM4MAorI2RlZmluZQlWREVDX0dfQlBfTUlTQ19DVFJMCQkJCTB4MUM4NAorI2RlZmluZQlWREVDX0dfVkNSX0RFVF9DVFJMCQkJCTB4MUM4OAorI2RlZmluZQlWREVDX0dfTk9JU0VfREVUX0NUUkwJCQkweDFDOEMKKyNkZWZpbmUJVkRFQ19HX0NPTUJfRkxBVF9OT0lTRV9DVFJMCQkweDFDOTAKKyNkZWZpbmUJVkRFQ19HX1ZFUlNJT04JCQkJCTB4MURGOAorI2RlZmluZQlWREVDX0dfU09GVF9SU1RfQ1RSTAkJCTB4MURGQworCisvLyAgICAgICAgICAgICAgVmlkZW8gRGVjb2RlciBIIFJlZ2lzdGVycworI2RlZmluZQlWREVDX0hfTU9ERV9DVFJMCQkJCTB4MUUwMAorI2RlZmluZQlWREVDX0hfT1VUX0NUUkwxCQkJCTB4MUUwNAorI2RlZmluZQlWREVDX0hfT1VUX0NUUkxfTlMJCQkJMHgxRTA4CisjZGVmaW5lCVZERUNfSF9HRU5fU1RBVAkJCQkJMHgxRTBDCisjZGVmaW5lCVZERUNfSF9JTlRfU1RBVF9NQVNLCQkJMHgxRTFFCisjZGVmaW5lCVZERUNfSF9MVU1BX0NUUkwJCQkJMHgxRTE0CisjZGVmaW5lCVZERUNfSF9DSFJPTUFfQ1RSTAkJCQkweDFFMTgKKyNkZWZpbmUJVkRFQ19IX0NSVVNIX0NUUkwJCQkJMHgxRTFDCisjZGVmaW5lCVZERUNfSF9IT1JJWl9USU1fQ1RSTAkJCTB4MUUyMAorI2RlZmluZQlWREVDX0hfVkVSVF9USU1fQ1RSTAkJCTB4MUUyNAorI2RlZmluZQlWREVDX0hfTUlTQ19USU1fQ1RSTAkJCTB4MUUyOAorI2RlZmluZQlWREVDX0hfRklFTERfQ09VTlQJCQkJMHgxRTJDCisjZGVmaW5lCVZERUNfSF9IU0NBTEVfQ1RSTAkJCQkweDFFMzAKKyNkZWZpbmUJVkRFQ19IX1ZTQ0FMRV9DVFJMCQkJCTB4MUUzNAorI2RlZmluZQlWREVDX0hfTUFOX1ZHQV9DVFJMCQkJCTB4MUUzOAorI2RlZmluZQlWREVDX0hfTUFOX0FHQ19DVFJMCQkJCTB4MUUzQworI2RlZmluZQlWREVDX0hfREZFX0NUUkwxCQkJCTB4MUU0MAorI2RlZmluZQlWREVDX0hfREZFX0NUUkwyCQkJCTB4MUU0NAorI2RlZmluZQlWREVDX0hfREZFX0NUUkwzCQkJCTB4MUU0OAorI2RlZmluZQlWREVDX0hfUExMX0NUUkwJCQkJCTB4MUU0QworI2RlZmluZQlWREVDX0hfUExMX0NUUkxfRkFTVAkJCTB4MUU1MAorI2RlZmluZQlWREVDX0hfSFRMX0NUUkwJCQkJCTB4MUU1NAorI2RlZmluZQlWREVDX0hfU1JDX0NGRwkJCQkJMHgxRTU4CisjZGVmaW5lCVZERUNfSF9TQ19TVEVQX1NJWkUJCQkJMHgxRTVDCisjZGVmaW5lCVZERUNfSF9TQ19DT05WRVJHRV9DVFJMCQkJMHgxRTYwCisjZGVmaW5lCVZERUNfSF9TQ19MT09QX0NUUkwJCQkJMHgxRTY0CisjZGVmaW5lCVZERUNfSF9DT01CXzJEX0hGU19DRkcJCQkweDFFNjgKKyNkZWZpbmUJVkRFQ19IX0NPTUJfMkRfSEZEX0NGRwkJCTB4MUU2QworI2RlZmluZQlWREVDX0hfQ09NQl8yRF9MRl9DRkcJCQkweDFFNzAKKyNkZWZpbmUJVkRFQ19IX0NPTUJfMkRfQkxFTkQJCQkweDFFNzQKKyNkZWZpbmUJVkRFQ19IX0NPTUJfTUlTQ19DVFJMCQkJMHgxRTc4CisjZGVmaW5lCVZERUNfSF9DT01CX0ZMQVRfVEhSRVNIX0NUUkwJMHgxRTdDCisjZGVmaW5lCVZERUNfSF9DT01CX1RFU1QJCQkJMHgxRTgwCisjZGVmaW5lCVZERUNfSF9CUF9NSVNDX0NUUkwJCQkJMHgxRTg0CisjZGVmaW5lCVZERUNfSF9WQ1JfREVUX0NUUkwJCQkJMHgxRTg4CisjZGVmaW5lCVZERUNfSF9OT0lTRV9ERVRfQ1RSTAkJCTB4MUU4QworI2RlZmluZQlWREVDX0hfQ09NQl9GTEFUX05PSVNFX0NUUkwJCTB4MUU5MAorI2RlZmluZQlWREVDX0hfVkVSU0lPTgkJCQkJMHgxRkY4CisjZGVmaW5lCVZERUNfSF9TT0ZUX1JTVF9DVFJMCQkJMHgxRkZDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIExVTUFfQ1RSTCByZWdpc3RlciBmaWVsZHMKKyNkZWZpbmUgVkRFQ19BX0JSSVRFX0NUUkwJCQkJMHgxMDE0CisjZGVmaW5lIFZERUNfQV9DTlRSU1RfQ1RSTCAgICAgICAJCTB4MTAxNQorI2RlZmluZSBWREVDX0FfUEVBS19TRUwgICAgICAgICAgCQkweDEwMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ0hST01BX0NUUkwgcmVnaXN0ZXIgZmllbGRzCisjZGVmaW5lIFZERUNfQV9VU0FUX0NUUkwgICAgICAgICAJCTB4MTAxOAorI2RlZmluZSBWREVDX0FfVlNBVF9DVFJMICAgICAgICAgCQkweDEwMTkKKyNkZWZpbmUgVkRFQ19BX0hVRV9DVFJMICAgICAgICAgIAkJMHgxMDFBCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkZjgxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMKQEAgLTAsMCArMSw4NjkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1tZWR1c2EtdmlkZW8uaCIKKyNpbmNsdWRlICJjeDI1ODIxLWJpZmZ1bmNzLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL21lZHVzYV9lbmFibGVfYmx1ZWZpZWxkX291dHB1dCgpCisvLworLy8gRW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGJsdWUgZmlsZWQgb3V0cHV0IGlmIG5vIHZpZGVvCisvLworc3RhdGljIHZvaWQgbWVkdXNhX2VuYWJsZV9ibHVlZmllbGRfb3V0cHV0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbm5lbCwKKwkJCQkJICAgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmV0X3ZhbCA9IDE7CisJdTMyIHZhbHVlID0gMDsKKwl1MzIgdG1wID0gMDsKKwlpbnQgb3V0X2N0cmwgPSBPVVRfQ1RSTDE7CisJaW50IG91dF9jdHJsX25zID0gT1VUX0NUUkxfTlM7CisKKwlzd2l0Y2ggKGNoYW5uZWwpIHsKKwlkZWZhdWx0OgorCWNhc2UgVkRFQ19BOgorCQlicmVhazsKKwljYXNlIFZERUNfQjoKKwkJb3V0X2N0cmwgPSBWREVDX0JfT1VUX0NUUkwxOworCQlvdXRfY3RybF9ucyA9IFZERUNfQl9PVVRfQ1RSTF9OUzsKKwkJYnJlYWs7CisJY2FzZSBWREVDX0M6CisJCW91dF9jdHJsID0gVkRFQ19DX09VVF9DVFJMMTsKKwkJb3V0X2N0cmxfbnMgPSBWREVDX0NfT1VUX0NUUkxfTlM7CisJCWJyZWFrOworCWNhc2UgVkRFQ19EOgorCQlvdXRfY3RybCA9IFZERUNfRF9PVVRfQ1RSTDE7CisJCW91dF9jdHJsX25zID0gVkRFQ19EX09VVF9DVFJMX05TOworCQlicmVhazsKKwljYXNlIFZERUNfRToKKwkJb3V0X2N0cmwgPSBWREVDX0VfT1VUX0NUUkwxOworCQlvdXRfY3RybF9ucyA9IFZERUNfRV9PVVRfQ1RSTF9OUzsKKwkJcmV0dXJuOworCWNhc2UgVkRFQ19GOgorCQlvdXRfY3RybCA9IFZERUNfRl9PVVRfQ1RSTDE7CisJCW91dF9jdHJsX25zID0gVkRFQ19GX09VVF9DVFJMX05TOworCQlyZXR1cm47CisJY2FzZSBWREVDX0c6CisJCW91dF9jdHJsID0gVkRFQ19HX09VVF9DVFJMMTsKKwkJb3V0X2N0cmxfbnMgPSBWREVDX0dfT1VUX0NUUkxfTlM7CisJCXJldHVybjsKKwljYXNlIFZERUNfSDoKKwkJb3V0X2N0cmwgPSBWREVDX0hfT1VUX0NUUkwxOworCQlvdXRfY3RybF9ucyA9IFZERUNfSF9PVVRfQ1RSTF9OUzsKKwkJcmV0dXJuOworCX0KKworCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBvdXRfY3RybCwgJnRtcCk7CisJdmFsdWUgJj0gMHhGRkZGRkY3RjsJLy8gY2xlYXIgQkxVRV9GSUVMRF9FTgorCWlmIChlbmFibGUpCisJCXZhbHVlIHw9IDB4MDAwMDAwODA7CS8vIHNldCBCTFVFX0ZJRUxEX0VOCisJcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIG91dF9jdHJsLCB2YWx1ZSk7CisKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgb3V0X2N0cmxfbnMsICZ0bXApOworCXZhbHVlICY9IDB4RkZGRkZGN0Y7CisJaWYgKGVuYWJsZSkKKwkJdmFsdWUgfD0gMHgwMDAwMDA4MDsJLy8gc2V0IEJMVUVfRklFTERfRU4KKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgb3V0X2N0cmxfbnMsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBtZWR1c2FfaW5pdGlhbGl6ZV9udHNjKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWludCByZXRfdmFsID0gMDsKKwlpbnQgaSA9IDA7CisJdTMyIHZhbHVlID0gMDsKKwl1MzIgdG1wID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFQ09ERVJTOyBpKyspIHsKKwkJLy8gc2V0IHZpZGVvIGZvcm1hdCBOVFNDLU0KKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBNT0RFX0NUUkwgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICZ0bXApOworCQl2YWx1ZSAmPSAweEZGRkZGRkYwOworCQl2YWx1ZSB8PSAweDEwMDAxOwkvLyBlbmFibGUgdGhlIGZhc3QgbG9ja2luZyBtb2RlIGJpdFsxNl0KKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBNT0RFX0NUUkwgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICB2YWx1ZSk7CisKKwkJLy8gcmVzb2x1dGlvbiBOVFNDIDcyMHg0ODAKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgSE9SSVpfVElNX0NUUkwgKyAoMHgyMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4MDBDMDBDMDA7CisJCXZhbHVlIHw9IDB4NjEyRDAwNzQ7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBIT1JJWl9USU1fQ1RSTCArICgweDIwMCAqIGkpLCB2YWx1ZSk7CisKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgVkVSVF9USU1fQ1RSTCArICgweDIwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHgwMEMwMEMwMDsKKwkJdmFsdWUgfD0gMHgxQzFFMDAxQTsJLy8gdmJsYW5rX2NudCArIDIgdG8gZ2V0IGNhbWVyYSBJRAorCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgVkVSVF9USU1fQ1RSTCArICgweDIwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gY2hyb21hIHN1YmNhcnJpZXIgc3RlcCBzaXplCisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBTQ19TVEVQX1NJWkUgKyAoMHgyMDAgKiBpKSwgMHg0M0UwMDAwMCk7CisKKwkJLy8gZW5hYmxlIFZJUCBvcHRpb25hbCBhY3RpdmUKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgT1VUX0NUUkxfTlMgKyAoMHgyMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4RkZGQkZGRkY7CisJCXZhbHVlIHw9IDB4MDAwNDAwMDA7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBPVVRfQ1RSTF9OUyArICgweDIwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gZW5hYmxlIFZJUCBvcHRpb25hbCBhY3RpdmUgKFZJUF9PUFRfQUwpIGZvciBkaXJlY3Qgb3V0cHV0LgorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIE9VVF9DVFJMMSArICgweDIwMCAqIGkpLAorCQkJCSAgICAgJnRtcCk7CisJCXZhbHVlICY9IDB4RkZGQkZGRkY7CisJCXZhbHVlIHw9IDB4MDAwNDAwMDA7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgT1VUX0NUUkwxICsgKDB4MjAwICogaSksCisJCQkJICAgICAgdmFsdWUpOworCisJCS8vIGNsZWFyIFZQUkVTX1ZFUlRfRU4gYml0LCBmaXhlcyB0aGUgY2hyb21hIHJ1biBhd2F5IHByb2JsZW0KKwkJLy8gd2hlbiB0aGUgaW5wdXQgc3dpdGNoaW5nIHJhdGUgPCAxNiBmaWVsZHMKKwkJLy8KKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgTUlTQ19USU1fQ1RSTCArICgweDIwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgPSBzZXRCaXRBdFBvcyh2YWx1ZSwgMTQpOwkvLyBkaXNhYmxlIHNwZWNpYWwgcGxheSBkZXRlY3Rpb24KKwkJdmFsdWUgPSBjbGVhckJpdEF0UG9zKHZhbHVlLCAxNSk7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBNSVNDX1RJTV9DVFJMICsgKDB4MjAwICogaSksIHZhbHVlKTsKKworCQkvLyBzZXQgdmJpX2dhdGVfZW4gdG8gMAorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIERGRV9DVFJMMSArICgweDIwMCAqIGkpLAorCQkJCSAgICAgJnRtcCk7CisJCXZhbHVlID0gY2xlYXJCaXRBdFBvcyh2YWx1ZSwgMjkpOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIERGRV9DVFJMMSArICgweDIwMCAqIGkpLAorCQkJCSAgICAgIHZhbHVlKTsKKworCQkvLyBFbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgYmx1ZSBmaWVsZCBvdXRwdXQgaWYgbm8gdmlkZW8KKwkJbWVkdXNhX2VuYWJsZV9ibHVlZmllbGRfb3V0cHV0KGRldiwgaSwgMSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9FTkNPREVSUzsgaSsrKSB7CisJCS8vIE5UU0MgaGNsb2NrCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfMSArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGMDAwRkMwMDsKKwkJdmFsdWUgfD0gMHgwNkI0MDJEMDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfMSArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gYnVyc3QgYmVnaW4gYW5kIGJ1cnN0IGVuZAorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBERU5DX0FfUkVHXzIgKyAoMHgxMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4RkYwMDAwMDA7CisJCXZhbHVlIHw9IDB4MDA3RTkwNTQ7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzIgKyAoMHgxMDAgKiBpKSwgdmFsdWUpOworCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfMyArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGQzAwRkUwMDsKKwkJdmFsdWUgfD0gMHgwMEVDMDBGMDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfMyArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gc2V0IE5UU0MgdmJsYW5rLCBubyBwaGFzZSBhbHRlcm5hdGlvbiwgNy41IElSRSBwZWRlc3RhbAorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBERU5DX0FfUkVHXzQgKyAoMHgxMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4MDBGQ0ZGRkY7CisJCXZhbHVlIHw9IDB4MTMwMjAwMDA7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzQgKyAoMHgxMDAgKiBpKSwgdmFsdWUpOworCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfNSArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGRkZGMDAwMDsKKwkJdmFsdWUgfD0gMHgwMDAwRTU3NTsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfNSArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfNiArICgweDEwMCAqIGkpLCAweDAwOUE4OUMxKTsKKworCQkvLyBTdWJjYXJyaWVyIEluY3JlbWVudAorCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR183ICsgKDB4MTAwICogaSksIDB4MjFGMDdDMUYpOworCX0KKworCS8vc2V0IHBpY3R1cmUgcmVzb2x1dGlvbnMKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgSFNDQUxFX0NUUkwsIDB4MCk7CS8vMCAtIDcyMAorCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBWU0NBTEVfQ1RSTCwgMHgwKTsJLy8wIC0gNDgwCisKKwkvLyBzZXQgQnlwYXNzIGlucHV0IGZvcm1hdCB0byBOVFNDIDUyNSBsaW5lcworCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBCWVBfQUJfQ1RSTCwgJnRtcCk7CisJdmFsdWUgfD0gMHgwMDA4MDIwMDsKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQllQX0FCX0NUUkwsIHZhbHVlKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IG1lZHVzYV9QQUxDb21iSW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGRlYykKK3sKKwlpbnQgcmV0X3ZhbCA9IC0xOworCXUzMiB2YWx1ZSA9IDAsIHRtcCA9IDA7CisKKwkvLyBTZXR1cCBmb3IgMkQgdGhyZXNob2xkCisJcmV0X3ZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIENPTUJfMkRfSEZTX0NGRyArICgweDIwMCAqIGRlYyksCisJCQkgICAgICAweDIwMDAyODYxKTsKKwlyZXRfdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQ09NQl8yRF9IRkRfQ0ZHICsgKDB4MjAwICogZGVjKSwKKwkJCSAgICAgIDB4MjAwMDI4NjEpOworCXJldF92YWwgPQorCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBDT01CXzJEX0xGX0NGRyArICgweDIwMCAqIGRlYyksCisJCQkgICAgICAweDIwMEExMDIzKTsKKworCS8vIFNldHVwIGZsYXQgY2hyb21hIGFuZCBsdW1hIHRocmVzaG9sZHMKKwl2YWx1ZSA9CisJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgQ09NQl9GTEFUX1RIUkVTSF9DVFJMICsgKDB4MjAwICogZGVjKSwgJnRtcCk7CisJdmFsdWUgJj0gMHgwNjIzMDAwMDsKKwlyZXRfdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgIENPTUJfRkxBVF9USFJFU0hfQ1RSTCArICgweDIwMCAqIGRlYyksIHZhbHVlKTsKKworCS8vIHNldCBjb21iIDJEIGJsZW5kCisJcmV0X3ZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIENPTUJfMkRfQkxFTkQgKyAoMHgyMDAgKiBkZWMpLAorCQkJICAgICAgMHgyMTBGMEYwRik7CisKKwkvLyBDT01CIE1JU0MgQ09OVFJPTAorCXJldF92YWwgPQorCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBDT01CX01JU0NfQ1RSTCArICgweDIwMCAqIGRlYyksCisJCQkgICAgICAweDQxMTIwQTdGKTsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IG1lZHVzYV9pbml0aWFsaXplX3BhbChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJaW50IGkgPSAwOworCXUzMiB2YWx1ZSA9IDA7CisJdTMyIHRtcCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ERUNPREVSUzsgaSsrKSB7CisJCS8vIHNldCB2aWRlbyBmb3JtYXQgUEFMLUJER0hJCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgTU9ERV9DVFJMICsgKDB4MjAwICogaSksCisJCQkJICAgICAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGRkZGRkZGMDsKKwkJdmFsdWUgfD0gMHgxMDAwNDsJLy8gZW5hYmxlIHRoZSBmYXN0IGxvY2tpbmcgbW9kZSBiaXRbMTZdCisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgTU9ERV9DVFJMICsgKDB4MjAwICogaSksCisJCQkJICAgICAgdmFsdWUpOworCisJCS8vIHJlc29sdXRpb24gUEFMIDcyMHg1NzYKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgSE9SSVpfVElNX0NUUkwgKyAoMHgyMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4MDBDMDBDMDA7CisJCXZhbHVlIHw9IDB4NjMyRDAwN0Q7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBIT1JJWl9USU1fQ1RSTCArICgweDIwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gdmJsYW5rNjU2X2NudD14MjYsIHZhY3RpdmVfY250PTI0MGgsIHZibGFua19jbnQ9eDI0CisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIFZFUlRfVElNX0NUUkwgKyAoMHgyMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4MDBDMDBDMDA7CisJCXZhbHVlIHw9IDB4MjgyNDAwMjY7CS8vIHZibGFua19jbnQgKyAyIHRvIGdldCBjYW1lcmEgSUQKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIFZFUlRfVElNX0NUUkwgKyAoMHgyMDAgKiBpKSwgdmFsdWUpOworCisJCS8vIGNocm9tYSBzdWJjYXJyaWVyIHN0ZXAgc2l6ZQorCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgU0NfU1RFUF9TSVpFICsgKDB4MjAwICogaSksIDB4NTQxMUUyRDApOworCisJCS8vIGVuYWJsZSBWSVAgb3B0aW9uYWwgYWN0aXZlCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIE9VVF9DVFJMX05TICsgKDB4MjAwICogaSksICZ0bXApOworCQl2YWx1ZSAmPSAweEZGRkJGRkZGOworCQl2YWx1ZSB8PSAweDAwMDQwMDAwOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgT1VUX0NUUkxfTlMgKyAoMHgyMDAgKiBpKSwgdmFsdWUpOworCisJCS8vIGVuYWJsZSBWSVAgb3B0aW9uYWwgYWN0aXZlIChWSVBfT1BUX0FMKSBmb3IgZGlyZWN0IG91dHB1dC4KKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBPVVRfQ1RSTDEgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICZ0bXApOworCQl2YWx1ZSAmPSAweEZGRkJGRkZGOworCQl2YWx1ZSB8PSAweDAwMDQwMDAwOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIE9VVF9DVFJMMSArICgweDIwMCAqIGkpLAorCQkJCSAgICAgIHZhbHVlKTsKKworCQkvLyBjbGVhciBWUFJFU19WRVJUX0VOIGJpdCwgZml4ZXMgdGhlIGNocm9tYSBydW4gYXdheSBwcm9ibGVtCisJCS8vIHdoZW4gdGhlIGlucHV0IHN3aXRjaGluZyByYXRlIDwgMTYgZmllbGRzCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIE1JU0NfVElNX0NUUkwgKyAoMHgyMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlID0gc2V0Qml0QXRQb3ModmFsdWUsIDE0KTsJLy8gZGlzYWJsZSBzcGVjaWFsIHBsYXkgZGV0ZWN0aW9uCisJCXZhbHVlID0gY2xlYXJCaXRBdFBvcyh2YWx1ZSwgMTUpOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgTUlTQ19USU1fQ1RSTCArICgweDIwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gc2V0IHZiaV9nYXRlX2VuIHRvIDAKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBERkVfQ1RSTDEgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICZ0bXApOworCQl2YWx1ZSA9IGNsZWFyQml0QXRQb3ModmFsdWUsIDI5KTsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBERkVfQ1RSTDEgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICB2YWx1ZSk7CisKKwkJbWVkdXNhX1BBTENvbWJJbml0KGRldiwgaSk7CisKKwkJLy8gRW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGJsdWUgZmllbGQgb3V0cHV0IGlmIG5vIHZpZGVvCisJCW1lZHVzYV9lbmFibGVfYmx1ZWZpZWxkX291dHB1dChkZXYsIGksIDEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRU5DT0RFUlM7IGkrKykgeworCQkvLyBQQUwgaGNsb2NrCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfMSArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGMDAwRkMwMDsKKwkJdmFsdWUgfD0gMHgwNkMwMDJEMDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfMSArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gYnVyc3QgYmVnaW4gYW5kIGJ1cnN0IGVuZAorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBERU5DX0FfUkVHXzIgKyAoMHgxMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4RkYwMDAwMDA7CisJCXZhbHVlIHw9IDB4MDA3RTk3NTQ7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzIgKyAoMHgxMDAgKiBpKSwgdmFsdWUpOworCisJCS8vIGhibGFuayBhbmQgdmFjdGl2ZQorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBERU5DX0FfUkVHXzMgKyAoMHgxMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4RkMwMEZFMDA7CisJCXZhbHVlIHw9IDB4MDBGQzAxMjA7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzMgKyAoMHgxMDAgKiBpKSwgdmFsdWUpOworCisJCS8vIHNldCBQQUwgdmJsYW5rLCBwaGFzZSBhbHRlcm5hdGlvbiwgMCBJUkUgcGVkZXN0YWwKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgREVOQ19BX1JFR180ICsgKDB4MTAwICogaSksICZ0bXApOworCQl2YWx1ZSAmPSAweDAwRkNGRkZGOworCQl2YWx1ZSB8PSAweDE0MDEwMDAwOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR180ICsgKDB4MTAwICogaSksIHZhbHVlKTsKKworCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBERU5DX0FfUkVHXzUgKyAoMHgxMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4RkZGRjAwMDA7CisJCXZhbHVlIHw9IDB4MDAwMEYwNzg7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzUgKyAoMHgxMDAgKiBpKSwgdmFsdWUpOworCisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzYgKyAoMHgxMDAgKiBpKSwgMHgwMEE0OTNDRik7CisKKwkJLy8gU3ViY2FycmllciBJbmNyZW1lbnQKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfNyArICgweDEwMCAqIGkpLCAweDJBMDk4QUNCKTsKKwl9CisKKwkvL3NldCBwaWN0dXJlIHJlc29sdXRpb25zCisJcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIEhTQ0FMRV9DVFJMLCAweDApOwkvLzAgLSA3MjAKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgVlNDQUxFX0NUUkwsIDB4MCk7CS8vMCAtIDU3NgorCisJLy8gc2V0IEJ5cGFzcyBpbnB1dCBmb3JtYXQgdG8gUEFMIDYyNSBsaW5lcworCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBCWVBfQUJfQ1RSTCwgJnRtcCk7CisJdmFsdWUgJj0gMHhGRkY3RkRGRjsKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQllQX0FCX0NUUkwsIHZhbHVlKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiByZXRfdmFsOworfQorCitpbnQgbWVkdXNhX3NldF92aWRlb3N0YW5kYXJkKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKwl1MzIgdmFsdWUgPSAwLCB0bXAgPSAwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKSB7CisJCXN0YXR1cyA9IG1lZHVzYV9pbml0aWFsaXplX3BhbChkZXYpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IG1lZHVzYV9pbml0aWFsaXplX250c2MoZGV2KTsKKwl9CisKKwkvLyBFbmFibGUgREVOQ19BIG91dHB1dAorCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBERU5DX0FfUkVHXzQsICZ0bXApOworCXZhbHVlID0gc2V0Qml0QXRQb3ModmFsdWUsIDQpOworCXN0YXR1cyA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIERFTkNfQV9SRUdfNCwgdmFsdWUpOworCisJLy8gRW5hYmxlIERFTkNfQiBvdXRwdXQKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgREVOQ19CX1JFR180LCAmdG1wKTsKKwl2YWx1ZSA9IHNldEJpdEF0UG9zKHZhbHVlLCA0KTsKKwlzdGF0dXMgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBERU5DX0JfUkVHXzQsIHZhbHVlKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgbWVkdXNhX3NldF9yZXNvbHV0aW9uKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgd2lkdGgsCisJCQkgICBpbnQgZGVjb2Rlcl9zZWxlY3QpCit7CisJaW50IGRlY29kZXIgPSAwOworCWludCBkZWNvZGVyX2NvdW50ID0gMDsKKwlpbnQgcmV0X3ZhbCA9IDA7CisJdTMyIGhzY2FsZSA9IDB4MDsKKwl1MzIgdnNjYWxlID0gMHgwOworCWNvbnN0IGludCBNQVhfV0lEVEggPSA3MjA7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJLy8gdmFsaWRhdGUgdGhlIHdpZHRoIC0gY2Fubm90IGJlIG5lZ2F0aXZlCisJaWYgKHdpZHRoID4gTUFYX1dJRFRIKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxICVzKCkgOiB3aWR0aCAlZCA+IE1BWF9XSURUSCAlZCAhIHJlc2V0dGluZyB0byBNQVhfV0lEVEggXG4iLAorCQkgICAgIF9fZnVuY19fLCB3aWR0aCwgTUFYX1dJRFRIKTsKKwkJd2lkdGggPSBNQVhfV0lEVEg7CisJfQorCisJaWYgKGRlY29kZXJfc2VsZWN0IDw9IDcgJiYgZGVjb2Rlcl9zZWxlY3QgPj0gMCkgeworCQlkZWNvZGVyID0gZGVjb2Rlcl9zZWxlY3Q7CisJCWRlY29kZXJfY291bnQgPSBkZWNvZGVyX3NlbGVjdCArIDE7CisJfSBlbHNlIHsKKwkJZGVjb2RlciA9IDA7CisJCWRlY29kZXJfY291bnQgPSBfbnVtX2RlY29kZXJzOworCX0KKworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIDMyMDoKKwkJaHNjYWxlID0gMHgxM0UzNEI7CisJCXZzY2FsZSA9IDB4MDsKKwkJYnJlYWs7CisKKwljYXNlIDM1MjoKKwkJaHNjYWxlID0gMHgxMEEyNzM7CisJCXZzY2FsZSA9IDB4MDsKKwkJYnJlYWs7CisKKwljYXNlIDE3NjoKKwkJaHNjYWxlID0gMHgzMTE1QjI7CisJCXZzY2FsZSA9IDB4MUUwMDsKKwkJYnJlYWs7CisKKwljYXNlIDE2MDoKKwkJaHNjYWxlID0gMHgzNzhEODQ7CisJCXZzY2FsZSA9IDB4MUUwMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgkJLy83MjAKKwkJaHNjYWxlID0gMHgwOworCQl2c2NhbGUgPSAweDA7CisJCWJyZWFrOworCX0KKworCWZvciAoOyBkZWNvZGVyIDwgZGVjb2Rlcl9jb3VudDsgZGVjb2RlcisrKSB7CisJCS8vIHdyaXRlIHNjYWxpbmcgdmFsdWVzIGZvciBlYWNoIGRlY29kZXIKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIEhTQ0FMRV9DVFJMICsgKDB4MjAwICogZGVjb2RlciksIGhzY2FsZSk7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBWU0NBTEVfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLCB2c2NhbGUpOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbWVkdXNhX3NldF9kZWNvZGVyZHVyYXRpb24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBkZWNvZGVyLAorCQkJCSAgICAgICBpbnQgZHVyYXRpb24pCit7CisJaW50IHJldF92YWwgPSAwOworCXUzMiBmbGRfY250ID0gMDsKKwl1MzIgdG1wID0gMDsKKwl1MzIgZGlzcF9jbnRfcmVnID0gRElTUF9BQl9DTlQ7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJLy8gbm8gc3VwcG9ydAorCWlmIChkZWNvZGVyIDwgVkRFQ19BICYmIGRlY29kZXIgPiBWREVDX0gpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkZWNvZGVyKSB7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJY2FzZSBWREVDX0M6CisJY2FzZSBWREVDX0Q6CisJCWRpc3BfY250X3JlZyA9IERJU1BfQ0RfQ05UOworCQlicmVhazsKKwljYXNlIFZERUNfRToKKwljYXNlIFZERUNfRjoKKwkJZGlzcF9jbnRfcmVnID0gRElTUF9FRl9DTlQ7CisJCWJyZWFrOworCWNhc2UgVkRFQ19HOgorCWNhc2UgVkRFQ19IOgorCQlkaXNwX2NudF9yZWcgPSBESVNQX0dIX0NOVDsKKwkJYnJlYWs7CisJfQorCisJX2Rpc3BsYXlfZmllbGRfY250W2RlY29kZXJdID0gZHVyYXRpb247CisKKwkvLyB1cGRhdGUgaGFyZHdhcmUKKwlmbGRfY250ID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBkaXNwX2NudF9yZWcsICZ0bXApOworCisJaWYgKCEoZGVjb2RlciAlIDIpKQkvLyBFVkVOIGRlY29kZXIKKwl7CisJCWZsZF9jbnQgJj0gMHhGRkZGMDAwMDsKKwkJZmxkX2NudCB8PSBkdXJhdGlvbjsKKwl9IGVsc2UgeworCQlmbGRfY250ICY9IDB4MDAwMEZGRkY7CisJCWZsZF9jbnQgfD0gKCh1MzIpIGR1cmF0aW9uKSA8PCAxNjsKKwl9CisKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgZGlzcF9jbnRfcmVnLCBmbGRfY250KTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIE1hcCB0byBNZWR1c2EgcmVnaXN0ZXIgc2V0dGluZworc3RhdGljIGludCBtYXBNKGludCBzcmNNaW4sCisJCWludCBzcmNNYXgsIGludCBzcmNWYWwsIGludCBkc3RNaW4sIGludCBkc3RNYXgsIGludCAqZHN0VmFsKQoreworCWludCBudW1lcmF0b3I7CisJaW50IGRlbm9taW5hdG9yOworCWludCBxdW90aWVudDsKKworCWlmICgoc3JjTWluID09IHNyY01heCkgfHwgKHNyY1ZhbCA8IHNyY01pbikgfHwgKHNyY1ZhbCA+IHNyY01heCkpIHsKKwkJcmV0dXJuIC0xOworCX0KKwkvLyBUaGlzIGlzIHRoZSBvdmVyYWxsIGV4cHJlc3Npb24gdXNlZDoKKwkvLyAqZHN0VmFsID0gKHNyY1ZhbCAtIHNyY01pbikqKGRzdE1heCAtIGRzdE1pbikgLyAoc3JjTWF4IC0gc3JjTWluKSArIGRzdE1pbjsKKwkvLyBidXQgd2UgbmVlZCB0byBhY2NvdW50IGZvciByb3VuZGluZyBzbyBiZWxvdyB3ZSB1c2UgdGhlIG1vZHVsdXMKKwkvLyBvcGVyYXRvciB0byBmaW5kIHRoZSByZW1haW5kZXIgYW5kIGluY3JlbWVudCBpZiBuZWNlc3NhcnkuCisJbnVtZXJhdG9yID0gKHNyY1ZhbCAtIHNyY01pbikgKiAoZHN0TWF4IC0gZHN0TWluKTsKKwlkZW5vbWluYXRvciA9IHNyY01heCAtIHNyY01pbjsKKwlxdW90aWVudCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yOworCisJaWYgKDIgKiAobnVtZXJhdG9yICUgZGVub21pbmF0b3IpID49IGRlbm9taW5hdG9yKSB7CisJCXF1b3RpZW50Kys7CisJfQorCisJKmRzdFZhbCA9IHF1b3RpZW50ICsgZHN0TWluOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnZlcnRfdG9fdHdvcyhsb25nIG51bWVyaWMsIHVuc2lnbmVkIGxvbmcgYml0c19sZW4pCit7CisJdW5zaWduZWQgY2hhciB0ZW1wOworCisJaWYgKG51bWVyaWMgPj0gMCkKKwkJcmV0dXJuIG51bWVyaWM7CisJZWxzZSB7CisJCXRlbXAgPSB+KGFicyhudW1lcmljKSAmIDB4RkYpOworCQl0ZW1wICs9IDE7CisJCXJldHVybiB0ZW1wOworCX0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2ludCBtZWR1c2Ffc2V0X2JyaWdodG5lc3Moc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBicmlnaHRuZXNzLCBpbnQgZGVjb2RlcikKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJaW50IHZhbHVlID0gMDsKKwl1MzIgdmFsID0gMCwgdG1wID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKChicmlnaHRuZXNzID4gVklERU9fUFJPQ0FNUF9NQVgpCisJICAgIHx8IChicmlnaHRuZXNzIDwgVklERU9fUFJPQ0FNUF9NSU4pKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXRfdmFsID0KKwkgICAgbWFwTShWSURFT19QUk9DQU1QX01JTiwgVklERU9fUFJPQ0FNUF9NQVgsIGJyaWdodG5lc3MsCisJCSBTSUdORURfQllURV9NSU4sIFNJR05FRF9CWVRFX01BWCwgJnZhbHVlKTsKKwl2YWx1ZSA9IGNvbnZlcnRfdG9fdHdvcyh2YWx1ZSwgOCk7CisJdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICBWREVDX0FfQlJJVEVfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLCAmdG1wKTsKKwl2YWwgJj0gMHhGRkZGRkYwMDsKKwlyZXRfdmFsIHw9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgICBWREVDX0FfQlJJVEVfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLAorCQkJICAgICAgdmFsIHwgdmFsdWUpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2ludCBtZWR1c2Ffc2V0X2NvbnRyYXN0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY29udHJhc3QsIGludCBkZWNvZGVyKQoreworCWludCByZXRfdmFsID0gMDsKKwlpbnQgdmFsdWUgPSAwOworCXUzMiB2YWwgPSAwLCB0bXAgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKworCWlmICgoY29udHJhc3QgPiBWSURFT19QUk9DQU1QX01BWCkgfHwgKGNvbnRyYXN0IDwgVklERU9fUFJPQ0FNUF9NSU4pKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldF92YWwgPQorCSAgICBtYXBNKFZJREVPX1BST0NBTVBfTUlOLCBWSURFT19QUk9DQU1QX01BWCwgY29udHJhc3QsCisJCSBVTlNJR05FRF9CWVRFX01JTiwgVU5TSUdORURfQllURV9NQVgsICZ2YWx1ZSk7CisJdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICBWREVDX0FfQ05UUlNUX0NUUkwgKyAoMHgyMDAgKiBkZWNvZGVyKSwgJnRtcCk7CisJdmFsICY9IDB4RkZGRkZGMDA7CisJcmV0X3ZhbCB8PQorCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICAgVkRFQ19BX0NOVFJTVF9DVFJMICsgKDB4MjAwICogZGVjb2RlciksCisJCQkgICAgICB2YWwgfCB2YWx1ZSk7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitpbnQgbWVkdXNhX3NldF9odWUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBodWUsIGludCBkZWNvZGVyKQoreworCWludCByZXRfdmFsID0gMDsKKwlpbnQgdmFsdWUgPSAwOworCXUzMiB2YWwgPSAwLCB0bXAgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKworCWlmICgoaHVlID4gVklERU9fUFJPQ0FNUF9NQVgpIHx8IChodWUgPCBWSURFT19QUk9DQU1QX01JTikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0X3ZhbCA9CisJICAgIG1hcE0oVklERU9fUFJPQ0FNUF9NSU4sIFZJREVPX1BST0NBTVBfTUFYLCBodWUsIFNJR05FRF9CWVRFX01JTiwKKwkJIFNJR05FRF9CWVRFX01BWCwgJnZhbHVlKTsKKworCXZhbHVlID0gY29udmVydF90b190d29zKHZhbHVlLCA4KTsKKwl2YWwgPQorCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgIFZERUNfQV9IVUVfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLCAmdG1wKTsKKwl2YWwgJj0gMHhGRkZGRkYwMDsKKworCXJldF92YWwgfD0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgIFZERUNfQV9IVUVfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLCB2YWwgfCB2YWx1ZSk7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitpbnQgbWVkdXNhX3NldF9zYXR1cmF0aW9uKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgc2F0dXJhdGlvbiwgaW50IGRlY29kZXIpCit7CisJaW50IHJldF92YWwgPSAwOworCWludCB2YWx1ZSA9IDA7CisJdTMyIHZhbCA9IDAsIHRtcCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKChzYXR1cmF0aW9uID4gVklERU9fUFJPQ0FNUF9NQVgpCisJICAgIHx8IChzYXR1cmF0aW9uIDwgVklERU9fUFJPQ0FNUF9NSU4pKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldF92YWwgPQorCSAgICBtYXBNKFZJREVPX1BST0NBTVBfTUlOLCBWSURFT19QUk9DQU1QX01BWCwgc2F0dXJhdGlvbiwKKwkJIFVOU0lHTkVEX0JZVEVfTUlOLCBVTlNJR05FRF9CWVRFX01BWCwgJnZhbHVlKTsKKworCXZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgVkRFQ19BX1VTQVRfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLCAmdG1wKTsKKwl2YWwgJj0gMHhGRkZGRkYwMDsKKwlyZXRfdmFsIHw9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgICBWREVDX0FfVVNBVF9DVFJMICsgKDB4MjAwICogZGVjb2RlciksCisJCQkgICAgICB2YWwgfCB2YWx1ZSk7CisKKwl2YWwgPQorCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgIFZERUNfQV9WU0FUX0NUUkwgKyAoMHgyMDAgKiBkZWNvZGVyKSwgJnRtcCk7CisJdmFsICY9IDB4RkZGRkZGMDA7CisJcmV0X3ZhbCB8PQorCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICAgVkRFQ19BX1ZTQVRfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLAorCQkJICAgICAgdmFsIHwgdmFsdWUpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiByZXRfdmFsOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUHJvZ3JhbSB0aGUgZGlzcGxheSBzZXF1ZW5jZSBhbmQgbW9uaXRvciBvdXRwdXQuCisvLworaW50IG1lZHVzYV92aWRlb19pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCXUzMiB2YWx1ZSA9IDAsIHRtcCA9IDA7CisJaW50IHJldF92YWwgPSAwOworCWludCBpID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwlfbnVtX2RlY29kZXJzID0gZGV2LT5fbWF4X251bV9kZWNvZGVyczsKKworCS8vIGRpc2FibGUgQXV0byBzb3VyY2Ugc2VsZWN0aW9uIG9uIGFsbCB2aWRlbyBkZWNvZGVycworCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBNT05fQV9DVFJMLCAmdG1wKTsKKwl2YWx1ZSAmPSAweEZGRkZGMEZGOworCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBNT05fQV9DVFJMLCB2YWx1ZSk7CisKKwlpZiAocmV0X3ZhbCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLy8gVHVybiBvZmYgTWFzdGVyIHNvdXJjZSBzd2l0Y2ggZW5hYmxlCisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIE1PTl9BX0NUUkwsICZ0bXApOworCXZhbHVlICY9IDB4RkZGRkZGREY7CisJcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIE1PTl9BX0NUUkwsIHZhbHVlKTsKKworCWlmIChyZXRfdmFsIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBfbnVtX2RlY29kZXJzOyBpKyspIHsKKwkJbWVkdXNhX3NldF9kZWNvZGVyZHVyYXRpb24oZGV2LCBpLCBfZGlzcGxheV9maWVsZF9jbnRbaV0pOworCX0KKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwkvLyBTZWxlY3QgbW9uaXRvciBhcyBERU5DIEEgaW5wdXQsIHBvd2VyIHVwIHRoZSBEQUMKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgREVOQ19BQl9DVFJMLCAmdG1wKTsKKwl2YWx1ZSAmPSAweEZGNzBGRjcwOworCXZhbHVlIHw9IDB4MDAwOTAwMDg7CS8vIHNldCBlbl9hY3RpdmUKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgREVOQ19BQl9DVFJMLCB2YWx1ZSk7CisKKwlpZiAocmV0X3ZhbCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLy8gZW5hYmxlIGlucHV0IGlzIFZJUC82NTYKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgQllQX0FCX0NUUkwsICZ0bXApOworCXZhbHVlIHw9IDB4MDAwNDAxMDA7CS8vIGVuYWJsZSBWSVAKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQllQX0FCX0NUUkwsIHZhbHVlKTsKKworCWlmIChyZXRfdmFsIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvLyBzZWxlY3QgQUZFIGNsb2NrIHRvIG91dHB1dCBtb2RlCisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIEFGRV9BQl9ESUFHX0NUUkwsICZ0bXApOworCXZhbHVlICY9IDB4ODNGRkZGRkY7CisJcmV0X3ZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIEFGRV9BQl9ESUFHX0NUUkwsCisJCQkgICAgICB2YWx1ZSB8IDB4MTAwMDAwMDApOworCisJaWYgKHJldF92YWwgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vIFR1cm4gb24gYWxsIG9mIHRoZSBkYXRhIG91dCBhbmQgY29udHJvbCBvdXRwdXQgcGlucy4KKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgUElOX09FX0NUUkwsICZ0bXApOworCXZhbHVlICY9IDB4RkVGMEZFMDA7CisJaWYgKF9udW1fZGVjb2RlcnMgPT0gTUFYX0RFQ09ERVJTKSB7CisJCS8vIE5vdGU6IFRoZSBvY3RhbCBib2FyZCBkb2VzIG5vdCBzdXBwb3J0IGNvbnRyb2wgcGlucyhiaXQxNi0xOSkuCisJCS8vIFRoZXNlIGJpdHMgYXJlIGlnbm9yZWQgaW4gdGhlIG9jdGFsIGJvYXJkLgorCQl2YWx1ZSB8PSAweDAxMDAwMUY4OwkvLyBkaXNhYmxlIFZERUMgQS1DIHBvcnQsIGRlZmF1bHQgdG8gTW9iaWx5Z2VuIEludGVyZmFjZQorCX0gZWxzZSB7CisJCXZhbHVlIHw9IDB4MDEwRjAxMDg7CS8vIGRpc2FibGUgVkRFQyBBLUMgcG9ydCwgZGVmYXVsdCB0byBNb2JpbHlnZW4gSW50ZXJmYWNlCisJfQorCisJdmFsdWUgfD0gNzsKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgUElOX09FX0NUUkwsIHZhbHVlKTsKKwlpZiAocmV0X3ZhbCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXRfdmFsID0gbWVkdXNhX3NldF92aWRlb3N0YW5kYXJkKGRldik7CisKKwlpZiAocmV0X3ZhbCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYWI0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX01FRFVTQV9WSURFT19ICisjZGVmaW5lIF9NRURVU0FfVklERU9fSAorCisjaW5jbHVkZSAiY3gyNTgyMS1tZWR1c2EtZGVmaW5lcy5oIgorCisvLyBDb2xvciBjb250cm9sIGNvbnN0YW50cworI2RlZmluZSBWSURFT19QUk9DQU1QX01JTiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBWSURFT19QUk9DQU1QX01BWCAgICAgICAgICAgICAgICAgMTAwMDAKKyNkZWZpbmUgVU5TSUdORURfQllURV9NSU4gICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVU5TSUdORURfQllURV9NQVggICAgICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgU0lHTkVEX0JZVEVfTUlOICAgICAgICAgICAgICAgICAgIC0xMjgKKyNkZWZpbmUgU0lHTkVEX0JZVEVfTUFYICAgICAgICAgICAgICAgICAgIDEyNworCisvLyBEZWZhdWx0IHZpZGVvIGNvbG9yIHNldHRpbmdzCisjZGVmaW5lIFNIQVJQTkVTU19ERUZBVUxUICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBTQVRVUkFUSU9OX0RFRkFVTFQgICAgICAgICAgICAgIDUwMDAKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUZBVUxUICAgICAgICAgICAgICA2MjAwCisjZGVmaW5lIENPTlRSQVNUX0RFRkFVTFQgICAgICAgICAgICAgICAgNTAwMAorI2RlZmluZSBIVUVfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgIDUwMDAKKwordW5zaWduZWQgc2hvcnQgX251bV9kZWNvZGVyczsKK3Vuc2lnbmVkIHNob3J0IF9udW1fY2FtZXJhczsKKwordW5zaWduZWQgaW50IF92aWRlb19zdGFuZGFyZDsKK2ludCBfZGlzcGxheV9maWVsZF9jbnRbTUFYX0RFQ09ERVJTXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXJlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQxZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1yZWcuaApAQCAtMCwwICsxLDE1OTIgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19DWDI1ODIxX1JFR0lTVEVSU19fCisjZGVmaW5lIF9fQ1gyNTgyMV9SRUdJU1RFUlNfXworCisvKiBSaXNjIEluc3RydWN0aW9ucyAqLworI2RlZmluZSBSSVNDX0NOVF9JTkMJIDB4MDAwMTAwMDAKKyNkZWZpbmUgUklTQ19DTlRfUkVTRVQJIDB4MDAwMzAwMDAKKyNkZWZpbmUgUklTQ19JUlExCQkgMHgwMTAwMDAwMAorI2RlZmluZSBSSVNDX0lSUTIJCSAweDAyMDAwMDAwCisjZGVmaW5lIFJJU0NfRU9MCQkgMHgwNDAwMDAwMAorI2RlZmluZSBSSVNDX1NPTAkJIDB4MDgwMDAwMDAKKyNkZWZpbmUgUklTQ19XUklURQkJIDB4MTAwMDAwMDAKKyNkZWZpbmUgUklTQ19TS0lQCQkgMHgyMDAwMDAwMAorI2RlZmluZSBSSVNDX0pVTVAJCSAweDcwMDAwMDAwCisjZGVmaW5lIFJJU0NfU1lOQwkJIDB4ODAwMDAwMDAKKyNkZWZpbmUgUklTQ19SRVNZTkMJCSAweDgwMDA4MDAwCisjZGVmaW5lIFJJU0NfUkVBRAkJIDB4OTAwMDAwMDAKKyNkZWZpbmUgUklTQ19XUklURVJNCSAweEIwMDAwMDAwCisjZGVmaW5lIFJJU0NfV1JJVEVDTQkgMHhDMDAwMDAwMAorI2RlZmluZSBSSVNDX1dSSVRFQ1IJIDB4RDAwMDAwMDAKKyNkZWZpbmUgUklTQ19XUklURUMJCSAweDUwMDAwMDAwCisjZGVmaW5lIFJJU0NfUkVBREMJCSAweEEwMDAwMDAwCisKKyNkZWZpbmUgUklTQ19TWU5DX09ERAkJIDB4MDAwMDAwMDAKKyNkZWZpbmUgUklTQ19TWU5DX0VWRU4JCSAweDAwMDAwMjAwCisjZGVmaW5lIFJJU0NfU1lOQ19PRERfVkJJCSAweDAwMDAwMDA2CisjZGVmaW5lIFJJU0NfU1lOQ19FVkVOX1ZCSQkgMHgwMDAwMDIwNworI2RlZmluZSBSSVNDX05PT1AJCQkgMHhGMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBU0IgU1JBTQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVFhfU1JBTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMAkvLyBUcmFuc21pdCBTUkFNCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJYX1JBTSAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAJLy8gUmVjZWl2ZSBTUkFNCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFwcGxpY2F0aW9uIExheWVyIChBTCkKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERFVl9DTlRSTDIgICAgICAgICAgICAgICAgMHgwNDAwMDAJLy8gRGV2aWNlIGNvbnRyb2wKKyNkZWZpbmUgIEZMRF9SVU5fUklTQyAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBQQ0lfSU5UX01TSyAgICAgICAgICAgICAgIDB4MDQwMDEwCS8vIFBDSSBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgUENJX0lOVF9TVEFUICAgICAgICAgICAgICAweDA0MDAxNAkvLyBQQ0kgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgUENJX0lOVF9NU1RBVCAgICAgICAgICAgICAweDA0MDAxOAkvLyBQQ0kgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIEZMRF9IQU1NRVJIRUFEX0lOVCAgICAgICAgKDEgPDwgMjcpCisjZGVmaW5lICBGTERfVUFSVF9JTlQgICAgICAgICAgICAgICgxIDw8IDI2KQorI2RlZmluZSAgRkxEX0lSUU5fSU5UICAgICAgICAgICAgICAoMSA8PCAyNSkKKyNkZWZpbmUgIEZMRF9UTV9JTlQgICAgICAgICAgICAgICAgKDEgPDwgMjgpCisjZGVmaW5lICBGTERfSTJDXzNfUkFDSyAgICAgICAgICAgICgxIDw8IDI3KQorI2RlZmluZSAgRkxEX0kyQ18zX0lOVCAgICAgICAgICAgICAoMSA8PCAyNikKKyNkZWZpbmUgIEZMRF9JMkNfMl9SQUNLICAgICAgICAgICAgKDEgPDwgMjUpCisjZGVmaW5lICBGTERfSTJDXzJfSU5UICAgICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSAgRkxEX0kyQ18xX1JBQ0sgICAgICAgICAgICAoMSA8PCAyMykKKyNkZWZpbmUgIEZMRF9JMkNfMV9JTlQgICAgICAgICAgICAgKDEgPDwgMjIpCisKKyNkZWZpbmUgIEZMRF9BUEJfRE1BX0JFUlJfSU5UICAgICAgKDEgPDwgMjEpCisjZGVmaW5lICBGTERfQUxfV1JfQkVSUl9JTlQgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSAgRkxEX0FMX1JEX0JFUlJfSU5UICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgIEZMRF9SSVNDX1dSX0JFUlJfSU5UICAgICAgKDEgPDwgMTgpCisjZGVmaW5lICBGTERfUklTQ19SRF9CRVJSX0lOVCAgICAgICgxIDw8IDE3KQorCisjZGVmaW5lICBGTERfVklEX0lfSU5UICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lICBGTERfVklEX0hfSU5UICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lICBGTERfVklEX0dfSU5UICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lICBGTERfVklEX0ZfSU5UICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lICBGTERfVklEX0VfSU5UICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lICBGTERfVklEX0RfSU5UICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lICBGTERfVklEX0NfSU5UICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lICBGTERfVklEX0JfSU5UICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lICBGTERfVklEX0FfSU5UICAgICAgICAgICAgICgxIDw8IDApCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9BX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwMjAJLy8gVmlkZW8gQSBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0FfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDAyNAkvLyBWaWRlbyBBIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9BX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwMjgJLy8gVmlkZW8gQSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0FfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDAyQwkvLyBWaWRlbyBBIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9CX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwMzAJLy8gVmlkZW8gQiBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0JfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDAzNAkvLyBWaWRlbyBCIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9CX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwMzgJLy8gVmlkZW8gQiBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0JfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDAzQwkvLyBWaWRlbyBCIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9DX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwNDAJLy8gVmlkZW8gQyBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0NfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA0NAkvLyBWaWRlbyBDIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9DX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwNDgJLy8gVmlkZW8gQyBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0NfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA0QwkvLyBWaWRlbyBDIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9EX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwNTAJLy8gVmlkZW8gRCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0RfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA1NAkvLyBWaWRlbyBEIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9EX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwNTgJLy8gVmlkZW8gRCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0RfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA1QwkvLyBWaWRlbyBEIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9FX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwNjAJLy8gVmlkZW8gRSBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0VfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA2NAkvLyBWaWRlbyBFIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9FX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwNjgJLy8gVmlkZW8gRSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0VfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA2QwkvLyBWaWRlbyBFIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9GX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwNzAJLy8gVmlkZW8gRiBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0ZfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA3NAkvLyBWaWRlbyBGIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9GX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwNzgJLy8gVmlkZW8gRiBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0ZfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA3QwkvLyBWaWRlbyBGIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9HX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwODAJLy8gVmlkZW8gRyBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0dfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA4NAkvLyBWaWRlbyBHIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9HX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwODgJLy8gVmlkZW8gRyBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0dfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA4QwkvLyBWaWRlbyBHIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9IX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwOTAJLy8gVmlkZW8gSCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0hfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA5NAkvLyBWaWRlbyBIIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9IX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwOTgJLy8gVmlkZW8gSCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0hfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA5QwkvLyBWaWRlbyBIIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9JX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwQTAJLy8gVmlkZW8gSSBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0lfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBBNAkvLyBWaWRlbyBJIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9JX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwQTgJLy8gVmlkZW8gSSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0lfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDBBQwkvLyBWaWRlbyBJIGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9KX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwQjAJLy8gVmlkZW8gSiBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgVklEX0pfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBCNAkvLyBWaWRlbyBKIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIFZJRF9KX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwQjgJLy8gVmlkZW8gSiBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgVklEX0pfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDBCQwkvLyBWaWRlbyBKIGludGVycnVwdCBzZXQgc3RhdHVzCisKKyNkZWZpbmUgIEZMRF9WSURfU1JDX09QQ19FUlIgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSAgRkxEX1ZJRF9EU1RfT1BDX0VSUiAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lICBGTERfVklEX1NSQ19TWU5DICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgIEZMRF9WSURfRFNUX1NZTkMgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSAgRkxEX1ZJRF9TUkNfVUYgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lICBGTERfVklEX0RTVF9PRiAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgIEZMRF9WSURfU1JDX1JJU0MyICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSAgRkxEX1ZJRF9EU1RfUklTQzIgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICBGTERfVklEX1NSQ19SSVNDMSAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgIEZMRF9WSURfRFNUX1JJU0MxICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSAgRkxEX1ZJRF9TUkNfRVJST1JTCQlGTERfVklEX1NSQ19PUENfRVJSIHwgRkxEX1ZJRF9TUkNfU1lOQyB8IEZMRF9WSURfU1JDX1VGCisjZGVmaW5lICBGTERfVklEX0RTVF9FUlJPUlMJCUZMRF9WSURfRFNUX09QQ19FUlIgfCBGTERfVklEX0RTVF9TWU5DIHwgRkxEX1ZJRF9EU1RfT0YKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQVVEX0FfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBDMAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgIEFVRF9BX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwQzQJLy8gQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9BX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwQzgJLy8gQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBBVURfQV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMENDCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfQl9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEQwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgQVVEX0JfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBENAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgQVVEX0JfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBEOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9CX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwREMJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9DX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwRTAJLy8gQXVkaW8gSW50IGludGVycnVwdCBtYXNrCisjZGVmaW5lICBBVURfQ19JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMEU0CS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBBVURfQ19JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMEU4CS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgQVVEX0NfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDBFQwkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQVVEX0RfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBGMAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgIEFVRF9EX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwRjQJLy8gQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9EX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwRjgJLy8gQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBBVURfRF9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMEZDCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfRV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMTAwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgQVVEX0VfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDEwNAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgQVVEX0VfSU5UX01TVEFUICAgICAgICAgICAweDA0MDEwOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9FX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAxMEMJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisKKyNkZWZpbmUgIEZMRF9BVURfU1JDX09QQ19FUlIgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSAgRkxEX0FVRF9EU1RfT1BDX0VSUiAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lICBGTERfQVVEX1NSQ19TWU5DICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgIEZMRF9BVURfRFNUX1NZTkMgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSAgRkxEX0FVRF9TUkNfT0YgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lICBGTERfQVVEX0RTVF9PRiAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgIEZMRF9BVURfU1JDX1JJU0NJMiAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSAgRkxEX0FVRF9EU1RfUklTQ0kyICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICBGTERfQVVEX1NSQ19SSVNDSTEgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgIEZMRF9BVURfRFNUX1JJU0NJMSAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBNQklGX0FfSU5UX01TSyAgICAgICAgICAgICAweDA0MDExMAkvLyBNQklGIEludCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgTUJJRl9BX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAxMTQJLy8gTUJJRiBJbnQgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgTUJJRl9BX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAxMTgJLy8gTUJJRiBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIE1CSUZfQV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMTFDCS8vIE1CSUYgSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIE1CSUZfQl9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMTIwCS8vIE1CSUYgSW50IGludGVycnVwdCBtYXNrCisjZGVmaW5lICBNQklGX0JfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDEyNAkvLyBNQklGIEludCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBNQklGX0JfSU5UX01TVEFUICAgICAgICAgICAweDA0MDEyOAkvLyBNQklGIEludCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgTUJJRl9CX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAxMkMJLy8gTUJJRiBJbnQgaW50ZXJydXB0IHNldCBzdGF0dXMKKworI2RlZmluZSAgRkxEX01CSUZfRFNUX09QQ19FUlIgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSAgRkxEX01CSUZfRFNUX1NZTkMgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSAgRkxEX01CSUZfRFNUX09GICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSAgRkxEX01CSUZfRFNUX1JJU0NJMiAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSAgRkxEX01CSUZfRFNUX1JJU0NJMSAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfRVhUX0lOVF9NU0sgICAgICAgICAgIDB4MDQwMDYwCS8vIEF1ZGlvIEV4dCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgQVVEX0VYVF9JTlRfU1RBVCAgICAgICAgICAweDA0MDA2NAkvLyBBdWRpbyBFeHQgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgQVVEX0VYVF9JTlRfTVNUQVQgICAgICAgICAweDA0MDA2OAkvLyBBdWRpbyBFeHQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9FWFRfSU5UX1NTVEFUICAgICAgICAgMHgwNDAwNkMJLy8gQXVkaW8gRXh0IGludGVycnVwdCBzZXQgc3RhdHVzCisjZGVmaW5lICBGTERfQVVEX0VYVF9PUENfRVJSICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgIEZMRF9BVURfRVhUX1NZTkMgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSAgRkxEX0FVRF9FWFRfT0YgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lICBGTERfQVVEX0VYVF9SSVNDSTIgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgIEZMRF9BVURfRVhUX1JJU0NJMSAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBHUElPX0xPICAgICAgICAgICAgICAgICAgIDB4MTEwMDEwCS8vIExvd2VyICBvZiBHUElPIHBpbnMgWzMxOjBdCisjZGVmaW5lICBHUElPX0hJICAgICAgICAgICAgICAgICAgIDB4MTEwMDE0CS8vIFVwcGVyIFdPUkQgIG9mIEdQSU8gcGlucyBbNDc6MzFdCisKKyNkZWZpbmUgIEdQSU9fTE9fT0UgICAgICAgICAgICAgICAgMHgxMTAwMTgJLy8gTG93ZXIgIG9mIEdQSU8gb3V0cHV0IGVuYWJsZSBbMzE6MF0KKyNkZWZpbmUgIEdQSU9fSElfT0UgICAgICAgICAgICAgICAgMHgxMTAwMUMJLy8gVXBwZXIgd29yZCAgb2YgR1BJTyBvdXRwdXQgZW5hYmxlIFs0NzozMl0KKworI2RlZmluZSAgR1BJT19MT19JTlRfTVNLICAgICAgICAgICAweDExMDAzQwkvLyBHUElPIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBHUElPX0xPX0lOVF9TVEFUICAgICAgICAgIDB4MTEwMDQ0CS8vIEdQSU8gaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgR1BJT19MT19JTlRfTVNUQVQgICAgICAgICAweDExMDA0QwkvLyBHUElPIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBHUElPX0xPX0lTTV9TTlMgICAgICAgICAgIDB4MTEwMDU0CS8vIEdQSU8gaW50ZXJydXB0IHNlbnNpdGl2aXR5CisjZGVmaW5lICBHUElPX0xPX0lTTV9QT0wgICAgICAgICAgIDB4MTEwMDVDCS8vIEdQSU8gaW50ZXJydXB0IHBvbGFyaXR5CisKKyNkZWZpbmUgIEdQSU9fSElfSU5UX01TSyAgICAgICAgICAgMHgxMTAwNDAJLy8gR1BJTyBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgR1BJT19ISV9JTlRfU1RBVCAgICAgICAgICAweDExMDA0OAkvLyBHUElPIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIEdQSU9fSElfSU5UX01TVEFUICAgICAgICAgMHgxMTAwNTAJLy8gR1BJTyBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgR1BJT19ISV9JU01fU05TICAgICAgICAgICAweDExMDA1OAkvLyBHUElPIGludGVycnVwdCBzZW5zaXRpdml0eQorI2RlZmluZSAgR1BJT19ISV9JU01fUE9MICAgICAgICAgICAweDExMDA2MAkvLyBHUElPIGludGVycnVwdCBwb2xhcml0eQorCisjZGVmaW5lICBGTERfR1BJTzQzX0lOVCAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSAgRkxEX0dQSU80Ml9JTlQgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgIEZMRF9HUElPNDFfSU5UICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgIEZMRF9HUElPNDBfSU5UICAgICAgICAgICAgKDEgPDwgOCkKKworI2RlZmluZSAgRkxEX0dQSU85X0lOVCAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSAgRkxEX0dQSU84X0lOVCAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSAgRkxEX0dQSU83X0lOVCAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSAgRkxEX0dQSU82X0lOVCAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSAgRkxEX0dQSU81X0lOVCAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSAgRkxEX0dQSU80X0lOVCAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSAgRkxEX0dQSU8zX0lOVCAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSAgRkxEX0dQSU8yX0lOVCAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSAgRkxEX0dQSU8xX0lOVCAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSAgRkxEX0dQSU8wX0lOVCAgICAgICAgICAgICAoMSA8PCAwKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBUQ19SRVEgICAgICAgICAgICAgICAgICAgIDB4MDQwMDkwCS8vIFJpZGVyIFBDSSBFeHByZXNzIHRyYUZGaWMgY2xhc3MgcmVxdWVzdAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBUQ19SRVFfU0VUICAgICAgICAgICAgICAgIDB4MDQwMDk0CS8vIFJpZGVyIFBDSSBFeHByZXNzIHRyYUZGaWMgY2xhc3MgcmVxdWVzdCBzZXQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gUmlkZXIKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8gUENJIENvbXBhdGlibGUgSGVhZGVyCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHMCAgICAgICAgICAgICAgICAgIDB4MDUwMDAwCisjZGVmaW5lICBSRFJfVkVORE9SX0RFVklDRV9JRF9DRkcgIDB4MDUwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkcxICAgICAgICAgICAgICAgICAgMHgwNTAwMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGRzIgICAgICAgICAgICAgICAgICAweDA1MDAwOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHMyAgICAgICAgICAgICAgICAgIDB4MDUwMDBDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkc0ICAgICAgICAgICAgICAgICAgMHgwNTAwMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGRzUgICAgICAgICAgICAgICAgICAweDA1MDAxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHNiAgICAgICAgICAgICAgICAgIDB4MDUwMDE4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkc3ICAgICAgICAgICAgICAgICAgMHgwNTAwMUMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGRzggICAgICAgICAgICAgICAgICAweDA1MDAyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHOSAgICAgICAgICAgICAgICAgIDB4MDUwMDI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkdBICAgICAgICAgICAgICAgICAgMHgwNTAwMjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGR0IgICAgICAgICAgICAgICAgICAweDA1MDAyQworI2RlZmluZSAgUkRSX1NVU1NZU1RFTV9JRF9DRkcgICAgICAweDA1MDAyQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHQyAgICAgICAgICAgICAgICAgIDB4MDUwMDMwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkdEICAgICAgICAgICAgICAgICAgMHgwNTAwMzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGR0UgICAgICAgICAgICAgICAgICAweDA1MDAzOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHRiAgICAgICAgICAgICAgICAgIDB4MDUwMDNDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFBDSS1FeHByZXNzIENhcGFiaWxpdGllcworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1BFQ0FQICAgICAgICAgICAgICAgICAweDA1MDA0MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUEVERVZDQVAgICAgICAgICAgICAgIDB4MDUwMDQ0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9QRURFVlNDICAgICAgICAgICAgICAgMHgwNTAwNDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1BFTElOS0NBUCAgICAgICAgICAgICAweDA1MDA0QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUEVMSU5LU0MgICAgICAgICAgICAgIDB4MDUwMDUwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9QTUlDQVAgICAgICAgICAgICAgICAgMHgwNTAwODAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1BNQ1NSICAgICAgICAgICAgICAgICAweDA1MDA4NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVlBEQ0FQICAgICAgICAgICAgICAgIDB4MDUwMDkwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WUEREQVRBICAgICAgICAgICAgICAgMHgwNTAwOTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX01TSUNBUCAgICAgICAgICAgICAgICAweDA1MDBBMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTVNJQVJMICAgICAgICAgICAgICAgIDB4MDUwMEE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9NU0lBUlUgICAgICAgICAgICAgICAgMHgwNTAwQTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX01TSURBVEEgICAgICAgICAgICAgICAweDA1MDBBQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBQQ0kgRXhwcmVzcyBFeHRlbmRlZCBDYXBhYmlsaXRpZXMKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BRVJYQ0FQICAgICAgICAgICAgICAgMHgwNTAxMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUlVFU1RBICAgICAgICAgICAgICAweDA1MDEwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQUVSVUVNU0sgICAgICAgICAgICAgIDB4MDUwMTA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BRVJVRVNFViAgICAgICAgICAgICAgMHgwNTAxMEMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUkNFU1RBICAgICAgICAgICAgICAweDA1MDExMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQUVSQ0VNU0sgICAgICAgICAgICAgIDB4MDUwMTE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BRVJDQyAgICAgICAgICAgICAgICAgMHgwNTAxMTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUkhMMCAgICAgICAgICAgICAgICAweDA1MDExQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQUVSSEwxICAgICAgICAgICAgICAgIDB4MDUwMTIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BRVJITDIgICAgICAgICAgICAgICAgMHgwNTAxMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUkhMMyAgICAgICAgICAgICAgICAweDA1MDEyOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNYQ0FQICAgICAgICAgICAgICAgIDB4MDUwMjAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ0NBUDEgICAgICAgICAgICAgICAgMHgwNTAyMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQ0FQMiAgICAgICAgICAgICAgICAweDA1MDIwOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNTQyAgICAgICAgICAgICAgICAgIDB4MDUwMjBDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IwX0NBUCAgICAgICAgICAgICAgMHgwNTAyMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjBfQ1RSTCAgICAgICAgICAgICAweDA1MDIxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSMF9TVEFUICAgICAgICAgICAgIDB4MDUwMjE4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IxX0NBUCAgICAgICAgICAgICAgMHgwNTAyMUMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjFfQ1RSTCAgICAgICAgICAgICAweDA1MDIyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSMV9TVEFUICAgICAgICAgICAgIDB4MDUwMjI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IyX0NBUCAgICAgICAgICAgICAgMHgwNTAyMjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjJfQ1RSTCAgICAgICAgICAgICAweDA1MDIyQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSMl9TVEFUICAgICAgICAgICAgIDB4MDUwMjMwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IzX0NBUCAgICAgICAgICAgICAgMHgwNTAyMzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjNfQ1RSTCAgICAgICAgICAgICAweDA1MDIzOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSM19TVEFUICAgICAgICAgICAgIDB4MDUwMjNDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ0FSQjAgICAgICAgICAgICAgICAgMHgwNTAyNDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQVJCMSAgICAgICAgICAgICAgICAweDA1MDI0NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNBUkIyICAgICAgICAgICAgICAgIDB4MDUwMjQ4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ0FSQjMgICAgICAgICAgICAgICAgMHgwNTAyNEMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQVJCNCAgICAgICAgICAgICAgICAweDA1MDI1MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNBUkI1ICAgICAgICAgICAgICAgIDB4MDUwMjU0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ0FSQjYgICAgICAgICAgICAgICAgMHgwNTAyNTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQVJCNyAgICAgICAgICAgICAgICAweDA1MDI1QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUkRSU1RBVDAgICAgICAgICAgICAgIDB4MDUwMzAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SRFJTVEFUMSAgICAgICAgICAgICAgMHgwNTAzMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JEUkNUTDAgICAgICAgICAgICAgICAweDA1MDMwOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUkRSQ1RMMSAgICAgICAgICAgICAgIDB4MDUwMzBDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFRyYW5zYWN0aW9uIExheWVyIFJlZ2lzdGVycworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1RMU1RBVDAgICAgICAgICAgICAgICAweDA1MDMxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVExTVEFUMSAgICAgICAgICAgICAgIDB4MDUwMzE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9UTENUTDAgICAgICAgICAgICAgICAgMHgwNTAzMTgKKyNkZWZpbmUgIEZMRF9DRkdfVVJfQ1BMX01PREUgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSAgRkxEX0NGR19DT1JSX0VSUl9RVUlURSAgICAweDAwMDAwMDIwCisjZGVmaW5lICBGTERfQ0ZHX1JDQl9DS19FTiAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgIEZMRF9DRkdfQk5EUllfQ0tfRU4gICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSAgRkxEX0NGR19CWVRFX0VOX0NLX0VOICAgICAweDAwMDAwMDA0CisjZGVmaW5lICBGTERfQ0ZHX1JFTEFYX09SREVSX01TSyAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgIEZMRF9DRkdfVEFHX09SREVSX0VOICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVExDVEwxICAgICAgICAgICAgICAgIDB4MDUwMzFDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SRVFSQ0FMICAgICAgICAgICAgICAgMHgwNTAzMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JFUVJDQVUgICAgICAgICAgICAgICAweDA1MDMyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUkVRRVBBICAgICAgICAgICAgICAgIDB4MDUwMzI4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SRVFDVFJMICAgICAgICAgICAgICAgMHgwNTAzMkMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JFUVNUQVQgICAgICAgICAgICAgICAweDA1MDMzMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVExfVEVTVCAgICAgICAgICAgICAgIDB4MDUwMzM0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IwMV9DVEwgICAgICAgICAgICAgMHgwNTAzNDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjIzX0NUTCAgICAgICAgICAgICAweDA1MDM0QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUlhfVkNSMF9GQyAgICAgICAgICAgIDB4MDUwMzUwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SWF9WQ1IxX0ZDICAgICAgICAgICAgMHgwNTAzNTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JYX1ZDUjJfRkMgICAgICAgICAgICAweDA1MDM1OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUlhfVkNSM19GQyAgICAgICAgICAgIDB4MDUwMzVDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIERhdGEgTGluayBMYXllciBSZWdpc3RlcnMKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9ETExTVEFUICAgICAgICAgICAgICAgMHgwNTAzNjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0RMTENUUkwgICAgICAgICAgICAgICAweDA1MDM2NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUkVQTEFZVE8gICAgICAgICAgICAgIDB4MDUwMzY4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BQ0tMQVRUTyAgICAgICAgICAgICAgMHgwNTAzNkMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTUFDIExheWVyIFJlZ2lzdGVycworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX01BQ1NUQVQwICAgICAgICAgICAgICAweDA1MDM4MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTUFDU1RBVDEgICAgICAgICAgICAgIDB4MDUwMzg0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9NQUNDVFJMMCAgICAgICAgICAgICAgMHgwNTAzODgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX01BQ0NUUkwxICAgICAgICAgICAgICAweDA1MDM4QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTUFDQ1RSTDIgICAgICAgICAgICAgIDB4MDUwMzkwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9NQUNfTEJfREFUQSAgICAgICAgICAgMHgwNTAzOTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0wwU19FWElUX0xBVCAgICAgICAgICAweDA1MDM5OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBETUFDCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExX1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDAwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMl9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAwNAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTNfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMDgJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE0X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDBDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNV9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAxMAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCM1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTZfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMTQJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE3X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDE4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOF9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAxQwkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCM4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTlfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMjAJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjOQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDI0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTExX1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwMjgJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMTEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTJfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAyQwkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExM19QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDMwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzEzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE0X1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwMzQJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTVfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAzOAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMxNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNl9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDNDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE3X1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwNDAJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMTcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMThfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA0NAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMxOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDQ4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIwX1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwNEMJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjFfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA1MAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMyMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMl9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDU0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzIyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIzX1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwNTgJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMjMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjRfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA1QwkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDYwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzI1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI2X1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwNjQJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMjYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMV9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA4MAkvLyBETUEgVGFiIFB0ciA6IENoIzEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMl9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA4NAkvLyBETUEgVGFiIFB0ciA6IENoIzIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BM19QVFIyICAgICAgICAgICAgICAgICAweDEwMDA4OAkvLyBETUEgVGFiIFB0ciA6IENoIzMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNF9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA4QwkvLyBETUEgVGFiIFB0ciA6IENoIzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNV9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA5MAkvLyBETUEgVGFiIFB0ciA6IENoIzUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNl9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA5NAkvLyBETUEgVGFiIFB0ciA6IENoIzYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BN19QVFIyICAgICAgICAgICAgICAgICAweDEwMDA5OAkvLyBETUEgVGFiIFB0ciA6IENoIzcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOF9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA5QwkvLyBETUEgVGFiIFB0ciA6IENoIzgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOV9QVFIyICAgICAgICAgICAgICAgICAweDEwMDBBMAkvLyBETUEgVGFiIFB0ciA6IENoIzkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTBfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBBNAkvLyBETUEgVGFiIFB0ciA6IENoIzEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTExX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQTgJLy8gRE1BIFRhYiBQdHIgOiBDaCMxMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMl9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEFDCS8vIERNQSBUYWIgUHRyIDogQ2gjMTIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTNfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBCMAkvLyBETUEgVGFiIFB0ciA6IENoIzEzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE0X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQjQJLy8gRE1BIFRhYiBQdHIgOiBDaCMxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEI4CS8vIERNQSBUYWIgUHRyIDogQ2gjMTUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTZfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBCQwkvLyBETUEgVGFiIFB0ciA6IENoIzE2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE3X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQzAJLy8gRE1BIFRhYiBQdHIgOiBDaCMxNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOF9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEM0CS8vIERNQSBUYWIgUHRyIDogQ2gjMTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTlfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBDOAkvLyBETUEgVGFiIFB0ciA6IENoIzE5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIwX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQ0MJLy8gRE1BIFRhYiBQdHIgOiBDaCMyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEQwCS8vIERNQSBUYWIgUHRyIDogQ2gjMjEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjJfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBENAkvLyBETUEgVGFiIFB0ciA6IENoIzIyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIzX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwRDgJLy8gRE1BIFRhYiBQdHIgOiBDaCMyMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNF9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMERDCS8vIERNQSBUYWIgUHRyIDogQ2gjMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjVfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBFMAkvLyBETUEgVGFiIFB0ciA6IENoIzI1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI2X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwRTQJLy8gRE1BIFRhYiBQdHIgOiBDaCMyNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExX0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTAwCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMl9DTlQxICAgICAgICAgICAgICAgICAweDEwMDEwNAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTNfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMDgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE0X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTBDCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNV9DTlQxICAgICAgICAgICAgICAgICAweDEwMDExMAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCM1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTZfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMTQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE3X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTE4CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOF9DTlQxICAgICAgICAgICAgICAgICAweDEwMDExQwkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCM4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTlfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMjAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjOQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTI0CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTExX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMjgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTJfQ05UMSAgICAgICAgICAgICAgICAweDEwMDEyQwkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExM19DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTMwCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzEzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE0X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMzQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTVfQ05UMSAgICAgICAgICAgICAgICAweDEwMDEzOAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMxNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNl9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTNDCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE3X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNDAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMThfQ05UMSAgICAgICAgICAgICAgICAweDEwMDE0NAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMxOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTQ4CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIwX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNEMJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjFfQ05UMSAgICAgICAgICAgICAgICAweDEwMDE1MAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMyMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMl9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTU0CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIzX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNTgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjRfQ05UMSAgICAgICAgICAgICAgICAweDEwMDE1QwkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTYwCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzI1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI2X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNjQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMV9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE4MAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMl9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE4NAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BM19DTlQyICAgICAgICAgICAgICAgICAweDEwMDE4OAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNF9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE4QwkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNV9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE5MAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNl9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE5NAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BN19DTlQyICAgICAgICAgICAgICAgICAweDEwMDE5OAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOF9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE5QwkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOV9DTlQyICAgICAgICAgICAgICAgICAweDEwMDFBMAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTBfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFBNAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTExX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQTgJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMl9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUFDCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTNfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFCMAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzEzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE0X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQjQJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNV9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUI4CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTZfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFCQwkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzE2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE3X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQzAJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOF9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUM0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTlfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFDOAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzE5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIwX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQ0MJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMV9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUQwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMjEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjJfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFENAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzIyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIzX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxRDgJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMyMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNF9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMURDCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjVfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFFMAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzI1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI2X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxRTQJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMyNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgLy8gSVRHCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBUTV9DTlRfTERXICAgICAgICAgICAgICAgIDB4MTEwMDAwCS8vIFRpbWVyIDogQ291bnRlciBsb3cKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVE1fQ05UX1VXICAgICAgICAgICAgICAgICAweDExMDAwNAkvLyBUaW1lciA6IENvdW50ZXIgaGlnaCB3b3JkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFRNX0xNVF9MRFcgICAgICAgICAgICAgICAgMHgxMTAwMDgJLy8gVGltZXIgOiBMaW1pdCBsb3cKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVE1fTE1UX1VXICAgICAgICAgICAgICAgICAweDExMDAwQwkvLyBUaW1lciA6IExpbWl0IGhpZ2ggd29yZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBHUDBfSU8gICAgICAgICAgICAgICAgICAgIDB4MTEwMDEwCS8vIEdQSU8gb3V0cHV0IGVuYWJsZXMgZGF0YSBJL08KKyNkZWZpbmUgIEZMRF9HUF9PRSAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAkvLyBHUElPOiBHUF9PRSBvdXRwdXQgZW5hYmxlCisjZGVmaW5lICBGTERfR1BfSU4gICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAJLy8gR1BJTzogR1BfSU4gc3RhdHVzCisjZGVmaW5lICBGTERfR1BfT1VUICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYJLy8gR1BJTzogR1BfT1VUIGNvbnRyb2wKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgR1BJT19JU00gICAgICAgICAgICAgICAgICAweDExMDAxNAkvLyBHUElPIGludGVycnVwdCBzZW5zaXRpdml0eSBtb2RlCisjZGVmaW5lICBGTERfR1BfSVNNX1NOUyAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgIEZMRF9HUF9JU01fUE9MICAgICAgICAgICAgMHgwMDAwMDAwNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBTT0ZUX1JFU0VUICAgICAgICAgICAgICAgIDB4MTEwMDFDCS8vIE91dHB1dCBzeXN0ZW0gcmVzZXQgcmVnCisjZGVmaW5lICBGTERfUEVDT1NfU09GVF9SRVNFVCAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgTUM0MTZfUldEICAgICAgICAgICAgICAgICAweDExMDAyMAkvLyBNQzQxNiBHUElPWzE4OjNdIHBpbgorI2RlZmluZSAgTUM0MTZfT0VOICAgICAgICAgICAgICAgICAweDExMDAyNAkvLyBPdXRwdXQgZW5hYmxlIG9mIEdQSU9bMTg6M10KKyNkZWZpbmUgIE1DNDE2X0NUTCAgICAgICAgICAgICAgICAgMHgxMTAwMjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQUxUX1BJTl9PVVRfU0VMICAgICAgICAgICAweDExMDAyQwkvLyBBbHRlcm5hdGUgR1BJTyBvdXRwdXQgc2VsZWN0CisKKyNkZWZpbmUgIEZMRF9BTFRfR1BJT19PVVRfU0VMICAgICAgMHhGMDAwMDAwMAorLy8gMCAgICAgICAgICBEaXNhYmxlZCA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBHUElPWzBdCisvLyAyICAgICAgICAgIEdQSU9bMTBdCisvLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKKy8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCisvLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCisvLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KKy8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorLy8gOCAgICAgICAgICBBVFRfSUYKKworI2RlZmluZSAgRkxEX0FVWF9QTExfQ0xLX0FMVF9TRUwgICAweDBGMDAwMDAwCisvLyAwICAgICAgICAgIEFVWF9QTExfQ0xLPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgR1BJT1syXQorLy8gMiAgICAgICAgICBHUElPWzEwXQorLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCisvLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQorLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSworLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCisvLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKworI2RlZmluZSAgRkxEX0lSX1RYX0FMVF9TRUwgICAgICAgICAweDAwRjAwMDAwCisvLyAwICAgICAgICAgIElSX1RYIDwtLSBkZWZhdWx0CisvLyAxICAgICAgICAgIEdQSU9bMV0KKy8vIDIgICAgICAgICAgR1BJT1sxMF0KKy8vIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTAorLy8gNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0KKy8vIDUgICAgICAgICAgVklQXzY1Nl9DTEsKKy8vIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXQorLy8gNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdCisKKyNkZWZpbmUgIEZMRF9JUl9SWF9BTFRfU0VMICAgICAgICAgMHgwMDBGMDAwMAorLy8gMCAgICAgICAgICBJUl9SWCA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBHUElPWzBdCisvLyAyICAgICAgICAgIEdQSU9bMTBdCisvLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKKy8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCisvLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCisvLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KKy8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorCisjZGVmaW5lICBGTERfR1BJTzEwX0FMVF9TRUwgICAgICAgIDB4MDAwMEYwMDAKKy8vIDAgICAgICAgICAgR1BJT1sxMF0gPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgR1BJT1swXQorLy8gMiAgICAgICAgICBHUElPWzEwXQorLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCisvLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQorLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSworLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCisvLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKworI2RlZmluZSAgRkxEX0dQSU8yX0FMVF9TRUwgICAgICAgICAweDAwMDAwRjAwCisvLyAwICAgICAgICAgIEdQSU9bMl0gPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgR1BJT1sxXQorLy8gMiAgICAgICAgICBHUElPWzEwXQorLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCisvLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQorLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSworLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCisvLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKworI2RlZmluZSAgRkxEX0dQSU8xX0FMVF9TRUwgICAgICAgICAweDAwMDAwMEYwCisvLyAwICAgICAgICAgIEdQSU9bMV0gPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgR1BJT1swXQorLy8gMiAgICAgICAgICBHUElPWzEwXQorLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCisvLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQorLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSworLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCisvLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKworI2RlZmluZSAgRkxEX0dQSU8wX0FMVF9TRUwgICAgICAgICAweDAwMDAwMDBGCisvLyAwICAgICAgICAgIEdQSU9bMF0gPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgR1BJT1sxXQorLy8gMiAgICAgICAgICBHUElPWzEwXQorLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCisvLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQorLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSworLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCisvLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKworI2RlZmluZSAgQUxUX1BJTl9JTl9TRUwgICAgICAgICAgICAweDExMDAzMAkvLyBBbHRlcm5hdGUgR1BJTyBpbnB1dCBzZWxlY3QKKworI2RlZmluZSAgRkxEX0dQSU8xMF9BTFRfSU5fU0VMICAgICAweDAwMDBGMDAwCisvLyAwICAgICAgICAgIEdQSU9bMTBdIDwtLSBkZWZhdWx0CisvLyAxICAgICAgICAgIElSX1JYCisvLyAyICAgICAgICAgIElSX1RYCisvLyAzICAgICAgICAgIEFVWF9QTExfQ0xLCisvLyA0ICAgICAgICAgIElGX0FUVF9TRUwKKy8vIDUgICAgICAgICAgR1BJT1swXQorLy8gNiAgICAgICAgICBHUElPWzFdCisvLyA3ICAgICAgICAgIEdQSU9bMl0KKworI2RlZmluZSAgRkxEX0dQSU8yX0FMVF9JTl9TRUwgICAgICAweDAwMDAwRjAwCisvLyAwICAgICAgICAgIEdQSU9bMl0gPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgSVJfUlgKKy8vIDIgICAgICAgICAgSVJfVFgKKy8vIDMgICAgICAgICAgQVVYX1BMTF9DTEsKKy8vIDQgICAgICAgICAgSUZfQVRUX1NFTAorCisjZGVmaW5lICBGTERfR1BJTzFfQUxUX0lOX1NFTCAgICAgIDB4MDAwMDAwRjAKKy8vIDAgICAgICAgICAgR1BJT1sxXSA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBJUl9SWAorLy8gMiAgICAgICAgICBJUl9UWAorLy8gMyAgICAgICAgICBBVVhfUExMX0NMSworLy8gNCAgICAgICAgICBJRl9BVFRfU0VMCisKKyNkZWZpbmUgIEZMRF9HUElPMF9BTFRfSU5fU0VMICAgICAgMHgwMDAwMDAwRgorLy8gMCAgICAgICAgICBHUElPWzBdIDwtLSBkZWZhdWx0CisvLyAxICAgICAgICAgIElSX1JYCisvLyAyICAgICAgICAgIElSX1RYCisvLyAzICAgICAgICAgIEFVWF9QTExfQ0xLCisvLyA0ICAgICAgICAgIElGX0FUVF9TRUwKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVEVTVF9CVVNfQ1RMMSAgICAgICAgICAgICAweDExMDA0MAkvLyBUZXN0IGJ1cyBjb250cm9sIHJlZ2lzdGVyICMxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFRFU1RfQlVTX0NUTDIgICAgICAgICAgICAgMHgxMTAwNDQJLy8gVGVzdCBidXMgY29udHJvbCByZWdpc3RlciAjMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBDTEtfREVMQVkgICAgICAgICAgICAgICAgIDB4MTEwMDQ4CS8vIENsb2NrIGRlbGF5CisjZGVmaW5lICBGTERfTU9FX0NMS19ESVMgICAgICAgICAgIDB4ODAwMDAwMDAJLy8gRGlzYWJsZSBNb0UgY2xvY2sKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUEFEX0NUUkwgICAgICAgICAgICAgICAgICAweDExMDA2OAkvLyBQYWQgZHJpdmUgc3RyZW5ndGggY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBNQklTVF9DVFJMICAgICAgICAgICAgICAgIDB4MTEwMDUwCS8vIFNSQU0gbWVtb3J5IGJ1aWx0LWluIHNlbGYgdGVzdCBjb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIE1CSVNUX1NUQVQgICAgICAgICAgICAgICAgMHgxMTAwNTQJLy8gU1JBTSBtZW1vcnkgYnVpbHQtaW4gc2VsZiB0ZXN0IHN0YXR1cworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBQTEwgcmVnaXN0ZXJzCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBQTExfQV9JTlRfRlJBQyAgICAgICAgICAgIDB4MTEwMDg4CisjZGVmaW5lICBQTExfQV9QT1NUX1NUQVRfQklTVCAgICAgIDB4MTEwMDhDCisjZGVmaW5lICBQTExfQl9JTlRfRlJBQyAgICAgICAgICAgIDB4MTEwMDkwCisjZGVmaW5lICBQTExfQl9QT1NUX1NUQVRfQklTVCAgICAgIDB4MTEwMDk0CisjZGVmaW5lICBQTExfQ19JTlRfRlJBQyAgICAgICAgICAgIDB4MTEwMDk4CisjZGVmaW5lICBQTExfQ19QT1NUX1NUQVRfQklTVCAgICAgIDB4MTEwMDlDCisjZGVmaW5lICBQTExfRF9JTlRfRlJBQyAgICAgICAgICAgIDB4MTEwMEEwCisjZGVmaW5lICBQTExfRF9QT1NUX1NUQVRfQklTVCAgICAgIDB4MTEwMEE0CisKKyNkZWZpbmUgIENMS19SU1QgICAgICAgICAgICAgICAgICAgMHgxMTAwMkMKKyNkZWZpbmUgIEZMRF9WSURfSV9DTEtfTk9FICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSAgRkxEX1ZJRF9KX0NMS19OT0UgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lICBGTERfVVNFX0FMVF9QTExfUkVGICAgICAgIDB4MDAwMDQwMDAKKworI2RlZmluZSAgVklEX0NIX01PREVfU0VMICAgICAgICAgICAweDExMDA3OAorI2RlZmluZSAgVklEX0NIX0NMS19TRUwgICAgICAgICAgICAweDExMDA3QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWQklfQV9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMDA4CS8vIFZCSSBBIERNQSBkYXRhIHBvcnQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0FfVklQX0NUTCAgICAgICAgICAgICAweDEzMDA4MAkvLyBWaWRlbyBBIFZJUCBmb3JtYXQgY29udHJvbAorI2RlZmluZSAgRkxEX1ZJUF9NT0RFICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9BX1BJWEVMX0ZSTVQgICAgICAgICAgMHgxMzAwODQJLy8gVmlkZW8gQSBwaXhlbCBmb3JtYXQKKyNkZWZpbmUgIEZMRF9WSURfQV9HQU1NQV9ESVMgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSAgRkxEX1ZJRF9BX0ZPUk1BVCAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lICBGTERfVklEX0FfR0FNTUFfRkFDVE9SICAgIDB4MDAwMDAwMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0FfVkJJX0NUTCAgICAgICAgICAgICAweDEzMDA4OAkvLyBWaWRlbyBBIFZCSSBtaXNjZWxsYW5lb3VzIGNvbnRyb2wKKyNkZWZpbmUgIEZMRF9WSURfQV9WSVBfRVhUICAgICAgICAgMHgwMDAwMDAwMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQl9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMTAwCS8vIFZpZGVvIEIgRE1BIGRhdGEgcG9ydAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWQklfQl9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMTA4CS8vIFZCSSBCIERNQSBkYXRhIHBvcnQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0JfU1JDX1NFTCAgICAgICAgICAgICAweDEzMDE0NAkvLyBWaWRlbyBCIHNvdXJjZSBzZWxlY3QKKyNkZWZpbmUgIEZMRF9WSURfQl9TUkNfU0VMICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQl9MTkdUSCAgICAgICAgICAgICAgIDB4MTMwMTUwCS8vIFZpZGVvIEIgbGluZSBsZW5ndGgKKyNkZWZpbmUgIEZMRF9WSURfQl9MTl9MTkdUSCAgICAgICAgMHgwMDAwMEZGRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQl9WSVBfQ1RMICAgICAgICAgICAgIDB4MTMwMTgwCS8vIFZpZGVvIEIgVklQIGZvcm1hdCBjb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9CX1BJWEVMX0ZSTVQgICAgICAgICAgMHgxMzAxODQJLy8gVmlkZW8gQiBwaXhlbCBmb3JtYXQKKyNkZWZpbmUgIEZMRF9WSURfQl9HQU1NQV9ESVMgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSAgRkxEX1ZJRF9CX0ZPUk1BVCAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lICBGTERfVklEX0JfR0FNTUFfRkFDVE9SICAgIDB4MDAwMDAwMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0NfRE1BICAgICAgICAgICAgICAgICAweDEzMDIwMAkvLyBWaWRlbyBDIERNQSBkYXRhIHBvcnQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0NfTE5HVEggICAgICAgICAgICAgICAweDEzMDI1MAkvLyBWaWRlbyBDIGxpbmUgbGVuZ3RoCisjZGVmaW5lICBGTERfVklEX0NfTE5fTE5HVEggICAgICAgIDB4MDAwMDBGRkYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVmlkZW8gRGVzdGluYXRpb24gQ2hhbm5lbHMKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgVklEX0RTVF9BX0dQQ05UICAgICAgICAgICAweDEzMDAyMAkvLyBWaWRlbyBBIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfRFNUX0JfR1BDTlQgICAgICAgICAgIDB4MTMwMTIwCS8vIFZpZGVvIEIgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9EU1RfQ19HUENOVCAgICAgICAgICAgMHgxMzAyMjAJLy8gVmlkZW8gQyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX0RTVF9EX0dQQ05UICAgICAgICAgICAweDEzMDMyMAkvLyBWaWRlbyBEIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfRFNUX0VfR1BDTlQgICAgICAgICAgIDB4MTMwNDIwCS8vIFZpZGVvIEUgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9EU1RfRl9HUENOVCAgICAgICAgICAgMHgxMzA1MjAJLy8gVmlkZW8gRiBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX0RTVF9HX0dQQ05UICAgICAgICAgICAweDEzMDYyMAkvLyBWaWRlbyBHIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfRFNUX0hfR1BDTlQgICAgICAgICAgIDB4MTMwNzIwCS8vIFZpZGVvIEggZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfRFNUX0FfR1BDTlRfQ1RMICAgICAgIDB4MTMwMDMwCS8vIFZpZGVvIEEgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfQl9HUENOVF9DVEwgICAgICAgMHgxMzAxMzAJLy8gVmlkZW8gQiBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9DX0dQQ05UX0NUTCAgICAgICAweDEzMDIzMAkvLyBWaWRlbyBDIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0RfR1BDTlRfQ1RMICAgICAgIDB4MTMwMzMwCS8vIFZpZGVvIEQgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfRV9HUENOVF9DVEwgICAgICAgMHgxMzA0MzAJLy8gVmlkZW8gRSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9GX0dQQ05UX0NUTCAgICAgICAweDEzMDUzMAkvLyBWaWRlbyBGIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0dfR1BDTlRfQ1RMICAgICAgIDB4MTMwNjMwCS8vIFZpZGVvIEcgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfSF9HUENOVF9DVEwgICAgICAgMHgxMzA3MzAJLy8gVmlkZW8gSCBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9EU1RfQV9ETUFfQ1RMICAgICAgICAgMHgxMzAwNDAJLy8gVmlkZW8gQSBETUEgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9CX0RNQV9DVEwgICAgICAgICAweDEzMDE0MAkvLyBWaWRlbyBCIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0NfRE1BX0NUTCAgICAgICAgIDB4MTMwMjQwCS8vIFZpZGVvIEMgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfRF9ETUFfQ1RMICAgICAgICAgMHgxMzAzNDAJLy8gVmlkZW8gRCBETUEgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9FX0RNQV9DVEwgICAgICAgICAweDEzMDQ0MAkvLyBWaWRlbyBFIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0ZfRE1BX0NUTCAgICAgICAgIDB4MTMwNTQwCS8vIFZpZGVvIEYgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfR19ETUFfQ1RMICAgICAgICAgMHgxMzA2NDAJLy8gVmlkZW8gRyBETUEgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9IX0RNQV9DVEwgICAgICAgICAweDEzMDc0MAkvLyBWaWRlbyBIIERNQSBjb250cm9sCisKKyNkZWZpbmUgIEZMRF9WSURfUklTQ19FTiAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSAgRkxEX1ZJRF9GSUZPX0VOICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgVklEX0RTVF9BX1ZJUF9DVEwgICAgICAgICAweDEzMDA4MAkvLyBWaWRlbyBBIFZJUCBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0JfVklQX0NUTCAgICAgICAgIDB4MTMwMTgwCS8vIFZpZGVvIEIgVklQIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfQ19WSVBfQ1RMICAgICAgICAgMHgxMzAyODAJLy8gVmlkZW8gQyBWSVAgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9EX1ZJUF9DVEwgICAgICAgICAweDEzMDM4MAkvLyBWaWRlbyBEIFZJUCBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0VfVklQX0NUTCAgICAgICAgIDB4MTMwNDgwCS8vIFZpZGVvIEUgVklQIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfRl9WSVBfQ1RMICAgICAgICAgMHgxMzA1ODAJLy8gVmlkZW8gRiBWSVAgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9HX1ZJUF9DVEwgICAgICAgICAweDEzMDY4MAkvLyBWaWRlbyBHIFZJUCBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0hfVklQX0NUTCAgICAgICAgIDB4MTMwNzgwCS8vIFZpZGVvIEggVklQIGNvbnRyb2wKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfRFNUX0FfUElYX0ZSTVQgICAgICAgIDB4MTMwMDg0CS8vIFZpZGVvIEEgUGl4ZWwgZm9ybWF0CisjZGVmaW5lICBWSURfRFNUX0JfUElYX0ZSTVQgICAgICAgIDB4MTMwMTg0CS8vIFZpZGVvIEIgUGl4ZWwgZm9ybWF0CisjZGVmaW5lICBWSURfRFNUX0NfUElYX0ZSTVQgICAgICAgIDB4MTMwMjg0CS8vIFZpZGVvIEMgUGl4ZWwgZm9ybWF0CisjZGVmaW5lICBWSURfRFNUX0RfUElYX0ZSTVQgICAgICAgIDB4MTMwMzg0CS8vIFZpZGVvIEQgUGl4ZWwgZm9ybWF0CisjZGVmaW5lICBWSURfRFNUX0VfUElYX0ZSTVQgICAgICAgIDB4MTMwNDg0CS8vIFZpZGVvIEUgUGl4ZWwgZm9ybWF0CisjZGVmaW5lICBWSURfRFNUX0ZfUElYX0ZSTVQgICAgICAgIDB4MTMwNTg0CS8vIFZpZGVvIEYgUGl4ZWwgZm9ybWF0CisjZGVmaW5lICBWSURfRFNUX0dfUElYX0ZSTVQgICAgICAgIDB4MTMwNjg0CS8vIFZpZGVvIEcgUGl4ZWwgZm9ybWF0CisjZGVmaW5lICBWSURfRFNUX0hfUElYX0ZSTVQgICAgICAgIDB4MTMwNzg0CS8vIFZpZGVvIEggUGl4ZWwgZm9ybWF0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFZpZGVvIFNvdXJjZSBDaGFubmVscworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfU1JDX0FfR1BDTlRfQ1RMICAgICAgIDB4MTMwODA0CS8vIFZpZGVvIEEgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfQl9HUENOVF9DVEwgICAgICAgMHgxMzA5MDQJLy8gVmlkZW8gQiBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19DX0dQQ05UX0NUTCAgICAgICAweDEzMEEwNAkvLyBWaWRlbyBDIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0RfR1BDTlRfQ1RMICAgICAgIDB4MTMwQjA0CS8vIFZpZGVvIEQgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfRV9HUENOVF9DVEwgICAgICAgMHgxMzBDMDQJLy8gVmlkZW8gRSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19GX0dQQ05UX0NUTCAgICAgICAweDEzMEQwNAkvLyBWaWRlbyBGIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0lfR1BDTlRfQ1RMICAgICAgIDB4MTMwRTA0CS8vIFZpZGVvIEkgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfSl9HUENOVF9DVEwgICAgICAgMHgxMzBGMDQJLy8gVmlkZW8gSiBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9TUkNfQV9HUENOVCAgICAgICAgICAgMHgxMzA4MDgJLy8gVmlkZW8gQSBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX1NSQ19CX0dQQ05UICAgICAgICAgICAweDEzMDkwOAkvLyBWaWRlbyBCIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfU1JDX0NfR1BDTlQgICAgICAgICAgIDB4MTMwQTA4CS8vIFZpZGVvIEMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9TUkNfRF9HUENOVCAgICAgICAgICAgMHgxMzBCMDgJLy8gVmlkZW8gRCBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX1NSQ19FX0dQQ05UICAgICAgICAgICAweDEzMEMwOAkvLyBWaWRlbyBFIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfU1JDX0ZfR1BDTlQgICAgICAgICAgIDB4MTMwRDA4CS8vIFZpZGVvIEYgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9TUkNfSV9HUENOVCAgICAgICAgICAgMHgxMzBFMDgJLy8gVmlkZW8gSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX1NSQ19KX0dQQ05UICAgICAgICAgICAweDEzMEYwOAkvLyBWaWRlbyBKIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgVklEX1NSQ19BX0RNQV9DVEwgICAgICAgICAweDEzMDgwQwkvLyBWaWRlbyBBIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0JfRE1BX0NUTCAgICAgICAgIDB4MTMwOTBDCS8vIFZpZGVvIEIgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfQ19ETUFfQ1RMICAgICAgICAgMHgxMzBBMEMJLy8gVmlkZW8gQyBETUEgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19EX0RNQV9DVEwgICAgICAgICAweDEzMEIwQwkvLyBWaWRlbyBEIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0VfRE1BX0NUTCAgICAgICAgIDB4MTMwQzBDCS8vIFZpZGVvIEUgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfRl9ETUFfQ1RMICAgICAgICAgMHgxMzBEMEMJLy8gVmlkZW8gRiBETUEgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19JX0RNQV9DVEwgICAgICAgICAweDEzMEUwQwkvLyBWaWRlbyBJIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0pfRE1BX0NUTCAgICAgICAgIDB4MTMwRjBDCS8vIFZpZGVvIEogRE1BIGNvbnRyb2wKKworI2RlZmluZSAgRkxEX0FQQl9SSVNDX0VOICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICBGTERfQVBCX0ZJRk9fRU4gICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfU1JDX0FfRk1UX0NUTCAgICAgICAgIDB4MTMwODEwCS8vIFZpZGVvIEEgZm9ybWF0IGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfQl9GTVRfQ1RMICAgICAgICAgMHgxMzA5MTAJLy8gVmlkZW8gQiBmb3JtYXQgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19DX0ZNVF9DVEwgICAgICAgICAweDEzMEExMAkvLyBWaWRlbyBDIGZvcm1hdCBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0RfRk1UX0NUTCAgICAgICAgIDB4MTMwQjEwCS8vIFZpZGVvIEQgZm9ybWF0IGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfRV9GTVRfQ1RMICAgICAgICAgMHgxMzBDMTAJLy8gVmlkZW8gRSBmb3JtYXQgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19GX0ZNVF9DVEwgICAgICAgICAweDEzMEQxMAkvLyBWaWRlbyBGIGZvcm1hdCBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0lfRk1UX0NUTCAgICAgICAgIDB4MTMwRTEwCS8vIFZpZGVvIEkgZm9ybWF0IGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfSl9GTVRfQ1RMICAgICAgICAgMHgxMzBGMTAJLy8gVmlkZW8gSiBmb3JtYXQgY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9TUkNfQV9BQ1RJVkVfQ1RMMSAgICAgMHgxMzA4MTQJLy8gVmlkZW8gQSBhY3RpdmUgY29udHJvbCAgICAgIDEKKyNkZWZpbmUgIFZJRF9TUkNfQl9BQ1RJVkVfQ1RMMSAgICAgMHgxMzA5MTQJLy8gVmlkZW8gQiBhY3RpdmUgY29udHJvbCAgICAgIDEKKyNkZWZpbmUgIFZJRF9TUkNfQ19BQ1RJVkVfQ1RMMSAgICAgMHgxMzBBMTQJLy8gVmlkZW8gQyBhY3RpdmUgY29udHJvbCAgICAgIDEKKyNkZWZpbmUgIFZJRF9TUkNfRF9BQ1RJVkVfQ1RMMSAgICAgMHgxMzBCMTQJLy8gVmlkZW8gRCBhY3RpdmUgY29udHJvbCAgICAgIDEKKyNkZWZpbmUgIFZJRF9TUkNfRV9BQ1RJVkVfQ1RMMSAgICAgMHgxMzBDMTQJLy8gVmlkZW8gRSBhY3RpdmUgY29udHJvbCAgICAgIDEKKyNkZWZpbmUgIFZJRF9TUkNfRl9BQ1RJVkVfQ1RMMSAgICAgMHgxMzBEMTQJLy8gVmlkZW8gRiBhY3RpdmUgY29udHJvbCAgICAgIDEKKyNkZWZpbmUgIFZJRF9TUkNfSV9BQ1RJVkVfQ1RMMSAgICAgMHgxMzBFMTQJLy8gVmlkZW8gSSBhY3RpdmUgY29udHJvbCAgICAgIDEKKyNkZWZpbmUgIFZJRF9TUkNfSl9BQ1RJVkVfQ1RMMSAgICAgMHgxMzBGMTQJLy8gVmlkZW8gSiBhY3RpdmUgY29udHJvbCAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfU1JDX0FfQUNUSVZFX0NUTDIgICAgIDB4MTMwODE4CS8vIFZpZGVvIEEgYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0JfQUNUSVZFX0NUTDIgICAgIDB4MTMwOTE4CS8vIFZpZGVvIEIgYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0NfQUNUSVZFX0NUTDIgICAgIDB4MTMwQTE4CS8vIFZpZGVvIEMgYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0RfQUNUSVZFX0NUTDIgICAgIDB4MTMwQjE4CS8vIFZpZGVvIEQgYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0VfQUNUSVZFX0NUTDIgICAgIDB4MTMwQzE4CS8vIFZpZGVvIEUgYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0ZfQUNUSVZFX0NUTDIgICAgIDB4MTMwRDE4CS8vIFZpZGVvIEYgYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0lfQUNUSVZFX0NUTDIgICAgIDB4MTMwRTE4CS8vIFZpZGVvIEkgYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0pfQUNUSVZFX0NUTDIgICAgIDB4MTMwRjE4CS8vIFZpZGVvIEogYWN0aXZlIGNvbnRyb2wgICAgICAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgVklEX1NSQ19BX0NEVF9TWiAgICAgICAgICAweDEzMDgxQwkvLyBWaWRlbyBBIENEVCBzaXplCisjZGVmaW5lICBWSURfU1JDX0JfQ0RUX1NaICAgICAgICAgIDB4MTMwOTFDCS8vIFZpZGVvIEIgQ0RUIHNpemUKKyNkZWZpbmUgIFZJRF9TUkNfQ19DRFRfU1ogICAgICAgICAgMHgxMzBBMUMJLy8gVmlkZW8gQyBDRFQgc2l6ZQorI2RlZmluZSAgVklEX1NSQ19EX0NEVF9TWiAgICAgICAgICAweDEzMEIxQwkvLyBWaWRlbyBEIENEVCBzaXplCisjZGVmaW5lICBWSURfU1JDX0VfQ0RUX1NaICAgICAgICAgIDB4MTMwQzFDCS8vIFZpZGVvIEUgQ0RUIHNpemUKKyNkZWZpbmUgIFZJRF9TUkNfRl9DRFRfU1ogICAgICAgICAgMHgxMzBEMUMJLy8gVmlkZW8gRiBDRFQgc2l6ZQorI2RlZmluZSAgVklEX1NSQ19JX0NEVF9TWiAgICAgICAgICAweDEzMEUxQwkvLyBWaWRlbyBJIENEVCBzaXplCisjZGVmaW5lICBWSURfU1JDX0pfQ0RUX1NaICAgICAgICAgIDB4MTMwRjFDCS8vIFZpZGVvIEogQ0RUIHNpemUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQXVkaW8gSS9GCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfRFNUX0FfRE1BICAgICAgICAgICAgIDB4MTQwMDAwCS8vIEF1ZGlvIEludCBBIERNQSBkYXRhIHBvcnQKKyNkZWZpbmUgIEFVRF9TUkNfQV9ETUEgICAgICAgICAgICAgMHgxNDAwMDgJLy8gQXVkaW8gSW50IEEgRE1BIGRhdGEgcG9ydAorCisjZGVmaW5lICBBVURfQV9HUENOVCAgICAgICAgICAgICAgIDB4MTQwMDEwCS8vIEF1ZGlvIEludCBBIGdwIGNvdW50ZXIKKyNkZWZpbmUgIEZMRF9BVURfQV9HUF9DTlQgICAgICAgICAgMHgwMDAwRkZGRgorCisjZGVmaW5lICBBVURfQV9HUENOVF9DVEwgICAgICAgICAgIDB4MTQwMDE0CS8vIEF1ZGlvIEludCBBIGdwIGNvbnRyb2wKKworI2RlZmluZSAgQVVEX0FfTE5HVEggICAgICAgICAgICAgICAweDE0MDAxOAkvLyBBdWRpbyBJbnQgQSBsaW5lIGxlbmd0aAorCisjZGVmaW5lICBBVURfQV9DRkcgICAgICAgICAgICAgICAgIDB4MTQwMDFDCS8vIEF1ZGlvIEludCBBIGNvbmZpZ3VyYXRpb24KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQVVEX0RTVF9CX0RNQSAgICAgICAgICAgICAweDE0MDEwMAkvLyBBdWRpbyBJbnQgQiBETUEgZGF0YSBwb3J0CisjZGVmaW5lICBBVURfU1JDX0JfRE1BICAgICAgICAgICAgIDB4MTQwMTA4CS8vIEF1ZGlvIEludCBCIERNQSBkYXRhIHBvcnQKKworI2RlZmluZSAgQVVEX0JfR1BDTlQgICAgICAgICAgICAgICAweDE0MDExMAkvLyBBdWRpbyBJbnQgQiBncCBjb3VudGVyCisjZGVmaW5lICBGTERfQVVEX0JfR1BfQ05UICAgICAgICAgIDB4MDAwMEZGRkYKKworI2RlZmluZSAgQVVEX0JfR1BDTlRfQ1RMICAgICAgICAgICAweDE0MDExNAkvLyBBdWRpbyBJbnQgQiBncCBjb250cm9sCisKKyNkZWZpbmUgIEFVRF9CX0xOR1RIICAgICAgICAgICAgICAgMHgxNDAxMTgJLy8gQXVkaW8gSW50IEIgbGluZSBsZW5ndGgKKworI2RlZmluZSAgQVVEX0JfQ0ZHICAgICAgICAgICAgICAgICAweDE0MDExQwkvLyBBdWRpbyBJbnQgQiBjb25maWd1cmF0aW9uCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9EU1RfQ19ETUEgICAgICAgICAgICAgMHgxNDAyMDAJLy8gQXVkaW8gSW50IEMgRE1BIGRhdGEgcG9ydAorI2RlZmluZSAgQVVEX1NSQ19DX0RNQSAgICAgICAgICAgICAweDE0MDIwOAkvLyBBdWRpbyBJbnQgQyBETUEgZGF0YSBwb3J0CisKKyNkZWZpbmUgIEFVRF9DX0dQQ05UICAgICAgICAgICAgICAgMHgxNDAyMTAJLy8gQXVkaW8gSW50IEMgZ3AgY291bnRlcgorI2RlZmluZSAgRkxEX0FVRF9DX0dQX0NOVCAgICAgICAgICAweDAwMDBGRkZGCisKKyNkZWZpbmUgIEFVRF9DX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDAyMTQJLy8gQXVkaW8gSW50IEMgZ3AgY29udHJvbAorCisjZGVmaW5lICBBVURfQ19MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMjE4CS8vIEF1ZGlvIEludCBDIGxpbmUgbGVuZ3RoCisKKyNkZWZpbmUgIEFVRF9DX0NGRyAgICAgICAgICAgICAgICAgMHgxNDAyMUMJLy8gQXVkaW8gSW50IEMgY29uZmlndXJhdGlvbgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfRFNUX0RfRE1BICAgICAgICAgICAgIDB4MTQwMzAwCS8vIEF1ZGlvIEludCBEIERNQSBkYXRhIHBvcnQKKyNkZWZpbmUgIEFVRF9TUkNfRF9ETUEgICAgICAgICAgICAgMHgxNDAzMDgJLy8gQXVkaW8gSW50IEQgRE1BIGRhdGEgcG9ydAorCisjZGVmaW5lICBBVURfRF9HUENOVCAgICAgICAgICAgICAgIDB4MTQwMzEwCS8vIEF1ZGlvIEludCBEIGdwIGNvdW50ZXIKKyNkZWZpbmUgIEZMRF9BVURfRF9HUF9DTlQgICAgICAgICAgMHgwMDAwRkZGRgorCisjZGVmaW5lICBBVURfRF9HUENOVF9DVEwgICAgICAgICAgIDB4MTQwMzE0CS8vIEF1ZGlvIEludCBEIGdwIGNvbnRyb2wKKworI2RlZmluZSAgQVVEX0RfTE5HVEggICAgICAgICAgICAgICAweDE0MDMxOAkvLyBBdWRpbyBJbnQgRCBsaW5lIGxlbmd0aAorCisjZGVmaW5lICBBVURfRF9DRkcgICAgICAgICAgICAgICAgIDB4MTQwMzFDCS8vIEF1ZGlvIEludCBEIGNvbmZpZ3VyYXRpb24KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQVVEX1NSQ19FX0RNQSAgICAgICAgICAgICAweDE0MDQwMAkvLyBBdWRpbyBJbnQgRSBETUEgZGF0YSBwb3J0CisKKyNkZWZpbmUgIEFVRF9FX0dQQ05UICAgICAgICAgICAgICAgMHgxNDA0MTAJLy8gQXVkaW8gSW50IEUgZ3AgY291bnRlcgorI2RlZmluZSAgRkxEX0FVRF9FX0dQX0NOVCAgICAgICAgICAweDAwMDBGRkZGCisKKyNkZWZpbmUgIEFVRF9FX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDA0MTQJLy8gQXVkaW8gSW50IEUgZ3AgY29udHJvbAorCisjZGVmaW5lICBBVURfRV9DRkcgICAgICAgICAgICAgICAgIDB4MTQwNDFDCS8vIEF1ZGlvIEludCBFIGNvbmZpZ3VyYXRpb24KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBGTERfQVVEX0RTVF9MTl9MTkdUSCAgICAgIDB4MDAwMDBGRkYKKworI2RlZmluZSAgRkxEX0FVRF9EU1RfUEtfTU9ERSAgICAgICAweDAwMDA0MDAwCisKKyNkZWZpbmUgIEZMRF9BVURfQ0xLX0VOQUJMRSAgICAgICAgMHgwMDAwMDIwMAorCisjZGVmaW5lICBGTERfQVVEX01BU1RFUl9NT0RFICAgICAgIDB4MDAwMDAwMDIKKworI2RlZmluZSAgRkxEX0FVRF9TT05ZX01PREUgICAgICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgIEZMRF9BVURfQ0xLX1NFTEVDVF9QTExfRCAgMHgwMDAwMTgwMAorCisjZGVmaW5lICBGTERfQVVEX0RTVF9FTkFCTEUgICAgICAgIDB4MDAwMjAwMDAKKworI2RlZmluZSAgRkxEX0FVRF9TUkNfRU5BQkxFICAgICAgICAweDAwMDEwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9JTlRfRE1BX0NUTCAgICAgICAgICAgMHgxNDA1MDAJLy8gQXVkaW8gSW50IERNQSBjb250cm9sCisKKyNkZWZpbmUgIEZMRF9BVURfU1JDX0VfUklTQ19FTiAgICAgMHgwMDAwODAwMAorI2RlZmluZSAgRkxEX0FVRF9TUkNfQ19SSVNDX0VOICAgICAweDAwMDA0MDAwCisjZGVmaW5lICBGTERfQVVEX1NSQ19CX1JJU0NfRU4gICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgIEZMRF9BVURfU1JDX0FfUklTQ19FTiAgICAgMHgwMDAwMTAwMAorCisjZGVmaW5lICBGTERfQVVEX0RTVF9EX1JJU0NfRU4gICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0NfUklTQ19FTiAgICAgMHgwMDAwMDQwMAorI2RlZmluZSAgRkxEX0FVRF9EU1RfQl9SSVNDX0VOICAgICAweDAwMDAwMjAwCisjZGVmaW5lICBGTERfQVVEX0RTVF9BX1JJU0NfRU4gICAgIDB4MDAwMDAxMDAKKworI2RlZmluZSAgRkxEX0FVRF9TUkNfRV9GSUZPX0VOICAgICAweDAwMDAwMDgwCisjZGVmaW5lICBGTERfQVVEX1NSQ19DX0ZJRk9fRU4gICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgIEZMRF9BVURfU1JDX0JfRklGT19FTiAgICAgMHgwMDAwMDAyMAorI2RlZmluZSAgRkxEX0FVRF9TUkNfQV9GSUZPX0VOICAgICAweDAwMDAwMDEwCisKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0RfRklGT19FTiAgICAgMHgwMDAwMDAwOAorI2RlZmluZSAgRkxEX0FVRF9EU1RfQ19GSUZPX0VOICAgICAweDAwMDAwMDA0CisjZGVmaW5lICBGTERfQVVEX0RTVF9CX0ZJRk9fRU4gICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0FfRklGT19FTiAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gICAgICAgICAgICAgICAgICAgTW9iaWx5Z2VuIEludGVyZmFjZSBSZWdpc3RlcnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBNb2JpbHlnZW4gSW50ZXJmYWNlIEEKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIE1CX0lGX0FfRE1BICAgICAgICAgICAgICAgMHgxNTAwMDAJLy8gTUJJRiBBIERNQSBkYXRhIHBvcnQKKyNkZWZpbmUgIE1CX0lGX0FfR1BDTiAgICAgICAgICAgICAgMHgxNTAwMDgJLy8gTUJJRiBBIEdQIGNvdW50ZXIKKyNkZWZpbmUgIE1CX0lGX0FfR1BDTl9DVFJMICAgICAgICAgMHgxNTAwMEMKKyNkZWZpbmUgIE1CX0lGX0FfRE1BX0NUUkwgICAgICAgICAgMHgxNTAwMTAKKyNkZWZpbmUgIE1CX0lGX0FfTEVOR1RIICAgICAgICAgICAgMHgxNTAwMTQKKyNkZWZpbmUgIE1CX0lGX0FfSERNQV9YRkVSX1NaICAgICAgMHgxNTAwMTgKKyNkZWZpbmUgIE1CX0lGX0FfSENNRCAgICAgICAgICAgICAgMHgxNTAwMUMKKyNkZWZpbmUgIE1CX0lGX0FfSENPTkZJRyAgICAgICAgICAgMHgxNTAwMjAKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfMCAgICAgMHgxNTAwMjQKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfMSAgICAgMHgxNTAwMjgKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfMiAgICAgMHgxNTAwMkMKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfMyAgICAgMHgxNTAwMzAKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfNCAgICAgMHgxNTAwMzQKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfNSAgICAgMHgxNTAwMzgKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfNiAgICAgMHgxNTAwM0MKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfNyAgICAgMHgxNTAwNDAKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfOCAgICAgMHgxNTAwNDQKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfOSAgICAgMHgxNTAwNDgKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfQSAgICAgMHgxNTAwNEMKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfQiAgICAgMHgxNTAwNTAKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfQyAgICAgMHgxNTAwNTQKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfRCAgICAgMHgxNTAwNTgKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfRSAgICAgMHgxNTAwNUMKKyNkZWZpbmUgIE1CX0lGX0FfREFUQV9TVFJVQ1RfRiAgICAgMHgxNTAwNjAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE1vYmlseWdlbiBJbnRlcmZhY2UgQgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgTUJfSUZfQl9ETUEgICAgICAgICAgICAgICAweDE2MDAwMAkvLyBNQklGIEEgRE1BIGRhdGEgcG9ydAorI2RlZmluZSAgTUJfSUZfQl9HUENOICAgICAgICAgICAgICAweDE2MDAwOAkvLyBNQklGIEEgR1AgY291bnRlcgorI2RlZmluZSAgTUJfSUZfQl9HUENOX0NUUkwgICAgICAgICAweDE2MDAwQworI2RlZmluZSAgTUJfSUZfQl9ETUFfQ1RSTCAgICAgICAgICAweDE2MDAxMAorI2RlZmluZSAgTUJfSUZfQl9MRU5HVEggICAgICAgICAgICAweDE2MDAxNAorI2RlZmluZSAgTUJfSUZfQl9IRE1BX1hGRVJfU1ogICAgICAweDE2MDAxOAorI2RlZmluZSAgTUJfSUZfQl9IQ01EICAgICAgICAgICAgICAweDE2MDAxQworI2RlZmluZSAgTUJfSUZfQl9IQ09ORklHICAgICAgICAgICAweDE2MDAyMAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF8wICAgICAweDE2MDAyNAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF8xICAgICAweDE2MDAyOAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF8yICAgICAweDE2MDAyQworI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF8zICAgICAweDE2MDAzMAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF80ICAgICAweDE2MDAzNAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF81ICAgICAweDE2MDAzOAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF82ICAgICAweDE2MDAzQworI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF83ICAgICAweDE2MDA0MAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF84ICAgICAweDE2MDA0NAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF85ICAgICAweDE2MDA0OAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9BICAgICAweDE2MDA0QworI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9CICAgICAweDE2MDA1MAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9DICAgICAweDE2MDA1NAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9EICAgICAweDE2MDA1OAorI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9FICAgICAweDE2MDA1QworI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9GICAgICAweDE2MDA2MAorCisvLyBNQl9ETUFfQ1RSTAorI2RlZmluZSAgRkxEX01CX0lGX1JJU0NfRU4gICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICBGTERfTUJfSUZfRklGT19FTiAgICAgICAgIDB4MDAwMDAwMDEKKworLy8gTUJfTEVOR1RICisjZGVmaW5lICBGTERfTUJfSUZfTE5fTE5HVEggICAgICAgIDB4MDAwMDBGRkYKKworLy8gTUJfSENNRCByZWdpc3RlcgorI2RlZmluZSAgRkxEX01CX0hDTURfSF9HTyAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lICBGTERfTUJfSENNRF9IX0JVU1kgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfRE1BX0hPTEQgICAgMHgxMDAwMDAwMAorI2RlZmluZSAgRkxEX01CX0hDTURfSF9ETUFfQlVTWSAgICAweDA4MDAwMDAwCisjZGVmaW5lICBGTERfTUJfSENNRF9IX0RNQV9UWVBFICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfRE1BX1hBQ1QgICAgMHgwMjAwMDAwMAorI2RlZmluZSAgRkxEX01CX0hDTURfSF9SV19OICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lICBGTERfTUJfSENNRF9IX0FERFIgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfREFUQSAgICAgICAgMHgwMDAwRkZGRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBJMkMgIzEKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzFfQUREUiAgICAgICAgICAgICAgICAgMHgxODAwMDAJLy8gSTJDICMxIGFkZHJlc3MKKyNkZWZpbmUgIEZMRF9JMkNfREFERFIgICAgICAgICAgICAgMHhmZTAwMDAwMAkvLyBSVyBbMzE6MjVdIEkyQyBEZXZpY2UgQWRkcmVzcworCQkJCQkJIC8vIFJPIFsyNF0gcmVzZXJ2ZWQKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEZMRF9JMkNfU0FERFIgICAgICAgICAgICAgMHgwMEZGRkZGRgkvLyBSVyBbMjM6MF0gIEkyQyBTdWItYWRkcmVzcworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMxX1dEQVRBICAgICAgICAgICAgICAgIDB4MTgwMDA0CS8vIEkyQyAjMSB3cml0ZSBkYXRhCisjZGVmaW5lICBGTERfSTJDX1dEQVRBICAgICAgICAgICAgIDB4RkZGRkZGRkYJLy8gUlcgWzMxOjBdCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzFfQ1RSTCAgICAgICAgICAgICAgICAgMHgxODAwMDgJLy8gSTJDICMxIGNvbnRyb2wKKyNkZWZpbmUgIEZMRF9JMkNfUEVSSU9EICAgICAgICAgICAgMHhGRjAwMDAwMAkvLyBSVyBbMzE6MjRdCisjZGVmaW5lICBGTERfSTJDX1NDTF9JTiAgICAgICAgICAgIDB4MDAyMDAwMDAJLy8gUlcgWzIxXQorI2RlZmluZSAgRkxEX0kyQ19TREFfSU4gICAgICAgICAgICAweDAwMTAwMDAwCS8vIFJXIFsyMF0KKwkJCQkJCSAvLyBSTyBbMTk6MThdIHJlc2VydmVkCisjZGVmaW5lICBGTERfSTJDX1NDTF9PVVQgICAgICAgICAgIDB4MDAwMjAwMDAJLy8gUlcgWzE3XQorI2RlZmluZSAgRkxEX0kyQ19TREFfT1VUICAgICAgICAgICAweDAwMDEwMDAwCS8vIFJXIFsxNl0KKwkJCQkJCSAvLyBSTyBbMTVdIHJlc2VydmVkCisjZGVmaW5lICBGTERfSTJDX0RBVEFfTEVOICAgICAgICAgIDB4MDAwMDcwMDAJLy8gUlcgWzE0OjEyXQorI2RlZmluZSAgRkxEX0kyQ19TQUREUl9JTkMgICAgICAgICAweDAwMDAwODAwCS8vIFJXIFsxMV0KKwkJCQkJCSAvLyBSTyBbMTA6OV0gcmVzZXJ2ZWQKKyNkZWZpbmUgIEZMRF9JMkNfU0FERFJfTEVOICAgICAgICAgMHgwMDAwMDMwMAkvLyBSVyBbOTo4XQorCQkJCQkJIC8vIFJPIFs3OjZdIHJlc2VydmVkCisjZGVmaW5lICBGTERfSTJDX1NPRlQgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLy8gUlcgWzVdCisjZGVmaW5lICBGTERfSTJDX05PU1RPUCAgICAgICAgICAgIDB4MDAwMDAwMTAJLy8gUlcgWzRdCisjZGVmaW5lICBGTERfSTJDX0VYVEVORCAgICAgICAgICAgIDB4MDAwMDAwMDgJLy8gUlcgWzNdCisjZGVmaW5lICBGTERfSTJDX1NZTkMgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLy8gUlcgWzJdCisjZGVmaW5lICBGTERfSTJDX1JFQURfU0EgICAgICAgICAgIDB4MDAwMDAwMDIJLy8gUlcgWzFdCisjZGVmaW5lICBGTERfSTJDX1JFQURfV1JOICAgICAgICAgIDB4MDAwMDAwMDEJLy8gUlcgWzBdCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzFfUkRBVEEgICAgICAgICAgICAgICAgMHgxODAwMEMJLy8gSTJDICMxIHJlYWQgZGF0YQorI2RlZmluZSAgRkxEX0kyQ19SREFUQSAgICAgICAgICAgICAweEZGRkZGRkZGCS8vIFJPIFszMTowXQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMxX1NUQVQgICAgICAgICAgICAgICAgIDB4MTgwMDEwCS8vIEkyQyAjMSBzdGF0dXMKKyNkZWZpbmUgIEZMRF9JMkNfWEZFUl9JTl9QUk9HICAgICAgMHgwMDAwMDAwMgkvLyBSTyBbMV0KKyNkZWZpbmUgIEZMRF9JMkNfUkFDSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvLyBSTyBbMF0KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSTJDICMyCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMyX0FERFIgICAgICAgICAgICAgICAgIDB4MTkwMDAwCS8vIEkyQyAjMiBhZGRyZXNzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzJfV0RBVEEgICAgICAgICAgICAgICAgMHgxOTAwMDQJLy8gSTJDICMyIHdyaXRlIGRhdGEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDMl9DVFJMICAgICAgICAgICAgICAgICAweDE5MDAwOAkvLyBJMkMgIzIgY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMyX1JEQVRBICAgICAgICAgICAgICAgIDB4MTkwMDBDCS8vIEkyQyAjMiByZWFkIGRhdGEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDMl9TVEFUICAgICAgICAgICAgICAgICAweDE5MDAxMAkvLyBJMkMgIzIgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEkyQyAjMworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDM19BRERSICAgICAgICAgICAgICAgICAweDFBMDAwMAkvLyBJMkMgIzMgYWRkcmVzcworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMzX1dEQVRBICAgICAgICAgICAgICAgIDB4MUEwMDA0CS8vIEkyQyAjMyB3cml0ZSBkYXRhCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzNfQ1RSTCAgICAgICAgICAgICAgICAgMHgxQTAwMDgJLy8gSTJDICMzIGNvbnRyb2wKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDM19SREFUQSAgICAgICAgICAgICAgICAweDFBMDAwQwkvLyBJMkMgIzMgcmVhZCBkYXRhCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzNfU1RBVCAgICAgICAgICAgICAgICAgMHgxQTAwMTAJLy8gSTJDICMzIHN0YXR1cworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBVQVJUCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBVQVJUX0NUTCAgICAgICAgICAgICAgICAgIDB4MUIwMDAwCS8vIFVBUlQgQ29udHJvbCBSZWdpc3RlcgorI2RlZmluZSAgRkxEX0xPT1BfQkFDS19FTiAgICAgICAgICAoMSA8PCA3KQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1JYX1RSR19TWiAgICAgICAgICAgICAoMyA8PCAyKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1JYX0VOICAgICAgICAgICAgICAgICAoMSA8PCAxKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1RYX0VOICAgICAgICAgICAgICAgICAoMSA8PCAwKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBVQVJUX0JSRCAgICAgICAgICAgICAgICAgIDB4MUIwMDA0CS8vIFVBUlQgQmF1ZCBSYXRlIERpdmlzb3IKKyNkZWZpbmUgIEZMRF9CUkQgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMHgxOTcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVUFSVF9EQlVGICAgICAgICAgICAgICAgICAweDFCMDAwOAkvLyBVQVJUIFR4L1J4IERhdGEgQnVGRmVyCisjZGVmaW5lICBGTERfREIgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVUFSVF9JU1IgICAgICAgICAgICAgICAgICAweDFCMDAwQwkvLyBVQVJUIEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgIEZMRF9SWERfVElNRU9VVF9FTiAgICAgICAgKDEgPDwgNykJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKyNkZWZpbmUgIEZMRF9GUk1fRVJSX0VOICAgICAgICAgICAgKDEgPDwgNikJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKyNkZWZpbmUgIEZMRF9SWERfUkRZX0VOICAgICAgICAgICAgKDEgPDwgNSkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKyNkZWZpbmUgIEZMRF9UWERfRU1QVFlfRU4gICAgICAgICAgKDEgPDwgNCkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKyNkZWZpbmUgIEZMRF9SWERfT1ZFUkZMT1cgICAgICAgICAgKDEgPDwgMykJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKyNkZWZpbmUgIEZMRF9GUk1fRVJSICAgICAgICAgICAgICAgKDEgPDwgMikJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKyNkZWZpbmUgIEZMRF9SWERfUkRZICAgICAgICAgICAgICAgKDEgPDwgMSkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKyNkZWZpbmUgIEZMRF9UWERfRU1QVFkgICAgICAgICAgICAgKDEgPDwgMCkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVUFSVF9DTlQgICAgICAgICAgICAgICAgICAweDFCMDAxMAkvLyBVQVJUIFR4L1J4IEZJRk8gQnl0ZSBDb3VudAorI2RlZmluZSAgRkxEX1RYRF9DTlQgICAgICAgICAgICAgICAoMHgxRiA8PCA4KQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1JYRF9DTlQgICAgICAgICAgICAgICAoMHgxRiA8PCAwKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBNb3Rpb24gRGV0ZWN0aW9uCisjZGVmaW5lICBNRF9DSDBfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMDE0CisjZGVmaW5lICBNRF9DSDFfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMDk0CisjZGVmaW5lICBNRF9DSDJfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMTE0CisjZGVmaW5lICBNRF9DSDNfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMTk0CisjZGVmaW5lICBNRF9DSDRfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMjE0CisjZGVmaW5lICBNRF9DSDVfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMjk0CisjZGVmaW5lICBNRF9DSDZfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMzE0CisjZGVmaW5lICBNRF9DSDdfR1JJRF9CTE9DS19ZQ05UICAgIDB4MTcwMzk0CisKKyNkZWZpbmUgUElYRUxfRlJNVF80MjIgICAgNAorI2RlZmluZSBQSVhFTF9GUk1UXzQxMSAgICA1CisjZGVmaW5lIFBJWEVMX0ZSTVRfWTggICAgIDYKKworI2RlZmluZSBQSVhFTF9FTkdJTkVfVklQMSAwCisjZGVmaW5lIFBJWEVMX0VOR0lORV9WSVAyIDEKKworI2VuZGlmIC8vQXRoZW5hX1JFR0lTVEVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1zcmFtLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXNyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDY3N2VlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1zcmFtLmgKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BVEhFTkFfU1JBTV9IX18KKyNkZWZpbmUgX19BVEhFTkFfU1JBTV9IX18KKworLy8jZGVmaW5lIFJYX1NSQU1fU1RBUlRfU0laRSAgICAgICAgPSAwOyAgLy8gIFN0YXJ0IG9mIHJlc2VydmVkIFNSQU0KKyNkZWZpbmUgVklEX0NNRFNfU0laRSAgICAgICAgICAgICA4MAkvLyAgVmlkZW8gQ01EUyBzaXplIGluIGJ5dGVzCisjZGVmaW5lIEFVRElPX0NNRFNfU0laRSAgICAgICAgICAgODAJLy8gIEFVRElPIENNRFMgc2l6ZSBpbiBieXRlcworI2RlZmluZSBNQklGX0NNRFNfU0laRSAgICAgICAgICAgIDgwCS8vICBNQklGICBDTURTIHNpemUgaW4gYnl0ZXMKKworLy8jZGVmaW5lIFJYX1NSQU1fUE9PTF9TVEFSVF9TSVpFICAgPSAwOyAgLy8gIFN0YXJ0IG9mIHVzZWFibGUgUlggU1JBTSBmb3IgYnVmZmVycworI2RlZmluZSBWSURfSVFfU0laRSAgICAgICAgICAgICAgIDY0CS8vICBWSUQgaW5zdHJ1Y3Rpb24gcXVldWUgc2l6ZSBpbiBieXRlcworI2RlZmluZSBNQklGX0lRX1NJWkUgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEFVRElPX0lRX1NJWkUgICAgICAgICAgICAgNjQJLy8gIEFVRCBpbnN0cnVjdGlvbiBxdWV1ZSBzaXplIGluIGJ5dGVzCisKKyNkZWZpbmUgVklEX0NEVF9TSVpFICAgICAgICAgICAgICA2NAkvLyAgVklEIGNsdXN0ZXIgZGVzY3JpcHRvciB0YWJsZSBzaXplIGluIGJ5dGVzCisjZGVmaW5lIE1CSUZfQ0RUX1NJWkUgICAgICAgICAgICAgNjQJLy8gIE1CSUYvSEJJIGNsdXN0ZXIgZGVzY3JpcHRvciB0YWJsZSBzaXplIGluIGJ5dGVzCisjZGVmaW5lIEFVRElPX0NEVF9TSVpFICAgICAgICAgICAgNDgJLy8gIEFVRCBjbHVzdGVyIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSBpbiBieXRlcworCisvLyNkZWZpbmUgUlhfU1JBTV9QT09MX0ZSRUVfU0laRSAgICA9IDE2OyAvLyAgU3RhcnQgb2YgYXZhaWxhYmxlIFJYIFNSQU0KKy8vI2RlZmluZSBSWF9TUkFNX0VORF9TSVpFICAgICAgICAgID0gMDsgIC8vICBFbmQgb2YgUlggU1JBTQorCisvLyNkZWZpbmUgVFhfU1JBTV9QT09MX1NUQVJUX1NJWkUgICA9IDA7ICAvLyAgU3RhcnQgb2YgdHJhbnNtaXQgcG9vbCBTUkFNCisvLyNkZWZpbmUgTVNJX0RBVEFfU0laRSAgICAgICAgICAgICA9IDY0OyAvLyAgUmVzZXJ2ZWQgKE1TSSBEYXRhLCBSSVNDIHdvcmtpbmcgc3RvcmEKKworI2RlZmluZSBWSURfQ0xVU1RFUl9TSVpFICAgICAgICAgIDE0NDAJLy8gIFZJRCBjbHVzdGVyIGRhdGEgbGluZQorI2RlZmluZSBBVURJT19DTFVTVEVSX1NJWkUgICAgICAgIDEyOAkvLyAgQVVESU8gY2x1c3RlciBkYXRhIGxpbmUKKyNkZWZpbmUgTUJJRl9DTFVTVEVSX1NJWkUgICAgICAgICAxNDQwCS8vICBNQklGL0hCSSBjbHVzdGVyIGRhdGEgbGluZQorCisvLyNkZWZpbmUgVFhfU1JBTV9QT09MX0ZSRUVfU0laRSAgICA9IDcwNDsgICAgLy8gIFN0YXJ0IG9mIGF2YWlsYWJsZSBUWCBTUkFNCisvLyNkZWZpbmUgVFhfU1JBTV9FTkRfU0laRSAgICAgICAgICA9IDA7ICAgICAgLy8gIEVuZCBvZiBUWCBTUkFNCisKKy8vIFJlY2VpdmUgU1JBTQorI2RlZmluZSBSWF9TUkFNX1NUQVJUICAgICAgICAgICAgIDB4MTAwMDAKKyNkZWZpbmUgVklEX0FfRE9XTl9DTURTICAgICAgICAgICAweDEwMDAwCisjZGVmaW5lIFZJRF9CX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDA1MAorI2RlZmluZSBWSURfQ19ET1dOX0NNRFMgICAgICAgICAgIDB4MTAwQTAKKyNkZWZpbmUgVklEX0RfRE9XTl9DTURTICAgICAgICAgICAweDEwMEYwCisjZGVmaW5lIFZJRF9FX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDE0MAorI2RlZmluZSBWSURfRl9ET1dOX0NNRFMgICAgICAgICAgIDB4MTAxOTAKKyNkZWZpbmUgVklEX0dfRE9XTl9DTURTICAgICAgICAgICAweDEwMUUwCisjZGVmaW5lIFZJRF9IX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDIzMAorI2RlZmluZSBWSURfQV9VUF9DTURTICAgICAgICAgICAgIDB4MTAyODAKKyNkZWZpbmUgVklEX0JfVVBfQ01EUyAgICAgICAgICAgICAweDEwMkQwCisjZGVmaW5lIFZJRF9DX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDMyMAorI2RlZmluZSBWSURfRF9VUF9DTURTICAgICAgICAgICAgIDB4MTAzNzAKKyNkZWZpbmUgVklEX0VfVVBfQ01EUyAgICAgICAgICAgICAweDEwM0MwCisjZGVmaW5lIFZJRF9GX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDQxMAorI2RlZmluZSBWSURfSV9VUF9DTURTICAgICAgICAgICAgIDB4MTA0NjAKKyNkZWZpbmUgVklEX0pfVVBfQ01EUyAgICAgICAgICAgICAweDEwNEIwCisjZGVmaW5lIEFVRF9BX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDUwMAorI2RlZmluZSBBVURfQl9ET1dOX0NNRFMgICAgICAgICAgIDB4MTA1NTAKKyNkZWZpbmUgQVVEX0NfRE9XTl9DTURTICAgICAgICAgICAweDEwNUEwCisjZGVmaW5lIEFVRF9EX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDVGMAorI2RlZmluZSBBVURfQV9VUF9DTURTICAgICAgICAgICAgIDB4MTA2NDAKKyNkZWZpbmUgQVVEX0JfVVBfQ01EUyAgICAgICAgICAgICAweDEwNjkwCisjZGVmaW5lIEFVRF9DX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDZFMAorI2RlZmluZSBBVURfRV9VUF9DTURTICAgICAgICAgICAgIDB4MTA3MzAKKyNkZWZpbmUgTUJJRl9BX0RPV05fQ01EUyAgICAgICAgICAweDEwNzgwCisjZGVmaW5lIE1CSUZfQl9ET1dOX0NNRFMgICAgICAgICAgMHgxMDdEMAorI2RlZmluZSBETUFfU0NSQVRDSF9QQUQgICAgICAgICAgIDB4MTA4MjAJLy8gU2NyYXRjaCBwYWQgYXJlYSBmcm9tIDB4MTA4MjAgdG8gMHgxMEI0MAorCisvLyNkZWZpbmUgUlhfU1JBTV9QT09MX1NUQVJUICAgICAgICA9IDB4MTA1QjA7CisKKyNkZWZpbmUgVklEX0FfSVEgICAgICAgICAgICAgICAgICAweDExMDAwCisjZGVmaW5lIFZJRF9CX0lRICAgICAgICAgICAgICAgICAgMHgxMTA0MAorI2RlZmluZSBWSURfQ19JUSAgICAgICAgICAgICAgICAgIDB4MTEwODAKKyNkZWZpbmUgVklEX0RfSVEgICAgICAgICAgICAgICAgICAweDExMEMwCisjZGVmaW5lIFZJRF9FX0lRICAgICAgICAgICAgICAgICAgMHgxMTEwMAorI2RlZmluZSBWSURfRl9JUSAgICAgICAgICAgICAgICAgIDB4MTExNDAKKyNkZWZpbmUgVklEX0dfSVEgICAgICAgICAgICAgICAgICAweDExMTgwCisjZGVmaW5lIFZJRF9IX0lRICAgICAgICAgICAgICAgICAgMHgxMTFDMAorI2RlZmluZSBWSURfSV9JUSAgICAgICAgICAgICAgICAgIDB4MTEyMDAKKyNkZWZpbmUgVklEX0pfSVEgICAgICAgICAgICAgICAgICAweDExMjQwCisjZGVmaW5lIEFVRF9BX0lRICAgICAgICAgICAgICAgICAgMHgxMTI4MAorI2RlZmluZSBBVURfQl9JUSAgICAgICAgICAgICAgICAgIDB4MTEyQzAKKyNkZWZpbmUgQVVEX0NfSVEgICAgICAgICAgICAgICAgICAweDExMzAwCisjZGVmaW5lIEFVRF9EX0lRICAgICAgICAgICAgICAgICAgMHgxMTM0MAorI2RlZmluZSBBVURfRV9JUSAgICAgICAgICAgICAgICAgIDB4MTEzODAKKyNkZWZpbmUgTUJJRl9BX0lRICAgICAgICAgICAgICAgICAweDExMDAwCisjZGVmaW5lIE1CSUZfQl9JUSAgICAgICAgICAgICAgICAgMHgxMTBDMAorCisjZGVmaW5lIFZJRF9BX0NEVCAgICAgICAgICAgICAgICAgMHgxMEMwMAorI2RlZmluZSBWSURfQl9DRFQgICAgICAgICAgICAgICAgIDB4MTBDNDAKKyNkZWZpbmUgVklEX0NfQ0RUICAgICAgICAgICAgICAgICAweDEwQzgwCisjZGVmaW5lIFZJRF9EX0NEVCAgICAgICAgICAgICAgICAgMHgxMENDMAorI2RlZmluZSBWSURfRV9DRFQgICAgICAgICAgICAgICAgIDB4MTBEMDAKKyNkZWZpbmUgVklEX0ZfQ0RUICAgICAgICAgICAgICAgICAweDEwRDQwCisjZGVmaW5lIFZJRF9HX0NEVCAgICAgICAgICAgICAgICAgMHgxMEQ4MAorI2RlZmluZSBWSURfSF9DRFQgICAgICAgICAgICAgICAgIDB4MTBEQzAKKyNkZWZpbmUgVklEX0lfQ0RUICAgICAgICAgICAgICAgICAweDEwRTAwCisjZGVmaW5lIFZJRF9KX0NEVCAgICAgICAgICAgICAgICAgMHgxMEU0MAorI2RlZmluZSBBVURfQV9DRFQgICAgICAgICAgICAgICAgIDB4MTBFODAKKyNkZWZpbmUgQVVEX0JfQ0RUICAgICAgICAgICAgICAgICAweDEwRUIwCisjZGVmaW5lIEFVRF9DX0NEVCAgICAgICAgICAgICAgICAgMHgxMEVFMAorI2RlZmluZSBBVURfRF9DRFQgICAgICAgICAgICAgICAgIDB4MTBGMTAKKyNkZWZpbmUgQVVEX0VfQ0RUICAgICAgICAgICAgICAgICAweDEwRjQwCisjZGVmaW5lIE1CSUZfQV9DRFQgICAgICAgICAgICAgICAgMHgxMEMwMAorI2RlZmluZSBNQklGX0JfQ0RUICAgICAgICAgICAgICAgIDB4MTBDQzAKKworLy8gQ2x1c3RlciBCdWZmZXIgZm9yIFJYCisjZGVmaW5lIFZJRF9BX1VQX0NMVVNURVJfMSAgICAgICAgMHgxMTQwMAorI2RlZmluZSBWSURfQV9VUF9DTFVTVEVSXzIgICAgICAgIDB4MTE5QTAKKyNkZWZpbmUgVklEX0FfVVBfQ0xVU1RFUl8zICAgICAgICAweDExRjQwCisjZGVmaW5lIFZJRF9BX1VQX0NMVVNURVJfNCAgICAgICAgMHgxMjRFMAorCisjZGVmaW5lIFZJRF9CX1VQX0NMVVNURVJfMSAgICAgICAgMHgxMkE4MAorI2RlZmluZSBWSURfQl9VUF9DTFVTVEVSXzIgICAgICAgIDB4MTMwMjAKKyNkZWZpbmUgVklEX0JfVVBfQ0xVU1RFUl8zICAgICAgICAweDEzNUMwCisjZGVmaW5lIFZJRF9CX1VQX0NMVVNURVJfNCAgICAgICAgMHgxM0I2MAorCisjZGVmaW5lIFZJRF9DX1VQX0NMVVNURVJfMSAgICAgICAgMHgxNDEwMAorI2RlZmluZSBWSURfQ19VUF9DTFVTVEVSXzIgICAgICAgIDB4MTQ2QTAKKyNkZWZpbmUgVklEX0NfVVBfQ0xVU1RFUl8zICAgICAgICAweDE0QzQwCisjZGVmaW5lIFZJRF9DX1VQX0NMVVNURVJfNCAgICAgICAgMHgxNTFFMAorCisjZGVmaW5lIFZJRF9EX1VQX0NMVVNURVJfMSAgICAgICAgMHgxNTc4MAorI2RlZmluZSBWSURfRF9VUF9DTFVTVEVSXzIgICAgICAgIDB4MTVEMjAKKyNkZWZpbmUgVklEX0RfVVBfQ0xVU1RFUl8zICAgICAgICAweDE2MkMwCisjZGVmaW5lIFZJRF9EX1VQX0NMVVNURVJfNCAgICAgICAgMHgxNjg2MAorCisjZGVmaW5lIFZJRF9FX1VQX0NMVVNURVJfMSAgICAgICAgMHgxNkUwMAorI2RlZmluZSBWSURfRV9VUF9DTFVTVEVSXzIgICAgICAgIDB4MTczQTAKKyNkZWZpbmUgVklEX0VfVVBfQ0xVU1RFUl8zICAgICAgICAweDE3OTQwCisjZGVmaW5lIFZJRF9FX1VQX0NMVVNURVJfNCAgICAgICAgMHgxN0VFMAorCisjZGVmaW5lIFZJRF9GX1VQX0NMVVNURVJfMSAgICAgICAgMHgxODQ4MAorI2RlZmluZSBWSURfRl9VUF9DTFVTVEVSXzIgICAgICAgIDB4MThBMjAKKyNkZWZpbmUgVklEX0ZfVVBfQ0xVU1RFUl8zICAgICAgICAweDE4RkMwCisjZGVmaW5lIFZJRF9GX1VQX0NMVVNURVJfNCAgICAgICAgMHgxOTU2MAorCisjZGVmaW5lIFZJRF9JX1VQX0NMVVNURVJfMSAgICAgICAgMHgxOUIwMAorI2RlZmluZSBWSURfSV9VUF9DTFVTVEVSXzIgICAgICAgIDB4MUEwQTAKKyNkZWZpbmUgVklEX0lfVVBfQ0xVU1RFUl8zICAgICAgICAweDFBNjQwCisjZGVmaW5lIFZJRF9JX1VQX0NMVVNURVJfNCAgICAgICAgMHgxQUJFMAorCisjZGVmaW5lIFZJRF9KX1VQX0NMVVNURVJfMSAgICAgICAgMHgxQjE4MAorI2RlZmluZSBWSURfSl9VUF9DTFVTVEVSXzIgICAgICAgIDB4MUI3MjAKKyNkZWZpbmUgVklEX0pfVVBfQ0xVU1RFUl8zICAgICAgICAweDFCQ0MwCisjZGVmaW5lIFZJRF9KX1VQX0NMVVNURVJfNCAgICAgICAgMHgxQzI2MAorCisjZGVmaW5lIEFVRF9BX1VQX0NMVVNURVJfMSAgICAgICAgMHgxQzgwMAorI2RlZmluZSBBVURfQV9VUF9DTFVTVEVSXzIgICAgICAgIDB4MUM4ODAKKyNkZWZpbmUgQVVEX0FfVVBfQ0xVU1RFUl8zICAgICAgICAweDFDOTAwCisKKyNkZWZpbmUgQVVEX0JfVVBfQ0xVU1RFUl8xICAgICAgICAweDFDOTgwCisjZGVmaW5lIEFVRF9CX1VQX0NMVVNURVJfMiAgICAgICAgMHgxQ0EwMAorI2RlZmluZSBBVURfQl9VUF9DTFVTVEVSXzMgICAgICAgIDB4MUNBODAKKworI2RlZmluZSBBVURfQ19VUF9DTFVTVEVSXzEgICAgICAgIDB4MUNCMDAKKyNkZWZpbmUgQVVEX0NfVVBfQ0xVU1RFUl8yICAgICAgICAweDFDQjgwCisjZGVmaW5lIEFVRF9DX1VQX0NMVVNURVJfMyAgICAgICAgMHgxQ0MwMAorCisjZGVmaW5lIEFVRF9FX1VQX0NMVVNURVJfMSAgICAgICAgMHgxQ0M4MAorI2RlZmluZSBBVURfRV9VUF9DTFVTVEVSXzIgICAgICAgIDB4MUNEMDAKKyNkZWZpbmUgQVVEX0VfVVBfQ0xVU1RFUl8zICAgICAgICAweDFDRDgwCisKKyNkZWZpbmUgUlhfU1JBTV9QT09MX0ZSRUUgICAgICAgICAweDFDRTAwCisjZGVmaW5lIFJYX1NSQU1fRU5EICAgICAgICAgICAgICAgMHgxRDAwMAorCisvLyBGcmVlIFJlY2VpdmUgU1JBTSAgICAxNDQgQnl0ZXMKKworLy8gVHJhbnNtaXQgU1JBTQorI2RlZmluZSBUWF9TUkFNX1BPT0xfU1RBUlQgICAgICAgIDB4MDAwMDAKKworI2RlZmluZSBWSURfQV9ET1dOX0NMVVNURVJfMSAgICAgIDB4MDAwNDAKKyNkZWZpbmUgVklEX0FfRE9XTl9DTFVTVEVSXzIgICAgICAweDAwNUUwCisjZGVmaW5lIFZJRF9BX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwMEI4MAorI2RlZmluZSBWSURfQV9ET1dOX0NMVVNURVJfNCAgICAgIDB4MDExMjAKKworI2RlZmluZSBWSURfQl9ET1dOX0NMVVNURVJfMSAgICAgIDB4MDE2QzAKKyNkZWZpbmUgVklEX0JfRE9XTl9DTFVTVEVSXzIgICAgICAweDAxQzYwCisjZGVmaW5lIFZJRF9CX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwMjIwMAorI2RlZmluZSBWSURfQl9ET1dOX0NMVVNURVJfNCAgICAgIDB4MDI3QTAKKworI2RlZmluZSBWSURfQ19ET1dOX0NMVVNURVJfMSAgICAgIDB4MDJENDAKKyNkZWZpbmUgVklEX0NfRE9XTl9DTFVTVEVSXzIgICAgICAweDAzMkUwCisjZGVmaW5lIFZJRF9DX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwMzg4MAorI2RlZmluZSBWSURfQ19ET1dOX0NMVVNURVJfNCAgICAgIDB4MDNFMjAKKworI2RlZmluZSBWSURfRF9ET1dOX0NMVVNURVJfMSAgICAgIDB4MDQzQzAKKyNkZWZpbmUgVklEX0RfRE9XTl9DTFVTVEVSXzIgICAgICAweDA0OTYwCisjZGVmaW5lIFZJRF9EX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwNEYwMAorI2RlZmluZSBWSURfRF9ET1dOX0NMVVNURVJfNCAgICAgIDB4MDU0QTAKKworI2RlZmluZSBWSURfRV9ET1dOX0NMVVNURVJfMSAgICAgIDB4MDVhNDAKKyNkZWZpbmUgVklEX0VfRE9XTl9DTFVTVEVSXzIgICAgICAweDA1RkUwCisjZGVmaW5lIFZJRF9FX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwNjU4MAorI2RlZmluZSBWSURfRV9ET1dOX0NMVVNURVJfNCAgICAgIDB4MDZCMjAKKworI2RlZmluZSBWSURfRl9ET1dOX0NMVVNURVJfMSAgICAgIDB4MDcwQzAKKyNkZWZpbmUgVklEX0ZfRE9XTl9DTFVTVEVSXzIgICAgICAweDA3NjYwCisjZGVmaW5lIFZJRF9GX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwN0MwMAorI2RlZmluZSBWSURfRl9ET1dOX0NMVVNURVJfNCAgICAgIDB4MDgxQTAKKworI2RlZmluZSBWSURfR19ET1dOX0NMVVNURVJfMSAgICAgIDB4MDg3NDAKKyNkZWZpbmUgVklEX0dfRE9XTl9DTFVTVEVSXzIgICAgICAweDA4Q0UwCisjZGVmaW5lIFZJRF9HX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwOTI4MAorI2RlZmluZSBWSURfR19ET1dOX0NMVVNURVJfNCAgICAgIDB4MDk4MjAKKworI2RlZmluZSBWSURfSF9ET1dOX0NMVVNURVJfMSAgICAgIDB4MDlEQzAKKyNkZWZpbmUgVklEX0hfRE9XTl9DTFVTVEVSXzIgICAgICAweDBBMzYwCisjZGVmaW5lIFZJRF9IX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwQTkwMAorI2RlZmluZSBWSURfSF9ET1dOX0NMVVNURVJfNCAgICAgIDB4MEFFQTAKKworI2RlZmluZSBBVURfQV9ET1dOX0NMVVNURVJfMSAgICAgIDB4MEI1MDAKKyNkZWZpbmUgQVVEX0FfRE9XTl9DTFVTVEVSXzIgICAgICAweDBCNTgwCisjZGVmaW5lIEFVRF9BX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwQjYwMAorCisjZGVmaW5lIEFVRF9CX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwQjY4MAorI2RlZmluZSBBVURfQl9ET1dOX0NMVVNURVJfMiAgICAgIDB4MEI3MDAKKyNkZWZpbmUgQVVEX0JfRE9XTl9DTFVTVEVSXzMgICAgICAweDBCNzgwCisKKyNkZWZpbmUgQVVEX0NfRE9XTl9DTFVTVEVSXzEgICAgICAweDBCODAwCisjZGVmaW5lIEFVRF9DX0RPV05fQ0xVU1RFUl8yICAgICAgMHgwQjg4MAorI2RlZmluZSBBVURfQ19ET1dOX0NMVVNURVJfMyAgICAgIDB4MEI5MDAKKworI2RlZmluZSBBVURfRF9ET1dOX0NMVVNURVJfMSAgICAgIDB4MEI5ODAKKyNkZWZpbmUgQVVEX0RfRE9XTl9DTFVTVEVSXzIgICAgICAweDBCQTAwCisjZGVmaW5lIEFVRF9EX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwQkE4MAorCisjZGVmaW5lIFRYX1NSQU1fUE9PTF9GUkVFICAgICAgICAgMHgwQkIwMAorI2RlZmluZSBUWF9TUkFNX0VORCAgICAgICAgICAgICAgIDB4MEMwMDAKKworI2RlZmluZSBCWVRFU19UT19EV09SRFMoYmNvdW50KSAoKGJjb3VudCkgPj4gMikKKyNkZWZpbmUgQllURVNfVE9fUVdPUkRTKGJjb3VudCkgKChiY291bnQpID4+IDMpCisjZGVmaW5lIEJZVEVTX1RPX09XT1JEUyhiY291bnQpICgoYmNvdW50KSA+PiA0KQorCisjZGVmaW5lIFZJRF9JUV9TSVpFX0RXICAgICAgICAgICAgIEJZVEVTX1RPX0RXT1JEUyhWSURfSVFfU0laRSkKKyNkZWZpbmUgVklEX0NEVF9TSVpFX1FXICAgICAgICAgICAgQllURVNfVE9fUVdPUkRTKFZJRF9DRFRfU0laRSkKKyNkZWZpbmUgVklEX0NMVVNURVJfU0laRV9PVyAgICAgICAgQllURVNfVE9fT1dPUkRTKFZJRF9DTFVTVEVSX1NJWkUpCisKKyNkZWZpbmUgQVVESU9fSVFfU0laRV9EVyAgICAgICAgICAgQllURVNfVE9fRFdPUkRTKEFVRElPX0lRX1NJWkUpCisjZGVmaW5lIEFVRElPX0NEVF9TSVpFX1FXICAgICAgICAgIEJZVEVTX1RPX1FXT1JEUyhBVURJT19DRFRfU0laRSkKKyNkZWZpbmUgQVVESU9fQ0xVU1RFUl9TSVpFX1FXICAgICAgQllURVNfVE9fUVdPUkRTKEFVRElPX0NMVVNURVJfU0laRSkKKworI2RlZmluZSBNQklGX0lRX1NJWkVfRFcgICAgICAgICAgICBCWVRFU19UT19EV09SRFMoTUJJRl9JUV9TSVpFKQorI2RlZmluZSBNQklGX0NEVF9TSVpFX1FXICAgICAgICAgICBCWVRFU19UT19RV09SRFMoTUJJRl9DRFRfU0laRSkKKyNkZWZpbmUgTUJJRl9DTFVTVEVSX1NJWkVfT1cgICAgICAgQllURVNfVE9fT1dPUkRTKE1CSUZfQ0xVU1RFUl9TSVpFKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OTA1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5jCkBAIC0wLDAgKzEsODM1IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4sIDxzaHUubGluQGNvbmV4YW50LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmgiCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjU4MjEgYmFzZWQgVFYgY2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIkhpZXAgSHV5bmggPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9pbnRyX21zayA9CisgICAgRkxEX1ZJRF9TUkNfUklTQzEgfCBGTERfVklEX1NSQ19VRiB8IEZMRF9WSURfU1JDX1NZTkMgfCBGTERfVklEX1NSQ19PUENfRVJSOworCitzdGF0aWMgX19sZTMyICpjeDI1ODIxX3VwZGF0ZV9yaXNjcHJvZ3JhbV9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICAgIF9fbGUzMiAqIHJwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgYnBsLCB1MzIgc3luY19saW5lLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbGluZXMsCisJCQkJCSAgICAgIGludCBmaWZvX2VuYWJsZSwgaW50IGZpZWxkX3R5cGUpCit7CisJdW5zaWduZWQgaW50IGxpbmUsIGk7CisJaW50IGRpc3RfYmV0d25fc3RhcnRzID0gYnBsICogMjsKKworCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1JFU1lOQyB8IHN5bmNfbGluZSk7CisKKwlpZiAoVVNFX1JJU0NfTk9PUF9WSURFTykgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX05PX09QUzsgaSsrKSB7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19OT09QKTsKKwkJfQorCX0KKworCS8qIHNjYW4gbGluZXMgKi8KKwlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgbGluZXM7IGxpbmUrKykgeworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19SRUFEIHwgUklTQ19TT0wgfCBSSVNDX0VPTCB8IGJwbCk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihkZXYtPl9kYXRhX2J1Zl9waHlzX2FkZHJfY2gyICsgb2Zmc2V0KTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwkJaWYgKChsaW5lcyA8PSBOVFNDX0ZJRUxEX0hFSUdIVCkKKwkJICAgIHx8IChsaW5lIDwgKE5UU0NfRklFTERfSEVJR0hUIC0gMSkpCisJCSAgICB8fCAhKGRldi0+X2lzTlRTQ19jaDIpKSB7CisJCQlvZmZzZXQgKz0gZGlzdF9iZXR3bl9zdGFydHM7CisJCX0KKwl9CisKKwlyZXR1cm4gcnA7Cit9CisKK3N0YXRpYyBfX2xlMzIgKmN4MjU4MjFfcmlzY19maWVsZF91cHN0cmVhbV9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICAgICBfX2xlMzIgKiBycCwKKwkJCQkJICAgICAgIGRtYV9hZGRyX3QgZGF0YWJ1Zl9waHlzX2FkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCQkgICAgICAgdTMyIHN5bmNfbGluZSwgdW5zaWduZWQgaW50IGJwbCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsaW5lcywKKwkJCQkJICAgICAgIGludCBmaWZvX2VuYWJsZSwgaW50IGZpZWxkX3R5cGUpCit7CisJdW5zaWduZWQgaW50IGxpbmUsIGk7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9CisJICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbZGV2LT5fY2hhbm5lbDJfdXBzdHJlYW1fc2VsZWN0XTsKKwlpbnQgZGlzdF9iZXR3bl9zdGFydHMgPSBicGwgKiAyOworCisJLyogc3luYyBpbnN0cnVjdGlvbiAqLworCWlmIChzeW5jX2xpbmUgIT0gTk9fU1lOQ19MSU5FKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1JFU1lOQyB8IHN5bmNfbGluZSk7CisJfQorCisJaWYgKFVTRV9SSVNDX05PT1BfVklERU8pIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9OT19PUFM7IGkrKykgeworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfTk9PUCk7CisJCX0KKwl9CisKKwkvKiBzY2FuIGxpbmVzICovCisJZm9yIChsaW5lID0gMDsgbGluZSA8IGxpbmVzOyBsaW5lKyspIHsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVBRCB8IFJJU0NfU09MIHwgUklTQ19FT0wgfCBicGwpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoZGF0YWJ1Zl9waHlzX2FkZHIgKyBvZmZzZXQpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCQlpZiAoKGxpbmVzIDw9IE5UU0NfRklFTERfSEVJR0hUKQorCQkgICAgfHwgKGxpbmUgPCAoTlRTQ19GSUVMRF9IRUlHSFQgLSAxKSkKKwkJICAgIHx8ICEoZGV2LT5faXNOVFNDX2NoMikpIHsKKwkJCW9mZnNldCArPSBkaXN0X2JldHduX3N0YXJ0czsKKwkJfQorCisJCS8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBGSUZPIGFmdGVyIHRoZSBmaXJzdCA0IGxpbmVzCisJCS8vIEZvciB0aGUgdXBzdHJlYW0gdmlkZW8gY2hhbm5lbCwgdGhlIHJpc2MgZW5naW5lIHdpbGwgZW5hYmxlIHRoZSBGSUZPLgorCQlpZiAoZmlmb19lbmFibGUgJiYgbGluZSA9PSAzKSB7CisJCQkqKHJwKyspID0gUklTQ19XUklURUNSOworCQkJKihycCsrKSA9IHNyYW1fY2gtPmRtYV9jdGw7CisJCQkqKHJwKyspID0gRkxEX1ZJRF9GSUZPX0VOOworCQkJKihycCsrKSA9IDB4MDAwMDAwMDE7CisJCX0KKwl9CisKKwlyZXR1cm4gcnA7Cit9CisKK2ludCBjeDI1ODIxX3Jpc2NfYnVmZmVyX3Vwc3RyZWFtX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJICAgICB1bnNpZ25lZCBpbnQgdG9wX29mZnNldCwgdW5zaWduZWQgaW50IGJwbCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBsaW5lcykKK3sKKwlfX2xlMzIgKnJwOworCWludCBmaWZvX2VuYWJsZSA9IDA7CisJaW50IHNpbmdsZWZpZWxkX2xpbmVzID0gbGluZXMgPj4gMTsJLy9nZXQgbGluZSBjb3VudCBmb3Igc2luZ2xlIGZpZWxkCisJaW50IG9kZF9udW1fbGluZXMgPSBzaW5nbGVmaWVsZF9saW5lczsKKwlpbnQgZnJhbWUgPSAwOworCWludCBmcmFtZV9zaXplID0gMDsKKwlpbnQgZGF0YWJ1Zl9vZmZzZXQgPSAwOworCWludCByaXNjX3Byb2dyYW1fc2l6ZSA9IDA7CisJaW50IHJpc2NfZmxhZyA9IFJJU0NfQ05UX1JFU0VUOworCXVuc2lnbmVkIGludCBib3R0b21fb2Zmc2V0ID0gYnBsOworCWRtYV9hZGRyX3QgcmlzY19waHlzX2p1bXBfYWRkcjsKKworCWlmIChkZXYtPl9pc05UU0NfY2gyKSB7CisJCW9kZF9udW1fbGluZXMgPSBzaW5nbGVmaWVsZF9saW5lcyArIDE7CisJCXJpc2NfcHJvZ3JhbV9zaXplID0gRlJBTUUxX1ZJRF9QUk9HX1NJWkU7CisJCWZyYW1lX3NpemUgPQorCQkgICAgKGJwbCA9PQorCQkgICAgIFk0MTFfTElORV9TWikgPyBGUkFNRV9TSVpFX05UU0NfWTQxMSA6CisJCSAgICBGUkFNRV9TSVpFX05UU0NfWTQyMjsKKwl9IGVsc2UgeworCQlyaXNjX3Byb2dyYW1fc2l6ZSA9IFBBTF9WSURfUFJPR19TSVpFOworCQlmcmFtZV9zaXplID0KKwkJICAgIChicGwgPT0KKwkJICAgICBZNDExX0xJTkVfU1opID8gRlJBTUVfU0laRV9QQUxfWTQxMSA6IEZSQU1FX1NJWkVfUEFMX1k0MjI7CisJfQorCisJLyogVmlydHVhbCBhZGRyZXNzIG9mIFJpc2MgYnVmZmVyIHByb2dyYW0gKi8KKwlycCA9IGRldi0+X2RtYV92aXJ0X2FkZHJfY2gyOworCisJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgTlVNX0ZSQU1FUzsgZnJhbWUrKykgeworCQlkYXRhYnVmX29mZnNldCA9IGZyYW1lX3NpemUgKiBmcmFtZTsKKworCQlpZiAoVU5TRVQgIT0gdG9wX29mZnNldCkgeworCQkJZmlmb19lbmFibGUgPSAoZnJhbWUgPT0gMCkgPyBGSUZPX0VOQUJMRSA6IEZJRk9fRElTQUJMRTsKKwkJCXJwID0gY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtX2NoMihkZXYsIHJwLAorCQkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCQkgICAgIF9kYXRhX2J1Zl9waHlzX2FkZHJfY2gyCisJCQkJCQkJICAgICArIGRhdGFidWZfb2Zmc2V0LAorCQkJCQkJCSAgICAgdG9wX29mZnNldCwgMCwgYnBsLAorCQkJCQkJCSAgICAgb2RkX251bV9saW5lcywKKwkJCQkJCQkgICAgIGZpZm9fZW5hYmxlLAorCQkJCQkJCSAgICAgT0REX0ZJRUxEKTsKKwkJfQorCisJCWZpZm9fZW5hYmxlID0gRklGT19ESVNBQkxFOworCisJCS8vRXZlbiBmaWVsZAorCQlycCA9IGN4MjU4MjFfcmlzY19maWVsZF91cHN0cmVhbV9jaDIoZGV2LCBycCwKKwkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCSAgICAgX2RhdGFfYnVmX3BoeXNfYWRkcl9jaDIgKworCQkJCQkJICAgICBkYXRhYnVmX29mZnNldCwKKwkJCQkJCSAgICAgYm90dG9tX29mZnNldCwgMHgyMDAsIGJwbCwKKwkJCQkJCSAgICAgc2luZ2xlZmllbGRfbGluZXMsCisJCQkJCQkgICAgIGZpZm9fZW5hYmxlLCBFVkVOX0ZJRUxEKTsKKworCQlpZiAoZnJhbWUgPT0gMCkgeworCQkJcmlzY19mbGFnID0gUklTQ19DTlRfUkVTRVQ7CisJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0KKwkJCSAgICBkZXYtPl9kbWFfcGh5c19zdGFydF9hZGRyX2NoMiArIHJpc2NfcHJvZ3JhbV9zaXplOworCQl9IGVsc2UgeworCQkJcmlzY19mbGFnID0gUklTQ19DTlRfSU5DOworCQkJcmlzY19waHlzX2p1bXBfYWRkciA9IGRldi0+X2RtYV9waHlzX3N0YXJ0X2FkZHJfY2gyOworCQl9CisKKwkJLy8gTG9vcCB0byAybmRGcmFtZVJJU0Mgb3IgdG8gU3RhcnQgb2YgUmlzYyBwcm9ncmFtICYgZ2VuZXJhdGUgSVJRCisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCByaXNjX2ZsYWcpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIocmlzY19waHlzX2p1bXBfYWRkcik7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPQorCSAgICAmZGV2LT5zcmFtX2NoYW5uZWxzW1ZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSl07CisJdTMyIHRtcCA9IDA7CisKKwlpZiAoIWRldi0+X2lzX3J1bm5pbmdfY2gyKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxOiBObyB2aWRlbyBmaWxlIGlzIGN1cnJlbnRseSBydW5uaW5nIHNvIHJldHVybiFcbiIpOworCQlyZXR1cm47CisJfQorCS8vRGlzYWJsZSBSSVNDIGludGVycnVwdHMKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc2spOworCWN4X3dyaXRlKHNyYW1fY2gtPmludF9tc2ssIHRtcCAmIH5faW50cl9tc2spOworCisJLy9UdXJuIE9GRiByaXNjIGFuZCBmaWZvCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwljeF93cml0ZShzcmFtX2NoLT5kbWFfY3RsLCB0bXAgJiB+KEZMRF9WSURfRklGT19FTiB8IEZMRF9WSURfUklTQ19FTikpOworCisJLy9DbGVhciBkYXRhIGJ1ZmZlciBtZW1vcnkKKwlpZiAoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMikKKwkJbWVtc2V0KGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIsIDAsCisJCSAgICAgICBkZXYtPl9kYXRhX2J1Zl9zaXplX2NoMik7CisKKwlkZXYtPl9pc19ydW5uaW5nX2NoMiA9IDA7CisJZGV2LT5faXNfZmlyc3RfZnJhbWVfY2gyID0gMDsKKwlkZXYtPl9mcmFtZV9jb3VudF9jaDIgPSAwOworCWRldi0+X2ZpbGVfc3RhdHVzX2NoMiA9IEVORF9PRl9GSUxFOworCisJaWYgKGRldi0+X2lycV9xdWV1ZXNfY2gyKSB7CisJCWtmcmVlKGRldi0+X2lycV9xdWV1ZXNfY2gyKTsKKwkJZGV2LT5faXJxX3F1ZXVlc19jaDIgPSBOVUxMOworCX0KKworCWlmIChkZXYtPl9maWxlbmFtZV9jaDIgIT0gTlVMTCkKKwkJa2ZyZWUoZGV2LT5fZmlsZW5hbWVfY2gyKTsKKworCXRtcCA9IGN4X3JlYWQoVklEX0NIX01PREVfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCAmIDB4RkZGRkZFMDApOworfQorCit2b2lkIGN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWlmIChkZXYtPl9pc19ydW5uaW5nX2NoMikgeworCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gyKGRldik7CisJfQorCisJaWYgKGRldi0+X2RtYV92aXJ0X2FkZHJfY2gyKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+X3Jpc2Nfc2l6ZV9jaDIsCisJCQkJICAgIGRldi0+X2RtYV92aXJ0X2FkZHJfY2gyLAorCQkJCSAgICBkZXYtPl9kbWFfcGh5c19hZGRyX2NoMik7CisJCWRldi0+X2RtYV92aXJ0X2FkZHJfY2gyID0gTlVMTDsKKwl9CisKKwlpZiAoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMikgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPl9kYXRhX2J1Zl9zaXplX2NoMiwKKwkJCQkgICAgZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiwKKwkJCQkgICAgZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyX2NoMik7CisJCWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIgPSBOVUxMOworCX0KK30KKworaW50IGN4MjU4MjFfZ2V0X2ZyYW1lX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwlzdHJ1Y3QgZmlsZSAqbXlmaWxlOworCWludCBmcmFtZV9pbmRleF90ZW1wID0gZGV2LT5fZnJhbWVfaW5kZXhfY2gyOworCWludCBpID0gMDsKKwlpbnQgbGluZV9zaXplID0KKwkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdF9jaDIgPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFk0MTFfTElORV9TWiA6IFk0MjJfTElORV9TWjsKKwlpbnQgZnJhbWVfc2l6ZSA9IDA7CisJaW50IGZyYW1lX29mZnNldCA9IDA7CisJc3NpemVfdCB2ZnNfcmVhZF9yZXR2YWwgPSAwOworCWNoYXIgbXlidWZbbGluZV9zaXplXTsKKwlsb2ZmX3QgZmlsZV9vZmZzZXQ7CisJbG9mZl90IHBvczsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCisJaWYgKGRldi0+X2ZpbGVfc3RhdHVzX2NoMiA9PSBFTkRfT0ZfRklMRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2LT5faXNOVFNDX2NoMikgeworCQlmcmFtZV9zaXplID0KKwkJICAgIChsaW5lX3NpemUgPT0KKwkJICAgICBZNDExX0xJTkVfU1opID8gRlJBTUVfU0laRV9OVFNDX1k0MTEgOgorCQkgICAgRlJBTUVfU0laRV9OVFNDX1k0MjI7CisJfSBlbHNlIHsKKwkJZnJhbWVfc2l6ZSA9CisJCSAgICAobGluZV9zaXplID09CisJCSAgICAgWTQxMV9MSU5FX1NaKSA/IEZSQU1FX1NJWkVfUEFMX1k0MTEgOiBGUkFNRV9TSVpFX1BBTF9ZNDIyOworCX0KKworCWZyYW1lX29mZnNldCA9IChmcmFtZV9pbmRleF90ZW1wID4gMCkgPyBmcmFtZV9zaXplIDogMDsKKwlmaWxlX29mZnNldCA9IGRldi0+X2ZyYW1lX2NvdW50X2NoMiAqIGZyYW1lX3NpemU7CisKKwlteWZpbGUgPSBmaWxwX29wZW4oZGV2LT5fZmlsZW5hbWVfY2gyLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLCAwKTsKKworCWlmIChJU19FUlIobXlmaWxlKSkgeworCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7CisJCXByaW50aygiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhIFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZV9jaDIsIG9wZW5fZXJybm8pOworCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOworCX0gZWxzZSB7CisJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKKwkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgeworCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXBvcyA9IG15ZmlsZS0+Zl9wb3M7CisJCW9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5fbGluZXNfY291bnRfY2gyOyBpKyspIHsKKwkJCXBvcyA9IGZpbGVfb2Zmc2V0OworCisJCQl2ZnNfcmVhZF9yZXR2YWwgPQorCQkJICAgIHZmc19yZWFkKG15ZmlsZSwgbXlidWYsIGxpbmVfc2l6ZSwgJnBvcyk7CisKKwkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPiAwICYmIHZmc19yZWFkX3JldHZhbCA9PSBsaW5lX3NpemUKKwkJCSAgICAmJiBkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyICE9IE5VTEwpIHsKKwkJCQltZW1jcHkoKHZvaWQgKikoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiArCisJCQkJCQlmcmFtZV9vZmZzZXQgLyA0KSwgbXlidWYsCisJCQkJICAgICAgIHZmc19yZWFkX3JldHZhbCk7CisJCQl9CisKKwkJCWZpbGVfb2Zmc2V0ICs9IHZmc19yZWFkX3JldHZhbDsKKwkJCWZyYW1lX29mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CisKKwkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPCBsaW5lX3NpemUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCisJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpID4gMCkKKwkJCWRldi0+X2ZyYW1lX2NvdW50X2NoMisrOworCisJCWRldi0+X2ZpbGVfc3RhdHVzX2NoMiA9CisJCSAgICAodmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZSkgPyBJTl9QUk9HUkVTUyA6IEVORF9PRl9GSUxFOworCisJCXNldF9mcyhvbGRfZnMpOworCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfdmlkdXBzX2hhbmRsZXJfY2gyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIF9pcnFfd29ya19lbnRyeV9jaDIpOworCisJaWYgKCFkZXYpIHsKKwkJcHJpbnRrKCJFUlJPUiAlcygpOiBzaW5jZSBjb250YWluZXJfb2Yod29ya19zdHJ1Y3QpIEZBSUxFRCEgXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJY3gyNTgyMV9nZXRfZnJhbWVfY2gyKGRldiwKKwkJCSAgICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbZGV2LT4KKwkJCQkJCSAgX2NoYW5uZWwyX3Vwc3RyZWFtX3NlbGVjdF0pOworfQorCitpbnQgY3gyNTgyMV9vcGVuZmlsZV9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJc3RydWN0IGZpbGUgKm15ZmlsZTsKKwlpbnQgaSA9IDAsIGogPSAwOworCWludCBsaW5lX3NpemUgPQorCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0X2NoMiA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gWTQxMV9MSU5FX1NaIDogWTQyMl9MSU5FX1NaOworCXNzaXplX3QgdmZzX3JlYWRfcmV0dmFsID0gMDsKKwljaGFyIG15YnVmW2xpbmVfc2l6ZV07CisJbG9mZl90IHBvczsKKwlsb2ZmX3Qgb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpMDsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCisJbXlmaWxlID0gZmlscF9vcGVuKGRldi0+X2ZpbGVuYW1lX2NoMiwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7CisKKwlpZiAoSVNfRVJSKG15ZmlsZSkpIHsKKwkJY29uc3QgaW50IG9wZW5fZXJybm8gPSAtUFRSX0VSUihteWZpbGUpOworCQlwcmludGsoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkISBcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5fZmlsZW5hbWVfY2gyLCBvcGVuX2Vycm5vKTsKKwkJcmV0dXJuIFBUUl9FUlIobXlmaWxlKTsKKwl9IGVsc2UgeworCQlpZiAoIShteWZpbGUtPmZfb3ApKSB7CisJCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEiLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJaWYgKCFteWZpbGUtPmZfb3AtPnJlYWQpIHsKKwkJCXByaW50aworCQkJICAgICgiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISAgUmV0dXJuaW5nLiIsCisJCQkgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcG9zID0gbXlmaWxlLT5mX3BvczsKKwkJb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCisJCWZvciAoaiA9IDA7IGogPCBOVU1fRlJBTUVTOyBqKyspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPl9saW5lc19jb3VudF9jaDI7IGkrKykgeworCQkJCXBvcyA9IG9mZnNldDsKKworCQkJCXZmc19yZWFkX3JldHZhbCA9CisJCQkJICAgIHZmc19yZWFkKG15ZmlsZSwgbXlidWYsIGxpbmVfc2l6ZSwgJnBvcyk7CisKKwkJCQlpZiAodmZzX3JlYWRfcmV0dmFsID4gMAorCQkJCSAgICAmJiB2ZnNfcmVhZF9yZXR2YWwgPT0gbGluZV9zaXplCisJCQkJICAgICYmIGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIgIT0gTlVMTCkgeworCQkJCQltZW1jcHkoKHZvaWQgKikoZGV2LT4KKwkJCQkJCQlfZGF0YV9idWZfdmlydF9hZGRyX2NoMgorCQkJCQkJCSsgb2Zmc2V0IC8gNCksIG15YnVmLAorCQkJCQkgICAgICAgdmZzX3JlYWRfcmV0dmFsKTsKKwkJCQl9CisKKwkJCQlvZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOworCisJCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSAgICAgICAiRG9uZTogZXhpdCAlcygpIHNpbmNlIG5vIG1vcmUgYnl0ZXMgdG8gcmVhZCBmcm9tIFZpZGVvIGZpbGUuXG4iLAorCQkJCQkgICAgICAgX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpID4gMCkKKwkJCQlkZXYtPl9mcmFtZV9jb3VudF9jaDIrKzsKKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJZGV2LT5fZmlsZV9zdGF0dXNfY2gyID0KKwkJICAgICh2ZnNfcmVhZF9yZXR2YWwgPT0gbGluZV9zaXplKSA/IElOX1BST0dSRVNTIDogRU5EX09GX0ZJTEU7CisKKwkJc2V0X2ZzKG9sZF9mcyk7CisJCW15ZmlsZS0+Zl9wb3MgPSAwOworCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNTgyMV91cHN0cmVhbV9idWZmZXJfcHJlcGFyZV9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoLAorCQkJCQkgICAgICAgaW50IGJwbCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWRtYV9hZGRyX3QgZGF0YV9kbWFfYWRkcjsKKworCWlmIChkZXYtPl9kbWFfdmlydF9hZGRyX2NoMiAhPSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+dXBzdHJlYW1fcmlzY2J1Zl9zaXplX2NoMiwKKwkJCQkgICAgZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDIsCisJCQkJICAgIGRldi0+X2RtYV9waHlzX2FkZHJfY2gyKTsKKwl9CisKKwlkZXYtPl9kbWFfdmlydF9hZGRyX2NoMiA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPnVwc3RyZWFtX3Jpc2NidWZfc2l6ZV9jaDIsCisJCQkJICZkbWFfYWRkcik7CisJZGV2LT5fZG1hX3ZpcnRfc3RhcnRfYWRkcl9jaDIgPSBkZXYtPl9kbWFfdmlydF9hZGRyX2NoMjsKKwlkZXYtPl9kbWFfcGh5c19zdGFydF9hZGRyX2NoMiA9IGRtYV9hZGRyOworCWRldi0+X2RtYV9waHlzX2FkZHJfY2gyID0gZG1hX2FkZHI7CisJZGV2LT5fcmlzY19zaXplX2NoMiA9IGRldi0+dXBzdHJlYW1fcmlzY2J1Zl9zaXplX2NoMjsKKworCWlmICghZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDIpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjE6IEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFJpc2MgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLy9JbmlpdGl6ZSBhdCB0aGlzIGFkZHJlc3MgdW50aWwgbiBieXRlcyB0byAwCisJbWVtc2V0KGRldi0+X2RtYV92aXJ0X2FkZHJfY2gyLCAwLCBkZXYtPl9yaXNjX3NpemVfY2gyKTsKKworCWlmIChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyICE9IE5VTEwpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemVfY2gyLAorCQkJCSAgICBkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyLAorCQkJCSAgICBkZXYtPl9kYXRhX2J1Zl9waHlzX2FkZHJfY2gyKTsKKwl9CisJLy9Gb3IgVmlkZW8gRGF0YSBidWZmZXIgYWxsb2NhdGlvbgorCWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIgPQorCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemVfY2gyLAorCQkJCSAmZGF0YV9kbWFfYWRkcik7CisJZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyX2NoMiA9IGRhdGFfZG1hX2FkZHI7CisJZGV2LT5fZGF0YV9idWZfc2l6ZV9jaDIgPSBkZXYtPnVwc3RyZWFtX2RhdGFidWZfc2l6ZV9jaDI7CisKKwlpZiAoIWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjE6IEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLy9Jbml0aWFsaXplIGF0IHRoaXMgYWRkcmVzcyB1bnRpbCBuIGJ5dGVzIHRvIDAKKwltZW1zZXQoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiwgMCwgZGV2LT5fZGF0YV9idWZfc2l6ZV9jaDIpOworCisJcmV0ID0gY3gyNTgyMV9vcGVuZmlsZV9jaDIoZGV2LCBzcmFtX2NoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8vQ3JlYXRpbmcgUklTQyBwcm9ncmFtcworCXJldCA9CisJICAgIGN4MjU4MjFfcmlzY19idWZmZXJfdXBzdHJlYW1fY2gyKGRldiwgZGV2LT5wY2ksIDAsIGJwbCwKKwkJCQkJICAgICBkZXYtPl9saW5lc19jb3VudF9jaDIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJjeDI1ODIxOiBGYWlsZWQgY3JlYXRpbmcgVmlkZW8gVXBzdHJlYW0gUmlzYyBwcm9ncmFtcyEgXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworaW50IGN4MjU4MjFfdmlkZW9fdXBzdHJlYW1faXJxX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLAorCQkJCSAgIHUzMiBzdGF0dXMpCit7CisJdTMyIGludF9tc2tfdG1wOworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5fbnVtXTsKKwlpbnQgc2luZ2xlZmllbGRfbGluZXMgPSBOVFNDX0ZJRUxEX0hFSUdIVDsKKwlpbnQgbGluZV9zaXplX2luX2J5dGVzID0gWTQyMl9MSU5FX1NaOworCWludCBvZGRfcmlzY19wcm9nX3NpemUgPSAwOworCWRtYV9hZGRyX3QgcmlzY19waHlzX2p1bXBfYWRkcjsKKwlfX2xlMzIgKnJwOworCisJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX1JJU0MxKSB7CisJCS8vIFdlIHNob3VsZCBvbmx5IHByb2Nlc3Mgb25lIHByb2dyYW0gcGVyIGNhbGwKKwkJdTMyIHByb2dfY250ID0gY3hfcmVhZChjaGFubmVsLT5ncGNudCk7CisKKwkJLy9TaW5jZSB3ZSd2ZSBpZGVudGlmaWVkIG91ciBJUlEsIGNsZWFyIG91ciBiaXRzIGZyb20gdGhlIGludGVycnVwdCBtYXNrIGFuZCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycworCQlpbnRfbXNrX3RtcCA9IGN4X3JlYWQoY2hhbm5lbC0+aW50X21zayk7CisJCWN4X3dyaXRlKGNoYW5uZWwtPmludF9tc2ssIGludF9tc2tfdG1wICYgfl9pbnRyX21zayk7CisJCWN4X3dyaXRlKGNoYW5uZWwtPmludF9zdGF0LCBfaW50cl9tc2spOworCisJCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisKKwkJZGV2LT5fZnJhbWVfaW5kZXhfY2gyID0gcHJvZ19jbnQ7CisKKwkJcXVldWVfd29yayhkZXYtPl9pcnFfcXVldWVzX2NoMiwgJmRldi0+X2lycV93b3JrX2VudHJ5X2NoMik7CisKKwkJaWYgKGRldi0+X2lzX2ZpcnN0X2ZyYW1lX2NoMikgeworCQkJZGV2LT5faXNfZmlyc3RfZnJhbWVfY2gyID0gMDsKKworCQkJaWYgKGRldi0+X2lzTlRTQ19jaDIpIHsKKwkJCQlzaW5nbGVmaWVsZF9saW5lcyArPSAxOworCQkJCW9kZF9yaXNjX3Byb2dfc2l6ZSA9IE9ERF9GTERfTlRTQ19QUk9HX1NJWkU7CisJCQl9IGVsc2UgeworCQkJCXNpbmdsZWZpZWxkX2xpbmVzID0gUEFMX0ZJRUxEX0hFSUdIVDsKKwkJCQlvZGRfcmlzY19wcm9nX3NpemUgPSBPRERfRkxEX1BBTF9QUk9HX1NJWkU7CisJCQl9CisKKwkJCWlmIChkZXYtPl9kbWFfdmlydF9zdGFydF9hZGRyX2NoMiAhPSBOVUxMKSB7CisJCQkJbGluZV9zaXplX2luX2J5dGVzID0KKwkJCQkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdF9jaDIgPT0KKwkJCQkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFk0MTFfTElORV9TWiA6CisJCQkJICAgIFk0MjJfTElORV9TWjsKKwkJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0KKwkJCQkgICAgZGV2LT5fZG1hX3BoeXNfc3RhcnRfYWRkcl9jaDIgKworCQkJCSAgICBvZGRfcmlzY19wcm9nX3NpemU7CisKKwkJCQlycCA9IGN4MjU4MjFfdXBkYXRlX3Jpc2Nwcm9ncmFtX2NoMihkZXYsCisJCQkJCQkJCSAgICBkZXYtPgorCQkJCQkJCQkgICAgX2RtYV92aXJ0X3N0YXJ0X2FkZHJfY2gyLAorCQkJCQkJCQkgICAgVE9QX09GRlNFVCwKKwkJCQkJCQkJICAgIGxpbmVfc2l6ZV9pbl9ieXRlcywKKwkJCQkJCQkJICAgIDB4MCwKKwkJCQkJCQkJICAgIHNpbmdsZWZpZWxkX2xpbmVzLAorCQkJCQkJCQkgICAgRklGT19ESVNBQkxFLAorCQkJCQkJCQkgICAgT0REX0ZJRUxEKTsKKworCQkJCS8vIEp1bXAgdG8gRXZlbiBSaXNjIHByb2dyYW0gb2YgMXN0IEZyYW1lCisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCk7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHJpc2NfcGh5c19qdW1wX2FkZHIpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsKKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKwl9CisKKwlpZiAoZGV2LT5fZmlsZV9zdGF0dXNfY2gyID09IEVORF9PRl9GSUxFKSB7CisJCXByaW50aygiY3gyNTgyMTogRU9GIENoYW5uZWwgMiBGcmFtZWNvdW50ID0gJWRcbiIsCisJCSAgICAgICBkZXYtPl9mcmFtZV9jb3VudF9jaDIpOworCQlyZXR1cm4gLTE7CisJfQorCS8vRWxTRSwgc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgcmUtZW5hYmxlIGlycS4KKwlpbnRfbXNrX3RtcCA9IGN4X3JlYWQoY2hhbm5lbC0+aW50X21zayk7CisJY3hfd3JpdGUoY2hhbm5lbC0+aW50X21zaywgaW50X21za190bXAgfD0gX2ludHJfbXNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3gyNTgyMV91cHN0cmVhbV9pcnFfY2gyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGRldl9pZDsKKwl1MzIgbXNrX3N0YXQsIHZpZF9zdGF0dXM7CisJaW50IGhhbmRsZWQgPSAwOworCWludCBjaGFubmVsX251bSA9IDA7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLTE7CisKKwljaGFubmVsX251bSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSjsKKworCXNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5uZWxfbnVtXTsKKworCW1za19zdGF0ID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXN0YXQpOworCXZpZF9zdGF0dXMgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9zdGF0KTsKKworCS8vIE9ubHkgZGVhbCB3aXRoIG91ciBpbnRlcnJ1cHQKKwlpZiAodmlkX3N0YXR1cykgeworCQloYW5kbGVkID0KKwkJICAgIGN4MjU4MjFfdmlkZW9fdXBzdHJlYW1faXJxX2NoMihkZXYsIGNoYW5uZWxfbnVtLAorCQkJCQkJICAgdmlkX3N0YXR1cyk7CisJfQorCisJaWYgKGhhbmRsZWQgPCAwKSB7CisJCWN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDIoZGV2KTsKKwl9IGVsc2UgeworCQloYW5kbGVkICs9IGhhbmRsZWQ7CisJfQorCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfc2V0X3BpeGVsZW5naW5lX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gsIGludCBwaXhfZm9ybWF0KQoreworCWludCB3aWR0aCA9IFdJRFRIX0QxOworCWludCBoZWlnaHQgPSBkZXYtPl9saW5lc19jb3VudF9jaDI7CisJaW50IG51bV9saW5lcywgb2RkX251bV9saW5lczsKKwl1MzIgdmFsdWU7CisJaW50IHZpcF9tb2RlID0gUElYRUxfRU5HSU5FX1ZJUDE7CisKKwl2YWx1ZSA9ICgocGl4X2Zvcm1hdCAmIDB4MykgPDwgMTIpIHwgKHZpcF9tb2RlICYgMHg3KTsKKwl2YWx1ZSAmPSAweEZGRkZGRkVGOworCXZhbHVlIHw9IGRldi0+X2lzTlRTQ19jaDIgPyAwIDogMHgxMDsKKwljeF93cml0ZShjaC0+dmlkX2ZtdF9jdGwsIHZhbHVlKTsKKworCS8vIHNldCBudW1iZXIgb2YgYWN0aXZlIHBpeGVscyBpbiBlYWNoIGxpbmUuIERlZmF1bHQgaXMgNzIwIHBpeGVscyBpbiBib3RoIE5UU0MgYW5kIFBBTCBmb3JtYXQKKwljeF93cml0ZShjaC0+dmlkX2FjdGl2ZV9jdGwxLCB3aWR0aCk7CisKKwludW1fbGluZXMgPSAoaGVpZ2h0IC8gMikgJiAweDNGRjsKKwlvZGRfbnVtX2xpbmVzID0gbnVtX2xpbmVzOworCisJaWYgKGRldi0+X2lzTlRTQ19jaDIpIHsKKwkJb2RkX251bV9saW5lcyArPSAxOworCX0KKworCXZhbHVlID0gKG51bV9saW5lcyA8PCAxNikgfCBvZGRfbnVtX2xpbmVzOworCisJLy8gc2V0IG51bWJlciBvZiBhY3RpdmUgbGluZXMgaW4gZmllbGQgMCAodG9wKSBhbmQgZmllbGQgMSAoYm90dG9tKQorCWN4X3dyaXRlKGNoLT52aWRfYWN0aXZlX2N0bDIsIHZhbHVlKTsKKworCWN4X3dyaXRlKGNoLT52aWRfY2R0X3NpemUsIFZJRF9DRFRfU0laRSA+PiAzKTsKK30KKworaW50IGN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hX3Vwc3RyZWFtX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJdTMyIHRtcCA9IDA7CisJaW50IGVyciA9IDA7CisKKwkvLyA2NTYvVklQIFNSQyBVcHN0cmVhbSBDaGFubmVsIEkgJiBKIGFuZCA3IC0gSG9zdCBCdXMgSW50ZXJmYWNlIGZvciBjaGFubmVsIEEtQworCXRtcCA9IGN4X3JlYWQoVklEX0NIX01PREVfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCB8IDB4MUIwMDAxRkYpOworCisJLy8gU2V0IHRoZSBwaHlzaWNhbCBzdGFydCBhZGRyZXNzIG9mIHRoZSBSSVNDIHByb2dyYW0gaW4gdGhlIGluaXRpYWwgcHJvZ3JhbSBjb3VudGVyKElQQykgbWVtYmVyIG9mIHRoZSBjbWRzLgorCWN4X3dyaXRlKHNyYW1fY2gtPmNtZHNfc3RhcnQgKyAwLCBkZXYtPl9kbWFfcGh5c19hZGRyX2NoMik7CisJY3hfd3JpdGUoc3JhbV9jaC0+Y21kc19zdGFydCArIDQsIDApOwkvKiBSaXNjIElQQyBIaWdoIDY0IGJpdHMgNjMtMzIgKi8KKworCS8qIHJlc2V0IGNvdW50ZXIgKi8KKwljeF93cml0ZShzcmFtX2NoLT5ncGNudF9jdGwsIDMpOworCisJLy8gQ2xlYXIgb3VyIGJpdHMgZnJvbSB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KKwljeF93cml0ZShzcmFtX2NoLT5pbnRfc3RhdCwgX2ludHJfbXNrKTsKKworCS8vU2V0IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgZW5hYmxlIGlycS4KKwljeF9zZXQoUENJX0lOVF9NU0ssIGN4X3JlYWQoUENJX0lOVF9NU0spIHwgKDEgPDwgc3JhbV9jaC0+aXJxX2JpdCkpOworCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X21zayk7CisJY3hfd3JpdGUoc3JhbV9jaC0+aW50X21zaywgdG1wIHw9IF9pbnRyX21zayk7CisKKwllcnIgPQorCSAgICByZXF1ZXN0X2lycShkZXYtPnBjaS0+aXJxLCBjeDI1ODIxX3Vwc3RyZWFtX2lycV9jaDIsCisJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgdXBzdHJlYW0gSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJCSAgICAgICBkZXYtPnBjaS0+aXJxKTsKKwkJZ290byBmYWlsX2lycTsKKwl9CisJLy8gU3RhcnQgdGhlIERNQSAgZW5naW5lCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwljeF9zZXQoc3JhbV9jaC0+ZG1hX2N0bCwgdG1wIHwgRkxEX1ZJRF9SSVNDX0VOKTsKKworCWRldi0+X2lzX3J1bm5pbmdfY2gyID0gMTsKKwlkZXYtPl9pc19maXJzdF9mcmFtZV9jaDIgPSAxOworCisJcmV0dXJuIDA7CisKKyAgICAgIGZhaWxfaXJxOgorCWN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY3gyNTgyMV92aWR1cHN0cmVhbV9pbml0X2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5uZWxfc2VsZWN0LAorCQkJCSBpbnQgcGl4ZWxfZm9ybWF0KQoreworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2g7CisJdTMyIHRtcDsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgZGF0YV9mcmFtZV9zaXplID0gMDsKKwlpbnQgcmlzY19idWZmZXJfc2l6ZSA9IDA7CisJaW50IHN0cl9sZW5ndGggPSAwOworCisJaWYgKGRldi0+X2lzX3J1bm5pbmdfY2gyKSB7CisJCXByaW50aygiVmlkZW8gQ2hhbm5lbCBpcyBzdGlsbCBydW5uaW5nIHNvIHJldHVybiFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXYtPl9jaGFubmVsMl91cHN0cmVhbV9zZWxlY3QgPSBjaGFubmVsX3NlbGVjdDsKKwlzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFubmVsX3NlbGVjdF07CisKKwlJTklUX1dPUksoJmRldi0+X2lycV93b3JrX2VudHJ5X2NoMiwgY3gyNTgyMV92aWR1cHNfaGFuZGxlcl9jaDIpOworCWRldi0+X2lycV9xdWV1ZXNfY2gyID0KKwkgICAgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImN4MjU4MjFfd29ya3F1ZXVlMiIpOworCisJaWYgKCFkZXYtPl9pcnFfcXVldWVzX2NoMikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoKSBmb3IgVmlkZW8gRkFJTEVEIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvLyA2NTYvVklQIFNSQyBVcHN0cmVhbSBDaGFubmVsIEkgJiBKIGFuZCA3IC0gSG9zdCBCdXMgSW50ZXJmYWNlIGZvciBjaGFubmVsIEEtQworCXRtcCA9IGN4X3JlYWQoVklEX0NIX01PREVfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCB8IDB4MUIwMDAxRkYpOworCisJZGV2LT5faXNfcnVubmluZ19jaDIgPSAwOworCWRldi0+X2ZyYW1lX2NvdW50X2NoMiA9IDA7CisJZGV2LT5fZmlsZV9zdGF0dXNfY2gyID0gUkVTRVRfU1RBVFVTOworCWRldi0+X2xpbmVzX2NvdW50X2NoMiA9IGRldi0+X2lzTlRTQ19jaDIgPyA0ODAgOiA1NzY7CisJZGV2LT5fcGl4ZWxfZm9ybWF0X2NoMiA9IHBpeGVsX2Zvcm1hdDsKKwlkZXYtPl9saW5lX3NpemVfY2gyID0KKwkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdF9jaDIgPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDIyKSA/IChXSURUSF9EMSAqIDIpIDogKFdJRFRIX0QxICogMykgLyAyOworCWRhdGFfZnJhbWVfc2l6ZSA9IGRldi0+X2lzTlRTQ19jaDIgPyBOVFNDX0RBVEFfQlVGX1NaIDogUEFMX0RBVEFfQlVGX1NaOworCXJpc2NfYnVmZmVyX3NpemUgPQorCSAgICBkZXYtPl9pc05UU0NfY2gyID8gTlRTQ19SSVNDX0JVRl9TSVpFIDogUEFMX1JJU0NfQlVGX1NJWkU7CisKKwlpZiAoZGV2LT5pbnB1dF9maWxlbmFtZV9jaDIpIHsKKwkJc3RyX2xlbmd0aCA9IHN0cmxlbihkZXYtPmlucHV0X2ZpbGVuYW1lX2NoMik7CisJCWRldi0+X2ZpbGVuYW1lX2NoMiA9CisJCSAgICAoY2hhciAqKWttYWxsb2Moc3RyX2xlbmd0aCArIDEsIEdGUF9LRVJORUwpOworCisJCWlmICghZGV2LT5fZmlsZW5hbWVfY2gyKQorCQkJZ290byBlcnJvcjsKKworCQltZW1jcHkoZGV2LT5fZmlsZW5hbWVfY2gyLCBkZXYtPmlucHV0X2ZpbGVuYW1lX2NoMiwKKwkJICAgICAgIHN0cl9sZW5ndGggKyAxKTsKKwl9IGVsc2UgeworCQlzdHJfbGVuZ3RoID0gc3RybGVuKGRldi0+X2RlZmF1bHRuYW1lX2NoMik7CisJCWRldi0+X2ZpbGVuYW1lX2NoMiA9CisJCSAgICAoY2hhciAqKWttYWxsb2Moc3RyX2xlbmd0aCArIDEsIEdGUF9LRVJORUwpOworCisJCWlmICghZGV2LT5fZmlsZW5hbWVfY2gyKQorCQkJZ290byBlcnJvcjsKKworCQltZW1jcHkoZGV2LT5fZmlsZW5hbWVfY2gyLCBkZXYtPl9kZWZhdWx0bmFtZV9jaDIsCisJCSAgICAgICBzdHJfbGVuZ3RoICsgMSk7CisJfQorCisJLy9EZWZhdWx0IGlmIGZpbGVuYW1lIGlzIGVtcHR5IHN0cmluZworCWlmIChzdHJjbXAoZGV2LT5pbnB1dF9maWxlbmFtZV9jaDIsICIiKSA9PSAwKSB7CisJCWlmIChkZXYtPl9pc05UU0NfY2gyKSB7CisJCQlkZXYtPl9maWxlbmFtZV9jaDIgPQorCQkJICAgIChkZXYtPl9waXhlbF9mb3JtYXRfY2gyID09CisJCQkgICAgIFBJWEVMX0ZSTVRfNDExKSA/ICIvcm9vdC92aWQ0MTEueXV2IiA6CisJCQkgICAgIi9yb290L3ZpZHRlc3QueXV2IjsKKwkJfSBlbHNlIHsKKwkJCWRldi0+X2ZpbGVuYW1lX2NoMiA9CisJCQkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdF9jaDIgPT0KKwkJCSAgICAgUElYRUxfRlJNVF80MTEpID8gIi9yb290L3BhbDQxMS55dXYiIDoKKwkJCSAgICAiL3Jvb3QvcGFsNDIyLnl1diI7CisJCX0KKwl9CisKKwlyZXR2YWwgPQorCSAgICBjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF91cHN0cmVhbShkZXYsIHNyYW1fY2gsCisJCQkJCQlkZXYtPl9saW5lX3NpemVfY2gyLCAwKTsKKworCS8qIHNldHVwIGZpZm8gKyBmb3JtYXQgKi8KKwljeDI1ODIxX3NldF9waXhlbGVuZ2luZV9jaDIoZGV2LCBzcmFtX2NoLCBkZXYtPl9waXhlbF9mb3JtYXRfY2gyKTsKKworCWRldi0+dXBzdHJlYW1fcmlzY2J1Zl9zaXplX2NoMiA9IHJpc2NfYnVmZmVyX3NpemUgKiAyOworCWRldi0+dXBzdHJlYW1fZGF0YWJ1Zl9zaXplX2NoMiA9IGRhdGFfZnJhbWVfc2l6ZSAqIDI7CisKKwkvL0FsbG9jYXRpbmcgYnVmZmVycyBhbmQgcHJlcGFyZSBSSVNDIHByb2dyYW0KKwlyZXR2YWwgPQorCSAgICBjeDI1ODIxX3Vwc3RyZWFtX2J1ZmZlcl9wcmVwYXJlX2NoMihkZXYsIHNyYW1fY2gsCisJCQkJCQlkZXYtPl9saW5lX3NpemVfY2gyKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczogRmFpbGVkIHRvIHNldCB1cCBWaWRlbyB1cHN0cmVhbSBidWZmZXJzIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJY3gyNTgyMV9zdGFydF92aWRlb19kbWFfdXBzdHJlYW1fY2gyKGRldiwgc3JhbV9jaCk7CisKKwlyZXR1cm4gMDsKKworICAgICAgZXJyb3I6CisJY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihkZXYpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZmVlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4sIDxzaHUubGluQGNvbmV4YW50LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2RlZmluZSBPUEVOX0ZJTEVfMSAgICAgICAgICAgMAorI2RlZmluZSBOVU1fUFJPR1MgICAgICAgICAgICAgOAorI2RlZmluZSBOVU1fRlJBTUVTICAgICAgICAgICAgMgorI2RlZmluZSBPRERfRklFTEQgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOX0ZJRUxEICAgICAgICAgICAgMQorI2RlZmluZSBUT1BfT0ZGU0VUICAgICAgICAgICAgMAorI2RlZmluZSBGSUZPX0RJU0FCTEUgICAgICAgICAgMAorI2RlZmluZSBGSUZPX0VOQUJMRSAgICAgICAgICAgMQorI2RlZmluZSBURVNUX0ZSQU1FUyAgICAgICAgICAgNQorI2RlZmluZSBFTkRfT0ZfRklMRSAgICAgICAgICAgMAorI2RlZmluZSBJTl9QUk9HUkVTUyAgICAgICAgICAgMQorI2RlZmluZSBSRVNFVF9TVEFUVVMgICAgICAgICAgLTEKKyNkZWZpbmUgTlVNX05PX09QUyAgICAgICAgICAgIDUKKworLy8gUEFMIGFuZCBOVFNDIGxpbmUgc2l6ZXMgYW5kIG51bWJlciBvZiBsaW5lcy4KKyNkZWZpbmUgV0lEVEhfRDEgICAgICAgICAgICAgIDcyMAorI2RlZmluZSBOVFNDX0xJTkVTX1BFUl9GUkFNRSAgNDgwCisjZGVmaW5lIFBBTF9MSU5FU19QRVJfRlJBTUUgICA1NzYKKyNkZWZpbmUgUEFMX0xJTkVfU1ogICAgICAgICAgIDE0NDAKKyNkZWZpbmUgWTQyMl9MSU5FX1NaICAgICAgICAgIDE0NDAKKyNkZWZpbmUgWTQxMV9MSU5FX1NaICAgICAgICAgIDEwODAKKyNkZWZpbmUgTlRTQ19GSUVMRF9IRUlHSFQgICAgIDI0MAorI2RlZmluZSBOVFNDX09ERF9GTERfTElORVMgICAgMjQxCisjZGVmaW5lIFBBTF9GSUVMRF9IRUlHSFQgICAgICAyODgKKworI2RlZmluZSBGUkFNRV9TSVpFX05UU0NfWTQyMiAgICAoTlRTQ19MSU5FU19QRVJfRlJBTUUgKiBZNDIyX0xJTkVfU1opCisjZGVmaW5lIEZSQU1FX1NJWkVfTlRTQ19ZNDExICAgIChOVFNDX0xJTkVTX1BFUl9GUkFNRSAqIFk0MTFfTElORV9TWikKKyNkZWZpbmUgRlJBTUVfU0laRV9QQUxfWTQyMiAgICAgKFBBTF9MSU5FU19QRVJfRlJBTUUgKiBZNDIyX0xJTkVfU1opCisjZGVmaW5lIEZSQU1FX1NJWkVfUEFMX1k0MTEgICAgIChQQUxfTElORVNfUEVSX0ZSQU1FICogWTQxMV9MSU5FX1NaKQorCisjZGVmaW5lIE5UU0NfREFUQV9CVUZfU1ogICAgICAgIChZNDIyX0xJTkVfU1ogKiBOVFNDX0xJTkVTX1BFUl9GUkFNRSkKKyNkZWZpbmUgUEFMX0RBVEFfQlVGX1NaICAgICAgICAgKFk0MjJfTElORV9TWiAqIFBBTF9MSU5FU19QRVJfRlJBTUUpCisKKyNkZWZpbmUgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgICAxNgorI2RlZmluZSBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSAgICAgIDQKKyNkZWZpbmUgSlVNUF9JTlNUUlVDVElPTl9TSVpFICAgICAgICAgICAxMgorI2RlZmluZSBNQVhTSVpFX05PX09QUyAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIERXT1JEX1NJWkUgICAgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIFVTRV9SSVNDX05PT1BfVklERU8gICAxCisKKyNpZmRlZiBVU0VfUklTQ19OT09QX1ZJREVPCisjZGVmaW5lIFBBTF9VU19WSURfUFJPR19TSVpFICAgICAgKChQQUxfRklFTERfSEVJR0hUKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyAgIFwKKwkJCQkgICAgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisKKyNkZWZpbmUgUEFMX1JJU0NfQlVGX1NJWkUgICAgICAgICAoMiAqIFBBTF9VU19WSURfUFJPR19TSVpFKQorCisjZGVmaW5lIFBBTF9WSURfUFJPR19TSVpFICAgICAgICAgKChQQUxfRklFTERfSEVJR0hUKjIpICogMyAqIERXT1JEX1NJWkUgKyAyKlJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgXAorCQkJCSAgICBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIEpVTVBfSU5TVFJVQ1RJT05fU0laRSArIDIqTlVNX05PX09QUypEV09SRF9TSVpFKQorCisjZGVmaW5lIE9ERF9GTERfUEFMX1BST0dfU0laRSAgICAgKChQQUxfRklFTERfSEVJR0hUKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgTlVNX05PX09QUypEV09SRF9TSVpFKQorCisjZGVmaW5lIE5UU0NfVVNfVklEX1BST0dfU0laRSAgICAgKChOVFNDX09ERF9GTERfTElORVMgKyAxKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgIEpVTVBfSU5TVFJVQ1RJT05fU0laRSArIE5VTV9OT19PUFMqRFdPUkRfU0laRSkKKworI2RlZmluZSBOVFNDX1JJU0NfQlVGX1NJWkUgICAgICAgICgyICogKFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgTlRTQ19VU19WSURfUFJPR19TSVpFKSkKKworI2RlZmluZSBGUkFNRTFfVklEX1BST0dfU0laRSAgICAgICgoTlRTQ19PRERfRkxEX0xJTkVTICsgTlRTQ19GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyAyKlJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgXAorCQkJCSAgICBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIEpVTVBfSU5TVFJVQ1RJT05fU0laRSArIDIqTlVNX05PX09QUypEV09SRF9TSVpFKQorI2RlZmluZSBPRERfRkxEX05UU0NfUFJPR19TSVpFICAgICgoTlRTQ19PRERfRkxEX0xJTkVTKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgTlVNX05PX09QUypEV09SRF9TSVpFKQorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1JJU0NfTk9PUF9WSURFTworI2RlZmluZSBQQUxfVVNfVklEX1BST0dfU0laRSAgICAgICgoUEFMX0ZJRUxEX0hFSUdIVCArIDEpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSApCisjZGVmaW5lIFBBTF9SSVNDX0JVRl9TSVpFICAgICAgICAgKCAyICogKFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgUEFMX1VTX1ZJRF9QUk9HX1NJWkUpICkKKyNkZWZpbmUgUEFMX1ZJRF9QUk9HX1NJWkUgICAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQqMikgKiAzICogRFdPUkRfU0laRSArIDIqUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFICkKKyNkZWZpbmUgT0REX0ZMRF9QQUxfUFJPR19TSVpFICAgICAoKFBBTF9GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICkKKyNkZWZpbmUgT0REX0ZMRF9OVFNDX1BST0dfU0laRSAgICAoKE5UU0NfT0REX0ZMRF9MSU5FUykgKiAzICogRFdPUkRfU0laRSArIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKQorI2RlZmluZSBOVFNDX1VTX1ZJRF9QUk9HX1NJWkUgICAgICgoTlRTQ19PRERfRkxEX0xJTkVTICsgMSkgKiAzICogRFdPUkRfU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFKQorI2RlZmluZSBOVFNDX1JJU0NfQlVGX1NJWkUgICAgICAgICgyICogKFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgTlRTQ19VU19WSURfUFJPR19TSVpFKSApCisjZGVmaW5lIEZSQU1FMV9WSURfUFJPR19TSVpFICAgICAgKChOVFNDX09ERF9GTERfTElORVMgKyBOVFNDX0ZJRUxEX0hFSUdIVCkgKiAzICogRFdPUkRfU0laRSArIDIqUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFICkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkN2RkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmMKQEAgLTAsMCArMSw4OTQgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiwgPHNodS5saW5AY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby11cHN0cmVhbS5oIgorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDI1ODIxIGJhc2VkIFRWIGNhcmRzIik7CitNT0RVTEVfQVVUSE9SKCJIaWVwIEh1eW5oIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBfaW50cl9tc2sgPQorICAgIEZMRF9WSURfU1JDX1JJU0MxIHwgRkxEX1ZJRF9TUkNfVUYgfCBGTERfVklEX1NSQ19TWU5DIHwgRkxEX1ZJRF9TUkNfT1BDX0VSUjsKKworaW50IGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX3Vwc3RyZWFtKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwKKwkJCQkJdW5zaWduZWQgaW50IGJwbCwgdTMyIHJpc2MpCit7CisJdW5zaWduZWQgaW50IGksIGxpbmVzOworCXUzMiBjZHQ7CisKKwlpZiAoY2gtPmNtZHNfc3RhcnQgPT0gMCkgeworCQljeF93cml0ZShjaC0+cHRyMV9yZWcsIDApOworCQljeF93cml0ZShjaC0+cHRyMl9yZWcsIDApOworCQljeF93cml0ZShjaC0+Y250Ml9yZWcsIDApOworCQljeF93cml0ZShjaC0+Y250MV9yZWcsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwlicGwgPSAoYnBsICsgNykgJiB+NzsJLyogYWxpZ25tZW50ICovCisJY2R0ID0gY2gtPmNkdDsKKwlsaW5lcyA9IGNoLT5maWZvX3NpemUgLyBicGw7CisKKwlpZiAobGluZXMgPiA0KSB7CisJCWxpbmVzID0gNDsKKwl9CisKKwlCVUdfT04obGluZXMgPCAyKTsKKworCS8qIHdyaXRlIENEVCAqLworCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSwgY2gtPmZpZm9fc3RhcnQgKyBicGwgKiBpKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgNCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDgsIDApOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyAxMiwgMCk7CisJfQorCisJLyogd3JpdGUgQ01EUyAqLworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMCwgcmlzYyk7CisKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDQsIDApOworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgOCwgY2R0KTsKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDEyLCAobGluZXMgKiAxNikgPj4gMyk7CisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxNiwgY2gtPmN0cmxfc3RhcnQpOworCisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgVklEX0lRX1NJWkVfRFcpOworCisJZm9yIChpID0gMjQ7IGkgPCA4MDsgaSArPSA0KQorCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIGksIDApOworCisJLyogZmlsbCByZWdpc3RlcnMgKi8KKwljeF93cml0ZShjaC0+cHRyMV9yZWcsIGNoLT5maWZvX3N0YXJ0KTsKKwljeF93cml0ZShjaC0+cHRyMl9yZWcsIGNkdCk7CisJY3hfd3JpdGUoY2gtPmNudDJfcmVnLCAobGluZXMgKiAxNikgPj4gMyk7CisJY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAoYnBsID4+IDMpIC0gMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fbGUzMiAqY3gyNTgyMV91cGRhdGVfcmlzY3Byb2dyYW0oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgX19sZTMyICogcnAsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJCSAgdW5zaWduZWQgaW50IGJwbCwgdTMyIHN5bmNfbGluZSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbGluZXMsIGludCBmaWZvX2VuYWJsZSwKKwkJCQkJICBpbnQgZmllbGRfdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGluZSwgaTsKKwlpbnQgZGlzdF9iZXR3bl9zdGFydHMgPSBicGwgKiAyOworCisJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgc3luY19saW5lKTsKKworCWlmIChVU0VfUklTQ19OT09QX1ZJREVPKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fTk9fT1BTOyBpKyspIHsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX05PT1ApOworCQl9CisJfQorCisJLyogc2NhbiBsaW5lcyAqLworCWZvciAobGluZSA9IDA7IGxpbmUgPCBsaW5lczsgbGluZSsrKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1JFQUQgfCBSSVNDX1NPTCB8IFJJU0NfRU9MIHwgYnBsKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKGRldi0+X2RhdGFfYnVmX3BoeXNfYWRkciArIG9mZnNldCk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJCWlmICgobGluZXMgPD0gTlRTQ19GSUVMRF9IRUlHSFQpCisJCSAgICB8fCAobGluZSA8IChOVFNDX0ZJRUxEX0hFSUdIVCAtIDEpKSB8fCAhKGRldi0+X2lzTlRTQykpIHsKKwkJCW9mZnNldCArPSBkaXN0X2JldHduX3N0YXJ0czsKKwkJfQorCX0KKworCXJldHVybiBycDsKK30KKworc3RhdGljIF9fbGUzMiAqY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBfX2xlMzIgKiBycCwKKwkJCQkJICAgZG1hX2FkZHJfdCBkYXRhYnVmX3BoeXNfYWRkciwKKwkJCQkJICAgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHN5bmNfbGluZSwKKwkJCQkJICAgdW5zaWduZWQgaW50IGJwbCwgdW5zaWduZWQgaW50IGxpbmVzLAorCQkJCQkgICBpbnQgZmlmb19lbmFibGUsIGludCBmaWVsZF90eXBlKQoreworCXVuc2lnbmVkIGludCBsaW5lLCBpOworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPQorCSAgICAmZGV2LT5zcmFtX2NoYW5uZWxzW2Rldi0+X2NoYW5uZWxfdXBzdHJlYW1fc2VsZWN0XTsKKwlpbnQgZGlzdF9iZXR3bl9zdGFydHMgPSBicGwgKiAyOworCisJLyogc3luYyBpbnN0cnVjdGlvbiAqLworCWlmIChzeW5jX2xpbmUgIT0gTk9fU1lOQ19MSU5FKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1JFU1lOQyB8IHN5bmNfbGluZSk7CisJfQorCisJaWYgKFVTRV9SSVNDX05PT1BfVklERU8pIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9OT19PUFM7IGkrKykgeworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfTk9PUCk7CisJCX0KKwl9CisKKwkvKiBzY2FuIGxpbmVzICovCisJZm9yIChsaW5lID0gMDsgbGluZSA8IGxpbmVzOyBsaW5lKyspIHsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVBRCB8IFJJU0NfU09MIHwgUklTQ19FT0wgfCBicGwpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoZGF0YWJ1Zl9waHlzX2FkZHIgKyBvZmZzZXQpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCQlpZiAoKGxpbmVzIDw9IE5UU0NfRklFTERfSEVJR0hUKQorCQkgICAgfHwgKGxpbmUgPCAoTlRTQ19GSUVMRF9IRUlHSFQgLSAxKSkgfHwgIShkZXYtPl9pc05UU0MpKSB7CisJCQlvZmZzZXQgKz0gZGlzdF9iZXR3bl9zdGFydHM7CS8vdG8gc2tpcCB0aGUgb3RoZXIgZmllbGQgbGluZQorCQl9CisKKwkJLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBlbmFibGUgdGhlIEZJRk8gYWZ0ZXIgdGhlIGZpcnN0IDQgbGluZXMKKwkJLy8gRm9yIHRoZSB1cHN0cmVhbSB2aWRlbyBjaGFubmVsLCB0aGUgcmlzYyBlbmdpbmUgd2lsbCBlbmFibGUgdGhlIEZJRk8uCisJCWlmIChmaWZvX2VuYWJsZSAmJiBsaW5lID09IDMpIHsKKwkJCSoocnArKykgPSBSSVNDX1dSSVRFQ1I7CisJCQkqKHJwKyspID0gc3JhbV9jaC0+ZG1hX2N0bDsKKwkJCSoocnArKykgPSBGTERfVklEX0ZJRk9fRU47CisJCQkqKHJwKyspID0gMHgwMDAwMDAwMTsKKwkJfQorCX0KKworCXJldHVybiBycDsKK30KKworaW50IGN4MjU4MjFfcmlzY19idWZmZXJfdXBzdHJlYW0oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJIHVuc2lnbmVkIGludCB0b3Bfb2Zmc2V0LAorCQkJCSB1bnNpZ25lZCBpbnQgYnBsLCB1bnNpZ25lZCBpbnQgbGluZXMpCit7CisJX19sZTMyICpycDsKKwlpbnQgZmlmb19lbmFibGUgPSAwOworCWludCBzaW5nbGVmaWVsZF9saW5lcyA9IGxpbmVzID4+IDE7CS8vZ2V0IGxpbmUgY291bnQgZm9yIHNpbmdsZSBmaWVsZAorCWludCBvZGRfbnVtX2xpbmVzID0gc2luZ2xlZmllbGRfbGluZXM7CisJaW50IGZyYW1lID0gMDsKKwlpbnQgZnJhbWVfc2l6ZSA9IDA7CisJaW50IGRhdGFidWZfb2Zmc2V0ID0gMDsKKwlpbnQgcmlzY19wcm9ncmFtX3NpemUgPSAwOworCWludCByaXNjX2ZsYWcgPSBSSVNDX0NOVF9SRVNFVDsKKwl1bnNpZ25lZCBpbnQgYm90dG9tX29mZnNldCA9IGJwbDsKKwlkbWFfYWRkcl90IHJpc2NfcGh5c19qdW1wX2FkZHI7CisKKwlpZiAoZGV2LT5faXNOVFNDKSB7CisJCW9kZF9udW1fbGluZXMgPSBzaW5nbGVmaWVsZF9saW5lcyArIDE7CisJCXJpc2NfcHJvZ3JhbV9zaXplID0gRlJBTUUxX1ZJRF9QUk9HX1NJWkU7CisJCWZyYW1lX3NpemUgPQorCQkgICAgKGJwbCA9PQorCQkgICAgIFk0MTFfTElORV9TWikgPyBGUkFNRV9TSVpFX05UU0NfWTQxMSA6CisJCSAgICBGUkFNRV9TSVpFX05UU0NfWTQyMjsKKwl9IGVsc2UgeworCQlyaXNjX3Byb2dyYW1fc2l6ZSA9IFBBTF9WSURfUFJPR19TSVpFOworCQlmcmFtZV9zaXplID0KKwkJICAgIChicGwgPT0KKwkJICAgICBZNDExX0xJTkVfU1opID8gRlJBTUVfU0laRV9QQUxfWTQxMSA6IEZSQU1FX1NJWkVfUEFMX1k0MjI7CisJfQorCisJLyogVmlydHVhbCBhZGRyZXNzIG9mIFJpc2MgYnVmZmVyIHByb2dyYW0gKi8KKwlycCA9IGRldi0+X2RtYV92aXJ0X2FkZHI7CisKKwlmb3IgKGZyYW1lID0gMDsgZnJhbWUgPCBOVU1fRlJBTUVTOyBmcmFtZSsrKSB7CisJCWRhdGFidWZfb2Zmc2V0ID0gZnJhbWVfc2l6ZSAqIGZyYW1lOworCisJCWlmIChVTlNFVCAhPSB0b3Bfb2Zmc2V0KSB7CisJCQlmaWZvX2VuYWJsZSA9IChmcmFtZSA9PSAwKSA/IEZJRk9fRU5BQkxFIDogRklGT19ESVNBQkxFOworCQkJcnAgPSBjeDI1ODIxX3Jpc2NfZmllbGRfdXBzdHJlYW0oZGV2LCBycCwKKwkJCQkJCQkgZGV2LT4KKwkJCQkJCQkgX2RhdGFfYnVmX3BoeXNfYWRkciArCisJCQkJCQkJIGRhdGFidWZfb2Zmc2V0LAorCQkJCQkJCSB0b3Bfb2Zmc2V0LCAwLCBicGwsCisJCQkJCQkJIG9kZF9udW1fbGluZXMsCisJCQkJCQkJIGZpZm9fZW5hYmxlLAorCQkJCQkJCSBPRERfRklFTEQpOworCQl9CisKKwkJZmlmb19lbmFibGUgPSBGSUZPX0RJU0FCTEU7CisKKwkJLy9FdmVuIEZpZWxkCisJCXJwID0gY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtKGRldiwgcnAsCisJCQkJCQkgZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyICsKKwkJCQkJCSBkYXRhYnVmX29mZnNldCwgYm90dG9tX29mZnNldCwKKwkJCQkJCSAweDIwMCwgYnBsLCBzaW5nbGVmaWVsZF9saW5lcywKKwkJCQkJCSBmaWZvX2VuYWJsZSwgRVZFTl9GSUVMRCk7CisKKwkJaWYgKGZyYW1lID09IDApIHsKKwkJCXJpc2NfZmxhZyA9IFJJU0NfQ05UX1JFU0VUOworCQkJcmlzY19waHlzX2p1bXBfYWRkciA9CisJCQkgICAgZGV2LT5fZG1hX3BoeXNfc3RhcnRfYWRkciArIHJpc2NfcHJvZ3JhbV9zaXplOworCQl9IGVsc2UgeworCQkJcmlzY19waHlzX2p1bXBfYWRkciA9IGRldi0+X2RtYV9waHlzX3N0YXJ0X2FkZHI7CisJCQlyaXNjX2ZsYWcgPSBSSVNDX0NOVF9JTkM7CisJCX0KKworCQkvLyBMb29wIHRvIDJuZEZyYW1lUklTQyBvciB0byBTdGFydCBvZiBSaXNjIHByb2dyYW0gJiBnZW5lcmF0ZSBJUlEKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IHJpc2NfZmxhZyk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjX3BoeXNfanVtcF9hZGRyKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9CisJICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9JXTsKKwl1MzIgdG1wID0gMDsKKworCWlmICghZGV2LT5faXNfcnVubmluZykgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogTm8gdmlkZW8gZmlsZSBpcyBjdXJyZW50bHkgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvL0Rpc2FibGUgUklTQyBpbnRlcnJ1cHRzCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXNrKTsKKwljeF93cml0ZShzcmFtX2NoLT5pbnRfbXNrLCB0bXAgJiB+X2ludHJfbXNrKTsKKworCS8vVHVybiBPRkYgcmlzYyBhbmQgZmlmbyBlbmFibGUKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCWN4X3dyaXRlKHNyYW1fY2gtPmRtYV9jdGwsIHRtcCAmIH4oRkxEX1ZJRF9GSUZPX0VOIHwgRkxEX1ZJRF9SSVNDX0VOKSk7CisKKwkvL0NsZWFyIGRhdGEgYnVmZmVyIG1lbW9yeQorCWlmIChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIpCisJCW1lbXNldChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIsIDAsIGRldi0+X2RhdGFfYnVmX3NpemUpOworCisJZGV2LT5faXNfcnVubmluZyA9IDA7CisJZGV2LT5faXNfZmlyc3RfZnJhbWUgPSAwOworCWRldi0+X2ZyYW1lX2NvdW50ID0gMDsKKwlkZXYtPl9maWxlX3N0YXR1cyA9IEVORF9PRl9GSUxFOworCisJaWYgKGRldi0+X2lycV9xdWV1ZXMpIHsKKwkJa2ZyZWUoZGV2LT5faXJxX3F1ZXVlcyk7CisJCWRldi0+X2lycV9xdWV1ZXMgPSBOVUxMOworCX0KKworCWlmIChkZXYtPl9maWxlbmFtZSAhPSBOVUxMKQorCQlrZnJlZShkZXYtPl9maWxlbmFtZSk7CisKKwl0bXAgPSBjeF9yZWFkKFZJRF9DSF9NT0RFX1NFTCk7CisJY3hfd3JpdGUoVklEX0NIX01PREVfU0VMLCB0bXAgJiAweEZGRkZGRTAwKTsKK30KKwordm9pZCBjeDI1ODIxX2ZyZWVfbWVtX3Vwc3RyZWFtX2NoMShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5faXNfcnVubmluZykgeworCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gxKGRldik7CisJfQorCisJaWYgKGRldi0+X2RtYV92aXJ0X2FkZHIpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT5fcmlzY19zaXplLAorCQkJCSAgICBkZXYtPl9kbWFfdmlydF9hZGRyLCBkZXYtPl9kbWFfcGh5c19hZGRyKTsKKwkJZGV2LT5fZG1hX3ZpcnRfYWRkciA9IE5VTEw7CisJfQorCisJaWYgKGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcikgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPl9kYXRhX2J1Zl9zaXplLAorCQkJCSAgICBkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIsCisJCQkJICAgIGRldi0+X2RhdGFfYnVmX3BoeXNfYWRkcik7CisJCWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciA9IE5VTEw7CisJfQorfQorCitpbnQgY3gyNTgyMV9nZXRfZnJhbWUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJc3RydWN0IGZpbGUgKm15ZmlsZTsKKwlpbnQgZnJhbWVfaW5kZXhfdGVtcCA9IGRldi0+X2ZyYW1lX2luZGV4OworCWludCBpID0gMDsKKwlpbnQgbGluZV9zaXplID0KKwkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdCA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gWTQxMV9MSU5FX1NaIDogWTQyMl9MSU5FX1NaOworCWludCBmcmFtZV9zaXplID0gMDsKKwlpbnQgZnJhbWVfb2Zmc2V0ID0gMDsKKwlzc2l6ZV90IHZmc19yZWFkX3JldHZhbCA9IDA7CisJY2hhciBteWJ1ZltsaW5lX3NpemVdOworCWxvZmZfdCBmaWxlX29mZnNldDsKKwlsb2ZmX3QgcG9zOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKKwlpZiAoZGV2LT5fZmlsZV9zdGF0dXMgPT0gRU5EX09GX0ZJTEUpCisJCXJldHVybiAwOworCisJaWYgKGRldi0+X2lzTlRTQykgeworCQlmcmFtZV9zaXplID0KKwkJICAgIChsaW5lX3NpemUgPT0KKwkJICAgICBZNDExX0xJTkVfU1opID8gRlJBTUVfU0laRV9OVFNDX1k0MTEgOgorCQkgICAgRlJBTUVfU0laRV9OVFNDX1k0MjI7CisJfSBlbHNlIHsKKwkJZnJhbWVfc2l6ZSA9CisJCSAgICAobGluZV9zaXplID09CisJCSAgICAgWTQxMV9MSU5FX1NaKSA/IEZSQU1FX1NJWkVfUEFMX1k0MTEgOiBGUkFNRV9TSVpFX1BBTF9ZNDIyOworCX0KKworCWZyYW1lX29mZnNldCA9IChmcmFtZV9pbmRleF90ZW1wID4gMCkgPyBmcmFtZV9zaXplIDogMDsKKwlmaWxlX29mZnNldCA9IGRldi0+X2ZyYW1lX2NvdW50ICogZnJhbWVfc2l6ZTsKKworCW15ZmlsZSA9IGZpbHBfb3BlbihkZXYtPl9maWxlbmFtZSwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7CisKKwlpZiAoSVNfRVJSKG15ZmlsZSkpIHsKKwkJY29uc3QgaW50IG9wZW5fZXJybm8gPSAtUFRSX0VSUihteWZpbGUpOworCQlwcmludGsoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkISBcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5fZmlsZW5hbWUsIG9wZW5fZXJybm8pOworCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOworCX0gZWxzZSB7CisJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKKwkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgeworCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXBvcyA9IG15ZmlsZS0+Zl9wb3M7CisJCW9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5fbGluZXNfY291bnQ7IGkrKykgeworCQkJcG9zID0gZmlsZV9vZmZzZXQ7CisKKwkJCXZmc19yZWFkX3JldHZhbCA9CisJCQkgICAgdmZzX3JlYWQobXlmaWxlLCBteWJ1ZiwgbGluZV9zaXplLCAmcG9zKTsKKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA+IDAgJiYgdmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZQorCQkJICAgICYmIGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciAhPSBOVUxMKSB7CisJCQkJbWVtY3B5KCh2b2lkICopKGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciArCisJCQkJCQlmcmFtZV9vZmZzZXQgLyA0KSwgbXlidWYsCisJCQkJICAgICAgIHZmc19yZWFkX3JldHZhbCk7CisJCQl9CisKKwkJCWZpbGVfb2Zmc2V0ICs9IHZmc19yZWFkX3JldHZhbDsKKwkJCWZyYW1lX29mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CisKKwkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPCBsaW5lX3NpemUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCisJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpID4gMCkKKwkJCWRldi0+X2ZyYW1lX2NvdW50Kys7CisKKwkJZGV2LT5fZmlsZV9zdGF0dXMgPQorCQkgICAgKHZmc19yZWFkX3JldHZhbCA9PSBsaW5lX3NpemUpID8gSU5fUFJPR1JFU1MgOiBFTkRfT0ZfRklMRTsKKworCQlzZXRfZnMob2xkX2ZzKTsKKwkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX3ZpZHVwc19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIF9pcnFfd29ya19lbnRyeSk7CisKKwlpZiAoIWRldikgeworCQlwcmludGsoIkVSUk9SICVzKCk6IHNpbmNlIGNvbnRhaW5lcl9vZih3b3JrX3N0cnVjdCkgRkFJTEVEISBcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwljeDI1ODIxX2dldF9mcmFtZShkZXYsCisJCQkgICZkZXYtPnNyYW1fY2hhbm5lbHNbZGV2LT5fY2hhbm5lbF91cHN0cmVhbV9zZWxlY3RdKTsKK30KKworaW50IGN4MjU4MjFfb3BlbmZpbGUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJc3RydWN0IGZpbGUgKm15ZmlsZTsKKwlpbnQgaSA9IDAsIGogPSAwOworCWludCBsaW5lX3NpemUgPQorCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0ID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBZNDExX0xJTkVfU1ogOiBZNDIyX0xJTkVfU1o7CisJc3NpemVfdCB2ZnNfcmVhZF9yZXR2YWwgPSAwOworCWNoYXIgbXlidWZbbGluZV9zaXplXTsKKwlsb2ZmX3QgcG9zOworCWxvZmZfdCBvZmZzZXQgPSAodW5zaWduZWQgbG9uZykwOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKKwlteWZpbGUgPSBmaWxwX29wZW4oZGV2LT5fZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19MQVJHRUZJTEUsIDApOworCisJaWYgKElTX0VSUihteWZpbGUpKSB7CisJCWNvbnN0IGludCBvcGVuX2Vycm5vID0gLVBUUl9FUlIobXlmaWxlKTsKKwkJcHJpbnRrKCIlcygpOiBFUlJPUiBvcGVuaW5nIGZpbGUoJXMpIHdpdGggZXJybm8gPSAlZCEgXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRldi0+X2ZpbGVuYW1lLCBvcGVuX2Vycm5vKTsKKwkJcmV0dXJuIFBUUl9FUlIobXlmaWxlKTsKKwl9IGVsc2UgeworCQlpZiAoIShteWZpbGUtPmZfb3ApKSB7CisJCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEiLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJaWYgKCFteWZpbGUtPmZfb3AtPnJlYWQpIHsKKwkJCXByaW50aworCQkJICAgICgiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISAgUmV0dXJuaW5nLiIsCisJCQkgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcG9zID0gbXlmaWxlLT5mX3BvczsKKwkJb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCisJCWZvciAoaiA9IDA7IGogPCBOVU1fRlJBTUVTOyBqKyspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPl9saW5lc19jb3VudDsgaSsrKSB7CisJCQkJcG9zID0gb2Zmc2V0OworCisJCQkJdmZzX3JlYWRfcmV0dmFsID0KKwkJCQkgICAgdmZzX3JlYWQobXlmaWxlLCBteWJ1ZiwgbGluZV9zaXplLCAmcG9zKTsKKworCQkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPiAwCisJCQkJICAgICYmIHZmc19yZWFkX3JldHZhbCA9PSBsaW5lX3NpemUKKwkJCQkgICAgJiYgZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJCQkJbWVtY3B5KCh2b2lkICopKGRldi0+CisJCQkJCQkJX2RhdGFfYnVmX3ZpcnRfYWRkciArCisJCQkJCQkJb2Zmc2V0IC8gNCksIG15YnVmLAorCQkJCQkgICAgICAgdmZzX3JlYWRfcmV0dmFsKTsKKwkJCQl9CisKKwkJCQlvZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOworCisJCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSAgICAgICAiRG9uZTogZXhpdCAlcygpIHNpbmNlIG5vIG1vcmUgYnl0ZXMgdG8gcmVhZCBmcm9tIFZpZGVvIGZpbGUuXG4iLAorCQkJCQkgICAgICAgX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpID4gMCkKKwkJCQlkZXYtPl9mcmFtZV9jb3VudCsrOworCisJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlkZXYtPl9maWxlX3N0YXR1cyA9CisJCSAgICAodmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZSkgPyBJTl9QUk9HUkVTUyA6IEVORF9PRl9GSUxFOworCisJCXNldF9mcyhvbGRfZnMpOworCQlteWZpbGUtPmZfcG9zID0gMDsKKwkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY3gyNTgyMV91cHN0cmVhbV9idWZmZXJfcHJlcGFyZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCwgaW50IGJwbCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWRtYV9hZGRyX3QgZGF0YV9kbWFfYWRkcjsKKworCWlmIChkZXYtPl9kbWFfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT51cHN0cmVhbV9yaXNjYnVmX3NpemUsCisJCQkJICAgIGRldi0+X2RtYV92aXJ0X2FkZHIsIGRldi0+X2RtYV9waHlzX2FkZHIpOworCX0KKworCWRldi0+X2RtYV92aXJ0X2FkZHIgPQorCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT51cHN0cmVhbV9yaXNjYnVmX3NpemUsCisJCQkJICZkbWFfYWRkcik7CisJZGV2LT5fZG1hX3ZpcnRfc3RhcnRfYWRkciA9IGRldi0+X2RtYV92aXJ0X2FkZHI7CisJZGV2LT5fZG1hX3BoeXNfc3RhcnRfYWRkciA9IGRtYV9hZGRyOworCWRldi0+X2RtYV9waHlzX2FkZHIgPSBkbWFfYWRkcjsKKwlkZXYtPl9yaXNjX3NpemUgPSBkZXYtPnVwc3RyZWFtX3Jpc2NidWZfc2l6ZTsKKworCWlmICghZGV2LT5fZG1hX3ZpcnRfYWRkcikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgUmlzYyBidWZmZXIhIFJldHVybmluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvL0NsZWFyIG1lbW9yeSBhdCBhZGRyZXNzCisJbWVtc2V0KGRldi0+X2RtYV92aXJ0X2FkZHIsIDAsIGRldi0+X3Jpc2Nfc2l6ZSk7CisKKwlpZiAoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemUsCisJCQkJICAgIGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciwKKwkJCQkgICAgZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyKTsKKwl9CisJLy9Gb3IgVmlkZW8gRGF0YSBidWZmZXIgYWxsb2NhdGlvbgorCWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPnVwc3RyZWFtX2RhdGFidWZfc2l6ZSwKKwkJCQkgJmRhdGFfZG1hX2FkZHIpOworCWRldi0+X2RhdGFfYnVmX3BoeXNfYWRkciA9IGRhdGFfZG1hX2FkZHI7CisJZGV2LT5fZGF0YV9idWZfc2l6ZSA9IGRldi0+dXBzdHJlYW1fZGF0YWJ1Zl9zaXplOworCisJaWYgKCFkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjE6IEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLy9DbGVhciBtZW1vcnkgYXQgYWRkcmVzcworCW1lbXNldChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIsIDAsIGRldi0+X2RhdGFfYnVmX3NpemUpOworCisJcmV0ID0gY3gyNTgyMV9vcGVuZmlsZShkZXYsIHNyYW1fY2gpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLy9DcmVhdGUgUklTQyBwcm9ncmFtcworCXJldCA9CisJICAgIGN4MjU4MjFfcmlzY19idWZmZXJfdXBzdHJlYW0oZGV2LCBkZXYtPnBjaSwgMCwgYnBsLAorCQkJCQkgZGV2LT5fbGluZXNfY291bnQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJjeDI1ODIxOiBGYWlsZWQgY3JlYXRpbmcgVmlkZW8gVXBzdHJlYW0gUmlzYyBwcm9ncmFtcyEgXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworaW50IGN4MjU4MjFfdmlkZW9fdXBzdHJlYW1faXJxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0sCisJCQkgICAgICAgdTMyIHN0YXR1cykKK3sKKwl1MzIgaW50X21za190bXA7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dOworCWludCBzaW5nbGVmaWVsZF9saW5lcyA9IE5UU0NfRklFTERfSEVJR0hUOworCWludCBsaW5lX3NpemVfaW5fYnl0ZXMgPSBZNDIyX0xJTkVfU1o7CisJaW50IG9kZF9yaXNjX3Byb2dfc2l6ZSA9IDA7CisJZG1hX2FkZHJfdCByaXNjX3BoeXNfanVtcF9hZGRyOworCV9fbGUzMiAqcnA7CisKKwlpZiAoc3RhdHVzICYgRkxEX1ZJRF9TUkNfUklTQzEpIHsKKwkJLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyBvbmUgcHJvZ3JhbSBwZXIgY2FsbAorCQl1MzIgcHJvZ19jbnQgPSBjeF9yZWFkKGNoYW5uZWwtPmdwY250KTsKKworCQkvL1NpbmNlIHdlJ3ZlIGlkZW50aWZpZWQgb3VyIElSUSwgY2xlYXIgb3VyIGJpdHMgZnJvbSB0aGUgaW50ZXJydXB0IG1hc2sgYW5kIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzCisJCWludF9tc2tfdG1wID0gY3hfcmVhZChjaGFubmVsLT5pbnRfbXNrKTsKKwkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X21zaywgaW50X21za190bXAgJiB+X2ludHJfbXNrKTsKKwkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X3N0YXQsIF9pbnRyX21zayk7CisKKwkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKKworCQlkZXYtPl9mcmFtZV9pbmRleCA9IHByb2dfY250OworCisJCXF1ZXVlX3dvcmsoZGV2LT5faXJxX3F1ZXVlcywgJmRldi0+X2lycV93b3JrX2VudHJ5KTsKKworCQlpZiAoZGV2LT5faXNfZmlyc3RfZnJhbWUpIHsKKwkJCWRldi0+X2lzX2ZpcnN0X2ZyYW1lID0gMDsKKworCQkJaWYgKGRldi0+X2lzTlRTQykgeworCQkJCXNpbmdsZWZpZWxkX2xpbmVzICs9IDE7CisJCQkJb2RkX3Jpc2NfcHJvZ19zaXplID0gT0REX0ZMRF9OVFNDX1BST0dfU0laRTsKKwkJCX0gZWxzZSB7CisJCQkJc2luZ2xlZmllbGRfbGluZXMgPSBQQUxfRklFTERfSEVJR0hUOworCQkJCW9kZF9yaXNjX3Byb2dfc2l6ZSA9IE9ERF9GTERfUEFMX1BST0dfU0laRTsKKwkJCX0KKworCQkJaWYgKGRldi0+X2RtYV92aXJ0X3N0YXJ0X2FkZHIgIT0gTlVMTCkgeworCQkJCWxpbmVfc2l6ZV9pbl9ieXRlcyA9CisJCQkJICAgIChkZXYtPl9waXhlbF9mb3JtYXQgPT0KKwkJCQkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFk0MTFfTElORV9TWiA6CisJCQkJICAgIFk0MjJfTElORV9TWjsKKwkJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0KKwkJCQkgICAgZGV2LT5fZG1hX3BoeXNfc3RhcnRfYWRkciArCisJCQkJICAgIG9kZF9yaXNjX3Byb2dfc2l6ZTsKKworCQkJCXJwID0gY3gyNTgyMV91cGRhdGVfcmlzY3Byb2dyYW0oZGV2LAorCQkJCQkJCQlkZXYtPgorCQkJCQkJCQlfZG1hX3ZpcnRfc3RhcnRfYWRkciwKKwkJCQkJCQkJVE9QX09GRlNFVCwKKwkJCQkJCQkJbGluZV9zaXplX2luX2J5dGVzLAorCQkJCQkJCQkweDAsCisJCQkJCQkJCXNpbmdsZWZpZWxkX2xpbmVzLAorCQkJCQkJCQlGSUZPX0RJU0FCTEUsCisJCQkJCQkJCU9ERF9GSUVMRCk7CisKKwkJCQkvLyBKdW1wIHRvIEV2ZW4gUmlzYyBwcm9ncmFtIG9mIDFzdCBGcmFtZQorCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX0pVTVApOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjX3BoeXNfanVtcF9hZGRyKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CisJCQl9CisJCX0KKworCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX1VGKQorCQkJcHJpbnRrCisJCQkgICAgKCIlczogVmlkZW8gUmVjZWl2ZWQgVW5kZXJmbG93IEVycm9yIEludGVycnVwdCFcbiIsCisJCQkgICAgIF9fZnVuY19fKTsKKworCQlpZiAoc3RhdHVzICYgRkxEX1ZJRF9TUkNfU1lOQykKKwkJCXByaW50aygiJXM6IFZpZGVvIFJlY2VpdmVkIFN5bmMgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisKKwkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX09QQ19FUlIpCisJCQlwcmludGsoIiVzOiBWaWRlbyBSZWNlaXZlZCBPcENvZGUgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJfQorCisJaWYgKGRldi0+X2ZpbGVfc3RhdHVzID09IEVORF9PRl9GSUxFKSB7CisJCXByaW50aygiY3gyNTgyMTogRU9GIENoYW5uZWwgMSBGcmFtZWNvdW50ID0gJWRcbiIsCisJCSAgICAgICBkZXYtPl9mcmFtZV9jb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisJLy9FbFNFLCBzZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCByZS1lbmFibGUgaXJxLgorCWludF9tc2tfdG1wID0gY3hfcmVhZChjaGFubmVsLT5pbnRfbXNrKTsKKwljeF93cml0ZShjaGFubmVsLT5pbnRfbXNrLCBpbnRfbXNrX3RtcCB8PSBfaW50cl9tc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjeDI1ODIxX3Vwc3RyZWFtX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBkZXZfaWQ7CisJdTMyIG1za19zdGF0LCB2aWRfc3RhdHVzOworCWludCBoYW5kbGVkID0gMDsKKwlpbnQgY2hhbm5lbF9udW0gPSAwOworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2g7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC0xOworCisJY2hhbm5lbF9udW0gPSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0k7CisKKwlzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFubmVsX251bV07CisKKwltc2tfc3RhdCA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X21zdGF0KTsKKwl2aWRfc3RhdHVzID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfc3RhdCk7CisKKwkvLyBPbmx5IGRlYWwgd2l0aCBvdXIgaW50ZXJydXB0CisJaWYgKHZpZF9zdGF0dXMpIHsKKwkJaGFuZGxlZCA9CisJCSAgICBjeDI1ODIxX3ZpZGVvX3Vwc3RyZWFtX2lycShkZXYsIGNoYW5uZWxfbnVtLCB2aWRfc3RhdHVzKTsKKwl9CisKKwlpZiAoaGFuZGxlZCA8IDApIHsKKwkJY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX3ZpZGVvX2NoMShkZXYpOworCX0gZWxzZSB7CisJCWhhbmRsZWQgKz0gaGFuZGxlZDsKKwl9CisKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKwordm9pZCBjeDI1ODIxX3NldF9waXhlbGVuZ2luZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gsCisJCQkgICAgIGludCBwaXhfZm9ybWF0KQoreworCWludCB3aWR0aCA9IFdJRFRIX0QxOworCWludCBoZWlnaHQgPSBkZXYtPl9saW5lc19jb3VudDsKKwlpbnQgbnVtX2xpbmVzLCBvZGRfbnVtX2xpbmVzOworCXUzMiB2YWx1ZTsKKwlpbnQgdmlwX21vZGUgPSBPVVRQVVRfRlJNVF82NTY7CisKKwl2YWx1ZSA9ICgocGl4X2Zvcm1hdCAmIDB4MykgPDwgMTIpIHwgKHZpcF9tb2RlICYgMHg3KTsKKwl2YWx1ZSAmPSAweEZGRkZGRkVGOworCXZhbHVlIHw9IGRldi0+X2lzTlRTQyA/IDAgOiAweDEwOworCWN4X3dyaXRlKGNoLT52aWRfZm10X2N0bCwgdmFsdWUpOworCisJLy8gc2V0IG51bWJlciBvZiBhY3RpdmUgcGl4ZWxzIGluIGVhY2ggbGluZS4gRGVmYXVsdCBpcyA3MjAgcGl4ZWxzIGluIGJvdGggTlRTQyBhbmQgUEFMIGZvcm1hdAorCWN4X3dyaXRlKGNoLT52aWRfYWN0aXZlX2N0bDEsIHdpZHRoKTsKKworCW51bV9saW5lcyA9IChoZWlnaHQgLyAyKSAmIDB4M0ZGOworCW9kZF9udW1fbGluZXMgPSBudW1fbGluZXM7CisKKwlpZiAoZGV2LT5faXNOVFNDKSB7CisJCW9kZF9udW1fbGluZXMgKz0gMTsKKwl9CisKKwl2YWx1ZSA9IChudW1fbGluZXMgPDwgMTYpIHwgb2RkX251bV9saW5lczsKKworCS8vIHNldCBudW1iZXIgb2YgYWN0aXZlIGxpbmVzIGluIGZpZWxkIDAgKHRvcCkgYW5kIGZpZWxkIDEgKGJvdHRvbSkKKwljeF93cml0ZShjaC0+dmlkX2FjdGl2ZV9jdGwyLCB2YWx1ZSk7CisKKwljeF93cml0ZShjaC0+dmlkX2NkdF9zaXplLCBWSURfQ0RUX1NJWkUgPj4gMyk7Cit9CisKK2ludCBjeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYV91cHN0cmVhbShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJdTMyIHRtcCA9IDA7CisJaW50IGVyciA9IDA7CisKKwkvLyA2NTYvVklQIFNSQyBVcHN0cmVhbSBDaGFubmVsIEkgJiBKIGFuZCA3IC0gSG9zdCBCdXMgSW50ZXJmYWNlIGZvciBjaGFubmVsIEEtQworCXRtcCA9IGN4X3JlYWQoVklEX0NIX01PREVfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCB8IDB4MUIwMDAxRkYpOworCisJLy8gU2V0IHRoZSBwaHlzaWNhbCBzdGFydCBhZGRyZXNzIG9mIHRoZSBSSVNDIHByb2dyYW0gaW4gdGhlIGluaXRpYWwgcHJvZ3JhbSBjb3VudGVyKElQQykgbWVtYmVyIG9mIHRoZSBjbWRzLgorCWN4X3dyaXRlKHNyYW1fY2gtPmNtZHNfc3RhcnQgKyAwLCBkZXYtPl9kbWFfcGh5c19hZGRyKTsKKwljeF93cml0ZShzcmFtX2NoLT5jbWRzX3N0YXJ0ICsgNCwgMCk7CS8qIFJpc2MgSVBDIEhpZ2ggNjQgYml0cyA2My0zMiAqLworCisJLyogcmVzZXQgY291bnRlciAqLworCWN4X3dyaXRlKHNyYW1fY2gtPmdwY250X2N0bCwgMyk7CisKKwkvLyBDbGVhciBvdXIgYml0cyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgorCWN4X3dyaXRlKHNyYW1fY2gtPmludF9zdGF0LCBfaW50cl9tc2spOworCisJLy9TZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCBlbmFibGUgaXJxLgorCWN4X3NldChQQ0lfSU5UX01TSywgY3hfcmVhZChQQ0lfSU5UX01TSykgfCAoMSA8PCBzcmFtX2NoLT5pcnFfYml0KSk7CisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXNrKTsKKwljeF93cml0ZShzcmFtX2NoLT5pbnRfbXNrLCB0bXAgfD0gX2ludHJfbXNrKTsKKworCWVyciA9CisJICAgIHJlcXVlc3RfaXJxKGRldi0+cGNpLT5pcnEsIGN4MjU4MjFfdXBzdHJlYW1faXJxLAorCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IHVwc3RyZWFtIElSUSAlZFxuIiwgZGV2LT5uYW1lLAorCQkgICAgICAgZGV2LT5wY2ktPmlycSk7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJLy8gU3RhcnQgdGhlIERNQSAgZW5naW5lCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwljeF9zZXQoc3JhbV9jaC0+ZG1hX2N0bCwgdG1wIHwgRkxEX1ZJRF9SSVNDX0VOKTsKKworCWRldi0+X2lzX3J1bm5pbmcgPSAxOworCWRldi0+X2lzX2ZpcnN0X2ZyYW1lID0gMTsKKworCXJldHVybiAwOworCisgICAgICBmYWlsX2lycToKKwljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGRldik7CisJcmV0dXJuIGVycjsKK30KKworaW50IGN4MjU4MjFfdmlkdXBzdHJlYW1faW5pdF9jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFubmVsX3NlbGVjdCwKKwkJCQkgaW50IHBpeGVsX2Zvcm1hdCkKK3sKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoOworCXUzMiB0bXA7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGVyciA9IDA7CisJaW50IGRhdGFfZnJhbWVfc2l6ZSA9IDA7CisJaW50IHJpc2NfYnVmZmVyX3NpemUgPSAwOworCWludCBzdHJfbGVuZ3RoID0gMDsKKworCWlmIChkZXYtPl9pc19ydW5uaW5nKSB7CisJCXByaW50aygiVmlkZW8gQ2hhbm5lbCBpcyBzdGlsbCBydW5uaW5nIHNvIHJldHVybiFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXYtPl9jaGFubmVsX3Vwc3RyZWFtX3NlbGVjdCA9IGNoYW5uZWxfc2VsZWN0OworCXNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5uZWxfc2VsZWN0XTsKKworCUlOSVRfV09SSygmZGV2LT5faXJxX3dvcmtfZW50cnksIGN4MjU4MjFfdmlkdXBzX2hhbmRsZXIpOworCWRldi0+X2lycV9xdWV1ZXMgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY3gyNTgyMV93b3JrcXVldWUiKTsKKworCWlmICghZGV2LT5faXJxX3F1ZXVlcykgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoKSBmb3IgVmlkZW8gRkFJTEVEIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvLyA2NTYvVklQIFNSQyBVcHN0cmVhbSBDaGFubmVsIEkgJiBKIGFuZCA3IC0gSG9zdCBCdXMgSW50ZXJmYWNlIGZvciBjaGFubmVsIEEtQworCXRtcCA9IGN4X3JlYWQoVklEX0NIX01PREVfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCB8IDB4MUIwMDAxRkYpOworCisJZGV2LT5faXNfcnVubmluZyA9IDA7CisJZGV2LT5fZnJhbWVfY291bnQgPSAwOworCWRldi0+X2ZpbGVfc3RhdHVzID0gUkVTRVRfU1RBVFVTOworCWRldi0+X2xpbmVzX2NvdW50ID0gZGV2LT5faXNOVFNDID8gNDgwIDogNTc2OworCWRldi0+X3BpeGVsX2Zvcm1hdCA9IHBpeGVsX2Zvcm1hdDsKKwlkZXYtPl9saW5lX3NpemUgPQorCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0ID09CisJICAgICBQSVhFTF9GUk1UXzQyMikgPyAoV0lEVEhfRDEgKiAyKSA6IChXSURUSF9EMSAqIDMpIC8gMjsKKwlkYXRhX2ZyYW1lX3NpemUgPSBkZXYtPl9pc05UU0MgPyBOVFNDX0RBVEFfQlVGX1NaIDogUEFMX0RBVEFfQlVGX1NaOworCXJpc2NfYnVmZmVyX3NpemUgPQorCSAgICBkZXYtPl9pc05UU0MgPyBOVFNDX1JJU0NfQlVGX1NJWkUgOiBQQUxfUklTQ19CVUZfU0laRTsKKworCWlmIChkZXYtPmlucHV0X2ZpbGVuYW1lKSB7CisJCXN0cl9sZW5ndGggPSBzdHJsZW4oZGV2LT5pbnB1dF9maWxlbmFtZSk7CisJCWRldi0+X2ZpbGVuYW1lID0gKGNoYXIgKilrbWFsbG9jKHN0cl9sZW5ndGggKyAxLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWRldi0+X2ZpbGVuYW1lKQorCQkJZ290byBlcnJvcjsKKworCQltZW1jcHkoZGV2LT5fZmlsZW5hbWUsIGRldi0+aW5wdXRfZmlsZW5hbWUsIHN0cl9sZW5ndGggKyAxKTsKKwl9IGVsc2UgeworCQlzdHJfbGVuZ3RoID0gc3RybGVuKGRldi0+X2RlZmF1bHRuYW1lKTsKKwkJZGV2LT5fZmlsZW5hbWUgPSAoY2hhciAqKWttYWxsb2Moc3RyX2xlbmd0aCArIDEsIEdGUF9LRVJORUwpOworCisJCWlmICghZGV2LT5fZmlsZW5hbWUpCisJCQlnb3RvIGVycm9yOworCisJCW1lbWNweShkZXYtPl9maWxlbmFtZSwgZGV2LT5fZGVmYXVsdG5hbWUsIHN0cl9sZW5ndGggKyAxKTsKKwl9CisKKwkvL0RlZmF1bHQgaWYgZmlsZW5hbWUgaXMgZW1wdHkgc3RyaW5nCisJaWYgKHN0cmNtcChkZXYtPmlucHV0X2ZpbGVuYW1lLCAiIikgPT0gMCkgeworCQlpZiAoZGV2LT5faXNOVFNDKSB7CisJCQlkZXYtPl9maWxlbmFtZSA9CisJCQkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdCA9PQorCQkJICAgICBQSVhFTF9GUk1UXzQxMSkgPyAiL3Jvb3QvdmlkNDExLnl1diIgOgorCQkJICAgICIvcm9vdC92aWR0ZXN0Lnl1diI7CisJCX0gZWxzZSB7CisJCQlkZXYtPl9maWxlbmFtZSA9CisJCQkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdCA9PQorCQkJICAgICBQSVhFTF9GUk1UXzQxMSkgPyAiL3Jvb3QvcGFsNDExLnl1diIgOgorCQkJICAgICIvcm9vdC9wYWw0MjIueXV2IjsKKwkJfQorCX0KKworCWRldi0+X2lzX3J1bm5pbmcgPSAwOworCWRldi0+X2ZyYW1lX2NvdW50ID0gMDsKKwlkZXYtPl9maWxlX3N0YXR1cyA9IFJFU0VUX1NUQVRVUzsKKwlkZXYtPl9saW5lc19jb3VudCA9IGRldi0+X2lzTlRTQyA/IDQ4MCA6IDU3NjsKKwlkZXYtPl9waXhlbF9mb3JtYXQgPSBwaXhlbF9mb3JtYXQ7CisJZGV2LT5fbGluZV9zaXplID0KKwkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdCA9PQorCSAgICAgUElYRUxfRlJNVF80MjIpID8gKFdJRFRIX0QxICogMikgOiAoV0lEVEhfRDEgKiAzKSAvIDI7CisKKwlyZXR2YWwgPQorCSAgICBjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF91cHN0cmVhbShkZXYsIHNyYW1fY2gsIGRldi0+X2xpbmVfc2l6ZSwKKwkJCQkJCTApOworCisJLyogc2V0dXAgZmlmbyArIGZvcm1hdCAqLworCWN4MjU4MjFfc2V0X3BpeGVsZW5naW5lKGRldiwgc3JhbV9jaCwgZGV2LT5fcGl4ZWxfZm9ybWF0KTsKKworCWRldi0+dXBzdHJlYW1fcmlzY2J1Zl9zaXplID0gcmlzY19idWZmZXJfc2l6ZSAqIDI7CisJZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemUgPSBkYXRhX2ZyYW1lX3NpemUgKiAyOworCisJLy9BbGxvY2F0aW5nIGJ1ZmZlcnMgYW5kIHByZXBhcmUgUklTQyBwcm9ncmFtCisJcmV0dmFsID0gY3gyNTgyMV91cHN0cmVhbV9idWZmZXJfcHJlcGFyZShkZXYsIHNyYW1fY2gsIGRldi0+X2xpbmVfc2l6ZSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IEZhaWxlZCB0byBzZXQgdXAgVmlkZW8gdXBzdHJlYW0gYnVmZmVycyFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIGVycm9yOworCX0KKworCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hX3Vwc3RyZWFtKGRldiwgc3JhbV9jaCk7CisKKwlyZXR1cm4gMDsKKworICAgICAgZXJyb3I6CisJY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihkZXYpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzlmOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4sIDxzaHUubGluQGNvbmV4YW50LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2RlZmluZSBPVVRQVVRfRlJNVF82NTYgICAgICAgMAorI2RlZmluZSBPUEVOX0ZJTEVfMSAgICAgICAgICAgMAorI2RlZmluZSBOVU1fUFJPR1MgICAgICAgICAgICAgOAorI2RlZmluZSBOVU1fRlJBTUVTICAgICAgICAgICAgMgorI2RlZmluZSBPRERfRklFTEQgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOX0ZJRUxEICAgICAgICAgICAgMQorI2RlZmluZSBUT1BfT0ZGU0VUICAgICAgICAgICAgMAorI2RlZmluZSBGSUZPX0RJU0FCTEUgICAgICAgICAgMAorI2RlZmluZSBGSUZPX0VOQUJMRSAgICAgICAgICAgMQorI2RlZmluZSBURVNUX0ZSQU1FUyAgICAgICAgICAgNQorI2RlZmluZSBFTkRfT0ZfRklMRSAgICAgICAgICAgMAorI2RlZmluZSBJTl9QUk9HUkVTUyAgICAgICAgICAgMQorI2RlZmluZSBSRVNFVF9TVEFUVVMgICAgICAgICAgLTEKKyNkZWZpbmUgTlVNX05PX09QUyAgICAgICAgICAgIDUKKworLy8gUEFMIGFuZCBOVFNDIGxpbmUgc2l6ZXMgYW5kIG51bWJlciBvZiBsaW5lcy4KKyNkZWZpbmUgV0lEVEhfRDEgICAgICAgICAgICAgIDcyMAorI2RlZmluZSBOVFNDX0xJTkVTX1BFUl9GUkFNRSAgNDgwCisjZGVmaW5lIFBBTF9MSU5FU19QRVJfRlJBTUUgICA1NzYKKyNkZWZpbmUgUEFMX0xJTkVfU1ogICAgICAgICAgIDE0NDAKKyNkZWZpbmUgWTQyMl9MSU5FX1NaICAgICAgICAgIDE0NDAKKyNkZWZpbmUgWTQxMV9MSU5FX1NaICAgICAgICAgIDEwODAKKyNkZWZpbmUgTlRTQ19GSUVMRF9IRUlHSFQgICAgIDI0MAorI2RlZmluZSBOVFNDX09ERF9GTERfTElORVMgICAgMjQxCisjZGVmaW5lIFBBTF9GSUVMRF9IRUlHSFQgICAgICAyODgKKworI2RlZmluZSBGUkFNRV9TSVpFX05UU0NfWTQyMiAgICAoTlRTQ19MSU5FU19QRVJfRlJBTUUgKiBZNDIyX0xJTkVfU1opCisjZGVmaW5lIEZSQU1FX1NJWkVfTlRTQ19ZNDExICAgIChOVFNDX0xJTkVTX1BFUl9GUkFNRSAqIFk0MTFfTElORV9TWikKKyNkZWZpbmUgRlJBTUVfU0laRV9QQUxfWTQyMiAgICAgKFBBTF9MSU5FU19QRVJfRlJBTUUgKiBZNDIyX0xJTkVfU1opCisjZGVmaW5lIEZSQU1FX1NJWkVfUEFMX1k0MTEgICAgIChQQUxfTElORVNfUEVSX0ZSQU1FICogWTQxMV9MSU5FX1NaKQorCisjZGVmaW5lIE5UU0NfREFUQV9CVUZfU1ogICAgICAgIChZNDIyX0xJTkVfU1ogKiBOVFNDX0xJTkVTX1BFUl9GUkFNRSkKKyNkZWZpbmUgUEFMX0RBVEFfQlVGX1NaICAgICAgICAgKFk0MjJfTElORV9TWiAqIFBBTF9MSU5FU19QRVJfRlJBTUUpCisKKyNkZWZpbmUgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgICAxNgorI2RlZmluZSBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSAgICAgIDQKKyNkZWZpbmUgSlVNUF9JTlNUUlVDVElPTl9TSVpFICAgICAgICAgICAxMgorI2RlZmluZSBNQVhTSVpFX05PX09QUyAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIERXT1JEX1NJWkUgICAgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIFVTRV9SSVNDX05PT1BfVklERU8gICAxCisKKyNpZmRlZiBVU0VfUklTQ19OT09QX1ZJREVPCisjZGVmaW5lIFBBTF9VU19WSURfUFJPR19TSVpFICAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArICAgXAorCQkJCSAgICAgIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgTlVNX05PX09QUypEV09SRF9TSVpFKQorCisjZGVmaW5lIFBBTF9SSVNDX0JVRl9TSVpFICAgICAgICAgICAoMiAqIFBBTF9VU19WSURfUFJPR19TSVpFKQorCisjZGVmaW5lIFBBTF9WSURfUFJPR19TSVpFICAgICAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQqMikgKiAzICogRFdPUkRfU0laRSArIDIqUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBKVU1QX0lOU1RSVUNUSU9OX1NJWkUgKyAyKk5VTV9OT19PUFMqRFdPUkRfU0laRSkKKworI2RlZmluZSBPRERfRkxEX1BBTF9QUk9HX1NJWkUgICAgICAgKChQQUxfRklFTERfSEVJR0hUKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisKKyNkZWZpbmUgT0REX0ZMRF9OVFNDX1BST0dfU0laRSAgICAgICgoTlRTQ19PRERfRkxEX0xJTkVTKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisKKyNkZWZpbmUgTlRTQ19VU19WSURfUFJPR19TSVpFICAgICAgICgoTlRTQ19PRERfRkxEX0xJTkVTICsgMSkgKiAzICogRFdPUkRfU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgXAorCQkJCSAgICAgIEpVTVBfSU5TVFJVQ1RJT05fU0laRSArIE5VTV9OT19PUFMqRFdPUkRfU0laRSkKKworI2RlZmluZSBOVFNDX1JJU0NfQlVGX1NJWkUgICAgICAgICAgKDIgKiAoUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBOVFNDX1VTX1ZJRF9QUk9HX1NJWkUpKQorCisjZGVmaW5lIEZSQU1FMV9WSURfUFJPR19TSVpFICAgICAgICAoKE5UU0NfT0REX0ZMRF9MSU5FUyArIE5UU0NfRklFTERfSEVJR0hUKSAqIDMgKiBEV09SRF9TSVpFICsgMipSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgICBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIEpVTVBfSU5TVFJVQ1RJT05fU0laRSArIDIqTlVNX05PX09QUypEV09SRF9TSVpFKQorCisjZW5kaWYKKworI2lmbmRlZiBVU0VfUklTQ19OT09QX1ZJREVPCisjZGVmaW5lIFBBTF9VU19WSURfUFJPR19TSVpFICAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgICBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIEpVTVBfSU5TVFJVQ1RJT05fU0laRSkKKworI2RlZmluZSBQQUxfUklTQ19CVUZfU0laRSAgICAgICAgICAgKDIgKiBQQUxfVVNfVklEX1BST0dfU0laRSkKKworI2RlZmluZSBQQUxfVklEX1BST0dfU0laRSAgICAgICAgICAgKChQQUxfRklFTERfSEVJR0hUKjIpICogMyAqIERXT1JEX1NJWkUgKyAyKlJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgXAorCQkJCSAgICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFICkKKworI2RlZmluZSBPRERfRkxEX1BBTF9QUk9HX1NJWkUgICAgICAgKChQQUxfRklFTERfSEVJR0hUKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSApCisjZGVmaW5lIE9ERF9GTERfTlRTQ19QUk9HX1NJWkUgICAgICAoKE5UU0NfT0REX0ZMRF9MSU5FUykgKiAzICogRFdPUkRfU0laRSArIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKQorCisjZGVmaW5lIE5UU0NfVVNfVklEX1BST0dfU0laRSAgICAgICAoKE5UU0NfT0REX0ZMRF9MSU5FUyArIDEpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIEpVTVBfSU5TVFJVQ1RJT05fU0laRSkKKyNkZWZpbmUgTlRTQ19SSVNDX0JVRl9TSVpFICAgICAgICAgICggMiAqIChSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIE5UU0NfVVNfVklEX1BST0dfU0laRSkgKQorI2RlZmluZSBGUkFNRTFfVklEX1BST0dfU0laRSAgICAgICAgKChOVFNDX09ERF9GTERfTElORVMgKyBOVFNDX0ZJRUxEX0hFSUdIVCkgKiAzICogRFdPUkRfU0laRSArIDIqUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBKVU1QX0lOU1RSVUNUSU9OX1NJWkUgKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzNGJjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYwpAQCAtMCwwICsxLDEyOTkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyNTgyMSBiYXNlZCBUViBjYXJkcyIpOworTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX25yW10gPSB7WzAgLi4uIChDWDI1ODIxX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CitzdGF0aWMgdW5zaWduZWQgaW50IHJhZGlvX25yW10gPSB7WzAgLi4uIChDWDI1ODIxX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CisKK21vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShyYWRpb19uciwgaW50LCBOVUxMLCAwNDQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvIGRldmljZSBudW1iZXJzIik7CitNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAicmFkaW8gZGV2aWNlIG51bWJlcnMiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19kZWJ1ZyA9IFZJREVPX0RFQlVHOworbW9kdWxlX3BhcmFtKHZpZGVvX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbdmlkZW9dIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX2RlYnVnOworbW9kdWxlX3BhcmFtKGlycV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtJUlEgaGFuZGxlcl0iKTsKKwordW5zaWduZWQgaW50IHZpZF9saW1pdCA9IDE2OworbW9kdWxlX3BhcmFtKHZpZF9saW1pdCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkX2xpbWl0LCAiY2FwdHVyZSBtZW1vcnkgbGltaXQgaW4gbWVnYWJ5dGVzIik7CisKK3N0YXRpYyB2b2lkIGluaXRfY29udHJvbHMoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFuX251bSk7CisKKyNkZWZpbmUgRk9STUFUX0ZMQUdTX1BBQ0tFRCAgICAgICAweDAxCisKK3N0cnVjdCBjeDI1ODIxX2ZtdCBmb3JtYXRzW10gPSB7CisJeworCSAubmFtZSA9ICI4IGJwcCwgZ3JheSIsCisJIC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfR1JFWSwKKwkgLmRlcHRoID0gOCwKKwkgLmZsYWdzID0gRk9STUFUX0ZMQUdTX1BBQ0tFRCwKKwkgfSwgeworCSAgICAgLm5hbWUgPSAiNDoxOjEsIHBhY2tlZCwgWTQxUCIsCisJICAgICAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1k0MVAsCisJICAgICAuZGVwdGggPSAxMiwKKwkgICAgIC5mbGFncyA9IEZPUk1BVF9GTEFHU19QQUNLRUQsCisJICAgICB9LCB7CisJCSAubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBZVVlWIiwKKwkJIC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJIC5kZXB0aCA9IDE2LAorCQkgLmZsYWdzID0gRk9STUFUX0ZMQUdTX1BBQ0tFRCwKKwkJIH0sIHsKKwkJICAgICAubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBVWVZZIiwKKwkJICAgICAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCSAgICAgLmRlcHRoID0gMTYsCisJCSAgICAgLmZsYWdzID0gRk9STUFUX0ZMQUdTX1BBQ0tFRCwKKwkJICAgICB9LCB7CisJCQkgLm5hbWUgPSAiNDoyOjAsIFlVViIsCisJCQkgLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9ZVVY0MjAsCisJCQkgLmRlcHRoID0gMTIsCisJCQkgLmZsYWdzID0gRk9STUFUX0ZMQUdTX1BBQ0tFRCwKKwkJCSB9LAorfTsKKworaW50IGdldF9mb3JtYXRfc2l6ZSh2b2lkKQoreworCXJldHVybiBBUlJBWV9TSVpFKGZvcm1hdHMpOworfQorCitzdHJ1Y3QgY3gyNTgyMV9mbXQgKmZvcm1hdF9ieV9mb3VyY2ModW5zaWduZWQgaW50IGZvdXJjYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChmb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1k0MVAgfHwgZm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MTFQKSB7CisJCXJldHVybiBmb3JtYXRzICsgMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzKTsgaSsrKQorCQlpZiAoZm9ybWF0c1tpXS5mb3VyY2MgPT0gZm91cmNjKQorCQkJcmV0dXJuIGZvcm1hdHMgKyBpOworCisJcHJpbnRrKEtFUk5fRVJSICIlcygweCUwOHgpIE5PVCBGT1VORFxuIiwgX19mdW5jX18sIGZvdXJjYyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgZHVtcF92aWRlb19xdWV1ZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9mb3JfZWFjaChpdGVtLCAmcS0+YWN0aXZlKQorCQkgICAgYnVmID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9mb3JfZWFjaChpdGVtLCAmcS0+cXVldWVkKQorCQkgICAgYnVmID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwl9CisKK30KKwordm9pZCBjeDI1ODIxX3ZpZGVvX3dha2V1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEsCisJCQkgIHUzMiBjb3VudCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKwlpbnQgYmM7CisKKwlmb3IgKGJjID0gMDs7IGJjKyspIHsKKwkJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJCWRwcmludGsoMSwgImJjPSVkICg9MDogYWN0aXZlIGVtcHR5KVxuIiwgYmMpOworCQkJYnJlYWs7CisJCX0KKworCQlidWYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUubmV4dCwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisKKwkJLyogY291bnQgY29tZXMgZnJvbSB0aGUgaHcgYW5kIGl0IGlzIDE2Yml0IHdpZGUgLS0KKwkJICogdGhpcyB0cmljayBoYW5kbGVzIHdyYXAtYXJvdW5kcyBjb3JyZWN0bHkgZm9yCisJCSAqIHVwIHRvIDMyNzY3IGJ1ZmZlcnMgaW4gZmxpZ2h0Li4uICovCisJCWlmICgoczE2KSAoY291bnQgLSBidWYtPmNvdW50KSA8IDApIHsKKwkJCWJyZWFrOworCQl9CisKKwkJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKKwkJZGVsX3RpbWVyKCZxLT50aW1lb3V0KTsKKwllbHNlCisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwlpZiAoYmMgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgYmMpOworfQorCisjaWZkZWYgVFVORVJfRkxBRworaW50IGN4MjU4MjFfc2V0X3R2bm9ybShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgdjRsMl9zdGRfaWQgbm9ybSkKK3sKKwlkcHJpbnRrKDEsICIlcyhub3JtID0gMHglMDh4KSBuYW1lOiBbJXNdXG4iLCBfX2Z1bmNfXywKKwkJKHVuc2lnbmVkIGludClub3JtLCB2NGwyX25vcm1fdG9fbmFtZShub3JtKSk7CisKKwlkZXYtPnR2bm9ybSA9IG5vcm07CisKKwkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3N0ZCwgbm9ybSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdHJ1Y3QgdmlkZW9fZGV2aWNlICpjeDI1ODIxX3ZkZXZfaW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgICAgICAgc3RydWN0IHZpZGVvX2RldmljZSAqdGVtcGxhdGUsCisJCQkJICAgICAgIGNoYXIgKnR5cGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChOVUxMID09IHZmZCkKKwkJcmV0dXJuIE5VTEw7CisJKnZmZCA9ICp0ZW1wbGF0ZTsKKwl2ZmQtPm1pbm9yID0gLTE7CisJdmZkLT52NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAlcyAoJXMpIiwgZGV2LT5uYW1lLCB0eXBlLAorCQkgY3gyNTgyMV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSk7CisJcmV0dXJuIHZmZDsKK30KKworLyoKK3N0YXRpYyBpbnQgY3gyNTgyMV9jdHJsX3F1ZXJ5KHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit7CisgICAgaW50IGk7CisKKyAgICBpZiAocWN0cmwtPmlkIDwgVjRMMl9DSURfQkFTRSB8fCBxY3RybC0+aWQgPj0gVjRMMl9DSURfTEFTVFAxKQorCXJldHVybiAtRUlOVkFMOworICAgIGZvciAoaSA9IDA7IGkgPCBDWDI1ODIxX0NUTFM7IGkrKykKKwlpZiAoY3gyNTgyMV9jdGxzW2ldLnYuaWQgPT0gcWN0cmwtPmlkKQorCSAgICBicmVhazsKKyAgICBpZiAoaSA9PSBDWDI1ODIxX0NUTFMpIHsKKwkqcWN0cmwgPSBub19jdGw7CisJcmV0dXJuIDA7CisgICAgfQorICAgICpxY3RybCA9IGN4MjU4MjFfY3Rsc1tpXS52OworICAgIHJldHVybiAwOworfQorKi8KKworLy8gcmVzb3VyY2UgbWFuYWdlbWVudAoraW50IHJlc19nZXQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdCkKK3sKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGZoLT5yZXNvdXJjZXMgJiBiaXQpCisJCS8qIGhhdmUgaXQgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KKwkJcmV0dXJuIDE7CisKKwkvKiBpcyBpdCBmcmVlPyAqLworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKGRldi0+cmVzb3VyY2VzICYgYml0KSB7CisJCS8qIG5vLCBzb21lb25lIGVsc2UgdXNlcyBpdCAqLworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KKwlmaC0+cmVzb3VyY2VzIHw9IGJpdDsKKwlkZXYtPnJlc291cmNlcyB8PSBiaXQ7CisJZHByaW50aygxLCAicmVzOiBnZXQgJWRcbiIsIGJpdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiAxOworfQorCitpbnQgcmVzX2NoZWNrKHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdCkKK3sKKwlyZXR1cm4gZmgtPnJlc291cmNlcyAmIGJpdDsKK30KKworaW50IHJlc19sb2NrZWQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBiaXQpCit7CisJcmV0dXJuIGRldi0+cmVzb3VyY2VzICYgYml0OworfQorCit2b2lkIHJlc19mcmVlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgY3gyNTgyMV9maCAqZmgsIHVuc2lnbmVkIGludCBiaXRzKQoreworCUJVR19PTigoZmgtPnJlc291cmNlcyAmIGJpdHMpICE9IGJpdHMpOworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZmgtPnJlc291cmNlcyAmPSB+Yml0czsKKwlkZXYtPnJlc291cmNlcyAmPSB+Yml0czsKKwlkcHJpbnRrKDEsICJyZXM6IHB1dCAlZFxuIiwgYml0cyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworfQorCitpbnQgY3gyNTgyMV92aWRlb19tdXgoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCW1lbXNldCgmcm91dGUsIDAsIHNpemVvZihyb3V0ZSkpOworCisJZHByaW50aygxLCAiJXMoKSB2aWRlb19tdXg6ICVkIFt2bXV4PSVkLCBncGlvPTB4JXgsMHgleCwweCV4LDB4JXhdXG4iLAorCQlfX2Z1bmNfXywgaW5wdXQsIElOUFVUKGlucHV0KS0+dm11eCwgSU5QVVQoaW5wdXQpLT5ncGlvMCwKKwkJSU5QVVQoaW5wdXQpLT5ncGlvMSwgSU5QVVQoaW5wdXQpLT5ncGlvMiwgSU5QVVQoaW5wdXQpLT5ncGlvMyk7CisJZGV2LT5pbnB1dCA9IGlucHV0OworCisJcm91dGUuaW5wdXQgPSBJTlBVVChpbnB1dCktPnZtdXg7CisKKwkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19yb3V0aW5nLCBJTlBVVChpbnB1dCktPnZtdXgsIDAsIDApOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCSAgICBzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSwKKwkJCSAgICBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiwKKwkJCSAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsKQoreworCWludCB0bXAgPSAwOworCisJLyogc2V0dXAgZmlmbyArIGZvcm1hdCAqLworCWN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwKGRldiwgY2hhbm5lbCwgYnVmLT5icGwsIGJ1Zi0+cmlzYy5kbWEpOworCisJLyogcmVzZXQgY291bnRlciAqLworCWN4X3dyaXRlKGNoYW5uZWwtPmdwY250X2N0bCwgMyk7CisJcS0+Y291bnQgPSAxOworCisJLyogZW5hYmxlIGlycSAqLworCWN4X3NldChQQ0lfSU5UX01TSywgY3hfcmVhZChQQ0lfSU5UX01TSykgfCAoMSA8PCBjaGFubmVsLT5pKSk7CisJY3hfc2V0KGNoYW5uZWwtPmludF9tc2ssIDB4MTEpOworCisJLyogc3RhcnQgZG1hICovCisJY3hfd3JpdGUoY2hhbm5lbC0+ZG1hX2N0bCwgMHgxMSk7CS8qIEZJRk8gYW5kIFJJU0MgZW5hYmxlICovCisKKwkvKiBtYWtlIHN1cmUgdXBzdHJlYW0gc2V0dGluZyBpZiBhbnkgaXMgcmV2ZXJzZWQgKi8KKwl0bXAgPSBjeF9yZWFkKFZJRF9DSF9NT0RFX1NFTCk7CisJY3hfd3JpdGUoVklEX0NIX01PREVfU0VMLCB0bXAgJiAweEZGRkZGRTAwKTsKKworCXJldHVybiAwOworfQorCitpbnQgY3gyNTgyMV9yZXN0YXJ0X3ZpZGVvX3F1ZXVlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxLAorCQkJCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYsICpwcmV2OworCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJYnVmID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLm5leHQsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLCBjaGFubmVsKTsKKworCQlsaXN0X2Zvcl9lYWNoKGl0ZW0sICZxLT5hY3RpdmUpIHsKKwkJCWJ1ZiA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJfQorCisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJldiA9IE5VTEw7CisJZm9yICg7OykgeworCQlpZiAobGlzdF9lbXB0eSgmcS0+cXVldWVkKSkKKwkJCXJldHVybiAwOworCisJCWJ1ZiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPnF1ZXVlZC5uZXh0LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKworCQlpZiAoTlVMTCA9PSBwcmV2KSB7CisJCQlsaXN0X21vdmVfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwgY2hhbm5lbCk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCX0gZWxzZSBpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aCAmJgorCQkJICAgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0ICYmCisJCQkgICBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBCaXRzIDYzIC0gMzIgKi8KKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXYgPSBidWY7CisJfQorfQorCit2b2lkIGN4MjU4MjFfdmlkX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBjeDI1ODIxX2RhdGEgKnRpbWVvdXRfZGF0YSA9IChzdHJ1Y3QgY3gyNTgyMV9kYXRhICopZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IHRpbWVvdXRfZGF0YS0+ZGV2OworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSB0aW1lb3V0X2RhdGEtPmNoYW5uZWw7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW2NoYW5uZWwtPmldOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvL2N4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXAoZGV2LCBjaGFubmVsKTsKKwljeF9jbGVhcihjaGFubmVsLT5kbWFfY3RsLCAweDExKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWJ1ZiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKKwl9CisKKwljeDI1ODIxX3Jlc3RhcnRfdmlkZW9fcXVldWUoZGV2LCBxLCBjaGFubmVsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7Cit9CisKK2ludCBjeDI1ODIxX3ZpZGVvX2lycShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLCB1MzIgc3RhdHVzKQoreworCXUzMiBjb3VudCA9IDA7CisJaW50IGhhbmRsZWQgPSAwOworCXUzMiBtYXNrOworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5fbnVtXTsKKworCW1hc2sgPSBjeF9yZWFkKGNoYW5uZWwtPmludF9tc2spOworCWlmICgwID09IChzdGF0dXMgJiBtYXNrKSkKKwkJcmV0dXJuIGhhbmRsZWQ7CisKKwljeF93cml0ZShjaGFubmVsLT5pbnRfc3RhdCwgc3RhdHVzKTsKKworCS8qIHJpc2Mgb3AgY29kZSBlcnJvciAqLworCWlmIChzdGF0dXMgJiAoMSA8PCAxNikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMsICVzOiB2aWRlbyByaXNjIG9wIGNvZGUgZXJyb3JcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGNoYW5uZWwtPm5hbWUpOworCQljeF9jbGVhcihjaGFubmVsLT5kbWFfY3RsLCAweDExKTsKKwkJY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsIGNoYW5uZWwpOworCX0KKworCS8qIHJpc2MxIHkgKi8KKwlpZiAoc3RhdHVzICYgRkxEX1ZJRF9EU1RfUklTQzEpIHsKKwkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKKwkJY291bnQgPSBjeF9yZWFkKGNoYW5uZWwtPmdwY250KTsKKwkJY3gyNTgyMV92aWRlb193YWtldXAoZGV2LCAmZGV2LT52aWRxW2NoYW5uZWwtPmldLCBjb3VudCk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKwkJaGFuZGxlZCsrOworCX0KKworCS8qIHJpc2MyIHkgKi8KKwlpZiAoc3RhdHVzICYgMHgxMCkgeworCQlkcHJpbnRrKDIsICJzdG9wcGVyIHZpZGVvXG4iKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKKwkJY3gyNTgyMV9yZXN0YXJ0X3ZpZGVvX3F1ZXVlKGRldiwgJmRldi0+dmlkcVtjaGFubmVsLT5pXSwKKwkJCQkJICAgIGNoYW5uZWwpOworCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisJCWhhbmRsZWQrKzsKKwl9CisJcmV0dXJuIGhhbmRsZWQ7Cit9CisKK3ZvaWQgY3gyNTgyMV92aWRlb2lvY3RsX3VucmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+aW9jdGxfZGV2KSB7CisJCWlmIChkZXYtPmlvY3RsX2Rldi0+bWlub3IgIT0gLTEpCisJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPmlvY3RsX2Rldik7CisJCWVsc2UKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+aW9jdGxfZGV2KTsKKworCQlkZXYtPmlvY3RsX2RldiA9IE5VTEw7CisJfQorfQorCit2b2lkIGN4MjU4MjFfdmlkZW9fdW5yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtKQoreworCWN4X2NsZWFyKFBDSV9JTlRfTVNLLCAxKTsKKworCWlmIChkZXYtPnZpZGVvX2RldltjaGFuX251bV0pIHsKKwkJaWYgKC0xICE9IGRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXS0+bWlub3IpCisJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2RldltjaGFuX251bV0pOworCQllbHNlCisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZpZGVvX2RldltjaGFuX251bV0pOworCisJCWRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXSA9IE5VTEw7CisKKwkJYnRjeF9yaXNjbWVtX2ZyZWUoZGV2LT5wY2ksICZkZXYtPnZpZHFbY2hhbl9udW1dLnN0b3BwZXIpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImRldmljZSAlZCByZWxlYXNlZCFcbiIsIGNoYW5fbnVtKTsKKwl9CisKK30KKworaW50IGN4MjU4MjFfdmlkZW9fcmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFuX251bSwKKwkJCSAgIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX3RlbXBsYXRlKQoreworCWludCBlcnI7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CisKKwkvL3ByaW50ayhLRVJOX1dBUk5JTkcgIkNoYW5uZWwgJWRcbiIsIGNoYW5fbnVtKTsKKworI2lmZGVmIFRVTkVSX0ZMQUcKKwlkZXYtPnR2bm9ybSA9IHZpZGVvX3RlbXBsYXRlLT5jdXJyZW50X25vcm07CisjZW5kaWYKKworCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLworCWRldi0+dGltZW91dF9kYXRhW2NoYW5fbnVtXS5kZXYgPSBkZXY7CisJZGV2LT50aW1lb3V0X2RhdGFbY2hhbl9udW1dLmNoYW5uZWwgPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5fbnVtXTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxW2NoYW5fbnVtXS5hY3RpdmUpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHFbY2hhbl9udW1dLnF1ZXVlZCk7CisJZGV2LT52aWRxW2NoYW5fbnVtXS50aW1lb3V0LmZ1bmN0aW9uID0gY3gyNTgyMV92aWRfdGltZW91dDsKKwlkZXYtPnZpZHFbY2hhbl9udW1dLnRpbWVvdXQuZGF0YSA9CisJICAgICh1bnNpZ25lZCBsb25nKSZkZXYtPnRpbWVvdXRfZGF0YVtjaGFuX251bV07CisJaW5pdF90aW1lcigmZGV2LT52aWRxW2NoYW5fbnVtXS50aW1lb3V0KTsKKwljeDI1ODIxX3Jpc2Nfc3RvcHBlcihkZXYtPnBjaSwgJmRldi0+dmlkcVtjaGFuX251bV0uc3RvcHBlciwKKwkJCSAgICAgZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5fbnVtXS5kbWFfY3RsLCAweDExLCAwKTsKKworCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCisJZGV2LT52aWRlb19kZXZbY2hhbl9udW1dID0KKwkgICAgY3gyNTgyMV92ZGV2X2luaXQoZGV2LCBkZXYtPnBjaSwgdmlkZW9fdGVtcGxhdGUsICJ2aWRlbyIpOworCWVyciA9CisJICAgIHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2RldltjaGFuX251bV0sIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJICB2aWRlb19ucltkZXYtPm5yXSk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlnb3RvIGZhaWxfdW5yZWc7CisJfQorCS8vc2V0IFBDSSBpbnRlcnJ1cHQKKwljeF9zZXQoUENJX0lOVF9NU0ssIDB4ZmYpOworCisJLyogaW5pdGlhbCBkZXZpY2UgY29uZmlndXJhdGlvbiAqLworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisjaWZkZWYgVFVORVJfRkxBRworCWN4MjU4MjFfc2V0X3R2bm9ybShkZXYsIGRldi0+dHZub3JtKTsKKyNlbmRpZgorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWluaXRfY29udHJvbHMoZGV2LCBjaGFuX251bSk7CisKKwlyZXR1cm4gMDsKKworICAgICAgZmFpbF91bnJlZzoKKwljeDI1ODIxX3ZpZGVvX3VucmVnaXN0ZXIoZGV2LCBjaGFuX251bSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGJ1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCSB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCisJKnNpemUgPSBmaC0+Zm10LT5kZXB0aCAqIGZoLT53aWR0aCAqIGZoLT5oZWlnaHQgPj4gMzsKKworCWlmICgwID09ICpjb3VudCkKKwkJKmNvdW50ID0gMzI7CisKKwl3aGlsZSAoKnNpemUgKiAqY291bnQgPiB2aWRfbGltaXQgKiAxMDI0ICogMTAyNCkKKwkJKCpjb3VudCktLTsKKworCXJldHVybiAwOworfQorCitpbnQgYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCWludCByYywgaW5pdF9idWZmZXIgPSAwOworCXUzMiBsaW5lMF9vZmZzZXQsIGxpbmUxX29mZnNldDsKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEgPSB2aWRlb2J1Zl90b19kbWEoJmJ1Zi0+dmIpOworCWludCBicGxfbG9jYWwgPSBMSU5FX1NJWkVfRDE7CisJaW50IGNoYW5uZWxfb3BlbmVkID0gMDsKKworCUJVR19PTihOVUxMID09IGZoLT5mbXQpOworCWlmIChmaC0+d2lkdGggPCA0OCB8fCBmaC0+d2lkdGggPiA3MjAgfHwKKwkgICAgZmgtPmhlaWdodCA8IDMyIHx8IGZoLT5oZWlnaHQgPiA1NzYpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmLT52Yi5zaXplID0gKGZoLT53aWR0aCAqIGZoLT5oZWlnaHQgKiBmaC0+Zm10LT5kZXB0aCkgPj4gMzsKKworCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgJiYgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnVmLT5mbXQgIT0gZmgtPmZtdCB8fAorCSAgICBidWYtPnZiLndpZHRoICE9IGZoLT53aWR0aCB8fAorCSAgICBidWYtPnZiLmhlaWdodCAhPSBmaC0+aGVpZ2h0IHx8IGJ1Zi0+dmIuZmllbGQgIT0gZmllbGQpIHsKKwkJYnVmLT5mbXQgPSBmaC0+Zm10OworCQlidWYtPnZiLndpZHRoID0gZmgtPndpZHRoOworCQlidWYtPnZiLmhlaWdodCA9IGZoLT5oZWlnaHQ7CisJCWJ1Zi0+dmIuZmllbGQgPSBmaWVsZDsKKwkJaW5pdF9idWZmZXIgPSAxOworCX0KKworCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IGJ1Zi0+dmIuc3RhdGUpIHsKKwkJaW5pdF9idWZmZXIgPSAxOworCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCAmYnVmLT52YiwgTlVMTCk7CisJCWlmICgwICE9IHJjKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAidmlkZW9idWZfaW9sb2NrIGZhaWxlZCFcbiIpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJZHByaW50aygxLCAiaW5pdF9idWZmZXI9JWRcbiIsIGluaXRfYnVmZmVyKTsKKworCWlmIChpbml0X2J1ZmZlcikgeworCisJCWNoYW5uZWxfb3BlbmVkID0gZGV2LT5jaGFubmVsX29wZW5lZDsKKwkJY2hhbm5lbF9vcGVuZWQgPSAoY2hhbm5lbF9vcGVuZWQgPCAwCisJCQkJICB8fCBjaGFubmVsX29wZW5lZCA+IDcpID8gNyA6IGNoYW5uZWxfb3BlbmVkOworCisJCWlmIChkZXYtPnBpeGVsX2Zvcm1hdHNbY2hhbm5lbF9vcGVuZWRdID09IFBJWEVMX0ZSTVRfNDExKQorCQkJYnVmLT5icGwgPSAoYnVmLT5mbXQtPmRlcHRoICogYnVmLT52Yi53aWR0aCkgPj4gMzsKKwkJZWxzZQorCQkJYnVmLT5icGwgPSAoYnVmLT5mbXQtPmRlcHRoID4+IDMpICogKGJ1Zi0+dmIud2lkdGgpOworCisJCWlmIChkZXYtPnBpeGVsX2Zvcm1hdHNbY2hhbm5lbF9vcGVuZWRdID09IFBJWEVMX0ZSTVRfNDExKSB7CisJCQlicGxfbG9jYWwgPSBidWYtPmJwbDsKKwkJfSBlbHNlIHsKKwkJCWJwbF9sb2NhbCA9IGJ1Zi0+YnBsOwkvL0RlZmF1bHQKKworCQkJaWYgKGNoYW5uZWxfb3BlbmVkID49IDAgJiYgY2hhbm5lbF9vcGVuZWQgPD0gNykgeworCQkJCWlmIChkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltjaGFubmVsX29wZW5lZF0pIHsKKwkJCQkJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHCisJCQkJCSAgICB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJCQkJCWJwbF9sb2NhbCA9IDM1MiA8PCAxOworCQkJCQllbHNlCisJCQkJCQlicGxfbG9jYWwgPQorCQkJCQkJICAgIGRldi0+CisJCQkJCQkgICAgY2lmX3dpZHRoW2NoYW5uZWxfb3BlbmVkXSA8PAorCQkJCQkJICAgIDE7CisJCQkJfQorCQkJfQorCQl9CisKKwkJc3dpdGNoIChidWYtPnZiLmZpZWxkKSB7CisJCWNhc2UgVjRMMl9GSUVMRF9UT1A6CisJCQljeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAorCQkJCQkgICAgZG1hLT5zZ2xpc3QsIDAsIFVOU0VULAorCQkJCQkgICAgYnVmLT5icGwsIDAsIGJ1Zi0+dmIuaGVpZ2h0KTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfRklFTERfQk9UVE9NOgorCQkJY3gyNTgyMV9yaXNjX2J1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKKwkJCQkJICAgIGRtYS0+c2dsaXN0LCBVTlNFVCwgMCwKKwkJCQkJICAgIGJ1Zi0+YnBsLCAwLCBidWYtPnZiLmhlaWdodCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCQkvKiBBbGwgb3RoZXIgZm9ybWF0cyBhcmUgdG9wIGZpZWxkIGZpcnN0ICovCisJCQlsaW5lMF9vZmZzZXQgPSAwOworCQkJbGluZTFfb2Zmc2V0ID0gYnVmLT5icGw7CisJCQlkcHJpbnRrKDEsICJ0b3AgZmllbGQgZmlyc3RcbiIpOworCisJCQljeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAorCQkJCQkgICAgZG1hLT5zZ2xpc3QsIGxpbmUwX29mZnNldCwKKwkJCQkJICAgIGJwbF9sb2NhbCwgYnBsX2xvY2FsLCBicGxfbG9jYWwsCisJCQkJCSAgICBidWYtPnZiLmhlaWdodCA+PiAxKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfRklFTERfU0VRX1RCOgorCQkJY3gyNTgyMV9yaXNjX2J1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKKwkJCQkJICAgIGRtYS0+c2dsaXN0LAorCQkJCQkgICAgMCwgYnVmLT5icGwgKiAoYnVmLT52Yi5oZWlnaHQgPj4gMSksCisJCQkJCSAgICBidWYtPmJwbCwgMCwgYnVmLT52Yi5oZWlnaHQgPj4gMSk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0ZJRUxEX1NFUV9CVDoKKwkJCWN4MjU4MjFfcmlzY19idWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCisJCQkJCSAgICBkbWEtPnNnbGlzdCwKKwkJCQkJICAgIGJ1Zi0+YnBsICogKGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpLCAwLAorCQkJCQkgICAgYnVmLT5icGwsIDAsIGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCX0KKworCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3ByZXAgLSAlZHglZCAlZGJwcCBcIiVzXCIgLSBkbWE9MHglMDhseFxuIiwKKwkJYnVmLCBidWYtPnZiLmksIGZoLT53aWR0aCwgZmgtPmhlaWdodCwgZmgtPmZtdC0+ZGVwdGgsCisJCWZoLT5mbXQtPm5hbWUsICh1bnNpZ25lZCBsb25nKWJ1Zi0+cmlzYy5kbWEpOworCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJcmV0dXJuIDA7CisKKyAgICAgIGZhaWw6CisJY3gyNTgyMV9mcmVlX2J1ZmZlcihxLCBidWYpOworCXJldHVybiByYzsKK30KKwordm9pZCBidWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKworCWN4MjU4MjFfZnJlZV9idWZmZXIocSwgYnVmKTsKK30KKworc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpnZXRfcXVldWUoc3RydWN0IGN4MjU4MjFfZmggKmZoKQoreworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJcmV0dXJuICZmaC0+dmlkcTsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitpbnQgZ2V0X3Jlc291cmNlKHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwgaW50IHJlc291cmNlKQoreworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJcmV0dXJuIHJlc291cmNlOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK2ludCB2aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdmlkZW9idWZfbW1hcF9tYXBwZXIoZ2V0X3F1ZXVlKGZoKSwgdm1hKTsKK30KKworLyogVklERU8gSU9DVExTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCisJZi0+Zm10LnBpeC53aWR0aCA9IGZoLT53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCA9IGZoLT5oZWlnaHQ7CisJZi0+Zm10LnBpeC5maWVsZCA9IGZoLT52aWRxLmZpZWxkOworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBmaC0+Zm10LT5mb3VyY2M7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAoZi0+Zm10LnBpeC53aWR0aCAqIGZoLT5mbXQtPmRlcHRoKSA+PiAzOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZtdCAqZm10OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwl1bnNpZ25lZCBpbnQgbWF4dywgbWF4aDsKKworCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJaWYgKE5VTEwgPT0gZm10KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwltYXh3ID0gNzIwOworCW1heGggPSA1NzY7CisKKwlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKKwkJZmllbGQgPSAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoIC8gMikKKwkJICAgID8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIDogVjRMMl9GSUVMRF9UT1A7CisJfQorCisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9UT1A6CisJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKKwkJbWF4aCA9IG1heGggLyAyOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZi0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOworCWlmIChmLT5mbXQucGl4LmhlaWdodCA8IDMyKQorCQlmLT5mbXQucGl4LmhlaWdodCA9IDMyOworCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgpCisJCWYtPmZtdC5waXguaGVpZ2h0ID0gbWF4aDsKKwlpZiAoZi0+Zm10LnBpeC53aWR0aCA8IDQ4KQorCQlmLT5mbXQucGl4LndpZHRoID0gNDg7CisJaWYgKGYtPmZtdC5waXgud2lkdGggPiBtYXh3KQorCQlmLT5mbXQucGl4LndpZHRoID0gbWF4dzsKKwlmLT5mbXQucGl4LndpZHRoICY9IH4weDAzOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gKGYtPmZtdC5waXgud2lkdGggKiBmbXQtPmRlcHRoKSA+PiAzOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXN0cmNweShjYXAtPmRyaXZlciwgImN4MjU4MjEiKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgY3gyNTgyMV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCXNwcmludGYoY2FwLT5idXNfaW5mbywgIlBDSWU6JXMiLCBwY2lfbmFtZShkZXYtPnBjaSkpOworCWNhcC0+dmVyc2lvbiA9IENYMjU4MjFfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0KKwkgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwlpZiAoVU5TRVQgIT0gZGV2LT50dW5lcl90eXBlKQorCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9UVU5FUjsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJaWYgKHVubGlrZWx5KGYtPmluZGV4ID49IEFSUkFZX1NJWkUoZm9ybWF0cykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZvcm1hdHNbZi0+aW5kZXhdLm5hbWUsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOworCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c1tmLT5pbmRleF0uZm91cmNjOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKK2ludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnE7CisJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmVxOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisKKwlxID0gZ2V0X3F1ZXVlKGZoKTsKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCXJlcS50eXBlID0gcS0+dHlwZTsKKwlyZXEuY291bnQgPSA4OworCXJlcS5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCWVyciA9IHZpZGVvYnVmX3JlcWJ1ZnMocSwgJnJlcSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwltYnVmLT5mcmFtZXMgPSByZXEuY291bnQ7CisJbWJ1Zi0+c2l6ZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1idWYtPmZyYW1lczsgaSsrKSB7CisJCW1idWYtPm9mZnNldHNbaV0gPSBxLT5idWZzW2ldLT5ib2ZmOworCQltYnVmLT5zaXplICs9IHEtPmJ1ZnNbaV0tPmJzaXplOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpwKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoZ2V0X3F1ZXVlKGZoKSwgcCk7Cit9CisKK2ludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZihnZXRfcXVldWUoZmgpLCBwKTsKK30KKworaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZihnZXRfcXVldWUoZmgpLCBwKTsKK30KKworaW50IHZpZGlvY19nX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmLCBlbnVtIHY0bDJfcHJpb3JpdHkgKnApCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopZiktPmRldjsKKworCSpwID0gdjRsMl9wcmlvX21heCgmZGV2LT5wcmlvKTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsIGVudW0gdjRsMl9wcmlvcml0eSBwcmlvKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopZiktPmRldjsKKworCXJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZkZXYtPnByaW8sICZmaC0+cHJpbywgcHJpbyk7Cit9CisKKyNpZmRlZiBUVU5FUl9GTEFHCitpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqIHR2bm9ybXMpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGRldi0+dHZub3JtID09ICp0dm5vcm1zKSB7CisJCXJldHVybiAwOworCX0KKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJY3gyNTgyMV9zZXRfdHZub3JtKGRldiwgKnR2bm9ybXMpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCW1lZHVzYV9zZXRfdmlkZW9zdGFuZGFyZChkZXYpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IGN4MjU4MjFfZW51bV9pbnB1dChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7CisJCVtDWDI1ODIxX1ZNVVhfQ09NUE9TSVRFXSA9ICJDb21wb3NpdGUiLAorCQlbQ1gyNTgyMV9WTVVYX1NWSURFT10gPSAiUy1WaWRlbyIsCisJCVtDWDI1ODIxX1ZNVVhfREVCVUddID0gImZvciBkZWJ1ZyBvbmx5IiwKKwl9OworCXVuc2lnbmVkIGludCBuOworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW4gPSBpLT5pbmRleDsKKwlpZiAobiA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKDAgPT0gSU5QVVQobiktPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOworCWktPmluZGV4ID0gbjsKKwlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwlzdHJjcHkoaS0+bmFtZSwgaW5hbWVbSU5QVVQobiktPnR5cGVdKTsKKworCWktPnN0ZCA9IENYMjU4MjFfTk9STVM7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIGN4MjU4MjFfZW51bV9pbnB1dChkZXYsIGkpOworfQorCitpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJKmkgPSBkZXYtPmlucHV0OworCWRwcmludGsoMSwgIiVzKCkgcmV0dXJucyAlZFxuIiwgX19mdW5jX18sICppKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWRwcmludGsoMSwgIiVzKCVkKVxuIiwgX19mdW5jX18sIGkpOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChpID4gMikgeworCQlkcHJpbnRrKDEsICIlcygpIC1FSU5WQUxcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwljeDI1ODIxX3ZpZGVvX211eChkZXYsIGkpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFRVTkVSX0ZMQUcKK2ludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWYtPmZyZXF1ZW5jeSA9IGRldi0+ZnJlcTsKKworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB0dW5lciwgZ19mcmVxdWVuY3ksIGYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDI1ODIxX3NldF9mcmVxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CisKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmKTsKKworCS8qIFdoZW4gY2hhbmdpbmcgY2hhbm5lbHMgaXQgaXMgcmVxdWlyZWQgdG8gcmVzZXQgVFZBVURJTyAqLworCW1zbGVlcCgxMCk7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGN4MjU4MjFfc2V0X2ZyZXEoZGV2LCBmKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworaW50IHZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopZmgpLT5kZXY7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilmaCktPmRldjsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgVFVORVJfRkxBRworaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJaWYgKHVubGlrZWx5KFVOU0VUID09IGRldi0+dHVuZXJfdHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgwICE9IHQtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweSh0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOworCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STTsKKwl0LT5yYW5nZWhpZ2ggPSAweGZmZmZmZmZmVUw7CisKKwl0LT5zaWduYWwgPSAweGZmZmY7CS8qIExPQ0tFRCAqLworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwlpZiAoVU5TRVQgPT0gZGV2LT50dW5lcl90eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoMCAhPSB0LT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgbm9fY3RsID0geworCS5uYW1lID0gIjQyIiwKKwkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgY3gyNTgyMV9jdGxzW10gPSB7CisJLyogLS0tIHZpZGVvIC0tLSAqLworCXsKKwkgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkgLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCisJIC5taW5pbXVtID0gMCwKKwkgLm1heGltdW0gPSAxMDAwMCwKKwkgLnN0ZXAgPSAxLAorCSAuZGVmYXVsdF92YWx1ZSA9IDYyMDAsCisJIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkgfSwgeworCSAgICAgLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJICAgICAubmFtZSA9ICJDb250cmFzdCIsCisJICAgICAubWluaW11bSA9IDAsCisJICAgICAubWF4aW11bSA9IDEwMDAwLAorCSAgICAgLnN0ZXAgPSAxLAorCSAgICAgLmRlZmF1bHRfdmFsdWUgPSA1MDAwLAorCSAgICAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCSAgICAgfSwgeworCQkgLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJIC5uYW1lID0gIlNhdHVyYXRpb24iLAorCQkgLm1pbmltdW0gPSAwLAorCQkgLm1heGltdW0gPSAxMDAwMCwKKwkJIC5zdGVwID0gMSwKKwkJIC5kZWZhdWx0X3ZhbHVlID0gNTAwMCwKKwkJIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJIH0sIHsKKwkJICAgICAuaWQgPSBWNEwyX0NJRF9IVUUsCisJCSAgICAgLm5hbWUgPSAiSHVlIiwKKwkJICAgICAubWluaW11bSA9IDAsCisJCSAgICAgLm1heGltdW0gPSAxMDAwMCwKKwkJICAgICAuc3RlcCA9IDEsCisJCSAgICAgLmRlZmF1bHRfdmFsdWUgPSA1MDAwLAorCQkgICAgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJICAgICB9Cit9Oworc3RhdGljIGNvbnN0IGludCBDWDI1ODIxX0NUTFMgPSBBUlJBWV9TSVpFKGN4MjU4MjFfY3Rscyk7CisKK3N0YXRpYyBpbnQgY3gyNTgyMV9jdHJsX3F1ZXJ5KHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit7CisJaW50IGk7CisKKwlpZiAocWN0cmwtPmlkIDwgVjRMMl9DSURfQkFTRSB8fCBxY3RybC0+aWQgPj0gVjRMMl9DSURfTEFTVFAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gyNTgyMV9DVExTOyBpKyspCisJCWlmIChjeDI1ODIxX2N0bHNbaV0uaWQgPT0gcWN0cmwtPmlkKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gQ1gyNTgyMV9DVExTKSB7CisJCSpxY3RybCA9IG5vX2N0bDsKKwkJcmV0dXJuIDA7CisJfQorCSpxY3RybCA9IGN4MjU4MjFfY3Rsc1tpXTsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCSAgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3sKKwlyZXR1cm4gY3gyNTgyMV9jdHJsX3F1ZXJ5KHFjdHJsKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBWSURFTyBDVFJMIElPQ1RMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybF9ieV9pZCh1bnNpZ25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ1gyNTgyMV9DVExTOyBpKyspCisJCWlmIChjeDI1ODIxX2N0bHNbaV0uaWQgPT0gaWQpCisJCQlyZXR1cm4gY3gyNTgyMV9jdGxzICsgaTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOworCisJY3RybCA9IGN0cmxfYnlfaWQoY3RsLT5pZCk7CisKKwlpZiAoTlVMTCA9PSBjdHJsKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKGN0bC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0bC0+dmFsdWUgPSBkZXYtPmN0bF9icmlnaHQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQljdGwtPnZhbHVlID0gZGV2LT5jdGxfaHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdGwtPnZhbHVlID0gZGV2LT5jdGxfY29udHJhc3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJY3RsLT52YWx1ZSA9IGRldi0+Y3RsX3NhdHVyYXRpb247CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGN4MjU4MjFfc2V0X2NvbnRyb2woc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwsIGludCBjaGFuX251bSkKK3sKKwlpbnQgZXJyOworCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybDsKKworCWVyciA9IC1FSU5WQUw7CisKKwljdHJsID0gY3RybF9ieV9pZChjdGwtPmlkKTsKKworCWlmIChOVUxMID09IGN0cmwpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgorCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKKwkJaWYgKGN0bC0+dmFsdWUgPCBjdHJsLT5taW5pbXVtKQorCQkJY3RsLT52YWx1ZSA9IGN0cmwtPm1pbmltdW07CisJCWlmIChjdGwtPnZhbHVlID4gY3RybC0+bWF4aW11bSkKKwkJCWN0bC0+dmFsdWUgPSBjdHJsLT5tYXhpbXVtOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBub3RoaW5nICovIDsKKwl9OworCisJc3dpdGNoIChjdGwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlkZXYtPmN0bF9icmlnaHQgPSBjdGwtPnZhbHVlOworCQltZWR1c2Ffc2V0X2JyaWdodG5lc3MoZGV2LCBjdGwtPnZhbHVlLCBjaGFuX251bSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlkZXYtPmN0bF9odWUgPSBjdGwtPnZhbHVlOworCQltZWR1c2Ffc2V0X2h1ZShkZXYsIGN0bC0+dmFsdWUsIGNoYW5fbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJZGV2LT5jdGxfY29udHJhc3QgPSBjdGwtPnZhbHVlOworCQltZWR1c2Ffc2V0X2NvbnRyYXN0KGRldiwgY3RsLT52YWx1ZSwgY2hhbl9udW0pOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWRldi0+Y3RsX3NhdHVyYXRpb24gPSBjdGwtPnZhbHVlOworCQltZWR1c2Ffc2V0X3NhdHVyYXRpb24oZGV2LCBjdGwtPnZhbHVlLCBjaGFuX251bSk7CisJCWJyZWFrOworCX0KKworCWVyciA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpbml0X2NvbnRyb2xzKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0pCit7CisJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBDWDI1ODIxX0NUTFM7IGkrKykgeworCQljdHJsLmlkID0gY3gyNTgyMV9jdGxzW2ldLmlkOworCQljdHJsLnZhbHVlID0gY3gyNTgyMV9jdGxzW2ldLmRlZmF1bHRfdmFsdWU7CisKKwkJY3gyNTgyMV9zZXRfY29udHJvbChkZXYsICZjdHJsLCBjaGFuX251bSk7CisJfQorfQorCitpbnQgdmlkaW9jX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXApCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCWlmIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwljcm9wY2FwLT5ib3VuZHMud2lkdGggPSA3MjA7CisJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IGRldi0+dHZub3JtID09IFY0TDJfU1REX1BBTF9CRyA/IDU3NiA6IDQ4MDsKKwljcm9wY2FwLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPQorCSAgICBkZXYtPnR2bm9ybSA9PSBWNEwyX1NURF9QQUxfQkcgPyA1OSA6IDEwOworCWNyb3BjYXAtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yID0KKwkgICAgZGV2LT50dm5vcm0gPT0gVjRMMl9TVERfUEFMX0JHID8gNTQgOiAxMTsKKwljcm9wY2FwLT5kZWZyZWN0ID0gY3JvcGNhcC0+Ym91bmRzOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJLy8gdmlkaW9jX3NfY3JvcCBub3Qgc3VwcG9ydGVkCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCB2aWRpb2NfZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQoreworCS8vIHZpZGlvY19nX2Nyb3Agbm90IHN1cHBvcnRlZAorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgdmlkaW9jX3F1ZXJ5c3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqIG5vcm0pCit7CisJLy8gbWVkdXNhIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gc3RhbmRhcmQgc2Vuc2luZyBvZiBjdXJyZW50IGlucHV0CisJKm5vcm0gPSBDWDI1ODIxX05PUk1TOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpc192YWxpZF93aWR0aCh1MzIgd2lkdGgsIHY0bDJfc3RkX2lkIHR2bm9ybSkKK3sKKwlpZiAodHZub3JtID09IFY0TDJfU1REX1BBTF9CRykgeworCQlpZiAod2lkdGggPT0gMzUyIHx8IHdpZHRoID09IDcyMCkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodHZub3JtID09IFY0TDJfU1REX05UU0NfTSkgeworCQlpZiAod2lkdGggPT0gMzIwIHx8IHdpZHRoID09IDM1MiB8fCB3aWR0aCA9PSA3MjApCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCitpbnQgaXNfdmFsaWRfaGVpZ2h0KHUzMiBoZWlnaHQsIHY0bDJfc3RkX2lkIHR2bm9ybSkKK3sKKwlpZiAodHZub3JtID09IFY0TDJfU1REX1BBTF9CRykgeworCQlpZiAoaGVpZ2h0ID09IDU3NiB8fCBoZWlnaHQgPT0gMjg4KQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKworCWlmICh0dm5vcm0gPT0gVjRMMl9TVERfTlRTQ19NKSB7CisJCWlmIChoZWlnaHQgPT0gNDgwIHx8IGhlaWdodCA9PSAyNDApCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxN2ZmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uaApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgQ1gyNTgyMV9WSURFT19IXworI2RlZmluZSBDWDI1ODIxX1ZJREVPX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImN4MjU4MjEuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjZW5kaWYKKworI2RlZmluZSBUVU5FUl9GTEFHCisKKyNkZWZpbmUgVklERU9fREVCVUcgMAorCisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKVwKKyAgICBkbyB7IGlmIChWSURFT19ERUJVRyA+PSBsZXZlbClcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzA6ICIgZm10LCBkZXYtPm5hbWUsICMjIGFyZyk7XAorICAgIH0gd2hpbGUgKDApCisKKy8vRm9yIElPQ1RMIHRvIGlkZW50aWZ5IHJ1bm5pbmcgdXBzdHJlYW0KKyNkZWZpbmUgVVBTVFJFQU1fU1RBUlRfVklERU8gICAgICAgIDcwMAorI2RlZmluZSBVUFNUUkVBTV9TVE9QX1ZJREVPICAgICAgICAgNzAxCisjZGVmaW5lIFVQU1RSRUFNX1NUQVJUX0FVRElPICAgICAgICA3MDIKKyNkZWZpbmUgVVBTVFJFQU1fU1RPUF9BVURJTyAgICAgICAgIDcwMworI2RlZmluZSBVUFNUUkVBTV9EVU1QX1JFR0lTVEVSUyAgICAgNzAyCisjZGVmaW5lIFNFVF9WSURFT19TVEQgICAgICAgICAgICAgICA4MDAKKyNkZWZpbmUgU0VUX1BJWEVMX0ZPUk1BVCAgICAgICAgICAgIDEwMDAKKyNkZWZpbmUgRU5BQkxFX0NJRl9SRVNPTFVUSU9OICAgICAgIDEwMDEKKworI2RlZmluZSBSRUdfUkVBRAkJICAgIDkwMAorI2RlZmluZSBSRUdfV1JJVEUJCSAgICA5MDEKKyNkZWZpbmUgTUVEVVNBX1JFQUQJCSAgICA5MTAKKyNkZWZpbmUgTUVEVVNBX1dSSVRFCQk5MTEKKworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwwOworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwxOworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwyOworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwzOworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw0OworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw1OworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw2OworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw3OworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw5OworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwxMDsKK2V4dGVybiBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsMTE7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMDsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxOworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTI7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMzsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU0OworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTU7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNjsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU3OworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTk7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTA7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTE7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvaW9jdGxfdGVtcGxhdGU7CisvL2V4dGVybiBjb25zdCB1MzIgKmN0cmxfY2xhc3Nlc1tdOworCitleHRlcm4gdW5zaWduZWQgaW50IHZpZF9saW1pdDsKKworI2RlZmluZSBGT1JNQVRfRkxBR1NfUEFDS0VEICAgICAgIDB4MDEKK2V4dGVybiBzdHJ1Y3QgY3gyNTgyMV9mbXQgZm9ybWF0c1tdOworZXh0ZXJuIHN0cnVjdCBjeDI1ODIxX2ZtdCAqZm9ybWF0X2J5X2ZvdXJjYyh1bnNpZ25lZCBpbnQgZm91cmNjKTsKK2V4dGVybiBzdHJ1Y3QgY3gyNTgyMV9kYXRhIHRpbWVvdXRfZGF0YVtNQVhfVklEX0NIQU5ORUxfTlVNXTsKKworZXh0ZXJuIHZvaWQgZHVtcF92aWRlb19xdWV1ZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCSAgICAgc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV92aWRlb193YWtldXAoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxLCB1MzIgY291bnQpOworCisjaWZkZWYgVFVORVJfRkxBRworZXh0ZXJuIGludCBjeDI1ODIxX3NldF90dm5vcm0oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHY0bDJfc3RkX2lkIG5vcm0pOworI2VuZGlmCisKK2V4dGVybiBpbnQgcmVzX2dldChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IGN4MjU4MjFfZmggKmZoLAorCQkgICB1bnNpZ25lZCBpbnQgYml0KTsKK2V4dGVybiBpbnQgcmVzX2NoZWNrKHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdCk7CitleHRlcm4gaW50IHJlc19sb2NrZWQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBiaXQpOworZXh0ZXJuIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwKKwkJICAgICB1bnNpZ25lZCBpbnQgYml0cyk7CitleHRlcm4gaW50IGN4MjU4MjFfdmlkZW9fbXV4KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOworZXh0ZXJuIGludCBjeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICBzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSwKKwkJCQkgICBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiwKKwkJCQkgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsKTsKKworZXh0ZXJuIGludCBjeDI1ODIxX3NldF9zY2FsZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgdW5zaWduZWQgaW50IHdpZHRoLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCBlbnVtIHY0bDJfZmllbGQgZmllbGQpOworZXh0ZXJuIGludCBjeDI1ODIxX3ZpZGVvX2lycShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLCB1MzIgc3RhdHVzKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfdmlkZW9fdW5yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtKTsKK2V4dGVybiBpbnQgY3gyNTgyMV92aWRlb19yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLAorCQkJCSAgc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fdGVtcGxhdGUpOworZXh0ZXJuIGludCBnZXRfZm9ybWF0X3NpemUodm9pZCk7CisKK2V4dGVybiBpbnQgYnVmZmVyX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCXVuc2lnbmVkIGludCAqc2l6ZSk7CitleHRlcm4gaW50IGJ1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgIGVudW0gdjRsMl9maWVsZCBmaWVsZCk7CitleHRlcm4gdm9pZCBidWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yik7CitleHRlcm4gc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpnZXRfcXVldWUoc3RydWN0IGN4MjU4MjFfZmggKmZoKTsKK2V4dGVybiBpbnQgZ2V0X3Jlc291cmNlKHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwgaW50IHJlc291cmNlKTsKK2V4dGVybiBpbnQgdmlkZW9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworZXh0ZXJuIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKK2V4dGVybiBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKTsKK2V4dGVybiBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZik7CitleHRlcm4gaW50IHZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1Zik7CitleHRlcm4gaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCk7CitleHRlcm4gaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCk7CitleHRlcm4gaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApOworZXh0ZXJuIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogdHZub3Jtcyk7CitleHRlcm4gaW50IGN4MjU4MjFfZW51bV9pbnB1dChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHY0bDJfaW5wdXQgKmkpOworZXh0ZXJuIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfaW5wdXQgKmkpOworZXh0ZXJuIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKTsKK2V4dGVybiBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKTsKK2V4dGVybiBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpOworZXh0ZXJuIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOworZXh0ZXJuIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpOworZXh0ZXJuIGludCBjeDI1ODIxX3NldF9mcmVxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpOworZXh0ZXJuIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpOworZXh0ZXJuIGludCB2aWRpb2NfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKTsKK2V4dGVybiBpbnQgdmlkaW9jX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZyk7CitleHRlcm4gaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdCk7CitleHRlcm4gaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdCk7CisKK2V4dGVybiBpbnQgaXNfdmFsaWRfd2lkdGgodTMyIHdpZHRoLCB2NGwyX3N0ZF9pZCB0dm5vcm0pOworZXh0ZXJuIGludCBpc192YWxpZF9oZWlnaHQodTMyIGhlaWdodCwgdjRsMl9zdGRfaWQgdHZub3JtKTsKKworZXh0ZXJuIGludCB2aWRpb2NfZ19wcmlvcml0eShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZiwgZW51bSB2NGwyX3ByaW9yaXR5ICpwKTsKK2V4dGVybiBpbnQgdmlkaW9jX3NfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsCisJCQkgICAgIGVudW0gdjRsMl9wcmlvcml0eSBwcmlvKTsKKworZXh0ZXJuIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpOworZXh0ZXJuIGludCBjeDI1ODIxX3NldF9jb250cm9sKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwsIGludCBjaGFuX251bSk7CisKK2V4dGVybiBpbnQgdmlkaW9jX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICBzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wY2FwKTsKK2V4dGVybiBpbnQgdmlkaW9jX3NfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCk7CitleHRlcm4gaW50IHZpZGlvY19nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApOworCitleHRlcm4gaW50IHZpZGlvY19xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKiBub3JtKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwZmFjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8wLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDAwXTsKKworCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOworCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKKworCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCisJCQlidWYtPnZiLmkpOworCisJfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKKwkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDBdKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJZHByaW50aygyLAorCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOworCX0gZWxzZSB7CisJCXByZXYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCisJCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKKwkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOworCisJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKKwkJCWRwcmludGsoMiwKKwkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKKworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCQlidWYtPnZiLmkpOworCQl9CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCXUzMiBwaXhfZm9ybWF0OworCisJbG9ja19rZXJuZWwoKTsKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjU4MjFfZGV2LCBkZXZsaXN0KTsKKworCQlpZiAoaC0+dmlkZW9fZGV2W1NSQU1fQ0gwMF0KKwkJICAgICYmIGgtPnZpZGVvX2RldltTUkFNX0NIMDBdLT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKwl9CisKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoIm9wZW4gbWlub3I9JWQgdHlwZT0lc1xuIiwgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisKKwkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+ZGV2ID0gZGV2OworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+d2lkdGggPSA3MjA7CisKKwlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCisJCWZoLT5oZWlnaHQgPSA1NzY7CisJZWxzZQorCQlmaC0+aGVpZ2h0ID0gNDgwOworCisJZGV2LT5jaGFubmVsX29wZW5lZCA9IFNSQU1fQ0gwMDsKKwlwaXhfZm9ybWF0ID0KKwkgICAgKGRldi0+cGl4ZWxfZm9ybWF0c1tkZXYtPmNoYW5uZWxfb3BlbmVkXSA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gVjRMMl9QSVhfRk1UX1k0MVAgOiBWNEwyX1BJWF9GTVRfWVVZVjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhwaXhfZm9ybWF0KTsKKworCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKKwkJCSAgICAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCisJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwgZmgpOworCisJZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgbG9mZl90ICogcHBvcykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPMCkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzApKSB7CisJCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKKwl9IGVsc2UgeworCQkvKiByZWFkKCkgY2FwdHVyZSAqLworCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7CisJCWlmIChOVUxMID09IGJ1ZikKKwkJCXJldHVybiBQT0xMRVJSOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKKwkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgeworCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMF0pIHsKKwkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOworCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCisJCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKKwkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKKwkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOworCQkJfQorCQl9CisKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbworCWN4X3dyaXRlKGNoYW5uZWwwLT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCisKKwkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzApKSB7CisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOworCQlyZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzApOworCX0KKworCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSghcmVzX2dldChkZXYsIGZoLCBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMCkpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMCk7CisJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJlc19mcmVlKGRldiwgZmgsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCWludCBwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CisKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisKKwkvLyBjaGVjayBpZiB3aWR0aCBhbmQgaGVpZ2h0IGlzIHZhbGlkIGJhc2VkIG9uIHNldCBzdGFuZGFyZAorCWlmIChpc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwl9CisKKwlpZiAoaXNfdmFsaWRfaGVpZ2h0KGYtPmZtdC5waXguaGVpZ2h0LCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCX0KKworCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZNDFQKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MTE7CisJZWxzZSBpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDIyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeDI1ODIxX3NldF9waXhlbF9mb3JtYXQoZGV2LCBTUkFNX0NIMDAsIHBpeF9mb3JtYXQpOworCisJLy8gY2hlY2sgaWYgY2lmIHJlc29sdXRpb24KKwlpZiAoZmgtPndpZHRoID09IDMyMCB8fCBmaC0+d2lkdGggPT0gMzUyKSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMF0gPSAxOworCX0gZWxzZSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMF0gPSAwOworCX0KKwlkZXYtPmNpZl93aWR0aFtTUkFNX0NIMDBdID0gZmgtPndpZHRoOworCW1lZHVzYV9zZXRfcmVzb2x1dGlvbihkZXYsIGZoLT53aWR0aCwgU1JBTV9DSDAwKTsKKworCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAorCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJcmV0X3ZhbCA9IHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCXAtPnNlcXVlbmNlID0gZGV2LT52aWRxW1NSQU1fQ0gwMF0uY291bnQ7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWNoYXIgbmFtZVszMiArIDJdOworCisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDAwXTsKKwl1MzIgdG1wID0gMDsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDAgaXMgJXNcbiIsCisJICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDAwKTsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTAgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGRkZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzEuYwpAQCAtMCwwICsxLDQ1MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDFdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwMV0pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJdTMyIHBpeF9mb3JtYXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDAxXQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwMV0tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDAxOworCXBpeF9mb3JtYXQgPQorCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU8xKSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMSkpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAxXSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDEtPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMSkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPMSk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xKSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xKTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSAwOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCisJLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKKwlpZiAoaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJfQorCisJaWYgKGlzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwl9CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDAxLCBwaXhfZm9ybWF0KTsKKworCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCisJaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDFdID0gMTsKKwl9IGVsc2UgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDFdID0gMDsKKwl9CisJZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDAxXSA9IGZoLT53aWR0aDsKKwltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwMSk7CisKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDFdLmNvdW50OworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwMV07CisJdTMyIHRtcCA9IDA7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBpbnB1dCAxIGlzICVzXG4iLAorCSAgICAgICAodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwMSk7Cit9CisKKy8vZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTEgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMi5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTA0ZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzIuYwpAQCAtMCwwICsxLDQ1MiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDJdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwMl0pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJdTMyIHBpeF9mb3JtYXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDAyXQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwMl0tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+ZGV2ID0gZGV2OworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+d2lkdGggPSA3MjA7CisKKwlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCisJCWZoLT5oZWlnaHQgPSA1NzY7CisJZWxzZQorCQlmaC0+aGVpZ2h0ID0gNDgwOworCisJZGV2LT5jaGFubmVsX29wZW5lZCA9IFNSQU1fQ0gwMjsKKwlwaXhfZm9ybWF0ID0KKwkgICAgKGRldi0+cGl4ZWxfZm9ybWF0c1tkZXYtPmNoYW5uZWxfb3BlbmVkXSA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gVjRMMl9QSVhfRk1UX1k0MVAgOiBWNEwyX1BJWF9GTVRfWVVZVjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhwaXhfZm9ybWF0KTsKKworCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKKwkJCSAgICAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCisJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwgZmgpOworCisJZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgbG9mZl90ICogcHBvcykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPMikpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzIpKSB7CisJCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKKwl9IGVsc2UgeworCQkvKiByZWFkKCkgY2FwdHVyZSAqLworCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7CisJCWlmIChOVUxMID09IGJ1ZikKKwkJCXJldHVybiBQT0xMRVJSOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKKwkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgeworCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMl0pIHsKKwkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOworCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCisJCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKKwkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKKwkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOworCQkJfQorCQl9CisKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbworCWN4X3dyaXRlKGNoYW5uZWwyLT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCisKKwkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzIpKSB7CisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOworCQlyZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzIpOworCX0KKworCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSghcmVzX2dldChkZXYsIGZoLCBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMikpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMik7CisJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJlc19mcmVlKGRldiwgZmgsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCWludCBwaXhfZm9ybWF0ID0gMDsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKworCS8vIGNoZWNrIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgdmFsaWQgYmFzZWQgb24gc2V0IHN0YW5kYXJkCisJaWYgKGlzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkgeworCQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCX0KKworCWlmIChpc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgeworCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJfQorCisJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKKwllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwMiwgcGl4X2Zvcm1hdCk7CisKKwkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgorCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAyXSA9IDE7CisJfSBlbHNlIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAyXSA9IDA7CisJfQorCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwMl0gPSBmaC0+d2lkdGg7CisJbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDIpOworCisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDAyXS5jb3VudDsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDJdOworCXUzMiB0bXAgPSAwOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDIgaXMgJXNcbiIsCisJICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDAyKTsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTIgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODAxYThlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzMuYwpAQCAtMCwwICsxLDQ1MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDNdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwM10pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJdTMyIHBpeF9mb3JtYXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDAzXQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwM10tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+ZGV2ID0gZGV2OworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+d2lkdGggPSA3MjA7CisKKwlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCisJCWZoLT5oZWlnaHQgPSA1NzY7CisJZWxzZQorCQlmaC0+aGVpZ2h0ID0gNDgwOworCisJZGV2LT5jaGFubmVsX29wZW5lZCA9IFNSQU1fQ0gwMzsKKwlwaXhfZm9ybWF0ID0KKwkgICAgKGRldi0+cGl4ZWxfZm9ybWF0c1tkZXYtPmNoYW5uZWxfb3BlbmVkXSA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gVjRMMl9QSVhfRk1UX1k0MVAgOiBWNEwyX1BJWF9GTVRfWVVZVjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhwaXhfZm9ybWF0KTsKKworCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKKwkJCSAgICAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCisJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwgZmgpOworCisJZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgbG9mZl90ICogcHBvcykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPMykpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzMpKSB7CisJCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKKwl9IGVsc2UgeworCQkvKiByZWFkKCkgY2FwdHVyZSAqLworCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7CisJCWlmIChOVUxMID09IGJ1ZikKKwkJCXJldHVybiBQT0xMRVJSOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKKwkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgeworCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwM10pIHsKKwkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOworCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCisJCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKKwkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKKwkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOworCQkJfQorCQl9CisKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbworCWN4X3dyaXRlKGNoYW5uZWwzLT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCisKKwkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzMpKSB7CisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOworCQlyZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzMpOworCX0KKworCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSghcmVzX2dldChkZXYsIGZoLCBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMykpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMyk7CisJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJlc19mcmVlKGRldiwgZmgsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCWludCBwaXhfZm9ybWF0ID0gMDsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKworCS8vIGNoZWNrIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgdmFsaWQgYmFzZWQgb24gc2V0IHN0YW5kYXJkCisJaWYgKGlzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkgeworCQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCX0KKworCWlmIChpc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgeworCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJfQorCisJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKKwllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwMywgcGl4X2Zvcm1hdCk7CisKKwkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgorCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAzXSA9IDE7CisJfSBlbHNlIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAzXSA9IDA7CisJfQorCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwM10gPSBmaC0+d2lkdGg7CisJbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDMpOworCisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDAzXS5jb3VudDsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDNdOworCXUzMiB0bXAgPSAwOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBpbnB1dCAzIGlzICVzXG4iLAorCSAgICAgICAodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwMyk7Cit9CisKKy8vIGV4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2Nfc19zdGQgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCA9IHZpZGlvY19xdWVyeXN0ZCwKKyNlbmRpZgorCS52aWRpb2NfY3JvcGNhcCA9IHZpZGlvY19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wID0gdmlkaW9jX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCisJLnZpZGlvY19nX3ByaW9yaXR5ID0gdmlkaW9jX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5ID0gdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmID0gdmlkaW9jZ21idWYsCisjZW5kaWYKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUzID0geworCS5uYW1lID0gImN4MjU4MjEtdmlkZW8iLAorCS5mb3BzID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW80LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwZDc0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW80LmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDA0XTsKKworCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOworCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKKworCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCisJCQlidWYtPnZiLmkpOworCisJfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKKwkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDRdKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJZHByaW50aygyLAorCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOworCX0gZWxzZSB7CisJCXByZXYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCisJCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKKwkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOworCisJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKKwkJCWRwcmludGsoMiwKKwkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKKworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCQlidWYtPnZiLmkpOworCQl9CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCXUzMiBwaXhfZm9ybWF0OworCisJbG9ja19rZXJuZWwoKTsKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjU4MjFfZGV2LCBkZXZsaXN0KTsKKworCQlpZiAoaC0+dmlkZW9fZGV2W1NSQU1fQ0gwNF0KKwkJICAgICYmIGgtPnZpZGVvX2RldltTUkFNX0NIMDRdLT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKwl9CisKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoIm9wZW4gbWlub3I9JWQgdHlwZT0lc1xuIiwgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisKKwkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBTUkFNX0NIMDQ7CisJcGl4X2Zvcm1hdCA9CisJICAgIChkZXYtPnBpeGVsX2Zvcm1hdHNbZGV2LT5jaGFubmVsX29wZW5lZF0gPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFY0TDJfUElYX0ZNVF9ZNDFQIDogVjRMMl9QSVhfRk1UX1lVWVY7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7CisKKwl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU80KSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNCkpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA0XSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDQtPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNCkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPNCk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU80KSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU80KTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSAwOworCisJLy8gY2hlY2sgcHJpb3JpdHkKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCisJLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKKwlpZiAoaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJfQorCisJaWYgKGlzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwl9CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDA0LCBwaXhfZm9ybWF0KTsKKworCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCisJaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDRdID0gMTsKKwl9IGVsc2UgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDRdID0gMDsKKwl9CisJZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDA0XSA9IGZoLT53aWR0aDsKKwltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwNCk7CisKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDRdLmNvdW50OworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNF07CisJdTMyIHRtcCA9IDA7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDQgaXMgJXNcbiIsCisJICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDA0KTsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTQgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWYwYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzUuYwpAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDVdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNV0pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJdTMyIHBpeF9mb3JtYXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDA1XQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwNV0tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+ZGV2ID0gZGV2OworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+d2lkdGggPSA3MjA7CisKKwlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCisJCWZoLT5oZWlnaHQgPSA1NzY7CisJZWxzZQorCQlmaC0+aGVpZ2h0ID0gNDgwOworCisJZGV2LT5jaGFubmVsX29wZW5lZCA9IFNSQU1fQ0gwNTsKKwlwaXhfZm9ybWF0ID0KKwkgICAgKGRldi0+cGl4ZWxfZm9ybWF0c1tkZXYtPmNoYW5uZWxfb3BlbmVkXSA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gVjRMMl9QSVhfRk1UX1k0MVAgOiBWNEwyX1BJWF9GTVRfWVVZVjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhwaXhfZm9ybWF0KTsKKworCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKKwkJCSAgICAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCisJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwgZmgpOworCisJZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgbG9mZl90ICogcHBvcykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPNSkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzUpKSB7CisJCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKKwl9IGVsc2UgeworCQkvKiByZWFkKCkgY2FwdHVyZSAqLworCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7CisJCWlmIChOVUxMID09IGJ1ZikKKwkJCXJldHVybiBQT0xMRVJSOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKKwkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgeworCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwNV0pIHsKKwkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOworCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCisJCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKKwkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKKwkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOworCQkJfQorCQl9CisKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbworCWN4X3dyaXRlKGNoYW5uZWw1LT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCisKKwkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzUpKSB7CisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOworCQlyZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzUpOworCX0KKworCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSghcmVzX2dldChkZXYsIGZoLCBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPNSkpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPNSk7CisJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJlc19mcmVlKGRldiwgZmgsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCWludCBwaXhfZm9ybWF0ID0gMDsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKworCS8vIGNoZWNrIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgdmFsaWQgYmFzZWQgb24gc2V0IHN0YW5kYXJkCisJaWYgKGlzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkgeworCQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCX0KKworCWlmIChpc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgeworCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJfQorCisJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKKwllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwNSwgcGl4X2Zvcm1hdCk7CisKKwkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgorCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA1XSA9IDE7CisJfSBlbHNlIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA1XSA9IDA7CisJfQorCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwNV0gPSBmaC0+d2lkdGg7CisJbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDUpOworCisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDA1XS5jb3VudDsKKworCXJldHVybiByZXRfdmFsOworfQorc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWNoYXIgbmFtZVszMiArIDJdOworCisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA1XTsKKwl1MzIgdG1wID0gMDsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKworCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgNSBpcyAlc1xuIiwKKwkgICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDUpOworfQorCisvLyBleHBvcnRlZCBzdHVmZgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisJLnJlYWQgPSB2aWRlb19yZWFkLAorCS5wb2xsID0gdmlkZW9fcG9sbCwKKwkubW1hcCA9IHZpZGVvX21tYXAsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNSA9IHsKKwkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW82LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNDFiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNi5jCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gwNl07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA2XSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwl1MzIgcGl4X2Zvcm1hdDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDZdCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA2XS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDA2OworCXBpeF9mb3JtYXQgPQorCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU82KSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNikpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA2XSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDYtPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNikpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPNik7CisJfQorCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSghcmVzX2dldChkZXYsIGZoLCBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPNikpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPNik7CisJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJlc19mcmVlKGRldiwgZmgsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCWludCBwaXhfZm9ybWF0ID0gMDsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKworCS8vIGNoZWNrIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgdmFsaWQgYmFzZWQgb24gc2V0IHN0YW5kYXJkCisJaWYgKGlzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkgeworCQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCX0KKworCWlmIChpc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgeworCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJfQorCisJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKKwllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwNiwgcGl4X2Zvcm1hdCk7CisKKwkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgorCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA2XSA9IDE7CisJfSBlbHNlIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA2XSA9IDA7CisJfQorCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwNl0gPSBmaC0+d2lkdGg7CisJbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDYpOworCisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDA2XS5jb3VudDsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDZdOworCXUzMiB0bXAgPSAwOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBpbnB1dCA2IGlzICVzXG4iLAorCSAgICAgICAodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwNik7Cit9CisKKy8vIGV4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2Nfc19zdGQgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCA9IHZpZGlvY19xdWVyeXN0ZCwKKyNlbmRpZgorCS52aWRpb2NfY3JvcGNhcCA9IHZpZGlvY19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wID0gdmlkaW9jX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCisJLnZpZGlvY19nX3ByaW9yaXR5ID0gdmlkaW9jX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5ID0gdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmID0gdmlkaW9jZ21idWYsCisjZW5kaWYKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU2ID0geworCS5uYW1lID0gImN4MjU4MjEtdmlkZW8iLAorCS5mb3BzID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW83LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1YzliNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW83LmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDA3XTsKKworCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOworCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA3XSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwl1MzIgcGl4X2Zvcm1hdDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDddCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA3XS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDA3OworCXBpeF9mb3JtYXQgPQorCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU83KSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNykpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA3XSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDctPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNykpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPNyk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU83KSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU83KTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSAwOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCisJLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKKwlpZiAoaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJfQorCisJaWYgKGlzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwl9CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDA3LCBwaXhfZm9ybWF0KTsKKworCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCisJaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDddID0gMTsKKwl9IGVsc2UgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDddID0gMDsKKwl9CisJZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDA3XSA9IGZoLT53aWR0aDsKKwltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwNyk7CisKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDddLmNvdW50OworCisJcmV0dXJuIHJldF92YWw7Cit9CitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDddOworCXUzMiB0bXAgPSAwOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBpbnB1dCA3IGlzICVzXG4iLAorCSAgICAgICAodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwNyk7Cit9CisKKy8vIGV4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2Nfc19zdGQgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCA9IHZpZGlvY19xdWVyeXN0ZCwKKyNlbmRpZgorCS52aWRpb2NfY3JvcGNhcCA9IHZpZGlvY19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wID0gdmlkaW9jX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCisJLnZpZGlvY19nX3ByaW9yaXR5ID0gdmlkaW9jX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5ID0gdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmID0gdmlkaW9jZ21idWYsCisjZW5kaWYKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU3ID0geworCS5uYW1lID0gImN4MjU4MjEtdmlkZW8iLAorCS5mb3BzID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlb2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTMxMmNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlb2lvY3RsLmMKQEAgLTAsMCArMSw0OTYgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbVklERU9fSU9DVExfQ0hdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1ZJREVPX0lPQ1RMX0NIXSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwl1MzIgcGl4X2Zvcm1hdDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPmlvY3RsX2RldiAmJiBoLT5pb2N0bF9kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gVklERU9fSU9DVExfQ0g7CisJcGl4X2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU9fSU9DVEwpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKKwkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU9fSU9DVEwpKSB7CisJCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKKwl9IGVsc2UgeworCQkvKiByZWFkKCkgY2FwdHVyZSAqLworCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7CisJCWlmIChOVUxMID09IGJ1ZikKKwkJCXJldHVybiBQT0xMRVJSOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU9fSU9DVEwpKSB7CisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOworCQlyZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFT19JT0NUTCk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoIXJlc19nZXQoZGV2LCBmaCwgZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFT19JT0NUTCkpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPX0lPQ1RMKTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CisKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAorCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCitzdGF0aWMgbG9uZyB2aWRlb19pb2N0bF9zZXQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgZG93bnN0cmVhbV91c2VyX3N0cnVjdCAqZGF0YV9mcm9tX3VzZXI7CisJaW50IGNvbW1hbmQ7CisJaW50IHdpZHRoID0gNzIwOworCWludCBzZWxlY3RlZF9jaGFubmVsID0gMCwgcGl4X2Zvcm1hdCA9IDAsIGkgPSAwOworCWludCBjaWZfZW5hYmxlID0gMCwgY2lmX3dpZHRoID0gMDsKKwl1MzIgdmFsdWUgPSAwOworCisJZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IGRvd25zdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7CisKKwlpZiAoIWRhdGFfZnJvbV91c2VyKSB7CisJCXByaW50aygiY3gyNTgyMSBpbiAlcygpOiBVc2VyIGRhdGEgaXMgSU5WQUxJRC4gUmV0dXJuaW5nLlxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOworCisJaWYgKGNvbW1hbmQgIT0gU0VUX1ZJREVPX1NURCAmJiBjb21tYW5kICE9IFNFVF9QSVhFTF9GT1JNQVQKKwkgICAgJiYgY29tbWFuZCAhPSBFTkFCTEVfQ0lGX1JFU09MVVRJT04gJiYgY29tbWFuZCAhPSBSRUdfUkVBRAorCSAgICAmJiBjb21tYW5kICE9IFJFR19XUklURSAmJiBjb21tYW5kICE9IE1FRFVTQV9SRUFECisJICAgICYmIGNvbW1hbmQgIT0gTUVEVVNBX1dSSVRFKSB7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgU0VUX1ZJREVPX1NURDoKKwkJZGV2LT50dm5vcm0gPQorCQkgICAgIXN0cmNtcChkYXRhX2Zyb21fdXNlci0+dmlkX3N0ZG5hbWUsCisJCQkgICAgIlBBTCIpID8gVjRMMl9TVERfUEFMX0JHIDogVjRMMl9TVERfTlRTQ19NOworCQltZWR1c2Ffc2V0X3ZpZGVvc3RhbmRhcmQoZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIFNFVF9QSVhFTF9GT1JNQVQ6CisJCXNlbGVjdGVkX2NoYW5uZWwgPSBkYXRhX2Zyb21fdXNlci0+ZGVjb2Rlcl9zZWxlY3Q7CisJCXBpeF9mb3JtYXQgPSBkYXRhX2Zyb21fdXNlci0+cGl4ZWxfZm9ybWF0OworCisJCWlmICghKHNlbGVjdGVkX2NoYW5uZWwgPD0gNyAmJiBzZWxlY3RlZF9jaGFubmVsID49IDApKSB7CisJCQlzZWxlY3RlZF9jaGFubmVsIC09IDQ7CisJCQlzZWxlY3RlZF9jaGFubmVsID0gc2VsZWN0ZWRfY2hhbm5lbCAlIDg7CisJCX0KKworCQlpZiAoc2VsZWN0ZWRfY2hhbm5lbCA+PSAwKQorCQkJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgc2VsZWN0ZWRfY2hhbm5lbCwKKwkJCQkJCSBwaXhfZm9ybWF0KTsKKworCQlicmVhazsKKworCWNhc2UgRU5BQkxFX0NJRl9SRVNPTFVUSU9OOgorCQlzZWxlY3RlZF9jaGFubmVsID0gZGF0YV9mcm9tX3VzZXItPmRlY29kZXJfc2VsZWN0OworCQljaWZfZW5hYmxlID0gZGF0YV9mcm9tX3VzZXItPmNpZl9yZXNvbHV0aW9uX2VuYWJsZTsKKwkJY2lmX3dpZHRoID0gZGF0YV9mcm9tX3VzZXItPmNpZl93aWR0aDsKKworCQlpZiAoY2lmX2VuYWJsZSkgeworCQkJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHCisJCQkgICAgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCisJCQkJd2lkdGggPSAzNTI7CisJCQllbHNlCisJCQkJd2lkdGggPSAoY2lmX3dpZHRoID09IDMyMAorCQkJCQkgfHwgY2lmX3dpZHRoID09IDM1MikgPyBjaWZfd2lkdGggOiAzMjA7CisJCX0KKworCQlpZiAoIShzZWxlY3RlZF9jaGFubmVsIDw9IDcgJiYgc2VsZWN0ZWRfY2hhbm5lbCA+PSAwKSkgeworCQkJc2VsZWN0ZWRfY2hhbm5lbCAtPSA0OworCQkJc2VsZWN0ZWRfY2hhbm5lbCA9IHNlbGVjdGVkX2NoYW5uZWwgJSA4OworCQl9CisKKwkJaWYgKHNlbGVjdGVkX2NoYW5uZWwgPD0gNyAmJiBzZWxlY3RlZF9jaGFubmVsID49IDApIHsKKwkJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW3NlbGVjdGVkX2NoYW5uZWxdID0gY2lmX2VuYWJsZTsKKwkJCWRldi0+Y2lmX3dpZHRoW3NlbGVjdGVkX2NoYW5uZWxdID0gd2lkdGg7CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspIHsKKwkJCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltpXSA9IGNpZl9lbmFibGU7CisJCQkJZGV2LT5jaWZfd2lkdGhbaV0gPSB3aWR0aDsKKwkJCX0KKwkJfQorCisJCW1lZHVzYV9zZXRfcmVzb2x1dGlvbihkZXYsIHdpZHRoLCBzZWxlY3RlZF9jaGFubmVsKTsKKwkJYnJlYWs7CisJY2FzZSBSRUdfUkVBRDoKKwkJZGF0YV9mcm9tX3VzZXItPnJlZ19kYXRhID0gY3hfcmVhZChkYXRhX2Zyb21fdXNlci0+cmVnX2FkZHJlc3MpOworCQlicmVhazsKKwljYXNlIFJFR19XUklURToKKwkJY3hfd3JpdGUoZGF0YV9mcm9tX3VzZXItPnJlZ19hZGRyZXNzLCBkYXRhX2Zyb21fdXNlci0+cmVnX2RhdGEpOworCQlicmVhazsKKwljYXNlIE1FRFVTQV9SRUFEOgorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAodTE2KSBkYXRhX2Zyb21fdXNlci0+cmVnX2FkZHJlc3MsCisJCQkJICAgICAmZGF0YV9mcm9tX3VzZXItPnJlZ19kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNRURVU0FfV1JJVEU6CisJCWN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAodTE2KSBkYXRhX2Zyb21fdXNlci0+cmVnX2FkZHJlc3MsCisJCQkJICBkYXRhX2Zyb21fdXNlci0+cmVnX2RhdGEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWNoYXIgbmFtZVszMiArIDJdOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvLyBleHBvcnRlZCBzdHVmZgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisJLnJlYWQgPSB2aWRlb19yZWFkLAorCS5wb2xsID0gdmlkZW9fcG9sbCwKKwkubW1hcCA9IHZpZGVvX21tYXAsCisJLmlvY3RsID0gdmlkZW9faW9jdGxfc2V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvaW9jdGxfdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlb2lvY3RsIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzMTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2I2M2IwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWR1cHMxMC5jCkBAIC0wLDAgKzEsNDM1IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gxMF07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDEwXSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMTBdCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDEwXS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSA5OworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKFY0TDJfUElYX0ZNVF9ZVVlWKTsKKworCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKKwkJCSAgICAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCisJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwgZmgpOworCisJZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgbG9mZl90ICogcHBvcykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPMTApKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKKwkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU8xMCkpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbworCS8vY3hfd3JpdGUoY2hhbm5lbDEwLT5kbWFfY3RsLCAwKTsKKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMTApKSB7CisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOworCQlyZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzEwKTsKKwl9CisKKwlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKKwkJYnVmZmVyX3JlbGVhc2UoJmZoLT52aWRxLCBmaC0+dmlkcS5yZWFkX2J1Zik7CisJCWtmcmVlKGZoLT52aWRxLnJlYWRfYnVmKTsKKwl9CisKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKKworCXY0bDJfcHJpb19jbG9zZSgmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSghcmVzX2dldChkZXYsIGZoLCBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMTApKSkpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oZ2V0X3F1ZXVlKGZoKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGVyciwgcmVzOworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGkgIT0gZmgtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzEwKTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgdmlkZW9faW9jdGxfdXBzdHJlYW0xMChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBjb21tYW5kID0gMDsKKwlzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKmRhdGFfZnJvbV91c2VyOworCisJZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICopYXJnOworCisJaWYgKCFkYXRhX2Zyb21fdXNlcikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMSBpbiAlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCisJCSAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKwlpZiAoY29tbWFuZCAhPSBVUFNUUkVBTV9TVEFSVF9WSURFTyAmJiBjb21tYW5kICE9IFVQU1RSRUFNX1NUT1BfVklERU8pIHsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5pbnB1dF9maWxlbmFtZV9jaDIgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7CisJZGV2LT5pbnB1dF9hdWRpb2ZpbGVuYW1lID0gZGF0YV9mcm9tX3VzZXItPmlucHV0X2ZpbGVuYW1lOworCWRldi0+dmlkX3N0ZG5hbWVfY2gyID0gZGF0YV9mcm9tX3VzZXItPnZpZF9zdGRuYW1lOworCWRldi0+cGl4ZWxfZm9ybWF0X2NoMiA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7CisJZGV2LT5jaGFubmVsX3NlbGVjdF9jaDIgPSBkYXRhX2Zyb21fdXNlci0+Y2hhbm5lbF9zZWxlY3Q7CisJZGV2LT5jb21tYW5kX2NoMiA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBVUFNUUkVBTV9TVEFSVF9WSURFTzoKKwkJY3gyNTgyMV9zdGFydF91cHN0cmVhbV92aWRlb19jaDIoZGV2LCBkYXRhX2Zyb21fdXNlcik7CisJCWJyZWFrOworCisJY2FzZSBVUFNUUkVBTV9TVE9QX1ZJREVPOgorCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gyKGRldik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy9leHBvcnRlZCBzdHVmZgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisJLnJlYWQgPSB2aWRlb19yZWFkLAorCS5wb2xsID0gdmlkZW9fcG9sbCwKKwkubW1hcCA9IHZpZGVvX21tYXAsCisJLmlvY3RsID0gdmlkZW9faW9jdGxfdXBzdHJlYW0xMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTEwID0geworCS5uYW1lID0gImN4MjU4MjEtdXBzdHJlYW0xMCIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YzhjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczkuYwpAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDldOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwOV0pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDA5XQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwOV0tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gODsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhWNEwyX1BJWF9GTVRfWVVZVik7CisKKwl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCisJCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAorCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKKworCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzkpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKKwkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU85KSkgeworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCgpIGNhcHR1cmUgKi8KKwkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7CisJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJLy9jeF93cml0ZShjaGFubmVsOS0+ZG1hX2N0bCwgMCk7CisKKwkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzkpKSB7CisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOworCQlyZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzkpOworCX0KKworCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU85KSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU85KTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgdmlkZW9faW9jdGxfdXBzdHJlYW05KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgY29tbWFuZCA9IDA7CisJc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICpkYXRhX2Zyb21fdXNlcjsKKworCWRhdGFfZnJvbV91c2VyID0gKHN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqKWFyZzsKKworCWlmICghZGF0YV9mcm9tX3VzZXIpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjEgaW4gJXMoKTogVXBzdHJlYW0gZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmcuXG4iLAorCQkgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOworCisJaWYgKGNvbW1hbmQgIT0gVVBTVFJFQU1fU1RBUlRfVklERU8gJiYgY29tbWFuZCAhPSBVUFNUUkVBTV9TVE9QX1ZJREVPKSB7CisJCXJldHVybiAwOworCX0KKworCWRldi0+aW5wdXRfZmlsZW5hbWUgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7CisJZGV2LT5pbnB1dF9hdWRpb2ZpbGVuYW1lID0gZGF0YV9mcm9tX3VzZXItPmlucHV0X2ZpbGVuYW1lOworCWRldi0+dmlkX3N0ZG5hbWUgPSBkYXRhX2Zyb21fdXNlci0+dmlkX3N0ZG5hbWU7CisJZGV2LT5waXhlbF9mb3JtYXQgPSBkYXRhX2Zyb21fdXNlci0+cGl4ZWxfZm9ybWF0OworCWRldi0+Y2hhbm5lbF9zZWxlY3QgPSBkYXRhX2Zyb21fdXNlci0+Y2hhbm5lbF9zZWxlY3Q7CisJZGV2LT5jb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKwljYXNlIFVQU1RSRUFNX1NUQVJUX1ZJREVPOgorCQljeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX3ZpZGVvX2NoMShkZXYsIGRhdGFfZnJvbV91c2VyKTsKKwkJYnJlYWs7CisKKwljYXNlIFVQU1RSRUFNX1NUT1BfVklERU86CisJCWN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDEoZGV2KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJaW50IGVycjsKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGV4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bF91cHN0cmVhbTksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2Nfc19zdGQgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCA9IHZpZGlvY19xdWVyeXN0ZCwKKyNlbmRpZgorCS52aWRpb2NfY3JvcGNhcCA9IHZpZGlvY19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wID0gdmlkaW9jX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCisJLnZpZGlvY19nX3ByaW9yaXR5ID0gdmlkaW9jX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5ID0gdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmID0gdmlkaW9jZ21idWYsCisjZW5kaWYKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU5ID0geworCS5uYW1lID0gImN4MjU4MjEtdXBzdHJlYW05IiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEuaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjIyODZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS5oCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBDWDI1ODIxX0hfCisjZGVmaW5lIENYMjU4MjFfSF8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kdmIuaD4KKworI2luY2x1ZGUgImJ0Y3gtcmlzYy5oIgorI2luY2x1ZGUgImN4MjU4MjEtcmVnLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1tZWR1c2EtcmVnLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1zcmFtLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1hdWRpby5oIgorI2luY2x1ZGUgIm1lZGlhL2N4MjM0MXguaCIKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjZGVmaW5lIENYMjU4MjFfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEwNikKKworI2RlZmluZSBVTlNFVCAoLTFVKQorI2RlZmluZSBOT19TWU5DX0xJTkUgKC0xVSkKKworI2RlZmluZSBDWDI1ODIxX01BWEJPQVJEUyAyCisKKyNkZWZpbmUgVFJVRSAgICAxCisjZGVmaW5lIEZBTFNFICAgMAorI2RlZmluZSBMSU5FX1NJWkVfRDEgICAgMTQ0MAorCisvLyBOdW1iZXIgb2YgZGVjb2RlcnMgYW5kIGVuY29kZXJzCisjZGVmaW5lIE1BWF9ERUNPREVSUyAgICAgICAgICAgIDgKKyNkZWZpbmUgTUFYX0VOQ09ERVJTICAgICAgICAgICAgMgorI2RlZmluZSBRVUFEX0RFQ09ERVJTICAgICAgICAgICA0CisjZGVmaW5lIE1BWF9DQU1FUkFTICAgICAgICAgICAgIDE2CisKKy8qIE1heCBudW1iZXIgb2YgaW5wdXRzIGJ5IGNhcmQgKi8KKyNkZWZpbmUgTUFYX0NYMjU4MjFfSU5QVVQgOAorI2RlZmluZSBJTlBVVChucikgKCZjeDI1ODIxX2JvYXJkc1tkZXYtPmJvYXJkXS5pbnB1dFtucl0pCisjZGVmaW5lIFJFU09VUkNFX1ZJREVPMCAgICAgICAxCisjZGVmaW5lIFJFU09VUkNFX1ZJREVPMSAgICAgICAyCisjZGVmaW5lIFJFU09VUkNFX1ZJREVPMiAgICAgICA0CisjZGVmaW5lIFJFU09VUkNFX1ZJREVPMyAgICAgICA4CisjZGVmaW5lIFJFU09VUkNFX1ZJREVPNCAgICAgICAxNgorI2RlZmluZSBSRVNPVVJDRV9WSURFTzUgICAgICAgMzIKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU82ICAgICAgIDY0CisjZGVmaW5lIFJFU09VUkNFX1ZJREVPNyAgICAgICAxMjgKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU84ICAgICAgIDI1NgorI2RlZmluZSBSRVNPVVJDRV9WSURFTzkgICAgICAgNTEyCisjZGVmaW5lIFJFU09VUkNFX1ZJREVPMTAgICAgICAxMDI0CisjZGVmaW5lIFJFU09VUkNFX1ZJREVPMTEgICAgICAyMDQ4CisjZGVmaW5lIFJFU09VUkNFX1ZJREVPX0lPQ1RMICA0MDk2CisKKyNkZWZpbmUgQlVGRkVSX1RJTUVPVVQgICAgIChIWikJLyogMC41IHNlY29uZHMgKi8KKworI2RlZmluZSBVTktOT1dOX0JPQVJEICAgICAgIDAKKyNkZWZpbmUgQ1gyNTgyMV9CT0FSRCAgICAgICAgMQorCisvKiBDdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgQ1gyNTgyMV9OT1JNUyAoXAorICAgIFY0TDJfU1REX05UU0NfTSB8ICBWNEwyX1NURF9OVFNDX01fSlAgfCBWNEwyX1NURF9OVFNDX01fS1IgfCBcCisgICAgVjRMMl9TVERfUEFMX0JHIHwgIFY0TDJfU1REX1BBTF9ESyAgICB8ICBWNEwyX1NURF9QQUxfSSAgICB8IFwKKyAgICBWNEwyX1NURF9QQUxfTSAgfCAgVjRMMl9TVERfUEFMX04gICAgIHwgIFY0TDJfU1REX1BBTF9IICAgIHwgXAorICAgIFY0TDJfU1REX1BBTF9OYyApCisKKyNkZWZpbmUgQ1gyNTgyMV9CT0FSRF9DT05FWEFOVF9BVEhFTkExMCAxCisjZGVmaW5lIE1BWF9WSURfQ0hBTk5FTF9OVU0gICAgIDEyCisjZGVmaW5lIFZJRF9DSEFOTkVMX05VTSA4CisKK3N0cnVjdCBjeDI1ODIxX2ZtdCB7CisJY2hhciAqbmFtZTsKKwl1MzIgZm91cmNjOwkJLyogdjRsMiBmb3JtYXQgaWQgKi8KKwlpbnQgZGVwdGg7CisJaW50IGZsYWdzOworCXUzMiBjeGZvcm1hdDsKK307CisKK3N0cnVjdCBjeDI1ODIxX2N0cmwgeworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB2OworCXUzMiBvZmY7CisJdTMyIHJlZzsKKwl1MzIgbWFzazsKKwl1MzIgc2hpZnQ7Cit9OworCitzdHJ1Y3QgY3gyNTgyMV90dm5vcm0geworCWNoYXIgKm5hbWU7CisJdjRsMl9zdGRfaWQgaWQ7CisJdTMyIGN4aWZvcm1hdDsKKwl1MzIgY3hvZm9ybWF0OworfTsKKworc3RydWN0IGN4MjU4MjFfZmggeworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOworCWludCByYWRpbzsKKwl1MzIgcmVzb3VyY2VzOworCisJZW51bSB2NGwyX3ByaW9yaXR5IHByaW87CisKKwkvKiB2aWRlbyBvdmVybGF5ICovCisJc3RydWN0IHY0bDJfd2luZG93IHdpbjsKKwlzdHJ1Y3QgdjRsMl9jbGlwICpjbGlwczsKKwl1bnNpZ25lZCBpbnQgbmNsaXBzOworCisJLyogdmlkZW8gY2FwdHVyZSAqLworCXN0cnVjdCBjeDI1ODIxX2ZtdCAqZm10OworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworCisJLyogdmJpIGNhcHR1cmUgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgdmlkcTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgdmJpcTsKKworCS8qIEgyNjQgRW5jb2RlciBzcGVjaWZpY3MgT05MWSAqLworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBtcGVncTsKKwlhdG9taWNfdCB2NGxfcmVhZGluZzsKK307CisKK2VudW0gY3gyNTgyMV9pdHlwZSB7CisJQ1gyNTgyMV9WTVVYX0NPTVBPU0lURSA9IDEsCisJQ1gyNTgyMV9WTVVYX1NWSURFTywKKwlDWDI1ODIxX1ZNVVhfREVCVUcsCisJQ1gyNTgyMV9SQURJTywKK307CisKK2VudW0gY3gyNTgyMV9zcmNfc2VsX3R5cGUgeworCUNYMjU4MjFfU1JDX1NFTF9FWFRfNjU2X1ZJREVPID0gMCwKKwlDWDI1ODIxX1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTworfTsKKworLyogYnVmZmVyIGZvciBvbmUgdmlkZW8gZnJhbWUgKi8KK3N0cnVjdCBjeDI1ODIxX2J1ZmZlciB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7CisKKwkvKiBjeDI1ODIxIHNwZWNpZmljICovCisJdW5zaWduZWQgaW50IGJwbDsKKwlzdHJ1Y3QgYnRjeF9yaXNjbWVtIHJpc2M7CisJc3RydWN0IGN4MjU4MjFfZm10ICpmbXQ7CisJdTMyIGNvdW50OworfTsKKworc3RydWN0IGN4MjU4MjFfaW5wdXQgeworCWVudW0gY3gyNTgyMV9pdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB2bXV4OworCXUzMiBncGlvMCwgZ3BpbzEsIGdwaW8yLCBncGlvMzsKK307CisKK3R5cGVkZWYgZW51bSB7CisJQ1gyNTgyMV9VTkRFRklORUQgPSAwLAorCUNYMjU4MjFfUkFXLAorCUNYMjU4MjFfMjY0Cit9IHBvcnRfdDsKKworc3RydWN0IGN4MjU4MjFfYm9hcmQgeworCWNoYXIgKm5hbWU7CisJcG9ydF90IHBvcnRhLCBwb3J0YiwgcG9ydGM7CisJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7CisJdW5zaWduZWQgaW50IHJhZGlvX3R5cGU7CisJdW5zaWduZWQgY2hhciB0dW5lcl9hZGRyOworCXVuc2lnbmVkIGNoYXIgcmFkaW9fYWRkcjsKKworCXUzMiBjbGtfZnJlcTsKKwlzdHJ1Y3QgY3gyNTgyMV9pbnB1dCBpbnB1dFsyXTsKK307CisKK3N0cnVjdCBjeDI1ODIxX3N1YmlkIHsKKwl1MTYgc3VidmVuZG9yOworCXUxNiBzdWJkZXZpY2U7CisJdTMyIGNhcmQ7Cit9OworCitzdHJ1Y3QgY3gyNTgyMV9pMmMgeworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OworCisJaW50IG5yOworCisJLyogaTJjIGkvbyAqLworCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgaTJjX2FsZ287CisJc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudDsKKwl1MzIgaTJjX3JjOworCisJLyogY3gyNTgyMSByZWdpc3RlcnMgdXNlZCBmb3IgcmF3IGFkZGVzcyAqLworCXUzMiBpMmNfcGVyaW9kOworCXUzMiByZWdfY3RybDsKKwl1MzIgcmVnX3N0YXQ7CisJdTMyIHJlZ19hZGRyOworCXUzMiByZWdfcmRhdGE7CisJdTMyIHJlZ193ZGF0YTsKK307CisKK3N0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlZDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OworCXN0cnVjdCBidGN4X3Jpc2NtZW0gc3RvcHBlcjsKKwl1MzIgY291bnQ7Cit9OworCitzdHJ1Y3QgY3gyNTgyMV9kYXRhIHsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldjsKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsOworfTsKKworc3RydWN0IGN4MjU4MjFfZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmxpc3Q7CisJYXRvbWljX3QgcmVmY291bnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCisJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOworCisJLyogcGNpIHN0dWZmICovCisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwl1bnNpZ25lZCBjaGFyIHBjaV9yZXYsIHBjaV9sYXQ7CisJaW50IHBjaV9idXMsIHBjaV9zbG90OworCXUzMiBiYXNlX2lvX2FkZHI7CisJdTMyIF9faW9tZW0gKmxtbWlvOworCXU4IF9faW9tZW0gKmJtbWlvOworCWludCBwY2lfaXJxbWFzazsKKwlpbnQgaHdyZXZpc2lvbjsKKworCXUzMiBjbGtfZnJlcTsKKworCS8qIEkyQyBhZGFwdGVyczogTWFzdGVyIDEgJiAyIChFeHRlcm5hbCkgJiBNYXN0ZXIgMyAoSW50ZXJuYWwgb25seSkgKi8KKwlzdHJ1Y3QgY3gyNTgyMV9pMmMgaTJjX2J1c1szXTsKKworCWludCBucjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKworCS8qIGJvYXJkIGRldGFpbHMgKi8KKwl1bnNpZ25lZCBpbnQgYm9hcmQ7CisJY2hhciBuYW1lWzMyXTsKKworCS8qIHNyYW0gY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2hhbm5lbHM7CisKKwkvKiBBbmFsb2cgdmlkZW8gKi8KKwl1MzIgcmVzb3VyY2VzOworCXVuc2lnbmVkIGludCBpbnB1dDsKKwl1MzIgdHZhdWRpbzsKKwl2NGwyX3N0ZF9pZCB0dm5vcm07CisJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7CisJdW5zaWduZWQgY2hhciB0dW5lcl9hZGRyOworCXVuc2lnbmVkIGludCByYWRpb190eXBlOworCXVuc2lnbmVkIGNoYXIgcmFkaW9fYWRkcjsKKwl1bnNpZ25lZCBpbnQgaGFzX3JhZGlvOworCXVuc2lnbmVkIGludCB2aWRlY190eXBlOworCXVuc2lnbmVkIGNoYXIgdmlkZWNfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCBfbWF4X251bV9kZWNvZGVyczsKKworCWludCBjdGxfYnJpZ2h0OworCWludCBjdGxfY29udHJhc3Q7CisJaW50IGN0bF9odWU7CisJaW50IGN0bF9zYXR1cmF0aW9uOworCisJc3RydWN0IGN4MjU4MjFfZGF0YSB0aW1lb3V0X2RhdGFbTUFYX1ZJRF9DSEFOTkVMX05VTV07CisKKwkvKiBBbmFsb2cgQXVkaW8gVXBzdHJlYW0gKi8KKwlpbnQgX2F1ZGlvX2lzX3J1bm5pbmc7CisJaW50IF9hdWRpb3BpeGVsX2Zvcm1hdDsKKwlpbnQgX2lzX2ZpcnN0X2F1ZGlvX2ZyYW1lOworCWludCBfYXVkaW9maWxlX3N0YXR1czsKKwlpbnQgX2F1ZGlvX2xpbmVzX2NvdW50OworCWludCBfYXVkaW9mcmFtZV9jb3VudDsKKwlpbnQgX2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0OworCWludCBfbGFzdF9pbmRleF9pcnE7CS8vVGhlIGxhc3QgaW50ZXJydXB0IGluZGV4IHByb2Nlc3NlZC4KKworCV9fbGUzMiAqX3Jpc2NfYXVkaW9fam1wX2FkZHI7CisJX19sZTMyICpfcmlzY192aXJ0X3N0YXJ0X2FkZHI7CisJX19sZTMyICpfcmlzY192aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBfcmlzY19waHlzX2FkZHI7CisJZG1hX2FkZHJfdCBfcmlzY19waHlzX3N0YXJ0X2FkZHI7CisKKwl1bnNpZ25lZCBpbnQgX2F1ZGlvcmlzY19zaXplOworCXVuc2lnbmVkIGludCBfYXVkaW9kYXRhX2J1Zl9zaXplOworCV9fbGUzMiAqX2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyOworCWRtYV9hZGRyX3QgX2F1ZGlvZGF0YV9idWZfcGh5c19hZGRyOworCWNoYXIgKl9hdWRpb2ZpbGVuYW1lOworCisJLyogVjRsICovCisJdTMyIGZyZXE7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2W01BWF9WSURfQ0hBTk5FTF9OVU1dOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaV9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqcmFkaW9fZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmlvY3RsX2RldjsKKworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIHZpZHFbTUFYX1ZJRF9DSEFOTkVMX05VTV07CisJc3BpbmxvY2tfdCBzbG9jazsKKworCS8qIFZpZGVvIFVwc3RyZWFtICovCisJaW50IF9saW5lX3NpemU7CisJaW50IF9wcm9nX2NudDsKKwlpbnQgX3BpeGVsX2Zvcm1hdDsKKwlpbnQgX2lzX2ZpcnN0X2ZyYW1lOworCWludCBfaXNfcnVubmluZzsKKwlpbnQgX2ZpbGVfc3RhdHVzOworCWludCBfbGluZXNfY291bnQ7CisJaW50IF9mcmFtZV9jb3VudDsKKwlpbnQgX2NoYW5uZWxfdXBzdHJlYW1fc2VsZWN0OworCXVuc2lnbmVkIGludCBfcmlzY19zaXplOworCisJX19sZTMyICpfZG1hX3ZpcnRfc3RhcnRfYWRkcjsKKwlfX2xlMzIgKl9kbWFfdmlydF9hZGRyOworCWRtYV9hZGRyX3QgX2RtYV9waHlzX2FkZHI7CisJZG1hX2FkZHJfdCBfZG1hX3BoeXNfc3RhcnRfYWRkcjsKKworCXVuc2lnbmVkIGludCBfZGF0YV9idWZfc2l6ZTsKKwlfX2xlMzIgKl9kYXRhX2J1Zl92aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBfZGF0YV9idWZfcGh5c19hZGRyOworCWNoYXIgKl9maWxlbmFtZTsKKwljaGFyICpfZGVmYXVsdG5hbWU7CisKKwlpbnQgX2xpbmVfc2l6ZV9jaDI7CisJaW50IF9wcm9nX2NudF9jaDI7CisJaW50IF9waXhlbF9mb3JtYXRfY2gyOworCWludCBfaXNfZmlyc3RfZnJhbWVfY2gyOworCWludCBfaXNfcnVubmluZ19jaDI7CisJaW50IF9maWxlX3N0YXR1c19jaDI7CisJaW50IF9saW5lc19jb3VudF9jaDI7CisJaW50IF9mcmFtZV9jb3VudF9jaDI7CisJaW50IF9jaGFubmVsMl91cHN0cmVhbV9zZWxlY3Q7CisJdW5zaWduZWQgaW50IF9yaXNjX3NpemVfY2gyOworCisJX19sZTMyICpfZG1hX3ZpcnRfc3RhcnRfYWRkcl9jaDI7CisJX19sZTMyICpfZG1hX3ZpcnRfYWRkcl9jaDI7CisJZG1hX2FkZHJfdCBfZG1hX3BoeXNfYWRkcl9jaDI7CisJZG1hX2FkZHJfdCBfZG1hX3BoeXNfc3RhcnRfYWRkcl9jaDI7CisKKwl1bnNpZ25lZCBpbnQgX2RhdGFfYnVmX3NpemVfY2gyOworCV9fbGUzMiAqX2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDI7CisJZG1hX2FkZHJfdCBfZGF0YV9idWZfcGh5c19hZGRyX2NoMjsKKwljaGFyICpfZmlsZW5hbWVfY2gyOworCWNoYXIgKl9kZWZhdWx0bmFtZV9jaDI7CisKKwkvKiBNUEVHIEVuY29kZXIgT05MWSBzZXR0aW5ncyAqLworCXUzMiBjeDIzNDE3X21haWxib3g7CisJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgbXBlZ19wYXJhbXM7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdjRsX2RldmljZTsKKwlhdG9taWNfdCB2NGxfcmVhZGVyX2NvdW50OworCXN0cnVjdCBjeDI1ODIxX3R2bm9ybSBlbmNvZGVybm9ybTsKKworCXUzMiB1cHN0cmVhbV9yaXNjYnVmX3NpemU7CisJdTMyIHVwc3RyZWFtX2RhdGFidWZfc2l6ZTsKKwl1MzIgdXBzdHJlYW1fcmlzY2J1Zl9zaXplX2NoMjsKKwl1MzIgdXBzdHJlYW1fZGF0YWJ1Zl9zaXplX2NoMjsKKwl1MzIgYXVkaW9fdXBzdHJlYW1fcmlzY2J1Zl9zaXplOworCXUzMiBhdWRpb191cHN0cmVhbV9kYXRhYnVmX3NpemU7CisJaW50IF9pc05UU0M7CisJaW50IF9mcmFtZV9pbmRleDsKKwlpbnQgX2F1ZGlvZnJhbWVfaW5kZXg7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKl9pcnFfcXVldWVzOworCXN0cnVjdCB3b3JrX3N0cnVjdCBfaXJxX3dvcmtfZW50cnk7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKl9pcnFfcXVldWVzX2NoMjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgX2lycV93b3JrX2VudHJ5X2NoMjsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX2lycV9hdWRpb19xdWV1ZXM7CisJc3RydWN0IHdvcmtfc3RydWN0IF9hdWRpb193b3JrX2VudHJ5OworCWNoYXIgKmlucHV0X2ZpbGVuYW1lOworCWNoYXIgKmlucHV0X2ZpbGVuYW1lX2NoMjsKKwlpbnQgX2ZyYW1lX2luZGV4X2NoMjsKKwlpbnQgX2lzTlRTQ19jaDI7CisJY2hhciAqdmlkX3N0ZG5hbWVfY2gyOworCWludCBwaXhlbF9mb3JtYXRfY2gyOworCWludCBjaGFubmVsX3NlbGVjdF9jaDI7CisJaW50IGNvbW1hbmRfY2gyOworCWNoYXIgKmlucHV0X2F1ZGlvZmlsZW5hbWU7CisJY2hhciAqdmlkX3N0ZG5hbWU7CisJaW50IHBpeGVsX2Zvcm1hdDsKKwlpbnQgY2hhbm5lbF9zZWxlY3Q7CisJaW50IGNvbW1hbmQ7CisJaW50IHBpeGVsX2Zvcm1hdHNbVklEX0NIQU5ORUxfTlVNXTsKKwlpbnQgdXNlX2NpZl9yZXNvbHV0aW9uW1ZJRF9DSEFOTkVMX05VTV07CisJaW50IGNpZl93aWR0aFtWSURfQ0hBTk5FTF9OVU1dOworCWludCBjaGFubmVsX29wZW5lZDsKK307CisKK3N0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCB7CisJY2hhciAqaW5wdXRfZmlsZW5hbWU7CisJY2hhciAqdmlkX3N0ZG5hbWU7CisJaW50IHBpeGVsX2Zvcm1hdDsKKwlpbnQgY2hhbm5lbF9zZWxlY3Q7CisJaW50IGNvbW1hbmQ7Cit9OworCitzdHJ1Y3QgZG93bnN0cmVhbV91c2VyX3N0cnVjdCB7CisJY2hhciAqdmlkX3N0ZG5hbWU7CisJaW50IHBpeGVsX2Zvcm1hdDsKKwlpbnQgY2lmX3Jlc29sdXRpb25fZW5hYmxlOworCWludCBjaWZfd2lkdGg7CisJaW50IGRlY29kZXJfc2VsZWN0OworCWludCBjb21tYW5kOworCWludCByZWdfYWRkcmVzczsKKwlpbnQgcmVnX2RhdGE7Cit9OworCitleHRlcm4gc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICp1cF9kYXRhOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDI1ODIxX2RldiAqZ2V0X2N4MjU4MjEoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIHY0bDJfZGV2KTsKK30KKworI2RlZmluZSBjeDI1ODIxX2NhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAorICAgIHY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGN4MjU4MjFfZGV2bGlzdDsKK2V4dGVybiBzdHJ1Y3QgY3gyNTgyMV9ib2FyZCBjeDI1ODIxX2JvYXJkc1tdOworZXh0ZXJuIHN0cnVjdCBjeDI1ODIxX3N1YmlkIGN4MjU4MjFfc3ViaWRzW107CisKKyNkZWZpbmUgU1JBTV9DSDAwICAwCQkvKiBWaWRlbyBBICovCisjZGVmaW5lIFNSQU1fQ0gwMSAgMQkJLyogVmlkZW8gQiAqLworI2RlZmluZSBTUkFNX0NIMDIgIDIJCS8qIFZpZGVvIEMgKi8KKyNkZWZpbmUgU1JBTV9DSDAzICAzCQkvKiBWaWRlbyBEICovCisjZGVmaW5lIFNSQU1fQ0gwNCAgNAkJLyogVmlkZW8gRSAqLworI2RlZmluZSBTUkFNX0NIMDUgIDUJCS8qIFZpZGVvIEYgKi8KKyNkZWZpbmUgU1JBTV9DSDA2ICA2CQkvKiBWaWRlbyBHICovCisjZGVmaW5lIFNSQU1fQ0gwNyAgNwkJLyogVmlkZW8gSCAqLworCisjZGVmaW5lIFNSQU1fQ0gwOCAgOAkJLyogQXVkaW8gQSAqLworI2RlZmluZSBTUkFNX0NIMDkgIDkJCS8qIFZpZGVvIFVwc3RyZWFtIEkgKi8KKyNkZWZpbmUgU1JBTV9DSDEwICAxMAkJLyogVmlkZW8gVXBzdHJlYW0gSiAqLworI2RlZmluZSBTUkFNX0NIMTEgIDExCQkvKiBBdWRpbyBVcHN0cmVhbSBBVURfQ0hBTk5FTF9CICovCisKKyNkZWZpbmUgVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9JICAgICBTUkFNX0NIMDkKKyNkZWZpbmUgVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9KICAgICBTUkFNX0NIMTAKKyNkZWZpbmUgQVVESU9fVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0IgICBTUkFNX0NIMTEKKyNkZWZpbmUgVklERU9fSU9DVExfQ0ggIDExCisKK3N0cnVjdCBzcmFtX2NoYW5uZWwgeworCWNoYXIgKm5hbWU7CisJdTMyIGk7CisJdTMyIGNtZHNfc3RhcnQ7CisJdTMyIGN0cmxfc3RhcnQ7CisJdTMyIGNkdDsKKwl1MzIgZmlmb19zdGFydDsKKwl1MzIgZmlmb19zaXplOworCXUzMiBwdHIxX3JlZzsKKwl1MzIgcHRyMl9yZWc7CisJdTMyIGNudDFfcmVnOworCXUzMiBjbnQyX3JlZzsKKwl1MzIgaW50X21zazsKKwl1MzIgaW50X3N0YXQ7CisJdTMyIGludF9tc3RhdDsKKwl1MzIgZG1hX2N0bDsKKwl1MzIgZ3BjbnRfY3RsOworCXUzMiBncGNudDsKKwl1MzIgYXVkX2xlbmd0aDsKKwl1MzIgYXVkX2NmZzsKKwl1MzIgZmxkX2F1ZF9maWZvX2VuOworCXUzMiBmbGRfYXVkX3Jpc2NfZW47CisKKwkvL0ZvciBVcHN0cmVhbSBWaWRlbworCXUzMiB2aWRfZm10X2N0bDsKKwl1MzIgdmlkX2FjdGl2ZV9jdGwxOworCXUzMiB2aWRfYWN0aXZlX2N0bDI7CisJdTMyIHZpZF9jZHRfc2l6ZTsKKworCXUzMiB2aXBfY3RsOworCXUzMiBwaXhfZnJtdDsKKwl1MzIganVtcG9ubHk7CisJdTMyIGlycV9iaXQ7Cit9OworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgY3gyNTgyMV9zcmFtX2NoYW5uZWxzW107CisKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAwCisjZGVmaW5lIFNUQVRVU19VTlNVQ0NFU1NGVUwgICAgLTEKKworI2RlZmluZSBjeF9yZWFkKHJlZykgICAgICAgICAgICAgcmVhZGwoZGV2LT5sbW1pbyArICgocmVnKT4+MikpCisjZGVmaW5lIGN4X3dyaXRlKHJlZywgdmFsdWUpICAgICB3cml0ZWwoKHZhbHVlKSwgZGV2LT5sbW1pbyArICgocmVnKT4+MikpCisKKyNkZWZpbmUgY3hfYW5kb3IocmVnLCBtYXNrLCB2YWx1ZSkgXAorICB3cml0ZWwoKHJlYWRsKGRldi0+bG1taW8rKChyZWcpPj4yKSkgJiB+KG1hc2spKSB8XAorICAoKHZhbHVlKSAmIChtYXNrKSksIGRldi0+bG1taW8rKChyZWcpPj4yKSkKKworI2RlZmluZSBjeF9zZXQocmVnLCBiaXQpICAgICAgICAgIGN4X2FuZG9yKChyZWcpLCAoYml0KSwgKGJpdCkpCisjZGVmaW5lIGN4X2NsZWFyKHJlZywgYml0KSAgICAgICAgY3hfYW5kb3IoKHJlZyksIChiaXQpLCAwKQorCisjZGVmaW5lIFNldF9HUElPX0JpdChCaXQpICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBCaXQpCisjZGVmaW5lIENsZWFyX0dQSU9fQml0KEJpdCkgICAgICAgICAgICAgICAgICAgICAofigxIDw8IEJpdCkpCisKKyNkZWZpbmUgQ1gyNTgyMV9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHByaW50ayhLRVJOX0VSUiAgImN4MjU4MjEoJWQpOiAiIGZtdCwgZGV2LT5ib2FyZCwgIyMgYXJncykKKyNkZWZpbmUgQ1gyNTgyMV9XQVJOKGZtdCwgYXJncy4uLikgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImN4MjU4MjEoJWQpOiAiIGZtdCwgZGV2LT5ib2FyZCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMjU4MjFfSU5GTyhmbXQsIGFyZ3MuLi4pICAgICBwcmludGsoS0VSTl9JTkZPICJjeDI1ODIxKCVkKTogIiBmbXQsIGRldi0+Ym9hcmQgLCAjIyBhcmdzKQorCitleHRlcm4gaW50IGN4MjU4MjFfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfY2FyZF9zZXR1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldik7CitleHRlcm4gaW50IGN4MjU4MjFfaXJfaW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldik7CitleHRlcm4gaW50IGN4MjU4MjFfaTJjX3JlYWQoc3RydWN0IGN4MjU4MjFfaTJjICpidXMsIHUxNiByZWdfYWRkciwgaW50ICp2YWx1ZSk7CitleHRlcm4gaW50IGN4MjU4MjFfaTJjX3dyaXRlKHN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzLCB1MTYgcmVnX2FkZHIsIGludCB2YWx1ZSk7CitleHRlcm4gaW50IGN4MjU4MjFfaTJjX3VucmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfaTJjICpidXMpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9ncGlvX2luaXQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zZXRfZ3Bpb3Bpbl9kaXJlY3Rpb24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgaW50IHBpbl9udW1iZXIsIGludCBwaW5fbG9naWNfdmFsdWUpOworCitleHRlcm4gaW50IG1lZHVzYV92aWRlb19pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgbWVkdXNhX3NldF92aWRlb3N0YW5kYXJkKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIG1lZHVzYV9zZXRfcmVzb2x1dGlvbihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IHdpZHRoLAorCQkJCSAgaW50IGRlY29kZXJfc2VsZWN0KTsKK2V4dGVybiBpbnQgbWVkdXNhX3NldF9icmlnaHRuZXNzKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgYnJpZ2h0bmVzcywKKwkJCQkgaW50IGRlY29kZXIpOworZXh0ZXJuIGludCBtZWR1c2Ffc2V0X2NvbnRyYXN0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY29udHJhc3QsCisJCQkgICAgICAgaW50IGRlY29kZXIpOworZXh0ZXJuIGludCBtZWR1c2Ffc2V0X2h1ZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGh1ZSwgaW50IGRlY29kZXIpOworZXh0ZXJuIGludCBtZWR1c2Ffc2V0X3NhdHVyYXRpb24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBzYXR1cmF0aW9uLAorCQkJCSBpbnQgZGVjb2Rlcik7CisKK2V4dGVybiBpbnQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXAoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gsIHVuc2lnbmVkIGludCBicGwsCisJCQkJICAgICAgdTMyIHJpc2MpOworCitleHRlcm4gaW50IGN4MjU4MjFfcmlzY19idWZmZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKKwkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdG9wX29mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYm90dG9tX29mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnBsLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBwYWRkaW5nLCB1bnNpZ25lZCBpbnQgbGluZXMpOworZXh0ZXJuIGludCBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbyhzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCQkgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKKwkJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJCQkgdW5zaWduZWQgaW50IGJwbCwKKwkJCQkJIHVuc2lnbmVkIGludCBsaW5lcywgdW5zaWduZWQgaW50IGxwaSk7CitleHRlcm4gdm9pZCBjeDI1ODIxX2ZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1Zik7CitleHRlcm4gaW50IGN4MjU4MjFfcmlzY19zdG9wcGVyKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MsCisJCQkJdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CitleHRlcm4gdm9pZCBjeDI1ODIxX3NyYW1fY2hhbm5lbF9kdW1wKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXBfYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCk7CisKK2V4dGVybiBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmN4MjU4MjFfZGV2X2dldChzdHJ1Y3QgcGNpX2RldiAqcGNpKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfcHJpbnRfaXJxYml0cyhjaGFyICpuYW1lLCBjaGFyICp0YWcsIGNoYXIgKipzdHJpbmdzLAorCQkJCSAgaW50IGxlbiwgdTMyIGJpdHMsIHUzMiBtYXNrKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIGludCBjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGJwbCwgdTMyIHJpc2MpOworCitleHRlcm4gaW50IGN4MjU4MjFfdmlkdXBzdHJlYW1faW5pdF9jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCWludCBjaGFubmVsX3NlbGVjdCwgaW50IHBpeGVsX2Zvcm1hdCk7CitleHRlcm4gaW50IGN4MjU4MjFfdmlkdXBzdHJlYW1faW5pdF9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCWludCBjaGFubmVsX3NlbGVjdCwgaW50IHBpeGVsX2Zvcm1hdCk7CitleHRlcm4gaW50IGN4MjU4MjFfYXVkaW9fdXBzdHJlYW1faW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgICAgaW50IGNoYW5uZWxfc2VsZWN0KTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fY2gxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zdGFydF91cHN0cmVhbV92aWRlb19jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICAgc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0CisJCQkJCSAgICAgKnVwX2RhdGEpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zdGFydF91cHN0cmVhbV92aWRlb19jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICAgc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0CisJCQkJCSAgICAgKnVwX2RhdGEpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zdGFydF91cHN0cmVhbV9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJIHN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqdXBfZGF0YSk7CitleHRlcm4gdm9pZCBjeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXBfdXBzdHJlYW0oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBicGwsIHUzMiByaXNjKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5uZWwsCisJCQkJICAgICB1MzIgZm9ybWF0KTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfdmlkZW9pb2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlICpjeDI1ODIxX3ZkZXZfaW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkJICAgICAgc3RydWN0IHZpZGVvX2RldmljZSAqdGVtcGxhdGUsCisJCQkJCSAgICAgIGNoYXIgKnR5cGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcKaW5kZXggY2E2YWRlNi4uZTQ3ZjY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBWSURFT19HTzcwMDcKLQl0cmlzdGF0ZSAiR28gNzAwNyBzdXBwb3J0IgorCXRyaXN0YXRlICJXSVMgR083MDA3IE1QRUcgZW5jb2RlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgSU5QVVQKIAlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKQEAgLTEwLDE3ICsxMCwxOSBAQAogCXNlbGVjdCBDUkMzMgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHNvbWUgd2VpcmQgZGV2aWNlLi4uCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgV0lTIEdPNzAwNyBNUEVHCisJICBlbmNvZGVyIGNoaXAuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdvNzAwNwogCiBjb25maWcgVklERU9fR083MDA3X1VTQgotCXRyaXN0YXRlICJHbyA3MDA3IFVTQiBzdXBwb3J0IgorCXRyaXN0YXRlICJXSVMgR083MDA3IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fR083MDA3ICYmIFVTQgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHNvbWUgd2VpcmQgZGV2aWNlLi4uCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgV0lTIEdPNzAwNyBNUEVHCisJICBlbmNvZGVyIGNoaXAgb3ZlciBVU0IuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdvNzAwNy11c2IKQEAgLTMwLDggKzMyLDc4IEBACiAJZGVwZW5kcyBvbiBWSURFT19HTzcwMDdfVVNCICYmIERWQl9VU0IKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgU2Vuc29yYXkgMjI1MC8yMjUxIGRldmljZQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIFNlbnNvcmF5IDIyNTAvMjI1MSBkZXZpY2UuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHMyMjUwLWJvYXJkCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgczIyNTAKKworY29uZmlnIFZJREVPX0dPNzAwN19PVjc2NDAKKwl0cmlzdGF0ZSAiT1Y3NjQwIHN1YmRldiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fR083MDA3CisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIE9WNzY0MCBzdWItZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3aXMtb3Y3NjQwCisKK2NvbmZpZyBWSURFT19HTzcwMDdfU0FBNzExMworCXRyaXN0YXRlICJTQUE3MTEzIHN1YmRldiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fR083MDA3CisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIFNBQTcxMTMgc3ViLWRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd2lzLXNhYTcxMTMKKworY29uZmlnIFZJREVPX0dPNzAwN19TQUE3MTE1CisJdHJpc3RhdGUgIlNBQTcxMTUgc3ViZGV2IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgU0FBNzExNSBzdWItZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3aXMtc2FhNzExNQorCitjb25maWcgVklERU9fR083MDA3X1RXOTkwMworCXRyaXN0YXRlICJUVzk5MDMgc3ViZGV2IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgVFc5OTAzIHN1Yi1kZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdpcy10dzk5MDMKKworY29uZmlnIFZJREVPX0dPNzAwN19VREExMzQyCisJdHJpc3RhdGUgIlVEQTEzNDIgc3ViZGV2IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgVURBMTM0MiBzdWItZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3aXMtdWRhMTM0MgorCitjb25maWcgVklERU9fR083MDA3X1NPTllfVFVORVIKKwl0cmlzdGF0ZSAiU29ueSB0dW5lciBzdWJkZXYgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0dPNzAwNworCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBTb255IFR1bmVyIHN1Yi1kZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdpcy1zb255LXR1bmVyCisKK2NvbmZpZyBWSURFT19HTzcwMDdfVFcyODA0CisJdHJpc3RhdGUgIlRXMjgwNCBzdWJkZXYgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0dPNzAwNworCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBUVzI4MDQgc3ViLWRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd2lzLXR3MjgwNAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9NYWtlZmlsZQppbmRleCBlNTE0YjRhLi5kMTRlYTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvTWFrZWZpbGUKQEAgLTYsMjIgKzYsMzQgQEAKIG9iai0kKENPTkZJR19WSURFT19HTzcwMDcpICs9IGdvNzAwNy5vCiBvYmotJChDT05GSUdfVklERU9fR083MDA3X1VTQikgKz0gZ283MDA3LXVzYi5vCiBvYmotJChDT05GSUdfVklERU9fR083MDA3X1VTQl9TMjI1MF9CT0FSRCkgKz0gczIyNTAubworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwN19TQUE3MTEzKSArPSB3aXMtc2FhNzExMy5vCitvYmotJChDT05GSUdfVklERU9fR083MDA3X09WNzY0MCkgKz0gd2lzLW92NzY0MC5vCitvYmotJChDT05GSUdfVklERU9fR083MDA3X1NBQTcxMTUpICs9IHdpcy1zYWE3MTE1Lm8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDdfVFc5OTAzKSArPSB3aXMtdHc5OTAzLm8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDdfVURBMTM0MikgKz0gd2lzLXVkYTEzNDIubworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwN19TT05ZX1RVTkVSKSArPSB3aXMtc29ueS10dW5lci5vCitvYmotJChDT05GSUdfVklERU9fR083MDA3X1RXMjgwNCkgKz0gd2lzLXR3MjgwNC5vCiAKIGdvNzAwNy1vYmpzICs9IGdvNzAwNy12NGwyLm8gZ283MDA3LWRyaXZlci5vIGdvNzAwNy1pMmMubyBnbzcwMDctZncubyBcCi0JCXNuZC1nbzcwMDcubyB3aXMtc2FhNzExMy5vCisJCXNuZC1nbzcwMDcubwogCiBzMjI1MC1vYmpzICs9IHMyMjUwLWJvYXJkLm8gczIyNTAtbG9hZGVyLm8KIAotIyBVbmNvbXBpbGUgd2hlbiB0aGUgc2FhNzEzNCBwYXRjaGVzIGdldCBpbnRvIHVwc3RyZWFtCisjIFVuY29tbWVudCB3aGVuIHRoZSBzYWE3MTM0IHBhdGNoZXMgZ2V0IGludG8gdXBzdHJlYW0KICNpZm5lcSAoJChDT05GSUdfVklERU9fU0FBNzEzNCksKQogI29iai0kKENPTkZJR19WSURFT19TQUE3MTM0KSArPSBzYWE3MTM0LWdvNzAwNy5vCi0jRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0CisjRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0IC1EU0FBNzEzNF9NUEVHX0dPNzAwNz0zCiAjZW5kaWYKIAorIyBTMjI1MCBuZWVkcyBjeXByZXNzIGV6dXNiIGxvYWRlciBmcm9tIGR2Yi11c2IKIGlmbmVxICgkKENPTkZJR19WSURFT19HTzcwMDdfVVNCX1MyMjUwX0JPQVJEKSwpCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiCiBlbmRpZgogCi1FWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL3N0YWdpbmcvc2FhNzEzNAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorCisjIFVidW50dSA4LjA0IGhhcyBDT05GSUdfU05EIHVuZGVmaW5lZCwgc28gaW5jbHVkZSBsdW0gc291bmQvY29uZmlnLmggdG9vCitpZmVxICgkKENPTkZJR19TTkQpLCkKK0VYVFJBX0NGTEFHUyArPSAtaW5jbHVkZSBzb3VuZC9jb25maWcuaAorZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWRyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKaW5kZXggNzdiMWU3Ni4uNDcyZjRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KQEAgLTQ5LDcgKzQ5LDcgQEAKIAlnby0+aHBpX29wcy0+cmVhZF9pbnRlcnJ1cHQoZ28pOwogCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoZ28tPmludGVycnVwdF93YWl0cSwKIAkJCQlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSwgNSpIWikgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB0aW1lb3V0IHdhaXRpbmcgZm9yIHJlYWQgaW50ZXJydXB0XG4iKTsKKwkJdjRsMl9lcnIoZ28tPnZpZGVvX2RldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgcmVhZCBpbnRlcnJ1cHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmICghZ28tPmludGVycnVwdF9hdmFpbGFibGUpCkBAIC05NywxMyArOTcsMTIgQEAKIAl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKIAogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZndfbmFtZSwgZ28tPmRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiZ283MDA3OiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGZpbGUgXCIlc1wiXG4iLAotCQkJZndfbmFtZSk7CisJCXY0bDJfZXJyKGdvLCAidW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgZnJvbSBmaWxlICIKKwkJCSJcIiVzXCJcbiIsIGZ3X25hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChmd19lbnRyeS0+c2l6ZSA8IDE2IHx8IG1lbWNtcChmd19lbnRyeS0+ZGF0YSwgIldJU0dPNzAwN0ZXIiwgMTEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBmaWxlIFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgIgorCQl2NGwyX2VycihnbywgImZpbGUgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSAiCiAJCQkJImdvNzAwNyBmaXJtd2FyZVxuIiwgZndfbmFtZSk7CiAJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCQlyZXR1cm4gLTE7CkBAIC0xMTEsNyArMTEwLDcgQEAKIAlmd19sZW4gPSBmd19lbnRyeS0+c2l6ZSAtIDE2OwogCWJvdW5jZSA9IGttYWxsb2MoZndfbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoYm91bmNlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgIgorCQl2NGwyX2VycihnbywgInVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgIgogCQkJCSJmaXJtd2FyZSB0cmFuc2ZlclxuIiwgZndfbGVuKTsKIAkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJCXJldHVybiAtMTsKQEAgLTEyMiw3ICsxMjEsNyBAQAogCQkJZ283MDA3X3NlbmRfZmlybXdhcmUoZ28sIGJvdW5jZSwgZndfbGVuKSA8IDAgfHwKIAkJCWdvNzAwN19yZWFkX2ludGVycnVwdChnbywgJmludHJfdmFsLCAmaW50cl9kYXRhKSA8IDAgfHwKIAkJCShpbnRyX3ZhbCAmIH4weDEpICE9IDB4NWE1YSkgewotCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZXJyb3IgdHJhbnNmZXJyaW5nIGZpcm13YXJlXG4iKTsKKwkJdjRsMl9lcnIoZ28sICJlcnJvciB0cmFuc2ZlcnJpbmcgZmlybXdhcmVcbiIpOwogCQlydiA9IC0xOwogCX0KIAlrZnJlZShib3VuY2UpOwpAQCAtMTQwLDkgKzEzOSw5IEBACiB7CiAJaW50IHJldDsKIAotCWRvd24oJmdvLT5od19sb2NrKTsKKwltdXRleF9sb2NrKCZnby0+aHdfbG9jayk7CiAJcmV0ID0gZ283MDA3X2xvYWRfZW5jb2Rlcihnbyk7Ci0JdXAoJmdvLT5od19sb2NrKTsKKwltdXRleF91bmxvY2soJmdvLT5od19sb2NrKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIC0xOwogCWlmICghaW5pdF9pMmMpCkBAIC0yNTcsOSArMjU2LDkgQEAKIAogCXByaW50ayhLRVJOX0lORk8gImdvNzAwNzogcmVnaXN0ZXJpbmcgbmV3ICVzXG4iLCBnby0+bmFtZSk7CiAKLQlkb3duKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfbG9jaygmZ28tPmh3X2xvY2spOwogCXJldCA9IGdvNzAwN19pbml0X2VuY29kZXIoZ28pOwotCXVwKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZnby0+aHdfbG9jayk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAtMTsKIApAQCAtMzE2LDcgKzMxNSw3IEBACiAKIAlpZiAoZ283MDA3X3NlbmRfZmlybXdhcmUoZ28sIGZ3LCBmd19sZW4pIDwgMCB8fAogCQkJZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmaW50cl92YWwsICZpbnRyX2RhdGEpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZXJyb3IgdHJhbnNmZXJyaW5nIGZpcm13YXJlXG4iKTsKKwkJdjRsMl9lcnIoZ28tPnZpZGVvX2RldiwgImVycm9yIHRyYW5zZmVycmluZyBmaXJtd2FyZVxuIik7CiAJCXJ2ID0gLTE7CiAJCWdvdG8gc3RhcnRfZXJyb3I7CiAJfQpAQCAtMzI1LDcgKzMyNCw3IEBACiAJZ28tPnBhcnNlX2xlbmd0aCA9IDA7CiAJZ28tPnNlZW5fZnJhbWUgPSAwOwogCWlmIChnbzcwMDdfc3RyZWFtX3N0YXJ0KGdvKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGVycm9yIHN0YXJ0aW5nIHN0cmVhbSB0cmFuc2ZlclxuIik7CisJCXY0bDJfZXJyKGdvLT52aWRlb19kZXYsICJlcnJvciBzdGFydGluZyBzdHJlYW0gdHJhbnNmZXJcbiIpOwogCQlydiA9IC0xOwogCQlnb3RvIHN0YXJ0X2Vycm9yOwogCX0KQEAgLTQyMSw3ICs0MjAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogCQlpZiAoZ28tPmFjdGl2ZV9idWYgIT0gTlVMTCAmJgogCQkJICAgIGdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgPj0gR083MDA3X0JVRl9TSVpFIC0gMykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNzogZHJvcHBpbmcgb3ZlcnNpemVkIGZyYW1lXG4iKTsKKwkJCXY0bDJfaW5mbyhnby0+dmlkZW9fZGV2LCAiZHJvcHBpbmcgb3ZlcnNpemVkIGZyYW1lXG4iKTsKIAkJCWdvLT5hY3RpdmVfYnVmLT5vZmZzZXQgLT0gZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZDsKIAkJCWdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgPSAwOwogCQkJZ28tPmFjdGl2ZV9idWYtPm1vZGV0X2FjdGl2ZSA9IDA7CkBAIC02MDQsNyArNjAzLDcgQEAKIAlnby0+dHVuZXJfdHlwZSA9IC0xOwogCWdvLT5jaGFubmVsX251bWJlciA9IDA7CiAJZ28tPm5hbWVbMF0gPSAwOwotCWluaXRfTVVURVgoJmdvLT5od19sb2NrKTsKKwltdXRleF9pbml0KCZnby0+aHdfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZ28tPmZyYW1lX3dhaXRxKTsKIAlzcGluX2xvY2tfaW5pdCgmZ28tPnNwaW5sb2NrKTsKIAlnby0+dmlkZW9fZGV2ID0gTlVMTDsKQEAgLTY2OSw4ICs2NjgsOCBAQAogCQlpZiAoaTJjX2RlbF9hZGFwdGVyKCZnby0+aTJjX2FkYXB0ZXIpID09IDApCiAJCQlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMDsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJImdvNzAwNzogZXJyb3IgcmVtb3ZpbmcgSTJDIGFkYXB0ZXIhXG4iKTsKKwkJCXY0bDJfZXJyKGdvLT52aWRlb19kZXYsCisJCQkJImVycm9yIHJlbW92aW5nIEkyQyBhZGFwdGVyIVxuIik7CiAJfQogCiAJaWYgKGdvLT5hdWRpb19lbmFibGVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZncuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWZ3LmMKaW5kZXggODcxZWQ0My4uYThiYjI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZncuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jCkBAIC0xMDM0LDcgKzEwMzQsOCBAQAogCQkweEJGMUIsCQlmcmFtZWxlbls3XSwKIAkJMCwJCTAsCiAKLSNpZiAwIC8qIFJlbW92ZSBvbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgbWF0Y2hpbmcgKi8KKyNpZiAwCisJCS8qIFJlbW92ZSBvbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgbWF0Y2hpbmcgKi8KIAkJMHgyMDBlLAkJMHgwMDAwLAogCQkweEJGNTYsCQk0LAogCQkweEJGNTcsCQkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctaTJjLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1pMmMuYwppbmRleCBjODI4NjdmLi5iOGNmYTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1pMmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1pMmMuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogLyogVGhlcmUgaXMgb25seSBvbmUgSTJDIHBvcnQgb24gdGhlIFRXMjgwNCB0aGF0IGZlZWRzIGFsbCBmb3VyIEdPNzAwNyBWSVBzCiAgKiBvbiB0aGUgQWRsaW5rIFBDSS1NUEcyNCwgc28gYWNjZXNzIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBvZiB0aGVtLiAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgoYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKIAogc3RhdGljIGludCBnbzcwMDdfaTJjX3hmZXIoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiBhZGRyLCBpbnQgcmVhZCwKIAkJdTE2IGNvbW1hbmQsIGludCBmbGFncywgdTggKmRhdGEpCkBAIC02OSwxMSArNjksMTEgQEAKIAkJCSpkYXRhLCBjb21tYW5kLCBhZGRyKTsKICNlbmRpZgogCi0JZG93bigmZ28tPmh3X2xvY2spOworCW11dGV4X2xvY2soJmdvLT5od19sb2NrKTsKIAogCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0KSB7CiAJCS8qIEJyaWRnZSB0aGUgSTJDIHBvcnQgb24gdGhpcyBHTzcwMDcgdG8gdGhlIHNoYXJlZCBidXMgKi8KLQkJZG93bigmYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKIAkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDIwKTsKIAl9CiAKQEAgLTEzNCw5ICsxMzQsOSBAQAogCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0KSB7CiAJCS8qIElzb2xhdGUgdGhlIEkyQyBwb3J0IG9uIHRoaXMgR083MDA3IGZyb20gdGhlIHNoYXJlZCBidXMgKi8KIAkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDAwKTsKLQkJdXAoJmFkbGlua19tcGcyNF9pMmNfbG9jayk7CisJCW11dGV4X3VubG9jaygmYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKIAl9Ci0JdXAoJmdvLT5od19sb2NrKTsKKwltdXRleF91bmxvY2soJmdvLT5od19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1wcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1wcml2LmgKaW5kZXggMTc4ZDE4MS4uY2U5MzA3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctcHJpdi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAKIHN0cnVjdCBnbzcwMDdfZmlsZSB7CiAJc3RydWN0IGdvNzAwNyAqZ287Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCBidWZfY291bnQ7CiAJc3RydWN0IGdvNzAwN19idWZmZXIgKmJ1ZnM7CiB9OwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJaW50IHJlZl9jb3VudDsKIAllbnVtIHsgU1RBVFVTX0lOSVQsIFNUQVRVU19PTkxJTkUsIFNUQVRVU19TSFVURE9XTiB9IHN0YXR1czsKIAlzcGlubG9ja190IHNwaW5sb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgaHdfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggaHdfbG9jazsKIAlpbnQgc3RyZWFtaW5nOwogCWludCBpbl91c2U7CiAJaW50IGF1ZGlvX2VuYWJsZWQ7CkBAIC0yNDAsNyArMjQwLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfZGF0YTsKIH07CiAKLS8qIEFsbCBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBocGlfbG9jayBzZW1hcGhvcmUgaGVsZCEgKi8KKy8qIEFsbCBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBocGlfbG9jayBtdXRleCBoZWxkISAqLwogI2RlZmluZSBnbzcwMDdfaW50ZXJmYWNlX3Jlc2V0KGdvKSBcCiAJCQkoKGdvKS0+aHBpX29wcy0+aW50ZXJmYWNlX3Jlc2V0KGdvKSkKICNkZWZpbmUJZ283MDA3X3dyaXRlX2ludGVycnVwdChnbywgeCwgeSkgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYwppbmRleCBhYTRhOWUwLi5lY2FhM2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYwpAQCAtMzMsNyArMzMsOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGFzc3VtZV9lbmR1cmE7CiBtb2R1bGVfcGFyYW0oYXNzdW1lX2VuZHVyYSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYXNzdW1lX2VuZHVyYSwgIndoZW4gcHJvYmluZyBmYWlscywgaGFyZHdhcmUgaXMgYSBQZWxjbyBFbmR1cmEiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXNzdW1lX2VuZHVyYSwgIndoZW4gcHJvYmluZyBmYWlscywgIgorCQkJCSJoYXJkd2FyZSBpcyBhIFBlbGNvIEVuZHVyYSIpOwogCiAvKiAjZGVmaW5lIEdPNzAwN19VU0JfREVCVUcgKi8KIC8qICNkZWZpbmUgR083MDA3X0kyQ19ERUJVRyAqLyAvKiBmb3IgZGVidWdnaW5nIHRoZSBFWi1VU0IgSTJDIGFkYXB0ZXIgKi8KQEAgLTQ0LDEyICs0NSwxMiBAQAogCiAvKgogICogUGlwZXMgb24gRVotVVNCIGludGVyZmFjZToKLSAqIAkwIHNuZCAtIENvbnRyb2wKLSAqIAkwIHJjdiAtIENvbnRyb2wKLSAqIAkyIHNuZCAtIERvd25sb2FkIGZpcm13YXJlIChjb250cm9sKQotICogCTQgcmN2IC0gUmVhZCBJbnRlcnJ1cHQgKGludGVycnVwdCkKLSAqIAk2IHJjdiAtIFJlYWQgVmlkZW8gKGJ1bGspCi0gKiAJOCByY3YgLSBSZWFkIEF1ZGlvIChidWxrKQorICoJMCBzbmQgLSBDb250cm9sCisgKgkwIHJjdiAtIENvbnRyb2wKKyAqCTIgc25kIC0gRG93bmxvYWQgZmlybXdhcmUgKGNvbnRyb2wpCisgKgk0IHJjdiAtIFJlYWQgSW50ZXJydXB0IChpbnRlcnJ1cHQpCisgKgk2IHJjdiAtIFJlYWQgVmlkZW8gKGJ1bGspCisgKgk4IHJjdiAtIFJlYWQgQXVkaW8gKGJ1bGspCiAgKi8KIAogI2RlZmluZSBHTzcwMDdfVVNCX0VaVVNCCQkoMTw8MCkKQEAgLTYyLDcgKzYzLDcgQEAKIAogc3RydWN0IGdvNzAwN191c2IgewogCXN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkICpib2FyZDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGkyY19sb2NrOworCXN0cnVjdCBtdXRleCBpMmNfbG9jazsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwogCXN0cnVjdCB1cmIgKnZpZGVvX3VyYnNbOF07CiAJc3RydWN0IHVyYiAqYXVkaW9fdXJic1s4XTsKQEAgLTk3LDcgKzk4LDcgQEAKIAkJCX0sCiAJCX0sCiAJCS5udW1faW5wdXRzCSA9IDIsCi0JCS5pbnB1dHMgCSA9IHsKKwkJLmlucHV0cwkJID0gewogCQkJewogCQkJCS52aWRlb19pbnB1dAk9IDAsCiAJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCkBAIC0xMzQsNyArMTM1LDcgQEAKIAkJCX0sCiAJCX0sCiAJCS5udW1faW5wdXRzCSA9IDIsCi0JCS5pbnB1dHMgCSA9IHsKKwkJLmlucHV0cwkJID0gewogCQkJewogCQkJCS52aWRlb19pbnB1dAk9IDAsCiAJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCkBAIC0xNzIsNyArMTczLDcgQEAKIAkJCX0sCiAJCX0sCiAJCS5udW1faW5wdXRzCSA9IDIsCi0JCS5pbnB1dHMgCSA9IHsKKwkJLmlucHV0cwkJID0gewogCQkJewogCQkJCS52aWRlb19pbnB1dAk9IDEsCiAJCQkvKgkuYXVkaW9faW5wdXQJPSBBVURJT19FWFRFUk4sICovCkBAIC0yMjgsNyArMjI5LDcgQEAKIAkJCX0sCiAJCX0sCiAJCS5udW1faW5wdXRzCSA9IDMsCi0JCS5pbnB1dHMgCSA9IHsKKwkJLmlucHV0cwkJID0gewogCQkJewogCQkJCS52aWRlb19pbnB1dAk9IDEsCiAJCQkJLmF1ZGlvX2lucHV0CT0gVFZBVURJT19JTlBVVF9FWFRFUk4sCkBAIC0yNzYsNyArMjc3LDcgQEAKIAkJCX0sCiAJCX0sCiAJCS5udW1faW5wdXRzCSAgPSAxLAotCQkuaW5wdXRzIAkgID0geworCQkuaW5wdXRzCQkgID0gewogCQkJewogCQkJCS5uYW1lCQk9ICJDYW1lcmEiLAogCQkJfSwKQEAgLTMwOSw3ICszMTAsNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJID0gMiwKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLnZpZGVvX2lucHV0CT0gMiwKIAkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKQEAgLTM0MSw3ICszNDIsNyBAQAogCQkJCQlHTzcwMDdfU0VOU09SX1NDQUxJTkcsCiAJCS5udW1faTJjX2RldnMJID0gMCwKIAkJLm51bV9pbnB1dHMJID0gMSwKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLnZpZGVvX2lucHV0CT0gMCwKIAkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKQEAgLTM2Nyw3ICszNjgsNyBAQAogCQkuc2Vuc29yX2hfb2Zmc2V0ID0gOCwKIAkJLm51bV9pMmNfZGV2cwkgPSAwLAogCQkubnVtX2lucHV0cwkgPSAxLAotCQkuaW5wdXRzIAkgPSB7CisJCS5pbnB1dHMJCSA9IHsKIAkJCXsKIAkJCQkubmFtZQkJPSAiQ2FtZXJhIiwKIAkJCX0sCkBAIC0zOTksNyArNDAwLDcgQEAKIAkJCX0sCiAJCX0sCiAJCS5udW1faW5wdXRzCSA9IDEsCi0JCS5pbnB1dHMgCSA9IHsKKwkJLmlucHV0cwkJID0gewogCQkJewogCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAogCQkJfSwKQEAgLTQzMCw3ICs0MzEsNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJID0gMiwKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLnZpZGVvX2lucHV0CT0gMCwKIAkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKQEAgLTczNCwxNCArNzM1LDE1IEBACiBzdGF0aWMgdm9pZCBnbzcwMDdfdXNiX3JlYWRfdmlkZW9fcGlwZV9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGdvNzAwNyAqZ28gPSAoc3RydWN0IGdvNzAwNyAqKXVyYi0+Y29udGV4dDsKLQlpbnQgciwgc3RhdHVzID0gdXJiLT4gc3RhdHVzOworCWludCByLCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAogCWlmICghZ28tPnN0cmVhbWluZykgewogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdvLT5mcmFtZV93YWl0cSk7CiAJCXJldHVybjsKIAl9CiAJaWYgKHN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIHZpZGVvIHBpcGU6ICVkXG4iLCBzdGF0dXMpOworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIHZpZGVvIHBpcGU6ICVkXG4iLAorCQkJc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgewpAQCAtNzYyLDcgKzc2NCw4IEBACiAJaWYgKCFnby0+c3RyZWFtaW5nKQogCQlyZXR1cm47CiAJaWYgKHN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIGF1ZGlvIHBpcGU6ICVkXG4iLCBzdGF0dXMpOworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIGF1ZGlvIHBpcGU6ICVkXG4iLAorCQkJc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgewpAQCAtODc3LDcgKzg4MCw3IEBACiAJaWYgKGdvLT5zdGF0dXMgPT0gU1RBVFVTX1NIVVRET1dOKQogCQlyZXR1cm4gLTE7CiAKLQlkb3duKCZ1c2ItPmkyY19sb2NrKTsKKwltdXRleF9sb2NrKCZ1c2ItPmkyY19sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewogCQkvKiBUaGUgaGFyZHdhcmUgY29tbWFuZCBpcyAid3JpdGUgc29tZSBieXRlcyB0aGVuIHJlYWQgc29tZQpAQCAtOTM1LDcgKzkzOCw3IEBACiAJcmV0ID0gMDsKIAogaTJjX2RvbmU6Ci0JdXAoJnVzYi0+aTJjX2xvY2spOworCW11dGV4X3VubG9jaygmdXNiLT5pMmNfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAxNyw3ICsxMDIwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBHTzcwMDdfQk9BUkRJRF9TRU5TT1JBWV8yMjUwOgogCQlwcmludGsoS0VSTl9JTkZPICJTZW5zb3JheSAyMjUwIGZvdW5kXG4iKTsKLQkJbmFtZSA9ICJTZW5zb3JheSAyMjUwLzIyNTFcbiI7CisJCW5hbWUgPSAiU2Vuc29yYXkgMjI1MC8yMjUxIjsKIAkJYm9hcmQgPSAmYm9hcmRfc2Vuc29yYXlfMjI1MDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwNjUsNyArMTA2OCw3IEBACiAJaWYgKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0JfSTJDKSB7CiAJCW1lbWNweSgmZ28tPmkyY19hZGFwdGVyLCAmZ283MDA3X3VzYl9hZGFwX3RlbXBsLAogCQkJCXNpemVvZihnbzcwMDdfdXNiX2FkYXBfdGVtcGwpKTsKLQkJaW5pdF9NVVRFWCgmdXNiLT5pMmNfbG9jayk7CisJCW11dGV4X2luaXQoJnVzYi0+aTJjX2xvY2spOwogCQlnby0+aTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9IGdvLT5kZXY7CiAJCWkyY19zZXRfYWRhcGRhdGEoJmdvLT5pMmNfYWRhcHRlciwgZ28pOwogCQlpZiAoaTJjX2FkZF9hZGFwdGVyKCZnby0+aTJjX2FkYXB0ZXIpIDwgMCkgewpAQCAtMTA5Niw3ICsxMDk5LDcgQEAKIAkJCQl1c2ItPmJvYXJkID0gYm9hcmQgPSAmYm9hcmRfZW5kdXJhOwogCQkJCWdvLT5ib2FyZF9pbmZvID0gJmJvYXJkLT5tYWluX2luZm87CiAJCQkJc3RybmNweShnby0+bmFtZSwgIlBlbGNvIEVuZHVyYSIsCi0JCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKKwkJCQkJc2l6ZW9mKGdvLT5uYW1lKSk7CiAJCQl9IGVsc2UgewogCQkJCXUxNiBjaGFubmVsOwogCkBAIC0xMTU0LDggKzExNTcsNyBAQAogCQkgKiB0byB0aGUgRVotVVNCIEdQSU8gb3V0cHV0IHBpbnMgKi8KIAkJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4NDAsIDB4N2YwMiwgMCwKIAkJCQkJTlVMTCwgMCwgMCkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCQkiZ283MDA3LXVzYjogR1BJTyB3cml0ZSBmYWlsZWQhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogR1BJTyB3cml0ZSBmYWlsZWQhXG4iKTsKIAkJCWdvdG8gaW5pdGZhaWw7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKaW5kZXggMDZjYWNkMy4uNGJkMzUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtNzUsNyArNzUsNyBAQAogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkb3duKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfbG9jaygmZ28tPmh3X2xvY2spOwogCWlmIChnby0+c3RyZWFtaW5nKSB7CiAJCWdvLT5zdHJlYW1pbmcgPSAwOwogCQlnbzcwMDdfc3RyZWFtX3N0b3AoZ28pOwpAQCAtODUsNyArODUsNyBAQAogCQlnbzcwMDdfcmVzZXRfZW5jb2Rlcihnbyk7CiAJCXJldHZhbCA9IDA7CiAJfQotCXVwKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZnby0+aHdfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAkrK2dvLT5yZWZfY291bnQ7CiAJZ29maC0+Z28gPSBnbzsKLQlpbml0X01VVEVYKCZnb2ZoLT5sb2NrKTsKKwltdXRleF9pbml0KCZnb2ZoLT5sb2NrKTsKIAlnb2ZoLT5idWZfY291bnQgPSAwOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGdvZmg7CiAJcmV0dXJuIDA7CkBAIC0zODMsMTMgKzM4MywxMCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCi1zdGF0aWMgaW50IG1wZWdfcXVlcnljdHJsKHUzMiBpZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQorc3RhdGljIGludCBtcGVnX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwpCiB7Ci0Jc3RhdGljIGNvbnN0IHUzMiB1c2VyX2N0cmxzW10gPSB7Ci0JCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCi0JCTAKLQl9OwogCXN0YXRpYyBjb25zdCB1MzIgbXBlZ19jdHJsc1tdID0gewogCQlWNEwyX0NJRF9NUEVHX0NMQVNTLAogCQlWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFLApAQCAtNDAxLDI2ICszOTgsMTUgQEAKIAkJMAogCX07CiAJc3RhdGljIGNvbnN0IHUzMiAqY3RybF9jbGFzc2VzW10gPSB7Ci0JCXVzZXJfY3RybHMsCiAJCW1wZWdfY3RybHMsCiAJCU5VTEwKIAl9OwogCi0JLyogVGhlIGN0cmwgbWF5IGFscmVhZHkgY29udGFpbiB0aGUgcXVlcmllZCBpMmMgY29udHJvbHMsCi0JICogcXVlcnkgdGhlIG1wZWcgY29udHJvbHMgaWYgdGhlIGV4aXN0aW5nIGN0cmwgaWQgaXMKLQkgKiBncmVhdGVyIHRoYW4gdGhlIG5leHQgbXBlZyBjdHJsIGlkLgotCSAqLwotCWlkID0gdjRsMl9jdHJsX25leHQoY3RybF9jbGFzc2VzLCBpZCk7Ci0JaWYgKGlkID49IGN0cmwtPmlkICYmIGN0cmwtPm5hbWVbMF0pCi0JCXJldHVybiAwOwotCi0JbWVtc2V0KGN0cmwsIDAsIHNpemVvZigqY3RybCkpOwotCWN0cmwtPmlkID0gaWQ7CisJY3RybC0+aWQgPSB2NGwyX2N0cmxfbmV4dChjdHJsX2NsYXNzZXMsIGN0cmwtPmlkKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKGN0cmwpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoY3RybCwgMCwgMCwgMCwgMCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoY3RybCwKIAkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfRFZELApAQCAtNDM3LDIwICs0MjMsMjEgQEAKIAkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzE2eDksIDEsCiAJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xeDEpOwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKGN0cmwsIDAsIDM0LCAxLCAxNSk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKGN0cmwpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoY3RybCwgMCwgMSwgMSwgMCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjdHJsLAogCQkJCTY0MDAwLAogCQkJCTEwMDAwMDAwLCAxLAotCQkJCTk4MDAwMDApOworCQkJCTE1MDAwMDApOwogCWRlZmF1bHQ6Ci0JCWJyZWFrOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXBlZ19zX2NvbnRyb2woc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCwgc3RydWN0IGdvNzAwNyAqZ28pCitzdGF0aWMgaW50IG1wZWdfc19jdHJsKHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwsIHN0cnVjdCBnbzcwMDcgKmdvKQogewogCS8qIHByZXR0eSBzdXJlIHdlIGNhbid0IGNoYW5nZSBhbnkgb2YgdGhlc2Ugd2hpbGUgc3RyZWFtaW5nICovCiAJaWYgKGdvLT5zdHJlYW1pbmcpCkBAIC01MjgsNiArNTE1LDggQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6CisJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAzNCkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlnby0+Z29wX3NpemUgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOgpAQCAtNTQ3LDcgKzUzNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXBlZ19nX2NvbnRyb2woc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCwgc3RydWN0IGdvNzAwNyAqZ28pCitzdGF0aWMgaW50IG1wZWdfZ19jdHJsKHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwsIHN0cnVjdCBnbzcwMDcgKmdvKQogewogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CkBAIC02MDAsMTMgKzU4OSwxMSBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiZ283MDA3Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXAtPmNhcmQsIGdvLT5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CkBAIC02NTMsOCArNjQwLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmbXQtPmZtdC5waXgud2lkdGggPSBnby0+d2lkdGg7CkBAIC02NzIsOCArNjU4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCXJldHVybiBzZXRfY2FwdHVyZV9zaXplKGdvLCBmbXQsIDEpOwogfQpAQCAtNjgxLDggKzY2Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKGdvLT5zdHJlYW1pbmcpCiAJCXJldHVybiAtRUJVU1k7CkBAIC03MDUsMTQgKzY4OSwxNCBAQAogCQkJcmVxLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZnb2ZoLT5sb2NrKTsKKwltdXRleF9sb2NrKCZnb2ZoLT5sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgZ29maC0+YnVmX2NvdW50OyArK2kpCiAJCWlmIChnb2ZoLT5idWZzW2ldLm1hcHBlZCA+IDApCiAJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOwogCi0JZG93bigmZ28tPmh3X2xvY2spOworCW11dGV4X2xvY2soJmdvLT5od19sb2NrKTsKIAlpZiAoZ28tPmluX3VzZSA+IDAgJiYgZ29maC0+YnVmX2NvdW50ID09IDApIHsKLQkJdXAoJmdvLT5od19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZnby0+aHdfbG9jayk7CiAJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CiAJfQogCkBAIC03MzEsNyArNzE1LDcgQEAKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCiAJCWlmICghZ29maC0+YnVmcykgewotCQkJdXAoJmdvLT5od19sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZ28tPmh3X2xvY2spOwogCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKIAkJfQogCkBAIC03NTAsOCArNzM0LDggQEAKIAl9CiAKIAlnb2ZoLT5idWZfY291bnQgPSBjb3VudDsKLQl1cCgmZ28tPmh3X2xvY2spOwotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvLT5od19sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCiAJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKIApAQCAtNzYyLDcgKzc0Niw3IEBACiAJcmV0dXJuIDA7CiAKIHVubG9ja19hbmRfcmV0dXJuOgotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTc3OCw3ICs3NjIsNyBAQAogCiAJaW5kZXggPSBidWYtPmluZGV4OwogCi0JZG93bigmZ29maC0+bG9jayk7CisJbXV0ZXhfbG9jaygmZ29maC0+bG9jayk7CiAJaWYgKGluZGV4ID49IGdvZmgtPmJ1Zl9jb3VudCkKIAkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKIApAQCAtODAyLDEyICs3ODYsMTIgQEAKIAlidWYtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CiAJYnVmLT5tLm9mZnNldCA9IGluZGV4ICogR083MDA3X0JVRl9TSVpFOwogCWJ1Zi0+bGVuZ3RoID0gR083MDA3X0JVRl9TSVpFOwotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCiAJcmV0dXJuIDA7CiAKIHVubG9ja19hbmRfcmV0dXJuOgotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTgyNCw3ICs4MDgsNyBAQAogCQkJYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCWRvd24oJmdvZmgtPmxvY2spOworCW11dGV4X2xvY2soJmdvZmgtPmxvY2spOwogCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGdvZmgtPmJ1Zl9jb3VudCkKIAkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKIApAQCAtODY1LDEyICs4NDksMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmZ29idWYtPnN0cmVhbSwgJmdvLT5zdHJlYW0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOwotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCiAJcmV0dXJuIDA7CiAKIHVubG9ja19hbmRfcmV0dXJuOgotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTg5MCw3ICs4NzQsNyBAQAogCWlmIChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JZG93bigmZ29maC0+bG9jayk7CisJbXV0ZXhfbG9jaygmZ29maC0+bG9jayk7CiAJaWYgKGxpc3RfZW1wdHkoJmdvLT5zdHJlYW0pKQogCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOwogCWdvYnVmID0gbGlzdF9lbnRyeShnby0+c3RyZWFtLm5leHQsCkBAIC05MzQsMTEgKzkxOCwxMSBAQAogCWJ1Zi0+bGVuZ3RoID0gR083MDA3X0JVRl9TSVpFOwogCWJ1Zi0+cmVzZXJ2ZWQgPSBnb2J1Zi0+bW9kZXRfYWN0aXZlOwogCi0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAJcmV0dXJuIDA7CiAKIHVubG9ja19hbmRfcmV0dXJuOgotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk1Miw4ICs5MzYsOCBAQAogCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZnb2ZoLT5sb2NrKTsKLQlkb3duKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfbG9jaygmZ29maC0+bG9jayk7CisJbXV0ZXhfbG9jaygmZ28tPmh3X2xvY2spOwogCiAJaWYgKCFnby0+c3RyZWFtaW5nKSB7CiAJCWdvLT5zdHJlYW1pbmcgPSAxOwpAQCAtOTY0LDggKzk0OCw4IEBACiAJCWVsc2UKIAkJCXJldHZhbCA9IDA7CiAJfQotCXVwKCZnby0+aHdfbG9jayk7Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ28tPmh3X2xvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtOTc4LDkgKzk2Miw5IEBACiAKIAlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCWRvd24oJmdvZmgtPmxvY2spOworCW11dGV4X2xvY2soJmdvZmgtPmxvY2spOwogCWdvNzAwN19zdHJlYW1vZmYoZ28pOwotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05ODgsMjIgKzk3MiwyMCBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxdWVyeSkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCiAJCXJldHVybiAtRUlPOwogCiAJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfUVVFUllDVFJMLCBxdWVyeSk7CiAKLQlyZXR1cm4gKCFxdWVyeS0+bmFtZVswXSkgPyAtRUlOVkFMIDogMDsKKwlyZXR1cm4gKCFxdWVyeS0+bmFtZVswXSkgPyBtcGVnX3F1ZXJ5Y3RybChxdWVyeSkgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHF1ZXJ5OwogCiAJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQpAQCAtMTAxMyw3ICs5OTUsNyBAQAogCXF1ZXJ5LmlkID0gY3RybC0+aWQ7CiAJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfUVVFUllDVFJMLCAmcXVlcnkpOwogCWlmIChxdWVyeS5uYW1lWzBdID09IDApCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gbXBlZ19nX2N0cmwoY3RybCwgZ28pOwogCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX0dfQ1RSTCwgY3RybCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMjIsOCArMTAwNCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHF1ZXJ5OwogCiAJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQpAQCAtMTAzMyw3ICsxMDE0LDcgQEAKIAlxdWVyeS5pZCA9IGN0cmwtPmlkOwogCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1FVRVJZQ1RSTCwgJnF1ZXJ5KTsKIAlpZiAocXVlcnkubmFtZVswXSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIG1wZWdfc19jdHJsKGN0cmwsIGdvKTsKIAlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX0NUUkwsIGN0cmwpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDQyLDggKzEwMjMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAlzdHJ1Y3QgdjRsMl9mcmFjdCB0aW1lcGVyZnJhbWUgPSB7CiAJCS5udW1lcmF0b3IgPSAxMDAxICogIGdvLT5mcHNfc2NhbGUsCiAJCS5kZW5vbWluYXRvciA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlLApAQCAtMTA2MSw4ICsxMDQxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAJdW5zaWduZWQgaW50IG4sIGQ7CiAKIAlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCkBAIC0xMDk0LDggKzEwNzMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZW51bV9mcmFtZXNpemVzKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAogCQkJCSAgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCS8qIFJldHVybiAtRUlOVkFMLCBpZiBpdCBpcyBhIFRWIGJvYXJkICovCiAJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSB8fApAQCAtMTExNSw4ICsxMDkzLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKmZpdmFsKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCS8qIFJldHVybiAtRUlOVkFMLCBpZiBpdCBpcyBhIFRWIGJvYXJkICovCiAJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSB8fApAQCAtMTEzMywxMCArMTExMCwyNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZpZGlvY19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKKworCXN3aXRjaCAoZ28tPnN0YW5kYXJkKSB7CisJY2FzZSBHTzcwMDdfU1REX05UU0M6CisJCSpzdGQgPSBWNEwyX1NURF9OVFNDOworCQlicmVhazsKKwljYXNlIEdPNzAwN19TVERfUEFMOgorCQkqc3RkID0gVjRMMl9TVERfUEFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKGdvLT5zdHJlYW1pbmcpCiAJCXJldHVybiAtRUJVU1k7CkBAIC0xMTc4LDMwICsxMTcyLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0JY2FzZSBWSURJT0NfUVVFUllTVEQ6Ci0JewotCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworc3RhdGljIGludCB2aWRpb2NfcXVlcnlzdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKLQkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgotCQkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKLQkJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKLQkJCQkJCVZJRElPQ19RVUVSWVNURCwgYXJnKTsKLQkJfSBlbHNlIGlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikKLQkJCSpzdGQgPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU07Ci0JCWVsc2UKLQkJCSpzdGQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKKwlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQlnby0+aW5wdXQgPT0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMgLSAxKSB7CisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19RVUVSWVNURCwgc3RkKTsKKwl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKQorCQkqc3RkID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOworCWVsc2UKKwkJKnN0ZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWlmIChpbnAtPmluZGV4ID49IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyMzAsOCArMTIyMSw3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaW5wdXQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJKmlucHV0ID0gZ28tPmlucHV0OwogCkBAIC0xMjQwLDggKzEyMzAsNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKGlucHV0ID49IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNjIsOCArMTI1MSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp0KQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyODEsOCArMTI2OSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp0KQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMDgsOCArMTI5NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMyNCw4ICsxMzEwLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlpZiAoIShnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzQwLDggKzEzMjUsNyBAQAogc3RhdGljIGludCB2aWRpb2NfY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlpZiAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM4NSw4ICsxMzY5LDcgQEAKIAogc3RhdGljIGludCB2aWRpb2NfZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzM0LDE4ICsxNzE3LDE4IEBACiAJCXJldHVybiAtRUlOVkFMOyAvKiBvbmx5IHN1cHBvcnQgVk1fU0hBUkVEIG1hcHBpbmcgKi8KIAlpZiAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ICE9IEdPNzAwN19CVUZfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIG11c3QgbWFwIGV4YWN0bHkgb25lIGZ1bGwgYnVmZmVyICovCi0JZG93bigmZ29maC0+bG9jayk7CisJbXV0ZXhfbG9jaygmZ29maC0+bG9jayk7CiAJaW5kZXggPSB2bWEtPnZtX3Bnb2ZmIC8gR083MDA3X0JVRl9QQUdFUzsKIAlpZiAoaW5kZXggPj0gZ29maC0+YnVmX2NvdW50KSB7Ci0JCXVwKCZnb2ZoLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZnb2ZoLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIHRyeWluZyB0byBtYXAgYmV5b25kIHJlcXVlc3RlZCBidWZmZXJzICovCiAJfQogCWlmIChpbmRleCAqIEdPNzAwN19CVUZfUEFHRVMgIT0gdm1hLT52bV9wZ29mZikgewotCQl1cCgmZ29maC0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOyAvKiBvZmZzZXQgaXMgbm90IGFsaWduZWQgb24gYnVmZmVyIGJvdW5kYXJ5ICovCiAJfQogCWlmIChnb2ZoLT5idWZzW2luZGV4XS5tYXBwZWQgPiAwKSB7Ci0JCXVwKCZnb2ZoLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZnb2ZoLT5sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJZ29maC0+YnVmc1tpbmRleF0ubWFwcGVkID0gMTsKQEAgLTE3NTQsNyArMTczNyw3IEBACiAJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOwogCXZtYS0+dm1fZmxhZ3MgJj0gflZNX0lPOwogCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmdvZmgtPmJ1ZnNbaW5kZXhdOwotCXVwKCZnb2ZoLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xODAxLDcgKzE3ODQsOSBAQAogCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCiAJLnZpZGlvY19xYnVmICAgICAgICAgICAgICA9IHZpZGlvY19xYnVmLAogCS52aWRpb2NfZHFidWYgICAgICAgICAgICAgPSB2aWRpb2NfZHFidWYsCisJLnZpZGlvY19nX3N0ZCAgICAgICAgICAgICA9IHZpZGlvY19nX3N0ZCwKIAkudmlkaW9jX3Nfc3RkICAgICAgICAgICAgID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgICAgICAgICAgPSB2aWRpb2NfcXVlcnlzdGQsCiAJLnZpZGlvY19lbnVtX2lucHV0ICAgICAgICA9IHZpZGlvY19lbnVtX2lucHV0LAogCS52aWRpb2NfZ19pbnB1dCAgICAgICAgICAgPSB2aWRpb2NfZ19pbnB1dCwKIAkudmlkaW9jX3NfaW5wdXQgICAgICAgICAgID0gdmlkaW9jX3NfaW5wdXQsCkBAIC0xODYyLDcgKzE4NDcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkb3duKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfbG9jaygmZ28tPmh3X2xvY2spOwogCWlmIChnby0+c3RyZWFtaW5nKSB7CiAJCWdvLT5zdHJlYW1pbmcgPSAwOwogCQlnbzcwMDdfc3RyZWFtX3N0b3AoZ28pOwpAQCAtMTg3MCw3ICsxODU1LDcgQEAKIAkJYWJvcnRfcXVldWVkKGdvKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CiAJfQotCXVwKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZnby0+aHdfbG9jayk7CiAJaWYgKGdvLT52aWRlb19kZXYpCiAJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGdvLT52aWRlb19kZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcudHh0IGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcudHh0CmluZGV4IDFjMjkwN2MuLjA2YTc2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LnR4dAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy50eHQKQEAgLTIsNyArMiw3IEBACiAKIFBldGUgRWJlcmxlaW4gPHBldGVAc2Vuc29yYXkuY29tPgogCi1UaGUgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgYW5kIGlzIGN1cnJlbnRseSBob3N0ZWQgYXQ6CitUaGUgZHJpdmVyIHdhcyBvcmlnbmFsbHkgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCBhbmQgaXMgY3VycmVudGx5IGhvc3RlZCBhdDoKIGh0dHA6Ly9uaWtvc2FwaS5vcmcvd2lraS9pbmRleC5waHAvV0lTX0dvNzAwN19MaW51eF9kcml2ZXIKIFRoZSBnbzcwMDcgZmlybXdhcmUgY2FuIGJlIGFjcXVpcmVkIGZyb20gdGhlIHBhY2thZ2Ugb24gdGhlIHNpdGUgYWJvdmUuCiAKQEAgLTI0LDEwICsyNCwxMCBAQAogYmVsb3cuCiAKIAotVGhlIFJFQURNRSBmaWxlcyBmcm9tIHRoZSBvcmlnaW5hbCBwYWNrYWdlIGFwcGVhcnMgYmVsb3c6CitUaGUgUkVBRE1FIGZpbGVzIGZyb20gdGhlIG9yaWduYWwgcGFja2FnZSBhcHBlYXIgYmVsb3c6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgV0lTIEdPNzAwN1NCIFB1YmxpYyBMaW51eCBEcml2ZXIKKwkJICAgICBXSVMgR083MDA3U0IgUHVibGljIExpbnV4IERyaXZlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIApAQCAtNzgsMjMgKzc4LDIzIEBACiBmb3IgY3VzdG9tLWJ1aWx0IGtlcm5lbHMsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gdGhlCiBrZXJuZWwgYXMgYnVpbHQtaW4gb3IgbW9kdWxlczoKIAotICAgICAgICBDT05GSUdfSE9UUExVRyAgICAgICAgICAgLSBTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIGRldmljZXMKLSAgICAgICAgQ09ORklHX01PRFVMRVMgICAgICAgICAgIC0gRW5hYmxlIGxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0gICAgICAgIENPTkZJR19LTU9EICAgICAgICAgICAgICAtIEF1dG9tYXRpYyBrZXJuZWwgbW9kdWxlIGxvYWRpbmcKLSAgICAgICAgQ09ORklHX0ZXX0xPQURFUiAgICAgICAgIC0gSG90cGx1ZyBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQKLSAgICAgICAgQ09ORklHX0kyQyAgICAgICAgICAgICAgIC0gSTJDIHN1cHBvcnQKLSAgICAgICAgQ09ORklHX1ZJREVPX0RFViAgICAgICAgIC0gVmlkZW8gRm9yIExpbnV4Ci0gICAgICAgIENPTkZJR19TT1VORCAgICAgICAgICAgICAtIFNvdW5kIGNhcmQgc3VwcG9ydAotICAgICAgICBDT05GSUdfU05EICAgICAgICAgICAgICAgLSBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSAgICAgICAgQ09ORklHX1VTQiAgICAgICAgICAgICAgIC0gU3VwcG9ydCBmb3IgSG9zdC1zaWRlIFVTQgotICAgICAgICBDT05GSUdfVVNCX0RFVklDRUZTICAgICAgLSBVU0IgZGV2aWNlIGZpbGVzeXN0ZW0KLSAgICAgICAgQ09ORklHX1VTQl9FSENJX0hDRCAgICAgIC0gRUhDSSBIQ0QgKFVTQiAyLjApIHN1cHBvcnQKKwlDT05GSUdfSE9UUExVRyAgICAgICAgICAgLSBTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIGRldmljZXMKKwlDT05GSUdfTU9EVUxFUyAgICAgICAgICAgLSBFbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKwlDT05GSUdfS01PRCAgICAgICAgICAgICAgLSBBdXRvbWF0aWMga2VybmVsIG1vZHVsZSBsb2FkaW5nCisJQ09ORklHX0ZXX0xPQURFUiAgICAgICAgIC0gSG90cGx1ZyBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQKKwlDT05GSUdfSTJDICAgICAgICAgICAgICAgLSBJMkMgc3VwcG9ydAorCUNPTkZJR19WSURFT19ERVYgICAgICAgICAtIFZpZGVvIEZvciBMaW51eAorCUNPTkZJR19TT1VORCAgICAgICAgICAgICAtIFNvdW5kIGNhcmQgc3VwcG9ydAorCUNPTkZJR19TTkQgICAgICAgICAgICAgICAtIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorCUNPTkZJR19VU0IgICAgICAgICAgICAgICAtIFN1cHBvcnQgZm9yIEhvc3Qtc2lkZSBVU0IKKwlDT05GSUdfVVNCX0RFVklDRUZTICAgICAgLSBVU0IgZGV2aWNlIGZpbGVzeXN0ZW0KKwlDT05GSUdfVVNCX0VIQ0lfSENEICAgICAgLSBFSENJIEhDRCAoVVNCIDIuMCkgc3VwcG9ydAogCiBBZGRpdGlvbmFsbHksIHRvIHVzZSB0aGUgZXhhbXBsZSBhcHBsaWNhdGlvbiwgdGhlIGZvbGxvd2luZyBvcHRpb25zIG5lZWQgdG8KIGJlIGVuYWJsZWQgaW4gdGhlIEFMU0Egc2VjdGlvbjoKIAotICAgICAgICBDT05GSUdfU05EX01JWEVSX09TUyAgICAgLSBPU1MgTWl4ZXIgQVBJCi0gICAgICAgIENPTkZJR19TTkRfUENNX09TUyAgICAgICAtIE9TUyBQQ00gKGRpZ2l0YWwgYXVkaW8pIEFQSQorCUNPTkZJR19TTkRfTUlYRVJfT1NTICAgICAtIE9TUyBNaXhlciBBUEkKKwlDT05GSUdfU05EX1BDTV9PU1MgICAgICAgLSBPU1MgUENNIChkaWdpdGFsIGF1ZGlvKSBBUEkKIAogVGhlIGhvdHBsdWcgc2NyaXB0cywgYWxvbmcgd2l0aCB0aGUgZnhsb2FkIHV0aWxpdHksIG11c3QgYWxzbyBiZSBpbnN0YWxsZWQuCiBUaGVzZSBzY3JpcHRzIGNhbiBiZSBvYnRhaW5lZCBmcm9tIDxodHRwOi8vbGludXgtaG90cGx1Zy5zb3VyY2Vmb3JnZS5uZXQvPi4KQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBNb3N0IHVzZXJzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIGRyaXZlciBieSBzaW1wbHkgcnVubmluZzoKIAotICAgICAgICAkIG1ha2UKKwkkIG1ha2UKIAogaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIGRyaXZlciBraXQuICBGaXJzdCB0aGUga2VybmVsIG1vZHVsZXMKIHdpbGwgYmUgYnVpbHQsIGZvbGxvd2VkIGJ5IHRoZSBleGFtcGxlIGFwcGxpY2F0aW9ucy4KQEAgLTExNywxMiArMTE3LDEyIEBACiBvdGhlciB0aGFuIHRoZSBjdXJyZW50bHktcnVubmluZyBrZXJuZWwsIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgbmVlZAogdG8gYmUgcGFzc2VkIHRvIG1ha2UgdG8gc3BlY2lmeSB0aGUgYXBwcm9wcmlhdGUga2VybmVsIHNvdXJjZSBkaXJlY3Rvcnk6CiAKLSAgICAgICAgJCBtYWtlIEtFUk5FTFNSQz0vdXNyL3NyYy9saW51eC0yLjYuMTAtY3VzdG9tMworCSQgbWFrZSBLRVJORUxTUkM9L3Vzci9zcmMvbGludXgtMi42LjEwLWN1c3RvbTMKIAogT25jZSB0aGUgY29tcGlsZSBjb21wbGV0ZXMsIHRoZSBkcml2ZXIgYW5kIGZpcm13YXJlIGZpbGVzIHNob3VsZCBiZQogaW5zdGFsbGVkIGJ5IHJ1bm5pbmc6CiAKLSAgICAgICAgJCBtYWtlIGluc3RhbGwKKwkkIG1ha2UgaW5zdGFsbAogCiBUaGUga2VybmVsIG1vZHVsZXMgd2lsbCBiZSBwbGFjZWQgaW4gIi9saWIvbW9kdWxlcy88S0VSTkVMIFZFUlNJT04+L2V4dHJhIgogYW5kIHRoZSBmaXJtd2FyZSBmaWxlcyB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgYXBwcm9wcmlhdGUgaG90cGx1ZyBmaXJtd2FyZQpAQCAtMjAwLDcgKzIwMCw3IEBACiBUbyB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24sCiBleGVjdXRlOgogCi0gICAgICAgICQgbW9kcHJvYmUgLWMgfCBncmVwIHdpcy1zb255LXR1bmVyCisJJCBtb2Rwcm9iZSAtYyB8IGdyZXAgd2lzLXNvbnktdHVuZXIKIAogSWYgdGhlIGNvbmZpZ3VyYXRpb24gbGluZSBhcHBlYXJzLCB0aGVuIG1vZHByb2JlIHdpbGwgcGFzcyB0aGUgcGFyYW1ldGVycwogY29ycmVjdGx5IHRoZSBuZXh0IHRpbWUgdGhlIHdpcy1zb255LXR1bmVyIG1vZHVsZSBpcyBsb2FkZWQgaW50byB0aGUKQEAgLTIyMyw3ICsyMjMsNyBAQAogaGFyZHdhcmUgYW5kIHdpbGwgcmVjb3JkIHZpZGVvIGFuZCBhdWRpbyB0byBhbiBBVkkgZmlsZSBmb3IgYSBzcGVjaWZpZWQKIG51bWJlciBvZiBzZWNvbmRzLiAgRm9yIGV4YW1wbGU6CiAKLSAgICAgICAgJCBhcHBzL2dvcmVjb3JkIC1kdXJhdGlvbiA2MCBjYXB0dXJlLmF2aQorCSQgYXBwcy9nb3JlY29yZCAtZHVyYXRpb24gNjAgY2FwdHVyZS5hdmkKIAogSWYgdGhpcyBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdWNjZXNzZnVsbHkgcmVjb3JkIGFuIEFWSSBmaWxlLCB0aGUgZXJyb3IKIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGdvcmVjb3JkIGFuZCByZWNvcmRlZCBpbiB0aGUgc3lzdGVtIGxvZyAodXN1YWxseSBpbgpAQCAtMjg2LDM1ICsyODYsMzUgQEAKIAogICAgIEZpZWxkcyBpbiBzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zOgogCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBpbiBlYWNoCi0gICAgICAgICAgZ29wX3NpemUgICAgICAgICAgICAgICAgICAgR3JvdXAgT2YgUGljdHVyZXM7IGkuZS4gdGhlIG1heGltdW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgZnJhbWVzIG1pbnVzIG9uZSBiZXR3ZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBrZXkgZnJhbWUuCisJX191MzIgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIGluIGVhY2gKKwkgIGdvcF9zaXplICAgICAgICAgICAgICAgICAgIEdyb3VwIE9mIFBpY3R1cmVzOyBpLmUuIHRoZSBtYXhpbXVtCisJCQkJICAgICBudW1iZXIgb2YgZnJhbWVzIG1pbnVzIG9uZSBiZXR3ZWVuCisJCQkJICAgICBlYWNoIGtleSBmcmFtZS4KIAotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZXF1ZW50aWFsCi0gICAgICAgICAgbWF4X2JfZnJhbWVzICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbGx5LXByZWRpY3RlZCBmcmFtZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEItZnJhbWVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4pCisJX191MzIgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2VxdWVudGlhbAorCSAgbWF4X2JfZnJhbWVzICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbGx5LXByZWRpY3RlZCBmcmFtZXMuCisJCQkJICAgICAoQi1mcmFtZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLikKIAotICAgICAgICBlbnVtIGdvNzAwN19hc3BlY3RfcmF0aW8gICAgIFRoZSBhc3BlY3QgcmF0aW8gdG8gYmUgZW5jb2RlZCBpbiB0aGUKLSAgICAgICAgICBhc3BlY3RfcmF0aW8gICAgICAgICAgICAgICBtZXRhLWRhdGEgb2YgdGhlIGNvbXByZXNzZWQgZm9ybWF0LgorCWVudW0gZ283MDA3X2FzcGVjdF9yYXRpbyAgICAgVGhlIGFzcGVjdCByYXRpbyB0byBiZSBlbmNvZGVkIGluIHRoZQorCSAgYXNwZWN0X3JhdGlvICAgICAgICAgICAgICAgbWV0YS1kYXRhIG9mIHRoZSBjb21wcmVzc2VkIGZvcm1hdC4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob2ljZXMgYXJlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19BU1BFQ1RfUkFUSU9fMV8xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT180XzNfTlRTQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX1BBTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT18xNl85X1BBTAorCQkJCSAgICAgQ2hvaWNlcyBhcmU6CisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fMV8xCisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX05UU0MKKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT180XzNfUEFMCisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDCisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9QQUwKIAotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIEJpdC13aXNlIE9SIG9mIGNvbnRyb2wgZmxhZ3MgKGJlbG93KQotICAgICAgICAgIGZsYWdzCisJX191MzIgICAgICAgICAgICAgICAgICAgICAgICBCaXQtd2lzZSBPUiBvZiBjb250cm9sIGZsYWdzIChiZWxvdykKKwkgIGZsYWdzCiAKICAgICBGbGFncyBpbiBzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zOgogCi0gICAgICAgIEdPNzAwN19DT01QX0NMT1NFRF9HT1AgICAgICAgT25seSBwcm9kdWNlIHNlbGYtY29udGFpbmVkIEdPUHMsIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm9kdWNlIHN0cmVhbXMgYXBwcm9wcmlhdGUgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tIHNlZWtpbmcuCisJR083MDA3X0NPTVBfQ0xPU0VEX0dPUCAgICAgICBPbmx5IHByb2R1Y2Ugc2VsZi1jb250YWluZWQgR09QcywgdXNlZAorCQkJCSAgICAgdG8gcHJvZHVjZSBzdHJlYW1zIGFwcHJvcHJpYXRlIGZvcgorCQkJCSAgICAgcmFuZG9tIHNlZWtpbmcuCiAKLSAgICAgICAgR083MDA3X0NPTVBfT01JVF9TRVFfSEVBREVSICBPbWl0IHRoZSBzdHJlYW0gc2VxdWVuY2UgaGVhZGVyLgorCUdPNzAwN19DT01QX09NSVRfU0VRX0hFQURFUiAgT21pdCB0aGUgc3RyZWFtIHNlcXVlbmNlIGhlYWRlci4KIAogCiAgIEdPNzAwN0lPQ19TX01QRUdfUEFSQU1TLCBHTzcwMDdJT0NfR19NUEVHX1BBUkFNUwpAQCAtMzM3LDU2ICszMzcsNTYgQEAKIAogICAgIEZpZWxkcyBpbiBzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zOgogCi0gICAgICAgIGVudW0gZ283MDA3X21wZWdfdmlkZW9fc3RhbmRhcmQKLSAgICAgICAgICBtcGVnX3ZpZGVvX3N0YW5kYXJkICAgICAgICBUaGUgTVBFRyB2aWRlbyBzdGFuZGFyZCBpbiB3aGljaCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzIHRoZSB2aWRlby4KKwllbnVtIGdvNzAwN19tcGVnX3ZpZGVvX3N0YW5kYXJkCisJICBtcGVnX3ZpZGVvX3N0YW5kYXJkICAgICAgICBUaGUgTVBFRyB2aWRlbyBzdGFuZGFyZCBpbiB3aGljaCB0bworCQkJCSAgICAgY29tcHJlc3MgdGhlIHZpZGVvLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvaWNlcyBhcmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUdfVklERU9fTVBFRzEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFR19WSURFT19NUEVHMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHX1ZJREVPX01QRUc0CisJCQkJICAgICBDaG9pY2VzIGFyZToKKwkJCQkJR083MDA3X01QRUdfVklERU9fTVBFRzEKKwkJCQkJR083MDA3X01QRUdfVklERU9fTVBFRzIKKwkJCQkJR083MDA3X01QRUdfVklERU9fTVBFRzQKIAotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIEJpdC13aXNlIE9SIG9mIGNvbnRyb2wgZmxhZ3MgKGJlbG93KQotICAgICAgICAgIGZsYWdzCisJX191MzIgICAgICAgICAgICAgICAgICAgICAgICBCaXQtd2lzZSBPUiBvZiBjb250cm9sIGZsYWdzIChiZWxvdykKKwkgIGZsYWdzCiAKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvZmlsZSBhbmQgbGV2ZWwgaW5kaWNhdGlvbiB0byBiZQotICAgICAgICAgIHBhbGkgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlZCBpbiB0aGUgc2VxdWVuY2UgaGVhZGVyLiAgVGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9ubHkgdXNlZCBhcyBhbiBpbmRpY2F0b3IgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlciwgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgTVBFRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHVzZWQgaW4gdGhlIHZpZGVvIHN0cmVhbS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgdmFsaWQgZm9yIE1QRUcxLgorCV9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByb2ZpbGUgYW5kIGxldmVsIGluZGljYXRpb24gdG8gYmUKKwkgIHBhbGkgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlZCBpbiB0aGUgc2VxdWVuY2UgaGVhZGVyLiAgVGhpcworCQkJCSAgICAgaXMgb25seSB1c2VkIGFzIGFuIGluZGljYXRvciB0byB0aGUKKwkJCQkgICAgIGRlY29kZXIsIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIE1QRUcKKwkJCQkgICAgIGZlYXR1cmVzIHVzZWQgaW4gdGhlIHZpZGVvIHN0cmVhbS4KKwkJCQkgICAgIE5vdCB2YWxpZCBmb3IgTVBFRzEuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9pY2VzIGZvciBNUEVHMiBhcmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUcyX1BST0ZJTEVfTUFJTl9NQUlOCisJCQkJICAgICBDaG9pY2VzIGZvciBNUEVHMiBhcmU6CisJCQkJCUdPNzAwN19NUEVHMl9QUk9GSUxFX01BSU5fTUFJTgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvaWNlcyBmb3IgTVBFRzQgYXJlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0w0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0w1CisJCQkJICAgICBDaG9pY2VzIGZvciBNUEVHNCBhcmU6CisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDAKKwkJCQkJR083MDA3X01QRUc0X1BST0ZJTEVfU19MMQorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wyCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDMKKwkJCQkJR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMQorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wyCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDMKKwkJCQkJR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MNAorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMAorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMQorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMgorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMworCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNAorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNQogCiAgICAgRmxhZ3MgaW4gc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtczoKIAotICAgICAgICBHTzcwMDdfTVBFR19GT1JDRV9EVkRfTU9ERSAgIEZvcmNlIGFsbCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHJhdGUgY29udHJvbCBzZXR0aW5ncyB0byBjb21wbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIERWRCBNUEVHMiBzdHJlYW0gcmVxdWlyZW1lbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3ZlcnJpZGVzIG1vc3QgY29tcHJlc3Npb24gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cmF0ZSBzZXR0aW5ncyEKKwlHTzcwMDdfTVBFR19GT1JDRV9EVkRfTU9ERSAgIEZvcmNlIGFsbCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFuZAorCQkJCSAgICAgYml0cmF0ZSBjb250cm9sIHNldHRpbmdzIHRvIGNvbXBseQorCQkJCSAgICAgd2l0aCBEVkQgTVBFRzIgc3RyZWFtIHJlcXVpcmVtZW50cy4KKwkJCQkgICAgIFRoaXMgb3ZlcnJpZGVzIG1vc3QgY29tcHJlc3Npb24gYW5kCisJCQkJICAgICBiaXRyYXRlIHNldHRpbmdzIQogCi0gICAgICAgIEdPNzAwN19NUEVHX09NSVRfR09QX0hFQURFUiAgT21pdCB0aGUgR09QIGhlYWRlci4KKwlHTzcwMDdfTVBFR19PTUlUX0dPUF9IRUFERVIgIE9taXQgdGhlIEdPUCBoZWFkZXIuCiAKLSAgICAgICAgR083MDA3X01QRUdfUkVQRUFUX1NFUUhFQURFUiBSZXBlYXQgdGhlIE1QRUcgc2VxdWVuY2UgaGVhZGVyIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YXJ0IG9mIGVhY2ggR09QLgorCUdPNzAwN19NUEVHX1JFUEVBVF9TRVFIRUFERVIgUmVwZWF0IHRoZSBNUEVHIHNlcXVlbmNlIGhlYWRlciBhdAorCQkJCSAgICAgdGhlIHN0YXJ0IG9mIGVhY2ggR09QLgogCiAKICAgR083MDA3SU9DX1NfQklUUkFURSwgR083MDA3SU9DX0dfQklUUkFURQpAQCAtNDA0LDcgKzQwNCw3IEBACiAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgIEluc3RhbGxpbmcgdGhlIFdJUyBQQ0kgVm95YWdlciBEcml2ZXIKKwkJICAgSW5zdGFsbGluZyB0aGUgV0lTIFBDSSBWb3lhZ2VyIERyaXZlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBXSVMgUENJIFZveWFnZXIgZHJpdmVyIHJlcXVpcmVzIHNldmVyYWwgcGF0Y2hlcyB0byB0aGUgTGludXggMi42LjExLngKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwppbmRleCAxNzA2ZmJmLi44Yzg1YTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCkBAIC0yMSwxMiArMjEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgInMyMjUwLWxvYWRlci5oIgogI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCiAjaW5jbHVkZSAid2lzLWkyYy5oIgogCi1leHRlcm4gaW50IHMyMjUwbG9hZGVyX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBzMjI1MGxvYWRlcl9jbGVhbnVwKHZvaWQpOwotCiAjZGVmaW5lIFRMVjMyMF9BRERSRVNTICAgICAgMHgzNAogI2RlZmluZSBWUFgzMjJfQUREUl9BTkFMT0dDT05UUk9MMQkweDAyCiAjZGVmaW5lIFZQWDMyMl9BRERSX0JSSUdIVE5FU1MwCQkweDAxMjcKQEAgLTM0LDcgKzMyLDcgQEAKICNkZWZpbmUgVlBYMzIyX0FERFJfQ09OVFJBU1QwCQkweDAxMjgKICNkZWZpbmUgVlBYMzIyX0FERFJfQ09OVFJBU1QxCQkweDAxMzIKICNkZWZpbmUgVlBYMzIyX0FERFJfSFVFCQkJMHgwMGRjCi0jZGVmaW5lIFZQWDMyMl9BRERSX1NBVAkgCSAgICAgICAgMHgwMDMwCisjZGVmaW5lIFZQWDMyMl9BRERSX1NBVAkJCTB4MDAzMAogCiBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCB7CiAJdW5zaWduZWQgaW50IGZsYWdzOwpAQCAtNDMsNyArNDEsNyBAQAogCiBzdHJ1Y3QgZ283MDA3X3VzYiB7CiAJc3RydWN0IGdvNzAwN191c2JfYm9hcmQgKmJvYXJkOwotCXN0cnVjdCBzZW1hcGhvcmUgaTJjX2xvY2s7CisJc3RydWN0IG11dGV4IGkyY19sb2NrOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJc3RydWN0IHVyYiAqdmlkZW9fdXJic1s4XTsKIAlzdHJ1Y3QgdXJiICphdWRpb191cmJzWzhdOwpAQCAtMTE0LDcgKzExMiw3IEBACiB9OwogCiBzdHJ1Y3QgczIyNTAgewotCWludCBzdGQ7CisJdjRsMl9zdGRfaWQgc3RkOwogCWludCBpbnB1dDsKIAlpbnQgYnJpZ2h0bmVzczsKIAlpbnQgY29udHJhc3Q7CkBAIC0xNjUsNyArMTYzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl1c2IgPSBnby0+aHBpX2NvbnRleHQ7Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgIT0gMCkgeworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVzYi0+aTJjX2xvY2spICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaTJjIGxvY2sgZmFpbGVkXG4iKTsKIAkJa2ZyZWUoYnVmKTsKIAkJcmV0dXJuIC1FSU5UUjsKQEAgLTE3NSw3ICsxNzMsNyBAQAogCQkJCSAgICAgICBidWYsCiAJCQkJICAgICAgIDE2LCAxKTsKIAotCXVwKCZ1c2ItPmkyY19sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYi0+aTJjX2xvY2spOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjAzLDE5ICsyMDEsMjMgQEAKIAltZW1zZXQoYnVmLCAweGNkLCA2KTsKIAogCXVzYiA9IGdvLT5ocGlfY29udGV4dDsKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ1c2ItPmkyY19sb2NrKSAhPSAwKSB7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgIT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJpMmMgbG9jayBmYWlsZWRcbiIpOworCQlrZnJlZShidWYpOwogCQlyZXR1cm4gLUVJTlRSOwogCX0KLQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg1NywgYWRkciwgdmFsLCBidWYsIDE2LCAxKSA8IDApCisJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4NTcsIGFkZHIsIHZhbCwgYnVmLCAxNiwgMSkgPCAwKSB7CisJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiAtRUZBVUxUOworCX0KIAotCXVwKCZ1c2ItPmkyY19sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYi0+aTJjX2xvY2spOwogCWlmIChidWZbMF0gPT0gMCkgewogCQl1bnNpZ25lZCBpbnQgc3ViYWRkciwgdmFsX3JlYWQ7CiAKIAkJc3ViYWRkciA9IChidWZbNF0gPDwgOCkgKyBidWZbNV07CiAJCXZhbF9yZWFkID0gKGJ1ZlsyXSA8PCA4KSArIGJ1ZlszXTsKKwkJa2ZyZWUoYnVmKTsKIAkJaWYgKHZhbF9yZWFkICE9IHZhbCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaW52YWxpZCBmcCB3cml0ZSAleCAleFxuIiwKIAkJCSAgICAgICB2YWxfcmVhZCwgdmFsKTsKQEAgLTIyNiw4ICsyMjgsMTAgQEAKIAkJCSAgICAgICBzdWJhZGRyLCBhZGRyKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJa2ZyZWUoYnVmKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCiAJLyogc2F2ZSBsYXN0IDEyYiB2YWx1ZSAqLwogCWlmIChhZGRyID09IDB4MTJiKQpAQCAtMjM2LDYgKzI0MCw0NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJlYWRfcmVnX2ZwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyLCB1MTYgKnZhbCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiOworCXU4ICpidWY7CisKKwlpZiAoZ28gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZ28tPnN0YXR1cyA9PSBTVEFUVVNfU0hVVERPV04pCisJCXJldHVybiAtRUJVU1k7CisKKwlidWYgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKKworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKworCisJbWVtc2V0KGJ1ZiwgMHhjZCwgNik7CisJdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnVzYi0+aTJjX2xvY2spICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaTJjIGxvY2sgZmFpbGVkXG4iKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FSU5UUjsKKwl9CisJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4NTgsIGFkZHIsIDAsIGJ1ZiwgMTYsIDEpIDwgMCkgeworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJdXAoJnVzYi0+aTJjX2xvY2spOworCisJKnZhbCA9IChidWZbMF0gPDwgOCkgfCBidWZbMV07CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiAwOworfQorCisKIHN0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKIHsKIAlpbnQgaTsKQEAgLTM1MCwxNCArMzkzLDQyIEBACiAJewogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwogCQlpbnQgdmFsdWUxOworCQl1MTYgb2xkdmFsdWU7CiAKIAkJc3dpdGNoIChjdHJsLT5pZCkgewogCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJzMjI1MDogZnV0dXJlIHNldHRpbmdcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMDApCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMTAwOworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCQl2YWx1ZTEgPSAoZGVjLT5icmlnaHRuZXNzIC0gNTApICogMjU1IC8gMTAwOworCQkJcmVhZF9yZWdfZnAoY2xpZW50LCBWUFgzMjJfQUREUl9CUklHSFRORVNTMCwgJm9sZHZhbHVlKTsKKwkJCXdyaXRlX3JlZ19mcChjbGllbnQsIFZQWDMyMl9BRERSX0JSSUdIVE5FU1MwLAorCQkJCSAgICAgdmFsdWUxIHwgKG9sZHZhbHVlICYgfjB4ZmYpKTsKKwkJCXJlYWRfcmVnX2ZwKGNsaWVudCwgVlBYMzIyX0FERFJfQlJJR0hUTkVTUzEsICZvbGR2YWx1ZSk7CisJCQl3cml0ZV9yZWdfZnAoY2xpZW50LCBWUFgzMjJfQUREUl9CUklHSFRORVNTMSwKKwkJCQkgICAgIHZhbHVlMSB8IChvbGR2YWx1ZSAmIH4weGZmKSk7CisJCQl3cml0ZV9yZWdfZnAoY2xpZW50LCAweDE0MCwgMHg2MCk7CisJCQlicmVhazsKIAkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCXByaW50ayhLRVJOX0lORk8gInMyMjUwOiBmdXR1cmUgc2V0dGluZ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEwMCkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMTAwOworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXZhbHVlMSA9IGRlYy0+Y29udHJhc3QgKiAweDQwIC8gMTAwOworCQkJaWYgKHZhbHVlMSA+IDB4M2YpCisJCQkJdmFsdWUxID0gMHgzZjsgLyogbWF4ICovCisJCQlyZWFkX3JlZ19mcChjbGllbnQsIFZQWDMyMl9BRERSX0NPTlRSQVNUMCwgJm9sZHZhbHVlKTsKKwkJCXdyaXRlX3JlZ19mcChjbGllbnQsIFZQWDMyMl9BRERSX0NPTlRSQVNUMCwKKwkJCQkgICAgIHZhbHVlMSB8IChvbGR2YWx1ZSAmIH4weDNmKSk7CisJCQlyZWFkX3JlZ19mcChjbGllbnQsIFZQWDMyMl9BRERSX0NPTlRSQVNUMSwgJm9sZHZhbHVlKTsKKwkJCXdyaXRlX3JlZ19mcChjbGllbnQsIFZQWDMyMl9BRERSX0NPTlRSQVNUMSwKKwkJCQkgICAgIHZhbHVlMSB8IChvbGR2YWx1ZSAmIH4weDNmKSk7CisJCQl3cml0ZV9yZWdfZnAoY2xpZW50LCAweDE0MCwgMHg2MCk7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQpAQCAtNTQxLDcgKzYxMiw3IEBACiAJZGVjLT5hdWRpb19pbnB1dCA9IDA7CiAJd3JpdGVfcmVnKGNsaWVudCwgMHgwOCwgMHgwMik7IC8qIExpbmUgSW4gKi8KIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnVzYi0+aTJjX2xvY2spID09IDApIHsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1c2ItPmkyY19sb2NrKSA9PSAwKSB7CiAJCWRhdGEgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAkJaWYgKGRhdGEgIT0gTlVMTCkgewogCQkJaW50IHJjOwpAQCAtNTYwLDcgKzYzMSw3IEBACiAJCQl9CiAJCQlrZnJlZShkYXRhKTsKIAkJfQotCQl1cCgmdXNiLT5pMmNfbG9jayk7CisJCW11dGV4X3VubG9jaygmdXNiLT5pMmNfbG9jayk7CiAJfQogCiAJcHJpbnRrKCJzMjI1MDogaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtbG9hZGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWxvYWRlci5jCmluZGV4IGJiMjIzNDcuLmQ3YmY4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtbG9hZGVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1sb2FkZXIuYwpAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBNQVhfREVWSUNFUyAyNTYKIAogc3RhdGljIHBkZXZpY2VfZXh0ZW5zaW9uX3QgczIyNTBfZGV2X3RhYmxlW01BWF9ERVZJQ0VTXTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKHMyMjUwX2Rldl90YWJsZV9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHMyMjUwX2Rldl90YWJsZV9tdXRleCk7CiAKICNkZWZpbmUgdG9fczIyNTBsb2FkZXJfZGV2X2NvbW1vbihkKSBjb250YWluZXJfb2YoZCwgZGV2aWNlX2V4dGVuc2lvbl90LCBrcmVmKQogc3RhdGljIHZvaWQgczIyNTBsb2FkZXJfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQpAQCAtNjcsNyArNjcsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGhhbmRsZSBtdWx0aXBsZSBjb25maWdcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCWRvd24oJnMyMjUwX2Rldl90YWJsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmczIyNTBfZGV2X3RhYmxlX211dGV4KTsKIAogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IE1BWF9ERVZJQ0VTOyBtaW5vcisrKSB7CiAJCWlmIChzMjI1MF9kZXZfdGFibGVbbWlub3JdID09IE5VTEwpCkBAIC05Niw3ICs5Niw3IEBACiAKIAlrcmVmX2luaXQoJihzLT5rcmVmKSk7CiAKLQl1cCgmczIyNTBfZGV2X3RhYmxlX211dGV4KTsKKwltdXRleF91bmxvY2soJnMyMjUwX2Rldl90YWJsZV9tdXRleCk7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIFMyMjUwX0xPQURFUl9GSVJNV0FSRSwgJnVzYmRldi0+ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTEyOCw3ICsxMjgsNyBAQAogCXJldHVybiAwOwogCiBmYWlsZWQ6Ci0JdXAoJnMyMjUwX2Rldl90YWJsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzMjI1MF9kZXZfdGFibGVfbXV0ZXgpOwogZmFpbGVkMjoKIAlpZiAocykKIAkJa3JlZl9wdXQoJihzLT5rcmVmKSwgczIyNTBsb2FkZXJfZGVsZXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKaW5kZXggY2QxOWJlNi4uMDNjNGRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHc5OTAzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYwppbmRleCA2YzM0MjdiLi41MDZkY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYwpAQCAtMTExLDcgKzExMSw4IEBACiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDAyLCAweDQwIHwgKCppbnB1dCA8PCAxKSk7CiAJCWJyZWFrOwogCX0KLSNpZiAwICAgLyogVGhlIHNjYWxlciBvbiB0aGlzIHRoaW5nIHNlZW1zIHRvIGJlIGhvcnJpYmx5IGJyb2tlbiAqLworI2lmIDAKKwkvKiBUaGUgc2NhbGVyIG9uIHRoaXMgdGhpbmcgc2VlbXMgdG8gYmUgaG9ycmlibHkgYnJva2VuICovCiAJY2FzZSBERUNPREVSX1NFVF9SRVNPTFVUSU9OOgogCXsKIAkJc3RydWN0IHZpZGVvX2RlY29kZXJfcmVzb2x1dGlvbiAqcmVzID0gYXJnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCmluZGV4IDY2MGE5YzEuLjFmYTE4ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKQEAgLTM5LDE0ICszOSwxNCBAQAogRVhQT1JUX1NZTUJPTChpaW9fZGV2dCk7CiAKICNkZWZpbmUgSUlPX0RFVl9NQVggMjU2Ci1zdGF0aWMgY2hhciAqaWlvX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICppaW9fZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJpaW8vJXMiLCBkZXZfbmFtZShkZXYpKTsKIH0KIAogc3RydWN0IGNsYXNzIGlpb19jbGFzcyA9IHsKIAkubmFtZSA9ICJpaW8iLAotCS5ub2RlbmFtZSA9IGlpb19ub2RlbmFtZSwKKwkuZGV2bm9kZSA9IGlpb19kZXZub2RlLAogfTsKIEVYUE9SVF9TWU1CT0woaWlvX2NsYXNzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaAppbmRleCAzZjQ5OGY2Li45MGZkNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaApAQCAtMjA2MCw3ICsyMDYwLDcgQEAKICAgICBCT09MRUFOCQlBZGhvY0JHSm9pbmVkOwkJLy8gSW5kaWNhdGUgQWRob2MgQi9HIEpvaW4uCiAgICAgQk9PTEVBTgkJQWRob2MyME5Kb2luZWQ7CQkvLyBJbmRpY2F0ZSBBZGhvYyAyME1IeiBOIEpvaW4uCiAjZW5kaWYKLQkvLyBOZXcgZm9yIFdQQSwgd2luZG93cyB3YW50IHVzIHRvIHRvIGtlZXAgYXNzb2NpYXRpb24gaW5mb3JtYXRpb24gYW5kCisJLy8gTmV3IGZvciBXUEEsIHdpbmRvd3Mgd2FudCB1cyB0byBrZWVwIGFzc29jaWF0aW9uIGluZm9ybWF0aW9uIGFuZAogCS8vIEZpeGVkIElFcyBmcm9tIGxhc3QgYXNzb2NpYXRpb24gcmVzcG9uc2UKIAlORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTiAgICAgQXNzb2NJbmZvOwogCVVTSE9SVCAgICAgICBSZXFWYXJJRUxlbjsgICAgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIG5leHQgVklFIGluY2x1ZGUgRUlEICYgTGVuZ3RoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCmluZGV4IDEyZDQxNGQuLmJlOTllYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCkBAIC0yNTkxLDMgKzI1OTEsNCBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BTElBUygic3BpOmN4MzExMHgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnIGIvZHJpdmVycy90aGVybWFsL0tjb25maWcKaW5kZXggYTg2ZTk1Mi4uYmY3YzY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90aGVybWFsL0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAogY29uZmlnIFRIRVJNQUxfSFdNT04KIAlib29sICJIYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBUSEVSTUFMCiAJZGVwZW5kcyBvbiBIV01PTj15IHx8IEhXTU9OPVRIRVJNQUwKIAloZWxwCiAJICBUaGUgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIGRyaXZlcidzIGhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKaW5kZXggZGNkNDlmMS4uZWJkNzIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC0zOSw2ICszOSw3IEBACiAJZGVmYXVsdCB5IGlmIEFSQ0hfQVQ5MQogCWRlZmF1bHQgeSBpZiBBUkNIX1BOWDQwMDggJiYgSTJDCiAJZGVmYXVsdCB5IGlmIE1GRF9UQzYzOTNYQgorCWRlZmF1bHQgeSBpZiBBUkNIX1c5MFg5MDAKIAkjIFBQQzoKIAlkZWZhdWx0IHkgaWYgU1RCMDN4eHgKIAlkZWZhdWx0IHkgaWYgUFBDX01QQzUyeHgKQEAgLTU4LDYgKzU5LDggQEAKIAlkZWZhdWx0IHkgaWYgUFBDXzgzeHgKIAlkZWZhdWx0IHkgaWYgU09DX0FVMTIwMAogCWRlZmF1bHQgeSBpZiBBUkNIX0lYUDRYWAorCWRlZmF1bHQgeSBpZiBBUkNIX1c5MFg5MDAKKwlkZWZhdWx0IHkgaWYgQVJDSF9BVDkxU0FNOUc0NQogCWRlZmF1bHQgUENJCiAKICMgQVJNIFNBMTExMSBjaGlwcyBoYXZlIGEgbm9uLVBDSSBiYXNlZCAiT0hDSS1jb21wYXRpYmxlIiBVU0IgaG9zdCBpbnRlcmZhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IDE5Y2I3ZDUuLmJlM2M5YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiBvYmotJChDT05GSUdfVVNCX0ZIQ0lfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9YSENJX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfU0w4MTFfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfVTEzMl9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfSFdBX0hDRCkJKz0gaG9zdC8KQEAgLTM5LDYgKzQwLDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMKQkrPSBzZXJpYWwvCiAKIG9iai0kKENPTkZJR19VU0IpCQkrPSBtaXNjLworb2JqLXkJCQkJKz0gZWFybHkvCiAKIG9iai0kKENPTkZJR19VU0JfQVRNKQkJKz0gYXRtLwogb2JqLSQoQ09ORklHX1VTQl9TUEVFRFRPVUNIKQkrPSBhdG0vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggMmJmYzQxZS4uZTM4NjFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02MDksNiArNjEwLDcgQEAKIAlhY20tPnRocm90dGxlID0gMDsKIAogCXRhc2tsZXRfc2NoZWR1bGUoJmFjbS0+dXJiX3Rhc2spOworCXNldF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmYWNtLT5wb3J0LmZsYWdzKTsKIAlydiA9IHR0eV9wb3J0X2Jsb2NrX3RpbF9yZWFkeSgmYWNtLT5wb3J0LCB0dHksIGZpbHApOwogZG9uZToKIAltdXRleF91bmxvY2soJmFjbS0+bXV0ZXgpOwpAQCAtODU4LDEwICs4NjAsNyBAQAogCWlmICghQUNNX1JFQURZKGFjbSkpCiAJCXJldHVybjsKIAotCS8qIEZJWE1FOiBOZWVkcyB0byBzdXBwb3J0IHRoZSB0dHlfYmF1ZCBpbnRlcmZhY2UgKi8KLQkvKiBGSVhNRTogQnJva2VuIG9uIHNwYXJjICovCi0JbmV3bGluZS5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMnAoYWNtX3R0eV9zcGVlZCArCi0JCSh0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQgJiB+Q0JBVURFWCkgKyAodGVybWlvcy0+Y19jZmxhZyAmIENCQVVERVggPyAxNSA6IDApKTsKKwluZXdsaW5lLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSkpOwogCW5ld2xpbmUuYkNoYXJGb3JtYXQgPSB0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCID8gMiA6IDA7CiAJbmV3bGluZS5iUGFyaXR5VHlwZSA9IHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIgPwogCQkJCSh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REID8gMSA6IDIpICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwppbmRleCBiYTU4OWQ0Li4zZTU2NGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCkBAIC0zMTMsOCArMzEzLDEzIEBACiAJciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXNjLT5pbnRmKTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0bnA7Ci0JciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXNjLT53YWl0LCAhdGVzdF9iaXQoV0RNX0lOX1VTRSwKLQkJCQkJCQkgICAmZGVzYy0+ZmxhZ3MpKTsKKworCWlmICghZmlsZS0+Zl9mbGFncyAmJiBPX05PTkJMT0NLKQorCQlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRlc2MtPndhaXQsICF0ZXN0X2JpdChXRE1fSU5fVVNFLAorCQkJCQkJCQkmZGVzYy0+ZmxhZ3MpKTsKKwllbHNlCisJCWlmICh0ZXN0X2JpdChXRE1fSU5fVVNFLCAmZGVzYy0+ZmxhZ3MpKQorCQkJciA9IC1FQUdBSU47CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtMzc3LDcgKzM4Miw3IEBACiBzdGF0aWMgc3NpemVfdCB3ZG1fcmVhZAogKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgcnYsIGNudHI7CisJaW50IHJ2LCBjbnRyID0gMDsKIAlpbnQgaSA9IDA7CiAJc3RydWN0IHdkbV9kZXZpY2UgKmRlc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKQEAgLTM4OSwxMCArMzk0LDIzIEBACiAJaWYgKGRlc2MtPmxlbmd0aCA9PSAwKSB7CiAJCWRlc2MtPnJlYWQgPSAwOwogcmV0cnk6CisJCWlmICh0ZXN0X2JpdChXRE1fRElTQ09OTkVDVElORywgJmRlc2MtPmZsYWdzKSkgeworCQkJcnYgPSAtRU5PREVWOworCQkJZ290byBlcnI7CisJCX0KIAkJaSsrOwotCQlydiA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXNjLT53YWl0LAotCQkJCQkgICAgICB0ZXN0X2JpdChXRE1fUkVBRCwgJmRlc2MtPmZsYWdzKSk7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJaWYgKCF0ZXN0X2JpdChXRE1fUkVBRCwgJmRlc2MtPmZsYWdzKSkgeworCQkJCXJ2ID0gY250ciA/IGNudHIgOiAtRUFHQUlOOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJcnYgPSAwOworCQl9IGVsc2UgeworCQkJcnYgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVzYy0+d2FpdCwKKwkJCQl0ZXN0X2JpdChXRE1fUkVBRCwgJmRlc2MtPmZsYWdzKSk7CisJCX0KIAorCQkvKiBtYXkgaGF2ZSBoYXBwZW5lZCB3aGlsZSB3ZSBzbGVwdCAqLwogCQlpZiAodGVzdF9iaXQoV0RNX0RJU0NPTk5FQ1RJTkcsICZkZXNjLT5mbGFncykpIHsKIAkJCXJ2ID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyOwpAQCAtNDQ4LDcgKzQ2Niw3IEBACiAKIGVycjoKIAltdXRleF91bmxvY2soJmRlc2MtPnJsb2NrKTsKLQlpZiAocnYgPCAwKQorCWlmIChydiA8IDAgJiYgcnYgIT0gLUVBR0FJTikKIAkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAid2RtX3JlYWQ6IGV4aXQgZXJyb3JcbiIpOwogCXJldHVybiBydjsKIH0KQEAgLTUwNiw4ICs1MjQsNiBAQAogCWRlc2MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCWlmICh0ZXN0X2JpdChXRE1fRElTQ09OTkVDVElORywgJmRlc2MtPmZsYWdzKSkKIAkJZ290byBvdXQ7Ci0KLQk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGVzYzsKIAogCXJ2ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRlc2MtPmludGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKaW5kZXggMjZjMDlmMC4uOWJjMTEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC0xMDU3LDE0ICsxMDU3LDE0IEBACiAJLnJlbGVhc2UgPQl1c2JscF9yZWxlYXNlLAogfTsKIAotc3RhdGljIGNoYXIgKnVzYmxwX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICp1c2JscF9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInVzYi8lcyIsIGRldl9uYW1lKGRldikpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNibHBfY2xhc3MgPSB7CiAJLm5hbWUgPQkJImxwJWQiLAotCS5ub2RlbmFtZSA9CXVzYmxwX25vZGVuYW1lLAorCS5kZXZub2RlID0JdXNibHBfZGV2bm9kZSwKIAkuZm9wcyA9CQkmdXNibHBfZm9wcywKIAkubWlub3JfYmFzZSA9CVVTQkxQX01JTk9SX0JBU0UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCBiMDlhNTI3Li4zMzNlZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtNTcsNyArNTcsOSBAQAogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGNhcGFiaWxpdGllcyBmb3IgdGhlIGRldmljZQotICogU2VlIHNlY3Rpb24gNC4yLjEuOCBvZiB0aGUgVVNCVE1DIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgKiBTZWUgc2VjdGlvbiA0LjIuMS44IG9mIHRoZSBVU0JUTUMgc3BlY2lmaWNhdGlvbiwKKyAqIGFuZCBzZWN0aW9uIDQuMi4yIG9mIHRoZSBVU0JUTUMgdXNiNDg4IHN1YmNsYXNzCisgKiBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgogICovCiBzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMgewogCV9fdTggaW50ZXJmYWNlX2NhcGFiaWxpdGllczsKQEAgLTg2LDYgKzg4LDggQEAKIAlib29sIFRlcm1DaGFyRW5hYmxlZDsKIAlib29sIGF1dG9fYWJvcnQ7CiAKKwlib29sIHpvbWJpZTsgLyogZmQgb2YgZGlzY29ubmVjdGVkIGRldmljZSAqLworCiAJc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzCWNhcGFiaWxpdGllczsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogCXN0cnVjdCBtdXRleCBpb19tdXRleDsJLyogb25seSBvbmUgaS9vIGZ1bmN0aW9uIHJ1bm5pbmcgYXQgYSB0aW1lICovCkBAIC0zNjcsMTMgKzM3MSwxMyBAQAogewogCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXVuc2lnbmVkIGxvbmcgaW50IG5fY2hhcmFjdGVyczsKKwl1MzIgbl9jaGFyYWN0ZXJzOwogCXU4ICpidWZmZXI7CiAJaW50IGFjdHVhbDsKLQlpbnQgZG9uZTsKLQlpbnQgcmVtYWluaW5nOworCXNpemVfdCBkb25lOworCXNpemVfdCByZW1haW5pbmc7CiAJaW50IHJldHZhbDsKLQlpbnQgdGhpc19wYXJ0OworCXNpemVfdCB0aGlzX3BhcnQ7CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCiAJZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKQEAgLTM4NCw2ICszODgsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltdXRleF9sb2NrKCZkYXRhLT5pb19tdXRleCk7CisJaWYgKGRhdGEtPnpvbWJpZSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQogCiAJcmVtYWluaW5nID0gY291bnQ7CiAJZG9uZSA9IDA7CkBAIC00MDEsMTAgKzQwOSwxMCBAQAogCQlidWZmZXJbMV0gPSBkYXRhLT5iVGFnOwogCQlidWZmZXJbMl0gPSB+KGRhdGEtPmJUYWcpOwogCQlidWZmZXJbM10gPSAwOyAvKiBSZXNlcnZlZCAqLwotCQlidWZmZXJbNF0gPSAodGhpc19wYXJ0IC0gMTIgLSAzKSAmIDI1NTsKLQkJYnVmZmVyWzVdID0gKCh0aGlzX3BhcnQgLSAxMiAtIDMpID4+IDgpICYgMjU1OwotCQlidWZmZXJbNl0gPSAoKHRoaXNfcGFydCAtIDEyIC0gMykgPj4gMTYpICYgMjU1OwotCQlidWZmZXJbN10gPSAoKHRoaXNfcGFydCAtIDEyIC0gMykgPj4gMjQpICYgMjU1OworCQlidWZmZXJbNF0gPSAodGhpc19wYXJ0KSAmIDI1NTsKKwkJYnVmZmVyWzVdID0gKCh0aGlzX3BhcnQpID4+IDgpICYgMjU1OworCQlidWZmZXJbNl0gPSAoKHRoaXNfcGFydCkgPj4gMTYpICYgMjU1OworCQlidWZmZXJbN10gPSAoKHRoaXNfcGFydCkgPj4gMjQpICYgMjU1OwogCQlidWZmZXJbOF0gPSBkYXRhLT5UZXJtQ2hhckVuYWJsZWQgKiAyOwogCQkvKiBVc2UgdGVybSBjaGFyYWN0ZXI/ICovCiAJCWJ1ZmZlcls5XSA9IGRhdGEtPlRlcm1DaGFyOwpAQCAtNDU1LDYgKzQ2MywyMiBAQAogCQkJICAgICAgIChidWZmZXJbNl0gPDwgMTYpICsKIAkJCSAgICAgICAoYnVmZmVyWzddIDw8IDI0KTsKIAorCQkvKiBFbnN1cmUgdGhlIGluc3RydW1lbnQgZG9lc24ndCBsaWUgYWJvdXQgaXQgKi8KKwkJaWYobl9jaGFyYWN0ZXJzID4gYWN0dWFsIC0gMTIpIHsKKwkJCWRldl9lcnIoZGV2LCAiRGV2aWNlIGxpZXMgYWJvdXQgbWVzc2FnZSBzaXplOiAldSA+ICVkXG4iLCBuX2NoYXJhY3RlcnMsIGFjdHVhbCAtIDEyKTsKKwkJCW5fY2hhcmFjdGVycyA9IGFjdHVhbCAtIDEyOworCQl9CisKKwkJLyogRW5zdXJlIHRoZSBpbnN0cnVtZW50IGRvZXNuJ3Qgc2VuZCBtb3JlIGJhY2sgdGhhbiByZXF1ZXN0ZWQgKi8KKwkJaWYobl9jaGFyYWN0ZXJzID4gdGhpc19wYXJ0KSB7CisJCQlkZXZfZXJyKGRldiwgIkRldmljZSByZXR1cm5zIG1vcmUgdGhhbiByZXF1ZXN0ZWQ6ICV6dSA+ICV6dVxuIiwgZG9uZSArIG5fY2hhcmFjdGVycywgZG9uZSArIHRoaXNfcGFydCk7CisJCQluX2NoYXJhY3RlcnMgPSB0aGlzX3BhcnQ7CisJCX0KKworCQkvKiBCb3VuZCBhbW91bnQgb2YgZGF0YSByZWNlaXZlZCBieSBhbW91bnQgb2YgZGF0YSByZXF1ZXN0ZWQgKi8KKwkJaWYgKG5fY2hhcmFjdGVycyA+IHRoaXNfcGFydCkKKwkJCW5fY2hhcmFjdGVycyA9IHRoaXNfcGFydDsKKwogCQkvKiBDb3B5IGJ1ZmZlciB0byB1c2VyIHNwYWNlICovCiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsgZG9uZSwgJmJ1ZmZlclsxMl0sIG5fY2hhcmFjdGVycykpIHsKIAkJCS8qIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGFuIGFkZHJlc3NpbmcgcHJvYmxlbSAqLwpAQCAtNDYzLDggKzQ4NywxMSBAQAogCQl9CiAKIAkJZG9uZSArPSBuX2NoYXJhY3RlcnM7Ci0JCWlmIChuX2NoYXJhY3RlcnMgPCBVU0JUTUNfU0laRV9JT0JVRkZFUikKKwkJLyogVGVybWluYXRlIGlmIGVuZC1vZi1tZXNzYWdlIGJpdCByZWNpZXZlZCBmcm9tIGRldmljZSAqLworCQlpZiAoKGJ1ZmZlcls4XSAmICAweDAxKSAmJiAoYWN0dWFsID49IG5fY2hhcmFjdGVycyArIDEyKSkKIAkJCXJlbWFpbmluZyA9IDA7CisJCWVsc2UKKwkJCXJlbWFpbmluZyAtPSBuX2NoYXJhY3RlcnM7CiAJfQogCiAJLyogVXBkYXRlIGZpbGUgcG9zaXRpb24gdmFsdWUgKi8KQEAgLTQ5Niw2ICs1MjMsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltdXRleF9sb2NrKCZkYXRhLT5pb19tdXRleCk7CisJaWYgKGRhdGEtPnpvbWJpZSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQogCiAJcmVtYWluaW5nID0gY291bnQ7CiAJZG9uZSA9IDA7CkBAIC03NjcsMjAgKzc5OCwyMSBAQAogCX0KIAogCWRldl9kYmcoZGV2LCAiR0VUX0NBUEFCSUxJVElFUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKLQlkZXZfZGJnKGRldiwgIkludGVyZmFjZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbNF0pOwotCWRldl9kYmcoZGV2LCAiRGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlcls1XSk7Ci0JZGV2X2RiZyhkZXYsICJVU0I0ODggaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlclsxNF0pOwotCWRldl9kYmcoZGV2LCAiVVNCNDg4IGRldmljZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbMTVdKTsKIAlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgewogCQlkZXZfZXJyKGRldiwgIkdFVF9DQVBBQklMSVRJRVMgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CiAJCXJ2ID0gLUVQRVJNOwogCQlnb3RvIGVycl9vdXQ7CiAJfQorCWRldl9kYmcoZGV2LCAiSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlcls0XSk7CisJZGV2X2RiZyhkZXYsICJEZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzVdKTsKKwlkZXZfZGJnKGRldiwgIlVTQjQ4OCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzE0XSk7CisJZGV2X2RiZyhkZXYsICJVU0I0ODggZGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlclsxNV0pOwogCiAJZGF0YS0+Y2FwYWJpbGl0aWVzLmludGVyZmFjZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbNF07CiAJZGF0YS0+Y2FwYWJpbGl0aWVzLmRldmljZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbNV07CiAJZGF0YS0+Y2FwYWJpbGl0aWVzLnVzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzID0gYnVmZmVyWzE0XTsKIAlkYXRhLT5jYXBhYmlsaXRpZXMudXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbMTVdOworCXJ2ID0gMDsKIAogZXJyX291dDoKIAlrZnJlZShidWZmZXIpOwpAQCAtOTI1LDYgKzk1NywxMCBAQAogCiAJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAltdXRleF9sb2NrKCZkYXRhLT5pb19tdXRleCk7CisJaWYgKGRhdGEtPnpvbWJpZSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIHNraXBfaW9fb25fem9tYmllOworCX0KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBVU0JUTUNfSU9DVExfQ0xFQVJfT1VUX0hBTFQ6CkBAIC05NTIsNiArOTg4LDcgQEAKIAkJYnJlYWs7CiAJfQogCitza2lwX2lvX29uX3pvbWJpZToKIAltdXRleF91bmxvY2soJmRhdGEtPmlvX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtOTk1LDYgKzEwMzIsNyBAQAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7CiAJa3JlZl9pbml0KCZkYXRhLT5rcmVmKTsKIAltdXRleF9pbml0KCZkYXRhLT5pb19tdXRleCk7CisJZGF0YS0+em9tYmllID0gMDsKIAogCS8qIEluaXRpYWxpemUgVVNCVE1DIGJUYWcgYW5kIG90aGVyIGZpZWxkcyAqLwogCWRhdGEtPmJUYWcJPSAxOwpAQCAtMTA2NSwxNCArMTEwMywzMCBAQAogCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNidG1jX2NsYXNzKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmY2FwYWJpbGl0eV9hdHRyX2dycCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmRhdGFfYXR0cl9ncnApOworCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKwlkYXRhLT56b21iaWUgPSAxOworCW11dGV4X3VubG9jaygmZGF0YS0+aW9fbXV0ZXgpOwogCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCB1c2J0bWNfZGVsZXRlKTsKIH0KIAorc3RhdGljIGludCB1c2J0bWNfc3VzcGVuZCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCS8qIHRoaXMgZHJpdmVyIGRvZXMgbm90IGhhdmUgcGVuZGluZyBVUkJzICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNidG1jX3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0bWNfZHJpdmVyID0gewogCS5uYW1lCQk9ICJ1c2J0bWMiLAogCS5pZF90YWJsZQk9IHVzYnRtY19kZXZpY2VzLAogCS5wcm9iZQkJPSB1c2J0bWNfcHJvYmUsCi0JLmRpc2Nvbm5lY3QJPSB1c2J0bWNfZGlzY29ubmVjdAorCS5kaXNjb25uZWN0CT0gdXNidG1jX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJPSB1c2J0bWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHVzYnRtY19yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1c2J0bWNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKaW5kZXggYTE2YzUzOC4uMGQzYWY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAllcC0+c3NfZXBfY29tcC0+ZXh0cmFsZW4gPSBpOwogCWJ1ZmZlciArPSBpOwogCXNpemUgLT0gaTsKLQlyZXR2YWwgPSBidWZmZXIgLSBidWZmZXJfc3RhcnQgKyBpOworCXJldHZhbCA9IGJ1ZmZlciAtIGJ1ZmZlcl9zdGFydDsKIAlpZiAobnVtX3NraXBwZWQgPiAwKQogCQlkZXZfZGJnKGRkZXYsICJza2lwcGVkICVkIGRlc2NyaXB0b3IlcyBhZnRlciAlc1xuIiwKIAkJCQludW1fc2tpcHBlZCwgcGx1cmFsKG51bV9za2lwcGVkKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCA0MjQ3ZWNjLi4xODFmNzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC01Miw2ICs1Miw3IEBACiAKICNpbmNsdWRlICJoY2QuaCIJLyogZm9yIHVzYmNvcmUgaW50ZXJuYWxzICovCiAjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAiaHViLmgiCiAKICNkZWZpbmUgVVNCX01BWEJVUwkJCTY0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfTUFYCQkJVVNCX01BWEJVUyAqIDEyOApAQCAtNzMsNiArNzQsNyBAQAogCXZvaWQgX191c2VyICpkaXNjY29udGV4dDsKIAl1bnNpZ25lZCBsb25nIGlmY2xhaW1lZDsKIAl1MzIgc2VjaWQ7CisJdTMyIGRpc2FibGVkX2J1bGtfZXBzOwogfTsKIAogc3RydWN0IGFzeW5jIHsKQEAgLTg3LDYgKzg5LDggQEAKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IHN0YXR1czsKIAl1MzIgc2VjaWQ7CisJdTggYnVsa19hZGRyOworCXU4IGJ1bGtfc3RhdHVzOwogfTsKIAogc3RhdGljIGludCB1c2Jmc19zbm9vcDsKQEAgLTk5LDExICsxMDMsMTUgQEAKIAkJCWRldl9pbmZvKGRldiAsIGZvcm1hdCAsICMjIGFyZyk7CVwKIAl9IHdoaWxlICgwKQogCitlbnVtIHNub29wX3doZW4geworCVNVQk1JVCwgQ09NUExFVEUKK307CisKICNkZWZpbmUgVVNCX0RFVklDRV9ERVYJCU1LREVWKFVTQl9ERVZJQ0VfTUFKT1IsIDApCiAKLQogI2RlZmluZQlNQVhfVVNCRlNfQlVGRkVSX1NJWkUJMTYzODQKIAorCiBzdGF0aWMgaW50IGNvbm5lY3RlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKIHsKIAlyZXR1cm4gKCFsaXN0X2VtcHR5KCZwcy0+bGlzdCkgJiYKQEAgLTMwMCwyNCArMzA4LDc5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHNub29wX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHZvaWQgX191c2VyICp1c2VydXJiKQorc3RhdGljIHZvaWQgc25vb3BfdXJiKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQl2b2lkIF9fdXNlciAqdXNlcnVyYiwgaW50IHBpcGUsIHVuc2lnbmVkIGxlbmd0aCwKKwkJaW50IHRpbWVvdXRfb3Jfc3RhdHVzLCBlbnVtIHNub29wX3doZW4gd2hlbikKIHsKLQl1bnNpZ25lZCBqOwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdGF0aWMgY29uc3QgY2hhciAqdHlwZXNbXSA9IHsiaXNvYyIsICJpbnQiLCAiY3RybCIsICJidWxrIn07CisJc3RhdGljIGNvbnN0IGNoYXIgKmRpcnNbXSA9IHsib3V0IiwgImluIn07CisJaW50IGVwOworCWNvbnN0IGNoYXIgKnQsICpkOwogCiAJaWYgKCF1c2Jmc19zbm9vcCkKIAkJcmV0dXJuOwogCi0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJkaXJlY3Rpb249JXNcbiIsCi0JCQl1c2JfdXJiX2Rpcl9pbih1cmIpID8gIklOIiA6ICJPVVQiKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInVzZXJ1cmI9JXBcbiIsIHVzZXJ1cmIpOwotCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0ldVxuIiwKLQkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJhY3R1YWxfbGVuZ3RoPSV1XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGF0YTogIik7Ci0JZm9yIChqID0gMDsgaiA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsgKytqKQotCQlwcmludGsoIiUwMnggIiwgZGF0YVtqXSk7Ci0JcHJpbnRrKCJcbiIpOworCWVwID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKwl0ID0gdHlwZXNbdXNiX3BpcGV0eXBlKHBpcGUpXTsKKwlkID0gZGlyc1shIXVzYl9waXBlaW4ocGlwZSldOworCisJaWYgKHVzZXJ1cmIpIHsJCS8qIEFzeW5jICovCisJCWlmICh3aGVuID09IFNVQk1JVCkKKwkJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJ1c2VydXJiICVwLCBlcCVkICVzLSVzLCAiCisJCQkJCSJsZW5ndGggJXVcbiIsCisJCQkJCXVzZXJ1cmIsIGVwLCB0LCBkLCBsZW5ndGgpOworCQllbHNlCisJCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAidXNlcnVyYiAlcCwgZXAlZCAlcy0lcywgIgorCQkJCQkiYWN0dWFsX2xlbmd0aCAldSBzdGF0dXMgJWRcbiIsCisJCQkJCXVzZXJ1cmIsIGVwLCB0LCBkLCBsZW5ndGgsCisJCQkJCXRpbWVvdXRfb3Jfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlpZiAod2hlbiA9PSBTVUJNSVQpCisJCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiZXAlZCAlcy0lcywgbGVuZ3RoICV1LCAiCisJCQkJCSJ0aW1lb3V0ICVkXG4iLAorCQkJCQllcCwgdCwgZCwgbGVuZ3RoLCB0aW1lb3V0X29yX3N0YXR1cyk7CisJCWVsc2UKKwkJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJlcCVkICVzLSVzLCBhY3R1YWxfbGVuZ3RoICV1LCAiCisJCQkJCSJzdGF0dXMgJWRcbiIsCisJCQkJCWVwLCB0LCBkLCBsZW5ndGgsIHRpbWVvdXRfb3Jfc3RhdHVzKTsKKwl9Cit9CisKKyNkZWZpbmUgQVNfQ09OVElOVUFUSU9OCTEKKyNkZWZpbmUgQVNfVU5MSU5LCTIKKworc3RhdGljIHZvaWQgY2FuY2VsX2J1bGtfdXJicyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdW5zaWduZWQgYnVsa19hZGRyKQorX19yZWxlYXNlcyhwcy0+bG9jaykKK19fYWNxdWlyZXMocHMtPmxvY2spCit7CisJc3RydWN0IGFzeW5jICphczsKKworCS8qIE1hcmsgYWxsIHRoZSBwZW5kaW5nIFVSQnMgdGhhdCBtYXRjaCBidWxrX2FkZHIsIHVwIHRvIGJ1dCBub3QKKwkgKiBpbmNsdWRpbmcgdGhlIGZpcnN0IG9uZSB3aXRob3V0IEFTX0NPTlRJTlVBVElPTi4gIElmIHN1Y2ggYW4KKwkgKiBVUkIgaXMgZW5jb3VudGVyZWQgdGhlbiBhIG5ldyB0cmFuc2ZlciBoYXMgYWxyZWFkeSBzdGFydGVkIHNvCisJICogdGhlIGVuZHBvaW50IGRvZXNuJ3QgbmVlZCB0byBiZSBkaXNhYmxlZDsgb3RoZXJ3aXNlIGl0IGRvZXMuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhcywgJnBzLT5hc3luY19wZW5kaW5nLCBhc3luY2xpc3QpIHsKKwkJaWYgKGFzLT5idWxrX2FkZHIgPT0gYnVsa19hZGRyKSB7CisJCQlpZiAoYXMtPmJ1bGtfc3RhdHVzICE9IEFTX0NPTlRJTlVBVElPTikKKwkJCQlnb3RvIHJlc2NhbjsKKwkJCWFzLT5idWxrX3N0YXR1cyA9IEFTX1VOTElOSzsKKwkJCWFzLT5idWxrX2FkZHIgPSAwOworCQl9CisJfQorCXBzLT5kaXNhYmxlZF9idWxrX2VwcyB8PSAoMSA8PCBidWxrX2FkZHIpOworCisJLyogTm93IGNhcmVmdWxseSB1bmxpbmsgYWxsIHRoZSBtYXJrZWQgcGVuZGluZyBVUkJzICovCisgcmVzY2FuOgorCWxpc3RfZm9yX2VhY2hfZW50cnkoYXMsICZwcy0+YXN5bmNfcGVuZGluZywgYXN5bmNsaXN0KSB7CisJCWlmIChhcy0+YnVsa19zdGF0dXMgPT0gQVNfVU5MSU5LKSB7CisJCQlhcy0+YnVsa19zdGF0dXMgPSAwOwkJLyogT25seSBvbmNlICovCisJCQlzcGluX3VubG9jaygmcHMtPmxvY2spOwkJLyogQWxsb3cgY29tcGxldGlvbnMgKi8KKwkJCXVzYl91bmxpbmtfdXJiKGFzLT51cmIpOworCQkJc3Bpbl9sb2NrKCZwcy0+bG9jayk7CisJCQlnb3RvIHJlc2NhbjsKKwkJfQorCX0KIH0KIAogc3RhdGljIHZvaWQgYXN5bmNfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYikKQEAgLTM0Niw3ICs0MDksMTEgQEAKIAkJc2VjaWQgPSBhcy0+c2VjaWQ7CiAJfQogCXNub29wKCZ1cmItPmRldi0+ZGV2LCAidXJiIGNvbXBsZXRlXG4iKTsKLQlzbm9vcF91cmIodXJiLCBhcy0+dXNlcnVyYik7CisJc25vb3BfdXJiKHVyYi0+ZGV2LCBhcy0+dXNlcnVyYiwgdXJiLT5waXBlLCB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQlhcy0+c3RhdHVzLCBDT01QTEVURSk7CisJaWYgKGFzLT5zdGF0dXMgPCAwICYmIGFzLT5idWxrX2FkZHIgJiYgYXMtPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCAmJgorCQkJYXMtPnN0YXR1cyAhPSAtRU5PRU5UKQorCQljYW5jZWxfYnVsa191cmJzKHBzLCBhcy0+YnVsa19hZGRyKTsKIAlzcGluX3VubG9jaygmcHMtPmxvY2spOwogCiAJaWYgKHNpZ25yKQpAQCAtNjU1LDYgKzcyMiw3IEBACiAJc3RydWN0IGFzeW5jICphczsKIAogCXVzYl9sb2NrX2RldmljZShkZXYpOworCXVzYl9odWJfcmVsZWFzZV9hbGxfcG9ydHMoZGV2LCBwcyk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3Qgc2ltdWx0YW5lb3VzIG9wZW4gKi8KIAltdXRleF9sb2NrKCZ1c2Jmc19tdXRleCk7CkBAIC02ODgsNyArNzU2LDcgQEAKIAl1bnNpZ25lZCBpbnQgdG1vOwogCXVuc2lnbmVkIGNoYXIgKnRidWY7CiAJdW5zaWduZWQgd0xlbmd0aDsKLQlpbnQgaSwgaiwgcmV0OworCWludCBpLCBwaXBlLCByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mKGN0cmwpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC03MDgsMjQgKzc3NiwxNyBAQAogCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc25vb3AoJmRldi0+ZGV2LCAiY29udHJvbCByZWFkOiBiUmVxdWVzdD0lMDJ4ICIKLQkJCQkiYlJyZXF1ZXN0VHlwZT0lMDJ4IHdWYWx1ZT0lMDR4ICIKLQkJCQkid0luZGV4PSUwNHggd0xlbmd0aD0lMDR4XG4iLAotCQkJY3RybC5iUmVxdWVzdCwgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwud1ZhbHVlLAotCQkJCWN0cmwud0luZGV4LCBjdHJsLndMZW5ndGgpOworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKGRldiwgMCk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGN0cmwud0xlbmd0aCwgdG1vLCBTVUJNSVQpOwogCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7Ci0JCWkgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgY3RybC5iUmVxdWVzdCwKKwkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHBpcGUsIGN0cmwuYlJlcXVlc3QsCiAJCQkJICAgIGN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLndWYWx1ZSwgY3RybC53SW5kZXgsCiAJCQkJICAgIHRidWYsIGN0cmwud0xlbmd0aCwgdG1vKTsKIAkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIG1heChpLCAwKSwgbWluKGksIDApLCBDT01QTEVURSk7CisKIAkJaWYgKChpID4gMCkgJiYgY3RybC53TGVuZ3RoKSB7Ci0JCQlpZiAodXNiZnNfc25vb3ApIHsKLQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJjb250cm9sIHJlYWQ6IGRhdGEgIik7Ci0JCQkJZm9yIChqID0gMDsgaiA8IGk7ICsraikKLQkJCQkJcHJpbnRrKCIlMDJ4ICIsICh1OCkodGJ1Zilbal0pOwotCQkJCXByaW50aygiXG4iKTsKLQkJCX0KIAkJCWlmIChjb3B5X3RvX3VzZXIoY3RybC5kYXRhLCB0YnVmLCBpKSkgewogCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YnVmKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTczOCwyMiArNzk5LDE1IEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCX0KLQkJc25vb3AoJmRldi0+ZGV2LCAiY29udHJvbCB3cml0ZTogYlJlcXVlc3Q9JTAyeCAiCi0JCQkJImJScmVxdWVzdFR5cGU9JTAyeCB3VmFsdWU9JTA0eCAiCi0JCQkJIndJbmRleD0lMDR4IHdMZW5ndGg9JTA0eFxuIiwKLQkJCWN0cmwuYlJlcXVlc3QsIGN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLndWYWx1ZSwKLQkJCQljdHJsLndJbmRleCwgY3RybC53TGVuZ3RoKTsKLQkJaWYgKHVzYmZzX3Nub29wKSB7Ci0JCQlkZXZfaW5mbygmZGV2LT5kZXYsICJjb250cm9sIHdyaXRlOiBkYXRhOiAiKTsKLQkJCWZvciAoaiA9IDA7IGogPCBjdHJsLndMZW5ndGg7ICsraikKLQkJCQlwcmludGsoIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpKHRidWYpW2pdKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQorCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGRldiwgMCk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGN0cmwud0xlbmd0aCwgdG1vLCBTVUJNSVQpOworCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgY3RybC5iUmVxdWVzdCwKIAkJCQkgICAgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwud1ZhbHVlLCBjdHJsLndJbmRleCwKIAkJCQkgICAgdGJ1ZiwgY3RybC53TGVuZ3RoLCB0bW8pOwogCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbWF4KGksIDApLCBtaW4oaSwgMCksIENPTVBMRVRFKTsKIAl9CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOwogCWlmIChpIDwgMCAmJiBpICE9IC1FUElQRSkgewpAQCAtNzcyLDcgKzgyNiw3IEBACiAJdW5zaWduZWQgaW50IHRtbywgbGVuMSwgcGlwZTsKIAlpbnQgbGVuMjsKIAl1bnNpZ25lZCBjaGFyICp0YnVmOwotCWludCBpLCBqLCByZXQ7CisJaW50IGksIHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYnVsaywgYXJnLCBzaXplb2YoYnVsaykpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc5OSwxOCArODUzLDE0IEBACiAJCQlrZnJlZSh0YnVmKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXNub29wKCZkZXYtPmRldiwgImJ1bGsgcmVhZDogbGVuPTB4JTAyeCB0aW1lb3V0PSUwNGRcbiIsCi0JCQlidWxrLmxlbiwgYnVsay50aW1lb3V0KTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMSwgdG1vLCBTVUJNSVQpOworCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCB0YnVmLCBsZW4xLCAmbGVuMiwgdG1vKTsKIAkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjIsIGksIENPTVBMRVRFKTsKKwogCQlpZiAoIWkgJiYgbGVuMikgewotCQkJaWYgKHVzYmZzX3Nub29wKSB7Ci0JCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiYnVsayByZWFkOiBkYXRhICIpOwotCQkJCWZvciAoaiA9IDA7IGogPCBsZW4yOyArK2opCi0JCQkJCXByaW50aygiJTAyeCAiLCAodTgpKHRidWYpW2pdKTsKLQkJCQlwcmludGsoIlxuIik7Ci0JCQl9CiAJCQlpZiAoY29weV90b191c2VyKGJ1bGsuZGF0YSwgdGJ1ZiwgbGVuMikpIHsKIAkJCQlrZnJlZSh0YnVmKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgyMywxNyArODczLDEyIEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCX0KLQkJc25vb3AoJmRldi0+ZGV2LCAiYnVsayB3cml0ZTogbGVuPTB4JTAyeCB0aW1lb3V0PSUwNGRcbiIsCi0JCQlidWxrLmxlbiwgYnVsay50aW1lb3V0KTsKLQkJaWYgKHVzYmZzX3Nub29wKSB7Ci0JCQlkZXZfaW5mbygmZGV2LT5kZXYsICJidWxrIHdyaXRlOiBkYXRhOiAiKTsKLQkJCWZvciAoaiA9IDA7IGogPCBsZW4xOyArK2opCi0JCQkJcHJpbnRrKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMSwgdG1vLCBTVUJNSVQpOworCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCB0YnVmLCBsZW4xLCAmbGVuMiwgdG1vKTsKIAkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjIsIGksIENPTVBMRVRFKTsKIAl9CiAJa2ZyZWUodGJ1Zik7CiAJaWYgKGkgPCAwKQpAQCAtOTkxLDYgKzEwMzYsNyBAQAogCiAJaWYgKHV1cmItPmZsYWdzICYgfihVU0JERVZGU19VUkJfSVNPX0FTQVAgfAogCQkJCVVTQkRFVkZTX1VSQl9TSE9SVF9OT1RfT0sgfAorCQkJCVVTQkRFVkZTX1VSQl9CVUxLX0NPTlRJTlVBVElPTiB8CiAJCQkJVVNCREVWRlNfVVJCX05PX0ZTQlIgfAogCQkJCVVTQkRFVkZTX1VSQl9aRVJPX1BBQ0tFVCB8CiAJCQkJVVNCREVWRlNfVVJCX05PX0lOVEVSUlVQVCkpCkBAIC0xMDUxLDEzICsxMDk3LDYgQEAKIAkJCWlzX2luID0gMDsKIAkJCXV1cmItPmVuZHBvaW50ICY9IH5VU0JfRElSX0lOOwogCQl9Ci0JCXNub29wKCZwcy0+ZGV2LT5kZXYsICJjb250cm9sIHVyYjogYlJlcXVlc3Q9JTAyeCAiCi0JCQkiYlJyZXF1ZXN0VHlwZT0lMDJ4IHdWYWx1ZT0lMDR4ICIKLQkJCSJ3SW5kZXg9JTA0eCB3TGVuZ3RoPSUwNHhcbiIsCi0JCQlkci0+YlJlcXVlc3QsIGRyLT5iUmVxdWVzdFR5cGUsCi0JCQlfX2xlMTZfdG9fY3B1cCgmZHItPndWYWx1ZSksCi0JCQlfX2xlMTZfdG9fY3B1cCgmZHItPndJbmRleCksCi0JCQlfX2xlMTZfdG9fY3B1cCgmZHItPndMZW5ndGgpKTsKIAkJYnJlYWs7CiAKIAljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0JVTEs6CkBAIC0xMDcwLDcgKzExMDksNiBAQAogCQl1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IDA7CiAJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoID4gTUFYX1VTQkZTX0JVRkZFUl9TSVpFKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNub29wKCZwcy0+ZGV2LT5kZXYsICJidWxrIHVyYlxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBVU0JERVZGU19VUkJfVFlQRV9JU086CkBAIC0xMDk3LDEyICsxMTM1LDEyIEBACiAJCQl9CiAJCQl0b3RsZW4gKz0gaXNvcGt0W3VdLmxlbmd0aDsKIAkJfQotCQlpZiAodG90bGVuID4gMzI3NjgpIHsKKwkJLyogMzA3MiAqIDY0IG1pY3JvZnJhbWVzICovCisJCWlmICh0b3RsZW4gPiAxOTY2MDgpIHsKIAkJCWtmcmVlKGlzb3BrdCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQl1dXJiLT5idWZmZXJfbGVuZ3RoID0gdG90bGVuOwotCQlzbm9vcCgmcHMtPmRldi0+ZGV2LCAiaXNvIHVyYlxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBVU0JERVZGU19VUkJfVFlQRV9JTlRFUlJVUFQ6CkBAIC0xMTExLDcgKzExNDksNiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoID4gTUFYX1VTQkZTX0JVRkZFUl9TSVpFKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNub29wKCZwcy0+ZGV2LT5kZXYsICJpbnRlcnJ1cHQgdXJiXG4iKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTE5OCwxMSArMTIzNSw0NiBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAl9Ci0Jc25vb3BfdXJiKGFzLT51cmIsIGFzLT51c2VydXJiKTsKKwlzbm9vcF91cmIocHMtPmRldiwgYXMtPnVzZXJ1cmIsIGFzLT51cmItPnBpcGUsCisJCQlhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCAwLCBTVUJNSVQpOwogCWFzeW5jX25ld3BlbmRpbmcoYXMpOwotCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIoYXMtPnVyYiwgR0ZQX0tFUk5FTCkpKSB7CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmZXAtPmRlc2MpKSB7CisJCXNwaW5fbG9ja19pcnEoJnBzLT5sb2NrKTsKKworCQkvKiBOb3QgZXhhY3RseSB0aGUgZW5kcG9pbnQgYWRkcmVzczsgdGhlIGRpcmVjdGlvbiBiaXQgaXMKKwkJICogc2hpZnRlZCB0byB0aGUgMHgxMCBwb3NpdGlvbiBzbyB0aGF0IHRoZSB2YWx1ZSB3aWxsIGJlCisJCSAqIGJldHdlZW4gMCBhbmQgMzEuCisJCSAqLworCQlhcy0+YnVsa19hZGRyID0gdXNiX2VuZHBvaW50X251bSgmZXAtPmRlc2MpIHwKKwkJCSgoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkJCQk+PiAzKTsKKworCQkvKiBJZiB0aGlzIGJ1bGsgVVJCIGlzIHRoZSBzdGFydCBvZiBhIG5ldyB0cmFuc2ZlciwgcmUtZW5hYmxlCisJCSAqIHRoZSBlbmRwb2ludC4gIE90aGVyd2lzZSBtYXJrIGl0IGFzIGEgY29udGludWF0aW9uIFVSQi4KKwkJICovCisJCWlmICh1dXJiLT5mbGFncyAmIFVTQkRFVkZTX1VSQl9CVUxLX0NPTlRJTlVBVElPTikKKwkJCWFzLT5idWxrX3N0YXR1cyA9IEFTX0NPTlRJTlVBVElPTjsKKwkJZWxzZQorCQkJcHMtPmRpc2FibGVkX2J1bGtfZXBzICY9IH4oMSA8PCBhcy0+YnVsa19hZGRyKTsKKworCQkvKiBEb24ndCBhY2NlcHQgY29udGludWF0aW9uIFVSQnMgaWYgdGhlIGVuZHBvaW50IGlzCisJCSAqIGRpc2FibGVkIGJlY2F1c2Ugb2YgYW4gZWFybGllciBlcnJvci4KKwkJICovCisJCWlmIChwcy0+ZGlzYWJsZWRfYnVsa19lcHMgJiAoMSA8PCBhcy0+YnVsa19hZGRyKSkKKwkJCXJldCA9IC1FUkVNT1RFSU87CisJCWVsc2UKKwkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGFzLT51cmIsIEdGUF9BVE9NSUMpOworCQlzcGluX3VubG9ja19pcnEoJnBzLT5sb2NrKTsKKwl9IGVsc2UgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihhcy0+dXJiLCBHRlBfS0VSTkVMKTsKKwl9CisKKwlpZiAocmV0KSB7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBzLT5kZXYtPmRldiwKIAkJCSAgICJ1c2JmczogdXNiX3N1Ym1pdF91cmIgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCXNub29wX3VyYihwcy0+ZGV2LCBhcy0+dXNlcnVyYiwgYXMtPnVyYi0+cGlwZSwKKwkJCQkwLCByZXQsIENPTVBMRVRFKTsKIAkJYXN5bmNfcmVtb3ZlcGVuZGluZyhhcyk7CiAJCWZyZWVfYXN5bmMoYXMpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTU0OCw2ICsxNjIwLDI5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBwcm9jX2NsYWltX3BvcnQoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJdW5zaWduZWQgcG9ydG51bTsKKwlpbnQgcmM7CisKKwlpZiAoZ2V0X3VzZXIocG9ydG51bSwgKHVuc2lnbmVkIF9fdXNlciAqKSBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyYyA9IHVzYl9odWJfY2xhaW1fcG9ydChwcy0+ZGV2LCBwb3J0bnVtLCBwcyk7CisJaWYgKHJjID09IDApCisJCXNub29wKCZwcy0+ZGV2LT5kZXYsICJwb3J0ICVkIGNsYWltZWQgYnkgcHJvY2VzcyAlZDogJXNcbiIsCisJCQlwb3J0bnVtLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHByb2NfcmVsZWFzZV9wb3J0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXVuc2lnbmVkIHBvcnRudW07CisKKwlpZiAoZ2V0X3VzZXIocG9ydG51bSwgKHVuc2lnbmVkIF9fdXNlciAqKSBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gdXNiX2h1Yl9yZWxlYXNlX3BvcnQocHMtPmRldiwgcG9ydG51bSwgcHMpOworfQorCiAvKgogICogTk9URTogIEFsbCByZXF1ZXN0cyBoZXJlIHRoYXQgaGF2ZSBpbnRlcmZhY2UgbnVtYmVycyBhcyBwYXJhbWV0ZXJzCiAgKiBhcmUgYXNzdW1pbmcgdGhhdCBzb21laG93IHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHByZXZlbnRlZCBmcm9tCkBAIC0xNjQ1LDcgKzE3NDAsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyOgotCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVBUFVSQkRFTEFZMzJcbiIsIF9fZnVuY19fKTsKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFQVBVUkJOREVMQVkzMlxuIiwgX19mdW5jX18pOwogCQlyZXQgPSBwcm9jX3JlYXB1cmJub25ibG9ja19jb21wYXQocHMsIHApOwogCQlicmVhazsKIApAQCAtMTY2Niw3ICsxNzYxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFVTQkRFVkZTX1JFQVBVUkJOREVMQVk6Ci0JCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUFQVVJCREVMQVlcbiIsIF9fZnVuY19fKTsKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFQVBVUkJOREVMQVlcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gcHJvY19yZWFwdXJibm9uYmxvY2socHMsIHApOwogCQlicmVhazsKIApAQCAtMTY4OSw2ICsxNzg0LDE2IEBACiAJCXNub29wKCZkZXYtPmRldiwgIiVzOiBJT0NUTFxuIiwgX19mdW5jX18pOwogCQlyZXQgPSBwcm9jX2lvY3RsX2RlZmF1bHQocHMsIHApOwogCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfQ0xBSU1fUE9SVDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IENMQUlNX1BPUlRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gcHJvY19jbGFpbV9wb3J0KHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFTEVBU0VfUE9SVDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFTEVBU0VfUE9SVFxuIiwgX19mdW5jX18pOworCQlyZXQgPSBwcm9jX3JlbGVhc2VfcG9ydChwcywgcCk7CisJCWJyZWFrOwogCX0KIAl1c2JfdW5sb2NrX2RldmljZShkZXYpOwogCWlmIChyZXQgPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IDY5ZTU3NzMuLjRmODY0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMjA3LDYgKzIwNyw5IEBACiAKIAlpbnRmLT5uZWVkc19iaW5kaW5nID0gMDsKIAorCWlmICh1c2JfZGV2aWNlX2lzX293bmVkKHVkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICh1ZGV2LT5hdXRob3JpemVkID09IDApIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhdXRob3JpemVkIGZvciB1c2FnZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMjMyLDI4ICsyMzUsMzUgQEAKIAkJLyogVGhlIGludGVyZmFjZSBzaG91bGQgYWx3YXlzIGFwcGVhciB0byBiZSBpbiB1c2UKIAkJICogdW5sZXNzIHRoZSBkcml2ZXIgc3Vwb3J0cyBhdXRvc3VzcGVuZC4KIAkJICovCi0JCWludGYtPnBtX3VzYWdlX2NudCA9ICEoZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCk7CisJCWF0b21pY19zZXQoJmludGYtPnBtX3VzYWdlX2NudCwgIWRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpOwogCiAJCS8qIENhcnJ5IG91dCBhIGRlZmVycmVkIHN3aXRjaCB0byBhbHRzZXR0aW5nIDAgKi8KIAkJaWYgKGludGYtPm5lZWRzX2FsdHNldHRpbmcwKSB7Ci0JCQl1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBpbnRmLT5hbHRzZXR0aW5nWzBdLgorCQkJZXJyb3IgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBpbnRmLT5hbHRzZXR0aW5nWzBdLgogCQkJCQlkZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDApOworCQkJaWYgKGVycm9yIDwgMCkKKwkJCQlnb3RvIGVycjsKKwogCQkJaW50Zi0+bmVlZHNfYWx0c2V0dGluZzAgPSAwOwogCQl9CiAKIAkJZXJyb3IgPSBkcml2ZXItPnByb2JlKGludGYsIGlkKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQltYXJrX3F1aWVzY2VkKGludGYpOwotCQkJaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7Ci0JCQlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7Ci0JCQl1c2JfY2FuY2VsX3F1ZXVlZF9yZXNldChpbnRmKTsKLQkJfSBlbHNlCi0JCQlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JPVU5EOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycjsKIAorCQlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JPVU5EOwogCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCX0KIAogCXJldHVybiBlcnJvcjsKKworZXJyOgorCW1hcmtfcXVpZXNjZWQoaW50Zik7CisJaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CisJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOworCXVzYl9jYW5jZWxfcXVldWVkX3Jlc2V0KGludGYpOworCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldik7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKiBjYWxsZWQgZnJvbSBkcml2ZXIgY29yZSB3aXRoIGRldiBsb2NrZWQgKi8KQEAgLTI2Miw3ICsyNzIsNyBAQAogCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIgPSB0b191c2JfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yLCByOwogCiAJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJJTkRJTkc7CiAKQEAgLTI5MCwxMSArMzAwLDE0IEBACiAJCSAqIEp1c3QgcmUtZW5hYmxlIGl0IHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBlbmRwb2ludCB0b2dnbGVzLgogCQkgKi8KIAkJdXNiX2VuYWJsZV9pbnRlcmZhY2UodWRldiwgaW50ZiwgZmFsc2UpOwotCX0gZWxzZSBpZiAoIWVycm9yICYmIGludGYtPmRldi5wb3dlci5zdGF0dXMgPT0gRFBNX09OKQotCQl1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBpbnRmLT5hbHRzZXR0aW5nWzBdLgorCX0gZWxzZSBpZiAoIWVycm9yICYmIGludGYtPmRldi5wb3dlci5zdGF0dXMgPT0gRFBNX09OKSB7CisJCXIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBpbnRmLT5hbHRzZXR0aW5nWzBdLgogCQkJCWRlc2MuYkludGVyZmFjZU51bWJlciwgMCk7Ci0JZWxzZQorCQlpZiAociA8IDApCisJCQlpbnRmLT5uZWVkc19hbHRzZXR0aW5nMCA9IDE7CisJfSBlbHNlIHsKIAkJaW50Zi0+bmVlZHNfYWx0c2V0dGluZzAgPSAxOworCX0KIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCiAJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOwpAQCAtMzQ0LDcgKzM1Nyw3IEBACiAJdXNiX3BtX2xvY2sodWRldik7CiAJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CiAJbWFya19hY3RpdmUoaWZhY2UpOwotCWlmYWNlLT5wbV91c2FnZV9jbnQgPSAhKGRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpOworCWF0b21pY19zZXQoJmlmYWNlLT5wbV91c2FnZV9jbnQsICFkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKTsKIAl1c2JfcG1fdW5sb2NrKHVkZXYpOwogCiAJLyogaWYgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGFkZGVkLCBiaW5kIG5vdzsgZWxzZSBsZXQKQEAgLTEwNjUsNyArMTA3OCw3IEBACiAJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CiAJCQlpZiAoIWlzX2FjdGl2ZShpbnRmKSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChpbnRmLT5wbV91c2FnZV9jbnQgPiAwKQorCQkJaWYgKGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpID4gMCkKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJaWYgKGludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgJiYKIAkJCQkJIXVkZXYtPmRvX3JlbW90ZV93YWtldXApIHsKQEAgLTE0NjEsMTcgKzE0NzQsMTkgQEAKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAllbHNlIHsKIAkJdWRldi0+YXV0b19wbSA9IDE7Ci0JCWludGYtPnBtX3VzYWdlX2NudCArPSBpbmNfdXNhZ2VfY250OworCQlhdG9taWNfYWRkKGluY191c2FnZV9jbnQsICZpbnRmLT5wbV91c2FnZV9jbnQpOwogCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCQlpZiAoaW5jX3VzYWdlX2NudCA+PSAwICYmIGludGYtPnBtX3VzYWdlX2NudCA+IDApIHsKKwkJaWYgKGluY191c2FnZV9jbnQgPj0gMCAmJgorCQkJCWF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpID4gMCkgewogCQkJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCiAJCQkJc3RhdHVzID0gdXNiX3Jlc3VtZV9ib3RoKHVkZXYsCiAJCQkJCQlQTVNHX0FVVE9fUkVTVU1FKTsKIAkJCWlmIChzdGF0dXMgIT0gMCkKLQkJCQlpbnRmLT5wbV91c2FnZV9jbnQgLT0gaW5jX3VzYWdlX2NudDsKKwkJCQlhdG9taWNfc3ViKGluY191c2FnZV9jbnQsICZpbnRmLT5wbV91c2FnZV9jbnQpOwogCQkJZWxzZQogCQkJCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7Ci0JCX0gZWxzZSBpZiAoaW5jX3VzYWdlX2NudCA8PSAwICYmIGludGYtPnBtX3VzYWdlX2NudCA8PSAwKSB7CisJCX0gZWxzZSBpZiAoaW5jX3VzYWdlX2NudCA8PSAwICYmCisJCQkJYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkgPD0gMCkgewogCQkJc3RhdHVzID0gdXNiX3N1c3BlbmRfYm90aCh1ZGV2LCBQTVNHX0FVVE9fU1VTUEVORCk7CiAJCX0KIAl9CkBAIC0xNTE2LDcgKzE1MzEsNyBAQAogCiAJc3RhdHVzID0gdXNiX2F1dG9wbV9kb19pbnRlcmZhY2UoaW50ZiwgLTEpOwogCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkIGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMsIGludGYtPnBtX3VzYWdlX2NudCk7CisJCQlfX2Z1bmNfXywgc3RhdHVzLCBhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UpOwogCkBAIC0xNTQ0LDEwICsxNTU5LDEwIEBACiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJfSBlbHNlIHsKIAkJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKLQkJLS1pbnRmLT5wbV91c2FnZV9jbnQ7CisJCWF0b21pY19kZWMoJmludGYtPnBtX3VzYWdlX2NudCk7CiAJCWlmICh1ZGV2LT5hdXRvc3VzcGVuZF9kaXNhYmxlZCB8fCB1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA8IDApCiAJCQlzdGF0dXMgPSAtRVBFUk07Ci0JCWVsc2UgaWYgKGludGYtPnBtX3VzYWdlX2NudCA8PSAwICYmCisJCWVsc2UgaWYgKGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpIDw9IDAgJiYKIAkJCQkhdGltZXJfcGVuZGluZygmdWRldi0+YXV0b3N1c3BlbmQudGltZXIpKSB7CiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsoa3N1c3BlbmRfdXNiX3dxLCAmdWRldi0+YXV0b3N1c3BlbmQsCiAJCQkJCXJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoCkBAIC0xNTU1LDcgKzE1NzAsNyBAQAogCQl9CiAJfQogCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkIGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMsIGludGYtPnBtX3VzYWdlX2NudCk7CisJCQlfX2Z1bmNfXywgc3RhdHVzLCBhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMpOwogCkBAIC0xNTk5LDcgKzE2MTQsNyBAQAogCiAJc3RhdHVzID0gdXNiX2F1dG9wbV9kb19pbnRlcmZhY2UoaW50ZiwgMSk7CiAJZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgaW50Zi0+cG1fdXNhZ2VfY250KTsKKwkJCV9fZnVuY19fLCBzdGF0dXMsIGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKTsKQEAgLTE2MjcsMTAgKzE2NDIsMTQgQEAKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAllbHNlIGlmICh1ZGV2LT5hdXRvcmVzdW1lX2Rpc2FibGVkKQogCQlzdGF0dXMgPSAtRVBFUk07Ci0JZWxzZSBpZiAoKytpbnRmLT5wbV91c2FnZV9jbnQgPiAwICYmIHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCi0JCXF1ZXVlX3dvcmsoa3N1c3BlbmRfdXNiX3dxLCAmdWRldi0+YXV0b3Jlc3VtZSk7CisJZWxzZSB7CisJCWF0b21pY19pbmMoJmludGYtPnBtX3VzYWdlX2NudCk7CisJCWlmIChhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSA+IDAgJiYKKwkJCQl1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQkJcXVldWVfd29yayhrc3VzcGVuZF91c2Jfd3EsICZ1ZGV2LT5hdXRvcmVzdW1lKTsKKwl9CiAJZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgaW50Zi0+cG1fdXNhZ2VfY250KTsKKwkJCV9fZnVuY19fLCBzdGF0dXMsIGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKTsKQEAgLTE2NTIsNyArMTY3MSw3IEBACiAKIAlzdGF0dXMgPSB1c2JfYXV0b3BtX2RvX2ludGVyZmFjZShpbnRmLCAwKTsKIAlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IHN0YXR1cyAlZCBjbnQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzLCBpbnRmLT5wbV91c2FnZV9jbnQpOworCQkJX19mdW5jX18sIHN0YXR1cywgYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkpOwogCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwppbmRleCA1Y2VmODg5Li4yMjJlZTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwpAQCAtNjcsMTQgKzY3LDE0IEBACiAJc3RydWN0IGNsYXNzICpjbGFzczsKIH0gKnVzYl9jbGFzczsKIAotc3RhdGljIGNoYXIgKnVzYl9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqdXNiX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmRydjsKIAogCWRydiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmICghZHJ2IHx8ICFkcnYtPm5vZGVuYW1lKQorCWlmICghZHJ2IHx8ICFkcnYtPmRldm5vZGUpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiBkcnYtPm5vZGVuYW1lKGRldik7CisJcmV0dXJuIGRydi0+ZGV2bm9kZShkZXYsIG1vZGUpOwogfQogCiBzdGF0aWMgaW50IGluaXRfdXNiX2NsYXNzKHZvaWQpCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJa2ZyZWUodXNiX2NsYXNzKTsKIAkJdXNiX2NsYXNzID0gTlVMTDsKIAl9Ci0JdXNiX2NsYXNzLT5jbGFzcy0+bm9kZW5hbWUgPSB1c2Jfbm9kZW5hbWU7CisJdXNiX2NsYXNzLT5jbGFzcy0+ZGV2bm9kZSA9IHVzYl9kZXZub2RlOwogCiBleGl0OgogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jCmluZGV4IDMwZWNhYzMuLjA1ZTZkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jCkBAIC0xNTgsNyArMTU4LDkgQEAKIAkvKiBDaG9vc2UgYW5kIHNldCB0aGUgY29uZmlndXJhdGlvbi4gIFRoaXMgcmVnaXN0ZXJzIHRoZSBpbnRlcmZhY2VzCiAJICogd2l0aCB0aGUgZHJpdmVyIGNvcmUgYW5kIGxldHMgaW50ZXJmYWNlIGRyaXZlcnMgYmluZCB0byB0aGVtLgogCSAqLwotCWlmICh1ZGV2LT5hdXRob3JpemVkID09IDApCisJaWYgKHVzYl9kZXZpY2VfaXNfb3duZWQodWRldikpCisJCTsJCS8qIERvbid0IGNvbmZpZ3VyZSBpZiB0aGUgZGV2aWNlIGlzIG93bmVkICovCisJZWxzZSBpZiAodWRldi0+YXV0aG9yaXplZCA9PSAwKQogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJEZXZpY2UgaXMgbm90IGF1dGhvcml6ZWQgZm9yIHVzYWdlXG4iKTsKIAllbHNlIHsKIAkJYyA9IHVzYl9jaG9vc2VfY29uZmlndXJhdGlvbih1ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDk1Y2NmYTAuLjM0ZGU0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMzM3LDcyICszMzcsODkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoKLSAqIGhlbHBlciByb3V0aW5lIGZvciByZXR1cm5pbmcgc3RyaW5nIGRlc2NyaXB0b3JzIGluIFVURi0xNkxFCi0gKiBpbnB1dCBjYW4gYWN0dWFsbHkgYmUgSVNPLTg4NTktMTsgQVNDSUkgaXMgaXRzIDctYml0IHN1YnNldAorLyoqCisgKiBhc2NpaTJkZXNjKCkgLSBIZWxwZXIgcm91dGluZSBmb3IgcHJvZHVjaW5nIFVURi0xNkxFIHN0cmluZyBkZXNjcmlwdG9ycworICogQHM6IE51bGwtdGVybWluYXRlZCBBU0NJSSAoYWN0dWFsbHkgSVNPLTg4NTktMSkgc3RyaW5nCisgKiBAYnVmOiBCdWZmZXIgZm9yIFVTQiBzdHJpbmcgZGVzY3JpcHRvciAoaGVhZGVyICsgVVRGLTE2TEUpCisgKiBAbGVuOiBMZW5ndGggKGluIGJ5dGVzOyBtYXkgYmUgb2RkKSBvZiBkZXNjcmlwdG9yIGJ1ZmZlci4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgZmlsbGVkIGluOiAyICsgMipzdHJsZW4ocykgb3IKKyAqIGJ1Zmxlbiwgd2hpY2hldmVyIGlzIGxlc3MuCisgKgorICogVVNCIFN0cmluZyBkZXNjcmlwdG9ycyBjYW4gY29udGFpbiBhdCBtb3N0IDEyNiBjaGFyYWN0ZXJzOyBpbnB1dAorICogc3RyaW5ncyBsb25nZXIgdGhhbiB0aGF0IGFyZSB0cnVuY2F0ZWQuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBhc2NpaTJ1dGYoY2hhciAqcywgdTggKnV0ZiwgaW50IHV0Zm1heCkKK3N0YXRpYyB1bnNpZ25lZAorYXNjaWkyZGVzYyhjaGFyIGNvbnN0ICpzLCB1OCAqYnVmLCB1bnNpZ25lZCBsZW4pCiB7Ci0JdW5zaWduZWQgcmV0dmFsOworCXVuc2lnbmVkIG4sIHQgPSAyICsgMipzdHJsZW4ocyk7CiAKLQlmb3IgKHJldHZhbCA9IDA7ICpzICYmIHV0Zm1heCA+IDE7IHV0Zm1heCAtPSAyLCByZXR2YWwgKz0gMikgewotCQkqdXRmKysgPSAqcysrOwotCQkqdXRmKysgPSAwOworCWlmICh0ID4gMjU0KQorCQl0ID0gMjU0OwkvKiBMb25nZXN0IHBvc3NpYmxlIFVURiBzdHJpbmcgZGVzY3JpcHRvciAqLworCWlmIChsZW4gPiB0KQorCQlsZW4gPSB0OworCisJdCArPSBVU0JfRFRfU1RSSU5HIDw8IDg7CS8qIE5vdyB0IGlzIGZpcnN0IDE2IGJpdHMgdG8gc3RvcmUgKi8KKworCW4gPSBsZW47CisJd2hpbGUgKG4tLSkgeworCQkqYnVmKysgPSB0OworCQlpZiAoIW4tLSkKKwkJCWJyZWFrOworCQkqYnVmKysgPSB0ID4+IDg7CisJCXQgPSAodW5zaWduZWQgY2hhcikqcysrOwogCX0KLQlpZiAodXRmbWF4ID4gMCkgewotCQkqdXRmID0gKnM7Ci0JCSsrcmV0dmFsOwotCX0KLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBsZW47CiB9CiAKLS8qCi0gKiByaF9zdHJpbmcgLSBwcm92aWRlcyBtYW51ZmFjdHVyZXIsIHByb2R1Y3QgYW5kIHNlcmlhbCBzdHJpbmdzIGZvciByb290IGh1YgotICogQGlkOiB0aGUgc3RyaW5nIElEIG51bWJlciAoMTogc2VyaWFsIG51bWJlciwgMjogcHJvZHVjdCwgMzogdmVuZG9yKQorLyoqCisgKiByaF9zdHJpbmcoKSAtIHByb3ZpZGVzIHN0cmluZyBkZXNjcmlwdG9ycyBmb3Igcm9vdCBodWIKKyAqIEBpZDogdGhlIHN0cmluZyBJRCBudW1iZXIgKDA6IGxhbmdpZHMsIDE6IHNlcmlhbCAjLCAyOiBwcm9kdWN0LCAzOiB2ZW5kb3IpCiAgKiBAaGNkOiB0aGUgaG9zdCBjb250cm9sbGVyIGZvciB0aGlzIHJvb3QgaHViCi0gKiBAZGF0YTogcmV0dXJuIHBhY2tldCBpbiBVVEYtMTYgTEUKLSAqIEBsZW46IGxlbmd0aCBvZiB0aGUgcmV0dXJuIHBhY2tldAorICogQGRhdGE6IGJ1ZmZlciBmb3Igb3V0cHV0IHBhY2tldAorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBwcm92aWRlZCBidWZmZXIKICAqCiAgKiBQcm9kdWNlcyBlaXRoZXIgYSBtYW51ZmFjdHVyZXIsIHByb2R1Y3Qgb3Igc2VyaWFsIG51bWJlciBzdHJpbmcgZm9yIHRoZQogICogdmlydHVhbCByb290IGh1YiBkZXZpY2UuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgZmlsbGVkIGluOiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXNjcmlwdG9yIG9yCisgKiBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyLCB3aGljaGV2ZXIgaXMgbGVzcy4KICAqLwotc3RhdGljIHVuc2lnbmVkIHJoX3N0cmluZyhpbnQgaWQsIHN0cnVjdCB1c2JfaGNkICpoY2QsIHU4ICpkYXRhLCB1bnNpZ25lZCBsZW4pCitzdGF0aWMgdW5zaWduZWQKK3JoX3N0cmluZyhpbnQgaWQsIHN0cnVjdCB1c2JfaGNkIGNvbnN0ICpoY2QsIHU4ICpkYXRhLCB1bnNpZ25lZCBsZW4pCiB7Ci0JY2hhciBidWYgWzEwMF07CisJY2hhciBidWZbMTAwXTsKKwljaGFyIGNvbnN0ICpzOworCXN0YXRpYyBjaGFyIGNvbnN0IGxhbmdpZHNbNF0gPSB7NCwgVVNCX0RUX1NUUklORywgMHgwOSwgMHgwNH07CiAKIAkvLyBsYW5ndWFnZSBpZHMKLQlpZiAoaWQgPT0gMCkgewotCQlidWZbMF0gPSA0OyAgICBidWZbMV0gPSAzOwkvKiA0IGJ5dGVzIHN0cmluZyBkYXRhICovCi0JCWJ1ZlsyXSA9IDB4MDk7IGJ1ZlszXSA9IDB4MDQ7CS8qIE1TRlQtc3BlYWsgZm9yICJlbi11cyIgKi8KLQkJbGVuID0gbWluX3QodW5zaWduZWQsIGxlbiwgNCk7Ci0JCW1lbWNweSAoZGF0YSwgYnVmLCBsZW4pOworCXN3aXRjaCAoaWQpIHsKKwljYXNlIDA6CisJCS8qIEFycmF5IG9mIExBTkdJRCBjb2RlcyAoMHgwNDA5IGlzIE1TRlQtc3BlYWsgZm9yICJlbi11cyIpICovCisJCS8qIFNlZSBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kb2NzL1VTQl9MQU5HSURzLnBkZiAqLworCQlpZiAobGVuID4gNCkKKwkJCWxlbiA9IDQ7CisJCW1lbWNweShkYXRhLCBsYW5naWRzLCBsZW4pOwogCQlyZXR1cm4gbGVuOwotCi0JLy8gc2VyaWFsIG51bWJlcgotCX0gZWxzZSBpZiAoaWQgPT0gMSkgewotCQlzdHJsY3B5IChidWYsIGhjZC0+c2VsZi5idXNfbmFtZSwgc2l6ZW9mIGJ1Zik7Ci0KLQkvLyBwcm9kdWN0IGRlc2NyaXB0aW9uCi0JfSBlbHNlIGlmIChpZCA9PSAyKSB7Ci0JCXN0cmxjcHkgKGJ1ZiwgaGNkLT5wcm9kdWN0X2Rlc2MsIHNpemVvZiBidWYpOwotCi0gCS8vIGlkIDMgPT0gdmVuZG9yIGRlc2NyaXB0aW9uCi0JfSBlbHNlIGlmIChpZCA9PSAzKSB7CisJY2FzZSAxOgorCQkvKiBTZXJpYWwgbnVtYmVyICovCisJCXMgPSBoY2QtPnNlbGYuYnVzX25hbWU7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogUHJvZHVjdCBuYW1lICovCisJCXMgPSBoY2QtPnByb2R1Y3RfZGVzYzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkvKiBNYW51ZmFjdHVyZXIgKi8KIAkJc25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzICVzICVzIiwgaW5pdF91dHNuYW1lKCktPnN5c25hbWUsCiAJCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwgaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uKTsKKwkJcyA9IGJ1ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogQ2FuJ3QgaGFwcGVuOyBjYWxsZXIgZ3VhcmFudGVlcyBpdCAqLworCQlyZXR1cm4gMDsKIAl9CiAKLQlzd2l0Y2ggKGxlbikgewkJLyogQWxsIGNhc2VzIGZhbGwgdGhyb3VnaCAqLwotCWRlZmF1bHQ6Ci0JCWxlbiA9IDIgKyBhc2NpaTJ1dGYgKGJ1ZiwgZGF0YSArIDIsIGxlbiAtIDIpOwotCWNhc2UgMjoKLQkJZGF0YSBbMV0gPSAzOwkvKiB0eXBlID09IHN0cmluZyAqLwotCWNhc2UgMToKLQkJZGF0YSBbMF0gPSAyICogKHN0cmxlbiAoYnVmKSArIDEpOwotCWNhc2UgMDoKLQkJOwkJLyogQ29tcGlsZXIgd2FudHMgYSBzdGF0ZW1lbnQgaGVyZSAqLwotCX0KLQlyZXR1cm4gbGVuOworCXJldHVybiBhc2NpaTJkZXNjKHMsIGRhdGEsIGxlbik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggZWM1YzY3ZS4uNzk3ODJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC0yNjcsNiArMjY3LDExIEBACiAJdm9pZAkoKnJlc2V0X2JhbmR3aWR0aCkoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHVzYl9kZXZpY2UgKik7CiAJCS8qIFJldHVybnMgdGhlIGhhcmR3YXJlLWNob3NlbiBkZXZpY2UgYWRkcmVzcyAqLwogCWludAkoKmFkZHJlc3NfZGV2aWNlKShzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CisJCS8qIE5vdGlmaWVzIHRoZSBIQ0QgYWZ0ZXIgYSBodWIgZGVzY3JpcHRvciBpcyBmZXRjaGVkLgorCQkgKiBXaWxsIGJsb2NrLgorCQkgKi8KKwlpbnQJKCp1cGRhdGVfaHViX2RldmljZSkoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCisJCQlzdHJ1Y3QgdXNiX3R0ICp0dCwgZ2ZwX3QgbWVtX2ZsYWdzKTsKIH07CiAKIGV4dGVybiBpbnQgdXNiX2hjZF9saW5rX3VyYl90b19lcChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggNzFmODZjNi4uNWNlODM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC03OCw2ICs3OCw3IEBACiAJdTgJCQlpbmRpY2F0b3JbVVNCX01BWENISUxEUkVOXTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWxlZHM7CiAJc3RydWN0IGRlbGF5ZWRfd29yawlpbml0X3dvcms7CisJdm9pZAkJCSoqcG9ydF9vd25lcnM7CiB9OwogCiAKQEAgLTE2Miw4ICsxNjMsMTAgQEAKIH0KIAogLyogTm90ZSB0aGF0IGhkZXYgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBtdXN0IGJlIGxvY2tlZCEgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9odWIgKmhkZXZfdG9faHViKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQorc3RhdGljIHN0cnVjdCB1c2JfaHViICpoZGV2X3RvX2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldikKIHsKKwlpZiAoIWhkZXYgfHwgIWhkZXYtPmFjdGNvbmZpZykKKwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHVzYl9nZXRfaW50ZmRhdGEoaGRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0pOwogfQogCkBAIC0zNzIsNyArMzc1LDcgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJLyogU3VwcHJlc3MgYXV0b3N1c3BlbmQgdW50aWwga2h1YmQgcnVucyAqLwotCXRvX3VzYl9pbnRlcmZhY2UoaHViLT5pbnRmZGV2KS0+cG1fdXNhZ2VfY250ID0gMTsKKwlhdG9taWNfc2V0KCZ0b191c2JfaW50ZXJmYWNlKGh1Yi0+aW50ZmRldiktPnBtX3VzYWdlX2NudCwgMSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHViX2V2ZW50X2xvY2ssIGZsYWdzKTsKIAlpZiAoIWh1Yi0+ZGlzY29ubmVjdGVkICYmIGxpc3RfZW1wdHkoJmh1Yi0+ZXZlbnRfbGlzdCkpIHsKQEAgLTM4NCw4ICszODcsMTAgQEAKIAogdm9pZCB1c2Jfa2lja19raHViZChzdHJ1Y3QgdXNiX2RldmljZSAqaGRldikKIHsKLQkvKiBGSVhNRTogV2hhdCBpZiBoZGV2IGlzbid0IGJvdW5kIHRvIHRoZSBodWIgZHJpdmVyPyAqLwotCWtpY2tfa2h1YmQoaGRldl90b19odWIoaGRldikpOworCXN0cnVjdCB1c2JfaHViICpodWIgPSBoZGV2X3RvX2h1YihoZGV2KTsKKworCWlmIChodWIpCisJCWtpY2tfa2h1YmQoaHViKTsKIH0KIAogCkBAIC02NzcsNyArNjgyLDggQEAKIAkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheSkpOwogCiAJCQkvKiBTdXBwcmVzcyBhdXRvc3VzcGVuZCB1bnRpbCBpbml0IGlzIGRvbmUgKi8KLQkJCXRvX3VzYl9pbnRlcmZhY2UoaHViLT5pbnRmZGV2KS0+cG1fdXNhZ2VfY250ID0gMTsKKwkJCWF0b21pY19zZXQoJnRvX3VzYl9pbnRlcmZhY2UoaHViLT5pbnRmZGV2KS0+CisJCQkJCXBtX3VzYWdlX2NudCwgMSk7CiAJCQlyZXR1cm47CQkvKiBDb250aW51ZXMgYXQgaW5pdDI6IGJlbG93ICovCiAJCX0gZWxzZSB7CiAJCQlodWJfcG93ZXJfb24oaHViLCB0cnVlKTsKQEAgLTg1NCwyNSArODYwLDI0IEBACiBzdGF0aWMgaW50IGh1Yl9jb25maWd1cmUoc3RydWN0IHVzYl9odWIgKmh1YiwKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50KQogeworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CiAJc3RydWN0IGRldmljZSAqaHViX2RldiA9IGh1Yi0+aW50ZmRldjsKIAl1MTYgaHVic3RhdHVzLCBodWJjaGFuZ2U7CiAJdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3M7CiAJdW5zaWduZWQgaW50IHBpcGU7CiAJaW50IG1heHAsIHJldDsKLQljaGFyICptZXNzYWdlOworCWNoYXIgKm1lc3NhZ2UgPSAib3V0IG9mIG1lbW9yeSI7CiAKIAlodWItPmJ1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoaGRldiwgc2l6ZW9mKCpodWItPmJ1ZmZlciksIEdGUF9LRVJORUwsCiAJCQkmaHViLT5idWZmZXJfZG1hKTsKIAlpZiAoIWh1Yi0+YnVmZmVyKSB7Ci0JCW1lc3NhZ2UgPSAiY2FuJ3QgYWxsb2NhdGUgaHViIGlycSBidWZmZXIiOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCiAJaHViLT5zdGF0dXMgPSBrbWFsbG9jKHNpemVvZigqaHViLT5zdGF0dXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh1Yi0+c3RhdHVzKSB7Ci0JCW1lc3NhZ2UgPSAiY2FuJ3Qga21hbGxvYyBodWIgc3RhdHVzIGJ1ZmZlciI7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC04ODAsNyArODg1LDYgQEAKIAogCWh1Yi0+ZGVzY3JpcHRvciA9IGttYWxsb2Moc2l6ZW9mKCpodWItPmRlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh1Yi0+ZGVzY3JpcHRvcikgewotCQltZXNzYWdlID0gImNhbid0IGttYWxsb2MgaHViIGRlc2NyaXB0b3IiOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtOTA0LDYgKzkwOCwxMiBAQAogCWRldl9pbmZvIChodWJfZGV2LCAiJWQgcG9ydCVzIGRldGVjdGVkXG4iLCBoZGV2LT5tYXhjaGlsZCwKIAkJKGhkZXYtPm1heGNoaWxkID09IDEpID8gIiIgOiAicyIpOwogCisJaHViLT5wb3J0X293bmVycyA9IGt6YWxsb2MoaGRldi0+bWF4Y2hpbGQgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFodWItPnBvcnRfb3duZXJzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKIAl3SHViQ2hhcmFjdGVyaXN0aWNzID0gbGUxNl90b19jcHUoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKIAogCWlmICh3SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfQ09NUE9VTkQpIHsKQEAgLTEwNTIsNiArMTA2MiwxOSBAQAogCQlkZXZfZGJnKGh1Yl9kZXYsICIldW1BIGJ1cyBwb3dlciBidWRnZXQgZm9yIGVhY2ggY2hpbGRcbiIsCiAJCQkJaHViLT5tQV9wZXJfcG9ydCk7CiAKKwkvKiBVcGRhdGUgdGhlIEhDRCdzIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgaHViIGJlZm9yZSBraHViZAorCSAqIHN0YXJ0cyBnZXR0aW5nIHBvcnQgc3RhdHVzIGNoYW5nZXMgZm9yIGRldmljZXMgdW5kZXIgdGhlIGh1Yi4KKwkgKi8KKwloY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CisJaWYgKGhjZC0+ZHJpdmVyLT51cGRhdGVfaHViX2RldmljZSkgeworCQlyZXQgPSBoY2QtPmRyaXZlci0+dXBkYXRlX2h1Yl9kZXZpY2UoaGNkLCBoZGV2LAorCQkJCSZodWItPnR0LCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1lc3NhZ2UgPSAiY2FuJ3QgdXBkYXRlIEhDRCBodWIgaW5mbyI7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKIAlyZXQgPSBodWJfaHViX3N0YXR1cyhodWIsICZodWJzdGF0dXMsICZodWJjaGFuZ2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1lc3NhZ2UgPSAiY2FuJ3QgZ2V0IGh1YiBzdGF0dXMiOwpAQCAtMTA4Miw3ICsxMTA1LDYgQEAKIAogCWh1Yi0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh1Yi0+dXJiKSB7Ci0JCW1lc3NhZ2UgPSAiY291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0IHVyYiI7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0xMTMxLDExICsxMTUzLDEzIEBACiAJaHViX3F1aWVzY2UoaHViLCBIVUJfRElTQ09OTkVDVCk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlodWItPmhkZXYtPm1heGNoaWxkID0gMDsKIAogCWlmIChodWItPmhkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQloaWdoc3BlZWRfaHVicy0tOwogCiAJdXNiX2ZyZWVfdXJiKGh1Yi0+dXJiKTsKKwlrZnJlZShodWItPnBvcnRfb3duZXJzKTsKIAlrZnJlZShodWItPmRlc2NyaXB0b3IpOwogCWtmcmVlKGh1Yi0+c3RhdHVzKTsKIAl1c2JfYnVmZmVyX2ZyZWUoaHViLT5oZGV2LCBzaXplb2YoKmh1Yi0+YnVmZmVyKSwgaHViLT5idWZmZXIsCkBAIC0xMjUwLDYgKzEyNzQsNzkgQEAKIAl9CiB9CiAKKy8qCisgKiBBbGxvdyB1c2VyIHByb2dyYW1zIHRvIGNsYWltIHBvcnRzIG9uIGEgaHViLiAgV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZAorICogdG8gb25lIG9mIHRoZXNlICJjbGFpbWVkIiBwb3J0cywgdGhlIHByb2dyYW0gd2lsbCAib3duIiB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IGZpbmRfcG9ydF9vd25lcihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgdW5zaWduZWQgcG9ydDEsCisJCXZvaWQgKioqcHBvd25lcikKK3sKKwlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAocG9ydDEgPT0gMCB8fCBwb3J0MSA+IGhkZXYtPm1heGNoaWxkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoaXMgYXNzdW1lcyB0aGF0IGRldmljZXMgbm90IG1hbmFnZWQgYnkgdGhlIGh1YiBkcml2ZXIKKwkgKiB3aWxsIGFsd2F5cyBoYXZlIG1heGNoaWxkIGVxdWFsIHRvIDAuCisJICovCisJKnBwb3duZXIgPSAmKGhkZXZfdG9faHViKGhkZXYpLT5wb3J0X293bmVyc1twb3J0MSAtIDFdKTsKKwlyZXR1cm4gMDsKK30KKworLyogSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBmdW5jdGlvbnMsIHRoZSBjYWxsZXIgbXVzdCBob2xkIGhkZXYncyBsb2NrICovCitpbnQgdXNiX2h1Yl9jbGFpbV9wb3J0KHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB1bnNpZ25lZCBwb3J0MSwgdm9pZCAqb3duZXIpCit7CisJaW50IHJjOworCXZvaWQgKipwb3duZXI7CisKKwlyYyA9IGZpbmRfcG9ydF9vd25lcihoZGV2LCBwb3J0MSwgJnBvd25lcik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKCpwb3duZXIpCisJCXJldHVybiAtRUJVU1k7CisJKnBvd25lciA9IG93bmVyOworCXJldHVybiByYzsKK30KKworaW50IHVzYl9odWJfcmVsZWFzZV9wb3J0KHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB1bnNpZ25lZCBwb3J0MSwgdm9pZCAqb3duZXIpCit7CisJaW50IHJjOworCXZvaWQgKipwb3duZXI7CisKKwlyYyA9IGZpbmRfcG9ydF9vd25lcihoZGV2LCBwb3J0MSwgJnBvd25lcik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKCpwb3duZXIgIT0gb3duZXIpCisJCXJldHVybiAtRU5PRU5UOworCSpwb3duZXIgPSBOVUxMOworCXJldHVybiByYzsKK30KKwordm9pZCB1c2JfaHViX3JlbGVhc2VfYWxsX3BvcnRzKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB2b2lkICpvd25lcikKK3sKKwlpbnQgbjsKKwl2b2lkICoqcG93bmVyOworCisJbiA9IGZpbmRfcG9ydF9vd25lcihoZGV2LCAxLCAmcG93bmVyKTsKKwlpZiAobiA9PSAwKSB7CisJCWZvciAoOyBuIDwgaGRldi0+bWF4Y2hpbGQ7ICgrK24sICsrcG93bmVyKSkgeworCQkJaWYgKCpwb3duZXIgPT0gb3duZXIpCisJCQkJKnBvd25lciA9IE5VTEw7CisJCX0KKwl9Cit9CisKKy8qIFRoZSBjYWxsZXIgbXVzdCBob2xkIHVkZXYncyBsb2NrICovCitib29sIHVzYl9kZXZpY2VfaXNfb3duZWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YjsKKworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwgIXVkZXYtPnBhcmVudCkKKwkJcmV0dXJuIGZhbHNlOworCWh1YiA9IGhkZXZfdG9faHViKHVkZXYtPnBhcmVudCk7CisJcmV0dXJuICEhaHViLT5wb3J0X293bmVyc1t1ZGV2LT5wb3J0bnVtIC0gMV07Cit9CisKIAogc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKQEAgLTI4NDksMTQgKzI5NDYsNyBAQAogCQkJLyogRm9yIGEgc3VzcGVuZGVkIGRldmljZSwgdHJlYXQgdGhpcyBhcyBhCiAJCQkgKiByZW1vdGUgd2FrZXVwIGV2ZW50LgogCQkJICovCi0JCQlpZiAodWRldi0+ZG9fcmVtb3RlX3dha2V1cCkKLQkJCQlzdGF0dXMgPSByZW1vdGVfd2FrZXVwKHVkZXYpOwotCi0JCQkvKiBPdGhlcndpc2UgbGVhdmUgaXQgYmU7IGRldmljZXMgY2FuJ3QgdGVsbCB0aGUKLQkJCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiBzdXNwZW5kZWQgYW5kIGRpc2FibGVkLgotCQkJICovCi0JCQllbHNlCi0JCQkJc3RhdHVzID0gMDsKKwkJCXN0YXR1cyA9IHJlbW90ZV93YWtldXAodWRldik7CiAjZW5kaWYKIAogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IGZmZTc1ZTguLjk3YjQwY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNkZWZpbmUgVVNCRlNfREVGQVVMVF9CVVNNT0RFIChTX0lYVUdPIHwgU19JUlVHTykKICNkZWZpbmUgVVNCRlNfREVGQVVMVF9MSVNUTU9ERSBTX0lSVUdPCiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1c2Jmc19vcHM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZhdWx0X2ZpbGVfb3BlcmF0aW9uczsKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnVzYmZzX21vdW50Owogc3RhdGljIGludCB1c2Jmc19tb3VudF9jb3VudDsJLyogPSAwICovCkBAIC00NDksNyArNDQ4LDcgQEAKIAkubGxzZWVrID0JZGVmYXVsdF9maWxlX2xzZWVrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVzYmZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1c2Jmc19vcHMgPSB7CiAJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCiAJLmRyb3BfaW5vZGUgPQlnZW5lcmljX2RlbGV0ZV9pbm9kZSwKIAkucmVtb3VudF9mcyA9CXJlbW91bnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IDk3MjBlNjkuLmRhNzE4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC00NTksMzUgKzQ1OSwyMyBAQAogCQkJaW8tPnVyYnNbaV0tPmNvbnRleHQgPSBpbzsKIAogCQkJLyoKLQkJCSAqIFNvbWUgc3lzdGVtcyBuZWVkIHRvIHJldmVydCB0byBQSU8gd2hlbiBETUEgaXMKLQkJCSAqIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLiAgRm9yIHRoZWlyIHNha2VzLCBib3RoCi0JCQkgKiB0cmFuc2Zlcl9idWZmZXIgYW5kIHRyYW5zZmVyX2RtYSBhcmUgc2V0IHdoZW4KLQkJCSAqIHBvc3NpYmxlLiAgSG93ZXZlciB0aGlzIGNhbiBvbmx5IHdvcmsgb24gc3lzdGVtcwotCQkJICogd2l0aG91dDoKKwkJCSAqIFNvbWUgc3lzdGVtcyBuZWVkIHRvIHJldmVydCB0byBQSU8gd2hlbiBETUEgaXMgdGVtcG9yYXJpbHkKKwkJCSAqIHVuYXZhaWxhYmxlLiAgRm9yIHRoZWlyIHNha2VzLCBib3RoIHRyYW5zZmVyX2J1ZmZlciBhbmQKKwkJCSAqIHRyYW5zZmVyX2RtYSBhcmUgc2V0IHdoZW4gcG9zc2libGUuCiAJCQkgKgotCQkJICogIC0gSElHSE1FTSwgc2luY2UgRE1BIGJ1ZmZlcnMgbG9jYXRlZCBpbiBoaWdoIG1lbW9yeQotCQkJICogICAgYXJlIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZSBieSB0aGUgQ1BVIGZvciBQSU87Ci0JCQkgKgotCQkJICogIC0gSU9NTVUsIHNpbmNlIGRtYV9tYXBfc2coKSBpcyBhbGxvd2VkIHRvIHVzZSBhbgotCQkJICogICAgSU9NTVUgdG8gbWFrZSB2aXJ0dWFsbHkgZGlzY29udGlndW91cyBidWZmZXJzIGJlCi0JCQkgKiAgICAiZG1hLWNvbnRpZ3VvdXMiIHNvIHRoYXQgUElPIGFuZCBETUEgbmVlZCBkaWZlcmVudAotCQkJICogICAgbnVtYmVycyBvZiBVUkJzLgotCQkJICoKLQkJCSAqIFNvIHdoZW4gSElHSE1FTSBvciBJT01NVSBhcmUgaW4gdXNlLCB0cmFuc2Zlcl9idWZmZXIKLQkJCSAqIGlzIE5VTEwgdG8gcHJldmVudCBzdGFsZSBwb2ludGVycyBhbmQgdG8gaGVscCBzcG90Ci0JCQkgKiBidWdzLgorCQkJICogTm90ZSB0aGF0IGlmIElPTU1VIGNvYWxlc2Npbmcgb2NjdXJyZWQsIHdlIGNhbm5vdAorCQkJICogdHJ1c3Qgc2dfcGFnZSBhbnltb3JlLCBzbyBjaGVjayBpZiBTL0cgbGlzdCBzaHJ1bmsuCiAJCQkgKi8KKwkJCWlmIChpby0+bmVudHMgPT0gaW8tPmVudHJpZXMgJiYgIVBhZ2VIaWdoTWVtKHNnX3BhZ2Uoc2cpKSkKKwkJCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0gc2dfdmlydChzZyk7CisJCQllbHNlCisJCQkJaW8tPnVyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisKIAkJCWlmIChkbWEpIHsKIAkJCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfZG1hID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJCWxlbiA9IHNnX2RtYV9sZW4oc2cpOwotI2lmIGRlZmluZWQoQ09ORklHX0hJR0hNRU0pIHx8IGRlZmluZWQoQ09ORklHX0dBUlRfSU9NTVUpCi0JCQkJaW8tPnVyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7Ci0jZWxzZQotCQkJCWlvLT51cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPSBzZ192aXJ0KHNnKTsKLSNlbmRpZgogCQkJfSBlbHNlIHsKIAkJCQkvKiBoYyBtYXkgdXNlIF9vbmx5XyB0cmFuc2Zlcl9idWZmZXIgKi8KLQkJCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0gc2dfdmlydChzZyk7CiAJCQkJbGVuID0gc2ctPmxlbmd0aDsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKaW5kZXggYTI2ZjczOC4uYjFiODVhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCkBAIC0zMTEsNyArMzExLDcgQEAKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAogCi1zdGF0aWMgY2hhciAqdXNiX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICp1c2JfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIApAQCAtMzI0LDcgKzMyNCw3IEBACiAJLm5hbWUgPQkJInVzYl9kZXZpY2UiLAogCS5yZWxlYXNlID0JdXNiX3JlbGVhc2VfZGV2LAogCS51ZXZlbnQgPQl1c2JfZGV2X3VldmVudCwKLQkubm9kZW5hbWUgPSAJdXNiX25vZGVuYW1lLAorCS5kZXZub2RlID0gCXVzYl9kZXZub2RlLAogCS5wbSA9CQkmdXNiX2RldmljZV9wbV9vcHMsCiB9OwogCkBAIC00MTMsOCArNDEzLDEzIEBACiAJCX0gZWxzZSB7CiAJCQlzbnByaW50ZihkZXYtPmRldnBhdGgsIHNpemVvZiBkZXYtPmRldnBhdGgsCiAJCQkJIiVzLiVkIiwgcGFyZW50LT5kZXZwYXRoLCBwb3J0MSk7Ci0JCQlkZXYtPnJvdXRlID0gcGFyZW50LT5yb3V0ZSArCi0JCQkJKHBvcnQxIDw8ICgocGFyZW50LT5sZXZlbCAtIDEpKjQpKTsKKwkJCS8qIFJvdXRlIHN0cmluZyBhc3N1bWVzIGh1YnMgaGF2ZSBsZXNzIHRoYW4gMTYgcG9ydHMgKi8KKwkJCWlmIChwb3J0MSA8IDE1KQorCQkJCWRldi0+cm91dGUgPSBwYXJlbnQtPnJvdXRlICsKKwkJCQkJKHBvcnQxIDw8ICgocGFyZW50LT5sZXZlbCAtIDEpKjQpKTsKKwkJCWVsc2UKKwkJCQlkZXYtPnJvdXRlID0gcGFyZW50LT5yb3V0ZSArCisJCQkJCSgxNSA8PCAoKHBhcmVudC0+bGV2ZWwgLSAxKSo0KSk7CiAJCX0KIAogCQlkZXYtPmRldi5wYXJlbnQgPSAmcGFyZW50LT5kZXY7CkBAIC05MTQsMTEgKzkxOSwxMSBAQAogCQkJfHwgIShidXMgPSBkZXYtPmJ1cykKIAkJCXx8ICEoY29udHJvbGxlciA9IGJ1cy0+Y29udHJvbGxlcikKIAkJCXx8ICFjb250cm9sbGVyLT5kbWFfbWFzaykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEZJWE1FIGdlbmVyaWMgYXBpIGJyb2tlbiBsaWtlIHBjaSwgY2FuJ3QgcmVwb3J0IGVycm9ycyAqLwogCXJldHVybiBkbWFfbWFwX3NnKGNvbnRyb2xsZXIsIHNnLCBuZW50cywKLQkJCWlzX2luID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CisJCQlpc19pbiA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0UpID8gOiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2J1ZmZlcl9tYXBfc2cpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oIGIvZHJpdmVycy91c2IvY29yZS91c2IuaAppbmRleCBjMGUwYWUyLi45YThiMTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKQEAgLTM3LDYgKzM3LDEzIEBACiBleHRlcm4gdm9pZCB1c2JfZm9yY2VkX3VuYmluZF9pbnRmKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIGV4dGVybiB2b2lkIHVzYl9yZWJpbmRfaW50ZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAKK2V4dGVybiBpbnQgdXNiX2h1Yl9jbGFpbV9wb3J0KHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB1bnNpZ25lZCBwb3J0LAorCQl2b2lkICpvd25lcik7CitleHRlcm4gaW50IHVzYl9odWJfcmVsZWFzZV9wb3J0KHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB1bnNpZ25lZCBwb3J0LAorCQl2b2lkICpvd25lcik7CitleHRlcm4gdm9pZCB1c2JfaHViX3JlbGVhc2VfYWxsX3BvcnRzKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB2b2lkICpvd25lcik7CitleHRlcm4gYm9vbCB1c2JfZGV2aWNlX2lzX293bmVkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKKwogZXh0ZXJuIGludCAgdXNiX2h1Yl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdXNiX2h1Yl9jbGVhbnVwKHZvaWQpOwogZXh0ZXJuIGludCB1c2JfbWFqb3JfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2Vhcmx5L01ha2VmaWxlIGIvZHJpdmVycy91c2IvZWFybHkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlZGVlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2Vhcmx5L01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgZWFybHkgVVNCIGRldmljZXMKKyMKKworb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5US19EQkdQKSAgICAgICAgKz0gZWhjaS1kYmdwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jIGIvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwNmEyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCkBAIC0wLDAgKzEsOTk2IEBACisvKgorICogU3RhbmRhbG9uZSBFSENJIHVzYiBkZWJ1ZyBkcml2ZXIKKyAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnk6CisgKiAgRXJpYyBXLiBCaWVkZXJtYW4iIDxlYmllZGVybUB4bWlzc2lvbi5jb20+IGFuZAorICogIFlpbmdoYWkgTHUgPHlobHUua2VybmVsQGdtYWlsLmNvbT4KKyAqCisgKiBDaGFuZ2VzIGZvciBlYXJseS9sYXRlIHByaW50ayBhbmQgSFcgZXJyYXRhOgorICogIEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX3JlZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9laGNpX2RlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKy8qIFRoZSBjb2RlIGhlcmUgaXMgaW50ZW5kZWQgdG8gdGFsayBkaXJlY3RseSB0byB0aGUgRUhDSSBkZWJ1ZyBwb3J0CisgKiBhbmQgZG9lcyBub3QgcmVxdWlyZSB0aGF0IHlvdSBoYXZlIGFueSBraW5kIG9mIFVTQiBob3N0IGNvbnRyb2xsZXIKKyAqIGRyaXZlcnMgb3IgVVNCIGRldmljZSBkcml2ZXJzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4KKyAqCisgKiBJZiB5b3UgbWFrZSBhIGNoYW5nZSB0byBhbnl0aGluZyBpbiBoZXJlLCB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZXMKKyAqIG5lZWQgdG8gcGFzcyB3aGVyZSBhIFVTQiBkZWJ1ZyBkZXZpY2Ugd29ya3MgaW4gdGhlIGZvbGxvd2luZworICogY29uZmlndXJhdGlvbnMuCisgKgorICogMS4gYm9vdCBhcmdzOiAgZWFybHlwcmludGs9ZGJncAorICogICAgIG8ga2VybmVsIGNvbXBpbGVkIHdpdGggIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyAqICAgICBvIGtlcm5lbCBjb21waWxlZCB3aXRoIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQorICogMi4gYm9vdCBhcmdzOiBlYXJseXByaW50az1kYmdwLGtlZXAKKyAqICAgICBvIGtlcm5lbCBjb21waWxlZCB3aXRoICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisgKiAgICAgbyBrZXJuZWwgY29tcGlsZWQgd2l0aCBDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyAqIDMuIGJvb3QgYXJnczogZWFybHlwcmludGs9ZGJncCBjb25zb2xlPXR0eVVTQjAKKyAqICAgICBvIGtlcm5lbCBoYXMgQ09ORklHX1VTQl9FSENJX0hDRD15IGFuZAorICogICAgICAgQ09ORklHX1VTQl9TRVJJQUxfREVCVUc9eQorICogNC4gYm9vdCBhcmdzOiBlYXJseXByaW50az12Z2EsZGJncAorICogICAgIG8ga2VybmVsIGNvbXBpbGVkIHdpdGggIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyAqICAgICBvIGtlcm5lbCBjb21waWxlZCB3aXRoIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQorICoKKyAqIEZvciB0aGUgNHRoIGNvbmZpZ3VyYXRpb24geW91IGNhbiB0dXJuIG9uIG9yIG9mZiB0aGUgREJHUF9ERUJVRworICogc3VjaCB0aGF0IHlvdSBjYW4gZGVidWcgdGhlIGRiZ3AgZGV2aWNlJ3MgZHJpdmVyIGNvZGUuCisgKi8KKworc3RhdGljIGludCBkYmdwX3BoeXNfcG9ydCA9IDE7CisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9jYXBzIF9faW9tZW0gKmVoY2lfY2FwczsKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9yZWdzIF9faW9tZW0gKmVoY2lfcmVnczsKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9kYmdfcG9ydCBfX2lvbWVtICplaGNpX2RlYnVnOworc3RhdGljIGludCBkYmdwX25vdF9zYWZlOyAvKiBDYW5ub3QgdXNlIGRlYnVnIGRldmljZSBkdXJpbmcgZWhjaSByZXNldCAqLworc3RhdGljIHVuc2lnbmVkIGludCBkYmdwX2VuZHBvaW50X291dDsKKworc3RydWN0IGVoY2lfZGV2IHsKKwl1MzIgYnVzOworCXUzMiBzbG90OworCXUzMiBmdW5jOworfTsKKworc3RhdGljIHN0cnVjdCBlaGNpX2RldiBlaGNpX2RldjsKKworI2RlZmluZSBVU0JfREVCVUdfREVWTlVNIDEyNworCisjZGVmaW5lIERCR1BfREFUQV9UT0dHTEUJMHg4ODAwCisKKyNpZmRlZiBEQkdQX0RFQlVHCisjZGVmaW5lIGRiZ3BfcHJpbnRrIHByaW50aworc3RhdGljIHZvaWQgZGJncF9laGNpX3N0YXR1cyhjaGFyICpzdHIpCit7CisJaWYgKCFlaGNpX2RlYnVnKQorCQlyZXR1cm47CisJZGJncF9wcmludGsoImRiZ3A6ICVzXG4iLCBzdHIpOworCWRiZ3BfcHJpbnRrKCIgIERlYnVnIGNvbnRyb2w6ICUwOHgiLCByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCkpOworCWRiZ3BfcHJpbnRrKCIgIGVoY2kgY21kICAgICA6ICUwOHgiLCByZWFkbCgmZWhjaV9yZWdzLT5jb21tYW5kKSk7CisJZGJncF9wcmludGsoIiAgZWhjaSBjb25mIGZsZzogJTA4eFxuIiwKKwkJICAgIHJlYWRsKCZlaGNpX3JlZ3MtPmNvbmZpZ3VyZWRfZmxhZykpOworCWRiZ3BfcHJpbnRrKCIgIGVoY2kgc3RhdHVzICA6ICUwOHgiLCByZWFkbCgmZWhjaV9yZWdzLT5zdGF0dXMpKTsKKwlkYmdwX3ByaW50aygiICBlaGNpIHBvcnRzYyAgOiAlMDh4XG4iLAorCQkgICAgcmVhZGwoJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbZGJncF9waHlzX3BvcnQgLSAxXSkpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdwX2VoY2lfc3RhdHVzKGNoYXIgKnN0cikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJncF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pIHsgfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdTMyIGRiZ3BfcGlkX3VwZGF0ZSh1MzIgeCwgdTMyIHRvaykKK3sKKwlyZXR1cm4gKCh4IF4gREJHUF9EQVRBX1RPR0dMRSkgJiAweGZmZmYwMCkgfCAodG9rICYgMHhmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRiZ3BfbGVuX3VwZGF0ZSh1MzIgeCwgdTMyIGxlbikKK3sKKwlyZXR1cm4gKHggJiB+MHgwZikgfCAobGVuICYgMHgwZik7Cit9CisKKy8qCisgKiBVU0IgUGFja2V0IElEcyAoUElEcykKKyAqLworCisvKiB0b2tlbiAqLworI2RlZmluZSBVU0JfUElEX09VVAkJMHhlMQorI2RlZmluZSBVU0JfUElEX0lOCQkweDY5CisjZGVmaW5lIFVTQl9QSURfU09GCQkweGE1CisjZGVmaW5lIFVTQl9QSURfU0VUVVAJCTB4MmQKKy8qIGhhbmRzaGFrZSAqLworI2RlZmluZSBVU0JfUElEX0FDSwkJMHhkMgorI2RlZmluZSBVU0JfUElEX05BSwkJMHg1YQorI2RlZmluZSBVU0JfUElEX1NUQUxMCQkweDFlCisjZGVmaW5lIFVTQl9QSURfTllFVAkJMHg5NgorLyogZGF0YSAqLworI2RlZmluZSBVU0JfUElEX0RBVEEwCQkweGMzCisjZGVmaW5lIFVTQl9QSURfREFUQTEJCTB4NGIKKyNkZWZpbmUgVVNCX1BJRF9EQVRBMgkJMHg4NworI2RlZmluZSBVU0JfUElEX01EQVRBCQkweDBmCisvKiBTcGVjaWFsICovCisjZGVmaW5lIFVTQl9QSURfUFJFQU1CTEUJMHgzYworI2RlZmluZSBVU0JfUElEX0VSUgkJMHgzYworI2RlZmluZSBVU0JfUElEX1NQTElUCQkweDc4CisjZGVmaW5lIFVTQl9QSURfUElORwkJMHhiNAorI2RlZmluZSBVU0JfUElEX1VOREVGXzAJCTB4ZjAKKworI2RlZmluZSBVU0JfUElEX0RBVEFfVE9HR0xFCTB4ODgKKyNkZWZpbmUgREJHUF9DTEFJTSAoREJHUF9PV05FUiB8IERCR1BfRU5BQkxFRCB8IERCR1BfSU5VU0UpCisKKyNkZWZpbmUgUENJX0NBUF9JRF9FSENJX0RFQlVHCTB4YQorCisjZGVmaW5lIEhVQl9ST09UX1JFU0VUX1RJTUUJNTAJLyogdGltZXMgYXJlIGluIG1zZWMgKi8KKyNkZWZpbmUgSFVCX1NIT1JUX1JFU0VUX1RJTUUJMTAKKyNkZWZpbmUgSFVCX0xPTkdfUkVTRVRfVElNRQkyMDAKKyNkZWZpbmUgSFVCX1JFU0VUX1RJTUVPVVQJNTAwCisKKyNkZWZpbmUgREJHUF9NQVhfUEFDS0VUCQk4CisjZGVmaW5lIERCR1BfVElNRU9VVAkJKDI1MCAqIDEwMDApCisKK3N0YXRpYyBpbnQgZGJncF93YWl0X3VudGlsX2NvbXBsZXRlKHZvaWQpCit7CisJdTMyIGN0cmw7CisJaW50IGxvb3AgPSBEQkdQX1RJTUVPVVQ7CisKKwlkbyB7CisJCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJCS8qIFN0b3Agd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQgKi8KKwkJaWYgKGN0cmwgJiBEQkdQX0RPTkUpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcCA+IDApOworCisJaWYgKCFsb29wKQorCQlyZXR1cm4gLURCR1BfVElNRU9VVDsKKworCS8qCisJICogTm93IHRoYXQgd2UgaGF2ZSBvYnNlcnZlZCB0aGUgY29tcGxldGVkIHRyYW5zYWN0aW9uLAorCSAqIGNsZWFyIHRoZSBkb25lIGJpdC4KKwkgKi8KKwl3cml0ZWwoY3RybCB8IERCR1BfRE9ORSwgJmVoY2lfZGVidWctPmNvbnRyb2wpOworCXJldHVybiAoY3RybCAmIERCR1BfRVJST1IpID8gLURCR1BfRVJSQ09ERShjdHJsKSA6IERCR1BfTEVOKGN0cmwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGJncF9tZGVsYXkoaW50IG1zKQoreworCWludCBpOworCisJd2hpbGUgKG1zLS0pIHsKKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKwkJCW91dGIoMHgxLCAweDgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRiZ3BfYnJlYXRoKHZvaWQpCit7CisJLyogU2xlZXAgdG8gZ2l2ZSB0aGUgZGVidWcgcG9ydCBhIGNoYW5jZSB0byBicmVhdGhlICovCit9CisKK3N0YXRpYyBpbnQgZGJncF93YWl0X3VudGlsX2RvbmUodW5zaWduZWQgY3RybCkKK3sKKwl1MzIgcGlkcywgbHBpZDsKKwlpbnQgcmV0OworCWludCBsb29wID0gMzsKKworcmV0cnk6CisJd3JpdGVsKGN0cmwgfCBEQkdQX0dPLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJcmV0ID0gZGJncF93YWl0X3VudGlsX2NvbXBsZXRlKCk7CisJcGlkcyA9IHJlYWRsKCZlaGNpX2RlYnVnLT5waWRzKTsKKwlscGlkID0gREJHUF9QSURfR0VUKHBpZHMpOworCisJaWYgKHJldCA8IDApIHsKKwkJLyogQSAtREJHUF9USU1FT1VUIGZhaWx1cmUgaGVyZSBtZWFucyB0aGUgZGV2aWNlIGhhcworCQkgKiBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBpdCB3YXMgdW5wbHVnZ2VkLCBpbiB3aGljaAorCQkgKiBjYXNlIHdlIGRvIG5vdCB3YW50IHRvIGhhbmcgdGhlIHN5c3RlbSBzbyB0aGUgZGJncAorCQkgKiB3aWxsIGJlIG1hcmtlZCBhcyB1bnNhZmUgdG8gdXNlLiAgRUhDSSByZXNldCBpcyB0aGUKKwkJICogb25seSB3YXkgdG8gcmVjb3ZlciBpZiB5b3UgdW5wbHVnIHRoZSBkYmdwIGRldmljZS4KKwkJICovCisJCWlmIChyZXQgPT0gLURCR1BfVElNRU9VVCAmJiAhZGJncF9ub3Rfc2FmZSkKKwkJCWRiZ3Bfbm90X3NhZmUgPSAxOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogSWYgdGhlIHBvcnQgaXMgZ2V0dGluZyBmdWxsIG9yIGl0IGhhcyBkcm9wcGVkIGRhdGEKKwkgKiBzdGFydCBwYWNpbmcgb3Vyc2VsdmVzLCBub3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGZyaWVuZGx5LgorCSAqLworCWlmICgobHBpZCA9PSBVU0JfUElEX05BSykgfHwgKGxwaWQgPT0gVVNCX1BJRF9OWUVUKSkKKwkJZGJncF9icmVhdGgoKTsKKworCS8qIElmIEkgZ2V0IGEgTkFDSyByZWlzc3VlIHRoZSB0cmFuc21pc3Npb24gKi8KKwlpZiAobHBpZCA9PSBVU0JfUElEX05BSykgeworCQlpZiAoLS1sb29wID4gMCkKKwkJCWdvdG8gcmV0cnk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRiZ3Bfc2V0X2RhdGEoY29uc3Qgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcyA9IGJ1ZjsKKwl1MzIgbG8sIGhpOworCWludCBpOworCisJbG8gPSBoaSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDQgJiYgaSA8IHNpemU7IGkrKykKKwkJbG8gfD0gYnl0ZXNbaV0gPDwgKDgqaSk7CisJZm9yICg7IGkgPCA4ICYmIGkgPCBzaXplOyBpKyspCisJCWhpIHw9IGJ5dGVzW2ldIDw8ICg4KihpIC0gNCkpOworCXdyaXRlbChsbywgJmVoY2lfZGVidWctPmRhdGEwMyk7CisJd3JpdGVsKGhpLCAmZWhjaV9kZWJ1Zy0+ZGF0YTQ3KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRiZ3BfZ2V0X2RhdGEodm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpieXRlcyA9IGJ1ZjsKKwl1MzIgbG8sIGhpOworCWludCBpOworCisJbG8gPSByZWFkbCgmZWhjaV9kZWJ1Zy0+ZGF0YTAzKTsKKwloaSA9IHJlYWRsKCZlaGNpX2RlYnVnLT5kYXRhNDcpOworCWZvciAoaSA9IDA7IGkgPCA0ICYmIGkgPCBzaXplOyBpKyspCisJCWJ5dGVzW2ldID0gKGxvID4+ICg4KmkpKSAmIDB4ZmY7CisJZm9yICg7IGkgPCA4ICYmIGkgPCBzaXplOyBpKyspCisJCWJ5dGVzW2ldID0gKGhpID4+ICg4KihpIC0gNCkpKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgZGJncF9vdXQodTMyIGFkZHIsIGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKK3sKKwl1MzIgcGlkcywgY3RybDsKKworCXBpZHMgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+cGlkcyk7CisJcGlkcyA9IGRiZ3BfcGlkX3VwZGF0ZShwaWRzLCBVU0JfUElEX09VVCk7CisKKwljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOworCWN0cmwgPSBkYmdwX2xlbl91cGRhdGUoY3RybCwgc2l6ZSk7CisJY3RybCB8PSBEQkdQX09VVDsKKwljdHJsIHw9IERCR1BfR087CisKKwlkYmdwX3NldF9kYXRhKGJ5dGVzLCBzaXplKTsKKwl3cml0ZWwoYWRkciwgJmVoY2lfZGVidWctPmFkZHJlc3MpOworCXdyaXRlbChwaWRzLCAmZWhjaV9kZWJ1Zy0+cGlkcyk7CisJcmV0dXJuIGRiZ3Bfd2FpdF91bnRpbF9kb25lKGN0cmwpOworfQorCitzdGF0aWMgaW50IGRiZ3BfYnVsa193cml0ZSh1bnNpZ25lZCBkZXZudW0sIHVuc2lnbmVkIGVuZHBvaW50LAorCQkJIGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCWludCBsb29wcyA9IDU7CisJdTMyIGFkZHI7CisJaWYgKHNpemUgPiBEQkdQX01BWF9QQUNLRVQpCisJCXJldHVybiAtMTsKKworCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIGVuZHBvaW50KTsKK3RyeV9hZ2FpbjoKKwlpZiAobG9vcHMtLSkgeworCQlyZXQgPSBkYmdwX291dChhZGRyLCBieXRlcywgc2l6ZSk7CisJCWlmIChyZXQgPT0gLURCR1BfRVJSX0JBRCkgeworCQkJaW50IHRyeV9sb29wcyA9IDM7CisJCQlkbyB7CisJCQkJLyogRW1pdCBhIGR1bW15IHBhY2tldCB0byByZS1zeW5jIGNvbW11bmljYXRpb24KKwkJCQkgKiB3aXRoIHRoZSBkZWJ1ZyBkZXZpY2UgKi8KKwkJCQlpZiAoZGJncF9vdXQoYWRkciwgIjEyMzQ1Njc4IiwgOCkgPj0gMCkgeworCQkJCQl1ZGVsYXkoMik7CisJCQkJCWdvdG8gdHJ5X2FnYWluOworCQkJCX0KKwkJCX0gd2hpbGUgKHRyeV9sb29wcy0tKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGJncF9idWxrX3JlYWQodW5zaWduZWQgZGV2bnVtLCB1bnNpZ25lZCBlbmRwb2ludCwgdm9pZCAqZGF0YSwKKwkJCQkgaW50IHNpemUpCit7CisJdTMyIHBpZHMsIGFkZHIsIGN0cmw7CisJaW50IHJldDsKKworCWlmIChzaXplID4gREJHUF9NQVhfUEFDS0VUKQorCQlyZXR1cm4gLTE7CisKKwlhZGRyID0gREJHUF9FUEFERFIoZGV2bnVtLCBlbmRwb2ludCk7CisKKwlwaWRzID0gcmVhZGwoJmVoY2lfZGVidWctPnBpZHMpOworCXBpZHMgPSBkYmdwX3BpZF91cGRhdGUocGlkcywgVVNCX1BJRF9JTik7CisKKwljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOworCWN0cmwgPSBkYmdwX2xlbl91cGRhdGUoY3RybCwgc2l6ZSk7CisJY3RybCAmPSB+REJHUF9PVVQ7CisJY3RybCB8PSBEQkdQX0dPOworCisJd3JpdGVsKGFkZHIsICZlaGNpX2RlYnVnLT5hZGRyZXNzKTsKKwl3cml0ZWwocGlkcywgJmVoY2lfZGVidWctPnBpZHMpOworCXJldCA9IGRiZ3Bfd2FpdF91bnRpbF9kb25lKGN0cmwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNpemUgPiByZXQpCisJCXNpemUgPSByZXQ7CisJZGJncF9nZXRfZGF0YShkYXRhLCBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRiZ3BfY29udHJvbF9tc2codW5zaWduZWQgZGV2bnVtLCBpbnQgcmVxdWVzdHR5cGUsCisJaW50IHJlcXVlc3QsIGludCB2YWx1ZSwgaW50IGluZGV4LCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwl1MzIgcGlkcywgYWRkciwgY3RybDsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHJlcTsKKwlpbnQgcmVhZDsKKwlpbnQgcmV0OworCisJcmVhZCA9IChyZXF1ZXN0dHlwZSAmIFVTQl9ESVJfSU4pICE9IDA7CisJaWYgKHNpemUgPiAocmVhZCA/IERCR1BfTUFYX1BBQ0tFVDowKSkKKwkJcmV0dXJuIC0xOworCisJLyogQ29tcHV0ZSB0aGUgY29udHJvbCBtZXNzYWdlICovCisJcmVxLmJSZXF1ZXN0VHlwZSA9IHJlcXVlc3R0eXBlOworCXJlcS5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKKwlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOworCXJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwlwaWRzID0gREJHUF9QSURfU0VUKFVTQl9QSURfREFUQTAsIFVTQl9QSURfU0VUVVApOworCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIDApOworCisJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwljdHJsID0gZGJncF9sZW5fdXBkYXRlKGN0cmwsIHNpemVvZihyZXEpKTsKKwljdHJsIHw9IERCR1BfT1VUOworCWN0cmwgfD0gREJHUF9HTzsKKworCS8qIFNlbmQgdGhlIHNldHVwIG1lc3NhZ2UgKi8KKwlkYmdwX3NldF9kYXRhKCZyZXEsIHNpemVvZihyZXEpKTsKKwl3cml0ZWwoYWRkciwgJmVoY2lfZGVidWctPmFkZHJlc3MpOworCXdyaXRlbChwaWRzLCAmZWhjaV9kZWJ1Zy0+cGlkcyk7CisJcmV0ID0gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBSZWFkIHRoZSByZXN1bHQgKi8KKwlyZXR1cm4gZGJncF9idWxrX3JlYWQoZGV2bnVtLCAwLCBkYXRhLCBzaXplKTsKK30KKworCisvKiBGaW5kIGEgUENJIGNhcGFiaWxpdHkgKi8KK3N0YXRpYyB1MzIgX19pbml0IGZpbmRfY2FwKHUzMiBudW0sIHUzMiBzbG90LCB1MzIgZnVuYywgaW50IGNhcCkKK3sKKwl1OCBwb3M7CisJaW50IGJ5dGVzOworCisJaWYgKCEocmVhZF9wY2lfY29uZmlnXzE2KG51bSwgc2xvdCwgZnVuYywgUENJX1NUQVRVUykgJgorCQlQQ0lfU1RBVFVTX0NBUF9MSVNUKSkKKwkJcmV0dXJuIDA7CisKKwlwb3MgPSByZWFkX3BjaV9jb25maWdfYnl0ZShudW0sIHNsb3QsIGZ1bmMsIFBDSV9DQVBBQklMSVRZX0xJU1QpOworCWZvciAoYnl0ZXMgPSAwOyBieXRlcyA8IDQ4ICYmIHBvcyA+PSAweDQwOyBieXRlcysrKSB7CisJCXU4IGlkOworCisJCXBvcyAmPSB+MzsKKwkJaWQgPSByZWFkX3BjaV9jb25maWdfYnl0ZShudW0sIHNsb3QsIGZ1bmMsIHBvcytQQ0lfQ0FQX0xJU1RfSUQpOworCQlpZiAoaWQgPT0gMHhmZikKKwkJCWJyZWFrOworCQlpZiAoaWQgPT0gY2FwKQorCQkJcmV0dXJuIHBvczsKKworCQlwb3MgPSByZWFkX3BjaV9jb25maWdfYnl0ZShudW0sIHNsb3QsIGZ1bmMsCisJCQkJCQkgcG9zK1BDSV9DQVBfTElTVF9ORVhUKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgX19pbml0IF9fZmluZF9kYmdwKHUzMiBidXMsIHUzMiBzbG90LCB1MzIgZnVuYykKK3sKKwl1MzIgY2xhc3M7CisKKwljbGFzcyA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIGZ1bmMsIFBDSV9DTEFTU19SRVZJU0lPTik7CisJaWYgKChjbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9FSENJKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBmaW5kX2NhcChidXMsIHNsb3QsIGZ1bmMsIFBDSV9DQVBfSURfRUhDSV9ERUJVRyk7Cit9CisKK3N0YXRpYyB1MzIgX19pbml0IGZpbmRfZGJncChpbnQgZWhjaV9udW0sIHUzMiAqcmJ1cywgdTMyICpyc2xvdCwgdTMyICpyZnVuYykKK3sKKwl1MzIgYnVzLCBzbG90LCBmdW5jOworCisJZm9yIChidXMgPSAwOyBidXMgPCAyNTY7IGJ1cysrKSB7CisJCWZvciAoc2xvdCA9IDA7IHNsb3QgPCAzMjsgc2xvdCsrKSB7CisJCQlmb3IgKGZ1bmMgPSAwOyBmdW5jIDwgODsgZnVuYysrKSB7CisJCQkJdW5zaWduZWQgY2FwOworCisJCQkJY2FwID0gX19maW5kX2RiZ3AoYnVzLCBzbG90LCBmdW5jKTsKKworCQkJCWlmICghY2FwKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZWhjaV9udW0tLSAhPSAwKQorCQkJCQljb250aW51ZTsKKwkJCQkqcmJ1cyA9IGJ1czsKKwkJCQkqcnNsb3QgPSBzbG90OworCQkJCSpyZnVuYyA9IGZ1bmM7CisJCQkJcmV0dXJuIGNhcDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYmdwX2VoY2lfc3RhcnR1cCh2b2lkKQoreworCXUzMiBjdHJsLCBjbWQsIHN0YXR1czsKKwlpbnQgbG9vcDsKKworCS8qIENsYWltIG93bmVyc2hpcCwgYnV0IGRvIG5vdCBlbmFibGUgeWV0ICovCisJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwljdHJsIHw9IERCR1BfT1dORVI7CisJY3RybCAmPSB+KERCR1BfRU5BQkxFRCB8IERCR1BfSU5VU0UpOworCXdyaXRlbChjdHJsLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJdWRlbGF5KDEpOworCisJZGJncF9laGNpX3N0YXR1cygiRUhDSSBzdGFydHVwIik7CisJLyogU3RhcnQgdGhlIGVoY2kgcnVubmluZyAqLworCWNtZCA9IHJlYWRsKCZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCWNtZCAmPSB+KENNRF9MUkVTRVQgfCBDTURfSUFBRCB8IENNRF9QU0UgfCBDTURfQVNFIHwgQ01EX1JFU0VUKTsKKwljbWQgfD0gQ01EX1JVTjsKKwl3cml0ZWwoY21kLCAmZWhjaV9yZWdzLT5jb21tYW5kKTsKKworCS8qIEVuc3VyZSBldmVyeXRoaW5nIGlzIHJvdXRlZCB0byB0aGUgRUhDSSAqLworCXdyaXRlbChGTEFHX0NGLCAmZWhjaV9yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCisJLyogV2FpdCB1bnRpbCB0aGUgY29udHJvbGxlciBpcyBubyBsb25nZXIgaGFsdGVkICovCisJbG9vcCA9IDEwOworCWRvIHsKKwkJc3RhdHVzID0gcmVhZGwoJmVoY2lfcmVncy0+c3RhdHVzKTsKKwkJaWYgKCEoc3RhdHVzICYgU1RTX0hBTFQpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICgtLWxvb3AgPiAwKTsKKworCWlmICghbG9vcCkgeworCQlkYmdwX3ByaW50aygiZWhjaSBjYW4gbm90IGJlIHN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGJncF9wcmludGsoImVoY2kgc3RhcnRlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGJncF9laGNpX2NvbnRyb2xsZXJfcmVzZXQodm9pZCkKK3sKKwlpbnQgbG9vcCA9IDI1MCAqIDEwMDA7CisJdTMyIGNtZDsKKworCS8qIFJlc2V0IHRoZSBFSENJIGNvbnRyb2xsZXIgKi8KKwljbWQgPSByZWFkbCgmZWhjaV9yZWdzLT5jb21tYW5kKTsKKwljbWQgfD0gQ01EX1JFU0VUOworCXdyaXRlbChjbWQsICZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCWRvIHsKKwkJY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJfSB3aGlsZSAoKGNtZCAmIENNRF9SRVNFVCkgJiYgKC0tbG9vcCA+IDApKTsKKworCWlmICghbG9vcCkgeworCQlkYmdwX3ByaW50aygiY2FuIG5vdCByZXNldCBlaGNpXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlkYmdwX2VoY2lfc3RhdHVzKCJlaGNpIHJlc2V0IGRvbmUiKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgZWhjaV93YWl0X2Zvcl9wb3J0KGludCBwb3J0KTsKKy8qIFJldHVybiAwIG9uIHN1Y2Nlc3MKKyAqIFJldHVybiAtRU5PREVWIGZvciBhbnkgZ2VuZXJhbCBmYWlsdXJlCisgKiBSZXR1cm4gLUVJTyBpZiB3YWl0IGZvciBwb3J0IGZhaWxzCisgKi8KK2ludCBkYmdwX2V4dGVybmFsX3N0YXJ0dXAodm9pZCkKK3sKKwlpbnQgZGV2bnVtOworCXN0cnVjdCB1c2JfZGVidWdfZGVzY3JpcHRvciBkYmdwX2Rlc2M7CisJaW50IHJldDsKKwl1MzIgY3RybCwgcG9ydHNjLCBjbWQ7CisJaW50IGRiZ19wb3J0ID0gZGJncF9waHlzX3BvcnQ7CisJaW50IHRyaWVzID0gMzsKKwlpbnQgcmVzZXRfcG9ydF90cmllcyA9IDE7CisJaW50IHRyeV9oYXJkX29uY2UgPSAxOworCit0cnlfcG9ydF9yZXNldF9hZ2FpbjoKKwlyZXQgPSBkYmdwX2VoY2lfc3RhcnR1cCgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBXYWl0IGZvciBhIGRldmljZSB0byBzaG93IHVwIGluIHRoZSBkZWJ1ZyBwb3J0ICovCisJcmV0ID0gZWhjaV93YWl0X2Zvcl9wb3J0KGRiZ19wb3J0KTsKKwlpZiAocmV0IDwgMCkgeworCQlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1tkYmdfcG9ydCAtIDFdKTsKKwkJaWYgKCEocG9ydHNjICYgUE9SVF9DT05ORUNUKSAmJiB0cnlfaGFyZF9vbmNlKSB7CisJCQkvKiBMYXN0IGRpdGNoIGVmZm9ydCB0byB0cnkgdG8gZm9yY2UgZW5hYmxlCisJCQkgKiB0aGUgZGVidWcgZGV2aWNlIGJ5IHVzaW5nIHRoZSBwYWNrZXQgdGVzdAorCQkJICogZWhjaSBjb21tYW5kIHRvIHRyeSBhbmQgd2FrZSBpdCB1cC4gKi8KKwkJCXRyeV9oYXJkX29uY2UgPSAwOworCQkJY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJCQljbWQgJj0gfkNNRF9SVU47CisJCQl3cml0ZWwoY21kLCAmZWhjaV9yZWdzLT5jb21tYW5kKTsKKwkJCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2RiZ19wb3J0IC0gMV0pOworCQkJcG9ydHNjIHw9IFBPUlRfVEVTVF9QS1Q7CisJCQl3cml0ZWwocG9ydHNjLCAmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1tkYmdfcG9ydCAtIDFdKTsKKwkJCWRiZ3BfZWhjaV9zdGF0dXMoIlRyeWluZyB0byBmb3JjZSBkZWJ1ZyBwb3J0IG9ubGluZSIpOworCQkJbWRlbGF5KDUwKTsKKwkJCWRiZ3BfZWhjaV9jb250cm9sbGVyX3Jlc2V0KCk7CisJCQlnb3RvIHRyeV9wb3J0X3Jlc2V0X2FnYWluOworCQl9IGVsc2UgaWYgKHJlc2V0X3BvcnRfdHJpZXMtLSkgeworCQkJZ290byB0cnlfcG9ydF9yZXNldF9hZ2FpbjsKKwkJfQorCQlkYmdwX3ByaW50aygiTm8gZGV2aWNlIGZvdW5kIGluIGRlYnVnIHBvcnRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGJncF9laGNpX3N0YXR1cygid2FpdCBmb3IgcG9ydCBkb25lIik7CisKKwkvKiBFbmFibGUgdGhlIGRlYnVnIHBvcnQgKi8KKwljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOworCWN0cmwgfD0gREJHUF9DTEFJTTsKKwl3cml0ZWwoY3RybCwgJmVoY2lfZGVidWctPmNvbnRyb2wpOworCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJaWYgKChjdHJsICYgREJHUF9DTEFJTSkgIT0gREJHUF9DTEFJTSkgeworCQlkYmdwX3ByaW50aygiTm8gZGV2aWNlIGluIGRlYnVnIHBvcnRcbiIpOworCQl3cml0ZWwoY3RybCAmIH5EQkdQX0NMQUlNLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYmdwX2VoY2lfc3RhdHVzKCJkZWJ1ZyBwb3J0ZWQgZW5hYmxlZCIpOworCisJLyogQ29tcGxldGVseSB0cmFuc2ZlciB0aGUgZGVidWcgZGV2aWNlIHRvIHRoZSBkZWJ1ZyBjb250cm9sbGVyICovCisJcG9ydHNjID0gcmVhZGwoJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbZGJnX3BvcnQgLSAxXSk7CisJcG9ydHNjICY9IH5QT1JUX1BFOworCXdyaXRlbChwb3J0c2MsICZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2RiZ19wb3J0IC0gMV0pOworCisJZGJncF9tZGVsYXkoMTAwKTsKKwordHJ5X2FnYWluOgorCS8qIEZpbmQgdGhlIGRlYnVnIGRldmljZSBhbmQgbWFrZSBpdCBkZXZpY2UgbnVtYmVyIDEyNyAqLworCWZvciAoZGV2bnVtID0gMDsgZGV2bnVtIDw9IDEyNzsgZGV2bnVtKyspIHsKKwkJcmV0ID0gZGJncF9jb250cm9sX21zZyhkZXZudW0sCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJVVNCX1JFUV9HRVRfREVTQ1JJUFRPUiwgKFVTQl9EVF9ERUJVRyA8PCA4KSwgMCwKKwkJCSZkYmdwX2Rlc2MsIHNpemVvZihkYmdwX2Rlc2MpKTsKKwkJaWYgKHJldCA+IDApCisJCQlicmVhazsKKwl9CisJaWYgKGRldm51bSA+IDEyNykgeworCQlkYmdwX3ByaW50aygiQ291bGQgbm90IGZpbmQgYXR0YWNoZWQgZGVidWcgZGV2aWNlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCWlmIChyZXQgPCAwKSB7CisJCWRiZ3BfcHJpbnRrKCJBdHRhY2hlZCBkZXZpY2UgaXMgbm90IGEgZGVidWcgZGV2aWNlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCWRiZ3BfZW5kcG9pbnRfb3V0ID0gZGJncF9kZXNjLmJEZWJ1Z091dEVuZHBvaW50OworCisJLyogTW92ZSB0aGUgZGV2aWNlIHRvIDEyNyBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlICovCisJaWYgKGRldm51bSAhPSBVU0JfREVCVUdfREVWTlVNKSB7CisJCXJldCA9IGRiZ3BfY29udHJvbF9tc2coZGV2bnVtLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQlVU0JfUkVRX1NFVF9BRERSRVNTLCBVU0JfREVCVUdfREVWTlVNLCAwLCBOVUxMLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRiZ3BfcHJpbnRrKCJDb3VsZCBub3QgbW92ZSBhdHRhY2hlZCBkZXZpY2UgdG8gJWRcbiIsCisJCQkJVVNCX0RFQlVHX0RFVk5VTSk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlkZXZudW0gPSBVU0JfREVCVUdfREVWTlVNOworCQlkYmdwX3ByaW50aygiZGVidWcgZGV2aWNlIHJlbmFtZWQgdG8gMTI3XG4iKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIGRlYnVnIGludGVyZmFjZSAqLworCXJldCA9IGRiZ3BfY29udHJvbF9tc2coVVNCX0RFQlVHX0RFVk5VTSwKKwkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIFVTQl9ERVZJQ0VfREVCVUdfTU9ERSwgMCwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGJncF9wcmludGsoIiBDb3VsZCBub3QgZW5hYmxlIHRoZSBkZWJ1ZyBkZXZpY2VcbiIpOworCQlnb3RvIGVycjsKKwl9CisJZGJncF9wcmludGsoImRlYnVnIGludGVyZmFjZSBlbmFibGVkXG4iKTsKKwkvKiBQZXJmb3JtIGEgc21hbGwgd3JpdGUgdG8gZ2V0IHRoZSBldmVuL29kZCBkYXRhIHN0YXRlIGluIHN5bmMKKwkgKi8KKwlyZXQgPSBkYmdwX2J1bGtfd3JpdGUoVVNCX0RFQlVHX0RFVk5VTSwgZGJncF9lbmRwb2ludF9vdXQsICIgIiwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGJncF9wcmludGsoImRiZ3BfYnVsa193cml0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisJZGJncF9wcmludGsoInNtYWxsIHdyaXRlIGRvbmVkXG4iKTsKKwlkYmdwX25vdF9zYWZlID0gMDsKKworCXJldHVybiAwOworZXJyOgorCWlmICh0cmllcy0tKQorCQlnb3RvIHRyeV9hZ2FpbjsKKwlyZXR1cm4gLUVOT0RFVjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGVoY2lfcmVzZXRfcG9ydChpbnQgcG9ydCkKK3sKKwl1MzIgcG9ydHNjOworCXUzMiBkZWxheV90aW1lLCBkZWxheTsKKwlpbnQgbG9vcDsKKworCWRiZ3BfZWhjaV9zdGF0dXMoInJlc2V0IHBvcnQiKTsKKwkvKiBSZXNldCB0aGUgdXNiIGRlYnVnIHBvcnQgKi8KKwlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0IC0gMV0pOworCXBvcnRzYyAmPSB+UE9SVF9QRTsKKwlwb3J0c2MgfD0gUE9SVF9SRVNFVDsKKwl3cml0ZWwocG9ydHNjLCAmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0IC0gMV0pOworCisJZGVsYXkgPSBIVUJfUk9PVF9SRVNFVF9USU1FOworCWZvciAoZGVsYXlfdGltZSA9IDA7IGRlbGF5X3RpbWUgPCBIVUJfUkVTRVRfVElNRU9VVDsKKwkgICAgIGRlbGF5X3RpbWUgKz0gZGVsYXkpIHsKKwkJZGJncF9tZGVsYXkoZGVsYXkpOworCQlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0IC0gMV0pOworCQlpZiAoIShwb3J0c2MgJiBQT1JUX1JFU0VUKSkKKwkJCWJyZWFrOworCX0KKwkJaWYgKHBvcnRzYyAmIFBPUlRfUkVTRVQpIHsKKwkJCS8qIGZvcmNlIHJlc2V0IHRvIGNvbXBsZXRlICovCisJCQlsb29wID0gMTAwICogMTAwMDsKKwkJCXdyaXRlbChwb3J0c2MgJiB+KFBPUlRfUldDX0JJVFMgfCBQT1JUX1JFU0VUKSwKKwkJCQkmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0IC0gMV0pOworCQkJZG8geworCQkJCXVkZWxheSgxKTsKKwkJCQlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0LTFdKTsKKwkJCX0gd2hpbGUgKChwb3J0c2MgJiBQT1JUX1JFU0VUKSAmJiAoLS1sb29wID4gMCkpOworCQl9CisKKwkJLyogRGV2aWNlIHdlbnQgYXdheT8gKi8KKwkJaWYgKCEocG9ydHNjICYgUE9SVF9DT05ORUNUKSkKKwkJCXJldHVybiAtRU5PVENPTk47CisKKwkJLyogYm9tYiBvdXQgY29tcGxldGVseSBpZiBzb21ldGhpbmcgd2VpcmQgaGFwcGVuZCAqLworCQlpZiAoKHBvcnRzYyAmIFBPUlRfQ1NDKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIElmIHdlJ3ZlIGZpbmlzaGVkIHJlc2V0dGluZywgdGhlbiBicmVhayBvdXQgb2YgdGhlIGxvb3AgKi8KKwkJaWYgKCEocG9ydHNjICYgUE9SVF9SRVNFVCkgJiYgKHBvcnRzYyAmIFBPUlRfUEUpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCBlaGNpX3dhaXRfZm9yX3BvcnQoaW50IHBvcnQpCit7CisJdTMyIHN0YXR1czsKKwlpbnQgcmV0LCByZXBzOworCisJZm9yIChyZXBzID0gMDsgcmVwcyA8IDMwMDsgcmVwcysrKSB7CisJCXN0YXR1cyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBTVFNfUENEKQorCQkJYnJlYWs7CisJCWRiZ3BfbWRlbGF5KDEpOworCX0KKwlyZXQgPSBlaGNpX3Jlc2V0X3BvcnQocG9ydCk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVOT1RDT05OOworfQorCit0eXBlZGVmIHZvaWQgKCpzZXRfZGVidWdfcG9ydF90KShpbnQgcG9ydCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0KGludCBwb3J0KQoreworfQorCitzdGF0aWMgc2V0X2RlYnVnX3BvcnRfdCBfX2luaXRkYXRhIHNldF9kZWJ1Z19wb3J0ID0gZGVmYXVsdF9zZXRfZGVidWdfcG9ydDsKKworc3RhdGljIHZvaWQgX19pbml0IG52aWRpYV9zZXRfZGVidWdfcG9ydChpbnQgcG9ydCkKK3sKKwl1MzIgZHdvcmQ7CisJZHdvcmQgPSByZWFkX3BjaV9jb25maWcoZWhjaV9kZXYuYnVzLCBlaGNpX2Rldi5zbG90LCBlaGNpX2Rldi5mdW5jLAorCQkJCSAweDc0KTsKKwlkd29yZCAmPSB+KDB4MGY8PDEyKTsKKwlkd29yZCB8PSAoKHBvcnQgJiAweDBmKTw8MTIpOworCXdyaXRlX3BjaV9jb25maWcoZWhjaV9kZXYuYnVzLCBlaGNpX2Rldi5zbG90LCBlaGNpX2Rldi5mdW5jLCAweDc0LAorCQkJCSBkd29yZCk7CisJZGJncF9wcmludGsoInNldCBkZWJ1ZyBwb3J0IHRvICVkXG4iLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGRldGVjdF9zZXRfZGVidWdfcG9ydCh2b2lkKQoreworCXUzMiB2ZW5kb3JpZDsKKworCXZlbmRvcmlkID0gcmVhZF9wY2lfY29uZmlnKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwgZWhjaV9kZXYuZnVuYywKKwkJIDB4MDApOworCisJaWYgKCh2ZW5kb3JpZCAmIDB4ZmZmZikgPT0gMHgxMGRlKSB7CisJCWRiZ3BfcHJpbnRrKCJ1c2luZyBudmlkaWEgc2V0X2RlYnVnX3BvcnRcbiIpOworCQlzZXRfZGVidWdfcG9ydCA9IG52aWRpYV9zZXRfZGVidWdfcG9ydDsKKwl9Cit9CisKKy8qIFRoZSBjb2RlIGluIGVhcmx5X2VoY2lfYmlvc19oYW5kb2ZmKCkgaXMgZGVyaXZlZCBmcm9tIHRoZSB1c2IgcGNpCisgKiBxdWlyayBpbml0aWFsaXphdGlvbiwgYnV0IGFsdGVyZWQgc28gYXMgdG8gdXNlIHRoZSBlYXJseSBQQ0kKKyAqIHJvdXRpbmVzLiAqLworI2RlZmluZSBFSENJX1VTQkxFR1NVUF9CSU9TCSgxIDw8IDE2KQkvKiBCSU9TIHNlbWFwaG9yZSAqLworI2RlZmluZSBFSENJX1VTQkxFR0NUTFNUUwk0CQkvKiBsZWdhY3kgY29udHJvbC9zdGF0dXMgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9laGNpX2Jpb3NfaGFuZG9mZih2b2lkKQoreworCXUzMiBoY2NfcGFyYW1zID0gcmVhZGwoJmVoY2lfY2Fwcy0+aGNjX3BhcmFtcyk7CisJaW50IG9mZnNldCA9IChoY2NfcGFyYW1zID4+IDgpICYgMHhmZjsKKwl1MzIgY2FwOworCWludCBtc2VjOworCisJaWYgKCFvZmZzZXQpCisJCXJldHVybjsKKworCWNhcCA9IHJlYWRfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsCisJCQkgICAgICBlaGNpX2Rldi5mdW5jLCBvZmZzZXQpOworCWRiZ3BfcHJpbnRrKCJkYmdwOiBlaGNpIEJJT1Mgc3RhdGUgJTA4eFxuIiwgY2FwKTsKKworCWlmICgoY2FwICYgMHhmZikgPT0gMSAmJiAoY2FwICYgRUhDSV9VU0JMRUdTVVBfQklPUykpIHsKKwkJZGJncF9wcmludGsoImRiZ3A6IEJJT1MgaGFuZG9mZlxuIik7CisJCXdyaXRlX3BjaV9jb25maWdfYnl0ZShlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsCisJCQkJICAgICAgZWhjaV9kZXYuZnVuYywgb2Zmc2V0ICsgMywgMSk7CisJfQorCisJLyogaWYgYm9vdCBmaXJtd2FyZSBub3cgb3ducyBFSENJLCBzcGluIHRpbGwgaXQgaGFuZHMgaXQgb3Zlci4gKi8KKwltc2VjID0gMTAwMDsKKwl3aGlsZSAoKGNhcCAmIEVIQ0lfVVNCTEVHU1VQX0JJT1MpICYmIChtc2VjID4gMCkpIHsKKwkJbWRlbGF5KDEwKTsKKwkJbXNlYyAtPSAxMDsKKwkJY2FwID0gcmVhZF9wY2lfY29uZmlnKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwKKwkJCQkgICAgICBlaGNpX2Rldi5mdW5jLCBvZmZzZXQpOworCX0KKworCWlmIChjYXAgJiBFSENJX1VTQkxFR1NVUF9CSU9TKSB7CisJCS8qIHdlbGwsIHBvc3NpYmx5IGJ1Z2d5IEJJT1MuLi4gdHJ5IHRvIHNodXQgaXQgZG93biwKKwkJICogYW5kIGhvcGUgbm90aGluZyBnb2VzIHRvbyB3cm9uZyAqLworCQlkYmdwX3ByaW50aygiZGJncDogQklPUyBoYW5kb2ZmIGZhaWxlZDogJTA4eFxuIiwgY2FwKTsKKwkJd3JpdGVfcGNpX2NvbmZpZ19ieXRlKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwKKwkJCQkgICAgICBlaGNpX2Rldi5mdW5jLCBvZmZzZXQgKyAyLCAwKTsKKwl9CisKKwkvKiBqdXN0IGluIGNhc2UsIGFsd2F5cyBkaXNhYmxlIEVIQ0kgU01JcyAqLworCXdyaXRlX3BjaV9jb25maWdfYnl0ZShlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsCisJCQkgICAgICBvZmZzZXQgKyBFSENJX1VTQkxFR0NUTFNUUywgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGVoY2lfc2V0dXAodm9pZCkKK3sKKwl1MzIgY3RybCwgcG9ydHNjLCBoY3NfcGFyYW1zOworCXUzMiBkZWJ1Z19wb3J0LCBuZXdfZGVidWdfcG9ydCA9IDAsIG5fcG9ydHM7CisJaW50IHJldCwgaTsKKwlpbnQgcG9ydF9tYXBfdHJpZWQ7CisJaW50IHBsYXl0aW1lcyA9IDM7CisKKwllYXJseV9laGNpX2Jpb3NfaGFuZG9mZigpOworCit0cnlfbmV4dF90aW1lOgorCXBvcnRfbWFwX3RyaWVkID0gMDsKKwordHJ5X25leHRfcG9ydDoKKworCWhjc19wYXJhbXMgPSByZWFkbCgmZWhjaV9jYXBzLT5oY3NfcGFyYW1zKTsKKwlkZWJ1Z19wb3J0ID0gSENTX0RFQlVHX1BPUlQoaGNzX3BhcmFtcyk7CisJZGJncF9waHlzX3BvcnQgPSBkZWJ1Z19wb3J0OworCW5fcG9ydHMgICAgPSBIQ1NfTl9QT1JUUyhoY3NfcGFyYW1zKTsKKworCWRiZ3BfcHJpbnRrKCJkZWJ1Z19wb3J0OiAlZFxuIiwgZGVidWdfcG9ydCk7CisJZGJncF9wcmludGsoIm5fcG9ydHM6ICAgICVkXG4iLCBuX3BvcnRzKTsKKwlkYmdwX2VoY2lfc3RhdHVzKCIiKTsKKworCWZvciAoaSA9IDE7IGkgPD0gbl9wb3J0czsgaSsrKSB7CisJCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2ktMV0pOworCQlkYmdwX3ByaW50aygicG9ydHN0YXR1cyVkOiAlMDh4XG4iLCBpLCBwb3J0c2MpOworCX0KKworCWlmIChwb3J0X21hcF90cmllZCAmJiAobmV3X2RlYnVnX3BvcnQgIT0gZGVidWdfcG9ydCkpIHsKKwkJaWYgKC0tcGxheXRpbWVzKSB7CisJCQlzZXRfZGVidWdfcG9ydChuZXdfZGVidWdfcG9ydCk7CisJCQlnb3RvIHRyeV9uZXh0X3RpbWU7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE9ubHkgcmVzZXQgdGhlIGNvbnRyb2xsZXIgaWYgaXQgaXMgbm90IGFscmVhZHkgaW4gdGhlCisJICogY29uZmlndXJlZCBzdGF0ZSAqLworCWlmICghKHJlYWRsKCZlaGNpX3JlZ3MtPmNvbmZpZ3VyZWRfZmxhZykgJiBGTEFHX0NGKSkgeworCQlpZiAoZGJncF9laGNpX2NvbnRyb2xsZXJfcmVzZXQoKSAhPSAwKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCWRiZ3BfZWhjaV9zdGF0dXMoImVoY2kgc2tpcCAtIGFscmVhZHkgY29uZmlndXJlZCIpOworCX0KKworCXJldCA9IGRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCgpOworCWlmIChyZXQgPT0gLUVJTykKKwkJZ290byBuZXh0X2RlYnVnX3BvcnQ7CisKKwlpZiAocmV0IDwgMCkgeworCQkvKiBUaGluZ3MgZGlkbid0IHdvcmsgc28gcmVtb3ZlIG15IGNsYWltICovCisJCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJCWN0cmwgJj0gfihEQkdQX0NMQUlNIHwgREJHUF9PVVQpOworCQl3cml0ZWwoY3RybCwgJmVoY2lfZGVidWctPmNvbnRyb2wpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworCituZXh0X2RlYnVnX3BvcnQ6CisJcG9ydF9tYXBfdHJpZWQgfD0gKDE8PChkZWJ1Z19wb3J0IC0gMSkpOworCW5ld19kZWJ1Z19wb3J0ID0gKChkZWJ1Z19wb3J0LTErMSklbl9wb3J0cykgKyAxOworCWlmIChwb3J0X21hcF90cmllZCAhPSAoKDE8PG5fcG9ydHMpIC0gMSkpIHsKKwkJc2V0X2RlYnVnX3BvcnQobmV3X2RlYnVnX3BvcnQpOworCQlnb3RvIHRyeV9uZXh0X3BvcnQ7CisJfQorCWlmICgtLXBsYXl0aW1lcykgeworCQlzZXRfZGVidWdfcG9ydChuZXdfZGVidWdfcG9ydCk7CisJCWdvdG8gdHJ5X25leHRfdGltZTsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBfX2luaXQgZWFybHlfZGJncF9pbml0KGNoYXIgKnMpCit7CisJdTMyIGRlYnVnX3BvcnQsIGJhciwgb2Zmc2V0OworCXUzMiBidXMsIHNsb3QsIGZ1bmMsIGNhcDsKKwl2b2lkIF9faW9tZW0gKmVoY2lfYmFyOworCXUzMiBkYmdwX251bTsKKwl1MzIgYmFyX3ZhbDsKKwljaGFyICplOworCWludCByZXQ7CisJdTggYnl0ZTsKKworCWlmICghZWFybHlfcGNpX2FsbG93ZWQoKSkKKwkJcmV0dXJuIC0xOworCisJZGJncF9udW0gPSAwOworCWlmICgqcykKKwkJZGJncF9udW0gPSBzaW1wbGVfc3RydG91bChzLCAmZSwgMTApOworCWRiZ3BfcHJpbnRrKCJkYmdwX251bTogJWRcbiIsIGRiZ3BfbnVtKTsKKworCWNhcCA9IGZpbmRfZGJncChkYmdwX251bSwgJmJ1cywgJnNsb3QsICZmdW5jKTsKKwlpZiAoIWNhcCkKKwkJcmV0dXJuIC0xOworCisJZGJncF9wcmludGsoIkZvdW5kIEVIQ0kgZGVidWcgcG9ydCBvbiAlMDJ4OiUwMnguJTF4XG4iLCBidXMsIHNsb3QsCisJCQkgZnVuYyk7CisKKwlkZWJ1Z19wb3J0ID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgY2FwKTsKKwliYXIgPSAoZGVidWdfcG9ydCA+PiAyOSkgJiAweDc7CisJYmFyID0gKGJhciAqIDQpICsgMHhjOworCW9mZnNldCA9IChkZWJ1Z19wb3J0ID4+IDE2KSAmIDB4ZmZmOworCWRiZ3BfcHJpbnRrKCJiYXI6ICUwMnggb2Zmc2V0OiAlMDN4XG4iLCBiYXIsIG9mZnNldCk7CisJaWYgKGJhciAhPSBQQ0lfQkFTRV9BRERSRVNTXzApIHsKKwkJZGJncF9wcmludGsoIm9ubHkgZGVidWcgcG9ydHMgb24gYmFyIDEgaGFuZGxlZC5cbiIpOworCisJCXJldHVybiAtMTsKKwl9CisKKwliYXJfdmFsID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0JBU0VfQUREUkVTU18wKTsKKwlkYmdwX3ByaW50aygiYmFyX3ZhbDogJTAyeCBvZmZzZXQ6ICUwM3hcbiIsIGJhcl92YWwsIG9mZnNldCk7CisJaWYgKGJhcl92YWwgJiB+UENJX0JBU0VfQUREUkVTU19NRU1fTUFTSykgeworCQlkYmdwX3ByaW50aygib25seSBzaW1wbGUgMzJiaXQgbW1pbyBiYXJzIHN1cHBvcnRlZFxuIik7CisKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGRvdWJsZSBjaGVjayBpZiB0aGUgbWVtIHNwYWNlIGlzIGVuYWJsZWQgKi8KKwlieXRlID0gcmVhZF9wY2lfY29uZmlnX2J5dGUoYnVzLCBzbG90LCBmdW5jLCAweDA0KTsKKwlpZiAoIShieXRlICYgMHgyKSkgeworCQlieXRlICB8PSAweDAyOworCQl3cml0ZV9wY2lfY29uZmlnX2J5dGUoYnVzLCBzbG90LCBmdW5jLCAweDA0LCBieXRlKTsKKwkJZGJncF9wcmludGsoIm1taW8gZm9yIGVoY2kgZW5hYmxlZFxuIik7CisJfQorCisJLyoKKwkgKiBGSVhNRSBJIGRvbid0IGhhdmUgdGhlIGJhciBzaXplIHNvIGp1c3QgZ3Vlc3MgUEFHRV9TSVpFIGlzIG1vcmUKKwkgKiB0aGFuIGVub3VnaC4gIDFLIGlzIHRoZSBiaWdnZXN0IEkgaGF2ZSBzZWVuLgorCSAqLworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfREJHUF9CQVNFLCBiYXJfdmFsICYgUEFHRV9NQVNLKTsKKwllaGNpX2JhciA9ICh2b2lkIF9faW9tZW0gKilfX2ZpeF90b192aXJ0KEZJWF9EQkdQX0JBU0UpOworCWVoY2lfYmFyICs9IGJhcl92YWwgJiB+UEFHRV9NQVNLOworCWRiZ3BfcHJpbnRrKCJlaGNpX2JhcjogJXBcbiIsIGVoY2lfYmFyKTsKKworCWVoY2lfY2FwcyAgPSBlaGNpX2JhcjsKKwllaGNpX3JlZ3MgID0gZWhjaV9iYXIgKyBIQ19MRU5HVEgocmVhZGwoJmVoY2lfY2Fwcy0+aGNfY2FwYmFzZSkpOworCWVoY2lfZGVidWcgPSBlaGNpX2JhciArIG9mZnNldDsKKwllaGNpX2Rldi5idXMgPSBidXM7CisJZWhjaV9kZXYuc2xvdCA9IHNsb3Q7CisJZWhjaV9kZXYuZnVuYyA9IGZ1bmM7CisKKwlkZXRlY3Rfc2V0X2RlYnVnX3BvcnQoKTsKKworCXJldCA9IGVoY2lfc2V0dXAoKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmdwX3ByaW50aygiZWhjaV9zZXR1cCBmYWlsZWRcbiIpOworCQllaGNpX2RlYnVnID0gTlVMTDsKKworCQlyZXR1cm4gLTE7CisJfQorCWRiZ3BfZWhjaV9zdGF0dXMoImVhcmx5X2luaXRfY29tcGxldGUiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlYXJseV9kYmdwX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKnN0ciwgdTMyIG4pCit7CisJaW50IGNodW5rLCByZXQ7CisJY2hhciBidWZbREJHUF9NQVhfUEFDS0VUXTsKKwlpbnQgdXNlX2NyID0gMDsKKwl1MzIgY21kLCBjdHJsOworCWludCByZXNldF9ydW4gPSAwOworCisJaWYgKCFlaGNpX2RlYnVnIHx8IGRiZ3Bfbm90X3NhZmUpCisJCXJldHVybjsKKworCWNtZCA9IHJlYWRsKCZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCWlmICh1bmxpa2VseSghKGNtZCAmIENNRF9SVU4pKSkgeworCQkvKiBJZiB0aGUgZWhjaSBjb250cm9sbGVyIGlzIG5vdCBpbiB0aGUgcnVuIHN0YXRlIGRvIGV4dGVuZGVkCisJCSAqIGNoZWNrcyB0byBzZWUgaWYgdGhlIGFjcGkgb3Igc29tZSBvdGhlciBpbml0aWFsaXphdGlvbiBhbHNvCisJCSAqIHJlc2V0IHRoZSBlaGNpIGRlYnVnIHBvcnQgKi8KKwkJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwkJaWYgKCEoY3RybCAmIERCR1BfRU5BQkxFRCkpIHsKKwkJCWRiZ3Bfbm90X3NhZmUgPSAxOworCQkJZGJncF9leHRlcm5hbF9zdGFydHVwKCk7CisJCX0gZWxzZSB7CisJCQljbWQgfD0gQ01EX1JVTjsKKwkJCXdyaXRlbChjbWQsICZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCQkJcmVzZXRfcnVuID0gMTsKKwkJfQorCX0KKwl3aGlsZSAobiA+IDApIHsKKwkJZm9yIChjaHVuayA9IDA7IGNodW5rIDwgREJHUF9NQVhfUEFDS0VUICYmIG4gPiAwOworCQkgICAgIHN0cisrLCBjaHVuaysrLCBuLS0pIHsKKwkJCWlmICghdXNlX2NyICYmICpzdHIgPT0gJ1xuJykgeworCQkJCXVzZV9jciA9IDE7CisJCQkJYnVmW2NodW5rXSA9ICdccic7CisJCQkJc3RyLS07CisJCQkJbisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHVzZV9jcikKKwkJCQl1c2VfY3IgPSAwOworCQkJYnVmW2NodW5rXSA9ICpzdHI7CisJCX0KKwkJaWYgKGNodW5rID4gMCkgeworCQkJcmV0ID0gZGJncF9idWxrX3dyaXRlKFVTQl9ERUJVR19ERVZOVU0sCisJCQkJICAgICAgZGJncF9lbmRwb2ludF9vdXQsIGJ1ZiwgY2h1bmspOworCQl9CisJfQorCWlmICh1bmxpa2VseShyZXNldF9ydW4pKSB7CisJCWNtZCA9IHJlYWRsKCZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCQljbWQgJj0gfkNNRF9SVU47CisJCXdyaXRlbChjbWQsICZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCX0KK30KKworc3RydWN0IGNvbnNvbGUgZWFybHlfZGJncF9jb25zb2xlID0geworCS5uYW1lID0JCSJlYXJseWRiZyIsCisJLndyaXRlID0JZWFybHlfZGJncF93cml0ZSwKKwkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4ID0JLTEsCit9OworCitpbnQgZGJncF9yZXNldF9wcmVwKHZvaWQpCit7CisJdTMyIGN0cmw7CisKKwlkYmdwX25vdF9zYWZlID0gMTsKKwlpZiAoIWVoY2lfZGVidWcpCisJCXJldHVybiAwOworCisJaWYgKGVhcmx5X2RiZ3BfY29uc29sZS5pbmRleCAhPSAtMSAmJgorCQkhKGVhcmx5X2RiZ3BfY29uc29sZS5mbGFncyAmIENPTl9CT09UKSkKKwkJcmV0dXJuIDE7CisJLyogVGhpcyBtZWFucyB0aGUgY29uc29sZSBpcyBub3QgaW5pdGlhbGl6ZWQsIG9yIHNob3VsZCBnZXQKKwkgKiBzaHV0ZG93biBzbyBhcyB0byBhbGxvdyBmb3IgcmV1c2Ugb2YgdGhlIHVzYiBkZXZpY2UsIHdoaWNoCisJICogbWVhbnMgaXQgaXMgdGltZSB0byBzaHV0ZG93biB0aGUgdXNiIGRlYnVnIHBvcnQuICovCisJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwlpZiAoY3RybCAmIERCR1BfRU5BQkxFRCkgeworCQljdHJsICY9IH4oREJHUF9DTEFJTSk7CisJCXdyaXRlbChjdHJsLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGJncF9yZXNldF9wcmVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggOWY5ODZiNC4uMzMzNTEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiBjb25maWcgVVNCX0dBREdFVF9BVDkxCiAJYm9vbGVhbiAiQXRtZWwgQVQ5MSBVU0IgRGV2aWNlIFBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVNBTTlSTCAmJiAhQVJDSF9BVDkxQ0FQOQorCWRlcGVuZHMgb24gQVJDSF9BVDkxICYmICFBUkNIX0FUOTFTQU05UkwgJiYgIUFSQ0hfQVQ5MUNBUDkgJiYgIUFSQ0hfQVQ5MVNBTTlHNDUKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCWhlbHAKIAkgICBNYW55IEF0bWVsIEFUOTEgcHJvY2Vzc29ycyAoc3VjaCBhcyB0aGUgQVQ5MVJNMjAwMCkgaGF2ZSBhCkBAIC0xNDMsNyArMTQzLDcgQEAKIGNvbmZpZyBVU0JfR0FER0VUX0FUTUVMX1VTQkEKIAlib29sZWFuICJBdG1lbCBVU0JBIgogCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAotCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxQ0FQOSB8fCBBUkNIX0FUOTFTQU05UkwKKwlkZXBlbmRzIG9uIEFWUjMyIHx8IEFSQ0hfQVQ5MUNBUDkgfHwgQVJDSF9BVDkxU0FNOVJMIHx8IEFSQ0hfQVQ5MVNBTTlHNDUKIAloZWxwCiAJICBVU0JBIGlzIHRoZSBpbnRlZ3JhdGVkIGhpZ2gtc3BlZWQgVVNCIERldmljZSBjb250cm9sbGVyIG9uCiAJICB0aGUgQVQzMkFQNzAweCwgc29tZSBBVDkxU0FNOSBhbmQgQVQ5MUNBUDkgcHJvY2Vzc29ycyBmcm9tIEF0bWVsLgpAQCAtNjI3LDkgKzYyNywxMCBAQAogY29uZmlnIFVTQl9FVEgKIAl0cmlzdGF0ZSAiRXRoZXJuZXQgR2FkZ2V0ICh3aXRoIENEQyBFdGhlcm5ldCBzdXBwb3J0KSIKIAlkZXBlbmRzIG9uIE5FVAorCXNlbGVjdCBDUkMzMgogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgRXRoZXJuZXQgc3R5bGUgY29tbXVuaWNhdGlvbiwgaW4gZWl0aGVyCi0JICBvZiB0d28gd2F5czoKKwkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgRXRoZXJuZXQgc3R5bGUgY29tbXVuaWNhdGlvbiwgaW4gb25lIG9mCisJICBzZXZlcmFsIHdheXM6CiAJICAKIAkgICAtIFRoZSAiQ29tbXVuaWNhdGlvbiBEZXZpY2UgQ2xhc3MiIChDREMpIEV0aGVybmV0IENvbnRyb2wgTW9kZWwuCiAJICAgICBUaGF0IHByb3RvY29sIGlzIG9mdGVuIGF2b2lkZWQgd2l0aCBwdXJlIEV0aGVybmV0IGFkYXB0ZXJzLCBpbgpAQCAtNjM5LDcgKzY0MCwxMSBAQAogCSAgIC0gT24gaGFyZHdhcmUgY2FuJ3QgaW1wbGVtZW50IHRoYXQgcHJvdG9jb2wsIGEgc2ltcGxlIENEQyBzdWJzZXQKIAkgICAgIGlzIHVzZWQsIHBsYWNpbmcgZmV3ZXIgZGVtYW5kcyBvbiBVU0IuCiAKLQkgIFJORElTIHN1cHBvcnQgaXMgYSB0aGlyZCBvcHRpb24sIG1vcmUgZGVtYW5kaW5nIHRoYW4gdGhhdCBzdWJzZXQuCisJICAgLSBDREMgRXRoZXJuZXQgRW11bGF0aW9uIE1vZGVsIChFRU0pIGlzIGEgbmV3ZXIgc3RhbmRhcmQgdGhhdCBoYXMKKwkgICAgIGEgc2ltcGxlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCBieSBtb3JlIFVTQiBoYXJkd2FyZS4KKworCSAgUk5ESVMgc3VwcG9ydCBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbiwgbW9yZSBkZW1hbmRpbmcgdGhhbiB0aGFuCisJICBzdWJzZXQuCiAKIAkgIFdpdGhpbiB0aGUgVVNCIGRldmljZSwgdGhpcyBnYWRnZXQgZHJpdmVyIGV4cG9zZXMgYSBuZXR3b3JrIGRldmljZQogCSAgInVzYlgiLCB3aGVyZSBYIGRlcGVuZHMgb24gd2hhdCBvdGhlciBuZXR3b3JraW5nIGRldmljZXMgeW91IGhhdmUuCkBAIC02NzIsNiArNjc3LDIyIEBACiAJICAgWFAsIHlvdSdsbCBuZWVkIHRvIGRvd25sb2FkIGRyaXZlcnMgZnJvbSBNaWNyb3NvZnQncyB3ZWJzaXRlOyBhIFVSTAogCSAgIGlzIGdpdmVuIGluIGNvbW1lbnRzIGZvdW5kIGluIHRoYXQgaW5mbyBmaWxlLgogCitjb25maWcgVVNCX0VUSF9FRU0KKyAgICAgICBib29sICJFdGhlcm5ldCBFbXVsYXRpb24gTW9kZWwgKEVFTSkgc3VwcG9ydCIKKyAgICAgICBkZXBlbmRzIG9uIFVTQl9FVEgKKyAgICAgICBkZWZhdWx0IG4KKyAgICAgICBoZWxwCisgICAgICAgICBDREMgRUVNIGlzIGEgbmV3ZXIgVVNCIHN0YW5kYXJkIHRoYXQgaXMgc29tZXdoYXQgc2ltcGxlciB0aGFuIENEQyBFQ00KKyAgICAgICAgIGFuZCB0aGVyZWZvcmUgY2FuIGJlIHN1cHBvcnRlZCBieSBtb3JlIGhhcmR3YXJlLiAgVGVjaG5pY2FsbHkgRUNNIGFuZAorICAgICAgICAgRUVNIGFyZSBkZXNpZ25lZCBmb3IgZGlmZmVyZW50IGFwcGxpY2F0aW9ucy4gIFRoZSBFQ00gbW9kZWwgZXh0ZW5kcworICAgICAgICAgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHRoZSB0YXJnZXQgKGUuZy4gYSBVU0IgY2FibGUgbW9kZW0pLCBhbmQgdGhlCisgICAgICAgICBFRU0gbW9kZWwgaXMgZm9yIG1vYmlsZSBkZXZpY2VzIHRvIGNvbW11bmljYXRlIHdpdGggaG9zdHMgdXNpbmcKKyAgICAgICAgIGV0aGVybmV0IG92ZXIgVVNCLiAgRm9yIExpbnV4IGdhZGdldHMsIGhvd2V2ZXIsIHRoZSBpbnRlcmZhY2Ugd2l0aAorICAgICAgICAgdGhlIGhvc3QgaXMgdGhlIHNhbWUgKGEgdXNiWCBkZXZpY2UpLCBzbyB0aGUgZGlmZmVyZW5jZXMgYXJlIG1pbmltYWwuCisKKyAgICAgICAgIElmIHlvdSBzYXkgInkiIGhlcmUsIHRoZSBFdGhlcm5ldCBnYWRnZXQgZHJpdmVyIHdpbGwgdXNlIHRoZSBFRU0KKyAgICAgICAgIHByb3RvY29sIHJhdGhlciB0aGFuIEVDTS4gIElmIHVuc3VyZSwgc2F5ICJuIi4KKwogY29uZmlnIFVTQl9HQURHRVRGUwogCXRyaXN0YXRlICJHYWRnZXQgRmlsZXN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggNzczNTJjYy4uZDViNjU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC0yMzc4LDQwICsyMzc4LDM0IEBACiAJCWlmICghZXAtPmNhbmNlbF90cmFuc2ZlciAmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgewogCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKIAkJCQkJc3RydWN0IHVkY19yZXF1ZXN0LCBxdWV1ZSk7Ci0JCQlpZiAocmVxKSB7Ci0JCQkJLyoKLQkJCQkgKiBsZW5ndGggYnl0ZXMgdHJhbnNmZXJlZAotCQkJCSAqIGNoZWNrIGRtYSBkb25lIG9mIGxhc3QgZGVzYy4gaW4gUFBCRFUgbW9kZQotCQkJCSAqLwotCQkJCWlmICh1c2VfZG1hX3BwYl9kdSkgewotCQkJCQl0ZCA9IHVkY19nZXRfbGFzdF9kbWFfZGVzYyhyZXEpOwotCQkJCQlpZiAodGQpIHsKLQkJCQkJCWRtYV9kb25lID0KLQkJCQkJCQlBTURfR0VUQklUUyh0ZC0+c3RhdHVzLAotCQkJCQkJCVVEQ19ETUFfSU5fU1RTX0JTKTsKLQkJCQkJCS8qIGRvbid0IGNhcmUgRE1BIGRvbmUgKi8KLQkJCQkJCXJlcS0+cmVxLmFjdHVhbCA9Ci0JCQkJCQkJcmVxLT5yZXEubGVuZ3RoOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogYXNzdW1lIGFsbCBieXRlcyB0cmFuc2ZlcnJlZCAqLworCQkJLyoKKwkJCSAqIGxlbmd0aCBieXRlcyB0cmFuc2ZlcmVkCisJCQkgKiBjaGVjayBkbWEgZG9uZSBvZiBsYXN0IGRlc2MuIGluIFBQQkRVIG1vZGUKKwkJCSAqLworCQkJaWYgKHVzZV9kbWFfcHBiX2R1KSB7CisJCQkJdGQgPSB1ZGNfZ2V0X2xhc3RfZG1hX2Rlc2MocmVxKTsKKwkJCQlpZiAodGQpIHsKKwkJCQkJZG1hX2RvbmUgPQorCQkJCQkJQU1EX0dFVEJJVFModGQtPnN0YXR1cywKKwkJCQkJCVVEQ19ETUFfSU5fU1RTX0JTKTsKKwkJCQkJLyogZG9uJ3QgY2FyZSBETUEgZG9uZSAqLwogCQkJCQlyZXEtPnJlcS5hY3R1YWwgPSByZXEtPnJlcS5sZW5ndGg7CiAJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBhc3N1bWUgYWxsIGJ5dGVzIHRyYW5zZmVycmVkICovCisJCQkJcmVxLT5yZXEuYWN0dWFsID0gcmVxLT5yZXEubGVuZ3RoOworCQkJfQogCi0JCQkJaWYgKHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpIHsKLQkJCQkJLyogY29tcGxldGUgcmVxICovCi0JCQkJCWNvbXBsZXRlX3JlcShlcCwgcmVxLCAwKTsKLQkJCQkJcmVxLT5kbWFfZ29pbmcgPSAwOwotCQkJCQkvKiBmdXJ0aGVyIHJlcXVlc3QgYXZhaWxhYmxlID8gKi8KLQkJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKLQkJCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0ICovCi0JCQkJCQl0bXAgPSByZWFkbCgKLQkJCQkJCQkmZGV2LT5yZWdzLT5lcF9pcnFtc2spOwotCQkJCQkJdG1wIHw9IEFNRF9CSVQoZXAtPm51bSk7Ci0JCQkJCQl3cml0ZWwodG1wLAotCQkJCQkJCSZkZXYtPnJlZ3MtPmVwX2lycW1zayk7Ci0JCQkJCX0KLQorCQkJaWYgKHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpIHsKKwkJCQkvKiBjb21wbGV0ZSByZXEgKi8KKwkJCQljb21wbGV0ZV9yZXEoZXAsIHJlcSwgMCk7CisJCQkJcmVxLT5kbWFfZ29pbmcgPSAwOworCQkJCS8qIGZ1cnRoZXIgcmVxdWVzdCBhdmFpbGFibGUgPyAqLworCQkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0ICovCisJCQkJCXRtcCA9IHJlYWRsKCZkZXYtPnJlZ3MtPmVwX2lycW1zayk7CisJCQkJCXRtcCB8PSBBTURfQklUKGVwLT5udW0pOworCQkJCQl3cml0ZWwodG1wLCAmZGV2LT5yZWdzLT5lcF9pcnFtc2spOwogCQkJCX0KIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwppbmRleCA3MmJhZThmLi42NjQ1MGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpAQCAtMTc1NCw3ICsxNzU0LDYgQEAKIAkJCQlJUlFGX0RJU0FCTEVELCBkcml2ZXJfbmFtZSwgdWRjKSkgewogCQkJREJHKCJyZXF1ZXN0IHZidXMgaXJxICVkIGZhaWxlZFxuIiwKIAkJCQkJdWRjLT5ib2FyZC52YnVzX3Bpbik7Ci0JCQlmcmVlX2lycSh1ZGMtPnVkcF9pcnEsIHVkYyk7CiAJCQlyZXR2YWwgPSAtRUJVU1k7CiAJCQlnb3RvIGZhaWwzOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCmluZGV4IDlmODBmNGUuLmEzYTBmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCkBAIC0xMDYsMjAgKzEwNiwyMCBAQAogCQkJY3RybC0+YlJlcXVlc3QsIHdfdmFsdWUsIGxlbiwgZXApOwogCiAJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgewotCWNhc2UgU0VUX0NVUjoKKwljYXNlIFVBQ19TRVRfQ1VSOgogCQl2YWx1ZSA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBTRVRfTUlOOgorCWNhc2UgVUFDX1NFVF9NSU46CiAJCWJyZWFrOwogCi0JY2FzZSBTRVRfTUFYOgorCWNhc2UgVUFDX1NFVF9NQVg6CiAJCWJyZWFrOwogCi0JY2FzZSBTRVRfUkVTOgorCWNhc2UgVUFDX1NFVF9SRVM6CiAJCWJyZWFrOwogCi0JY2FzZSBTRVRfTUVNOgorCWNhc2UgVUFDX1NFVF9NRU06CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE0MiwxMyArMTQyLDEzIEBACiAJCQljdHJsLT5iUmVxdWVzdCwgd192YWx1ZSwgbGVuLCBlcCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7Ci0JY2FzZSBHRVRfQ1VSOgotCWNhc2UgR0VUX01JTjoKLQljYXNlIEdFVF9NQVg6Ci0JY2FzZSBHRVRfUkVTOgorCWNhc2UgVUFDX0dFVF9DVVI6CisJY2FzZSBVQUNfR0VUX01JTjoKKwljYXNlIFVBQ19HRVRfTUFYOgorCWNhc2UgVUFDX0dFVF9SRVM6CiAJCXZhbHVlID0gMzsKIAkJYnJlYWs7Ci0JY2FzZSBHRVRfTUVNOgorCWNhc2UgVUFDX0dFVF9NRU06CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTcxLDExICsxNzEsMTEgQEAKIAkgKiBBdWRpbyBjbGFzcyBtZXNzYWdlczsgaW50ZXJmYWNlIGFjdGl2YXRpb24gdXNlcyBzZXRfYWx0KCkuCiAJICovCiAJc3dpdGNoIChjdHJsLT5iUmVxdWVzdFR5cGUpIHsKLQljYXNlIFVTQl9BVURJT19TRVRfRU5EUE9JTlQ6CisJY2FzZSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0VORFBPSU5UOgogCQl2YWx1ZSA9IGF1ZGlvX3NldF9lbmRwb2ludF9yZXEoYywgY3RybCk7CiAJCWJyZWFrOwogCi0JY2FzZSBVU0JfQVVESU9fR0VUX0VORFBPSU5UOgorCWNhc2UgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0VORFBPSU5UOgogCQl2YWx1ZSA9IGF1ZGlvX2dldF9lbmRwb2ludF9yZXEoYywgY3RybCk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKaW5kZXggNTllODUyMy4uZDA1Mzk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJCQl9CiAJCX0KIAotCQlmb3IgKGxlbiA9IDA7IHMtPndEYXRhW2xlbl0gJiYgbGVuIDw9IDEyNjsgbGVuKyspCisJCWZvciAobGVuID0gMDsgbGVuIDw9IDEyNiAmJiBzLT53RGF0YVtsZW5dOyBsZW4rKykKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWxlbikKIAkJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IGE1NmIyNGQuLjVlMDk2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTEzMDYsMTEgKzEzMDYsNiBAQAogCQkJc2V0dXAgPSAqKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QqKSB1cmItPnNldHVwX3BhY2tldDsKIAkJCXdfaW5kZXggPSBsZTE2X3RvX2NwdShzZXR1cC53SW5kZXgpOwogCQkJd192YWx1ZSA9IGxlMTZfdG9fY3B1KHNldHVwLndWYWx1ZSk7Ci0JCQlpZiAobGUxNl90b19jcHUoc2V0dXAud0xlbmd0aCkgIT0KLQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7Ci0JCQkJc3RhdHVzID0gLUVPVkVSRkxPVzsKLQkJCQlnb3RvIHJldHVybl91cmI7Ci0JCQl9CiAKIAkJCS8qIHBhcmFub2lhLCBpbiBjYXNlIG9mIHN0YWxlIHF1ZXVlZCBkYXRhICovCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IGJkMTAyZjUuLmYzN2RlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC02MSw2ICs2MSwxMSBAQAogICogc2ltcGxlciwgTWljcm9zb2Z0IHB1c2hlcyB0aGVpciBvd24gYXBwcm9hY2g6IFJORElTLiAgVGhlIHB1Ymxpc2hlZAogICogUk5ESVMgc3BlY3MgYXJlIGFtYmlndW91cyBhbmQgYXBwZWFyIHRvIGJlIGluY29tcGxldGUsIGFuZCBhcmUgYWxzbwogICogbmVlZGxlc3NseSBjb21wbGV4LiAgVGhleSBib3Jyb3cgbW9yZSBmcm9tIENEQyBBQ00gdGhhbiBDREMgRUNNLgorICoKKyAqIFdoaWxlIENEQyBFQ00sIENEQyBTdWJzZXQsIGFuZCBSTkRJUyBhcmUgZGVzaWduZWQgdG8gZXh0ZW5kIHRoZSBldGhlcm5ldAorICogaW50ZXJmYWNlIHRvIHRoZSB0YXJnZXQsIENEQyBFRU0gd2FzIGRlc2lnbmVkIHRvIHVzZSBldGhlcm5ldCBvdmVyIHRoZSBVU0IKKyAqIGxpbmsgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGFyZ2V0LiAgQ0RDIEVFTSBpcyBpbXBsZW1lbnRlZCBhcyBhbiBhbHRlcm5hdGl2ZQorICogdG8gdGhvc2Ugb3RoZXIgcHJvdG9jb2xzIHdoZW4gdGhhdCBjb21tdW5pY2F0aW9uIG1vZGVsIGlzIG1vcmUgYXBwcm9wcmlhdGUKICAqLwogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiRXRoZXJuZXQgR2FkZ2V0IgpAQCAtMTE0LDYgKzExOSw3IEBACiAjaW5jbHVkZSAiZl9ybmRpcy5jIgogI2luY2x1ZGUgInJuZGlzLmMiCiAjZW5kaWYKKyNpbmNsdWRlICJmX2VlbS5jIgogI2luY2x1ZGUgInVfZXRoZXIuYyIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE1MCw2ICsxNTYsMTAgQEAKICNkZWZpbmUgUk5ESVNfVkVORE9SX05VTQkweDA1MjUJLyogTmV0Q2hpcCAqLwogI2RlZmluZSBSTkRJU19QUk9EVUNUX05VTQkweGE0YTIJLyogRXRoZXJuZXQvUk5ESVMgR2FkZ2V0ICovCiAKKy8qIEZvciBFRU0gZ2FkZ2V0cyAqLworI2RlZmluZSBFRU1fVkVORE9SX05VTQkweDA1MjUJLyogSU5WQUxJRCAtIE5FRURTIFRPIEJFIEFMTE9DQVRFRCAqLworI2RlZmluZSBFRU1fUFJPRFVDVF9OVU0JMHhhNGExCS8qIElOVkFMSUQgLSBORUVEUyBUTyBCRSBBTExPQ0FURUQgKi8KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CkBAIC0yNDYsOCArMjU2LDE2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9FRU0KK3N0YXRpYyBpbnQgdXNlX2VlbSA9IDE7CisjZWxzZQorc3RhdGljIGludCB1c2VfZWVtOworI2VuZGlmCittb2R1bGVfcGFyYW0odXNlX2VlbSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9lZW0sICJ1c2UgQ0RDIEVFTSBtb2RlIik7CisKIC8qCi0gKiBXZSBfYWx3YXlzXyBoYXZlIGFuIEVDTSBvciBDREMgU3Vic2V0IGNvbmZpZ3VyYXRpb24uCisgKiBXZSBfYWx3YXlzXyBoYXZlIGFuIEVDTSwgQ0RDIFN1YnNldCwgb3IgRUVNIGNvbmZpZ3VyYXRpb24uCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGV0aF9kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQogewpAQCAtMjU4LDcgKzI3Niw5IEBACiAJCWMtPmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CiAJfQogCi0JaWYgKGNhbl9zdXBwb3J0X2VjbShjLT5jZGV2LT5nYWRnZXQpKQorCWlmICh1c2VfZWVtKQorCQlyZXR1cm4gZWVtX2JpbmRfY29uZmlnKGMpOworCWVsc2UgaWYgKGNhbl9zdXBwb3J0X2VjbShjLT5jZGV2LT5nYWRnZXQpKQogCQlyZXR1cm4gZWNtX2JpbmRfY29uZmlnKGMsIGhvc3RhZGRyKTsKIAllbHNlCiAJCXJldHVybiBnZXRoX2JpbmRfY29uZmlnKGMsIGhvc3RhZGRyKTsKQEAgLTI4Niw3ICszMDYsMTIgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCS8qIHNldCB1cCBtYWluIGNvbmZpZyBsYWJlbCBhbmQgZGV2aWNlIGRlc2NyaXB0b3IgKi8KLQlpZiAoY2FuX3N1cHBvcnRfZWNtKGNkZXYtPmdhZGdldCkpIHsKKwlpZiAodXNlX2VlbSkgeworCQkvKiBFRU0gKi8KKwkJZXRoX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiQ0RDIEV0aGVybmV0IChFRU0pIjsKKwkJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPSBjcHVfdG9fbGUxNihFRU1fVkVORE9SX05VTSk7CisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9IGNwdV90b19sZTE2KEVFTV9QUk9EVUNUX05VTSk7CisJfSBlbHNlIGlmIChjYW5fc3VwcG9ydF9lY20oY2Rldi0+Z2FkZ2V0KSkgewogCQkvKiBFQ00gKi8KIAkJZXRoX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiQ0RDIEV0aGVybmV0IChFQ00pIjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKaW5kZXggNjY1MjdiYS4uOThlOWJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCkBAIC0yOCw2ICsyOCw5IEBACiBtb2R1bGVfcGFyYW0oYXVkaW9fYnVmX3NpemUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGF1ZGlvX2J1Zl9zaXplLCAiQXVkaW8gYnVmZmVyIHNpemUiKTsKIAorc3RhdGljIGludCBnZW5lcmljX3NldF9jbWQoc3RydWN0IHVzYl9hdWRpb19jb250cm9sICpjb24sIHU4IGNtZCwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgZ2VuZXJpY19nZXRfY21kKHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCAqY29uLCB1OCBjbWQpOworCiAvKgogICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIGZ1bGwKICAqIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMgYXJlIGJ1aWx0IG9uIGRlbWFuZC4KQEAgLTUwLDE2ICs1MywxNiBAQAogCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAogfTsKIAotREVDTEFSRV9VU0JfQUNfSEVBREVSX0RFU0NSSVBUT1IoMik7CitERUNMQVJFX1VBQ19BQ19IRUFERVJfREVTQ1JJUFRPUigyKTsKIAotI2RlZmluZSBVU0JfRFRfQUNfSEVBREVSX0xFTkdICVVTQl9EVF9BQ19IRUFERVJfU0laRShGX0FVRElPX05VTV9JTlRFUkZBQ0VTKQorI2RlZmluZSBVQUNfRFRfQUNfSEVBREVSX0xFTkdUSAlVQUNfRFRfQUNfSEVBREVSX1NJWkUoRl9BVURJT19OVU1fSU5URVJGQUNFUykKIC8qIEIuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIHN0cnVjdCB1c2JfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMiBhY19oZWFkZXJfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlVU0JfRFRfQUNfSEVBREVSX0xFTkdILAorc3RhdGljIHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMiBhY19oZWFkZXJfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JSEVBREVSLAorCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfSEVBREVSLAogCS5iY2RBREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfRFRfQUNfSEVBREVSX0xFTkdIKSwKKwkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVUFDX0RUX0FDX0hFQURFUl9MRU5HVEgpLAogCS5iSW5Db2xsZWN0aW9uID0JRl9BVURJT19OVU1fSU5URVJGQUNFUywKIAkuYmFJbnRlcmZhY2VOciA9IHsKIAkJWzBdID0JCUZfQVVESU9fQUNfSU5URVJGQUNFLApAQCAtNjgsMzMgKzcxLDMzIEBACiB9OwogCiAjZGVmaW5lIElOUFVUX1RFUk1JTkFMX0lECTEKLXN0YXRpYyBzdHJ1Y3QgdXNiX2lucHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgaW5wdXRfdGVybWluYWxfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlVU0JfRFRfQUNfSU5QVVRfVEVSTUlOQUxfU0laRSwKK3N0YXRpYyBzdHJ1Y3QgdWFjX2lucHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgaW5wdXRfdGVybWluYWxfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVQUNfRFRfSU5QVVRfVEVSTUlOQUxfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JSU5QVVRfVEVSTUlOQUwsCisJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19JTlBVVF9URVJNSU5BTCwKIAkuYlRlcm1pbmFsSUQgPQkJSU5QVVRfVEVSTUlOQUxfSUQsCi0JLndUZXJtaW5hbFR5cGUgPQlVU0JfQUNfVEVSTUlOQUxfU1RSRUFNSU5HLAorCS53VGVybWluYWxUeXBlID0JVUFDX1RFUk1JTkFMX1NUUkVBTUlORywKIAkuYkFzc29jVGVybWluYWwgPQkwLAogCS53Q2hhbm5lbENvbmZpZyA9CTB4MywKIH07CiAKLURFQ0xBUkVfVVNCX0FDX0ZFQVRVUkVfVU5JVF9ERVNDUklQVE9SKDApOworREVDTEFSRV9VQUNfRkVBVFVSRV9VTklUX0RFU0NSSVBUT1IoMCk7CiAKICNkZWZpbmUgRkVBVFVSRV9VTklUX0lECQkyCi1zdGF0aWMgc3RydWN0IHVzYl9hY19mZWF0dXJlX3VuaXRfZGVzY3JpcHRvcl8wIGZlYXR1cmVfdW5pdF9kZXNjID0gewotCS5iTGVuZ3RoCQk9IFVTQl9EVF9BQ19GRUFUVVJFX1VOSVRfU0laRSgwKSwKK3N0YXRpYyBzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yXzAgZmVhdHVyZV91bml0X2Rlc2MgPSB7CisJLmJMZW5ndGgJCT0gVUFDX0RUX0ZFQVRVUkVfVU5JVF9TSVpFKDApLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YnR5cGUJPSBGRUFUVVJFX1VOSVQsCisJLmJEZXNjcmlwdG9yU3VidHlwZQk9IFVBQ19GRUFUVVJFX1VOSVQsCiAJLmJVbml0SUQJCT0gRkVBVFVSRV9VTklUX0lELAogCS5iU291cmNlSUQJCT0gSU5QVVRfVEVSTUlOQUxfSUQsCiAJLmJDb250cm9sU2l6ZQkJPSAyLAotCS5ibWFDb250cm9sc1swXQkJPSAoRlVfTVVURSB8IEZVX1ZPTFVNRSksCisJLmJtYUNvbnRyb2xzWzBdCQk9IChVQUNfRlVfTVVURSB8IFVBQ19GVV9WT0xVTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCBtdXRlX2NvbnRyb2wgPSB7CiAJLmxpc3QgPSBMSVNUX0hFQURfSU5JVChtdXRlX2NvbnRyb2wubGlzdCksCiAJLm5hbWUgPSAiTXV0ZSBDb250cm9sIiwKLQkudHlwZSA9IE1VVEVfQ09OVFJPTCwKKwkudHlwZSA9IFVBQ19NVVRFX0NPTlRST0wsCiAJLyogVG9kbzogYWRkIHJlYWwgTXV0ZSBjb250cm9sIGNvZGUgKi8KIAkuc2V0ID0gZ2VuZXJpY19zZXRfY21kLAogCS5nZXQgPSBnZW5lcmljX2dldF9jbWQsCkBAIC0xMDMsNyArMTA2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2F1ZGlvX2NvbnRyb2wgdm9sdW1lX2NvbnRyb2wgPSB7CiAJLmxpc3QgPSBMSVNUX0hFQURfSU5JVCh2b2x1bWVfY29udHJvbC5saXN0KSwKIAkubmFtZSA9ICJWb2x1bWUgQ29udHJvbCIsCi0JLnR5cGUgPSBWT0xVTUVfQ09OVFJPTCwKKwkudHlwZSA9IFVBQ19WT0xVTUVfQ09OVFJPTCwKIAkvKiBUb2RvOiBhZGQgcmVhbCBWb2x1bWUgY29udHJvbCBjb2RlICovCiAJLnNldCA9IGdlbmVyaWNfc2V0X2NtZCwKIAkuZ2V0ID0gZ2VuZXJpY19nZXRfY21kLApAQCAtMTEzLDE3ICsxMTYsMTcgQEAKIAkubGlzdCA9IExJU1RfSEVBRF9JTklUKGZlYXR1cmVfdW5pdC5saXN0KSwKIAkuaWQgPSBGRUFUVVJFX1VOSVRfSUQsCiAJLm5hbWUgPSAiTXV0ZSAmIFZvbHVtZSBDb250cm9sIiwKLQkudHlwZSA9IEZFQVRVUkVfVU5JVCwKKwkudHlwZSA9IFVBQ19GRUFUVVJFX1VOSVQsCiAJLmRlc2MgPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSZmZWF0dXJlX3VuaXRfZGVzYywKIH07CiAKICNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMX0lECTMKLXN0YXRpYyBzdHJ1Y3QgdXNiX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIG91dHB1dF90ZXJtaW5hbF9kZXNjID0gewotCS5iTGVuZ3RoCQk9IFVTQl9EVF9BQ19PVVRQVVRfVEVSTUlOQUxfU0laRSwKK3N0YXRpYyBzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIG91dHB1dF90ZXJtaW5hbF9kZXNjID0geworCS5iTGVuZ3RoCQk9IFVBQ19EVF9PVVRQVVRfVEVSTUlOQUxfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJ0eXBlCT0gT1VUUFVUX1RFUk1JTkFMLAorCS5iRGVzY3JpcHRvclN1YnR5cGUJPSBVQUNfT1VUUFVUX1RFUk1JTkFMLAogCS5iVGVybWluYWxJRAkJPSBPVVRQVVRfVEVSTUlOQUxfSUQsCi0JLndUZXJtaW5hbFR5cGUJCT0gVVNCX0FDX09VVFBVVF9URVJNSU5BTF9TUEVBS0VSLAorCS53VGVybWluYWxUeXBlCQk9IFVBQ19PVVRQVVRfVEVSTUlOQUxfU1BFQUtFUiwKIAkuYkFzc29jVGVybWluYWwJCT0gRkVBVFVSRV9VTklUX0lELAogCS5iU291cmNlSUQJCT0gRkVBVFVSRV9VTklUX0lELAogfTsKQEAgLTE0OCwyMiArMTUxLDIyIEBACiB9OwogCiAvKiBCLjQuMiAgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2FzX2hlYWRlcl9kZXNjcmlwdG9yIGFzX2hlYWRlcl9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9BU19IRUFERVJfU0laRSwKK3N0YXRpYyBzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yIGFzX2hlYWRlcl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVBQ19EVF9BU19IRUFERVJfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JQVNfR0VORVJBTCwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVUFDX0FTX0dFTkVSQUwsCiAJLmJUZXJtaW5hbExpbmsgPQlJTlBVVF9URVJNSU5BTF9JRCwKIAkuYkRlbGF5ID0JCTEsCi0JLndGb3JtYXRUYWcgPQkJVVNCX0FTX0FVRElPX0ZPUk1BVF9UWVBFX0lfUENNLAorCS53Rm9ybWF0VGFnID0JCVVBQ19GT1JNQVRfVFlQRV9JX1BDTSwKIH07CiAKLURFQ0xBUkVfVVNCX0FTX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQygxKTsKK0RFQ0xBUkVfVUFDX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQygxKTsKIAotc3RhdGljIHN0cnVjdCB1c2JfYXNfZm9ybWF0ZV90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvcl8xIGFzX3R5cGVfaV9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9BU19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0NfU0laRSgxKSwKK3N0YXRpYyBzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvcl8xIGFzX3R5cGVfaV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVBQ19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0NfU0laRSgxKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JRk9STUFUX1RZUEUsCi0JLmJGb3JtYXRUeXBlID0JCVVTQl9BU19GT1JNQVRfVFlQRV9JLAorCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfRk9STUFUX1RZUEUsCisJLmJGb3JtYXRUeXBlID0JCVVBQ19GT1JNQVRfVFlQRV9JLAogCS5iU3ViZnJhbWVTaXplID0JMiwKIAkuYkJpdFJlc29sdXRpb24gPQkxNiwKIAkuYlNhbUZyZXFUeXBlID0JCTEsCkBAIC0xNzQsMTcgKzE3NywxNyBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9BVURJT19TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9BU19FTkRQT0lOVF9BREFQVElWRQorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1NZTkNfQURBUFRJVkUKIAkJCQl8IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MsCiAJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihPVVRfRVBfTUFYX1BBQ0tFVF9TSVpFKSwKIAkuYkludGVydmFsID0JCTQsCiB9OwogCiAvKiBDbGFzcy1zcGVjaWZpYyBBUyBJU08gT1VUIEVuZHBvaW50IERlc2NyaXB0b3IgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2FzX2lzb19lbmRwb2ludF9kZXNjcmlwdG9yIGFzX2lzb19vdXRfZGVzYyBfX2luaXRkYXRhID0gewotCS5iTGVuZ3RoID0JCVVTQl9BU19JU09fRU5EUE9JTlRfREVTQ19TSVpFLAorc3RhdGljIHN0cnVjdCB1YWNfaXNvX2VuZHBvaW50X2Rlc2NyaXB0b3IgYXNfaXNvX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVUFDX0lTT19FTkRQT0lOVF9ERVNDX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19FTkRQT0lOVCwKLQkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JRVBfR0VORVJBTCwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVUFDX0VQX0dFTkVSQUwsCiAJLmJtQXR0cmlidXRlcyA9IAkxLAogCS5iTG9ja0RlbGF5VW5pdHMgPQkxLAogCS53TG9ja0RlbGF5ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSksCkBAIC00NTYsMTEgKzQ1OSwxMSBAQAogCSAqIEF1ZGlvIGNsYXNzIG1lc3NhZ2VzOyBpbnRlcmZhY2UgYWN0aXZhdGlvbiB1c2VzIHNldF9hbHQoKS4KIAkgKi8KIAlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0VHlwZSkgewotCWNhc2UgVVNCX0FVRElPX1NFVF9JTlRGOgorCWNhc2UgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U6CiAJCXZhbHVlID0gYXVkaW9fc2V0X2ludGZfcmVxKGYsIGN0cmwpOwogCQlicmVhazsKIAotCWNhc2UgVVNCX0FVRElPX0dFVF9JTlRGOgorCWNhc2UgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRToKIAkJdmFsdWUgPSBhdWRpb19nZXRfaW50Zl9yZXEoZiwgY3RybCk7CiAJCWJyZWFrOwogCkBAIC02MzIsNiArNjM1LDE4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBpbnQgZ2VuZXJpY19zZXRfY21kKHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCAqY29uLCB1OCBjbWQsIGludCB2YWx1ZSkKK3sKKwljb24tPmRhdGFbY21kXSA9IHZhbHVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19nZXRfY21kKHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCAqY29uLCB1OCBjbWQpCit7CisJcmV0dXJuIGNvbi0+ZGF0YVtjbWRdOworfQorCiAvKiBUb2RvOiBhZGQgbW9yZSBjb250cm9sIHNlbGVjb3RvciBkeW5hbWljYWxseSAqLwogaW50IF9faW5pdCBjb250cm9sX3NlbGVjdG9yX2luaXQoc3RydWN0IGZfYXVkaW8gKmF1ZGlvKQogewpAQCAtNjQyLDEwICs2NTcsMTAgQEAKIAlsaXN0X2FkZCgmbXV0ZV9jb250cm9sLmxpc3QsICZmZWF0dXJlX3VuaXQuY29udHJvbCk7CiAJbGlzdF9hZGQoJnZvbHVtZV9jb250cm9sLmxpc3QsICZmZWF0dXJlX3VuaXQuY29udHJvbCk7CiAKLQl2b2x1bWVfY29udHJvbC5kYXRhW19DVVJdID0gMHhmZmMwOwotCXZvbHVtZV9jb250cm9sLmRhdGFbX01JTl0gPSAweGUzYTA7Ci0Jdm9sdW1lX2NvbnRyb2wuZGF0YVtfTUFYXSA9IDB4ZmZmMDsKLQl2b2x1bWVfY29udHJvbC5kYXRhW19SRVNdID0gMHgwMDMwOworCXZvbHVtZV9jb250cm9sLmRhdGFbVUFDX19DVVJdID0gMHhmZmMwOworCXZvbHVtZV9jb250cm9sLmRhdGFbVUFDX19NSU5dID0gMHhlM2EwOworCXZvbHVtZV9jb250cm9sLmRhdGFbVUFDX19NQVhdID0gMHhmZmYwOworCXZvbHVtZV9jb250cm9sLmRhdGFbVUFDX19SRVNdID0gMHgwMDMwOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTc3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYwpAQCAtMCwwICsxLDU2MiBAQAorLyoKKyAqIGZfZWVtLmMgLS0gVVNCIENEQyBFdGhlcm5ldCAoRUVNKSBsaW5rIGZ1bmN0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1LDIwMDggRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVGIEpvaG5zb24gVGVjaG5vbG9naWVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKyNpbmNsdWRlICJ1X2V0aGVyLmgiCisKKyNkZWZpbmUgRUVNX0hMRU4gMgorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBhICJDREMgRXRoZXJuZXQgRW11bGF0aW9uIE1vZGVsIiAoQ0RDIEVFTSkKKyAqIEV0aGVybmV0IGxpbmsuCisgKi8KKworc3RydWN0IGVlbV9lcF9kZXNjcyB7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSppbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm91dDsKK307CisKK3N0cnVjdCBmX2VlbSB7CisJc3RydWN0IGdldGhlcgkJCXBvcnQ7CisJdTgJCQkJY3RybF9pZDsKKworCXN0cnVjdCBlZW1fZXBfZGVzY3MJCWZzOworCXN0cnVjdCBlZW1fZXBfZGVzY3MJCWhzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9lZW0gKmZ1bmNfdG9fZWVtKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl9lZW0sIHBvcnQuZnVuYyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGludGVyZmFjZSBkZXNjcmlwdG9yOiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBlZW1faW50ZiBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBlZW1faW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS8qIC5iSW50ZXJmYWNlTnVtYmVyID0gRFlOQU1JQyAqLworCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfRUVNLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfQ0RDX1BST1RPX0VFTSwKKwkvKiAuaUludGVyZmFjZSA9IERZTkFNSUMgKi8KK307CisKKy8qIGZ1bGwgc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBlZW1fZnNfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBlZW1fZnNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZWVtX2ZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkvKiBDREMgRUVNIGNvbnRyb2wgZGVzY3JpcHRvcnMgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWVtX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVlbV9mc19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlZW1fZnNfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIGhpZ2ggc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBlZW1faHNfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGVlbV9oc19vdXRfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmVlbV9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CisJLyogQ0RDIEVFTSBjb250cm9sIGRlc2NyaXB0b3JzICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVlbV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlZW1faHNfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWVtX2hzX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKiBzdHJpbmcgZGVzY3JpcHRvcnM6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBlZW1fc3RyaW5nX2RlZnNbXSA9IHsKKwlbMF0ucyA9ICJDREMgRXRoZXJuZXQgRW11bGF0aW9uIE1vZGVsIChFRU0pIiwKKwl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBlZW1fc3RyaW5nX3RhYmxlID0geworCS5sYW5ndWFnZSA9CQkweDA0MDksCS8qIGVuLXVzICovCisJLnN0cmluZ3MgPQkJZWVtX3N0cmluZ19kZWZzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmVlbV9zdHJpbmdzW10gPSB7CisJJmVlbV9zdHJpbmdfdGFibGUsCisJTlVMTCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZWVtX3NldHVwKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCk7CisJdTE2CQkJd192YWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJdTE2CQkJd19sZW5ndGggPSBsZTE2X3RvX2NwdShjdHJsLT53TGVuZ3RoKTsKKworCURCRyhjZGV2LCAiaW52YWxpZCBjb250cm9sIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCisJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKworCS8qIGRldmljZSBlaXRoZXIgc3RhbGxzICh2YWx1ZSA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiB2YWx1ZTsKK30KKworCitzdGF0aWMgaW50IGVlbV9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKK3sKKwlzdHJ1Y3QgZl9lZW0JCSplZW0gPSBmdW5jX3RvX2VlbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKKworCS8qIHdlIGtub3cgYWx0ID09IDAsIHNvIHRoaXMgaXMgYW4gYWN0aXZhdGlvbiBvciBhIHJlc2V0ICovCisJaWYgKGFsdCAhPSAwKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoaW50ZiA9PSBlZW0tPmN0cmxfaWQpIHsKKworCQlpZiAoZWVtLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSkgeworCQkJREJHKGNkZXYsICJyZXNldCBlZW1cbiIpOworCQkJZ2V0aGVyX2Rpc2Nvbm5lY3QoJmVlbS0+cG9ydCk7CisJCX0KKworCQlpZiAoIWVlbS0+cG9ydC5pbikgeworCQkJREJHKGNkZXYsICJpbml0IGVlbVxuIik7CisJCQllZW0tPnBvcnQuaW4gPSBlcF9jaG9vc2UoY2Rldi0+Z2FkZ2V0LAorCQkJCQllZW0tPmhzLmluLCBlZW0tPmZzLmluKTsKKwkJCWVlbS0+cG9ydC5vdXQgPSBlcF9jaG9vc2UoY2Rldi0+Z2FkZ2V0LAorCQkJCQllZW0tPmhzLm91dCwgZWVtLT5mcy5vdXQpOworCQl9CisKKwkJLyogemxwcyBzaG91bGQgbm90IG9jY3VyIGJlY2F1c2UgemVyby1sZW5ndGggRUVNIHBhY2tldHMKKwkJICogd2lsbCBiZSBpbnNlcnRlZCBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGV5IHdvdWxkIG9jY3VyCisJCSAqLworCQllZW0tPnBvcnQuaXNfemxwX29rID0gMTsKKwkJZWVtLT5wb3J0LmNkY19maWx0ZXIgPSBERUZBVUxUX0ZJTFRFUjsKKwkJREJHKGNkZXYsICJhY3RpdmF0ZSBlZW1cbiIpOworCQluZXQgPSBnZXRoZXJfY29ubmVjdCgmZWVtLT5wb3J0KTsKKwkJaWYgKElTX0VSUihuZXQpKQorCQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKKwl9IGVsc2UKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CitmYWlsOgorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBlZW1fZGlzYWJsZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX2VlbQkJKmVlbSA9IGZ1bmNfdG9fZWVtKGYpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKKworCURCRyhjZGV2LCAiZWVtIGRlYWN0aXZhdGVkXG4iKTsKKworCWlmIChlZW0tPnBvcnQuaW5fZXAtPmRyaXZlcl9kYXRhKQorCQlnZXRoZXJfZGlzY29ubmVjdCgmZWVtLT5wb3J0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRUVNIGZ1bmN0aW9uIGRyaXZlciBzZXR1cC9iaW5kaW5nICovCisKK3N0YXRpYyBpbnQgX19pbml0CitlZW1fYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gYy0+Y2RldjsKKwlzdHJ1Y3QgZl9lZW0JCSplZW0gPSBmdW5jX3RvX2VlbShmKTsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgaW50ZXJmYWNlIElEcyAqLworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwllZW0tPmN0cmxfaWQgPSBzdGF0dXM7CisJZWVtX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKworCXN0YXR1cyA9IC1FTk9ERVY7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBlbmRwb2ludHMgKi8KKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmVlbV9mc19pbl9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJZWVtLT5wb3J0LmluX2VwID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZWVtX2ZzX291dF9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJZWVtLT5wb3J0Lm91dF9lcCA9IGVwOworCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCisKKwlzdGF0dXMgPSAtRU5PTUVNOworCisJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCWYtPmRlc2NyaXB0b3JzID0gdXNiX2NvcHlfZGVzY3JpcHRvcnMoZWVtX2ZzX2Z1bmN0aW9uKTsKKwlpZiAoIWYtPmRlc2NyaXB0b3JzKQorCQlnb3RvIGZhaWw7CisKKwllZW0tPmZzLmluID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWVtX2ZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZlZW1fZnNfaW5fZGVzYyk7CisJZWVtLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChlZW1fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmVlbV9mc19vdXRfZGVzYyk7CisKKwkvKiBzdXBwb3J0IGFsbCByZWxldmFudCBoYXJkd2FyZSBzcGVlZHMuLi4gd2UgZXhwZWN0IHRoYXQgd2hlbgorCSAqIGhhcmR3YXJlIGlzIGR1YWwgc3BlZWQsIGFsbCBidWxrLWNhcGFibGUgZW5kcG9pbnRzIHdvcmsgYXQKKwkgKiBib3RoIHNwZWVkcworCSAqLworCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpIHsKKwkJZWVtX2hzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZWVtX2ZzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJZWVtX2hzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWVlbV9mc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCisJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhlZW1faHNfZnVuY3Rpb24pOworCQlpZiAoIWYtPmhzX2Rlc2NyaXB0b3JzKQorCQkJZ290byBmYWlsOworCisJCWVlbS0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChlZW1faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZlZW1faHNfaW5fZGVzYyk7CisJCWVlbS0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWVtX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmZWVtX2hzX291dF9kZXNjKTsKKwl9CisKKwlEQkcoY2RldiwgIkNEQyBFdGhlcm5ldCAoRUVNKTogJXMgc3BlZWQgSU4vJXMgT1VULyVzXG4iLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJZWVtLT5wb3J0LmluX2VwLT5uYW1lLCBlZW0tPnBvcnQub3V0X2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpZiAoZi0+ZGVzY3JpcHRvcnMpCisJCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmRlc2NyaXB0b3JzKTsKKworCS8qIHdlIG1pZ2h0IGFzIHdlbGwgcmVsZWFzZSBvdXIgY2xhaW1zIG9uIGVuZHBvaW50cyAqLworCWlmIChlZW0tPnBvcnQub3V0KQorCQllZW0tPnBvcnQub3V0X2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJaWYgKGVlbS0+cG9ydC5pbikKKwkJZWVtLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlFUlJPUihjZGV2LCAiJXM6IGNhbid0IGJpbmQsIGVyciAlZFxuIiwgZi0+bmFtZSwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCitlZW1fdW5iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9lZW0JKmVlbSA9IGZ1bmNfdG9fZWVtKGYpOworCisJREJHKGMtPmNkZXYsICJlZW0gdW5iaW5kXG4iKTsKKworCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpCisJCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmhzX2Rlc2NyaXB0b3JzKTsKKwl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5kZXNjcmlwdG9ycyk7CisJa2ZyZWUoZWVtKTsKK30KKworc3RhdGljIHZvaWQgZWVtX2NtZF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7Cit9CisKKy8qCisgKiBBZGQgdGhlIEVFTSBoZWFkZXIgYW5kIGV0aGVybmV0IGNoZWNrc3VtLgorICogV2UgY3VycmVudGx5IGRvIG5vdCBhdHRlbXB0IHRvIHB1dCBtdWx0aXBsZSBldGhlcm5ldCBmcmFtZXMKKyAqIGludG8gYSBzaW5nbGUgVVNCIHRyYW5zZmVyCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZWVtX3dyYXAoc3RydWN0IGdldGhlciAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiMiA9IE5VTEw7CisJc3RydWN0IHVzYl9lcAkqaW4gPSBwb3J0LT5pbl9lcDsKKwlpbnQJCXBhZGxlbiA9IDA7CisJdTE2CQlsZW4gPSBza2ItPmxlbjsKKworCWlmICghc2tiX2Nsb25lZChza2IpKSB7CisJCWludCBoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOworCQlpbnQgdGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTsKKworCQkvKiBXaGVuIChsZW4gKyBFRU1fSExFTiArIEVUSF9GQ1NfTEVOKSAlIGluLT5tYXhwYWNrZXQpIGlzIDAsCisJCSAqIHN0aWNrIHR3byBieXRlcyBvZiB6ZXJvLWxlbmd0aCBFRU0gcGFja2V0IG9uIHRoZSBlbmQuCisJCSAqLworCQlpZiAoKChsZW4gKyBFRU1fSExFTiArIEVUSF9GQ1NfTEVOKSAlIGluLT5tYXhwYWNrZXQpID09IDApCisJCQlwYWRsZW4gKz0gMjsKKworCQlpZiAoKHRhaWxyb29tID49IChFVEhfRkNTX0xFTiArIHBhZGxlbikpICYmCisJCQkJKGhlYWRyb29tID49IEVFTV9ITEVOKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgRUVNX0hMRU4sIEVUSF9GQ1NfTEVOICsgcGFkbGVuLCBHRlBfQVRPTUlDKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXNrYiA9IHNrYjI7CisJaWYgKCFza2IpCisJCXJldHVybiBza2I7CisKK2RvbmU6CisJLyogdXNlIHRoZSAibm8gQ1JDIiBvcHRpb24gKi8KKwlwdXRfdW5hbGlnbmVkX2JlMzIoMHhkZWFkYmVlZiwgc2tiX3B1dChza2IsIDQpKTsKKworCS8qIEVFTSBwYWNrZXQgaGVhZGVyIGZvcm1hdDoKKwkgKiBiMC4uMTM6CWxlbmd0aCBvZiBldGhlcm5ldCBmcmFtZQorCSAqIGIxNDoJCWJtQ1JDICgwID09IHNlbnRpbmVsIENSQykKKwkgKiBiMTU6CQlibVR5cGUgKDAgPT0gZGF0YSkKKwkgKi8KKwlsZW4gPSBza2ItPmxlbjsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoKGxlbiAmIDB4M0ZGRikgfCBCSVQoMTQpLCBza2JfcHVzaChza2IsIDIpKTsKKworCS8qIGFkZCBhIHplcm8tbGVuZ3RoIEVFTSBwYWNrZXQsIGlmIG5lZWRlZCAqLworCWlmIChwYWRsZW4pCisJCXB1dF91bmFsaWduZWRfbGUxNigwLCBza2JfcHV0KHNrYiwgMikpOworCisJcmV0dXJuIHNrYjsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgRUVNIGhlYWRlci4gIE5vdGUgdGhhdCB0aGVyZSBjYW4gYmUgbWFueSBFRU0gcGFja2V0cyBpbiBhIHNpbmdsZQorICogVVNCIHRyYW5zZmVyLCBzbyB3ZSBuZWVkIHRvIGJyZWFrIHRoZW0gb3V0IGFuZCBoYW5kbGUgdGhlbSBpbmRlcGVuZGVudGx5LgorICovCitzdGF0aWMgaW50IGVlbV91bndyYXAoc3RydWN0IGdldGhlciAqcG9ydCwKKwkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IHBvcnQtPmZ1bmMuY29uZmlnLT5jZGV2OworCWludAkJCQlzdGF0dXMgPSAwOworCisJZG8geworCQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiMjsKKwkJdTE2CQloZWFkZXI7CisJCXUxNgkJbGVuID0gMDsKKworCQlpZiAoc2tiLT5sZW4gPCBFRU1fSExFTikgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCURCRyhjZGV2LCAiaW52YWxpZCBFRU0gaGVhZGVyXG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkvKiByZW1vdmUgdGhlIEVFTSBoZWFkZXIgKi8KKwkJaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CisJCXNrYl9wdWxsKHNrYiwgRUVNX0hMRU4pOworCisJCS8qIEVFTSBwYWNrZXQgaGVhZGVyIGZvcm1hdDoKKwkJICogYjAuLjE0OglFRU0gdHlwZSBkZXBlbmRlbnQgKGRhdGEgb3IgY29tbWFuZCkKKwkJICogYjE1OgkJYm1UeXBlICgwID09IGRhdGEsIDEgPT0gY29tbWFuZCkKKwkJICovCisJCWlmIChoZWFkZXIgJiBCSVQoMTUpKSB7CisJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGNkZXYtPnJlcTsKKwkJCXUxNgkJCWJtRUVNQ21kOworCisJCQkvKiBFRU0gY29tbWFuZCBwYWNrZXQgZm9ybWF0OgorCQkJICogYjAuLjEwOglibUVFTUNtZFBhcmFtCisJCQkgKiBiMTEuLjEzOglibUVFTUNtZAorCQkJICogYjE0OgkJcmVzZXJ2ZWQgKG11c3QgYmUgemVybykKKwkJCSAqIGIxNToJCWJtVHlwZSAoMSA9PSBjb21tYW5kKQorCQkJICovCisJCQlpZiAoaGVhZGVyICYgQklUKDE0KSkKKwkJCQljb250aW51ZTsKKworCQkJYm1FRU1DbWQgPSAoaGVhZGVyID4+IDExKSAmIDB4NzsKKwkJCXN3aXRjaCAoYm1FRU1DbWQpIHsKKwkJCWNhc2UgMDogLyogZWNobyAqLworCQkJCWxlbiA9IGhlYWRlciAmIDB4N0ZGOworCQkJCWlmIChza2ItPmxlbiA8IGxlbikgeworCQkJCQlzdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKworCQkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAodW5saWtlbHkoIXNrYjIpKSB7CisJCQkJCURCRyhjZGV2LCAiRUVNIGVjaG8gcmVzcG9uc2UgZXJyb3JcbiIpOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJCXNrYl90cmltKHNrYjIsIGxlbik7CisJCQkJcHV0X3VuYWxpZ25lZF9sZTE2KEJJVCgxNSkgfCBCSVQoMTEpIHwgbGVuLAorCQkJCQkJCXNrYl9wdXNoKHNrYjIsIDIpKTsKKwkJCQlza2JfY29weV9iaXRzKHNrYiwgMCwgcmVxLT5idWYsIHNrYi0+bGVuKTsKKwkJCQlyZXEtPmxlbmd0aCA9IHNrYi0+bGVuOworCQkJCXJlcS0+Y29tcGxldGUgPSBlZW1fY21kX2NvbXBsZXRlOworCQkJCXJlcS0+emVybyA9IDE7CisJCQkJaWYgKHVzYl9lcF9xdWV1ZShwb3J0LT5pbl9lcCwgcmVxLCBHRlBfQVRPTUlDKSkKKwkJCQkJREJHKGNkZXYsICJlY2hvIHJlc3BvbnNlIHF1ZXVlIGZhaWxcbiIpOworCQkJCWJyZWFrOworCisJCQljYXNlIDE6ICAvKiBlY2hvIHJlc3BvbnNlICovCisJCQljYXNlIDI6ICAvKiBzdXNwZW5kIGhpbnQgKi8KKwkJCWNhc2UgMzogIC8qIHJlc3BvbnNlIGhpbnQgKi8KKwkJCWNhc2UgNDogIC8qIHJlc3BvbnNlIGNvbXBsZXRlIGhpbnQgKi8KKwkJCWNhc2UgNTogIC8qIHRpY2tsZSAqLworCQkJZGVmYXVsdDogLyogcmVzZXJ2ZWQgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXUzMgkJY3JjLCBjcmMyOworCQkJc3RydWN0IHNrX2J1ZmYJKnNrYjM7CisKKwkJCS8qIGNoZWNrIGZvciB6ZXJvLWxlbmd0aCBFRU0gcGFja2V0ICovCisJCQlpZiAoaGVhZGVyID09IDApCisJCQkJY29udGludWU7CisKKwkJCS8qIEVFTSBkYXRhIHBhY2tldCBmb3JtYXQ6CisJCQkgKiBiMC4uMTM6CWxlbmd0aCBvZiBldGhlcm5ldCBmcmFtZQorCQkJICogYjE0OgkJYm1DUkMgKDAgPT0gc2VudGluZWwsIDEgPT0gY2FsY3VsYXRlZCkKKwkJCSAqIGIxNToJCWJtVHlwZSAoMCA9PSBkYXRhKQorCQkJICovCisJCQlsZW4gPSBoZWFkZXIgJiAweDNGRkY7CisJCQlpZiAoKHNrYi0+bGVuIDwgbGVuKQorCQkJCQl8fCAobGVuIDwgKEVUSF9ITEVOICsgRVRIX0ZDU19MRU4pKSkgeworCQkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKworCQkJLyogdmFsaWRhdGUgQ1JDICovCisJCQljcmMgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLT5kYXRhICsgbGVuIC0gRVRIX0ZDU19MRU4pOworCQkJaWYgKGhlYWRlciAmIEJJVCgxNCkpIHsKKwkJCQljcmMgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLT5kYXRhICsgbGVuCisJCQkJCQkJLSBFVEhfRkNTX0xFTik7CisJCQkJY3JjMiA9IH5jcmMzMl9sZSh+MCwKKwkJCQkJCXNrYi0+ZGF0YSwKKwkJCQkJCXNrYi0+bGVuIC0gRVRIX0ZDU19MRU4pOworCQkJfSBlbHNlIHsKKwkJCQljcmMgPSBnZXRfdW5hbGlnbmVkX2JlMzIoc2tiLT5kYXRhICsgbGVuCisJCQkJCQkJLSBFVEhfRkNTX0xFTik7CisJCQkJY3JjMiA9IDB4ZGVhZGJlZWY7CisJCQl9CisJCQlpZiAoY3JjICE9IGNyYzIpIHsKKwkJCQlEQkcoY2RldiwgImludmFsaWQgRUVNIENSQ1xuIik7CisJCQkJZ290byBuZXh0OworCQkJfQorCisJCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAodW5saWtlbHkoIXNrYjIpKSB7CisJCQkJREJHKGNkZXYsICJ1bmFibGUgdG8gdW5mcmFtZSBFRU0gcGFja2V0XG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNrYl90cmltKHNrYjIsIGxlbiAtIEVUSF9GQ1NfTEVOKTsKKworCQkJc2tiMyA9IHNrYl9jb3B5X2V4cGFuZChza2IyLAorCQkJCQkJTkVUX0lQX0FMSUdOLAorCQkJCQkJMCwKKwkJCQkJCUdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KCFza2IzKSkgeworCQkJCURCRyhjZGV2LCAidW5hYmxlIHRvIHJlYWxpZ24gRUVNIHBhY2tldFxuIik7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiMik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IyKTsKKwkJCXNrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYjMpOworCQl9CituZXh0OgorCQlza2JfcHVsbChza2IsIGxlbik7CisJfSB3aGlsZSAoc2tiLT5sZW4pOworCitlcnJvcjoKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZWVtX2JpbmRfY29uZmlnIC0gYWRkIENEQyBFdGhlcm5ldCAoRUVNKSBuZXR3b3JrIGxpbmsgdG8gYSBjb25maWd1cmF0aW9uCisgKiBAYzogdGhlIGNvbmZpZ3VyYXRpb24gdG8gc3VwcG9ydCB0aGUgbmV0d29yayBsaW5rCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgY2FsbGVkIEBnZXRoZXJfc2V0dXAoKS4gIENhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxlCisgKiBmb3IgY2FsbGluZyBAZ2V0aGVyX2NsZWFudXAoKSBiZWZvcmUgbW9kdWxlIHVubG9hZC4KKyAqLworaW50IF9faW5pdCBlZW1fYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQoreworCXN0cnVjdCBmX2VlbQkqZWVtOworCWludAkJc3RhdHVzOworCisJLyogbWF5YmUgYWxsb2NhdGUgZGV2aWNlLWdsb2JhbCBzdHJpbmcgSURzICovCisJaWYgKGVlbV9zdHJpbmdfZGVmc1swXS5pZCA9PSAwKSB7CisKKwkJLyogY29udHJvbCBpbnRlcmZhY2UgbGFiZWwgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQllZW1fc3RyaW5nX2RlZnNbMF0uaWQgPSBzdGF0dXM7CisJCWVlbV9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisJfQorCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIG5ldyBpbnN0YW5jZSAqLworCWVlbSA9IGt6YWxsb2Moc2l6ZW9mICplZW0sIEdGUF9LRVJORUwpOworCWlmICghZWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVlbS0+cG9ydC5jZGNfZmlsdGVyID0gREVGQVVMVF9GSUxURVI7CisKKwllZW0tPnBvcnQuZnVuYy5uYW1lID0gImNkY19lZW0iOworCWVlbS0+cG9ydC5mdW5jLnN0cmluZ3MgPSBlZW1fc3RyaW5nczsKKwkvKiBkZXNjcmlwdG9ycyBhcmUgcGVyLWluc3RhbmNlIGNvcGllcyAqLworCWVlbS0+cG9ydC5mdW5jLmJpbmQgPSBlZW1fYmluZDsKKwllZW0tPnBvcnQuZnVuYy51bmJpbmQgPSBlZW1fdW5iaW5kOworCWVlbS0+cG9ydC5mdW5jLnNldF9hbHQgPSBlZW1fc2V0X2FsdDsKKwllZW0tPnBvcnQuZnVuYy5zZXR1cCA9IGVlbV9zZXR1cDsKKwllZW0tPnBvcnQuZnVuYy5kaXNhYmxlID0gZWVtX2Rpc2FibGU7CisJZWVtLT5wb3J0LndyYXAgPSBlZW1fd3JhcDsKKwllZW0tPnBvcnQudW53cmFwID0gZWVtX3Vud3JhcDsKKwllZW0tPnBvcnQuaGVhZGVyX2xlbiA9IEVFTV9ITEVOOworCisJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmZWVtLT5wb3J0LmZ1bmMpOworCWlmIChzdGF0dXMpCisJCWtmcmVlKGVlbSk7CisJcmV0dXJuIHN0YXR1czsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKaW5kZXggNDI0YTM3Yy4uYzk5NjZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCkBAIC0yODYsMTIgKzI4NiwxNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJuZGlzX2FkZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcm5kaXNfYWRkX2hlYWRlcihzdHJ1Y3QgZ2V0aGVyICpwb3J0LAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgc2l6ZW9mKHN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUpKTsKLQlpZiAoc2tiKQotCQlybmRpc19hZGRfaGRyKHNrYik7Ci0JcmV0dXJuIHNrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKKworCXNrYjIgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIHNpemVvZihzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKSk7CisJaWYgKHNrYjIpCisJCXJuZGlzX2FkZF9oZHIoc2tiMik7CisKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXJldHVybiBza2IyOwogfQogCiBzdGF0aWMgdm9pZCBybmRpc19yZXNwb25zZV9hdmFpbGFibGUodm9pZCAqX3JuZGlzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKaW5kZXggZDcwMWJmNC4uNzg4MWYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCkBAIC0yNzUxLDYgKzI3NTEsMTAgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2RldmluaXRkYXRhIHFlX3VkY19tYXRjaFtdID0gewogCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtcWUtdXNiIiwKKwkJLmRhdGEgPSAodm9pZCAqKVBPUlRfUUUsCisJfSwKKwl7CiAJCS5jb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLXFlLXVzYiIsCiAJCS5kYXRhID0gKHZvaWQgKilQT1JUX1FFLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IGI5MzEyZGMuLmQwYjFlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC0xOTEsNyArMTkxLDcgQEAKICNkZWZpbmUgR01JRElfTVNfSU5URVJGQUNFCTEKICNkZWZpbmUgR01JRElfTlVNX0lOVEVSRkFDRVMJMgogCi1ERUNMQVJFX1VTQl9BQ19IRUFERVJfREVTQ1JJUFRPUigxKTsKK0RFQ0xBUkVfVUFDX0FDX0hFQURFUl9ERVNDUklQVE9SKDEpOwogREVDTEFSRV9VU0JfTUlESV9PVVRfSkFDS19ERVNDUklQVE9SKDEpOwogREVDTEFSRV9VU0JfTVNfRU5EUE9JTlRfREVTQ1JJUFRPUigxKTsKIApAQCAtMjM3LDEyICsyMzcsMTIgQEAKIH07CiAKIC8qIEIuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMSBhY19oZWFkZXJfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSksCitzdGF0aWMgY29uc3Qgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8xIGFjX2hlYWRlcl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVBQ19EVF9BQ19IRUFERVJfU0laRSgxKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKIAkuYmNkQURDID0JCWNwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQljcHVfdG9fbGUxNihVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSkpLAorCS53VG90YWxMZW5ndGggPQkJY3B1X3RvX2xlMTYoVUFDX0RUX0FDX0hFQURFUl9TSVpFKDEpKSwKIAkuYkluQ29sbGVjdGlvbiA9CTEsCiAJLmJhSW50ZXJmYWNlTnIgPSB7CiAJCVswXSA9CQlHTUlESV9NU19JTlRFUkZBQ0UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IDdkMzNmNTAuLmM0NDM2N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0yMDMzLDcgKzIwMzMsNyBAQAogCXJldHVybiBpbm9kZTsKIH0KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0gewogCS5zdGF0ZnMgPQlzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlID0JZ2VuZXJpY19kZWxldGVfaW5vZGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKaW5kZXggZWQyMWUyNi4uZTZmZWRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCkBAIC01Niw2ICs1Niw3IEBACiAKICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KIAogLyoKICAqIFRoaXMgZHJpdmVyIGlzIFBYQTI1eCBvbmx5LiAgR3JhYiB0aGUgcmlnaHQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuCkBAIC0xMDA4LDE1ICsxMDA5LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIGJvYXJkcyBtYXkgY29uc3VtZSBjdXJyZW50IGZyb20gVkJVUywgdXAgdG8gMTAwLTUwMG1BIGJhc2VkIG9uIGNvbmZpZy4KKyAqIHRoZSA1MDB1QSBzdXNwZW5kIGNlaWxpbmcgbWVhbnMgdGhhdCBleGNsdXNpdmVseSB2YnVzLXBvd2VyZWQgUFhBIGRlc2lnbnMKKyAqIHZpb2xhdGUgVVNCIHNwZWNzLgorICovCitzdGF0aWMgaW50IHB4YTI1eF91ZGNfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCB1bnNpZ25lZCBtQSkKK3sKKwlzdHJ1Y3QgcHhhMjV4X3VkYwkqdWRjOworCisJdWRjID0gY29udGFpbmVyX29mKF9nYWRnZXQsIHN0cnVjdCBweGEyNXhfdWRjLCBnYWRnZXQpOworCisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCXJldHVybiBvdGdfc2V0X3Bvd2VyKHVkYy0+dHJhbnNjZWl2ZXIsIG1BKTsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcHhhMjV4X3VkY19vcHMgPSB7CiAJLmdldF9mcmFtZQk9IHB4YTI1eF91ZGNfZ2V0X2ZyYW1lLAogCS53YWtldXAJCT0gcHhhMjV4X3VkY193YWtldXAsCiAJLnZidXNfc2Vzc2lvbgk9IHB4YTI1eF91ZGNfdmJ1c19zZXNzaW9uLAogCS5wdWxsdXAJCT0gcHhhMjV4X3VkY19wdWxsdXAsCi0KLQkvLyAudmJ1c19kcmF3IC4uLiBib2FyZHMgbWF5IGNvbnN1bWUgY3VycmVudCBmcm9tIFZCVVMsIHVwIHRvCi0JLy8gMTAwLTUwMG1BIGJhc2VkIG9uIGNvbmZpZy4gIHRoZSA1MDB1QSBzdXNwZW5kIGNlaWxpbmcgbWVhbnMKLQkvLyB0aGF0IGV4Y2x1c2l2ZWx5IHZidXMtcG93ZXJlZCBQWEEgZGVzaWducyB2aW9sYXRlIFVTQiBzcGVjcy4KKwkudmJ1c19kcmF3CT0gcHhhMjV4X3VkY192YnVzX2RyYXcsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTMwMyw5ICsxMzE2LDIzIEBACiAJICogZm9yIHNldF9jb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgZXZlbnR1YWwgZGlzY29ubmVjdC4KIAkgKi8KIAlETVNHKCJyZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwkvKiBjb25uZWN0IHRvIGJ1cyB0aHJvdWdoIHRyYW5zY2VpdmVyICovCisJaWYgKGRldi0+dHJhbnNjZWl2ZXIpIHsKKwkJcmV0dmFsID0gb3RnX3NldF9wZXJpcGhlcmFsKGRldi0+dHJhbnNjZWl2ZXIsICZkZXYtPmdhZGdldCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCURNU0coImNhbid0IGJpbmQgdG8gdHJhbnNjZWl2ZXJcbiIpOworCQkJaWYgKGRyaXZlci0+dW5iaW5kKQorCQkJCWRyaXZlci0+dW5iaW5kKCZkZXYtPmdhZGdldCk7CisJCQlnb3RvIGJpbmRfZmFpbDsKKwkJfQorCX0KKwogCXB1bGx1cChkZXYpOwogCWR1bXBfc3RhdGUoZGV2KTsKIAlyZXR1cm4gMDsKK2JpbmRfZmFpbDoKKwlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CiAKQEAgLTEzNTEsNiArMTM3OCw5IEBACiAJc3RvcF9hY3Rpdml0eShkZXYsIGRyaXZlcik7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCisJaWYgKGRldi0+dHJhbnNjZWl2ZXIpCisJCSh2b2lkKSBvdGdfc2V0X3BlcmlwaGVyYWwoZGV2LT50cmFuc2NlaXZlciwgTlVMTCk7CisKIAlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOwogCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCWRldi0+ZHJpdmVyID0gTlVMTDsKQEAgLTIxNjIsNiArMjE5Miw4IEBACiAJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCWRldi0+bWFjaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCisJZGV2LT50cmFuc2NlaXZlciA9IG90Z19nZXRfdHJhbnNjZWl2ZXIoKTsKKwogCWlmIChncGlvX2lzX3ZhbGlkKGRldi0+bWFjaC0+Z3Bpb192YnVzKSkgewogCQlpZiAoKHJldHZhbCA9IGdwaW9fcmVxdWVzdChkZXYtPm1hY2gtPmdwaW9fdmJ1cywKIAkJCQkicHhhMjV4X3VkYyBHUElPIFZCVVMiKSkpIHsKQEAgLTIyNjQsNiArMjI5NiwxMCBAQAogCWlmIChncGlvX2lzX3ZhbGlkKGRldi0+bWFjaC0+Z3Bpb192YnVzKSkKIAkJZ3Bpb19mcmVlKGRldi0+bWFjaC0+Z3Bpb192YnVzKTsKICBlcnJfZ3Bpb192YnVzOgorCWlmIChkZXYtPnRyYW5zY2VpdmVyKSB7CisJCW90Z19wdXRfdHJhbnNjZWl2ZXIoZGV2LT50cmFuc2NlaXZlcik7CisJCWRldi0+dHJhbnNjZWl2ZXIgPSBOVUxMOworCX0KIAljbGtfcHV0KGRldi0+Y2xrKTsKICBlcnJfY2xrOgogCXJldHVybiByZXR2YWw7CkBAIC0yMzA1LDYgKzIzNDEsMTEgQEAKIAogCWNsa19wdXQoZGV2LT5jbGspOwogCisJaWYgKGRldi0+dHJhbnNjZWl2ZXIpIHsKKwkJb3RnX3B1dF90cmFuc2NlaXZlcihkZXYtPnRyYW5zY2VpdmVyKTsKKwkJZGV2LT50cmFuc2NlaXZlciA9IE5VTEw7CisJfQorCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmgKaW5kZXggMWQ1MWFhMi4uZjU3MmM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5oCkBAIC0xMjgsNiArMTI4LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7CiAJc3RydWN0IGNsawkJCQkqY2xrOwogCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2g7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcgkJCSp0cmFuc2NlaXZlcjsKIAl1NjQJCQkJCWRtYV9tYXNrOwogCXN0cnVjdCBweGEyNXhfZXAJCQllcCBbUFhBX1VEQ19OVU1fRU5EUE9JTlRTXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwppbmRleCBjYTQxYjBiLi40ODI2N2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpAQCAtMTAyMiwyMiArMTAyMiwyOSBAQAogCXJldHVybiByOwogfQogCi1pbnQgcm5kaXNfcm1faGRyKHN0cnVjdCBza19idWZmICpza2IpCitpbnQgcm5kaXNfcm1faGRyKHN0cnVjdCBnZXRoZXIgKnBvcnQsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKIHsKIAkvKiB0bXAgcG9pbnRzIHRvIGEgc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSAqLwogCV9fbGUzMgkJKnRtcCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKIAogCS8qIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGVuZ3RoICovCiAJaWYgKGNwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpCi0JCQkhPSBnZXRfdW5hbGlnbmVkKHRtcCsrKSkKKwkJCSE9IGdldF91bmFsaWduZWQodG1wKyspKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAl0bXArKzsKIAogCS8qIERhdGFPZmZzZXQsIERhdGFMZW5ndGggKi8KLQlpZiAoIXNrYl9wdWxsKHNrYiwgZ2V0X3VuYWxpZ25lZF9sZTMyKHRtcCsrKSArIDgpKQorCWlmICghc2tiX3B1bGwoc2tiLCBnZXRfdW5hbGlnbmVkX2xlMzIodG1wKyspICsgOCkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJfQogCXNrYl90cmltKHNrYiwgZ2V0X3VuYWxpZ25lZF9sZTMyKHRtcCsrKSk7CiAKKwlza2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oCmluZGV4IGFhYzYxZGYuLmMyMzZhYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oCkBAIC0yNTEsNyArMjUxLDggQEAKIAkJCSAgICBjb25zdCBjaGFyICp2ZW5kb3JEZXNjcik7CiBpbnQgIHJuZGlzX3NldF9wYXJhbV9tZWRpdW0gKHU4IGNvbmZpZ05yLCB1MzIgbWVkaXVtLCB1MzIgc3BlZWQpOwogdm9pZCBybmRpc19hZGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBybmRpc19ybV9oZHIgKHN0cnVjdCBza19idWZmICpza2IpOworaW50IHJuZGlzX3JtX2hkcihzdHJ1Y3QgZ2V0aGVyICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CiB1OCAgICpybmRpc19nZXRfbmV4dF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1MzIgKmxlbmd0aCk7CiB2b2lkIHJuZGlzX2ZyZWVfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTggKmJ1Zik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwppbmRleCA1MGM3MWFhLi40YjVkYmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCkBAIC0yMzkyLDcgKzIzOTIsNyBAQAogCQlncnN0Y3RsID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR1JTVENUTCk7CiAJfSB3aGlsZSAoIShncnN0Y3RsICYgUzNDX0dSU1RDVExfQ1NmdFJzdCkgJiYgdGltZW91dC0tID4gMCk7CiAKLQlpZiAoIWdyc3RjdGwgJiBTM0NfR1JTVENUTF9DU2Z0UnN0KSB7CisJaWYgKCEoZ3JzdGN0bCAmIFMzQ19HUlNUQ1RMX0NTZnRSc3QpKSB7CiAJCWRldl9lcnIoaHNvdGctPmRldiwgIkZhaWxlZCB0byBnZXQgQ1NmdFJzdCBhc3NlcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI1MTQsOCArMjUxNCw4IEBACiAJICogRE1BIG1vZGUgd2UgbWF5IG5lZWQgdGhpcy4gKi8KIAl3cml0ZWwoUzNDX0RPRVBNU0tfU2V0dXBNc2sgfCBTM0NfRE9FUE1TS19BSEJFcnJNc2sgfAogCSAgICAgICBTM0NfRE9FUE1TS19FUERpc2JsZE1zayB8Ci0JICAgICAgIHVzaW5nX2RtYShoc290ZykgPyAoUzNDX0RJRVBNU0tfWGZlckNvbXBsTXNrIHwKLQkJCQkgICBTM0NfRElFUE1TS19UaW1lT1VUTXNrKSA6IDAsCisJICAgICAgICh1c2luZ19kbWEoaHNvdGcpID8gKFMzQ19ESUVQTVNLX1hmZXJDb21wbE1zayB8CisJCQkJICAgUzNDX0RJRVBNU0tfVGltZU9VVE1zaykgOiAwKSwKIAkgICAgICAgaHNvdGctPnJlZ3MgKyBTM0NfRE9FUE1TSyk7CiAKIAl3cml0ZWwoMCwgaHNvdGctPnJlZ3MgKyBTM0NfREFJTlRNU0spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwppbmRleCBhOWI0NTJmLi5kNWY0YzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwpAQCAtMTcwMyw4ICsxNzAzLDcgQEAKIAlkcHJpbnRrKERFQlVHX05PUk1BTCwidXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoKSAnJXMnXG4iLAogCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKIAotCWlmIChkcml2ZXItPmRpc2Nvbm5lY3QpCi0JCWRyaXZlci0+ZGlzY29ubmVjdCgmdWRjLT5nYWRnZXQpOworCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CiAKIAlkZXZpY2VfZGVsKCZ1ZGMtPmdhZGdldC5kZXYpOwogCXVkYy0+ZHJpdmVyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jCmluZGV4IDBmM2QyMmYuLmI1MjAwZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYwpAQCAtMjUzLDExICsyNTMsMTMgQEAKIAlzbmQtPmZpbHAgPSBmaWxwX29wZW4oZm5fY2FwLCBPX1JET05MWSwgMCk7CiAJaWYgKElTX0VSUihzbmQtPmZpbHApKSB7CiAJCUVSUk9SKGNhcmQsICJObyBzdWNoIFBDTSBjYXB0dXJlIGRldmljZTogJXNcbiIsIGZuX2NhcCk7Ci0JCXNuZC0+ZmlscCA9IE5VTEw7CisJCXNuZC0+c3Vic3RyZWFtID0gTlVMTDsKKwkJc25kLT5jYXJkID0gTlVMTDsKKwl9IGVsc2UgeworCQlwY21fZmlsZSA9IHNuZC0+ZmlscC0+cHJpdmF0ZV9kYXRhOworCQlzbmQtPnN1YnN0cmVhbSA9IHBjbV9maWxlLT5zdWJzdHJlYW07CisJCXNuZC0+Y2FyZCA9IGNhcmQ7CiAJfQotCXBjbV9maWxlID0gc25kLT5maWxwLT5wcml2YXRlX2RhdGE7Ci0Jc25kLT5zdWJzdHJlYW0gPSBwY21fZmlsZS0+c3Vic3RyZWFtOwotCXNuZC0+Y2FyZCA9IGNhcmQ7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCmluZGV4IGM2NjUyMTkuLmY4NzUxZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwpAQCAtMzcsOCArMzcsOSBAQAogICogb25lICghKSBuZXR3b3JrIGxpbmsgdGhyb3VnaCB0aGUgVVNCIGdhZGdldCBzdGFjaywgbm9ybWFsbHkgInVzYjAiLgogICoKICAqIFRoZSBjb250cm9sIGFuZCBkYXRhIG1vZGVscyBhcmUgaGFuZGxlZCBieSB0aGUgZnVuY3Rpb24gZHJpdmVyIHdoaWNoCi0gKiBjb25uZWN0cyB0byB0aGlzIGNvZGU7IHN1Y2ggYXMgQ0RDIEV0aGVybmV0LCAiQ0RDIFN1YnNldCIsIG9yIFJORElTLgotICogVGhhdCBpbmNsdWRlcyBhbGwgZGVzY3JpcHRvciBhbmQgZW5kcG9pbnQgbWFuYWdlbWVudC4KKyAqIGNvbm5lY3RzIHRvIHRoaXMgY29kZTsgc3VjaCBhcyBDREMgRXRoZXJuZXQgKEVDTSBvciBFRU0pLAorICogIkNEQyBTdWJzZXQiLCBvciBSTkRJUy4gIFRoYXQgaW5jbHVkZXMgYWxsIGRlc2NyaXB0b3IgYW5kIGVuZHBvaW50CisgKiBtYW5hZ2VtZW50LgogICoKICAqIExpbmsgbGV2ZWwgYWRkcmVzc2luZyBpcyBoYW5kbGVkIGJ5IHRoaXMgY29tcG9uZW50IHVzaW5nIG1vZHVsZQogICogcGFyYW1ldGVyczsgaWYgbm8gc3VjaCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCwgcmFuZG9tIGxpbmsgbGV2ZWwKQEAgLTY4LDkgKzY5LDEzIEBACiAJc3RydWN0IGxpc3RfaGVhZAl0eF9yZXFzLCByeF9yZXFzOwogCWF0b21pY190CQl0eF9xbGVuOwogCisJc3RydWN0IHNrX2J1ZmZfaGVhZAlyeF9mcmFtZXM7CisKIAl1bnNpZ25lZAkJaGVhZGVyX2xlbjsKLQlzdHJ1Y3Qgc2tfYnVmZgkJKigqd3JhcCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JaW50CQkJKCp1bndyYXApKHN0cnVjdCBza19idWZmICpza2IpOworCXN0cnVjdCBza19idWZmCQkqKCp3cmFwKShzdHJ1Y3QgZ2V0aGVyICosIHN0cnVjdCBza19idWZmICpza2IpOworCWludAkJCSgqdW53cmFwKShzdHJ1Y3QgZ2V0aGVyICosCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIApAQCAtMjY5LDcgKzI3NCw3IEBACiAKIHN0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBza19idWZmCSpza2IgPSByZXEtPmNvbnRleHQsICpza2IyOwogCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CiAJaW50CQlzdGF0dXMgPSByZXEtPnN0YXR1czsKIApAQCAtMjc4LDI2ICsyODMsNDcgQEAKIAkvKiBub3JtYWwgY29tcGxldGlvbiAqLwogCWNhc2UgMDoKIAkJc2tiX3B1dChza2IsIHJlcS0+YWN0dWFsKTsKLQkJaWYgKGRldi0+dW53cmFwKQotCQkJc3RhdHVzID0gZGV2LT51bndyYXAoc2tiKTsKLQkJaWYgKHN0YXR1cyA8IDAKLQkJCQl8fCBFVEhfSExFTiA+IHNrYi0+bGVuCi0JCQkJfHwgc2tiLT5sZW4gPiBFVEhfRlJBTUVfTEVOKSB7Ci0JCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlkZXYtPm5ldC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJREJHKGRldiwgInJ4IGxlbmd0aCAlZFxuIiwgc2tiLT5sZW4pOwotCQkJYnJlYWs7CisKKwkJaWYgKGRldi0+dW53cmFwKSB7CisJCQl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCQlpZiAoZGV2LT5wb3J0X3VzYikgeworCQkJCXN0YXR1cyA9IGRldi0+dW53cmFwKGRldi0+cG9ydF91c2IsCisJCQkJCQkJc2tiLAorCQkJCQkJCSZkZXYtPnJ4X2ZyYW1lcyk7CisJCQl9IGVsc2UgeworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJc3RhdHVzID0gLUVOT1RDT05OOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlza2JfcXVldWVfdGFpbCgmZGV2LT5yeF9mcmFtZXMsIHNrYik7CiAJCX0KLQotCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtPm5ldCk7Ci0JCWRldi0+bmV0LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWRldi0+bmV0LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCQkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIGhhcmR3YXJlIGNhbid0Ci0JCSAqIHVzZSBza2IgYnVmZmVycy4KLQkJICovCi0JCXN0YXR1cyA9IG5ldGlmX3J4KHNrYik7CiAJCXNrYiA9IE5VTEw7CisKKwkJc2tiMiA9IHNrYl9kZXF1ZXVlKCZkZXYtPnJ4X2ZyYW1lcyk7CisJCXdoaWxlIChza2IyKSB7CisJCQlpZiAoc3RhdHVzIDwgMAorCQkJCQl8fCBFVEhfSExFTiA+IHNrYjItPmxlbgorCQkJCQl8fCBza2IyLT5sZW4gPiBFVEhfRlJBTUVfTEVOKSB7CisJCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+bmV0LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJREJHKGRldiwgInJ4IGxlbmd0aCAlZFxuIiwgc2tiMi0+bGVuKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IyKTsKKwkJCQlnb3RvIG5leHRfZnJhbWU7CisJCQl9CisJCQlza2IyLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYjIsIGRldi0+bmV0KTsKKwkJCWRldi0+bmV0LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPm5ldC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiMi0+bGVuOworCisJCQkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIGhhcmR3YXJlIGNhbid0CisJCQkgKiB1c2Ugc2tiIGJ1ZmZlcnMuCisJCQkgKi8KKwkJCXN0YXR1cyA9IG5ldGlmX3J4KHNrYjIpOworbmV4dF9mcmFtZToKKwkJCXNrYjIgPSBza2JfZGVxdWV1ZSgmZGV2LT5yeF9mcmFtZXMpOworCQl9CiAJCWJyZWFrOwogCiAJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLwpAQCAtNTM3LDE0ICs1NjMsMTUgQEAKIAkgKiBvciB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4dHJhIGhlYWRlcnMgd2UgbmVlZAogCSAqLwogCWlmIChkZXYtPndyYXApIHsKLQkJc3RydWN0IHNrX2J1ZmYJKnNrYl9uZXc7CisJCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLQkJc2tiX25ldyA9IGRldi0+d3JhcChza2IpOwotCQlpZiAoIXNrYl9uZXcpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGRldi0+cG9ydF91c2IpCisJCQlza2IgPSBkZXYtPndyYXAoZGV2LT5wb3J0X3VzYiwgc2tiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCWlmICghc2tiKQogCQkJZ290byBkcm9wOwogCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNrYiA9IHNrYl9uZXc7CiAJCWxlbmd0aCA9IHNrYi0+bGVuOwogCX0KIAlyZXEtPmJ1ZiA9IHNrYi0+ZGF0YTsKQEAgLTU3OCw5ICs2MDUsOSBAQAogCX0KIAogCWlmIChyZXR2YWwpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIGRyb3A6CiAJCWRldi0+bmV0LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CiAJCWlmIChsaXN0X2VtcHR5KCZkZXYtPnR4X3JlcXMpKQogCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKQEAgLTc1Myw2ICs3ODAsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnR4X3JlcXMpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnJ4X3JlcXMpOwogCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZGV2LT5yeF9mcmFtZXMpOworCiAJLyogbmV0d29yayBkZXZpY2Ugc2V0dXAgKi8KIAlkZXYtPm5ldCA9IG5ldDsKIAlzdHJjcHkobmV0LT5uYW1lLCAidXNiJWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5oCmluZGV4IDBkMWY3YWUuLjkxYjM5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuaApAQCAtNjAsMTIgKzYwLDEzIEBACiAKIAl1MTYJCQkJY2RjX2ZpbHRlcjsKIAotCS8qIGhvb2tzIGZvciBhZGRlZCBmcmFtaW5nLCBhcyBuZWVkZWQgZm9yIFJORElTIGFuZCBFRU0uCi0JICogd2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgbXVsdGlwbGUgZnJhbWVzIHBlciBTS0IuCi0JICovCisJLyogaG9va3MgZm9yIGFkZGVkIGZyYW1pbmcsIGFzIG5lZWRlZCBmb3IgUk5ESVMgYW5kIEVFTS4gKi8KIAl1MzIJCQkJaGVhZGVyX2xlbjsKLQlzdHJ1Y3Qgc2tfYnVmZgkJCSooKndyYXApKHN0cnVjdCBza19idWZmICpza2IpOwotCWludAkJCQkoKnVud3JhcCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJc3RydWN0IHNrX2J1ZmYJCQkqKCp3cmFwKShzdHJ1Y3QgZ2V0aGVyICpwb3J0LAorCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CQkJCSgqdW53cmFwKShzdHJ1Y3QgZ2V0aGVyICpwb3J0LAorCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOwogCiAJLyogY2FsbGVkIG9uIG5ldHdvcmsgb3Blbi9jbG9zZSAqLwogCXZvaWQJCQkJKCpvcGVuKShzdHJ1Y3QgZ2V0aGVyICopOwpAQCAtMTA5LDYgKzExMCw3IEBACiAvKiBlYWNoIGNvbmZpZ3VyYXRpb24gbWF5IGJpbmQgb25lIGluc3RhbmNlIG9mIGFuIGV0aGVybmV0IGxpbmsgKi8KIGludCBnZXRoX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pOwogaW50IGVjbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IGV0aGFkZHJbRVRIX0FMRU5dKTsKK2ludCBlZW1fYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKTsKIAogI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKaW5kZXggZmM2ZTcwOS4uYWRmODI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKQEAgLTExMTQsNyArMTExNCw2IEBACiAJLyogZXhwb3J0IHRoZSBkcml2ZXIgLi4uICovCiAJc3RhdHVzID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihnc190dHlfZHJpdmVyKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCXB1dF90dHlfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOwogCQlwcl9lcnIoIiVzOiBjYW5ub3QgcmVnaXN0ZXIsIGVyciAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCmluZGV4IGYyMWNhN2QuLjliNDNiMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTExMyw2ICsxMTMsMTIgQEAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFVTQiBjb250cm9sbGVyIHByZXNlbnQgb24gdGhlIFBvd2VyUEMKIAkgIE9wZW5GaXJtd2FyZSBwbGF0Zm9ybSBidXMuCiAKK2NvbmZpZyBVU0JfVzkwWDkwMF9FSENJCisJYm9vbCAiVzkwWDkwMChXOTBQOTEwKSBFSENJIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0QgJiYgQVJDSF9XOTBYOTAwCisJLS0taGVscC0tLQorCQlFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBXOTBYOTAwIFVTQiBjb250cm9sbGVyCisKIGNvbmZpZyBVU0JfT1hVMjEwSFBfSENECiAJdHJpc3RhdGUgIk9YVTIxMEhQIEhDRCBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCkBAIC0xNTMsNiArMTU5LDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpc3AxNzYwLgogCitjb25maWcgVVNCX0lTUDEzNjJfSENECisJdHJpc3RhdGUgIklTUDEzNjIgSENEIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0cyB0aGUgUGhpbGlwcyBJU1AxMzYyIGNoaXAgYXMgYSBob3N0IGNvbnRyb2xsZXIKKworCSAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBpc29jaHJvbm91cyB0cmFuc2ZlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlzcDEzNjItaGNkLgorCiBjb25maWcgVVNCX09IQ0lfSENECiAJdHJpc3RhdGUgIk9IQ0kgSENEIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0FSQ0hfSEFTX09IQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCmluZGV4IDI4OWQ3NDguLmY1OGIyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9FSENJX0hDRCkJKz0gZWhjaS1oY2Qubwogb2JqLSQoQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QpCSs9IG94dTIxMGhwLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX0lTUDExNlhfSENEKQkrPSBpc3AxMTZ4LWhjZC5vCitvYmotJChDT05GSUdfVVNCX0lTUDEzNjJfSENEKQkrPSBpc3AxMzYyLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX09IQ0lfSENEKQkrPSBvaGNpLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSB1aGNpLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX0ZIQ0lfSENEKQkrPSBmaGNpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdG1lbC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjMWI3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdG1lbC5jCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogRHJpdmVyIGZvciBFSENJIFVIUCBvbiBBdG1lbCBjaGlwcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24sCisgKiAgICAgICAgICAgICAgICAgICAgIE5pY29sYXMgRmVycmUgPG5pY29sYXMuZmVycmVAYXRtZWwuY29tPgorICoKKyAqICBCYXNlZCBvbiB2YXJpb3VzIGVoY2ktKi5jIGRyaXZlcnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uIGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgKmljbGssICpmY2xrOworc3RhdGljIGludCBjbG9ja2VkOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBhdG1lbF9zdGFydF9jbG9jayh2b2lkKQoreworCWNsa19lbmFibGUoaWNsayk7CisJY2xrX2VuYWJsZShmY2xrKTsKKwljbG9ja2VkID0gMTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfc3RvcF9jbG9jayh2b2lkKQoreworCWNsa19kaXNhYmxlKGZjbGspOworCWNsa19kaXNhYmxlKGljbGspOworCWNsb2NrZWQgPSAwOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9zdGFydF9laGNpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAic3RhcnRcbiIpOworCWF0bWVsX3N0YXJ0X2Nsb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX3N0b3BfZWhjaShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRldl9kYmcoJnBkZXYtPmRldiwgInN0b3BcbiIpOworCWF0bWVsX3N0b3BfY2xvY2soKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlaGNpX2F0bWVsX3NldHVwKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIHJlZ2lzdGVycyBzdGFydCBhdCBvZmZzZXQgMHgwICovCisJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsKKwkJSENfTEVOR1RIKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwlkYmdfaGNzX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKwlkYmdfaGNjX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKworCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgY2hpcCByZWFkcyAqLworCWVoY2ktPmhjc19wYXJhbXMgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKworCXJldHZhbCA9IGVoY2lfaGFsdChlaGNpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogZGF0YSBzdHJ1Y3R1cmUgaW5pdCAqLworCXJldHZhbCA9IGVoY2lfaW5pdChoY2QpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwllaGNpLT5zYnJuID0gMHgyMDsKKworCWVoY2lfcmVzZXQoZWhjaSk7CisJZWhjaV9wb3J0X3Bvd2VyKGVoY2ksIDApOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZWhjaV9hdG1lbF9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCQk9IGhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MJCT0gIkF0bWVsIEVIQ0kgVUhQIEhTIiwKKwkuaGNkX3ByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKworCS8qIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZSAqLworCS5pcnEJCQk9IGVoY2lfaXJxLAorCS5mbGFncwkJCT0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAorCisJLyogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMgKi8KKwkucmVzZXQJCQk9IGVoY2lfYXRtZWxfc2V0dXAsCisJLnN0YXJ0CQkJPSBlaGNpX3J1biwKKwkuc3RvcAkJCT0gZWhjaV9zdG9wLAorCS5zaHV0ZG93bgkJPSBlaGNpX3NodXRkb3duLAorCisJLyogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMgKi8KKwkudXJiX2VucXVldWUJCT0gZWhjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUJCT0gZWhjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZQk9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qIHNjaGVkdWxpbmcgc3VwcG9ydCAqLworCS5nZXRfZnJhbWVfbnVtYmVyCT0gZWhjaV9nZXRfZnJhbWUsCisKKwkvKiByb290IGh1YiBzdXBwb3J0ICovCisJLmh1Yl9zdGF0dXNfZGF0YQk9IGVoY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbAkJPSBlaGNpX2h1Yl9jb250cm9sLAorCS5idXNfc3VzcGVuZAkJPSBlaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCQk9IGVoY2lfYnVzX3Jlc3VtZSwKKwkucmVsaW5xdWlzaF9wb3J0CT0gZWhjaV9yZWxpbnF1aXNoX3BvcnQsCisJLnBvcnRfaGFuZGVkX292ZXIJPSBlaGNpX3BvcnRfaGFuZGVkX292ZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlaGNpX2F0bWVsX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyID0gJmVoY2lfYXRtZWxfaGNfZHJpdmVyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IHJldHZhbDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9kZWJ1ZygiSW5pdGlhbGl6aW5nIEF0bWVsLVNvQyBVU0IgSG9zdCBDb250cm9sbGVyXG4iKTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJGb3VuZCBIQyB3aXRoIG5vIElSUS4gQ2hlY2sgJXMgc2V0dXAhXG4iLAorCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfY3JlYXRlX2hjZDsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfY3JlYXRlX2hjZDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJGb3VuZCBIQyB3aXRoIG5vIHJlZ2lzdGVyIGFkZHIuIENoZWNrICVzIHNldHVwIVxuIiwKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX3JlcXVlc3RfcmVzb3VyY2U7CisJfQorCWhjZC0+cnNyY19zdGFydCA9IHJlcy0+c3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sCisJCQkJZHJpdmVyLT5kZXNjcmlwdGlvbikpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBmYWlsX3JlcXVlc3RfcmVzb3VyY2U7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKGhjZC0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIG1hcHBpbmcgbWVtb3J5XG4iKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBmYWlsX2lvcmVtYXA7CisJfQorCisJaWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImVoY2lfY2xrIik7CisJaWYgKElTX0VSUihpY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBnZXR0aW5nIGludGVyZmFjZSBjbG9ja1xuIik7CisJCXJldHZhbCA9IC1FTk9FTlQ7CisJCWdvdG8gZmFpbF9nZXRfaWNsazsKKwl9CisJZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVocGNrIik7CisJaWYgKElTX0VSUihmY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBnZXR0aW5nIGZ1bmN0aW9uIGNsb2NrXG4iKTsKKwkJcmV0dmFsID0gLUVOT0VOVDsKKwkJZ290byBmYWlsX2dldF9mY2xrOworCX0KKworCWF0bWVsX3N0YXJ0X2VoY2kocGRldik7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9TSEFSRUQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbF9hZGRfaGNkOworCisJcmV0dXJuIHJldHZhbDsKKworZmFpbF9hZGRfaGNkOgorCWF0bWVsX3N0b3BfZWhjaShwZGV2KTsKKwljbGtfcHV0KGZjbGspOworZmFpbF9nZXRfZmNsazoKKwljbGtfcHV0KGljbGspOworZmFpbF9nZXRfaWNsazoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitmYWlsX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitmYWlsX3JlcXVlc3RfcmVzb3VyY2U6CisJdXNiX3B1dF9oY2QoaGNkKTsKK2ZhaWxfY3JlYXRlX2hjZDoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0ICVzIGZhaWwsICVkXG4iLAorCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGVoY2lfYXRtZWxfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWVoY2lfc2h1dGRvd24oaGNkKTsKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCisJYXRtZWxfc3RvcF9laGNpKHBkZXYpOworCWNsa19wdXQoZmNsayk7CisJY2xrX3B1dChpY2xrKTsKKwlmY2xrID0gaWNsayA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWhjaV9hdG1lbF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGVoY2lfYXRtZWxfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3AoZWhjaV9hdG1lbF9kcnZfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAorCS5kcml2ZXIubmFtZQk9ICJhdG1lbC1laGNpIiwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggNTlkMjA4ZC4uZWQ3N2JlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMTk5LDEwICsxOTksOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGVoY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgZWhjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBlaGNpX2hjZCAqZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CkBAIC0yMjksMTIgKzIyOCw2IEBACiAJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIAkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAKLQkvKiBtYWtlIHN1cmUgc25hcHNob3QgYmVpbmcgcmVzdW1lZCByZS1lbnVtZXJhdGVzIGV2ZXJ5dGhpbmcgKi8KLQlpZiAobWVzc2FnZS5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKSB7Ci0JCWVoY2lfaGFsdChlaGNpKTsKLQkJZWhjaV9yZXNldChlaGNpKTsKLQl9Ci0KIAljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwogCiAJYXUxeHh4X3N0b3BfZWhjKCk7CkBAIC0yNDgsMTAgKzI0MSw5IEBACiAJcmV0dXJuIHJjOwogfQogCi0KLXN0YXRpYyBpbnQgZWhjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZWhjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKIAogCWF1MXh4eF9zdGFydF9laGMoKTsKQEAgLTMwNSwyMCArMjk3LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBhdTF4eHhfZWhjaV9wbW9wcyA9IHsKKwkuc3VzcGVuZAk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lLAorfTsKKworI2RlZmluZSBBVTFYWFhfRUhDSV9QTU9QUyAmYXUxeHh4X2VoY2lfcG1vcHMKKwogI2Vsc2UKLSNkZWZpbmUgZWhjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgZWhjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUgTlVMTAorI2RlZmluZSBBVTFYWFhfRUhDSV9QTU9QUyBOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWhjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZWhjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJhdTF4eHgtZWhjaSIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSBBVTFYWFhfRUhDSV9QTU9QUywKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKaW5kZXggN2Y0YWNlNy4uODc0ZDIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwpAQCAtMTM0LDEwICsxMzQsMTEgQEAKIHN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkCiBkYmdfcWggKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKIHsKKwlzdHJ1Y3QgZWhjaV9xaF9odyAqaHcgPSBxaC0+aHc7CisKIAllaGNpX2RiZyAoZWhjaSwgIiVzIHFoICVwIG4lMDh4IGluZm8gJXggJXggcXRkICV4XG4iLCBsYWJlbCwKLQkJcWgsIHFoLT5od19uZXh0LCBxaC0+aHdfaW5mbzEsIHFoLT5od19pbmZvMiwKLQkJcWgtPmh3X2N1cnJlbnQpOwotCWRiZ19xdGQgKCJvdmVybGF5IiwgZWhjaSwgKHN0cnVjdCBlaGNpX3F0ZCAqKSAmcWgtPmh3X3F0ZF9uZXh0KTsKKwkJcWgsIGh3LT5od19uZXh0LCBody0+aHdfaW5mbzEsIGh3LT5od19pbmZvMiwgaHctPmh3X2N1cnJlbnQpOworCWRiZ19xdGQoIm92ZXJsYXkiLCBlaGNpLCAoc3RydWN0IGVoY2lfcXRkICopICZody0+aHdfcXRkX25leHQpOwogfQogCiBzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZApAQCAtNDAwLDMxICs0MDEsMzIgQEAKIAljaGFyCQkJKm5leHQgPSAqbmV4dHA7CiAJY2hhcgkJCW1hcms7CiAJX19sZTMyCQkJbGlzdF9lbmQgPSBFSENJX0xJU1RfRU5EKGVoY2kpOworCXN0cnVjdCBlaGNpX3FoX2h3CSpodyA9IHFoLT5odzsKIAotCWlmIChxaC0+aHdfcXRkX25leHQgPT0gbGlzdF9lbmQpCS8qIE5FQyBkb2VzIHRoaXMgKi8KKwlpZiAoaHctPmh3X3F0ZF9uZXh0ID09IGxpc3RfZW5kKQkvKiBORUMgZG9lcyB0aGlzICovCiAJCW1hcmsgPSAnQCc7CiAJZWxzZQotCQltYXJrID0gdG9rZW5fbWFyayhlaGNpLCBxaC0+aHdfdG9rZW4pOworCQltYXJrID0gdG9rZW5fbWFyayhlaGNpLCBody0+aHdfdG9rZW4pOwogCWlmIChtYXJrID09ICcvJykgewkvKiBxaF9hbHRfbmV4dCBjb250cm9scyBxaCBhZHZhbmNlPyAqLwotCQlpZiAoKHFoLT5od19hbHRfbmV4dCAmIFFURF9NQVNLKGVoY2kpKQotCQkJCT09IGVoY2ktPmFzeW5jLT5od19hbHRfbmV4dCkKKwkJaWYgKChody0+aHdfYWx0X25leHQgJiBRVERfTUFTSyhlaGNpKSkKKwkJCQk9PSBlaGNpLT5hc3luYy0+aHctPmh3X2FsdF9uZXh0KQogCQkJbWFyayA9ICcjJzsJLyogYmxvY2tlZCAqLwotCQllbHNlIGlmIChxaC0+aHdfYWx0X25leHQgPT0gbGlzdF9lbmQpCisJCWVsc2UgaWYgKGh3LT5od19hbHRfbmV4dCA9PSBsaXN0X2VuZCkKIAkJCW1hcmsgPSAnLic7CS8qIHVzZSBod19xdGRfbmV4dCAqLwogCQkvKiBlbHNlIGFsdF9uZXh0IHBvaW50cyB0byBzb21lIG90aGVyIHF0ZCAqLwogCX0KLQlzY3JhdGNoID0gaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfaW5mbzEpOwotCWh3X2N1cnIgPSAobWFyayA9PSAnKicpID8gaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfY3VycmVudCkgOiAwOworCXNjcmF0Y2ggPSBoYzMyX3RvX2NwdXAoZWhjaSwgJmh3LT5od19pbmZvMSk7CisJaHdfY3VyciA9IChtYXJrID09ICcqJykgPyBoYzMyX3RvX2NwdXAoZWhjaSwgJmh3LT5od19jdXJyZW50KSA6IDA7CiAJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKIAkJCSJxaC8lcCBkZXYlZCAlY3MgZXAlZCAlMDh4ICUwOHggKCUwOHglYyAlcyBuYWslZCkiLAogCQkJcWgsIHNjcmF0Y2ggJiAweDAwN2YsCiAJCQlzcGVlZF9jaGFyIChzY3JhdGNoKSwKIAkJCShzY3JhdGNoID4+IDgpICYgMHgwMDBmLAotCQkJc2NyYXRjaCwgaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfaW5mbzIpLAotCQkJaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfdG9rZW4pLCBtYXJrLAotCQkJKGNwdV90b19oYzMyKGVoY2ksIFFURF9UT0dHTEUpICYgcWgtPmh3X3Rva2VuKQorCQkJc2NyYXRjaCwgaGMzMl90b19jcHVwKGVoY2ksICZody0+aHdfaW5mbzIpLAorCQkJaGMzMl90b19jcHVwKGVoY2ksICZody0+aHdfdG9rZW4pLCBtYXJrLAorCQkJKGNwdV90b19oYzMyKGVoY2ksIFFURF9UT0dHTEUpICYgaHctPmh3X3Rva2VuKQogCQkJCT8gImRhdGExIiA6ICJkYXRhMCIsCi0JCQkoaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfYWx0X25leHQpID4+IDEpICYgMHgwZik7CisJCQkoaGMzMl90b19jcHVwKGVoY2ksICZody0+aHdfYWx0X25leHQpID4+IDEpICYgMHgwZik7CiAJc2l6ZSAtPSB0ZW1wOwogCW5leHQgKz0gdGVtcDsKIApAQCAtNDM1LDEwICs0MzcsMTAgQEAKIAkJbWFyayA9ICcgJzsKIAkJaWYgKGh3X2N1cnIgPT0gdGQtPnF0ZF9kbWEpCiAJCQltYXJrID0gJyonOwotCQllbHNlIGlmIChxaC0+aHdfcXRkX25leHQgPT0gY3B1X3RvX2hjMzIoZWhjaSwgdGQtPnF0ZF9kbWEpKQorCQllbHNlIGlmIChody0+aHdfcXRkX25leHQgPT0gY3B1X3RvX2hjMzIoZWhjaSwgdGQtPnF0ZF9kbWEpKQogCQkJbWFyayA9ICcrJzsKIAkJZWxzZSBpZiAoUVREX0xFTkdUSCAoc2NyYXRjaCkpIHsKLQkJCWlmICh0ZC0+aHdfYWx0X25leHQgPT0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0KQorCQkJaWYgKHRkLT5od19hbHRfbmV4dCA9PSBlaGNpLT5hc3luYy0+aHctPmh3X2FsdF9uZXh0KQogCQkJCW1hcmsgPSAnIyc7CiAJCQllbHNlIGlmICh0ZC0+aHdfYWx0X25leHQgIT0gbGlzdF9lbmQpCiAJCQkJbWFyayA9ICcvJzsKQEAgLTU1MCwxMiArNTUyLDE1IEBACiAJCW5leHQgKz0gdGVtcDsKIAogCQlkbyB7CisJCQlzdHJ1Y3QgZWhjaV9xaF9odyAqaHc7CisKIAkJCXN3aXRjaCAoaGMzMl90b19jcHUoZWhjaSwgdGFnKSkgewogCQkJY2FzZSBRX1RZUEVfUUg6CisJCQkJaHcgPSBwLnFoLT5odzsKIAkJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiIHFoJWQtJTA0eC8lcCIsCiAJCQkJCQlwLnFoLT5wZXJpb2QsCiAJCQkJCQloYzMyX3RvX2NwdXAoZWhjaSwKLQkJCQkJCQkJJnAucWgtPmh3X2luZm8yKQorCQkJCQkJCSZody0+aHdfaW5mbzIpCiAJCQkJCQkJLyogdWZyYW1lIG1hc2tzICovCiAJCQkJCQkJJiAoUUhfQ01BU0sgfCBRSF9TTUFTSyksCiAJCQkJCQlwLnFoKTsKQEAgLTU3Niw3ICs1ODEsNyBAQAogCQkJCS8qIHNob3cgbW9yZSBpbmZvIHRoZSBmaXJzdCB0aW1lIGFyb3VuZCAqLwogCQkJCWlmICh0ZW1wID09IHNlZW5fY291bnQpIHsKIAkJCQkJdTMyCXNjcmF0Y2ggPSBoYzMyX3RvX2NwdXAoZWhjaSwKLQkJCQkJCQkmcC5xaC0+aHdfaW5mbzEpOworCQkJCQkJCSZody0+aHdfaW5mbzEpOwogCQkJCQlzdHJ1Y3QgZWhjaV9xdGQJKnF0ZDsKIAkJCQkJY2hhcgkJKnR5cGUgPSAiIjsKIApAQCAtNjA5LDcgKzYxNCw3IEBACiAJCQkJfSBlbHNlCiAJCQkJCXRlbXAgPSAwOwogCQkJCWlmIChwLnFoKSB7Ci0JCQkJCXRhZyA9IFFfTkVYVF9UWVBFKGVoY2ksIHAucWgtPmh3X25leHQpOworCQkJCQl0YWcgPSBRX05FWFRfVFlQRShlaGNpLCBody0+aHdfbmV4dCk7CiAJCQkJCXAgPSBwLnFoLT5xaF9uZXh0OwogCQkJCX0KIAkJCQlicmVhazsKQEAgLTg3OSw4ICs4ODQsNyBAQAogCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChidWYpIHsKLQkJaWYgKGJ1Zi0+b3V0cHV0X2J1ZikKLQkJCXZmcmVlKGJ1Zi0+b3V0cHV0X2J1Zik7CisJCXZmcmVlKGJ1Zi0+b3V0cHV0X2J1Zik7CiAJCWtmcmVlKGJ1Zik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggMTFjNjI3Yy4uOTgzNWUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KQEAgLTEyNyw2ICsxMjYsOCBAQAogCiAJCXN3aXRjaCAoYWN0aW9uKSB7CiAJCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6CisJCQlpZiAoIWVoY2ktPm5lZWRfaW9fd2F0Y2hkb2cpCisJCQkJcmV0dXJuOwogCQkJdCA9IEVIQ0lfSU9fSklGRklFUzsKIAkJCWJyZWFrOwogCQljYXNlIFRJTUVSX0FTWU5DX09GRjoKQEAgLTIzOSw2ICsyNDAsMTEgQEAKIAlpbnQJcmV0dmFsOwogCXUzMgljb21tYW5kID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CiAKKwkvKiBJZiB0aGUgRUhDSSBkZWJ1ZyBjb250cm9sbGVyIGlzIGFjdGl2ZSwgc3BlY2lhbCBjYXJlIG11c3QgYmUKKwkgKiB0YWtlbiBiZWZvcmUgYW5kIGFmdGVyIGEgaG9zdCBjb250cm9sbGVyIHJlc2V0ICovCisJaWYgKGVoY2ktPmRlYnVnICYmICFkYmdwX3Jlc2V0X3ByZXAoKSkKKwkJZWhjaS0+ZGVidWcgPSBOVUxMOworCiAJY29tbWFuZCB8PSBDTURfUkVTRVQ7CiAJZGJnX2NtZCAoZWhjaSwgInJlc2V0IiwgY29tbWFuZCk7CiAJZWhjaV93cml0ZWwoZWhjaSwgY29tbWFuZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwpAQCAtMjQ3LDEyICsyNTMsMjEgQEAKIAlyZXR2YWwgPSBoYW5kc2hha2UgKGVoY2ksICZlaGNpLT5yZWdzLT5jb21tYW5kLAogCQkJICAgIENNRF9SRVNFVCwgMCwgMjUwICogMTAwMCk7CiAKKwlpZiAoZWhjaS0+aGFzX2hvc3RwYykgeworCQllaGNpX3dyaXRlbChlaGNpLCBVU0JNT0RFX0VYX0hDIHwgVVNCTU9ERV9FWF9WQlBTLAorCQkJKHUzMiBfX2lvbWVtICopKCgodTggKillaGNpLT5yZWdzKSArIFVTQk1PREVfRVgpKTsKKwkJZWhjaV93cml0ZWwoZWhjaSwgVFhGSUZPX0RFRkFVTFQsCisJCQkodTMyIF9faW9tZW0gKikoKCh1OCAqKWVoY2ktPnJlZ3MpICsgVFhGSUxMVFVOSU5HKSk7CisJfQogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKIAlpZiAoZWhjaV9pc19UREkoZWhjaSkpCiAJCXRkaV9yZXNldCAoZWhjaSk7CiAKKwlpZiAoZWhjaS0+ZGVidWcpCisJCWRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCgpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNTA1LDkgKzUyMCwxNCBAQAogCXUzMgkJCXRlbXA7CiAJaW50CQkJcmV0dmFsOwogCXUzMgkJCWhjY19wYXJhbXM7CisJc3RydWN0IGVoY2lfcWhfaHcJKmh3OwogCiAJc3Bpbl9sb2NrX2luaXQoJmVoY2ktPmxvY2spOwogCisJLyoKKwkgKiBrZWVwIGlvIHdhdGNoZG9nIGJ5IGRlZmF1bHQsIHRob3NlIGdvb2QgSENEcyBjb3VsZCB0dXJuIG9mZiBpdCBsYXRlcgorCSAqLworCWVoY2ktPm5lZWRfaW9fd2F0Y2hkb2cgPSAxOwogCWluaXRfdGltZXIoJmVoY2ktPndhdGNoZG9nKTsKIAllaGNpLT53YXRjaGRvZy5mdW5jdGlvbiA9IGVoY2lfd2F0Y2hkb2c7CiAJZWhjaS0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOwpAQCAtNTQ0LDEyICs1NjQsMTMgQEAKIAkgKiBmcm9tIGF1dG9tYXRpY2FsbHkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IHRkIGFmdGVyIHNob3J0IHJlYWRzLgogCSAqLwogCWVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoID0gTlVMTDsKLQllaGNpLT5hc3luYy0+aHdfbmV4dCA9IFFIX05FWFQoZWhjaSwgZWhjaS0+YXN5bmMtPnFoX2RtYSk7Ci0JZWhjaS0+YXN5bmMtPmh3X2luZm8xID0gY3B1X3RvX2hjMzIoZWhjaSwgUUhfSEVBRCk7Ci0JZWhjaS0+YXN5bmMtPmh3X3Rva2VuID0gY3B1X3RvX2hjMzIoZWhjaSwgUVREX1NUU19IQUxUKTsKLQllaGNpLT5hc3luYy0+aHdfcXRkX25leHQgPSBFSENJX0xJU1RfRU5EKGVoY2kpOworCWh3ID0gZWhjaS0+YXN5bmMtPmh3OworCWh3LT5od19uZXh0ID0gUUhfTkVYVChlaGNpLCBlaGNpLT5hc3luYy0+cWhfZG1hKTsKKwlody0+aHdfaW5mbzEgPSBjcHVfdG9faGMzMihlaGNpLCBRSF9IRUFEKTsKKwlody0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLCBRVERfU1RTX0hBTFQpOworCWh3LT5od19xdGRfbmV4dCA9IEVIQ0lfTElTVF9FTkQoZWhjaSk7CiAJZWhjaS0+YXN5bmMtPnFoX3N0YXRlID0gUUhfU1RBVEVfTElOS0VEOwotCWVoY2ktPmFzeW5jLT5od19hbHRfbmV4dCA9IFFURF9ORVhUKGVoY2ksIGVoY2ktPmFzeW5jLT5kdW1teS0+cXRkX2RtYSk7CisJaHctPmh3X2FsdF9uZXh0ID0gUVREX05FWFQoZWhjaSwgZWhjaS0+YXN5bmMtPmR1bW15LT5xdGRfZG1hKTsKIAogCS8qIGNsZWFyIGludGVycnVwdCBlbmFibGVzLCBzZXQgaXJxIGxhdGVuY3kgKi8KIAlpZiAobG9nMl9pcnFfdGhyZXNoIDwgMCB8fCBsb2cyX2lycV90aHJlc2ggPiA2KQpAQCAtODUwLDEyICs4NzEsMTggQEAKIAlpZiAoIUhDX0lTX1JVTk5JTkcoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSAmJiBlaGNpLT5yZWNsYWltKQogCQllbmRfdW5saW5rX2FzeW5jKGVoY2kpOwogCi0JLyogaWYgaXQncyBub3QgbGlua2VkIHRoZW4gdGhlcmUncyBub3RoaW5nIHRvIGRvICovCi0JaWYgKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9MSU5LRUQpCi0JCTsKKwkvKiBJZiB0aGUgUUggaXNuJ3QgbGlua2VkIHRoZW4gdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbworCSAqIHVubGVzcyB3ZSB3ZXJlIGNhbGxlZCBkdXJpbmcgYSBnaXZlYmFjaywgaW4gd2hpY2ggY2FzZQorCSAqIHFoX2NvbXBsZXRpb25zKCkgaGFzIHRvIGRlYWwgd2l0aCBpdC4KKwkgKi8KKwlpZiAocWgtPnFoX3N0YXRlICE9IFFIX1NUQVRFX0xJTktFRCkgeworCQlpZiAocWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0NPTVBMRVRJTkcpCisJCQlxaC0+bmVlZHNfcmVzY2FuID0gMTsKKwkJcmV0dXJuOworCX0KIAogCS8qIGRlZmVyIHRpbGwgbGF0ZXIgaWYgYnVzeSAqLwotCWVsc2UgaWYgKGVoY2ktPnJlY2xhaW0pIHsKKwlpZiAoZWhjaS0+cmVjbGFpbSkgewogCQlzdHJ1Y3QgZWhjaV9xaAkJKmxhc3Q7CiAKIAkJZm9yIChsYXN0ID0gZWhjaS0+cmVjbGFpbTsKQEAgLTkxNSw4ICs5NDIsOSBAQAogCQkJYnJlYWs7CiAJCXN3aXRjaCAocWgtPnFoX3N0YXRlKSB7CiAJCWNhc2UgUUhfU1RBVEVfTElOS0VEOgorCQljYXNlIFFIX1NUQVRFX0NPTVBMRVRJTkc6CiAJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHFoKTsKLQkJCS8qIEZBTEwgVEhST1VHSCAqLworCQkJYnJlYWs7CiAJCWNhc2UgUUhfU1RBVEVfSURMRToKIAkJCXFoX2NvbXBsZXRpb25zIChlaGNpLCBxaCk7CiAJCQlicmVhazsKQEAgLTkyNSwyMyArOTUzLDYgQEAKIAkJCQkJcWgsIHFoLT5xaF9zdGF0ZSk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KLQotCQkvKiByZXNjaGVkdWxlIFFIIGlmZiBhbm90aGVyIHJlcXVlc3QgaXMgcXVldWVkICovCi0JCWlmICghbGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkKLQkJCQkmJiBIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkgewotCQkJcmMgPSBxaF9zY2hlZHVsZShlaGNpLCBxaCk7Ci0KLQkJCS8qIEFuIGVycm9yIGhlcmUgbGlrZWx5IGluZGljYXRlcyBoYW5kc2hha2UgZmFpbHVyZQotCQkJICogb3Igbm8gc3BhY2UgbGVmdCBpbiB0aGUgc2NoZWR1bGUuICBOZWl0aGVyIGZhdWx0Ci0JCQkgKiBzaG91bGQgaGFwcGVuIG9mdGVuIC4uLgotCQkJICoKLQkJCSAqIEZJWE1FIGtpbGwgdGhlIG5vdy1keXNmdW5jdGlvbmFsIHF1ZXVlZCB1cmJzCi0JCQkgKi8KLQkJCWlmIChyYyAhPSAwKQotCQkJCWVoY2lfZXJyKGVoY2ksCi0JCQkJCSJjYW4ndCByZXNjaGVkdWxlIHFoICVwLCBlcnIgJWQiLAotCQkJCQlxaCwgcmMpOwotCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgpAQCAtOTc5LDcgKzk5MCw3IEBACiAJLyogZW5kcG9pbnRzIGNhbiBiZSBpc28gc3RyZWFtcy4gIGZvciBub3csIHdlIGRvbid0CiAJICogYWNjZWxlcmF0ZSBpc28gY29tcGxldGlvbnMgLi4uIHNvIHNwaW4gYSB3aGlsZS4KIAkgKi8KLQlpZiAocWgtPmh3X2luZm8xID09IDApIHsKKwlpZiAocWgtPmh3LT5od19pbmZvMSA9PSAwKSB7CiAJCWVoY2lfdmRiZyAoZWhjaSwgImlzbyBkZWxheVxuIik7CiAJCWdvdG8gaWRsZV90aW1lb3V0OwogCX0KQEAgLTk4OCw2ICs5OTksNyBAQAogCQlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOwogCXN3aXRjaCAocWgtPnFoX3N0YXRlKSB7CiAJY2FzZSBRSF9TVEFURV9MSU5LRUQ6CisJY2FzZSBRSF9TVEFURV9DT01QTEVUSU5HOgogCQlmb3IgKHRtcCA9IGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoOwogCQkJCXRtcCAmJiB0bXAgIT0gcWg7CiAJCQkJdG1wID0gdG1wLT5xaF9uZXh0LnFoKQpAQCAtMTA1MiwxOCArMTA2NCwxNyBAQAogCQl1c2Jfc2V0dG9nZ2xlKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQsIDApOwogCQlpZiAoIWxpc3RfZW1wdHkoJnFoLT5xdGRfbGlzdCkpIHsKIAkJCVdBUk5fT05DRSgxLCAiY2xlYXJfaGFsdCBmb3IgYSBidXN5IGVuZHBvaW50XG4iKTsKLQkJfSBlbHNlIGlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfTElOS0VEKSB7CisJCX0gZWxzZSBpZiAocWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0xJTktFRCB8fAorCQkJCXFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9DT01QTEVUSU5HKSB7CiAKIAkJCS8qIFRoZSB0b2dnbGUgdmFsdWUgaW4gdGhlIFFIIGNhbid0IGJlIHVwZGF0ZWQKIAkJCSAqIHdoaWxlIHRoZSBRSCBpcyBhY3RpdmUuICBVbmxpbmsgaXQgbm93OwogCQkJICogcmUtbGlua2luZyB3aWxsIGNhbGwgcWhfcmVmcmVzaCgpLgogCQkJICovCi0JCQlpZiAoZXB0eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkJCWlmIChlcHR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKIAkJCQl1bmxpbmtfYXN5bmMoZWhjaSwgcWgpOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlpbnRyX2Rlc2NoZWR1bGUoZWhjaSwgcWgpOwotCQkJCSh2b2lkKSBxaF9zY2hlZHVsZShlaGNpLCBxaCk7Ci0JCQl9CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTExNyw2ICsxMTI4LDE2IEBACiAjZGVmaW5lCVBMQVRGT1JNX0RSSVZFUgkJaXhwNHh4X2VoY2lfZHJpdmVyCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VU0JfVzkwWDkwMF9FSENJCisjaW5jbHVkZSAiZWhjaS13OTB4OTAwLmMiCisjZGVmaW5lCVBMQVRGT1JNX0RSSVZFUgkJZWhjaV9oY2RfdzkweDkwMF9kcml2ZXIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MQorI2luY2x1ZGUgImVoY2ktYXRtZWwuYyIKKyNkZWZpbmUJUExBVEZPUk1fRFJJVkVSCQllaGNpX2F0bWVsX2RyaXZlcgorI2VuZGlmCisKICNpZiAhZGVmaW5lZChQQ0lfRFJJVkVSKSAmJiAhZGVmaW5lZChQTEFURk9STV9EUklWRVIpICYmIFwKICAgICAhZGVmaW5lZChQUzNfU1lTVEVNX0JVU19EUklWRVIpICYmICFkZWZpbmVkKE9GX1BMQVRGT1JNX0RSSVZFUikKICNlcnJvciAibWlzc2luZyBidXMgZ2x1ZSBmb3IgZWhjaS1oY2QiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggZjQ2YWQyNy4uMWI2ZjFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMTExLDYgKzExMSw3IEBACiAJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwogCWludAkJCXBvcnQ7CiAJaW50CQkJbWFzazsKKwl1MzIgX19pb21lbQkJKmhvc3RwY19yZWcgPSBOVUxMOwogCiAJZWhjaV9kYmcoZWhjaSwgInN1c3BlbmQgcm9vdCBodWJcbiIpOwogCkBAIC0xNDIsNiArMTQzLDkgQEAKIAkJdTMyCQl0MSA9IGVoY2lfcmVhZGwoZWhjaSwgcmVnKSAmIH5QT1JUX1JXQ19CSVRTOwogCQl1MzIJCXQyID0gdDE7CiAKKwkJaWYgKGVoY2ktPmhhc19ob3N0cGMpCisJCQlob3N0cGNfcmVnID0gKHUzMiBfX2lvbWVtICopKCh1OCAqKWVoY2ktPnJlZ3MKKwkJCQkrIEhPU1RQQzAgKyA0ICogKHBvcnQgJiAweGZmKSk7CiAJCS8qIGtlZXAgdHJhY2sgb2Ygd2hpY2ggcG9ydHMgd2Ugc3VzcGVuZCAqLwogCQlpZiAodDEgJiBQT1JUX09XTkVSKQogCQkJc2V0X2JpdChwb3J0LCAmZWhjaS0+b3duZWRfcG9ydHMpOwpAQCAtMTUxLDE1ICsxNTUsMzcgQEAKIAkJfQogCiAJCS8qIGVuYWJsZSByZW1vdGUgd2FrZXVwIG9uIGFsbCBwb3J0cyAqLwotCQlpZiAoaGNkLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwKQotCQkJdDIgfD0gUE9SVF9XQUtFX0JJVFM7Ci0JCWVsc2UKKwkJaWYgKGhjZC0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCkgeworCQkJLyogb25seSBlbmFibGUgYXBwcm9wcmlhdGUgd2FrZSBiaXRzLCBvdGhlcndpc2UgdGhlCisJCQkgKiBoYXJkd2FyZSBjYW4gbm90IGdvIHBoeSBsb3cgcG93ZXIgbW9kZS4gSWYgYSByYWNlCisJCQkgKiBjb25kaXRpb24gaGFwcGVucyBoZXJlKGNvbm5lY3Rpb24gY2hhbmdlIGR1cmluZyBiaXRzCisJCQkgKiBzZXQpLCB0aGUgcG9ydCBjaGFuZ2UgZGV0ZWN0aW9uIHdpbGwgZmluYWxseSBmaXggaXQuCisJCQkgKi8KKwkJCWlmICh0MSAmIFBPUlRfQ09OTkVDVCkgeworCQkJCXQyIHw9IFBPUlRfV0tPQ19FIHwgUE9SVF9XS0RJU0NfRTsKKwkJCQl0MiAmPSB+UE9SVF9XS0NPTk5fRTsKKwkJCX0gZWxzZSB7CisJCQkJdDIgfD0gUE9SVF9XS09DX0UgfCBQT1JUX1dLQ09OTl9FOworCQkJCXQyICY9IH5QT1JUX1dLRElTQ19FOworCQkJfQorCQl9IGVsc2UKIAkJCXQyICY9IH5QT1JUX1dBS0VfQklUUzsKIAogCQlpZiAodDEgIT0gdDIpIHsKIAkJCWVoY2lfdmRiZyAoZWhjaSwgInBvcnQgJWQsICUwOHggLT4gJTA4eFxuIiwKIAkJCQlwb3J0ICsgMSwgdDEsIHQyKTsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHQyLCByZWcpOworCQkJaWYgKGhvc3RwY19yZWcpIHsKKwkJCQl1MzIJdDM7CisKKwkJCQltc2xlZXAoNSk7LyogNW1zIGZvciBIQ0QgZW50ZXIgbG93IHB3ciBtb2RlICovCisJCQkJdDMgPSBlaGNpX3JlYWRsKGVoY2ksIGhvc3RwY19yZWcpOworCQkJCWVoY2lfd3JpdGVsKGVoY2ksIHQzIHwgSE9TVFBDX1BIQ0QsIGhvc3RwY19yZWcpOworCQkJCXQzID0gZWhjaV9yZWFkbChlaGNpLCBob3N0cGNfcmVnKTsKKwkJCQllaGNpX2RiZyhlaGNpLCAiUG9ydCVkIHBoeSBsb3cgcHdyIG1vZGUgJXNcbiIsCisJCQkJCXBvcnQsICh0MyAmIEhPU1RQQ19QSENEKSA/CisJCQkJCSJzdWNjZWVkZWQiIDogImZhaWxlZCIpOworCQkJfQogCQl9CiAJfQogCkBAIC0xODMsNiArMjA5LDExIEBACiAKIAllaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTApOwogCXNwaW5fdW5sb2NrX2lycSAoJmVoY2ktPmxvY2spOworCisJLyogZWhjaV93b3JrKCkgbWF5IGhhdmUgcmUtZW5hYmxlZCB0aGUgd2F0Y2hkb2cgdGltZXIsIHdoaWNoIHdlIGRvIG5vdAorCSAqIHdhbnQsIGFuZCBzbyB3ZSBtdXN0IGRlbGV0ZSBhbnkgcGVuZGluZyB3YXRjaGRvZyB0aW1lciBldmVudHMuCisJICovCisJZGVsX3RpbWVyX3N5bmMoJmVoY2ktPndhdGNoZG9nKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA0LDYgKzIzNSwxMyBAQAogCQlyZXR1cm4gLUVTSFVURE9XTjsKIAl9CiAKKwlpZiAodW5saWtlbHkoZWhjaS0+ZGVidWcpKSB7CisJCWlmIChlaGNpLT5kZWJ1ZyAmJiAhZGJncF9yZXNldF9wcmVwKCkpCisJCQllaGNpLT5kZWJ1ZyA9IE5VTEw7CisJCWVsc2UKKwkJCWRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCgpOworCX0KKwogCS8qIElkZWFsbHkgYW5kIHdlJ3ZlIGdvdCBhIHJlYWwgcmVzdW1lIGhlcmUsIGFuZCBubyBwb3J0J3MgcG93ZXIKIAkgKiB3YXMgbG9zdC4gIChGb3IgUENJLCB0aGF0IG1lYW5zIFZhdXggd2FzIG1haW50YWluZWQuKSAgQnV0IHdlCiAJICogY291bGQgaW5zdGVhZCBiZSByZXN0b3JpbmcgYSBzd3N1c3Agc25hcHNob3QgLS0gc28gdGhhdCBCSU9TIHdhcwpAQCAtNTYzLDcgKzYwMSw4IEBACiAJaW50CQlwb3J0cyA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsKIAl1MzIgX19pb21lbQkqc3RhdHVzX3JlZyA9ICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1sKIAkJCQkod0luZGV4ICYgMHhmZikgLSAxXTsKLQl1MzIJCXRlbXAsIHN0YXR1czsKKwl1MzIgX19pb21lbQkqaG9zdHBjX3JlZyA9IE5VTEw7CisJdTMyCQl0ZW1wLCB0ZW1wMSwgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJaW50CQlyZXR2YWwgPSAwOwogCXVuc2lnbmVkCXNlbGVjdG9yOwpAQCAtNTc1LDYgKzYxNCw5IEBACiAJICogcG93ZXIsICJ0aGlzIGlzIHRoZSBvbmUiLCBldGMuICBFSENJIHNwZWMgc3VwcG9ydHMgdGhpcy4KIAkgKi8KIAorCWlmIChlaGNpLT5oYXNfaG9zdHBjKQorCQlob3N0cGNfcmVnID0gKHUzMiBfX2lvbWVtICopKCh1OCAqKWVoY2ktPnJlZ3MKKwkJCQkrIEhPU1RQQzAgKyA0ICogKCh3SW5kZXggJiAweGZmKSAtIDEpKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAlzd2l0Y2ggKHR5cGVSZXEpIHsKIAljYXNlIENsZWFySHViRmVhdHVyZToKQEAgLTc3Myw3ICs4MTUsMTEgQEAKIAkJaWYgKHRlbXAgJiBQT1JUX0NPTk5FQ1QpIHsKIAkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTjsKIAkJCS8vIHN0YXR1cyBtYXkgYmUgZnJvbSBpbnRlZ3JhdGVkIFRUCi0JCQlzdGF0dXMgfD0gZWhjaV9wb3J0X3NwZWVkKGVoY2ksIHRlbXApOworCQkJaWYgKGVoY2ktPmhhc19ob3N0cGMpIHsKKwkJCQl0ZW1wMSA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CisJCQkJc3RhdHVzIHw9IGVoY2lfcG9ydF9zcGVlZChlaGNpLCB0ZW1wMSk7CisJCQl9IGVsc2UKKwkJCQlzdGF0dXMgfD0gZWhjaV9wb3J0X3NwZWVkKGVoY2ksIHRlbXApOwogCQl9CiAJCWlmICh0ZW1wICYgUE9SVF9QRSkKIAkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFOwpAQCAtODE2LDYgKzg2MiwxNSBAQAogCWNhc2UgU2V0UG9ydEZlYXR1cmU6CiAJCXNlbGVjdG9yID0gd0luZGV4ID4+IDg7CiAJCXdJbmRleCAmPSAweGZmOworCQlpZiAodW5saWtlbHkoZWhjaS0+ZGVidWcpKSB7CisJCQkvKiBJZiB0aGUgZGVidWcgcG9ydCBpcyBhY3RpdmUgYW55IHBvcnQKKwkJCSAqIGZlYXR1cmUgcmVxdWVzdHMgc2hvdWxkIGdldCBkZW5pZWQgKi8KKwkJCWlmICh3SW5kZXggPT0gSENTX0RFQlVHX1BPUlQoZWhjaS0+aGNzX3BhcmFtcykgJiYKKwkJCSAgICAocmVhZGwoJmVoY2ktPmRlYnVnLT5jb250cm9sKSAmIERCR1BfRU5BQkxFRCkpIHsKKwkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCWdvdG8gZXJyb3JfZXhpdDsKKwkJCX0KKwkJfQogCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKIAkJCWdvdG8gZXJyb3I7CiAJCXdJbmRleC0tOwpAQCAtODMyLDYgKzg4NywyNCBAQAogCQkJCQl8fCAodGVtcCAmIFBPUlRfUkVTRVQpICE9IDApCiAJCQkJZ290byBlcnJvcjsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsIHN0YXR1c19yZWcpOworCQkJLyogQWZ0ZXIgYWJvdmUgY2hlY2sgdGhlIHBvcnQgbXVzdCBiZSBjb25uZWN0ZWQuCisJCQkgKiBTZXQgYXBwcm9wcmlhdGUgYml0IHRodXMgY291bGQgcHV0IHBoeSBpbnRvIGxvdyBwb3dlcgorCQkJICogbW9kZSBpZiB3ZSBoYXZlIGhvc3RwYyBmZWF0dXJlCisJCQkgKi8KKwkJCWlmIChob3N0cGNfcmVnKSB7CisJCQkJdGVtcCAmPSB+UE9SVF9XS0NPTk5fRTsKKwkJCQl0ZW1wIHw9IChQT1JUX1dLRElTQ19FIHwgUE9SVF9XS09DX0UpOworCQkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsCisJCQkJCQkJc3RhdHVzX3JlZyk7CisJCQkJbXNsZWVwKDUpOy8qIDVtcyBmb3IgSENEIGVudGVyIGxvdyBwd3IgbW9kZSAqLworCQkJCXRlbXAxID0gZWhjaV9yZWFkbChlaGNpLCBob3N0cGNfcmVnKTsKKwkJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wMSB8IEhPU1RQQ19QSENELAorCQkJCQlob3N0cGNfcmVnKTsKKwkJCQl0ZW1wMSA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CisJCQkJZWhjaV9kYmcoZWhjaSwgIlBvcnQlZCBwaHkgbG93IHB3ciBtb2RlICVzXG4iLAorCQkJCQl3SW5kZXgsICh0ZW1wMSAmIEhPU1RQQ19QSENEKSA/CisJCQkJCSJzdWNjZWVkZWQiIDogImZhaWxlZCIpOworCQkJfQogCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5zdXNwZW5kZWRfcG9ydHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKQEAgLTg5NCw2ICs5NjcsNyBAQAogCQkvKiAic3RhbGwiIG9uIGVycm9yICovCiAJCXJldHZhbCA9IC1FUElQRTsKIAl9CitlcnJvcl9leGl0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYwppbmRleCAxMGQ1MjkxLi5hZWRhOTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jCkBAIC03NSw3ICs3NSw4IEBACiAJfQogCWlmIChxaC0+ZHVtbXkpCiAJCWVoY2lfcXRkX2ZyZWUgKGVoY2ksIHFoLT5kdW1teSk7Ci0JZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cWhfcG9vbCwgcWgsIHFoLT5xaF9kbWEpOworCWRtYV9wb29sX2ZyZWUoZWhjaS0+cWhfcG9vbCwgcWgtPmh3LCBxaC0+cWhfZG1hKTsKKwlrZnJlZShxaCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZWhjaV9xaCAqZWhjaV9xaF9hbGxvYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBnZnBfdCBmbGFncykKQEAgLTgzLDEyICs4NCwxNCBAQAogCXN0cnVjdCBlaGNpX3FoCQkqcWg7CiAJZG1hX2FkZHJfdAkJZG1hOwogCi0JcWggPSAoc3RydWN0IGVoY2lfcWggKikKLQkJZG1hX3Bvb2xfYWxsb2MgKGVoY2ktPnFoX3Bvb2wsIGZsYWdzLCAmZG1hKTsKKwlxaCA9IGt6YWxsb2Moc2l6ZW9mICpxaCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFxaCkKLQkJcmV0dXJuIHFoOwotCi0JbWVtc2V0IChxaCwgMCwgc2l6ZW9mICpxaCk7CisJCWdvdG8gZG9uZTsKKwlxaC0+aHcgPSAoc3RydWN0IGVoY2lfcWhfaHcgKikKKwkJZG1hX3Bvb2xfYWxsb2MoZWhjaS0+cWhfcG9vbCwgZmxhZ3MsICZkbWEpOworCWlmICghcWgtPmh3KQorCQlnb3RvIGZhaWw7CisJbWVtc2V0KHFoLT5odywgMCwgc2l6ZW9mICpxaC0+aHcpOwogCXFoLT5yZWZjb3VudCA9IDE7CiAJcWgtPmVoY2kgPSBlaGNpOwogCXFoLT5xaF9kbWEgPSBkbWE7CkBAIC05OSwxMCArMTAyLDE1IEBACiAJcWgtPmR1bW15ID0gZWhjaV9xdGRfYWxsb2MgKGVoY2ksIGZsYWdzKTsKIAlpZiAocWgtPmR1bW15ID09IE5VTEwpIHsKIAkJZWhjaV9kYmcgKGVoY2ksICJubyBkdW1teSB0ZFxuIik7Ci0JCWRtYV9wb29sX2ZyZWUgKGVoY2ktPnFoX3Bvb2wsIHFoLCBxaC0+cWhfZG1hKTsKLQkJcWggPSBOVUxMOworCQlnb3RvIGZhaWwxOwogCX0KK2RvbmU6CiAJcmV0dXJuIHFoOworZmFpbDE6CisJZG1hX3Bvb2xfZnJlZShlaGNpLT5xaF9wb29sLCBxaC0+aHcsIHFoLT5xaF9kbWEpOworZmFpbDoKKwlrZnJlZShxaCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qIHRvIHNoYXJlIGEgcWggKGNwdSB0aHJlYWRzLCBvciBoYykgKi8KQEAgLTE4MCw3ICsxODgsNyBAQAogCS8qIFFIcyBmb3IgY29udHJvbC9idWxrL2ludHIgdHJhbnNmZXJzICovCiAJZWhjaS0+cWhfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfcWgiLAogCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKLQkJCXNpemVvZiAoc3RydWN0IGVoY2lfcWgpLAorCQkJc2l6ZW9mKHN0cnVjdCBlaGNpX3FoX2h3KSwKIAkJCTMyIC8qIGJ5dGUgYWxpZ25tZW50IChmb3IgaHcgcGFydHMpICovLAogCQkJNDA5NiAvKiBjYW4ndCBjcm9zcyA0SyAqLyk7CiAJaWYgKCFlaGNpLT5xaF9wb29sKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKaW5kZXggYzJmMWI3ZC4uMzc4ODYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwpAQCAtMjcsMjggKzI3LDggQEAKIC8qIGNhbGxlZCBhZnRlciBwb3dlcnVwLCBieSBwcm9iZSBvciBzeXN0ZW0tcG0gIndha2V1cCIgKi8KIHN0YXRpYyBpbnQgZWhjaV9wY2lfcmVpbml0KHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JdTMyCQkJdGVtcDsKIAlpbnQJCQlyZXR2YWw7CiAKLQkvKiBvcHRpb25hbCBkZWJ1ZyBwb3J0LCBub3JtYWxseSBpbiB0aGUgZmlyc3QgQkFSICovCi0JdGVtcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgMHgwYSk7Ci0JaWYgKHRlbXApIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHRlbXAsICZ0ZW1wKTsKLQkJdGVtcCA+Pj0gMTY7Ci0JCWlmICgodGVtcCAmICgzIDw8IDEzKSkgPT0gKDEgPDwgMTMpKSB7Ci0JCQl0ZW1wICY9IDB4MWZmZjsKLQkJCWVoY2ktPmRlYnVnID0gZWhjaV90b19oY2QoZWhjaSktPnJlZ3MgKyB0ZW1wOwotCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmRlYnVnLT5jb250cm9sKTsKLQkJCWVoY2lfaW5mbyhlaGNpLCAiZGVidWcgcG9ydCAlZCVzXG4iLAotCQkJCUhDU19ERUJVR19QT1JUKGVoY2ktPmhjc19wYXJhbXMpLAotCQkJCSh0ZW1wICYgREJHUF9FTkFCTEVEKQotCQkJCQk/ICIgSU4gVVNFIgotCQkJCQk6ICIiKTsKLQkJCWlmICghKHRlbXAgJiBEQkdQX0VOQUJMRUQpKQotCQkJCWVoY2ktPmRlYnVnID0gTlVMTDsKLQkJfQotCX0KLQogCS8qIHdlIGV4cGVjdCBzdGF0aWMgcXVpcmsgY29kZSB0byBoYW5kbGUgdGhlICJleHRlbmRlZCBjYXBhYmlsaXRpZXMiCiAJICogKGN1cnJlbnRseSBqdXN0IEJJT1MgaGFuZG9mZikgYWxsb3dlZCBzdGFydGluZyB3aXRoIEVIQ0kgMC45NgogCSAqLwpAQCAtMTI5LDYgKzEwOSw5IEBACiAJCXJldHVybiByZXR2YWw7CiAKIAlzd2l0Y2ggKHBkZXYtPnZlbmRvcikgeworCWNhc2UgUENJX1ZFTkRPUl9JRF9JTlRFTDoKKwkJZWhjaS0+bmVlZF9pb193YXRjaGRvZyA9IDA7CisJCWJyZWFrOwogCWNhc2UgUENJX1ZFTkRPUl9JRF9UREk6CiAJCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9URElfRUhDSSkgewogCQkJaGNkLT5oYXNfdHQgPSAxOwpAQCAtMTkyLDYgKzE3NSwyNSBAQAogCQlicmVhazsKIAl9CiAKKwkvKiBvcHRpb25hbCBkZWJ1ZyBwb3J0LCBub3JtYWxseSBpbiB0aGUgZmlyc3QgQkFSICovCisJdGVtcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgMHgwYSk7CisJaWYgKHRlbXApIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHRlbXAsICZ0ZW1wKTsKKwkJdGVtcCA+Pj0gMTY7CisJCWlmICgodGVtcCAmICgzIDw8IDEzKSkgPT0gKDEgPDwgMTMpKSB7CisJCQl0ZW1wICY9IDB4MWZmZjsKKwkJCWVoY2ktPmRlYnVnID0gZWhjaV90b19oY2QoZWhjaSktPnJlZ3MgKyB0ZW1wOworCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmRlYnVnLT5jb250cm9sKTsKKwkJCWVoY2lfaW5mbyhlaGNpLCAiZGVidWcgcG9ydCAlZCVzXG4iLAorCQkJCUhDU19ERUJVR19QT1JUKGVoY2ktPmhjc19wYXJhbXMpLAorCQkJCSh0ZW1wICYgREJHUF9FTkFCTEVEKQorCQkJCQk/ICIgSU4gVVNFIgorCQkJCQk6ICIiKTsKKwkJCWlmICghKHRlbXAgJiBEQkdQX0VOQUJMRUQpKQorCQkJCWVoY2ktPmRlYnVnID0gTlVMTDsKKwkJfQorCX0KKwogCWVoY2lfcmVzZXQoZWhjaSk7CiAKIAkvKiBhdCBsZWFzdCB0aGUgR2VuZXN5cyBHTDg4MFMgbmVlZHMgZml4dXAgaGVyZSAqLwpAQCAtMjQyLDcgKzI0NCw3IEBACiAJICogU3lzdGVtIHN1c3BlbmQgY3VycmVudGx5IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBzdXNwZW5kIHRoZSBlbnRpcmUKIAkgKiBkZXZpY2UgdHJlZSwgZGV2aWNlLWF0LWEtdGltZS4gIElmIHdlIGZhaWxlZCBzZWxlY3RpdmUgc3VzcGVuZAogCSAqIHJlcG9ydHMsIHN5c3RlbSBzdXNwZW5kIHdvdWxkIGZhaWw7IHNvIHRoZSByb290IGh1YiBjb2RlIG11c3QgY2xhaW0KLQkgKiBzdWNjZXNzLiAgVGhhdCdzIGx5aW5nIHRvIHVzYmNvcmUsIGFuZCBpdCBtYXR0ZXJzIGZvciBmb3IgcnVudGltZQorCSAqIHN1Y2Nlc3MuICBUaGF0J3MgbHlpbmcgdG8gdXNiY29yZSwgYW5kIGl0IG1hdHRlcnMgZm9yIHJ1bnRpbWUKIAkgKiBQTSBzY2VuYXJpb3Mgd2l0aCBzZWxlY3RpdmUgc3VzcGVuZCBhbmQgcmVtb3RlIHdha2V1cC4uLgogCSAqLwogCWlmIChlaGNpLT5ub19zZWxlY3RpdmVfc3VzcGVuZCAmJiBkZXZpY2VfY2FuX3dha2V1cCgmcGRldi0+ZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCmluZGV4IDc2NzM1NTQuLjAwYWQ5Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwpAQCAtODcsMzEgKzg3LDMzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHFoX3VwZGF0ZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgsIHN0cnVjdCBlaGNpX3F0ZCAqcXRkKQogeworCXN0cnVjdCBlaGNpX3FoX2h3ICpodyA9IHFoLT5odzsKKwogCS8qIHdyaXRlcyB0byBhbiBhY3RpdmUgb3ZlcmxheSBhcmUgdW5zYWZlICovCiAJQlVHX09OKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9JRExFKTsKIAotCXFoLT5od19xdGRfbmV4dCA9IFFURF9ORVhUKGVoY2ksIHF0ZC0+cXRkX2RtYSk7Ci0JcWgtPmh3X2FsdF9uZXh0ID0gRUhDSV9MSVNUX0VORChlaGNpKTsKKwlody0+aHdfcXRkX25leHQgPSBRVERfTkVYVChlaGNpLCBxdGQtPnF0ZF9kbWEpOworCWh3LT5od19hbHRfbmV4dCA9IEVIQ0lfTElTVF9FTkQoZWhjaSk7CiAKIAkvKiBFeGNlcHQgZm9yIGNvbnRyb2wgZW5kcG9pbnRzLCB3ZSBtYWtlIGhhcmR3YXJlIG1haW50YWluIGRhdGEKIAkgKiB0b2dnbGUgKGxpa2UgT0hDSSkgLi4uIGhlcmUgKHJlKWluaXRpYWxpemUgdGhlIHRvZ2dsZSBpbiB0aGUgUUgsCiAJICogYW5kIHNldCB0aGUgcHNldWRvLXRvZ2dsZSBpbiB1ZGV2LiBPbmx5IHVzYl9jbGVhcl9oYWx0KCkgd2lsbAogCSAqIGV2ZXIgY2xlYXIgaXQuCiAJICovCi0JaWYgKCEocWgtPmh3X2luZm8xICYgY3B1X3RvX2hjMzIoZWhjaSwgMSA8PCAxNCkpKSB7CisJaWYgKCEoaHctPmh3X2luZm8xICYgY3B1X3RvX2hjMzIoZWhjaSwgMSA8PCAxNCkpKSB7CiAJCXVuc2lnbmVkCWlzX291dCwgZXBudW07CiAKIAkJaXNfb3V0ID0gIShxdGQtPmh3X3Rva2VuICYgY3B1X3RvX2hjMzIoZWhjaSwgMSA8PCA4KSk7Ci0JCWVwbnVtID0gKGhjMzJfdG9fY3B1cChlaGNpLCAmcWgtPmh3X2luZm8xKSA+PiA4KSAmIDB4MGY7CisJCWVwbnVtID0gKGhjMzJfdG9fY3B1cChlaGNpLCAmaHctPmh3X2luZm8xKSA+PiA4KSAmIDB4MGY7CiAJCWlmICh1bmxpa2VseSAoIXVzYl9nZXR0b2dnbGUgKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQpKSkgewotCQkJcWgtPmh3X3Rva2VuICY9IH5jcHVfdG9faGMzMihlaGNpLCBRVERfVE9HR0xFKTsKKwkJCWh3LT5od190b2tlbiAmPSB+Y3B1X3RvX2hjMzIoZWhjaSwgUVREX1RPR0dMRSk7CiAJCQl1c2Jfc2V0dG9nZ2xlIChxaC0+ZGV2LCBlcG51bSwgaXNfb3V0LCAxKTsKIAkJfQogCX0KIAogCS8qIEhDIG11c3Qgc2VlIGxhdGVzdCBxdGQgYW5kIHFoIGRhdGEgYmVmb3JlIHdlIGNsZWFyIEFDVElWRStIQUxUICovCiAJd21iICgpOwotCXFoLT5od190b2tlbiAmPSBjcHVfdG9faGMzMihlaGNpLCBRVERfVE9HR0xFIHwgUVREX1NUU19QSU5HKTsKKwlody0+aHdfdG9rZW4gJj0gY3B1X3RvX2hjMzIoZWhjaSwgUVREX1RPR0dMRSB8IFFURF9TVFNfUElORyk7CiB9CiAKIC8qIGlmIGl0IHdlcmVuJ3QgZm9yIGEgY29tbW9uIHNpbGljb24gcXVpcmsgKHdyaXRpbmcgdGhlIGR1bW15IGludG8gdGhlIHFoCkBAIC0xMjksNyArMTMxLDcgQEAKIAkJcXRkID0gbGlzdF9lbnRyeSAocWgtPnF0ZF9saXN0Lm5leHQsCiAJCQkJc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CiAJCS8qIGZpcnN0IHF0ZCBtYXkgYWxyZWFkeSBiZSBwYXJ0aWFsbHkgcHJvY2Vzc2VkICovCi0JCWlmIChjcHVfdG9faGMzMihlaGNpLCBxdGQtPnF0ZF9kbWEpID09IHFoLT5od19jdXJyZW50KQorCQlpZiAoY3B1X3RvX2hjMzIoZWhjaSwgcXRkLT5xdGRfZG1hKSA9PSBxaC0+aHctPmh3X2N1cnJlbnQpCiAJCQlxdGQgPSBOVUxMOwogCX0KIApAQCAtMjYwLDcgKzI2Miw3IEBACiAJCXN0cnVjdCBlaGNpX3FoCSpxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKSB1cmItPmhjcHJpdjsKIAogCQkvKiBTLW1hc2sgaW4gYSBRSCBtZWFucyBpdCdzIGFuIGludGVycnVwdCB1cmIgKi8KLQkJaWYgKChxaC0+aHdfaW5mbzIgJiBjcHVfdG9faGMzMihlaGNpLCBRSF9TTUFTSykpICE9IDApIHsKKwkJaWYgKChxaC0+aHctPmh3X2luZm8yICYgY3B1X3RvX2hjMzIoZWhjaSwgUUhfU01BU0spKSAhPSAwKSB7CiAKIAkJCS8qIC4uLiB1cGRhdGUgaGMtd2lkZSBwZXJpb2RpYyBzdGF0cyAoZm9yIHVzYmZzKSAqLwogCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzLS07CkBAIC0yOTcsNyArMjk5LDYgQEAKIHN0YXRpYyB2b2lkIHN0YXJ0X3VubGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpOwogc3RhdGljIHZvaWQgdW5saW5rX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CiAKLXN0YXRpYyB2b2lkIGludHJfZGVzY2hlZHVsZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpOwogc3RhdGljIGludCBxaF9zY2hlZHVsZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpOwogCiAvKgpAQCAtMzA4LDEzICszMDksMTQgQEAKIHN0YXRpYyB1bnNpZ25lZAogcWhfY29tcGxldGlvbnMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQogewotCXN0cnVjdCBlaGNpX3F0ZAkJKmxhc3QgPSBOVUxMLCAqZW5kID0gcWgtPmR1bW15OworCXN0cnVjdCBlaGNpX3F0ZAkJKmxhc3QsICplbmQgPSBxaC0+ZHVtbXk7CiAJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0bXA7Ci0JaW50CQkJbGFzdF9zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJaW50CQkJbGFzdF9zdGF0dXM7CiAJaW50CQkJc3RvcHBlZDsKIAl1bnNpZ25lZAkJY291bnQgPSAwOwogCXU4CQkJc3RhdGU7Ci0JX19sZTMyCQkJaGFsdCA9IEhBTFRfQklUKGVoY2kpOworCWNvbnN0IF9fbGUzMgkJaGFsdCA9IEhBTFRfQklUKGVoY2kpOworCXN0cnVjdCBlaGNpX3FoX2h3CSpodyA9IHFoLT5odzsKIAogCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkpKQogCQlyZXR1cm4gY291bnQ7CkBAIC0zMjQsMTEgKzMyNiwyMCBAQAogCSAqIHRoZXkgYWRkIHVyYnMgdG8gdGhpcyBxaCdzIHF1ZXVlIG9yIG1hcmsgdGhlbSBmb3IgdW5saW5raW5nLgogCSAqCiAJICogTk9URTogIHVubGlua2luZyBleHBlY3RzIHRvIGJlIGRvbmUgaW4gcXVldWUgb3JkZXIuCisJICoKKwkgKiBJdCdzIGEgYnVnIGZvciBxaC0+cWhfc3RhdGUgdG8gYmUgYW55dGhpbmcgb3RoZXIgdGhhbgorCSAqIFFIX1NUQVRFX0lETEUsIHVubGVzcyBvdXIgY2FsbGVyIGlzIHNjYW5fYXN5bmMoKSBvcgorCSAqIHNjYW5fcGVyaW9kaWMoKS4KIAkgKi8KIAlzdGF0ZSA9IHFoLT5xaF9zdGF0ZTsKIAlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9DT01QTEVUSU5HOwogCXN0b3BwZWQgPSAoc3RhdGUgPT0gUUhfU1RBVEVfSURMRSk7CiAKKyByZXNjYW46CisJbGFzdCA9IE5VTEw7CisJbGFzdF9zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJcWgtPm5lZWRzX3Jlc2NhbiA9IDA7CisKIAkvKiByZW1vdmUgZGUtYWN0aXZhdGVkIFFURHMgZnJvbSBmcm9udCBvZiBxdWV1ZS4KIAkgKiBhZnRlciBmYXVsdHMgKGluY2x1ZGluZyBzaG9ydCByZWFkcyksIGNsZWFudXAgdGhpcyB1cmIKIAkgKiB0aGVuIGxldCB0aGUgcXVldWUgYWR2YW5jZS4KQEAgLTM5Miw3ICs0MDMsOCBAQAogCQkJCQlxdGQtPmh3X3Rva2VuID0gY3B1X3RvX2hjMzIoZWhjaSwKIAkJCQkJCQl0b2tlbik7CiAJCQkJCXdtYigpOwotCQkJCQlxaC0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLCB0b2tlbik7CisJCQkJCWh3LT5od190b2tlbiA9IGNwdV90b19oYzMyKGVoY2ksCisJCQkJCQkJdG9rZW4pOwogCQkJCQlnb3RvIHJldHJ5X3hhY3RlcnI7CiAJCQkJfQogCQkJCXN0b3BwZWQgPSAxOwpAQCAtNDM1LDggKzQ0Nyw4IEBACiAJCQkvKiBxaCB1bmxpbmtlZDsgdG9rZW4gaW4gb3ZlcmxheSBtYXkgYmUgbW9zdCBjdXJyZW50ICovCiAJCQlpZiAoc3RhdGUgPT0gUUhfU1RBVEVfSURMRQogCQkJCQkmJiBjcHVfdG9faGMzMihlaGNpLCBxdGQtPnF0ZF9kbWEpCi0JCQkJCQk9PSBxaC0+aHdfY3VycmVudCkgewotCQkJCXRva2VuID0gaGMzMl90b19jcHUoZWhjaSwgcWgtPmh3X3Rva2VuKTsKKwkJCQkJCT09IGh3LT5od19jdXJyZW50KSB7CisJCQkJdG9rZW4gPSBoYzMyX3RvX2NwdShlaGNpLCBody0+aHdfdG9rZW4pOwogCiAJCQkJLyogQW4gdW5saW5rIG1heSBsZWF2ZSBhbiBpbmNvbXBsZXRlCiAJCQkJICogYXN5bmMgdHJhbnNhY3Rpb24gaW4gdGhlIFRUIGJ1ZmZlci4KQEAgLTQ0OSw5ICs0NjEsOSBAQAogCQkJICogcGF0Y2ggdGhlIHFoIGxhdGVyIGFuZCBzbyB0aGF0IGNvbXBsZXRpb25zIGNhbid0CiAJCQkgKiBhY3RpdmF0ZSBpdCB3aGlsZSB3ZSAia25vdyIgaXQncyBzdG9wcGVkLgogCQkJICovCi0JCQlpZiAoKGhhbHQgJiBxaC0+aHdfdG9rZW4pID09IDApIHsKKwkJCWlmICgoaGFsdCAmIGh3LT5od190b2tlbikgPT0gMCkgewogaGFsdDoKLQkJCQlxaC0+aHdfdG9rZW4gfD0gaGFsdDsKKwkJCQlody0+aHdfdG9rZW4gfD0gaGFsdDsKIAkJCQl3bWIgKCk7CiAJCQl9CiAJCX0KQEAgLTUwMyw2ICs1MTUsMjEgQEAKIAkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgbGFzdCk7CiAJfQogCisJLyogRG8gd2UgbmVlZCB0byByZXNjYW4gZm9yIFVSQnMgZGVxdWV1ZWQgZHVyaW5nIGEgZ2l2ZWJhY2s/ICovCisJaWYgKHVubGlrZWx5KHFoLT5uZWVkc19yZXNjYW4pKSB7CisJCS8qIElmIHRoZSBRSCBpcyBhbHJlYWR5IHVubGlua2VkLCBkbyB0aGUgcmVzY2FuIG5vdy4gKi8KKwkJaWYgKHN0YXRlID09IFFIX1NUQVRFX0lETEUpCisJCQlnb3RvIHJlc2NhbjsKKworCQkvKiBPdGhlcndpc2Ugd2UgaGF2ZSB0byB3YWl0IHVudGlsIHRoZSBRSCBpcyBmdWxseSB1bmxpbmtlZC4KKwkJICogT3VyIGNhbGxlciB3aWxsIHN0YXJ0IGFuIHVubGluayBpZiBxaC0+bmVlZHNfcmVzY2FuIGlzCisJCSAqIHNldC4gIEJ1dCBpZiBhbiB1bmxpbmsgaGFzIGFscmVhZHkgc3RhcnRlZCwgbm90aGluZyBuZWVkcworCQkgKiB0byBiZSBkb25lLgorCQkgKi8KKwkJaWYgKHN0YXRlICE9IFFIX1NUQVRFX0xJTktFRCkKKwkJCXFoLT5uZWVkc19yZXNjYW4gPSAwOworCX0KKwogCS8qIHJlc3RvcmUgb3JpZ2luYWwgc3RhdGU7IGNhbGxlciBtdXN0IHVubGluayBvciByZWxpbmsgKi8KIAlxaC0+cWhfc3RhdGUgPSBzdGF0ZTsKIApAQCAtNTEwLDcgKzUzNyw3IEBACiAJICogaXQgYWZ0ZXIgZmF1bHQgY2xlYW51cCwgb3IgcmVjb3ZlcmluZyBmcm9tIHNpbGljb24gd3JvbmdseQogCSAqIG92ZXJsYXlpbmcgdGhlIGR1bW15IHF0ZCAod2hpY2ggcmVkdWNlcyBETUEgY2hhdHRlcikuCiAJICovCi0JaWYgKHN0b3BwZWQgIT0gMCB8fCBxaC0+aHdfcXRkX25leHQgPT0gRUhDSV9MSVNUX0VORChlaGNpKSkgeworCWlmIChzdG9wcGVkICE9IDAgfHwgaHctPmh3X3F0ZF9uZXh0ID09IEVIQ0lfTElTVF9FTkQoZWhjaSkpIHsKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIFFIX1NUQVRFX0lETEU6CiAJCQlxaF9yZWZyZXNoKGVoY2ksIHFoKTsKQEAgLTUyNywxMiArNTU0LDkgQEAKIAkJCSAqIFRoYXQgc2hvdWxkIGJlIHJhcmUgZm9yIGludGVycnVwdCB0cmFuc2ZlcnMsCiAJCQkgKiBleGNlcHQgbWF5YmUgaGlnaCBiYW5kd2lkdGggLi4uCiAJCQkgKi8KLQkJCWlmICgoY3B1X3RvX2hjMzIoZWhjaSwgUUhfU01BU0spCi0JCQkJCSYgcWgtPmh3X2luZm8yKSAhPSAwKSB7Ci0JCQkJaW50cl9kZXNjaGVkdWxlIChlaGNpLCBxaCk7Ci0JCQkJKHZvaWQpIHFoX3NjaGVkdWxlIChlaGNpLCBxaCk7Ci0JCQl9IGVsc2UKLQkJCQl1bmxpbmtfYXN5bmMgKGVoY2ksIHFoKTsKKworCQkJLyogVGVsbCB0aGUgY2FsbGVyIHRvIHN0YXJ0IGFuIHVubGluayAqLworCQkJcWgtPm5lZWRzX3Jlc2NhbiA9IDE7CiAJCQlicmVhazsKIAkJLyogb3RoZXJ3aXNlLCB1bmxpbmsgYWxyZWFkeSBzdGFydGVkICovCiAJCX0KQEAgLTY0OSw3ICs2NzMsNyBAQAogCQkgKiAodGhpcyB3aWxsIHVzdWFsbHkgYmUgb3ZlcnJpZGRlbiBsYXRlci4pCiAJCSAqLwogCQlpZiAoaXNfaW5wdXQpCi0JCQlxdGQtPmh3X2FsdF9uZXh0ID0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0OworCQkJcXRkLT5od19hbHRfbmV4dCA9IGVoY2ktPmFzeW5jLT5ody0+aHdfYWx0X25leHQ7CiAKIAkJLyogcWggbWFrZXMgY29udHJvbCBwYWNrZXRzIHVzZSBxdGQgdG9nZ2xlOyBtYXliZSBzd2l0Y2ggaXQgKi8KIAkJaWYgKChtYXhwYWNrZXQgJiAodGhpc19xdGRfbGVuICsgKG1heHBhY2tldCAtIDEpKSkgPT0gMCkKQEAgLTc0NCw2ICs3NjgsNyBAQAogCWludAkJCWlzX2lucHV0LCB0eXBlOwogCWludAkJCW1heHAgPSAwOwogCXN0cnVjdCB1c2JfdHQJCSp0dCA9IHVyYi0+ZGV2LT50dDsKKwlzdHJ1Y3QgZWhjaV9xaF9odwkqaHc7CiAKIAlpZiAoIXFoKQogCQlyZXR1cm4gcWg7CkBAIC04OTAsOCArOTE1LDkgQEAKIAogCS8qIGluaXQgYXMgbGl2ZSwgdG9nZ2xlIGNsZWFyLCBhZHZhbmNlIHRvIGR1bW15ICovCiAJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfSURMRTsKLQlxaC0+aHdfaW5mbzEgPSBjcHVfdG9faGMzMihlaGNpLCBpbmZvMSk7Ci0JcWgtPmh3X2luZm8yID0gY3B1X3RvX2hjMzIoZWhjaSwgaW5mbzIpOworCWh3ID0gcWgtPmh3OworCWh3LT5od19pbmZvMSA9IGNwdV90b19oYzMyKGVoY2ksIGluZm8xKTsKKwlody0+aHdfaW5mbzIgPSBjcHVfdG9faGMzMihlaGNpLCBpbmZvMik7CiAJdXNiX3NldHRvZ2dsZSAodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksICFpc19pbnB1dCwgMSk7CiAJcWhfcmVmcmVzaCAoZWhjaSwgcWgpOwogCXJldHVybiBxaDsKQEAgLTkxMCw2ICs5MzYsOCBAQAogCWlmICh1bmxpa2VseShxaC0+Y2xlYXJpbmdfdHQpKQogCQlyZXR1cm47CiAKKwlXQVJOX09OKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9JRExFKTsKKwogCS8qIChyZSlzdGFydCB0aGUgYXN5bmMgc2NoZWR1bGU/ICovCiAJaGVhZCA9IGVoY2ktPmFzeW5jOwogCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9BU1lOQ19PRkYpOwpAQCAtOTI4LDE2ICs5NTYsMTUgQEAKIAl9CiAKIAkvKiBjbGVhciBoYWx0IGFuZC9vciB0b2dnbGU7IGFuZCBtYXliZSByZWNvdmVyIGZyb20gc2lsaWNvbiBxdWlyayAqLwotCWlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfSURMRSkKLQkJcWhfcmVmcmVzaCAoZWhjaSwgcWgpOworCXFoX3JlZnJlc2goZWhjaSwgcWgpOwogCiAJLyogc3BsaWNlIHJpZ2h0IGFmdGVyIHN0YXJ0ICovCiAJcWgtPnFoX25leHQgPSBoZWFkLT5xaF9uZXh0OwotCXFoLT5od19uZXh0ID0gaGVhZC0+aHdfbmV4dDsKKwlxaC0+aHctPmh3X25leHQgPSBoZWFkLT5ody0+aHdfbmV4dDsKIAl3bWIgKCk7CiAKIAloZWFkLT5xaF9uZXh0LnFoID0gcWg7Ci0JaGVhZC0+aHdfbmV4dCA9IGRtYTsKKwloZWFkLT5ody0+aHdfbmV4dCA9IGRtYTsKIAogCXFoX2dldChxaCk7CiAJcWgtPnhhY3RlcnJzID0gMDsKQEAgLTk4NCw3ICsxMDExLDcgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNiX3Jlc2V0X2RldmljZSgpIGJyaWVmbHkgcmV2ZXJ0cyB0byBhZGRyZXNzIDAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2JfcGlwZWRldmljZSAodXJiLT5waXBlKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxaC0+aHdfaW5mbzEgJj0gfnFoX2FkZHJfbWFzazsKKwkJCQlxaC0+aHctPmh3X2luZm8xICY9IH5xaF9hZGRyX21hc2s7CiAJCX0KIAogCQkvKiBqdXN0IG9uZSB3YXkgdG8gcXVldWUgcmVxdWVzdHM6IHN3YXAgd2l0aCB0aGUgZHVtbXkgcXRkLgpAQCAtMTE2OSw3ICsxMTk2LDcgQEAKIAl3aGlsZSAocHJldi0+cWhfbmV4dC5xaCAhPSBxaCkKIAkJcHJldiA9IHByZXYtPnFoX25leHQucWg7CiAKLQlwcmV2LT5od19uZXh0ID0gcWgtPmh3X25leHQ7CisJcHJldi0+aHctPmh3X25leHQgPSBxaC0+aHctPmh3X25leHQ7CiAJcHJldi0+cWhfbmV4dCA9IHFoLT5xaF9uZXh0OwogCXdtYiAoKTsKIApAQCAtMTIxNCw2ICsxMjQxLDggQEAKIAkJCQlxaCA9IHFoX2dldCAocWgpOwogCQkJCXFoLT5zdGFtcCA9IGVoY2ktPnN0YW1wOwogCQkJCXRlbXAgPSBxaF9jb21wbGV0aW9ucyAoZWhjaSwgcWgpOworCQkJCWlmIChxaC0+bmVlZHNfcmVzY2FuKQorCQkJCQl1bmxpbmtfYXN5bmMoZWhjaSwgcWgpOwogCQkJCXFoX3B1dCAocWgpOwogCQkJCWlmICh0ZW1wICE9IDApIHsKIAkJCQkJZ290byByZXNjYW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IGVkZDYxZWUuLjNlYTA1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC02MCw2ICs2MCwyMCBAQAogCX0KIH0KIAorc3RhdGljIF9faGMzMiAqCitzaGFkb3dfbmV4dF9wZXJpb2RpYyhzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuaW9uIGVoY2lfc2hhZG93ICpwZXJpb2RpYywKKwkJX19oYzMyIHRhZykKK3sKKwlzd2l0Y2ggKGhjMzJfdG9fY3B1KGVoY2ksIHRhZykpIHsKKwkvKiBvdXIgZWhjaV9zaGFkb3cucWggaXMgYWN0dWFsbHkgc29mdHdhcmUgcGFydCAqLworCWNhc2UgUV9UWVBFX1FIOgorCQlyZXR1cm4gJnBlcmlvZGljLT5xaC0+aHctPmh3X25leHQ7CisJLyogb3RoZXJzIGFyZSBodyBwYXJ0cyAqLworCWRlZmF1bHQ6CisJCXJldHVybiBwZXJpb2RpYy0+aHdfbmV4dDsKKwl9Cit9CisKIC8qIGNhbGxlciBtdXN0IGhvbGQgZWhjaS0+bG9jayAqLwogc3RhdGljIHZvaWQgcGVyaW9kaWNfdW5saW5rIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuc2lnbmVkIGZyYW1lLCB2b2lkICpwdHIpCiB7CkBAIC03MSw3ICs4NSw4IEBACiAJd2hpbGUgKGhlcmUucHRyICYmIGhlcmUucHRyICE9IHB0cikgewogCQlwcmV2X3AgPSBwZXJpb2RpY19uZXh0X3NoYWRvdyhlaGNpLCBwcmV2X3AsCiAJCQkJUV9ORVhUX1RZUEUoZWhjaSwgKmh3X3ApKTsKLQkJaHdfcCA9IGhlcmUuaHdfbmV4dDsKKwkJaHdfcCA9IHNoYWRvd19uZXh0X3BlcmlvZGljKGVoY2ksICZoZXJlLAorCQkJCVFfTkVYVF9UWVBFKGVoY2ksICpod19wKSk7CiAJCWhlcmUgPSAqcHJldl9wOwogCX0KIAkvKiBhbiBpbnRlcnJ1cHQgZW50cnkgKGF0IGxpc3QgZW5kKSBjb3VsZCBoYXZlIGJlZW4gc2hhcmVkICovCkBAIC04Myw3ICs5OCw3IEBACiAJICovCiAJKnByZXZfcCA9ICpwZXJpb2RpY19uZXh0X3NoYWRvdyhlaGNpLCAmaGVyZSwKIAkJCVFfTkVYVF9UWVBFKGVoY2ksICpod19wKSk7Ci0JKmh3X3AgPSAqaGVyZS5od19uZXh0OworCSpod19wID0gKnNoYWRvd19uZXh0X3BlcmlvZGljKGVoY2ksICZoZXJlLCBRX05FWFRfVFlQRShlaGNpLCAqaHdfcCkpOwogfQogCiAvKiBob3cgbWFueSBvZiB0aGUgdWZyYW1lJ3MgMTI1IHVzZWNzIGFyZSBhbGxvY2F0ZWQ/ICovCkBAIC05MywxOCArMTA4LDIwIEBACiAJX19oYzMyCQkJKmh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKIAl1bmlvbiBlaGNpX3NoYWRvdwkqcSA9ICZlaGNpLT5wc2hhZG93IFtmcmFtZV07CiAJdW5zaWduZWQJCXVzZWNzID0gMDsKKwlzdHJ1Y3QgZWhjaV9xaF9odwkqaHc7CiAKIAl3aGlsZSAocS0+cHRyKSB7CiAJCXN3aXRjaCAoaGMzMl90b19jcHUoZWhjaSwgUV9ORVhUX1RZUEUoZWhjaSwgKmh3X3ApKSkgewogCQljYXNlIFFfVFlQRV9RSDoKKwkJCWh3ID0gcS0+cWgtPmh3OwogCQkJLyogaXMgaXQgaW4gdGhlIFMtbWFzaz8gKi8KLQkJCWlmIChxLT5xaC0+aHdfaW5mbzIgJiBjcHVfdG9faGMzMihlaGNpLCAxIDw8IHVmcmFtZSkpCisJCQlpZiAoaHctPmh3X2luZm8yICYgY3B1X3RvX2hjMzIoZWhjaSwgMSA8PCB1ZnJhbWUpKQogCQkJCXVzZWNzICs9IHEtPnFoLT51c2VjczsKIAkJCS8qIC4uLiBvciBDLW1hc2s/ICovCi0JCQlpZiAocS0+cWgtPmh3X2luZm8yICYgY3B1X3RvX2hjMzIoZWhjaSwKKwkJCWlmIChody0+aHdfaW5mbzIgJiBjcHVfdG9faGMzMihlaGNpLAogCQkJCQkxIDw8ICg4ICsgdWZyYW1lKSkpCiAJCQkJdXNlY3MgKz0gcS0+cWgtPmNfdXNlY3M7Ci0JCQlod19wID0gJnEtPnFoLT5od19uZXh0OworCQkJaHdfcCA9ICZody0+aHdfbmV4dDsKIAkJCXEgPSAmcS0+cWgtPnFoX25leHQ7CiAJCQlicmVhazsKIAkJLy8gY2FzZSBRX1RZUEVfRlNUTjoKQEAgLTIzNywxMCArMjU0LDEwIEBACiAJCQljb250aW51ZTsKIAkJY2FzZSBRX1RZUEVfUUg6CiAJCQlpZiAoc2FtZV90dChkZXYsIHEtPnFoLT5kZXYpKSB7Ci0JCQkJdWYgPSB0dF9zdGFydF91ZnJhbWUoZWhjaSwgcS0+cWgtPmh3X2luZm8yKTsKKwkJCQl1ZiA9IHR0X3N0YXJ0X3VmcmFtZShlaGNpLCBxLT5xaC0+aHctPmh3X2luZm8yKTsKIAkJCQl0dF91c2Vjc1t1Zl0gKz0gcS0+cWgtPnR0X3VzZWNzOwogCQkJfQotCQkJaHdfcCA9ICZxLT5xaC0+aHdfbmV4dDsKKwkJCWh3X3AgPSAmcS0+cWgtPmh3LT5od19uZXh0OwogCQkJcSA9ICZxLT5xaC0+cWhfbmV4dDsKIAkJCWNvbnRpbnVlOwogCQljYXNlIFFfVFlQRV9TSVREOgpAQCAtMzc1LDYgKzM5Miw3IEBACiAJZm9yICg7IGZyYW1lIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZTsgZnJhbWUgKz0gcGVyaW9kKSB7CiAJCXVuaW9uIGVoY2lfc2hhZG93CWhlcmU7CiAJCV9faGMzMgkJCXR5cGU7CisJCXN0cnVjdCBlaGNpX3FoX2h3CSpodzsKIAogCQloZXJlID0gZWhjaS0+cHNoYWRvdyBbZnJhbWVdOwogCQl0eXBlID0gUV9ORVhUX1RZUEUoZWhjaSwgZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXSk7CkBAIC0zODUsMTcgKzQwMywxOCBAQAogCQkJCWhlcmUgPSBoZXJlLml0ZC0+aXRkX25leHQ7CiAJCQkJY29udGludWU7CiAJCQljYXNlIFFfVFlQRV9RSDoKKwkJCQlodyA9IGhlcmUucWgtPmh3OwogCQkJCWlmIChzYW1lX3R0IChkZXYsIGhlcmUucWgtPmRldikpIHsKIAkJCQkJdTMyCQltYXNrOwogCiAJCQkJCW1hc2sgPSBoYzMyX3RvX2NwdShlaGNpLAotCQkJCQkJCWhlcmUucWgtPmh3X2luZm8yKTsKKwkJCQkJCQlody0+aHdfaW5mbzIpOwogCQkJCQkvKiAia25vd3MiIG5vIGdhcCBpcyBuZWVkZWQgKi8KIAkJCQkJbWFzayB8PSBtYXNrID4+IDg7CiAJCQkJCWlmIChtYXNrICYgdWZfbWFzaykKIAkJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQl0eXBlID0gUV9ORVhUX1RZUEUoZWhjaSwgaGVyZS5xaC0+aHdfbmV4dCk7CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFKGVoY2ksIGh3LT5od19uZXh0KTsKIAkJCQloZXJlID0gaGVyZS5xaC0+cWhfbmV4dDsKIAkJCQljb250aW51ZTsKIAkJCWNhc2UgUV9UWVBFX1NJVEQ6CkBAIC00OTgsNyArNTE3LDggQEAKIAogCWRldl9kYmcgKCZxaC0+ZGV2LT5kZXYsCiAJCSJsaW5rIHFoJWQtJTA0eC8lcCBzdGFydCAlZCBbJWQvJWQgdXNdXG4iLAotCQlwZXJpb2QsIGhjMzJfdG9fY3B1cChlaGNpLCAmcWgtPmh3X2luZm8yKSAmIChRSF9DTUFTSyB8IFFIX1NNQVNLKSwKKwkJcGVyaW9kLCBoYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5ody0+aHdfaW5mbzIpCisJCQkmIChRSF9DTUFTSyB8IFFIX1NNQVNLKSwKIAkJcWgsIHFoLT5zdGFydCwgcWgtPnVzZWNzLCBxaC0+Y191c2Vjcyk7CiAKIAkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KQEAgLTUxNyw3ICs1MzcsNyBAQAogCQkJaWYgKHR5cGUgPT0gY3B1X3RvX2hjMzIoZWhjaSwgUV9UWVBFX1FIKSkKIAkJCQlicmVhazsKIAkJCXByZXYgPSBwZXJpb2RpY19uZXh0X3NoYWRvdyhlaGNpLCBwcmV2LCB0eXBlKTsKLQkJCWh3X3AgPSAmaGVyZS5xaC0+aHdfbmV4dDsKKwkJCWh3X3AgPSBzaGFkb3dfbmV4dF9wZXJpb2RpYyhlaGNpLCAmaGVyZSwgdHlwZSk7CiAJCQloZXJlID0gKnByZXY7CiAJCX0KIApAQCAtNTI4LDE0ICs1NDgsMTQgQEAKIAkJCWlmIChxaC0+cGVyaW9kID4gaGVyZS5xaC0+cGVyaW9kKQogCQkJCWJyZWFrOwogCQkJcHJldiA9ICZoZXJlLnFoLT5xaF9uZXh0OwotCQkJaHdfcCA9ICZoZXJlLnFoLT5od19uZXh0OworCQkJaHdfcCA9ICZoZXJlLnFoLT5ody0+aHdfbmV4dDsKIAkJCWhlcmUgPSAqcHJldjsKIAkJfQogCQkvKiBsaW5rIGluIHRoaXMgcWgsIHVubGVzcyBzb21lIGVhcmxpZXIgcGFzcyBkaWQgdGhhdCAqLwogCQlpZiAocWggIT0gaGVyZS5xaCkgewogCQkJcWgtPnFoX25leHQgPSBoZXJlOwogCQkJaWYgKGhlcmUucWgpCi0JCQkJcWgtPmh3X25leHQgPSAqaHdfcDsKKwkJCQlxaC0+aHctPmh3X25leHQgPSAqaHdfcDsKIAkJCXdtYiAoKTsKIAkJCXByZXYtPnFoID0gcWg7CiAJCQkqaHdfcCA9IFFIX05FWFQgKGVoY2ksIHFoLT5xaF9kbWEpOwpAQCAtNTgxLDcgKzYwMSw3IEBACiAJZGV2X2RiZyAoJnFoLT5kZXYtPmRldiwKIAkJInVubGluayBxaCVkLSUwNHgvJXAgc3RhcnQgJWQgWyVkLyVkIHVzXVxuIiwKIAkJcWgtPnBlcmlvZCwKLQkJaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfaW5mbzIpICYgKFFIX0NNQVNLIHwgUUhfU01BU0spLAorCQloYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5ody0+aHdfaW5mbzIpICYgKFFIX0NNQVNLIHwgUUhfU01BU0spLAogCQlxaCwgcWgtPnN0YXJ0LCBxaC0+dXNlY3MsIHFoLT5jX3VzZWNzKTsKIAogCS8qIHFoLT5xaF9uZXh0IHN0aWxsICJsaXZlIiB0byBIQyAqLwpAQCAtNTk1LDcgKzYxNSwxOSBAQAogCiBzdGF0aWMgdm9pZCBpbnRyX2Rlc2NoZWR1bGUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQogewotCXVuc2lnbmVkCXdhaXQ7CisJdW5zaWduZWQJCXdhaXQ7CisJc3RydWN0IGVoY2lfcWhfaHcJKmh3ID0gcWgtPmh3OworCWludAkJCXJjOworCisJLyogSWYgdGhlIFFIIGlzbid0IGxpbmtlZCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8KKwkgKiB1bmxlc3Mgd2Ugd2VyZSBjYWxsZWQgZHVyaW5nIGEgZ2l2ZWJhY2ssIGluIHdoaWNoIGNhc2UKKwkgKiBxaF9jb21wbGV0aW9ucygpIGhhcyB0byBkZWFsIHdpdGggaXQuCisJICovCisJaWYgKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9MSU5LRUQpIHsKKwkJaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9DT01QTEVUSU5HKQorCQkJcWgtPm5lZWRzX3Jlc2NhbiA9IDE7CisJCXJldHVybjsKKwl9CiAKIAlxaF91bmxpbmtfcGVyaW9kaWMgKGVoY2ksIHFoKTsKIApAQCAtNjA2LDE1ICs2MzgsMzMgQEAKIAkgKi8KIAlpZiAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkKIAkJCXx8IChjcHVfdG9faGMzMihlaGNpLCBRSF9DTUFTSykKLQkJCQkJJiBxaC0+aHdfaW5mbzIpICE9IDApCisJCQkJCSYgaHctPmh3X2luZm8yKSAhPSAwKQogCQl3YWl0ID0gMjsKIAllbHNlCiAJCXdhaXQgPSA1NTsJLyogd29yc3QgY2FzZTogMyAqIDEwMjQgKi8KIAogCXVkZWxheSAod2FpdCk7CiAJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfSURMRTsKLQlxaC0+aHdfbmV4dCA9IEVIQ0lfTElTVF9FTkQoZWhjaSk7CisJaHctPmh3X25leHQgPSBFSENJX0xJU1RfRU5EKGVoY2kpOwogCXdtYiAoKTsKKworCXFoX2NvbXBsZXRpb25zKGVoY2ksIHFoKTsKKworCS8qIHJlc2NoZWR1bGUgUUggaWZmIGFub3RoZXIgcmVxdWVzdCBpcyBxdWV1ZWQgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5xdGRfbGlzdCkgJiYKKwkJCUhDX0lTX1JVTk5JTkcoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkgeworCQlyYyA9IHFoX3NjaGVkdWxlKGVoY2ksIHFoKTsKKworCQkvKiBBbiBlcnJvciBoZXJlIGxpa2VseSBpbmRpY2F0ZXMgaGFuZHNoYWtlIGZhaWx1cmUKKwkJICogb3Igbm8gc3BhY2UgbGVmdCBpbiB0aGUgc2NoZWR1bGUuICBOZWl0aGVyIGZhdWx0CisJCSAqIHNob3VsZCBoYXBwZW4gb2Z0ZW4gLi4uCisJCSAqCisJCSAqIEZJWE1FIGtpbGwgdGhlIG5vdy1keXNmdW5jdGlvbmFsIHF1ZXVlZCB1cmJzCisJCSAqLworCQlpZiAocmMgIT0gMCkKKwkJCWVoY2lfZXJyKGVoY2ksICJjYW4ndCByZXNjaGVkdWxlIHFoICVwLCBlcnIgJWRcbiIsCisJCQkJCXFoLCByYyk7CisJfQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzM5LDE0ICs3ODksMTUgQEAKIAl1bnNpZ25lZAl1ZnJhbWU7CiAJX19oYzMyCQljX21hc2s7CiAJdW5zaWduZWQJZnJhbWU7CQkvKiAwLi4ocWgtPnBlcmlvZCAtIDEpLCBvciBOT19GUkFNRSAqLworCXN0cnVjdCBlaGNpX3FoX2h3CSpodyA9IHFoLT5odzsKIAogCXFoX3JlZnJlc2goZWhjaSwgcWgpOwotCXFoLT5od19uZXh0ID0gRUhDSV9MSVNUX0VORChlaGNpKTsKKwlody0+aHdfbmV4dCA9IEVIQ0lfTElTVF9FTkQoZWhjaSk7CiAJZnJhbWUgPSBxaC0+c3RhcnQ7CiAKIAkvKiByZXVzZSB0aGUgcHJldmlvdXMgc2NoZWR1bGUgc2xvdHMsIGlmIHdlIGNhbiAqLwogCWlmIChmcmFtZSA8IHFoLT5wZXJpb2QpIHsKLQkJdWZyYW1lID0gZmZzKGhjMzJfdG9fY3B1cChlaGNpLCAmcWgtPmh3X2luZm8yKSAmIFFIX1NNQVNLKTsKKwkJdWZyYW1lID0gZmZzKGhjMzJfdG9fY3B1cChlaGNpLCAmaHctPmh3X2luZm8yKSAmIFFIX1NNQVNLKTsKIAkJc3RhdHVzID0gY2hlY2tfaW50cl9zY2hlZHVsZSAoZWhjaSwgZnJhbWUsIC0tdWZyYW1lLAogCQkJCXFoLCAmY19tYXNrKTsKIAl9IGVsc2UgewpAQCAtNzg0LDExICs4MzUsMTEgQEAKIAkJcWgtPnN0YXJ0ID0gZnJhbWU7CiAKIAkJLyogcmVzZXQgUy1mcmFtZSBhbmQgKG1heWJlKSBDLWZyYW1lIG1hc2tzICovCi0JCXFoLT5od19pbmZvMiAmPSBjcHVfdG9faGMzMihlaGNpLCB+KFFIX0NNQVNLIHwgUUhfU01BU0spKTsKLQkJcWgtPmh3X2luZm8yIHw9IHFoLT5wZXJpb2QKKwkJaHctPmh3X2luZm8yICY9IGNwdV90b19oYzMyKGVoY2ksIH4oUUhfQ01BU0sgfCBRSF9TTUFTSykpOworCQlody0+aHdfaW5mbzIgfD0gcWgtPnBlcmlvZAogCQkJPyBjcHVfdG9faGMzMihlaGNpLCAxIDw8IHVmcmFtZSkKIAkJCTogY3B1X3RvX2hjMzIoZWhjaSwgUUhfU01BU0spOwotCQlxaC0+aHdfaW5mbzIgfD0gY19tYXNrOworCQlody0+aHdfaW5mbzIgfD0gY19tYXNrOwogCX0gZWxzZQogCQllaGNpX2RiZyAoZWhjaSwgInJldXNlZCBxaCAlcCBzY2hlZHVsZVxuIiwgcWgpOwogCkBAIC0yMTg4LDEwICsyMjM5LDExIEBACiAJCQljYXNlIFFfVFlQRV9RSDoKIAkJCQkvKiBoYW5kbGUgYW55IGNvbXBsZXRpb25zICovCiAJCQkJdGVtcC5xaCA9IHFoX2dldCAocS5xaCk7Ci0JCQkJdHlwZSA9IFFfTkVYVF9UWVBFKGVoY2ksIHEucWgtPmh3X25leHQpOworCQkJCXR5cGUgPSBRX05FWFRfVFlQRShlaGNpLCBxLnFoLT5ody0+aHdfbmV4dCk7CiAJCQkJcSA9IHEucWgtPnFoX25leHQ7CiAJCQkJbW9kaWZpZWQgPSBxaF9jb21wbGV0aW9ucyAoZWhjaSwgdGVtcC5xaCk7Ci0JCQkJaWYgKHVubGlrZWx5IChsaXN0X2VtcHR5ICgmdGVtcC5xaC0+cXRkX2xpc3QpKSkKKwkJCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmdGVtcC5xaC0+cXRkX2xpc3QpIHx8CisJCQkJCQl0ZW1wLnFoLT5uZWVkc19yZXNjYW4pKQogCQkJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHRlbXAucWgpOwogCQkJCXFoX3B1dCAodGVtcC5xaCk7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdzkweDkwMC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXc5MHg5MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmEyMWVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXc5MHg5MDAuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIGxpbnV4L2RyaXZlci91c2IvaG9zdC9laGNpLXc5MHg5MDAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworLyplYmFibGUgcGh5MCBhbmQgcGh5MSBmb3IgdzkwcDkxMCovCisjZGVmaW5lCUVOUEhZCQkoMHgwMTw8OCkKKyNkZWZpbmUgUEhZMF9DVFIJKDB4QTQpCisjZGVmaW5lIFBIWTFfQ1RSCSgweEE4KQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1c2JfdzkweDkwMF9wcm9iZShjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCSAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldHZhbCA9IDAsIGlycTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXR2YWwgPSAtRU5YSU87CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsICJ3OTB4OTAwIEVIQ0kiKTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIyOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoaGNkLT5yZWdzID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBlcnIzOworCX0KKworCWVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7CisJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArCisJCSBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCisJLyogZW5hYmxlIFBIWSAwLDEsdGhlIHJlZ3Mgb25seSBhcHBseSB0byB3OTBwOTEwCisJKiAgMHhBNCwweEE4IHdlcmUgb2Zmc2V0cyBvZiBQSFkwIGFuZCBQSFkxIGNvbnRyb2xsZXIgb2YKKwkqICB3OTBwOTEwIElDIHJlbGF0aXZlIHRvIGVoY2ktPnJlZ3MuCisJKi8KKwl2YWwgPSBfX3Jhd19yZWFkbChlaGNpLT5yZWdzK1BIWTBfQ1RSKTsKKwl2YWwgfD0gRU5QSFk7CisJX19yYXdfd3JpdGVsKHZhbCwgZWhjaS0+cmVncytQSFkwX0NUUik7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChlaGNpLT5yZWdzK1BIWTFfQ1RSKTsKKwl2YWwgfD0gRU5QSFk7CisJX19yYXdfd3JpdGVsKHZhbCwgZWhjaS0+cmVncytQSFkxX0NUUik7CisKKwllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisJZWhjaS0+c2JybiA9IDB4MjA7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlnb3RvIGVycjQ7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9TSEFSRUQpOworCWlmIChyZXR2YWwgIT0gMCkKKwkJZ290byBlcnI0OworCisJZWhjaV93cml0ZWwoZWhjaSwgMSwgJmVoY2ktPnJlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7CisKKwlyZXR1cm4gcmV0dmFsOworZXJyNDoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitlcnIzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworZXJyMjoKKwl1c2JfcHV0X2hjZChoY2QpOworZXJyMToKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMKK3ZvaWQgdXNiX3c5MHg5MDBfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZWhjaV93OTB4OTAwX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0gIk51dm90b24gdzkweDkwMCBFSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9IGVoY2lfaXJxLAorCS5mbGFncyA9IEhDRF9VU0IyfEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnJlc2V0ID0gZWhjaV9pbml0LAorCS5zdGFydCA9IGVoY2lfcnVuLAorCisJLnN0b3AgPSBlaGNpX3N0b3AsCisJLnNodXRkb3duID0gZWhjaV9zaHV0ZG93biwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPSBlaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9IGVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0gZWhjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0gZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0gZWhjaV9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfUE0KKwkuYnVzX3N1c3BlbmQgPSBlaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0gZWhjaV9idXNfcmVzdW1lLAorI2VuZGlmCisJLnJlbGlucXVpc2hfcG9ydAk9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAorCS5wb3J0X2hhbmRlZF9vdmVyCT0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZWhjaV93OTB4OTAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiB1c2JfdzkweDkwMF9wcm9iZSgmZWhjaV93OTB4OTAwX2hjX2RyaXZlciwgcGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGVoY2lfdzkweDkwMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl1c2JfdzkweDkwMF9yZW1vdmUoaGNkLCBwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX2hjZF93OTB4OTAwX2RyaXZlciA9IHsKKwkucHJvYmUgID0gZWhjaV93OTB4OTAwX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChlaGNpX3c5MHg5MDBfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3OTB4OTAwLWVoY2kiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworTU9EVUxFX0FVVEhPUigiV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ3OTBwOTEwIHVzYiBlaGNpIGRyaXZlciEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06dzkwcDkxMC1laGNpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IDJiZmZmMzAuLjA2NGU3NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIF9faGMxNglfX2xlMTYKICNlbmRpZgogCi0vKiBzdGF0aXN0aWNzIGNhbiBiZSBrZXB0IGZvciBmb3IgdHVuaW5nL21vbml0b3JpbmcgKi8KKy8qIHN0YXRpc3RpY3MgY2FuIGJlIGtlcHQgZm9yIHR1bmluZy9tb25pdG9yaW5nICovCiBzdHJ1Y3QgZWhjaV9zdGF0cyB7CiAJLyogaXJxIHVzYWdlICovCiAJdW5zaWduZWQgbG9uZwkJbm9ybWFsOwpAQCAtMTI2LDYgKzEyNiw3IEBACiAJdW5zaWduZWQJCWJpZ19lbmRpYW5fbW1pbzoxOwogCXVuc2lnbmVkCQliaWdfZW5kaWFuX2Rlc2M6MTsKIAl1bnNpZ25lZAkJaGFzX2FtY2NfdXNiMjM6MTsKKwl1bnNpZ25lZAkJbmVlZF9pb193YXRjaGRvZzoxOwogCiAJLyogcmVxdWlyZWQgZm9yIHVzYjMyIHF1aXJrICovCiAJI2RlZmluZSBPSENJX0NUUkxfSENGUyAgICAgICAgICAoMyA8PCA2KQpAQCAtMTM1LDYgKzEzNiw3IEBACiAJI2RlZmluZSBPSENJX0hDQ1RSTF9PRkZTRVQgICAgICAweDQKIAkjZGVmaW5lIE9IQ0lfSENDVFJMX0xFTiAgICAgICAgIDB4NAogCV9faGMzMgkJCSpvaGNpX2hjY3RybF9yZWc7CisJdW5zaWduZWQJCWhhc19ob3N0cGM6MTsKIAogCXU4CQkJc2JybjsJCS8qIHBhY2tlZCByZWxlYXNlIG51bWJlciAqLwogCkBAIC0yOTgsOCArMzAwLDggQEAKICAqIFRoZXNlIGFwcGVhciBpbiBib3RoIHRoZSBhc3luYyBhbmQgKGZvciBpbnRlcnJ1cHQpIHBlcmlvZGljIHNjaGVkdWxlcy4KICAqLwogCi1zdHJ1Y3QgZWhjaV9xaCB7Ci0JLyogZmlyc3QgcGFydCBkZWZpbmVkIGJ5IEVIQ0kgc3BlYyAqLworLyogZmlyc3QgcGFydCBkZWZpbmVkIGJ5IEVIQ0kgc3BlYyAqLworc3RydWN0IGVoY2lfcWhfaHcgewogCV9faGMzMgkJCWh3X25leHQ7CS8qIHNlZSBFSENJIDMuNi4xICovCiAJX19oYzMyCQkJaHdfaW5mbzE7ICAgICAgIC8qIHNlZSBFSENJIDMuNi4yICovCiAjZGVmaW5lCVFIX0hFQUQJCTB4MDAwMDgwMDAKQEAgLTMxNyw3ICszMTksMTAgQEAKIAlfX2hjMzIJCQlod190b2tlbjsKIAlfX2hjMzIJCQlod19idWYgWzVdOwogCV9faGMzMgkJCWh3X2J1Zl9oaSBbNV07Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOwogCitzdHJ1Y3QgZWhjaV9xaCB7CisJc3RydWN0IGVoY2lfcWhfaHcJKmh3OwogCS8qIHRoZSByZXN0IGlzIEhDRC1wcml2YXRlICovCiAJZG1hX2FkZHJfdAkJcWhfZG1hOwkJLyogYWRkcmVzcyBvZiBxaCAqLwogCXVuaW9uIGVoY2lfc2hhZG93CXFoX25leHQ7CS8qIHB0ciB0byBxaDsgb3IgcGVyaW9kaWMgKi8KQEAgLTMzNiw2ICszNDEsNyBAQAogCXUzMgkJCXJlZmNvdW50OwogCXVuc2lnbmVkCQlzdGFtcDsKIAorCXU4CQkJbmVlZHNfcmVzY2FuOwkvKiBEZXF1ZXVlIGR1cmluZyBnaXZlYmFjayAqLwogCXU4CQkJcWhfc3RhdGU7CiAjZGVmaW5lCVFIX1NUQVRFX0xJTktFRAkJMQkJLyogSEMgc2VlcyB0aGlzICovCiAjZGVmaW5lCVFIX1NUQVRFX1VOTElOSwkJMgkJLyogSEMgbWF5IHN0aWxsIHNlZSB0aGlzICovCkBAIC0zNTcsNyArMzYzLDcgQEAKIAogCXN0cnVjdCB1c2JfZGV2aWNlCSpkZXY7CQkvKiBhY2Nlc3MgdG8gVFQgKi8KIAl1bnNpZ25lZAkJY2xlYXJpbmdfdHQ6MTsJLyogQ2xlYXItVFQtQnVmIGluIHByb2dyZXNzICovCi19IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgzMikpKTsKK307CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU0NCw3ICs1NTAsNyBAQAogZWhjaV9wb3J0X3NwZWVkKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgdW5zaWduZWQgaW50IHBvcnRzYykKIHsKIAlpZiAoZWhjaV9pc19UREkoZWhjaSkpIHsKLQkJc3dpdGNoICgocG9ydHNjPj4yNikmMykgeworCQlzd2l0Y2ggKChwb3J0c2MgPj4gKGVoY2ktPmhhc19ob3N0cGMgPyAyNSA6IDI2KSkgJiAzKSB7CiAJCWNhc2UgMDoKIAkJCXJldHVybiAwOwogCQljYXNlIDE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1ZDgyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtMCwwICsxLDI5MDkgQEAKKy8qCisgKiBJU1AxMzYyIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTG90aGFyIFdhc3NtYW5uIDxMV0BLQVJPLWVsZWN0cm9uaWNzLmRlPgorICoKKyAqIERlcml2ZWQgZnJvbSB0aGUgU0w4MTEgSENELCByZXdyaXR0ZW4gZm9yIElTUDExNnguCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xhdiBLb25nYXMgPG9rQGFydGVjZGVzaWduLmVlPgorICoKKyAqIFBvcnRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA0IFBzaW9uIFRla2xvZ2l4IChmb3IgTmV0Qm9vayBQUk8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGF2aWQgQnJvd25lbGwKKyAqLworCisvKgorICogVGhlIElTUDEzNjIgY2hpcCByZXF1aXJlcyBhIGxhcmdlIGRlbGF5ICgzMDBucyBhbmQgNDYybnMpIGJldHdlZW4KKyAqIGFjY2Vzc2VzIHRvIHRoZSBhZGRyZXNzIGFuZCBkYXRhIHJlZ2lzdGVyLgorICogVGhlIGZvbGxvd2luZyB0aW1pbmcgb3B0aW9ucyBleGlzdDoKKyAqCisgKiAxLiBDb25maWd1cmUgeW91ciBtZW1vcnkgY29udHJvbGxlciB0byBhZGQgc3VjaCBkZWxheXMgaWYgaXQgY2FuICh0aGUgYmVzdCkKKyAqIDIuIEltcGxlbWVudCBwbGF0Zm9ybS1zcGVjaWZpYyBkZWxheSBmdW5jdGlvbiBwb3NzaWJseQorICogICAgY29tYmluZWQgd2l0aCBjb25maWd1cmluZyB0aGUgbWVtb3J5IGNvbnRyb2xsZXI7IHNlZQorICogICAgaW5jbHVkZS9saW51eC91c2JfaXNwMTM2Mi5oIGZvciBtb3JlIGluZm8uCisgKiAzLiBVc2UgbmRlbGF5IChlYXNpZXN0LCBwb29yZXN0KS4KKyAqCisgKiBVc2UgdGhlIGNvcnJlc3BvbmRpbmcgbWFjcm9zIFVTRV9QTEFURk9STV9ERUxBWSBhbmQgVVNFX05ERUxBWSBpbiB0aGUKKyAqIHBsYXRmb3JtIHNwZWNpZmljIHNlY3Rpb24gb2YgaXNwMTM2Mi5oIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgdmFyaWFudC4KKyAqCisgKiBBbHNvIG5vdGUgdGhhdCBhY2NvcmRpbmcgdG8gdGhlIFBoaWxpcHMgIklTUDEzNjIgRXJyYXRhIiBkb2N1bWVudAorICogUmV2IDEuMDAgZnJvbSAyNyBNYXkgZGF0YSBjb3JydXB0aW9uIG1heSBvY2N1ciB3aGVuIHRoZSAjV1Igc2lnbmFsCisgKiBpcyByZWFzc2VydGVkIChldmVuIHdpdGggI0NTIGRlYXNzZXJ0ZWQpIHdpdGhpbiAxMzJucyBhZnRlciBhCisgKiB3cml0ZSBjeWNsZSB0byBhbnkgY29udHJvbGxlciByZWdpc3Rlci4gSWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QKKyAqIGltcGxlbWVudCB0aGUgcmVjb21tZW5kZWQgZml4IChnYXRpbmcgdGhlICNXUiB3aXRoICNDUykgc29mdHdhcmUKKyAqIG11c3QgZW5zdXJlIHRoYXQgbm8gZnVydGhlciB3cml0ZSBjeWNsZSAobm90IG5lY2Vzc2FyaWx5IHRvIHRoZSBjaGlwISkKKyAqIGlzIGlzc3VlZCBieSB0aGUgQ1BVIHdpdGhpbiB0aGlzIGludGVydmFsLgorCisgKiBGb3IgUFhBMjV4IHRoaXMgY2FuIGJlIGVuc3VyZWQgYnkgdXNpbmcgVkxJTyB3aXRoIHRoZSBtYXhpbXVtCisgKiByZWNvdmVyeSB0aW1lIChNU0N4ID0gMHg3ZjhjKSB3aXRoIGEgbWVtb3J5IGNsb2NrIG9mIDk5LjUzIE1Iei4KKyAqLworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworIyBkZWZpbmUgSVNQMTM2Ml9ERUJVRworI2Vsc2UKKyMgdW5kZWYgSVNQMTM2Ml9ERUJVRworI2VuZGlmCisKKy8qCisgKiBUaGUgUFhBMjU1IFVEQyBhcHBhcmVudGx5IGRvZXNuJ3QgaGFuZGxlIEdFVF9TVEFUVVMsIEdFVF9DT05GSUcgYW5kCisgKiBHRVRfSU5URVJGQUNFIHJlcXVlc3RzIGNvcnJlY3RseSB3aGVuIHRoZSBTRVRVUCBhbmQgREFUQSBzdGFnZXMgb2YgdGhlCisgKiByZXF1ZXN0cyBhcmUgY2FycmllZCBvdXQgaW4gc2VwYXJhdGUgZnJhbWVzLiBUaGlzIHdpbGwgZGVsYXkgYW55IFNFVFVQCisgKiBwYWNrZXRzIHVudGlsIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBmcmFtZSBzbyB0aGF0IHRoaXMgc2l0dWF0aW9uIGlzCisgKiB1bmxpa2VseSB0byBvY2N1ciAoYW5kIG1ha2VzIHVzYnRlc3QgaGFwcHkgcnVubmluZyB3aXRoIGEgUFhBMjU1IHRhcmdldAorICogZGV2aWNlKS4KKyAqLworI3VuZGVmIEJVR0dZX1BYQTJYWF9VRENfVVNCVEVTVAorCisjdW5kZWYgUFREX1RSQUNFCisjdW5kZWYgVVJCX1RSQUNFCisjdW5kZWYgVkVSQk9TRQorI3VuZGVmIFJFR0lTVEVSUworCisvKiBUaGlzIGVuYWJsZXMgYSBtZW1vcnkgdGVzdCBvbiB0aGUgSVNQMTM2MiBjaGlwIG1lbW9yeSB0byBtYWtlIHN1cmUgdGhlCisgKiBjaGlwIGFjY2VzcyB0aW1pbmcgaXMgY29ycmVjdC4KKyAqLworI3VuZGVmIENISVBfQlVGRkVSX1RFU1QKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTM2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworc3RhdGljIGludCBkYmdfbGV2ZWw7CisjaWZkZWYgSVNQMTM2Ml9ERUJVRworbW9kdWxlX3BhcmFtKGRiZ19sZXZlbCwgaW50LCAwNjQ0KTsKKyNlbHNlCittb2R1bGVfcGFyYW0oZGJnX2xldmVsLCBpbnQsIDApOworI2RlZmluZQlTVFVCX0RFQlVHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKyNpbmNsdWRlICIuLi9jb3JlL3VzYi5oIgorI2luY2x1ZGUgImlzcDEzNjIuaCIKKworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIyMDA1LTA0LTA0IgorI2RlZmluZSBEUklWRVJfREVTQwkiSVNQMTM2MiBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciIKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGNvbnN0IGNoYXIgaGNkX25hbWVbXSA9ICJpc3AxMzYyLWhjZCI7CisKK3N0YXRpYyB2b2lkIGlzcDEzNjJfaGNfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKK3N0YXRpYyBpbnQgaXNwMTM2Ml9oY19zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFdoZW4gY2FsbGVkIGZyb20gdGhlIGludGVycnVwdGhhbmRsZXIgb25seSBpc3AxMzYyX2hjZC0+aXJxZW5iIGlzIG1vZGlmaWVkLAorICogc2luY2UgdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgd3JpdGUgaXNwMTM2Ml9oY2QtPmlycWVuYiB0byBIQ3VQSU5UIHVwb24KKyAqIGNvbXBsZXRpb24uCisgKiBXZSBkb24ndCBuZWVkIGEgJ2Rpc2FibGUnIGNvdW50ZXJwYXJ0LCBzaW5jZSBpbnRlcnJ1cHRzIHdpbGwgYmUgZGlzYWJsZWQKKyAqIG9ubHkgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXNwMTM2Ml9lbmFibGVfaW50KHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHUxNiBtYXNrKQoreworCWlmICgoaXNwMTM2Ml9oY2QtPmlycWVuYiB8IG1hc2spID09IGlzcDEzNjJfaGNkLT5pcnFlbmIpCisJCXJldHVybjsKKwlpZiAobWFzayAmIH5pc3AxMzYyX2hjZC0+aXJxZW5iKQorCQlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBtYXNrICYgfmlzcDEzNjJfaGNkLT5pcnFlbmIpOworCWlzcDEzNjJfaGNkLT5pcnFlbmIgfD0gbWFzazsKKwlpZiAoaXNwMTM2Ml9oY2QtPmlycV9hY3RpdmUpCisJCXJldHVybjsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5URU5CLCBpc3AxMzYyX2hjZC0+aXJxZW5iKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZ2V0X3B0ZF9xdWV1ZShzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLAorCQkJCQkJICAgICB1MTYgb2Zmc2V0KQoreworCXN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEgPSBOVUxMOworCisJaWYgKG9mZnNldCA8IGlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlWzFdLmJ1Zl9zdGFydCkKKwkJZXBxID0gJmlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlWzBdOworCWVsc2UgaWYgKG9mZnNldCA8IGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLmJ1Zl9zdGFydCkKKwkJZXBxID0gJmlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlWzFdOworCWVsc2UgaWYgKG9mZnNldCA8IGlzcDEzNjJfaGNkLT5hdGxfcXVldWUuYnVmX3N0YXJ0KQorCQllcHEgPSAmaXNwMTM2Ml9oY2QtPmludGxfcXVldWU7CisJZWxzZSBpZiAob2Zmc2V0IDwgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfc3RhcnQgKworCQkgICBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJ1Zl9zaXplKQorCQllcHEgPSAmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZTsKKworCWlmIChlcHEpCisJCURCRygxLCAiJXM6IFBURCAkJTA0eCBpcyBvbiAlcyBxdWV1ZVxuIiwgX19mdW5jX18sIG9mZnNldCwgZXBxLT5uYW1lKTsKKwllbHNlCisJCXByX3dhcm5pbmcoIiVzOiBpbnZhbGlkIFBURCAkJTA0eFxuIiwgX19mdW5jX18sIG9mZnNldCk7CisKKwlyZXR1cm4gZXBxOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfcHRkX29mZnNldChzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxLCB1OCBpbmRleCkKK3sKKwlpbnQgb2Zmc2V0OworCisJaWYgKGluZGV4ICogZXBxLT5ibGtfc2l6ZSA+IGVwcS0+YnVmX3NpemUpIHsKKwkJcHJfd2FybmluZygiJXM6IEJhZCAlcyBpbmRleCAlZCglZClcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsIGluZGV4LAorCQkgICAgIGVwcS0+YnVmX3NpemUgLyBlcHEtPmJsa19zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mZnNldCA9IGVwcS0+YnVmX3N0YXJ0ICsgaW5kZXggKiBlcHEtPmJsa19zaXplOworCURCRygzLCAiJXM6ICVzIFBURFslMDJ4XSAjICUwNHhcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsIGluZGV4LCBvZmZzZXQpOworCisJcmV0dXJuIG9mZnNldDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB1MTYgbWF4X3RyYW5zZmVyX3NpemUoc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSwgc2l6ZV90IHNpemUsCisJCQkJICAgIGludCBtcHMpCit7CisJdTE2IHhmZXJfc2l6ZSA9IG1pbl90KHNpemVfdCwgTUFYX1hGRVJfU0laRSwgc2l6ZSk7CisKKwl4ZmVyX3NpemUgPSBtaW5fdChzaXplX3QsIHhmZXJfc2l6ZSwgZXBxLT5idWZfYXZhaWwgKiBlcHEtPmJsa19zaXplIC0gUFREX0hFQURFUl9TSVpFKTsKKwlpZiAoeGZlcl9zaXplIDwgc2l6ZSAmJiB4ZmVyX3NpemUgJSBtcHMpCisJCXhmZXJfc2l6ZSAtPSB4ZmVyX3NpemUgJSBtcHM7CisKKwlyZXR1cm4geGZlcl9zaXplOworfQorCitzdGF0aWMgaW50IGNsYWltX3B0ZF9idWZmZXJzKHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEsCisJCQkgICAgIHN0cnVjdCBpc3AxMzYyX2VwICplcCwgdTE2IGxlbikKK3sKKwlpbnQgcHRkX29mZnNldCA9IC1FSU5WQUw7CisJaW50IGluZGV4OworCWludCBudW1fcHRkcyA9ICgobGVuICsgUFREX0hFQURFUl9TSVpFIC0gMSkgLyBlcHEtPmJsa19zaXplKSArIDE7CisJaW50IGZvdW5kID0gLTE7CisJaW50IGxhc3QgPSAtMTsKKworCUJVR19PTihsZW4gPiBlcHEtPmJ1Zl9zaXplKTsKKworCWlmICghZXBxLT5idWZfYXZhaWwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGVwLT5udW1fcHRkcykKKwkJcHJfZXJyKCIlczogJXMgbGVuICVkLyVkIG51bV9wdGRzICVkIGJ1Zl9tYXAgJTA4bHggc2tpcF9tYXAgJTA4bHhcbiIsIF9fZnVuY19fLAorCQkgICAgZXBxLT5uYW1lLCBsZW4sIGVwcS0+YmxrX3NpemUsIG51bV9wdGRzLCBlcHEtPmJ1Zl9tYXAsIGVwcS0+c2tpcF9tYXApOworCUJVR19PTihlcC0+bnVtX3B0ZHMgIT0gMCk7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPD0gZXBxLT5idWZfY291bnQgLSBudW1fcHRkczsgaW5kZXgrKykgeworCQlpZiAodGVzdF9iaXQoaW5kZXgsICZlcHEtPmJ1Zl9tYXApKQorCQkJY29udGludWU7CisJCWZvdW5kID0gaW5kZXg7CisJCWZvciAobGFzdCA9IGluZGV4ICsgMTsgbGFzdCA8IGluZGV4ICsgbnVtX3B0ZHM7IGxhc3QrKykgeworCQkJaWYgKHRlc3RfYml0KGxhc3QsICZlcHEtPmJ1Zl9tYXApKSB7CisJCQkJZm91bmQgPSAtMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoZm91bmQgPj0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZm91bmQgPCAwKQorCQlyZXR1cm4gLUVPVkVSRkxPVzsKKworCURCRygxLCAiJXM6IEZvdW5kICVkIFBURHNbJWRdIGZvciAlZC8lZCBieXRlXG4iLCBfX2Z1bmNfXywKKwkgICAgbnVtX3B0ZHMsIGZvdW5kLCBsZW4sIChpbnQpKGVwcS0+YmxrX3NpemUgLSBQVERfSEVBREVSX1NJWkUpKTsKKwlwdGRfb2Zmc2V0ID0gZ2V0X3B0ZF9vZmZzZXQoZXBxLCBmb3VuZCk7CisJV0FSTl9PTihwdGRfb2Zmc2V0IDwgMCk7CisJZXAtPnB0ZF9vZmZzZXQgPSBwdGRfb2Zmc2V0OworCWVwLT5udW1fcHRkcyArPSBudW1fcHRkczsKKwllcHEtPmJ1Zl9hdmFpbCAtPSBudW1fcHRkczsKKwlCVUdfT04oZXBxLT5idWZfYXZhaWwgPiBlcHEtPmJ1Zl9jb3VudCk7CisJZXAtPnB0ZF9pbmRleCA9IGZvdW5kOworCWZvciAoaW5kZXggPSBmb3VuZDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKQorCQlfX3NldF9iaXQoaW5kZXgsICZlcHEtPmJ1Zl9tYXApOworCURCRygxLCAiJXM6IERvbmUgJXMgUFREWyVkXSAkJTA0eCwgYXZhaWwgJWQgY291bnQgJWQgY2xhaW1lZCAlZCAlMDhseDolMDhseFxuIiwKKwkgICAgX19mdW5jX18sIGVwcS0+bmFtZSwgZXAtPnB0ZF9pbmRleCwgZXAtPnB0ZF9vZmZzZXQsCisJICAgIGVwcS0+YnVmX2F2YWlsLCBlcHEtPmJ1Zl9jb3VudCwgbnVtX3B0ZHMsIGVwcS0+YnVmX21hcCwgZXBxLT5za2lwX21hcCk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX3B0ZF9idWZmZXJzKHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEsIHN0cnVjdCBpc3AxMzYyX2VwICplcCkKK3sKKwlpbnQgaW5kZXggPSBlcC0+cHRkX2luZGV4OworCWludCBsYXN0ID0gZXAtPnB0ZF9pbmRleCArIGVwLT5udW1fcHRkczsKKworCWlmIChsYXN0ID4gZXBxLT5idWZfY291bnQpCisJCXByX2VycigiJXM6IGVwICVwIHJlcSAlZCBsZW4gJWQgJXMgUFREWyVkXSAkJTA0eCBudW1fcHRkcyAlZCBidWZfY291bnQgJWQgYnVmX2F2YWlsICVkIGJ1Zl9tYXAgJTA4bHggc2tpcF9tYXAgJTA4bHhcbiIsCisJCSAgICBfX2Z1bmNfXywgZXAsIGVwLT5udW1fcmVxLCBlcC0+bGVuZ3RoLCBlcHEtPm5hbWUsIGVwLT5wdGRfaW5kZXgsCisJCSAgICBlcC0+cHRkX29mZnNldCwgZXAtPm51bV9wdGRzLCBlcHEtPmJ1Zl9jb3VudCwgZXBxLT5idWZfYXZhaWwsCisJCSAgICBlcHEtPmJ1Zl9tYXAsIGVwcS0+c2tpcF9tYXApOworCUJVR19PTihsYXN0ID4gZXBxLT5idWZfY291bnQpOworCisJZm9yICg7IGluZGV4IDwgbGFzdDsgaW5kZXgrKykgeworCQlfX2NsZWFyX2JpdChpbmRleCwgJmVwcS0+YnVmX21hcCk7CisJCV9fc2V0X2JpdChpbmRleCwgJmVwcS0+c2tpcF9tYXApOworCX0KKwllcHEtPmJ1Zl9hdmFpbCArPSBlcC0+bnVtX3B0ZHM7CisJZXBxLT5wdGRfY291bnQtLTsKKworCUJVR19PTihlcHEtPmJ1Zl9hdmFpbCA+IGVwcS0+YnVmX2NvdW50KTsKKwlCVUdfT04oZXBxLT5wdGRfY291bnQgPiBlcHEtPmJ1Zl9jb3VudCk7CisKKwlEQkcoMSwgIiVzOiBEb25lICVzIFBURHMgJCUwNHggcmVsZWFzZWQgJWQgYXZhaWwgJWQgY291bnQgJWRcbiIsCisJICAgIF9fZnVuY19fLCBlcHEtPm5hbWUsCisJICAgIGVwLT5wdGRfb2Zmc2V0LCBlcC0+bnVtX3B0ZHMsIGVwcS0+YnVmX2F2YWlsLCBlcHEtPmJ1Zl9jb3VudCk7CisJREJHKDEsICIlczogYnVmX21hcCAlMDhseCBza2lwX21hcCAlMDhseFxuIiwgX19mdW5jX18sCisJICAgIGVwcS0+YnVmX21hcCwgZXBxLT5za2lwX21hcCk7CisKKwllcC0+bnVtX3B0ZHMgPSAwOworCWVwLT5wdGRfb2Zmc2V0ID0gLUVJTlZBTDsKKwllcC0+cHRkX2luZGV4ID0gLUVJTlZBTDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAgU2V0IHVwIFBURCdzLgorKi8KK3N0YXRpYyB2b2lkIHByZXBhcmVfcHRkKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCXN0cnVjdCBpc3AxMzYyX2VwICplcCwgc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSwKKwkJCXUxNiBmbm8pCit7CisJc3RydWN0IHB0ZCAqcHRkOworCWludCB0b2dnbGU7CisJaW50IGRpcjsKKwl1MTYgbGVuOworCXNpemVfdCBidWZfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJREJHKDMsICIlczogJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsIGVwKTsKKworCXB0ZCA9ICZlcC0+cHRkOworCisJZXAtPmRhdGEgPSAodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCWNhc2UgVVNCX1BJRF9JTjoKKwkJdG9nZ2xlID0gdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgZXAtPmVwbnVtLCAwKTsKKwkJZGlyID0gUFREX0RJUl9JTjsKKwkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKSB7CisJCQlsZW4gPSBtaW5fdChzaXplX3QsIGVwLT5tYXhwYWNrZXQsIGJ1Zl9sZW4pOworCQl9IGVsc2UgaWYgKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpKSB7CisJCQlsZW4gPSBtaW5fdChzaXplX3QsIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZm5vXS5sZW5ndGgsIE1BWF9YRkVSX1NJWkUpOworCQkJZXAtPmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZm5vXS5vZmZzZXQ7CisJCX0gZWxzZQorCQkJbGVuID0gbWF4X3RyYW5zZmVyX3NpemUoZXBxLCBidWZfbGVuLCBlcC0+bWF4cGFja2V0KTsKKwkJREJHKDEsICIlczogSU4gICAgbGVuICVkLyVkLyVkIGZyb20gVVJCXG4iLCBfX2Z1bmNfXywgbGVuLCBlcC0+bWF4cGFja2V0LAorCQkgICAgKGludClidWZfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX09VVDoKKwkJdG9nZ2xlID0gdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgZXAtPmVwbnVtLCAxKTsKKwkJZGlyID0gUFREX0RJUl9PVVQ7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkKKwkJCWxlbiA9IG1pbl90KHNpemVfdCwgZXAtPm1heHBhY2tldCwgYnVmX2xlbik7CisJCWVsc2UgaWYgKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpKQorCQkJbGVuID0gbWluX3Qoc2l6ZV90LCB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aCwgTUFYX1hGRVJfU0laRSk7CisJCWVsc2UKKwkJCWxlbiA9IG1heF90cmFuc2Zlcl9zaXplKGVwcSwgYnVmX2xlbiwgZXAtPm1heHBhY2tldCk7CisJCWlmIChsZW4gPT0gMCkKKwkJCXByX2luZm8oIiVzOiBTZW5kaW5nIFpFUk8gcGFja2V0OiAlZFxuIiwgX19mdW5jX18sCisJCQkgICAgIHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpOworCQlEQkcoMSwgIiVzOiBPVVQgICBsZW4gJWQvJWQvJWQgZnJvbSBVUkJcbiIsIF9fZnVuY19fLCBsZW4sIGVwLT5tYXhwYWNrZXQsCisJCSAgICAoaW50KWJ1Zl9sZW4pOworCQlicmVhazsKKwljYXNlIFVTQl9QSURfU0VUVVA6CisJCXRvZ2dsZSA9IDA7CisJCWRpciA9IFBURF9ESVJfU0VUVVA7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KTsKKwkJREJHKDEsICIlczogU0VUVVAgbGVuICVkXG4iLCBfX2Z1bmNfXywgbGVuKTsKKwkJZXAtPmRhdGEgPSB1cmItPnNldHVwX3BhY2tldDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX0FDSzoKKwkJdG9nZ2xlID0gMTsKKwkJbGVuID0gMDsKKwkJZGlyID0gKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAmJiB1c2JfcGlwZWluKHVyYi0+cGlwZSkpID8KKwkJCVBURF9ESVJfT1VUIDogUFREX0RJUl9JTjsKKwkJREJHKDEsICIlczogQUNLICAgbGVuICVkXG4iLCBfX2Z1bmNfXywgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG9nZ2xlID0gZGlyID0gbGVuID0gMDsKKwkJcHJfZXJyKCIlc0AlZDogZXAtPm5leHRwaWQgJTAyeFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBlcC0+bmV4dHBpZCk7CisJCUJVR19PTigxKTsKKwl9CisKKwllcC0+bGVuZ3RoID0gbGVuOworCWlmICghbGVuKQorCQllcC0+ZGF0YSA9IE5VTEw7CisKKwlwdGQtPmNvdW50ID0gUFREX0NDX01TSyB8IFBURF9BQ1RJVkVfTVNLIHwgUFREX1RPR0dMRSh0b2dnbGUpOworCXB0ZC0+bXBzID0gUFREX01QUyhlcC0+bWF4cGFja2V0KSB8IFBURF9TUEQodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpIHwKKwkJUFREX0VQKGVwLT5lcG51bSk7CisJcHRkLT5sZW4gPSBQVERfTEVOKGxlbikgfCBQVERfRElSKGRpcik7CisJcHRkLT5mYWRkciA9IFBURF9GQSh1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpKTsKKworCWlmICh1c2JfcGlwZWludCh1cmItPnBpcGUpKSB7CisJCXB0ZC0+ZmFkZHIgfD0gUFREX1NGX0lOVChlcC0+YnJhbmNoKTsKKwkJcHRkLT5mYWRkciB8PSBQVERfUFIoZXAtPmludGVydmFsID8gX19mZnMoZXAtPmludGVydmFsKSA6IDApOworCX0KKwlpZiAodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCisJCXB0ZC0+ZmFkZHIgfD0gUFREX1NGX0lTTyhmbm8pOworCisJREJHKDEsICIlczogRmluaXNoZWRcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml93cml0ZV9wdGQoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgc3RydWN0IGlzcDEzNjJfZXAgKmVwLAorCQkJICAgICAgc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSkKK3sKKwlzdHJ1Y3QgcHRkICpwdGQgPSAmZXAtPnB0ZDsKKwlpbnQgbGVuID0gUFREX0dFVF9ESVIocHRkKSA9PSBQVERfRElSX0lOID8gMCA6IGVwLT5sZW5ndGg7CisKKwlfQlVHX09OKGVwLT5wdGRfb2Zmc2V0IDwgMCk7CisKKwlwcmVmZXRjaChwdGQpOworCWlzcDEzNjJfd3JpdGVfYnVmZmVyKGlzcDEzNjJfaGNkLCBwdGQsIGVwLT5wdGRfb2Zmc2V0LCBQVERfSEVBREVSX1NJWkUpOworCWlmIChsZW4pCisJCWlzcDEzNjJfd3JpdGVfYnVmZmVyKGlzcDEzNjJfaGNkLCBlcC0+ZGF0YSwKKwkJCQkgICAgIGVwLT5wdGRfb2Zmc2V0ICsgUFREX0hFQURFUl9TSVpFLCBsZW4pOworCisJZHVtcF9wdGQocHRkKTsKKwlkdW1wX3B0ZF9vdXRfZGF0YShwdGQsIGVwLT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml9yZWFkX3B0ZChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCBzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXAsCisJCQkgICAgIHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEpCit7CisJc3RydWN0IHB0ZCAqcHRkID0gJmVwLT5wdGQ7CisJaW50IGFjdF9sZW47CisKKwlXQVJOX09OKGxpc3RfZW1wdHkoJmVwLT5hY3RpdmUpKTsKKwlCVUdfT04oZXAtPnB0ZF9vZmZzZXQgPCAwKTsKKworCWxpc3RfZGVsX2luaXQoJmVwLT5hY3RpdmUpOworCURCRygxLCAiJXM6IGVwICVwIHJlbW92ZWQgZnJvbSBhY3RpdmUgbGlzdCAlcFxuIiwgX19mdW5jX18sIGVwLCAmZXBxLT5hY3RpdmUpOworCisJcHJlZmV0Y2h3KHB0ZCk7CisJaXNwMTM2Ml9yZWFkX2J1ZmZlcihpc3AxMzYyX2hjZCwgcHRkLCBlcC0+cHRkX29mZnNldCwgUFREX0hFQURFUl9TSVpFKTsKKwlkdW1wX3B0ZChwdGQpOworCWFjdF9sZW4gPSBQVERfR0VUX0NPVU5UKHB0ZCk7CisJaWYgKFBURF9HRVRfRElSKHB0ZCkgIT0gUFREX0RJUl9JTiB8fCBhY3RfbGVuID09IDApCisJCXJldHVybjsKKwlpZiAoYWN0X2xlbiA+IGVwLT5sZW5ndGgpCisJCXByX2VycigiJXM6IGVwICVwIFBURCAkJTA0eCBhY3RfbGVuICVkIGVwLT5sZW5ndGggJWRcbiIsIF9fZnVuY19fLCBlcCwKKwkJCSBlcC0+cHRkX29mZnNldCwgYWN0X2xlbiwgZXAtPmxlbmd0aCk7CisJQlVHX09OKGFjdF9sZW4gPiBlcC0+bGVuZ3RoKTsKKwkvKiBPbmx5IHRyYW5zZmVyIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IGhhcyBhY3R1YWxseSBiZWVuIG92ZXJ3cml0dGVuCisJICogaW4gdGhlIGNoaXAgYnVmZmVyLiBXZSBkb24ndCB3YW50IGFueSBkYXRhIHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gdGhlCisJICogdHJhbnNmZXIgdG8gbGVhayBvdXQgb2YgdGhlIGNoaXAgdG8gdGhlIGNhbGxlcnMgdHJhbnNmZXIgYnVmZmVyIQorCSAqLworCXByZWZldGNodyhlcC0+ZGF0YSk7CisJaXNwMTM2Ml9yZWFkX2J1ZmZlcihpc3AxMzYyX2hjZCwgZXAtPmRhdGEsCisJCQkgICAgZXAtPnB0ZF9vZmZzZXQgKyBQVERfSEVBREVSX1NJWkUsIGFjdF9sZW4pOworCWR1bXBfcHRkX2luX2RhdGEocHRkLCBlcC0+ZGF0YSk7Cit9CisKKy8qCisgKiBJTlQgUFREcyB3aWxsIHN0YXkgaW4gdGhlIGNoaXAgdW50aWwgZGF0YSBpcyBhdmFpbGFibGUuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVtb3ZlIGEgUFREIGZyb20gdGhlIGNoaXAgd2hlbiB0aGUgVVJCIGlzIGRlcXVldWVkLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc3BpbmxvY2sgaGVsZCBhbmQgSVJRcyBkaXNhYmxlZAorICovCitzdGF0aWMgdm9pZCByZW1vdmVfcHRkKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHN0cnVjdCBpc3AxMzYyX2VwICplcCkKKworeworCWludCBpbmRleDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxOworCisJREJHKDEsICIlczogZXAgJXAgUFREWyVkXSAkJTA0eFxuIiwgX19mdW5jX18sIGVwLCBlcC0+cHRkX2luZGV4LCBlcC0+cHRkX29mZnNldCk7CisJQlVHX09OKGVwLT5wdGRfb2Zmc2V0IDwgMCk7CisKKwllcHEgPSBnZXRfcHRkX3F1ZXVlKGlzcDEzNjJfaGNkLCBlcC0+cHRkX29mZnNldCk7CisJQlVHX09OKCFlcHEpOworCisJLyogcHV0IGVwIGluIHJlbW92ZV9saXN0IGZvciBjbGVhbnVwICovCisJV0FSTl9PTighbGlzdF9lbXB0eSgmZXAtPnJlbW92ZV9saXN0KSk7CisJbGlzdF9hZGRfdGFpbCgmZXAtPnJlbW92ZV9saXN0LCAmaXNwMTM2Ml9oY2QtPnJlbW92ZV9saXN0KTsKKwkvKiBsZXQgU09GIGludGVycnVwdCBoYW5kbGUgdGhlIGNsZWFudXAgKi8KKwlpc3AxMzYyX2VuYWJsZV9pbnQoaXNwMTM2Ml9oY2QsIEhDdVBJTlRfU09GKTsKKworCWluZGV4ID0gZXAtPnB0ZF9pbmRleDsKKwlpZiAoaW5kZXggPCAwKQorCQkvKiBJU08gcXVldWVzIGRvbid0IGhhdmUgU0tJUCByZWdpc3RlcnMgKi8KKwkJcmV0dXJuOworCisJREJHKDEsICIlczogRGlzYWJsaW5nIFBURFslMDJ4XSAkJTA0eCAlMDhseHwlMDh4XG4iLCBfX2Z1bmNfXywKKwkgICAgaW5kZXgsIGVwLT5wdGRfb2Zmc2V0LCBlcHEtPnNraXBfbWFwLCAxIDw8IGluZGV4KTsKKworCS8qIHByZXZlbnQgZnVydGhlciBwcm9jZXNzaW5nIG9mIFBURCAod2lsbCBiZSBlZmZlY3RpdmUgYWZ0ZXIgbmV4dCBTT0YpICovCisJZXBxLT5za2lwX21hcCB8PSAxIDw8IGluZGV4OworCWlmIChlcHEgPT0gJmlzcDEzNjJfaGNkLT5hdGxfcXVldWUpIHsKKwkJREJHKDIsICIlczogQVRMU0tJUCA9ICUwOHggLT4gJTA4bHhcbiIsIF9fZnVuY19fLAorCQkgICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTFNLSVApLCBlcHEtPnNraXBfbWFwKTsKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENBVExTS0lQLCBlcHEtPnNraXBfbWFwKTsKKwkJaWYgKH5lcHEtPnNraXBfbWFwID09IDApCisJCQlpc3AxMzYyX2Nscl9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgSENCVUZTVEFUX0FUTF9BQ1RJVkUpOworCX0gZWxzZSBpZiAoZXBxID09ICZpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZSkgeworCQlEQkcoMiwgIiVzOiBJTlRMU0tJUCA9ICUwOHggLT4gJTA4bHhcbiIsIF9fZnVuY19fLAorCQkgICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExTS0lQKSwgZXBxLT5za2lwX21hcCk7CisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTFNLSVAsIGVwcS0+c2tpcF9tYXApOworCQlpZiAofmVwcS0+c2tpcF9tYXAgPT0gMCkKKwkJCWlzcDEzNjJfY2xyX21hc2sxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCBIQ0JVRlNUQVRfSU5UTF9BQ1RJVkUpOworCX0KK30KKworLyoKKyAgVGFrZSBkb25lIG9yIGZhaWxlZCByZXF1ZXN0cyBvdXQgb2Ygc2NoZWR1bGUuIEdpdmUgYmFjaworICBwcm9jZXNzZWQgdXJicy4KKyovCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVxdWVzdChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCBzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXAsCisJCQkgICBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCisgICAgIF9fcmVsZWFzZXMoaXNwMTM2Ml9oY2QtPmxvY2spCisgICAgIF9fYWNxdWlyZXMoaXNwMTM2Ml9oY2QtPmxvY2spCit7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCWVwLT5lcnJvcl9jb3VudCA9IDA7CisKKwlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpCisJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9TRVRVUDsKKworCVVSQl9EQkcoIiVzOiByZXEgJWQgRkEgJWQgZXAlZCVzICVzOiBsZW4gJWQvJWQgJXMgc3RhdCAlZFxuIiwgX19mdW5jX18sCisJCWVwLT5udW1fcmVxLCB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLAorCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCSF1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAib3V0IiA6ICJpbiIsCisJCXVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpID8gImN0cmwiIDoKKwkJCXVzYl9waXBlaW50KHVyYi0+cGlwZSkgPyAiaW50IiA6CisJCQl1c2JfcGlwZWJ1bGsodXJiLT5waXBlKSA/ICJidWxrIiA6CisJCQkiaXNvIiwKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spID8KKwkJInNob3J0X29rIiA6ICIiLCB1cmItPnN0YXR1cyk7CisKKworCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGlzcDEzNjJfaGNkX3RvX2hjZChpc3AxMzYyX2hjZCksIHVyYik7CisJc3Bpbl91bmxvY2soJmlzcDEzNjJfaGNkLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYihpc3AxMzYyX2hjZF90b19oY2QoaXNwMTM2Ml9oY2QpLCB1cmIsIHN0YXR1cyk7CisJc3Bpbl9sb2NrKCZpc3AxMzYyX2hjZC0+bG9jayk7CisKKwkvKiB0YWtlIGlkbGUgZW5kcG9pbnRzIG91dCBvZiB0aGUgc2NoZWR1bGUgcmlnaHQgYXdheSAqLworCWlmICghbGlzdF9lbXB0eSgmZXAtPmhlcC0+dXJiX2xpc3QpKQorCQlyZXR1cm47CisKKwkvKiBhc3luYyBkZXNjaGVkdWxlICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+c2NoZWR1bGUpKSB7CisJCWxpc3RfZGVsX2luaXQoJmVwLT5zY2hlZHVsZSk7CisJCXJldHVybjsKKwl9CisKKworCWlmIChlcC0+aW50ZXJ2YWwpIHsKKwkJLyogcGVyaW9kaWMgZGVzY2hlZHVsZSAqLworCQlEQkcoMSwgImRlc2NoZWR1bGUgcWglZC8lcCBicmFuY2ggJWQgbG9hZCAlZCBiYW5kd2lkdGggJWQgLT4gJWRcbiIsIGVwLT5pbnRlcnZhbCwKKwkJICAgIGVwLCBlcC0+YnJhbmNoLCBlcC0+bG9hZCwKKwkJICAgIGlzcDEzNjJfaGNkLT5sb2FkW2VwLT5icmFuY2hdLAorCQkgICAgaXNwMTM2Ml9oY2QtPmxvYWRbZXAtPmJyYW5jaF0gLSBlcC0+bG9hZCk7CisJCWlzcDEzNjJfaGNkLT5sb2FkW2VwLT5icmFuY2hdIC09IGVwLT5sb2FkOworCQllcC0+YnJhbmNoID0gUEVSSU9ESUNfU0laRTsKKwl9Cit9CisKKy8qCisgKiBBbmFseXplIHRyYW5zZmVyIHJlc3VsdHMsIGhhbmRsZSBwYXJ0aWFsIHRyYW5zZmVycyBhbmQgZXJyb3JzCisqLworc3RhdGljIHZvaWQgcG9zdHByb2NfZXAoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgc3RydWN0IGlzcDEzNjJfZXAgKmVwKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IGdldF91cmIoZXApOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBwdGQgKnB0ZDsKKwlpbnQgc2hvcnRfb2s7CisJdTE2IGxlbjsKKwlpbnQgdXJic3RhdCA9IC1FSU5QUk9HUkVTUzsKKwl1OCBjYzsKKworCURCRygyLCAiJXM6IGVwICVwIHJlcSAlZFxuIiwgX19mdW5jX18sIGVwLCBlcC0+bnVtX3JlcSk7CisKKwl1ZGV2ID0gdXJiLT5kZXY7CisJcHRkID0gJmVwLT5wdGQ7CisJY2MgPSBQVERfR0VUX0NDKHB0ZCk7CisJaWYgKGNjID09IFBURF9OT1RBQ0NFU1NFRCkgeworCQlwcl9lcnIoIiVzOiByZXEgJWQgUFREICVwIFVudG91Y2hlZCBieSBJU1AxMzYyXG4iLCBfX2Z1bmNfXywKKwkJICAgIGVwLT5udW1fcmVxLCBwdGQpOworCQljYyA9IFBURF9ERVZOT1RSRVNQOworCX0KKworCXNob3J0X29rID0gISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSyk7CisJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJLyogRGF0YSB1bmRlcnJ1biBpcyBzcGVjaWFsLiBGb3IgYWxsb3dlZCB1bmRlcnJ1bgorCSAgIHdlIGNsZWFyIHRoZSBlcnJvciBhbmQgY29udGludWUgYXMgbm9ybWFsLiBGb3IKKwkgICBmb3JiaWRkZW4gdW5kZXJydW4gd2UgZmluaXNoIHRoZSBEQVRBIHN0YWdlCisJICAgaW1tZWRpYXRlbHkgd2hpbGUgZm9yIGNvbnRyb2wgdHJhbnNmZXIsCisJICAgd2UgZG8gYSBTVEFUVVMgc3RhZ2UuCisJKi8KKwlpZiAoY2MgPT0gUFREX0RBVEFVTkRFUlJVTikgeworCQlpZiAoc2hvcnRfb2spIHsKKwkJCURCRygxLCAiJXM6IHJlcSAlZCBBbGxvd2VkIGRhdGEgdW5kZXJydW4gc2hvcnRfJXNvayAlZC8lZC8lZCBieXRlXG4iLAorCQkJICAgIF9fZnVuY19fLCBlcC0+bnVtX3JlcSwgc2hvcnRfb2sgPyAiIiA6ICJub3RfIiwKKwkJCSAgICBQVERfR0VUX0NPVU5UKHB0ZCksIGVwLT5tYXhwYWNrZXQsIGxlbik7CisJCQljYyA9IFBURF9DQ19OT0VSUk9SOworCQkJdXJic3RhdCA9IDA7CisJCX0gZWxzZSB7CisJCQlEQkcoMSwgIiVzOiByZXEgJWQgRGF0YSBVbmRlcnJ1biAlcyBuZXh0cGlkICUwMnggc2hvcnRfJXNvayAlZC8lZC8lZCBieXRlXG4iLAorCQkJICAgIF9fZnVuY19fLCBlcC0+bnVtX3JlcSwKKwkJCSAgICB1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiSU4iIDogIk9VVCIsIGVwLT5uZXh0cGlkLAorCQkJICAgIHNob3J0X29rID8gIiIgOiAibm90XyIsCisJCQkgICAgUFREX0dFVF9DT1VOVChwdGQpLCBlcC0+bWF4cGFja2V0LCBsZW4pOworCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKSB7CisJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0FDSzsKKwkJCQkvKiBzYXZlIHRoZSBkYXRhIHVuZGVycnVuIGVycm9yIGNvZGUgZm9yIGxhdGVyIGFuZAorCQkJCSAqIHByb2NlZGUgd2l0aCB0aGUgc3RhdHVzIHN0YWdlCisJCQkJICovCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IFBURF9HRVRfQ09VTlQocHRkKTsKKwkJCQlCVUdfT04odXJiLT5hY3R1YWxfbGVuZ3RoID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCQkJCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCQkJCXVyYi0+c3RhdHVzID0gY2NfdG9fZXJyb3JbUFREX0RBVEFVTkRFUlJVTl07CisJCQl9IGVsc2UgeworCQkJCXVzYl9zZXR0b2dnbGUodWRldiwgZXAtPmVwbnVtLCBlcC0+bmV4dHBpZCA9PSBVU0JfUElEX09VVCwKKwkJCQkJICAgICAgUFREX0dFVF9UT0dHTEUocHRkKSk7CisJCQkJdXJic3RhdCA9IGNjX3RvX2Vycm9yW1BURF9EQVRBVU5ERVJSVU5dOworCQkJfQorCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoY2MgIT0gUFREX0NDX05PRVJST1IpIHsKKwkJaWYgKCsrZXAtPmVycm9yX2NvdW50ID49IDMgfHwgY2MgPT0gUFREX0NDX1NUQUxMIHx8IGNjID09IFBURF9EQVRBT1ZFUlJVTikgeworCQkJdXJic3RhdCA9IGNjX3RvX2Vycm9yW2NjXTsKKwkJCURCRygxLCAiJXM6IHJlcSAlZCBuZXh0cGlkICUwMngsIHN0YXR1cyAlZCwgZXJyb3IgJWQsIGVycm9yX2NvdW50ICVkXG4iLAorCQkJICAgIF9fZnVuY19fLCBlcC0+bnVtX3JlcSwgZXAtPm5leHRwaWQsIHVyYnN0YXQsIGNjLAorCQkJICAgIGVwLT5lcnJvcl9jb3VudCk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCWNhc2UgVVNCX1BJRF9PVVQ6CisJCWlmIChQVERfR0VUX0NPVU5UKHB0ZCkgIT0gZXAtPmxlbmd0aCkKKwkJCXByX2VycigiJXM6IGNvdW50PSVkIGxlbj0lZFxuIiwgX19mdW5jX18sCisJCQkgICBQVERfR0VUX0NPVU5UKHB0ZCksIGVwLT5sZW5ndGgpOworCQlCVUdfT04oUFREX0dFVF9DT1VOVChwdGQpICE9IGVwLT5sZW5ndGgpOworCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gZXAtPmxlbmd0aDsKKwkJQlVHX09OKHVyYi0+YWN0dWFsX2xlbmd0aCA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCXVzYl9zZXR0b2dnbGUodWRldiwgZXAtPmVwbnVtLCAxLCBQVERfR0VUX1RPR0dMRShwdGQpKTsKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJCURCRygzLCAiJXM6IHJlcSAlZCB4ZmVyIGNvbXBsZXRlICVkLyVkIHN0YXR1cyAlZCAtPiAwXG4iLCBfX2Z1bmNfXywKKwkJCSAgICBlcC0+bnVtX3JlcSwgbGVuLCBlcC0+bWF4cGFja2V0LCB1cmJzdGF0KTsKKwkJCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkgeworCQkJCURCRygzLCAiJXM6IHJlcSAlZCAlcyBXYWl0IGZvciBBQ0tcbiIsIF9fZnVuY19fLAorCQkJCSAgICBlcC0+bnVtX3JlcSwKKwkJCQkgICAgdXNiX3BpcGVpbih1cmItPnBpcGUpID8gIklOIiA6ICJPVVQiKTsKKwkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOworCQkJfSBlbHNlIHsKKwkJCQlpZiAobGVuICUgZXAtPm1heHBhY2tldCB8fAorCQkJCSAgICAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpKSB7CisJCQkJCXVyYnN0YXQgPSAwOworCQkJCQlEQkcoMywgIiVzOiByZXEgJWQgVVJCICVzIHN0YXR1cyAlZCBjb3VudCAlZC8lZC8lZFxuIiwKKwkJCQkJICAgIF9fZnVuY19fLCBlcC0+bnVtX3JlcSwgdXNiX3BpcGVpbih1cmItPnBpcGUpID8gIklOIiA6ICJPVVQiLAorCQkJCQkgICAgdXJic3RhdCwgbGVuLCBlcC0+bWF4cGFja2V0LCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9QSURfSU46CisJCWxlbiA9IFBURF9HRVRfQ09VTlQocHRkKTsKKwkJQlVHX09OKGxlbiA+IGVwLT5sZW5ndGgpOworCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gbGVuOworCQlCVUdfT04odXJiLT5hY3R1YWxfbGVuZ3RoID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJdXNiX3NldHRvZ2dsZSh1ZGV2LCBlcC0+ZXBudW0sIDAsIFBURF9HRVRfVE9HR0xFKHB0ZCkpOworCQkvKiBpZiB0cmFuc2ZlciBjb21wbGV0ZWQgb3IgKGFsbG93ZWQpIGRhdGEgdW5kZXJydW4gKi8KKwkJaWYgKCh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPT0gdXJiLT5hY3R1YWxfbGVuZ3RoKSB8fAorCQkgICAgbGVuICUgZXAtPm1heHBhY2tldCkgeworCQkJREJHKDMsICIlczogcmVxICVkIHhmZXIgY29tcGxldGUgJWQvJWQgc3RhdHVzICVkIC0+IDBcbiIsIF9fZnVuY19fLAorCQkJICAgIGVwLT5udW1fcmVxLCBsZW4sIGVwLT5tYXhwYWNrZXQsIHVyYnN0YXQpOworCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKSB7CisJCQkJREJHKDMsICIlczogcmVxICVkICVzIFdhaXQgZm9yIEFDS1xuIiwgX19mdW5jX18sCisJCQkJICAgIGVwLT5udW1fcmVxLAorCQkJCSAgICB1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiSU4iIDogIk9VVCIpOworCQkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9BQ0s7CisJCQl9IGVsc2UgeworCQkJCXVyYnN0YXQgPSAwOworCQkJCURCRygzLCAiJXM6IHJlcSAlZCBVUkIgJXMgc3RhdHVzICVkIGNvdW50ICVkLyVkLyVkXG4iLAorCQkJCSAgICBfX2Z1bmNfXywgZXAtPm51bV9yZXEsIHVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJJTiIgOiAiT1VUIiwKKwkJCQkgICAgdXJic3RhdCwgbGVuLCBlcC0+bWF4cGFja2V0LCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX1BJRF9TRVRVUDoKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9PSB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9BQ0s7CisJCX0gZWxzZSBpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQkJdXNiX3NldHRvZ2dsZSh1ZGV2LCAwLCAxLCAxKTsKKwkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9PVVQ7CisJCX0gZWxzZSB7CisJCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIDAsIDAsIDEpOworCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0lOOworCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX1BJRF9BQ0s6CisJCURCRygzLCAiJXM6IHJlcSAlZCBnb3QgQUNLICVkIC0+IDBcbiIsIF9fZnVuY19fLCBlcC0+bnVtX3JlcSwKKwkJICAgIHVyYnN0YXQpOworCQlXQVJOX09OKHVyYnN0YXQgIT0gLUVJTlBST0dSRVNTKTsKKwkJdXJic3RhdCA9IDA7CisJCWVwLT5uZXh0cGlkID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCX0KKworIG91dDoKKwlpZiAodXJic3RhdCAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJREJHKDIsICIlczogRmluaXNoaW5nIGVwICVwIHJlcSAlZCB1cmIgJXAgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgIGVwLCBlcC0+bnVtX3JlcSwgdXJiLCB1cmJzdGF0KTsKKwkJZmluaXNoX3JlcXVlc3QoaXNwMTM2Ml9oY2QsIGVwLCB1cmIsIHVyYnN0YXQpOworCX0KK30KKworc3RhdGljIHZvaWQgZmluaXNoX3VubGlua3Moc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXA7CisJc3RydWN0IGlzcDEzNjJfZXAgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcCwgdG1wLCAmaXNwMTM2Ml9oY2QtPnJlbW92ZV9saXN0LCByZW1vdmVfbGlzdCkgeworCQlzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxID0KKwkJCWdldF9wdGRfcXVldWUoaXNwMTM2Ml9oY2QsIGVwLT5wdGRfb2Zmc2V0KTsKKwkJaW50IGluZGV4ID0gZXAtPnB0ZF9pbmRleDsKKworCQlCVUdfT04oZXBxID09IE5VTEwpOworCQlpZiAoaW5kZXggPj0gMCkgeworCQkJREJHKDEsICIlczogcmVtb3ZlIFBURFslZF0gJCUwNHhcbiIsIF9fZnVuY19fLCBpbmRleCwgZXAtPnB0ZF9vZmZzZXQpOworCQkJQlVHX09OKGVwLT5udW1fcHRkcyA9PSAwKTsKKwkJCXJlbGVhc2VfcHRkX2J1ZmZlcnMoZXBxLCBlcCk7CisJCX0KKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+aGVwLT51cmJfbGlzdCkpIHsKKwkJCXN0cnVjdCB1cmIgKnVyYiA9IGdldF91cmIoZXApOworCisJCQlEQkcoMSwgIiVzOiBGaW5pc2hpbmcgcmVxICVkIGVwICVwIGZyb20gcmVtb3ZlX2xpc3RcbiIsIF9fZnVuY19fLAorCQkJICAgIGVwLT5udW1fcmVxLCBlcCk7CisJCQlmaW5pc2hfcmVxdWVzdChpc3AxMzYyX2hjZCwgZXAsIHVyYiwgLUVTSFVURE9XTik7CisJCX0KKwkJV0FSTl9PTihsaXN0X2VtcHR5KCZlcC0+YWN0aXZlKSk7CisJCWlmICghbGlzdF9lbXB0eSgmZXAtPmFjdGl2ZSkpIHsKKwkJCWxpc3RfZGVsX2luaXQoJmVwLT5hY3RpdmUpOworCQkJREJHKDEsICIlczogZXAgJXAgcmVtb3ZlZCBmcm9tIGFjdGl2ZSBsaXN0XG4iLCBfX2Z1bmNfXywgZXApOworCQl9CisJCWxpc3RfZGVsX2luaXQoJmVwLT5yZW1vdmVfbGlzdCk7CisJCURCRygxLCAiJXM6IGVwICVwIHJlbW92ZWQgZnJvbSByZW1vdmVfbGlzdFxuIiwgX19mdW5jX18sIGVwKTsKKwl9CisJREJHKDEsICIlczogRG9uZVxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2F0bF90cmFuc2ZlcnMoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgaW50IGNvdW50KQoreworCWlmIChjb3VudCA+IDApIHsKKwkJaWYgKGNvdW50IDwgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5wdGRfY291bnQpCisJCQlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0FUTERUQywgY291bnQpOworCQlpc3AxMzYyX2VuYWJsZV9pbnQoaXNwMTM2Ml9oY2QsIEhDdVBJTlRfQVRMKTsKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENBVExTS0lQLCBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLnNraXBfbWFwKTsKKwkJaXNwMTM2Ml9zZXRfbWFzazE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQsIEhDQlVGU1RBVF9BVExfQUNUSVZFKTsKKwl9IGVsc2UKKwkJaXNwMTM2Ml9lbmFibGVfaW50KGlzcDEzNjJfaGNkLCBIQ3VQSU5UX1NPRik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfaW50bF90cmFuc2ZlcnMoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlpc3AxMzYyX2VuYWJsZV9pbnQoaXNwMTM2Ml9oY2QsIEhDdVBJTlRfSU5UTCk7CisJaXNwMTM2Ml9zZXRfbWFzazE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQsIEhDQlVGU1RBVF9JTlRMX0FDVElWRSk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMU0tJUCwgaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuc2tpcF9tYXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2lzdGxfdHJhbnNmZXJzKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIGludCBmbGlwKQoreworCWlzcDEzNjJfZW5hYmxlX2ludChpc3AxMzYyX2hjZCwgZmxpcCA/IEhDdVBJTlRfSVNUTDEgOiBIQ3VQSU5UX0lTVEwwKTsKKwlpc3AxMzYyX3NldF9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgZmxpcCA/CisJCQkgICBIQ0JVRlNUQVRfSVNUTDFfRlVMTCA6IEhDQlVGU1RBVF9JU1RMMF9GVUxMKTsKK30KKworc3RhdGljIGludCBzdWJtaXRfcmVxKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHN0cnVjdCB1cmIgKnVyYiwKKwkJICAgICAgc3RydWN0IGlzcDEzNjJfZXAgKmVwLCBzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxKQoreworCWludCBpbmRleCA9IGVwcS0+ZnJlZV9wdGQ7CisKKwlwcmVwYXJlX3B0ZChpc3AxMzYyX2hjZCwgdXJiLCBlcCwgZXBxLCAwKTsKKwlpbmRleCA9IGNsYWltX3B0ZF9idWZmZXJzKGVwcSwgZXAsIGVwLT5sZW5ndGgpOworCWlmIChpbmRleCA9PSAtRU5PTUVNKSB7CisJCURCRygxLCAiJXM6IHJlcSAlZCBObyBmcmVlICVzIFBURCBhdmFpbGFibGU6ICVkLCAlMDhseDolMDhseFxuIiwgX19mdW5jX18sCisJCSAgICBlcC0+bnVtX3JlcSwgZXBxLT5uYW1lLCBlcC0+bnVtX3B0ZHMsIGVwcS0+YnVmX21hcCwgZXBxLT5za2lwX21hcCk7CisJCXJldHVybiBpbmRleDsKKwl9IGVsc2UgaWYgKGluZGV4ID09IC1FT1ZFUkZMT1cpIHsKKwkJREJHKDEsICIlczogcmVxICVkIE5vdCBlbm91Z2ggc3BhY2UgZm9yICVkIGJ5dGUgJXMgUFREICVkICUwOGx4OiUwOGx4XG4iLAorCQkgICAgX19mdW5jX18sIGVwLT5udW1fcmVxLCBlcC0+bGVuZ3RoLCBlcHEtPm5hbWUsIGVwLT5udW1fcHRkcywKKwkJICAgIGVwcS0+YnVmX21hcCwgZXBxLT5za2lwX21hcCk7CisJCXJldHVybiBpbmRleDsKKwl9IGVsc2UKKwkJQlVHX09OKGluZGV4IDwgMCk7CisJbGlzdF9hZGRfdGFpbCgmZXAtPmFjdGl2ZSwgJmVwcS0+YWN0aXZlKTsKKwlEQkcoMSwgIiVzOiBlcCAlcCByZXEgJWQgbGVuICVkIGFkZGVkIHRvIGFjdGl2ZSBsaXN0ICVwXG4iLCBfX2Z1bmNfXywKKwkgICAgZXAsIGVwLT5udW1fcmVxLCBlcC0+bGVuZ3RoLCAmZXBxLT5hY3RpdmUpOworCURCRygxLCAiJXM6IFN1Ym1pdHRpbmcgJXMgUFREICQlMDR4IGZvciBlcCAlcCByZXEgJWRcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsCisJICAgIGVwLT5wdGRfb2Zmc2V0LCBlcCwgZXAtPm51bV9yZXEpOworCWlzcDEzNjJfd3JpdGVfcHRkKGlzcDEzNjJfaGNkLCBlcCwgZXBxKTsKKwlfX2NsZWFyX2JpdChlcC0+cHRkX2luZGV4LCAmZXBxLT5za2lwX21hcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfYXRsX3RyYW5zZmVycyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCWludCBwdGRfY291bnQgPSAwOworCXN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEgPSAmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZTsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXA7CisJaW50IGRlZmVyID0gMDsKKworCWlmIChhdG9taWNfcmVhZCgmZXBxLT5maW5pc2hpbmcpKSB7CisJCURCRygxLCAiJXM6IGZpbmlzaF90cmFuc2ZlcnMgaXMgYWN0aXZlIGZvciAlc1xuIiwgX19mdW5jX18sIGVwcS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVwLCAmaXNwMTM2Ml9oY2QtPmFzeW5jLCBzY2hlZHVsZSkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSBnZXRfdXJiKGVwKTsKKwkJaW50IHJldDsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5hY3RpdmUpKSB7CisJCQlEQkcoMiwgIiVzOiBTa2lwcGluZyBhY3RpdmUgJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsIGVwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJREJHKDEsICIlczogUHJvY2Vzc2luZyAlcyBlcCAlcCByZXEgJWRcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsCisJCSAgICBlcCwgZXAtPm51bV9yZXEpOworCisJCXJldCA9IHN1Ym1pdF9yZXEoaXNwMTM2Ml9oY2QsIHVyYiwgZXAsIGVwcSk7CisJCWlmIChyZXQgPT0gLUVOT01FTSkgeworCQkJZGVmZXIgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocmV0ID09IC1FT1ZFUkZMT1cpIHsKKwkJCWRlZmVyID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgQlVHR1lfUFhBMlhYX1VEQ19VU0JURVNUCisJCWRlZmVyID0gZXAtPm5leHRwaWQgPT0gVVNCX1BJRF9TRVRVUDsKKyNlbmRpZgorCQlwdGRfY291bnQrKzsKKwl9CisKKwkvKiBBdm9pZCBzdGFydmluZyBvZiBlbmRwb2ludHMgKi8KKwlpZiAoaXNwMTM2Ml9oY2QtPmFzeW5jLm5leHQgIT0gaXNwMTM2Ml9oY2QtPmFzeW5jLnByZXYpIHsKKwkJREJHKDIsICIlczogQ3ljbGluZyBBU1lOQyBzY2hlZHVsZSAlZFxuIiwgX19mdW5jX18sIHB0ZF9jb3VudCk7CisJCWxpc3RfbW92ZSgmaXNwMTM2Ml9oY2QtPmFzeW5jLCBpc3AxMzYyX2hjZC0+YXN5bmMubmV4dCk7CisJfQorCWlmIChwdGRfY291bnQgfHwgZGVmZXIpCisJCWVuYWJsZV9hdGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkLCBkZWZlciA/IDAgOiBwdGRfY291bnQpOworCisJZXBxLT5wdGRfY291bnQgKz0gcHRkX2NvdW50OworCWlmIChlcHEtPnB0ZF9jb3VudCA+IGVwcS0+c3RhdF9tYXhwdGRzKSB7CisJCWVwcS0+c3RhdF9tYXhwdGRzID0gZXBxLT5wdGRfY291bnQ7CisJCURCRygwLCAiJXM6IG1heF9wdGRzOiAlZFxuIiwgX19mdW5jX18sIGVwcS0+c3RhdF9tYXhwdGRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2ludGxfdHJhbnNmZXJzKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QpCit7CisJaW50IHB0ZF9jb3VudCA9IDA7CisJc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSA9ICZpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZTsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXA7CisKKwlpZiAoYXRvbWljX3JlYWQoJmVwcS0+ZmluaXNoaW5nKSkgeworCQlEQkcoMSwgIiVzOiBmaW5pc2hfdHJhbnNmZXJzIGlzIGFjdGl2ZSBmb3IgJXNcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlcCwgJmlzcDEzNjJfaGNkLT5wZXJpb2RpYywgc2NoZWR1bGUpIHsKKwkJc3RydWN0IHVyYiAqdXJiID0gZ2V0X3VyYihlcCk7CisJCWludCByZXQ7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+YWN0aXZlKSkgeworCQkJREJHKDEsICIlczogU2tpcHBpbmcgYWN0aXZlICVzIGVwICVwXG4iLCBfX2Z1bmNfXywKKwkJCSAgICBlcHEtPm5hbWUsIGVwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJREJHKDEsICIlczogUHJvY2Vzc2luZyAlcyBlcCAlcCByZXEgJWRcbiIsIF9fZnVuY19fLAorCQkgICAgZXBxLT5uYW1lLCBlcCwgZXAtPm51bV9yZXEpOworCQlyZXQgPSBzdWJtaXRfcmVxKGlzcDEzNjJfaGNkLCB1cmIsIGVwLCBlcHEpOworCQlpZiAocmV0ID09IC1FTk9NRU0pCisJCQlicmVhazsKKwkJZWxzZSBpZiAocmV0ID09IC1FT1ZFUkZMT1cpCisJCQljb250aW51ZTsKKwkJcHRkX2NvdW50Kys7CisJfQorCisJaWYgKHB0ZF9jb3VudCkgeworCQlzdGF0aWMgaW50IGxhc3RfY291bnQ7CisKKwkJaWYgKHB0ZF9jb3VudCAhPSBsYXN0X2NvdW50KSB7CisJCQlEQkcoMCwgIiVzOiBwdGRfY291bnQ6ICVkXG4iLCBfX2Z1bmNfXywgcHRkX2NvdW50KTsKKwkJCWxhc3RfY291bnQgPSBwdGRfY291bnQ7CisJCX0KKwkJZW5hYmxlX2ludGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwl9CisKKwllcHEtPnB0ZF9jb3VudCArPSBwdGRfY291bnQ7CisJaWYgKGVwcS0+cHRkX2NvdW50ID4gZXBxLT5zdGF0X21heHB0ZHMpCisJCWVwcS0+c3RhdF9tYXhwdGRzID0gZXBxLT5wdGRfY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5leHRfcHRkKHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEsIHN0cnVjdCBpc3AxMzYyX2VwICplcCkKK3sKKwl1MTYgcHRkX29mZnNldCA9IGVwLT5wdGRfb2Zmc2V0OworCWludCBudW1fcHRkcyA9IChlcC0+bGVuZ3RoICsgUFREX0hFQURFUl9TSVpFICsgKGVwcS0+YmxrX3NpemUgLSAxKSkgLyBlcHEtPmJsa19zaXplOworCisJREJHKDIsICIlczogUFREIG9mZnNldCAkJTA0eCArICUwNHggPT4gJWQgKiAlMDR4IC0+ICQlMDR4XG4iLCBfX2Z1bmNfXywgcHRkX29mZnNldCwKKwkgICAgZXAtPmxlbmd0aCwgbnVtX3B0ZHMsIGVwcS0+YmxrX3NpemUsIHB0ZF9vZmZzZXQgKyBudW1fcHRkcyAqIGVwcS0+YmxrX3NpemUpOworCisJcHRkX29mZnNldCArPSBudW1fcHRkcyAqIGVwcS0+YmxrX3NpemU7CisJaWYgKHB0ZF9vZmZzZXQgPCBlcHEtPmJ1Zl9zdGFydCArIGVwcS0+YnVmX3NpemUpCisJCXJldHVybiBwdGRfb2Zmc2V0OworCWVsc2UKKwkJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2lzb190cmFuc2ZlcnMoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlpbnQgcHRkX2NvdW50ID0gMDsKKwlpbnQgZmxpcCA9IGlzcDEzNjJfaGNkLT5pc3RsX2ZsaXA7CisJc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcTsKKwlpbnQgcHRkX29mZnNldDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXA7CisJc3RydWN0IGlzcDEzNjJfZXAgKnRtcDsKKwl1MTYgZm5vID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0ZNTlVNKTsKKworIGZpbGwyOgorCWVwcSA9ICZpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtmbGlwXTsKKwlpZiAoYXRvbWljX3JlYWQoJmVwcS0+ZmluaXNoaW5nKSkgeworCQlEQkcoMSwgIiVzOiBmaW5pc2hfdHJhbnNmZXJzIGlzIGFjdGl2ZSBmb3IgJXNcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZlcHEtPmFjdGl2ZSkpCisJCXJldHVybjsKKworCXB0ZF9vZmZzZXQgPSBlcHEtPmJ1Zl9zdGFydDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXAsIHRtcCwgJmlzcDEzNjJfaGNkLT5pc29jLCBzY2hlZHVsZSkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSBnZXRfdXJiKGVwKTsKKwkJczE2IGRpZmYgPSBmbm8gLSAodTE2KXVyYi0+c3RhcnRfZnJhbWU7CisKKwkJREJHKDEsICIlczogUHJvY2Vzc2luZyAlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwgZXApOworCisJCWlmIChkaWZmID4gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykgeworCQkJLyogdGltZSBmcmFtZSBmb3IgdGhpcyBVUkIgaGFzIGVsYXBzZWQgKi8KKwkJCWZpbmlzaF9yZXF1ZXN0KGlzcDEzNjJfaGNkLCBlcCwgdXJiLCAtRU9WRVJGTE9XKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGRpZmYgPCAtMSkgeworCQkJLyogVVJCIGlzIG5vdCBkdWUgaW4gdGhpcyBmcmFtZSBvciB0aGUgbmV4dCBvbmUuCisJCQkgKiBDb21wYXJpbmcgd2l0aCAnLTEnIGluc3RlYWQgb2YgJzAnIGFjY291bnRzIGZvciBkb3VibGUKKwkJCSAqIGJ1ZmZlcmluZyBpbiB0aGUgSVNQMTM2MiB3aGljaCBlbmFibGVzIHVzIHRvIHF1ZXVlIHRoZSBQVEQKKwkJCSAqIG9uZSBmcmFtZSBhaGVhZCBvZiB0aW1lCisJCQkgKi8KKwkJfSBlbHNlIGlmIChkaWZmID09IC0xKSB7CisJCQkvKiBzdWJtaXQgUFREJ3MgdGhhdCBhcmUgZHVlIGluIHRoZSBuZXh0IGZyYW1lICovCisJCQlwcmVwYXJlX3B0ZChpc3AxMzYyX2hjZCwgdXJiLCBlcCwgZXBxLCBmbm8pOworCQkJaWYgKHB0ZF9vZmZzZXQgKyBQVERfSEVBREVSX1NJWkUgKyBlcC0+bGVuZ3RoID4KKwkJCSAgICBlcHEtPmJ1Zl9zdGFydCArIGVwcS0+YnVmX3NpemUpIHsKKwkJCQlwcl9lcnIoIiVzOiBOb3QgZW5vdWdoIElTTyBidWZmZXIgc3BhY2UgZm9yICVkIGJ5dGUgUFREXG4iLAorCQkJCSAgICBfX2Z1bmNfXywgZXAtPmxlbmd0aCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQllcC0+cHRkX29mZnNldCA9IHB0ZF9vZmZzZXQ7CisJCQlsaXN0X2FkZF90YWlsKCZlcC0+YWN0aXZlLCAmZXBxLT5hY3RpdmUpOworCisJCQlwdGRfb2Zmc2V0ID0gbmV4dF9wdGQoZXBxLCBlcCk7CisJCQlpZiAocHRkX29mZnNldCA8IDApIHsKKwkJCQlwcl93YXJuaW5nKCIlczogcmVxICVkIE5vIG1vcmUgJXMgUFREIGJ1ZmZlcnMgYXZhaWxhYmxlXG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgIGVwLT5udW1fcmVxLCBlcHEtPm5hbWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZXAsICZlcHEtPmFjdGl2ZSwgYWN0aXZlKSB7CisJCWlmIChlcHEtPmFjdGl2ZS5uZXh0ID09ICZlcC0+YWN0aXZlKQorCQkJZXAtPnB0ZC5tcHMgfD0gUFREX0xBU1RfTVNLOworCQlpc3AxMzYyX3dyaXRlX3B0ZChpc3AxMzYyX2hjZCwgZXAsIGVwcSk7CisJCXB0ZF9jb3VudCsrOworCX0KKworCWlmIChwdGRfY291bnQpCisJCWVuYWJsZV9pc3RsX3RyYW5zZmVycyhpc3AxMzYyX2hjZCwgZmxpcCk7CisKKwllcHEtPnB0ZF9jb3VudCArPSBwdGRfY291bnQ7CisJaWYgKGVwcS0+cHRkX2NvdW50ID4gZXBxLT5zdGF0X21heHB0ZHMpCisJCWVwcS0+c3RhdF9tYXhwdGRzID0gZXBxLT5wdGRfY291bnQ7CisKKwkvKiBjaGVjaywgd2hldGhlciB0aGUgc2Vjb25kIElTVEwgYnVmZmVyIG1heSBhbHNvIGJlIGZpbGxlZCAqLworCWlmICghKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFUKSAmCisJICAgICAgKGZsaXAgPyBIQ0JVRlNUQVRfSVNUTDBfRlVMTCA6IEhDQlVGU1RBVF9JU1RMMV9GVUxMKSkpIHsKKwkJZm5vKys7CisJCXB0ZF9jb3VudCA9IDA7CisJCWZsaXAgPSAxIC0gZmxpcDsKKwkJZ290byBmaWxsMjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF90cmFuc2ZlcnMoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdW5zaWduZWQgbG9uZyBkb25lX21hcCwKKwkJCSAgICAgc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSkKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXA7CisJc3RydWN0IGlzcDEzNjJfZXAgKnRtcDsKKworCWlmIChsaXN0X2VtcHR5KCZlcHEtPmFjdGl2ZSkpIHsKKwkJREJHKDEsICIlczogTm90aGluZyB0byBkbyBmb3IgJXMgcXVldWVcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJREJHKDEsICIlczogRmluaXNoaW5nICVzIHRyYW5zZmVycyAlMDhseFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwgZG9uZV9tYXApOworCisJYXRvbWljX2luYygmZXBxLT5maW5pc2hpbmcpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcCwgdG1wLCAmZXBxLT5hY3RpdmUsIGFjdGl2ZSkgeworCQlpbnQgaW5kZXggPSBlcC0+cHRkX2luZGV4OworCisJCURCRygxLCAiJXM6IENoZWNraW5nICVzIFBURFslMDJ4XSAkJTA0eFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwKKwkJICAgIGluZGV4LCBlcC0+cHRkX29mZnNldCk7CisKKwkJQlVHX09OKGluZGV4IDwgMCk7CisJCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmRleCwgJmRvbmVfbWFwKSkgeworCQkJaXNwMTM2Ml9yZWFkX3B0ZChpc3AxMzYyX2hjZCwgZXAsIGVwcSk7CisJCQllcHEtPmZyZWVfcHRkID0gaW5kZXg7CisJCQlCVUdfT04oZXAtPm51bV9wdGRzID09IDApOworCQkJcmVsZWFzZV9wdGRfYnVmZmVycyhlcHEsIGVwKTsKKworCQkJREJHKDEsICIlczogZXAgJXAgcmVxICVkIHJlbW92ZWQgZnJvbSBhY3RpdmUgbGlzdFxuIiwgX19mdW5jX18sCisJCQkgICAgZXAsIGVwLT5udW1fcmVxKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmZXAtPnJlbW92ZV9saXN0KSkgeworCQkJCWxpc3RfZGVsX2luaXQoJmVwLT5yZW1vdmVfbGlzdCk7CisJCQkJREJHKDEsICIlczogZXAgJXAgcmVtb3ZlZCBmcm9tIHJlbW92ZSBsaXN0XG4iLCBfX2Z1bmNfXywgZXApOworCQkJfQorCQkJREJHKDEsICIlczogUG9zdHByb2Nlc3NpbmcgJXMgZXAgJXAgcmVxICVkXG4iLCBfX2Z1bmNfXywgZXBxLT5uYW1lLAorCQkJICAgIGVwLCBlcC0+bnVtX3JlcSk7CisJCQlwb3N0cHJvY19lcChpc3AxMzYyX2hjZCwgZXApOworCQl9CisJCWlmICghZG9uZV9tYXApCisJCQlicmVhazsKKwl9CisJaWYgKGRvbmVfbWFwKQorCQlwcl93YXJuaW5nKCIlczogZG9uZV9tYXAgbm90IGNsZWFyOiAlMDhseDolMDhseFxuIiwgX19mdW5jX18sIGRvbmVfbWFwLAorCQkgICAgIGVwcS0+c2tpcF9tYXApOworCWF0b21pY19kZWMoJmVwcS0+ZmluaXNoaW5nKTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2lzb190cmFuc2ZlcnMoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSkKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXA7CisJc3RydWN0IGlzcDEzNjJfZXAgKnRtcDsKKworCWlmIChsaXN0X2VtcHR5KCZlcHEtPmFjdGl2ZSkpIHsKKwkJREJHKDEsICIlczogTm90aGluZyB0byBkbyBmb3IgJXMgcXVldWVcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJREJHKDEsICIlczogRmluaXNoaW5nICVzIHRyYW5zZmVyc1xuIiwgX19mdW5jX18sIGVwcS0+bmFtZSk7CisKKwlhdG9taWNfaW5jKCZlcHEtPmZpbmlzaGluZyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVwLCB0bXAsICZlcHEtPmFjdGl2ZSwgYWN0aXZlKSB7CisJCURCRygxLCAiJXM6IENoZWNraW5nIFBURCAkJTA0eFxuIiwgX19mdW5jX18sIGVwLT5wdGRfb2Zmc2V0KTsKKworCQlpc3AxMzYyX3JlYWRfcHRkKGlzcDEzNjJfaGNkLCBlcCwgZXBxKTsKKwkJREJHKDEsICIlczogUG9zdHByb2Nlc3NpbmcgJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsIGVwKTsKKwkJcG9zdHByb2NfZXAoaXNwMTM2Ml9oY2QsIGVwKTsKKwl9CisJV0FSTl9PTihlcHEtPmJsa19zaXplICE9IDApOworCWF0b21pY19kZWMoJmVwcS0+ZmluaXNoaW5nKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGlzcDEzNjJfaXJxKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJaW50IGhhbmRsZWQgPSAwOworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwl1MTYgaXJxc3RhdDsKKwl1MTYgc3ZjX21hc2s7CisKKwlzcGluX2xvY2soJmlzcDEzNjJfaGNkLT5sb2NrKTsKKworCUJVR19PTihpc3AxMzYyX2hjZC0+aXJxX2FjdGl2ZSsrKTsKKworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIsIDApOworCisJaXJxc3RhdCA9IGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCk7CisJREJHKDMsICIlczogZ290IElSUSAlMDR4OiUwNHhcbiIsIF9fZnVuY19fLCBpcnFzdGF0LCBpc3AxMzYyX2hjZC0+aXJxZW5iKTsKKworCS8qIG9ubHkgaGFuZGxlIGludGVycnVwdHMgdGhhdCBhcmUgY3VycmVudGx5IGVuYWJsZWQgKi8KKwlpcnFzdGF0ICY9IGlzcDEzNjJfaGNkLT5pcnFlbmI7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgaXJxc3RhdCk7CisJc3ZjX21hc2sgPSBpcnFzdGF0OworCisJaWYgKGlycXN0YXQgJiBIQ3VQSU5UX1NPRikgeworCQlpc3AxMzYyX2hjZC0+aXJxZW5iICY9IH5IQ3VQSU5UX1NPRjsKKwkJaXNwMTM2Ml9oY2QtPmlycV9zdGF0W0lTUDEzNjJfSU5UX1NPRl0rKzsKKwkJaGFuZGxlZCA9IDE7CisJCXN2Y19tYXNrICY9IH5IQ3VQSU5UX1NPRjsKKwkJREJHKDMsICIlczogU09GXG4iLCBfX2Z1bmNfXyk7CisJCWlzcDEzNjJfaGNkLT5mbWluZGV4ID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0ZNTlVNKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpc3AxMzYyX2hjZC0+cmVtb3ZlX2xpc3QpKQorCQkJZmluaXNoX3VubGlua3MoaXNwMTM2Ml9oY2QpOworCQlpZiAoIWxpc3RfZW1wdHkoJmlzcDEzNjJfaGNkLT5hc3luYykgJiYgIShpcnFzdGF0ICYgSEN1UElOVF9BVEwpKSB7CisJCQlpZiAobGlzdF9lbXB0eSgmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5hY3RpdmUpKSB7CisJCQkJc3RhcnRfYXRsX3RyYW5zZmVycyhpc3AxMzYyX2hjZCk7CisJCQl9IGVsc2UgeworCQkJCWlzcDEzNjJfZW5hYmxlX2ludChpc3AxMzYyX2hjZCwgSEN1UElOVF9BVEwpOworCQkJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQVRMU0tJUCwKKwkJCQkJCSAgICBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLnNraXBfbWFwKTsKKwkJCQlpc3AxMzYyX3NldF9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgSENCVUZTVEFUX0FUTF9BQ1RJVkUpOworCQkJfQorCQl9CisJfQorCisJaWYgKGlycXN0YXQgJiBIQ3VQSU5UX0lTVEwwKSB7CisJCWlzcDEzNjJfaGNkLT5pcnFfc3RhdFtJU1AxMzYyX0lOVF9JU1RMMF0rKzsKKwkJaGFuZGxlZCA9IDE7CisJCXN2Y19tYXNrICY9IH5IQ3VQSU5UX0lTVEwwOworCQlpc3AxMzYyX2Nscl9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgSENCVUZTVEFUX0lTVEwwX0ZVTEwpOworCQlEQkcoMSwgIiVzOiBJU1RMMFxuIiwgX19mdW5jX18pOworCQlXQVJOX09OKChpbnQpISFpc3AxMzYyX2hjZC0+aXN0bF9mbGlwKTsKKwkJV0FSTl9PTihpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCkgJgorCQkJSENCVUZTVEFUX0lTVEwwX0FDVElWRSk7CisJCVdBUk5fT04oIShpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCkgJgorCQkJSENCVUZTVEFUX0lTVEwwX0RPTkUpKTsKKwkJaXNwMTM2Ml9oY2QtPmlycWVuYiAmPSB+SEN1UElOVF9JU1RMMDsKKwl9CisKKwlpZiAoaXJxc3RhdCAmIEhDdVBJTlRfSVNUTDEpIHsKKwkJaXNwMTM2Ml9oY2QtPmlycV9zdGF0W0lTUDEzNjJfSU5UX0lTVEwxXSsrOworCQloYW5kbGVkID0gMTsKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfSVNUTDE7CisJCWlzcDEzNjJfY2xyX21hc2sxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCBIQ0JVRlNUQVRfSVNUTDFfRlVMTCk7CisJCURCRygxLCAiJXM6IElTVEwxXG4iLCBfX2Z1bmNfXyk7CisJCVdBUk5fT04oIShpbnQpaXNwMTM2Ml9oY2QtPmlzdGxfZmxpcCk7CisJCVdBUk5fT04oaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQpICYKKwkJCUhDQlVGU1RBVF9JU1RMMV9BQ1RJVkUpOworCQlXQVJOX09OKCEoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQpICYKKwkJCUhDQlVGU1RBVF9JU1RMMV9ET05FKSk7CisJCWlzcDEzNjJfaGNkLT5pcnFlbmIgJj0gfkhDdVBJTlRfSVNUTDE7CisJfQorCisJaWYgKGlycXN0YXQgJiAoSEN1UElOVF9JU1RMMCB8IEhDdVBJTlRfSVNUTDEpKSB7CisJCVdBUk5fT04oKGlycXN0YXQgJiAoSEN1UElOVF9JU1RMMCB8IEhDdVBJTlRfSVNUTDEpKSA9PQorCQkJKEhDdVBJTlRfSVNUTDAgfCBIQ3VQSU5UX0lTVEwxKSk7CisJCWZpbmlzaF9pc29fdHJhbnNmZXJzKGlzcDEzNjJfaGNkLAorCQkJCSAgICAgJmlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlW2lzcDEzNjJfaGNkLT5pc3RsX2ZsaXBdKTsKKwkJc3RhcnRfaXNvX3RyYW5zZmVycyhpc3AxMzYyX2hjZCk7CisJCWlzcDEzNjJfaGNkLT5pc3RsX2ZsaXAgPSAxIC0gaXNwMTM2Ml9oY2QtPmlzdGxfZmxpcDsKKwl9CisKKwlpZiAoaXJxc3RhdCAmIEhDdVBJTlRfSU5UTCkgeworCQl1MzIgZG9uZV9tYXAgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTERPTkUpOworCQl1MzIgc2tpcF9tYXAgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTFNLSVApOworCQlpc3AxMzYyX2hjZC0+aXJxX3N0YXRbSVNQMTM2Ml9JTlRfSU5UTF0rKzsKKworCQlEQkcoMiwgIiVzOiBJTlRMXG4iLCBfX2Z1bmNfXyk7CisKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfSU5UTDsKKworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExTS0lQLCBza2lwX21hcCB8IGRvbmVfbWFwKTsKKwkJaWYgKH4oZG9uZV9tYXAgfCBza2lwX21hcCkgPT0gMCkKKwkJCS8qIEFsbCBQVERzIGFyZSBmaW5pc2hlZCwgZGlzYWJsZSBJTlRMIHByb2Nlc3NpbmcgZW50aXJlbHkgKi8KKwkJCWlzcDEzNjJfY2xyX21hc2sxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCBIQ0JVRlNUQVRfSU5UTF9BQ1RJVkUpOworCisJCWhhbmRsZWQgPSAxOworCQlXQVJOX09OKCFkb25lX21hcCk7CisJCWlmIChkb25lX21hcCkgeworCQkJREJHKDMsICIlczogSU5UTCBkb25lX21hcCAlMDh4XG4iLCBfX2Z1bmNfXywgZG9uZV9tYXApOworCQkJZmluaXNoX3RyYW5zZmVycyhpc3AxMzYyX2hjZCwgZG9uZV9tYXAsICZpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZSk7CisJCQlzdGFydF9pbnRsX3RyYW5zZmVycyhpc3AxMzYyX2hjZCk7CisJCX0KKwl9CisKKwlpZiAoaXJxc3RhdCAmIEhDdVBJTlRfQVRMKSB7CisJCXUzMiBkb25lX21hcCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENBVExET05FKTsKKwkJdTMyIHNraXBfbWFwID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTFNLSVApOworCQlpc3AxMzYyX2hjZC0+aXJxX3N0YXRbSVNQMTM2Ml9JTlRfQVRMXSsrOworCisJCURCRygyLCAiJXM6IEFUTFxuIiwgX19mdW5jX18pOworCisJCXN2Y19tYXNrICY9IH5IQ3VQSU5UX0FUTDsKKworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTFNLSVAsIHNraXBfbWFwIHwgZG9uZV9tYXApOworCQlpZiAofihkb25lX21hcCB8IHNraXBfbWFwKSA9PSAwKQorCQkJaXNwMTM2Ml9jbHJfbWFzazE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQsIEhDQlVGU1RBVF9BVExfQUNUSVZFKTsKKwkJaWYgKGRvbmVfbWFwKSB7CisJCQlEQkcoMywgIiVzOiBBVEwgZG9uZV9tYXAgJTA4eFxuIiwgX19mdW5jX18sIGRvbmVfbWFwKTsKKwkJCWZpbmlzaF90cmFuc2ZlcnMoaXNwMTM2Ml9oY2QsIGRvbmVfbWFwLCAmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZSk7CisJCQlzdGFydF9hdGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwkJfQorCQloYW5kbGVkID0gMTsKKwl9CisKKwlpZiAoaXJxc3RhdCAmIEhDdVBJTlRfT1BSKSB7CisJCXUzMiBpbnRzdGF0ID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVFNUQVQpOworCQlpc3AxMzYyX2hjZC0+aXJxX3N0YXRbSVNQMTM2Ml9JTlRfT1BSXSsrOworCisJCXN2Y19tYXNrICY9IH5IQ3VQSU5UX09QUjsKKwkJREJHKDIsICIlczogT1BSICUwOHg6JTA4eFxuIiwgX19mdW5jX18sIGludHN0YXQsIGlzcDEzNjJfaGNkLT5pbnRlbmIpOworCQlpbnRzdGF0ICY9IGlzcDEzNjJfaGNkLT5pbnRlbmI7CisJCWlmIChpbnRzdGF0ICYgT0hDSV9JTlRSX1VFKSB7CisJCQlwcl9lcnIoIlVucmVjb3ZlcmFibGUgZXJyb3JcbiIpOworCQkJLyogRklYTUU6IGRvIGhlcmUgcmVzZXQgb3IgY2xlYW51cCBvciB3aGF0ZXZlciAqLworCQl9CisJCWlmIChpbnRzdGF0ICYgT0hDSV9JTlRSX1JIU0MpIHsKKwkJCWlzcDEzNjJfaGNkLT5yaHN0YXR1cyA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSFNUQVRVUyk7CisJCQlpc3AxMzYyX2hjZC0+cmhwb3J0WzBdID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEpOworCQkJaXNwMTM2Ml9oY2QtPnJocG9ydFsxXSA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQyKTsKKwkJfQorCQlpZiAoaW50c3RhdCAmIE9IQ0lfSU5UUl9SRCkgeworCQkJcHJfaW5mbygiJXM6IFJFU1VNRSBERVRFQ1RFRFxuIiwgX19mdW5jX18pOworCQkJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENDT05UUk9MKTsKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CisJCX0KKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRTVEFULCBpbnRzdGF0KTsKKwkJaXJxc3RhdCAmPSB+SEN1UElOVF9PUFI7CisJCWhhbmRsZWQgPSAxOworCX0KKworCWlmIChpcnFzdGF0ICYgSEN1UElOVF9TVVNQKSB7CisJCWlzcDEzNjJfaGNkLT5pcnFfc3RhdFtJU1AxMzYyX0lOVF9TVVNQXSsrOworCQloYW5kbGVkID0gMTsKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfU1VTUDsKKworCQlwcl9pbmZvKCIlczogU1VTUEVORCBJUlFcbiIsIF9fZnVuY19fKTsKKwl9CisKKwlpZiAoaXJxc3RhdCAmIEhDdVBJTlRfQ0xLUkRZKSB7CisJCWlzcDEzNjJfaGNkLT5pcnFfc3RhdFtJU1AxMzYyX0lOVF9DTEtSRFldKys7CisJCWhhbmRsZWQgPSAxOworCQlpc3AxMzYyX2hjZC0+aXJxZW5iICY9IH5IQ3VQSU5UX0NMS1JEWTsKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfQ0xLUkRZOworCQlwcl9pbmZvKCIlczogQ0xLUkRZIElSUVxuIiwgX19mdW5jX18pOworCX0KKworCWlmIChzdmNfbWFzaykKKwkJcHJfZXJyKCIlczogVW5zZXJ2aWNlZCBpbnRlcnJ1cHQocykgJTA0eFxuIiwgX19mdW5jX18sIHN2Y19tYXNrKTsKKworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIsIGlzcDEzNjJfaGNkLT5pcnFlbmIpOworCWlzcDEzNjJfaGNkLT5pcnFfYWN0aXZlLS07CisJc3Bpbl91bmxvY2soJmlzcDEzNjJfaGNkLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCU1BWF9QRVJJT0RJQ19MT0FECTkwMAkvKiBvdXQgb2YgMTAwMCB1c2VjICovCitzdGF0aWMgaW50IGJhbGFuY2Uoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdTE2IGludGVydmFsLCB1MTYgbG9hZCkKK3sKKwlpbnQgaSwgYnJhbmNoID0gLUVOT1NQQzsKKworCS8qIHNlYXJjaCBmb3IgdGhlIGxlYXN0IGxvYWRlZCBzY2hlZHVsZSBicmFuY2ggb2YgdGhhdCBpbnRlcnZhbAorCSAqIHdoaWNoIGhhcyBlbm91Z2ggYmFuZHdpZHRoIGxlZnQgdW5yZXNlcnZlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJ2YWw7IGkrKykgeworCQlpZiAoYnJhbmNoIDwgMCB8fCBpc3AxMzYyX2hjZC0+bG9hZFticmFuY2hdID4gaXNwMTM2Ml9oY2QtPmxvYWRbaV0pIHsKKwkJCWludCBqOworCisJCQlmb3IgKGogPSBpOyBqIDwgUEVSSU9ESUNfU0laRTsgaiArPSBpbnRlcnZhbCkgeworCQkJCWlmICgoaXNwMTM2Ml9oY2QtPmxvYWRbal0gKyBsb2FkKSA+IE1BWF9QRVJJT0RJQ19MT0FEKSB7CisJCQkJCXByX2VycigiJXM6IG5ldyBsb2FkICVkIGxvYWRbJTAyeF0gJWQgbWF4ICVkXG4iLCBfX2Z1bmNfXywKKwkJCQkJICAgIGxvYWQsIGosIGlzcDEzNjJfaGNkLT5sb2FkW2pdLCBNQVhfUEVSSU9ESUNfTE9BRCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChqIDwgUEVSSU9ESUNfU0laRSkKKwkJCQljb250aW51ZTsKKwkJCWJyYW5jaCA9IGk7CisJCX0KKwl9CisJcmV0dXJuIGJyYW5jaDsKK30KKworLyogTkIhIEFMTCB0aGUgY29kZSBhYm92ZSB0aGlzIHBvaW50IHJ1bnMgd2l0aCBpc3AxMzYyX2hjZC0+bG9jaworICAgaGVsZCwgaXJxcyBvZmYKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgaXNwMTM2Ml91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQkJICAgICAgIHN0cnVjdCB1cmIgKnVyYiwKKwkJCSAgICAgICBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gdXJiLT5kZXY7CisJdW5zaWduZWQgaW50IHBpcGUgPSB1cmItPnBpcGU7CisJaW50IGlzX291dCA9ICF1c2JfcGlwZWluKHBpcGUpOworCWludCB0eXBlID0gdXNiX3BpcGV0eXBlKHBpcGUpOworCWludCBlcG51bSA9IHVzYl9waXBlZW5kcG9pbnQocGlwZSk7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXAgPSB1cmItPmVwOworCXN0cnVjdCBpc3AxMzYyX2VwICplcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCURCRygzLCAiJXM6IHVyYiAlcFxuIiwgX19mdW5jX18sIHVyYik7CisKKwlpZiAodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCXByX2VycigiSXNvY2hyb25vdXMgdHJhbnNmZXJzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlVUkJfREJHKCIlczogRkEgJWQgZXAlZCVzICVzOiBsZW4gJWQgJXMlc1xuIiwgX19mdW5jX18sCisJCXVzYl9waXBlZGV2aWNlKHBpcGUpLCBlcG51bSwKKwkJaXNfb3V0ID8gIm91dCIgOiAiaW4iLAorCQl1c2JfcGlwZWNvbnRyb2wocGlwZSkgPyAiY3RybCIgOgorCQkJdXNiX3BpcGVpbnQocGlwZSkgPyAiaW50IiA6CisJCQl1c2JfcGlwZWJ1bGsocGlwZSkgPyAiYnVsayIgOgorCQkJImlzbyIsCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpID8gIlpFUk9fUEFDS0VUICIgOiAiIiwKKwkJISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgPworCQkic2hvcnRfb2siIDogIiIpOworCisJLyogYXZvaWQgYWxsIGFsbG9jYXRpb25zIHdpdGhpbiBzcGlubG9ja3M6IHJlcXVlc3Qgb3IgZW5kcG9pbnQgKi8KKwlpZiAoIWhlcC0+aGNwcml2KSB7CisJCWVwID0ga2NhbGxvYygxLCBzaXplb2YgKmVwLCBtZW1fZmxhZ3MpOworCQlpZiAoIWVwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJLyogZG9uJ3Qgc3VibWl0IHRvIGEgZGVhZCBvciBkaXNhYmxlZCBwb3J0ICovCisJaWYgKCEoKGlzcDEzNjJfaGNkLT5yaHBvcnRbMF0gfCBpc3AxMzYyX2hjZC0+cmhwb3J0WzFdKSAmCisJICAgICAgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpKSB8fAorCSAgICAhSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQlrZnJlZShlcCk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9ub3RfbGlua2VkOworCX0KKworCXJldHZhbCA9IHVzYl9oY2RfbGlua191cmJfdG9fZXAoaGNkLCB1cmIpOworCWlmIChyZXR2YWwpIHsKKwkJa2ZyZWUoZXApOworCQlnb3RvIGZhaWxfbm90X2xpbmtlZDsKKwl9CisKKwlpZiAoaGVwLT5oY3ByaXYpIHsKKwkJZXAgPSBoZXAtPmhjcHJpdjsKKwl9IGVsc2UgeworCQlJTklUX0xJU1RfSEVBRCgmZXAtPnNjaGVkdWxlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmVwLT5hY3RpdmUpOworCQlJTklUX0xJU1RfSEVBRCgmZXAtPnJlbW92ZV9saXN0KTsKKwkJZXAtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKwkJZXAtPmhlcCA9IGhlcDsKKwkJZXAtPmVwbnVtID0gZXBudW07CisJCWVwLT5tYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHVyYi0+cGlwZSwgaXNfb3V0KTsKKwkJZXAtPnB0ZF9vZmZzZXQgPSAtRUlOVkFMOworCQllcC0+cHRkX2luZGV4ID0gLUVJTlZBTDsKKwkJdXNiX3NldHRvZ2dsZSh1ZGV2LCBlcG51bSwgaXNfb3V0LCAwKTsKKworCQlpZiAodHlwZSA9PSBQSVBFX0NPTlRST0wpCisJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfU0VUVVA7CisJCWVsc2UgaWYgKGlzX291dCkKKwkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9PVVQ7CisJCWVsc2UKKwkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9JTjsKKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkJaWYgKHVyYi0+aW50ZXJ2YWwgPiBQRVJJT0RJQ19TSVpFKQorCQkJCXVyYi0+aW50ZXJ2YWwgPSBQRVJJT0RJQ19TSVpFOworCQkJZXAtPmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwkJCWVwLT5icmFuY2ggPSBQRVJJT0RJQ19TSVpFOworCQkJZXAtPmxvYWQgPSB1c2JfY2FsY19idXNfdGltZSh1ZGV2LT5zcGVlZCwgIWlzX291dCwKKwkJCQkJCSAgICAgKHR5cGUgPT0gUElQRV9JU09DSFJPTk9VUyksCisJCQkJCQkgICAgIHVzYl9tYXhwYWNrZXQodWRldiwgcGlwZSwgaXNfb3V0KSkgLyAxMDAwOworCQkJYnJlYWs7CisJCX0KKwkJaGVwLT5oY3ByaXYgPSBlcDsKKwl9CisJZXAtPm51bV9yZXEgPSBpc3AxMzYyX2hjZC0+cmVxX3NlcmlhbCsrOworCisJLyogbWF5YmUgcHV0IGVuZHBvaW50IGludG8gc2NoZWR1bGUgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwljYXNlIFBJUEVfQlVMSzoKKwkJaWYgKGxpc3RfZW1wdHkoJmVwLT5zY2hlZHVsZSkpIHsKKwkJCURCRygxLCAiJXM6IEFkZGluZyBlcCAlcCByZXEgJWQgdG8gYXN5bmMgc2NoZWR1bGVcbiIsCisJCQkJX19mdW5jX18sIGVwLCBlcC0+bnVtX3JlcSk7CisJCQlsaXN0X2FkZF90YWlsKCZlcC0+c2NoZWR1bGUsICZpc3AxMzYyX2hjZC0+YXN5bmMpOworCQl9CisJCWJyZWFrOworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQl1cmItPmludGVydmFsID0gZXAtPmludGVydmFsOworCisJCS8qIHVyYiBzdWJtaXR0ZWQgZm9yIGFscmVhZHkgZXhpc3RpbmcgRVAgKi8KKwkJaWYgKGVwLT5icmFuY2ggPCBQRVJJT0RJQ19TSVpFKQorCQkJYnJlYWs7CisKKwkJcmV0dmFsID0gYmFsYW5jZShpc3AxMzYyX2hjZCwgZXAtPmludGVydmFsLCBlcC0+bG9hZCk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlwcl9lcnIoIiVzOiBiYWxhbmNlIHJldHVybmVkICVkXG4iLCBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQllcC0+YnJhbmNoID0gcmV0dmFsOworCQlyZXR2YWwgPSAwOworCQlpc3AxMzYyX2hjZC0+Zm1pbmRleCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENGTU5VTSk7CisJCURCRygxLCAiJXM6IEN1cnJlbnQgZnJhbWUgJTA0eCBicmFuY2ggJTAyeCBzdGFydF9mcmFtZSAlMDR4KCUwNHgpXG4iLAorCQkgICAgX19mdW5jX18sIGlzcDEzNjJfaGNkLT5mbWluZGV4LCBlcC0+YnJhbmNoLAorCQkgICAgKChpc3AxMzYyX2hjZC0+Zm1pbmRleCArIFBFUklPRElDX1NJWkUgLSAxKSAmCisJCSAgICAgfihQRVJJT0RJQ19TSVpFIC0gMSkpICsgZXAtPmJyYW5jaCwKKwkJICAgIChpc3AxMzYyX2hjZC0+Zm1pbmRleCAmIChQRVJJT0RJQ19TSVpFIC0gMSkpICsgZXAtPmJyYW5jaCk7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmVwLT5zY2hlZHVsZSkpIHsKKwkJCWlmICh0eXBlID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQl1MTYgZnJhbWUgPSBpc3AxMzYyX2hjZC0+Zm1pbmRleDsKKworCQkJCWZyYW1lICs9IG1heF90KHUxNiwgOCwgZXAtPmludGVydmFsKTsKKwkJCQlmcmFtZSAmPSB+KGVwLT5pbnRlcnZhbCAtIDEpOworCQkJCWZyYW1lIHw9IGVwLT5icmFuY2g7CisJCQkJaWYgKGZyYW1lX2JlZm9yZShmcmFtZSwgaXNwMTM2Ml9oY2QtPmZtaW5kZXgpKQorCQkJCQlmcmFtZSArPSBlcC0+aW50ZXJ2YWw7CisJCQkJdXJiLT5zdGFydF9mcmFtZSA9IGZyYW1lOworCisJCQkJREJHKDEsICIlczogQWRkaW5nIGVwICVwIHRvIGlzb2Mgc2NoZWR1bGVcbiIsIF9fZnVuY19fLCBlcCk7CisJCQkJbGlzdF9hZGRfdGFpbCgmZXAtPnNjaGVkdWxlLCAmaXNwMTM2Ml9oY2QtPmlzb2MpOworCQkJfSBlbHNlIHsKKwkJCQlEQkcoMSwgIiVzOiBBZGRpbmcgZXAgJXAgdG8gcGVyaW9kaWMgc2NoZWR1bGVcbiIsIF9fZnVuY19fLCBlcCk7CisJCQkJbGlzdF9hZGRfdGFpbCgmZXAtPnNjaGVkdWxlLCAmaXNwMTM2Ml9oY2QtPnBlcmlvZGljKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlEQkcoMSwgIiVzOiBlcCAlcCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwgX19mdW5jX18sIGVwKTsKKworCQlEQkcoMiwgIiVzOiBsb2FkICVkIGJhbmR3aWR0aCAlZCAtPiAlZFxuIiwgX19mdW5jX18sCisJCSAgICBlcC0+bG9hZCAvIGVwLT5pbnRlcnZhbCwgaXNwMTM2Ml9oY2QtPmxvYWRbZXAtPmJyYW5jaF0sCisJCSAgICBpc3AxMzYyX2hjZC0+bG9hZFtlcC0+YnJhbmNoXSArIGVwLT5sb2FkKTsKKwkJaXNwMTM2Ml9oY2QtPmxvYWRbZXAtPmJyYW5jaF0gKz0gZXAtPmxvYWQ7CisJfQorCisJdXJiLT5oY3ByaXYgPSBoZXA7CisJQUxJR05TVEFUKGlzcDEzNjJfaGNkLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwljYXNlIFBJUEVfQlVMSzoKKwkJc3RhcnRfYXRsX3RyYW5zZmVycyhpc3AxMzYyX2hjZCk7CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXN0YXJ0X2ludGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlzdGFydF9pc29fdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorIGZhaWw6CisJaWYgKHJldHZhbCkKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCisKKyBmYWlsX25vdF9saW5rZWQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlpZiAocmV0dmFsKQorCQlEQkcoMCwgIiVzOiB1cmIgJXAgZmFpbGVkIHdpdGggJWRcbiIsIF9fZnVuY19fLCB1cmIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBpc3AxMzYyX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXA7CisJaW50IHJldHZhbCA9IDA7CisKKwlEQkcoMywgIiVzOiB1cmIgJXBcbiIsIF9fZnVuY19fLCB1cmIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCWhlcCA9IHVyYi0+aGNwcml2OworCisJaWYgKCFoZXApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSURSTTsKKwl9CisKKwllcCA9IGhlcC0+aGNwcml2OworCWlmIChlcCkgeworCQkvKiBJbiBmcm9udCBvZiBxdWV1ZT8gKi8KKwkJaWYgKGVwLT5oZXAtPnVyYl9saXN0Lm5leHQgPT0gJnVyYi0+dXJiX2xpc3QpIHsKKwkJCWlmICghbGlzdF9lbXB0eSgmZXAtPmFjdGl2ZSkpIHsKKwkJCQlEQkcoMSwgIiVzOiB1cmIgJXAgZXAgJXAgcmVxICVkIGFjdGl2ZSBQVERbJWRdICQlMDR4XG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgdXJiLCBlcCwgZXAtPm51bV9yZXEsIGVwLT5wdGRfaW5kZXgsIGVwLT5wdGRfb2Zmc2V0KTsKKwkJCQkvKiBkaXNhYmxlIHByb2Nlc3NpbmcgYW5kIHF1ZXVlIFBURCBmb3IgcmVtb3ZhbCAqLworCQkJCXJlbW92ZV9wdGQoaXNwMTM2Ml9oY2QsIGVwKTsKKwkJCQl1cmIgPSBOVUxMOworCQkJfQorCQl9CisJCWlmICh1cmIpIHsKKwkJCURCRygxLCAiJXM6IEZpbmlzaGluZyBlcCAlcCByZXEgJWRcbiIsIF9fZnVuY19fLCBlcCwKKwkJCSAgICBlcC0+bnVtX3JlcSk7CisJCQlmaW5pc2hfcmVxdWVzdChpc3AxMzYyX2hjZCwgZXAsIHVyYiwgc3RhdHVzKTsKKwkJfSBlbHNlCisJCQlEQkcoMSwgIiVzOiB1cmIgJXAgYWN0aXZlOyB3YWl0NGlycVxuIiwgX19mdW5jX18sIHVyYik7CisJfSBlbHNlIHsKKwkJcHJfd2FybmluZygiJXM6IE5vIEVQIGluIFVSQiAlcFxuIiwgX19mdW5jX18sIHVyYik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJfQorZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJREJHKDMsICIlczogZXhpdFxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml9lbmRwb2ludF9kaXNhYmxlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwKQoreworCXN0cnVjdCBpc3AxMzYyX2VwICplcCA9IGhlcC0+aGNwcml2OworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKDEsICIlczogZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CisJaWYgKCFlcCkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmaGVwLT51cmJfbGlzdCkpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+YWN0aXZlKSAmJiBsaXN0X2VtcHR5KCZlcC0+cmVtb3ZlX2xpc3QpKSB7CisJCQlEQkcoMSwgIiVzOiBSZW1vdmluZyBlcCAlcCByZXEgJWQgUFREWyVkXSAkJTA0eFxuIiwgX19mdW5jX18sCisJCQkgICAgZXAsIGVwLT5udW1fcmVxLCBlcC0+cHRkX2luZGV4LCBlcC0+cHRkX29mZnNldCk7CisJCQlyZW1vdmVfcHRkKGlzcDEzNjJfaGNkLCBlcCk7CisJCQlwcl9pbmZvKCIlczogV2FpdGluZyBmb3IgSW50ZXJydXB0IHRvIGNsZWFuIHVwXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkvKiBXYWl0IGZvciBpbnRlcnJ1cHQgdG8gY2xlYXIgb3V0IGFjdGl2ZSBsaXN0ICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+YWN0aXZlKSkKKwkJbXNsZWVwKDEpOworCisJREJHKDEsICIlczogRnJlZWluZyBFUCAlcFxuIiwgX19mdW5jX18sIGVwKTsKKworCXVzYl9wdXRfZGV2KGVwLT51ZGV2KTsKKwlrZnJlZShlcCk7CisJaGVwLT5oY3ByaXYgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGlzcDEzNjJfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXUzMiBmbW51bTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJZm1udW0gPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRk1OVU0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gKGludClmbW51bTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQWRhcHRlZCBmcm9tIG9oY2ktaHViLmMgKi8KK3N0YXRpYyBpbnQgaXNwMTM2Ml9odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwlpbnQgcG9ydHMsIGksIGNoYW5nZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCXJldHVybiAtRVNIVVRET1dOOworCisJLyogUmVwb3J0IG5vIHN0YXR1cyBjaGFuZ2Ugbm93LCBpZiB3ZSBhcmUgc2NoZWR1bGVkIHRvIGJlCisJICAgY2FsbGVkIGxhdGVyICovCisJaWYgKHRpbWVyX3BlbmRpbmcoJmhjZC0+cmhfdGltZXIpKQorCQlyZXR1cm4gMDsKKworCXBvcnRzID0gaXNwMTM2Ml9oY2QtPnJoZGVzY2EgJiBSSF9BX05EUDsKKwlCVUdfT04ocG9ydHMgPiAyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCS8qIGluaXQgc3RhdHVzICovCisJaWYgKGlzcDEzNjJfaGNkLT5yaHN0YXR1cyAmIChSSF9IU19MUFNDIHwgUkhfSFNfT0NJQykpCisJCWJ1ZlswXSA9IGNoYW5nZWQgPSAxOworCWVsc2UKKwkJYnVmWzBdID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0czsgaSsrKSB7CisJCXUzMiBzdGF0dXMgPSBpc3AxMzYyX2hjZC0+cmhwb3J0W2ldOworCisJCWlmIChzdGF0dXMgJiAoUkhfUFNfQ1NDIHwgUkhfUFNfUEVTQyB8IFJIX1BTX1BTU0MgfAorCQkJICAgICAgUkhfUFNfT0NJQyB8IFJIX1BTX1BSU0MpKSB7CisJCQljaGFuZ2VkID0gMTsKKwkJCWJ1ZlswXSB8PSAxIDw8IChpICsgMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghKHN0YXR1cyAmIFJIX1BTX0NDUykpCisJCQljb250aW51ZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml9odWJfZGVzY3JpcHRvcihzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLAorCQkJCSAgIHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJdTMyIHJlZyA9IGlzcDEzNjJfaGNkLT5yaGRlc2NhOworCisJREJHKDMsICIlczogZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA5OworCWRlc2MtPmJIdWJDb250ckN1cnJlbnQgPSAwOworCWRlc2MtPmJOYnJQb3J0cyA9IHJlZyAmIDB4MzsKKwkvKiBQb3dlciBzd2l0Y2hpbmcsIGRldmljZSB0eXBlLCBvdmVyY3VycmVudC4gKi8KKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gY3B1X3RvX2xlMTYoKHJlZyA+PiA4KSAmIDB4MWYpOworCURCRygwLCAiJXM6IGh1YmNoYXJhY3RlcmlzdGljcyA9ICUwMnhcbiIsIF9fZnVuY19fLCBjcHVfdG9fbGUxNigocmVnID4+IDgpICYgMHgxZikpOworCWRlc2MtPmJQd3JPbjJQd3JHb29kID0gKHJlZyA+PiAyNCkgJiAweGZmOworCS8qIHR3byBiaXRtYXBzOiAgcG9ydHMgcmVtb3ZhYmxlLCBhbmQgbGVnYWN5IFBvcnRQd3JDdHJsTWFzayAqLworCWRlc2MtPmJpdG1hcFswXSA9IGRlc2MtPmJOYnJQb3J0cyA9PSAxID8gMSA8PCAxIDogMyA8PCAxOworCWRlc2MtPmJpdG1hcFsxXSA9IH4wOworCisJREJHKDMsICIlczogZXhpdFxuIiwgX19mdW5jX18pOworfQorCisvKiBBZGFwdGVkIGZyb20gb2hjaS1odWIuYyAqLworc3RhdGljIGludCBpc3AxMzYyX2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLAorCQkJICAgICAgIHUxNiB3SW5kZXgsIGNoYXIgKmJ1ZiwgdTE2IHdMZW5ndGgpCit7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB0MTsKKwlpbnQgcG9ydHMgPSBpc3AxMzYyX2hjZC0+cmhkZXNjYSAmIFJIX0FfTkRQOworCXUzMiB0bXAgPSAwOworCisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCURCRygwLCAiQ2xlYXJIdWJGZWF0dXJlOiAiKTsKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCQlfREJHKDAsICJDX0hVQl9PVkVSX0NVUlJFTlRcbiIpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTLCBSSF9IU19PQ0lDKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCQlfREJHKDAsICJDX0hVQl9MT0NBTF9QT1dFUlxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTZXRIdWJGZWF0dXJlOgorCQlEQkcoMCwgIlNldEh1YkZlYXR1cmU6ICIpOworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJCV9EQkcoMCwgIkNfSFVCX09WRVJfQ1VSUkVOVCBvciBDX0hVQl9MT0NBTF9QT1dFUlxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQlEQkcoMCwgIkdldEh1YkRlc2NyaXB0b3JcbiIpOworCQlpc3AxMzYyX2h1Yl9kZXNjcmlwdG9yKGlzcDEzNjJfaGNkLCAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKWJ1Zik7CisJCWJyZWFrOworCWNhc2UgR2V0SHViU3RhdHVzOgorCQlEQkcoMCwgIkdldEh1YlN0YXR1c1xuIik7CisJCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoMCksIChfX2xlMzIgKikgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorI2lmbmRlZiBWRVJCT1NFCisJCURCRygwLCAiR2V0UG9ydFN0YXR1c1xuIik7CisjZW5kaWYKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl0bXAgPSBpc3AxMzYyX2hjZC0+cmhwb3J0Wy0td0luZGV4XTsKKwkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMih0bXApLCAoX19sZTMyICopIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJREJHKDAsICJDbGVhclBvcnRGZWF0dXJlOiAiKTsKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxFOgorCQkJX0RCRygwLCAiVVNCX1BPUlRfRkVBVF9FTkFCTEVcbiIpOworCQkJdG1wID0gUkhfUFNfQ0NTOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRToKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfQ19FTkFCTEVcbiIpOworCQkJdG1wID0gUkhfUFNfUEVTQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfU1VTUEVORFxuIik7CisJCQl0bXAgPSBSSF9QU19QT0NJOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisJCQlfREJHKDAsICJVU0JfUE9SVF9GRUFUX0NfU1VTUEVORFxuIik7CisJCQl0bXAgPSBSSF9QU19QU1NDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfUE9XRVJcbiIpOworCQkJdG1wID0gUkhfUFNfTFNEQTsKKworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT046CisJCQlfREJHKDAsICJVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTlxuIik7CisJCQl0bXAgPSBSSF9QU19DU0M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQkJX0RCRygwLCAiVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVFxuIik7CisJCQl0bXAgPSBSSF9QU19PQ0lDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQkJX0RCRygwLCAiVVNCX1BPUlRfRkVBVF9DX1JFU0VUXG4iKTsKKwkJCXRtcCA9IFJIX1BTX1BSU0M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgd0luZGV4LCB0bXApOworCQlpc3AxMzYyX2hjZC0+cmhwb3J0W3dJbmRleF0gPQorCQkJaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEgKyB3SW5kZXgpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFNldFBvcnRGZWF0dXJlOgorCQlEQkcoMCwgIlNldFBvcnRGZWF0dXJlOiAiKTsKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlfREJHKDAsICJVU0JfUE9SVF9GRUFUX1NVU1BFTkRcbiIpOworI2lmZGVmCUNPTkZJR19VU0JfT1RHCisJCQlpZiAob2hjaS0+aGNkLnNlbGYub3RnX3BvcnQgPT0gKHdJbmRleCArIDEpICYmCisJCQkgICAgb2hjaS0+aGNkLnNlbGYuYl9obnBfZW5hYmxlKSB7CisJCQkJc3RhcnRfaG5wKG9oY2kpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSArIHdJbmRleCwgUkhfUFNfUFNTKTsKKwkJCWlzcDEzNjJfaGNkLT5yaHBvcnRbd0luZGV4XSA9CisJCQkJaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEgKyB3SW5kZXgpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlfREJHKDAsICJVU0JfUE9SVF9GRUFUX1BPV0VSXG4iKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgd0luZGV4LCBSSF9QU19QUFMpOworCQkJaXNwMTM2Ml9oY2QtPnJocG9ydFt3SW5kZXhdID0KKwkJCQlpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSArIHdJbmRleCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfUkVTRVRcbiIpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwkJCXQxID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVVNCX1JFU0VUX1dJRFRIKTsKKwkJCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0MSkpIHsKKwkJCQkvKiBzcGluIHVudGlsIGFueSBjdXJyZW50IHJlc2V0IGZpbmlzaGVzICovCisJCQkJZm9yICg7OykgeworCQkJCQl0bXAgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSArIHdJbmRleCk7CisJCQkJCWlmICghKHRtcCAmIFJIX1BTX1BSUykpCisJCQkJCQlicmVhazsKKwkJCQkJdWRlbGF5KDUwMCk7CisJCQkJfQorCQkJCWlmICghKHRtcCAmIFJIX1BTX0NDUykpCisJCQkJCWJyZWFrOworCQkJCS8qIFJlc2V0IGxhc3RzIDEwbXMgKGNsYWltcyBkYXRhc2hlZXQpICovCisJCQkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgd0luZGV4LCAoUkhfUFNfUFJTKSk7CisKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJCW1zbGVlcCgxMCk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQl9CisKKwkJCWlzcDEzNjJfaGNkLT5yaHBvcnRbd0luZGV4XSA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwKKwkJCQkJCQkJCSBIQ1JIUE9SVDEgKyB3SW5kZXgpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisgZXJyb3I6CisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJX0RCRygwLCAiUFJPVE9DT0wgU1RBTExcbiIpOworCQlyZXR2YWwgPSAtRVBJUEU7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmCUNPTkZJR19QTQorc3RhdGljIGludCBpc3AxMzYyX2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaXNwMTM2Ml9oY2QtPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoNSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCWlzcDEzNjJfaGNkLT5oY19jb250cm9sID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wpOworCXN3aXRjaCAoaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgeworCWNhc2UgT0hDSV9VU0JfUkVTVU1FOgorCQlEQkcoMCwgIiVzOiByZXN1bWUvc3VzcGVuZD9cbiIsIF9fZnVuY19fKTsKKwkJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOworCQlpc3AxMzYyX2hjZC0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNFVDsKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENDT05UUk9MLCBpc3AxMzYyX2hjZC0+aGNfY29udHJvbCk7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgT0hDSV9VU0JfUkVTRVQ6CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJcHJfd2FybmluZygiJXM6IG5lZWRzIHJlaW5pdCFcbiIsIF9fZnVuY19fKTsKKwkJZ290byBkb25lOworCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKKwkJcHJfd2FybmluZygiJXM6IGFscmVhZHkgc3VzcGVuZGVkP1xuIiwgX19mdW5jX18pOworCQlnb3RvIGRvbmU7CisJfQorCURCRygwLCAiJXM6IHN1c3BlbmQgcm9vdCBodWJcbiIsIF9fZnVuY19fKTsKKworCS8qIEZpcnN0IHN0b3AgYW55IHByb2Nlc3NpbmcgKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCWlmICghbGlzdF9lbXB0eSgmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5hY3RpdmUpIHx8CisJICAgICFsaXN0X2VtcHR5KCZpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5hY3RpdmUpIHx8CisJICAgICFsaXN0X2VtcHR5KCZpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVswXSAuYWN0aXZlKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbMV0gLmFjdGl2ZSkpIHsKKwkJaW50IGxpbWl0OworCisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQVRMU0tJUCwgfjApOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExTS0lQLCB+MCk7CisJCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgMCk7CisJCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIsIDApOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVFNUQVQsIE9IQ0lfSU5UUl9TRik7CisKKwkJREJHKDAsICIlczogc3RvcHBpbmcgc2NoZWR1bGVzIC4uLlxuIiwgX19mdW5jX18pOworCQlsaW1pdCA9IDIwMDA7CisJCXdoaWxlIChsaW1pdCA+IDApIHsKKwkJCXVkZWxheSgyNTApOworCQkJbGltaXQgLT0gMjUwOworCQkJaWYgKGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRTVEFUKSAmIE9IQ0lfSU5UUl9TRikKKwkJCQlicmVhazsKKwkJfQorCQltZGVsYXkoNyk7CisJCWlmIChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9BVEwpIHsKKwkJCXUzMiBkb25lX21hcCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENBVExET05FKTsKKwkJCWZpbmlzaF90cmFuc2ZlcnMoaXNwMTM2Ml9oY2QsIGRvbmVfbWFwLCAmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZSk7CisJCX0KKwkJaWYgKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0lOVEwpIHsKKwkJCXUzMiBkb25lX21hcCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMRE9ORSk7CisJCQlmaW5pc2hfdHJhbnNmZXJzKGlzcDEzNjJfaGNkLCBkb25lX21hcCwgJmlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlKTsKKwkJfQorCQlpZiAoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfSVNUTDApCisJCQlmaW5pc2hfaXNvX3RyYW5zZmVycyhpc3AxMzYyX2hjZCwgJmlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlWzBdKTsKKwkJaWYgKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0lTVEwxKQorCQkJZmluaXNoX2lzb190cmFuc2ZlcnMoaXNwMTM2Ml9oY2QsICZpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVsxXSk7CisJfQorCURCRygwLCAiJXM6IEhDSU5UU1RBVDogJTA4eFxuIiwgX19mdW5jX18sCisJCSAgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UU1RBVCkpOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UU1RBVCwKKwkJCSAgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UU1RBVCkpOworCisJLyogU3VzcGVuZCBodWIgKi8KKwlpc3AxMzYyX2hjZC0+aGNfY29udHJvbCA9IE9IQ0lfVVNCX1NVU1BFTkQ7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENDT05UUk9MKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wsIGlzcDEzNjJfaGNkLT5oY19jb250cm9sKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wpOworCisjaWYgMQorCWlzcDEzNjJfaGNkLT5oY19jb250cm9sID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wpOworCWlmICgoaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgIT0gT0hDSV9VU0JfU1VTUEVORCkgeworCQlwcl9lcnIoIiVzOiBjb250cm9sbGVyIHdvbid0IHN1c3BlbmQgJTA4eFxuIiwgX19mdW5jX18sCisJCSAgICBpc3AxMzYyX2hjZC0+aGNfY29udHJvbCk7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJLyogbm8gcmVzdW1lcyB1bnRpbCBkZXZpY2VzIGZpbmlzaCBzdXNwZW5kaW5nICovCisJCWlzcDEzNjJfaGNkLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJfQorZG9uZToKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKwkJREJHKDAsICIlczogSENEIHN1c3BlbmRlZDogJTA4eFxuIiwgX19mdW5jX18sCisJCSAgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaXNwMTM2Ml9idXNfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXUzMiBwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBpc3AxMzYyX2hjZC0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCWlzcDEzNjJfaGNkLT5oY19jb250cm9sID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wpOworCXByX2luZm8oIiVzOiBIQ0NPTlRST0w6ICUwOHhcbiIsIF9fZnVuY19fLCBpc3AxMzYyX2hjZC0+aGNfY29udHJvbCk7CisJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUkVTVU1JTkcpIHsKKwkJcHJfd2FybmluZygiJXM6IGR1cGxpY2F0ZSByZXN1bWVcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gMDsKKwl9IGVsc2UKKwkJc3dpdGNoIChpc3AxMzYyX2hjZC0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKKwkJCURCRygwLCAiJXM6IHJlc3VtZSByb290IGh1YlxuIiwgX19mdW5jX18pOworCQkJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOworCQkJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfUkVTVU1FOworCQkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENDT05UUk9MLCBpc3AxMzYyX2hjZC0+aGNfY29udHJvbCk7CisJCQlicmVhazsKKwkJY2FzZSBPSENJX1VTQl9SRVNVTUU6CisJCQkvKiBIQ0ZTIGNoYW5nZXMgc29tZXRpbWUgYWZ0ZXIgSU5UUl9SRCAqLworCQkJREJHKDAsICIlczogcmVtb3RlIHdha2V1cFxuIiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCWNhc2UgT0hDSV9VU0JfT1BFUjoKKwkJCURCRygwLCAiJXM6IG9kZCByZXN1bWVcbiIsIF9fZnVuY19fKTsKKwkJCXN0YXR1cyA9IDA7CisJCQloY2QtPnNlbGYucm9vdF9odWItPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJCQlicmVhazsKKwkJZGVmYXVsdDoJCS8qIFJFU0VULCB3ZSBsb3N0IHBvd2VyICovCisJCQlEQkcoMCwgIiVzOiByb290IGh1YiBoYXJkd2FyZSByZXNldFxuIiwgX19mdW5jX18pOworCQkJc3RhdHVzID0gLUVCVVNZOworCQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc3RhdHVzID09IC1FQlVTWSkgeworCQlEQkcoMCwgIiVzOiBSZXN0YXJ0aW5nIEhDXG4iLCBfX2Z1bmNfXyk7CisJCWlzcDEzNjJfaGNfc3RvcChoY2QpOworCQlyZXR1cm4gaXNwMTM2Ml9oY19zdGFydChoY2QpOworCX0KKwlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuIHN0YXR1czsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlwb3J0ID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIREVTQ0EpICYgUkhfQV9ORFA7CisJd2hpbGUgKHBvcnQtLSkgeworCQl1MzIgc3RhdCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgcG9ydCk7CisKKwkJLyogZm9yY2UgZ2xvYmFsLCBub3Qgc2VsZWN0aXZlLCByZXN1bWUgKi8KKwkJaWYgKCEoc3RhdCAmIFJIX1BTX1BTUykpIHsKKwkJCURCRygwLCAiJXM6IE5vdCBSZXN1bWluZyBSSCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydCk7CisJCQljb250aW51ZTsKKwkJfQorCQlEQkcoMCwgIiVzOiBSZXN1bWluZyBSSCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydCk7CisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSArIHBvcnQsIFJIX1BTX1BPQ0kpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJLyogU29tZSBjb250cm9sbGVycyAobHVjZW50KSBuZWVkIGV4dHJhLWxvbmcgZGVsYXlzICovCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JFU1VNSU5HOworCW1kZWxheSgyMCAvKiB1c2IgMTEuNS4xLjEwICovICsgMTUpOworCisJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgPSBPSENJX1VTQl9PUEVSOworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENDT05UUk9MLCBpc3AxMzYyX2hjZC0+aGNfY29udHJvbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkvKiBUUlNNUkNZICovCisJbXNsZWVwKDEwKTsKKworCS8qIGtlZXAgaXQgYWxpdmUgZm9yIH41eCBzdXNwZW5kICsgcmVzdW1lIGNvc3RzICovCisJaXNwMTM2Ml9oY2QtPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyNTApOworCisJaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUJaXNwMTM2Ml9idXNfc3VzcGVuZAlOVUxMCisjZGVmaW5lCWlzcDEzNjJfYnVzX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIFNUVUJfREVCVUdfRklMRQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZShzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworfQorCisjZWxzZQorCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKK3N0YXRpYyB2b2lkIGR1bXBfaXJxKHN0cnVjdCBzZXFfZmlsZSAqcywgY2hhciAqbGFiZWwsIHUxNiBtYXNrKQoreworCXNlcV9wcmludGYocywgIiUtMTVzICUwNHglcyVzJXMlcyVzJXNcbiIsIGxhYmVsLCBtYXNrLAorCQkgICBtYXNrICYgSEN1UElOVF9DTEtSRFkgPyAiIGNsa3JkeSIgOiAiIiwKKwkJICAgbWFzayAmIEhDdVBJTlRfU1VTUCA/ICIgc3VzcCIgOiAiIiwKKwkJICAgbWFzayAmIEhDdVBJTlRfT1BSID8gIiBvcHIiIDogIiIsCisJCSAgIG1hc2sgJiBIQ3VQSU5UX0VPVCA/ICIgZW90IiA6ICIiLAorCQkgICBtYXNrICYgSEN1UElOVF9BVEwgPyAiIGF0bCIgOiAiIiwKKwkJICAgbWFzayAmIEhDdVBJTlRfU09GID8gIiBzb2YiIDogIiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2ludChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNoYXIgKmxhYmVsLCB1MzIgbWFzaykKK3sKKwlzZXFfcHJpbnRmKHMsICIlLTE1cyAlMDh4JXMlcyVzJXMlcyVzJXNcbiIsIGxhYmVsLCBtYXNrLAorCQkgICBtYXNrICYgT0hDSV9JTlRSX01JRSA/ICIgTUlFIiA6ICIiLAorCQkgICBtYXNrICYgT0hDSV9JTlRSX1JIU0MgPyAiIHJoc2MiIDogIiIsCisJCSAgIG1hc2sgJiBPSENJX0lOVFJfRk5PID8gIiBmbm8iIDogIiIsCisJCSAgIG1hc2sgJiBPSENJX0lOVFJfVUUgPyAiIHVlIiA6ICIiLAorCQkgICBtYXNrICYgT0hDSV9JTlRSX1JEID8gIiByZCIgOiAiIiwKKwkJICAgbWFzayAmIE9IQ0lfSU5UUl9TRiA/ICIgc29mIiA6ICIiLAorCQkgICBtYXNrICYgT0hDSV9JTlRSX1NPID8gIiBzbyIgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfY3RybChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNoYXIgKmxhYmVsLCB1MzIgbWFzaykKK3sKKwlzZXFfcHJpbnRmKHMsICIlLTE1cyAlMDh4JXMlcyVzXG4iLCBsYWJlbCwgbWFzaywKKwkJICAgbWFzayAmIE9IQ0lfQ1RSTF9SV0MgPyAiIHJ3YyIgOiAiIiwKKwkJICAgbWFzayAmIE9IQ0lfQ1RSTF9SV0UgPyAiIHJ3ZSIgOiAiIiwKKwkJICAgKHsKKwkJCSAgIGNoYXIgKmhjZnM7CisJCQkgICBzd2l0Y2ggKG1hc2sgJiBPSENJX0NUUkxfSENGUykgeworCQkJICAgY2FzZSBPSENJX1VTQl9PUEVSOgorCQkJCSAgIGhjZnMgPSAiIG9wZXIiOworCQkJCSAgIGJyZWFrOworCQkJICAgY2FzZSBPSENJX1VTQl9SRVNFVDoKKwkJCQkgICBoY2ZzID0gIiByZXNldCI7CisJCQkJICAgYnJlYWs7CisJCQkgICBjYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJCQkgICBoY2ZzID0gIiByZXN1bWUiOworCQkJCSAgIGJyZWFrOworCQkJICAgY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCQkJCSAgIGhjZnMgPSAiIHN1c3BlbmQiOworCQkJCSAgIGJyZWFrOworCQkJICAgZGVmYXVsdDoKKwkJCQkgICBoY2ZzID0gIiA/IjsKKwkJCSAgIH0KKwkJCSAgIGhjZnM7CisJCSAgIH0pKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9yZWdzKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlzZXFfcHJpbnRmKHMsICJIQ1JFVklTSU9OIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ1JFVklTSU9OKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JFVklTSU9OKSk7CisJc2VxX3ByaW50ZihzLCAiSENDT05UUk9MICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENDT05UUk9MKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0NNRFNUQVQgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0NNRFNUQVQpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ01EU1RBVCkpOworCXNlcV9wcmludGYocywgIkhDSU5UU1RBVCAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDSU5UU1RBVCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRTVEFUKSk7CisJc2VxX3ByaW50ZihzLCAiSENJTlRFTkIgICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJTlRFTkIpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5URU5CKSk7CisJc2VxX3ByaW50ZihzLCAiSENGTUlOVFZMICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENGTUlOVFZMKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0ZNSU5UVkwpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0ZNUkVNICAgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0ZNUkVNKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0ZNUkVNKSk7CisJc2VxX3ByaW50ZihzLCAiSENGTU5VTSAgICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENGTU5VTSksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENGTU5VTSkpOworCXNlcV9wcmludGYocywgIkhDTFNUSFJFU0ggWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDTFNUSFJFU0gpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDTFNUSFJFU0gpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ1JIREVTQ0EgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ1JIREVTQ0EpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQSkpOworCXNlcV9wcmludGYocywgIkhDUkhERVNDQiAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDUkhERVNDQiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSERFU0NCKSk7CisJc2VxX3ByaW50ZihzLCAiSENSSFNUQVRVUyBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENSSFNUQVRVUyksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSFNUQVRVUykpOworCXNlcV9wcmludGYocywgIkhDUkhQT1JUMSAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDUkhQT1JUMSksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxKSk7CisJc2VxX3ByaW50ZihzLCAiSENSSFBPUlQyICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENSSFBPUlQyKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDIpKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCXNlcV9wcmludGYocywgIkhDSFdDRkcgICAgWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0hXQ0ZHKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0hXQ0ZHKSk7CisJc2VxX3ByaW50ZihzLCAiSENETUFDRkcgICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDRE1BQ0ZHKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0RNQUNGRykpOworCXNlcV9wcmludGYocywgIkhDWEZFUkNUUiAgWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ1hGRVJDVFIpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDWEZFUkNUUikpOworCXNlcV9wcmludGYocywgIkhDdVBJTlQgICAgWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ3VQSU5UKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSk7CisJc2VxX3ByaW50ZihzLCAiSEN1UElOVEVOQiBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDdVBJTlRFTkIpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0NISVBJRCAgIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENDSElQSUQpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQ0hJUElEKSk7CisJc2VxX3ByaW50ZihzLCAiSENTQ1JBVENIICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDU0NSQVRDSCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENTQ1JBVENIKSk7CisJc2VxX3ByaW50ZihzLCAiSENCVUZTVEFUICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDQlVGU1RBVCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFUKSk7CisJc2VxX3ByaW50ZihzLCAiSENESVJBRERSICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENESVJBRERSKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0RJUkFERFIpKTsKKyNpZiAwCisJc2VxX3ByaW50ZihzLCAiSENESVJEQVRBICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKEhDRElSREFUQSksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENESVJEQVRBKSk7CisjZW5kaWYKKwlzZXFfcHJpbnRmKHMsICJIQ0lTVExCVUZTWlslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJU1RMQlVGU1opLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDSVNUTEJVRlNaKSk7CisJc2VxX3ByaW50ZihzLCAiSENJU1RMUkFURSBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDSVNUTFJBVEUpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDSVNUTFJBVEUpKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCXNlcV9wcmludGYocywgIkhDSU5UTEJVRlNaWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0lOVExCVUZTWiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENJTlRMQlVGU1opKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0lOVExCTEtTWlslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJTlRMQkxLU1opLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDSU5UTEJMS1NaKSk7CisJc2VxX3ByaW50ZihzLCAiSENJTlRMRE9ORSBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJTlRMRE9ORSksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMRE9ORSkpOworCXNlcV9wcmludGYocywgIkhDSU5UTFNLSVAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDSU5UTFNLSVApLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTFNLSVApKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0lOVExMQVNUIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0lOVExMQVNUKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExMQVNUKSk7CisJc2VxX3ByaW50ZihzLCAiSENJTlRMQ1VSUiBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDSU5UTENVUlIpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDSU5UTENVUlIpKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCXNlcV9wcmludGYocywgIkhDQVRMQlVGU1ogWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0FUTEJVRlNaKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0FUTEJVRlNaKSk7CisJc2VxX3ByaW50ZihzLCAiSENBVExCTEtTWiBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDQVRMQkxLU1opLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQVRMQkxLU1opKTsKKyNpZiAwCisJc2VxX3ByaW50ZihzLCAiSENBVExET05FICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENBVExET05FKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTERPTkUpKTsKKyNlbmRpZgorCXNlcV9wcmludGYocywgIkhDQVRMU0tJUCAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDQVRMU0tJUCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENBVExTS0lQKSk7CisJc2VxX3ByaW50ZihzLCAiSENBVExMQVNUICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENBVExMQVNUKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTExBU1QpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0FUTENVUlIgIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENBVExDVVJSKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0FUTENVUlIpKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCXNlcV9wcmludGYocywgIkhDQVRMRFRDICAgWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0FUTERUQyksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENBVExEVEMpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0FUTERUQ1RPIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENBVExEVENUTyksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENBVExEVENUTykpOworfQorCitzdGF0aWMgaW50IHByb2NfaXNwMTM2Ml9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBzLT5wcml2YXRlOworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlpbnQgaTsKKworCXNlcV9wcmludGYocywgIiVzXG4lcyB2ZXJzaW9uICVzXG4iLAorCQkgICBpc3AxMzYyX2hjZF90b19oY2QoaXNwMTM2Ml9oY2QpLT5wcm9kdWN0X2Rlc2MsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisKKwkvKiBjb2xsZWN0IHN0YXRpc3RpY3MgdG8gaGVscCBlc3RpbWF0ZSBwb3RlbnRpYWwgd2luIGZvcgorCSAqIERNQSBlbmdpbmVzIHRoYXQgY2FyZSBhYm91dCBhbGlnbm1lbnQgKFBYQSkKKwkgKi8KKwlzZXFfcHJpbnRmKHMsICJhbGlnbm1lbnQ6ICAxNmIvJWxkIDhiLyVsZCA0Yi8lbGQgMmIvJWxkIDFiLyVsZFxuIiwKKwkJICAgaXNwMTM2Ml9oY2QtPnN0YXQxNiwgaXNwMTM2Ml9oY2QtPnN0YXQ4LCBpc3AxMzYyX2hjZC0+c3RhdDQsCisJCSAgIGlzcDEzNjJfaGNkLT5zdGF0MiwgaXNwMTM2Ml9oY2QtPnN0YXQxKTsKKwlzZXFfcHJpbnRmKHMsICJtYXggIyBwdGRzIGluIEFUTCAgZmlmbzogJWRcbiIsIGlzcDEzNjJfaGNkLT5hdGxfcXVldWUuc3RhdF9tYXhwdGRzKTsKKwlzZXFfcHJpbnRmKHMsICJtYXggIyBwdGRzIGluIElOVEwgZmlmbzogJWRcbiIsIGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLnN0YXRfbWF4cHRkcyk7CisJc2VxX3ByaW50ZihzLCAibWF4ICMgcHRkcyBpbiBJU1RMIGZpZm86ICVkXG4iLAorCQkgICBtYXgoaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbMF0gLnN0YXRfbWF4cHRkcywKKwkJICAgICAgIGlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlWzFdIC5zdGF0X21heHB0ZHMpKTsKKworCS8qIEZJWE1FOiBkb24ndCBzaG93IHRoZSBmb2xsb3dpbmcgaW4gc3VzcGVuZGVkIHN0YXRlICovCisJc3Bpbl9sb2NrX2lycSgmaXNwMTM2Ml9oY2QtPmxvY2spOworCisJZHVtcF9pcnEocywgImhjX2lycV9lbmFibGUiLCBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIpKTsKKwlkdW1wX2lycShzLCAiaGNfaXJxX3N0YXR1cyIsIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkpOworCWR1bXBfaW50KHMsICJvaGNpX2ludF9lbmFibGUiLCBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5URU5CKSk7CisJZHVtcF9pbnQocywgIm9oY2lfaW50X3N0YXR1cyIsIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRTVEFUKSk7CisJZHVtcF9jdHJsKHMsICJvaGNpX2NvbnRyb2wiLCBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCkpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9JU1AxMzYyX0lSUVM7IGkrKykKKwkJaWYgKGlzcDEzNjJfaGNkLT5pcnFfc3RhdFtpXSkKKwkJCXNlcV9wcmludGYocywgIiUtMTVzOiAlZFxuIiwKKwkJCQkgICBJU1AxMzYyX0lOVF9OQU1FKGkpLCBpc3AxMzYyX2hjZC0+aXJxX3N0YXRbaV0pOworCisJZHVtcF9yZWdzKHMsIGlzcDEzNjJfaGNkKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVwLCAmaXNwMTM2Ml9oY2QtPmFzeW5jLCBzY2hlZHVsZSkgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisKKwkJc2VxX3ByaW50ZihzLCAiJXAsIGVwJWQlcywgbWF4cGFja2V0ICVkOlxuIiwgZXAsIGVwLT5lcG51bSwKKwkJCSAgICh7CisJCQkJICAgY2hhciAqczsKKwkJCQkgICBzd2l0Y2ggKGVwLT5uZXh0cGlkKSB7CisJCQkJICAgY2FzZSBVU0JfUElEX0lOOgorCQkJCQkgICBzID0gImluIjsKKwkJCQkJICAgYnJlYWs7CisJCQkJICAgY2FzZSBVU0JfUElEX09VVDoKKwkJCQkJICAgcyA9ICJvdXQiOworCQkJCQkgICBicmVhazsKKwkJCQkgICBjYXNlIFVTQl9QSURfU0VUVVA6CisJCQkJCSAgIHMgPSAic2V0dXAiOworCQkJCQkgICBicmVhazsKKwkJCQkgICBjYXNlIFVTQl9QSURfQUNLOgorCQkJCQkgICBzID0gInN0YXR1cyI7CisJCQkJCSAgIGJyZWFrOworCQkJCSAgIGRlZmF1bHQ6CisJCQkJCSAgIHMgPSAiPyI7CisJCQkJCSAgIGJyZWFrOworCQkJCSAgIH07CisJCQkJICAgczt9KSwgZXAtPm1heHBhY2tldCkgOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVyYiwgJmVwLT5oZXAtPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQkJc2VxX3ByaW50ZihzLCAiICB1cmIlcCwgJWQvJWRcbiIsIHVyYiwKKwkJCQkgICB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJfQorCX0KKwlpZiAoIWxpc3RfZW1wdHkoJmlzcDEzNjJfaGNkLT5hc3luYykpCisJCXNlcV9wcmludGYocywgIlxuIik7CisJZHVtcF9wdGRfcXVldWUoJmlzcDEzNjJfaGNkLT5hdGxfcXVldWUpOworCisJc2VxX3ByaW50ZihzLCAicGVyaW9kaWMgc2l6ZT0gJWRcbiIsIFBFUklPRElDX1NJWkUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlcCwgJmlzcDEzNjJfaGNkLT5wZXJpb2RpYywgc2NoZWR1bGUpIHsKKwkJc2VxX3ByaW50ZihzLCAiYnJhbmNoOiUyZCBsb2FkOiUzZCBQVERbJWRdICQlMDR4OlxuIiwgZXAtPmJyYW5jaCwKKwkJCSAgIGlzcDEzNjJfaGNkLT5sb2FkW2VwLT5icmFuY2hdLCBlcC0+cHRkX2luZGV4LCBlcC0+cHRkX29mZnNldCk7CisKKwkJc2VxX3ByaW50ZihzLCAiICAgJWQvJXAgKCVzZGV2JWQgZXAlZCVzIG1heCAlZClcbiIsCisJCQkgICBlcC0+aW50ZXJ2YWwsIGVwLAorCQkJICAgKGVwLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgPyAiIiA6ICJscyAiLAorCQkJICAgZXAtPnVkZXYtPmRldm51bSwgZXAtPmVwbnVtLAorCQkJICAgKGVwLT5lcG51bSA9PSAwKSA/ICIiIDoKKwkJCSAgICgoZXAtPm5leHRwaWQgPT0gVVNCX1BJRF9JTikgPworCQkJICAgICJpbiIgOiAib3V0IiksIGVwLT5tYXhwYWNrZXQpOworCX0KKwlkdW1wX3B0ZF9xdWV1ZSgmaXNwMTM2Ml9oY2QtPmludGxfcXVldWUpOworCisJc2VxX3ByaW50ZihzLCAiSVNPOlxuIik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVwLCAmaXNwMTM2Ml9oY2QtPmlzb2MsIHNjaGVkdWxlKSB7CisJCXNlcV9wcmludGYocywgIiAgICVkLyVwICglc2RldiVkIGVwJWQlcyBtYXggJWQpXG4iLAorCQkJICAgZXAtPmludGVydmFsLCBlcCwKKwkJCSAgIChlcC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpID8gIiIgOiAibHMgIiwKKwkJCSAgIGVwLT51ZGV2LT5kZXZudW0sIGVwLT5lcG51bSwKKwkJCSAgIChlcC0+ZXBudW0gPT0gMCkgPyAiIiA6CisJCQkgICAoKGVwLT5uZXh0cGlkID09IFVTQl9QSURfSU4pID8KKwkJCSAgICAiaW4iIDogIm91dCIpLCBlcC0+bWF4cGFja2V0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJmlzcDEzNjJfaGNkLT5sb2NrKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19pc3AxMzYyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfaXNwMTM2Ml9zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vcHMgPSB7CisJLm9wZW4gPSBwcm9jX2lzcDEzNjJfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKy8qIGV4cGVjdCBqdXN0IG9uZSBpc3AxMzYyX2hjZCBwZXIgc3lzdGVtICovCitzdGF0aWMgY29uc3QgY2hhciBwcm9jX2ZpbGVuYW1lW10gPSAiZHJpdmVyL2lzcDEzNjIiOworCitzdGF0aWMgdm9pZCBjcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCisJcGRlID0gY3JlYXRlX3Byb2NfZW50cnkocHJvY19maWxlbmFtZSwgMCwgTlVMTCk7CisJaWYgKHBkZSA9PSBOVUxMKSB7CisJCXByX3dhcm5pbmcoIiVzOiBGYWlsZWQgdG8gY3JlYXRlIGRlYnVnIGZpbGUgJyVzJ1xuIiwgX19mdW5jX18sIHByb2NfZmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCisJcGRlLT5wcm9jX2ZvcHMgPSAmcHJvY19vcHM7CisJcGRlLT5kYXRhID0gaXNwMTM2Ml9oY2Q7CisJaXNwMTM2Ml9oY2QtPnBkZSA9IHBkZTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGUoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlpZiAoaXNwMTM2Ml9oY2QtPnBkZSkKKwkJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19maWxlbmFtZSwgMCk7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBpc3AxMzYyX3N3X3Jlc2V0KHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QpCit7CisJaW50IHRtcCA9IDIwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDU1dSRVMsIEhDU1dSRVNfTUFHSUMpOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ01EU1RBVCwgT0hDSV9IQ1IpOworCXdoaWxlICgtLXRtcCkgeworCQltZGVsYXkoMSk7CisJCWlmICghKGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENDTURTVEFUKSAmIE9IQ0lfSENSKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoIXRtcCkKKwkJcHJfZXJyKCJTb2Z0d2FyZSByZXNldCB0aW1lb3V0XG4iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGlzcDEzNjJfbWVtX2NvbmZpZyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0b3RhbDsKKwl1MTYgaXN0bF9zaXplID0gSVNQMTM2Ml9JU1RMX0JVRlNJWkU7CisJdTE2IGludGxfYmxrc2l6ZSA9IElTUDEzNjJfSU5UTF9CTEtTSVpFICsgUFREX0hFQURFUl9TSVpFOworCXUxNiBpbnRsX3NpemUgPSBJU1AxMzYyX0lOVExfQlVGRkVSUyAqIGludGxfYmxrc2l6ZTsKKwl1MTYgYXRsX2Jsa3NpemUgPSBJU1AxMzYyX0FUTF9CTEtTSVpFICsgUFREX0hFQURFUl9TSVpFOworCXUxNiBhdGxfYnVmZmVycyA9IChJU1AxMzYyX0JVRl9TSVpFIC0gKGlzdGxfc2l6ZSArIGludGxfc2l6ZSkpIC8gYXRsX2Jsa3NpemU7CisJdTE2IGF0bF9zaXplOworCWludCBpOworCisJV0FSTl9PTihpc3RsX3NpemUgJiAzKTsKKwlXQVJOX09OKGF0bF9ibGtzaXplICYgMyk7CisJV0FSTl9PTihpbnRsX2Jsa3NpemUgJiAzKTsKKwlXQVJOX09OKGF0bF9ibGtzaXplIDwgUFREX0hFQURFUl9TSVpFKTsKKwlXQVJOX09OKGludGxfYmxrc2l6ZSA8IFBURF9IRUFERVJfU0laRSk7CisKKwlCVUdfT04oKHVuc2lnbmVkKUlTUDEzNjJfSU5UTF9CVUZGRVJTID4gMzIpOworCWlmIChhdGxfYnVmZmVycyA+IDMyKQorCQlhdGxfYnVmZmVycyA9IDMyOworCWF0bF9zaXplID0gYXRsX2J1ZmZlcnMgKiBhdGxfYmxrc2l6ZTsKKwl0b3RhbCA9IGF0bF9zaXplICsgaW50bF9zaXplICsgaXN0bF9zaXplOworCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiSVNQMTM2MiBNZW1vcnkgdXNhZ2U6XG4iKTsKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSVNUTDogICAgMiAqICU0ZDogICAgICU0ZCBAICQlMDR4OiQlMDR4XG4iLAorCQkgaXN0bF9zaXplIC8gMiwgaXN0bF9zaXplLCAwLCBpc3RsX3NpemUgLyAyKTsKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSU5UTDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCQkgSVNQMTM2Ml9JTlRMX0JVRkZFUlMsIGludGxfYmxrc2l6ZSAtIFBURF9IRUFERVJfU0laRSwKKwkJIGludGxfc2l6ZSwgaXN0bF9zaXplKTsKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgQVRMIDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCQkgYXRsX2J1ZmZlcnMsIGF0bF9ibGtzaXplIC0gUFREX0hFQURFUl9TSVpFLAorCQkgYXRsX3NpemUsIGlzdGxfc2l6ZSArIGludGxfc2l6ZSk7CisJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIFVTRUQvRlJFRTogICAlNGQgICAgICAlNGRcbiIsIHRvdGFsLAorCQkgSVNQMTM2Ml9CVUZfU0laRSAtIHRvdGFsKTsKKworCWlmICh0b3RhbCA+IElTUDEzNjJfQlVGX1NJWkUpIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgIiVzOiBNZW1vcnkgcmVxdWVzdGVkOiAlZCwgYXZhaWxhYmxlICVkXG4iLAorCQkJX19mdW5jX18sIHRvdGFsLCBJU1AxMzYyX0JVRl9TSVpFKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdG90YWwgPSBpc3RsX3NpemUgKyBpbnRsX3NpemUgKyBhdGxfc2l6ZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0uYnVmX3N0YXJ0ID0gaSAqIGlzdGxfc2l6ZSAvIDIsCisJCWlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlW2ldLmJ1Zl9zaXplID0gaXN0bF9zaXplIC8gMjsKKwkJaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0uYmxrX3NpemUgPSA0OworCQlJTklUX0xJU1RfSEVBRCgmaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0uYWN0aXZlKTsKKwkJc25wcmludGYoaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0ubmFtZSwKKwkJCSBzaXplb2YoaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0ubmFtZSksICJJU1RMJWQiLCBpKTsKKwkJREJHKDMsICIlczogJTVzIGJ1ZiAkJTA0eCAlZFxuIiwgX19mdW5jX18sCisJCSAgICAgaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0ubmFtZSwKKwkJICAgICBpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5idWZfc3RhcnQsCisJCSAgICAgaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0uYnVmX3NpemUpOworCX0KKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0lTVExCVUZTWiwgaXN0bF9zaXplIC8gMik7CisKKwlpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfc3RhcnQgPSBpc3RsX3NpemU7CisJaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYnVmX3NpemUgPSBpbnRsX3NpemU7CisJaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYnVmX2NvdW50ID0gSVNQMTM2Ml9JTlRMX0JVRkZFUlM7CisJaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYmxrX3NpemUgPSBpbnRsX2Jsa3NpemU7CisJaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYnVmX2F2YWlsID0gaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYnVmX2NvdW50OworCWlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLnNraXBfbWFwID0gfjA7CisJSU5JVF9MSVNUX0hFQUQoJmlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLmFjdGl2ZSk7CisKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0lOVExCVUZTWiwKKwkJCSAgICBpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfc2l6ZSk7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSENJTlRMQkxLU1osCisJCQkgICAgaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYmxrX3NpemUgLSBQVERfSEVBREVSX1NJWkUpOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTFNLSVAsIH4wKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExMQVNULAorCQkJICAgIDEgPDwgKElTUDEzNjJfSU5UTF9CVUZGRVJTIC0gMSkpOworCisJaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfc3RhcnQgPSBpc3RsX3NpemUgKyBpbnRsX3NpemU7CisJaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfc2l6ZSA9IGF0bF9zaXplOworCWlzcDEzNjJfaGNkLT5hdGxfcXVldWUuYnVmX2NvdW50ID0gYXRsX2J1ZmZlcnM7CisJaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5ibGtfc2l6ZSA9IGF0bF9ibGtzaXplOworCWlzcDEzNjJfaGNkLT5hdGxfcXVldWUuYnVmX2F2YWlsID0gaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfY291bnQ7CisJaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5za2lwX21hcCA9IH4wOworCUlOSVRfTElTVF9IRUFEKCZpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmFjdGl2ZSk7CisKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0FUTEJVRlNaLAorCQkJICAgIGlzcDEzNjJfaGNkLT5hdGxfcXVldWUuYnVmX3NpemUpOworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQVRMQkxLU1osCisJCQkgICAgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5ibGtfc2l6ZSAtIFBURF9IRUFERVJfU0laRSk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENBVExTS0lQLCB+MCk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENBVExMQVNULAorCQkJICAgIDEgPDwgKGF0bF9idWZmZXJzIC0gMSkpOworCisJc25wcmludGYoaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5uYW1lLAorCQkgc2l6ZW9mKGlzcDEzNjJfaGNkLT5hdGxfcXVldWUubmFtZSksICJBVEwiKTsKKwlzbnByaW50Zihpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5uYW1lLAorCQkgc2l6ZW9mKGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLm5hbWUpLCAiSU5UTCIpOworCURCRygzLCAiJXM6ICU1cyBidWYgJCUwNHggJTJkICogJTRkID0gJTRkXG4iLCBfX2Z1bmNfXywKKwkgICAgIGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLm5hbWUsCisJICAgICBpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfc3RhcnQsCisJICAgICBJU1AxMzYyX0lOVExfQlVGRkVSUywgaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYmxrX3NpemUsCisJICAgICBpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfc2l6ZSk7CisJREJHKDMsICIlczogJTVzIGJ1ZiAkJTA0eCAlMmQgKiAlNGQgPSAlNGRcbiIsIF9fZnVuY19fLAorCSAgICAgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5uYW1lLAorCSAgICAgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfc3RhcnQsCisJICAgICBhdGxfYnVmZmVycywgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5ibGtfc2l6ZSwKKwkgICAgIGlzcDEzNjJfaGNkLT5hdGxfcXVldWUuYnVmX3NpemUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzcDEzNjJfaGNfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJdW5zaWduZWQgbG9uZyB0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDEwMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjbGtyZHkgPSAwOworCisJcHJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoaXNwMTM2Ml9oY2QtPmJvYXJkICYmIGlzcDEzNjJfaGNkLT5ib2FyZC0+cmVzZXQpIHsKKwkJaXNwMTM2Ml9oY2QtPmJvYXJkLT5yZXNldChoY2QtPnNlbGYuY29udHJvbGxlciwgMSk7CisJCW1zbGVlcCgyMCk7CisJCWlmIChpc3AxMzYyX2hjZC0+Ym9hcmQtPmNsb2NrKQorCQkJaXNwMTM2Ml9oY2QtPmJvYXJkLT5jbG9jayhoY2QtPnNlbGYuY29udHJvbGxlciwgMSk7CisJCWlzcDEzNjJfaGNkLT5ib2FyZC0+cmVzZXQoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIDApOworCX0gZWxzZQorCQlpc3AxMzYyX3N3X3Jlc2V0KGlzcDEzNjJfaGNkKTsKKworCS8qIGNoaXAgaGFzIGJlZW4gcmVzZXQuIEZpcnN0IHdlIG5lZWQgdG8gc2VlIGEgY2xvY2sgKi8KKwl0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisJd2hpbGUgKCFjbGtyZHkgJiYgdGltZV9iZWZvcmVfZXEoamlmZmllcywgdCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCWNsa3JkeSA9IGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0NMS1JEWTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFjbGtyZHkpCisJCQltc2xlZXAoNCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9DTEtSRFkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJaWYgKCFjbGtyZHkpIHsKKwkJcHJfZXJyKCJDbG9jayBub3QgcmVhZHkgYWZ0ZXIgJWx1bXNcbiIsIHRpbWVvdXQpOworCQlyZXQgPSAtRU5PREVWOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX2hjX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOworCisJcHJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlkZWxfdGltZXJfc3luYygmaGNkLT5yaF90aW1lcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIsIDApOworCisJLyogU3dpdGNoIG9mZiBwb3dlciBmb3IgYWxsIHBvcnRzICovCisJdG1wID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIREVTQ0EpOworCXRtcCAmPSB+KFJIX0FfTlBTIHwgUkhfQV9QU00pOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQSwgdG1wKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTLCBSSF9IU19MUFMpOworCisJLyogUmVzZXQgdGhlIGNoaXAgKi8KKwlpZiAoaXNwMTM2Ml9oY2QtPmJvYXJkICYmIGlzcDEzNjJfaGNkLT5ib2FyZC0+cmVzZXQpCisJCWlzcDEzNjJfaGNkLT5ib2FyZC0+cmVzZXQoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIDEpOworCWVsc2UKKwkJaXNwMTM2Ml9zd19yZXNldChpc3AxMzYyX2hjZCk7CisKKwlpZiAoaXNwMTM2Ml9oY2QtPmJvYXJkICYmIGlzcDEzNjJfaGNkLT5ib2FyZC0+Y2xvY2spCisJCWlzcDEzNjJfaGNkLT5ib2FyZC0+Y2xvY2soaGNkLT5zZWxmLmNvbnRyb2xsZXIsIDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENISVBfQlVGRkVSX1RFU1QKK3N0YXRpYyBpbnQgaXNwMTM2Ml9jaGlwX3Rlc3Qoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MTYgKnJlZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVmID0ga21hbGxvYygyICogSVNQMTM2Ml9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlZikgeworCQlpbnQgb2Zmc2V0OworCQl1MTYgKnRzdCA9ICZyZWZbSVNQMTM2Ml9CVUZfU0laRSAvIDJdOworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgSVNQMTM2Ml9CVUZfU0laRSAvIDI7IG9mZnNldCsrKSB7CisJCQlyZWZbb2Zmc2V0XSA9IH5vZmZzZXQ7CisJCQl0c3Rbb2Zmc2V0XSA9IG9mZnNldDsKKwkJfQorCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgNDsgb2Zmc2V0KyspIHsKKwkJCWludCBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQkJaXNwMTM2Ml93cml0ZV9idWZmZXIoaXNwMTM2Ml9oY2QsICh1OCAqKXJlZiArIG9mZnNldCwgMCwgaik7CisJCQkJaXNwMTM2Ml9yZWFkX2J1ZmZlcihpc3AxMzYyX2hjZCwgKHU4ICopdHN0ICsgb2Zmc2V0LCAwLCBqKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJCQkJaWYgKG1lbWNtcChyZWYsIHRzdCwgaikpIHsKKwkJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCQkJcHJfZXJyKCIlczogbWVtb3J5IGNoZWNrIHdpdGggJWQgYnl0ZSBvZmZzZXQgJWQgZmFpbGVkXG4iLAorCQkJCQkgICAgX19mdW5jX18sIGosIG9mZnNldCk7CisJCQkJCWR1bXBfZGF0YSgodTggKilyZWYgKyBvZmZzZXQsIGopOworCQkJCQlkdW1wX2RhdGEoKHU4ICopdHN0ICsgb2Zmc2V0LCBqKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJaXNwMTM2Ml93cml0ZV9idWZmZXIoaXNwMTM2Ml9oY2QsIHJlZiwgMCwgSVNQMTM2Ml9CVUZfU0laRSk7CisJCWlzcDEzNjJfcmVhZF9idWZmZXIoaXNwMTM2Ml9oY2QsIHRzdCwgMCwgSVNQMTM2Ml9CVUZfU0laRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKG1lbWNtcChyZWYsIHRzdCwgSVNQMTM2Ml9CVUZfU0laRSkpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlwcl9lcnIoIiVzOiBtZW1vcnkgY2hlY2sgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlkdW1wX2RhdGEoKHU4ICopdHN0LCBJU1AxMzYyX0JVRl9TSVpFIC8gMik7CisJCX0KKworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IDI1Njsgb2Zmc2V0KyspIHsKKwkJCWludCB0ZXN0X3NpemUgPSAwOworCisJCQl5aWVsZCgpOworCisJCQltZW1zZXQodHN0LCAwLCBJU1AxMzYyX0JVRl9TSVpFKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJaXNwMTM2Ml93cml0ZV9idWZmZXIoaXNwMTM2Ml9oY2QsIHRzdCwgMCwgSVNQMTM2Ml9CVUZfU0laRSk7CisJCQlpc3AxMzYyX3JlYWRfYnVmZmVyKGlzcDEzNjJfaGNkLCB0c3QsIDAsIElTUDEzNjJfQlVGX1NJWkUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCWlmIChtZW1jbXAodHN0LCB0c3QgKyAoSVNQMTM2Ml9CVUZfU0laRSAvICgyICogc2l6ZW9mKCp0c3QpKSksCisJCQkJICAgSVNQMTM2Ml9CVUZfU0laRSAvIDIpKSB7CisJCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGNsZWFyIGJ1ZmZlclxuIiwgX19mdW5jX18pOworCQkJCWR1bXBfZGF0YSgodTggKil0c3QsIElTUDEzNjJfQlVGX1NJWkUpOworCQkJCWJyZWFrOworCQkJfQorCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQlpc3AxMzYyX3dyaXRlX2J1ZmZlcihpc3AxMzYyX2hjZCwgcmVmLCBvZmZzZXQgKiAyLCBQVERfSEVBREVSX1NJWkUpOworCQkJaXNwMTM2Ml93cml0ZV9idWZmZXIoaXNwMTM2Ml9oY2QsIHJlZiArIFBURF9IRUFERVJfU0laRSAvIHNpemVvZigqcmVmKSwKKwkJCQkJICAgICBvZmZzZXQgKiAyICsgUFREX0hFQURFUl9TSVpFLCB0ZXN0X3NpemUpOworCQkJaXNwMTM2Ml9yZWFkX2J1ZmZlcihpc3AxMzYyX2hjZCwgdHN0LCBvZmZzZXQgKiAyLAorCQkJCQkgICAgUFREX0hFQURFUl9TSVpFICsgdGVzdF9zaXplKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQlpZiAobWVtY21wKHJlZiwgdHN0LCBQVERfSEVBREVSX1NJWkUgKyB0ZXN0X3NpemUpKSB7CisJCQkJZHVtcF9kYXRhKCgodTggKilyZWYpICsgb2Zmc2V0LCBQVERfSEVBREVSX1NJWkUgKyB0ZXN0X3NpemUpOworCQkJCWR1bXBfZGF0YSgodTggKil0c3QsIFBURF9IRUFERVJfU0laRSArIHRlc3Rfc2l6ZSk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQkJaXNwMTM2Ml9yZWFkX2J1ZmZlcihpc3AxMzYyX2hjZCwgdHN0LCBvZmZzZXQgKiAyLAorCQkJCQkJICAgIFBURF9IRUFERVJfU0laRSArIHRlc3Rfc2l6ZSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCQlpZiAobWVtY21wKHJlZiwgdHN0LCBQVERfSEVBREVSX1NJWkUgKyB0ZXN0X3NpemUpKSB7CisJCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJCXByX2VycigiJXM6IG1lbW9yeSBjaGVjayB3aXRoIG9mZnNldCAlMDJ4IGZhaWxlZFxuIiwKKwkJCQkJICAgIF9fZnVuY19fLCBvZmZzZXQpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJcHJfd2FybmluZygiJXM6IG1lbW9yeSBjaGVjayB3aXRoIG9mZnNldCAlMDJ4IG9rIGFmdGVyIHNlY29uZCByZWFkXG4iLAorCQkJCSAgICAgX19mdW5jX18sIG9mZnNldCk7CisJCQl9CisJCX0KKwkJa2ZyZWUocmVmKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGlzcDEzNjJfaGNfc3RhcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwlzdHJ1Y3QgaXNwMTM2Ml9wbGF0Zm9ybV9kYXRhICpib2FyZCA9IGlzcDEzNjJfaGNkLT5ib2FyZDsKKwl1MTYgaHdjZmc7CisJdTE2IGNoaXBpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwljaGlwaWQgPSBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQ0hJUElEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKChjaGlwaWQgJiBIQ0NISVBJRF9NQVNLKSAhPSBIQ0NISVBJRF9NQUdJQykgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIGNoaXAgSUQgJTA0eFxuIiwgX19mdW5jX18sIGNoaXBpZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworI2lmZGVmIENISVBfQlVGRkVSX1RFU1QKKwlyZXQgPSBpc3AxMzYyX2NoaXBfdGVzdChpc3AxMzYyX2hjZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FTk9ERVY7CisjZW5kaWYKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHQgc291cmNlcyAqLworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQsIDB4ZmYpOworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIsIDApOworCisJLyogSFcgY29uZiAqLworCWh3Y2ZnID0gSENIV0NGR19JTlRfRU5BQkxFIHwgSENIV0NGR19EQldJRFRIKDEpOworCWlmIChib2FyZC0+c2VsMTVLcmVzKQorCQlod2NmZyB8PSBIQ0hXQ0ZHX1BVTExET1dOX0RTMiB8CisJCQkoKE1BWF9ST09UX1BPUlRTID4gMSkgPyBIQ0hXQ0ZHX1BVTExET1dOX0RTMSA6IDApOworCWlmIChib2FyZC0+Y2xrbm90c3RvcCkKKwkJaHdjZmcgfD0gSENIV0NGR19DTEtOT1RTVE9QOworCWlmIChib2FyZC0+b2NfZW5hYmxlKQorCQlod2NmZyB8PSBIQ0hXQ0ZHX0FOQUxPR19PQzsKKwlpZiAoYm9hcmQtPmludF9hY3RfaGlnaCkKKwkJaHdjZmcgfD0gSENIV0NGR19JTlRfUE9MOworCWlmIChib2FyZC0+aW50X2VkZ2VfdHJpZ2dlcmVkKQorCQlod2NmZyB8PSBIQ0hXQ0ZHX0lOVF9UUklHR0VSOworCWlmIChib2FyZC0+ZHJlcV9hY3RfaGlnaCkKKwkJaHdjZmcgfD0gSENIV0NGR19EUkVRX1BPTDsKKwlpZiAoYm9hcmQtPmRhY2tfYWN0X2hpZ2gpCisJCWh3Y2ZnIHw9IEhDSFdDRkdfREFDS19QT0w7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSENIV0NGRywgaHdjZmcpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDSFdDRkcpOworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDRE1BQ0ZHLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJcmV0ID0gaXNwMTM2Ml9tZW1fY29uZmlnKGhjZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJLyogUm9vdCBodWIgY29uZiAqLworCWlzcDEzNjJfaGNkLT5yaGRlc2NhID0gMDsKKwlpZiAoYm9hcmQtPm5vX3Bvd2VyX3N3aXRjaGluZykKKwkJaXNwMTM2Ml9oY2QtPnJoZGVzY2EgfD0gUkhfQV9OUFM7CisJaWYgKGJvYXJkLT5wb3dlcl9zd2l0Y2hpbmdfbW9kZSkKKwkJaXNwMTM2Ml9oY2QtPnJoZGVzY2EgfD0gUkhfQV9QU007CisJaWYgKGJvYXJkLT5wb3RwZykKKwkJaXNwMTM2Ml9oY2QtPnJoZGVzY2EgfD0gKGJvYXJkLT5wb3RwZyA8PCAyNCkgJiBSSF9BX1BPVFBHVDsKKwllbHNlCisJCWlzcDEzNjJfaGNkLT5yaGRlc2NhIHw9ICgyNSA8PCAyNCkgJiBSSF9BX1BPVFBHVDsKKworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQSwgaXNwMTM2Ml9oY2QtPnJoZGVzY2EgJiB+UkhfQV9PQ1BNKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIREVTQ0EsIGlzcDEzNjJfaGNkLT5yaGRlc2NhIHwgUkhfQV9PQ1BNKTsKKwlpc3AxMzYyX2hjZC0+cmhkZXNjYSA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSERFU0NBKTsKKworCWlzcDEzNjJfaGNkLT5yaGRlc2NiID0gUkhfQl9QUENNOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQiwgaXNwMTM2Ml9oY2QtPnJoZGVzY2IpOworCWlzcDEzNjJfaGNkLT5yaGRlc2NiID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIREVTQ0IpOworCisJaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0ZNSU5UVkwpOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRk1JTlRWTCwgKEZTTVAoRkkpIDw8IDE2KSB8IEZJKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0xTVEhSRVNILCBMU1RIUkVTSCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgPSBPSENJX1VTQl9PUEVSOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJLyogU2V0IHVwIGludGVycnVwdHMgKi8KKwlpc3AxMzYyX2hjZC0+aW50ZW5iID0gT0hDSV9JTlRSX01JRSB8IE9IQ0lfSU5UUl9SSFNDIHwgT0hDSV9JTlRSX1VFOworCWlzcDEzNjJfaGNkLT5pbnRlbmIgfD0gT0hDSV9JTlRSX1JEOworCWlzcDEzNjJfaGNkLT5pcnFlbmIgPSBIQ3VQSU5UX09QUiB8IEhDdVBJTlRfU1VTUDsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVEVOQiwgaXNwMTM2Ml9oY2QtPmludGVuYik7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQiwgaXNwMTM2Ml9oY2QtPmlycWVuYik7CisKKwkvKiBHbyBvcGVyYXRpb25hbCAqLworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCwgaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wpOworCS8qIGVuYWJsZSBnbG9iYWwgcG93ZXIgKi8KKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTLCBSSF9IU19MUFNDIHwgUkhfSFNfRFJXRSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIGlzcDEzNjJfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJJU1AxMzYyIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IGlzcDEzNjJfaGNkKSwKKworCS5pcnEgPQkJCWlzcDEzNjJfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLnJlc2V0ID0JCWlzcDEzNjJfaGNfcmVzZXQsCisJLnN0YXJ0ID0JCWlzcDEzNjJfaGNfc3RhcnQsCisJLnN0b3AgPQkJCWlzcDEzNjJfaGNfc3RvcCwKKworCS51cmJfZW5xdWV1ZSA9CQlpc3AxMzYyX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlpc3AxMzYyX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0JaXNwMTM2Ml9lbmRwb2ludF9kaXNhYmxlLAorCisJLmdldF9mcmFtZV9udW1iZXIgPQlpc3AxMzYyX2dldF9mcmFtZSwKKworCS5odWJfc3RhdHVzX2RhdGEgPQlpc3AxMzYyX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJaXNwMTM2Ml9odWJfY29udHJvbCwKKwkuYnVzX3N1c3BlbmQgPQkJaXNwMTM2Ml9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlpc3AxMzYyX2J1c19yZXN1bWUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIHJlc291cmNlX2xlbihyKSAoKChyKS0+ZW5kIC0gKHIpLT5zdGFydCkgKyAxKQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBpc3AxMzYyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlyZW1vdmVfZGVidWdfZmlsZShpc3AxMzYyX2hjZCk7CisJREJHKDAsICIlczogUmVtb3ZpbmcgSENEXG4iLCBfX2Z1bmNfXyk7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKworCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLAorCSAgICAodTMyKWlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7CisJaW91bm1hcChpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworCisJREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJTA4eFxuIiwgX19mdW5jX18sCisJICAgICh1MzIpaXNwMTM2Ml9oY2QtPmFkZHJfcmVnKTsKKwlpb3VubWFwKGlzcDEzNjJfaGNkLT5hZGRyX3JlZyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCURCRygwLCAiJXM6IHJlbGVhc2UgbWVtX3JlZ2lvbjogJTA4bHhcbiIsIF9fZnVuY19fLCAobG9uZyB1bnNpZ25lZCBpbnQpcmVzLT5zdGFydCk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX2xlbihyZXMpKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJREJHKDAsICIlczogcmVsZWFzZSBtZW1fcmVnaW9uOiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClyZXMtPnN0YXJ0KTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2VfbGVuKHJlcykpOworCisJREJHKDAsICIlczogcHV0X2hjZFxuIiwgX19mdW5jX18pOworCXVzYl9wdXRfaGNkKGhjZCk7CisJREJHKDAsICIlczogRG9uZVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlzcDEzNjJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2Q7CisJc3RydWN0IHJlc291cmNlICphZGRyLCAqZGF0YTsKKwl2b2lkIF9faW9tZW0gKmFkZHJfcmVnOworCXZvaWQgX19pb21lbSAqZGF0YV9yZWc7CisJaW50IGlycTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgZmlyc3QuICBib2FyZC1zcGVjaWZpYyBpbml0IGxvZ2ljIHNob3VsZAorCSAqIGhhdmUgaW5pdGlhbGl6ZWQgdGhpcyB0aGUgdGhyZWUgcmVzb3VyY2VzIGFuZCBwcm9iYWJseSBib2FyZAorCSAqIHNwZWNpZmljIHBsYXRmb3JtX2RhdGEuICB3ZSBkb24ndCBwcm9iZSBmb3IgSVJRcywgYW5kIGRvIG9ubHkKKwkgKiBtaW5pbWFsIHNhbml0eSBjaGVja2luZy4KKwkgKi8KKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyA8IDMpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKworCWRhdGEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWFkZHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFhZGRyIHx8ICFkYXRhIHx8IGlycSA8IDApIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKworI2lmZGVmIENPTkZJR19VU0JfSENEX0RNQQorCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKKwkJc3RydWN0IHJlc291cmNlICpkbWFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAyKTsKKworCQlpZiAoIWRtYV9yZXMpIHsKKwkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycjE7CisJCX0KKwkJaXNwMTM2Ml9oY2QtPmRhdGFfZG1hID0gZG1hX3Jlcy0+c3RhcnQ7CisJCWlzcDEzNjJfaGNkLT5tYXhfZG1hX3NpemUgPSByZXNvdXJjZV9sZW4oZG1hX3Jlcyk7CisJfQorI2Vsc2UKKwlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7CisJCURCRygxLCAid29uJ3QgZG8gRE1BIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMTsKKwl9CisjZW5kaWYKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGFkZHItPnN0YXJ0LCByZXNvdXJjZV9sZW4oYWRkciksIGhjZF9uYW1lKSkgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisJYWRkcl9yZWcgPSBpb3JlbWFwKGFkZHItPnN0YXJ0LCByZXNvdXJjZV9sZW4oYWRkcikpOworCWlmIChhZGRyX3JlZyA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkYXRhLT5zdGFydCwgcmVzb3VyY2VfbGVuKGRhdGEpLCBoY2RfbmFtZSkpIHsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjM7CisJfQorCWRhdGFfcmVnID0gaW9yZW1hcChkYXRhLT5zdGFydCwgcmVzb3VyY2VfbGVuKGRhdGEpKTsKKwlpZiAoZGF0YV9yZWcgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjQ7CisJfQorCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGNkICovCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmlzcDEzNjJfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFoY2QpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnI1OworCX0KKwloY2QtPnJzcmNfc3RhcnQgPSBkYXRhLT5zdGFydDsKKwlpc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCWlzcDEzNjJfaGNkLT5kYXRhX3JlZyA9IGRhdGFfcmVnOworCWlzcDEzNjJfaGNkLT5hZGRyX3JlZyA9IGFkZHJfcmVnOworCisJaXNwMTM2Ml9oY2QtPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCXNwaW5fbG9ja19pbml0KCZpc3AxMzYyX2hjZC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmlzcDEzNjJfaGNkLT5hc3luYyk7CisJSU5JVF9MSVNUX0hFQUQoJmlzcDEzNjJfaGNkLT5wZXJpb2RpYyk7CisJSU5JVF9MSVNUX0hFQUQoJmlzcDEzNjJfaGNkLT5pc29jKTsKKwlJTklUX0xJU1RfSEVBRCgmaXNwMTM2Ml9oY2QtPnJlbW92ZV9saXN0KTsKKwlpc3AxMzYyX2hjZC0+Ym9hcmQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKyNpZiBVU0VfUExBVEZPUk1fREVMQVkKKwlpZiAoIWlzcDEzNjJfaGNkLT5ib2FyZC0+ZGVsYXkpIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgIk5vIHBsYXRmb3JtIGRlbGF5IGZ1bmN0aW9uIGdpdmVuXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnI2OworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSTQorCWlmIChpc3AxMzYyX2hjZC0+Ym9hcmQpCisJCXNldF9pcnFfdHlwZShpcnEsIGlzcDEzNjJfaGNkLT5ib2FyZC0+aW50X2FjdF9oaWdoID8gSVJRVF9SSVNJTkcgOiBJUlFUX0ZBTExJTkcpOworI2VuZGlmCisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CisJaWYgKHJldHZhbCAhPSAwKQorCQlnb3RvIGVycjY7CisJcHJfaW5mbygiJXMsIGlycSAlZFxuIiwgaGNkLT5wcm9kdWN0X2Rlc2MsIGlycSk7CisKKwljcmVhdGVfZGVidWdfZmlsZShpc3AxMzYyX2hjZCk7CisKKwlyZXR1cm4gMDsKKworIGVycjY6CisJREJHKDAsICIlczogRnJlZWluZyBkZXYgJTA4eFxuIiwgX19mdW5jX18sICh1MzIpaXNwMTM2Ml9oY2QpOworCXVzYl9wdXRfaGNkKGhjZCk7CisgZXJyNToKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilkYXRhX3JlZyk7CisJaW91bm1hcChkYXRhX3JlZyk7CisgZXJyNDoKKwlEQkcoMCwgIiVzOiBSZWxlYXNpbmcgbWVtIHJlZ2lvbiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClkYXRhLT5zdGFydCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdGEtPnN0YXJ0LCByZXNvdXJjZV9sZW4oZGF0YSkpOworIGVycjM6CisJREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJTA4eFxuIiwgX19mdW5jX18sICh1MzIpYWRkcl9yZWcpOworCWlvdW5tYXAoYWRkcl9yZWcpOworIGVycjI6CisJREJHKDAsICIlczogUmVsZWFzaW5nIG1lbSByZWdpb24gJTA4bHhcbiIsIF9fZnVuY19fLCAobG9uZyB1bnNpZ25lZCBpbnQpYWRkci0+c3RhcnQpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihhZGRyLT5zdGFydCwgcmVzb3VyY2VfbGVuKGFkZHIpKTsKKyBlcnIxOgorCXByX2VycigiJXM6IGluaXQgZXJyb3IsICVkXG4iLCBfX2Z1bmNfXywgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZglDT05GSUdfUE0KK3N0YXRpYyBpbnQgaXNwMTM2Ml9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwlEQkcoMCwgIiVzOiBTdXNwZW5kaW5nIGRldmljZVxuIiwgX19mdW5jX18pOworCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgeworCQlEQkcoMCwgIiVzOiBTdXNwZW5kaW5nIHJvb3QgaHViXG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IGlzcDEzNjJfYnVzX3N1c3BlbmQoaGNkKTsKKwl9IGVsc2UgeworCQlEQkcoMCwgIiVzOiBTdXNwZW5kaW5nIFJIIHBvcnRzXG4iLCBfX2Z1bmNfXyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTLCBSSF9IU19MUFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCX0KKwlpZiAocmV0dmFsID09IDApCisJCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgaXNwMTM2Ml9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoMCwgIiVzOiBSZXN1bWluZ1xuIiwgX19mdW5jX18pOworCisJaWYgKHBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7CisJCURCRygwLCAiJXM6IFJlc3VtZSBSSCBwb3J0c1xuIiwgX19mdW5jX18pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSFNUQVRVUywgUkhfSFNfTFBTQyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisKKwlyZXR1cm4gaXNwMTM2Ml9idXNfcmVzdW1lKGlzcDEzNjJfaGNkX3RvX2hjZChpc3AxMzYyX2hjZCkpOworfQorI2Vsc2UKKyNkZWZpbmUJaXNwMTM2Ml9zdXNwZW5kCU5VTEwKKyNkZWZpbmUJaXNwMTM2Ml9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzcDEzNjJfZHJpdmVyID0geworCS5wcm9iZSA9IGlzcDEzNjJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlzcDEzNjJfcmVtb3ZlKSwKKworCS5zdXNwZW5kID0gaXNwMTM2Ml9zdXNwZW5kLAorCS5yZXN1bWUgPSBpc3AxMzYyX3Jlc3VtZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IChjaGFyICopaGNkX25hbWUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCBpc3AxMzYyX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCXByX2luZm8oImRyaXZlciAlcywgJXNcbiIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNwMTM2Ml9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoaXNwMTM2Ml9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGlzcDEzNjJfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpc3AxMzYyX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChpc3AxMzYyX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTYwZjYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLmgKQEAgLTAsMCArMSwxMDc5IEBACisvKgorICogSVNQMTM2MiBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogQ09QWVJJR0hUIChDKSBieSBMLiBXYXNzbWFubiA8TFdAS0FSTy1lbGVjdHJvbmljcy5kZT4KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogUGxhdGZvcm0gc3BlY2lmaWMgY29tcGlsZSB0aW1lIG9wdGlvbnMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfS0FSTykKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gva2Fyby5oPgorCisjZGVmaW5lIFVTRV8zMkJJVAkJMQorCisKKy8qIFRoZXNlIG9wdGlvbnMgYXJlIG11dHVhbGx5IGVjbHVzaXZlICovCisjZGVmaW5lIFVTRV9QTEFURk9STV9ERUxBWQkxCisjZGVmaW5lIFVTRV9OREVMQVkJCTAKKy8qCisgKiBNQVhfUk9PVF9QT1JUUzogTnVtYmVyIG9mIGRvd25zdHJlYW0gcG9ydHMKKyAqCisgKiBUaGUgY2hpcCBoYXMgdHdvIFVTQiBwb3J0cywgb25lIG9mIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkIGFzCisgKiBhbiBVU0IgZGV2aWNlIHBvcnQsIHNvIHRoZSB2YWx1ZSBvZiB0aGlzIGNvbnN0YW50IGlzIGltcGxlbWVudGF0aW9uCisgKiBzcGVjaWZpYy4KKyAqLworI2RlZmluZSBNQVhfUk9PVF9QT1JUUwkJMgorI2RlZmluZSBEVU1NWV9ERUxBWV9BQ0NFU1MgZG8ge30gd2hpbGUgKDApCisKKy8qIGluc2VydCBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3Igb3RoZXIgbWFjaGluZXMgaGVyZSAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfQkxBQ0tGSU4pCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2RlZmluZSBVU0VfMzJCSVQJCTAKKyNkZWZpbmUgTUFYX1JPT1RfUE9SVFMJCTIKKyNkZWZpbmUgVVNFX1BMQVRGT1JNX0RFTEFZCTAKKyNkZWZpbmUgVVNFX05ERUxBWQkJMQorCisjZGVmaW5lIERVTU1ZX0RFTEFZX0FDQ0VTUyBcCisJZG8geyBcCisJCWJmaW5fcmVhZDE2KEFTWU5DX0JBTkswX0JBU0UpOyBcCisJCWJmaW5fcmVhZDE2KEFTWU5DX0JBTkswX0JBU0UpOyBcCisJCWJmaW5fcmVhZDE2KEFTWU5DX0JBTkswX0JBU0UpOyBcCisJfSB3aGlsZSAoMCkKKworI3VuZGVmIGluc3cKKyN1bmRlZiBvdXRzdworCisjZGVmaW5lIGluc3cgIGRlbGF5ZWRfaW5zdworI2RlZmluZSBvdXRzdyAgZGVsYXllZF9vdXRzdworCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXllZF9vdXRzdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKKwl3aGlsZSAobGVuLS0pIHsKKwkJRFVNTVlfREVMQVlfQUNDRVNTOworCQlvdXR3KCpicCsrLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheWVkX2luc3codW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBzaG9ydCAqYnAgPSAodW5zaWduZWQgc2hvcnQgKilidWY7CisJd2hpbGUgKGxlbi0tKSB7CisJCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwkJKmJwKysgPSBpbncoKHZvaWQgKilhZGRyKTsKKwl9Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgTUFYX1JPT1RfUE9SVFMJCTIKKworI2RlZmluZSBVU0VfMzJCSVQJCTAKKworLyogVGhlc2Ugb3B0aW9ucyBhcmUgbXV0dWFsbHkgZWNsdXNpdmUgKi8KKyNkZWZpbmUgVVNFX1BMQVRGT1JNX0RFTEFZCTAKKyNkZWZpbmUgVVNFX05ERUxBWQkJMAorCisjZGVmaW5lIERVTU1ZX0RFTEFZX0FDQ0VTUyBkbyB7fSB3aGlsZSAoMCkKKworI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIFVTQl9SRVNFVF9XSURUSAkJCTUwCisjZGVmaW5lIE1BWF9YRkVSX1NJWkUJCQkxMDIzCisKKy8qIEJ1ZmZlciBzaXplcyAqLworI2RlZmluZSBJU1AxMzYyX0JVRl9TSVpFCQk0MDk2CisjZGVmaW5lIElTUDEzNjJfSVNUTF9CVUZTSVpFCQk1MTIKKyNkZWZpbmUgSVNQMTM2Ml9JTlRMX0JMS1NJWkUJCTY0CisjZGVmaW5lIElTUDEzNjJfSU5UTF9CVUZGRVJTCQkxNgorI2RlZmluZSBJU1AxMzYyX0FUTF9CTEtTSVpFCQk2NAorCisjZGVmaW5lIElTUDEzNjJfUkVHX1dSSVRFX09GRlNFVAkweDgwCisKKyNpZmRlZiBJU1AxMzYyX0RFQlVHCit0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIGludCBpc3AxMzYyX3JlZ190OworCisjZGVmaW5lIFJFR19XSURUSF8xNgkJCTB4MDAwCisjZGVmaW5lIFJFR19XSURUSF8zMgkJCTB4MTAwCisjZGVmaW5lIFJFR19XSURUSF9NQVNLCQkJMHgxMDAKKyNkZWZpbmUgUkVHX05PX01BU0sJCQkweDBmZgorCisjZGVmaW5lIFJFR19BQ0NFU1NfUgkJCTB4MjAwCisjZGVmaW5lIFJFR19BQ0NFU1NfVwkJCTB4NDAwCisjZGVmaW5lIFJFR19BQ0NFU1NfUlcJCQkweDYwMAorI2RlZmluZSBSRUdfQUNDRVNTX01BU0sJCQkweDYwMAorCisjZGVmaW5lIElTUDEzNjJfUkVHX05PKHIpCQkoKHIpICYgUkVHX05PX01BU0spCisKKyNkZWZpbmUgX0JVR19PTih4KQlCVUdfT04oeCkKKyNkZWZpbmUgX1dBUk5fT04oeCkJV0FSTl9PTih4KQorCisjZGVmaW5lIElTUDEzNjJfUkVHKG5hbWUsIGFkZHIsIHdpZHRoLCBydykgXAorc3RhdGljIGlzcDEzNjJfcmVnX3QgSVNQMTM2Ml9SRUdfIyNuYW1lID0gKChhZGRyKSB8ICh3aWR0aCkgfCAocncpKQorCisjZGVmaW5lIFJFR19BQ0NFU1NfVEVTVChyKSAgIEJVR19PTigoKHIpICYgSVNQMTM2Ml9SRUdfV1JJVEVfT0ZGU0VUKSAmJiAhKChyKSAmIFJFR19BQ0NFU1NfVykpCisjZGVmaW5lIFJFR19XSURUSF9URVNUKHIsIHcpIEJVR19PTigoKHIpICYgUkVHX1dJRFRIX01BU0spICE9ICh3KSkKKyNlbHNlCit0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXNwMTM2Ml9yZWdfdDsKKyNkZWZpbmUgSVNQMTM2Ml9SRUdfTk8ocikJCShyKQorI2RlZmluZSBfQlVHX09OKHgpCQkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9XQVJOX09OKHgpCQkJZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgSVNQMTM2Ml9SRUcobmFtZSwgYWRkciwgd2lkdGgsIHJ3KSBcCitzdGF0aWMgaXNwMTM2Ml9yZWdfdCBJU1AxMzYyX1JFR18jI25hbWUgPSBhZGRyCisKKyNkZWZpbmUgUkVHX0FDQ0VTU19URVNUKHIpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVHX1dJRFRIX1RFU1QociwgdykJCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIE9IQ0kgY29tcGF0aWJsZSByZWdpc3RlcnMgKi8KKy8qCisgKiBOb3RlOiBTb21lIG9mIHRoZSBJU1AxMzYyICdPSENJJyByZWdpc3RlcnMgaW1wbGVtZW50IG9ubHkKKyAqIGEgc3Vic2V0IG9mIHRoZSBiaXRzIGRlZmluZWQgaW4gdGhlIE9IQ0kgc3BlYy4KKyAqCisgKiBCaXRtYXNrcyBmb3IgdGhlIGluZGl2aWR1YWwgYml0cyBvZiB0aGVzZSByZWdpc3RlcnMgYXJlIGRlZmluZWQgaW4gIm9oY2kuaCIKKyAqLworSVNQMTM2Ml9SRUcoSENSRVZJU0lPTiwJMHgwMCwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1IpOworSVNQMTM2Ml9SRUcoSENDT05UUk9MLAkweDAxLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENDTURTVEFULAkweDAyLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENJTlRTVEFULAkweDAzLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENJTlRFTkIsCTB4MDQsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lOVERJUywJMHgwNSwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDRk1JTlRWTCwJMHgwZCwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDRk1SRU0sCTB4MGUsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0ZNTlVNLAkweDBmLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENMU1RIUkVTSCwJMHgxMSwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDUkhERVNDQSwJMHgxMiwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDUkhERVNDQiwJMHgxMywJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDUkhTVEFUVVMsCTB4MTQsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ1JIUE9SVDEsCTB4MTUsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ1JIUE9SVDIsCTB4MTYsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CisKKy8qIFBoaWxpcHMgSVNQMTM2MiBzcGVjaWZpYyByZWdpc3RlcnMgKi8KK0lTUDEzNjJfUkVHKEhDSFdDRkcsCTB4MjAsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CisjZGVmaW5lIEhDSFdDRkdfRElTQUJMRV9TVVNQRU5ECSgxIDw8IDE1KQorI2RlZmluZSBIQ0hXQ0ZHX0dMT0JBTF9QV1JET1dOCSgxIDw8IDE0KQorI2RlZmluZSBIQ0hXQ0ZHX1BVTExET1dOX0RTMgkoMSA8PCAxMykKKyNkZWZpbmUgSENIV0NGR19QVUxMRE9XTl9EUzEJKDEgPDwgMTIpCisjZGVmaW5lIEhDSFdDRkdfQ0xLTk9UU1RPUAkoMSA8PCAxMSkKKyNkZWZpbmUgSENIV0NGR19BTkFMT0dfT0MJKDEgPDwgMTApCisjZGVmaW5lIEhDSFdDRkdfT05FSU5UCQkoMSA8PCA5KQorI2RlZmluZSBIQ0hXQ0ZHX0RBQ0tfTU9ERQkoMSA8PCA4KQorI2RlZmluZSBIQ0hXQ0ZHX09ORURNQQkJKDEgPDwgNykKKyNkZWZpbmUgSENIV0NGR19EQUNLX1BPTAkoMSA8PCA2KQorI2RlZmluZSBIQ0hXQ0ZHX0RSRVFfUE9MCSgxIDw8IDUpCisjZGVmaW5lIEhDSFdDRkdfREJXSURUSF9NQVNLCSgweDAzIDw8IDMpCisjZGVmaW5lIEhDSFdDRkdfREJXSURUSChuKQkoKChuKSA8PCAzKSAmIEhDSFdDRkdfREJXSURUSF9NQVNLKQorI2RlZmluZSBIQ0hXQ0ZHX0lOVF9QT0wJCSgxIDw8IDIpCisjZGVmaW5lIEhDSFdDRkdfSU5UX1RSSUdHRVIJKDEgPDwgMSkKKyNkZWZpbmUgSENIV0NGR19JTlRfRU5BQkxFCSgxIDw8IDApCisKK0lTUDEzNjJfUkVHKEhDRE1BQ0ZHLAkweDIxLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworI2RlZmluZSBIQ0RNQUNGR19DVFJfRU5BQkxFCSgxIDw8IDcpCisjZGVmaW5lIEhDRE1BQ0ZHX0JVUlNUX0xFTl9NQVNLCSgweDAzIDw8IDUpCisjZGVmaW5lIEhDRE1BQ0ZHX0JVUlNUX0xFTihuKQkoKChuKSA8PCA1KSAmIEhDRE1BQ0ZHX0JVUlNUX0xFTl9NQVNLKQorI2RlZmluZSBIQ0RNQUNGR19CVVJTVF9MRU5fMQlIQ0RNQUNGR19CVVJTVF9MRU4oMCkKKyNkZWZpbmUgSENETUFDRkdfQlVSU1RfTEVOXzQJSENETUFDRkdfQlVSU1RfTEVOKDEpCisjZGVmaW5lIEhDRE1BQ0ZHX0JVUlNUX0xFTl84CUhDRE1BQ0ZHX0JVUlNUX0xFTigyKQorI2RlZmluZSBIQ0RNQUNGR19ETUFfRU5BQkxFCSgxIDw8IDQpCisjZGVmaW5lIEhDRE1BQ0ZHX0JVRl9UWVBFX01BU0sJKDB4MDcgPDwgMSkKKyNkZWZpbmUgSENETUFDRkdfQlVGX1RZUEUobikJKCgobikgPDwgMSkgJiBIQ0RNQUNGR19CVUZfVFlQRV9NQVNLKQorI2RlZmluZSBIQ0RNQUNGR19CVUZfSVNUTDAJSENETUFDRkdfQlVGX1RZUEUoMCkKKyNkZWZpbmUgSENETUFDRkdfQlVGX0lTVEwxCUhDRE1BQ0ZHX0JVRl9UWVBFKDEpCisjZGVmaW5lIEhDRE1BQ0ZHX0JVRl9JTlRMCUhDRE1BQ0ZHX0JVRl9UWVBFKDIpCisjZGVmaW5lIEhDRE1BQ0ZHX0JVRl9BVEwJSENETUFDRkdfQlVGX1RZUEUoMykKKyNkZWZpbmUgSENETUFDRkdfQlVGX0RJUkVDVAlIQ0RNQUNGR19CVUZfVFlQRSg0KQorI2RlZmluZSBIQ0RNQUNGR19ETUFfUldfU0VMRUNUCSgxIDw8IDApCisKK0lTUDEzNjJfUkVHKEhDWEZFUkNUUiwJMHgyMiwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKworSVNQMTM2Ml9SRUcoSEN1UElOVCwJMHgyNCwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKyNkZWZpbmUgSEN1UElOVF9TT0YJCSgxIDw8IDApCisjZGVmaW5lIEhDdVBJTlRfSVNUTDAJCSgxIDw8IDEpCisjZGVmaW5lIEhDdVBJTlRfSVNUTDEJCSgxIDw8IDIpCisjZGVmaW5lIEhDdVBJTlRfRU9UCQkoMSA8PCAzKQorI2RlZmluZSBIQ3VQSU5UX09QUgkJKDEgPDwgNCkKKyNkZWZpbmUgSEN1UElOVF9TVVNQCQkoMSA8PCA1KQorI2RlZmluZSBIQ3VQSU5UX0NMS1JEWQkJKDEgPDwgNikKKyNkZWZpbmUgSEN1UElOVF9JTlRMCQkoMSA8PCA3KQorI2RlZmluZSBIQ3VQSU5UX0FUTAkJKDEgPDwgOCkKKyNkZWZpbmUgSEN1UElOVF9PVEcJCSgxIDw8IDkpCisKK0lTUDEzNjJfUkVHKEhDdVBJTlRFTkIsCTB4MjUsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CisvKiBzYW1lIGJpdCBkZWZpbml0aW9ucyBhcHBseSBhcyBmb3IgSEN1UElOVCAqLworCitJU1AxMzYyX1JFRyhIQ0NISVBJRCwJMHgyNywJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1IpOworI2RlZmluZSBIQ0NISVBJRF9NQVNLCQkweGZmMDAKKyNkZWZpbmUgSENDSElQSURfTUFHSUMJCTB4MzYwMAorCitJU1AxMzYyX1JFRyhIQ1NDUkFUQ0gsCTB4MjgsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CisKK0lTUDEzNjJfUkVHKEhDU1dSRVMsCTB4MjksCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19XKTsKKyNkZWZpbmUgSENTV1JFU19NQUdJQwkJMHgwMGY2CisKK0lTUDEzNjJfUkVHKEhDQlVGU1RBVCwJMHgyYywJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKyNkZWZpbmUgSENCVUZTVEFUX0lTVEwwX0ZVTEwJKDEgPDwgMCkKKyNkZWZpbmUgSENCVUZTVEFUX0lTVEwxX0ZVTEwJKDEgPDwgMSkKKyNkZWZpbmUgSENCVUZTVEFUX0lOVExfQUNUSVZFCSgxIDw8IDIpCisjZGVmaW5lIEhDQlVGU1RBVF9BVExfQUNUSVZFCSgxIDw8IDMpCisjZGVmaW5lIEhDQlVGU1RBVF9SRVNFVF9IV1BQCSgxIDw8IDQpCisjZGVmaW5lIEhDQlVGU1RBVF9JU1RMMF9BQ1RJVkUJKDEgPDwgNSkKKyNkZWZpbmUgSENCVUZTVEFUX0lTVEwxX0FDVElWRQkoMSA8PCA2KQorI2RlZmluZSBIQ0JVRlNUQVRfSVNUTDBfRE9ORQkoMSA8PCA4KQorI2RlZmluZSBIQ0JVRlNUQVRfSVNUTDFfRE9ORQkoMSA8PCA5KQorI2RlZmluZSBIQ0JVRlNUQVRfUEFJUkVEX1BURFBQCSgxIDw8IDEwKQorCitJU1AxMzYyX1JFRyhIQ0RJUkFERFIsCTB4MzIsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CisjZGVmaW5lIEhDRElSQUREUl9BRERSX01BU0sJMHgwMDAwZmZmZgorI2RlZmluZSBIQ0RJUkFERFJfQUREUihuKQkoKChuKSA8PCAwKSAmIEhDRElSQUREUl9BRERSX01BU0spCisjZGVmaW5lIEhDRElSQUREUl9DT1VOVF9NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgSENESVJBRERSX0NPVU5UKG4pCSgoKG4pIDw8IDE2KSAmIEhDRElSQUREUl9DT1VOVF9NQVNLKQorSVNQMTM2Ml9SRUcoSENESVJEQVRBLAkweDQ1LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworCitJU1AxMzYyX1JFRyhIQ0lTVExCVUZTWiwgMHgzMCwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDSVNUTDBQT1JULCAweDQwLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENJU1RMMVBPUlQsIDB4NDIsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lTVExSQVRFLAkweDQ3LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworCitJU1AxMzYyX1JFRyhIQ0lOVExCVUZTWiwgMHgzMywJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDSU5UTFBPUlQsCTB4NDMsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lOVExCTEtTWiwgMHg1MywJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDSU5UTERPTkUsCTB4MTcsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SKTsKK0lTUDEzNjJfUkVHKEhDSU5UTFNLSVAsCTB4MTgsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lOVExMQVNULAkweDE5LAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENJTlRMQ1VSUiwJMHgxYSwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1IpOworCitJU1AxMzYyX1JFRyhIQ0FUTEJVRlNaLCAweDM0LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENBVExQT1JULAkweDQ0LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENBVExCTEtTWiwgMHg1NCwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDQVRMRE9ORSwJMHgxYiwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1IpOworSVNQMTM2Ml9SRUcoSENBVExTS0lQLAkweDFjLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENBVExMQVNULAkweDFkLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENBVExDVVJSLAkweDFlLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUik7CisKK0lTUDEzNjJfUkVHKEhDQVRMRFRDLAkweDUxLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENBVExEVENUTywJMHg1MiwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKworCitJU1AxMzYyX1JFRyhPVEdDT05UUk9MLAkweDYyLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoT1RHU1RBVFVTLAkweDY3LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUik7CitJU1AxMzYyX1JFRyhPVEdJTlQsCTB4NjgsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhPVEdJTlRFTkIsCTB4NjksCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhPVEdUSU1FUiwJMHg2QSwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKE9UR0FMVFRNUiwJMHg2QywJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKworLyogUGhpbGlwcyB0cmFuc2ZlciBkZXNjcmlwdG9yLCBjcHUtZW5kaWFuICovCitzdHJ1Y3QgcHRkIHsKKwl1MTYgY291bnQ7CisjZGVmaW5lCVBURF9DT1VOVF9NU0sJKDB4M2ZmIDw8IDApCisjZGVmaW5lCVBURF9UT0dHTEVfTVNLCSgxIDw8IDEwKQorI2RlZmluZQlQVERfQUNUSVZFX01TSwkoMSA8PCAxMSkKKyNkZWZpbmUJUFREX0NDX01TSwkoMHhmIDw8IDEyKQorCXUxNiBtcHM7CisjZGVmaW5lCVBURF9NUFNfTVNLCSgweDNmZiA8PCAwKQorI2RlZmluZQlQVERfU1BEX01TSwkoMSA8PCAxMCkKKyNkZWZpbmUJUFREX0xBU1RfTVNLCSgxIDw8IDExKQorI2RlZmluZQlQVERfRVBfTVNLCSgweGYgPDwgMTIpCisJdTE2IGxlbjsKKyNkZWZpbmUJUFREX0xFTl9NU0sJKDB4M2ZmIDw8IDApCisjZGVmaW5lCVBURF9ESVJfTVNLCSgzIDw8IDEwKQorI2RlZmluZQlQVERfRElSX1NFVFVQCSgwKQorI2RlZmluZQlQVERfRElSX09VVAkoMSkKKyNkZWZpbmUJUFREX0RJUl9JTgkoMikKKwl1MTYgZmFkZHI7CisjZGVmaW5lCVBURF9GQV9NU0sJKDB4N2YgPDwgMCkKKy8qIFBURCBCeXRlIDc6IFtTdGFydGluZ0ZyYW1lIChpZiBJU08gUFREKSB8IFN0YXJ0aW5nRnJhbWVbMC4uNF0sIFBvbGxpbmdSYXRlWzAuLjJdIChpZiBJTlQgUFREKV0gKi8KKyNkZWZpbmUgUFREX1NGX0lTT19NU0sJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgUFREX1NGX0lOVF9NU0sJKDB4MWYgPDwgOCkKKyNkZWZpbmUgUFREX1BSX01TSwkoMHgwNyA8PCAxMykKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCgyKSkpOworI2RlZmluZSBQVERfSEVBREVSX1NJWkUgc2l6ZW9mKHN0cnVjdCBwdGQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENvcGllZCBmcm9tIG9oY2kuaDogKi8KKy8qCisgKiBIYXJkd2FyZSB0cmFuc2ZlciBzdGF0dXMgY29kZXMgLS0gQ0MgZnJvbSBQVEQKKyAqLworI2RlZmluZSBQVERfQ0NfTk9FUlJPUiAgICAgIDB4MDAKKyNkZWZpbmUgUFREX0NDX0NSQyAgICAgICAgICAweDAxCisjZGVmaW5lIFBURF9DQ19CSVRTVFVGRklORyAgMHgwMgorI2RlZmluZSBQVERfQ0NfREFUQVRPR0dMRU0gIDB4MDMKKyNkZWZpbmUgUFREX0NDX1NUQUxMICAgICAgICAweDA0CisjZGVmaW5lIFBURF9ERVZOT1RSRVNQICAgICAgMHgwNQorI2RlZmluZSBQVERfUElEQ0hFQ0tGQUlMICAgIDB4MDYKKyNkZWZpbmUgUFREX1VORVhQRUNURURQSUQgICAweDA3CisjZGVmaW5lIFBURF9EQVRBT1ZFUlJVTiAgICAgMHgwOAorI2RlZmluZSBQVERfREFUQVVOREVSUlVOICAgIDB4MDkKKyAgICAvKiAweDBBLCAweDBCIHJlc2VydmVkIGZvciBoYXJkd2FyZSAqLworI2RlZmluZSBQVERfQlVGRkVST1ZFUlJVTiAgIDB4MEMKKyNkZWZpbmUgUFREX0JVRkZFUlVOREVSUlVOICAweDBECisgICAgLyogMHgwRSwgMHgwRiByZXNlcnZlZCBmb3IgSENEICovCisjZGVmaW5lIFBURF9OT1RBQ0NFU1NFRCAgICAgMHgwRgorCisKKy8qIG1hcCBPSENJIFREIHN0YXR1cyBjb2RlcyAoQ0MpIHRvIGVycm5vIHZhbHVlcyAqLworc3RhdGljIGNvbnN0IGludCBjY190b19lcnJvclsxNl0gPSB7CisJLyogTm8gIEVycm9yICAqLyAgICAgICAgICAgICAgIDAsCisJLyogQ1JDIEVycm9yICAqLyAgICAgICAgICAgICAgIC1FSUxTRVEsCisJLyogQml0IFN0dWZmICAqLyAgICAgICAgICAgICAgIC1FUFJPVE8sCisJLyogRGF0YSBUb2dnICAqLyAgICAgICAgICAgICAgIC1FSUxTRVEsCisJLyogU3RhbGwgICAgICAqLyAgICAgICAgICAgICAgIC1FUElQRSwKKwkvKiBEZXZOb3RSZXNwICovICAgICAgICAgICAgICAgLUVUSU1FRE9VVCwKKwkvKiBQSURDaGVjayAgICovICAgICAgICAgICAgICAgLUVQUk9UTywKKwkvKiBVbkV4cFBJRCAgICovICAgICAgICAgICAgICAgLUVQUk9UTywKKwkvKiBEYXRhT3ZlciAgICovICAgICAgICAgICAgICAgLUVPVkVSRkxPVywKKwkvKiBEYXRhVW5kZXIgICovICAgICAgICAgICAgICAgLUVSRU1PVEVJTywKKwkvKiAoZm9yIGh3KSAgICovICAgICAgICAgICAgICAgLUVJTywKKwkvKiAoZm9yIGh3KSAgICovICAgICAgICAgICAgICAgLUVJTywKKwkvKiBCdWZmZXJPdmVyICovICAgICAgICAgICAgICAgLUVDT01NLAorCS8qIEJ1ZmZVbmRlciAgKi8gICAgICAgICAgICAgICAtRU5PU1IsCisJLyogKGZvciBIQ0QpICAqLyAgICAgICAgICAgICAgIC1FQUxSRUFEWSwKKwkvKiAoZm9yIEhDRCkgICovICAgICAgICAgICAgICAgLUVBTFJFQURZCit9OworCisKKy8qCisgKiBIY0NvbnRyb2wgKGNvbnRyb2wpIHJlZ2lzdGVyIG1hc2tzCisgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX0hDRlMJKDMgPDwgNikJLyogaG9zdCBjb250cm9sbGVyIGZ1bmN0aW9uYWwgc3RhdGUgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX1JXQwkoMSA8PCA5KQkvKiByZW1vdGUgd2FrZXVwIGNvbm5lY3RlZCAqLworI2RlZmluZSBPSENJX0NUUkxfUldFCSgxIDw8IDEwKQkvKiByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworCisvKiBwcmUtc2hpZnRlZCB2YWx1ZXMgZm9yIEhDRlMgKi8KKyMJZGVmaW5lIE9IQ0lfVVNCX1JFU0VUCSgwIDw8IDYpCisjCWRlZmluZSBPSENJX1VTQl9SRVNVTUUJKDEgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX09QRVIJKDIgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX1NVU1BFTkQJKDMgPDwgNikKKworLyoKKyAqIEhjQ29tbWFuZFN0YXR1cyAoY21kc3RhdHVzKSByZWdpc3RlciBtYXNrcworICovCisjZGVmaW5lIE9IQ0lfSENSCSgxIDw8IDApCS8qIGhvc3QgY29udHJvbGxlciByZXNldCAqLworI2RlZmluZSBPSENJX1NPQyAgCSgzIDw8IDE2KQkvKiBzY2hlZHVsaW5nIG92ZXJydW4gY291bnQgKi8KKworLyoKKyAqIG1hc2tzIHVzZWQgd2l0aCBpbnRlcnJ1cHQgcmVnaXN0ZXJzOgorICogSGNJbnRlcnJ1cHRTdGF0dXMgKGludHJzdGF0dXMpCisgKiBIY0ludGVycnVwdEVuYWJsZSAoaW50cmVuYWJsZSkKKyAqIEhjSW50ZXJydXB0RGlzYWJsZSAoaW50cmRpc2FibGUpCisgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1NPCSgxIDw8IDApCS8qIHNjaGVkdWxpbmcgb3ZlcnJ1biAqLworI2RlZmluZSBPSENJX0lOVFJfV0RICSgxIDw8IDEpCS8qIHdyaXRlYmFjayBvZiBkb25lX2hlYWQgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1NGCSgxIDw8IDIpCS8qIHN0YXJ0IGZyYW1lICovCisjZGVmaW5lIE9IQ0lfSU5UUl9SRAkoMSA8PCAzKQkvKiByZXN1bWUgZGV0ZWN0ICovCisjZGVmaW5lIE9IQ0lfSU5UUl9VRQkoMSA8PCA0KQkvKiB1bnJlY292ZXJhYmxlIGVycm9yICovCisjZGVmaW5lIE9IQ0lfSU5UUl9GTk8JKDEgPDwgNSkJLyogZnJhbWUgbnVtYmVyIG92ZXJmbG93ICovCisjZGVmaW5lIE9IQ0lfSU5UUl9SSFNDCSgxIDw8IDYpCS8qIHJvb3QgaHViIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX09DCSgxIDw8IDMwKQkvKiBvd25lcnNoaXAgY2hhbmdlICovCisjZGVmaW5lIE9IQ0lfSU5UUl9NSUUJKDEgPDwgMzEpCS8qIG1hc3RlciBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qIHJvb3RodWIucG9ydHN0YXR1cyBbaV0gYml0cyAqLworI2RlZmluZSBSSF9QU19DQ1MgICAgICAgICAgICAweDAwMDAwMDAxICAgCS8qIGN1cnJlbnQgY29ubmVjdCBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfUEVTICAgICAgICAgICAgMHgwMDAwMDAwMiAgIAkvKiBwb3J0IGVuYWJsZSBzdGF0dXMqLworI2RlZmluZSBSSF9QU19QU1MgICAgICAgICAgICAweDAwMDAwMDA0ICAgCS8qIHBvcnQgc3VzcGVuZCBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfUE9DSSAgICAgICAgICAgMHgwMDAwMDAwOCAgIAkvKiBwb3J0IG92ZXIgY3VycmVudCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgUkhfUFNfUFJTICAgICAgICAgICAgMHgwMDAwMDAxMCAgCS8qIHBvcnQgcmVzZXQgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BQUyAgICAgICAgICAgIDB4MDAwMDAxMDAgICAJLyogcG9ydCBwb3dlciBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfTFNEQSAgICAgICAgICAgMHgwMDAwMDIwMCAgICAJLyogbG93IHNwZWVkIGRldmljZSBhdHRhY2hlZCAqLworI2RlZmluZSBSSF9QU19DU0MgICAgICAgICAgICAweDAwMDEwMDAwIAkvKiBjb25uZWN0IHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfUEVTQyAgICAgICAgICAgMHgwMDAyMDAwMCAgIAkvKiBwb3J0IGVuYWJsZSBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BTU0MgICAgICAgICAgIDB4MDAwNDAwMDAgICAgCS8qIHBvcnQgc3VzcGVuZCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX09DSUMgICAgICAgICAgIDB4MDAwODAwMDAgICAgCS8qIG92ZXIgY3VycmVudCBpbmRpY2F0b3IgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BSU0MgICAgICAgICAgIDB4MDAxMDAwMDAgICAJLyogcG9ydCByZXNldCBzdGF0dXMgY2hhbmdlICovCisKKy8qIHJvb3RodWIuc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgUkhfSFNfTFBTCSAgICAgMHgwMDAwMDAwMQkJLyogbG9jYWwgcG93ZXIgc3RhdHVzICovCisjZGVmaW5lIFJIX0hTX09DSQkgICAgIDB4MDAwMDAwMDIJCS8qIG92ZXIgY3VycmVudCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgUkhfSFNfRFJXRQkgICAgIDB4MDAwMDgwMDAJCS8qIGRldmljZSByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworI2RlZmluZSBSSF9IU19MUFNDCSAgICAgMHgwMDAxMDAwMAkJLyogbG9jYWwgcG93ZXIgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9IU19PQ0lDCSAgICAgMHgwMDAyMDAwMAkJLyogb3ZlciBjdXJyZW50IGluZGljYXRvciBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfSFNfQ1JXRQkgICAgIDB4ODAwMDAwMDAJCS8qIGNsZWFyIHJlbW90ZSB3YWtldXAgZW5hYmxlICovCisKKy8qIHJvb3RodWIuYiBtYXNrcyAqLworI2RlZmluZSBSSF9CX0RSCQkweDAwMDBmZmZmCQkvKiBkZXZpY2UgcmVtb3ZhYmxlIGZsYWdzICovCisjZGVmaW5lIFJIX0JfUFBDTQkweGZmZmYwMDAwCQkvKiBwb3J0IHBvd2VyIGNvbnRyb2wgbWFzayAqLworCisvKiByb290aHViLmEgbWFza3MgKi8KKyNkZWZpbmUJUkhfQV9ORFAJKDB4ZmYgPDwgMCkJCS8qIG51bWJlciBvZiBkb3duc3RyZWFtIHBvcnRzICovCisjZGVmaW5lCVJIX0FfUFNNCSgxIDw8IDgpCQkvKiBwb3dlciBzd2l0Y2hpbmcgbW9kZSAqLworI2RlZmluZQlSSF9BX05QUwkoMSA8PCA5KQkJLyogbm8gcG93ZXIgc3dpdGNoaW5nICovCisjZGVmaW5lCVJIX0FfRFQJCSgxIDw8IDEwKQkJLyogZGV2aWNlIHR5cGUgKG1ieikgKi8KKyNkZWZpbmUJUkhfQV9PQ1BNCSgxIDw8IDExKQkJLyogb3ZlciBjdXJyZW50IHByb3RlY3Rpb24gbW9kZSAqLworI2RlZmluZQlSSF9BX05PQ1AJKDEgPDwgMTIpCQkvKiBubyBvdmVyIGN1cnJlbnQgcHJvdGVjdGlvbiAqLworI2RlZmluZQlSSF9BX1BPVFBHVAkoMHhmZiA8PCAyNCkJCS8qIHBvd2VyIG9uIHRvIHBvd2VyIGdvb2QgdGltZSAqLworCisjZGVmaW5lCUZJCQkJMHgyZWRmCQkvKiAxMjAwMCBiaXRzIHBlciBmcmFtZSAoLTEpICovCisjZGVmaW5lCUZTTVAoZmkpIAkJKDB4N2ZmZiAmICgoNiAqICgoZmkpIC0gMjEwKSkgLyA3KSkKKyNkZWZpbmUgTFNUSFJFU0gJCTB4NjI4CQkvKiBsb3dzcGVlZCBiaXQgdGhyZXNob2xkICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogUFREIGFjY2Vzc29yIG1hY3Jvcy4gKi8KKyNkZWZpbmUgUFREX0dFVF9DT1VOVChwKQkoKChwKS0+Y291bnQgJiBQVERfQ09VTlRfTVNLKSA+PiAwKQorI2RlZmluZSBQVERfQ09VTlQodikJCSgoKHYpIDw8IDApICYgUFREX0NPVU5UX01TSykKKyNkZWZpbmUgUFREX0dFVF9UT0dHTEUocCkJKCgocCktPmNvdW50ICYgUFREX1RPR0dMRV9NU0spID4+IDEwKQorI2RlZmluZSBQVERfVE9HR0xFKHYpCQkoKCh2KSA8PCAxMCkgJiBQVERfVE9HR0xFX01TSykKKyNkZWZpbmUgUFREX0dFVF9BQ1RJVkUocCkJKCgocCktPmNvdW50ICYgUFREX0FDVElWRV9NU0spID4+IDExKQorI2RlZmluZSBQVERfQUNUSVZFKHYpCQkoKCh2KSA8PCAxMSkgJiBQVERfQUNUSVZFX01TSykKKyNkZWZpbmUgUFREX0dFVF9DQyhwKQkJKCgocCktPmNvdW50ICYgUFREX0NDX01TSykgPj4gMTIpCisjZGVmaW5lIFBURF9DQyh2KQkJKCgodikgPDwgMTIpICYgUFREX0NDX01TSykKKyNkZWZpbmUgUFREX0dFVF9NUFMocCkJCSgoKHApLT5tcHMgJiBQVERfTVBTX01TSykgPj4gMCkKKyNkZWZpbmUgUFREX01QUyh2KQkJKCgodikgPDwgMCkgJiBQVERfTVBTX01TSykKKyNkZWZpbmUgUFREX0dFVF9TUEQocCkJCSgoKHApLT5tcHMgJiBQVERfU1BEX01TSykgPj4gMTApCisjZGVmaW5lIFBURF9TUEQodikJCSgoKHYpIDw8IDEwKSAmIFBURF9TUERfTVNLKQorI2RlZmluZSBQVERfR0VUX0xBU1QocCkJCSgoKHApLT5tcHMgJiBQVERfTEFTVF9NU0spID4+IDExKQorI2RlZmluZSBQVERfTEFTVCh2KQkJKCgodikgPDwgMTEpICYgUFREX0xBU1RfTVNLKQorI2RlZmluZSBQVERfR0VUX0VQKHApCQkoKChwKS0+bXBzICYgUFREX0VQX01TSykgPj4gMTIpCisjZGVmaW5lIFBURF9FUCh2KQkJKCgodikgPDwgMTIpICYgUFREX0VQX01TSykKKyNkZWZpbmUgUFREX0dFVF9MRU4ocCkJCSgoKHApLT5sZW4gJiBQVERfTEVOX01TSykgPj4gMCkKKyNkZWZpbmUgUFREX0xFTih2KQkJKCgodikgPDwgMCkgJiBQVERfTEVOX01TSykKKyNkZWZpbmUgUFREX0dFVF9ESVIocCkJCSgoKHApLT5sZW4gJiBQVERfRElSX01TSykgPj4gMTApCisjZGVmaW5lIFBURF9ESVIodikJCSgoKHYpIDw8IDEwKSAmIFBURF9ESVJfTVNLKQorI2RlZmluZSBQVERfR0VUX0ZBKHApCQkoKChwKS0+ZmFkZHIgJiBQVERfRkFfTVNLKSA+PiAwKQorI2RlZmluZSBQVERfRkEodikJCSgoKHYpIDw8IDApICYgUFREX0ZBX01TSykKKyNkZWZpbmUgUFREX0dFVF9TRl9JTlQocCkJKCgocCktPmZhZGRyICYgUFREX1NGX0lOVF9NU0spID4+IDgpCisjZGVmaW5lIFBURF9TRl9JTlQodikJCSgoKHYpIDw8IDgpICYgUFREX1NGX0lOVF9NU0spCisjZGVmaW5lIFBURF9HRVRfU0ZfSVNPKHApCSgoKHApLT5mYWRkciAmIFBURF9TRl9JU09fTVNLKSA+PiA4KQorI2RlZmluZSBQVERfU0ZfSVNPKHYpCQkoKCh2KSA8PCA4KSAmIFBURF9TRl9JU09fTVNLKQorI2RlZmluZSBQVERfR0VUX1BSKHApCQkoKChwKS0+ZmFkZHIgJiBQVERfUFJfTVNLKSA+PiAxMykKKyNkZWZpbmUgUFREX1BSKHYpCQkoKCh2KSA8PCAxMykgJiBQVERfUFJfTVNLKQorCisjZGVmaW5lCUxPRzJfUEVSSU9ESUNfU0laRQk1CS8qIGFyYml0cmFyeTsgdGhpcyBtYXRjaGVzIE9IQ0kgKi8KKyNkZWZpbmUJUEVSSU9ESUNfU0laRQkJKDEgPDwgTE9HMl9QRVJJT0RJQ19TSVpFKQorCitzdHJ1Y3QgaXNwMTM2Ml9lcCB7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXA7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisKKwkvKiBwaGlsaXBzIHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3QgcHRkCQlwdGQ7CisKKwl1OAkJCW1heHBhY2tldDsKKwl1OAkJCWVwbnVtOworCXU4CQkJbmV4dHBpZDsKKwl1MTYJCQllcnJvcl9jb3VudDsKKwl1MTYJCQlsZW5ndGg7CQkvKiBvZiBjdXJyZW50IHBhY2tldCAqLworCXMxNgkJCXB0ZF9vZmZzZXQ7CS8qIGJ1ZmZlciBvZmZzZXQgaW4gSVNQMTM2MiB3aGVyZQorCQkJCQkJICAgUFREIGhhcyBiZWVuIHN0b3JlZAorCQkJCQkJICAgKGZvciBhY2Nlc3MgdGhydSBIQ0RJUkRBVEEpICovCisJaW50CQkJcHRkX2luZGV4OworCWludCBudW1fcHRkczsKKwl2b2lkIAkJCSpkYXRhOwkJLyogdG8gZGF0YWJ1ZiAqLworCS8qIHF1ZXVlIG9mIGFjdGl2ZSBFUHMgKHRoZSBvbmVzIHRyYW5zbWl0dGVkIHRvIHRoZSBjaGlwKSAqLworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlOworCisJLyogcGVyaW9kaWMgc2NoZWR1bGUgKi8KKwl1OAkJCWJyYW5jaDsKKwl1MTYJCQlpbnRlcnZhbDsKKwl1MTYJCQlsb2FkOworCXUxNgkJCWxhc3RfaXNvOworCisJLyogYXN5bmMgc2NoZWR1bGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXNjaGVkdWxlOwkvKiBsaXN0IG9mIGFsbCBFUHMgdGhhdCBuZWVkIHByb2Nlc3NpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlbW92ZV9saXN0OworCWludAkJCW51bV9yZXE7Cit9OworCitzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSB7CisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmU7CQkvKiBsaXN0IG9mIFBURHMgY3VycmVudGx5IHByb2Nlc3NlZCBieSBIQyAqLworCWF0b21pY190CQlmaW5pc2hpbmc7CisJdW5zaWduZWQgbG9uZwkJYnVmX21hcDsKKwl1bnNpZ25lZCBsb25nCQlza2lwX21hcDsKKwlpbnQJCQlmcmVlX3B0ZDsKKwl1MTYJCQlidWZfc3RhcnQ7CisJdTE2CQkJYnVmX3NpemU7CisJdTE2CQkJYmxrX3NpemU7CS8qIFBURCBidWZmZXIgYmxvY2sgc2l6ZSBmb3IgQVRMIGFuZCBJTlRMICovCisJdTgJCQlidWZfY291bnQ7CisJdTgJCQlidWZfYXZhaWw7CisJY2hhcgkJCW5hbWVbMTZdOworCisJLyogZm9yIHN0YXRpc3RpY2FsIHRyYWNraW5nICovCisJdTgJCQlzdGF0X21heHB0ZHM7CS8qIE1heCAjIG9mIHB0ZHMgc2VlbiBzaW11bHRhbmVvdXNseSBpbiBmaWZvICovCisJdTgJCQlwdGRfY291bnQ7CS8qIG51bWJlciBvZiBwdGRzIHN1Ym1pdHRlZCB0byB0aGlzIHF1ZXVlICovCit9OworCitzdHJ1Y3QgaXNwMTM2Ml9oY2QgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisKKwlzdHJ1Y3QgaXNwMTM2Ml9wbGF0Zm9ybV9kYXRhICpib2FyZDsKKworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcGRlOworCXVuc2lnbmVkIGxvbmcJCXN0YXQxLCBzdGF0Miwgc3RhdDQsIHN0YXQ4LCBzdGF0MTY7CisKKwkvKiBIQyByZWdpc3RlcnMgKi8KKwl1MzIJCQlpbnRlbmI7CQkvKiAiT0hDSSIgaW50ZXJydXB0cyAqLworCXUxNgkJCWlycWVuYjsJCS8qIHVQIGludGVycnVwdHMgKi8KKworCS8qIFJvb3QgaHViIHJlZ2lzdGVycyAqLworCXUzMgkJCXJoZGVzY2E7CisJdTMyCQkJcmhkZXNjYjsKKwl1MzIJCQlyaHN0YXR1czsKKwl1MzIJCQlyaHBvcnRbTUFYX1JPT1RfUE9SVFNdOworCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CisKKwkvKiBIQyBjb250cm9sIHJlZyBzaGFkb3cgY29weSAqLworCXUzMgkJCWhjX2NvbnRyb2w7CisKKwkvKiBhc3luYyBzY2hlZHVsZTogY29udHJvbCwgYnVsayAqLworCXN0cnVjdCBsaXN0X2hlYWQJYXN5bmM7CisKKwkvKiBwZXJpb2RpYyBzY2hlZHVsZTogaW50ICovCisJdTE2CQkJbG9hZFtQRVJJT0RJQ19TSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBlcmlvZGljOworCXUxNgkJCWZtaW5kZXg7CisKKwkvKiBwZXJpb2RpYyBzY2hlZHVsZTogaXNvY2hyb25vdXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWlzb2M7CisJaW50CQkJaXN0bF9mbGlwOjE7CisJaW50CQkJaXJxX2FjdGl2ZToxOworCisJLyogU2NoZWR1bGVzIGZvciB0aGUgY3VycmVudCBmcmFtZSAqLworCXN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlIGF0bF9xdWV1ZTsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSBpbnRsX3F1ZXVlOworCXN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlIGlzdGxfcXVldWVbMl07CisKKwkvKiBsaXN0IG9mIFBURHMgcmV0cmlldmVkIGZyb20gSEMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlbW92ZV9saXN0OworCWVudW0geworCQlJU1AxMzYyX0lOVF9TT0YsCisJCUlTUDEzNjJfSU5UX0lTVEwwLAorCQlJU1AxMzYyX0lOVF9JU1RMMSwKKwkJSVNQMTM2Ml9JTlRfRU9ULAorCQlJU1AxMzYyX0lOVF9PUFIsCisJCUlTUDEzNjJfSU5UX1NVU1AsCisJCUlTUDEzNjJfSU5UX0NMS1JEWSwKKwkJSVNQMTM2Ml9JTlRfSU5UTCwKKwkJSVNQMTM2Ml9JTlRfQVRMLAorCQlJU1AxMzYyX0lOVF9PVEcsCisJCU5VTV9JU1AxMzYyX0lSUVMKKwl9IElSUV9OQU1FUzsKKwl1bnNpZ25lZCBpbnQJCWlycV9zdGF0W05VTV9JU1AxMzYyX0lSUVNdOworCWludAkJCXJlcV9zZXJpYWw7Cit9OworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKklTUDEzNjJfSU5UX05BTUUoaW50IG4pCit7CisJc3dpdGNoIChuKSB7CisJY2FzZSBJU1AxMzYyX0lOVF9TT0Y6ICAgIHJldHVybiAiU09GIjsKKwljYXNlIElTUDEzNjJfSU5UX0lTVEwwOiAgcmV0dXJuICJJU1RMMCI7CisJY2FzZSBJU1AxMzYyX0lOVF9JU1RMMTogIHJldHVybiAiSVNUTDEiOworCWNhc2UgSVNQMTM2Ml9JTlRfRU9UOiAgICByZXR1cm4gIkVPVCI7CisJY2FzZSBJU1AxMzYyX0lOVF9PUFI6ICAgIHJldHVybiAiT1BSIjsKKwljYXNlIElTUDEzNjJfSU5UX1NVU1A6ICAgcmV0dXJuICJTVVNQIjsKKwljYXNlIElTUDEzNjJfSU5UX0NMS1JEWTogcmV0dXJuICJDTEtSRFkiOworCWNhc2UgSVNQMTM2Ml9JTlRfSU5UTDogICByZXR1cm4gIklOVEwiOworCWNhc2UgSVNQMTM2Ml9JTlRfQVRMOiAgICByZXR1cm4gIkFUTCI7CisJY2FzZSBJU1AxMzYyX0lOVF9PVEc6ICAgIHJldHVybiAiT1RHIjsKKwlkZWZhdWx0OiAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBBTElHTlNUQVQoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdm9pZCAqcHRyKQoreworCXVuc2lnbmVkIHAgPSAodW5zaWduZWQpcHRyOworCWlmICghKHAgJiAweGYpKQorCQlpc3AxMzYyX2hjZC0+c3RhdDE2Kys7CisJZWxzZSBpZiAoIShwICYgMHg3KSkKKwkJaXNwMTM2Ml9oY2QtPnN0YXQ4Kys7CisJZWxzZSBpZiAoIShwICYgMHgzKSkKKwkJaXNwMTM2Ml9oY2QtPnN0YXQ0Kys7CisJZWxzZSBpZiAoIShwICYgMHgxKSkKKwkJaXNwMTM2Ml9oY2QtPnN0YXQyKys7CisJZWxzZQorCQlpc3AxMzYyX2hjZC0+c3RhdDErKzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmhjZF90b19pc3AxMzYyX2hjZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IGlzcDEzNjJfaGNkICopIChoY2QtPmhjZF9wcml2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqaXNwMTM2Ml9oY2RfdG9faGNkKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKWlzcDEzNjJfaGNkLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCisjZGVmaW5lIGZyYW1lX2JlZm9yZShmMSwgZjIpCSgoczE2KSgodTE2KWYxIC0gKHUxNilmMikgPCAwKQorCisvKgorICogSVNQMTM2MiBIVyBJbnRlcmZhY2UKKyAqLworCisjaWZkZWYgSVNQMTM2Ml9ERUJVRworI2RlZmluZSBEQkcobGV2ZWwsIGZtdC4uLikgXAorCWRvIHsgXAorCQlpZiAoZGJnX2xldmVsID4gbGV2ZWwpIFwKKwkJCXByX2RlYnVnKGZtdCk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBfREJHKGxldmVsLCBmbXQuLi4pCVwKKwlkbyB7IFwKKwkJaWYgKGRiZ19sZXZlbCA+IGxldmVsKSBcCisJCQlwcmludGsoZm10KTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKQkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9EQkcgREJHCisjZW5kaWYKKworI2lmZGVmIFZFUkJPU0UKKyMgICAgZGVmaW5lIFZEQkcoZm10Li4uKQlEQkcoMywgZm10KQorI2Vsc2UKKyMgICAgZGVmaW5lIFZEQkcoZm10Li4uKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgUkVHSVNURVJTCisjICAgIGRlZmluZSBSREJHKGZtdC4uLikJREJHKDEsIGZtdCkKKyNlbHNlCisjICAgIGRlZmluZSBSREJHKGZtdC4uLikJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVSQl9UUkFDRQorI2RlZmluZSBVUkJfREJHKGZtdC4uLikJCURCRygwLCBmbXQpCisjZWxzZQorI2RlZmluZSBVUkJfREJHKGZtdC4uLikJCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKworI2lmIFVTRV9QTEFURk9STV9ERUxBWQorI2lmIFVTRV9OREVMQVkKKyNlcnJvciBVU0VfUExBVEZPUk1fREVMQVkgYW5kIFVTRV9OREVMQVkgZGVmaW5lZCBzaW11bHRhbmVvdXNseS4KKyNlbmRpZgorI2RlZmluZQlpc3AxMzYyX2RlbGF5KGgsIGQpCShoKS0+Ym9hcmQtPmRlbGF5KGlzcDEzNjJfaGNkX3RvX2hjZChoKS0+c2VsZi5jb250cm9sbGVyLCBkKQorI2VsaWYgVVNFX05ERUxBWQorI2RlZmluZQlpc3AxMzYyX2RlbGF5KGgsIGQpCW5kZWxheShkKQorI2Vsc2UKKyNkZWZpbmUJaXNwMTM2Ml9kZWxheShoLCBkKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIGdldF91cmIoZXApICh7CQkJCQkJCVwKKwlCVUdfT04obGlzdF9lbXB0eSgmZXAtPmhlcC0+dXJiX2xpc3QpKTsJCQkJXAorCWNvbnRhaW5lcl9vZihlcC0+aGVwLT51cmJfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiLCB1cmJfbGlzdCk7CVwKK30pCisKKy8qIGJhc2ljIGFjY2VzcyBmdW5jdGlvbnMgZm9yIElTUDEzNjIgY2hpcCByZWdpc3RlcnMgKi8KKy8qIE5PVEU6IFRoZSBjb250ZW50cyBvZiB0aGUgYWRkcmVzcyBwb2ludGVyIHJlZ2lzdGVyIGNhbm5vdCBiZSByZWFkIGJhY2shIFRoZSBkcml2ZXIgbXVzdCBlbnN1cmUsCisgKiB0aGF0IGFsbCByZWdpc3RlciBhY2Nlc3NlcyBhcmUgcGVyZm9ybWVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc2luY2UgdGhlIGludGVycnVwdAorICogaGFuZGxlciBoYXMgbm8gd2F5IG9mIHJlc3RvcmluZyB0aGUgcHJldmlvdXMgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGlzcDEzNjJfd3JpdGVfYWRkcihzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCBpc3AxMzYyX3JlZ190IHJlZykKK3sKKwkvKl9CVUdfT04oKHJlZyAmIElTUDEzNjJfUkVHX1dSSVRFX09GRlNFVCkgJiYgIShyZWcgJiBSRUdfQUNDRVNTX1cpKTsqLworCVJFR19BQ0NFU1NfVEVTVChyZWcpOworCV9CVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CisJRFVNTVlfREVMQVlfQUNDRVNTOworCXdyaXRldyhJU1AxMzYyX1JFR19OTyhyZWcpLCBpc3AxMzYyX2hjZC0+YWRkcl9yZWcpOworCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwlpc3AxMzYyX2RlbGF5KGlzcDEzNjJfaGNkLCAxKTsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml93cml0ZV9kYXRhMTYoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdTE2IHZhbCkKK3sKKwlfQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwl3cml0ZXcodmFsLCBpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworfQorCitzdGF0aWMgdTE2IGlzcDEzNjJfcmVhZF9kYXRhMTYoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwl1MTYgdmFsOworCisJX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJdmFsID0gcmVhZHcoaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGlzcDEzNjJfd3JpdGVfZGF0YTMyKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHUzMiB2YWwpCit7CisJX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKyNpZiBVU0VfMzJCSVQKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJd3JpdGVsKHZhbCwgaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKyNlbHNlCisJRFVNTVlfREVMQVlfQUNDRVNTOworCXdyaXRldygodTE2KXZhbCwgaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJd3JpdGV3KHZhbCA+PiAxNiwgaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdTMyIGlzcDEzNjJfcmVhZF9kYXRhMzIoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwl1MzIgdmFsOworCisJX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKyNpZiBVU0VfMzJCSVQKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJdmFsID0gcmVhZGwoaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKyNlbHNlCisJRFVNTVlfREVMQVlfQUNDRVNTOworCXZhbCA9ICh1MzIpcmVhZHcoaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJdmFsIHw9ICh1MzIpcmVhZHcoaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKSA8PCAxNjsKKyNlbmRpZgorCXJldHVybiB2YWw7Cit9CisKKy8qIHVzZSByZWFkc3cvd3JpdGVzdyB0byBhY2Nlc3MgdGhlIGZpZm8gd2hlbmV2ZXIgcG9zc2libGUgKi8KKy8qIGFzc3VtZSBIQ0RJUkRBVEEgb3IgWEZFUkNUUiAmIGFkZHJfcmVnIGhhdmUgYmVlbiBzZXQgdXAgKi8KK3N0YXRpYyB2b2lkIGlzcDEzNjJfcmVhZF9maWZvKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHZvaWQgKmJ1ZiwgdTE2IGxlbikKK3sKKwl1OCAqZHAgPSBidWY7CisJdTE2IGRhdGE7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuOworCisJX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKworCVJEQkcoIiVzOiBSZWFkaW5nICVkIGJ5dGUgZnJvbSBmaWZvIHRvIG1lbSBAICVwXG4iLCBfX2Z1bmNfXywgbGVuLCBidWYpOworI2lmIFVTRV8zMkJJVAorCWlmIChsZW4gPj0gNCkgeworCQlSREJHKCIlczogVXNpbmcgcmVhZHNsIGZvciAlZCBkd29yZHNcbiIsIF9fZnVuY19fLCBsZW4gPj4gMik7CisJCXJlYWRzbChpc3AxMzYyX2hjZC0+ZGF0YV9yZWcsIGRwLCBsZW4gPj4gMik7CisJCWRwICs9IGxlbiAmIH4zOworCQlsZW4gJj0gMzsKKwl9CisjZW5kaWYKKwlpZiAobGVuID49IDIpIHsKKwkJUkRCRygiJXM6IFVzaW5nIHJlYWRzdyBmb3IgJWQgd29yZHNcbiIsIF9fZnVuY19fLCBsZW4gPj4gMSk7CisJCWluc3coKHVuc2lnbmVkIGxvbmcpaXNwMTM2Ml9oY2QtPmRhdGFfcmVnLCBkcCwgbGVuID4+IDEpOworCQlkcCArPSBsZW4gJiB+MTsKKwkJbGVuICY9IDE7CisJfQorCisJQlVHX09OKGxlbiAmIH4xKTsKKwlpZiAobGVuID4gMCkgeworCQlkYXRhID0gaXNwMTM2Ml9yZWFkX2RhdGExNihpc3AxMzYyX2hjZCk7CisJCVJEQkcoIiVzOiBSZWFkaW5nIHRyYWlsaW5nIGJ5dGUgJTAyeCB0byBtZW0gQCAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJICAgICAodTgpZGF0YSwgKHUzMilkcCk7CisJCSpkcCA9ICh1OClkYXRhOworCX0KK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml93cml0ZV9maWZvKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHZvaWQgKmJ1ZiwgdTE2IGxlbikKK3sKKwl1OCAqZHAgPSBidWY7CisJdTE2IGRhdGE7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuOworCisJaWYgKCh1bnNpZ25lZClkcCAmIDB4MSkgeworCQkvKiBub3QgYWxpZ25lZCAqLworCQlmb3IgKDsgbGVuID4gMTsgbGVuIC09IDIpIHsKKwkJCWRhdGEgPSAqZHArKzsKKwkJCWRhdGEgfD0gKmRwKysgPDwgODsKKwkJCWlzcDEzNjJfd3JpdGVfZGF0YTE2KGlzcDEzNjJfaGNkLCBkYXRhKTsKKwkJfQorCQlpZiAobGVuKQorCQkJaXNwMTM2Ml93cml0ZV9kYXRhMTYoaXNwMTM2Ml9oY2QsICpkcCk7CisJCXJldHVybjsKKwl9CisKKwlfQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCisJUkRCRygiJXM6IFdyaXRpbmcgJWQgYnl0ZSB0byBmaWZvIGZyb20gbWVtb3J5IEAlcFxuIiwgX19mdW5jX18sIGxlbiwgYnVmKTsKKyNpZiBVU0VfMzJCSVQKKwlpZiAobGVuID49IDQpIHsKKwkJUkRCRygiJXM6IFVzaW5nIHdyaXRlc2wgZm9yICVkIGR3b3Jkc1xuIiwgX19mdW5jX18sIGxlbiA+PiAyKTsKKwkJd3JpdGVzbChpc3AxMzYyX2hjZC0+ZGF0YV9yZWcsIGRwLCBsZW4gPj4gMik7CisJCWRwICs9IGxlbiAmIH4zOworCQlsZW4gJj0gMzsKKwl9CisjZW5kaWYKKwlpZiAobGVuID49IDIpIHsKKwkJUkRCRygiJXM6IFVzaW5nIHdyaXRlc3cgZm9yICVkIHdvcmRzXG4iLCBfX2Z1bmNfXywgbGVuID4+IDEpOworCQlvdXRzdygodW5zaWduZWQgbG9uZylpc3AxMzYyX2hjZC0+ZGF0YV9yZWcsIGRwLCBsZW4gPj4gMSk7CisJCWRwICs9IGxlbiAmIH4xOworCQlsZW4gJj0gMTsKKwl9CisKKwlCVUdfT04obGVuICYgfjEpOworCWlmIChsZW4gPiAwKSB7CisJCS8qIGZpbmFsbHkgd3JpdGUgYW55IHRyYWlsaW5nIGJ5dGU7IHdlIGRvbid0IG5lZWQgdG8gY2FyZQorCQkgKiBhYm91dCB0aGUgaGlnaCBieXRlIG9mIHRoZSBsYXN0IHdvcmQgd3JpdHRlbgorCQkgKi8KKwkJZGF0YSA9ICh1MTYpKmRwOworCQlSREJHKCIlczogU2VuZGluZyB0cmFpbGluZyBieXRlICUwMnggZnJvbSBtZW0gQCAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJCWRhdGEsICh1MzIpZHApOworCQlpc3AxMzYyX3dyaXRlX2RhdGExNihpc3AxMzYyX2hjZCwgZGF0YSk7CisJfQorfQorCisjZGVmaW5lIGlzcDEzNjJfcmVhZF9yZWcxNihkLCByKQkJKHsJCQlcCisJdTE2IF9fdjsJCQkJCQkJXAorCVJFR19XSURUSF9URVNUKElTUDEzNjJfUkVHXyMjciwgUkVHX1dJRFRIXzE2KTsJCQlcCisJaXNwMTM2Ml93cml0ZV9hZGRyKGQsIElTUDEzNjJfUkVHXyMjcik7CQkJCVwKKwlfX3YgPSBpc3AxMzYyX3JlYWRfZGF0YTE2KGQpOwkJCQkJXAorCVJEQkcoIiVzOiBSZWFkICUwNHggZnJvbSAlc1slMDJ4XVxuIiwgX19mdW5jX18sIF9fdiwgI3IsCVwKKwkgICAgIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHXyMjcikpOwkJCQlcCisJX192OwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpc3AxMzYyX3JlYWRfcmVnMzIoZCwgcikJCSh7CQkJXAorCXUzMiBfX3Y7CQkJCQkJCVwKKwlSRUdfV0lEVEhfVEVTVChJU1AxMzYyX1JFR18jI3IsIFJFR19XSURUSF8zMik7CQkJXAorCWlzcDEzNjJfd3JpdGVfYWRkcihkLCBJU1AxMzYyX1JFR18jI3IpOwkJCQlcCisJX192ID0gaXNwMTM2Ml9yZWFkX2RhdGEzMihkKTsJCQkJCVwKKwlSREJHKCIlczogUmVhZCAlMDh4IGZyb20gJXNbJTAyeF1cbiIsIF9fZnVuY19fLCBfX3YsICNyLAlcCisJICAgICBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR18jI3IpKTsJCQkJXAorCV9fdjsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaXNwMTM2Ml93cml0ZV9yZWcxNihkLCByLCB2KQl7CQkJCQlcCisJUkVHX1dJRFRIX1RFU1QoSVNQMTM2Ml9SRUdfIyNyLCBSRUdfV0lEVEhfMTYpOwkJCQlcCisJaXNwMTM2Ml93cml0ZV9hZGRyKGQsIChJU1AxMzYyX1JFR18jI3IpIHwgSVNQMTM2Ml9SRUdfV1JJVEVfT0ZGU0VUKTsJXAorCWlzcDEzNjJfd3JpdGVfZGF0YTE2KGQsICh1MTYpKHYpKTsJCQkJCVwKKwlSREJHKCIlczogV3JvdGUgJTA0eCB0byAlc1slMDJ4XVxuIiwgX19mdW5jX18sICh1MTYpKHYpLCAjciwJXAorCSAgICAgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfIyNyKSk7CQkJCQlcCit9CisKKyNkZWZpbmUgaXNwMTM2Ml93cml0ZV9yZWczMihkLCByLCB2KQl7CQkJCQlcCisJUkVHX1dJRFRIX1RFU1QoSVNQMTM2Ml9SRUdfIyNyLCBSRUdfV0lEVEhfMzIpOwkJCQlcCisJaXNwMTM2Ml93cml0ZV9hZGRyKGQsIChJU1AxMzYyX1JFR18jI3IpIHwgSVNQMTM2Ml9SRUdfV1JJVEVfT0ZGU0VUKTsJXAorCWlzcDEzNjJfd3JpdGVfZGF0YTMyKGQsICh1MzIpKHYpKTsJCQkJCVwKKwlSREJHKCIlczogV3JvdGUgJTA4eCB0byAlc1slMDJ4XVxuIiwgX19mdW5jX18sICh1MzIpKHYpLCAjciwJXAorCSAgICAgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfIyNyKSk7CQkJCQlcCit9CisKKyNkZWZpbmUgaXNwMTM2Ml9zZXRfbWFzazE2KGQsIHIsIG0pIHsJCQlcCisJdTE2IF9fdjsJCQkJCVwKKwlfX3YgPSBpc3AxMzYyX3JlYWRfcmVnMTYoZCwgcik7CQkJXAorCWlmICgoX192IHwgbSkgIT0gX192KQkJCQlcCisJCWlzcDEzNjJfd3JpdGVfcmVnMTYoZCwgciwgX192IHwgbSk7CVwKK30KKworI2RlZmluZSBpc3AxMzYyX2Nscl9tYXNrMTYoZCwgciwgbSkgewkJCVwKKwl1MTYgX192OwkJCQkJXAorCV9fdiA9IGlzcDEzNjJfcmVhZF9yZWcxNihkLCByKTsJCQlcCisJaWYgKChfX3YgJiB+bSkgIT0gX192KQkJCVwKKwkJaXNwMTM2Ml93cml0ZV9yZWcxNihkLCByLCBfX3YgJiB+bSk7CVwKK30KKworI2RlZmluZSBpc3AxMzYyX3NldF9tYXNrMzIoZCwgciwgbSkgewkJCVwKKwl1MzIgX192OwkJCQkJXAorCV9fdiA9IGlzcDEzNjJfcmVhZF9yZWczMihkLCByKTsJCQlcCisJaWYgKChfX3YgfCBtKSAhPSBfX3YpCQkJCVwKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihkLCByLCBfX3YgfCBtKTsJXAorfQorCisjZGVmaW5lIGlzcDEzNjJfY2xyX21hc2szMihkLCByLCBtKSB7CQkJXAorCXUzMiBfX3Y7CQkJCQlcCisJX192ID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGQsIHIpOwkJCVwKKwlpZiAoKF9fdiAmIH5tKSAhPSBfX3YpCQkJXAorCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGQsIHIsIF9fdiAmIH5tKTsJXAorfQorCisjaWZkZWYgSVNQMTM2Ml9ERUJVRworI2RlZmluZSBpc3AxMzYyX3Nob3dfcmVnKGQsIHIpIHsJCQkJCQkJCVwKKwlpZiAoKElTUDEzNjJfUkVHXyMjciAmIFJFR19XSURUSF9NQVNLKSA9PSBSRUdfV0lEVEhfMzIpCQkJXAorCQlEQkcoMCwgIiUtMTJzWyUwMnhdOiAlMDh4XG4iLCAjciwJCQkJCVwKKwkJCUlTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHXyMjciksIGlzcDEzNjJfcmVhZF9yZWczMihkLCByKSk7CVwKKwllbHNlCQkJCQkJCQkJXAorCQlEQkcoMCwgIiUtMTJzWyUwMnhdOiAgICAgJTA0eFxuIiwgI3IsCQkJCQlcCisJCQlJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR18jI3IpLCBpc3AxMzYyX3JlYWRfcmVnMTYoZCwgcikpOwlcCit9CisjZWxzZQorI2RlZmluZSBpc3AxMzYyX3Nob3dfcmVnKGQsIHIpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSBpc3AxMzYyX3Nob3dfcmVncyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDUkVWSVNJT04pOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENDTURTVEFUKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0lOVFNUQVQpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDSU5URU5CKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0ZNSU5UVkwpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDRk1SRU0pOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDRk1OVU0pOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDTFNUSFJFU0gpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQSk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENSSERFU0NCKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMik7CisKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0hXQ0ZHKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0RNQUNGRyk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENYRkVSQ1RSKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ3VQSU5UKTsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJREJHKDAsICIlLTEyc1slMDJ4XTogICAgICUwNHhcbiIsICJIQ3VQSU5URU5CIiwKKwkJCSBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ3VQSU5URU5CKSwgaXNwMTM2Ml9oY2QtPmlycWVuYik7CisJZWxzZQorCQlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ3VQSU5URU5CKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0NISVBJRCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENTQ1JBVENIKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDRElSQUREUik7CisJLyogQWNjZXNzIHdvdWxkIGFkdmFuY2UgZmlmbworCSAqIGlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDRElSREFUQSk7CisJICovCisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJU1RMQlVGU1opOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDSVNUTFJBVEUpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDSU5UTEJVRlNaKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0lOVExCTEtTWik7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJTlRMRE9ORSk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJTlRMU0tJUCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJTlRMTEFTVCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJTlRMQ1VSUik7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENBVExCVUZTWik7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENBVExCTEtTWik7CisJLyogb25seSB2YWxpZCBhZnRlciBBVExfRE9ORSBpbnRlcnJ1cHQKKwkgKiBpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0FUTERPTkUpOworCSAqLworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQVRMU0tJUCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENBVExMQVNUKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0FUTENVUlIpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQVRMRFRDKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0FUTERUQ1RPKTsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml93cml0ZV9kaXJhZGRyKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHUxNiBvZmZzZXQsIHUxNiBsZW4pCit7CisJX0JVR19PTihvZmZzZXQgJiAxKTsKKwlfQlVHX09OKG9mZnNldCA+PSBJU1AxMzYyX0JVRl9TSVpFKTsKKwlfQlVHX09OKGxlbiA+IElTUDEzNjJfQlVGX1NJWkUpOworCV9CVUdfT04ob2Zmc2V0ICsgbGVuID4gSVNQMTM2Ml9CVUZfU0laRSk7CisJbGVuID0gKGxlbiArIDEpICYgfjE7CisKKwlpc3AxMzYyX2Nscl9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDRE1BQ0ZHLCBIQ0RNQUNGR19DVFJfRU5BQkxFKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0RJUkFERFIsCisJCQkgICAgSENESVJBRERSX0FERFIob2Zmc2V0KSB8IEhDRElSQUREUl9DT1VOVChsZW4pKTsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml9yZWFkX2J1ZmZlcihzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB2b2lkICpidWYsIHUxNiBvZmZzZXQsIGludCBsZW4pCit7CisJX0JVR19PTihvZmZzZXQgJiAxKTsKKworCWlzcDEzNjJfd3JpdGVfZGlyYWRkcihpc3AxMzYyX2hjZCwgb2Zmc2V0LCBsZW4pOworCisJREJHKDMsICIlczogUmVhZGluZyAlZCBieXRlIGZyb20gYnVmZmVyIEAlMDR4IHRvIG1lbW9yeSBAICUwOHhcbiIsIF9fZnVuY19fLAorCSAgICBsZW4sIG9mZnNldCwgKHUzMilidWYpOworCisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9FT1QpOworCV9XQVJOX09OKChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKKworCWlzcDEzNjJfd3JpdGVfYWRkcihpc3AxMzYyX2hjZCwgSVNQMTM2Ml9SRUdfSENESVJEQVRBKTsKKworCWlzcDEzNjJfcmVhZF9maWZvKGlzcDEzNjJfaGNkLCBidWYsIGxlbik7CisJX1dBUk5fT04oIShpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBIQ3VQSU5UX0VPVCk7CisJX1dBUk5fT04oKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0VPVCkpOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX3dyaXRlX2J1ZmZlcihzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB2b2lkICpidWYsIHUxNiBvZmZzZXQsIGludCBsZW4pCit7CisJX0JVR19PTihvZmZzZXQgJiAxKTsKKworCWlzcDEzNjJfd3JpdGVfZGlyYWRkcihpc3AxMzYyX2hjZCwgb2Zmc2V0LCBsZW4pOworCisJREJHKDMsICIlczogV3JpdGluZyAlZCBieXRlIHRvIGJ1ZmZlciBAJTA0eCBmcm9tIG1lbW9yeSBAICUwOHhcbiIsIF9fZnVuY19fLAorCSAgICBsZW4sIG9mZnNldCwgKHUzMilidWYpOworCisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9FT1QpOworCV9XQVJOX09OKChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKKworCWlzcDEzNjJfd3JpdGVfYWRkcihpc3AxMzYyX2hjZCwgSVNQMTM2Ml9SRUdfSENESVJEQVRBIHwgSVNQMTM2Ml9SRUdfV1JJVEVfT0ZGU0VUKTsKKwlpc3AxMzYyX3dyaXRlX2ZpZm8oaXNwMTM2Ml9oY2QsIGJ1ZiwgbGVuKTsKKworCV9XQVJOX09OKCEoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfRU9UKSk7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9FT1QpOworCV9XQVJOX09OKChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgZHVtcF9kYXRhKGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpZiAoZGJnX2xldmVsID4gMCkgeworCQlpbnQgazsKKwkJaW50IGxmID0gMDsKKworCQlmb3IgKGsgPSAwOyBrIDwgbGVuOyArK2spIHsKKwkJCWlmICghbGYpCisJCQkJREJHKDAsICIlMDR4OiIsIGspOworCQkJcHJpbnRrKCIgJTAyeCIsICgodTggKikgYnVmKVtrXSk7CisJCQlsZiA9IDE7CisJCQlpZiAoIWspCisJCQkJY29udGludWU7CisJCQlpZiAoayAlIDE2ID09IDE1KSB7CisJCQkJcHJpbnRrKCJcbiIpOworCQkJCWxmID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChrICUgOCA9PSA3KQorCQkJCXByaW50aygiICIpOworCQkJaWYgKGsgJSA0ID09IDMpCisJCQkJcHJpbnRrKCIgIik7CisJCX0KKwkJaWYgKGxmKQorCQkJcHJpbnRrKCJcbiIpOworCX0KK30KKworI2lmIGRlZmluZWQoSVNQMTM2Ml9ERUJVRykgJiYgZGVmaW5lZChQVERfVFJBQ0UpCisKK3N0YXRpYyB2b2lkIGR1bXBfcHRkKHN0cnVjdCBwdGQgKnB0ZCkKK3sKKwlEQkcoMCwgIkVQICVwOiBDQz0leCBFUD0lZCBESVI9JXggQ05UPSVkIExFTj0lZCBNUFM9JWQgVEdMPSV4IEFDVD0leCBGQT0lZCBTUEQ9JXggU0Y9JXggUFI9JXggTFNUPSV4XG4iLAorCSAgICBjb250YWluZXJfb2YocHRkLCBzdHJ1Y3QgaXNwMTM2Ml9lcCwgcHRkKSwKKwkgICAgUFREX0dFVF9DQyhwdGQpLCBQVERfR0VUX0VQKHB0ZCksIFBURF9HRVRfRElSKHB0ZCksCisJICAgIFBURF9HRVRfQ09VTlQocHRkKSwgUFREX0dFVF9MRU4ocHRkKSwgUFREX0dFVF9NUFMocHRkKSwKKwkgICAgUFREX0dFVF9UT0dHTEUocHRkKSwgUFREX0dFVF9BQ1RJVkUocHRkKSwgUFREX0dFVF9GQShwdGQpLAorCSAgICBQVERfR0VUX1NQRChwdGQpLCBQVERfR0VUX1NGX0lOVChwdGQpLCBQVERfR0VUX1BSKHB0ZCksIFBURF9HRVRfTEFTVChwdGQpKTsKKwlEQkcoMCwgIiAgJTA0eCAlMDR4ICUwNHggJTA0eFxuIiwgcHRkLT5jb3VudCwgcHRkLT5tcHMsIHB0ZC0+bGVuLCBwdGQtPmZhZGRyKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9wdGRfb3V0X2RhdGEoc3RydWN0IHB0ZCAqcHRkLCB1OCAqYnVmKQoreworCWlmIChkYmdfbGV2ZWwgPiAwKSB7CisJCWlmIChQVERfR0VUX0RJUihwdGQpICE9IFBURF9ESVJfSU4gJiYgUFREX0dFVF9MRU4ocHRkKSkgeworCQkJREJHKDAsICItLW91dC0+XG4iKTsKKwkJCWR1bXBfZGF0YShidWYsIFBURF9HRVRfTEVOKHB0ZCkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX3B0ZF9pbl9kYXRhKHN0cnVjdCBwdGQgKnB0ZCwgdTggKmJ1ZikKK3sKKwlpZiAoZGJnX2xldmVsID4gMCkgeworCQlpZiAoUFREX0dFVF9ESVIocHRkKSA9PSBQVERfRElSX0lOICYmIFBURF9HRVRfQ09VTlQocHRkKSkgeworCQkJREJHKDAsICI8LS1pbi0tXG4iKTsKKwkJCWR1bXBfZGF0YShidWYsIFBURF9HRVRfQ09VTlQocHRkKSk7CisJCX0KKwkJREJHKDAsICItLS0tLVxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX3B0ZF9xdWV1ZShzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxKQoreworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlpbnQgZGJnID0gZGJnX2xldmVsOworCisJZGJnX2xldmVsID0gMTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVwLCAmZXBxLT5hY3RpdmUsIGFjdGl2ZSkgeworCQlkdW1wX3B0ZCgmZXAtPnB0ZCk7CisJCWR1bXBfZGF0YShlcC0+ZGF0YSwgZXAtPmxlbmd0aCk7CisJfQorCWRiZ19sZXZlbCA9IGRiZzsKK30KKyNlbHNlCisjZGVmaW5lIGR1bXBfcHRkKHB0ZCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVtcF9wdGRfaW5fZGF0YShwdGQsIGJ1ZikJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGR1bXBfcHRkX291dF9kYXRhKHB0ZCwgYnVmKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVtcF9wdGRfZGF0YShwdGQsIGJ1ZikJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkdW1wX3B0ZF9xdWV1ZShlcHEpCQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCmluZGV4IDE1NDM4NDYuLjk2MDBhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKQEAgLTM4Niw2ICszODYsMTAgQEAKIAkJaHdtb2RlIHw9IEhXX0RBQ0tfUE9MX0hJR0g7CiAJaWYgKHByaXYtPmRldmZsYWdzICYgSVNQMTc2MF9GTEFHX0RSRVFfUE9MX0hJR0gpCiAJCWh3bW9kZSB8PSBIV19EUkVRX1BPTF9ISUdIOworCWlmIChwcml2LT5kZXZmbGFncyAmIElTUDE3NjBfRkxBR19JTlRSX1BPTF9ISUdIKQorCQlod21vZGUgfD0gSFdfSU5UUl9ISUdIX0FDVDsKKwlpZiAocHJpdi0+ZGV2ZmxhZ3MgJiBJU1AxNzYwX0ZMQUdfSU5UUl9FREdFX1RSSUcpCisJCWh3bW9kZSB8PSBIV19JTlRSX0VER0VfVFJJRzsKIAogCS8qCiAJICogV2UgaGF2ZSB0byBzZXQgdGhpcyBmaXJzdCBpbiBjYXNlIHdlJ3JlIGluIDE2LWJpdCBtb2RlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCmluZGV4IDQ2MmY0OTQuLjY5MzFlZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKQEAgLTE0Miw2ICsxNDIsOCBAQAogI2RlZmluZSBJU1AxNzYwX0ZMQUdfREFDS19QT0xfSElHSAkweDAwMDAwMDEwIC8qIERBQ0sgYWN0aXZlIGhpZ2ggKi8KICNkZWZpbmUgSVNQMTc2MF9GTEFHX0RSRVFfUE9MX0hJR0gJMHgwMDAwMDAyMCAvKiBEUkVRIGFjdGl2ZSBoaWdoICovCiAjZGVmaW5lIElTUDE3NjBfRkxBR19JU1AxNzYxCQkweDAwMDAwMDQwIC8qIENoaXAgaXMgSVNQMTc2MSAqLworI2RlZmluZSBJU1AxNzYwX0ZMQUdfSU5UUl9QT0xfSElHSAkweDAwMDAwMDgwIC8qIEludGVycnVwdCBwb2xhcml0eSBhY3RpdmUgaGlnaCAqLworI2RlZmluZSBJU1AxNzYwX0ZMQUdfSU5UUl9FREdFX1RSSUcJMHgwMDAwMDEwMCAvKiBJbnRlcnJ1cHQgZWRnZSB0cmlnZ2VyZWQgKi8KIAogLyogY2hpcCBtZW1vcnkgbWFuYWdlbWVudCAqLwogc3RydWN0IG1lbW9yeV9jaHVuayB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCmluZGV4IGQ0ZmVlYmYuLjFjOWY5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCkBAIC0zLDYgKzMsNyBAQAogICogQ3VycmVudGx5IHRoZXJlIGlzIHN1cHBvcnQgZm9yCiAgKiAtIE9wZW5GaXJtd2FyZQogICogLSBQQ0kKKyAqIC0gUERFViAoZ2VuZXJpYyBwbGF0Zm9ybSBkZXZpY2UgY2VudHJhbGl6ZWQgZHJpdmVyIG1vZGVsKQogICoKICAqIChjKSAyMDA3IFNlYmFzdGlhbiBTaWV3aW9yIDxiaWdlYXN5QGxpbnV0cm9uaXguZGU+CiAgKgpAQCAtMTEsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2lzcDE3NjAuaD4KIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAjaW5jbHVkZSAiaXNwMTc2MC1oY2QuaCIKQEAgLTMwOCw2ICszMTAsOCBAQAogCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXM7CiAJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCXN0cnVjdCBpc3AxNzYwX3BsYXRmb3JtX2RhdGEgKnByaXYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQ7CiAKIAltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTMzMCw4ICszMzQsMjMgQEAKIAl9CiAJaXJxZmxhZ3MgfD0gaXJxX3Jlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKIAorCWlmIChwcml2KSB7CisJCWlmIChwcml2LT5pc19pc3AxNzYxKQorCQkJZGV2ZmxhZ3MgfD0gSVNQMTc2MF9GTEFHX0lTUDE3NjE7CisJCWlmIChwcml2LT5idXNfd2lkdGhfMTYpCisJCQlkZXZmbGFncyB8PSBJU1AxNzYwX0ZMQUdfQlVTX1dJRFRIXzE2OworCQlpZiAocHJpdi0+cG9ydDFfb3RnKQorCQkJZGV2ZmxhZ3MgfD0gSVNQMTc2MF9GTEFHX09UR19FTjsKKwkJaWYgKHByaXYtPmFuYWxvZ19vYykKKwkJCWRldmZsYWdzIHw9IElTUDE3NjBfRkxBR19BTkFMT0dfT0M7CisJCWlmIChwcml2LT5kYWNrX3BvbGFyaXR5X2hpZ2gpCisJCQlkZXZmbGFncyB8PSBJU1AxNzYwX0ZMQUdfREFDS19QT0xfSElHSDsKKwkJaWYgKHByaXYtPmRyZXFfcG9sYXJpdHlfaGlnaCkKKwkJCWRldmZsYWdzIHw9IElTUDE3NjBfRkxBR19EUkVRX1BPTF9ISUdIOworCX0KKwogCWhjZCA9IGlzcDE3NjBfcmVnaXN0ZXIobWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplLCBpcnFfcmVzLT5zdGFydCwKLQkJCSAgICAgICBpcnFmbGFncywgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldiksIDApOworCQkJICAgICAgIGlycWZsYWdzLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZGV2ZmxhZ3MpOwogCWlmIChJU19FUlIoaGNkKSkgewogCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgdGhlIEhDRCBkZXZpY2VcbiIpOwogCQlyZXQgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggYmI1ZTZmNi4uN2NjZmZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAlhdDkxX3N0YXJ0X2hjKHBkZXYpOwogCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CiAKLQlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBJUlFGX0RJU0FCTEVEKTsKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBJUlFGX1NIQVJFRCk7CiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKaW5kZXggMmFjNGUwMi4uZTQzODAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwpAQCAtMjQ4LDEwICsyNDgsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CkBAIC0yNzQsMTAgKzI3Myw2IEBACiAJb2hjaV93cml0ZWwob2hjaSwgT0hDSV9JTlRSX01JRSwgJm9oY2ktPnJlZ3MtPmludHJkaXNhYmxlKTsKIAkodm9pZClvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CiAKLQkvKiBtYWtlIHN1cmUgc25hcHNob3QgYmVpbmcgcmVzdW1lZCByZS1lbnVtZXJhdGVzIGV2ZXJ5dGhpbmcgKi8KLQlpZiAobWVzc2FnZS5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQotCQlvaGNpX3VzYl9yZXNldChvaGNpKTsKLQogCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CiAKIAlhdTF4eHhfc3RvcF9vaGMoKTsKQEAgLTI4Nyw5ICsyODIsOSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWF1MXh4eF9zdGFydF9vaGMoKTsKIApAQCAtMjk4LDIwICsyOTMsMjYgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYXUxeHh4X29oY2lfcG1vcHMgPSB7CisJLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwKK307CisKKyNkZWZpbmUgQVUxWFhYX09IQ0lfUE1PUFMgJmF1MXh4eF9vaGNpX3Btb3BzCisKICNlbHNlCi0jZGVmaW5lIG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lIE5VTEwKKyNkZWZpbmUgQVUxWFhYX09IQ0lfUE1PUFMgTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2F1MXh4eF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3JlbW92ZSwKIAkuc2h1dGRvd24JPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAotCS5zdXNwZW5kCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImF1MXh4eC1vaGNpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IEFVMVhYWF9PSENJX1BNT1BTLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKaW5kZXggYjBkYmY0MS4uNGU2ODE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwpAQCAtMTg4LDcgKzE4OCw2IEBACiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBvaGNpX2hjZCAqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7Ci0JaW50IHN0YXR1czsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKIAkJbXNsZWVwKDUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDU4MTUxNjguLjc4YmI3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggZTQ0ZGMyYy4uYjUyOTRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMTc3LDkgKzE3NywxMyBAQAogCiAJaWYgKGluZi0+ZmxhZ3MgJiBOT19PQ19QUk9URUNUSU9OKQogCQl1aGNyaGRhIHw9IFVIQ1JIREFfTk9DUDsKKwllbHNlCisJCXVoY3JoZGEgJj0gflVIQ1JIREFfTk9DUDsKIAogCWlmIChpbmYtPmZsYWdzICYgT0NfTU9ERV9QRVJQT1JUKQogCQl1aGNyaGRhIHw9IFVIQ1JIREFfT0NQTTsKKwllbHNlCisJCXVoY3JoZGEgJj0gflVIQ1JIREFfT0NQTTsKIAogCWlmIChpbmYtPnBvd2VyX29uX2RlbGF5KSB7CiAJCXVoY3JoZGEgJj0gflVIQ1JIREFfUE9UUEdUKDB4ZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKaW5kZXggYzJkODBmOC4uMTZmZWNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCkBAIC00MTgsNyArNDE4LDcgQEAKIAkJaXNfb3V0ID0gIShlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTik7CiAKIAkJLyogRklYTUUgdXNiY29yZSBjaGFuZ2VzIGRldi0+ZGV2bnVtIGJlZm9yZSBTRVRfQUREUkVTUwotCQkgKiBzdWNlZWRzIC4uLiBvdGhlcndpc2Ugd2Ugd291bGRuJ3QgbmVlZCAicGlwZSIuCisJCSAqIHN1Y2NlZWRzIC4uLiBvdGhlcndpc2Ugd2Ugd291bGRuJ3QgbmVlZCAicGlwZSIuCiAJCSAqLwogCQlpbmZvID0gdXNiX3BpcGVkZXZpY2UgKHBpcGUpOwogCQllZC0+dHlwZSA9IHVzYl9waXBldHlwZShwaXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCmluZGV4IDVhYzQ4OWUuLjUwZjU3ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggODNiNWY5Yy4uMjNjZjNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTQ3NSw0ICs0NzUsNCBAQAogCWVsc2UgaWYgKHBkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCX1hIQ0kpCiAJCXF1aXJrX3VzYl9oYW5kb2ZmX3hoY2kocGRldik7CiB9Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya191c2JfZWFybHlfaGFuZG9mZik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggYTk0OTI1OS4uNWIyMmE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC03MTksOCArNzE5LDEyIEBACiAJCS8qIHBvcnQgc3RhdHVzIHNlZW1zIHdlaXJkIHVudGlsIGFmdGVyIHJlc2V0LCBzbwogCQkgKiBmb3JjZSB0aGUgcmVzZXQgYW5kIG1ha2Uga2h1YmQgY2xlYW4gdXAgbGF0ZXIuCiAJCSAqLwotCQlzbDgxMS0+cG9ydDEgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pCi0JCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT04pOworCQlpZiAoc2w4MTEtPnN0YXRfaW5zcm12ICYgMSkKKwkJCXNsODExLT5wb3J0MSB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTjsKKwkJZWxzZQorCQkJc2w4MTEtPnBvcnQxICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT04pOworCisJCXNsODExLT5wb3J0MSB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOwogCiAJfSBlbHNlIGlmIChpcnFzdGF0ICYgU0wxMUhfSU5UTUFTS19SRCkgewogCQlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKaW5kZXggNjRlNTdiZi4uYWNkNTgyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCkBAIC0xNDIyLDcgKzE0MjIsNiBAQAogCQlnb3RvIGVycl9zdWJtaXRfZmFpbGVkOwogCiAJLyogQWRkIHRoaXMgVVJCIHRvIHRoZSBRSCAqLwotCXVyYnAtPnFoID0gcWg7CiAJbGlzdF9hZGRfdGFpbCgmdXJicC0+bm9kZSwgJnFoLT5xdWV1ZSk7CiAKIAkvKiBJZiB0aGUgbmV3IFVSQiBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgb25lIG9uIHRoaXMgUUggdGhlbiBlaXRoZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYwppbmRleCBjMjA1MDc4Li5jNjMyNDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCkBAIC0yMjcsMTEgKzIyNywyMSBAQAogCS8qCiAJICogTm93IHRoYXQgdGhlIEFTTCBpcyB1cGRhdGVkLCBjb21wbGV0ZSB0aGUgcmVtb3ZhbCBvZiBhbnkKIAkgKiByZW1vdmVkIHFzZXRzLgorCSAqCisJICogSWYgdGhlIHFzZXQgd2FzIHRvIGJlIHJlc2V0LCBkbyBzbyBhbmQgcmVpbnNlcnQgaXQgaW50byB0aGUKKwkgKiBBU0wgaWYgaXQgaGFzIHBlbmRpbmcgdHJhbnNmZXJzLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJndoYy0+bG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocXNldCwgdCwgJndoYy0+YXN5bmNfcmVtb3ZlZF9saXN0LCBsaXN0X25vZGUpIHsKIAkJcXNldF9yZW1vdmVfY29tcGxldGUod2hjLCBxc2V0KTsKKwkJaWYgKHFzZXQtPnJlc2V0KSB7CisJCQlxc2V0X3Jlc2V0KHdoYywgcXNldCk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJnFzZXQtPnN0ZHMpKSB7CisJCQkJYXNsX3FzZXRfaW5zZXJ0X2JlZ2luKHdoYywgcXNldCk7CisJCQkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJndoYy0+YXN5bmNfd29yayk7CisJCQl9CisJCX0KIAl9CiAKIAlzcGluX3VubG9ja19pcnEoJndoYy0+bG9jayk7CkBAIC0yNjcsNyArMjc3LDcgQEAKIAllbHNlCiAJCWVyciA9IHFzZXRfYWRkX3VyYih3aGMsIHFzZXQsIHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFlcnIpIHsKLQkJaWYgKCFxc2V0LT5pbl9zd19saXN0KQorCQlpZiAoIXFzZXQtPmluX3N3X2xpc3QgJiYgIXFzZXQtPnJlbW92ZSkKIAkJCWFzbF9xc2V0X2luc2VydF9iZWdpbih3aGMsIHFzZXQpOwogCX0gZWxzZQogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCgmd2hjLT53dXNiaGMudXNiX2hjZCwgdXJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9oY2QuYwppbmRleCBlMDE5YTUwLi42ODdiNjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2hjZC5jCkBAIC0xOTIsMTkgKzE5MiwyMyBAQAogCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOwogCXN0cnVjdCB3aGMgKndoYyA9IHd1c2JoY190b193aGMod3VzYmhjKTsKIAlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKIAogCXFzZXQgPSBlcC0+aGNwcml2OwogCWlmIChxc2V0KSB7CiAJCXFzZXQtPnJlbW92ZSA9IDE7CisJCXFzZXQtPnJlc2V0ID0gMTsKIAogCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmZXAtPmRlc2MpCiAJCSAgICB8fCB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZlcC0+ZGVzYykpCiAJCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd2hjLT5hc3luY193b3JrKTsKIAkJZWxzZQogCQkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJndoYy0+cGVyaW9kaWNfd29yayk7Ci0KLQkJcXNldF9yZXNldCh3aGMsIHFzZXQpOwogCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwppbmRleCBmZjRlZjllLi5hOWUwNWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCkBAIC0yNTUsMTEgKzI1NSwyMSBAQAogCS8qCiAJICogTm93IHRoYXQgdGhlIFBaTCBpcyB1cGRhdGVkLCBjb21wbGV0ZSB0aGUgcmVtb3ZhbCBvZiBhbnkKIAkgKiByZW1vdmVkIHFzZXRzLgorCSAqCisJICogSWYgdGhlIHFzZXQgd2FzIHRvIGJlIHJlc2V0LCBkbyBzbyBhbmQgcmVpbnNlcnQgaXQgaW50byB0aGUKKwkgKiBQWkwgaWYgaXQgaGFzIHBlbmRpbmcgdHJhbnNmZXJzLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJndoYy0+bG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocXNldCwgdCwgJndoYy0+cGVyaW9kaWNfcmVtb3ZlZF9saXN0LCBsaXN0X25vZGUpIHsKIAkJcXNldF9yZW1vdmVfY29tcGxldGUod2hjLCBxc2V0KTsKKwkJaWYgKHFzZXQtPnJlc2V0KSB7CisJCQlxc2V0X3Jlc2V0KHdoYywgcXNldCk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJnFzZXQtPnN0ZHMpKSB7CisJCQkJcXNldF9pbnNlcnRfaW5fc3dfbGlzdCh3aGMsIHFzZXQpOworCQkJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3aGMtPnBlcmlvZGljX3dvcmspOworCQkJfQorCQl9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZ3aGMtPmxvY2spOwpAQCAtMjk1LDcgKzMwNSw3IEBACiAJZWxzZQogCQllcnIgPSBxc2V0X2FkZF91cmIod2hjLCBxc2V0LCB1cmIsIEdGUF9BVE9NSUMpOwogCWlmICghZXJyKSB7Ci0JCWlmICghcXNldC0+aW5fc3dfbGlzdCkKKwkJaWYgKCFxc2V0LT5pbl9zd19saXN0ICYmICFxc2V0LT5yZW1vdmUpCiAJCQlxc2V0X2luc2VydF9pbl9zd19saXN0KHdoYywgcXNldCk7CiAJfSBlbHNlCiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKCZ3aGMtPnd1c2JoYy51c2JfaGNkLCB1cmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMKaW5kZXggNjQwYjM4Zi4uMWI5ZGMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jCkBAIC0xMDMsNyArMTAzLDYgQEAKIHZvaWQgcXNldF9jbGVhcihzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKIHsKIAlxc2V0LT50ZF9zdGFydCA9IHFzZXQtPnRkX2VuZCA9IHFzZXQtPm50ZHMgPSAwOwotCXFzZXQtPnJlbW92ZSA9IDA7CiAKIAlxc2V0LT5xaC5saW5rID0gY3B1X3RvX2xlMzIoUUhfTElOS19OVERTKDgpIHwgUUhfTElOS19UKTsKIAlxc2V0LT5xaC5zdGF0dXMgPSBxc2V0LT5xaC5zdGF0dXMgJiBRSF9TVEFUVVNfU0VRX01BU0s7CkBAIC0xMjUsNyArMTI0LDcgQEAKICAqLwogdm9pZCBxc2V0X3Jlc2V0KHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0KQogewotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnFzZXQtPnJlbW92ZV9jb21wbGV0ZSk7CisJcXNldC0+cmVzZXQgPSAwOwogCiAJcXNldC0+cWguc3RhdHVzICY9IH5RSF9TVEFUVVNfU0VRX01BU0s7CiAJcXNldC0+cWguY3VyX3dpbmRvdyA9IGNwdV90b19sZTMyKCgxIDw8IHFzZXQtPm1heF9idXJzdCkgLSAxKTsKQEAgLTE1Niw2ICsxNTUsNyBAQAogCiB2b2lkIHFzZXRfcmVtb3ZlX2NvbXBsZXRlKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0KQogeworCXFzZXQtPnJlbW92ZSA9IDA7CiAJbGlzdF9kZWxfaW5pdCgmcXNldC0+bGlzdF9ub2RlKTsKIAljb21wbGV0ZSgmcXNldC0+cmVtb3ZlX2NvbXBsZXRlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS93aGNpLWhjLmggYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvd2hjaS1oYy5oCmluZGV4IDc5NGRiYTAuLmU4ZDAwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS93aGNpLWhjLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3doY2ktaGMuaApAQCAtMjY0LDYgKzI2NCw3IEBACiAJdW5zaWduZWQgaW5fc3dfbGlzdDoxOwogCXVuc2lnbmVkIGluX2h3X2xpc3Q6MTsKIAl1bnNpZ25lZCByZW1vdmU6MTsKKwl1bnNpZ25lZCByZXNldDoxOwogCXN0cnVjdCB1cmIgKnBhdXNlX2FmdGVyX3VyYjsKIAlzdHJ1Y3QgY29tcGxldGlvbiByZW1vdmVfY29tcGxldGU7CiAJaW50IG1heF9idXJzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwppbmRleCA3MDVlMzQzLi4zMzEyOGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCkBAIC00MTMsNyArNDEzLDggQEAKIAlpbnQgaTsKIAogCXN0cnVjdCB4aGNpX3Nsb3RfY3R4ICpzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGN0eCk7Ci0JZG1hX2FkZHJfdCBkbWEgPSBjdHgtPmRtYSArICgodW5zaWduZWQgbG9uZylzbG90X2N0eCAtICh1bnNpZ25lZCBsb25nKWN0eCk7CisJZG1hX2FkZHJfdCBkbWEgPSBjdHgtPmRtYSArCisJCSgodW5zaWduZWQgbG9uZylzbG90X2N0eCAtICh1bnNpZ25lZCBsb25nKWN0eC0+Ynl0ZXMpOwogCWludCBjc3ogPSBIQ0NfNjRCWVRFX0NPTlRFWFQoeGhjaS0+aGNjX3BhcmFtcyk7CiAKIAl4aGNpX2RiZyh4aGNpLCAiU2xvdCBDb250ZXh0OlxuIik7CkBAIC00NTksNyArNDYwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGFzdF9lcF9jdHg7ICsraSkgewogCQlzdHJ1Y3QgeGhjaV9lcF9jdHggKmVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBjdHgsIGkpOwogCQlkbWFfYWRkcl90IGRtYSA9IGN0eC0+ZG1hICsKLQkJCSgodW5zaWduZWQgbG9uZyllcF9jdHggLSAodW5zaWduZWQgbG9uZyljdHgpOworCQkJKCh1bnNpZ25lZCBsb25nKWVwX2N0eCAtICh1bnNpZ25lZCBsb25nKWN0eC0+Ynl0ZXMpOwogCiAJCXhoY2lfZGJnKHhoY2ksICJFbmRwb2ludCAlMDJkIENvbnRleHQ6XG4iLCBpKTsKIAkJeGhjaV9kYmcoeGhjaSwgIkAlcCAodmlydCkgQCUwOGxseCAoZG1hKSAlIzA4eCAtIGVwX2luZm9cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKaW5kZXggODE2YzM5Yy4uOTk5MTFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYwpAQCAtMjIsMTIgKzIyLDE4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAjaW5jbHVkZSAieGhjaS5oIgogCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNhcmFoIFNoYXJwIgogI2RlZmluZSBEUklWRVJfREVTQyAiJ2VYdGVuc2libGUnIEhvc3QgQ29udHJvbGxlciAoeEhDKSBEcml2ZXIiCiAKKy8qIFNvbWUgMC45NSBoYXJkd2FyZSBjYW4ndCBoYW5kbGUgdGhlIGNoYWluIGJpdCBvbiBhIExpbmsgVFJCIGJlaW5nIGNsZWFyZWQgKi8KK3N0YXRpYyBpbnQgbGlua19xdWlyazsKK21vZHVsZV9wYXJhbShsaW5rX3F1aXJrLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobGlua19xdWlyaywgIkRvbid0IGNsZWFyIHRoZSBjaGFpbiBiaXQgb24gYSBsaW5rIFRSQiIpOworCiAvKiBUT0RPOiBjb3BpZWQgZnJvbSBlaGNpLWhjZC5jIC0gY2FuIHRoaXMgYmUgcmVmYWN0b3JlZD8gKi8KIC8qCiAgKiBoYW5kc2hha2UgLSBzcGluIHJlYWRpbmcgaGMgdW50aWwgaGFuZHNoYWtlIGNvbXBsZXRlcyBvciBmYWlscwpAQCAtMjE0LDYgKzIyMCwxMiBAQAogCiAJeGhjaV9kYmcoeGhjaSwgInhoY2lfaW5pdFxuIik7CiAJc3Bpbl9sb2NrX2luaXQoJnhoY2ktPmxvY2spOworCWlmIChsaW5rX3F1aXJrKSB7CisJCXhoY2lfZGJnKHhoY2ksICJRVUlSSzogTm90IGNsZWFyaW5nIExpbmsgVFJCIGNoYWluIGJpdHMuXG4iKTsKKwkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfTElOS19UUkJfUVVJUks7CisJfSBlbHNlIHsKKwkJeGhjaV9kYmcoeGhjaSwgInhIQ0kgZG9lc24ndCBuZWVkIGxpbmsgVFJCIFFVSVJLXG4iKTsKKwl9CiAJcmV0dmFsID0geGhjaV9tZW1faW5pdCh4aGNpLCBHRlBfS0VSTkVMKTsKIAl4aGNpX2RiZyh4aGNpLCAiRmluaXNoZWQgeGhjaV9pbml0XG4iKTsKIApAQCAtMzM5LDEzICszNTEsMTQgQEAKIAl4aGNpX2RiZ19yaW5nX3B0cnMoeGhjaSwgeGhjaS0+Y21kX3JpbmcpOwogCXhoY2lfZGJnX2NtZF9wdHJzKHhoY2kpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSENfU0xPVFM7ICsraSkgewotCQlpZiAoeGhjaS0+ZGV2c1tpXSkgewotCQkJZm9yIChqID0gMDsgaiA8IDMxOyArK2opIHsKLQkJCQlpZiAoeGhjaS0+ZGV2c1tpXS0+ZXBfcmluZ3Nbal0pIHsKLQkJCQkJeGhjaV9kYmcoeGhjaSwgIkRldiAlZCBlbmRwb2ludCByaW5nICVkOlxuIiwgaSwgaik7Ci0JCQkJCXhoY2lfZGVidWdfc2VnbWVudCh4aGNpLCB4aGNpLT5kZXZzW2ldLT5lcF9yaW5nc1tqXS0+ZGVxX3NlZyk7Ci0JCQkJfQotCQkJfQorCQlpZiAoIXhoY2ktPmRldnNbaV0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IDMxOyArK2opIHsKKwkJCXN0cnVjdCB4aGNpX3JpbmcgKnJpbmcgPSB4aGNpLT5kZXZzW2ldLT5lcHNbal0ucmluZzsKKwkJCWlmICghcmluZykKKwkJCQljb250aW51ZTsKKwkJCXhoY2lfZGJnKHhoY2ksICJEZXYgJWQgZW5kcG9pbnQgcmluZyAlZDpcbiIsIGksIGopOworCQkJeGhjaV9kZWJ1Z19zZWdtZW50KHhoY2ksIHJpbmctPmRlcV9zZWcpOwogCQl9CiAJfQogCkBAIC01NTUsMTMgKzU2OCwyMiBAQAogCXJldHVybiAxIDw8ICh4aGNpX2dldF9lbmRwb2ludF9pbmRleChkZXNjKSArIDEpOwogfQogCisvKiBGaW5kIHRoZSBmbGFnIGZvciB0aGlzIGVuZHBvaW50IChmb3IgdXNlIGluIHRoZSBjb250cm9sIGNvbnRleHQpLiAgVXNlIHRoZQorICogZW5kcG9pbnQgaW5kZXggdG8gY3JlYXRlIGEgYml0bWFzay4gIFRoZSBzbG90IGNvbnRleHQgaXMgYml0IDAsIGVuZHBvaW50IDAgaXMKKyAqIGJpdCAxLCBldGMuCisgKi8KK3Vuc2lnbmVkIGludCB4aGNpX2dldF9lbmRwb2ludF9mbGFnX2Zyb21faW5kZXgodW5zaWduZWQgaW50IGVwX2luZGV4KQoreworCXJldHVybiAxIDw8IChlcF9pbmRleCArIDEpOworfQorCiAvKiBDb21wdXRlIHRoZSBsYXN0IHZhbGlkIGVuZHBvaW50IGNvbnRleHQgaW5kZXguICBCYXNpY2FsbHksIHRoaXMgaXMgdGhlCiAgKiBlbmRwb2ludCBpbmRleCBwbHVzIG9uZS4gIEZvciBzbG90IGNvbnRleHRzIHdpdGggbW9yZSB0aGFuIHZhbGlkIGVuZHBvaW50LAogICogd2UgZmluZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0IGluIHRoZSBhZGRlZCBjb250ZXh0cyBmbGFncy4KICAqIGUuZy4gZXAgMSBJTiAod2l0aCBlcG51bSAweDgxKSA9PiBhZGRlZF9jdHhzID0gMGIxMDAwCiAgKiBmbHMoMGIxMDAwKSA9IDQsIGJ1dCB0aGUgZW5kcG9pbnQgY29udGV4dCBpbmRleCBpcyAzLCBzbyBzdWJ0cmFjdCBvbmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludCh1MzIgYWRkZWRfY3R4cykKK3Vuc2lnbmVkIGludCB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQodTMyIGFkZGVkX2N0eHMpCiB7CiAJcmV0dXJuIGZscyhhZGRlZF9jdHhzKSAtIDE7CiB9CkBAIC01ODksNiArNjExLDcxIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgeGhjaV9jb25maWd1cmVfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZCwKKwkJYm9vbCBjdHhfY2hhbmdlLCBib29sIG11c3Rfc3VjY2VlZCk7CisKKy8qCisgKiBGdWxsIHNwZWVkIGRldmljZXMgbWF5IGhhdmUgYSBtYXggcGFja2V0IHNpemUgZ3JlYXRlciB0aGFuIDggYnl0ZXMsIGJ1dCB0aGUKKyAqIFVTQiBjb3JlIGRvZXNuJ3Qga25vdyB0aGF0IHVudGlsIGl0IHJlYWRzIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIHRoZQorICogZGVzY3JpcHRvci4gIElmIHRoZSB1c2JfZGV2aWNlJ3MgbWF4IHBhY2tldCBzaXplIGNoYW5nZXMgYWZ0ZXIgdGhhdCBwb2ludCwKKyAqIHdlIG5lZWQgdG8gaXNzdWUgYW4gZXZhbHVhdGUgY29udGV4dCBjb21tYW5kIGFuZCB3YWl0IG9uIGl0LgorICovCitzdGF0aWMgaW50IHhoY2lfY2hlY2tfbWF4cGFja2V0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdW5zaWduZWQgaW50IHNsb3RfaWQsCisJCXVuc2lnbmVkIGludCBlcF9pbmRleCwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmluX2N0eDsKKwlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpvdXRfY3R4OworCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKKwlzdHJ1Y3QgeGhjaV9lcF9jdHggKmVwX2N0eDsKKwlpbnQgbWF4X3BhY2tldF9zaXplOworCWludCBod19tYXhfcGFja2V0X3NpemU7CisJaW50IHJldCA9IDA7CisKKwlvdXRfY3R4ID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+b3V0X2N0eDsKKwllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgb3V0X2N0eCwgZXBfaW5kZXgpOworCWh3X21heF9wYWNrZXRfc2l6ZSA9IE1BWF9QQUNLRVRfREVDT0RFRChlcF9jdHgtPmVwX2luZm8yKTsKKwltYXhfcGFja2V0X3NpemUgPSB1cmItPmRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemU7CisJaWYgKGh3X21heF9wYWNrZXRfc2l6ZSAhPSBtYXhfcGFja2V0X3NpemUpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIk1heCBQYWNrZXQgU2l6ZSBmb3IgZXAgMCBjaGFuZ2VkLlxuIik7CisJCXhoY2lfZGJnKHhoY2ksICJNYXggcGFja2V0IHNpemUgaW4gdXNiX2RldmljZSA9ICVkXG4iLAorCQkJCW1heF9wYWNrZXRfc2l6ZSk7CisJCXhoY2lfZGJnKHhoY2ksICJNYXggcGFja2V0IHNpemUgaW4geEhDSSBIVyA9ICVkXG4iLAorCQkJCWh3X21heF9wYWNrZXRfc2l6ZSk7CisJCXhoY2lfZGJnKHhoY2ksICJJc3N1aW5nIGV2YWx1YXRlIGNvbnRleHQgY29tbWFuZC5cbiIpOworCisJCS8qIFNldCB1cCB0aGUgbW9kaWZpZWQgY29udHJvbCBlbmRwb2ludCAwICovCisJCXhoY2lfZW5kcG9pbnRfY29weSh4aGNpLCB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHgsCisJCQkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+b3V0X2N0eCwgZXBfaW5kZXgpOworCQlpbl9jdHggPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHg7CisJCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBpbl9jdHgsIGVwX2luZGV4KTsKKwkJZXBfY3R4LT5lcF9pbmZvMiAmPSB+TUFYX1BBQ0tFVF9NQVNLOworCQllcF9jdHgtPmVwX2luZm8yIHw9IE1BWF9QQUNLRVQobWF4X3BhY2tldF9zaXplKTsKKworCQkvKiBTZXQgdXAgdGhlIGlucHV0IGNvbnRleHQgZmxhZ3MgZm9yIHRoZSBjb21tYW5kICovCisJCS8qIEZJWE1FOiBUaGlzIHdvbid0IHdvcmsgaWYgYSBub24tZGVmYXVsdCBjb250cm9sIGVuZHBvaW50CisJCSAqIGNoYW5nZXMgbWF4IHBhY2tldCBzaXplcy4KKwkJICovCisJCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwgaW5fY3R4KTsKKwkJY3RybF9jdHgtPmFkZF9mbGFncyA9IEVQMF9GTEFHOworCQljdHJsX2N0eC0+ZHJvcF9mbGFncyA9IDA7CisKKwkJeGhjaV9kYmcoeGhjaSwgIlNsb3QgJWQgaW5wdXQgY29udGV4dFxuIiwgc2xvdF9pZCk7CisJCXhoY2lfZGJnX2N0eCh4aGNpLCBpbl9jdHgsIGVwX2luZGV4KTsKKwkJeGhjaV9kYmcoeGhjaSwgIlNsb3QgJWQgb3V0cHV0IGNvbnRleHRcbiIsIHNsb3RfaWQpOworCQl4aGNpX2RiZ19jdHgoeGhjaSwgb3V0X2N0eCwgZXBfaW5kZXgpOworCisJCXJldCA9IHhoY2lfY29uZmlndXJlX2VuZHBvaW50KHhoY2ksIHVyYi0+ZGV2LCBOVUxMLAorCQkJCXRydWUsIGZhbHNlKTsKKworCQkvKiBDbGVhbiB1cCB0aGUgaW5wdXQgY29udGV4dCBmb3IgbGF0ZXIgdXNlIGJ5IGJhbmR3aWR0aAorCQkgKiBmdW5jdGlvbnMuCisJCSAqLworCQljdHJsX2N0eC0+YWRkX2ZsYWdzID0gU0xPVF9GTEFHOworCX0KKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogbm9uLWVycm9yIHJldHVybnMgYXJlIGEgcHJvbWlzZSB0byBnaXZlYmFjaygpIHRoZSB1cmIgbGF0ZXIKICAqIHdlIGRyb3Agb3duZXJzaGlwIHNvIG5leHQgb3duZXIgKG9yIHVyYiB1bmxpbmspIGNhbiBnZXQgaXQKQEAgLTYwMCwxMyArNjg3LDEzIEBACiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgaW50IHNsb3RfaWQsIGVwX2luZGV4OwogCisKIAlpZiAoIXVyYiB8fCB4aGNpX2NoZWNrX2FyZ3MoaGNkLCB1cmItPmRldiwgdXJiLT5lcCwgdHJ1ZSwgX19mdW5jX18pIDw9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc2xvdF9pZCA9IHVyYi0+ZGV2LT5zbG90X2lkOwogCWVwX2luZGV4ID0geGhjaV9nZXRfZW5kcG9pbnRfaW5kZXgoJnVyYi0+ZXAtPmRlc2MpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAlpZiAoIXhoY2ktPmRldnMgfHwgIXhoY2ktPmRldnNbc2xvdF9pZF0pIHsKIAkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKIAkJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAiV0FSTjogdXJiIHN1Ym1pdHRlZCBmb3IgZGV2IHdpdGggbm8gU2xvdCBJRFxuIik7CkBAIC02MTksMTkgKzcwNiwzOCBAQAogCQlyZXQgPSAtRVNIVVRET1dOOwogCQlnb3RvIGV4aXQ7CiAJfQotCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZ1cmItPmVwLT5kZXNjKSkKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmdXJiLT5lcC0+ZGVzYykpIHsKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBtYXggcGFja2V0IHNpemUgZm9yIHRoZSBkZWZhdWx0IGNvbnRyb2wKKwkJICogZW5kcG9pbnQgY2hhbmdlZCBkdXJpbmcgRlMgZGV2aWNlIGVudW1lcmF0aW9uCisJCSAqLworCQlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCQlyZXQgPSB4aGNpX2NoZWNrX21heHBhY2tldCh4aGNpLCBzbG90X2lkLAorCQkJCQllcF9pbmRleCwgdXJiKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwogCQkvKiBXZSBoYXZlIGEgc3BpbmxvY2sgYW5kIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIHdlIG11c3QgcGFzcwogCQkgKiBhdG9taWMgY29udGV4dCB0byB0aGlzIGZ1bmN0aW9uLCB3aGljaCBtYXkgYWxsb2NhdGUgbWVtb3J5LgogCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAkJcmV0ID0geGhjaV9xdWV1ZV9jdHJsX3R4KHhoY2ksIEdGUF9BVE9NSUMsIHVyYiwKIAkJCQlzbG90X2lkLCBlcF9pbmRleCk7Ci0JZWxzZSBpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmdXJiLT5lcC0+ZGVzYykpCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJnVyYi0+ZXAtPmRlc2MpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IHhoY2lfcXVldWVfYnVsa190eCh4aGNpLCBHRlBfQVRPTUlDLCB1cmIsCiAJCQkJc2xvdF9pZCwgZXBfaW5kZXgpOwotCWVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KCZ1cmItPmVwLT5kZXNjKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSB4aGNpX3F1ZXVlX2ludHJfdHgoeGhjaSwgR0ZQX0FUT01JQywgdXJiLAorCQkJCXNsb3RfaWQsIGVwX2luZGV4KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CiAJCXJldCA9IC1FSU5WQUw7CisJfQogZXhpdDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjc0LDYgKzc4MCw3IEBACiAJc3RydWN0IHhoY2lfdGQgKnRkOwogCXVuc2lnbmVkIGludCBlcF9pbmRleDsKIAlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOwogCiAJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKQEAgLTY4NiwxNyArNzkzLDE4IEBACiAJeGhjaV9kYmcoeGhjaSwgIkV2ZW50IHJpbmc6XG4iKTsKIAl4aGNpX2RlYnVnX3JpbmcoeGhjaSwgeGhjaS0+ZXZlbnRfcmluZyk7CiAJZXBfaW5kZXggPSB4aGNpX2dldF9lbmRwb2ludF9pbmRleCgmdXJiLT5lcC0+ZGVzYyk7Ci0JZXBfcmluZyA9IHhoY2ktPmRldnNbdXJiLT5kZXYtPnNsb3RfaWRdLT5lcF9yaW5nc1tlcF9pbmRleF07CisJZXAgPSAmeGhjaS0+ZGV2c1t1cmItPmRldi0+c2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJZXBfcmluZyA9IGVwLT5yaW5nOwogCXhoY2lfZGJnKHhoY2ksICJFbmRwb2ludCByaW5nOlxuIik7CiAJeGhjaV9kZWJ1Z19yaW5nKHhoY2ksIGVwX3JpbmcpOwogCXRkID0gKHN0cnVjdCB4aGNpX3RkICopIHVyYi0+aGNwcml2OwogCi0JZXBfcmluZy0+Y2FuY2Vsc19wZW5kaW5nKys7Ci0JbGlzdF9hZGRfdGFpbCgmdGQtPmNhbmNlbGxlZF90ZF9saXN0LCAmZXBfcmluZy0+Y2FuY2VsbGVkX3RkX2xpc3QpOworCWVwLT5jYW5jZWxzX3BlbmRpbmcrKzsKKwlsaXN0X2FkZF90YWlsKCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QsICZlcC0+Y2FuY2VsbGVkX3RkX2xpc3QpOwogCS8qIFF1ZXVlIGEgc3RvcCBlbmRwb2ludCBjb21tYW5kLCBidXQgb25seSBpZiB0aGlzIGlzCiAJICogdGhlIGZpcnN0IGNhbmNlbGxhdGlvbiB0byBiZSBoYW5kbGVkLgogCSAqLwotCWlmIChlcF9yaW5nLT5jYW5jZWxzX3BlbmRpbmcgPT0gMSkgeworCWlmIChlcC0+Y2FuY2Vsc19wZW5kaW5nID09IDEpIHsKIAkJeGhjaV9xdWV1ZV9zdG9wX2VuZHBvaW50KHhoY2ksIHVyYi0+ZGV2LT5zbG90X2lkLCBlcF9pbmRleCk7CiAJCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CiAJfQpAQCAtOTMwLDYgKzEwMzgsMTQxIEBACiAJfQogfQogCitzdGF0aWMgaW50IHhoY2lfY29uZmlndXJlX2VuZHBvaW50X3Jlc3VsdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgKmNtZF9zdGF0dXMpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAoKmNtZF9zdGF0dXMpIHsKKwljYXNlIENPTVBfRU5PTUVNOgorCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiTm90IGVub3VnaCBob3N0IGNvbnRyb2xsZXIgcmVzb3VyY2VzICIKKwkJCQkiZm9yIG5ldyBkZXZpY2Ugc3RhdGUuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJLyogRklYTUU6IGNhbiB3ZSBhbGxvY2F0ZSBtb3JlIHJlc291cmNlcyBmb3IgdGhlIEhDPyAqLworCQlicmVhazsKKwljYXNlIENPTVBfQldfRVJSOgorCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiTm90IGVub3VnaCBiYW5kd2lkdGggIgorCQkJCSJmb3IgbmV3IGRldmljZSBzdGF0ZS5cbiIpOworCQlyZXQgPSAtRU5PU1BDOworCQkvKiBGSVhNRTogY2FuIHdlIGdvIGJhY2sgdG8gdGhlIG9sZCBzdGF0ZT8gKi8KKwkJYnJlYWs7CisJY2FzZSBDT01QX1RSQl9FUlI6CisJCS8qIHRoZSBIQ0Qgc2V0IHVwIHNvbWV0aGluZyB3cm9uZyAqLworCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiRVJST1I6IEVuZHBvaW50IGRyb3AgZmxhZyA9IDAsICIKKwkJCQkiYWRkIGZsYWcgPSAxLCAiCisJCQkJImFuZCBlbmRwb2ludCBpcyBub3QgZGlzYWJsZWQuXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBDT01QX1NVQ0NFU1M6CisJCWRldl9kYmcoJnVkZXYtPmRldiwgIlN1Y2Nlc3NmdWwgRW5kcG9pbnQgQ29uZmlndXJlIGNvbW1hbmRcbiIpOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl4aGNpX2Vycih4aGNpLCAiRVJST1I6IHVuZXhwZWN0ZWQgY29tbWFuZCBjb21wbGV0aW9uICIKKwkJCQkiY29kZSAweCV4LlxuIiwgKmNtZF9zdGF0dXMpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4aGNpX2V2YWx1YXRlX2NvbnRleHRfcmVzdWx0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCAqY21kX3N0YXR1cykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldiA9IHhoY2ktPmRldnNbdWRldi0+c2xvdF9pZF07CisKKwlzd2l0Y2ggKCpjbWRfc3RhdHVzKSB7CisJY2FzZSBDT01QX0VJTlZBTDoKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIldBUk46IHhIQ0kgZHJpdmVyIHNldHVwIGludmFsaWQgZXZhbHVhdGUgIgorCQkJCSJjb250ZXh0IGNvbW1hbmQuXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBDT01QX0VCQURTTFQ6CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJXQVJOOiBzbG90IG5vdCBlbmFibGVkIGZvciIKKwkJCQkiZXZhbHVhdGUgY29udGV4dCBjb21tYW5kLlxuIik7CisJY2FzZSBDT01QX0NUWF9TVEFURToKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIldBUk46IGludmFsaWQgY29udGV4dCBzdGF0ZSBmb3IgIgorCQkJCSJldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmQuXG4iKTsKKwkJeGhjaV9kYmdfY3R4KHhoY2ksIHZpcnRfZGV2LT5vdXRfY3R4LCAxKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBDT01QX1NVQ0NFU1M6CisJCWRldl9kYmcoJnVkZXYtPmRldiwgIlN1Y2Nlc3NmdWwgZXZhbHVhdGUgY29udGV4dCBjb21tYW5kXG4iKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJeGhjaV9lcnIoeGhjaSwgIkVSUk9SOiB1bmV4cGVjdGVkIGNvbW1hbmQgY29tcGxldGlvbiAiCisJCQkJImNvZGUgMHgleC5cbiIsICpjbWRfc3RhdHVzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIElzc3VlIGEgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgb3IgZXZhbHVhdGUgY29udGV4dCBjb21tYW5kCisgKiBhbmQgd2FpdCBmb3IgaXQgdG8gZmluaXNoLgorICovCitzdGF0aWMgaW50IHhoY2lfY29uZmlndXJlX2VuZHBvaW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQsCisJCWJvb2wgY3R4X2NoYW5nZSwgYm9vbCBtdXN0X3N1Y2NlZWQpCit7CisJaW50IHJldDsKKwlpbnQgdGltZWxlZnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICppbl9jdHg7CisJc3RydWN0IGNvbXBsZXRpb24gKmNtZF9jb21wbGV0aW9uOworCWludCAqY21kX3N0YXR1czsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCXZpcnRfZGV2ID0geGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXTsKKwlpZiAoY29tbWFuZCkgeworCQlpbl9jdHggPSBjb21tYW5kLT5pbl9jdHg7CisJCWNtZF9jb21wbGV0aW9uID0gY29tbWFuZC0+Y29tcGxldGlvbjsKKwkJY21kX3N0YXR1cyA9ICZjb21tYW5kLT5zdGF0dXM7CisJCWNvbW1hbmQtPmNvbW1hbmRfdHJiID0geGhjaS0+Y21kX3JpbmctPmVucXVldWU7CisJCWxpc3RfYWRkX3RhaWwoJmNvbW1hbmQtPmNtZF9saXN0LCAmdmlydF9kZXYtPmNtZF9saXN0KTsKKwl9IGVsc2UgeworCQlpbl9jdHggPSB2aXJ0X2Rldi0+aW5fY3R4OworCQljbWRfY29tcGxldGlvbiA9ICZ2aXJ0X2Rldi0+Y21kX2NvbXBsZXRpb247CisJCWNtZF9zdGF0dXMgPSAmdmlydF9kZXYtPmNtZF9zdGF0dXM7CisJfQorCisJaWYgKCFjdHhfY2hhbmdlKQorCQlyZXQgPSB4aGNpX3F1ZXVlX2NvbmZpZ3VyZV9lbmRwb2ludCh4aGNpLCBpbl9jdHgtPmRtYSwKKwkJCQl1ZGV2LT5zbG90X2lkLCBtdXN0X3N1Y2NlZWQpOworCWVsc2UKKwkJcmV0ID0geGhjaV9xdWV1ZV9ldmFsdWF0ZV9jb250ZXh0KHhoY2ksIGluX2N0eC0+ZG1hLAorCQkJCXVkZXYtPnNsb3RfaWQpOworCWlmIChyZXQgPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FIGFsbG9jYXRlIGEgbmV3IHJpbmcgc2VnbWVudFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl4aGNpX3JpbmdfY21kX2RiKHhoY2kpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIFdhaXQgZm9yIHRoZSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCB0byBjb21wbGV0ZSAqLworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQljbWRfY29tcGxldGlvbiwKKwkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAodGltZWxlZnQgPD0gMCkgeworCQl4aGNpX3dhcm4oeGhjaSwgIiVzIHdoaWxlIHdhaXRpbmcgZm9yICVzIGNvbW1hbmRcbiIsCisJCQkJdGltZWxlZnQgPT0gMCA/ICJUaW1lb3V0IiA6ICJTaWduYWwiLAorCQkJCWN0eF9jaGFuZ2UgPT0gMCA/CisJCQkJCSJjb25maWd1cmUgZW5kcG9pbnQiIDoKKwkJCQkJImV2YWx1YXRlIGNvbnRleHQiKTsKKwkJLyogRklYTUUgY2FuY2VsIHRoZSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCAqLworCQlyZXR1cm4gLUVUSU1FOworCX0KKworCWlmICghY3R4X2NoYW5nZSkKKwkJcmV0dXJuIHhoY2lfY29uZmlndXJlX2VuZHBvaW50X3Jlc3VsdCh4aGNpLCB1ZGV2LCBjbWRfc3RhdHVzKTsKKwlyZXR1cm4geGhjaV9ldmFsdWF0ZV9jb250ZXh0X3Jlc3VsdCh4aGNpLCB1ZGV2LCBjbWRfc3RhdHVzKTsKK30KKwogLyogQ2FsbGVkIGFmdGVyIG9uZSBvciBtb3JlIGNhbGxzIHRvIHhoY2lfYWRkX2VuZHBvaW50KCkgb3IKICAqIHhoY2lfZHJvcF9lbmRwb2ludCgpLiAgSWYgdGhpcyBjYWxsIGZhaWxzLCB0aGUgVVNCIGNvcmUgaXMgZXhwZWN0ZWQKICAqIHRvIGNhbGwgeGhjaV9yZXNldF9iYW5kd2lkdGgoKS4KQEAgLTk0NCw4ICsxMTg3LDYgQEAKIHsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgdGltZWxlZnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2k7CiAJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UJKnZpcnRfZGV2OwogCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKQEAgLTk3NSw1NiArMTIxNiw4IEBACiAJeGhjaV9kYmdfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgsCiAJCQlMQVNUX0NUWF9UT19FUF9OVU0oc2xvdF9jdHgtPmRldl9pbmZvKSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCXJldCA9IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgtPmRtYSwKLQkJCXVkZXYtPnNsb3RfaWQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FIGFsbG9jYXRlIGEgbmV3IHJpbmcgc2VnbWVudFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQl4aGNpX3JpbmdfY21kX2RiKHhoY2kpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQotCS8qIFdhaXQgZm9yIHRoZSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCB0byBjb21wbGV0ZSAqLwotCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCi0JCQkmdmlydF9kZXYtPmNtZF9jb21wbGV0aW9uLAotCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwotCWlmICh0aW1lbGVmdCA8PSAwKSB7Ci0JCXhoY2lfd2Fybih4aGNpLCAiJXMgd2hpbGUgd2FpdGluZyBmb3IgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmRcbiIsCi0JCQkJdGltZWxlZnQgPT0gMCA/ICJUaW1lb3V0IiA6ICJTaWduYWwiKTsKLQkJLyogRklYTUUgY2FuY2VsIHRoZSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCAqLwotCQlyZXR1cm4gLUVUSU1FOwotCX0KLQotCXN3aXRjaCAodmlydF9kZXYtPmNtZF9zdGF0dXMpIHsKLQljYXNlIENPTVBfRU5PTUVNOgotCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiTm90IGVub3VnaCBob3N0IGNvbnRyb2xsZXIgcmVzb3VyY2VzICIKLQkJCQkiZm9yIG5ldyBkZXZpY2Ugc3RhdGUuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJLyogRklYTUU6IGNhbiB3ZSBhbGxvY2F0ZSBtb3JlIHJlc291cmNlcyBmb3IgdGhlIEhDPyAqLwotCQlicmVhazsKLQljYXNlIENPTVBfQldfRVJSOgotCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiTm90IGVub3VnaCBiYW5kd2lkdGggIgotCQkJCSJmb3IgbmV3IGRldmljZSBzdGF0ZS5cbiIpOwotCQlyZXQgPSAtRU5PU1BDOwotCQkvKiBGSVhNRTogY2FuIHdlIGdvIGJhY2sgdG8gdGhlIG9sZCBzdGF0ZT8gKi8KLQkJYnJlYWs7Ci0JY2FzZSBDT01QX1RSQl9FUlI6Ci0JCS8qIHRoZSBIQ0Qgc2V0IHVwIHNvbWV0aGluZyB3cm9uZyAqLwotCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiRVJST1I6IEVuZHBvaW50IGRyb3AgZmxhZyA9IDAsIGFkZCBmbGFnID0gMSwgIgotCQkJCSJhbmQgZW5kcG9pbnQgaXMgbm90IGRpc2FibGVkLlxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgQ09NUF9TVUNDRVNTOgotCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJTdWNjZXNzZnVsIEVuZHBvaW50IENvbmZpZ3VyZSBjb21tYW5kXG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJeGhjaV9lcnIoeGhjaSwgIkVSUk9SOiB1bmV4cGVjdGVkIGNvbW1hbmQgY29tcGxldGlvbiAiCi0JCQkJImNvZGUgMHgleC5cbiIsIHZpcnRfZGV2LT5jbWRfc3RhdHVzKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQorCXJldCA9IHhoY2lfY29uZmlndXJlX2VuZHBvaW50KHhoY2ksIHVkZXYsIE5VTEwsCisJCQlmYWxzZSwgZmFsc2UpOwogCWlmIChyZXQpIHsKIAkJLyogQ2FsbGVlIHNob3VsZCBjYWxsIHJlc2V0X2JhbmR3aWR0aCgpICovCiAJCXJldHVybiByZXQ7CkBAIC0xMDM3LDEwICsxMjMwLDEwIEBACiAJeGhjaV96ZXJvX2luX2N0eCh4aGNpLCB2aXJ0X2Rldik7CiAJLyogRnJlZSBhbnkgb2xkIHJpbmdzICovCiAJZm9yIChpID0gMTsgaSA8IDMxOyArK2kpIHsKLQkJaWYgKHZpcnRfZGV2LT5uZXdfZXBfcmluZ3NbaV0pIHsKLQkJCXhoY2lfcmluZ19mcmVlKHhoY2ksIHZpcnRfZGV2LT5lcF9yaW5nc1tpXSk7Ci0JCQl2aXJ0X2Rldi0+ZXBfcmluZ3NbaV0gPSB2aXJ0X2Rldi0+bmV3X2VwX3JpbmdzW2ldOwotCQkJdmlydF9kZXYtPm5ld19lcF9yaW5nc1tpXSA9IE5VTEw7CisJCWlmICh2aXJ0X2Rldi0+ZXBzW2ldLm5ld19yaW5nKSB7CisJCQl4aGNpX3JpbmdfZnJlZSh4aGNpLCB2aXJ0X2Rldi0+ZXBzW2ldLnJpbmcpOworCQkJdmlydF9kZXYtPmVwc1tpXS5yaW5nID0gdmlydF9kZXYtPmVwc1tpXS5uZXdfcmluZzsKKwkJCXZpcnRfZGV2LT5lcHNbaV0ubmV3X3JpbmcgPSBOVUxMOwogCQl9CiAJfQogCkBAIC0xMDY3LDE0ICsxMjYwLDkzIEBACiAJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdOwogCS8qIEZyZWUgYW55IHJpbmdzIGFsbG9jYXRlZCBmb3IgYWRkZWQgZW5kcG9pbnRzICovCiAJZm9yIChpID0gMDsgaSA8IDMxOyArK2kpIHsKLQkJaWYgKHZpcnRfZGV2LT5uZXdfZXBfcmluZ3NbaV0pIHsKLQkJCXhoY2lfcmluZ19mcmVlKHhoY2ksIHZpcnRfZGV2LT5uZXdfZXBfcmluZ3NbaV0pOwotCQkJdmlydF9kZXYtPm5ld19lcF9yaW5nc1tpXSA9IE5VTEw7CisJCWlmICh2aXJ0X2Rldi0+ZXBzW2ldLm5ld19yaW5nKSB7CisJCQl4aGNpX3JpbmdfZnJlZSh4aGNpLCB2aXJ0X2Rldi0+ZXBzW2ldLm5ld19yaW5nKTsKKwkJCXZpcnRfZGV2LT5lcHNbaV0ubmV3X3JpbmcgPSBOVUxMOwogCQl9CiAJfQogCXhoY2lfemVyb19pbl9jdHgoeGhjaSwgdmlydF9kZXYpOwogfQogCitzdGF0aWMgdm9pZCB4aGNpX3NldHVwX2lucHV0X2N0eF9mb3JfY29uZmlnX2VwKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqaW5fY3R4LAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpvdXRfY3R4LAorCQl1MzIgYWRkX2ZsYWdzLCB1MzIgZHJvcF9mbGFncykKK3sKKwlzdHJ1Y3QgeGhjaV9pbnB1dF9jb250cm9sX2N0eCAqY3RybF9jdHg7CisJY3RybF9jdHggPSB4aGNpX2dldF9pbnB1dF9jb250cm9sX2N0eCh4aGNpLCBpbl9jdHgpOworCWN0cmxfY3R4LT5hZGRfZmxhZ3MgPSBhZGRfZmxhZ3M7CisJY3RybF9jdHgtPmRyb3BfZmxhZ3MgPSBkcm9wX2ZsYWdzOworCXhoY2lfc2xvdF9jb3B5KHhoY2ksIGluX2N0eCwgb3V0X2N0eCk7CisJY3RybF9jdHgtPmFkZF9mbGFncyB8PSBTTE9UX0ZMQUc7CisKKwl4aGNpX2RiZyh4aGNpLCAiSW5wdXQgQ29udGV4dDpcbiIpOworCXhoY2lfZGJnX2N0eCh4aGNpLCBpbl9jdHgsIHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludChhZGRfZmxhZ3MpKTsKK30KKwordm9pZCB4aGNpX3NldHVwX2lucHV0X2N0eF9mb3JfcXVpcmsoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAorCQlzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpkZXFfc3RhdGUpCit7CisJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqaW5fY3R4OworCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4OworCXUzMiBhZGRlZF9jdHhzOworCWRtYV9hZGRyX3QgYWRkcjsKKworCXhoY2lfZW5kcG9pbnRfY29weSh4aGNpLCB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHgsCisJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5vdXRfY3R4LCBlcF9pbmRleCk7CisJaW5fY3R4ID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+aW5fY3R4OworCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBpbl9jdHgsIGVwX2luZGV4KTsKKwlhZGRyID0geGhjaV90cmJfdmlydF90b19kbWEoZGVxX3N0YXRlLT5uZXdfZGVxX3NlZywKKwkJCWRlcV9zdGF0ZS0+bmV3X2RlcV9wdHIpOworCWlmIChhZGRyID09IDApIHsKKwkJeGhjaV93YXJuKHhoY2ksICJXQVJOIENhbm5vdCBzdWJtaXQgY29uZmlnIGVwIGFmdGVyICIKKwkJCQkicmVzZXQgZXAgY29tbWFuZFxuIik7CisJCXhoY2lfd2Fybih4aGNpLCAiV0FSTiBkZXEgc2VnID0gJXAsIGRlcSBwdHIgPSAlcFxuIiwKKwkJCQlkZXFfc3RhdGUtPm5ld19kZXFfc2VnLAorCQkJCWRlcV9zdGF0ZS0+bmV3X2RlcV9wdHIpOworCQlyZXR1cm47CisJfQorCWVwX2N0eC0+ZGVxID0gYWRkciB8IGRlcV9zdGF0ZS0+bmV3X2N5Y2xlX3N0YXRlOworCisJYWRkZWRfY3R4cyA9IHhoY2lfZ2V0X2VuZHBvaW50X2ZsYWdfZnJvbV9pbmRleChlcF9pbmRleCk7CisJeGhjaV9zZXR1cF9pbnB1dF9jdHhfZm9yX2NvbmZpZ19lcCh4aGNpLCB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHgsCisJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5vdXRfY3R4LCBhZGRlZF9jdHhzLCBhZGRlZF9jdHhzKTsKK30KKwordm9pZCB4aGNpX2NsZWFudXBfc3RhbGxlZF9yaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHVuc2lnbmVkIGludCBlcF9pbmRleCkKK3sKKwlzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlIGRlcV9zdGF0ZTsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcDsKKworCXhoY2lfZGJnKHhoY2ksICJDbGVhbmluZyB1cCBzdGFsbGVkIGVuZHBvaW50IHJpbmdcbiIpOworCWVwID0gJnhoY2ktPmRldnNbdWRldi0+c2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJLyogV2UgbmVlZCB0byBtb3ZlIHRoZSBIVydzIGRlcXVldWUgcG9pbnRlciBwYXN0IHRoaXMgVEQsCisJICogb3IgaXQgd2lsbCBhdHRlbXB0IHRvIHJlc2VuZCBpdCBvbiB0aGUgbmV4dCBkb29yYmVsbCByaW5nLgorCSAqLworCXhoY2lfZmluZF9uZXdfZGVxdWV1ZV9zdGF0ZSh4aGNpLCB1ZGV2LT5zbG90X2lkLAorCQkJZXBfaW5kZXgsIGVwLT5zdG9wcGVkX3RkLAorCQkJJmRlcV9zdGF0ZSk7CisKKwkvKiBIVyB3aXRoIHRoZSByZXNldCBlbmRwb2ludCBxdWlyayB3aWxsIHVzZSB0aGUgc2F2ZWQgZGVxdWV1ZSBzdGF0ZSB0bworCSAqIGlzc3VlIGEgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgbGF0ZXIuCisJICovCisJaWYgKCEoeGhjaS0+cXVpcmtzICYgWEhDSV9SRVNFVF9FUF9RVUlSSykpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIlF1ZXVlaW5nIG5ldyBkZXF1ZXVlIHN0YXRlXG4iKTsKKwkJeGhjaV9xdWV1ZV9uZXdfZGVxdWV1ZV9zdGF0ZSh4aGNpLCB1ZGV2LT5zbG90X2lkLAorCQkJCWVwX2luZGV4LCAmZGVxX3N0YXRlKTsKKwl9IGVsc2UgeworCQkvKiBCZXR0ZXIgaG9wZSBubyBvbmUgdXNlcyB0aGUgaW5wdXQgY29udGV4dCBiZXR3ZWVuIG5vdyBhbmQgdGhlCisJCSAqIHJlc2V0IGVuZHBvaW50IGNvbXBsZXRpb24hCisJCSAqLworCQl4aGNpX2RiZyh4aGNpLCAiU2V0dGluZyB1cCBpbnB1dCBjb250ZXh0IGZvciAiCisJCQkJImNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kXG4iKTsKKwkJeGhjaV9zZXR1cF9pbnB1dF9jdHhfZm9yX3F1aXJrKHhoY2ksIHVkZXYtPnNsb3RfaWQsCisJCQkJZXBfaW5kZXgsICZkZXFfc3RhdGUpOworCX0KK30KKwogLyogRGVhbCB3aXRoIHN0YWxsZWQgZW5kcG9pbnRzLiAgVGhlIGNvcmUgc2hvdWxkIGhhdmUgc2VudCB0aGUgY29udHJvbCBtZXNzYWdlCiAgKiB0byBjbGVhciB0aGUgaGFsdCBjb25kaXRpb24uICBIb3dldmVyLCB3ZSBuZWVkIHRvIG1ha2UgdGhlIHhIQ0kgaGFyZHdhcmUKICAqIHJlc2V0IGl0cyBzZXF1ZW5jZSBudW1iZXIsIHNpbmNlIGEgZGV2aWNlIHdpbGwgZXhwZWN0IGEgc2VxdWVuY2UgbnVtYmVyIG9mCkBAIC0xMDg5LDggKzEzNjEsNyBAQAogCXVuc2lnbmVkIGludCBlcF9pbmRleDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7Ci0Jc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSBkZXFfc3RhdGU7Ci0Jc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICp2aXJ0X2VwOwogCiAJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CiAJdWRldiA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKSBlcC0+aGNwcml2OwpAQCAtMTEwMCwxMiArMTM3MSwxNiBAQAogCWlmICghZXAtPmhjcHJpdikKIAkJcmV0dXJuOwogCWVwX2luZGV4ID0geGhjaV9nZXRfZW5kcG9pbnRfaW5kZXgoJmVwLT5kZXNjKTsKLQllcF9yaW5nID0geGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXS0+ZXBfcmluZ3NbZXBfaW5kZXhdOwotCWlmICghZXBfcmluZy0+c3RvcHBlZF90ZCkgeworCXZpcnRfZXAgPSAmeGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKKwlpZiAoIXZpcnRfZXAtPnN0b3BwZWRfdGQpIHsKIAkJeGhjaV9kYmcoeGhjaSwgIkVuZHBvaW50IDB4JXggbm90IGhhbHRlZCwgcmVmdXNpbmcgdG8gcmVzZXQuXG4iLAogCQkJCWVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwogCQlyZXR1cm47CiAJfQorCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZlcC0+ZGVzYykpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIkNvbnRyb2wgZW5kcG9pbnQgc3RhbGwgYWxyZWFkeSBoYW5kbGVkLlxuIik7CisJCXJldHVybjsKKwl9CiAKIAl4aGNpX2RiZyh4aGNpLCAiUXVldWVpbmcgcmVzZXQgZW5kcG9pbnQgY29tbWFuZFxuIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKQEAgLTExMTYsMTcgKzEzOTEsOCBAQAogCSAqIGNvbW1hbmQuICBCZXR0ZXIgaG9wZSB0aGF0IGxhc3QgY29tbWFuZCB3b3JrZWQhCiAJICovCiAJaWYgKCFyZXQpIHsKLQkJeGhjaV9kYmcoeGhjaSwgIkNsZWFuaW5nIHVwIHN0YWxsZWQgZW5kcG9pbnQgcmluZ1xuIik7Ci0JCS8qIFdlIG5lZWQgdG8gbW92ZSB0aGUgSFcncyBkZXF1ZXVlIHBvaW50ZXIgcGFzdCB0aGlzIFRELAotCQkgKiBvciBpdCB3aWxsIGF0dGVtcHQgdG8gcmVzZW5kIGl0IG9uIHRoZSBuZXh0IGRvb3JiZWxsIHJpbmcuCi0JCSAqLwotCQl4aGNpX2ZpbmRfbmV3X2RlcXVldWVfc3RhdGUoeGhjaSwgdWRldi0+c2xvdF9pZCwKLQkJCQllcF9pbmRleCwgZXBfcmluZy0+c3RvcHBlZF90ZCwgJmRlcV9zdGF0ZSk7Ci0JCXhoY2lfZGJnKHhoY2ksICJRdWV1ZWluZyBuZXcgZGVxdWV1ZSBzdGF0ZVxuIik7Ci0JCXhoY2lfcXVldWVfbmV3X2RlcXVldWVfc3RhdGUoeGhjaSwgZXBfcmluZywKLQkJCQl1ZGV2LT5zbG90X2lkLAotCQkJCWVwX2luZGV4LCAmZGVxX3N0YXRlKTsKLQkJa2ZyZWUoZXBfcmluZy0+c3RvcHBlZF90ZCk7CisJCXhoY2lfY2xlYW51cF9zdGFsbGVkX3JpbmcoeGhjaSwgdWRldiwgZXBfaW5kZXgpOworCQlrZnJlZSh2aXJ0X2VwLT5zdG9wcGVkX3RkKTsKIAkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTMyOCw2ICsxNTk0LDg4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIE9uY2UgYSBodWIgZGVzY3JpcHRvciBpcyBmZXRjaGVkIGZvciBhIGRldmljZSwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHhIQydzCisgKiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBkZXZpY2UuCisgKi8KK2ludCB4aGNpX3VwZGF0ZV9odWJfZGV2aWNlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LAorCQkJc3RydWN0IHVzYl90dCAqdHQsIGdmcF90IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2ZGV2OworCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbmZpZ19jbWQ7CisJc3RydWN0IHhoY2lfaW5wdXRfY29udHJvbF9jdHggKmN0cmxfY3R4OworCXN0cnVjdCB4aGNpX3Nsb3RfY3R4ICpzbG90X2N0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHRoaW5rX3RpbWU7CisJaW50IHJldDsKKworCS8qIElnbm9yZSByb290IGh1YnMgKi8KKwlpZiAoIWhkZXYtPnBhcmVudCkKKwkJcmV0dXJuIDA7CisKKwl2ZGV2ID0geGhjaS0+ZGV2c1toZGV2LT5zbG90X2lkXTsKKwlpZiAoIXZkZXYpIHsKKwkJeGhjaV93YXJuKHhoY2ksICJDYW5ub3QgdXBkYXRlIGh1YiBkZXNjIGZvciB1bmtub3duIGRldmljZS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY29uZmlnX2NtZCA9IHhoY2lfYWxsb2NfY29tbWFuZCh4aGNpLCB0cnVlLCBtZW1fZmxhZ3MpOworCWlmICghY29uZmlnX2NtZCkgeworCQl4aGNpX2RiZyh4aGNpLCAiQ291bGQgbm90IGFsbG9jYXRlIHhIQ0kgY29tbWFuZCBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwl4aGNpX3Nsb3RfY29weSh4aGNpLCBjb25maWdfY21kLT5pbl9jdHgsIHZkZXYtPm91dF9jdHgpOworCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwgY29uZmlnX2NtZC0+aW5fY3R4KTsKKwljdHJsX2N0eC0+YWRkX2ZsYWdzIHw9IFNMT1RfRkxBRzsKKwlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGNvbmZpZ19jbWQtPmluX2N0eCk7CisJc2xvdF9jdHgtPmRldl9pbmZvIHw9IERFVl9IVUI7CisJaWYgKHR0LT5tdWx0aSkKKwkJc2xvdF9jdHgtPmRldl9pbmZvIHw9IERFVl9NVFQ7CisJaWYgKHhoY2ktPmhjaV92ZXJzaW9uID4gMHg5NSkgeworCQl4aGNpX2RiZyh4aGNpLCAieEhDSSB2ZXJzaW9uICV4IG5lZWRzIGh1YiAiCisJCQkJIlRUIHRoaW5rIHRpbWUgYW5kIG51bWJlciBvZiBwb3J0c1xuIiwKKwkJCQkodW5zaWduZWQgaW50KSB4aGNpLT5oY2lfdmVyc2lvbik7CisJCXNsb3RfY3R4LT5kZXZfaW5mbzIgfD0gWEhDSV9NQVhfUE9SVFMoaGRldi0+bWF4Y2hpbGQpOworCQkvKiBTZXQgVFQgdGhpbmsgdGltZSAtIGNvbnZlcnQgZnJvbSBucyB0byBGUyBiaXQgdGltZXMuCisJCSAqIDAgPSA4IEZTIGJpdCB0aW1lcywgMSA9IDE2IEZTIGJpdCB0aW1lcywKKwkJICogMiA9IDI0IEZTIGJpdCB0aW1lcywgMyA9IDMyIEZTIGJpdCB0aW1lcy4KKwkJICovCisJCXRoaW5rX3RpbWUgPSB0dC0+dGhpbmtfdGltZTsKKwkJaWYgKHRoaW5rX3RpbWUgIT0gMCkKKwkJCXRoaW5rX3RpbWUgPSAodGhpbmtfdGltZSAvIDY2NikgLSAxOworCQlzbG90X2N0eC0+dHRfaW5mbyB8PSBUVF9USElOS19USU1FKHRoaW5rX3RpbWUpOworCX0gZWxzZSB7CisJCXhoY2lfZGJnKHhoY2ksICJ4SENJIHZlcnNpb24gJXggZG9lc24ndCBuZWVkIGh1YiAiCisJCQkJIlRUIHRoaW5rIHRpbWUgb3IgbnVtYmVyIG9mIHBvcnRzXG4iLAorCQkJCSh1bnNpZ25lZCBpbnQpIHhoY2ktPmhjaV92ZXJzaW9uKTsKKwl9CisJc2xvdF9jdHgtPmRldl9zdGF0ZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCisJeGhjaV9kYmcoeGhjaSwgIlNldCB1cCAlcyBmb3IgaHViIGRldmljZS5cbiIsCisJCQkoeGhjaS0+aGNpX3ZlcnNpb24gPiAweDk1KSA/CisJCQkiY29uZmlndXJlIGVuZHBvaW50IiA6ICJldmFsdWF0ZSBjb250ZXh0Iik7CisJeGhjaV9kYmcoeGhjaSwgIlNsb3QgJXUgSW5wdXQgQ29udGV4dDpcbiIsIGhkZXYtPnNsb3RfaWQpOworCXhoY2lfZGJnX2N0eCh4aGNpLCBjb25maWdfY21kLT5pbl9jdHgsIDApOworCisJLyogSXNzdWUgYW5kIHdhaXQgZm9yIHRoZSBjb25maWd1cmUgZW5kcG9pbnQgb3IKKwkgKiBldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmQuCisJICovCisJaWYgKHhoY2ktPmhjaV92ZXJzaW9uID4gMHg5NSkKKwkJcmV0ID0geGhjaV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgaGRldiwgY29uZmlnX2NtZCwKKwkJCQlmYWxzZSwgZmFsc2UpOworCWVsc2UKKwkJcmV0ID0geGhjaV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgaGRldiwgY29uZmlnX2NtZCwKKwkJCQl0cnVlLCBmYWxzZSk7CisKKwl4aGNpX2RiZyh4aGNpLCAiU2xvdCAldSBPdXRwdXQgQ29udGV4dDpcbiIsIGhkZXYtPnNsb3RfaWQpOworCXhoY2lfZGJnX2N0eCh4aGNpLCB2ZGV2LT5vdXRfY3R4LCAwKTsKKworCXhoY2lfZnJlZV9jb21tYW5kKHhoY2ksIGNvbmZpZ19jbWQpOworCXJldHVybiByZXQ7Cit9CisKIGludCB4aGNpX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKaW5kZXggZTZiOWExYy4uMWRiNGZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwpAQCAtOTQsNiArOTQsOSBAQAogCQl2YWwgPSBwcmV2LT50cmJzW1RSQlNfUEVSX1NFR01FTlQtMV0ubGluay5jb250cm9sOwogCQl2YWwgJj0gflRSQl9UWVBFX0JJVE1BU0s7CiAJCXZhbCB8PSBUUkJfVFlQRShUUkJfTElOSyk7CisJCS8qIEFsd2F5cyBzZXQgdGhlIGNoYWluIGJpdCB3aXRoIDAuOTUgaGFyZHdhcmUgKi8KKwkJaWYgKHhoY2lfbGlua190cmJfcXVpcmsoeGhjaSkpCisJCQl2YWwgfD0gVFJCX0NIQUlOOwogCQlwcmV2LT50cmJzW1RSQlNfUEVSX1NFR01FTlQtMV0ubGluay5jb250cm9sID0gdmFsOwogCX0KIAl4aGNpX2RiZyh4aGNpLCAiTGlua2luZyBzZWdtZW50IDB4JWxseCB0byBzZWdtZW50IDB4JWxseCAoRE1BKVxuIiwKQEAgLTE0MSw3ICsxNDQsNiBAQAogCQlyZXR1cm4gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZyaW5nLT50ZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcmluZy0+Y2FuY2VsbGVkX3RkX2xpc3QpOwogCWlmIChudW1fc2VncyA9PSAwKQogCQlyZXR1cm4gcmluZzsKIApAQCAtMjYyLDggKzI2NCw4IEBACiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCAzMTsgKytpKQotCQlpZiAoZGV2LT5lcF9yaW5nc1tpXSkKLQkJCXhoY2lfcmluZ19mcmVlKHhoY2ksIGRldi0+ZXBfcmluZ3NbaV0pOworCQlpZiAoZGV2LT5lcHNbaV0ucmluZykKKwkJCXhoY2lfcmluZ19mcmVlKHhoY2ksIGRldi0+ZXBzW2ldLnJpbmcpOwogCiAJaWYgKGRldi0+aW5fY3R4KQogCQl4aGNpX2ZyZWVfY29udGFpbmVyX2N0eCh4aGNpLCBkZXYtPmluX2N0eCk7CkBAIC0yNzgsNiArMjgwLDcgQEAKIAkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGdmcF90IGZsYWdzKQogewogCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICpkZXY7CisJaW50IGk7CiAKIAkvKiBTbG90IElEIDAgaXMgcmVzZXJ2ZWQgKi8KIAlpZiAoc2xvdF9pZCA9PSAwIHx8IHhoY2ktPmRldnNbc2xvdF9pZF0pIHsKQEAgLTMwNiwxMiArMzA5LDE3IEBACiAJeGhjaV9kYmcoeGhjaSwgIlNsb3QgJWQgaW5wdXQgY3R4ID0gMHglbGx4IChkbWEpXG4iLCBzbG90X2lkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPmluX2N0eC0+ZG1hKTsKIAorCS8qIEluaXRpYWxpemUgdGhlIGNhbmNlbGxhdGlvbiBsaXN0IGZvciBlYWNoIGVuZHBvaW50ICovCisJZm9yIChpID0gMDsgaSA8IDMxOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZkZXYtPmVwc1tpXS5jYW5jZWxsZWRfdGRfbGlzdCk7CisKIAkvKiBBbGxvY2F0ZSBlbmRwb2ludCAwIHJpbmcgKi8KLQlkZXYtPmVwX3JpbmdzWzBdID0geGhjaV9yaW5nX2FsbG9jKHhoY2ksIDEsIHRydWUsIGZsYWdzKTsKLQlpZiAoIWRldi0+ZXBfcmluZ3NbMF0pCisJZGV2LT5lcHNbMF0ucmluZyA9IHhoY2lfcmluZ19hbGxvYyh4aGNpLCAxLCB0cnVlLCBmbGFncyk7CisJaWYgKCFkZXYtPmVwc1swXS5yaW5nKQogCQlnb3RvIGZhaWw7CiAKIAlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2NvbXBsZXRpb24pOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmNtZF9saXN0KTsKIAogCS8qIFBvaW50IHRvIG91dHB1dCBkZXZpY2UgY29udGV4dCBpbiBkY2JhYS4gKi8KIAl4aGNpLT5kY2JhYS0+ZGV2X2NvbnRleHRfcHRyc1tzbG90X2lkXSA9IGRldi0+b3V0X2N0eC0+ZG1hOwpAQCAtMzUyLDkgKzM2MCw5IEBACiAJLyogMykgT25seSB0aGUgY29udHJvbCBlbmRwb2ludCBpcyB2YWxpZCAtIG9uZSBlbmRwb2ludCBjb250ZXh0ICovCiAJc2xvdF9jdHgtPmRldl9pbmZvIHw9IExBU1RfQ1RYKDEpOwogCisJc2xvdF9jdHgtPmRldl9pbmZvIHw9ICh1MzIpIHVkZXYtPnJvdXRlOwogCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKIAljYXNlIFVTQl9TUEVFRF9TVVBFUjoKLQkJc2xvdF9jdHgtPmRldl9pbmZvIHw9ICh1MzIpIHVkZXYtPnJvdXRlOwogCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gKHUzMikgU0xPVF9TUEVFRF9TUzsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfSElHSDoKQEAgLTM4MiwxNCArMzkwLDEyIEBACiAJeGhjaV9kYmcoeGhjaSwgIlNldCByb290IGh1YiBwb3J0bnVtIHRvICVkXG4iLCB0b3BfZGV2LT5wb3J0bnVtKTsKIAogCS8qIElzIHRoaXMgYSBMUy9GUyBkZXZpY2UgdW5kZXIgYSBIUyBodWI/ICovCi0JLyoKLQkgKiBGSVhNRTogSSBkb24ndCB0aGluayB0aGlzIGlzIHJpZ2h0LCB3aGVyZSBkb2VzIHRoZSBUVCBpbmZvIGZvciB0aGUKLQkgKiByb290aHViIG9yIHBhcmVudCBodWIgY29tZSBmcm9tPwotCSAqLwogCWlmICgodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVyB8fCB1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgJiYKIAkJCXVkZXYtPnR0KSB7CiAJCXNsb3RfY3R4LT50dF9pbmZvID0gdWRldi0+dHQtPmh1Yi0+c2xvdF9pZDsKIAkJc2xvdF9jdHgtPnR0X2luZm8gfD0gdWRldi0+dHRwb3J0IDw8IDg7CisJCWlmICh1ZGV2LT50dC0+bXVsdGkpCisJCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gREVWX01UVDsKIAl9CiAJeGhjaV9kYmcoeGhjaSwgInVkZXYtPnR0ID0gJXBcbiIsIHVkZXYtPnR0KTsKIAl4aGNpX2RiZyh4aGNpLCAidWRldi0+dHRwb3J0ID0gMHgleFxuIiwgdWRldi0+dHRwb3J0KTsKQEAgLTM5OCwyMiArNDA0LDM1IEBACiAJLyogU3RlcCA1ICovCiAJZXAwX2N0eC0+ZXBfaW5mbzIgPSBFUF9UWVBFKENUUkxfRVApOwogCS8qCi0JICogU2VlIHNlY3Rpb24gNC4zIGJ1bGxldCA2OgotCSAqIFRoZSBkZWZhdWx0IE1heCBQYWNrZXQgc2l6ZSBmb3IgZXAwIGlzICI4IGJ5dGVzIGZvciBhIFVTQjIKLQkgKiBMUy9GUy9IUyBkZXZpY2Ugb3IgNTEyIGJ5dGVzIGZvciBhIFVTQjMgU1MgZGV2aWNlIgogCSAqIFhYWDogTm90IHN1cmUgYWJvdXQgd2lyZWxlc3MgVVNCIGRldmljZXMuCiAJICovCi0JaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9TVVBFUikKKwlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfU1VQRVI6CiAJCWVwMF9jdHgtPmVwX2luZm8yIHw9IE1BWF9QQUNLRVQoNTEyKTsKLQllbHNlCisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJLyogVVNCIGNvcmUgZ3Vlc3NlcyBhdCBhIDY0LWJ5dGUgbWF4IHBhY2tldCBmaXJzdCBmb3IgRlMgZGV2aWNlcyAqLworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCWVwMF9jdHgtPmVwX2luZm8yIHw9IE1BWF9QQUNLRVQoNjQpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CiAJCWVwMF9jdHgtPmVwX2luZm8yIHw9IE1BWF9QQUNLRVQoOCk7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgorCQl4aGNpX2RiZyh4aGNpLCAiRklYTUUgeEhDSSBkb2Vzbid0IHN1cHBvcnQgd2lyZWxlc3Mgc3BlZWRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5ldyBzcGVlZD8gKi8KKwkJQlVHKCk7CisJfQogCS8qIEVQIDAgY2FuIGhhbmRsZSAiYnVyc3QiIHNpemVzIG9mIDEsIHNvIE1heCBCdXJzdCBTaXplIGZpZWxkIGlzIDAgKi8KIAllcDBfY3R4LT5lcF9pbmZvMiB8PSBNQVhfQlVSU1QoMCk7CiAJZXAwX2N0eC0+ZXBfaW5mbzIgfD0gRVJST1JfQ09VTlQoMyk7CiAKIAllcDBfY3R4LT5kZXEgPQotCQlkZXYtPmVwX3JpbmdzWzBdLT5maXJzdF9zZWctPmRtYTsKLQllcDBfY3R4LT5kZXEgfD0gZGV2LT5lcF9yaW5nc1swXS0+Y3ljbGVfc3RhdGU7CisJCWRldi0+ZXBzWzBdLnJpbmctPmZpcnN0X3NlZy0+ZG1hOworCWVwMF9jdHgtPmRlcSB8PSBkZXYtPmVwc1swXS5yaW5nLT5jeWNsZV9zdGF0ZTsKIAogCS8qIFN0ZXBzIDcgYW5kIDggd2VyZSBkb25lIGluIHhoY2lfYWxsb2NfdmlydF9kZXZpY2UoKSAqLwogCkBAIC01MjMsMTAgKzU0MiwxMSBAQAogCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCB2aXJ0X2Rldi0+aW5fY3R4LCBlcF9pbmRleCk7CiAKIAkvKiBTZXQgdXAgdGhlIGVuZHBvaW50IHJpbmcgKi8KLQl2aXJ0X2Rldi0+bmV3X2VwX3JpbmdzW2VwX2luZGV4XSA9IHhoY2lfcmluZ19hbGxvYyh4aGNpLCAxLCB0cnVlLCBtZW1fZmxhZ3MpOwotCWlmICghdmlydF9kZXYtPm5ld19lcF9yaW5nc1tlcF9pbmRleF0pCisJdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ubmV3X3JpbmcgPQorCQl4aGNpX3JpbmdfYWxsb2MoeGhjaSwgMSwgdHJ1ZSwgbWVtX2ZsYWdzKTsKKwlpZiAoIXZpcnRfZGV2LT5lcHNbZXBfaW5kZXhdLm5ld19yaW5nKQogCQlyZXR1cm4gLUVOT01FTTsKLQllcF9yaW5nID0gdmlydF9kZXYtPm5ld19lcF9yaW5nc1tlcF9pbmRleF07CisJZXBfcmluZyA9IHZpcnRfZGV2LT5lcHNbZXBfaW5kZXhdLm5ld19yaW5nOwogCWVwX2N0eC0+ZGVxID0gZXBfcmluZy0+Zmlyc3Rfc2VnLT5kbWEgfCBlcF9yaW5nLT5jeWNsZV9zdGF0ZTsKIAogCWVwX2N0eC0+ZXBfaW5mbyA9IHhoY2lfZ2V0X2VuZHBvaW50X2ludGVydmFsKHVkZXYsIGVwKTsKQEAgLTU5OCw2ICs2MTgsNDggQEAKIAkgKi8KIH0KIAorLyogQ29weSBvdXRwdXQgeGhjaV9lcF9jdHggdG8gdGhlIGlucHV0IHhoY2lfZXBfY3R4IGNvcHkuCisgKiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0byBjaGFuZ2Ugb25lIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBlbmRwb2ludCBhbmQgdGhlbgorICogaXNzdWUgYSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZC4KKyAqLwordm9pZCB4aGNpX2VuZHBvaW50X2NvcHkoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICppbl9jdHgsCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKm91dF9jdHgsCisJCXVuc2lnbmVkIGludCBlcF9pbmRleCkKK3sKKwlzdHJ1Y3QgeGhjaV9lcF9jdHggKm91dF9lcF9jdHg7CisJc3RydWN0IHhoY2lfZXBfY3R4ICppbl9lcF9jdHg7CisKKwlvdXRfZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIG91dF9jdHgsIGVwX2luZGV4KTsKKwlpbl9lcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgaW5fY3R4LCBlcF9pbmRleCk7CisKKwlpbl9lcF9jdHgtPmVwX2luZm8gPSBvdXRfZXBfY3R4LT5lcF9pbmZvOworCWluX2VwX2N0eC0+ZXBfaW5mbzIgPSBvdXRfZXBfY3R4LT5lcF9pbmZvMjsKKwlpbl9lcF9jdHgtPmRlcSA9IG91dF9lcF9jdHgtPmRlcTsKKwlpbl9lcF9jdHgtPnR4X2luZm8gPSBvdXRfZXBfY3R4LT50eF9pbmZvOworfQorCisvKiBDb3B5IG91dHB1dCB4aGNpX3Nsb3RfY3R4IHRvIHRoZSBpbnB1dCB4aGNpX3Nsb3RfY3R4LgorICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gY2hhbmdlIG9uZSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgZW5kcG9pbnQgYW5kIHRoZW4KKyAqIGlzc3VlIGEgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQuICBPbmx5IHRoZSBjb250ZXh0IGVudHJpZXMgZmllbGQgbWF0dGVycywKKyAqIGJ1dCB3ZSdsbCBjb3B5IHRoZSB3aG9sZSB0aGluZyBhbnl3YXkuCisgKi8KK3ZvaWQgeGhjaV9zbG90X2NvcHkoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICppbl9jdHgsCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKm91dF9jdHgpCit7CisJc3RydWN0IHhoY2lfc2xvdF9jdHggKmluX3Nsb3RfY3R4OworCXN0cnVjdCB4aGNpX3Nsb3RfY3R4ICpvdXRfc2xvdF9jdHg7CisKKwlpbl9zbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGluX2N0eCk7CisJb3V0X3Nsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgb3V0X2N0eCk7CisKKwlpbl9zbG90X2N0eC0+ZGV2X2luZm8gPSBvdXRfc2xvdF9jdHgtPmRldl9pbmZvOworCWluX3Nsb3RfY3R4LT5kZXZfaW5mbzIgPSBvdXRfc2xvdF9jdHgtPmRldl9pbmZvMjsKKwlpbl9zbG90X2N0eC0+dHRfaW5mbyA9IG91dF9zbG90X2N0eC0+dHRfaW5mbzsKKwlpbl9zbG90X2N0eC0+ZGV2X3N0YXRlID0gb3V0X3Nsb3RfY3R4LT5kZXZfc3RhdGU7Cit9CisKIC8qIFNldCB1cCB0aGUgc2NyYXRjaHBhZCBidWZmZXIgYXJyYXkgYW5kIHNjcmF0Y2hwYWQgYnVmZmVycywgaWYgbmVlZGVkLiAqLwogc3RhdGljIGludCBzY3JhdGNocGFkX2FsbG9jKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgZmxhZ3MpCiB7CkBAIC02OTUsNiArNzU3LDQ0IEBACiAJeGhjaS0+c2NyYXRjaHBhZCA9IE5VTEw7CiB9CiAKK3N0cnVjdCB4aGNpX2NvbW1hbmQgKnhoY2lfYWxsb2NfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCWJvb2wgYWxsb2NhdGVfY29tcGxldGlvbiwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQ7CisKKwljb21tYW5kID0ga3phbGxvYyhzaXplb2YoKmNvbW1hbmQpLCBtZW1fZmxhZ3MpOworCWlmICghY29tbWFuZCkKKwkJcmV0dXJuIE5VTEw7CisKKwljb21tYW5kLT5pbl9jdHggPQorCQl4aGNpX2FsbG9jX2NvbnRhaW5lcl9jdHgoeGhjaSwgWEhDSV9DVFhfVFlQRV9JTlBVVCwgbWVtX2ZsYWdzKTsKKwlpZiAoIWNvbW1hbmQtPmluX2N0eCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoYWxsb2NhdGVfY29tcGxldGlvbikgeworCQljb21tYW5kLT5jb21wbGV0aW9uID0KKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21wbGV0aW9uKSwgbWVtX2ZsYWdzKTsKKwkJaWYgKCFjb21tYW5kLT5jb21wbGV0aW9uKSB7CisJCQl4aGNpX2ZyZWVfY29udGFpbmVyX2N0eCh4aGNpLCBjb21tYW5kLT5pbl9jdHgpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaW5pdF9jb21wbGV0aW9uKGNvbW1hbmQtPmNvbXBsZXRpb24pOworCX0KKworCWNvbW1hbmQtPnN0YXR1cyA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJmNvbW1hbmQtPmNtZF9saXN0KTsKKwlyZXR1cm4gY29tbWFuZDsKK30KKwordm9pZCB4aGNpX2ZyZWVfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQpCit7CisJeGhjaV9mcmVlX2NvbnRhaW5lcl9jdHgoeGhjaSwKKwkJCWNvbW1hbmQtPmluX2N0eCk7CisJa2ZyZWUoY29tbWFuZC0+Y29tcGxldGlvbik7CisJa2ZyZWUoY29tbWFuZCk7Cit9CisKIHZvaWQgeGhjaV9tZW1fY2xlYW51cChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7CiAJc3RydWN0IHBjaV9kZXYJKnBkZXYgPSB0b19wY2lfZGV2KHhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmNvbnRyb2xsZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCmluZGV4IDU5MmZlN2UuLjA2NTk1ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKQEAgLTI0LDYgKzI0LDEwIEBACiAKICNpbmNsdWRlICJ4aGNpLmgiCiAKKy8qIERldmljZSBmb3IgYSBxdWlyayAqLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZSRVNDT19MT0dJQwkweDFiNzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GUkVTQ09fTE9HSUNfUERLCTB4MTAwMAorCiBzdGF0aWMgY29uc3QgY2hhciBoY2RfbmFtZVtdID0gInhoY2lfaGNkIjsKIAogLyogY2FsbGVkIGFmdGVyIHBvd2VydXAsIGJ5IHByb2JlIG9yIHN5c3RlbS1wbSAid2FrZXVwIiAqLwpAQCAtNTksOSArNjMsMjAgQEAKIAl4aGNpLT5oY3NfcGFyYW1zMSA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmNhcF9yZWdzLT5oY3NfcGFyYW1zMSk7CiAJeGhjaS0+aGNzX3BhcmFtczIgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5jYXBfcmVncy0+aGNzX3BhcmFtczIpOwogCXhoY2ktPmhjc19wYXJhbXMzID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+Y2FwX3JlZ3MtPmhjc19wYXJhbXMzKTsKKwl4aGNpLT5oY2NfcGFyYW1zID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+Y2FwX3JlZ3MtPmhjX2NhcGJhc2UpOworCXhoY2ktPmhjaV92ZXJzaW9uID0gSENfVkVSU0lPTih4aGNpLT5oY2NfcGFyYW1zKTsKIAl4aGNpLT5oY2NfcGFyYW1zID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+Y2FwX3JlZ3MtPmhjY19wYXJhbXMpOwogCXhoY2lfcHJpbnRfcmVnaXN0ZXJzKHhoY2kpOwogCisJLyogTG9vayBmb3IgdmVuZG9yLXNwZWNpZmljIHF1aXJrcyAqLworCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9GUkVTQ09fTE9HSUMgJiYKKwkJCXBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0ZSRVNDT19MT0dJQ19QREsgJiYKKwkJCXBkZXYtPnJldmlzaW9uID09IDB4MCkgeworCQkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfUkVTRVRfRVBfUVVJUks7CisJCQl4aGNpX2RiZyh4aGNpLCAiUVVJUks6IEZyZXNjbyBMb2dpYyB4SEMgbmVlZHMgY29uZmlndXJlIgorCQkJCQkiIGVuZHBvaW50IGNtZCBhZnRlciByZXNldCBlbmRwb2ludFxuIik7CisJfQorCiAJLyogTWFrZSBzdXJlIHRoZSBIQyBpcyBoYWx0ZWQuICovCiAJcmV0dmFsID0geGhjaV9oYWx0KHhoY2kpOwogCWlmIChyZXR2YWwpCkBAIC0xMjEsNiArMTM2LDcgQEAKIAkuY2hlY2tfYmFuZHdpZHRoID0JeGhjaV9jaGVja19iYW5kd2lkdGgsCiAJLnJlc2V0X2JhbmR3aWR0aCA9CXhoY2lfcmVzZXRfYmFuZHdpZHRoLAogCS5hZGRyZXNzX2RldmljZSA9CXhoY2lfYWRkcmVzc19kZXZpY2UsCisJLnVwZGF0ZV9odWJfZGV2aWNlID0JeGhjaV91cGRhdGVfaHViX2RldmljZSwKIAogCS8qCiAJICogc2NoZWR1bGluZyBzdXBwb3J0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCBhYTg4YTA2Li4xNzNjMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTE3Miw4ICsxNzIsOSBAQAogICogaGF2ZSB0aGVpciBjaGFpbiBiaXQgY2xlYXJlZCAoc28gdGhhdCBlYWNoIExpbmsgVFJCIGlzIGEgc2VwYXJhdGUgVEQpLgogICoKICAqIFNlY3Rpb24gNi40LjQuMSBvZiB0aGUgMC45NSBzcGVjIHNheXMgbGluayBUUkJzIGNhbm5vdCBoYXZlIHRoZSBjaGFpbiBiaXQKLSAqIHNldCwgYnV0IG90aGVyIHNlY3Rpb25zIHRhbGsgYWJvdXQgZGVhbGluZyB3aXRoIHRoZSBjaGFpbiBiaXQgc2V0LgotICogQXNzdW1lIHNlY3Rpb24gNi40LjQuMSBpcyB3cm9uZywgYW5kIHRoZSBjaGFpbiBiaXQgY2FuIGJlIHNldCBpbiBhIExpbmsgVFJCLgorICogc2V0LCBidXQgb3RoZXIgc2VjdGlvbnMgdGFsayBhYm91dCBkZWFsaW5nIHdpdGggdGhlIGNoYWluIGJpdCBzZXQuICBUaGlzIHdhcworICogZml4ZWQgaW4gdGhlIDAuOTYgc3BlY2lmaWNhdGlvbiBlcnJhdGEsIGJ1dCB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IGFsbCAwLjk1CisgKiB4SENJIGhhcmR3YXJlIGNhbid0IGhhbmRsZSB0aGUgY2hhaW4gYml0IGJlaW5nIGNsZWFyZWQgb24gYSBsaW5rIFRSQi4KICAqLwogc3RhdGljIHZvaWQgaW5jX2VucShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcsIGJvb2wgY29uc3VtZXIpCiB7CkBAIC0xOTEsOCArMTkyLDE0IEBACiAJd2hpbGUgKGxhc3RfdHJiKHhoY2ksIHJpbmcsIHJpbmctPmVucV9zZWcsIG5leHQpKSB7CiAJCWlmICghY29uc3VtZXIpIHsKIAkJCWlmIChyaW5nICE9IHhoY2ktPmV2ZW50X3JpbmcpIHsKLQkJCQluZXh0LT5saW5rLmNvbnRyb2wgJj0gflRSQl9DSEFJTjsKLQkJCQluZXh0LT5saW5rLmNvbnRyb2wgfD0gY2hhaW47CisJCQkJLyogSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCAwLjk1IGhhcmR3YXJlLAorCQkJCSAqIGNhcnJ5IG92ZXIgdGhlIGNoYWluIGJpdCBvZiB0aGUgcHJldmlvdXMgVFJCCisJCQkJICogKHdoaWNoIG1heSBtZWFuIHRoZSBjaGFpbiBiaXQgaXMgY2xlYXJlZCkuCisJCQkJICovCisJCQkJaWYgKCF4aGNpX2xpbmtfdHJiX3F1aXJrKHhoY2kpKSB7CisJCQkJCW5leHQtPmxpbmsuY29udHJvbCAmPSB+VFJCX0NIQUlOOworCQkJCQluZXh0LT5saW5rLmNvbnRyb2wgfD0gY2hhaW47CisJCQkJfQogCQkJCS8qIEdpdmUgdGhpcyBsaW5rIFRSQiB0byB0aGUgaGFyZHdhcmUgKi8KIAkJCQl3bWIoKTsKIAkJCQlpZiAobmV4dC0+bGluay5jb250cm9sICYgVFJCX0NZQ0xFKQpAQCAtMjg5LDE2ICsyOTYsMTggQEAKIAkJdW5zaWduZWQgaW50IHNsb3RfaWQsCiAJCXVuc2lnbmVkIGludCBlcF9pbmRleCkKIHsKLQlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOworCXVuc2lnbmVkIGludCBlcF9zdGF0ZTsKIAl1MzIgZmllbGQ7CiAJX191MzIgX19pb21lbSAqZGJfYWRkciA9ICZ4aGNpLT5kYmEtPmRvb3JiZWxsW3Nsb3RfaWRdOwogCi0JZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwX3JpbmdzW2VwX2luZGV4XTsKKwllcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOworCWVwX3N0YXRlID0gZXAtPmVwX3N0YXRlOwogCS8qIERvbid0IHJpbmcgdGhlIGRvb3JiZWxsIGZvciB0aGlzIGVuZHBvaW50IGlmIHRoZXJlIGFyZSBwZW5kaW5nCiAJICogY2FuY2VsbGF0aW9ucyBiZWNhdXNlIHRoZSB3ZSBkb24ndCB3YW50IHRvIGludGVycnVwdCBwcm9jZXNzaW5nLgogCSAqLwotCWlmICghZXBfcmluZy0+Y2FuY2Vsc19wZW5kaW5nICYmICEoZXBfcmluZy0+c3RhdGUgJiBTRVRfREVRX1BFTkRJTkcpCi0JCQkmJiAhKGVwX3JpbmctPnN0YXRlICYgRVBfSEFMVEVEKSkgeworCWlmICghZXAtPmNhbmNlbHNfcGVuZGluZyAmJiAhKGVwX3N0YXRlICYgU0VUX0RFUV9QRU5ESU5HKQorCQkJJiYgIShlcF9zdGF0ZSAmIEVQX0hBTFRFRCkpIHsKIAkJZmllbGQgPSB4aGNpX3JlYWRsKHhoY2ksIGRiX2FkZHIpICYgREJfTUFTSzsKIAkJeGhjaV93cml0ZWwoeGhjaSwgZmllbGQgfCBFUElfVE9fREIoZXBfaW5kZXgpLCBkYl9hZGRyKTsKIAkJLyogRmx1c2ggUENJIHBvc3RlZCB3cml0ZXMgLSBGSVhNRSBNYXR0aGV3IFdpbGNveCBzYXlzIHRoaXMKQEAgLTM1NCw3ICszNjMsNyBAQAogCQlzdHJ1Y3QgeGhjaV90ZCAqY3VyX3RkLCBzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKLQlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nID0gZGV2LT5lcF9yaW5nc1tlcF9pbmRleF07CisJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZyA9IGRldi0+ZXBzW2VwX2luZGV4XS5yaW5nOwogCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICp0cmI7CiAJc3RydWN0IHhoY2lfZXBfY3R4ICplcF9jdHg7CiAJZG1hX2FkZHJfdCBhZGRyOwpAQCAtMzYyLDcgKzM3MSw3IEBACiAJc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSA9IDA7CiAJeGhjaV9kYmcoeGhjaSwgIkZpbmRpbmcgc2VnbWVudCBjb250YWluaW5nIHN0b3BwZWQgVFJCLlxuIik7CiAJc3RhdGUtPm5ld19kZXFfc2VnID0gZmluZF90cmJfc2VnKGN1cl90ZC0+c3RhcnRfc2VnLAotCQkJZXBfcmluZy0+c3RvcHBlZF90cmIsCisJCQlkZXYtPmVwc1tlcF9pbmRleF0uc3RvcHBlZF90cmIsCiAJCQkmc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7CiAJaWYgKCFzdGF0ZS0+bmV3X2RlcV9zZWcpCiAJCUJVRygpOwpAQCAtNDQyLDkgKzQ1MSwxMSBAQAogCQl1bmlvbiB4aGNpX3RyYiAqZGVxX3B0ciwgdTMyIGN5Y2xlX3N0YXRlKTsKIAogdm9pZCB4aGNpX3F1ZXVlX25ld19kZXF1ZXVlX3N0YXRlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZywgdW5zaWduZWQgaW50IHNsb3RfaWQsCi0JCXVuc2lnbmVkIGludCBlcF9pbmRleCwgc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSAqZGVxX3N0YXRlKQorCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAorCQlzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpkZXFfc3RhdGUpCiB7CisJc3RydWN0IHhoY2lfdmlydF9lcCAqZXAgPSAmeGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKKwogCXhoY2lfZGJnKHhoY2ksICJTZXQgVFIgRGVxIFB0ciBjbWQsIG5ldyBkZXEgc2VnID0gJXAgKDB4JWxseCBkbWEpLCAiCiAJCQkibmV3IGRlcSBwdHIgPSAlcCAoMHglbGx4IGRtYSksIG5ldyBjeWNsZSA9ICV1XG4iLAogCQkJZGVxX3N0YXRlLT5uZXdfZGVxX3NlZywKQEAgLTQ2MSw4ICs0NzIsNyBAQAogCSAqIGlmIHRoZSByaW5nIGlzIHJ1bm5pbmcsIGFuZCByaW5naW5nIHRoZSBkb29yYmVsbCBzdGFydHMgdGhlCiAJICogcmluZyBydW5uaW5nLgogCSAqLwotCWVwX3JpbmctPnN0YXRlIHw9IFNFVF9ERVFfUEVORElORzsKLQl4aGNpX3JpbmdfY21kX2RiKHhoY2kpOworCWVwLT5lcF9zdGF0ZSB8PSBTRVRfREVRX1BFTkRJTkc7CiB9CiAKIC8qCkBAIC00ODEsNiArNDkxLDcgQEAKIAl1bnNpZ25lZCBpbnQgc2xvdF9pZDsKIAl1bnNpZ25lZCBpbnQgZXBfaW5kZXg7CiAJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgeGhjaV90ZCAqY3VyX3RkID0gMDsKIAlzdHJ1Y3QgeGhjaV90ZCAqbGFzdF91bmxpbmtlZF90ZDsKQEAgLTQ5Myw5ICs1MDQsMTAgQEAKIAltZW1zZXQoJmRlcV9zdGF0ZSwgMCwgc2l6ZW9mKGRlcV9zdGF0ZSkpOwogCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRCh0cmItPmdlbmVyaWMuZmllbGRbM10pOwogCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lOREVYKHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7Ci0JZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwX3JpbmdzW2VwX2luZGV4XTsKKwllcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOworCWVwX3JpbmcgPSBlcC0+cmluZzsKIAotCWlmIChsaXN0X2VtcHR5KCZlcF9yaW5nLT5jYW5jZWxsZWRfdGRfbGlzdCkpCisJaWYgKGxpc3RfZW1wdHkoJmVwLT5jYW5jZWxsZWRfdGRfbGlzdCkpCiAJCXJldHVybjsKIAogCS8qIEZpeCB1cCB0aGUgZXAgcmluZyBmaXJzdCwgc28gSFcgc3RvcHMgZXhlY3V0aW5nIGNhbmNlbGxlZCBURHMuCkBAIC01MDMsNyArNTE1LDcgQEAKIAkgKiBpdC4gIFdlJ3JlIGFsc28gaW4gdGhlIGV2ZW50IGhhbmRsZXIsIHNvIHdlIGNhbid0IGdldCByZS1pbnRlcnJ1cHRlZAogCSAqIGlmIGFub3RoZXIgU3RvcCBFbmRwb2ludCBjb21tYW5kIGNvbXBsZXRlcwogCSAqLwotCWxpc3RfZm9yX2VhY2goZW50cnksICZlcF9yaW5nLT5jYW5jZWxsZWRfdGRfbGlzdCkgeworCWxpc3RfZm9yX2VhY2goZW50cnksICZlcC0+Y2FuY2VsbGVkX3RkX2xpc3QpIHsKIAkJY3VyX3RkID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHhoY2lfdGQsIGNhbmNlbGxlZF90ZF9saXN0KTsKIAkJeGhjaV9kYmcoeGhjaSwgIkNhbmNlbGxpbmcgVEQgc3RhcnRpbmcgYXQgJXAsIDB4JWxseCAoZG1hKS5cbiIsCiAJCQkJY3VyX3RkLT5maXJzdF90cmIsCkBAIC01MTIsNyArNTI0LDcgQEAKIAkJICogSWYgd2Ugc3RvcHBlZCBvbiB0aGUgVEQgd2UgbmVlZCB0byBjYW5jZWwsIHRoZW4gd2UgaGF2ZSB0bwogCQkgKiBtb3ZlIHRoZSB4SEMgZW5kcG9pbnQgcmluZyBkZXF1ZXVlIHBvaW50ZXIgcGFzdCB0aGlzIFRELgogCQkgKi8KLQkJaWYgKGN1cl90ZCA9PSBlcF9yaW5nLT5zdG9wcGVkX3RkKQorCQlpZiAoY3VyX3RkID09IGVwLT5zdG9wcGVkX3RkKQogCQkJeGhjaV9maW5kX25ld19kZXF1ZXVlX3N0YXRlKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCBjdXJfdGQsCiAJCQkJCSZkZXFfc3RhdGUpOwogCQllbHNlCkBAIC01MjMsMTQgKzUzNSwxNSBAQAogCQkgKiB0aGUgY2FuY2VsbGVkIFREIGxpc3QgZm9yIFVSQiBjb21wbGV0aW9uIGxhdGVyLgogCQkgKi8KIAkJbGlzdF9kZWwoJmN1cl90ZC0+dGRfbGlzdCk7Ci0JCWVwX3JpbmctPmNhbmNlbHNfcGVuZGluZy0tOworCQllcC0+Y2FuY2Vsc19wZW5kaW5nLS07CiAJfQogCWxhc3RfdW5saW5rZWRfdGQgPSBjdXJfdGQ7CiAKIAkvKiBJZiBuZWNlc3NhcnksIHF1ZXVlIGEgU2V0IFRyYW5zZmVyIFJpbmcgRGVxdWV1ZSBQb2ludGVyIGNvbW1hbmQgKi8KIAlpZiAoZGVxX3N0YXRlLm5ld19kZXFfcHRyICYmIGRlcV9zdGF0ZS5uZXdfZGVxX3NlZykgewotCQl4aGNpX3F1ZXVlX25ld19kZXF1ZXVlX3N0YXRlKHhoY2ksIGVwX3JpbmcsCisJCXhoY2lfcXVldWVfbmV3X2RlcXVldWVfc3RhdGUoeGhjaSwKIAkJCQlzbG90X2lkLCBlcF9pbmRleCwgJmRlcV9zdGF0ZSk7CisJCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CiAJfSBlbHNlIHsKIAkJLyogT3RoZXJ3aXNlIGp1c3QgcmluZyB0aGUgZG9vcmJlbGwgdG8gcmVzdGFydCB0aGUgcmluZyAqLwogCQlyaW5nX2VwX2Rvb3JiZWxsKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4KTsKQEAgLTU0Myw3ICs1NTYsNyBAQAogCSAqIFNvIHN0b3Agd2hlbiB3ZSd2ZSBjb21wbGV0ZWQgdGhlIFVSQiBmb3IgdGhlIGxhc3QgVEQgd2UgdW5saW5rZWQuCiAJICovCiAJZG8gewotCQljdXJfdGQgPSBsaXN0X2VudHJ5KGVwX3JpbmctPmNhbmNlbGxlZF90ZF9saXN0Lm5leHQsCisJCWN1cl90ZCA9IGxpc3RfZW50cnkoZXAtPmNhbmNlbGxlZF90ZF9saXN0Lm5leHQsCiAJCQkJc3RydWN0IHhoY2lfdGQsIGNhbmNlbGxlZF90ZF9saXN0KTsKIAkJbGlzdF9kZWwoJmN1cl90ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpOwogCkBAIC01OTAsNyArNjAzLDcgQEAKIAlzbG90X2lkID0gVFJCX1RPX1NMT1RfSUQodHJiLT5nZW5lcmljLmZpZWxkWzNdKTsKIAllcF9pbmRleCA9IFRSQl9UT19FUF9JTkRFWCh0cmItPmdlbmVyaWMuZmllbGRbM10pOwogCWRldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07Ci0JZXBfcmluZyA9IGRldi0+ZXBfcmluZ3NbZXBfaW5kZXhdOworCWVwX3JpbmcgPSBkZXYtPmVwc1tlcF9pbmRleF0ucmluZzsKIAllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgZGV2LT5vdXRfY3R4LCBlcF9pbmRleCk7CiAJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCBkZXYtPm91dF9jdHgpOwogCkBAIC02MzQsNyArNjQ3LDcgQEAKIAkJCQllcF9jdHgtPmRlcSk7CiAJfQogCi0JZXBfcmluZy0+c3RhdGUgJj0gflNFVF9ERVFfUEVORElORzsKKwlkZXYtPmVwc1tlcF9pbmRleF0uZXBfc3RhdGUgJj0gflNFVF9ERVFfUEVORElORzsKIAlyaW5nX2VwX2Rvb3JiZWxsKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4KTsKIH0KIApAQCAtNjQ0LDE4ICs2NTcsNjAgQEAKIHsKIAlpbnQgc2xvdF9pZDsKIAl1bnNpZ25lZCBpbnQgZXBfaW5kZXg7CisJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKIAogCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRCh0cmItPmdlbmVyaWMuZmllbGRbM10pOwogCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lOREVYKHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7CisJZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0ucmluZzsKIAkvKiBUaGlzIGNvbW1hbmQgd2lsbCBvbmx5IGZhaWwgaWYgdGhlIGVuZHBvaW50IHdhc24ndCBoYWx0ZWQsCiAJICogYnV0IHdlIGRvbid0IGNhcmUuCiAJICovCiAJeGhjaV9kYmcoeGhjaSwgIklnbm9yaW5nIHJlc2V0IGVwIGNvbXBsZXRpb24gY29kZSBvZiAldVxuIiwKIAkJCSh1bnNpZ25lZCBpbnQpIEdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cykpOwogCi0JLyogQ2xlYXIgb3VyIGludGVybmFsIGhhbHRlZCBzdGF0ZSBhbmQgcmVzdGFydCB0aGUgcmluZyAqLwotCXhoY2ktPmRldnNbc2xvdF9pZF0tPmVwX3JpbmdzW2VwX2luZGV4XS0+c3RhdGUgJj0gfkVQX0hBTFRFRDsKLQlyaW5nX2VwX2Rvb3JiZWxsKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4KTsKKwkvKiBIVyB3aXRoIHRoZSByZXNldCBlbmRwb2ludCBxdWlyayBuZWVkcyB0byBoYXZlIGEgY29uZmlndXJlIGVuZHBvaW50CisJICogY29tbWFuZCBjb21wbGV0ZSBiZWZvcmUgdGhlIGVuZHBvaW50IGNhbiBiZSB1c2VkLiAgUXVldWUgdGhhdCBoZXJlCisJICogYmVjYXVzZSB0aGUgSFcgY2FuJ3QgaGFuZGxlIHR3byBjb21tYW5kcyBiZWluZyBxdWV1ZWQgaW4gYSByb3cuCisJICovCisJaWYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfUkVTRVRfRVBfUVVJUkspIHsKKwkJeGhjaV9kYmcoeGhjaSwgIlF1ZXVlaW5nIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kXG4iKTsKKwkJeGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwKKwkJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHgtPmRtYSwgc2xvdF9pZCwKKwkJCQlmYWxzZSk7CisJCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CisJfSBlbHNlIHsKKwkJLyogQ2xlYXIgb3VyIGludGVybmFsIGhhbHRlZCBzdGF0ZSBhbmQgcmVzdGFydCB0aGUgcmluZyAqLworCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLmVwX3N0YXRlICY9IH5FUF9IQUxURUQ7CisJCXJpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpOworCX0KK30KKworLyogQ2hlY2sgdG8gc2VlIGlmIGEgY29tbWFuZCBpbiB0aGUgZGV2aWNlJ3MgY29tbWFuZCBxdWV1ZSBtYXRjaGVzIHRoaXMgb25lLgorICogU2lnbmFsIHRoZSBjb21wbGV0aW9uIG9yIGZyZWUgdGhlIGNvbW1hbmQsIGFuZCByZXR1cm4gMS4gIFJldHVybiAwIGlmIHRoZQorICogY29tcGxldGVkIGNvbW1hbmQgaXNuJ3QgYXQgdGhlIGhlYWQgb2YgdGhlIGNvbW1hbmQgbGlzdC4KKyAqLworc3RhdGljIGludCBoYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3Qoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXYsCisJCXN0cnVjdCB4aGNpX2V2ZW50X2NtZCAqZXZlbnQpCit7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKKworCWlmIChsaXN0X2VtcHR5KCZ2aXJ0X2Rldi0+Y21kX2xpc3QpKQorCQlyZXR1cm4gMDsKKworCWNvbW1hbmQgPSBsaXN0X2VudHJ5KHZpcnRfZGV2LT5jbWRfbGlzdC5uZXh0LAorCQkJc3RydWN0IHhoY2lfY29tbWFuZCwgY21kX2xpc3QpOworCWlmICh4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZSAhPSBjb21tYW5kLT5jb21tYW5kX3RyYikKKwkJcmV0dXJuIDA7CisKKwljb21tYW5kLT5zdGF0dXMgPQorCQlHRVRfQ09NUF9DT0RFKGV2ZW50LT5zdGF0dXMpOworCWxpc3RfZGVsKCZjb21tYW5kLT5jbWRfbGlzdCk7CisJaWYgKGNvbW1hbmQtPmNvbXBsZXRpb24pCisJCWNvbXBsZXRlKGNvbW1hbmQtPmNvbXBsZXRpb24pOworCWVsc2UKKwkJeGhjaV9mcmVlX2NvbW1hbmQoeGhjaSwgY29tbWFuZCk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9jbWRfY29tcGxldGlvbihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCkBAIC02NjQsNiArNzE5LDExIEBACiAJaW50IHNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRChldmVudC0+ZmxhZ3MpOwogCXU2NCBjbWRfZG1hOwogCWRtYV9hZGRyX3QgY21kX2RlcXVldWVfZG1hOworCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXY7CisJdW5zaWduZWQgaW50IGVwX2luZGV4OworCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJdW5zaWduZWQgaW50IGVwX3N0YXRlOwogCiAJY21kX2RtYSA9IGV2ZW50LT5jbWRfdHJiOwogCWNtZF9kZXF1ZXVlX2RtYSA9IHhoY2lfdHJiX3ZpcnRfdG9fZG1hKHhoY2ktPmNtZF9yaW5nLT5kZXFfc2VnLApAQCAtNjkxLDYgKzc1MSw0NyBAQAogCQkJeGhjaV9mcmVlX3ZpcnRfZGV2aWNlKHhoY2ksIHNsb3RfaWQpOwogCQlicmVhazsKIAljYXNlIFRSQl9UWVBFKFRSQl9DT05GSUdfRVApOgorCQl2aXJ0X2RldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07CisJCWlmIChoYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3QoeGhjaSwgdmlydF9kZXYsIGV2ZW50KSkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBDb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZHMgY2FuIGNvbWUgZnJvbSB0aGUgVVNCIGNvcmUKKwkJICogY29uZmlndXJhdGlvbiBvciBhbHQgc2V0dGluZyBjaGFuZ2VzLCBvciBiZWNhdXNlIHRoZSBIVworCQkgKiBuZWVkZWQgYW4gZXh0cmEgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgYWZ0ZXIgYSByZXNldAorCQkgKiBlbmRwb2ludCBjb21tYW5kLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgeEhDSSBkcml2ZXIgaXMKKwkJICogbm90IHdhaXRpbmcgb24gdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kLgorCQkgKi8KKwkJY3RybF9jdHggPSB4aGNpX2dldF9pbnB1dF9jb250cm9sX2N0eCh4aGNpLAorCQkJCXZpcnRfZGV2LT5pbl9jdHgpOworCQkvKiBJbnB1dCBjdHggYWRkX2ZsYWdzIGFyZSB0aGUgZW5kcG9pbnQgaW5kZXggcGx1cyBvbmUgKi8KKwkJZXBfaW5kZXggPSB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoY3RybF9jdHgtPmFkZF9mbGFncykgLSAxOworCQllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XS5yaW5nOworCQlpZiAoIWVwX3JpbmcpIHsKKwkJCS8qIFRoaXMgbXVzdCBoYXZlIGJlZW4gYW4gaW5pdGlhbCBjb25maWd1cmUgZW5kcG9pbnQgKi8KKwkJCXhoY2ktPmRldnNbc2xvdF9pZF0tPmNtZF9zdGF0dXMgPQorCQkJCUdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cyk7CisJCQljb21wbGV0ZSgmeGhjaS0+ZGV2c1tzbG90X2lkXS0+Y21kX2NvbXBsZXRpb24pOworCQkJYnJlYWs7CisJCX0KKwkJZXBfc3RhdGUgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLmVwX3N0YXRlOworCQl4aGNpX2RiZyh4aGNpLCAiQ29tcGxldGVkIGNvbmZpZyBlcCBjbWQgLSBsYXN0IGVwIGluZGV4ID0gJWQsICIKKwkJCQkic3RhdGUgPSAlZFxuIiwgZXBfaW5kZXgsIGVwX3N0YXRlKTsKKwkJaWYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfUkVTRVRfRVBfUVVJUksgJiYKKwkJCQllcF9zdGF0ZSAmIEVQX0hBTFRFRCkgeworCQkJLyogQ2xlYXIgb3VyIGludGVybmFsIGhhbHRlZCBzdGF0ZSBhbmQgcmVzdGFydCByaW5nICovCisJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLmVwX3N0YXRlICY9CisJCQkJfkVQX0hBTFRFRDsKKwkJCXJpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpOworCQl9IGVsc2UgeworCQkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+Y21kX3N0YXR1cyA9CisJCQkJR0VUX0NPTVBfQ09ERShldmVudC0+c3RhdHVzKTsKKwkJCWNvbXBsZXRlKCZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5jbWRfY29tcGxldGlvbik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUkJfVFlQRShUUkJfRVZBTF9DT05URVhUKToKKwkJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOworCQlpZiAoaGFuZGxlX2NtZF9pbl9jbWRfd2FpdF9saXN0KHhoY2ksIHZpcnRfZGV2LCBldmVudCkpCisJCQlicmVhazsKIAkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+Y21kX3N0YXR1cyA9IEdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cyk7CiAJCWNvbXBsZXRlKCZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5jbWRfY29tcGxldGlvbik7CiAJCWJyZWFrOwpAQCAtODA1LDcgKzkwNiw5IEBACiAJCXN0cnVjdCB4aGNpX3RyYW5zZmVyX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqeGRldjsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcDsKIAlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOworCXVuc2lnbmVkIGludCBzbG90X2lkOwogCWludCBlcF9pbmRleDsKIAlzdHJ1Y3QgeGhjaV90ZCAqdGQgPSAwOwogCWRtYV9hZGRyX3QgZXZlbnRfZG1hOwpAQCAtODE0LDkgKzkxNywxMSBAQAogCXN0cnVjdCB1cmIgKnVyYiA9IDA7CiAJaW50IHN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAlzdHJ1Y3QgeGhjaV9lcF9jdHggKmVwX2N0eDsKKwl1MzIgdHJiX2NvbXBfY29kZTsKIAogCXhoY2lfZGJnKHhoY2ksICJJbiAlc1xuIiwgX19mdW5jX18pOwotCXhkZXYgPSB4aGNpLT5kZXZzW1RSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyldOworCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRChldmVudC0+ZmxhZ3MpOworCXhkZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwogCWlmICgheGRldikgewogCQl4aGNpX2Vycih4aGNpLCAiRVJST1IgVHJhbnNmZXIgZXZlbnQgcG9pbnRlZCB0byBiYWQgc2xvdFxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtODI1LDcgKzkzMCw4IEBACiAJLyogRW5kcG9pbnQgSUQgaXMgMSBiYXNlZCwgb3VyIGluZGV4IGlzIHplcm8gYmFzZWQgKi8KIAllcF9pbmRleCA9IFRSQl9UT19FUF9JRChldmVudC0+ZmxhZ3MpIC0gMTsKIAl4aGNpX2RiZyh4aGNpLCAiJXMgLSBlcCBpbmRleCA9ICVkXG4iLCBfX2Z1bmNfXywgZXBfaW5kZXgpOwotCWVwX3JpbmcgPSB4ZGV2LT5lcF9yaW5nc1tlcF9pbmRleF07CisJZXAgPSAmeGRldi0+ZXBzW2VwX2luZGV4XTsKKwllcF9yaW5nID0gZXAtPnJpbmc7CiAJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKIAlpZiAoIWVwX3JpbmcgfHwgKGVwX2N0eC0+ZXBfaW5mbyAmIEVQX1NUQVRFX01BU0spID09IEVQX1NUQVRFX0RJU0FCTEVEKSB7CiAJCXhoY2lfZXJyKHhoY2ksICJFUlJPUiBUcmFuc2ZlciBldmVudCBwb2ludGVkIHRvIGRpc2FibGVkIGVuZHBvaW50XG4iKTsKQEAgLTg3MCw3ICs5NzYsOCBAQAogCQkJKHVuc2lnbmVkIGludCkgZXZlbnQtPmZsYWdzKTsKIAogCS8qIExvb2sgZm9yIGNvbW1vbiBlcnJvciBjYXNlcyAqLwotCXN3aXRjaCAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSkgeworCXRyYl9jb21wX2NvZGUgPSBHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCXN3aXRjaCAodHJiX2NvbXBfY29kZSkgewogCS8qIFNraXAgY29kZXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgZGVwZW5kaW5nIG9uCiAJICogdHJhbnNmZXIgdHlwZQogCSAqLwpAQCAtODg1LDcgKzk5Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ09NUF9TVEFMTDoKIAkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBTdGFsbGVkIGVuZHBvaW50XG4iKTsKLQkJZXBfcmluZy0+c3RhdGUgfD0gRVBfSEFMVEVEOworCQllcC0+ZXBfc3RhdGUgfD0gRVBfSEFMVEVEOwogCQlzdGF0dXMgPSAtRVBJUEU7CiAJCWJyZWFrOwogCWNhc2UgQ09NUF9UUkJfRVJSOgpAQCAtOTEzLDcgKzEwMjAsNyBAQAogCS8qIFdhcyB0aGlzIGEgY29udHJvbCB0cmFuc2Zlcj8gKi8KIAlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmdGQtPnVyYi0+ZXAtPmRlc2MpKSB7CiAJCXhoY2lfZGVidWdfdHJiKHhoY2ksIHhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWUpOwotCQlzd2l0Y2ggKEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbikpIHsKKwkJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7CiAJCWNhc2UgQ09NUF9TVUNDRVNTOgogCQkJaWYgKGV2ZW50X3RyYiA9PSBlcF9yaW5nLT5kZXF1ZXVlKSB7CiAJCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBTdWNjZXNzIG9uIGN0cmwgc2V0dXAgVFJCIHdpdGhvdXQgSU9DIHNldD8/XG4iKTsKQEAgLTkyOCw4ICsxMDM1LDM3IEBACiAJCQlicmVhazsKIAkJY2FzZSBDT01QX1NIT1JUX1RYOgogCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBzaG9ydCB0cmFuc2ZlciBvbiBjb250cm9sIGVwXG4iKTsKLQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQllbHNlCisJCQkJc3RhdHVzID0gMDsKIAkJCWJyZWFrOworCQljYXNlIENPTVBfQkFCQkxFOgorCQkJLyogVGhlIDAuOTYgc3BlYyBzYXlzIGEgYmFiYmxpbmcgY29udHJvbCBlbmRwb2ludAorCQkJICogaXMgbm90IGhhbHRlZC4gVGhlIDAuOTYgc3BlYyBzYXlzIGl0IGlzLiAgU29tZSBIVworCQkJICogY2xhaW1zIHRvIGJlIDAuOTUgY29tcGxpYW50LCBidXQgaXQgaGFsdHMgdGhlIGNvbnRyb2wKKwkJCSAqIGVuZHBvaW50IGFueXdheS4gIENoZWNrIGlmIGEgYmFiYmxlIGhhbHRlZCB0aGUKKwkJCSAqIGVuZHBvaW50LgorCQkJICovCisJCQlpZiAoZXBfY3R4LT5lcF9pbmZvICE9IEVQX1NUQVRFX0hBTFRFRCkKKwkJCQlicmVhazsKKwkJCS8qIGVsc2UgZmFsbCB0aHJvdWdoICovCisJCWNhc2UgQ09NUF9TVEFMTDoKKwkJCS8qIERpZCB3ZSB0cmFuc2ZlciBwYXJ0IG9mIHRoZSBkYXRhIChtaWRkbGUpIHBoYXNlPyAqLworCQkJaWYgKGV2ZW50X3RyYiAhPSBlcF9yaW5nLT5kZXF1ZXVlICYmCisJCQkJCWV2ZW50X3RyYiAhPSB0ZC0+bGFzdF90cmIpCisJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9CisJCQkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgKKwkJCQkJLSBUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCQkJZWxzZQorCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJCQllcC0+c3RvcHBlZF90ZCA9IHRkOworCQkJZXAtPnN0b3BwZWRfdHJiID0gZXZlbnRfdHJiOworCQkJeGhjaV9xdWV1ZV9yZXNldF9lcCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCk7CisJCQl4aGNpX2NsZWFudXBfc3RhbGxlZF9yaW5nKHhoY2ksIHRkLT51cmItPmRldiwgZXBfaW5kZXgpOworCQkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKKwkJCWdvdG8gdGRfY2xlYW51cDsKIAkJZGVmYXVsdDoKIAkJCS8qIE90aGVycyBhbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi8KIAkJCWJyZWFrOwpAQCAtOTQzLDcgKzEwNzksMTAgQEAKIAkJCWlmIChldmVudF90cmIgPT0gdGQtPmxhc3RfdHJiKSB7CiAJCQkJaWYgKHRkLT51cmItPmFjdHVhbF9sZW5ndGggIT0gMCkgewogCQkJCQkvKiBEb24ndCBvdmVyd3JpdGUgYSBwcmV2aW91c2x5IHNldCBlcnJvciBjb2RlICovCi0JCQkJCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8IHN0YXR1cyA9PSAwKQorCQkJCQlpZiAoKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwKKwkJCQkJCQkJc3RhdHVzID09IDApICYmCisJCQkJCQkJKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzCisJCQkJCQkJICYgVVJCX1NIT1JUX05PVF9PSykpCiAJCQkJCQkvKiBEaWQgd2UgYWxyZWFkeSBzZWUgYSBzaG9ydCBkYXRhIHN0YWdlPyAqLwogCQkJCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKIAkJCQl9IGVsc2UgewpAQCAtOTUyLDcgKzEwOTEsNyBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkvKiBNYXliZSB0aGUgZXZlbnQgd2FzIGZvciB0aGUgZGF0YSBzdGFnZT8gKi8KLQkJCQlpZiAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSAhPSBDT01QX1NUT1BfSU5WQUwpIHsKKwkJCQlpZiAodHJiX2NvbXBfY29kZSAhPSBDT01QX1NUT1BfSU5WQUwpIHsKIAkJCQkJLyogV2UgZGlkbid0IHN0b3Agb24gYSBsaW5rIFRSQiBpbiB0aGUgbWlkZGxlICovCiAJCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPQogCQkJCQkJdGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCkBAIC05NjQsNyArMTEwMyw3IEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlzd2l0Y2ggKEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbikpIHsKKwkJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7CiAJCWNhc2UgQ09NUF9TVUNDRVNTOgogCQkJLyogRG91YmxlIGNoZWNrIHRoYXQgdGhlIEhXIHRyYW5zZmVycmVkIGV2ZXJ5dGhpbmcuICovCiAJCQlpZiAoZXZlbnRfdHJiICE9IHRkLT5sYXN0X3RyYikgewpAQCAtOTc1LDcgKzExMTQsMTIgQEAKIAkJCQllbHNlCiAJCQkJCXN0YXR1cyA9IDA7CiAJCQl9IGVsc2UgewotCQkJCXhoY2lfZGJnKHhoY2ksICJTdWNjZXNzZnVsIGJ1bGsgdHJhbnNmZXIhXG4iKTsKKwkJCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmdGQtPnVyYi0+ZXAtPmRlc2MpKQorCQkJCQl4aGNpX2RiZyh4aGNpLCAiU3VjY2Vzc2Z1bCBidWxrICIKKwkJCQkJCQkidHJhbnNmZXIhXG4iKTsKKwkJCQllbHNlCisJCQkJCXhoY2lfZGJnKHhoY2ksICJTdWNjZXNzZnVsIGludGVycnVwdCAiCisJCQkJCQkJInRyYW5zZmVyIVxuIik7CiAJCQkJc3RhdHVzID0gMDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTAwMSwxMSArMTE0NSwxNyBAQAogCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPQogCQkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KIAkJCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKLQkJCQlpZiAodGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA8IDApIHsKKwkJCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8CisJCQkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCQkJCXhoY2lfd2Fybih4aGNpLCAiSEMgZ2F2ZSBiYWQgbGVuZ3RoICIKIAkJCQkJCQkib2YgJWQgYnl0ZXMgbGVmdFxuIiwKIAkJCQkJCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pKTsKIAkJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCQkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmCisJCQkJCQkJVVJCX1NIT1JUX05PVF9PSykKKwkJCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQkJCWVsc2UKKwkJCQkJCXN0YXR1cyA9IDA7CiAJCQkJfQogCQkJCS8qIERvbid0IG92ZXJ3cml0ZSBhIHByZXZpb3VzbHkgc2V0IGVycm9yIGNvZGUgKi8KIAkJCQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgewpAQCAtMTA0MSwzMCArMTE5MSwzMSBAQAogCQkJLyogSWYgdGhlIHJpbmcgZGlkbid0IHN0b3Agb24gYSBMaW5rIG9yIE5vLW9wIFRSQiwgYWRkCiAJCQkgKiBpbiB0aGUgYWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIGZyb20gdGhlIE5vcm1hbCBUUkIKIAkJCSAqLwotCQkJaWYgKEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbikgIT0gQ09NUF9TVE9QX0lOVkFMKQorCQkJaWYgKHRyYl9jb21wX2NvZGUgIT0gQ09NUF9TVE9QX0lOVkFMKQogCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggKz0KIAkJCQkJVFJCX0xFTihjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzJdKSAtCiAJCQkJCVRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbik7CiAJCX0KIAl9Ci0JaWYgKEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbikgPT0gQ09NUF9TVE9QX0lOVkFMIHx8Ci0JCQlHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pID09IENPTVBfU1RPUCkgeworCWlmICh0cmJfY29tcF9jb2RlID09IENPTVBfU1RPUF9JTlZBTCB8fAorCQkJdHJiX2NvbXBfY29kZSA9PSBDT01QX1NUT1ApIHsKIAkJLyogVGhlIEVuZHBvaW50IFN0b3AgQ29tbWFuZCBjb21wbGV0aW9uIHdpbGwgdGFrZSBjYXJlIG9mIGFueQogCQkgKiBzdG9wcGVkIFREcy4gIEEgc3RvcHBlZCBURCBtYXkgYmUgcmVzdGFydGVkLCBzbyBkb24ndCB1cGRhdGUKIAkJICogdGhlIHJpbmcgZGVxdWV1ZSBwb2ludGVyIG9yIHRha2UgdGhpcyBURCBvZmYgYW55IGxpc3RzIHlldC4KIAkJICovCi0JCWVwX3JpbmctPnN0b3BwZWRfdGQgPSB0ZDsKLQkJZXBfcmluZy0+c3RvcHBlZF90cmIgPSBldmVudF90cmI7CisJCWVwLT5zdG9wcGVkX3RkID0gdGQ7CisJCWVwLT5zdG9wcGVkX3RyYiA9IGV2ZW50X3RyYjsKIAl9IGVsc2UgewotCQlpZiAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSA9PSBDT01QX1NUQUxMKSB7CisJCWlmICh0cmJfY29tcF9jb2RlID09IENPTVBfU1RBTEwgfHwKKwkJCQl0cmJfY29tcF9jb2RlID09IENPTVBfQkFCQkxFKSB7CiAJCQkvKiBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGVkIGZyb20gdGhlIGRyaXZlcidzCiAJCQkgKiBwZXJzcGVjdGl2ZSwgYnV0IHdlIG5lZWQgdG8gaXNzdWUgYSBzZXQgZGVxdWV1ZQogCQkJICogY29tbWFuZCBmb3IgdGhpcyBzdGFsbGVkIGVuZHBvaW50IHRvIG1vdmUgdGhlIGRlcXVldWUKIAkJCSAqIHBvaW50ZXIgcGFzdCB0aGUgVEQuICBXZSBjYW4ndCBkbyB0aGF0IGhlcmUgYmVjYXVzZQogCQkJICogdGhlIGhhbHQgY29uZGl0aW9uIG11c3QgYmUgY2xlYXJlZCBmaXJzdC4KIAkJCSAqLwotCQkJZXBfcmluZy0+c3RvcHBlZF90ZCA9IHRkOwotCQkJZXBfcmluZy0+c3RvcHBlZF90cmIgPSBldmVudF90cmI7CisJCQllcC0+c3RvcHBlZF90ZCA9IHRkOworCQkJZXAtPnN0b3BwZWRfdHJiID0gZXZlbnRfdHJiOwogCQl9IGVsc2UgewogCQkJLyogVXBkYXRlIHJpbmcgZGVxdWV1ZSBwb2ludGVyICovCiAJCQl3aGlsZSAoZXBfcmluZy0+ZGVxdWV1ZSAhPSB0ZC0+bGFzdF90cmIpCkBAIC0xMDcyLDE2ICsxMjIzLDQxIEBACiAJCQlpbmNfZGVxKHhoY2ksIGVwX3JpbmcsIGZhbHNlKTsKIAkJfQogCit0ZF9jbGVhbnVwOgogCQkvKiBDbGVhbiB1cCB0aGUgZW5kcG9pbnQncyBURCBsaXN0ICovCiAJCXVyYiA9IHRkLT51cmI7CisJCS8qIERvIG9uZSBsYXN0IGNoZWNrIG9mIHRoZSBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoLgorCQkgKiBJZiB0aGUgaG9zdCBjb250cm9sbGVyIHNhaWQgd2UgdHJhbnNmZXJyZWQgbW9yZSBkYXRhIHRoYW4KKwkJICogdGhlIGJ1ZmZlciBsZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCB3aWxsIGJlIGEgdmVyeSBiaWcKKwkJICogbnVtYmVyIChzaW5jZSBpdCdzIHVuc2lnbmVkKS4gIFBsYXkgaXQgc2FmZSBhbmQgc2F5IHdlIGRpZG4ndAorCQkgKiB0cmFuc2ZlciBhbnl0aGluZy4KKwkJICovCisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJCXhoY2lfd2Fybih4aGNpLCAiVVJCIHRyYW5zZmVyIGxlbmd0aCBpcyB3cm9uZywgIgorCQkJCQkieEhDIGlzc3VlPyByZXEuIGxlbiA9ICV1LCAiCisJCQkJCSJhY3QuIGxlbiA9ICV1XG4iLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKKwkJCQlzdGF0dXMgPSAtRVJFTU9URUlPOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IDA7CisJCX0KIAkJbGlzdF9kZWwoJnRkLT50ZF9saXN0KTsKIAkJLyogV2FzIHRoaXMgVEQgc2xhdGVkIHRvIGJlIGNhbmNlbGxlZCBidXQgY29tcGxldGVkIGFueXdheT8gKi8KIAkJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpKSB7CiAJCQlsaXN0X2RlbCgmdGQtPmNhbmNlbGxlZF90ZF9saXN0KTsKLQkJCWVwX3JpbmctPmNhbmNlbHNfcGVuZGluZy0tOworCQkJZXAtPmNhbmNlbHNfcGVuZGluZy0tOwogCQl9Ci0JCS8qIExlYXZlIHRoZSBURCBhcm91bmQgZm9yIHRoZSByZXNldCBlbmRwb2ludCBmdW5jdGlvbiB0byB1c2UgKi8KLQkJaWYgKEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbikgIT0gQ09NUF9TVEFMTCkgeworCQkvKiBMZWF2ZSB0aGUgVEQgYXJvdW5kIGZvciB0aGUgcmVzZXQgZW5kcG9pbnQgZnVuY3Rpb24gdG8gdXNlCisJCSAqIChidXQgb25seSBpZiBpdCdzIG5vdCBhIGNvbnRyb2wgZW5kcG9pbnQsIHNpbmNlIHdlIGFscmVhZHkKKwkJICogcXVldWVkIHRoZSBTZXQgVFIgZGVxdWV1ZSBwb2ludGVyIGNvbW1hbmQgZm9yIHN0YWxsZWQKKwkJICogY29udHJvbCBlbmRwb2ludHMpLgorCQkgKi8KKwkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJnVyYi0+ZXAtPmRlc2MpIHx8CisJCQkodHJiX2NvbXBfY29kZSAhPSBDT01QX1NUQUxMICYmCisJCQkJdHJiX2NvbXBfY29kZSAhPSBDT01QX0JBQkJMRSkpIHsKIAkJCWtmcmVlKHRkKTsKIAkJfQogCQl1cmItPmhjcHJpdiA9IE5VTEw7CkBAIC0xMDk0LDcgKzEyNzAsNyBAQAogCWlmICh1cmIpIHsKIAkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoeGhjaV90b19oY2QoeGhjaSksIHVyYik7CiAJCXhoY2lfZGJnKHhoY2ksICJHaXZlYmFjayBVUkIgJXAsIGxlbiA9ICVkLCBzdGF0dXMgPSAlZFxuIiwKLQkJCQl1cmIsIHRkLT51cmItPmFjdHVhbF9sZW5ndGgsIHN0YXR1cyk7CisJCQkJdXJiLCB1cmItPmFjdHVhbF9sZW5ndGgsIHN0YXR1cyk7CiAJCXNwaW5fdW5sb2NrKCZ4aGNpLT5sb2NrKTsKIAkJdXNiX2hjZF9naXZlYmFja191cmIoeGhjaV90b19oY2QoeGhjaSksIHVyYiwgc3RhdHVzKTsKIAkJc3Bpbl9sb2NrKCZ4aGNpLT5sb2NrKTsKQEAgLTEyMzUsNyArMTQxMSw3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgeGhjaV9lcF9jdHggKmVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCB4ZGV2LT5vdXRfY3R4LCBlcF9pbmRleCk7Ci0JcmV0ID0gcHJlcGFyZV9yaW5nKHhoY2ksIHhkZXYtPmVwX3JpbmdzW2VwX2luZGV4XSwKKwlyZXQgPSBwcmVwYXJlX3JpbmcoeGhjaSwgeGRldi0+ZXBzW2VwX2luZGV4XS5yaW5nLAogCQkJZXBfY3R4LT5lcF9pbmZvICYgRVBfU1RBVEVfTUFTSywKIAkJCW51bV90cmJzLCBtZW1fZmxhZ3MpOwogCWlmIChyZXQpCkBAIC0xMjU1LDkgKzE0MzEsOSBAQAogCSgqdGQpLT51cmIgPSB1cmI7CiAJdXJiLT5oY3ByaXYgPSAodm9pZCAqKSAoKnRkKTsKIAkvKiBBZGQgdGhpcyBURCB0byB0aGUgdGFpbCBvZiB0aGUgZW5kcG9pbnQgcmluZydzIFREIGxpc3QgKi8KLQlsaXN0X2FkZF90YWlsKCYoKnRkKS0+dGRfbGlzdCwgJnhkZXYtPmVwX3JpbmdzW2VwX2luZGV4XS0+dGRfbGlzdCk7Ci0JKCp0ZCktPnN0YXJ0X3NlZyA9IHhkZXYtPmVwX3JpbmdzW2VwX2luZGV4XS0+ZW5xX3NlZzsKLQkoKnRkKS0+Zmlyc3RfdHJiID0geGRldi0+ZXBfcmluZ3NbZXBfaW5kZXhdLT5lbnF1ZXVlOworCWxpc3RfYWRkX3RhaWwoJigqdGQpLT50ZF9saXN0LCAmeGRldi0+ZXBzW2VwX2luZGV4XS5yaW5nLT50ZF9saXN0KTsKKwkoKnRkKS0+c3RhcnRfc2VnID0geGRldi0+ZXBzW2VwX2luZGV4XS5yaW5nLT5lbnFfc2VnOworCSgqdGQpLT5maXJzdF90cmIgPSB4ZGV2LT5lcHNbZXBfaW5kZXhdLnJpbmctPmVucXVldWU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMzUsNiArMTUxMSw0NyBAQAogCXJpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpOwogfQogCisvKgorICogeEhDSSB1c2VzIG5vcm1hbCBUUkJzIGZvciBib3RoIGJ1bGsgYW5kIGludGVycnVwdC4gIFdoZW4gdGhlIGludGVycnVwdAorICogZW5kcG9pbnQgaXMgdG8gYmUgc2VydmljZWQsIHRoZSB4SEMgd2lsbCBjb25zdW1lIChhdCBtb3N0KSBvbmUgVEQuICBBIFRECisgKiAoY29tcHJpc2VkIG9mIHNnIGxpc3QgZW50cmllcykgY2FuIHRha2Ugc2V2ZXJhbCBzZXJ2aWNlIGludGVydmFscyB0bworICogdHJhbnNtaXQuCisgKi8KK2ludCB4aGNpX3F1ZXVlX2ludHJfdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsCisJCXN0cnVjdCB1cmIgKnVyYiwgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCkKK3sKKwlzdHJ1Y3QgeGhjaV9lcF9jdHggKmVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLAorCQkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+b3V0X2N0eCwgZXBfaW5kZXgpOworCWludCB4aGNpX2ludGVydmFsOworCWludCBlcF9pbnRlcnZhbDsKKworCXhoY2lfaW50ZXJ2YWwgPSBFUF9JTlRFUlZBTF9UT19VRlJBTUVTKGVwX2N0eC0+ZXBfaW5mbyk7CisJZXBfaW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCS8qIENvbnZlcnQgdG8gbWljcm9mcmFtZXMgKi8KKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cgfHwKKwkJCXVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkKKwkJZXBfaW50ZXJ2YWwgKj0gODsKKwkvKiBGSVhNRSBjaGFuZ2UgdGhpcyB0byBhIHdhcm5pbmcgYW5kIGEgc3VnZ2VzdGlvbiB0byB1c2UgdGhlIG5ldyBBUEkKKwkgKiB0byBzZXQgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgKG9uY2UgdGhlIEFQSSBpcyBhZGRlZCkuCisJICovCisJaWYgKHhoY2lfaW50ZXJ2YWwgIT0gZXBfaW50ZXJ2YWwpIHsKKwkJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiRHJpdmVyIHVzZXMgZGlmZmVyZW50IGludGVydmFsIgorCQkJCQkiICglZCBtaWNyb2ZyYW1lJXMpIHRoYW4geEhDSSAiCisJCQkJCSIoJWQgbWljcm9mcmFtZSVzKVxuIiwKKwkJCQkJZXBfaW50ZXJ2YWwsCisJCQkJCWVwX2ludGVydmFsID09IDEgPyAiIiA6ICJzIiwKKwkJCQkJeGhjaV9pbnRlcnZhbCwKKwkJCQkJeGhjaV9pbnRlcnZhbCA9PSAxID8gIiIgOiAicyIpOworCQl1cmItPmludGVydmFsID0geGhjaV9pbnRlcnZhbDsKKwkJLyogQ29udmVydCBiYWNrIHRvIGZyYW1lcyBmb3IgTFMvRlMgZGV2aWNlcyAqLworCQlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cgfHwKKwkJCQl1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpCisJCQl1cmItPmludGVydmFsIC89IDg7CisJfQorCXJldHVybiB4aGNpX3F1ZXVlX2J1bGtfdHgoeGhjaSwgR0ZQX0FUT01JQywgdXJiLCBzbG90X2lkLCBlcF9pbmRleCk7Cit9CisKIHN0YXRpYyBpbnQgcXVldWVfYnVsa19zZ190eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IG1lbV9mbGFncywKIAkJc3RydWN0IHVyYiAqdXJiLCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4KQogewpAQCAtMTM1MCw3ICsxNTY3LDcgQEAKIAlzdHJ1Y3QgeGhjaV9nZW5lcmljX3RyYiAqc3RhcnRfdHJiOwogCWludCBzdGFydF9jeWNsZTsKIAotCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcF9yaW5nc1tlcF9pbmRleF07CisJZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0ucmluZzsKIAludW1fdHJicyA9IGNvdW50X3NnX3RyYnNfbmVlZGVkKHhoY2ksIHVyYik7CiAJbnVtX3NncyA9IHVyYi0+bnVtX3NnczsKIApAQCAtMTQ4Myw3ICsxNzAwLDcgQEAKIAlpZiAodXJiLT5zZykKIAkJcmV0dXJuIHF1ZXVlX2J1bGtfc2dfdHgoeGhjaSwgbWVtX2ZsYWdzLCB1cmIsIHNsb3RfaWQsIGVwX2luZGV4KTsKIAotCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcF9yaW5nc1tlcF9pbmRleF07CisJZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0ucmluZzsKIAogCW51bV90cmJzID0gMDsKIAkvKiBIb3cgbXVjaCBkYXRhIGlzIChwb3RlbnRpYWxseSkgbGVmdCBiZWZvcmUgdGhlIDY0S0IgYm91bmRhcnk/ICovCkBAIC0xNTk0LDcgKzE4MTEsNyBAQAogCXUzMiBmaWVsZCwgbGVuZ3RoX2ZpZWxkOwogCXN0cnVjdCB4aGNpX3RkICp0ZDsKIAotCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcF9yaW5nc1tlcF9pbmRleF07CisJZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0ucmluZzsKIAogCS8qCiAJICogTmVlZCB0byBjb3B5IHNldHVwIHBhY2tldCBpbnRvIHNldHVwIFRSQiwgc28gd2UgY2FuJ3QgdXNlIHRoZSBzZXR1cApAQCAtMTY3NywxMiArMTg5NCwyNyBAQAogCiAvKioqKgkJQ29tbWFuZCBSaW5nIE9wZXJhdGlvbnMJCSoqKiovCiAKLS8qIEdlbmVyaWMgZnVuY3Rpb24gZm9yIHF1ZXVlaW5nIGEgY29tbWFuZCBUUkIgb24gdGhlIGNvbW1hbmQgcmluZyAqLwotc3RhdGljIGludCBxdWV1ZV9jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdTMyIGZpZWxkMSwgdTMyIGZpZWxkMiwgdTMyIGZpZWxkMywgdTMyIGZpZWxkNCkKKy8qIEdlbmVyaWMgZnVuY3Rpb24gZm9yIHF1ZXVlaW5nIGEgY29tbWFuZCBUUkIgb24gdGhlIGNvbW1hbmQgcmluZy4KKyAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIHJvb20gb24gdGhlIGNvbW1hbmQgcmluZyBmb3Igb25lIGNvbW1hbmQgVFJCLgorICogQWxzbyBjaGVjayB0aGF0IHRoZXJlJ3Mgcm9vbSByZXNlcnZlZCBmb3IgY29tbWFuZHMgdGhhdCBtdXN0IG5vdCBmYWlsLgorICogSWYgdGhpcyBpcyBhIGNvbW1hbmQgdGhhdCBtdXN0IG5vdCBmYWlsLCBtZWFuaW5nIGNvbW1hbmRfbXVzdF9zdWNjZWVkID0gVFJVRSwKKyAqIHRoZW4gb25seSBjaGVjayBmb3IgdGhlIG51bWJlciBvZiByZXNlcnZlZCBzcG90cy4KKyAqIERvbid0IGRlY3JlbWVudCB4aGNpLT5jbWRfcmluZ19yZXNlcnZlZF90cmJzIGFmdGVyIHdlJ3ZlIHF1ZXVlZCB0aGUgVFJCCisgKiBiZWNhdXNlIHRoZSBjb21tYW5kIGV2ZW50IGhhbmRsZXIgbWF5IHdhbnQgdG8gcmVzdWJtaXQgYSBmYWlsZWQgY29tbWFuZC4KKyAqLworc3RhdGljIGludCBxdWV1ZV9jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdTMyIGZpZWxkMSwgdTMyIGZpZWxkMiwKKwkJdTMyIGZpZWxkMywgdTMyIGZpZWxkNCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCkKIHsKLQlpZiAoIXJvb21fb25fcmluZyh4aGNpLCB4aGNpLT5jbWRfcmluZywgMSkpIHsKKwlpbnQgcmVzZXJ2ZWRfdHJicyA9IHhoY2ktPmNtZF9yaW5nX3Jlc2VydmVkX3RyYnM7CisJaWYgKCFjb21tYW5kX211c3Rfc3VjY2VlZCkKKwkJcmVzZXJ2ZWRfdHJicysrOworCisJaWYgKCFyb29tX29uX3JpbmcoeGhjaSwgeGhjaS0+Y21kX3JpbmcsIHJlc2VydmVkX3RyYnMpKSB7CiAJCWlmICghaW5faW50ZXJydXB0KCkpCiAJCQl4aGNpX2Vycih4aGNpLCAiRVJSOiBObyByb29tIGZvciBjb21tYW5kIG9uIGNvbW1hbmQgcmluZ1xuIik7CisJCWlmIChjb21tYW5kX211c3Rfc3VjY2VlZCkKKwkJCXhoY2lfZXJyKHhoY2ksICJFUlI6IFJlc2VydmVkIFRSQiBjb3VudGluZyBmb3IgIgorCQkJCQkidW5mYWlsYWJsZSBjb21tYW5kcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXF1ZXVlX3RyYih4aGNpLCB4aGNpLT5jbWRfcmluZywgZmFsc2UsIGZpZWxkMSwgZmllbGQyLCBmaWVsZDMsCkBAIC0xNjkzLDcgKzE5MjUsNyBAQAogLyogUXVldWUgYSBuby1vcCBjb21tYW5kIG9uIHRoZSBjb21tYW5kIHJpbmcgKi8KIHN0YXRpYyBpbnQgcXVldWVfY21kX25vb3Aoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewotCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIDAsIDAsIDAsIFRSQl9UWVBFKFRSQl9DTURfTk9PUCkpOworCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIDAsIDAsIDAsIFRSQl9UWVBFKFRSQl9DTURfTk9PUCksIGZhbHNlKTsKIH0KIAogLyoKQEAgLTE3MTIsNyArMTk0NCw3IEBACiBpbnQgeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MzIgdHJiX3R5cGUsIHUzMiBzbG90X2lkKQogewogCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIDAsIDAsIDAsCi0JCQlUUkJfVFlQRSh0cmJfdHlwZSkgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCkpOworCQkJVFJCX1RZUEUodHJiX3R5cGUpIHwgU0xPVF9JRF9GT1JfVFJCKHNsb3RfaWQpLCBmYWxzZSk7CiB9CiAKIC8qIFF1ZXVlIGFuIGFkZHJlc3MgZGV2aWNlIGNvbW1hbmQgVFJCICovCkBAIC0xNzIxLDE2ICsxOTUzLDI4IEBACiB7CiAJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgbG93ZXJfMzJfYml0cyhpbl9jdHhfcHRyKSwKIAkJCXVwcGVyXzMyX2JpdHMoaW5fY3R4X3B0ciksIDAsCi0JCQlUUkJfVFlQRShUUkJfQUREUl9ERVYpIHwgU0xPVF9JRF9GT1JfVFJCKHNsb3RfaWQpKTsKKwkJCVRSQl9UWVBFKFRSQl9BRERSX0RFVikgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCksCisJCQlmYWxzZSk7CiB9CiAKIC8qIFF1ZXVlIGEgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgVFJCICovCiBpbnQgeGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBkbWFfYWRkcl90IGluX2N0eF9wdHIsCisJCXUzMiBzbG90X2lkLCBib29sIGNvbW1hbmRfbXVzdF9zdWNjZWVkKQoreworCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIGxvd2VyXzMyX2JpdHMoaW5fY3R4X3B0ciksCisJCQl1cHBlcl8zMl9iaXRzKGluX2N0eF9wdHIpLCAwLAorCQkJVFJCX1RZUEUoVFJCX0NPTkZJR19FUCkgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCksCisJCQljb21tYW5kX211c3Rfc3VjY2VlZCk7Cit9CisKKy8qIFF1ZXVlIGFuIGV2YWx1YXRlIGNvbnRleHQgY29tbWFuZCBUUkIgKi8KK2ludCB4aGNpX3F1ZXVlX2V2YWx1YXRlX2NvbnRleHQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBkbWFfYWRkcl90IGluX2N0eF9wdHIsCiAJCXUzMiBzbG90X2lkKQogewogCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIGxvd2VyXzMyX2JpdHMoaW5fY3R4X3B0ciksCiAJCQl1cHBlcl8zMl9iaXRzKGluX2N0eF9wdHIpLCAwLAotCQkJVFJCX1RZUEUoVFJCX0NPTkZJR19FUCkgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCkpOworCQkJVFJCX1RZUEUoVFJCX0VWQUxfQ09OVEVYVCkgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCksCisJCQlmYWxzZSk7CiB9CiAKIGludCB4aGNpX3F1ZXVlX3N0b3BfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKQEAgLTE3NDEsNyArMTk4NSw3IEBACiAJdTMyIHR5cGUgPSBUUkJfVFlQRShUUkJfU1RPUF9SSU5HKTsKIAogCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIDAsIDAsIDAsCi0JCQl0cmJfc2xvdF9pZCB8IHRyYl9lcF9pbmRleCB8IHR5cGUpOworCQkJdHJiX3Nsb3RfaWQgfCB0cmJfZXBfaW5kZXggfCB0eXBlLCBmYWxzZSk7CiB9CiAKIC8qIFNldCBUcmFuc2ZlciBSaW5nIERlcXVldWUgUG9pbnRlciBjb21tYW5kLgpAQCAtMTc2NSw3ICsyMDA5LDcgQEAKIAl9CiAJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgbG93ZXJfMzJfYml0cyhhZGRyKSB8IGN5Y2xlX3N0YXRlLAogCQkJdXBwZXJfMzJfYml0cyhhZGRyKSwgMCwKLQkJCXRyYl9zbG90X2lkIHwgdHJiX2VwX2luZGV4IHwgdHlwZSk7CisJCQl0cmJfc2xvdF9pZCB8IHRyYl9lcF9pbmRleCB8IHR5cGUsIGZhbHNlKTsKIH0KIAogaW50IHhoY2lfcXVldWVfcmVzZXRfZXAoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKQEAgLTE3NzUsNSArMjAxOSw2IEBACiAJdTMyIHRyYl9lcF9pbmRleCA9IEVQX0lEX0ZPUl9UUkIoZXBfaW5kZXgpOwogCXUzMiB0eXBlID0gVFJCX1RZUEUoVFJCX1JFU0VUX0VQKTsKIAotCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIDAsIDAsIDAsIHRyYl9zbG90X2lkIHwgdHJiX2VwX2luZGV4IHwgdHlwZSk7CisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwgdHJiX3Nsb3RfaWQgfCB0cmJfZXBfaW5kZXggfCB0eXBlLAorCQkJZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCBkMzFkMzIyLi40YjI1NGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNTA5LDYgKzUwOSw4IEBACiAjZGVmaW5lIE1BWF9FWElUCSgweGZmZmYpCiAvKiBSb290IGh1YiBwb3J0IG51bWJlciB0aGF0IGlzIG5lZWRlZCB0byBhY2Nlc3MgdGhlIFVTQiBkZXZpY2UgKi8KICNkZWZpbmUgUk9PVF9IVUJfUE9SVChwKQkoKChwKSAmIDB4ZmYpIDw8IDE2KQorLyogTWF4aW11bSBudW1iZXIgb2YgcG9ydHMgdW5kZXIgYSBodWIgZGV2aWNlICovCisjZGVmaW5lIFhIQ0lfTUFYX1BPUlRTKHApCSgoKHApICYgMHhmZikgPDwgMjQpCiAKIC8qIHR0X2luZm8gYml0bWFza3MgKi8KIC8qCkBAIC01MjIsNiArNTI0LDcgQEAKICAqICcwJyBpZiB0aGUgZGV2aWNlIGlzIG5vdCBsb3cgb3IgZnVsbCBzcGVlZC4KICAqLwogI2RlZmluZSBUVF9QT1JUCQkoMHhmZiA8PCA4KQorI2RlZmluZSBUVF9USElOS19USU1FKHApCSgoKHApICYgMHgzKSA8PCAxNikKIAogLyogZGV2X3N0YXRlIGJpdG1hc2tzICovCiAvKiBVU0IgZGV2aWNlIGFkZHJlc3MgLSBhc3NpZ25lZCBieSB0aGUgSEMgKi8KQEAgLTU4MSw2ICs1ODQsNyBAQAogLyogYml0IDE1IGlzIExpbmVhciBTdHJlYW0gQXJyYXkgKi8KIC8qIEludGVydmFsIC0gcGVyaW9kIGJldHdlZW4gcmVxdWVzdHMgdG8gYW4gZW5kcG9pbnQgLSAxMjV1IGluY3JlbWVudHMuICovCiAjZGVmaW5lIEVQX0lOVEVSVkFMKHApCQkoKHAgJiAweGZmKSA8PCAxNikKKyNkZWZpbmUgRVBfSU5URVJWQUxfVE9fVUZSQU1FUyhwKQkJKDEgPDwgKCgocCkgPj4gMTYpICYgMHhmZikpCiAKIC8qIGVwX2luZm8yIGJpdG1hc2tzICovCiAvKgpAQCAtNTg5LDYgKzU5Myw3IEBACiAgKi8KICNkZWZpbmUJRk9SQ0VfRVZFTlQJKDB4MSkKICNkZWZpbmUgRVJST1JfQ09VTlQocCkJKCgocCkgJiAweDMpIDw8IDEpCisjZGVmaW5lIENUWF9UT19FUF9UWVBFKHApCSgoKHApID4+IDMpICYgMHg3KQogI2RlZmluZSBFUF9UWVBFKHApCSgocCkgPDwgMykKICNkZWZpbmUgSVNPQ19PVVRfRVAJMQogI2RlZmluZSBCVUxLX09VVF9FUAkyCkBAIC02MDEsNiArNjA2LDggQEAKIC8qIGJpdCA3IGlzIEhvc3QgSW5pdGlhdGUgRGlzYWJsZSAtIGZvciBkaXNhYmxpbmcgc3RyZWFtIHNlbGVjdGlvbiAqLwogI2RlZmluZSBNQVhfQlVSU1QocCkJKCgocCkmMHhmZikgPDwgOCkKICNkZWZpbmUgTUFYX1BBQ0tFVChwKQkoKChwKSYweGZmZmYpIDw8IDE2KQorI2RlZmluZSBNQVhfUEFDS0VUX01BU0sJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lIE1BWF9QQUNLRVRfREVDT0RFRChwKQkoKChwKSA+PiAxNikgJiAweGZmZmYpCiAKIAogLyoqCkBAIC02MTYsMTEgKzYyMyw0NCBAQAogCXUzMglyc3ZkMls2XTsKIH07CiAKKy8qIFJlcHJlc2VudHMgZXZlcnl0aGluZyB0aGF0IGlzIG5lZWRlZCB0byBpc3N1ZSBhIGNvbW1hbmQgb24gdGhlIGNvbW1hbmQgcmluZy4KKyAqIEl0J3MgdXNlZnVsIHRvIHByZS1hbGxvY2F0ZSB0aGVzZSBmb3IgY29tbWFuZHMgdGhhdCBjYW5ub3QgZmFpbCBkdWUgdG8KKyAqIG91dC1vZi1tZW1vcnkgZXJyb3JzLCBsaWtlIGZyZWVpbmcgc3RyZWFtcy4KKyAqLworc3RydWN0IHhoY2lfY29tbWFuZCB7CisJLyogSW5wdXQgY29udGV4dCBmb3IgY2hhbmdpbmcgZGV2aWNlIHN0YXRlICovCisJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eAkqaW5fY3R4OworCXUzMgkJCQlzdGF0dXM7CisJLyogSWYgY29tcGxldGlvbiBpcyBudWxsLCBubyBvbmUgaXMgd2FpdGluZyBvbiB0aGlzIGNvbW1hbmQKKwkgKiBhbmQgdGhlIHN0cnVjdHVyZSBjYW4gYmUgZnJlZWQgYWZ0ZXIgdGhlIGNvbW1hbmQgY29tcGxldGVzLgorCSAqLworCXN0cnVjdCBjb21wbGV0aW9uCQkqY29tcGxldGlvbjsKKwl1bmlvbiB4aGNpX3RyYgkJCSpjb21tYW5kX3RyYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQljbWRfbGlzdDsKK307CisKIC8qIGRyb3AgY29udGV4dCBiaXRtYXNrcyAqLwogI2RlZmluZQlEUk9QX0VQKHgpCSgweDEgPDwgeCkKIC8qIGFkZCBjb250ZXh0IGJpdG1hc2tzICovCiAjZGVmaW5lCUFERF9FUCh4KQkoMHgxIDw8IHgpCiAKK3N0cnVjdCB4aGNpX3ZpcnRfZXAgeworCXN0cnVjdCB4aGNpX3JpbmcJCSpyaW5nOworCS8qIFRlbXBvcmFyeSBzdG9yYWdlIGluIGNhc2UgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kIGZhaWxzIGFuZCB3ZQorCSAqIGhhdmUgdG8gcmVzdG9yZSB0aGUgZGV2aWNlIHN0YXRlIHRvIHRoZSBwcmV2aW91cyBzdGF0ZQorCSAqLworCXN0cnVjdCB4aGNpX3JpbmcJCSpuZXdfcmluZzsKKwl1bnNpZ25lZCBpbnQJCQllcF9zdGF0ZTsKKyNkZWZpbmUgU0VUX0RFUV9QRU5ESU5HCQkoMSA8PCAwKQorI2RlZmluZSBFUF9IQUxURUQJCSgxIDw8IDEpCisJLyogLS0tLSAgUmVsYXRlZCB0byBVUkIgY2FuY2VsbGF0aW9uIC0tLS0gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNhbmNlbGxlZF90ZF9saXN0OworCXVuc2lnbmVkIGludAkJY2FuY2Vsc19wZW5kaW5nOworCS8qIFRoZSBUUkIgdGhhdCB3YXMgbGFzdCByZXBvcnRlZCBpbiBhIHN0b3BwZWQgZW5kcG9pbnQgcmluZyAqLworCXVuaW9uIHhoY2lfdHJiCQkqc3RvcHBlZF90cmI7CisJc3RydWN0IHhoY2lfdGQJCSpzdG9wcGVkX3RkOworfTsKKwogc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgewogCS8qCiAJICogQ29tbWFuZHMgdG8gdGhlIGhhcmR3YXJlIGFyZSBwYXNzZWQgYW4gImlucHV0IGNvbnRleHQiIHRoYXQKQEAgLTYzMywxNiArNjczLDExIEBACiAJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAgICAgICAqb3V0X2N0eDsKIAkvKiBVc2VkIGZvciBhZGRyZXNzaW5nIGRldmljZXMgYW5kIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAqLwogCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggICAgICAgKmluX2N0eDsKLQotCS8qIEZJWE1FIHdoZW4gc3RyZWFtIHN1cHBvcnQgaXMgYWRkZWQgKi8KLQlzdHJ1Y3QgeGhjaV9yaW5nCQkqZXBfcmluZ3NbMzFdOwotCS8qIFRlbXBvcmFyeSBzdG9yYWdlIGluIGNhc2UgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kIGZhaWxzIGFuZCB3ZQotCSAqIGhhdmUgdG8gcmVzdG9yZSB0aGUgZGV2aWNlIHN0YXRlIHRvIHRoZSBwcmV2aW91cyBzdGF0ZQotCSAqLwotCXN0cnVjdCB4aGNpX3JpbmcJCSpuZXdfZXBfcmluZ3NbMzFdOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAJCWVwc1szMV07CiAJc3RydWN0IGNvbXBsZXRpb24JCWNtZF9jb21wbGV0aW9uOwogCS8qIFN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGlzc3VlZCBmb3IgdGhpcyBkZXZpY2UgKi8KIAl1MzIJCQkJY21kX3N0YXR1czsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQljbWRfbGlzdDsKIH07CiAKIApAQCAtOTA1LDYgKzk0MCw4IEBACiAgKiBJdCBtdXN0IGFsc28gYmUgZ3JlYXRlciB0aGFuIDE2LgogICovCiAjZGVmaW5lIFRSQlNfUEVSX1NFR01FTlQJNjQKKy8qIEFsbG93IHR3byBjb21tYW5kcyArIGEgbGluayBUUkIsIGFsb25nIHdpdGggYW55IHJlc2VydmVkIGNvbW1hbmQgVFJCcyAqLworI2RlZmluZSBNQVhfUlNWRF9DTURfVFJCUwkoVFJCU19QRVJfU0VHTUVOVCAtIDMpCiAjZGVmaW5lIFNFR01FTlRfU0laRQkJKFRSQlNfUEVSX1NFR01FTlQqMTYpCiAvKiBUUkIgYnVmZmVyIHBvaW50ZXJzIGNhbid0IGNyb3NzIDY0S0IgYm91bmRhcmllcyAqLwogI2RlZmluZSBUUkJfTUFYX0JVRkZfU0hJRlQJCTE2CkBAIC05MjYsNiArOTYzLDEyIEBACiAJdW5pb24geGhjaV90cmIJCSpsYXN0X3RyYjsKIH07CiAKK3N0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgeworCXN0cnVjdCB4aGNpX3NlZ21lbnQgKm5ld19kZXFfc2VnOworCXVuaW9uIHhoY2lfdHJiICpuZXdfZGVxX3B0cjsKKwlpbnQgbmV3X2N5Y2xlX3N0YXRlOworfTsKKwogc3RydWN0IHhoY2lfcmluZyB7CiAJc3RydWN0IHhoY2lfc2VnbWVudAkqZmlyc3Rfc2VnOwogCXVuaW9uICB4aGNpX3RyYgkJKmVucXVldWU7CkBAIC05MzUsMTUgKzk3OCw2IEBACiAJc3RydWN0IHhoY2lfc2VnbWVudAkqZGVxX3NlZzsKIAl1bnNpZ25lZCBpbnQJCWRlcV91cGRhdGVzOwogCXN0cnVjdCBsaXN0X2hlYWQJdGRfbGlzdDsKLQkvKiAtLS0tICBSZWxhdGVkIHRvIFVSQiBjYW5jZWxsYXRpb24gLS0tLSAqLwotCXN0cnVjdCBsaXN0X2hlYWQJY2FuY2VsbGVkX3RkX2xpc3Q7Ci0JdW5zaWduZWQgaW50CQljYW5jZWxzX3BlbmRpbmc7Ci0JdW5zaWduZWQgaW50CQlzdGF0ZTsKLSNkZWZpbmUgU0VUX0RFUV9QRU5ESU5HCQkoMSA8PCAwKQotI2RlZmluZSBFUF9IQUxURUQJCSgxIDw8IDEpCi0JLyogVGhlIFRSQiB0aGF0IHdhcyBsYXN0IHJlcG9ydGVkIGluIGEgc3RvcHBlZCBlbmRwb2ludCByaW5nICovCi0JdW5pb24geGhjaV90cmIJCSpzdG9wcGVkX3RyYjsKLQlzdHJ1Y3QgeGhjaV90ZAkJKnN0b3BwZWRfdGQ7CiAJLyoKIAkgKiBXcml0ZSB0aGUgY3ljbGUgc3RhdGUgaW50byB0aGUgVFJCIGN5Y2xlIGZpZWxkIHRvIGdpdmUgb3duZXJzaGlwIG9mCiAJICogdGhlIFRSQiB0byB0aGUgaG9zdCBjb250cm9sbGVyIChpZiB3ZSBhcmUgdGhlIHByb2R1Y2VyKSwgb3IgdG8gY2hlY2sKQEAgLTk1MiwxMiArOTg2LDYgQEAKIAl1MzIJCQljeWNsZV9zdGF0ZTsKIH07CiAKLXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgewotCXN0cnVjdCB4aGNpX3NlZ21lbnQgKm5ld19kZXFfc2VnOwotCXVuaW9uIHhoY2lfdHJiICpuZXdfZGVxX3B0cjsKLQlpbnQgbmV3X2N5Y2xlX3N0YXRlOwotfTsKLQogc3RydWN0IHhoY2lfZXJzdF9lbnRyeSB7CiAJLyogNjQtYml0IGV2ZW50IHJpbmcgc2VnbWVudCBhZGRyZXNzICovCiAJdTY0CXNlZ19hZGRyOwpAQCAtMTAzNCw2ICsxMDYyLDcgQEAKIAkvKiBkYXRhIHN0cnVjdHVyZXMgKi8KIAlzdHJ1Y3QgeGhjaV9kZXZpY2VfY29udGV4dF9hcnJheSAqZGNiYWE7CiAJc3RydWN0IHhoY2lfcmluZwkqY21kX3Jpbmc7CisJdW5zaWduZWQgaW50CQljbWRfcmluZ19yZXNlcnZlZF90cmJzOwogCXN0cnVjdCB4aGNpX3JpbmcJKmV2ZW50X3Jpbmc7CiAJc3RydWN0IHhoY2lfZXJzdAllcnN0OwogCS8qIFNjcmF0Y2hwYWQgKi8KQEAgLTEwNTgsNiArMTA4Nyw5IEBACiAJaW50CQkJbm9vcHNfc3VibWl0dGVkOwogCWludAkJCW5vb3BzX2hhbmRsZWQ7CiAJaW50CQkJZXJyb3JfYml0bWFzazsKKwl1bnNpZ25lZCBpbnQJCXF1aXJrczsKKyNkZWZpbmUJWEhDSV9MSU5LX1RSQl9RVUlSSwkoMSA8PCAwKQorI2RlZmluZSBYSENJX1JFU0VUX0VQX1FVSVJLCSgxIDw8IDEpCiB9OwogCiAvKiBGb3IgdGVzdGluZyBwdXJwb3NlcyAqLwpAQCAtMTEzNiw2ICsxMTY4LDEzIEBACiAJd3JpdGVsKHZhbF9oaSwgcHRyICsgMSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHhoY2lfbGlua190cmJfcXVpcmsoc3RydWN0IHhoY2lfaGNkICp4aGNpKQoreworCXUzMiB0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+Y2FwX3JlZ3MtPmhjX2NhcGJhc2UpOworCXJldHVybiAoKEhDX1ZFUlNJT04odGVtcCkgPT0gMHg5NSkgJiYKKwkJCSh4aGNpLT5xdWlya3MgJiBYSENJX0xJTktfVFJCX1FVSVJLKSk7Cit9CisKIC8qIHhIQ0kgZGVidWdnaW5nICovCiB2b2lkIHhoY2lfcHJpbnRfaXJfc2V0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfaW50cl9yZWcgKmlyX3NldCwgaW50IHNldF9udW0pOwogdm9pZCB4aGNpX3ByaW50X3JlZ2lzdGVycyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwpAQCAtMTE1MCw3ICsxMTg5LDcgQEAKIHZvaWQgeGhjaV9kYmdfcmluZ19wdHJzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfcmluZyAqcmluZyk7CiB2b2lkIHhoY2lfZGJnX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCwgdW5zaWduZWQgaW50IGxhc3RfZXApOwogCi0vKiB4SENJIG1lbW9yeSBtYW5hZ21lbnQgKi8KKy8qIHhIQ0kgbWVtb3J5IG1hbmFnZW1lbnQgKi8KIHZvaWQgeGhjaV9tZW1fY2xlYW51cChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwogaW50IHhoY2lfbWVtX2luaXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBmbGFncyk7CiB2b2lkIHhoY2lfZnJlZV92aXJ0X2RldmljZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkKTsKQEAgLTExNTgsMTEgKzExOTcsMjQgQEAKIGludCB4aGNpX3NldHVwX2FkZHJlc3NhYmxlX3ZpcnRfZGV2KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogdW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYyk7CiB1bnNpZ25lZCBpbnQgeGhjaV9nZXRfZW5kcG9pbnRfZmxhZyhzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpOwordW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2ZsYWdfZnJvbV9pbmRleCh1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwordW5zaWduZWQgaW50IHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludCh1MzIgYWRkZWRfY3R4cyk7CiB2b2lkIHhoY2lfZW5kcG9pbnRfemVybyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2Rldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7Cit2b2lkIHhoY2lfZW5kcG9pbnRfY29weShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmluX2N0eCwKKwkJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqb3V0X2N0eCwKKwkJdW5zaWduZWQgaW50IGVwX2luZGV4KTsKK3ZvaWQgeGhjaV9zbG90X2NvcHkoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICppbl9jdHgsCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKm91dF9jdHgpOwogaW50IHhoY2lfZW5kcG9pbnRfaW5pdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldiwKIAkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsCiAJCWdmcF90IG1lbV9mbGFncyk7CiB2b2lkIHhoY2lfcmluZ19mcmVlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfcmluZyAqcmluZyk7CitzdHJ1Y3QgeGhjaV9jb21tYW5kICp4aGNpX2FsbG9jX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlib29sIGFsbG9jYXRlX2NvbXBsZXRpb24sIGdmcF90IG1lbV9mbGFncyk7Cit2b2lkIHhoY2lfZnJlZV9jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZCk7CiAKICNpZmRlZiBDT05GSUdfUENJCiAvKiB4SENJIFBDSSBnbHVlICovCkBAIC0xMTgyLDYgKzEyMzQsOCBAQAogaW50IHhoY2lfYWxsb2NfZGV2KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIHZvaWQgeGhjaV9mcmVlX2RldihzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBpbnQgeGhjaV9hZGRyZXNzX2RldmljZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CitpbnQgeGhjaV91cGRhdGVfaHViX2RldmljZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwKKwkJCXN0cnVjdCB1c2JfdHQgKnR0LCBnZnBfdCBtZW1fZmxhZ3MpOwogaW50IHhoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpOwogaW50IHhoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKIGludCB4aGNpX2FkZF9lbmRwb2ludChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7CkBAIC0xMjA1LDcgKzEyNTksMTEgQEAKIAkJaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCk7CiBpbnQgeGhjaV9xdWV1ZV9idWxrX3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgbWVtX2ZsYWdzLCBzdHJ1Y3QgdXJiICp1cmIsCiAJCWludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOworaW50IHhoY2lfcXVldWVfaW50cl90eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IG1lbV9mbGFncywgc3RydWN0IHVyYiAqdXJiLAorCQlpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4KTsKIGludCB4aGNpX3F1ZXVlX2NvbmZpZ3VyZV9lbmRwb2ludChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGRtYV9hZGRyX3QgaW5fY3R4X3B0ciwKKwkJdTMyIHNsb3RfaWQsIGJvb2wgY29tbWFuZF9tdXN0X3N1Y2NlZWQpOworaW50IHhoY2lfcXVldWVfZXZhbHVhdGVfY29udGV4dChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGRtYV9hZGRyX3QgaW5fY3R4X3B0ciwKIAkJdTMyIHNsb3RfaWQpOwogaW50IHhoY2lfcXVldWVfcmVzZXRfZXAoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4KTsKQEAgLTEyMTMsOCArMTI3MSwxMyBAQAogCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAogCQlzdHJ1Y3QgeGhjaV90ZCAqY3VyX3RkLCBzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpzdGF0ZSk7CiB2b2lkIHhoY2lfcXVldWVfbmV3X2RlcXVldWVfc3RhdGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nLCB1bnNpZ25lZCBpbnQgc2xvdF9pZCwKLQkJdW5zaWduZWQgaW50IGVwX2luZGV4LCBzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpkZXFfc3RhdGUpOworCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAorCQlzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpkZXFfc3RhdGUpOwordm9pZCB4aGNpX2NsZWFudXBfc3RhbGxlZF9yaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHVuc2lnbmVkIGludCBlcF9pbmRleCk7Cit2b2lkIHhoY2lfcXVldWVfY29uZmlnX2VwX3F1aXJrKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCwKKwkJc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSAqZGVxX3N0YXRlKTsKIAogLyogeEhDSSByb290aHViIGNvZGUgKi8KIGludCB4aGNpX2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKaW5kZXggNDU0MWRmYy4uNDU5YTcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCkBAIC02NTMsMzMgKzY1Myw2IEBACiAJLm1heF9zZWN0b3JzPQkJMjU2LCAvKiAxMjggSyAqLwogfTsKIAotc3RydWN0IHZlbmRvcl9wcm9kdWN0Ci17Ci0JY2hhciogbmFtZTsKLQllbnVtCi0JewotCQltdHNfc3VwX3Vua25vd249MCwKLQkJbXRzX3N1cF9hbHBoYSwKLQkJbXRzX3N1cF9mdWxsCi0JfQotCXN1cHBvcnRfc3RhdHVzOwotfSA7Ci0KLQotLyogVGhlc2UgYXJlIHRha2VuIGZyb20gdGhlIG1zbVVTQi5pbmYgZmlsZSBvbiB0aGUgV2luZG93cyBkcml2ZXIgQ0QgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmVuZG9yX3Byb2R1Y3QgbXRzX3N1cHBvcnRlZF9wcm9kdWN0c1tdID0KLXsKLQl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKLQl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKLQl7ICJTY2FubWFrZXIgWDYiLAltdHNfc3VwX2FscGhhfSwKLQl7ICJQaGFudG9tIEM2IiwJCW10c19zdXBfdW5rbm93bn0sCi0JeyAiUGhhbnRvbSAzMzZDWCIsCW10c19zdXBfdW5rbm93bn0sCi0JeyAiU2Nhbk1ha2VyIFY2VVNMIiwJbXRzX3N1cF91bmtub3dufSwKLQl7ICJTY2FuTWFrZXIgVjZVU0wiLAltdHNfc3VwX3Vua25vd259LAotCXsgIlNjYW5tYWtlciBWNlVMIiwJbXRzX3N1cF91bmtub3dufSwKLQl7ICJTY2FubWFrZXIgVjZVUEwiLAltdHNfc3VwX2FscGhhfSwKLX07Ci0KIC8qIFRoZSBlbnRyaWVzIG9mIG1pY3JvdGVrX3RhYmxlIG11c3QgY29ycmVzcG9uZCwgbGluZS1ieS1saW5lIHRvCiAgICB0aGUgZW50cmllcyBvZiBtdHNfc3VwcG9ydGVkX3Byb2R1Y3RzW10uICovCiAKQEAgLTcxMSw3ICs2ODQsNiBAQAogCWludCBlcnJfcmV0dmFsID0gLUVOT01FTTsKIAogCXN0cnVjdCBtdHNfZGVzYyAqIG5ld19kZXNjOwotCXN0cnVjdCB2ZW5kb3JfcHJvZHVjdCBjb25zdCogcDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CiAKIAkvKiB0aGUgY3VycmVudCBhbHRzZXR0aW5nIG9uIHRoZSBpbnRlcmZhY2Ugd2UncmUgcHJvYmluZyAqLwpAQCAtNzI2LDE1ICs2OTgsNiBAQAogCiAJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CiAKLQlwID0gJm10c19zdXBwb3J0ZWRfcHJvZHVjdHNbaWQgLSBtdHNfdXNiX2lkc107Ci0KLQlNVFNfREVCVUdfR09UX0hFUkUoKTsKLQotCU1UU19ERUJVRyggImZvdW5kIG1vZGVsICVzXG4iLCBwLT5uYW1lICk7Ci0JaWYgKCBwLT5zdXBwb3J0X3N0YXR1cyAhPSBtdHNfc3VwX2Z1bGwgKQotCQlNVFNfTUVTU0FHRSggIm1vZGVsICVzIGlzIG5vdCBrbm93biB0byBiZSBmdWxseSBzdXBwb3J0ZWQsIHJlcG9ydHMgd2VsY29tZSFcbiIsCi0JCQkgICAgIHAtPm5hbWUgKTsKLQogCS8qIHRoZSBjdXJyZW50IGFsdHNldHRpbmcgb24gdGhlIGludGVyZmFjZSB3ZSdyZSBwcm9iaW5nICovCiAJYWx0c2V0dGluZyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCmluZGV4IDZkYTg4ODcuLjEzMzdhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCkBAIC05Niw2ICs5Niw4IEBACiAJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIAogc3RhdGljIHZvaWQgaWRtb3VzZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworc3RhdGljIGludCBpZG1vdXNlX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgaWRtb3VzZV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogCiAvKiBmaWxlIG9wZXJhdGlvbiBwb2ludGVycyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRtb3VzZV9mb3BzID0gewpAQCAtMTE3LDcgKzExOSwxMSBAQAogCS5uYW1lID0gRFJJVkVSX1NIT1JULAogCS5wcm9iZSA9IGlkbW91c2VfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBpZG1vdXNlX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPSBpZG1vdXNlX3N1c3BlbmQsCisJLnJlc3VtZSA9IGlkbW91c2VfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPSBpZG1vdXNlX3Jlc3VtZSwKIAkuaWRfdGFibGUgPSBpZG1vdXNlX3RhYmxlLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCiB9OwogCiBzdGF0aWMgaW50IGlkbW91c2VfY3JlYXRlX2ltYWdlKHN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2KQpAQCAtMTk3LDYgKzIwMywxNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qIFBNIG9wZXJhdGlvbnMgYXJlIG5vcHMgYXMgdGhpcyBkcml2ZXIgZG9lcyBJTyBvbmx5IGR1cmluZyBvcGVuKCkgKi8KK3N0YXRpYyBpbnQgaWRtb3VzZV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZG1vdXNlX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGlkbW91c2VfZGVsZXRlKHN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2KQogewogCWtmcmVlKGRldi0+YnVsa19pbl9idWZmZXIpOwpAQCAtMjM1LDkgKzI1MiwxMyBAQAogCX0gZWxzZSB7CiAKIAkJLyogY3JlYXRlIGEgbmV3IGltYWdlIGFuZCBjaGVjayBmb3Igc3VjY2VzcyAqLworCQlyZXN1bHQgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50ZXJmYWNlKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXJyb3I7CiAJCXJlc3VsdCA9IGlkbW91c2VfY3JlYXRlX2ltYWdlIChkZXYpOwogCQlpZiAocmVzdWx0KQogCQkJZ290byBlcnJvcjsKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGludGVyZmFjZSk7CiAKIAkJLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCBmb3IgdGhlIGRyaXZlciAqLwogCQkrK2Rldi0+b3BlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCmluZGV4IDkwZTFhOGQuLmU3NWJiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYwpAQCAtNzI3LDcgKzcyNyw3IEBACiAJLnBvbGwgPSBpb3dhcnJpb3JfcG9sbCwKIH07CiAKLXN0YXRpYyBjaGFyICppb3dhcnJpb3Jfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKmlvd2Fycmlvcl9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInVzYi8lcyIsIGRldl9uYW1lKGRldikpOwogfQpAQCAtNzM4LDcgKzczOCw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBpb3dhcnJpb3JfY2xhc3MgPSB7CiAJLm5hbWUgPSAiaW93YXJyaW9yJWQiLAotCS5ub2RlbmFtZSA9IGlvd2Fycmlvcl9ub2RlbmFtZSwKKwkuZGV2bm9kZSA9IGlvd2Fycmlvcl9kZXZub2RlLAogCS5mb3BzID0gJmlvd2Fycmlvcl9mb3BzLAogCS5taW5vcl9iYXNlID0gSU9XQVJSSU9SX01JTk9SX0JBU0UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCmluZGV4IGFkNGZiMTUuLjkwZjEzMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKQEAgLTQxMiw2ICs0MTIsOSBAQAogCiAJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJaWYgKCFkZXYtPmludGYpCisJCXJldHVybiBQT0xMRVJSIHwgUE9MTEhVUDsKKwogCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5yZWFkX3dhaXQsIHdhaXQpOwogCXBvbGxfd2FpdChmaWxlLCAmZGV2LT53cml0ZV93YWl0LCB3YWl0KTsKIApAQCAtNzY3LDYgKzc3MCw5IEBACiAJCWxkX3VzYl9kZWxldGUoZGV2KTsKIAl9IGVsc2UgewogCQlkZXYtPmludGYgPSBOVUxMOworCQkvKiB3YWtlIHVwIHBvbGxlcnMgKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmZGV2LT5yZWFkX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZkZXYtPndyaXRlX3dhaXQpOwogCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggYzFlMjQzMy4uZmFhNmQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAkubGxzZWVrID0JdG93ZXJfbGxzZWVrLAogfTsKIAotc3RhdGljIGNoYXIgKmxlZ291c2J0b3dlcl9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqbGVnb3VzYnRvd2VyX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAidXNiLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CkBAIC0yNzcsNyArMjc3LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHRvd2VyX2NsYXNzID0gewogCS5uYW1lID0JCSJsZWdvdXNidG93ZXIlZCIsCi0JLm5vZGVuYW1lID0gCWxlZ291c2J0b3dlcl9ub2RlbmFtZSwKKwkuZGV2bm9kZSA9IAlsZWdvdXNidG93ZXJfZGV2bm9kZSwKIAkuZm9wcyA9CQkmdG93ZXJfZm9wcywKIAkubWlub3JfYmFzZSA9CUxFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UsCiB9OwpAQCAtNTUyLDYgKzU1Miw5IEBACiAKIAlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwlpZiAoIWRldi0+dWRldikKKwkJcmV0dXJuIFBPTExFUlIgfCBQT0xMSFVQOworCiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPnJlYWRfd2FpdCwgd2FpdCk7CiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPndyaXRlX3dhaXQsIHdhaXQpOwogCkBAIC0xMDI1LDYgKzEwMjgsOSBAQAogCQl0b3dlcl9kZWxldGUgKGRldik7CiAJfSBlbHNlIHsKIAkJZGV2LT51ZGV2ID0gTlVMTDsKKwkJLyogd2FrZSB1cCBwb2xsZXJzICovCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJmRldi0+cmVhZF93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmZGV2LT53cml0ZV93YWl0KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwppbmRleCBiNGVjNzE2Li4wMDI1ODQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwpAQCAtNzksMTQgKzc5LDEyIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNT0JVRlM7IGkrKykgewogCQlpZiAoc2lzdXNiLT5vYnVmW2ldKSB7Ci0JCQl1c2JfYnVmZmVyX2ZyZWUoc2lzdXNiLT5zaXN1c2JfZGV2LCBzaXN1c2ItPm9idWZzaXplLAotCQkJCXNpc3VzYi0+b2J1ZltpXSwgc2lzdXNiLT50cmFuc2Zlcl9kbWFfb3V0W2ldKTsKKwkJCWtmcmVlKHNpc3VzYi0+b2J1ZltpXSk7CiAJCQlzaXN1c2ItPm9idWZbaV0gPSBOVUxMOwogCQl9CiAJfQogCWlmIChzaXN1c2ItPmlidWYpIHsKLQkJdXNiX2J1ZmZlcl9mcmVlKHNpc3VzYi0+c2lzdXNiX2Rldiwgc2lzdXNiLT5pYnVmc2l6ZSwKLQkJCXNpc3VzYi0+aWJ1Ziwgc2lzdXNiLT50cmFuc2Zlcl9kbWFfaW4pOworCQlrZnJlZShzaXN1c2ItPmlidWYpOwogCQlzaXN1c2ItPmlidWYgPSBOVUxMOwogCX0KIH0KQEAgLTIzMCw4ICsyMjgsNyBAQAogCiBzdGF0aWMgaW50CiBzaXN1c2JfYnVsa291dF9tc2coc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgaW5kZXgsIHVuc2lnbmVkIGludCBwaXBlLCB2b2lkICpkYXRhLAotCQlpbnQgbGVuLCBpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgdGZsYWdzLAotCQlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYSkKKwkJaW50IGxlbiwgaW50ICphY3R1YWxfbGVuZ3RoLCBpbnQgdGltZW91dCwgdW5zaWduZWQgaW50IHRmbGFncykKIHsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBzaXN1c2ItPnNpc3VyYm91dFtpbmRleF07CiAJaW50IHJldHZhbCwgYnl0ZXN3cml0dGVuID0gMDsKQEAgLTI0NSw5ICsyNDIsNiBAQAogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gdGZsYWdzOwogCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAKLQlpZiAoKHVyYi0+dHJhbnNmZXJfZG1hID0gdHJhbnNmZXJfZG1hKSkKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQogCS8qIFNldCB1cCBjb250ZXh0ICovCiAJc2lzdXNiLT51cmJvdXRfY29udGV4dFtpbmRleF0uYWN0dWFsX2xlbmd0aCA9ICh0aW1lb3V0KSA/CiAJCQkJCQlOVUxMIDogYWN0dWFsX2xlbmd0aDsKQEAgLTI5Nyw4ICsyOTEsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1zaXN1c2JfYnVsa2luX21zZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIHVuc2lnbmVkIGludCBwaXBlLCB2b2lkICpkYXRhLCBpbnQgbGVuLAotCQlpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgdGZsYWdzLCBkbWFfYWRkcl90IHRyYW5zZmVyX2RtYSkKK3Npc3VzYl9idWxraW5fbXNnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsCisJaW50IGxlbiwgaW50ICphY3R1YWxfbGVuZ3RoLCBpbnQgdGltZW91dCwgdW5zaWduZWQgaW50IHRmbGFncykKIHsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBzaXN1c2ItPnNpc3VyYmluOwogCWludCByZXR2YWwsIHJlYWRieXRlcyA9IDA7CkBAIC0zMTEsOSArMzA1LDYgQEAKIAl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IHRmbGFnczsKIAl1cmItPmFjdHVhbF9sZW5ndGggPSAwOwogCi0JaWYgKCh1cmItPnRyYW5zZmVyX2RtYSA9IHRyYW5zZmVyX2RtYSkpCi0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KIAlzaXN1c2ItPmNvbXBsZXRlaW4gPSAwOwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCA9PSAwKSB7CkBAIC00MjIsOCArNDEzLDcgQEAKIAkJCQkJCXRoaXNwYXNzLAogCQkJCQkJJnRyYW5zZmVycmVkX2xlbiwKIAkJCQkJCWFzeW5jID8gMCA6IDUgKiBIWiwKLQkJCQkJCXRmbGFncywKLQkJCQkJCXNpc3VzYi0+dHJhbnNmZXJfZG1hX291dFtpbmRleF0pOworCQkJCQkJdGZsYWdzKTsKIAogCQkJaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKSB7CiAKQEAgLTQzMiwyOSArNDIyLDE2IEBACiAJCQkJCXJldHVybiAtRVRJTUU7CiAKIAkJCQljb250aW51ZTsKKwkJCX0KIAotCQkJfSBlbHNlIGlmICgocmVzdWx0ID09IDApICYmICFhc3luYyAmJiB0cmFuc2ZlcnJlZF9sZW4pIHsKKwkJCWlmICgocmVzdWx0ID09IDApICYmICFhc3luYyAmJiB0cmFuc2ZlcnJlZF9sZW4pIHsKIAogCQkJCXRoaXNwYXNzIC09IHRyYW5zZmVycmVkX2xlbjsKLQkJCQlpZiAodGhpc3Bhc3MpIHsKLQkJCQkJaWYgKHNpc3VzYi0+dHJhbnNmZXJfZG1hX291dCkgewotCQkJCQkJLyogSWYgRE1BLCBjb3B5IHJlbWFpbmluZwotCQkJCQkJICogdG8gYmVnaW5uaW5nIG9mIGJ1ZmZlcgotCQkJCQkJICovCi0JCQkJCQltZW1jcHkoYnVmZmVyLAotCQkJCQkJICAgICAgIGJ1ZmZlciArIHRyYW5zZmVycmVkX2xlbiwKLQkJCQkJCSAgICAgICB0aGlzcGFzcyk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBJZiBub3QgRE1BLCBzaW1wbHkgaW5jcmVhc2UKLQkJCQkJCSAqIHRoZSBwb2ludGVyCi0JCQkJCQkgKi8KLQkJCQkJCWJ1ZmZlciArPSB0cmFuc2ZlcnJlZF9sZW47Ci0JCQkJCX0KLQkJCQl9CisJCQkJYnVmZmVyICs9IHRyYW5zZmVycmVkX2xlbjsKIAogCQkJfSBlbHNlCiAJCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKQEAgLTUzMCw4ICs1MDcsNyBAQAogCQkJCQkgICB0aGlzcGFzcywKIAkJCQkJICAgJnRyYW5zZmVycmVkX2xlbiwKIAkJCQkJICAgNSAqIEhaLAotCQkJCQkgICB0ZmxhZ3MsCi0JCQkJCSAgIHNpc3VzYi0+dHJhbnNmZXJfZG1hX2luKTsKKwkJCQkJICAgdGZsYWdzKTsKIAogCQlpZiAodHJhbnNmZXJyZWRfbGVuKQogCQkJdGhpc3Bhc3MgPSB0cmFuc2ZlcnJlZF9sZW47CkBAIC0zMTMyLDggKzMxMDgsNyBAQAogCiAJLyogQWxsb2NhdGUgYnVmZmVycyAqLwogCXNpc3VzYi0+aWJ1ZnNpemUgPSBTSVNVU0JfSUJVRl9TSVpFOwotCWlmICghKHNpc3VzYi0+aWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBTSVNVU0JfSUJVRl9TSVpFLAotCQkJCQlHRlBfS0VSTkVMLCAmc2lzdXNiLT50cmFuc2Zlcl9kbWFfaW4pKSkgeworCWlmICghKHNpc3VzYi0+aWJ1ZiA9IGttYWxsb2MoU0lTVVNCX0lCVUZfU0laRSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWRldl9lcnIoJnNpc3VzYi0+c2lzdXNiX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW5wdXQgYnVmZmVyIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfMjsKQEAgLTMxNDIsOSArMzExNyw3IEBACiAJc2lzdXNiLT5udW1vYnVmcyA9IDA7CiAJc2lzdXNiLT5vYnVmc2l6ZSA9IFNJU1VTQl9PQlVGX1NJWkU7CiAJZm9yIChpID0gMDsgaSA8IE5VTU9CVUZTOyBpKyspIHsKLQkJaWYgKCEoc2lzdXNiLT5vYnVmW2ldID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFNJU1VTQl9PQlVGX1NJWkUsCi0JCQkJCUdGUF9LRVJORUwsCi0JCQkJCSZzaXN1c2ItPnRyYW5zZmVyX2RtYV9vdXRbaV0pKSkgeworCQlpZiAoIShzaXN1c2ItPm9idWZbaV0gPSBrbWFsbG9jKFNJU1VTQl9PQlVGX1NJWkUsIEdGUF9LRVJORUwpKSkgewogCQkJaWYgKGkgPT0gMCkgewogCQkJCWRldl9lcnIoJnNpc3VzYi0+c2lzdXNiX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlclxuIik7CiAJCQkJcmV0dmFsID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5oIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKaW5kZXggY2YwYjRhNS4uNTU0OTJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKQEAgLTEyMyw4ICsxMjMsNiBAQAogCWludCBudW1vYnVmczsJCS8qIG51bWJlciBvZiBvYnVmcyA9IG51bWJlciBvZiBvdXQgdXJicyAqLwogCWNoYXIgKm9idWZbTlVNT0JVRlNdLCAqaWJ1ZjsJLyogdHJhbnNmZXIgYnVmZmVycyAqLwogCWludCBvYnVmc2l6ZSwgaWJ1ZnNpemU7Ci0JZG1hX2FkZHJfdCB0cmFuc2Zlcl9kbWFfb3V0W05VTU9CVUZTXTsKLQlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYV9pbjsKIAlzdHJ1Y3QgdXJiICpzaXN1cmJvdXRbTlVNT0JVRlNdOwogCXN0cnVjdCB1cmIgKnNpc3VyYmluOwogCXVuc2lnbmVkIGNoYXIgdXJic3RhdHVzW05VTU9CVUZTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jCmluZGV4IDI4YTZhM2EuLjNkYjI1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYwpAQCAtMzgsNiArMzgsNyBAQAogCiBzdHJ1Y3QgdXNiX3NldnNlZ2RldiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiAKIAl1OCBwb3dlcmVkOwogCXU4IG1vZGVfbXNiOwpAQCAtNDYsNiArNDcsOCBAQAogCXU4IHRleHRtb2RlOwogCXU4IHRleHRbTUFYTEVOXTsKIAl1MTYgdGV4dGxlbmd0aDsKKworCXU4IHNoYWRvd19wb3dlcjsgLyogZm9yIFBNICovCiB9OwogCiAvKiBzeXNmc19zdHJlcSBjYW4ndCByZXBsYWNlIHRoaXMgY29tcGxldGVseQpAQCAtNjUsNiArNjgsMTIgQEAKIHsKIAlpbnQgcmM7CiAKKwlpZiAoIW15ZGV2LT5zaGFkb3dfcG93ZXIgJiYgbXlkZXYtPnBvd2VyZWQpIHsKKwkJcmMgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UobXlkZXYtPmludGYpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuOworCX0KKwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKIAkJCTB4MTIsCkBAIC03NiwxMiArODUsMTggQEAKIAkJCTIwMDApOwogCWlmIChyYyA8IDApCiAJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJwb3dlciByZXR2YWwgPSAlZFxuIiwgcmMpOworCisJaWYgKG15ZGV2LT5zaGFkb3dfcG93ZXIgJiYgIW15ZGV2LT5wb3dlcmVkKQorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UobXlkZXYtPmludGYpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfZGlzcGxheV9tb2RlKHN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldikKIHsKIAlpbnQgcmM7CiAKKwlpZihteWRldi0+c2hhZG93X3Bvd2VyICE9IDEpCisJCXJldHVybjsKKwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKIAkJCTB4MTIsCkBAIC05NiwxNCArMTExLDE3IEBACiAJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJtb2RlIHJldHZhbCA9ICVkXG4iLCByYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYpCitzdGF0aWMgdm9pZCB1cGRhdGVfZGlzcGxheV92aXN1YWwoc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2LCBnZnBfdCBtZikKIHsKIAlpbnQgcmM7CiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXU4IGRlY2ltYWxzID0gMDsKIAotCWJ1ZmZlciA9IGt6YWxsb2MoTUFYTEVOLCBHRlBfS0VSTkVMKTsKKwlpZihteWRldi0+c2hhZG93X3Bvd2VyICE9IDEpCisJCXJldHVybjsKKworCWJ1ZmZlciA9IGt6YWxsb2MoTUFYTEVOLCBtZik7CiAJaWYgKCFidWZmZXIpIHsKIAkJZGV2X2VycigmbXlkZXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm47CkBAIC0xNjMsNyArMTgxLDcgQEAKIAlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCiAJCQkJCQkJCVwKIAlteWRldi0+bmFtZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJXAotCXVwZGF0ZV9mY24obXlkZXYpOyBcCisJdXBkYXRlX2ZjbihteWRldik7IAkJCQkJXAogCQkJCQkJCQlcCiAJcmV0dXJuIGNvdW50OwkJCQkJCVwKIH0JCQkJCQkJCVwKQEAgLTE5NCw3ICsyMTIsNyBAQAogCWlmIChlbmQgPiAwKQogCQltZW1jcHkobXlkZXYtPnRleHQsIGJ1ZiwgZW5kKTsKIAotCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2LCBHRlBfS0VSTkVMKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTI0Miw3ICsyNjAsNyBAQAogCQlpZiAoYnVmW2ldID09ICcxJykKIAkJCW15ZGV2LT5kZWNpbWFsc1tlbmQtMS1pXSA9IDE7CiAKLQl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYpOworCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldiwgR0ZQX0tFUk5FTCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yODYsNyArMzA0LDcgQEAKIAlmb3IgKGkgPSAwOyBkaXNwbGF5X3RleHRtb2Rlc1tpXTsgaSsrKSB7CiAJCWlmIChzeXNmc19zdHJlcShkaXNwbGF5X3RleHRtb2Rlc1tpXSwgYnVmKSkgewogCQkJbXlkZXYtPnRleHRtb2RlID0gaTsKLQkJCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisJCQl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYsIEdGUF9LRVJORUwpOwogCQkJcmV0dXJuIGNvdW50OwogCQl9CiAJfQpAQCAtMzMwLDYgKzM0OCw3IEBACiAJfQogCiAJbXlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKwlteWRldi0+aW50ZiA9IGludGVyZmFjZTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgbXlkZXYpOwogCiAJLypzZXQgZGVmYXVsdHMgKi8KQEAgLTM2NCwxMSArMzgzLDQ5IEBACiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIDcgU2VnbWVudCBub3cgZGlzY29ubmVjdGVkXG4iKTsKIH0KIAorc3RhdGljIGludCBzZXZzZWdfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2OworCisJbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCW15ZGV2LT5zaGFkb3dfcG93ZXIgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V2c2VnX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXY7CisKKwlteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJbXlkZXYtPnNoYWRvd19wb3dlciA9IDE7CisJdXBkYXRlX2Rpc3BsYXlfbW9kZShteWRldik7CisJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2LCBHRlBfTk9JTyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXZzZWdfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldjsKKworCW15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlteWRldi0+c2hhZG93X3Bvd2VyID0gMTsKKwl1cGRhdGVfZGlzcGxheV9tb2RlKG15ZGV2KTsKKwl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYsIEdGUF9OT0lPKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2V2c2VnX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNic2V2c2VnIiwKIAkucHJvYmUgPQlzZXZzZWdfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlzZXZzZWdfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXNldnNlZ19zdXNwZW5kLAorCS5yZXN1bWUgPQlzZXZzZWdfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQlzZXZzZWdfcmVzZXRfcmVzdW1lLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2V2c2VnX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9LY29uZmlnIGIvZHJpdmVycy91c2IvbW9uL0tjb25maWcKaW5kZXggZjI4ZjM1MC4uNjM1NzQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbW9uL0tjb25maWcKQEAgLTUsMTEgKzUsOSBAQAogY29uZmlnIFVTQl9NT04KIAl0cmlzdGF0ZSAiVVNCIE1vbml0b3IiCiAJZGVwZW5kcyBvbiBVU0IKLQlkZWZhdWx0IHkgaWYgVVNCPXkKLQlkZWZhdWx0IG0gaWYgVVNCPW0KIAloZWxwCiAJICBJZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uLCBhIGNvbXBvbmVudCB3aGljaCBjYXB0dXJlcyB0aGUgVVNCIHRyYWZmaWMKIAkgIGJldHdlZW4gcGVyaXBoZXJhbC1zcGVjaWZpYyBkcml2ZXJzIGFuZCBIQyBkcml2ZXJzIHdpbGwgYmUgYnVpbHQuCiAJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQ+LgogCi0JICBJZiB1bnN1cmUsIHNheSBZIChpZiBhbGxvd2VkKSwgb3RoZXJ3aXNlIE0uCisJICBJZiB1bnN1cmUsIHNheSBZLCBpZiBhbGxvd2VkLCBvdGhlcndpc2UgTS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21vbi9NYWtlZmlsZQppbmRleCBjNjUxNmI1Li4zODRiMTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvbW9uL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgVVNCIG1vbml0b3IKICMKIAotdXNibW9uLW9ianMJOj0gbW9uX21haW4ubyBtb25fc3RhdC5vIG1vbl90ZXh0Lm8gbW9uX2Jpbi5vIG1vbl9kbWEubwordXNibW9uLW9ianMJOj0gbW9uX21haW4ubyBtb25fc3RhdC5vIG1vbl90ZXh0Lm8gbW9uX2Jpbi5vCiAKIG9iai0kKENPTkZJR19VU0JfTU9OKQkrPSB1c2Jtb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggMGY3YTMwYi4uZGZkYzQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0yMjAsOSArMjIwLDggQEAKIAogLyoKICAqIFRoaXMgaXMgYSAiY2h1bmtlZCBtZW1jcHkiLiBJdCBkb2VzIG5vdCBtYW5pcHVsYXRlIGFueSBjb3VudGVycy4KLSAqIEJ1dCBpdCByZXR1cm5zIHRoZSBuZXcgb2Zmc2V0IGZvciByZXBlYXRlZCBhcHBsaWNhdGlvbi4KICAqLwotdW5zaWduZWQgaW50IG1vbl9jb3B5X3RvX2J1ZmYoY29uc3Qgc3RydWN0IG1vbl9yZWFkZXJfYmluICp0aGlzLAorc3RhdGljIHZvaWQgbW9uX2NvcHlfdG9fYnVmZihjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnRoaXMsCiAgICAgdW5zaWduZWQgaW50IG9mZiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAl1bnNpZ25lZCBpbnQgc3RlcF9sZW47CkBAIC0yNDcsNyArMjQ2LDYgQEAKIAkJZnJvbSArPSBzdGVwX2xlbjsKIAkJbGVuZ3RoIC09IHN0ZXBfbGVuOwogCX0KLQlyZXR1cm4gb2ZmOwogfQogCiAvKgpAQCAtNDAwLDE1ICszOTgsOCBAQAogICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCB1cmIgKnVyYiwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAotCWlmICh1cmItPmRldi0+YnVzLT51c2VzX2RtYSAmJgotCSAgICAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKSkgewotCQltb25fZG1hcGVla192ZWMocnAsIG9mZnNldCwgdXJiLT50cmFuc2Zlcl9kbWEsIGxlbmd0aCk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKQogCQlyZXR1cm4gJ1onOwotCiAJbW9uX2NvcHlfdG9fYnVmZihycCwgb2Zmc2V0LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYzNSw3ICs2MjYsNiBAQAogCXNwaW5fbG9ja19pbml0KCZycC0+Yl9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZycC0+Yl93YWl0KTsKIAltdXRleF9pbml0KCZycC0+ZmV0Y2hfbG9jayk7Ci0KIAlycC0+Yl9zaXplID0gQlVGRl9ERkw7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBtb25fcGdtYXApICogKHJwLT5iX3NpemUvQ0hVTktfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2RtYS5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9kbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQwY2M4MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2RtYS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIFRoZSBVU0IgTW9uaXRvciwgaW5zcGlyZWQgYnkgRGF2ZSBIYXJkaW5nJ3MgVVNCTW9uLgotICoKLSAqIG1vbl9kbWEuYzogTGlicmFyeSB3aGljaCBzbm9vcHMgb24gRE1BIGFyZWFzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBQZXRlIFphaXRjZXYgKHphaXRjZXZAcmVkaGF0LmNvbSkKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgkvKiBPbmx5IG5lZWRlZCBmb3IgZGVjbGFyYXRpb25zIGluIHVzYl9tb24uaCAqLwotI2luY2x1ZGUgInVzYl9tb24uaCIKLQotLyoKLSAqIFBDLWNvbXBhdGlibGVzLCBhcmUsIGZvcnR1bmF0ZWx5LCBzdWZmaWNpZW50bHkgY2FjaGUtY29oZXJlbnQgZm9yIHRoaXMuCi0gKi8KLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIC8qIENPTkZJR19BUkNIX0kzODYgZG9lc24ndCBleGl0ICovCi0jZGVmaW5lIE1PTl9IQVNfVU5NQVAgMQotCi0jZGVmaW5lIHBoeXNfdG9fcGFnZShwaHlzKQlwZm5fdG9fcGFnZSgocGh5cykgPj4gUEFHRV9TSElGVCkKLQotY2hhciBtb25fZG1hcGVlayh1bnNpZ25lZCBjaGFyICpkc3QsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIGludCBsZW4pCi17Ci0Jc3RydWN0IHBhZ2UgKnBnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciAqbWFwOwotCXVuc2lnbmVkIGNoYXIgKnB0cjsKLQotCS8qCi0JICogT24gaTM4NiwgYSBETUEgaGFuZGxlIGlzIHRoZSAicGh5c2ljYWwiIGFkZHJlc3Mgb2YgYSBwYWdlLgotCSAqIEluIG90aGVyIHdvcmRzLCB0aGUgYnVzIGFkZHJlc3MgaXMgZXF1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcy4KLQkgKiBUaGVyZSBpcyBubyBJT01NVS4KLQkgKi8KLQlwZyA9IHBoeXNfdG9fcGFnZShkbWFfYWRkcik7Ci0KLQkvKgotCSAqIFdlIGFyZSBjYWxsZWQgZnJvbSBoYXJkd2FyZSBJUlFzIGluIGNhc2Ugb2YgY2FsbGJhY2tzLgotCSAqIEJ1dCB3ZSBjYW4gYmUgY2FsbGVkIGZyb20gc29mdGlycSBvciBwcm9jZXNzIGNvbnRleHQgaW4gY2FzZQotCSAqIG9mIHN1Ym1pc3Npb25zLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gcHJvdGVjdCBLTV9JUlEwLgotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQltYXAgPSBrbWFwX2F0b21pYyhwZywgS01fSVJRMCk7Ci0JcHRyID0gbWFwICsgKGRtYV9hZGRyICYgKFBBR0VfU0laRS0xKSk7Ci0JbWVtY3B5KGRzdCwgcHRyLCBsZW4pOwotCWt1bm1hcF9hdG9taWMobWFwLCBLTV9JUlEwKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgbW9uX2RtYXBlZWtfdmVjKGNvbnN0IHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCi0gICAgdW5zaWduZWQgaW50IG9mZnNldCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBzdGVwX2xlbjsKLQlzdHJ1Y3QgcGFnZSAqcGc7Ci0JdW5zaWduZWQgY2hhciAqbWFwOwotCXVuc2lnbmVkIGxvbmcgcGFnZV9vZmYsIHBhZ2VfbGVuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXdoaWxlIChsZW5ndGgpIHsKLQkJLyogY29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgd2UgYXJlIGdvaW5nIHRvIGNvcHkgaW4gdGhpcyBwYWdlICovCi0JCXN0ZXBfbGVuID0gbGVuZ3RoOwotCQlwYWdlX29mZiA9IGRtYV9hZGRyICYgKFBBR0VfU0laRS0xKTsKLQkJcGFnZV9sZW4gPSBQQUdFX1NJWkUgLSBwYWdlX29mZjsKLQkJaWYgKHBhZ2VfbGVuIDwgc3RlcF9sZW4pCi0JCQlzdGVwX2xlbiA9IHBhZ2VfbGVuOwotCi0JCS8qIGNvcHkgZGF0YSBhbmQgYWR2YW5jZSBwb2ludGVycyAqLwotCQlwZyA9IHBoeXNfdG9fcGFnZShkbWFfYWRkcik7Ci0JCW1hcCA9IGttYXBfYXRvbWljKHBnLCBLTV9JUlEwKTsKLQkJb2Zmc2V0ID0gbW9uX2NvcHlfdG9fYnVmZihycCwgb2Zmc2V0LCBtYXAgKyBwYWdlX29mZiwgc3RlcF9sZW4pOwotCQlrdW5tYXBfYXRvbWljKG1hcCwgS01fSVJRMCk7Ci0JCWRtYV9hZGRyICs9IHN0ZXBfbGVuOwotCQlsZW5ndGggLT0gc3RlcF9sZW47Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotI2VuZGlmIC8qIF9faTM4Nl9fICovCi0KLSNpZm5kZWYgTU9OX0hBU19VTk1BUAotY2hhciBtb25fZG1hcGVlayh1bnNpZ25lZCBjaGFyICpkc3QsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIGludCBsZW4pCi17Ci0JcmV0dXJuICdEJzsKLX0KLQotdm9pZCBtb25fZG1hcGVla192ZWMoY29uc3Qgc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwKLSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotCTsKLX0KLQotI2VuZGlmIC8qIE1PTl9IQVNfVU5NQVAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKaW5kZXggNWUwYWI0Mi4uZTBjMmRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKQEAgLTM2MSw3ICszNjEsNiBAQAogCX0KIAkvLyBNT0RfSU5DX1VTRV9DT1VOVCh3aGljaF9tb2R1bGU/KTsKIAotCiAJbXV0ZXhfbG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkgKHVidXMsICZ1c2JfYnVzX2xpc3QsIGJ1c19saXN0KSB7CiAJCW1vbl9idXNfaW5pdCh1YnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKaW5kZXggYTdlYjRjOS4uOWYxYTkyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKQEAgLTE1MCwyMCArMTUwLDYgQEAKIAkJCXJldHVybiAnPic7CiAJfQogCi0JLyoKLQkgKiBUaGUgY2hlY2sgdG8gc2VlIGlmIGl0J3Mgc2FmZSB0byBwb2tlIGF0IGRhdGEgaGFzIGFuIGVub3Jtb3VzCi0JICogbnVtYmVyIG9mIGNvcm5lciBjYXNlcywgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIGZvbGxvd2luZyBpcwotCSAqIG1vcmUgb3IgbGVzcyBzYWZlLgotCSAqCi0JICogV2UgZG8gbm90IGV2ZW4gdHJ5IHRvIGxvb2sgYXQgdHJhbnNmZXJfYnVmZmVyLCBiZWNhdXNlIGl0IGNhbgotCSAqIGNvbnRhaW4gbm9uLU5VTEwgZ2FyYmFnZSBpbiBjYXNlIHRoZSB1cHBlciBsZXZlbCBwcm9taXNlZCB0bwotCSAqIHNldCBETUEgZm9yIHRoZSBIQ0QuCi0JICovCi0JaWYgKHVyYi0+ZGV2LT5idXMtPnVzZXNfZG1hICYmCi0JICAgICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApKSB7Ci0JCXJldHVybiBtb25fZG1hcGVlayhlcC0+ZGF0YSwgdXJiLT50cmFuc2Zlcl9kbWEsIGxlbik7Ci0JfQotCiAJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpCiAJCXJldHVybiAnWic7CS8qICcwJyB3b3VsZCBiZSBub3QgYXMgcHJldHR5LiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oIGIvZHJpdmVycy91c2IvbW9uL3VzYl9tb24uaAppbmRleCBmNWQ4NGZmLi5kZjlhNGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oCisrKyBiL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmgKQEAgLTY1LDIwICs2NSw2IEBACiB2b2lkIG1vbl9iaW5fZXhpdCh2b2lkKTsKIAogLyoKLSAqIERNQSBpbnRlcmZhY2UuCi0gKgotICogWFhYIFRoZSB2ZWN0b3JlZCBzaWRlIG5lZWRzIGEgc2VyaW91cyByZS10aGlua2luZy4gQWJzdHJhY3RpbmcgdmVjdG9ycywKLSAqIGxpa2UgaW4gUGFvbG8ncyBvcmlnaW5hbCBwYXRjaCwgcHJvZHVjZXMgYSBkb3VibGUgcGttYXAuIFdlIG5lZWQgYW4gaWRlYS4KLSovCi1leHRlcm4gY2hhciBtb25fZG1hcGVlayh1bnNpZ25lZCBjaGFyICpkc3QsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIGludCBsZW4pOwotCi1zdHJ1Y3QgbW9uX3JlYWRlcl9iaW47Ci1leHRlcm4gdm9pZCBtb25fZG1hcGVla192ZWMoY29uc3Qgc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwKLSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBpbnQgbGVuKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbW9uX2NvcHlfdG9fYnVmZihjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLAotICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGludCBsZW4pOwotCi0vKgogICovCiBleHRlcm4gc3RydWN0IG11dGV4IG1vbl9sb2NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCAxZDI2YmVkLi4zYTYxZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTE4NTAsNiArMTg1MCwxMCBAQAogCQlkbWFfY29udHJvbGxlcl9kZXN0cm95KGMpOwogCX0KIAorI2lmZGVmIENPTkZJR19VU0JfTVVTQl9PVEcKKwlwdXRfZGV2aWNlKG11c2ItPnhjZWl2LT5kZXYpOworI2VuZGlmCisKIAltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwsIDApOwogCW11c2JfcGxhdGZvcm1fZXhpdChtdXNiKTsKIAltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwsIDApOwpAQCAtMTg1OSwxMCArMTg2Myw2IEBACiAJCWNsa19wdXQobXVzYi0+Y2xvY2spOwogCX0KIAotI2lmZGVmIENPTkZJR19VU0JfTVVTQl9PVEcKLQlwdXRfZGV2aWNlKG11c2ItPnhjZWl2LT5kZXYpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QKIAl1c2JfcHV0X2hjZChtdXNiX3RvX2hjZChtdXNiKSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCmluZGV4IGUwZDU2ZWYuLjc3YTVmNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKQEAgLTExNywyNCArMTE3LDcgQEAKIAkJcHJfZGVidWcoIiAgVkJVUyAlZCBtQSBlcnJvciAlZFxuIiwgbUEsIHN0YXR1cyk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV92YnVzX3NvdXJjZShzdHJ1Y3QgaXNwMTMwMSAqaXNwKQotewotCS8qIHRoaXMgYm9hcmQgd29uJ3Qgc3VwcGx5IG1vcmUgdGhhbiA4bUEgdmJ1cyBwb3dlci4KLQkgKiBzb21lIGJvYXJkcyBjYW4gc3dpdGNoIGEgMTAwbWEgInVuaXQgbG9hZCIgKG9yIG1vcmUpLgotCSAqLwotfQotCi0KLS8qIHByb2R1Y3RzIHdpbGwgZGVsaXZlciBPVEcgbWVzc2FnZXMgd2l0aCBMRURzLCBHVUksIGV0YyAqLwotc3RhdGljIGlubGluZSB2b2lkIG5vdHJlc3BvbmRpbmcoc3RydWN0IGlzcDEzMDEgKmlzcCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIk9URyBkZXZpY2Ugbm90IHJlc3BvbmRpbmcuXG4iKTsKLX0KLQotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9INCkKKyNlbHNlCiAKIHN0YXRpYyB2b2lkIGVuYWJsZV92YnVzX2RyYXcoc3RydWN0IGlzcDEzMDEgKmlzcCwgdW5zaWduZWQgbUEpCiB7CkBAIC0xNDQsNiArMTI3LDggQEAKIAkgKi8KIH0KIAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGVuYWJsZV92YnVzX3NvdXJjZShzdHJ1Y3QgaXNwMTMwMSAqaXNwKQogewogCS8qIHRoaXMgYm9hcmQgd29uJ3Qgc3VwcGx5IG1vcmUgdGhhbiA4bUEgdmJ1cyBwb3dlci4KQEAgLTE1OSw4ICsxNDQsNiBAQAogfQogCiAKLSNlbmRpZgotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXNwMTMwMV9kcml2ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYwppbmRleCBhZWM2MTg4Li4xMzFlNjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKQEAgLTMxLDE0ICszMSwxOSBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4NjU0NywgMHgwMjMyKSB9LAorCXsgVVNCX0RFVklDRSgweDE4ZWMsIDB4MzExOCkgfSwJCS8qIFVTQiB0byBJckRBIGFkYXB0ZXIgKi8KIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAotc3RydWN0IGFyazMxMTZfcHJpdmF0ZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXU4IHRlcm1pb3NfaW5pdGlhbGl6ZWQ7Ci19Oworc3RhdGljIGludCBpc19pcmRhKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHNlcmlhbC0+ZGV2OworCWlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MThlYyAmJgorCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHgzMTE4KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIEFSSzMxMTZfU05EKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBzZXEsCiAJCQkgICAgICAgX191OCByZXF1ZXN0LCBfX3U4IHJlcXVlc3R0eXBlLApAQCAtODIsMjkgKzg3LDI4IEBACiBzdGF0aWMgaW50IGFyazMxMTZfYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJY2hhciAqYnVmOwotCXN0cnVjdCBhcmszMTE2X3ByaXZhdGUgKnByaXY7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewotCQlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFyazMxMTZfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIXByaXYpCi0JCQlnb3RvIGNsZWFudXA7Ci0JCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQotCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBwcml2KTsKLQl9CiAKIAlidWYgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCWRiZygiZXJyb3Iga21hbGxvYyAtPiBvdXQgb2YgbWVtPyIpOwotCQlnb3RvIGNsZWFudXA7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWlmIChpc19pcmRhKHNlcmlhbCkpCisJCWRiZygiSXJEQSBtb2RlIik7CisKIAkvKiAzICovCiAJQVJLMzExNl9TTkQoc2VyaWFsLCAzLCAweEZFLCAweDQwLCAweDAwMDgsIDB4MDAwMik7CiAJQVJLMzExNl9TTkQoc2VyaWFsLCA0LCAweEZFLCAweDQwLCAweDAwMDgsIDB4MDAwMSk7CiAJQVJLMzExNl9TTkQoc2VyaWFsLCA1LCAweEZFLCAweDQwLCAweDAwMDAsIDB4MDAwOCk7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLCA2LCAweEZFLCAweDQwLCAweDAwMDAsIDB4MDAwQik7CisJQVJLMzExNl9TTkQoc2VyaWFsLCA2LCAweEZFLCAweDQwLCBpc19pcmRhKHNlcmlhbCkgPyAweDAwMDEgOiAweDAwMDAsCisJCSAgICAweDAwMEIpOworCisJaWYgKGlzX2lyZGEoc2VyaWFsKSkgeworCQlBUkszMTE2X1NORChzZXJpYWwsIDEwMDEsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDBDKTsKKwkJQVJLMzExNl9TTkQoc2VyaWFsLCAxMDAyLCAweEZFLCAweDQwLCAweDAwNDEsIDB4MDAwRCk7CisJCUFSSzMxMTZfU05EKHNlcmlhbCwgMTAwMywgMHhGRSwgMHg0MCwgMHgwMDAxLCAweDAwMEEpOworCX0KIAogCS8qIDwtLSBzZXE3ICovCiAJQVJLMzExNl9SQ1Yoc2VyaWFsLCAgNywgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDMsIDB4MDAsIGJ1Zik7CkBAIC0xNDEsNiArMTQ1LDggQEAKIAlBUkszMTE2X1NORChzZXJpYWwsIDE0NywgMHhGRSwgMHg0MCwgMHgwMDgzLCAweDAwMDMpOwogCUFSSzMxMTZfU05EKHNlcmlhbCwgMTQ4LCAweEZFLCAweDQwLCAweDAwMzgsIDB4MDAwMCk7CiAJQVJLMzExNl9TTkQoc2VyaWFsLCAxNDksIDB4RkUsIDB4NDAsIDB4MDAwMSwgMHgwMDAxKTsKKwlpZiAoaXNfaXJkYShzZXJpYWwpKQorCQlBUkszMTE2X1NORChzZXJpYWwsIDEwMDQsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDA5KTsKIAlBUkszMTE2X1NORChzZXJpYWwsIDE1MCwgMHhGRSwgMHg0MCwgMHgwMDAzLCAweDAwMDMpOwogCUFSSzMxMTZfUkNWKHNlcmlhbCwgMTUxLCAweEZFLCAweEMwLCAweDAwMDAsIDB4MDAwNCwgMHgwMywgYnVmKTsKIAlBUkszMTE2X1NORChzZXJpYWwsIDE1MiwgMHhGRSwgMHg0MCwgMHgwMDAwLCAweDAwMDMpOwpAQCAtMTQ5LDEzICsxNTUsMTYgQEAKIAogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIDA7Cit9CiAKLWNsZWFudXA6Ci0JZm9yICgtLWk7IGkgPj0gMDsgLS1pKSB7Ci0JCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKLQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7Ci0JfQotCXJldHVybiAtRU5PTUVNOworc3RhdGljIHZvaWQgYXJrMzExNl9pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSB0dHktPnRlcm1pb3M7CisJKnRlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisJdGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4CisJCQkJICAgICAgfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCXRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKKwl0ZXJtaW9zLT5jX29zcGVlZCA9IDk2MDA7CiB9CiAKIHN0YXRpYyB2b2lkIGFyazMxMTZfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTE2MywxMCArMTcyLDggQEAKIAkJCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Ci0Jc3RydWN0IGFyazMxMTZfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSB0dHktPnRlcm1pb3M7CiAJdW5zaWduZWQgaW50IGNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiYXVkOwogCWludCBhcmszMTE2X2JhdWQ7CiAJY2hhciAqYnVmOwpAQCAtMTc2LDE2ICsxODMsNiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7Ci0JCSp0ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotCQl0ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzgKLQkJCQkJICAgICAgfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCQl0ZXJtaW9zLT5jX2lzcGVlZCA9IDk2MDA7Ci0JCXRlcm1pb3MtPmNfb3NwZWVkID0gOTYwMDsKLQkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKIAl0ZXJtaW9zLT5jX2NmbGFnICY9IH4oQ01TUEFSfENSVFNDVFMpOwpAQCAtMzE4LDggKzMxNSw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGFyazMxMTZfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgYXJrMzExNl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGt0ZXJtaW9zIHRtcF90ZXJtaW9zOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CkBAIC0zMzQsNyArMzMwLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmVzdWx0ID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0LCBmaWxwKTsKKwlyZXN1bHQgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbih0dHksIHBvcnQpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZXJyX291dDsKIApAQCAtNDU1LDYgKzQ1MSw3IEBACiAJLm51bV9wb3J0cyA9CQkxLAogCS5hdHRhY2ggPQkJYXJrMzExNl9hdHRhY2gsCiAJLnNldF90ZXJtaW9zID0JCWFyazMxMTZfc2V0X3Rlcm1pb3MsCisJLmluaXRfdGVybWlvcyA9CQlhcmszMTE2X2luaXRfdGVybWlvcywKIAkuaW9jdGwgPQkJYXJrMzExNl9pb2N0bCwKIAkudGlvY21nZXQgPQkJYXJrMzExNl90aW9jbWdldCwKIAkub3BlbiA9CQkJYXJrMzExNl9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCmluZGV4IDcwMzNiMDMuLmEwNDY3YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTkyLDcgKzkyLDcgQEAKIHN0YXRpYyBpbnQgIGJlbGtpbl9zYV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgYmVsa2luX3NhX3JlbGVhc2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICBiZWxraW5fc2Ffb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBiZWxraW5fc2FfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBiZWxraW5fc2FfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGJlbGtpbl9zYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtMjEzLDcgKzIxMyw3IEBACiAKIAogc3RhdGljIGludCAgYmVsa2luX3NhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorCQkJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCWludCByZXR2YWwgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCmluZGV4IDI4MzA3NjYuLjU5ZWZmNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCkBAIC01Niw2ICs1NiwxOCBAQAogI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9GQUNUT1IgMTUzMjYyMDgwMAogI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9ESVZNQVggMwogCisvKiBCcmVhayBzdXBwb3J0IC0gdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gaW1wbGVtZW50IHRoaXMgd2FzIGdsZWFuZWQgZnJvbQorICogdGhlIE5ldC9GcmVlQlNEIHVjaGNvbS5jIGRyaXZlciBieSBUYWthbm9yaSBXYXRhbmFiZS4gIERvbW8gYXJpZ2F0by4KKyAqLworCisjZGVmaW5lIENIMzQxX1JFUV9XUklURV9SRUcgICAgMHg5QQorI2RlZmluZSBDSDM0MV9SRVFfUkVBRF9SRUcgICAgIDB4OTUKKyNkZWZpbmUgQ0gzNDFfUkVHX0JSRUFLMSAgICAgICAweDA1CisjZGVmaW5lIENIMzQxX1JFR19CUkVBSzIgICAgICAgMHgxOAorI2RlZmluZSBDSDM0MV9OQlJFQUtfQklUU19SRUcxIDB4MDEKKyNkZWZpbmUgQ0gzNDFfTkJSRUFLX0JJVFNfUkVHMiAweDQwCisKKwogc3RhdGljIGludCBkZWJ1ZzsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0gewpAQCAtMzAwLDggKzMxMiw3IEBACiAKIAogLyogb3BlbiB0aGlzIGRldmljZSwgc2V0IGRlZmF1bHQgcGFyYW1ldGVycyAqLwotc3RhdGljIGludCBjaDM0MV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGNoMzQxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CkBAIC0zMzMsNyArMzQ0LDcgQEAKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQogCi0JciA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCwgZmlscCk7CisJciA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCk7CiAKIG91dDoJcmV0dXJuIHI7CiB9CkBAIC0zNzQsNiArMzg1LDQ1IEBACiAJICovCiB9CiAKK3N0YXRpYyB2b2lkIGNoMzQxX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJY29uc3QgdWludDE2X3QgY2gzNDFfYnJlYWtfcmVnID0KKwkJQ0gzNDFfUkVHX0JSRUFLMSB8ICgodWludDE2X3QpIENIMzQxX1JFR19CUkVBSzIgPDwgOCk7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHI7CisJdWludDE2X3QgcmVnX2NvbnRlbnRzOworCXVpbnQ4X3QgYnJlYWtfcmVnWzJdOworCisJZGJnKCIlcygpIiwgX19mdW5jX18pOworCisJciA9IGNoMzQxX2NvbnRyb2xfaW4ocG9ydC0+c2VyaWFsLT5kZXYsIENIMzQxX1JFUV9SRUFEX1JFRywKKwkJCWNoMzQxX2JyZWFrX3JlZywgMCwgYnJlYWtfcmVnLCBzaXplb2YoYnJlYWtfcmVnKSk7CisJaWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVU0IgY29udHJvbCByZWFkIGVycm9yIHdoaWxzdCBnZXR0aW5nIgorCQkJCSIgYnJlYWsgcmVnaXN0ZXIgY29udGVudHMuXG4iLCBfX0ZJTEVfXyk7CisJCXJldHVybjsKKwl9CisJZGJnKCIlcyAtIGluaXRpYWwgY2gzNDEgYnJlYWsgcmVnaXN0ZXIgY29udGVudHMgLSByZWcxOiAleCwgcmVnMjogJXgiLAorCQkJX19mdW5jX18sIGJyZWFrX3JlZ1swXSwgYnJlYWtfcmVnWzFdKTsKKwlpZiAoYnJlYWtfc3RhdGUgIT0gMCkgeworCQlkYmcoIiVzIC0gRW50ZXIgYnJlYWsgc3RhdGUgcmVxdWVzdGVkIiwgX19mdW5jX18pOworCQlicmVha19yZWdbMF0gJj0gfkNIMzQxX05CUkVBS19CSVRTX1JFRzE7CisJCWJyZWFrX3JlZ1sxXSAmPSB+Q0gzNDFfTkJSRUFLX0JJVFNfUkVHMjsKKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gTGVhdmUgYnJlYWsgc3RhdGUgcmVxdWVzdGVkIiwgX19mdW5jX18pOworCQlicmVha19yZWdbMF0gfD0gQ0gzNDFfTkJSRUFLX0JJVFNfUkVHMTsKKwkJYnJlYWtfcmVnWzFdIHw9IENIMzQxX05CUkVBS19CSVRTX1JFRzI7CisJfQorCWRiZygiJXMgLSBOZXcgY2gzNDEgYnJlYWsgcmVnaXN0ZXIgY29udGVudHMgLSByZWcxOiAleCwgcmVnMjogJXgiLAorCQkJX19mdW5jX18sIGJyZWFrX3JlZ1swXSwgYnJlYWtfcmVnWzFdKTsKKwlyZWdfY29udGVudHMgPSAodWludDE2X3QpYnJlYWtfcmVnWzBdIHwgKCh1aW50MTZfdClicmVha19yZWdbMV0gPDwgOCk7CisJciA9IGNoMzQxX2NvbnRyb2xfb3V0KHBvcnQtPnNlcmlhbC0+ZGV2LCBDSDM0MV9SRVFfV1JJVEVfUkVHLAorCQkJY2gzNDFfYnJlYWtfcmVnLCByZWdfY29udGVudHMpOworCWlmIChyIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVTQiBjb250cm9sIHdyaXRlIGVycm9yIHdoaWxzdCBzZXR0aW5nIgorCQkJCSIgYnJlYWsgcmVnaXN0ZXIgY29udGVudHMuXG4iLCBfX0ZJTEVfXyk7Cit9CisKIHN0YXRpYyBpbnQgY2gzNDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKQEAgLTU3Nyw2ICs2MjcsNyBAQAogCS5jbG9zZSAgICAgICAgICAgICA9IGNoMzQxX2Nsb3NlLAogCS5pb2N0bCAgICAgICAgICAgICA9IGNoMzQxX2lvY3RsLAogCS5zZXRfdGVybWlvcyAgICAgICA9IGNoMzQxX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgICAgICAgICA9IGNoMzQxX2JyZWFrX2N0bCwKIAkudGlvY21nZXQgICAgICAgICAgPSBjaDM0MV90aW9jbWdldCwKIAkudGlvY21zZXQgICAgICAgICAgPSBjaDM0MV90aW9jbXNldCwKIAkucmVhZF9pbnRfY2FsbGJhY2sgPSBjaDM0MV9yZWFkX2ludF9jYWxsYmFjaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCmluZGV4IDBlNGYyZTQuLmIyMmFjMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogCkBAIC02Myw3ICs2NCw3IEBACiAJY2hhciAqczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0JaW50IHJldHZhbCA9IDA7CisJaW50IHJldHZhbDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gTlVMTDsKIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSBOVUxMLCBkdW1teTsKIApAQCAtMTE2LDEzICsxMTcsMTcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlyZXR2YWwgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3JfZ2V0X2ludGVyZmFjZTsKKworCXBvcnQgPSBzZXJpYWwtPnBvcnRbY28tPmluZGV4IC0gc2VyaWFsLT5taW5vcl07CiAJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7CiAKIAlpbmZvLT5wb3J0ID0gcG9ydDsKIAogCSsrcG9ydC0+cG9ydC5jb3VudDsKLQlpZiAocG9ydC0+cG9ydC5jb3VudCA9PSAxKSB7CisJaWYgKCF0ZXN0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKSkgewogCQlpZiAoc2VyaWFsLT50eXBlLT5zZXRfdGVybWlvcykgewogCQkJLyoKIAkJCSAqIGFsbG9jYXRlIGEgZmFrZSB0dHkgc28gdGhlIGRyaXZlciBjYW4gaW5pdGlhbGl6ZQpAQCAtMTUwLDkgKzE1NSw5IEBACiAJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcwogCQkgKiBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcG9ydCBpcyBvcGVuZWQgKi8KIAkJaWYgKHNlcmlhbC0+dHlwZS0+b3BlbikKLQkJCXJldHZhbCA9IHNlcmlhbC0+dHlwZS0+b3BlbihOVUxMLCBwb3J0LCBOVUxMKTsKKwkJCXJldHZhbCA9IHNlcmlhbC0+dHlwZS0+b3BlbihOVUxMLCBwb3J0KTsKIAkJZWxzZQotCQkJcmV0dmFsID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4oTlVMTCwgcG9ydCwgTlVMTCk7CisJCQlyZXR2YWwgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbihOVUxMLCBwb3J0KTsKIAogCQlpZiAocmV0dmFsKSB7CiAJCQllcnIoImNvdWxkIG5vdCBvcGVuIFVTQiBjb25zb2xlIHBvcnQiKTsKQEAgLTE2OCw2ICsxNzMsNyBAQAogCQkJa2ZyZWUodGVybWlvcyk7CiAJCQlrZnJlZSh0dHkpOwogCQl9CisJCXNldF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+cG9ydC5mbGFncyk7CiAJfQogCS8qIE5vdyB0aGF0IGFueSByZXF1aXJlZCBmYWtlIHR0eSBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWQgcmVzdG9yZQogCSAqIHRoZSB0dHkgcG9ydCBjb3VudCAqLwpAQCAtMTc1LDE4ICsxODEsMjIgQEAKIAkvKiBUaGUgY29uc29sZSBpcyBzcGVjaWFsIGluIHRlcm1zIG9mIGNsb3NpbmcgdGhlIGRldmljZSBzbwogCSAqIGluZGljYXRlIHRoaXMgcG9ydCBpcyBub3cgYWN0aW5nIGFzIGEgc3lzdGVtIGNvbnNvbGUuICovCiAJcG9ydC0+Y29uc29sZSA9IDE7Ci0JcmV0dmFsID0gMDsKIAotb3V0OgorCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwotZnJlZV90ZXJtaW9zOgorCisgZnJlZV90ZXJtaW9zOgogCWtmcmVlKHRlcm1pb3MpOwogCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOwotZnJlZV90dHk6CisgZnJlZV90dHk6CiAJa2ZyZWUodHR5KTsKLXJlc2V0X29wZW5fY291bnQ6CisgcmVzZXRfb3Blbl9jb3VudDoKIAlwb3J0LT5wb3J0LmNvdW50ID0gMDsKLQlnb3RvIG91dDsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOworIGVycm9yX2dldF9pbnRlcmZhY2U6CisJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKKwltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgdXNiX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDk4NWNiY2YuLjRhMjA4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTMzLDggKzMzLDcgQEAKIC8qCiAgKiBGdW5jdGlvbiBQcm90b3R5cGVzCiAgKi8KLXN0YXRpYyBpbnQgY3AyMTB4X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLAotCQkJCQkJCXN0cnVjdCBmaWxlICopOworc3RhdGljIGludCBjcDIxMHhfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOwogc3RhdGljIHZvaWQgY3AyMTB4X2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOwogc3RhdGljIHZvaWQgY3AyMTB4X2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosCkBAIC0zNjgsOCArMzY3LDcgQEAKIAlyZXR1cm4gYmF1ZDsKIH0KIAotc3RhdGljIGludCBjcDIxMHhfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCXN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBjcDIxMHhfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJlc3VsdDsKQEAgLTM5OSwxMiArMzk3LDYgQEAKIAogCS8qIENvbmZpZ3VyZSB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KIAljcDIxMHhfZ2V0X3Rlcm1pb3ModHR5LCBwb3J0KTsKLQotCS8qIFNldCB0aGUgRFRSIGFuZCBSVFMgcGlucyBsb3cgKi8KLQljcDIxMHhfdGlvY21zZXRfcG9ydCh0dHkgPyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhCi0JCQk6IHBvcnQsCi0JCU5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCmluZGV4IDMzNjUyM2YuLmIwZjY0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKQEAgLTYxLDcgKzYxLDcgQEAKIHN0YXRpYyB2b2lkIGN5YmVyamFja19kaXNjb25uZWN0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlbGVhc2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICBjeWJlcmphY2tfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgY3liZXJqYWNrX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCBjeWJlcmphY2tfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC0xNzMsNyArMTczLDcgQEAKIH0KIAogc3RhdGljIGludCAgY3liZXJqYWNrX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorCQkJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggNTlhZGZlMS4uZTBhOGI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC0xNzIsOCArMTcyLDcgQEAKIHN0YXRpYyBpbnQgIGN5cHJlc3NfaGlkY29tX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICBjeXByZXNzX2NhNDJ2Ml9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgY3lwcmVzc19yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAgY3lwcmVzc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBjeXByZXNzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBjeXByZXNzX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgY3lwcmVzc19kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbik7CiBzdGF0aWMgaW50ICBjeXByZXNzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCkBAIC02MzMsOCArNjMyLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGN5cHJlc3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGN5cHJlc3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTY1OSwxNSArNjU3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTZXQgdGVybWlvcyAqLwotCXJlc3VsdCA9IGN5cHJlc3Nfd3JpdGUodHR5LCBwb3J0LCBOVUxMLCAwKTsKLQotCWlmIChyZXN1bHQpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHNldHRpbmcgdGhlIGNvbnRyb2wgbGluZXMgLSBlcnJvciAlZFxuIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9IGVsc2UKLQkJZGJnKCIlcyAtIHN1Y2Nlc3Mgc2V0dGluZyB0aGUgY29udHJvbCBsaW5lcyIsIF9fZnVuY19fKTsKKwljeXByZXNzX3NlbmQocG9ydCk7CiAKIAlpZiAodHR5KQogCQljeXByZXNzX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgJnByaXYtPnRtcF90ZXJtaW9zKTsKQEAgLTEwMDUsNiArOTk1LDggQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkvKiBXZSBjYW4ndCBjbGVhbiB0aGlzIG9uZSB1cCBhcyB3ZSBkb24ndCBrbm93IHRoZSBkZXZpY2UgdHlwZQorCSAgIGVhcmx5IGVub3VnaCAqLwogCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgewogCQlpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfRUFSVEhNQVRFKSB7CiAJCQkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaAppbmRleCBlNzcyYjAxLi4xZmQzNjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmgKQEAgLTU3LDcgKzU3LDcgQEAKICNkZWZpbmUJVUFSVF9SSQkJMHgxMAkvKiByaW5nIGluZGljYXRvciAtIG1vZGVtIC0gZGV2aWNlIHRvIGhvc3QgKi8KICNkZWZpbmUgVUFSVF9DRAkJMHg0MAkvKiBjYXJyaWVyIGRldGVjdCAtIG1vZGVtIC0gZGV2aWNlIHRvIGhvc3QgKi8KICNkZWZpbmUgQ1lQX0VSUk9SIAkweDA4CS8qIHJlY2VpdmVkIGZyb20gaW5wdXQgcmVwb3J0IC0gZGV2aWNlIHRvIGhvc3QgKi8KLS8qIE5vdGUgLSB0aGUgYmVsb3cgaGFzIG5vdGhpbmcgdG8gdG8gd2l0aCB0aGUgImZlYXR1cmUgcmVwb3J0IiByZXNldCAqLworLyogTm90ZSAtIHRoZSBiZWxvdyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSAiZmVhdHVyZSByZXBvcnQiIHJlc2V0ICovCiAjZGVmaW5lIENPTlRST0xfUkVTRVQJMHgwOCAgCS8qIHNlbnQgd2l0aCBvdXRwdXQgcmVwb3J0IC0gaG9zdCB0byBkZXZpY2UgKi8KIAogLyogRW5kIG9mIFJTLTIzMiBwcm90b2NvbCBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCmluZGV4IGY0ODA4MDkuLmFiM2RkOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTQ1Myw4ICs0NTMsNyBAQAogc3RhdGljIHZvaWQgZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgaW50IGRpZ2lfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyBpbnQgZGlnaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgaW50IGRpZ2lfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgZGlnaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgZGlnaV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGRpZ2lfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pOwpAQCAtMTM0Nyw4ICsxMzQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZGlnaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlszMl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCmluZGV4IDgwY2IzNDcuLjMzYzllOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCkBAIC03OSw4ICs3OSw3IEBACiAjZGVmaW5lIEVNUEVHX1BST0RVQ1RfSUQJCTB4MDAwMQogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbiBlbXBlZy1jYXIgcGxheWVyICovCi1zdGF0aWMgaW50ICBlbXBlZ19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBlbXBlZ19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZW1wZWdfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICBlbXBlZ193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLApAQCAtOTAsOCArODksNyBAQAogc3RhdGljIHZvaWQgZW1wZWdfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBlbXBlZ191bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCAgZW1wZWdfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyB2b2lkIGVtcGVnX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgZW1wZWdfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgZW1wZWdfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKQEAgLTEyMyw3ICsxMjEsNyBAQAogCS50aHJvdHRsZSA9CQllbXBlZ190aHJvdHRsZSwKIAkudW50aHJvdHRsZSA9CQllbXBlZ191bnRocm90dGxlLAogCS5hdHRhY2ggPQkJZW1wZWdfc3RhcnR1cCwKLQkuc2V0X3Rlcm1pb3MgPQkJZW1wZWdfc2V0X3Rlcm1pb3MsCisJLmluaXRfdGVybWlvcyA9CQllbXBlZ19pbml0X3Rlcm1pb3MsCiAJLndyaXRlID0JCWVtcGVnX3dyaXRlLAogCS53cml0ZV9yb29tID0JCWVtcGVnX3dyaXRlX3Jvb20sCiAJLmNoYXJzX2luX2J1ZmZlciA9CWVtcGVnX2NoYXJzX2luX2J1ZmZlciwKQEAgLTE0MiwxNyArMTQwLDEzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFbXBlZyBzcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBlbXBlZ19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGVtcGVnX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JLyogRm9yY2UgZGVmYXVsdCB0ZXJtaW8gc2V0dGluZ3MgKi8KLQllbXBlZ19zZXRfdGVybWlvcyh0dHksIHBvcnQsIE5VTEwpIDsKLQogCWJ5dGVzX2luID0gMDsKIAlieXRlc19vdXQgPSAwOwogCkBAIC00MjUsMTEgKzQxOSw5IEBACiB9CiAKIAotc3RhdGljIHZvaWQgZW1wZWdfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIGVtcGVnX2luaXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyA9IHR0eS0+dGVybWlvczsKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyoKIAkgKiBUaGUgZW1wZWctY2FyIHBsYXllciB3YW50cyB0aGVzZSBwYXJ0aWN1bGFyIHR0eSBzZXR0aW5ncy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggOGZlYzVkNC4uNGY4ODNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTE3Niw2ICsxNzYsOSBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NSUNST19DSEFNRUxFT05fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9SRUxBSVNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PUEVORENDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT1BFTkRDQ19TTklGRkVSX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX09QRU5EQ0NfR0FURVdBWV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKElOVEVSQklPTUVUUklDU19WSUQsIElOVEVSQklPTUVUUklDU19JT0JPQVJEX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NQUk9HX0lJKSB9LApAQCAtNjk0LDYgKzY5Nyw4IEBACiAJeyBVU0JfREVWSUNFKERFX1ZJRCwgV0hUX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQURJX1ZJRCwgQURJX0dOSUNFX1BJRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCisJeyBVU0JfREVWSUNFKEFESV9WSUQsIEFESV9HTklDRVBMVVNfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKIAl7IFVTQl9ERVZJQ0UoSkVUSV9WSUQsIEpFVElfU1BDMTIwMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKE1BUlZFTExfVklELCBNQVJWRUxMX1NIRUVWQVBMVUdfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKQEAgLTcwMiw2ICs3MDcsOCBAQAogCXsgVVNCX0RFVklDRShCQVlFUl9WSUQsIEJBWUVSX0NPTlRPVVJfQ0FCTEVfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTUFSVkVMTF9PUEVOUkRfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEhBTUVHX0hPODIwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEhBTUVHX0hPODcwX1BJRCkgfSwKIAl7IH0sCQkJCQkvKiBPcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtNzQ3LDggKzc1NCw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgaW50ICBmdGRpX3Npb19wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCAgZnRkaV9zaW9fcG9ydF9yZW1vdmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50ICBmdGRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGZ0ZGlfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBmdGRpX2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IG9uKTsKIHN0YXRpYyBpbnQgIGZ0ZGlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKQEAgLTE2ODAsOCArMTY4Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnRkaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZnRkaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7IC8qIGZ0ZGlfb3BlbiAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCA4YzkyYjg4Li42ZjMxZTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtODEsNiArODEsOSBAQAogCiAvKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLwogI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAorI2RlZmluZSBGVERJX09QRU5EQ0NfU05JRkZFUl9QSUQJMHhCRkQ5CisjZGVmaW5lIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQJMHhCRkRBCisjZGVmaW5lIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRAkweEJGREIKIAogLyogU3Byb2cgSUkgKEFuZHJldyBDcm9zbGFuZCdzIFNwcm9nSUkgRENDIGludGVyZmFjZSkgKi8KICNkZWZpbmUgRlRESV9TUFJPR19JSQkJMHhGMEM4CkBAIC05MzAsNiArOTMzLDcgQEAKICAqLwogI2RlZmluZSBBRElfVklEIAkJMHgwNDU2CiAjZGVmaW5lIEFESV9HTklDRV9QSUQgCQkweEYwMDAKKyNkZWZpbmUgQURJX0dOSUNFUExVU19QSUQgCTB4RjAwMQogCiAvKgogICogSkVUSSBTUEVDVFJPTUVURVIgU1BFQ0JPUyAxMjAxCkBAIC05NjgsNiArOTcyLDEyIEBACiAjZGVmaW5lIE1BUlZFTExfT1BFTlJEX1BJRAkweDllOTAKIAogLyoKKyAqIEhhbWVnIEhPODIwIGFuZCBITzg3MCBpbnRlcmZhY2UgKHVzaW5nIFZJRCAweDA0MDMpCisgKi8KKyNkZWZpbmUgICAgICAgIEhBTUVHX0hPODIwX1BJRCAgICAgICAgIDB4ZWQ3NAorI2RlZmluZSAgICAgICAgSEFNRUdfSE84NzBfUElEICAgICAgICAgMHhlZDcxCisKKy8qCiAgKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCiAgKiAgIGJSZXF1ZXN0OiAgICAgICBGVERJX0UyX1JFQUQKICAqICAgd1ZhbHVlOiAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDg4MzlmMWMuLjIwNDMyZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtOTMzLDggKzkzMyw3IEBACiAKIAogCi1zdGF0aWMgaW50IGdhcm1pbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZ2FybWluX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdGF0dXMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggY2U1N2Y2YS4uZGViYTA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKQEAgLTExNCw4ICsxMTQsNyBAQAogI2VuZGlmCiB9CiAKLWludCB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCWludCByZXN1bHQgPSAwOwpAQCAtMTY3LDI0ICsxNjYsNiBAQAogCX0KIH0KIAotaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwotCWludCBpLCBjID0gMCwgcjsKLQotCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7Ci0JCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHBvcnQtPnJlYWRfdXJiKSB7Ci0JCQlyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9OT0lPKTsKLQkJCWlmIChyIDwgMCkKLQkJCQljKys7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gYyA/IC1FSU8gOiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZSk7Ci0KIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTI3MywxMiArMjU0LDgxIEBACiAJcmV0dXJuIGJ3cml0ZTsKIH0KIAorLyoqCisgKiB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfc3RhcnQgLSBraWNrIG9mZiBhbiBVUkIgd3JpdGUKKyAqIEBwb3J0OglQb2ludGVyIHRvIHRoZSAmc3RydWN0IHVzYl9zZXJpYWxfcG9ydCBkYXRhCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBvbiBzdWNjZXNzLiBUaGlzIHdpbGwgYmUgemVybyBpZiB0aGVyZQorICogd2FzIG5vdGhpbmcgdG8gc2VuZC4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUKKyAqLworc3RhdGljIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfc3RhcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJaW50IHJlc3VsdDsKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHN0YXJ0X2lvOworCisJLyogQXRvbWljYWxseSBkZXRlcm1pbmUgd2hldGhlciB3ZSBjYW4gYW5kIG5lZWQgdG8gc3RhcnQgYSBVU0IKKwkgKiBvcGVyYXRpb24uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlpZiAocG9ydC0+d3JpdGVfdXJiX2J1c3kpCisJCXN0YXJ0X2lvID0gZmFsc2U7CisJZWxzZSB7CisJCXN0YXJ0X2lvID0gKF9fa2ZpZm9fbGVuKHBvcnQtPndyaXRlX2ZpZm8pICE9IDApOworCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IHN0YXJ0X2lvOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXN0YXJ0X2lvKQorCQlyZXR1cm4gMDsKKworCWRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwljb3VudCA9IGtmaWZvX2dldChwb3J0LT53cml0ZV9maWZvLCBkYXRhLCBwb3J0LT5idWxrX291dF9zaXplKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwgZGF0YSk7CisKKwkvKiBzZXQgdXAgb3VyIHVyYiAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwKKwkJCSAgICgoc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrKSA/CisJCQkgICAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjayA6CisJCQkgICAgIHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrKSwKKwkJCSAgIHBvcnQpOworCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCS8qIGRvbid0IGhhdmUgdG8gZ3JhYiB0aGUgbG9jayBoZXJlLCBhcyB3ZSB3aWxsCisJCSAgIHJldHJ5IGlmICE9IDAgKi8KKwkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOworCX0gZWxzZQorCQlyZXN1bHQgPSBjb3VudDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlIC0gZ2VuZXJpYyB3cml0ZSBmdW5jdGlvbiBmb3Igc2VyaWFsIFVTQiBkZXZpY2VzCisgKiBAdHR5OglQb2ludGVyIHRvICZzdHJ1Y3QgdHR5X3N0cnVjdCBmb3IgdGhlIGRldmljZQorICogQHBvcnQ6CVBvaW50ZXIgdG8gdGhlICZ1c2Jfc2VyaWFsX3BvcnQgc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlCisgKiBAYnVmOglQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlCisgKiBAY291bnQ6CU51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHdyaXR0ZW4sIHdoaWNoIG1heSBiZSBhbnl0aGluZworICogZnJvbSB6ZXJvIHRvIEBjb3VudC4gSWYgYW4gZXJyb3Igb2NjdXJzLCBpdCByZXR1cm5zIHRoZSBuZWdhdGl2ZSBlcnJubworICogdmFsdWUuCisgKi8KIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKQEAgLTI4OCw1NyArMzM4LDIwIEBACiAJfQogCiAJLyogb25seSBkbyBzb21ldGhpbmcgaWYgd2UgaGF2ZSBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCi0JaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKCFzZXJpYWwtPm51bV9idWxrX291dCkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKHNlcmlhbC0+dHlwZS0+bWF4X2luX2ZsaWdodF91cmJzKQotCQkJcmV0dXJuIHVzYl9zZXJpYWxfbXVsdGlfdXJiX3dyaXRlKHR0eSwgcG9ydCwKLQkJCQkJCQkgIGJ1ZiwgY291bnQpOworCWlmIChzZXJpYWwtPnR5cGUtPm1heF9pbl9mbGlnaHRfdXJicykKKwkJcmV0dXJuIHVzYl9zZXJpYWxfbXVsdGlfdXJiX3dyaXRlKHR0eSwgcG9ydCwKKwkJCQkJCSAgYnVmLCBjb3VudCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKHBvcnQtPndyaXRlX3VyYl9idXN5KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19mdW5jX18pOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJY291bnQgPSBrZmlmb19wdXQocG9ydC0+d3JpdGVfZmlmbywgYnVmLCBjb3VudCk7CisJcmVzdWx0ID0gdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX3N0YXJ0KHBvcnQpOwogCi0JCWNvdW50ID0gKGNvdW50ID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPwotCQkJCQlwb3J0LT5idWxrX291dF9zaXplIDogY291bnQ7CisJaWYgKHJlc3VsdCA+PSAwKQorCQlyZXN1bHQgPSBjb3VudDsKIAotCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgY291bnQpOwotCQlkYXRhID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGNvdW50LCBkYXRhKTsKLQotCQkvKiBzZXQgdXAgb3VyIHVyYiAqLwotCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIHNlcmlhbC0+ZGV2LAotCQkJCSAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKLQkJCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKLQkJCQkgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCi0JCQkJICAgKChzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8KLQkJCQkgICAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjayA6Ci0JCQkJICAgICB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayksCi0JCQkJICAgcG9ydCk7Ci0KLQkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwotCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDE7Ci0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXN1bHQpIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCQkJLyogZG9uJ3QgaGF2ZSB0byBncmFiIHRoZSBsb2NrIGhlcmUsIGFzIHdlIHdpbGwKLQkJCSAgIHJldHJ5IGlmICE9IDAgKi8KLQkJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKLQkJfSBlbHNlCi0JCQlyZXN1bHQgPSBjb3VudDsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qIG5vIGJ1bGsgb3V0LCBzbyByZXR1cm4gMCBieXRlcyB3cml0dGVuICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlc3VsdDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZSk7CiAKQEAgLTM1Niw5ICszNjksOCBAQAogCQkJcm9vbSA9IHBvcnQtPmJ1bGtfb3V0X3NpemUgKgogCQkJCShzZXJpYWwtPnR5cGUtPm1heF9pbl9mbGlnaHRfdXJicyAtCiAJCQkJIHBvcnQtPnVyYnNfaW5fZmxpZ2h0KTsKLQl9IGVsc2UgaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0ICYmICEocG9ydC0+d3JpdGVfdXJiX2J1c3kpKSB7Ci0JCXJvb20gPSBwb3J0LT5idWxrX291dF9zaXplOwotCX0KKwl9IGVsc2UgaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KQorCQlyb29tID0gcG9ydC0+d3JpdGVfZmlmby0+c2l6ZSAtIF9fa2ZpZm9fbGVuKHBvcnQtPndyaXRlX2ZpZm8pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIHJvb20pOwpAQCAtMzc4LDExICszOTAsOCBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCQljaGFycyA9IHBvcnQtPnR4X2J5dGVzX2ZsaWdodDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKLQkJLyogRklYTUU6IExvY2tpbmcgKi8KLQkJaWYgKHBvcnQtPndyaXRlX3VyYl9idXN5KQotCQkJY2hhcnMgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7Ci0JfQorCX0gZWxzZSBpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCisJCWNoYXJzID0ga2ZpZm9fbGVuKHBvcnQtPndyaXRlX2ZpZm8pOwogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOwogCXJldHVybiBjaGFyczsKQEAgLTQ4NiwxNiArNDk1LDIzIEBACiAJCWlmIChwb3J0LT51cmJzX2luX2ZsaWdodCA8IDApCiAJCQlwb3J0LT51cmJzX2luX2ZsaWdodCA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcoIiVzIC0gbm9uemVybyBtdWx0aS11cmIgd3JpdGUgYnVsayBzdGF0dXMgIgorCQkJCSJyZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCXJldHVybjsKKwkJfQogCX0gZWxzZSB7Ci0JCS8qIEhhbmRsZSB0aGUgY2FzZSBmb3Igc2luZ2xlIHVyYiBtb2RlICovCiAJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcoIiVzIC0gbm9uemVybyBtdWx0aS11cmIgd3JpdGUgYnVsayBzdGF0dXMgIgorCQkJCSJyZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCWtmaWZvX3Jlc2V0KHBvcnQtPndyaXRlX2ZpZm8pOworCQl9IGVsc2UKKwkJCXVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9zdGFydChwb3J0KTsKIAl9CiAKLQlpZiAoc3RhdHVzKSB7Ci0JCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJcmV0dXJuOwotCX0KIAl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrKTsKQEAgLTU2MCw2ICs1NzYsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKTsKIAoraW50IHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCWludCBpLCBjID0gMCwgcjsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWlmICghcG9ydC0+cG9ydC5jb3VudCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwb3J0LT5yZWFkX3VyYikgeworCQkJciA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfTk9JTyk7CisJCQlpZiAociA8IDApCisJCQkJYysrOworCQl9CisKKwkJaWYgKHBvcnQtPndyaXRlX3VyYikgeworCQkJciA9IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9zdGFydChwb3J0KTsKKwkJCWlmIChyIDwgMCkKKwkJCQljKys7CisJCX0KKwl9CisKKwlyZXR1cm4gYyA/IC1FSU8gOiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZSk7CisKIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggMDE5MTY5My4uYjk3OTYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTIwNSw4ICsyMDUsNyBAQAogc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIHVzYnNlcmlhbCBjYWxsYmFja3MgKi8KLXN0YXRpYyBpbnQgZWRnZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgZWRnZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZWRnZV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgZWRnZV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC04NTIsOCArODUxLDcgQEAKICAqCUlmIHN1Y2Nlc3NmdWwsIHdlIHJldHVybiAwCiAgKglPdGhlcndpc2Ugd2UgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBlZGdlX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBlZGdlX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC0yNTQyLDcgKzI1NDAsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIKLSAqICB0aGlzIGZ1bmN0aW9uIGJ1aWxkcyB1cCBhIHVhcnQgcmVnaXN0ZXIgbWVzc2FnZSBhbmQgc2VuZHMgdG8gdG8gdGhlIGRldmljZS4KKyAqICB0aGlzIGZ1bmN0aW9uIGJ1aWxkcyB1cCBhIHVhcnQgcmVnaXN0ZXIgbWVzc2FnZSBhbmQgc2VuZHMgdG8gdGhlIGRldmljZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LAogCQkJCQkJX191OCByZWdOdW0sIF9fdTggcmVnVmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCmluZGV4IGU4YmM0MmYuLmQ0Y2MwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC0xODMxLDggKzE4MzEsNyBAQAogCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCi1zdGF0aWMgaW50IGVkZ2Vfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGVkZ2Vfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAyNTQ1ZDQ1Li4yNGZjYzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYW4gaXBhcSAqLwogc3RhdGljIGludCAgaXBhcV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGlwYXFfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICBpcGFxX2NhbGNfbnVtX3BvcnRzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwpAQCAtNTg3LDcgKzU4Nyw3IEBACiBzdGF0aWMgaW50CQlieXRlc19vdXQ7CiAKIHN0YXRpYyBpbnQgaXBhcV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2OwpAQCAtNjI4LDExICs2MjgsNiBAQAogCQlwcml2LT5mcmVlX2xlbiArPSBQQUNLRVRfU0laRTsKIAl9CiAKLQlpZiAodHR5KSB7Ci0JCS8qIEZJWE1FOiBUaGVzZSB0d28gYXJlIGJvZ3VzICovCi0JCXR0eS0+cmF3ID0gMTsKLQkJdHR5LT5yZWFsX3JhdyA9IDE7Ci0JfQogCS8qCiAJICogTG9zZSB0aGUgc21hbGwgYnVmZmVycyB1c2JzZXJpYWwgcHJvdmlkZXMuIE1ha2UgbGFyZ2VyIG9uZXMuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKaW5kZXggMjlhZDAzOC4uNzI3ZDMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpAQCAtMTkzLDggKzE5Myw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGlwd19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgaXB3X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJdTggYnVmX2Zsb3dfc3RhdGljWzE2XSA9IElQV19CWVRFU19GTE9XSU5JVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwppbmRleCA2NjAwOWI2Li45NWQ4ZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCkBAIC04Niw4ICs4Niw3IEBACiBzdGF0aWMgaW50IHhib2YgPSAtMTsKIAogc3RhdGljIGludCAgaXJfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBpcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlcCk7CitzdGF0aWMgaW50ICBpcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgaXJfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICBpcl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC0yOTYsOCArMjk1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgaXJfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCWNoYXIgKmJ1ZmZlcjsKIAlpbnQgcmVzdWx0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggOTY4NzNhNy4uZTZlMDJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKQEAgLTQwLDcgKzQwLDcgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjEwIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMTEiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJJbmZpbml0eSBVU0IgVW5saW1pdGVkIFBob2VuaXggZHJpdmVyIgogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKQEAgLTY0LDYgKzY0LDcgQEAKIHN0YXRpYyBpbnQgaXV1X2NhcmRpbjsKIHN0YXRpYyBpbnQgaXV1X2NhcmRvdXQ7CiBzdGF0aWMgaW50IHhtYXM7CitzdGF0aWMgaW50IHZjY19kZWZhdWx0ID0gNTsKIAogc3RhdGljIHZvaWQgcmVhZF9yeGNtZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogCkBAIC03MSw3ICs3Miw2IEBACiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBzdG9yZSBpcnEgc3RhdGUgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsKIAl1OCBsaW5lX3N0YXR1czsKLQl1OCB0ZXJtaW9zX2luaXRpYWxpemVkOwogCWludCB0aW9zdGF0dXM7CQkvKiBzdG9yZSBJVUFSVCBTSUdOQUwgZm9yIHRpb2NtZ2V0IGNhbGwgKi8KIAl1OCByZXNldDsJCS8qIGlmIDEgcmVzZXQgaXMgbmVlZGVkICovCiAJaW50IHBvbGw7CQkvKiBudW1iZXIgb2YgcG9sbCAqLwpAQCAtODAsNiArODAsNyBAQAogCXU4ICpidWY7CQkvKiB1c2VkIGZvciBpbml0aWFsaXplIHNwZWVkICovCiAJdTggKmRiZ2J1ZjsJCS8qIGRlYnVnIGJ1ZmZlciAqLwogCXU4IGxlbjsKKwlpbnQgdmNjOwkJLyogdmNjIChlaXRoZXIgMyBvciA1IFYpICovCiB9OwogCiAKQEAgLTExNSw2ICsxMTYsNyBAQAogCQlrZnJlZShwcml2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCXByaXYtPnZjYyA9IHZjY19kZWZhdWx0OwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CkBAIC0xMDEwLDIyICsxMDEyLDI4IEBACiAJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOwogCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwogCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Ci0JCW1zbGVlcCgxMDAwKTsKLQkJLyogd2FpdCBvbmUgc2Vjb25kIHRvIGZyZWUgYWxsIGJ1ZmZlcnMgKi8KIAkJaXV1X2xlZChwb3J0LCAwLCAwLCAweEYwMDAsIDB4RkYpOwotCQltc2xlZXAoMTAwMCk7Ci0JCXVzYl9yZXNldF9kZXZpY2UocG9ydC0+c2VyaWFsLT5kZXYpOwogCX0KIH0KIAotc3RhdGljIGludCBpdXVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBpdXVfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IENMT0NBTCB8IENSRUFEIHwgQ1M4IHwgQjk2MDAKKwkJCQl8IFRJT0NNX0NUUyB8IENTVE9QQiB8IFBBUkVOQjsKKwl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKKwl0dHktPnRlcm1pb3MtPmNfb3NwZWVkID0gOTYwMDsKKwl0dHktPnRlcm1pb3MtPmNfbGZsYWcgPSAwOworCXR0eS0+dGVybWlvcy0+Y19vZmxhZyA9IDA7CisJdHR5LT50ZXJtaW9zLT5jX2lmbGFnID0gMDsKK30KKworc3RhdGljIGludCBpdXVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJdTggKmJ1ZjsKIAlpbnQgcmVzdWx0OwogCXUzMiBhY3R1YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaXV1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlkYmcoIiVzIC0gIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTEwNjQsMjEgKzEwNzIsNyBAQAogCQkJICBwb3J0LT5idWxrX2luX2J1ZmZlciwgNTEyLAogCQkJICBOVUxMLCBOVUxMKTsKIAotCS8qIHNldCB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmICh0dHkgJiYgIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKLQkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOwotCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBDTE9DQUwgfCBDUkVBRCB8IENTOCB8IEI5NjAwCi0JCQkJCXwgVElPQ01fQ1RTIHwgQ1NUT1BCIHwgUEFSRU5COwotCQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKLQkJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDk2MDA7Ci0JCXR0eS0+dGVybWlvcy0+Y19sZmxhZyA9IDA7Ci0JCXR0eS0+dGVybWlvcy0+Y19vZmxhZyA9IDA7Ci0JCXR0eS0+dGVybWlvcy0+Y19pZmxhZyA9IDA7Ci0JCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAxOwotCQlwcml2LT5wb2xsID0gMDsKLQkgfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5wb2xsID0gMDsKIAogCS8qIGluaXRpYWxpemUgd3JpdGVidWYgKi8KICNkZWZpbmUgRklTSChhLCBiLCBjLCBkKSBkbyB7IFwKQEAgLTExODcsNiArMTE4MSw5NSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qIGhvdyB0byBjaGFuZ2UgVkNDICovCitzdGF0aWMgaW50IGl1dV92Y2Nfc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCB2Y2MpCit7CisJaW50IHN0YXR1czsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyg1LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYmcoIiVzIC0gZW50ZXIiLCBfX2Z1bmNfXyk7CisKKwlidWZbMF0gPSBJVVVfU0VUX1ZDQzsKKwlidWZbMV0gPSB2Y2MgJiAweEZGOworCWJ1ZlsyXSA9ICh2Y2MgPj4gOCkgJiAweEZGOworCWJ1ZlszXSA9ICh2Y2MgPj4gMTYpICYgMHhGRjsKKwlidWZbNF0gPSAodmNjID4+IDI0KSAmIDB4RkY7CisKKwlzdGF0dXMgPSBidWxrX2ltbWVkaWF0ZShwb3J0LCBidWYsIDUpOworCWtmcmVlKGJ1Zik7CisKKwlpZiAoc3RhdHVzICE9IElVVV9PUEVSQVRJT05fT0spCisJCWRiZygiJXMgLSB2Y2MgZXJyb3Igc3RhdHVzID0gJTJ4IiwgX19mdW5jX18sIHN0YXR1cyk7CisJZWxzZQorCQlkYmcoIiVzIC0gdmNjIE9LICEiLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogU3lzZnMgQXR0cmlidXRlcworICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdmNjX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCXN0cnVjdCBpdXVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT52Y2MpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV92Y2NfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKwlzdHJ1Y3QgaXV1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyB2OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2KSkgeworCQlkZXZfZXJyKGRldiwgIiVzIC0gdmNjX21vZGU6ICVzIGlzIG5vdCBhIHVuc2lnbmVkIGxvbmdcbiIsCisJCQkJX19mdW5jX18sIGJ1Zik7CisJCWdvdG8gZmFpbF9zdG9yZV92Y2NfbW9kZTsKKwl9CisKKwlkYmcoIiVzOiBzZXR0aW5nIHZjY19tb2RlID0gJWxkIiwgX19mdW5jX18sIHYpOworCisJaWYgKCh2ICE9IDMpICYmICh2ICE9IDUpKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSB2Y2NfbW9kZSAlbGQgaXMgaW52YWxpZFxuIiwgX19mdW5jX18sIHYpOworCX0gZWxzZSB7CisJCWl1dV92Y2Nfc2V0KHBvcnQsIHYpOworCQlwcml2LT52Y2MgPSB2OworCX0KK2ZhaWxfc3RvcmVfdmNjX21vZGU6CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodmNjX21vZGUsIFNfSVJVU1IgfCBTX0lXVVNSLCBzaG93X3ZjY19tb2RlLAorCXN0b3JlX3ZjY19tb2RlKTsKKworc3RhdGljIGludCBpdXVfY3JlYXRlX3N5c2ZzX2F0dHJzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBvcnQtPmRldiwgJmRldl9hdHRyX3ZjY19tb2RlKTsKK30KKworc3RhdGljIGludCBpdXVfcmVtb3ZlX3N5c2ZzX2F0dHJzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmcG9ydC0+ZGV2LCAmZGV2X2F0dHJfdmNjX21vZGUpOworCXJldHVybiAwOworfQorCisvKgorICogRW5kIFN5c2ZzIEF0dHJpYnV0ZXMKKyAqLworCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGl1dV9kZXZpY2UgPSB7CiAJLmRyaXZlciA9IHsKIAkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC0xMTk0LDYgKzEyNzcsOCBAQAogCQkgICB9LAogCS5pZF90YWJsZSA9IGlkX3RhYmxlLAogCS5udW1fcG9ydHMgPSAxLAorCS5wb3J0X3Byb2JlID0gaXV1X2NyZWF0ZV9zeXNmc19hdHRycywKKwkucG9ydF9yZW1vdmUgPSBpdXVfcmVtb3ZlX3N5c2ZzX2F0dHJzLAogCS5vcGVuID0gaXV1X29wZW4sCiAJLmNsb3NlID0gaXV1X2Nsb3NlLAogCS53cml0ZSA9IGl1dV91YXJ0X3dyaXRlLApAQCAtMTIwMSw2ICsxMjg2LDcgQEAKIAkudGlvY21nZXQgPSBpdXVfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gaXV1X3Rpb2Ntc2V0LAogCS5zZXRfdGVybWlvcyA9IGl1dV9zZXRfdGVybWlvcywKKwkuaW5pdF90ZXJtaW9zID0gaXV1X2luaXRfdGVybWlvcywKIAkuYXR0YWNoID0gaXV1X3N0YXJ0dXAsCiAJLnJlbGVhc2UgPSBpdXVfcmVsZWFzZSwKIH07CkBAIC0xMjQyLDE0ICsxMzI4LDE5IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKIAogbW9kdWxlX3BhcmFtKHhtYXMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoeG1hcywgInhtYXMgY29sb3IgZW5hYmxlZCBvciBub3QiKTsKK01PRFVMRV9QQVJNX0RFU0MoeG1hcywgIlhtYXMgY29sb3JzIGVuYWJsZWQgb3Igbm90Iik7CiAKIG1vZHVsZV9wYXJhbShib29zdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGJvb3N0LCAib3ZlcmNsb2NrIGJvb3N0IHBlcmNlbnQgMTAwIHRvIDUwMCIpOworTU9EVUxFX1BBUk1fREVTQyhib29zdCwgIkNhcmQgb3ZlcmNsb2NrIGJvb3N0IChpbiBwZXJjZW50IDEwMC01MDApIik7CiAKIG1vZHVsZV9wYXJhbShjbG9ja21vZGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhjbG9ja21vZGUsICIxPTNNaHo1NzksMj0zTWh6NjgwLDM9Nk1oeiIpOworTU9EVUxFX1BBUk1fREVTQyhjbG9ja21vZGUsICJDYXJkIGNsb2NrIG1vZGUgKDE9My41NzkgTUh6LCAyPTMuNjgwIE1IeiwgIgorCQkiMz02IE1oeikiKTsKIAogbW9kdWxlX3BhcmFtKGNkbW9kZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGNkbW9kZSwgIkNhcmQgZGV0ZWN0IG1vZGUgMD1ub25lLCAxPUNELCAyPSFDRCwgMz1EU1IsICIKLQkJICI0PSFEU1IsIDU9Q1RTLCA2PSFDVFMsIDc9UklORywgOD0hUklORyIpOworTU9EVUxFX1BBUk1fREVTQyhjZG1vZGUsICJDYXJkIGRldGVjdCBtb2RlICgwPW5vbmUsIDE9Q0QsIDI9IUNELCAzPURTUiwgIgorCQkgIjQ9IURTUiwgNT1DVFMsIDY9IUNUUywgNz1SSU5HLCA4PSFSSU5HKSIpOworCittb2R1bGVfcGFyYW0odmNjX2RlZmF1bHQsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh2Y2NfZGVmYXVsdCwgIlNldCBkZWZhdWx0IFZDQyAoZWl0aGVyIDMgZm9yIDMuM1Ygb3IgNSAiCisJCSJmb3IgNVYpLiBEZWZhdWx0IHRvIDUuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCAyNTk0Yjg3Li5mOGM0YjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTEyMDksOCArMTIwOSw3IEBACiB9CiAKIAotc3RhdGljIGludCBrZXlzcGFuX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBrZXlzcGFuX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CiAJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCSpzX3ByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAppbmRleCAzMTA3ZWQxLi4zMDc3MWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTM2LDggKzM2LDcgQEAKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgS2V5c3BhbiBzZXJpYWwgY29udmVydGVyICovCiBzdGF0aWMgaW50ICBrZXlzcGFuX29wZW4JCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJIHN0cnVjdCBmaWxlICpmaWxwKTsKKwkJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQga2V5c3Bhbl9jbG9zZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQga2V5c3Bhbl9kdHJfcnRzCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IG9uKTsKIHN0YXRpYyBpbnQgIGtleXNwYW5fc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCBkMGIxMmU0Li4yNTdjMTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNjgxLDcgKzY4MSw3IEBACiAKIAogc3RhdGljIGludCBrZXlzcGFuX3BkYV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKKwkJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXVuc2lnbmVkIGNoYXIgcm9vbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IDBmNDRiYjguLmY3MzczMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtMzgsNyArMzgsNyBAQAogICogICAwLjNhIC0gaW1wbGVtZW50ZWQgcG9vbHMgb2Ygd3JpdGUgVVJCcwogICogICAwLjMgIC0gYWxwaGEgdmVyc2lvbiBmb3IgcHVibGljIHRlc3RpbmcKICAqICAgMC4yICAtIFRJT0NNR0VUIHdvcmtzLCBzbyBhdXRvcGlsb3QoMSkgY2FuIGJlIHVzZWQhCi0gKiAgIDAuMSAgLSBjYW4gYmUgdXNlZCB0byB0byBwaWxvdC14ZmVyIC1wIC9kZXYvdHR5VVNCMCAtbAorICogICAwLjEgIC0gY2FuIGJlIHVzZWQgdG8gZG8gcGlsb3QteGZlciAtcCAvZGV2L3R0eVVTQjAgLWwKICAqCiAgKiAgIFRoZSBkcml2ZXIgc2tlbGV0b24gaXMgbWFpbmx5IGJhc2VkIG9uIG1jdF91MjMyLmMgYW5kIHZhcmlvdXMgb3RoZXIKICAqICAgcGllY2VzIG9mIGNvZGUgc2hhbWVsZXNzbHkgY29waWVkIGZyb20gdGhlIGRyaXZlcnMvdXNiL3NlcmlhbC8gZGlyZWN0b3J5LgpAQCAtNzUsOCArNzUsNyBAQAogc3RhdGljIGludCAga2xzaV8xMDVfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkIGtsc2lfMTA1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBrbHNpXzEwNV9yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAga2xzaV8xMDVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAga2xzaV8xMDVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGtsc2lfMTA1X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCAga2xzaV8xMDVfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC0zNTgsOCArMzU3LDcgQEAKIAl9CiB9IC8qIGtsc2lfMTA1X3JlbGVhc2UgKi8KIAotc3RhdGljIGludCAga2xzaV8xMDVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50ICBrbHNpXzEwNV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IHJldHZhbCA9IDA7CkBAIC0zNzEsMTAgKzM2OSw2IEBACiAKIAlkYmcoIiVzIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcwotCSAqIHRoZSBkYXRhIHRocm91Z2gKLQkgKiB0dHktPmxvd19sYXRlbmN5ID0gMTsgKi8KLQogCS8qIERvIGEgZGVmaW5lZCByZXN0YXJ0OgogCSAqIFNldCB1cCBzYW5lIGRlZmF1bHQgYmF1ZCByYXRlIGFuZCBzZW5kIHRoZSAnUkVBRF9PTicKIAkgKiB2ZW5kb3IgY29tbWFuZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwppbmRleCA2ZGIwZTU2Li40NWVhNjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCkBAIC03MCw4ICs3MCw3IEBACiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgaW50ICBrb2JpbF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQga29iaWxfcmVsZWFzZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgIGtvYmlsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtvYmlsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBrb2JpbF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgIGtvYmlsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtODUsNyArODQsNyBAQAogc3RhdGljIHZvaWQga29iaWxfd3JpdGVfY2FsbGJhY2soc3RydWN0IHVyYiAqcHVyYik7CiBzdGF0aWMgdm9pZCBrb2JpbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwotCitzdGF0aWMgdm9pZCBrb2JpbF9pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCkgfSwKQEAgLTEyMCw2ICsxMTksNyBAQAogCS5yZWxlYXNlID0JCWtvYmlsX3JlbGVhc2UsCiAJLmlvY3RsID0JCWtvYmlsX2lvY3RsLAogCS5zZXRfdGVybWlvcyA9CQlrb2JpbF9zZXRfdGVybWlvcywKKwkuaW5pdF90ZXJtaW9zID0JCWtvYmlsX2luaXRfdGVybWlvcywKIAkudGlvY21nZXQgPQkJa29iaWxfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCWtvYmlsX3Rpb2Ntc2V0LAogCS5vcGVuID0JCQlrb2JpbF9vcGVuLApAQCAtMjEwLDkgKzIxMCwxNyBAQAogCQlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGtvYmlsX2luaXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIERlZmF1bHQgdG8gZWNobyBvZmYgYW5kIG90aGVyIHNhbmUgZGV2aWNlIHNldHRpbmdzICovCisJdHR5LT50ZXJtaW9zLT5jX2xmbGFnID0gMDsKKwl0dHktPnRlcm1pb3MtPmNfbGZsYWcgJj0gfihJU0lHIHwgSUNBTk9OIHwgRUNITyB8IElFWFRFTiB8IFhDQVNFKTsKKwl0dHktPnRlcm1pb3MtPmNfaWZsYWcgPSBJR05CUksgfCBJR05QQVIgfCBJWE9GRjsKKwkvKiBkbyBOT1QgdHJhbnNsYXRlIENSIHRvIENSLU5MICgweDBBIC0+IDB4MEEgMHgwRCkgKi8KKwl0dHktPnRlcm1pb3MtPmNfb2ZsYWcgJj0gfk9OTENSOworfQogCi1zdGF0aWMgaW50IGtvYmlsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBrb2JpbF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGtvYmlsX3ByaXZhdGUgKnByaXY7CkBAIC0yMjYsMTYgKzIzNCw2IEBACiAJLyogc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCAqLwogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCi0JaWYgKHR0eSkgewotCi0JCS8qIERlZmF1bHQgdG8gZWNobyBvZmYgYW5kIG90aGVyIHNhbmUgZGV2aWNlIHNldHRpbmdzICovCi0JCXR0eS0+dGVybWlvcy0+Y19sZmxhZyA9IDA7Ci0JCXR0eS0+dGVybWlvcy0+Y19sZmxhZyAmPSB+KElTSUcgfCBJQ0FOT04gfCBFQ0hPIHwgSUVYVEVOIHwKLQkJCQkJCQkJIFhDQVNFKTsKLQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnID0gSUdOQlJLIHwgSUdOUEFSIHwgSVhPRkY7Ci0JCS8qIGRvIE5PVCB0cmFuc2xhdGUgQ1IgdG8gQ1ItTkwgKDB4MEEgLT4gMHgwQSAweDBEKSAqLwotCQl0dHktPnRlcm1pb3MtPmNfb2ZsYWcgJj0gfk9OTENSOwotCX0KIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlciAqLwogCXRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cmFuc2Zlcl9idWZmZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCmluZGV4IGQ4ODI1ZTEuLmFkNDk5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCkBAIC05Myw4ICs5Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQgIG1jdF91MjMyX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBtY3RfdTIzMl9yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIG1jdF91MjMyX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgbWN0X3UyMzJfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pOwogc3RhdGljIHZvaWQgbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKQEAgLTQyMSw4ICs0MjAsNyBAQAogCX0KIH0gLyogbWN0X3UyMzJfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50ICBtY3RfdTIzMl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgIG1jdF91MjMyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtNTY4LDEwICs1NjYsMTMgQEAKIAkgKiBXb3JrLWEtcm91bmQ6IGhhbmRsZSB0aGUgJ3VzdWFsJyBidWxrLWluIHBpcGUgaGVyZQogCSAqLwogCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAyKSB7Ci0JCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJCWlmICh0dHkpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwKKwkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCmluZGV4IGNjZDRkZDMuLjc2M2UzMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwpAQCAtODUsNyArODUsNyBAQAogI2RlZmluZSBNT1NDSElQX0RFVklDRV9JRF83NzIwCQkweDc3MjAKICNkZWZpbmUgTU9TQ0hJUF9ERVZJQ0VfSURfNzcxNQkJMHg3NzE1CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtb3NjaGlwX3BvcnRfaWRfdGFibGUgW10gPSB7CitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9wb3J0X2lkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzcyMCkgfSwKIAl7IH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC0zMTksOCArMzE5LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IG1vczc3MjBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG1vczc3MjBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDA7CkBAIC0zNzgsMTAgKzM3NywxNCBAQAogCSAvKiBJbml0aWFsaXplIE1DUzc3MjAgLS0gV3JpdGUgSW5pdCB2YWx1ZXMgdG8gY29ycmVzcG9uZGluZyBSZWdpc3RlcnMKIAkgICoKIAkgICogUmVnaXN0ZXIgSW5kZXgKKwkgICogMCA6IFRIUi9SSFIKIAkgICogMSA6IElFUgogCSAgKiAyIDogRkNSCiAJICAqIDMgOiBMQ1IKIAkgICogNCA6IE1DUgorCSAgKiA1IDogTFNSCisJICAqIDYgOiBNU1IKKwkgICogNyA6IFNQUgogCSAgKgogCSAgKiAweDA4IDogU1AxLzIgQ29udHJvbCBSZWcKIAkgICovCkBAIC0xMjUwLDIwICsxMjUzLDg4IEBACiBzdGF0aWMgaW50IGdldF9sc3JfaW5mbyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQsIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQogewotCWludCBjb3VudDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBjaGFyIGRhdGEgPSAwOworCWludCBwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisJaW50IGNvdW50OwogCiAJY291bnQgPSBtb3M3NzIwX2NoYXJzX2luX2J1ZmZlcih0dHkpOwogCWlmIChjb3VudCA9PSAwKSB7Ci0JCWRiZygiJXMgLS0gRW1wdHkiLCBfX2Z1bmNfXyk7Ci0JCXJlc3VsdCA9IFRJT0NTRVJfVEVNVDsKKwkJc2VuZF9tb3NfY21kKHBvcnQtPnNlcmlhbCwgTU9TX1JFQUQsIHBvcnRfbnVtYmVyLAorCQkJCQkJCVVBUlRfTFNSLCAmZGF0YSk7CisJCWlmICgoZGF0YSAmIChVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkpCisJCQkJCT09IChVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkpIHsKKwkJCWRiZygiJXMgLS0gRW1wdHkiLCBfX2Z1bmNfXyk7CisJCQlyZXN1bHQgPSBUSU9DU0VSX1RFTVQ7CisJCX0KIAl9Ci0KIAlpZiAoY29weV90b191c2VyKHZhbHVlLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1vczc3MjBfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGludCBtY3IgOworCXVuc2lnbmVkIGludCBtc3IgOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCW1jciA9IG1vczc3MjBfcG9ydC0+c2hhZG93TUNSOworCW1zciA9IG1vczc3MjBfcG9ydC0+c2hhZG93TVNSOworCisJcmVzdWx0ID0gKChtY3IgJiBVQVJUX01DUl9EVFIpICA/IFRJT0NNX0RUUiA6IDApICAgLyogMHgwMDIgKi8KKwkgIHwgKChtY3IgJiBVQVJUX01DUl9SVFMpICAgPyBUSU9DTV9SVFMgOiAwKSAgIC8qIDB4MDA0ICovCisJICB8ICgobXNyICYgVUFSVF9NU1JfQ1RTKSAgID8gVElPQ01fQ1RTIDogMCkgICAvKiAweDAyMCAqLworCSAgfCAoKG1zciAmIFVBUlRfTVNSX0RDRCkgICA/IFRJT0NNX0NBUiA6IDApICAgLyogMHgwNDAgKi8KKwkgIHwgKChtc3IgJiBVQVJUX01TUl9SSSkgICAgPyBUSU9DTV9SSSA6ICAwKSAgIC8qIDB4MDgwICovCisJICB8ICgobXNyICYgVUFSVF9NU1JfRFNSKSAgID8gVElPQ01fRFNSIDogMCk7ICAvKiAweDEwMCAqLworCisJZGJnKCIlcyAtLSAleCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBtb3M3NzIwX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBtY3IgOworCXVuc2lnbmVkIGNoYXIgbG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJZGJnKCJoZSB3YXMgYXQgdGlvY21nZXQiKTsKKworCW1jciA9IG1vczc3MjBfcG9ydC0+c2hhZG93TUNSOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IFVBUlRfTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQltY3IgfD0gVUFSVF9NQ1JfRFRSOworCWlmIChzZXQgJiBUSU9DTV9MT09QKQorCQltY3IgfD0gVUFSVF9NQ1JfTE9PUDsKKworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJbWNyICY9IH5VQVJUX01DUl9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQltY3IgJj0gflVBUlRfTUNSX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9MT09QKQorCQltY3IgJj0gflVBUlRfTUNSX0xPT1A7CisKKwltb3M3NzIwX3BvcnQtPnNoYWRvd01DUiA9IG1jcjsKKwlsbWNyID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1I7CisKKwlzZW5kX21vc19jbWQocG9ydC0+c2VyaWFsLCBNT1NfV1JJVEUsCisJCXBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IsIFVBUlRfTUNSLCAmbG1jcik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZXRfbW9kZW1faW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQogewpAQCAtMTMwMSwxNCArMTM3Miw2IEBACiAJCQltY3IgJj0gflVBUlRfTUNSX0xPT1A7CiAJCWJyZWFrOwogCi0JY2FzZSBUSU9DTVNFVDoKLQkJLyogdHVybiBvZmYgdGhlIFJUUyBhbmQgRFRSIGFuZCBMT09QQkFDSwotCQkgKiBhbmQgdGhlbiBvbmx5IHR1cm4gb24gd2hhdCB3YXMgYXNrZWQgdG8gKi8KLQkJbWNyICY9ICB+KFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX0xPT1ApOwotCQltY3IgfD0gKChhcmcgJiBUSU9DTV9SVFMpID8gVUFSVF9NQ1JfUlRTIDogMCk7Ci0JCW1jciB8PSAoKGFyZyAmIFRJT0NNX0RUUikgPyBVQVJUX01DUl9EVFIgOiAwKTsKLQkJbWNyIHw9ICgoYXJnICYgVElPQ01fTE9PUCkgPyBVQVJUX01DUl9MT09QIDogMCk7Ci0JCWJyZWFrOwogCX0KIAogCW1vczc3MjBfcG9ydC0+c2hhZG93TUNSID0gbWNyOwpAQCAtMTMyMCwyOCArMTM4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21vZGVtX2luZm8oc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0LAotCQkJICB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKLQl1bnNpZ25lZCBpbnQgbXNyID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dNU1I7Ci0JdW5zaWduZWQgaW50IG1jciA9IG1vczc3MjBfcG9ydC0+c2hhZG93TUNSOwotCi0JcmVzdWx0ID0gKChtY3IgJiBVQVJUX01DUl9EVFIpCT8gVElPQ01fRFRSOiAwKQkgIC8qIDB4MDAyICovCi0JCSAgfCAoKG1jciAmIFVBUlRfTUNSX1JUUykJPyBUSU9DTV9SVFM6IDApICAgLyogMHgwMDQgKi8KLQkJICB8ICgobXNyICYgVUFSVF9NU1JfQ1RTKQk/IFRJT0NNX0NUUzogMCkgICAvKiAweDAyMCAqLwotCQkgIHwgKChtc3IgJiBVQVJUX01TUl9EQ0QpCT8gVElPQ01fQ0FSOiAwKSAgIC8qIDB4MDQwICovCi0JCSAgfCAoKG1zciAmIFVBUlRfTVNSX1JJKQk/IFRJT0NNX1JJOiAgMCkgICAvKiAweDA4MCAqLwotCQkgIHwgKChtc3IgJiBVQVJUX01TUl9EU1IpCT8gVElPQ01fRFNSOiAwKTsgIC8qIDB4MTAwICovCi0KLQotCWRiZygiJXMgLS0gJXgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQotCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc3MjBfcG9ydCwKIAkJCSAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKIHsKQEAgLTEzOTIsMTcgKzE0MzMsMTEgQEAKIAkvKiBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBtb2RlIG1ldGhvZHMgKi8KIAljYXNlIFRJT0NNQklTOgogCWNhc2UgVElPQ01CSUM6Ci0JY2FzZSBUSU9DTVNFVDoKIAkJZGJnKCIlcyAoJWQpIFRJT0NNU0VUL1RJT0NNQklDL1RJT0NNU0VUIiwKIAkJCQkJX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJCXJldHVybiBzZXRfbW9kZW1faW5mbyhtb3M3NzIwX3BvcnQsIGNtZCwKIAkJCQkgICAgICAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZyk7CiAKLQljYXNlIFRJT0NNR0VUOgotCQlkYmcoIiVzICglZCkgVElPQ01HRVQiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7Ci0JCXJldHVybiBnZXRfbW9kZW1faW5mbyhtb3M3NzIwX3BvcnQsCi0JCQkJICAgICAgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpOwotCiAJY2FzZSBUSU9DR1NFUklBTDoKIAkJZGJnKCIlcyAoJWQpIFRJT0NHU0VSSUFMIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOwogCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKG1vczc3MjBfcG9ydCwKQEAgLTE1NTcsNiArMTU5Miw4IEBACiAJLmF0dGFjaAkJCT0gbW9zNzcyMF9zdGFydHVwLAogCS5yZWxlYXNlCQk9IG1vczc3MjBfcmVsZWFzZSwKIAkuaW9jdGwJCQk9IG1vczc3MjBfaW9jdGwsCisJLnRpb2NtZ2V0CQk9IG1vczc3MjBfdGlvY21nZXQsCisJLnRpb2Ntc2V0CQk9IG1vczc3MjBfdGlvY21zZXQsCiAJLnNldF90ZXJtaW9zCQk9IG1vczc3MjBfc2V0X3Rlcm1pb3MsCiAJLndyaXRlCQkJPSBtb3M3NzIwX3dyaXRlLAogCS53cml0ZV9yb29tCQk9IG1vczc3MjBfd3JpdGVfcm9vbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCmluZGV4IDI3MDAwOWEuLmYxMWFiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpAQCAtODI0LDggKzgyNCw3IEBACiAgKglPdGhlcndpc2Ugd2UgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IG1vczc4NDBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG1vczc4NDBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCWludCByZXNwb25zZTsKIAlpbnQgajsKQEAgLTIxMzQsMTA2ICsyMTMzLDYgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBtb3M3ODQwX3NldF9tb2RlbV9pbmZvCi0gKiAgICAgIGZ1bmN0aW9uIHRvIHNldCBtb2RlbSBpbmZvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEZJWE1FOiBTaG91bGQgYmUgdXNpbmcgdGhlIG1vZGVsIGNvbnRyb2wgaG9va3MgKi8KLQotc3RhdGljIGludCBtb3M3ODQwX3NldF9tb2RlbV9pbmZvKHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQotewotCXVuc2lnbmVkIGludCBtY3I7Ci0JdW5zaWduZWQgaW50IGFyZzsKLQlfX3UxNiBEYXRhOwotCWludCBzdGF0dXM7Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKLQotCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopbW9zNzg0MF9wb3J0LT5wb3J0OwotCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19mdW5jX18pKSB7Ci0JCWRiZygiJXMiLCAiSW52YWxpZCBwb3J0Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQltY3IgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd01DUjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYXJnLCB2YWx1ZSwgc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUSU9DTUJJUzoKLQkJaWYgKGFyZyAmIFRJT0NNX1JUUykKLQkJCW1jciB8PSBNQ1JfUlRTOwotCQlpZiAoYXJnICYgVElPQ01fRFRSKQotCQkJbWNyIHw9IE1DUl9SVFM7Ci0JCWlmIChhcmcgJiBUSU9DTV9MT09QKQotCQkJbWNyIHw9IE1DUl9MT09QQkFDSzsKLQkJYnJlYWs7Ci0KLQljYXNlIFRJT0NNQklDOgotCQlpZiAoYXJnICYgVElPQ01fUlRTKQotCQkJbWNyICY9IH5NQ1JfUlRTOwotCQlpZiAoYXJnICYgVElPQ01fRFRSKQotCQkJbWNyICY9IH5NQ1JfUlRTOwotCQlpZiAoYXJnICYgVElPQ01fTE9PUCkKLQkJCW1jciAmPSB+TUNSX0xPT1BCQUNLOwotCQlicmVhazsKLQotCWNhc2UgVElPQ01TRVQ6Ci0JCS8qIHR1cm4gb2ZmIHRoZSBSVFMgYW5kIERUUiBhbmQgTE9PUEJBQ0sKLQkJICogYW5kIHRoZW4gb25seSB0dXJuIG9uIHdoYXQgd2FzIGFza2VkIHRvICovCi0JCW1jciAmPSB+KE1DUl9SVFMgfCBNQ1JfRFRSIHwgTUNSX0xPT1BCQUNLKTsKLQkJbWNyIHw9ICgoYXJnICYgVElPQ01fUlRTKSA/IE1DUl9SVFMgOiAwKTsKLQkJbWNyIHw9ICgoYXJnICYgVElPQ01fRFRSKSA/IE1DUl9EVFIgOiAwKTsKLQkJbWNyIHw9ICgoYXJnICYgVElPQ01fTE9PUCkgPyBNQ1JfTE9PUEJBQ0sgOiAwKTsKLQkJYnJlYWs7Ci0JfQotCi0JbG9ja19rZXJuZWwoKTsKLQltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiA9IG1jcjsKLQotCURhdGEgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd01DUjsKLQlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJZGJnKCJzZXR0aW5nIE1PREVNX0NPTlRST0xfUkVHSVNURVIgRmFpbGVkIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBtb3M3ODQwX2dldF9tb2RlbV9pbmZvCi0gKiAgICAgIGZ1bmN0aW9uIHRvIGdldCBtb2RlbSBpbmZvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgbW9zNzg0MF9nZXRfbW9kZW1faW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCi0JCQkJICB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKLQlfX3UxNiBtc3I7Ci0JdW5zaWduZWQgaW50IG1jciA9IG1vczc4NDBfcG9ydC0+c2hhZG93TUNSOwotICAgICAgICBtb3M3ODQwX2dldF91YXJ0X3JlZyhtb3M3ODQwX3BvcnQtPnBvcnQsCi0JCQkJCQlNT0RFTV9TVEFUVVNfUkVHSVNURVIsICZtc3IpOwotCXJlc3VsdCA9ICgobWNyICYgTUNSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQkvKiAweDAwMiAqLwotCSAgICB8KChtY3IgJiBNQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCS8qIDB4MDA0ICovCi0JICAgIHwoKG1zciAmIE1PUzc4NDBfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKQkvKiAweDAyMCAqLwotCSAgICB8KChtc3IgJiBNT1M3ODQwX01TUl9DRCkgPyBUSU9DTV9DQVIgOiAwKQkvKiAweDA0MCAqLwotCSAgICB8KChtc3IgJiBNT1M3ODQwX01TUl9SSSkgPyBUSU9DTV9SSSA6IDApCS8qIDB4MDgwICovCi0JICAgIHwoKG1zciAmIE1PUzc4NDBfTVNSX0RTUikgPyBUSU9DTV9EU1IgOiAwKTsJLyogMHgxMDAgKi8KLQotCWRiZygiJXMgLS0gJXgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQotCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogbW9zNzg0MF9nZXRfc2VyaWFsX2luZm8KICAqICAgICAgZnVuY3Rpb24gdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHNlcmlhbCBwb3J0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjgxLDcgKzIxODAsNiBAQAogCXN0cnVjdCBhc3luY19pY291bnQgY25vdzsKIAlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNwcmV2OwogCXN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0IGljb3VudDsKLQlpbnQgbW9zcmV0ID0gMDsKIAogCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19mdW5jX18pKSB7CiAJCWRiZygiJXMiLCAiSW52YWxpZCBwb3J0Iik7CkBAIC0yMzAzLDIwICsyMjAxLDYgQEAKIAkJcmV0dXJuIG1vczc4NDBfZ2V0X2xzcl9pbmZvKHR0eSwgYXJncCk7CiAJCXJldHVybiAwOwogCi0JLyogRklYTUU6IHVzZSB0aGUgbW9kZW0gaG9va3MgYW5kIHJlbW92ZSB0aGlzICovCi0JY2FzZSBUSU9DTUJJUzoKLQljYXNlIFRJT0NNQklDOgotCWNhc2UgVElPQ01TRVQ6Ci0JCWRiZygiJXMgKCVkKSBUSU9DTVNFVC9USU9DTUJJQy9USU9DTVNFVCIsIF9fZnVuY19fLAotCQkgICAgcG9ydC0+bnVtYmVyKTsKLQkJbW9zcmV0ID0KLQkJICAgIG1vczc4NDBfc2V0X21vZGVtX2luZm8obW9zNzg0MF9wb3J0LCBjbWQsIGFyZ3ApOwotCQlyZXR1cm4gbW9zcmV0OwotCi0JY2FzZSBUSU9DTUdFVDoKLQkJZGJnKCIlcyAoJWQpIFRJT0NNR0VUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCXJldHVybiBtb3M3ODQwX2dldF9tb2RlbV9pbmZvKG1vczc4NDBfcG9ydCwgYXJncCk7Ci0KIAljYXNlIFRJT0NHU0VSSUFMOgogCQlkYmcoIiVzICglZCkgVElPQ0dTRVJJQUwiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAkJcmV0dXJuIG1vczc4NDBfZ2V0X3NlcmlhbF9pbmZvKG1vczc4NDBfcG9ydCwgYXJncCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwppbmRleCBiNjZiNzFjLi45OWJkMDBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCkBAIC04LDcgKzgsNyBAQAogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIHtzaWdofQotICogTW9yb3JvbGEgc2hvdWxkIGJlIHVzaW5nIHRoZSBDREMgQUNNIFVTQiBzcGVjLCBidXQgaW5zdGVhZAorICogTW90b3JvbGEgc2hvdWxkIGJlIHVzaW5nIHRoZSBDREMgQUNNIFVTQiBzcGVjLCBidXQgaW5zdGVhZAogICogdGhleSB0cnkgdG8ganVzdCAiZG8gdGhlaXIgb3duIHRoaW5nIi4uLiAgVGhpcyBkcml2ZXIgc2hvdWxkIGhhbmRsZSBhCiAgKiBmZXcgcGhvbmVzIGluIHdoaWNoIGEgYmFzaWMgImR1bWIgc2VyaWFsIGNvbm5lY3Rpb24iIGlzIG5lZWRlZCB0byBiZQogICogYWJsZSB0byBnZXQgYSBjb25uZWN0aW9uIHRocm91Z2ggdG8gdGhlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYwppbmRleCBmNWYzNzUxYTguLjVjZWFhNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMKQEAgLTgwLDggKzgwLDcgQEAKIAkJCV9fZnVuY19fLCByZXN1bHQpOwogfQogCi1zdGF0aWMgaW50IG5hdm1hbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgbmF2bWFuX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKaW5kZXggNTY4NTdkZC4uMDYyMjY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCkBAIC02NCw4ICs2NCw3IEBACiAjZGVmaW5lIEJUX0lHTklUSU9OUFJPX0lECTB4MjAwMAogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50ICBvbW5pbmV0X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBvbW5pbmV0X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBvbW5pbmV0X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIG9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwpAQCAtMTYzLDggKzE2Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb21uaW5ldF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgb21uaW5ldF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSp3cG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCmluZGV4IDMzNmJiYTcuLjEwODVhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwpAQCAtMTQ0LDggKzE0NCw3IEBACiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogfQogCi1zdGF0aWMgaW50IG9wdGljb25fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG9wdGljb25fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBjNzg0ZGRiLi5mNjZlMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC00NSw4ICs0NSw3IEBACiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgaW50ICBvcHRpb25fcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50ICBvcHRpb25fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIG9wdGlvbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgb3B0aW9uX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgb3B0aW9uX2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IG9uKTsKIApAQCAtMjkyLDYgKzI5MSw3IEBACiAKICNkZWZpbmUgVEVMSVRfVkVORE9SX0lECQkJCTB4MWJjNwogI2RlZmluZSBURUxJVF9QUk9EVUNUX1VDODY0RQkJCTB4MTAwMworI2RlZmluZSBURUxJVF9QUk9EVUNUX1VDODY0RwkJCTB4MTAwNAogCiAvKiBaVEUgUFJPRFVDVFMgKi8KICNkZWZpbmUgWlRFX1ZFTkRPUl9JRAkJCQkweDE5ZDIKQEAgLTMwMCw2ICszMDAsNyBAQAogI2RlZmluZSBaVEVfUFJPRFVDVF9NRjYyNgkJCTB4MDAzMQogI2RlZmluZSBaVEVfUFJPRFVDVF9DRE1BX1RFQ0gJCQkweGZmZmUKICNkZWZpbmUgWlRFX1BST0RVQ1RfQUM4NzEwCQkJMHhmZmYxCisjZGVmaW5lIFpURV9QUk9EVUNUX0FDMjcyNgkJCTB4ZmZmNQogCiAjZGVmaW5lIEJFTlFfVkVORE9SX0lECQkJCTB4MDRhNQogI2RlZmluZSBCRU5RX1BST0RVQ1RfSDEwCQkJMHg0MDY4CkBAIC01MDMsNiArNTA0LDcgQEAKIAl7IFVTQl9ERVZJQ0UoUVVBTENPTU1fVkVORE9SX0lELCAweDY2MTMpfSwgLyogT25kYSBINjAwL1pURSBNRjMzMCAqLwogCXsgVVNCX0RFVklDRShNQVhPTl9WRU5ET1JfSUQsIDB4NjI4MCkgfSwgLyogQlAzLVVTQiAmIEJQMy1FWFQgSFNEUEEgKi8KIAl7IFVTQl9ERVZJQ0UoVEVMSVRfVkVORE9SX0lELCBURUxJVF9QUk9EVUNUX1VDODY0RSkgfSwKKwl7IFVTQl9ERVZJQ0UoVEVMSVRfVkVORE9SX0lELCBURUxJVF9QUk9EVUNUX1VDODY0RykgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX01GNjIyLCAweGZmLCAweGZmLCAweGZmKSB9LCAvKiBaVEUgV0NETUEgcHJvZHVjdHMgKi8KIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MDAwMiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MDAwMywgMHhmZiwgMHhmZiwgMHhmZikgfSwKQEAgLTU3Miw2ICs1NzQsNyBAQAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgMHgwMDczLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQ0RNQV9URUNILCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQUM4NzEwLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQUMyNzI2LCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRShCRU5RX1ZFTkRPUl9JRCwgQkVOUV9QUk9EVUNUX0gxMCkgfSwKIAl7IFVTQl9ERVZJQ0UoRExJTktfVkVORE9SX0lELCBETElOS19QUk9EVUNUX0RXTV82NTIpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjFfNDUxMikgfSwKQEAgLTU5Myw2ICs1OTYsNyBAQAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kICAgID0gdXNiX3NlcmlhbF9zdXNwZW5kLAogCS5yZXN1bWUgICAgID0gdXNiX3NlcmlhbF9yZXN1bWUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0JMSwKICNlbmRpZgogCS5pZF90YWJsZSAgID0gb3B0aW9uX2lkcywKIAkubm9fZHluYW1pY19pZCA9IAkxLApAQCAtNjQwLDYgKzY0NCwxMiBAQAogI2RlZmluZSBJTl9CVUZMRU4gNDA5NgogI2RlZmluZSBPVVRfQlVGTEVOIDQwOTYKIAorc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgeworCXNwaW5sb2NrX3Qgc3VzcF9sb2NrOworCXVuc2lnbmVkIGludCBzdXNwZW5kZWQ6MTsKKwlpbnQgaW5fZmxpZ2h0OworfTsKKwogc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgewogCS8qIElucHV0IGVuZHBvaW50cyBhbmQgYnVmZmVyIGZvciB0aGlzIHBvcnQgKi8KIAlzdHJ1Y3QgdXJiICppbl91cmJzW05fSU5fVVJCXTsKQEAgLTY0OCw2ICs2NTgsOCBAQAogCXN0cnVjdCB1cmIgKm91dF91cmJzW05fT1VUX1VSQl07CiAJdTggKm91dF9idWZmZXJbTl9PVVRfVVJCXTsKIAl1bnNpZ25lZCBsb25nIG91dF9idXN5OwkJLyogQml0IHZlY3RvciBvZiBVUkJzIGluIHVzZSAqLworCWludCBvcGVuZWQ7CisJc3RydWN0IHVzYl9hbmNob3IgZGVsYXllZDsKIAogCS8qIFNldHRpbmdzIGZvciB0aGUgcG9ydCAqLwogCWludCBydHNfc3RhdGU7CS8qIEhhbmRzaGFraW5nIHBpbnMgKG91dHB1dHMpICovCkBAIC02OTQsMTIgKzcwNiwxNyBAQAogc3RhdGljIGludCBvcHRpb25fcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3Qgb3B0aW9uX2ludGZfcHJpdmF0ZSAqZGF0YTsKIAkvKiBELUxpbmsgRFdNIDY1MiBzdGlsbCBleHBvc2VzIENELVJvbSBlbXVsYXRpb24gaW50ZXJmYWNlIGluIG1vZGVtIG1vZGUgKi8KIAlpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IgPT0gRExJTktfVkVORE9SX0lEICYmCiAJCXNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBETElOS19QUk9EVUNUX0RXTV82NTIgJiYKIAkJc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSAweDgpCiAJCXJldHVybiAtRU5PREVWOwogCisJZGF0YSA9IHNlcmlhbC0+cHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmZGF0YS0+c3VzcF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU2LDEyICs3NzMsMTUgQEAKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKwlzdHJ1Y3Qgb3B0aW9uX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CiAJaW50IGk7CiAJaW50IGxlZnQsIHRvZG87CiAJc3RydWN0IHVyYiAqdGhpc191cmIgPSBOVUxMOyAvKiBzcHVyaW91cyAqLwogCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludGZkYXRhID0gcG9ydC0+c2VyaWFsLT5wcml2YXRlOwogCiAJZGJnKCIlczogd3JpdGUgKCVkIGNoYXJzKSIsIF9fZnVuY19fLCBjb3VudCk7CiAKQEAgLTc4MywxNyArODAzLDMzIEBACiAJCWRiZygiJXM6IGVuZHBvaW50ICVkIGJ1ZiAlZCIsIF9fZnVuY19fLAogCQkJdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSksIGkpOwogCisJCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyhwb3J0LT5zZXJpYWwtPmludGVyZmFjZSk7CisJCWlmIChlcnIgPCAwKQorCQkJYnJlYWs7CisKIAkJLyogc2VuZCB0aGUgZGF0YSAqLwogCQltZW1jcHkodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCB0b2RvKTsKIAkJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB0b2RvOwogCi0JCWVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVycikgewotCQkJZGJnKCJ1c2Jfc3VibWl0X3VyYiAlcCAod3JpdGUgYnVsaykgZmFpbGVkICIKLQkJCQkiKCVkKSIsIHRoaXNfdXJiLCBlcnIpOwotCQkJY2xlYXJfYml0KGksICZwb3J0ZGF0YS0+b3V0X2J1c3kpOwotCQkJY29udGludWU7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmZGF0YS0+c3VzcF9sb2NrLCBmbGFncyk7CisJCWlmIChpbnRmZGF0YS0+c3VzcGVuZGVkKSB7CisJCQl1c2JfYW5jaG9yX3VyYih0aGlzX3VyYiwgJnBvcnRkYXRhLT5kZWxheWVkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCWludGZkYXRhLT5pbl9mbGlnaHQrKzsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKKwkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlkYmcoInVzYl9zdWJtaXRfdXJiICVwICh3cml0ZSBidWxrKSBmYWlsZWQgIgorCQkJCQkiKCVkKSIsIHRoaXNfdXJiLCBlcnIpOworCQkJCWNsZWFyX2JpdChpLCAmcG9ydGRhdGEtPm91dF9idXN5KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW50ZmRhdGEtPnN1c3BfbG9jaywgZmxhZ3MpOworCQkJCWludGZkYXRhLT5pbl9mbGlnaHQtLTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmZGF0YS0+c3VzcF9sb2NrLCBmbGFncyk7CisJCQkJY29udGludWU7CisJCQl9CiAJCX0KKwogCQlwb3J0ZGF0YS0+dHhfc3RhcnRfdGltZVtpXSA9IGppZmZpZXM7CiAJCWJ1ZiArPSB0b2RvOwogCQlsZWZ0IC09IHRvZG87CkBAIC04MzcsNyArODczLDEwIEBACiAJCQlpZiAoZXJyKQogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gIgogCQkJCQkiKCVkKSIsIF9fZnVuY19fLCBlcnIpOworCQkJZWxzZQorCQkJCXVzYl9tYXJrX2xhc3RfYnVzeShwb3J0LT5zZXJpYWwtPmRldik7CiAJCX0KKwogCX0KIAlyZXR1cm47CiB9CkBAIC04NDYsMTUgKzg4NSwyMSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCXN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlICppbnRmZGF0YTsKIAlpbnQgaTsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlwb3J0ID0gIHVyYi0+Y29udGV4dDsKKwlpbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKIAogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwotCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKTsKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzcGluX2xvY2soJmludGZkYXRhLT5zdXNwX2xvY2spOworCWludGZkYXRhLT5pbl9mbGlnaHQtLTsKKwlzcGluX3VubG9jaygmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisKIAlmb3IgKGkgPSAwOyBpIDwgTl9PVVRfVVJCOyArK2kpIHsKIAkJaWYgKHBvcnRkYXRhLT5vdXRfdXJic1tpXSA9PSB1cmIpIHsKIAkJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwpAQCAtOTYxLDE0ICsxMDA2LDE2IEBACiAJcmV0dXJuIGRhdGFfbGVuOwogfQogCi1zdGF0aWMgaW50IG9wdGlvbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgb3B0aW9uX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisJc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IGksIGVycjsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnRmZGF0YSA9IHNlcmlhbC0+cHJpdmF0ZTsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKQEAgLTk4Nyw2ICsxMDM0LDEyIEBACiAKIAlvcHRpb25fc2VuZF9zZXR1cChwb3J0KTsKIAorCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKKwlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwlwb3J0ZGF0YS0+b3BlbmVkID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAxMSwxNiArMTA2NCwyMyBAQAogCWludCBpOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCXN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlICppbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlpZiAoc2VyaWFsLT5kZXYpIHsKIAkJLyogU3RvcCByZWFkaW5nL3dyaXRpbmcgdXJicyAqLworCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwkJcG9ydGRhdGEtPm9wZW5lZCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisKIAkJZm9yIChpID0gMDsgaSA8IE5fSU5fVVJCOyBpKyspCiAJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbaV0pOwogCQlmb3IgKGkgPSAwOyBpIDwgTl9PVVRfVVJCOyBpKyspCiAJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPm91dF91cmJzW2ldKTsKKwkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCX0KIH0KIApAQCAtMTEyNSw2ICsxMTg1LDcgQEAKIAkJCQkJX19mdW5jX18sIGkpOwogCQkJcmV0dXJuIDE7CiAJCX0KKwkJaW5pdF91c2JfYW5jaG9yKCZwb3J0ZGF0YS0+ZGVsYXllZCk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspIHsKIAkJCWJ1ZmZlciA9ICh1OCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKQEAgLTEyMjcsMTggKzEyODgsNTIgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgb3B0aW9uX3N1c3BlbmQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CisJc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOworCWludCBiOworCiAJZGJnKCIlcyBlbnRlcmVkIiwgX19mdW5jX18pOworCisJaWYgKHNlcmlhbC0+ZGV2LT5hdXRvX3BtKSB7CisJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCQliID0gaW50ZmRhdGEtPmluX2ZsaWdodDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKworCQlpZiAoYikKKwkJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJaW50ZmRhdGEtPnN1c3BlbmRlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAlzdG9wX3JlYWRfd3JpdGVfdXJicyhzZXJpYWwpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBsYXlfZGVsYXllZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlICpkYXRhOworCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVycjsKKworCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRhdGEgPSBwb3J0LT5zZXJpYWwtPnByaXZhdGU7CisJd2hpbGUgKCh1cmIgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZwb3J0ZGF0YS0+ZGVsYXllZCkpKSB7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmICghZXJyKQorCQkJZGF0YS0+aW5fZmxpZ2h0Kys7CisJfQorfQorCiBzdGF0aWMgaW50IG9wdGlvbl9yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlpbnQgZXJyLCBpLCBqOworCWludCBpLCBqOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlICppbnRmZGF0YSA9IHNlcmlhbC0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcnIgPSAwOwogCiAJZGJnKCIlcyBlbnRlcmVkIiwgX19mdW5jX18pOwogCS8qIGdldCB0aGUgaW50ZXJydXB0IFVSQnMgcmVzdWJtaXR0ZWQgdW5jb25kaXRpb25hbGx5ICovCkBAIC0xMjUzLDcgKzEzNDgsNyBAQAogCQlpZiAoZXJyIDwgMCkgewogCQkJZXJyKCIlczogRXJyb3IgJWQgZm9yIGludGVycnVwdCBVUkIgb2YgcG9ydCVkIiwKIAkJCQkgX19mdW5jX18sIGVyciwgaSk7Ci0JCQlyZXR1cm4gZXJyOworCQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQogCkBAIC0xMjYxLDI3ICsxMzU2LDMyIEBACiAJCS8qIHdhbGsgYWxsIHBvcnRzICovCiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCQltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CiAKIAkJLyogc2tpcCBjbG9zZWQgcG9ydHMgKi8KLQkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJc3Bpbl9sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJCWlmICghcG9ydGRhdGEtPm9wZW5lZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspIHsKIAkJCXVyYiA9IHBvcnRkYXRhLT5pbl91cmJzW2pdOwotCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfTk9JTyk7CisJCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQkJaWYgKGVyciA8IDApIHsKLQkJCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAkJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgYnVsayBVUkIgJWQiLAogCQkJCQkgX19mdW5jX18sIGVyciwgaSk7Ci0JCQkJcmV0dXJuIGVycjsKKwkJCQlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCQkJCWdvdG8gZXJyX291dDsKIAkJCX0KIAkJfQotCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJcGxheV9kZWxheWVkKHBvcnQpOworCQlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCX0KLQlyZXR1cm4gMDsKKwlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwlpbnRmZGF0YS0+c3VzcGVuZGVkID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworZXJyX291dDoKKwlyZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCmluZGV4IDNjZWNlMjcuLjBmNGE3MGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKQEAgLTE0MSwxMSArMTQxLDExIEBACiAJICAmJiAoKGEpLT5mcmFtZV9mbXQgPT0gKHByaXYpLT5wZW5kaW5nX3NldHVwLmZyYW1lX2ZtdCkpCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgb3RpNjg1OF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50IG90aTY4NThfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIG90aTY4NThfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBvdGk2ODU4X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CitzdGF0aWMgdm9pZCBvdGk2ODU4X2luaXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyBpbnQgb3RpNjg1OF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIG90aTY4NThfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKQEAgLTE4Niw2ICsxODYsNyBAQAogCS53cml0ZSA9CQlvdGk2ODU4X3dyaXRlLAogCS5pb2N0bCA9CQlvdGk2ODU4X2lvY3RsLAogCS5zZXRfdGVybWlvcyA9CQlvdGk2ODU4X3NldF90ZXJtaW9zLAorCS5pbml0X3Rlcm1pb3MgPSAJb3RpNjg1OF9pbml0X3Rlcm1pb3MsCiAJLnRpb2NtZ2V0ID0JCW90aTY4NThfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCW90aTY4NThfdGlvY21zZXQsCiAJLnJlYWRfYnVsa19jYWxsYmFjayA9CW90aTY4NThfcmVhZF9idWxrX2NhbGxiYWNrLApAQCAtMjA2LDcgKzIwNyw2IEBACiAJc3RydWN0IHsKIAkJdTggcmVhZF91cmJfaW5fdXNlOwogCQl1OCB3cml0ZV91cmJfaW5fdXNlOwotCQl1OCB0ZXJtaW9zX2luaXRpYWxpemVkOwogCX0gZmxhZ3M7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBkZWxheWVkX3dyaXRlX3dvcms7CiAKQEAgLTQ0Nyw2ICs0NDcsMTQgQEAKIAlyZXR1cm4gY2hhcnM7CiB9CiAKK3N0YXRpYyB2b2lkIG90aTY4NThfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEIzODQwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdHR5LT50ZXJtaW9zLT5jX2lzcGVlZCA9IDM4NDAwOworCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSAzODQwMDsKK30KKwogc3RhdGljIHZvaWQgb3RpNjg1OF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewpAQCAtNDY0LDE2ICs0NzIsNiBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXByaXYtPmZsYWdzLnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKLQkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOwotCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCMzg0MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gMzg0MDA7Ci0JCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSAzODQwMDsKLQkJcHJpdi0+ZmxhZ3MudGVybWlvc19pbml0aWFsaXplZCA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTU2Niw4ICs1NjQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBvdGk2ODU4X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBvdGk2ODU4X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qgb3RpNjg1OF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBrdGVybWlvcyB0bXBfdGVybWlvczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCAzZTg2ODE1Li4xMTI4ZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC05Niw2ICs5Niw3IEBACiAJeyBVU0JfREVWSUNFKEhQX1ZFTkRPUl9JRCwgSFBfTEQyMjBfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ1JFU1NJX1ZFTkRPUl9JRCwgQ1JFU1NJX0VEWV9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9RTjNVU0JfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0FOV0FfVkVORE9SX0lELCBTQU5XQV9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTUyNyw2ICs1MjgsMTIgQEAKIAlpbnQgYmF1ZDsKIAlpbnQgaTsKIAl1OCBjb250cm9sOworCWNvbnN0IGludCBiYXVkX3N1cFtdID0geyA3NSwgMTUwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgMzYwMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgNDgwMCwgNzIwMCwgOTYwMCwgMTQ0MDAsIDE5MjAwLCAyODgwMCwgMzg0MDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA2MTQ0MDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgIDkyMTYwMCwgMTIyODgwMCwgMjQ1NzYwMCwgMzAwMDAwMCwgNjAwMDAwMCB9OworCWludCBiYXVkX2Zsb29yLCBiYXVkX2NlaWw7CisJaW50IGs7CiAKIAlkYmcoIiVzIC0gIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtNTcyLDkgKzU3OSwzOSBAQAogCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gJWQiLCBfX2Z1bmNfXywgYnVmWzZdKTsKIAl9CiAKKwkvKiBGb3IgcmVmZXJlbmNlIGJ1ZlswXTpidWZbM10gYmF1ZCByYXRlIHZhbHVlICovCisJLyogTk9URTogT25seSB0aGUgdmFsdWVzIGRlZmluZWQgaW4gYmF1ZF9zdXAgYXJlIHN1cHBvcnRlZCAhCisJICogICAgICAgPT4gaWYgdW5zdXBwb3J0ZWQgdmFsdWVzIGFyZSBzZXQsIHRoZSBQTDIzMDMgc2VlbXMgdG8gdXNlCisJICogICAgICAgICAgOTYwMCBiYXVkIChhdCBsZWFzdCBteSBQTDIzMDNYIGFsd2F5cyBkb2VzKQorCSAqLwogCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwotCWRiZygiJXMgLSBiYXVkID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CisJZGJnKCIlcyAtIGJhdWQgcmVxdWVzdGVkID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CiAJaWYgKGJhdWQpIHsKKwkJLyogU2V0IGJhdWRyYXRlIHRvIG5lYXJlc3Qgc3VwcG9ydGVkIHZhbHVlICovCisJCWZvciAoaz0wOyBrPEFSUkFZX1NJWkUoYmF1ZF9zdXApOyBrKyspIHsKKwkJCWlmIChiYXVkX3N1cFtrXSAvIGJhdWQpIHsKKwkJCQliYXVkX2NlaWwgPSBiYXVkX3N1cFtrXTsKKwkJCQlpZiAoaz09MCkgeworCQkJCQliYXVkID0gYmF1ZF9jZWlsOworCQkJCX0gZWxzZSB7CisJCQkJCWJhdWRfZmxvb3IgPSBiYXVkX3N1cFtrLTFdOworCQkJCQlpZiAoKGJhdWRfY2VpbCAlIGJhdWQpCisJCQkJCSAgICA+IChiYXVkICUgYmF1ZF9mbG9vcikpCisJCQkJCQliYXVkID0gYmF1ZF9mbG9vcjsKKwkJCQkJZWxzZQorCQkJCQkJYmF1ZCA9IGJhdWRfY2VpbDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGJhdWQgPiAxMjI4ODAwKSB7CisJCQkvKiB0eXBlXzAsIHR5cGVfMSBvbmx5IHN1cHBvcnQgdXAgdG8gMTIyODgwMCBiYXVkICovCisJCQlpZiAocHJpdi0+dHlwZSAhPSBIWCkKKwkJCQliYXVkID0gMTIyODgwMDsKKwkJCWVsc2UgaWYgKGJhdWQgPiA2MDAwMDAwKQorCQkJCWJhdWQgPSA2MDAwMDAwOworCQl9CisJCWRiZygiJXMgLSBiYXVkIHNldCA9ICVkIiwgX19mdW5jX18sIGJhdWQpOwogCQlidWZbMF0gPSBiYXVkICYgMHhmZjsKIAkJYnVmWzFdID0gKGJhdWQgPj4gOCkgJiAweGZmOwogCQlidWZbMl0gPSAoYmF1ZCA+PiAxNikgJiAweGZmOwpAQCAtNTg1LDggKzYyMiwxNiBAQAogCS8qIEZvciByZWZlcmVuY2UgYnVmWzRdPTEgaXMgMS41IHN0b3AgYml0cyAqLwogCS8qIEZvciByZWZlcmVuY2UgYnVmWzRdPTIgaXMgMiBzdG9wIGJpdHMgKi8KIAlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKLQkJYnVmWzRdID0gMjsKLQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX2Z1bmNfXyk7CisJCS8qIE5PVEU6IENvbXBseSB3aXRoICJyZWFsIiBVQVJUcyAvIFJTMjMyOgorCQkgKiAgICAgICB1c2UgMS41IGluc3RlYWQgb2YgMiBzdG9wIGJpdHMgd2l0aCA1IGRhdGEgYml0cworCQkgKi8KKwkJaWYgKChjZmxhZyAmIENTSVpFKSA9PSBDUzUpIHsKKwkJCWJ1Zls0XSA9IDE7CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMS41IiwgX19mdW5jX18pOworCQl9IGVsc2UgeworCQkJYnVmWzRdID0gMjsKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19mdW5jX18pOworCQl9CiAJfSBlbHNlIHsKIAkJYnVmWzRdID0gMDsKIAkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX2Z1bmNfXyk7CkBAIC01OTksMTEgKzY0NCwyMSBAQAogCQkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls1XT0zIGlzIG1hcmsgcGFyaXR5ICovCiAJCS8qIEZvciByZWZlcmVuY2UgYnVmWzVdPTQgaXMgc3BhY2UgcGFyaXR5ICovCiAJCWlmIChjZmxhZyAmIFBBUk9ERCkgewotCQkJYnVmWzVdID0gMTsKLQkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX2Z1bmNfXyk7CisJCQlpZiAoY2ZsYWcgJiBDTVNQQVIpIHsKKwkJCQlidWZbNV0gPSAzOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBtYXJrIiwgX19mdW5jX18pOworCQkJfSBlbHNlIHsKKwkJCQlidWZbNV0gPSAxOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX2Z1bmNfXyk7CisJCQl9CiAJCX0gZWxzZSB7Ci0JCQlidWZbNV0gPSAyOwotCQkJZGJnKCIlcyAtIHBhcml0eSA9IGV2ZW4iLCBfX2Z1bmNfXyk7CisJCQlpZiAoY2ZsYWcgJiBDTVNQQVIpIHsKKwkJCQlidWZbNV0gPSA0OworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBzcGFjZSIsIF9fZnVuY19fKTsKKwkJCX0gZWxzZSB7CisJCQkJYnVmWzVdID0gMjsKKwkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gZXZlbiIsIF9fZnVuY19fKTsKKwkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCWJ1Zls1XSA9IDA7CkBAIC02NDcsNyArNzAyLDcgQEAKIAkJcGwyMzAzX3ZlbmRvcl93cml0ZSgweDAsIDB4MCwgc2VyaWFsKTsKIAl9CiAKLQkvKiBGSVhNRTogTmVlZCB0byByZWFkIGJhY2sgcmVzdWx0aW5nIGJhdWQgcmF0ZSAqLworCS8qIFNhdmUgcmVzdWx0aW5nIGJhdWQgcmF0ZSAqLwogCWlmIChiYXVkKQogCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwogCkBAIC02OTEsOCArNzQ2LDcgQEAKIAogfQogCi1zdGF0aWMgaW50IHBsMjMwM19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgcGwyMzAzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTcxNCw4ICs3NjgsNiBAQAogCWlmICh0dHkpCiAJCXBsMjMwM19zZXRfdGVybWlvcyh0dHksIHBvcnQsICZ0bXBfdGVybWlvcyk7CiAKLQkvKiBGSVhNRTogbmVlZCB0byBhc3NlcnQgUlRTIGFuZCBEVFIgaWYgQ1JUU0NUUyBvZmYgKi8KLQogCWRiZygiJXMgLSBzdWJtaXR0aW5nIHJlYWQgdXJiIiwgX19mdW5jX18pOwogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKaW5kZXggZWU5NTA1ZS4uZDY0MGRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaApAQCAtMTMwLDMgKzEzMCw3IEBACiAvKiBTb255LCBVU0IgZGF0YSBjYWJsZSBmb3IgQ01ELUp4eCBtb2JpbGUgcGhvbmVzICovCiAjZGVmaW5lIFNPTllfVkVORE9SX0lECQkweDA1NGMKICNkZWZpbmUgU09OWV9RTjNVU0JfUFJPRFVDVF9JRAkweDA0MzcKKworLyogU2Fud2EgS0ItVVNCMiBtdWx0aW1ldGVyIGNhYmxlIChJRDogMTFhZDowMDAxKSAqLworI2RlZmluZSBTQU5XQV9WRU5ET1JfSUQJCTB4MTFhZAorI2RlZmluZSBTQU5XQV9QUk9EVUNUX0lECTB4MDAwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IGY0OGQwNWUuLjY4ZmEwZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTUxLDYgKzUxLDEyIEBACiAJY29uc3QgdTggICppZmFjZWluZm87CS8qIHBvaW50ZXIgdG8gdGhlIGFycmF5IGhvbGRpbmcgdGhlIG51bWJlcnMgKi8KIH07CiAKK3N0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlIHsKKwlzcGlubG9ja190IHN1c3BfbG9jazsKKwl1bnNpZ25lZCBpbnQgc3VzcGVuZGVkOjE7CisJaW50IGluX2ZsaWdodDsKK307CisKIHN0YXRpYyBpbnQgc2llcnJhX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgX191MTYgc3dpU3RhdGUpCiB7CiAJaW50IHJlc3VsdDsKQEAgLTE0NCw2ICsxNTAsNyBAQAogewogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlICpkYXRhOwogCXU4IGlmbnVtOwogCiAJdWRldiA9IHNlcmlhbC0+ZGV2OwpAQCAtMTcxLDYgKzE3OCwxMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlkYXRhID0gc2VyaWFsLT5wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pbml0KCZkYXRhLT5zdXNwX2xvY2spOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjYxLDEzICsyNzMsMTggQEAKIAkubmFtZSAgICAgICA9ICJzaWVycmEiLAogCS5wcm9iZSAgICAgID0gdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCAgICA9IHVzYl9zZXJpYWxfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IHVzYl9zZXJpYWxfcmVzdW1lLAogCS5pZF90YWJsZSAgID0gaWRfdGFibGUsCiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPQkxLAogfTsKIAogc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgewogCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayB0aGUgc3RydWN0dXJlICovCiAJaW50IG91dHN0YW5kaW5nX3VyYnM7CS8qIG51bWJlciBvZiBvdXQgdXJicyBpbiBmbGlnaHQgKi8KKwlzdHJ1Y3QgdXNiX2FuY2hvciBhY3RpdmU7CisJc3RydWN0IHVzYl9hbmNob3IgZGVsYXllZDsKIAogCS8qIElucHV0IGVuZHBvaW50cyBhbmQgYnVmZmVycyBmb3IgdGhpcyBwb3J0ICovCiAJc3RydWN0IHVyYiAqaW5fdXJic1tOX0lOX1VSQl07CkBAIC0yNzksNiArMjk2LDggQEAKIAlpbnQgZHNyX3N0YXRlOwogCWludCBkY2Rfc3RhdGU7CiAJaW50IHJpX3N0YXRlOworCisJdW5zaWduZWQgaW50IG9wZW5lZDoxOwogfTsKIAogc3RhdGljIGludCBzaWVycmFfc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQpAQCAtMzkwLDIxICs0MDksMjUgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWludGZkYXRhID0gcG9ydC0+c2VyaWFsLT5wcml2YXRlOwogCiAJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCiAJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKTsKIAlpZiAoc3RhdHVzKQogCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgIgogCQkgICAgInJlY2VpdmVkOiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJnBvcnRkYXRhLT5sb2NrKTsKIAktLXBvcnRkYXRhLT5vdXRzdGFuZGluZ191cmJzOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnBvcnRkYXRhLT5sb2NrKTsKKwlzcGluX2xvY2soJmludGZkYXRhLT5zdXNwX2xvY2spOworCS0taW50ZmRhdGEtPmluX2ZsaWdodDsKKwlzcGluX3VubG9jaygmaW50ZmRhdGEtPnN1c3BfbG9jayk7CiAKIAl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKIH0KQEAgLTQxNCw2ICs0MzcsNyBAQAogCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUgKmludGZkYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CkBAIC00MjYsOSArNDUwLDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnRmZGF0YSA9IHNlcmlhbC0+cHJpdmF0ZTsKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB3cml0ZSAoJXpkIGJ5dGVzKVxuIiwgX19mdW5jX18sIHdyaXRlc2l6ZSk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKIAlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG91dHN0YW5kaW5nX3VyYnM6ICVkXG4iLCBfX2Z1bmNfXywKIAkJcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMpOwpAQCAtNDQyLDYgKzQ2NiwxNCBAQAogCQlwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKIAorCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyhzZXJpYWwtPmludGVyZmFjZSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CisJCXBvcnRkYXRhLT5vdXRzdGFuZGluZ191cmJzLS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CisJCWdvdG8gZXJyb3Jfc2ltcGxlOworCX0KKwogCWJ1ZmZlciA9IGttYWxsb2Mod3JpdGVzaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZmZlcikgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKQEAgLTQ2OCwxNCArNTAwLDI5IEBACiAJLyogSGFuZGxlIHRoZSBuZWVkIHRvIHNlbmQgYSB6ZXJvIGxlbmd0aCBwYWNrZXQgKi8KIAl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmZGF0YS0+c3VzcF9sb2NrLCBmbGFncyk7CisKKwlpZiAoaW50ZmRhdGEtPnN1c3BlbmRlZCkgeworCQl1c2JfYW5jaG9yX3VyYih1cmIsICZwb3J0ZGF0YS0+ZGVsYXllZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKKwkJZ290byBza2lwX3Bvd2VyOworCX0gZWxzZSB7CisJCXVzYl9hbmNob3JfdXJiKHVyYiwgJnBvcnRkYXRhLT5hY3RpdmUpOworCX0KIAkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmZGF0YS0+c3VzcF9sb2NrLCBmbGFncyk7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICIKIAkJCSJ3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKKwl9IGVsc2UgeworCQlpbnRmZGF0YS0+aW5fZmxpZ2h0Kys7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKIAl9CiAKK3NraXBfcG93ZXI6CiAJLyogd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHVyYiwgc28gbGV0IHRoZSBob3N0IGRyaXZlcgogCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLwogCXVzYl9mcmVlX3VyYih1cmIpOwpAQCAtNDkxLDYgKzUzOCw4IEBACiAJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMgLSAyLiBvdXRzdGFuZGluZ191cmJzOiAlZFxuIiwgX19mdW5jX18sCiAJCXBvcnRkYXRhLT5vdXRzdGFuZGluZ191cmJzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyhzZXJpYWwtPmludGVyZmFjZSk7CitlcnJvcl9zaW1wbGU6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNTMwLDYgKzU3OSw3IEBACiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgc3RhdHVzICE9IC1FU0hVVERPV04gJiYgc3RhdHVzICE9IC1FUEVSTSkgeworCQl1c2JfbWFya19sYXN0X2J1c3kocG9ydC0+c2VyaWFsLT5kZXYpOwogCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAoZXJyKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAicmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiIKQEAgLTU5MSw2ICs2NDEsNyBAQAogCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyBJUlEgZGF0YSAqLwogCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOICYmIHN0YXR1cyAhPSAtRU5PRU5UKSB7CisJCXVzYl9tYXJrX2xhc3RfYnVzeShzZXJpYWwtPmRldik7CiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIpCkBAIC03MTEsNiArNzYyLDggQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBwb3J0LT5zZXJpYWwtPnByaXZhdGU7CisKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC03MjMsNiArNzc2LDEwIEBACiAJCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCiAJCQlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKIAkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOworCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwkJcG9ydGRhdGEtPm9wZW5lZCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisKIAogCQkvKiBTdG9wIHJlYWRpbmcgdXJicyAqLwogCQlzaWVycmFfc3RvcF9yeF91cmJzKHBvcnQpOwpAQCAtNzMxLDE0ICs3ODgsMTYgQEAKIAkJCXNpZXJyYV9yZWxlYXNlX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tpXSk7CiAJCQlwb3J0ZGF0YS0+aW5fdXJic1tpXSA9IE5VTEw7CiAJCX0KKwkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCX0KIH0KIAotc3RhdGljIGludCBzaWVycmFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHNpZXJyYV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOwogCWludCBpOwogCWludCBlcnI7CiAJaW50IGVuZHBvaW50OwpAQCAtNzcyLDYgKzgzMSwxMiBAQAogCX0KIAlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKIAorCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKKwlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwlwb3J0ZGF0YS0+b3BlbmVkID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODE5LDYgKzg4NCw4IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlzcGluX2xvY2tfaW5pdCgmcG9ydGRhdGEtPmxvY2spOworCQlpbml0X3VzYl9hbmNob3IoJnBvcnRkYXRhLT5hY3RpdmUpOworCQlpbml0X3VzYl9hbmNob3IoJnBvcnRkYXRhLT5kZWxheWVkKTsKIAkJLyogU2V0IHRoZSBwb3J0IHByaXZhdGUgZGF0YSBwb2ludGVyICovCiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwb3J0ZGF0YSk7CiAJfQpAQCAtODQ1LDYgKzkxMiw4MyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKworCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspCisJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbal0pOworCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+YWN0aXZlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2llcnJhX3N1c3BlbmQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUgKmludGZkYXRhOworCWludCBiOworCisJaWYgKHNlcmlhbC0+ZGV2LT5hdXRvX3BtKSB7CisJCWludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOworCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwkJYiA9IGludGZkYXRhLT5pbl9mbGlnaHQ7CisKKwkJaWYgKGIpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9IGVsc2UgeworCQkJaW50ZmRhdGEtPnN1c3BlbmRlZCA9IDE7CisJCQlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCQl9CisJfQorCXN0b3BfcmVhZF93cml0ZV91cmJzKHNlcmlhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaWVycmFfcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7CisJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZWMgPSAwOworCWludCBpLCBlcnI7CisKKwlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCQl3aGlsZSAoKHVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJnBvcnRkYXRhLT5kZWxheWVkKSkpIHsKKwkJCXVzYl9hbmNob3JfdXJiKHVyYiwgJnBvcnRkYXRhLT5hY3RpdmUpOworCQkJaW50ZmRhdGEtPmluX2ZsaWdodCsrOworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJaW50ZmRhdGEtPmluX2ZsaWdodC0tOworCQkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJCQl1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+ZGVsYXllZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAocG9ydGRhdGEtPm9wZW5lZCkgeworCQkJZXJyID0gc2llcnJhX3N1Ym1pdF9yeF91cmJzKHBvcnQsIEdGUF9BVE9NSUMpOworCQkJaWYgKGVycikKKwkJCQllYysrOworCQl9CisJfQorCWludGZkYXRhLT5zdXNwZW5kZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisKKwlyZXR1cm4gZWMgPyAtRUlPIDogMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBzaWVycmFfZGV2aWNlID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lciA9CVRISVNfTU9EVUxFLApAQCAtODY1LDYgKzEwMDksOCBAQAogCS50aW9jbXNldCAgICAgICAgICA9IHNpZXJyYV90aW9jbXNldCwKIAkuYXR0YWNoICAgICAgICAgICAgPSBzaWVycmFfc3RhcnR1cCwKIAkucmVsZWFzZSAgICAgICAgICAgPSBzaWVycmFfcmVsZWFzZSwKKwkuc3VzcGVuZAkgICA9IHNpZXJyYV9zdXNwZW5kLAorCS5yZXN1bWUJCSAgID0gc2llcnJhX3Jlc3VtZSwKIAkucmVhZF9pbnRfY2FsbGJhY2sgPSBzaWVycmFfaW5zdGF0X2NhbGxiYWNrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggM2MyNDlkOC4uMWU1ODIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCkBAIC0yOTksNyArMjk5LDYgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdAlkZWx0YV9tc3Jfd2FpdDsKIAl1OCAJCQlsaW5lX2NvbnRyb2w7CiAJdTggCQkJbGluZV9zdGF0dXM7Ci0JdTggCQkJdGVybWlvc19pbml0aWFsaXplZDsKIH07CiAKIC8qIGRlc2MgOiB3aGVuIGRldmljZSBwbHVnIGluLHRoaXMgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkLgpAQCAtNDk4LDYgKzQ5NywxNSBAQAogCQlkZXZfZGJnKCZwb3J0LT5kZXYsICJ1c2JfdW5saW5rX3VyYihyZWFkX3VyYikgPSAlZFxuIiwgcmVzdWx0KTsKIH0KIAorc3RhdGljIHZvaWQgc3BjcDh4NV9pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwkvKiBmb3IgdGhlIDFzdCB0aW1lIGNhbGwgdGhpcyBmdW5jdGlvbiAqLworCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKKwl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCMTE1MjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gMTE1MjAwOworCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSAxMTUyMDA7Cit9CisKIC8qIHNldCB0aGUgc2VyaWFsIHBhcmFtIGZvciB0cmFuc2Zlci4gd2Ugc2hvdWxkIGNoZWNrIGlmIHdlIHJlYWxseSBuZWVkIHRvCiAgKiB0cmFuc2Zlci4gaWYgd2Ugc2V0IGZsb3cgY29udHJvbCB3ZSBzaG91bGQgZG8gdGhpcyB0b28uICovCiBzdGF0aWMgdm9pZCBzcGNwOHg1X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC01MTQsMTYgKzUyMiw2IEBACiAJaW50IGk7CiAJdTggY29udHJvbDsKIAotCS8qIGZvciB0aGUgMXN0IHRpbWUgY2FsbCB0aGlzIGZ1bmN0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKLQkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOwotCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCMTE1MjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKLQkJdHR5LT50ZXJtaW9zLT5jX2lzcGVlZCA9IDExNTIwMDsKLQkJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDExNTIwMDsKLQkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCiAJaWYgKCF0dHlfdGVybWlvc19od19jaGFuZ2UodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcykpCkBAIC01NDYsNyArNTQ0LDcgQEAKIAl9CiAKIAkvKiBTZXQgQmF1ZCBSYXRlICovCi0JYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7OworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCXN3aXRjaCAoYmF1ZCkgewogCWNhc2UgMzAwOglidWZbMF0gPSAweDAwOwlicmVhazsKIAljYXNlIDYwMDoJYnVmWzBdID0gMHgwMTsJYnJlYWs7CkBAIC02MjMsOCArNjIxLDcgQEAKIAogLyogb3BlbiB0aGUgc2VyaWFsIHBvcnQuIGRvIHNvbWUgdXNiIHN5c3RlbSBjYWxsLiBzZXQgdGVybWlvcyBhbmQgZ2V0IHRoZSBsaW5lCiAgKiBzdGF0dXMgb2YgdGhlIGRldmljZS4gdGhlbiBzdWJtaXQgdGhlIHJlYWQgdXJiICovCi1zdGF0aWMgaW50IHNwY3A4eDVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHNwY3A4eDVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBrdGVybWlvcyB0bXBfdGVybWlvczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtNjU4LDggKzY1NSw2IEBACiAJcHJpdi0+bGluZV9zdGF0dXMgPSBzdGF0dXMgJiAweGYwIDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQkvKiBGSVhNRTogbmVlZCB0byBhc3NlcnQgUlRTIGFuZCBEVFIgaWYgQ1JUU0NUUyBvZmYgKi8KLQogCWRiZygiJXMgLSBzdWJtaXR0aW5nIHJlYWQgdXJiIiwgX19mdW5jX18pOwogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CkBAIC0xMDExLDYgKzEwMDYsNyBAQAogCS5jYXJyaWVyX3JhaXNlZAkJPSBzcGNwOHg1X2NhcnJpZXJfcmFpc2VkLAogCS53cml0ZSAJCQk9IHNwY3A4eDVfd3JpdGUsCiAJLnNldF90ZXJtaW9zIAkJPSBzcGNwOHg1X3NldF90ZXJtaW9zLAorCS5pbml0X3Rlcm1pb3MJCT0gc3BjcDh4NV9pbml0X3Rlcm1pb3MsCiAJLmlvY3RsIAkJCT0gc3BjcDh4NV9pb2N0bCwKIAkudGlvY21nZXQgCQk9IHNwY3A4eDVfdGlvY21nZXQsCiAJLnRpb2Ntc2V0IAkJPSBzcGNwOHg1X3Rpb2Ntc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCmluZGV4IDYxNTdmYWMuLmNiN2U5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKQEAgLTEyNCw4ICsxMjQsNyBAQAogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBzeW1ib2xfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHN5bWJvbF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCAzYmM2MDlmLi4xZTlkYzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTk4LDggKzk4LDcgQEAKIAogc3RhdGljIGludCB0aV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgdGlfcmVsZWFzZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQlzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCB0aV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgdGlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KTsKQEAgLTQ5Miw4ICs0OTEsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHRpX2RldmljZSAqdGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDk5MTg4YzkuLmZmNzVhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgInBsMjMwMy5oIgogCiAvKgpAQCAtNDMsOCArNDQsNiBAQAogI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4sIGdyZWdAa3JvYWguY29tLCBodHRwOi8vd3d3Lmtyb2FoLmNvbS9saW51eC8iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgU2VyaWFsIERyaXZlciBjb3JlIgogCi1zdGF0aWMgdm9pZCBwb3J0X2ZyZWUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci0KIC8qIERyaXZlciBzdHJ1Y3R1cmUgd2UgcmVnaXN0ZXIgd2l0aCB0aGUgVVNCIGNvcmUgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2Jfc2VyaWFsX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNic2VyaWFsIiwKQEAgLTY4LDYgKzY3LDExIEBACiBzdGF0aWMgREVGSU5FX01VVEVYKHRhYmxlX2xvY2spOwogc3RhdGljIExJU1RfSEVBRCh1c2Jfc2VyaWFsX2RyaXZlcl9saXN0KTsKIAorLyoKKyAqIExvb2sgdXAgdGhlIHNlcmlhbCBzdHJ1Y3R1cmUuICBJZiBpdCBpcyBmb3VuZCBhbmQgaXQgaGFzbid0IGJlZW4KKyAqIGRpc2Nvbm5lY3RlZCwgcmV0dXJuIHdpdGggaXRzIGRpc2NfbXV0ZXggaGVsZCBhbmQgaXRzIHJlZmNvdW50CisgKiBpbmNyZW1lbnRlZC4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqLwogc3RydWN0IHVzYl9zZXJpYWwgKnVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KHVuc2lnbmVkIGluZGV4KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC03NSw4ICs3OSwxNSBAQAogCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwogCXNlcmlhbCA9IHNlcmlhbF90YWJsZVtpbmRleF07CiAKLQlpZiAoc2VyaWFsKQotCQlrcmVmX2dldCgmc2VyaWFsLT5rcmVmKTsKKwlpZiAoc2VyaWFsKSB7CisJCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJCWlmIChzZXJpYWwtPmRpc2Nvbm5lY3RlZCkgeworCQkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOworCQkJc2VyaWFsID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWtyZWZfZ2V0KCZzZXJpYWwtPmtyZWYpOworCQl9CisJfQogCW11dGV4X3VubG9jaygmdGFibGVfbG9jayk7CiAJcmV0dXJuIHNlcmlhbDsKIH0KQEAgLTEyNSw4ICsxMzYsMTAgQEAKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKKwltdXRleF9sb2NrKCZ0YWJsZV9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKIAkJc2VyaWFsX3RhYmxlW3NlcmlhbC0+bWlub3IgKyBpXSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveV9zZXJpYWwoc3RydWN0IGtyZWYgKmtyZWYpCkBAIC0xNDUsMjQ0ICsxNTgsMjI0IEBACiAKIAlzZXJpYWwtPnR5cGUtPnJlbGVhc2Uoc2VyaWFsKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJLyogTm93IHRoYXQgbm90aGluZyBpcyB1c2luZyB0aGUgcG9ydHMsIHRoZXkgY2FuIGJlIGZyZWVkICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQlpZiAocG9ydCkKKwkJaWYgKHBvcnQpIHsKKwkJCXBvcnQtPnNlcmlhbCA9IE5VTEw7CiAJCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwotCX0KLQotCS8qIElmIHRoaXMgaXMgYSAiZmFrZSIgcG9ydCwgd2UgaGF2ZSB0byBjbGVhbiBpdCB1cCBoZXJlLCBhcyBpdCB3aWxsCi0JICogbm90IGdldCBjbGVhbmVkIHVwIGluIHBvcnRfcmVsZWFzZSgpIGFzIGl0IHdhcyBuZXZlciByZWdpc3RlcmVkIHdpdGgKLQkgKiB0aGUgZHJpdmVyIGNvcmUgKi8KLQlpZiAoc2VyaWFsLT5udW1fcG9ydHMgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzKSB7Ci0JCWZvciAoaSA9IHNlcmlhbC0+bnVtX3BvcnRzOwotCQkJCQlpIDwgc2VyaWFsLT5udW1fcG9ydF9wb2ludGVyczsgKytpKSB7Ci0JCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQkJaWYgKHBvcnQpCi0JCQkJcG9ydF9mcmVlKHBvcnQpOwogCQl9CiAJfQogCiAJdXNiX3B1dF9kZXYoc2VyaWFsLT5kZXYpOwotCi0JLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCiAJa2ZyZWUoc2VyaWFsKTsKIH0KIAogdm9pZCB1c2Jfc2VyaWFsX3B1dChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewotCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwogCWtyZWZfcHV0KCZzZXJpYWwtPmtyZWYsIGRlc3Ryb3lfc2VyaWFsKTsKLQltdXRleF91bmxvY2soJnRhYmxlX2xvY2spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERyaXZlciB0dHkgaW50ZXJmYWNlIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBzZXJpYWxfb3BlbiAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCisKKy8qKgorICogc2VyaWFsX2luc3RhbGwgLSBpbnN0YWxsIHR0eQorICogQGRyaXZlcjogdGhlIGRyaXZlciAoVVNCIGluIG91ciBjYXNlKQorICogQHR0eTogdGhlIHR0eSBiZWluZyBjcmVhdGVkCisgKgorICogQ3JlYXRlIHRoZSB0ZXJtaW9zIG9iamVjdHMgZm9yIHRoaXMgdHR5LiAgV2UgdXNlIHRoZSBkZWZhdWx0CisgKiBVU0Igc2VyaWFsIHNldHRpbmdzIGJ1dCBwZXJtaXQgdGhlbSB0byBiZSBvdmVycmlkZGVuIGJ5CisgKiBzZXJpYWwtPnR5cGUtPmluaXRfdGVybWlvcy4KKyAqCisgKiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBhIG5ldyB0dHkgZ2V0cyB1c2VkLiAgSGVuY2UgdGhpcyBpcyB3aGVyZSB3ZQorICogYWNxdWlyZSByZWZlcmVuY2VzIHRvIHRoZSB1c2Jfc2VyaWFsIHN0cnVjdHVyZSBhbmQgdGhlIGRyaXZlciBtb2R1bGUsCisgKiB3aGVyZSB3ZSBzdG9yZSBhIHBvaW50ZXIgdG8gdGhlIHBvcnQsIGFuZCB3aGVyZSB3ZSBkbyBhbiBhdXRvcmVzdW1lLgorICogQWxsIHRoZXNlIGFjdGlvbnMgYXJlIHJldmVyc2VkIGluIHNlcmlhbF9yZWxlYXNlKCkuCisgKi8KK3N0YXRpYyBpbnQgc2VyaWFsX2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlpbnQgaWR4ID0gdHR5LT5pbmRleDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0JdW5zaWduZWQgaW50IHBvcnROdW1iZXI7Ci0JaW50IHJldHZhbCA9IDA7Ci0JaW50IGZpcnN0ID0gMDsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKLQkvKiBnZXQgdGhlIHNlcmlhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IHBvaW50ZXIgKi8KLQlzZXJpYWwgPSB1c2Jfc2VyaWFsX2dldF9ieV9pbmRleCh0dHktPmluZGV4KTsKLQlpZiAoIXNlcmlhbCkgewotCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCXNlcmlhbCA9IHVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KGlkeCk7CisJaWYgKCFzZXJpYWwpCisJCXJldHVybiByZXR2YWw7CiAKLQltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCXBvcnROdW1iZXIgPSB0dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKLQlwb3J0ID0gc2VyaWFsLT5wb3J0W3BvcnROdW1iZXJdOwotCWlmICghcG9ydCB8fCBzZXJpYWwtPmRpc2Nvbm5lY3RlZCkKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQllbHNlCi0JCWdldF9kZXZpY2UoJnBvcnQtPmRldik7Ci0JLyoKLQkgKiBOb3RlOiBPdXIgbG9ja2luZyBvcmRlciByZXF1aXJlbWVudCBkb2VzIG5vdCBhbGxvdyBwb3J0LT5tdXRleAotCSAqIHRvIGJlIGFjcXVpcmVkIHdoaWxlIHNlcmlhbC0+ZGlzY19tdXRleCBpcyBoZWxkLgotCSAqLwotCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKKwlwb3J0ID0gc2VyaWFsLT5wb3J0W2lkeCAtIHNlcmlhbC0+bWlub3JdOworCWlmICghcG9ydCkKKwkJZ290byBlcnJvcl9ub19wb3J0OworCWlmICghdHJ5X21vZHVsZV9nZXQoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpKQorCQlnb3RvIGVycm9yX21vZHVsZV9nZXQ7CisKKwkvKiBwZXJmb3JtIHRoZSBzdGFuZGFyZCBzZXR1cCAqLworCXJldHZhbCA9IHR0eV9pbml0X3Rlcm1pb3ModHR5KTsKIAlpZiAocmV0dmFsKQotCQlnb3RvIGJhaWxvdXRfc2VyaWFsX3B1dDsKKwkJZ290byBlcnJvcl9pbml0X3Rlcm1pb3M7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwb3J0LT5tdXRleCkpIHsKLQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwotCQlnb3RvIGJhaWxvdXRfcG9ydF9wdXQ7Ci0JfQorCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcl9nZXRfaW50ZXJmYWNlOwogCi0JKytwb3J0LT5wb3J0LmNvdW50OworCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAotCS8qIHNldCB1cCBvdXIgcG9ydCBzdHJ1Y3R1cmUgbWFraW5nIHRoZSB0dHkgZHJpdmVyCi0JICogcmVtZW1iZXIgb3VyIHBvcnQgb2JqZWN0LCBhbmQgdXMgaXQgKi8KKwkvKiBhbGxvdyB0aGUgZHJpdmVyIHRvIHVwZGF0ZSB0aGUgc2V0dGluZ3MgKi8KKwlpZiAoc2VyaWFsLT50eXBlLT5pbml0X3Rlcm1pb3MpCisJCXNlcmlhbC0+dHlwZS0+aW5pdF90ZXJtaW9zKHR0eSk7CisKIAl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKKworCS8qIEZpbmFsIGluc3RhbGwgKHdlIHVzZSB0aGUgZGVmYXVsdCBtZXRob2QpICovCisJdHR5X2RyaXZlcl9rcmVmX2dldChkcml2ZXIpOworCXR0eS0+Y291bnQrKzsKKwlkcml2ZXItPnR0eXNbaWR4XSA9IHR0eTsKKwlyZXR1cm4gcmV0dmFsOworCisgZXJyb3JfZ2V0X2ludGVyZmFjZToKKyBlcnJvcl9pbml0X3Rlcm1pb3M6CisJbW9kdWxlX3B1dChzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcik7CisgZXJyb3JfbW9kdWxlX2dldDoKKyBlcnJvcl9ub19wb3J0OgorCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmV0dmFsOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnQubG9jayk7CisJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQorCQkrK3BvcnQtPnBvcnQuY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5wb3J0LmxvY2spOwogCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIHR0eSk7CiAKLQkvKiBJZiB0aGUgY29uc29sZSBpcyBhdHRhY2hlZCwgdGhlIGRldmljZSBpcyBhbHJlYWR5IG9wZW4gKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCA9PSAxICYmICFwb3J0LT5jb25zb2xlKSB7Ci0JCWZpcnN0ID0gMTsKLQkJLyogbG9jayB0aGlzIG1vZHVsZSBiZWZvcmUgd2UgY2FsbCBpdAotCQkgKiB0aGlzIG1heSBmYWlsLCB3aGljaCBtZWFucyB3ZSBtdXN0IGJhaWwgb3V0LAotCQkgKiBzYWZlIGJlY2F1c2Ugd2UgYXJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCi0JCWlmICghdHJ5X21vZHVsZV9nZXQoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpKSB7Ci0JCQlyZXR2YWwgPSAtRU5PREVWOwotCQkJZ290byBiYWlsb3V0X211dGV4X3VubG9jazsKLQkJfQotCisJLyogRG8gdGhlIGRldmljZS1zcGVjaWZpYyBvcGVuIG9ubHkgaWYgdGhlIGhhcmR3YXJlIGlzbid0CisJICogYWxyZWFkeSBpbml0aWFsaXplZC4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKSB7CisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnBvcnQtPm11dGV4KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJCWlmIChzZXJpYWwtPmRpc2Nvbm5lY3RlZCkKIAkJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWVsc2UKLQkJCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIGJhaWxvdXRfbW9kdWxlX3B1dDsKLQotCQkvKiBvbmx5IGNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBvcGVuIGlmIHRoaXMKLQkJICogaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHBvcnQgaXMgb3BlbmVkICovCi0JCXJldHZhbCA9IHNlcmlhbC0+dHlwZS0+b3Blbih0dHksIHBvcnQsIGZpbHApOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBiYWlsb3V0X2ludGVyZmFjZV9wdXQ7CisJCQlyZXR2YWwgPSBwb3J0LT5zZXJpYWwtPnR5cGUtPm9wZW4odHR5LCBwb3J0KTsKIAkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CiAJCXNldF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+cG9ydC5mbGFncyk7CiAJfQotCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCiAJLyogTm93IGRvIHRoZSBjb3JyZWN0IHR0eSBsYXllciBzZW1hbnRpY3MgKi8KIAlyZXR2YWwgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJnBvcnQtPnBvcnQsIHR0eSwgZmlscCk7Ci0JaWYgKHJldHZhbCA9PSAwKSB7Ci0JCWlmICghZmlyc3QpCi0JCQl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwotCQlyZXR1cm4gMDsKLQl9Ci0JbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwotCWlmIChmaXJzdCA9PSAwKQotCQlnb3RvIGJhaWxvdXRfbXV0ZXhfdW5sb2NrOwotCS8qIFVuZG8gdGhlIGluaXRpYWwgcG9ydCBhY3Rpb25zICovCi0JbXV0ZXhfbG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKLWJhaWxvdXRfaW50ZXJmYWNlX3B1dDoKLQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwotYmFpbG91dF9tb2R1bGVfcHV0OgotCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKLQltb2R1bGVfcHV0KHNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKTsKLWJhaWxvdXRfbXV0ZXhfdW5sb2NrOgotCXBvcnQtPnBvcnQuY291bnQgPSAwOwotCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOwotCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwotYmFpbG91dF9wb3J0X3B1dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwotYmFpbG91dF9zZXJpYWxfcHV0OgotCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqCi0gKglzZXJpYWxfZG9fZG93bgkJLQlzaHV0IGRvd24gaGFyZHdhcmUKLSAqCUBwb3J0OiBwb3J0IHRvIHNodXQgZG93bgorICogc2VyaWFsX2Rvd24gLSBzaHV0IGRvd24gaGFyZHdhcmUKKyAqIEBwb3J0OiBwb3J0IHRvIHNodXQgZG93bgogICoKLSAqCVNodXQgZG93biBhIFVTQiBwb3J0IHVubGVzcyBpdCBpcyB0aGUgY29uc29sZS4gV2UgbmV2ZXIgc2h1dCBkb3duIHRoZQotICoJY29uc29sZSBoYXJkd2FyZSBhcyBpdCB3aWxsIGFsd2F5cyBiZSBpbiB1c2UuCi0gKgotICoJRG9uJ3QgZnJlZSBhbnkgcmVzb3VyY2VzIGF0IHRoaXMgcG9pbnQKKyAqIFNodXQgZG93biBhIFVTQiBzZXJpYWwgcG9ydCB1bmxlc3MgaXQgaXMgdGhlIGNvbnNvbGUuICBXZSBuZXZlcgorICogc2h1dCBkb3duIHRoZSBjb25zb2xlIGhhcmR3YXJlIGFzIGl0IHdpbGwgYWx3YXlzIGJlIGluIHVzZS4KICAqLwotc3RhdGljIHZvaWQgc2VyaWFsX2RvX2Rvd24oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHNlcmlhbF9kb3duKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkcnYgPSBwb3J0LT5zZXJpYWwtPnR5cGU7Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAotCS8qIFRoZSBjb25zb2xlIGlzIG1hZ2ljYWwsIGRvIG5vdCBoYW5nIHVwIHRoZSBjb25zb2xlIGhhcmR3YXJlCi0JICAgb3IgdGhlcmUgd2lsbCBiZSB0ZWFycyAqLworCS8qCisJICogVGhlIGNvbnNvbGUgaXMgbWFnaWNhbC4gIERvIG5vdCBoYW5nIHVwIHRoZSBjb25zb2xlIGhhcmR3YXJlCisJICogb3IgdGhlcmUgd2lsbCBiZSB0ZWFycy4KKwkgKi8KIAlpZiAocG9ydC0+Y29uc29sZSkKIAkJcmV0dXJuOwogCisJLyogRG9uJ3QgY2FsbCB0aGUgY2xvc2UgbWV0aG9kIGlmIHRoZSBoYXJkd2FyZSBoYXNuJ3QgYmVlbgorCSAqIGluaXRpYWxpemVkLgorCSAqLworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKQorCQlyZXR1cm47CisKIAltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7Ci0Jc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCW93bmVyID0gc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXI7Ci0KIAlpZiAoZHJ2LT5jbG9zZSkKIAkJZHJ2LT5jbG9zZShwb3J0KTsKLQogCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogfQogCi0vKioKLSAqCXNlcmlhbF9kb19mcmVlCQktCWZyZWUgcmVzb3VyY2VzIHBvc3QgY2xvc2UvaGFuZ3VwCi0gKglAcG9ydDogcG9ydCB0byBmcmVlIHVwCi0gKgotICoJRG8gdGhlIHJlc291cmNlIGZyZWVpbmcgYW5kIHJlZmNvdW50IGRyb3BwaW5nIGZvciB0aGUgcG9ydC4gV2UgbXVzdAotICoJYmUgY2FyZWZ1bCBhYm91dCBvcmRlcmluZyBhbmQgd2UgbXVzdCBhdm9pZCBmcmVlaW5nIHVwIHRoZSBjb25zb2xlLgotICovCi0KLXN0YXRpYyB2b2lkIHNlcmlhbF9kb19mcmVlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBzZXJpYWxfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotCS8qIFRoZSBjb25zb2xlIGlzIG1hZ2ljYWwsIGRvIG5vdCBoYW5nIHVwIHRoZSBjb25zb2xlIGhhcmR3YXJlCi0JICAgb3IgdGhlcmUgd2lsbCBiZSB0ZWFycyAqLwotCWlmIChwb3J0LT5jb25zb2xlKQotCQlyZXR1cm47CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlvd25lciA9IHNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyOwotCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7Ci0JLyogTXVzdG4ndCBkZXJlZmVyZW5jZSBwb3J0IGFueSBtb3JlICovCi0JbXV0ZXhfbG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKLQlpZiAoIXNlcmlhbC0+ZGlzY29ubmVjdGVkKQotCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwotCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKLQl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwotCS8qIE11c3RuJ3QgZGVyZWZlcmVuY2Ugc2VyaWFsIGFueSBtb3JlICovCi0JbW9kdWxlX3B1dChvd25lcik7CisJc2VyaWFsX2Rvd24ocG9ydCk7CisJdHR5X3BvcnRfaGFuZ3VwKCZwb3J0LT5wb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCi0JaWYgKCFwb3J0KQorCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkKKwkJcmV0dXJuOworCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydCgmcG9ydC0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKQorCQlyZXR1cm47CisJc2VyaWFsX2Rvd24ocG9ydCk7CisJdHR5X3BvcnRfY2xvc2VfZW5kKCZwb3J0LT5wb3J0LCB0dHkpOworCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOworfQorCisvKioKKyAqIHNlcmlhbF9yZWxlYXNlIC0gZnJlZSByZXNvdXJjZXMgcG9zdCBjbG9zZS9oYW5ndXAKKyAqIEBwb3J0OiBwb3J0IHRvIGZyZWUgdXAKKyAqCisgKiBEbyB0aGUgcmVzb3VyY2UgZnJlZWluZyBhbmQgcmVmY291bnQgZHJvcHBpbmcgZm9yIHRoZSBwb3J0LgorICogQXZvaWQgZnJlZWluZyB0aGUgY29uc29sZS4KKyAqCisgKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCB0dHkga3JlZiBpcyBkcm9wcGVkLgorICovCitzdGF0aWMgdm9pZCBzZXJpYWxfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisKKwkvKiBUaGUgY29uc29sZSBpcyBtYWdpY2FsLiAgRG8gbm90IGhhbmcgdXAgdGhlIGNvbnNvbGUgaGFyZHdhcmUKKwkgKiBvciB0aGVyZSB3aWxsIGJlIHRlYXJzLgorCSAqLworCWlmIChwb3J0LT5jb25zb2xlKQogCQlyZXR1cm47CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JLyogRklYTUU6Ci0JICAgVGhpcyBsZWF2ZXMgYSB2ZXJ5IG5hcnJvdyByYWNlLiBSZWFsbHkgd2Ugc2hvdWxkIGRvIHRoZQotCSAgIHNlcmlhbF9kb19mcmVlKCkgb24gdHR5LT5zaHV0ZG93bigpLCBidXQgdHR5LT5zaHV0ZG93biBjYW4KLQkgICBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCBhbmQgc2VyaWFsX2RvX2ZyZWUgY2FuIHNsZWVwLgorCS8qIFN0YW5kYXJkIHNodXRkb3duIHByb2Nlc3NpbmcgKi8KKwl0dHlfc2h1dGRvd24odHR5KTsKIAotCSAgIFRoZSByaWdodCBmaXggaXMgcHJvYmFibHkgdG8gbWFrZSB0aGUgdHR5IGZyZWUgKHdoaWNoIGlzIHJhcmUpCi0JICAgYW5kIHRodXMgdHR5LT5zaHV0ZG93bigpIG9jY3VyIHZpYSBhIHdvcmsgcXVldWUgYW5kIHNpbXBsaWZ5IGFsbAotCSAgIHRoZSBkcml2ZXJzIHRoYXQgdXNlIGl0LgotCSovCi0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkpIHsKLQkJLyogc2VyaWFsX2hhbmd1cCBhbHJlYWR5IGNhbGxlZCBzZXJpYWxfZG93biBhdCB0aGlzIHBvaW50LgotCQkgICBBbm90aGVyIHVzZXIgbWF5IGhhdmUgYWxyZWFkeSByZW9wZW5lZCB0aGUgcG9ydCBidXQKLQkJICAgc2VyaWFsX2RvX2ZyZWUgaXMgcmVmY291bnRlZCAqLwotCQlzZXJpYWxfZG9fZnJlZShwb3J0KTsKLQkJcmV0dXJuOwotCX0KKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKIAotCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydCgmcG9ydC0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKQotCQlyZXR1cm47CisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCW93bmVyID0gc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXI7CiAKLQlzZXJpYWxfZG9fZG93bihwb3J0KTsJCQotCXR0eV9wb3J0X2Nsb3NlX2VuZCgmcG9ydC0+cG9ydCwgdHR5KTsKLQl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKLQlzZXJpYWxfZG9fZnJlZShwb3J0KTsKLX0KKwltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOworCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwogCi1zdGF0aWMgdm9pZCBzZXJpYWxfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc2VyaWFsX2RvX2Rvd24ocG9ydCk7Ci0JdHR5X3BvcnRfaGFuZ3VwKCZwb3J0LT5wb3J0KTsKLQkvKiBXZSBtdXN0IG5vdCBmcmVlIHBvcnQgeWV0IC0gdGhlIFVTQiBzZXJpYWwgbGF5ZXIgZGVwZW5kcyBvbiBpdCdzCi0JICAgY29udGludWVkIGV4aXN0ZW5jZSAqLworCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7CisJbW9kdWxlX3B1dChvd25lcik7CiB9CiAKIHN0YXRpYyBpbnQgc2VyaWFsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKQEAgLTUyNyw2ICs1MjAsNyBAQAogCiAJCXNlcV9wdXRjKG0sICdcbicpOwogCQl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOworCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTk2LDE0ICs1OTAsNiBAQAogCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCi1zdGF0aWMgdm9pZCBwb3J0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKLQotCWRiZyAoIiVzIC0gJXMiLCBfX2Z1bmNfXywgZGV2X25hbWUoZGV2KSk7Ci0JcG9ydF9mcmVlKHBvcnQpOwotfQotCiBzdGF0aWMgdm9pZCBraWxsX3RyYWZmaWMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwpAQCAtNjIzLDggKzYwOSwxMiBAQAogCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYik7CiB9CiAKLXN0YXRpYyB2b2lkIHBvcnRfZnJlZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgcG9ydF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisKKwlkYmcgKCIlcyAtICVzIiwgX19mdW5jX18sIGRldl9uYW1lKGRldikpOworCiAJLyoKIAkgKiBTdG9wIGFsbCB0aGUgdHJhZmZpYyBiZWZvcmUgY2FuY2VsbGluZyB0aGUgd29yaywgc28gdGhhdAogCSAqIG5vYm9keSB3aWxsIHJlc3RhcnQgaXQgYnkgY2FsbGluZyB1c2Jfc2VyaWFsX3BvcnRfc29mdGludC4KQEAgLTYzNiw2ICs2MjYsOCBAQAogCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOwogCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKIAl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCWlmICghSVNfRVJSKHBvcnQtPndyaXRlX2ZpZm8pICYmIHBvcnQtPndyaXRlX2ZpZm8pCisJCWtmaWZvX2ZyZWUocG9ydC0+d3JpdGVfZmlmbyk7CiAJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwogCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CiAJa2ZyZWUocG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CkBAIC05MzUsNiArOTI3LDExIEBACiAJCW11dGV4X2luaXQoJnBvcnQtPm11dGV4KTsKIAkJSU5JVF9XT1JLKCZwb3J0LT53b3JrLCB1c2Jfc2VyaWFsX3BvcnRfd29yayk7CiAJCXNlcmlhbC0+cG9ydFtpXSA9IHBvcnQ7CisJCXBvcnQtPmRldi5wYXJlbnQgPSAmaW50ZXJmYWNlLT5kZXY7CisJCXBvcnQtPmRldi5kcml2ZXIgPSBOVUxMOworCQlwb3J0LT5kZXYuYnVzID0gJnVzYl9zZXJpYWxfYnVzX3R5cGU7CisJCXBvcnQtPmRldi5yZWxlYXNlID0gJnBvcnRfcmVsZWFzZTsKKwkJZGV2aWNlX2luaXRpYWxpemUoJnBvcnQtPmRldik7CiAJfQogCiAJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwpAQCAtOTcwLDYgKzk2NywxMCBAQAogCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJObyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCX0KKwkJcG9ydC0+d3JpdGVfZmlmbyA9IGtmaWZvX2FsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCwKKwkJCSZwb3J0LT5sb2NrKTsKKwkJaWYgKElTX0VSUihwb3J0LT53cml0ZV9maWZvKSkKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAkJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOwogCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKQEAgLTEwNzcsMTUgKzEwNzgsMTAgQEAKIAkvKiByZWdpc3RlciBhbGwgb2YgdGhlIGluZGl2aWR1YWwgcG9ydHMgd2l0aCB0aGUgZHJpdmVyIGNvcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKLQkJcG9ydC0+ZGV2LnBhcmVudCA9ICZpbnRlcmZhY2UtPmRldjsKLQkJcG9ydC0+ZGV2LmRyaXZlciA9IE5VTEw7Ci0JCXBvcnQtPmRldi5idXMgPSAmdXNiX3NlcmlhbF9idXNfdHlwZTsKLQkJcG9ydC0+ZGV2LnJlbGVhc2UgPSAmcG9ydF9yZWxlYXNlOwotCiAJCWRldl9zZXRfbmFtZSgmcG9ydC0+ZGV2LCAidHR5VVNCJWQiLCBwb3J0LT5udW1iZXIpOwogCQlkYmcgKCIlcyAtIHJlZ2lzdGVyaW5nICVzIiwgX19mdW5jX18sIGRldl9uYW1lKCZwb3J0LT5kZXYpKTsKIAkJcG9ydC0+ZGV2X3N0YXRlID0gUE9SVF9SRUdJU1RFUklORzsKLQkJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5kZXYpOworCQlyZXR2YWwgPSBkZXZpY2VfYWRkKCZwb3J0LT5kZXYpOwogCQlpZiAocmV0dmFsKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJFcnJvciByZWdpc3RlcmluZyBwb3J0IGRldmljZSwgIgogCQkJCSJjb250aW51aW5nXG4iKTsKQEAgLTExMDMsMzkgKzEwOTksNyBAQAogCXJldHVybiAwOwogCiBwcm9iZV9lcnJvcjoKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfaW47ICsraSkgewotCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQlpZiAoIXBvcnQpCi0JCQljb250aW51ZTsKLQkJdXNiX2ZyZWVfdXJiKHBvcnQtPnJlYWRfdXJiKTsKLQkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfb3V0OyArK2kpIHsKLQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKLQkJaWYgKCFwb3J0KQotCQkJY29udGludWU7Ci0JCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOwotCQlrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVycnVwdF9pbjsgKytpKSB7Ci0JCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmICghcG9ydCkKLQkJCWNvbnRpbnVlOwotCQl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Ci0JCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVycnVwdF9vdXQ7ICsraSkgewotCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQlpZiAoIXBvcnQpCi0JCQljb250aW51ZTsKLQkJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKLQkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIpOwotCX0KLQotCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpCi0JCWtmcmVlKHNlcmlhbC0+cG9ydFtpXSk7Ci0Ja2ZyZWUoc2VyaWFsKTsKKwl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwogCXJldHVybiAtRUlPOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9wcm9iZSk7CkBAIC0xMTYxLDEwICsxMTI1LDcgQEAKIAkJaWYgKHBvcnQpIHsKIAkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJCWlmICh0dHkpIHsKLQkJCQkvKiBUaGUgaGFuZ3VwIHdpbGwgb2NjdXIgYXN5bmNocm9ub3VzbHkgYnV0Ci0JCQkJICAgdGhlIG9iamVjdCByZWZjb3VudHMgd2lsbCBzb3J0IG91dCBhbGwgdGhlCi0JCQkJICAgY2xlYW51cCAqLwotCQkJCXR0eV9oYW5ndXAodHR5KTsKKwkJCQl0dHlfdmhhbmd1cCh0dHkpOwogCQkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQkJfQogCQkJa2lsbF90cmFmZmljKHBvcnQpOwpAQCAtMTE4OSw4ICsxMTUwLDcgQEAKIAl9CiAJc2VyaWFsLT50eXBlLT5kaXNjb25uZWN0KHNlcmlhbCk7CiAKLQkvKiBsZXQgdGhlIGxhc3QgaG9sZGVyIG9mIHRoaXMgb2JqZWN0Ci0JICogY2F1c2UgaXQgdG8gYmUgY2xlYW5lZCB1cCAqLworCS8qIGxldCB0aGUgbGFzdCBob2xkZXIgb2YgdGhpcyBvYmplY3QgY2F1c2UgaXQgdG8gYmUgY2xlYW5lZCB1cCAqLwogCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7CiAJZGV2X2luZm8oZGV2LCAiZGV2aWNlIGRpc2Nvbm5lY3RlZFxuIik7CiB9CkBAIC0xMjA0LDE1ICsxMTY0LDE5IEBACiAKIAlzZXJpYWwtPnN1c3BlbmRpbmcgPSAxOwogCisJaWYgKHNlcmlhbC0+dHlwZS0+c3VzcGVuZCkgeworCQlyID0gc2VyaWFsLT50eXBlLT5zdXNwZW5kKHNlcmlhbCwgbWVzc2FnZSk7CisJCWlmIChyIDwgMCkKKwkJCWdvdG8gZXJyX291dDsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlpZiAocG9ydCkKIAkJCWtpbGxfdHJhZmZpYyhwb3J0KTsKIAl9CiAKLQlpZiAoc2VyaWFsLT50eXBlLT5zdXNwZW5kKQotCQlyID0gc2VyaWFsLT50eXBlLT5zdXNwZW5kKHNlcmlhbCwgbWVzc2FnZSk7Ci0KK2Vycl9vdXQ6CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9zZXJpYWxfc3VzcGVuZCk7CkBAIC0xMjQ2LDYgKzEyMTAsOCBAQAogCS5jaGFyc19pbl9idWZmZXIgPQlzZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAogCS50aW9jbWdldCA9CQlzZXJpYWxfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCXNlcmlhbF90aW9jbXNldCwKKwkuc2h1dGRvd24gPSAJCXNlcmlhbF9yZWxlYXNlLAorCS5pbnN0YWxsID0gCQlzZXJpYWxfaW5zdGFsbCwKIAkucHJvY19mb3BzID0JCSZzZXJpYWxfcHJvY19mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCmluZGV4IDYxNDgwMDkuLjdiNWJmYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKQEAgLTQzLDExICs0MywxMCBAQAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwogCi1zdGF0aWMgaW50IHVzYl9kZWJ1Z19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCQkJc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHVzYl9kZWJ1Z19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IFVTQl9ERUJVR19NQVhfUEFDS0VUX1NJWkU7Ci0JcmV0dXJuIHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCwgZmlscCk7CisJcmV0dXJuIHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCk7CiB9CiAKIC8qIFRoaXMgSFcgcmVhbGx5IGRvZXMgbm90IHN1cHBvcnQgYSBzZXJpYWwgYnJlYWssIHNvIG9uZSB3aWxsIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IGY1ZDBmNjQuLjFhYTVkMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC0zNiw4ICszNiw3IEBACiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgSGFuZFNwcmluZyBWaXNvciAvIFBhbG0gT1MgZHJpdmVyIgogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhIGhhbmRzcHJpbmcgdmlzb3IgKi8KLXN0YXRpYyBpbnQgIHZpc29yX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgdmlzb3Jfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIHZpc29yX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCAgdmlzb3Jfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtMjczLDggKzI3Miw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIYW5kc3ByaW5nIFZpc29yIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHZpc29yX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgdmlzb3Jfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggOGQxMjZkZC4uNjI0MjRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiBzdGF0aWMgaW50ICB3aGl0ZWhlYXRfYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgd2hpdGVoZWF0X3JlbGVhc2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICB3aGl0ZWhlYXRfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICB3aGl0ZWhlYXRfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCkBAIC0yNTksNyArMjU5LDcgQEAKIAkJCQkJCV9fdTggKmRhdGEsIF9fdTggZGF0YXNpemUpOwogc3RhdGljIGludCBmaXJtX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50IGZpcm1fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50IGZpcm1fc2V0dXBfcG9ydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGZpcm1fc2V0dXBfcG9ydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyBpbnQgZmlybV9zZXRfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggb25vZmYpOwogc3RhdGljIGludCBmaXJtX3NldF9kdHIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CiBzdGF0aWMgaW50IGZpcm1fc2V0X2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggb25vZmYpOwpAQCAtNjU5LDggKzY1OSw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IHdoaXRlaGVhdF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQJCXJldHZhbCA9IDA7CiAKQEAgLTEyMTEsNyArMTIxMCw3IEBACiB9CiAKIAotc3RhdGljIGludCBmaXJtX3NldHVwX3BvcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyB2b2lkIGZpcm1fc2V0dXBfcG9ydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB3aGl0ZWhlYXRfcG9ydF9zZXR0aW5ncyBwb3J0X3NldHRpbmdzOwpAQCAtMTI4Niw3ICsxMjg1LDcgQEAKIAlwb3J0X3NldHRpbmdzLmxsb29wID0gMDsKIAogCS8qIG5vdyBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBkZXZpY2UgKi8KLQlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1NFVFVQX1BPUlQsCisJZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1NFVFVQX1BPUlQsCiAJCQkoX191OCAqKSZwb3J0X3NldHRpbmdzLCBzaXplb2YocG9ydF9zZXR0aW5ncykpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCmluZGV4IDJiNmU1NjUuLmRlZDgzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAJaW50IGNvdW50ID0gMCwgcmM7CiAKLQlpZiAoIXVzIHx8ICFpbmZvKQorCWlmICghaW5mbykKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAogCW1lbWNweShjb21tYW5kLCBzY29tbWFuZCwgOCk7CkBAIC0zOTksNyArMzk5LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpyZXBseTsKIAlpbnQgcmM7CiAKLQlpZiAoIXVzIHx8ICFpbmZvKQorCWlmICghaW5mbykKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAogCWlmIChpbmZvLT5sdW4gPT0gLTEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCmluZGV4IGVjMTdjOTYuLjEwNWQ5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYwpAQCAtMTAyLDUgKzEwMiw1IEBACiAJCQkJICAgICAgVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJCSAgICAgIDB4MDEsIDB4MCwgTlVMTCwgMHgwLCAxMDAwKTsKIAlVU19ERUJVR1AoIkh1YXdlaSBtb2RlIHNldCByZXN1bHQgaXMgJWRcbiIsIHJlc3VsdCk7Ci0JcmV0dXJuIChyZXN1bHQgPyAwIDogLUVOT0RFVik7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKaW5kZXggMWM2OTQyMC4uNjE2ODU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwpAQCAtMzM1LDcgKzMzNSw3IEBACiAJdW5zaWduZWQgY2hhciAqcmVwbHk7CiAJaW50IAkgcmM7CiAKLQlpZiAoIXVzIHx8ICFpbmZvKQorCWlmICghaW5mbykKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAogCWNvbW1hbmRbMF0gPSAweEUwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCmluZGV4IDM4MDIzM2IuLjgwZTY1ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCQkJdXNiX2tpbGxfdXJiKG9uZXRvdWNoLT5pcnEpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNfUkVTVU1FOgotCQkJaWYgKHVzYl9zdWJtaXRfdXJiKG9uZXRvdWNoLT5pcnEsIEdGUF9LRVJORUwpICE9IDApCisJCQlpZiAodXNiX3N1Ym1pdF91cmIob25ldG91Y2gtPmlycSwgR0ZQX05PSU8pICE9IDApCiAJCQkJZGV2X2Vycigmb25ldG91Y2gtPmlycS0+ZGV2LT5kZXYsCiAJCQkJCSJ1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCA3NDc3ZDQxLi4wNzlhZTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTY2LDEzICs2Niw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfUkVTSURVRSksCiAKLS8qIG1vZGlmaWVkIGJ5IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4gKi8KLVVOVVNVQUxfREVWKCAgMHgwM2VlLCAweDY5MDEsIDB4MDAwMCwgMHgwMjAwLAotCQkiTWl0c3VtaSIsCi0JCSJVU0IgRkREIiwKLQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLQogLyogUmVwb3J0ZWQgYnkgUm9kb2xmbyBRdWVzYWRhIDxycXVlc2FkYUByb3F6Lm5ldD4gKi8KIFVOVVNVQUxfREVWKCAgMHgwM2VlLCAweDY5MDYsIDB4MDAwMywgMHgwMDAzLAogCQkiVklBIFRlY2hub2xvZ2llcyBJbmMuIiwKQEAgLTIzMywxMyArMjI2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX01BWF9TRUNUT1JTXzY0ICksCiAKLS8qIFJlcG9ydGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gZnJvbSBub3ZlbGwgYnVnICMxMDU4NzggKi8KLVVOVVNVQUxfREVWKCAgMHgwNDI0LCAweDBmZGMsIDB4MDIxMCwgMHgwMjEwLAotCQkiU01TQyIsCi0JCSJGREMgR09MRC0yLjMwIiwKLQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLQogI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA0MzYsIDB4MDAwNSwgMHgwMTAwLCAweDAxMDAsCiAJCSJNaWNyb3RlY2giLApAQCAtNjY0LDE5ICs2NTAsMTMgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotCQkKKy8qIFdlIGtlZXAgdGhpcyBlbnRyeSB0byBmb3JjZSB0aGUgdHJhbnNwb3J0OyBmaXJtd2FyZSAzLjAwIGFuZCBsYXRlciBpcyBvay4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNTdiLCAweDAwMDAsIDB4MDAwMCwgMHgwMjk5LAogCQkiWS1FIERhdGEiLAogCQkiRmxhc2hidXN0ZXItVSIsCiAJCVVTX1NDX0RFVklDRSwgIFVTX1BSX0NCLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOKSwKIAotVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAwMCwgMHgwMzAwLCAweDk5OTksCi0JCSJZLUUgRGF0YSIsCi0JCSJGbGFzaGJ1c3Rlci1VIiwKLQkJVVNfU0NfREVWSUNFLCAgVVNfUFJfREVWSUNFLCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOKSwKLQogLyogUmVwb3J0ZWQgYnkgSm9oYW5uIENhcmRvbiA8am9oYW5uLmNhcmRvbkBmcmVlLmZyPgogICogVGhpcyBlbnRyeSBpcyBuZWVkZWQgb25seSBiZWNhdXNlIHRoZSBkZXZpY2UgcmVwb3J0cwogICogYkludGVyZmFjZUNsYXNzID0gMHhmZiAodmVuZG9yLXNwZWNpZmljKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCA2MGJhNjMxLi5iNjJmMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBVU0JfU0tFTF9QUk9EVUNUX0lECTB4ZmZmMAogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2tlbF90YWJsZSBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBza2VsX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9TS0VMX1ZFTkRPUl9JRCwgVVNCX1NLRUxfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtNTIsMTUgKzUyLDIxIEBACiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsJCS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCiAJc3RydWN0IHNlbWFwaG9yZQlsaW1pdF9zZW07CQkvKiBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHdyaXRlcyBpbiBwcm9ncmVzcyAqLwogCXN0cnVjdCB1c2JfYW5jaG9yCXN1Ym1pdHRlZDsJCS8qIGluIGNhc2Ugd2UgbmVlZCB0byByZXRyYWN0IG91ciBzdWJtaXNzaW9ucyAqLworCXN0cnVjdCB1cmIJCSpidWxrX2luX3VyYjsJCS8qIHRoZSB1cmIgdG8gcmVhZCBkYXRhIHdpdGggKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqYnVsa19pbl9idWZmZXI7CS8qIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhICovCiAJc2l6ZV90CQkJYnVsa19pbl9zaXplOwkJLyogdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCisJc2l6ZV90CQkJYnVsa19pbl9maWxsZWQ7CQkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciAqLworCXNpemVfdAkJCWJ1bGtfaW5fY29waWVkOwkJLyogYWxyZWFkeSBjb3BpZWQgdG8gdXNlciBzcGFjZSAqLwogCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcjsJLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KIAlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBvdXQgZW5kcG9pbnQgKi8KIAlpbnQJCQllcnJvcnM7CQkJLyogdGhlIGxhc3QgcmVxdWVzdCB0YW5rZWQgKi8KIAlpbnQJCQlvcGVuX2NvdW50OwkJLyogY291bnQgdGhlIG51bWJlciBvZiBvcGVuZXJzICovCisJYm9vbAkJCW9uZ29pbmdfcmVhZDsJCS8qIGEgcmVhZCBpcyBnb2luZyBvbiAqLworCWJvb2wJCQlwcm9jZXNzZWRfdXJiOwkJLyogaW5kaWNhdGVzIHdlIGhhdmVuJ3QgcHJvY2Vzc2VkIHRoZSB1cmIgKi8KIAlzcGlubG9ja190CQllcnJfbG9jazsJCS8qIGxvY2sgZm9yIGVycm9ycyAqLwogCXN0cnVjdCBrcmVmCQlrcmVmOwogCXN0cnVjdCBtdXRleAkJaW9fbXV0ZXg7CQkvKiBzeW5jaHJvbml6ZSBJL08gd2l0aCBkaXNjb25uZWN0ICovCisJc3RydWN0IGNvbXBsZXRpb24JYnVsa19pbl9jb21wbGV0aW9uOwkvKiB0byB3YWl0IGZvciBhbiBvbmdvaW5nIHJlYWQgKi8KIH07CiAjZGVmaW5lIHRvX3NrZWxfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NrZWwsIGtyZWYpCiAKQEAgLTcxLDYgKzc3LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NrZWwgKmRldiA9IHRvX3NrZWxfZGV2KGtyZWYpOwogCisJdXNiX2ZyZWVfdXJiKGRldi0+YnVsa19pbl91cmIpOwogCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CiAJa2ZyZWUoZGV2LT5idWxrX2luX2J1ZmZlcik7CiAJa2ZyZWUoZGV2KTsKQEAgLTg3LDcgKzk0LDcgQEAKIAogCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmc2tlbF9kcml2ZXIsIHN1Ym1pbm9yKTsKIAlpZiAoIWludGVyZmFjZSkgewotCQllcnIgKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAorCQllcnIoIiVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsCiAJCSAgICAgX19mdW5jX18sIHN1Ym1pbm9yKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwpAQCAtMTc0LDM4ICsxODEsMTkwIEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2tlbF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHZvaWQgc2tlbF9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OwotCWludCByZXR2YWw7Ci0JaW50IGJ5dGVzX3JlYWQ7CisKKwlkZXYgPSB1cmItPmNvbnRleHQ7CisKKwlzcGluX2xvY2soJmRldi0+ZXJyX2xvY2spOworCS8qIHN5bmMvYXN5bmMgdW5saW5rIGZhdWx0cyBhcmVuJ3QgZXJyb3JzICovCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWlmICghKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCSAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkKKwkJCWVycigiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkgICAgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKworCQlkZXYtPmVycm9ycyA9IHVyYi0+c3RhdHVzOworCX0gZWxzZSB7CisJCWRldi0+YnVsa19pbl9maWxsZWQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCWRldi0+b25nb2luZ19yZWFkID0gMDsKKwlzcGluX3VubG9jaygmZGV2LT5lcnJfbG9jayk7CisKKwljb21wbGV0ZSgmZGV2LT5idWxrX2luX2NvbXBsZXRpb24pOworfQorCitzdGF0aWMgaW50IHNrZWxfZG9fcmVhZF9pbyhzdHJ1Y3QgdXNiX3NrZWwgKmRldiwgc2l6ZV90IGNvdW50KQoreworCWludCBydjsKKworCS8qIHByZXBhcmUgYSByZWFkICovCisJdXNiX2ZpbGxfYnVsa191cmIoZGV2LT5idWxrX2luX3VyYiwKKwkJCWRldi0+dWRldiwKKwkJCXVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsCisJCQkJZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQlkZXYtPmJ1bGtfaW5fYnVmZmVyLAorCQkJbWluKGRldi0+YnVsa19pbl9zaXplLCBjb3VudCksCisJCQlza2VsX3JlYWRfYnVsa19jYWxsYmFjaywKKwkJCWRldik7CisJLyogdGVsbCBldmVyeWJvZHkgdG8gbGVhdmUgdGhlIFVSQiBhbG9uZSAqLworCXNwaW5fbG9ja19pcnEoJmRldi0+ZXJyX2xvY2spOworCWRldi0+b25nb2luZ19yZWFkID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+ZXJyX2xvY2spOworCisJLyogZG8gaXQgKi8KKwlydiA9IHVzYl9zdWJtaXRfdXJiKGRldi0+YnVsa19pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChydiA8IDApIHsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQlfX2Z1bmNfXywgcnYpOworCQlkZXYtPmJ1bGtfaW5fZmlsbGVkID0gMDsKKwkJcnYgPSAocnYgPT0gLUVOT01FTSkgPyBydiA6IC1FSU87CisJCXNwaW5fbG9ja19pcnEoJmRldi0+ZXJyX2xvY2spOworCQlkZXYtPm9uZ29pbmdfcmVhZCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5lcnJfbG9jayk7CisJfQorCisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgc3NpemVfdCBza2VsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorCQkJIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX3NrZWwgKmRldjsKKwlpbnQgcnY7CisJYm9vbCBvbmdvaW5nX2lvOwogCiAJZGV2ID0gKHN0cnVjdCB1c2Jfc2tlbCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAotCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCS8qIGlmIHdlIGNhbm5vdCByZWFkIGF0IGFsbCwgcmV0dXJuIEVPRiAqLworCWlmICghZGV2LT5idWxrX2luX3VyYiB8fCAhY291bnQpCisJCXJldHVybiAwOworCisJLyogbm8gY29uY3VycmVudCByZWFkZXJzICovCisJcnYgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+aW9fbXV0ZXgpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKwogCWlmICghZGV2LT5pbnRlcmZhY2UpIHsJCS8qIGRpc2Nvbm5lY3QoKSB3YXMgY2FsbGVkICovCi0JCXJldHZhbCA9IC1FTk9ERVY7CisJCXJ2ID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwogCX0KIAotCS8qIGRvIGEgYmxvY2tpbmcgYnVsayByZWFkIHRvIGdldCBkYXRhIGZyb20gdGhlIGRldmljZSAqLwotCXJldHZhbCA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsCi0JCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKLQkJCSAgICAgIGRldi0+YnVsa19pbl9idWZmZXIsCi0JCQkgICAgICBtaW4oZGV2LT5idWxrX2luX3NpemUsIGNvdW50KSwKLQkJCSAgICAgICZieXRlc19yZWFkLCAxMDAwMCk7CisJLyogaWYgSU8gaXMgdW5kZXIgd2F5LCB3ZSBtdXN0IG5vdCB0b3VjaCB0aGluZ3MgKi8KK3JldHJ5OgorCXNwaW5fbG9ja19pcnEoJmRldi0+ZXJyX2xvY2spOworCW9uZ29pbmdfaW8gPSBkZXYtPm9uZ29pbmdfcmVhZDsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+ZXJyX2xvY2spOwogCi0JLyogaWYgdGhlIHJlYWQgd2FzIHN1Y2Nlc3NmdWwsIGNvcHkgdGhlIGRhdGEgdG8gdXNlcnNwYWNlICovCi0JaWYgKCFyZXR2YWwpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGRldi0+YnVsa19pbl9idWZmZXIsIGJ5dGVzX3JlYWQpKQotCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0dmFsID0gYnl0ZXNfcmVhZDsKKwlpZiAob25nb2luZ19pbykgeworCQkvKiBub25ibG9ja2luZyBJTyBzaGFsbCBub3Qgd2FpdCAqLworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJ2ID0gLUVBR0FJTjsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKgorCQkgKiBJTyBtYXkgdGFrZSBmb3JldmVyCisJCSAqIGhlbmNlIHdhaXQgaW4gYW4gaW50ZXJydXB0aWJsZSBzdGF0ZQorCQkgKi8KKwkJcnYgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmRldi0+YnVsa19pbl9jb21wbGV0aW9uKTsKKwkJaWYgKHJ2IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJLyoKKwkJICogYnkgd2FpdGluZyB3ZSBhbHNvIHNlbWlwcm9jZXNzZWQgdGhlIHVyYgorCQkgKiB3ZSBtdXN0IGZpbmlzaCBub3cKKwkJICovCisJCWRldi0+YnVsa19pbl9jb3BpZWQgPSAwOworCQlkZXYtPnByb2Nlc3NlZF91cmIgPSAxOwogCX0KIAorCWlmICghZGV2LT5wcm9jZXNzZWRfdXJiKSB7CisJCS8qCisJCSAqIHRoZSBVUkIgaGFzbid0IGJlZW4gcHJvY2Vzc2VkCisJCSAqIGRvIGl0IG5vdworCQkgKi8KKwkJd2FpdF9mb3JfY29tcGxldGlvbigmZGV2LT5idWxrX2luX2NvbXBsZXRpb24pOworCQlkZXYtPmJ1bGtfaW5fY29waWVkID0gMDsKKwkJZGV2LT5wcm9jZXNzZWRfdXJiID0gMTsKKwl9CisKKwkvKiBlcnJvcnMgbXVzdCBiZSByZXBvcnRlZCAqLworCXJ2ID0gZGV2LT5lcnJvcnM7CisJaWYgKHJ2IDwgMCkgeworCQkvKiBhbnkgZXJyb3IgaXMgcmVwb3J0ZWQgb25jZSAqLworCQlkZXYtPmVycm9ycyA9IDA7CisJCS8qIHRvIHByZXNlcnZlIG5vdGlmaWNhdGlvbnMgYWJvdXQgcmVzZXQgKi8KKwkJcnYgPSAocnYgPT0gLUVQSVBFKSA/IHJ2IDogLUVJTzsKKwkJLyogbm8gZGF0YSB0byBkZWxpdmVyICovCisJCWRldi0+YnVsa19pbl9maWxsZWQgPSAwOworCQkvKiByZXBvcnQgaXQgKi8KKwkJZ290byBleGl0OworCX0KKworCS8qCisJICogaWYgdGhlIGJ1ZmZlciBpcyBmaWxsZWQgd2UgbWF5IHNhdGlzZnkgdGhlIHJlYWQKKwkgKiBlbHNlIHdlIG5lZWQgdG8gc3RhcnQgSU8KKwkgKi8KKworCWlmIChkZXYtPmJ1bGtfaW5fZmlsbGVkKSB7CisJCS8qIHdlIGhhZCByZWFkIGRhdGEgKi8KKwkJc2l6ZV90IGF2YWlsYWJsZSA9IGRldi0+YnVsa19pbl9maWxsZWQgLSBkZXYtPmJ1bGtfaW5fY29waWVkOworCQlzaXplX3QgY2h1bmsgPSBtaW4oYXZhaWxhYmxlLCBjb3VudCk7CisKKwkJaWYgKCFhdmFpbGFibGUpIHsKKwkJCS8qCisJCQkgKiBhbGwgZGF0YSBoYXMgYmVlbiB1c2VkCisJCQkgKiBhY3R1YWwgSU8gbmVlZHMgdG8gYmUgZG9uZQorCQkJICovCisJCQlydiA9IHNrZWxfZG9fcmVhZF9pbyhkZXYsIGNvdW50KTsKKwkJCWlmIChydiA8IDApCisJCQkJZ290byBleGl0OworCQkJZWxzZQorCQkJCWdvdG8gcmV0cnk7CisJCX0KKwkJLyoKKwkJICogZGF0YSBpcyBhdmFpbGFibGUKKwkJICogY2h1bmsgdGVsbHMgdXMgaG93IG11Y2ggc2hhbGwgYmUgY29waWVkCisJCSAqLworCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLAorCQkJCSBkZXYtPmJ1bGtfaW5fYnVmZmVyICsgZGV2LT5idWxrX2luX2NvcGllZCwKKwkJCQkgY2h1bmspKQorCQkJcnYgPSAtRUZBVUxUOworCQllbHNlCisJCQlydiA9IGNodW5rOworCisJCWRldi0+YnVsa19pbl9jb3BpZWQgKz0gY2h1bms7CisKKwkJLyoKKwkJICogaWYgd2UgYXJlIGFza2VkIGZvciBtb3JlIHRoYW4gd2UgaGF2ZSwKKwkJICogd2Ugc3RhcnQgSU8gYnV0IGRvbid0IHdhaXQKKwkJICovCisJCWlmIChhdmFpbGFibGUgPCBjb3VudCkKKwkJCXNrZWxfZG9fcmVhZF9pbyhkZXYsIGNvdW50IC0gY2h1bmspOworCX0gZWxzZSB7CisJCS8qIG5vIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworCQlydiA9IHNrZWxfZG9fcmVhZF9pbyhkZXYsIGNvdW50KTsKKwkJaWYgKHJ2IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJZWxzZSBpZiAoIWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJZ290byByZXRyeTsKKwkJcnYgPSAtRUFHQUlOOworCX0KIGV4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBydjsKIH0KIAogc3RhdGljIHZvaWQgc2tlbF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTIxNiw3ICszNzUsNyBAQAogCiAJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KIAlpZiAodXJiLT5zdGF0dXMpIHsKLQkJaWYoISh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8CisJCWlmICghKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKIAkJICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CiAJCSAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkKIAkJCWVycigiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCkBAIC0yMzMsNyArMzkyLDggQEAKIAl1cCgmZGV2LT5saW1pdF9zZW0pOwogfQogCi1zdGF0aWMgc3NpemVfdCBza2VsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICp1c2VyX2J1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBza2VsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICp1c2VyX2J1ZmZlciwKKwkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHVzYl9za2VsICpkZXY7CiAJaW50IHJldHZhbCA9IDA7CkBAIC0yNDcsMTQgKzQwNywyNSBAQAogCWlmIChjb3VudCA9PSAwKQogCQlnb3RvIGV4aXQ7CiAKLQkvKiBsaW1pdCB0aGUgbnVtYmVyIG9mIFVSQnMgaW4gZmxpZ2h0IHRvIHN0b3AgYSB1c2VyIGZyb20gdXNpbmcgdXAgYWxsIFJBTSAqLwotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+bGltaXRfc2VtKSkgewotCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7Ci0JCWdvdG8gZXhpdDsKKwkvKgorCSAqIGxpbWl0IHRoZSBudW1iZXIgb2YgVVJCcyBpbiBmbGlnaHQgdG8gc3RvcCBhIHVzZXIgZnJvbSB1c2luZyB1cCBhbGwKKwkgKiBSQU0KKwkgKi8KKwlpZiAoIWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+bGltaXRfc2VtKSkgeworCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQkJZ290byBleGl0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGRvd25fdHJ5bG9jaygmZGV2LT5saW1pdF9zZW0pKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJZ290byBleGl0OworCQl9CiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmZGV2LT5lcnJfbG9jayk7Ci0JaWYgKChyZXR2YWwgPSBkZXYtPmVycm9ycykgPCAwKSB7CisJcmV0dmFsID0gZGV2LT5lcnJvcnM7CisJaWYgKHJldHZhbCA8IDApIHsKIAkJLyogYW55IGVycm9yIGlzIHJlcG9ydGVkIG9uY2UgKi8KIAkJZGV2LT5lcnJvcnMgPSAwOwogCQkvKiB0byBwcmVzZXJ2ZSBub3RpZmljYXRpb25zIGFib3V0IHJlc2V0ICovCkBAIC0yNzEsNyArNDQyLDggQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dWRldiwgd3JpdGVzaXplLCBHRlBfS0VSTkVMLCAmdXJiLT50cmFuc2Zlcl9kbWEpOworCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LT51ZGV2LCB3cml0ZXNpemUsIEdGUF9LRVJORUwsCisJCQkgICAgICAgJnVyYi0+dHJhbnNmZXJfZG1hKTsKIAlpZiAoIWJ1ZikgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwpAQCAtMzAxLDExICs0NzMsMTUgQEAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwogCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXR2YWwpOworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLAorCQkgICAgcmV0dmFsKTsKIAkJZ290byBlcnJvcl91bmFuY2hvcjsKIAl9CiAKLQkvKiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhpcyB1cmIsIHRoZSBVU0IgY29yZSB3aWxsIGV2ZW50dWFsbHkgZnJlZSBpdCBlbnRpcmVseSAqLworCS8qCisJICogcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoaXMgdXJiLCB0aGUgVVNCIGNvcmUgd2lsbCBldmVudHVhbGx5IGZyZWUKKwkgKiBpdCBlbnRpcmVseQorCSAqLwogCXVzYl9mcmVlX3VyYih1cmIpOwogCiAKQEAgLTM0Myw3ICs1MTksOCBAQAogCS5taW5vcl9iYXNlID0JVVNCX1NLRUxfTUlOT1JfQkFTRSwKIH07CiAKLXN0YXRpYyBpbnQgc2tlbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHNrZWxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CkBAIC0zNjMsNiArNTQwLDcgQEAKIAltdXRleF9pbml0KCZkZXYtPmlvX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5lcnJfbG9jayk7CiAJaW5pdF91c2JfYW5jaG9yKCZkZXYtPnN1Ym1pdHRlZCk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmJ1bGtfaW5fY29tcGxldGlvbik7CiAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOwogCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwpAQCAtMzg0LDYgKzU2MiwxMSBAQAogCQkJCWVycigiQ291bGQgbm90IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyIik7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KKwkJCWRldi0+YnVsa19pbl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJaWYgKCFkZXYtPmJ1bGtfaW5fdXJiKSB7CisJCQkJZXJyKCJDb3VsZCBub3QgYWxsb2NhdGUgYnVsa19pbl91cmIiKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQogCQl9CiAKIAkJaWYgKCFkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmJgpAQCAtNDUzLDYgKzYzNiw3IEBACiAJdGltZSA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZkZXYtPnN1Ym1pdHRlZCwgMTAwMCk7CiAJaWYgKCF0aW1lKQogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkZXYtPnN1Ym1pdHRlZCk7CisJdXNiX2tpbGxfdXJiKGRldi0+YnVsa19pbl91cmIpOwogfQogCiBzdGF0aWMgaW50IHNrZWxfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCkBAIC00NjUsNyArNjQ5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBza2VsX3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCitzdGF0aWMgaW50IHNrZWxfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtaGMuaCBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLWhjLmgKaW5kZXggNTg2ZDM1MC4uZDZiZWEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtaGMuaAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1oYy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAgKiAgICAgICAgICAgICB0byBhbiBlbmRwb2ludCBvbiBhIFdVU0IgZGV2aWNlIHRoYXQgaXMgY29ubmVjdGVkIHRvIGEKICAqICAgICAgICAgICAgIEhXQSBSQy4KICAqCi0gKiAgeGZlciAgICAgICBUcmFuc2ZlciBtYW5hZ21lbnQgLS0gdGhpcyBpcyBhbGwgdGhlIGNvZGUgdGhhdCBnZXRzIGEKKyAqICB4ZmVyICAgICAgIFRyYW5zZmVyIG1hbmFnZW1lbnQgLS0gdGhpcyBpcyBhbGwgdGhlIGNvZGUgdGhhdCBnZXRzIGEKICAqICAgICAgICAgICAgIGJ1ZmZlciBhbmQgcHVzaGVzIGl0IHRvIGEgZGV2aWNlIChvciB2aWNldmVyc2EpLiAqCiAgKgogICogU29tZSBkYXkgYSBsb3Qgb2YgdGhpcyBjb2RlIHdpbGwgYmUgc2hhcmVkIGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL25ldGRldi5jIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC9uZXRkZXYuYwppbmRleCA3MzA1NTUzLi5iMjM2ZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL25ldGRldi5jCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvbmV0ZGV2LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiAJbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKICNpZmRlZiBpMTQ4MHVfRkxPV19DT05UUk9MCi0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoaTE0ODB1LT5ub3RpZl91cmIsIEdGUF9LRVJORUwpOzsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihpMTQ4MHUtPm5vdGlmX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJDYW4ndCBzdWJtaXQgbm90aWZpY2F0aW9uIFVSQjogJWRcbiIsIHJlc3VsdCk7CiAJCWdvdG8gZXJyb3Jfbm90aWZfdXJiX3N1Ym1pdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCAxMWFmNGNiLi45YmJiMjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC0xMjc1LDI2ICsxMjc1LDYgQEAKIAkgIHBhaW50aW5nIHByb2NlZHVyZXMgKHRoZSBzZWNvbmRhcnkgaGVhZCBkb2VzIG5vdCB1c2UgYWNjZWxlcmF0aW9uCiAJICBlbmdpbmUpLgogCi1jb25maWcgRkJfTUFUUk9YX01VTFRJSEVBRAotCWJvb2wgIk11bHRpaGVhZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkJfTUFUUk9YCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIChzdXBwb3J0ZWQpIE1hdHJveCBkZXZpY2UgaW4KLQkgIHlvdXIgY29tcHV0ZXIgYW5kIHlvdSB3YW50IHRvIHVzZSBhbGwgb2YgdGhlbSBmb3IgZGlmZmVyZW50IG1vbml0b3JzCi0JICAoIm11bHRpaGVhZCIpLiBJZiB5b3UgaGF2ZSBvbmx5IG9uZSBkZXZpY2UsIHlvdSBzaG91bGQgc2F5IE4gYmVjYXVzZQotCSAgdGhlIGRyaXZlciBjb21waWxlZCB3aXRoIFkgaXMgbGFyZ2VyIGFuZCBhIGJpdCBzbG93ZXIsIGVzcGVjaWFsbHkgb24KLQkgIGlhMzIgKGl4ODYpLgotCi0JICBJZiB5b3Ugc2FpZCBNIHRvICJNYXRyb3ggdW5pZmllZCBhY2NlbGVyYXRlZCBkcml2ZXIiIGFuZCBOIGhlcmUsIHlvdQotCSAgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIHVzZSBzZXZlcmFsIE1hdHJveCBkZXZpY2VzIHNpbXVsdGFuZW91c2x5OgotCSAgaW5zZXJ0IHNldmVyYWwgaW5zdGFuY2VzIG9mIHRoZSBtb2R1bGUgbWF0cm94ZmIgaW50byB0aGUga2VybmVsCi0JICB3aXRoIGluc21vZCwgc3VwcGx5aW5nIHRoZSBwYXJhbWV0ZXIgImRldj1OIiB3aGVyZSBOIGlzIDAsIDEsIGV0Yy4KLQkgIGZvciB0aGUgZGlmZmVyZW50IE1hdHJveCBkZXZpY2VzLiBUaGlzIG1ldGhvZCBpcyBzbGlnaHRseSBmYXN0ZXIgYnV0Ci0JICB1c2VzIDQwIEtCIG9mIGtlcm5lbCBtZW1vcnkgcGVyIE1hdHJveCBjYXJkLgotCi0JICBUaGVyZSBpcyBubyBuZWVkIGZvciBlbmFibGluZyAnTWF0cm94IG11bHRpaGVhZCBzdXBwb3J0JyBpZiB5b3UgaGF2ZQotCSAgb25seSBvbmUgTWF0cm94IGNhcmQgaW4gdGhlIGJveC4KLQogY29uZmlnIEZCX1JBREVPTgogCXRyaXN0YXRlICJBVEkgUmFkZW9uIGRpc3BsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQpAQCAtMjA0MSw2ICsyMDIxLDE3IEBACiAJICBhbmQgOCwgMTUgb3IgMTYgYnBwIGNvbG9yOyA5MCBkZWdyZWVzIGNsb2Nrd2lzZSBkaXNwbGF5IHJvdGF0aW9uIGZvcgogCSAgcGFuZWxzIDw9IDMyMCBwaXhlbCBob3Jpem9udGFsIHJlc29sdXRpb24uCiAKK2NvbmZpZyBGQl9EQThYWAorCXRyaXN0YXRlICJEQTh4eC9PTUFQLUwxeHggRnJhbWVidWZmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfREFWSU5DSV9EQThYWAorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIFRJIExDRCBjb250cm9sbGVyCisJICBmb3VuZCBvbiBEQTh4eC9PTUFQLUwxeHggU29Dcy4KKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBGQl9WSVJUVUFMCiAJdHJpc3RhdGUgIlZpcnR1YWwgRnJhbWUgQnVmZmVyIHN1cHBvcnQgKE9OTFkgRk9SIFRFU1RJTkchKSIKIAlkZXBlbmRzIG9uIEZCCkBAIC0yMTE3LDYgKzIxMDgsMTcgQEAKIAktLS1oZWxwLS0tCiAJICBGcmFtZWJ1ZmZlciBzdXBwb3J0IGZvciBGdWppdHN1IExpbWUgR0RDIG9uIGhvc3QgQ1BVIGJ1cy4KIAorY29uZmlnIEZCX0VQOTNYWAorCXRyaXN0YXRlICJFUDkzWFggZnJhbWUgYnVmZmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBBUkNIX0VQOTNYWAorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwktLS1oZWxwLS0tCisJICBGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIHRoZSBDaXJydXMgTG9naWMgRVA5M1hYIHNlcmllcyBvZiBwcm9jZXNzb3JzLgorCSAgVGhpcyBkcml2ZXIgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKKwkgIGVwOTN4eC1mYi4KKwogY29uZmlnIEZCX1BSRV9JTklUX0ZCCiAJYm9vbCAiRG9uJ3QgcmVpbml0aWFsaXplLCB1c2UgYm9vdGxvYWRlcidzIEdEQy9EaXNwbGF5IGNvbmZpZ3VyYXRpb24iCiAJZGVwZW5kcyBvbiBGQl9NQjg2MlhYX0xJTUUKQEAgLTIxMjQsNiArMjEyNiwxNCBAQAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIGRpc3BsYXkgY29udGVudHMgc2hvdWxkIGJlIGluaGVyaXRlZCBhcyBzZXQgYnkKIAkgIHRoZSBib290bG9hZGVyLgogCitjb25maWcgRkJfTVNNCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfTVNNCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWRlZmF1bHQgeQorCiBjb25maWcgRkJfTVgzCiAJdHJpc3RhdGUgIk1YMyBGcmFtZWJ1ZmZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgTVgzX0lQVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggMDFhODE5Zi4uODAyMzJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC04NSw2ICs4NSw3IEBACiBvYmotJChDT05GSUdfRkJfVEdBKSAgICAgICAgICAgICAgKz0gdGdhZmIubwogb2JqLSQoQ09ORklHX0ZCX0hQMzAwKSAgICAgICAgICAgICs9IGhwZmIubwogb2JqLSQoQ09ORklHX0ZCX0czNjQpICAgICAgICAgICAgICs9IGczNjRmYi5vCitvYmotJChDT05GSUdfRkJfRVA5M1hYKQkJICArPSBlcDkzeHgtZmIubwogb2JqLSQoQ09ORklHX0ZCX1NBMTEwMCkgICAgICAgICAgICs9IHNhMTEwMGZiLm8KIG9iai0kKENPTkZJR19GQl9ISVQpICAgICAgICAgICAgICArPSBoaXRmYi5vCiBvYmotJChDT05GSUdfRkJfRVBTT04xMzU1KQkgICs9IGVwc29uMTM1NWZiLm8KQEAgLTEyNiw2ICsxMjcsNyBAQAogb2JqLSQoQ09ORklHX1hFTl9GQkRFVl9GUk9OVEVORCkgICs9IHhlbi1mYmZyb250Lm8KIG9iai0kKENPTkZJR19GQl9DQVJNSU5FKSAgICAgICAgICArPSBjYXJtaW5lZmIubwogb2JqLSQoQ09ORklHX0ZCX01CODYyWFgpCSAgKz0gbWI4NjJ4eC8KK29iai0kKENPTkZJR19GQl9NU00pICAgICAgICAgICAgICArPSBtc20vCiAKICMgUGxhdGZvcm0gb3IgZmFsbGJhY2sgZHJpdmVycyBnbyBoZXJlCiBvYmotJChDT05GSUdfRkJfVVZFU0EpICAgICAgICAgICAgKz0gdXZlc2FmYi5vCkBAIC0xMzYsNiArMTM4LDcgQEAKIG9iai0kKENPTkZJR19GQl9CRjU0WF9MUTA0MykJICArPSBiZjU0eC1scTA0M2ZiLm8KIG9iai0kKENPTkZJR19GQl9CRklOX1QzNTBNQ1FCKQkgICs9IGJmaW4tdDM1MG1jcWItZmIubwogb2JqLSQoQ09ORklHX0ZCX01YMykJCSAgKz0gbXgzZmIubworb2JqLSQoQ09ORklHX0ZCX0RBOFhYKQkJICArPSBkYTh4eC1mYi5vCiAKICMgdGhlIHRlc3QgZnJhbWVidWZmZXIgaXMgbGFzdAogb2JqLSQoQ09ORklHX0ZCX1ZJUlRVQUwpICAgICAgICAgICs9IHZmYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggNjNkMzczOS4uOTEzYjRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBQUklOVEtJKGZtdCwgYXJncy4uLikJcHJpbnRrKEtFUk5fSU5GTyAiYXR5ZmI6ICIgZm10LCAjIyBhcmdzKQotI2RlZmluZSBQUklOVEtFKGZtdCwgYXJncy4uLikJIHByaW50ayhLRVJOX0VSUiAiYXR5ZmI6ICIgZm10LCAjIyBhcmdzKQorI2RlZmluZSBQUklOVEtFKGZtdCwgYXJncy4uLikJcHJpbnRrKEtFUk5fRVJSICJhdHlmYjogIiBmbXQsICMjIGFyZ3MpCiAKICNpZiBkZWZpbmVkKENPTkZJR19QTSkgfHwgZGVmaW5lZChDT05GSUdfUE1BQ19CQUNLTElHSFQpIHx8IFwKIGRlZmluZWQgKENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUWV9CQUNLTElHSFQpCkBAIC0xODgsMjQgKzE4OCwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBBVElSZWR1Y2VSYXRpbyhpbnQgKk51bWVyYXRvciwgaW50ICpEZW5vbWluYXRvcikKIHsKLSAgICBpbnQgTXVsdGlwbGllciwgRGl2aWRlciwgUmVtYWluZGVyOworCWludCBNdWx0aXBsaWVyLCBEaXZpZGVyLCBSZW1haW5kZXI7CiAKLSAgICBNdWx0aXBsaWVyID0gKk51bWVyYXRvcjsKLSAgICBEaXZpZGVyID0gKkRlbm9taW5hdG9yOworCU11bHRpcGxpZXIgPSAqTnVtZXJhdG9yOworCURpdmlkZXIgPSAqRGVub21pbmF0b3I7CiAKLSAgICB3aGlsZSAoKFJlbWFpbmRlciA9IE11bHRpcGxpZXIgJSBEaXZpZGVyKSkKLSAgICB7Ci0gICAgICAgIE11bHRpcGxpZXIgPSBEaXZpZGVyOwotICAgICAgICBEaXZpZGVyID0gUmVtYWluZGVyOwotICAgIH0KKwl3aGlsZSAoKFJlbWFpbmRlciA9IE11bHRpcGxpZXIgJSBEaXZpZGVyKSkgeworCQlNdWx0aXBsaWVyID0gRGl2aWRlcjsKKwkJRGl2aWRlciA9IFJlbWFpbmRlcjsKKwl9CiAKLSAgICAqTnVtZXJhdG9yIC89IERpdmlkZXI7Ci0gICAgKkRlbm9taW5hdG9yIC89IERpdmlkZXI7CisJKk51bWVyYXRvciAvPSBEaXZpZGVyOworCSpEZW5vbWluYXRvciAvPSBEaXZpZGVyOwogfQogI2VuZGlmCi0gICAgLyoKLSAgICAgKiAgVGhlIEhhcmR3YXJlIHBhcmFtZXRlcnMgZm9yIGVhY2ggY2FyZAotICAgICAqLworLyoKKyAqIFRoZSBIYXJkd2FyZSBwYXJhbWV0ZXJzIGZvciBlYWNoIGNhcmQKKyAqLwogCiBzdHJ1Y3QgcGNpX21tYXBfbWFwIHsKIAl1bnNpZ25lZCBsb25nIHZvZmY7CkBAIC0yMjMsMTcgKzIyMiwxOSBAQAogCS55cGFuc3RlcAk9IDEsCiB9OwogCi0gICAgLyoKLSAgICAgKiAgRnJhbWUgYnVmZmVyIGRldmljZSBBUEkKLSAgICAgKi8KKy8qCisgKiBGcmFtZSBidWZmZXIgZGV2aWNlIEFQSQorICovCiAKIHN0YXRpYyBpbnQgYXR5ZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpOwogc3RhdGljIGludCBhdHlmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcik7Ci1zdGF0aWMgaW50IGF0eWZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pOworc3RhdGljIGludCBhdHlmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGF0eWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pOwogc3RhdGljIGludCBhdHlmYl9zZXRjb2xyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCi0JdV9pbnQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGF0eWZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisJCQkgICB1X2ludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgYXR5ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgYXR5ZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGF0eWZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpOwogI2lmZGVmIF9fc3BhcmNfXwpAQCAtMjQxLDkgKzI0Miw5IEBACiAjZW5kaWYKIHN0YXRpYyBpbnQgYXR5ZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKLSAgICAvKgotICAgICAqICBJbnRlcm5hbCByb3V0aW5lcwotICAgICAqLworLyoKKyAqIEludGVybmFsIHJvdXRpbmVzCisgKi8KIAogc3RhdGljIGludCBhdHlfaW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKQEAgLTI1NCw4ICsyNTUsMTEgQEAKIHN0YXRpYyB2b2lkIGF0eV9nZXRfY3J0Yyhjb25zdCBzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIsIHN0cnVjdCBjcnRjICpjcnRjKTsKIAogc3RhdGljIHZvaWQgYXR5X3NldF9jcnRjKGNvbnN0IHN0cnVjdCBhdHlmYl9wYXIgKnBhciwgY29uc3Qgc3RydWN0IGNydGMgKmNydGMpOwotc3RhdGljIGludCBhdHlfdmFyX3RvX2NydGMoY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgY3J0YyAqY3J0Yyk7Ci1zdGF0aWMgaW50IGF0eV9jcnRjX3RvX3Zhcihjb25zdCBzdHJ1Y3QgY3J0YyAqY3J0Yywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOworc3RhdGljIGludCBhdHlfdmFyX3RvX2NydGMoY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICBjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgIHN0cnVjdCBjcnRjICpjcnRjKTsKK3N0YXRpYyBpbnQgYXR5X2NydGNfdG9fdmFyKGNvbnN0IHN0cnVjdCBjcnRjICpjcnRjLAorCQkJICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwogc3RhdGljIHZvaWQgc2V0X29mZl9waXRjaChzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIsIGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvKTsKICNpZmRlZiBDT05GSUdfUFBDCiBzdGF0aWMgaW50IHJlYWRfYXR5X3NlbnNlKGNvbnN0IHN0cnVjdCBhdHlmYl9wYXIgKnBhcik7CkBAIC0yNjQsOSArMjY4LDkgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVib290X2xvY2spOwogc3RhdGljIHN0cnVjdCBmYl9pbmZvICpyZWJvb3RfaW5mbzsKIAotICAgIC8qCi0gICAgICogIEludGVyZmFjZSB1c2VkIGJ5IHRoZSB3b3JsZAotICAgICAqLworLyoKKyAqIEludGVyZmFjZSB1c2VkIGJ5IHRoZSB3b3JsZAorICovCiAKIHN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGVmYXVsdF92YXIgPSB7CiAJLyogNjQweDQ4MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgyNS4xNzUgTUh6IGRvdGNsb2NrKSAqLwpAQCAtNDUyLDE0ICs0NTYsMTQgQEAKIAl0eXBlID0gY2hpcF9pZCAmIENGR19DSElQX1RZUEU7CiAJcmV2ID0gKGNoaXBfaWQgJiBDRkdfQ0hJUF9SRVYpID4+IDI0OwogCi0Jc3dpdGNoKHBhci0+cGNpX2lkKSB7CisJc3dpdGNoIChwYXItPnBjaV9pZCkgewogI2lmZGVmIENPTkZJR19GQl9BVFlfR1gKIAljYXNlIFBDSV9DSElQX01BQ0g2NEdYOgotCQlpZih0eXBlICE9IDB4MDBkNykKKwkJaWYgKHR5cGUgIT0gMHgwMGQ3KQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWJyZWFrOwogCWNhc2UgUENJX0NISVBfTUFDSDY0Q1g6Ci0JCWlmKHR5cGUgIT0gMHgwMDU3KQorCQlpZiAodHlwZSAhPSAweDAwNTcpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTU2NCw3ICs1NjgsOCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfRkJfQVRZX0NUICovCiAKLXN0YXRpYyB1MzIgYXR5ZmJfZ2V0X3BpeGNsb2NrKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIpCitzdGF0aWMgdTMyIGF0eWZiX2dldF9waXhjbG9jayhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgIHN0cnVjdCBhdHlmYl9wYXIgKnBhcikKIHsKIAl1MzIgcGl4Y2xvY2sgPSB2YXItPnBpeGNsb2NrOwogI2lmZGVmIENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QKQEAgLTU3Miw3ICs1NzcsNyBAQAogCXBhci0+cGxsLmN0LnhyZXMgPSAwOwogCWlmIChwYXItPmxjZF90YWJsZSAhPSAwKSB7CiAJCWxjZF9vbl9vZmYgPSBhdHlfbGRfbGNkKExDRF9HRU5fQ05UTCwgcGFyKTsKLQkJaWYobGNkX29uX29mZiAmIExDRF9PTikgeworCQlpZiAobGNkX29uX29mZiAmIExDRF9PTikgewogCQkJcGFyLT5wbGwuY3QueHJlcyA9IHZhci0+eHJlczsKIAkJCXBpeGNsb2NrID0gcGFyLT5sY2RfcGl4Y2xvY2s7CiAJCX0KQEAgLTU4NCw3ICs1ODksNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAogLyoKLSAqICBBcHBsZSBtb25pdG9yIHNlbnNlCisgKiBBcHBsZSBtb25pdG9yIHNlbnNlCiAgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgcmVhZF9hdHlfc2Vuc2UoY29uc3Qgc3RydWN0IGF0eWZiX3BhciAqcGFyKQpAQCAtNjI1LDE2ICs2MzAsMTYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqICBDUlRDIHByb2dyYW1taW5nCisgKiBDUlRDIHByb2dyYW1taW5nCiAgKi8KIAogc3RhdGljIHZvaWQgYXR5X2dldF9jcnRjKGNvbnN0IHN0cnVjdCBhdHlmYl9wYXIgKnBhciwgc3RydWN0IGNydGMgKmNydGMpCiB7CiAjaWZkZWYgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRAogCWlmIChwYXItPmxjZF90YWJsZSAhPSAwKSB7Ci0JCWlmKCFNNjRfSEFTKExUX0xDRF9SRUdTKSkgewotCQkgICAgY3J0Yy0+bGNkX2luZGV4ID0gYXR5X2xkX2xlMzIoTENEX0lOREVYLCBwYXIpOwotCQkgICAgYXR5X3N0X2xlMzIoTENEX0lOREVYLCBjcnRjLT5sY2RfaW5kZXgsIHBhcik7CisJCWlmICghTTY0X0hBUyhMVF9MQ0RfUkVHUykpIHsKKwkJCWNydGMtPmxjZF9pbmRleCA9IGF0eV9sZF9sZTMyKExDRF9JTkRFWCwgcGFyKTsKKwkJCWF0eV9zdF9sZTMyKExDRF9JTkRFWCwgY3J0Yy0+bGNkX2luZGV4LCBwYXIpOwogCQl9CiAJCWNydGMtPmxjZF9jb25maWdfcGFuZWwgPSBhdHlfbGRfbGNkKENORkdfUEFORUwsIHBhcik7CiAJCWNydGMtPmxjZF9nZW5fY250bCA9IGF0eV9sZF9sY2QoTENEX0dFTl9DTlRMLCBwYXIpOwpAQCAtNjQyLDcgKzY0Nyw3IEBACiAKIAkJLyogc3dpdGNoIHRvIG5vbiBzaGFkb3cgcmVnaXN0ZXJzICovCiAJCWF0eV9zdF9sY2QoTENEX0dFTl9DTlRMLCBjcnRjLT5sY2RfZ2VuX2NudGwgJgotICAgICAgICAgICAgICAgICAgICB+KENSVENfUldfU0VMRUNUIHwgU0hBRE9XX0VOIHwgU0hBRE9XX1JXX0VOKSwgcGFyKTsKKwkJCSAgIH4oQ1JUQ19SV19TRUxFQ1QgfCBTSEFET1dfRU4gfCBTSEFET1dfUldfRU4pLCBwYXIpOwogCiAJCS8qIHNhdmUgc3RyZXRjaGluZyAqLwogCQljcnRjLT5ob3J6X3N0cmV0Y2hpbmcgPSBhdHlfbGRfbGNkKEhPUlpfU1RSRVRDSElORywgcGFyKTsKQEAgLTY2Myw3ICs2NjgsNyBAQAogCWlmIChwYXItPmxjZF90YWJsZSAhPSAwKSB7CiAJCS8qIHN3aXRjaCB0byBzaGFkb3cgcmVnaXN0ZXJzICovCiAJCWF0eV9zdF9sY2QoTENEX0dFTl9DTlRMLCAoY3J0Yy0+bGNkX2dlbl9jbnRsICYgfkNSVENfUldfU0VMRUNUKSB8Ci0JCQlTSEFET1dfRU4gfCBTSEFET1dfUldfRU4sIHBhcik7CisJCQkgICBTSEFET1dfRU4gfCBTSEFET1dfUldfRU4sIHBhcik7CiAKIAkJY3J0Yy0+c2hhZG93X2hfdG90X2Rpc3AgPSBhdHlfbGRfbGUzMihDUlRDX0hfVE9UQUxfRElTUCwgcGFyKTsKIAkJY3J0Yy0+c2hhZG93X2hfc3luY19zdHJ0X3dpZCA9IGF0eV9sZF9sZTMyKENSVENfSF9TWU5DX1NUUlRfV0lELCBwYXIpOwpAQCAtNjgwLDIxICs2ODUsMjAgQEAKICNpZmRlZiBDT05GSUdfRkJfQVRZX0dFTkVSSUNfTENECiAJaWYgKHBhci0+bGNkX3RhYmxlICE9IDApIHsKIAkJLyogc3RvcCBDUlRDICovCi0JCWF0eV9zdF9sZTMyKENSVENfR0VOX0NOVEwsIGNydGMtPmdlbl9jbnRsICYgfihDUlRDX0VYVF9ESVNQX0VOIHwgQ1JUQ19FTiksIHBhcik7CisJCWF0eV9zdF9sZTMyKENSVENfR0VOX0NOVEwsIGNydGMtPmdlbl9jbnRsICYKKwkJCSAgICB+KENSVENfRVhUX0RJU1BfRU4gfCBDUlRDX0VOKSwgcGFyKTsKIAogCQkvKiB1cGRhdGUgbm9uLXNoYWRvdyByZWdpc3RlcnMgZmlyc3QgKi8KIAkJYXR5X3N0X2xjZChDTkZHX1BBTkVMLCBjcnRjLT5sY2RfY29uZmlnX3BhbmVsLCBwYXIpOwogCQlhdHlfc3RfbGNkKExDRF9HRU5fQ05UTCwgY3J0Yy0+bGNkX2dlbl9jbnRsICYKLQkJCX4oQ1JUQ19SV19TRUxFQ1QgfCBTSEFET1dfRU4gfCBTSEFET1dfUldfRU4pLCBwYXIpOworCQkJICAgfihDUlRDX1JXX1NFTEVDVCB8IFNIQURPV19FTiB8IFNIQURPV19SV19FTiksIHBhcik7CiAKIAkJLyogdGVtcG9yYXJpbHkgZGlzYWJsZSBzdHJldGNoaW5nICovCi0JCWF0eV9zdF9sY2QoSE9SWl9TVFJFVENISU5HLAotCQkJY3J0Yy0+aG9yel9zdHJldGNoaW5nICYKLQkJCX4oSE9SWl9TVFJFVENIX01PREUgfCBIT1JaX1NUUkVUQ0hfRU4pLCBwYXIpOwotCQlhdHlfc3RfbGNkKFZFUlRfU1RSRVRDSElORywKLQkJCWNydGMtPnZlcnRfc3RyZXRjaGluZyAmCi0JCQl+KFZFUlRfU1RSRVRDSF9SQVRJTzEgfCBWRVJUX1NUUkVUQ0hfUkFUSU8yIHwKLQkJCVZFUlRfU1RSRVRDSF9VU0UwIHwgVkVSVF9TVFJFVENIX0VOKSwgcGFyKTsKKwkJYXR5X3N0X2xjZChIT1JaX1NUUkVUQ0hJTkcsIGNydGMtPmhvcnpfc3RyZXRjaGluZyAmCisJCQkgICB+KEhPUlpfU1RSRVRDSF9NT0RFIHwgSE9SWl9TVFJFVENIX0VOKSwgcGFyKTsKKwkJYXR5X3N0X2xjZChWRVJUX1NUUkVUQ0hJTkcsIGNydGMtPnZlcnRfc3RyZXRjaGluZyAmCisJCQkgICB+KFZFUlRfU1RSRVRDSF9SQVRJTzEgfCBWRVJUX1NUUkVUQ0hfUkFUSU8yIHwKKwkJCSAgICAgVkVSVF9TVFJFVENIX1VTRTAgfCBWRVJUX1NUUkVUQ0hfRU4pLCBwYXIpOwogCX0KICNlbmRpZgogCS8qIHR1cm4gb2ZmIENSVCAqLwpAQCAtNzAyLDE3ICs3MDYsMTkgQEAKIAogCURQUklOVEsoInNldHRpbmcgdXAgQ1JUQ1xuIik7CiAJRFBSSU5USygic2V0IHByaW1hcnkgQ1JUIHRvICVpeCVpICVjJWMgY29tcG9zaXRlICVjXG4iLAotCSAgICAoKCgoY3J0Yy0+aF90b3RfZGlzcD4+MTYpICYgMHhmZikgKyAxKTw8MyksICgoKGNydGMtPnZfdG90X2Rpc3A+PjE2KSAmIDB4N2ZmKSArIDEpLAotCSAgICAoY3J0Yy0+aF9zeW5jX3N0cnRfd2lkICYgMHgyMDAwMDApPydOJzonUCcsIChjcnRjLT52X3N5bmNfc3RydF93aWQgJiAweDIwMDAwMCk/J04nOidQJywKLQkgICAgKGNydGMtPmdlbl9jbnRsICYgQ1JUQ19DU1lOQ19FTik/J1AnOidOJyk7CisJCSgoKChjcnRjLT5oX3RvdF9kaXNwID4+IDE2KSAmIDB4ZmYpICsgMSkgPDwgMyksCisJCSgoKGNydGMtPnZfdG90X2Rpc3AgPj4gMTYpICYgMHg3ZmYpICsgMSksCisJCShjcnRjLT5oX3N5bmNfc3RydF93aWQgJiAweDIwMDAwMCkgPyAnTicgOiAnUCcsCisJCShjcnRjLT52X3N5bmNfc3RydF93aWQgJiAweDIwMDAwMCkgPyAnTicgOiAnUCcsCisJCShjcnRjLT5nZW5fY250bCAmIENSVENfQ1NZTkNfRU4pID8gJ1AnIDogJ04nKTsKIAotCURQUklOVEsoIkNSVENfSF9UT1RBTF9ESVNQOiAleFxuIixjcnRjLT5oX3RvdF9kaXNwKTsKLQlEUFJJTlRLKCJDUlRDX0hfU1lOQ19TVFJUX1dJRDogJXhcbiIsY3J0Yy0+aF9zeW5jX3N0cnRfd2lkKTsKLQlEUFJJTlRLKCJDUlRDX1ZfVE9UQUxfRElTUDogJXhcbiIsY3J0Yy0+dl90b3RfZGlzcCk7Ci0JRFBSSU5USygiQ1JUQ19WX1NZTkNfU1RSVF9XSUQ6ICV4XG4iLGNydGMtPnZfc3luY19zdHJ0X3dpZCk7CisJRFBSSU5USygiQ1JUQ19IX1RPVEFMX0RJU1A6ICV4XG4iLCBjcnRjLT5oX3RvdF9kaXNwKTsKKwlEUFJJTlRLKCJDUlRDX0hfU1lOQ19TVFJUX1dJRDogJXhcbiIsIGNydGMtPmhfc3luY19zdHJ0X3dpZCk7CisJRFBSSU5USygiQ1JUQ19WX1RPVEFMX0RJU1A6ICV4XG4iLCBjcnRjLT52X3RvdF9kaXNwKTsKKwlEUFJJTlRLKCJDUlRDX1ZfU1lOQ19TVFJUX1dJRDogJXhcbiIsIGNydGMtPnZfc3luY19zdHJ0X3dpZCk7CiAJRFBSSU5USygiQ1JUQ19PRkZfUElUQ0g6ICV4XG4iLCBjcnRjLT5vZmZfcGl0Y2gpOwogCURQUklOVEsoIkNSVENfVkxJTkVfQ1JOVF9WTElORTogJXhcbiIsIGNydGMtPnZsaW5lX2NybnRfdmxpbmUpOwotCURQUklOVEsoIkNSVENfR0VOX0NOVEw6ICV4XG4iLGNydGMtPmdlbl9jbnRsKTsKKwlEUFJJTlRLKCJDUlRDX0dFTl9DTlRMOiAleFxuIiwgY3J0Yy0+Z2VuX2NudGwpOwogCiAJYXR5X3N0X2xlMzIoQ1JUQ19IX1RPVEFMX0RJU1AsIGNydGMtPmhfdG90X2Rpc3AsIHBhcik7CiAJYXR5X3N0X2xlMzIoQ1JUQ19IX1NZTkNfU1RSVF9XSUQsIGNydGMtPmhfc3luY19zdHJ0X3dpZCwgcGFyKTsKQEAgLTczMiwxNiArNzM4LDIyIEBACiAJaWYgKHBhci0+bGNkX3RhYmxlICE9IDApIHsKIAkJLyogc3dpdGNoIHRvIHNoYWRvdyByZWdpc3RlcnMgKi8KIAkJYXR5X3N0X2xjZChMQ0RfR0VOX0NOVEwsIChjcnRjLT5sY2RfZ2VuX2NudGwgJiB+Q1JUQ19SV19TRUxFQ1QpIHwKLQkJCShTSEFET1dfRU4gfCBTSEFET1dfUldfRU4pLCBwYXIpOworCQkJICAgU0hBRE9XX0VOIHwgU0hBRE9XX1JXX0VOLCBwYXIpOwogCiAJCURQUklOVEsoInNldCBzaGFkb3cgQ1JUIHRvICVpeCVpICVjJWNcbiIsCi0JCSAgICAoKCgoY3J0Yy0+c2hhZG93X2hfdG90X2Rpc3A+PjE2KSAmIDB4ZmYpICsgMSk8PDMpLCAoKChjcnRjLT5zaGFkb3dfdl90b3RfZGlzcD4+MTYpICYgMHg3ZmYpICsgMSksCi0JCSAgICAoY3J0Yy0+c2hhZG93X2hfc3luY19zdHJ0X3dpZCAmIDB4MjAwMDAwKT8nTic6J1AnLCAoY3J0Yy0+c2hhZG93X3Zfc3luY19zdHJ0X3dpZCAmIDB4MjAwMDAwKT8nTic6J1AnKTsKKwkJCSgoKChjcnRjLT5zaGFkb3dfaF90b3RfZGlzcCA+PiAxNikgJiAweGZmKSArIDEpIDw8IDMpLAorCQkJKCgoY3J0Yy0+c2hhZG93X3ZfdG90X2Rpc3AgPj4gMTYpICYgMHg3ZmYpICsgMSksCisJCQkoY3J0Yy0+c2hhZG93X2hfc3luY19zdHJ0X3dpZCAmIDB4MjAwMDAwKSA/ICdOJyA6ICdQJywKKwkJCShjcnRjLT5zaGFkb3dfdl9zeW5jX3N0cnRfd2lkICYgMHgyMDAwMDApID8gJ04nIDogJ1AnKTsKIAotCQlEUFJJTlRLKCJTSEFET1cgQ1JUQ19IX1RPVEFMX0RJU1A6ICV4XG4iLCBjcnRjLT5zaGFkb3dfaF90b3RfZGlzcCk7Ci0JCURQUklOVEsoIlNIQURPVyBDUlRDX0hfU1lOQ19TVFJUX1dJRDogJXhcbiIsIGNydGMtPnNoYWRvd19oX3N5bmNfc3RydF93aWQpOwotCQlEUFJJTlRLKCJTSEFET1cgQ1JUQ19WX1RPVEFMX0RJU1A6ICV4XG4iLCBjcnRjLT5zaGFkb3dfdl90b3RfZGlzcCk7Ci0JCURQUklOVEsoIlNIQURPVyBDUlRDX1ZfU1lOQ19TVFJUX1dJRDogJXhcbiIsIGNydGMtPnNoYWRvd192X3N5bmNfc3RydF93aWQpOworCQlEUFJJTlRLKCJTSEFET1cgQ1JUQ19IX1RPVEFMX0RJU1A6ICV4XG4iLAorCQkJY3J0Yy0+c2hhZG93X2hfdG90X2Rpc3ApOworCQlEUFJJTlRLKCJTSEFET1cgQ1JUQ19IX1NZTkNfU1RSVF9XSUQ6ICV4XG4iLAorCQkJY3J0Yy0+c2hhZG93X2hfc3luY19zdHJ0X3dpZCk7CisJCURQUklOVEsoIlNIQURPVyBDUlRDX1ZfVE9UQUxfRElTUDogJXhcbiIsCisJCQljcnRjLT5zaGFkb3dfdl90b3RfZGlzcCk7CisJCURQUklOVEsoIlNIQURPVyBDUlRDX1ZfU1lOQ19TVFJUX1dJRDogJXhcbiIsCisJCQljcnRjLT5zaGFkb3dfdl9zeW5jX3N0cnRfd2lkKTsKIAogCQlhdHlfc3RfbGUzMihDUlRDX0hfVE9UQUxfRElTUCwgY3J0Yy0+c2hhZG93X2hfdG90X2Rpc3AsIHBhcik7CiAJCWF0eV9zdF9sZTMyKENSVENfSF9TWU5DX1NUUlRfV0lELCBjcnRjLT5zaGFkb3dfaF9zeW5jX3N0cnRfd2lkLCBwYXIpOwpAQCAtNzUyLDE2ICs3NjQsMTYgQEAKIAkJRFBSSU5USygiTENEX0dFTl9DTlRMOiAleFxuIiwgY3J0Yy0+bGNkX2dlbl9jbnRsKTsKIAkJRFBSSU5USygiSE9SWl9TVFJFVENISU5HOiAleFxuIiwgY3J0Yy0+aG9yel9zdHJldGNoaW5nKTsKIAkJRFBSSU5USygiVkVSVF9TVFJFVENISU5HOiAleFxuIiwgY3J0Yy0+dmVydF9zdHJldGNoaW5nKTsKLQkJaWYoIU02NF9IQVMoTFRfTENEX1JFR1MpKQotCQkgICAgRFBSSU5USygiRVhUX1ZFUlRfU1RSRVRDSDogJXhcbiIsIGNydGMtPmV4dF92ZXJ0X3N0cmV0Y2gpOworCQlpZiAoIU02NF9IQVMoTFRfTENEX1JFR1MpKQorCQkJRFBSSU5USygiRVhUX1ZFUlRfU1RSRVRDSDogJXhcbiIsIGNydGMtPmV4dF92ZXJ0X3N0cmV0Y2gpOwogCiAJCWF0eV9zdF9sY2QoTENEX0dFTl9DTlRMLCBjcnRjLT5sY2RfZ2VuX2NudGwsIHBhcik7CiAJCWF0eV9zdF9sY2QoSE9SWl9TVFJFVENISU5HLCBjcnRjLT5ob3J6X3N0cmV0Y2hpbmcsIHBhcik7CiAJCWF0eV9zdF9sY2QoVkVSVF9TVFJFVENISU5HLCBjcnRjLT52ZXJ0X3N0cmV0Y2hpbmcsIHBhcik7Ci0JCWlmKCFNNjRfSEFTKExUX0xDRF9SRUdTKSkgewotCQkgICAgYXR5X3N0X2xjZChFWFRfVkVSVF9TVFJFVENILCBjcnRjLT5leHRfdmVydF9zdHJldGNoLCBwYXIpOwotCQkgICAgYXR5X2xkX2xlMzIoTENEX0lOREVYLCBwYXIpOwotCQkgICAgYXR5X3N0X2xlMzIoTENEX0lOREVYLCBjcnRjLT5sY2RfaW5kZXgsIHBhcik7CisJCWlmICghTTY0X0hBUyhMVF9MQ0RfUkVHUykpIHsKKwkJCWF0eV9zdF9sY2QoRVhUX1ZFUlRfU1RSRVRDSCwgY3J0Yy0+ZXh0X3ZlcnRfc3RyZXRjaCwgcGFyKTsKKwkJCWF0eV9sZF9sZTMyKExDRF9JTkRFWCwgcGFyKTsKKwkJCWF0eV9zdF9sZTMyKExDRF9JTkRFWCwgY3J0Yy0+bGNkX2luZGV4LCBwYXIpOwogCQl9CiAJfQogI2VuZGlmIC8qIENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QgKi8KQEAgLTc3OSw3ICs3OTEsOCBAQAogfQogCiBzdGF0aWMgaW50IGF0eV92YXJfdG9fY3J0Yyhjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQljb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGNydGMgKmNydGMpCisJCQkgICBjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgIHN0cnVjdCBjcnRjICpjcnRjKQogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IChzdHJ1Y3QgYXR5ZmJfcGFyICopIGluZm8tPnBhcjsKIAl1MzIgeHJlcywgeXJlcywgdnhyZXMsIHZ5cmVzLCB4b2Zmc2V0LCB5b2Zmc2V0LCBicHA7CkBAIC04MTQsMzQgKzgyNywzMiBAQAogCWlmIChicHAgPD0gOCkgewogCQlicHAgPSA4OwogCQlwaXhfd2lkdGggPSBDUlRDX1BJWF9XSURUSF84QlBQOwotCQlkcF9waXhfd2lkdGggPQotCQkgICAgSE9TVF84QlBQIHwgU1JDXzhCUFAgfCBEU1RfOEJQUCB8Ci0JCSAgICBCWVRFX09SREVSX0xTQl9UT19NU0I7CisJCWRwX3BpeF93aWR0aCA9IEhPU1RfOEJQUCB8IFNSQ184QlBQIHwgRFNUXzhCUFAgfAorCQkJQllURV9PUkRFUl9MU0JfVE9fTVNCOwogCQlkcF9jaGFpbl9tYXNrID0gRFBfQ0hBSU5fOEJQUDsKIAl9IGVsc2UgaWYgKGJwcCA8PSAxNSkgewogCQlicHAgPSAxNjsKIAkJcGl4X3dpZHRoID0gQ1JUQ19QSVhfV0lEVEhfMTVCUFA7CiAJCWRwX3BpeF93aWR0aCA9IEhPU1RfMTVCUFAgfCBTUkNfMTVCUFAgfCBEU1RfMTVCUFAgfAotCQkgICAgQllURV9PUkRFUl9MU0JfVE9fTVNCOworCQkJQllURV9PUkRFUl9MU0JfVE9fTVNCOwogCQlkcF9jaGFpbl9tYXNrID0gRFBfQ0hBSU5fMTVCUFA7CiAJfSBlbHNlIGlmIChicHAgPD0gMTYpIHsKIAkJYnBwID0gMTY7CiAJCXBpeF93aWR0aCA9IENSVENfUElYX1dJRFRIXzE2QlBQOwogCQlkcF9waXhfd2lkdGggPSBIT1NUXzE2QlBQIHwgU1JDXzE2QlBQIHwgRFNUXzE2QlBQIHwKLQkJICAgIEJZVEVfT1JERVJfTFNCX1RPX01TQjsKKwkJCUJZVEVfT1JERVJfTFNCX1RPX01TQjsKIAkJZHBfY2hhaW5fbWFzayA9IERQX0NIQUlOXzE2QlBQOwogCX0gZWxzZSBpZiAoYnBwIDw9IDI0ICYmIE02NF9IQVMoSU5URUdSQVRFRCkpIHsKIAkJYnBwID0gMjQ7CiAJCXBpeF93aWR0aCA9IENSVENfUElYX1dJRFRIXzI0QlBQOwotCQlkcF9waXhfd2lkdGggPQotCQkgICAgSE9TVF84QlBQIHwgU1JDXzhCUFAgfCBEU1RfOEJQUCB8Ci0JCSAgICBCWVRFX09SREVSX0xTQl9UT19NU0I7CisJCWRwX3BpeF93aWR0aCA9IEhPU1RfOEJQUCB8IFNSQ184QlBQIHwgRFNUXzhCUFAgfAorCQkJQllURV9PUkRFUl9MU0JfVE9fTVNCOwogCQlkcF9jaGFpbl9tYXNrID0gRFBfQ0hBSU5fMjRCUFA7CiAJfSBlbHNlIGlmIChicHAgPD0gMzIpIHsKIAkJYnBwID0gMzI7CiAJCXBpeF93aWR0aCA9IENSVENfUElYX1dJRFRIXzMyQlBQOwogCQlkcF9waXhfd2lkdGggPSBIT1NUXzMyQlBQIHwgU1JDXzMyQlBQIHwgRFNUXzMyQlBQIHwKLQkJICAgIEJZVEVfT1JERVJfTFNCX1RPX01TQjsKKwkJCUJZVEVfT1JERVJfTFNCX1RPX01TQjsKIAkJZHBfY2hhaW5fbWFzayA9IERQX0NIQUlOXzMyQlBQOwogCX0gZWxzZQogCQlGQUlMKCJpbnZhbGlkIGJwcCIpOwpAQCAtODU0LDkgKzg2NSw5IEBACiAJaF9zeW5jX3BvbCA9IHN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCA/IDAgOiAxOwogCXZfc3luY19wb2wgPSBzeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUID8gMCA6IDE7CiAKLQlpZigoeHJlcyA+IDE2MDApIHx8ICh5cmVzID4gMTIwMCkpIHsKKwlpZiAoKHhyZXMgPiAxNjAwKSB8fCAoeXJlcyA+IDEyMDApKSB7CiAJCUZBSUwoIk1BQ0g2NCBjaGlwcyBhcmUgZGVzaWduZWQgZm9yIG1heCAxNjAweDEyMDBcbiIKLQkJInNlbGVjdCBhbm90ZXIgcmVzb2x1dGlvbi4iKTsKKwkJICAgICAic2VsZWN0IGFub3RlciByZXNvbHV0aW9uLiIpOwogCX0KIAloX3N5bmNfc3RydCA9IGhfZGlzcCArIHZhci0+cmlnaHRfbWFyZ2luOwogCWhfc3luY19lbmQgPSBoX3N5bmNfc3RydCArIHZhci0+aHN5bmNfbGVuOwpAQCAtODY5LDExICs4ODAsMTIgQEAKIAogI2lmZGVmIENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QKIAlpZiAocGFyLT5sY2RfdGFibGUgIT0gMCkgewotCQlpZighTTY0X0hBUyhMVF9MQ0RfUkVHUykpIHsKLQkJICAgIHUzMiBsY2RfaW5kZXggPSBhdHlfbGRfbGUzMihMQ0RfSU5ERVgsIHBhcik7Ci0JCSAgICBjcnRjLT5sY2RfaW5kZXggPSBsY2RfaW5kZXggJgotCQkJfihMQ0RfSU5ERVhfTUFTSyB8IExDRF9ESVNQTEFZX0RJUyB8IExDRF9TUkNfU0VMIHwgQ1JUQzJfRElTUExBWV9ESVMpOwotCQkgICAgYXR5X3N0X2xlMzIoTENEX0lOREVYLCBsY2RfaW5kZXgsIHBhcik7CisJCWlmICghTTY0X0hBUyhMVF9MQ0RfUkVHUykpIHsKKwkJCXUzMiBsY2RfaW5kZXggPSBhdHlfbGRfbGUzMihMQ0RfSU5ERVgsIHBhcik7CisJCQljcnRjLT5sY2RfaW5kZXggPSBsY2RfaW5kZXggJgorCQkJCX4oTENEX0lOREVYX01BU0sgfCBMQ0RfRElTUExBWV9ESVMgfAorCQkJCSAgTENEX1NSQ19TRUwgfCBDUlRDMl9ESVNQTEFZX0RJUyk7CisJCQlhdHlfc3RfbGUzMihMQ0RfSU5ERVgsIGxjZF9pbmRleCwgcGFyKTsKIAkJfQogCiAJCWlmICghTTY0X0hBUyhNT0JJTF9CVVMpKQpAQCAtODg4LDEyICs5MDAsMTQgQEAKIAkJCVVTRV9TSEFET1dFRF9ST1dDVVIgfCBTSEFET1dfRU4gfCBTSEFET1dfUldfRU4pOwogCQljcnRjLT5sY2RfZ2VuX2NudGwgfD0gRE9OVF9TSEFET1dfVlBBUiB8IExPQ0tfOERPVDsKIAotCQlpZigoY3J0Yy0+bGNkX2dlbl9jbnRsICYgTENEX09OKSAmJgotCQkJKCh4cmVzID4gcGFyLT5sY2Rfd2lkdGgpIHx8ICh5cmVzID4gcGFyLT5sY2RfaGVpZ2h0KSkpIHsKLQkJCS8qIFdlIGNhbm5vdCBkaXNwbGF5IHRoZSBtb2RlIG9uIHRoZSBMQ0QuIElmIHRoZSBDUlQgaXMgZW5hYmxlZAotCQkJICAgd2UgY2FuIHR1cm4gb2ZmIHRoZSBMQ0QuCi0JCQkgICBJZiB0aGUgQ1JUIGlzIG9mZiwgaXQgaXNuJ3QgYSBnb29kIGlkZWEgdG8gc3dpdGNoIGl0IG9uOyB3ZSBkb24ndAotCQkJICAga25vdyBpZiBvbmUgaXMgY29ubmVjdGVkLiBTbyBpdCdzIGJldHRlciB0byBmYWlsIHRoZW4uCisJCWlmICgoY3J0Yy0+bGNkX2dlbl9jbnRsICYgTENEX09OKSAmJgorCQkgICAgKCh4cmVzID4gcGFyLT5sY2Rfd2lkdGgpIHx8ICh5cmVzID4gcGFyLT5sY2RfaGVpZ2h0KSkpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW5ub3QgZGlzcGxheSB0aGUgbW9kZSBvbiB0aGUgTENELiBJZiB0aGUgQ1JUIGlzCisJCQkgKiBlbmFibGVkIHdlIGNhbiB0dXJuIG9mZiB0aGUgTENELgorCQkJICogSWYgdGhlIENSVCBpcyBvZmYsIGl0IGlzbid0IGEgZ29vZCBpZGVhIHRvIHN3aXRjaCBpdAorCQkJICogb247IHdlIGRvbid0IGtub3cgaWYgb25lIGlzIGNvbm5lY3RlZC4gU28gaXQncyBiZXR0ZXIKKwkJCSAqIHRvIGZhaWwgdGhlbi4KIAkJCSAqLwogCQkJaWYgKGNydGMtPmxjZF9nZW5fY250bCAmIENSVF9PTikgewogCQkJCWlmICghKHZhci0+YWN0aXZhdGUgJiBGQl9BQ1RJVkFURV9URVNUKSkKQEAgLTkxNiwxNyArOTMwLDE4IEBACiAKIAkJdm1vZGUgJj0gfihGQl9WTU9ERV9ET1VCTEUgfCBGQl9WTU9ERV9JTlRFUkxBQ0VEKTsKIAotCQkvKiBUaGlzIGlzIGhvcnJvciEgV2hlbiB3ZSBzaW11bGF0ZSwgc2F5IDY0MHg0ODAgb24gYW4gODAweDYwMAotCQkgICBMQ0QgbW9uaXRvciwgdGhlIENSVEMgc2hvdWxkIGJlIHByb2dyYW1tZWQgODAweDYwMCB2YWx1ZXMgZm9yCi0JCSAgIHRoZSBub24gdmlzaWJsZSBwYXJ0LCBidXQgNjQweDQ4MCBmb3IgdGhlIHZpc2libGUgcGFydC4KLQkJICAgVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBvbiBhIGxhcHRvcCB3aXRoIGl0J3MgMTQwMHgxMDUwIExDRAotCQkgICBtb25pdG9yIGFuZCBhIGNvbnZlbnRpb25hbCBtb25pdG9yIGJvdGggc3dpdGNoZWQgb24uCi0JCSAgIFRlc3RlZCBtb2RlczogMTI4MHgxMDI0LCAxMTUyeDg2NCwgMTAyNHg3NjgsIDgwMHg2MDAsCi0JCSAgICB3b3JrcyB3aXRoIGxpdHRsZSBnbGl0Y2hlcyBhbHNvIHdpdGggRE9VQkxFU0NBTiBtb2RlcworCQkvKgorCQkgKiBUaGlzIGlzIGhvcnJvciEgV2hlbiB3ZSBzaW11bGF0ZSwgc2F5IDY0MHg0ODAgb24gYW4gODAweDYwMAorCQkgKiBMQ0QgbW9uaXRvciwgdGhlIENSVEMgc2hvdWxkIGJlIHByb2dyYW1tZWQgODAweDYwMCB2YWx1ZXMgZm9yCisJCSAqIHRoZSBub24gdmlzaWJsZSBwYXJ0LCBidXQgNjQweDQ4MCBmb3IgdGhlIHZpc2libGUgcGFydC4KKwkJICogVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBvbiBhIGxhcHRvcCB3aXRoIGl0J3MgMTQwMHgxMDUwIExDRAorCQkgKiBtb25pdG9yIGFuZCBhIGNvbnZlbnRpb25hbCBtb25pdG9yIGJvdGggc3dpdGNoZWQgb24uCisJCSAqIFRlc3RlZCBtb2RlczogMTI4MHgxMDI0LCAxMTUyeDg2NCwgMTAyNHg3NjgsIDgwMHg2MDAsCisJCSAqIHdvcmtzIHdpdGggbGl0dGxlIGdsaXRjaGVzIGFsc28gd2l0aCBET1VCTEVTQ0FOIG1vZGVzCiAJCSAqLwogCQlpZiAoeXJlcyA8IHBhci0+bGNkX2hlaWdodCkgewogCQkJVlNjYW4gPSBwYXItPmxjZF9oZWlnaHQgLyB5cmVzOwotCQkJaWYoVlNjYW4gPiAxKSB7CisJCQlpZiAoVlNjYW4gPiAxKSB7CiAJCQkJVlNjYW4gPSAyOwogCQkJCXZtb2RlIHw9IEZCX1ZNT0RFX0RPVUJMRTsKIAkJCX0KQEAgLTk1Miw3ICs5NjcsNyBAQAogCUZBSUxfTUFYKCJoX2Rpc3AgdG9vIGxhcmdlIiwgaF9kaXNwLCAweGZmKTsKIAlGQUlMX01BWCgiaF9zeW5jX3N0cnQgdG9vIGxhcmdlIiwgaF9zeW5jX3N0cnQsIDB4MWZmKTsKIAkvKkZBSUxfTUFYKCJoX3N5bmNfd2lkIHRvbyBsYXJnZSIsIGhfc3luY193aWQsIDB4MWYpOyovCi0JaWYoaF9zeW5jX3dpZCA+IDB4MWYpCisJaWYgKGhfc3luY193aWQgPiAweDFmKQogCQloX3N5bmNfd2lkID0gMHgxZjsKIAlGQUlMX01BWCgiaF90b3RhbCB0b28gbGFyZ2UiLCBoX3RvdGFsLCAweDFmZik7CiAKQEAgLTk3OCw3ICs5OTMsNyBAQAogCUZBSUxfTUFYKCJ2X2Rpc3AgdG9vIGxhcmdlIiwgdl9kaXNwLCAweDdmZik7CiAJRkFJTF9NQVgoInZfc3luY19zdHNydCB0b28gbGFyZ2UiLCB2X3N5bmNfc3RydCwgMHg3ZmYpOwogCS8qRkFJTF9NQVgoInZfc3luY193aWQgdG9vIGxhcmdlIiwgdl9zeW5jX3dpZCwgMHgxZik7Ki8KLQlpZih2X3N5bmNfd2lkID4gMHgxZikKKwlpZiAodl9zeW5jX3dpZCA+IDB4MWYpCiAJCXZfc3luY193aWQgPSAweDFmOwogCUZBSUxfTUFYKCJ2X3RvdGFsIHRvbyBsYXJnZSIsIHZfdG90YWwsIDB4N2ZmKTsKIApAQCAtOTk1LDExICsxMDEwLDEzIEBACiAJCSgobGluZV9sZW5ndGggLyBicHApIDw8IDIyKTsKIAljcnRjLT52bGluZV9jcm50X3ZsaW5lID0gMDsKIAotCWNydGMtPmhfdG90X2Rpc3AgPSBoX3RvdGFsIHwgKGhfZGlzcDw8MTYpOwotCWNydGMtPmhfc3luY19zdHJ0X3dpZCA9IChoX3N5bmNfc3RydCAmIDB4ZmYpIHwgKGhfc3luY19kbHk8PDgpIHwKLQkJKChoX3N5bmNfc3RydCAmIDB4MTAwKTw8NCkgfCAoaF9zeW5jX3dpZDw8MTYpIHwgKGhfc3luY19wb2w8PDIxKTsKLQljcnRjLT52X3RvdF9kaXNwID0gdl90b3RhbCB8ICh2X2Rpc3A8PDE2KTsKLQljcnRjLT52X3N5bmNfc3RydF93aWQgPSB2X3N5bmNfc3RydCB8ICh2X3N5bmNfd2lkPDwxNikgfCAodl9zeW5jX3BvbDw8MjEpOworCWNydGMtPmhfdG90X2Rpc3AgPSBoX3RvdGFsIHwgKGhfZGlzcCA8PCAxNik7CisJY3J0Yy0+aF9zeW5jX3N0cnRfd2lkID0gKGhfc3luY19zdHJ0ICYgMHhmZikgfCAoaF9zeW5jX2RseSA8PCA4KSB8CisJCSgoaF9zeW5jX3N0cnQgJiAweDEwMCkgPDwgNCkgfCAoaF9zeW5jX3dpZCA8PCAxNikgfAorCQkoaF9zeW5jX3BvbCA8PCAyMSk7CisJY3J0Yy0+dl90b3RfZGlzcCA9IHZfdG90YWwgfCAodl9kaXNwIDw8IDE2KTsKKwljcnRjLT52X3N5bmNfc3RydF93aWQgPSB2X3N5bmNfc3RydCB8ICh2X3N5bmNfd2lkIDw8IDE2KSB8CisJCSh2X3N5bmNfcG9sIDw8IDIxKTsKIAogCS8qIGNydGMtPmdlbl9jbnRsID0gYXR5X2xkX2xlMzIoQ1JUQ19HRU5fQ05UTCwgcGFyKSAmIENSVENfUFJFU0VSVkVEX01BU0s7ICovCiAJY3J0Yy0+Z2VuX2NudGwgPSBDUlRDX0VYVF9ESVNQX0VOIHwgQ1JUQ19FTiB8IHBpeF93aWR0aCB8IGNfc3luYzsKQEAgLTEwMTQsMTMgKzEwMzEsMTUgQEAKICNpZmRlZiBDT05GSUdfRkJfQVRZX0dFTkVSSUNfTENECiAJaWYgKHBhci0+bGNkX3RhYmxlICE9IDApIHsKIAkJdmRpc3BsYXkgPSB5cmVzOwotCQlpZih2bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkKKwkJaWYgKHZtb2RlICYgRkJfVk1PREVfRE9VQkxFKQogCQkJdmRpc3BsYXkgPDw9IDE7CiAJCWNydGMtPmdlbl9jbnRsICY9IH4oQ1JUQzJfRU4gfCBDUlRDMl9QSVhfV0lEVEgpOwogCQljcnRjLT5sY2RfZ2VuX2NudGwgJj0gfihIT1JaX0RJVkJZMl9FTiB8IERJU19IT1JfQ1JUX0RJVkJZMiB8Ci0JCQkvKlRWQ0xLX1BNX0VOIHwgVkNMS19EQUNfUE1fRU4gfCovCi0JCQlVU0VfU0hBRE9XRURfVkVORCB8IFVTRV9TSEFET1dFRF9ST1dDVVIgfCBTSEFET1dfRU4gfCBTSEFET1dfUldfRU4pOwotCQljcnRjLT5sY2RfZ2VuX2NudGwgfD0gKERPTlRfU0hBRE9XX1ZQQVIvKiB8IExPQ0tfOERPVCovKTsKKwkJCQkJLypUVkNMS19QTV9FTiB8IFZDTEtfREFDX1BNX0VOIHwqLworCQkJCQlVU0VfU0hBRE9XRURfVkVORCB8CisJCQkJCVVTRV9TSEFET1dFRF9ST1dDVVIgfAorCQkJCQlTSEFET1dfRU4gfCBTSEFET1dfUldfRU4pOworCQljcnRjLT5sY2RfZ2VuX2NudGwgfD0gRE9OVF9TSEFET1dfVlBBUi8qIHwgTE9DS184RE9UKi87CiAKIAkJLyogTU9CSUxJVFkgTTEgdGVzdGVkLCBGSVhNRTogTFQgKi8KIAkJY3J0Yy0+aG9yel9zdHJldGNoaW5nID0gYXR5X2xkX2xjZChIT1JaX1NUUkVUQ0hJTkcsIHBhcik7CkBAIC0xMDI4LDI4ICsxMDQ3LDMyIEBACiAJCQljcnRjLT5leHRfdmVydF9zdHJldGNoID0gYXR5X2xkX2xjZChFWFRfVkVSVF9TVFJFVENILCBwYXIpICYKIAkJCQl+KEFVVE9fVkVSVF9SQVRJTyB8IFZFUlRfU1RSRVRDSF9NT0RFIHwgVkVSVF9TVFJFVENIX1JBVElPMyk7CiAKLQkJY3J0Yy0+aG9yel9zdHJldGNoaW5nICY9Ci0JCQl+KEhPUlpfU1RSRVRDSF9SQVRJTyB8IEhPUlpfU1RSRVRDSF9MT09QIHwgQVVUT19IT1JaX1JBVElPIHwKLQkJCUhPUlpfU1RSRVRDSF9NT0RFIHwgSE9SWl9TVFJFVENIX0VOKTsKKwkJY3J0Yy0+aG9yel9zdHJldGNoaW5nICY9IH4oSE9SWl9TVFJFVENIX1JBVElPIHwKKwkJCQkJICAgSE9SWl9TVFJFVENIX0xPT1AgfCBBVVRPX0hPUlpfUkFUSU8gfAorCQkJCQkgICBIT1JaX1NUUkVUQ0hfTU9ERSB8IEhPUlpfU1RSRVRDSF9FTik7CiAJCWlmICh4cmVzIDwgcGFyLT5sY2Rfd2lkdGggJiYgY3J0Yy0+bGNkX2dlbl9jbnRsICYgTENEX09OKSB7CiAJCQlkbyB7CiAJCQkJLyoKLQkJCQkqIFRoZSBob3Jpem9udGFsIGJsZW5kZXIgbWlzYmVoYXZlcyB3aGVuIEhEaXNwbGF5IGlzIGxlc3MgdGhhbiBhCi0JCQkJKiBhIGNlcnRhaW4gdGhyZXNob2xkICg0NDAgZm9yIGEgMTAyNC13aWRlIHBhbmVsKS4gIEl0IGRvZXNuJ3QKLQkJCQkqIHN0cmV0Y2ggc3VjaCBtb2RlcyBlbm91Z2guICBVc2UgcGl4ZWwgcmVwbGljYXRpb24gaW5zdGVhZCBvZgotCQkJCSogYmxlbmRpbmcgdG8gc3RyZXRjaCBtb2RlcyB0aGF0IGNhbiBiZSBtYWRlIHRvIGV4YWN0bHkgZml0IHRoZQotCQkJCSogcGFuZWwgd2lkdGguICBUaGUgdW5kb2N1bWVudGVkICJOb0xDREJsZW5kIiBvcHRpb24gYWxsb3dzIHRoZQotCQkJCSogcGl4ZWwtcmVwbGljYXRlZCBtb2RlIHRvIGJlIHNsaWdodGx5IHdpZGVyIG9yIG5hcnJvd2VyIHRoYW4gdGhlCi0JCQkJKiBwYW5lbCB3aWR0aC4gIEl0IGFsc28gY2F1c2VzIGEgbW9kZSB0aGF0IGlzIGV4YWN0bHkgaGFsZiBhcyB3aWRlCi0JCQkJKiBhcyB0aGUgcGFuZWwgdG8gYmUgcGl4ZWwtcmVwbGljYXRlZCwgcmF0aGVyIHRoYW4gYmxlbmRlZC4KLQkJCQkqLworCQkJCSAqIFRoZSBob3Jpem9udGFsIGJsZW5kZXIgbWlzYmVoYXZlcyB3aGVuCisJCQkJICogSERpc3BsYXkgaXMgbGVzcyB0aGFuIGEgY2VydGFpbiB0aHJlc2hvbGQKKwkJCQkgKiAoNDQwIGZvciBhIDEwMjQtd2lkZSBwYW5lbCkuICBJdCBkb2Vzbid0CisJCQkJICogc3RyZXRjaCBzdWNoIG1vZGVzIGVub3VnaC4gIFVzZSBwaXhlbAorCQkJCSAqIHJlcGxpY2F0aW9uIGluc3RlYWQgb2YgYmxlbmRpbmcgdG8gc3RyZXRjaAorCQkJCSAqIG1vZGVzIHRoYXQgY2FuIGJlIG1hZGUgdG8gZXhhY3RseSBmaXQgdGhlCisJCQkJICogcGFuZWwgd2lkdGguICBUaGUgdW5kb2N1bWVudGVkICJOb0xDREJsZW5kIgorCQkJCSAqIG9wdGlvbiBhbGxvd3MgdGhlIHBpeGVsLXJlcGxpY2F0ZWQgbW9kZSB0bworCQkJCSAqIGJlIHNsaWdodGx5IHdpZGVyIG9yIG5hcnJvd2VyIHRoYW4gdGhlCisJCQkJICogcGFuZWwgd2lkdGguICBJdCBhbHNvIGNhdXNlcyBhIG1vZGUgdGhhdCBpcworCQkJCSAqIGV4YWN0bHkgaGFsZiBhcyB3aWRlIGFzIHRoZSBwYW5lbCB0byBiZQorCQkJCSAqIHBpeGVsLXJlcGxpY2F0ZWQsIHJhdGhlciB0aGFuIGJsZW5kZWQuCisJCQkJICovCiAJCQkJaW50IEhEaXNwbGF5ICA9IHhyZXMgJiB+NzsKIAkJCQlpbnQgblN0cmV0Y2ggID0gcGFyLT5sY2Rfd2lkdGggLyBIRGlzcGxheTsKIAkJCQlpbnQgUmVtYWluZGVyID0gcGFyLT5sY2Rfd2lkdGggJSBIRGlzcGxheTsKIAogCQkJCWlmICgoIVJlbWFpbmRlciAmJiAoKG5TdHJldGNoID4gMikpKSB8fAotCQkJCQkoKChIRGlzcGxheSAqIDE2KSAvIHBhci0+bGNkX3dpZHRoKSA8IDcpKSB7Ci0JCQkJCXN0YXRpYyBjb25zdCBjaGFyIFN0cmV0Y2hMb29wc1tdID0gezEwLCAxMiwgMTMsIDE1LCAxNn07CisJCQkJICAgICgoKEhEaXNwbGF5ICogMTYpIC8gcGFyLT5sY2Rfd2lkdGgpIDwgNykpIHsKKwkJCQkJc3RhdGljIGNvbnN0IGNoYXIgU3RyZXRjaExvb3BzW10gPSB7IDEwLCAxMiwgMTMsIDE1LCAxNiB9OwogCQkJCQlpbnQgaG9yel9zdHJldGNoX2xvb3AgPSAtMSwgQmVzdFJlbWFpbmRlcjsKIAkJCQkJaW50IE51bWVyYXRvciA9IEhEaXNwbGF5LCBEZW5vbWluYXRvciA9IHBhci0+bGNkX3dpZHRoOwogCQkJCQlpbnQgSW5kZXggPSA1OwpAQCAtMTA5OCwxMiArMTEyMSwxMiBAQAogCQkJCSgoKHZkaXNwbGF5ICogKFZFUlRfU1RSRVRDSF9SQVRJTzAgKyAxKSkgLyBwYXItPmxjZF9oZWlnaHQpICYgVkVSVF9TVFJFVENIX1JBVElPMCkpOwogCiAJCQlpZiAoIU02NF9IQVMoTFRfTENEX1JFR1MpICYmCi0JCQkgICAgeHJlcyA8PSAoTTY0X0hBUyhNT0JJTF9CVVMpPzEwMjQ6ODAwKSkKKwkJCSAgICB4cmVzIDw9IChNNjRfSEFTKE1PQklMX0JVUykgPyAxMDI0IDogODAwKSkKIAkJCQljcnRjLT5leHRfdmVydF9zdHJldGNoIHw9IFZFUlRfU1RSRVRDSF9NT0RFOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIERvbid0IHVzZSB2ZXJ0aWNhbCBibGVuZGluZyBpZiB0aGUgbW9kZSBpcyB0b28gd2lkZSBvciBub3QKLQkJCSAqIHZlcnRpY2FsbHkgc3RyZXRjaGVkLgorCQkJICogRG9uJ3QgdXNlIHZlcnRpY2FsIGJsZW5kaW5nIGlmIHRoZSBtb2RlIGlzIHRvbyB3aWRlCisJCQkgKiBvciBub3QgdmVydGljYWxseSBzdHJldGNoZWQuCiAJCQkgKi8KIAkJCWNydGMtPnZlcnRfc3RyZXRjaGluZyA9IDA7CiAJCX0KQEAgLTExMjUsMTEgKzExNDgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdHlfY3J0Y190b192YXIoY29uc3Qgc3RydWN0IGNydGMgKmNydGMsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQorc3RhdGljIGludCBhdHlfY3J0Y190b192YXIoY29uc3Qgc3RydWN0IGNydGMgKmNydGMsCisJCQkgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKIHsKIAl1MzIgeHJlcywgeXJlcywgYnBwLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sIHN5bmM7Ci0JdTMyIGhfdG90YWwsIGhfZGlzcCwgaF9zeW5jX3N0cnQsIGhfc3luY19kbHksIGhfc3luY193aWQsCi0JICAgIGhfc3luY19wb2w7CisJdTMyIGhfdG90YWwsIGhfZGlzcCwgaF9zeW5jX3N0cnQsIGhfc3luY19kbHksIGhfc3luY193aWQsIGhfc3luY19wb2w7CiAJdTMyIHZfdG90YWwsIHZfZGlzcCwgdl9zeW5jX3N0cnQsIHZfc3luY193aWQsIHZfc3luY19wb2wsIGNfc3luYzsKIAl1MzIgcGl4X3dpZHRoOwogCXUzMiBkb3VibGVfc2NhbiwgaW50ZXJsYWNlOwpAQCAtMTE2MSw4ICsxMTg0LDggQEAKIAlsb3dlciA9IHZfc3luY19zdHJ0IC0gdl9kaXNwOwogCXZzbGVuID0gdl9zeW5jX3dpZDsKIAlzeW5jID0gKGhfc3luY19wb2wgPyAwIDogRkJfU1lOQ19IT1JfSElHSF9BQ1QpIHwKLQkgICAgKHZfc3luY19wb2wgPyAwIDogRkJfU1lOQ19WRVJUX0hJR0hfQUNUKSB8Ci0JICAgIChjX3N5bmMgPyBGQl9TWU5DX0NPTVBfSElHSF9BQ1QgOiAwKTsKKwkJKHZfc3luY19wb2wgPyAwIDogRkJfU1lOQ19WRVJUX0hJR0hfQUNUKSB8CisJCShjX3N5bmMgPyBGQl9TWU5DX0NPTVBfSElHSF9BQ1QgOiAwKTsKIAogCXN3aXRjaCAocGl4X3dpZHRoKSB7CiAjaWYgMApAQCAtMTI1MiwyMCArMTI3NSwyMSBAQAogCXZhci0+dnN5bmNfbGVuID0gdnNsZW47CiAJdmFyLT5zeW5jID0gc3luYzsKIAl2YXItPnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKLQkvKiBJbiBkb3VibGUgc2NhbiBtb2RlLCB0aGUgdmVydGljYWwgcGFyYW1ldGVycyBhcmUgZG91YmxlZCwgc28gd2UgbmVlZCB0bwotCSAgIGhhbGYgdGhlbSB0byBnZXQgdGhlIHJpZ2h0IHZhbHVlcy4KLQkgICBJbiBpbnRlcmxhY2VkIG1vZGUgdGhlIHZhbHVlcyBhcmUgYWxyZWFkeSBjb3JyZWN0LCBzbyBubyBjb3JyZWN0aW9uIGlzCi0JICAgbmVjZXNzYXJ5LgorCS8qCisJICogSW4gZG91YmxlIHNjYW4gbW9kZSwgdGhlIHZlcnRpY2FsIHBhcmFtZXRlcnMgYXJlIGRvdWJsZWQsCisJICogc28gd2UgbmVlZCB0byBoYWx2ZSB0aGVtIHRvIGdldCB0aGUgcmlnaHQgdmFsdWVzLgorCSAqIEluIGludGVybGFjZWQgbW9kZSB0aGUgdmFsdWVzIGFyZSBhbHJlYWR5IGNvcnJlY3QsCisJICogc28gbm8gY29ycmVjdGlvbiBpcyBuZWNlc3NhcnkuCiAJICovCiAJaWYgKGludGVybGFjZSkKIAkJdmFyLT52bW9kZSA9IEZCX1ZNT0RFX0lOVEVSTEFDRUQ7CiAKIAlpZiAoZG91YmxlX3NjYW4pIHsKIAkJdmFyLT52bW9kZSA9IEZCX1ZNT0RFX0RPVUJMRTsKLQkJdmFyLT55cmVzPj49MTsKLQkJdmFyLT51cHBlcl9tYXJnaW4+Pj0xOwotCQl2YXItPmxvd2VyX21hcmdpbj4+PTE7Ci0JCXZhci0+dnN5bmNfbGVuPj49MTsKKwkJdmFyLT55cmVzID4+PSAxOworCQl2YXItPnVwcGVyX21hcmdpbiA+Pj0gMTsKKwkJdmFyLT5sb3dlcl9tYXJnaW4gPj49IDE7CisJCXZhci0+dnN5bmNfbGVuID4+PSAxOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTI4Niw3ICsxMzEwLDggQEAKIAlpZiAocGFyLT5hc2xlZXApCiAJCXJldHVybiAwOwogCi0JaWYgKChlcnIgPSBhdHlfdmFyX3RvX2NydGMoaW5mbywgdmFyLCAmcGFyLT5jcnRjKSkpCisJZXJyID0gYXR5X3Zhcl90b19jcnRjKGluZm8sIHZhciwgJnBhci0+Y3J0Yyk7CisJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCXBpeGNsb2NrID0gYXR5ZmJfZ2V0X3BpeGNsb2NrKHZhciwgcGFyKTsKQEAgLTEyOTUsNyArMTMyMCw5IEBACiAJCVBSSU5US0UoIkludmFsaWQgcGl4Y2xvY2tcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgewotCQlpZigoZXJyID0gcGFyLT5wbGxfb3BzLT52YXJfdG9fcGxsKGluZm8sIHBpeGNsb2NrLCB2YXItPmJpdHNfcGVyX3BpeGVsLCAmcGFyLT5wbGwpKSkKKwkJZXJyID0gcGFyLT5wbGxfb3BzLT52YXJfdG9fcGxsKGluZm8sIHBpeGNsb2NrLAorCQkJCQkgICAgICAgdmFyLT5iaXRzX3Blcl9waXhlbCwgJnBhci0+cGxsKTsKKwkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xMzEzLDIyICsxMzQwLDIzIEBACiAJCXdhaXRfZm9yX2lkbGUocGFyKTsKIAogCWF0eV9zZXRfY3J0YyhwYXIsICZwYXItPmNydGMpOwotCXBhci0+ZGFjX29wcy0+c2V0X2RhYyhpbmZvLCAmcGFyLT5wbGwsIHZhci0+Yml0c19wZXJfcGl4ZWwsIHBhci0+YWNjZWxfZmxhZ3MpOworCXBhci0+ZGFjX29wcy0+c2V0X2RhYyhpbmZvLCAmcGFyLT5wbGwsCisJCQkgICAgICB2YXItPmJpdHNfcGVyX3BpeGVsLCBwYXItPmFjY2VsX2ZsYWdzKTsKIAlwYXItPnBsbF9vcHMtPnNldF9wbGwoaW5mbywgJnBhci0+cGxsKTsKIAogI2lmZGVmIERFQlVHCi0JaWYocGFyLT5wbGxfb3BzICYmIHBhci0+cGxsX29wcy0+cGxsX3RvX3ZhcikKLQkJcGl4Y2xvY2tfaW5fcHMgPSBwYXItPnBsbF9vcHMtPnBsbF90b192YXIoaW5mbywgJihwYXItPnBsbCkpOworCWlmIChwYXItPnBsbF9vcHMgJiYgcGFyLT5wbGxfb3BzLT5wbGxfdG9fdmFyKQorCQlwaXhjbG9ja19pbl9wcyA9IHBhci0+cGxsX29wcy0+cGxsX3RvX3ZhcihpbmZvLCAmcGFyLT5wbGwpOwogCWVsc2UKIAkJcGl4Y2xvY2tfaW5fcHMgPSAwOwogCi0JaWYoMCA9PSBwaXhjbG9ja19pbl9wcykgeworCWlmICgwID09IHBpeGNsb2NrX2luX3BzKSB7CiAJCVBSSU5US0UoIkFMRVJUIG9wcy0+cGxsX3RvX3ZhciBnZXQgMFxuIik7CiAJCXBpeGNsb2NrX2luX3BzID0gcGl4Y2xvY2s7CiAJfQogCiAJbWVtc2V0KCZkZWJ1ZywgMCwgc2l6ZW9mKGRlYnVnKSk7Ci0JaWYoIWF0eV9jcnRjX3RvX3ZhcigmKHBhci0+Y3J0YyksICZkZWJ1ZykpIHsKKwlpZiAoIWF0eV9jcnRjX3RvX3ZhcigmcGFyLT5jcnRjLCAmZGVidWcpKSB7CiAJCXUzMiBoU3luYywgdlJlZnJlc2g7CiAJCXUzMiBoX2Rpc3AsIGhfc3luY19zdHJ0LCBoX3N5bmNfZW5kLCBoX3RvdGFsOwogCQl1MzIgdl9kaXNwLCB2X3N5bmNfc3RydCwgdl9zeW5jX2VuZCwgdl90b3RhbDsKQEAgLTEzNDQsMTYgKzEzNzIsMjAgQEAKIAogCQloU3luYyA9IDEwMDAwMDAwMDAgLyAocGl4Y2xvY2tfaW5fcHMgKiBoX3RvdGFsKTsKIAkJdlJlZnJlc2ggPSAoaFN5bmMgKiAxMDAwKSAvIHZfdG90YWw7Ci0gICAgICAgIAlpZiAocGFyLT5jcnRjLmdlbl9jbnRsICYgQ1JUQ19JTlRFUkxBQ0VfRU4pCi0gICAgICAgICAgICAJdlJlZnJlc2ggKj0gMjsKLSAgICAgICAgCWlmIChwYXItPmNydGMuZ2VuX2NudGwgJiBDUlRDX0RCTF9TQ0FOX0VOKQotICAgICAgICAgICAgCXZSZWZyZXNoIC89IDI7CisJCWlmIChwYXItPmNydGMuZ2VuX2NudGwgJiBDUlRDX0lOVEVSTEFDRV9FTikKKwkJCXZSZWZyZXNoICo9IDI7CisJCWlmIChwYXItPmNydGMuZ2VuX2NudGwgJiBDUlRDX0RCTF9TQ0FOX0VOKQorCQkJdlJlZnJlc2ggLz0gMjsKIAogCQlEUFJJTlRLKCJhdHlmYl9zZXRfcGFyXG4iKTsKLQkJRFBSSU5USygiIFNldCBWaXNpYmxlIE1vZGUgdG8gJWl4JWktJWlcbiIsIHZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKLQkJRFBSSU5USygiIFZpcnR1YWwgcmVzb2x1dGlvbiAlaXglaSwgcGl4Y2xvY2tfaW5fcHMgJWkgKGNhbGN1bGF0ZWQgJWkpXG4iLAotCQkJdmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eXJlc192aXJ0dWFsLCBwaXhjbG9jaywgcGl4Y2xvY2tfaW5fcHMpOwotCQlEUFJJTlRLKCIgRG90IGNsb2NrOiAgICAgICAgICAgJWkgTUh6XG4iLCAxMDAwMDAwIC8gcGl4Y2xvY2tfaW5fcHMpOworCQlEUFJJTlRLKCIgU2V0IFZpc2libGUgTW9kZSB0byAlaXglaS0laVxuIiwKKwkJCXZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJRFBSSU5USygiIFZpcnR1YWwgcmVzb2x1dGlvbiAlaXglaSwgIgorCQkJInBpeGNsb2NrX2luX3BzICVpIChjYWxjdWxhdGVkICVpKVxuIiwKKwkJCXZhci0+eHJlc192aXJ0dWFsLCB2YXItPnlyZXNfdmlydHVhbCwKKwkJCXBpeGNsb2NrLCBwaXhjbG9ja19pbl9wcyk7CisJCURQUklOVEsoIiBEb3QgY2xvY2s6ICAgICAgICAgICAlaSBNSHpcbiIsCisJCQkxMDAwMDAwIC8gcGl4Y2xvY2tfaW5fcHMpOwogCQlEUFJJTlRLKCIgSG9yaXpvbnRhbCBzeW5jOiAgICAgJWkga0h6XG4iLCBoU3luYyk7CiAJCURQUklOVEsoIiBWZXJ0aWNhbCByZWZyZXNoOiAgICAlaSBIelxuIiwgdlJlZnJlc2gpOwogCQlEUFJJTlRLKCIgeCAgc3R5bGU6ICVpLiUwM2kgJWkgJWkgJWkgJWkgICAlaSAlaSAlaSAlaVxuIiwKQEAgLTE0NDgsNyArMTQ4MCw4IEBACiAJYmFzZSA9IDB4MjAwMDsKIAlwcmludGsoImRlYnVnIGF0eWZiOiBNYWNoNjQgbm9uLXNoYWRvdyByZWdpc3RlciB2YWx1ZXM6Iik7CiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSA9IGkrNCkgewotCQlpZihpJTE2ID09IDApIHByaW50aygiXG5kZWJ1ZyBhdHlmYjogMHglMDRYOiAiLCBiYXNlICsgaSk7CisJCWlmIChpICUgMTYgPT0gMCkKKwkJCXByaW50aygiXG5kZWJ1ZyBhdHlmYjogMHglMDRYOiAiLCBiYXNlICsgaSk7CiAJCXByaW50aygiICUwOFgiLCBhdHlfbGRfbGUzMihpLCBwYXIpKTsKIAl9CiAJcHJpbnRrKCJcblxuIik7CkBAIC0xNDU4LDggKzE0OTEsMTAgQEAKIAliYXNlID0gMHgwMDsKIAlwcmludGsoImRlYnVnIGF0eWZiOiBNYWNoNjQgUExMIHJlZ2lzdGVyIHZhbHVlczoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQlpZihpJTE2ID09IDApIHByaW50aygiXG5kZWJ1ZyBhdHlmYjogMHglMDJYOiAiLCBiYXNlICsgaSk7Ci0JCWlmKGklNCA9PSAwKSAgcHJpbnRrKCIgIik7CisJCWlmIChpICUgMTYgPT0gMCkKKwkJCXByaW50aygiXG5kZWJ1ZyBhdHlmYjogMHglMDJYOiAiLCBiYXNlICsgaSk7CisJCWlmIChpICUgNCA9PSAwKQorCQkJcHJpbnRrKCIgIik7CiAJCXByaW50aygiJTAyWCIsIGF0eV9sZF9wbGxfY3QoaSwgcGFyKSk7CiAJfQogCXByaW50aygiXG5cbiIpOwpAQCAtMTQ3MCwxOSArMTUwNSwyMSBAQAogCQkvKiBMQ0QgcmVnaXN0ZXJzICovCiAJCWJhc2UgPSAweDAwOwogCQlwcmludGsoImRlYnVnIGF0eWZiOiBMQ0QgcmVnaXN0ZXIgdmFsdWVzOiIpOwotCQlpZihNNjRfSEFTKExUX0xDRF9SRUdTKSkgewotCQkgICAgZm9yKGkgPSAwOyBpIDw9IFBPV0VSX01BTkFHRU1FTlQ7IGkrKykgewotCQkJaWYoaSA9PSBFWFRfVkVSVF9TVFJFVENIKQotCQkJICAgIGNvbnRpbnVlOwotCQkJcHJpbnRrKCJcbmRlYnVnIGF0eWZiOiAweCUwNFg6ICIsIGx0X2xjZF9yZWdzW2ldKTsKLQkJCXByaW50aygiICUwOFgiLCBhdHlfbGRfbGNkKGksIHBhcikpOwotCQkgICAgfQotCisJCWlmIChNNjRfSEFTKExUX0xDRF9SRUdTKSkgeworCQkJZm9yIChpID0gMDsgaSA8PSBQT1dFUl9NQU5BR0VNRU5UOyBpKyspIHsKKwkJCQlpZiAoaSA9PSBFWFRfVkVSVF9TVFJFVENIKQorCQkJCQljb250aW51ZTsKKwkJCQlwcmludGsoIlxuZGVidWcgYXR5ZmI6IDB4JTA0WDogIiwKKwkJCQkgICAgICAgbHRfbGNkX3JlZ3NbaV0pOworCQkJCXByaW50aygiICUwOFgiLCBhdHlfbGRfbGNkKGksIHBhcikpOworCQkJfQogCQl9IGVsc2UgewotCQkgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJCWlmKGklNCA9PSAwKSBwcmludGsoIlxuZGVidWcgYXR5ZmI6IDB4JTAyWDogIiwgYmFzZSArIGkpOwotCQkJcHJpbnRrKCIgJTA4WCIsIGF0eV9sZF9sY2QoaSwgcGFyKSk7Ci0JCSAgICB9CisJCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQkJCWlmIChpICUgNCA9PSAwKQorCQkJCQlwcmludGsoIlxuZGVidWcgYXR5ZmI6IDB4JTAyWDogIiwKKwkJCQkJICAgICAgIGJhc2UgKyBpKTsKKwkJCQlwcmludGsoIiAlMDhYIiwgYXR5X2xkX2xjZChpLCBwYXIpKTsKKwkJCX0KIAkJfQogCQlwcmludGsoIlxuXG4iKTsKIAl9CkBAIC0xNTAwLDkgKzE1MzcsMTAgQEAKIAl1bmlvbiBhdHlfcGxsIHBsbDsKIAl1MzIgcGl4Y2xvY2s7CiAKLQltZW1jcHkoJnBsbCwgJihwYXItPnBsbCksIHNpemVvZihwbGwpKTsKKwltZW1jcHkoJnBsbCwgJnBhci0+cGxsLCBzaXplb2YocGxsKSk7CiAKLQlpZigoZXJyID0gYXR5X3Zhcl90b19jcnRjKGluZm8sIHZhciwgJmNydGMpKSkKKwllcnIgPSBhdHlfdmFyX3RvX2NydGMoaW5mbywgdmFyLCAmY3J0Yyk7CisJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCXBpeGNsb2NrID0gYXR5ZmJfZ2V0X3BpeGNsb2NrKHZhciwgcGFyKTsKQEAgLTE1MTIsNyArMTU1MCw5IEBACiAJCQlQUklOVEtFKCJJbnZhbGlkIHBpeGNsb2NrXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKLQkJaWYoKGVyciA9IHBhci0+cGxsX29wcy0+dmFyX3RvX3BsbChpbmZvLCBwaXhjbG9jaywgdmFyLT5iaXRzX3Blcl9waXhlbCwgJnBsbCkpKQorCQllcnIgPSBwYXItPnBsbF9vcHMtPnZhcl90b19wbGwoaW5mbywgcGl4Y2xvY2ssCisJCQkJCSAgICAgICB2YXItPmJpdHNfcGVyX3BpeGVsLCAmcGxsKTsKKwkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xNTM5LDkgKzE1NzksOSBAQAogfQogCiAKLSAgICAvKgotICAgICAqICBPcGVuL1JlbGVhc2UgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UKLSAgICAgKi8KKy8qCisgKiBPcGVuL1JlbGVhc2UgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UKKyAqLwogCiBzdGF0aWMgaW50IGF0eWZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewpAQCAtMTU1Myw3ICsxNTkzLDcgQEAKIAkJcGFyLT5tbWFwZWQgPSAwOwogI2VuZGlmCiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdHlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTE1NjgsNyArMTYwOCw4IEBACiAKIAlpZiAoaW50X2NudGwgJiBDUlRDX1ZCTEFOS19JTlQpIHsKIAkJLyogY2xlYXIgaW50ZXJydXB0ICovCi0JCWF0eV9zdF9sZTMyKENSVENfSU5UX0NOVEwsIChpbnRfY250bCAmIENSVENfSU5UX0VOX01BU0spIHwgQ1JUQ19WQkxBTktfSU5UX0FLLCBwYXIpOworCQlhdHlfc3RfbGUzMihDUlRDX0lOVF9DTlRMLCAoaW50X2NudGwgJiBDUlRDX0lOVF9FTl9NQVNLKSB8CisJCQkgICAgQ1JUQ19WQkxBTktfSU5UX0FLLCBwYXIpOwogCQlwYXItPnZibGFuay5jb3VudCsrOwogCQlpZiAocGFyLT52YmxhbmsucGFuX2Rpc3BsYXkpIHsKIAkJCXBhci0+dmJsYW5rLnBhbl9kaXNwbGF5ID0gMDsKQEAgLTE2MDMsOSArMTY0NCwxMSBAQAogCQlzcGluX2xvY2tfaXJxKCZwYXItPmludF9sb2NrKTsKIAkJaW50X2NudGwgPSBhdHlfbGRfbGUzMihDUlRDX0lOVF9DTlRMLCBwYXIpICYgQ1JUQ19JTlRfRU5fTUFTSzsKIAkJaWYgKCEoaW50X2NudGwgJiBDUlRDX1ZCTEFOS19JTlRfRU4pKSB7Ci0JCQlwcmludGsoImF0eWZiOiBzb21lb25lIGRpc2FibGVkIElSUSBbJTA4eF1cbiIsIGludF9jbnRsKTsKKwkJCXByaW50aygiYXR5ZmI6IHNvbWVvbmUgZGlzYWJsZWQgSVJRIFslMDh4XVxuIiwKKwkJCSAgICAgICBpbnRfY250bCk7CiAJCQkvKiByZS1lbmFibGUgaW50ZXJydXB0ICovCi0JCQlhdHlfc3RfbGUzMihDUlRDX0lOVF9DTlRMLCBpbnRfY250bCB8IENSVENfVkJMQU5LX0lOVF9FTiwgcGFyICk7CisJCQlhdHlfc3RfbGUzMihDUlRDX0lOVF9DTlRMLCBpbnRfY250bCB8CisJCQkJICAgIENSVENfVkJMQU5LX0lOVF9FTiwgcGFyKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnBhci0+aW50X2xvY2spOwogCX0KQEAgLTE2MjUsNyArMTY2OCw3IEBACiAJCXNwaW5fbG9ja19pcnEoJnBhci0+aW50X2xvY2spOwogCQlpbnRfY250bCA9IGF0eV9sZF9sZTMyKENSVENfSU5UX0NOVEwsIHBhcikgJiBDUlRDX0lOVF9FTl9NQVNLOwogCQkvKiBkaXNhYmxlIGludGVycnVwdCAqLwotCQlhdHlfc3RfbGUzMihDUlRDX0lOVF9DTlRMLCBpbnRfY250bCAmIH5DUlRDX1ZCTEFOS19JTlRfRU4sIHBhciApOworCQlhdHlfc3RfbGUzMihDUlRDX0lOVF9DTlRMLCBpbnRfY250bCAmIH5DUlRDX1ZCTEFOS19JTlRfRU4sIHBhcik7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGFyLT5pbnRfbG9jayk7CiAJCWZyZWVfaXJxKHBhci0+aXJxLCBwYXIpOwogCX0KQEAgLTE2MzYsNTAgKzE2NzksNjIgQEAKIHN0YXRpYyBpbnQgYXR5ZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwotCWlmICh1c2VyKSB7Ci0JCXBhci0+b3Blbi0tOwotCQltZGVsYXkoMSk7Ci0JCXdhaXRfZm9yX2lkbGUocGFyKTsKLQkJaWYgKCFwYXItPm9wZW4pIHsKICNpZmRlZiBfX3NwYXJjX18KLQkJCWludCB3YXNfbW1hcGVkID0gcGFyLT5tbWFwZWQ7Ci0KLQkJCXBhci0+bW1hcGVkID0gMDsKLQotCQkJaWYgKHdhc19tbWFwZWQpIHsKLQkJCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwotCi0JCQkJLyogTm93IHJlc2V0IHRoZSBkZWZhdWx0IGRpc3BsYXkgY29uZmlnLCB3ZSBoYXZlIG5vCi0JCQkJICogaWRlYSB3aGF0IHRoZSBwcm9ncmFtKHMpIHdoaWNoIG1tYXAnZCB0aGUgY2hpcCBkaWQKLQkJCQkgKiB0byB0aGUgY29uZmlndXJhdGlvbiwgbm9yIHdoZXRoZXIgaXQgcmVzdG9yZWQgaXQKLQkJCQkgKiBjb3JyZWN0bHkuCi0JCQkJICovCi0JCQkJdmFyID0gZGVmYXVsdF92YXI7Ci0JCQkJaWYgKG5vYWNjZWwpCi0JCQkJCXZhci5hY2NlbF9mbGFncyAmPSB+RkJfQUNDRUxGX1RFWFQ7Ci0JCQkJZWxzZQotCQkJCQl2YXIuYWNjZWxfZmxhZ3MgfD0gRkJfQUNDRUxGX1RFWFQ7Ci0JCQkJaWYgKHZhci55cmVzID09IHZhci55cmVzX3ZpcnR1YWwpIHsKLQkJCQkJdTMyIHZpZGVvcmFtID0gKGluZm8tPmZpeC5zbWVtX2xlbiAtIChQQUdFX1NJWkUgPDwgMikpOwotCQkJCQl2YXIueXJlc192aXJ0dWFsID0gKCh2aWRlb3JhbSAqIDgpIC8gdmFyLmJpdHNfcGVyX3BpeGVsKSAvIHZhci54cmVzX3ZpcnR1YWw7Ci0JCQkJCWlmICh2YXIueXJlc192aXJ0dWFsIDwgdmFyLnlyZXMpCi0JCQkJCQl2YXIueXJlc192aXJ0dWFsID0gdmFyLnlyZXM7Ci0JCQkJfQotCQkJfQorCWludCB3YXNfbW1hcGVkOwogI2VuZGlmCi0JCQlhdHlfZGlzYWJsZV9pcnEocGFyKTsKKworCWlmICghdXNlcikKKwkJcmV0dXJuIDA7CisKKwlwYXItPm9wZW4tLTsKKwltZGVsYXkoMSk7CisJd2FpdF9mb3JfaWRsZShwYXIpOworCisJaWYgKHBhci0+b3BlbikKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBfX3NwYXJjX18KKwl3YXNfbW1hcGVkID0gcGFyLT5tbWFwZWQ7CisKKwlwYXItPm1tYXBlZCA9IDA7CisKKwlpZiAod2FzX21tYXBlZCkgeworCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOworCisJCS8qCisJCSAqIE5vdyByZXNldCB0aGUgZGVmYXVsdCBkaXNwbGF5IGNvbmZpZywgd2UgaGF2ZQorCQkgKiBubyBpZGVhIHdoYXQgdGhlIHByb2dyYW0ocykgd2hpY2ggbW1hcCdkIHRoZQorCQkgKiBjaGlwIGRpZCB0byB0aGUgY29uZmlndXJhdGlvbiwgbm9yIHdoZXRoZXIgaXQKKwkJICogcmVzdG9yZWQgaXQgY29ycmVjdGx5LgorCQkgKi8KKwkJdmFyID0gZGVmYXVsdF92YXI7CisJCWlmIChub2FjY2VsKQorCQkJdmFyLmFjY2VsX2ZsYWdzICY9IH5GQl9BQ0NFTEZfVEVYVDsKKwkJZWxzZQorCQkJdmFyLmFjY2VsX2ZsYWdzIHw9IEZCX0FDQ0VMRl9URVhUOworCQlpZiAodmFyLnlyZXMgPT0gdmFyLnlyZXNfdmlydHVhbCkgeworCQkJdTMyIHZpZGVvcmFtID0gKGluZm8tPmZpeC5zbWVtX2xlbiAtIChQQUdFX1NJWkUgPDwgMikpOworCQkJdmFyLnlyZXNfdmlydHVhbCA9CisJCQkJKCh2aWRlb3JhbSAqIDgpIC8gdmFyLmJpdHNfcGVyX3BpeGVsKSAvCisJCQkJdmFyLnhyZXNfdmlydHVhbDsKKwkJCWlmICh2YXIueXJlc192aXJ0dWFsIDwgdmFyLnlyZXMpCisJCQkJdmFyLnlyZXNfdmlydHVhbCA9IHZhci55cmVzOwogCQl9CiAJfQotCXJldHVybiAoMCk7CisjZW5kaWYKKwlhdHlfZGlzYWJsZV9pcnEocGFyKTsKKworCXJldHVybiAwOwogfQogCi0gICAgLyoKLSAgICAgKiAgUGFuIG9yIFdyYXAgdGhlIERpc3BsYXkKLSAgICAgKgotICAgICAqICBUaGlzIGNhbGwgbG9va3Mgb25seSBhdCB4b2Zmc2V0LCB5b2Zmc2V0IGFuZCB0aGUgRkJfVk1PREVfWVdSQVAgZmxhZwotICAgICAqLworLyoKKyAqIFBhbiBvciBXcmFwIHRoZSBEaXNwbGF5CisgKgorICogVGhpcyBjYWxsIGxvb2tzIG9ubHkgYXQgeG9mZnNldCwgeW9mZnNldCBhbmQgdGhlIEZCX1ZNT0RFX1lXUkFQIGZsYWcKKyAqLwogCi1zdGF0aWMgaW50IGF0eWZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgYXR5ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IChzdHJ1Y3QgYXR5ZmJfcGFyICopIGluZm8tPnBhcjsKIAl1MzIgeHJlcywgeXJlcywgeG9mZnNldCwgeW9mZnNldDsKQEAgLTE2OTAsNyArMTc0NSw4IEBACiAJCXlyZXMgPj49IDE7CiAJeG9mZnNldCA9ICh2YXItPnhvZmZzZXQgKyA3KSAmIH43OwogCXlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7Ci0JaWYgKHhvZmZzZXQgKyB4cmVzID4gcGFyLT5jcnRjLnZ4cmVzIHx8IHlvZmZzZXQgKyB5cmVzID4gcGFyLT5jcnRjLnZ5cmVzKQorCWlmICh4b2Zmc2V0ICsgeHJlcyA+IHBhci0+Y3J0Yy52eHJlcyB8fAorCSAgICB5b2Zmc2V0ICsgeXJlcyA+IHBhci0+Y3J0Yy52eXJlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaW5mby0+dmFyLnhvZmZzZXQgPSB4b2Zmc2V0OwogCWluZm8tPnZhci55b2Zmc2V0ID0geW9mZnNldDsKQEAgLTE3MjcsMTAgKzE3ODMsMTAgQEAKIAkJcmV0dXJuIHJldDsKIAogCWNvdW50ID0gdmJsLT5jb3VudDsKLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh2YmwtPndhaXQsIGNvdW50ICE9IHZibC0+Y291bnQsIEhaLzEwKTsKLQlpZiAocmV0IDwgMCkgeworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHZibC0+d2FpdCwKKwkJCQkJICAgICAgIGNvdW50ICE9IHZibC0+Y291bnQsIEhaLzEwKTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQl9CiAJaWYgKHJldCA9PSAwKSB7CiAJCWF0eV9lbmFibGVfaXJxKHBhciwgMSk7CiAJCXJldHVybiAtRVRJTUVET1VUOwpAQCAtMTc4NCw3ICsxODQwLDggQEAKIAkJZmJ0eXAuZmJfZGVwdGggPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CiAJCWZidHlwLmZiX2Ntc2l6ZSA9IGluZm8tPmNtYXAubGVuOwogCQlmYnR5cC5mYl9zaXplID0gaW5mby0+Zml4LnNtZW1fbGVuOwotCQlpZiAoY29weV90b191c2VyKChzdHJ1Y3QgZmJ0eXBlIF9fdXNlciAqKSBhcmcsICZmYnR5cCwgc2l6ZW9mKGZidHlwKSkpCisJCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBmYnR5cGUgX191c2VyICopIGFyZywgJmZidHlwLAorCQkJCSBzaXplb2YoZmJ0eXApKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKICNlbmRpZiAvKiBfX3NwYXJjX18gKi8KQEAgLTE4MDQsNyArMTg2MSw3IEBACiAJY2FzZSBBVFlJT19DTEtSOgogCQlpZiAoTTY0X0hBUyhJTlRFR1JBVEVEKSkgewogCQkJc3RydWN0IGF0eWNsayBjbGs7Ci0JCQl1bmlvbiBhdHlfcGxsICpwbGwgPSAmKHBhci0+cGxsKTsKKwkJCXVuaW9uIGF0eV9wbGwgKnBsbCA9ICZwYXItPnBsbDsKIAkJCXUzMiBkc3BfY29uZmlnID0gcGxsLT5jdC5kc3BfY29uZmlnOwogCQkJdTMyIGRzcF9vbl9vZmYgPSBwbGwtPmN0LmRzcF9vbl9vZmY7CiAJCQljbGsucmVmX2Nsa19wZXIgPSBwYXItPnJlZl9jbGtfcGVyOwpAQCAtMTgyOSw4ICsxODg2LDkgQEAKIAljYXNlIEFUWUlPX0NMS1c6CiAJCWlmIChNNjRfSEFTKElOVEVHUkFURUQpKSB7CiAJCQlzdHJ1Y3QgYXR5Y2xrIGNsazsKLQkJCXVuaW9uIGF0eV9wbGwgKnBsbCA9ICYocGFyLT5wbGwpOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbGssIChzdHJ1Y3QgYXR5Y2xrIF9fdXNlciAqKSBhcmcsIHNpemVvZihjbGspKSkKKwkJCXVuaW9uIGF0eV9wbGwgKnBsbCA9ICZwYXItPnBsbDsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmY2xrLCAoc3RydWN0IGF0eWNsayBfX3VzZXIgKikgYXJnLAorCQkJCQkgICBzaXplb2YoY2xrKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlwYXItPnJlZl9jbGtfcGVyID0gY2xrLnJlZl9jbGtfcGVyOwogCQkJcGxsLT5jdC5wbGxfcmVmX2RpdiA9IGNsay5wbGxfcmVmX2RpdjsKQEAgLTE4NDEsOCArMTg5OSwxMCBAQAogCQkJcGxsLT5jdC52Y2xrX2ZiX2RpdiA9IGNsay52Y2xrX2ZiX2RpdjsKIAkJCXBsbC0+Y3QudmNsa19wb3N0X2Rpdl9yZWFsID0gY2xrLnZjbGtfcG9zdF9kaXY7CiAJCQlwbGwtPmN0LmRzcF9jb25maWcgPSAoY2xrLmRzcF94Y2xrc19wZXJfcm93ICYgMHgzZmZmKSB8Ci0JCQkJKChjbGsuZHNwX2xvb3BfbGF0ZW5jeSAmIDB4Zik8PDE2KXwgKChjbGsuZHNwX3ByZWNpc2lvbiAmIDcpPDwyMCk7Ci0JCQlwbGwtPmN0LmRzcF9vbl9vZmYgPSAoY2xrLmRzcF9vZmYgJiAweDdmZikgfCAoKGNsay5kc3Bfb24gJiAweDdmZik8PDE2KTsKKwkJCQkoKGNsay5kc3BfbG9vcF9sYXRlbmN5ICYgMHhmKSA8PCAxNikgfAorCQkJCSgoY2xrLmRzcF9wcmVjaXNpb24gJiA3KSA8PCAyMCk7CisJCQlwbGwtPmN0LmRzcF9vbl9vZmYgPSAoY2xrLmRzcF9vZmYgJiAweDdmZikgfAorCQkJCSgoY2xrLmRzcF9vbiAmIDB4N2ZmKSA8PCAxNik7CiAJCQkvKmF0eV9jYWxjX3BsbF9jdChpbmZvLCAmcGxsLT5jdCk7Ki8KIAkJCWF0eV9zZXRfcGxsX2N0KGluZm8sIHBsbCk7CiAJCX0gZWxzZQpAQCAtMTkxMyw4ICsxOTczLDcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJbWFwX3NpemUgPSBwYXItPm1tYXBfbWFwW2ldLnNpemUgLSAob2Zmc2V0IC0gc3RhcnQpOwotCQkJbWFwX29mZnNldCA9Ci0JCQkgICAgcGFyLT5tbWFwX21hcFtpXS5wb2ZmICsgKG9mZnNldCAtIHN0YXJ0KTsKKwkJCW1hcF9vZmZzZXQgPSBwYXItPm1tYXBfbWFwW2ldLnBvZmYgKyAob2Zmc2V0IC0gc3RhcnQpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFtYXBfc2l6ZSkgewpAQCAtMTkyNCw4ICsxOTgzLDcgQEAKIAkJaWYgKHBhZ2UgKyBtYXBfc2l6ZSA+IHNpemUpCiAJCQltYXBfc2l6ZSA9IHNpemUgLSBwYWdlOwogCi0JCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICY9Ci0JCSAgICB+KHBhci0+bW1hcF9tYXBbaV0ucHJvdF9tYXNrKTsKKwkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0gfihwYXItPm1tYXBfbWFwW2ldLnByb3RfbWFzayk7CiAJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IHBhci0+bW1hcF9tYXBbaV0ucHJvdF9mbGFnOwogCiAJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0ICsgcGFnZSwKQEAgLTIwMjksNyArMjA4Nyw4IEBACiAJcGFyLT5hc2xlZXAgPSAxOwogCXBhci0+bG9ja19ibGFuayA9IDE7CiAKLQkvKiBCZWNhdXNlIHdlIG1heSBjaGFuZ2UgUENJIEQgc3RhdGUgb3Vyc2VsdmVzLCB3ZSBuZWVkIHRvCisJLyoKKwkgKiBCZWNhdXNlIHdlIG1heSBjaGFuZ2UgUENJIEQgc3RhdGUgb3Vyc2VsdmVzLCB3ZSBuZWVkIHRvCiAJICogZmlyc3Qgc2F2ZSB0aGUgY29uZmlnIHNwYWNlIGNvbnRlbnQgc28gdGhlIGNvcmUgY2FuCiAJICogcmVzdG9yZSBpdCBwcm9wZXJseSBvbiByZXN1bWUuCiAJICovCkBAIC0yMDgwLDcgKzIxMzksOCBAQAogCiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCi0JLyogUENJIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIHJlc3RvcmVkIGJ5IHRoZSBjb3JlLCBzbworCS8qCisJICogUENJIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIHJlc3RvcmVkIGJ5IHRoZSBjb3JlLCBzbwogCSAqIHdlIHNob3VsZCBiZSBpbiBEMCBub3cgd2l0aCBvdXIgY29uZmlnIHNwYWNlIGZ1bGx5CiAJICogcmVzdG9yZWQKIAkgKi8KQEAgLTIxOTIsOCArMjI1Miw4IEBACiAKIAlpbmZvLT5ibF9kZXYgPSBiZDsKIAlmYl9ibF9kZWZhdWx0X2N1cnZlKGluZm8sIDAsCi0JCTB4M0YgKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMLAotCQkweEZGICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9MRVZFTCk7CisJCQkgICAgMHgzRiAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfTEVWRUwsCisJCQkgICAgMHhGRiAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfTEVWRUwpOwogCiAJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7CiAJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBiZC0+cHJvcHMubWF4X2JyaWdodG5lc3M7CkBAIC0yMjM2LDE2ICsyMjk2LDE2IEBACiAJCXNpemUgPSBBUlJBWV9TSVpFKHJhZ2Vwcm9fdGJsKTsKIAl9CiAKLQlmb3IgKGk9MDsgaSA8IHNpemU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJaWYgKHhjbGsgPCByZWZyZXNoX3RibFtpXSkKLQkJYnJlYWs7CisJCQlicmVhazsKIAl9CiAJcGFyLT5tZW1fcmVmcmVzaF9yYXRlID0gaTsKIH0KIAotICAgIC8qCi0gICAgICogIEluaXRpYWxpc2F0aW9uCi0gICAgICovCisvKgorICogSW5pdGlhbGlzYXRpb24KKyAqLwogCiBzdGF0aWMgc3RydWN0IGZiX2luZm8gKmZiX2xpc3QgPSBOVUxMOwogCkBAIC0yMzc1LDggKzI0MzUsMTAgQEAKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKLQkvKiBUaGUgQXBwbGUgaUJvb2sxIHVzZXMgbm9uLXN0YW5kYXJkIG1lbW9yeSBmcmVxdWVuY2llcy4gV2UgZGV0ZWN0IGl0Ci0JICogYW5kIHNldCB0aGUgZnJlcXVlbmN5IG1hbnVhbGx5LiAqLworCS8qCisJICogVGhlIEFwcGxlIGlCb29rMSB1c2VzIG5vbi1zdGFuZGFyZCBtZW1vcnkgZnJlcXVlbmNpZXMuCisJICogV2UgZGV0ZWN0IGl0IGFuZCBzZXQgdGhlIGZyZXF1ZW5jeSBtYW51YWxseS4KKwkgKi8KIAlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkgewogCQlwYXItPnBsbF9saW1pdHMubWNsayA9IDcwOwogCQlwYXItPnBsbF9saW1pdHMueGNsayA9IDUzOwpAQCAtMjQyMSwxMyArMjQ4MywxNCBAQAogCiAJLyogc2F2ZSBwcmV2aW91cyB2aWRlbyBtb2RlICovCiAJYXR5X2dldF9jcnRjKHBhciwgJnBhci0+c2F2ZWRfY3J0Yyk7Ci0JaWYocGFyLT5wbGxfb3BzLT5nZXRfcGxsKQorCWlmIChwYXItPnBsbF9vcHMtPmdldF9wbGwpCiAJCXBhci0+cGxsX29wcy0+Z2V0X3BsbChpbmZvLCAmcGFyLT5zYXZlZF9wbGwpOwogCiAJcGFyLT5tZW1fY250bCA9IGF0eV9sZF9sZTMyKE1FTV9DTlRMLCBwYXIpOwogCWd0Yl9tZW1zaXplID0gTTY0X0hBUyhHVEJfRFNQKTsKIAlpZiAoZ3RiX21lbXNpemUpCi0JCXN3aXRjaCAocGFyLT5tZW1fY250bCAmIDB4RikgewkvKiAweEYgdXNlZCBpbnN0ZWFkIG9mIE1FTV9TSVpFX0FMSUFTICovCisJCS8qIDB4RiB1c2VkIGluc3RlYWQgb2YgTUVNX1NJWkVfQUxJQVMgKi8KKwkJc3dpdGNoIChwYXItPm1lbV9jbnRsICYgMHhGKSB7CiAJCWNhc2UgTUVNX1NJWkVfNTEySzoKIAkJCWluZm8tPmZpeC5zbWVtX2xlbiA9IDB4ODAwMDA7CiAJCQlicmVhazsKQEAgLTI0OTYsOCArMjU1OSw4IEBACiAJfQogCiAJLyoKLQkgKiAgUmVnIEJsb2NrIDAgKENULWNvbXBhdGlibGUgYmxvY2spIGlzIGF0IG1taW9fc3RhcnQKLQkgKiAgUmVnIEJsb2NrIDEgKG11bHRpbWVkaWEgZXh0ZW5zaW9ucykgaXMgYXQgbW1pb19zdGFydCAtIDB4NDAwCisJICogUmVnIEJsb2NrIDAgKENULWNvbXBhdGlibGUgYmxvY2spIGlzIGF0IG1taW9fc3RhcnQKKwkgKiBSZWcgQmxvY2sgMSAobXVsdGltZWRpYSBleHRlbnNpb25zKSBpcyBhdCBtbWlvX3N0YXJ0IC0gMHg0MDAKIAkgKi8KIAlpZiAoTTY0X0hBUyhHWCkpIHsKIAkJaW5mby0+Zml4Lm1taW9fbGVuID0gMHg0MDA7CkBAIC0yNTE2LDg0ICsyNTc5LDk4IEBACiAJfQogCiAJUFJJTlRLSSgiJWQlYyAlcywgJXMgTUh6IFhUQUwsICVkIE1IeiBQTEwsICVkIE1oeiBNQ0xLLCAlZCBNSHogWENMS1xuIiwKLQkgICAgICAgaW5mby0+Zml4LnNtZW1fbGVuID09IDB4ODAwMDAgPyA1MTIgOiAoaW5mby0+Zml4LnNtZW1fbGVuID4+IDIwKSwKLQkgICAgICAgaW5mby0+Zml4LnNtZW1fbGVuID09IDB4ODAwMDAgPyAnSycgOiAnTScsIHJhbW5hbWUsIHh0YWwsIHBhci0+cGxsX2xpbWl0cy5wbGxfbWF4LAotCSAgICAgICBwYXItPnBsbF9saW1pdHMubWNsaywgcGFyLT5wbGxfbGltaXRzLnhjbGspOworCQlpbmZvLT5maXguc21lbV9sZW4gPT0gMHg4MDAwMCA/IDUxMiA6IChpbmZvLT5maXguc21lbV9sZW4+PjIwKSwKKwkJaW5mby0+Zml4LnNtZW1fbGVuID09IDB4ODAwMDAgPyAnSycgOiAnTScsIHJhbW5hbWUsIHh0YWwsCisJCXBhci0+cGxsX2xpbWl0cy5wbGxfbWF4LCBwYXItPnBsbF9saW1pdHMubWNsaywKKwkJcGFyLT5wbGxfbGltaXRzLnhjbGspOwogCiAjaWYgZGVmaW5lZChERUJVRykgJiYgZGVmaW5lZChDT05GSUdfRkJfQVRZX0NUKQogCWlmIChNNjRfSEFTKElOVEVHUkFURUQpKSB7CiAJCWludCBpOwotCQlwcmludGsoImRlYnVnIGF0eWZiOiBCVVNfQ05UTCBEQUNfQ05UTCBNRU1fQ05UTCBFWFRfTUVNX0NOVEwgQ1JUQ19HRU5fQ05UTCAiCi0JCSAgICAgICAiRFNQX0NPTkZJRyBEU1BfT05fT0ZGIENMT0NLX0NOVExcbiIKLQkJICAgICAgICJkZWJ1ZyBhdHlmYjogJTA4eCAlMDh4ICUwOHggJTA4eCAgICAgJTA4eCAgICAgICUwOHggICAlMDh4ICAgJTA4eFxuIgorCQlwcmludGsoImRlYnVnIGF0eWZiOiBCVVNfQ05UTCBEQUNfQ05UTCBNRU1fQ05UTCAiCisJCSAgICAgICAiRVhUX01FTV9DTlRMIENSVENfR0VOX0NOVEwgRFNQX0NPTkZJRyAiCisJCSAgICAgICAiRFNQX09OX09GRiBDTE9DS19DTlRMXG4iCisJCSAgICAgICAiZGVidWcgYXR5ZmI6ICUwOHggJTA4eCAlMDh4ICIKKwkJICAgICAgICIlMDh4ICAgICAlMDh4ICAgICAgJTA4eCAgICIKKwkJICAgICAgICIlMDh4ICAgJTA4eFxuIgogCQkgICAgICAgImRlYnVnIGF0eWZiOiBQTEwiLAotCQkJYXR5X2xkX2xlMzIoQlVTX0NOVEwsIHBhciksIGF0eV9sZF9sZTMyKERBQ19DTlRMLCBwYXIpLAotCQkJYXR5X2xkX2xlMzIoTUVNX0NOVEwsIHBhciksIGF0eV9sZF9sZTMyKEVYVF9NRU1fQ05UTCwgcGFyKSwKLQkJCWF0eV9sZF9sZTMyKENSVENfR0VOX0NOVEwsIHBhciksIGF0eV9sZF9sZTMyKERTUF9DT05GSUcsIHBhciksCi0JCQlhdHlfbGRfbGUzMihEU1BfT05fT0ZGLCBwYXIpLCBhdHlfbGRfbGUzMihDTE9DS19DTlRMLCBwYXIpKTsKKwkJICAgICAgIGF0eV9sZF9sZTMyKEJVU19DTlRMLCBwYXIpLAorCQkgICAgICAgYXR5X2xkX2xlMzIoREFDX0NOVEwsIHBhciksCisJCSAgICAgICBhdHlfbGRfbGUzMihNRU1fQ05UTCwgcGFyKSwKKwkJICAgICAgIGF0eV9sZF9sZTMyKEVYVF9NRU1fQ05UTCwgcGFyKSwKKwkJICAgICAgIGF0eV9sZF9sZTMyKENSVENfR0VOX0NOVEwsIHBhciksCisJCSAgICAgICBhdHlfbGRfbGUzMihEU1BfQ09ORklHLCBwYXIpLAorCQkgICAgICAgYXR5X2xkX2xlMzIoRFNQX09OX09GRiwgcGFyKSwKKwkJICAgICAgIGF0eV9sZF9sZTMyKENMT0NLX0NOVEwsIHBhcikpOwogCQlmb3IgKGkgPSAwOyBpIDwgNDA7IGkrKykKIAkJCXByaW50aygiICUwMngiLCBhdHlfbGRfcGxsX2N0KGksIHBhcikpOwogCQlwcmludGsoIlxuIik7CiAJfQogI2VuZGlmCi0JaWYocGFyLT5wbGxfb3BzLT5pbml0X3BsbCkKKwlpZiAocGFyLT5wbGxfb3BzLT5pbml0X3BsbCkKIAkJcGFyLT5wbGxfb3BzLT5pbml0X3BsbChpbmZvLCAmcGFyLT5wbGwpOwogCWlmIChwYXItPnBsbF9vcHMtPnJlc3VtZV9wbGwpCiAJCXBhci0+cGxsX29wcy0+cmVzdW1lX3BsbChpbmZvLCAmcGFyLT5wbGwpOwogCiAJLyoKLQkgKiAgTGFzdCBwYWdlIG9mIDggTUIgKDQgTUIgb24gSVNBKSBhcGVydHVyZSBpcyBNTUlPLAotCSAqICB1bmxlc3MgdGhlIGF1eGlsaWFyeSByZWdpc3RlciBhcGVydHVyZSBpcyB1c2VkLgorCSAqIExhc3QgcGFnZSBvZiA4IE1CICg0IE1CIG9uIElTQSkgYXBlcnR1cmUgaXMgTU1JTywKKwkgKiB1bmxlc3MgdGhlIGF1eGlsaWFyeSByZWdpc3RlciBhcGVydHVyZSBpcyB1c2VkLgogCSAqLwotCiAJaWYgKCFwYXItPmF1eF9zdGFydCAmJgotCQkoaW5mby0+Zml4LnNtZW1fbGVuID09IDB4ODAwMDAwIHx8IChwYXItPmJ1c190eXBlID09IElTQSAmJiBpbmZvLT5maXguc21lbV9sZW4gPT0gMHg0MDAwMDApKSkKKwkgICAgKGluZm8tPmZpeC5zbWVtX2xlbiA9PSAweDgwMDAwMCB8fAorCSAgICAgKHBhci0+YnVzX3R5cGUgPT0gSVNBICYmIGluZm8tPmZpeC5zbWVtX2xlbiA9PSAweDQwMDAwMCkpKQogCQlpbmZvLT5maXguc21lbV9sZW4gLT0gR1VJX1JFU0VSVkU7CiAKIAkvKgotCSAqICBEaXNhYmxlIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIHRoZSBsaW5lYXIgYXBlcnR1cmUKLQkgKiAgaWYgdGhlIGF1eGlsaWFyeSBhcGVydHVyZSBpcyB1c2VkIHNvIHdlIGNhbiBhY2Nlc3MKLQkgKiAgdGhlIGZ1bGwgOCBNQiBvZiB2aWRlbyBSQU0gb24gOCBNQiBib2FyZHMuCisJICogRGlzYWJsZSByZWdpc3RlciBhY2Nlc3MgdGhyb3VnaCB0aGUgbGluZWFyIGFwZXJ0dXJlCisJICogaWYgdGhlIGF1eGlsaWFyeSBhcGVydHVyZSBpcyB1c2VkIHNvIHdlIGNhbiBhY2Nlc3MKKwkgKiB0aGUgZnVsbCA4IE1CIG9mIHZpZGVvIFJBTSBvbiA4IE1CIGJvYXJkcy4KIAkgKi8KIAlpZiAocGFyLT5hdXhfc3RhcnQpCi0JCWF0eV9zdF9sZTMyKEJVU19DTlRMLCBhdHlfbGRfbGUzMihCVVNfQ05UTCwgcGFyKSB8IEJVU19BUEVSX1JFR19ESVMsIHBhcik7CisJCWF0eV9zdF9sZTMyKEJVU19DTlRMLCBhdHlfbGRfbGUzMihCVVNfQ05UTCwgcGFyKSB8CisJCQkgICAgQlVTX0FQRVJfUkVHX0RJUywgcGFyKTsKIAogI2lmZGVmIENPTkZJR19NVFJSCiAJcGFyLT5tdHJyX2FwZXIgPSAtMTsKIAlwYXItPm10cnJfcmVnID0gLTE7CiAJaWYgKCFub210cnIpIHsKIAkJLyogQ292ZXIgdGhlIHdob2xlIHJlc291cmNlLiAqLwotCQkgcGFyLT5tdHJyX2FwZXIgPSBtdHJyX2FkZChwYXItPnJlc19zdGFydCwgcGFyLT5yZXNfc2l6ZSwgTVRSUl9UWVBFX1dSQ09NQiwgMSk7Ci0JCSBpZiAocGFyLT5tdHJyX2FwZXIgPj0gMCAmJiAhcGFyLT5hdXhfc3RhcnQpIHsKKwkJcGFyLT5tdHJyX2FwZXIgPSBtdHJyX2FkZChwYXItPnJlc19zdGFydCwgcGFyLT5yZXNfc2l6ZSwKKwkJCQkJICBNVFJSX1RZUEVfV1JDT01CLCAxKTsKKwkJaWYgKHBhci0+bXRycl9hcGVyID49IDAgJiYgIXBhci0+YXV4X3N0YXJ0KSB7CiAJCQkvKiBNYWtlIGEgaG9sZSBmb3IgbW1pby4gKi8KLQkJCXBhci0+bXRycl9yZWcgPSBtdHJyX2FkZChwYXItPnJlc19zdGFydCArIDB4ODAwMDAwIC0gR1VJX1JFU0VSVkUsCi0JCQkJR1VJX1JFU0VSVkUsIE1UUlJfVFlQRV9VTkNBQ0hBQkxFLCAxKTsKKwkJCXBhci0+bXRycl9yZWcgPSBtdHJyX2FkZChwYXItPnJlc19zdGFydCArIDB4ODAwMDAwIC0KKwkJCQkJCSBHVUlfUkVTRVJWRSwgR1VJX1JFU0VSVkUsCisJCQkJCQkgTVRSUl9UWVBFX1VOQ0FDSEFCTEUsIDEpOwogCQkJaWYgKHBhci0+bXRycl9yZWcgPCAwKSB7CiAJCQkJbXRycl9kZWwocGFyLT5tdHJyX2FwZXIsIDAsIDApOwogCQkJCXBhci0+bXRycl9hcGVyID0gLTE7CiAJCQl9Ci0JCSB9CisJCX0KIAl9CiAjZW5kaWYKIAogCWluZm8tPmZib3BzID0gJmF0eWZiX29wczsKIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBhci0+cHNldWRvX3BhbGV0dGU7CiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCAgICAgICAgICAgfAotCSAgICAgICAgICAgICAgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUIHwKLQkgICAgICAgICAgICAgIEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUICB8Ci0JICAgICAgICAgICAgICBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSAgfAotCSAgICAgICAgICAgICAgRkJJTkZPX0hXQUNDRUxfWVBBTjsKKwkJICAgICAgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUIHwKKwkJICAgICAgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgIHwKKwkJICAgICAgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgIHwKKwkJICAgICAgRkJJTkZPX0hXQUNDRUxfWVBBTjsKIAogI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAogCWlmIChNNjRfSEFTKEczX1BCXzFfMSkgJiYgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgewotCQkvKiB0aGVzZSBiaXRzIGxldCB0aGUgMTAxIHBvd2VyYm9vayB3YWtlIHVwIGZyb20gc2xlZXAgLS0gcGF1bHVzICovCi0JCWF0eV9zdF9sY2QoUE9XRVJfTUFOQUdFTUVOVCwgYXR5X2xkX2xjZChQT1dFUl9NQU5BR0VNRU5ULCBwYXIpCi0JCQkgICB8IChVU0VfRjMyS0haIHwgVFJJU1RBVEVfTUVNX0VOKSwgcGFyKTsKKwkJLyoKKwkJICogdGhlc2UgYml0cyBsZXQgdGhlIDEwMSBwb3dlcmJvb2sKKwkJICogd2FrZSB1cCBmcm9tIHNsZWVwIC0tIHBhdWx1cworCQkgKi8KKwkJYXR5X3N0X2xjZChQT1dFUl9NQU5BR0VNRU5ULCBhdHlfbGRfbGNkKFBPV0VSX01BTkFHRU1FTlQsIHBhcikgfAorCQkJICAgVVNFX0YzMktIWiB8IFRSSVNUQVRFX01FTV9FTiwgcGFyKTsKIAl9IGVsc2UKICNlbmRpZgogCWlmIChNNjRfSEFTKE1PQklMX0JVUykgJiYgYmFja2xpZ2h0KSB7CiAjaWZkZWYgQ09ORklHX0ZCX0FUWV9CQUNLTElHSFQKLQkJYXR5X2JsX2luaXQgKHBhcik7CisJCWF0eV9ibF9pbml0KHBhcik7CiAjZW5kaWYKIAl9CiAKQEAgLTI2MDEsOCArMjY3OCw4IEBACiAjaWZkZWYgQ09ORklHX1BQQwogCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSkgewogCQkvKgotCQkgKiAgRklYTUU6IFRoZSBOVlJBTSBzdHVmZiBzaG91bGQgYmUgcHV0IGluIGEgTWFjLXNwZWNpZmljIGZpbGUsIGFzIGl0Ci0JCSAqICAgICAgICAgYXBwbGllcyB0byBhbGwgTWFjIHZpZGVvIGNhcmRzCisJCSAqIEZJWE1FOiBUaGUgTlZSQU0gc3R1ZmYgc2hvdWxkIGJlIHB1dCBpbiBhIE1hYy1zcGVjaWZpYyBmaWxlLAorCQkgKiAgICAgICAgYXMgaXQgYXBwbGllcyB0byBhbGwgTWFjIHZpZGVvIGNhcmRzCiAJCSAqLwogCQlpZiAobW9kZSkgewogCQkJaWYgKG1hY19maW5kX21vZGUoJnZhciwgaW5mbywgbW9kZSwgOCkpCkBAIC0yNjE1LDggKzI2OTIsNyBAQAogCQkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNjA7CiAJCQkJZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIikpCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF83NTsKLQkJCQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUKLQkJCQkJICgiUG93ZXJCb29rMiwxIikpCisJCQkJZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkKIAkJCQkJLyogaUJvb2sgd2l0aCA4MDB4NjAwIExDRCAqLwogCQkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfODAwXzYwMF82MDsKIAkJCQllbHNlCkBAIC0yNjMwLDcgKzI3MDYsNyBAQAogCQkJaWYgKGRlZmF1bHRfY21vZGUgPCBDTU9ERV84IHx8IGRlZmF1bHRfY21vZGUgPiBDTU9ERV8zMikKIAkJCQlkZWZhdWx0X2Ntb2RlID0gQ01PREVfODsKIAkJCWlmICghbWFjX3Ztb2RlX3RvX3ZhcihkZWZhdWx0X3Ztb2RlLCBkZWZhdWx0X2Ntb2RlLAotCQkJCQkgICAgICAgJnZhcikpCisJCQkJCSAgICAgICZ2YXIpKQogCQkJCWhhc192YXIgPSAxOwogCQl9CiAJfQpAQCAtMjcwMiwxMiArMjc3OCwxMiBAQAogCiAjaWZkZWYgQ09ORklHX01UUlIKIAlpZiAocGFyLT5tdHJyX3JlZyA+PSAwKSB7Ci0JICAgIG10cnJfZGVsKHBhci0+bXRycl9yZWcsIDAsIDApOwotCSAgICBwYXItPm10cnJfcmVnID0gLTE7CisJCW10cnJfZGVsKHBhci0+bXRycl9yZWcsIDAsIDApOworCQlwYXItPm10cnJfcmVnID0gLTE7CiAJfQogCWlmIChwYXItPm10cnJfYXBlciA+PSAwKSB7Ci0JICAgIG10cnJfZGVsKHBhci0+bXRycl9hcGVyLCAwLCAwKTsKLQkgICAgcGFyLT5tdHJyX2FwZXIgPSAtMTsKKwkJbXRycl9kZWwocGFyLT5tdHJyX2FwZXIsIDAsIDApOworCQlwYXItPm10cnJfYXBlciA9IC0xOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CkBAIC0yNzM1LDE4ICsyODExLDE4IEBACiAJcGh5c19zaXplW202NF9udW1dID0gc2l6ZTsKIAlwaHlzX2d1aXJlZ2Jhc2VbbTY0X251bV0gPSBndWlyZWdiYXNlOwogCVBSSU5US0koInN0b3JlZCB0aGVtIGFsbDogJCUwOGxYICQlMDhsWCAkJTA4bFggXG4iLCB2bWVtYmFzZSwgc2l6ZSwKLQkgICAgICAgZ3VpcmVnYmFzZSk7CisJCWd1aXJlZ2Jhc2UpOwogCXJldHVybiAwOwogCi0gICAgICBtYWNoNjRfaW52YWxpZDoKKyBtYWNoNjRfaW52YWxpZDoKIAlwaHlzX3ZtZW1iYXNlW202NF9udW1dID0gMDsKIAlyZXR1cm4gLTE7CiB9CiAjZW5kaWYgLyogQ09ORklHX0FUQVJJICovCiAKLSAgICAvKgotICAgICAqICBCbGFuayB0aGUgZGlzcGxheS4KLSAgICAgKi8KKy8qCisgKiBCbGFuayB0aGUgZGlzcGxheS4KKyAqLwogCiBzdGF0aWMgaW50IGF0eWZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CkBAIC0yNzY4LDIwICsyODQ0LDIwIEBACiAJZ2VuX2NudGwgPSBhdHlfbGRfbGUzMihDUlRDX0dFTl9DTlRMLCBwYXIpOwogCWdlbl9jbnRsICY9IH4weDQwMDAwNGM7CiAJc3dpdGNoIChibGFuaykgewotCQljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCQlicmVhazsKLQkJY2FzZSBGQl9CTEFOS19OT1JNQUw6Ci0JCQlnZW5fY250bCB8PSAweDQwMDAwNDA7Ci0JCQlicmVhazsKLQkJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgotCQkJZ2VuX2NudGwgfD0gMHg0MDAwMDQ4OwotCQkJYnJlYWs7Ci0JCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKLQkJCWdlbl9jbnRsIHw9IDB4NDAwMDA0NDsKLQkJCWJyZWFrOwotCQljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKLQkJCWdlbl9jbnRsIHw9IDB4NDAwMDA0YzsKLQkJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCWdlbl9jbnRsIHw9IDB4NDAwMDA0MDsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCQlnZW5fY250bCB8PSAweDQwMDAwNDg7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwkJZ2VuX2NudGwgfD0gMHg0MDAwMDQ0OworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJZ2VuX2NudGwgfD0gMHg0MDAwMDRjOworCQlicmVhazsKIAl9CiAJYXR5X3N0X2xlMzIoQ1JUQ19HRU5fQ05UTCwgZ2VuX2NudGwsIHBhcik7CiAKQEAgLTI4MDYsMTUgKzI4ODIsMTUgQEAKIAlhdHlfc3RfOChEQUNfREFUQSwgYmx1ZSwgcGFyKTsKIH0KIAotICAgIC8qCi0gICAgICogIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVlcyBzdXBwbGllZCBhcmUgYWxyZWFkeQotICAgICAqICByb3VuZGVkIGRvd24gdG8gdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzIChhY2NvcmRpbmcgdG8gdGhlCi0gICAgICogIGVudHJpZXMgaW4gdGhlIHZhciBzdHJ1Y3R1cmUpLiBSZXR1cm4gIT0gMCBmb3IgaW52YWxpZCByZWduby4KLSAgICAgKiAgISEgNCAmIDggPSAgUFNFVURPLCA+IDggPSBESVJFQ1RDT0xPUgotICAgICAqLworLyoKKyAqIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVlcyBzdXBwbGllZCBhcmUgYWxyZWFkeQorICogcm91bmRlZCBkb3duIHRvIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcyAoYWNjb3JkaW5nIHRvIHRoZQorICogZW50cmllcyBpbiB0aGUgdmFyIHN0cnVjdHVyZSkuIFJldHVybiAhPSAwIGZvciBpbnZhbGlkIHJlZ25vLgorICogISEgNCAmIDggPSAgUFNFVURPLCA+IDggPSBESVJFQ1RDT0xPUgorICovCiAKIHN0YXRpYyBpbnQgYXR5ZmJfc2V0Y29scmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAotCXVfaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCisJCQkgICB1X2ludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IChzdHJ1Y3QgYXR5ZmJfcGFyICopIGluZm8tPnBhcjsKIAlpbnQgaSwgZGVwdGg7CkBAIC0yODY4LDE2ICsyOTQ0LDE1IEBACiAJCWlmIChkZXB0aCA9PSAxNikgewogCQkJaWYgKHJlZ25vIDwgMzIpCiAJCQkJYXR5X3N0X3BhbChyZWdubyA8PCAzLCByZWQsCi0JCQkJCSAgIHBhci0+cGFsZXR0ZVtyZWdubzw8MV0uZ3JlZW4sCisJCQkJCSAgIHBhci0+cGFsZXR0ZVtyZWdubyA8PCAxXS5ncmVlbiwKIAkJCQkJICAgYmx1ZSwgcGFyKTsKLQkJCXJlZCA9IHBhci0+cGFsZXR0ZVtyZWdubz4+MV0ucmVkOwotCQkJYmx1ZSA9IHBhci0+cGFsZXR0ZVtyZWdubz4+MV0uYmx1ZTsKKwkJCXJlZCA9IHBhci0+cGFsZXR0ZVtyZWdubyA+PiAxXS5yZWQ7CisJCQlibHVlID0gcGFyLT5wYWxldHRlW3JlZ25vID4+IDFdLmJsdWU7CiAJCQlyZWdubyA8PD0gMjsKIAkJfSBlbHNlIGlmIChkZXB0aCA9PSAxNSkgewogCQkJcmVnbm8gPDw9IDM7Ci0JCQlmb3IoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCSAgICBhdHlfc3RfcGFsKHJlZ25vICsgaSwgcmVkLCBncmVlbiwgYmx1ZSwgcGFyKTsKLQkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJYXR5X3N0X3BhbChyZWdubyArIGksIHJlZCwgZ3JlZW4sIGJsdWUsIHBhcik7CiAJCX0KIAl9CiAJYXR5X3N0X3BhbChyZWdubywgcmVkLCBncmVlbiwgYmx1ZSwgcGFyKTsKQEAgLTI4OTAsNyArMjk2NSw4IEBACiAjaWZkZWYgX19zcGFyY19fCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGF0eWZiX3NldHVwX3NwYXJjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgYWRkcikKKwkJCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcDsKQEAgLTI5NzgsNyArMzA1NCw4IEBACiAJCWorKzsKIAl9CiAKLQlpZigocmV0ID0gY29ycmVjdF9jaGlwc2V0KHBhcikpKQorCXJldCA9IGNvcnJlY3RfY2hpcHNldChwYXIpOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlpZiAoSVNfWEwocGRldi0+ZGV2aWNlKSkgewpAQCAtMzEwOCwyOCArMzE4NSwyOCBAQAogCXUzMiBkcml2X2luZl90YWIsIHNpZzsKIAl1MTYgbGNkX29mczsKIAotCS8qIFRvIHN1cHBvcnQgYW4gTENEIHBhbmVsLCB3ZSBzaG91bGQga25vdyBpdCdzIGRpbWVuc2lvbnMgYW5kCisJLyoKKwkgKiBUbyBzdXBwb3J0IGFuIExDRCBwYW5lbCwgd2Ugc2hvdWxkIGtub3cgaXQncyBkaW1lbnNpb25zIGFuZAogCSAqICBpdCdzIGRlc2lyZWQgcGl4ZWwgY2xvY2suCiAJICogVGhlcmUgYXJlIHR3byB3YXlzIHRvIGRvIGl0OgogCSAqICAtIENoZWNrIHRoZSBzdGFydHVwIHZpZGVvIG1vZGUgYW5kIGNhbGN1bGF0ZSB0aGUgcGFuZWwKIAkgKiAgICBzaXplIGZyb20gaXQuIFRoaXMgaXMgdW5yZWxpYWJsZS4KIAkgKiAgLSBSZWFkIGl0IGZyb20gdGhlIGRyaXZlciBpbmZvcm1hdGlvbiB0YWJsZSBpbiB0aGUgdmlkZW8gQklPUy4KLQkqLworCSAqLwogCS8qIEFkZHJlc3Mgb2YgZHJpdmVyIGluZm9ybWF0aW9uIHRhYmxlIGlzIGF0IG9mZnNldCAweDc4LiAqLwogCWRyaXZfaW5mX3RhYiA9IGJpb3NfYmFzZSArICooKHUxNiAqKShiaW9zX2Jhc2UrMHg3OCkpOwogCiAJLyogQ2hlY2sgZm9yIHRoZSBkcml2ZXIgaW5mb3JtYXRpb24gdGFibGUgc2lnbmF0dXJlLiAqLwotCXNpZyA9ICgqKHUzMiAqKWRyaXZfaW5mX3RhYik7CisJc2lnID0gKih1MzIgKilkcml2X2luZl90YWI7CiAJaWYgKChzaWcgPT0gMHg1NDUwNGMyNCkgfHwgLyogUmFnZSBMVCBwcm8gKi8KLQkJKHNpZyA9PSAweDU0NGQ1MjI0KSB8fCAvKiBSYWdlIG1vYmlsaXR5ICovCi0JCShzaWcgPT0gMHg1NDQzNTgyNCkgfHwgLyogUmFnZSBYQyAqLwotCQkoc2lnID09IDB4NTQ0YzU4MjQpKSB7IC8qIFJhZ2UgWEwgKi8KKwkgICAgKHNpZyA9PSAweDU0NGQ1MjI0KSB8fCAvKiBSYWdlIG1vYmlsaXR5ICovCisJICAgIChzaWcgPT0gMHg1NDQzNTgyNCkgfHwgLyogUmFnZSBYQyAqLworCSAgICAoc2lnID09IDB4NTQ0YzU4MjQpKSB7IC8qIFJhZ2UgWEwgKi8KIAkJUFJJTlRLSSgiQklPUyBjb250YWlucyBkcml2ZXIgaW5mb3JtYXRpb24gdGFibGUuXG4iKTsKLQkJbGNkX29mcyA9ICgqKHUxNiAqKShkcml2X2luZl90YWIgKyAxMCkpOworCQlsY2Rfb2ZzID0gKih1MTYgKikoZHJpdl9pbmZfdGFiICsgMTApOwogCQlwYXItPmxjZF90YWJsZSA9IDA7Ci0JCWlmIChsY2Rfb2ZzICE9IDApIHsKKwkJaWYgKGxjZF9vZnMgIT0gMCkKIAkJCXBhci0+bGNkX3RhYmxlID0gYmlvc19iYXNlICsgbGNkX29mczsKLQkJfQogCX0KIAogCWlmIChwYXItPmxjZF90YWJsZSAhPSAwKSB7CkBAIC0zMTQ0LDE0ICszMjIxLDE2IEBACiAJCXUxNiB3aWR0aCwgaGVpZ2h0LCBwYW5lbF90eXBlLCByZWZyZXNoX3JhdGVzOwogCQl1MTYgKmxjZG1vZGVwdHI7CiAJCXUzMiBmb3JtYXQ7Ci0JCXU4IGxjZF9yZWZyZXNoX3JhdGVzWzE2XSA9IHs1MCw1Niw2MCw2Nyw3MCw3Miw3NSw3Niw4NSw5MCwxMDAsMTIwLDE0MCwxNTAsMTYwLDIwMH07Ci0JCS8qIFRoZSBtb3N0IGltcG9ydGFudCBpbmZvcm1hdGlvbiBpcyB0aGUgcGFuZWwgc2l6ZSBhdAorCQl1OCBsY2RfcmVmcmVzaF9yYXRlc1sxNl0gPSB7IDUwLCA1NiwgNjAsIDY3LCA3MCwgNzIsIDc1LCA3NiwgODUsCisJCQkJCSAgICAgOTAsIDEwMCwgMTIwLCAxNDAsIDE1MCwgMTYwLCAyMDAgfTsKKwkJLyoKKwkJICogVGhlIG1vc3QgaW1wb3J0YW50IGluZm9ybWF0aW9uIGlzIHRoZSBwYW5lbCBzaXplIGF0CiAJCSAqIG9mZnNldCAyNSBhbmQgMjcsIGJ1dCB0aGVyZSdzIHNvbWUgb3RoZXIgbmljZSBpbmZvcm1hdGlvbgogCQkgKiB3aGljaCB3ZSBwcmludCB0byB0aGUgc2NyZWVuLgogCQkgKi8KIAkJaWQgPSAqKHU4ICopcGFyLT5sY2RfdGFibGU7Ci0JCXN0cm5jcHkobW9kZWwsKGNoYXIgKilwYXItPmxjZF90YWJsZSsxLDI0KTsKLQkJbW9kZWxbMjNdPTA7CisJCXN0cm5jcHkobW9kZWwsIChjaGFyICopcGFyLT5sY2RfdGFibGUrMSwgMjQpOworCQltb2RlbFsyM10gPSAwOwogCiAJCXdpZHRoID0gcGFyLT5sY2Rfd2lkdGggPSAqKHUxNiAqKShwYXItPmxjZF90YWJsZSsyNSk7CiAJCWhlaWdodCA9IHBhci0+bGNkX2hlaWdodCA9ICoodTE2ICopKHBhci0+bGNkX3RhYmxlKzI3KTsKQEAgLTMxNjQsNyArMzI0Myw3IEBACiAJCQl0eHRkdWFsID0gImR1YWwgKHNwbGl0KSAiOwogCQllbHNlCiAJCQl0eHRkdWFsID0gIiI7Ci0JCXRlY2ggPSAocGFuZWxfdHlwZT4+MikgJiA2MzsKKwkJdGVjaCA9IChwYW5lbF90eXBlID4+IDIpICYgNjM7CiAJCXN3aXRjaCAodGVjaCkgewogCQljYXNlIDA6CiAJCQl0eHRtb25pdG9yID0gInBhc3NpdmUgbWF0cml4IjsKQEAgLTMyMjQsMjIgKzMzMDMsMjQgQEAKIAkJCX0KIAkJfQogCQlQUklOVEtJKCIlcyVzICVzIG1vbml0b3IgZGV0ZWN0ZWQ6ICVzXG4iLAotCQkJdHh0ZHVhbCAsdHh0Y29sb3VyLCB0eHRtb25pdG9yLCBtb2RlbCk7CisJCQl0eHRkdWFsLCB0eHRjb2xvdXIsIHR4dG1vbml0b3IsIG1vZGVsKTsKIAkJUFJJTlRLSSgiICAgICAgIGlkPSVkLCAlZHglZCBwaXhlbHMsICVzXG4iLAogCQkJaWQsIHdpZHRoLCBoZWlnaHQsIHR4dGZvcm1hdCk7CiAJCXJlZnJlc2hfcmF0ZXNfYnVmWzBdID0gMDsKIAkJcmVmcmVzaF9yYXRlcyA9ICoodTE2ICopKHBhci0+bGNkX3RhYmxlKzYyKTsKIAkJbSA9IDE7CiAJCWYgPSAwOwotCQlmb3IgKGk9MDtpPDE2O2krKykgeworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQkJaWYgKHJlZnJlc2hfcmF0ZXMgJiBtKSB7CiAJCQkJaWYgKGYgPT0gMCkgewotCQkJCQlzcHJpbnRmKHN0cmJ1ZiwgIiVkIiwgbGNkX3JlZnJlc2hfcmF0ZXNbaV0pOworCQkJCQlzcHJpbnRmKHN0cmJ1ZiwgIiVkIiwKKwkJCQkJCWxjZF9yZWZyZXNoX3JhdGVzW2ldKTsKIAkJCQkJZisrOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXNwcmludGYoc3RyYnVmLCAiLCVkIiwgbGNkX3JlZnJlc2hfcmF0ZXNbaV0pOworCQkJCQlzcHJpbnRmKHN0cmJ1ZiwgIiwlZCIsCisJCQkJCQlsY2RfcmVmcmVzaF9yYXRlc1tpXSk7CiAJCQkJfQotCQkJCXN0cmNhdChyZWZyZXNoX3JhdGVzX2J1ZixzdHJidWYpOworCQkJCXN0cmNhdChyZWZyZXNoX3JhdGVzX2J1Ziwgc3RyYnVmKTsKIAkJCX0KIAkJCW0gPSBtIDw8IDE7CiAJCX0KQEAgLTMyNDcsNyArMzMyOCw4IEBACiAJCVBSSU5US0koIiAgICAgICBzdXBwb3J0cyByZWZyZXNoIHJhdGVzIFslc10sIGRlZmF1bHQgJWQgSHpcbiIsCiAJCQlyZWZyZXNoX3JhdGVzX2J1ZiwgbGNkX3JlZnJlc2hfcmF0ZXNbZGVmYXVsdF9yZWZyZXNoX3JhdGVdKTsKIAkJcGFyLT5sY2RfcmVmcmVzaHJhdGUgPSBsY2RfcmVmcmVzaF9yYXRlc1tkZWZhdWx0X3JlZnJlc2hfcmF0ZV07Ci0JCS8qIFdlIG5vdyBuZWVkIHRvIGRldGVybWluZSB0aGUgY3J0YyBwYXJhbWV0ZXJzIGZvciB0aGUKKwkJLyoKKwkJICogV2Ugbm93IG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjcnRjIHBhcmFtZXRlcnMgZm9yIHRoZQogCQkgKiBMQ0QgbW9uaXRvci4gVGhpcyBpcyB0cmlja3ksIGJlY2F1c2UgdGhleSBhcmUgbm90IHN0b3JlZAogCQkgKiBpbmRpdmlkdWFsbHkgaW4gdGhlIEJJT1MuIEluc3RlYWQsIHRoZSBCSU9TIGNvbnRhaW5zIGEKIAkJICogdGFibGUgb2YgZGlzcGxheSBtb2RlcyB0aGF0IHdvcmsgZm9yIHRoaXMgbW9uaXRvci4KQEAgLTMzODIsNyArMzQ2NCw5IEBACiB9CiAjZW5kaWYgLyogX19pMzg2X18gKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgYXR5ZmJfc2V0dXBfZ2VuZXJpYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0eWZiX3NldHVwX2dlbmVyaWMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJdTE2IHRtcDsKQEAgLTM0MjksMTAgKzM1MTMsMTIgQEAKIAkJZ290byBhdHlmYl9zZXR1cF9nZW5lcmljX2ZhaWw7CiAJfQogCi0JaWYoKHJldCA9IGNvcnJlY3RfY2hpcHNldChwYXIpKSkKKwlyZXQgPSBjb3JyZWN0X2NoaXBzZXQocGFyKTsKKwlpZiAocmV0KQogCQlnb3RvIGF0eWZiX3NldHVwX2dlbmVyaWNfZmFpbDsKICNpZmRlZiBfX2kzODZfXwotCWlmKChyZXQgPSBpbml0X2Zyb21fYmlvcyhwYXIpKSkKKwlyZXQgPSBpbml0X2Zyb21fYmlvcyhwYXIpOworCWlmIChyZXQpCiAJCWdvdG8gYXR5ZmJfc2V0dXBfZ2VuZXJpY19mYWlsOwogI2VuZGlmCiAJaWYgKCEoYXR5X2xkX2xlMzIoQ1JUQ19HRU5fQ05UTCwgcGFyKSAmIENSVENfRVhUX0RJU1BfRU4pKQpAQCAtMzQ1Nyw3ICszNTQzLDggQEAKIAogI2VuZGlmIC8qICFfX3NwYXJjX18gKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgYXR5ZmJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQgYXR5ZmJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIsIHJlc19zdGFydCwgcmVzX3NpemU7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC0zNDgyLDEwICszNTY5LDEwIEBACiAJLyogUmVzZXJ2ZSBzcGFjZSAqLwogCXJlc19zdGFydCA9IHJwLT5zdGFydDsKIAlyZXNfc2l6ZSA9IHJwLT5lbmQgLSBycC0+c3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uIChyZXNfc3RhcnQsIHJlc19zaXplLCAiYXR5ZmIiKSkKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXNfc3RhcnQsIHJlc19zaXplLCAiYXR5ZmIiKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotICAgICAgICAvKiBBbGxvY2F0ZSBmcmFtZWJ1ZmZlciAqLworCS8qIEFsbG9jYXRlIGZyYW1lYnVmZmVyICovCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgYXR5ZmJfcGFyKSwgJnBkZXYtPmRldik7CiAJaWYgKCFpbmZvKSB7CiAJCVBSSU5US0UoImF0eWZiX3BjaV9wcm9iZSgpIGNhbid0IGFsbG9jIGZiX2luZm9cbiIpOwpAQCAtMzU3Myw3ICszNjYwLDggQEAKIAlmb3IgKG02NF9udW0gPSAwOyBtNjRfbnVtIDwgbWFjaDY0X2NvdW50OyBtNjRfbnVtKyspIHsKIAkJaWYgKCFwaHlzX3ZtZW1iYXNlW202NF9udW1dIHx8ICFwaHlzX3NpemVbbTY0X251bV0gfHwKIAkJICAgICFwaHlzX2d1aXJlZ2Jhc2VbbTY0X251bV0pIHsKLQkJICAgIFBSSU5US0koInBoeXNfKlslZF0gcGFyYW1ldGVycyBub3Qgc2V0ID0+IHJldHVybmluZyBlYXJseS4gXG4iLCBtNjRfbnVtKTsKKwkJCVBSSU5US0koInBoeXNfKlslZF0gcGFyYW1ldGVycyBub3Qgc2V0ID0+ICIKKwkJCQkicmV0dXJuaW5nIGVhcmx5LiBcbiIsIG02NF9udW0pOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMzU4OSw4ICszNjc3LDggQEAKIAkJcGFyLT5pcnEgPSAodW5zaWduZWQgaW50KSAtMTsgLyogc29tZXRoaW5nIGludmFsaWQgKi8KIAogCQkvKgotCQkgKiAgTWFwIHRoZSB2aWRlbyBtZW1vcnkgKHBoeXNpY2FsIGFkZHJlc3MgZ2l2ZW4pIHRvIHNvbWV3aGVyZSBpbiB0aGUKLQkJICogIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgorCQkgKiBNYXAgdGhlIHZpZGVvIG1lbW9yeSAocGh5c2ljYWwgYWRkcmVzcyBnaXZlbikKKwkJICogdG8gc29tZXdoZXJlIGluIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KIAkJICovCiAJCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcChwaHlzX3ZtZW1iYXNlW202NF9udW1dLCBwaHlzX3NpemVbbTY0X251bV0pOwogCQlpbmZvLT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWluZm8tPnNjcmVlbl9iYXNlOyAvKiBGYWtlISAqLwpAQCAtMzY2MSwxMiArMzc0OSwxMiBAQAogCiAjaWZkZWYgQ09ORklHX01UUlIKIAlpZiAocGFyLT5tdHJyX3JlZyA+PSAwKSB7Ci0JICAgIG10cnJfZGVsKHBhci0+bXRycl9yZWcsIDAsIDApOwotCSAgICBwYXItPm10cnJfcmVnID0gLTE7CisJCW10cnJfZGVsKHBhci0+bXRycl9yZWcsIDAsIDApOworCQlwYXItPm10cnJfcmVnID0gLTE7CiAJfQogCWlmIChwYXItPm10cnJfYXBlciA+PSAwKSB7Ci0JICAgIG10cnJfZGVsKHBhci0+bXRycl9hcGVyLCAwLCAwKTsKLQkgICAgcGFyLT5tdHJyX2FwZXIgPSAtMTsKKwkJbXRycl9kZWwocGFyLT5tdHJyX2FwZXIsIDAsIDApOworCQlwYXItPm10cnJfYXBlciA9IC0xOwogCX0KICNlbmRpZgogI2lmbmRlZiBfX3NwYXJjX18KQEAgLTM5MDAsMjkgKzM5ODgsMjkgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXR5ZmJfaW5pdCh2b2lkKQogewotICAgIGludCBlcnIxID0gMSwgZXJyMiA9IDE7CisJaW50IGVycjEgPSAxLCBlcnIyID0gMTsKICNpZm5kZWYgTU9EVUxFCi0gICAgY2hhciAqb3B0aW9uID0gTlVMTDsKKwljaGFyICpvcHRpb24gPSBOVUxMOwogCi0gICAgaWYgKGZiX2dldF9vcHRpb25zKCJhdHlmYiIsICZvcHRpb24pKQotCXJldHVybiAtRU5PREVWOwotICAgIGF0eWZiX3NldHVwKG9wdGlvbik7CisJaWYgKGZiX2dldF9vcHRpb25zKCJhdHlmYiIsICZvcHRpb24pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlhdHlmYl9zZXR1cChvcHRpb24pOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUENJCi0gICAgZXJyMSA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0eWZiX2RyaXZlcik7CisJZXJyMSA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0eWZiX2RyaXZlcik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVRBUkkKLSAgICBlcnIyID0gYXR5ZmJfYXRhcmlfcHJvYmUoKTsKKwllcnIyID0gYXR5ZmJfYXRhcmlfcHJvYmUoKTsKICNlbmRpZgogCi0gICAgaWYgKGVycjEgJiYgZXJyMikKLQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZXJyMSAmJiBlcnIyKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotICAgIGlmIChkbWlfY2hlY2tfc3lzdGVtKGF0eWZiX3JlYm9vdF9pZHMpKQotCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmYXR5ZmJfcmVib290X25vdGlmaWVyKTsKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShhdHlmYl9yZWJvb3RfaWRzKSkKKwkJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZhdHlmYl9yZWJvb3Rfbm90aWZpZXIpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdHlmYl9leGl0KHZvaWQpCkBAIC0zOTUxLDggKzQwMzksNyBAQAogbW9kdWxlX3BhcmFtKHhjbGssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHhjbGssICJpbnQ6IG92ZXJyaWRlIGFjY2VsZXJhdGVkIGVuZ2luZSBjbG9jayIpOwogbW9kdWxlX3BhcmFtKGNvbXBfc3luYywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoY29tcF9zeW5jLAotCQkgIlNldCBjb21wb3NpdGUgc3luYyBzaWduYWwgdG8gbG93ICgwKSBvciBoaWdoICgxKSIpOworTU9EVUxFX1BBUk1fREVTQyhjb21wX3N5bmMsICJTZXQgY29tcG9zaXRlIHN5bmMgc2lnbmFsIHRvIGxvdyAoMCkgb3IgaGlnaCAoMSkiKTsKIG1vZHVsZV9wYXJhbShtb2RlLCBjaGFycCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1vZGUsICJTcGVjaWZ5IHJlc29sdXRpb24gYXMgXCI8eHJlcz54PHlyZXM+Wy08YnBwPl1bQDxyZWZyZXNoPl1cIiAiKTsKICNpZmRlZiBDT05GSUdfTVRSUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCmluZGV4IDM3OGYyNzcuLmE2OTlhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKQEAgLTcxNSw4ICs3MTUsMTEgQEAKIAkJCX0KIAkJCS8qIE1vZGUgb3B0aW9uIChvbmx5IG9wdGlvbiB0aGF0IHN0YXJ0IHdpdGggZGlnaXQpICovCiAJCQllbHNlIGlmIChpc2RpZ2l0KHRoaXNfb3B0WzBdKSkgewotCQkJCW1vZGUgPSBrbWFsbG9jKHN0cmxlbih0aGlzX29wdCkgKyAxLCBHRlBfS0VSTkVMKTsKLQkJCQlzdHJuY3B5KG1vZGUsIHRoaXNfb3B0LCBzdHJsZW4odGhpc19vcHQpICsgMSk7CisJCQkJbW9kZSA9IGtzdHJkdXAodGhpc19vcHQsIEdGUF9LRVJORUwpOworCQkJCWlmICghbW9kZSkgeworCQkJCQlwcmludF9lcnIoIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIpOworCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQl9CiAJCQl9CiAJCQkvKiBVbnN1cHBvcnRlZCBvcHRpb24gKi8KIAkJCWVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYwppbmRleCBmOGE0YmIyLi4yMjExYTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYwpAQCAtNjM5LDMgKzYzOSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkxDRCBhbmQgYmFja2xpZ2h0IGRyaXZlciBmb3IgU0hBUlAgQzd4MC9DeHgwMCIpOwogTU9EVUxFX0FVVEhPUigiRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpjb3JnaS1sY2QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jCmluZGV4IDJlYjIwNmIuLjQ2MzFjYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHR2MzUwcXYuYwpAQCAtMzI4LDMgKzMyOCw0IEBACiBNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBMVFYzNTBRViBMQ0QgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpsdHYzNTBxdiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdGRvMjRtLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90ZG8yNG0uYwppbmRleCA1MTQyMmZjLi5iYmZiNTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90ZG8yNG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90ZG8yNG0uYwpAQCAtNDcyLDMgKzQ3Miw0IEBACiBNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBUb3Bwb2x5IFRETzI0TSBMQ0QgUGFuZWwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOnRkbzI0bSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfbGNkLmMKaW5kZXggYjdmYmM3NS4uNTBlYzE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2xjZC5jCkBAIC0zMDAsNCArMzAwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIkRtaXRyeSBCYXJ5c2hrb3YiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTENEL0JhY2tsaWdodCBjb250cm9sIGZvciBTaGFycCBTTC02MDAwIFBEQSIpOwotCitNT0RVTEVfQUxJQVMoInNwaTp0b3NhLWxjZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdmdnMjQzMmE0LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC92Z2cyNDMyYTQuYwppbmRleCA4ZTY1M2I4Li5iNDkwNjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC92Z2cyNDMyYTQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC92Z2cyNDMyYTQuYwpAQCAtMjgwLDUgKzI4MCw0IEBACiBNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlZHRzI0MzJBNCBMQ0QgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0KLQorTU9EVUxFX0FMSUFTKCJzcGk6VkdHMjQzMkE0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NmYmNvcHlhcmVhLmMgYi9kcml2ZXJzL3ZpZGVvL2NmYmNvcHlhcmVhLmMKaW5kZXggZGYwM2YzNy4uNzllNWY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jZmJjb3B5YXJlYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2ZiY29weWFyZWEuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCQkJZDAgPj49IHJpZ2h0OwogCQkJfSBlbHNlIGlmIChzcmNfaWR4K24gPD0gYml0cykgewogCQkJCS8vIFNpbmdsZSBzb3VyY2Ugd29yZAotCQkJCWQwIDw8PSBsZWZ0OzsKKwkJCQlkMCA8PD0gbGVmdDsKIAkJCX0gZWxzZSB7CiAJCQkJLy8gMiBzb3VyY2Ugd29yZHMKIAkJCQlkMSA9IEZCX1JFQURMKHNyYyArIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMKaW5kZXggNjk4NjRiMS4uNmI3YzhmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCkBAIC0yNSw3ICsyNSw3IEBACiAJCQkgICAgICAgc3RydWN0IHZjX2RhdGEgKnZjKQogewogCWludCBpLCBvZmZzZXQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDwgMTApID8gMSA6IDI7Ci0JaW50IHdpZHRoID0gKHZjLT52Y19mb250LndpZHRoICsgNykgPj4gMzsKKwlpbnQgd2lkdGggPSBESVZfUk9VTkRfVVAodmMtPnZjX2ZvbnQud2lkdGgsIDgpOwogCXVuc2lnbmVkIGludCBjZWxsc2l6ZSA9IHZjLT52Y19mb250LmhlaWdodCAqIHdpZHRoOwogCXU4IGM7CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQkgICAgICBpbnQgZmcsIGludCBiZykKIHsKIAlzdHJ1Y3QgZmJfaW1hZ2UgaW1hZ2U7Ci0JdTMyIHdpZHRoID0gKHZjLT52Y19mb250LndpZHRoICsgNykvODsKKwl1MzIgd2lkdGggPSBESVZfUk9VTkRfVVAodmMtPnZjX2ZvbnQud2lkdGgsIDgpOwogCXUzMiBjZWxsc2l6ZSA9IHdpZHRoICogdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCXUzMiBtYXhjbnQgPSBpbmZvLT5waXhtYXAuc2l6ZS9jZWxsc2l6ZTsKIAl1MzIgc2Nhbl9hbGlnbiA9IGluZm8tPnBpeG1hcC5zY2FuX2FsaWduIC0gMTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJY250ID0gY291bnQ7CiAKIAkJaW1hZ2Uud2lkdGggPSB2Yy0+dmNfZm9udC53aWR0aCAqIGNudDsKLQkJcGl0Y2ggPSAoKGltYWdlLndpZHRoICsgNykgPj4gMykgKyBzY2FuX2FsaWduOworCQlwaXRjaCA9IERJVl9ST1VORF9VUChpbWFnZS53aWR0aCwgOCkgKyBzY2FuX2FsaWduOwogCQlwaXRjaCAmPSB+c2Nhbl9hbGlnbjsKIAkJc2l6ZSA9IHBpdGNoICogaW1hZ2UuaGVpZ2h0ICsgYnVmX2FsaWduOwogCQlzaXplICY9IH5idWZfYWxpZ247CkBAIC0yMzksNyArMjM5LDcgQEAKIAlzdHJ1Y3QgZmJfY3Vyc29yIGN1cnNvcjsKIAlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAJdW5zaWduZWQgc2hvcnQgY2hhcm1hc2sgPSB2Yy0+dmNfaGlfZm9udF9tYXNrID8gMHgxZmYgOiAweGZmOwotCWludCB3ID0gKHZjLT52Y19mb250LndpZHRoICsgNykgPj4gMywgYzsKKwlpbnQgdyA9IERJVl9ST1VORF9VUCh2Yy0+dmNfZm9udC53aWR0aCwgOCksIGM7CiAJaW50IHkgPSByZWFsX3kob3BzLT5wLCB2Yy0+dmNfeSk7CiAJaW50IGF0dHJpYnV0ZSwgdXNlX3N3ID0gKHZjLT52Y19jdXJzb3JfdHlwZSAmIDB4MTApOwogCWludCBlcnIgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCAzYTQ0Njk1Li41YTY4NmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMTE0LDYgKzExNCw3IEBACiBzdGF0aWMgaW50IGZiY29uX2lzX2RlZmF1bHQgPSAxOyAKIHN0YXRpYyBpbnQgZmJjb25faGFzX2V4aXRlZDsKIHN0YXRpYyBpbnQgcHJpbWFyeV9kZXZpY2UgPSAtMTsKK3N0YXRpYyBpbnQgZmJjb25faGFzX2NvbnNvbGVfYmluZDsKIAogI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZCiBzdGF0aWMgaW50IG1hcF9vdmVycmlkZTsKQEAgLTU0NCw2ICs1NDUsOCBAQAogCQkJY29uMmZiX21hcFtpXSA9IC0xOwogCQl9CiAJCWluZm9faWR4ID0gLTE7CisJfSBlbHNlIHsKKwkJZmJjb25faGFzX2NvbnNvbGVfYmluZCA9IDE7CiAJfQogCiAJcmV0dXJuIGVycjsKQEAgLTcyNSw3ICs3MjgsNyBAQAogCQkJCSAgaW50IG9sZGlkeCwgaW50IGZvdW5kKQogewogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IG9sZGluZm8tPmZiY29uX3BhcjsKLQlpbnQgZXJyID0gMDsKKwlpbnQgZXJyID0gMCwgcmV0OwogCiAJaWYgKG9sZGluZm8tPmZib3BzLT5mYl9yZWxlYXNlICYmCiAJICAgIG9sZGluZm8tPmZib3BzLT5mYl9yZWxlYXNlKG9sZGluZm8sIDApKSB7CkBAIC03NTIsOCArNzU1LDE0IEBACiAJCSAgbmV3aW5mbyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuIFRodXMsIGEgY2FsbCB0bwogCQkgIGZiX3NldF9wYXIoKSBtYXkgYmUgbmVlZGVkIGZvciB0aGUgbmV3aW5mby4KIAkJKi8KLQkJaWYgKG5ld2luZm8tPmZib3BzLT5mYl9zZXRfcGFyKQotCQkJbmV3aW5mby0+ZmJvcHMtPmZiX3NldF9wYXIobmV3aW5mbyk7CisJCWlmIChuZXdpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcikgeworCQkJcmV0ID0gbmV3aW5mby0+ZmJvcHMtPmZiX3NldF9wYXIobmV3aW5mbyk7CisKKwkJCWlmIChyZXQpCisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb24yZmJfcmVsZWFzZV9vbGRpbmZvOiAiCisJCQkJCSJkZXRlY3RlZCB1bmhhbmRsZWQgZmJfc2V0X3BhciBlcnJvciwgIgorCQkJCQkiZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKKwkJfQogCX0KIAogCXJldHVybiBlcnI7CkBAIC03NjMsMTEgKzc3MiwxOCBAQAogCQkJCWludCB1bml0LCBpbnQgc2hvd19sb2dvKQogewogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlpbnQgcmV0OwogCiAJb3BzLT5jdXJyY29uID0gZmdfY29uc29sZTsKIAotCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhciAmJiAhKG9wcy0+ZmxhZ3MgJiBGQkNPTl9GTEFHU19JTklUKSkKLQkJaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIoaW5mbyk7CisJaWYgKGluZm8tPmZib3BzLT5mYl9zZXRfcGFyICYmICEob3BzLT5mbGFncyAmIEZCQ09OX0ZMQUdTX0lOSVQpKSB7CisJCXJldCA9IGluZm8tPmZib3BzLT5mYl9zZXRfcGFyKGluZm8pOworCisJCWlmIChyZXQpCisJCQlwcmludGsoS0VSTl9FUlIgImNvbjJmYl9pbml0X2Rpc3BsYXk6IGRldGVjdGVkICIKKwkJCQkidW5oYW5kbGVkIGZiX3NldF9wYXIgZXJyb3IsICIKKwkJCQkiZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKKwl9CiAKIAlvcHMtPmZsYWdzIHw9IEZCQ09OX0ZMQUdTX0lOSVQ7CiAJb3BzLT5ncmFwaGljcyA9IDA7CkBAIC0xMDA2LDcgKzEwMjIsNyBAQAogCXN0cnVjdCB2Y19kYXRhICpzdmMgPSAqZGVmYXVsdF9tb2RlOwogCXN0cnVjdCBkaXNwbGF5ICp0LCAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCWludCBsb2dvID0gMSwgbmV3X3Jvd3MsIG5ld19jb2xzLCByb3dzLCBjb2xzLCBjaGFyY250ID0gMjU2OwotCWludCBjYXA7CisJaW50IGNhcCwgcmV0OwogCiAJaWYgKGluZm9faWR4ID09IC0xIHx8IGluZm8gPT0gTlVMTCkKIAkgICAgcmV0dXJuOwpAQCAtMTA5Miw4ICsxMTA4LDE1IEBACiAJICovCiAJaWYgKENPTl9JU19WSVNJQkxFKHZjKSAmJiB2Yy0+dmNfbW9kZSA9PSBLRF9URVhUKSB7CiAJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhciAmJgotCQkgICAgIShvcHMtPmZsYWdzICYgRkJDT05fRkxBR1NfSU5JVCkpCi0JCQlpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcihpbmZvKTsKKwkJICAgICEob3BzLT5mbGFncyAmIEZCQ09OX0ZMQUdTX0lOSVQpKSB7CisJCQlyZXQgPSBpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcihpbmZvKTsKKworCQkJaWYgKHJldCkKKwkJCQlwcmludGsoS0VSTl9FUlIgImZiY29uX2luaXQ6IGRldGVjdGVkICIKKwkJCQkJInVuaGFuZGxlZCBmYl9zZXRfcGFyIGVycm9yLCAiCisJCQkJCSJlcnJvciBjb2RlICVkXG4iLCByZXQpOworCQl9CisKIAkJb3BzLT5mbGFncyB8PSBGQkNPTl9GTEFHU19JTklUOwogCX0KIApAQCAtMjExOSw3ICsyMTQyLDcgQEAKIAlzdHJ1Y3QgZmJjb25fb3BzICpvcHM7CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwotCWludCBpLCBwcmV2X2NvbnNvbGUsIGNoYXJjbnQgPSAyNTY7CisJaW50IGksIHJldCwgcHJldl9jb25zb2xlLCBjaGFyY250ID0gMjU2OwogCiAJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CiAJb3BzID0gaW5mby0+ZmJjb25fcGFyOwpAQCAtMjE3NCw4ICsyMTk3LDE0IEBACiAKIAlpZiAob2xkX2luZm8gIT0gTlVMTCAmJiAob2xkX2luZm8gIT0gaW5mbyB8fAogCQkJCSBpbmZvLT5mbGFncyAmIEZCSU5GT19NSVNDX0FMV0FZU19TRVRQQVIpKSB7Ci0JCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcikKLQkJCWluZm8tPmZib3BzLT5mYl9zZXRfcGFyKGluZm8pOworCQlpZiAoaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIpIHsKKwkJCXJldCA9IGluZm8tPmZib3BzLT5mYl9zZXRfcGFyKGluZm8pOworCisJCQlpZiAocmV0KQorCQkJCXByaW50ayhLRVJOX0VSUiAiZmJjb25fc3dpdGNoOiBkZXRlY3RlZCAiCisJCQkJCSJ1bmhhbmRsZWQgZmJfc2V0X3BhciBlcnJvciwgIgorCQkJCQkiZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKKwkJfQogCiAJCWlmIChvbGRfaW5mbyAhPSBpbmZvKQogCQkJZmJjb25fZGVsX2N1cnNvcl90aW1lcihvbGRfaW5mbyk7CkBAIC0yOTIzLDYgKzI5NTIsMTAgQEAKIAogCXJldCA9IHVuYmluZF9jb25fZHJpdmVyKCZmYl9jb24sIGZpcnN0X2ZiX3ZjLCBsYXN0X2ZiX3ZjLAogCQkJCWZiY29uX2lzX2RlZmF1bHQpOworCisJaWYgKCFyZXQpCisJCWZiY29uX2hhc19jb25zb2xlX2JpbmQgPSAwOworCiAJcmV0dXJuIHJldDsKIH0KICNlbHNlCkBAIC0yOTM2LDYgKzI5NjksOSBAQAogewogCWludCBpLCBuZXdfaWR4ID0gLTEsIHJldCA9IDA7CiAKKwlpZiAoIWZiY29uX2hhc19jb25zb2xlX2JpbmQpCisJCXJldHVybiAwOworCiAJZm9yIChpID0gZmlyc3RfZmJfdmM7IGkgPD0gbGFzdF9mYl92YzsgaSsrKSB7CiAJCWlmIChjb24yZmJfbWFwW2ldICE9IGlkeCAmJgogCQkgICAgY29uMmZiX21hcFtpXSAhPSAtMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL25ld3BvcnRfY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbmV3cG9ydF9jb24uYwppbmRleCBkMzFiMjAzLi4zNzcyNDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbmV3cG9ydF9jb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbmV3cG9ydF9jb24uYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJfQogCiAJbmV3cG9ydF94c2l6ZSA9IG5ld3BvcnRfeXNpemUgPSAwOwotCWZvciAoaSA9IDA7IGxpbmV0YWJsZVtpICsgMV0gJiYgKGkgPCBzaXplb2YobGluZXRhYmxlKSk7IGkgKz0gMikgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxpbmV0YWJsZSkgLSAxICYmIGxpbmV0YWJsZVtpICsgMV07IGkgKz0gMikgewogCQljb2xzID0gMDsKIAkJbmV3cG9ydF92YzJfc2V0KG5wcmVncywgVkMyX0lSRUdfUkFERFIsIGxpbmV0YWJsZVtpXSk7CiAJCW5wcmVncy0+c2V0LmRjYm1vZGUgPSAoTlBPUlRfRE1PREVfQVZDMiB8IFZDMl9SRUdBRERSX1JBTSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggNTlkN2Q1ZS4uZGE1NWNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtMTgwLDcgKzE4MCw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSwotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIC8qIHNvZnR3YXJlIHNjcm9sbGJhY2sgKi8KIHN0YXRpYyB2b2lkICp2Z2Fjb25fc2Nyb2xsYmFjazsKIHN0YXRpYyBpbnQgdmdhY29uX3Njcm9sbGJhY2tfdGFpbDsKQEAgLTU5MCwxMiArNTg5LDE0IEBACiAKIHN0YXRpYyB2b2lkIHZnYWNvbl9kZWluaXQoc3RydWN0IHZjX2RhdGEgKmMpCiB7Ci0JLyogV2hlbiBjbG9zaW5nIHRoZSBsYXN0IGNvbnNvbGUsIHJlc2V0IHZpZGVvIG9yaWdpbiAqLwotCWlmICghLS12Z2Fjb25fdW5pX3BhZ2VkaXJbMV0pIHsKKwkvKiBXaGVuIGNsb3NpbmcgdGhlIGFjdGl2ZSBjb25zb2xlLCByZXNldCB2aWRlbyBvcmlnaW4gKi8KKwlpZiAoQ09OX0lTX1ZJU0lCTEUoYykpIHsKIAkJYy0+dmNfdmlzaWJsZV9vcmlnaW4gPSB2Z2FfdnJhbV9iYXNlOwogCQl2Z2Ffc2V0X21lbV90b3AoYyk7Ci0JCWNvbl9mcmVlX3VuaW1hcChjKTsKIAl9CisKKwlpZiAoIS0tdmdhY29uX3VuaV9wYWdlZGlyWzFdKQorCQljb25fZnJlZV91bmltYXAoYyk7CiAJYy0+dmNfdW5pX3BhZ2VkaXJfbG9jID0gJmMtPnZjX3VuaV9wYWdlZGlyOwogCWNvbl9zZXRfZGVmYXVsdF91bmltYXAoYyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlMTAwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwpAQCAtMCwwICsxLDg5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogQmFzZWQgb24gdGhlIExDRCBkcml2ZXIgZm9yIFRJIEF2YWxhbmNoZSBwcm9jZXNzb3JzIHdyaXR0ZW4gYnkKKyAqIEFqYXkgU2luZ2ggYW5kIFNoYWxvbSBIYWkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKWFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPHZpZGVvL2RhOHh4LWZiLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImRhOHh4X2xjZGMiCisKKy8qIExDRCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENEX0VORF9PRl9GUkFNRTAJCUJJVCg4KQorI2RlZmluZSBMQ0RfRklGT19VTkRFUkZMT1cJCUJJVCg1KQorI2RlZmluZSBMQ0RfU1lOQ19MT1NUCQkJQklUKDIpCisKKy8qIExDRCBETUEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBMQ0RfRE1BX0JVUlNUX1NJWkUoeCkJCSgoeCkgPDwgNCkKKyNkZWZpbmUgTENEX0RNQV9CVVJTVF8xCQkJMHgwCisjZGVmaW5lIExDRF9ETUFfQlVSU1RfMgkJCTB4MQorI2RlZmluZSBMQ0RfRE1BX0JVUlNUXzQJCQkweDIKKyNkZWZpbmUgTENEX0RNQV9CVVJTVF84CQkJMHgzCisjZGVmaW5lIExDRF9ETUFfQlVSU1RfMTYJCTB4NAorI2RlZmluZSBMQ0RfRU5EX09GX0ZSQU1FX0lOVF9FTkEJQklUKDIpCisjZGVmaW5lIExDRF9EVUFMX0ZSQU1FX0JVRkZFUl9FTkFCTEUJQklUKDApCisKKy8qIExDRCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRF9DTEtfRElWSVNPUih4KQkJKCh4KSA8PCA4KQorI2RlZmluZSBMQ0RfUkFTVEVSX01PREUJCQkweDAxCisKKy8qIExDRCBSYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBMQ0RfUEFMRVRURV9MT0FEX01PREUoeCkJKCh4KSA8PCAyMCkKKyNkZWZpbmUgUEFMRVRURV9BTkRfREFUQQkJMHgwMAorI2RlZmluZSBQQUxFVFRFX09OTFkJCQkweDAxCisKKyNkZWZpbmUgTENEX01PTk9fOEJJVF9NT0RFCQlCSVQoOSkKKyNkZWZpbmUgTENEX1JBU1RFUl9PUkRFUgkJQklUKDgpCisjZGVmaW5lIExDRF9URlRfTU9ERQkJCUJJVCg3KQorI2RlZmluZSBMQ0RfVU5ERVJGTE9XX0lOVF9FTkEJCUJJVCg2KQorI2RlZmluZSBMQ0RfTU9OT0NIUk9NRV9NT0RFCQlCSVQoMSkKKyNkZWZpbmUgTENEX1JBU1RFUl9FTkFCTEUJCUJJVCgwKQorI2RlZmluZSBMQ0RfVEZUX0FMVF9FTkFCTEUJCUJJVCgyMykKKyNkZWZpbmUgTENEX1NUTl81NjVfRU5BQkxFCQlCSVQoMjQpCisKKy8qIExDRCBSYXN0ZXIgVGltaW5nIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENEX0FDX0JJQVNfVFJBTlNJVElPTlNfUEVSX0lOVCh4KQkoKHgpIDw8IDE2KQorI2RlZmluZSBMQ0RfQUNfQklBU19GUkVRVUVOQ1koeCkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgTENEX1NZTkNfQ1RSTAkJCQlCSVQoMjUpCisjZGVmaW5lIExDRF9TWU5DX0VER0UJCQkJQklUKDI0KQorI2RlZmluZSBMQ0RfSU5WRVJUX1BJWEVMX0NMT0NLCQkJQklUKDIyKQorI2RlZmluZSBMQ0RfSU5WRVJUX0xJTkVfQ0xPQ0sJCQlCSVQoMjEpCisjZGVmaW5lIExDRF9JTlZFUlRfRlJBTUVfQ0xPQ0sJCQlCSVQoMjApCisKKy8qIExDRCBCbG9jayAqLworI2RlZmluZSAgTENEX0NUUkxfUkVHCQkJCTB4NAorI2RlZmluZSAgTENEX1NUQVRfUkVHCQkJCTB4OAorI2RlZmluZSAgTENEX1JBU1RFUl9DVFJMX1JFRwkJCTB4MjgKKyNkZWZpbmUgIExDRF9SQVNURVJfVElNSU5HXzBfUkVHCQkweDJDCisjZGVmaW5lICBMQ0RfUkFTVEVSX1RJTUlOR18xX1JFRwkJMHgzMAorI2RlZmluZSAgTENEX1JBU1RFUl9USU1JTkdfMl9SRUcJCTB4MzQKKyNkZWZpbmUgIExDRF9ETUFfQ1RSTF9SRUcJCQkweDQwCisjZGVmaW5lICBMQ0RfRE1BX0ZSTV9CVUZfQkFTRV9BRERSXzBfUkVHCTB4NDQKKyNkZWZpbmUgIExDRF9ETUFfRlJNX0JVRl9DRUlMSU5HX0FERFJfMF9SRUcJMHg0OAorCisjZGVmaW5lIFdTSV9USU1FT1VUCTUwCisjZGVmaW5lIFBBTEVUVEVfU0laRQkyNTYKKyNkZWZpbmUgTEVGVF9NQVJHSU4JNjQKKyNkZWZpbmUgUklHSFRfTUFSR0lOCTY0CisjZGVmaW5lIFVQUEVSX01BUkdJTgkzMgorI2RlZmluZSBMT1dFUl9NQVJHSU4JMzIKKworc3RhdGljIHJlc291cmNlX3NpemVfdCBkYTh4eF9mYl9yZWdfYmFzZTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmxjZGNfcmVnczsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbGNkY19yZWFkKHVuc2lnbmVkIGludCBhZGRyKQoreworCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRsKGRhOHh4X2ZiX3JlZ19iYXNlICsgKGFkZHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxjZGNfd3JpdGUodW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IGFkZHIpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgZGE4eHhfZmJfcmVnX2Jhc2UgKyAoYWRkcikpOworfQorCitzdHJ1Y3QgZGE4eHhfZmJfcGFyIHsKKwlyZXNvdXJjZV9zaXplX3QgcF9wYWxldHRlX2Jhc2U7CisJdW5zaWduZWQgY2hhciAqdl9wYWxldHRlX2Jhc2U7CisJc3RydWN0IGNsayAqbGNkY19jbGs7CisJaW50IGlycTsKKwl1bnNpZ25lZCBzaG9ydCBwc2V1ZG9fcGFsZXR0ZVsxNl07CisJdW5zaWduZWQgaW50IGRhdGFidWZfc3o7CisJdW5zaWduZWQgaW50IHBhbGV0dGVfc3o7Cit9OworCisvKiBWYXJpYWJsZSBTY3JlZW4gSW5mb3JtYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGE4eHhfZmJfdmFyIF9fZGV2aW5pdGRhdGEgPSB7CisJLnhvZmZzZXQgPSAwLAorCS55b2Zmc2V0ID0gMCwKKwkudHJhbnNwID0gezAsIDAsIDB9LAorCS5ub25zdGQgPSAwLAorCS5hY3RpdmF0ZSA9IDAsCisJLmhlaWdodCA9IC0xLAorCS53aWR0aCA9IC0xLAorCS5waXhjbG9jayA9IDQ2NjY2LAkvKiA0NnVzIC0gQVVPIGRpc3BsYXkgKi8KKwkuYWNjZWxfZmxhZ3MgPSAwLAorCS5sZWZ0X21hcmdpbiA9IExFRlRfTUFSR0lOLAorCS5yaWdodF9tYXJnaW4gPSBSSUdIVF9NQVJHSU4sCisJLnVwcGVyX21hcmdpbiA9IFVQUEVSX01BUkdJTiwKKwkubG93ZXJfbWFyZ2luID0gTE9XRVJfTUFSR0lOLAorCS5zeW5jID0gMCwKKwkudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECit9OworCitzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGRhOHh4X2ZiX2ZpeCBfX2RldmluaXRkYXRhID0geworCS5pZCA9ICJEQTh4eCBGQiBEcnYiLAorCS50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTLAorCS50eXBlX2F1eCA9IDAsCisJLnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiwKKwkueHBhbnN0ZXAgPSAxLAorCS55cGFuc3RlcCA9IDEsCisJLnl3cmFwc3RlcCA9IDEsCisJLmFjY2VsID0gRkJfQUNDRUxfTk9ORQorfTsKKworc3RydWN0IGRhOHh4X3BhbmVsIHsKKwljb25zdCBjaGFyCW5hbWVbMjVdOwkvKiBGdWxsIG5hbWUgPHZlbmRvcj5fPG1vZGVsPiAqLworCXVuc2lnbmVkIHNob3J0CXdpZHRoOworCXVuc2lnbmVkIHNob3J0CWhlaWdodDsKKwlpbnQJCWhmcDsJCS8qIEhvcml6b250YWwgZnJvbnQgcG9yY2ggKi8KKwlpbnQJCWhicDsJCS8qIEhvcml6b250YWwgYmFjayBwb3JjaCAqLworCWludAkJaHN3OwkJLyogSG9yaXpvbnRhbCBTeW5jIFB1bHNlIFdpZHRoICovCisJaW50CQl2ZnA7CQkvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCAqLworCWludAkJdmJwOwkJLyogVmVydGljYWwgYmFjayBwb3JjaCAqLworCWludAkJdnN3OwkJLyogVmVydGljYWwgU3luYyBQdWxzZSBXaWR0aCAqLworCWludAkJcHhsX2NsazsJLyogUGl4ZWwgY2xvY2sgKi8KKwl1bnNpZ25lZCBjaGFyCWludmVydF9weGxfY2xrOwkvKiBJbnZlcnQgUGl4ZWwgY2xvY2sgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgZGE4eHhfcGFuZWwga25vd25fbGNkX3BhbmVsc1tdID0geworCS8qIFNoYXJwIExDRDAzNVEzREcwMSAqLworCVswXSA9IHsKKwkJLm5hbWUgPSAiU2hhcnBfTENEMDM1UTNERzAxIiwKKwkJLndpZHRoID0gMzIwLAorCQkuaGVpZ2h0ID0gMjQwLAorCQkuaGZwID0gOCwKKwkJLmhicCA9IDYsCisJCS5oc3cgPSAwLAorCQkudmZwID0gMiwKKwkJLnZicCA9IDIsCisJCS52c3cgPSAwLAorCQkucHhsX2NsayA9IDB4MTAsCisJCS5pbnZlcnRfcHhsX2NsayA9IDEsCisJfSwKKwkvKiBTaGFycCBMSzA0M1QxREcwMSAqLworCVsxXSA9IHsKKwkJLm5hbWUgPSAiU2hhcnBfTEswNDNUMURHMDEiLAorCQkud2lkdGggPSA0ODAsCisJCS5oZWlnaHQgPSAyNzIsCisJCS5oZnAgPSAyLAorCQkuaGJwID0gMiwKKwkJLmhzdyA9IDQxLAorCQkudmZwID0gMiwKKwkJLnZicCA9IDIsCisJCS52c3cgPSAxMCwKKwkJLnB4bF9jbGsgPSAweDEyLAorCQkuaW52ZXJ0X3B4bF9jbGsgPSAwLAorCX0sCit9OworCisvKiBEaXNhYmxlIHRoZSBSYXN0ZXIgRW5naW5lIG9mIHRoZSBMQ0QgQ29udHJvbGxlciAqLworc3RhdGljIHZvaWQgbGNkX2Rpc2FibGVfcmFzdGVyKHN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhcikKK3sKKwl1MzIgcmVnOworCisJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfQ1RSTF9SRUcpOworCWlmIChyZWcgJiBMQ0RfUkFTVEVSX0VOQUJMRSkKKwkJbGNkY193cml0ZShyZWcgJiB+TENEX1JBU1RFUl9FTkFCTEUsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworfQorCitzdGF0aWMgdm9pZCBsY2RfYmxpdChpbnQgbG9hZF9tb2RlLCBzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIpCit7CisJdTMyIHRtcCA9IHBhci0+cF9wYWxldHRlX2Jhc2UgKyBwYXItPmRhdGFidWZfc3ogLSA0OworCXUzMiByZWc7CisKKwkvKiBVcGRhdGUgdGhlIGRhdGFidWYgaW4gdGhlIGh3LiAqLworCWxjZGNfd3JpdGUocGFyLT5wX3BhbGV0dGVfYmFzZSwgTENEX0RNQV9GUk1fQlVGX0JBU0VfQUREUl8wX1JFRyk7CisJbGNkY193cml0ZSh0bXAsIExDRF9ETUFfRlJNX0JVRl9DRUlMSU5HX0FERFJfMF9SRUcpOworCisJLyogU3RhcnQgdGhlIERNQS4gKi8KKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9DVFJMX1JFRyk7CisJcmVnICY9IH4oMyA8PCAyMCk7CisJaWYgKGxvYWRfbW9kZSA9PSBMT0FEX0RBVEEpCisJCXJlZyB8PSBMQ0RfUEFMRVRURV9MT0FEX01PREUoUEFMRVRURV9BTkRfREFUQSk7CisJZWxzZSBpZiAobG9hZF9tb2RlID09IExPQURfUEFMRVRURSkKKwkJcmVnIHw9IExDRF9QQUxFVFRFX0xPQURfTU9ERShQQUxFVFRFX09OTFkpOworCisJbGNkY193cml0ZShyZWcsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworfQorCisvKiBDb25maWd1cmUgdGhlIEJ1cnN0IFNpemUgb2YgRE1BICovCitzdGF0aWMgaW50IGxjZF9jZmdfZG1hKGludCBidXJzdF9zaXplKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBsY2RjX3JlYWQoTENEX0RNQV9DVFJMX1JFRykgJiAweDAwMDAwMDAxOworCXN3aXRjaCAoYnVyc3Rfc2l6ZSkgeworCWNhc2UgMToKKwkJcmVnIHw9IExDRF9ETUFfQlVSU1RfU0laRShMQ0RfRE1BX0JVUlNUXzEpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZyB8PSBMQ0RfRE1BX0JVUlNUX1NJWkUoTENEX0RNQV9CVVJTVF8yKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZWcgfD0gTENEX0RNQV9CVVJTVF9TSVpFKExDRF9ETUFfQlVSU1RfNCk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmVnIHw9IExDRF9ETUFfQlVSU1RfU0laRShMQ0RfRE1BX0JVUlNUXzgpOworCQlicmVhazsKKwljYXNlIDE2OgorCQlyZWcgfD0gTENEX0RNQV9CVVJTVF9TSVpFKExDRF9ETUFfQlVSU1RfMTYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbGNkY193cml0ZShyZWcsIExDRF9ETUFfQ1RSTF9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9jZmdfYWNfYmlhcyhpbnQgcGVyaW9kLCBpbnQgdHJhbnNpdGlvbnNfcGVyX2ludCkKK3sKKwl1MzIgcmVnOworCisJLyogU2V0IHRoZSBBQyBCaWFzIFBlcmlvZCBhbmQgTnVtYmVyIG9mIFRyYW5zaXNpdG9ucyBwZXIgSW50ZXJydXB0ICovCisJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfVElNSU5HXzJfUkVHKSAmIDB4RkZGMDAwMDA7CisJcmVnIHw9IExDRF9BQ19CSUFTX0ZSRVFVRU5DWShwZXJpb2QpIHwKKwkJTENEX0FDX0JJQVNfVFJBTlNJVElPTlNfUEVSX0lOVCh0cmFuc2l0aW9uc19wZXJfaW50KTsKKwlsY2RjX3dyaXRlKHJlZywgTENEX1JBU1RFUl9USU1JTkdfMl9SRUcpOworfQorCitzdGF0aWMgdm9pZCBsY2RfY2ZnX2hvcml6b250YWxfc3luYyhpbnQgYmFja19wb3JjaCwgaW50IHB1bHNlX3dpZHRoLAorCQlpbnQgZnJvbnRfcG9yY2gpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX1RJTUlOR18wX1JFRykgJiAweGY7CisJcmVnIHw9ICgoYmFja19wb3JjaCAmIDB4ZmYpIDw8IDI0KQorCSAgICB8ICgoZnJvbnRfcG9yY2ggJiAweGZmKSA8PCAxNikKKwkgICAgfCAoKHB1bHNlX3dpZHRoICYgMHgzZikgPDwgMTApOworCWxjZGNfd3JpdGUocmVnLCBMQ0RfUkFTVEVSX1RJTUlOR18wX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9jZmdfdmVydGljYWxfc3luYyhpbnQgYmFja19wb3JjaCwgaW50IHB1bHNlX3dpZHRoLAorCQlpbnQgZnJvbnRfcG9yY2gpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX1RJTUlOR18xX1JFRykgJiAweDNmZjsKKwlyZWcgfD0gKChiYWNrX3BvcmNoICYgMHhmZikgPDwgMjQpCisJICAgIHwgKChmcm9udF9wb3JjaCAmIDB4ZmYpIDw8IDE2KQorCSAgICB8ICgocHVsc2Vfd2lkdGggJiAweDNmKSA8PCAxMCk7CisJbGNkY193cml0ZShyZWcsIExDRF9SQVNURVJfVElNSU5HXzFfUkVHKTsKK30KKworc3RhdGljIGludCBsY2RfY2ZnX2Rpc3BsYXkoY29uc3Qgc3RydWN0IGxjZF9jdHJsX2NvbmZpZyAqY2ZnKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9DVFJMX1JFRykgJiB+KExDRF9URlRfTU9ERSB8CisJCQkJCQlMQ0RfTU9OT184QklUX01PREUgfAorCQkJCQkJTENEX01PTk9DSFJPTUVfTU9ERSk7CisKKwlzd2l0Y2ggKGNmZy0+cF9kaXNwX3BhbmVsLT5wYW5lbF9zaGFkZSkgeworCWNhc2UgTU9OT0NIUk9NRToKKwkJcmVnIHw9IExDRF9NT05PQ0hST01FX01PREU7CisJCWlmIChjZmctPm1vbm9fOGJpdF9tb2RlKQorCQkJcmVnIHw9IExDRF9NT05PXzhCSVRfTU9ERTsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9BQ1RJVkU6CisJCXJlZyB8PSBMQ0RfVEZUX01PREU7CisJCWlmIChjZmctPnRmdF9hbHRfbW9kZSkKKwkJCXJlZyB8PSBMQ0RfVEZUX0FMVF9FTkFCTEU7CisJCWJyZWFrOworCisJY2FzZSBDT0xPUl9QQVNTSVZFOgorCQlpZiAoY2ZnLT5zdG5fNTY1X21vZGUpCisJCQlyZWcgfD0gTENEX1NUTl81NjVfRU5BQkxFOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGVuYWJsZSBhZGRpdGlvbmFsIGludGVycnVwdHMgaGVyZSAqLworCXJlZyB8PSBMQ0RfVU5ERVJGTE9XX0lOVF9FTkE7CisKKwlsY2RjX3dyaXRlKHJlZywgTENEX1JBU1RFUl9DVFJMX1JFRyk7CisKKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9USU1JTkdfMl9SRUcpOworCisJaWYgKGNmZy0+c3luY19jdHJsKQorCQlyZWcgfD0gTENEX1NZTkNfQ1RSTDsKKwllbHNlCisJCXJlZyAmPSB+TENEX1NZTkNfQ1RSTDsKKworCWlmIChjZmctPnN5bmNfZWRnZSkKKwkJcmVnIHw9IExDRF9TWU5DX0VER0U7CisJZWxzZQorCQlyZWcgJj0gfkxDRF9TWU5DX0VER0U7CisKKwlpZiAoY2ZnLT5pbnZlcnRfbGluZV9jbG9jaykKKwkJcmVnIHw9IExDRF9JTlZFUlRfTElORV9DTE9DSzsKKwllbHNlCisJCXJlZyAmPSB+TENEX0lOVkVSVF9MSU5FX0NMT0NLOworCisJaWYgKGNmZy0+aW52ZXJ0X2ZybV9jbG9jaykKKwkJcmVnIHw9IExDRF9JTlZFUlRfRlJBTUVfQ0xPQ0s7CisJZWxzZQorCQlyZWcgJj0gfkxDRF9JTlZFUlRfRlJBTUVfQ0xPQ0s7CisKKwlsY2RjX3dyaXRlKHJlZywgTENEX1JBU1RFUl9USU1JTkdfMl9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGNkX2NmZ19mcmFtZV9idWZmZXIoc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCisJCXUzMiBicHAsIHUzMiByYXN0ZXJfb3JkZXIpCit7CisJdTMyIGJwbCwgcmVnOworCisJLyogRGlzYWJsZSBEdWFsIEZyYW1lIEJ1ZmZlci4gKi8KKwlyZWcgPSBsY2RjX3JlYWQoTENEX0RNQV9DVFJMX1JFRyk7CisJbGNkY193cml0ZShyZWcgJiB+TENEX0RVQUxfRlJBTUVfQlVGRkVSX0VOQUJMRSwKKwkJCQkJCUxDRF9ETUFfQ1RSTF9SRUcpOworCS8qIFNldCB0aGUgUGFuZWwgV2lkdGggKi8KKwkvKiBQaXhlbHMgcGVyIGxpbmUgPSAoUFBMICsgMSkqMTYgKi8KKwkvKjB4M0YgaW4gYml0cyA0Li45IGdpdmVzIG1heCBob3Jpc29udGFsIHJlc29sdXRpb24gPSAxMDI0IHBpeGVscyovCisJd2lkdGggJj0gMHgzZjA7CisJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfVElNSU5HXzBfUkVHKTsKKwlyZWcgJj0gMHhmZmZmZmMwMDsKKwlyZWcgfD0gKCh3aWR0aCA+PiA0KSAtIDEpIDw8IDQ7CisJbGNkY193cml0ZShyZWcsIExDRF9SQVNURVJfVElNSU5HXzBfUkVHKTsKKworCS8qIFNldCB0aGUgUGFuZWwgSGVpZ2h0ICovCisJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfVElNSU5HXzFfUkVHKTsKKwlyZWcgPSAoKGhlaWdodCAtIDEpICYgMHgzZmYpIHwgKHJlZyAmIDB4ZmZmZmZjMDApOworCWxjZGNfd3JpdGUocmVnLCBMQ0RfUkFTVEVSX1RJTUlOR18xX1JFRyk7CisKKwkvKiBTZXQgdGhlIFJhc3RlciBPcmRlciBvZiB0aGUgRnJhbWUgQnVmZmVyICovCisJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfQ1RSTF9SRUcpICYgfigxIDw8IDgpOworCWlmIChyYXN0ZXJfb3JkZXIpCisJCXJlZyB8PSBMQ0RfUkFTVEVSX09SREVSOworCWxjZGNfd3JpdGUocmVnLCBMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDQ6CisJY2FzZSAxNjoKKwkJcGFyLT5wYWxldHRlX3N6ID0gMTYgKiAyOworCQlicmVhazsKKworCWNhc2UgODoKKwkJcGFyLT5wYWxldHRlX3N6ID0gMjU2ICogMjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlicGwgPSB3aWR0aCAqIGJwcCAvIDg7CisJcGFyLT5kYXRhYnVmX3N6ID0gaGVpZ2h0ICogYnBsICsgcGFyLT5wYWxldHRlX3N6OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAorCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXVuc2lnbmVkIHNob3J0ICpwYWxldHRlID0gKHVuc2lnbmVkIHNob3J0ICopcGFyLT52X3BhbGV0dGVfYmFzZTsKKwl1X3Nob3J0IHBhbDsKKworCWlmIChyZWdubyA+IDI1NSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfRElSRUNUQ09MT1IpCisJCXJldHVybiAxOworCisJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4KSB7CisJCXJlZCA+Pj0gNDsKKwkJZ3JlZW4gPj49IDg7CisJCWJsdWUgPj49IDEyOworCisJCXBhbCA9IChyZWQgJiAweDBmMDApOworCQlwYWwgfD0gKGdyZWVuICYgMHgwMGYwKTsKKwkJcGFsIHw9IChibHVlICYgMHgwMDBmKTsKKworCQlwYWxldHRlW3JlZ25vXSA9IHBhbDsKKworCX0gZWxzZSBpZiAoKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNikgJiYgcmVnbm8gPCAxNikgeworCQlyZWQgPj49ICgxNiAtIGluZm8tPnZhci5yZWQubGVuZ3RoKTsKKwkJcmVkIDw8PSBpbmZvLT52YXIucmVkLm9mZnNldDsKKworCQlncmVlbiA+Pj0gKDE2IC0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aCk7CisJCWdyZWVuIDw8PSBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0OworCisJCWJsdWUgPj49ICgxNiAtIGluZm8tPnZhci5ibHVlLmxlbmd0aCk7CisJCWJsdWUgPDw9IGluZm8tPnZhci5ibHVlLm9mZnNldDsKKworCQlwYXItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IHJlZCB8IGdyZWVuIHwgYmx1ZTsKKworCQlwYWxldHRlWzBdID0gMHg0MDAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsY2RfcmVzZXQoc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyKQoreworCS8qIERpc2FibGUgdGhlIFJhc3RlciBpZiBwcmV2aW91c2x5IEVuYWJsZWQgKi8KKwlpZiAobGNkY19yZWFkKExDRF9SQVNURVJfQ1RSTF9SRUcpICYgTENEX1JBU1RFUl9FTkFCTEUpCisJCWxjZF9kaXNhYmxlX3Jhc3RlcihwYXIpOworCisJLyogRE1BIGhhcyB0byBiZSBkaXNhYmxlZCAqLworCWxjZGNfd3JpdGUoMCwgTENEX0RNQV9DVFJMX1JFRyk7CisJbGNkY193cml0ZSgwLCBMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKK30KKworc3RhdGljIGludCBsY2RfaW5pdChzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIsIGNvbnN0IHN0cnVjdCBsY2RfY3RybF9jb25maWcgKmNmZywKKwkJc3RydWN0IGRhOHh4X3BhbmVsICpwYW5lbCkKK3sKKwl1MzIgYnBwOworCWludCByZXQgPSAwOworCisJbGNkX3Jlc2V0KHBhcik7CisKKwkvKiBDb25maWd1cmUgdGhlIExDRCBjbG9jayBkaXZpc29yLiAqLworCWxjZGNfd3JpdGUoTENEX0NMS19ESVZJU09SKHBhbmVsLT5weGxfY2xrKSB8CisJCQkoTENEX1JBU1RFUl9NT0RFICYgMHgxKSwgTENEX0NUUkxfUkVHKTsKKworCWlmIChwYW5lbC0+aW52ZXJ0X3B4bF9jbGspCisJCWxjZGNfd3JpdGUoKGxjZGNfcmVhZChMQ0RfUkFTVEVSX1RJTUlOR18yX1JFRykgfAorCQkJTENEX0lOVkVSVF9QSVhFTF9DTE9DSyksIExDRF9SQVNURVJfVElNSU5HXzJfUkVHKTsKKwllbHNlCisJCWxjZGNfd3JpdGUoKGxjZGNfcmVhZChMQ0RfUkFTVEVSX1RJTUlOR18yX1JFRykgJgorCQkJfkxDRF9JTlZFUlRfUElYRUxfQ0xPQ0spLCBMQ0RfUkFTVEVSX1RJTUlOR18yX1JFRyk7CisKKwkvKiBDb25maWd1cmUgdGhlIERNQSBidXJzdCBzaXplLiAqLworCXJldCA9IGxjZF9jZmdfZG1hKGNmZy0+ZG1hX2J1cnN0X3N6KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENvbmZpZ3VyZSB0aGUgQUMgYmlhcyBwcm9wZXJ0aWVzLiAqLworCWxjZF9jZmdfYWNfYmlhcyhjZmctPmFjX2JpYXMsIGNmZy0+YWNfYmlhc19pbnRycHQpOworCisJLyogQ29uZmlndXJlIHRoZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBzeW5jIHByb3BlcnRpZXMuICovCisJbGNkX2NmZ192ZXJ0aWNhbF9zeW5jKHBhbmVsLT52YnAsIHBhbmVsLT52c3csIHBhbmVsLT52ZnApOworCWxjZF9jZmdfaG9yaXpvbnRhbF9zeW5jKHBhbmVsLT5oYnAsIHBhbmVsLT5oc3csIHBhbmVsLT5oZnApOworCisJLyogQ29uZmlndXJlIGZvciBkaXNwbHkgKi8KKwlyZXQgPSBsY2RfY2ZnX2Rpc3BsYXkoY2ZnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChRVkdBICE9IGNmZy0+cF9kaXNwX3BhbmVsLT5wYW5lbF90eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjZmctPmJwcCA8PSBjZmctPnBfZGlzcF9wYW5lbC0+bWF4X2JwcCAmJgorCSAgICBjZmctPmJwcCA+PSBjZmctPnBfZGlzcF9wYW5lbC0+bWluX2JwcCkKKwkJYnBwID0gY2ZnLT5icHA7CisJZWxzZQorCQlicHAgPSBjZmctPnBfZGlzcF9wYW5lbC0+bWF4X2JwcDsKKwlpZiAoYnBwID09IDEyKQorCQlicHAgPSAxNjsKKwlyZXQgPSBsY2RfY2ZnX2ZyYW1lX2J1ZmZlcihwYXIsICh1bnNpZ25lZCBpbnQpcGFuZWwtPndpZHRoLAorCQkJCSh1bnNpZ25lZCBpbnQpcGFuZWwtPmhlaWdodCwgYnBwLAorCQkJCWNmZy0+cmFzdGVyX29yZGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENvbmZpZ3VyZSBGREQgKi8KKwlsY2RjX3dyaXRlKChsY2RjX3JlYWQoTENEX1JBU1RFUl9DVFJMX1JFRykgJiAweGZmZjAwZmZmKSB8CisJCSAgICAgICAoY2ZnLT5mZGQgPDwgMTIpLCBMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbGNkY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJdTMyIHN0YXQgPSBsY2RjX3JlYWQoTENEX1NUQVRfUkVHKTsKKwl1MzIgcmVnOworCisJaWYgKChzdGF0ICYgTENEX1NZTkNfTE9TVCkgJiYgKHN0YXQgJiBMQ0RfRklGT19VTkRFUkZMT1cpKSB7CisJCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKwkJbGNkY193cml0ZShyZWcgJiB+TENEX1JBU1RFUl9FTkFCTEUsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworCQlsY2RjX3dyaXRlKHN0YXQsIExDRF9TVEFUX1JFRyk7CisJCWxjZGNfd3JpdGUocmVnIHwgTENEX1JBU1RFUl9FTkFCTEUsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworCX0gZWxzZQorCQlsY2RjX3dyaXRlKHN0YXQsIExDRF9TVEFUX1JFRyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE6CisJY2FzZSA4OgorCQl2YXItPnJlZC5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQlicmVhazsKKwljYXNlIDQ6CisJCXZhci0+cmVkLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDQ7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA0OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDQ7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCWJyZWFrOworCWNhc2UgMTY6CQkvKiBSR0IgNTY1ICovCisJCXZhci0+cmVkLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDU7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMTE7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCX0KKworCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CisJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOworCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCXZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCisJaWYgKGluZm8pIHsKKwkJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJCWlmIChsY2RjX3JlYWQoTENEX1JBU1RFUl9DVFJMX1JFRykgJiBMQ0RfUkFTVEVSX0VOQUJMRSkKKwkJCWxjZF9kaXNhYmxlX3Jhc3RlcihwYXIpOworCQlsY2RjX3dyaXRlKDAsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworCisJCS8qIGRpc2FibGUgRE1BICAqLworCQlsY2RjX3dyaXRlKDAsIExDRF9ETUFfQ1RSTF9SRUcpOworCisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHBhci0+ZGF0YWJ1Zl9zeiArIFBBR0VfU0laRSwKKwkJCQkJaW5mby0+c2NyZWVuX2Jhc2UsCisJCQkJCWluZm8tPmZpeC5zbWVtX3N0YXJ0KTsKKwkJZnJlZV9pcnEocGFyLT5pcnEsIHBhcik7CisJCWNsa19kaXNhYmxlKHBhci0+bGNkY19jbGspOworCQljbGtfcHV0KHBhci0+bGNkY19jbGspOworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilkYTh4eF9mYl9yZWdfYmFzZSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihsY2RjX3JlZ3MtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGxjZGNfcmVncykpOworCisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbGNkX3N5bmNfYXJnIHN5bmNfYXJnOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZCSU9HRVRfQ09OVFJBU1Q6CisJY2FzZSBGQklPUFVUX0NPTlRSQVNUOgorCWNhc2UgRkJJR0VUX0JSSUdIVE5FU1M6CisJY2FzZSBGQklQVVRfQlJJR0hUTkVTUzoKKwljYXNlIEZCSUdFVF9DT0xPUjoKKwljYXNlIEZCSVBVVF9DT0xPUjoKKwkJcmV0dXJuIC1FTk9UVFk7CisJY2FzZSBGQklQVVRfSFNZTkM6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc3luY19hcmcsIChjaGFyICopYXJnLAorCQkJCXNpemVvZihzdHJ1Y3QgbGNkX3N5bmNfYXJnKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJbGNkX2NmZ19ob3Jpem9udGFsX3N5bmMoc3luY19hcmcuYmFja19wb3JjaCwKKwkJCQkJc3luY19hcmcucHVsc2Vfd2lkdGgsCisJCQkJCXN5bmNfYXJnLmZyb250X3BvcmNoKTsKKwkJYnJlYWs7CisJY2FzZSBGQklQVVRfVlNZTkM6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc3luY19hcmcsIChjaGFyICopYXJnLAorCQkJCXNpemVvZihzdHJ1Y3QgbGNkX3N5bmNfYXJnKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJbGNkX2NmZ192ZXJ0aWNhbF9zeW5jKHN5bmNfYXJnLmJhY2tfcG9yY2gsCisJCQkJCXN5bmNfYXJnLnB1bHNlX3dpZHRoLAorCQkJCQlzeW5jX2FyZy5mcm9udF9wb3JjaCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgZGE4eHhfZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIgPSBmYl9jaGVja192YXIsCisJLmZiX3NldGNvbHJlZyA9IGZiX3NldGNvbHJlZywKKwkuZmJfaW9jdGwgPSBmYl9pb2N0bCwKKwkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkYTh4eF9sY2RjX3BsYXRmb3JtX2RhdGEgKmZiX3BkYXRhID0KKwkJCQkJCWRldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGxjZF9jdHJsX2NvbmZpZyAqbGNkX2NmZzsKKwlzdHJ1Y3QgZGE4eHhfcGFuZWwgKmxjZGNfaW5mbzsKKwlzdHJ1Y3QgZmJfaW5mbyAqZGE4eHhfZmJfaW5mbzsKKwlzdHJ1Y3QgY2xrICpmYl9jbGsgPSBOVUxMOworCXN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhcjsKKwlyZXNvdXJjZV9zaXplX3QgbGVuOworCWludCByZXQsIGk7CisKKwlpZiAoZmJfcGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgIkNhbiBub3QgZ2V0IHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlsY2RjX3JlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2aWNlLCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFsY2RjX3JlZ3MpIHsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsCisJCQkiQ2FuIG5vdCBnZXQgbWVtb3J5IHJlc291cmNlIGZvciBMQ0QgY29udHJvbGxlclxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWxlbiA9IHJlc291cmNlX3NpemUobGNkY19yZWdzKTsKKworCWxjZGNfcmVncyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihsY2RjX3JlZ3MtPnN0YXJ0LCBsZW4sIGxjZGNfcmVncy0+bmFtZSk7CisJaWYgKCFsY2RjX3JlZ3MpCisJCXJldHVybiAtRUJVU1k7CisKKwlkYTh4eF9mYl9yZWdfYmFzZSA9IChyZXNvdXJjZV9zaXplX3QpaW9yZW1hcChsY2RjX3JlZ3MtPnN0YXJ0LCBsZW4pOworCWlmICghZGE4eHhfZmJfcmVnX2Jhc2UpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9yZXF1ZXN0X21lbTsKKwl9CisKKwlmYl9jbGsgPSBjbGtfZ2V0KCZkZXZpY2UtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihmYl9jbGspKSB7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiQ2FuIG5vdCBnZXQgZGV2aWNlIGNsb2NrXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisJcmV0ID0gY2xrX2VuYWJsZShmYl9jbGspOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Nsa19wdXQ7CisKKwlmb3IgKGkgPSAwLCBsY2RjX2luZm8gPSBrbm93bl9sY2RfcGFuZWxzOworCQlpIDwgQVJSQVlfU0laRShrbm93bl9sY2RfcGFuZWxzKTsKKwkJaSsrLCBsY2RjX2luZm8rKykgeworCQlpZiAoc3RyY21wKGZiX3BkYXRhLT50eXBlLCBsY2RjX2luZm8tPm5hbWUpID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGtub3duX2xjZF9wYW5lbHMpKSB7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiR0xDRDogTm8gdmFsaWQgcGFuZWwgZm91bmRcbiIpOworCQlyZXQgPSBFTk9ERVY7CisJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOworCX0gZWxzZQorCQlkZXZfaW5mbygmZGV2aWNlLT5kZXYsICJHTENEOiBGb3VuZCAlcyBwYW5lbFxuIiwKKwkJCQkJZmJfcGRhdGEtPnR5cGUpOworCisJbGNkX2NmZyA9IChzdHJ1Y3QgbGNkX2N0cmxfY29uZmlnICopZmJfcGRhdGEtPmNvbnRyb2xsZXJfZGF0YTsKKworCWRhOHh4X2ZiX2luZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGRhOHh4X2ZiX3BhciksCisJCQkJCSZkZXZpY2UtPmRldik7CisJaWYgKCFkYTh4eF9mYl9pbmZvKSB7CisJCWRldl9kYmcoJmRldmljZS0+ZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBmYl9pbmZvXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJfQorCisJcGFyID0gZGE4eHhfZmJfaW5mby0+cGFyOworCisJaWYgKGxjZF9pbml0KHBhciwgbGNkX2NmZywgbGNkY19pbmZvKSA8IDApIHsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJsY2RfaW5pdCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVycl9yZWxlYXNlX2ZiOworCX0KKworCS8qIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlciAqLworCWRhOHh4X2ZiX2luZm8tPnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsCisJCQkJCXBhci0+ZGF0YWJ1Zl9zeiArIFBBR0VfU0laRSwKKwkJCQkJKHJlc291cmNlX3NpemVfdCAqKQorCQkJCQkmZGE4eHhfZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQkJCUdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKworCWlmICghZGE4eHhfZmJfaW5mby0+c2NyZWVuX2Jhc2UpIHsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsCisJCQkiR0xDRDoga21hbGxvYyBmb3IgZnJhbWUgYnVmZmVyIGZhaWxlZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CisJfQorCisJLyogbW92ZSBwYWxldHRlIGJhc2UgcG9pbnRlciBieSAoUEFHRV9TSVpFIC0gcGFsZXR0ZV9zeikgYnl0ZXMgKi8KKwlwYXItPnZfcGFsZXR0ZV9iYXNlID0gZGE4eHhfZmJfaW5mby0+c2NyZWVuX2Jhc2UgKworCQkJCShQQUdFX1NJWkUgLSBwYXItPnBhbGV0dGVfc3opOworCXBhci0+cF9wYWxldHRlX2Jhc2UgPSBkYTh4eF9mYl9pbmZvLT5maXguc21lbV9zdGFydCArCisJCQkJKFBBR0VfU0laRSAtIHBhci0+cGFsZXR0ZV9zeik7CisKKwkvKiB0aGUgcmVzdCBvZiB0aGUgZnJhbWUgYnVmZmVyIGlzIHBpeGVsIGRhdGEgKi8KKwlkYTh4eF9mYl9maXguc21lbV9zdGFydCA9IHBhci0+cF9wYWxldHRlX2Jhc2UgKyBwYXItPnBhbGV0dGVfc3o7CisJZGE4eHhfZmJfZml4LnNtZW1fbGVuID0gcGFyLT5kYXRhYnVmX3N6IC0gcGFyLT5wYWxldHRlX3N6OworCWRhOHh4X2ZiX2ZpeC5saW5lX2xlbmd0aCA9IChsY2RjX2luZm8tPndpZHRoICogbGNkX2NmZy0+YnBwKSAvIDg7CisKKwlwYXItPmxjZGNfY2xrID0gZmJfY2xrOworCisJcGFyLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldmljZSwgMCk7CisJaWYgKHBhci0+aXJxIDwgMCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9yZWxlYXNlX2ZiX21lbTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShwYXItPmlycSwgbGNkY19pcnFfaGFuZGxlciwgMCwgRFJJVkVSX05BTUUsIHBhcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVsZWFzZV9mYl9tZW07CisKKwkvKiBJbml0aWFsaXplIHBhciAqLworCWRhOHh4X2ZiX2luZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IGxjZF9jZmctPmJwcDsKKworCWRhOHh4X2ZiX3Zhci54cmVzID0gbGNkY19pbmZvLT53aWR0aDsKKwlkYTh4eF9mYl92YXIueHJlc192aXJ0dWFsID0gbGNkY19pbmZvLT53aWR0aDsKKworCWRhOHh4X2ZiX3Zhci55cmVzID0gbGNkY19pbmZvLT5oZWlnaHQ7CisJZGE4eHhfZmJfdmFyLnlyZXNfdmlydHVhbCA9IGxjZGNfaW5mby0+aGVpZ2h0OworCisJZGE4eHhfZmJfdmFyLmdyYXlzY2FsZSA9CisJICAgIGxjZF9jZmctPnBfZGlzcF9wYW5lbC0+cGFuZWxfc2hhZGUgPT0gTU9OT0NIUk9NRSA/IDEgOiAwOworCWRhOHh4X2ZiX3Zhci5iaXRzX3Blcl9waXhlbCA9IGxjZF9jZmctPmJwcDsKKworCWRhOHh4X2ZiX3Zhci5oc3luY19sZW4gPSBsY2RjX2luZm8tPmhzdzsKKwlkYTh4eF9mYl92YXIudnN5bmNfbGVuID0gbGNkY19pbmZvLT52c3c7CisKKwkvKiBJbml0aWFsaXplIGZiaW5mbyAqLworCWRhOHh4X2ZiX2luZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKwlkYTh4eF9mYl9pbmZvLT5maXggPSBkYTh4eF9mYl9maXg7CisJZGE4eHhfZmJfaW5mby0+dmFyID0gZGE4eHhfZmJfdmFyOworCWRhOHh4X2ZiX2luZm8tPmZib3BzID0gJmRhOHh4X2ZiX29wczsKKwlkYTh4eF9mYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBhci0+cHNldWRvX3BhbGV0dGU7CisKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZkYTh4eF9mYl9pbmZvLT5jbWFwLCBQQUxFVFRFX1NJWkUsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCisJLyogRmlyc3QgcGFsZXR0ZV9zeiBieXRlIG9mIHRoZSBmcmFtZSBidWZmZXIgaXMgdGhlIHBhbGV0dGUgKi8KKwlkYTh4eF9mYl9pbmZvLT5jbWFwLmxlbiA9IHBhci0+cGFsZXR0ZV9zejsKKworCS8qIEZsdXNoIHRoZSBidWZmZXIgdG8gdGhlIHNjcmVlbi4gKi8KKwlsY2RfYmxpdChMT0FEX0RBVEEsIHBhcik7CisKKwkvKiBpbml0aWFsaXplIHZhcl9zY3JlZW5pbmZvICovCisJZGE4eHhfZmJfdmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfRk9SQ0U7CisJZmJfc2V0X3ZhcihkYTh4eF9mYl9pbmZvLCAmZGE4eHhfZmJfdmFyKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2aWNlLT5kZXYsIGRhOHh4X2ZiX2luZm8pOworCS8qIFJlZ2lzdGVyIHRoZSBGcmFtZSBCdWZmZXIgICovCisJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGRhOHh4X2ZiX2luZm8pIDwgMCkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwKKwkJCSJHTENEOiBGcmFtZSBCdWZmZXIgUmVnaXN0cmF0aW9uIEZhaWxlZCFcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CisJfQorCisJLyogZW5hYmxlIHJhc3RlciBlbmdpbmUgKi8KKwlsY2RjX3dyaXRlKGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKSB8CisJCQlMQ0RfUkFTVEVSX0VOQUJMRSwgTENEX1JBU1RFUl9DVFJMX1JFRyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2RlYWxsb2NfY21hcDoKKwlmYl9kZWFsbG9jX2NtYXAoJmRhOHh4X2ZiX2luZm8tPmNtYXApOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEocGFyLT5pcnEsIHBhcik7CisKK2Vycl9yZWxlYXNlX2ZiX21lbToKKwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBwYXItPmRhdGFidWZfc3ogKyBQQUdFX1NJWkUsCisJCQkJZGE4eHhfZmJfaW5mby0+c2NyZWVuX2Jhc2UsCisJCQkJZGE4eHhfZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQpOworCitlcnJfcmVsZWFzZV9mYjoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGRhOHh4X2ZiX2luZm8pOworCitlcnJfY2xrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGUoZmJfY2xrKTsKKworZXJyX2Nsa19wdXQ6CisJY2xrX3B1dChmYl9jbGspOworCitlcnJfaW9yZW1hcDoKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilkYTh4eF9mYl9yZWdfYmFzZSk7CisKK2Vycl9yZXF1ZXN0X21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24obGNkY19yZWdzLT5zdGFydCwgbGVuKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwkgcmV0dXJuIC1FQlVTWTsKK30KK3N0YXRpYyBpbnQgZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwkgcmV0dXJuIC1FQlVTWTsKK30KKyNlbHNlCisjZGVmaW5lIGZiX3N1c3BlbmQgTlVMTAorI2RlZmluZSBmYl9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhOHh4X2ZiX2RyaXZlciA9IHsKKwkucHJvYmUgPSBmYl9wcm9iZSwKKwkucmVtb3ZlID0gZmJfcmVtb3ZlLAorCS5zdXNwZW5kID0gZmJfc3VzcGVuZCwKKwkucmVzdW1lID0gZmJfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGE4eHhfZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRhOHh4X2ZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYTh4eF9mYl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhOHh4X2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRhOHh4X2ZiX2luaXQpOworbW9kdWxlX2V4aXQoZGE4eHhfZmJfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRnJhbWVidWZmZXIgZHJpdmVyIGZvciBUSSBkYTh4eC9vbWFwLWwxeHgiKTsKK01PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jIGIvZHJpdmVycy92aWRlby9lcDkzeHgtZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDlkNDZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9lcDkzeHgtZmIuYwpAQCAtMCwwICsxLDY0NiBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdmlkZW8vZXA5M3h4LWZiLmMKKyAqCisgKiBGcmFtZWJ1ZmZlciBzdXBwb3J0IGZvciB0aGUgRVA5M3h4IHNlcmllcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQmx1ZXdhdGVyIFN5c3RlbXMgTHRkCisgKiBBdXRob3I6IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEggSGFydGxleSBTd2VldGVuIDxoc3dlZXRlbkB2aXNpb25lbmdyYXZlcnMuY29tPgorICoKKyAqIEJhc2VkIG9uIHRoZSBDaXJydXMgTG9naWMgZXA5M3h4ZmIgZHJpdmVyLCBhbmQgdmFyaW91cyBvdGhlciBlcDkzeHhmYgorICogZHJpdmVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjaW5jbHVkZSA8bWFjaC9mYi5oPgorCisvKiBWZXJ0aWNhbCBGcmFtZSBUaW1pbmcgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVQOTNYWEZCX1ZMSU5FU19UT1RBTAkJCTB4MDAwMAkvKiBTVyBsb2NrZWQgKi8KKyNkZWZpbmUgRVA5M1hYRkJfVlNZTkMJCQkJMHgwMDA0CS8qIFNXIGxvY2tlZCAqLworI2RlZmluZSBFUDkzWFhGQl9WQUNUSVZFCQkJMHgwMDA4CS8qIFNXIGxvY2tlZCAqLworI2RlZmluZSBFUDkzWFhGQl9WQkxBTksJCQkJMHgwMjI4CS8qIFNXIGxvY2tlZCAqLworI2RlZmluZSBFUDkzWFhGQl9WQ0xLCQkJCTB4MDAwYwkvKiBTVyBsb2NrZWQgKi8KKworLyogSG9yaXpvbnRhbCBGcmFtZSBUaW1pbmcgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVQOTNYWEZCX0hDTEtTX1RPVEFMCQkJMHgwMDEwCS8qIFNXIGxvY2tlZCAqLworI2RlZmluZSBFUDkzWFhGQl9IU1lOQwkJCQkweDAwMTQJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX0hBQ1RJVkUJCQkweDAwMTgJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX0hCTEFOSwkJCQkweDAyMmMJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX0hDTEsJCQkJMHgwMDFjCS8qIFNXIGxvY2tlZCAqLworCisvKiBGcmFtZSBCdWZmZXIgTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEVQOTNYWEZCX1NDUkVFTl9QQUdFCQkJMHgwMDI4CisjZGVmaW5lIEVQOTNYWEZCX1NDUkVFTl9IUEFHRQkJCTB4MDAyYworI2RlZmluZSBFUDkzWFhGQl9TQ1JFRU5fTElORVMJCQkweDAwMzAKKyNkZWZpbmUgRVA5M1hYRkJfTElORV9MRU5HVEgJCQkweDAwMzQKKyNkZWZpbmUgRVA5M1hYRkJfVkxJTkVfU1RFUAkJCTB4MDAzOAorI2RlZmluZSBFUDkzWFhGQl9MSU5FX0NBUlJZCQkJMHgwMDNjCS8qIFNXIGxvY2tlZCAqLworI2RlZmluZSBFUDkzWFhGQl9FT0xfT0ZGU0VUCQkJMHgwMjMwCisKKy8qIE90aGVyIFZpZGVvIFJlZ2lzdGVycyAqLworI2RlZmluZSBFUDkzWFhGQl9CUklHSFRORVNTCQkJMHgwMDIwCisjZGVmaW5lIEVQOTNYWEZCX0FUVFJJQlMJCQkweDAwMjQJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX1NXTE9DSwkJCQkweDAwN2MJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX0FDX1JBVEUJCQkweDAyMTQKKyNkZWZpbmUgRVA5M1hYRkJfRklGT19MRVZFTAkJCTB4MDIzNAorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREUJCQkweDAwNTQKKyNkZWZpbmUgRVA5M1hYRkJfUElYRUxNT0RFXzMyQlBQCQkoMHg3IDw8IDApCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMTU9ERV8yNEJQUAkJKDB4NiA8PCAwKQorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREVfMTZCUFAJCSgweDQgPDwgMCkKKyNkZWZpbmUgRVA5M1hYRkJfUElYRUxNT0RFXzhCUFAJCQkoMHgyIDw8IDApCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMTU9ERV9TSElGVF8xUF8yNEIJCSgweDAgPDwgMykKKyNkZWZpbmUgRVA5M1hYRkJfUElYRUxNT0RFX1NISUZUXzFQXzE4QgkJKDB4MSA8PCAzKQorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREVfQ09MT1JfTFVUCQkoMHgwIDw8IDEwKQorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREVfQ09MT1JfODg4CQkoMHg0IDw8IDEwKQorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREVfQ09MT1JfNTU1CQkoMHg1IDw8IDEwKQorI2RlZmluZSBFUDkzWFhGQl9QQVJMX0lGX09VVAkJCTB4MDA1OAorI2RlZmluZSBFUDkzWFhGQl9QQVJMX0lGX0lOCQkJMHgwMDVjCisKKy8qIEJsaW5rIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVQOTNYWEZCX0JMSU5LX1JBVEUJCQkweDAwNDAKKyNkZWZpbmUgRVA5M1hYRkJfQkxJTktfTUFTSwkJCTB4MDA0NAorI2RlZmluZSBFUDkzWFhGQl9CTElOS19QQVRUUk4JCQkweDAwNDgKKyNkZWZpbmUgRVA5M1hYRkJfUEFUVFJOX01BU0sJCQkweDAwNGMKKyNkZWZpbmUgRVA5M1hYRkJfQktHUk5EX09GRlNFVAkJCTB4MDA1MAorCisvKiBIYXJkd2FyZSBDdXJzb3IgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVQOTNYWEZCX0NVUlNPUl9BRFJfU1RBUlQJCTB4MDA2MAorI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfQURSX1JFU0VUCQkweDAwNjQKKyNkZWZpbmUgRVA5M1hYRkJfQ1VSU09SX1NJWkUJCQkweDAwNjgKKyNkZWZpbmUgRVA5M1hYRkJfQ1VSU09SX0NPTE9SMQkJCTB4MDA2YworI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfQ09MT1IyCQkJMHgwMDcwCisjZGVmaW5lIEVQOTNYWEZCX0NVUlNPUl9CTElOS19DT0xPUjEJCTB4MDIxYworI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfQkxJTktfQ09MT1IyCQkweDAyMjAKKyNkZWZpbmUgRVA5M1hYRkJfQ1VSU09SX1hZX0xPQwkJCTB4MDA3NAorI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfRFNDQU5fSFlfTE9DCQkweDAwNzgKKyNkZWZpbmUgRVA5M1hYRkJfQ1VSU09SX0JMSU5LX1JBVEVfQ1RSTAkJMHgwMjI0CisKKy8qIExVVCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVA5M1hYRkJfR1JZX1NDTF9MVVRSCQkJMHgwMDgwCisjZGVmaW5lIEVQOTNYWEZCX0dSWV9TQ0xfTFVURwkJCTB4MDI4MAorI2RlZmluZSBFUDkzWFhGQl9HUllfU0NMX0xVVEIJCQkweDAzMDAKKyNkZWZpbmUgRVA5M1hYRkJfTFVUX1NXX0NPTlRST0wJCQkweDAyMTgKKyNkZWZpbmUgRVA5M1hYRkJfTFVUX1NXX0NPTlRST0xfU1dUQ0gJCSgxIDw8IDApCisjZGVmaW5lIEVQOTNYWEZCX0xVVF9TV19DT05UUk9MX1NTVEFUCQkoMSA8PCAxKQorI2RlZmluZSBFUDkzWFhGQl9DT0xPUl9MVVQJCQkweDA0MDAKKworLyogVmlkZW8gU2lnbmF0dXJlIFJlZ2lzdGVycyAqLworI2RlZmluZSBFUDkzWFhGQl9WSURfU0lHX1JTTFRfVkFMCQkweDAyMDAKKyNkZWZpbmUgRVA5M1hYRkJfVklEX1NJR19DVFJMCQkJMHgwMjA0CisjZGVmaW5lIEVQOTNYWEZCX1ZTSUcJCQkJMHgwMjA4CisjZGVmaW5lIEVQOTNYWEZCX0hTSUcJCQkJMHgwMjBjCisjZGVmaW5lIEVQOTNYWEZCX1NJR19DTFJfU1RSCQkJMHgwMjEwCisKKy8qIE1pbmltdW0gLyBNYXhpbXVtIHJlc29sdXRpb25zIHN1cHBvcnRlZCAqLworI2RlZmluZSBFUDkzWFhGQl9NSU5fWFJFUwkJCTY0CisjZGVmaW5lIEVQOTNYWEZCX01JTl9ZUkVTCQkJNjQKKyNkZWZpbmUgRVA5M1hYRkJfTUFYX1hSRVMJCQkxMDI0CisjZGVmaW5lIEVQOTNYWEZCX01BWF9ZUkVTCQkJNzY4CisKK3N0cnVjdCBlcDkzeHhfZmJpIHsKKwlzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvCSptYWNoX2luZm87CisJc3RydWN0IGNsawkJCSpjbGs7CisJc3RydWN0IHJlc291cmNlCQkJKnJlczsKKwl2b2lkIF9faW9tZW0JCQkqbW1pb19iYXNlOworCXVuc2lnbmVkIGludAkJCXBzZXVkb19wYWxldHRlWzI1Nl07Cit9OworCitzdGF0aWMgaW50IGNoZWNrX3NjcmVlbnBhZ2VfYnVnID0gMTsKK21vZHVsZV9wYXJhbShjaGVja19zY3JlZW5wYWdlX2J1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2hlY2tfc2NyZWVucGFnZV9idWcsCisJCSAiQ2hlY2sgZm9yIGJpdCAyNyBzY3JlZW4gcGFnZSBidWcuIERlZmF1bHQgPSAxIik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGVwOTN4eGZiX3JlYWRsKHN0cnVjdCBlcDkzeHhfZmJpICpmYmksCisJCQkJCSAgdW5zaWduZWQgaW50IG9mZikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoZmJpLT5tbWlvX2Jhc2UgKyBvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4ZmJfd3JpdGVsKHN0cnVjdCBlcDkzeHhfZmJpICpmYmksCisJCQkJICAgdW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG9mZikKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBmYmktPm1taW9fYmFzZSArIG9mZik7Cit9CisKKy8qCisgKiBXcml0ZSB0byBvbmUgb2YgdGhlIGxvY2tlZCByYXN0ZXIgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4ZmJfb3V0X2xvY2tlZChzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCS8qCisJICogV2UgZG9uJ3QgbmVlZCBhIGxvY2sgb3IgZGVsYXkgaGVyZSBzaW5jZSB0aGUgcmFzdGVyIHJlZ2lzdGVyCisJICogYmxvY2sgd2lsbCByZW1haW4gdW5sb2NrZWQgdW50aWwgdGhlIG5leHQgYWNjZXNzLgorCSAqLworCWVwOTN4eGZiX3dyaXRlbChmYmksIDB4YWEsIEVQOTNYWEZCX1NXTE9DSyk7CisJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgdmFsLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhmYl9zZXRfdmlkZW9fYXR0cmlicyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCBhdHRyaWJzOworCisJYXR0cmlicyA9IEVQOTNYWEZCX0VOQUJMRTsKKwlhdHRyaWJzIHw9IGZiaS0+bWFjaF9pbmZvLT5mbGFnczsKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgYXR0cmlicywgRVA5M1hYRkJfQVRUUklCUyk7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4ZmJfc2V0X3BpeGVsbW9kZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDA7CisJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOworCisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCXZhbCA9IEVQOTNYWEZCX1BJWEVMTU9ERV84QlBQIHwgRVA5M1hYRkJfUElYRUxNT0RFX0NPTE9SX0xVVCB8CisJCQlFUDkzWFhGQl9QSVhFTE1PREVfU0hJRlRfMVBfMThCOworCisJCWluZm8tPnZhci5yZWQub2Zmc2V0CT0gMDsKKwkJaW5mby0+dmFyLnJlZC5sZW5ndGgJPSA4OworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0CT0gMDsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aAk9IDg7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldAk9IDA7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aAk9IDg7CisJCWluZm8tPmZpeC52aXN1YWwgCT0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCQlicmVhazsKKworCWNhc2UgMTY6CisJCXZhbCA9IEVQOTNYWEZCX1BJWEVMTU9ERV8xNkJQUCB8IEVQOTNYWEZCX1BJWEVMTU9ERV9DT0xPUl81NTUgfAorCQkJRVA5M1hYRkJfUElYRUxNT0RFX1NISUZUXzFQXzE4QjsKKworCQlpbmZvLT52YXIucmVkLm9mZnNldAk9IDExOworCQlpbmZvLT52YXIucmVkLmxlbmd0aAk9IDU7CisJCWluZm8tPnZhci5ncmVlbi5vZmZzZXQJPSA1OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoCT0gNjsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0CT0gMDsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoCT0gNTsKKwkJaW5mby0+Zml4LnZpc3VhbCAJPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKKworCWNhc2UgMjQ6CisJCXZhbCA9IEVQOTNYWEZCX1BJWEVMTU9ERV8yNEJQUCB8IEVQOTNYWEZCX1BJWEVMTU9ERV9DT0xPUl84ODggfAorCQkJRVA5M1hYRkJfUElYRUxNT0RFX1NISUZUXzFQXzI0QjsKKworCQlpbmZvLT52YXIucmVkLm9mZnNldAk9IDE2OworCQlpbmZvLT52YXIucmVkLmxlbmd0aAk9IDg7CisJCWluZm8tPnZhci5ncmVlbi5vZmZzZXQJPSA4OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoCT0gODsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0CT0gMDsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoCT0gODsKKwkJaW5mby0+Zml4LnZpc3VhbCAJPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKKworCWNhc2UgMzI6CisJCXZhbCA9IEVQOTNYWEZCX1BJWEVMTU9ERV8zMkJQUCB8IEVQOTNYWEZCX1BJWEVMTU9ERV9DT0xPUl84ODggfAorCQkJRVA5M1hYRkJfUElYRUxNT0RFX1NISUZUXzFQXzI0QjsKKworCQlpbmZvLT52YXIucmVkLm9mZnNldAk9IDE2OworCQlpbmZvLT52YXIucmVkLmxlbmd0aAk9IDg7CisJCWluZm8tPnZhci5ncmVlbi5vZmZzZXQJPSA4OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoCT0gODsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0CT0gMDsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoCT0gODsKKwkJaW5mby0+Zml4LnZpc3VhbCAJPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwOTN4eGZiX3dyaXRlbChmYmksIHZhbCwgRVA5M1hYRkJfUElYRUxNT0RFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4ZmJfc2V0X3RpbWluZyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCB2bGluZXNfdG90YWwsIGhjbGtzX3RvdGFsLCBzdGFydCwgc3RvcDsKKworCXZsaW5lc190b3RhbCA9IGluZm8tPnZhci55cmVzICsgaW5mby0+dmFyLnVwcGVyX21hcmdpbiArCisJCWluZm8tPnZhci5sb3dlcl9tYXJnaW4gKyBpbmZvLT52YXIudnN5bmNfbGVuIC0gMTsKKworCWhjbGtzX3RvdGFsID0gaW5mby0+dmFyLnhyZXMgKyBpbmZvLT52YXIubGVmdF9tYXJnaW4gKworCQlpbmZvLT52YXIucmlnaHRfbWFyZ2luICsgaW5mby0+dmFyLmhzeW5jX2xlbiAtIDE7CisKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgdmxpbmVzX3RvdGFsLCBFUDkzWFhGQl9WTElORVNfVE9UQUwpOworCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCBoY2xrc190b3RhbCwgRVA5M1hYRkJfSENMS1NfVE9UQUwpOworCisJc3RhcnQgPSB2bGluZXNfdG90YWw7CisJc3RvcCA9IHZsaW5lc190b3RhbCAtIGluZm8tPnZhci52c3luY19sZW47CisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIHN0YXJ0IHwgKHN0b3AgPDwgMTYpLCBFUDkzWFhGQl9WU1lOQyk7CisKKwlzdGFydCA9IHZsaW5lc190b3RhbCAtIGluZm8tPnZhci52c3luY19sZW4gLSBpbmZvLT52YXIudXBwZXJfbWFyZ2luOworCXN0b3AgPSBpbmZvLT52YXIubG93ZXJfbWFyZ2luIC0gMTsKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgc3RhcnQgfCAoc3RvcCA8PCAxNiksIEVQOTNYWEZCX1ZCTEFOSyk7CisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIHN0YXJ0IHwgKHN0b3AgPDwgMTYpLCBFUDkzWFhGQl9WQUNUSVZFKTsKKworCXN0YXJ0ID0gdmxpbmVzX3RvdGFsOworCXN0b3AgPSB2bGluZXNfdG90YWwgKyAxOworCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCBzdGFydCB8IChzdG9wIDw8IDE2KSwgRVA5M1hYRkJfVkNMSyk7CisKKwlzdGFydCA9IGhjbGtzX3RvdGFsOworCXN0b3AgPSBoY2xrc190b3RhbCAtIGluZm8tPnZhci5oc3luY19sZW47CisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIHN0YXJ0IHwgKHN0b3AgPDwgMTYpLCBFUDkzWFhGQl9IU1lOQyk7CisKKwlzdGFydCA9IGhjbGtzX3RvdGFsIC0gaW5mby0+dmFyLmhzeW5jX2xlbiAtIGluZm8tPnZhci5sZWZ0X21hcmdpbjsKKwlzdG9wID0gaW5mby0+dmFyLnJpZ2h0X21hcmdpbiAtIDE7CisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIHN0YXJ0IHwgKHN0b3AgPDwgMTYpLCBFUDkzWFhGQl9IQkxBTkspOworCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCBzdGFydCB8IChzdG9wIDw8IDE2KSwgRVA5M1hYRkJfSEFDVElWRSk7CisKKwlzdGFydCA9IGhjbGtzX3RvdGFsOworCXN0b3AgPSBoY2xrc190b3RhbDsKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgc3RhcnQgfCAoc3RvcCA8PCAxNiksIEVQOTNYWEZCX0hDTEspOworCisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIDB4MCwgRVA5M1hYRkJfTElORV9DQVJSWSk7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4ZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpID0gaW5mby0+cGFyOworCisJY2xrX3NldF9yYXRlKGZiaS0+Y2xrLCAxMDAwICogUElDT1MyS0haKGluZm8tPnZhci5waXhjbG9jaykpOworCisJZXA5M3h4ZmJfc2V0X3RpbWluZyhpbmZvKTsKKworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgorCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyA4OworCisJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgaW5mby0+Zml4LnNtZW1fc3RhcnQsIEVQOTNYWEZCX1NDUkVFTl9QQUdFKTsKKwllcDkzeHhmYl93cml0ZWwoZmJpLCBpbmZvLT52YXIueXJlcyAtIDEsIEVQOTNYWEZCX1NDUkVFTl9MSU5FUyk7CisJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgKChpbmZvLT52YXIueHJlcyAqIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkKKwkJCSAgICAgIC8gMzIpIC0gMSwgRVA5M1hYRkJfTElORV9MRU5HVEgpOworCWVwOTN4eGZiX3dyaXRlbChmYmksIGluZm8tPmZpeC5saW5lX2xlbmd0aCAvIDQsIEVQOTNYWEZCX1ZMSU5FX1NURVApOworCWVwOTN4eGZiX3NldF92aWRlb19hdHRyaWJzKGluZm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwOTN4eGZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCBlcnI7CisKKwllcnIgPSBlcDkzeHhmYl9zZXRfcGl4ZWxtb2RlKGluZm8pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2YXItPnhyZXMgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHZhci0+eHJlcywgRVA5M1hYRkJfTUlOX1hSRVMpOworCXZhci0+eHJlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgdmFyLT54cmVzLCBFUDkzWFhGQl9NQVhfWFJFUyk7CisJdmFyLT54cmVzX3ZpcnR1YWwgPSBtYXgodmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eHJlcyk7CisKKwl2YXItPnlyZXMgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHZhci0+eXJlcywgRVA5M1hYRkJfTUlOX1lSRVMpOworCXZhci0+eXJlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgdmFyLT55cmVzLCBFUDkzWFhGQl9NQVhfWVJFUyk7CisJdmFyLT55cmVzX3ZpcnR1YWwgPSBtYXgodmFyLT55cmVzX3ZpcnR1YWwsIHZhci0+eXJlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcDkzeHhmYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCisJaWYgKG9mZnNldCA8IGluZm8tPmZpeC5zbWVtX2xlbikgeworCQlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKGluZm8tPmRldiwgdm1hLCBpbmZvLT5zY3JlZW5fYmFzZSwKKwkJCQkJICAgICBpbmZvLT5maXguc21lbV9zdGFydCwKKwkJCQkJICAgICBpbmZvLT5maXguc21lbV9sZW4pOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGVwOTN4eGZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCBhdHRyaWJzID0gZXA5M3h4ZmJfcmVhZGwoZmJpLCBFUDkzWFhGQl9BVFRSSUJTKTsKKworCWlmIChibGFua19tb2RlKSB7CisJCWlmIChmYmktPm1hY2hfaW5mby0+YmxhbmspCisJCQlmYmktPm1hY2hfaW5mby0+YmxhbmsoYmxhbmtfbW9kZSwgaW5mbyk7CisJCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCBhdHRyaWJzICYgfkVQOTNYWEZCX0VOQUJMRSwKKwkJCQkgICAgRVA5M1hYRkJfQVRUUklCUyk7CisJCWNsa19kaXNhYmxlKGZiaS0+Y2xrKTsKKwl9IGVsc2UgeworCQljbGtfZW5hYmxlKGZiaS0+Y2xrKTsKKwkJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIGF0dHJpYnMgfCBFUDkzWFhGQl9FTkFCTEUsCisJCQkJICAgIEVQOTNYWEZCX0FUVFJJQlMpOworCQlpZiAoZmJpLT5tYWNoX2luZm8tPmJsYW5rKQorCQkJZmJpLT5tYWNoX2luZm8tPmJsYW5rKGJsYW5rX21vZGUsIGluZm8pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBlcDkzeHhmYl9jb252ZXJ0X2NvbG9yKGludCB2YWwsIGludCB3aWR0aCkKK3sKKwlyZXR1cm4gKCh2YWwgPDwgd2lkdGgpICsgMHg3ZmZmIC0gdmFsKSA+PiAxNjsKK30KKworc3RhdGljIGludCBlcDkzeHhmYl9zZXRjb2xyZWcodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBlcDkzeHhfZmJpICpmYmkgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50ICpwYWwgPSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwl1bnNpZ25lZCBpbnQgY3RybCwgaSwgcmdiLCBsdXRfY3VycmVudCwgbHV0X3N0YXQ7CisKKwlzd2l0Y2ggKGluZm8tPmZpeC52aXN1YWwpIHsKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJcmdiID0gKChyZWQgJiAweGZmMDApIDw8IDgpIHwgKGdyZWVuICYgMHhmZjAwKSB8CisJCQkoKGJsdWUgJiAweGZmMDApID4+IDgpOworCisJCXBhbFtyZWdub10gPSByZ2I7CisJCWVwOTN4eGZiX3dyaXRlbChmYmksIHJnYiwgKEVQOTNYWEZCX0NPTE9SX0xVVCArIChyZWdubyA8PCAyKSkpOworCQljdHJsID0gZXA5M3h4ZmJfcmVhZGwoZmJpLCBFUDkzWFhGQl9MVVRfU1dfQ09OVFJPTCk7CisJCWx1dF9zdGF0ID0gISEoY3RybCAmIEVQOTNYWEZCX0xVVF9TV19DT05UUk9MX1NTVEFUKTsKKwkJbHV0X2N1cnJlbnQgPSAhIShjdHJsICYgRVA5M1hYRkJfTFVUX1NXX0NPTlRST0xfU1dUQ0gpOworCisJCWlmIChsdXRfc3RhdCA9PSBsdXRfY3VycmVudCkgeworCQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQkJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgcGFsW2ldLAorCQkJCQlFUDkzWFhGQl9DT0xPUl9MVVQgKyAoaSA8PCAyKSk7CisJCQl9CisKKwkJCWVwOTN4eGZiX3dyaXRlbChmYmksCisJCQkJCWN0cmwgXiBFUDkzWFhGQl9MVVRfU1dfQ09OVFJPTF9TV1RDSCwKKwkJCQkJRVA5M1hYRkJfTFVUX1NXX0NPTlRST0wpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCQlpZiAocmVnbm8gPiAxNikKKwkJCXJldHVybiAxOworCisJCXJlZCA9IGVwOTN4eGZiX2NvbnZlcnRfY29sb3IocmVkLCBpbmZvLT52YXIucmVkLmxlbmd0aCk7CisJCWdyZWVuID0gZXA5M3h4ZmJfY29udmVydF9jb2xvcihncmVlbiwgaW5mby0+dmFyLmdyZWVuLmxlbmd0aCk7CisJCWJsdWUgPSBlcDkzeHhmYl9jb252ZXJ0X2NvbG9yKGJsdWUsIGluZm8tPnZhci5ibHVlLmxlbmd0aCk7CisJCXRyYW5zcCA9IGVwOTN4eGZiX2NvbnZlcnRfY29sb3IodHJhbnNwLAorCQkJCQkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGgpOworCisJCXBhbFtyZWdub10gPSAocmVkIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAorCQkJKGJsdWUgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KSB8CisJCQkodHJhbnNwIDw8IGluZm8tPnZhci50cmFuc3Aub2Zmc2V0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgZXA5M3h4ZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyCT0gZXA5M3h4ZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCT0gZXA5M3h4ZmJfc2V0X3BhciwKKwkuZmJfYmxhbmsJPSBlcDkzeHhmYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9zZXRjb2xyZWcJPSBlcDkzeHhmYl9zZXRjb2xyZWcsCisJLmZiX21tYXAJPSBlcDkzeHhmYl9tbWFwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZXA5M3h4ZmJfY2FsY19mYnNpemUoc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyAqbWFjaF9pbmZvKQoreworCWludCBpLCBmYl9zaXplID0gMDsKKworCWlmIChtYWNoX2luZm8tPm51bV9tb2RlcyA9PSBFUDkzWFhGQl9VU0VfTU9ERURCKSB7CisJCWZiX3NpemUgPSBFUDkzWFhGQl9NQVhfWFJFUyAqIEVQOTNYWEZCX01BWF9ZUkVTICoKKwkJCW1hY2hfaW5mby0+YnBwIC8gODsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbWFjaF9pbmZvLT5udW1fbW9kZXM7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKKwkJCWludCBzaXplOworCisJCQltb2RlID0gJm1hY2hfaW5mby0+bW9kZXNbaV07CisJCQlzaXplID0gbW9kZS0+eHJlcyAqIG1vZGUtPnlyZXMgKiBtYWNoX2luZm8tPmJwcCAvIDg7CisJCQlpZiAoc2l6ZSA+IGZiX3NpemUpCisJCQkJZmJfc2l6ZSA9IHNpemU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmJfc2l6ZTsKK30KKworc3RhdGljIGludCBfX2luaXQgZXA5M3h4ZmJfYWxsb2NfdmlkZW9tZW0oc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGVwOTN4eF9mYmkgKmZiaSA9IGluZm8tPnBhcjsKKwljaGFyIF9faW9tZW0gKnZpcnRfYWRkcjsKKwlkbWFfYWRkcl90IHBoeXNfYWRkcjsKKwl1bnNpZ25lZCBpbnQgZmJfc2l6ZTsKKworCWZiX3NpemUgPSBlcDkzeHhmYl9jYWxjX2Zic2l6ZShmYmktPm1hY2hfaW5mbyk7CisJdmlydF9hZGRyID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZShpbmZvLT5kZXYsIGZiX3NpemUsCisJCQkJCSAgICZwaHlzX2FkZHIsIEdGUF9LRVJORUwpOworCWlmICghdmlydF9hZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogVGhlcmUgaXMgYSBidWcgaW4gdGhlIGVwOTN4eCBmcmFtZWJ1ZmZlciB3aGljaCBjYXVzZXMgcHJvYmxlbXMKKwkgKiBpZiBiaXQgMjcgb2YgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgc2V0LgorCSAqIFNlZTogaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1hcm0ta2VybmVsJm09MTEwMDYxMjQ1NTAyMDAwJnc9MgorCSAqIFRoZXJlIGRvZXMgbm90IHNlZW0gdG8gYmUgYW55IG9mZmljYWwgZXJyYXRhIGZvciB0aGlzLCBidXQgSQorCSAqIGhhdmUgY29uZmlybWVkIHRoZSBwcm9ibGVtIGV4aXN0cyBvbiBteSBoYXJkd2FyZSAoZXA5MzE1KSBhdAorCSAqIGxlYXN0LgorCSAqLworCWlmIChjaGVja19zY3JlZW5wYWdlX2J1ZyAmJiBwaHlzX2FkZHIgJiAoMSA8PCAyNykpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJlcDkzeHggZnJhbWVidWZmZXIgYnVnLiBwaHlzIGFkZHIgKDB4JXgpICIKKwkJCSJoYXMgYml0IDI3IHNldDogY2Fubm90IGluaXQgZnJhbWVidWZmZXJcbiIsCisJCQlwaHlzX2FkZHIpOworCisJCWRtYV9mcmVlX2NvaGVyZW50KGluZm8tPmRldiwgZmJfc2l6ZSwgdmlydF9hZGRyLCBwaHlzX2FkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbmZvLT5maXguc21lbV9zdGFydCA9IHBoeXNfYWRkcjsKKwlpbmZvLT5maXguc21lbV9sZW4gPSBmYl9zaXplOworCWluZm8tPnNjcmVlbl9iYXNlID0gdmlydF9hZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eGZiX2RlYWxsb2NfdmlkZW9tZW0oc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQorCQlkbWFfZnJlZV9jb2hlcmVudChpbmZvLT5kZXYsIGluZm8tPmZpeC5zbWVtX2xlbiwKKwkJCQkgIGluZm8tPnNjcmVlbl9iYXNlLCBpbmZvLT5maXguc21lbV9zdGFydCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGVwOTN4eGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyAqbWFjaF9pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGVwOTN4eF9mYmkgKmZiaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwljaGFyICp2aWRlb19tb2RlOworCWludCBlcnI7CisKKwlpZiAoIW1hY2hfaW5mbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZmJpKSwgJnBkZXYtPmRldik7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm8tPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisJZmJpID0gaW5mby0+cGFyOworCWZiaS0+bWFjaF9pbmZvID0gbWFjaF9pbmZvOworCisJZXJyID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxlZDsKKworCWVyciA9IGVwOTN4eGZiX2FsbG9jX3ZpZGVvbWVtKGluZm8pOworCWlmIChlcnIpCisJCWdvdG8gZmFpbGVkOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZmFpbGVkOworCX0KKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpOworCWlmICghcmVzKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJZmJpLT5yZXMgPSByZXM7CisJZmJpLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFmYmktPm1taW9fYmFzZSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZmFpbGVkOworCX0KKworCXN0cmNweShpbmZvLT5maXguaWQsIHBkZXYtPm5hbWUpOworCWluZm8tPmZib3BzCQk9ICZlcDkzeHhmYl9vcHM7CisJaW5mby0+Zml4LnR5cGUJCT0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWluZm8tPmZpeC5hY2NlbAkJPSBGQl9BQ0NFTF9OT05FOworCWluZm8tPnZhci5hY3RpdmF0ZQk9IEZCX0FDVElWQVRFX05PVzsKKwlpbmZvLT52YXIudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKwlpbmZvLT5mbGFncwkJPSBGQklORk9fREVGQVVMVDsKKwlpbmZvLT5ub2RlCQk9IC0xOworCWluZm8tPnN0YXRlCQk9IEZCSU5GT19TVEFURV9SVU5OSU5HOworCWluZm8tPnBzZXVkb19wYWxldHRlCT0gJmZiaS0+cHNldWRvX3BhbGV0dGU7CisKKwlmYl9nZXRfb3B0aW9ucygiZXA5M3h4LWZiIiwgJnZpZGVvX21vZGUpOworCWVyciA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCB2aWRlb19tb2RlLAorCQkJICAgZmJpLT5tYWNoX2luZm8tPm1vZGVzLCBmYmktPm1hY2hfaW5mby0+bnVtX21vZGVzLAorCQkJICAgZmJpLT5tYWNoX2luZm8tPmRlZmF1bHRfbW9kZSwgZmJpLT5tYWNoX2luZm8tPmJwcCk7CisJaWYgKGVyciA9PSAwKSB7CisJCWRldl9lcnIoaW5mby0+ZGV2LCAiTm8gc3VpdGFibGUgdmlkZW8gbW9kZSBmb3VuZFxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWlmIChtYWNoX2luZm8tPnNldHVwKSB7CisJCWVyciA9IG1hY2hfaW5mby0+c2V0dXAocGRldik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGVwOTN4eGZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxlZDsKKworCWZiaS0+Y2xrID0gY2xrX2dldChpbmZvLT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZmJpLT5jbGspKSB7CisJCWVyciA9IFBUUl9FUlIoZmJpLT5jbGspOworCQlmYmktPmNsayA9IE5VTEw7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWVwOTN4eGZiX3NldF9wYXIoaW5mbyk7CisJY2xrX2VuYWJsZShmYmktPmNsayk7CisKKwllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxlZDsKKworCWRldl9pbmZvKGluZm8tPmRldiwgInJlZ2lzdGVyZWQuIE1vZGUgPSAlZHglZC0lZFxuIiwKKwkJIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWlmIChmYmktPmNsaykKKwkJY2xrX3B1dChmYmktPmNsayk7CisJaWYgKGZiaS0+bW1pb19iYXNlKQorCQlpb3VubWFwKGZiaS0+bW1pb19iYXNlKTsKKwlpZiAoZmJpLT5yZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihmYmktPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoZmJpLT5yZXMpKTsKKwllcDkzeHhmYl9kZWFsbG9jX3ZpZGVvbWVtKGluZm8pOworCWlmICgmaW5mby0+Y21hcCkKKwkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKwlpZiAoZmJpLT5tYWNoX2luZm8tPnRlYXJkb3duKQorCQlmYmktPm1hY2hfaW5mby0+dGVhcmRvd24ocGRldik7CisJa2ZyZWUoaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGVwOTN4eGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGVwOTN4eF9mYmkgKmZiaSA9IGluZm8tPnBhcjsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJY2xrX2Rpc2FibGUoZmJpLT5jbGspOworCWNsa19wdXQoZmJpLT5jbGspOworCWlvdW5tYXAoZmJpLT5tbWlvX2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihmYmktPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoZmJpLT5yZXMpKTsKKwllcDkzeHhmYl9kZWFsbG9jX3ZpZGVvbWVtKGluZm8pOworCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisKKwlpZiAoZmJpLT5tYWNoX2luZm8tPnRlYXJkb3duKQorCQlmYmktPm1hY2hfaW5mby0+dGVhcmRvd24ocGRldik7CisKKwlrZnJlZShpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlcDkzeHhmYl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGVwOTN4eGZiX3Byb2JlLAorCS5yZW1vdmUJCT0gZXA5M3h4ZmJfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImVwOTN4eC1mYiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlcDkzeHhmYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXA5M3h4ZmJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVwOTN4eGZiX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXA5M3h4ZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZXA5M3h4ZmJfaW5pdCk7Cittb2R1bGVfZXhpdChlcDkzeHhmYl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJFUDkzWFggRnJhbWVidWZmZXIgRHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmVwOTN4eC1mYiIpOworTU9EVUxFX0FVVEhPUigiUnlhbiBNYWxsb24gPHJ5YW4mYmx1ZXdhdGVyc3lzLmNvbT4sICIKKwkgICAgICAiSCBIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBhODVjODE4Li5hMWYyZTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC04NzEsOCArODcxLDggQEAKIAkJZXJyID0gLUVJTlZBTDsKIAogCWlmIChlcnIgfHwgIWluZm8tPmZib3BzLT5mYl9wYW5fZGlzcGxheSB8fAotCSAgICB2YXItPnlvZmZzZXQgKyB5cmVzID4gaW5mby0+dmFyLnlyZXNfdmlydHVhbCB8fAotCSAgICB2YXItPnhvZmZzZXQgKyBpbmZvLT52YXIueHJlcyA+IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpCisJICAgIHZhci0+eW9mZnNldCA+IGluZm8tPnZhci55cmVzX3ZpcnR1YWwgLSB5cmVzIHx8CisJICAgIHZhci0+eG9mZnNldCA+IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgLSBpbmZvLT52YXIueHJlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKGVyciA9IGluZm8tPmZib3BzLT5mYl9wYW5fZGlzcGxheSh2YXIsIGluZm8pKSkKQEAgLTk1NCw2ICs5NTQsNyBAQAogCQkJZ290byBkb25lOwogCiAJCWlmICgodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX01BU0spID09IEZCX0FDVElWQVRFX05PVykgeworCQkJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIG9sZF92YXI7CiAJCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1vZGU7CiAKIAkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfZ2V0X2NhcHMpIHsKQEAgLTk2MywxMCArOTY0LDIwIEBACiAJCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAorCQkJb2xkX3ZhciA9IGluZm8tPnZhcjsKIAkJCWluZm8tPnZhciA9ICp2YXI7CiAKLQkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcikKLQkJCQlpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcihpbmZvKTsKKwkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcikgeworCQkJCXJldCA9IGluZm8tPmZib3BzLT5mYl9zZXRfcGFyKGluZm8pOworCisJCQkJaWYgKHJldCkgeworCQkJCQlpbmZvLT52YXIgPSBvbGRfdmFyOworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJkZXRlY3RlZCAiCisJCQkJCQkiZmJfc2V0X3BhciBlcnJvciwgIgorCQkJCQkJImVycm9yIGNvZGU6ICVkXG4iLCByZXQpOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJfQogCiAJCQlmYl9wYW5fZGlzcGxheShpbmZvLCAmaW5mby0+dmFyKTsKIAkJCWZiX3NldF9jbWFwKCZpbmZvLT5jbWFwLCBpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwppbmRleCAzMGFlMzAyLi42NjM1OGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC03MTAsNyArNzEwLDcgQEAKIAogCWZiaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGZiaS0+Y2xrKSkgewotCQlyZXQgPSBQVFJfRVJSKGZiaS0+Y2xrKTs7CisJCXJldCA9IFBUUl9FUlIoZmJpLT5jbGspOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGNsb2NrOiAlZFxuIiwgcmV0KTsKIAkJZ290byBmYWlsZWRfZ2V0Y2xvY2s7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmMKaW5kZXggZDQyMzQ2ZS4uMDlmNmUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jCkBAIC0yNSwxNiArMjUsMTkgQEAKIAlyZXR1cm4gKHAgJiAweDQwKSA/IGZpbiA6IGZpbiA8PCAoKHAgJiAzKSArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGc0NTBfbW5wMnZjbyhDUE1JTkZPIHVuc2lnbmVkIGludCBtbnApIHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZzQ1MF9tbnAydmNvKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkJIHVuc2lnbmVkIGludCBtbnApCit7CiAJdW5zaWduZWQgaW50IG0sIG47CiAKIAltID0gKChtbnAgPj4gMTYpICYgMHgwRkYpICsgMTsKIAluID0gKChtbnAgPj4gIDcpICYgMHgxRkUpICsgNDsKLQlyZXR1cm4gKEFDQ0VTU19GQklORk8oZmVhdHVyZXMpLnBsbC5yZWZfZnJlcSAqIG4gKyAobSA+PiAxKSkgLyBtOworCXJldHVybiAobWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcSAqIG4gKyAobSA+PiAxKSkgLyBtOwogfQogCi11bnNpZ25lZCBpbnQgZzQ1MF9tbnAyZihDUE1JTkZPIHVuc2lnbmVkIGludCBtbnApIHsKLQlyZXR1cm4gZzQ1MF92Y28yZihtbnAsIGc0NTBfbW5wMnZjbyhQTUlORk8gbW5wKSk7Cit1bnNpZ25lZCBpbnQgZzQ1MF9tbnAyZihjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBpbnQgbW5wKQoreworCXJldHVybiBnNDUwX3ZjbzJmKG1ucCwgZzQ1MF9tbnAydmNvKG1pbmZvLCBtbnApKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGxsX2ZyZXFfZGVsdGEodW5zaWduZWQgaW50IGYxLCB1bnNpZ25lZCBpbnQgZjIpIHsKQEAgLTQ5LDcgKzUyLDEwIEBACiAjZGVmaW5lIE5PX01PUkVfTU5QCTB4MDFGRkZGRkYKICNkZWZpbmUgRzQ1MF9NTlBfRlJFUUJJVFMJKDB4RkZGRkZGNDMpCS8qIGRvIG5vdCBtYXNrIGhpZ2ggYnl0ZSBzbyB3ZSdsbCBjYXRjaCBOT19NT1JFX01OUCAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGc0NTBfbmV4dHBsbChDUE1JTkZPIGNvbnN0IHN0cnVjdCBtYXRyb3hfcGxsX2xpbWl0cyogcGksIHVuc2lnbmVkIGludCogZnZjbywgdW5zaWduZWQgaW50IG1ucCkgeworc3RhdGljIHVuc2lnbmVkIGludCBnNDUwX25leHRwbGwoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCQkgY29uc3Qgc3RydWN0IG1hdHJveF9wbGxfbGltaXRzICpwaSwKKwkJCQkgdW5zaWduZWQgaW50ICpmdmNvLCB1bnNpZ25lZCBpbnQgbW5wKQorewogCXVuc2lnbmVkIGludCBtLCBuLCBwOwogCXVuc2lnbmVkIGludCB0dmNvID0gKmZ2Y287CiAKQEAgLTkwLDEyICs5NiwxNSBAQAogCQl9IGVsc2UgewogCQkJbS0tOwogCQl9Ci0gICAgICAgIAluID0gKCh0dmNvICogKG0rMSkgKyBBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzKS5wbGwucmVmX2ZyZXEpIC8gKEFDQ0VTU19GQklORk8oZmVhdHVyZXMpLnBsbC5yZWZfZnJlcSAqIDIpKSAtIDI7CisJCW4gPSAoKHR2Y28gKiAobSsxKSArIG1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEpIC8gKG1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEgKiAyKSkgLSAyOwogCX0gd2hpbGUgKG4gPCAweDAzIHx8IG4gPiAweDdBKTsKIAlyZXR1cm4gKG0gPDwgMTYpIHwgKG4gPDwgOCkgfCBwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGc0NTBfZmlyc3RwbGwoQ1BNSU5GTyBjb25zdCBzdHJ1Y3QgbWF0cm94X3BsbF9saW1pdHMqIHBpLCB1bnNpZ25lZCBpbnQqIHZjbywgdW5zaWduZWQgaW50IGZvdXQpIHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZzQ1MF9maXJzdHBsbChjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJCSAgY29uc3Qgc3RydWN0IG1hdHJveF9wbGxfbGltaXRzICpwaSwKKwkJCQkgIHVuc2lnbmVkIGludCAqdmNvLCB1bnNpZ25lZCBpbnQgZm91dCkKK3sKIAl1bnNpZ25lZCBpbnQgcDsKIAl1bnNpZ25lZCBpbnQgdmNvbWF4OwogCkBAIC0xMjEsODggKzEzMCw5NCBAQAogCQl9CiAJCSp2Y28gPSB0dmNvOwogCX0KLQlyZXR1cm4gZzQ1MF9uZXh0cGxsKFBNSU5GTyBwaSwgdmNvLCAweEZGMDAwMCB8IHApOworCXJldHVybiBnNDUwX25leHRwbGwobWluZm8sIHBpLCB2Y28sIDB4RkYwMDAwIHwgcCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGc0NTBfc2V0cGxsKENQTUlORk8gdW5zaWduZWQgaW50IG1ucCwgdW5zaWduZWQgaW50IHBsbCkgeworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZzQ1MF9zZXRwbGwoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG1ucCwgdW5zaWduZWQgaW50IHBsbCkKK3sKIAlzd2l0Y2ggKHBsbCkgewogCQljYXNlIE1fUElYRUxfUExMX0E6Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYUExMQU0sIG1ucCA+PiAxNik7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYUExMQU4sIG1ucCA+PiA4KTsKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQSVhQTExBUCwgbW5wKTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQSVhQTExBTSwgbW5wID4+IDE2KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQSVhQTExBTiwgbW5wID4+IDgpOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBJWFBMTEFQLCBtbnApOwogCQkJcmV0dXJuIE0xMDY0X1hQSVhQTExTVEFUOwogCiAJCWNhc2UgTV9QSVhFTF9QTExfQjoKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQSVhQTExCTSwgbW5wID4+IDE2KTsKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQSVhQTExCTiwgbW5wID4+IDgpOwotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWFBMTEJQLCBtbnApOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBJWFBMTEJNLCBtbnAgPj4gMTYpOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBJWFBMTEJOLCBtbnAgPj4gOCk7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUElYUExMQlAsIG1ucCk7CiAJCQlyZXR1cm4gTTEwNjRfWFBJWFBMTFNUQVQ7CiAKIAkJY2FzZSBNX1BJWEVMX1BMTF9DOgotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWFBMTENNLCBtbnAgPj4gMTYpOwotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWFBMTENOLCBtbnAgPj4gOCk7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYUExMQ1AsIG1ucCk7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUElYUExMQ00sIG1ucCA+PiAxNik7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUElYUExMQ04sIG1ucCA+PiA4KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQSVhQTExDUCwgbW5wKTsKIAkJCXJldHVybiBNMTA2NF9YUElYUExMU1RBVDsKIAogCQljYXNlIE1fU1lTVEVNX1BMTDoKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE0sIG1ucCA+PiAxNik7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExOLCBtbnAgPj4gOCk7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExQLCBtbnApOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgREFDMTA2NF9YU1lTUExMTSwgbW5wID4+IDE2KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIERBQzEwNjRfWFNZU1BMTE4sIG1ucCA+PiA4KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIERBQzEwNjRfWFNZU1BMTFAsIG1ucCk7CiAJCQlyZXR1cm4gREFDMTA2NF9YU1lTUExMU1RBVDsKIAogCQljYXNlIE1fVklERU9fUExMOgotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFZJRFBMTE0sIG1ucCA+PiAxNik7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YVklEUExMTiwgbW5wID4+IDgpOwotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFZJRFBMTFAsIG1ucCk7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YVklEUExMTSwgbW5wID4+IDE2KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hWSURQTExOLCBtbnAgPj4gOCk7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YVklEUExMUCwgbW5wKTsKIAkJCXJldHVybiBNMTA2NF9YVklEUExMU1RBVDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGc0NTBfY21wcGxsKENQTUlORk8gdW5zaWduZWQgaW50IG1ucCwgdW5zaWduZWQgaW50IHBsbCkgeworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZzQ1MF9jbXBwbGwoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG1ucCwgdW5zaWduZWQgaW50IHBsbCkKK3sKIAl1bnNpZ25lZCBjaGFyIG0gPSBtbnAgPj4gMTY7CiAJdW5zaWduZWQgY2hhciBuID0gbW5wID4+IDg7CiAJdW5zaWduZWQgY2hhciBwID0gbW5wOwogCiAJc3dpdGNoIChwbGwpIHsKIAkJY2FzZSBNX1BJWEVMX1BMTF9BOgotCQkJcmV0dXJuIChtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExBTSkgIT0gbSB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWFBMTEFOKSAhPSBuIHx8Ci0JCQkJbWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUElYUExMQVApICE9IHApOworCQkJcmV0dXJuIChtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExBTSkgIT0gbSB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWFBMTEFOKSAhPSBuIHx8CisJCQkJbWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YUElYUExMQVApICE9IHApOwogCiAJCWNhc2UgTV9QSVhFTF9QTExfQjoKLQkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUElYUExMQk0pICE9IG0gfHwKLQkJCQltYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExCTikgIT0gbiB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWFBMTEJQKSAhPSBwKTsKKwkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YUElYUExMQk0pICE9IG0gfHwKKwkJCQltYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExCTikgIT0gbiB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWFBMTEJQKSAhPSBwKTsKIAogCQljYXNlIE1fUElYRUxfUExMX0M6Ci0JCQlyZXR1cm4gKG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWFBMTENNKSAhPSBtIHx8Ci0JCQkJbWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUElYUExMQ04pICE9IG4gfHwKLQkJCQltYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExDUCkgIT0gcCk7CisJCQlyZXR1cm4gKG1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWFBMTENNKSAhPSBtIHx8CisJCQkJbWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YUElYUExMQ04pICE9IG4gfHwKKwkJCQltYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExDUCkgIT0gcCk7CiAKIAkJY2FzZSBNX1NZU1RFTV9QTEw6Ci0JCQlyZXR1cm4gKG1hdHJveGZiX0RBQ19pbihQTUlORk8gREFDMTA2NF9YU1lTUExMTSkgIT0gbSB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gREFDMTA2NF9YU1lTUExMTikgIT0gbiB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gREFDMTA2NF9YU1lTUExMUCkgIT0gcCk7CisJCQlyZXR1cm4gKG1hdHJveGZiX0RBQ19pbihtaW5mbywgREFDMTA2NF9YU1lTUExMTSkgIT0gbSB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgREFDMTA2NF9YU1lTUExMTikgIT0gbiB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgREFDMTA2NF9YU1lTUExMUCkgIT0gcCk7CiAKIAkJY2FzZSBNX1ZJREVPX1BMTDoKLQkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YVklEUExMTSkgIT0gbSB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFZJRFBMTE4pICE9IG4gfHwKLQkJCQltYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hWSURQTExQKSAhPSBwKTsKKwkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YVklEUExMTSkgIT0gbSB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFZJRFBMTE4pICE9IG4gfHwKKwkJCQltYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hWSURQTExQKSAhPSBwKTsKIAl9CiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGc0NTBfaXNwbGxsb2NrZWQoQ1BNSU5GTyB1bnNpZ25lZCBpbnQgcmVnaWR4KSB7CitzdGF0aWMgaW5saW5lIGludCBnNDUwX2lzcGxsbG9ja2VkKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkJICAgdW5zaWduZWQgaW50IHJlZ2lkeCkKK3sKIAl1bnNpZ25lZCBpbnQgajsKIAogCWZvciAoaiA9IDA7IGogPCAxMDAwOyBqKyspIHsKLQkJaWYgKG1hdHJveGZiX0RBQ19pbihQTUlORk8gcmVnaWR4KSAmIDB4NDApIHsKKwkJaWYgKG1hdHJveGZiX0RBQ19pbihtaW5mbywgcmVnaWR4KSAmIDB4NDApIHsKIAkJCXVuc2lnbmVkIGludCByID0gMDsKIAkJCWludCBpOwogCiAJCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJCQlyICs9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gcmVnaWR4KSAmIDB4NDA7CisJCQkJciArPSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIHJlZ2lkeCkgJiAweDQwOwogCQkJfQogCQkJcmV0dXJuIHIgPj0gKDkwICogMHg0MCk7CiAJCX0KQEAgLTIxMSw4ICsyMjYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnNDUwX3Rlc3RwbGwoQ1BNSU5GTyB1bnNpZ25lZCBpbnQgbW5wLCB1bnNpZ25lZCBpbnQgcGxsKSB7Ci0JcmV0dXJuIGc0NTBfaXNwbGxsb2NrZWQoUE1JTkZPIGc0NTBfc2V0cGxsKFBNSU5GTyBtbnAsIHBsbCkpOworc3RhdGljIGludCBnNDUwX3Rlc3RwbGwoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdW5zaWduZWQgaW50IG1ucCwKKwkJCXVuc2lnbmVkIGludCBwbGwpCit7CisJcmV0dXJuIGc0NTBfaXNwbGxsb2NrZWQobWluZm8sIGc0NTBfc2V0cGxsKG1pbmZvLCBtbnAsIHBsbCkpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVod3N0YXRlX2NsayhzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodywgdW5zaWduZWQgaW50IG1ucCwgdW5zaWduZWQgaW50IHBsbCkgewpAQCAtMjI1LDEzICsyNDIsMTkgQEAKIAl9CiB9CiAKLXZvaWQgbWF0cm94ZmJfZzQ1MF9zZXRwbGxfY29uZChXUE1JTkZPIHVuc2lnbmVkIGludCBtbnAsIHVuc2lnbmVkIGludCBwbGwpIHsKLQlpZiAoZzQ1MF9jbXBwbGwoUE1JTkZPIG1ucCwgcGxsKSkgewotCQlnNDUwX3NldHBsbChQTUlORk8gbW5wLCBwbGwpOwordm9pZCBtYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVuc2lnbmVkIGludCBtbnAsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHBsbCkKK3sKKwlpZiAoZzQ1MF9jbXBwbGwobWluZm8sIG1ucCwgcGxsKSkgeworCQlnNDUwX3NldHBsbChtaW5mbywgbW5wLCBwbGwpOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZzQ1MF9maW5kd29ya2luZ3BsbChXUE1JTkZPIHVuc2lnbmVkIGludCBwbGwsIHVuc2lnbmVkIGludCogbW5wYXJyYXksIHVuc2lnbmVkIGludCBtbnBjb3VudCkgeworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZzQ1MF9maW5kd29ya2luZ3BsbChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHBsbCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCAqbW5wYXJyYXksCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW5wY291bnQpCit7CiAJdW5zaWduZWQgaW50IGZvdW5kID0gMDsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCXVuc2lnbmVkIGludCBtbnBmb3VuZCA9IG1ucGFycmF5WzBdOwpAQCAtMjU1LDIyICsyNzgsMjIgQEAKIAkJd2hpbGUgKHNwdHIgPj0gc2FycmF5KSB7CiAJCQl1bnNpZ25lZCBpbnQgbW5wID0gKnNwdHItLTsKIAkJCi0JCQlpZiAoZzQ1MF90ZXN0cGxsKFBNSU5GTyBtbnAgLSAweDAzMDAsIHBsbCkgJiYKLQkJCSAgICBnNDUwX3Rlc3RwbGwoUE1JTkZPIG1ucCArIDB4MDMwMCwgcGxsKSAmJgotCQkJICAgIGc0NTBfdGVzdHBsbChQTUlORk8gbW5wIC0gMHgwMjAwLCBwbGwpICYmCi0JCQkgICAgZzQ1MF90ZXN0cGxsKFBNSU5GTyBtbnAgKyAweDAyMDAsIHBsbCkgJiYKLQkJCSAgICBnNDUwX3Rlc3RwbGwoUE1JTkZPIG1ucCAtIDB4MDEwMCwgcGxsKSAmJgotCQkJICAgIGc0NTBfdGVzdHBsbChQTUlORk8gbW5wICsgMHgwMTAwLCBwbGwpKSB7Ci0JCQkJaWYgKGc0NTBfdGVzdHBsbChQTUlORk8gbW5wLCBwbGwpKSB7CisJCQlpZiAoZzQ1MF90ZXN0cGxsKG1pbmZvLCBtbnAgLSAweDAzMDAsIHBsbCkgJiYKKwkJCSAgICBnNDUwX3Rlc3RwbGwobWluZm8sIG1ucCArIDB4MDMwMCwgcGxsKSAmJgorCQkJICAgIGc0NTBfdGVzdHBsbChtaW5mbywgbW5wIC0gMHgwMjAwLCBwbGwpICYmCisJCQkgICAgZzQ1MF90ZXN0cGxsKG1pbmZvLCBtbnAgKyAweDAyMDAsIHBsbCkgJiYKKwkJCSAgICBnNDUwX3Rlc3RwbGwobWluZm8sIG1ucCAtIDB4MDEwMCwgcGxsKSAmJgorCQkJICAgIGc0NTBfdGVzdHBsbChtaW5mbywgbW5wICsgMHgwMTAwLCBwbGwpKSB7CisJCQkJaWYgKGc0NTBfdGVzdHBsbChtaW5mbywgbW5wLCBwbGwpKSB7CiAJCQkJCXJldHVybiBtbnA7CiAJCQkJfQotCQkJfSBlbHNlIGlmICghZm91bmQgJiYgZzQ1MF90ZXN0cGxsKFBNSU5GTyBtbnAsIHBsbCkpIHsKKwkJCX0gZWxzZSBpZiAoIWZvdW5kICYmIGc0NTBfdGVzdHBsbChtaW5mbywgbW5wLCBwbGwpKSB7CiAJCQkJbW5wZm91bmQgPSBtbnA7CiAJCQkJZm91bmQgPSAxOwogCQkJfQogCQl9CiAJfQotCWc0NTBfc2V0cGxsKFBNSU5GTyBtbnBmb3VuZCwgcGxsKTsKKwlnNDUwX3NldHBsbChtaW5mbywgbW5wZm91bmQsIHBsbCk7CiAJcmV0dXJuIG1ucGZvdW5kOwogfQogCkBAIC0yODMsNyArMzA2LDkgQEAKIAljaS0+ZGF0YVswXS5tbnBfdmFsdWUgPSBtbnBfdmFsdWU7CiB9CiAKLXN0YXRpYyBpbnQgZzQ1MF9jaGVja2NhY2hlKFdQTUlORk8gc3RydWN0IG1hdHJveF9wbGxfY2FjaGUqIGNpLCB1bnNpZ25lZCBpbnQgbW5wX2tleSkgeworc3RhdGljIGludCBnNDUwX2NoZWNrY2FjaGUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgIHN0cnVjdCBtYXRyb3hfcGxsX2NhY2hlICpjaSwgdW5zaWduZWQgaW50IG1ucF9rZXkpCit7CiAJdW5zaWduZWQgaW50IGk7CiAJCiAJbW5wX2tleSAmPSBHNDUwX01OUF9GUkVRQklUUzsKQEAgLTMwMyw4ICszMjgsMTAgQEAKIAlyZXR1cm4gTk9fTU9SRV9NTlA7CiB9CiAKLXN0YXRpYyBpbnQgX19nNDUwX3NldGNsayhXUE1JTkZPIHVuc2lnbmVkIGludCBmb3V0LCB1bnNpZ25lZCBpbnQgcGxsLCAKLQkJdW5zaWduZWQgaW50KiBtbnBhcnJheSwgdW5zaWduZWQgaW50KiBkZWx0YWFycmF5KSB7CitzdGF0aWMgaW50IF9fZzQ1MF9zZXRjbGsoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdW5zaWduZWQgaW50IGZvdXQsCisJCQkgdW5zaWduZWQgaW50IHBsbCwgdW5zaWduZWQgaW50ICptbnBhcnJheSwKKwkJCSB1bnNpZ25lZCBpbnQgKmRlbHRhYXJyYXkpCit7CiAJdW5zaWduZWQgaW50IG1ucGNvdW50OwogCXVuc2lnbmVkIGludCBwaXhlbF92Y287CiAJY29uc3Qgc3RydWN0IG1hdHJveF9wbGxfbGltaXRzKiBwaTsKQEAgLTMyMSwxOSArMzQ4LDE5IEBACiAJCQkJCiAJCQkJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7CiAKLQkJCQl4cHdyY3RybCA9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBXUkNUUkwpOwotCQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLCB4cHdyY3RybCAmIH5NMTA2NF9YUFdSQ1RSTF9QQU5FTFBETik7CisJCQkJeHB3cmN0cmwgPSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQV1JDVFJMKTsKKwkJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUFdSQ1RSTCwgeHB3cmN0cmwgJiB+TTEwNjRfWFBXUkNUUkxfUEFORUxQRE4pOwogCQkJCW1nYV9vdXRiKE1fU0VRX0lOREVYLCBNX1NFUTEpOwogCQkJCW1nYV9vdXRiKE1fU0VRX0RBVEEsIG1nYV9pbmIoTV9TRVFfREFUQSkgfCBNX1NFUTFfU0NST0ZGKTsKLQkJCQl0bXAgPSBtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMKTsKKwkJCQl0bXAgPSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhDTEtDVFJMKTsKIAkJCQl0bXAgfD0gTTEwNjRfWFBJWENMS0NUUkxfRElTOwogCQkJCWlmICghKHRtcCAmIE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUCkpIHsKIAkJCQkJdG1wIHw9IE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUDsKIAkJCQl9Ci0JCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwsIHRtcCk7CisJCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBJWENMS0NUUkwsIHRtcCk7CiAJCQkJLyogRFZJIFBMTCBwcmVmZXJyZWQgZm9yIGZyZXF1ZW5jaWVzIHVwIHRvCiAJCQkJICAgcGFuZWwgbGluayBtYXgsIHN0YW5kYXJkIFBMTCBvdGhlcndpc2UgKi8KLQkJCQlpZiAoZm91dCA+PSBNSU5GTy0+bWF4X3BpeGVsX2Nsb2NrX3BhbmVsbGluaykKKwkJCQlpZiAoZm91dCA+PSBtaW5mby0+bWF4X3BpeGVsX2Nsb2NrX3BhbmVsbGluaykKIAkJCQkJdG1wID0gMDsKIAkJCQllbHNlIHRtcCA9CiAJCQkJCU0xMDY0X1hEVklDTEtDVFJMX0RWSURBVEFQQVRIU0VMIHwKQEAgLTM0MSw4ICszNjgsOCBAQAogCQkJCQlNMTA2NF9YRFZJQ0xLQ1RSTF9DMURWSUNMS0VOIHwKIAkJCQkJTTEwNjRfWERWSUNMS0NUUkxfRFZJTE9PUENUTCB8CiAJCQkJCU0xMDY0X1hEVklDTEtDVFJMX1AxTE9PUEJXRFRDVEw7Ci0JCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWERWSUNMS0NUUkwsdG1wKTsKLQkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCwKKwkJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YRFZJQ0xLQ1RSTCwgdG1wKTsKKwkJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUFdSQ1RSTCwKIAkJCQkJCSB4cHdyY3RybCk7CiAKIAkJCQltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwpAQCAtMzYzLDIwICszOTAsMjAgQEAKIAkJCQl9CiAJCQkJbWdhX291dGIoTV9NSVNDX1JFRywgbWlzYyk7CiAJCQl9Ci0JCQlwaSA9ICZBQ0NFU1NfRkJJTkZPKGxpbWl0cy5waXhlbCk7Ci0JCQljaSA9ICZBQ0NFU1NfRkJJTkZPKGNhY2hlLnBpeGVsKTsKKwkJCXBpID0gJm1pbmZvLT5saW1pdHMucGl4ZWw7CisJCQljaSA9ICZtaW5mby0+Y2FjaGUucGl4ZWw7CiAJCQlicmVhazsKIAkJY2FzZSBNX1NZU1RFTV9QTEw6CiAJCQl7CiAJCQkJdV9pbnQzMl90IG9wdDsKIAotCQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCAmb3B0KTsKKwkJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsICZvcHQpOwogCQkJCWlmICghKG9wdCAmIDB4MjApKSB7Ci0JCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgb3B0IHwgMHgyMCk7CisJCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG9wdCB8IDB4MjApOwogCQkJCX0KIAkJCX0KLQkJCXBpID0gJkFDQ0VTU19GQklORk8obGltaXRzLnN5c3RlbSk7Ci0JCQljaSA9ICZBQ0NFU1NfRkJJTkZPKGNhY2hlLnN5c3RlbSk7CisJCQlwaSA9ICZtaW5mby0+bGltaXRzLnN5c3RlbTsKKwkJCWNpID0gJm1pbmZvLT5jYWNoZS5zeXN0ZW07CiAJCQlicmVhazsKIAkJY2FzZSBNX1ZJREVPX1BMTDoKIAkJCXsKQEAgLTM4NSwxOCArNDEyLDE4IEBACiAJCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJCQkKIAkJCQltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKLQkJCQl0bXAgPSBtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQV1JDVFJMKTsKKwkJCQl0bXAgPSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQV1JDVFJMKTsKIAkJCQlpZiAoISh0bXAgJiAyKSkgewotCQkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCwgdG1wIHwgMik7CisJCQkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQV1JDVFJMLCB0bXAgfCAyKTsKIAkJCQl9CiAJCQkJCi0JCQkJbW5wID0gbWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUElYUExMQ00pIDw8IDE2OwotCQkJCW1ucCB8PSBtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExDTikgPDwgODsKLQkJCQlwaXhlbF92Y28gPSBnNDUwX21ucDJ2Y28oUE1JTkZPIG1ucCk7CisJCQkJbW5wID0gbWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YUElYUExMQ00pIDw8IDE2OworCQkJCW1ucCB8PSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExDTikgPDwgODsKKwkJCQlwaXhlbF92Y28gPSBnNDUwX21ucDJ2Y28obWluZm8sIG1ucCk7CiAJCQkJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIAkJCX0KLQkJCXBpID0gJkFDQ0VTU19GQklORk8obGltaXRzLnZpZGVvKTsKLQkJCWNpID0gJkFDQ0VTU19GQklORk8oY2FjaGUudmlkZW8pOworCQkJcGkgPSAmbWluZm8tPmxpbWl0cy52aWRlbzsKKwkJCWNpID0gJm1pbmZvLT5jYWNoZS52aWRlbzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MDcsMTIgKzQzNCwxMiBAQAogCQl1bnNpZ25lZCBpbnQgbW5wOwogCQl1bnNpZ25lZCBpbnQgeHZjbzsKIAotCQlmb3IobW5wID0gZzQ1MF9maXJzdHBsbChQTUlORk8gcGksICZ4dmNvLCBmb3V0KTsgbW5wICE9IE5PX01PUkVfTU5QOyBtbnAgPSBnNDUwX25leHRwbGwoUE1JTkZPIHBpLCAmeHZjbywgbW5wKSkgeworCQlmb3IgKG1ucCA9IGc0NTBfZmlyc3RwbGwobWluZm8sIHBpLCAmeHZjbywgZm91dCk7IG1ucCAhPSBOT19NT1JFX01OUDsgbW5wID0gZzQ1MF9uZXh0cGxsKG1pbmZvLCBwaSwgJnh2Y28sIG1ucCkpIHsKIAkJCXVuc2lnbmVkIGludCBpZHg7CiAJCQl1bnNpZ25lZCBpbnQgdmNvOwogCQkJdW5zaWduZWQgaW50IGRlbHRhOwogCi0JCQl2Y28gPSBnNDUwX21ucDJ2Y28oUE1JTkZPIG1ucCk7CisJCQl2Y28gPSBnNDUwX21ucDJ2Y28obWluZm8sIG1ucCk7CiAjaWYgMAkJCQogCQkJaWYgKHBsbCA9PSBNX1ZJREVPX1BMTCkgewogCQkJCXVuc2lnbmVkIGludCBiaWcsIHNtYWxsOwpAQCAtNDQ0LDcgKzQ3MSw3IEBACiAJCQkJCSAqIChmcmVxcyBuZWFyIFZDT21pbiBhcmVuJ3QgYXMgc3RhYmxlKQogCQkJCQkgKi8KIAkJCQkJaWYgKGRlbHRhID09IGRlbHRhYXJyYXlbaWR4LTFdCi0JCQkJCSAgICAmJiB2Y28gIT0gZzQ1MF9tbnAydmNvKFBNSU5GTyBtbnBhcnJheVtpZHgtMV0pCisJCQkJCSAgICAmJiB2Y28gIT0gZzQ1MF9tbnAydmNvKG1pbmZvLCBtbnBhcnJheVtpZHgtMV0pCiAJCQkJCSAgICAmJiB2Y28gPCAocGktPnZjb21pbiAqIDE3IC8gMTYpKSB7CiAJCQkJCQlicmVhazsKIAkJCQkJfQpAQCAtNDY4LDE0ICs0OTUsMTQgQEAKIAkJdW5zaWduZWQgaW50IG1ucDsKIAkJCiAJCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwotCQltbnAgPSBnNDUwX2NoZWNrY2FjaGUoUE1JTkZPIGNpLCBtbnBhcnJheVswXSk7CisJCW1ucCA9IGc0NTBfY2hlY2tjYWNoZShtaW5mbywgY2ksIG1ucGFycmF5WzBdKTsKIAkJaWYgKG1ucCAhPSBOT19NT1JFX01OUCkgewotCQkJbWF0cm94ZmJfZzQ1MF9zZXRwbGxfY29uZChQTUlORk8gbW5wLCBwbGwpOworCQkJbWF0cm94ZmJfZzQ1MF9zZXRwbGxfY29uZChtaW5mbywgbW5wLCBwbGwpOwogCQl9IGVsc2UgewotCQkJbW5wID0gZzQ1MF9maW5kd29ya2luZ3BsbChQTUlORk8gcGxsLCBtbnBhcnJheSwgbW5wY291bnQpOworCQkJbW5wID0gZzQ1MF9maW5kd29ya2luZ3BsbChtaW5mbywgcGxsLCBtbnBhcnJheSwgbW5wY291bnQpOwogCQkJZzQ1MF9hZGRjYWNoZShjaSwgbW5wYXJyYXlbMF0sIG1ucCk7CiAJCX0KLQkJdXBkYXRlaHdzdGF0ZV9jbGsoJkFDQ0VTU19GQklORk8oaHcpLCBtbnAsIHBsbCk7CisJCXVwZGF0ZWh3c3RhdGVfY2xrKCZtaW5mby0+aHcsIG1ucCwgcGxsKTsKIAkJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuIG1ucDsKIAl9CkBAIC00ODUsMTQgKzUxMiwxNiBAQAogICogQ3VycmVudGx5IHRoZXJlIGlzIDUocCkgKiAxMChtKSA9IDUwIHBvc3NpYmxlIHZhbHVlcy4gKi8KICNkZWZpbmUgTU5QX1RBQkxFX1NJWkUgIDY0CiAKLWludCBtYXRyb3hmYl9nNDUwX3NldGNsayhXUE1JTkZPIHVuc2lnbmVkIGludCBmb3V0LCB1bnNpZ25lZCBpbnQgcGxsKSB7CitpbnQgbWF0cm94ZmJfZzQ1MF9zZXRjbGsoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdW5zaWduZWQgaW50IGZvdXQsCisJCQkgdW5zaWduZWQgaW50IHBsbCkKK3sKIAl1bnNpZ25lZCBpbnQqIGFycjsKIAkKIAlhcnIgPSBrbWFsbG9jKHNpemVvZigqYXJyKSAqIE1OUF9UQUJMRV9TSVpFICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGFycikgewogCQlpbnQgcjsKIAotCQlyID0gX19nNDUwX3NldGNsayhQTUlORk8gZm91dCwgcGxsLCBhcnIsIGFyciArIE1OUF9UQUJMRV9TSVpFKTsKKwkJciA9IF9fZzQ1MF9zZXRjbGsobWluZm8sIGZvdXQsIHBsbCwgYXJyLCBhcnIgKyBNTlBfVEFCTEVfU0laRSk7CiAJCWtmcmVlKGFycik7CiAJCXJldHVybiByOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmggYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5oCmluZGV4IGMxN2VkNzQuLmFhYzYxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuaApAQCAtMyw4ICszLDEwIEBACiAKICNpbmNsdWRlICJtYXRyb3hmYl9iYXNlLmgiCiAKLWludCBtYXRyb3hmYl9nNDUwX3NldGNsayhXUE1JTkZPIHVuc2lnbmVkIGludCBmb3V0LCB1bnNpZ25lZCBpbnQgcGxsKTsKLXVuc2lnbmVkIGludCBnNDUwX21ucDJmKENQTUlORk8gdW5zaWduZWQgaW50IG1ucCk7Ci12b2lkIG1hdHJveGZiX2c0NTBfc2V0cGxsX2NvbmQoV1BNSU5GTyB1bnNpZ25lZCBpbnQgbW5wLCB1bnNpZ25lZCBpbnQgcGxsKTsKK2ludCBtYXRyb3hmYl9nNDUwX3NldGNsayhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBpbnQgZm91dCwKKwkJCSB1bnNpZ25lZCBpbnQgcGxsKTsKK3Vuc2lnbmVkIGludCBnNDUwX21ucDJmKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVuc2lnbmVkIGludCBtbnApOwordm9pZCBtYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVuc2lnbmVkIGludCBtbnAsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHBsbCk7CiAKICNlbmRpZgkvKiBfX0c0NTBfUExMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvaTJjLW1hdHJveGZiLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9pMmMtbWF0cm94ZmIuYwppbmRleCBjMTRlM2UyLi5mMzcyOGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9pMmMtbWF0cm94ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9pMmMtbWF0cm94ZmIuYwpAQCAtNDEsNyArNDEsNyBAQAogCWludCB2OwogCiAJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7Ci0JdiA9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gREFDX1hHRU5JT0RBVEEpOworCXYgPSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIERBQ19YR0VOSU9EQVRBKTsKIAltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogCXJldHVybiB2OwogfQpAQCAtNTEsMTAgKzUxLDEwIEBACiAJaW50IHY7CiAKIAltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKLQl2ID0gKG1hdHJveGZiX0RBQ19pbihQTUlORk8gREFDX1hHRU5JT0NUUkwpICYgbWFzaykgfCB2YWw7Ci0JbWF0cm94ZmJfREFDX291dChQTUlORk8gREFDX1hHRU5JT0NUUkwsIHYpOworCXYgPSAobWF0cm94ZmJfREFDX2luKG1pbmZvLCBEQUNfWEdFTklPQ1RSTCkgJiBtYXNrKSB8IHZhbDsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBEQUNfWEdFTklPQ1RSTCwgdik7CiAJLyogV2UgbXVzdCByZXNldCBHRU5JT0RBVEEgdmVyeSBvZnRlbi4uLiBYRnJlZSBwbGF5cyB3aXRoIHRoaXMgcmVnaXN0ZXIgKi8KLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBEQUNfWEdFTklPREFUQSwgMHgwMCk7CisJbWF0cm94ZmJfREFDX291dChtaW5mbywgREFDX1hHRU5JT0RBVEEsIDB4MDApOwogCW1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogCWkyY19zZXRfYWRhcGRhdGEoJmItPmFkYXB0ZXIsIGIpOwogCWItPmFkYXB0ZXIuY2xhc3MgPSBjbGFzczsKIAliLT5hZGFwdGVyLmFsZ29fZGF0YSA9ICZiLT5iYWM7Ci0JYi0+YWRhcHRlci5kZXYucGFyZW50ID0gJkFDQ0VTU19GQklORk8ocGNpZGV2KS0+ZGV2OworCWItPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZtaW5mby0+cGNpZGV2LT5kZXY7CiAJYi0+YmFjID0gbWF0cm94X2kyY19hbGdvX3RlbXBsYXRlOwogCWItPmJhYy5kYXRhID0gYjsKIAllcnIgPSBpMmNfYml0X2FkZF9idXMoJmItPmFkYXB0ZXIpOwpAQCAtMTQ5LDExICsxNDksMTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBEQUNfWEdFTklPREFUQSwgMHhGRik7Ci0JbWF0cm94ZmJfREFDX291dChQTUlORk8gREFDX1hHRU5JT0NUUkwsIDB4MDApOworCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIERBQ19YR0VOSU9EQVRBLCAweEZGKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBEQUNfWEdFTklPQ1RSTCwgMHgwMCk7CiAJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIAotCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhjaGlwKSkgeworCXN3aXRjaCAobWluZm8tPmNoaXApIHsKIAkJY2FzZSBNR0FfMjA2NDoKIAkJY2FzZSBNR0FfMjE2NDoKIAkJCWVyciA9IGkyY19idXNfcmVnKCZtMmluZm8tPmRkYzEsIG1pbmZvLApAQCAtMTY4LDcgKzE2OCw3IEBACiAJfQogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9kZGMxOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmR1YWxoZWFkKSkgeworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZHVhbGhlYWQpIHsKIAkJZXJyID0gaTJjX2J1c19yZWcoJm0yaW5mby0+ZGRjMiwgbWluZm8sCiAJCQkJICBEREMyX0RBVEEsIEREQzJfQ0xLLAogCQkJCSAgIkREQzpmYiV1ICMxIiwgSTJDX0NMQVNTX0REQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmMKaW5kZXggYTc0ZTVkYS4uZjlmYTBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuYwpAQCAtMzMsNyArMzMsMTEgQEAKICNkZWZpbmUgREFDMTA2NF9PUFRfTURJVjIJMHgwMAogI2RlZmluZSBEQUMxMDY0X09QVF9SRVNFUlZFRAkweDEwCiAKLXN0YXRpYyB2b2lkIERBQzEwNjRfY2FsY2Nsb2NrKENQTUlORk8gdW5zaWduZWQgaW50IGZyZXEsIHVuc2lnbmVkIGludCBmbWF4LCB1bnNpZ25lZCBpbnQqIGluLCB1bnNpZ25lZCBpbnQqIGZlZWQsIHVuc2lnbmVkIGludCogcG9zdCkgeworc3RhdGljIHZvaWQgREFDMTA2NF9jYWxjY2xvY2soY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBpbnQgZm1heCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqaW4sIHVuc2lnbmVkIGludCAqZmVlZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqcG9zdCkKK3sKIAl1bnNpZ25lZCBpbnQgZnZjbzsKIAl1bnNpZ25lZCBpbnQgcDsKIApAQCAtNDEsNyArNDUsNyBAQAogCQogCS8qIG9ubHkgZm9yIGRldmljZXMgb2xkZXIgdGhhbiBHNDUwICovCiAKLQlmdmNvID0gUExMX2NhbGNjbG9jayhQTUlORk8gZnJlcSwgZm1heCwgaW4sIGZlZWQsICZwKTsKKwlmdmNvID0gUExMX2NhbGNjbG9jayhtaW5mbywgZnJlcSwgZm1heCwgaW4sIGZlZWQsICZwKTsKIAkKIAlwID0gKDEgPDwgcCkgLSAxOwogCWlmIChmdmNvIDw9IDEwMDAwMCkKQEAgLTgwLDMyICs4NCwzNSBAQAogCQkweDAwLAogCQkweDAwLCAweDAwLCAweEZGLCAweEZGfTsKIAotc3RhdGljIHZvaWQgREFDMTA2NF9zZXRwY2xrKFdQTUlORk8gdW5zaWduZWQgbG9uZyBmb3V0KSB7CitzdGF0aWMgdm9pZCBEQUMxMDY0X3NldHBjbGsoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdW5zaWduZWQgbG9uZyBmb3V0KQorewogCXVuc2lnbmVkIGludCBtLCBuLCBwOwogCiAJREJHKF9fZnVuY19fKQogCi0JREFDMTA2NF9jYWxjY2xvY2soUE1JTkZPIGZvdXQsIEFDQ0VTU19GQklORk8obWF4X3BpeGVsX2Nsb2NrKSwgJm0sICZuLCAmcCk7Ci0JQUNDRVNTX0ZCSU5GTyhodykuREFDY2xrWzBdID0gbTsKLQlBQ0NFU1NfRkJJTkZPKGh3KS5EQUNjbGtbMV0gPSBuOwotCUFDQ0VTU19GQklORk8oaHcpLkRBQ2Nsa1syXSA9IHA7CisJREFDMTA2NF9jYWxjY2xvY2sobWluZm8sIGZvdXQsIG1pbmZvLT5tYXhfcGl4ZWxfY2xvY2ssICZtLCAmbiwgJnApOworCW1pbmZvLT5ody5EQUNjbGtbMF0gPSBtOworCW1pbmZvLT5ody5EQUNjbGtbMV0gPSBuOworCW1pbmZvLT5ody5EQUNjbGtbMl0gPSBwOwogfQogCi1zdGF0aWMgdm9pZCBEQUMxMDY0X3NldG1jbGsoV1BNSU5GTyBpbnQgb3NjaW5mbywgdW5zaWduZWQgbG9uZyBmbWVtKSB7CitzdGF0aWMgdm9pZCBEQUMxMDY0X3NldG1jbGsoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IG9zY2luZm8sCisJCQkgICAgdW5zaWduZWQgbG9uZyBmbWVtKQorewogCXVfaW50MzJfdCBteDsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub2luaXQpKSB7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2luaXQpIHsKIAkJLyogcmVhZCBNQ0xLIGFuZCBnaXZlIHVwLi4uICovCi0JCWh3LT5EQUNjbGtbM10gPSBpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE0pOwotCQlody0+REFDY2xrWzRdID0gaW5EQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExOKTsKLQkJaHctPkRBQ2Nsa1s1XSA9IGluREFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMUCk7CisJCWh3LT5EQUNjbGtbM10gPSBpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTE0pOworCQlody0+REFDY2xrWzRdID0gaW5EQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExOKTsKKwkJaHctPkRBQ2Nsa1s1XSA9IGluREFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMUCk7CiAJCXJldHVybjsKIAl9CiAJbXggPSBody0+TVhvcHRpb25SZWcgfCAweDAwMDAwMDA0OwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgbXgpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG14KTsKIAlteCAmPSB+MHgwMDAwMDBCQjsKIAlpZiAob3NjaW5mbyAmIERBQzEwNjRfT1BUX0dESVYxKQogCQlteCB8PSAweDAwMDAwMDA4OwpAQCAtMTIwLDkgKzEyNyw5IEBACiAKIAkJLyogcG93ZXJ1cCBzeXN0ZW0gUExMLCBzZWxlY3QgUENJIGNsb2NrICovCiAJCW14IHw9IDB4MDAwMDAwMjA7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgbXgpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBteCk7CiAJCW14ICY9IH4weDAwMDAwMDA0OwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIG14KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbXgpOwogCiAJCS8qICEhISB5b3UgbXVzdCBub3QgYWNjZXNzIGRldmljZSBpZiBNQ0xLIGlzIG5vdCBydW5uaW5nICEhIQogCQkgICBEb2luZyBzbyBjYXVzZSBpbW1lZGlhdGUgUENJIGxvY2t1cCA6LSggTWF5YmUgdGhleSBzaG91bGQKQEAgLTEzMSwxMiArMTM4LDEyIEBACiAJCSAgIHBlcmZlY3QuLi4gKi8KIAkJLyogKGJpdCAyIG9mIFBDSV9PUFRJT05fUkVHIG11c3QgYmUgMC4uLiBhbmQgYml0cyAwLDEgbXVzdCBub3QKIAkJICAgc2VsZWN0IFBMTC4uLiBiZWNhdXNlIG9mIFBMTCBjYW4gYmUgc3RvcHBlZCBhdCB0aGlzIHRpbWUpICovCi0JCURBQzEwNjRfY2FsY2Nsb2NrKFBNSU5GTyBmbWVtLCBBQ0NFU1NfRkJJTkZPKG1heF9waXhlbF9jbG9jayksICZtLCAmbiwgJnApOwotCQlvdXREQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExNLCBody0+REFDY2xrWzNdID0gbSk7Ci0JCW91dERBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE4sIGh3LT5EQUNjbGtbNF0gPSBuKTsKLQkJb3V0REFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMUCwgaHctPkRBQ2Nsa1s1XSA9IHApOworCQlEQUMxMDY0X2NhbGNjbG9jayhtaW5mbywgZm1lbSwgbWluZm8tPm1heF9waXhlbF9jbG9jaywgJm0sICZuLCAmcCk7CisJCW91dERBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTE0sIGh3LT5EQUNjbGtbM10gPSBtKTsKKwkJb3V0REFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMTiwgaHctPkRBQ2Nsa1s0XSA9IG4pOworCQlvdXREQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExQLCBody0+REFDY2xrWzVdID0gcCk7CiAJCWZvciAoY2xrID0gNjU1MzY7IGNsazsgLS1jbGspIHsKLQkJCWlmIChpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTFNUQVQpICYgMHg0MCkKKwkJCWlmIChpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTFNUQVQpICYgMHg0MCkKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoIWNsaykKQEAgLTE0NywyOSArMTU0LDMwIEBACiAJCS8qIHNlbGVjdCBzcGVjaWZpZWQgc3lzdGVtIGNsb2NrIHNvdXJjZSAqLwogCQlteCB8PSBvc2NpbmZvICYgREFDMTA2NF9PUFRfU0NMS19NQVNLOwogCX0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIG14KTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBteCk7CiAJbXggJj0gfjB4MDAwMDAwMDQ7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBteCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbXgpOwogCWh3LT5NWG9wdGlvblJlZyA9IG14OwogfQogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9HCi1zdGF0aWMgdm9pZCBnNDUwX3NldF9wbGxzKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBnNDUwX3NldF9wbGxzKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJdV9pbnQzMl90IGMyX2N0bDsKIAl1bnNpZ25lZCBpbnQgcHhjOwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAlpbnQgcGl4ZWxtbnA7CiAJaW50IHZpZGVvbW5wOwogCQogCWMyX2N0bCA9IGh3LT5jcnRjMi5jdGwgJiB+MHg0MDA3OwkvKiBDbGVhciBQTEwgKyBlbmFibGUgZm9yIENSVEMyICovCiAJYzJfY3RsIHw9IDB4MDAwMTsJCQkvKiBFbmFibGUgQ1JUQzIgKi8KIAlody0+REFDcmVnW1BPUzEwNjRfWFBXUkNUUkxdICY9IH4weDAyOwkvKiBTdG9wIFZJREVPIFBMTCAqLwotCXBpeGVsbW5wID0gQUNDRVNTX0ZCSU5GTyhjcnRjMSkubW5wOwotCXZpZGVvbW5wID0gQUNDRVNTX0ZCSU5GTyhjcnRjMikubW5wOworCXBpeGVsbW5wID0gbWluZm8tPmNydGMxLm1ucDsKKwl2aWRlb21ucCA9IG1pbmZvLT5jcnRjMi5tbnA7CiAJaWYgKHZpZGVvbW5wIDwgMCkgewogCQljMl9jdGwgJj0gfjB4MDAwMTsJCQkvKiBEaXNhYmxlIENSVEMyICovCiAJCWh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0gJj0gfjB4MTA7CS8qIFBvd2VyZG93biBDUlRDMiAqLwotCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhjcnRjMikucGl4Y2xvY2sgPT0gQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcykucGxsLnJlZl9mcmVxKSB7CisJfSBlbHNlIGlmIChtaW5mby0+Y3J0YzIucGl4Y2xvY2sgPT0gbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcSkgewogCQljMl9jdGwgfD0gIDB4NDAwMjsJLyogVXNlIHJlZmVyZW5jZSBkaXJlY3RseSAqLwogCX0gZWxzZSBpZiAodmlkZW9tbnAgPT0gcGl4ZWxtbnApIHsKIAkJYzJfY3RsIHw9ICAweDAwMDQ7CS8qIFVzZSBwaXhlbCBQTEwgKi8KQEAgLTE4NCwyNyArMTkyLDI3IEBACiAJCWMyX2N0bCB8PSAgMHgwMDA2OwkvKiBVc2UgdmlkZW8gUExMICovCiAJCWh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0gfD0gMHgwMjsKIAkJCi0JCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLCBody0+REFDcmVnW1BPUzEwNjRfWFBXUkNUUkxdKTsKLQkJbWF0cm94ZmJfZzQ1MF9zZXRwbGxfY29uZChQTUlORk8gdmlkZW9tbnAsIE1fVklERU9fUExMKTsKKwkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWFBXUkNUUkwsIGh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0pOworCQltYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKG1pbmZvLCB2aWRlb21ucCwgTV9WSURFT19QTEwpOwogCX0KIAogCWh3LT5EQUNyZWdbUE9TMTA2NF9YUElYQ0xLQ1RSTF0gJj0gfk0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUDsKIAlpZiAocGl4ZWxtbnAgPj0gMCkgewogCQlody0+REFDcmVnW1BPUzEwNjRfWFBJWENMS0NUUkxdIHw9IE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUDsKIAkJCi0JCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMLCBody0+REFDcmVnW1BPUzEwNjRfWFBJWENMS0NUUkxdKTsKLQkJbWF0cm94ZmJfZzQ1MF9zZXRwbGxfY29uZChQTUlORk8gcGl4ZWxtbnAsIE1fUElYRUxfUExMX0MpOworCQlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hQSVhDTEtDVFJMXSk7CisJCW1hdHJveGZiX2c0NTBfc2V0cGxsX2NvbmQobWluZm8sIHBpeGVsbW5wLCBNX1BJWEVMX1BMTF9DKTsKIAl9CiAJaWYgKGMyX2N0bCAhPSBody0+Y3J0YzIuY3RsKSB7CiAJCWh3LT5jcnRjMi5jdGwgPSBjMl9jdGw7CiAJCW1nYV9vdXRsKDB4M0MxMCwgYzJfY3RsKTsKIAl9CiAKLQlweGMgPSBBQ0NFU1NfRkJJTkZPKGNydGMxKS5waXhjbG9jazsKLQlpZiAocHhjID09IDAgfHwgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7Ci0JCXB4YyA9IEFDQ0VTU19GQklORk8oY3J0YzIpLnBpeGNsb2NrOworCXB4YyA9IG1pbmZvLT5jcnRjMS5waXhjbG9jazsKKwlpZiAocHhjID09IDAgfHwgbWluZm8tPm91dHB1dHNbMl0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgeworCQlweGMgPSBtaW5mby0+Y3J0YzIucGl4Y2xvY2s7CiAJfQotCWlmIChBQ0NFU1NfRkJJTkZPKGNoaXApID09IE1HQV9HNTUwKSB7CisJaWYgKG1pbmZvLT5jaGlwID09IE1HQV9HNTUwKSB7CiAJCWlmIChweGMgPCA0NTAwMCkgewogCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hQQU5NT0RFXSA9IDB4MDA7CS8qIDAtNTAgKi8KIAkJfSBlbHNlIGlmIChweGMgPCA1NTAwMCkgewpAQCAtMjQ1LDE4ICsyNTMsMTkgQEAKIH0KICNlbmRpZgogCi12b2lkIERBQzEwNjRfZ2xvYmFsX2luaXQoV1BNSU5GTzIpIHsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKK3ZvaWQgREFDMTA2NF9nbG9iYWxfaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQoreworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCWh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdICY9IE0xMDY0X1hNSVNDQ1RSTF9EQUNfV0lEVEhNQVNLOwogCWh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdIHw9IE0xMDY0X1hNSVNDQ1RSTF9MVVRfRU47CiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hQSVhDTEtDVFJMXSA9IE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUCB8IE0xMDY0X1hQSVhDTEtDVFJMX0VOIHwgTTEwNjRfWFBJWENMS0NUUkxfU1JDX1BMTDsKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX0cKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgeworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgewogCQlody0+REFDcmVnW1BPUzEwNjRfWFBXUkNUUkxdID0gMHgxRjsJLyogcG93ZXJ1cCBldmVyeXRoaW5nICovCiAJCWh3LT5EQUNyZWdbUE9TMTA2NF9YT1VUUFVUQ09OTl0gPSAweDAwOwkvKiBkaXNhYmxlIG91dHB1dHMgKi8KIAkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0gfD0gTTEwNjRfWE1JU0NDVFJMX0RBQ19FTjsKLQkJc3dpdGNoIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLnNyYykgeworCQlzd2l0Y2ggKG1pbmZvLT5vdXRwdXRzWzBdLnNyYykgewogCQkJY2FzZSBNQVRST1hGQl9TUkNfQ1JUQzE6CiAJCQljYXNlIE1BVFJPWEZCX1NSQ19DUlRDMjoKIAkJCQlody0+REFDcmVnW1BPUzEwNjRfWE9VVFBVVENPTk5dIHw9IDB4MDE7CS8qIGVuYWJsZSBvdXRwdXQ7IENSVEMxLzIgc2VsZWN0aW9uIGlzIGluIENSVEMyIGN0bCAqLwpAQCAtMjY1LDEyICsyNzQsMTIgQEAKIAkJCQlody0+REFDcmVnW1BPUzEwNjRfWE1JU0NDVFJMXSAmPSB+TTEwNjRfWE1JU0NDVFJMX0RBQ19FTjsKIAkJCQlicmVhazsKIAkJfQotCQlzd2l0Y2ggKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuc3JjKSB7CisJCXN3aXRjaCAobWluZm8tPm91dHB1dHNbMV0uc3JjKSB7CiAJCQljYXNlIE1BVFJPWEZCX1NSQ19DUlRDMToKIAkJCQlody0+REFDcmVnW1BPUzEwNjRfWE9VVFBVVENPTk5dIHw9IDB4MDQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlIE1BVFJPWEZCX1NSQ19DUlRDMjoKLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlID09IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKKwkJCQlpZiAobWluZm8tPm91dHB1dHNbMV0ubW9kZSA9PSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SKSB7CiAJCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YT1VUUFVUQ09OTl0gfD0gMHgwODsKIAkJCQl9IGVsc2UgewogCQkJCQlody0+REFDcmVnW1BPUzEwNjRfWE9VVFBVVENPTk5dIHw9IDB4MEM7CkBAIC0yODAsNyArMjg5LDcgQEAKIAkJCQlody0+REFDcmVnW1BPUzEwNjRfWFBXUkNUUkxdICY9IH4weDAxOwkJLyogUG93ZXJvZmYgREFDMiAqLwogCQkJCWJyZWFrOwogCQl9Ci0JCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5zcmMpIHsKKwkJc3dpdGNoIChtaW5mby0+b3V0cHV0c1syXS5zcmMpIHsKIAkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMxOgogCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YT1VUUFVUQ09OTl0gfD0gMHgyMDsKIAkJCQlicmVhazsKQEAgLTI5OSw1NSArMzA4LDU3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJLyogTm93IHNldCB0aW1taW5nIHJlbGF0ZWQgdmFyaWFibGVzLi4uICovCi0JCWc0NTBfc2V0X3BsbHMoUE1JTkZPMik7CisJCWc0NTBfc2V0X3BsbHMobWluZm8pOwogCX0gZWxzZQogI2VuZGlmCiAJewotCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CisJCWlmIChtaW5mby0+b3V0cHV0c1sxXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CiAJCQlody0+REFDcmVnW1BPUzEwNjRfWFBJWENMS0NUUkxdID0gTTEwNjRfWFBJWENMS0NUUkxfUExMX1VQIHwgTTEwNjRfWFBJWENMS0NUUkxfRU4gfCBNMTA2NF9YUElYQ0xLQ1RSTF9TUkNfRVhUOwogCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0gfD0gR1gwMF9YTUlTQ0NUUkxfTUZDX01BRkMgfCBHNDAwX1hNSVNDQ1RSTF9WRE9fTUFGQzEyOwotCQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgeworCQl9IGVsc2UgaWYgKG1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKIAkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdIHw9IEdYMDBfWE1JU0NDVFJMX01GQ19NQUZDIHwgRzQwMF9YTUlTQ0NUUkxfVkRPX0MyX01BRkMxMjsKLQkJfSBlbHNlIGlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpCisJCX0gZWxzZSBpZiAobWluZm8tPm91dHB1dHNbMl0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkKIAkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdIHw9IEdYMDBfWE1JU0NDVFJMX01GQ19QQU5FTExJTksgfCBHNDAwX1hNSVNDQ1RSTF9WRE9fTUFGQzEyOwogCQllbHNlCiAJCQlody0+REFDcmVnW1BPUzEwNjRfWE1JU0NDVFJMXSB8PSBHWDAwX1hNSVNDQ1RSTF9NRkNfRElTOwogCi0JCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLnNyYyAhPSBNQVRST1hGQl9TUkNfTk9ORSkKKwkJaWYgKG1pbmZvLT5vdXRwdXRzWzBdLnNyYyAhPSBNQVRST1hGQl9TUkNfTk9ORSkKIAkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdIHw9IE0xMDY0X1hNSVNDQ1RSTF9EQUNfRU47CiAJfQogfQogCi12b2lkIERBQzEwNjRfZ2xvYmFsX3Jlc3RvcmUoV1BNSU5GTzIpIHsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKK3ZvaWQgREFDMTA2NF9nbG9iYWxfcmVzdG9yZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQoreworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAotCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMLCBody0+REFDcmVnW1BPUzEwNjRfWFBJWENMS0NUUkxdKTsKLQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YTUlTQ0NUUkwsIGh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdKTsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5hY2NlbGVyYXRvcikgPT0gRkJfQUNDRUxfTUFUUk9YX01HQUc0MDApIHsKLQkJb3V0REFDMTA2NChQTUlORk8gMHgyMCwgMHgwNCk7Ci0JCW91dERBQzEwNjQoUE1JTkZPIDB4MUYsIEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZGZwX3R5cGUpKTsKLQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZzQ1MGRhYykpIHsKLQkJCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hTWU5DQ1RSTCwgMHhDQyk7Ci0JCQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hQV1JDVFJMXSk7Ci0JCQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YUEFOTU9ERSwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hQQU5NT0RFXSk7Ci0JCQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YT1VUUFVUQ09OTiwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hPVVRQVVRDT05OXSk7CisJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWFBJWENMS0NUUkwsIGh3LT5EQUNyZWdbUE9TMTA2NF9YUElYQ0xLQ1RSTF0pOworCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hNSVNDQ1RSTCwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0pOworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuYWNjZWxlcmF0b3IgPT0gRkJfQUNDRUxfTUFUUk9YX01HQUc0MDApIHsKKwkJb3V0REFDMTA2NChtaW5mbywgMHgyMCwgMHgwNCk7CisJCW91dERBQzEwNjQobWluZm8sIDB4MUYsIG1pbmZvLT5kZXZmbGFncy5kZnBfdHlwZSk7CisJCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgeworCQkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWFNZTkNDVFJMLCAweENDKTsKKwkJCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hQV1JDVFJMLCBody0+REFDcmVnW1BPUzEwNjRfWFBXUkNUUkxdKTsKKwkJCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hQQU5NT0RFLCBody0+REFDcmVnW1BPUzEwNjRfWFBBTk1PREVdKTsKKwkJCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hPVVRQVVRDT05OLCBody0+REFDcmVnW1BPUzEwNjRfWE9VVFBVVENPTk5dKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBEQUMxMDY0X2luaXRfMShXUE1JTkZPIHN0cnVjdCBteV90aW1taW5nKiBtKSB7Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CitzdGF0aWMgaW50IERBQzEwNjRfaW5pdF8xKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHN0cnVjdCBteV90aW1taW5nICptKQoreworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCURCRyhfX2Z1bmNfXykKIAogCW1lbWNweShody0+REFDcmVnLCBNR0ExMDY0X0RBQywgc2l6ZW9mKE1HQTEwNjRfREFDX3JlZ3MpKTsKLQlzd2l0Y2ggKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5iaXRzX3Blcl9waXhlbCkgeworCXN3aXRjaCAobWluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCkgewogCQkvKiBjYXNlIDQ6IG5vdCBzdXBwb3J0ZWQgYnkgTUdBMTA2NCBEQUMgKi8KIAkJY2FzZSA4OgogCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNVUxDVFJMXSA9IE0xMDY0X1hNVUxDVFJMX0RFUFRIXzhCUFAgfCBNMTA2NF9YTVVMQ1RSTF9HUkFQSElDU19QQUxFVElaRUQ7CiAJCQlicmVhazsKIAkJY2FzZSAxNjoKLQkJCWlmIChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuZ3JlZW4ubGVuZ3RoID09IDUpCisJCQlpZiAobWluZm8tPmZiY29uLnZhci5ncmVlbi5sZW5ndGggPT0gNSkKIAkJCQlody0+REFDcmVnW1BPUzEwNjRfWE1VTENUUkxdID0gTTEwNjRfWE1VTENUUkxfREVQVEhfMTVCUFBfMUJQUCB8IE0xMDY0X1hNVUxDVFJMX0dSQVBISUNTX1BBTEVUSVpFRDsKIAkJCWVsc2UKIAkJCQlody0+REFDcmVnW1BPUzEwNjRfWE1VTENUUkxdID0gTTEwNjRfWE1VTENUUkxfREVQVEhfMTZCUFAgfCBNMTA2NF9YTVVMQ1RSTF9HUkFQSElDU19QQUxFVElaRUQ7CkBAIC0zNjEsMjIgKzM3MiwyMyBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIDE7CS8qIHVuc3VwcG9ydGVkIGRlcHRoICovCiAJfQotCWh3LT5EQUNyZWdbUE9TMTA2NF9YVlJFRkNUUkxdID0gQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5EQUMxMDY0Lnh2cmVmY3RybCk7CisJaHctPkRBQ3JlZ1tQT1MxMDY0X1hWUkVGQ1RSTF0gPSBtaW5mby0+ZmVhdHVyZXMuREFDMTA2NC54dnJlZmN0cmw7CiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hHRU5DVFJMXSAmPSB+TTEwNjRfWEdFTkNUUkxfU1lOQ19PTl9HUkVFTl9NQVNLOwogCWh3LT5EQUNyZWdbUE9TMTA2NF9YR0VOQ1RSTF0gfD0gKG0tPnN5bmMgJiBGQl9TWU5DX09OX0dSRUVOKT9NMTA2NF9YR0VOQ1RSTF9TWU5DX09OX0dSRUVOOk0xMDY0X1hHRU5DVFJMX05PX1NZTkNfT05fR1JFRU47CiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hDVVJBRERMXSA9IDA7CiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hDVVJBRERIXSA9IDA7CiAKLQlEQUMxMDY0X2dsb2JhbF9pbml0KFBNSU5GTzIpOworCURBQzEwNjRfZ2xvYmFsX2luaXQobWluZm8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IERBQzEwNjRfaW5pdF8yKFdQTUlORk8gc3RydWN0IG15X3RpbW1pbmcqIG0pIHsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKK3N0YXRpYyBpbnQgREFDMTA2NF9pbml0XzIoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgc3RydWN0IG15X3RpbW1pbmcgKm0pCit7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCi0JaWYgKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5iaXRzX3Blcl9waXhlbCA+IDE2KSB7CS8qIDI1NiBlbnRyaWVzICovCisJaWYgKG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwgPiAxNikgewkvKiAyNTYgZW50cmllcyAqLwogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTM4NCw4ICszOTYsOCBAQAogCQkJaHctPkRBQ3BhbFtpICogMyArIDFdID0gaTsKIAkJCWh3LT5EQUNwYWxbaSAqIDMgKyAyXSA9IGk7CiAJCX0KLQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5iaXRzX3Blcl9waXhlbCA+IDgpIHsKLQkJaWYgKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmVlbi5sZW5ndGggPT0gNSkgewkvKiAwLi4zMSwgMTI4Li4xNTkgKi8KKwl9IGVsc2UgaWYgKG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwgPiA4KSB7CisJCWlmIChtaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCA9PSA1KSB7CS8qIDAuLjMxLCAxMjguLjE1OSAqLwogCQkJaW50IGk7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CkBAIC00MTMsOCArNDI1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgREFDMTA2NF9yZXN0b3JlXzEoV1BNSU5GTzIpIHsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKK3N0YXRpYyB2b2lkIERBQzEwNjRfcmVzdG9yZV8xKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJQ1JJVEZMQUdTCiAKQEAgLTQyMiwyOCArNDM1LDI5IEBACiAKIAlDUklUQkVHSU4KIAotCWlmICgoaW5EQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExNKSAhPSBody0+REFDY2xrWzNdKSB8fAotCSAgICAoaW5EQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExOKSAhPSBody0+REFDY2xrWzRdKSB8fAotCSAgICAoaW5EQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExQKSAhPSBody0+REFDY2xrWzVdKSkgewotCQlvdXREQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExNLCBody0+REFDY2xrWzNdKTsKLQkJb3V0REFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMTiwgaHctPkRBQ2Nsa1s0XSk7Ci0JCW91dERBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTFAsIGh3LT5EQUNjbGtbNV0pOworCWlmICgoaW5EQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExNKSAhPSBody0+REFDY2xrWzNdKSB8fAorCSAgICAoaW5EQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExOKSAhPSBody0+REFDY2xrWzRdKSB8fAorCSAgICAoaW5EQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExQKSAhPSBody0+REFDY2xrWzVdKSkgeworCQlvdXREQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExNLCBody0+REFDY2xrWzNdKTsKKwkJb3V0REFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMTiwgaHctPkRBQ2Nsa1s0XSk7CisJCW91dERBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTFAsIGh3LT5EQUNjbGtbNV0pOwogCX0KIAl7CiAJCXVuc2lnbmVkIGludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoTUdBMTA2NF9EQUNfcmVncyk7IGkrKykgewogCQkJaWYgKChpICE9IFBPUzEwNjRfWFBJWENMS0NUUkwpICYmIChpICE9IFBPUzEwNjRfWE1JU0NDVFJMKSkKLQkJCQlvdXREQUMxMDY0KFBNSU5GTyBNR0ExMDY0X0RBQ19yZWdzW2ldLCBody0+REFDcmVnW2ldKTsKKwkJCQlvdXREQUMxMDY0KG1pbmZvLCBNR0ExMDY0X0RBQ19yZWdzW2ldLCBody0+REFDcmVnW2ldKTsKIAkJfQogCX0KIAotCURBQzEwNjRfZ2xvYmFsX3Jlc3RvcmUoUE1JTkZPMik7CisJREFDMTA2NF9nbG9iYWxfcmVzdG9yZShtaW5mbyk7CiAKIAlDUklURU5ECiB9OwogCi1zdGF0aWMgdm9pZCBEQUMxMDY0X3Jlc3RvcmVfMihXUE1JTkZPMikgeworc3RhdGljIHZvaWQgREFDMTA2NF9yZXN0b3JlXzIoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKICNpZmRlZiBERUJVRwogCXVuc2lnbmVkIGludCBpOwogI2VuZGlmCkBAIC00NTMsMTIgKzQ2NywxMiBAQAogI2lmZGVmIERFQlVHCiAJZHByaW50ayhLRVJOX0RFQlVHICJEQUMxMDY0cmVncyAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKE1HQTEwNjRfREFDX3JlZ3MpOyBpKyspIHsKLQkJZHByaW50aygiUiUwMlg9JTAyWCAiLCBNR0ExMDY0X0RBQ19yZWdzW2ldLCBBQ0NFU1NfRkJJTkZPKGh3KS5EQUNyZWdbaV0pOworCQlkcHJpbnRrKCJSJTAyWD0lMDJYICIsIE1HQTEwNjRfREFDX3JlZ3NbaV0sIG1pbmZvLT5ody5EQUNyZWdbaV0pOwogCQlpZiAoKGkgJiAweDcpID09IDB4NykgZHByaW50ayhLRVJOX0RFQlVHICJjb250aW51aW5nLi4uICIpOwogCX0KIAlkcHJpbnRrKEtFUk5fREVCVUcgIkRBQzEwNjRjbGsgIik7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJZHByaW50aygiQyUwMlg9JTAyWCAiLCBpLCBBQ0NFU1NfRkJJTkZPKGh3KS5EQUNjbGtbaV0pOworCQlkcHJpbnRrKCJDJTAyWD0lMDJYICIsIGksIG1pbmZvLT5ody5EQUNjbGtbaV0pOwogCWRwcmludGsoIlxuIik7CiAjZW5kaWYKIH0KQEAgLTQ3MCwxNCArNDg0LDE0IEBACiAJCWludCB0bW91dDsKIAkJQ1JJVEZMQUdTCiAKLQkJREFDMTA2NF9zZXRwY2xrKFBNSU5GTyBtLT5waXhjbG9jayk7CisJCURBQzEwNjRfc2V0cGNsayhtaW5mbywgbS0+cGl4Y2xvY2spOwogCiAJCUNSSVRCRUdJTgogCiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYUExMQ00gKyBpLCBBQ0NFU1NfRkJJTkZPKGh3KS5EQUNjbGtbaV0pOworCQkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWFBJWFBMTENNICsgaSwgbWluZm8tPmh3LkRBQ2Nsa1tpXSk7CiAJCWZvciAodG1vdXQgPSA1MDAwMDA7IHRtb3V0OyB0bW91dC0tKSB7Ci0JCQlpZiAoaW5EQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYUExMU1RBVCkgJiAweDQwKQorCQkJaWYgKGluREFDMTA2NChtaW5mbywgTTEwNjRfWFBJWFBMTFNUQVQpICYgMHg0MCkKIAkJCQlicmVhazsKIAkJCXVkZWxheSgxMCk7CiAJCX07CkBAIC01MDAsOSArNTE0LDkgQEAKIHN0YXRpYyBpbnQgZzQ1MF9jb21wdXRlKHZvaWQqIG91dCwgc3RydWN0IG15X3RpbW1pbmcqIG0pIHsKICNkZWZpbmUgbWluZm8gKChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qKW91dCkKIAlpZiAobS0+bW5wIDwgMCkgewotCQltLT5tbnAgPSBtYXRyb3hmYl9nNDUwX3NldGNsayhQTUlORk8gbS0+cGl4Y2xvY2ssIChtLT5jcnRjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgPyBNX1BJWEVMX1BMTF9DIDogTV9WSURFT19QTEwpOworCQltLT5tbnAgPSBtYXRyb3hmYl9nNDUwX3NldGNsayhtaW5mbywgbS0+cGl4Y2xvY2ssIChtLT5jcnRjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgPyBNX1BJWEVMX1BMTF9DIDogTV9WSURFT19QTEwpOwogCQlpZiAobS0+bW5wID49IDApIHsKLQkJCW0tPnBpeGNsb2NrID0gZzQ1MF9tbnAyZihQTUlORk8gbS0+bW5wKTsKKwkJCW0tPnBpeGNsb2NrID0gZzQ1MF9tbnAyZihtaW5mbywgbS0+bW5wKTsKIAkJfQogCX0KICN1bmRlZiBtaW5mbwpAQCAtNTE4LDEzICs1MzIsMTQgQEAKICNlbmRpZiAvKiBORUVEX0RBQzEwNjQgKi8KIAogI2lmZGVmIENPTkZJR19GQl9NQVRST1hfTVlTVElRVUUKLXN0YXRpYyBpbnQgTUdBMTA2NF9pbml0KFdQTUlORk8gc3RydWN0IG15X3RpbW1pbmcqIG0pIHsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKK3N0YXRpYyBpbnQgTUdBMTA2NF9pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHN0cnVjdCBteV90aW1taW5nICptKQoreworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCURCRyhfX2Z1bmNfXykKIAotCWlmIChEQUMxMDY0X2luaXRfMShQTUlORk8gbSkpIHJldHVybiAxOwotCWlmIChtYXRyb3hmYl92Z2FIV2luaXQoUE1JTkZPIG0pKSByZXR1cm4gMTsKKwlpZiAoREFDMTA2NF9pbml0XzEobWluZm8sIG0pKSByZXR1cm4gMTsKKwlpZiAobWF0cm94ZmJfdmdhSFdpbml0KG1pbmZvLCBtKSkgcmV0dXJuIDE7CiAKIAlody0+TWlzY091dFJlZyA9IDB4Q0I7CiAJaWYgKG0tPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkKQEAgLTUzNCwyMCArNTQ5LDIxIEBACiAJaWYgKG0tPnN5bmMgJiBGQl9TWU5DX0NPTVBfSElHSF9BQ1QpIC8qIHNob3VsZCBiZSBvbmx5IEZCX1NZTkNfQ09NUCAqLwogCQlody0+Q1JUQ0VYVFszXSB8PSAweDQwOwogCi0JaWYgKERBQzEwNjRfaW5pdF8yKFBNSU5GTyBtKSkgcmV0dXJuIDE7CisJaWYgKERBQzEwNjRfaW5pdF8yKG1pbmZvLCBtKSkgcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQl9NQVRST1hfRwotc3RhdGljIGludCBNR0FHMTAwX2luaXQoV1BNSU5GTyBzdHJ1Y3QgbXlfdGltbWluZyogbSkgewotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworc3RhdGljIGludCBNR0FHMTAwX2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgc3RydWN0IG15X3RpbW1pbmcgKm0pCit7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCi0JaWYgKERBQzEwNjRfaW5pdF8xKFBNSU5GTyBtKSkgcmV0dXJuIDE7CisJaWYgKERBQzEwNjRfaW5pdF8xKG1pbmZvLCBtKSkgcmV0dXJuIDE7CiAJaHctPk1Yb3B0aW9uUmVnICY9IH4weDIwMDA7Ci0JaWYgKG1hdHJveGZiX3ZnYUhXaW5pdChQTUlORk8gbSkpIHJldHVybiAxOworCWlmIChtYXRyb3hmYl92Z2FIV2luaXQobWluZm8sIG0pKSByZXR1cm4gMTsKIAogCWh3LT5NaXNjT3V0UmVnID0gMHhFRjsKIAlpZiAobS0+c3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKQpAQCAtNTU3LDI3ICs1NzMsMjggQEAKIAlpZiAobS0+c3luYyAmIEZCX1NZTkNfQ09NUF9ISUdIX0FDVCkgLyogc2hvdWxkIGJlIG9ubHkgRkJfU1lOQ19DT01QICovCiAJCWh3LT5DUlRDRVhUWzNdIHw9IDB4NDA7CiAKLQlpZiAoREFDMTA2NF9pbml0XzIoUE1JTkZPIG0pKSByZXR1cm4gMTsKKwlpZiAoREFDMTA2NF9pbml0XzIobWluZm8sIG0pKSByZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgkvKiBHICovCiAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFCi1zdGF0aWMgdm9pZCBNR0ExMDY0X3JhbWRhY19pbml0KFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBNR0ExMDY0X3JhbWRhY19pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAKIAlEQkcoX19mdW5jX18pCiAKLQkvKiBBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLkRBQzEwNjQudmNvX2ZyZXFfbWluKSA9IDEyMDAwMDsgKi8KLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC52Y29fZnJlcV9taW4pID0gNjIwMDA7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwucmVmX2ZyZXEpCSA9IDE0MzE4OwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmZlZWRfZGl2X21pbikgPSAxMDA7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWF4KSA9IDEyNzsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5pbl9kaXZfbWluKQkgPSAxOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmluX2Rpdl9tYXgpCSA9IDMxOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLnBvc3Rfc2hpZnRfbWF4KSA9IDM7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5EQUMxMDY0Lnh2cmVmY3RybCkgPSBEQUMxMDY0X1hWUkVGQ1RSTF9FWFRFUk5BTDsKKwkvKiBtaW5mby0+ZmVhdHVyZXMuREFDMTA2NC52Y29fZnJlcV9taW4gPSAxMjAwMDA7ICovCisJbWluZm8tPmZlYXR1cmVzLnBsbC52Y29fZnJlcV9taW4gPSA2MjAwMDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCSA9IDE0MzE4OworCW1pbmZvLT5mZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWluID0gMTAwOworCW1pbmZvLT5mZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWF4ID0gMTI3OworCW1pbmZvLT5mZWF0dXJlcy5wbGwuaW5fZGl2X21pbgkgPSAxOworCW1pbmZvLT5mZWF0dXJlcy5wbGwuaW5fZGl2X21heAkgPSAzMTsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnBvc3Rfc2hpZnRfbWF4ID0gMzsKKwltaW5mby0+ZmVhdHVyZXMuREFDMTA2NC54dnJlZmN0cmwgPSBEQUMxMDY0X1hWUkVGQ1RSTF9FWFRFUk5BTDsKIAkvKiBtYXliZSBjbWRsaW5lIE1DTEs9ID8sIGRvYyBzYXlzIGdjbGs9NDRNSHosIG1jbGs9NjZNSHouLi4gaXQgd2FzIDU1LzgzIHdpdGggb2xkIHZhbHVlcyAqLwotCURBQzEwNjRfc2V0bWNsayhQTUlORk8gREFDMTA2NF9PUFRfTURJVjIgfCBEQUMxMDY0X09QVF9HRElWMyB8IERBQzEwNjRfT1BUX1NDTEtfUExMLCAxMzMzMzMpOworCURBQzEwNjRfc2V0bWNsayhtaW5mbywgREFDMTA2NF9PUFRfTURJVjIgfCBEQUMxMDY0X09QVF9HRElWMyB8IERBQzEwNjRfT1BUX1NDTEtfUExMLCAxMzMzMzMpOwogfQogI2VuZGlmCiAKQEAgLTU4OSwyMyArNjA2LDI1IEBACiBzdGF0aWMgaW50IGRlZjUwID0gMDsJLyogcmVnNTAsICYgMHgwRiwgJiAweDMwMDAgKG9ubHkgMHgwMDAwLCAweDEwMDAsIDB4MjAwMCAoMHgzMDAwIGRpc2FsbG93ZWQgYW5kIHRyZWF0ZWQgYXMgMCkgKi8KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBNR0FHMTAwX3Byb2dQaXhDbG9jayhDUE1JTkZPIGludCBmbGFncywgaW50IG0sIGludCBuLCBpbnQgcCkgeworc3RhdGljIHZvaWQgTUdBRzEwMF9wcm9nUGl4Q2xvY2soY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IGZsYWdzLAorCQkJCSBpbnQgbSwgaW50IG4sIGludCBwKQorewogCWludCByZWc7CiAJaW50IHNlbENsazsKIAlpbnQgY2xrOwogCiAJREJHKF9fZnVuY19fKQogCi0Jb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwsIGluREFDMTA2NChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwpIHwgTTEwNjRfWFBJWENMS0NUUkxfRElTIHwKKwlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCwgaW5EQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCkgfCBNMTA2NF9YUElYQ0xLQ1RSTF9ESVMgfAogCQkgICBNMTA2NF9YUElYQ0xLQ1RSTF9QTExfVVApOwogCXN3aXRjaCAoZmxhZ3MgJiAzKSB7CiAJCWNhc2UgMDoJCXJlZyA9IE0xMDY0X1hQSVhQTExBTTsgYnJlYWs7CiAJCWNhc2UgMToJCXJlZyA9IE0xMDY0X1hQSVhQTExCTTsgYnJlYWs7CiAJCWRlZmF1bHQ6CXJlZyA9IE0xMDY0X1hQSVhQTExDTTsgYnJlYWs7CiAJfQotCW91dERBQzEwNjQoUE1JTkZPIHJlZysrLCBtKTsKLQlvdXREQUMxMDY0KFBNSU5GTyByZWcrKywgbik7Ci0Jb3V0REFDMTA2NChQTUlORk8gcmVnLCBwKTsKKwlvdXREQUMxMDY0KG1pbmZvLCByZWcrKywgbSk7CisJb3V0REFDMTA2NChtaW5mbywgcmVnKyssIG4pOworCW91dERBQzEwNjQobWluZm8sIHJlZywgcCk7CiAJc2VsQ2xrID0gbWdhX2luYihNX01JU0NfUkVHX1JFQUQpICYgfjB4QzsKIAkvKiB0aGVyZSBzaG91bGQgYmUgZmxhZ3MgJiAweDAzICYgY2FzZSAwLzEvZWxzZSAqLwogCS8qIGFuZCB3ZSBzaG91bGQgZmlyc3Qgc2VsZWN0IHNvdXJjZSBhbmQgYWZ0ZXIgdGhhdCB3ZSBzaG91bGQgd2FpdCBmb3IgUExMICovCkBAIC02MTcsNjEgKzYzNiw2NCBAQAogCX0KIAltZ2Ffb3V0YihNX01JU0NfUkVHLCBzZWxDbGspOwogCWZvciAoY2xrID0gNTAwMDAwOyBjbGs7IGNsay0tKSB7Ci0JCWlmIChpbkRBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhQTExTVEFUKSAmIDB4NDApCisJCWlmIChpbkRBQzEwNjQobWluZm8sIE0xMDY0X1hQSVhQTExTVEFUKSAmIDB4NDApCiAJCQlicmVhazsKIAkJdWRlbGF5KDEwKTsKIAl9OwogCWlmICghY2xrKQogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiOiBQaXhlbCBQTEwlYyBub3QgbG9ja2VkIGFmdGVyIHVzdWFsIHRpbWVcbiIsIChyZWctTTEwNjRfWFBJWFBMTEFNLTIpLzQgKyAnQScpOwotCXNlbENsayA9IGluREFDMTA2NChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwpICYgfk0xMDY0X1hQSVhDTEtDVFJMX1NSQ19NQVNLOworCXNlbENsayA9IGluREFDMTA2NChtaW5mbywgTTEwNjRfWFBJWENMS0NUUkwpICYgfk0xMDY0X1hQSVhDTEtDVFJMX1NSQ19NQVNLOwogCXN3aXRjaCAoZmxhZ3MgJiAweDBDKSB7CiAJCWNhc2UgMHgwMDoJc2VsQ2xrIHw9IE0xMDY0X1hQSVhDTEtDVFJMX1NSQ19QQ0k7IGJyZWFrOwogCQljYXNlIDB4MDQ6CXNlbENsayB8PSBNMTA2NF9YUElYQ0xLQ1RSTF9TUkNfUExMOyBicmVhazsKIAkJZGVmYXVsdDoJc2VsQ2xrIHw9IE0xMDY0X1hQSVhDTEtDVFJMX1NSQ19FWFQ7IGJyZWFrOwogCX0KLQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCwgc2VsQ2xrKTsKLQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCwgaW5EQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCkgJiB+TTEwNjRfWFBJWENMS0NUUkxfRElTKTsKKwlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCwgc2VsQ2xrKTsKKwlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCwgaW5EQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCkgJiB+TTEwNjRfWFBJWENMS0NUUkxfRElTKTsKIH0KIAotc3RhdGljIHZvaWQgTUdBRzEwMF9zZXRQaXhDbG9jayhDUE1JTkZPIGludCBmbGFncywgaW50IGZyZXEpIHsKK3N0YXRpYyB2b2lkIE1HQUcxMDBfc2V0UGl4Q2xvY2soY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IGZsYWdzLAorCQkJCWludCBmcmVxKQorewogCXVuc2lnbmVkIGludCBtLCBuLCBwOwogCiAJREJHKF9fZnVuY19fKQogCi0JREFDMTA2NF9jYWxjY2xvY2soUE1JTkZPIGZyZXEsIEFDQ0VTU19GQklORk8obWF4X3BpeGVsX2Nsb2NrKSwgJm0sICZuLCAmcCk7Ci0JTUdBRzEwMF9wcm9nUGl4Q2xvY2soUE1JTkZPIGZsYWdzLCBtLCBuLCBwKTsKKwlEQUMxMDY0X2NhbGNjbG9jayhtaW5mbywgZnJlcSwgbWluZm8tPm1heF9waXhlbF9jbG9jaywgJm0sICZuLCAmcCk7CisJTUdBRzEwMF9wcm9nUGl4Q2xvY2sobWluZm8sIGZsYWdzLCBtLCBuLCBwKTsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRQotc3RhdGljIGludCBNR0ExMDY0X3ByZWluaXQoV1BNSU5GTzIpIHsKK3N0YXRpYyBpbnQgTUdBMTA2NF9wcmVpbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJc3RhdGljIGNvbnN0IGludCB2eHJlc19teXN0aXF1ZVtdID0geyA1MTIsICAgICAgICA2NDAsIDc2OCwgIDgwMCwgIDgzMiwgIDk2MCwKIAkJCQkJICAgICAxMDI0LCAxMTUyLCAxMjgwLCAgICAgIDE2MDAsIDE2NjQsIDE5MjAsCiAJCQkJCSAgICAgMjA0OCwgICAgMH07Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCi0JLyogQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLmNmYjQpID0gMDsgLi4uIHByZWluaXRpYWxpemVkIGJ5IDAgKi8KLQlBQ0NFU1NfRkJJTkZPKGNhcGFibGUudGV4dCkgPSAxOwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS52eHJlcykgPSB2eHJlc19teXN0aXF1ZTsKKwkvKiBtaW5mby0+Y2FwYWJsZS5jZmI0ID0gMDsgLi4uIHByZWluaXRpYWxpemVkIGJ5IDAgKi8KKwltaW5mby0+Y2FwYWJsZS50ZXh0ID0gMTsKKwltaW5mby0+Y2FwYWJsZS52eHJlcyA9IHZ4cmVzX215c3RpcXVlOwogCi0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5vdXRwdXQgPSAmbTEwNjQ7Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5zcmMgPSBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLmRlZmF1bHRfc3JjOwotCUFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuZGF0YSA9IE1JTkZPOwotCUFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJbWluZm8tPm91dHB1dHNbMF0ub3V0cHV0ID0gJm0xMDY0OworCW1pbmZvLT5vdXRwdXRzWzBdLnNyYyA9IG1pbmZvLT5vdXRwdXRzWzBdLmRlZmF1bHRfc3JjOworCW1pbmZvLT5vdXRwdXRzWzBdLmRhdGEgPSBtaW5mbzsKKwltaW5mby0+b3V0cHV0c1swXS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vaW5pdCkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2luaXQpCiAJCXJldHVybiAwOwkvKiBkbyBub3QgbW9kaWZ5IHNldHRpbmdzICovCiAJaHctPk1Yb3B0aW9uUmVnICY9IDB4QzAwMDAxMDA7CiAJaHctPk1Yb3B0aW9uUmVnIHw9IDB4MDAwOTRFMjA7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm92Z2EpKQorCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm92Z2EpCiAJCWh3LT5NWG9wdGlvblJlZyAmPSB+MHgwMDAwMDEwMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub2Jpb3MpKQorCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm9iaW9zKQogCQlody0+TVhvcHRpb25SZWcgJj0gfjB4NDAwMDAwMDA7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9wY2lyZXRyeSkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub3BjaXJldHJ5KQogCQlody0+TVhvcHRpb25SZWcgfD0gIDB4MjAwMDAwMDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CiAJbWdhX3NldHIoTV9TRVFfSU5ERVgsIDB4MDEsIDB4MjApOwogCW1nYV9vdXRsKE1fQ1RMV1RTVCwgMHgwMDAwMDAwMCk7CiAJdWRlbGF5KDIwMCk7CkBAIC02ODEsMTAxICs3MDMsMTA1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIE1HQTEwNjRfcmVzZXQoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIE1HQTEwNjRfcmVzZXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAogCURCRyhfX2Z1bmNfXyk7CiAKLQlNR0ExMDY0X3JhbWRhY19pbml0KFBNSU5GTzIpOworCU1HQTEwNjRfcmFtZGFjX2luaXQobWluZm8pOwogfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX0cKLXN0YXRpYyB2b2lkIGc0NTBfbWNsa19pbml0KFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBnNDUwX21jbGtfaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCS8qIHN3aXRjaCBhbGwgY2xvY2tzIHRvIFBDSSBzb3VyY2UgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnIHwgNCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT04zX1JFRywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQzICYgfjB4MDAzMDBDMDMpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcpOwotCQotCWlmICgoKEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0MyAmIDB4MDAwMDAzKSA9PSAweDAwMDAwMykgfHwKLQkgICAgKChBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm9wdDMgJiAweDAwMEMwMCkgPT0gMHgwMDBDMDApIHx8Ci0JICAgICgoQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQzICYgMHgzMDAwMDApID09IDB4MzAwMDAwKSkgewotCQltYXRyb3hmYl9nNDUwX3NldGNsayhQTUlORk8gQUNDRVNTX0ZCSU5GTyh2YWx1ZXMucGxsLnZpZGVvKSwgTV9WSURFT19QTEwpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG1pbmZvLT5ody5NWG9wdGlvblJlZyB8IDQpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTjNfUkVHLCBtaW5mby0+dmFsdWVzLnJlZy5vcHQzICYgfjB4MDAzMDBDMDMpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG1pbmZvLT5ody5NWG9wdGlvblJlZyk7CisKKwlpZiAoKChtaW5mby0+dmFsdWVzLnJlZy5vcHQzICYgMHgwMDAwMDMpID09IDB4MDAwMDAzKSB8fAorCSAgICAoKG1pbmZvLT52YWx1ZXMucmVnLm9wdDMgJiAweDAwMEMwMCkgPT0gMHgwMDBDMDApIHx8CisJICAgICgobWluZm8tPnZhbHVlcy5yZWcub3B0MyAmIDB4MzAwMDAwKSA9PSAweDMwMDAwMCkpIHsKKwkJbWF0cm94ZmJfZzQ1MF9zZXRjbGsobWluZm8sIG1pbmZvLT52YWx1ZXMucGxsLnZpZGVvLCBNX1ZJREVPX1BMTCk7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdW5zaWduZWQgaW50IHB3cjsKIAkJCiAJCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwotCQlwd3IgPSBpbkRBQzEwNjQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMKSAmIH4weDAyOwotCQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCwgcHdyKTsKKwkJcHdyID0gaW5EQUMxMDY0KG1pbmZvLCBNMTA2NF9YUFdSQ1RSTCkgJiB+MHgwMjsKKwkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWFBXUkNUUkwsIHB3cik7CiAJCW1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncyk7CiAJfQotCW1hdHJveGZiX2c0NTBfc2V0Y2xrKFBNSU5GTyBBQ0NFU1NfRkJJTkZPKHZhbHVlcy5wbGwuc3lzdGVtKSwgTV9TWVNURU1fUExMKTsKKwltYXRyb3hmYl9nNDUwX3NldGNsayhtaW5mbywgbWluZm8tPnZhbHVlcy5wbGwuc3lzdGVtLCBNX1NZU1RFTV9QTEwpOwogCQogCS8qIHN3aXRjaCBjbG9ja3MgdG8gdGhlaXIgcmVhbCBQTEwgc291cmNlKHMpICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyB8IDQpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OM19SRUcsIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0Myk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnIHwgNCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OM19SRUcsIG1pbmZvLT52YWx1ZXMucmVnLm9wdDMpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG1pbmZvLT5ody5NWG9wdGlvblJlZyk7CiAKIH0KIAotc3RhdGljIHZvaWQgZzQ1MF9tZW1vcnlfaW5pdChXUE1JTkZPMikgeworc3RhdGljIHZvaWQgZzQ1MF9tZW1vcnlfaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCS8qIGRpc2FibGUgbWVtb3J5IHJlZnJlc2ggKi8KLQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyAmPSB+MHgwMDFGODAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnKTsKKwltaW5mby0+aHcuTVhvcHRpb25SZWcgJj0gfjB4MDAxRjgwMDA7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnKTsKIAkKIAkvKiBzZXQgbWVtb3J5IGludGVyZmFjZSBwYXJhbWV0ZXJzICovCi0JQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgJj0gfjB4MDAyMDdFMDA7Ci0JQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgfD0gMHgwMDIwN0UwMCAmIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0OwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OMl9SRUcsIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0Mik7CisJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnICY9IH4weDAwMjA3RTAwOworCW1pbmZvLT5ody5NWG9wdGlvblJlZyB8PSAweDAwMjA3RTAwICYgbWluZm8tPnZhbHVlcy5yZWcub3B0OworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG1pbmZvLT5ody5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsIG1pbmZvLT52YWx1ZXMucmVnLm9wdDIpOwogCQotCW1nYV9vdXRsKE1fQ1RMV1RTVCwgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tY3Rsd3RzdCk7CisJbWdhX291dGwoTV9DVExXVFNULCBtaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdCk7CiAJCiAJLyogZmlyc3Qgc2V0IHVwIG1lbW9yeSBpbnRlcmZhY2Ugd2l0aCBkaXNhYmxlZCBtZW1vcnkgaW50ZXJmYWNlIGNsb2NrcyAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfTUVNTUlTQ19SRUcsIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWVtbWlzYyAmIH4weDgwMDAwMDAwVSk7Ci0JbWdhX291dGwoTV9NRU1SREJLLCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1lbXJkYmspOwotCW1nYV9vdXRsKE1fTUFDQ0VTUywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tYWNjZXNzKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9NRU1NSVNDX1JFRywgbWluZm8tPnZhbHVlcy5yZWcubWVtbWlzYyAmIH4weDgwMDAwMDAwVSk7CisJbWdhX291dGwoTV9NRU1SREJLLCBtaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrKTsKKwltZ2Ffb3V0bChNX01BQ0NFU1MsIG1pbmZvLT52YWx1ZXMucmVnLm1hY2Nlc3MpOwogCS8qIHN0YXJ0IG1lbW9yeSBjbG9ja3MgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX01FTU1JU0NfUkVHLCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1lbW1pc2MgfCAweDgwMDAwMDAwVSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfTUVNTUlTQ19SRUcsIG1pbmZvLT52YWx1ZXMucmVnLm1lbW1pc2MgfCAweDgwMDAwMDAwVSk7CiAKIAl1ZGVsYXkoMjAwKTsKIAkKLQlpZiAoQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLm1lbW9yeS5kZHIgJiYgKCFBQ0NFU1NfRkJJTkZPKHZhbHVlcykubWVtb3J5LmVtcnN3ZW4gfHwgIUFDQ0VTU19GQklORk8odmFsdWVzKS5tZW1vcnkuZGxsKSkgewotCQltZ2Ffb3V0bChNX01FTVJEQkssIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWVtcmRiayAmIH4weDEwMDApOworCWlmIChtaW5mby0+dmFsdWVzLm1lbW9yeS5kZHIgJiYgKCFtaW5mby0+dmFsdWVzLm1lbW9yeS5lbXJzd2VuIHx8ICFtaW5mby0+dmFsdWVzLm1lbW9yeS5kbGwpKSB7CisJCW1nYV9vdXRsKE1fTUVNUkRCSywgbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiayAmIH4weDEwMDApOwogCX0KLQltZ2Ffb3V0bChNX01BQ0NFU1MsIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWFjY2VzcyB8IDB4ODAwMCk7CisJbWdhX291dGwoTV9NQUNDRVNTLCBtaW5mby0+dmFsdWVzLnJlZy5tYWNjZXNzIHwgMHg4MDAwKTsKIAkKIAl1ZGVsYXkoMjAwKTsKIAkKLQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyB8PSAweDAwMUY4MDAwICYgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQ7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyk7CisJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnIHw9IDB4MDAxRjgwMDAgJiBtaW5mby0+dmFsdWVzLnJlZy5vcHQ7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnKTsKIAkKIAkvKiB2YWx1ZSBpcyB3cml0dGVuIHRvIG1lbW9yeSBjaGlwcyBvbmx5IGlmIG9sZCAhPSBuZXcgKi8KIAltZ2Ffb3V0bChNX1BMTldULCAwKTsKIAltZ2Ffb3V0bChNX1BMTldULCB+MCk7CiAJCi0JaWYgKEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWN0bHd0c3QgIT0gQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tY3Rsd3RzdF9jb3JlKSB7Ci0JCW1nYV9vdXRsKE1fQ1RMV1RTVCwgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tY3Rsd3RzdF9jb3JlKTsKKwlpZiAobWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QgIT0gbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3RfY29yZSkgeworCQltZ2Ffb3V0bChNX0NUTFdUU1QsIG1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0X2NvcmUpOwogCX0KIAkKIH0KIAotc3RhdGljIHZvaWQgZzQ1MF9wcmVpbml0KFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBnNDUwX3ByZWluaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAl1X2ludDMyX3QgYzJjdGw7CiAJdV9pbnQ4X3QgY3VyY3RsOwogCXVfaW50OF90IGMxY3RsOwogCQotCS8qIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnID0gbWluZm8tPnZhbHVlcy5yZWcub3B0OyAqLwotCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnICY9IDB4QzAwMDAxMDA7Ci0JQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgfD0gMHgwMDAwMDAyMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3ZnYSkpCi0JCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnICY9IH4weDAwMDAwMTAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vYmlvcykpCi0JCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnICY9IH4weDQwMDAwMDAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vcGNpcmV0cnkpKQotCQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyB8PSAgMHgyMDAwMDAwMDsKLQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyB8PSBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm9wdCAmIDB4MDM0MDAwNDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyk7CisJLyogbWluZm8tPmh3Lk1Yb3B0aW9uUmVnID0gbWluZm8tPnZhbHVlcy5yZWcub3B0OyAqLworCW1pbmZvLT5ody5NWG9wdGlvblJlZyAmPSAweEMwMDAwMTAwOworCW1pbmZvLT5ody5NWG9wdGlvblJlZyB8PSAweDAwMDAwMDIwOworCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm92Z2EpCisJCW1pbmZvLT5ody5NWG9wdGlvblJlZyAmPSB+MHgwMDAwMDEwMDsKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vYmlvcykKKwkJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnICY9IH4weDQwMDAwMDAwOworCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm9wY2lyZXRyeSkKKwkJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnIHw9ICAweDIwMDAwMDAwOworCW1pbmZvLT5ody5NWG9wdGlvblJlZyB8PSBtaW5mby0+dmFsdWVzLnJlZy5vcHQgJiAweDAzNDAwMDQwOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG1pbmZvLT5ody5NWG9wdGlvblJlZyk7CiAKIAkvKiBJbml0IHN5c3RlbSBjbG9ja3MgKi8KIAkJCkBAIC03ODMsMjQgKzgwOSwyNCBAQAogCWMyY3RsID0gbWdhX2lubChNX0MyQ1RMKTsKIAltZ2Ffb3V0bChNX0MyQ1RMLCBjMmN0bCAmIH4xKTsKIAkvKiBzdG9wIGN1cnNvciAqLwotCWN1cmN0bCA9IGluREFDMTA2NChQTUlORk8gTTEwNjRfWENVUkNUUkwpOwotCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hDVVJDVFJMLCAwKTsKKwljdXJjdGwgPSBpbkRBQzEwNjQobWluZm8sIE0xMDY0X1hDVVJDVFJMKTsKKwlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YQ1VSQ1RSTCwgMCk7CiAJLyogc3RvcCBjcnRjMSAqLwogCWMxY3RsID0gbWdhX3JlYWRyKE1fU0VRX0lOREVYLCAxKTsKIAltZ2Ffc2V0cihNX1NFUV9JTkRFWCwgMSwgYzFjdGwgfCAweDIwKTsKIAotCWc0NTBfbWNsa19pbml0KFBNSU5GTzIpOwotCWc0NTBfbWVtb3J5X2luaXQoUE1JTkZPMik7CisJZzQ1MF9tY2xrX2luaXQobWluZm8pOworCWc0NTBfbWVtb3J5X2luaXQobWluZm8pOwogCQogCS8qIHNldCBsZWdhY3kgVkdBIGNsb2NrIHNvdXJjZXMgZm9yIERPU0VtdSBvciBWTXdhcmUuLi4gKi8KLQltYXRyb3hmYl9nNDUwX3NldGNsayhQTUlORk8gMjUxNzUsIE1fUElYRUxfUExMX0EpOwotCW1hdHJveGZiX2c0NTBfc2V0Y2xrKFBNSU5GTyAyODMyMiwgTV9QSVhFTF9QTExfQik7CisJbWF0cm94ZmJfZzQ1MF9zZXRjbGsobWluZm8sIDI1MTc1LCBNX1BJWEVMX1BMTF9BKTsKKwltYXRyb3hmYl9nNDUwX3NldGNsayhtaW5mbywgMjgzMjIsIE1fUElYRUxfUExMX0IpOwogCiAJLyogcmVzdG9yZSBjcnRjMSAqLwogCW1nYV9zZXRyKE1fU0VRX0lOREVYLCAxLCBjMWN0bCk7CiAJCiAJLyogcmVzdG9yZSBjdXJzb3IgKi8KLQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YQ1VSQ1RSTCwgY3VyY3RsKTsKKwlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YQ1VSQ1RSTCwgY3VyY3RsKTsKIAogCS8qIHJlc3RvcmUgY3J0YzIgKi8KIAltZ2Ffb3V0bChNX0MyQ1RMLCBjMmN0bCk7CkBAIC04MDgsMTEgKzgzNCwxMiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBNR0FHMTAwX3ByZWluaXQoV1BNSU5GTzIpIHsKK3N0YXRpYyBpbnQgTUdBRzEwMF9wcmVpbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJc3RhdGljIGNvbnN0IGludCB2eHJlc19nMTAwW10gPSB7ICA1MTIsICAgICAgICA2NDAsIDc2OCwgIDgwMCwgIDgzMiwgIDk2MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsIDExNTIsIDEyODAsICAgICAgMTYwMCwgMTY2NCwgMTkyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDgsIDB9OwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogICAgICAgICB1X2ludDMyX3QgcmVnNTA7CiAjaWYgMApAQCAtODIyLDY4ICs4NDksNjggQEAKIAlEQkcoX19mdW5jX18pCiAKIAkvKiB0aGVyZSBhcmUgc29tZSBpbnN0YWJpbGl0aWVzIGlmIGluX2RpdiA+IDE5ICYmIHZjbyA8IDYxMDAwICovCi0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZzQ1MGRhYykpIHsKLQkJQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwudmNvX2ZyZXFfbWluKSA9IDEzMDAwMDsJLyogbXkgc2FtcGxlOiA+MTE4ICovCisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CisJCW1pbmZvLT5mZWF0dXJlcy5wbGwudmNvX2ZyZXFfbWluID0gMTMwMDAwOwkvKiBteSBzYW1wbGU6ID4xMTggKi8KIAl9IGVsc2UgewotCQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC52Y29fZnJlcV9taW4pID0gNjIwMDA7CisJCW1pbmZvLT5mZWF0dXJlcy5wbGwudmNvX2ZyZXFfbWluID0gNjIwMDA7CiAJfQotCWlmICghQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwucmVmX2ZyZXEpKSB7Ci0JCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLnJlZl9mcmVxKQkgPSAyNzAwMDsKKwlpZiAoIW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEpIHsKKwkJbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQkgPSAyNzAwMDsKIAl9Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWluKSA9IDc7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWF4KSA9IDEyNzsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5pbl9kaXZfbWluKQkgPSAxOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmluX2Rpdl9tYXgpCSA9IDMxOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLnBvc3Rfc2hpZnRfbWF4KSA9IDM7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5EQUMxMDY0Lnh2cmVmY3RybCkgPSBEQUMxMDY0X1hWUkVGQ1RSTF9HMTAwX0RFRkFVTFQ7Ci0JLyogQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLmNmYjQpID0gMDsgLi4uIHByZWluaXRpYWxpemVkIGJ5IDAgKi8KLQlBQ0NFU1NfRkJJTkZPKGNhcGFibGUudGV4dCkgPSAxOwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS52eHJlcykgPSB2eHJlc19nMTAwOwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS5wbG53dCkgPSBBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzEwMAotCQkJPyBBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnNncmFtKSA6IDE7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9taW4gPSA3OworCW1pbmZvLT5mZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWF4ID0gMTI3OworCW1pbmZvLT5mZWF0dXJlcy5wbGwuaW5fZGl2X21pbgkgPSAxOworCW1pbmZvLT5mZWF0dXJlcy5wbGwuaW5fZGl2X21heAkgPSAzMTsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnBvc3Rfc2hpZnRfbWF4ID0gMzsKKwltaW5mby0+ZmVhdHVyZXMuREFDMTA2NC54dnJlZmN0cmwgPSBEQUMxMDY0X1hWUkVGQ1RSTF9HMTAwX0RFRkFVTFQ7CisJLyogbWluZm8tPmNhcGFibGUuY2ZiNCA9IDA7IC4uLiBwcmVpbml0aWFsaXplZCBieSAwICovCisJbWluZm8tPmNhcGFibGUudGV4dCA9IDE7CisJbWluZm8tPmNhcGFibGUudnhyZXMgPSB2eHJlc19nMTAwOworCW1pbmZvLT5jYXBhYmxlLnBsbnd0ID0gbWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwCisJCQk/IG1pbmZvLT5kZXZmbGFncy5zZ3JhbSA6IDE7CiAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX0cKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgewotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLm91dHB1dCA9ICZnNDUwb3V0OworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgeworCQltaW5mby0+b3V0cHV0c1swXS5vdXRwdXQgPSAmZzQ1MG91dDsKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5vdXRwdXQgPSAmbTEwNjQ7CisJCW1pbmZvLT5vdXRwdXRzWzBdLm91dHB1dCA9ICZtMTA2NDsKIAl9Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5zcmMgPSBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLmRlZmF1bHRfc3JjOwotCUFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuZGF0YSA9IE1JTkZPOwotCUFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJbWluZm8tPm91dHB1dHNbMF0uc3JjID0gbWluZm8tPm91dHB1dHNbMF0uZGVmYXVsdF9zcmM7CisJbWluZm8tPm91dHB1dHNbMF0uZGF0YSA9IG1pbmZvOworCW1pbmZvLT5vdXRwdXRzWzBdLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOwogCi0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZzQ1MGRhYykpIHsKKwlpZiAobWluZm8tPmRldmZsYWdzLmc0NTBkYWMpIHsKIAkJLyogd2UgbXVzdCBkbyB0aGlzIGFsd2F5cywgQklPUyBkb2VzIG5vdCBkbyBpdCBmb3IgdXMKIAkJICAgYW5kIGFjY2VsZXJhdG9yIGRpZXMgd2l0aG91dCBpdCAqLwogCQltZ2Ffb3V0bCgweDFDMEMsIDApOwogCX0KLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub2luaXQpKQorCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm9pbml0KQogCQlyZXR1cm4gMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgewotCQlnNDUwX3ByZWluaXQoUE1JTkZPMik7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CisJCWc0NTBfcHJlaW5pdChtaW5mbyk7CiAJCXJldHVybiAwOwogCX0KIAlody0+TVhvcHRpb25SZWcgJj0gMHhDMDAwMDEwMDsKIAlody0+TVhvcHRpb25SZWcgfD0gMHgwMDAwMDAyMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3ZnYSkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub3ZnYSkKIAkJaHctPk1Yb3B0aW9uUmVnICY9IH4weDAwMDAwMTAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vYmlvcykpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2Jpb3MpCiAJCWh3LT5NWG9wdGlvblJlZyAmPSB+MHg0MDAwMDAwMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3BjaXJldHJ5KSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vcGNpcmV0cnkpCiAJCWh3LT5NWG9wdGlvblJlZyB8PSAgMHgyMDAwMDAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7Ci0JREFDMTA2NF9zZXRtY2xrKFBNSU5GTyBEQUMxMDY0X09QVF9NRElWMiB8IERBQzEwNjRfT1BUX0dESVYzIHwgREFDMTA2NF9PUFRfU0NMS19QQ0ksIDEzMzMzMyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKKwlEQUMxMDY0X3NldG1jbGsobWluZm8sIERBQzEwNjRfT1BUX01ESVYyIHwgREFDMTA2NF9PUFRfR0RJVjMgfCBEQUMxMDY0X09QVF9TQ0xLX1BDSSwgMTMzMzMzKTsKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzEwMCkgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OMl9SRUcsICZyZWc1MCk7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvciA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzEwMCkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTjJfUkVHLCAmcmVnNTApOwogCQlyZWc1MCAmPSB+MHgzMDAwOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTjJfUkVHLCByZWc1MCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTjJfUkVHLCByZWc1MCk7CiAKIAkJaHctPk1Yb3B0aW9uUmVnIHw9IDB4MTA4MDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOwotCQltZ2Ffb3V0bChNX0NUTFdUU1QsIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWN0bHd0c3QpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOworCQltZ2Ffb3V0bChNX0NUTFdUU1QsIG1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0KTsKIAkJdWRlbGF5KDEwMCk7CiAJCW1nYV9vdXRiKDB4MUMwNSwgMHgwMCk7CiAJCW1nYV9vdXRiKDB4MUMwNSwgMHg4MCk7CkBAIC04OTMsNjggKzkyMCw2OSBAQAogCQl1ZGVsYXkoMTAwKTsKIAkJcmVnNTAgJj0gfjB4RkY7CiAJCXJlZzUwIHw9ICAweDA3OwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTjJfUkVHLCByZWc1MCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTjJfUkVHLCByZWc1MCk7CiAJCS8qIGl0IHNob3VsZCBoZWxwIHdpdGggRzEwMCAqLwogCQltZ2Ffb3V0YihNX0dSQVBISUNTX0lOREVYLCA2KTsKIAkJbWdhX291dGIoTV9HUkFQSElDU19EQVRBLCAobWdhX2luYihNX0dSQVBISUNTX0RBVEEpICYgMykgfCA0KTsKIAkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIDB4MDMsIDB4ODEpOwogCQltZ2Ffc2V0cihNX0VYVFZHQV9JTkRFWCwgMHgwNCwgMHgwMCk7Ci0JCW1nYV93cml0ZWIoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSksIDB4MDAwMCwgMHhBQSk7Ci0JCW1nYV93cml0ZWIoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSksIDB4MDgwMCwgMHg1NSk7Ci0JCW1nYV93cml0ZWIoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSksIDB4NDAwMCwgMHg1NSk7CisJCW1nYV93cml0ZWIobWluZm8tPnZpZGVvLnZiYXNlLCAweDAwMDAsIDB4QUEpOworCQltZ2Ffd3JpdGViKG1pbmZvLT52aWRlby52YmFzZSwgMHgwODAwLCAweDU1KTsKKwkJbWdhX3dyaXRlYihtaW5mby0+dmlkZW8udmJhc2UsIDB4NDAwMCwgMHg1NSk7CiAjaWYgMAotCQlpZiAobWdhX3JlYWRiKEFDQ0VTU19GQklORk8odmlkZW8udmJhc2UpLCAweDAwMDApICE9IDB4QUEpIHsKKwkJaWYgKG1nYV9yZWFkYihtaW5mby0+dmlkZW8udmJhc2UsIDB4MDAwMCkgIT0gMHhBQSkgewogCQkJaHctPk1Yb3B0aW9uUmVnICY9IH4weDEwMDA7CiAJCX0KICNlbmRpZgogCQlody0+TVhvcHRpb25SZWcgfD0gMHgwMDA3ODAyMDsKLQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuYWNjZWxlcmF0b3IpID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT04yX1JFRywgJnJlZzUwKTsKKwl9IGVsc2UgaWYgKG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvciA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzIwMCkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTjJfUkVHLCAmcmVnNTApOwogCQlyZWc1MCAmPSB+MHgzMDAwOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTjJfUkVHLCByZWc1MCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTjJfUkVHLCByZWc1MCk7CiAKLQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MubWVtdHlwZSkgPT0gLTEpCi0JCQlody0+TVhvcHRpb25SZWcgfD0gQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQgJiAweDFDMDA7CisJCWlmIChtaW5mby0+ZGV2ZmxhZ3MubWVtdHlwZSA9PSAtMSkKKwkJCWh3LT5NWG9wdGlvblJlZyB8PSBtaW5mby0+dmFsdWVzLnJlZy5vcHQgJiAweDFDMDA7CiAJCWVsc2UKLQkJCWh3LT5NWG9wdGlvblJlZyB8PSAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5tZW10eXBlKSAmIDcpIDw8IDEwOwotCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5zZ3JhbSkpCisJCQlody0+TVhvcHRpb25SZWcgfD0gKG1pbmZvLT5kZXZmbGFncy5tZW10eXBlICYgNykgPDwgMTA7CisJCWlmIChtaW5mby0+ZGV2ZmxhZ3Muc2dyYW0pCiAJCQlody0+TVhvcHRpb25SZWcgfD0gMHg0MDAwOwotCQltZ2Ffb3V0bChNX0NUTFdUU1QsIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWN0bHd0c3QpOwotCQltZ2Ffb3V0bChNX01FTVJEQkssIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWVtcmRiayk7CisJCW1nYV9vdXRsKE1fQ1RMV1RTVCwgbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QpOworCQltZ2Ffb3V0bChNX01FTVJEQkssIG1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmspOwogCQl1ZGVsYXkoMjAwKTsKIAkJbWdhX291dGwoTV9NQUNDRVNTLCAweDAwMDAwMDAwKTsKIAkJbWdhX291dGwoTV9NQUNDRVNTLCAweDAwMDA4MDAwKTsKIAkJdWRlbGF5KDEwMCk7Ci0JCW1nYV9vdXR3KE1fTUVNUkRCSywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tZW1yZGJrKTsKKwkJbWdhX291dHcoTV9NRU1SREJLLCBtaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrKTsKIAkJaHctPk1Yb3B0aW9uUmVnIHw9IDB4MDAwNzgwMjA7CiAJfSBlbHNlIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTjJfUkVHLCAmcmVnNTApOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTjJfUkVHLCAmcmVnNTApOwogCQlyZWc1MCAmPSB+MHgwMDAwMDEwMDsKIAkJcmVnNTAgfD0gIDB4MDAwMDAwMDA7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKIAotCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5tZW10eXBlKSA9PSAtMSkKLQkJCWh3LT5NWG9wdGlvblJlZyB8PSBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm9wdCAmIDB4MUMwMDsKKwkJaWYgKG1pbmZvLT5kZXZmbGFncy5tZW10eXBlID09IC0xKQorCQkJaHctPk1Yb3B0aW9uUmVnIHw9IG1pbmZvLT52YWx1ZXMucmVnLm9wdCAmIDB4MUMwMDsKIAkJZWxzZQotCQkJaHctPk1Yb3B0aW9uUmVnIHw9IChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm1lbXR5cGUpICYgNykgPDwgMTA7Ci0JCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnNncmFtKSkKKwkJCWh3LT5NWG9wdGlvblJlZyB8PSAobWluZm8tPmRldmZsYWdzLm1lbXR5cGUgJiA3KSA8PCAxMDsKKwkJaWYgKG1pbmZvLT5kZXZmbGFncy5zZ3JhbSkKIAkJCWh3LT5NWG9wdGlvblJlZyB8PSAweDQwMDA7Ci0JCW1nYV9vdXRsKE1fQ1RMV1RTVCwgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tY3Rsd3RzdCk7Ci0JCW1nYV9vdXRsKE1fTUVNUkRCSywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tZW1yZGJrKTsKKwkJbWdhX291dGwoTV9DVExXVFNULCBtaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdCk7CisJCW1nYV9vdXRsKE1fTUVNUkRCSywgbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiayk7CiAJCXVkZWxheSgyMDApOwogCQltZ2Ffb3V0bChNX01BQ0NFU1MsIDB4MDAwMDAwMDApOwogCQltZ2Ffb3V0bChNX01BQ0NFU1MsIDB4MDAwMDgwMDApOwogCQl1ZGVsYXkoMTAwKTsKLQkJbWdhX291dGwoTV9NRU1SREJLLCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1lbXJkYmspOworCQltZ2Ffb3V0bChNX01FTVJEQkssIG1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmspOwogCQlody0+TVhvcHRpb25SZWcgfD0gMHgwMDA0MDAyMDsKIAl9Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIE1HQUcxMDBfcmVzZXQoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIE1HQUcxMDBfcmVzZXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAl1X2ludDhfdCBiOwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCURCRyhfX2Z1bmNfXykKIApAQCAtOTY0LDU0ICs5OTIsNTUgQEAKIAogCQlmaW5kIDEwMTQvMjIgKElCTS84MjM1MSk7IC8qIGlmIGZvdW5kIGFuZCBicmlkZ2luZyBNYXRyb3gsIGRvIHNvbWUgc3RyYW5nZSBzdHVmZiAqLwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShpYm0sIFBDSV9TRUNPTkRBUllfQlVTLCAmYik7Ci0JCWlmIChiID09IEFDQ0VTU19GQklORk8ocGNpZGV2KS0+YnVzLT5udW1iZXIpIHsKKwkJaWYgKGIgPT0gbWluZm8tPnBjaWRldi0+YnVzLT5udW1iZXIpIHsKIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShpYm0sIFBDSV9DT01NQU5EKzEsIDApOwkvKiBkaXNhYmxlIGJhY2stdG8tYmFjayAmIFNFUlIgKi8KIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShpYm0sIDB4NDEsIDB4RjQpOwkJLyogPz8/ICovCiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaWJtLCBQQ0lfSU9fQkFTRSwgMHhGMCk7CS8qID8/PyAqLwogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGlibSwgUENJX0lPX0xJTUlULCAweDAwKTsJLyogPz8/ICovCiAJCX0KICNlbmRpZgotCQlpZiAoIUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9pbml0KSkgeworCQlpZiAoIW1pbmZvLT5kZXZmbGFncy5ub2luaXQpIHsKIAkJCWlmICh4N0FGNCAmIDgpIHsKIAkJCQlody0+TVhvcHRpb25SZWcgfD0gMHg0MDsJLyogRklYTUUuLi4gKi8KLQkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKIAkJCX0KIAkJCW1nYV9zZXRyKE1fRVhUVkdBX0lOREVYLCAweDA2LCAweDAwKTsKIAkJfQogCX0KLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgeworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgewogCQkvKiBlaXRoZXIgbGVhdmUgTUNMSyBhcyBpcy4uLiBvciB0aGV5IHdlcmUgc2V0IGluIHByZWluaXQgKi8KLQkJaHctPkRBQ2Nsa1szXSA9IGluREFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMTSk7Ci0JCWh3LT5EQUNjbGtbNF0gPSBpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE4pOwotCQlody0+REFDY2xrWzVdID0gaW5EQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExQKTsKKwkJaHctPkRBQ2Nsa1szXSA9IGluREFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMTSk7CisJCWh3LT5EQUNjbGtbNF0gPSBpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTE4pOworCQlody0+REFDY2xrWzVdID0gaW5EQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExQKTsKIAl9IGVsc2UgewotCQlEQUMxMDY0X3NldG1jbGsoUE1JTkZPIERBQzEwNjRfT1BUX1JFU0VSVkVEIHwgREFDMTA2NF9PUFRfTURJVjIgfCBEQUMxMDY0X09QVF9HRElWMSB8IERBQzEwNjRfT1BUX1NDTEtfUExMLCAxMzMzMzMpOworCQlEQUMxMDY0X3NldG1jbGsobWluZm8sIERBQzEwNjRfT1BUX1JFU0VSVkVEIHwgREFDMTA2NF9PUFRfTURJVjIgfCBEQUMxMDY0X09QVF9HRElWMSB8IERBQzEwNjRfT1BUX1NDTEtfUExMLCAxMzMzMzMpOwogCX0KLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5hY2NlbGVyYXRvcikgPT0gRkJfQUNDRUxfTUFUUk9YX01HQUc0MDApIHsKLQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZGZwX3R5cGUpID09IC0xKSB7Ci0JCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmRmcF90eXBlKSA9IGluREFDMTA2NChQTUlORk8gMHgxRik7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvciA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkgeworCQlpZiAobWluZm8tPmRldmZsYWdzLmRmcF90eXBlID09IC0xKSB7CisJCQltaW5mby0+ZGV2ZmxhZ3MuZGZwX3R5cGUgPSBpbkRBQzEwNjQobWluZm8sIDB4MUYpOwogCQl9CiAJfQotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vaW5pdCkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2luaXQpCiAJCXJldHVybjsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgeworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgewogCX0gZWxzZSB7Ci0JCU1HQUcxMDBfc2V0UGl4Q2xvY2soUE1JTkZPIDQsIDI1MTc1KTsKLQkJTUdBRzEwMF9zZXRQaXhDbG9jayhQTUlORk8gNSwgMjgzMjIpOworCQlNR0FHMTAwX3NldFBpeENsb2NrKG1pbmZvLCA0LCAyNTE3NSk7CisJCU1HQUcxMDBfc2V0UGl4Q2xvY2sobWluZm8sIDUsIDI4MzIyKTsKIAkJaWYgKHg3QUY0ICYgMHgxMCkgewotCQkJYiA9IGluREFDMTA2NChQTUlORk8gTTEwNjRfWEdFTklPREFUQSkgJiB+MTsKLQkJCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hHRU5JT0RBVEEsIGIpOwotCQkJYiA9IGluREFDMTA2NChQTUlORk8gTTEwNjRfWEdFTklPQ1RSTCkgfCAxOwotCQkJb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWEdFTklPQ1RSTCwgYik7CisJCQliID0gaW5EQUMxMDY0KG1pbmZvLCBNMTA2NF9YR0VOSU9EQVRBKSAmIH4xOworCQkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWEdFTklPREFUQSwgYik7CisJCQliID0gaW5EQUMxMDY0KG1pbmZvLCBNMTA2NF9YR0VOSU9DVFJMKSB8IDE7CisJCQlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YR0VOSU9DVFJMLCBiKTsKIAkJfQogCX0KIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRQotc3RhdGljIHZvaWQgTUdBMTA2NF9yZXN0b3JlKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBNR0ExMDY0X3Jlc3RvcmUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAlpbnQgaTsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlDUklURkxBR1MKIApAQCAtMTAxOSwyNSArMTA0OCwyNiBAQAogCiAJQ1JJVEJFR0lOCiAKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKIAltZ2Ffb3V0YihNX0lFTiwgMHgwMCk7CiAJbWdhX291dGIoTV9DQUNIRUZMVVNILCAweDAwKTsKIAogCUNSSVRFTkQKIAotCURBQzEwNjRfcmVzdG9yZV8xKFBNSU5GTzIpOwotCW1hdHJveGZiX3ZnYUhXcmVzdG9yZShQTUlORk8yKTsKLQlBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcykgPSAtMTsKKwlEQUMxMDY0X3Jlc3RvcmVfMShtaW5mbyk7CisJbWF0cm94ZmJfdmdhSFdyZXN0b3JlKG1pbmZvKTsKKwltaW5mby0+Y3J0YzEucGFucG9zID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIGksIGh3LT5DUlRDRVhUW2ldKTsKLQlEQUMxMDY0X3Jlc3RvcmVfMihQTUlORk8yKTsKKwlEQUMxMDY0X3Jlc3RvcmVfMihtaW5mbyk7CiB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQl9NQVRST1hfRwotc3RhdGljIHZvaWQgTUdBRzEwMF9yZXN0b3JlKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBNR0FHMTAwX3Jlc3RvcmUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAlpbnQgaTsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlDUklURkxBR1MKIApAQCAtMTA0NSwxOSArMTA3NSwxNyBAQAogCiAJQ1JJVEJFR0lOCiAKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKIAlDUklURU5ECiAKLQlEQUMxMDY0X3Jlc3RvcmVfMShQTUlORk8yKTsKLQltYXRyb3hmYl92Z2FIV3Jlc3RvcmUoUE1JTkZPMik7Ci0jaWZkZWYgQ09ORklHX0ZCX01BVFJPWF8zMk1CCi0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Muc3VwcG9ydDMyTUIpKQorCURBQzEwNjRfcmVzdG9yZV8xKG1pbmZvKTsKKwltYXRyb3hmYl92Z2FIV3Jlc3RvcmUobWluZm8pOworCWlmIChtaW5mby0+ZGV2ZmxhZ3Muc3VwcG9ydDMyTUIpCiAJCW1nYV9zZXRyKE1fRVhUVkdBX0lOREVYLCA4LCBody0+Q1JUQ0VYVFs4XSk7Ci0jZW5kaWYKLQlBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcykgPSAtMTsKKwltaW5mby0+Y3J0YzEucGFucG9zID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIGksIGh3LT5DUlRDRVhUW2ldKTsKLQlEQUMxMDY0X3Jlc3RvcmVfMihQTUlORk8yKTsKKwlEQUMxMDY0X3Jlc3RvcmVfMihtaW5mbyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oCmluZGV4IDdhOThjZTguLmM2ZWQ3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmgKQEAgLTExLDggKzExLDggQEAKIGV4dGVybiBzdHJ1Y3QgbWF0cm94X3N3aXRjaCBtYXRyb3hfRzEwMDsKICNlbmRpZgogI2lmZGVmIE5FRURfREFDMTA2NAotdm9pZCBEQUMxMDY0X2dsb2JhbF9pbml0KFdQTUlORk8yKTsKLXZvaWQgREFDMTA2NF9nbG9iYWxfcmVzdG9yZShXUE1JTkZPMik7Cit2b2lkIERBQzEwNjRfZ2xvYmFsX2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7Cit2b2lkIERBQzEwNjRfZ2xvYmFsX3Jlc3RvcmUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7CiAjZW5kaWYKIAogI2RlZmluZSBNMTA2NF9JTkRFWAkweDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5jCmluZGV4IDRlODI1MTEuLjgzNWFhYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5jCkBAIC0yNzksMjcgKzI3OSwzMSBAQAogICBUVlAzMDI2X1hDT0xLRVlDVFJMX1pPT00xLAogICAweDAwLCAweDAwLCBUVlAzMDI2X1hDVVJDVFJMX0RJUyB9OwogCi1zdGF0aWMgaW50IFRpMzAyNl9jYWxjY2xvY2soQ1BNSU5GTyB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGZtYXgsIGludCogaW4sIGludCogZmVlZCwgaW50KiBwb3N0KSB7CitzdGF0aWMgaW50IFRpMzAyNl9jYWxjY2xvY2soY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgICB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGZtYXgsIGludCAqaW4sCisJCQkgICAgaW50ICpmZWVkLCBpbnQgKnBvc3QpCit7CiAJdW5zaWduZWQgaW50IGZ2Y287CiAJdW5zaWduZWQgaW50IGxpbiwgbGZlZWQsIGxwb3N0OwogCiAJREJHKF9fZnVuY19fKQogCi0JZnZjbyA9IFBMTF9jYWxjY2xvY2soUE1JTkZPIGZyZXEsIGZtYXgsICZsaW4sICZsZmVlZCwgJmxwb3N0KTsKKwlmdmNvID0gUExMX2NhbGNjbG9jayhtaW5mbywgZnJlcSwgZm1heCwgJmxpbiwgJmxmZWVkLCAmbHBvc3QpOwogCWZ2Y28gPj49ICgqcG9zdCA9IGxwb3N0KTsKIAkqaW4gPSA2NCAtIGxpbjsKIAkqZmVlZCA9IDY0IC0gbGZlZWQ7CiAJcmV0dXJuIGZ2Y287CiB9CiAKLXN0YXRpYyBpbnQgVGkzMDI2X3NldHBjbGsoV1BNSU5GTyBpbnQgY2xrKSB7CitzdGF0aWMgaW50IFRpMzAyNl9zZXRwY2xrKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCBjbGspCit7CiAJdW5zaWduZWQgaW50IGZfcGxsOwogCXVuc2lnbmVkIGludCBwaXhmZWVkLCBwaXhpbiwgcGl4cG9zdDsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlmX3BsbCA9IFRpMzAyNl9jYWxjY2xvY2soUE1JTkZPIGNsaywgQUNDRVNTX0ZCSU5GTyhtYXhfcGl4ZWxfY2xvY2spLCAmcGl4aW4sICZwaXhmZWVkLCAmcGl4cG9zdCk7CisJZl9wbGwgPSBUaTMwMjZfY2FsY2Nsb2NrKG1pbmZvLCBjbGssIG1pbmZvLT5tYXhfcGl4ZWxfY2xvY2ssICZwaXhpbiwgJnBpeGZlZWQsICZwaXhwb3N0KTsKIAogCWh3LT5EQUNjbGtbMF0gPSBwaXhpbiB8IDB4QzA7CiAJaHctPkRBQ2Nsa1sxXSA9IHBpeGZlZWQ7CkBAIC0zMDksOSArMzEzLDkgQEAKIAkJdW5zaWduZWQgaW50IGxvb3BmZWVkLCBsb29waW4sIGxvb3Bwb3N0LCBsb29wZGl2LCB6OwogCQl1bnNpZ25lZCBpbnQgQnBwOwogCi0JCUJwcCA9IEFDQ0VTU19GQklORk8oY3Vyci5maW5hbF9icHBTaGlmdCk7CisJCUJwcCA9IG1pbmZvLT5jdXJyLmZpbmFsX2JwcFNoaWZ0OwogCi0JCWlmIChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYml0c19wZXJfcGl4ZWwgPT0gMjQpIHsKKwkJaWYgKG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMjQpIHsKIAkJCWxvb3BmZWVkID0gMzsJCS8qIHNldCBsbSB0byBhbnkgcG9zc2libGUgdmFsdWUgKi8KIAkJCWxvb3BpbiA9IDMgKiAzMiAvIEJwcDsKIAkJfSBlbHNlIHsKQEAgLTMzMCwxOCArMzM0LDE4IEBACiAJCQlsb29wcG9zdCA9IDM7CiAJCQlsb29wZGl2ID0gei8xNjsKIAkJfQotCQlpZiAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsID09IDI0KSB7CisJCWlmIChtaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsID09IDI0KSB7CiAJCQlody0+REFDY2xrWzNdID0gKCg2NSAtIGxvb3BpbikgJiAweDNGKSB8IDB4QzA7CiAJCQlody0+REFDY2xrWzRdID0gKDY1IC0gbG9vcGZlZWQpIHwgMHg4MDsKLQkJCWlmIChBQ0NFU1NfRkJJTkZPKGFjY2VsLnJhbWRhY19yZXYpID4gMHgyMCkgewotCQkJCWlmIChpc0ludGVybGVhdmUoTUlORk8pKQorCQkJaWYgKG1pbmZvLT5hY2NlbC5yYW1kYWNfcmV2ID4gMHgyMCkgeworCQkJCWlmIChpc0ludGVybGVhdmUobWluZm8pKQogCQkJCQlody0+REFDcmVnW1BPUzMwMjZfWExBVENIQ1RSTF0gPSBUVlAzMDI2Ql9YTEFUQ0hDVFJMXzhfMzsKIAkJCQllbHNlIHsKIAkJCQkJaHctPkRBQ2Nsa1s0XSAmPSB+MHhDMDsKIAkJCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hMQVRDSENUUkxdID0gVFZQMzAyNkJfWExBVENIQ1RSTF80XzM7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlpZiAoaXNJbnRlcmxlYXZlKE1JTkZPKSkKKwkJCQlpZiAoaXNJbnRlcmxlYXZlKG1pbmZvKSkKIAkJCQkJOwkvKiBkZWZhdWx0Li4uICovCiAJCQkJZWxzZSB7CiAJCQkJCWh3LT5EQUNjbGtbNF0gXj0gMHhDMDsJLyogY2hhbmdlIGZyb20gMHg4MCB0byAweDQwICovCkBAIC0zNDksNyArMzUzLDcgQEAKIAkJCQl9CiAJCQl9CiAJCQlody0+REFDY2xrWzVdID0gbG9vcHBvc3QgfCAweEY4OwotCQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MubWdhXzI0YnBwX2ZpeCkpCisJCQlpZiAobWluZm8tPmRldmZsYWdzLm1nYV8yNGJwcF9maXgpCiAJCQkJaHctPkRBQ2Nsa1s1XSBePSAweDQwOwogCQl9IGVsc2UgewogCQkJaHctPkRBQ2Nsa1szXSA9ICgoNjUgLSBsb29waW4pICYgMHgzRikgfCAweEMwOwpAQCAtMzYxLDE0ICszNjUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBUaTMwMjZfaW5pdChXUE1JTkZPIHN0cnVjdCBteV90aW1taW5nKiBtKSB7Ci0JdV9pbnQ4X3QgbXV4Y3RybCA9IGlzSW50ZXJsZWF2ZShNSU5GTykgPyBUVlAzMDI2X1hNVVhDVFJMX01FTU9SWV82NEJJVCA6IFRWUDMwMjZfWE1VWENUUkxfTUVNT1JZXzMyQklUOwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworc3RhdGljIGludCBUaTMwMjZfaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBzdHJ1Y3QgbXlfdGltbWluZyAqbSkKK3sKKwl1X2ludDhfdCBtdXhjdHJsID0gaXNJbnRlcmxlYXZlKG1pbmZvKSA/IFRWUDMwMjZfWE1VWENUUkxfTUVNT1JZXzY0QklUIDogVFZQMzAyNl9YTVVYQ1RSTF9NRU1PUllfMzJCSVQ7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCiAJbWVtY3B5KGh3LT5EQUNyZWcsIE1HQURBQ2JwcDMyLCBzaXplb2YoaHctPkRBQ3JlZykpOwotCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJc3dpdGNoIChtaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsKSB7CiAJCWNhc2UgNDoJaHctPkRBQ3JlZ1tQT1MzMDI2X1hMQVRDSENUUkxdID0gVFZQMzAyNl9YTEFUQ0hDVFJMXzE2XzE7CS8qIG9yIF84XzEsIHRoZXkgYXJlIHNhbWUgKi8KIAkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YVFJVRUNPTE9SQ1RSTF0gPSBUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX1BTRVVET0NPTE9SOwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hNVVhDVFJMXSA9IG11eGN0cmwgfCBUVlAzMDI2X1hNVVhDVFJMX1BJWEVMXzRCSVQ7CkBAIC0zODMsNyArMzg4LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIDE2OgogCQkJLyogWExBVENIQ1RSTCBzaG91bGQgYmUgXzRfMSAvIF8yXzEuLi4gV2h5IGlzIG5vdD8gKF8yXzEgaXMgdXNlZCBldmVyeXRpbWUpICovCi0JCQlody0+REFDcmVnW1BPUzMwMjZfWFRSVUVDT0xPUkNUUkxdID0gKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmVlbi5sZW5ndGggPT0gNSk/IChUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX0RJUkVDVENPTE9SIHwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9PUkdCXzE1NTUgKSA6IChUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX0RJUkVDVENPTE9SIHwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9SR0JfNTY1KTsKKwkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YVFJVRUNPTE9SQ1RSTF0gPSAobWluZm8tPmZiY29uLnZhci5ncmVlbi5sZW5ndGggPT0gNSkgPyAoVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9ESVJFQ1RDT0xPUiB8IFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfT1JHQl8xNTU1KSA6IChUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX0RJUkVDVENPTE9SIHwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9SR0JfNTY1KTsKIAkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YTVVYQ1RSTF0gPSBtdXhjdHJsIHwgVFZQMzAyNl9YTVVYQ1RSTF9QSVhFTF8xNkJJVDsKIAkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YQ0xLQ1RSTF0gPSBUVlAzMDI2X1hDTEtDVFJMX1NSQ19QTEwgfCBUVlAzMDI2X1hDTEtDVFJMX0RJVjI7CiAJCQlicmVhazsKQEAgLTQwMCw3ICs0MDUsNyBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIDE7CS8qIFRPRE86IGZhaWxlZCAqLwogCX0KLQlpZiAobWF0cm94ZmJfdmdhSFdpbml0KFBNSU5GTyBtKSkgcmV0dXJuIDE7CisJaWYgKG1hdHJveGZiX3ZnYUhXaW5pdChtaW5mbywgbSkpIHJldHVybiAxOwogCiAJLyogc2V0IFNZTkMgKi8KIAlody0+TWlzY091dFJlZyA9IDB4Q0I7CkBAIC00MTIsOSArNDE3LDkgQEAKIAkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hHRU5DVFJMXSB8PSBUVlAzMDI2X1hHRU5DVFJMX1NZTkNfT05fR1JFRU47CiAKIAkvKiBzZXQgREVMQVkgKi8KLQlpZiAoQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pIDwgMHg0MDAwMDApCisJaWYgKG1pbmZvLT52aWRlby5sZW4gPCAweDQwMDAwMCkKIAkJaHctPkNSVENFWFRbM10gfD0gMHgwODsKLQllbHNlIGlmIChBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbikgPiAweDQwMDAwMCkKKwllbHNlIGlmIChtaW5mby0+dmlkZW8ubGVuID4gMHg0MDAwMDApCiAJCWh3LT5DUlRDRVhUWzNdIHw9IDB4MTA7CiAKIAkvKiBzZXQgSFdDVVJTT1IgKi8KQEAgLTQyNiwxNCArNDMxLDE1IEBACiAKIAkvKiBzZXQgaW50ZXJsZWF2aW5nICovCiAJaHctPk1Yb3B0aW9uUmVnICY9IH4weDAwMDAxMDAwOwotCWlmIChpc0ludGVybGVhdmUoTUlORk8pKSBody0+TVhvcHRpb25SZWcgfD0gMHgwMDAwMTAwMDsKKwlpZiAoaXNJbnRlcmxlYXZlKG1pbmZvKSkgaHctPk1Yb3B0aW9uUmVnIHw9IDB4MDAwMDEwMDA7CiAKIAkvKiBzZXQgREFDICovCi0JVGkzMDI2X3NldHBjbGsoUE1JTkZPIG0tPnBpeGNsb2NrKTsKKwlUaTMwMjZfc2V0cGNsayhtaW5mbywgbS0+cGl4Y2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0aTMwMjZfc2V0TUNMSyhXUE1JTkZPIGludCBmb3V0KXsKK3N0YXRpYyB2b2lkIHRpMzAyNl9zZXRNQ0xLKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCBmb3V0KQorewogCXVuc2lnbmVkIGludCBmX3BsbDsKIAl1bnNpZ25lZCBpbnQgcGNsa19tLCBwY2xrX24sIHBjbGtfcDsKIAl1bnNpZ25lZCBpbnQgbWNsa19tLCBtY2xrX24sIG1jbGtfcDsKQEAgLTQ0MiwyOSArNDQ4LDI5IEBACiAKIAlEQkcoX19mdW5jX18pCiAKLQlmX3BsbCA9IFRpMzAyNl9jYWxjY2xvY2soUE1JTkZPIGZvdXQsIEFDQ0VTU19GQklORk8obWF4X3BpeGVsX2Nsb2NrKSwgJm1jbGtfbiwgJm1jbGtfbSwgJm1jbGtfcCk7CisJZl9wbGwgPSBUaTMwMjZfY2FsY2Nsb2NrKG1pbmZvLCBmb3V0LCBtaW5mby0+bWF4X3BpeGVsX2Nsb2NrLCAmbWNsa19uLCAmbWNsa19tLCAmbWNsa19wKTsKIAogCS8qIHNhdmUgcGNsayAqLwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHhGQyk7Ci0JcGNsa19uID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHhGRCk7Ci0JcGNsa19tID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHhGRSk7Ci0JcGNsa19wID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGQyk7CisJcGNsa19uID0gaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGRCk7CisJcGNsa19tID0gaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGRSk7CisJcGNsa19wID0gaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEpOwogCiAJLyogc3RvcCBwY2xrICovCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEZFKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIDB4MDApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGRSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCAweDAwKTsKIAogCS8qIHNldCBwY2xrIHRvIG5ldyBtY2xrICovCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEZDKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIG1jbGtfbiB8IDB4QzApOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgbWNsa19tKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIG1jbGtfcCB8IDB4QjApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGQyk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCBtY2xrX24gfCAweEMwKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIG1jbGtfbSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCBtY2xrX3AgfCAweEIwKTsKIAogCS8qIHdhaXQgZm9yIFBMTCB0byBsb2NrICovCiAJZm9yICh0bW91dCA9IDUwMDAwMDsgdG1vdXQ7IHRtb3V0LS0pIHsKLQkJaWYgKGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBKSAmIDB4NDApCisJCWlmIChpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSkgJiAweDQwKQogCQkJYnJlYWs7CiAJCXVkZWxheSgxMCk7CiAJfTsKQEAgLTQ3MiwyMyArNDc4LDIzIEBACiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmI6IFRlbXBvcmFyeSBwaXhlbCBQTEwgbm90IGxvY2tlZCBhZnRlciA1IHNlY3NcbiIpOwogCiAJLyogb3V0cHV0IHBjbGsgb24gbWNsayBwaW4gKi8KLQltY2xrX2N0bCA9IGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNRU1QTExDVFJMKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTENUUkwsIG1jbGtfY3RsICYgMHhFNyk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNRU1QTExDVFJMLCAobWNsa19jdGwgJiAweEU3KSB8IFRWUDMwMjZfWE1FTVBMTENUUkxfU1RST0JFTUtDNCk7CisJbWNsa19jdGwgPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YTUVNUExMQ1RSTCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExDVFJMLCBtY2xrX2N0bCAmIDB4RTcpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTUVNUExMQ1RSTCwgKG1jbGtfY3RsICYgMHhFNykgfCBUVlAzMDI2X1hNRU1QTExDVFJMX1NUUk9CRU1LQzQpOwogCiAJLyogc3RvcCBNQ0xLICovCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEZCKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTERBVEEsIDB4MDApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGQik7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExEQVRBLCAweDAwKTsKIAogCS8qIHNldCBtY2xrIHRvIG5ldyBmcmVxICovCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEYzKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTERBVEEsIG1jbGtfbiB8IDB4QzApOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTUVNUExMREFUQSwgbWNsa19tKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTERBVEEsIG1jbGtfcCB8IDB4QjApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGMyk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExEQVRBLCBtY2xrX24gfCAweEMwKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTERBVEEsIG1jbGtfbSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExEQVRBLCBtY2xrX3AgfCAweEIwKTsKIAogCS8qIHdhaXQgZm9yIFBMTCB0byBsb2NrICovCiAJZm9yICh0bW91dCA9IDUwMDAwMDsgdG1vdXQ7IHRtb3V0LS0pIHsKLQkJaWYgKGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNRU1QTExEQVRBKSAmIDB4NDApCisJCWlmIChpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YTUVNUExMREFUQSkgJiAweDQwKQogCQkJYnJlYWs7CiAJCXVkZWxheSgxMCk7CiAJfQpAQCAtNDk2LDcgKzUwMiw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmI6IE1lbW9yeSBQTEwgbm90IGxvY2tlZCBhZnRlciA1IHNlY3NcbiIpOwogCiAJZl9wbGwgPSBmX3BsbCAqIDMzMyAvICgxMDAwMCA8PCBtY2xrX3ApOwotCWlmIChpc01pbGxlbml1bUlJKE1JTkZPKSkgeworCWlmIChpc01pbGxlbml1bUlJKG1pbmZvKSkgewogCQlyZmhjbnQgPSAoZl9wbGwgLSAxMjgpIC8gMjU2OwogCQlpZiAocmZoY250ID4gMTUpCiAJCQlyZmhjbnQgPSAxNTsKQEAgLTUwNSwyNiArNTExLDI2IEBACiAJCWlmIChyZmhjbnQgPiAxNSkKIAkJCXJmaGNudCA9IDA7CiAJfQotCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnID0gKEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnICYgfjB4MDAwRjAwMDApIHwgKHJmaGNudCA8PCAxNik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyk7CisJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnID0gKG1pbmZvLT5ody5NWG9wdGlvblJlZyAmIH4weDAwMEYwMDAwKSB8IChyZmhjbnQgPDwgMTYpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG1pbmZvLT5ody5NWG9wdGlvblJlZyk7CiAKIAkvKiBvdXRwdXQgTUNMSyB0byBNQ0xLIHBpbiAqLwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTUVNUExMQ1RSTCwgKG1jbGtfY3RsICYgMHhFNykgfCBUVlAzMDI2X1hNRU1QTExDVFJMX01DTEtfTUNMS1BMTCk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNRU1QTExDVFJMLCAobWNsa19jdGwgICAgICAgKSB8IFRWUDMwMjZfWE1FTVBMTENUUkxfTUNMS19NQ0xLUExMIHwgVFZQMzAyNl9YTUVNUExMQ1RSTF9TVFJPQkVNS0M0KTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTENUUkwsIChtY2xrX2N0bCAmIDB4RTcpIHwgVFZQMzAyNl9YTUVNUExMQ1RSTF9NQ0xLX01DTEtQTEwpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTUVNUExMQ1RSTCwgKG1jbGtfY3RsICAgICAgICkgfCBUVlAzMDI2X1hNRU1QTExDVFJMX01DTEtfTUNMS1BMTCB8IFRWUDMwMjZfWE1FTVBMTENUUkxfU1RST0JFTUtDNCk7CiAKIAkvKiBzdG9wIFBDTEsgKi8KLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4RkUpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgMHgwMCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEZFKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIDB4MDApOwogCiAJLyogcmVzdG9yZSBwY2xrICovCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEZDKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIHBjbGtfbik7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBLCBwY2xrX20pOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgcGNsa19wKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4RkMpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSwgcGNsa19uKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIHBjbGtfbSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCBwY2xrX3ApOwogCiAJLyogd2FpdCBmb3IgUExMIHRvIGxvY2sgKi8KIAlmb3IgKHRtb3V0ID0gNTAwMDAwOyB0bW91dDsgdG1vdXQtLSkgewotCQlpZiAoaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpICYgMHg0MCkKKwkJaWYgKGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBKSAmIDB4NDApCiAJCQlicmVhazsKIAkJdWRlbGF5KDEwKTsKIAl9CkBAIC01MzIsMjYgKzUzOCwyNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiOiBQaXhlbCBQTEwgbm90IGxvY2tlZCBhZnRlciA1IHNlY3NcbiIpOwogfQogCi1zdGF0aWMgdm9pZCB0aTMwMjZfcmFtZGFjX2luaXQoV1BNSU5GTzIpIHsKLQorc3RhdGljIHZvaWQgdGkzMDI2X3JhbWRhY19pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJREJHKF9fZnVuY19fKQogCi0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwudmNvX2ZyZXFfbWluKSA9IDExMDAwMDsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5yZWZfZnJlcSkJID0gMTE0NTQ1OwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmZlZWRfZGl2X21pbikgPSAyOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmZlZWRfZGl2X21heCkgPSAyNDsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5pbl9kaXZfbWluKQkgPSAyOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmluX2Rpdl9tYXgpCSA9IDYzOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLnBvc3Rfc2hpZnRfbWF4KSA9IDM7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9pbml0KSkKKwltaW5mby0+ZmVhdHVyZXMucGxsLnZjb19mcmVxX21pbiA9IDExMDAwMDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCSA9IDExNDU0NTsKKwltaW5mby0+ZmVhdHVyZXMucGxsLmZlZWRfZGl2X21pbiA9IDI7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9tYXggPSAyNDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLmluX2Rpdl9taW4JID0gMjsKKwltaW5mby0+ZmVhdHVyZXMucGxsLmluX2Rpdl9tYXgJID0gNjM7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5wb3N0X3NoaWZ0X21heCA9IDM7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2luaXQpCiAJCXJldHVybjsKLQl0aTMwMjZfc2V0TUNMSyhQTUlORk8gNjAwMDApOworCXRpMzAyNl9zZXRNQ0xLKG1pbmZvLCA2MDAwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIFRpMzAyNl9yZXN0b3JlKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBUaTMwMjZfcmVzdG9yZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgcHJvZ2RhY1s2XTsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAJQ1JJVEZMQUdTCiAKIAlEQkcoX19mdW5jX18pCkBAIC01NjUsMzEgKzU3MiwzMSBAQAogCiAJQ1JJVEJFR0lOCiAKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKIAogCUNSSVRFTkQKIAotCW1hdHJveGZiX3ZnYUhXcmVzdG9yZShQTUlORk8yKTsKKwltYXRyb3hmYl92Z2FIV3Jlc3RvcmUobWluZm8pOwogCiAJQ1JJVEJFR0lOCiAKLQlBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcykgPSAtMTsKKwltaW5mby0+Y3J0YzEucGFucG9zID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIGksIGh3LT5DUlRDRVhUW2ldKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyMTsgaSsrKSB7Ci0JCW91dFRpMzAyNihQTUlORk8gREFDc2VxW2ldLCBody0+REFDcmVnW2ldKTsKKwkJb3V0VGkzMDI2KG1pbmZvLCBEQUNzZXFbaV0sIGh3LT5EQUNyZWdbaV0pOwogCX0KIAotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHgwMCk7Ci0JcHJvZ2RhY1swXSA9IGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBKTsKLQlwcm9nZGFjWzNdID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWExPT1BQTExEQVRBKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4MTUpOwotCXByb2dkYWNbMV0gPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSk7Ci0JcHJvZ2RhY1s0XSA9IGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hMT09QUExMREFUQSk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweDJBKTsKLQlwcm9nZGFjWzJdID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpOwotCXByb2dkYWNbNV0gPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YTE9PUFBMTERBVEEpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHgwMCk7CisJcHJvZ2RhY1swXSA9IGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBKTsKKwlwcm9nZGFjWzNdID0gaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWExPT1BQTExEQVRBKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4MTUpOworCXByb2dkYWNbMV0gPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSk7CisJcHJvZ2RhY1s0XSA9IGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hMT09QUExMREFUQSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweDJBKTsKKwlwcm9nZGFjWzJdID0gaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEpOworCXByb2dkYWNbNV0gPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YTE9PUFBMTERBVEEpOwogCiAJQ1JJVEVORAogCWlmIChtZW1jbXAoaHctPkRBQ2NsaywgcHJvZ2RhYywgNikpIHsKQEAgLTU5OCwyMCArNjA1LDIwIEBACiAJCS8qIE1heWJlIGV2ZW4gd2Ugc2hvdWxkIGNhbGwgc2NoZWR1bGUoKSA/ICovCiAKIAkJQ1JJVEJFR0lOCi0JCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YQ0xLQ1RSTCwgaHctPkRBQ3JlZ1tQT1MzMDI2X1hDTEtDVFJMXSk7Ci0JCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHgyQSk7Ci0JCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTE9PUFBMTERBVEEsIDApOwotCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIDApOworCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWENMS0NUUkwsIGh3LT5EQUNyZWdbUE9TMzAyNl9YQ0xLQ1RSTF0pOworCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4MkEpOworCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWExPT1BQTExEQVRBLCAwKTsKKwkJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCAwKTsKIAotCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4MDApOworCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4MDApOwogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQkJb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBLCBody0+REFDY2xrW2ldKTsKKwkJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSwgaHctPkRBQ2Nsa1tpXSk7CiAJCS8qIHdhaXQgZm9yIFBMTCBvbmx5IGlmIFBMTCBjbG9jayByZXF1ZXN0ZWQgKGFsd2F5cyBmb3IgUG93ZXJNb2RlLCBuZXZlciBmb3IgVkdBKSAqLwogCQlpZiAoaHctPk1pc2NPdXRSZWcgJiAweDA4KSB7CiAJCQlpbnQgdG1vdXQ7Ci0JCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4M0YpOworCQkJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweDNGKTsKIAkJCWZvciAodG1vdXQgPSA1MDAwMDA7IHRtb3V0OyAtLXRtb3V0KSB7Ci0JCQkJaWYgKGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBKSAmIDB4NDApCisJCQkJaWYgKGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBKSAmIDB4NDApCiAJCQkJCWJyZWFrOwogCQkJCXVkZWxheSgxMCk7CiAJCQl9CkBAIC02MjQsMTggKzYzMSwxOCBAQAogCQkJCWRwcmludGsoS0VSTl9JTkZPICJQaXhlbFBMTDogJWRcbiIsIDUwMDAwMC10bW91dCk7CiAJCQlDUklUQkVHSU4KIAkJfQotCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTENUUkwsIGh3LT5EQUNyZWdbUE9TMzAyNl9YTUVNUExMQ1RSTF0pOwotCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4MDApOworCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTENUUkwsIGh3LT5EQUNyZWdbUE9TMzAyNl9YTUVNUExMQ1RSTF0pOworCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4MDApOwogCQlmb3IgKGkgPSAzOyBpIDwgNjsgaSsrKQotCQkJb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hMT09QUExMREFUQSwgaHctPkRBQ2Nsa1tpXSk7CisJCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWExPT1BQTExEQVRBLCBody0+REFDY2xrW2ldKTsKIAkJQ1JJVEVORAogCQlpZiAoKGh3LT5NaXNjT3V0UmVnICYgMHgwOCkgJiYgKChody0+REFDY2xrWzVdICYgMHg4MCkgPT0gMHg4MCkpIHsKIAkJCWludCB0bW91dDsKIAogCQkJQ1JJVEJFR0lOCi0JCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4M0YpOworCQkJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweDNGKTsKIAkJCWZvciAodG1vdXQgPSA1MDAwMDA7IHRtb3V0OyAtLXRtb3V0KSB7Ci0JCQkJaWYgKGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hMT09QUExMREFUQSkgJiAweDQwKQorCQkJCWlmIChpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YTE9PUFBMTERBVEEpICYgMHg0MCkKIAkJCQkJYnJlYWs7CiAJCQkJdWRlbGF5KDEwKTsKIAkJCX0KQEAgLTY2MCw2NSArNjY3LDY2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgVGkzMDI2X3Jlc2V0KFdQTUlORk8yKSB7Ci0KK3N0YXRpYyB2b2lkIFRpMzAyNl9yZXNldChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCURCRyhfX2Z1bmNfXykKIAotCXRpMzAyNl9yYW1kYWNfaW5pdChQTUlORk8yKTsKKwl0aTMwMjZfcmFtZGFjX2luaXQobWluZm8pOwogfQogCiBzdGF0aWMgc3RydWN0IG1hdHJveF9hbHRvdXQgdGkzMDI2X291dHB1dCA9IHsKIAkubmFtZQkgPSAiUHJpbWFyeSBvdXRwdXQiLAogfTsKIAotc3RhdGljIGludCBUaTMwMjZfcHJlaW5pdChXUE1JTkZPMikgeworc3RhdGljIGludCBUaTMwMjZfcHJlaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCXN0YXRpYyBjb25zdCBpbnQgdnhyZXNfbWlsbDJbXSA9IHsgNTEyLCAgICAgICAgNjQwLCA3NjgsICA4MDAsICA4MzIsICA5NjAsCiAJCQkJCSAgMTAyNCwgMTE1MiwgMTI4MCwgICAgICAxNjAwLCAxNjY0LCAxOTIwLAogCQkJCQkgIDIwNDgsIDB9OwogCXN0YXRpYyBjb25zdCBpbnQgdnhyZXNfbWlsbDFbXSA9IHsgICAgICAgICAgICAgNjQwLCA3NjgsICA4MDAsICAgICAgICA5NjAsCiAJCQkJCSAgMTAyNCwgMTE1MiwgMTI4MCwgICAgICAxNjAwLCAgICAgICAxOTIwLAogCQkJCQkgIDIwNDgsIDB9OwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCURCRyhfX2Z1bmNfXykKIAotCUFDQ0VTU19GQklORk8obWlsbGVuaXVtKSA9IDE7Ci0JQUNDRVNTX0ZCSU5GTyhtaWxsZW5pdW1JSSkgPSAoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9NQVRST1hfTUlMKTsKLQlBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY2ZiNCkgPSAxOwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS50ZXh0KSA9IDE7IC8qIGlzTWlsbGVuaXVtSUkoTUlORk8pOyAqLwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS52eHJlcykgPSBpc01pbGxlbml1bUlJKE1JTkZPKT92eHJlc19taWxsMjp2eHJlc19taWxsMTsKKwltaW5mby0+bWlsbGVuaXVtID0gMTsKKwltaW5mby0+bWlsbGVuaXVtSUkgPSAobWluZm8tPnBjaWRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfTUFUUk9YX01JTCk7CisJbWluZm8tPmNhcGFibGUuY2ZiNCA9IDE7CisJbWluZm8tPmNhcGFibGUudGV4dCA9IDE7IC8qIGlzTWlsbGVuaXVtSUkobWluZm8pOyAqLworCW1pbmZvLT5jYXBhYmxlLnZ4cmVzID0gaXNNaWxsZW5pdW1JSShtaW5mbykgPyB2eHJlc19taWxsMiA6IHZ4cmVzX21pbGwxOwogCi0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5kYXRhID0gTUlORk87Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5vdXRwdXQgPSAmdGkzMDI2X291dHB1dDsKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLnNyYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuZGVmYXVsdF9zcmM7Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwltaW5mby0+b3V0cHV0c1swXS5kYXRhID0gbWluZm87CisJbWluZm8tPm91dHB1dHNbMF0ub3V0cHV0ID0gJnRpMzAyNl9vdXRwdXQ7CisJbWluZm8tPm91dHB1dHNbMF0uc3JjID0gbWluZm8tPm91dHB1dHNbMF0uZGVmYXVsdF9zcmM7CisJbWluZm8tPm91dHB1dHNbMF0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub2luaXQpKQorCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm9pbml0KQogCQlyZXR1cm4gMDsKIAkvKiBwcmVzZXJ2ZSBWR0EgSS9PLCBCSU9TIGFuZCBQUEMgKi8KIAlody0+TVhvcHRpb25SZWcgJj0gMHhDMDAwMDEwMDsKIAlody0+TVhvcHRpb25SZWcgfD0gMHgwMDJDMDAwMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3ZnYSkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub3ZnYSkKIAkJaHctPk1Yb3B0aW9uUmVnICY9IH4weDAwMDAwMTAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vYmlvcykpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2Jpb3MpCiAJCWh3LT5NWG9wdGlvblJlZyAmPSB+MHg0MDAwMDAwMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3BjaXJldHJ5KSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vcGNpcmV0cnkpCiAJCWh3LT5NWG9wdGlvblJlZyB8PSAgMHgyMDAwMDAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKIAotCUFDQ0VTU19GQklORk8oYWNjZWwucmFtZGFjX3JldikgPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YU0lMSUNPTlJFVik7CisJbWluZm8tPmFjY2VsLnJhbWRhY19yZXYgPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YU0lMSUNPTlJFVik7CiAKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWENMS0NUUkwsIFRWUDMwMjZfWENMS0NUUkxfU1JDX0NMSzBWR0EgfCBUVlAzMDI2X1hDTEtDVFJMX0NMS1NUT1BQRUQpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTCwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9QU0VVRE9DT0xPUik7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNVVhDVFJMLCBUVlAzMDI2X1hNVVhDVFJMX1ZHQSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hDTEtDVFJMLCBUVlAzMDI2X1hDTEtDVFJMX1NSQ19DTEswVkdBIHwgVFZQMzAyNl9YQ0xLQ1RSTF9DTEtTVE9QUEVEKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFRSVUVDT0xPUkNUUkwsIFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfUFNFVURPQ09MT1IpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTVVYQ1RSTCwgVFZQMzAyNl9YTVVYQ1RSTF9WR0EpOwogCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweDJBKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWExPT1BQTExEQVRBLCAweDAwKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIDB4MDApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHgyQSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hMT09QUExMREFUQSwgMHgwMCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCAweDAwKTsKIAogCW1nYV9vdXRiKE1fTUlTQ19SRUcsIDB4NjcpOwogCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNRU1QTExDVFJMLCBUVlAzMDI2X1hNRU1QTExDVFJMX1NUUk9CRU1LQzQgfCBUVlAzMDI2X1hNRU1QTExDVFJMX01DTEtfTUNMS1BMTCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExDVFJMLCBUVlAzMDI2X1hNRU1QTExDVFJMX1NUUk9CRU1LQzQgfCBUVlAzMDI2X1hNRU1QTExDVFJMX01DTEtfTUNMS1BMTCk7CiAKIAltZ2Ffb3V0bChNX1JFU0VULCAxKTsKIAl1ZGVsYXkoMjUwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5jCmluZGV4IDljM2FlZWUuLjgzMzVhNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYWNjZWwuYwpAQCAtODEsNyArODEsNyBAQAogI2luY2x1ZGUgIm1hdHJveGZiX1RpMzAyNi5oIgogI2luY2x1ZGUgIm1hdHJveGZiX21pc2MuaCIKIAotI2RlZmluZSBjdXJyX3lkc3RvcmcoeCkJQUNDRVNTX0ZCSU5GTzIoeCwgY3Vyci55ZHN0b3JnLnBpeGVscykKKyNkZWZpbmUgY3Vycl95ZHN0b3JnKHgpCSgoeCktPmN1cnIueWRzdG9yZy5waXhlbHMpCiAKICNkZWZpbmUgbWdhX3lkc3RsZW4oeSxsKSBtZ2Ffb3V0bChNX1lEU1RMRU4gfCBNX0VYRUMsICgoeSkgPDwgMTYpIHwgKGwpKQogCkBAIC0xMDcsNyArMTA3LDggQEAKIHN0YXRpYyB2b2lkIG1hdHJveGZiX2NmYjRfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8qIGluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCogcmVjdCk7CiBzdGF0aWMgdm9pZCBtYXRyb3hmYl9jZmI0X2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvKiBpbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEqIGFyZWEpOwogCi12b2lkIG1hdHJveF9jZmJYX2luaXQoV1BNSU5GTzIpIHsKK3ZvaWQgbWF0cm94X2NmYlhfaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCXVfaW50MzJfdCBtYWNjZXNzOwogCXVfaW50MzJfdCBtcGl0Y2g7CiAJdV9pbnQzMl90IG1vcG1vZGU7CkBAIC0xMTUsNTkgKzExNiw1OSBAQAogCiAJREJHKF9fZnVuY19fKQogCi0JbXBpdGNoID0gQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnhyZXNfdmlydHVhbDsKKwltcGl0Y2ggPSBtaW5mby0+ZmJjb24udmFyLnhyZXNfdmlydHVhbDsKIAotCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhOwotCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0OwotCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQ7Ci0JQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfY3Vyc29yID0gTlVMTDsKKwltaW5mby0+ZmJvcHMuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWE7CisJbWluZm8tPmZib3BzLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0OworCW1pbmZvLT5mYm9wcy5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0OworCW1pbmZvLT5mYm9wcy5mYl9jdXJzb3IgPSBOVUxMOwogCi0JYWNjZWwgPSAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmFjY2VsX2ZsYWdzICYgRkJfQUNDRUxGX1RFWFQpID09IEZCX0FDQ0VMRl9URVhUOworCWFjY2VsID0gKG1pbmZvLT5mYmNvbi52YXIuYWNjZWxfZmxhZ3MgJiBGQl9BQ0NFTEZfVEVYVCkgPT0gRkJfQUNDRUxGX1RFWFQ7CiAKLQlzd2l0Y2ggKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5iaXRzX3Blcl9waXhlbCkgeworCXN3aXRjaCAobWluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCkgewogCQljYXNlIDQ6CQltYWNjZXNzID0gMHgwMDAwMDAwMDsJLyogYWNjZWxlcmF0ZSBhcyA4YnBwIHZpZGVvICovCiAJCQkJbXBpdGNoID0gKG1waXRjaCA+PiAxKSB8IDB4ODAwMDsgLyogZGlzYWJsZSBsaW5lYXJpemF0aW9uICovCiAJCQkJbW9wbW9kZSA9IE1fT1BNT0RFXzRCUFA7Ci0JCQkJbWF0cm94X2NmYjRfcGFsKEFDQ0VTU19GQklORk8oY21hcCkpOworCQkJCW1hdHJveF9jZmI0X3BhbChtaW5mby0+Y21hcCk7CiAJCQkJaWYgKGFjY2VsICYmICEobXBpdGNoICYgMSkpIHsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfY29weWFyZWEgPSBtYXRyb3hmYl9jZmI0X2NvcHlhcmVhOwotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9maWxscmVjdCA9IG1hdHJveGZiX2NmYjRfZmlsbHJlY3Q7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NmYjRfY29weWFyZWE7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9maWxscmVjdCA9IG1hdHJveGZiX2NmYjRfZmlsbHJlY3Q7CiAJCQkJfQogCQkJCWJyZWFrOwogCQljYXNlIDg6CQltYWNjZXNzID0gMHgwMDAwMDAwMDsKIAkJCQltb3Btb2RlID0gTV9PUE1PREVfOEJQUDsKLQkJCQltYXRyb3hfY2ZiOF9wYWwoQUNDRVNTX0ZCSU5GTyhjbWFwKSk7CisJCQkJbWF0cm94X2NmYjhfcGFsKG1pbmZvLT5jbWFwKTsKIAkJCQlpZiAoYWNjZWwpIHsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfY29weWFyZWEgPSBtYXRyb3hmYl9jb3B5YXJlYTsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfZmlsbHJlY3QgPSBtYXRyb3hmYl9maWxscmVjdDsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfaW1hZ2VibGl0ID0gbWF0cm94ZmJfaW1hZ2VibGl0OworCQkJCQltaW5mby0+ZmJvcHMuZmJfY29weWFyZWEgPSBtYXRyb3hmYl9jb3B5YXJlYTsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2ZpbGxyZWN0ID0gbWF0cm94ZmJfZmlsbHJlY3Q7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9pbWFnZWJsaXQgPSBtYXRyb3hmYl9pbWFnZWJsaXQ7CiAJCQkJfQogCQkJCWJyZWFrOwotCQljYXNlIDE2OglpZiAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyZWVuLmxlbmd0aCA9PSA1KQorCQljYXNlIDE2OglpZiAobWluZm8tPmZiY29uLnZhci5ncmVlbi5sZW5ndGggPT0gNSkKIAkJCQkJbWFjY2VzcyA9IDB4QzAwMDAwMDE7CiAJCQkJZWxzZQogCQkJCQltYWNjZXNzID0gMHg0MDAwMDAwMTsKIAkJCQltb3Btb2RlID0gTV9PUE1PREVfMTZCUFA7CiAJCQkJaWYgKGFjY2VsKSB7Ci0JCQkJCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2NvcHlhcmVhID0gbWF0cm94ZmJfY29weWFyZWE7Ci0JCQkJCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2ZpbGxyZWN0ID0gbWF0cm94ZmJfZmlsbHJlY3Q7Ci0JCQkJCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2ltYWdlYmxpdCA9IG1hdHJveGZiX2ltYWdlYmxpdDsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2NvcHlhcmVhID0gbWF0cm94ZmJfY29weWFyZWE7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9maWxscmVjdCA9IG1hdHJveGZiX2ZpbGxyZWN0OworCQkJCQltaW5mby0+ZmJvcHMuZmJfaW1hZ2VibGl0ID0gbWF0cm94ZmJfaW1hZ2VibGl0OwogCQkJCX0KIAkJCQlicmVhazsKIAkJY2FzZSAyNDoJbWFjY2VzcyA9IDB4MDAwMDAwMDM7CiAJCQkJbW9wbW9kZSA9IE1fT1BNT0RFXzI0QlBQOwogCQkJCWlmIChhY2NlbCkgewotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NvcHlhcmVhOwotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9maWxscmVjdCA9IG1hdHJveGZiX2ZpbGxyZWN0OwotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9pbWFnZWJsaXQgPSBtYXRyb3hmYl9pbWFnZWJsaXQ7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NvcHlhcmVhOworCQkJCQltaW5mby0+ZmJvcHMuZmJfZmlsbHJlY3QgPSBtYXRyb3hmYl9maWxscmVjdDsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2ltYWdlYmxpdCA9IG1hdHJveGZiX2ltYWdlYmxpdDsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCWNhc2UgMzI6CW1hY2Nlc3MgPSAweDAwMDAwMDAyOwogCQkJCW1vcG1vZGUgPSBNX09QTU9ERV8zMkJQUDsKIAkJCQlpZiAoYWNjZWwpIHsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfY29weWFyZWEgPSBtYXRyb3hmYl9jb3B5YXJlYTsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfZmlsbHJlY3QgPSBtYXRyb3hmYl9maWxscmVjdDsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfaW1hZ2VibGl0ID0gbWF0cm94ZmJfaW1hZ2VibGl0OworCQkJCQltaW5mby0+ZmJvcHMuZmJfY29weWFyZWEgPSBtYXRyb3hmYl9jb3B5YXJlYTsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2ZpbGxyZWN0ID0gbWF0cm94ZmJfZmlsbHJlY3Q7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9pbWFnZWJsaXQgPSBtYXRyb3hmYl9pbWFnZWJsaXQ7CiAJCQkJfQogCQkJCWJyZWFrOwogCQlkZWZhdWx0OgltYWNjZXNzID0gMHgwMDAwMDAwMDsKQEAgLTE3NiwxMCArMTc3LDEwIEBACiAJfQogCW1nYV9maWZvKDgpOwogCW1nYV9vdXRsKE1fUElUQ0gsIG1waXRjaCk7Ci0JbWdhX291dGwoTV9ZRFNUT1JHLCBjdXJyX3lkc3RvcmcoTUlORk8pKTsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnBsbnd0KSkKKwltZ2Ffb3V0bChNX1lEU1RPUkcsIGN1cnJfeWRzdG9yZyhtaW5mbykpOworCWlmIChtaW5mby0+Y2FwYWJsZS5wbG53dCkKIAkJbWdhX291dGwoTV9QTE5XVCwgLTEpOwotCWlmIChBQ0NFU1NfRkJJTkZPKGNhcGFibGUuc3Jjb3JnKSkgeworCWlmIChtaW5mby0+Y2FwYWJsZS5zcmNvcmcpIHsKIAkJbWdhX291dGwoTV9TUkNPUkcsIDApOwogCQltZ2Ffb3V0bChNX0RTVE9SRywgMCk7CiAJfQpAQCAtMTg4LDE0ICsxODksMTYgQEAKIAltZ2Ffb3V0bChNX1lUT1AsIDApOwogCW1nYV9vdXRsKE1fWUJPVCwgMHgwMUZGRkZGRik7CiAJbWdhX291dGwoTV9NQUNDRVNTLCBtYWNjZXNzKTsKLQlBQ0NFU1NfRkJJTkZPKGFjY2VsLm1fZHdnX3JlY3QpID0gTV9EV0dfVFJBUCB8IE1fRFdHX1NPTElEIHwgTV9EV0dfQVJaRVJPIHwgTV9EV0dfU0dOWkVSTyB8IE1fRFdHX1NISUZUWkVSTzsKLQlpZiAoaXNNaWxsZW5pdW1JSShNSU5GTykpIEFDQ0VTU19GQklORk8oYWNjZWwubV9kd2dfcmVjdCkgfD0gTV9EV0dfVFJBTlNDOwotCUFDQ0VTU19GQklORk8oYWNjZWwubV9vcG1vZGUpID0gbW9wbW9kZTsKKwltaW5mby0+YWNjZWwubV9kd2dfcmVjdCA9IE1fRFdHX1RSQVAgfCBNX0RXR19TT0xJRCB8IE1fRFdHX0FSWkVSTyB8IE1fRFdHX1NHTlpFUk8gfCBNX0RXR19TSElGVFpFUk87CisJaWYgKGlzTWlsbGVuaXVtSUkobWluZm8pKSBtaW5mby0+YWNjZWwubV9kd2dfcmVjdCB8PSBNX0RXR19UUkFOU0M7CisJbWluZm8tPmFjY2VsLm1fb3Btb2RlID0gbW9wbW9kZTsKIH0KIAogRVhQT1JUX1NZTUJPTChtYXRyb3hfY2ZiWF9pbml0KTsKIAotc3RhdGljIHZvaWQgbWF0cm94X2FjY2VsX2Jtb3ZlKFdQTUlORk8gaW50IHZ4cmVzLCBpbnQgc3ksIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkgeworc3RhdGljIHZvaWQgbWF0cm94X2FjY2VsX2Jtb3ZlKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCB2eHJlcywgaW50IHN5LAorCQkJICAgICAgIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKIAlpbnQgc3RhcnQsIGVuZDsKIAlDUklURkxBR1MKIApAQCAtMjA5LDcgKzIxMiw3IEBACiAJCQkgTV9EV0dfQkZDT0wgfCBNX0RXR19SRVBMQUNFKTsKIAkJbWdhX291dGwoTV9BUjUsIHZ4cmVzKTsKIAkJd2lkdGgtLTsKLQkJc3RhcnQgPSBzeSp2eHJlcytzeCtjdXJyX3lkc3RvcmcoTUlORk8pOworCQlzdGFydCA9IHN5KnZ4cmVzK3N4K2N1cnJfeWRzdG9yZyhtaW5mbyk7CiAJCWVuZCA9IHN0YXJ0K3dpZHRoOwogCX0gZWxzZSB7CiAJCW1nYV9maWZvKDMpOwpAQCAtMjE3LDcgKzIyMCw3IEBACiAJCW1nYV9vdXRsKE1fU0dOLCA1KTsKIAkJbWdhX291dGwoTV9BUjUsIC12eHJlcyk7CiAJCXdpZHRoLS07Ci0JCWVuZCA9IChzeStoZWlnaHQtMSkqdnhyZXMrc3grY3Vycl95ZHN0b3JnKE1JTkZPKTsKKwkJZW5kID0gKHN5K2hlaWdodC0xKSp2eHJlcytzeCtjdXJyX3lkc3RvcmcobWluZm8pOwogCQlzdGFydCA9IGVuZCt3aWR0aDsKIAkJZHkgKz0gaGVpZ2h0LTE7CiAJfQpAQCAtMjMxLDcgKzIzNCwxMCBAQAogCUNSSVRFTkQKIH0KIAotc3RhdGljIHZvaWQgbWF0cm94X2FjY2VsX2Jtb3ZlX2xpbihXUE1JTkZPIGludCB2eHJlcywgaW50IHN5LCBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpIHsKK3N0YXRpYyB2b2lkIG1hdHJveF9hY2NlbF9ibW92ZV9saW4oc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHZ4cmVzLAorCQkJCSAgIGludCBzeSwgaW50IHN4LCBpbnQgZHksIGludCBkeCwgaW50IGhlaWdodCwKKwkJCQkgICBpbnQgd2lkdGgpCit7CiAJaW50IHN0YXJ0LCBlbmQ7CiAJQ1JJVEZMQUdTCiAKQEAgLTI0NSw3ICsyNTEsNyBAQAogCQkJTV9EV0dfQkZDT0wgfCBNX0RXR19SRVBMQUNFKTsKIAkJbWdhX291dGwoTV9BUjUsIHZ4cmVzKTsKIAkJd2lkdGgtLTsKLQkJc3RhcnQgPSBzeSp2eHJlcytzeCtjdXJyX3lkc3RvcmcoTUlORk8pOworCQlzdGFydCA9IHN5KnZ4cmVzK3N4K2N1cnJfeWRzdG9yZyhtaW5mbyk7CiAJCWVuZCA9IHN0YXJ0K3dpZHRoOwogCX0gZWxzZSB7CiAJCW1nYV9maWZvKDMpOwpAQCAtMjUzLDcgKzI1OSw3IEBACiAJCW1nYV9vdXRsKE1fU0dOLCA1KTsKIAkJbWdhX291dGwoTV9BUjUsIC12eHJlcyk7CiAJCXdpZHRoLS07Ci0JCWVuZCA9IChzeStoZWlnaHQtMSkqdnhyZXMrc3grY3Vycl95ZHN0b3JnKE1JTkZPKTsKKwkJZW5kID0gKHN5K2hlaWdodC0xKSp2eHJlcytzeCtjdXJyX3lkc3RvcmcobWluZm8pOwogCQlzdGFydCA9IGVuZCt3aWR0aDsKIAkJZHkgKz0gaGVpZ2h0LTE7CiAJfQpAQCAtMjY5LDIyICsyNzUsMjMgQEAKIH0KIAogc3RhdGljIHZvaWQgbWF0cm94ZmJfY2ZiNF9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyogaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhKiBhcmVhKSB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJaWYgKChhcmVhLT5zeCB8IGFyZWEtPmR4IHwgYXJlYS0+d2lkdGgpICYgMSkKIAkJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOwogCWVsc2UKLQkJbWF0cm94X2FjY2VsX2Jtb3ZlX2xpbihQTUlORk8gQUNDRVNTX0ZCSU5GTyhmYmNvbi52YXIueHJlc192aXJ0dWFsKSA+PiAxLCBhcmVhLT5zeSwgYXJlYS0+c3ggPj4gMSwgYXJlYS0+ZHksIGFyZWEtPmR4ID4+IDEsIGFyZWEtPmhlaWdodCwgYXJlYS0+d2lkdGggPj4gMSk7CisJCW1hdHJveF9hY2NlbF9ibW92ZV9saW4obWluZm8sIG1pbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsID4+IDEsIGFyZWEtPnN5LCBhcmVhLT5zeCA+PiAxLCBhcmVhLT5keSwgYXJlYS0+ZHggPj4gMSwgYXJlYS0+aGVpZ2h0LCBhcmVhLT53aWR0aCA+PiAxKTsKIH0KIAogc3RhdGljIHZvaWQgbWF0cm94ZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8qIGluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSogYXJlYSkgewotCU1JTkZPX0ZST01fSU5GTyhpbmZvKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gaW5mbzJtaW5mbyhpbmZvKTsKIAotCW1hdHJveF9hY2NlbF9ibW92ZShQTUlORk8gQUNDRVNTX0ZCSU5GTyhmYmNvbi52YXIueHJlc192aXJ0dWFsKSwgYXJlYS0+c3ksIGFyZWEtPnN4LCBhcmVhLT5keSwgYXJlYS0+ZHgsIGFyZWEtPmhlaWdodCwgYXJlYS0+d2lkdGgpOworCW1hdHJveF9hY2NlbF9ibW92ZShtaW5mbywgbWluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwsIGFyZWEtPnN5LCBhcmVhLT5zeCwgYXJlYS0+ZHksIGFyZWEtPmR4LCBhcmVhLT5oZWlnaHQsIGFyZWEtPndpZHRoKTsKIH0KIAotc3RhdGljIHZvaWQgbWF0cm94ZmJfYWNjZWxfY2xlYXIoV1BNSU5GTyB1X2ludDMyX3QgY29sb3IsIGludCBzeSwgaW50IHN4LCBpbnQgaGVpZ2h0LAotCQlpbnQgd2lkdGgpIHsKK3N0YXRpYyB2b2lkIG1hdHJveGZiX2FjY2VsX2NsZWFyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVfaW50MzJfdCBjb2xvciwKKwkJCQkgaW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKIAlDUklURkxBR1MKIAogCURCRyhfX2Z1bmNfXykKQEAgLTI5Miw3ICsyOTksNyBAQAogCUNSSVRCRUdJTgogCiAJbWdhX2ZpZm8oNSk7Ci0JbWdhX291dGwoTV9EV0dDVEwsIEFDQ0VTU19GQklORk8oYWNjZWwubV9kd2dfcmVjdCkgfCBNX0RXR19SRVBMQUNFKTsKKwltZ2Ffb3V0bChNX0RXR0NUTCwgbWluZm8tPmFjY2VsLm1fZHdnX3JlY3QgfCBNX0RXR19SRVBMQUNFKTsKIAltZ2Ffb3V0bChNX0ZDT0wsIGNvbG9yKTsKIAltZ2Ffb3V0bChNX0ZYQk5EUlksICgoc3ggKyB3aWR0aCkgPDwgMTYpIHwgc3gpOwogCW1nYV95ZHN0bGVuKHN5LCBoZWlnaHQpOwpAQCAtMzAyLDE2ICszMDksMTggQEAKIH0KIAogc3RhdGljIHZvaWQgbWF0cm94ZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8qIGluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCogcmVjdCkgewotCU1JTkZPX0ZST01fSU5GTyhpbmZvKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gaW5mbzJtaW5mbyhpbmZvKTsKIAogCXN3aXRjaCAocmVjdC0+cm9wKSB7CiAJCWNhc2UgUk9QX0NPUFk6Ci0JCQltYXRyb3hmYl9hY2NlbF9jbGVhcihQTUlORk8gKCh1X2ludDMyX3QqKWluZm8tPnBzZXVkb19wYWxldHRlKVtyZWN0LT5jb2xvcl0sIHJlY3QtPmR5LCByZWN0LT5keCwgcmVjdC0+aGVpZ2h0LCByZWN0LT53aWR0aCk7CisJCQltYXRyb3hmYl9hY2NlbF9jbGVhcihtaW5mbywgKCh1X2ludDMyX3QgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVjdC0+Y29sb3JdLCByZWN0LT5keSwgcmVjdC0+ZHgsIHJlY3QtPmhlaWdodCwgcmVjdC0+d2lkdGgpOwogCQkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBtYXRyb3hmYl9jZmI0X2NsZWFyKFdQTUlORk8gdV9pbnQzMl90IGJneCwgaW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkgeworc3RhdGljIHZvaWQgbWF0cm94ZmJfY2ZiNF9jbGVhcihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1X2ludDMyX3QgYmd4LAorCQkJCWludCBzeSwgaW50IHN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CiAJaW50IHdoYXR0b2RvOwogCUNSSVRGTEFHUwogCkBAIC0zMzMsMTYgKzM0MiwxNiBAQAogCXN4ID4+PSAxOwogCWlmICh3aWR0aCkgewogCQltZ2FfZmlmbyg1KTsKLQkJbWdhX291dGwoTV9EV0dDVEwsIEFDQ0VTU19GQklORk8oYWNjZWwubV9kd2dfcmVjdCkgfCBNX0RXR19SRVBMQUNFMik7CisJCW1nYV9vdXRsKE1fRFdHQ1RMLCBtaW5mby0+YWNjZWwubV9kd2dfcmVjdCB8IE1fRFdHX1JFUExBQ0UyKTsKIAkJbWdhX291dGwoTV9GQ09MLCBiZ3gpOwogCQltZ2Ffb3V0bChNX0ZYQk5EUlksICgoc3ggKyB3aWR0aCkgPDwgMTYpIHwgc3gpOwotCQltZ2Ffb3V0bChNX1lEU1QsIHN5ICogQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnhyZXNfdmlydHVhbCA+PiA2KTsKKwkJbWdhX291dGwoTV9ZRFNULCBzeSAqIG1pbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsID4+IDYpOwogCQltZ2Ffb3V0bChNX0xFTiB8IE1fRVhFQywgaGVpZ2h0KTsKIAkJV2FpdFRpbGxJZGxlKCk7CiAJfQogCWlmICh3aGF0dG9kbykgewotCQl1X2ludDMyX3Qgc3RlcCA9IEFDQ0VTU19GQklORk8oZmJjb24pLnZhci54cmVzX3ZpcnR1YWwgPj4gMTsKLQkJdmFkZHJfdCB2YmFzZSA9IEFDQ0VTU19GQklORk8odmlkZW8udmJhc2UpOworCQl1X2ludDMyX3Qgc3RlcCA9IG1pbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsID4+IDE7CisJCXZhZGRyX3QgdmJhc2UgPSBtaW5mby0+dmlkZW8udmJhc2U7CiAJCWlmICh3aGF0dG9kbyAmIDEpIHsKIAkJCXVuc2lnbmVkIGludCB1YWRkciA9IHN5ICogc3RlcCArIHN4IC0gMTsKIAkJCXVfaW50MzJfdCBsb29wOwpAQCAtMzY3LDE3ICszNzYsMTkgQEAKIH0KIAogc3RhdGljIHZvaWQgbWF0cm94ZmJfY2ZiNF9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyogaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0KiByZWN0KSB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJc3dpdGNoIChyZWN0LT5yb3ApIHsKIAkJY2FzZSBST1BfQ09QWToKLQkJCW1hdHJveGZiX2NmYjRfY2xlYXIoUE1JTkZPICgodV9pbnQzMl90KilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVjdC0+Y29sb3JdLCByZWN0LT5keSwgcmVjdC0+ZHgsIHJlY3QtPmhlaWdodCwgcmVjdC0+d2lkdGgpOworCQkJbWF0cm94ZmJfY2ZiNF9jbGVhcihtaW5mbywgKCh1X2ludDMyX3QgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVjdC0+Y29sb3JdLCByZWN0LT5keSwgcmVjdC0+ZHgsIHJlY3QtPmhlaWdodCwgcmVjdC0+d2lkdGgpOwogCQkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBtYXRyb3hmYl8xYnBwX2ltYWdlYmxpdChXUE1JTkZPIHVfaW50MzJfdCBmZ3gsIHVfaW50MzJfdCBiZ3gsCi0JCWNvbnN0IHVfaW50OF90KiBjaGFyZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgeXksIGludCB4eCkgeworc3RhdGljIHZvaWQgbWF0cm94ZmJfMWJwcF9pbWFnZWJsaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdV9pbnQzMl90IGZneCwKKwkJCQkgICAgdV9pbnQzMl90IGJneCwgY29uc3QgdV9pbnQ4X3QgKmNoYXJkYXRhLAorCQkJCSAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB5eSwgaW50IHh4KQorewogCXVfaW50MzJfdCBzdGVwOwogCXVfaW50MzJfdCB5ZHN0bGVuOwogCXVfaW50MzJfdCB4bGVuOwpAQCAtNDEyLDcgKzQyMyw3IEBACiAJbWdhX291dGwoTV9GQ09MLCBmZ3gpOwogCW1nYV9vdXRsKE1fQkNPTCwgYmd4KTsKIAlmeGJuZHJ5ID0gKCh4eCArIHdpZHRoIC0gMSkgPDwgMTYpIHwgeHg7Ci0JbW1pbyA9IEFDQ0VTU19GQklORk8obW1pby52YmFzZSk7CisJbW1pbyA9IG1pbmZvLT5tbWlvLnZiYXNlOwogCiAJbWdhX2ZpZm8oNik7CiAJbWdhX3dyaXRlbChtbWlvLCBNX0ZYQk5EUlksIGZ4Ym5kcnkpOwpAQCAtNDY3LDcgKzQ3OCw3IEBACiAKIAogc3RhdGljIHZvaWQgbWF0cm94ZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvKiBpbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UqIGltYWdlKSB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJREJHX0hFQVZZKF9fZnVuY19fKTsKIApAQCAtNDc2LDcgKzQ4Nyw3IEBACiAKIAkJZmd4ID0gKCh1X2ludDMyX3QqKWluZm8tPnBzZXVkb19wYWxldHRlKVtpbWFnZS0+ZmdfY29sb3JdOwogCQliZ3ggPSAoKHVfaW50MzJfdCopaW5mby0+cHNldWRvX3BhbGV0dGUpW2ltYWdlLT5iZ19jb2xvcl07Ci0JCW1hdHJveGZiXzFicHBfaW1hZ2VibGl0KFBNSU5GTyBmZ3gsIGJneCwgaW1hZ2UtPmRhdGEsIGltYWdlLT53aWR0aCwgaW1hZ2UtPmhlaWdodCwgaW1hZ2UtPmR5LCBpbWFnZS0+ZHgpOworCQltYXRyb3hmYl8xYnBwX2ltYWdlYmxpdChtaW5mbywgZmd4LCBiZ3gsIGltYWdlLT5kYXRhLCBpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQsIGltYWdlLT5keSwgaW1hZ2UtPmR4KTsKIAl9IGVsc2UgewogCQkvKiBEYW5nZXIhIGltYWdlLT5kZXB0aCBpcyB1c2VsZXNzOiBsb2dvIHBhaW50aW5nIGNvZGUgYWx3YXlzCiAJCSAgIHBhc3NlcyBmcmFtZWJ1ZmZlciBjb2xvciBkZXB0aCBoZXJlLCBhbHRob3VnaCBsb2dvIGRhdGEgYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5oIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYWNjZWwuaAppbmRleCBmNDBjMzE0Li4xZTQxOGU2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYWNjZWwuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5oCkBAIC0zLDYgKzMsNiBAQAogCiAjaW5jbHVkZSAibWF0cm94ZmJfYmFzZS5oIgogCi12b2lkIG1hdHJveF9jZmJYX2luaXQoV1BNSU5GTzIpOwordm9pZCBtYXRyb3hfY2ZiWF9pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYwppbmRleCAwYzEwNDliLi43MDY0ZmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCkBAIC0xNTQsMjEgKzE1NCwyMiBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIHZvaWQgdXBkYXRlX2NydGMyKFdQTUlORk8gdW5zaWduZWQgaW50IHBvcykgewotCXN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvKiBpbmZvID0gQUNDRVNTX0ZCSU5GTyhjcnRjMi5pbmZvKTsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jcnRjMihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBpbnQgcG9zKQoreworCXN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvICppbmZvID0gbWluZm8tPmNydGMyLmluZm87CiAKIAkvKiBNYWtlIHN1cmUgdGhhdCBkaXNwbGF5cyBhcmUgY29tcGF0aWJsZSAqLwotCWlmIChpbmZvICYmIChpbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwgPT0gQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsKQotCQkgJiYgKGluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwgPT0gQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnhyZXNfdmlydHVhbCkKLQkJICYmIChpbmZvLT5mYmNvbi52YXIuZ3JlZW4ubGVuZ3RoID09IEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmVlbi5sZW5ndGgpCisJaWYgKGluZm8gJiYgKGluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCA9PSBtaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsKQorCQkgJiYgKGluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwgPT0gbWluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwpCisJCSAmJiAoaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCA9PSBtaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCkKIAkJICkgewotCQlzd2l0Y2ggKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5iaXRzX3Blcl9waXhlbCkgeworCQlzd2l0Y2ggKG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwpIHsKIAkJCWNhc2UgMTY6CiAJCQljYXNlIDMyOgogCQkJCXBvcyA9IHBvcyAqIDg7CiAJCQkJaWYgKGluZm8tPmludGVybGFjZWQpIHsKIAkJCQkJbWdhX291dGwoMHgzQzJDLCBwb3MpOwotCQkJCQltZ2Ffb3V0bCgweDNDMjgsIHBvcyArIEFDQ0VTU19GQklORk8oZmJjb24pLnZhci54cmVzX3ZpcnR1YWwgKiBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYml0c19wZXJfcGl4ZWwgLyA4KTsKKwkJCQkJbWdhX291dGwoMHgzQzI4LCBwb3MgKyBtaW5mby0+ZmJjb24udmFyLnhyZXNfdmlydHVhbCAqIG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwgLyA4KTsKIAkJCQl9IGVsc2UgewogCQkJCQltZ2Ffb3V0bCgweDNDMjgsIHBvcyk7CiAJCQkJfQpAQCAtMTc3LDE3ICsxNzgsMTggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG1hdHJveGZiX2NydGMxX3BhbnBvcyhXUE1JTkZPMikgewotCWlmIChBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcykgPj0gMCkgeworc3RhdGljIHZvaWQgbWF0cm94ZmJfY3J0YzFfcGFucG9zKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CisJaWYgKG1pbmZvLT5jcnRjMS5wYW5wb3MgPj0gMCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgcGFucG9zOwogCiAJCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwotCQlwYW5wb3MgPSBBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcyk7CisJCXBhbnBvcyA9IG1pbmZvLT5jcnRjMS5wYW5wb3M7CiAJCWlmIChwYW5wb3MgPj0gMCkgewogCQkJdW5zaWduZWQgaW50IGV4dHZnYV9yZWc7CiAKLQkJCUFDQ0VTU19GQklORk8oY3J0YzEucGFucG9zKSA9IC0xOyAvKiBObyB1cGRhdGUgcGVuZGluZyBhbnltb3JlICovCisJCQltaW5mby0+Y3J0YzEucGFucG9zID0gLTE7IC8qIE5vIHVwZGF0ZSBwZW5kaW5nIGFueW1vcmUgKi8KIAkJCWV4dHZnYV9yZWcgPSBtZ2FfaW5iKE1fRVhUVkdBX0lOREVYKTsKIAkJCW1nYV9zZXRyKE1fRVhUVkdBX0lOREVYLCAweDAwLCBwYW5wb3MpOwogCQkJaWYgKGV4dHZnYV9yZWcgIT0gMHgwMCkgewpAQCAtMjAyLDM5ICsyMDQsMzkgQEAKIHsKIAl1X2ludDMyX3Qgc3RhdHVzOwogCWludCBoYW5kbGVkID0gMDsKLQotCU1JTkZPX0ZST00oZGV2X2lkKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gZGV2X2lkOwogCiAJc3RhdHVzID0gbWdhX2lubChNX1NUQVRVUyk7CiAKIAlpZiAoc3RhdHVzICYgMHgyMCkgewogCQltZ2Ffb3V0bChNX0lDTEVBUiwgMHgyMCk7Ci0JCUFDQ0VTU19GQklORk8oY3J0YzEudnN5bmMuY250KSsrOwotCQltYXRyb3hmYl9jcnRjMV9wYW5wb3MoUE1JTkZPMik7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmQUNDRVNTX0ZCSU5GTyhjcnRjMS52c3luYy53YWl0KSk7CisJCW1pbmZvLT5jcnRjMS52c3luYy5jbnQrKzsKKwkJbWF0cm94ZmJfY3J0YzFfcGFucG9zKG1pbmZvKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtaW5mby0+Y3J0YzEudnN5bmMud2FpdCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIAlpZiAoc3RhdHVzICYgMHgyMDApIHsKIAkJbWdhX291dGwoTV9JQ0xFQVIsIDB4MjAwKTsKLQkJQUNDRVNTX0ZCSU5GTyhjcnRjMi52c3luYy5jbnQpKys7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmQUNDRVNTX0ZCSU5GTyhjcnRjMi52c3luYy53YWl0KSk7CisJCW1pbmZvLT5jcnRjMi52c3luYy5jbnQrKzsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtaW5mby0+Y3J0YzIudnN5bmMud2FpdCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAotaW50IG1hdHJveGZiX2VuYWJsZV9pcnEoV1BNSU5GTyBpbnQgcmVlbmFibGUpIHsKK2ludCBtYXRyb3hmYl9lbmFibGVfaXJxKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCByZWVuYWJsZSkKK3sKIAl1X2ludDMyX3QgYm07CiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5hY2NlbGVyYXRvcikgPT0gRkJfQUNDRUxfTUFUUk9YX01HQUc0MDApCisJaWYgKG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvciA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkKIAkJYm0gPSAweDIyMDsKIAllbHNlCiAJCWJtID0gMHgwMjA7CiAKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJkFDQ0VTU19GQklORk8oaXJxX2ZsYWdzKSkpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKEFDQ0VTU19GQklORk8ocGNpZGV2KS0+aXJxLCBtYXRyb3hfaXJxLAotCQkJCUlSUUZfU0hBUkVELCAibWF0cm94ZmIiLCBNSU5GTykpIHsKLQkJCWNsZWFyX2JpdCgwLCAmQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJm1pbmZvLT5pcnFfZmxhZ3MpKSB7CisJCWlmIChyZXF1ZXN0X2lycShtaW5mby0+cGNpZGV2LT5pcnEsIG1hdHJveF9pcnEsCisJCQkJSVJRRl9TSEFSRUQsICJtYXRyb3hmYiIsIG1pbmZvKSkgeworCQkJY2xlYXJfYml0KDAsICZtaW5mby0+aXJxX2ZsYWdzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qIENsZWFyIGFueSBwZW5kaW5nIGZpZWxkIGludGVycnVwdHMgKi8KQEAgLTI1MiwzNyArMjU0LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1hdHJveGZiX2Rpc2FibGVfaXJxKFdQTUlORk8yKSB7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpKSkgeworc3RhdGljIHZvaWQgbWF0cm94ZmJfZGlzYWJsZV9pcnEoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsICZtaW5mby0+aXJxX2ZsYWdzKSkgewogCQkvKiBGbHVzaCBwZW5kaW5nIHBhbi1hdC12YmwgcmVxdWVzdC4uLiAqLwotCQltYXRyb3hmYl9jcnRjMV9wYW5wb3MoUE1JTkZPMik7Ci0JCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkKKwkJbWF0cm94ZmJfY3J0YzFfcGFucG9zKG1pbmZvKTsKKwkJaWYgKG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvciA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkKIAkJCW1nYV9vdXRsKE1fSUVOLCBtZ2FfaW5sKE1fSUVOKSAmIH4weDIyMCk7CiAJCWVsc2UKIAkJCW1nYV9vdXRsKE1fSUVOLCBtZ2FfaW5sKE1fSUVOKSAmIH4weDIwKTsKLQkJZnJlZV9pcnEoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLT5pcnEsIE1JTkZPKTsKKwkJZnJlZV9pcnEobWluZm8tPnBjaWRldi0+aXJxLCBtaW5mbyk7CiAJfQogfQogCi1pbnQgbWF0cm94ZmJfd2FpdF9mb3Jfc3luYyhXUE1JTkZPIHVfaW50MzJfdCBjcnRjKSB7CitpbnQgbWF0cm94ZmJfd2FpdF9mb3Jfc3luYyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1X2ludDMyX3QgY3J0YykKK3sKIAlzdHJ1Y3QgbWF0cm94X3ZzeW5jICp2czsKIAl1bnNpZ25lZCBpbnQgY250OwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKGNydGMpIHsKIAkJY2FzZSAwOgotCQkJdnMgPSAmQUNDRVNTX0ZCSU5GTyhjcnRjMS52c3luYyk7CisJCQl2cyA9ICZtaW5mby0+Y3J0YzEudnN5bmM7CiAJCQlicmVhazsKIAkJY2FzZSAxOgotCQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuYWNjZWxlcmF0b3IpICE9IEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwKSB7CisJCQlpZiAobWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yICE9IEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwKSB7CiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQl9Ci0JCQl2cyA9ICZBQ0NFU1NfRkJJTkZPKGNydGMyLnZzeW5jKTsKKwkJCXZzID0gJm1pbmZvLT5jcnRjMi52c3luYzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXJldCA9IG1hdHJveGZiX2VuYWJsZV9pcnEoUE1JTkZPIDApOworCXJldCA9IG1hdHJveGZiX2VuYWJsZV9pcnEobWluZm8sIDApOwogCWlmIChyZXQpIHsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0yOTMsNyArMjk3LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHJldCA9PSAwKSB7Ci0JCW1hdHJveGZiX2VuYWJsZV9pcnEoUE1JTkZPIDEpOworCQltYXRyb3hmYl9lbmFibGVfaXJxKG1pbmZvLCAxKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCXJldHVybiAwOwpAQCAtMzAxLDEyICszMDUsMTIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB2b2lkIG1hdHJveF9wYW5fdmFyKFdQTUlORk8gc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpIHsKK3N0YXRpYyB2b2lkIG1hdHJveF9wYW5fdmFyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKIAl1bnNpZ25lZCBpbnQgcG9zOwogCXVuc2lnbmVkIHNob3J0IHAwLCBwMSwgcDI7Ci0jaWZkZWYgQ09ORklHX0ZCX01BVFJPWF8zMk1CCiAJdW5zaWduZWQgaW50IHAzOwotI2VuZGlmCiAJaW50IHZibDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zMTQsNDcgKzMxOCw0NCBAQAogCiAJREJHKF9fZnVuY19fKQogCi0JaWYgKEFDQ0VTU19GQklORk8oZGVhZCkpCisJaWYgKG1pbmZvLT5kZWFkKQogCQlyZXR1cm47CiAKLQlBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueW9mZnNldCA9IHZhci0+eW9mZnNldDsKLQlwb3MgPSAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnlvZmZzZXQgKiBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueHJlc192aXJ0dWFsICsgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnhvZmZzZXQpICogQUNDRVNTX0ZCSU5GTyhjdXJyLmZpbmFsX2JwcFNoaWZ0KSAvIDMyOwotCXBvcyArPSBBQ0NFU1NfRkJJTkZPKGN1cnIueWRzdG9yZy5jaHVua3MpOwotCXAwID0gQUNDRVNTX0ZCSU5GTyhodykuQ1JUQ1sweDBEXSA9IHBvcyAmIDB4RkY7Ci0JcDEgPSBBQ0NFU1NfRkJJTkZPKGh3KS5DUlRDWzB4MENdID0gKHBvcyAmIDB4RkYwMCkgPj4gODsKLQlwMiA9IEFDQ0VTU19GQklORk8oaHcpLkNSVENFWFRbMF0gPSAoQUNDRVNTX0ZCSU5GTyhodykuQ1JUQ0VYVFswXSAmIDB4QjApIHwgKChwb3MgPj4gMTYpICYgMHgwRikgfCAoKHBvcyA+PiAxNCkgJiAweDQwKTsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YXzMyTUIKLQlwMyA9IEFDQ0VTU19GQklORk8oaHcpLkNSVENFWFRbOF0gPSBwb3MgPj4gMjE7Ci0jZW5kaWYKKwltaW5mby0+ZmJjb24udmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7CisJbWluZm8tPmZiY29uLnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OworCXBvcyA9IChtaW5mby0+ZmJjb24udmFyLnlvZmZzZXQgKiBtaW5mby0+ZmJjb24udmFyLnhyZXNfdmlydHVhbCArIG1pbmZvLT5mYmNvbi52YXIueG9mZnNldCkgKiBtaW5mby0+Y3Vyci5maW5hbF9icHBTaGlmdCAvIDMyOworCXBvcyArPSBtaW5mby0+Y3Vyci55ZHN0b3JnLmNodW5rczsKKwlwMCA9IG1pbmZvLT5ody5DUlRDWzB4MERdID0gcG9zICYgMHhGRjsKKwlwMSA9IG1pbmZvLT5ody5DUlRDWzB4MENdID0gKHBvcyAmIDB4RkYwMCkgPj4gODsKKwlwMiA9IG1pbmZvLT5ody5DUlRDRVhUWzBdID0gKG1pbmZvLT5ody5DUlRDRVhUWzBdICYgMHhCMCkgfCAoKHBvcyA+PiAxNikgJiAweDBGKSB8ICgocG9zID4+IDE0KSAmIDB4NDApOworCXAzID0gbWluZm8tPmh3LkNSVENFWFRbOF0gPSBwb3MgPj4gMjE7CiAKIAkvKiBGQl9BQ1RJVkFURV9WQkwgYW5kIHdlIGNhbiBhY3F1aXJlIGludGVycnVwdHM/IEhvbm9yIEZCX0FDVElWQVRFX1ZCTCB0aGVuLi4uICovCi0JdmJsID0gKHZhci0+YWN0aXZhdGUgJiBGQl9BQ1RJVkFURV9WQkwpICYmIChtYXRyb3hmYl9lbmFibGVfaXJxKFBNSU5GTyAwKSA9PSAwKTsKKwl2YmwgPSAodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX1ZCTCkgJiYgKG1hdHJveGZiX2VuYWJsZV9pcnEobWluZm8sIDApID09IDApOwogCiAJQ1JJVEJFR0lOCiAKIAltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKIAltZ2Ffc2V0cihNX0NSVENfSU5ERVgsIDB4MEQsIHAwKTsKIAltZ2Ffc2V0cihNX0NSVENfSU5ERVgsIDB4MEMsIHAxKTsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YXzMyTUIKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5zdXBwb3J0MzJNQikpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5zdXBwb3J0MzJNQikKIAkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIDB4MDgsIHAzKTsKLSNlbmRpZgogCWlmICh2YmwpIHsKLQkJQUNDRVNTX0ZCSU5GTyhjcnRjMS5wYW5wb3MpID0gcDI7CisJCW1pbmZvLT5jcnRjMS5wYW5wb3MgPSBwMjsKIAl9IGVsc2UgewogCQkvKiBBYm9ydCBhbnkgcGVuZGluZyBjaGFuZ2UgKi8KLQkJQUNDRVNTX0ZCSU5GTyhjcnRjMS5wYW5wb3MpID0gLTE7CisJCW1pbmZvLT5jcnRjMS5wYW5wb3MgPSAtMTsKIAkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIDB4MDAsIHAyKTsKIAl9CiAJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIAotCXVwZGF0ZV9jcnRjMihQTUlORk8gcG9zKTsKKwl1cGRhdGVfY3J0YzIobWluZm8sIHBvcyk7CiAKIAlDUklURU5ECiB9CiAKLXN0YXRpYyB2b2lkIG1hdHJveGZiX3JlbW92ZShXUE1JTkZPIGludCBkdW1teSkgeworc3RhdGljIHZvaWQgbWF0cm94ZmJfcmVtb3ZlKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCBkdW1teSkKK3sKIAkvKiBDdXJyZW50bHkgd2UgYXJlIGhvbGRpbmcgYmlnIGtlcm5lbCBsb2NrIG9uIGFsbCBkZWFkICYgdXNlY291bnQgdXBkYXRlcy4KIAkgKiBEZXN0cm95IGV2ZXJ5dGhpbmcgYWZ0ZXIgYWxsIHVzZXJzIHJlbGVhc2UgaXQuIEVzcGVjaWFsbHkgZG8gbm90IHVucmVnaXN0ZXIKIAkgKiBmcmFtZWJ1ZmZlciBhbmQgaW91bm1hcCBtZW1vcnksIG5laXRoZXIgZmJtZW0gbm9yIGZiY29uLWNmYiogZG9lcyBub3QgY2hlY2sKQEAgLTM2MywyNSArMzY0LDIzIEBACiAJICogd3JpdGUgZGF0YSB3aXRob3V0IGNhdXNpbmcgdG9vIG11Y2ggZGFtYWdlLi4uCiAJICovCiAKLQlBQ0NFU1NfRkJJTkZPKGRlYWQpID0gMTsKLQlpZiAoQUNDRVNTX0ZCSU5GTyh1c2Vjb3VudCkpIHsKKwltaW5mby0+ZGVhZCA9IDE7CisJaWYgKG1pbmZvLT51c2Vjb3VudCkgewogCQkvKiBkZXN0cm95IGl0IGxhdGVyICovCiAJCXJldHVybjsKIAl9Ci0JbWF0cm94ZmJfdW5yZWdpc3Rlcl9kZXZpY2UoTUlORk8pOwotCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJkFDQ0VTU19GQklORk8oZmJjb24pKTsKLQltYXRyb3hmYl9nNDUwX3NodXRkb3duKFBNSU5GTzIpOworCW1hdHJveGZiX3VucmVnaXN0ZXJfZGV2aWNlKG1pbmZvKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZtaW5mby0+ZmJjb24pOworCW1hdHJveGZiX2c0NTBfc2h1dGRvd24obWluZm8pOwogI2lmZGVmIENPTkZJR19NVFJSCi0JaWYgKEFDQ0VTU19GQklORk8obXRyci52cmFtX3ZhbGlkKSkKLQkJbXRycl9kZWwoQUNDRVNTX0ZCSU5GTyhtdHJyLnZyYW0pLCBBQ0NFU1NfRkJJTkZPKHZpZGVvLmJhc2UpLCBBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbikpOworCWlmIChtaW5mby0+bXRyci52cmFtX3ZhbGlkKQorCQltdHJyX2RlbChtaW5mby0+bXRyci52cmFtLCBtaW5mby0+dmlkZW8uYmFzZSwgbWluZm8tPnZpZGVvLmxlbik7CiAjZW5kaWYKLQltZ2FfaW91bm1hcChBQ0NFU1NfRkJJTkZPKG1taW8udmJhc2UpKTsKLQltZ2FfaW91bm1hcChBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKEFDQ0VTU19GQklORk8odmlkZW8uYmFzZSksIEFDQ0VTU19GQklORk8odmlkZW8ubGVuX21heGltdW0pKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oQUNDRVNTX0ZCSU5GTyhtbWlvLmJhc2UpLCAxNjM4NCk7Ci0jaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQKKwltZ2FfaW91bm1hcChtaW5mby0+bW1pby52YmFzZSk7CisJbWdhX2lvdW5tYXAobWluZm8tPnZpZGVvLnZiYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWluZm8tPnZpZGVvLmJhc2UsIG1pbmZvLT52aWRlby5sZW5fbWF4aW11bSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1pbmZvLT5tbWlvLmJhc2UsIDE2Mzg0KTsKIAlrZnJlZShtaW5mbyk7Ci0jZW5kaWYKIH0KIAogCS8qCkBAIC0zOTAsNDggKzM4OSw1MCBAQAogCiBzdGF0aWMgaW50IG1hdHJveGZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewotCU1JTkZPX0ZST01fSU5GTyhpbmZvKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gaW5mbzJtaW5mbyhpbmZvKTsKIAogCURCR19MT09QKF9fZnVuY19fKQogCi0JaWYgKEFDQ0VTU19GQklORk8oZGVhZCkpIHsKKwlpZiAobWluZm8tPmRlYWQpIHsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JQUNDRVNTX0ZCSU5GTyh1c2Vjb3VudCkrKzsKKwltaW5mby0+dXNlY291bnQrKzsKIAlpZiAodXNlcikgewotCQlBQ0NFU1NfRkJJTkZPKHVzZXJ1c2Vjb3VudCkrKzsKKwkJbWluZm8tPnVzZXJ1c2Vjb3VudCsrOwogCX0KIAlyZXR1cm4oMCk7CiB9CiAKIHN0YXRpYyBpbnQgbWF0cm94ZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJREJHX0xPT1AoX19mdW5jX18pCiAKIAlpZiAodXNlcikgewotCQlpZiAoMCA9PSAtLUFDQ0VTU19GQklORk8odXNlcnVzZWNvdW50KSkgewotCQkJbWF0cm94ZmJfZGlzYWJsZV9pcnEoUE1JTkZPMik7CisJCWlmICgwID09IC0tbWluZm8tPnVzZXJ1c2Vjb3VudCkgeworCQkJbWF0cm94ZmJfZGlzYWJsZV9pcnEobWluZm8pOwogCQl9CiAJfQotCWlmICghKC0tQUNDRVNTX0ZCSU5GTyh1c2Vjb3VudCkpICYmIEFDQ0VTU19GQklORk8oZGVhZCkpIHsKLQkJbWF0cm94ZmJfcmVtb3ZlKFBNSU5GTyAwKTsKKwlpZiAoISgtLW1pbmZvLT51c2Vjb3VudCkgJiYgbWluZm8tPmRlYWQpIHsKKwkJbWF0cm94ZmJfcmVtb3ZlKG1pbmZvLCAwKTsKIAl9CiAJcmV0dXJuKDApOwogfQogCiBzdGF0aWMgaW50IG1hdHJveGZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQlzdHJ1Y3QgZmJfaW5mbyogaW5mbykgewotCU1JTkZPX0ZST01fSU5GTyhpbmZvKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gaW5mbzJtaW5mbyhpbmZvKTsKIAogCURCRyhfX2Z1bmNfXykKIAotCW1hdHJveF9wYW5fdmFyKFBNSU5GTyB2YXIpOworCW1hdHJveF9wYW5fdmFyKG1pbmZvLCB2YXIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1hdHJveGZiX2dldF9maW5hbF9icHBTaGlmdChDUE1JTkZPIGludCBicHApIHsKK3N0YXRpYyBpbnQgbWF0cm94ZmJfZ2V0X2ZpbmFsX2JwcFNoaWZ0KGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkJICAgICAgIGludCBicHApCit7CiAJaW50IGJwcHNoZnQyOwogCiAJREJHKF9fZnVuY19fKQpAQCAtNDQwLDE0ICs0NDEsMTYgQEAKIAlpZiAoIWJwcHNoZnQyKSB7CiAJCXJldHVybiA4OwogCX0KLQlpZiAoaXNJbnRlcmxlYXZlKE1JTkZPKSkKKwlpZiAoaXNJbnRlcmxlYXZlKG1pbmZvKSkKIAkJYnBwc2hmdDIgPj49IDE7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudmlkZW82NGJpdHMpKQorCWlmIChtaW5mby0+ZGV2ZmxhZ3MudmlkZW82NGJpdHMpCiAJCWJwcHNoZnQyID4+PSAxOwogCXJldHVybiBicHBzaGZ0MjsKIH0KIAotc3RhdGljIGludCBtYXRyb3hmYl90ZXN0X2FuZF9zZXRfcm91bmRpbmcoQ1BNSU5GTyBpbnQgeHJlcywgaW50IGJwcCkgeworc3RhdGljIGludCBtYXRyb3hmYl90ZXN0X2FuZF9zZXRfcm91bmRpbmcoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCQkJICBpbnQgeHJlcywgaW50IGJwcCkKK3sKIAlpbnQgb3ZlcjsKIAlpbnQgcm91bmRpbmc7CiAKQEAgLTQ2NSwxMSArNDY4LDExIEBACiAJCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CXJvdW5kaW5nID0gMTY7CiAJCQkJLyogb24gRzQwMCwgMTYgcmVhbGx5IGRvZXMgbm90IHdvcmsgKi8KLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5hY2NlbGVyYXRvcikgPT0gRkJfQUNDRUxfTUFUUk9YX01HQUc0MDApCisJCQkJaWYgKG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvciA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkKIAkJCQkJcm91bmRpbmcgPSAzMjsKIAkJCQlicmVhazsKIAl9Ci0JaWYgKGlzSW50ZXJsZWF2ZShNSU5GTykpIHsKKwlpZiAoaXNJbnRlcmxlYXZlKG1pbmZvKSkgewogCQlyb3VuZGluZyAqPSAyOwogCX0KIAlvdmVyID0geHJlcyAlIHJvdW5kaW5nOwpAQCAtNDc4LDcgKzQ4MSw5IEBACiAJcmV0dXJuIHhyZXM7CiB9CiAKLXN0YXRpYyBpbnQgbWF0cm94ZmJfcGl0Y2hfYWRqdXN0KENQTUlORk8gaW50IHhyZXMsIGludCBicHApIHsKK3N0YXRpYyBpbnQgbWF0cm94ZmJfcGl0Y2hfYWRqdXN0KGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCB4cmVzLAorCQkJCSBpbnQgYnBwKQorewogCWNvbnN0IGludCogd2lkdGg7CiAJaW50IHhyZXNfbmV3OwogCkBAIC00ODYsMTggKzQ5MSwxOCBAQAogCiAJaWYgKCFicHApIHJldHVybiB4cmVzOwogCi0Jd2lkdGggPSBBQ0NFU1NfRkJJTkZPKGNhcGFibGUudnhyZXMpOworCXdpZHRoID0gbWluZm8tPmNhcGFibGUudnhyZXM7CiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5wcmVjaXNlX3dpZHRoKSkgeworCWlmIChtaW5mby0+ZGV2ZmxhZ3MucHJlY2lzZV93aWR0aCkgewogCQl3aGlsZSAoKndpZHRoKSB7Ci0JCQlpZiAoKCp3aWR0aCA+PSB4cmVzKSAmJiAobWF0cm94ZmJfdGVzdF9hbmRfc2V0X3JvdW5kaW5nKFBNSU5GTyAqd2lkdGgsIGJwcCkgPT0gKndpZHRoKSkgeworCQkJaWYgKCgqd2lkdGggPj0geHJlcykgJiYgKG1hdHJveGZiX3Rlc3RfYW5kX3NldF9yb3VuZGluZyhtaW5mbywgKndpZHRoLCBicHApID09ICp3aWR0aCkpIHsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXdpZHRoKys7CiAJCX0KIAkJeHJlc19uZXcgPSAqd2lkdGg7CiAJfSBlbHNlIHsKLQkJeHJlc19uZXcgPSBtYXRyb3hmYl90ZXN0X2FuZF9zZXRfcm91bmRpbmcoUE1JTkZPIHhyZXMsIGJwcCk7CisJCXhyZXNfbmV3ID0gbWF0cm94ZmJfdGVzdF9hbmRfc2V0X3JvdW5kaW5nKG1pbmZvLCB4cmVzLCBicHApOwogCX0KIAlyZXR1cm4geHJlc19uZXc7CiB9CkBAIC01MjQsNyArNTI5LDEwIEBACiAJcmV0dXJuIDE2OwkvKiByZXR1cm4gc29tZXRoaW5nIHJlYXNvbmFibGUuLi4gb3IgcGFuaWMoKT8gKi8KIH0KIAotc3RhdGljIGludCBtYXRyb3hmYl9kZWNvZGVfdmFyKENQTUlORk8gc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCAqdmlzdWFsLCBpbnQgKnZpZGVvX2NtYXBfbGVuLCB1bnNpZ25lZCBpbnQqIHlkc3RvcmcpIHsKK3N0YXRpYyBpbnQgbWF0cm94ZmJfZGVjb2RlX3Zhcihjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJICAgICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgKnZpc3VhbCwKKwkJCSAgICAgICBpbnQgKnZpZGVvX2NtYXBfbGVuLCB1bnNpZ25lZCBpbnQqIHlkc3RvcmcpCit7CiAJc3RydWN0IFJHQlQgewogCQl1bnNpZ25lZCBjaGFyIGJwcDsKIAkJc3RydWN0IHsKQEAgLTU1MSw3ICs1NTksNyBAQAogCURCRyhfX2Z1bmNfXykKIAogCXN3aXRjaCAoYnBwKSB7Ci0JCWNhc2UgNDoJIGlmICghQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLmNmYjQpKSByZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSA0OgkgaWYgKCFtaW5mby0+Y2FwYWJsZS5jZmI0KSByZXR1cm4gLUVJTlZBTDsKIAkJCSBicmVhazsKIAkJY2FzZSA4OgkgYnJlYWs7CiAJCWNhc2UgMTY6IGJyZWFrOwpAQCAtNTYwLDEzICs1NjgsMTMgQEAKIAkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CiAJfQogCSp5ZHN0b3JnID0gMDsKLQl2cmFtbGVuID0gQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW5fdXNhYmxlKTsKKwl2cmFtbGVuID0gbWluZm8tPnZpZGVvLmxlbl91c2FibGU7CiAJaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQogCQl2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlczsKIAlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPCB2YXItPnhyZXMpCiAJCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOwogCi0JdmFyLT54cmVzX3ZpcnR1YWwgPSBtYXRyb3hmYl9waXRjaF9hZGp1c3QoUE1JTkZPIHZhci0+eHJlc192aXJ0dWFsLCBicHApOworCXZhci0+eHJlc192aXJ0dWFsID0gbWF0cm94ZmJfcGl0Y2hfYWRqdXN0KG1pbmZvLCB2YXItPnhyZXNfdmlydHVhbCwgYnBwKTsKIAltZW1sZW4gPSB2YXItPnhyZXNfdmlydHVhbCAqIGJwcCAqIHZhci0+eXJlc192aXJ0dWFsIC8gODsKIAlpZiAobWVtbGVuID4gdnJhbWxlbikgewogCQl2YXItPnlyZXNfdmlydHVhbCA9IHZyYW1sZW4gKiA4IC8gKHZhci0+eHJlc192aXJ0dWFsICogYnBwKTsKQEAgLTU3NSw3ICs1ODMsNyBAQAogCS8qIFRoZXJlIGlzIGhhcmR3YXJlIGJ1ZyB0aGF0IG5vIGxpbmUgY2FuIGNyb3NzIDRNQiBib3VuZGFyeSAqLwogCS8qIGdpdmUgdXAgZm9yIENGQjI0LCBpdCBpcyBpbXBvc3NpYmxlIHRvIGVhc3kgd29ya2Fyb3VuZCBpdCAqLwogCS8qIGZvciBvdGhlciB0cnkgdG8gZG8gc29tZXRoaW5nICovCi0JaWYgKCFBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY3Jvc3M0TUIpICYmIChtZW1sZW4gPiAweDQwMDAwMCkpIHsKKwlpZiAoIW1pbmZvLT5jYXBhYmxlLmNyb3NzNE1CICYmIChtZW1sZW4gPiAweDQwMDAwMCkpIHsKIAkJaWYgKGJwcCA9PSAyNCkgewogCQkJLyogc29ycnkgKi8KIAkJfSBlbHNlIHsKQEAgLTY0NCw5ICs2NTIsNyBAQAogCQkJICAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAogCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCiB7Ci0jaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQKIAlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvID0gY29udGFpbmVyX29mKGZiX2luZm8sIHN0cnVjdCBtYXRyb3hfZmJfaW5mbywgZmJjb24pOwotI2VuZGlmCiAKIAlEQkcoX19mdW5jX18pCiAKQEAgLTY1NywyMCArNjYzLDIwIEBACiAJICogICE9IDAgZm9yIGludmFsaWQgcmVnbm8uCiAJICovCiAKLQlpZiAocmVnbm8gPj0gQUNDRVNTX0ZCSU5GTyhjdXJyLmNtYXBfbGVuKSkKKwlpZiAocmVnbm8gPj0gbWluZm8tPmN1cnIuY21hcF9sZW4pCiAJCXJldHVybiAxOwogCi0JaWYgKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmF5c2NhbGUpIHsKKwlpZiAobWluZm8tPmZiY29uLnZhci5ncmF5c2NhbGUpIHsKIAkJLyogZ3JheSA9IDAuMzAqUiArIDAuNTkqRyArIDAuMTEqQiAqLwogCQlyZWQgPSBncmVlbiA9IGJsdWUgPSAocmVkICogNzcgKyBncmVlbiAqIDE1MSArIGJsdWUgKiAyOCkgPj4gODsKIAl9CiAKLQlyZWQgPSBDTlZUX1RPSFcocmVkLCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIucmVkLmxlbmd0aCk7Ci0JZ3JlZW4gPSBDTlZUX1RPSFcoZ3JlZW4sIEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmVlbi5sZW5ndGgpOwotCWJsdWUgPSBDTlZUX1RPSFcoYmx1ZSwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJsdWUubGVuZ3RoKTsKLQl0cmFuc3AgPSBDTlZUX1RPSFcodHJhbnNwLCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIudHJhbnNwLmxlbmd0aCk7CisJcmVkID0gQ05WVF9UT0hXKHJlZCwgbWluZm8tPmZiY29uLnZhci5yZWQubGVuZ3RoKTsKKwlncmVlbiA9IENOVlRfVE9IVyhncmVlbiwgbWluZm8tPmZiY29uLnZhci5ncmVlbi5sZW5ndGgpOworCWJsdWUgPSBDTlZUX1RPSFcoYmx1ZSwgbWluZm8tPmZiY29uLnZhci5ibHVlLmxlbmd0aCk7CisJdHJhbnNwID0gQ05WVF9UT0hXKHRyYW5zcCwgbWluZm8tPmZiY29uLnZhci50cmFuc3AubGVuZ3RoKTsKIAotCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJc3dpdGNoIChtaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsKSB7CiAJY2FzZSA0OgogCWNhc2UgODoKIAkJbWdhX291dGIoTV9EQUNfUkVHLCByZWdubyk7CkBAIC02ODMsMzAgKzY4OSwzMCBAQAogCQkJYnJlYWs7CiAJCXsKIAkJCXVfaW50MTZfdCBjb2wgPQotCQkJCShyZWQgPDwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnJlZC5vZmZzZXQpICAgICB8Ci0JCQkJKGdyZWVuIDw8IEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmVlbi5vZmZzZXQpIHwKLQkJCQkoYmx1ZSA8PCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYmx1ZS5vZmZzZXQpICAgfAotCQkJCSh0cmFuc3AgPDwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnRyYW5zcC5vZmZzZXQpOyAvKiBmb3IgMTo1OjU6NSAqLwotCQkJQUNDRVNTX0ZCSU5GTyhjbWFwW3JlZ25vXSkgPSBjb2wgfCAoY29sIDw8IDE2KTsKKwkJCQkocmVkIDw8IG1pbmZvLT5mYmNvbi52YXIucmVkLm9mZnNldCkgICAgIHwKKwkJCQkoZ3JlZW4gPDwgbWluZm8tPmZiY29uLnZhci5ncmVlbi5vZmZzZXQpIHwKKwkJCQkoYmx1ZSA8PCBtaW5mby0+ZmJjb24udmFyLmJsdWUub2Zmc2V0KSAgIHwKKwkJCQkodHJhbnNwIDw8IG1pbmZvLT5mYmNvbi52YXIudHJhbnNwLm9mZnNldCk7IC8qIGZvciAxOjU6NTo1ICovCisJCQltaW5mby0+Y21hcFtyZWdub10gPSBjb2wgfCAoY29sIDw8IDE2KTsKIAkJfQogCQlicmVhazsKIAljYXNlIDI0OgogCWNhc2UgMzI6CiAJCWlmIChyZWdubyA+PSAxNikKIAkJCWJyZWFrOwotCQlBQ0NFU1NfRkJJTkZPKGNtYXBbcmVnbm9dKSA9Ci0JCQkocmVkICAgPDwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnJlZC5vZmZzZXQpICAgfAotCQkJKGdyZWVuIDw8IEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmVlbi5vZmZzZXQpIHwKLQkJCShibHVlICA8PCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYmx1ZS5vZmZzZXQpICB8Ci0JCQkodHJhbnNwIDw8IEFDQ0VTU19GQklORk8oZmJjb24pLnZhci50cmFuc3Aub2Zmc2V0KTsJLyogODo4Ojg6OCAqLworCQltaW5mby0+Y21hcFtyZWdub10gPQorCQkJKHJlZCAgIDw8IG1pbmZvLT5mYmNvbi52YXIucmVkLm9mZnNldCkgICB8CisJCQkoZ3JlZW4gPDwgbWluZm8tPmZiY29uLnZhci5ncmVlbi5vZmZzZXQpIHwKKwkJCShibHVlICA8PCBtaW5mby0+ZmJjb24udmFyLmJsdWUub2Zmc2V0KSAgfAorCQkJKHRyYW5zcCA8PCBtaW5mby0+ZmJjb24udmFyLnRyYW5zcC5vZmZzZXQpOwkvKiA4Ojg6ODo4ICovCiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWF0cm94ZmJfaW5pdF9maXgoV1BNSU5GTzIpCitzdGF0aWMgdm9pZCBtYXRyb3hmYl9pbml0X2ZpeChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQogewotCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4ID0gJkFDQ0VTU19GQklORk8oZmJjb24pLmZpeDsKKwlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZtaW5mby0+ZmJjb24uZml4OwogCURCRyhfX2Z1bmNfXykKIAogCXN0cmNweShmaXgtPmlkLCJNQVRST1giKTsKQEAgLTcxNCwyMCArNzIwLDIwIEBACiAJZml4LT54cGFuc3RlcCA9IDg7CS8qIDggZm9yIDhicHAsIDQgZm9yIDE2YnBwLCAyIGZvciAzMmJwcCAqLwogCWZpeC0+eXBhbnN0ZXAgPSAxOwogCWZpeC0+eXdyYXBzdGVwID0gMDsKLQlmaXgtPm1taW9fc3RhcnQgPSBBQ0NFU1NfRkJJTkZPKG1taW8uYmFzZSk7Ci0JZml4LT5tbWlvX2xlbiA9IEFDQ0VTU19GQklORk8obW1pby5sZW4pOwotCWZpeC0+YWNjZWwgPSBBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKTsKKwlmaXgtPm1taW9fc3RhcnQgPSBtaW5mby0+bW1pby5iYXNlOworCWZpeC0+bW1pb19sZW4gPSBtaW5mby0+bW1pby5sZW47CisJZml4LT5hY2NlbCA9IG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvcjsKIH0KIAotc3RhdGljIHZvaWQgbWF0cm94ZmJfdXBkYXRlX2ZpeChXUE1JTkZPMikKK3N0YXRpYyB2b2lkIG1hdHJveGZiX3VwZGF0ZV9maXgoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKIHsKLQlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZBQ0NFU1NfRkJJTkZPKGZiY29uKS5maXg7CisJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmbWluZm8tPmZiY29uLmZpeDsKIAlEQkcoX19mdW5jX18pCiAKLQltdXRleF9sb2NrKCZBQ0NFU1NfRkJJTkZPKGZiY29uKS5tbV9sb2NrKTsKLQlmaXgtPnNtZW1fc3RhcnQgPSBBQ0NFU1NfRkJJTkZPKHZpZGVvLmJhc2UpICsgQUNDRVNTX0ZCSU5GTyhjdXJyLnlkc3RvcmcuYnl0ZXMpOwotCWZpeC0+c21lbV9sZW4gPSBBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpIC0gQUNDRVNTX0ZCSU5GTyhjdXJyLnlkc3RvcmcuYnl0ZXMpOwotCW11dGV4X3VubG9jaygmQUNDRVNTX0ZCSU5GTyhmYmNvbikubW1fbG9jayk7CisJbXV0ZXhfbG9jaygmbWluZm8tPmZiY29uLm1tX2xvY2spOworCWZpeC0+c21lbV9zdGFydCA9IG1pbmZvLT52aWRlby5iYXNlICsgbWluZm8tPmN1cnIueWRzdG9yZy5ieXRlczsKKwlmaXgtPnNtZW1fbGVuID0gbWluZm8tPnZpZGVvLmxlbl91c2FibGUgLSBtaW5mby0+Y3Vyci55ZHN0b3JnLmJ5dGVzOworCW11dGV4X3VubG9jaygmbWluZm8tPmZiY29uLm1tX2xvY2spOwogfQogCiBzdGF0aWMgaW50IG1hdHJveGZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCkBAIC03MzYsMTIgKzc0MiwxMiBAQAogCWludCB2aXN1YWw7CiAJaW50IGNtYXBfbGVuOwogCXVuc2lnbmVkIGludCB5ZHN0b3JnOwotCU1JTkZPX0ZST01fSU5GTyhpbmZvKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gaW5mbzJtaW5mbyhpbmZvKTsKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRlYWQpKSB7CisJaWYgKG1pbmZvLT5kZWFkKSB7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCWlmICgoZXJyID0gbWF0cm94ZmJfZGVjb2RlX3ZhcihQTUlORk8gdmFyLCAmdmlzdWFsLCAmY21hcF9sZW4sICZ5ZHN0b3JnKSkgIT0gMCkKKwlpZiAoKGVyciA9IG1hdHJveGZiX2RlY29kZV92YXIobWluZm8sIHZhciwgJnZpc3VhbCwgJmNtYXBfbGVuLCAmeWRzdG9yZykpICE9IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CiB9CkBAIC03NTMsMzUgKzc1OSwzNSBAQAogCWludCBjbWFwX2xlbjsKIAl1bnNpZ25lZCBpbnQgeWRzdG9yZzsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcjsKLQlNSU5GT19GUk9NX0lORk8oaW5mbyk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IGluZm8ybWluZm8oaW5mbyk7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZWFkKSkgeworCWlmIChtaW5mby0+ZGVhZCkgewogCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCXZhciA9ICZpbmZvLT52YXI7Ci0JaWYgKChlcnIgPSBtYXRyb3hmYl9kZWNvZGVfdmFyKFBNSU5GTyB2YXIsICZ2aXN1YWwsICZjbWFwX2xlbiwgJnlkc3RvcmcpKSAhPSAwKQorCWlmICgoZXJyID0gbWF0cm94ZmJfZGVjb2RlX3ZhcihtaW5mbywgdmFyLCAmdmlzdWFsLCAmY21hcF9sZW4sICZ5ZHN0b3JnKSkgIT0gMCkKIAkJcmV0dXJuIGVycjsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLnNjcmVlbl9iYXNlKSA9IHZhZGRyX3ZhKEFDQ0VTU19GQklORk8odmlkZW8udmJhc2UpKSArIHlkc3Rvcmc7Ci0JbWF0cm94ZmJfdXBkYXRlX2ZpeChQTUlORk8yKTsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uKS5maXgudmlzdWFsID0gdmlzdWFsOwotCUFDQ0VTU19GQklORk8oZmJjb24pLmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwotCUFDQ0VTU19GQklORk8oZmJjb24pLmZpeC50eXBlX2F1eCA9IDA7Ci0JQUNDRVNTX0ZCSU5GTyhmYmNvbikuZml4LmxpbmVfbGVuZ3RoID0gKHZhci0+eHJlc192aXJ0dWFsICogdmFyLT5iaXRzX3Blcl9waXhlbCkgPj4gMzsKKwltaW5mby0+ZmJjb24uc2NyZWVuX2Jhc2UgPSB2YWRkcl92YShtaW5mby0+dmlkZW8udmJhc2UpICsgeWRzdG9yZzsKKwltYXRyb3hmYl91cGRhdGVfZml4KG1pbmZvKTsKKwltaW5mby0+ZmJjb24uZml4LnZpc3VhbCA9IHZpc3VhbDsKKwltaW5mby0+ZmJjb24uZml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJbWluZm8tPmZiY29uLmZpeC50eXBlX2F1eCA9IDA7CisJbWluZm8tPmZiY29uLmZpeC5saW5lX2xlbmd0aCA9ICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwpID4+IDM7CiAJewogCQl1bnNpZ25lZCBpbnQgcG9zOwogCi0JCUFDQ0VTU19GQklORk8oY3Vyci5jbWFwX2xlbikgPSBjbWFwX2xlbjsKLQkJeWRzdG9yZyArPSBBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnlkc3RvcmcpOwotCQlBQ0NFU1NfRkJJTkZPKGN1cnIueWRzdG9yZy5ieXRlcykgPSB5ZHN0b3JnOwotCQlBQ0NFU1NfRkJJTkZPKGN1cnIueWRzdG9yZy5jaHVua3MpID0geWRzdG9yZyA+PiAoaXNJbnRlcmxlYXZlKE1JTkZPKT8zOjIpOworCQltaW5mby0+Y3Vyci5jbWFwX2xlbiA9IGNtYXBfbGVuOworCQl5ZHN0b3JnICs9IG1pbmZvLT5kZXZmbGFncy55ZHN0b3JnOworCQltaW5mby0+Y3Vyci55ZHN0b3JnLmJ5dGVzID0geWRzdG9yZzsKKwkJbWluZm8tPmN1cnIueWRzdG9yZy5jaHVua3MgPSB5ZHN0b3JnID4+IChpc0ludGVybGVhdmUobWluZm8pID8gMyA6IDIpOwogCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSA0KQotCQkJQUNDRVNTX0ZCSU5GTyhjdXJyLnlkc3RvcmcucGl4ZWxzKSA9IHlkc3Rvcmc7CisJCQltaW5mby0+Y3Vyci55ZHN0b3JnLnBpeGVscyA9IHlkc3Rvcmc7CiAJCWVsc2UKLQkJCUFDQ0VTU19GQklORk8oY3Vyci55ZHN0b3JnLnBpeGVscykgPSAoeWRzdG9yZyAqIDgpIC8gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQkJQUNDRVNTX0ZCSU5GTyhjdXJyLmZpbmFsX2JwcFNoaWZ0KSA9IG1hdHJveGZiX2dldF9maW5hbF9icHBTaGlmdChQTUlORk8gdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCQltaW5mby0+Y3Vyci55ZHN0b3JnLnBpeGVscyA9ICh5ZHN0b3JnICogOCkgLyB2YXItPmJpdHNfcGVyX3BpeGVsOworCQltaW5mby0+Y3Vyci5maW5hbF9icHBTaGlmdCA9IG1hdHJveGZiX2dldF9maW5hbF9icHBTaGlmdChtaW5mbywgdmFyLT5iaXRzX3Blcl9waXhlbCk7CiAJCXsJc3RydWN0IG15X3RpbW1pbmcgbXQ7CiAJCQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodzsKIAkJCWludCBvdXQ7CkBAIC03OTcsNTQgKzgwMyw1NSBAQAogCQkJCWRlZmF1bHQ6CW10LmRlbGF5ID0gMzEgKyA4OyBicmVhazsKIAkJCX0KIAotCQkJaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJCQlodyA9ICZtaW5mby0+aHc7CiAKLQkJCWRvd25fcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOworCQkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQkJZm9yIChvdXQgPSAwOyBvdXQgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgb3V0KyspIHsKLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEgJiYKLQkJCQkgICAgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+Y29tcHV0ZSkgewotCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0LT5jb21wdXRlKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5kYXRhLCAmbXQpOworCQkJCWlmIChtaW5mby0+b3V0cHV0c1tvdXRdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEgJiYKKwkJCQkgICAgbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPmNvbXB1dGUpIHsKKwkJCQkJbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPmNvbXB1dGUobWluZm8tPm91dHB1dHNbb3V0XS5kYXRhLCAmbXQpOwogCQkJCX0KIAkJCX0KLQkJCXVwX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKLQkJCUFDQ0VTU19GQklORk8oY3J0YzEpLnBpeGNsb2NrID0gbXQucGl4Y2xvY2s7Ci0JCQlBQ0NFU1NfRkJJTkZPKGNydGMxKS5tbnAgPSBtdC5tbnA7Ci0JCQlBQ0NFU1NfRkJJTkZPKGh3X3N3aXRjaC0+aW5pdChQTUlORk8gJm10KSk7Ci0JCQlwb3MgPSAodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwgKyB2YXItPnhvZmZzZXQpICogQUNDRVNTX0ZCSU5GTyhjdXJyLmZpbmFsX2JwcFNoaWZ0KSAvIDMyOwotCQkJcG9zICs9IEFDQ0VTU19GQklORk8oY3Vyci55ZHN0b3JnLmNodW5rcyk7CisJCQl1cF9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQkJbWluZm8tPmNydGMxLnBpeGNsb2NrID0gbXQucGl4Y2xvY2s7CisJCQltaW5mby0+Y3J0YzEubW5wID0gbXQubW5wOworCQkJbWluZm8tPmh3X3N3aXRjaC0+aW5pdChtaW5mbywgJm10KTsKKwkJCXBvcyA9ICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCArIHZhci0+eG9mZnNldCkgKiBtaW5mby0+Y3Vyci5maW5hbF9icHBTaGlmdCAvIDMyOworCQkJcG9zICs9IG1pbmZvLT5jdXJyLnlkc3RvcmcuY2h1bmtzOwogCiAJCQlody0+Q1JUQ1sweDBEXSA9IHBvcyAmIDB4RkY7CiAJCQlody0+Q1JUQ1sweDBDXSA9IChwb3MgJiAweEZGMDApID4+IDg7CiAJCQlody0+Q1JUQ0VYVFswXSA9IChody0+Q1JUQ0VYVFswXSAmIDB4RjApIHwgKChwb3MgPj4gMTYpICYgMHgwRikgfCAoKHBvcyA+PiAxNCkgJiAweDQwKTsKIAkJCWh3LT5DUlRDRVhUWzhdID0gcG9zID4+IDIxOwotCQkJQUNDRVNTX0ZCSU5GTyhod19zd2l0Y2gtPnJlc3RvcmUoUE1JTkZPMikpOwotCQkJdXBkYXRlX2NydGMyKFBNSU5GTyBwb3MpOwotCQkJZG93bl9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7CisJCQltaW5mby0+aHdfc3dpdGNoLT5yZXN0b3JlKG1pbmZvKTsKKwkJCXVwZGF0ZV9jcnRjMihtaW5mbywgcG9zKTsKKwkJCWRvd25fcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAkJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7Ci0JCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxICYmCi0JCQkJICAgIEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQtPnByb2dyYW0pIHsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+cHJvZ3JhbShBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuZGF0YSk7CisJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW291dF0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSAmJgorCQkJCSAgICBtaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+cHJvZ3JhbSkgeworCQkJCQltaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+cHJvZ3JhbShtaW5mby0+b3V0cHV0c1tvdXRdLmRhdGEpOwogCQkJCX0KIAkJCX0KIAkJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7Ci0JCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxICYmCi0JCQkJICAgIEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQtPnN0YXJ0KSB7Ci0JCQkJCUFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQtPnN0YXJ0KEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5kYXRhKTsKKwkJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxICYmCisJCQkJICAgIG1pbmZvLT5vdXRwdXRzW291dF0ub3V0cHV0LT5zdGFydCkgeworCQkJCQltaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+c3RhcnQobWluZm8tPm91dHB1dHNbb3V0XS5kYXRhKTsKIAkJCQl9CiAJCQl9Ci0JCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7Ci0JCQltYXRyb3hfY2ZiWF9pbml0KFBNSU5GTzIpOworCQkJdXBfcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwkJCW1hdHJveF9jZmJYX2luaXQobWluZm8pOwogCQl9CiAJfQotCUFDQ0VTU19GQklORk8oaW5pdGlhbGl6ZWQpID0gMTsKKwltaW5mby0+aW5pdGlhbGl6ZWQgPSAxOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1hdHJveGZiX2dldF92YmxhbmsoV1BNSU5GTyBzdHJ1Y3QgZmJfdmJsYW5rICp2YmxhbmspCitzdGF0aWMgaW50IG1hdHJveGZiX2dldF92Ymxhbmsoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgZmJfdmJsYW5rICp2YmxhbmspCiB7CiAJdW5zaWduZWQgaW50IHN0czE7CiAKLQltYXRyb3hmYl9lbmFibGVfaXJxKFBNSU5GTyAwKTsKKwltYXRyb3hmYl9lbmFibGVfaXJxKG1pbmZvLCAwKTsKIAltZW1zZXQodmJsYW5rLCAwLCBzaXplb2YoKnZibGFuaykpOwogCXZibGFuay0+ZmxhZ3MgPSBGQl9WQkxBTktfSEFWRV9WQ09VTlQgfCBGQl9WQkxBTktfSEFWRV9WU1lOQyB8CiAJCQlGQl9WQkxBTktfSEFWRV9WQkxBTksgfCBGQl9WQkxBTktfSEFWRV9IQkxBTks7CkBAIC04NTcsMTMgKzg2NCwxMyBAQAogCQl2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19IQkxBTktJTkc7CiAJaWYgKHN0czEgJiA4KQogCQl2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19WU1lOQ0lORzsKLQlpZiAodmJsYW5rLT52Y291bnQgPj0gQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnlyZXMpCisJaWYgKHZibGFuay0+dmNvdW50ID49IG1pbmZvLT5mYmNvbi52YXIueXJlcykKIAkJdmJsYW5rLT5mbGFncyB8PSBGQl9WQkxBTktfVkJMQU5LSU5HOwotCWlmICh0ZXN0X2JpdCgwLCAmQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpKSkgeworCWlmICh0ZXN0X2JpdCgwLCAmbWluZm8tPmlycV9mbGFncykpIHsKIAkJdmJsYW5rLT5mbGFncyB8PSBGQl9WQkxBTktfSEFWRV9DT1VOVDsKIAkJLyogT25seSBvbmUgd3JpdGVyLCBhbGlnbmVkIGludCB2YWx1ZS4uLgogCQkgICBpdCBzaG91bGQgd29yayB3aXRob3V0IGxvY2sgYW5kIHdpdGhvdXQgYXRvbWljX3QgKi8KLQkJdmJsYW5rLT5jb3VudCA9IEFDQ0VTU19GQklORk8oY3J0YzEpLnZzeW5jLmNudDsKKwkJdmJsYW5rLT5jb3VudCA9IG1pbmZvLT5jcnRjMS52c3luYy5jbnQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODc2LDExICs4ODMsMTEgQEAKIAkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJREJHKF9fZnVuY19fKQogCi0JaWYgKEFDQ0VTU19GQklORk8oZGVhZCkpIHsKKwlpZiAobWluZm8tPmRlYWQpIHsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKQEAgLTg5MCw3ICs4OTcsNyBAQAogCQkJCXN0cnVjdCBmYl92YmxhbmsgdmJsYW5rOwogCQkJCWludCBlcnI7CiAKLQkJCQllcnIgPSBtYXRyb3hmYl9nZXRfdmJsYW5rKFBNSU5GTyAmdmJsYW5rKTsKKwkJCQllcnIgPSBtYXRyb3hmYl9nZXRfdmJsYW5rKG1pbmZvLCAmdmJsYW5rKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlyZXR1cm4gZXJyOwogCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZibGFuaywgc2l6ZW9mKHZibGFuaykpKQpAQCAtOTA0LDcgKzkxMSw3IEBACiAJCQkJaWYgKGdldF91c2VyKGNydCwgKHVfaW50MzJfdCBfX3VzZXIgKilhcmcpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJCXJldHVybiBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKFBNSU5GTyBjcnQpOworCQkJCXJldHVybiBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKG1pbmZvLCBjcnQpOwogCQkJfQogCQljYXNlIE1BVFJPWEZCX1NFVF9PVVRQVVRfTU9ERToKIAkJCXsKQEAgLTkxNiw4ICs5MjMsOCBAQAogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQlpZiAobW9tLm91dHB1dCA+PSBNQVRST1hGQl9NQVhfT1VUUFVUUykKIAkJCQkJcmV0dXJuIC1FTlhJTzsKLQkJCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0LmxvY2spKTsKLQkJCQlvcHJvYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1ttb20ub3V0cHV0XSkub3V0cHV0OworCQkJCWRvd25fcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwkJCQlvcHJvYyA9IG1pbmZvLT5vdXRwdXRzW21vbS5vdXRwdXRdLm91dHB1dDsKIAkJCQlpZiAoIW9wcm9jKSB7CiAJCQkJCXZhbCA9IC1FTlhJTzsKIAkJCQl9IGVsc2UgaWYgKCFvcHJvYy0+dmVyaWZ5bW9kZSkgewpAQCAtOTI3LDE4ICs5MzQsMTggQEAKIAkJCQkJCXZhbCA9IC1FSU5WQUw7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewotCQkJCQl2YWwgPSBvcHJvYy0+dmVyaWZ5bW9kZShBQ0NFU1NfRkJJTkZPKG91dHB1dHNbbW9tLm91dHB1dF0pLmRhdGEsIG1vbS5tb2RlKTsKKwkJCQkJdmFsID0gb3Byb2MtPnZlcmlmeW1vZGUobWluZm8tPm91dHB1dHNbbW9tLm91dHB1dF0uZGF0YSwgbW9tLm1vZGUpOwogCQkJCX0KIAkJCQlpZiAoIXZhbCkgewotCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW21vbS5vdXRwdXRdKS5tb2RlICE9IG1vbS5tb2RlKSB7Ci0JCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbbW9tLm91dHB1dF0pLm1vZGUgPSBtb20ubW9kZTsKKwkJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW21vbS5vdXRwdXRdLm1vZGUgIT0gbW9tLm1vZGUpIHsKKwkJCQkJCW1pbmZvLT5vdXRwdXRzW21vbS5vdXRwdXRdLm1vZGUgPSBtb20ubW9kZTsKIAkJCQkJCXZhbCA9IDE7CiAJCQkJCX0KIAkJCQl9Ci0JCQkJdXBfcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOworCQkJCXVwX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJCQkJaWYgKHZhbCAhPSAxKQogCQkJCQlyZXR1cm4gdmFsOwotCQkJCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW21vbS5vdXRwdXRdKS5zcmMpIHsKKwkJCQlzd2l0Y2ggKG1pbmZvLT5vdXRwdXRzW21vbS5vdXRwdXRdLnNyYykgewogCQkJCQljYXNlIE1BVFJPWEZCX1NSQ19DUlRDMToKIAkJCQkJCW1hdHJveGZiX3NldF9wYXIoaW5mbyk7CiAJCQkJCQlicmVhazsKQEAgLTk0NiwxMSArOTUzLDExIEBACiAJCQkJCQl7CiAJCQkJCQkJc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIGNydGMyOwogCi0JCQkJCQkJZG93bl9yZWFkKCZBQ0NFU1NfRkJJTkZPKGNydGMyLmxvY2spKTsKLQkJCQkJCQljcnRjMiA9IEFDQ0VTU19GQklORk8oY3J0YzIuaW5mbyk7CisJCQkJCQkJZG93bl9yZWFkKCZtaW5mby0+Y3J0YzIubG9jayk7CisJCQkJCQkJY3J0YzIgPSBtaW5mby0+Y3J0YzIuaW5mbzsKIAkJCQkJCQlpZiAoY3J0YzIpCiAJCQkJCQkJCWNydGMyLT5mYmNvbi5mYm9wcy0+ZmJfc2V0X3BhcigmY3J0YzItPmZiY29uKTsKLQkJCQkJCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGNydGMyLmxvY2spKTsKKwkJCQkJCQl1cF9yZWFkKCZtaW5mby0+Y3J0YzIubG9jayk7CiAJCQkJCQl9CiAJCQkJCQlicmVhazsKIAkJCQl9CkBAIC05NjYsMTUgKzk3MywxNSBAQAogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQlpZiAobW9tLm91dHB1dCA+PSBNQVRST1hGQl9NQVhfT1VUUFVUUykKIAkJCQkJcmV0dXJuIC1FTlhJTzsKLQkJCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0LmxvY2spKTsKLQkJCQlvcHJvYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1ttb20ub3V0cHV0XSkub3V0cHV0OworCQkJCWRvd25fcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwkJCQlvcHJvYyA9IG1pbmZvLT5vdXRwdXRzW21vbS5vdXRwdXRdLm91dHB1dDsKIAkJCQlpZiAoIW9wcm9jKSB7CiAJCQkJCXZhbCA9IC1FTlhJTzsKIAkJCQl9IGVsc2UgewotCQkJCQltb20ubW9kZSA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1ttb20ub3V0cHV0XSkubW9kZTsKKwkJCQkJbW9tLm1vZGUgPSBtaW5mby0+b3V0cHV0c1ttb20ub3V0cHV0XS5tb2RlOwogCQkJCQl2YWwgPSAwOwogCQkJCX0KLQkJCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7CisJCQkJdXBfcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAkJCQlpZiAodmFsKQogCQkJCQlyZXR1cm4gdmFsOwogCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm1vbSwgc2l6ZW9mKG1vbSkpKQpAQCAtOTkzLDkgKzEwMDAsOSBAQAogCQkJCQlpZiAodG1wICYgKDEgPDwgaSkpIHsKIAkJCQkJCWlmIChpID49IE1BVFJPWEZCX01BWF9PVVRQVVRTKQogCQkJCQkJCXJldHVybiAtRU5YSU87Ci0JCQkJCQlpZiAoIUFDQ0VTU19GQklORk8ob3V0cHV0c1tpXSkub3V0cHV0KQorCQkJCQkJaWYgKCFtaW5mby0+b3V0cHV0c1tpXS5vdXRwdXQpCiAJCQkJCQkJcmV0dXJuIC1FTlhJTzsKLQkJCQkJCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5zcmMpIHsKKwkJCQkJCXN3aXRjaCAobWluZm8tPm91dHB1dHNbaV0uc3JjKSB7CiAJCQkJCQkJY2FzZSBNQVRST1hGQl9TUkNfTk9ORToKIAkJCQkJCQljYXNlIE1BVFJPWEZCX1NSQ19DUlRDMToKIAkJCQkJCQkJYnJlYWs7CkBAIC0xMDA0LDEyICsxMDExLDEyIEBACiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9Ci0JCQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MucGFuZWxsaW5rKSkgeworCQkJCWlmIChtaW5mby0+ZGV2ZmxhZ3MucGFuZWxsaW5rKSB7CiAJCQkJCWlmICh0bXAgJiBNQVRST1hGQl9PVVRQVVRfQ09OTl9ERlApIHsKIAkJCQkJCWlmICh0bXAgJiBNQVRST1hGQl9PVVRQVVRfQ09OTl9TRUNPTkRBUlkpCiAJCQkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJCQlmb3IgKGkgPSAwOyBpIDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IGkrKykgewotCQkJCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKKwkJCQkJCQlpZiAobWluZm8tPm91dHB1dHNbaV0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgewogCQkJCQkJCQlyZXR1cm4gLUVCVVNZOwogCQkJCQkJCX0KIAkJCQkJCX0KQEAgLTEwMTgsMTMgKzEwMjUsMTMgQEAKIAkJCQljaGFuZ2VzID0gMDsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IGkrKykgewogCQkJCQlpZiAodG1wICYgKDEgPDwgaSkpIHsKLQkJCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLnNyYyAhPSBNQVRST1hGQl9TUkNfQ1JUQzEpIHsKKwkJCQkJCWlmIChtaW5mby0+b3V0cHV0c1tpXS5zcmMgIT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CiAJCQkJCQkJY2hhbmdlcyA9IDE7Ci0JCQkJCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7CisJCQkJCQkJbWluZm8tPm91dHB1dHNbaV0uc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOwogCQkJCQkJfQotCQkJCQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tpXSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgeworCQkJCQl9IGVsc2UgaWYgKG1pbmZvLT5vdXRwdXRzW2ldLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpIHsKIAkJCQkJCWNoYW5nZXMgPSAxOwotCQkJCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5zcmMgPSBNQVRST1hGQl9TUkNfTk9ORTsKKwkJCQkJCW1pbmZvLT5vdXRwdXRzW2ldLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOwogCQkJCQl9CiAJCQkJfQogCQkJCWlmICghY2hhbmdlcykKQEAgLTEwMzgsNyArMTA0NSw3IEBACiAJCQkJaW50IGk7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IGkrKykgewotCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CisJCQkJCWlmIChtaW5mby0+b3V0cHV0c1tpXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CiAJCQkJCQljb25uIHw9IDEgPDwgaTsKIAkJCQkJfQogCQkJCX0KQEAgLTEwNTIsOCArMTA1OSw4IEBACiAJCQkJaW50IGk7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IGkrKykgewotCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5vdXRwdXQpIHsKLQkJCQkJCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5zcmMpIHsKKwkJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW2ldLm91dHB1dCkgeworCQkJCQkJc3dpdGNoIChtaW5mby0+b3V0cHV0c1tpXS5zcmMpIHsKIAkJCQkJCQljYXNlIE1BVFJPWEZCX1NSQ19OT05FOgogCQkJCQkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMxOgogCQkJCQkJCQljb25uIHw9IDEgPDwgaTsKQEAgLTEwNjEsNyArMTA2OCw3IEBACiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9Ci0JCQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MucGFuZWxsaW5rKSkgeworCQkJCWlmIChtaW5mby0+ZGV2ZmxhZ3MucGFuZWxsaW5rKSB7CiAJCQkJCWlmIChjb25uICYgTUFUUk9YRkJfT1VUUFVUX0NPTk5fREZQKQogCQkJCQkJY29ubiAmPSB+TUFUUk9YRkJfT1VUUFVUX0NPTk5fU0VDT05EQVJZOwogCQkJCQlpZiAoY29ubiAmIE1BVFJPWEZCX09VVFBVVF9DT05OX1NFQ09OREFSWSkKQEAgLTEwNzcsNyArMTA4NCw3IEBACiAJCQkJaW50IGk7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IGkrKykgewotCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5vdXRwdXQpIHsKKwkJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW2ldLm91dHB1dCkgewogCQkJCQkJY29ubiB8PSAxIDw8IGk7CiAJCQkJCX0KIAkJCQl9CkBAIC0xMDkyLDcgKzEwOTksNyBAQAogCQkJCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKIAkJCQlzdHJjcHkoci5kcml2ZXIsICJtYXRyb3hmYiIpOwogCQkJCXN0cmNweShyLmNhcmQsICJNYXRyb3giKTsKLQkJCQlzcHJpbnRmKHIuYnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShBQ0NFU1NfRkJJTkZPKHBjaWRldikpKTsKKwkJCQlzcHJpbnRmKHIuYnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShtaW5mby0+cGNpZGV2KSk7CiAJCQkJci52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMSwwLDApOwogCQkJCXIuY2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fT1VUUFVUOwogCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnIsIHNpemVvZihyKSkpCkBAIC0xMTA4LDE1ICsxMTE1LDE1IEBACiAJCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZxY3RybCwgYXJncCwgc2l6ZW9mKHFjdHJsKSkpCiAJCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQkJZG93bl9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7Ci0JCQkJaWYgKCFBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dCkgeworCQkJCWRvd25fcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwkJCQlpZiAoIW1pbmZvLT5vdXRwdXRzWzFdLm91dHB1dCkgewogCQkJCQllcnIgPSAtRU5YSU87Ci0JCQkJfSBlbHNlIGlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dC0+Z2V0cXVlcnljdHJsKSB7Ci0JCQkJCWVyciA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0LT5nZXRxdWVyeWN0cmwoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kYXRhLCAmcWN0cmwpOworCQkJCX0gZWxzZSBpZiAobWluZm8tPm91dHB1dHNbMV0ub3V0cHV0LT5nZXRxdWVyeWN0cmwpIHsKKwkJCQkJZXJyID0gbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0LT5nZXRxdWVyeWN0cmwobWluZm8tPm91dHB1dHNbMV0uZGF0YSwgJnFjdHJsKTsKIAkJCQl9IGVsc2UgewogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCX0KLQkJCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7CisJCQkJdXBfcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAkJCQlpZiAoZXJyID49IDAgJiYKIAkJCQkgICAgY29weV90b191c2VyKGFyZ3AsICZxY3RybCwgc2l6ZW9mKHFjdHJsKSkpCiAJCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTEzMCwxNSArMTEzNywxNSBAQAogCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmY3RybCwgYXJncCwgc2l6ZW9mKGN0cmwpKSkKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKLQkJCQlpZiAoIUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0KSB7CisJCQkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQkJCWlmICghbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0KSB7CiAJCQkJCWVyciA9IC1FTlhJTzsKLQkJCQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0LT5nZXRjdHJsKSB7Ci0JCQkJCWVyciA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0LT5nZXRjdHJsKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuZGF0YSwgJmN0cmwpOworCQkJCX0gZWxzZSBpZiAobWluZm8tPm91dHB1dHNbMV0ub3V0cHV0LT5nZXRjdHJsKSB7CisJCQkJCWVyciA9IG1pbmZvLT5vdXRwdXRzWzFdLm91dHB1dC0+Z2V0Y3RybChtaW5mby0+b3V0cHV0c1sxXS5kYXRhLCAmY3RybCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQl9Ci0JCQkJdXBfcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOworCQkJCXVwX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJCQkJaWYgKGVyciA+PSAwICYmCiAJCQkJICAgIGNvcHlfdG9fdXNlcihhcmdwLCAmY3RybCwgc2l6ZW9mKGN0cmwpKSkKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMTUzLDE1ICsxMTYwLDE1IEBACiAJCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmdwLCBzaXplb2YoY3RybCkpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJCWRvd25fcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOwotCQkJCWlmICghQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQpIHsKKwkJCQlkb3duX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CisJCQkJaWYgKCFtaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQpIHsKIAkJCQkJZXJyID0gLUVOWElPOwotCQkJCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQtPnNldGN0cmwpIHsKLQkJCQkJZXJyID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQtPnNldGN0cmwoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kYXRhLCAmY3RybCk7CisJCQkJfSBlbHNlIGlmIChtaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQtPnNldGN0cmwpIHsKKwkJCQkJZXJyID0gbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0LT5zZXRjdHJsKG1pbmZvLT5vdXRwdXRzWzFdLmRhdGEsICZjdHJsKTsKIAkJCQl9IGVsc2UgewogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCX0KLQkJCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7CisJCQkJdXBfcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAkJCQlyZXR1cm4gZXJyOwogCQkJfQogCX0KQEAgLTExNzUsMTEgKzExODIsMTEgQEAKIAlpbnQgc2VxOwogCWludCBjcnRjOwogCUNSSVRGTEFHUwotCU1JTkZPX0ZST01fSU5GTyhpbmZvKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gaW5mbzJtaW5mbyhpbmZvKTsKIAogCURCRyhfX2Z1bmNfXykKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRlYWQpKQorCWlmIChtaW5mby0+ZGVhZCkKIAkJcmV0dXJuIDE7CiAKIAlzd2l0Y2ggKGJsYW5rKSB7CkBAIC0xMjgxLDcgKzEyODgsOSBAQAogc3RhdGljIGNoYXIgdmlkZW9tb2RlWzY0XTsJCS8qICJtYXRyb3g6bW9kZTp4eHh4eCIgb3IgIm1hdHJveDp4eHh4eCIgKi8KICNlbmRpZgogCi1zdGF0aWMgaW50IG1hdHJveGZiX2dldG1lbW9yeShXUE1JTkZPIHVuc2lnbmVkIGludCBtYXhTaXplLCB1bnNpZ25lZCBpbnQgKnJlYWxTaXplKXsKK3N0YXRpYyBpbnQgbWF0cm94ZmJfZ2V0bWVtb3J5KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4U2l6ZSwgdW5zaWduZWQgaW50ICpyZWFsU2l6ZSkKK3sKIAl2YWRkcl90IHZtOwogCXVuc2lnbmVkIGludCBvZmZzOwogCXVuc2lnbmVkIGludCBvZmZzMjsKQEAgLTEyOTEsNyArMTMwMCw3IEBACiAKIAlEQkcoX19mdW5jX18pCiAKLQl2bSA9IEFDQ0VTU19GQklORk8odmlkZW8udmJhc2UpOworCXZtID0gbWluZm8tPnZpZGVvLnZiYXNlOwogCW1heFNpemUgJj0gfjB4MUZGRkZGOwkvKiBtdXN0IGJlIFgqMk1CIChyZWFsbHkgaXQgbXVzdCBiZSAyIG9yIFgqNE1CKSAqLwogCS8qIGF0IGxlYXN0IDJNQiAqLwogCWlmIChtYXhTaXplIDwgMHgwMjAwMDAwKSByZXR1cm4gMDsKQEAgLTEzMjMsNyArMTMzMiw3IEBACiAKIAkqcmVhbFNpemUgPSBvZmZzIC0gMHgxMDAwMDA7CiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NSUxMRU5JVU0KLQlBQ0NFU1NfRkJJTkZPKGludGVybGVhdmUpID0gISghaXNNaWxsZW5pdW0oTUlORk8pIHx8ICgob2ZmcyAtIDB4MTAwMDAwKSAmIDB4M0ZGRkZGKSk7CisJbWluZm8tPmludGVybGVhdmUgPSAhKCFpc01pbGxlbml1bShtaW5mbykgfHwgKChvZmZzIC0gMHgxMDAwMDApICYgMHgzRkZGRkYpKTsKICNlbmRpZgogCXJldHVybiAxOwogfQpAQCAtMTM0NSwxMyArMTM1NCw5IEBACiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9HCiBzdGF0aWMgc3RydWN0IHZpZGVvX2JvYXJkIHZiRzEwMAkJPSB7MHgwODAwMDAwLCAweDA4MDAwMDAsIEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwLAkmbWF0cm94X0cxMDB9Owogc3RhdGljIHN0cnVjdCB2aWRlb19ib2FyZCB2YkcyMDAJCT0gezB4MTAwMDAwMCwgMHgxMDAwMDAwLCBGQl9BQ0NFTF9NQVRST1hfTUdBRzIwMCwJJm1hdHJveF9HMTAwfTsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YXzMyTUIKIC8qIGZyb20gZG9jIGl0IGxvb2tzIGxpa2UgdGhhdCBhY2NlbGVyYXRvciBjYW4gZHJhdyBvbmx5IHRvIGxvdyAxNk1CIDotKCBEaXJlY3QgYWNjZXNzZXMgJiBkaXNwbGF5aW5nIGFyZSBPSyBmb3IKICAgIHdob2xlIDMyTUIgKi8KIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fYm9hcmQgdmJHNDAwCQk9IHsweDIwMDAwMDAsIDB4MTAwMDAwMCwgRkJfQUNDRUxfTUFUUk9YX01HQUc0MDAsCSZtYXRyb3hfRzEwMH07Ci0jZWxzZQotc3RhdGljIHN0cnVjdCB2aWRlb19ib2FyZCB2Ykc0MDAJCT0gezB4MjAwMDAwMCwgMHgxMDAwMDAwLCBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCwJJm1hdHJveF9HMTAwfTsKLSNlbmRpZgogI2VuZGlmCiAKICNkZWZpbmUgREVWRl9WSURFTzY0QklUCQkweDAwMDEKQEAgLTE1NTgsMTYgKzE1NjMsMTcgQEAKIAogc3RhdGljIGludCBob3RwbHVnID0gMDsKIAotc3RhdGljIHZvaWQgc2V0RGVmYXVsdE91dHB1dHMoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIHNldERlZmF1bHRPdXRwdXRzKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3QgY2hhciogcHRyOwogCi0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMTsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgewotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOworCW1pbmZvLT5vdXRwdXRzWzBdLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgeworCQltaW5mby0+b3V0cHV0c1sxXS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMTsKKwkJbWluZm8tPm91dHB1dHNbMl0uZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7CiAJfSBlbHNlIGlmIChkZnApIHsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMTsKKwkJbWluZm8tPm91dHB1dHNbMl0uZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7CiAJfQogCXB0ciA9IG91dHB1dHM7CiAJZm9yIChpID0gMDsgaSA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBpKyspIHsKQEAgLTE1NzcsMTEgKzE1ODMsMTEgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChjID09ICcwJykgewotCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19OT05FOworCQkJbWluZm8tPm91dHB1dHNbaV0uZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfTk9ORTsKIAkJfSBlbHNlIGlmIChjID09ICcxJykgewotCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMTsKLQkJfSBlbHNlIGlmIChjID09ICcyJyAmJiBBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmNydGMyKSkgewotCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMjsKKwkJCW1pbmZvLT5vdXRwdXRzW2ldLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOworCQl9IGVsc2UgaWYgKGMgPT0gJzInICYmIG1pbmZvLT5kZXZmbGFncy5jcnRjMikgeworCQkJbWluZm8tPm91dHB1dHNbaV0uZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzI7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiOiBVbmtub3duIG91dHB1dHMgc2V0dGluZ1xuIik7CiAJCQlicmVhazsKQEAgLTE1OTEsNyArMTU5Nyw4IEBACiAJb3V0cHV0c1swXSA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdE1hdHJveDIoV1BNSU5GTyBzdHJ1Y3QgYm9hcmQqIGIpeworc3RhdGljIGludCBpbml0TWF0cm94MihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBzdHJ1Y3QgYm9hcmQgKmIpCit7CiAJdW5zaWduZWQgbG9uZyBjdHJscHRyX3BoeXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgdmlkZW9fYmFzZV9waHlzID0gMDsKIAl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKQEAgLTE2MDcsNTggKzE2MTQsNTYgQEAKIAkvKiBzZXQgZGVmYXVsdCB2YWx1ZXMuLi4gKi8KIAl2ZXNhZmJfZGVmaW5lZC5hY2NlbF9mbGFncyA9IEZCX0FDQ0VMRl9URVhUOwogCi0JQUNDRVNTX0ZCSU5GTyhod19zd2l0Y2gpID0gYi0+YmFzZS0+bG93bGV2ZWw7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5hY2NlbGVyYXRvcikgPSBiLT5iYXNlLT5hY2NlbElEOwotCUFDQ0VTU19GQklORk8obWF4X3BpeGVsX2Nsb2NrKSA9IGItPm1heGNsazsKKwltaW5mby0+aHdfc3dpdGNoID0gYi0+YmFzZS0+bG93bGV2ZWw7CisJbWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID0gYi0+YmFzZS0+YWNjZWxJRDsKKwltaW5mby0+bWF4X3BpeGVsX2Nsb2NrID0gYi0+bWF4Y2xrOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAibWF0cm94ZmI6IE1hdHJveCAlcyBkZXRlY3RlZFxuIiwgYi0+bmFtZSk7Ci0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnBsbnd0KSA9IDE7Ci0JQUNDRVNTX0ZCSU5GTyhjaGlwKSA9IGItPmNoaXA7Ci0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnNyY29yZykgPSBiLT5mbGFncyAmIERFVkZfU1JDT1JHOwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudmlkZW82NGJpdHMpID0gYi0+ZmxhZ3MgJiBERVZGX1ZJREVPNjRCSVQ7CisJbWluZm8tPmNhcGFibGUucGxud3QgPSAxOworCW1pbmZvLT5jaGlwID0gYi0+Y2hpcDsKKwltaW5mby0+Y2FwYWJsZS5zcmNvcmcgPSBiLT5mbGFncyAmIERFVkZfU1JDT1JHOworCW1pbmZvLT5kZXZmbGFncy52aWRlbzY0Yml0cyA9IGItPmZsYWdzICYgREVWRl9WSURFTzY0QklUOwogCWlmIChiLT5mbGFncyAmIERFVkZfVEVYVDRCKSB7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mudmdhc3RlcCkgPSA0OwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnRleHRtb2RlKSA9IDQ7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudGV4dF90eXBlX2F1eCkgPSBGQl9BVVhfVEVYVF9NR0FfU1RFUDE2OworCQltaW5mby0+ZGV2ZmxhZ3Mudmdhc3RlcCA9IDQ7CisJCW1pbmZvLT5kZXZmbGFncy50ZXh0bW9kZSA9IDQ7CisJCW1pbmZvLT5kZXZmbGFncy50ZXh0X3R5cGVfYXV4ID0gRkJfQVVYX1RFWFRfTUdBX1NURVAxNjsKIAl9IGVsc2UgaWYgKGItPmZsYWdzICYgREVWRl9URVhUMTZCKSB7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mudmdhc3RlcCkgPSAxNjsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy50ZXh0bW9kZSkgPSAxOwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnRleHRfdHlwZV9hdXgpID0gRkJfQVVYX1RFWFRfTUdBX1NURVAxNjsKKwkJbWluZm8tPmRldmZsYWdzLnZnYXN0ZXAgPSAxNjsKKwkJbWluZm8tPmRldmZsYWdzLnRleHRtb2RlID0gMTsKKwkJbWluZm8tPmRldmZsYWdzLnRleHRfdHlwZV9hdXggPSBGQl9BVVhfVEVYVF9NR0FfU1RFUDE2OwogCX0gZWxzZSB7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mudmdhc3RlcCkgPSA4OwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnRleHRtb2RlKSA9IDE7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudGV4dF90eXBlX2F1eCkgPSBGQl9BVVhfVEVYVF9NR0FfU1RFUDg7CisJCW1pbmZvLT5kZXZmbGFncy52Z2FzdGVwID0gODsKKwkJbWluZm8tPmRldmZsYWdzLnRleHRtb2RlID0gMTsKKwkJbWluZm8tPmRldmZsYWdzLnRleHRfdHlwZV9hdXggPSBGQl9BVVhfVEVYVF9NR0FfU1RFUDg7CiAJfQotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfMzJNQgotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Muc3VwcG9ydDMyTUIpID0gKGItPmZsYWdzICYgREVWRl9TVVBQT1JUMzJNQikgIT0gMDsKLSNlbmRpZgotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MucHJlY2lzZV93aWR0aCkgPSAhKGItPmZsYWdzICYgREVWRl9BTllfVlhSRVMpOwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuY3J0YzIpID0gKGItPmZsYWdzICYgREVWRl9DUlRDMikgIT0gMDsKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm1hdmVuX2NhcGFibGUpID0gKGItPmZsYWdzICYgREVWRl9NQVZFTl9DQVBBQkxFKSAhPSAwOwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZHVhbGhlYWQpID0gKGItPmZsYWdzICYgREVWRl9EVUFMSEVBRCkgIT0gMDsKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmRmcF90eXBlKSA9IGRmcF90eXBlOwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZzQ1MGRhYykgPSAoYi0+ZmxhZ3MgJiBERVZGX0c0NTBEQUMpICE9IDA7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy50ZXh0c3RlcCkgPSBBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnZnYXN0ZXApICogQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy50ZXh0bW9kZSk7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy50ZXh0dnJhbSkgPSA2NTUzNiAvIEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudGV4dG1vZGUpOwotCXNldERlZmF1bHRPdXRwdXRzKFBNSU5GTzIpOworCW1pbmZvLT5kZXZmbGFncy5zdXBwb3J0MzJNQiA9IChiLT5mbGFncyAmIERFVkZfU1VQUE9SVDMyTUIpICE9IDA7CisJbWluZm8tPmRldmZsYWdzLnByZWNpc2Vfd2lkdGggPSAhKGItPmZsYWdzICYgREVWRl9BTllfVlhSRVMpOworCW1pbmZvLT5kZXZmbGFncy5jcnRjMiA9IChiLT5mbGFncyAmIERFVkZfQ1JUQzIpICE9IDA7CisJbWluZm8tPmRldmZsYWdzLm1hdmVuX2NhcGFibGUgPSAoYi0+ZmxhZ3MgJiBERVZGX01BVkVOX0NBUEFCTEUpICE9IDA7CisJbWluZm8tPmRldmZsYWdzLmR1YWxoZWFkID0gKGItPmZsYWdzICYgREVWRl9EVUFMSEVBRCkgIT0gMDsKKwltaW5mby0+ZGV2ZmxhZ3MuZGZwX3R5cGUgPSBkZnBfdHlwZTsKKwltaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYyA9IChiLT5mbGFncyAmIERFVkZfRzQ1MERBQykgIT0gMDsKKwltaW5mby0+ZGV2ZmxhZ3MudGV4dHN0ZXAgPSBtaW5mby0+ZGV2ZmxhZ3Mudmdhc3RlcCAqIG1pbmZvLT5kZXZmbGFncy50ZXh0bW9kZTsKKwltaW5mby0+ZGV2ZmxhZ3MudGV4dHZyYW0gPSA2NTUzNiAvIG1pbmZvLT5kZXZmbGFncy50ZXh0bW9kZTsKKwlzZXREZWZhdWx0T3V0cHV0cyhtaW5mbyk7CiAJaWYgKGItPmZsYWdzICYgREVWRl9QQU5FTExJTktfQ0FQQUJMRSkgewotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLmRhdGEgPSBNSU5GTzsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5vdXRwdXQgPSAmcGFuZWxsaW5rX291dHB1dDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5zcmMgPSBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLmRlZmF1bHRfc3JjOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnBhbmVsbGluaykgPSAxOworCQltaW5mby0+b3V0cHV0c1syXS5kYXRhID0gbWluZm87CisJCW1pbmZvLT5vdXRwdXRzWzJdLm91dHB1dCA9ICZwYW5lbGxpbmtfb3V0cHV0OworCQltaW5mby0+b3V0cHV0c1syXS5zcmMgPSBtaW5mby0+b3V0cHV0c1syXS5kZWZhdWx0X3NyYzsKKwkJbWluZm8tPm91dHB1dHNbMl0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJCW1pbmZvLT5kZXZmbGFncy5wYW5lbGxpbmsgPSAxOwogCX0KIAotCWlmIChBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY3Jvc3M0TUIpIDwgMCkKLQkJQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLmNyb3NzNE1CKSA9IGItPmZsYWdzICYgREVWRl9DUk9TUzRNQjsKKwlpZiAobWluZm8tPmNhcGFibGUuY3Jvc3M0TUIgPCAwKQorCQltaW5mby0+Y2FwYWJsZS5jcm9zczRNQiA9IGItPmZsYWdzICYgREVWRl9DUk9TUzRNQjsKIAlpZiAoYi0+ZmxhZ3MgJiBERVZGX1NXQVBTKSB7Ci0JCWN0cmxwdHJfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIDEpOwotCQl2aWRlb19iYXNlX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCAwKTsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5mYlJlc291cmNlKSA9IFBDSV9CQVNFX0FERFJFU1NfMDsKKwkJY3RybHB0cl9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KG1pbmZvLT5wY2lkZXYsIDEpOworCQl2aWRlb19iYXNlX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQobWluZm8tPnBjaWRldiwgMCk7CisJCW1pbmZvLT5kZXZmbGFncy5mYlJlc291cmNlID0gUENJX0JBU0VfQUREUkVTU18wOwogCX0gZWxzZSB7Ci0JCWN0cmxwdHJfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIDApOwotCQl2aWRlb19iYXNlX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCAxKTsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5mYlJlc291cmNlKSA9IFBDSV9CQVNFX0FERFJFU1NfMTsKKwkJY3RybHB0cl9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KG1pbmZvLT5wY2lkZXYsIDApOworCQl2aWRlb19iYXNlX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQobWluZm8tPnBjaWRldiwgMSk7CisJCW1pbmZvLT5kZXZmbGFncy5mYlJlc291cmNlID0gUENJX0JBU0VfQUREUkVTU18xOwogCX0KIAllcnIgPSAtRUlOVkFMOwogCWlmICghY3RybHB0cl9waHlzKSB7CkBAIC0xNjc2LDcgKzE2ODEsNyBAQAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHZpZGVvX2Jhc2VfcGh5cywgbWVtc2l6ZSwgIm1hdHJveGZiIEZCIikpIHsKIAkJZ290byBmYWlsQ3RybE1SOwogCX0KLQlBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl9tYXhpbXVtKSA9IG1lbXNpemU7CisJbWluZm8tPnZpZGVvLmxlbl9tYXhpbXVtID0gbWVtc2l6ZTsKIAkvKiBjb252ZXJ0IG1lbSAoYXV0b2RldGVjdCBrLCBNKSAqLwogCWlmIChtZW0gPCAxMDI0KSBtZW0gKj0gMTAyNDsKIAlpZiAobWVtIDwgMHgwMDEwMDAwMCkgbWVtICo9IDEwMjQ7CkBAIC0xNjg0LDE0ICsxNjg5LDE0IEBACiAJaWYgKG1lbSAmJiAobWVtIDwgbWVtc2l6ZSkpCiAJCW1lbXNpemUgPSBtZW07CiAJZXJyID0gLUVOT01FTTsKLQlpZiAobWdhX2lvcmVtYXAoY3RybHB0cl9waHlzLCAxNjM4NCwgTUdBX0lPUkVNQVBfTU1JTywgJkFDQ0VTU19GQklORk8obW1pby52YmFzZSkpKSB7CisJaWYgKG1nYV9pb3JlbWFwKGN0cmxwdHJfcGh5cywgMTYzODQsIE1HQV9JT1JFTUFQX01NSU8sICZtaW5mby0+bW1pby52YmFzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtYXRyb3hmYjogY2Fubm90IGlvcmVtYXAoJWxYLCAxNjM4NCksIG1hdHJveGZiIGRpc2FibGVkXG4iLCBjdHJscHRyX3BoeXMpOwogCQlnb3RvIGZhaWxWaWRlb01SOwogCX0KLQlBQ0NFU1NfRkJJTkZPKG1taW8uYmFzZSkgPSBjdHJscHRyX3BoeXM7Ci0JQUNDRVNTX0ZCSU5GTyhtbWlvLmxlbikgPSAxNjM4NDsKLQlBQ0NFU1NfRkJJTkZPKHZpZGVvLmJhc2UpID0gdmlkZW9fYmFzZV9waHlzOwotCWlmIChtZ2FfaW9yZW1hcCh2aWRlb19iYXNlX3BoeXMsIG1lbXNpemUsIE1HQV9JT1JFTUFQX0ZCLCAmQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSkpKSB7CisJbWluZm8tPm1taW8uYmFzZSA9IGN0cmxwdHJfcGh5czsKKwltaW5mby0+bW1pby5sZW4gPSAxNjM4NDsKKwltaW5mby0+dmlkZW8uYmFzZSA9IHZpZGVvX2Jhc2VfcGh5czsKKwlpZiAobWdhX2lvcmVtYXAodmlkZW9fYmFzZV9waHlzLCBtZW1zaXplLCBNR0FfSU9SRU1BUF9GQiwgJm1pbmZvLT52aWRlby52YmFzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtYXRyb3hmYjogY2Fubm90IGlvcmVtYXAoJWxYLCAlZCksIG1hdHJveGZiIGRpc2FibGVkXG4iLAogCQkJdmlkZW9fYmFzZV9waHlzLCBtZW1zaXplKTsKIAkJZ290byBmYWlsQ3RybElPOwpAQCAtMTcwMCw2MyArMTcwNSw2MyBAQAogCQl1X2ludDMyX3QgY21kOwogCQl1X2ludDMyX3QgbWdhX29wdGlvbjsKIAotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgJm1nYV9vcHRpb24pOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgJm1nYV9vcHRpb24pOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX0NPTU1BTkQsICZjbWQpOwogCQltZ2Ffb3B0aW9uICY9IDB4N0ZGRkZGRkY7IC8qIGNsZWFyIEJJR19FTkRJQU4gKi8KIAkJbWdhX29wdGlvbiB8PSBNWF9PUFRJT05fQlNXQVA7CiAJCS8qIGRpc2FibGUgcGFsZXR0ZSBzbm9vcGluZyAqLwogCQljbWQgJj0gflBDSV9DT01NQU5EX1ZHQV9QQUxFVFRFOwogCQlpZiAocGNpX2Rldl9wcmVzZW50KGludGVsXzgyNDM3KSkgewotCQkJaWYgKCEobWdhX29wdGlvbiAmIDB4MjAwMDAwMDApICYmICFBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vcGNpcmV0cnkpKSB7CisJCQlpZiAoIShtZ2Ffb3B0aW9uICYgMHgyMDAwMDAwMCkgJiYgIW1pbmZvLT5kZXZmbGFncy5ub3BjaXJldHJ5KSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWF0cm94ZmI6IERpc2FibGluZyBQQ0kgcmV0cmllcyBkdWUgdG8gaTgyNDM3IHByZXNlbnRcbiIpOwogCQkJfQogCQkJbWdhX29wdGlvbiB8PSAweDIwMDAwMDAwOwotCQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3BjaXJldHJ5KSA9IDE7CisJCQltaW5mby0+ZGV2ZmxhZ3Mubm9wY2lyZXRyeSA9IDE7CiAJCX0KLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9DT01NQU5ELCBjbWQpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIG1nYV9vcHRpb24pOwotCQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyA9IG1nYV9vcHRpb247CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX0NPTU1BTkQsIGNtZCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG1nYV9vcHRpb24pOworCQltaW5mby0+aHcuTVhvcHRpb25SZWcgPSBtZ2Ffb3B0aW9uOwogCiAJCS8qIHNlbGVjdCBub24tRE1BIG1lbW9yeSBmb3IgUENJX01HQV9EQVRBLCBvdGhlcndpc2UgZHVtcCBvZiBQQ0kgY2ZnIHNwYWNlIGNhbiBsb2NrIFBDSSBidXMgKi8KIAkJLyogbWF5YmUgcHJlaW5pdCgpIGNhbmRpZGF0ZSwgYnV0IGl0IGlzIHNhbWUuLi4gZm9yIGFsbCBkZXZpY2VzLi4uIGF0IHRoaXMgdGltZS4uLiAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX01HQV9JTkRFWCwgMHgwMDAwM0MwMCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX01HQV9JTkRFWCwgMHgwMDAwM0MwMCk7CiAJfQogCiAJZXJyID0gLUVOWElPOwotCW1hdHJveGZiX3JlYWRfcGlucyhQTUlORk8yKTsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhod19zd2l0Y2gpLT5wcmVpbml0KFBNSU5GTzIpKSB7CisJbWF0cm94ZmJfcmVhZF9waW5zKG1pbmZvKTsKKwlpZiAobWluZm8tPmh3X3N3aXRjaC0+cHJlaW5pdChtaW5mbykpIHsKIAkJZ290byBmYWlsVmlkZW9JTzsKIAl9CiAKIAllcnIgPSAtRU5PTUVNOwotCWlmICghbWF0cm94ZmJfZ2V0bWVtb3J5KFBNSU5GTyBtZW1zaXplLCAmQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pKSB8fCAhQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pKSB7CisJaWYgKCFtYXRyb3hmYl9nZXRtZW1vcnkobWluZm8sIG1lbXNpemUsICZtaW5mby0+dmlkZW8ubGVuKSB8fCAhbWluZm8tPnZpZGVvLmxlbikgewogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiOiBjYW5ub3QgZGV0ZXJtaW5lIG1lbW9yeSBzaXplXG4iKTsKIAkJZ290byBmYWlsVmlkZW9JTzsKIAl9Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy55ZHN0b3JnKSA9IDA7CisJbWluZm8tPmRldmZsYWdzLnlkc3RvcmcgPSAwOwogCi0JQUNDRVNTX0ZCSU5GTyh2aWRlby5iYXNlKSA9IHZpZGVvX2Jhc2VfcGh5czsKLQlBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpID0gQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pOwotCWlmIChBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpID4gYi0+YmFzZS0+bWF4ZGlzcGxheWFibGUpCi0JCUFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSkgPSBiLT5iYXNlLT5tYXhkaXNwbGF5YWJsZTsKKwltaW5mby0+dmlkZW8uYmFzZSA9IHZpZGVvX2Jhc2VfcGh5czsKKwltaW5mby0+dmlkZW8ubGVuX3VzYWJsZSA9IG1pbmZvLT52aWRlby5sZW47CisJaWYgKG1pbmZvLT52aWRlby5sZW5fdXNhYmxlID4gYi0+YmFzZS0+bWF4ZGlzcGxheWFibGUpCisJCW1pbmZvLT52aWRlby5sZW5fdXNhYmxlID0gYi0+YmFzZS0+bWF4ZGlzcGxheWFibGU7CiAjaWZkZWYgQ09ORklHX01UUlIKIAlpZiAobXRycikgewotCQlBQ0NFU1NfRkJJTkZPKG10cnIudnJhbSkgPSBtdHJyX2FkZCh2aWRlb19iYXNlX3BoeXMsIEFDQ0VTU19GQklORk8odmlkZW8ubGVuKSwgTVRSUl9UWVBFX1dSQ09NQiwgMSk7Ci0JCUFDQ0VTU19GQklORk8obXRyci52cmFtX3ZhbGlkKSA9IDE7CisJCW1pbmZvLT5tdHJyLnZyYW0gPSBtdHJyX2FkZCh2aWRlb19iYXNlX3BoeXMsIG1pbmZvLT52aWRlby5sZW4sIE1UUlJfVFlQRV9XUkNPTUIsIDEpOworCQltaW5mby0+bXRyci52cmFtX3ZhbGlkID0gMTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWF0cm94ZmI6IE1UUlIncyB0dXJuZWQgb25cbiIpOwogCX0KICNlbmRpZgkvKiBDT05GSUdfTVRSUiAqLwogCi0JaWYgKCFBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vdmdhKSkKKwlpZiAoIW1pbmZvLT5kZXZmbGFncy5ub3ZnYSkKIAkJcmVxdWVzdF9yZWdpb24oMHgzQzAsIDMyLCAibWF0cm94Iik7Ci0JbWF0cm94ZmJfZzQ1MF9jb25uZWN0KFBNSU5GTzIpOwotCUFDQ0VTU19GQklORk8oaHdfc3dpdGNoLT5yZXNldChQTUlORk8yKSk7CisJbWF0cm94ZmJfZzQ1MF9jb25uZWN0KG1pbmZvKTsKKwltaW5mby0+aHdfc3dpdGNoLT5yZXNldChtaW5mbyk7CiAKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLm1vbnNwZWNzLmhmbWluKSA9IDA7Ci0JQUNDRVNTX0ZCSU5GTyhmYmNvbi5tb25zcGVjcy5oZm1heCkgPSBmaDsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLm1vbnNwZWNzLnZmbWluKSA9IDA7Ci0JQUNDRVNTX0ZCSU5GTyhmYmNvbi5tb25zcGVjcy52Zm1heCkgPSBmdjsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLm1vbnNwZWNzLmRwbXMpID0gMDsJLyogVEJEICovCisJbWluZm8tPmZiY29uLm1vbnNwZWNzLmhmbWluID0gMDsKKwltaW5mby0+ZmJjb24ubW9uc3BlY3MuaGZtYXggPSBmaDsKKwltaW5mby0+ZmJjb24ubW9uc3BlY3MudmZtaW4gPSAwOworCW1pbmZvLT5mYmNvbi5tb25zcGVjcy52Zm1heCA9IGZ2OworCW1pbmZvLT5mYmNvbi5tb25zcGVjcy5kcG1zID0gMDsJLyogVEJEICovCiAKIAkvKiBzdGF0aWMgc2V0dGluZ3MgKi8KIAl2ZXNhZmJfZGVmaW5lZC5yZWQgPSBjb2xvcnNbZGVwdGgtMV0ucmVkOwpAQCAtMTc2OCwyNCArMTc3MywyNCBAQAogCWlmIChub2FjY2VsKQogCQl2ZXNhZmJfZGVmaW5lZC5hY2NlbF9mbGFncyAmPSB+RkJfQUNDRUxGX1RFWFQ7CiAKLQlBQ0NFU1NfRkJJTkZPKGZib3BzKSA9IG1hdHJveGZiX29wczsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLmZib3BzKSA9ICZBQ0NFU1NfRkJJTkZPKGZib3BzKTsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLnBzZXVkb19wYWxldHRlKSA9IEFDQ0VTU19GQklORk8oY21hcCk7CisJbWluZm8tPmZib3BzID0gbWF0cm94ZmJfb3BzOworCW1pbmZvLT5mYmNvbi5mYm9wcyA9ICZtaW5mby0+ZmJvcHM7CisJbWluZm8tPmZiY29uLnBzZXVkb19wYWxldHRlID0gbWluZm8tPmNtYXA7CiAJLyogYWZ0ZXIgX19pbml0IHRpbWUgd2UgYXJlIGxpa2UgbW9kdWxlLi4uIG5vIGxvZ28gKi8KLQlBQ0NFU1NfRkJJTkZPKGZiY29uLmZsYWdzKSA9IGhvdHBsdWcgPyBGQklORk9fRkxBR19NT0RVTEUgOiBGQklORk9fRkxBR19ERUZBVUxUOwotCUFDQ0VTU19GQklORk8oZmJjb24uZmxhZ3MpIHw9IEZCSU5GT19QQVJUSUFMX1BBTl9PSyB8IAkgLyogUHJlZmVyIHBhbm5pbmcgZm9yIHNjcm9sbCB1bmRlciBNQyB2aWV3ZXIvZWRpdCAqLworCW1pbmZvLT5mYmNvbi5mbGFncyA9IGhvdHBsdWcgPyBGQklORk9fRkxBR19NT0RVTEUgOiBGQklORk9fRkxBR19ERUZBVUxUOworCW1pbmZvLT5mYmNvbi5mbGFncyB8PSBGQklORk9fUEFSVElBTF9QQU5fT0sgfCAJIC8qIFByZWZlciBwYW5uaW5nIGZvciBzY3JvbGwgdW5kZXIgTUMgdmlld2VyL2VkaXQgKi8KIAkJCQkgICAgICBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8ICAvKiBXZSBoYXZlIGh3LWFzc2lzdGVkIGJtb3ZlICovCiAJCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgfCAgLyogQW5kIGZpbGxyZWN0ICovCiAJCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUIHwgLyogQW5kIGltYWdlYmxpdCAqLwogCQkJCSAgICAgIEZCSU5GT19IV0FDQ0VMX1hQQU4gfCAgICAgIC8qIEFuZCB3ZSBzdXBwb3J0IGJvdGggaG9yaXpvbnRhbCAqLwogCQkJCSAgICAgIEZCSU5GT19IV0FDQ0VMX1lQQU47ICAgICAgIC8qIEFuZCB2ZXJ0aWNhbCBwYW5uaW5nICovCi0JQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW5fdXNhYmxlKSAmPSBQQUdFX01BU0s7Ci0JZmJfYWxsb2NfY21hcCgmQUNDRVNTX0ZCSU5GTyhmYmNvbi5jbWFwKSwgMjU2LCAxKTsKKwltaW5mby0+dmlkZW8ubGVuX3VzYWJsZSAmPSBQQUdFX01BU0s7CisJZmJfYWxsb2NfY21hcCgmbWluZm8tPmZiY29uLmNtYXAsIDI1NiwgMSk7CiAKICNpZm5kZWYgTU9EVUxFCiAJLyogbW9kZSBkYXRhYmFzZSBpcyBtYXJrZWQgX19pbml0ISEhICovCiAJaWYgKCFob3RwbHVnKSB7Ci0JCWZiX2ZpbmRfbW9kZSgmdmVzYWZiX2RlZmluZWQsICZBQ0NFU1NfRkJJTkZPKGZiY29uKSwgdmlkZW9tb2RlWzBdP3ZpZGVvbW9kZTpOVUxMLAorCQlmYl9maW5kX21vZGUoJnZlc2FmYl9kZWZpbmVkLCAmbWluZm8tPmZiY29uLCB2aWRlb21vZGVbMF0gPyB2aWRlb21vZGUgOiBOVUxMLAogCQkJTlVMTCwgMCwgJmRlZmF1bHRtb2RlLCB2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCk7CiAJfQogI2VuZGlmIC8qICFNT0RVTEUgKi8KQEAgLTE4NzQsNTIgKzE4NzksNTIgQEAKIAkJdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gNjU1MzY7IC8qIGxhcmdlIGVub3VnaCB0byBiZSBJTkYsIGJ1dCBzbWFsbCBlbm91Z2gKIAkJCQkJCQl0byB5cmVzX3ZpcnR1YWwgKiB4cmVzX3ZpcnR1YWwgPCAyXjMyICovCiAJfQotCW1hdHJveGZiX2luaXRfZml4KFBNSU5GTzIpOwotCUFDQ0VTU19GQklORk8oZmJjb24uc2NyZWVuX2Jhc2UpID0gdmFkZHJfdmEoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSkpOworCW1hdHJveGZiX2luaXRfZml4KG1pbmZvKTsKKwltaW5mby0+ZmJjb24uc2NyZWVuX2Jhc2UgPSB2YWRkcl92YShtaW5mby0+dmlkZW8udmJhc2UpOwogCS8qIE5vcm1hbGl6ZSB2YWx1ZXMgKG5hbWVseSB5cmVzX3ZpcnR1YWwpICovCi0JbWF0cm94ZmJfY2hlY2tfdmFyKCZ2ZXNhZmJfZGVmaW5lZCwgJkFDQ0VTU19GQklORk8oZmJjb24pKTsKKwltYXRyb3hmYl9jaGVja192YXIoJnZlc2FmYl9kZWZpbmVkLCAmbWluZm8tPmZiY29uKTsKIAkvKiBBbmQgcHV0IGl0IGludG8gImN1cnJlbnQiIHZhci4gRG8gTk9UIHByb2dyYW0gaGFyZHdhcmUgeWV0LCBvciB3ZSdsbCBub3QgdGFrZSBvdmVyCiAJICogdmdhY29uIGNvcnJlY3RseS4gZmJjb25fc3RhcnR1cCB3aWxsIGNhbGwgZmJfc2V0X3BhciBmb3IgdXMsIFdJVEhPVVQgY2hlY2tfdmFyLAogCSAqIGFuZCB1bmZvcnR1bmF0ZWx5IGl0IHdpbGwgZG8gaXQgQkVGT1JFIHZnYWNvbiBjb250ZW50cyBpcyBzYXZlZCwgc28gaXQgd29uJ3Qgd29yawogCSAqIGFueXdheS4gQnV0IHdlIGF0IGxlYXN0IHRyaWVkLi4uICovCi0JQUNDRVNTX0ZCSU5GTyhmYmNvbi52YXIpID0gdmVzYWZiX2RlZmluZWQ7CisJbWluZm8tPmZiY29uLnZhciA9IHZlc2FmYl9kZWZpbmVkOwogCWVyciA9IC1FSU5WQUw7CiAKIAlwcmludGsoS0VSTl9JTkZPICJtYXRyb3hmYjogJWR4JWR4JWRicHAgKHZpcnR1YWw6ICVkeCVkKVxuIiwKIAkJdmVzYWZiX2RlZmluZWQueHJlcywgdmVzYWZiX2RlZmluZWQueXJlcywgdmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwsCiAJCXZlc2FmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCwgdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsKTsKIAlwcmludGsoS0VSTl9JTkZPICJtYXRyb3hmYjogZnJhbWVidWZmZXIgYXQgMHglbFgsIG1hcHBlZCB0byAweCVwLCBzaXplICVkXG4iLAotCQlBQ0NFU1NfRkJJTkZPKHZpZGVvLmJhc2UpLCB2YWRkcl92YShBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSksIEFDQ0VTU19GQklORk8odmlkZW8ubGVuKSk7CisJCW1pbmZvLT52aWRlby5iYXNlLCB2YWRkcl92YShtaW5mby0+dmlkZW8udmJhc2UpLCBtaW5mby0+dmlkZW8ubGVuKTsKIAogLyogV2UgZG8gbm90IGhhdmUgdG8gc2V0IGN1cnJjb24gdG8gMC4uLiByZWdpc3Rlcl9mcmFtZWJ1ZmZlciBkbyBpdCBmb3IgdXMgb24gZmlyc3QgY29uc29sZQogICogYW5kIHdlIGRvIG5vdCB3YW50IGN1cnJjb24gPT0gMCBmb3Igc3Vic2VxdWVudCBmcmFtZWJ1ZmZlcnMgKi8KIAotCUFDQ0VTU19GQklORk8oZmJjb24pLmRldmljZSA9ICZBQ0NFU1NfRkJJTkZPKHBjaWRldiktPmRldjsKLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJkFDQ0VTU19GQklORk8oZmJjb24pKSA8IDApIHsKKwltaW5mby0+ZmJjb24uZGV2aWNlID0gJm1pbmZvLT5wY2lkZXYtPmRldjsKKwlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJm1pbmZvLT5mYmNvbikgPCAwKSB7CiAJCWdvdG8gZmFpbFZpZGVvSU87CiAJfQogCXByaW50aygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKLQkgICAgICAgQUNDRVNTX0ZCSU5GTyhmYmNvbi5ub2RlKSwgQUNDRVNTX0ZCSU5GTyhmYmNvbi5maXguaWQpKTsKKwkgICAgICAgbWluZm8tPmZiY29uLm5vZGUsIG1pbmZvLT5mYmNvbi5maXguaWQpOwogCiAJLyogdGhlcmUgaXMgbm8gY29uc29sZSBvbiB0aGlzIGZiLi4uIGJ1dCB3ZSBoYXZlIHRvIGluaXRpYWxpemUgaGFyZHdhcmUKIAkgKiB1bnRpbCBzb21lb25lIHRlbGxzIG1lIHdoYXQgaXMgcHJvcGVyIHRoaW5nIHRvIGRvICovCi0JaWYgKCFBQ0NFU1NfRkJJTkZPKGluaXRpYWxpemVkKSkgeworCWlmICghbWluZm8tPmluaXRpYWxpemVkKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImZiJWQ6IGluaXRpYWxpemluZyBoYXJkd2FyZVxuIiwKLQkJICAgICAgIEFDQ0VTU19GQklORk8oZmJjb24ubm9kZSkpOworCQkgICAgICAgbWluZm8tPmZiY29uLm5vZGUpOwogCQkvKiBXZSBoYXZlIHRvIHVzZSBGQl9BQ1RJVkFURV9GT1JDRSwgYXMgd2UgaGFkIHRvIHB1dCB2ZXNhZmJfZGVmaW5lZCB0byB0aGUgZmJjb24udmFyCiAJCSAqIGFscmVhZHkgYmVmb3JlLCBzbyByZWdpc3Rlcl9mcmFtZWJ1ZmZlciB3b3JrcyBjb3JyZWN0bHkuICovCiAJCXZlc2FmYl9kZWZpbmVkLmFjdGl2YXRlIHw9IEZCX0FDVElWQVRFX0ZPUkNFOwotCQlmYl9zZXRfdmFyKCZBQ0NFU1NfRkJJTkZPKGZiY29uKSwgJnZlc2FmYl9kZWZpbmVkKTsKKwkJZmJfc2V0X3ZhcigmbWluZm8tPmZiY29uLCAmdmVzYWZiX2RlZmluZWQpOwogCX0KIAogCXJldHVybiAwOwogZmFpbFZpZGVvSU86OwotCW1hdHJveGZiX2c0NTBfc2h1dGRvd24oUE1JTkZPMik7Ci0JbWdhX2lvdW5tYXAoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSkpOworCW1hdHJveGZiX2c0NTBfc2h1dGRvd24obWluZm8pOworCW1nYV9pb3VubWFwKG1pbmZvLT52aWRlby52YmFzZSk7CiBmYWlsQ3RybElPOjsKLQltZ2FfaW91bm1hcChBQ0NFU1NfRkJJTkZPKG1taW8udmJhc2UpKTsKKwltZ2FfaW91bm1hcChtaW5mby0+bW1pby52YmFzZSk7CiBmYWlsVmlkZW9NUjo7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHZpZGVvX2Jhc2VfcGh5cywgQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW5fbWF4aW11bSkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbih2aWRlb19iYXNlX3BoeXMsIG1pbmZvLT52aWRlby5sZW5fbWF4aW11bSk7CiBmYWlsQ3RybE1SOjsKIAlyZWxlYXNlX21lbV9yZWdpb24oY3RybHB0cl9waHlzLCAxNjM4NCk7CiBmYWlsOjsKQEAgLTE5NzUsNyArMTk4MCw3IEBACiBzdGF0aWMgdm9pZCBtYXRyb3hmYl9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1hdHJveF9mYl9pbmZvKiBtaW5mbykgewogCXN0cnVjdCBtYXRyb3hmYl9kcml2ZXIqIGRydjsKIAlpbnQgaSA9IDA7Ci0JbGlzdF9hZGQoJkFDQ0VTU19GQklORk8obmV4dF9mYiksICZtYXRyb3hmYl9saXN0KTsKKwlsaXN0X2FkZCgmbWluZm8tPm5leHRfZmIsICZtYXRyb3hmYl9saXN0KTsKIAlmb3IgKGRydiA9IG1hdHJveGZiX2RyaXZlcl9sKG1hdHJveGZiX2RyaXZlcl9saXN0Lm5leHQpOwogCSAgICAgZHJ2ICE9IG1hdHJveGZiX2RyaXZlcl9sKCZtYXRyb3hmYl9kcml2ZXJfbGlzdCk7CiAJICAgICBkcnYgPSBtYXRyb3hmYl9kcml2ZXJfbChkcnYtPm5vZGUubmV4dCkpIHsKQEAgLTE5OTUsNyArMjAwMCw3IEBACiBzdGF0aWMgdm9pZCBtYXRyb3hmYl91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvKSB7CiAJaW50IGk7CiAKLQlsaXN0X2RlbCgmQUNDRVNTX0ZCSU5GTyhuZXh0X2ZiKSk7CisJbGlzdF9kZWwoJm1pbmZvLT5uZXh0X2ZiKTsKIAlmb3IgKGkgPSAwOyBpIDwgbWluZm8tPmRyaXZlcnNfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgbWF0cm94ZmJfZHJpdmVyKiBkcnYgPSBtaW5mby0+ZHJpdmVyc1tpXTsKIApAQCAtMjAxMSw5ICsyMDE2LDYgQEAKIAlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvOwogCWludCBlcnI7CiAJdV9pbnQzMl90IGNtZDsKLSNpZm5kZWYgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQKLQlzdGF0aWMgaW50IHJlZ2lzdGVyZWQgPSAwOwotI2VuZGlmCiAJREJHKF9fZnVuY19fKQogCiAJc3ZpZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CkBAIC0yMDM3LDY4ICsyMDM5LDU3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRAogCW1pbmZvID0ga21hbGxvYyhzaXplb2YoKm1pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaW5mbykKIAkJcmV0dXJuIC0xOwotI2Vsc2UKLQlpZiAocmVnaXN0ZXJlZCkJLyogc2luZ2xlaGVhZCBkcml2ZXIuLi4gKi8KLQkJcmV0dXJuIC0xOwotCW1pbmZvID0gJm1hdHJveGZiX2dsb2JhbF9teGluZm87Ci0jZW5kaWYKLQltZW1zZXQoTUlORk8sIDAsIHNpemVvZigqTUlORk8pKTsKKwltZW1zZXQobWluZm8sIDAsIHNpemVvZigqbWluZm8pKTsKIAotCUFDQ0VTU19GQklORk8ocGNpZGV2KSA9IHBkZXY7Ci0JQUNDRVNTX0ZCSU5GTyhkZWFkKSA9IDA7Ci0JQUNDRVNTX0ZCSU5GTyh1c2Vjb3VudCkgPSAwOwotCUFDQ0VTU19GQklORk8odXNlcnVzZWNvdW50KSA9IDA7CisJbWluZm8tPnBjaWRldiA9IHBkZXY7CisJbWluZm8tPmRlYWQgPSAwOworCW1pbmZvLT51c2Vjb3VudCA9IDA7CisJbWluZm8tPnVzZXJ1c2Vjb3VudCA9IDA7CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTUlORk8pOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtaW5mbyk7CiAJLyogREVWRkxBR1MgKi8KLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm1lbXR5cGUpID0gbWVtdHlwZTsKKwltaW5mby0+ZGV2ZmxhZ3MubWVtdHlwZSA9IG1lbXR5cGU7CiAJaWYgKG1lbXR5cGUgIT0gLTEpCiAJCW5vaW5pdCA9IDA7CiAJaWYgKGNtZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgewotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vdmdhKSA9IG5vdmdhOwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vYmlvcykgPSBub2Jpb3M7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9pbml0KSA9IG5vaW5pdDsKKwkJbWluZm8tPmRldmZsYWdzLm5vdmdhID0gbm92Z2E7CisJCW1pbmZvLT5kZXZmbGFncy5ub2Jpb3MgPSBub2Jpb3M7CisJCW1pbmZvLT5kZXZmbGFncy5ub2luaXQgPSBub2luaXQ7CiAJCS8qIHN1YnNlcXVlbnQgaGVhZHMgYWx3YXlzIG5lZWRzIGluaXRpYWxpemF0aW9uIGFuZCBtdXN0IG5vdCBlbmFibGUgQklPUyAqLwogCQlub3ZnYSA9IDE7CiAJCW5vYmlvcyA9IDE7CiAJCW5vaW5pdCA9IDA7CiAJfSBlbHNlIHsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3ZnYSkgPSAxOwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vYmlvcykgPSAxOwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vaW5pdCkgPSAwOworCQltaW5mby0+ZGV2ZmxhZ3Mubm92Z2EgPSAxOworCQltaW5mby0+ZGV2ZmxhZ3Mubm9iaW9zID0gMTsKKwkJbWluZm8tPmRldmZsYWdzLm5vaW5pdCA9IDA7CiAJfQogCi0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3BjaXJldHJ5KSA9IG5vX3BjaV9yZXRyeTsKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm1nYV8yNGJwcF9maXgpID0gaW52MjQ7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5wcmVjaXNlX3dpZHRoKSA9IG9wdGlvbl9wcmVjaXNlX3dpZHRoOwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Muc2dyYW0pID0gc2dyYW07Ci0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLmNyb3NzNE1CKSA9IGNyb3NzNE1COworCW1pbmZvLT5kZXZmbGFncy5ub3BjaXJldHJ5ID0gbm9fcGNpX3JldHJ5OworCW1pbmZvLT5kZXZmbGFncy5tZ2FfMjRicHBfZml4ID0gaW52MjQ7CisJbWluZm8tPmRldmZsYWdzLnByZWNpc2Vfd2lkdGggPSBvcHRpb25fcHJlY2lzZV93aWR0aDsKKwltaW5mby0+ZGV2ZmxhZ3Muc2dyYW0gPSBzZ3JhbTsKKwltaW5mby0+Y2FwYWJsZS5jcm9zczRNQiA9IGNyb3NzNE1COwogCi0Jc3Bpbl9sb2NrX2luaXQoJkFDQ0VTU19GQklORk8obG9jay5EQUMpKTsKLQlzcGluX2xvY2tfaW5pdCgmQUNDRVNTX0ZCSU5GTyhsb2NrLmFjY2VsKSk7Ci0JaW5pdF9yd3NlbSgmQUNDRVNTX0ZCSU5GTyhjcnRjMi5sb2NrKSk7Ci0JaW5pdF9yd3NlbSgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOwotCW11dGV4X2luaXQoJkFDQ0VTU19GQklORk8oZmJjb24pLm1tX2xvY2spOwotCUFDQ0VTU19GQklORk8oaXJxX2ZsYWdzKSA9IDA7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmQUNDRVNTX0ZCSU5GTyhjcnRjMS52c3luYy53YWl0KSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmQUNDRVNTX0ZCSU5GTyhjcnRjMi52c3luYy53YWl0KSk7Ci0JQUNDRVNTX0ZCSU5GTyhjcnRjMS5wYW5wb3MpID0gLTE7CisJc3Bpbl9sb2NrX2luaXQoJm1pbmZvLT5sb2NrLkRBQyk7CisJc3Bpbl9sb2NrX2luaXQoJm1pbmZvLT5sb2NrLmFjY2VsKTsKKwlpbml0X3J3c2VtKCZtaW5mby0+Y3J0YzIubG9jayk7CisJaW5pdF9yd3NlbSgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwltdXRleF9pbml0KCZtaW5mby0+ZmJjb24ubW1fbG9jayk7CisJbWluZm8tPmlycV9mbGFncyA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWluZm8tPmNydGMxLnZzeW5jLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1pbmZvLT5jcnRjMi52c3luYy53YWl0KTsKKwltaW5mby0+Y3J0YzEucGFucG9zID0gLTE7CiAKLQllcnIgPSBpbml0TWF0cm94MihQTUlORk8gYik7CisJZXJyID0gaW5pdE1hdHJveDIobWluZm8sIGIpOwogCWlmICghZXJyKSB7Ci0jaWZuZGVmIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFECi0JCXJlZ2lzdGVyZWQgPSAxOwotI2VuZGlmCi0JCW1hdHJveGZiX3JlZ2lzdGVyX2RldmljZShNSU5GTyk7CisJCW1hdHJveGZiX3JlZ2lzdGVyX2RldmljZShtaW5mbyk7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRAogCWtmcmVlKG1pbmZvKTsKLSNlbmRpZgogCXJldHVybiAtMTsKIH0KIApAQCAtMjEwNiw3ICsyMDk3LDcgQEAKIAlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvOwogCiAJbWluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JbWF0cm94ZmJfcmVtb3ZlKFBNSU5GTyAxKTsKKwltYXRyb3hmYl9yZW1vdmUobWluZm8sIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWF0cm94ZmJfZGV2aWNlc1tdID0gewpAQCAtMjUxMCwxMyArMjUwMSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGludjI0LCAiSW52ZXJ0cyBjbG9jayBwb2xhcml0eSBmb3IgMjRicHAgYW5kIGxvb3AgZnJlcXVlbmN5ID4gMTAwTUh6IChkZWZhdWx0PWRvIG5vdCBpbnZlcnQgcG9sYXJpdHkpIik7CiBtb2R1bGVfcGFyYW0oaW52ZXJzZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW52ZXJzZSwgIkludmVyc2UgKDAgb3IgMSkgKGRlZmF1bHQ9MCkiKTsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRAogbW9kdWxlX3BhcmFtKGRldiwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGV2LCAiTXVsdGloZWFkIHN1cHBvcnQsIGF0dGFjaCB0byBkZXZpY2UgSUQgKDAuLk4pIChkZWZhdWx0PWFsbCB3b3JraW5nKSIpOwotI2Vsc2UKLW1vZHVsZV9wYXJhbShkZXYsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRldiwgIk11bHRpaGVhZCBzdXBwb3J0LCBhdHRhY2ggdG8gZGV2aWNlIElEICgwLi5OKSAoZGVmYXVsdD1maXJzdCB3b3JraW5nKSIpOwotI2VuZGlmCiBtb2R1bGVfcGFyYW0odmVzYSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModmVzYSwgIlN0YXJ0dXAgdmlkZW9tb2RlICgweDAwMC0weDFGRikgKGRlZmF1bHQ9MHgxMDEpIik7CiBtb2R1bGVfcGFyYW0oeHJlcywgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaAppbmRleCA5NTg4MzIzLi5mM2E0ZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oCkBAIC01NCw5ICs1NCw2IEBACiAjaW5jbHVkZSAiLi4vbWFjbW9kZXMuaCIKICNlbmRpZgogCi0vKiBhbHdheXMgY29tcGlsZSBzdXBwb3J0IGZvciAzMk1CLi4uIEl0IGNvc3QgYWxtb3N0IG5vdGhpbmcgKi8KLSNkZWZpbmUgQ09ORklHX0ZCX01BVFJPWF8zMk1CCi0KICNpZmRlZiBNQVRST1hGQl9ERUJVRwogCiAjZGVmaW5lIERFQlVHCkBAIC00NjQsOSArNDYxLDcgQEAKIAkJaW50CQlub3BjaXJldHJ5OwogCQlpbnQJCW5vaW5pdDsKIAkJaW50CQlzZ3JhbTsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YXzMyTUIKIAkJaW50CQlzdXBwb3J0MzJNQjsKLSNlbmRpZgogCiAJCWludAkJYWNjZWxlcmF0b3I7CiAJCWludAkJdGV4dF90eXBlX2F1eDsKQEAgLTUyNCw0NyArNTE5LDExIEBACiAKICNkZWZpbmUgaW5mbzJtaW5mbyhpbmZvKSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IG1hdHJveF9mYl9pbmZvLCBmYmNvbikKIAotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFECi0jZGVmaW5lIEFDQ0VTU19GQklORk8yKGluZm8sIHgpIChpbmZvLT54KQotI2RlZmluZSBBQ0NFU1NfRkJJTkZPKHgpIEFDQ0VTU19GQklORk8yKG1pbmZvLHgpCi0KLSNkZWZpbmUgTUlORk8gbWluZm8KLQotI2RlZmluZSBXUE1JTkZPMiBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvCi0jZGVmaW5lIFdQTUlORk8gIFdQTUlORk8yICwKLSNkZWZpbmUgQ1BNSU5GTzIgY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvKiBtaW5mbwotI2RlZmluZSBDUE1JTkZPCSBDUE1JTkZPMiAsCi0jZGVmaW5lIFBNSU5GTzIgIG1pbmZvCi0jZGVmaW5lIFBNSU5GTyAgIFBNSU5GTzIgLAotCi0jZGVmaW5lIE1JTkZPX0ZST00oeCkJICAgc3RydWN0IG1hdHJveF9mYl9pbmZvKiBtaW5mbyA9IHgKLSNlbHNlCi0KLWV4dGVybiBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gbWF0cm94ZmJfZ2xvYmFsX214aW5mbzsKLQotI2RlZmluZSBBQ0NFU1NfRkJJTkZPKHgpIChtYXRyb3hmYl9nbG9iYWxfbXhpbmZvLngpCi0jZGVmaW5lIEFDQ0VTU19GQklORk8yKGluZm8sIHgpIChtYXRyb3hmYl9nbG9iYWxfbXhpbmZvLngpCi0KLSNkZWZpbmUgTUlORk8gKCZtYXRyb3hmYl9nbG9iYWxfbXhpbmZvKQotCi0jZGVmaW5lIFdQTUlORk8yIHZvaWQKLSNkZWZpbmUgV1BNSU5GTwotI2RlZmluZSBDUE1JTkZPMiB2b2lkCi0jZGVmaW5lIENQTUlORk8KLSNkZWZpbmUgUE1JTkZPMgotI2RlZmluZSBQTUlORk8KLQotI2RlZmluZSBNSU5GT19GUk9NKHgpCi0KLSNlbmRpZgotCi0jZGVmaW5lIE1JTkZPX0ZST01fSU5GTyh4KSBNSU5GT19GUk9NKGluZm8ybWluZm8oeCkpCi0KIHN0cnVjdCBtYXRyb3hfc3dpdGNoIHsKLQlpbnQJKCpwcmVpbml0KShXUE1JTkZPMik7Ci0Jdm9pZAkoKnJlc2V0KShXUE1JTkZPMik7Ci0JaW50CSgqaW5pdCkoV1BNSU5GTyBzdHJ1Y3QgbXlfdGltbWluZyopOwotCXZvaWQJKCpyZXN0b3JlKShXUE1JTkZPMik7CisJaW50CSgqcHJlaW5pdCkoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7CisJdm9pZAkoKnJlc2V0KShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKKwlpbnQJKCppbml0KShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBzdHJ1Y3QgbXlfdGltbWluZyopOworCXZvaWQJKCpyZXN0b3JlKShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKIH07CiAKIHN0cnVjdCBtYXRyb3hmYl9kcml2ZXIgewpAQCAtNzI3LDExICs2ODYsMTEgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgbWdhX2luYihhZGRyKQkJbWdhX3JlYWRiKEFDQ0VTU19GQklORk8obW1pby52YmFzZSksIChhZGRyKSkKLSNkZWZpbmUgbWdhX2lubChhZGRyKQkJbWdhX3JlYWRsKEFDQ0VTU19GQklORk8obW1pby52YmFzZSksIChhZGRyKSkKLSNkZWZpbmUgbWdhX291dGIoYWRkcix2YWwpCW1nYV93cml0ZWIoQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKSwgKGFkZHIpLCAodmFsKSkKLSNkZWZpbmUgbWdhX291dHcoYWRkcix2YWwpCW1nYV93cml0ZXcoQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKSwgKGFkZHIpLCAodmFsKSkKLSNkZWZpbmUgbWdhX291dGwoYWRkcix2YWwpCW1nYV93cml0ZWwoQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKSwgKGFkZHIpLCAodmFsKSkKKyNkZWZpbmUgbWdhX2luYihhZGRyKQkJbWdhX3JlYWRiKG1pbmZvLT5tbWlvLnZiYXNlLCAoYWRkcikpCisjZGVmaW5lIG1nYV9pbmwoYWRkcikJCW1nYV9yZWFkbChtaW5mby0+bW1pby52YmFzZSwgKGFkZHIpKQorI2RlZmluZSBtZ2Ffb3V0YihhZGRyLHZhbCkJbWdhX3dyaXRlYihtaW5mby0+bW1pby52YmFzZSwgKGFkZHIpLCAodmFsKSkKKyNkZWZpbmUgbWdhX291dHcoYWRkcix2YWwpCW1nYV93cml0ZXcobWluZm8tPm1taW8udmJhc2UsIChhZGRyKSwgKHZhbCkpCisjZGVmaW5lIG1nYV9vdXRsKGFkZHIsdmFsKQltZ2Ffd3JpdGVsKG1pbmZvLT5tbWlvLnZiYXNlLCAoYWRkciksICh2YWwpKQogI2RlZmluZSBtZ2FfcmVhZHIocG9ydCxpZHgpCShtZ2Ffb3V0YigocG9ydCksKGlkeCkpLCBtZ2FfaW5iKChwb3J0KSsxKSkKICNkZWZpbmUgbWdhX3NldHIoYWRkcixwb3J0LHZhbCkJbWdhX291dHcoYWRkciwgKCh2YWwpPDw4KSB8IChwb3J0KSkKIApAQCAtNzUwLDE5ICs3MDksMjAgQEAKICNkZWZpbmUgaXNNaWxsZW5pdW1JSSh4KSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIG1hdHJveGZiX0RBQ19sb2NrKCkgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrKCZBQ0NFU1NfRkJJTkZPKGxvY2suREFDKSkKLSNkZWZpbmUgbWF0cm94ZmJfREFDX3VubG9jaygpICAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmQUNDRVNTX0ZCSU5GTyhsb2NrLkRBQykpCi0jZGVmaW5lIG1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJkFDQ0VTU19GQklORk8obG9jay5EQUMpLGZsYWdzKQotI2RlZmluZSBtYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkFDQ0VTU19GQklORk8obG9jay5EQUMpLGZsYWdzKQotZXh0ZXJuIHZvaWQgbWF0cm94ZmJfREFDX291dChDUE1JTkZPIGludCByZWcsIGludCB2YWwpOwotZXh0ZXJuIGludCBtYXRyb3hmYl9EQUNfaW4oQ1BNSU5GTyBpbnQgcmVnKTsKKyNkZWZpbmUgbWF0cm94ZmJfREFDX2xvY2soKSAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soJm1pbmZvLT5sb2NrLkRBQykKKyNkZWZpbmUgbWF0cm94ZmJfREFDX3VubG9jaygpICAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbWluZm8tPmxvY2suREFDKQorI2RlZmluZSBtYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKSAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtaW5mby0+bG9jay5EQUMsIGZsYWdzKQorI2RlZmluZSBtYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pbmZvLT5sb2NrLkRBQywgZmxhZ3MpCitleHRlcm4gdm9pZCBtYXRyb3hmYl9EQUNfb3V0KGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCByZWcsCisJCQkgICAgIGludCB2YWwpOworZXh0ZXJuIGludCBtYXRyb3hmYl9EQUNfaW4oY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHJlZyk7CiBleHRlcm4gdm9pZCBtYXRyb3hmYl92YXIybXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvKiBmdnNpLCBzdHJ1Y3QgbXlfdGltbWluZyogbXQpOwotZXh0ZXJuIGludCBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKFdQTUlORk8gdV9pbnQzMl90IGNydGMpOwotZXh0ZXJuIGludCBtYXRyb3hmYl9lbmFibGVfaXJxKFdQTUlORk8gaW50IHJlZW5hYmxlKTsKK2V4dGVybiBpbnQgbWF0cm94ZmJfd2FpdF9mb3Jfc3luYyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1X2ludDMyX3QgY3J0Yyk7CitleHRlcm4gaW50IG1hdHJveGZiX2VuYWJsZV9pcnEoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHJlZW5hYmxlKTsKIAogI2lmZGVmIE1BVFJPWEZCX1VTRV9TUElOTE9DS1MKLSNkZWZpbmUgQ1JJVEJFR0lOICBzcGluX2xvY2tfaXJxc2F2ZSgmQUNDRVNTX0ZCSU5GTyhsb2NrLmFjY2VsKSwgY3JpdGZsYWdzKTsKLSNkZWZpbmUgQ1JJVEVORAkgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZBQ0NFU1NfRkJJTkZPKGxvY2suYWNjZWwpLCBjcml0ZmxhZ3MpOworI2RlZmluZSBDUklUQkVHSU4gIHNwaW5fbG9ja19pcnFzYXZlKCZtaW5mby0+bG9jay5hY2NlbCwgY3JpdGZsYWdzKTsKKyNkZWZpbmUgQ1JJVEVORAkgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaW5mby0+bG9jay5hY2NlbCwgY3JpdGZsYWdzKTsKICNkZWZpbmUgQ1JJVEZMQUdTICB1bnNpZ25lZCBsb25nIGNyaXRmbGFnczsKICNlbHNlCiAjZGVmaW5lIENSSVRCRUdJTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfY3J0YzIuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2NydGMyLmMKaW5kZXggZWJjYjVjNi4uNzg0MTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfY3J0YzIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9jcnRjMi5jCkBAIC02NSw3ICs2NSw3IEBACiAJCXVuc2lnbmVkIGludCBwb3MpIHsKIAl1X2ludDMyX3QgdG1wOwogCXVfaW50MzJfdCBkYXRhY3RsOwotCU1JTkZPX0ZST00obTJpbmZvLT5wcmltYXJ5X2Rldik7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG0yaW5mby0+cHJpbWFyeV9kZXY7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSAxNToKQEAgLTgxLDExICs4MSwxMSBAQAogCX0KIAl0bXAgfD0gMHgwMDAwMDAwMTsJLyogZW5hYmxlIENSVEMyICovCiAJZGF0YWN0bCA9IDA7Ci0JaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgewotCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgeworCWlmIChtaW5mby0+b3V0cHV0c1sxXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgewogCQkJdG1wIHw9IDB4MDAwMDAwMDY7IC8qIHNvdXJjZSBmcm9tIHNlY29uZGFyeSBwaXhlbCBQTEwgKi8KIAkJCS8qIG5vIHZpZHJzdCB3aGVuIGluIG1vbml0b3IgbW9kZSAqLwotCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkubW9kZSAhPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SKSB7CisJCQlpZiAobWluZm8tPm91dHB1dHNbMV0ubW9kZSAhPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SKSB7CiAJCQkJdG1wIHw9ICAweEMwMDAxMDAwOyAvKiBFbmFibGUgSC9WIHZpZHJzdCAqLwogCQkJfQogCQl9IGVsc2UgewpAQCAtOTMsMTEgKzkzLDExIEBACiAJCQl0bXAgfD0gMHhDMDAwMDAwMDsgLyogZW5hYmxlIHZ2aWRyc3QgJiBodmlkcnN0ICovCiAJCQkvKiBNR0EgVFZPIGlzIG91ciBjbG9jayBzb3VyY2UgKi8KIAkJfQotCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJfSBlbHNlIGlmIChtaW5mby0+b3V0cHV0c1swXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CiAJCXRtcCB8PSAweDAwMDAwMDA0OyAvKiBzb3VyY2UgZnJvbSBwaXhjbG9jayAqLwogCQkvKiBQSVhQTEwgaXMgb3VyIGNsb2NrIHNvdXJjZSAqLwogCX0KLQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJaWYgKG1pbmZvLT5vdXRwdXRzWzBdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKIAkJdG1wIHw9IDB4MDAxMDAwMDA7CS8qIGNvbm5lY3QgQ1JUQzIgdG8gREFDICovCiAJfQogCWlmIChtdC0+aW50ZXJsYWNlZCkgewpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCX0KIAl9CiAJbWdhX291dGwoMHgzQzEwLCB0bXApOwotCUFDQ0VTU19GQklORk8oaHcpLmNydGMyLmN0bCA9IHRtcDsKKwltaW5mby0+aHcuY3J0YzIuY3RsID0gdG1wOwogCiAJdG1wID0gbXQtPlZEaXNwbGF5IDw8IDE2OwkvKiBsaW5lIGNvbXBhcmUgKi8KIAlpZiAobXQtPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkKQEAgLTE1NywxMCArMTU3LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIG1hdHJveGZiX2RoX2Rpc2FibGUoc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIG0yaW5mbykgewotCU1JTkZPX0ZST00obTJpbmZvLT5wcmltYXJ5X2Rldik7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG0yaW5mby0+cHJpbWFyeV9kZXY7CiAKIAltZ2Ffb3V0bCgweDNDMTAsIDB4MDAwMDAwMDQpOwkvKiBkaXNhYmxlIENSVEMyLCBDUlRDMS0+REFDMSwgUExMIGFzIGNsb2NrIHNvdXJjZSAqLwotCUFDQ0VTU19GQklORk8oaHcpLmNydGMyLmN0bCA9IDB4MDAwMDAwMDQ7CisJbWluZm8tPmh3LmNydGMyLmN0bCA9IDB4MDAwMDAwMDQ7CiB9CiAKIHN0YXRpYyB2b2lkIG1hdHJveGZiX2RoX3Bhbl92YXIoc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIG0yaW5mbywKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXVuc2lnbmVkIGludCBwb3M7CiAJdW5zaWduZWQgaW50IGxpbmVsZW47CiAJdW5zaWduZWQgaW50IHBpeGVsc2l6ZTsKLQlNSU5GT19GUk9NKG0yaW5mby0+cHJpbWFyeV9kZXYpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtMmluZm8tPnByaW1hcnlfZGV2OwogCiAJbTJpbmZvLT5mYmNvbi52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKIAltMmluZm8tPmZiY29uLnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OwpAQCAtMjYwLDE1ICsyNjAsMTUgQEAKIAogc3RhdGljIGludCBtYXRyb3hmYl9kaF9vcGVuKHN0cnVjdCBmYl9pbmZvKiBpbmZvLCBpbnQgdXNlcikgewogI2RlZmluZSBtMmluZm8gKGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbywgZmJjb24pKQotCU1JTkZPX0ZST00obTJpbmZvLT5wcmltYXJ5X2Rldik7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG0yaW5mby0+cHJpbWFyeV9kZXY7CiAKLQlpZiAoTUlORk8pIHsKKwlpZiAobWluZm8pIHsKIAkJaW50IGVycjsKIAotCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZWFkKSkgeworCQlpZiAobWluZm8tPmRlYWQpIHsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KLQkJZXJyID0gQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfb3BlbigmQUNDRVNTX0ZCSU5GTyhmYmNvbiksIHVzZXIpOworCQllcnIgPSBtaW5mby0+ZmJvcHMuZmJfb3BlbigmbWluZm8tPmZiY29uLCB1c2VyKTsKIAkJaWYgKGVycikgewogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMjgwLDEwICsyODAsMTAgQEAKIHN0YXRpYyBpbnQgbWF0cm94ZmJfZGhfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyogaW5mbywgaW50IHVzZXIpIHsKICNkZWZpbmUgbTJpbmZvIChjb250YWluZXJfb2YoaW5mbywgc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8sIGZiY29uKSkKIAlpbnQgZXJyID0gMDsKLQlNSU5GT19GUk9NKG0yaW5mby0+cHJpbWFyeV9kZXYpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtMmluZm8tPnByaW1hcnlfZGV2OwogCi0JaWYgKE1JTkZPKSB7Ci0JCWVyciA9IEFDQ0VTU19GQklORk8oZmJvcHMpLmZiX3JlbGVhc2UoJkFDQ0VTU19GQklORk8oZmJjb24pLCB1c2VyKTsKKwlpZiAobWluZm8pIHsKKwkJZXJyID0gbWluZm8tPmZib3BzLmZiX3JlbGVhc2UoJm1pbmZvLT5mYmNvbiwgdXNlcik7CiAJfQogCXJldHVybiBlcnI7CiAjdW5kZWYgbTJpbmZvCkBAIC0zMjYsNyArMzI2LDcgQEAKIAlpbnQgbW9kZTsKIAlpbnQgZXJyOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyogdmFyID0gJmluZm8tPnZhcjsKLQlNSU5GT19GUk9NKG0yaW5mby0+cHJpbWFyeV9kZXYpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtMmluZm8tPnByaW1hcnlfZGV2OwogCiAJaWYgKChlcnIgPSBtYXRyb3hmYl9kaF9kZWNvZGVfdmFyKG0yaW5mbywgdmFyLCAmdmlzdWFsLCAmY21hcF9sZW4sICZtb2RlKSkgIT0gMCkKIAkJcmV0dXJuIGVycjsKQEAgLTM1MiwzOSArMzUyLDM5IEBACiAJCXBvcyA9IChtMmluZm8tPmZiY29uLnZhci55b2Zmc2V0ICogbTJpbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsICsgbTJpbmZvLT5mYmNvbi52YXIueG9mZnNldCkgKiBtMmluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCA+PiAzOwogCQlwb3MgKz0gbTJpbmZvLT52aWRlby5vZmZiYXNlOwogCQljbnQgPSAwOwotCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKKwkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQlmb3IgKG91dCA9IDA7IG91dCA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBvdXQrKykgewotCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CiAJCQkJY250Kys7Ci0JCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQtPmNvbXB1dGUpIHsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+Y29tcHV0ZShBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuZGF0YSwgJm10KTsKKwkJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPmNvbXB1dGUpIHsKKwkJCQkJbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPmNvbXB1dGUobWluZm8tPm91dHB1dHNbb3V0XS5kYXRhLCAmbXQpOwogCQkJCX0KIAkJCX0KIAkJfQotCQlBQ0NFU1NfRkJJTkZPKGNydGMyKS5waXhjbG9jayA9IG10LnBpeGNsb2NrOwotCQlBQ0NFU1NfRkJJTkZPKGNydGMyKS5tbnAgPSBtdC5tbnA7Ci0JCXVwX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKKwkJbWluZm8tPmNydGMyLnBpeGNsb2NrID0gbXQucGl4Y2xvY2s7CisJCW1pbmZvLT5jcnRjMi5tbnAgPSBtdC5tbnA7CisJCXVwX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJCWlmIChjbnQpIHsKIAkJCW1hdHJveGZiX2RoX3Jlc3RvcmUobTJpbmZvLCAmbXQsIG1vZGUsIHBvcyk7CiAJCX0gZWxzZSB7CiAJCQltYXRyb3hmYl9kaF9kaXNhYmxlKG0yaW5mbyk7CiAJCX0KLQkJREFDMTA2NF9nbG9iYWxfaW5pdChQTUlORk8yKTsKLQkJREFDMTA2NF9nbG9iYWxfcmVzdG9yZShQTUlORk8yKTsKLQkJZG93bl9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7CisJCURBQzEwNjRfZ2xvYmFsX2luaXQobWluZm8pOworCQlEQUMxMDY0X2dsb2JhbF9yZXN0b3JlKG1pbmZvKTsKKwkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQlmb3IgKG91dCA9IDA7IG91dCA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBvdXQrKykgewotCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyICYmCi0JCQkgICAgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+cHJvZ3JhbSkgewotCQkJCUFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQtPnByb2dyYW0oQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLmRhdGEpOworCQkJaWYgKG1pbmZvLT5vdXRwdXRzW291dF0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMiAmJgorCQkJICAgIG1pbmZvLT5vdXRwdXRzW291dF0ub3V0cHV0LT5wcm9ncmFtKSB7CisJCQkJbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPnByb2dyYW0obWluZm8tPm91dHB1dHNbb3V0XS5kYXRhKTsKIAkJCX0KIAkJfQogCQlmb3IgKG91dCA9IDA7IG91dCA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBvdXQrKykgewotCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyICYmCi0JCQkgICAgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+c3RhcnQpIHsKLQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0LT5zdGFydChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuZGF0YSk7CisJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyICYmCisJCQkgICAgbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPnN0YXJ0KSB7CisJCQkJbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPnN0YXJ0KG1pbmZvLT5vdXRwdXRzW291dF0uZGF0YSk7CiAJCQl9CiAJCX0KLQkJdXBfcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOworCQl1cF9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCX0KIAltMmluZm8tPmluaXRpYWxpemVkID0gMTsKIAlyZXR1cm4gMDsKQEAgLTM5OSw5ICszOTksOSBAQAogfQogCiBzdGF0aWMgaW50IG1hdHJveGZiX2RoX2dldF92YmxhbmsoY29uc3Qgc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIG0yaW5mbywgc3RydWN0IGZiX3ZibGFuayogdmJsYW5rKSB7Ci0JTUlORk9fRlJPTShtMmluZm8tPnByaW1hcnlfZGV2KTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbTJpbmZvLT5wcmltYXJ5X2RldjsKIAotCW1hdHJveGZiX2VuYWJsZV9pcnEoUE1JTkZPIDApOworCW1hdHJveGZiX2VuYWJsZV9pcnEobWluZm8sIDApOwogCW1lbXNldCh2YmxhbmssIDAsIHNpemVvZigqdmJsYW5rKSk7CiAJdmJsYW5rLT5mbGFncyA9IEZCX1ZCTEFOS19IQVZFX1ZDT1VOVCB8IEZCX1ZCTEFOS19IQVZFX1ZCTEFOSzsKIAkvKiBtYXNrIG91dCByZXNlcnZlZCBiaXRzICsgZmllbGQgbnVtYmVyIChvZGQvZXZlbikgKi8KQEAgLTQwOSwxMSArNDA5LDExIEBACiAJLyogY29tcGF0aWJpbGl0eSBzdHVmZiAqLwogCWlmICh2YmxhbmstPnZjb3VudCA+PSBtMmluZm8tPmZiY29uLnZhci55cmVzKQogCQl2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19WQkxBTktJTkc7Ci0gICAgICAgIGlmICh0ZXN0X2JpdCgwLCAmQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpKSkgeworCWlmICh0ZXN0X2JpdCgwLCAmbWluZm8tPmlycV9mbGFncykpIHsKICAgICAgICAgICAgICAgICB2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19IQVZFX0NPVU5UOwogICAgICAgICAgICAgICAgIC8qIE9ubHkgb25lIHdyaXRlciwgYWxpZ25lZCBpbnQgdmFsdWUuLi4KICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgd29yayB3aXRob3V0IGxvY2sgYW5kIHdpdGhvdXQgYXRvbWljX3QgKi8KLSAgICAgICAgICAgICAgICB2YmxhbmstPmNvdW50ID0gQUNDRVNTX0ZCSU5GTyhjcnRjMikudnN5bmMuY250OworCQl2YmxhbmstPmNvdW50ID0gbWluZm8tPmNydGMyLnZzeW5jLmNudDsKICAgICAgICAgfQogCXJldHVybiAwOwogfQpAQCAtNDIzLDcgKzQyMyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogI2RlZmluZSBtMmluZm8gKGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbywgZmJjb24pKQotCU1JTkZPX0ZST00obTJpbmZvLT5wcmltYXJ5X2Rldik7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG0yaW5mby0+cHJpbWFyeV9kZXY7CiAKIAlEQkcoX19mdW5jX18pCiAKQEAgLTQ0OSwxMyArNDQ5LDEzIEBACiAKIAkJCQlpZiAoY3J0ICE9IDApCiAJCQkJCXJldHVybiAtRU5PREVWOwotCQkJCXJldHVybiBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKFBNSU5GTyAxKTsKKwkJCQlyZXR1cm4gbWF0cm94ZmJfd2FpdF9mb3Jfc3luYyhtaW5mbywgMSk7CiAJCQl9CiAJCWNhc2UgTUFUUk9YRkJfU0VUX09VVFBVVF9NT0RFOgogCQljYXNlIE1BVFJPWEZCX0dFVF9PVVRQVVRfTU9ERToKIAkJY2FzZSBNQVRST1hGQl9HRVRfQUxMX09VVFBVVFM6CiAJCQl7Ci0JCQkJcmV0dXJuIEFDQ0VTU19GQklORk8oZmJjb24uZmJvcHMpLT5mYl9pb2N0bCgmQUNDRVNTX0ZCSU5GTyhmYmNvbiksIGNtZCwgYXJnKTsKKwkJCQlyZXR1cm4gbWluZm8tPmZiY29uLmZib3BzLT5mYl9pb2N0bCgmbWluZm8tPmZiY29uLCBjbWQsIGFyZyk7CiAJCQl9CiAJCWNhc2UgTUFUUk9YRkJfU0VUX09VVFBVVF9DT05ORUNUSU9OOgogCQkJewpAQCAtNDY5LDkgKzQ2OSw5IEBACiAJCQkJCWlmICh0bXAgJiAoMSA8PCBvdXQpKSB7CiAJCQkJCQlpZiAob3V0ID49IE1BVFJPWEZCX01BWF9PVVRQVVRTKQogCQkJCQkJCXJldHVybiAtRU5YSU87Ci0JCQkJCQlpZiAoIUFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQpCisJCQkJCQlpZiAoIW1pbmZvLT5vdXRwdXRzW291dF0ub3V0cHV0KQogCQkJCQkJCXJldHVybiAtRU5YSU87Ci0JCQkJCQlzd2l0Y2ggKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMpIHsKKwkJCQkJCXN3aXRjaCAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMpIHsKIAkJCQkJCQljYXNlIE1BVFJPWEZCX1NSQ19OT05FOgogCQkJCQkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMyOgogCQkJCQkJCQlicmVhazsKQEAgLTQ4MCwyMiArNDgwLDIyIEBACiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9Ci0JCQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MucGFuZWxsaW5rKSkgeworCQkJCWlmIChtaW5mby0+ZGV2ZmxhZ3MucGFuZWxsaW5rKSB7CiAJCQkJCWlmICh0bXAgJiBNQVRST1hGQl9PVVRQVVRfQ09OTl9ERlApCiAJCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQkJaWYgKChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpICYmIHRtcCkKKwkJCQkJaWYgKChtaW5mby0+b3V0cHV0c1syXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSAmJiB0bXApCiAJCQkJCQlyZXR1cm4gLUVCVVNZOwogCQkJCX0KIAkJCQljaGFuZ2VzID0gMDsKIAkJCQlmb3IgKG91dCA9IDA7IG91dCA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBvdXQrKykgewogCQkJCQlpZiAodG1wICYgKDEgPDwgb3V0KSkgewotCQkJCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgIT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJCQkJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgIT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CiAJCQkJCQkJY2hhbmdlcyA9IDE7Ci0JCQkJCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMjsKKwkJCQkJCQltaW5mby0+b3V0cHV0c1tvdXRdLnNyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMjsKIAkJCQkJCX0KLQkJCQkJfSBlbHNlIGlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgeworCQkJCQl9IGVsc2UgaWYgKG1pbmZvLT5vdXRwdXRzW291dF0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgewogCQkJCQkJY2hhbmdlcyA9IDE7Ci0JCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7CisJCQkJCQltaW5mby0+b3V0cHV0c1tvdXRdLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOwogCQkJCQl9CiAJCQkJfQogCQkJCWlmICghY2hhbmdlcykKQEAgLTUwOSw3ICs1MDksNyBAQAogCQkJCWludCBvdXQ7CiAKIAkJCQlmb3IgKG91dCA9IDA7IG91dCA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBvdXQrKykgewotCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKKwkJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW291dF0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgewogCQkJCQkJY29ubiB8PSAxIDw8IG91dDsKIAkJCQkJfQogCQkJCX0KQEAgLTUyMyw4ICs1MjMsOCBAQAogCQkJCWludCBvdXQ7CiAKIAkJCQlmb3IgKG91dCA9IDA7IG91dCA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBvdXQrKykgewotCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dCkgewotCQkJCQkJc3dpdGNoIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuc3JjKSB7CisJCQkJCWlmIChtaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dCkgeworCQkJCQkJc3dpdGNoIChtaW5mby0+b3V0cHV0c1tvdXRdLnNyYykgewogCQkJCQkJCWNhc2UgTUFUUk9YRkJfU1JDX05PTkU6CiAJCQkJCQkJY2FzZSBNQVRST1hGQl9TUkNfQ1JUQzI6CiAJCQkJCQkJCXRtcCB8PSAxIDw8IG91dDsKQEAgLTUzMiw5ICs1MzIsOSBAQAogCQkJCQkJfQogCQkJCQl9CiAJCQkJfQotCQkJCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnBhbmVsbGluaykpIHsKKwkJCQlpZiAobWluZm8tPmRldmZsYWdzLnBhbmVsbGluaykgewogCQkJCQl0bXAgJj0gfk1BVFJPWEZCX09VVFBVVF9DT05OX0RGUDsKLQkJCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgeworCQkJCQlpZiAobWluZm8tPm91dHB1dHNbMl0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgewogCQkJCQkJdG1wID0gMDsKIAkJCQkJfQogCQkJCX0KQEAgLTU5NSw3ICs1OTUsOSBAQAogCQkwLCB7MCwwLDAsMCwwfQogfTsKIAotc3RhdGljIGludCBtYXRyb3hmYl9kaF9yZWdpdChDUE1JTkZPIHN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvKiBtMmluZm8pIHsKK3N0YXRpYyBpbnQgbWF0cm94ZmJfZGhfcmVnaXQoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgICAgc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8gKm0yaW5mbykKK3sKICNkZWZpbmUgbWluZm8gKG0yaW5mby0+cHJpbWFyeV9kZXYpCiAJdm9pZCogb2xkY3J0YzI7CiAKQEAgLTYxMSwyMSArNjEzLDIxIEBACiAJaWYgKG1lbSA8IDY0KjEwMjQpCiAJCW1lbSAqPSAxMDI0OwogCW1lbSAmPSB+MHgwMDAwMEZGRjsJLyogUEFHRV9NQVNLPyAqLwotCWlmIChBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpICsgbWVtIDw9IEFDQ0VTU19GQklORk8odmlkZW8ubGVuKSkKLQkJbTJpbmZvLT52aWRlby5vZmZiYXNlID0gQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pIC0gbWVtOwotCWVsc2UgaWYgKEFDQ0VTU19GQklORk8odmlkZW8ubGVuKSA8IG1lbSkgeworCWlmIChtaW5mby0+dmlkZW8ubGVuX3VzYWJsZSArIG1lbSA8PSBtaW5mby0+dmlkZW8ubGVuKQorCQltMmluZm8tPnZpZGVvLm9mZmJhc2UgPSBtaW5mby0+dmlkZW8ubGVuIC0gbWVtOworCWVsc2UgaWYgKG1pbmZvLT52aWRlby5sZW4gPCBtZW0pIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlIHsgLyogY2hlY2sgeXJlcyBvbiBmaXJzdCBoZWFkLi4uICovCiAJCW0yaW5mby0+dmlkZW8uYm9ycm93ZWQgPSBtZW07Ci0JCUFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSkgLT0gbWVtOwotCQltMmluZm8tPnZpZGVvLm9mZmJhc2UgPSBBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpOworCQltaW5mby0+dmlkZW8ubGVuX3VzYWJsZSAtPSBtZW07CisJCW0yaW5mby0+dmlkZW8ub2ZmYmFzZSA9IG1pbmZvLT52aWRlby5sZW5fdXNhYmxlOwogCX0KLQltMmluZm8tPnZpZGVvLmJhc2UgPSBBQ0NFU1NfRkJJTkZPKHZpZGVvLmJhc2UpICsgbTJpbmZvLT52aWRlby5vZmZiYXNlOworCW0yaW5mby0+dmlkZW8uYmFzZSA9IG1pbmZvLT52aWRlby5iYXNlICsgbTJpbmZvLT52aWRlby5vZmZiYXNlOwogCW0yaW5mby0+dmlkZW8ubGVuID0gbTJpbmZvLT52aWRlby5sZW5fdXNhYmxlID0gbTJpbmZvLT52aWRlby5sZW5fbWF4aW11bSA9IG1lbTsKLQltMmluZm8tPnZpZGVvLnZiYXNlLnZhZGRyID0gdmFkZHJfdmEoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSkpICsgbTJpbmZvLT52aWRlby5vZmZiYXNlOwotCW0yaW5mby0+bW1pby5iYXNlID0gQUNDRVNTX0ZCSU5GTyhtbWlvLmJhc2UpOwotCW0yaW5mby0+bW1pby52YmFzZSA9IEFDQ0VTU19GQklORk8obW1pby52YmFzZSk7Ci0JbTJpbmZvLT5tbWlvLmxlbiA9IEFDQ0VTU19GQklORk8obW1pby5sZW4pOworCW0yaW5mby0+dmlkZW8udmJhc2UudmFkZHIgPSB2YWRkcl92YShtaW5mby0+dmlkZW8udmJhc2UpICsgbTJpbmZvLT52aWRlby5vZmZiYXNlOworCW0yaW5mby0+bW1pby5iYXNlID0gbWluZm8tPm1taW8uYmFzZTsKKwltMmluZm8tPm1taW8udmJhc2UgPSBtaW5mby0+bW1pby52YmFzZTsKKwltMmluZm8tPm1taW8ubGVuID0gbWluZm8tPm1taW8ubGVuOwogCiAJbWF0cm94ZmJfZGhfaW5pdF9maXgobTJpbmZvKTsKIAlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJm0yaW5mby0+ZmJjb24pKSB7CkBAIC02MzMsMTAgKzYzNSwxMCBAQAogCX0KIAlpZiAoIW0yaW5mby0+aW5pdGlhbGl6ZWQpCiAJCWZiX3NldF92YXIoJm0yaW5mby0+ZmJjb24sICZtYXRyb3hmYl9kaF9kZWZpbmVkKTsKLQlkb3duX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGNydGMyLmxvY2spKTsKLQlvbGRjcnRjMiA9IEFDQ0VTU19GQklORk8oY3J0YzIuaW5mbyk7Ci0JQUNDRVNTX0ZCSU5GTyhjcnRjMi5pbmZvKSA9IG0yaW5mbzsKLQl1cF93cml0ZSgmQUNDRVNTX0ZCSU5GTyhjcnRjMi5sb2NrKSk7CisJZG93bl93cml0ZSgmbWluZm8tPmNydGMyLmxvY2spOworCW9sZGNydGMyID0gbWluZm8tPmNydGMyLmluZm87CisJbWluZm8tPmNydGMyLmluZm8gPSBtMmluZm87CisJdXBfd3JpdGUoJm1pbmZvLT5jcnRjMi5sb2NrKTsKIAlpZiAob2xkY3J0YzIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtYXRyb3hmYl9jcnRjMjogSW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2sgZmFpbGVkOiBjcnRjMiBhbHJlYWR5IHByZXNlbnQ6ICVwXG4iLAogCQkJb2xkY3J0YzIpOwpAQCAtNjQ5LDEyICs2NTEsMTIgQEAKIAogc3RhdGljIGludCBtYXRyb3hmYl9kaF9yZWdpc3RlcmZiKHN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvKiBtMmluZm8pIHsKICNkZWZpbmUgbWluZm8gKG0yaW5mby0+cHJpbWFyeV9kZXYpCi0JaWYgKG1hdHJveGZiX2RoX3JlZ2l0KFBNSU5GTyBtMmluZm8pKSB7CisJaWYgKG1hdHJveGZiX2RoX3JlZ2l0KG1pbmZvLCBtMmluZm8pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmJfY3J0YzI6IHNlY29uZGFyeSBoZWFkIGZhaWxlZCB0byByZWdpc3RlclxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAibWF0cm94ZmJfY3J0YzI6IHNlY29uZGFyeSBoZWFkIG9mIGZiJXUgd2FzIHJlZ2lzdGVyZWQgYXMgZmIldVxuIiwKLQkJQUNDRVNTX0ZCSU5GTyhmYmNvbi5ub2RlKSwgbTJpbmZvLT5mYmNvbi5ub2RlKTsKKwkJbWluZm8tPmZiY29uLm5vZGUsIG0yaW5mby0+ZmJjb24ubm9kZSk7CiAJbTJpbmZvLT5mYmNvbl9yZWdpc3RlcmVkID0gMTsKIAlyZXR1cm4gMDsKICN1bmRlZiBtaW5mbwpAQCAtNjY2LDExICs2NjgsMTEgQEAKIAkJaW50IGlkOwogCQlzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbyogY3J0YzI7CiAKLQkJZG93bl93cml0ZSgmQUNDRVNTX0ZCSU5GTyhjcnRjMi5sb2NrKSk7Ci0JCWNydGMyID0gQUNDRVNTX0ZCSU5GTyhjcnRjMi5pbmZvKTsKKwkJZG93bl93cml0ZSgmbWluZm8tPmNydGMyLmxvY2spOworCQljcnRjMiA9IG1pbmZvLT5jcnRjMi5pbmZvOwogCQlpZiAoY3J0YzIgPT0gbTJpbmZvKQotCQkJQUNDRVNTX0ZCSU5GTyhjcnRjMi5pbmZvKSA9IE5VTEw7Ci0JCXVwX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGNydGMyLmxvY2spKTsKKwkJCW1pbmZvLT5jcnRjMi5pbmZvID0gTlVMTDsKKwkJdXBfd3JpdGUoJm1pbmZvLT5jcnRjMi5sb2NrKTsKIAkJaWYgKGNydGMyICE9IG0yaW5mbykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtYXRyb3hmYl9jcnRjMjogSW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2sgZmFpbGVkOiBjcnRjMiBtaXNtYXRjaCBhdCB1bmxvYWQ6ICVwICE9ICVwXG4iLAogCQkJCWNydGMyLCBtMmluZm8pOwpAQCAtNjgwLDcgKzY4Miw3IEBACiAJCWlkID0gbTJpbmZvLT5mYmNvbi5ub2RlOwogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZtMmluZm8tPmZiY29uKTsKIAkJLyogcmV0dXJuIG1lbW9yeSBiYWNrIHRvIHByaW1hcnkgaGVhZCAqLwotCQlBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpICs9IG0yaW5mby0+dmlkZW8uYm9ycm93ZWQ7CisJCW1pbmZvLT52aWRlby5sZW5fdXNhYmxlICs9IG0yaW5mby0+dmlkZW8uYm9ycm93ZWQ7CiAJCXByaW50ayhLRVJOX0lORk8gIm1hdHJveGZiX2NydGMyOiBmYiV1IHVucmVnaXN0ZXJlZFxuIiwgaWQpOwogCQltMmluZm8tPmZiY29uX3JlZ2lzdGVyZWQgPSAwOwogCX0KQEAgLTY5MSwxNCArNjkzLDE0IEBACiAJc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIG0yaW5mbzsKIAogCS8qIGhhcmR3YXJlIGlzIENSVEMyIGluY2FwYWJsZS4uLiAqLwotCWlmICghQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5jcnRjMikpCisJaWYgKCFtaW5mby0+ZGV2ZmxhZ3MuY3J0YzIpCiAJCXJldHVybiBOVUxMOwogCW0yaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCptMmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW0yaW5mbykgewogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiX2NydGMyOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgQ1JUQzIgY29udHJvbCBzdHJ1Y3RzXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW0yaW5mby0+cHJpbWFyeV9kZXYgPSBNSU5GTzsKKwltMmluZm8tPnByaW1hcnlfZGV2ID0gbWluZm87CiAJaWYgKG1hdHJveGZiX2RoX3JlZ2lzdGVyZmIobTJpbmZvKSkgewogCQlrZnJlZShtMmluZm8pOwogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiX2NydGMyOiBDUlRDMiBmcmFtZWJ1ZmZlciBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfZzQ1MC5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfZzQ1MC5jCmluZGV4IDYyMDlhNzYuLmNmZjA1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2c0NTAuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9nNDUwLmMKQEAgLTgwLDUyICs4MCw1OSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW5saW5lIGludCogZ2V0X2N0cmxfcHRyKFdQTUlORk8gdW5zaWduZWQgaW50IGlkeCkgewotCXJldHVybiAoaW50KikoKGNoYXIqKU1JTkZPICsgZzQ1MF9jb250cm9sc1tpZHhdLmNvbnRyb2wpOworc3RhdGljIGlubGluZSBpbnQgKmdldF9jdHJsX3B0cihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXJldHVybiAoaW50KikoKGNoYXIqKW1pbmZvICsgZzQ1MF9jb250cm9sc1tpZHhdLmNvbnRyb2wpOwogfQogCi1zdGF0aWMgdm9pZCB0dm9fZmlsbF9kZWZhdWx0cyhXUE1JTkZPMikgeworc3RhdGljIHZvaWQgdHZvX2ZpbGxfZGVmYXVsdHMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAl1bnNpZ25lZCBpbnQgaTsKIAkKIAlmb3IgKGkgPSAwOyBpIDwgRzQ1MENUUkxTOyBpKyspIHsKLQkJKmdldF9jdHJsX3B0cihQTUlORk8gaSkgPSBnNDUwX2NvbnRyb2xzW2ldLmRlc2MuZGVmYXVsdF92YWx1ZTsKKwkJKmdldF9jdHJsX3B0cihtaW5mbywgaSkgPSBnNDUwX2NvbnRyb2xzW2ldLmRlc2MuZGVmYXVsdF92YWx1ZTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY3ZlMl9nZXRfcmVnKFdQTUlORk8gaW50IHJlZykgeworc3RhdGljIGludCBjdmUyX2dldF9yZWcoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHJlZykKK3sKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB2YWw7CiAJCiAJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7Ci0JbWF0cm94ZmJfREFDX291dChQTUlORk8gMHg4NywgcmVnKTsKLQl2YWwgPSBtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIDB4ODgpOworCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIDB4ODcsIHJlZyk7CisJdmFsID0gbWF0cm94ZmJfREFDX2luKG1pbmZvLCAweDg4KTsKIAltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGN2ZTJfc2V0X3JlZyhXUE1JTkZPIGludCByZWcsIGludCB2YWwpIHsKK3N0YXRpYyB2b2lkIGN2ZTJfc2V0X3JlZyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgcmVnLCBpbnQgdmFsKQorewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyAweDg3LCByZWcpOwotCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIDB4ODgsIHZhbCk7CisJbWF0cm94ZmJfREFDX291dChtaW5mbywgMHg4NywgcmVnKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCAweDg4LCB2YWwpOwogCW1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGN2ZTJfc2V0X3JlZzEwKFdQTUlORk8gaW50IHJlZywgaW50IHZhbCkgeworc3RhdGljIHZvaWQgY3ZlMl9zZXRfcmVnMTAoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHJlZywgaW50IHZhbCkKK3sKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7Ci0JbWF0cm94ZmJfREFDX291dChQTUlORk8gMHg4NywgcmVnKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyAweDg4LCB2YWwgPj4gMik7Ci0JbWF0cm94ZmJfREFDX291dChQTUlORk8gMHg4NywgcmVnICsgMSk7Ci0JbWF0cm94ZmJfREFDX291dChQTUlORk8gMHg4OCwgdmFsICYgMyk7CisJbWF0cm94ZmJfREFDX291dChtaW5mbywgMHg4NywgcmVnKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCAweDg4LCB2YWwgPj4gMik7CisJbWF0cm94ZmJfREFDX291dChtaW5mbywgMHg4NywgcmVnICsgMSk7CisJbWF0cm94ZmJfREFDX291dChtaW5mbywgMHg4OCwgdmFsICYgMyk7CiAJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgZzQ1MF9jb21wdXRlX2J3bGV2ZWwoQ1BNSU5GTyBpbnQgKmJsLCBpbnQgKndsKSB7Ci0JY29uc3QgaW50IGIgPSBBQ0NFU1NfRkJJTkZPKGFsdG91dC50dm9fcGFyYW1zLmJyaWdodG5lc3MpICsgQkxNSU47Ci0JY29uc3QgaW50IGMgPSBBQ0NFU1NfRkJJTkZPKGFsdG91dC50dm9fcGFyYW1zLmNvbnRyYXN0KTsKK3N0YXRpYyB2b2lkIGc0NTBfY29tcHV0ZV9id2xldmVsKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCAqYmwsCisJCQkJIGludCAqd2wpCit7CisJY29uc3QgaW50IGIgPSBtaW5mby0+YWx0b3V0LnR2b19wYXJhbXMuYnJpZ2h0bmVzcyArIEJMTUlOOworCWNvbnN0IGludCBjID0gbWluZm8tPmFsdG91dC50dm9fcGFyYW1zLmNvbnRyYXN0OwogCiAJKmJsID0gbWF4KGIgLSBjLCBCTE1JTik7CiAJKndsID0gbWluKGIgKyBjLCBXTE1BWCk7CkBAIC0xNTQsNyArMTYxLDcgQEAKIAogc3RhdGljIGludCBnNDUwX3NldF9jdHJsKHZvaWQqIG1kLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpwKSB7CiAJaW50IGk7Ci0JTUlORk9fRlJPTShtZCk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG1kOwogCQogCWkgPSBnZXRfY3RybF9pZChwLT5pZCk7CiAJaWYgKGkgPCAwKSByZXR1cm4gLUVJTlZBTDsKQEAgLTE2Miw3ICsxNjksNyBAQAogCS8qCiAJICogQ2hlY2sgaWYgY2hhbmdlZC4KIAkgKi8KLQlpZiAocC0+dmFsdWUgPT0gKmdldF9jdHJsX3B0cihQTUlORk8gaSkpIHJldHVybiAwOworCWlmIChwLT52YWx1ZSA9PSAqZ2V0X2N0cmxfcHRyKG1pbmZvLCBpKSkgcmV0dXJuIDA7CiAKIAkvKgogCSAqIENoZWNrIGxpbWl0cy4KQEAgLTE3MywzMSArMTgwLDMxIEBACiAJLyoKIAkgKiBTdG9yZSBuZXcgdmFsdWUuCiAJICovCi0JKmdldF9jdHJsX3B0cihQTUlORk8gaSkgPSBwLT52YWx1ZTsKKwkqZ2V0X2N0cmxfcHRyKG1pbmZvLCBpKSA9IHAtPnZhbHVlOwogCiAJc3dpdGNoIChwLT5pZCkgewogCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CiAJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJCQl7CiAJCQkJaW50IGJsYWNrbGV2ZWwsIHdoaXRlbGV2ZWw7Ci0JCQkJZzQ1MF9jb21wdXRlX2J3bGV2ZWwoUE1JTkZPICZibGFja2xldmVsLCAmd2hpdGVsZXZlbCk7Ci0JCQkJY3ZlMl9zZXRfcmVnMTAoUE1JTkZPIDB4MGUsIGJsYWNrbGV2ZWwpOwotCQkJCWN2ZTJfc2V0X3JlZzEwKFBNSU5GTyAweDFlLCB3aGl0ZWxldmVsKTsKKwkJCQlnNDUwX2NvbXB1dGVfYndsZXZlbChtaW5mbywgJmJsYWNrbGV2ZWwsICZ3aGl0ZWxldmVsKTsKKwkJCQljdmUyX3NldF9yZWcxMChtaW5mbywgMHgwZSwgYmxhY2tsZXZlbCk7CisJCQkJY3ZlMl9zZXRfcmVnMTAobWluZm8sIDB4MWUsIHdoaXRlbGV2ZWwpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCWN2ZTJfc2V0X3JlZyhQTUlORk8gMHgyMCwgcC0+dmFsdWUpOwotCQkJY3ZlMl9zZXRfcmVnKFBNSU5GTyAweDIyLCBwLT52YWx1ZSk7CisJCQljdmUyX3NldF9yZWcobWluZm8sIDB4MjAsIHAtPnZhbHVlKTsKKwkJCWN2ZTJfc2V0X3JlZyhtaW5mbywgMHgyMiwgcC0+dmFsdWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJY3ZlMl9zZXRfcmVnKFBNSU5GTyAweDI1LCBwLT52YWx1ZSk7CisJCQljdmUyX3NldF9yZWcobWluZm8sIDB4MjUsIHAtPnZhbHVlKTsKIAkJCWJyZWFrOwogCQljYXNlIE1BVFJPWEZCX0NJRF9URVNUT1VUOgogCQkJewotCQkJCXVuc2lnbmVkIGNoYXIgdmFsID0gY3ZlMl9nZXRfcmVnIChQTUlORk8gMHgwNSk7CisJCQkJdW5zaWduZWQgY2hhciB2YWwgPSBjdmUyX2dldF9yZWcobWluZm8sIDB4MDUpOwogCQkJCWlmIChwLT52YWx1ZSkgdmFsIHw9ICAweDAyOwogCQkJCWVsc2UgICAgICAgICAgdmFsICY9IH4weDAyOwotCQkJCWN2ZTJfc2V0X3JlZyhQTUlORk8gMHgwNSwgdmFsKTsKKwkJCQljdmUyX3NldF9yZWcobWluZm8sIDB4MDUsIHZhbCk7CiAJCQl9CiAJCQlicmVhazsKIAl9CkBAIC0yMDgsMTEgKzIxNSwxMSBAQAogCiBzdGF0aWMgaW50IGc0NTBfZ2V0X2N0cmwodm9pZCogbWQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKnApIHsKIAlpbnQgaTsKLQlNSU5GT19GUk9NKG1kKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQ7CiAJCiAJaSA9IGdldF9jdHJsX2lkKHAtPmlkKTsKIAlpZiAoaSA8IDApIHJldHVybiAtRUlOVkFMOwotCXAtPnZhbHVlID0gKmdldF9jdHJsX3B0cihQTUlORk8gaSk7CisJcC0+dmFsdWUgPSAqZ2V0X2N0cmxfcHRyKG1pbmZvLCBpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDcgKzIzMyw5IEBACiAJdW5zaWduZWQgaW50CXZfdG90YWw7CiB9OwogCi1zdGF0aWMgdm9pZCBjb21wdXRlUmVncyhXUE1JTkZPIHN0cnVjdCBtYXZlbnJlZ3MqIHIsIHN0cnVjdCBteV90aW1taW5nKiBtdCwgY29uc3Qgc3RydWN0IG91dHB1dF9kZXNjKiBvdXRkKSB7CitzdGF0aWMgdm9pZCBjb21wdXRlUmVncyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBzdHJ1Y3QgbWF2ZW5yZWdzICpyLAorCQkJc3RydWN0IG15X3RpbW1pbmcgKm10LCBjb25zdCBzdHJ1Y3Qgb3V0cHV0X2Rlc2MgKm91dGQpCit7CiAJdV9pbnQzMl90IGNocm9tYXNjOwogCXVfaW50MzJfdCBobGVuOwogCXVfaW50MzJfdCBoc2w7CkBAIC0yNTEsMTAgKzI2MCwxMCBAQAogCiAJZHByaW50ayhLRVJOX0RFQlVHICJXYW50ICV1IGtIeiBwaXhjbG9ja1xuIiwgKHVuc2lnbmVkIGludClwaWljKTsKIAkKLQltbnAgPSBtYXRyb3hmYl9nNDUwX3NldGNsayhQTUlORk8gcGlpYywgTV9WSURFT19QTEwpOworCW1ucCA9IG1hdHJveGZiX2c0NTBfc2V0Y2xrKG1pbmZvLCBwaWljLCBNX1ZJREVPX1BMTCk7CiAJCiAJbXQtPm1ucCA9IG1ucDsKLQltdC0+cGl4Y2xvY2sgPSBnNDUwX21ucDJmKFBNSU5GTyBtbnApOworCW10LT5waXhjbG9jayA9IGc0NTBfbW5wMmYobWluZm8sIG1ucCk7CiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIk1OUD0lMDhYXG4iLCBtbnApOwogCkBAIC00OTAsNjUgKzQ5OSw2NyBAQAogIAlyZXR1cm47CiB9CiAKLSNkZWZpbmUgTFIoeCkgY3ZlMl9zZXRfcmVnKFBNSU5GTyAoeCksIG0tPnJlZ3NbKHgpXSkKLXN0YXRpYyB2b2lkIGN2ZTJfaW5pdF9UVihXUE1JTkZPIGNvbnN0IHN0cnVjdCBtYXZlbnJlZ3MqIG0pIHsKKyNkZWZpbmUgTFIoeCkgY3ZlMl9zZXRfcmVnKG1pbmZvLCAoeCksIG0tPnJlZ3NbKHgpXSkKK3N0YXRpYyB2b2lkIGN2ZTJfaW5pdF9UVihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJIGNvbnN0IHN0cnVjdCBtYXZlbnJlZ3MgKm0pCit7CiAJaW50IGk7CiAKIAlMUigweDgwKTsKIAlMUigweDgyKTsgTFIoMHg4Myk7CiAJTFIoMHg4NCk7IExSKDB4ODUpOwogCQotCWN2ZTJfc2V0X3JlZyhQTUlORk8gMHgzRSwgMHgwMSk7CisJY3ZlMl9zZXRfcmVnKG1pbmZvLCAweDNFLCAweDAxKTsKIAkKIAlmb3IgKGkgPSAwOyBpIDwgMHgzRTsgaSsrKSB7CiAJCUxSKGkpOwogCX0KLQljdmUyX3NldF9yZWcoUE1JTkZPIDB4M0UsIDB4MDApOworCWN2ZTJfc2V0X3JlZyhtaW5mbywgMHgzRSwgMHgwMCk7CiB9CiAKIHN0YXRpYyBpbnQgbWF0cm94ZmJfZzQ1MF9jb21wdXRlKHZvaWQqIG1kLCBzdHJ1Y3QgbXlfdGltbWluZyogbXQpIHsKLQlNSU5GT19GUk9NKG1kKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQ7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIkNvbXB1dGluZywgbW9kZT0ldVxuIiwgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlKTsKKwlkcHJpbnRrKEtFUk5fREVCVUcgIkNvbXB1dGluZywgbW9kZT0ldVxuIiwgbWluZm8tPm91dHB1dHNbMV0ubW9kZSk7CiAKIAlpZiAobXQtPmNydGMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyICYmCi0JICAgIEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkubW9kZSAhPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SKSB7CisJICAgIG1pbmZvLT5vdXRwdXRzWzFdLm1vZGUgIT0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUikgewogCQljb25zdCBzdHJ1Y3Qgb3V0cHV0X2Rlc2MqIG91dGQ7CiAKLQkJY3ZlMl9pbml0X1RWZGF0YShBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm1vZGUsICZBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbiwgJm91dGQpOworCQljdmUyX2luaXRfVFZkYXRhKG1pbmZvLT5vdXRwdXRzWzFdLm1vZGUsICZtaW5mby0+aHcubWF2ZW4sICZvdXRkKTsKIAkJewogCQkJaW50IGJsYWNrbGV2ZWwsIHdoaXRlbGV2ZWw7Ci0JCQlnNDUwX2NvbXB1dGVfYndsZXZlbChQTUlORk8gJmJsYWNrbGV2ZWwsICZ3aGl0ZWxldmVsKTsKLQkJCUFDQ0VTU19GQklORk8oaHcpLm1hdmVuLnJlZ3NbMHgwRV0gPSBibGFja2xldmVsID4+IDI7Ci0JCQlBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbi5yZWdzWzB4MEZdID0gYmxhY2tsZXZlbCAmIDM7Ci0JCQlBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbi5yZWdzWzB4MUVdID0gd2hpdGVsZXZlbCA+PiAyOwotCQkJQUNDRVNTX0ZCSU5GTyhodykubWF2ZW4ucmVnc1sweDFGXSA9IHdoaXRlbGV2ZWwgJiAzOworCQkJZzQ1MF9jb21wdXRlX2J3bGV2ZWwobWluZm8sICZibGFja2xldmVsLCAmd2hpdGVsZXZlbCk7CisJCQltaW5mby0+aHcubWF2ZW4ucmVnc1sweDBFXSA9IGJsYWNrbGV2ZWwgPj4gMjsKKwkJCW1pbmZvLT5ody5tYXZlbi5yZWdzWzB4MEZdID0gYmxhY2tsZXZlbCAmIDM7CisJCQltaW5mby0+aHcubWF2ZW4ucmVnc1sweDFFXSA9IHdoaXRlbGV2ZWwgPj4gMjsKKwkJCW1pbmZvLT5ody5tYXZlbi5yZWdzWzB4MUZdID0gd2hpdGVsZXZlbCAmIDM7CiAKLQkJCUFDQ0VTU19GQklORk8oaHcpLm1hdmVuLnJlZ3NbMHgyMF0gPQotCQkJQUNDRVNTX0ZCSU5GTyhodykubWF2ZW4ucmVnc1sweDIyXSA9IEFDQ0VTU19GQklORk8oYWx0b3V0LnR2b19wYXJhbXMuc2F0dXJhdGlvbik7CisJCQltaW5mby0+aHcubWF2ZW4ucmVnc1sweDIwXSA9CisJCQltaW5mby0+aHcubWF2ZW4ucmVnc1sweDIyXSA9IG1pbmZvLT5hbHRvdXQudHZvX3BhcmFtcy5zYXR1cmF0aW9uOwogCi0JCQlBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbi5yZWdzWzB4MjVdID0gQUNDRVNTX0ZCSU5GTyhhbHRvdXQudHZvX3BhcmFtcy5odWUpOworCQkJbWluZm8tPmh3Lm1hdmVuLnJlZ3NbMHgyNV0gPSBtaW5mby0+YWx0b3V0LnR2b19wYXJhbXMuaHVlOwogCi0JCQlpZiAoQUNDRVNTX0ZCSU5GTyhhbHRvdXQudHZvX3BhcmFtcy50ZXN0b3V0KSkgewotCQkJCUFDQ0VTU19GQklORk8oaHcpLm1hdmVuLnJlZ3NbMHgwNV0gfD0gMHgwMjsKKwkJCWlmIChtaW5mby0+YWx0b3V0LnR2b19wYXJhbXMudGVzdG91dCkgeworCQkJCW1pbmZvLT5ody5tYXZlbi5yZWdzWzB4MDVdIHw9IDB4MDI7CiAJCQl9CiAJCX0KLQkJY29tcHV0ZVJlZ3MoUE1JTkZPICZBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbiwgbXQsIG91dGQpOworCQljb21wdXRlUmVncyhtaW5mbywgJm1pbmZvLT5ody5tYXZlbiwgbXQsIG91dGQpOwogCX0gZWxzZSBpZiAobXQtPm1ucCA8IDApIHsKIAkJLyogV2UgbXVzdCBwcm9ncmFtIGNsb2NrcyBiZWZvcmUgQ1JUQzIsIG90aGVyd2lzZSBpbnRlcmxhY2VkIG1vZGUKIAkJICAgc3RhcnR1cCBtYXkgZmFpbCAqLwotCQltdC0+bW5wID0gbWF0cm94ZmJfZzQ1MF9zZXRjbGsoUE1JTkZPIG10LT5waXhjbG9jaywgKG10LT5jcnRjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgPyBNX1BJWEVMX1BMTF9DIDogTV9WSURFT19QTEwpOwotCQltdC0+cGl4Y2xvY2sgPSBnNDUwX21ucDJmKFBNSU5GTyBtdC0+bW5wKTsKKwkJbXQtPm1ucCA9IG1hdHJveGZiX2c0NTBfc2V0Y2xrKG1pbmZvLCBtdC0+cGl4Y2xvY2ssIChtdC0+Y3J0YyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpID8gTV9QSVhFTF9QTExfQyA6IE1fVklERU9fUExMKTsKKwkJbXQtPnBpeGNsb2NrID0gZzQ1MF9tbnAyZihtaW5mbywgbXQtPm1ucCk7CiAJfQogCWRwcmludGsoS0VSTl9ERUJVRyAiUGl4Y2xvY2sgPSAldVxuIiwgbXQtPnBpeGNsb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtYXRyb3hmYl9nNDUwX3Byb2dyYW0odm9pZCogbWQpIHsKLQlNSU5GT19GUk9NKG1kKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQ7CiAJCi0JaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkubW9kZSAhPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SKSB7Ci0JCWN2ZTJfaW5pdF9UVihQTUlORk8gJkFDQ0VTU19GQklORk8oaHcpLm1hdmVuKTsKKwlpZiAobWluZm8tPm91dHB1dHNbMV0ubW9kZSAhPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SKSB7CisJCWN2ZTJfaW5pdF9UVihtaW5mbywgJm1pbmZvLT5ody5tYXZlbik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTY0LDExICs1NzUsMTEgQEAKIH0KIAogc3RhdGljIGludCBnNDUwX2R2aV9jb21wdXRlKHZvaWQqIG1kLCBzdHJ1Y3QgbXlfdGltbWluZyogbXQpIHsKLQlNSU5GT19GUk9NKG1kKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQ7CiAKIAlpZiAobXQtPm1ucCA8IDApIHsKLQkJbXQtPm1ucCA9IG1hdHJveGZiX2c0NTBfc2V0Y2xrKFBNSU5GTyBtdC0+cGl4Y2xvY2ssIChtdC0+Y3J0YyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpID8gTV9QSVhFTF9QTExfQyA6IE1fVklERU9fUExMKTsKLQkJbXQtPnBpeGNsb2NrID0gZzQ1MF9tbnAyZihQTUlORk8gbXQtPm1ucCk7CisJCW10LT5tbnAgPSBtYXRyb3hmYl9nNDUwX3NldGNsayhtaW5mbywgbXQtPnBpeGNsb2NrLCAobXQtPmNydGMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSA/IE1fUElYRUxfUExMX0MgOiBNX1ZJREVPX1BMTCk7CisJCW10LT5waXhjbG9jayA9IGc0NTBfbW5wMmYobWluZm8sIG10LT5tbnApOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU4OCwzNCArNTk5LDM2IEBACiAJLmNvbXB1dGUJPSBnNDUwX2R2aV9jb21wdXRlLAogfTsKIAotdm9pZCBtYXRyb3hmYl9nNDUwX2Nvbm5lY3QoV1BNSU5GTzIpIHsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgewotCQlkb3duX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7Ci0JCXR2b19maWxsX2RlZmF1bHRzKFBNSU5GTzIpOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLnNyYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuZGVmYXVsdF9zcmM7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuZGF0YSA9IE1JTkZPOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dCA9ICZtYXRyb3hmYl9nNDUwX2FsdG91dDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5zcmMgPSBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLmRlZmF1bHRfc3JjOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLmRhdGEgPSBNSU5GTzsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5vdXRwdXQgPSAmbWF0cm94ZmJfZzQ1MF9kdmk7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7Ci0JCXVwX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7Cit2b2lkIG1hdHJveGZiX2c0NTBfY29ubmVjdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQoreworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgeworCQlkb3duX3dyaXRlKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQl0dm9fZmlsbF9kZWZhdWx0cyhtaW5mbyk7CisJCW1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9IG1pbmZvLT5vdXRwdXRzWzFdLmRlZmF1bHRfc3JjOworCQltaW5mby0+b3V0cHV0c1sxXS5kYXRhID0gbWluZm87CisJCW1pbmZvLT5vdXRwdXRzWzFdLm91dHB1dCA9ICZtYXRyb3hmYl9nNDUwX2FsdG91dDsKKwkJbWluZm8tPm91dHB1dHNbMV0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJCW1pbmZvLT5vdXRwdXRzWzJdLnNyYyA9IG1pbmZvLT5vdXRwdXRzWzJdLmRlZmF1bHRfc3JjOworCQltaW5mby0+b3V0cHV0c1syXS5kYXRhID0gbWluZm87CisJCW1pbmZvLT5vdXRwdXRzWzJdLm91dHB1dCA9ICZtYXRyb3hmYl9nNDUwX2R2aTsKKwkJbWluZm8tPm91dHB1dHNbMl0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJCXVwX3dyaXRlKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCX0KIH0KIAotdm9pZCBtYXRyb3hmYl9nNDUwX3NodXRkb3duKFdQTUlORk8yKSB7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZzQ1MGRhYykpIHsKLQkJZG93bl93cml0ZSgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dCA9IE5VTEw7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuZGF0YSA9IE5VTEw7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkub3V0cHV0ID0gTlVMTDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5kYXRhID0gTlVMTDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKLQkJdXBfd3JpdGUoJkFDQ0VTU19GQklORk8oYWx0b3V0LmxvY2spKTsKK3ZvaWQgbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQoreworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgeworCQlkb3duX3dyaXRlKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQltaW5mby0+b3V0cHV0c1sxXS5zcmMgPSBNQVRST1hGQl9TUkNfTk9ORTsKKwkJbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0ID0gTlVMTDsKKwkJbWluZm8tPm91dHB1dHNbMV0uZGF0YSA9IE5VTEw7CisJCW1pbmZvLT5vdXRwdXRzWzFdLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOworCQltaW5mby0+b3V0cHV0c1syXS5zcmMgPSBNQVRST1hGQl9TUkNfTk9ORTsKKwkJbWluZm8tPm91dHB1dHNbMl0ub3V0cHV0ID0gTlVMTDsKKwkJbWluZm8tPm91dHB1dHNbMl0uZGF0YSA9IE5VTEw7CisJCW1pbmZvLT5vdXRwdXRzWzJdLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOworCQl1cF93cml0ZSgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2c0NTAuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2c0NTAuaAppbmRleCBhMDgyMmE2Li4zYTNlNjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9nNDUwLmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfZzQ1MC5oCkBAIC00LDExICs0LDExIEBACiAjaW5jbHVkZSAibWF0cm94ZmJfYmFzZS5oIgogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9HCi12b2lkIG1hdHJveGZiX2c0NTBfY29ubmVjdChXUE1JTkZPMik7Ci12b2lkIG1hdHJveGZiX2c0NTBfc2h1dGRvd24oV1BNSU5GTzIpOwordm9pZCBtYXRyb3hmYl9nNDUwX2Nvbm5lY3Qoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7Cit2b2lkIG1hdHJveGZiX2c0NTBfc2h1dGRvd24oc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG1hdHJveGZiX2c0NTBfY29ubmVjdChXUE1JTkZPMikgeyB9Owotc3RhdGljIGlubGluZSB2b2lkIG1hdHJveGZiX2c0NTBfc2h1dGRvd24oV1BNSU5GTzIpIHsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXRyb3hmYl9nNDUwX2Nvbm5lY3Qoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykgeyB9Oworc3RhdGljIGlubGluZSB2b2lkIG1hdHJveGZiX2c0NTBfc2h1dGRvd24oc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykgeyB9OwogI2VuZGlmCiAKICNlbmRpZiAvKiBfX01BVFJPWEZCX0c0NTBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9tYXZlbi5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWF2ZW4uYwppbmRleCAwNDI0MDhhLi45MWFmOTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9tYXZlbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21hdmVuLmMKQEAgLTQ1OCw5ICs0NTgsOSBAQAogCQkweDAwLAkvKiAzRSB3cml0dGVuIG11bHRpcGxlIHRpbWVzICovCiAJCTB4MDAsCS8qIG5ldmVyIHdyaXR0ZW4gKi8KIAl9LCBNQVRST1hGQl9PVVRQVVRfTU9ERV9OVFNDLCA1MjUsIDYwIH07Ci0JTUlORk9fRlJPTShtZC0+cHJpbWFyeV9oZWFkKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQtPnByaW1hcnlfaGVhZDsKIAotCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm1vZGUgPT0gTUFUUk9YRkJfT1VUUFVUX01PREVfUEFMKQorCWlmIChtaW5mby0+b3V0cHV0c1sxXS5tb2RlID09IE1BVFJPWEZCX09VVFBVVF9NT0RFX1BBTCkKIAkJKmRhdGEgPSBwYWxyZWdzOwogCWVsc2UKIAkJKmRhdGEgPSBudHNjcmVnczsKQEAgLTQ5NiwxMSArNDk2LDExIEBACiAJLyogU2V0IHNhdHVyYXRpb24gKi8KIAl7CiAJCWRhdGEtPnJlZ3NbMHgyMF0gPQotCQlkYXRhLT5yZWdzWzB4MjJdID0gQUNDRVNTX0ZCSU5GTyhhbHRvdXQudHZvX3BhcmFtcy5zYXR1cmF0aW9uKTsKKwkJZGF0YS0+cmVnc1sweDIyXSA9IG1pbmZvLT5hbHRvdXQudHZvX3BhcmFtcy5zYXR1cmF0aW9uOwogCX0KICAKIAkvKiBTZXQgSFVFICovCi0JZGF0YS0+cmVnc1sweDI1XSA9IEFDQ0VTU19GQklORk8oYWx0b3V0LnR2b19wYXJhbXMuaHVlKTsKKwlkYXRhLT5yZWdzWzB4MjVdID0gbWluZm8tPmFsdG91dC50dm9fcGFyYW1zLmh1ZTsKIAlyZXR1cm47CiB9CiAKQEAgLTc0MSw5ICs3NDEsOSBAQAogCQlzdHJ1Y3QgbWF2ZW5yZWdzKiBtKSB7CiAJdW5zaWduZWQgaW50IHRtcGk7CiAJdW5zaWduZWQgaW50IGEsIGJ2LCBjOwotCU1JTkZPX0ZST00obWQtPnByaW1hcnlfaGVhZCk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG1kLT5wcmltYXJ5X2hlYWQ7CiAKLQltLT5tb2RlID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlOworCW0tPm1vZGUgPSBtaW5mby0+b3V0cHV0c1sxXS5tb2RlOwogCWlmIChtLT5tb2RlICE9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKIAkJdW5zaWduZWQgaW50IGxtYXJnaW47CiAJCXVuc2lnbmVkIGludCB1bWFyZ2luOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAKIHN0YXRpYyBpbnQgbWF2ZW5fb3V0X2NvbXB1dGUodm9pZCogbWQsIHN0cnVjdCBteV90aW1taW5nKiBtdCkgewogI2RlZmluZSBtZGluZm8gKChzdHJ1Y3QgbWF2ZW5fZGF0YSopbWQpCiAjZGVmaW5lIG1pbmZvIChtZGluZm8tPnByaW1hcnlfaGVhZCkKLQlyZXR1cm4gbWF2ZW5fY29tcHV0ZV90aW1taW5nKG1kLCBtdCwgJkFDQ0VTU19GQklORk8oaHcpLm1hdmVuKTsKKwlyZXR1cm4gbWF2ZW5fY29tcHV0ZV90aW1taW5nKG1kLCBtdCwgJm1pbmZvLT5ody5tYXZlbik7CiAjdW5kZWYgbWluZm8KICN1bmRlZiBtZGluZm8KIH0KQEAgLTExNDAsNyArMTE0MCw3IEBACiBzdGF0aWMgaW50IG1hdmVuX291dF9wcm9ncmFtKHZvaWQqIG1kKSB7CiAjZGVmaW5lIG1kaW5mbyAoKHN0cnVjdCBtYXZlbl9kYXRhKiltZCkKICNkZWZpbmUgbWluZm8gKG1kaW5mby0+cHJpbWFyeV9oZWFkKQotCXJldHVybiBtYXZlbl9wcm9ncmFtX3RpbW1pbmcobWQsICZBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbik7CisJcmV0dXJuIG1hdmVuX3Byb2dyYW1fdGltbWluZyhtZCwgJm1pbmZvLT5ody5tYXZlbik7CiAjdW5kZWYgbWluZm8KICN1bmRlZiBtZGluZm8KIH0KQEAgLTExODQsMTYgKzExODQsMTggQEAKIAogc3RhdGljIGludCBtYXZlbl9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCogY2xudCkgewogCXN0cnVjdCBtYXZlbl9kYXRhKiBtZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbG50KTsKLQlNSU5GT19GUk9NKGNvbnRhaW5lcl9vZihjbG50LT5hZGFwdGVyLCBzdHJ1Y3QgaTJjX2JpdF9hZGFwdGVyLCBhZGFwdGVyKS0+bWluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBjb250YWluZXJfb2YoY2xudC0+YWRhcHRlciwKKwkJCQkJCSAgICBzdHJ1Y3QgaTJjX2JpdF9hZGFwdGVyLAorCQkJCQkJICAgIGFkYXB0ZXIpLT5taW5mbzsKIAotCW1kLT5wcmltYXJ5X2hlYWQgPSBNSU5GTzsKKwltZC0+cHJpbWFyeV9oZWFkID0gbWluZm87CiAJbWQtPmNsaWVudCA9IGNsbnQ7Ci0JZG93bl93cml0ZSgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOwotCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0ID0gJm1hdmVuX2FsdG91dDsKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLnNyYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuZGVmYXVsdF9zcmM7Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kYXRhID0gbWQ7Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKLQl1cF93cml0ZSgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOworCWRvd25fd3JpdGUoJm1pbmZvLT5hbHRvdXQubG9jayk7CisJbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0ID0gJm1hdmVuX2FsdG91dDsKKwltaW5mby0+b3V0cHV0c1sxXS5zcmMgPSBtaW5mby0+b3V0cHV0c1sxXS5kZWZhdWx0X3NyYzsKKwltaW5mby0+b3V0cHV0c1sxXS5kYXRhID0gbWQ7CisJbWluZm8tPm91dHB1dHNbMV0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJdXBfd3JpdGUoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJaWYgKG1hdmVuX2dldF9yZWcoY2xudCwgMHhCMikgPCAweDE0KSB7CiAJCW1kLT52ZXJzaW9uID0gTUdBVFZPX0I7CiAJCS8qIFR3ZWFrIHNvbWUgdGhpbmdzIGZvciB0aGlzIG9sZCBjaGlwICovCkBAIC0xMjE4LDE0ICsxMjIwLDE0IEBACiAJc3RydWN0IG1hdmVuX2RhdGEqIG1kID0gaTJjX2dldF9jbGllbnRkYXRhKGNsbnQpOwogCiAJaWYgKG1kLT5wcmltYXJ5X2hlYWQpIHsKLQkJTUlORk9fRlJPTShtZC0+cHJpbWFyeV9oZWFkKTsKKwkJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG1kLT5wcmltYXJ5X2hlYWQ7CiAKLQkJZG93bl93cml0ZSgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dCA9IE5VTEw7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuZGF0YSA9IE5VTEw7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7Ci0JCXVwX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7CisJCWRvd25fd3JpdGUoJm1pbmZvLT5hbHRvdXQubG9jayk7CisJCW1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOworCQltaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQgPSBOVUxMOworCQltaW5mby0+b3V0cHV0c1sxXS5kYXRhID0gTlVMTDsKKwkJbWluZm8tPm91dHB1dHNbMV0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJCXVwX3dyaXRlKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQltZC0+cHJpbWFyeV9oZWFkID0gTlVMTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmMKaW5kZXggNWI1ZjA3Mi4uOTk0OGNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWlzYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuYwpAQCAtODksMTMgKzg5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWF0cm94ZmIuaD4KIAotdm9pZCBtYXRyb3hmYl9EQUNfb3V0KENQTUlORk8gaW50IHJlZywgaW50IHZhbCkgewordm9pZCBtYXRyb3hmYl9EQUNfb3V0KGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCByZWcsIGludCB2YWwpCit7CiAJREJHX1JFRyhfX2Z1bmNfXykKIAltZ2Ffb3V0YihNX1JBTURBQ19CQVNFK01fWF9JTkRFWCwgcmVnKTsKIAltZ2Ffb3V0YihNX1JBTURBQ19CQVNFK01fWF9EQVRBUkVHLCB2YWwpOwogfQogCi1pbnQgbWF0cm94ZmJfREFDX2luKENQTUlORk8gaW50IHJlZykgeworaW50IG1hdHJveGZiX0RBQ19pbihjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgcmVnKQorewogCURCR19SRUcoX19mdW5jX18pCiAJbWdhX291dGIoTV9SQU1EQUNfQkFTRStNX1hfSU5ERVgsIHJlZyk7CiAJcmV0dXJuIG1nYV9pbmIoTV9SQU1EQUNfQkFTRStNX1hfREFUQVJFRyk7CkBAIC0xODQsMTMgKzE4NiwxNCBAQAogCXJldHVybiBiZXN0dmNvOwogfQogCi1pbnQgbWF0cm94ZmJfdmdhSFdpbml0KFdQTUlORk8gc3RydWN0IG15X3RpbW1pbmcqIG0pIHsKK2ludCBtYXRyb3hmYl92Z2FIV2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgc3RydWN0IG15X3RpbW1pbmcgKm0pCit7CiAJdW5zaWduZWQgaW50IGhkLCBocywgaGUsIGhiZSwgaHQ7CiAJdW5zaWduZWQgaW50IHZkLCB2cywgdmUsIHZ0LCBsYzsKIAl1bnNpZ25lZCBpbnQgd2Q7CiAJdW5zaWduZWQgaW50IGRpdmlkZXI7CiAJaW50IGk7Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSAqIGNvbnN0IGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKiBjb25zdCBodyA9ICZtaW5mby0+aHc7CiAKIAlEQkcoX19mdW5jX18pCiAKQEAgLTI0MCw3ICsyNDMsNyBAQAogCS8qIHN0YW5kYXJkIHRpbW1pbmdzIGFyZSBpbiA4cGl4ZWxzLCBidXQgZm9yIGludGVybGVhdmVkIHdlIGNhbm5vdCAqLwogCS8qIGRvIGl0IGZvciA0YnBwIChiZWNhdXNlIG9mICg0YnBwID4+IDEoaW50ZXJsZWF2ZWQpKS80ID09IDApICovCiAJLyogdXNpbmcgMTYgb3IgbW9yZSBwaXhlbHMgcGVyIHVuaXQgY2FuIHNhdmUgdXMgKi8KLQlkaXZpZGVyID0gQUNDRVNTX0ZCSU5GTyhjdXJyLmZpbmFsX2JwcFNoaWZ0KTsKKwlkaXZpZGVyID0gbWluZm8tPmN1cnIuZmluYWxfYnBwU2hpZnQ7CiAJd2hpbGUgKGRpdmlkZXIgJiAzKSB7CiAJCWhkID4+PSAxOwogCQlocyA+Pj0gMTsKQEAgLTI3MCw3ICsyNzMsNyBAQAogCWlmICgoKGh0ICYgMHgwNykgPT0gMHgwNikgfHwgKChodCAmIDB4MEYpID09IDB4MDQpKQogCQlodCsrOwogCWhiZSA9IGh0OwotCXdkID0gQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnhyZXNfdmlydHVhbCAqIEFDQ0VTU19GQklORk8oY3Vyci5maW5hbF9icHBTaGlmdCkgLyA2NDsKKwl3ZCA9IG1pbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsICogbWluZm8tPmN1cnIuZmluYWxfYnBwU2hpZnQgLyA2NDsKIAogCWh3LT5DUlRDRVhUWzBdID0gMDsKIAlody0+Q1JUQ0VYVFs1XSA9IDA7CkBAIC0yODcsNyArMjkwLDcgQEAKIAkJCSAgKChocyAgICAgICYgMHgxMDApID4+IDYpIHwgLyogc3luYyBzdGFydCAqLwogCQkJICAgKGhiZSAgICAgJiAweDA0MCk7CSAvKiBlbmQgaG9yLiBibGFua2luZyAqLwogCS8qIEZJWE1FOiBFbmFibGUgdmlkcnN0IG9ubHkgb24gRzQwMCwgYW5kIG9ubHkgaWYgVFYtb3V0IGlzIHVzZWQgKi8KLQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKQorCWlmIChtaW5mby0+b3V0cHV0c1sxXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKQogCQlody0+Q1JUQ0VYVFsxXSB8PSAweDg4OwkJLyogZW5hYmxlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHZpZHJzdCAqLwogCWh3LT5DUlRDRVhUWzJdID0gICgodnQgJiAweEMwMCkgPj4gMTApIHwKIAkJCSAgKCh2ZCAmIDB4NDAwKSA+PiAgOCkgfAkvKiBkaXNwIGVuZCAqLwpAQCAtMzMxLDkgKzMzNCwxMCBAQAogCXJldHVybiAwOwogfTsKIAotdm9pZCBtYXRyb3hmYl92Z2FIV3Jlc3RvcmUoV1BNSU5GTzIpIHsKK3ZvaWQgbWF0cm94ZmJfdmdhSFdyZXN0b3JlKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJaW50IGk7Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSAqIGNvbnN0IGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKiBjb25zdCBodyA9ICZtaW5mby0+aHc7CiAJQ1JJVEZMQUdTCiAKIAlEQkcoX19mdW5jX18pCkBAIC01MjIsNyArNTI2LDkgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IHBhcnNlX3BpbnMxKFdQTUlORk8gY29uc3Qgc3RydWN0IG1hdHJveF9iaW9zKiBiZCkgeworc3RhdGljIGludCBwYXJzZV9waW5zMShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG1hdHJveF9iaW9zICpiZCkKK3sKIAl1bnNpZ25lZCBpbnQgbWF4ZGFjOwogCiAJc3dpdGNoIChiZC0+cGluc1syMl0pIHsKQEAgLTUzMywxNzMgKzUzOSwxODggQEAKIAlpZiAoZ2V0X3VuYWxpZ25lZF9sZTE2KGJkLT5waW5zICsgMjQpKSB7CiAJCW1heGRhYyA9IGdldF91bmFsaWduZWRfbGUxNihiZC0+cGlucyArIDI0KSAqIDEwOwogCX0KLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heCA9IG1heGRhYzsKLQlNSU5GTy0+dmFsdWVzLnBsbC5zeXN0ZW0gPSBnZXRfdW5hbGlnbmVkX2xlMTYoYmQtPnBpbnMgKyAyOCkgPworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4ID0gbWF4ZGFjOworCW1pbmZvLT52YWx1ZXMucGxsLnN5c3RlbSA9IGdldF91bmFsaWduZWRfbGUxNihiZC0+cGlucyArIDI4KSA/CiAJCWdldF91bmFsaWduZWRfbGUxNihiZC0+cGlucyArIDI4KSAqIDEwIDogNTAwMDA7CiAJLyogaWdub3JlIDRNQiwgOE1CLCBtb2R1bGUgY2xvY2tzICovCi0JTUlORk8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcSA9IDE0MzE4OwotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwMDAzMDEwMTsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxID0gMTQzMTg7CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDAwMDMwMTAxOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnMxKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnMxKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJLyogTWlsbGVubml1bSAqLwotCU1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWF4CT0gMjIwMDAwOwotCU1JTkZPLT52YWx1ZXMucGxsLnN5c3RlbQk9ICA1MDAwMDsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gIDE0MzE4OwotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwMDAzMDEwMTsKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21heAk9IDIyMDAwMDsKKwltaW5mby0+dmFsdWVzLnBsbC5zeXN0ZW0JPSAgNTAwMDA7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9ICAxNDMxODsKKwltaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IDB4MDAwMzAxMDE7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfcGluczIoV1BNSU5GTyBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MqIGJkKSB7Ci0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJPQotCU1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IChiZC0+cGluc1s0MV0gPT0gMHhGRikgPyAyMzAwMDAgOiAoKGJkLT5waW5zWzQxXSArIDEwMCkgKiAxMDAwKTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9ICgoYmQtPnBpbnNbNTFdICYgMHgwMSkgPyAweDAwMDAwMDAxIDogMCkgfAorc3RhdGljIGludCBwYXJzZV9waW5zMihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG1hdHJveF9iaW9zICpiZCkKK3sKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21heAk9CisJbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gKGJkLT5waW5zWzQxXSA9PSAweEZGKSA/IDIzMDAwMCA6ICgoYmQtPnBpbnNbNDFdICsgMTAwKSAqIDEwMDApOworCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gKChiZC0+cGluc1s1MV0gJiAweDAxKSA/IDB4MDAwMDAwMDEgOiAwKSB8CiAJCQkJCSAgKChiZC0+cGluc1s1MV0gJiAweDAyKSA/IDB4MDAwMDAxMDAgOiAwKSB8CiAJCQkJCSAgKChiZC0+cGluc1s1MV0gJiAweDA0KSA/IDB4MDAwMTAwMDAgOiAwKSB8CiAJCQkJCSAgKChiZC0+cGluc1s1MV0gJiAweDA4KSA/IDB4MDAwMjAwMDAgOiAwKTsKLQlNSU5GTy0+dmFsdWVzLnBsbC5zeXN0ZW0JPSAoYmQtPnBpbnNbNDNdID09IDB4RkYpID8gNTAwMDAgOiAoKGJkLT5waW5zWzQzXSArIDEwMCkgKiAxMDAwKTsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gMTQzMTg7CisJbWluZm8tPnZhbHVlcy5wbGwuc3lzdGVtCT0gKGJkLT5waW5zWzQzXSA9PSAweEZGKSA/IDUwMDAwIDogKChiZC0+cGluc1s0M10gKyAxMDApICogMTAwMCk7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9IDE0MzE4OwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnMyKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnMyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJLyogTWlsbGVubml1bSBJSSwgTXlzdGlxdWUgKi8KLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk9Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gMjMwMDAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwMDAzMDEwMTsKLQlNSU5GTy0+dmFsdWVzLnBsbC5zeXN0ZW0JPSAgNTAwMDA7Ci0JTUlORk8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9ICAxNDMxODsKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21heAk9CisJbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gMjMwMDAwOworCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwMDAzMDEwMTsKKwltaW5mby0+dmFsdWVzLnBsbC5zeXN0ZW0JPSAgNTAwMDA7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9ICAxNDMxODsKIH0KIAotc3RhdGljIGludCBwYXJzZV9waW5zMyhXUE1JTkZPIGNvbnN0IHN0cnVjdCBtYXRyb3hfYmlvcyogYmQpIHsKLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk9Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gKGJkLT5waW5zWzM2XSA9PSAweEZGKSA/IDIzMDAwMAkJCTogKChiZC0+cGluc1szNl0gKyAxMDApICogMTAwMCk7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA0OCkgPT0gMHhGRkZGRkZGRiA/CitzdGF0aWMgaW50IHBhcnNlX3BpbnMzKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MgKmJkKQoreworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAoYmQtPnBpbnNbMzZdID09IDB4RkYpID8gMjMwMDAwCQkJOiAoKGJkLT5waW5zWzM2XSArIDEwMCkgKiAxMDAwKTsKKwltaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDQ4KSA9PSAweEZGRkZGRkZGID8KIAkJMHgwMTI1MEEyMSA6IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDQ4KTsKIAkvKiBtZW1vcnkgY29uZmlnICovCi0JTUlORk8tPnZhbHVlcy5yZWcubWVtcmRiawk9ICgoYmQtPnBpbnNbNTddIDw8IDIxKSAmIDB4MUUwMDAwMDApIHwKKwltaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gKChiZC0+cGluc1s1N10gPDwgMjEpICYgMHgxRTAwMDAwMCkgfAogCQkJCQkgICgoYmQtPnBpbnNbNTddIDw8IDIyKSAmIDB4MDBDMDAwMDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzU2XSA8PCAgMSkgJiAweDAwMDAwMUUwKSB8CiAJCQkJCSAgKCBiZC0+cGluc1s1Nl0gICAgICAgICYgMHgwMDAwMDAwRik7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0CQk9IChiZC0+cGluc1s1NF0gJiA3KSA8PCAxMDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQyCQk9IGJkLT5waW5zWzU4XSA8PCAxMjsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gKGJkLT5waW5zWzUyXSAmIDB4MjApID8gMTQzMTggOiAyNzAwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQJCT0gKGJkLT5waW5zWzU0XSAmIDcpIDw8IDEwOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdDIJCT0gYmQtPnBpbnNbNThdIDw8IDEyOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAoYmQtPnBpbnNbNTJdICYgMHgyMCkgPyAxNDMxOCA6IDI3MDAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnMzKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnMzKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJLyogRzEwMCwgRzIwMCAqLwotCU1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KLQlNSU5GTy0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAyMzAwMDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDAxMjUwQTIxOwotCU1JTkZPLT52YWx1ZXMucmVnLm1lbXJkYmsJPSAweDAwMDAwMDAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm9wdAkJPSAweDAwMDAwQzAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm9wdDIJCT0gMHgwMDAwMDAwMDsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gIDI3MDAwOworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAyMzAwMDA7CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDAxMjUwQTIxOworCW1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmsJPSAweDAwMDAwMDAwOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdAkJPSAweDAwMDAwQzAwOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdDIJCT0gMHgwMDAwMDAwMDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gIDI3MDAwOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX3BpbnM0KFdQTUlORk8gY29uc3Qgc3RydWN0IG1hdHJveF9iaW9zKiBiZCkgewotCU1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWF4CT0gKGJkLT5waW5zWyAzOV0gPT0gMHhGRikgPyAyMzAwMDAJCQk6IGJkLT5waW5zWyAzOV0gKiA0MDAwOwotCU1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IChiZC0+cGluc1sgMzhdID09IDB4RkYpID8gTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJOiBiZC0+cGluc1sgMzhdICogNDAwMDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDcxKTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gKChiZC0+cGluc1s4N10gPDwgMjEpICYgMHgxRTAwMDAwMCkgfAorc3RhdGljIGludCBwYXJzZV9waW5zNChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG1hdHJveF9iaW9zICpiZCkKK3sKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21heAk9IChiZC0+cGluc1sgMzldID09IDB4RkYpID8gMjMwMDAwCQkJOiBiZC0+cGluc1sgMzldICogNDAwMDsKKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAoYmQtPnBpbnNbIDM4XSA9PSAweEZGKSA/IG1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CTogYmQtPnBpbnNbIDM4XSAqIDQwMDA7CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA3MSk7CisJbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiawk9ICgoYmQtPnBpbnNbODddIDw8IDIxKSAmIDB4MUUwMDAwMDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzg3XSA8PCAyMikgJiAweDAwQzAwMDAwKSB8CiAJCQkJCSAgKChiZC0+cGluc1s4Nl0gPDwgIDEpICYgMHgwMDAwMDFFMCkgfAogCQkJCQkgICggYmQtPnBpbnNbODZdICAgICAgICAmIDB4MDAwMDAwMEYpOwotCU1JTkZPLT52YWx1ZXMucmVnLm9wdAkJPSAoKGJkLT5waW5zWzUzXSA8PCAxNSkgJiAweDAwNDAwMDAwKSB8CisJbWluZm8tPnZhbHVlcy5yZWcub3B0CQk9ICgoYmQtPnBpbnNbNTNdIDw8IDE1KSAmIDB4MDA0MDAwMDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzUzXSA8PCAyMikgJiAweDEwMDAwMDAwKSB8CiAJCQkJCSAgKChiZC0+cGluc1s1M10gPDwgIDcpICYgMHgwMDAwMUMwMCk7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0MwkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA2Nyk7Ci0JTUlORk8tPnZhbHVlcy5wbGwuc3lzdGVtCT0gKGJkLT5waW5zWyA2NV0gPT0gMHhGRikgPyAyMDAwMDAgCQkJOiBiZC0+cGluc1sgNjVdICogNDAwMDsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gKGJkLT5waW5zWyA5Ml0gJiAweDAxKSA/IDE0MzE4IDogMjcwMDA7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0MwkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA2Nyk7CisJbWluZm8tPnZhbHVlcy5wbGwuc3lzdGVtCT0gKGJkLT5waW5zWyA2NV0gPT0gMHhGRikgPyAyMDAwMDAgCQkJOiBiZC0+cGluc1sgNjVdICogNDAwMDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gKGJkLT5waW5zWyA5Ml0gJiAweDAxKSA/IDE0MzE4IDogMjcwMDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfcGluczQoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIGRlZmF1bHRfcGluczQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAkvKiBHNDAwICovCi0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJPQotCU1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IDI1MjAwMDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IDB4MDRBNDUwQTE7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWVtcmRiawk9IDB4MDAwMDAwRTc7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0CQk9IDB4MTAwMDA0MDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0MwkJPSAweDAxOTBBNDE5OwotCU1JTkZPLT52YWx1ZXMucGxsLnN5c3RlbQk9IDIwMDAwMDsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gMjcwMDA7CisJbWluZm8tPmxpbWl0cy5waXhlbC52Y29tYXgJPQorCW1pbmZvLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IDI1MjAwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IDB4MDRBNDUwQTE7CisJbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiawk9IDB4MDAwMDAwRTc7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0CQk9IDB4MTAwMDA0MDA7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0MwkJPSAweDAxOTBBNDE5OworCW1pbmZvLT52YWx1ZXMucGxsLnN5c3RlbQk9IDIwMDAwMDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gMjcwMDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfcGluczUoV1BNSU5GTyBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MqIGJkKSB7CitzdGF0aWMgaW50IHBhcnNlX3BpbnM1KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MgKmJkKQorewogCXVuc2lnbmVkIGludCBtdWx0OwogCQogCW11bHQgPSBiZC0+cGluc1s0XT84MDAwOjYwMDA7CiAJCi0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJPSAoYmQtPnBpbnNbIDM4XSA9PSAweEZGKSA/IDYwMDAwMAkJCTogYmQtPnBpbnNbIDM4XSAqIG11bHQ7Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gKGJkLT5waW5zWyAzNl0gPT0gMHhGRikgPyBNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk6IGJkLT5waW5zWyAzNl0gKiBtdWx0OwotCU1JTkZPLT5saW1pdHMudmlkZW8udmNvbWF4CT0gKGJkLT5waW5zWyAzN10gPT0gMHhGRikgPyBNSU5GTy0+bGltaXRzLnN5c3RlbS52Y29tYXgJOiBiZC0+cGluc1sgMzddICogbXVsdDsKLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21pbgk9IChiZC0+cGluc1sxMjNdID09IDB4RkYpID8gMjU2MDAwCQkJOiBiZC0+cGluc1sxMjNdICogbXVsdDsKLQlNSU5GTy0+bGltaXRzLnN5c3RlbS52Y29taW4JPSAoYmQtPnBpbnNbMTIxXSA9PSAweEZGKSA/IE1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWluCTogYmQtPnBpbnNbMTIxXSAqIG11bHQ7Ci0JTUlORk8tPmxpbWl0cy52aWRlby52Y29taW4JPSAoYmQtPnBpbnNbMTIyXSA9PSAweEZGKSA/IE1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21pbgk6IGJkLT5waW5zWzEyMl0gKiBtdWx0OwotCU1JTkZPLT52YWx1ZXMucGxsLnN5c3RlbQk9Ci0JTUlORk8tPnZhbHVlcy5wbGwudmlkZW8JCT0gKGJkLT5waW5zWyA5Ml0gPT0gMHhGRikgPyAyODQwMDAJCQk6IGJkLT5waW5zWyA5Ml0gKiA0MDAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm9wdAkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA0OCk7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0MgkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA1Mik7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0MwkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA5NCk7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA5OCk7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWVtbWlzYwk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDEwMik7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWVtcmRiawk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDEwNik7Ci0JTUlORk8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9IChiZC0+cGluc1sxMTBdICYgMHgwMSkgPyAxNDMxOCA6IDI3MDAwOwotCU1JTkZPLT52YWx1ZXMubWVtb3J5LmRkcgk9IChiZC0+cGluc1sxMTRdICYgMHg2MCkgPT0gMHgyMDsKLQlNSU5GTy0+dmFsdWVzLm1lbW9yeS5kbGwJPSAoYmQtPnBpbnNbMTE1XSAmIDB4MDIpICE9IDA7Ci0JTUlORk8tPnZhbHVlcy5tZW1vcnkuZW1yc3dlbgk9IChiZC0+cGluc1sxMTVdICYgMHgwMSkgIT0gMDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tYWNjZXNzCT0gTUlORk8tPnZhbHVlcy5tZW1vcnkuZW1yc3dlbiA/IDB4MDAwMDQwMDAgOiAweDAwMDAwMDAwOworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0gKGJkLT5waW5zWyAzOF0gPT0gMHhGRikgPyA2MDAwMDAJCQk6IGJkLT5waW5zWyAzOF0gKiBtdWx0OworCW1pbmZvLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IChiZC0+cGluc1sgMzZdID09IDB4RkYpID8gbWluZm8tPmxpbWl0cy5waXhlbC52Y29tYXgJOiBiZC0+cGluc1sgMzZdICogbXVsdDsKKwltaW5mby0+bGltaXRzLnZpZGVvLnZjb21heAk9IChiZC0+cGluc1sgMzddID09IDB4RkYpID8gbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CTogYmQtPnBpbnNbIDM3XSAqIG11bHQ7CisJbWluZm8tPmxpbWl0cy5waXhlbC52Y29taW4JPSAoYmQtPnBpbnNbMTIzXSA9PSAweEZGKSA/IDI1NjAwMAkJCTogYmQtPnBpbnNbMTIzXSAqIG11bHQ7CisJbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWluCT0gKGJkLT5waW5zWzEyMV0gPT0gMHhGRikgPyBtaW5mby0+bGltaXRzLnBpeGVsLnZjb21pbgk6IGJkLT5waW5zWzEyMV0gKiBtdWx0OworCW1pbmZvLT5saW1pdHMudmlkZW8udmNvbWluCT0gKGJkLT5waW5zWzEyMl0gPT0gMHhGRikgPyBtaW5mby0+bGltaXRzLnN5c3RlbS52Y29taW4JOiBiZC0+cGluc1sxMjJdICogbXVsdDsKKwltaW5mby0+dmFsdWVzLnBsbC5zeXN0ZW0JPQorCW1pbmZvLT52YWx1ZXMucGxsLnZpZGVvCQk9IChiZC0+cGluc1sgOTJdID09IDB4RkYpID8gMjg0MDAwCQkJOiBiZC0+cGluc1sgOTJdICogNDAwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQJCT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgNDgpOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdDIJCT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgNTIpOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdDMJCT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgOTQpOworCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgOTgpOworCW1pbmZvLT52YWx1ZXMucmVnLm1lbW1pc2MJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyAxMDIpOworCW1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmsJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyAxMDYpOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAoYmQtPnBpbnNbMTEwXSAmIDB4MDEpID8gMTQzMTggOiAyNzAwMDsKKwltaW5mby0+dmFsdWVzLm1lbW9yeS5kZHIJPSAoYmQtPnBpbnNbMTE0XSAmIDB4NjApID09IDB4MjA7CisJbWluZm8tPnZhbHVlcy5tZW1vcnkuZGxsCT0gKGJkLT5waW5zWzExNV0gJiAweDAyKSAhPSAwOworCW1pbmZvLT52YWx1ZXMubWVtb3J5LmVtcnN3ZW4JPSAoYmQtPnBpbnNbMTE1XSAmIDB4MDEpICE9IDA7CisJbWluZm8tPnZhbHVlcy5yZWcubWFjY2Vzcwk9IG1pbmZvLT52YWx1ZXMubWVtb3J5LmVtcnN3ZW4gPyAweDAwMDA0MDAwIDogMHgwMDAwMDAwMDsKIAlpZiAoYmQtPnBpbnNbMTE1XSAmIDQpIHsKLQkJTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3RfY29yZSA9IE1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0OworCQltaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdF9jb3JlID0gbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3Q7CiAJfSBlbHNlIHsKIAkJdV9pbnQzMl90IHd0c3RfeGxhdFtdID0geyAwLCAxLCA1LCA2LCA3LCA1LCAyLCAzIH07Ci0JCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0X2NvcmUgPSAoTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QgJiB+NykgfAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3RzdF94bGF0W01JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0ICYgN107CisJCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0X2NvcmUgPSAobWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QgJiB+NykgfAorCQkJCQkJICB3dHN0X3hsYXRbbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QgJiA3XTsKIAl9Ci0JTUlORk8tPm1heF9waXhlbF9jbG9ja19wYW5lbGxpbmsgPSBiZC0+cGluc1s0N10gKiA0MDAwOworCW1pbmZvLT5tYXhfcGl4ZWxfY2xvY2tfcGFuZWxsaW5rID0gYmQtPnBpbnNbNDddICogNDAwMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGVmYXVsdF9waW5zNShXUE1JTkZPMikgeworc3RhdGljIHZvaWQgZGVmYXVsdF9waW5zNShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCS8qIE1pbmUgMTZNQiBHNDUwIHdpdGggU0RSQU0gRERSICovCi0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJPQotCU1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21heAk9Ci0JTUlORk8tPmxpbWl0cy52aWRlby52Y29tYXgJPSA2MDAwMDA7Ci0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29taW4JPQotCU1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21pbgk9Ci0JTUlORk8tPmxpbWl0cy52aWRlby52Y29taW4JPSAyNTYwMDA7Ci0JTUlORk8tPnZhbHVlcy5wbGwuc3lzdGVtCT0KLQlNSU5GTy0+dmFsdWVzLnBsbC52aWRlbwkJPSAyODQwMDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0CQk9IDB4NDA0QTExNjA7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0MgkJPSAweDAwMDBBQzAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm9wdDMJCT0gMHgwMDkwQTQwOTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdF9jb3JlCT0KLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IDB4MEM4MTQ2MkI7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWVtbWlzYwk9IDB4ODAwMDAwMDQ7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWVtcmRiawk9IDB4MDEwMDExMDM7Ci0JTUlORk8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9IDI3MDAwOwotCU1JTkZPLT52YWx1ZXMubWVtb3J5LmRkcgk9IDE7Ci0JTUlORk8tPnZhbHVlcy5tZW1vcnkuZGxsCT0gMTsKLQlNSU5GTy0+dmFsdWVzLm1lbW9yeS5lbXJzd2VuCT0gMTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tYWNjZXNzCT0gMHgwMDAwNDAwMDsKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21heAk9CisJbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0KKwltaW5mby0+bGltaXRzLnZpZGVvLnZjb21heAk9IDYwMDAwMDsKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21pbgk9CisJbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWluCT0KKwltaW5mby0+bGltaXRzLnZpZGVvLnZjb21pbgk9IDI1NjAwMDsKKwltaW5mby0+dmFsdWVzLnBsbC5zeXN0ZW0JPQorCW1pbmZvLT52YWx1ZXMucGxsLnZpZGVvCQk9IDI4NDAwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQJCT0gMHg0MDRBMTE2MDsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQyCQk9IDB4MDAwMEFDMDA7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0MwkJPSAweDAwOTBBNDA5OworCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0X2NvcmUJPQorCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwQzgxNDYyQjsKKwltaW5mby0+dmFsdWVzLnJlZy5tZW1taXNjCT0gMHg4MDAwMDAwNDsKKwltaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gMHgwMTAwMTEwMzsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gMjcwMDA7CisJbWluZm8tPnZhbHVlcy5tZW1vcnkuZGRyCT0gMTsKKwltaW5mby0+dmFsdWVzLm1lbW9yeS5kbGwJPSAxOworCW1pbmZvLT52YWx1ZXMubWVtb3J5LmVtcnN3ZW4JPSAxOworCW1pbmZvLT52YWx1ZXMucmVnLm1hY2Nlc3MJPSAweDAwMDA0MDAwOwogfQogCi1zdGF0aWMgaW50IG1hdHJveGZiX3NldF9saW1pdHMoV1BNSU5GTyBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MqIGJkKSB7CitzdGF0aWMgaW50IG1hdHJveGZiX3NldF9saW1pdHMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MgKmJkKQorewogCXVuc2lnbmVkIGludCBwaW5zX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwaW5zbGVuW10gPSB7IDY0LCA2NCwgNjQsIDEyOCwgMTI4IH07CiAKLQlzd2l0Y2ggKEFDQ0VTU19GQklORk8oY2hpcCkpIHsKLQkJY2FzZSBNR0FfMjA2NDoJZGVmYXVsdF9waW5zMShQTUlORk8yKTsgYnJlYWs7CisJc3dpdGNoIChtaW5mby0+Y2hpcCkgeworCQljYXNlIE1HQV8yMDY0OglkZWZhdWx0X3BpbnMxKG1pbmZvKTsgYnJlYWs7CiAJCWNhc2UgTUdBXzIxNjQ6CiAJCWNhc2UgTUdBXzEwNjQ6Ci0JCWNhc2UgTUdBXzExNjQ6CWRlZmF1bHRfcGluczIoUE1JTkZPMik7IGJyZWFrOworCQljYXNlIE1HQV8xMTY0OglkZWZhdWx0X3BpbnMyKG1pbmZvKTsgYnJlYWs7CiAJCWNhc2UgTUdBX0cxMDA6Ci0JCWNhc2UgTUdBX0cyMDA6CWRlZmF1bHRfcGluczMoUE1JTkZPMik7IGJyZWFrOwotCQljYXNlIE1HQV9HNDAwOglkZWZhdWx0X3BpbnM0KFBNSU5GTzIpOyBicmVhazsKKwkJY2FzZSBNR0FfRzIwMDoJZGVmYXVsdF9waW5zMyhtaW5mbyk7IGJyZWFrOworCQljYXNlIE1HQV9HNDAwOglkZWZhdWx0X3BpbnM0KG1pbmZvKTsgYnJlYWs7CiAJCWNhc2UgTUdBX0c0NTA6Ci0JCWNhc2UgTUdBX0c1NTA6CWRlZmF1bHRfcGluczUoUE1JTkZPMik7IGJyZWFrOworCQljYXNlIE1HQV9HNTUwOglkZWZhdWx0X3BpbnM1KG1pbmZvKTsgYnJlYWs7CiAJfQogCWlmICghYmQtPmJpb3NfdmFsaWQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWF0cm94ZmI6IFlvdXIgTWF0cm94IGRldmljZSBkb2VzIG5vdCBoYXZlIEJJT1NcbiIpOwpAQCAtNzI0LDM4ICs3NDUsMzkgQEAKIAl9CiAJc3dpdGNoIChwaW5zX3ZlcnNpb24pIHsKIAkJY2FzZSAxOgotCQkJcmV0dXJuIHBhcnNlX3BpbnMxKFBNSU5GTyBiZCk7CisJCQlyZXR1cm4gcGFyc2VfcGluczEobWluZm8sIGJkKTsKIAkJY2FzZSAyOgotCQkJcmV0dXJuIHBhcnNlX3BpbnMyKFBNSU5GTyBiZCk7CisJCQlyZXR1cm4gcGFyc2VfcGluczIobWluZm8sIGJkKTsKIAkJY2FzZSAzOgotCQkJcmV0dXJuIHBhcnNlX3BpbnMzKFBNSU5GTyBiZCk7CisJCQlyZXR1cm4gcGFyc2VfcGluczMobWluZm8sIGJkKTsKIAkJY2FzZSA0OgotCQkJcmV0dXJuIHBhcnNlX3BpbnM0KFBNSU5GTyBiZCk7CisJCQlyZXR1cm4gcGFyc2VfcGluczQobWluZm8sIGJkKTsKIAkJY2FzZSA1OgotCQkJcmV0dXJuIHBhcnNlX3BpbnM1KFBNSU5GTyBiZCk7CisJCQlyZXR1cm4gcGFyc2VfcGluczUobWluZm8sIGJkKTsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0RFQlVHICJtYXRyb3hmYjogUG93ZXJ1cCBpbmZvIHZlcnNpb24gJXUgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsIHBpbnNfdmVyc2lvbik7CiAJCQlyZXR1cm4gLTE7CiAJfQogfQogCi12b2lkIG1hdHJveGZiX3JlYWRfcGlucyhXUE1JTkZPMikgewordm9pZCBtYXRyb3hmYl9yZWFkX3BpbnMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAl1MzIgb3B0OwogCXUzMiBiaW9zYmFzZTsKIAl1MzIgZmJiYXNlOwotCXN0cnVjdCBwY2lfZGV2KiBwZGV2ID0gQUNDRVNTX0ZCSU5GTyhwY2lkZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWluZm8tPnBjaWRldjsKIAkKLQltZW1zZXQoJkFDQ0VTU19GQklORk8oYmlvcyksIDAsIHNpemVvZihBQ0NFU1NfRkJJTkZPKGJpb3MpKSk7CisJbWVtc2V0KCZtaW5mby0+YmlvcywgMCwgc2l6ZW9mKG1pbmZvLT5iaW9zKSk7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9PUFRJT05fUkVHLCAmb3B0KTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9PUFRJT05fUkVHLCBvcHQgfCBQQ0lfT1BUSU9OX0VOQUJMRV9ST00pOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZiaW9zYmFzZSk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZmJSZXNvdXJjZSksICZmYmJhc2UpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBtaW5mby0+ZGV2ZmxhZ3MuZmJSZXNvdXJjZSwgJmZiYmFzZSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfUk9NX0FERFJFU1MsIChmYmJhc2UgJiBQQ0lfUk9NX0FERFJFU1NfTUFTSykgfCBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFKTsKLQlwYXJzZV9iaW9zKHZhZGRyX3ZhKEFDQ0VTU19GQklORk8odmlkZW8pLnZiYXNlKSwgJkFDQ0VTU19GQklORk8oYmlvcykpOworCXBhcnNlX2Jpb3ModmFkZHJfdmEobWluZm8tPnZpZGVvLnZiYXNlKSwgJm1pbmZvLT5iaW9zKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9ST01fQUREUkVTUywgYmlvc2Jhc2UpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX09QVElPTl9SRUcsIG9wdCk7CiAjaWZkZWYgQ09ORklHX1g4NgotCWlmICghQUNDRVNTX0ZCSU5GTyhiaW9zKS5iaW9zX3ZhbGlkKSB7CisJaWYgKCFtaW5mby0+Ymlvcy5iaW9zX3ZhbGlkKSB7CiAJCXVuc2lnbmVkIGNoYXIgX19pb21lbSogYjsKIAogCQliID0gaW9yZW1hcCgweDAwMEMwMDAwLCA2NTUzNik7CkBAIC03NjksMjUgKzc5MSwyMSBAQAogCQkJCXByaW50ayhLRVJOX0lORk8gIm1hdHJveGZiOiBMZWdhY3kgQklPUyBpcyBmb3IgJTA0WDolMDRYLCB3aGlsZSB0aGlzIGRldmljZSBpcyAlMDRYOiUwNFhcbiIsCiAJCQkJCXZlbiwgZGV2LCBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CiAJCQl9IGVsc2UgewotCQkJCXBhcnNlX2Jpb3MoYiwgJkFDQ0VTU19GQklORk8oYmlvcykpOworCQkJCXBhcnNlX2Jpb3MoYiwgJm1pbmZvLT5iaW9zKTsKIAkJCX0KIAkJCWlvdW5tYXAoYik7CiAJCX0KIAl9CiAjZW5kaWYKLQltYXRyb3hmYl9zZXRfbGltaXRzKFBNSU5GTyAmQUNDRVNTX0ZCSU5GTyhiaW9zKSk7CisJbWF0cm94ZmJfc2V0X2xpbWl0cyhtaW5mbywgJm1pbmZvLT5iaW9zKTsKIAlwcmludGsoS0VSTl9JTkZPICJQSW5TIG1lbXR5cGUgPSAldVxuIiwKLQkgICAgICAgKEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0ICYgMHgxQzAwKSA+PiAxMCk7CisJICAgICAgIChtaW5mby0+dmFsdWVzLnJlZy5vcHQgJiAweDFDMDApID4+IDEwKTsKIH0KIAogRVhQT1JUX1NZTUJPTChtYXRyb3hmYl9EQUNfaW4pOwogRVhQT1JUX1NZTUJPTChtYXRyb3hmYl9EQUNfb3V0KTsKIEVYUE9SVF9TWU1CT0wobWF0cm94ZmJfdmFyMm15KTsKIEVYUE9SVF9TWU1CT0wobWF0cm94ZmJfUExMX2NhbGNjbG9jayk7Ci0jaWZuZGVmIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFECi1zdHJ1Y3QgbWF0cm94X2ZiX2luZm8gbWF0cm94ZmJfZ2xvYmFsX214aW5mbzsKLUVYUE9SVF9TWU1CT0wobWF0cm94ZmJfZ2xvYmFsX214aW5mbyk7Ci0jZW5kaWYKIEVYUE9SVF9TWU1CT0wobWF0cm94ZmJfdmdhSFdpbml0KTsJCS8qIERBQzEwNjQsIFRpMzAyNiAqLwogRVhQT1JUX1NZTUJPTChtYXRyb3hmYl92Z2FIV3Jlc3RvcmUpOwkJLyogREFDMTA2NCwgVGkzMDI2ICovCiBFWFBPUlRfU1lNQk9MKG1hdHJveGZiX3JlYWRfcGlucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmggYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmgKaW5kZXggY2I2MmNjMC4uMzUxYzgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWlzYy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuaApAQCAtNiwxMyArNiwxNiBAQAogLyogYWxzbyBmb3IgbW9kdWxlcyAqLwogaW50IG1hdHJveGZiX1BMTF9jYWxjY2xvY2soY29uc3Qgc3RydWN0IG1hdHJveF9wbGxfZmVhdHVyZXMqIHBsbCwgdW5zaWduZWQgaW50IGZyZXEsIHVuc2lnbmVkIGludCBmbWF4LAogCXVuc2lnbmVkIGludCogaW4sIHVuc2lnbmVkIGludCogZmVlZCwgdW5zaWduZWQgaW50KiBwb3N0KTsKLXN0YXRpYyBpbmxpbmUgaW50IFBMTF9jYWxjY2xvY2soQ1BNSU5GTyB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGZtYXgsCi0JCXVuc2lnbmVkIGludCogaW4sIHVuc2lnbmVkIGludCogZmVlZCwgdW5zaWduZWQgaW50KiBwb3N0KSB7Ci0JcmV0dXJuIG1hdHJveGZiX1BMTF9jYWxjY2xvY2soJkFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsKSwgZnJlcSwgZm1heCwgaW4sIGZlZWQsIHBvc3QpOworc3RhdGljIGlubGluZSBpbnQgUExMX2NhbGNjbG9jayhjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJCXVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBpbnQgZm1heCwKKwkJCQl1bnNpZ25lZCBpbnQgKmluLCB1bnNpZ25lZCBpbnQgKmZlZWQsCisJCQkJdW5zaWduZWQgaW50ICpwb3N0KQoreworCXJldHVybiBtYXRyb3hmYl9QTExfY2FsY2Nsb2NrKCZtaW5mby0+ZmVhdHVyZXMucGxsLCBmcmVxLCBmbWF4LCBpbiwgZmVlZCwgcG9zdCk7CiB9CiAKLWludCBtYXRyb3hmYl92Z2FIV2luaXQoV1BNSU5GTyBzdHJ1Y3QgbXlfdGltbWluZyogbSk7Ci12b2lkIG1hdHJveGZiX3ZnYUhXcmVzdG9yZShXUE1JTkZPMik7Ci12b2lkIG1hdHJveGZiX3JlYWRfcGlucyhXUE1JTkZPMik7CitpbnQgbWF0cm94ZmJfdmdhSFdpbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHN0cnVjdCBteV90aW1taW5nKiBtKTsKK3ZvaWQgbWF0cm94ZmJfdmdhSFdyZXN0b3JlKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pOwordm9pZCBtYXRyb3hmYl9yZWFkX3BpbnMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7CiAKICNlbmRpZgkvKiBfX01BVFJPWEZCX01JU0NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vbXNtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmQ2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9NYWtlZmlsZQpAQCAtMCwwICsxLDE5IEBACisKKyMgY29yZSBmcmFtZWJ1ZmZlcgorIworb2JqLXkgOj0gbXNtX2ZiLm8KKworIyBNRFAgRE1BL1BQUCBlbmdpbmUKKyMKK29iai15ICs9IG1kcC5vIG1kcF9zY2FsZV90YWJsZXMubyBtZHBfcHBwLm8KKworIyBNRERJIGludGVyZmFjZQorIworb2JqLXkgKz0gbWRkaS5vCisKKyMgTURESSBjbGllbnQvcGFuZWwgZHJpdmVycworIworb2JqLXkgKz0gbWRkaV9jbGllbnRfZHVtbXkubworb2JqLXkgKz0gbWRkaV9jbGllbnRfdG9zaGliYS5vCitvYmoteSArPSBtZGRpX2NsaWVudF9udDM1Mzk5Lm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZGU1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKQEAgLTAsMCArMSw4MjggQEAKKy8qCisgKiBNU00gTURESSBUcmFuc3BvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA3IFFVQUxDT01NIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorI2luY2x1ZGUgIm1kZGlfaHcuaCIKKworI2RlZmluZSBGTEFHX0RJU0FCTEVfSElCRVJOQVRJT04gMHgwMDAxCisjZGVmaW5lIEZMQUdfSEFWRV9DQVBTCQkgMHgwMDAyCisjZGVmaW5lIEZMQUdfSEFTX1ZTWU5DX0lSUQkgMHgwMDA0CisjZGVmaW5lIEZMQUdfSEFWRV9TVEFUVVMJIDB4MDAwOAorCisjZGVmaW5lIENNRF9HRVRfQ0xJRU5UX0NBUCAgICAgMHgwNjAxCisjZGVmaW5lIENNRF9HRVRfQ0xJRU5UX1NUQVRVUyAgMHgwNjAyCisKK3VuaW9uIG1kZGlfcmV2IHsKKwl1bnNpZ25lZCBjaGFyIHJhd1tNRERJX1JFVl9CVUZGRVJfU0laRV07CisJc3RydWN0IG1kZGlfcmV2X3BhY2tldCBoZHI7CisJc3RydWN0IG1kZGlfY2xpZW50X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IG1kZGlfY2xpZW50X2NhcHMgY2FwczsKKwlzdHJ1Y3QgbWRkaV9yZWdpc3Rlcl9hY2Nlc3MgcmVnOworfTsKKworc3RydWN0IHJlZ19yZWFkX2luZm8geworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisJdWludDMyX3QgcmVnOworCXVpbnQzMl90IHN0YXR1czsKKwl1aW50MzJfdCByZXN1bHQ7Cit9OworCitzdHJ1Y3QgbWRkaV9pbmZvIHsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCB2ZXJzaW9uOworCWNoYXIgX19pb21lbSAqYmFzZTsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgY2xpZW50X2RhdGE7CisKKwkvKiBidWZmZXIgZm9yIHJldiBlbmNhcCBwYWNrZXRzICovCisJdm9pZCAqcmV2X2RhdGE7CisJZG1hX2FkZHJfdCByZXZfYWRkcjsKKwlzdHJ1Y3QgbWRkaV9sbGVudHJ5ICpyZWdfd3JpdGVfZGF0YTsKKwlkbWFfYWRkcl90IHJlZ193cml0ZV9hZGRyOworCXN0cnVjdCBtZGRpX2xsZW50cnkgKnJlZ19yZWFkX2RhdGE7CisJZG1hX2FkZHJfdCByZWdfcmVhZF9hZGRyOworCXNpemVfdCByZXZfZGF0YV9jdXJyOworCisJc3BpbmxvY2tfdCBpbnRfbG9jazsKKwl1aW50MzJfdCBpbnRfZW5hYmxlOworCXVpbnQzMl90IGdvdF9pbnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgaW50X3dhaXQ7CisKKwlzdHJ1Y3QgbXV0ZXggcmVnX3dyaXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHJlZ19yZWFkX2xvY2s7CisJc3RydWN0IHJlZ19yZWFkX2luZm8gKnJlZ19yZWFkOworCisJc3RydWN0IG1kZGlfY2xpZW50X2NhcHMgY2FwczsKKwlzdHJ1Y3QgbWRkaV9jbGllbnRfc3RhdHVzIHN0YXR1czsKKworCXZvaWQgKCpwb3dlcl9jbGllbnQpKHN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqLCBpbnQpOworCisJLyogY2xpZW50IGRldmljZSBwdWJsaXNoZWQgdG8gYmluZCB1cyB0byB0aGUKKwkgKiBhcHByb3ByaWF0ZSBtZGRpX2NsaWVudCBkcml2ZXIKKwkgKi8KKwljaGFyIGNsaWVudF9uYW1lWzIwXTsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2xpZW50X3BkZXY7Cit9OworCitzdGF0aWMgdm9pZCBtZGRpX2luaXRfcmV2X2VuY2FwKHN0cnVjdCBtZGRpX2luZm8gKm1kZGkpOworCisjZGVmaW5lIG1kZGlfcmVhZGwocikgcmVhZGwobWRkaS0+YmFzZSArIChNRERJXyMjcikpCisjZGVmaW5lIG1kZGlfd3JpdGVsKHYsIHIpIHdyaXRlbCgodiksIG1kZGktPmJhc2UgKyAoTURESV8jI3IpKQorCit2b2lkIG1kZGlfYWN0aXZhdGVfbGluayhzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNkYXRhKQoreworCXN0cnVjdCBtZGRpX2luZm8gKm1kZGkgPSBjb250YWluZXJfb2YoY2RhdGEsIHN0cnVjdCBtZGRpX2luZm8sCisJCQkJCSAgICAgIGNsaWVudF9kYXRhKTsKKworCW1kZGlfd3JpdGVsKE1ERElfQ01EX0xJTktfQUNUSVZFLCBDTUQpOworfQorCitzdGF0aWMgdm9pZCBtZGRpX2hhbmRsZV9saW5rX2xpc3RfZG9uZShzdHJ1Y3QgbWRkaV9pbmZvICptZGRpKQoreworfQorCitzdGF0aWMgdm9pZCBtZGRpX3Jlc2V0X3Jldl9lbmNhcF9wdHIoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJtZGRpOiByZXNldHRpbmcgcmV2IHB0clxuIik7CisJbWRkaS0+cmV2X2RhdGFfY3VyciA9IDA7CisJbWRkaV93cml0ZWwobWRkaS0+cmV2X2FkZHIsIFJFVl9QVFIpOworCW1kZGlfd3JpdGVsKG1kZGktPnJldl9hZGRyLCBSRVZfUFRSKTsKKwltZGRpX3dyaXRlbChNRERJX0NNRF9GT1JDRV9ORVdfUkVWX1BUUiwgQ01EKTsKK30KKworc3RhdGljIHZvaWQgbWRkaV9oYW5kbGVfcmV2X2RhdGEoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSwgdW5pb24gbWRkaV9yZXYgKnJldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVnX3JlYWRfaW5mbyAqcmk7CisKKwlpZiAoKHJldi0+aGRyLmxlbmd0aCA8PSBNRERJX1JFVl9CVUZGRVJfU0laRSAtIDIpICYmCisJICAgKHJldi0+aGRyLmxlbmd0aCA+PSBzaXplb2Yoc3RydWN0IG1kZGlfcmV2X3BhY2tldCkgLSAyKSkgeworCisJCXN3aXRjaCAocmV2LT5oZHIudHlwZSkgeworCQljYXNlIFRZUEVfQ0xJRU5UX0NBUFM6CisJCQltZW1jcHkoJm1kZGktPmNhcHMsICZyZXYtPmNhcHMsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtZGRpX2NsaWVudF9jYXBzKSk7CisJCQltZGRpLT5mbGFncyB8PSBGTEFHX0hBVkVfQ0FQUzsKKwkJCXdha2VfdXAoJm1kZGktPmludF93YWl0KTsKKwkJCWJyZWFrOworCQljYXNlIFRZUEVfQ0xJRU5UX1NUQVRVUzoKKwkJCW1lbWNweSgmbWRkaS0+c3RhdHVzLCAmcmV2LT5zdGF0dXMsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtZGRpX2NsaWVudF9zdGF0dXMpKTsKKwkJCW1kZGktPmZsYWdzIHw9IEZMQUdfSEFWRV9TVEFUVVM7CisJCQl3YWtlX3VwKCZtZGRpLT5pbnRfd2FpdCk7CisJCQlicmVhazsKKwkJY2FzZSBUWVBFX1JFR0lTVEVSX0FDQ0VTUzoKKwkJCXJpID0gbWRkaS0+cmVnX3JlYWQ7CisJCQlpZiAocmkgPT0gMCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gInJldjogZ290IHJlZyAleCA9ICV4IHdpdGhvdXQgIgorCQkJCQkJICIgcGVuZGluZyByZWFkXG4iLAorCQkJCSAgICAgICByZXYtPnJlZy5yZWdpc3Rlcl9hZGRyZXNzLAorCQkJCSAgICAgICByZXYtPnJlZy5yZWdpc3Rlcl9kYXRhX2xpc3QpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHJpLT5yZWcgIT0gcmV2LT5yZWcucmVnaXN0ZXJfYWRkcmVzcykgeworCQkJCXByaW50ayhLRVJOX0lORk8gInJldjogZ290IHJlZyAleCA9ICV4IGZvciAiCisJCQkJCQkgIndyb25nIHJlZ2lzdGVyLCBleHBlY3RlZCAiCisJCQkJCQkgIiV4XG4iLAorCQkJCSAgICAgICByZXYtPnJlZy5yZWdpc3Rlcl9hZGRyZXNzLAorCQkJCSAgICAgICByZXYtPnJlZy5yZWdpc3Rlcl9kYXRhX2xpc3QsIHJpLT5yZWcpOworCQkJCWJyZWFrOworCQkJfQorCQkJbWRkaS0+cmVnX3JlYWQgPSBOVUxMOworCQkJcmktPnN0YXR1cyA9IDA7CisJCQlyaS0+cmVzdWx0ID0gcmV2LT5yZWcucmVnaXN0ZXJfZGF0YV9saXN0OworCQkJY29tcGxldGUoJnJpLT5kb25lKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fSU5GTyAicmV2OiB1bmtub3duIHJldmVyc2UgcGFja2V0OiAiCisJCQkJCSAibGVuPSUwNHggdHlwZT0lMDR4IENVUlJfUkVWX1BUUj0leFxuIiwKKwkJCSAgICAgICByZXYtPmhkci5sZW5ndGgsIHJldi0+aGRyLnR5cGUsCisJCQkgICAgICAgbWRkaV9yZWFkbChDVVJSX1JFVl9QVFIpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCByZXYtPmhkci5sZW5ndGggKyAyOyBpKyspIHsKKwkJCQlpZiAoKGkgJSAxNikgPT0gMCkKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIgJTAyeCIsIHJldi0+cmF3W2ldKTsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0lORk8gIlxuIik7CisJCQltZGRpX3Jlc2V0X3Jldl9lbmNhcF9wdHIobWRkaSk7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJiYWQgcmV2IGxlbmd0aCwgJWQsIENVUlJfUkVWX1BUUiAleFxuIiwKKwkJICAgICAgIHJldi0+aGRyLmxlbmd0aCwgbWRkaV9yZWFkbChDVVJSX1JFVl9QVFIpKTsKKwkJbWRkaV9yZXNldF9yZXZfZW5jYXBfcHRyKG1kZGkpOworCX0KK30KKworc3RhdGljIHZvaWQgbWRkaV93YWl0X2ludGVycnVwdChzdHJ1Y3QgbWRkaV9pbmZvICptZGRpLCB1aW50MzJfdCBpbnRtYXNrKTsKKworc3RhdGljIHZvaWQgbWRkaV9oYW5kbGVfcmV2X2RhdGFfYXZhaWwoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSkKK3sKKwl1bmlvbiBtZGRpX3JldiAqcmV2ID0gbWRkaS0+cmV2X2RhdGE7CisJdWludDMyX3QgcmV2X2RhdGFfY291bnQ7CisJdWludDMyX3QgcmV2X2NyY19lcnJfY291bnQ7CisJaW50IGk7CisJc3RydWN0IHJlZ19yZWFkX2luZm8gKnJpOworCXNpemVfdCBwcmV2X29mZnNldDsKKwl1aW50MTZfdCBsZW5ndGg7CisKKwl1bmlvbiBtZGRpX3JldiAqY3JldiA9IG1kZGktPnJldl9kYXRhICsgbWRkaS0+cmV2X2RhdGFfY3VycjsKKworCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwltZGRpX3dyaXRlbChNRERJX0lOVF9SRVZfREFUQV9BVkFJTCwgSU5UKTsKKwlyZXZfZGF0YV9jb3VudCA9IG1kZGlfcmVhZGwoUkVWX1BLVF9DTlQpOworCXJldl9jcmNfZXJyX2NvdW50ID0gbWRkaV9yZWFkbChSRVZfQ1JDX0VSUik7CisJaWYgKHJldl9kYXRhX2NvdW50ID4gMSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmV2X2RhdGFfY291bnQgJWRcbiIsIHJldl9kYXRhX2NvdW50KTsKKworCWlmIChyZXZfY3JjX2Vycl9jb3VudCkgeworCQlwcmludGsoS0VSTl9JTkZPICJyZXZfY3JjX2Vycl9jb3VudCAlZCwgSU5UICV4XG4iLAorCQkgICAgICAgcmV2X2NyY19lcnJfY291bnQsICBtZGRpX3JlYWRsKElOVCkpOworCQlyaSA9IG1kZGktPnJlZ19yZWFkOworCQlpZiAocmkgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAicmV2OiBnb3QgY3JjIGVycm9yIHdpdGhvdXQgcGVuZGluZyAiCisJCQkgICAgICAgInJlYWRcbiIpOworCQl9IGVsc2UgeworCQkJbWRkaS0+cmVnX3JlYWQgPSBOVUxMOworCQkJcmktPnN0YXR1cyA9IC1FSU87CisJCQlyaS0+cmVzdWx0ID0gLTE7CisJCQljb21wbGV0ZSgmcmktPmRvbmUpOworCQl9CisJfQorCisJaWYgKHJldl9kYXRhX2NvdW50ID09IDApCisJCXJldHVybjsKKworCXByZXZfb2Zmc2V0ID0gbWRkaS0+cmV2X2RhdGFfY3VycjsKKworCWxlbmd0aCA9ICooKHVpbnQ4X3QgKiltZGRpLT5yZXZfZGF0YSArIG1kZGktPnJldl9kYXRhX2N1cnIpOworCW1kZGktPnJldl9kYXRhX2N1cnIrKzsKKwlpZiAobWRkaS0+cmV2X2RhdGFfY3VyciA9PSBNRERJX1JFVl9CVUZGRVJfU0laRSkKKwkJbWRkaS0+cmV2X2RhdGFfY3VyciA9IDA7CisJbGVuZ3RoICs9ICooKHVpbnQ4X3QgKiltZGRpLT5yZXZfZGF0YSArIG1kZGktPnJldl9kYXRhX2N1cnIpIDw8IDg7CisJbWRkaS0+cmV2X2RhdGFfY3VyciArPSAxICsgbGVuZ3RoOworCWlmIChtZGRpLT5yZXZfZGF0YV9jdXJyID49IE1ERElfUkVWX0JVRkZFUl9TSVpFKQorCQltZGRpLT5yZXZfZGF0YV9jdXJyID0KKwkJCW1kZGktPnJldl9kYXRhX2N1cnIgJSBNRERJX1JFVl9CVUZGRVJfU0laRTsKKworCWlmIChsZW5ndGggPiBNRERJX1JFVl9CVUZGRVJfU0laRSAtIDIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaTogcmV2IGRhdGEgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBidWZmZXIiCisJCQkic2l6ZVxuIik7CisJCW1kZGlfcmVzZXRfcmV2X2VuY2FwX3B0cihtZGRpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwcmV2X29mZnNldCArIDIgKyBsZW5ndGggPj0gTURESV9SRVZfQlVGRkVSX1NJWkUpIHsKKwkJdW5pb24gbWRkaV9yZXYgdG1wcmV2OworCQlzaXplX3QgcmVtID0gTURESV9SRVZfQlVGRkVSX1NJWkUgLSBwcmV2X29mZnNldDsKKwkJbWVtY3B5KCZ0bXByZXYucmF3WzBdLCBtZGRpLT5yZXZfZGF0YSArIHByZXZfb2Zmc2V0LCByZW0pOworCQltZW1jcHkoJnRtcHJldi5yYXdbcmVtXSwgbWRkaS0+cmV2X2RhdGEsIDIgKyBsZW5ndGggLSByZW0pOworCQltZGRpX2hhbmRsZV9yZXZfZGF0YShtZGRpLCAmdG1wcmV2KTsKKwl9IGVsc2UgeworCQltZGRpX2hhbmRsZV9yZXZfZGF0YShtZGRpLCBjcmV2KTsKKwl9CisKKwlpZiAocHJldl9vZmZzZXQgPCBNRERJX1JFVl9CVUZGRVJfU0laRSAvIDIgJiYKKwkgICAgbWRkaS0+cmV2X2RhdGFfY3VyciA+PSBNRERJX1JFVl9CVUZGRVJfU0laRSAvIDIpIHsKKwkJbWRkaV93cml0ZWwobWRkaS0+cmV2X2FkZHIsIFJFVl9QVFIpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IG1kZGlfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjZGF0YSA9IGRhdGE7CisJc3RydWN0IG1kZGlfaW5mbyAqbWRkaSA9IGNvbnRhaW5lcl9vZihjZGF0YSwgc3RydWN0IG1kZGlfaW5mbywKKwkJCQkJICAgICAgY2xpZW50X2RhdGEpOworCXVpbnQzMl90IGFjdGl2ZSwgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZtZGRpLT5pbnRfbG9jayk7CisKKwlhY3RpdmUgPSBtZGRpX3JlYWRsKElOVCk7CisJc3RhdHVzID0gbWRkaV9yZWFkbChTVEFUKTsKKworCW1kZGlfd3JpdGVsKGFjdGl2ZSwgSU5UKTsKKworCS8qIGlnbm9yZSBhbnkgaW50ZXJydXB0cyB3ZSBoYXZlIGRpc2FibGVkICovCisJYWN0aXZlICY9IG1kZGktPmludF9lbmFibGU7CisKKwltZGRpLT5nb3RfaW50IHw9IGFjdGl2ZTsKKwl3YWtlX3VwKCZtZGRpLT5pbnRfd2FpdCk7CisKKwlpZiAoYWN0aXZlICYgTURESV9JTlRfUFJJX0xJTktfTElTVF9ET05FKSB7CisJCW1kZGktPmludF9lbmFibGUgJj0gKH5NRERJX0lOVF9QUklfTElOS19MSVNUX0RPTkUpOworCQltZGRpX2hhbmRsZV9saW5rX2xpc3RfZG9uZShtZGRpKTsKKwl9CisJaWYgKGFjdGl2ZSAmIE1ERElfSU5UX1JFVl9EQVRBX0FWQUlMKQorCQltZGRpX2hhbmRsZV9yZXZfZGF0YV9hdmFpbChtZGRpKTsKKworCWlmIChhY3RpdmUgJiB+TURESV9JTlRfTkVFRF9DTEVBUikKKwkJbWRkaS0+aW50X2VuYWJsZSAmPSB+KGFjdGl2ZSAmIH5NRERJX0lOVF9ORUVEX0NMRUFSKTsKKworCWlmIChhY3RpdmUgJiBNRERJX0lOVF9MSU5LX0FDVElWRSkgeworCQltZGRpLT5pbnRfZW5hYmxlICY9ICh+TURESV9JTlRfTElOS19BQ1RJVkUpOworCQltZGRpLT5pbnRfZW5hYmxlIHw9IE1ERElfSU5UX0lOX0hJQkVSTkFUSU9OOworCX0KKworCWlmIChhY3RpdmUgJiBNRERJX0lOVF9JTl9ISUJFUk5BVElPTikgeworCQltZGRpLT5pbnRfZW5hYmxlICY9ICh+TURESV9JTlRfSU5fSElCRVJOQVRJT04pOworCQltZGRpLT5pbnRfZW5hYmxlIHw9IE1ERElfSU5UX0xJTktfQUNUSVZFOworCX0KKworCW1kZGlfd3JpdGVsKG1kZGktPmludF9lbmFibGUsIElOVEVOKTsKKwlzcGluX3VubG9jaygmbWRkaS0+aW50X2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgbG9uZyBtZGRpX3dhaXRfaW50ZXJydXB0X3RpbWVvdXQoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSwKKwkJCQkJdWludDMyX3QgaW50bWFzaywgaW50IHRpbWVvdXQpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRkaS0+aW50X2xvY2ssIGlycV9mbGFncyk7CisJbWRkaS0+Z290X2ludCAmPSB+aW50bWFzazsKKwltZGRpLT5pbnRfZW5hYmxlIHw9IGludG1hc2s7CisJbWRkaV93cml0ZWwobWRkaS0+aW50X2VuYWJsZSwgSU5URU4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kZGktPmludF9sb2NrLCBpcnFfZmxhZ3MpOworCXJldHVybiB3YWl0X2V2ZW50X3RpbWVvdXQobWRkaS0+aW50X3dhaXQsIG1kZGktPmdvdF9pbnQgJiBpbnRtYXNrLAorCQkJCSAgdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIG1kZGlfd2FpdF9pbnRlcnJ1cHQoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSwgdWludDMyX3QgaW50bWFzaykKK3sKKwlpZiAobWRkaV93YWl0X2ludGVycnVwdF90aW1lb3V0KG1kZGksIGludG1hc2ssIEhaLzEwKSA9PSAwKQorCQlwcmludGsoS0VSTl9JTkZPIEtFUk5fRVJSICJtZGRpX3dhaXRfaW50ZXJydXB0ICVkLCB0aW1lb3V0ICIKKwkJICAgICAgICJ3YWl0aW5nIGZvciAleCwgSU5UID0gJXgsIFNUQVQgPSAleCBnb3RpbnQgPSAleFxuIiwKKwkJICAgICAgIGN1cnJlbnQtPnBpZCwgaW50bWFzaywgbWRkaV9yZWFkbChJTlQpLCBtZGRpX3JlYWRsKFNUQVQpLAorCQkgICAgICAgbWRkaS0+Z290X2ludCk7Cit9CisKK3N0YXRpYyB2b2lkIG1kZGlfaW5pdF9yZXZfZW5jYXAoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSkKK3sKKwltZW1zZXQobWRkaS0+cmV2X2RhdGEsIDB4ZWUsIE1ERElfUkVWX0JVRkZFUl9TSVpFKTsKKwltZGRpX3dyaXRlbChtZGRpLT5yZXZfYWRkciwgUkVWX1BUUik7CisJbWRkaV93cml0ZWwoTURESV9DTURfRk9SQ0VfTkVXX1JFVl9QVFIsIENNRCk7CisJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKK30KKwordm9pZCBtZGRpX3NldF9hdXRvX2hpYmVybmF0ZShzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNkYXRhLCBpbnQgb24pCit7CisJc3RydWN0IG1kZGlfaW5mbyAqbWRkaSA9IGNvbnRhaW5lcl9vZihjZGF0YSwgc3RydWN0IG1kZGlfaW5mbywKKwkJCQkJICAgICAgY2xpZW50X2RhdGEpOworCW1kZGlfd3JpdGVsKE1ERElfQ01EX1BPV0VSRE9XTiwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX0lOX0hJQkVSTkFUSU9OKTsKKwltZGRpX3dyaXRlbChNRERJX0NNRF9ISUJFUk5BVEUgfCAhIW9uLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7Cit9CisKKworc3RhdGljIHVpbnQxNl90IG1kZGlfaW5pdF9yZWdpc3RlcnMoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSkKK3sKKwltZGRpX3dyaXRlbCgweDAwMDEsIFZFUlNJT04pOworCW1kZGlfd3JpdGVsKE1ERElfSE9TVF9CWVRFU19QRVJfU1VCRlJBTUUsIEJQUyk7CisJbWRkaV93cml0ZWwoMHgwMDAzLCBTUE0pOyAvKiBzdWJmcmFtZXMgcGVyIG1lZGlhICovCisJbWRkaV93cml0ZWwoMHgwMDA1LCBUQTFfTEVOKTsKKwltZGRpX3dyaXRlbChNRERJX0hPU1RfVEEyX0xFTiwgVEEyX0xFTik7CisJbWRkaV93cml0ZWwoMHgwMDk2LCBEUklWRV9ISSk7CisJLyogMHgzMiBub3JtYWwsIDB4NTAgZm9yIFRvc2hpYmEgZGlzcGxheSAqLworCW1kZGlfd3JpdGVsKDB4MDA1MCwgRFJJVkVfTE8pOworCW1kZGlfd3JpdGVsKDB4MDAzQywgRElTUF9XQUtFKTsgLyogd2FrZXVwIGNvdW50ZXIgKi8KKwltZGRpX3dyaXRlbChNRERJX0hPU1RfUkVWX1JBVEVfRElWLCBSRVZfUkFURV9ESVYpOworCisJbWRkaV93cml0ZWwoTURESV9SRVZfQlVGRkVSX1NJWkUsIFJFVl9TSVpFKTsKKwltZGRpX3dyaXRlbChNRERJX01BWF9SRVZfUEtUX1NJWkUsIFJFVl9FTkNBUF9TWik7CisKKwkvKiBkaXNhYmxlIHBlcmlvZGljIHJldiBlbmNhcCAqLworCW1kZGlfd3JpdGVsKE1ERElfQ01EX1BFUklPRElDX1JFVl9FTkNBUCwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCisJaWYgKG1kZGlfcmVhZGwoUEFEX0NUTCkgPT0gMCkgeworCQkvKiBJZiB3ZSBhcmUgdHVybmluZyBvbiBiYW5kIGdhcCwgbmVlZCB0byB3YWl0IDV1cyBiZWZvcmUKKwkJICogdHVybmluZyBvbiB0aGUgcmVzdCBvZiB0aGUgUEFEICovCisJCW1kZGlfd3JpdGVsKDB4MDgwMDAsIFBBRF9DVEwpOworCQl1ZGVsYXkoNSk7CisJfQorCisJLyogUmVjb21tZW5kYXRpb24gZnJvbSBQQUQgaHcgdGVhbSAqLworCW1kZGlfd3JpdGVsKDB4YTg1MGYsIFBBRF9DVEwpOworCisKKwkvKiBOZWVkIGFuIGV2ZW4gbnVtYmVyIGZvciBjb3VudHMgKi8KKwltZGRpX3dyaXRlbCgweDYwMDA2LCBEUklWRVJfU1RBUlRfQ05UKTsKKworCW1kZGlfc2V0X2F1dG9faGliZXJuYXRlKCZtZGRpLT5jbGllbnRfZGF0YSwgMCk7CisKKwltZGRpX3dyaXRlbChNRERJX0NNRF9ESVNQX0lHTk9SRSwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCisJbWRkaV9pbml0X3Jldl9lbmNhcChtZGRpKTsKKwlyZXR1cm4gbWRkaV9yZWFkbChDT1JFX1ZFUikgJiAweGZmZmY7Cit9CisKK3N0YXRpYyB2b2lkIG1kZGlfc3VzcGVuZChzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNkYXRhKQoreworCXN0cnVjdCBtZGRpX2luZm8gKm1kZGkgPSBjb250YWluZXJfb2YoY2RhdGEsIHN0cnVjdCBtZGRpX2luZm8sCisJCQkJCSAgICAgIGNsaWVudF9kYXRhKTsKKwkvKiB0dXJuIG9mZiB0aGUgY2xpZW50ICovCisJaWYgKG1kZGktPnBvd2VyX2NsaWVudCkKKwkJbWRkaS0+cG93ZXJfY2xpZW50KCZtZGRpLT5jbGllbnRfZGF0YSwgMCk7CisJLyogdHVybiBvZmYgdGhlIGxpbmsgKi8KKwltZGRpX3dyaXRlbChNRERJX0NNRF9SRVNFVCwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCS8qIHR1cm4gb2ZmIHRoZSBjbG9jayAqLworCWNsa19kaXNhYmxlKG1kZGktPmNsayk7Cit9CisKK3N0YXRpYyB2b2lkIG1kZGlfcmVzdW1lKHN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2RhdGEpCit7CisJc3RydWN0IG1kZGlfaW5mbyAqbWRkaSA9IGNvbnRhaW5lcl9vZihjZGF0YSwgc3RydWN0IG1kZGlfaW5mbywKKwkJCQkJICAgICAgY2xpZW50X2RhdGEpOworCW1kZGlfc2V0X2F1dG9faGliZXJuYXRlKCZtZGRpLT5jbGllbnRfZGF0YSwgMCk7CisJLyogdHVybiBvbiB0aGUgY2xpZW50ICovCisJaWYgKG1kZGktPnBvd2VyX2NsaWVudCkKKwkJbWRkaS0+cG93ZXJfY2xpZW50KCZtZGRpLT5jbGllbnRfZGF0YSwgMSk7CisJLyogdHVybiBvbiB0aGUgY2xvY2sgKi8KKwljbGtfZW5hYmxlKG1kZGktPmNsayk7CisJLyogc2V0IHVwIHRoZSBsb2NhbCByZWdpc3RlcnMgKi8KKwltZGRpLT5yZXZfZGF0YV9jdXJyID0gMDsKKwltZGRpX2luaXRfcmVnaXN0ZXJzKG1kZGkpOworCW1kZGlfd3JpdGVsKG1kZGktPmludF9lbmFibGUsIElOVEVOKTsKKwltZGRpX3dyaXRlbChNRERJX0NNRF9MSU5LX0FDVElWRSwgQ01EKTsKKwltZGRpX3dyaXRlbChNRERJX0NNRF9TRU5EX1JURCwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCW1kZGlfc2V0X2F1dG9faGliZXJuYXRlKCZtZGRpLT5jbGllbnRfZGF0YSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1kZGlfZ2V0X2NsaWVudF9jYXBzKHN0cnVjdCBtZGRpX2luZm8gKm1kZGkpCit7CisJaW50IGksIGo7CisKKwkvKiBjbGVhciBhbnkgc3RhbGUgaW50ZXJydXB0cyAqLworCW1kZGlfd3JpdGVsKDB4ZmZmZmZmZmYsIElOVCk7CisKKwltZGRpLT5pbnRfZW5hYmxlID0gTURESV9JTlRfTElOS19BQ1RJVkUgfAorCQkJICAgTURESV9JTlRfSU5fSElCRVJOQVRJT04gfAorCQkJICAgTURESV9JTlRfUFJJX0xJTktfTElTVF9ET05FIHwKKwkJCSAgIE1ERElfSU5UX1JFVl9EQVRBX0FWQUlMIHwKKwkJCSAgIE1ERElfSU5UX1JFVl9PVkVSRkxPVyB8CisJCQkgICBNRERJX0lOVF9SRVZfT1ZFUldSSVRFIHwKKwkJCSAgIE1ERElfSU5UX1JURF9GQUlMVVJFOworCW1kZGlfd3JpdGVsKG1kZGktPmludF9lbmFibGUsIElOVEVOKTsKKworCW1kZGlfd3JpdGVsKE1ERElfQ01EX0xJTktfQUNUSVZFLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisKKwlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7CisJCS8qIHRoZSB0b3NoaWJhIHZnYSBwYW5lbCBkb2VzIG5vdCByZXNwb25kIHRvIGdldAorCQkgKiBjYXBzIHVubGVzcyB5b3UgU0VORF9SVEQsIGJ1dCB0aGUgZmlyc3QgU0VORF9SVEQKKwkJICogd2lsbCBmYWlsLi4uCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl1aW50MzJfdCBzdGF0OworCisJCQltZGRpX3dyaXRlbChNRERJX0NNRF9TRU5EX1JURCwgQ01EKTsKKwkJCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJCQlzdGF0ID0gbWRkaV9yZWFkbChTVEFUKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIm1kZGkgY21kIHNlbmQgcnRkOiBpbnQgJXgsIHN0YXQgJXgsICIKKwkJCQkJInJ0ZCB2YWwgJXhcbiIsIG1kZGlfcmVhZGwoSU5UKSwgc3RhdCwKKwkJCQkJbWRkaV9yZWFkbChSVERfVkFMKSk7CisJCQlpZiAoKHN0YXQgJiBNRERJX1NUQVRfUlREX01FQVNfRkFJTCkgPT0gMCkKKwkJCQlicmVhazsKKwkJCW1zbGVlcCgxKTsKKwkJfQorCisJCW1kZGlfd3JpdGVsKENNRF9HRVRfQ0xJRU5UX0NBUCwgQ01EKTsKKwkJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKKwkJd2FpdF9ldmVudF90aW1lb3V0KG1kZGktPmludF93YWl0LCBtZGRpLT5mbGFncyAmIEZMQUdfSEFWRV9DQVBTLAorCQkJCSAgIEhaIC8gMTAwKTsKKworCQlpZiAobWRkaS0+ZmxhZ3MgJiBGTEFHX0hBVkVfQ0FQUykKKwkJCWJyZWFrOworCQlwcmludGsoS0VSTl9JTkZPIEtFUk5fRVJSICJtZGRpX2luaXQsIHRpbWVvdXQgd2FpdGluZyBmb3IgIgorCQkJCSJjYXBzXG4iKTsKKwl9CisJcmV0dXJuIG1kZGktPmZsYWdzICYgRkxBR19IQVZFX0NBUFM7Cit9CisKKy8qIGxpbmsgbXVzdCBiZSBhY3RpdmUgd2hlbiB0aGlzIGlzIGNhbGxlZCAqLworaW50IG1kZGlfY2hlY2tfc3RhdHVzKHN0cnVjdCBtZGRpX2luZm8gKm1kZGkpCit7CisJaW50IHJldCA9IC0xLCByZXRyeSA9IDM7CisJbXV0ZXhfbG9jaygmbWRkaS0+cmVnX3JlYWRfbG9jayk7CisJbWRkaV93cml0ZWwoTURESV9DTURfUEVSSU9ESUNfUkVWX0VOQ0FQIHwgMSwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCisJZG8geworCQltZGRpLT5mbGFncyAmPSB+RkxBR19IQVZFX1NUQVRVUzsKKwkJbWRkaV93cml0ZWwoQ01EX0dFVF9DTElFTlRfU1RBVFVTLCBDTUQpOworCQltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCQl3YWl0X2V2ZW50X3RpbWVvdXQobWRkaS0+aW50X3dhaXQsCisJCQkJICAgbWRkaS0+ZmxhZ3MgJiBGTEFHX0hBVkVfU1RBVFVTLAorCQkJCSAgIEhaIC8gMTAwKTsKKworCQlpZiAobWRkaS0+ZmxhZ3MgJiBGTEFHX0hBVkVfU1RBVFVTKSB7CisJCQlpZiAobWRkaS0+c3RhdHVzLmNyY19lcnJvcl9jb3VudCkKKwkJCQlwcmludGsoS0VSTl9JTkZPICJtZGRpIHN0YXR1czogY3JjX2Vycm9yICIKKwkJCQkJImNvdW50OiAlZFxuIiwKKwkJCQkJbWRkaS0+c3RhdHVzLmNyY19lcnJvcl9jb3VudCk7CisJCQllbHNlCisJCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIm1kZGkgc3RhdHVzOiBmYWlsZWQgdG8gZ2V0IGNsaWVudCAiCisJCQkJInN0YXR1c1xuIik7CisJCW1kZGlfd3JpdGVsKE1ERElfQ01EX1NFTkRfUlRELCBDTUQpOworCQltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCX0gd2hpbGUgKC0tcmV0cnkpOworCisJbWRkaV93cml0ZWwoTURESV9DTURfUEVSSU9ESUNfUkVWX0VOQ0FQIHwgMCwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCW11dGV4X3VubG9jaygmbWRkaS0+cmVnX3JlYWRfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworCit2b2lkIG1kZGlfcmVtb3RlX3dyaXRlKHN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2RhdGEsIHVpbnQzMl90IHZhbCwKKwkJICAgICAgIHVpbnQzMl90IHJlZykKK3sKKwlzdHJ1Y3QgbWRkaV9pbmZvICptZGRpID0gY29udGFpbmVyX29mKGNkYXRhLCBzdHJ1Y3QgbWRkaV9pbmZvLAorCQkJCQkgICAgICBjbGllbnRfZGF0YSk7CisJc3RydWN0IG1kZGlfbGxlbnRyeSAqbGw7CisJc3RydWN0IG1kZGlfcmVnaXN0ZXJfYWNjZXNzICpyYTsKKworCW11dGV4X2xvY2soJm1kZGktPnJlZ193cml0ZV9sb2NrKTsKKworCWxsID0gbWRkaS0+cmVnX3dyaXRlX2RhdGE7CisKKwlyYSA9ICYobGwtPnUucik7CisJcmEtPmxlbmd0aCA9IDE0ICsgNDsKKwlyYS0+dHlwZSA9IFRZUEVfUkVHSVNURVJfQUNDRVNTOworCXJhLT5jbGllbnRfaWQgPSAwOworCXJhLT5yZWFkX3dyaXRlX2luZm8gPSBNRERJX1dSSVRFIHwgMTsKKwlyYS0+Y3JjMTYgPSAwOworCisJcmEtPnJlZ2lzdGVyX2FkZHJlc3MgPSByZWc7CisJcmEtPnJlZ2lzdGVyX2RhdGFfbGlzdCA9IHZhbDsKKworCWxsLT5mbGFncyA9IDE7CisJbGwtPmhlYWRlcl9jb3VudCA9IDE0OworCWxsLT5kYXRhX2NvdW50ID0gNDsKKwlsbC0+ZGF0YSA9IG1kZGktPnJlZ193cml0ZV9hZGRyICsgb2Zmc2V0b2Yoc3RydWN0IG1kZGlfbGxlbnRyeSwKKwkJCQkJCSAgIHUuci5yZWdpc3Rlcl9kYXRhX2xpc3QpOworCWxsLT5uZXh0ID0gMDsKKwlsbC0+cmVzZXJ2ZWQgPSAwOworCisJbWRkaV93cml0ZWwobWRkaS0+cmVnX3dyaXRlX2FkZHIsIFBSSV9QVFIpOworCisJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9QUklfTElOS19MSVNUX0RPTkUpOworCW11dGV4X3VubG9jaygmbWRkaS0+cmVnX3dyaXRlX2xvY2spOworfQorCit1aW50MzJfdCBtZGRpX3JlbW90ZV9yZWFkKHN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2RhdGEsIHVpbnQzMl90IHJlZykKK3sKKwlzdHJ1Y3QgbWRkaV9pbmZvICptZGRpID0gY29udGFpbmVyX29mKGNkYXRhLCBzdHJ1Y3QgbWRkaV9pbmZvLAorCQkJCQkgICAgICBjbGllbnRfZGF0YSk7CisJc3RydWN0IG1kZGlfbGxlbnRyeSAqbGw7CisJc3RydWN0IG1kZGlfcmVnaXN0ZXJfYWNjZXNzICpyYTsKKwlzdHJ1Y3QgcmVnX3JlYWRfaW5mbyByaTsKKwl1bnNpZ25lZCBzOworCWludCByZXRyeV9jb3VudCA9IDI7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwltdXRleF9sb2NrKCZtZGRpLT5yZWdfcmVhZF9sb2NrKTsKKworCWxsID0gbWRkaS0+cmVnX3JlYWRfZGF0YTsKKworCXJhID0gJihsbC0+dS5yKTsKKwlyYS0+bGVuZ3RoID0gMTQ7CisJcmEtPnR5cGUgPSBUWVBFX1JFR0lTVEVSX0FDQ0VTUzsKKwlyYS0+Y2xpZW50X2lkID0gMDsKKwlyYS0+cmVhZF93cml0ZV9pbmZvID0gTURESV9SRUFEIHwgMTsKKwlyYS0+Y3JjMTYgPSAwOworCisJcmEtPnJlZ2lzdGVyX2FkZHJlc3MgPSByZWc7CisKKwlsbC0+ZmxhZ3MgPSAweDExOworCWxsLT5oZWFkZXJfY291bnQgPSAxNDsKKwlsbC0+ZGF0YV9jb3VudCA9IDA7CisJbGwtPmRhdGEgPSAwOworCWxsLT5uZXh0ID0gMDsKKwlsbC0+cmVzZXJ2ZWQgPSAwOworCisJcyA9IG1kZGlfcmVhZGwoU1RBVCk7CisKKwlyaS5yZWcgPSByZWc7CisJcmkuc3RhdHVzID0gLTE7CisKKwlkbyB7CisJCWluaXRfY29tcGxldGlvbigmcmkuZG9uZSk7CisJCW1kZGktPnJlZ19yZWFkID0gJnJpOworCQltZGRpX3dyaXRlbChtZGRpLT5yZWdfcmVhZF9hZGRyLCBQUklfUFRSKTsKKworCQltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX1BSSV9MSU5LX0xJU1RfRE9ORSk7CisKKwkJLyogRW5hYmxlIFBlcmlvZGljIFJldmVyc2UgRW5jYXBzdWxhdGlvbi4gKi8KKwkJbWRkaV93cml0ZWwoTURESV9DTURfUEVSSU9ESUNfUkVWX0VOQ0FQIHwgMSwgQ01EKTsKKwkJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKKwkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcmkuZG9uZSwgSFovMTApID09IDAgJiYKKwkJICAgICFyaS5kb25lLmRvbmUpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIm1kZGlfcmVtb3RlX3JlYWQoJXgpIHRpbWVvdXQgIgorCQkJCQkgIiglZCAlZCAlZClcbiIsCisJCQkgICAgICAgcmVnLCByaS5zdGF0dXMsIHJpLnJlc3VsdCwgcmkuZG9uZS5kb25lKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtZGRpLT5pbnRfbG9jaywgaXJxX2ZsYWdzKTsKKwkJCW1kZGktPnJlZ19yZWFkID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kZGktPmludF9sb2NrLCBpcnFfZmxhZ3MpOworCQkJcmkuc3RhdHVzID0gLTE7CisJCQlyaS5yZXN1bHQgPSAtMTsKKwkJfQorCQlpZiAocmkuc3RhdHVzID09IDApCisJCQlicmVhazsKKworCQltZGRpX3dyaXRlbChNRERJX0NNRF9TRU5EX1JURCwgQ01EKTsKKwkJbWRkaV93cml0ZWwoTURESV9DTURfTElOS19BQ1RJVkUsIENNRCk7CisJCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJCXByaW50ayhLRVJOX0lORk8gIm1kZGlfcmVtb3RlX3JlYWQ6IGZhaWxlZCwgc2VudCAiCisJCSAgICAgICAiTURESV9DTURfU0VORF9SVEQ6IGludCAleCwgc3RhdCAleCwgcnRkIHZhbCAleCAiCisJCSAgICAgICAiY3Vycl9yZXZfcHRyICV4XG4iLCBtZGRpX3JlYWRsKElOVCksIG1kZGlfcmVhZGwoU1RBVCksCisJCSAgICAgICBtZGRpX3JlYWRsKFJURF9WQUwpLCBtZGRpX3JlYWRsKENVUlJfUkVWX1BUUikpOworCX0gd2hpbGUgKHJldHJ5X2NvdW50LS0gPiAwKTsKKwkvKiBEaXNhYmxlIFBlcmlvZGljIFJldmVyc2UgRW5jYXBzdWxhdGlvbi4gKi8KKwltZGRpX3dyaXRlbChNRERJX0NNRF9QRVJJT0RJQ19SRVZfRU5DQVAgfCAwLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJbWRkaS0+cmVnX3JlYWQgPSBOVUxMOworCW11dGV4X3VubG9jaygmbWRkaS0+cmVnX3JlYWRfbG9jayk7CisJcmV0dXJuIHJpLnJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCBtZGRpX2luZm8gbWRkaV9pbmZvWzJdOworCitzdGF0aWMgaW50IF9faW5pdCBtZGRpX2Nsa19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSBzdHJ1Y3QgbWRkaV9pbmZvICptZGRpLAorCQkJCSB1bnNpZ25lZCBsb25nIGNsa19yYXRlKQoreworCWludCByZXQ7CisKKwkvKiBzZXQgdXAgdGhlIGNsb2NrcyAqLworCW1kZGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1kZGlfY2xrIik7CisJaWYgKElTX0VSUihtZGRpLT5jbGspKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1kZGk6IGZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihtZGRpLT5jbGspOworCX0KKwlyZXQgPSAgY2xrX2VuYWJsZShtZGRpLT5jbGspOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBjbGtfc2V0X3JhdGUobWRkaS0+Y2xrLCBjbGtfcmF0ZSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCXJldHVybiAwOworCitmYWlsOgorCWNsa19wdXQobWRkaS0+Y2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBtZGRpX3Jldl9kYXRhX3NldHVwKHN0cnVjdCBtZGRpX2luZm8gKm1kZGkpCit7CisJdm9pZCAqZG1hOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisKKwkvKiBzZXQgdXAgZG1hIGJ1ZmZlciAqLworCWRtYSA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCAweDEwMDAsICZkbWFfYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKGRtYSA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZGRpLT5yZXZfZGF0YSA9IGRtYTsKKwltZGRpLT5yZXZfZGF0YV9jdXJyID0gMDsKKwltZGRpLT5yZXZfYWRkciA9IGRtYV9hZGRyOworCW1kZGktPnJlZ193cml0ZV9kYXRhID0gZG1hICsgTURESV9SRVZfQlVGRkVSX1NJWkU7CisJbWRkaS0+cmVnX3dyaXRlX2FkZHIgPSBkbWFfYWRkciArIE1ERElfUkVWX0JVRkZFUl9TSVpFOworCW1kZGktPnJlZ19yZWFkX2RhdGEgPSBtZGRpLT5yZWdfd3JpdGVfZGF0YSArIDE7CisJbWRkaS0+cmVnX3JlYWRfYWRkciA9IG1kZGktPnJlZ193cml0ZV9hZGRyICsKKwkJCSAgICAgIHNpemVvZigqbWRkaS0+cmVnX3dyaXRlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtZGRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1zbV9tZGRpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1kZGlfaW5mbyAqbWRkaSA9ICZtZGRpX2luZm9bcGRldi0+aWRdOworCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CisJaW50IHJldCwgaTsKKworCXJlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlc291cmNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRkaTogbm8gYXNzb2NpYXRlZCBtZW0gcmVzb3VyY2UhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1kZGktPmJhc2UgPSBpb3JlbWFwKHJlc291cmNlLT5zdGFydCwgcmVzb3VyY2UtPmVuZCAtIHJlc291cmNlLT5zdGFydCk7CisJaWYgKCFtZGRpLT5iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRkaTogZmFpbGVkIHRvIHJlbWFwIGJhc2UhXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcl9pb3JlbWFwOworCX0KKwlyZXNvdXJjZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXNvdXJjZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1kZGk6IG5vIGFzc29jaWF0ZWQgaXJxIHJlc291cmNlIVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3JfZ2V0X2lycV9yZXNvdXJjZTsKKwl9CisJbWRkaS0+aXJxID0gcmVzb3VyY2UtPnN0YXJ0OworCXByaW50ayhLRVJOX0lORk8gIm1kZGk6IGluaXQoKSBiYXNlPTB4JXAgaXJxPSVkXG4iLCBtZGRpLT5iYXNlLAorCSAgICAgICBtZGRpLT5pcnEpOworCW1kZGktPnBvd2VyX2NsaWVudCA9IHBkYXRhLT5wb3dlcl9jbGllbnQ7CisKKwltdXRleF9pbml0KCZtZGRpLT5yZWdfd3JpdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmbWRkaS0+cmVnX3JlYWRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm1kZGktPmludF9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZGRpLT5pbnRfd2FpdCk7CisKKwlyZXQgPSBtZGRpX2Nsa19zZXR1cChwZGV2LCBtZGRpLCBwZGF0YS0+Y2xrX3JhdGUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGRpOiBmYWlsZWQgdG8gc2V0dXAgY2xvY2shXG4iKTsKKwkJZ290byBlcnJvcl9jbGtfc2V0dXA7CisJfQorCisJcmV0ID0gbWRkaV9yZXZfZGF0YV9zZXR1cChtZGRpKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRkaTogZmFpbGVkIHRvIHNldHVwIHJldiBkYXRhIVxuIik7CisJCWdvdG8gZXJyb3JfcmV2X2RhdGE7CisJfQorCisJbWRkaS0+aW50X2VuYWJsZSA9IDA7CisJbWRkaV93cml0ZWwobWRkaS0+aW50X2VuYWJsZSwgSU5URU4pOworCXJldCA9IHJlcXVlc3RfaXJxKG1kZGktPmlycSwgbWRkaV9pc3IsIElSUUZfRElTQUJMRUQsICJtZGRpIiwKKwkJCSAgJm1kZGktPmNsaWVudF9kYXRhKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRkaTogZmFpbGVkIHRvIHJlcXVlc3QgZW5hYmxlIGlycSFcbiIpOworCQlnb3RvIGVycm9yX3JlcXVlc3RfaXJxOworCX0KKworCS8qIHR1cm4gb24gdGhlIG1kZGkgY2xpZW50IGJyaWRnZSBjaGlwICovCisJaWYgKG1kZGktPnBvd2VyX2NsaWVudCkKKwkJbWRkaS0+cG93ZXJfY2xpZW50KCZtZGRpLT5jbGllbnRfZGF0YSwgMSk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBtZGRpIHJlZ2lzdGVycyAqLworCW1kZGlfc2V0X2F1dG9faGliZXJuYXRlKCZtZGRpLT5jbGllbnRfZGF0YSwgMCk7CisJbWRkaV93cml0ZWwoTURESV9DTURfUkVTRVQsIENNRCk7CisJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKKwltZGRpLT52ZXJzaW9uID0gbWRkaV9pbml0X3JlZ2lzdGVycyhtZGRpKTsKKwlpZiAobWRkaS0+dmVyc2lvbiA8IDB4MjApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGRpOiB1bnN1cHBvcnRlZCB2ZXJzaW9uIDB4JXhcbiIsCisJCSAgICAgICBtZGRpLT52ZXJzaW9uKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9tZGRpX3ZlcnNpb247CisJfQorCisJLyogcmVhZCB0aGUgY2FwYWJpbGl0aWVzIG9mZiB0aGUgY2xpZW50ICovCisJaWYgKCFtZGRpX2dldF9jbGllbnRfY2FwcyhtZGRpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJtZGRpOiBubyBjbGllbnQgZm91bmRcbiIpOworCQkvKiBwb3dlciBkb3duIHRoZSBwYW5lbCAqLworCQltZGRpX3dyaXRlbChNRERJX0NNRF9QT1dFUkRPV04sIENNRCk7CisJCXByaW50ayhLRVJOX0lORk8gIm1kZGkgcG93ZXJkb3duOiBzdGF0ICV4XG4iLCBtZGRpX3JlYWRsKFNUQVQpKTsKKwkJbXNsZWVwKDEwMCk7CisJCXByaW50ayhLRVJOX0lORk8gIm1kZGkgcG93ZXJkb3duOiBzdGF0ICV4XG4iLCBtZGRpX3JlYWRsKFNUQVQpKTsKKwkJcmV0dXJuIDA7CisJfQorCW1kZGlfc2V0X2F1dG9faGliZXJuYXRlKCZtZGRpLT5jbGllbnRfZGF0YSwgMSk7CisKKwlpZiAobWRkaS0+Y2Fwcy5NZnJfTmFtZSA9PSAwICYmIG1kZGktPmNhcHMuUHJvZHVjdF9Db2RlID09IDApCisJCXBkYXRhLT5maXh1cCgmbWRkaS0+Y2Fwcy5NZnJfTmFtZSwgJm1kZGktPmNhcHMuUHJvZHVjdF9Db2RlKTsKKworCW1kZGktPmNsaWVudF9wZGV2LmlkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKHBkYXRhLT5jbGllbnRfcGxhdGZvcm1fZGF0YVtpXS5wcm9kdWN0X2lkID09CisJCSAgICAobWRkaS0+Y2Fwcy5NZnJfTmFtZSA8PCAxNiB8IG1kZGktPmNhcHMuUHJvZHVjdF9Db2RlKSkgeworCQkJbWRkaS0+Y2xpZW50X2RhdGEucHJpdmF0ZV9jbGllbnRfZGF0YSA9CisJCQkJcGRhdGEtPmNsaWVudF9wbGF0Zm9ybV9kYXRhW2ldLmNsaWVudF9kYXRhOworCQkJbWRkaS0+Y2xpZW50X3BkZXYubmFtZSA9CisJCQkJcGRhdGEtPmNsaWVudF9wbGF0Zm9ybV9kYXRhW2ldLm5hbWU7CisJCQltZGRpLT5jbGllbnRfcGRldi5pZCA9CisJCQkJcGRhdGEtPmNsaWVudF9wbGF0Zm9ybV9kYXRhW2ldLmlkOworCQkJLyogWFhYOiBwb3NzaWJseSBzZXQgY2xvY2sgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPj0gcGRhdGEtPm51bV9jbGllbnRzKQorCQltZGRpLT5jbGllbnRfcGRldi5uYW1lID0gIm1kZGlfY19kdW1teSI7CisJcHJpbnRrKEtFUk5fSU5GTyAibWRkaTogcmVnaXN0ZXJpbmcgcGFuZWwgJXNcbiIsCisJCW1kZGktPmNsaWVudF9wZGV2Lm5hbWUpOworCisJbWRkaS0+Y2xpZW50X2RhdGEuc3VzcGVuZCA9IG1kZGlfc3VzcGVuZDsKKwltZGRpLT5jbGllbnRfZGF0YS5yZXN1bWUgPSBtZGRpX3Jlc3VtZTsKKwltZGRpLT5jbGllbnRfZGF0YS5hY3RpdmF0ZV9saW5rID0gbWRkaV9hY3RpdmF0ZV9saW5rOworCW1kZGktPmNsaWVudF9kYXRhLnJlbW90ZV93cml0ZSA9IG1kZGlfcmVtb3RlX3dyaXRlOworCW1kZGktPmNsaWVudF9kYXRhLnJlbW90ZV9yZWFkID0gbWRkaV9yZW1vdGVfcmVhZDsKKwltZGRpLT5jbGllbnRfZGF0YS5hdXRvX2hpYmVybmF0ZSA9IG1kZGlfc2V0X2F1dG9faGliZXJuYXRlOworCW1kZGktPmNsaWVudF9kYXRhLmZiX3Jlc291cmNlID0gcGRhdGEtPmZiX3Jlc291cmNlOworCWlmIChwZGV2LT5pZCA9PSAwKQorCQltZGRpLT5jbGllbnRfZGF0YS5pbnRlcmZhY2VfdHlwZSA9IE1TTV9NRERJX1BNREhfSU5URVJGQUNFOworCWVsc2UgaWYgKHBkZXYtPmlkID09IDEpCisJCW1kZGktPmNsaWVudF9kYXRhLmludGVyZmFjZV90eXBlID0gTVNNX01ERElfRU1ESF9JTlRFUkZBQ0U7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRkaTogY2FuIG5vdCBkZXRlcm1pbmUgaW50ZXJmYWNlICVkIVxuIiwKKwkJICAgICAgIHBkZXYtPmlkKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcl9tZGRpX2ludGVyZmFjZTsKKwl9CisKKwltZGRpLT5jbGllbnRfcGRldi5kZXYucGxhdGZvcm1fZGF0YSA9ICZtZGRpLT5jbGllbnRfZGF0YTsKKwlwcmludGsoS0VSTl9JTkZPICJtZGRpOiBwdWJsaXNoOiAlc1xuIiwgbWRkaS0+Y2xpZW50X25hbWUpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWRkaS0+Y2xpZW50X3BkZXYpOworCXJldHVybiAwOworCitlcnJvcl9tZGRpX2ludGVyZmFjZToKK2Vycm9yX21kZGlfdmVyc2lvbjoKKwlmcmVlX2lycShtZGRpLT5pcnEsIDApOworZXJyb3JfcmVxdWVzdF9pcnE6CisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgMHgxMDAwLCBtZGRpLT5yZXZfZGF0YSwgbWRkaS0+cmV2X2FkZHIpOworZXJyb3JfcmV2X2RhdGE6CitlcnJvcl9jbGtfc2V0dXA6CitlcnJvcl9nZXRfaXJxX3Jlc291cmNlOgorCWlvdW5tYXAobWRkaS0+YmFzZSk7CitlcnJvcl9pb3JlbWFwOgorCisJcHJpbnRrKEtFUk5fSU5GTyAibWRkaTogbWRkaV9pbml0KCkgZmFpbGVkICglZClcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZGRpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtZGRpX3Byb2JlLAorCS5kcml2ZXIgPSB7IC5uYW1lID0gIm1zbV9tZGRpIiB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgX21kZGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1kZGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoX21kZGlfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9kdW1teS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfZHVtbXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmJhZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfZHVtbXkuYwpAQCAtMCwwICsxLDk3IEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZGRpX2NsaWVudF9kdW1teS5jCisgKgorICogU3VwcG9ydCBmb3IgImR1bW15IiBtZGRpIGNsaWVudCBkZXZpY2VzIHdoaWNoIHJlcXVpcmUgbm8KKyAqIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KKworc3RydWN0IHBhbmVsX2luZm8geworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKKwlzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgcGFuZWxfZGF0YTsKK307CisKK3N0YXRpYyBpbnQgbWRkaV9kdW1teV9zdXNwZW5kKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGRpX2R1bW15X3Jlc3VtZShzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWRkaV9kdW1teV9ibGFuayhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWRkaV9kdW1teV91bmJsYW5rKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGRpX2R1bW15X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYW5lbF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaW50IHJldDsKKwlpZiAoIXBhbmVsKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwYW5lbCk7CisJcGFuZWwtPnBhbmVsX2RhdGEuc3VzcGVuZCA9IG1kZGlfZHVtbXlfc3VzcGVuZDsKKwlwYW5lbC0+cGFuZWxfZGF0YS5yZXN1bWUgPSBtZGRpX2R1bW15X3Jlc3VtZTsKKwlwYW5lbC0+cGFuZWxfZGF0YS5ibGFuayA9IG1kZGlfZHVtbXlfYmxhbms7CisJcGFuZWwtPnBhbmVsX2RhdGEudW5ibGFuayA9IG1kZGlfZHVtbXlfdW5ibGFuazsKKwlwYW5lbC0+cGFuZWxfZGF0YS5jYXBzID0gTVNNRkJfQ0FQX1BBUlRJQUxfVVBEQVRFUzsKKwlwYW5lbC0+cGRldi5uYW1lID0gIm1zbV9wYW5lbCI7CisJcGFuZWwtPnBkZXYuaWQgPSBwZGV2LT5pZDsKKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcygmcGFuZWwtPnBkZXYsCisJCQkJICAgICAgY2xpZW50X2RhdGEtPmZiX3Jlc291cmNlLCAxKTsKKwlwYW5lbC0+cGFuZWxfZGF0YS5mYl9kYXRhID0gY2xpZW50X2RhdGEtPnByaXZhdGVfY2xpZW50X2RhdGE7CisJcGFuZWwtPnBkZXYuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcGFuZWwtPnBhbmVsX2RhdGE7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYW5lbC0+cGRldik7CisJaWYgKHJldCkgeworCQlrZnJlZShwYW5lbCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1kZGlfZHVtbXlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJa2ZyZWUocGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZGRpX2NsaWVudF9kdW1teSA9IHsKKwkucHJvYmUgPSBtZGRpX2R1bW15X3Byb2JlLAorCS5yZW1vdmUgPSBtZGRpX2R1bW15X3JlbW92ZSwKKwkuZHJpdmVyID0geyAubmFtZSA9ICJtZGRpX2NfZHVtbXkiIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtZGRpX2NsaWVudF9kdW1teV9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtZGRpX2NsaWVudF9kdW1teSk7CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KG1kZGlfY2xpZW50X2R1bW15X2luaXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3ODA1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYwpAQCAtMCwwICsxLDI1NSBAQAorLyogZHJpdmVycy92aWRlby9tc21fZmIvbWRkaV9jbGllbnRfbnQzNTM5OS5jCisgKgorICogU3VwcG9ydCBmb3IgTm92YXRlayBOVDM1Mzk5IE1EREkgY2xpZW50IG9mIFNhcHBoaXJlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhUQyBJbmNvcnBvcmF0ZWQKKyAqIEF1dGhvcjogU29sb21vbiBDaGl1IChzb2xvbW9uX2NoaXVAaHRjLmNvbSkKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG50MzUzOTlfdnN5bmNfd2FpdCk7CisKK3N0cnVjdCBwYW5lbF9pbmZvIHsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKKwlzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgcGFuZWxfZGF0YTsKKwlzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgKmZiX2NhbGxiYWNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBwYW5lbF93b3JrOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmYl93cTsKKwlpbnQgbnQzNTM5OV9nb3RfaW50OworfTsKKworc3RhdGljIHZvaWQKK250MzUzOTlfcmVxdWVzdF92c3luYyhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEsCisJCSAgICAgIHN0cnVjdCBtc21mYl9jYWxsYmFjayAqY2FsbGJhY2spCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKworCXBhbmVsLT5mYl9jYWxsYmFjayA9IGNhbGxiYWNrOworCWlmIChwYW5lbC0+bnQzNTM5OV9nb3RfaW50KSB7CisJCXBhbmVsLT5udDM1Mzk5X2dvdF9pbnQgPSAwOworCQljbGllbnRfZGF0YS0+YWN0aXZhdGVfbGluayhjbGllbnRfZGF0YSk7IC8qIGNsZWFycyBpbnRlcnJ1cHQgKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG50MzUzOTlfd2FpdF92c3luYyhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKworCWlmIChwYW5lbC0+bnQzNTM5OV9nb3RfaW50KSB7CisJCXBhbmVsLT5udDM1Mzk5X2dvdF9pbnQgPSAwOworCQljbGllbnRfZGF0YS0+YWN0aXZhdGVfbGluayhjbGllbnRfZGF0YSk7IC8qIGNsZWFycyBpbnRlcnJ1cHQgKi8KKwl9CisKKwlpZiAod2FpdF9ldmVudF90aW1lb3V0KG50MzUzOTlfdnN5bmNfd2FpdCwgcGFuZWwtPm50MzUzOTlfZ290X2ludCwKKwkJCQlIWi8yKSA9PSAwKQorCQlwcmludGsoS0VSTl9FUlIgInRpbWVvdXQgd2FpdGluZyBmb3IgVlNZTkNcbiIpOworCisJcGFuZWwtPm50MzUzOTlfZ290X2ludCA9IDA7CisJLyogaW50ZXJydXB0IGNsZWFycyB3aGVuIHNjcmVlbiBkbWEgc3RhcnRzICovCit9CisKK3N0YXRpYyBpbnQgbnQzNTM5OV9zdXNwZW5kKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBicmlkZ2VfZGF0YS0+dW5pbml0KGJyaWRnZV9kYXRhLCBjbGllbnRfZGF0YSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9JTkZPICJtZGRpIG50MzUzOTkgY2xpZW50OiBub24gemVybyByZXR1cm4gZnJvbSAiCisJCQkidW5pbml0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY2xpZW50X2RhdGEtPnN1c3BlbmQoY2xpZW50X2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG50MzUzOTlfcmVzdW1lKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCWludCByZXQ7CisKKwljbGllbnRfZGF0YS0+cmVzdW1lKGNsaWVudF9kYXRhKTsKKwlyZXQgPSBicmlkZ2VfZGF0YS0+aW5pdChicmlkZ2VfZGF0YSwgY2xpZW50X2RhdGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnQzNTM5OV9ibGFuayhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKwlzdHJ1Y3QgbXNtX21kZGlfYnJpZGdlX3BsYXRmb3JtX2RhdGEgKmJyaWRnZV9kYXRhID0KKwkJY2xpZW50X2RhdGEtPnByaXZhdGVfY2xpZW50X2RhdGE7CisKKwlyZXR1cm4gYnJpZGdlX2RhdGEtPmJsYW5rKGJyaWRnZV9kYXRhLCBjbGllbnRfZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbnQzNTM5OV91bmJsYW5rKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCXN0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSAqYnJpZGdlX2RhdGEgPQorCQljbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKworCXJldHVybiBicmlkZ2VfZGF0YS0+dW5ibGFuayhicmlkZ2VfZGF0YSwgY2xpZW50X2RhdGEpOworfQorCitpcnFyZXR1cm5fdCBudDM1Mzk5X3ZzeW5jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGRhdGE7CisKKwlwYW5lbC0+bnQzNTM5OV9nb3RfaW50ID0gMTsKKworCWlmIChwYW5lbC0+ZmJfY2FsbGJhY2spIHsKKwkJcGFuZWwtPmZiX2NhbGxiYWNrLT5mdW5jKHBhbmVsLT5mYl9jYWxsYmFjayk7CisJCXBhbmVsLT5mYl9jYWxsYmFjayA9IE5VTEw7CisJfQorCisJd2FrZV91cCgmbnQzNTM5OV92c3luY193YWl0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzZXR1cF92c3luYyhzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwsIGludCBpbml0KQoreworCWludCByZXQ7CisJaW50IGdwaW8gPSA5NzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKCFpbml0KSB7CisJCXJldCA9IDA7CisJCWdvdG8gdW5pbml0OworCX0KKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgInZzeW5jIik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVxdWVzdF9ncGlvX2ZhaWxlZDsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZGlyZWN0aW9uX2lucHV0X2ZhaWxlZDsKKworCXJldCA9IGlycSA9IGdwaW9fdG9faXJxKGdwaW8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9nZXRfaXJxX251bV9mYWlsZWQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIG50MzUzOTlfdnN5bmNfaW50ZXJydXB0LCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICAidnN5bmMiLCBwYW5lbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVxdWVzdF9pcnFfZmFpbGVkOworCisJcHJpbnRrKEtFUk5fSU5GTyAidnN5bmMgb24gZ3BpbyAlZCBub3cgJWRcbiIsCisJICAgICAgIGdwaW8sIGdwaW9fZ2V0X3ZhbHVlKGdwaW8pKTsKKwlyZXR1cm4gMDsKKwordW5pbml0OgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKGdwaW8pLCBwYW5lbC0+Y2xpZW50X2RhdGEpOworZXJyX3JlcXVlc3RfaXJxX2ZhaWxlZDoKK2Vycl9nZXRfaXJxX251bV9mYWlsZWQ6CitlcnJfZ3Bpb19kaXJlY3Rpb25faW5wdXRfZmFpbGVkOgorCWdwaW9fZnJlZShncGlvKTsKK2Vycl9yZXF1ZXN0X2dwaW9fZmFpbGVkOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWRkaV9udDM1Mzk5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSAqYnJpZGdlX2RhdGEgPQorCQljbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKworCWludCByZXQ7CisKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFuZWxfaW5mbyksCisJCQkJCSAgIEdGUF9LRVJORUwpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlbnRlci5cbiIsIF9fZnVuY19fKTsKKworCWlmICghcGFuZWwpCisJCXJldHVybiAtRU5PTUVNOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBhbmVsKTsKKworCXJldCA9IHNldHVwX3ZzeW5jKHBhbmVsLCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1kZGlfbnQzNTM5OV9zZXR1cF92c3luYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBhbmVsLT5jbGllbnRfZGF0YSA9IGNsaWVudF9kYXRhOworCXBhbmVsLT5wYW5lbF9kYXRhLnN1c3BlbmQgPSBudDM1Mzk5X3N1c3BlbmQ7CisJcGFuZWwtPnBhbmVsX2RhdGEucmVzdW1lID0gbnQzNTM5OV9yZXN1bWU7CisJcGFuZWwtPnBhbmVsX2RhdGEud2FpdF92c3luYyA9IG50MzUzOTlfd2FpdF92c3luYzsKKwlwYW5lbC0+cGFuZWxfZGF0YS5yZXF1ZXN0X3ZzeW5jID0gbnQzNTM5OV9yZXF1ZXN0X3ZzeW5jOworCXBhbmVsLT5wYW5lbF9kYXRhLmJsYW5rID0gbnQzNTM5OV9ibGFuazsKKwlwYW5lbC0+cGFuZWxfZGF0YS51bmJsYW5rID0gbnQzNTM5OV91bmJsYW5rOworCXBhbmVsLT5wYW5lbF9kYXRhLmZiX2RhdGEgPSAmYnJpZGdlX2RhdGEtPmZiX2RhdGE7CisJcGFuZWwtPnBhbmVsX2RhdGEuY2FwcyA9IDA7CisKKwlwYW5lbC0+cGRldi5uYW1lID0gIm1zbV9wYW5lbCI7CisJcGFuZWwtPnBkZXYuaWQgPSBwZGV2LT5pZDsKKwlwYW5lbC0+cGRldi5yZXNvdXJjZSA9IGNsaWVudF9kYXRhLT5mYl9yZXNvdXJjZTsKKwlwYW5lbC0+cGRldi5udW1fcmVzb3VyY2VzID0gMTsKKwlwYW5lbC0+cGRldi5kZXYucGxhdGZvcm1fZGF0YSA9ICZwYW5lbC0+cGFuZWxfZGF0YTsKKworCWlmIChicmlkZ2VfZGF0YS0+aW5pdCkKKwkJYnJpZGdlX2RhdGEtPmluaXQoYnJpZGdlX2RhdGEsIGNsaWVudF9kYXRhKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFuZWwtPnBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWRkaV9udDM1Mzk5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc2V0dXBfdnN5bmMocGFuZWwsIDApOworCWtmcmVlKHBhbmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWRkaV9jbGllbnRfMGJkYV84YTQ3ID0geworCS5wcm9iZSA9IG1kZGlfbnQzNTM5OV9wcm9iZSwKKwkucmVtb3ZlID0gbWRkaV9udDM1Mzk5X3JlbW92ZSwKKwkuZHJpdmVyID0geyAubmFtZSA9ICJtZGRpX2NfMGJkYV84YTQ3IiB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWRkaV9jbGllbnRfbnQzNTM5OV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWRkaV9jbGllbnRfMGJkYV84YTQ3KTsKK30KKworbW9kdWxlX2luaXQobWRkaV9jbGllbnRfbnQzNTM5OV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDBmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qIGRyaXZlcnMvdmlkZW8vbXNtX2ZiL21kZGlfY2xpZW50X3Rvc2hpYmEuYworICoKKyAqIFN1cHBvcnQgZm9yIFRvc2hpYmEgVEMzNTg3MjBYQkcgbWRkaSBjbGllbnQgZGV2aWNlcyB3aGljaCByZXF1aXJlIG5vCisgKiBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KKworCisjZGVmaW5lIExDRF9DT05UUk9MX0JMT0NLX0JBU0UgMHgxMTAwMDAKKyNkZWZpbmUgQ01OICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgxMCkKKyNkZWZpbmUgSU5URkxHICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgxOCkKKyNkZWZpbmUgSENZQ0xFICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzNCkKKyNkZWZpbmUgSERFX1NUQVJUICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzQykKKyNkZWZpbmUgVlBPUyAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHhDMCkKKyNkZWZpbmUgTVBMRkJVRiAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgyMCkKKyNkZWZpbmUgV0FLRVVQICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1NCkKKyNkZWZpbmUgV1NZTl9ETFkgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1OCkKKyNkZWZpbmUgUkVHRU5CICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1QykKKworI2RlZmluZSBCQVNFNSAweDE1MDAwMAorI2RlZmluZSBCQVNFNiAweDE2MDAwMAorI2RlZmluZSBCQVNFNyAweDE3MDAwMAorCisjZGVmaW5lIEdQSU9JRVYgICAgIChCQVNFNSArIDB4MTApCisjZGVmaW5lIEdQSU9JRSAgICAgIChCQVNFNSArIDB4MTQpCisjZGVmaW5lIEdQSU9SSVMgICAgIChCQVNFNSArIDB4MTgpCisjZGVmaW5lIEdQSU9NSVMgICAgIChCQVNFNSArIDB4MUMpCisjZGVmaW5lIEdQSU9JQyAgICAgIChCQVNFNSArIDB4MjApCisKKyNkZWZpbmUgSU5UTUFTSyAgICAgKEJBU0U2ICsgMHgwQykKKyNkZWZpbmUgSU5UTUFTS19WV0FLRU9VVCAoMVUgPDwgMCkKKyNkZWZpbmUgSU5UTUFTS19WV0FLRU9VVF9BQ1RJVkVfTE9XICgxVSA8PCA4KQorI2RlZmluZSBHUElPU0VMICAgICAoQkFTRTcgKyAweDAwKQorI2RlZmluZSBHUElPU0VMX1ZXQUtFSU5UICgxVSA8PCAwKQorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodG9zaGliYV92c3luY193YWl0KTsKKworc3RydWN0IHBhbmVsX2luZm8geworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZGV2OworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSBwYW5lbF9kYXRhOworCXN0cnVjdCBtc21mYl9jYWxsYmFjayAqdG9zaGliYV9jYWxsYmFjazsKKwlpbnQgdG9zaGliYV9nb3RfaW50OworfTsKKworCitzdGF0aWMgdm9pZCB0b3NoaWJhX3JlcXVlc3RfdnN5bmMoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhLAorCQkJCSAgc3RydWN0IG1zbWZiX2NhbGxiYWNrICpjYWxsYmFjaykKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJcGFuZWwtPnRvc2hpYmFfY2FsbGJhY2sgPSBjYWxsYmFjazsKKwlpZiAocGFuZWwtPnRvc2hpYmFfZ290X2ludCkgeworCQlwYW5lbC0+dG9zaGliYV9nb3RfaW50ID0gMDsKKwkJY2xpZW50X2RhdGEtPmFjdGl2YXRlX2xpbmsoY2xpZW50X2RhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgdG9zaGliYV9jbGVhcl92c3luYyhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKworCWNsaWVudF9kYXRhLT5hY3RpdmF0ZV9saW5rKGNsaWVudF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgdG9zaGliYV93YWl0X3ZzeW5jKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJaWYgKHBhbmVsLT50b3NoaWJhX2dvdF9pbnQpIHsKKwkJcGFuZWwtPnRvc2hpYmFfZ290X2ludCA9IDA7CisJCWNsaWVudF9kYXRhLT5hY3RpdmF0ZV9saW5rKGNsaWVudF9kYXRhKTsgLyogY2xlYXJzIGludGVycnVwdCAqLworCX0KKwlpZiAod2FpdF9ldmVudF90aW1lb3V0KHRvc2hpYmFfdnN5bmNfd2FpdCwgcGFuZWwtPnRvc2hpYmFfZ290X2ludCwKKwkJCQlIWi8yKSA9PSAwKQorCQlwcmludGsoS0VSTl9FUlIgInRpbWVvdXQgd2FpdGluZyBmb3IgVlNZTkNcbiIpOworCXBhbmVsLT50b3NoaWJhX2dvdF9pbnQgPSAwOworCS8qIGludGVycnVwdCBjbGVhcnMgd2hlbiBzY3JlZW4gZG1hIHN0YXJ0cyAqLworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfc3VzcGVuZChzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKworCXN0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSAqYnJpZGdlX2RhdGEgPQorCQljbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gYnJpZGdlX2RhdGEtPnVuaW5pdChicmlkZ2VfZGF0YSwgY2xpZW50X2RhdGEpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaSB0b3NoaWJhIGNsaWVudDogbm9uIHplcm8gcmV0dXJuIGZyb20gIgorCQkJInVuaW5pdFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWNsaWVudF9kYXRhLT5zdXNwZW5kKGNsaWVudF9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3NoaWJhX3Jlc3VtZShzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKworCXN0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSAqYnJpZGdlX2RhdGEgPQorCQljbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKwlpbnQgcmV0OworCisJY2xpZW50X2RhdGEtPnJlc3VtZShjbGllbnRfZGF0YSk7CisJcmV0ID0gYnJpZGdlX2RhdGEtPmluaXQoYnJpZGdlX2RhdGEsIGNsaWVudF9kYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfYmxhbmsoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGNvbnRhaW5lcl9vZihwYW5lbF9kYXRhLCBzdHJ1Y3QgcGFuZWxfaW5mbywKKwkJCQkJCXBhbmVsX2RhdGEpOworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGEgPSBwYW5lbC0+Y2xpZW50X2RhdGE7CisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCisJcmV0dXJuIGJyaWRnZV9kYXRhLT5ibGFuayhicmlkZ2VfZGF0YSwgY2xpZW50X2RhdGEpOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfdW5ibGFuayhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKwlzdHJ1Y3QgbXNtX21kZGlfYnJpZGdlX3BsYXRmb3JtX2RhdGEgKmJyaWRnZV9kYXRhID0KKwkJY2xpZW50X2RhdGEtPnByaXZhdGVfY2xpZW50X2RhdGE7CisKKwlyZXR1cm4gYnJpZGdlX2RhdGEtPnVuYmxhbmsoYnJpZGdlX2RhdGEsIGNsaWVudF9kYXRhKTsKK30KKworaXJxcmV0dXJuX3QgdG9zaGliYV92c3luY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBkYXRhOworCisJcGFuZWwtPnRvc2hpYmFfZ290X2ludCA9IDE7CisJaWYgKHBhbmVsLT50b3NoaWJhX2NhbGxiYWNrKSB7CisJCXBhbmVsLT50b3NoaWJhX2NhbGxiYWNrLT5mdW5jKHBhbmVsLT50b3NoaWJhX2NhbGxiYWNrKTsKKwkJcGFuZWwtPnRvc2hpYmFfY2FsbGJhY2sgPSAwOworCX0KKwl3YWtlX3VwKCZ0b3NoaWJhX3ZzeW5jX3dhaXQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzZXR1cF92c3luYyhzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwsCisJCSAgICAgICBpbnQgaW5pdCkKK3sKKwlpbnQgcmV0OworCWludCBncGlvID0gOTc7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlmICghaW5pdCkgeworCQlyZXQgPSAwOworCQlnb3RvIHVuaW5pdDsKKwl9CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJ2c3luYyIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlcXVlc3RfZ3Bpb19mYWlsZWQ7CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ncGlvX2RpcmVjdGlvbl9pbnB1dF9mYWlsZWQ7CisKKwlyZXQgPSBpcnEgPSBncGlvX3RvX2lycShncGlvKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZ2V0X2lycV9udW1fZmFpbGVkOworCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB0b3NoaWJhX3ZzeW5jX2ludGVycnVwdCwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgInZzeW5jIiwgcGFuZWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlcXVlc3RfaXJxX2ZhaWxlZDsKKwlwcmludGsoS0VSTl9JTkZPICJ2c3luYyBvbiBncGlvICVkIG5vdyAlZFxuIiwKKwkgICAgICAgZ3BpbywgZ3Bpb19nZXRfdmFsdWUoZ3BpbykpOworCXJldHVybiAwOworCit1bmluaXQ6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3BpbyksIHBhbmVsKTsKK2Vycl9yZXF1ZXN0X2lycV9mYWlsZWQ6CitlcnJfZ2V0X2lycV9udW1fZmFpbGVkOgorZXJyX2dwaW9fZGlyZWN0aW9uX2lucHV0X2ZhaWxlZDoKKwlncGlvX2ZyZWUoZ3Bpbyk7CitlcnJfcmVxdWVzdF9ncGlvX2ZhaWxlZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1kZGlfdG9zaGliYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSAqYnJpZGdlX2RhdGEgPQorCQljbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFuZWxfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghcGFuZWwpCisJCXJldHVybiAtRU5PTUVNOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBhbmVsKTsKKworCS8qIG1kZGlfcmVtb3RlX3dyaXRlKG1kZGksIDAsIFdBS0VVUCk7ICovCisJY2xpZW50X2RhdGEtPnJlbW90ZV93cml0ZShjbGllbnRfZGF0YSwgR1BJT1NFTF9WV0FLRUlOVCwgR1BJT1NFTCk7CisJY2xpZW50X2RhdGEtPnJlbW90ZV93cml0ZShjbGllbnRfZGF0YSwgSU5UTUFTS19WV0FLRU9VVCwgSU5UTUFTSyk7CisKKwlyZXQgPSBzZXR1cF92c3luYyhwYW5lbCwgMSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtZGRpX2JyaWRnZV9zZXR1cF92c3luYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBhbmVsLT5jbGllbnRfZGF0YSA9IGNsaWVudF9kYXRhOworCXBhbmVsLT5wYW5lbF9kYXRhLnN1c3BlbmQgPSB0b3NoaWJhX3N1c3BlbmQ7CisJcGFuZWwtPnBhbmVsX2RhdGEucmVzdW1lID0gdG9zaGliYV9yZXN1bWU7CisJcGFuZWwtPnBhbmVsX2RhdGEud2FpdF92c3luYyA9IHRvc2hpYmFfd2FpdF92c3luYzsKKwlwYW5lbC0+cGFuZWxfZGF0YS5yZXF1ZXN0X3ZzeW5jID0gdG9zaGliYV9yZXF1ZXN0X3ZzeW5jOworCXBhbmVsLT5wYW5lbF9kYXRhLmNsZWFyX3ZzeW5jID0gdG9zaGliYV9jbGVhcl92c3luYzsKKwlwYW5lbC0+cGFuZWxfZGF0YS5ibGFuayA9IHRvc2hpYmFfYmxhbms7CisJcGFuZWwtPnBhbmVsX2RhdGEudW5ibGFuayA9IHRvc2hpYmFfdW5ibGFuazsKKwlwYW5lbC0+cGFuZWxfZGF0YS5mYl9kYXRhID0gICZicmlkZ2VfZGF0YS0+ZmJfZGF0YTsKKwlwYW5lbC0+cGFuZWxfZGF0YS5jYXBzID0gTVNNRkJfQ0FQX1BBUlRJQUxfVVBEQVRFUzsKKworCXBhbmVsLT5wZGV2Lm5hbWUgPSAibXNtX3BhbmVsIjsKKwlwYW5lbC0+cGRldi5pZCA9IHBkZXYtPmlkOworCXBhbmVsLT5wZGV2LnJlc291cmNlID0gY2xpZW50X2RhdGEtPmZiX3Jlc291cmNlOworCXBhbmVsLT5wZGV2Lm51bV9yZXNvdXJjZXMgPSAxOworCXBhbmVsLT5wZGV2LmRldi5wbGF0Zm9ybV9kYXRhID0gJnBhbmVsLT5wYW5lbF9kYXRhOworCWJyaWRnZV9kYXRhLT5pbml0KGJyaWRnZV9kYXRhLCBjbGllbnRfZGF0YSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYW5lbC0+cGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGRpX3Rvc2hpYmFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzZXR1cF92c3luYyhwYW5lbCwgMCk7CisJa2ZyZWUocGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZGRpX2NsaWVudF9kMjYzXzAwMDAgPSB7CisJLnByb2JlID0gbWRkaV90b3NoaWJhX3Byb2JlLAorCS5yZW1vdmUgPSBtZGRpX3Rvc2hpYmFfcmVtb3ZlLAorCS5kcml2ZXIgPSB7IC5uYW1lID0gIm1kZGlfY19kMjYzXzAwMDAiIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtZGRpX2NsaWVudF90b3NoaWJhX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1kZGlfY2xpZW50X2QyNjNfMDAwMCk7CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KG1kZGlfY2xpZW50X3Rvc2hpYmFfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfaHcuaCBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNjMDFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9ody5oCkBAIC0wLDAgKzEsMzA1IEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZGRpX2h3LmgKKyAqCisgKiBNU00gTURESSBIYXJkd2FyZSBSZWdpc3RlcnMgYW5kIFN0cnVjdHVyZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTURESV9IV19IXworI2RlZmluZSBfTURESV9IV19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNRERJX0NNRCAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTURESV9WRVJTSU9OICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE1ERElfUFJJX1BUUiAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBNRERJX1NFQ19QVFIgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgTURESV9CUFMgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIE1ERElfU1BNICAgICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBNRERJX0lOVCAgICAgICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgTURESV9JTlRFTiAgICAgICAgICAgICAgMHgwMDFjCisjZGVmaW5lIE1ERElfUkVWX1BUUiAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBNRERJX1JFVl9TSVpFICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgTURESV9TVEFUICAgICAgICAgICAgICAgMHgwMDI4CisjZGVmaW5lIE1ERElfUkVWX1JBVEVfRElWICAgICAgIDB4MDAyYworI2RlZmluZSBNRERJX1JFVl9DUkNfRVJSICAgICAgICAweDAwMzAKKyNkZWZpbmUgTURESV9UQTFfTEVOICAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIE1ERElfVEEyX0xFTiAgICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBNRERJX1RFU1RfQlVTICAgICAgICAgICAweDAwM2MKKyNkZWZpbmUgTURESV9URVNUICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIE1ERElfUkVWX1BLVF9DTlQgICAgICAgIDB4MDA0NAorI2RlZmluZSBNRERJX0RSSVZFX0hJICAgICAgICAgICAweDAwNDgKKyNkZWZpbmUgTURESV9EUklWRV9MTyAgICAgICAgICAgMHgwMDRjCisjZGVmaW5lIE1ERElfRElTUF9XQUtFICAgICAgICAgIDB4MDA1MAorI2RlZmluZSBNRERJX1JFVl9FTkNBUF9TWiAgICAgICAweDAwNTQKKyNkZWZpbmUgTURESV9SVERfVkFMICAgICAgICAgICAgMHgwMDU4CisjZGVmaW5lIE1ERElfUEFEX0NUTCAgICAgICAgICAgIDB4MDA2OAorI2RlZmluZSBNRERJX0RSSVZFUl9TVEFSVF9DTlQgICAweDAwNmMKKyNkZWZpbmUgTURESV9ORVhUX1BSSV9QVFIgICAgICAgMHgwMDcwCisjZGVmaW5lIE1ERElfTkVYVF9TRUNfUFRSICAgICAgIDB4MDA3NAorI2RlZmluZSBNRERJX01JU1JfQ1RMICAgICAgICAgICAweDAwNzgKKyNkZWZpbmUgTURESV9NSVNSX0RBVEEgICAgICAgICAgMHgwMDdjCisjZGVmaW5lIE1ERElfU0ZfQ05UICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBNRERJX01GX0NOVCAgICAgICAgICAgICAweDAwODQKKyNkZWZpbmUgTURESV9DVVJSX1JFVl9QVFIgICAgICAgMHgwMDg4CisjZGVmaW5lIE1ERElfQ09SRV9WRVIgICAgICAgICAgIDB4MDA4YworCisjZGVmaW5lIE1ERElfSU5UX1BSSV9QVFJfUkVBRCAgICAgICAweDAwMDEKKyNkZWZpbmUgTURESV9JTlRfU0VDX1BUUl9SRUFEICAgICAgIDB4MDAwMgorI2RlZmluZSBNRERJX0lOVF9SRVZfREFUQV9BVkFJTCAgICAgMHgwMDA0CisjZGVmaW5lIE1ERElfSU5UX0RJU1BfUkVRICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgTURESV9JTlRfUFJJX1VOREVSRkxPVyAgICAgIDB4MDAxMAorI2RlZmluZSBNRERJX0lOVF9TRUNfVU5ERVJGTE9XICAgICAgMHgwMDIwCisjZGVmaW5lIE1ERElfSU5UX1JFVl9PVkVSRkxPVyAgICAgICAweDAwNDAKKyNkZWZpbmUgTURESV9JTlRfQ1JDX0VSUk9SICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBNRERJX0lOVF9NRERJX0lOICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIE1ERElfSU5UX1BSSV9PVkVSV1JJVEUgICAgICAweDAyMDAKKyNkZWZpbmUgTURESV9JTlRfU0VDX09WRVJXUklURSAgICAgIDB4MDQwMAorI2RlZmluZSBNRERJX0lOVF9SRVZfT1ZFUldSSVRFICAgICAgMHgwODAwCisjZGVmaW5lIE1ERElfSU5UX0RNQV9GQUlMVVJFICAgICAgICAweDEwMDAKKyNkZWZpbmUgTURESV9JTlRfTElOS19BQ1RJVkUgICAgICAgIDB4MjAwMAorI2RlZmluZSBNRERJX0lOVF9JTl9ISUJFUk5BVElPTiAgICAgMHg0MDAwCisjZGVmaW5lIE1ERElfSU5UX1BSSV9MSU5LX0xJU1RfRE9ORSAweDgwMDAKKyNkZWZpbmUgTURESV9JTlRfU0VDX0xJTktfTElTVF9ET05FIDB4MTAwMDAKKyNkZWZpbmUgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCAgIDB4MjAwMDAKKyNkZWZpbmUgTURESV9JTlRfUlREX0ZBSUxVUkUgICAgICAgIDB4NDAwMDAKKyNkZWZpbmUgTURESV9JTlRfUkVWX1BLVF9SRUNFSVZFRCAgIDB4ODAwMDAKKyNkZWZpbmUgTURESV9JTlRfUkVWX1BLVFNfQVZBSUwgICAgIDB4MTAwMDAwCisKKyNkZWZpbmUgTURESV9JTlRfTkVFRF9DTEVBUiAoIFwKKwlNRERJX0lOVF9SRVZfREFUQV9BVkFJTCB8IFwKKwlNRERJX0lOVF9QUklfVU5ERVJGTE9XIHwgXAorCU1ERElfSU5UX1NFQ19VTkRFUkZMT1cgfCBcCisJTURESV9JTlRfUkVWX09WRVJGTE9XIHwgXAorCU1ERElfSU5UX0NSQ19FUlJPUiB8IFwKKwlNRERJX0lOVF9SRVZfUEtUX1JFQ0VJVkVEKQorCisKKyNkZWZpbmUgTURESV9TVEFUX0xJTktfQUNUSVZFICAgICAgICAweDAwMDEKKyNkZWZpbmUgTURESV9TVEFUX05FV19SRVZfUFRSICAgICAgICAweDAwMDIKKyNkZWZpbmUgTURESV9TVEFUX05FV19QUklfUFRSICAgICAgICAweDAwMDQKKyNkZWZpbmUgTURESV9TVEFUX05FV19TRUNfUFRSICAgICAgICAweDAwMDgKKyNkZWZpbmUgTURESV9TVEFUX0lOX0hJQkVSTkFUSU9OICAgICAweDAwMTAKKyNkZWZpbmUgTURESV9TVEFUX1BSSV9MSU5LX0xJU1RfRE9ORSAweDAwMjAKKyNkZWZpbmUgTURESV9TVEFUX1NFQ19MSU5LX0xJU1RfRE9ORSAweDAwNDAKKyNkZWZpbmUgTURESV9TVEFUX1BFTkRJTkdfVElNSU5HX1BLVCAweDAwODAKKyNkZWZpbmUgTURESV9TVEFUX1BFTkRJTkdfUkVWX0VOQ0FQICAweDAxMDAKKyNkZWZpbmUgTURESV9TVEFUX1BFTkRJTkdfUE9XRVJET1dOICAweDAyMDAKKyNkZWZpbmUgTURESV9TVEFUX1JURF9NRUFTX0ZBSUwgICAgICAweDA4MDAKKyNkZWZpbmUgTURESV9TVEFUX0NMSUVOVF9XQUtFVVBfUkVRICAweDEwMDAKKworCisjZGVmaW5lIE1ERElfQ01EX1BPV0VSRE9XTiAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIE1ERElfQ01EX1BPV0VSVVAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIE1ERElfQ01EX0hJQkVSTkFURSAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIE1ERElfQ01EX1JFU0VUICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIE1ERElfQ01EX0RJU1BfSUdOT1JFICAgICAgICAgMHgwNTAxCisjZGVmaW5lIE1ERElfQ01EX0RJU1BfTElTVEVOICAgICAgICAgMHgwNTAwCisjZGVmaW5lIE1ERElfQ01EX1NFTkRfUkVWX0VOQ0FQICAgICAgMHgwNjAwCisjZGVmaW5lIE1ERElfQ01EX0dFVF9DTElFTlRfQ0FQICAgICAgMHgwNjAxCisjZGVmaW5lIE1ERElfQ01EX0dFVF9DTElFTlRfU1RBVFVTICAgMHgwNjAyCisjZGVmaW5lIE1ERElfQ01EX1NFTkRfUlREICAgICAgICAgICAgMHgwNzAwCisjZGVmaW5lIE1ERElfQ01EX0xJTktfQUNUSVZFICAgICAgICAgMHgwOTAwCisjZGVmaW5lIE1ERElfQ01EX1BFUklPRElDX1JFVl9FTkNBUCAgMHgwQTAwCisjZGVmaW5lIE1ERElfQ01EX0ZPUkNFX05FV19SRVZfUFRSICAgMHgwQzAwCisKKworCisjZGVmaW5lIE1ERElfVklERU9fUkVWX1BLVF9TSVpFICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIE1ERElfQ0xJRU5UX0NBUEFCSUxJVFlfUkVWX1BLVF9TSVpFICAweDYwCisjZGVmaW5lIE1ERElfTUFYX1JFVl9QS1RfU0laRSAgICAgICAgICAgICAgICAweDYwCisKKy8qICNkZWZpbmUgTURESV9SRVZfQlVGRkVSX1NJWkUgMTI4ICovCisjZGVmaW5lIE1ERElfUkVWX0JVRkZFUl9TSVpFIChNRERJX01BWF9SRVZfUEtUX1NJWkUgKiA0KQorCisvKiBNRFAgc2VuZHMgMjU2IHBpeGVsIHBhY2tldHMsIHNvIGxvd2VyIHZhbHVlIGhpYmVybmF0ZXMgbW9yZSB3aXRob3V0CisgKiBzaWduaWZpY2FudGx5IGluY3JlYXNpbmcgbGF0ZW5jeSBvZiB3YWl0aW5nIGZvciBuZXh0IHN1YmZyYW1lICovCisjZGVmaW5lIE1ERElfSE9TVF9CWVRFU19QRVJfU1VCRlJBTUUgIDB4M0MwMAorI2RlZmluZSBNRERJX0hPU1RfVEEyX0xFTiAgICAgICAweDAwMGMKKyNkZWZpbmUgTURESV9IT1NUX1JFVl9SQVRFX0RJViAgMHgwMDAyCisKKworc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1kZGlfcmV2X3BhY2tldCB7CisJdWludDE2X3QgbGVuZ3RoOworCXVpbnQxNl90IHR5cGU7CisJdWludDE2X3QgY2xpZW50X2lkOworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1kZGlfY2xpZW50X3N0YXR1cyB7CisJdWludDE2X3QgbGVuZ3RoOworCXVpbnQxNl90IHR5cGU7CisJdWludDE2X3QgY2xpZW50X2lkOworCXVpbnQxNl90IHJldmVyc2VfbGlua19yZXF1ZXN0OyAgLyogYnl0ZXMgbmVlZGVkIGluIHJldiBlbmNhcCBtZXNzYWdlICovCisJdWludDhfdCAgY3JjX2Vycm9yX2NvdW50OworCXVpbnQ4X3QgIGNhcGFiaWxpdHlfY2hhbmdlOworCXVpbnQxNl90IGdyYXBoaWNzX2J1c3lfZmxhZ3M7CisJdWludDE2X3QgY3JjMTY7Cit9OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbWRkaV9jbGllbnRfY2FwcyB7CisJdWludDE2X3QgbGVuZ3RoOyAvKiBsZW5ndGgsIGV4Y2x1c2l2ZSBvZiB0aGlzIGZpZWxkICovCisJdWludDE2X3QgdHlwZTsgLyogNjYgKi8KKwl1aW50MTZfdCBjbGllbnRfaWQ7CisKKwl1aW50MTZfdCBQcm90b2NvbF9WZXJzaW9uOworCXVpbnQxNl90IE1pbmltdW1fUHJvdG9jb2xfVmVyc2lvbjsKKwl1aW50MTZfdCBEYXRhX1JhdGVfQ2FwYWJpbGl0eTsKKwl1aW50OF90ICBJbnRlcmZhY2VfVHlwZV9DYXBhYmlsaXR5OworCXVpbnQ4X3QgIE51bWJlcl9vZl9BbHRfRGlzcGxheXM7CisJdWludDE2X3QgUG9zdENhbF9EYXRhX1JhdGU7CisJdWludDE2X3QgQml0bWFwX1dpZHRoOworCXVpbnQxNl90IEJpdG1hcF9IZWlnaHQ7CisJdWludDE2X3QgRGlzcGxheV9XaW5kb3dfV2lkdGg7CisJdWludDE2X3QgRGlzcGxheV9XaW5kb3dfSGVpZ2h0OworCXVpbnQzMl90IENvbG9yX01hcF9TaXplOworCXVpbnQxNl90IENvbG9yX01hcF9SR0JfV2lkdGg7CisJdWludDE2X3QgUkdCX0NhcGFiaWxpdHk7CisJdWludDhfdCAgTW9ub2Nocm9tZV9DYXBhYmlsaXR5OworCXVpbnQ4X3QgIFJlc2VydmVkXzE7CisJdWludDE2X3QgWV9DYl9Dcl9DYXBhYmlsaXR5OworCXVpbnQxNl90IEJheWVyX0NhcGFiaWxpdHk7CisJdWludDE2X3QgQWxwaGFfQ3Vyc29yX0ltYWdlX1BsYW5lczsKKwl1aW50MzJfdCBDbGllbnRfRmVhdHVyZV9DYXBhYmlsaXR5X0luZGljYXRvcnM7CisJdWludDhfdCAgTWF4aW11bV9WaWRlb19GcmFtZV9SYXRlX0NhcGFiaWxpdHk7CisJdWludDhfdCAgTWluaW11bV9WaWRlb19GcmFtZV9SYXRlX0NhcGFiaWxpdHk7CisJdWludDE2X3QgTWluaW11bV9TdWJfZnJhbWVfUmF0ZTsKKwl1aW50MTZfdCBBdWRpb19CdWZmZXJfRGVwdGg7CisJdWludDE2X3QgQXVkaW9fQ2hhbm5lbF9DYXBhYmlsaXR5OworCXVpbnQxNl90IEF1ZGlvX1NhbXBsZV9SYXRlX0NhcGFiaWxpdHk7CisJdWludDhfdCAgQXVkaW9fU2FtcGxlX1Jlc29sdXRpb247CisJdWludDhfdCAgTWljX0F1ZGlvX1NhbXBsZV9SZXNvbHV0aW9uOworCXVpbnQxNl90IE1pY19TYW1wbGVfUmF0ZV9DYXBhYmlsaXR5OworCXVpbnQ4X3QgIEtleWJvYXJkX0RhdGFfRm9ybWF0OworCXVpbnQ4X3QgIHBvaW50aW5nX2RldmljZV9kYXRhX2Zvcm1hdDsKKwl1aW50MTZfdCBjb250ZW50X3Byb3RlY3Rpb25fdHlwZTsKKwl1aW50MTZfdCBNZnJfTmFtZTsKKwl1aW50MTZfdCBQcm9kdWN0X0NvZGU7CisJdWludDE2X3QgUmVzZXJ2ZWRfMzsKKwl1aW50MzJfdCBTZXJpYWxfTnVtYmVyOworCXVpbnQ4X3QgIFdlZWtfb2ZfTWFudWZhY3R1cmU7CisJdWludDhfdCAgWWVhcl9vZl9NYW51ZmFjdHVyZTsKKworCXVpbnQxNl90IGNyYzE2OworfSBtZGRpX2NsaWVudF9jYXBhYmlsaXR5X3R5cGU7CisKKworc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1kZGlfdmlkZW9fc3RyZWFtIHsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDE2X3QgdHlwZTsgLyogMTYgKi8KKwl1aW50MTZfdCBjbGllbnRfaWQ7IC8qIDAgKi8KKworCXVpbnQxNl90IHZpZGVvX2RhdGFfZm9ybWF0X2Rlc2NyaXB0b3I7CisvKiBmb3JtYXQgb2YgZWFjaCBwaXhlbCBpbiB0aGUgUGl4ZWwgRGF0YSBpbiB0aGUgcHJlc2VudCBzdHJlYW0gaW4gdGhlCisgKiBwcmVzZW50IHBhY2tldC4KKyAqIElmIGJpdHMgWzE1OjEzXSA9IDAwMCBtb25vY2hyb21lCisgKiBJZiBiaXRzIFsxNToxM10gPSAwMDEgY29sb3IgcGl4ZWxzIChwYWxldHRlKS4KKyAqIElmIGJpdHMgWzE1OjEzXSA9IDAxMCBjb2xvciBwaXhlbHMgaW4gcmF3IFJHQgorICogSWYgYml0cyBbMTU6MTNdID0gMDExIGRhdGEgaW4gNDoyOjIgWSBDYiBDciBmb3JtYXQKKyAqIElmIGJpdHMgWzE1OjEzXSA9IDEwMCBCYXllciBwaXhlbHMKKyAqLworCisJdWludDE2X3QgcGl4ZWxfZGF0YV9hdHRyaWJ1dGVzOworLyogaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKKyAqIEJpdHMgWzE6MF0gPSAxMSAgcGl4ZWwgZGF0YSBpcyBkaXNwbGF5ZWQgdG8gYm90aCBleWVzCisgKiBCaXRzIFsxOjBdID0gMTAgIHBpeGVsIGRhdGEgaXMgcm91dGVkIHRvIHRoZSBsZWZ0IGV5ZSBvbmx5LgorICogQml0cyBbMTowXSA9IDAxICBwaXhlbCBkYXRhIGlzIHJvdXRlZCB0byB0aGUgcmlnaHQgZXllIG9ubHkuCisgKiBCaXRzIFsxOjBdID0gMDAgIHBpeGVsIGRhdGEgaXMgcm91dGVkIHRvIHRoZSBhbHRlcm5hdGUgZGlzcGxheS4KKyAqIEJpdCAyIGlzIDAgIFBpeGVsIERhdGEgaXMgaW4gdGhlIHN0YW5kYXJkIHByb2dyZXNzaXZlIGZvcm1hdC4KKyAqIEJpdCAyIGlzIDEgIFBpeGVsIERhdGEgaXMgaW4gaW50ZXJsYWNlIGZvcm1hdC4KKyAqIEJpdCAzIGlzIDAgIFBpeGVsIERhdGEgaXMgaW4gdGhlIHN0YW5kYXJkIHByb2dyZXNzaXZlIGZvcm1hdC4KKyAqIEJpdCAzIGlzIDEgIFBpeGVsIERhdGEgaXMgaW4gYWx0ZXJuYXRlIHBpeGVsIGZvcm1hdC4KKyAqIEJpdCA0IGlzIDAgIFBpeGVsIERhdGEgaXMgdG8gb3IgZnJvbSB0aGUgZGlzcGxheSBmcmFtZSBidWZmZXIuCisgKiBCaXQgNCBpcyAxICBQaXhlbCBEYXRhIGlzIHRvIG9yIGZyb20gdGhlIGNhbWVyYS4KKyAqIEJpdCA1IGlzIDAgIHBpeGVsIGRhdGEgY29udGFpbnMgdGhlIG5leHQgY29uc2VjdXRpdmUgcm93IG9mIHBpeGVscy4KKyAqIEJpdCA1IGlzIDEgIFggTGVmdCBFZGdlLCBZIFRvcCBFZGdlLCBYIFJpZ2h0IEVkZ2UsIFkgQm90dG9tIEVkZ2UsCisgKiAgICAgICAgICAgICBYIFN0YXJ0LCBhbmQgWSBTdGFydCBwYXJhbWV0ZXJzIGFyZSBub3QgZGVmaW5lZCBhbmQKKyAqICAgICAgICAgICAgIHNoYWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNsaWVudC4KKyAqIEJpdHMgWzc6Nl0gPSAwMSAgUGl4ZWwgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBvZmZsaW5lIGltYWdlIGJ1ZmZlci4KKyAqIEJpdHMgWzc6Nl0gPSAwMCAgUGl4ZWwgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBidWZmZXIgdG8gcmVmcmVzaCBkaXNwbGF5LgorICogQml0cyBbNzo2XSA9IDExICBQaXhlbCBkYXRhIGlzIHdyaXR0ZW4gdG8gYWxsIGltYWdlIGJ1ZmZlcnMuCisgKiBCaXRzIFs3OjZdID0gMTAgIEludmFsaWQuIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorICogQml0cyA4IHRocm91Z2ggMTEgYWx0ZXJuYXRlIGRpc3BsYXkgbnVtYmVyLgorICogQml0cyAxMiB0aHJvdWdoIDE0IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgc2hhbGwgYmUgc2V0IHRvIHplcm8uCisgKiBCaXQgMTUgaXMgMSB0aGUgcm93IG9mIHBpeGVscyBpcyB0aGUgbGFzdCByb3cgb2YgcGl4ZWxzIGluIGEgZnJhbWUuCisgKi8KKworCXVpbnQxNl90IHhfbGVmdF9lZGdlOworCXVpbnQxNl90IHlfdG9wX2VkZ2U7CisJLyogWCxZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbiB3aW5kb3cgKi8KKworCXVpbnQxNl90IHhfcmlnaHRfZWRnZTsKKwl1aW50MTZfdCB5X2JvdHRvbV9lZGdlOworCS8qIFgsWSBjb29yZGluYXRlIG9mIHRoZSBib3R0b20gcmlnaHQgZWRnZSBvZiB0aGUgd2luZG93IGJlaW5nCisJICogdXBkYXRlZC4gKi8KKworCXVpbnQxNl90IHhfc3RhcnQ7CisJdWludDE2X3QgeV9zdGFydDsKKwkvKiAoWCBTdGFydCwgWSBTdGFydCkgaXMgdGhlIGZpcnN0IHBpeGVsIGluIHRoZSBQaXhlbCBEYXRhIGZpZWxkCisJICogYmVsb3cuICovCisKKwl1aW50MTZfdCBwaXhlbF9jb3VudDsKKwkvKiBudW1iZXIgb2YgcGl4ZWxzIGluIHRoZSBQaXhlbCBEYXRhIGZpZWxkIGJlbG93LiAqLworCisJdWludDE2X3QgcGFyYW1ldGVyX0NSQzsKKwkvKiAxNi1iaXQgQ1JDIG9mIGFsbCBieXRlcyBmcm9tIHRoZSBQYWNrZXQgTGVuZ3RoIHRvIHRoZSBQaXhlbCBDb3VudC4gKi8KKworCXVpbnQxNl90IHJlc2VydmVkOworCS8qIDE2LWJpdCB2YXJpYWJsZSB0byBtYWtlIHN0cnVjdHVyZSBhbGlnbiBvbiA0IGJ5dGUgYm91bmRhcnkgKi8KK307CisKKyNkZWZpbmUgVFlQRV9WSURFT19TVFJFQU0gICAgICAxNgorI2RlZmluZSBUWVBFX0NMSUVOVF9DQVBTICAgICAgIDY2CisjZGVmaW5lIFRZUEVfUkVHSVNURVJfQUNDRVNTICAgMTQ2CisjZGVmaW5lIFRZUEVfQ0xJRU5UX1NUQVRVUyAgICAgNzAKKworc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1kZGlfcmVnaXN0ZXJfYWNjZXNzIHsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDE2X3QgdHlwZTsgLyogMTQ2ICovCisJdWludDE2X3QgY2xpZW50X2lkOworCisJdWludDE2X3QgcmVhZF93cml0ZV9pbmZvOworCS8qIEJpdHMgMTM6MCAgYSAxNC1iaXQgdW5zaWduZWQgaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mCisJICogICAgICAgICAgICAzMi1iaXQgUmVnaXN0ZXIgRGF0YSBMaXN0IGl0ZW1zIHRvIGJlIHRyYW5zZmVycmVkIGluIHRoZQorCSAqICAgICAgICAgICAgUmVnaXN0ZXIgRGF0YSBMaXN0IGZpZWxkLgorCSAqIEJpdHNbMTU6MTRdID0gMDAgIFdyaXRlIHRvIHJlZ2lzdGVyKHMpOworCSAqIEJpdHNbMTU6MTRdID0gMTAgIFJlYWQgZnJvbSByZWdpc3RlcihzKTsKKwkgKiBCaXRzWzE1OjE0XSA9IDExICBSZXNwb25zZSB0byBhIFJlYWQuCisJICogQml0c1sxNToxNF0gPSAwMSAgdGhpcyB2YWx1ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gKi8KKyNkZWZpbmUgTURESV9XUklURSAgICAgKDAgPDwgMTQpCisjZGVmaW5lIE1ERElfUkVBRCAgICAgICgyIDw8IDE0KQorI2RlZmluZSBNRERJX1JFQURfUkVTUCAoMyA8PCAxNCkKKworCXVpbnQzMl90IHJlZ2lzdGVyX2FkZHJlc3M7CisJLyogdGhlIHJlZ2lzdGVyIGFkZHJlc3MgdGhhdCBpcyB0byBiZSB3cml0dGVuIHRvIG9yIHJlYWQgZnJvbS4gKi8KKworCXVpbnQxNl90IGNyYzE2OworCisJdWludDMyX3QgcmVnaXN0ZXJfZGF0YV9saXN0OworCS8qIGxpc3Qgb2YgNC1ieXRlIHJlZ2lzdGVyIGRhdGEgdmFsdWVzIGZvci9mcm9tIGNsaWVudCByZWdpc3RlcnMgKi8KK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtZGRpX2xsZW50cnkgeworCXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IGhlYWRlcl9jb3VudDsKKwl1aW50MTZfdCBkYXRhX2NvdW50OworCWRtYV9hZGRyX3QgZGF0YTsgLyogMzIgYml0ICovCisJc3RydWN0IG1kZGlfbGxlbnRyeSAqbmV4dDsKKwl1aW50MTZfdCByZXNlcnZlZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBtZGRpX3ZpZGVvX3N0cmVhbSB2OworCQlzdHJ1Y3QgbWRkaV9yZWdpc3Rlcl9hY2Nlc3MgcjsKKwkJdWludDMyX3QgX1sxMl07CisJfSB1OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NjM2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwpAQCAtMCwwICsxLDUzOCBAQAorLyogZHJpdmVycy92aWRlby9tc21fZmIvbWRwLmMKKyAqCisgKiBNU00gTURQIEludGVyZmFjZSAodXNlZCBieSBmcmFtZWJ1ZmZlciBjb3JlKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9tc21fbWRwLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCisjaW5jbHVkZSA8bGludXgvYW5kcm9pZF9wbWVtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorCisjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibWRwX2h3LmgiCisKK3N0cnVjdCBjbGFzcyAqbWRwX2NsYXNzOworCisjZGVmaW5lIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKDB4MTAwMDApCisKK3N0YXRpYyB1aW50MTZfdCBtZHBfZGVmYXVsdF9jY3NbXSA9IHsKKwkweDI1NCwgMHgwMDAsIDB4MzMxLCAweDI1NCwgMHhGMzgsIDB4RTYxLCAweDI1NCwgMHg0MDksIDB4MDAwLAorCTB4MDEwLCAweDA4MCwgMHgwODAKK307CisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZHBfZG1hMl93YWl0cXVldWUpOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1kcF9wcHBfd2FpdHF1ZXVlKTsKK3N0YXRpYyBzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgKmRtYV9jYWxsYmFjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGs7CitzdGF0aWMgdW5zaWduZWQgaW50IG1kcF9pcnFfbWFzazsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWRwX2xvY2spOworREVGSU5FX01VVEVYKG1kcF9tdXRleCk7CisKK3N0YXRpYyBpbnQgZW5hYmxlX21kcF9pcnEoc3RydWN0IG1kcF9pbmZvICptZHAsIHVpbnQzMl90IG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlCVUdfT04oIW1hc2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCS8qIGlmIHRoZSBtYXNrIGJpdHMgYXJlIGFscmVhZHkgc2V0IHJldHVybiBhbiBlcnJvciwgdGhpcyBpbnRlcnJ1cHQKKwkgKiBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlpZiAobWRwX2lycV9tYXNrICYgbWFzaykgeworCQlwcmludGsoS0VSTl9FUlIgIm1kcCBpcnEgYWxyZWFkeSBvbiBhbHJlYWR5IG9uICV4ICV4XG4iLAorCQkgICAgICAgbWRwX2lycV9tYXNrLCBtYXNrKTsKKwkJcmV0ID0gLTE7CisJfQorCS8qIGlmIHRoZSBtZHAgaXJxIGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQgZW5hYmxlIGl0ICovCisJaWYgKCFtZHBfaXJxX21hc2spIHsKKwkJaWYgKGNsaykKKwkJCWNsa19lbmFibGUoY2xrKTsKKwkJZW5hYmxlX2lycShtZHAtPmlycSk7CisJfQorCisJLyogdXBkYXRlIHRoZSBpcnEgbWFzayB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlIGludGVycnVwdCBpcworCSAqIGVuYWJsZWQgKi8KKwltZHBfaXJxX21hc2sgfD0gbWFzazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHBfbG9jaywgaXJxX2ZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxvY2tlZF9kaXNhYmxlX21kcF9pcnEoc3RydWN0IG1kcF9pbmZvICptZHAsIHVpbnQzMl90IG1hc2spCit7CisJLyogdGhpcyBpbnRlcnJ1cHQgaXMgYWxyZWFkeSBkaXNhYmxlZCEgKi8KKwlpZiAoIShtZHBfaXJxX21hc2sgJiBtYXNrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1kcCBpcnEgYWxyZWFkeSBvZmYgJXggJXhcbiIsCisJCSAgICAgICBtZHBfaXJxX21hc2ssIG1hc2spOworCQlyZXR1cm4gLTE7CisJfQorCS8qIHVwZGF0ZSB0aGUgaXJxIG1hc2sgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZSBpbnRlcnJ1cHQgaXMKKwkgKiBkaXNhYmxlZCAqLworCW1kcF9pcnFfbWFzayAmPSB+KG1hc2spOworCS8qIGlmIG5vIG9uZSBpcyB3YWl0aW5nIG9uIHRoZSBpbnRlcnJ1cHQsIGRpc2FibGUgaXQgKi8KKwlpZiAoIW1kcF9pcnFfbWFzaykgeworCQlkaXNhYmxlX2lycShtZHAtPmlycSk7CisJCWlmIChjbGspCisJCQljbGtfZGlzYWJsZShjbGspOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhYmxlX21kcF9pcnEoc3RydWN0IG1kcF9pbmZvICptZHAsIHVpbnQzMl90IG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZHBfbG9jaywgaXJxX2ZsYWdzKTsKKwlyZXQgPSBsb2NrZWRfZGlzYWJsZV9tZHBfaXJxKG1kcCwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRwX2xvY2ssIGlycV9mbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1kcF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwl1aW50MzJfdCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3RydWN0IG1kcF9pbmZvICptZHAgPSBkYXRhOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCisJc3RhdHVzID0gbWRwX3JlYWRsKG1kcCwgTURQX0lOVFJfU1RBVFVTKTsKKwltZHBfd3JpdGVsKG1kcCwgc3RhdHVzLCBNRFBfSU5UUl9DTEVBUik7CisKKwlzdGF0dXMgJj0gbWRwX2lycV9tYXNrOworCWlmIChzdGF0dXMgJiBETDBfRE1BMl9URVJNX0RPTkUpIHsKKwkJaWYgKGRtYV9jYWxsYmFjaykgeworCQkJZG1hX2NhbGxiYWNrLT5mdW5jKGRtYV9jYWxsYmFjayk7CisJCQlkbWFfY2FsbGJhY2sgPSBOVUxMOworCQl9CisJCXdha2VfdXAoJm1kcF9kbWEyX3dhaXRxdWV1ZSk7CisJfQorCisJaWYgKHN0YXR1cyAmIERMMF9ST0lfRE9ORSkKKwkJd2FrZV91cCgmbWRwX3BwcF93YWl0cXVldWUpOworCisJaWYgKHN0YXR1cykKKwkJbG9ja2VkX2Rpc2FibGVfbWRwX2lycShtZHAsIHN0YXR1cyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHBfbG9jaywgaXJxX2ZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBtZHBfY2hlY2tfbWFzayh1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IHJldDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZHBfbG9jaywgaXJxX2ZsYWdzKTsKKwlyZXQgPSBtZHBfaXJxX21hc2sgJiBtYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWRwX3dhaXQoc3RydWN0IG1kcF9pbmZvICptZHAsIHVpbnQzMl90IG1hc2ssIHdhaXRfcXVldWVfaGVhZF90ICp3cSkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCXdhaXRfZXZlbnRfdGltZW91dCgqd3EsICFtZHBfY2hlY2tfbWFzayhtYXNrKSwgSFopOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCWlmIChtZHBfaXJxX21hc2sgJiBtYXNrKSB7CisJCWxvY2tlZF9kaXNhYmxlX21kcF9pcnEobWRwLCBtYXNrKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidGltZW91dCB3YWl0aW5nIGZvciBtZHAgdG8gY29tcGxldGUgJXhcbiIsCisJCSAgICAgICBtYXNrKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRwX2xvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG1kcF9kbWFfd2FpdChzdHJ1Y3QgbWRwX2RldmljZSAqbWRwX2RldikKK3sKKyNkZWZpbmUgTURQX01BWF9USU1FT1VUUyAyMAorCXN0YXRpYyBpbnQgdGltZW91dF9jb3VudDsKKwlzdHJ1Y3QgbWRwX2luZm8gKm1kcCA9IGNvbnRhaW5lcl9vZihtZHBfZGV2LCBzdHJ1Y3QgbWRwX2luZm8sIG1kcF9kZXYpOworCisJaWYgKG1kcF93YWl0KG1kcCwgREwwX0RNQTJfVEVSTV9ET05FLCAmbWRwX2RtYTJfd2FpdHF1ZXVlKSA9PSAtRVRJTUVET1VUKQorCQl0aW1lb3V0X2NvdW50Kys7CisJZWxzZQorCQl0aW1lb3V0X2NvdW50ID0gMDsKKworCWlmICh0aW1lb3V0X2NvdW50ID4gTURQX01BWF9USU1FT1VUUykgeworCQlwcmludGsoS0VSTl9FUlIgIm1kcDogZG1hIGZhaWxlZCAlZCB0aW1lcywgc29tZXRoaW5ncyB3cm9uZyFcbiIsCisJCSAgICAgICBNRFBfTUFYX1RJTUVPVVRTKTsKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW50IG1kcF9wcHBfd2FpdChzdHJ1Y3QgbWRwX2luZm8gKm1kcCkKK3sKKwlyZXR1cm4gbWRwX3dhaXQobWRwLCBETDBfUk9JX0RPTkUsICZtZHBfcHBwX3dhaXRxdWV1ZSk7Cit9CisKK3ZvaWQgbWRwX2RtYV90b19tZGRpKHN0cnVjdCBtZHBfaW5mbyAqbWRwLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBzdHJpZGUsCisJCSAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgeCwgdWludDMyX3QgeSwKKwkJICAgICBzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgKmNhbGxiYWNrKQoreworCXVpbnQzMl90IGRtYTJfY2ZnOworCXVpbnQxNl90IGxkX3BhcmFtID0gMDsgLyogMD1QUklNLCAxPVNFQ0QsIDI9RVhUICovCisKKwlpZiAoZW5hYmxlX21kcF9pcnEobWRwLCBETDBfRE1BMl9URVJNX0RPTkUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRwX2RtYV90b19tZGRpOiBidXN5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRtYV9jYWxsYmFjayA9IGNhbGxiYWNrOworCisJZG1hMl9jZmcgPSBETUFfUEFDS19USUdIVCB8CisJCURNQV9QQUNLX0FMSUdOX0xTQiB8CisJCURNQV9QQUNLX1BBVFRFUk5fUkdCIHwKKwkJRE1BX09VVF9TRUxfQUhCIHwKKwkJRE1BX0lCVUZfTk9OQ09OVElHVU9VUzsKKworCWRtYTJfY2ZnIHw9IERNQV9JQlVGX0ZPUk1BVF9SR0I1NjU7CisKKwlkbWEyX2NmZyB8PSBETUFfT1VUX1NFTF9NRERJOworCisJZG1hMl9jZmcgfD0gRE1BX01ERElfRE1BT1VUX0xDRF9TRUxfUFJJTUFSWTsKKworCWRtYTJfY2ZnIHw9IERNQV9ESVRIRVJfRU47CisKKwkvKiBzZXR1cCBzaXplLCBhZGRyZXNzLCBhbmQgc3RyaWRlICovCisJbWRwX3dyaXRlbChtZHAsIChoZWlnaHQgPDwgMTYpIHwgKHdpZHRoKSwKKwkJICAgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE4NCk7CisJbWRwX3dyaXRlbChtZHAsIGFkZHIsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxODgpOworCW1kcF93cml0ZWwobWRwLCBzdHJpZGUsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxOEMpOworCisJLyogNjY2IDE4QlBQICovCisJZG1hMl9jZmcgfD0gRE1BX0RTVEMwR182QklUUyB8IERNQV9EU1RDMUJfNkJJVFMgfCBETUFfRFNUQzJSXzZCSVRTOworCisJLyogc2V0IHkgJiB4IG9mZnNldCBhbmQgTURESSB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzICovCisJbWRwX3dyaXRlbChtZHAsICh5IDw8IDE2KSB8ICh4KSwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE5NCk7CisJbWRwX3dyaXRlbChtZHAsIGxkX3BhcmFtLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMWEwKTsKKwltZHBfd3JpdGVsKG1kcCwgKE1ERElfVkRPX1BBQ0tFVF9ERVNDIDw8IDE2KSB8IE1ERElfVkRPX1BBQ0tFVF9QUklNLAorCQkgICBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMWE0KTsKKworCW1kcF93cml0ZWwobWRwLCBkbWEyX2NmZywgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE4MCk7CisKKwkvKiBzdGFydCBETUEyICovCisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAwNDQpOworfQorCit2b2lkIG1kcF9kbWEoc3RydWN0IG1kcF9kZXZpY2UgKm1kcF9kZXYsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHN0cmlkZSwKKwkgICAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHgsIHVpbnQzMl90IHksCisJICAgICBzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgKmNhbGxiYWNrLCBpbnQgaW50ZXJmYWNlKQoreworCXN0cnVjdCBtZHBfaW5mbyAqbWRwID0gY29udGFpbmVyX29mKG1kcF9kZXYsIHN0cnVjdCBtZHBfaW5mbywgbWRwX2Rldik7CisKKwlpZiAoaW50ZXJmYWNlID09IE1TTV9NRERJX1BNREhfSU5URVJGQUNFKSB7CisJCW1kcF9kbWFfdG9fbWRkaShtZHAsIGFkZHIsIHN0cmlkZSwgd2lkdGgsIGhlaWdodCwgeCwgeSwKKwkJCQljYWxsYmFjayk7CisJfQorfQorCitpbnQgZ2V0X2ltZyhzdHJ1Y3QgbWRwX2ltZyAqaW1nLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmxlbiwKKwkgICAgc3RydWN0IGZpbGUgKipmaWxlcCkKK3sKKwlpbnQgcHV0X25lZWRlZCwgcmV0ID0gMDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwl1bnNpZ25lZCBsb25nIHZzdGFydDsKKworI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KKwlpZiAoIWdldF9wbWVtX2ZpbGUoaW1nLT5tZW1vcnlfaWQsIHN0YXJ0LCAmdnN0YXJ0LCBsZW4sIGZpbGVwKSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCWZpbGUgPSBmZ2V0X2xpZ2h0KGltZy0+bWVtb3J5X2lkLCAmcHV0X25lZWRlZCk7CisJaWYgKGZpbGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKE1BSk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpID09IEZCX01BSk9SKSB7CisJCSpzdGFydCA9IGluZm8tPmZpeC5zbWVtX3N0YXJ0OworCQkqbGVuID0gaW5mby0+Zml4LnNtZW1fbGVuOworCX0gZWxzZQorCQlyZXQgPSAtMTsKKwlmcHV0X2xpZ2h0KGZpbGUsIHB1dF9uZWVkZWQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBwdXRfaW1nKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgc3RydWN0IGZpbGUgKmRzdF9maWxlKQoreworI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KKwlpZiAoc3JjX2ZpbGUpCisJCXB1dF9wbWVtX2ZpbGUoc3JjX2ZpbGUpOworCWlmIChkc3RfZmlsZSkKKwkJcHV0X3BtZW1fZmlsZShkc3RfZmlsZSk7CisjZW5kaWYKK30KKworaW50IG1kcF9ibGl0KHN0cnVjdCBtZHBfZGV2aWNlICptZHBfZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqZmIsCisJICAgICBzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHNyY19zdGFydCA9IDAsIHNyY19sZW4gPSAwLCBkc3Rfc3RhcnQgPSAwLCBkc3RfbGVuID0gMDsKKwlzdHJ1Y3QgbWRwX2luZm8gKm1kcCA9IGNvbnRhaW5lcl9vZihtZHBfZGV2LCBzdHJ1Y3QgbWRwX2luZm8sIG1kcF9kZXYpOworCXN0cnVjdCBmaWxlICpzcmNfZmlsZSA9IDAsICpkc3RfZmlsZSA9IDA7CisKKwkvKiBXT1JLQVJPVU5EIEZPUiBIQVJEV0FSRSBCVUcgSU4gQkcgVElMRSBGRVRDSCAqLworCWlmICh1bmxpa2VseShyZXEtPnNyY19yZWN0LmggPT0gMCB8fAorCQkgICAgIHJlcS0+c3JjX3JlY3QudyA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IHNyYyBpbWcgb2YgemVybyBzaXplIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodW5saWtlbHkocmVxLT5kc3RfcmVjdC5oID09IDAgfHwKKwkJICAgICByZXEtPmRzdF9yZWN0LncgPT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZG8gdGhpcyBmaXJzdCBzbyB0aGF0IGlmIHRoaXMgZmFpbHMsIHRoZSBjYWxsZXIgY2FuIGFsd2F5cworCSAqIHNhZmVseSBjYWxsIHB1dF9pbWcgKi8KKwlpZiAodW5saWtlbHkoZ2V0X2ltZygmcmVxLT5zcmMsIGZiLCAmc3JjX3N0YXJ0LCAmc3JjX2xlbiwgJnNyY19maWxlKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBjb3VsZCBub3QgcmV0cmlldmUgc3JjIGltYWdlIGZyb20gIgorCQkJCSJtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoZ2V0X2ltZygmcmVxLT5kc3QsIGZiLCAmZHN0X3N0YXJ0LCAmZHN0X2xlbiwgJmRzdF9maWxlKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBjb3VsZCBub3QgcmV0cmlldmUgZHN0IGltYWdlIGZyb20gIgorCQkJCSJtZW1vcnlcbiIpOworI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KKwkJcHV0X3BtZW1fZmlsZShzcmNfZmlsZSk7CisjZW5kaWYKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW11dGV4X2xvY2soJm1kcF9tdXRleCk7CisKKwkvKiB0cmFuc3BfbWFza2luZyB1bmltcGxlbWVudGVkICovCisJcmVxLT50cmFuc3BfbWFzayA9IE1EUF9UUkFOU1BfTk9QOworCWlmICh1bmxpa2VseSgocmVxLT50cmFuc3BfbWFzayAhPSBNRFBfVFJBTlNQX05PUCB8fAorCQkgICAgICByZXEtPmFscGhhICE9IE1EUF9BTFBIQV9OT1AgfHwKKwkJICAgICAgSEFTX0FMUEhBKHJlcS0+c3JjLmZvcm1hdCkpICYmCisJCSAgICAgKHJlcS0+ZmxhZ3MgJiBNRFBfUk9UXzkwICYmCisJCSAgICAgIHJlcS0+ZHN0X3JlY3QudyA8PSAxNiAmJiByZXEtPmRzdF9yZWN0LmggPj0gMTYpKSkgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgaW50IHRpbGVzID0gcmVxLT5kc3RfcmVjdC5oIC8gMTY7CisJCXVuc2lnbmVkIGludCByZW1haW5kZXIgPSByZXEtPmRzdF9yZWN0LmggJSAxNjsKKwkJcmVxLT5zcmNfcmVjdC53ID0gMTYqcmVxLT5zcmNfcmVjdC53IC8gcmVxLT5kc3RfcmVjdC5oOworCQlyZXEtPmRzdF9yZWN0LmggPSAxNjsKKwkJZm9yIChpID0gMDsgaSA8IHRpbGVzOyBpKyspIHsKKwkJCWVuYWJsZV9tZHBfaXJxKG1kcCwgREwwX1JPSV9ET05FKTsKKwkJCXJldCA9IG1kcF9wcHBfYmxpdChtZHAsIHJlcSwgc3JjX2ZpbGUsIHNyY19zdGFydCwKKwkJCQkJICAgc3JjX2xlbiwgZHN0X2ZpbGUsIGRzdF9zdGFydCwKKwkJCQkJICAgZHN0X2xlbik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX2JhZF9ibGl0OworCQkJcmV0ID0gbWRwX3BwcF93YWl0KG1kcCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX3dhaXRfZmFpbGVkOworCQkJcmVxLT5kc3RfcmVjdC55ICs9IDE2OworCQkJcmVxLT5zcmNfcmVjdC54ICs9IHJlcS0+c3JjX3JlY3QudzsKKwkJfQorCQlpZiAoIXJlbWFpbmRlcikKKwkJCWdvdG8gZW5kOworCQlyZXEtPnNyY19yZWN0LncgPSByZW1haW5kZXIqcmVxLT5zcmNfcmVjdC53IC8gcmVxLT5kc3RfcmVjdC5oOworCQlyZXEtPmRzdF9yZWN0LmggPSByZW1haW5kZXI7CisJfQorCWVuYWJsZV9tZHBfaXJxKG1kcCwgREwwX1JPSV9ET05FKTsKKwlyZXQgPSBtZHBfcHBwX2JsaXQobWRwLCByZXEsIHNyY19maWxlLCBzcmNfc3RhcnQsIHNyY19sZW4sIGRzdF9maWxlLAorCQkJICAgZHN0X3N0YXJ0LAorCQkJICAgZHN0X2xlbik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYmFkX2JsaXQ7CisJcmV0ID0gbWRwX3BwcF93YWl0KG1kcCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfd2FpdF9mYWlsZWQ7CitlbmQ6CisJcHV0X2ltZyhzcmNfZmlsZSwgZHN0X2ZpbGUpOworCW11dGV4X3VubG9jaygmbWRwX211dGV4KTsKKwlyZXR1cm4gMDsKK2Vycl9iYWRfYmxpdDoKKwlkaXNhYmxlX21kcF9pcnEobWRwLCBETDBfUk9JX0RPTkUpOworZXJyX3dhaXRfZmFpbGVkOgorCXB1dF9pbWcoc3JjX2ZpbGUsIGRzdF9maWxlKTsKKwltdXRleF91bmxvY2soJm1kcF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtZHBfc2V0X2dycF9kaXNwKHN0cnVjdCBtZHBfZGV2aWNlICptZHBfZGV2LCB1bnNpZ25lZCBkaXNwX2lkKQoreworCXN0cnVjdCBtZHBfaW5mbyAqbWRwID0gY29udGFpbmVyX29mKG1kcF9kZXYsIHN0cnVjdCBtZHBfaW5mbywgbWRwX2Rldik7CisKKwlkaXNwX2lkICY9IDB4ZjsKKwltZHBfd3JpdGVsKG1kcCwgZGlzcF9pZCwgTURQX0ZVTExfQllQQVNTX1dPUkQ0Myk7Cit9CisKK2ludCByZWdpc3Rlcl9tZHBfY2xpZW50KHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmNpbnQpCit7CisJaWYgKCFtZHBfY2xhc3MpIHsKKwkJcHJfZXJyKCJtZHA6IG5vIG1kcF9jbGFzcyB3aGVuIHJlZ2lzdGVyaW5nIG1kcCBjbGllbnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY2ludC0+Y2xhc3MgPSBtZHBfY2xhc3M7CisJcmV0dXJuIGNsYXNzX2ludGVyZmFjZV9yZWdpc3RlcihjaW50KTsKK30KKworI2luY2x1ZGUgIm1kcF9jc2NfdGFibGUuaCIKKyNpbmNsdWRlICJtZHBfc2NhbGVfdGFibGVzLmgiCisKK2ludCBtZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlOworCWludCByZXQ7CisJaW50IG47CisJc3RydWN0IG1kcF9pbmZvICptZHA7CisKKwlyZXNvdXJjZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXNvdXJjZSkgeworCQlwcl9lcnIoIm1kcDogY2FuIG5vdCBnZXQgbWRwIG1lbSByZXNvdXJjZSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWRwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1kcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZHAtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKG1kcC0+aXJxIDwgMCkgeworCQlwcl9lcnIoIm1kcDogY2FuIG5vdCBnZXQgbWRwIGlycVxuIik7CisJCXJldCA9IG1kcC0+aXJxOworCQlnb3RvIGVycm9yX2dldF9pcnE7CisJfQorCisJbWRwLT5iYXNlID0gaW9yZW1hcChyZXNvdXJjZS0+c3RhcnQsCisJCQkgICAgcmVzb3VyY2UtPmVuZCAtIHJlc291cmNlLT5zdGFydCk7CisJaWYgKG1kcC0+YmFzZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXNtZmI6IGNhbm5vdCBhbGxvY2F0ZSBtZHAgcmVncyFcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2lvcmVtYXA7CisJfQorCisJbWRwLT5tZHBfZGV2LmRtYSA9IG1kcF9kbWE7CisJbWRwLT5tZHBfZGV2LmRtYV93YWl0ID0gbWRwX2RtYV93YWl0OworCW1kcC0+bWRwX2Rldi5ibGl0ID0gbWRwX2JsaXQ7CisJbWRwLT5tZHBfZGV2LnNldF9ncnBfZGlzcCA9IG1kcF9zZXRfZ3JwX2Rpc3A7CisKKwljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtZHBfY2xrIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1kcDogZmFpbGVkIHRvIGdldCBtZHAgY2xrIik7CisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEobWRwLT5pcnEsIG1kcF9pc3IsIElSUUZfRElTQUJMRUQsICJtc21fbWRwIiwgbWRwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JlcXVlc3RfaXJxOworCWRpc2FibGVfaXJxKG1kcC0+aXJxKTsKKwltZHBfaXJxX21hc2sgPSAwOworCisJLyogZGVidWcgaW50ZXJmYWNlIHdyaXRlIGFjY2VzcyAqLworCW1kcF93cml0ZWwobWRwLCAxLCAweDYwKTsKKworCW1kcF93cml0ZWwobWRwLCBNRFBfQU5ZX0lOVFJfTUFTSywgTURQX0lOVFJfRU5BQkxFKTsKKwltZHBfd3JpdGVsKG1kcCwgMSwgTURQX0VCSTJfUE9SVE1BUF9NT0RFKTsKKworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMWY4KTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDFmYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShjc2NfdGFibGUpOyBuKyspCisJCW1kcF93cml0ZWwobWRwLCBjc2NfdGFibGVbbl0udmFsLCBjc2NfdGFibGVbbl0ucmVnKTsKKworCS8qIGNsZWFyIHVwIHVudXNlZCBmZy9tYWluIHJlZ2lzdGVycyAqLworCS8qIGNvbXAucGxhbmUgMiYzIHlzdHJpZGUgKi8KKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDEyMCk7CisKKwkvKiB1bnBhY2tlZCBwYXR0ZXJuICovCisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxMmMpOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTMwKTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDEzNCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxNTgpOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTVjKTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE2MCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxNzApOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTc0KTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE3Yyk7CisKKwkvKiBjb21wLnBsYW5lIDIgJiAzICovCisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxMTQpOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTE4KTsKKworCS8qIGNsZWFyIHVudXNlZCBiZyByZWdpc3RlcnMgKi8KKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDFjOCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxZDApOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMWRjKTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDFlMCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxZTQpOworCisJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUobWRwX3Vwc2NhbGVfdGFibGUpOyBuKyspCisJCW1kcF93cml0ZWwobWRwLCBtZHBfdXBzY2FsZV90YWJsZVtuXS52YWwsCisJCSAgICAgICBtZHBfdXBzY2FsZV90YWJsZVtuXS5yZWcpOworCisJZm9yIChuID0gMDsgbiA8IDk7IG4rKykKKwkJbWRwX3dyaXRlbChtZHAsIG1kcF9kZWZhdWx0X2Njc1tuXSwgMHg0MDQ0MCArIDQgKiBuKTsKKwltZHBfd3JpdGVsKG1kcCwgbWRwX2RlZmF1bHRfY2NzWzldLCAweDQwNTAwICsgNCAqIDApOworCW1kcF93cml0ZWwobWRwLCBtZHBfZGVmYXVsdF9jY3NbMTBdLCAweDQwNTAwICsgNCAqIDApOworCW1kcF93cml0ZWwobWRwLCBtZHBfZGVmYXVsdF9jY3NbMTFdLCAweDQwNTAwICsgNCAqIDApOworCisJLyogcmVnaXN0ZXIgbWRwIGRldmljZSAqLworCW1kcC0+bWRwX2Rldi5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwltZHAtPm1kcF9kZXYuZGV2LmNsYXNzID0gbWRwX2NsYXNzOworCXNucHJpbnRmKG1kcC0+bWRwX2Rldi5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIm1kcCVkIiwgcGRldi0+aWQpOworCisJLyogaWYgeW91IGNhbiByZW1vdmUgdGhlIHBsYXRmb3JtIGRldmljZSB5b3UnZCBoYXZlIHRvIGltcGxlbWVudAorCSAqIHRoaXM6CisJbWRwX2Rldi5yZWxlYXNlID0gbWRwX2NsYXNzOyAqLworCisJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZtZHAtPm1kcF9kZXYuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2RldmljZV9yZWdpc3RlcjsKKwlyZXR1cm4gMDsKKworZXJyb3JfZGV2aWNlX3JlZ2lzdGVyOgorCWZyZWVfaXJxKG1kcC0+aXJxLCBtZHApOworZXJyb3JfcmVxdWVzdF9pcnE6CisJaW91bm1hcChtZHAtPmJhc2UpOworZXJyb3JfZ2V0X2lycToKK2Vycm9yX2lvcmVtYXA6CisJa2ZyZWUobWRwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtc21fbWRwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtZHBfcHJvYmUsCisJLmRyaXZlciA9IHsubmFtZSA9ICJtc21fbWRwIn0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtZHBfaW5pdCh2b2lkKQoreworCW1kcF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgIm1zbV9tZHAiKTsKKwlpZiAoSVNfRVJSKG1kcF9jbGFzcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjcmVhdGluZyBtZHAgY2xhc3NcbiIpOworCQlyZXR1cm4gUFRSX0VSUihtZHBfY2xhc3MpOworCX0KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtc21fbWRwX2RyaXZlcik7Cit9CisKK3N1YnN5c19pbml0Y2FsbChtZHBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfY3NjX3RhYmxlLmggYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfY3NjX3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjZGUzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9jc2NfdGFibGUuaApAQCAtMCwwICsxLDU4MiBAQAorLyogZHJpdmVycy92aWRlby9tc21fZmIvbWRwX2NzY190YWJsZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFFVQUxDT01NIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgeworCXVpbnQzMl90IHJlZzsKKwl1aW50MzJfdCB2YWw7Cit9IGNzY190YWJsZVtdID0geworCXsgMHg0MDQwMCwgMHg4MyB9LAorCXsgMHg0MDQwNCwgMHgxMDIgfSwKKwl7IDB4NDA0MDgsIDB4MzIgfSwKKwl7IDB4NDA0MGMsIDB4ZmZmZmZmYjUgfSwKKwl7IDB4NDA0MTAsIDB4ZmZmZmZmNmMgfSwKKwl7IDB4NDA0MTQsIDB4ZTEgfSwKKwl7IDB4NDA0MTgsIDB4ZTEgfSwKKwl7IDB4NDA0MWMsIDB4ZmZmZmZmNDUgfSwKKwl7IDB4NDA0MjAsIDB4ZmZmZmZmZGMgfSwKKwl7IDB4NDA0NDAsIDB4MjU0IH0sCisJeyAweDQwNDQ0LCAweDAgfSwKKwl7IDB4NDA0NDgsIDB4MzMxIH0sCisJeyAweDQwNDRjLCAweDI1NCB9LAorCXsgMHg0MDQ1MCwgMHhmZmZmZmYzOCB9LAorCXsgMHg0MDQ1NCwgMHhmZmZmZmU2MSB9LAorCXsgMHg0MDQ1OCwgMHgyNTQgfSwKKwl7IDB4NDA0NWMsIDB4NDA5IH0sCisJeyAweDQwNDYwLCAweDAgfSwKKwl7IDB4NDA0ODAsIDB4NWQgfSwKKwl7IDB4NDA0ODQsIDB4MTNhIH0sCisJeyAweDQwNDg4LCAweDIwIH0sCisJeyAweDQwNDhjLCAweGZmZmZmZmNkIH0sCisJeyAweDQwNDkwLCAweGZmZmZmZjU0IH0sCisJeyAweDQwNDk0LCAweGUxIH0sCisJeyAweDQwNDk4LCAweGUxIH0sCisJeyAweDQwNDljLCAweGZmZmZmZjM1IH0sCisJeyAweDQwNGEwLCAweGZmZmZmZmVjIH0sCisJeyAweDQwNGMwLCAweDI1NCB9LAorCXsgMHg0MDRjNCwgMHgwIH0sCisJeyAweDQwNGM4LCAweDM5NiB9LAorCXsgMHg0MDRjYywgMHgyNTQgfSwKKwl7IDB4NDA0ZDAsIDB4ZmZmZmZmOTQgfSwKKwl7IDB4NDA0ZDQsIDB4ZmZmZmZlZjAgfSwKKwl7IDB4NDA0ZDgsIDB4MjU0IH0sCisJeyAweDQwNGRjLCAweDQzYSB9LAorCXsgMHg0MDRlMCwgMHgwIH0sCisJeyAweDQwNTAwLCAweDEwIH0sCisJeyAweDQwNTA0LCAweDgwIH0sCisJeyAweDQwNTA4LCAweDgwIH0sCisJeyAweDQwNTQwLCAweDEwIH0sCisJeyAweDQwNTQ0LCAweDgwIH0sCisJeyAweDQwNTQ4LCAweDgwIH0sCisJeyAweDQwNTgwLCAweDEwIH0sCisJeyAweDQwNTg0LCAweGViIH0sCisJeyAweDQwNTg4LCAweDEwIH0sCisJeyAweDQwNThjLCAweGYwIH0sCisJeyAweDQwNWMwLCAweDEwIH0sCisJeyAweDQwNWM0LCAweGViIH0sCisJeyAweDQwNWM4LCAweDEwIH0sCisJeyAweDQwNWNjLCAweGYwIH0sCisJeyAweDQwODAwLCAweDAgfSwKKwl7IDB4NDA4MDQsIDB4MTUxNTE1IH0sCisJeyAweDQwODA4LCAweDFkMWQxZCB9LAorCXsgMHg0MDgwYywgMHgyMzIzMjMgfSwKKwl7IDB4NDA4MTAsIDB4MjcyNzI3IH0sCisJeyAweDQwODE0LCAweDJiMmIyYiB9LAorCXsgMHg0MDgxOCwgMHgyZjJmMmYgfSwKKwl7IDB4NDA4MWMsIDB4MzMzMzMzIH0sCisJeyAweDQwODIwLCAweDM2MzYzNiB9LAorCXsgMHg0MDgyNCwgMHgzOTM5MzkgfSwKKwl7IDB4NDA4MjgsIDB4M2IzYjNiIH0sCisJeyAweDQwODJjLCAweDNlM2UzZSB9LAorCXsgMHg0MDgzMCwgMHg0MDQwNDAgfSwKKwl7IDB4NDA4MzQsIDB4NDM0MzQzIH0sCisJeyAweDQwODM4LCAweDQ1NDU0NSB9LAorCXsgMHg0MDgzYywgMHg0NzQ3NDcgfSwKKwl7IDB4NDA4NDAsIDB4NDk0OTQ5IH0sCisJeyAweDQwODQ0LCAweDRiNGI0YiB9LAorCXsgMHg0MDg0OCwgMHg0ZDRkNGQgfSwKKwl7IDB4NDA4NGMsIDB4NGY0ZjRmIH0sCisJeyAweDQwODUwLCAweDUxNTE1MSB9LAorCXsgMHg0MDg1NCwgMHg1MzUzNTMgfSwKKwl7IDB4NDA4NTgsIDB4NTU1NTU1IH0sCisJeyAweDQwODVjLCAweDU2NTY1NiB9LAorCXsgMHg0MDg2MCwgMHg1ODU4NTggfSwKKwl7IDB4NDA4NjQsIDB4NWE1YTVhIH0sCisJeyAweDQwODY4LCAweDViNWI1YiB9LAorCXsgMHg0MDg2YywgMHg1ZDVkNWQgfSwKKwl7IDB4NDA4NzAsIDB4NWU1ZTVlIH0sCisJeyAweDQwODc0LCAweDYwNjA2MCB9LAorCXsgMHg0MDg3OCwgMHg2MTYxNjEgfSwKKwl7IDB4NDA4N2MsIDB4NjM2MzYzIH0sCisJeyAweDQwODgwLCAweDY0NjQ2NCB9LAorCXsgMHg0MDg4NCwgMHg2NjY2NjYgfSwKKwl7IDB4NDA4ODgsIDB4Njc2NzY3IH0sCisJeyAweDQwODhjLCAweDY4Njg2OCB9LAorCXsgMHg0MDg5MCwgMHg2YTZhNmEgfSwKKwl7IDB4NDA4OTQsIDB4NmI2YjZiIH0sCisJeyAweDQwODk4LCAweDZjNmM2YyB9LAorCXsgMHg0MDg5YywgMHg2ZTZlNmUgfSwKKwl7IDB4NDA4YTAsIDB4NmY2ZjZmIH0sCisJeyAweDQwOGE0LCAweDcwNzA3MCB9LAorCXsgMHg0MDhhOCwgMHg3MTcxNzEgfSwKKwl7IDB4NDA4YWMsIDB4NzI3MjcyIH0sCisJeyAweDQwOGIwLCAweDc0NzQ3NCB9LAorCXsgMHg0MDhiNCwgMHg3NTc1NzUgfSwKKwl7IDB4NDA4YjgsIDB4NzY3Njc2IH0sCisJeyAweDQwOGJjLCAweDc3Nzc3NyB9LAorCXsgMHg0MDhjMCwgMHg3ODc4NzggfSwKKwl7IDB4NDA4YzQsIDB4Nzk3OTc5IH0sCisJeyAweDQwOGM4LCAweDdhN2E3YSB9LAorCXsgMHg0MDhjYywgMHg3YzdjN2MgfSwKKwl7IDB4NDA4ZDAsIDB4N2Q3ZDdkIH0sCisJeyAweDQwOGQ0LCAweDdlN2U3ZSB9LAorCXsgMHg0MDhkOCwgMHg3ZjdmN2YgfSwKKwl7IDB4NDA4ZGMsIDB4ODA4MDgwIH0sCisJeyAweDQwOGUwLCAweDgxODE4MSB9LAorCXsgMHg0MDhlNCwgMHg4MjgyODIgfSwKKwl7IDB4NDA4ZTgsIDB4ODM4MzgzIH0sCisJeyAweDQwOGVjLCAweDg0ODQ4NCB9LAorCXsgMHg0MDhmMCwgMHg4NTg1ODUgfSwKKwl7IDB4NDA4ZjQsIDB4ODY4Njg2IH0sCisJeyAweDQwOGY4LCAweDg3ODc4NyB9LAorCXsgMHg0MDhmYywgMHg4ODg4ODggfSwKKwl7IDB4NDA5MDAsIDB4ODk4OTg5IH0sCisJeyAweDQwOTA0LCAweDhhOGE4YSB9LAorCXsgMHg0MDkwOCwgMHg4YjhiOGIgfSwKKwl7IDB4NDA5MGMsIDB4OGM4YzhjIH0sCisJeyAweDQwOTEwLCAweDhkOGQ4ZCB9LAorCXsgMHg0MDkxNCwgMHg4ZThlOGUgfSwKKwl7IDB4NDA5MTgsIDB4OGY4ZjhmIH0sCisJeyAweDQwOTFjLCAweDhmOGY4ZiB9LAorCXsgMHg0MDkyMCwgMHg5MDkwOTAgfSwKKwl7IDB4NDA5MjQsIDB4OTE5MTkxIH0sCisJeyAweDQwOTI4LCAweDkyOTI5MiB9LAorCXsgMHg0MDkyYywgMHg5MzkzOTMgfSwKKwl7IDB4NDA5MzAsIDB4OTQ5NDk0IH0sCisJeyAweDQwOTM0LCAweDk1OTU5NSB9LAorCXsgMHg0MDkzOCwgMHg5Njk2OTYgfSwKKwl7IDB4NDA5M2MsIDB4OTY5Njk2IH0sCisJeyAweDQwOTQwLCAweDk3OTc5NyB9LAorCXsgMHg0MDk0NCwgMHg5ODk4OTggfSwKKwl7IDB4NDA5NDgsIDB4OTk5OTk5IH0sCisJeyAweDQwOTRjLCAweDlhOWE5YSB9LAorCXsgMHg0MDk1MCwgMHg5YjliOWIgfSwKKwl7IDB4NDA5NTQsIDB4OWM5YzljIH0sCisJeyAweDQwOTU4LCAweDljOWM5YyB9LAorCXsgMHg0MDk1YywgMHg5ZDlkOWQgfSwKKwl7IDB4NDA5NjAsIDB4OWU5ZTllIH0sCisJeyAweDQwOTY0LCAweDlmOWY5ZiB9LAorCXsgMHg0MDk2OCwgMHhhMGEwYTAgfSwKKwl7IDB4NDA5NmMsIDB4YTBhMGEwIH0sCisJeyAweDQwOTcwLCAweGExYTFhMSB9LAorCXsgMHg0MDk3NCwgMHhhMmEyYTIgfSwKKwl7IDB4NDA5NzgsIDB4YTNhM2EzIH0sCisJeyAweDQwOTdjLCAweGE0YTRhNCB9LAorCXsgMHg0MDk4MCwgMHhhNGE0YTQgfSwKKwl7IDB4NDA5ODQsIDB4YTVhNWE1IH0sCisJeyAweDQwOTg4LCAweGE2YTZhNiB9LAorCXsgMHg0MDk4YywgMHhhN2E3YTcgfSwKKwl7IDB4NDA5OTAsIDB4YTdhN2E3IH0sCisJeyAweDQwOTk0LCAweGE4YThhOCB9LAorCXsgMHg0MDk5OCwgMHhhOWE5YTkgfSwKKwl7IDB4NDA5OWMsIDB4YWFhYWFhIH0sCisJeyAweDQwOWEwLCAweGFhYWFhYSB9LAorCXsgMHg0MDlhNCwgMHhhYmFiYWIgfSwKKwl7IDB4NDA5YTgsIDB4YWNhY2FjIH0sCisJeyAweDQwOWFjLCAweGFkYWRhZCB9LAorCXsgMHg0MDliMCwgMHhhZGFkYWQgfSwKKwl7IDB4NDA5YjQsIDB4YWVhZWFlIH0sCisJeyAweDQwOWI4LCAweGFmYWZhZiB9LAorCXsgMHg0MDliYywgMHhhZmFmYWYgfSwKKwl7IDB4NDA5YzAsIDB4YjBiMGIwIH0sCisJeyAweDQwOWM0LCAweGIxYjFiMSB9LAorCXsgMHg0MDljOCwgMHhiMmIyYjIgfSwKKwl7IDB4NDA5Y2MsIDB4YjJiMmIyIH0sCisJeyAweDQwOWQwLCAweGIzYjNiMyB9LAorCXsgMHg0MDlkNCwgMHhiNGI0YjQgfSwKKwl7IDB4NDA5ZDgsIDB4YjRiNGI0IH0sCisJeyAweDQwOWRjLCAweGI1YjViNSB9LAorCXsgMHg0MDllMCwgMHhiNmI2YjYgfSwKKwl7IDB4NDA5ZTQsIDB4YjZiNmI2IH0sCisJeyAweDQwOWU4LCAweGI3YjdiNyB9LAorCXsgMHg0MDllYywgMHhiOGI4YjggfSwKKwl7IDB4NDA5ZjAsIDB4YjhiOGI4IH0sCisJeyAweDQwOWY0LCAweGI5YjliOSB9LAorCXsgMHg0MDlmOCwgMHhiYWJhYmEgfSwKKwl7IDB4NDA5ZmMsIDB4YmFiYWJhIH0sCisJeyAweDQwYTAwLCAweGJiYmJiYiB9LAorCXsgMHg0MGEwNCwgMHhiY2JjYmMgfSwKKwl7IDB4NDBhMDgsIDB4YmNiY2JjIH0sCisJeyAweDQwYTBjLCAweGJkYmRiZCB9LAorCXsgMHg0MGExMCwgMHhiZWJlYmUgfSwKKwl7IDB4NDBhMTQsIDB4YmViZWJlIH0sCisJeyAweDQwYTE4LCAweGJmYmZiZiB9LAorCXsgMHg0MGExYywgMHhjMGMwYzAgfSwKKwl7IDB4NDBhMjAsIDB4YzBjMGMwIH0sCisJeyAweDQwYTI0LCAweGMxYzFjMSB9LAorCXsgMHg0MGEyOCwgMHhjMWMxYzEgfSwKKwl7IDB4NDBhMmMsIDB4YzJjMmMyIH0sCisJeyAweDQwYTMwLCAweGMzYzNjMyB9LAorCXsgMHg0MGEzNCwgMHhjM2MzYzMgfSwKKwl7IDB4NDBhMzgsIDB4YzRjNGM0IH0sCisJeyAweDQwYTNjLCAweGM1YzVjNSB9LAorCXsgMHg0MGE0MCwgMHhjNWM1YzUgfSwKKwl7IDB4NDBhNDQsIDB4YzZjNmM2IH0sCisJeyAweDQwYTQ4LCAweGM2YzZjNiB9LAorCXsgMHg0MGE0YywgMHhjN2M3YzcgfSwKKwl7IDB4NDBhNTAsIDB4YzhjOGM4IH0sCisJeyAweDQwYTU0LCAweGM4YzhjOCB9LAorCXsgMHg0MGE1OCwgMHhjOWM5YzkgfSwKKwl7IDB4NDBhNWMsIDB4YzljOWM5IH0sCisJeyAweDQwYTYwLCAweGNhY2FjYSB9LAorCXsgMHg0MGE2NCwgMHhjYmNiY2IgfSwKKwl7IDB4NDBhNjgsIDB4Y2JjYmNiIH0sCisJeyAweDQwYTZjLCAweGNjY2NjYyB9LAorCXsgMHg0MGE3MCwgMHhjY2NjY2MgfSwKKwl7IDB4NDBhNzQsIDB4Y2RjZGNkIH0sCisJeyAweDQwYTc4LCAweGNlY2VjZSB9LAorCXsgMHg0MGE3YywgMHhjZWNlY2UgfSwKKwl7IDB4NDBhODAsIDB4Y2ZjZmNmIH0sCisJeyAweDQwYTg0LCAweGNmY2ZjZiB9LAorCXsgMHg0MGE4OCwgMHhkMGQwZDAgfSwKKwl7IDB4NDBhOGMsIDB4ZDBkMGQwIH0sCisJeyAweDQwYTkwLCAweGQxZDFkMSB9LAorCXsgMHg0MGE5NCwgMHhkMmQyZDIgfSwKKwl7IDB4NDBhOTgsIDB4ZDJkMmQyIH0sCisJeyAweDQwYTljLCAweGQzZDNkMyB9LAorCXsgMHg0MGFhMCwgMHhkM2QzZDMgfSwKKwl7IDB4NDBhYTQsIDB4ZDRkNGQ0IH0sCisJeyAweDQwYWE4LCAweGQ0ZDRkNCB9LAorCXsgMHg0MGFhYywgMHhkNWQ1ZDUgfSwKKwl7IDB4NDBhYjAsIDB4ZDZkNmQ2IH0sCisJeyAweDQwYWI0LCAweGQ2ZDZkNiB9LAorCXsgMHg0MGFiOCwgMHhkN2Q3ZDcgfSwKKwl7IDB4NDBhYmMsIDB4ZDdkN2Q3IH0sCisJeyAweDQwYWMwLCAweGQ4ZDhkOCB9LAorCXsgMHg0MGFjNCwgMHhkOGQ4ZDggfSwKKwl7IDB4NDBhYzgsIDB4ZDlkOWQ5IH0sCisJeyAweDQwYWNjLCAweGQ5ZDlkOSB9LAorCXsgMHg0MGFkMCwgMHhkYWRhZGEgfSwKKwl7IDB4NDBhZDQsIDB4ZGJkYmRiIH0sCisJeyAweDQwYWQ4LCAweGRiZGJkYiB9LAorCXsgMHg0MGFkYywgMHhkY2RjZGMgfSwKKwl7IDB4NDBhZTAsIDB4ZGNkY2RjIH0sCisJeyAweDQwYWU0LCAweGRkZGRkZCB9LAorCXsgMHg0MGFlOCwgMHhkZGRkZGQgfSwKKwl7IDB4NDBhZWMsIDB4ZGVkZWRlIH0sCisJeyAweDQwYWYwLCAweGRlZGVkZSB9LAorCXsgMHg0MGFmNCwgMHhkZmRmZGYgfSwKKwl7IDB4NDBhZjgsIDB4ZGZkZmRmIH0sCisJeyAweDQwYWZjLCAweGUwZTBlMCB9LAorCXsgMHg0MGIwMCwgMHhlMGUwZTAgfSwKKwl7IDB4NDBiMDQsIDB4ZTFlMWUxIH0sCisJeyAweDQwYjA4LCAweGUxZTFlMSB9LAorCXsgMHg0MGIwYywgMHhlMmUyZTIgfSwKKwl7IDB4NDBiMTAsIDB4ZTNlM2UzIH0sCisJeyAweDQwYjE0LCAweGUzZTNlMyB9LAorCXsgMHg0MGIxOCwgMHhlNGU0ZTQgfSwKKwl7IDB4NDBiMWMsIDB4ZTRlNGU0IH0sCisJeyAweDQwYjIwLCAweGU1ZTVlNSB9LAorCXsgMHg0MGIyNCwgMHhlNWU1ZTUgfSwKKwl7IDB4NDBiMjgsIDB4ZTZlNmU2IH0sCisJeyAweDQwYjJjLCAweGU2ZTZlNiB9LAorCXsgMHg0MGIzMCwgMHhlN2U3ZTcgfSwKKwl7IDB4NDBiMzQsIDB4ZTdlN2U3IH0sCisJeyAweDQwYjM4LCAweGU4ZThlOCB9LAorCXsgMHg0MGIzYywgMHhlOGU4ZTggfSwKKwl7IDB4NDBiNDAsIDB4ZTllOWU5IH0sCisJeyAweDQwYjQ0LCAweGU5ZTllOSB9LAorCXsgMHg0MGI0OCwgMHhlYWVhZWEgfSwKKwl7IDB4NDBiNGMsIDB4ZWFlYWVhIH0sCisJeyAweDQwYjUwLCAweGViZWJlYiB9LAorCXsgMHg0MGI1NCwgMHhlYmViZWIgfSwKKwl7IDB4NDBiNTgsIDB4ZWNlY2VjIH0sCisJeyAweDQwYjVjLCAweGVjZWNlYyB9LAorCXsgMHg0MGI2MCwgMHhlZGVkZWQgfSwKKwl7IDB4NDBiNjQsIDB4ZWRlZGVkIH0sCisJeyAweDQwYjY4LCAweGVlZWVlZSB9LAorCXsgMHg0MGI2YywgMHhlZWVlZWUgfSwKKwl7IDB4NDBiNzAsIDB4ZWZlZmVmIH0sCisJeyAweDQwYjc0LCAweGVmZWZlZiB9LAorCXsgMHg0MGI3OCwgMHhmMGYwZjAgfSwKKwl7IDB4NDBiN2MsIDB4ZjBmMGYwIH0sCisJeyAweDQwYjgwLCAweGYxZjFmMSB9LAorCXsgMHg0MGI4NCwgMHhmMWYxZjEgfSwKKwl7IDB4NDBiODgsIDB4ZjJmMmYyIH0sCisJeyAweDQwYjhjLCAweGYyZjJmMiB9LAorCXsgMHg0MGI5MCwgMHhmMmYyZjIgfSwKKwl7IDB4NDBiOTQsIDB4ZjNmM2YzIH0sCisJeyAweDQwYjk4LCAweGYzZjNmMyB9LAorCXsgMHg0MGI5YywgMHhmNGY0ZjQgfSwKKwl7IDB4NDBiYTAsIDB4ZjRmNGY0IH0sCisJeyAweDQwYmE0LCAweGY1ZjVmNSB9LAorCXsgMHg0MGJhOCwgMHhmNWY1ZjUgfSwKKwl7IDB4NDBiYWMsIDB4ZjZmNmY2IH0sCisJeyAweDQwYmIwLCAweGY2ZjZmNiB9LAorCXsgMHg0MGJiNCwgMHhmN2Y3ZjcgfSwKKwl7IDB4NDBiYjgsIDB4ZjdmN2Y3IH0sCisJeyAweDQwYmJjLCAweGY4ZjhmOCB9LAorCXsgMHg0MGJjMCwgMHhmOGY4ZjggfSwKKwl7IDB4NDBiYzQsIDB4ZjlmOWY5IH0sCisJeyAweDQwYmM4LCAweGY5ZjlmOSB9LAorCXsgMHg0MGJjYywgMHhmYWZhZmEgfSwKKwl7IDB4NDBiZDAsIDB4ZmFmYWZhIH0sCisJeyAweDQwYmQ0LCAweGZhZmFmYSB9LAorCXsgMHg0MGJkOCwgMHhmYmZiZmIgfSwKKwl7IDB4NDBiZGMsIDB4ZmJmYmZiIH0sCisJeyAweDQwYmUwLCAweGZjZmNmYyB9LAorCXsgMHg0MGJlNCwgMHhmY2ZjZmMgfSwKKwl7IDB4NDBiZTgsIDB4ZmRmZGZkIH0sCisJeyAweDQwYmVjLCAweGZkZmRmZCB9LAorCXsgMHg0MGJmMCwgMHhmZWZlZmUgfSwKKwl7IDB4NDBiZjQsIDB4ZmVmZWZlIH0sCisJeyAweDQwYmY4LCAweGZmZmZmZiB9LAorCXsgMHg0MGJmYywgMHhmZmZmZmYgfSwKKwl7IDB4NDBjMDAsIDB4MCB9LAorCXsgMHg0MGMwNCwgMHgwIH0sCisJeyAweDQwYzA4LCAweDAgfSwKKwl7IDB4NDBjMGMsIDB4MCB9LAorCXsgMHg0MGMxMCwgMHgwIH0sCisJeyAweDQwYzE0LCAweDAgfSwKKwl7IDB4NDBjMTgsIDB4MCB9LAorCXsgMHg0MGMxYywgMHgwIH0sCisJeyAweDQwYzIwLCAweDAgfSwKKwl7IDB4NDBjMjQsIDB4MCB9LAorCXsgMHg0MGMyOCwgMHgwIH0sCisJeyAweDQwYzJjLCAweDAgfSwKKwl7IDB4NDBjMzAsIDB4MCB9LAorCXsgMHg0MGMzNCwgMHgwIH0sCisJeyAweDQwYzM4LCAweDAgfSwKKwl7IDB4NDBjM2MsIDB4MCB9LAorCXsgMHg0MGM0MCwgMHgxMDEwMSB9LAorCXsgMHg0MGM0NCwgMHgxMDEwMSB9LAorCXsgMHg0MGM0OCwgMHgxMDEwMSB9LAorCXsgMHg0MGM0YywgMHgxMDEwMSB9LAorCXsgMHg0MGM1MCwgMHgxMDEwMSB9LAorCXsgMHg0MGM1NCwgMHgxMDEwMSB9LAorCXsgMHg0MGM1OCwgMHgxMDEwMSB9LAorCXsgMHg0MGM1YywgMHgxMDEwMSB9LAorCXsgMHg0MGM2MCwgMHgxMDEwMSB9LAorCXsgMHg0MGM2NCwgMHgxMDEwMSB9LAorCXsgMHg0MGM2OCwgMHgyMDIwMiB9LAorCXsgMHg0MGM2YywgMHgyMDIwMiB9LAorCXsgMHg0MGM3MCwgMHgyMDIwMiB9LAorCXsgMHg0MGM3NCwgMHgyMDIwMiB9LAorCXsgMHg0MGM3OCwgMHgyMDIwMiB9LAorCXsgMHg0MGM3YywgMHgyMDIwMiB9LAorCXsgMHg0MGM4MCwgMHgzMDMwMyB9LAorCXsgMHg0MGM4NCwgMHgzMDMwMyB9LAorCXsgMHg0MGM4OCwgMHgzMDMwMyB9LAorCXsgMHg0MGM4YywgMHgzMDMwMyB9LAorCXsgMHg0MGM5MCwgMHgzMDMwMyB9LAorCXsgMHg0MGM5NCwgMHg0MDQwNCB9LAorCXsgMHg0MGM5OCwgMHg0MDQwNCB9LAorCXsgMHg0MGM5YywgMHg0MDQwNCB9LAorCXsgMHg0MGNhMCwgMHg0MDQwNCB9LAorCXsgMHg0MGNhNCwgMHg0MDQwNCB9LAorCXsgMHg0MGNhOCwgMHg1MDUwNSB9LAorCXsgMHg0MGNhYywgMHg1MDUwNSB9LAorCXsgMHg0MGNiMCwgMHg1MDUwNSB9LAorCXsgMHg0MGNiNCwgMHg1MDUwNSB9LAorCXsgMHg0MGNiOCwgMHg2MDYwNiB9LAorCXsgMHg0MGNiYywgMHg2MDYwNiB9LAorCXsgMHg0MGNjMCwgMHg2MDYwNiB9LAorCXsgMHg0MGNjNCwgMHg3MDcwNyB9LAorCXsgMHg0MGNjOCwgMHg3MDcwNyB9LAorCXsgMHg0MGNjYywgMHg3MDcwNyB9LAorCXsgMHg0MGNkMCwgMHg3MDcwNyB9LAorCXsgMHg0MGNkNCwgMHg4MDgwOCB9LAorCXsgMHg0MGNkOCwgMHg4MDgwOCB9LAorCXsgMHg0MGNkYywgMHg4MDgwOCB9LAorCXsgMHg0MGNlMCwgMHg5MDkwOSB9LAorCXsgMHg0MGNlNCwgMHg5MDkwOSB9LAorCXsgMHg0MGNlOCwgMHhhMGEwYSB9LAorCXsgMHg0MGNlYywgMHhhMGEwYSB9LAorCXsgMHg0MGNmMCwgMHhhMGEwYSB9LAorCXsgMHg0MGNmNCwgMHhiMGIwYiB9LAorCXsgMHg0MGNmOCwgMHhiMGIwYiB9LAorCXsgMHg0MGNmYywgMHhiMGIwYiB9LAorCXsgMHg0MGQwMCwgMHhjMGMwYyB9LAorCXsgMHg0MGQwNCwgMHhjMGMwYyB9LAorCXsgMHg0MGQwOCwgMHhkMGQwZCB9LAorCXsgMHg0MGQwYywgMHhkMGQwZCB9LAorCXsgMHg0MGQxMCwgMHhlMGUwZSB9LAorCXsgMHg0MGQxNCwgMHhlMGUwZSB9LAorCXsgMHg0MGQxOCwgMHhlMGUwZSB9LAorCXsgMHg0MGQxYywgMHhmMGYwZiB9LAorCXsgMHg0MGQyMCwgMHhmMGYwZiB9LAorCXsgMHg0MGQyNCwgMHgxMDEwMTAgfSwKKwl7IDB4NDBkMjgsIDB4MTAxMDEwIH0sCisJeyAweDQwZDJjLCAweDExMTExMSB9LAorCXsgMHg0MGQzMCwgMHgxMTExMTEgfSwKKwl7IDB4NDBkMzQsIDB4MTIxMjEyIH0sCisJeyAweDQwZDM4LCAweDEyMTIxMiB9LAorCXsgMHg0MGQzYywgMHgxMzEzMTMgfSwKKwl7IDB4NDBkNDAsIDB4MTMxMzEzIH0sCisJeyAweDQwZDQ0LCAweDE0MTQxNCB9LAorCXsgMHg0MGQ0OCwgMHgxNTE1MTUgfSwKKwl7IDB4NDBkNGMsIDB4MTUxNTE1IH0sCisJeyAweDQwZDUwLCAweDE2MTYxNiB9LAorCXsgMHg0MGQ1NCwgMHgxNjE2MTYgfSwKKwl7IDB4NDBkNTgsIDB4MTcxNzE3IH0sCisJeyAweDQwZDVjLCAweDE3MTcxNyB9LAorCXsgMHg0MGQ2MCwgMHgxODE4MTggfSwKKwl7IDB4NDBkNjQsIDB4MTkxOTE5IH0sCisJeyAweDQwZDY4LCAweDE5MTkxOSB9LAorCXsgMHg0MGQ2YywgMHgxYTFhMWEgfSwKKwl7IDB4NDBkNzAsIDB4MWIxYjFiIH0sCisJeyAweDQwZDc0LCAweDFiMWIxYiB9LAorCXsgMHg0MGQ3OCwgMHgxYzFjMWMgfSwKKwl7IDB4NDBkN2MsIDB4MWMxYzFjIH0sCisJeyAweDQwZDgwLCAweDFkMWQxZCB9LAorCXsgMHg0MGQ4NCwgMHgxZTFlMWUgfSwKKwl7IDB4NDBkODgsIDB4MWYxZjFmIH0sCisJeyAweDQwZDhjLCAweDFmMWYxZiB9LAorCXsgMHg0MGQ5MCwgMHgyMDIwMjAgfSwKKwl7IDB4NDBkOTQsIDB4MjEyMTIxIH0sCisJeyAweDQwZDk4LCAweDIxMjEyMSB9LAorCXsgMHg0MGQ5YywgMHgyMjIyMjIgfSwKKwl7IDB4NDBkYTAsIDB4MjMyMzIzIH0sCisJeyAweDQwZGE0LCAweDI0MjQyNCB9LAorCXsgMHg0MGRhOCwgMHgyNDI0MjQgfSwKKwl7IDB4NDBkYWMsIDB4MjUyNTI1IH0sCisJeyAweDQwZGIwLCAweDI2MjYyNiB9LAorCXsgMHg0MGRiNCwgMHgyNzI3MjcgfSwKKwl7IDB4NDBkYjgsIDB4MjcyNzI3IH0sCisJeyAweDQwZGJjLCAweDI4MjgyOCB9LAorCXsgMHg0MGRjMCwgMHgyOTI5MjkgfSwKKwl7IDB4NDBkYzQsIDB4MmEyYTJhIH0sCisJeyAweDQwZGM4LCAweDJiMmIyYiB9LAorCXsgMHg0MGRjYywgMHgyYzJjMmMgfSwKKwl7IDB4NDBkZDAsIDB4MmMyYzJjIH0sCisJeyAweDQwZGQ0LCAweDJkMmQyZCB9LAorCXsgMHg0MGRkOCwgMHgyZTJlMmUgfSwKKwl7IDB4NDBkZGMsIDB4MmYyZjJmIH0sCisJeyAweDQwZGUwLCAweDMwMzAzMCB9LAorCXsgMHg0MGRlNCwgMHgzMTMxMzEgfSwKKwl7IDB4NDBkZTgsIDB4MzIzMjMyIH0sCisJeyAweDQwZGVjLCAweDMzMzMzMyB9LAorCXsgMHg0MGRmMCwgMHgzMzMzMzMgfSwKKwl7IDB4NDBkZjQsIDB4MzQzNDM0IH0sCisJeyAweDQwZGY4LCAweDM1MzUzNSB9LAorCXsgMHg0MGRmYywgMHgzNjM2MzYgfSwKKwl7IDB4NDBlMDAsIDB4MzczNzM3IH0sCisJeyAweDQwZTA0LCAweDM4MzgzOCB9LAorCXsgMHg0MGUwOCwgMHgzOTM5MzkgfSwKKwl7IDB4NDBlMGMsIDB4M2EzYTNhIH0sCisJeyAweDQwZTEwLCAweDNiM2IzYiB9LAorCXsgMHg0MGUxNCwgMHgzYzNjM2MgfSwKKwl7IDB4NDBlMTgsIDB4M2QzZDNkIH0sCisJeyAweDQwZTFjLCAweDNlM2UzZSB9LAorCXsgMHg0MGUyMCwgMHgzZjNmM2YgfSwKKwl7IDB4NDBlMjQsIDB4NDA0MDQwIH0sCisJeyAweDQwZTI4LCAweDQxNDE0MSB9LAorCXsgMHg0MGUyYywgMHg0MjQyNDIgfSwKKwl7IDB4NDBlMzAsIDB4NDM0MzQzIH0sCisJeyAweDQwZTM0LCAweDQ0NDQ0NCB9LAorCXsgMHg0MGUzOCwgMHg0NjQ2NDYgfSwKKwl7IDB4NDBlM2MsIDB4NDc0NzQ3IH0sCisJeyAweDQwZTQwLCAweDQ4NDg0OCB9LAorCXsgMHg0MGU0NCwgMHg0OTQ5NDkgfSwKKwl7IDB4NDBlNDgsIDB4NGE0YTRhIH0sCisJeyAweDQwZTRjLCAweDRiNGI0YiB9LAorCXsgMHg0MGU1MCwgMHg0YzRjNGMgfSwKKwl7IDB4NDBlNTQsIDB4NGQ0ZDRkIH0sCisJeyAweDQwZTU4LCAweDRmNGY0ZiB9LAorCXsgMHg0MGU1YywgMHg1MDUwNTAgfSwKKwl7IDB4NDBlNjAsIDB4NTE1MTUxIH0sCisJeyAweDQwZTY0LCAweDUyNTI1MiB9LAorCXsgMHg0MGU2OCwgMHg1MzUzNTMgfSwKKwl7IDB4NDBlNmMsIDB4NTQ1NDU0IH0sCisJeyAweDQwZTcwLCAweDU2NTY1NiB9LAorCXsgMHg0MGU3NCwgMHg1NzU3NTcgfSwKKwl7IDB4NDBlNzgsIDB4NTg1ODU4IH0sCisJeyAweDQwZTdjLCAweDU5NTk1OSB9LAorCXsgMHg0MGU4MCwgMHg1YjViNWIgfSwKKwl7IDB4NDBlODQsIDB4NWM1YzVjIH0sCisJeyAweDQwZTg4LCAweDVkNWQ1ZCB9LAorCXsgMHg0MGU4YywgMHg1ZTVlNWUgfSwKKwl7IDB4NDBlOTAsIDB4NjA2MDYwIH0sCisJeyAweDQwZTk0LCAweDYxNjE2MSB9LAorCXsgMHg0MGU5OCwgMHg2MjYyNjIgfSwKKwl7IDB4NDBlOWMsIDB4NjQ2NDY0IH0sCisJeyAweDQwZWEwLCAweDY1NjU2NSB9LAorCXsgMHg0MGVhNCwgMHg2NjY2NjYgfSwKKwl7IDB4NDBlYTgsIDB4Njg2ODY4IH0sCisJeyAweDQwZWFjLCAweDY5Njk2OSB9LAorCXsgMHg0MGViMCwgMHg2YTZhNmEgfSwKKwl7IDB4NDBlYjQsIDB4NmM2YzZjIH0sCisJeyAweDQwZWI4LCAweDZkNmQ2ZCB9LAorCXsgMHg0MGViYywgMHg2ZjZmNmYgfSwKKwl7IDB4NDBlYzAsIDB4NzA3MDcwIH0sCisJeyAweDQwZWM0LCAweDcxNzE3MSB9LAorCXsgMHg0MGVjOCwgMHg3MzczNzMgfSwKKwl7IDB4NDBlY2MsIDB4NzQ3NDc0IH0sCisJeyAweDQwZWQwLCAweDc2NzY3NiB9LAorCXsgMHg0MGVkNCwgMHg3Nzc3NzcgfSwKKwl7IDB4NDBlZDgsIDB4Nzk3OTc5IH0sCisJeyAweDQwZWRjLCAweDdhN2E3YSB9LAorCXsgMHg0MGVlMCwgMHg3YzdjN2MgfSwKKwl7IDB4NDBlZTQsIDB4N2Q3ZDdkIH0sCisJeyAweDQwZWU4LCAweDdmN2Y3ZiB9LAorCXsgMHg0MGVlYywgMHg4MDgwODAgfSwKKwl7IDB4NDBlZjAsIDB4ODI4MjgyIH0sCisJeyAweDQwZWY0LCAweDgzODM4MyB9LAorCXsgMHg0MGVmOCwgMHg4NTg1ODUgfSwKKwl7IDB4NDBlZmMsIDB4ODY4Njg2IH0sCisJeyAweDQwZjAwLCAweDg4ODg4OCB9LAorCXsgMHg0MGYwNCwgMHg4OTg5ODkgfSwKKwl7IDB4NDBmMDgsIDB4OGI4YjhiIH0sCisJeyAweDQwZjBjLCAweDhkOGQ4ZCB9LAorCXsgMHg0MGYxMCwgMHg4ZThlOGUgfSwKKwl7IDB4NDBmMTQsIDB4OTA5MDkwIH0sCisJeyAweDQwZjE4LCAweDkxOTE5MSB9LAorCXsgMHg0MGYxYywgMHg5MzkzOTMgfSwKKwl7IDB4NDBmMjAsIDB4OTU5NTk1IH0sCisJeyAweDQwZjI0LCAweDk2OTY5NiB9LAorCXsgMHg0MGYyOCwgMHg5ODk4OTggfSwKKwl7IDB4NDBmMmMsIDB4OWE5YTlhIH0sCisJeyAweDQwZjMwLCAweDliOWI5YiB9LAorCXsgMHg0MGYzNCwgMHg5ZDlkOWQgfSwKKwl7IDB4NDBmMzgsIDB4OWY5ZjlmIH0sCisJeyAweDQwZjNjLCAweGExYTFhMSB9LAorCXsgMHg0MGY0MCwgMHhhMmEyYTIgfSwKKwl7IDB4NDBmNDQsIDB4YTRhNGE0IH0sCisJeyAweDQwZjQ4LCAweGE2YTZhNiB9LAorCXsgMHg0MGY0YywgMHhhN2E3YTcgfSwKKwl7IDB4NDBmNTAsIDB4YTlhOWE5IH0sCisJeyAweDQwZjU0LCAweGFiYWJhYiB9LAorCXsgMHg0MGY1OCwgMHhhZGFkYWQgfSwKKwl7IDB4NDBmNWMsIDB4YWZhZmFmIH0sCisJeyAweDQwZjYwLCAweGIwYjBiMCB9LAorCXsgMHg0MGY2NCwgMHhiMmIyYjIgfSwKKwl7IDB4NDBmNjgsIDB4YjRiNGI0IH0sCisJeyAweDQwZjZjLCAweGI2YjZiNiB9LAorCXsgMHg0MGY3MCwgMHhiOGI4YjggfSwKKwl7IDB4NDBmNzQsIDB4YmFiYWJhIH0sCisJeyAweDQwZjc4LCAweGJiYmJiYiB9LAorCXsgMHg0MGY3YywgMHhiZGJkYmQgfSwKKwl7IDB4NDBmODAsIDB4YmZiZmJmIH0sCisJeyAweDQwZjg0LCAweGMxYzFjMSB9LAorCXsgMHg0MGY4OCwgMHhjM2MzYzMgfSwKKwl7IDB4NDBmOGMsIDB4YzVjNWM1IH0sCisJeyAweDQwZjkwLCAweGM3YzdjNyB9LAorCXsgMHg0MGY5NCwgMHhjOWM5YzkgfSwKKwl7IDB4NDBmOTgsIDB4Y2JjYmNiIH0sCisJeyAweDQwZjljLCAweGNkY2RjZCB9LAorCXsgMHg0MGZhMCwgMHhjZmNmY2YgfSwKKwl7IDB4NDBmYTQsIDB4ZDFkMWQxIH0sCisJeyAweDQwZmE4LCAweGQzZDNkMyB9LAorCXsgMHg0MGZhYywgMHhkNWQ1ZDUgfSwKKwl7IDB4NDBmYjAsIDB4ZDdkN2Q3IH0sCisJeyAweDQwZmI0LCAweGQ5ZDlkOSB9LAorCXsgMHg0MGZiOCwgMHhkYmRiZGIgfSwKKwl7IDB4NDBmYmMsIDB4ZGRkZGRkIH0sCisJeyAweDQwZmMwLCAweGRmZGZkZiB9LAorCXsgMHg0MGZjNCwgMHhlMWUxZTEgfSwKKwl7IDB4NDBmYzgsIDB4ZTNlM2UzIH0sCisJeyAweDQwZmNjLCAweGU1ZTVlNSB9LAorCXsgMHg0MGZkMCwgMHhlN2U3ZTcgfSwKKwl7IDB4NDBmZDQsIDB4ZTllOWU5IH0sCisJeyAweDQwZmQ4LCAweGViZWJlYiB9LAorCXsgMHg0MGZkYywgMHhlZWVlZWUgfSwKKwl7IDB4NDBmZTAsIDB4ZjBmMGYwIH0sCisJeyAweDQwZmU0LCAweGYyZjJmMiB9LAorCXsgMHg0MGZlOCwgMHhmNGY0ZjQgfSwKKwl7IDB4NDBmZWMsIDB4ZjZmNmY2IH0sCisJeyAweDQwZmYwLCAweGY4ZjhmOCB9LAorCXsgMHg0MGZmNCwgMHhmYmZiZmIgfSwKKwl7IDB4NDBmZjgsIDB4ZmRmZGZkIH0sCisJeyAweDQwZmZjLCAweGZmZmZmZiB9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9ody5oIGIvZHJpdmVycy92aWRlby9tc20vbWRwX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzZGViNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9ody5oCkBAIC0wLDAgKzEsNjIxIEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZHBfaHcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTURQX0hXX0hfCisjZGVmaW5lIF9NRFBfSFdfSF8KKworI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KKworc3RydWN0IG1kcF9pbmZvIHsKKwlzdHJ1Y3QgbWRwX2RldmljZSBtZHBfZGV2OworCWNoYXIgKiBfX2lvbWVtIGJhc2U7CisJaW50IGlycTsKK307CitzdHJ1Y3QgbWRwX2JsaXRfcmVxOworc3RydWN0IG1kcF9kZXZpY2U7CitpbnQgbWRwX3BwcF9ibGl0KGNvbnN0IHN0cnVjdCBtZHBfaW5mbyAqbWRwLCBzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsCisJCSBzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LAorCQkgdW5zaWduZWQgbG9uZyBzcmNfbGVuLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsCisJCSB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCwgdW5zaWduZWQgbG9uZyBkc3RfbGVuKTsKKyNkZWZpbmUgbWRwX3dyaXRlbChtZHAsIHZhbHVlLCBvZmZzZXQpIHdyaXRlbCh2YWx1ZSwgbWRwLT5iYXNlICsgb2Zmc2V0KQorI2RlZmluZSBtZHBfcmVhZGwobWRwLCBvZmZzZXQpIHJlYWRsKG1kcC0+YmFzZSArIG9mZnNldCkKKworI2RlZmluZSBNRFBfU1lOQ19DT05GSUdfMCAgICAgICAgICAgICAgICAoMHgwMDAwMCkKKyNkZWZpbmUgTURQX1NZTkNfQ09ORklHXzEgICAgICAgICAgICAgICAgKDB4MDAwMDQpCisjZGVmaW5lIE1EUF9TWU5DX0NPTkZJR18yICAgICAgICAgICAgICAgICgweDAwMDA4KQorI2RlZmluZSBNRFBfU1lOQ19TVEFUVVNfMCAgICAgICAgICAgICAgICAoMHgwMDAwYykKKyNkZWZpbmUgTURQX1NZTkNfU1RBVFVTXzEgICAgICAgICAgICAgICAgKDB4MDAwMTApCisjZGVmaW5lIE1EUF9TWU5DX1NUQVRVU18yICAgICAgICAgICAgICAgICgweDAwMDE0KQorI2RlZmluZSBNRFBfU1lOQ19USFJFU0hfMCAgICAgICAgICAgICAgICAoMHgwMDAxOCkKKyNkZWZpbmUgTURQX1NZTkNfVEhSRVNIXzEgICAgICAgICAgICAgICAgKDB4MDAwMWMpCisjZGVmaW5lIE1EUF9JTlRSX0VOQUJMRSAgICAgICAgICAgICAgICAgICgweDAwMDIwKQorI2RlZmluZSBNRFBfSU5UUl9TVEFUVVMgICAgICAgICAgICAgICAgICAoMHgwMDAyNCkKKyNkZWZpbmUgTURQX0lOVFJfQ0xFQVIgICAgICAgICAgICAgICAgICAgKDB4MDAwMjgpCisjZGVmaW5lIE1EUF9ESVNQTEFZMF9TVEFSVCAgICAgICAgICAgICAgICgweDAwMDMwKQorI2RlZmluZSBNRFBfRElTUExBWTFfU1RBUlQgICAgICAgICAgICAgICAoMHgwMDAzNCkKKyNkZWZpbmUgTURQX0RJU1BMQVlfU1RBVFVTICAgICAgICAgICAgICAgKDB4MDAwMzgpCisjZGVmaW5lIE1EUF9FQkkyX0xDRDAgICAgICAgICAgICAgICAgICAgICgweDAwMDNjKQorI2RlZmluZSBNRFBfRUJJMl9MQ0QxICAgICAgICAgICAgICAgICAgICAoMHgwMDA0MCkKKyNkZWZpbmUgTURQX0RJU1BMQVkwX0FERFIgICAgICAgICAgICAgICAgKDB4MDAwNTQpCisjZGVmaW5lIE1EUF9ESVNQTEFZMV9BRERSICAgICAgICAgICAgICAgICgweDAwMDU4KQorI2RlZmluZSBNRFBfRUJJMl9QT1JUTUFQX01PREUgICAgICAgICAgICAoMHgwMDA1YykKKyNkZWZpbmUgTURQX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwNjApCisjZGVmaW5lIE1EUF9UVl9PVVRfU1RBVFVTICAgICAgICAgICAgICAgICgweDAwMDY0KQorI2RlZmluZSBNRFBfSFdfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAoMHgwMDA3MCkKKyNkZWZpbmUgTURQX1NXX1JFU0VUICAgICAgICAgICAgICAgICAgICAgKDB4MDAwNzQpCisjZGVmaW5lIE1EUF9BWElfRVJST1JfTUFTVEVSX1NUT1AgICAgICAgICgweDAwMDc4KQorI2RlZmluZSBNRFBfU0VMX0NMS19PUl9IQ0xLX1RFU1RfQlVTICAgICAoMHgwMDA3YykKKyNkZWZpbmUgTURQX1BSSU1BUllfVlNZTkNfT1VUX0NUUkwgICAgICAgKDB4MDAwODApCisjZGVmaW5lIE1EUF9TRUNPTkRBUllfVlNZTkNfT1VUX0NUUkwgICAgICgweDAwMDg0KQorI2RlZmluZSBNRFBfRVhURVJOQUxfVlNZTkNfT1VUX0NUUkwgICAgICAoMHgwMDA4OCkKKyNkZWZpbmUgTURQX1ZTWU5DX0NUUkwgICAgICAgICAgICAgICAgICAgKDB4MDAwOGMpCisjZGVmaW5lIE1EUF9DR0NfRU4gICAgICAgICAgICAgICAgICAgICAgICgweDAwMTAwKQorI2RlZmluZSBNRFBfQ01EX1NUQVRVUyAgICAgICAgICAgICAgICAgICAoMHgxMDAwOCkKKyNkZWZpbmUgTURQX1BST0ZJTEVfRU4gICAgICAgICAgICAgICAgICAgKDB4MTAwMTApCisjZGVmaW5lIE1EUF9QUk9GSUxFX0NPVU5UICAgICAgICAgICAgICAgICgweDEwMDE0KQorI2RlZmluZSBNRFBfRE1BX1NUQVJUICAgICAgICAgICAgICAgICAgICAoMHgxMDA0NCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQwICAgICAgICAgICAgKDB4MTAxMDApCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMSAgICAgICAgICAgICgweDEwMTA0KQorI2RlZmluZSBNRFBfQ09NTUFORF9DT05GSUcgICAgICAgICAgICAgICAoMHgxMDEwNCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyICAgICAgICAgICAgKDB4MTAxMDgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMyAgICAgICAgICAgICgweDEwMTBjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDQgICAgICAgICAgICAoMHgxMDExMCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ2ICAgICAgICAgICAgKDB4MTAxMTgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENyAgICAgICAgICAgICgweDEwMTFjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDggICAgICAgICAgICAoMHgxMDEyMCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ5ICAgICAgICAgICAgKDB4MTAxMjQpCisjZGVmaW5lIE1EUF9QUFBfU09VUkNFX0NPTkZJRyAgICAgICAgICAgICgweDEwMTI0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDEwICAgICAgICAgICAoMHgxMDEyOCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQxMSAgICAgICAgICAgKDB4MTAxMmMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMTIgICAgICAgICAgICgweDEwMTMwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDEzICAgICAgICAgICAoMHgxMDEzNCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQxNCAgICAgICAgICAgKDB4MTAxMzgpCisjZGVmaW5lIE1EUF9QUFBfT1BFUkFUSU9OX0NPTkZJRyAgICAgICAgICgweDEwMTM4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDE1ICAgICAgICAgICAoMHgxMDEzYykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQxNiAgICAgICAgICAgKDB4MTAxNDApCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMTcgICAgICAgICAgICgweDEwMTQ0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDE4ICAgICAgICAgICAoMHgxMDE0OCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQxOSAgICAgICAgICAgKDB4MTAxNGMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMjAgICAgICAgICAgICgweDEwMTUwKQorI2RlZmluZSBNRFBfUFBQX0RFU1RJTkFUSU9OX0NPTkZJRyAgICAgICAoMHgxMDE1MCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyMSAgICAgICAgICAgKDB4MTAxNTQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMjIgICAgICAgICAgICgweDEwMTU4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDIzICAgICAgICAgICAoMHgxMDE1YykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyNCAgICAgICAgICAgKDB4MTAxNjApCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMjUgICAgICAgICAgICgweDEwMTY0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDI2ICAgICAgICAgICAoMHgxMDE2OCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyNyAgICAgICAgICAgKDB4MTAxNmMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMjkgICAgICAgICAgICgweDEwMTc0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDMwICAgICAgICAgICAoMHgxMDE3OCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQzMSAgICAgICAgICAgKDB4MTAxN2MpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMzIgICAgICAgICAgICgweDEwMTgwKQorI2RlZmluZSBNRFBfRE1BX0NPTkZJRyAgICAgICAgICAgICAgICAgICAoMHgxMDE4MCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQzMyAgICAgICAgICAgKDB4MTAxODQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMzQgICAgICAgICAgICgweDEwMTg4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDM1ICAgICAgICAgICAoMHgxMDE4YykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQzNyAgICAgICAgICAgKDB4MTAxOTQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMzkgICAgICAgICAgICgweDEwMTljKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDQwICAgICAgICAgICAoMHgxMDFhMCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ0MSAgICAgICAgICAgKDB4MTAxYTQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENDMgICAgICAgICAgICgweDEwMWFjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDQ2ICAgICAgICAgICAoMHgxMDFiOCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ0NyAgICAgICAgICAgKDB4MTAxYmMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENDggICAgICAgICAgICgweDEwMWMwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDQ5ICAgICAgICAgICAoMHgxMDFjNCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ1MCAgICAgICAgICAgKDB4MTAxYzgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENTEgICAgICAgICAgICgweDEwMWNjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDUyICAgICAgICAgICAoMHgxMDFkMCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ1MyAgICAgICAgICAgKDB4MTAxZDQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENTQgICAgICAgICAgICgweDEwMWQ4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDU1ICAgICAgICAgICAoMHgxMDFkYykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ1NiAgICAgICAgICAgKDB4MTAxZTApCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENTcgICAgICAgICAgICgweDEwMWU0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDU4ICAgICAgICAgICAoMHgxMDFlOCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ1OSAgICAgICAgICAgKDB4MTAxZWMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENjAgICAgICAgICAgICgweDEwMWYwKQorI2RlZmluZSBNRFBfVlNZTkNfVEhSRVNIT0xEICAgICAgICAgICAgICAoMHgxMDFmMCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ2MSAgICAgICAgICAgKDB4MTAxZjQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENjIgICAgICAgICAgICgweDEwMWY4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDYzICAgICAgICAgICAoMHgxMDFmYykKKyNkZWZpbmUgTURQX1RGRVRDSF9URVNUX01PREUgICAgICAgICAgICAgKDB4MjAwMDQpCisjZGVmaW5lIE1EUF9URkVUQ0hfU1RBVFVTICAgICAgICAgICAgICAgICgweDIwMDA4KQorI2RlZmluZSBNRFBfVEZFVENIX1RJTEVfQ09VTlQgICAgICAgICAgICAoMHgyMDAxMCkKKyNkZWZpbmUgTURQX1RGRVRDSF9GRVRDSF9DT1VOVCAgICAgICAgICAgKDB4MjAwMTQpCisjZGVmaW5lIE1EUF9URkVUQ0hfQ09OU1RBTlRfQ09MT1IgICAgICAgICgweDIwMDQwKQorI2RlZmluZSBNRFBfQ1NDX0JZUEFTUyAgICAgICAgICAgICAgICAgICAoMHg0MDAwNCkKKyNkZWZpbmUgTURQX1NDQUxFX0NPRUZGX0xTQiAgICAgICAgICAgICAgKDB4NWZmZmMpCisjZGVmaW5lIE1EUF9UVl9PVVRfQ1RMICAgICAgICAgICAgICAgICAgICgweGMwMDAwKQorI2RlZmluZSBNRFBfVFZfT1VUX0ZJUl9DT0VGRiAgICAgICAgICAgICAoMHhjMDAwNCkKKyNkZWZpbmUgTURQX1RWX09VVF9CVUZfQUREUiAgICAgICAgICAgICAgKDB4YzAwMDgpCisjZGVmaW5lIE1EUF9UVl9PVVRfQ0NfREFUQSAgICAgICAgICAgICAgICgweGMwMDBjKQorI2RlZmluZSBNRFBfVFZfT1VUX1NPQkVMICAgICAgICAgICAgICAgICAoMHhjMDAxMCkKKyNkZWZpbmUgTURQX1RWX09VVF9ZX0NMQU1QICAgICAgICAgICAgICAgKDB4YzAwMTgpCisjZGVmaW5lIE1EUF9UVl9PVVRfQ0JfQ0xBTVAgICAgICAgICAgICAgICgweGMwMDFjKQorI2RlZmluZSBNRFBfVFZfT1VUX0NSX0NMQU1QICAgICAgICAgICAgICAoMHhjMDAyMCkKKyNkZWZpbmUgTURQX1RFU1RfTU9ERV9DTEsgICAgICAgICAgICAgICAgKDB4ZDAwMDApCisjZGVmaW5lIE1EUF9URVNUX01JU1JfUkVTRVRfQ0xLICAgICAgICAgICgweGQwMDA0KQorI2RlZmluZSBNRFBfVEVTVF9FWFBPUlRfTUlTUl9DTEsgICAgICAgICAoMHhkMDAwOCkKKyNkZWZpbmUgTURQX1RFU1RfTUlTUl9DVVJSX1ZBTF9DTEsgICAgICAgKDB4ZDAwMGMpCisjZGVmaW5lIE1EUF9URVNUX01PREVfSENMSyAgICAgICAgICAgICAgICgweGQwMTAwKQorI2RlZmluZSBNRFBfVEVTVF9NSVNSX1JFU0VUX0hDTEsgICAgICAgICAoMHhkMDEwNCkKKyNkZWZpbmUgTURQX1RFU1RfRVhQT1JUX01JU1JfSENMSyAgICAgICAgKDB4ZDAxMDgpCisjZGVmaW5lIE1EUF9URVNUX01JU1JfQ1VSUl9WQUxfSENMSyAgICAgICgweGQwMTBjKQorI2RlZmluZSBNRFBfVEVTVF9NT0RFX0RDTEsgICAgICAgICAgICAgICAoMHhkMDIwMCkKKyNkZWZpbmUgTURQX1RFU1RfTUlTUl9SRVNFVF9EQ0xLICAgICAgICAgKDB4ZDAyMDQpCisjZGVmaW5lIE1EUF9URVNUX0VYUE9SVF9NSVNSX0RDTEsgICAgICAgICgweGQwMjA4KQorI2RlZmluZSBNRFBfVEVTVF9NSVNSX0NVUlJfVkFMX0RDTEsgICAgICAoMHhkMDIwYykKKyNkZWZpbmUgTURQX1RFU1RfQ0FQVFVSRURfRENMSyAgICAgICAgICAgKDB4ZDAyMTApCisjZGVmaW5lIE1EUF9URVNUX01JU1JfQ0FQVF9WQUxfRENMSyAgICAgICgweGQwMjE0KQorI2RlZmluZSBNRFBfTENEQ19DVEwgICAgICAgICAgICAgICAgICAgICAoMHhlMDAwMCkKKyNkZWZpbmUgTURQX0xDRENfSFNZTkNfQ1RMICAgICAgICAgICAgICAgKDB4ZTAwMDQpCisjZGVmaW5lIE1EUF9MQ0RDX1ZTWU5DX0NUTCAgICAgICAgICAgICAgICgweGUwMDA4KQorI2RlZmluZSBNRFBfTENEQ19BQ1RJVkVfSENUTCAgICAgICAgICAgICAoMHhlMDAwYykKKyNkZWZpbmUgTURQX0xDRENfQUNUSVZFX1ZDVEwgICAgICAgICAgICAgKDB4ZTAwMTApCisjZGVmaW5lIE1EUF9MQ0RDX0JPUkRFUl9DTFIgICAgICAgICAgICAgICgweGUwMDE0KQorI2RlZmluZSBNRFBfTENEQ19IX0JMQU5LICAgICAgICAgICAgICAgICAoMHhlMDAxOCkKKyNkZWZpbmUgTURQX0xDRENfVl9CTEFOSyAgICAgICAgICAgICAgICAgKDB4ZTAwMWMpCisjZGVmaW5lIE1EUF9MQ0RDX1VOREVSRkxPV19DTFIgICAgICAgICAgICgweGUwMDIwKQorI2RlZmluZSBNRFBfTENEQ19IU1lOQ19TS0VXICAgICAgICAgICAgICAoMHhlMDAyNCkKKyNkZWZpbmUgTURQX0xDRENfVEVTVF9DVEwgICAgICAgICAgICAgICAgKDB4ZTAwMjgpCisjZGVmaW5lIE1EUF9MQ0RDX0xJTkVfSVJRICAgICAgICAgICAgICAgICgweGUwMDJjKQorI2RlZmluZSBNRFBfTENEQ19DVExfUE9MQVJJVFkgICAgICAgICAgICAoMHhlMDAzMCkKKyNkZWZpbmUgTURQX0xDRENfRE1BX0NPTkZJRyAgICAgICAgICAgICAgKDB4ZTEwMDApCisjZGVmaW5lIE1EUF9MQ0RDX0RNQV9TSVpFICAgICAgICAgICAgICAgICgweGUxMDA0KQorI2RlZmluZSBNRFBfTENEQ19ETUFfSUJVRl9BRERSICAgICAgICAgICAoMHhlMTAwOCkKKyNkZWZpbmUgTURQX0xDRENfRE1BX0lCVUZfWV9TVFJJREUgICAgICAgKDB4ZTEwMGMpCisKKworI2RlZmluZSBNRFBfRE1BMl9URVJNIDB4MQorI2RlZmluZSBNRFBfRE1BM19URVJNIDB4MgorI2RlZmluZSBNRFBfUFBQX1RFUk0gMHgzCisKKy8qIE1EUF9JTlRSX0VOQUJMRSAqLworI2RlZmluZSBETDBfUk9JX0RPTkUgICAgICAgICAgICgxPDwwKQorI2RlZmluZSBETDFfUk9JX0RPTkUgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBETDBfRE1BMl9URVJNX0RPTkUgICAgICgxPDwyKQorI2RlZmluZSBETDFfRE1BMl9URVJNX0RPTkUgICAgICgxPDwzKQorI2RlZmluZSBETDBfUFBQX1RFUk1fRE9ORSAgICAgICgxPDw0KQorI2RlZmluZSBETDFfUFBQX1RFUk1fRE9ORSAgICAgICgxPDw1KQorI2RlZmluZSBUVl9PVVRfRE1BM19ET05FICAgICAgICgxPDw2KQorI2RlZmluZSBUVl9FTkNfVU5ERVJSVU4gICAgICAgICgxPDw3KQorI2RlZmluZSBETDBfRkVUQ0hfRE9ORSAgICAgICAgICgxPDwxMSkKKyNkZWZpbmUgREwxX0ZFVENIX0RPTkUgICAgICAgICAoMTw8MTIpCisKKyNkZWZpbmUgTURQX1BQUF9CVVNZX1NUQVRVUyAoREwwX1JPSV9ET05FfCBcCisJCQkgICBETDFfUk9JX0RPTkV8IFwKKwkJCSAgIERMMF9QUFBfVEVSTV9ET05FfCBcCisJCQkgICBETDFfUFBQX1RFUk1fRE9ORSkKKworI2RlZmluZSBNRFBfQU5ZX0lOVFJfTUFTSyAoREwwX1JPSV9ET05FfCBcCisJCQkgICBETDFfUk9JX0RPTkV8IFwKKwkJCSAgIERMMF9ETUEyX1RFUk1fRE9ORXwgXAorCQkJICAgREwxX0RNQTJfVEVSTV9ET05FfCBcCisJCQkgICBETDBfUFBQX1RFUk1fRE9ORXwgXAorCQkJICAgREwxX1BQUF9URVJNX0RPTkV8IFwKKwkJCSAgIERMMF9GRVRDSF9ET05FfCBcCisJCQkgICBETDFfRkVUQ0hfRE9ORXwgXAorCQkJICAgVFZfRU5DX1VOREVSUlVOKQorCisjZGVmaW5lIE1EUF9UT1BfTFVNQSAgICAgICAxNgorI2RlZmluZSBNRFBfVE9QX0NIUk9NQSAgICAgMAorI2RlZmluZSBNRFBfQk9UVE9NX0xVTUEgICAgMTkKKyNkZWZpbmUgTURQX0JPVFRPTV9DSFJPTUEgIDMKKyNkZWZpbmUgTURQX0xFRlRfTFVNQSAgICAgIDIyCisjZGVmaW5lIE1EUF9MRUZUX0NIUk9NQSAgICA2CisjZGVmaW5lIE1EUF9SSUdIVF9MVU1BICAgICAyNQorI2RlZmluZSBNRFBfUklHSFRfQ0hST01BICAgOQorCisjZGVmaW5lIENMUl9HIDB4MAorI2RlZmluZSBDTFJfQiAweDEKKyNkZWZpbmUgQ0xSX1IgMHgyCisjZGVmaW5lIENMUl9BTFBIQSAweDMKKworI2RlZmluZSBDTFJfWSAgQ0xSX0cKKyNkZWZpbmUgQ0xSX0NCIENMUl9CCisjZGVmaW5lIENMUl9DUiBDTFJfUgorCisvKiBmcm9tIGxzYiB0byBtc2IgKi8KKyNkZWZpbmUgTURQX0dFVF9QQUNLX1BBVFRFUk4oYSwgeCwgeSwgeiwgYml0KSBcCisJKCgoYSk8PChiaXQqMykpfCgoeCk8PChiaXQqMikpfCgoeSk8PGJpdCl8KHopKQorCisvKiBNRFBfU1lOQ19DT05GSUdfMC8xLzIgKi8KKyNkZWZpbmUgTURQX1NZTkNGR19IR1RfTE9DIDIyCisjZGVmaW5lIE1EUF9TWU5DRkdfVlNZTkNfRVhUX0VOICgxPDwyMSkKKyNkZWZpbmUgTURQX1NZTkNGR19WU1lOQ19JTlRfRU4gKDE8PDIwKQorCisvKiBNRFBfU1lOQ19USFJFU0hfMCAqLworI2RlZmluZSBNRFBfUFJJTV9CRUxPV19MT0MgMAorI2RlZmluZSBNRFBfUFJJTV9BQk9WRV9MT0MgOAorCisvKiBNRFBfe1BSSU1BUlksU0VDT05EQVJZLEVYVEVSTkFMfV9WU1lOQ19PVVRfQ1JMICovCisjZGVmaW5lIFZTWU5DX1BVTFNFX0VOICgxPDwzMSkKKyNkZWZpbmUgVlNZTkNfUFVMU0VfSU5WICgxPDwzMCkKKworLyogTURQX1ZTWU5DX0NUUkwgKi8KKyNkZWZpbmUgRElTUDBfVlNZTkNfTUFQX1ZTWU5DMCAwCisjZGVmaW5lIERJU1AwX1ZTWU5DX01BUF9WU1lOQzEgKDE8PDApCisjZGVmaW5lIERJU1AwX1ZTWU5DX01BUF9WU1lOQzIgKCgxPDwwKXwoMTw8MSkpCisKKyNkZWZpbmUgRElTUDFfVlNZTkNfTUFQX1ZTWU5DMCAwCisjZGVmaW5lIERJU1AxX1ZTWU5DX01BUF9WU1lOQzEgKDE8PDIpCisjZGVmaW5lIERJU1AxX1ZTWU5DX01BUF9WU1lOQzIgKCgxPDwyKXwoMTw8MykpCisKKyNkZWZpbmUgUFJJTUFSWV9MQ0RfU1lOQ19FTiAoMTw8NCkKKyNkZWZpbmUgUFJJTUFSWV9MQ0RfU1lOQ19ESVNBQkxFIDAKKworI2RlZmluZSBTRUNPTkRBUllfTENEX1NZTkNfRU4gKDE8PDUpCisjZGVmaW5lIFNFQ09OREFSWV9MQ0RfU1lOQ19ESVNBQkxFIDAKKworI2RlZmluZSBFWFRFUk5BTF9MQ0RfU1lOQ19FTiAoMTw8NikKKyNkZWZpbmUgRVhURVJOQUxfTENEX1NZTkNfRElTQUJMRSAwCisKKy8qIE1EUF9WU1lOQ19USFJFU0hPTEQgLyBNRFBfRlVMTF9CWVBBU1NfV09SRDYwICovCisjZGVmaW5lIFZTWU5DX1RIUkVTSE9MRF9BQk9WRV9MT0MgMAorI2RlZmluZSBWU1lOQ19USFJFU0hPTERfQkVMT1dfTE9DIDE2CisjZGVmaW5lIFZTWU5DX0FOVElfVEVBUl9FTiAoMTw8MzEpCisKKy8qIE1EUF9DT01NQU5EX0NPTkZJRyAvIE1EUF9GVUxMX0JZUEFTU19XT1JEMSAqLworI2RlZmluZSBNRFBfQ01EX0RCR0JVU19FTiAoMTw8MCkKKworLyogTURQX1BQUF9TT1VSQ0VfQ09ORklHIC8gTURQX0ZVTExfQllQQVNTX1dPUkQ5JjUzICovCisjZGVmaW5lIFBQUF9TUkNfQzBHXzhCSVQgKCgxPDwxKXwoMTw8MCkpCisjZGVmaW5lIFBQUF9TUkNfQzFCXzhCSVQgKCgxPDwzKXwoMTw8MikpCisjZGVmaW5lIFBQUF9TUkNfQzJSXzhCSVQgKCgxPDw1KXwoMTw8NCkpCisjZGVmaW5lIFBQUF9TUkNfQzNBXzhCSVQgKCgxPDw3KXwoMTw8NikpCisKKyNkZWZpbmUgUFBQX1NSQ19DMEdfNkJJVCAoMTw8MSkKKyNkZWZpbmUgUFBQX1NSQ19DMUJfNkJJVCAoMTw8MykKKyNkZWZpbmUgUFBQX1NSQ19DMlJfNkJJVCAoMTw8NSkKKworI2RlZmluZSBQUFBfU1JDX0MwR181QklUICgxPDwwKQorI2RlZmluZSBQUFBfU1JDX0MxQl81QklUICgxPDwyKQorI2RlZmluZSBQUFBfU1JDX0MyUl81QklUICgxPDw0KQorCisjZGVmaW5lIFBQUF9TUkNfQzNBTFBIQV9FTiAoMTw8OCkKKworI2RlZmluZSBQUFBfU1JDX0JQUF8xQllURVMgMAorI2RlZmluZSBQUFBfU1JDX0JQUF8yQllURVMgKDE8PDkpCisjZGVmaW5lIFBQUF9TUkNfQlBQXzNCWVRFUyAoMTw8MTApCisjZGVmaW5lIFBQUF9TUkNfQlBQXzRCWVRFUyAoKDE8PDEwKXwoMTw8OSkpCisKKyNkZWZpbmUgUFBQX1NSQ19CUFBfUk9JX09ERF9YICgxPDwxMSkKKyNkZWZpbmUgUFBQX1NSQ19CUFBfUk9JX09ERF9ZICgxPDwxMikKKyNkZWZpbmUgUFBQX1NSQ19JTlRFUkxWRF8yQ09NUE9ORU5UUyAoMTw8MTMpCisjZGVmaW5lIFBQUF9TUkNfSU5URVJMVkRfM0NPTVBPTkVOVFMgKDE8PDE0KQorI2RlZmluZSBQUFBfU1JDX0lOVEVSTFZEXzRDT01QT05FTlRTICgoMTw8MTQpfCgxPDwxMykpCisKKworLyogUkdCNjY2IHVucGFjayBmb3JtYXQKKyoqIFRJR0hUIG1lYW5zIFI2K0c2K0I2IHRvZ2V0aGVyCisqKiBMT09TRSBtZWFucyBSNisyICtHNisyKyBCNisyICh3aXRoIE1TQikKKyoqICAgICAgICAgIG9yIDIrUjYgKzIrRzYgKzIrQjYgKHdpdGggTFNCKQorKi8KKyNkZWZpbmUgUFBQX1NSQ19QQUNLX1RJR0hUICgxPDwxNykKKyNkZWZpbmUgUFBQX1NSQ19QQUNLX0xPT1NFIDAKKyNkZWZpbmUgUFBQX1NSQ19QQUNLX0FMSUdOX0xTQiAwCisjZGVmaW5lIFBQUF9TUkNfUEFDS19BTElHTl9NU0IgKDE8PDE4KQorCisjZGVmaW5lIFBQUF9TUkNfUExBTkVfSU5URVJMVkQgMAorI2RlZmluZSBQUFBfU1JDX1BMQU5FX1BTRVVET1BMTlIgKDE8PDIwKQorCisjZGVmaW5lIFBQUF9TUkNfV01WOV9NT0RFICgxPDwyMSkKKworLyogTURQX1BQUF9PUEVSQVRJT05fQ09ORklHIC8gTURQX0ZVTExfQllQQVNTX1dPUkQxNCAqLworI2RlZmluZSBQUFBfT1BfU0NBTEVfWF9PTiAoMTw8MCkKKyNkZWZpbmUgUFBQX09QX1NDQUxFX1lfT04gKDE8PDEpCisKKyNkZWZpbmUgUFBQX09QX0NPTlZFUlRfUkdCMllDQkNSIDAKKyNkZWZpbmUgUFBQX09QX0NPTlZFUlRfWUNCQ1IyUkdCICgxPDwyKQorI2RlZmluZSBQUFBfT1BfQ09OVkVSVF9PTiAoMTw8MykKKworI2RlZmluZSBQUFBfT1BfQ09OVkVSVF9NQVRSSVhfUFJJTUFSWSAwCisjZGVmaW5lIFBQUF9PUF9DT05WRVJUX01BVFJJWF9TRUNPTkRBUlkgKDE8PDQpCisKKyNkZWZpbmUgUFBQX09QX0xVVF9DMF9PTiAoMTw8NSkKKyNkZWZpbmUgUFBQX09QX0xVVF9DMV9PTiAoMTw8NikKKyNkZWZpbmUgUFBQX09QX0xVVF9DMl9PTiAoMTw8NykKKworLyogcm90YXRlIG9yIGJsZW5kIGVuYWJsZSAqLworI2RlZmluZSBQUFBfT1BfUk9UX09OICgxPDw4KQorCisjZGVmaW5lIFBQUF9PUF9ST1RfOTAgKDE8PDkpCisjZGVmaW5lIFBQUF9PUF9GTElQX0xSICgxPDwxMCkKKyNkZWZpbmUgUFBQX09QX0ZMSVBfVUQgKDE8PDExKQorCisjZGVmaW5lIFBQUF9PUF9CTEVORF9PTiAoMTw8MTIpCisKKyNkZWZpbmUgUFBQX09QX0JMRU5EX1NSQ1BJWEVMX0FMUEhBIDAKKyNkZWZpbmUgUFBQX09QX0JMRU5EX0RTVFBJWEVMX0FMUEhBICgxPDwxMykKKyNkZWZpbmUgUFBQX09QX0JMRU5EX0NPTlNUQU5UX0FMUEhBICgxPDwxNCkKKyNkZWZpbmUgUFBQX09QX0JMRU5EX1NSQ1BJWEVMX1RSQU5TUCAoKDE8PDEzKXwoMTw8MTQpKQorCisjZGVmaW5lIFBQUF9PUF9CTEVORF9BTFBIQV9CTEVORF9OT1JNQUwgMAorI2RlZmluZSBQUFBfT1BfQkxFTkRfQUxQSEFfQkxFTkRfUkVWRVJTRSAoMTw8MTUpCisKKyNkZWZpbmUgUFBQX09QX0RJVEhFUl9FTiAoMTw8MTYpCisKKyNkZWZpbmUgUFBQX09QX0NPTE9SX1NQQUNFX1JHQiAwCisjZGVmaW5lIFBQUF9PUF9DT0xPUl9TUEFDRV9ZQ0JDUiAoMTw8MTcpCisKKyNkZWZpbmUgUFBQX09QX1NSQ19DSFJPTUFfUkdCIDAKKyNkZWZpbmUgUFBQX09QX1NSQ19DSFJPTUFfSDJWMSAoMTw8MTgpCisjZGVmaW5lIFBQUF9PUF9TUkNfQ0hST01BX0gxVjIgKDE8PDE5KQorI2RlZmluZSBQUFBfT1BfU1JDX0NIUk9NQV80MjAgKCgxPDwxOCl8KDE8PDE5KSkKKyNkZWZpbmUgUFBQX09QX1NSQ19DSFJPTUFfQ09TSVRFIDAKKyNkZWZpbmUgUFBQX09QX1NSQ19DSFJPTUFfT0ZGU0lURSAoMTw8MjApCisKKyNkZWZpbmUgUFBQX09QX0RTVF9DSFJPTUFfUkdCIDAKKyNkZWZpbmUgUFBQX09QX0RTVF9DSFJPTUFfSDJWMSAoMTw8MjEpCisjZGVmaW5lIFBQUF9PUF9EU1RfQ0hST01BX0gxVjIgKDE8PDIyKQorI2RlZmluZSBQUFBfT1BfRFNUX0NIUk9NQV80MjAgKCgxPDwyMSl8KDE8PDIyKSkKKyNkZWZpbmUgUFBQX09QX0RTVF9DSFJPTUFfQ09TSVRFIDAKKyNkZWZpbmUgUFBQX09QX0RTVF9DSFJPTUFfT0ZGU0lURSAoMTw8MjMpCisKKyNkZWZpbmUgUFBQX0JMRU5EX0FMUEhBX1RSQU5TUCAoMTw8MjQpCisKKyNkZWZpbmUgUFBQX09QX0JHX0NIUk9NQV9SR0IgMAorI2RlZmluZSBQUFBfT1BfQkdfQ0hST01BX0gyVjEgKDE8PDI1KQorI2RlZmluZSBQUFBfT1BfQkdfQ0hST01BX0gxVjIgKDE8PDI2KQorI2RlZmluZSBQUFBfT1BfQkdfQ0hST01BXzQyMCAoKDE8PDI1KXwoMTw8MjYpKQorI2RlZmluZSBQUFBfT1BfQkdfQ0hST01BX1NJVEVfQ09TSVRFIDAKKyNkZWZpbmUgUFBQX09QX0JHX0NIUk9NQV9TSVRFX09GRlNJVEUgKDE8PDI3KQorCisvKiBNRFBfUFBQX0RFU1RJTkFUSU9OX0NPTkZJRyAvIE1EUF9GVUxMX0JZUEFTU19XT1JEMjAgKi8KKyNkZWZpbmUgUFBQX0RTVF9DMEdfOEJJVCAoKDE8PDApfCgxPDwxKSkKKyNkZWZpbmUgUFBQX0RTVF9DMUJfOEJJVCAoKDE8PDMpfCgxPDwyKSkKKyNkZWZpbmUgUFBQX0RTVF9DMlJfOEJJVCAoKDE8PDUpfCgxPDw0KSkKKyNkZWZpbmUgUFBQX0RTVF9DM0FfOEJJVCAoKDE8PDcpfCgxPDw2KSkKKworI2RlZmluZSBQUFBfRFNUX0MwR182QklUICgxPDwxKQorI2RlZmluZSBQUFBfRFNUX0MxQl82QklUICgxPDwzKQorI2RlZmluZSBQUFBfRFNUX0MyUl82QklUICgxPDw1KQorCisjZGVmaW5lIFBQUF9EU1RfQzBHXzVCSVQgKDE8PDApCisjZGVmaW5lIFBQUF9EU1RfQzFCXzVCSVQgKDE8PDIpCisjZGVmaW5lIFBQUF9EU1RfQzJSXzVCSVQgKDE8PDQpCisKKyNkZWZpbmUgUFBQX0RTVF9DM0FfOEJJVCAoKDE8PDcpfCgxPDw2KSkKKyNkZWZpbmUgUFBQX0RTVF9DM0FMUEhBX0VOICgxPDw4KQorCisjZGVmaW5lIFBQUF9EU1RfSU5URVJMVkRfMkNPTVBPTkVOVFMgKDE8PDkpCisjZGVmaW5lIFBQUF9EU1RfSU5URVJMVkRfM0NPTVBPTkVOVFMgKDE8PDEwKQorI2RlZmluZSBQUFBfRFNUX0lOVEVSTFZEXzRDT01QT05FTlRTICgoMTw8MTApfCgxPDw5KSkKKyNkZWZpbmUgUFBQX0RTVF9JTlRFUkxWRF82Q09NUE9ORU5UUyAoKDE8PDExKXwoMTw8OSkpCisKKyNkZWZpbmUgUFBQX0RTVF9QQUNLX0xPT1NFIDAKKyNkZWZpbmUgUFBQX0RTVF9QQUNLX1RJR0hUICgxPDwxMykKKyNkZWZpbmUgUFBQX0RTVF9QQUNLX0FMSUdOX0xTQiAwCisjZGVmaW5lIFBQUF9EU1RfUEFDS19BTElHTl9NU0IgKDE8PDE0KQorCisjZGVmaW5lIFBQUF9EU1RfT1VUX1NFTF9BWEkgMAorI2RlZmluZSBQUFBfRFNUX09VVF9TRUxfTURESSAoMTw8MTUpCisKKyNkZWZpbmUgUFBQX0RTVF9CUFBfMkJZVEVTICgxPDwxNikKKyNkZWZpbmUgUFBQX0RTVF9CUFBfM0JZVEVTICgxPDwxNykKKyNkZWZpbmUgUFBQX0RTVF9CUFBfNEJZVEVTICgoMTw8MTcpfCgxPDwxNikpCisKKyNkZWZpbmUgUFBQX0RTVF9QTEFORV9JTlRFUkxWRCAwCisjZGVmaW5lIFBQUF9EU1RfUExBTkVfUExBTkFSICgxPDwxOCkKKyNkZWZpbmUgUFBQX0RTVF9QTEFORV9QU0VVRE9QTE5SICgxPDwxOSkKKworI2RlZmluZSBQUFBfRFNUX1RPX1RWICgxPDwyMCkKKworI2RlZmluZSBQUFBfRFNUX01ERElfUFJJTUFSWSAwCisjZGVmaW5lIFBQUF9EU1RfTURESV9TRUNPTkRBUlkgKDE8PDIxKQorI2RlZmluZSBQUFBfRFNUX01ERElfRVhURVJOQUwgKDE8PDIyKQorCisvKiBpbWFnZSBjb25maWd1cmF0aW9ucyBieSBpbWFnZSB0eXBlICovCisjZGVmaW5lIFBQUF9DRkdfTURQX1JHQl81NjUoZGlyKSAgICAgICAoUFBQXyMjZGlyIyNfQzJSXzVCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MwR182QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMUJfNUJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQlBQXzJCWVRFUyB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfSU5URVJMVkRfM0NPTVBPTkVOVFMgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfVElHSFQgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfQUxJR05fTFNCIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QTEFORV9JTlRFUkxWRCkKKworI2RlZmluZSBQUFBfQ0ZHX01EUF9SR0JfODg4KGRpcikgICAgICAgKFBQUF8jI2RpciMjX0MyUl84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMEdfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzFCXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0JQUF8zQllURVMgfCBcCisJCQkJCVBQUF8jI2RpciMjX0lOVEVSTFZEXzNDT01QT05FTlRTIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QQUNLX1RJR0hUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QQUNLX0FMSUdOX0xTQiB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUExBTkVfSU5URVJMVkQpCisKKyNkZWZpbmUgUFBQX0NGR19NRFBfQVJHQl84ODg4KGRpcikgICAgIChQUFBfIyNkaXIjI19DMlJfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzBHXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MxQl84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DM0FfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzNBTFBIQV9FTiB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQlBQXzRCWVRFUyB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfSU5URVJMVkRfNENPTVBPTkVOVFMgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfVElHSFQgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfQUxJR05fTFNCIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QTEFORV9JTlRFUkxWRCkKKworI2RlZmluZSBQUFBfQ0ZHX01EUF9YUkdCXzg4ODgoZGlyKSBQUFBfQ0ZHX01EUF9BUkdCXzg4ODgoZGlyKQorI2RlZmluZSBQUFBfQ0ZHX01EUF9SR0JBXzg4ODgoZGlyKSBQUFBfQ0ZHX01EUF9BUkdCXzg4ODgoZGlyKQorI2RlZmluZSBQUFBfQ0ZHX01EUF9CR1JBXzg4ODgoZGlyKSBQUFBfQ0ZHX01EUF9BUkdCXzg4ODgoZGlyKQorCisjZGVmaW5lIFBQUF9DRkdfTURQX1lfQ0JDUl9IMlYyKGRpcikgICAoUFBQXyMjZGlyIyNfQzJSXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MwR184QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMUJfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzNBXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0JQUF8yQllURVMgfCBcCisJCQkJCVBQUF8jI2RpciMjX0lOVEVSTFZEXzJDT01QT05FTlRTIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QQUNLX1RJR0hUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QQUNLX0FMSUdOX0xTQiB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUExBTkVfUFNFVURPUExOUikKKworI2RlZmluZSBQUFBfQ0ZHX01EUF9ZX0NSQ0JfSDJWMihkaXIpCVBQUF9DRkdfTURQX1lfQ0JDUl9IMlYyKGRpcikKKworI2RlZmluZSBQUFBfQ0ZHX01EUF9ZQ1JZQ0JfSDJWMShkaXIpICAgKFBQUF8jI2RpciMjX0MyUl84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMEdfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzFCXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MzQV84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19CUFBfMkJZVEVTIHwgXAorCQkJCQlQUFBfIyNkaXIjI19JTlRFUkxWRF80Q09NUE9ORU5UUyB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19USUdIVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19BTElHTl9MU0IgfFwKKwkJCQkJUFBQXyMjZGlyIyNfUExBTkVfSU5URVJMVkQpCisKKyNkZWZpbmUgUFBQX0NGR19NRFBfWV9DQkNSX0gyVjEoZGlyKSAgIChQUFBfIyNkaXIjI19DMlJfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzBHXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MxQl84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DM0FfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQlBQXzJCWVRFUyB8ICAgXAorCQkJCQlQUFBfIyNkaXIjI19JTlRFUkxWRF8yQ09NUE9ORU5UUyB8ICBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfVElHSFQgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfQUxJR05fTFNCIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QTEFORV9QU0VVRE9QTE5SKQorCisjZGVmaW5lIFBQUF9DRkdfTURQX1lfQ1JDQl9IMlYxKGRpcikJUFBQX0NGR19NRFBfWV9DQkNSX0gyVjEoZGlyKQorCisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1JHQl81NjUgXAorCU1EUF9HRVRfUEFDS19QQVRURVJOKDAsIENMUl9SLCBDTFJfRywgQ0xSX0IsIDgpCisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1JHQl84ODggUFBQX1BBQ0tfUEFUVEVSTl9NRFBfUkdCXzU2NQorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9YUkdCXzg4ODggXAorCU1EUF9HRVRfUEFDS19QQVRURVJOKENMUl9BTFBIQSwgQ0xSX1IsIENMUl9HLCBDTFJfQiwgOCkKKyNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfQVJHQl84ODg4IFBQUF9QQUNLX1BBVFRFUk5fTURQX1hSR0JfODg4OAorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9SR0JBXzg4ODggXAorCU1EUF9HRVRfUEFDS19QQVRURVJOKENMUl9BTFBIQSwgQ0xSX0IsIENMUl9HLCBDTFJfUiwgOCkKKyNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfQkdSQV84ODg4IFwKKwlNRFBfR0VUX1BBQ0tfUEFUVEVSTihDTFJfQUxQSEEsIENMUl9SLCBDTFJfRywgQ0xSX0IsIDgpCisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1lfQ0JDUl9IMlYxIFwKKwlNRFBfR0VUX1BBQ0tfUEFUVEVSTigwLCAwLCBDTFJfQ0IsIENMUl9DUiwgOCkKKyNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfWV9DQkNSX0gyVjIgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfWV9DQkNSX0gyVjEKKyNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfWV9DUkNCX0gyVjEgXAorCU1EUF9HRVRfUEFDS19QQVRURVJOKDAsIDAsIENMUl9DUiwgQ0xSX0NCLCA4KQorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9ZX0NSQ0JfSDJWMiBQUFBfUEFDS19QQVRURVJOX01EUF9ZX0NSQ0JfSDJWMQorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9ZQ1JZQ0JfSDJWMSBcCisJTURQX0dFVF9QQUNLX1BBVFRFUk4oQ0xSX1ksIENMUl9SLCBDTFJfWSwgQ0xSX0IsIDgpCisKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9SR0JfNTY1KGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX1JHQgorI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1JHQl84ODgoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfUkdCCisjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfWFJHQl84ODg4KGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX1JHQgorI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX0FSR0JfODg4OChkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV9SR0IKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9SR0JBXzg4ODgoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfUkdCCisjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfQkdSQV84ODg4KGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX1JHQgorI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1lfQ0JDUl9IMlYxKGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX0gyVjEKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9ZX0NCQ1JfSDJWMihkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV80MjAKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9ZX0NSQ0JfSDJWMShkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV9IMlYxCisjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfWV9DUkNCX0gyVjIoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfNDIwCisjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfWUNSWUNCX0gyVjEoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfSDJWMQorCisvKiBIZWxwZnVsIGFycmF5IGdlbmVyYXRpb24gbWFjcm9zICovCisjZGVmaW5lIFBQUF9BUlJBWTAobmFtZSkgXAorCVtNRFBfUkdCXzU2NV0gPSBQUFBfIyNuYW1lIyNfTURQX1JHQl81NjUsXAorCVtNRFBfUkdCXzg4OF0gPSBQUFBfIyNuYW1lIyNfTURQX1JHQl84ODgsXAorCVtNRFBfWFJHQl84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfWFJHQl84ODg4LFwKKwlbTURQX0FSR0JfODg4OF0gPSBQUFBfIyNuYW1lIyNfTURQX0FSR0JfODg4OCxcCisJW01EUF9SR0JBXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9SR0JBXzg4ODgsXAorCVtNRFBfQkdSQV84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfQkdSQV84ODg4LFwKKwlbTURQX1lfQ0JDUl9IMlYxXSA9IFBQUF8jI25hbWUjI19NRFBfWV9DQkNSX0gyVjEsXAorCVtNRFBfWV9DQkNSX0gyVjJdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NCQ1JfSDJWMixcCisJW01EUF9ZX0NSQ0JfSDJWMV0gPSBQUFBfIyNuYW1lIyNfTURQX1lfQ1JDQl9IMlYxLFwKKwlbTURQX1lfQ1JDQl9IMlYyXSA9IFBQUF8jI25hbWUjI19NRFBfWV9DUkNCX0gyVjIsXAorCVtNRFBfWUNSWUNCX0gyVjFdID0gUFBQXyMjbmFtZSMjX01EUF9ZQ1JZQ0JfSDJWMQorCisjZGVmaW5lIFBQUF9BUlJBWTEobmFtZSwgZGlyKSBcCisJW01EUF9SR0JfNTY1XSA9IFBQUF8jI25hbWUjI19NRFBfUkdCXzU2NShkaXIpLFwKKwlbTURQX1JHQl84ODhdID0gUFBQXyMjbmFtZSMjX01EUF9SR0JfODg4KGRpciksXAorCVtNRFBfWFJHQl84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfWFJHQl84ODg4KGRpciksXAorCVtNRFBfQVJHQl84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfQVJHQl84ODg4KGRpciksXAorCVtNRFBfUkdCQV84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfUkdCQV84ODg4KGRpciksXAorCVtNRFBfQkdSQV84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfQkdSQV84ODg4KGRpciksXAorCVtNRFBfWV9DQkNSX0gyVjFdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NCQ1JfSDJWMShkaXIpLFwKKwlbTURQX1lfQ0JDUl9IMlYyXSA9IFBQUF8jI25hbWUjI19NRFBfWV9DQkNSX0gyVjIoZGlyKSxcCisJW01EUF9ZX0NSQ0JfSDJWMV0gPSBQUFBfIyNuYW1lIyNfTURQX1lfQ1JDQl9IMlYxKGRpciksXAorCVtNRFBfWV9DUkNCX0gyVjJdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NSQ0JfSDJWMihkaXIpLFwKKwlbTURQX1lDUllDQl9IMlYxXSA9IFBQUF8jI25hbWUjI19NRFBfWUNSWUNCX0gyVjEoZGlyKQorCisjZGVmaW5lIElTX1lDUkNCKGltZykgKChpbWcgPT0gTURQX1lfQ1JDQl9IMlYyKSB8IChpbWcgPT0gTURQX1lfQ0JDUl9IMlYyKSB8IFwKKwkJICAgICAgIChpbWcgPT0gTURQX1lfQ1JDQl9IMlYxKSB8IChpbWcgPT0gTURQX1lfQ0JDUl9IMlYxKSB8IFwKKwkJICAgICAgIChpbWcgPT0gTURQX1lDUllDQl9IMlYxKSkKKyNkZWZpbmUgSVNfUkdCKGltZykgKChpbWcgPT0gTURQX1JHQl81NjUpIHwgKGltZyA9PSBNRFBfUkdCXzg4OCkgfCBcCisJCSAgICAgKGltZyA9PSBNRFBfQVJHQl84ODg4KSB8IChpbWcgPT0gTURQX1JHQkFfODg4OCkgfCBcCisJCSAgICAgKGltZyA9PSBNRFBfWFJHQl84ODg4KSB8IChpbWcgPT0gTURQX0JHUkFfODg4OCkpCisjZGVmaW5lIEhBU19BTFBIQShpbWcpICgoaW1nID09IE1EUF9BUkdCXzg4ODgpIHwgKGltZyA9PSBNRFBfUkdCQV84ODg4KSB8IFwKKwkJCShpbWcgPT0gTURQX0JHUkFfODg4OCkpCisKKyNkZWZpbmUgSVNfUFNFVURPUExOUihpbWcpICgoaW1nID09IE1EUF9ZX0NSQ0JfSDJWMikgfCBcCisJCQkgICAgKGltZyA9PSBNRFBfWV9DQkNSX0gyVjIpIHwgXAorCQkJICAgIChpbWcgPT0gTURQX1lfQ1JDQl9IMlYxKSB8IFwKKwkJCSAgICAoaW1nID09IE1EUF9ZX0NCQ1JfSDJWMSkpCisKKy8qIE1hcHBpbmdzIGZyb20gYWRkciB0byBwdXJwb3NlICovCisjZGVmaW5lIFBQUF9BRERSX1NSQ19ST0kJCU1EUF9GVUxMX0JZUEFTU19XT1JEMgorI2RlZmluZSBQUFBfQUREUl9TUkMwCQkJTURQX0ZVTExfQllQQVNTX1dPUkQzCisjZGVmaW5lIFBQUF9BRERSX1NSQzEJCQlNRFBfRlVMTF9CWVBBU1NfV09SRDQKKyNkZWZpbmUgUFBQX0FERFJfU1JDX1lTVFJJREUJCU1EUF9GVUxMX0JZUEFTU19XT1JENworI2RlZmluZSBQUFBfQUREUl9TUkNfQ0ZHCQlNRFBfRlVMTF9CWVBBU1NfV09SRDkKKyNkZWZpbmUgUFBQX0FERFJfU1JDX1BBQ0tfUEFUVEVSTglNRFBfRlVMTF9CWVBBU1NfV09SRDEwCisjZGVmaW5lIFBQUF9BRERSX09QRVJBVElPTgkJTURQX0ZVTExfQllQQVNTX1dPUkQxNAorI2RlZmluZSBQUFBfQUREUl9QSEFTRVhfSU5JVAkJTURQX0ZVTExfQllQQVNTX1dPUkQxNQorI2RlZmluZSBQUFBfQUREUl9QSEFTRVlfSU5JVAkJTURQX0ZVTExfQllQQVNTX1dPUkQxNgorI2RlZmluZSBQUFBfQUREUl9QSEFTRVhfU1RFUAkJTURQX0ZVTExfQllQQVNTX1dPUkQxNworI2RlZmluZSBQUFBfQUREUl9QSEFTRVlfU1RFUAkJTURQX0ZVTExfQllQQVNTX1dPUkQxOAorI2RlZmluZSBQUFBfQUREUl9BTFBIQV9UUkFOU1AJCU1EUF9GVUxMX0JZUEFTU19XT1JEMTkKKyNkZWZpbmUgUFBQX0FERFJfRFNUX0NGRwkJTURQX0ZVTExfQllQQVNTX1dPUkQyMAorI2RlZmluZSBQUFBfQUREUl9EU1RfUEFDS19QQVRURVJOCU1EUF9GVUxMX0JZUEFTU19XT1JEMjEKKyNkZWZpbmUgUFBQX0FERFJfRFNUX1JPSQkJTURQX0ZVTExfQllQQVNTX1dPUkQyNQorI2RlZmluZSBQUFBfQUREUl9EU1QwCQkJTURQX0ZVTExfQllQQVNTX1dPUkQyNgorI2RlZmluZSBQUFBfQUREUl9EU1QxCQkJTURQX0ZVTExfQllQQVNTX1dPUkQyNworI2RlZmluZSBQUFBfQUREUl9EU1RfWVNUUklERQkJTURQX0ZVTExfQllQQVNTX1dPUkQzMAorI2RlZmluZSBQUFBfQUREUl9FREdFCQkJTURQX0ZVTExfQllQQVNTX1dPUkQ0NgorI2RlZmluZSBQUFBfQUREUl9CRzAJCQlNRFBfRlVMTF9CWVBBU1NfV09SRDQ4CisjZGVmaW5lIFBQUF9BRERSX0JHMQkJCU1EUF9GVUxMX0JZUEFTU19XT1JENDkKKyNkZWZpbmUgUFBQX0FERFJfQkdfWVNUUklERQkJTURQX0ZVTExfQllQQVNTX1dPUkQ1MQorI2RlZmluZSBQUFBfQUREUl9CR19DRkcJCQlNRFBfRlVMTF9CWVBBU1NfV09SRDUzCisjZGVmaW5lIFBQUF9BRERSX0JHX1BBQ0tfUEFUVEVSTglNRFBfRlVMTF9CWVBBU1NfV09SRDU0CisKKy8qIE1EUF9ETUFfQ09ORklHIC8gTURQX0ZVTExfQllQQVNTX1dPUkQzMiAqLworI2RlZmluZSBETUFfRFNUQzBHXzZCSVRTICgxPDwxKQorI2RlZmluZSBETUFfRFNUQzFCXzZCSVRTICgxPDwzKQorI2RlZmluZSBETUFfRFNUQzJSXzZCSVRTICgxPDw1KQorI2RlZmluZSBETUFfRFNUQzBHXzVCSVRTICgxPDwwKQorI2RlZmluZSBETUFfRFNUQzFCXzVCSVRTICgxPDwyKQorI2RlZmluZSBETUFfRFNUQzJSXzVCSVRTICgxPDw0KQorCisjZGVmaW5lIERNQV9QQUNLX1RJR0hUICgxPDw2KQorI2RlZmluZSBETUFfUEFDS19MT09TRSAwCisjZGVmaW5lIERNQV9QQUNLX0FMSUdOX0xTQiAwCisjZGVmaW5lIERNQV9QQUNLX0FMSUdOX01TQiAoMTw8NykKKyNkZWZpbmUgRE1BX1BBQ0tfUEFUVEVSTl9SR0IgXAorCShNRFBfR0VUX1BBQ0tfUEFUVEVSTigwLCBDTFJfUiwgQ0xSX0csIENMUl9CLCAyKTw8OCkKKworI2RlZmluZSBETUFfT1VUX1NFTF9BSEIgIDAKKyNkZWZpbmUgRE1BX09VVF9TRUxfTURESSAoMTw8MTQpCisjZGVmaW5lIERNQV9BSEJNX0xDRF9TRUxfUFJJTUFSWSAwCisjZGVmaW5lIERNQV9BSEJNX0xDRF9TRUxfU0VDT05EQVJZICgxPDwxNSkKKyNkZWZpbmUgRE1BX0lCVUZfQzNBTFBIQV9FTiAoMTw8MTYpCisjZGVmaW5lIERNQV9ESVRIRVJfRU4gKDE8PDE3KQorCisjZGVmaW5lIERNQV9NRERJX0RNQU9VVF9MQ0RfU0VMX1BSSU1BUlkgMAorI2RlZmluZSBETUFfTURESV9ETUFPVVRfTENEX1NFTF9TRUNPTkRBUlkgKDE8PDE4KQorI2RlZmluZSBETUFfTURESV9ETUFPVVRfTENEX1NFTF9FWFRFUk5BTCAoMTw8MTkpCisKKyNkZWZpbmUgRE1BX0lCVUZfRk9STUFUX1JHQjU2NSAoMTw8MjApCisjZGVmaW5lIERNQV9JQlVGX0ZPUk1BVF9SR0I4ODhfT1JfQVJHQjg4ODggMAorCisjZGVmaW5lIERNQV9JQlVGX05PTkNPTlRJR1VPVVMgKDE8PDIxKQorCisvKiBNRERJIFJFR0lTVEVSID8gKi8KKyNkZWZpbmUgTURESV9WRE9fUEFDS0VUX0RFU0MgIDB4NTY2NgorI2RlZmluZSBNRERJX1ZET19QQUNLRVRfUFJJTSAgMHhDMworI2RlZmluZSBNRERJX1ZET19QQUNLRVRfU0VDRCAgMHhDMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTJjNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCkBAIC0wLDAgKzEsNzUwIEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21zbV9tZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9hbmRyb2lkX3BtZW0uaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorCisjaW5jbHVkZSAibWRwX2h3LmgiCisjaW5jbHVkZSAibWRwX3NjYWxlX3RhYmxlcy5oIgorCisjZGVmaW5lIERMT0coeC4uLikgZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgTURQX0RPV05TQ0FMRV9CTFVSIChNRFBfRE9XTlNDQUxFX01BWCArIDEpCitzdGF0aWMgaW50IGRvd25zY2FsZV95X3RhYmxlID0gTURQX0RPV05TQ0FMRV9NQVg7CitzdGF0aWMgaW50IGRvd25zY2FsZV94X3RhYmxlID0gTURQX0RPV05TQ0FMRV9NQVg7CisKK3N0cnVjdCBtZHBfcmVncyB7CisJdWludDMyX3Qgc3JjMDsKKwl1aW50MzJfdCBzcmMxOworCXVpbnQzMl90IGRzdDA7CisJdWludDMyX3QgZHN0MTsKKwl1aW50MzJfdCBzcmNfY2ZnOworCXVpbnQzMl90IGRzdF9jZmc7CisJdWludDMyX3Qgc3JjX3BhY2s7CisJdWludDMyX3QgZHN0X3BhY2s7CisJdWludDMyX3Qgc3JjX3JlY3Q7CisJdWludDMyX3QgZHN0X3JlY3Q7CisJdWludDMyX3Qgc3JjX3lzdHJpZGU7CisJdWludDMyX3QgZHN0X3lzdHJpZGU7CisJdWludDMyX3Qgb3A7CisJdWludDMyX3Qgc3JjX2JwcDsKKwl1aW50MzJfdCBkc3RfYnBwOworCXVpbnQzMl90IGVkZ2U7CisJdWludDMyX3QgcGhhc2V4X2luaXQ7CisJdWludDMyX3QgcGhhc2V5X2luaXQ7CisJdWludDMyX3QgcGhhc2V4X3N0ZXA7CisJdWludDMyX3QgcGhhc2V5X3N0ZXA7Cit9OworCitzdGF0aWMgdWludDMyX3QgcGFja19wYXR0ZXJuW10gPSB7CisJUFBQX0FSUkFZMChQQUNLX1BBVFRFUk4pCit9OworCitzdGF0aWMgdWludDMyX3Qgc3JjX2ltZ19jZmdbXSA9IHsKKwlQUFBfQVJSQVkxKENGRywgU1JDKQorfTsKKworc3RhdGljIHVpbnQzMl90IGRzdF9pbWdfY2ZnW10gPSB7CisJUFBQX0FSUkFZMShDRkcsIERTVCkKK307CisKK3N0YXRpYyB1aW50MzJfdCBieXRlc19wZXJfcGl4ZWxbXSA9IHsKKwlbTURQX1JHQl81NjVdID0gMiwKKwlbTURQX1JHQl84ODhdID0gMywKKwlbTURQX1hSR0JfODg4OF0gPSA0LAorCVtNRFBfQVJHQl84ODg4XSA9IDQsCisJW01EUF9SR0JBXzg4ODhdID0gNCwKKwlbTURQX0JHUkFfODg4OF0gPSA0LAorCVtNRFBfWV9DQkNSX0gyVjFdID0gMSwKKwlbTURQX1lfQ0JDUl9IMlYyXSA9IDEsCisJW01EUF9ZX0NSQ0JfSDJWMV0gPSAxLAorCVtNRFBfWV9DUkNCX0gyVjJdID0gMSwKKwlbTURQX1lDUllDQl9IMlYxXSA9IDIKK307CisKK3N0YXRpYyB1aW50MzJfdCBkc3Rfb3BfY2hyb21hW10gPSB7CisJUFBQX0FSUkFZMShDSFJPTUFfU0FNUCwgRFNUKQorfTsKKworc3RhdGljIHVpbnQzMl90IHNyY19vcF9jaHJvbWFbXSA9IHsKKwlQUFBfQVJSQVkxKENIUk9NQV9TQU1QLCBTUkMpCit9OworCitzdGF0aWMgdWludDMyX3QgYmdfb3BfY2hyb21hW10gPSB7CisJUFBQX0FSUkFZMShDSFJPTUFfU0FNUCwgQkcpCit9OworCitzdGF0aWMgdm9pZCByb3RhdGVfZHN0X2FkZHJfeChzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsIHN0cnVjdCBtZHBfcmVncyAqcmVncykKK3sKKwlyZWdzLT5kc3QwICs9IChyZXEtPmRzdF9yZWN0LncgLQorCQkgICAgICAgbWluKCh1aW50MzJfdCkxNiwgcmVxLT5kc3RfcmVjdC53KSkgKiByZWdzLT5kc3RfYnBwOworCXJlZ3MtPmRzdDEgKz0gKHJlcS0+ZHN0X3JlY3QudyAtCisJCSAgICAgICBtaW4oKHVpbnQzMl90KTE2LCByZXEtPmRzdF9yZWN0LncpKSAqIHJlZ3MtPmRzdF9icHA7Cit9CisKK3N0YXRpYyB2b2lkIHJvdGF0ZV9kc3RfYWRkcl95KHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwgc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCXJlZ3MtPmRzdDAgKz0gKHJlcS0+ZHN0X3JlY3QuaCAtCisJCSAgICAgICBtaW4oKHVpbnQzMl90KTE2LCByZXEtPmRzdF9yZWN0LmgpKSAqCisJCSAgICAgICByZWdzLT5kc3RfeXN0cmlkZTsKKwlyZWdzLT5kc3QxICs9IChyZXEtPmRzdF9yZWN0LmggLQorCQkgICAgICAgbWluKCh1aW50MzJfdCkxNiwgcmVxLT5kc3RfcmVjdC5oKSkgKgorCQkgICAgICAgcmVncy0+ZHN0X3lzdHJpZGU7Cit9CisKK3N0YXRpYyB2b2lkIGJsaXRfcm90YXRlKHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwKKwkJCXN0cnVjdCBtZHBfcmVncyAqcmVncykKK3sKKwlpZiAocmVxLT5mbGFncyA9PSBNRFBfUk9UX05PUCkKKwkJcmV0dXJuOworCisJcmVncy0+b3AgfD0gUFBQX09QX1JPVF9PTjsKKwlpZiAoKHJlcS0+ZmxhZ3MgJiBNRFBfUk9UXzkwIHx8IHJlcS0+ZmxhZ3MgJiBNRFBfRkxJUF9MUikgJiYKKwkgICAgIShyZXEtPmZsYWdzICYgTURQX1JPVF85MCAmJiByZXEtPmZsYWdzICYgTURQX0ZMSVBfTFIpKQorCQlyb3RhdGVfZHN0X2FkZHJfeChyZXEsIHJlZ3MpOworCWlmIChyZXEtPmZsYWdzICYgTURQX1JPVF85MCkKKwkJcmVncy0+b3AgfD0gUFBQX09QX1JPVF85MDsKKwlpZiAocmVxLT5mbGFncyAmIE1EUF9GTElQX1VEKSB7CisJCXJlZ3MtPm9wIHw9IFBQUF9PUF9GTElQX1VEOworCQlyb3RhdGVfZHN0X2FkZHJfeShyZXEsIHJlZ3MpOworCX0KKwlpZiAocmVxLT5mbGFncyAmIE1EUF9GTElQX0xSKQorCQlyZWdzLT5vcCB8PSBQUFBfT1BfRkxJUF9MUjsKK30KKworc3RhdGljIHZvaWQgYmxpdF9jb252ZXJ0KHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwgc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCWlmIChyZXEtPnNyYy5mb3JtYXQgPT0gcmVxLT5kc3QuZm9ybWF0KQorCQlyZXR1cm47CisJaWYgKElTX1JHQihyZXEtPnNyYy5mb3JtYXQpICYmIElTX1lDUkNCKHJlcS0+ZHN0LmZvcm1hdCkpIHsKKwkJcmVncy0+b3AgfD0gUFBQX09QX0NPTlZFUlRfUkdCMllDQkNSIHwgUFBQX09QX0NPTlZFUlRfT047CisJfSBlbHNlIGlmIChJU19ZQ1JDQihyZXEtPnNyYy5mb3JtYXQpICYmIElTX1JHQihyZXEtPmRzdC5mb3JtYXQpKSB7CisJCXJlZ3MtPm9wIHw9IFBQUF9PUF9DT05WRVJUX1lDQkNSMlJHQiB8IFBQUF9PUF9DT05WRVJUX09OOworCQlpZiAocmVxLT5kc3QuZm9ybWF0ID09IE1EUF9SR0JfNTY1KQorCQkJcmVncy0+b3AgfD0gUFBQX09QX0NPTlZFUlRfTUFUUklYX1NFQ09OREFSWTsKKwl9Cit9CisKKyNkZWZpbmUgR0VUX0JJVF9SQU5HRSh2YWx1ZSwgaGlnaCwgbG93KSBcCisJKCgoMSA8PCAoaGlnaCAtIGxvdyArIDEpKSAtIDEpICYgKHZhbHVlID4+IGxvdykpCitzdGF0aWMgdWludDMyX3QgdHJhbnNwX2NvbnZlcnQoc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxKQoreworCXVpbnQzMl90IHRyYW5zcCA9IDA7CisJaWYgKHJlcS0+c3JjLmZvcm1hdCA9PSBNRFBfUkdCXzU2NSkgeworCQkvKiBwYWQgZWFjaCB2YWx1ZSB0byA4IGJpdHMgYnkgY29weWluZyB0aGUgaGlnaCBiaXRzIGludG8gdGhlCisJCSAqIGxvdyBlbmQsIGNvbnZlcnQgUkdCIHRvIFJCRyBieSBzd2l0Y2hpbmcgbG93IDIgY29tcG9uZW50cyAqLworCQl0cmFuc3AgfD0gKChHRVRfQklUX1JBTkdFKHJlcS0+dHJhbnNwX21hc2ssIDE1LCAxMSkgPDwgMykgfAorCQkJICAgKEdFVF9CSVRfUkFOR0UocmVxLT50cmFuc3BfbWFzaywgMTUsIDEzKSkpIDw8IDE2OworCisJCXRyYW5zcCB8PSAoKEdFVF9CSVRfUkFOR0UocmVxLT50cmFuc3BfbWFzaywgNCwgMCkgPDwgMykgfAorCQkJICAgKEdFVF9CSVRfUkFOR0UocmVxLT50cmFuc3BfbWFzaywgNCwgMikpKSA8PCA4OworCisJCXRyYW5zcCB8PSAoR0VUX0JJVF9SQU5HRShyZXEtPnRyYW5zcF9tYXNrLCAxMCwgNSkgPDwgMikgfAorCQkJICAoR0VUX0JJVF9SQU5HRShyZXEtPnRyYW5zcF9tYXNrLCAxMCwgOSkpOworCX0gZWxzZSB7CisJCS8qIGNvbnZlcnQgUkdCIHRvIFJCRyAqLworCQl0cmFuc3AgfD0gKEdFVF9CSVRfUkFOR0UocmVxLT50cmFuc3BfbWFzaywgMTUsIDgpKSB8CisJCQkgIChHRVRfQklUX1JBTkdFKHJlcS0+dHJhbnNwX21hc2ssIDIzLCAxNikgPDwgMTYpIHwKKwkJCSAgKEdFVF9CSVRfUkFOR0UocmVxLT50cmFuc3BfbWFzaywgNywgMCkgPDwgOCk7CisJfQorCXJldHVybiB0cmFuc3A7Cit9CisjdW5kZWYgR0VUX0JJVF9SQU5HRQorCitzdGF0aWMgdm9pZCBibGl0X2JsZW5kKHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwgc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCS8qIFRSQU5TUCBCTEVORCAqLworCWlmIChyZXEtPnRyYW5zcF9tYXNrICE9IE1EUF9UUkFOU1BfTk9QKSB7CisJCXJlcS0+dHJhbnNwX21hc2sgPSB0cmFuc3BfY29udmVydChyZXEpOworCQlpZiAocmVxLT5hbHBoYSAhPSBNRFBfQUxQSEFfTk9QKSB7CisJCQkvKiB1c2UgYmxlbmRlZCB0cmFuc3BhcmFuY3kgbW9kZQorCQkJICogcGl4ZWwgPSAoc3JjID09IHRyYW5zcCkgPyBkc3QgOiBibGVuZAorCQkJICogYmxlbmQgaXMgY29tYm8gb2YgYmxlbmRfZXFfc2VsIGFuZAorCQkJICogYmxlbmRfYWxwaGFfc2VsICovCisJCQlyZWdzLT5vcCB8PSBQUFBfT1BfUk9UX09OIHwgUFBQX09QX0JMRU5EX09OIHwKKwkJCQlQUFBfT1BfQkxFTkRfQUxQSEFfQkxFTkRfTk9STUFMIHwKKwkJCQlQUFBfT1BfQkxFTkRfQ09OU1RBTlRfQUxQSEEgfAorCQkJCVBQUF9CTEVORF9BTFBIQV9UUkFOU1A7CisJCX0gZWxzZSB7CisJCQkvKiBzaW1wbGUgdHJhbnNwYXJhbmN5IG1vZGUKKwkJCSAqIHBpeGVsID0gKHNyYyA9PSB0cmFuc3ApID8gZHN0IDogc3JjICovCisJCQlyZWdzLT5vcCB8PSBQUFBfT1BfUk9UX09OIHwgUFBQX09QX0JMRU5EX09OIHwKKwkJCQlQUFBfT1BfQkxFTkRfU1JDUElYRUxfVFJBTlNQOworCQl9CisJfQorCisJcmVxLT5hbHBoYSAmPSAweGZmOworCS8qIEFMUEhBIEJMRU5EICovCisJaWYgKEhBU19BTFBIQShyZXEtPnNyYy5mb3JtYXQpKSB7CisJCXJlZ3MtPm9wIHw9IFBQUF9PUF9ST1RfT04gfCBQUFBfT1BfQkxFTkRfT04gfAorCQkJUFBQX09QX0JMRU5EX1NSQ1BJWEVMX0FMUEhBOworCX0gZWxzZSBpZiAocmVxLT5hbHBoYSA8IE1EUF9BTFBIQV9OT1ApIHsKKwkJLyoganVzdCBibGVuZCBieSBhbHBoYSAqLworCQlyZWdzLT5vcCB8PSBQUFBfT1BfUk9UX09OIHwgUFBQX09QX0JMRU5EX09OIHwKKwkJCVBQUF9PUF9CTEVORF9BTFBIQV9CTEVORF9OT1JNQUwgfAorCQkJUFBQX09QX0JMRU5EX0NPTlNUQU5UX0FMUEhBOworCX0KKworCXJlZ3MtPm9wIHw9IGJnX29wX2Nocm9tYVtyZXEtPmRzdC5mb3JtYXRdOworfQorCisjZGVmaW5lIE9ORV9IQUxGCSgxTEwgPDwgMzIpCisjZGVmaW5lIE9ORQkJKDFMTCA8PCAzMykKKyNkZWZpbmUgVFdPCQkoMkxMIDw8IDMzKQorI2RlZmluZSBUSFJFRQkJKDNMTCA8PCAzMykKKyNkZWZpbmUgRlJBQ19NQVNLIChPTkUgLSAxKQorI2RlZmluZSBJTlRfTUFTSyAofkZSQUNfTUFTSykKKworc3RhdGljIGludCBzY2FsZV9wYXJhbXModWludDMyX3QgZGltX2luLCB1aW50MzJfdCBkaW1fb3V0LCB1aW50MzJfdCBvcmlnaW4sCisJCQl1aW50MzJfdCAqcGhhc2VfaW5pdCwgdWludDMyX3QgKnBoYXNlX3N0ZXApCit7CisJLyogdG8gaW1wcm92ZSBwcmVjaWNzaW9uIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSBpbiBVMzEuMzMgYW5kIGNvbnZlcnRlZAorCSAqIHRvIFUzLjI5IGF0IHRoZSBlbmQgKi8KKwlpbnQ2NF90IGsxLCBrMiwgazMsIGs0LCB0bXA7CisJdWludDY0X3QgbiwgZCwgb3MsIG9zX3AsIG9kLCBvZF9wLCBvcmVxOworCXVuc2lnbmVkIHJwYSA9IDA7CisJaW50NjRfdCBpcDY0LCBkZWx0YTsKKworCWlmIChkaW1fb3V0ICUgMyA9PSAwKQorCQlycGEgPSAhKGRpbV9pbiAlIChkaW1fb3V0IC8gMykpOworCisJbiA9ICgodWludDY0X3QpZGltX291dCkgPDwgMzQ7CisJZCA9IGRpbV9pbjsKKwlpZiAoIWQpCisJCXJldHVybiAtMTsKKwlkb19kaXYobiwgZCk7CisJazMgPSAobiArIDEpID4+IDE7CisJaWYgKChrMyA+PiA0KSA8ICgxTEwgPDwgMjcpIHx8IChrMyA+PiA0KSA+ICgxTEwgPDwgMzEpKSB7CisJCURMT0coImNyYXAgYmFkIHNjYWxlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwluID0gKCh1aW50NjRfdClkaW1faW4pIDw8IDM0OworCWQgPSAodWludDY0X3QpZGltX291dDsKKwlpZiAoIWQpCisJCXJldHVybiAtMTsKKwlkb19kaXYobiwgZCk7CisJazEgPSAobiArIDEpID4+IDE7CisJazIgPSAoazEgLSBPTkUpID4+IDE7CisKKwkqcGhhc2VfaW5pdCA9IChpbnQpKGsyID4+IDQpOworCWs0ID0gKGszIC0gT05FKSA+PiAxOworCisJaWYgKHJwYSkgeworCQlvcyA9ICgodWludDY0X3Qpb3JpZ2luIDw8IDMzKSAtIE9ORV9IQUxGOworCQl0bXAgPSAoZGltX291dCAqIG9zKSArIE9ORV9IQUxGOworCQlpZiAoIWRpbV9pbikKKwkJCXJldHVybiAtMTsKKwkJZG9fZGl2KHRtcCwgZGltX2luKTsKKwkJb2QgPSB0bXAgLSBPTkVfSEFMRjsKKwl9IGVsc2UgeworCQlvcyA9ICgodWludDY0X3Qpb3JpZ2luIDw8IDEpIC0gMTsKKwkJb2QgPSAoKChrMyAqIG9zKSA+PiAxKSArIGs0KTsKKwl9CisKKwlvZF9wID0gb2QgJiBJTlRfTUFTSzsKKwlpZiAob2RfcCAhPSBvZCkKKwkJb2RfcCArPSBPTkU7CisKKwlpZiAocnBhKSB7CisJCXRtcCA9IChkaW1faW4gKiBvZF9wKSArIE9ORV9IQUxGOworCQlpZiAoIWRpbV9pbikKKwkJCXJldHVybiAtMTsKKwkJZG9fZGl2KHRtcCwgZGltX2luKTsKKwkJb3NfcCA9IHRtcCAtIE9ORV9IQUxGOworCX0gZWxzZSB7CisJCW9zX3AgPSAoKGsxICogKG9kX3AgPj4gMzMpKSArIGsyKTsKKwl9CisKKwlvcmVxID0gKG9zX3AgJiBJTlRfTUFTSykgLSBPTkU7CisKKwlpcDY0ID0gb3NfcCAtIG9yZXE7CisJZGVsdGEgPSAoKGludDY0X3QpKG9yaWdpbikgPDwgMzMpIC0gb3JlcTsKKwlpcDY0IC09IGRlbHRhOworCS8qIGxpbWl0IHRvIHZhbGlkIHJhbmdlIGJlZm9yZSB0aGUgbGVmdCBzaGlmdCAqLworCWRlbHRhID0gKGlwNjQgJiAoMUxMIDw8IDYzKSkgPyA0IDogLTQ7CisJZGVsdGEgPDw9IDMzOworCXdoaWxlIChhYnMoKGludCkoaXA2NCA+PiAzMykpID4gNCkKKwkJaXA2NCArPSBkZWx0YTsKKwkqcGhhc2VfaW5pdCA9IChpbnQpKGlwNjQgPj4gNCk7CisJKnBoYXNlX3N0ZXAgPSAodWludDMyX3QpKGsxID4+IDQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3NjYWxlX3RhYmxlKGNvbnN0IHN0cnVjdCBtZHBfaW5mbyAqbWRwLAorCQkJICAgICBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5ICp0YWJsZSwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCW1kcF93cml0ZWwobWRwLCB0YWJsZVtpXS52YWwsIHRhYmxlW2ldLnJlZyk7Cit9CisKK2VudW0geworSU1HX0xFRlQsCitJTUdfUklHSFQsCitJTUdfVE9QLAorSU1HX0JPVFRPTSwKK307CisKK3N0YXRpYyB2b2lkIGdldF9lZGdlX2luZm8odWludDMyX3Qgc3JjLCB1aW50MzJfdCBzcmNfY29vcmQsIHVpbnQzMl90IGRzdCwKKwkJCSAgdWludDMyX3QgKmludGVycDEsIHVpbnQzMl90ICppbnRlcnAyLAorCQkJICB1aW50MzJfdCAqcmVwZWF0MSwgdWludDMyX3QgKnJlcGVhdDIpIHsKKwlpZiAoc3JjID4gMyAqIGRzdCkgeworCQkqaW50ZXJwMSA9IDA7CisJCSppbnRlcnAyID0gc3JjIC0gMTsKKwkJKnJlcGVhdDEgPSAwOworCQkqcmVwZWF0MiA9IDA7CisJfSBlbHNlIGlmIChzcmMgPT0gMyAqIGRzdCkgeworCQkqaW50ZXJwMSA9IDA7CisJCSppbnRlcnAyID0gc3JjOworCQkqcmVwZWF0MSA9IDA7CisJCSpyZXBlYXQyID0gMTsKKwl9IGVsc2UgaWYgKHNyYyA+IGRzdCAmJiBzcmMgPCAzICogZHN0KSB7CisJCSppbnRlcnAxID0gLTE7CisJCSppbnRlcnAyID0gc3JjOworCQkqcmVwZWF0MSA9IDE7CisJCSpyZXBlYXQyID0gMTsKKwl9IGVsc2UgaWYgKHNyYyA9PSBkc3QpIHsKKwkJKmludGVycDEgPSAtMTsKKwkJKmludGVycDIgPSBzcmMgKyAxOworCQkqcmVwZWF0MSA9IDE7CisJCSpyZXBlYXQyID0gMjsKKwl9IGVsc2UgeworCQkqaW50ZXJwMSA9IC0yOworCQkqaW50ZXJwMiA9IHNyYyArIDE7CisJCSpyZXBlYXQxID0gMjsKKwkJKnJlcGVhdDIgPSAyOworCX0KKwkqaW50ZXJwMSArPSBzcmNfY29vcmQ7CisJKmludGVycDIgKz0gc3JjX2Nvb3JkOworfQorCitzdGF0aWMgaW50IGdldF9lZGdlX2NvbmQoc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLCBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MpCit7CisJaW50MzJfdCBsdW1hX2ludGVycFs0XTsKKwlpbnQzMl90IGx1bWFfcmVwZWF0WzRdOworCWludDMyX3QgY2hyb21hX2ludGVycFs0XTsKKwlpbnQzMl90IGNocm9tYV9ib3VuZFs0XTsKKwlpbnQzMl90IGNocm9tYV9yZXBlYXRbNF07CisJdWludDMyX3QgZHN0X3csIGRzdF9oOworCisJbWVtc2V0KCZsdW1hX2ludGVycCwgMCwgc2l6ZW9mKGludDMyX3QpICogNCk7CisJbWVtc2V0KCZsdW1hX3JlcGVhdCwgMCwgc2l6ZW9mKGludDMyX3QpICogNCk7CisJbWVtc2V0KCZjaHJvbWFfaW50ZXJwLCAwLCBzaXplb2YoaW50MzJfdCkgKiA0KTsKKwltZW1zZXQoJmNocm9tYV9ib3VuZCwgMCwgc2l6ZW9mKGludDMyX3QpICogNCk7CisJbWVtc2V0KCZjaHJvbWFfcmVwZWF0LCAwLCBzaXplb2YoaW50MzJfdCkgKiA0KTsKKwlyZWdzLT5lZGdlID0gMDsKKworCWlmIChyZXEtPmZsYWdzICYgTURQX1JPVF85MCkgeworCQlkc3RfdyA9IHJlcS0+ZHN0X3JlY3QuaDsKKwkJZHN0X2ggPSByZXEtPmRzdF9yZWN0Lnc7CisJfSBlbHNlIHsKKwkJZHN0X3cgPSByZXEtPmRzdF9yZWN0Lnc7CisJCWRzdF9oID0gcmVxLT5kc3RfcmVjdC5oOworCX0KKworCWlmIChyZWdzLT5vcCAmIChQUFBfT1BfU0NBTEVfWV9PTiB8IFBQUF9PUF9TQ0FMRV9YX09OKSkgeworCQlnZXRfZWRnZV9pbmZvKHJlcS0+c3JjX3JlY3QuaCwgcmVxLT5zcmNfcmVjdC55LCBkc3RfaCwKKwkJCSAgICAgICZsdW1hX2ludGVycFtJTUdfVE9QXSwgJmx1bWFfaW50ZXJwW0lNR19CT1RUT01dLAorCQkJICAgICAgJmx1bWFfcmVwZWF0W0lNR19UT1BdLCAmbHVtYV9yZXBlYXRbSU1HX0JPVFRPTV0pOworCQlnZXRfZWRnZV9pbmZvKHJlcS0+c3JjX3JlY3QudywgcmVxLT5zcmNfcmVjdC54LCBkc3RfdywKKwkJCSAgICAgICZsdW1hX2ludGVycFtJTUdfTEVGVF0sICZsdW1hX2ludGVycFtJTUdfUklHSFRdLAorCQkJICAgICAgJmx1bWFfcmVwZWF0W0lNR19MRUZUXSwgJmx1bWFfcmVwZWF0W0lNR19SSUdIVF0pOworCX0gZWxzZSB7CisJCWx1bWFfaW50ZXJwW0lNR19MRUZUXSA9IHJlcS0+c3JjX3JlY3QueDsKKwkJbHVtYV9pbnRlcnBbSU1HX1JJR0hUXSA9IHJlcS0+c3JjX3JlY3QueCArIHJlcS0+c3JjX3JlY3QudyAtIDE7CisJCWx1bWFfaW50ZXJwW0lNR19UT1BdID0gcmVxLT5zcmNfcmVjdC55OworCQlsdW1hX2ludGVycFtJTUdfQk9UVE9NXSA9IHJlcS0+c3JjX3JlY3QueSArIHJlcS0+c3JjX3JlY3QuaCAtIDE7CisJCWx1bWFfcmVwZWF0W0lNR19MRUZUXSA9IDA7CisJCWx1bWFfcmVwZWF0W0lNR19UT1BdID0gMDsKKwkJbHVtYV9yZXBlYXRbSU1HX1JJR0hUXSA9IDA7CisJCWx1bWFfcmVwZWF0W0lNR19CT1RUT01dID0gMDsKKwl9CisKKwljaHJvbWFfaW50ZXJwW0lNR19MRUZUXSA9IGx1bWFfaW50ZXJwW0lNR19MRUZUXTsKKwljaHJvbWFfaW50ZXJwW0lNR19SSUdIVF0gPSBsdW1hX2ludGVycFtJTUdfUklHSFRdOworCWNocm9tYV9pbnRlcnBbSU1HX1RPUF0gPSBsdW1hX2ludGVycFtJTUdfVE9QXTsKKwljaHJvbWFfaW50ZXJwW0lNR19CT1RUT01dID0gbHVtYV9pbnRlcnBbSU1HX0JPVFRPTV07CisKKwljaHJvbWFfYm91bmRbSU1HX0xFRlRdID0gcmVxLT5zcmNfcmVjdC54OworCWNocm9tYV9ib3VuZFtJTUdfUklHSFRdID0gcmVxLT5zcmNfcmVjdC54ICsgcmVxLT5zcmNfcmVjdC53IC0gMTsKKwljaHJvbWFfYm91bmRbSU1HX1RPUF0gPSByZXEtPnNyY19yZWN0Lnk7CisJY2hyb21hX2JvdW5kW0lNR19CT1RUT01dID0gcmVxLT5zcmNfcmVjdC55ICsgcmVxLT5zcmNfcmVjdC5oIC0gMTsKKworCWlmIChJU19ZQ1JDQihyZXEtPnNyYy5mb3JtYXQpKSB7CisJCWNocm9tYV9pbnRlcnBbSU1HX0xFRlRdID0gY2hyb21hX2ludGVycFtJTUdfTEVGVF0gPj4gMTsKKwkJY2hyb21hX2ludGVycFtJTUdfUklHSFRdID0gKGNocm9tYV9pbnRlcnBbSU1HX1JJR0hUXSArIDEpID4+IDE7CisKKwkJY2hyb21hX2JvdW5kW0lNR19MRUZUXSA9IGNocm9tYV9ib3VuZFtJTUdfTEVGVF0gPj4gMTsKKwkJY2hyb21hX2JvdW5kW0lNR19SSUdIVF0gPSBjaHJvbWFfYm91bmRbSU1HX1JJR0hUXSA+PiAxOworCX0KKworCWlmIChyZXEtPnNyYy5mb3JtYXQgPT0gTURQX1lfQ0JDUl9IMlYyIHx8CisJICAgIHJlcS0+c3JjLmZvcm1hdCA9PSBNRFBfWV9DUkNCX0gyVjIpIHsKKwkJY2hyb21hX2ludGVycFtJTUdfVE9QXSA9IChjaHJvbWFfaW50ZXJwW0lNR19UT1BdIC0gMSkgPj4gMTsKKwkJY2hyb21hX2ludGVycFtJTUdfQk9UVE9NXSA9IChjaHJvbWFfaW50ZXJwW0lNR19CT1RUT01dICsgMSkKKwkJCQkJICAgID4+IDE7CisJCWNocm9tYV9ib3VuZFtJTUdfVE9QXSA9IChjaHJvbWFfYm91bmRbSU1HX1RPUF0gKyAxKSA+PiAxOworCQljaHJvbWFfYm91bmRbSU1HX0JPVFRPTV0gPSBjaHJvbWFfYm91bmRbSU1HX0JPVFRPTV0gPj4gMTsKKwl9CisKKwljaHJvbWFfcmVwZWF0W0lNR19MRUZUXSA9IGNocm9tYV9ib3VuZFtJTUdfTEVGVF0gLQorCQkJCSAgY2hyb21hX2ludGVycFtJTUdfTEVGVF07CisJY2hyb21hX3JlcGVhdFtJTUdfUklHSFRdID0gY2hyb21hX2ludGVycFtJTUdfUklHSFRdIC0KKwkJCQkgIGNocm9tYV9ib3VuZFtJTUdfUklHSFRdOworCWNocm9tYV9yZXBlYXRbSU1HX1RPUF0gPSBjaHJvbWFfYm91bmRbSU1HX1RPUF0gLQorCQkJCSAgY2hyb21hX2ludGVycFtJTUdfVE9QXTsKKwljaHJvbWFfcmVwZWF0W0lNR19CT1RUT01dID0gY2hyb21hX2ludGVycFtJTUdfQk9UVE9NXSAtCisJCQkJICBjaHJvbWFfYm91bmRbSU1HX0JPVFRPTV07CisKKwlpZiAoY2hyb21hX3JlcGVhdFtJTUdfTEVGVF0gPCAwIHx8IGNocm9tYV9yZXBlYXRbSU1HX0xFRlRdID4gMyB8fAorCSAgICBjaHJvbWFfcmVwZWF0W0lNR19SSUdIVF0gPCAwIHx8IGNocm9tYV9yZXBlYXRbSU1HX1JJR0hUXSA+IDMgfHwKKwkgICAgY2hyb21hX3JlcGVhdFtJTUdfVE9QXSA8IDAgfHwgY2hyb21hX3JlcGVhdFtJTUdfVE9QXSA+IDMgfHwKKwkgICAgY2hyb21hX3JlcGVhdFtJTUdfQk9UVE9NXSA8IDAgfHwgY2hyb21hX3JlcGVhdFtJTUdfQk9UVE9NXSA+IDMgfHwKKwkgICAgbHVtYV9yZXBlYXRbSU1HX0xFRlRdIDwgMCB8fCBsdW1hX3JlcGVhdFtJTUdfTEVGVF0gPiAzIHx8CisJICAgIGx1bWFfcmVwZWF0W0lNR19SSUdIVF0gPCAwIHx8IGx1bWFfcmVwZWF0W0lNR19SSUdIVF0gPiAzIHx8CisJICAgIGx1bWFfcmVwZWF0W0lNR19UT1BdIDwgMCB8fCBsdW1hX3JlcGVhdFtJTUdfVE9QXSA+IDMgfHwKKwkgICAgbHVtYV9yZXBlYXRbSU1HX0JPVFRPTV0gPCAwIHx8IGx1bWFfcmVwZWF0W0lNR19CT1RUT01dID4gMykKKwkJcmV0dXJuIC0xOworCisJcmVncy0+ZWRnZSB8PSAoY2hyb21hX3JlcGVhdFtJTUdfTEVGVF0gJiAzKSA8PCBNRFBfTEVGVF9DSFJPTUE7CisJcmVncy0+ZWRnZSB8PSAoY2hyb21hX3JlcGVhdFtJTUdfUklHSFRdICYgMykgPDwgTURQX1JJR0hUX0NIUk9NQTsKKwlyZWdzLT5lZGdlIHw9IChjaHJvbWFfcmVwZWF0W0lNR19UT1BdICYgMykgPDwgTURQX1RPUF9DSFJPTUE7CisJcmVncy0+ZWRnZSB8PSAoY2hyb21hX3JlcGVhdFtJTUdfQk9UVE9NXSAmIDMpIDw8IE1EUF9CT1RUT01fQ0hST01BOworCXJlZ3MtPmVkZ2UgfD0gKGx1bWFfcmVwZWF0W0lNR19MRUZUXSAmIDMpIDw8IE1EUF9MRUZUX0xVTUE7CisJcmVncy0+ZWRnZSB8PSAobHVtYV9yZXBlYXRbSU1HX1JJR0hUXSAmIDMpIDw8IE1EUF9SSUdIVF9MVU1BOworCXJlZ3MtPmVkZ2UgfD0gKGx1bWFfcmVwZWF0W0lNR19UT1BdICYgMykgPDwgTURQX1RPUF9MVU1BOworCXJlZ3MtPmVkZ2UgfD0gKGx1bWFfcmVwZWF0W0lNR19CT1RUT01dICYgMykgPDwgTURQX0JPVFRPTV9MVU1BOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsaXRfc2NhbGUoY29uc3Qgc3RydWN0IG1kcF9pbmZvICptZHAsIHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwKKwkJICAgICAgc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCXVpbnQzMl90IHBoYXNlX2luaXRfeCwgcGhhc2VfaW5pdF95LCBwaGFzZV9zdGVwX3gsIHBoYXNlX3N0ZXBfeTsKKwl1aW50MzJfdCBzY2FsZV9mYWN0b3JfeCwgc2NhbGVfZmFjdG9yX3k7CisJdWludDMyX3QgZG93bnNjYWxlOworCXVpbnQzMl90IGRzdF93LCBkc3RfaDsKKworCWlmIChyZXEtPmZsYWdzICYgTURQX1JPVF85MCkgeworCQlkc3RfdyA9IHJlcS0+ZHN0X3JlY3QuaDsKKwkJZHN0X2ggPSByZXEtPmRzdF9yZWN0Lnc7CisJfSBlbHNlIHsKKwkJZHN0X3cgPSByZXEtPmRzdF9yZWN0Lnc7CisJCWRzdF9oID0gcmVxLT5kc3RfcmVjdC5oOworCX0KKwlpZiAoKHJlcS0+c3JjX3JlY3QudyA9PSBkc3RfdykgICYmIChyZXEtPnNyY19yZWN0LmggPT0gZHN0X2gpICYmCisJICAgICEocmVxLT5mbGFncyAmIE1EUF9CTFVSKSkgeworCQlyZWdzLT5waGFzZXhfaW5pdCA9IDA7CisJCXJlZ3MtPnBoYXNleV9pbml0ID0gMDsKKwkJcmVncy0+cGhhc2V4X3N0ZXAgPSAwOworCQlyZWdzLT5waGFzZXlfc3RlcCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmIChzY2FsZV9wYXJhbXMocmVxLT5zcmNfcmVjdC53LCBkc3RfdywgMSwgJnBoYXNlX2luaXRfeCwKKwkJCSAmcGhhc2Vfc3RlcF94KSB8fAorCSAgICBzY2FsZV9wYXJhbXMocmVxLT5zcmNfcmVjdC5oLCBkc3RfaCwgMSwgJnBoYXNlX2luaXRfeSwKKwkJCSAmcGhhc2Vfc3RlcF95KSkKKwkJcmV0dXJuIC0xOworCisJc2NhbGVfZmFjdG9yX3ggPSAoZHN0X3cgKiAxMCkgLyByZXEtPnNyY19yZWN0Lnc7CisJc2NhbGVfZmFjdG9yX3kgPSAoZHN0X2ggKiAxMCkgLyByZXEtPnNyY19yZWN0Lmg7CisKKwlpZiAoc2NhbGVfZmFjdG9yX3ggPiA4KQorCQlkb3duc2NhbGUgPSBNRFBfRE9XTlNDQUxFX1BUOFRPMTsKKwllbHNlIGlmIChzY2FsZV9mYWN0b3JfeCA+IDYpCisJCWRvd25zY2FsZSA9IE1EUF9ET1dOU0NBTEVfUFQ2VE9QVDg7CisJZWxzZSBpZiAoc2NhbGVfZmFjdG9yX3ggPiA0KQorCQlkb3duc2NhbGUgPSBNRFBfRE9XTlNDQUxFX1BUNFRPUFQ2OworCWVsc2UKKwkJZG93bnNjYWxlID0gTURQX0RPV05TQ0FMRV9QVDJUT1BUNDsKKwlpZiAoZG93bnNjYWxlICE9IGRvd25zY2FsZV94X3RhYmxlKSB7CisJCWxvYWRfc2NhbGVfdGFibGUobWRwLCBtZHBfZG93bnNjYWxlX3hfdGFibGVbZG93bnNjYWxlXSwgNjQpOworCQlkb3duc2NhbGVfeF90YWJsZSA9IGRvd25zY2FsZTsKKwl9CisKKwlpZiAoc2NhbGVfZmFjdG9yX3kgPiA4KQorCQlkb3duc2NhbGUgPSBNRFBfRE9XTlNDQUxFX1BUOFRPMTsKKwllbHNlIGlmIChzY2FsZV9mYWN0b3JfeSA+IDYpCisJCWRvd25zY2FsZSA9IE1EUF9ET1dOU0NBTEVfUFQ2VE9QVDg7CisJZWxzZSBpZiAoc2NhbGVfZmFjdG9yX3kgPiA0KQorCQlkb3duc2NhbGUgPSBNRFBfRE9XTlNDQUxFX1BUNFRPUFQ2OworCWVsc2UKKwkJZG93bnNjYWxlID0gTURQX0RPV05TQ0FMRV9QVDJUT1BUNDsKKwlpZiAoZG93bnNjYWxlICE9IGRvd25zY2FsZV95X3RhYmxlKSB7CisJCWxvYWRfc2NhbGVfdGFibGUobWRwLCBtZHBfZG93bnNjYWxlX3lfdGFibGVbZG93bnNjYWxlXSwgNjQpOworCQlkb3duc2NhbGVfeV90YWJsZSA9IGRvd25zY2FsZTsKKwl9CisKKwlyZWdzLT5waGFzZXhfaW5pdCA9IHBoYXNlX2luaXRfeDsKKwlyZWdzLT5waGFzZXlfaW5pdCA9IHBoYXNlX2luaXRfeTsKKwlyZWdzLT5waGFzZXhfc3RlcCA9IHBoYXNlX3N0ZXBfeDsKKwlyZWdzLT5waGFzZXlfc3RlcCA9IHBoYXNlX3N0ZXBfeTsKKwlyZWdzLT5vcCB8PSAoUFBQX09QX1NDQUxFX1lfT04gfCBQUFBfT1BfU0NBTEVfWF9PTik7CisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQgYmxpdF9ibHVyKGNvbnN0IHN0cnVjdCBtZHBfaW5mbyAqbWRwLCBzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsCisJCSAgICAgIHN0cnVjdCBtZHBfcmVncyAqcmVncykKK3sKKwlpZiAoIShyZXEtPmZsYWdzICYgTURQX0JMVVIpKQorCQlyZXR1cm47CisKKwlpZiAoIShkb3duc2NhbGVfeF90YWJsZSA9PSBNRFBfRE9XTlNDQUxFX0JMVVIgJiYKKwkgICAgICBkb3duc2NhbGVfeV90YWJsZSA9PSBNRFBfRE9XTlNDQUxFX0JMVVIpKSB7CisJCWxvYWRfc2NhbGVfdGFibGUobWRwLCBtZHBfZ2F1c3NpYW5fYmx1cl90YWJsZSwgMTI4KTsKKwkJZG93bnNjYWxlX3hfdGFibGUgPSBNRFBfRE9XTlNDQUxFX0JMVVI7CisJCWRvd25zY2FsZV95X3RhYmxlID0gTURQX0RPV05TQ0FMRV9CTFVSOworCX0KKworCXJlZ3MtPm9wIHw9IChQUFBfT1BfU0NBTEVfWV9PTiB8IFBQUF9PUF9TQ0FMRV9YX09OKTsKK30KKworCisjZGVmaW5lIElNR19MRU4ocmVjdF9oLCB3LCByZWN0X3csIGJwcCkgKCgocmVjdF9oKSAqIHcpICogYnBwKQorCisjZGVmaW5lIFlfVE9fQ1JDQl9SQVRJTyhmb3JtYXQpIFwKKwkoKGZvcm1hdCA9PSBNRFBfWV9DQkNSX0gyVjIgfHwgZm9ybWF0ID09IE1EUF9ZX0NSQ0JfSDJWMikgPyAgMiA6XAorCSAoZm9ybWF0ID09IE1EUF9ZX0NCQ1JfSDJWMSB8fCBmb3JtYXQgPT0gTURQX1lfQ1JDQl9IMlYxKSA/ICAxIDogMSkKKworc3RhdGljIHZvaWQgZ2V0X2xlbihzdHJ1Y3QgbWRwX2ltZyAqaW1nLCBzdHJ1Y3QgbWRwX3JlY3QgKnJlY3QsIHVpbnQzMl90IGJwcCwKKwkJICAgIHVpbnQzMl90ICpsZW4wLCB1aW50MzJfdCAqbGVuMSkKK3sKKwkqbGVuMCA9IElNR19MRU4ocmVjdC0+aCwgaW1nLT53aWR0aCwgcmVjdC0+dywgYnBwKTsKKwlpZiAoSVNfUFNFVURPUExOUihpbWctPmZvcm1hdCkpCisJCSpsZW4xID0gKmxlbjAvWV9UT19DUkNCX1JBVElPKGltZy0+Zm9ybWF0KTsKKwllbHNlCisJCSpsZW4xID0gMDsKK30KKworc3RhdGljIGludCB2YWxpZF9zcmNfZHN0KHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHNyY19sZW4sCisJCQkgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsIHVuc2lnbmVkIGxvbmcgZHN0X2xlbiwKKwkJCSBzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsIHN0cnVjdCBtZHBfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHNyY19taW5fb2sgPSBzcmNfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzcmNfbWF4X29rID0gc3JjX3N0YXJ0ICsgc3JjX2xlbjsKKwl1bnNpZ25lZCBsb25nIGRzdF9taW5fb2sgPSBkc3Rfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBkc3RfbWF4X29rID0gZHN0X3N0YXJ0ICsgZHN0X2xlbjsKKwl1aW50MzJfdCBzcmMwX2xlbiwgc3JjMV9sZW4sIGRzdDBfbGVuLCBkc3QxX2xlbjsKKwlnZXRfbGVuKCZyZXEtPnNyYywgJnJlcS0+c3JjX3JlY3QsIHJlZ3MtPnNyY19icHAsICZzcmMwX2xlbiwKKwkJICZzcmMxX2xlbik7CisJZ2V0X2xlbigmcmVxLT5kc3QsICZyZXEtPmRzdF9yZWN0LCByZWdzLT5kc3RfYnBwLCAmZHN0MF9sZW4sCisJCSAmZHN0MV9sZW4pOworCisJaWYgKHJlZ3MtPnNyYzAgPCBzcmNfbWluX29rIHx8IHJlZ3MtPnNyYzAgPiBzcmNfbWF4X29rIHx8CisJICAgIHJlZ3MtPnNyYzAgKyBzcmMwX2xlbiA+IHNyY19tYXhfb2spIHsKKwkJRExPRygiaW52YWxpZF9zcmMgJXggJXggJWx4ICVseFxuIiwgcmVncy0+c3JjMCwKKwkJICAgICAgc3JjMF9sZW4sIHNyY19taW5fb2ssIHNyY19tYXhfb2spOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHJlZ3MtPnNyY19jZmcgJiBQUFBfU1JDX1BMQU5FX1BTRVVET1BMTlIpIHsKKwkJaWYgKHJlZ3MtPnNyYzEgPCBzcmNfbWluX29rIHx8IHJlZ3MtPnNyYzEgPiBzcmNfbWF4X29rIHx8CisJCSAgICByZWdzLT5zcmMxICsgc3JjMV9sZW4gPiBzcmNfbWF4X29rKSB7CisJCQlETE9HKCJpbnZhbGlkX3NyYzEiKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmIChyZWdzLT5kc3QwIDwgZHN0X21pbl9vayB8fCByZWdzLT5kc3QwID4gZHN0X21heF9vayB8fAorCSAgICByZWdzLT5kc3QwICsgZHN0MF9sZW4gPiBkc3RfbWF4X29rKSB7CisJCURMT0coImludmFsaWRfZHN0Iik7CisJCXJldHVybiAwOworCX0KKwlpZiAocmVncy0+ZHN0X2NmZyAmIFBQUF9TUkNfUExBTkVfUFNFVURPUExOUikgeworCQlpZiAocmVncy0+ZHN0MSA8IGRzdF9taW5fb2sgfHwgcmVncy0+ZHN0MSA+IGRzdF9tYXhfb2sgfHwKKwkJICAgIHJlZ3MtPmRzdDEgKyBkc3QxX2xlbiA+IGRzdF9tYXhfb2spIHsKKwkJCURMT0coImludmFsaWRfZHN0MSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIHZvaWQgZmx1c2hfaW1ncyhzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsIHN0cnVjdCBtZHBfcmVncyAqcmVncywKKwkJICAgICAgIHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgc3RydWN0IGZpbGUgKmRzdF9maWxlKQoreworI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KKwl1aW50MzJfdCBzcmMwX2xlbiwgc3JjMV9sZW4sIGRzdDBfbGVuLCBkc3QxX2xlbjsKKworCS8qIGZsdXNoIHNyYyBpbWFnZXMgdG8gbWVtb3J5IGJlZm9yZSBkbWEgdG8gbWRwICovCisJZ2V0X2xlbigmcmVxLT5zcmMsICZyZXEtPnNyY19yZWN0LCByZWdzLT5zcmNfYnBwLCAmc3JjMF9sZW4sCisJCSZzcmMxX2xlbik7CisJZmx1c2hfcG1lbV9maWxlKHNyY19maWxlLCByZXEtPnNyYy5vZmZzZXQsIHNyYzBfbGVuKTsKKwlpZiAoSVNfUFNFVURPUExOUihyZXEtPnNyYy5mb3JtYXQpKQorCQlmbHVzaF9wbWVtX2ZpbGUoc3JjX2ZpbGUsIHJlcS0+c3JjLm9mZnNldCArIHNyYzBfbGVuLAorCQkJCXNyYzFfbGVuKTsKKworCS8qIGZsdXNoIGRzdCBpbWFnZXMgKi8KKwlnZXRfbGVuKCZyZXEtPmRzdCwgJnJlcS0+ZHN0X3JlY3QsIHJlZ3MtPmRzdF9icHAsICZkc3QwX2xlbiwKKwkJJmRzdDFfbGVuKTsKKwlmbHVzaF9wbWVtX2ZpbGUoZHN0X2ZpbGUsIHJlcS0+ZHN0Lm9mZnNldCwgZHN0MF9sZW4pOworCWlmIChJU19QU0VVRE9QTE5SKHJlcS0+ZHN0LmZvcm1hdCkpCisJCWZsdXNoX3BtZW1fZmlsZShkc3RfZmlsZSwgcmVxLT5kc3Qub2Zmc2V0ICsgZHN0MF9sZW4sCisJCQkJZHN0MV9sZW4pOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGdldF9jaHJvbWFfYWRkcihzdHJ1Y3QgbWRwX2ltZyAqaW1nLCBzdHJ1Y3QgbWRwX3JlY3QgKnJlY3QsCisJCQkgICAgdWludDMyX3QgYmFzZSwgdWludDMyX3QgYnBwLCB1aW50MzJfdCBjZmcsCisJCQkgICAgdWludDMyX3QgKmFkZHIsIHVpbnQzMl90ICp5c3RyaWRlKQoreworCXVpbnQzMl90IGNvbXByZXNzX3YgPSBZX1RPX0NSQ0JfUkFUSU8oaW1nLT5mb3JtYXQpOworCXVpbnQzMl90IGNvbXByZXNzX2ggPSAyOworCXVpbnQzMl90ICBvZmZzZXQ7CisKKwlpZiAoSVNfUFNFVURPUExOUihpbWctPmZvcm1hdCkpIHsKKwkJb2Zmc2V0ID0gKHJlY3QtPnggLyBjb21wcmVzc19oKSAqIGNvbXByZXNzX2g7CisJCW9mZnNldCArPSByZWN0LT55ID09IDAgPyAwIDoKKwkJCSAgKChyZWN0LT55ICsgMSkgLyBjb21wcmVzc192KSAqIGltZy0+d2lkdGg7CisJCSphZGRyID0gYmFzZSArIChpbWctPndpZHRoICogaW1nLT5oZWlnaHQgKiBicHApOworCQkqYWRkciArPSBvZmZzZXQgKiBicHA7CisJCSp5c3RyaWRlIHw9ICp5c3RyaWRlIDw8IDE2OworCX0gZWxzZSB7CisJCSphZGRyID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9ibGl0KGNvbnN0IHN0cnVjdCBtZHBfaW5mbyAqbWRwLCBzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsCisJCSAgICAgc3RydWN0IG1kcF9yZWdzICpyZWdzLCBzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsCisJCSAgICAgc3RydWN0IGZpbGUgKmRzdF9maWxlKQoreworCW1kcF93cml0ZWwobWRwLCAxLCAweDA2MCk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnNyY19yZWN0LCBQUFBfQUREUl9TUkNfUk9JKTsKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+c3JjMCwgUFBQX0FERFJfU1JDMCk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnNyYzEsIFBQUF9BRERSX1NSQzEpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5zcmNfeXN0cmlkZSwgUFBQX0FERFJfU1JDX1lTVFJJREUpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5zcmNfY2ZnLCBQUFBfQUREUl9TUkNfQ0ZHKTsKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+c3JjX3BhY2ssIFBQUF9BRERSX1NSQ19QQUNLX1BBVFRFUk4pOworCisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPm9wLCBQUFBfQUREUl9PUEVSQVRJT04pOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5waGFzZXhfaW5pdCwgUFBQX0FERFJfUEhBU0VYX0lOSVQpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5waGFzZXlfaW5pdCwgUFBQX0FERFJfUEhBU0VZX0lOSVQpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5waGFzZXhfc3RlcCwgUFBQX0FERFJfUEhBU0VYX1NURVApOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5waGFzZXlfc3RlcCwgUFBQX0FERFJfUEhBU0VZX1NURVApOworCisJbWRwX3dyaXRlbChtZHAsIChyZXEtPmFscGhhIDw8IDI0KSB8IChyZXEtPnRyYW5zcF9tYXNrICYgMHhmZmZmZmYpLAorCSAgICAgICBQUFBfQUREUl9BTFBIQV9UUkFOU1ApOworCisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmRzdF9jZmcsIFBQUF9BRERSX0RTVF9DRkcpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5kc3RfcGFjaywgUFBQX0FERFJfRFNUX1BBQ0tfUEFUVEVSTik7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmRzdF9yZWN0LCBQUFBfQUREUl9EU1RfUk9JKTsKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+ZHN0MCwgUFBQX0FERFJfRFNUMCk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmRzdDEsIFBQUF9BRERSX0RTVDEpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5kc3RfeXN0cmlkZSwgUFBQX0FERFJfRFNUX1lTVFJJREUpOworCisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmVkZ2UsIFBQUF9BRERSX0VER0UpOworCWlmIChyZWdzLT5vcCAmIFBQUF9PUF9CTEVORF9PTikgeworCQltZHBfd3JpdGVsKG1kcCwgcmVncy0+ZHN0MCwgUFBQX0FERFJfQkcwKTsKKwkJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmRzdDEsIFBQUF9BRERSX0JHMSk7CisJCW1kcF93cml0ZWwobWRwLCByZWdzLT5kc3RfeXN0cmlkZSwgUFBQX0FERFJfQkdfWVNUUklERSk7CisJCW1kcF93cml0ZWwobWRwLCBzcmNfaW1nX2NmZ1tyZXEtPmRzdC5mb3JtYXRdLCBQUFBfQUREUl9CR19DRkcpOworCQltZHBfd3JpdGVsKG1kcCwgcGFja19wYXR0ZXJuW3JlcS0+ZHN0LmZvcm1hdF0sCisJCQkgICBQUFBfQUREUl9CR19QQUNLX1BBVFRFUk4pOworCX0KKwlmbHVzaF9pbWdzKHJlcSwgcmVncywgc3JjX2ZpbGUsIGRzdF9maWxlKTsKKwltZHBfd3JpdGVsKG1kcCwgMHgxMDAwLCBNRFBfRElTUExBWTBfU1RBUlQpOworCXJldHVybiAwOworfQorCitpbnQgbWRwX3BwcF9ibGl0KGNvbnN0IHN0cnVjdCBtZHBfaW5mbyAqbWRwLCBzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsCisJCSBzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHNyY19sZW4sCisJCSBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LCB1bnNpZ25lZCBsb25nIGRzdF9sZW4pCit7CisJc3RydWN0IG1kcF9yZWdzIHJlZ3MgPSB7MH07CisKKwlpZiAodW5saWtlbHkocmVxLT5zcmMuZm9ybWF0ID49IE1EUF9JTUdUWVBFX0xJTUlUIHx8CisJCSAgICAgcmVxLT5kc3QuZm9ybWF0ID49IE1EUF9JTUdUWVBFX0xJTUlUKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IGltZyBpcyBvZiB3cm9uZyBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkocmVxLT5zcmNfcmVjdC54ID4gcmVxLT5zcmMud2lkdGggfHwKKwkJICAgICByZXEtPnNyY19yZWN0LnkgPiByZXEtPnNyYy5oZWlnaHQgfHwKKwkJICAgICByZXEtPmRzdF9yZWN0LnggPiByZXEtPmRzdC53aWR0aCB8fAorCQkgICAgIHJlcS0+ZHN0X3JlY3QueSA+IHJlcS0+ZHN0LmhlaWdodCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBpbWcgcmVjdCBpcyBvdXRzaWRlIG9mIGltZyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZXQgdGhlIHNyYyBpbWFnZSBjb25maWd1cmF0aW9uICovCisJcmVncy5zcmNfY2ZnID0gc3JjX2ltZ19jZmdbcmVxLT5zcmMuZm9ybWF0XTsKKwlyZWdzLnNyY19jZmcgfD0gKHJlcS0+c3JjX3JlY3QueCAmIDB4MSkgPyBQUFBfU1JDX0JQUF9ST0lfT0REX1ggOiAwOworCXJlZ3Muc3JjX2NmZyB8PSAocmVxLT5zcmNfcmVjdC55ICYgMHgxKSA/IFBQUF9TUkNfQlBQX1JPSV9PRERfWSA6IDA7CisJcmVncy5zcmNfcmVjdCA9IChyZXEtPnNyY19yZWN0LmggPDwgMTYpIHwgcmVxLT5zcmNfcmVjdC53OworCXJlZ3Muc3JjX3BhY2sgPSBwYWNrX3BhdHRlcm5bcmVxLT5zcmMuZm9ybWF0XTsKKworCS8qIHNldCB0aGUgZGVzdCBpbWFnZSBjb25maWd1cmF0aW9uICovCisJcmVncy5kc3RfY2ZnID0gZHN0X2ltZ19jZmdbcmVxLT5kc3QuZm9ybWF0XSB8IFBQUF9EU1RfT1VUX1NFTF9BWEk7CisJcmVncy5kc3RfcmVjdCA9IChyZXEtPmRzdF9yZWN0LmggPDwgMTYpIHwgcmVxLT5kc3RfcmVjdC53OworCXJlZ3MuZHN0X3BhY2sgPSBwYWNrX3BhdHRlcm5bcmVxLT5kc3QuZm9ybWF0XTsKKworCS8qIHNldCBzcmMsIGJwcCwgc3RhcnQgcGl4ZWwgYW5kIHlzdHJpZGUgKi8KKwlyZWdzLnNyY19icHAgPSBieXRlc19wZXJfcGl4ZWxbcmVxLT5zcmMuZm9ybWF0XTsKKwlyZWdzLnNyYzAgPSBzcmNfc3RhcnQgKyByZXEtPnNyYy5vZmZzZXQ7CisJcmVncy5zcmNfeXN0cmlkZSA9IHJlcS0+c3JjLndpZHRoICogcmVncy5zcmNfYnBwOworCWdldF9jaHJvbWFfYWRkcigmcmVxLT5zcmMsICZyZXEtPnNyY19yZWN0LCByZWdzLnNyYzAsIHJlZ3Muc3JjX2JwcCwKKwkJCXJlZ3Muc3JjX2NmZywgJnJlZ3Muc3JjMSwgJnJlZ3Muc3JjX3lzdHJpZGUpOworCXJlZ3Muc3JjMCArPSAocmVxLT5zcmNfcmVjdC54ICsgKHJlcS0+c3JjX3JlY3QueSAqIHJlcS0+c3JjLndpZHRoKSkgKgorCQkgICAgICByZWdzLnNyY19icHA7CisKKwkvKiBzZXQgZHN0LCBicHAsIHN0YXJ0IHBpeGVsIGFuZCB5c3RyaWRlICovCisJcmVncy5kc3RfYnBwID0gYnl0ZXNfcGVyX3BpeGVsW3JlcS0+ZHN0LmZvcm1hdF07CisJcmVncy5kc3QwID0gZHN0X3N0YXJ0ICsgcmVxLT5kc3Qub2Zmc2V0OworCXJlZ3MuZHN0X3lzdHJpZGUgPSByZXEtPmRzdC53aWR0aCAqIHJlZ3MuZHN0X2JwcDsKKwlnZXRfY2hyb21hX2FkZHIoJnJlcS0+ZHN0LCAmcmVxLT5kc3RfcmVjdCwgcmVncy5kc3QwLCByZWdzLmRzdF9icHAsCisJCQlyZWdzLmRzdF9jZmcsICZyZWdzLmRzdDEsICZyZWdzLmRzdF95c3RyaWRlKTsKKwlyZWdzLmRzdDAgKz0gKHJlcS0+ZHN0X3JlY3QueCArIChyZXEtPmRzdF9yZWN0LnkgKiByZXEtPmRzdC53aWR0aCkpICoKKwkJICAgICAgcmVncy5kc3RfYnBwOworCisJaWYgKCF2YWxpZF9zcmNfZHN0KHNyY19zdGFydCwgc3JjX2xlbiwgZHN0X3N0YXJ0LCBkc3RfbGVuLCByZXEsCisJCQkgICAmcmVncykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBmaW5hbCBzcmMgb3IgZHN0IGxvY2F0aW9uIGlzICIKKwkJCSJpbnZhbGlkLCBhcmUgeW91IHRyeWluZyB0byBtYWtlIGFuIGltYWdlIHRvbyBsYXJnZSAiCisJCQkib3IgdG8gcGxhY2UgaXQgb3V0c2lkZSB0aGUgc2NyZWVuP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNldCB1cCBvcGVyYXRpb24gcmVnaXN0ZXIgKi8KKwlyZWdzLm9wID0gMDsKKwlibGl0X3JvdGF0ZShyZXEsICZyZWdzKTsKKwlibGl0X2NvbnZlcnQocmVxLCAmcmVncyk7CisJaWYgKHJlcS0+ZmxhZ3MgJiBNRFBfRElUSEVSKQorCQlyZWdzLm9wIHw9IFBQUF9PUF9ESVRIRVJfRU47CisJYmxpdF9ibGVuZChyZXEsICZyZWdzKTsKKwlpZiAoYmxpdF9zY2FsZShtZHAsIHJlcSwgJnJlZ3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXBkX3BwcDogZXJyb3IgY29tcHV0aW5nIHNjYWxlIGZvciBpbWcuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWJsaXRfYmx1cihtZHAsIHJlcSwgJnJlZ3MpOworCXJlZ3Mub3AgfD0gZHN0X29wX2Nocm9tYVtyZXEtPmRzdC5mb3JtYXRdIHwKKwkJICAgc3JjX29wX2Nocm9tYVtyZXEtPnNyYy5mb3JtYXRdOworCisJLyogaWYgdGhlIGltYWdlIGlzIFlDUllDQiwgdGhlIHggYW5kIHcgbXVzdCBiZSBldmVuICovCisJaWYgKHVubGlrZWx5KHJlcS0+c3JjLmZvcm1hdCA9PSBNRFBfWUNSWUNCX0gyVjEpKSB7CisJCXJlcS0+c3JjX3JlY3QueCA9IHJlcS0+c3JjX3JlY3QueCAmICh+MHgxKTsKKwkJcmVxLT5zcmNfcmVjdC53ID0gcmVxLT5zcmNfcmVjdC53ICYgKH4weDEpOworCQlyZXEtPmRzdF9yZWN0LnggPSByZXEtPmRzdF9yZWN0LnggJiAofjB4MSk7CisJCXJlcS0+ZHN0X3JlY3QudyA9IHJlcS0+ZHN0X3JlY3QudyAmICh+MHgxKTsKKwl9CisJaWYgKGdldF9lZGdlX2NvbmQocmVxLCAmcmVncykpCisJCXJldHVybiAtRUlOVkFMOworCisJc2VuZF9ibGl0KG1kcCwgcmVxLCAmcmVncywgc3JjX2ZpbGUsIGRzdF9maWxlKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9zY2FsZV90YWJsZXMuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9zY2FsZV90YWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQ3ODNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3NjYWxlX3RhYmxlcy5jCkBAIC0wLDAgKzEsNzY2IEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZHBfc2NhbGVfdGFibGVzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgIm1kcF9zY2FsZV90YWJsZXMuaCIKKyNpbmNsdWRlICJtZHBfaHcuaCIKKworc3RydWN0IG1kcF90YWJsZV9lbnRyeSBtZHBfdXBzY2FsZV90YWJsZVtdID0geworCXsgMHg1ZmZmYywgMHgwIH0sCisJeyAweDUwMjAwLCAweDdmYzAwMDAwIH0sCisJeyAweDVmZmZjLCAweGZmODAwMDBkIH0sCisJeyAweDUwMjA0LCAweDdlYzAwM2Y5IH0sCisJeyAweDVmZmZjLCAweGZlYzAwMDFjIH0sCisJeyAweDUwMjA4LCAweDdkNDAwM2YzIH0sCisJeyAweDVmZmZjLCAweGZlNDAwMDJiIH0sCisJeyAweDUwMjBjLCAweDdiODAwM2VkIH0sCisJeyAweDVmZmZjLCAweGZkODAwMDNjIH0sCisJeyAweDUwMjEwLCAweDc5NDAwM2U4IH0sCisJeyAweDVmZmZjLCAweGZjYzAwMDRkIH0sCisJeyAweDUwMjE0LCAweDc2YzAwM2U0IH0sCisJeyAweDVmZmZjLCAweGZjNDAwMDVmIH0sCisJeyAweDUwMjE4LCAweDczYzAwM2UwIH0sCisJeyAweDVmZmZjLCAweGZiODAwMDcxIH0sCisJeyAweDUwMjFjLCAweDcwODAwM2RlIH0sCisJeyAweDVmZmZjLCAweGZhYzAwMDg1IH0sCisJeyAweDUwMjIwLCAweDZkMDAwM2RiIH0sCisJeyAweDVmZmZjLCAweGZhMDAwMDk4IH0sCisJeyAweDUwMjI0LCAweDY5ODAwM2Q5IH0sCisJeyAweDVmZmZjLCAweGY5ODAwMGFjIH0sCisJeyAweDUwMjI4LCAweDY1NDAwM2Q4IH0sCisJeyAweDVmZmZjLCAweGY4YzAwMGMxIH0sCisJeyAweDUwMjJjLCAweDYxMDAwM2Q3IH0sCisJeyAweDVmZmZjLCAweGY4NDAwMGQ1IH0sCisJeyAweDUwMjMwLCAweDVjODAwM2Q3IH0sCisJeyAweDVmZmZjLCAweGY3YzAwMGU5IH0sCisJeyAweDUwMjM0LCAweDU4MDAwM2Q3IH0sCisJeyAweDVmZmZjLCAweGY3NDAwMGZkIH0sCisJeyAweDUwMjM4LCAweDUzNDAwM2Q4IH0sCisJeyAweDVmZmZjLCAweGY2YzAwMTEyIH0sCisJeyAweDUwMjNjLCAweDRlODAwM2Q4IH0sCisJeyAweDVmZmZjLCAweGY2ODAwMTI2IH0sCisJeyAweDUwMjQwLCAweDQ5NDAwM2RhIH0sCisJeyAweDVmZmZjLCAweGY2MDAwMTNhIH0sCisJeyAweDUwMjQ0LCAweDQ0ODAwM2RiIH0sCisJeyAweDVmZmZjLCAweGY2MDAwMTRkIH0sCisJeyAweDUwMjQ4LCAweDNmNDAwM2RkIH0sCisJeyAweDVmZmZjLCAweGY1YzAwMTYwIH0sCisJeyAweDUwMjRjLCAweDNhNDAwM2RmIH0sCisJeyAweDVmZmZjLCAweGY1YzAwMTcyIH0sCisJeyAweDUwMjUwLCAweDM1NDAwM2UxIH0sCisJeyAweDVmZmZjLCAweGY1YzAwMTg0IH0sCisJeyAweDUwMjU0LCAweDMwNDAwM2UzIH0sCisJeyAweDVmZmZjLCAweGY2MDAwMTk1IH0sCisJeyAweDUwMjU4LCAweDJiMDAwM2U2IH0sCisJeyAweDVmZmZjLCAweGY2NDAwMWE2IH0sCisJeyAweDUwMjVjLCAweDI2MDAwM2U4IH0sCisJeyAweDVmZmZjLCAweGY2YzAwMWI0IH0sCisJeyAweDUwMjYwLCAweDIxNDAwM2ViIH0sCisJeyAweDVmZmZjLCAweGY3ODAwMWMyIH0sCisJeyAweDUwMjY0LCAweDFjNDAwM2VlIH0sCisJeyAweDVmZmZjLCAweGY4MDAwMWNmIH0sCisJeyAweDUwMjY4LCAweDE3YzAwM2YxIH0sCisJeyAweDVmZmZjLCAweGY5MDAwMWRiIH0sCisJeyAweDUwMjZjLCAweDEzNDAwM2YzIH0sCisJeyAweDVmZmZjLCAweGZhMDAwMWU1IH0sCisJeyAweDUwMjcwLCAweGYwMDAzZjYgfSwKKwl7IDB4NWZmZmMsIDB4ZmI0MDAxZWUgfSwKKwl7IDB4NTAyNzQsIDB4YWMwMDNmOSB9LAorCXsgMHg1ZmZmYywgMHhmY2MwMDFmNSB9LAorCXsgMHg1MDI3OCwgMHg3MDAwM2ZiIH0sCisJeyAweDVmZmZjLCAweGZlNDAwMWZiIH0sCisJeyAweDUwMjdjLCAweDM0MDAzZmUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF9kb3duc2NhbGVfeF90YWJsZV9QVDJUT1BUNFtdID0geworCXsgMHg1ZmZmYywgMHg3NDAwMDhjIH0sCisJeyAweDUwMjgwLCAweDMzODAwMDg4IH0sCisJeyAweDVmZmZjLCAweDgwMDAwOGUgfSwKKwl7IDB4NTAyODQsIDB4MzM0MDAwODQgfSwKKwl7IDB4NWZmZmMsIDB4ODQwMDA5MiB9LAorCXsgMHg1MDI4OCwgMHgzMzAwMDA4MCB9LAorCXsgMHg1ZmZmYywgMHg5MDAwMDk0IH0sCisJeyAweDUwMjhjLCAweDMzMDAwMDdiIH0sCisJeyAweDVmZmZjLCAweDljMDAwOTggfSwKKwl7IDB4NTAyOTAsIDB4MzI0MDAwNzcgfSwKKwl7IDB4NWZmZmMsIDB4YTQwMDA5YiB9LAorCXsgMHg1MDI5NCwgMHgzMjAwMDA3MyB9LAorCXsgMHg1ZmZmYywgMHhiMDAwMDlkIH0sCisJeyAweDUwMjk4LCAgMHgzMWMwMDA2ZiB9LAorCXsgMHg1ZmZmYywgIDB4YmMwMDBhMCB9LAorCXsgMHg1MDI5YywgIDB4MzE0MDAwNmIgfSwKKwl7IDB4NWZmZmMsICAweGM4MDAwYTIgfSwKKwl7IDB4NTAyYTAsICAweDMxMDAwMDY3IH0sCisJeyAweDVmZmZjLCAgMHhkODAwMGE1IH0sCisJeyAweDUwMmE0LCAgMHgzMDgwMDA2MiB9LAorCXsgMHg1ZmZmYywgIDB4ZTQwMDBhOCB9LAorCXsgMHg1MDJhOCwgIDB4MmZjMDAwNWYgfSwKKwl7IDB4NWZmZmMsICAweGVjMDAwYWEgfSwKKwl7IDB4NTAyYWMsICAweDJmYzAwMDViIH0sCisJeyAweDVmZmZjLCAgMHhmODAwMGFkIH0sCisJeyAweDUwMmIwLCAgMHgyZjQwMDA1NyB9LAorCXsgMHg1ZmZmYywgIDB4MTA4MDAwYjAgfSwKKwl7IDB4NTAyYjQsICAweDJlNDAwMDU0IH0sCisJeyAweDVmZmZjLCAgMHgxMTQwMDBiMiB9LAorCXsgMHg1MDJiOCwgIDB4MmUwMDAwNTAgfSwKKwl7IDB4NWZmZmMsICAweDEyNDAwMGI0IH0sCisJeyAweDUwMmJjLCAgMHgyZDgwMDA0YyB9LAorCXsgMHg1ZmZmYywgIDB4MTMwMDAwYjYgfSwKKwl7IDB4NTAyYzAsICAweDJkMDAwMDQ5IH0sCisJeyAweDVmZmZjLCAgMHgxNDAwMDBiOCB9LAorCXsgMHg1MDJjNCwgIDB4MmM4MDAwNDUgfSwKKwl7IDB4NWZmZmMsICAweDE1MDAwMGI5IH0sCisJeyAweDUwMmM4LCAgMHgyYzAwMDA0MiB9LAorCXsgMHg1ZmZmYywgIDB4MTVjMDAwYmQgfSwKKwl7IDB4NTAyY2MsICAweDJiNDAwMDNlIH0sCisJeyAweDVmZmZjLCAgMHgxNmMwMDBiZiB9LAorCXsgMHg1MDJkMCwgIDB4MmE4MDAwM2IgfSwKKwl7IDB4NWZmZmMsICAweDE3YzAwMGJmIH0sCisJeyAweDUwMmQ0LCAgMHgyYTAwMDAzOSB9LAorCXsgMHg1ZmZmYywgIDB4MTg4MDAwYzIgfSwKKwl7IDB4NTAyZDgsICAweDI5NDAwMDM2IH0sCisJeyAweDVmZmZjLCAgMHgxOWMwMDBjNCB9LAorCXsgMHg1MDJkYywgIDB4Mjg4MDAwMzIgfSwKKwl7IDB4NWZmZmMsICAweDFhYzAwMGM1IH0sCisJeyAweDUwMmUwLCAgMHgyODAwMDAyZiB9LAorCXsgMHg1ZmZmYywgIDB4MWJjMDAwYzcgfSwKKwl7IDB4NTAyZTQsICAweDI3NDAwMDJjIH0sCisJeyAweDVmZmZjLCAgMHgxY2MwMDBjOCB9LAorCXsgMHg1MDJlOCwgIDB4MjZjMDAwMjkgfSwKKwl7IDB4NWZmZmMsICAweDFkYzAwMGM5IH0sCisJeyAweDUwMmVjLCAgMHgyNjAwMDAyNyB9LAorCXsgMHg1ZmZmYywgIDB4MWVjMDAwY2MgfSwKKwl7IDB4NTAyZjAsICAweDI1MDAwMDI0IH0sCisJeyAweDVmZmZjLCAgMHgyMDAwMDBjYyB9LAorCXsgMHg1MDJmNCwgIDB4MjQ4MDAwMjEgfSwKKwl7IDB4NWZmZmMsICAweDIxMDAwMGNkIH0sCisJeyAweDUwMmY4LCAgMHgyMzgwMDAyMCB9LAorCXsgMHg1ZmZmYywgIDB4MjIwMDAwY2UgfSwKKwl7IDB4NTAyZmMsICAweDIzMDAwMDFkIH0sCit9OworCitzdGF0aWMgc3RydWN0IG1kcF90YWJsZV9lbnRyeSBtZHBfZG93bnNjYWxlX3hfdGFibGVfUFQ0VE9QVDZbXSA9IHsKKwl7IDB4NWZmZmMsICAweDc0MDAwOGMgfSwKKwl7IDB4NTAyODAsICAweDMzODAwMDg4IH0sCisJeyAweDVmZmZjLCAgMHg4MDAwMDhlIH0sCisJeyAweDUwMjg0LCAgMHgzMzQwMDA4NCB9LAorCXsgMHg1ZmZmYywgIDB4ODQwMDA5MiB9LAorCXsgMHg1MDI4OCwgIDB4MzMwMDAwODAgfSwKKwl7IDB4NWZmZmMsICAweDkwMDAwOTQgfSwKKwl7IDB4NTAyOGMsICAweDMzMDAwMDdiIH0sCisJeyAweDVmZmZjLCAgMHg5YzAwMDk4IH0sCisJeyAweDUwMjkwLCAgMHgzMjQwMDA3NyB9LAorCXsgMHg1ZmZmYywgIDB4YTQwMDA5YiB9LAorCXsgMHg1MDI5NCwgIDB4MzIwMDAwNzMgfSwKKwl7IDB4NWZmZmMsICAweGIwMDAwOWQgfSwKKwl7IDB4NTAyOTgsICAweDMxYzAwMDZmIH0sCisJeyAweDVmZmZjLCAgMHhiYzAwMGEwIH0sCisJeyAweDUwMjljLCAgMHgzMTQwMDA2YiB9LAorCXsgMHg1ZmZmYywgIDB4YzgwMDBhMiB9LAorCXsgMHg1MDJhMCwgIDB4MzEwMDAwNjcgfSwKKwl7IDB4NWZmZmMsICAweGQ4MDAwYTUgfSwKKwl7IDB4NTAyYTQsICAweDMwODAwMDYyIH0sCisJeyAweDVmZmZjLCAgMHhlNDAwMGE4IH0sCisJeyAweDUwMmE4LCAgMHgyZmMwMDA1ZiB9LAorCXsgMHg1ZmZmYywgIDB4ZWMwMDBhYSB9LAorCXsgMHg1MDJhYywgIDB4MmZjMDAwNWIgfSwKKwl7IDB4NWZmZmMsICAweGY4MDAwYWQgfSwKKwl7IDB4NTAyYjAsICAweDJmNDAwMDU3IH0sCisJeyAweDVmZmZjLCAgMHgxMDgwMDBiMCB9LAorCXsgMHg1MDJiNCwgIDB4MmU0MDAwNTQgfSwKKwl7IDB4NWZmZmMsICAweDExNDAwMGIyIH0sCisJeyAweDUwMmI4LCAgMHgyZTAwMDA1MCB9LAorCXsgMHg1ZmZmYywgIDB4MTI0MDAwYjQgfSwKKwl7IDB4NTAyYmMsICAweDJkODAwMDRjIH0sCisJeyAweDVmZmZjLCAgMHgxMzAwMDBiNiB9LAorCXsgMHg1MDJjMCwgIDB4MmQwMDAwNDkgfSwKKwl7IDB4NWZmZmMsICAweDE0MDAwMGI4IH0sCisJeyAweDUwMmM0LCAgMHgyYzgwMDA0NSB9LAorCXsgMHg1ZmZmYywgIDB4MTUwMDAwYjkgfSwKKwl7IDB4NTAyYzgsICAweDJjMDAwMDQyIH0sCisJeyAweDVmZmZjLCAgMHgxNWMwMDBiZCB9LAorCXsgMHg1MDJjYywgIDB4MmI0MDAwM2UgfSwKKwl7IDB4NWZmZmMsICAweDE2YzAwMGJmIH0sCisJeyAweDUwMmQwLCAgMHgyYTgwMDAzYiB9LAorCXsgMHg1ZmZmYywgIDB4MTdjMDAwYmYgfSwKKwl7IDB4NTAyZDQsICAweDJhMDAwMDM5IH0sCisJeyAweDVmZmZjLCAgMHgxODgwMDBjMiB9LAorCXsgMHg1MDJkOCwgIDB4Mjk0MDAwMzYgfSwKKwl7IDB4NWZmZmMsICAweDE5YzAwMGM0IH0sCisJeyAweDUwMmRjLCAgMHgyODgwMDAzMiB9LAorCXsgMHg1ZmZmYywgIDB4MWFjMDAwYzUgfSwKKwl7IDB4NTAyZTAsICAweDI4MDAwMDJmIH0sCisJeyAweDVmZmZjLCAgMHgxYmMwMDBjNyB9LAorCXsgMHg1MDJlNCwgIDB4Mjc0MDAwMmMgfSwKKwl7IDB4NWZmZmMsICAweDFjYzAwMGM4IH0sCisJeyAweDUwMmU4LCAgMHgyNmMwMDAyOSB9LAorCXsgMHg1ZmZmYywgIDB4MWRjMDAwYzkgfSwKKwl7IDB4NTAyZWMsICAweDI2MDAwMDI3IH0sCisJeyAweDVmZmZjLCAgMHgxZWMwMDBjYyB9LAorCXsgMHg1MDJmMCwgIDB4MjUwMDAwMjQgfSwKKwl7IDB4NWZmZmMsICAweDIwMDAwMGNjIH0sCisJeyAweDUwMmY0LCAgMHgyNDgwMDAyMSB9LAorCXsgMHg1ZmZmYywgIDB4MjEwMDAwY2QgfSwKKwl7IDB4NTAyZjgsICAweDIzODAwMDIwIH0sCisJeyAweDVmZmZjLCAgMHgyMjAwMDBjZSB9LAorCXsgMHg1MDJmYywgIDB4MjMwMDAwMWQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF9kb3duc2NhbGVfeF90YWJsZV9QVDZUT1BUOFtdID0geworCXsgMHg1ZmZmYywgIDB4ZmUwMDAwNzAgfSwKKwl7IDB4NTAyODAsICAweDRiYzAwMDY4IH0sCisJeyAweDVmZmZjLCAgMHhmZTAwMDA3OCB9LAorCXsgMHg1MDI4NCwgIDB4NGJjMDAwNjAgfSwKKwl7IDB4NWZmZmMsICAweGZlMDAwMDgwIH0sCisJeyAweDUwMjg4LCAgMHg0YjgwMDA1OSB9LAorCXsgMHg1ZmZmYywgIDB4ZmUwMDAwODkgfSwKKwl7IDB4NTAyOGMsICAweDRiMDAwMDUyIH0sCisJeyAweDVmZmZjLCAgMHhmZTQwMDA5MSB9LAorCXsgMHg1MDI5MCwgIDB4NGE4MDAwNGIgfSwKKwl7IDB4NWZmZmMsICAweGZlNDAwMDlhIH0sCisJeyAweDUwMjk0LCAgMHg0YTAwMDA0NCB9LAorCXsgMHg1ZmZmYywgIDB4ZmU4MDAwYTMgfSwKKwl7IDB4NTAyOTgsICAweDQ5NDAwMDNkIH0sCisJeyAweDVmZmZjLCAgMHhmZWMwMDBhYyB9LAorCXsgMHg1MDI5YywgIDB4NDg0MDAwMzcgfSwKKwl7IDB4NWZmZmMsICAweGZmMDAwMGI0IH0sCisJeyAweDUwMmEwLCAgMHg0NzgwMDAzMSB9LAorCXsgMHg1ZmZmYywgIDB4ZmY4MDAwYmQgfSwKKwl7IDB4NTAyYTQsICAweDQ2NDAwMDJiIH0sCisJeyAweDVmZmZjLCAgMHhjNSB9LAorCXsgMHg1MDJhOCwgIDB4NDUwMDAwMjYgfSwKKwl7IDB4NWZmZmMsICAweDgwMDBjZSB9LAorCXsgMHg1MDJhYywgIDB4NDM4MDAwMjEgfSwKKwl7IDB4NWZmZmMsICAweDEwMDAwZDYgfSwKKwl7IDB4NTAyYjAsICAweDQyNDAwMDFjIH0sCisJeyAweDVmZmZjLCAgMHgxODAwMGRmIH0sCisJeyAweDUwMmI0LCAgMHg0MDgwMDAxOCB9LAorCXsgMHg1ZmZmYywgIDB4MjQwMDBlNiB9LAorCXsgMHg1MDJiOCwgIDB4M2YwMDAwMTQgfSwKKwl7IDB4NWZmZmMsICAweDMwMDAwZWUgfSwKKwl7IDB4NTAyYmMsICAweDNkNDAwMDEwIH0sCisJeyAweDVmZmZjLCAgMHg0MDAwMGY1IH0sCisJeyAweDUwMmMwLCAgMHgzYjgwMDAwYyB9LAorCXsgMHg1ZmZmYywgIDB4NTAwMDBmYyB9LAorCXsgMHg1MDJjNCwgIDB4Mzk4MDAwMDkgfSwKKwl7IDB4NWZmZmMsICAweDYwMDAxMDIgfSwKKwl7IDB4NTAyYzgsICAweDM3YzAwMDA2IH0sCisJeyAweDVmZmZjLCAgMHg3MDAwMTA5IH0sCisJeyAweDUwMmNjLCAgMHgzNTgwMDAwNCB9LAorCXsgMHg1ZmZmYywgIDB4ODQwMDEwZSB9LAorCXsgMHg1MDJkMCwgIDB4MzM4MDAwMDIgfSwKKwl7IDB4NWZmZmMsICAweDk4MDAxMTQgfSwKKwl7IDB4NTAyZDQsICAweDMxNDAwMDAwIH0sCisJeyAweDVmZmZjLCAgMHhhYzAwMTE5IH0sCisJeyAweDUwMmQ4LCAgMHgyZjQwMDNmZSB9LAorCXsgMHg1ZmZmYywgIDB4YzQwMDExZSB9LAorCXsgMHg1MDJkYywgIDB4MmQwMDAzZmMgfSwKKwl7IDB4NWZmZmMsICAweGRjMDAxMjEgfSwKKwl7IDB4NTAyZTAsICAweDJiMDAwM2ZiIH0sCisJeyAweDVmZmZjLCAgMHhmNDAwMTI1IH0sCisJeyAweDUwMmU0LCAgMHgyOGMwMDNmYSB9LAorCXsgMHg1ZmZmYywgIDB4MTEwMDAxMjggfSwKKwl7IDB4NTAyZTgsICAweDI2ODAwM2Y5IH0sCisJeyAweDVmZmZjLCAgMHgxMmMwMDEyYSB9LAorCXsgMHg1MDJlYywgIDB4MjQ0MDAzZjkgfSwKKwl7IDB4NWZmZmMsICAweDE0ODAwMTJjIH0sCisJeyAweDUwMmYwLCAgMHgyMjQwMDNmOCB9LAorCXsgMHg1ZmZmYywgIDB4MTY0MDAxMmUgfSwKKwl7IDB4NTAyZjQsICAweDIwMDAwM2Y4IH0sCisJeyAweDVmZmZjLCAgMHgxODAwMDEyZiB9LAorCXsgMHg1MDJmOCwgIDB4MWUwMDAzZjggfSwKKwl7IDB4NWZmZmMsICAweDFhMDAwMTJmIH0sCisJeyAweDUwMmZjLCAgMHgxYzAwMDNmOCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2Rvd25zY2FsZV94X3RhYmxlX1BUOFRPMVtdID0geworCXsgMHg1ZmZmYywgIDB4MCB9LAorCXsgMHg1MDI4MCwgIDB4N2ZjMDAwMDAgfSwKKwl7IDB4NWZmZmMsICAweGZmODAwMDBkIH0sCisJeyAweDUwMjg0LCAgMHg3ZWMwMDNmOSB9LAorCXsgMHg1ZmZmYywgIDB4ZmVjMDAwMWMgfSwKKwl7IDB4NTAyODgsICAweDdkNDAwM2YzIH0sCisJeyAweDVmZmZjLCAgMHhmZTQwMDAyYiB9LAorCXsgMHg1MDI4YywgIDB4N2I4MDAzZWQgfSwKKwl7IDB4NWZmZmMsICAweGZkODAwMDNjIH0sCisJeyAweDUwMjkwLCAgMHg3OTQwMDNlOCB9LAorCXsgMHg1ZmZmYywgIDB4ZmNjMDAwNGQgfSwKKwl7IDB4NTAyOTQsICAweDc2YzAwM2U0IH0sCisJeyAweDVmZmZjLCAgMHhmYzQwMDA1ZiB9LAorCXsgMHg1MDI5OCwgIDB4NzNjMDAzZTAgfSwKKwl7IDB4NWZmZmMsICAweGZiODAwMDcxIH0sCisJeyAweDUwMjljLCAgMHg3MDgwMDNkZSB9LAorCXsgMHg1ZmZmYywgIDB4ZmFjMDAwODUgfSwKKwl7IDB4NTAyYTAsICAweDZkMDAwM2RiIH0sCisJeyAweDVmZmZjLCAgMHhmYTAwMDA5OCB9LAorCXsgMHg1MDJhNCwgIDB4Njk4MDAzZDkgfSwKKwl7IDB4NWZmZmMsICAweGY5ODAwMGFjIH0sCisJeyAweDUwMmE4LCAgMHg2NTQwMDNkOCB9LAorCXsgMHg1ZmZmYywgIDB4ZjhjMDAwYzEgfSwKKwl7IDB4NTAyYWMsICAweDYxMDAwM2Q3IH0sCisJeyAweDVmZmZjLCAgMHhmODQwMDBkNSB9LAorCXsgMHg1MDJiMCwgIDB4NWM4MDAzZDcgfSwKKwl7IDB4NWZmZmMsICAweGY3YzAwMGU5IH0sCisJeyAweDUwMmI0LCAgMHg1ODAwMDNkNyB9LAorCXsgMHg1ZmZmYywgIDB4Zjc0MDAwZmQgfSwKKwl7IDB4NTAyYjgsICAweDUzNDAwM2Q4IH0sCisJeyAweDVmZmZjLCAgMHhmNmMwMDExMiB9LAorCXsgMHg1MDJiYywgIDB4NGU4MDAzZDggfSwKKwl7IDB4NWZmZmMsICAweGY2ODAwMTI2IH0sCisJeyAweDUwMmMwLCAgMHg0OTQwMDNkYSB9LAorCXsgMHg1ZmZmYywgIDB4ZjYwMDAxM2EgfSwKKwl7IDB4NTAyYzQsICAweDQ0ODAwM2RiIH0sCisJeyAweDVmZmZjLCAgMHhmNjAwMDE0ZCB9LAorCXsgMHg1MDJjOCwgIDB4M2Y0MDAzZGQgfSwKKwl7IDB4NWZmZmMsICAweGY1YzAwMTYwIH0sCisJeyAweDUwMmNjLCAgMHgzYTQwMDNkZiB9LAorCXsgMHg1ZmZmYywgIDB4ZjVjMDAxNzIgfSwKKwl7IDB4NTAyZDAsICAweDM1NDAwM2UxIH0sCisJeyAweDVmZmZjLCAgMHhmNWMwMDE4NCB9LAorCXsgMHg1MDJkNCwgIDB4MzA0MDAzZTMgfSwKKwl7IDB4NWZmZmMsICAweGY2MDAwMTk1IH0sCisJeyAweDUwMmQ4LCAgMHgyYjAwMDNlNiB9LAorCXsgMHg1ZmZmYywgIDB4ZjY0MDAxYTYgfSwKKwl7IDB4NTAyZGMsICAweDI2MDAwM2U4IH0sCisJeyAweDVmZmZjLCAgMHhmNmMwMDFiNCB9LAorCXsgMHg1MDJlMCwgIDB4MjE0MDAzZWIgfSwKKwl7IDB4NWZmZmMsICAweGY3ODAwMWMyIH0sCisJeyAweDUwMmU0LCAgMHgxYzQwMDNlZSB9LAorCXsgMHg1ZmZmYywgIDB4ZjgwMDAxY2YgfSwKKwl7IDB4NTAyZTgsICAweDE3YzAwM2YxIH0sCisJeyAweDVmZmZjLCAgMHhmOTAwMDFkYiB9LAorCXsgMHg1MDJlYywgIDB4MTM0MDAzZjMgfSwKKwl7IDB4NWZmZmMsICAweGZhMDAwMWU1IH0sCisJeyAweDUwMmYwLCAgMHhmMDAwM2Y2IH0sCisJeyAweDVmZmZjLCAgMHhmYjQwMDFlZSB9LAorCXsgMHg1MDJmNCwgIDB4YWMwMDNmOSB9LAorCXsgMHg1ZmZmYywgIDB4ZmNjMDAxZjUgfSwKKwl7IDB4NTAyZjgsICAweDcwMDAzZmIgfSwKKwl7IDB4NWZmZmMsICAweGZlNDAwMWZiIH0sCisJeyAweDUwMmZjLCAgMHgzNDAwM2ZlIH0sCit9OworCitzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5ICptZHBfZG93bnNjYWxlX3hfdGFibGVbTURQX0RPV05TQ0FMRV9NQVhdID0geworCVtNRFBfRE9XTlNDQUxFX1BUMlRPUFQ0XSA9IG1kcF9kb3duc2NhbGVfeF90YWJsZV9QVDJUT1BUNCwKKwlbTURQX0RPV05TQ0FMRV9QVDRUT1BUNl0gPSBtZHBfZG93bnNjYWxlX3hfdGFibGVfUFQ0VE9QVDYsCisJW01EUF9ET1dOU0NBTEVfUFQ2VE9QVDhdID0gbWRwX2Rvd25zY2FsZV94X3RhYmxlX1BUNlRPUFQ4LAorCVtNRFBfRE9XTlNDQUxFX1BUOFRPMV0gID0gbWRwX2Rvd25zY2FsZV94X3RhYmxlX1BUOFRPMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF9kb3duc2NhbGVfeV90YWJsZV9QVDJUT1BUNFtdID0geworCXsgMHg1ZmZmYywgIDB4NzQwMDA4YyB9LAorCXsgMHg1MDMwMCwgIDB4MzM4MDAwODggfSwKKwl7IDB4NWZmZmMsICAweDgwMDAwOGUgfSwKKwl7IDB4NTAzMDQsICAweDMzNDAwMDg0IH0sCisJeyAweDVmZmZjLCAgMHg4NDAwMDkyIH0sCisJeyAweDUwMzA4LCAgMHgzMzAwMDA4MCB9LAorCXsgMHg1ZmZmYywgIDB4OTAwMDA5NCB9LAorCXsgMHg1MDMwYywgIDB4MzMwMDAwN2IgfSwKKwl7IDB4NWZmZmMsICAweDljMDAwOTggfSwKKwl7IDB4NTAzMTAsICAweDMyNDAwMDc3IH0sCisJeyAweDVmZmZjLCAgMHhhNDAwMDliIH0sCisJeyAweDUwMzE0LCAgMHgzMjAwMDA3MyB9LAorCXsgMHg1ZmZmYywgIDB4YjAwMDA5ZCB9LAorCXsgMHg1MDMxOCwgIDB4MzFjMDAwNmYgfSwKKwl7IDB4NWZmZmMsICAweGJjMDAwYTAgfSwKKwl7IDB4NTAzMWMsICAweDMxNDAwMDZiIH0sCisJeyAweDVmZmZjLCAgMHhjODAwMGEyIH0sCisJeyAweDUwMzIwLCAgMHgzMTAwMDA2NyB9LAorCXsgMHg1ZmZmYywgIDB4ZDgwMDBhNSB9LAorCXsgMHg1MDMyNCwgIDB4MzA4MDAwNjIgfSwKKwl7IDB4NWZmZmMsICAweGU0MDAwYTggfSwKKwl7IDB4NTAzMjgsICAweDJmYzAwMDVmIH0sCisJeyAweDVmZmZjLCAgMHhlYzAwMGFhIH0sCisJeyAweDUwMzJjLCAgMHgyZmMwMDA1YiB9LAorCXsgMHg1ZmZmYywgIDB4ZjgwMDBhZCB9LAorCXsgMHg1MDMzMCwgIDB4MmY0MDAwNTcgfSwKKwl7IDB4NWZmZmMsICAweDEwODAwMGIwIH0sCisJeyAweDUwMzM0LCAgMHgyZTQwMDA1NCB9LAorCXsgMHg1ZmZmYywgIDB4MTE0MDAwYjIgfSwKKwl7IDB4NTAzMzgsICAweDJlMDAwMDUwIH0sCisJeyAweDVmZmZjLCAgMHgxMjQwMDBiNCB9LAorCXsgMHg1MDMzYywgIDB4MmQ4MDAwNGMgfSwKKwl7IDB4NWZmZmMsICAweDEzMDAwMGI2IH0sCisJeyAweDUwMzQwLCAgMHgyZDAwMDA0OSB9LAorCXsgMHg1ZmZmYywgIDB4MTQwMDAwYjggfSwKKwl7IDB4NTAzNDQsICAweDJjODAwMDQ1IH0sCisJeyAweDVmZmZjLCAgMHgxNTAwMDBiOSB9LAorCXsgMHg1MDM0OCwgIDB4MmMwMDAwNDIgfSwKKwl7IDB4NWZmZmMsICAweDE1YzAwMGJkIH0sCisJeyAweDUwMzRjLCAgMHgyYjQwMDAzZSB9LAorCXsgMHg1ZmZmYywgIDB4MTZjMDAwYmYgfSwKKwl7IDB4NTAzNTAsICAweDJhODAwMDNiIH0sCisJeyAweDVmZmZjLCAgMHgxN2MwMDBiZiB9LAorCXsgMHg1MDM1NCwgIDB4MmEwMDAwMzkgfSwKKwl7IDB4NWZmZmMsICAweDE4ODAwMGMyIH0sCisJeyAweDUwMzU4LCAgMHgyOTQwMDAzNiB9LAorCXsgMHg1ZmZmYywgIDB4MTljMDAwYzQgfSwKKwl7IDB4NTAzNWMsICAweDI4ODAwMDMyIH0sCisJeyAweDVmZmZjLCAgMHgxYWMwMDBjNSB9LAorCXsgMHg1MDM2MCwgIDB4MjgwMDAwMmYgfSwKKwl7IDB4NWZmZmMsICAweDFiYzAwMGM3IH0sCisJeyAweDUwMzY0LCAgMHgyNzQwMDAyYyB9LAorCXsgMHg1ZmZmYywgIDB4MWNjMDAwYzggfSwKKwl7IDB4NTAzNjgsICAweDI2YzAwMDI5IH0sCisJeyAweDVmZmZjLCAgMHgxZGMwMDBjOSB9LAorCXsgMHg1MDM2YywgIDB4MjYwMDAwMjcgfSwKKwl7IDB4NWZmZmMsICAweDFlYzAwMGNjIH0sCisJeyAweDUwMzcwLCAgMHgyNTAwMDAyNCB9LAorCXsgMHg1ZmZmYywgIDB4MjAwMDAwY2MgfSwKKwl7IDB4NTAzNzQsICAweDI0ODAwMDIxIH0sCisJeyAweDVmZmZjLCAgMHgyMTAwMDBjZCB9LAorCXsgMHg1MDM3OCwgIDB4MjM4MDAwMjAgfSwKKwl7IDB4NWZmZmMsICAweDIyMDAwMGNlIH0sCisJeyAweDUwMzdjLCAgMHgyMzAwMDAxZCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2Rvd25zY2FsZV95X3RhYmxlX1BUNFRPUFQ2W10gPSB7CisJeyAweDVmZmZjLCAgMHg3NDAwMDhjIH0sCisJeyAweDUwMzAwLCAgMHgzMzgwMDA4OCB9LAorCXsgMHg1ZmZmYywgIDB4ODAwMDA4ZSB9LAorCXsgMHg1MDMwNCwgIDB4MzM0MDAwODQgfSwKKwl7IDB4NWZmZmMsICAweDg0MDAwOTIgfSwKKwl7IDB4NTAzMDgsICAweDMzMDAwMDgwIH0sCisJeyAweDVmZmZjLCAgMHg5MDAwMDk0IH0sCisJeyAweDUwMzBjLCAgMHgzMzAwMDA3YiB9LAorCXsgMHg1ZmZmYywgIDB4OWMwMDA5OCB9LAorCXsgMHg1MDMxMCwgIDB4MzI0MDAwNzcgfSwKKwl7IDB4NWZmZmMsICAweGE0MDAwOWIgfSwKKwl7IDB4NTAzMTQsICAweDMyMDAwMDczIH0sCisJeyAweDVmZmZjLCAgMHhiMDAwMDlkIH0sCisJeyAweDUwMzE4LCAgMHgzMWMwMDA2ZiB9LAorCXsgMHg1ZmZmYywgIDB4YmMwMDBhMCB9LAorCXsgMHg1MDMxYywgIDB4MzE0MDAwNmIgfSwKKwl7IDB4NWZmZmMsICAweGM4MDAwYTIgfSwKKwl7IDB4NTAzMjAsICAweDMxMDAwMDY3IH0sCisJeyAweDVmZmZjLCAgMHhkODAwMGE1IH0sCisJeyAweDUwMzI0LCAgMHgzMDgwMDA2MiB9LAorCXsgMHg1ZmZmYywgIDB4ZTQwMDBhOCB9LAorCXsgMHg1MDMyOCwgIDB4MmZjMDAwNWYgfSwKKwl7IDB4NWZmZmMsICAweGVjMDAwYWEgfSwKKwl7IDB4NTAzMmMsICAweDJmYzAwMDViIH0sCisJeyAweDVmZmZjLCAgMHhmODAwMGFkIH0sCisJeyAweDUwMzMwLCAgMHgyZjQwMDA1NyB9LAorCXsgMHg1ZmZmYywgIDB4MTA4MDAwYjAgfSwKKwl7IDB4NTAzMzQsICAweDJlNDAwMDU0IH0sCisJeyAweDVmZmZjLCAgMHgxMTQwMDBiMiB9LAorCXsgMHg1MDMzOCwgIDB4MmUwMDAwNTAgfSwKKwl7IDB4NWZmZmMsICAweDEyNDAwMGI0IH0sCisJeyAweDUwMzNjLCAgMHgyZDgwMDA0YyB9LAorCXsgMHg1ZmZmYywgIDB4MTMwMDAwYjYgfSwKKwl7IDB4NTAzNDAsICAweDJkMDAwMDQ5IH0sCisJeyAweDVmZmZjLCAgMHgxNDAwMDBiOCB9LAorCXsgMHg1MDM0NCwgIDB4MmM4MDAwNDUgfSwKKwl7IDB4NWZmZmMsICAweDE1MDAwMGI5IH0sCisJeyAweDUwMzQ4LCAgMHgyYzAwMDA0MiB9LAorCXsgMHg1ZmZmYywgIDB4MTVjMDAwYmQgfSwKKwl7IDB4NTAzNGMsICAweDJiNDAwMDNlIH0sCisJeyAweDVmZmZjLCAgMHgxNmMwMDBiZiB9LAorCXsgMHg1MDM1MCwgIDB4MmE4MDAwM2IgfSwKKwl7IDB4NWZmZmMsICAweDE3YzAwMGJmIH0sCisJeyAweDUwMzU0LCAgMHgyYTAwMDAzOSB9LAorCXsgMHg1ZmZmYywgIDB4MTg4MDAwYzIgfSwKKwl7IDB4NTAzNTgsICAweDI5NDAwMDM2IH0sCisJeyAweDVmZmZjLCAgMHgxOWMwMDBjNCB9LAorCXsgMHg1MDM1YywgIDB4Mjg4MDAwMzIgfSwKKwl7IDB4NWZmZmMsICAweDFhYzAwMGM1IH0sCisJeyAweDUwMzYwLCAgMHgyODAwMDAyZiB9LAorCXsgMHg1ZmZmYywgIDB4MWJjMDAwYzcgfSwKKwl7IDB4NTAzNjQsICAweDI3NDAwMDJjIH0sCisJeyAweDVmZmZjLCAgMHgxY2MwMDBjOCB9LAorCXsgMHg1MDM2OCwgIDB4MjZjMDAwMjkgfSwKKwl7IDB4NWZmZmMsICAweDFkYzAwMGM5IH0sCisJeyAweDUwMzZjLCAgMHgyNjAwMDAyNyB9LAorCXsgMHg1ZmZmYywgIDB4MWVjMDAwY2MgfSwKKwl7IDB4NTAzNzAsICAweDI1MDAwMDI0IH0sCisJeyAweDVmZmZjLCAgMHgyMDAwMDBjYyB9LAorCXsgMHg1MDM3NCwgIDB4MjQ4MDAwMjEgfSwKKwl7IDB4NWZmZmMsICAweDIxMDAwMGNkIH0sCisJeyAweDUwMzc4LCAgMHgyMzgwMDAyMCB9LAorCXsgMHg1ZmZmYywgIDB4MjIwMDAwY2UgfSwKKwl7IDB4NTAzN2MsICAweDIzMDAwMDFkIH0sCit9OworCitzdGF0aWMgc3RydWN0IG1kcF90YWJsZV9lbnRyeSBtZHBfZG93bnNjYWxlX3lfdGFibGVfUFQ2VE9QVDhbXSA9IHsKKwl7IDB4NWZmZmMsICAweGZlMDAwMDcwIH0sCisJeyAweDUwMzAwLCAgMHg0YmMwMDA2OCB9LAorCXsgMHg1ZmZmYywgIDB4ZmUwMDAwNzggfSwKKwl7IDB4NTAzMDQsICAweDRiYzAwMDYwIH0sCisJeyAweDVmZmZjLCAgMHhmZTAwMDA4MCB9LAorCXsgMHg1MDMwOCwgIDB4NGI4MDAwNTkgfSwKKwl7IDB4NWZmZmMsICAweGZlMDAwMDg5IH0sCisJeyAweDUwMzBjLCAgMHg0YjAwMDA1MiB9LAorCXsgMHg1ZmZmYywgIDB4ZmU0MDAwOTEgfSwKKwl7IDB4NTAzMTAsICAweDRhODAwMDRiIH0sCisJeyAweDVmZmZjLCAgMHhmZTQwMDA5YSB9LAorCXsgMHg1MDMxNCwgIDB4NGEwMDAwNDQgfSwKKwl7IDB4NWZmZmMsICAweGZlODAwMGEzIH0sCisJeyAweDUwMzE4LCAgMHg0OTQwMDAzZCB9LAorCXsgMHg1ZmZmYywgIDB4ZmVjMDAwYWMgfSwKKwl7IDB4NTAzMWMsICAweDQ4NDAwMDM3IH0sCisJeyAweDVmZmZjLCAgMHhmZjAwMDBiNCB9LAorCXsgMHg1MDMyMCwgIDB4NDc4MDAwMzEgfSwKKwl7IDB4NWZmZmMsICAweGZmODAwMGJkIH0sCisJeyAweDUwMzI0LCAgMHg0NjQwMDAyYiB9LAorCXsgMHg1ZmZmYywgIDB4YzUgfSwKKwl7IDB4NTAzMjgsICAweDQ1MDAwMDI2IH0sCisJeyAweDVmZmZjLCAgMHg4MDAwY2UgfSwKKwl7IDB4NTAzMmMsICAweDQzODAwMDIxIH0sCisJeyAweDVmZmZjLCAgMHgxMDAwMGQ2IH0sCisJeyAweDUwMzMwLCAgMHg0MjQwMDAxYyB9LAorCXsgMHg1ZmZmYywgIDB4MTgwMDBkZiB9LAorCXsgMHg1MDMzNCwgIDB4NDA4MDAwMTggfSwKKwl7IDB4NWZmZmMsICAweDI0MDAwZTYgfSwKKwl7IDB4NTAzMzgsICAweDNmMDAwMDE0IH0sCisJeyAweDVmZmZjLCAgMHgzMDAwMGVlIH0sCisJeyAweDUwMzNjLCAgMHgzZDQwMDAxMCB9LAorCXsgMHg1ZmZmYywgIDB4NDAwMDBmNSB9LAorCXsgMHg1MDM0MCwgIDB4M2I4MDAwMGMgfSwKKwl7IDB4NWZmZmMsICAweDUwMDAwZmMgfSwKKwl7IDB4NTAzNDQsICAweDM5ODAwMDA5IH0sCisJeyAweDVmZmZjLCAgMHg2MDAwMTAyIH0sCisJeyAweDUwMzQ4LCAgMHgzN2MwMDAwNiB9LAorCXsgMHg1ZmZmYywgIDB4NzAwMDEwOSB9LAorCXsgMHg1MDM0YywgIDB4MzU4MDAwMDQgfSwKKwl7IDB4NWZmZmMsICAweDg0MDAxMGUgfSwKKwl7IDB4NTAzNTAsICAweDMzODAwMDAyIH0sCisJeyAweDVmZmZjLCAgMHg5ODAwMTE0IH0sCisJeyAweDUwMzU0LCAgMHgzMTQwMDAwMCB9LAorCXsgMHg1ZmZmYywgIDB4YWMwMDExOSB9LAorCXsgMHg1MDM1OCwgIDB4MmY0MDAzZmUgfSwKKwl7IDB4NWZmZmMsICAweGM0MDAxMWUgfSwKKwl7IDB4NTAzNWMsICAweDJkMDAwM2ZjIH0sCisJeyAweDVmZmZjLCAgMHhkYzAwMTIxIH0sCisJeyAweDUwMzYwLCAgMHgyYjAwMDNmYiB9LAorCXsgMHg1ZmZmYywgIDB4ZjQwMDEyNSB9LAorCXsgMHg1MDM2NCwgIDB4MjhjMDAzZmEgfSwKKwl7IDB4NWZmZmMsICAweDExMDAwMTI4IH0sCisJeyAweDUwMzY4LCAgMHgyNjgwMDNmOSB9LAorCXsgMHg1ZmZmYywgIDB4MTJjMDAxMmEgfSwKKwl7IDB4NTAzNmMsICAweDI0NDAwM2Y5IH0sCisJeyAweDVmZmZjLCAgMHgxNDgwMDEyYyB9LAorCXsgMHg1MDM3MCwgIDB4MjI0MDAzZjggfSwKKwl7IDB4NWZmZmMsICAweDE2NDAwMTJlIH0sCisJeyAweDUwMzc0LCAgMHgyMDAwMDNmOCB9LAorCXsgMHg1ZmZmYywgIDB4MTgwMDAxMmYgfSwKKwl7IDB4NTAzNzgsICAweDFlMDAwM2Y4IH0sCisJeyAweDVmZmZjLCAgMHgxYTAwMDEyZiB9LAorCXsgMHg1MDM3YywgIDB4MWMwMDAzZjggfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF9kb3duc2NhbGVfeV90YWJsZV9QVDhUTzFbXSA9IHsKKwl7IDB4NWZmZmMsICAweDAgfSwKKwl7IDB4NTAzMDAsICAweDdmYzAwMDAwIH0sCisJeyAweDVmZmZjLCAgMHhmZjgwMDAwZCB9LAorCXsgMHg1MDMwNCwgIDB4N2VjMDAzZjkgfSwKKwl7IDB4NWZmZmMsICAweGZlYzAwMDFjIH0sCisJeyAweDUwMzA4LCAgMHg3ZDQwMDNmMyB9LAorCXsgMHg1ZmZmYywgIDB4ZmU0MDAwMmIgfSwKKwl7IDB4NTAzMGMsICAweDdiODAwM2VkIH0sCisJeyAweDVmZmZjLCAgMHhmZDgwMDAzYyB9LAorCXsgMHg1MDMxMCwgIDB4Nzk0MDAzZTggfSwKKwl7IDB4NWZmZmMsICAweGZjYzAwMDRkIH0sCisJeyAweDUwMzE0LCAgMHg3NmMwMDNlNCB9LAorCXsgMHg1ZmZmYywgIDB4ZmM0MDAwNWYgfSwKKwl7IDB4NTAzMTgsICAweDczYzAwM2UwIH0sCisJeyAweDVmZmZjLCAgMHhmYjgwMDA3MSB9LAorCXsgMHg1MDMxYywgIDB4NzA4MDAzZGUgfSwKKwl7IDB4NWZmZmMsICAweGZhYzAwMDg1IH0sCisJeyAweDUwMzIwLCAgMHg2ZDAwMDNkYiB9LAorCXsgMHg1ZmZmYywgIDB4ZmEwMDAwOTggfSwKKwl7IDB4NTAzMjQsICAweDY5ODAwM2Q5IH0sCisJeyAweDVmZmZjLCAgMHhmOTgwMDBhYyB9LAorCXsgMHg1MDMyOCwgIDB4NjU0MDAzZDggfSwKKwl7IDB4NWZmZmMsICAweGY4YzAwMGMxIH0sCisJeyAweDUwMzJjLCAgMHg2MTAwMDNkNyB9LAorCXsgMHg1ZmZmYywgIDB4Zjg0MDAwZDUgfSwKKwl7IDB4NTAzMzAsICAweDVjODAwM2Q3IH0sCisJeyAweDVmZmZjLCAgMHhmN2MwMDBlOSB9LAorCXsgMHg1MDMzNCwgIDB4NTgwMDAzZDcgfSwKKwl7IDB4NWZmZmMsICAweGY3NDAwMGZkIH0sCisJeyAweDUwMzM4LCAgMHg1MzQwMDNkOCB9LAorCXsgMHg1ZmZmYywgIDB4ZjZjMDAxMTIgfSwKKwl7IDB4NTAzM2MsICAweDRlODAwM2Q4IH0sCisJeyAweDVmZmZjLCAgMHhmNjgwMDEyNiB9LAorCXsgMHg1MDM0MCwgIDB4NDk0MDAzZGEgfSwKKwl7IDB4NWZmZmMsICAweGY2MDAwMTNhIH0sCisJeyAweDUwMzQ0LCAgMHg0NDgwMDNkYiB9LAorCXsgMHg1ZmZmYywgIDB4ZjYwMDAxNGQgfSwKKwl7IDB4NTAzNDgsICAweDNmNDAwM2RkIH0sCisJeyAweDVmZmZjLCAgMHhmNWMwMDE2MCB9LAorCXsgMHg1MDM0YywgIDB4M2E0MDAzZGYgfSwKKwl7IDB4NWZmZmMsICAweGY1YzAwMTcyIH0sCisJeyAweDUwMzUwLCAgMHgzNTQwMDNlMSB9LAorCXsgMHg1ZmZmYywgIDB4ZjVjMDAxODQgfSwKKwl7IDB4NTAzNTQsICAweDMwNDAwM2UzIH0sCisJeyAweDVmZmZjLCAgMHhmNjAwMDE5NSB9LAorCXsgMHg1MDM1OCwgIDB4MmIwMDAzZTYgfSwKKwl7IDB4NWZmZmMsICAweGY2NDAwMWE2IH0sCisJeyAweDUwMzVjLCAgMHgyNjAwMDNlOCB9LAorCXsgMHg1ZmZmYywgIDB4ZjZjMDAxYjQgfSwKKwl7IDB4NTAzNjAsICAweDIxNDAwM2ViIH0sCisJeyAweDVmZmZjLCAgMHhmNzgwMDFjMiB9LAorCXsgMHg1MDM2NCwgIDB4MWM0MDAzZWUgfSwKKwl7IDB4NWZmZmMsICAweGY4MDAwMWNmIH0sCisJeyAweDUwMzY4LCAgMHgxN2MwMDNmMSB9LAorCXsgMHg1ZmZmYywgIDB4ZjkwMDAxZGIgfSwKKwl7IDB4NTAzNmMsICAweDEzNDAwM2YzIH0sCisJeyAweDVmZmZjLCAgMHhmYTAwMDFlNSB9LAorCXsgMHg1MDM3MCwgIDB4ZjAwMDNmNiB9LAorCXsgMHg1ZmZmYywgIDB4ZmI0MDAxZWUgfSwKKwl7IDB4NTAzNzQsICAweGFjMDAzZjkgfSwKKwl7IDB4NWZmZmMsICAweGZjYzAwMWY1IH0sCisJeyAweDUwMzc4LCAgMHg3MDAwM2ZiIH0sCisJeyAweDVmZmZjLCAgMHhmZTQwMDFmYiB9LAorCXsgMHg1MDM3YywgIDB4MzQwMDNmZSB9LAorfTsKKworc3RydWN0IG1kcF90YWJsZV9lbnRyeSAqbWRwX2Rvd25zY2FsZV95X3RhYmxlW01EUF9ET1dOU0NBTEVfTUFYXSA9IHsKKwlbTURQX0RPV05TQ0FMRV9QVDJUT1BUNF0gPSBtZHBfZG93bnNjYWxlX3lfdGFibGVfUFQyVE9QVDQsCisJW01EUF9ET1dOU0NBTEVfUFQ0VE9QVDZdID0gbWRwX2Rvd25zY2FsZV95X3RhYmxlX1BUNFRPUFQ2LAorCVtNRFBfRE9XTlNDQUxFX1BUNlRPUFQ4XSA9IG1kcF9kb3duc2NhbGVfeV90YWJsZV9QVDZUT1BUOCwKKwlbTURQX0RPV05TQ0FMRV9QVDhUTzFdICA9IG1kcF9kb3duc2NhbGVfeV90YWJsZV9QVDhUTzEsCit9OworCitzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF9nYXVzc2lhbl9ibHVyX3RhYmxlW10gPSB7CisJLyogbWF4IHZhcmlhbmNlICovCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjgwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjg0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjg4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjhjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjkwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjk0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjk4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMjljLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmEwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmE0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmE4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmFjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmIwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmI0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmI4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmJjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmMwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmM0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmM4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmNjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmQwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmQ0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmQ4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmRjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmUwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmU0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmU4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmVjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmYwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmY0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmY4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzAwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzA0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzA4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzBjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzEwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzE0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzE4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzFjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzIwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzI0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzI4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzJjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzMwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzM0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzM4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzNjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzQwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzQ0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzQ4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzRjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzUwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzU0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzU4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzVjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzYwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzY0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzY4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzZjLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzcwLCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzc0LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzc4LCAweDIwMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDIwMDAwMDgwIH0sCisJeyAweDUwMzdjLCAweDIwMDAwMDgwIH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwX3NjYWxlX3RhYmxlcy5oIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3NjYWxlX3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MDc3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfc2NhbGVfdGFibGVzLmgKQEAgLTAsMCArMSwzOCBAQAorLyogZHJpdmVycy92aWRlby9tc21fZmIvbWRwX3NjYWxlX3RhYmxlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFFVQUxDT01NIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NRFBfU0NBTEVfVEFCTEVTX0hfCisjZGVmaW5lIF9NRFBfU0NBTEVfVEFCTEVTX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorc3RydWN0IG1kcF90YWJsZV9lbnRyeSB7CisJdWludDMyX3QgcmVnOworCXVpbnQzMl90IHZhbDsKK307CisKK2V4dGVybiBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF91cHNjYWxlX3RhYmxlWzY0XTsKKworZW51bSB7CisJTURQX0RPV05TQ0FMRV9QVDJUT1BUNCwKKwlNRFBfRE9XTlNDQUxFX1BUNFRPUFQ2LAorCU1EUF9ET1dOU0NBTEVfUFQ2VE9QVDgsCisJTURQX0RPV05TQ0FMRV9QVDhUTzEsCisJTURQX0RPV05TQ0FMRV9NQVgsCit9OworCitleHRlcm4gc3RydWN0IG1kcF90YWJsZV9lbnRyeSAqbWRwX2Rvd25zY2FsZV94X3RhYmxlW01EUF9ET1dOU0NBTEVfTUFYXTsKK2V4dGVybiBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5ICptZHBfZG93bnNjYWxlX3lfdGFibGVbTURQX0RPV05TQ0FMRV9NQVhdOworZXh0ZXJuIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2dhdXNzaWFuX2JsdXJfdGFibGVbXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tc21fZmIuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21zbV9mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTAxZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tc21fZmIuYwpAQCAtMCwwICsxLDYzNiBAQAorLyogZHJpdmVycy92aWRlby9tc20vbXNtX2ZiLmMKKyAqCisgKiBDb3JlIE1TTSBmcmFtZWJ1ZmZlciBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21zbV9tZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2RlZmluZSBQUklOVF9GUFMgMAorI2RlZmluZSBQUklOVF9CTElUX1RJTUUgMAorCisjZGVmaW5lIFNMRUVQSU5HIDB4NAorI2RlZmluZSBVUERBVElORyAweDMKKyNkZWZpbmUgRlVMTF9VUERBVEVfRE9ORSAweDIKKyNkZWZpbmUgV0FLSU5HIDB4MQorI2RlZmluZSBBV0FLRSAweDAKKworI2RlZmluZSBOT05FIDAKKyNkZWZpbmUgU1VTUEVORF9SRVNVTUUgMHgxCisjZGVmaW5lIEZQUyAweDIKKyNkZWZpbmUgQkxJVF9USU1FIDB4NAorI2RlZmluZSBTSE9XX1VQREFURVMgMHg4CisKKyNkZWZpbmUgRExPRyhtYXNrLCBmbXQsIGFyZ3MuLi4pIFwKK2RvIHsgXAorCWlmIChtc21mYl9kZWJ1Z19tYXNrICYgbWFzaykgXAorCQlwcmludGsoS0VSTl9JTkZPICJtc21mYjogImZtdCwgIyNhcmdzKTsgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBtc21mYl9kZWJ1Z19tYXNrOworbW9kdWxlX3BhcmFtX25hbWVkKG1zbWZiX2RlYnVnX21hc2ssIG1zbWZiX2RlYnVnX21hc2ssIGludCwKKwkJICAgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQKTsKKworc3RydWN0IG1kcF9kZXZpY2UgKm1kcDsKKworc3RydWN0IG1zbWZiX2luZm8geworCXN0cnVjdCBmYl9pbmZvICpmYjsKKwlzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsOworCWludCB4cmVzOworCWludCB5cmVzOworCXVuc2lnbmVkIG91dHB1dF9mb3JtYXQ7CisJdW5zaWduZWQgeW9mZnNldDsKKwl1bnNpZ25lZCBmcmFtZV9yZXF1ZXN0ZWQ7CisJdW5zaWduZWQgZnJhbWVfZG9uZTsKKwlpbnQgc2xlZXBpbmc7CisJdW5zaWduZWQgdXBkYXRlX2ZyYW1lOworCXN0cnVjdCB7CisJCWludCBsZWZ0OworCQlpbnQgdG9wOworCQlpbnQgZXJpZ2h0OyAvKiBleGNsdXNpdmUgKi8KKwkJaW50IGVib3R0b207IC8qIGV4Y2x1c2l2ZSAqLworCX0gdXBkYXRlX2luZm87CisJY2hhciAqYmxhY2s7CisKKwlzcGlubG9ja190IHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCBwYW5lbF9pbml0X2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfd3E7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc3VtZV93b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0IHJlc3VtZV93b3JrOworCXN0cnVjdCBtc21mYl9jYWxsYmFjayBkbWFfY2FsbGJhY2s7CisJc3RydWN0IG1zbWZiX2NhbGxiYWNrIHZzeW5jX2NhbGxiYWNrOworCXN0cnVjdCBocnRpbWVyIGZha2VfdnN5bmM7CisJa3RpbWVfdCB2c3luY19yZXF1ZXN0X3RpbWU7Cit9OworCitzdGF0aWMgaW50IG1zbWZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zbWZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXJldHVybiAwOworfQorCisvKiBDYWxsZWQgZnJvbSBkbWEgaW50ZXJydXB0IGhhbmRsZXIsIG11c3Qgbm90IHNsZWVwICovCitzdGF0aWMgdm9pZCBtc21mYl9oYW5kbGVfZG1hX2ludGVycnVwdChzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgKmNhbGxiYWNrKQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0cnVjdCBtc21mYl9pbmZvICptc21mYiAgPSBjb250YWluZXJfb2YoY2FsbGJhY2ssIHN0cnVjdCBtc21mYl9pbmZvLAorCQkJCQkgICAgICAgZG1hX2NhbGxiYWNrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisJbXNtZmItPmZyYW1lX2RvbmUgPSBtc21mYi0+ZnJhbWVfcmVxdWVzdGVkOworCWlmIChtc21mYi0+c2xlZXBpbmcgPT0gVVBEQVRJTkcgJiYKKwkgICAgbXNtZmItPmZyYW1lX2RvbmUgPT0gbXNtZmItPnVwZGF0ZV9mcmFtZSkgeworCQlETE9HKFNVU1BFTkRfUkVTVU1FLCAiZnVsbCB1cGRhdGUgY29tcGxldGVkXG4iKTsKKwkJcXVldWVfd29yayhtc21mYi0+cmVzdW1lX3dvcmtxdWV1ZSwgJm1zbWZiLT5yZXN1bWVfd29yayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKwl3YWtlX3VwKCZtc21mYi0+ZnJhbWVfd3EpOworfQorCitzdGF0aWMgaW50IG1zbWZiX3N0YXJ0X2RtYShzdHJ1Y3QgbXNtZmJfaW5mbyAqbXNtZmIpCit7CisJdWludDMyX3QgeCwgeSwgdywgaDsKKwl1bnNpZ25lZCBhZGRyOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXVpbnQzMl90IHlvZmZzZXQ7CisJczY0IHRpbWVfc2luY2VfcmVxdWVzdDsKKwlzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsID0gbXNtZmItPnBhbmVsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKwl0aW1lX3NpbmNlX3JlcXVlc3QgPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksCisJCQkgICAgIG1zbWZiLT52c3luY19yZXF1ZXN0X3RpbWUpKTsKKwlpZiAodGltZV9zaW5jZV9yZXF1ZXN0ID4gMjAgKiBOU0VDX1BFUl9NU0VDKSB7CisJCXVpbnQzMl90IHVzOworCQl1cyA9IGRvX2Rpdih0aW1lX3NpbmNlX3JlcXVlc3QsIE5TRUNfUEVSX01TRUMpIC8gTlNFQ19QRVJfVVNFQzsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNtZmJfc3RhcnRfZG1hICVsbGQuJTAzdSBtcyBhZnRlciB2c3luYyAiCisJCQkicmVxdWVzdFxuIiwgdGltZV9zaW5jZV9yZXF1ZXN0LCB1cyk7CisJfQorCWlmIChtc21mYi0+ZnJhbWVfZG9uZSA9PSBtc21mYi0+ZnJhbWVfcmVxdWVzdGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobXNtZmItPnNsZWVwaW5nID09IFNMRUVQSU5HKSB7CisJCURMT0coU1VTUEVORF9SRVNVTUUsICJ0cmllZCB0byBzdGFydCBkbWEgd2hpbGUgYXNsZWVwXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXR1cm4gLTE7CisJfQorCXggPSBtc21mYi0+dXBkYXRlX2luZm8ubGVmdDsKKwl5ID0gbXNtZmItPnVwZGF0ZV9pbmZvLnRvcDsKKwl3ID0gbXNtZmItPnVwZGF0ZV9pbmZvLmVyaWdodCAtIHg7CisJaCA9IG1zbWZiLT51cGRhdGVfaW5mby5lYm90dG9tIC0geTsKKwl5b2Zmc2V0ID0gbXNtZmItPnlvZmZzZXQ7CisJbXNtZmItPnVwZGF0ZV9pbmZvLmxlZnQgPSBtc21mYi0+eHJlcyArIDE7CisJbXNtZmItPnVwZGF0ZV9pbmZvLnRvcCA9IG1zbWZiLT55cmVzICsgMTsKKwltc21mYi0+dXBkYXRlX2luZm8uZXJpZ2h0ID0gMDsKKwltc21mYi0+dXBkYXRlX2luZm8uZWJvdHRvbSA9IDA7CisJaWYgKHVubGlrZWx5KHcgPiBtc21mYi0+eHJlcyB8fCBoID4gbXNtZmItPnlyZXMgfHwKKwkJICAgICB3ID09IDAgfHwgaCA9PSAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJpbnZhbGlkIHVwZGF0ZTogJWQgJWQgJWQgIgorCQkJCSIlZFxuIiwgeCwgeSwgdywgaCk7CisJCW1zbWZiLT5mcmFtZV9kb25lID0gbXNtZmItPmZyYW1lX3JlcXVlc3RlZDsKKwkJZ290byBlcnJvcjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCisJYWRkciA9ICgobXNtZmItPnhyZXMgKiAoeW9mZnNldCArIHkpICsgeCkgKiAyKTsKKwltZHAtPmRtYShtZHAsIGFkZHIgKyBtc21mYi0+ZmItPmZpeC5zbWVtX3N0YXJ0LAorCQkgbXNtZmItPnhyZXMgKiAyLCB3LCBoLCB4LCB5LCAmbXNtZmItPmRtYV9jYWxsYmFjaywKKwkJIHBhbmVsLT5pbnRlcmZhY2VfdHlwZSk7CisJcmV0dXJuIDA7CitlcnJvcjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisJLyogc29tZSBjbGllbnRzIG5lZWQgdG8gY2xlYXIgdGhlaXIgdnN5bmMgaW50ZXJydXB0ICovCisJaWYgKHBhbmVsLT5jbGVhcl92c3luYykKKwkJcGFuZWwtPmNsZWFyX3ZzeW5jKHBhbmVsKTsKKwl3YWtlX3VwKCZtc21mYi0+ZnJhbWVfd3EpOworCXJldHVybiAwOworfQorCisvKiBDYWxsZWQgZnJvbSBlc3luYyBpbnRlcnJ1cHQgaGFuZGxlciwgbXVzdCBub3Qgc2xlZXAgKi8KK3N0YXRpYyB2b2lkIG1zbWZiX2hhbmRsZV92c3luY19pbnRlcnJ1cHQoc3RydWN0IG1zbWZiX2NhbGxiYWNrICpjYWxsYmFjaykKK3sKKwlzdHJ1Y3QgbXNtZmJfaW5mbyAqbXNtZmIgPSBjb250YWluZXJfb2YoY2FsbGJhY2ssIHN0cnVjdCBtc21mYl9pbmZvLAorCQkJCQkgICAgICAgdnN5bmNfY2FsbGJhY2spOworCW1zbWZiX3N0YXJ0X2RtYShtc21mYik7Cit9CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBtc21mYl9mYWtlX3ZzeW5jKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgbXNtZmJfaW5mbyAqbXNtZmIgID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgbXNtZmJfaW5mbywKKwkJCQkJICAgICAgIGZha2VfdnN5bmMpOworCW1zbWZiX3N0YXJ0X2RtYShtc21mYik7CisJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworfQorCitzdGF0aWMgdm9pZCBtc21mYl9wYW5fdXBkYXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBsZWZ0LCB1aW50MzJfdCB0b3AsCisJCQkgICAgIHVpbnQzMl90IGVyaWdodCwgdWludDMyX3QgZWJvdHRvbSwKKwkJCSAgICAgdWludDMyX3QgeW9mZnNldCwgaW50IHBhbl9kaXNwbGF5KQoreworCXN0cnVjdCBtc21mYl9pbmZvICptc21mYiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsID0gbXNtZmItPnBhbmVsOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCBzbGVlcGluZzsKKwlpbnQgcmV0cnkgPSAxOworCisJRExPRyhTSE9XX1VQREFURVMsICJ1cGRhdGUgJWQgJWQgJWQgJWQgJWQgJWRcbiIsCisJCWxlZnQsIHRvcCwgZXJpZ2h0LCBlYm90dG9tLCB5b2Zmc2V0LCBwYW5fZGlzcGxheSk7CityZXN0YXJ0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisKKwkvKiBpZiB3ZSBhcmUgc2xlZXBpbmcsIG9uIGEgcGFuX2Rpc3BsYXkgd2FpdCAxMG1zICh0byB0aHJvdHRsZSBiYWNrCisJICogZHJhd2luZyBvdGhlcndpc2UgcmV0dXJuICovCisJaWYgKG1zbWZiLT5zbGVlcGluZyA9PSBTTEVFUElORykgeworCQlETE9HKFNVU1BFTkRfUkVTVU1FLCAiZHJhd2luZyB3aGlsZSBhc2xlZXBcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisJCWlmIChwYW5fZGlzcGxheSkKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1zbWZiLT5mcmFtZV93cSwKKwkJCQltc21mYi0+c2xlZXBpbmcgIT0gU0xFRVBJTkcsIEhaLzEwKTsKKwkJcmV0dXJuOworCX0KKworCXNsZWVwaW5nID0gbXNtZmItPnNsZWVwaW5nOworCS8qIG9uIGEgZnVsbCB1cGRhdGUsIGlmIHRoZSBsYXN0IGZyYW1lIGhhcyBub3QgY29tcGxldGVkLCB3YWl0IGZvciBpdCAqLworCWlmIChwYW5fZGlzcGxheSAmJiAobXNtZmItPmZyYW1lX3JlcXVlc3RlZCAhPSBtc21mYi0+ZnJhbWVfZG9uZSB8fAorCQkJICAgIHNsZWVwaW5nID09IFVQREFUSU5HKSkgeworCQlpbnQgcmV0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1zbWZiLT5mcmFtZV93cSwKKwkJCW1zbWZiLT5mcmFtZV9kb25lID09IG1zbWZiLT5mcmFtZV9yZXF1ZXN0ZWQgJiYKKwkJCW1zbWZiLT5zbGVlcGluZyAhPSBVUERBVElORywgNSAqIEhaKTsKKwkJaWYgKHJldCA8PSAwICYmIChtc21mYi0+ZnJhbWVfcmVxdWVzdGVkICE9IG1zbWZiLT5mcmFtZV9kb25lIHx8CisJCQkJIG1zbWZiLT5zbGVlcGluZyA9PSBVUERBVElORykpIHsKKwkJCWlmIChyZXRyeSAmJiBwYW5lbC0+cmVxdWVzdF92c3luYyAmJgorCQkJICAgIChzbGVlcGluZyA9PSBBV0FLRSkpIHsKKwkJCQlwYW5lbC0+cmVxdWVzdF92c3luYyhwYW5lbCwKKwkJCQkJJm1zbWZiLT52c3luY19jYWxsYmFjayk7CisJCQkJcmV0cnkgPSAwOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1zbWZiX3Bhbl9kaXNwbGF5IHRpbWVvdXQgIgorCQkJCQkicmVyZXF1ZXN0IHZzeW5jXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNtZmJfcGFuX2Rpc3BsYXkgdGltZW91dCAiCisJCQkJCSJ3YWl0aW5nIGZvciBmcmFtZSBzdGFydCwgJWQgJWRcbiIsCisJCQkJCW1zbWZiLT5mcmFtZV9yZXF1ZXN0ZWQsCisJCQkJCW1zbWZiLT5mcmFtZV9kb25lKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0KKworCisJbXNtZmItPmZyYW1lX3JlcXVlc3RlZCsrOworCS8qIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSB5IG9mZnNldCwgaWYgdGhpcyBpcyB0aGUKKwkgKiBmaXJzdCBmdWxsIHVwZGF0ZSBvbiByZXN1bWUsIHNldCB0aGUgc2xlZXBpbmcgc3RhdGUgKi8KKwlpZiAocGFuX2Rpc3BsYXkpIHsKKwkJbXNtZmItPnlvZmZzZXQgPSB5b2Zmc2V0OworCQlpZiAobGVmdCA9PSAwICYmIHRvcCA9PSAwICYmIGVyaWdodCA9PSBpbmZvLT52YXIueHJlcyAmJgorCQkgICAgZWJvdHRvbSA9PSBpbmZvLT52YXIueXJlcykgeworCQkJaWYgKHNsZWVwaW5nID09IFdBS0lORykgeworCQkJCW1zbWZiLT51cGRhdGVfZnJhbWUgPSBtc21mYi0+ZnJhbWVfcmVxdWVzdGVkOworCQkJCURMT0coU1VTUEVORF9SRVNVTUUsICJmdWxsIHVwZGF0ZSBzdGFydGluZ1xuIik7CisJCQkJbXNtZmItPnNsZWVwaW5nID0gVVBEQVRJTkc7CisJCQl9CisJCX0KKwl9CisKKwkvKiBzZXQgdGhlIHVwZGF0ZSByZXF1ZXN0ICovCisJaWYgKGxlZnQgPCBtc21mYi0+dXBkYXRlX2luZm8ubGVmdCkKKwkJbXNtZmItPnVwZGF0ZV9pbmZvLmxlZnQgPSBsZWZ0OworCWlmICh0b3AgPCBtc21mYi0+dXBkYXRlX2luZm8udG9wKQorCQltc21mYi0+dXBkYXRlX2luZm8udG9wID0gdG9wOworCWlmIChlcmlnaHQgPiBtc21mYi0+dXBkYXRlX2luZm8uZXJpZ2h0KQorCQltc21mYi0+dXBkYXRlX2luZm8uZXJpZ2h0ID0gZXJpZ2h0OworCWlmIChlYm90dG9tID4gbXNtZmItPnVwZGF0ZV9pbmZvLmVib3R0b20pCisJCW1zbWZiLT51cGRhdGVfaW5mby5lYm90dG9tID0gZWJvdHRvbTsKKwlETE9HKFNIT1dfVVBEQVRFUywgInVwZGF0ZSBxdWV1ZWQgJWQgJWQgJWQgJWQgJWRcbiIsCisJCW1zbWZiLT51cGRhdGVfaW5mby5sZWZ0LCBtc21mYi0+dXBkYXRlX2luZm8udG9wLAorCQltc21mYi0+dXBkYXRlX2luZm8uZXJpZ2h0LCBtc21mYi0+dXBkYXRlX2luZm8uZWJvdHRvbSwKKwkJbXNtZmItPnlvZmZzZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKworCS8qIGlmIHRoZSBwYW5lbCBpcyBhbGwgdGhlIHdheSBvbiB3YWl0IGZvciB2c3luYywgb3RoZXJ3aXNlIHNsZWVwCisJICogZm9yIDE2IG1zIChsb25nIGVub3VnaCBmb3IgdGhlIGRtYSB0byBwYW5lbCkgYW5kIHRoZW4gYmVnaW4gZG1hICovCisJbXNtZmItPnZzeW5jX3JlcXVlc3RfdGltZSA9IGt0aW1lX2dldCgpOworCWlmIChwYW5lbC0+cmVxdWVzdF92c3luYyAmJiAoc2xlZXBpbmcgPT0gQVdBS0UpKSB7CisJCXBhbmVsLT5yZXF1ZXN0X3ZzeW5jKHBhbmVsLCAmbXNtZmItPnZzeW5jX2NhbGxiYWNrKTsKKwl9IGVsc2UgeworCQlpZiAoIWhydGltZXJfYWN0aXZlKCZtc21mYi0+ZmFrZV92c3luYykpIHsKKwkJCWhydGltZXJfc3RhcnQoJm1zbWZiLT5mYWtlX3ZzeW5jLAorCQkJCSAgICAgIGt0aW1lX3NldCgwLCBOU0VDX1BFUl9TRUMvNjApLAorCQkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBtc21mYl91cGRhdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IGxlZnQsIHVpbnQzMl90IHRvcCwKKwkJCSB1aW50MzJfdCBlcmlnaHQsIHVpbnQzMl90IGVib3R0b20pCit7CisJbXNtZmJfcGFuX3VwZGF0ZShpbmZvLCBsZWZ0LCB0b3AsIGVyaWdodCwgZWJvdHRvbSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VyX29uX3BhbmVsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbXNtZmJfaW5mbyAqbXNtZmIgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1zbWZiX2luZm8sIHJlc3VtZV93b3JrKTsKKwlzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsID0gbXNtZmItPnBhbmVsOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJbXV0ZXhfbG9jaygmbXNtZmItPnBhbmVsX2luaXRfbG9jayk7CisJRExPRyhTVVNQRU5EX1JFU1VNRSwgInR1cm5pbmcgb24gcGFuZWxcbiIpOworCWlmIChtc21mYi0+c2xlZXBpbmcgPT0gVVBEQVRJTkcpIHsKKwkJaWYgKHBhbmVsLT51bmJsYW5rKHBhbmVsKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAibXNtZmI6IHBhbmVsIHVuYmxhbmsgZmFpbGVkLCIKKwkJCSAgICAgICAibm90IHN0YXJ0aW5nIGRyYXdpbmdcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCQltc21mYi0+c2xlZXBpbmcgPSBBV0FLRTsKKwkJd2FrZV91cCgmbXNtZmItPmZyYW1lX3dxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCX0KK2Vycm9yOgorCW11dGV4X3VubG9jaygmbXNtZmItPnBhbmVsX2luaXRfbG9jayk7Cit9CisKKworc3RhdGljIGludCBtc21mYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWlmICgodmFyLT54cmVzICE9IGluZm8tPnZhci54cmVzKSB8fAorCSAgICAodmFyLT55cmVzICE9IGluZm8tPnZhci55cmVzKSB8fAorCSAgICAodmFyLT54cmVzX3ZpcnR1YWwgIT0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCkgfHwKKwkgICAgKHZhci0+eXJlc192aXJ0dWFsICE9IGluZm8tPnZhci55cmVzX3ZpcnR1YWwpIHx8CisJICAgICh2YXItPnhvZmZzZXQgIT0gaW5mby0+dmFyLnhvZmZzZXQpIHx8CisJICAgICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgfHwKKwkgICAgKHZhci0+Z3JheXNjYWxlICE9IGluZm8tPnZhci5ncmF5c2NhbGUpKQorCQkgcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtc21mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IG1zbWZiX2luZm8gKm1zbWZiID0gaW5mby0+cGFyOworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWwgPSBtc21mYi0+cGFuZWw7CisKKwkvKiAiVVBEVCIgKi8KKwlpZiAoKHBhbmVsLT5jYXBzICYgTVNNRkJfQ0FQX1BBUlRJQUxfVVBEQVRFUykgJiYKKwkgICAgKHZhci0+cmVzZXJ2ZWRbMF0gPT0gMHg1NDQ0NTA1NSkpIHsKKwkJbXNtZmJfcGFuX3VwZGF0ZShpbmZvLCB2YXItPnJlc2VydmVkWzFdICYgMHhmZmZmLAorCQkJCSB2YXItPnJlc2VydmVkWzFdID4+IDE2LAorCQkJCSB2YXItPnJlc2VydmVkWzJdICYgMHhmZmZmLAorCQkJCSB2YXItPnJlc2VydmVkWzJdID4+IDE2LCB2YXItPnlvZmZzZXQsIDEpOworCX0gZWxzZSB7CisJCW1zbWZiX3Bhbl91cGRhdGUoaW5mbywgMCwgMCwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLAorCQkJCSB2YXItPnlvZmZzZXQsIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXNtZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwljZmJfZmlsbHJlY3QocCwgcmVjdCk7CisJbXNtZmJfdXBkYXRlKHAsIHJlY3QtPmR4LCByZWN0LT5keSwgcmVjdC0+ZHggKyByZWN0LT53aWR0aCwKKwkJICAgICByZWN0LT5keSArIHJlY3QtPmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIG1zbWZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICpwLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJY2ZiX2NvcHlhcmVhKHAsIGFyZWEpOworCW1zbWZiX3VwZGF0ZShwLCBhcmVhLT5keCwgYXJlYS0+ZHksIGFyZWEtPmR4ICsgYXJlYS0+d2lkdGgsCisJCSAgICAgYXJlYS0+ZHkgKyBhcmVhLT5oZWlnaHQpOworfQorCitzdGF0aWMgdm9pZCBtc21mYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJY2ZiX2ltYWdlYmxpdChwLCBpbWFnZSk7CisJbXNtZmJfdXBkYXRlKHAsIGltYWdlLT5keCwgaW1hZ2UtPmR5LCBpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGgsCisJCSAgICAgaW1hZ2UtPmR5ICsgaW1hZ2UtPmhlaWdodCk7Cit9CisKKworc3RhdGljIGludCBtc21mYl9ibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkgICAgICB2b2lkIF9fdXNlciAqcCkKK3sKKwlzdHJ1Y3QgbWRwX2JsaXRfcmVxIHJlcTsKKwlzdHJ1Y3QgbWRwX2JsaXRfcmVxX2xpc3QgcmVxX2xpc3Q7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxX2xpc3QsIHAsIHNpemVvZihyZXFfbGlzdCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCByZXFfbGlzdC5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBtZHBfYmxpdF9yZXFfbGlzdCAqbGlzdCA9CisJCQkoc3RydWN0IG1kcF9ibGl0X3JlcV9saXN0ICopcDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsICZsaXN0LT5yZXFbaV0sIHNpemVvZihyZXEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSBtZHAtPmJsaXQobWRwLCBpbmZvLCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisKK0RFRklORV9NVVRFWChtZHBfcHBwX2xvY2spOworCitzdGF0aWMgaW50IG1zbWZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICpwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgcmV0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1TTUZCX0dSUF9ESVNQOgorCQltZHAtPnNldF9ncnBfZGlzcChtZHAsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVNNRkJfQkxJVDoKKwkJcmV0ID0gbXNtZmJfYmxpdChwLCBhcmdwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJtc21mYiB1bmtub3duIGlvY3RsOiAlZFxuIiwgY21kKTsKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgbXNtZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9vcGVuID0gbXNtZmJfb3BlbiwKKwkuZmJfcmVsZWFzZSA9IG1zbWZiX3JlbGVhc2UsCisJLmZiX2NoZWNrX3ZhciA9IG1zbWZiX2NoZWNrX3ZhciwKKwkuZmJfcGFuX2Rpc3BsYXkgPSBtc21mYl9wYW5fZGlzcGxheSwKKwkuZmJfZmlsbHJlY3QgPSBtc21mYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBtc21mYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gbXNtZmJfaW1hZ2VibGl0LAorCS5mYl9pb2N0bCA9IG1zbWZiX2lvY3RsLAorfTsKKworc3RhdGljIHVuc2lnbmVkIFBQWzE2XTsKKworCisKKyNkZWZpbmUgQklUU19QRVJfUElYRUwgMTYKKworc3RhdGljIHZvaWQgc2V0dXBfZmJfaW5mbyhzdHJ1Y3QgbXNtZmJfaW5mbyAqbXNtZmIpCit7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBtc21mYi0+ZmI7CisJaW50IHI7CisKKwkvKiBmaW5pc2ggc2V0dGluZyB1cCB0aGUgZmJfaW5mbyBzdHJ1Y3QgKi8KKwlzdHJuY3B5KGZiX2luZm8tPmZpeC5pZCwgIm1zbWZiIiwgMTYpOworCWZiX2luZm8tPmZpeC55cGFuc3RlcCA9IDE7CisKKwlmYl9pbmZvLT5mYm9wcyA9ICZtc21mYl9vcHM7CisJZmJfaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKworCWZiX2luZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWZiX2luZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWZiX2luZm8tPmZpeC5saW5lX2xlbmd0aCA9IG1zbWZiLT54cmVzICogMjsKKworCWZiX2luZm8tPnZhci54cmVzID0gbXNtZmItPnhyZXM7CisJZmJfaW5mby0+dmFyLnlyZXMgPSBtc21mYi0+eXJlczsKKwlmYl9pbmZvLT52YXIud2lkdGggPSBtc21mYi0+cGFuZWwtPmZiX2RhdGEtPndpZHRoOworCWZiX2luZm8tPnZhci5oZWlnaHQgPSBtc21mYi0+cGFuZWwtPmZiX2RhdGEtPmhlaWdodDsKKwlmYl9pbmZvLT52YXIueHJlc192aXJ0dWFsID0gbXNtZmItPnhyZXM7CisJZmJfaW5mby0+dmFyLnlyZXNfdmlydHVhbCA9IG1zbWZiLT55cmVzICogMjsKKwlmYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBCSVRTX1BFUl9QSVhFTDsKKwlmYl9pbmZvLT52YXIuYWNjZWxfZmxhZ3MgPSAwOworCisJZmJfaW5mby0+dmFyLnlvZmZzZXQgPSAwOworCisJaWYgKG1zbWZiLT5wYW5lbC0+Y2FwcyAmIE1TTUZCX0NBUF9QQVJUSUFMX1VQREFURVMpIHsKKwkJZmJfaW5mby0+dmFyLnJlc2VydmVkWzBdID0gMHg1NDQ0NTA1NTsKKwkJZmJfaW5mby0+dmFyLnJlc2VydmVkWzFdID0gMDsKKwkJZmJfaW5mby0+dmFyLnJlc2VydmVkWzJdID0gKHVpbnQxNl90KW1zbWZiLT54cmVzIHwKKwkJCQkJICAgKCh1aW50MzJfdCltc21mYi0+eXJlcyA8PCAxNik7CisJfQorCisJZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxMTsKKwlmYl9pbmZvLT52YXIucmVkLmxlbmd0aCA9IDU7CisJZmJfaW5mby0+dmFyLnJlZC5tc2JfcmlnaHQgPSAwOworCWZiX2luZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA1OworCWZiX2luZm8tPnZhci5ncmVlbi5sZW5ndGggPSA2OworCWZiX2luZm8tPnZhci5ncmVlbi5tc2JfcmlnaHQgPSAwOworCWZiX2luZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJZmJfaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKKwlmYl9pbmZvLT52YXIuYmx1ZS5tc2JfcmlnaHQgPSAwOworCisJciA9IGZiX2FsbG9jX2NtYXAoJmZiX2luZm8tPmNtYXAsIDE2LCAwKTsKKwlmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IFBQOworCisJUFBbMF0gPSAwOworCWZvciAociA9IDE7IHIgPCAxNjsgcisrKQorCQlQUFtyXSA9IDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfZmJtZW0oc3RydWN0IG1zbWZiX2luZm8gKm1zbWZiLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICpmYiA9IG1zbWZiLT5mYjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1zbWZiLT54cmVzICogbXNtZmItPnlyZXMgKgorCQkJICAgICAoQklUU19QRVJfUElYRUwgPj4gMykgKiAyOworCXVuc2lnbmVkIGNoYXIgKmZicmFtOworCisJLyogYm9hcmQgZmlsZSBtaWdodCBoYXZlIGF0dGFjaGVkIGEgcmVzb3VyY2UgZGVzY3JpYmluZyBhbiBmYiAqLworCXJlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlc291cmNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNoZWNrIHRoZSByZXNvdXJjZSBpcyBsYXJnZSBlbm91Z2ggdG8gZml0IHRoZSBmYiAqLworCWlmIChyZXNvdXJjZS0+ZW5kIC0gcmVzb3VyY2UtPnN0YXJ0IDwgc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgImFsbG9jYXRlZCByZXNvdXJjZSBpcyB0b28gc21hbGwgZm9yICIKKwkJCQkiZmJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZmItPmZpeC5zbWVtX3N0YXJ0ID0gcmVzb3VyY2UtPnN0YXJ0OworCWZiLT5maXguc21lbV9sZW4gPSByZXNvdXJjZS0+ZW5kIC0gcmVzb3VyY2UtPnN0YXJ0OworCWZicmFtID0gaW9yZW1hcChyZXNvdXJjZS0+c3RhcnQsCisJCQlyZXNvdXJjZS0+ZW5kIC0gcmVzb3VyY2UtPnN0YXJ0KTsKKwlpZiAoZmJyYW0gPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1zbWZiOiBjYW5ub3QgYWxsb2NhdGUgZmJyYW0hXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZiLT5zY3JlZW5fYmFzZSA9IGZicmFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zbWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmZiOworCXN0cnVjdCBtc21mYl9pbmZvICptc21mYjsKKwlzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCWlmICghcGFuZWwpIHsKKwkJcHJfZXJyKCJtc21mYl9wcm9iZTogbm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIXBhbmVsLT5mYl9kYXRhKSB7CisJCXByX2VycigibXNtZmJfcHJvYmU6IG5vIGZiX2RhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmYiA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgbXNtZmJfaW5mbyksICZwZGV2LT5kZXYpOworCWlmICghZmIpCisJCXJldHVybiAtRU5PTUVNOworCW1zbWZiID0gZmItPnBhcjsKKwltc21mYi0+ZmIgPSBmYjsKKwltc21mYi0+cGFuZWwgPSBwYW5lbDsKKwltc21mYi0+eHJlcyA9IHBhbmVsLT5mYl9kYXRhLT54cmVzOworCW1zbWZiLT55cmVzID0gcGFuZWwtPmZiX2RhdGEtPnlyZXM7CisKKwlyZXQgPSBzZXR1cF9mYm1lbShtc21mYiwgcGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9zZXR1cF9mYm1lbTsKKworCXNldHVwX2ZiX2luZm8obXNtZmIpOworCisJc3Bpbl9sb2NrX2luaXQoJm1zbWZiLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmbXNtZmItPnBhbmVsX2luaXRfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbXNtZmItPmZyYW1lX3dxKTsKKwltc21mYi0+cmVzdW1lX3dvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoInBhbmVsX29uIik7CisJaWYgKG1zbWZiLT5yZXN1bWVfd29ya3F1ZXVlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gY3JlYXRlIHBhbmVsX29uIHdvcmtxdWV1ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZTsKKwl9CisJSU5JVF9XT1JLKCZtc21mYi0+cmVzdW1lX3dvcmssIHBvd2VyX29uX3BhbmVsKTsKKwltc21mYi0+YmxhY2sgPSBremFsbG9jKG1zbWZiLT5mYi0+dmFyLmJpdHNfcGVyX3BpeGVsKm1zbWZiLT54cmVzLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCisJcHJpbnRrKEtFUk5fSU5GTyAibXNtZmJfcHJvYmUoKSBpbnN0YWxsaW5nICVkIHggJWQgcGFuZWxcbiIsCisJICAgICAgIG1zbWZiLT54cmVzLCBtc21mYi0+eXJlcyk7CisKKwltc21mYi0+ZG1hX2NhbGxiYWNrLmZ1bmMgPSBtc21mYl9oYW5kbGVfZG1hX2ludGVycnVwdDsKKwltc21mYi0+dnN5bmNfY2FsbGJhY2suZnVuYyA9IG1zbWZiX2hhbmRsZV92c3luY19pbnRlcnJ1cHQ7CisJaHJ0aW1lcl9pbml0KCZtc21mYi0+ZmFrZV92c3luYywgQ0xPQ0tfTU9OT1RPTklDLAorCQkgICAgIEhSVElNRVJfTU9ERV9SRUwpOworCisKKwltc21mYi0+ZmFrZV92c3luYy5mdW5jdGlvbiA9IG1zbWZiX2Zha2VfdnN5bmM7CisKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZWdpc3Rlcl9mcmFtZWJ1ZmZlcjsKKworCW1zbWZiLT5zbGVlcGluZyA9IFdBS0lORzsKKworCXJldHVybiAwOworCitlcnJvcl9yZWdpc3Rlcl9mcmFtZWJ1ZmZlcjoKKwlkZXN0cm95X3dvcmtxdWV1ZShtc21mYi0+cmVzdW1lX3dvcmtxdWV1ZSk7CitlcnJvcl9jcmVhdGVfd29ya3F1ZXVlOgorCWlvdW5tYXAoZmItPnNjcmVlbl9iYXNlKTsKK2Vycm9yX3NldHVwX2ZibWVtOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UobXNtZmItPmZiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtc21fcGFuZWxfZHJpdmVyID0geworCS8qIG5lZWQgdG8gd3JpdGUgcmVtb3ZlICovCisJLnByb2JlID0gbXNtZmJfcHJvYmUsCisJLmRyaXZlciA9IHsubmFtZSA9ICJtc21fcGFuZWwifSwKK307CisKKworc3RhdGljIGludCBtc21mYl9hZGRfbWRwX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqY2xhc3NfaW50ZikKK3sKKwkvKiBtaWdodCBuZWVkIGxvY2tpbmcgaWYgbXVsaXRwbGUgbWRwIGRldmljZXMgKi8KKwlpZiAobWRwKQorCQlyZXR1cm4gMDsKKwltZHAgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWRwX2RldmljZSwgZGV2KTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtc21fcGFuZWxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgbXNtZmJfcmVtb3ZlX21kcF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmNsYXNzX2ludGYpCit7CisJLyogbWlnaHQgbmVlZCBsb2NraW5nIGlmIG11bGl0cGxlIG1kcCBkZXZpY2VzICovCisJaWYgKGRldiAhPSAmbWRwLT5kZXYpCisJCXJldHVybjsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtX3BhbmVsX2RyaXZlcik7CisJbWRwID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgbXNtX2ZiX2ludGVyZmFjZSA9IHsKKwkuYWRkX2RldiA9ICZtc21mYl9hZGRfbWRwX2RldmljZSwKKwkucmVtb3ZlX2RldiA9ICZtc21mYl9yZW1vdmVfbWRwX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1zbWZiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfbWRwX2NsaWVudCgmbXNtX2ZiX2ludGVyZmFjZSk7Cit9CisKK21vZHVsZV9pbml0KG1zbWZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZwppbmRleCA0NDQwODg1Li41NTFlM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZwpAQCAtNyw2ICs3LDY5IEBACiAJaGVscAogICAgICAgICAgIEZyYW1lIGJ1ZmZlciBkcml2ZXIgZm9yIE9NQVAgYmFzZWQgYm9hcmRzLgogCitjb25maWcgRkJfT01BUF9MQ0RfVkdBCisgICAgICAgIGJvb2wgIlVzZSBMQ0QgaW4gVkdBIG1vZGUiCisJICAgICAgICBkZXBlbmRzIG9uIE1BQ0hfT01BUF8zNDMwU0RQIHx8IE1BQ0hfT01BUF9MRFAKKworY2hvaWNlCisJZGVwZW5kcyBvbiBGQl9PTUFQICYmIE1BQ0hfT1ZFUk8KKwlwcm9tcHQgIlNjcmVlbiByZXNvbHV0aW9uIgorCWRlZmF1bHQgRkJfT01BUF8wNzlNM1IKKwloZWxwCisJICBTZWxlY3RlZCBkZXNpcmVkIHNjcmVlbiByZXNvbHV0aW9uCisKK2NvbmZpZyBGQl9PTUFQXzAzMU0zUgorCWJvb2xlYW4gIjY0MCB4IDQ4MCBAIDYwIEh6IFJlZHVjZWQgYmxhbmtpbmciCisKK2NvbmZpZyBGQl9PTUFQXzA0OE0zUgorCWJvb2xlYW4gIjgwMCB4IDYwMCBAIDYwIEh6IFJlZHVjZWQgYmxhbmtpbmciCisKK2NvbmZpZyBGQl9PTUFQXzA3OU0zUgorCWJvb2xlYW4gIjEwMjQgeCA3NjggQCA2MCBIeiBSZWR1Y2VkIGJsYW5raW5nIgorCitjb25maWcgRkJfT01BUF8wOTJNOVIKKwlib29sZWFuICIxMjgwIHggNzIwIEAgNjAgSHogUmVkdWNlZCBibGFua2luZyIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBGQl9PTUFQX0xDRENfRVhURVJOQUwKKwlib29sICJFeHRlcm5hbCBMQ0QgY29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkJfT01BUAorCWhlbHAKKwkgIFNheSBZIGhlcmUsIGlmIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydCBmb3IgYm9hcmRzIHdpdGggYW4KKwkgIGV4dGVybmFsIExDRCBjb250cm9sbGVyIGNvbm5lY3RlZCB0byB0aGUgU29TU0kvUkZCSSBpbnRlcmZhY2UuCisKK2NvbmZpZyBGQl9PTUFQX0xDRENfSFdBNzQyCisJYm9vbCAiRXBzb24gSFdBNzQyIExDRCBjb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQl9PTUFQICYmIEZCX09NQVBfTENEQ19FWFRFUk5BTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0IGZvciB0aGUgZXh0ZXJuYWwKKwkgIEVwc29uIEhXQTc0MiBMQ0QgY29udHJvbGxlci4KKworY29uZmlnIEZCX09NQVBfTENEQ19CTElaWkFSRAorCWJvb2wgIkVwc29uIEJsaXp6YXJkIExDRCBjb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQl9PTUFQICYmIEZCX09NQVBfTENEQ19FWFRFUk5BTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0IGZvciB0aGUgZXh0ZXJuYWwKKwkgIEVwc29uIEJsaXp6YXJkIExDRCBjb250cm9sbGVyLgorCitjb25maWcgRkJfT01BUF9NQU5VQUxfVVBEQVRFCisJYm9vbCAiRGVmYXVsdCB0byBtYW51YWwgdXBkYXRlIG1vZGUiCisJZGVwZW5kcyBvbiBGQl9PTUFQICYmIEZCX09NQVBfTENEQ19FWFRFUk5BTAorCWhlbHAKKwkgIFNheSBZIGhlcmUsIGlmIHlvdXIgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYXJlIGNhcGFibGUgb2YKKwkgIG5vdGlmeWluZyB0aGUgZnJhbWUgYnVmZmVyIGRyaXZlciB3aGVuIGEgY2hhbmdlIGhhcyBvY2N1cmVkIGluCisJICB0aGUgZnJhbWUgYnVmZmVyIGNvbnRlbnQgYW5kIHRodXMgYSByZWxvYWQgb2YgdGhlIGltYWdlIGRhdGEgdG8KKwkgIHRoZSBleHRlcm5hbCBmcmFtZSBidWZmZXIgaXMgcmVxdWlyZWQuIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBGQl9PTUFQX0xDRF9NSVBJRAorCWJvb2wgIk1JUEkgREJJLUMvRENTIGNvbXBhdGlibGUgTENEIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQl9PTUFQICYmIFNQSV9NQVNURVIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydCBmb3IgTENEcyBjb21wYXRpYmxlIHdpdGgKKwkgIHRoZSBNb2JpbGUgSW5kdXN0cnkgUHJvY2Vzc29yIEludGVyZmFjZSBEQkktQy9EQ1MKKwkgIHNwZWNpZmljYXRpb24uIChTdXBwb3J0ZWQgTENEczogUGhpbGlwcyBMUEg4OTIzLCBTaGFycCBMUzA0MVkzKQorCiBjb25maWcgRkJfT01BUF9CT09UTE9BREVSX0lOSVQKIAlib29sICJDaGVjayBib290bG9hZGVyIGluaXRpYWxpemF0aW9uIgogCWRlcGVuZHMgb24gRkJfT01BUApAQCAtMzYsMjMgKzk5LDQgQEAKICAgICAgICAgICBhbnN3ZXIgeWVzLiBBbnN3ZXIgbm8gaWYgeW91IGhhdmUgYSBkZWRpY2F0ZWQgdmlkZW8KICAgICAgICAgICBtZW1vcnksIG9yIGRvbid0IHVzZSBhbnkgb2YgdGhlIGFjY2VsZXJhdGVkIGZlYXR1cmVzLgogCi1jb25maWcgRkJfT01BUF9MQ0RDX0VYVEVSTkFMCi0JYm9vbCAiRXh0ZXJuYWwgTENEIGNvbnRyb2xsZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCX09NQVAKLQloZWxwCi0JICBTYXkgWSBoZXJlLCBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIGJvYXJkcyB3aXRoIGFuCi0JICBleHRlcm5hbCBMQ0QgY29udHJvbGxlciBjb25uZWN0ZWQgdG8gdGhlIFNvU1NJL1JGQkkgaW50ZXJmYWNlLgogCi1jb25maWcgRkJfT01BUF9MQ0RDX0hXQTc0MgotCWJvb2wgIkVwc29uIEhXQTc0MiBMQ0QgY29udHJvbGxlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkJfT01BUCAmJiBGQl9PTUFQX0xDRENfRVhURVJOQUwKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydCBmb3IgdGhlIGV4dGVybmFsCi0JICBFcHNvbiBIV0E3NDIgTENEIGNvbnRyb2xsZXIuCi0KLWNvbmZpZyBGQl9PTUFQX0xDRENfQkxJWlpBUkQKLQlib29sICJFcHNvbiBCbGl6emFyZCBMQ0QgY29udHJvbGxlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkJfT01BUCAmJiBGQl9PTUFQX0xDRENfRVhURVJOQUwKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydCBmb3IgdGhlIGV4dGVybmFsCi0JICBFcHNvbiBCbGl6emFyZCBMQ0QgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vb21hcC9NYWtlZmlsZQppbmRleCBlZDEzODg5Li5iNjNiMTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCiBvYmpzLXkkKENPTkZJR19BUkNIX09NQVAxKSArPSBsY2RjLm8KIG9ianMteSQoQ09ORklHX0FSQ0hfT01BUDIpICs9IGRpc3BjLm8KK29ianMteSQoQ09ORklHX0FSQ0hfT01BUDMpICs9IGRpc3BjLm8KIAogb2Jqcy0kKENPTkZJR19BUkNIX09NQVAxKSQoQ09ORklHX0ZCX09NQVBfTENEQ19FWFRFUk5BTCkgKz0gc29zc2kubwogb2Jqcy0kKENPTkZJR19BUkNIX09NQVAyKSQoQ09ORklHX0ZCX09NQVBfTENEQ19FWFRFUk5BTCkgKz0gcmZiaS5vCkBAIC0xNSw2ICsxNiw3IEBACiBvYmpzLXkkKENPTkZJR19GQl9PTUFQX0xDRENfSFdBNzQyKSArPSBod2E3NDIubwogb2Jqcy15JChDT05GSUdfRkJfT01BUF9MQ0RDX0JMSVpaQVJEKSArPSBibGl6emFyZC5vCiAKK29ianMteSQoQ09ORklHX01BQ0hfQU1TX0RFTFRBKSArPSBsY2RfYW1zX2RlbHRhLm8KIG9ianMteSQoQ09ORklHX01BQ0hfT01BUF9INCkgKz0gbGNkX2g0Lm8KIG9ianMteSQoQ09ORklHX01BQ0hfT01BUF9IMykgKz0gbGNkX2gzLm8KIG9ianMteSQoQ09ORklHX01BQ0hfT01BUF9QQUxNVEUpICs9IGxjZF9wYWxtdGUubwpAQCAtMjQsNSArMjYsMTUgQEAKIG9ianMtJChDT05GSUdfQVJDSF9PTUFQMTVYWCkkKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSArPSBsY2RfaW5uMTUxMC5vCiBvYmpzLXkkKENPTkZJR19NQUNIX09NQVBfT1NLKSArPSBsY2Rfb3NrLm8KIAorb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04pICs9IGxjZF9hcG9sbG9uLm8KK29ianMteSQoQ09ORklHX01BQ0hfT01BUF8yNDMwU0RQKSArPSBsY2RfMjQzMHNkcC5vCitvYmpzLXkkKENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCkgKz0gbGNkXzI0MzBzZHAubworb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQX0xEUCkgKz0gbGNkX2xkcC5vCitvYmpzLXkkKENPTkZJR19NQUNIX09NQVAyRVZNKSArPSBsY2Rfb21hcDJldm0ubworb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQM0VWTSkgKz0gbGNkX29tYXAzZXZtLm8KK29ianMteSQoQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFKSArPSBsY2Rfb21hcDNiZWFnbGUubworb2Jqcy15JChDT05GSUdfRkJfT01BUF9MQ0RfTUlQSUQpICs9IGxjZF9taXBpZC5vCitvYmpzLXkkKENPTkZJR19NQUNIX09WRVJPKSArPSBsY2Rfb3Zlcm8ubworCiBvbWFwZmItb2JqcyA6PSAkKG9ianMteXkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9ibGl6emFyZC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMKaW5kZXggOWRmY2YzOS4uZDVlNTk1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNkZWZpbmUgQkxJWlpBUkRfQ0xLX1NSQwkJCTB4MGUKICNkZWZpbmUgQkxJWlpBUkRfTUVNX0JBTkswX0FDVElWQVRFCQkweDEwCiAjZGVmaW5lIEJMSVpaQVJEX01FTV9CQU5LMF9TVEFUVVMJCTB4MTQKKyNkZWZpbmUgQkxJWlpBUkRfUEFORUxfQ09ORklHVVJBVElPTgkJMHgyOAogI2RlZmluZSBCTElaWkFSRF9IRElTUAkJCQkweDJhCiAjZGVmaW5lIEJMSVpaQVJEX0hORFAJCQkJMHgyYwogI2RlZmluZSBCTElaWkFSRF9WRElTUDAJCQkJMHgyZQpAQCAtMTYyLDYgKzE2MywxMCBAQAogCWludAkJCXZpZF9zY2FsZWQ7CiAJaW50CQkJbGFzdF9jb2xvcl9tb2RlOwogCWludAkJCXpvb21fb247CisJaW50CQkJem9vbV9hcmVhX2d4MTsKKwlpbnQJCQl6b29tX2FyZWFfZ3gyOworCWludAkJCXpvb21fYXJlYV9neTE7CisJaW50CQkJem9vbV9hcmVhX2d5MjsKIAlpbnQJCQlzY3JlZW5fd2lkdGg7CiAJaW50CQkJc2NyZWVuX2hlaWdodDsKIAl1bnNpZ25lZAkJdGVfY29ubmVjdGVkOjE7CkBAIC01MTMsNiArNTE4LDEzIEBACiAJcmV0dXJuIFJFUV9QRU5ESU5HOwogfQogCitzdGF0aWMgaW50IGNoZWNrXzFkX2ludGVyc2VjdChpbnQgYTEsIGludCBhMiwgaW50IGIxLCBpbnQgYjIpCit7CisJaWYgKGEyIDw9IGIxIHx8IGIyIDw9IGExKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwogLyogU2V0dXAgYWxsIHBsYW5lcyB3aXRoIGFuIG92ZXJsYXBwaW5nIGFyZWEgd2l0aCB0aGUgdXBkYXRlIHdpbmRvdy4gKi8KIHN0YXRpYyBpbnQgZG9fcGFydGlhbF91cGRhdGUoc3RydWN0IGJsaXp6YXJkX3JlcXVlc3QgKnJlcSwgaW50IHBsYW5lLAogCQkJICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKQEAgLTUyNSw2ICs1MzcsNyBAQAogCWludCBjb2xvcl9tb2RlOwogCWludCBmbGFnczsKIAlpbnQgem9vbV9vZmY7CisJaW50IGhhdmVfem9vbV9mb3JfdGhpc191cGRhdGUgPSAwOwogCiAJLyogR2xvYmFsIGNvb3JkaW5hdGVzLCByZWxhdGl2ZSB0byBwaXhlbCAwLDAgb2YgdGhlIExDRCAqLwogCWd4MSA9IHggKyBibGl6emFyZC5wbGFuZVtwbGFuZV0ucG9zX3g7CkBAIC01NDQsMTAgKzU1Nyw2IEBACiAJCWd4Ml9vdXQgPSBneDFfb3V0ICsgd19vdXQ7CiAJCWd5Ml9vdXQgPSBneTFfb3V0ICsgaF9vdXQ7CiAJfQotCXpvb21fb2ZmID0gYmxpenphcmQuem9vbV9vbiAmJiBneDEgPT0gMCAmJiBneTEgPT0gMCAmJgotCQl3ID09IGJsaXp6YXJkLnNjcmVlbl93aWR0aCAmJiBoID09IGJsaXp6YXJkLnNjcmVlbl9oZWlnaHQ7Ci0JYmxpenphcmQuem9vbV9vbiA9ICghem9vbV9vZmYgJiYgYmxpenphcmQuem9vbV9vbikgfHwKLQkJCSAgICh3IDwgd19vdXQgfHwgaCA8IGhfb3V0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBPTUFQRkJfUExBTkVfTlVNOyBpKyspIHsKIAkJc3RydWN0IHBsYW5lX2luZm8gKnAgPSAmYmxpenphcmQucGxhbmVbaV07CkBAIC02NTMsOCArNjYyLDQ5IEBACiAJZWxzZQogCQlkaXNhYmxlX3RlYXJzeW5jKCk7CiAKKwlpZiAoKGd4Ml9vdXQgLSBneDFfb3V0KSAhPSAoZ3gyIC0gZ3gxKSB8fAorCSAgICAoZ3kyX291dCAtIGd5MV9vdXQpICE9IChneTIgLSBneTEpKQorCQloYXZlX3pvb21fZm9yX3RoaXNfdXBkYXRlID0gMTsKKworCS8qICdiYWNrZ3JvdW5kJyB0eXBlIG9mIHNjcmVlbiB1cGRhdGUgKGFzIG9wcG9zZWQgdG8gJ2Rlc3RydWN0aXZlJykKKwkgICBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHNjYWxpbmcgaWYgc2NhbGluZyBpcyBhY3RpdmUgKi8KKwl6b29tX29mZiA9IGJsaXp6YXJkLnpvb21fb24gJiYgIWhhdmVfem9vbV9mb3JfdGhpc191cGRhdGUgJiYKKwkgICAgKGd4MV9vdXQgPT0gMCkgJiYgKGd4Ml9vdXQgPT0gYmxpenphcmQuc2NyZWVuX3dpZHRoKSAmJgorCSAgICAoZ3kxX291dCA9PSAwKSAmJiAoZ3kyX291dCA9PSBibGl6emFyZC5zY3JlZW5faGVpZ2h0KSAmJgorCSAgICAoZ3gxID09IDApICYmIChneTEgPT0gMCk7CisKKwlpZiAoYmxpenphcmQuem9vbV9vbiAmJiAhaGF2ZV96b29tX2Zvcl90aGlzX3VwZGF0ZSAmJiAhem9vbV9vZmYgJiYKKwkgICAgY2hlY2tfMWRfaW50ZXJzZWN0KGJsaXp6YXJkLnpvb21fYXJlYV9neDEsIGJsaXp6YXJkLnpvb21fYXJlYV9neDIsCisJCQkgICAgICAgZ3gxX291dCwgZ3gyX291dCkgJiYKKwkgICAgY2hlY2tfMWRfaW50ZXJzZWN0KGJsaXp6YXJkLnpvb21fYXJlYV9neTEsIGJsaXp6YXJkLnpvb21fYXJlYV9neTIsCisJCQkgICAgICAgZ3kxX291dCwgZ3kyX291dCkpIHsKKwkJLyogUHJldmlvdXMgc2NyZWVuIHVwZGF0ZSB3YXMgdXNpbmcgc2NhbGluZywgY3VycmVudCB1cGRhdGUKKwkJICogaXMgbm90IHVzaW5nIGl0LiBBZGRpdGlvbmFsbHksIGN1cnJlbnQgc2NyZWVuIHVwZGF0ZSBpcworCQkgKiBnb2luZyB0byBvdmVybGFwIHdpdGggdGhlIHNjYWxlZCBhcmVhLiBTY2FsaW5nIG5lZWRzIHRvIGJlCisJCSAqIGRpc2FibGVkIGluIG9yZGVyIHRvIGF2b2lkICdtYWduaWZ5aW5nIGdsYXNzJyBlZmZlY3QuCisJCSAqIER1bW15IHNldHVwIG9mIGJhY2tncm91bmQgd2luZG93IGNhbiBiZSB1c2VkIGZvciB0aGlzLgorCQkgKi8KKwkJc2V0X3dpbmRvd19yZWdzKDAsIDAsIGJsaXp6YXJkLnNjcmVlbl93aWR0aCwKKwkJCQlibGl6emFyZC5zY3JlZW5faGVpZ2h0LAorCQkJCTAsIDAsIGJsaXp6YXJkLnNjcmVlbl93aWR0aCwKKwkJCQlibGl6emFyZC5zY3JlZW5faGVpZ2h0LAorCQkJCUJMSVpaQVJEX0NPTE9SX1JHQjU2NSwgMSwgZmxhZ3MpOworCQlibGl6emFyZC56b29tX29uID0gMDsKKwl9CisKKwkvKiByZW1lbWJlciBzY2FsaW5nIHNldHRpbmdzIGlmIHdlIGhhdmUgc2NhbGVkIHVwZGF0ZSAqLworCWlmIChoYXZlX3pvb21fZm9yX3RoaXNfdXBkYXRlKSB7CisJCWJsaXp6YXJkLnpvb21fb24gPSAxOworCQlibGl6emFyZC56b29tX2FyZWFfZ3gxID0gZ3gxX291dDsKKwkJYmxpenphcmQuem9vbV9hcmVhX2d4MiA9IGd4Ml9vdXQ7CisJCWJsaXp6YXJkLnpvb21fYXJlYV9neTEgPSBneTFfb3V0OworCQlibGl6emFyZC56b29tX2FyZWFfZ3kyID0gZ3kyX291dDsKKwl9CisKIAlzZXRfd2luZG93X3JlZ3MoZ3gxLCBneTEsIGd4MiwgZ3kyLCBneDFfb3V0LCBneTFfb3V0LCBneDJfb3V0LCBneTJfb3V0LAogCQkJY29sb3JfbW9kZSwgem9vbV9vZmYsIGZsYWdzKTsKKwlpZiAoem9vbV9vZmYpCisJCWJsaXp6YXJkLnpvb21fb24gPSAwOwogCiAJYmxpenphcmQuZXh0aWYtPnNldF9iaXRzX3Blcl9jeWNsZSgxNik7CiAJLyogc2V0X3dpbmRvd19yZWdzIGhhcyBsZWZ0IHRoZSByZWdpc3RlciBpbmRleCBhdCB0aGUgcmlnaHQKQEAgLTkwOCw2ICs5NTgsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBibGl6emFyZF9zZXRfcm90YXRlKGludCBhbmdsZSkKK3sKKwl1MzIgbDsKKworCWwgPSBibGl6emFyZF9yZWFkX3JlZyhCTElaWkFSRF9QQU5FTF9DT05GSUdVUkFUSU9OKTsKKwlsICY9IH4weDAzOworCisJc3dpdGNoIChhbmdsZSkgeworCWNhc2UgMDoKKwkJbCA9IGwgfCAweDAwOworCQlicmVhazsKKwljYXNlIDkwOgorCQlsID0gbCB8IDB4MDM7CisJCWJyZWFrOworCWNhc2UgMTgwOgorCQlsID0gbCB8IDB4MDI7CisJCWJyZWFrOworCWNhc2UgMjcwOgorCQlsID0gbCB8IDB4MDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJsaXp6YXJkX3dyaXRlX3JlZyhCTElaWkFSRF9QQU5FTF9DT05GSUdVUkFUSU9OLCBsKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJsaXp6YXJkX2VuYWJsZV9wbGFuZShpbnQgcGxhbmUsIGludCBlbmFibGUpCiB7CiAJaWYgKGVuYWJsZSkKQEAgLTEyODUsNyArMTM2NCw4IEBACiAJY2Fwcy0+Y3RybCB8PSBPTUFQRkJfQ0FQU19NQU5VQUxfVVBEQVRFIHwKIAkJT01BUEZCX0NBUFNfV0lORE9XX1BJWEVMX0RPVUJMRSB8CiAJCU9NQVBGQl9DQVBTX1dJTkRPV19TQ0FMRSB8Ci0JCU9NQVBGQl9DQVBTX1dJTkRPV19PVkVSTEFZOworCQlPTUFQRkJfQ0FQU19XSU5ET1dfT1ZFUkxBWSB8CisJCU9NQVBGQl9DQVBTX1dJTkRPV19ST1RBVEU7CiAJaWYgKGJsaXp6YXJkLnRlX2Nvbm5lY3RlZCkKIAkJY2Fwcy0+Y3RybCB8PSBPTUFQRkJfQ0FQU19URUFSU1lOQzsKIAljYXBzLT53bmRfY29sb3IgfD0gKDEgPDwgT01BUEZCX0NPTE9SX1JHQjU2NSkgfApAQCAtMTU2MCw2ICsxNjQwLDcgQEAKIAkuc2V0dXBfcGxhbmUJCT0gYmxpenphcmRfc2V0dXBfcGxhbmUsCiAJLnNldF9zY2FsZQkJPSBibGl6emFyZF9zZXRfc2NhbGUsCiAJLmVuYWJsZV9wbGFuZQkJPSBibGl6emFyZF9lbmFibGVfcGxhbmUsCisJLnNldF9yb3RhdGUJCT0gYmxpenphcmRfc2V0X3JvdGF0ZSwKIAkudXBkYXRlX3dpbmRvdwkJPSBibGl6emFyZF91cGRhdGVfd2luZG93X2FzeW5jLAogCS5zeW5jCQkJPSBibGl6emFyZF9zeW5jLAogCS5zdXNwZW5kCQk9IGJsaXp6YXJkX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCmluZGV4IDkxNTQzOWQuLjgwYTExZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCkBAIC0xNTUsNiArMTU1LDggQEAKIAl1bnNpZ25lZCBsb25nCSptYXA7CiB9OwogCisjZGVmaW5lIE1BWF9JUlFfSEFORExFUlMgICAgICAgICAgICA0CisKIHN0YXRpYyBzdHJ1Y3QgewogCXZvaWQgX19pb21lbQkqYmFzZTsKIApAQCAtMTY3LDkgKzE2OSwxMSBAQAogCiAJaW50CQlleHRfbW9kZTsKIAotCXVuc2lnbmVkIGxvbmcJZW5hYmxlZF9pcnFzOwotCXZvaWQJCSgqaXJxX2NhbGxiYWNrKSh2b2lkICopOwotCXZvaWQJCSppcnFfY2FsbGJhY2tfZGF0YTsKKwlzdHJ1Y3QgeworCQl1MzIJaXJxX21hc2s7CisJCXZvaWQJKCpjYWxsYmFjaykodm9pZCAqKTsKKwkJdm9pZAkqZGF0YTsKKwl9IGlycV9oYW5kbGVyc1tNQVhfSVJRX0hBTkRMRVJTXTsKIAlzdHJ1Y3QgY29tcGxldGlvbglmcmFtZV9kb25lOwogCiAJaW50CQlmaXJfaGluY1tPTUFQRkJfUExBTkVfTlVNXTsKQEAgLTI4Niw3ICsyOTAsNyBAQAogCUJVR19PTihwbGFuZSA+IDIpOwogCiAJbCA9IGRpc3BjX3JlYWRfcmVnKGZzel9yZWdbcGxhbmVdKTsKLQlsICY9IEZMRF9NQVNLKDAsIDkpOworCWwgJj0gRkxEX01BU0soMCwgMTEpOwogCWlmIChleHRfbW9kZSkgewogCQlsb3cgPSBsICogMyAvIDQ7CiAJCWhpZ2ggPSBsOwpAQCAtMjk0LDcgKzI5OCw3IEBACiAJCWxvdyA9IGwgLyA0OwogCQloaWdoID0gbCAqIDMgLyA0OwogCX0KLQlNT0RfUkVHX0ZMRChmdHJzX3JlZ1twbGFuZV0sIEZMRF9NQVNLKDE2LCA5KSB8IEZMRF9NQVNLKDAsIDkpLAorCU1PRF9SRUdfRkxEKGZ0cnNfcmVnW3BsYW5lXSwgRkxEX01BU0soMTYsIDEyKSB8IEZMRF9NQVNLKDAsIDEyKSwKIAkJCShoaWdoIDw8IDE2KSB8IGxvdyk7CiB9CiAKQEAgLTgwOSw1NyArODEzLDc0IEBACiAJcGFuZWwtPnBpeGVsX2Nsb2NrID0gZmNrIC8gbGNrX2RpdiAvIHBja19kaXYgLyAxMDAwOwogfQogCi1pbnQgb21hcF9kaXNwY19yZXF1ZXN0X2lycSh2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgcmVjYWxjX2lycV9tYXNrKHZvaWQpCiB7Ci0JaW50IHIgPSAwOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBESVNQQ19JUlFfTUFTS19FUlJPUjsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVJRX0hBTkRMRVJTOyBpKyspIHsKKwkJaWYgKCFkaXNwYy5pcnFfaGFuZGxlcnNbaV0uY2FsbGJhY2spCisJCQljb250aW51ZTsKKworCQlpcnFfbWFzayB8PSBkaXNwYy5pcnFfaGFuZGxlcnNbaV0uaXJxX21hc2s7CisJfQorCisJZW5hYmxlX2xjZF9jbG9ja3MoMSk7CisJTU9EX1JFR19GTEQoRElTUENfSVJRRU5BQkxFLCAweDdmZmYsIGlycV9tYXNrKTsKKwllbmFibGVfbGNkX2Nsb2NrcygwKTsKK30KKworaW50IG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEodW5zaWduZWQgbG9uZyBpcnFfbWFzaywgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CiAKIAlCVUdfT04oY2FsbGJhY2sgPT0gTlVMTCk7CiAKLQlpZiAoZGlzcGMuaXJxX2NhbGxiYWNrKQotCQlyID0gLUVCVVNZOwotCWVsc2UgewotCQlkaXNwYy5pcnFfY2FsbGJhY2sgPSBjYWxsYmFjazsKLQkJZGlzcGMuaXJxX2NhbGxiYWNrX2RhdGEgPSBkYXRhOworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVJRX0hBTkRMRVJTOyBpKyspIHsKKwkJaWYgKGRpc3BjLmlycV9oYW5kbGVyc1tpXS5jYWxsYmFjaykKKwkJCWNvbnRpbnVlOworCisJCWRpc3BjLmlycV9oYW5kbGVyc1tpXS5pcnFfbWFzayA9IGlycV9tYXNrOworCQlkaXNwYy5pcnFfaGFuZGxlcnNbaV0uY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmRhdGEgPSBkYXRhOworCQlyZWNhbGNfaXJxX21hc2soKTsKKworCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gcjsKKwlyZXR1cm4gLUVCVVNZOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX2Rpc3BjX3JlcXVlc3RfaXJxKTsKIAotdm9pZCBvbWFwX2Rpc3BjX2VuYWJsZV9pcnFzKGludCBpcnFfbWFzaykKK3ZvaWQgb21hcF9kaXNwY19mcmVlX2lycSh1bnNpZ25lZCBsb25nIGlycV9tYXNrLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLAorCQkJIHZvaWQgKmRhdGEpCiB7Ci0JZW5hYmxlX2xjZF9jbG9ja3MoMSk7Ci0JZGlzcGMuZW5hYmxlZF9pcnFzID0gaXJxX21hc2s7Ci0JaXJxX21hc2sgfD0gRElTUENfSVJRX01BU0tfRVJST1I7Ci0JTU9EX1JFR19GTEQoRElTUENfSVJRRU5BQkxFLCAweDdmZmYsIGlycV9tYXNrKTsKLQllbmFibGVfbGNkX2Nsb2NrcygwKTsKLX0KLUVYUE9SVF9TWU1CT0wob21hcF9kaXNwY19lbmFibGVfaXJxcyk7CisJaW50IGk7CiAKLXZvaWQgb21hcF9kaXNwY19kaXNhYmxlX2lycXMoaW50IGlycV9tYXNrKQotewotCWVuYWJsZV9sY2RfY2xvY2tzKDEpOwotCWRpc3BjLmVuYWJsZWRfaXJxcyAmPSB+aXJxX21hc2s7Ci0JaXJxX21hc2sgJj0gfkRJU1BDX0lSUV9NQVNLX0VSUk9SOwotCU1PRF9SRUdfRkxEKERJU1BDX0lSUUVOQUJMRSwgMHg3ZmZmLCBpcnFfbWFzayk7Ci0JZW5hYmxlX2xjZF9jbG9ja3MoMCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfZGlzcGNfZGlzYWJsZV9pcnFzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lSUV9IQU5ETEVSUzsgaSsrKSB7CisJCWlmIChkaXNwYy5pcnFfaGFuZGxlcnNbaV0uY2FsbGJhY2sgPT0gY2FsbGJhY2sgJiYKKwkJICAgIGRpc3BjLmlycV9oYW5kbGVyc1tpXS5kYXRhID09IGRhdGEpIHsKKwkJCWRpc3BjLmlycV9oYW5kbGVyc1tpXS5pcnFfbWFzayA9IDA7CisJCQlkaXNwYy5pcnFfaGFuZGxlcnNbaV0uY2FsbGJhY2sgPSBOVUxMOworCQkJZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmRhdGEgPSBOVUxMOworCQkJcmVjYWxjX2lycV9tYXNrKCk7CisJCQlyZXR1cm47CisJCX0KKwl9CiAKLXZvaWQgb21hcF9kaXNwY19mcmVlX2lycSh2b2lkKQotewotCWVuYWJsZV9sY2RfY2xvY2tzKDEpOwotCW9tYXBfZGlzcGNfZGlzYWJsZV9pcnFzKERJU1BDX0lSUV9NQVNLX0FMTCk7Ci0JZGlzcGMuaXJxX2NhbGxiYWNrID0gTlVMTDsKLQlkaXNwYy5pcnFfY2FsbGJhY2tfZGF0YSA9IE5VTEw7Ci0JZW5hYmxlX2xjZF9jbG9ja3MoMCk7CisJQlVHKCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZGlzcGNfZnJlZV9pcnEpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9kaXNwY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCiB7Ci0JdTMyIHN0YXQgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19JUlFTVEFUVVMpOworCXUzMiBzdGF0OworCWludCBpID0gMDsKIAorCWVuYWJsZV9sY2RfY2xvY2tzKDEpOworCisJc3RhdCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX0lSUVNUQVRVUyk7CiAJaWYgKHN0YXQgJiBESVNQQ19JUlFfRlJBTUVNQVNLKQogCQljb21wbGV0ZSgmZGlzcGMuZnJhbWVfZG9uZSk7CiAKQEAgLTg3MCwxMSArODkxLDE3IEBACiAJCX0KIAl9CiAKLQlpZiAoKHN0YXQgJiBkaXNwYy5lbmFibGVkX2lycXMpICYmIGRpc3BjLmlycV9jYWxsYmFjaykKLQkJZGlzcGMuaXJxX2NhbGxiYWNrKGRpc3BjLmlycV9jYWxsYmFja19kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lSUV9IQU5ETEVSUzsgaSsrKSB7CisJCWlmICh1bmxpa2VseShkaXNwYy5pcnFfaGFuZGxlcnNbaV0uY2FsbGJhY2sgJiYKKwkJCSAgICAgKHN0YXQgJiBkaXNwYy5pcnFfaGFuZGxlcnNbaV0uaXJxX21hc2spKSkKKwkJCWRpc3BjLmlycV9oYW5kbGVyc1tpXS5jYWxsYmFjaygKKwkJCQkJCWRpc3BjLmlycV9oYW5kbGVyc1tpXS5kYXRhKTsKKwl9CiAKIAlkaXNwY193cml0ZV9yZWcoRElTUENfSVJRU1RBVFVTLCBzdGF0KTsKIAorCWVuYWJsZV9sY2RfY2xvY2tzKDApOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC05MTMsMTggKzk0MCwxMyBAQAogCiBzdGF0aWMgdm9pZCBlbmFibGVfbGNkX2Nsb2NrcyhpbnQgZW5hYmxlKQogewotCWlmIChlbmFibGUpCi0JCWNsa19lbmFibGUoZGlzcGMuZHNzMV9mY2spOwotCWVsc2UKLQkJY2xrX2Rpc2FibGUoZGlzcGMuZHNzMV9mY2spOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfaW50ZXJmYWNlX2Nsb2NrcyhpbnQgZW5hYmxlKQotewotCWlmIChlbmFibGUpCisJaWYgKGVuYWJsZSkgewogCQljbGtfZW5hYmxlKGRpc3BjLmRzc19pY2spOwotCWVsc2UKKwkJY2xrX2VuYWJsZShkaXNwYy5kc3MxX2Zjayk7CisJfSBlbHNlIHsKKwkJY2xrX2Rpc2FibGUoZGlzcGMuZHNzMV9mY2spOwogCQljbGtfZGlzYWJsZShkaXNwYy5kc3NfaWNrKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9kaWdpdF9jbG9ja3MoaW50IGVuYWJsZSkKQEAgLTEzNjUsNyArMTM4Nyw2IEBACiAJaWYgKChyID0gZ2V0X2Rzc19jbG9ja3MoKSkgPCAwKQogCQlnb3RvIGZhaWwwOwogCi0JZW5hYmxlX2ludGVyZmFjZV9jbG9ja3MoMSk7CiAJZW5hYmxlX2xjZF9jbG9ja3MoMSk7CiAKICNpZmRlZiBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQKQEAgLTEzOTYsMTAgKzE0MTcsMTAgQEAKIAkJZW5hYmxlX2RpZ2l0X2Nsb2NrcygwKTsKIAl9CiAKLQkvKiBFbmFibGUgc21hcnQgaWRsZSBhbmQgYXV0b2lkbGUgKi8KLQlsID0gZGlzcGNfcmVhZF9yZWcoRElTUENfQ09OVFJPTCk7CisJLyogRW5hYmxlIHNtYXJ0IHN0YW5kYnkvaWRsZSwgYXV0b2lkbGUgYW5kIHdha2V1cCAqLworCWwgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19TWVNDT05GSUcpOwogCWwgJj0gfigoMyA8PCAxMikgfCAoMyA8PCAzKSk7Ci0JbCB8PSAoMiA8PCAxMikgfCAoMiA8PCAzKSB8ICgxIDw8IDApOworCWwgfD0gKDIgPDwgMTIpIHwgKDIgPDwgMykgfCAoMSA8PCAyKSB8ICgxIDw8IDApOwogCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19TWVNDT05GSUcsIGwpOwogCW9tYXBfd3JpdGVsKDEgPDwgMCwgRFNTX0JBU0UgKyBEU1NfU1lTQ09ORklHKTsKIApAQCAtMTQwOSwxMCArMTQzMCw5IEBACiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX0NPTkZJRywgbCk7CiAKIAlsID0gZGlzcGNfcmVhZF9yZWcoRElTUENfSVJRU1RBVFVTKTsKLQlkaXNwY193cml0ZV9yZWcobCwgRElTUENfSVJRU1RBVFVTKTsKKwlkaXNwY193cml0ZV9yZWcoRElTUENfSVJRU1RBVFVTLCBsKTsKIAotCS8qIEVuYWJsZSB0aG9zZSB0aGF0IHdlIGhhbmRsZSBhbHdheXMgKi8KLQlvbWFwX2Rpc3BjX2VuYWJsZV9pcnFzKERJU1BDX0lSUV9GUkFNRU1BU0spOworCXJlY2FsY19pcnFfbWFzaygpOwogCiAJaWYgKChyID0gcmVxdWVzdF9pcnEoSU5UXzI0WFhfRFNTX0lSUSwgb21hcF9kaXNwY19pcnFfaGFuZGxlciwKIAkJCSAgIDAsIE1PRFVMRV9OQU1FLCBmYmRldikpIDwgMCkgewpAQCAtMTQ2OSw3ICsxNDg5LDYgQEAKIAlmcmVlX2lycShJTlRfMjRYWF9EU1NfSVJRLCBmYmRldik7CiBmYWlsMToKIAllbmFibGVfbGNkX2Nsb2NrcygwKTsKLQllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygwKTsKIAlwdXRfZHNzX2Nsb2NrcygpOwogZmFpbDA6CiAJaW91bm1hcChkaXNwYy5iYXNlKTsKQEAgLTE0ODcsNyArMTUwNiw2IEBACiAJY2xlYW51cF9mYm1lbSgpOwogCWZyZWVfcGFsZXR0ZV9yYW0oKTsKIAlmcmVlX2lycShJTlRfMjRYWF9EU1NfSVJRLCBkaXNwYy5mYmRldik7Ci0JZW5hYmxlX2ludGVyZmFjZV9jbG9ja3MoMCk7CiAJcHV0X2Rzc19jbG9ja3MoKTsKIAlpb3VubWFwKGRpc3BjLmJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmggYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaAppbmRleCBlZjcyMGE3Li5jMTVlYTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaApAQCAtMzcsOSArMzcsMTAgQEAKIGV4dGVybiB2b2lkIG9tYXBfZGlzcGNfZW5hYmxlX2xjZF9vdXQoaW50IGVuYWJsZSk7CiBleHRlcm4gdm9pZCBvbWFwX2Rpc3BjX2VuYWJsZV9kaWdpdF9vdXQoaW50IGVuYWJsZSk7CiAKLWV4dGVybiBpbnQgIG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEodm9pZCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBvbWFwX2Rpc3BjX2ZyZWVfaXJxKHZvaWQpOworZXh0ZXJuIGludCBvbWFwX2Rpc3BjX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGxvbmcgaXJxX21hc2ssCisJCQkJICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBvbWFwX2Rpc3BjX2ZyZWVfaXJxKHVuc2lnbmVkIGxvbmcgaXJxX21hc2ssCisJCQkJIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGxjZF9jdHJsIG9tYXAyX2ludF9jdHJsOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYwppbmRleCA1ZDRmMzQ4Li5jYTUxNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvaHdhNzQyLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogCXN0cnVjdCBvbWFwZmJfZGV2aWNlCSpmYmRldjsKIAlzdHJ1Y3QgbGNkX2N0cmxfZXh0aWYJKmV4dGlmOwotCXN0cnVjdCBsY2RfY3RybAkJKmludF9jdHJsOworCWNvbnN0IHN0cnVjdCBsY2RfY3RybAkqaW50X2N0cmw7CiAKIAlzdHJ1Y3QgY2xrCQkqc3lzX2NrOwogfSBod2E3NDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkXzI0MzBzZHAuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfMjQzMHNkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MzcxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkXzI0MzBzZHAuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIExDRCBwYW5lbCBzdXBwb3J0IGZvciB0aGUgVEkgMjQzMFNEUCBib2FyZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNb250YVZpc3RhCisgKiBBdXRob3I6IEh1bnl1ZSBZYXUgPGh5YXVAbXZpc3RhLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy92aWRlby9vbWFwL2xjZC1hcG9sbG9uLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwZmIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjZGVmaW5lIFNEUDI0MzBfTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPCTkxCisjZGVmaW5lIFNEUDI0MzBfTENEX1BBTkVMX0VOQUJMRV9HUElPCQkxNTQKKyNkZWZpbmUgU0RQMzQzMF9MQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8JMjQKKyNkZWZpbmUgU0RQMzQzMF9MQ0RfUEFORUxfRU5BQkxFX0dQSU8JCTI4CisKK3N0YXRpYyB1bnNpZ25lZCBiYWNrbGlnaHRfZ3BpbzsKK3N0YXRpYyB1bnNpZ25lZCBlbmFibGVfZ3BpbzsKKworI2RlZmluZSBMQ0RfUElYQ0xPQ0tfTUFYCQk1NDAwIC8qIGZyZXEgNS40IE1IeiAqLworI2RlZmluZSBQTV9SRUNFSVZFUiAgICAgICAgICAgICBUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUgorI2RlZmluZSBFTkFCTEVfVkFVWDJfREVESUNBVEVEICAweDA5CisjZGVmaW5lIEVOQUJMRV9WQVVYMl9ERVZfR1JQICAgIDB4MjAKKyNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFRElDQVRFRAkweDAzCisjZGVmaW5lIEVOQUJMRV9WQVVYM19ERVZfR1JQCTB4MjAKKworI2RlZmluZSBFTkFCTEVfVlBMTDJfREVESUNBVEVEICAgICAgICAgIDB4MDUKKyNkZWZpbmUgRU5BQkxFX1ZQTEwyX0RFVl9HUlAgICAgICAgICAgICAweEUwCisjZGVmaW5lIFRXTDQwMzBfVlBMTDJfREVWX0dSUCAgICAgICAgICAgMHgzMworI2RlZmluZSBUV0w0MDMwX1ZQTEwyX0RFRElDQVRFRCAgICAgICAgIDB4MzYKKworI2RlZmluZSB0Ml9vdXQoYywgciwgdikgdHdsNDAzMF9pMmNfd3JpdGVfdTgoYywgciwgdikKKworCitzdGF0aWMgaW50IHNkcDI0MzBfcGFuZWxfaW5pdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwKKwkJCQlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYpCit7CisJaWYgKG1hY2hpbmVfaXNfb21hcF8zNDMwc2RwKCkpIHsKKwkJZW5hYmxlX2dwaW8gICAgPSBTRFAzNDMwX0xDRF9QQU5FTF9FTkFCTEVfR1BJTzsKKwkJYmFja2xpZ2h0X2dwaW8gPSBTRFAzNDMwX0xDRF9QQU5FTF9CQUNLTElHSFRfR1BJTzsKKwl9IGVsc2UgeworCQllbmFibGVfZ3BpbyAgICA9IFNEUDI0MzBfTENEX1BBTkVMX0VOQUJMRV9HUElPOworCQliYWNrbGlnaHRfZ3BpbyA9IFNEUDI0MzBfTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPOworCX0KKworCWdwaW9fcmVxdWVzdChlbmFibGVfZ3BpbywgIkxDRCBlbmFibGUiKTsJLyogTENEIHBhbmVsICovCisJZ3Bpb19yZXF1ZXN0KGJhY2tsaWdodF9ncGlvLCAiTENEIGJsIik7CQkvKiBMQ0QgYmFja2xpZ2h0ICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGVuYWJsZV9ncGlvLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoYmFja2xpZ2h0X2dwaW8sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkcDI0MzBfcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX2ZyZWUoYmFja2xpZ2h0X2dwaW8pOworCWdwaW9fZnJlZShlbmFibGVfZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgc2RwMjQzMF9wYW5lbF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJdTggZGVkX3ZhbCwgZGVkX3JlZzsKKwl1OCBncnBfdmFsLCBncnBfcmVnOworCisJaWYgKG1hY2hpbmVfaXNfb21hcF8zNDMwc2RwKCkpIHsKKwkJZGVkX3JlZyA9IFRXTDQwMzBfVkFVWDNfREVESUNBVEVEOworCQlkZWRfdmFsID0gRU5BQkxFX1ZBVVgzX0RFRElDQVRFRDsKKwkJZ3JwX3JlZyA9IFRXTDQwMzBfVkFVWDNfREVWX0dSUDsKKwkJZ3JwX3ZhbCA9IEVOQUJMRV9WQVVYM19ERVZfR1JQOworCisJCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKSB7CisJCQl0Ml9vdXQoUE1fUkVDRUlWRVIsIEVOQUJMRV9WUExMMl9ERURJQ0FURUQsCisJCQkJCVRXTDQwMzBfVlBMTDJfREVESUNBVEVEKTsKKwkJCXQyX291dChQTV9SRUNFSVZFUiwgRU5BQkxFX1ZQTEwyX0RFVl9HUlAsCisJCQkJCVRXTDQwMzBfVlBMTDJfREVWX0dSUCk7CisJCX0KKwl9IGVsc2UgeworCQlkZWRfcmVnID0gVFdMNDAzMF9WQVVYMl9ERURJQ0FURUQ7CisJCWRlZF92YWwgPSBFTkFCTEVfVkFVWDJfREVESUNBVEVEOworCQlncnBfcmVnID0gVFdMNDAzMF9WQVVYMl9ERVZfR1JQOworCQlncnBfdmFsID0gRU5BQkxFX1ZBVVgyX0RFVl9HUlA7CisJfQorCisJZ3Bpb19zZXRfdmFsdWUoZW5hYmxlX2dwaW8sIDEpOworCWdwaW9fc2V0X3ZhbHVlKGJhY2tsaWdodF9ncGlvLCAxKTsKKworCWlmICgwICE9IHQyX291dChQTV9SRUNFSVZFUiwgZGVkX3ZhbCwgZGVkX3JlZykpCisJCXJldHVybiAtRUlPOworCWlmICgwICE9IHQyX291dChQTV9SRUNFSVZFUiwgZ3JwX3ZhbCwgZ3JwX3JlZykpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkcDI0MzBfcGFuZWxfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShlbmFibGVfZ3BpbywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoYmFja2xpZ2h0X2dwaW8sIDApOworCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKSB7CisJCXQyX291dChQTV9SRUNFSVZFUiwgMHgwLCBUV0w0MDMwX1ZQTEwyX0RFRElDQVRFRCk7CisJCXQyX291dChQTV9SRUNFSVZFUiwgMHgwLCBUV0w0MDMwX1ZQTEwyX0RFVl9HUlApOworCQltc2xlZXAoNCk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZHAyNDMwX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbGNkX3BhbmVsIHNkcDI0MzBfcGFuZWwgPSB7CisJLm5hbWUJCT0gInNkcDI0MzAiLAorCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCB8IE9NQVBfTENEQ19JTlZfVlNZTkMgfAorCQkJICBPTUFQX0xDRENfSU5WX0hTWU5DLAorCisJLmJwcAkJPSAxNiwKKwkuZGF0YV9saW5lcwk9IDE2LAorCS54X3JlcwkJPSAyNDAsCisJLnlfcmVzCQk9IDMyMCwKKwkuaHN3CQk9IDMsCQkvKiBoc3luY19sZW4gKDQpIC0gMSAqLworCS5oZnAJCT0gMywJCS8qIHJpZ2h0X21hcmdpbiAoNCkgLSAxICovCisJLmhicAkJPSAzOSwJCS8qIGxlZnRfbWFyZ2luICg0MCkgLSAxICovCisJLnZzdwkJPSAxLAkJLyogdnN5bmNfbGVuICgyKSAtIDEgKi8KKwkudmZwCQk9IDIsCQkvKiBsb3dlcl9tYXJnaW4gKi8KKwkudmJwCQk9IDcsCQkvKiB1cHBlcl9tYXJnaW4gKDgpIC0gMSAqLworCisJLnBpeGVsX2Nsb2NrCT0gTENEX1BJWENMT0NLX01BWCwKKworCS5pbml0CQk9IHNkcDI0MzBfcGFuZWxfaW5pdCwKKwkuY2xlYW51cAk9IHNkcDI0MzBfcGFuZWxfY2xlYW51cCwKKwkuZW5hYmxlCQk9IHNkcDI0MzBfcGFuZWxfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2RwMjQzMF9wYW5lbF9kaXNhYmxlLAorCS5nZXRfY2Fwcwk9IHNkcDI0MzBfcGFuZWxfZ2V0X2NhcHMsCit9OworCitzdGF0aWMgaW50IHNkcDI0MzBfcGFuZWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlvbWFwZmJfcmVnaXN0ZXJfcGFuZWwoJnNkcDI0MzBfcGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkcDI0MzBfcGFuZWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RwMjQzMF9wYW5lbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCXBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkcDI0MzBfcGFuZWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2RwMjQzMF9wYW5lbF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNkcDI0MzBfcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSBzZHAyNDMwX3BhbmVsX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHNkcDI0MzBfcGFuZWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNkcDI0MzBfcGFuZWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzZHAyNDMwX2xjZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZHAyNDMwX3BhbmVsX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2RwMjQzMF9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RwMjQzMF9wYW5lbF9kcnZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZHAyNDMwX3BhbmVsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNkcDI0MzBfcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQoc2RwMjQzMF9wYW5lbF9kcnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2Ftc19kZWx0YS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9hbXNfZGVsdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc0Mzk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9hbXNfZGVsdGEuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIEJhc2VkIG9uIGRyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTUxMC5jCisgKgorICogTENEIHBhbmVsIHN1cHBvcnQgZm9yIHRoZSBBbXN0cmFkIEUzIChEZWx0YSkgdmlkZW9waG9uZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQtYW1zLWRlbHRhLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CisKKyNkZWZpbmUgQU1TX0RFTFRBX0RFRkFVTFRfQ09OVFJBU1QJMTEyCisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYW1zX2RlbHRhX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTENEX05ESVNQLAorCQkJQU1TX0RFTFRBX0xBVENIMl9MQ0RfTkRJU1ApOworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9MQ0RfVkJMRU4sCisJCQlBTVNfREVMVEFfTEFUQ0gyX0xDRF9WQkxFTik7CisKKwlvbWFwX3dyaXRlYigxLCBPTUFQX1BXTF9DTEtfRU5BQkxFKTsKKwlvbWFwX3dyaXRlYihBTVNfREVMVEFfREVGQVVMVF9DT05UUkFTVCwgT01BUF9QV0xfRU5BQkxFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfcGFuZWxfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTENEX1ZCTEVOLCAwKTsKKwlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTENEX05ESVNQLCAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYW1zX2RlbHRhX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxjZF9wYW5lbCBhbXNfZGVsdGFfcGFuZWwgPSB7CisJLm5hbWUJCT0gImFtcy1kZWx0YSIsCisJLmNvbmZpZwkJPSAwLAorCisJLmJwcAkJPSAxMiwKKwkuZGF0YV9saW5lcwk9IDE2LAorCS54X3JlcwkJPSA0ODAsCisJLnlfcmVzCQk9IDMyMCwKKwkucGl4ZWxfY2xvY2sJPSA0Njg3LAorCS5oc3cJCT0gMywKKwkuaGZwCQk9IDEsCisJLmhicAkJPSAxLAorCS52c3cJCT0gMSwKKwkudmZwCQk9IDAsCisJLnZicAkJPSAwLAorCS5wY2QJCT0gMCwKKwkuYWNiCQk9IDM3LAorCisJLmluaXQJCT0gYW1zX2RlbHRhX3BhbmVsX2luaXQsCisJLmNsZWFudXAJPSBhbXNfZGVsdGFfcGFuZWxfY2xlYW51cCwKKwkuZW5hYmxlCQk9IGFtc19kZWx0YV9wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSBhbXNfZGVsdGFfcGFuZWxfZGlzYWJsZSwKKwkuZ2V0X2NhcHMJPSBhbXNfZGVsdGFfcGFuZWxfZ2V0X2NhcHMsCit9OworCitzdGF0aWMgaW50IGFtc19kZWx0YV9wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmYW1zX2RlbHRhX3BhbmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbXNfZGVsdGFfcGFuZWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX3BhbmVsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJcG1fbWVzc2FnZV90IG1lc2cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX3BhbmVsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFtc19kZWx0YV9wYW5lbF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGFtc19kZWx0YV9wYW5lbF9wcm9iZSwKKwkucmVtb3ZlCQk9IGFtc19kZWx0YV9wYW5lbF9yZW1vdmUsCisJLnN1c3BlbmQJPSBhbXNfZGVsdGFfcGFuZWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFtc19kZWx0YV9wYW5lbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImxjZF9hbXNfZGVsdGEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBhbXNfZGVsdGFfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhbXNfZGVsdGFfcGFuZWxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgYW1zX2RlbHRhX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFtc19kZWx0YV9wYW5lbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbXNfZGVsdGFfcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQoYW1zX2RlbHRhX3BhbmVsX2Rydl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYXBvbGxvbi5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9hcG9sbG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2YWUzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYXBvbGxvbi5jCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogTENEIHBhbmVsIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIE9NQVAyIEFwb2xsb24gYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBdXRob3I6IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC9sY2QtaDQuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwZmIuaD4KKworLyogI2RlZmluZSBVU0VfMzVJTkNIX0xDRCAxICovCisKK3N0YXRpYyBpbnQgYXBvbGxvbl9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKK3sKKwkvKiBjb25maWd1cmUgTENEIFBXUl9FTiAqLworCW9tYXBfY2ZnX3JlZyhNMjFfMjQyWF9HUElPMTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhcG9sbG9uX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7Cit9CisKK3N0YXRpYyBpbnQgYXBvbGxvbl9wYW5lbF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwb2xsb25fcGFuZWxfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBvbGxvbl9wYW5lbF9nZXRfY2FwcyhzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGxjZF9wYW5lbCBhcG9sbG9uX3BhbmVsID0geworCS5uYW1lCQk9ICJhcG9sbG9uIiwKKwkuY29uZmlnCQk9IE9NQVBfTENEQ19QQU5FTF9URlQgfCBPTUFQX0xDRENfSU5WX1ZTWU5DIHwKKwkJCSAgT01BUF9MQ0RDX0lOVl9IU1lOQywKKworCS5icHAJCT0gMTYsCisJLmRhdGFfbGluZXMJPSAxOCwKKyNpZmRlZiBVU0VfMzVJTkNIX0xDRAorCS54X3JlcwkJPSAyNDAsCisJLnlfcmVzCQk9IDMyMCwKKwkuaHN3CQk9IDIsCisJLmhmcAkJPSAzLAorCS5oYnAJCT0gOSwKKwkudnN3CQk9IDQsCisJLnZmcAkJPSAzLAorCS52YnAJCT0gNSwKKyNlbHNlCisJLnhfcmVzCQk9IDQ4MCwKKwkueV9yZXMJCT0gMjcyLAorCS5oc3cJCT0gNDEsCisJLmhmcAkJPSAyLAorCS5oYnAJCT0gMiwKKwkudnN3CQk9IDEwLAorCS52ZnAJCT0gMiwKKwkudmJwCQk9IDIsCisjZW5kaWYKKwkucGl4ZWxfY2xvY2sJPSA2MjUwLAorCisJLmluaXQJCT0gYXBvbGxvbl9wYW5lbF9pbml0LAorCS5jbGVhbnVwCT0gYXBvbGxvbl9wYW5lbF9jbGVhbnVwLAorCS5lbmFibGUJCT0gYXBvbGxvbl9wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSBhcG9sbG9uX3BhbmVsX2Rpc2FibGUsCisJLmdldF9jYXBzCT0gYXBvbGxvbl9wYW5lbF9nZXRfY2FwcywKK307CisKK3N0YXRpYyBpbnQgYXBvbGxvbl9wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmYXBvbGxvbl9wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBvbGxvbl9wYW5lbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcG9sbG9uX3BhbmVsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwb2xsb25fcGFuZWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXBvbGxvbl9wYW5lbF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGFwb2xsb25fcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSBhcG9sbG9uX3BhbmVsX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGFwb2xsb25fcGFuZWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFwb2xsb25fcGFuZWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhcG9sbG9uX2xjZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhcG9sbG9uX3BhbmVsX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXBvbGxvbl9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXBvbGxvbl9wYW5lbF9kcnZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhcG9sbG9uX3BhbmVsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFwb2xsb25fcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQoYXBvbGxvbl9wYW5lbF9kcnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2gzLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2gzLmMKaW5kZXggMjQ4NjIzNy4uNDE3YWU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oMy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDMuYwpAQCAtMTI0LDEyICsxMjQsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBoM19wYW5lbF9kcnZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaDNfcGFuZWxfZHJ2X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoM19wYW5lbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBoM19wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGgzX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmgzX3BhbmVsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2g0LmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2g0LmMKaW5kZXggNmZmNTY0My4uMGMzOThiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oNC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYwpAQCAtMTAyLDEyICsxMDIsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBoNF9wYW5lbF9kcnZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaDRfcGFuZWxfZHJ2X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoNF9wYW5lbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBoNF9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGg0X3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmg0X3BhbmVsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE1MTAuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTUxMC5jCmluZGV4IDY5NTNlZDQuLmNkYmQ4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTUxMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTUxMC5jCkBAIC0xMDksMTIgKzEwOSwxMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IGlubm92YXRvcjE1MTBfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGlubm92YXRvcjE1MTBfcGFuZWxfZHJ2X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbm5vdmF0b3IxNTEwX3BhbmVsX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGlubm92YXRvcjE1MTBfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbm5vdmF0b3IxNTEwX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlubm92YXRvcjE1MTBfcGFuZWxfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTYxMC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNjEwLmMKaW5kZXggNGM0ZjdlZS4uMjY4ZjdmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNjEwLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNjEwLmMKQEAgLTEzMywxMiArMTMzLDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9kcnZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9kcnZfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlubm92YXRvcjE2MTBfcGFuZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlubm92YXRvcjE2MTBfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW5ub3ZhdG9yMTYxMF9wYW5lbF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9sZHAuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbGRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmZTg5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbGRwLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBMQ0QgcGFuZWwgc3VwcG9ydCBmb3IgdGhlIFRJIExEUCBib2FyZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBXaW5kUml2ZXIKKyAqIEF1dGhvcjogU3RhbmxleSBNaWFvIDxzdGFubGV5Lm1pYW9Ad2luZHJpdmVyLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy92aWRlby9vbWFwL2xjZC0yNDMwc2RwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNkZWZpbmUgTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPCSgxNSArIE9NQVBfTUFYX0dQSU9fTElORVMpCisjZGVmaW5lIExDRF9QQU5FTF9FTkFCTEVfR1BJTwkJKDcgKyBPTUFQX01BWF9HUElPX0xJTkVTKQorCisjZGVmaW5lIExDRF9QQU5FTF9SRVNFVF9HUElPCQk1NQorI2RlZmluZSBMQ0RfUEFORUxfUVZHQV9HUElPCQk1NgorCisjaWZkZWYgQ09ORklHX0ZCX09NQVBfTENEX1ZHQQorI2RlZmluZSBMQ0RfWFJFUwkJNDgwCisjZGVmaW5lIExDRF9ZUkVTCQk2NDAKKyNkZWZpbmUgTENEX1BJWENMT0NLX01BWAk0MTcwMAorI2Vsc2UKKyNkZWZpbmUgTENEX1hSRVMJCTI0MAorI2RlZmluZSBMQ0RfWVJFUwkJMzIwCisjZGVmaW5lIExDRF9QSVhDTE9DS19NQVgJMTg1MTg2CisjZW5kaWYKKworI2RlZmluZSBQTV9SRUNFSVZFUiAgICAgICAgICAgICBUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUgorI2RlZmluZSBFTkFCTEVfVkFVWDJfREVESUNBVEVEICAweDA5CisjZGVmaW5lIEVOQUJMRV9WQVVYMl9ERVZfR1JQICAgIDB4MjAKKyNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFRElDQVRFRAkweDAzCisjZGVmaW5lIEVOQUJMRV9WQVVYM19ERVZfR1JQCTB4MjAKKworI2RlZmluZSBFTkFCTEVfVlBMTDJfREVESUNBVEVEICAgICAgICAgIDB4MDUKKyNkZWZpbmUgRU5BQkxFX1ZQTEwyX0RFVl9HUlAgICAgICAgICAgICAweEUwCisjZGVmaW5lIFRXTDQwMzBfVlBMTDJfREVWX0dSUCAgICAgICAgICAgMHgzMworI2RlZmluZSBUV0w0MDMwX1ZQTEwyX0RFRElDQVRFRCAgICAgICAgIDB4MzYKKworI2RlZmluZSB0Ml9vdXQoYywgciwgdikgdHdsNDAzMF9pMmNfd3JpdGVfdTgoYywgciwgdikKKworCitzdGF0aWMgaW50IGxkcF9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKK3sKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1JFU0VUX0dQSU8sICJsY2QgcmVzZXQiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1FWR0FfR1BJTywgImxjZCBxdmdhIik7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9FTkFCTEVfR1BJTywgImxjZCBwYW5lbCIpOworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8sICJsY2QgYmFja2xpZ2h0Iik7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1FWR0FfR1BJTywgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9SRVNFVF9HUElPLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPLCAwKTsKKworI2lmZGVmIENPTkZJR19GQl9PTUFQX0xDRF9WR0EKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfUVZHQV9HUElPLCAwKTsKKyNlbHNlCisJZ3Bpb19zZXRfdmFsdWUoTENEX1BBTkVMX1FWR0FfR1BJTywgMSk7CisjZW5kaWYKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfUkVTRVRfR1BJTywgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGRwX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9CQUNLTElHSFRfR1BJTyk7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9FTkFCTEVfR1BJTyk7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9RVkdBX0dQSU8pOworCWdwaW9fZnJlZShMQ0RfUEFORUxfUkVTRVRfR1BJTyk7Cit9CisKK3N0YXRpYyBpbnQgbGRwX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlpZiAoMCAhPSB0Ml9vdXQoUE1fUkVDRUlWRVIsIEVOQUJMRV9WUExMMl9ERURJQ0FURUQsCisJCQlUV0w0MDMwX1ZQTEwyX0RFRElDQVRFRCkpCisJCXJldHVybiAtRUlPOworCWlmICgwICE9IHQyX291dChQTV9SRUNFSVZFUiwgRU5BQkxFX1ZQTEwyX0RFVl9HUlAsCisJCQlUV0w0MDMwX1ZQTEwyX0RFVl9HUlApKQorCQlyZXR1cm4gLUVJTzsKKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8sIDEpOworCisJaWYgKDAgIT0gdDJfb3V0KFBNX1JFQ0VJVkVSLCBFTkFCTEVfVkFVWDNfREVESUNBVEVELAorCQkJCVRXTDQwMzBfVkFVWDNfREVESUNBVEVEKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKDAgIT0gdDJfb3V0KFBNX1JFQ0VJVkVSLCBFTkFCTEVfVkFVWDNfREVWX0dSUCwKKwkJCQlUV0w0MDMwX1ZBVVgzX0RFVl9HUlApKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsZHBfcGFuZWxfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPLCAwKTsKKworCXQyX291dChQTV9SRUNFSVZFUiwgMHgwLCBUV0w0MDMwX1ZQTEwyX0RFRElDQVRFRCk7CisJdDJfb3V0KFBNX1JFQ0VJVkVSLCAweDAsIFRXTDQwMzBfVlBMTDJfREVWX0dSUCk7CisJbXNsZWVwKDQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsZHBfcGFuZWxfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsY2RfcGFuZWwgbGRwX3BhbmVsID0geworCS5uYW1lCQk9ICJsZHAiLAorCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCB8IE9NQVBfTENEQ19JTlZfVlNZTkMgfAorCQkJICBPTUFQX0xDRENfSU5WX0hTWU5DLAorCisJLmJwcAkJPSAxNiwKKwkuZGF0YV9saW5lcwk9IDE4LAorCS54X3JlcwkJPSBMQ0RfWFJFUywKKwkueV9yZXMJCT0gTENEX1lSRVMsCisJLmhzdwkJPSAzLAkJLyogaHN5bmNfbGVuICg0KSAtIDEgKi8KKwkuaGZwCQk9IDMsCQkvKiByaWdodF9tYXJnaW4gKDQpIC0gMSAqLworCS5oYnAJCT0gMzksCQkvKiBsZWZ0X21hcmdpbiAoNDApIC0gMSAqLworCS52c3cJCT0gMSwJCS8qIHZzeW5jX2xlbiAoMikgLSAxICovCisJLnZmcAkJPSAyLAkJLyogbG93ZXJfbWFyZ2luICovCisJLnZicAkJPSA3LAkJLyogdXBwZXJfbWFyZ2luICg4KSAtIDEgKi8KKworCS5waXhlbF9jbG9jawk9IExDRF9QSVhDTE9DS19NQVgsCisKKwkuaW5pdAkJPSBsZHBfcGFuZWxfaW5pdCwKKwkuY2xlYW51cAk9IGxkcF9wYW5lbF9jbGVhbnVwLAorCS5lbmFibGUJCT0gbGRwX3BhbmVsX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGxkcF9wYW5lbF9kaXNhYmxlLAorCS5nZXRfY2Fwcwk9IGxkcF9wYW5lbF9nZXRfY2FwcywKK307CisKK3N0YXRpYyBpbnQgbGRwX3BhbmVsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb21hcGZiX3JlZ2lzdGVyX3BhbmVsKCZsZHBfcGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxkcF9wYW5lbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZHBfcGFuZWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZHBfcGFuZWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbGRwX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbGRwX3BhbmVsX3Byb2JlLAorCS5yZW1vdmUJCT0gbGRwX3BhbmVsX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGxkcF9wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gbGRwX3BhbmVsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibGRwX2xjZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsZHBfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZsZHBfcGFuZWxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxkcF9wYW5lbF9kcnZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsZHBfcGFuZWxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobGRwX3BhbmVsX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KGxkcF9wYW5lbF9kcnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX21pcGlkLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX21pcGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4ZWU4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbWlwaWQuYwpAQCAtMCwwICsxLDYyNSBAQAorLyoKKyAqIExDRCBkcml2ZXIgZm9yIE1JUEkgREJJLUMgLyBEQ1MgY29tcGF0aWJsZSBMQ0RzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSA8bWFjaC9vbWFwZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2xjZF9taXBpZC5oPgorCisjZGVmaW5lIE1JUElEX01PRFVMRV9OQU1FCQkibGNkX21pcGlkIgorCisjZGVmaW5lIE1JUElEX0NNRF9SRUFEX0RJU1BfSUQJCTB4MDQKKyNkZWZpbmUgTUlQSURfQ01EX1JFQURfUkVECQkweDA2CisjZGVmaW5lIE1JUElEX0NNRF9SRUFEX0dSRUVOCQkweDA3CisjZGVmaW5lIE1JUElEX0NNRF9SRUFEX0JMVUUJCTB4MDgKKyNkZWZpbmUgTUlQSURfQ01EX1JFQURfRElTUF9TVEFUVVMJMHgwOQorI2RlZmluZSBNSVBJRF9DTURfUkREU0RSCQkweDBGCisjZGVmaW5lIE1JUElEX0NNRF9TTEVFUF9JTgkJMHgxMAorI2RlZmluZSBNSVBJRF9DTURfU0xFRVBfT1VUCQkweDExCisjZGVmaW5lIE1JUElEX0NNRF9ESVNQX09GRgkJMHgyOAorI2RlZmluZSBNSVBJRF9DTURfRElTUF9PTgkJMHgyOQorCisjZGVmaW5lIE1JUElEX0VTRF9DSEVDS19QRVJJT0QJCW1zZWNzX3RvX2ppZmZpZXMoNTAwMCkKKworI2RlZmluZSB0b19taXBpZF9kZXZpY2UocCkJCWNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgbWlwaWRfZGV2aWNlLCBcCisJCQkJCQlwYW5lbCkKK3N0cnVjdCBtaXBpZF9kZXZpY2UgeworCWludAkJZW5hYmxlZDsKKwlpbnQJCXJldmlzaW9uOworCXVuc2lnbmVkIGludAlzYXZlZF9ia2xpZ2h0X2xldmVsOworCXVuc2lnbmVkIGxvbmcJaHdfZ3VhcmRfZW5kOwkJLyogbmV4dCB2YWx1ZSBvZiBqaWZmaWVzCisJCQkJCQkgICB3aGVuIHdlIGNhbiBpc3N1ZSB0aGUKKwkJCQkJCSAgIG5leHQgc2xlZXAgaW4vb3V0IGNvbW1hbmQgKi8KKwl1bnNpZ25lZCBsb25nCWh3X2d1YXJkX3dhaXQ7CQkvKiBtYXggZ3VhcmQgdGltZSBpbiBqaWZmaWVzICovCisKKwlzdHJ1Y3Qgb21hcGZiX2RldmljZQkqZmJkZXY7CisJc3RydWN0IHNwaV9kZXZpY2UJKnNwaTsKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OworCXN0cnVjdCBsY2RfcGFuZWwJcGFuZWw7CisKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqZXNkX3dxOworCXN0cnVjdCBkZWxheWVkX3dvcmsJZXNkX3dvcms7CisJdm9pZAkJCSgqZXNkX2NoZWNrKShzdHJ1Y3QgbWlwaWRfZGV2aWNlICptKTsKK307CisKK3N0YXRpYyB2b2lkIG1pcGlkX3RyYW5zZmVyKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kLCBpbnQgY21kLCBjb25zdCB1OCAqd2J1ZiwKKwkJCSAgIGludCB3bGVuLCB1OCAqcmJ1ZiwgaW50IHJsZW4pCit7CisJc3RydWN0IHNwaV9tZXNzYWdlCW07CisJc3RydWN0IHNwaV90cmFuc2ZlcgkqeCwgeGZlcls0XTsKKwl1MTYJCQl3OworCWludAkJCXI7CisKKwlCVUdfT04obWQtPnNwaSA9PSBOVUxMKTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJbWVtc2V0KHhmZXIsIDAsIHNpemVvZih4ZmVyKSk7CisJeCA9ICZ4ZmVyWzBdOworCisJY21kICY9ICAweGZmOworCXgtPnR4X2J1ZgkJPSAmY21kOworCXgtPmJpdHNfcGVyX3dvcmQJPSA5OworCXgtPmxlbgkJCT0gMjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmbSk7CisKKwlpZiAod2xlbikgeworCQl4Kys7CisJCXgtPnR4X2J1ZgkJPSB3YnVmOworCQl4LT5sZW4JCQk9IHdsZW47CisJCXgtPmJpdHNfcGVyX3dvcmQJPSA5OworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmbSk7CisJfQorCisJaWYgKHJsZW4pIHsKKwkJeCsrOworCQl4LT5yeF9idWYJPSAmdzsKKwkJeC0+bGVuCQk9IDE7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsICZtKTsKKworCQlpZiAocmxlbiA+IDEpIHsKKwkJCS8qIEFycmFuZ2UgZm9yIHRoZSBleHRyYSBjbG9jayBiZWZvcmUgdGhlIGZpcnN0CisJCQkgKiBkYXRhIGJpdC4KKwkJCSAqLworCQkJeC0+Yml0c19wZXJfd29yZCA9IDk7CisJCQl4LT5sZW4JCSA9IDI7CisKKwkJCXgrKzsKKwkJCXgtPnJ4X2J1ZgkgPSAmcmJ1ZlsxXTsKKwkJCXgtPmxlbgkJID0gcmxlbiAtIDE7CisJCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmbSk7CisJCX0KKwl9CisKKwlyID0gc3BpX3N5bmMobWQtPnNwaSwgJm0pOworCWlmIChyIDwgMCkKKwkJZGV2X2RiZygmbWQtPnNwaS0+ZGV2LCAic3BpX3N5bmMgJWRcbiIsIHIpOworCisJaWYgKHJsZW4pCisJCXJidWZbMF0gPSB3ICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1pcGlkX2NtZChzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCwgaW50IGNtZCkKK3sKKwltaXBpZF90cmFuc2ZlcihtZCwgY21kLCBOVUxMLCAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1pcGlkX3dyaXRlKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kLAorCQkJICAgICAgIGludCByZWcsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCit7CisJbWlwaWRfdHJhbnNmZXIobWQsIHJlZywgYnVmLCBsZW4sIE5VTEwsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWlwaWRfcmVhZChzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCwKKwkJCSAgICAgIGludCByZWcsIHU4ICpidWYsIGludCBsZW4pCit7CisJbWlwaWRfdHJhbnNmZXIobWQsIHJlZywgTlVMTCwgMCwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGF0YV9saW5lcyhzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCwgaW50IGRhdGFfbGluZXMpCit7CisJdTE2IHBhcjsKKworCXN3aXRjaCAoZGF0YV9saW5lcykgeworCWNhc2UgMTY6CisJCXBhciA9IDB4MTUwOworCQlicmVhazsKKwljYXNlIDE4OgorCQlwYXIgPSAweDE2MDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJcGFyID0gMHgxNzA7CisJCWJyZWFrOworCX0KKwltaXBpZF93cml0ZShtZCwgMHgzYSwgKHU4ICopJnBhciwgMik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfaW5pdF9zdHJpbmcoc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJdTE2IGluaXRwYXJbXSA9IHsgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCB9OworCisJbWlwaWRfd3JpdGUobWQsIDB4YzIsICh1OCAqKWluaXRwYXIsIHNpemVvZihpbml0cGFyKSk7CisJc2V0X2RhdGFfbGluZXMobWQsIG1kLT5wYW5lbC5kYXRhX2xpbmVzKTsKK30KKworc3RhdGljIHZvaWQgaHdfZ3VhcmRfc3RhcnQoc3RydWN0IG1pcGlkX2RldmljZSAqbWQsIGludCBndWFyZF9tc2VjKQoreworCW1kLT5od19ndWFyZF93YWl0ID0gbXNlY3NfdG9famlmZmllcyhndWFyZF9tc2VjKTsKKwltZC0+aHdfZ3VhcmRfZW5kID0gamlmZmllcyArIG1kLT5od19ndWFyZF93YWl0OworfQorCitzdGF0aWMgdm9pZCBod19ndWFyZF93YWl0KHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kKQoreworCXVuc2lnbmVkIGxvbmcgd2FpdCA9IG1kLT5od19ndWFyZF9lbmQgLSBqaWZmaWVzOworCisJaWYgKChsb25nKXdhaXQgPiAwICYmIHdhaXQgPD0gbWQtPmh3X2d1YXJkX3dhaXQpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KHdhaXQpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X3NsZWVwX21vZGUoc3RydWN0IG1pcGlkX2RldmljZSAqbWQsIGludCBvbikKK3sKKwlpbnQgY21kLCBzbGVlcF90aW1lID0gNTA7CisKKwlpZiAob24pCisJCWNtZCA9IE1JUElEX0NNRF9TTEVFUF9JTjsKKwllbHNlCisJCWNtZCA9IE1JUElEX0NNRF9TTEVFUF9PVVQ7CisJaHdfZ3VhcmRfd2FpdChtZCk7CisJbWlwaWRfY21kKG1kLCBjbWQpOworCWh3X2d1YXJkX3N0YXJ0KG1kLCAxMjApOworCS8qCisJICogV2hlbiB3ZSBlbmFibGUgdGhlIHBhbmVsLCBpdCBzZWVtcyB3ZSBfaGF2ZV8gdG8gc2xlZXAKKwkgKiAxMjAgbXMgYmVmb3JlIHNlbmRpbmcgdGhlIGluaXQgc3RyaW5nLiBXaGVuIGRpc2FibGluZyB0aGUKKwkgKiBwYW5lbCB3ZSdsbCBzbGVlcCBmb3IgdGhlIGR1cmF0aW9uIG9mIDIgZnJhbWVzLCBzbyB0aGF0IHRoZQorCSAqIGNvbnRyb2xsZXIgY2FuIHN0aWxsIHByb3ZpZGUgdGhlIFBDTEssSFMsVlMgc2lnbmFscy4KKwkgKi8KKwlpZiAoIW9uKQorCQlzbGVlcF90aW1lID0gMTIwOworCW1zbGVlcChzbGVlcF90aW1lKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2Rpc3BsYXlfc3RhdGUoc3RydWN0IG1pcGlkX2RldmljZSAqbWQsIGludCBlbmFibGVkKQoreworCWludCBjbWQgPSBlbmFibGVkID8gTUlQSURfQ01EX0RJU1BfT04gOiBNSVBJRF9DTURfRElTUF9PRkY7CisKKwltaXBpZF9jbWQobWQsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgbWlwaWRfc2V0X2JrbGlnaHRfbGV2ZWwoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsIHVuc2lnbmVkIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCA9IHRvX21pcGlkX2RldmljZShwYW5lbCk7CisJc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgKnBkID0gbWQtPnNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGQtPmdldF9ia2xpZ2h0X21heCA9PSBOVUxMIHx8IHBkLT5zZXRfYmtsaWdodF9sZXZlbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAobGV2ZWwgPiBwZC0+Z2V0X2JrbGlnaHRfbWF4KHBkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFtZC0+ZW5hYmxlZCkgeworCQltZC0+c2F2ZWRfYmtsaWdodF9sZXZlbCA9IGxldmVsOworCQlyZXR1cm4gMDsKKwl9CisJcGQtPnNldF9ia2xpZ2h0X2xldmVsKHBkLCBsZXZlbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtaXBpZF9nZXRfYmtsaWdodF9sZXZlbChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCA9IHRvX21pcGlkX2RldmljZShwYW5lbCk7CisJc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgKnBkID0gbWQtPnNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGQtPmdldF9ia2xpZ2h0X2xldmVsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiBwZC0+Z2V0X2JrbGlnaHRfbGV2ZWwocGQpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1pcGlkX2dldF9ia2xpZ2h0X21heChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCA9IHRvX21pcGlkX2RldmljZShwYW5lbCk7CisJc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgKnBkID0gbWQtPnNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGQtPmdldF9ia2xpZ2h0X21heCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwZC0+Z2V0X2JrbGlnaHRfbWF4KHBkKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlwaWRfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIE9NQVBGQl9DQVBTX1NFVF9CQUNLTElHSFQ7Cit9CisKK3N0YXRpYyB1MTYgcmVhZF9maXJzdF9waXhlbChzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwl1MTYgcGl4ZWw7CisJdTggcmVkLCBncmVlbiwgYmx1ZTsKKworCW11dGV4X2xvY2soJm1kLT5tdXRleCk7CisJbWlwaWRfcmVhZChtZCwgTUlQSURfQ01EX1JFQURfUkVELCAmcmVkLCAxKTsKKwltaXBpZF9yZWFkKG1kLCBNSVBJRF9DTURfUkVBRF9HUkVFTiwgJmdyZWVuLCAxKTsKKwltaXBpZF9yZWFkKG1kLCBNSVBJRF9DTURfUkVBRF9CTFVFLCAmYmx1ZSwgMSk7CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCisJc3dpdGNoIChtZC0+cGFuZWwuZGF0YV9saW5lcykgeworCWNhc2UgMTY6CisJCXBpeGVsID0gKChyZWQgPj4gMSkgPDwgMTEpIHwgKGdyZWVuIDw8IDUpIHwgKGJsdWUgPj4gMSk7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCS8qIDI0IGJpdCAtPiAxNiBiaXQgKi8KKwkJcGl4ZWwgPSAoKHJlZCA+PiAzKSA8PCAxMSkgfCAoKGdyZWVuID4+IDIpIDw8IDUpIHwKKwkJCShibHVlID4+IDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaXhlbCA9IDA7CisJCUJVRygpOworCX0KKworCXJldHVybiBwaXhlbDsKK30KKworc3RhdGljIGludCBtaXBpZF9ydW5fdGVzdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwgaW50IHRlc3RfbnVtKQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kID0gdG9fbWlwaWRfZGV2aWNlKHBhbmVsKTsKKwlzdGF0aWMgY29uc3QgdTE2IHRlc3RfdmFsdWVzWzRdID0geworCQkweDAwMDAsIDB4ZmZmZiwgMHhhYWFhLCAweDU1NTUsCisJfTsKKwlpbnQgaTsKKworCWlmICh0ZXN0X251bSAhPSBNSVBJRF9URVNUX1JHQl9MSU5FUykKKwkJcmV0dXJuIE1JUElEX1RFU1RfSU5WQUxJRDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlc3RfdmFsdWVzKTsgaSsrKSB7CisJCWludCBkZWxheTsKKwkJdW5zaWduZWQgbG9uZyB0bW87CisKKwkJb21hcGZiX3dyaXRlX2ZpcnN0X3BpeGVsKG1kLT5mYmRldiwgdGVzdF92YWx1ZXNbaV0pOworCQl0bW8gPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDApOworCQlkZWxheSA9IDI1OworCQl3aGlsZSAoMSkgeworCQkJdTE2IHBpeGVsOworCisJCQltc2xlZXAoZGVsYXkpOworCQkJcGl4ZWwgPSByZWFkX2ZpcnN0X3BpeGVsKG1kKTsKKwkJCWlmIChwaXhlbCA9PSB0ZXN0X3ZhbHVlc1tpXSkKKwkJCQlicmVhazsKKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRtbykpIHsKKwkJCQlkZXZfZXJyKCZtZC0+c3BpLT5kZXYsCisJCQkJCSJNSVBJIExDRCBSR0IgSS9GIHRlc3QgZmFpbGVkOiAiCisJCQkJCSJleHBlY3RpbmcgJTA0eCwgZ290ICUwNHhcbiIsCisJCQkJCXRlc3RfdmFsdWVzW2ldLCBwaXhlbCk7CisJCQkJcmV0dXJuIE1JUElEX1RFU1RfRkFJTEVEOworCQkJfQorCQkJZGVsYXkgPSAxMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsczA0MXkzX2VzZF9yZWNvdmVyKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kKQoreworCWRldl9lcnIoJm1kLT5zcGktPmRldiwgInBlcmZvcm1pbmcgTENEIEVTRCByZWNvdmVyeVxuIik7CisJc2V0X3NsZWVwX21vZGUobWQsIDEpOworCXNldF9zbGVlcF9tb2RlKG1kLCAwKTsKK30KKworc3RhdGljIHZvaWQgbHMwNDF5M19lc2RfY2hlY2tfbW9kZTEoc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJdTggc3RhdGUxLCBzdGF0ZTI7CisKKwltaXBpZF9yZWFkKG1kLCBNSVBJRF9DTURfUkREU0RSLCAmc3RhdGUxLCAxKTsKKwlzZXRfc2xlZXBfbW9kZShtZCwgMCk7CisJbWlwaWRfcmVhZChtZCwgTUlQSURfQ01EX1JERFNEUiwgJnN0YXRlMiwgMSk7CisJZGV2X2RiZygmbWQtPnNwaS0+ZGV2LCAiRVNEIG1vZGUgMSBzdGF0ZTEgJTAyeCBzdGF0ZTIgJTAyeFxuIiwKKwkJc3RhdGUxLCBzdGF0ZTIpOworCS8qIEVhY2ggc2xlZXAgb3V0IGNvbW1hbmQgd2lsbCB0cmlnZ2VyIGEgc2VsZiBkaWFnbm9zdGljIGFuZCBmbGlwCisJKiBCaXQ2IGlmIHRoZSB0ZXN0IHBhc3Nlcy4KKwkqLworCWlmICghKChzdGF0ZTEgXiBzdGF0ZTIpICYgKDEgPDwgNikpKQorCQlsczA0MXkzX2VzZF9yZWNvdmVyKG1kKTsKK30KKworc3RhdGljIHZvaWQgbHMwNDF5M19lc2RfY2hlY2tfbW9kZTIoc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJaW50IGk7CisJdTggcmJ1ZlsyXTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJaW50CWNtZDsKKwkJaW50CXdsZW47CisJCXUxNgl3YnVmWzNdOworCX0gKnJkLCByZF9jdHJsWzddID0geworCQl7IDB4YjAsIDQsIHsgMHgwMTAxLCAweDAxZmUsIH0gfSwKKwkJeyAweGIxLCA0LCB7IDB4MDFkZSwgMHgwMTIxLCB9IH0sCisJCXsgMHhjMiwgNCwgeyAweDAxMDAsIDB4MDEwMCwgfSB9LAorCQl7IDB4YmQsIDIsIHsgMHgwMTAwLCB9IH0sCisJCXsgMHhjMiwgNCwgeyAweDAxZmMsIDB4MDEwMywgfSB9LAorCQl7IDB4YjQsIDAsIH0sCisJCXsgMHgwMCwgMCwgfSwKKwl9OworCisJcmQgPSByZF9jdHJsOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIHJkKyspCisJCW1pcGlkX3dyaXRlKG1kLCByZC0+Y21kLCAodTggKilyZC0+d2J1ZiwgcmQtPndsZW4pOworCisJdWRlbGF5KDEwKTsKKwltaXBpZF9yZWFkKG1kLCByZC0+Y21kLCByYnVmLCAyKTsKKwlyZCsrOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgcmQrKykgeworCQl1ZGVsYXkoMTApOworCQltaXBpZF93cml0ZShtZCwgcmQtPmNtZCwgKHU4ICopcmQtPndidWYsIHJkLT53bGVuKTsKKwl9CisKKwlkZXZfZGJnKCZtZC0+c3BpLT5kZXYsICJFU0QgbW9kZSAyIHN0YXRlICUwMnhcbiIsIHJidWZbMV0pOworCWlmIChyYnVmWzFdID09IDB4MDApCisJCWxzMDQxeTNfZXNkX3JlY292ZXIobWQpOworfQorCitzdGF0aWMgdm9pZCBsczA0MXkzX2VzZF9jaGVjayhzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwlsczA0MXkzX2VzZF9jaGVja19tb2RlMShtZCk7CisJaWYgKG1kLT5yZXZpc2lvbiA+PSAweDg4KQorCQlsczA0MXkzX2VzZF9jaGVja19tb2RlMihtZCk7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlkX2VzZF9zdGFydF9jaGVjayhzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwlpZiAobWQtPmVzZF9jaGVjayAhPSBOVUxMKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsobWQtPmVzZF93cSwgJm1kLT5lc2Rfd29yaywKKwkJCQkgICBNSVBJRF9FU0RfQ0hFQ0tfUEVSSU9EKTsKK30KKworc3RhdGljIHZvaWQgbWlwaWRfZXNkX3N0b3BfY2hlY2soc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJaWYgKG1kLT5lc2RfY2hlY2sgIT0gTlVMTCkKKwkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKG1kLT5lc2Rfd3EsICZtZC0+ZXNkX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBtaXBpZF9lc2Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1pcGlkX2RldmljZSAqbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1pcGlkX2RldmljZSwKKwkJCQkJICAgICAgIGVzZF93b3JrLndvcmspOworCisJbXV0ZXhfbG9jaygmbWQtPm11dGV4KTsKKwltZC0+ZXNkX2NoZWNrKG1kKTsKKwltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisJbWlwaWRfZXNkX3N0YXJ0X2NoZWNrKG1kKTsKK30KKworc3RhdGljIGludCBtaXBpZF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IG1pcGlkX2RldmljZSAqbWQgPSB0b19taXBpZF9kZXZpY2UocGFuZWwpOworCisJbXV0ZXhfbG9jaygmbWQtPm11dGV4KTsKKworCWlmIChtZC0+ZW5hYmxlZCkgeworCQltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlzZXRfc2xlZXBfbW9kZShtZCwgMCk7CisJbWQtPmVuYWJsZWQgPSAxOworCXNlbmRfaW5pdF9zdHJpbmcobWQpOworCXNldF9kaXNwbGF5X3N0YXRlKG1kLCAxKTsKKwltaXBpZF9zZXRfYmtsaWdodF9sZXZlbChwYW5lbCwgbWQtPnNhdmVkX2JrbGlnaHRfbGV2ZWwpOworCW1pcGlkX2VzZF9zdGFydF9jaGVjayhtZCk7CisKKwltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlkX2Rpc2FibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IG1pcGlkX2RldmljZSAqbWQgPSB0b19taXBpZF9kZXZpY2UocGFuZWwpOworCisJLyoKKwkgKiBBIGZpbmFsIEVTRCB3b3JrIG1pZ2h0IGJlIGNhbGxlZCBiZWZvcmUgcmV0dXJuaW5nLAorCSAqIHNvIGRvIHRoaXMgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLgorCSAqLworCW1pcGlkX2VzZF9zdG9wX2NoZWNrKG1kKTsKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCisJaWYgKCFtZC0+ZW5hYmxlZCkgeworCQltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisJbWQtPnNhdmVkX2JrbGlnaHRfbGV2ZWwgPSBtaXBpZF9nZXRfYmtsaWdodF9sZXZlbChwYW5lbCk7CisJbWlwaWRfc2V0X2JrbGlnaHRfbGV2ZWwocGFuZWwsIDApOworCXNldF9kaXNwbGF5X3N0YXRlKG1kLCAwKTsKKwlzZXRfc2xlZXBfbW9kZShtZCwgMSk7CisJbWQtPmVuYWJsZWQgPSAwOworCisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHBhbmVsX2VuYWJsZWQoc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJdTMyIGRpc3Bfc3RhdHVzOworCWludCBlbmFibGVkOworCisJbWlwaWRfcmVhZChtZCwgTUlQSURfQ01EX1JFQURfRElTUF9TVEFUVVMsICh1OCAqKSZkaXNwX3N0YXR1cywgNCk7CisJZGlzcF9zdGF0dXMgPSBfX2JlMzJfdG9fY3B1KGRpc3Bfc3RhdHVzKTsKKwllbmFibGVkID0gKGRpc3Bfc3RhdHVzICYgKDEgPDwgMTcpKSAmJiAoZGlzcF9zdGF0dXMgJiAoMSA8PCAxMCkpOworCWRldl9kYmcoJm1kLT5zcGktPmRldiwKKwkJIkxDRCBwYW5lbCAlc2VuYWJsZWQgYnkgYm9vdGxvYWRlciAoc3RhdHVzIDB4JTA0eClcbiIsCisJCWVuYWJsZWQgPyAiIiA6ICJub3QgIiwgZGlzcF9zdGF0dXMpOworCXJldHVybiBlbmFibGVkOworfQorCitzdGF0aWMgaW50IG1pcGlkX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkgICAgc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kID0gdG9fbWlwaWRfZGV2aWNlKHBhbmVsKTsKKworCW1kLT5mYmRldiA9IGZiZGV2OworCW1kLT5lc2Rfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibWlwaWRfZXNkIik7CisJaWYgKG1kLT5lc2Rfd3EgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZtZC0+c3BpLT5kZXYsICJjYW4ndCBjcmVhdGUgRVNEIHdvcmtxdWV1ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlJTklUX0RFTEFZRURfV09SSygmbWQtPmVzZF93b3JrLCBtaXBpZF9lc2Rfd29yayk7CisJbXV0ZXhfaW5pdCgmbWQtPm11dGV4KTsKKworCW1kLT5lbmFibGVkID0gcGFuZWxfZW5hYmxlZChtZCk7CisKKwlpZiAobWQtPmVuYWJsZWQpCisJCW1pcGlkX2VzZF9zdGFydF9jaGVjayhtZCk7CisJZWxzZQorCQltZC0+c2F2ZWRfYmtsaWdodF9sZXZlbCA9IG1pcGlkX2dldF9ia2xpZ2h0X2xldmVsKHBhbmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtaXBpZF9jbGVhbnVwKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kID0gdG9fbWlwaWRfZGV2aWNlKHBhbmVsKTsKKworCWlmIChtZC0+ZW5hYmxlZCkKKwkJbWlwaWRfZXNkX3N0b3BfY2hlY2sobWQpOworCWRlc3Ryb3lfd29ya3F1ZXVlKG1kLT5lc2Rfd3EpOworfQorCitzdGF0aWMgc3RydWN0IGxjZF9wYW5lbCBtaXBpZF9wYW5lbCA9IHsKKwkuY29uZmlnCQk9IE9NQVBfTENEQ19QQU5FTF9URlQsCisKKwkuYnBwCQk9IDE2LAorCS54X3JlcwkJPSA4MDAsCisJLnlfcmVzCQk9IDQ4MCwKKwkucGl4ZWxfY2xvY2sJPSAyMTk0MCwKKwkuaHN3CQk9IDUwLAorCS5oZnAJCT0gMjAsCisJLmhicAkJPSAxNSwKKwkudnN3CQk9IDIsCisJLnZmcAkJPSAxLAorCS52YnAJCT0gMywKKworCS5pbml0CQkJPSBtaXBpZF9pbml0LAorCS5jbGVhbnVwCQk9IG1pcGlkX2NsZWFudXAsCisJLmVuYWJsZQkJCT0gbWlwaWRfZW5hYmxlLAorCS5kaXNhYmxlCQk9IG1pcGlkX2Rpc2FibGUsCisJLmdldF9jYXBzCQk9IG1pcGlkX2dldF9jYXBzLAorCS5zZXRfYmtsaWdodF9sZXZlbAk9IG1pcGlkX3NldF9ia2xpZ2h0X2xldmVsLAorCS5nZXRfYmtsaWdodF9sZXZlbAk9IG1pcGlkX2dldF9ia2xpZ2h0X2xldmVsLAorCS5nZXRfYmtsaWdodF9tYXgJPSBtaXBpZF9nZXRfYmtsaWdodF9tYXgsCisJLnJ1bl90ZXN0CQk9IG1pcGlkX3J1bl90ZXN0LAorfTsKKworc3RhdGljIGludCBtaXBpZF9kZXRlY3Qoc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXU4IGRpc3BsYXlfaWRbM107CisKKwlwZGF0YSA9IG1kLT5zcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm1kLT5zcGktPmRldiwgIm1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCW1pcGlkX3JlYWQobWQsIE1JUElEX0NNRF9SRUFEX0RJU1BfSUQsIGRpc3BsYXlfaWQsIDMpOworCWRldl9kYmcoJm1kLT5zcGktPmRldiwgIk1JUEkgZGlzcGxheSBJRDogJTAyeCUwMnglMDJ4XG4iLAorCQlkaXNwbGF5X2lkWzBdLCBkaXNwbGF5X2lkWzFdLCBkaXNwbGF5X2lkWzJdKTsKKworCXN3aXRjaCAoZGlzcGxheV9pZFswXSkgeworCWNhc2UgMHg0NToKKwkJbWQtPnBhbmVsLm5hbWUgPSAibHBoODkyMyI7CisJCWJyZWFrOworCWNhc2UgMHg4MzoKKwkJbWQtPnBhbmVsLm5hbWUgPSAibHMwNDF5MyI7CisJCW1kLT5lc2RfY2hlY2sgPSBsczA0MXkzX2VzZF9jaGVjazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWQtPnBhbmVsLm5hbWUgPSAidW5rbm93biI7CisJCWRldl9lcnIoJm1kLT5zcGktPmRldiwgImludmFsaWQgZGlzcGxheSBJRFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1kLT5yZXZpc2lvbiA9IGRpc3BsYXlfaWRbMV07CisJbWQtPnBhbmVsLmRhdGFfbGluZXMgPSBwZGF0YS0+ZGF0YV9saW5lczsKKwlwcl9pbmZvKCJvbWFwZmI6ICVzIHJldiAlMDJ4IExDRCBkZXRlY3RlZCwgJWQgZGF0YSBsaW5lc1xuIiwKKwkJCW1kLT5wYW5lbC5uYW1lLCBtZC0+cmV2aXNpb24sIG1kLT5wYW5lbC5kYXRhX2xpbmVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pcGlkX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kOworCWludCByOworCisJbWQgPSBremFsbG9jKHNpemVvZigqbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAobWQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGktPm1vZGUgPSBTUElfTU9ERV8wOworCW1kLT5zcGkgPSBzcGk7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgbWQpOworCW1kLT5wYW5lbCA9IG1pcGlkX3BhbmVsOworCisJciA9IG1pcGlkX2RldGVjdChtZCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmbWQtPnBhbmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pcGlkX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJbWlwaWRfZGlzYWJsZSgmbWQtPnBhbmVsKTsKKwlrZnJlZShtZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG1pcGlkX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBNSVBJRF9NT0RVTEVfTkFNRSwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gbWlwaWRfc3BpX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChtaXBpZF9zcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgbWlwaWRfZHJ2X2luaXQodm9pZCkKK3sKKwlzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtaXBpZF9zcGlfZHJpdmVyKTsKKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQobWlwaWRfZHJ2X2luaXQpOworCitzdGF0aWMgdm9pZCBtaXBpZF9kcnZfY2xlYW51cCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbWlwaWRfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtaXBpZF9kcnZfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTUlQSSBkaXNwbGF5IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwMmV2bS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwMmV2bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMmJiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAyZXZtLmMKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBMQ0QgcGFuZWwgc3VwcG9ydCBmb3IgdGhlIE1JU1RSQUwgT01BUDJFVk0gYm9hcmQKKyAqCisgKiBBdXRob3I6IEFydW4gQyA8YXJ1bmVkYXJhdGhAbWlzdHJhbHNvbHV0aW9ucy5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNldm0uYworICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC9sY2QtYXBvbGxvbi5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNkZWZpbmUgTENEX1BBTkVMX0VOQUJMRV9HUElPCTE1NAorI2RlZmluZSBMQ0RfUEFORUxfTFIJCTEyOAorI2RlZmluZSBMQ0RfUEFORUxfVUQJCTEyOQorI2RlZmluZSBMQ0RfUEFORUxfSU5JCQkxNTIKKyNkZWZpbmUgTENEX1BBTkVMX1FWR0EJCTE0OAorI2RlZmluZSBMQ0RfUEFORUxfUkVTQgkJMTUzCisKKyNkZWZpbmUgVFdMX0xFRF9MRURFTgkJMHgwMAorI2RlZmluZSBUV0xfUFdNQV9QV01BT04JCTB4MDAKKyNkZWZpbmUgVFdMX1BXTUFfUFdNQU9GRgkweDAxCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmtsaWdodF9sZXZlbDsKKworc3RhdGljIGludCBvbWFwMmV2bV9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKK3sKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAiTENEIGVuYWJsZSIpOworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfTFIsICJMQ0QgbHIiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1VELCAiTENEIHVkIik7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9JTkksICJMQ0QgaW5pIik7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9RVkdBLCAiTENEIHF2Z2EiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1JFU0IsICJMQ0QgcmVzYiIpOworCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9FTkFCTEVfR1BJTywgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9SRVNCLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0lOSSwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9RVkdBLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0xSLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1VELCAxKTsKKworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0xFRCwgMHgxMSwgVFdMX0xFRF9MRURFTik7CisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgMHgwMSwgVFdMX1BXTUFfUFdNQU9OKTsKKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAyLCBUV0xfUFdNQV9QV01BT0ZGKTsKKwlia2xpZ2h0X2xldmVsID0gMTAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyZXZtX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9SRVNCKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1FWR0EpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfSU5JKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1VEKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX0xSKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX0VOQUJMRV9HUElPKTsKK30KKworc3RhdGljIGludCBvbWFwMmV2bV9wYW5lbF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19zZXRfdmFsdWUoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDJldm1fcGFuZWxfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMmV2bV9wYW5lbF9nZXRfY2FwcyhzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMmV2bV9ia2xpZ2h0X3NldGxldmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCQkJdW5zaWduZWQgaW50IGxldmVsKQoreworCXU4IGM7CisJaWYgKChsZXZlbCA+PSAwKSAmJiAobGV2ZWwgPD0gMTAwKSkgeworCQljID0gKDEyNSAqICgxMDAgLSBsZXZlbCkpIC8gMTAwICsgMjsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgYywgVFdMX1BXTUFfUFdNQU9GRik7CisJCWJrbGlnaHRfbGV2ZWwgPSBsZXZlbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb21hcDJldm1fYmtsaWdodF9nZXRsZXZlbChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gYmtsaWdodF9sZXZlbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvbWFwMmV2bV9ia2xpZ2h0X2dldG1heGxldmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAxMDA7Cit9CisKK3N0cnVjdCBsY2RfcGFuZWwgb21hcDJldm1fcGFuZWwgPSB7CisJLm5hbWUJCT0gIm9tYXAyZXZtIiwKKwkuY29uZmlnCQk9IE9NQVBfTENEQ19QQU5FTF9URlQgfCBPTUFQX0xDRENfSU5WX1ZTWU5DIHwKKwkJCSAgT01BUF9MQ0RDX0lOVl9IU1lOQywKKworCS5icHAJCT0gMTYsCisJLmRhdGFfbGluZXMJPSAxOCwKKwkueF9yZXMJCT0gNDgwLAorCS55X3JlcwkJPSA2NDAsCisJLmhzdwkJPSAzLAorCS5oZnAJCT0gMCwKKwkuaGJwCQk9IDI4LAorCS52c3cJCT0gMiwKKwkudmZwCQk9IDEsCisJLnZicAkJPSAwLAorCisJLnBpeGVsX2Nsb2NrCT0gMjAwMDAsCisKKwkuaW5pdAkJPSBvbWFwMmV2bV9wYW5lbF9pbml0LAorCS5jbGVhbnVwCT0gb21hcDJldm1fcGFuZWxfY2xlYW51cCwKKwkuZW5hYmxlCQk9IG9tYXAyZXZtX3BhbmVsX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyZXZtX3BhbmVsX2Rpc2FibGUsCisJLmdldF9jYXBzCT0gb21hcDJldm1fcGFuZWxfZ2V0X2NhcHMsCisJLnNldF9ia2xpZ2h0X2xldmVsICAgICAgPSBvbWFwMmV2bV9ia2xpZ2h0X3NldGxldmVsLAorCS5nZXRfYmtsaWdodF9sZXZlbCAgICAgID0gb21hcDJldm1fYmtsaWdodF9nZXRsZXZlbCwKKwkuZ2V0X2JrbGlnaHRfbWF4ICAgICAgICA9IG9tYXAyZXZtX2JrbGlnaHRfZ2V0bWF4bGV2ZWwsCit9OworCitzdGF0aWMgaW50IG9tYXAyZXZtX3BhbmVsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb21hcGZiX3JlZ2lzdGVyX3BhbmVsKCZvbWFwMmV2bV9wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJldm1fcGFuZWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJldm1fcGFuZWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyZXZtX3BhbmVsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAyZXZtX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb21hcDJldm1fcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwMmV2bV9wYW5lbF9yZW1vdmUsCisJLnN1c3BlbmQJPSBvbWFwMmV2bV9wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb21hcDJldm1fcGFuZWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJvbWFwMmV2bV9sY2QiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDJldm1fcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwMmV2bV9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDJldm1fcGFuZWxfZHJ2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcDJldm1fcGFuZWxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob21hcDJldm1fcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQob21hcDJldm1fcGFuZWxfZHJ2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2JlYWdsZS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2JlYWdsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMTE5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzYmVhZ2xlLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBMQ0QgcGFuZWwgc3VwcG9ydCBmb3IgdGhlIFRJIE9NQVAzIEJlYWdsZSBib2FyZAorICoKKyAqIEF1dGhvcjogS29lbiBLb29pIDxrb2VuQG9wZW5lbWJlZGRlZC5vcmc+CisgKgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC9sY2Qtb21hcDNldm0uYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwZmIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjZGVmaW5lIExDRF9QQU5FTF9FTkFCTEVfR1BJTyAgICAgICAxNzAKKworc3RhdGljIGludCBvbWFwM2JlYWdsZV9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKK3sKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAiTENEIGVuYWJsZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwM2JlYWdsZV9wYW5lbF9jbGVhbnVwKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fZnJlZShMQ0RfUEFORUxfRU5BQkxFX0dQSU8pOworfQorCitzdGF0aWMgaW50IG9tYXAzYmVhZ2xlX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwM2JlYWdsZV9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fc2V0X3ZhbHVlKExDRF9QQU5FTF9FTkFCTEVfR1BJTywgMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAzYmVhZ2xlX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbGNkX3BhbmVsIG9tYXAzYmVhZ2xlX3BhbmVsID0geworCS5uYW1lCQk9ICJvbWFwM2JlYWdsZSIsCisJLmNvbmZpZwkJPSBPTUFQX0xDRENfUEFORUxfVEZULAorCisJLmJwcAkJPSAxNiwKKwkuZGF0YV9saW5lcwk9IDI0LAorCS54X3JlcwkJPSAxMDI0LAorCS55X3JlcwkJPSA3NjgsCisJLmhzdwkJPSAzLAkJLyogaHN5bmNfbGVuICg0KSAtIDEgKi8KKwkuaGZwCQk9IDMsCQkvKiByaWdodF9tYXJnaW4gKDQpIC0gMSAqLworCS5oYnAJCT0gMzksCQkvKiBsZWZ0X21hcmdpbiAoNDApIC0gMSAqLworCS52c3cJCT0gMSwJCS8qIHZzeW5jX2xlbiAoMikgLSAxICovCisJLnZmcAkJPSAyLAkJLyogbG93ZXJfbWFyZ2luICovCisJLnZicAkJPSA3LAkJLyogdXBwZXJfbWFyZ2luICg4KSAtIDEgKi8KKworCS5waXhlbF9jbG9jawk9IDY0MDAwLAorCisJLmluaXQJCT0gb21hcDNiZWFnbGVfcGFuZWxfaW5pdCwKKwkuY2xlYW51cAk9IG9tYXAzYmVhZ2xlX3BhbmVsX2NsZWFudXAsCisJLmVuYWJsZQkJPSBvbWFwM2JlYWdsZV9wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwM2JlYWdsZV9wYW5lbF9kaXNhYmxlLAorCS5nZXRfY2Fwcwk9IG9tYXAzYmVhZ2xlX3BhbmVsX2dldF9jYXBzLAorfTsKKworc3RhdGljIGludCBvbWFwM2JlYWdsZV9wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmb21hcDNiZWFnbGVfcGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzYmVhZ2xlX3BhbmVsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzYmVhZ2xlX3BhbmVsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgICBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM2JlYWdsZV9wYW5lbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwM2JlYWdsZV9wYW5lbF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9tYXAzYmVhZ2xlX3BhbmVsX3Byb2JlLAorCS5yZW1vdmUJCT0gb21hcDNiZWFnbGVfcGFuZWxfcmVtb3ZlLAorCS5zdXNwZW5kCT0gb21hcDNiZWFnbGVfcGFuZWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9tYXAzYmVhZ2xlX3BhbmVsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAib21hcDNiZWFnbGVfbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAzYmVhZ2xlX3BhbmVsX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcDNiZWFnbGVfcGFuZWxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAzYmVhZ2xlX3BhbmVsX2Rydl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXAzYmVhZ2xlX3BhbmVsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9tYXAzYmVhZ2xlX3BhbmVsX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KG9tYXAzYmVhZ2xlX3BhbmVsX2Rydl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNldm0uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNldm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE0YzJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2V2bS5jCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogTENEIHBhbmVsIHN1cHBvcnQgZm9yIHRoZSBUSSBPTUFQMyBFVk0gYm9hcmQKKyAqCisgKiBBdXRob3I6IFN0ZXZlIFNha29tYW4gPHN0ZXZlQHNha29tYW4uY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL3ZpZGVvL29tYXAvbGNkLWFwb2xsb24uYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwZmIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjZGVmaW5lIExDRF9QQU5FTF9FTkFCTEVfR1BJTyAgICAgICAxNTMKKyNkZWZpbmUgTENEX1BBTkVMX0xSICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTENEX1BBTkVMX1VEICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTENEX1BBTkVMX0lOSSAgICAgICAgICAgICAgIDE1MgorI2RlZmluZSBMQ0RfUEFORUxfUVZHQSAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIExDRF9QQU5FTF9SRVNCICAgICAgICAgICAgICAxNTUKKworI2RlZmluZSBFTkFCTEVfVkRBQ19ERURJQ0FURUQJMHgwMworI2RlZmluZSBFTkFCTEVfVkRBQ19ERVZfR1JQCTB4MjAKKyNkZWZpbmUgRU5BQkxFX1ZQTEwyX0RFRElDQVRFRAkweDA1CisjZGVmaW5lIEVOQUJMRV9WUExMMl9ERVZfR1JQCTB4RTAKKworI2RlZmluZSBUV0xfTEVEX0xFREVOCQkweDAwCisjZGVmaW5lIFRXTF9QV01BX1BXTUFPTgkJMHgwMAorI2RlZmluZSBUV0xfUFdNQV9QV01BT0ZGCTB4MDEKKworc3RhdGljIHVuc2lnbmVkIGludCBia2xpZ2h0X2xldmVsOworCitzdGF0aWMgaW50IG9tYXAzZXZtX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfTFIsICJMQ0QgbHIiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1VELCAiTENEIHVkIik7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9JTkksICJMQ0QgaW5pIik7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9SRVNCLCAiTENEIHJlc2IiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1FWR0EsICJMQ0QgcXZnYSIpOworCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9SRVNCLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0lOSSwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9RVkdBLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0xSLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1VELCAxKTsKKworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0xFRCwgMHgxMSwgVFdMX0xFRF9MRURFTik7CisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgMHgwMSwgVFdMX1BXTUFfUFdNQU9OKTsKKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAyLCBUV0xfUFdNQV9QV01BT0ZGKTsKKwlia2xpZ2h0X2xldmVsID0gMTAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAzZXZtX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9RVkdBKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1JFU0IpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfSU5JKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1VEKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX0xSKTsKK30KKworc3RhdGljIGludCBvbWFwM2V2bV9wYW5lbF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19zZXRfdmFsdWUoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDNldm1fcGFuZWxfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwM2V2bV9wYW5lbF9nZXRfY2FwcyhzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM2V2bV9ia2xpZ2h0X3NldGxldmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCQkJdW5zaWduZWQgaW50IGxldmVsKQoreworCXU4IGM7CisJaWYgKChsZXZlbCA+PSAwKSAmJiAobGV2ZWwgPD0gMTAwKSkgeworCQljID0gKDEyNSAqICgxMDAgLSBsZXZlbCkpIC8gMTAwICsgMjsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgYywgVFdMX1BXTUFfUFdNQU9GRik7CisJCWJrbGlnaHRfbGV2ZWwgPSBsZXZlbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb21hcDNldm1fYmtsaWdodF9nZXRsZXZlbChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gYmtsaWdodF9sZXZlbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvbWFwM2V2bV9ia2xpZ2h0X2dldG1heGxldmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAxMDA7Cit9CisKK3N0cnVjdCBsY2RfcGFuZWwgb21hcDNldm1fcGFuZWwgPSB7CisJLm5hbWUJCT0gIm9tYXAzZXZtIiwKKwkuY29uZmlnCQk9IE9NQVBfTENEQ19QQU5FTF9URlQgfCBPTUFQX0xDRENfSU5WX1ZTWU5DIHwKKwkJCSAgT01BUF9MQ0RDX0lOVl9IU1lOQywKKworCS5icHAJCT0gMTYsCisJLmRhdGFfbGluZXMJPSAxOCwKKwkueF9yZXMJCT0gNDgwLAorCS55X3JlcwkJPSA2NDAsCisJLmhzdwkJPSAzLAkJLyogaHN5bmNfbGVuICg0KSAtIDEgKi8KKwkuaGZwCQk9IDMsCQkvKiByaWdodF9tYXJnaW4gKDQpIC0gMSAqLworCS5oYnAJCT0gMzksCQkvKiBsZWZ0X21hcmdpbiAoNDApIC0gMSAqLworCS52c3cJCT0gMSwJCS8qIHZzeW5jX2xlbiAoMikgLSAxICovCisJLnZmcAkJPSAyLAkJLyogbG93ZXJfbWFyZ2luICovCisJLnZicAkJPSA3LAkJLyogdXBwZXJfbWFyZ2luICg4KSAtIDEgKi8KKworCS5waXhlbF9jbG9jawk9IDI2MDAwLAorCisJLmluaXQJCT0gb21hcDNldm1fcGFuZWxfaW5pdCwKKwkuY2xlYW51cAk9IG9tYXAzZXZtX3BhbmVsX2NsZWFudXAsCisJLmVuYWJsZQkJPSBvbWFwM2V2bV9wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwM2V2bV9wYW5lbF9kaXNhYmxlLAorCS5nZXRfY2Fwcwk9IG9tYXAzZXZtX3BhbmVsX2dldF9jYXBzLAorCS5zZXRfYmtsaWdodF9sZXZlbCAgICAgID0gb21hcDNldm1fYmtsaWdodF9zZXRsZXZlbCwKKwkuZ2V0X2JrbGlnaHRfbGV2ZWwgICAgICA9IG9tYXAzZXZtX2JrbGlnaHRfZ2V0bGV2ZWwsCisJLmdldF9ia2xpZ2h0X21heCAgICAgICAgPSBvbWFwM2V2bV9ia2xpZ2h0X2dldG1heGxldmVsLAorfTsKKworc3RhdGljIGludCBvbWFwM2V2bV9wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmb21hcDNldm1fcGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzZXZtX3BhbmVsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzZXZtX3BhbmVsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgICBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM2V2bV9wYW5lbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwM2V2bV9wYW5lbF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9tYXAzZXZtX3BhbmVsX3Byb2JlLAorCS5yZW1vdmUJCT0gb21hcDNldm1fcGFuZWxfcmVtb3ZlLAorCS5zdXNwZW5kCT0gb21hcDNldm1fcGFuZWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9tYXAzZXZtX3BhbmVsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAib21hcDNldm1fbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAzZXZtX3BhbmVsX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcDNldm1fcGFuZWxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAzZXZtX3BhbmVsX2Rydl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXAzZXZtX3BhbmVsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9tYXAzZXZtX3BhbmVsX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KG9tYXAzZXZtX3BhbmVsX2Rydl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3NrLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29zay5jCmluZGV4IDM3OWM5NmQuLmIzZmE4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3NrLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYwpAQCAtMTI3LDEyICsxMjcsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBvc2tfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG9za19wYW5lbF9kcnZfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9za19wYW5lbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBvc2tfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBvc2tfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb3NrX3BhbmVsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX292ZXJvLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX292ZXJvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjNWM5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3Zlcm8uYwpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIExDRCBwYW5lbCBzdXBwb3J0IGZvciB0aGUgR3Vtc3RpeCBPdmVybworICoKKyAqIEF1dGhvcjogU3RldmUgU2Frb21hbiA8c3RldmVAc2Frb21hbi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNkZWZpbmUgTENEX0VOQUJMRSAgICAgICAxNDQKKworc3RhdGljIGludCBvdmVyb19wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKK3sKKwlpZiAoKGdwaW9fcmVxdWVzdChMQ0RfRU5BQkxFLCAiTENEX0VOQUJMRSIpID09IDApICYmCisJICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX0VOQUJMRSwgMSkgPT0gMCkpCisJCWdwaW9fZXhwb3J0KExDRF9FTkFCTEUsIDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIExDRF9FTkFCTEVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG92ZXJvX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19mcmVlKExDRF9FTkFCTEUpOworfQorCitzdGF0aWMgaW50IG92ZXJvX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShMQ0RfRU5BQkxFLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3Zlcm9fcGFuZWxfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShMQ0RfRU5BQkxFLCAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb3Zlcm9fcGFuZWxfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsY2RfcGFuZWwgb3Zlcm9fcGFuZWwgPSB7CisJLm5hbWUJCT0gIm92ZXJvIiwKKwkuY29uZmlnCQk9IE9NQVBfTENEQ19QQU5FTF9URlQsCisJLmJwcAkJPSAxNiwKKwkuZGF0YV9saW5lcwk9IDI0LAorCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfT01BUF8wMzFNM1IKKworCS8qIDY0MCB4IDQ4MCBAIDYwIEh6ICBSZWR1Y2VkIGJsYW5raW5nIFZFU0EgQ1ZUIDAuMzFNMy1SICovCisJLnhfcmVzCQk9IDY0MCwKKwkueV9yZXMJCT0gNDgwLAorCS5oZnAJCT0gNDgsCisJLmhzdwkJPSAzMiwKKwkuaGJwCQk9IDgwLAorCS52ZnAJCT0gMywKKwkudnN3CQk9IDQsCisJLnZicAkJPSA3LAorCS5waXhlbF9jbG9jawk9IDIzNTAwLAorCisjZWxpZiBkZWZpbmVkIENPTkZJR19GQl9PTUFQXzA0OE0zUgorCisJLyogODAwIHggNjAwIEAgNjAgSHogIFJlZHVjZWQgYmxhbmtpbmcgVkVTQSBDVlQgMC40OE0zLVIgKi8KKwkueF9yZXMJCT0gODAwLAorCS55X3JlcwkJPSA2MDAsCisJLmhmcAkJPSA0OCwKKwkuaHN3CQk9IDMyLAorCS5oYnAJCT0gODAsCisJLnZmcAkJPSAzLAorCS52c3cJCT0gNCwKKwkudmJwCQk9IDExLAorCS5waXhlbF9jbG9jawk9IDM1NTAwLAorCisjZWxpZiBkZWZpbmVkIENPTkZJR19GQl9PTUFQXzA3OU0zUgorCisJLyogMTAyNCB4IDc2OCBAIDYwIEh6ICBSZWR1Y2VkIGJsYW5raW5nIFZFU0EgQ1ZUIDAuNzlNMy1SICovCisJLnhfcmVzCQk9IDEwMjQsCisJLnlfcmVzCQk9IDc2OCwKKwkuaGZwCQk9IDQ4LAorCS5oc3cJCT0gMzIsCisJLmhicAkJPSA4MCwKKwkudmZwCQk9IDMsCisJLnZzdwkJPSA0LAorCS52YnAJCT0gMTUsCisJLnBpeGVsX2Nsb2NrCT0gNTYwMDAsCisKKyNlbGlmIGRlZmluZWQgQ09ORklHX0ZCX09NQVBfMDkyTTlSCisKKwkvKiAxMjgwIHggNzIwIEAgNjAgSHogIFJlZHVjZWQgYmxhbmtpbmcgVkVTQSBDVlQgMC45Mk05LVIgKi8KKwkueF9yZXMJCT0gMTI4MCwKKwkueV9yZXMJCT0gNzIwLAorCS5oZnAJCT0gNDgsCisJLmhzdwkJPSAzMiwKKwkuaGJwCQk9IDgwLAorCS52ZnAJCT0gMywKKwkudnN3CQk9IDUsCisJLnZicAkJPSAxMywKKwkucGl4ZWxfY2xvY2sJPSA2NDAwMCwKKworI2Vsc2UKKworCS8qIHVzZSA2NDAgeCA0ODAgaWYgbm8gY29uZmlnIG9wdGlvbiAqLworCS8qIDY0MCB4IDQ4MCBAIDYwIEh6ICBSZWR1Y2VkIGJsYW5raW5nIFZFU0EgQ1ZUIDAuMzFNMy1SICovCisJLnhfcmVzCQk9IDY0MCwKKwkueV9yZXMJCT0gNDgwLAorCS5oZnAJCT0gNDgsCisJLmhzdwkJPSAzMiwKKwkuaGJwCQk9IDgwLAorCS52ZnAJCT0gMywKKwkudnN3CQk9IDQsCisJLnZicAkJPSA3LAorCS5waXhlbF9jbG9jawk9IDIzNTAwLAorCisjZW5kaWYKKworCS5pbml0CQk9IG92ZXJvX3BhbmVsX2luaXQsCisJLmNsZWFudXAJPSBvdmVyb19wYW5lbF9jbGVhbnVwLAorCS5lbmFibGUJCT0gb3Zlcm9fcGFuZWxfZW5hYmxlLAorCS5kaXNhYmxlCT0gb3Zlcm9fcGFuZWxfZGlzYWJsZSwKKwkuZ2V0X2NhcHMJPSBvdmVyb19wYW5lbF9nZXRfY2FwcywKK307CisKK3N0YXRpYyBpbnQgb3Zlcm9fcGFuZWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlvbWFwZmJfcmVnaXN0ZXJfcGFuZWwoJm92ZXJvX3BhbmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdmVyb19wYW5lbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwkvKiBvbWFwZmIgZG9lcyBub3QgaGF2ZSB1bnJlZ2lzdGVyX3BhbmVsICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG92ZXJvX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb3Zlcm9fcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSBvdmVyb19wYW5lbF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm92ZXJvX2xjZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvdmVyb19wYW5lbF9kcnZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm92ZXJvX3BhbmVsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvdmVyb19wYW5lbF9kcnZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvdmVyb19wYW5lbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvdmVyb19wYW5lbF9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdChvdmVyb19wYW5lbF9kcnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG10ZS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtdGUuYwppbmRleCAyMTgzMTczLi40YmYzYzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG10ZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfcGFsbXRlLmMKQEAgLTEwOCwxMiArMTA4LDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgcGFsbXRlX3BhbmVsX2Rydl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwYWxtdGVfcGFuZWxfZHJ2X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwYWxtdGVfcGFuZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgcGFsbXRlX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFsbXRlX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBhbG10ZV9wYW5lbF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtdHQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfcGFsbXR0LmMKaW5kZXggNTdiMGY2Yy4uNDhlYTFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtdHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG10dC5jCkBAIC0xMTMsMTIgKzExMywxMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IHBhbG10dF9wYW5lbF9kcnZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcGFsbXR0X3BhbmVsX2Rydl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGFsbXR0X3BhbmVsX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHBhbG10dF9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBhbG10dF9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwYWxtdHRfcGFuZWxfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfcGFsbXo3MS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtejcxLmMKaW5kZXggZDMzZDc4Yi4uMDY5N2QyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtejcxLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtejcxLmMKQEAgLTEwOSwxMiArMTA5LDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgcGFsbXo3MV9wYW5lbF9kcnZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcGFsbXo3MV9wYW5lbF9kcnZfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBhbG16NzFfcGFuZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgcGFsbXo3MV9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBhbG16NzFfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGFsbXo3MV9wYW5lbF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwppbmRleCA4ODYyMjMzLi4xMjVlNjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwpAQCAtNjcsNiArNjcsNyBAQAogCXsgT01BUEZCX0NBUFNfV0lORE9XX1BJWEVMX0RPVUJMRSwgInBpeGVsIGRvdWJsZSB3aW5kb3ciIH0sCiAJeyBPTUFQRkJfQ0FQU19XSU5ET1dfU0NBTEUsICAgInNjYWxlIHdpbmRvdyIgfSwKIAl7IE9NQVBGQl9DQVBTX1dJTkRPV19PVkVSTEFZLCAib3ZlcmxheSB3aW5kb3ciIH0sCisJeyBPTUFQRkJfQ0FQU19XSU5ET1dfUk9UQVRFLCAgInJvdGF0ZSB3aW5kb3ciIH0sCiAJeyBPTUFQRkJfQ0FQU19TRVRfQkFDS0xJR0hULCAgImJhY2tsaWdodCBzZXR0aW5nIiB9LAogfTsKIApAQCAtMjE1LDYgKzIxNiwxNSBAQAogCQkJCSBvZmZzZXQsIHZhci0+eHJlc192aXJ0dWFsLAogCQkJCSBwbGFuZS0+aW5mby5wb3NfeCwgcGxhbmUtPmluZm8ucG9zX3ksCiAJCQkJIHZhci0+eHJlcywgdmFyLT55cmVzLCBwbGFuZS0+Y29sb3JfbW9kZSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWlmIChmYmRldi0+Y3RybC0+c2V0X3JvdGF0ZSAhPSBOVUxMKSB7CisJCXIgPSBmYmRldi0+Y3RybC0+c2V0X3JvdGF0ZSh2YXItPnJvdGF0ZSk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCX0KKwogCWlmIChmYmRldi0+Y3RybC0+c2V0X3NjYWxlICE9IE5VTEwpCiAJCXIgPSBmYmRldi0+Y3RybC0+c2V0X3NjYWxlKHBsYW5lLT5pZHgsCiAJCQkJICAgdmFyLT54cmVzLCB2YXItPnlyZXMsCkBAIC01NTQsNyArNTY0LDYgQEAKIAkJdmFyLT54b2Zmc2V0ID0gdmFyLT54cmVzX3ZpcnR1YWwgLSB2YXItPnhyZXM7CiAJaWYgKHZhci0+eXJlcyArIHZhci0+eW9mZnNldCA+IHZhci0+eXJlc192aXJ0dWFsKQogCQl2YXItPnlvZmZzZXQgPSB2YXItPnlyZXNfdmlydHVhbCAtIHZhci0+eXJlczsKLQlsaW5lX3NpemUgPSB2YXItPnhyZXMgKiBicHAgLyA4OwogCiAJaWYgKHBsYW5lLT5jb2xvcl9tb2RlID09IE9NQVBGQl9DT0xPUl9SR0I0NDQpIHsKIAkJdmFyLT5yZWQub2Zmc2V0CSAgPSA4OyB2YXItPnJlZC5sZW5ndGgJID0gNDsKQEAgLTYwMCw3ICs2MDksNyBAQAogCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiA9IHBsYW5lLT5mYmRldjsKIAogCW9tYXBmYl9ycXVldWVfbG9jayhmYmRldik7Ci0JaWYgKGNwdV9pc19vbWFwMTV4eCgpICYmIHJvdGF0ZSAhPSBmYmktPnZhci5yb3RhdGUpIHsKKwlpZiAocm90YXRlICE9IGZiaS0+dmFyLnJvdGF0ZSkgewogCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKm5ld192YXIgPSAmZmJkZXYtPm5ld192YXI7CiAKIAkJbWVtY3B5KG5ld192YXIsICZmYmktPnZhciwgc2l6ZW9mKCpuZXdfdmFyKSk7CkBAIC03MDcsMjggKzcxNiw0MiBAQAogCQkJCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSwKIAkJCQl2b2lkICpjYWxsYmFja19kYXRhKQogeworCWludCB4cmVzLCB5cmVzOwogCXN0cnVjdCBvbWFwZmJfcGxhbmVfc3RydWN0ICpwbGFuZSA9IGZiaS0+cGFyOwogCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiA9IHBsYW5lLT5mYmRldjsKLQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcjsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZmYmktPnZhcjsKIAotCXZhciA9ICZmYmktPnZhcjsKLQlpZiAod2luLT54ID49IHZhci0+eHJlcyB8fCB3aW4tPnkgPj0gdmFyLT55cmVzIHx8Ci0JICAgIHdpbi0+b3V0X3ggPiB2YXItPnhyZXMgfHwgd2luLT5vdXRfeSA+PSB2YXItPnlyZXMpCisJc3dpdGNoICh2YXItPnJvdGF0ZSkgeworCWNhc2UgMDoKKwljYXNlIDE4MDoKKwkJeHJlcyA9IGZiZGV2LT5wYW5lbC0+eF9yZXM7CisJCXlyZXMgPSBmYmRldi0+cGFuZWwtPnlfcmVzOworCQlicmVhazsKKwljYXNlIDkwOgorCWNhc2UgMjcwOgorCQl4cmVzID0gZmJkZXYtPnBhbmVsLT55X3JlczsKKwkJeXJlcyA9IGZiZGV2LT5wYW5lbC0+eF9yZXM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3aW4tPnggPj0geHJlcyB8fCB3aW4tPnkgPj0geXJlcyB8fAorCSAgICB3aW4tPm91dF94ID4geHJlcyB8fCB3aW4tPm91dF95ID4geXJlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWZiZGV2LT5jdHJsLT51cGRhdGVfd2luZG93IHx8CiAJICAgIGZiZGV2LT5jdHJsLT5nZXRfdXBkYXRlX21vZGUoKSAhPSBPTUFQRkJfTUFOVUFMX1VQREFURSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAod2luLT54ICsgd2luLT53aWR0aCA+PSB2YXItPnhyZXMpCi0JCXdpbi0+d2lkdGggPSB2YXItPnhyZXMgLSB3aW4tPng7Ci0JaWYgKHdpbi0+eSArIHdpbi0+aGVpZ2h0ID49IHZhci0+eXJlcykKLQkJd2luLT5oZWlnaHQgPSB2YXItPnlyZXMgLSB3aW4tPnk7Ci0JLyogVGhlIG91dCBzaXplcyBzaG91bGQgYmUgY3JvcHBlZCB0byB0aGUgTENEIHNpemUgKi8KLQlpZiAod2luLT5vdXRfeCArIHdpbi0+b3V0X3dpZHRoID4gZmJkZXYtPnBhbmVsLT54X3JlcykKLQkJd2luLT5vdXRfd2lkdGggPSBmYmRldi0+cGFuZWwtPnhfcmVzIC0gd2luLT5vdXRfeDsKLQlpZiAod2luLT5vdXRfeSArIHdpbi0+b3V0X2hlaWdodCA+IGZiZGV2LT5wYW5lbC0+eV9yZXMpCi0JCXdpbi0+b3V0X2hlaWdodCA9IGZiZGV2LT5wYW5lbC0+eV9yZXMgLSB3aW4tPm91dF95OworCWlmICh3aW4tPnggKyB3aW4tPndpZHRoID4geHJlcykKKwkJd2luLT53aWR0aCA9IHhyZXMgLSB3aW4tPng7CisJaWYgKHdpbi0+eSArIHdpbi0+aGVpZ2h0ID4geXJlcykKKwkJd2luLT5oZWlnaHQgPSB5cmVzIC0gd2luLT55OworCWlmICh3aW4tPm91dF94ICsgd2luLT5vdXRfd2lkdGggPiB4cmVzKQorCQl3aW4tPm91dF93aWR0aCA9IHhyZXMgLSB3aW4tPm91dF94OworCWlmICh3aW4tPm91dF95ICsgd2luLT5vdXRfaGVpZ2h0ID4geXJlcykKKwkJd2luLT5vdXRfaGVpZ2h0ID0geXJlcyAtIHdpbi0+b3V0X3k7CiAJaWYgKCF3aW4tPndpZHRoIHx8ICF3aW4tPmhlaWdodCB8fCAhd2luLT5vdXRfd2lkdGggfHwgIXdpbi0+b3V0X2hlaWdodCkKIAkJcmV0dXJuIDA7CiAKQEAgLTE2OTksOCArMTcyMiw4IEBACiAKIAlwcl9pbmZvKCJvbWFwZmI6IGNvbmZpZ3VyZWQgZm9yIHBhbmVsICVzXG4iLCBmYmRldi0+cGFuZWwtPm5hbWUpOwogCi0JZGVmX3Z4cmVzID0gZGVmX3Z4cmVzID8gOiBmYmRldi0+cGFuZWwtPnhfcmVzOwotCWRlZl92eXJlcyA9IGRlZl92eXJlcyA/IDogZmJkZXYtPnBhbmVsLT55X3JlczsKKwlkZWZfdnhyZXMgPSBkZWZfdnhyZXMgPyBkZWZfdnhyZXMgOiBmYmRldi0+cGFuZWwtPnhfcmVzOworCWRlZl92eXJlcyA9IGRlZl92eXJlcyA/IGRlZl92eXJlcyA6IGZiZGV2LT5wYW5lbC0+eV9yZXM7CiAKIAlpbml0X3N0YXRlKys7CiAKQEAgLTE4MjIsOCArMTg0NSw4IEBACiB7CiAJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlvbWFwZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCBmYmRldi0+ZmJfaW5mb1swXSk7Ci0KKwlpZiAoZmJkZXYgIT0gTlVMTCkKKwkJb21hcGZiX2JsYW5rKEZCX0JMQU5LX1BPV0VSRE9XTiwgZmJkZXYtPmZiX2luZm9bMF0pOwogCXJldHVybiAwOwogfQogCkBAIC0xODMyLDcgKzE4NTUsOCBAQAogewogCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0Jb21hcGZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiZGV2LT5mYl9pbmZvWzBdKTsKKwlpZiAoZmJkZXYgIT0gTlVMTCkKKwkJb21hcGZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiZGV2LT5mYl9pbmZvWzBdKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9yZmJpLmMKaW5kZXggOTMzMmQ2Yy4uZWUwMWU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAKICNkZWZpbmUgRElTUENfQkFTRQkJMHg0ODA1MDQwMAogI2RlZmluZSBESVNQQ19DT05UUk9MCQkweDAwNDAKKyNkZWZpbmUgRElTUENfSVJRX0ZSQU1FTUFTSyAgICAgMHgwMDAxCiAKIHN0YXRpYyBzdHJ1Y3QgewogCXZvaWQgX19pb21lbQkqYmFzZTsKQEAgLTU1Myw3ICs1NTQsOSBAQAogCWwgPSAoMHgwMSA8PCAyKTsKIAlyZmJpX3dyaXRlX3JlZyhSRkJJX0NPTlRST0wsIGwpOwogCi0JaWYgKChyID0gb21hcF9kaXNwY19yZXF1ZXN0X2lycShyZmJpX2RtYV9jYWxsYmFjaywgTlVMTCkpIDwgMCkgeworCXIgPSBvbWFwX2Rpc3BjX3JlcXVlc3RfaXJxKERJU1BDX0lSUV9GUkFNRU1BU0ssIHJmYmlfZG1hX2NhbGxiYWNrLAorCQkJCSAgIE5VTEwpOworCWlmIChyIDwgMCkgewogCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJjYW4ndCBnZXQgRElTUEMgaXJxXG4iKTsKIAkJcmZiaV9lbmFibGVfY2xvY2tzKDApOwogCQlyZXR1cm4gcjsKQEAgLTU3MCw3ICs1NzMsNyBAQAogCiBzdGF0aWMgdm9pZCByZmJpX2NsZWFudXAodm9pZCkKIHsKLQlvbWFwX2Rpc3BjX2ZyZWVfaXJxKCk7CisJb21hcF9kaXNwY19mcmVlX2lycShESVNQQ19JUlFfRlJBTUVNQVNLLCByZmJpX2RtYV9jYWxsYmFjaywgTlVMTCk7CiAJcmZiaV9wdXRfY2xvY2tzKCk7CiAJaW91bm1hcChyZmJpLmJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbGF0aW51bWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYwppbmRleCBiYWNmYWJkLi4wYTM2NmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYwpAQCAtMjIzLDEwICsyMjMsMTQgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcGxhdGludW1fdnJhbV9yZXFkKGludCB2aWRlb19tb2RlLCBpbnQgY29sb3JfbW9kZSkKIHsKLQlyZXR1cm4gdm1vZGVfYXR0cnNbdmlkZW9fbW9kZS0xXS52cmVzICoKLQkgICAgICAgKHZtb2RlX2F0dHJzW3ZpZGVvX21vZGUtMV0uaHJlcyAqICgxPDxjb2xvcl9tb2RlKSArCi0JCSgodmlkZW9fbW9kZSA9PSBWTU9ERV84MzJfNjI0Xzc1KSAmJgotCQkgKGNvbG9yX21vZGUgPiBDTU9ERV84KSkgPyAweDEwIDogMHgyMCkgKyAweDEwMDA7CisJaW50IGJhc2V2YWwgPSB2bW9kZV9hdHRyc1t2aWRlb19tb2RlLTFdLmhyZXMgKiAoMTw8Y29sb3JfbW9kZSk7CisKKwlpZiAoKHZpZGVvX21vZGUgPT0gVk1PREVfODMyXzYyNF83NSkgJiYgKGNvbG9yX21vZGUgPiBDTU9ERV84KSkKKwkJYmFzZXZhbCArPSAweDEwOworCWVsc2UKKwkJYmFzZXZhbCArPSAweDIwOworCisJcmV0dXJuIHZtb2RlX2F0dHJzW3ZpZGVvX21vZGUtMV0udnJlcyAqIGJhc2V2YWwgKyAweDEwMDA7CiB9CiAKICNkZWZpbmUgU1RPUkVfRDIoYSwgZCkgeyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwppbmRleCA1YTcyMDgzLi5hZGY5NjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKQEAgLTEwMzYsNyArMTAzNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY19mYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzY19mYl9wcm9iZSwKLQkucmVtb3ZlCQk9IHMzY19mYl9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NfZmJfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHMzY19mYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjX2ZiX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCmluZGV4IDdkYTAwMjcuLmFhYzY2MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwpAQCAtMzY5LDcgKzM2OSw5IEBACiAJdm9pZCBfX2lvbWVtICpyZWdzID0gZmJpLT5pbzsKIAlpbnQgdHlwZSA9IGZiaS0+cmVncy5sY2Rjb24xICYgUzNDMjQxMF9MQ0RDT04xX1RGVDsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7Ci0JaW50IGNsa2RpdiA9IHMzYzI0MTBmYl9jYWxjX3BpeGNsayhmYmksIHZhci0+cGl4Y2xvY2spIC8gMjsKKwlpbnQgY2xrZGl2OworCisJY2xrZGl2ID0gRElWX1JPVU5EX1VQKHMzYzI0MTBmYl9jYWxjX3BpeGNsayhmYmksIHZhci0+cGl4Y2xvY2spLCAyKTsKIAogCWRwcmludGsoIiVzOiB2YXItPnhyZXMgID0gJWRcbiIsIF9fZnVuY19fLCB2YXItPnhyZXMpOwogCWRwcmludGsoIiVzOiB2YXItPnlyZXMgID0gJWRcbiIsIF9fZnVuY19fLCB2YXItPnlyZXMpOwpAQCAtMTExOSw3ICsxMTIxLDcgQEAKIAlpbnQgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwZmJfZHJpdmVyKTsKIAogCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEyZmJfZHJpdmVyKTs7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMmZiX2RyaXZlcik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKaW5kZXggNGEwNjdmMC4uYTRlMDVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCkBAIC02OTgsOCArNjk4LDggQEAKIAkJCQkJCXJhdGUsIHNpc2ZiX3ZyYXRlW2ldLnJlZnJlc2gpOwogCQkJCQlpdmlkZW8tPnJhdGVfaWR4ID0gc2lzZmJfdnJhdGVbaV0uaWR4OwogCQkJCQlpdmlkZW8tPnJlZnJlc2hfcmF0ZSA9IHNpc2ZiX3ZyYXRlW2ldLnJlZnJlc2g7Ci0JCQkJfSBlbHNlIGlmKCgocmF0ZSAtIHNpc2ZiX3ZyYXRlW2ktMV0ucmVmcmVzaCkgPD0gMikKLQkJCQkJCSYmIChzaXNmYl92cmF0ZVtpXS5pZHggIT0gMSkpIHsKKwkJCQl9IGVsc2UgaWYoKHNpc2ZiX3ZyYXRlW2ldLmlkeCAhPSAxKSAmJgorCQkJCQkJKChyYXRlIC0gc2lzZmJfdnJhdGVbaS0xXS5yZWZyZXNoKSA8PSAyKSkgewogCQkJCQlEUFJJTlRLKCJzaXNmYjogQWRqdXN0aW5nIHJhdGUgZnJvbSAlZCBkb3duIHRvICVkXG4iLAogCQkJCQkJcmF0ZSwgc2lzZmJfdnJhdGVbaS0xXS5yZWZyZXNoKTsKIAkJCQkJaXZpZGVvLT5yYXRlX2lkeCA9IHNpc2ZiX3ZyYXRlW2ktMV0uaWR4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvdnN0cnVjdC5oIGIvZHJpdmVycy92aWRlby9zaXMvdnN0cnVjdC5oCmluZGV4IDcwNWM4NTMuLmJlZjRhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2lzL3ZzdHJ1Y3QuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy92c3RydWN0LmgKQEAgLTM0Miw3ICszNDIsNyBAQAogCXVuc2lnbmVkIHNob3J0CQkJU2lTX1JZNENPRTsKIAl1bnNpZ25lZCBzaG9ydAkJCVNpU19MQ0RIREVTOwogCXVuc2lnbmVkIHNob3J0CQkJU2lTX0xDRFZERVM7Ci0JdW5zaWduZWQgc2hvcnQJCQlTaVNfRERDX1BvcnQ7CisJU0lTSU9BRERSRVNTCQkJU2lTX0REQ19Qb3J0OwogCXVuc2lnbmVkIHNob3J0CQkJU2lTX0REQ19JbmRleDsKIAl1bnNpZ25lZCBzaG9ydAkJCVNpU19ERENfRGF0YTsKIAl1bnNpZ25lZCBzaG9ydAkJCVNpU19ERENfTkRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwppbmRleCBhMWViMDg2Li42OTEzZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTk3NCw3ICs5NzQsNyBAQAogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCmluZGV4IDQ1YzU0YmYuLjlkNGYzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvYWNjZWwuYwpAQCAtMjAsMjI5ICsyMCw0MzAgQEAKICAqLwogI2luY2x1ZGUgImdsb2JhbC5oIgogCi12b2lkIHZpYWZiX2luaXRfYWNjZWwodm9pZCkKK3N0YXRpYyBpbnQgaHdfYml0Ymx0XzEodm9pZCBfX2lvbWVtICplbmdpbmUsIHU4IG9wLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCisJdTggZHN0X2JwcCwgdTMyIGRzdF9hZGRyLCB1MzIgZHN0X3BpdGNoLCB1MzIgZHN0X3gsIHUzMiBkc3RfeSwKKwl1MzIgKnNyY19tZW0sIHUzMiBzcmNfYWRkciwgdTMyIHNyY19waXRjaCwgdTMyIHNyY194LCB1MzIgc3JjX3ksCisJdTMyIGZnX2NvbG9yLCB1MzIgYmdfY29sb3IsIHU4IGZpbGxfcm9wKQogewotCXZpYXBhcmluZm8tPmZibWVtX2ZyZWUgLT0gQ1VSU09SX1NJWkU7Ci0JdmlhcGFyaW5mby0+Y3Vyc29yX3N0YXJ0ID0gdmlhcGFyaW5mby0+ZmJtZW1fZnJlZTsKLQl2aWFwYXJpbmZvLT5mYm1lbV91c2VkICs9IENVUlNPUl9TSVpFOworCXUzMiBnZV9jbWQgPSAwLCB0bXAsIGk7CiAKLQkvKiBSZXZlcnNlIDgqMTAyNCBtZW1vcnkgc3BhY2UgZm9yIGN1cnNvciBpbWFnZSAqLwotCXZpYXBhcmluZm8tPmZibWVtX2ZyZWUgLT0gKENVUlNPUl9TSVpFICsgVlFfU0laRSk7Ci0JdmlhcGFyaW5mby0+VlFfc3RhcnQgPSB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlOwotCXZpYXBhcmluZm8tPlZRX2VuZCA9IHZpYXBhcmluZm8tPlZRX3N0YXJ0ICsgVlFfU0laRSAtIDE7Ci0JdmlhcGFyaW5mby0+ZmJtZW1fdXNlZCArPSAoQ1VSU09SX1NJWkUgKyBWUV9TSVpFKTsgfQotCi12b2lkIHZpYWZiX2luaXRfMmRfZW5naW5lKHZvaWQpCi17Ci0JdTMyIGR3VlFTdGFydEFkZHIsIGR3VlFFbmRBZGRyOwotCXUzMiBkd1ZRTGVuLCBkd1ZRU3RhcnRMLCBkd1ZRRW5kTCwgZHdWUVN0YXJ0RW5kSDsKLQotCS8qIGluaXQgMkQgZW5naW5lIHJlZ3MgdG8gcmVzZXQgMkQgZW5naW5lICovCi0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VNT0RFKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNQT1MpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVFBPUyk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRElNRU5TSU9OKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QQVRBRERSKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19GR0NPTE9SKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19CR0NPTE9SKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DTElQVEwpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NMSVBCUik7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfT0ZGU0VUKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19LRVlDT05UUk9MKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QSVRDSCk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfTU9OT1BBVDEpOwotCi0JLyogSW5pdCBBR1AgYW5kIFZRIHJlZ3MgKi8KLQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewotCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKLQljYXNlIFVOSUNIUk9NRV9QNE05MDA6Ci0JCXdyaXRlbCgweDAwMTAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU0VUKTsKLQkJd3JpdGVsKDB4NjgwQTAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7Ci0JCXdyaXRlbCgweDAyMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXdyaXRlbCgweDAwMTAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU0VUKTsKLQkJd3JpdGVsKDB4MDAwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCXdyaXRlbCgweDAwMzMzMDA0LCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQl3cml0ZWwoMHg2MDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJd3JpdGVsKDB4NjEwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCXdyaXRlbCgweDYyMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQl3cml0ZWwoMHg2MzAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJd3JpdGVsKDB4NjQwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCXdyaXRlbCgweDdEMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCi0JCXdyaXRlbCgweEZFMDIwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU0VUKTsKLQkJd3JpdGVsKDB4MDAwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCWJyZWFrOworCWlmICghb3AgfHwgb3AgPiAzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBJbnZhbGlkIG9wZXJhdGlvbjogJWRcbiIsIG9wKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmICh2aWFwYXJpbmZvLT5WUV9zdGFydCAhPSAwKSB7Ci0JCS8qIEVuYWJsZSBWUSAqLwotCQlkd1ZRU3RhcnRBZGRyID0gdmlhcGFyaW5mby0+VlFfc3RhcnQ7Ci0JCWR3VlFFbmRBZGRyID0gdmlhcGFyaW5mby0+VlFfZW5kOwogCi0JCWR3VlFTdGFydEwgPSAweDUwMDAwMDAwIHwgKGR3VlFTdGFydEFkZHIgJiAweEZGRkZGRik7Ci0JCWR3VlFFbmRMID0gMHg1MTAwMDAwMCB8IChkd1ZRRW5kQWRkciAmIDB4RkZGRkZGKTsKLQkJZHdWUVN0YXJ0RW5kSCA9IDB4NTIwMDAwMDAgfAotCQkJKChkd1ZRU3RhcnRBZGRyICYgMHhGRjAwMDAwMCkgPj4gMjQpIHwKLQkJCSgoZHdWUUVuZEFkZHIgJiAweEZGMDAwMDAwKSA+PiAxNik7Ci0JCWR3VlFMZW4gPSAweDUzMDAwMDAwIHwgKFZRX1NJWkUgPj4gMyk7Ci0JCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKLQkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgotCQkJZHdWUVN0YXJ0TCB8PSAweDIwMDAwMDAwOwotCQkJZHdWUUVuZEwgfD0gMHgyMDAwMDAwMDsKLQkJCWR3VlFTdGFydEVuZEggfD0gMHgyMDAwMDAwMDsKLQkJCWR3VlFMZW4gfD0gMHgyMDAwMDAwMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJaWYgKG9wICE9IFZJQV9CSVRCTFRfRklMTCAmJiAhc3JjX21lbSAmJiBzcmNfYWRkciA9PSBkc3RfYWRkcikgeworCQlpZiAoc3JjX3ggPCBkc3RfeCkgeworCQkJZ2VfY21kIHw9IDB4MDAwMDgwMDA7CisJCQlzcmNfeCArPSB3aWR0aCAtIDE7CisJCQlkc3RfeCArPSB3aWR0aCAtIDE7CiAJCX0KLQotCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewotCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6Ci0JCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKLQkJCXdyaXRlbCgweDAwMTAwMDAwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOwotCQkJd3JpdGVsKGR3VlFTdGFydEVuZEgsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbChkd1ZRU3RhcnRMLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoZHdWUUVuZEwsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbChkd1ZRTGVuLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHg3NDMwMTAwMSwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4MDAwMDAwMDAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJd3JpdGVsKDB4MDBGRTAwMDAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNFVCk7Ci0JCQl3cml0ZWwoMHgwODAwMDNGRSwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4MEEwMDAyN0MsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDBCMDAwMjYwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHgwQzAwMDI3NCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4MEQwMDAyNjQsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDBFMDAwMDAwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHgwRjAwMDAyMCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4MTAwMDAyN0UsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDExMDAwMkZFLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHgyMDBGMDA2MCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCi0JCQl3cml0ZWwoMHgwMDAwMDAwNiwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4NDAwMDhDMEYsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDQ0MDAwMDAwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHg0NTA4MEMwNCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4NDY4MDA0MDgsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQotCQkJd3JpdGVsKGR3VlFTdGFydEVuZEgsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbChkd1ZRU3RhcnRMLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoZHdWUUVuZEwsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbChkd1ZRTGVuLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgVlEgKi8KLQkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKLQkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgotCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6Ci0JCQl3cml0ZWwoMHgwMDEwMDAwMCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU0VUKTsKLQkJCXdyaXRlbCgweDc0MzAxMDAwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXdyaXRlbCgweDAwRkUwMDAwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOwotCQkJd3JpdGVsKDB4MDAwMDAwMDQsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDQwMDA4QzBGLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHg0NDAwMDAwMCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4NDUwODBDMDQsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDQ2ODAwNDA4LAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQlicmVhazsKKwkJaWYgKHNyY195IDwgZHN0X3kpIHsKKwkJCWdlX2NtZCB8PSAweDAwMDA0MDAwOworCQkJc3JjX3kgKz0gaGVpZ2h0IC0gMTsKKwkJCWRzdF95ICs9IGhlaWdodCAtIDE7CiAJCX0KIAl9CiAKLQl2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgodmlhcGFyaW5mby0+YnBwKTsKKwlpZiAob3AgPT0gVklBX0JJVEJMVF9GSUxMKSB7CisJCXN3aXRjaCAoZmlsbF9yb3ApIHsKKwkJY2FzZSAweDAwOiAvKiBibGFja25lc3MgKi8KKwkJY2FzZSAweDVBOiAvKiBwYXR0ZXJuIGludmVyc2lvbiAqLworCQljYXNlIDB4RjA6IC8qIHBhdHRlcm4gY29weSAqLworCQljYXNlIDB4RkY6IC8qIHdoaXRlbmVzcyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJod19iaXRibHRfMTogSW52YWxpZCBmaWxsIHJvcDogIgorCQkJCSIldVxuIiwgZmlsbF9yb3ApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CiAKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKLQotCXdyaXRlbChWSUFfUElUQ0hfRU5BQkxFIHwKLQkJICAgKCgodmlhcGFyaW5mby0+aHJlcyAqCi0JCSAgICAgIHZpYXBhcmluZm8tPmJwcCA+PiAzKSA+PiAzKSB8ICgoKHZpYXBhcmluZm8tPmhyZXMgKgotCQkJCQkJICAgdmlhcGFyaW5mby0+Ci0JCQkJCQkgICBicHAgPj4gMykgPj4gMykgPDwgMTYpKSwKLQkJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOwotfQotCi12b2lkIHZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aChpbnQgYnBwKQotewotCXUzMiBkd0dFTW9kZTsKLQotCWR3R0VNb2RlID0gcmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIDB4MDQpICYgMHhGRkZGRkNGRjsKLQotCXN3aXRjaCAoYnBwKSB7CisJc3dpdGNoIChkc3RfYnBwKSB7CisJY2FzZSA4OgorCQl0bXAgPSAweDAwMDAwMDAwOworCQlicmVhazsKIAljYXNlIDE2OgotCQlkd0dFTW9kZSB8PSBWSUFfR0VNXzE2YnBwOworCQl0bXAgPSAweDAwMDAwMTAwOwogCQlicmVhazsKIAljYXNlIDMyOgotCQlkd0dFTW9kZSB8PSBWSUFfR0VNXzMyYnBwOworCQl0bXAgPSAweDAwMDAwMzAwOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkd0dFTW9kZSB8PSBWSUFfR0VNXzhicHA7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBVbnN1cHBvcnRlZCBicHAgJWRcbiIsCisJCQlkc3RfYnBwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MDQpOworCisJaWYgKG9wICE9IFZJQV9CSVRCTFRfRklMTCkgeworCQlpZiAoc3JjX3ggJiAob3AgPT0gVklBX0JJVEJMVF9NT05PID8gMHhGRkZGODAwMCA6IDB4RkZGRkYwMDApCisJCQl8fCBzcmNfeSAmIDB4RkZGRkYwMDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBVbnN1cHBvcnRlZCBzb3VyY2UgIgorCQkJCSJ4L3kgJWQgJWRcbiIsIHNyY194LCBzcmNfeSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0bXAgPSBzcmNfeCB8IChzcmNfeSA8PCAxNik7CisJCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MDgpOworCX0KKworCWlmIChkc3RfeCAmIDB4RkZGRkYwMDAgfHwgZHN0X3kgJiAweEZGRkZGMDAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBVbnN1cHBvcnRlZCBkZXN0aW5hdGlvbiB4L3kgIgorCQkJIiVkICVkXG4iLCBkc3RfeCwgZHN0X3kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdG1wID0gZHN0X3ggfCAoZHN0X3kgPDwgMTYpOworCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MEMpOworCisJaWYgKCh3aWR0aCAtIDEpICYgMHhGRkZGRjAwMCB8fCAoaGVpZ2h0IC0gMSkgJiAweEZGRkZGMDAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBVbnN1cHBvcnRlZCB3aWR0aC9oZWlnaHQgIgorCQkJIiVkICVkXG4iLCB3aWR0aCwgaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRtcCA9ICh3aWR0aCAtIDEpIHwgKChoZWlnaHQgLSAxKSA8PCAxNik7CisJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgxMCk7CisKKwlpZiAob3AgIT0gVklBX0JJVEJMVF9DT0xPUikKKwkJd3JpdGVsKGZnX2NvbG9yLCBlbmdpbmUgKyAweDE4KTsKKworCWlmIChvcCA9PSBWSUFfQklUQkxUX01PTk8pCisJCXdyaXRlbChiZ19jb2xvciwgZW5naW5lICsgMHgxQyk7CisKKwlpZiAob3AgIT0gVklBX0JJVEJMVF9GSUxMKSB7CisJCXRtcCA9IHNyY19tZW0gPyAwIDogc3JjX2FkZHI7CisJCWlmIChkc3RfYWRkciAmIDB4RTAwMDAwMDcpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBVbnN1cHBvcnRlZCBzb3VyY2UgIgorCQkJCSJhZGRyZXNzICVYXG4iLCB0bXApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdG1wID4+PSAzOworCQl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDMwKTsKKwl9CisKKwlpZiAoZHN0X2FkZHIgJiAweEUwMDAwMDA3KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBVbnN1cHBvcnRlZCBkZXN0aW5hdGlvbiAiCisJCQkiYWRkcmVzcyAlWFxuIiwgZHN0X2FkZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdG1wID0gZHN0X2FkZHIgPj4gMzsKKwl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDM0KTsKKworCWlmIChvcCA9PSBWSUFfQklUQkxUX0ZJTEwpCisJCXRtcCA9IDA7CisJZWxzZQorCQl0bXAgPSBzcmNfcGl0Y2g7CisJaWYgKHRtcCAmIDB4RkZGRkMwMDcgfHwgZHN0X3BpdGNoICYgMHhGRkZGQzAwNykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJod19iaXRibHRfMTogVW5zdXBwb3J0ZWQgcGl0Y2ggJVggJVhcbiIsCisJCQl0bXAsIGRzdF9waXRjaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0bXAgPSAodG1wID4+IDMpIHwgKGRzdF9waXRjaCA8PCAoMTYgLSAzKSk7CisJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgzOCk7CisKKwlpZiAob3AgPT0gVklBX0JJVEJMVF9GSUxMKQorCQlnZV9jbWQgfD0gZmlsbF9yb3AgPDwgMjQgfCAweDAwMDAyMDAwIHwgMHgwMDAwMDAwMTsKKwllbHNlIHsKKwkJZ2VfY21kIHw9IDB4Q0MwMDAwMDA7IC8qIFJPUD1TUkNDT1BZICovCisJCWlmIChzcmNfbWVtKQorCQkJZ2VfY21kIHw9IDB4MDAwMDAwNDA7CisJCWlmIChvcCA9PSBWSUFfQklUQkxUX01PTk8pCisJCQlnZV9jbWQgfD0gMHgwMDAwMDAwMiB8IDB4MDAwMDAxMDAgfCAweDAwMDIwMDAwOworCQllbHNlCisJCQlnZV9jbWQgfD0gMHgwMDAwMDAwMTsKKwl9CisJd3JpdGVsKGdlX2NtZCwgZW5naW5lKTsKKworCWlmIChvcCA9PSBWSUFfQklUQkxUX0ZJTEwgfHwgIXNyY19tZW0pCisJCXJldHVybiAwOworCisJdG1wID0gKHdpZHRoICogaGVpZ2h0ICogKG9wID09IFZJQV9CSVRCTFRfTU9OTyA/IDEgOiAoZHN0X2JwcCA+PiAzKSkgKworCQkzKSA+PiAyOworCisJZm9yIChpID0gMDsgaSA8IHRtcDsgaSsrKQorCQl3cml0ZWwoc3JjX21lbVtpXSwgZW5naW5lICsgVklBX01NSU9fQkxUQkFTRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBod19iaXRibHRfMih2b2lkIF9faW9tZW0gKmVuZ2luZSwgdTggb3AsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKKwl1OCBkc3RfYnBwLCB1MzIgZHN0X2FkZHIsIHUzMiBkc3RfcGl0Y2gsIHUzMiBkc3RfeCwgdTMyIGRzdF95LAorCXUzMiAqc3JjX21lbSwgdTMyIHNyY19hZGRyLCB1MzIgc3JjX3BpdGNoLCB1MzIgc3JjX3gsIHUzMiBzcmNfeSwKKwl1MzIgZmdfY29sb3IsIHUzMiBiZ19jb2xvciwgdTggZmlsbF9yb3ApCit7CisJdTMyIGdlX2NtZCA9IDAsIHRtcCwgaTsKKworCWlmICghb3AgfHwgb3AgPiAzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBJbnZhbGlkIG9wZXJhdGlvbjogJWRcbiIsIG9wKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG9wICE9IFZJQV9CSVRCTFRfRklMTCAmJiAhc3JjX21lbSAmJiBzcmNfYWRkciA9PSBkc3RfYWRkcikgeworCQlpZiAoc3JjX3ggPCBkc3RfeCkgeworCQkJZ2VfY21kIHw9IDB4MDAwMDgwMDA7CisJCQlzcmNfeCArPSB3aWR0aCAtIDE7CisJCQlkc3RfeCArPSB3aWR0aCAtIDE7CisJCX0KKwkJaWYgKHNyY195IDwgZHN0X3kpIHsKKwkJCWdlX2NtZCB8PSAweDAwMDA0MDAwOworCQkJc3JjX3kgKz0gaGVpZ2h0IC0gMTsKKwkJCWRzdF95ICs9IGhlaWdodCAtIDE7CisJCX0KKwl9CisKKwlpZiAob3AgPT0gVklBX0JJVEJMVF9GSUxMKSB7CisJCXN3aXRjaCAoZmlsbF9yb3ApIHsKKwkJY2FzZSAweDAwOiAvKiBibGFja25lc3MgKi8KKwkJY2FzZSAweDVBOiAvKiBwYXR0ZXJuIGludmVyc2lvbiAqLworCQljYXNlIDB4RjA6IC8qIHBhdHRlcm4gY29weSAqLworCQljYXNlIDB4RkY6IC8qIHdoaXRlbmVzcyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJod19iaXRibHRfMjogSW52YWxpZCBmaWxsIHJvcDogIgorCQkJCSIldVxuIiwgZmlsbF9yb3ApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGRzdF9icHApIHsKKwljYXNlIDg6CisJCXRtcCA9IDB4MDAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXRtcCA9IDB4MDAwMDAxMDA7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXRtcCA9IDB4MDAwMDAzMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBVbnN1cHBvcnRlZCBicHAgJWRcbiIsCisJCQlkc3RfYnBwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MDQpOworCisJaWYgKG9wID09IFZJQV9CSVRCTFRfRklMTCkKKwkJdG1wID0gMDsKKwllbHNlCisJCXRtcCA9IHNyY19waXRjaDsKKwlpZiAodG1wICYgMHhGRkZGQzAwNyB8fCBkc3RfcGl0Y2ggJiAweEZGRkZDMDA3KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBVbnN1cHBvcnRlZCBwaXRjaCAlWCAlWFxuIiwKKwkJCXRtcCwgZHN0X3BpdGNoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRtcCA9ICh0bXAgPj4gMykgfCAoZHN0X3BpdGNoIDw8ICgxNiAtIDMpKTsKKwl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDA4KTsKKworCWlmICgod2lkdGggLSAxKSAmIDB4RkZGRkYwMDAgfHwgKGhlaWdodCAtIDEpICYgMHhGRkZGRjAwMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJod19iaXRibHRfMjogVW5zdXBwb3J0ZWQgd2lkdGgvaGVpZ2h0ICIKKwkJCSIlZCAlZFxuIiwgd2lkdGgsIGhlaWdodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0bXAgPSAod2lkdGggLSAxKSB8ICgoaGVpZ2h0IC0gMSkgPDwgMTYpOworCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MEMpOworCisJaWYgKGRzdF94ICYgMHhGRkZGRjAwMCB8fCBkc3RfeSAmIDB4RkZGRkYwMDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzI6IFVuc3VwcG9ydGVkIGRlc3RpbmF0aW9uIHgveSAiCisJCQkiJWQgJWRcbiIsIGRzdF94LCBkc3RfeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0bXAgPSBkc3RfeCB8IChkc3RfeSA8PCAxNik7CisJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgxMCk7CisKKwlpZiAoZHN0X2FkZHIgJiAweEUwMDAwMDA3KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBVbnN1cHBvcnRlZCBkZXN0aW5hdGlvbiAiCisJCQkiYWRkcmVzcyAlWFxuIiwgZHN0X2FkZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdG1wID0gZHN0X2FkZHIgPj4gMzsKKwl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDE0KTsKKworCWlmIChvcCAhPSBWSUFfQklUQkxUX0ZJTEwpIHsKKwkJaWYgKHNyY194ICYgKG9wID09IFZJQV9CSVRCTFRfTU9OTyA/IDB4RkZGRjgwMDAgOiAweEZGRkZGMDAwKQorCQkJfHwgc3JjX3kgJiAweEZGRkZGMDAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJod19iaXRibHRfMjogVW5zdXBwb3J0ZWQgc291cmNlICIKKwkJCQkieC95ICVkICVkXG4iLCBzcmNfeCwgc3JjX3kpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdG1wID0gc3JjX3ggfCAoc3JjX3kgPDwgMTYpOworCQl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDE4KTsKKworCQl0bXAgPSBzcmNfbWVtID8gMCA6IHNyY19hZGRyOworCQlpZiAoZHN0X2FkZHIgJiAweEUwMDAwMDA3KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJod19iaXRibHRfMjogVW5zdXBwb3J0ZWQgc291cmNlICIKKwkJCQkiYWRkcmVzcyAlWFxuIiwgdG1wKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRtcCA+Pj0gMzsKKwkJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgxQyk7CisJfQorCisJaWYgKG9wICE9IFZJQV9CSVRCTFRfQ09MT1IpCisJCXdyaXRlbChmZ19jb2xvciwgZW5naW5lICsgMHg0Qyk7CisKKwlpZiAob3AgPT0gVklBX0JJVEJMVF9NT05PKQorCQl3cml0ZWwoYmdfY29sb3IsIGVuZ2luZSArIDB4NTApOworCisJaWYgKG9wID09IFZJQV9CSVRCTFRfRklMTCkKKwkJZ2VfY21kIHw9IGZpbGxfcm9wIDw8IDI0IHwgMHgwMDAwMjAwMCB8IDB4MDAwMDAwMDE7CisJZWxzZSB7CisJCWdlX2NtZCB8PSAweENDMDAwMDAwOyAvKiBST1A9U1JDQ09QWSAqLworCQlpZiAoc3JjX21lbSkKKwkJCWdlX2NtZCB8PSAweDAwMDAwMDQwOworCQlpZiAob3AgPT0gVklBX0JJVEJMVF9NT05PKQorCQkJZ2VfY21kIHw9IDB4MDAwMDAwMDIgfCAweDAwMDAwMTAwIHwgMHgwMDAyMDAwMDsKKwkJZWxzZQorCQkJZ2VfY21kIHw9IDB4MDAwMDAwMDE7CisJfQorCXdyaXRlbChnZV9jbWQsIGVuZ2luZSk7CisKKwlpZiAob3AgPT0gVklBX0JJVEJMVF9GSUxMIHx8ICFzcmNfbWVtKQorCQlyZXR1cm4gMDsKKworCXRtcCA9ICh3aWR0aCAqIGhlaWdodCAqIChvcCA9PSBWSUFfQklUQkxUX01PTk8gPyAxIDogKGRzdF9icHAgPj4gMykpICsKKwkJMykgPj4gMjsKKworCWZvciAoaSA9IDA7IGkgPCB0bXA7IGkrKykKKwkJd3JpdGVsKHNyY19tZW1baV0sIGVuZ2luZSArIFZJQV9NTUlPX0JMVEJBU0UpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFmYl9pbml0X2VuZ2luZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXIgPSBpbmZvLT5wYXI7CisJdm9pZCBfX2lvbWVtICplbmdpbmU7CisJdTMyIHZxX3N0YXJ0X2FkZHIsIHZxX2VuZF9hZGRyLCB2cV9zdGFydF9sb3csIHZxX2VuZF9sb3csIHZxX2hpZ2gsCisJCXZxX2xlbiwgY2hpcF9uYW1lID0gdmlhcGFyLT5zaGFyZWQtPmNoaXBfaW5mby5nZnhfY2hpcF9uYW1lOworCisJZW5naW5lID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOworCXZpYXBhci0+c2hhcmVkLT5lbmdpbmVfbW1pbyA9IGVuZ2luZTsKKwlpZiAoIWVuZ2luZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYl9pbml0X2FjY2VsOiBpb3JlbWFwIGZhaWxlZCwgIgorCQkJImhhcmR3YXJlIGFjY2VsZXJhdGlvbiBkaXNhYmxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXN3aXRjaCAoY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwljYXNlIFVOSUNIUk9NRV9DTjc1MDoKKwljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJdmlhcGFyLT5zaGFyZWQtPmh3X2JpdGJsdCA9IGh3X2JpdGJsdF8xOworCQlicmVhazsKKwljYXNlIFVOSUNIUk9NRV9WWDgwMDoKKwljYXNlIFVOSUNIUk9NRV9WWDg1NToKKwkJdmlhcGFyLT5zaGFyZWQtPmh3X2JpdGJsdCA9IGh3X2JpdGJsdF8yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2aWFwYXItPnNoYXJlZC0+aHdfYml0Ymx0ID0gTlVMTDsKKwl9CisKKwl2aWFwYXItPmZibWVtX2ZyZWUgLT0gQ1VSU09SX1NJWkU7CisJdmlhcGFyLT5zaGFyZWQtPmN1cnNvcl92cmFtX2FkZHIgPSB2aWFwYXItPmZibWVtX2ZyZWU7CisJdmlhcGFyLT5mYm1lbV91c2VkICs9IENVUlNPUl9TSVpFOworCisJdmlhcGFyLT5mYm1lbV9mcmVlIC09IFZRX1NJWkU7CisJdmlhcGFyLT5zaGFyZWQtPnZxX3ZyYW1fYWRkciA9IHZpYXBhci0+ZmJtZW1fZnJlZTsKKwl2aWFwYXItPmZibWVtX3VzZWQgKz0gVlFfU0laRTsKKworCS8qIEluaXQgQUdQIGFuZCBWUSByZWdzICovCisJc3dpdGNoIChjaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl3cml0ZWwoMHgwMDEwMDAwMCwgZW5naW5lICsgVklBX1JFR19DUl9UUkFOU0VUKTsKKwkJd3JpdGVsKDB4NjgwQTAwMDAsIGVuZ2luZSArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4MDIwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl3cml0ZWwoMHgwMDEwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU0VUKTsKKwkJd3JpdGVsKDB4MDAwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4MDAzMzMwMDQsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjAwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjEwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjIwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjMwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjQwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4N0QwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKworCQl3cml0ZWwoMHhGRTAyMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU0VUKTsKKwkJd3JpdGVsKDB4MDAwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKIAkJYnJlYWs7CiAJfQogCi0JLyogU2V0IEJQUCBhbmQgUGl0Y2ggKi8KLQl3cml0ZWwoZHdHRU1vZGUsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFTU9ERSk7Ci19CisJLyogRW5hYmxlIFZRICovCisJdnFfc3RhcnRfYWRkciA9IHZpYXBhci0+c2hhcmVkLT52cV92cmFtX2FkZHI7CisJdnFfZW5kX2FkZHIgPSB2aWFwYXItPnNoYXJlZC0+dnFfdnJhbV9hZGRyICsgVlFfU0laRSAtIDE7CiAKLXZvaWQgdmlhZmJfaHdfY3Vyc29yX2luaXQodm9pZCkKLXsKKwl2cV9zdGFydF9sb3cgPSAweDUwMDAwMDAwIHwgKHZxX3N0YXJ0X2FkZHIgJiAweEZGRkZGRik7CisJdnFfZW5kX2xvdyA9IDB4NTEwMDAwMDAgfCAodnFfZW5kX2FkZHIgJiAweEZGRkZGRik7CisJdnFfaGlnaCA9IDB4NTIwMDAwMDAgfCAoKHZxX3N0YXJ0X2FkZHIgJiAweEZGMDAwMDAwKSA+PiAyNCkgfAorCQkoKHZxX2VuZF9hZGRyICYgMHhGRjAwMDAwMCkgPj4gMTYpOworCXZxX2xlbiA9IDB4NTMwMDAwMDAgfCAoVlFfU0laRSA+PiAzKTsKKworCXN3aXRjaCAoY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJdnFfc3RhcnRfbG93IHw9IDB4MjAwMDAwMDA7CisJCXZxX2VuZF9sb3cgfD0gMHgyMDAwMDAwMDsKKwkJdnFfaGlnaCB8PSAweDIwMDAwMDAwOworCQl2cV9sZW4gfD0gMHgyMDAwMDAwMDsKKworCQl3cml0ZWwoMHgwMDEwMDAwMCwgZW5naW5lICsgVklBX1JFR19DUl9UUkFOU0VUKTsKKwkJd3JpdGVsKHZxX2hpZ2gsIGVuZ2luZSArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKHZxX3N0YXJ0X2xvdywgZW5naW5lICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQl3cml0ZWwodnFfZW5kX2xvdywgZW5naW5lICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQl3cml0ZWwodnFfbGVuLCBlbmdpbmUgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDc0MzAxMDAxLCBlbmdpbmUgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDAwMDAwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdyaXRlbCgweDAwRkUwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TRVQpOworCQl3cml0ZWwoMHgwODAwMDNGRSwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwQTAwMDI3QywgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwQjAwMDI2MCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwQzAwMDI3NCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwRDAwMDI2NCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwRTAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwRjAwMDAyMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgxMDAwMDI3RSwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgxMTAwMDJGRSwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgyMDBGMDA2MCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCisJCXdyaXRlbCgweDAwMDAwMDA2LCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDQwMDA4QzBGLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDQ0MDAwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDQ1MDgwQzA0LCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDQ2ODAwNDA4LCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisKKwkJd3JpdGVsKHZxX2hpZ2gsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKHZxX3N0YXJ0X2xvdywgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwodnFfZW5kX2xvdywgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwodnFfbGVuLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCWJyZWFrOworCX0KKwogCS8qIFNldCBDdXJzb3IgSW1hZ2UgQmFzZSBBZGRyZXNzICovCi0Jd3JpdGVsKHZpYXBhcmluZm8tPmN1cnNvcl9zdGFydCwKLQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9QT1MpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9PUkcpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9CRyk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX0ZHKTsKKwl3cml0ZWwodmlhcGFyLT5zaGFyZWQtPmN1cnNvcl92cmFtX2FkZHIsIGVuZ2luZSArIFZJQV9SRUdfQ1VSU09SX01PREUpOworCXdyaXRlbCgweDAsIGVuZ2luZSArIFZJQV9SRUdfQ1VSU09SX1BPUyk7CisJd3JpdGVsKDB4MCwgZW5naW5lICsgVklBX1JFR19DVVJTT1JfT1JHKTsKKwl3cml0ZWwoMHgwLCBlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9CRyk7CisJd3JpdGVsKDB4MCwgZW5naW5lICsgVklBX1JFR19DVVJTT1JfRkcpOworCXJldHVybiAwOwogfQogCiB2b2lkIHZpYWZiX3Nob3dfaHdfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgU3RhdHVzKQogewotCXUzMiB0ZW1wOwotCXUzMiBpZ2FfcGF0aCA9ICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+aWdhX3BhdGg7CisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyID0gaW5mby0+cGFyOworCXUzMiB0ZW1wLCBpZ2FfcGF0aCA9IHZpYXBhci0+aWdhX3BhdGg7CiAKLQl0ZW1wID0gcmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOworCXRlbXAgPSByZWFkbCh2aWFwYXItPnNoYXJlZC0+ZW5naW5lX21taW8gKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKIAlzd2l0Y2ggKFN0YXR1cykgewogCWNhc2UgSFdfQ3Vyc29yX09OOgogCQl0ZW1wIHw9IDB4MTsKQEAgLTI1OSwyNSArNDYwLDI3IEBACiAJZGVmYXVsdDoKIAkJdGVtcCAmPSAweDdGRkZGRkZGOwogCX0KLQl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOworCXdyaXRlbCh0ZW1wLCB2aWFwYXItPnNoYXJlZC0+ZW5naW5lX21taW8gKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKIH0KIAotaW50IHZpYWZiX3dhaXRfZW5naW5lX2lkbGUodm9pZCkKK3ZvaWQgdmlhZmJfd2FpdF9lbmdpbmVfaWRsZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXIgPSBpbmZvLT5wYXI7CiAJaW50IGxvb3AgPSAwOwogCi0Jd2hpbGUgKCEocmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1RBVFVTKSAmCisJd2hpbGUgKCEocmVhZGwodmlhcGFyLT5zaGFyZWQtPmVuZ2luZV9tbWlvICsgVklBX1JFR19TVEFUVVMpICYKIAkJCVZJQV9WUl9RVUVVRV9CVVNZKSAmJiAobG9vcCA8IE1BWExPT1ApKSB7CiAJCWxvb3ArKzsKIAkJY3B1X3JlbGF4KCk7CiAJfQogCi0Jd2hpbGUgKChyZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TVEFUVVMpICYKKwl3aGlsZSAoKHJlYWRsKHZpYXBhci0+c2hhcmVkLT5lbmdpbmVfbW1pbyArIFZJQV9SRUdfU1RBVFVTKSAmCiAJCSAgICAoVklBX0NNRF9SR1RSX0JVU1kgfCBWSUFfMkRfRU5HX0JVU1kgfCBWSUFfM0RfRU5HX0JVU1kpKSAmJgogCQkgICAgKGxvb3AgPCBNQVhMT09QKSkgewogCQlsb29wKys7CiAJCWNwdV9yZWxheCgpOwogCX0KIAotCXJldHVybiBsb29wID49IE1BWExPT1A7CisJaWYgKGxvb3AgPj0gTUFYTE9PUCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ2aWFmYl93YWl0X2VuZ2luZV9pZGxlOiBub3Qgc3luY2luZ1xuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5oIGIvZHJpdmVycy92aWRlby92aWEvYWNjZWwuaAppbmRleCAyOWJmODU0Li42MTVjODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmgKQEAgLTE1OSwxMSArMTU5LDEyIEBACiAKICNkZWZpbmUgTUFYTE9PUCAgICAgICAgICAgICAgICAgMHhGRkZGRkYKIAotdm9pZCB2aWFmYl9pbml0X2FjY2VsKHZvaWQpOwotdm9pZCB2aWFmYl9pbml0XzJkX2VuZ2luZSh2b2lkKTsKLXZvaWQgc2V0XzJkX2NvbG9yX2RlcHRoKGludCk7Ci12b2lkIHZpYWZiX2h3X2N1cnNvcl9pbml0KHZvaWQpOwotdm9pZCB2aWFmYl9zaG93X2h3X2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IFN0YXR1cyk7IGludAotdmlhZmJfd2FpdF9lbmdpbmVfaWRsZSh2b2lkKTsgdm9pZCB2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgoaW50IGJwcCk7CisjZGVmaW5lIFZJQV9CSVRCTFRfQ09MT1IJMQorI2RlZmluZSBWSUFfQklUQkxUX01PTk8JCTIKKyNkZWZpbmUgVklBX0JJVEJMVF9GSUxMCQkzCisKK2ludCB2aWFmYl9pbml0X2VuZ2luZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Cit2b2lkIHZpYWZiX3Nob3dfaHdfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgU3RhdHVzKTsKK3ZvaWQgdmlhZmJfd2FpdF9lbmdpbmVfaWRsZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKICNlbmRpZiAvKiBfX0FDQ0VMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvY2hpcC5oIGIvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCmluZGV4IGRkZTk1ZWQuLjQ3NGY0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKQEAgLTY4LDYgKzY4LDkgQEAKICNkZWZpbmUgICAgIFVOSUNIUk9NRV9WWDgwMCAgICAgICAgIDExCiAjZGVmaW5lICAgICBVTklDSFJPTUVfVlg4MDBfRElEICAgICAweDExMjIKIAorI2RlZmluZSAgICAgVU5JQ0hST01FX1ZYODU1ICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9WWDg1NV9ESUQgICAgIDB4NTEyMgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZWZpbml0aW9uIFRNRFMgVHJhc21pdHRlciBJbmZvcm1hdGlvbiAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjIsNyArMTI1LDYgQEAKIHN0cnVjdCBjaGlwX2luZm9ybWF0aW9uIHsKIAlpbnQgZ2Z4X2NoaXBfbmFtZTsKIAlpbnQgZ2Z4X2NoaXBfcmV2aXNpb247Ci0JaW50IGNoaXBfb25fc2xvdDsKIAlzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uIHRtZHNfY2hpcF9pbmZvOwogCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gbHZkc19jaGlwX2luZm87CiAJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiBsdmRzX2NoaXBfaW5mbzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCmluZGV4IGQ2OTY1NDQuLmM1YzMyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogc3RhdGljIHZvaWQgdG1kc19yZWdpc3Rlcl93cml0ZShpbnQgaW5kZXgsIHU4IGRhdGEpCiB7Ci0JdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0KKwl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9CiAJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQ7CiAKIAl2aWFmYl9pMmNfd3JpdGVieXRlKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCkBAIC0xNzIsNyArMTcyLDcgQEAKIHsKIAl1OCBkYXRhOwogCi0JdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0KKwl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9CiAJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQ7CiAJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KIAkgICAgdG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIsCkBAIC0xODIsNyArMTgyLDcgQEAKIAogc3RhdGljIGludCB0bWRzX3JlZ2lzdGVyX3JlYWRfYnl0ZXMoaW50IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKQogewotCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9CisJdmlhcGFyaW5mby0+c2hhcmVkLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPQogCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0OwogCXZpYWZiX2kyY19yZWFkYnl0ZXMoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgogCQkJIHRtZHNfY2hpcF9zbGF2ZV9hZGRyLCAodTgpIGluZGV4LCBidWZmLCBidWZmX2xlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCmluZGV4IDQ2OGJlMjQuLmI2NzVjZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCkBAIC0zMiw3ICszMiw2IEBACiBpbnQgdmlhZmJfbGNkX21vZGUgPSBMQ0RfT1BFTkxESTsKIGludCB2aWFmYl9icHAgPSAzMjsKIGludCB2aWFmYl9icHAxID0gMzI7Ci1pbnQgdmlhZmJfYWNjZWwgPSAxOwogaW50IHZpYWZiX0NSVF9PTiA9IDE7CiBpbnQgdmlhZmJfRFZJX09OOwogaW50IHZpYWZiX0xDRF9PTiA7CkBAIC00NiwxMyArNDUsMTEgQEAKIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfb2Zmc2V0OwogaW50IHZpYWZiX3NlY29uZF9zaXplOwogaW50IHZpYWZiX3ByaW1hcnlfZGV2ID0gTm9uZV9EZXZpY2U7Ci12b2lkIF9faW9tZW0gKnZpYWZiX0ZCX01NOwogdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF94cmVzID0gNjQwOwogdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF95cmVzID0gNDgwOwogdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7CiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKIGludCB2aWFmYl9sY2RfcGFuZWxfaWQgPSBMQ0RfUEFORUxfSURfTUFYSU1VTSArIDE7Ci1zdHJ1Y3QgZmJfY3Vyc29yIHZpYWN1cnNvcjsKIHN0cnVjdCBmYl9pbmZvICp2aWFmYmluZm87CiBzdHJ1Y3QgZmJfaW5mbyAqdmlhZmJpbmZvMTsKIHN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhcmluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oCmluZGV4IDc1NDNkNWYuLmQ2OWQwY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oCkBAIC03Nyw4ICs3Nyw2IEBACiBleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfYnBwOwogZXh0ZXJuIGludCB2aWFmYl9ob3RwbHVnX3JlZnJlc2g7CiBleHRlcm4gaW50IHZpYWZiX3ByaW1hcnlfZGV2OwotZXh0ZXJuIHZvaWQgX19pb21lbSAqdmlhZmJfRkJfTU07Ci1leHRlcm4gc3RydWN0IGZiX2N1cnNvciB2aWFjdXJzb3I7CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3hyZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF95cmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKaW5kZXggYzg5NjAwMC4uM2UwODNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCkBAIC0yMSwxMjUgKzIxLDE0MyBAQAogCiAjaW5jbHVkZSAiZ2xvYmFsLmgiCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZF9pbmZvIHBjaWlkbGlzdFtdID0gewotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NMRTI2Nl9ESUQsIFVOSUNIUk9NRV9DTEUyNjZ9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1BNODAwX0RJRCwgVU5JQ0hST01FX1BNODAwfSwKLQl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9LNDAwX0RJRCwgVU5JQ0hST01FX0s0MDB9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s4MDBfRElELCBVTklDSFJPTUVfSzgwMH0sCi0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfQ043MDBfRElELCBVTklDSFJPTUVfQ043MDB9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1A0TTg5MF9ESUQsIFVOSUNIUk9NRV9QNE04OTB9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s4TTg5MF9ESUQsIFVOSUNIUk9NRV9LOE04OTB9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NYNzAwX0RJRCwgVU5JQ0hST01FX0NYNzAwfSwKLQl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9QNE05MDBfRElELCBVTklDSFJPTUVfUDRNOTAwfSwKLQl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9DTjc1MF9ESUQsIFVOSUNIUk9NRV9DTjc1MH0sCi0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfVlg4MDBfRElELCBVTklDSFJPTUVfVlg4MDB9LAotCXswLCAwLCAwfQotfTsKLQotc3RydWN0IG9mZnNldCBvZmZzZXRfcmVnID0gewotCS8qIElHQTEgT2Zmc2V0IFJlZ2lzdGVyICovCi0Je0lHQTFfT0ZGU0VUX1JFR19OVU0sIHt7Q1IxMywgMCwgN30sIHtDUjM1LCA1LCA3fSB9IH0sCi0JLyogSUdBMiBPZmZzZXQgUmVnaXN0ZXIgKi8KLQl7SUdBMl9PRkZTRVRfUkVHX05VTSwge3tDUjY2LCAwLCA3fSwge0NSNjcsIDAsIDF9IH0gfQotfTsKLQogc3RhdGljIHN0cnVjdCBwbGxfbWFwIHBsbF92YWx1ZVtdID0gewotCXtDTEtfMjVfMTc1TSwgQ0xFMjY2X1BMTF8yNV8xNzVNLCBLODAwX1BMTF8yNV8xNzVNLCBDWDcwMF8yNV8xNzVNfSwKLQl7Q0xLXzI5XzU4MU0sIENMRTI2Nl9QTExfMjlfNTgxTSwgSzgwMF9QTExfMjlfNTgxTSwgQ1g3MDBfMjlfNTgxTX0sCi0Je0NMS18yNl84ODBNLCBDTEUyNjZfUExMXzI2Xzg4ME0sIEs4MDBfUExMXzI2Xzg4ME0sIENYNzAwXzI2Xzg4ME19LAotCXtDTEtfMzFfNDkwTSwgQ0xFMjY2X1BMTF8zMV80OTBNLCBLODAwX1BMTF8zMV80OTBNLCBDWDcwMF8zMV80OTBNfSwKLQl7Q0xLXzMxXzUwME0sIENMRTI2Nl9QTExfMzFfNTAwTSwgSzgwMF9QTExfMzFfNTAwTSwgQ1g3MDBfMzFfNTAwTX0sCi0Je0NMS18zMV83MjhNLCBDTEUyNjZfUExMXzMxXzcyOE0sIEs4MDBfUExMXzMxXzcyOE0sIENYNzAwXzMxXzcyOE19LAotCXtDTEtfMzJfNjY4TSwgQ0xFMjY2X1BMTF8zMl82NjhNLCBLODAwX1BMTF8zMl82NjhNLCBDWDcwMF8zMl82NjhNfSwKLQl7Q0xLXzM2XzAwME0sIENMRTI2Nl9QTExfMzZfMDAwTSwgSzgwMF9QTExfMzZfMDAwTSwgQ1g3MDBfMzZfMDAwTX0sCi0Je0NMS180MF8wMDBNLCBDTEUyNjZfUExMXzQwXzAwME0sIEs4MDBfUExMXzQwXzAwME0sIENYNzAwXzQwXzAwME19LAotCXtDTEtfNDFfMjkxTSwgQ0xFMjY2X1BMTF80MV8yOTFNLCBLODAwX1BMTF80MV8yOTFNLCBDWDcwMF80MV8yOTFNfSwKLQl7Q0xLXzQzXzE2M00sIENMRTI2Nl9QTExfNDNfMTYzTSwgSzgwMF9QTExfNDNfMTYzTSwgQ1g3MDBfNDNfMTYzTX0sCi0Je0NMS180NV8yNTBNLCBDTEUyNjZfUExMXzQ1XzI1ME0sIEs4MDBfUExMXzQ1XzI1ME0sIENYNzAwXzQ1XzI1ME19LAotCXtDTEtfNDZfMDAwTSwgQ0xFMjY2X1BMTF80Nl8wMDBNLCBLODAwX1BMTF80Nl8wMDBNLCBDWDcwMF80Nl8wMDBNfSwKLQl7Q0xLXzQ2Xzk5Nk0sIENMRTI2Nl9QTExfNDZfOTk2TSwgSzgwMF9QTExfNDZfOTk2TSwgQ1g3MDBfNDZfOTk2TX0sCi0Je0NMS180OF8wMDBNLCBDTEUyNjZfUExMXzQ4XzAwME0sIEs4MDBfUExMXzQ4XzAwME0sIENYNzAwXzQ4XzAwME19LAotCXtDTEtfNDhfODc1TSwgQ0xFMjY2X1BMTF80OF84NzVNLCBLODAwX1BMTF80OF84NzVNLCBDWDcwMF80OF84NzVNfSwKLQl7Q0xLXzQ5XzUwME0sIENMRTI2Nl9QTExfNDlfNTAwTSwgSzgwMF9QTExfNDlfNTAwTSwgQ1g3MDBfNDlfNTAwTX0sCi0Je0NMS181Ml80MDZNLCBDTEUyNjZfUExMXzUyXzQwNk0sIEs4MDBfUExMXzUyXzQwNk0sIENYNzAwXzUyXzQwNk19LAotCXtDTEtfNTJfOTc3TSwgQ0xFMjY2X1BMTF81Ml85NzdNLCBLODAwX1BMTF81Ml85NzdNLCBDWDcwMF81Ml85NzdNfSwKLQl7Q0xLXzU2XzI1ME0sIENMRTI2Nl9QTExfNTZfMjUwTSwgSzgwMF9QTExfNTZfMjUwTSwgQ1g3MDBfNTZfMjUwTX0sCi0Je0NMS182MF80NjZNLCBDTEUyNjZfUExMXzYwXzQ2Nk0sIEs4MDBfUExMXzYwXzQ2Nk0sIENYNzAwXzYwXzQ2Nk19LAotCXtDTEtfNjFfNTAwTSwgQ0xFMjY2X1BMTF82MV81MDBNLCBLODAwX1BMTF82MV81MDBNLCBDWDcwMF82MV81MDBNfSwKLQl7Q0xLXzY1XzAwME0sIENMRTI2Nl9QTExfNjVfMDAwTSwgSzgwMF9QTExfNjVfMDAwTSwgQ1g3MDBfNjVfMDAwTX0sCi0Je0NMS182NV8xNzhNLCBDTEUyNjZfUExMXzY1XzE3OE0sIEs4MDBfUExMXzY1XzE3OE0sIENYNzAwXzY1XzE3OE19LAotCXtDTEtfNjZfNzUwTSwgQ0xFMjY2X1BMTF82Nl83NTBNLCBLODAwX1BMTF82Nl83NTBNLCBDWDcwMF82Nl83NTBNfSwKLQl7Q0xLXzY4XzE3OU0sIENMRTI2Nl9QTExfNjhfMTc5TSwgSzgwMF9QTExfNjhfMTc5TSwgQ1g3MDBfNjhfMTc5TX0sCi0Je0NMS182OV85MjRNLCBDTEUyNjZfUExMXzY5XzkyNE0sIEs4MDBfUExMXzY5XzkyNE0sIENYNzAwXzY5XzkyNE19LAotCXtDTEtfNzBfMTU5TSwgQ0xFMjY2X1BMTF83MF8xNTlNLCBLODAwX1BMTF83MF8xNTlNLCBDWDcwMF83MF8xNTlNfSwKLQl7Q0xLXzcyXzAwME0sIENMRTI2Nl9QTExfNzJfMDAwTSwgSzgwMF9QTExfNzJfMDAwTSwgQ1g3MDBfNzJfMDAwTX0sCi0Je0NMS183OF83NTBNLCBDTEUyNjZfUExMXzc4Xzc1ME0sIEs4MDBfUExMXzc4Xzc1ME0sIENYNzAwXzc4Xzc1ME19LAotCXtDTEtfODBfMTM2TSwgQ0xFMjY2X1BMTF84MF8xMzZNLCBLODAwX1BMTF84MF8xMzZNLCBDWDcwMF84MF8xMzZNfSwKLQl7Q0xLXzgzXzM3NU0sIENMRTI2Nl9QTExfODNfMzc1TSwgSzgwMF9QTExfODNfMzc1TSwgQ1g3MDBfODNfMzc1TX0sCi0Je0NMS184M185NTBNLCBDTEUyNjZfUExMXzgzXzk1ME0sIEs4MDBfUExMXzgzXzk1ME0sIENYNzAwXzgzXzk1ME19LAotCXtDTEtfODRfNzUwTSwgQ0xFMjY2X1BMTF84NF83NTBNLCBLODAwX1BMTF84NF83NTBNLCBDWDcwMF84NF83NTBNfSwKLQl7Q0xLXzg1Xzg2ME0sIENMRTI2Nl9QTExfODVfODYwTSwgSzgwMF9QTExfODVfODYwTSwgQ1g3MDBfODVfODYwTX0sCi0Je0NMS184OF83NTBNLCBDTEUyNjZfUExMXzg4Xzc1ME0sIEs4MDBfUExMXzg4Xzc1ME0sIENYNzAwXzg4Xzc1ME19LAotCXtDTEtfOTRfNTAwTSwgQ0xFMjY2X1BMTF85NF81MDBNLCBLODAwX1BMTF85NF81MDBNLCBDWDcwMF85NF81MDBNfSwKLQl7Q0xLXzk3Xzc1ME0sIENMRTI2Nl9QTExfOTdfNzUwTSwgSzgwMF9QTExfOTdfNzUwTSwgQ1g3MDBfOTdfNzUwTX0sCisJe0NMS18yNV8xNzVNLCBDTEUyNjZfUExMXzI1XzE3NU0sIEs4MDBfUExMXzI1XzE3NU0sCisJIENYNzAwXzI1XzE3NU0sIFZYODU1XzI1XzE3NU19LAorCXtDTEtfMjlfNTgxTSwgQ0xFMjY2X1BMTF8yOV81ODFNLCBLODAwX1BMTF8yOV81ODFNLAorCSBDWDcwMF8yOV81ODFNLCBWWDg1NV8yOV81ODFNfSwKKwl7Q0xLXzI2Xzg4ME0sIENMRTI2Nl9QTExfMjZfODgwTSwgSzgwMF9QTExfMjZfODgwTSwKKwkgQ1g3MDBfMjZfODgwTSwgVlg4NTVfMjZfODgwTX0sCisJe0NMS18zMV80OTBNLCBDTEUyNjZfUExMXzMxXzQ5ME0sIEs4MDBfUExMXzMxXzQ5ME0sCisJIENYNzAwXzMxXzQ5ME0sIFZYODU1XzMxXzQ5ME19LAorCXtDTEtfMzFfNTAwTSwgQ0xFMjY2X1BMTF8zMV81MDBNLCBLODAwX1BMTF8zMV81MDBNLAorCSBDWDcwMF8zMV81MDBNLCBWWDg1NV8zMV81MDBNfSwKKwl7Q0xLXzMxXzcyOE0sIENMRTI2Nl9QTExfMzFfNzI4TSwgSzgwMF9QTExfMzFfNzI4TSwKKwkgQ1g3MDBfMzFfNzI4TSwgVlg4NTVfMzFfNzI4TX0sCisJe0NMS18zMl82NjhNLCBDTEUyNjZfUExMXzMyXzY2OE0sIEs4MDBfUExMXzMyXzY2OE0sCisJIENYNzAwXzMyXzY2OE0sIFZYODU1XzMyXzY2OE19LAorCXtDTEtfMzZfMDAwTSwgQ0xFMjY2X1BMTF8zNl8wMDBNLCBLODAwX1BMTF8zNl8wMDBNLAorCSBDWDcwMF8zNl8wMDBNLCBWWDg1NV8zNl8wMDBNfSwKKwl7Q0xLXzQwXzAwME0sIENMRTI2Nl9QTExfNDBfMDAwTSwgSzgwMF9QTExfNDBfMDAwTSwKKwkgQ1g3MDBfNDBfMDAwTSwgVlg4NTVfNDBfMDAwTX0sCisJe0NMS180MV8yOTFNLCBDTEUyNjZfUExMXzQxXzI5MU0sIEs4MDBfUExMXzQxXzI5MU0sCisJIENYNzAwXzQxXzI5MU0sIFZYODU1XzQxXzI5MU19LAorCXtDTEtfNDNfMTYzTSwgQ0xFMjY2X1BMTF80M18xNjNNLCBLODAwX1BMTF80M18xNjNNLAorCSBDWDcwMF80M18xNjNNLCBWWDg1NV80M18xNjNNfSwKKwl7Q0xLXzQ1XzI1ME0sIENMRTI2Nl9QTExfNDVfMjUwTSwgSzgwMF9QTExfNDVfMjUwTSwKKwkgQ1g3MDBfNDVfMjUwTSwgVlg4NTVfNDVfMjUwTX0sCisJe0NMS180Nl8wMDBNLCBDTEUyNjZfUExMXzQ2XzAwME0sIEs4MDBfUExMXzQ2XzAwME0sCisJIENYNzAwXzQ2XzAwME0sIFZYODU1XzQ2XzAwME19LAorCXtDTEtfNDZfOTk2TSwgQ0xFMjY2X1BMTF80Nl85OTZNLCBLODAwX1BMTF80Nl85OTZNLAorCSBDWDcwMF80Nl85OTZNLCBWWDg1NV80Nl85OTZNfSwKKwl7Q0xLXzQ4XzAwME0sIENMRTI2Nl9QTExfNDhfMDAwTSwgSzgwMF9QTExfNDhfMDAwTSwKKwkgQ1g3MDBfNDhfMDAwTSwgVlg4NTVfNDhfMDAwTX0sCisJe0NMS180OF84NzVNLCBDTEUyNjZfUExMXzQ4Xzg3NU0sIEs4MDBfUExMXzQ4Xzg3NU0sCisJIENYNzAwXzQ4Xzg3NU0sIFZYODU1XzQ4Xzg3NU19LAorCXtDTEtfNDlfNTAwTSwgQ0xFMjY2X1BMTF80OV81MDBNLCBLODAwX1BMTF80OV81MDBNLAorCSBDWDcwMF80OV81MDBNLCBWWDg1NV80OV81MDBNfSwKKwl7Q0xLXzUyXzQwNk0sIENMRTI2Nl9QTExfNTJfNDA2TSwgSzgwMF9QTExfNTJfNDA2TSwKKwkgQ1g3MDBfNTJfNDA2TSwgVlg4NTVfNTJfNDA2TX0sCisJe0NMS181Ml85NzdNLCBDTEUyNjZfUExMXzUyXzk3N00sIEs4MDBfUExMXzUyXzk3N00sCisJIENYNzAwXzUyXzk3N00sCVZYODU1XzUyXzk3N019LAorCXtDTEtfNTZfMjUwTSwgQ0xFMjY2X1BMTF81Nl8yNTBNLCBLODAwX1BMTF81Nl8yNTBNLAorCSBDWDcwMF81Nl8yNTBNLCBWWDg1NV81Nl8yNTBNfSwKKwl7Q0xLXzYwXzQ2Nk0sIENMRTI2Nl9QTExfNjBfNDY2TSwgSzgwMF9QTExfNjBfNDY2TSwKKwkgQ1g3MDBfNjBfNDY2TSwgVlg4NTVfNjBfNDY2TX0sCisJe0NMS182MV81MDBNLCBDTEUyNjZfUExMXzYxXzUwME0sIEs4MDBfUExMXzYxXzUwME0sCisJIENYNzAwXzYxXzUwME0sIFZYODU1XzYxXzUwME19LAorCXtDTEtfNjVfMDAwTSwgQ0xFMjY2X1BMTF82NV8wMDBNLCBLODAwX1BMTF82NV8wMDBNLAorCSBDWDcwMF82NV8wMDBNLCBWWDg1NV82NV8wMDBNfSwKKwl7Q0xLXzY1XzE3OE0sIENMRTI2Nl9QTExfNjVfMTc4TSwgSzgwMF9QTExfNjVfMTc4TSwKKwkgQ1g3MDBfNjVfMTc4TSwgVlg4NTVfNjVfMTc4TX0sCisJe0NMS182Nl83NTBNLCBDTEUyNjZfUExMXzY2Xzc1ME0sIEs4MDBfUExMXzY2Xzc1ME0sCisJIENYNzAwXzY2Xzc1ME0sIFZYODU1XzY2Xzc1ME19LAorCXtDTEtfNjhfMTc5TSwgQ0xFMjY2X1BMTF82OF8xNzlNLCBLODAwX1BMTF82OF8xNzlNLAorCSBDWDcwMF82OF8xNzlNLCBWWDg1NV82OF8xNzlNfSwKKwl7Q0xLXzY5XzkyNE0sIENMRTI2Nl9QTExfNjlfOTI0TSwgSzgwMF9QTExfNjlfOTI0TSwKKwkgQ1g3MDBfNjlfOTI0TSwgVlg4NTVfNjlfOTI0TX0sCisJe0NMS183MF8xNTlNLCBDTEUyNjZfUExMXzcwXzE1OU0sIEs4MDBfUExMXzcwXzE1OU0sCisJIENYNzAwXzcwXzE1OU0sIFZYODU1XzcwXzE1OU19LAorCXtDTEtfNzJfMDAwTSwgQ0xFMjY2X1BMTF83Ml8wMDBNLCBLODAwX1BMTF83Ml8wMDBNLAorCSBDWDcwMF83Ml8wMDBNLCBWWDg1NV83Ml8wMDBNfSwKKwl7Q0xLXzc4Xzc1ME0sIENMRTI2Nl9QTExfNzhfNzUwTSwgSzgwMF9QTExfNzhfNzUwTSwKKwkgQ1g3MDBfNzhfNzUwTSwgVlg4NTVfNzhfNzUwTX0sCisJe0NMS184MF8xMzZNLCBDTEUyNjZfUExMXzgwXzEzNk0sIEs4MDBfUExMXzgwXzEzNk0sCisJIENYNzAwXzgwXzEzNk0sIFZYODU1XzgwXzEzNk19LAorCXtDTEtfODNfMzc1TSwgQ0xFMjY2X1BMTF84M18zNzVNLCBLODAwX1BMTF84M18zNzVNLAorCSBDWDcwMF84M18zNzVNLCBWWDg1NV84M18zNzVNfSwKKwl7Q0xLXzgzXzk1ME0sIENMRTI2Nl9QTExfODNfOTUwTSwgSzgwMF9QTExfODNfOTUwTSwKKwkgQ1g3MDBfODNfOTUwTSwgVlg4NTVfODNfOTUwTX0sCisJe0NMS184NF83NTBNLCBDTEUyNjZfUExMXzg0Xzc1ME0sIEs4MDBfUExMXzg0Xzc1ME0sCisJIENYNzAwXzg0Xzc1ME0sIFZYODU1Xzg0Xzc1ME19LAorCXtDTEtfODVfODYwTSwgQ0xFMjY2X1BMTF84NV84NjBNLCBLODAwX1BMTF84NV84NjBNLAorCSBDWDcwMF84NV84NjBNLCBWWDg1NV84NV84NjBNfSwKKwl7Q0xLXzg4Xzc1ME0sIENMRTI2Nl9QTExfODhfNzUwTSwgSzgwMF9QTExfODhfNzUwTSwKKwkgQ1g3MDBfODhfNzUwTSwgVlg4NTVfODhfNzUwTX0sCisJe0NMS185NF81MDBNLCBDTEUyNjZfUExMXzk0XzUwME0sIEs4MDBfUExMXzk0XzUwME0sCisJIENYNzAwXzk0XzUwME0sIFZYODU1Xzk0XzUwME19LAorCXtDTEtfOTdfNzUwTSwgQ0xFMjY2X1BMTF85N183NTBNLCBLODAwX1BMTF85N183NTBNLAorCSBDWDcwMF85N183NTBNLCBWWDg1NV85N183NTBNfSwKIAl7Q0xLXzEwMV8wMDBNLCBDTEUyNjZfUExMXzEwMV8wMDBNLCBLODAwX1BMTF8xMDFfMDAwTSwKLQkgQ1g3MDBfMTAxXzAwME19LAorCSBDWDcwMF8xMDFfMDAwTSwgVlg4NTVfMTAxXzAwME19LAogCXtDTEtfMTA2XzUwME0sIENMRTI2Nl9QTExfMTA2XzUwME0sIEs4MDBfUExMXzEwNl81MDBNLAotCSBDWDcwMF8xMDZfNTAwTX0sCisJIENYNzAwXzEwNl81MDBNLCBWWDg1NV8xMDZfNTAwTX0sCiAJe0NMS18xMDhfMDAwTSwgQ0xFMjY2X1BMTF8xMDhfMDAwTSwgSzgwMF9QTExfMTA4XzAwME0sCi0JIENYNzAwXzEwOF8wMDBNfSwKKwkgQ1g3MDBfMTA4XzAwME0sIFZYODU1XzEwOF8wMDBNfSwKIAl7Q0xLXzExM18zMDlNLCBDTEUyNjZfUExMXzExM18zMDlNLCBLODAwX1BMTF8xMTNfMzA5TSwKLQkgQ1g3MDBfMTEzXzMwOU19LAorCSBDWDcwMF8xMTNfMzA5TSwgVlg4NTVfMTEzXzMwOU19LAogCXtDTEtfMTE4Xzg0ME0sIENMRTI2Nl9QTExfMTE4Xzg0ME0sIEs4MDBfUExMXzExOF84NDBNLAotCSBDWDcwMF8xMThfODQwTX0sCisJIENYNzAwXzExOF84NDBNLCBWWDg1NV8xMThfODQwTX0sCiAJe0NMS18xMTlfMDAwTSwgQ0xFMjY2X1BMTF8xMTlfMDAwTSwgSzgwMF9QTExfMTE5XzAwME0sCi0JIENYNzAwXzExOV8wMDBNfSwKKwkgQ1g3MDBfMTE5XzAwME0sIFZYODU1XzExOV8wMDBNfSwKIAl7Q0xLXzEyMV83NTBNLCBDTEUyNjZfUExMXzEyMV83NTBNLCBLODAwX1BMTF8xMjFfNzUwTSwKLQkgQ1g3MDBfMTIxXzc1ME19LAorCSBDWDcwMF8xMjFfNzUwTSwgMH0sCiAJe0NMS18xMjVfMTA0TSwgQ0xFMjY2X1BMTF8xMjVfMTA0TSwgSzgwMF9QTExfMTI1XzEwNE0sCi0JIENYNzAwXzEyNV8xMDRNfSwKKwkgQ1g3MDBfMTI1XzEwNE0sIDB9LAogCXtDTEtfMTMzXzMwOE0sIENMRTI2Nl9QTExfMTMzXzMwOE0sIEs4MDBfUExMXzEzM18zMDhNLAotCSBDWDcwMF8xMzNfMzA4TX0sCisJIENYNzAwXzEzM18zMDhNLCAwfSwKIAl7Q0xLXzEzNV8wMDBNLCBDTEUyNjZfUExMXzEzNV8wMDBNLCBLODAwX1BMTF8xMzVfMDAwTSwKLQkgQ1g3MDBfMTM1XzAwME19LAorCSBDWDcwMF8xMzVfMDAwTSwgVlg4NTVfMTM1XzAwME19LAogCXtDTEtfMTM2XzcwME0sIENMRTI2Nl9QTExfMTM2XzcwME0sIEs4MDBfUExMXzEzNl83MDBNLAotCSBDWDcwMF8xMzZfNzAwTX0sCisJIENYNzAwXzEzNl83MDBNLCBWWDg1NV8xMzZfNzAwTX0sCiAJe0NMS18xMzhfNDAwTSwgQ0xFMjY2X1BMTF8xMzhfNDAwTSwgSzgwMF9QTExfMTM4XzQwME0sCi0JIENYNzAwXzEzOF80MDBNfSwKKwkgQ1g3MDBfMTM4XzQwME0sIFZYODU1XzEzOF80MDBNfSwKIAl7Q0xLXzE0Nl83NjBNLCBDTEUyNjZfUExMXzE0Nl83NjBNLCBLODAwX1BMTF8xNDZfNzYwTSwKLQkgQ1g3MDBfMTQ2Xzc2ME19LAorCSBDWDcwMF8xNDZfNzYwTSwgVlg4NTVfMTQ2Xzc2ME19LAogCXtDTEtfMTUzXzkyME0sIENMRTI2Nl9QTExfMTUzXzkyME0sIEs4MDBfUExMXzE1M185MjBNLAotCSBDWDcwMF8xNTNfOTIwTX0sCisJIENYNzAwXzE1M185MjBNLCBWWDg1NV8xNTNfOTIwTX0sCiAJe0NMS18xNTZfMDAwTSwgQ0xFMjY2X1BMTF8xNTZfMDAwTSwgSzgwMF9QTExfMTU2XzAwME0sCi0JIENYNzAwXzE1Nl8wMDBNfSwKKwkgQ1g3MDBfMTU2XzAwME0sIFZYODU1XzE1Nl8wMDBNfSwKIAl7Q0xLXzE1N181MDBNLCBDTEUyNjZfUExMXzE1N181MDBNLCBLODAwX1BMTF8xNTdfNTAwTSwKLQkgQ1g3MDBfMTU3XzUwME19LAorCSBDWDcwMF8xNTdfNTAwTSwgVlg4NTVfMTU3XzUwME19LAogCXtDTEtfMTYyXzAwME0sIENMRTI2Nl9QTExfMTYyXzAwME0sIEs4MDBfUExMXzE2Ml8wMDBNLAotCSBDWDcwMF8xNjJfMDAwTX0sCisJIENYNzAwXzE2Ml8wMDBNLCBWWDg1NV8xNjJfMDAwTX0sCiAJe0NMS18xODdfMDAwTSwgQ0xFMjY2X1BMTF8xODdfMDAwTSwgSzgwMF9QTExfMTg3XzAwME0sCi0JIENYNzAwXzE4N18wMDBNfSwKKwkgQ1g3MDBfMTg3XzAwME0sIFZYODU1XzE4N18wMDBNfSwKIAl7Q0xLXzE5M18yOTVNLCBDTEUyNjZfUExMXzE5M18yOTVNLCBLODAwX1BMTF8xOTNfMjk1TSwKLQkgQ1g3MDBfMTkzXzI5NU19LAorCSBDWDcwMF8xOTNfMjk1TSwgVlg4NTVfMTkzXzI5NU19LAogCXtDTEtfMjAyXzUwME0sIENMRTI2Nl9QTExfMjAyXzUwME0sIEs4MDBfUExMXzIwMl81MDBNLAotCSBDWDcwMF8yMDJfNTAwTX0sCisJIENYNzAwXzIwMl81MDBNLCBWWDg1NV8yMDJfNTAwTX0sCiAJe0NMS18yMDRfMDAwTSwgQ0xFMjY2X1BMTF8yMDRfMDAwTSwgSzgwMF9QTExfMjA0XzAwME0sCi0JIENYNzAwXzIwNF8wMDBNfSwKKwkgQ1g3MDBfMjA0XzAwME0sIFZYODU1XzIwNF8wMDBNfSwKIAl7Q0xLXzIxOF81MDBNLCBDTEUyNjZfUExMXzIxOF81MDBNLCBLODAwX1BMTF8yMThfNTAwTSwKLQkgQ1g3MDBfMjE4XzUwME19LAorCSBDWDcwMF8yMThfNTAwTSwgVlg4NTVfMjE4XzUwME19LAogCXtDTEtfMjM0XzAwME0sIENMRTI2Nl9QTExfMjM0XzAwME0sIEs4MDBfUExMXzIzNF8wMDBNLAotCSBDWDcwMF8yMzRfMDAwTX0sCisJIENYNzAwXzIzNF8wMDBNLCBWWDg1NV8yMzRfMDAwTX0sCiAJe0NMS18yNjdfMjUwTSwgQ0xFMjY2X1BMTF8yNjdfMjUwTSwgSzgwMF9QTExfMjY3XzI1ME0sCi0JIENYNzAwXzI2N18yNTBNfSwKKwkgQ1g3MDBfMjY3XzI1ME0sIFZYODU1XzI2N18yNTBNfSwKIAl7Q0xLXzI5N181MDBNLCBDTEUyNjZfUExMXzI5N181MDBNLCBLODAwX1BMTF8yOTdfNTAwTSwKLQkgQ1g3MDBfMjk3XzUwME19LAotCXtDTEtfNzRfNDgxTSwgQ0xFMjY2X1BMTF83NF80ODFNLCBLODAwX1BMTF83NF80ODFNLCBDWDcwMF83NF80ODFNfSwKKwkgQ1g3MDBfMjk3XzUwME0sIFZYODU1XzI5N181MDBNfSwKKwl7Q0xLXzc0XzQ4MU0sIENMRTI2Nl9QTExfNzRfNDgxTSwgSzgwMF9QTExfNzRfNDgxTSwKKwkgQ1g3MDBfNzRfNDgxTSwgVlg4NTVfNzRfNDgxTX0sCiAJe0NMS18xNzJfNzk4TSwgQ0xFMjY2X1BMTF8xNzJfNzk4TSwgSzgwMF9QTExfMTcyXzc5OE0sCi0JIENYNzAwXzE3Ml83OThNfSwKKwkgQ1g3MDBfMTcyXzc5OE0sIFZYODU1XzE3Ml83OThNfSwKIAl7Q0xLXzEyMl82MTRNLCBDTEUyNjZfUExMXzEyMl82MTRNLCBLODAwX1BMTF8xMjJfNjE0TSwKLQkgQ1g3MDBfMTIyXzYxNE19LAotCXtDTEtfNzRfMjcwTSwgQ0xFMjY2X1BMTF83NF8yNzBNLCBLODAwX1BMTF83NF8yNzBNLCBDWDcwMF83NF8yNzBNfSwKKwkgQ1g3MDBfMTIyXzYxNE0sIFZYODU1XzEyMl82MTRNfSwKKwl7Q0xLXzc0XzI3ME0sIENMRTI2Nl9QTExfNzRfMjcwTSwgSzgwMF9QTExfNzRfMjcwTSwKKwkgQ1g3MDBfNzRfMjcwTSwgMH0sCiAJe0NMS18xNDhfNTAwTSwgQ0xFMjY2X1BMTF8xNDhfNTAwTSwgSzgwMF9QTExfMTQ4XzUwME0sCi0JIENYNzAwXzE0OF81MDBNfQorCSBDWDcwMF8xNDhfNTAwTSwgVlg4NTVfMTQ4XzUwME19CiB9OwogCiBzdGF0aWMgc3RydWN0IGZpZm9fZGVwdGhfc2VsZWN0IGRpc3BsYXlfZmlmb19kZXB0aF9yZWcgPSB7CkBAIC01MDgsNyArNTI2LDggQEAKIHN0YXRpYyB2b2lkIHNldF9sY2Rfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKTsKIHN0YXRpYyBpbnQgc2VhcmNoX21vZGVfc2V0dGluZyhpbnQgTW9kZUluZm9JbmRleCk7CiBzdGF0aWMgdm9pZCBsb2FkX2ZpeF9iaXRfY3J0Y19yZWcodm9pZCk7Ci1zdGF0aWMgdm9pZCBpbml0X2dmeF9jaGlwX2luZm8odm9pZCk7CitzdGF0aWMgdm9pZCBpbml0X2dmeF9jaGlwX2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkaSk7CiBzdGF0aWMgdm9pZCBpbml0X3RtZHNfY2hpcF9pbmZvKHZvaWQpOwogc3RhdGljIHZvaWQgaW5pdF9sdmRzX2NoaXBfaW5mbyh2b2lkKTsKIHN0YXRpYyB2b2lkIGRldmljZV9zY3JlZW5fb2ZmKHZvaWQpOwpAQCAtNTE4LDcgKzUzNyw2IEBACiBzdGF0aWMgdm9pZCBkZXZpY2Vfb24odm9pZCk7CiBzdGF0aWMgdm9pZCBlbmFibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCh2b2lkKTsKIHN0YXRpYyB2b2lkIGRpc2FibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCh2b2lkKTsKLXN0YXRpYyBpbnQgZ2V0X2ZiX3NpemVfZnJvbV9wY2kodm9pZCk7CiAKIHZvaWQgdmlhZmJfd3JpdGVfcmVnKHU4IGluZGV4LCB1MTYgaW9fcG9ydCwgdTggZGF0YSkKIHsKQEAgLTYyOSw3MCArNjQ3LDQzIEBACiAJfQogfQogCi12b2lkIHZpYWZiX3NldF9zdGFydF9hZGRyKHZvaWQpCit2b2lkIHZpYWZiX3NldF9wcmltYXJ5X2FkZHJlc3ModTMyIGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwLCB0bXAgPSAwLCBzaXplID0gMDsKLQl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwlERUJVR19NU0coS0VSTl9ERUJVRyAidmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcygweCUwOFgpXG4iLCBhZGRyKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1IwRCwgVklBQ1IsIGFkZHIgJiAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1IwQywgVklBQ1IsIChhZGRyID4+IDgpICYgMHhGRik7CisJdmlhZmJfd3JpdGVfcmVnKENSMzQsIFZJQUNSLCAoYWRkciA+PiAxNikgJiAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjQ4LCBWSUFDUiwgKGFkZHIgPj4gMjQpICYgMHgxRiwgMHgxRik7Cit9CiAKLQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9zZXRfc3RhcnRfYWRkciFcbiIpOwotCXZpYWZiX3VubG9ja19jcnQoKTsKLQkvKiB1cGRhdGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBJR0ExICovCi0JdmlhZmJfd3JpdGVfcmVnKENSMEMsIFZJQUNSLCAweDAwKTsJLyppbml0aWFsIHN0YXJ0aW5nIGFkZHJlc3MgKi8KLQl2aWFmYl93cml0ZV9yZWcoQ1IwRCwgVklBQ1IsIDB4MDApOwotCXZpYWZiX3dyaXRlX3JlZyhDUjM0LCBWSUFDUiwgMHgwMCk7Ci0JdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I0OCwgVklBQ1IsIDB4MDAsIDB4MUYpOwordm9pZCB2aWFmYl9zZXRfc2Vjb25kYXJ5X2FkZHJlc3ModTMyIGFkZHIpCit7CisJREVCVUdfTVNHKEtFUk5fREVCVUcgInZpYWZiX3NldF9zZWNvbmRhcnlfYWRkcmVzcygweCUwOFgpXG4iLCBhZGRyKTsKKwkvKiBzZWNvbmRhcnkgZGlzcGxheSBzdXBwb3J0cyBvbmx5IHF1YWR3b3JkIGFsaWduZWQgbWVtb3J5ICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2MiwgVklBQ1IsIChhZGRyID4+IDIpICYgMHhGRSwgMHhGRSk7CisJdmlhZmJfd3JpdGVfcmVnKENSNjMsIFZJQUNSLCAoYWRkciA+PiAxMCkgJiAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1I2NCwgVklBQ1IsIChhZGRyID4+IDE4KSAmIDB4RkYpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTMsIFZJQUNSLCAoYWRkciA+PiAyNikgJiAweDA3LCAweDA3KTsKK30KIAotCWlmICh2aWFmYl9kdWFsX2ZiKSB7Ci0JCXZpYXBhcmluZm8tPmlnYV9wYXRoID0gSUdBMTsKLQkJdmlhcGFyaW5mbzEtPmlnYV9wYXRoID0gSUdBMjsKLQl9Cit2b2lkIHZpYWZiX3NldF9wcmltYXJ5X3BpdGNoKHUzMiBwaXRjaCkKK3sKKwlERUJVR19NU0coS0VSTl9ERUJVRyAidmlhZmJfc2V0X3ByaW1hcnlfcGl0Y2goMHglMDhYKVxuIiwgcGl0Y2gpOworCS8qIHNwZWMgZG9lcyBub3Qgc2F5IHRoYXQgZmlyc3QgYWRhcHRlciBza2lwcyAzIGJpdHMgYnV0IG9sZAorCSAqIGNvZGUgZGlkIGl0IGFuZCBzZWVtcyB0byBiZSByZWFzb25hYmxlIGluIGFuYWxvZ3kgdG8gMm5kIGFkYXB0ZXIKKwkgKi8KKwlwaXRjaCA9IHBpdGNoID4+IDM7CisJdmlhZmJfd3JpdGVfcmVnKDB4MTMsIFZJQUNSLCBwaXRjaCAmIDB4RkYpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4MzUsIFZJQUNSLCAocGl0Y2ggPj4gKDggLSA1KSkgJiAweEUwLCAweEUwKTsKK30KIAotCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKLQkJaWYgKCF2aWFmYl9kdWFsX2ZiKSB7Ci0JCQlpZiAodmlhZmJfc2Vjb25kX3NpemUpCi0JCQkJc2l6ZSA9IHZpYWZiX3NlY29uZF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCQllbHNlCi0JCQkJc2l6ZSA9IDggKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQotCQkJc2l6ZSA9IHZpYXBhcmluZm8xLT5tZW1zaXplOwotCQl9Ci0JCW9mZnNldCA9IHZpYWZiX3NlY29uZF9vZmZzZXQ7Ci0JCURFQlVHX01TRyhLRVJOX0lORk8KLQkJCSAgInZpYWZiX3NlY29uZF9zaXplPSVseCwgc2Vjb25kIHN0YXJ0X2FkZGRyZXNzPSVseFxuIiwKLQkJCSAgc2l6ZSwgb2Zmc2V0KTsKLQl9Ci0JaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgewotCQlvZmZzZXQgPSBvZmZzZXQgPj4gMzsKLQotCQl0bXAgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgMHg2MikgJiAweDAxOwotCQl0bXAgfD0gKG9mZnNldCAmIDB4N0YpIDw8IDE7Ci0JCXZpYWZiX3dyaXRlX3JlZyhDUjYyLCBWSUFDUiwgdG1wKTsKLQkJdmlhZmJfd3JpdGVfcmVnKENSNjMsIFZJQUNSLCAoKG9mZnNldCAmIDB4N0Y4MCkgPj4gNykpOwotCQl2aWFmYl93cml0ZV9yZWcoQ1I2NCwgVklBQ1IsICgob2Zmc2V0ICYgMHg3RjgwMDApID4+IDE1KSk7Ci0JCXZpYWZiX3dyaXRlX3JlZyhDUkEzLCBWSUFDUiwgKChvZmZzZXQgJiAweDM4MDAwMDApID4+IDIzKSk7Ci0JfSBlbHNlIHsKLQkJLyogdXBkYXRlIHN0YXJ0aW5nIGFkZHJlc3MgKi8KLQkJdmlhZmJfd3JpdGVfcmVnKENSNjIsIFZJQUNSLCAweDAwKTsKLQkJdmlhZmJfd3JpdGVfcmVnKENSNjMsIFZJQUNSLCAweDAwKTsKLQkJdmlhZmJfd3JpdGVfcmVnKENSNjQsIFZJQUNSLCAweDAwKTsKLQkJdmlhZmJfd3JpdGVfcmVnKENSQTMsIFZJQUNSLCAweDAwKTsKLQl9Ci0KLQlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7Ci0JCWlmICh2aWFmYl9hY2NlbCkgewotCQkJaWYgKCF2aWFmYl9kdWFsX2ZiKQotCQkJCWxlbmd0aCA9IHNpemUgLSB2aWFwYXJpbmZvLT5mYm1lbV91c2VkOwotCQkJZWxzZQotCQkJCWxlbmd0aCA9IHNpemUgLSB2aWFwYXJpbmZvMS0+ZmJtZW1fdXNlZDsKLQkJfSBlbHNlCi0JCQlsZW5ndGggPSBzaXplOwotCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZykodm9pZCAqKXZpYWZiX0ZCX01NICsKLQkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7Ci0JCW1lbXNldCgodm9pZCAqKW9mZnNldCwgMCwgbGVuZ3RoKTsKLQl9Ci0KLQl2aWFmYl9sb2NrX2NydCgpOwordm9pZCB2aWFmYl9zZXRfc2Vjb25kYXJ5X3BpdGNoKHUzMiBwaXRjaCkKK3sKKwlERUJVR19NU0coS0VSTl9ERUJVRyAidmlhZmJfc2V0X3NlY29uZGFyeV9waXRjaCgweCUwOFgpXG4iLCBwaXRjaCk7CisJcGl0Y2ggPSBwaXRjaCA+PiAzOworCXZpYWZiX3dyaXRlX3JlZygweDY2LCBWSUFDUiwgcGl0Y2ggJiAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDY3LCBWSUFDUiwgKHBpdGNoID4+IDgpICYgMHgwMywgMHgwMyk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHg3MSwgVklBQ1IsIChwaXRjaCA+PiAoMTAgLSA3KSkgJiAweDgwLCAweDgwKTsKIH0KIAogdm9pZCB2aWFmYl9zZXRfb3V0cHV0X3BhdGgoaW50IGRldmljZSwgaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKQpAQCAtMTEyMywzMCArMTExNCw2IEBACiAJfQogfQogCi12b2lkIHZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKQotewotCWludCByZWdfdmFsdWU7Ci0JaW50IHZpYWZiX2xvYWRfcmVnX251bTsKLQlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZzsKLQotCXN3aXRjaCAoc2V0X2lnYSkgewotCWNhc2UgSUdBMV9JR0EyOgotCWNhc2UgSUdBMToKLQkJcmVnX3ZhbHVlID0gSUdBMV9PRkZTRVRfRk9STVVMQShoX2FkZHIsIGJwcF9ieXRlKTsKLQkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2ExX29mZnNldF9yZWcucmVnX251bTsKLQkJcmVnID0gb2Zmc2V0X3JlZy5pZ2ExX29mZnNldF9yZWcucmVnOwotCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7Ci0JCWlmIChzZXRfaWdhID09IElHQTEpCi0JCQlicmVhazsKLQljYXNlIElHQTI6Ci0JCXJlZ192YWx1ZSA9IElHQTJfT0ZGU0VUX0ZPUk1VTEEoaF9hZGRyLCBicHBfYnl0ZSk7Ci0JCXZpYWZiX2xvYWRfcmVnX251bSA9IG9mZnNldF9yZWcuaWdhMl9vZmZzZXRfcmVnLnJlZ19udW07Ci0JCXJlZyA9IG9mZnNldF9yZWcuaWdhMl9vZmZzZXRfcmVnLnJlZzsKLQkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOwotCQlicmVhazsKLQl9Ci19Ci0KIHZvaWQgdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoaW50IGhfYWRkciwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKIHsKIAlpbnQgcmVnX3ZhbHVlOwpAQCAtMTI3Nyw2ICsxMjQ0LDE1IEBACiAJCQkgICAgVlg4MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CiAJCX0KIAorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9WWDg1NSkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IFZYODU1X0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gVlg4NTVfSUdBMV9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTFfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgVlg4NTVfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFZYODU1X0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKIAkJLyogU2V0IERpc3BsYXkgRklGTyBEZXBhdGggU2VsZWN0ICovCiAJCXJlZ192YWx1ZSA9IElHQTFfRklGT19ERVBUSF9TRUxFQ1RfRk9STVVMQShpZ2ExX2ZpZm9fbWF4X2RlcHRoKTsKIAkJdmlhZmJfbG9hZF9yZWdfbnVtID0KQEAgLTE0MDgsNiArMTM4NCwxNSBAQAogCQkJICAgIFZYODAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOwogCQl9CiAKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfVlg4NTUpIHsKKwkJCWlnYTJfZmlmb19tYXhfZGVwdGggPSBWWDg1NV9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFZYODU1X0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFZYODU1X0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBWWDg1NV9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCiAJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApIHsKIAkJCS8qIFNldCBEaXNwbGF5IEZJRk8gRGVwYXRoIFNlbGVjdCAqLwogCQkJcmVnX3ZhbHVlID0KQEAgLTE0OTYsNiArMTQ4MSw4IEBACiAJCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CiAJCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKIAkJCQlyZXR1cm4gcGxsX3ZhbHVlW2ldLmN4NzAwX3BsbDsKKwkJCWNhc2UgVU5JQ0hST01FX1ZYODU1OgorCQkJCXJldHVybiBwbGxfdmFsdWVbaV0udng4NTVfcGxsOwogCQkJfQogCQl9CiAJfQpAQCAtMTUyOSw2ICsxNTE2LDcgQEAKIAkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgogCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CiAJCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCQljYXNlIFVOSUNIUk9NRV9WWDg1NToKIAkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ0LCBWSUFTUiwgQ0xLIC8gMHgxMDAwMCk7CiAJCQlERUJVR19NU0coS0VSTl9JTkZPICJcblNSNDQ9JXgiLCBDTEsgLyAweDEwMDAwKTsKIAkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ1LCBWSUFTUiwgKENMSyAmIDB4RkZGRikgLyAweDEwMCk7CkBAIC0xNTU3LDYgKzE1NDUsNyBAQAogCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CiAJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKIAkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCWNhc2UgVU5JQ0hST01FX1ZYODU1OgogCQkJdmlhZmJfd3JpdGVfcmVnKFNSNEEsIFZJQVNSLCBDTEsgLyAweDEwMDAwKTsKIAkJCXZpYWZiX3dyaXRlX3JlZyhTUjRCLCBWSUFTUiwgKENMSyAmIDB4RkZGRikgLyAweDEwMCk7CiAJCQl2aWFmYl93cml0ZV9yZWcoU1I0QywgVklBU1IsIENMSyAlIDB4MTAwKTsKQEAgLTE5MTYsNyArMTkwNSw2IEBACiAJbG9hZF9maXhfYml0X2NydGNfcmVnKCk7CiAJdmlhZmJfbG9ja19jcnQoKTsKIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHg4MCwgQklUNyk7Ci0JdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGhfYWRkciwgYnBwX2J5dGUsIHNldF9pZ2EpOwogCXZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGhfYWRkciwgYnBwX2J5dGUsIHNldF9pZ2EpOwogCiAJLyogbG9hZCBGSUZPICovCkBAIC0xOTMzLDkgKzE5MjEsMTAgQEAKIAogfQogCi12b2lkIHZpYWZiX2luaXRfY2hpcF9pbmZvKHZvaWQpCit2b2lkIHZpYWZiX2luaXRfY2hpcF9pbmZvKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGRpKQogewotCWluaXRfZ2Z4X2NoaXBfaW5mbygpOworCWluaXRfZ2Z4X2NoaXBfaW5mbyhwZGV2LCBwZGkpOwogCWluaXRfdG1kc19jaGlwX2luZm8oKTsKIAlpbml0X2x2ZHNfY2hpcF9pbmZvKCk7CiAKQEAgLTIwMDgsMjQgKzE5OTcsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGluaXRfZ2Z4X2NoaXBfaW5mbyh2b2lkKQorc3RhdGljIHZvaWQgaW5pdF9nZnhfY2hpcF9pbmZvKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwZGkpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwotCXUzMiBpOwogCXU4IHRtcDsKIAotCS8qIEluZGVudGlmeSBHRlggQ2hpcCBOYW1lICovCi0JZm9yIChpID0gMDsgcGNpaWRsaXN0W2ldLnZlbmRvciAhPSAwOyBpKyspIHsKLQkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKHBjaWlkbGlzdFtpXS52ZW5kb3IsCi0JCQlwY2lpZGxpc3RbaV0uZGV2aWNlLCAwKTsKLQkJaWYgKHBkZXYpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoIXBjaWlkbGlzdFtpXS52ZW5kb3IpCi0JCXJldHVybiA7Ci0KLQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPSBwY2lpZGxpc3RbaV0uY2hpcF9pbmRleDsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPSBwZGktPmRyaXZlcl9kYXRhOwogCiAJLyogQ2hlY2sgcmV2aXNpb24gb2YgQ0xFMjY2IENoaXAgKi8KIAlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKQEAgLTIwNTYsOCArMjAzMyw2IEBACiAJCQkJQ1g3MDBfUkVWSVNJT05fNzAwOwogCQl9CiAJfQotCi0JcGNpX2Rldl9wdXQocGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfdG1kc19jaGlwX2luZm8odm9pZCkKQEAgLTIyNzEsMTEgKzIyNDYsMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFVOSUNIUk9NRV9DWDcwMDoKLQkJdmlhZmJfd3JpdGVfcmVneChDWDcwMF9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3MpOwotCiAJY2FzZSBVTklDSFJPTUVfVlg4MDA6Ci0JCXZpYWZiX3dyaXRlX3JlZ3goVlg4MDBfTW9kZVhyZWdzLCBOVU1fVE9UQUxfVlg4MDBfTW9kZVhyZWdzKTsKKwkJdmlhZmJfd3JpdGVfcmVneChDWDcwMF9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3MpOworCQlicmVhazsKIAorCWNhc2UgVU5JQ0hST01FX1ZYODU1OgorCQl2aWFmYl93cml0ZV9yZWd4KFZYODU1X01vZGVYcmVncywgTlVNX1RPVEFMX1ZYODU1X01vZGVYcmVncyk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjI5MSw3ICsyMjY3LDggQEAKIAkJb3V0YihWUElULlNSW2kgLSAxXSwgVklBU1IgKyAxKTsKIAl9CiAKLQl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCXZpYWZiX3NldF9wcmltYXJ5X2FkZHJlc3MoMCk7CisJdmlhZmJfc2V0X3NlY29uZGFyeV9hZGRyZXNzKHZpYWZiX1NBTU1fT04gPyB2aWFmYl9zZWNvbmRfb2Zmc2V0IDogMCk7CiAJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CiAKIAkvKiBXcml0ZSBDUlRDICovCkBAIC0yMzcxLDYgKzIzNDgsOSBAQAogCQl9CiAJfQogCisJdmlhZmJfc2V0X3ByaW1hcnlfcGl0Y2godmlhZmJpbmZvLT5maXgubGluZV9sZW5ndGgpOworCXZpYWZiX3NldF9zZWNvbmRhcnlfcGl0Y2godmlhZmJfZHVhbF9mYiA/IHZpYWZiaW5mbzEtPmZpeC5saW5lX2xlbmd0aAorCQk6IHZpYWZiaW5mby0+Zml4LmxpbmVfbGVuZ3RoKTsKIAkvKiBVcGRhdGUgUmVmcmVzaCBSYXRlIFNldHRpbmcgKi8KIAogCS8qIENsZWFyIE9uIFNjcmVlbiAqLwpAQCAtMjU0NSwzOCArMjUyNSw2IEBACiAJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzNiwgVklBQ1IsIDB4MCwgQklUNSArIEJJVDQpOwogfQogCi12b2lkIHZpYWZiX2dldF9tbWlvX2luZm8odW5zaWduZWQgbG9uZyAqbW1pb19iYXNlLAotCXVuc2lnbmVkIGxvbmcgKm1taW9fbGVuKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQl1MzIgdmVuZG9yLCBkZXZpY2U7Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBwY2lpZGxpc3RbaV0udmVuZG9yICE9IDA7IGkrKykKLQkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PQotCQkJcGNpaWRsaXN0W2ldLmNoaXBfaW5kZXgpCi0JCQlicmVhazsKLQotCWlmICghcGNpaWRsaXN0W2ldLnZlbmRvcikKLQkJcmV0dXJuIDsKLQotCXZlbmRvciA9IHBjaWlkbGlzdFtpXS52ZW5kb3I7Ci0JZGV2aWNlID0gcGNpaWRsaXN0W2ldLmRldmljZTsKLQotCXBkZXYgPSBwY2lfZ2V0X2RldmljZSh2ZW5kb3IsIGRldmljZSwgTlVMTCk7Ci0KLQlpZiAoIXBkZXYpIHsKLQkJKm1taW9fYmFzZSA9IDA7Ci0JCSptbWlvX2xlbiA9IDA7Ci0JCXJldHVybiA7Ci0JfQotCi0JKm1taW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQkqbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOwotCi0JcGNpX2Rldl9wdXQocGRldik7Ci19Ci0KIHN0YXRpYyB2b2lkIGVuYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKHZvaWQpCiB7CiAJLyogdG8gZW5hYmxlIHNlY29uZCBkaXNwbGF5IGNoYW5uZWwuICovCkBAIC0yNTkzLDQ0ICsyNTQxLDcgQEAKIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgQklUNiwgQklUNik7CiB9CiAKLXZvaWQgdmlhZmJfZ2V0X2ZiX2luZm8odW5zaWduZWQgaW50ICpmYl9iYXNlLCB1bnNpZ25lZCBpbnQgKmZiX2xlbikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7Ci0JdTMyIHZlbmRvciwgZGV2aWNlOwotCXUzMiBpOwotCi0JZm9yIChpID0gMDsgcGNpaWRsaXN0W2ldLnZlbmRvciAhPSAwOyBpKyspCi0JCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KLQkJCXBjaWlkbGlzdFtpXS5jaGlwX2luZGV4KQotCQkJYnJlYWs7Ci0KLQlpZiAoIXBjaWlkbGlzdFtpXS52ZW5kb3IpCi0JCXJldHVybiA7Ci0KLQl2ZW5kb3IgPSBwY2lpZGxpc3RbaV0udmVuZG9yOwotCWRldmljZSA9IHBjaWlkbGlzdFtpXS5kZXZpY2U7Ci0KLQlwZGV2ID0gcGNpX2dldF9kZXZpY2UodmVuZG9yLCBkZXZpY2UsIE5VTEwpOwotCi0JaWYgKCFwZGV2KSB7Ci0JCSpmYl9iYXNlID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMzApIDw8IDI0OwotCQkqZmJfbGVuID0gdmlhZmJfZ2V0X21lbXNpemUoKTsKLQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiR2V0IEZCIGluZm8gZnJvbSBTUjMwIVxuIik7Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gImZiX2Jhc2UgPSAlMDh4XG4iLCAqZmJfYmFzZSk7Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gImZiX2xlbiA9ICUwOHhcbiIsICpmYl9sZW4pOwotCQlyZXR1cm4gOwotCX0KLQotCSpmYl9iYXNlID0gKHVuc2lnbmVkIGludClwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JKmZiX2xlbiA9IGdldF9mYl9zaXplX2Zyb21fcGNpKCk7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAiR2V0IEZCIGluZm8gZnJvbSBQQ0kgc3lzdGVtIVxuIik7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAiZmJfYmFzZSA9ICUwOHhcbiIsICpmYl9iYXNlKTsKLQlERUJVR19NU0coS0VSTl9JTkZPICJmYl9sZW4gPSAlMDh4XG4iLCAqZmJfbGVuKTsKLQotCXBjaV9kZXZfcHV0KHBkZXYpOwotfQotCi1zdGF0aWMgaW50IGdldF9mYl9zaXplX2Zyb21fcGNpKHZvaWQpCitpbnQgdmlhZmJfZ2V0X2ZiX3NpemVfZnJvbV9wY2kodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNvbmZpZ2lkLCBkZXZpY2VpZCwgRkJTaXplID0gMDsKIAlpbnQgVmlkZW9NZW1TaXplOwpAQCAtMjY1Niw2ICsyNTY3LDcgQEAKIAkJY2FzZSBQNE04OTBfRlVOQ1RJT04zOgogCQljYXNlIFA0TTkwMF9GVU5DVElPTjM6CiAJCWNhc2UgVlg4MDBfRlVOQ1RJT04zOgorCQljYXNlIFZYODU1X0ZVTkNUSU9OMzoKIAkJCS8qY2FzZSBDTjc1MF9GVU5DVElPTjM6ICovCiAJCQlvdXRsKGNvbmZpZ2lkICsgMHhBMCwgKHVuc2lnbmVkIGxvbmcpMHhDRjgpOwogCQkJRkJTaXplID0gaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKTsKQEAgLTI3MTksNiArMjYzMSwxMCBAQAogCQkJVmlkZW9NZW1TaXplID0gKDI1NiA8PCAyMCk7CS8qMjU2TSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSAweDAwMDA3MDAwOgkvKiBPbmx5IG9uIFZYODU1Lzg3NSAqLworCQkJVmlkZW9NZW1TaXplID0gKDUxMiA8PCAyMCk7CS8qNTEyTSAqLworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCVZpZGVvTWVtU2l6ZSA9ICgzMiA8PCAyMCk7CS8qMzJNICovCiAJCQlicmVhazsKQEAgLTI3ODgsMjQgKzI3MDQsNiBAQAogCX0KIH0KIAotdm9pZCB2aWFmYl9tZW1vcnlfcGl0Y2hfcGF0Y2goc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JaWYgKGluZm8tPnZhci54cmVzICE9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpIHsKLQkJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGluZm8tPnZhci54cmVzX3ZpcnR1YWwsCi0JCQkJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMsIElHQTEpOwotCi0JCWlmICh2aWFmYl9TQU1NX09OKSB7Ci0JCQl2aWFmYl9sb2FkX29mZnNldF9yZWcodmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcywKLQkJCQl2aWFmYl9icHAxID4+IDMsCi0JCQkJCUlHQTIpOwotCQl9IGVsc2UgewotCQkJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGluZm8tPnZhci54cmVzX3ZpcnR1YWwsCi0JCQkJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzLCBJR0EyKTsKLQkJfQotCi0JfQotfQotCiAvKkFjY29yZGluZyB2YXIncyB4cmVzLCB5cmVzIGZpbGwgdmFyJ3Mgb3RoZXIgdGltaW5nIGluZm9ybWF0aW9uKi8KIHZvaWQgdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCByZWZyZXNoLAogCQkJICBpbnQgbW9kZV9pbmRleCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCmluZGV4IDZmZjM4ZmEuLmI4NzRkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApAQCAtMTQ3LDE0ICsxNDcsOCBAQAogLyogbG9jYXRpb246IHtDUjVGLDAsNH0gKi8KICNkZWZpbmUgSUdBMl9WRVJfU1lOQ19FTkRfUkVHX05VTSAgICAgICAxCiAKLS8qIERlZmluZSBPZmZzZXQgYW5kIEZldGNoIENvdW50IFJlZ2lzdGVyKi8KKy8qIERlZmluZSBGZXRjaCBDb3VudCBSZWdpc3RlciovCiAKLS8qIGxvY2F0aW9uOiB7Q1IxMywwLDd9LHtDUjM1LDUsN30gKi8KLSNkZWZpbmUgSUdBMV9PRkZTRVRfUkVHX05VTSAgICAgICAgICAgICAyCi0vKiA4IGJ5dGVzIGFsaWdubWVudC4gKi8KLSNkZWZpbmUgSUdBMV9PRkZTRVJfQUxJR05fQllURSAgICAgICAgICA4Ci0vKiB4OiBIIHJlc29sdXRpb24sIHk6IGNvbG9yIGRlcHRoICovCi0jZGVmaW5lIElHQTFfT0ZGU0VUX0ZPUk1VTEEoeCwgeSkgICAgICAgICgoeCp5KS9JR0ExX09GRlNFUl9BTElHTl9CWVRFKQogLyogbG9jYXRpb246IHtTUjFDLDAsN30se1NSMUQsMCwxfSAqLwogI2RlZmluZSBJR0ExX0ZFVENIX0NPVU5UX1JFR19OVU0gICAgICAgIDIKIC8qIDE2IGJ5dGVzIGFsaWdubWVudC4gKi8KQEAgLTE2NCwxMSArMTU4LDYgQEAKICNkZWZpbmUgSUdBMV9GRVRDSF9DT1VOVF9GT1JNVUxBKHgsIHkpICAgXAogCSgoKHgqeSkvSUdBMV9GRVRDSF9DT1VOVF9BTElHTl9CWVRFKSArIElHQTFfRkVUQ0hfQ09VTlRfUEFUQ0hfVkFMVUUpCiAKLS8qIGxvY2F0aW9uOiB7Q1I2NiwwLDd9LHtDUjY3LDAsMX0gKi8KLSNkZWZpbmUgSUdBMl9PRkZTRVRfUkVHX05VTSAgICAgICAgICAgICAyCi0jZGVmaW5lIElHQTJfT0ZGU0VUX0FMSUdOX0JZVEUgICAgICAgICAgOAotLyogeDogSCByZXNvbHV0aW9uLCB5OiBjb2xvciBkZXB0aCAqLwotI2RlZmluZSBJR0EyX09GRlNFVF9GT1JNVUxBKHgsIHkpICAgICAgICAoKHgqeSkvSUdBMl9PRkZTRVRfQUxJR05fQllURSkKIC8qIGxvY2F0aW9uOiB7Q1I2NSwwLDd9LHtDUjY3LDIsM30gKi8KICNkZWZpbmUgSUdBMl9GRVRDSF9DT1VOVF9SRUdfTlVNICAgICAgICAyCiAjZGVmaW5lIElHQTJfRkVUQ0hfQ09VTlRfQUxJR05fQllURSAgICAgMTYKQEAgLTMzNSw2ICszMjQsMTcgQEAKIC8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCiAjZGVmaW5lIFZYODAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAxMjgKIAorLyogRm9yIFZUMzQwOSAqLworI2RlZmluZSBWWDg1NV9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgNDAwCisjZGVmaW5lIFZYODU1X0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAzMjAKKyNkZWZpbmUgVlg4NTVfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDMyMAorI2RlZmluZSBWWDg1NV9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTYwCisKKyNkZWZpbmUgVlg4NTVfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDIwMAorI2RlZmluZSBWWDg1NV9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTYwCisjZGVmaW5lIFZYODU1X0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAxNjAKKyNkZWZpbmUgVlg4NTVfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDMyMAorCiAjZGVmaW5lIElHQTFfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTSAgICAgICAgICAxCiAjZGVmaW5lIElHQTFfRklGT19USFJFU0hPTERfUkVHX05VTSAgICAgICAgICAgICAyCiAjZGVmaW5lIElHQTFfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNICAgICAgICAyCkBAIC02MTcsMjMgKzYxNyw2IEBACiAJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1ZFUl9TWU5DX0VORF9SRUdfTlVNXTsKIH07CiAKLS8qIElHQTEgT2Zmc2V0IFJlZ2lzdGVyICovCi1zdHJ1Y3QgaWdhMV9vZmZzZXQgewotCWludCByZWdfbnVtOwotCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9PRkZTRVRfUkVHX05VTV07Ci19OwotCi0vKiBJR0EyIE9mZnNldCBSZWdpc3RlciAqLwotc3RydWN0IGlnYTJfb2Zmc2V0IHsKLQlpbnQgcmVnX251bTsKLQlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfT0ZGU0VUX1JFR19OVU1dOwotfTsKLQotc3RydWN0IG9mZnNldCB7Ci0Jc3RydWN0IGlnYTFfb2Zmc2V0IGlnYTFfb2Zmc2V0X3JlZzsKLQlzdHJ1Y3QgaWdhMl9vZmZzZXQgaWdhMl9vZmZzZXRfcmVnOwotfTsKLQogLyogSUdBMSBGZXRjaCBDb3VudCBSZWdpc3RlciAqLwogc3RydWN0IGlnYTFfZmV0Y2hfY291bnQgewogCWludCByZWdfbnVtOwpAQCAtNzE2LDYgKzY5OSw3IEBACiAJdTMyIGNsZTI2Nl9wbGw7CiAJdTMyIGs4MDBfcGxsOwogCXUzMiBjeDcwMF9wbGw7CisJdTMyIHZ4ODU1X3BsbDsKIH07CiAKIHN0cnVjdCByZ2JMVVQgewpAQCAtODYwLDYgKzg0NCw4IEBACiAjZGVmaW5lIFA0TTkwMF9GVU5DVElPTjMgICAgMHgzMzY0CiAvKiBWVDMzNTMgY2hpcHNldCovCiAjZGVmaW5lIFZYODAwX0ZVTkNUSU9OMyAgICAgMHgzMzUzCisvKiBWVDM0MDkgY2hpcHNldCovCisjZGVmaW5lIFZYODU1X0ZVTkNUSU9OMyAgICAgMHgzNDA5CiAKICNkZWZpbmUgTlVNX1RPVEFMX1BMTF9UQUJMRSBBUlJBWV9TSVpFKHBsbF92YWx1ZSkKIApAQCAtODgzLDcgKzg2OSw2IEBACiBleHRlcm4gaW50IHZpYWZiX0xDRDJfT047CiBleHRlcm4gaW50IHZpYWZiX0xDRF9PTjsKIGV4dGVybiBpbnQgdmlhZmJfRFZJX09OOwotZXh0ZXJuIGludCB2aWFmYl9hY2NlbDsKIGV4dGVybiBpbnQgdmlhZmJfaG90cGx1ZzsKIAogdm9pZCB2aWFmYl93cml0ZV9yZWdfbWFzayh1OCBpbmRleCwgaW50IGlvX3BvcnQsIHU4IGRhdGEsIHU4IG1hc2spOwpAQCAtOTA0LDcgKzg4OSw2IEBACiB1OCB2aWFmYl9yZWFkX3JlZyhpbnQgaW9fcG9ydCwgdTggaW5kZXgpOwogdm9pZCB2aWFmYl9sb2NrX2NydCh2b2lkKTsKIHZvaWQgdmlhZmJfdW5sb2NrX2NydCh2b2lkKTsKLXZvaWQgdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwogdm9pZCB2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKTsKIHZvaWQgdmlhZmJfd3JpdGVfcmVneChzdHJ1Y3QgaW9fcmVnIFJlZ1RhYmxlW10sIGludCBJdGVtTnVtKTsKIHN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlhZmJfZ2V0X21vZGV0YmxfcG9pbnRlcihpbnQgSW5kZXgpOwpAQCAtOTE3LDE3ICs5MDEsMjAgQEAKIGludCB2aWFmYl9zZXRtb2RlKGludCB2bW9kZV9pbmRleCwgaW50IGhvcl9yZXMsIGludCB2ZXJfcmVzLAogCSAgICBpbnQgdmlkZW9fYnBwLCBpbnQgdm1vZGVfaW5kZXgxLCBpbnQgaG9yX3JlczEsCiAJICAgIGludCB2ZXJfcmVzMSwgaW50IHZpZGVvX2JwcDEpOwotdm9pZCB2aWFmYl9pbml0X2NoaXBfaW5mbyh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF9jaGlwX2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwZGkpOwogdm9pZCB2aWFmYl9pbml0X2RhYyhpbnQgc2V0X2lnYSk7CiBpbnQgdmlhZmJfZ2V0X3BpeGNsb2NrKGludCBocmVzLCBpbnQgdnJlcywgaW50IHZtb2RlX3JlZnJlc2gpOwogaW50IHZpYWZiX2dldF9yZWZyZXNoKGludCBocmVzLCBpbnQgdnJlcywgdTMyIGZsb2F0X3JlZnJlc2gpOwogdm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwLAogCQkJICAgaW50IHZtb2RlX3JlZnJlc2gsIGludCBmbGFnKTsKLXZvaWQgdmlhZmJfZ2V0X21taW9faW5mbyh1bnNpZ25lZCBsb25nICptbWlvX2Jhc2UsCi0JdW5zaWduZWQgbG9uZyAqbW1pb19sZW4pOwogCitpbnQgdmlhZmJfZ2V0X2ZiX3NpemVfZnJvbV9wY2kodm9pZCk7CiB2b2lkIHZpYWZiX3NldF9pZ2FfcGF0aCh2b2lkKTsKLXZvaWQgdmlhZmJfc2V0X3N0YXJ0X2FkZHIodm9pZCk7Cit2b2lkIHZpYWZiX3NldF9wcmltYXJ5X2FkZHJlc3ModTMyIGFkZHIpOwordm9pZCB2aWFmYl9zZXRfc2Vjb25kYXJ5X2FkZHJlc3ModTMyIGFkZHIpOwordm9pZCB2aWFmYl9zZXRfcHJpbWFyeV9waXRjaCh1MzIgcGl0Y2gpOwordm9pZCB2aWFmYl9zZXRfc2Vjb25kYXJ5X3BpdGNoKHUzMiBwaXRjaCk7CiB2b2lkIHZpYWZiX2dldF9mYl9pbmZvKHVuc2lnbmVkIGludCAqZmJfYmFzZSwgdW5zaWduZWQgaW50ICpmYl9sZW4pOwogCiAjZW5kaWYgLyogX19IV19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oCmluZGV4IDg0MmZlMzAuLmRlODk5ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaApAQCAtNTAsOCArNTAsNiBAQAogI2RlZmluZSBWSUFGQl9HRVRfR0FNTUFfTFVUCQkweDU2NDk0MTI0CiAjZGVmaW5lIFZJQUZCX1NFVF9HQU1NQV9MVVQJCTB4NTY0OTQxMjUKICNkZWZpbmUgVklBRkJfR0VUX0dBTU1BX1NVUFBPUlRfU1RBVEUJMHg1NjQ5NDEyNgotI2RlZmluZSBWSUFGQl9TRVRfVklERU9fREVWSUNFCQkweDU2NDk0MTI3Ci0jZGVmaW5lIFZJQUZCX0dFVF9WSURFT19ERVZJQ0UJCTB4NTY0OTQxMjgKICNkZWZpbmUgVklBRkJfU0VUX1NFQ09ORF9NT0RFCQkweDU2NDk0MTI5CiAjZGVmaW5lIFZJQUZCX1NZTkNfU1VSRkFDRQkJMHg1NjQ5NDEzMAogI2RlZmluZSBWSUFGQl9HRVRfRFJJVkVSX0NBUFMJCTB4NTY0OTQxMzEKQEAgLTE3OSw5ICsxNzcsNyBAQAogCXVuc2lnbmVkIHNob3J0IHNlY29uZF9kZXZfYnBwOwogCS8qIEluZGljYXRlIHdoaWNoIGRldmljZSBhcmUgcHJpbWFyeSBkaXNwbGF5IGRldmljZS4gKi8KIAl1bnNpZ25lZCBpbnQgcHJpbWFyeV9kZXZpY2U7Ci0JLyogSW5kaWNhdGUgd2hpY2ggZGV2aWNlIHdpbGwgc2hvdyB2aWRlby4gb25seSB2YWxpZCBpbiBkdW92aWV3IG1vZGUgKi8KLQl1bnNpZ25lZCBpbnQgdmlkZW9fZGV2aWNlX3N0YXR1czsKLQl1bnNpZ25lZCBpbnQgc3RydWN0X3Jlc2VydmVkWzM0XTsKKwl1bnNpZ25lZCBpbnQgc3RydWN0X3Jlc2VydmVkWzM1XTsKIAlzdHJ1Y3QgdmlhZmJfaW9jdGxfbGNkX2F0dHJpYnV0ZSBsY2RfYXR0cmlidXRlczsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5jIGIvZHJpdmVycy92aWRlby92aWEvbGNkLmMKaW5kZXggNzhjNmIzMy4uZTNlNTk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvbGNkLmMKQEAgLTIwNywxMyArMjA3LDEzIEBACiAKIGludCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKIHsKLQl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CisJdmlhcGFyaW5mby0+c2hhcmVkLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CiAJaWYgKHZpYWZiX2x2ZHNfaWRlbnRpZnlfdnQxNjM2KCkpIHsKIAkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTwogCQkJICAiRm91bmQgVklBIFZUMTYzNiBMVkRTIG9uIHBvcnQgaTJjIDB4MzEgXG4iKTsKIAl9IGVsc2UgewotCQl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBHUElPUE9SVElOREVYOworCQl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CiAJCWlmICh2aWFmYl9sdmRzX2lkZW50aWZ5X3Z0MTYzNigpKSB7CiAJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmkyY19wb3J0ID0KIAkJCQlHUElPUE9SVElOREVYOwpAQCAtNDcwLDcgKzQ3MCw3IEBACiB7CiAJdTggZGF0YTsKIAotCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CisJdmlhcGFyaW5mby0+c2hhcmVkLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBHUElPUE9SVElOREVYOwogCXZpYWZiX2kyY19yZWFkYnl0ZSgodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CiAJICAgIGx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9zbGF2ZV9hZGRyLAogCQkJKHU4KSBpbmRleCwgJmRhdGEpOwpAQCAtOTUyLDEzICs5NTIsMTAgQEAKIAlpbnQgdmlkZW9faW5kZXggPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplOwogCWludCBzZXRfaWdhID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKIAlpbnQgbW9kZV9icHAgPSBwbHZkc19zZXR0aW5nX2luZm8tPmJwcDsKLQlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtID0gMDsKLQlpbnQgcmVnX3ZhbHVlID0gMDsKIAlpbnQgc2V0X2hyZXMsIHNldF92cmVzOwogCWludCBwYW5lbF9ocmVzLCBwYW5lbF92cmVzOwogCXUzMiBwbGxfRF9OOwogCWludCBvZmZzZXQ7Ci0Jc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOwogCXN0cnVjdCBkaXNwbGF5X3RpbWluZyBtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWc7CiAJc3RydWN0IGNydF9tb2RlX3RhYmxlICpwYW5lbF9jcnRfdGFibGUgPSBOVUxMOwogCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsID0gTlVMTDsKQEAgLTEwMzgsMTYgKzEwMzUsMTEgQEAKIAkJfQogCiAJCS8qIE9mZnNldCBmb3Igc2ltdWx0YW5lb3VzICovCi0JCXJlZ192YWx1ZSA9IG9mZnNldDsKLQkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnX251bTsKLQkJcmVnID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnOwotCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCXZpYWZiX3NldF9zZWNvbmRhcnlfcGl0Y2gob2Zmc2V0IDw8IDMpOwogCQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9sb2FkX3JlZyEhXG4iKTsKIAkJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoc2V0X2hyZXMsIDQsIElHQTIpOwogCQkvKiBGZXRjaCBjb3VudCBmb3Igc2ltdWx0YW5lb3VzICovCiAJfSBlbHNlIHsJCS8qIFNBTU0gKi8KLQkJLyogT2Zmc2V0IGZvciBJR0EyIG9ubHkgKi8KLQkJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKHNldF9ocmVzLCBtb2RlX2JwcCAvIDgsIHNldF9pZ2EpOwogCQkvKiBGZXRjaCBjb3VudCBmb3IgSUdBMiBvbmx5ICovCiAJCXZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKHNldF9ocmVzLCBtb2RlX2JwcCAvIDgsIHNldF9pZ2EpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oIGIvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaAppbmRleCAyZTEyNTRkLi43Y2QwM2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKQEAgLTE2Nyw2ICsxNjcsMTAgQEAKICNkZWZpbmUgU1I0QiAgICAweDRCCiAjZGVmaW5lIFNSNEMgICAgMHg0QwogI2RlZmluZSBTUjUyICAgIDB4NTIKKyNkZWZpbmUgU1I1NwkweDU3CisjZGVmaW5lIFNSNTgJMHg1OAorI2RlZmluZSBTUjU5CTB4NTkKKyNkZWZpbmUgU1I1RCAgICAweDVECiAjZGVmaW5lIFNSNUUgICAgMHg1RQogI2RlZmluZSBTUjY1ICAgIDB4NjUKIApAQCAtOTY2LDYgKzk3MCwxMDAgQEAKICNkZWZpbmUgQ1g3MDBfMjk3XzUwME0gICAgMHgwMENFMDQwMwogI2RlZmluZSBDWDcwMF8xMjJfNjE0TSAgICAweDAwODcwODAyCiAKKy8qIFBMTCBmb3IgVlg4NTUgKi8KKyNkZWZpbmUgVlg4NTVfMjJfMDAwTSAgICAgMHgwMDdCMTAwNQorI2RlZmluZSBWWDg1NV8yNV8xNzVNICAgICAweDAwOEQxMDA1CisjZGVmaW5lIFZYODU1XzI2XzcxOU0gICAgIDB4MDA5NjEwMDUKKyNkZWZpbmUgVlg4NTVfMjZfODgwTSAgICAgMHgwMDk2MTAwNQorI2RlZmluZSBWWDg1NV8yN18wMDBNICAgICAweDAwOTcxMDA1CisjZGVmaW5lIFZYODU1XzI5XzU4MU0gICAgIDB4MDBBNTEwMDUKKyNkZWZpbmUgVlg4NTVfMjlfODI5TSAgICAgMHgwMDY0MTAwMworI2RlZmluZSBWWDg1NV8zMV80OTBNICAgICAweDAwQjAxMDA1CisjZGVmaW5lIFZYODU1XzMxXzUwME0gICAgIDB4MDBCMDEwMDUKKyNkZWZpbmUgVlg4NTVfMzFfNzI4TSAgICAgMHgwMDhFMTAwNAorI2RlZmluZSBWWDg1NV8zMl82NjhNICAgICAweDAwOTIxMDA0CisjZGVmaW5lIFZYODU1XzM2XzAwME0gICAgIDB4MDBBMTEwMDQKKyNkZWZpbmUgVlg4NTVfNDBfMDAwTSAgICAgMHgwMDcwMEMwNQorI2RlZmluZSBWWDg1NV80MV8yOTFNICAgICAweDAwNzMwQzA1CisjZGVmaW5lIFZYODU1XzQzXzE2M00gICAgIDB4MDA3OTBDMDUKKyNkZWZpbmUgVlg4NTVfNDVfMjUwTSAgICAgMHgwMDdGMEMwNSAgICAgIC8qIDQ1LjQ2TUh6ICovCisjZGVmaW5lIFZYODU1XzQ2XzAwME0gICAgIDB4MDA2NzBDMDQKKyNkZWZpbmUgVlg4NTVfNDZfOTk2TSAgICAgMHgwMDY5MEMwNAorI2RlZmluZSBWWDg1NV80OF8wMDBNICAgICAweDAwODYwQzA1CisjZGVmaW5lIFZYODU1XzQ4Xzg3NU0gICAgIDB4MDA4OTBDMDUKKyNkZWZpbmUgVlg4NTVfNDlfNTAwTSAgICAgMHgwMDUzMEMwMworI2RlZmluZSBWWDg1NV81Ml80MDZNICAgICAweDAwNTgwQzAzCisjZGVmaW5lIFZYODU1XzUyXzk3N00gICAgIDB4MDA5NDBDMDUKKyNkZWZpbmUgVlg4NTVfNTZfMjUwTSAgICAgMHgwMDlEMEMwNQorI2RlZmluZSBWWDg1NV82MF80NjZNICAgICAweDAwQTkwQzA1CisjZGVmaW5lIFZYODU1XzYxXzUwME0gICAgIDB4MDBBQzBDMDUKKyNkZWZpbmUgVlg4NTVfNjVfMDAwTSAgICAgMHgwMDZEMEMwMworI2RlZmluZSBWWDg1NV82NV8xNzhNICAgICAweDAwQjYwQzA1CisjZGVmaW5lIFZYODU1XzY2Xzc1ME0gICAgIDB4MDA3MDBDMDMgICAgLyo2Ny4xMTZNSHogKi8KKyNkZWZpbmUgVlg4NTVfNjdfMjk1TSAgICAgMHgwMEJDMEMwNQorI2RlZmluZSBWWDg1NV82OF8xNzlNICAgICAweDAwQkYwQzA1CisjZGVmaW5lIFZYODU1XzY4XzM2OU0gICAgIDB4MDBCRjBDMDUKKyNkZWZpbmUgVlg4NTVfNjlfOTI0TSAgICAgMHgwMEMzMEMwNQorI2RlZmluZSBWWDg1NV83MF8xNTlNICAgICAweDAwQzMwQzA1CisjZGVmaW5lIFZYODU1XzcyXzAwME0gICAgIDB4MDBBMTBDMDQKKyNkZWZpbmUgVlg4NTVfNzNfMDIzTSAgICAgMHgwMENDMEMwNQorI2RlZmluZSBWWDg1NV83NF80ODFNICAgICAweDAwRDEwQzA1CisjZGVmaW5lIFZYODU1Xzc4Xzc1ME0gICAgIDB4MDA2RTA4MDUKKyNkZWZpbmUgVlg4NTVfNzlfNDY2TSAgICAgMHgwMDZGMDgwNQorI2RlZmluZSBWWDg1NV84MF8xMzZNICAgICAweDAwNzAwODA1CisjZGVmaW5lIFZYODU1XzgxXzYyN00gICAgIDB4MDA3MjA4MDUKKyNkZWZpbmUgVlg4NTVfODNfMzc1TSAgICAgMHgwMDc1MDgwNQorI2RlZmluZSBWWDg1NV84M181MjdNICAgICAweDAwNzUwODA1CisjZGVmaW5lIFZYODU1XzgzXzk1ME0gICAgIDB4MDA3NTA4MDUKKyNkZWZpbmUgVlg4NTVfODRfNTM3TSAgICAgMHgwMDc2MDgwNQorI2RlZmluZSBWWDg1NV84NF83NTBNICAgICAweDAwNzYwODA1ICAgICAvKiA4NC41MzdNaHogKi8KKyNkZWZpbmUgVlg4NTVfODVfNTAwTSAgICAgMHgwMDc2MDgwNSAgICAgICAgLyogODUuOTA5MDgwIE1IeiovCisjZGVmaW5lIFZYODU1Xzg1Xzg2ME0gICAgIDB4MDA3NjA4MDUKKyNkZWZpbmUgVlg4NTVfODVfOTA5TSAgICAgMHgwMDc2MDgwNQorI2RlZmluZSBWWDg1NV84OF83NTBNICAgICAweDAwN0MwODA1CisjZGVmaW5lIFZYODU1Xzg5XzQ4OU0gICAgIDB4MDA3RDA4MDUKKyNkZWZpbmUgVlg4NTVfOTRfNTAwTSAgICAgMHgwMDg0MDgwNQorI2RlZmluZSBWWDg1NV85Nl82NDhNICAgICAweDAwODcwODA1CisjZGVmaW5lIFZYODU1Xzk3Xzc1ME0gICAgIDB4MDA4OTA4MDUKKyNkZWZpbmUgVlg4NTVfMTAxXzAwME0gICAgMHgwMDhEMDgwNQorI2RlZmluZSBWWDg1NV8xMDZfNTAwTSAgICAweDAwOTUwODA1CisjZGVmaW5lIFZYODU1XzEwOF8wMDBNICAgIDB4MDA5NzA4MDUKKyNkZWZpbmUgVlg4NTVfMTEwXzEyNU0gICAgMHgwMDk5MDgwNQorI2RlZmluZSBWWDg1NV8xMTJfMDAwTSAgICAweDAwOUQwODA1CisjZGVmaW5lIFZYODU1XzExM18zMDlNICAgIDB4MDA5RjA4MDUKKyNkZWZpbmUgVlg4NTVfMTE1XzAwME0gICAgMHgwMEExMDgwNQorI2RlZmluZSBWWDg1NV8xMThfODQwTSAgICAweDAwQTYwODA1CisjZGVmaW5lIFZYODU1XzExOV8wMDBNICAgIDB4MDBBNzA4MDUKKyNkZWZpbmUgVlg4NTVfMTIxXzc1ME0gICAgMHgwMEFBMDgwNSAgICAgICAvKiAxMjEuNzA0TUh6ICovCisjZGVmaW5lIFZYODU1XzEyMl82MTRNICAgIDB4MDBBQzA4MDUKKyNkZWZpbmUgVlg4NTVfMTI2XzI2Nk0gICAgMHgwMEIxMDgwNQorI2RlZmluZSBWWDg1NV8xMzBfMjUwTSAgICAweDAwQjYwODA1ICAgICAgLyogMTMwLjI1MCAqLworI2RlZmluZSBWWDg1NV8xMzVfMDAwTSAgICAweDAwQkQwODA1CisjZGVmaW5lIFZYODU1XzEzNl83MDBNICAgIDB4MDBCRjA4MDUKKyNkZWZpbmUgVlg4NTVfMTM3Xzc1ME0gICAgMHgwMEMxMDgwNQorI2RlZmluZSBWWDg1NV8xMzhfNDAwTSAgICAweDAwQzIwODA1CisjZGVmaW5lIFZYODU1XzE0NF8zMDBNICAgIDB4MDBDQTA4MDUKKyNkZWZpbmUgVlg4NTVfMTQ2Xzc2ME0gICAgMHgwMENFMDgwNQorI2RlZmluZSBWWDg1NV8xNDhfNTAwTQkgIDB4MDBEMDA4MDUKKyNkZWZpbmUgVlg4NTVfMTUzXzkyME0gICAgMHgwMDU0MDQwMgorI2RlZmluZSBWWDg1NV8xNTZfMDAwTSAgICAweDAwNkMwNDA1CisjZGVmaW5lIFZYODU1XzE1Nl84NjdNICAgIDB4MDA2RTA0MDUKKyNkZWZpbmUgVlg4NTVfMTU3XzUwME0gICAgMHgwMDZFMDQwNQorI2RlZmluZSBWWDg1NV8xNjJfMDAwTSAgICAweDAwNzEwNDA1CisjZGVmaW5lIFZYODU1XzE3Ml83OThNICAgIDB4MDA3OTA0MDUKKyNkZWZpbmUgVlg4NTVfMTg3XzAwME0gICAgMHgwMDgzMDQwNQorI2RlZmluZSBWWDg1NV8xOTNfMjk1TSAgICAweDAwODcwNDA1CisjZGVmaW5lIFZYODU1XzIwMl81MDBNICAgIDB4MDA4RTA0MDUKKyNkZWZpbmUgVlg4NTVfMjA0XzAwME0gICAgMHgwMDhGMDQwNQorI2RlZmluZSBWWDg1NV8yMThfNTAwTSAgICAweDAwOTkwNDA1CisjZGVmaW5lIFZYODU1XzIyOV81MDBNICAgIDB4MDBBMTA0MDUKKyNkZWZpbmUgVlg4NTVfMjM0XzAwME0gICAgMHgwMEE0MDQwNQorI2RlZmluZSBWWDg1NV8yNjdfMjUwTSAgICAweDAwQkIwNDA1CisjZGVmaW5lIFZYODU1XzI5N181MDBNICAgIDB4MDBEMDA0MDUKKyNkZWZpbmUgVlg4NTVfMzM5XzUwME0gICAgMHgwMDc3MDAwNQorI2RlZmluZSBWWDg1NV8zNDBfNzcyTSAgICAweDAwNzcwMDA1CisKKwogLyogRGVmaW5pdGlvbiBDUlRDIFRpbWluZyBJbmRleCAqLwogI2RlZmluZSBIX1RPVEFMX0lOREVYICAgICAgICAgICAgICAgMAogI2RlZmluZSBIX0FERFJfSU5ERVggICAgICAgICAgICAgICAgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5jCmluZGV4IDBmM2VkNGUuLjE1NTQzZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAltbTFbMF0gPSBpbmRleDsKIAltc2dzWzBdLmxlbiA9IDE7IG1zZ3NbMV0ubGVuID0gMTsKIAltc2dzWzBdLmJ1ZiA9IG1tMTsgbXNnc1sxXS5idWYgPSBwZGF0YTsKLQlpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPmkyY19zdHVmZi5hZGFwdGVyLCBtc2dzLCAyKTsKKwlpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPnNoYXJlZC0+aTJjX3N0dWZmLmFkYXB0ZXIsIG1zZ3MsIDIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTEsNyArMTExLDcgQEAKIAltc2dzLmFkZHIgPSBzbGF2ZV9hZGRyIC8gMjsKIAltc2dzLmxlbiA9IDI7CiAJbXNncy5idWYgPSBtc2c7Ci0JcmV0dXJuIGkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+aTJjX3N0dWZmLmFkYXB0ZXIsICZtc2dzLCAxKTsKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKCZ2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5hZGFwdGVyLCAmbXNncywgMSk7CiB9CiAKIGludCB2aWFmYl9pMmNfcmVhZGJ5dGVzKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKQpAQCAtMTI1LDUzICsxMjUsNTMgQEAKIAltbTFbMF0gPSBpbmRleDsKIAltc2dzWzBdLmxlbiA9IDE7IG1zZ3NbMV0ubGVuID0gYnVmZl9sZW47CiAJbXNnc1swXS5idWYgPSBtbTE7IG1zZ3NbMV0uYnVmID0gYnVmZjsKLQlpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPmkyY19zdHVmZi5hZGFwdGVyLCBtc2dzLCAyKTsKKwlpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPnNoYXJlZC0+aTJjX3N0dWZmLmFkYXB0ZXIsIG1zZ3MsIDIpOwogCXJldHVybiAwOwogfQogCiBpbnQgdmlhZmJfY3JlYXRlX2kyY19idXModm9pZCAqdmlhcGFyKQogewogCWludCByZXQ7Ci0Jc3RydWN0IHZpYWZiX3BhciAqcGFyID0gKHN0cnVjdCB2aWFmYl9wYXIgKil2aWFwYXI7CisJc3RydWN0IHZpYV9pMmNfc3R1ZmYgKmkyY19zdHVmZiA9CisJCSYoKHN0cnVjdCB2aWFmYl9wYXIgKil2aWFwYXIpLT5zaGFyZWQtPmkyY19zdHVmZjsKIAotCXN0cmNweShwYXItPmkyY19zdHVmZi5hZGFwdGVyLm5hbWUsICJ2aWFfaTJjIik7Ci0JcGFyLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSAweDA7Ci0JcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOwotCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuaWQgPSAweDAxRkZGRjsKLQlwYXItPmkyY19zdHVmZi5hZGFwdGVyLmNsYXNzID0gMDsKLQlwYXItPmkyY19zdHVmZi5hZGFwdGVyLmFsZ29fZGF0YSA9ICZwYXItPmkyY19zdHVmZi5hbGdvOwotCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuZGV2LnBhcmVudCA9IE5VTEw7Ci0JcGFyLT5pMmNfc3R1ZmYuYWxnby5zZXRzZGEgPSB2aWFfaTJjX3NldHNkYTsKLQlwYXItPmkyY19zdHVmZi5hbGdvLnNldHNjbCA9IHZpYV9pMmNfc2V0c2NsOwotCXBhci0+aTJjX3N0dWZmLmFsZ28uZ2V0c2RhID0gdmlhX2kyY19nZXRzZGE7Ci0JcGFyLT5pMmNfc3R1ZmYuYWxnby5nZXRzY2wgPSB2aWFfaTJjX2dldHNjbDsKLQlwYXItPmkyY19zdHVmZi5hbGdvLnVkZWxheSA9IDQwOwotCXBhci0+aTJjX3N0dWZmLmFsZ28udGltZW91dCA9IDIwOwotCXBhci0+aTJjX3N0dWZmLmFsZ28uZGF0YSA9ICZwYXItPmkyY19zdHVmZjsKKwlzdHJjcHkoaTJjX3N0dWZmLT5hZGFwdGVyLm5hbWUsICJ2aWFfaTJjIik7CisJaTJjX3N0dWZmLT5pMmNfcG9ydCA9IDB4MDsKKwlpMmNfc3R1ZmYtPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKKwlpMmNfc3R1ZmYtPmFkYXB0ZXIuaWQgPSAweDAxRkZGRjsKKwlpMmNfc3R1ZmYtPmFkYXB0ZXIuY2xhc3MgPSAwOworCWkyY19zdHVmZi0+YWRhcHRlci5hbGdvX2RhdGEgPSAmaTJjX3N0dWZmLT5hbGdvOworCWkyY19zdHVmZi0+YWRhcHRlci5kZXYucGFyZW50ID0gTlVMTDsKKwlpMmNfc3R1ZmYtPmFsZ28uc2V0c2RhID0gdmlhX2kyY19zZXRzZGE7CisJaTJjX3N0dWZmLT5hbGdvLnNldHNjbCA9IHZpYV9pMmNfc2V0c2NsOworCWkyY19zdHVmZi0+YWxnby5nZXRzZGEgPSB2aWFfaTJjX2dldHNkYTsKKwlpMmNfc3R1ZmYtPmFsZ28uZ2V0c2NsID0gdmlhX2kyY19nZXRzY2w7CisJaTJjX3N0dWZmLT5hbGdvLnVkZWxheSA9IDQwOworCWkyY19zdHVmZi0+YWxnby50aW1lb3V0ID0gMjA7CisJaTJjX3N0dWZmLT5hbGdvLmRhdGEgPSBpMmNfc3R1ZmY7CiAKLQlpMmNfc2V0X2FkYXBkYXRhKCZwYXItPmkyY19zdHVmZi5hZGFwdGVyLCAmcGFyLT5pMmNfc3R1ZmYpOworCWkyY19zZXRfYWRhcGRhdGEoJmkyY19zdHVmZi0+YWRhcHRlciwgaTJjX3N0dWZmKTsKIAogCS8qIFJhaXNlIFNDTCBhbmQgU0RBICovCi0JcGFyLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7Ci0JdmlhX2kyY19zZXRzZGEoJnBhci0+aTJjX3N0dWZmLCAxKTsKLQl2aWFfaTJjX3NldHNjbCgmcGFyLT5pMmNfc3R1ZmYsIDEpOworCWkyY19zdHVmZi0+aTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CisJdmlhX2kyY19zZXRzZGEoaTJjX3N0dWZmLCAxKTsKKwl2aWFfaTJjX3NldHNjbChpMmNfc3R1ZmYsIDEpOwogCi0JcGFyLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBHUElPUE9SVElOREVYOwotCXZpYV9pMmNfc2V0c2RhKCZwYXItPmkyY19zdHVmZiwgMSk7Ci0JdmlhX2kyY19zZXRzY2woJnBhci0+aTJjX3N0dWZmLCAxKTsKKwlpMmNfc3R1ZmYtPmkyY19wb3J0ID0gR1BJT1BPUlRJTkRFWDsKKwl2aWFfaTJjX3NldHNkYShpMmNfc3R1ZmYsIDEpOworCXZpYV9pMmNfc2V0c2NsKGkyY19zdHVmZiwgMSk7CiAJdWRlbGF5KDIwKTsKIAotCXJldCA9IGkyY19iaXRfYWRkX2J1cygmcGFyLT5pMmNfc3R1ZmYuYWRhcHRlcik7CisJcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZpMmNfc3R1ZmYtPmFkYXB0ZXIpOwogCWlmIChyZXQgPT0gMCkKLQkJREVCVUdfTVNHKCJJMkMgYnVzICVzIHJlZ2lzdGVyZWQuXG4iLAotCQlwYXItPmkyY19zdHVmZi5hZGFwdGVyLm5hbWUpOworCQlERUJVR19NU0coIkkyQyBidXMgJXMgcmVnaXN0ZXJlZC5cbiIsIGkyY19zdHVmZi0+YWRhcHRlci5uYW1lKTsKIAllbHNlCiAJCURFQlVHX01TRygiRmFpbGVkIHRvIHJlZ2lzdGVyIEkyQyBidXMgJXMuXG4iLAotCQkJcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5uYW1lKTsKKwkJCWkyY19zdHVmZi0+YWRhcHRlci5uYW1lKTsKIAlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHZpYWZiX2RlbGV0ZV9pMmNfYnVzcyh2b2lkICpwYXIpCiB7Ci0JaTJjX2RlbF9hZGFwdGVyKCYoKHN0cnVjdCB2aWFmYl9wYXIgKilwYXIpLT5pMmNfc3R1ZmYuYWRhcHRlcik7CisJaTJjX2RlbF9hZGFwdGVyKCYoKHN0cnVjdCB2aWFmYl9wYXIgKilwYXIpLT5zaGFyZWQtPmkyY19zdHVmZi5hZGFwdGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCmluZGV4IDcyODMzZjMuLjU2ZWM2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwpAQCAtMjAsMTEgKzIwLDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2RlZmluZSBfTUFTVEVSX0ZJTEUKIAogI2luY2x1ZGUgImdsb2JhbC5oIgogCi1zdGF0aWMgaW50IE1BWF9DVVJTID0gMzI7CiBzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGRlZmF1bHRfdmFyOwogc3RhdGljIGNoYXIgKnZpYWZiX25hbWUgPSAiVmlhIjsKIHN0YXRpYyB1MzIgcHNldWRvX3BhbFsxN107CkBAIC0zMywxMiArMzQsMTEgQEAKIHN0YXRpYyBjaGFyICp2aWFmYl9tb2RlID0gIjY0MHg0ODAiOwogc3RhdGljIGNoYXIgKnZpYWZiX21vZGUxID0gIjY0MHg0ODAiOwogCitzdGF0aWMgaW50IHZpYWZiX2FjY2VsID0gMTsKKwogLyogQWRkZWQgZm9yIHNwZWNpZnlpbmcgYWN0aXZlIGRldmljZXMuKi8KIGNoYXIgKnZpYWZiX2FjdGl2ZV9kZXYgPSAiIjsKIAotLyogQWRkZWQgZm9yIHNwZWNpZnlpbmcgdmlkZW8gb24gZGV2aWNlcy4qLwotY2hhciAqdmlhZmJfdmlkZW9fZGV2ID0gIiI7Ci0KIC8qQWRkZWQgZm9yIHNwZWNpZnkgbGNkIG91dHB1dCBwb3J0Ki8KIGNoYXIgKnZpYWZiX2xjZF9wb3J0ID0gIiI7CiBjaGFyICp2aWFmYl9kdmlfcG9ydCA9ICIiOwpAQCAtNTAsNzEgKzUwLDIwIEBACiAJKnNlY192YXIpOwogc3RhdGljIHZvaWQgcmV0cmlldmVfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcKIAkqc2V0dGluZ19pbmZvKTsKLXN0YXRpYyB2b2lkIHZpYWZiX3NldF92aWRlb19kZXZpY2UodTMyIHZpZGVvX2Rldl9pbmZvKTsKLXN0YXRpYyB2b2lkIHZpYWZiX2dldF92aWRlb19kZXZpY2UodTMyICp2aWRlb19kZXZfaW5mbyk7Ci0KLS8qIE1vZGUgaW5mb3JtYXRpb24gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlhZmJfbW9kZWluZm8gdmlhZmJfbW9kZW50cnlbXSA9IHsKLQl7NDgwLCA2NDAsIFZJQV9SRVNfNDgwWDY0MH0sCi0JezY0MCwgNDgwLCBWSUFfUkVTXzY0MFg0ODB9LAotCXs4MDAsIDQ4MCwgVklBX1JFU184MDBYNDgwfSwKLQl7ODAwLCA2MDAsIFZJQV9SRVNfODAwWDYwMH0sCi0JezEwMjQsIDc2OCwgVklBX1JFU18xMDI0WDc2OH0sCi0JezExNTIsIDg2NCwgVklBX1JFU18xMTUyWDg2NH0sCi0JezEyODAsIDEwMjQsIFZJQV9SRVNfMTI4MFgxMDI0fSwKLQl7MTYwMCwgMTIwMCwgVklBX1JFU18xNjAwWDEyMDB9LAotCXsxNDQwLCAxMDUwLCBWSUFfUkVTXzE0NDBYMTA1MH0sCi0JezEyODAsIDc2OCwgVklBX1JFU18xMjgwWDc2OCx9LAotCXsxMjgwLCA4MDAsIFZJQV9SRVNfMTI4MFg4MDB9LAotCXsxMjgwLCA5NjAsIFZJQV9SRVNfMTI4MFg5NjB9LAotCXsxOTIwLCAxNDQwLCBWSUFfUkVTXzE5MjBYMTQ0MH0sCi0Jezg0OCwgNDgwLCBWSUFfUkVTXzg0OFg0ODB9LAotCXsxNDAwLCAxMDUwLCBWSUFfUkVTXzE0MDBYMTA1MH0sCi0JezcyMCwgNDgwLCBWSUFfUkVTXzcyMFg0ODB9LAotCXs3MjAsIDU3NiwgVklBX1JFU183MjBYNTc2fSwKLQl7MTAyNCwgNTEyLCBWSUFfUkVTXzEwMjRYNTEyfSwKLQl7MTAyNCwgNTc2LCBWSUFfUkVTXzEwMjRYNTc2fSwKLQl7MTAyNCwgNjAwLCBWSUFfUkVTXzEwMjRYNjAwfSwKLQl7MTI4MCwgNzIwLCBWSUFfUkVTXzEyODBYNzIwfSwKLQl7MTkyMCwgMTA4MCwgVklBX1JFU18xOTIwWDEwODB9LAotCXsxMzY2LCA3NjgsIFZJQV9SRVNfMTM2OFg3Njh9LAotCXsxNjgwLCAxMDUwLCBWSUFfUkVTXzE2ODBYMTA1MH0sCi0Jezk2MCwgNjAwLCBWSUFfUkVTXzk2MFg2MDB9LAotCXsxMDAwLCA2MDAsIFZJQV9SRVNfMTAwMFg2MDB9LAotCXsxMDI0LCA1NzYsIFZJQV9SRVNfMTAyNFg1NzZ9LAotCXsxMDI0LCA2MDAsIFZJQV9SRVNfMTAyNFg2MDB9LAotCXsxMDg4LCA2MTIsIFZJQV9SRVNfMTA4OFg2MTJ9LAotCXsxMTUyLCA3MjAsIFZJQV9SRVNfMTE1Mlg3MjB9LAotCXsxMjAwLCA3MjAsIFZJQV9SRVNfMTIwMFg3MjB9LAotCXsxMjgwLCA2MDAsIFZJQV9SRVNfMTI4MFg2MDB9LAotCXsxMzYwLCA3NjgsIFZJQV9SRVNfMTM2MFg3Njh9LAotCXsxNDQwLCA5MDAsIFZJQV9SRVNfMTQ0MFg5MDB9LAotCXsxNjAwLCA5MDAsIFZJQV9SRVNfMTYwMFg5MDB9LAotCXsxNjAwLCAxMDI0LCBWSUFfUkVTXzE2MDBYMTAyNH0sCi0JezE3OTIsIDEzNDQsIFZJQV9SRVNfMTc5MlgxMzQ0fSwKLQl7MTg1NiwgMTM5MiwgVklBX1JFU18xODU2WDEzOTJ9LAotCXsxOTIwLCAxMjAwLCBWSUFfUkVTXzE5MjBYMTIwMH0sCi0JezIwNDgsIDE1MzYsIFZJQV9SRVNfMjA0OFgxNTM2fSwKLQl7MCwgMCwgVklBX1JFU19JTlZBTElEfQotfTsKIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgdmlhZmJfb3BzOwogCi1zdGF0aWMgaW50IHZpYWZiX3VwZGF0ZV9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIHN0cnVjdCBmYl9pbmZvICppbmZvKQorCitzdGF0aWMgdm9pZCB2aWFmYl91cGRhdGVfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXN0cnVjdCB2aWFmYl9wYXIgKnBwYXI7Ci0JcHBhciA9IGluZm8tPnBhcjsKKwl1MzIgYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwogCi0JREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfdXBkYXRlX2ZpeCFcbiIpOwotCi0JZml4LT52aXN1YWwgPQotCSAgICBwcGFyLT5icHAgPT0gOCA/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0JZml4LT5saW5lX2xlbmd0aCA9IHBwYXItPmxpbmVsZW5ndGg7Ci0KLQlyZXR1cm4gMDsKKwlpbmZvLT5maXgudmlzdWFsID0KKwkJYnBwID09IDggPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOiBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9CisJCSgoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjcpICogYnBwIC8gODsKIH0KIAotCiBzdGF0aWMgdm9pZCB2aWFmYl9zZXR1cF9maXhpbmZvKHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LAogCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhcmluZm8pCiB7CkBAIC0xMjMsOCArNzIsNiBAQAogCiAJZml4LT5zbWVtX3N0YXJ0ID0gdmlhcGFyaW5mby0+ZmJtZW07CiAJZml4LT5zbWVtX2xlbiA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7Ci0JZml4LT5tbWlvX3N0YXJ0ID0gdmlhcGFyaW5mby0+bW1pb19iYXNlOwotCWZpeC0+bW1pb19sZW4gPSB2aWFwYXJpbmZvLT5tbWlvX2xlbjsKIAogCWZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlmaXgtPnR5cGVfYXV4ID0gMDsKQEAgLTE0NywyOCArOTQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmlhZmJfdXBkYXRlX3ZpYWZiX3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgdmlhZmJfcGFyICpwcGFyOwotCi0JcHBhciA9IGluZm8tPnBhcjsKLQlwcGFyLT5icHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0JcHBhci0+bGluZWxlbmd0aCA9ICgoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjcpICogcHBhci0+YnBwIC8gODsKLQlwcGFyLT5ocmVzID0gaW5mby0+dmFyLnhyZXM7Ci0JcHBhci0+dnJlcyA9IGluZm8tPnZhci55cmVzOwotCXBwYXItPnhvZmZzZXQgPSBpbmZvLT52YXIueG9mZnNldDsKLQlwcGFyLT55b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgdmlhZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCXN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCWludCB2bW9kZV9pbmRleCwgaHRvdGFsLCB2dG90YWw7Ci0Jc3RydWN0IHZpYWZiX3BhciAqcHBhcjsKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwcGFyID0gaW5mby0+cGFyOwogCXUzMiBsb25nX3JlZnJlc2g7Ci0Jc3RydWN0IHZpYWZiX3BhciAqcF92aWFmYl9wYXI7Ci0JcHBhciA9IGluZm8tPnBhcjsKLQogCiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfY2hlY2tfdmFyIVxuIik7CiAJLyogU2FuaXR5IGNoZWNrICovCkBAIC0yMTIsMjMgKzE0MywyMSBAQAogCiAJLyogQWRqdXN0IHZhciBhY2NvcmRpbmcgdG8gb3VyIGRyaXZlcidzIG93biB0YWJsZSAqLwogCXZpYWZiX2ZpbGxfdmFyX3RpbWluZ19pbmZvKHZhciwgdmlhZmJfcmVmcmVzaCwgdm1vZGVfaW5kZXgpOwotCi0JLyogVGhpcyBpcyBpbmRlZWQgYSBwYXRjaCBmb3IgVlQzMzUzICovCi0JaWYgKCFpbmZvLT5wYXIpCi0JCXJldHVybiAtMTsKLQlwX3ZpYWZiX3BhciA9IChzdHJ1Y3QgdmlhZmJfcGFyICopaW5mby0+cGFyOwotCWlmIChwX3ZpYWZiX3Bhci0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9WWDgwMCkKLQkJdmFyLT5hY2NlbF9mbGFncyA9IDA7CisJaWYgKGluZm8tPnZhci5hY2NlbF9mbGFncyAmIEZCX0FDQ0VMRl9URVhUICYmCisJCSFwcGFyLT5zaGFyZWQtPmVuZ2luZV9tbWlvKQorCQlpbmZvLT52YXIuYWNjZWxfZmxhZ3MgPSAwOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlhZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXIgPSBpbmZvLT5wYXI7CiAJaW50IHZtb2RlX2luZGV4OwogCWludCB2bW9kZV9pbmRleDEgPSAwOwogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9wYXIhXG4iKTsKIAorCXZpYXBhci0+ZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCk7CiAJdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywKIAkJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgdmlhZmJfcmVmcmVzaCwgMCk7CiAKQEAgLTI1MiwyMSArMTgxLDEyIEBACiAJCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIHZtb2RlX2luZGV4MSwKIAkJCXZpYWZiX3NlY29uZF94cmVzLCB2aWFmYl9zZWNvbmRfeXJlcywgdmlhZmJfYnBwMSk7CiAKLQkJLypXZSBzaG91bGQgc2V0IG1lbW9yeSBvZmZzZXQgYWNjb3JkaW5nIHZpcnR1YWxfeCAqLwotCQkvKkZpeCBtZTpwdXQgdGhpcyBmdW5jdGlvbiBpbnRvIHZpYWZiX3NldG1vZGUgKi8KLQkJdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKGluZm8pOwotCi0JCS8qIFVwZGF0ZSAqKipmYl9wYXIgaW5mb3JtYXRpb24gKi8KLQkJdmlhZmJfdXBkYXRlX3ZpYWZiX3BhcihpbmZvKTsKLQotCQkvKiBVcGRhdGUgb3RoZXIgZml4ZWQgaW5mb3JtYXRpb24gKi8KLQkJdmlhZmJfdXBkYXRlX2ZpeCgmaW5mby0+Zml4LCBpbmZvKTsKKwkJdmlhZmJfdXBkYXRlX2ZpeChpbmZvKTsKIAkJdmlhZmJfYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwotCQkvKiBVcGRhdGUgdmlhZmJfYWNjZWwsIGl0IGlzIG5lY2Vzc2FyeSB0byBvdXIgMkQgYWNjZWxlcmF0ZSAqLwotCQl2aWFmYl9hY2NlbCA9IGluZm8tPnZhci5hY2NlbF9mbGFnczsKLQotCQlpZiAodmlhZmJfYWNjZWwpCi0JCQl2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKKwkJaWYgKGluZm8tPnZhci5hY2NlbF9mbGFncyAmIEZCX0FDQ0VMRl9URVhUKQorCQkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCQllbHNlCisJCQlpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUwMywxMiArNDIzLDcgQEAKIAkgICAgdmFyLT5iaXRzX3Blcl9waXhlbCAvIDE2OwogCiAJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG52aWFmYl9wYW5fZGlzcGxheSxvZmZzZXQgPSVkICIsIG9mZnNldCk7Ci0KLQl2aWFmYl93cml0ZV9yZWdfbWFzaygweDQ4LCAweDNkNCwgKChvZmZzZXQgPj4gMjQpICYgMHgzKSwgMHgzKTsKLQl2aWFmYl93cml0ZV9yZWdfbWFzaygweDM0LCAweDNkNCwgKChvZmZzZXQgPj4gMTYpICYgMHhmZiksIDB4ZmYpOwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4MGMsIDB4M2Q0LCAoKG9mZnNldCA+PiA4KSAmIDB4ZmYpLCAweGZmKTsKLQl2aWFmYl93cml0ZV9yZWdfbWFzaygweDBkLCAweDNkNCwgKG9mZnNldCAmIDB4ZmYpLCAweGZmKTsKLQorCXZpYWZiX3NldF9wcmltYXJ5X2FkZHJlc3Mob2Zmc2V0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTYwLDcgKzQ3NSw2IEBACiAKIAl1MzIgX191c2VyICphcmdwID0gKHUzMiBfX3VzZXIgKikgYXJnOwogCXUzMiBncHUzMjsKLQl1MzIgdmlkZW9fZGV2X2luZm8gPSAwOwogCiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfaW9jdGw6IDB4JVggISFcbiIsIGNtZCk7CiAJbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOwpAQCAtNzkyLDE1ICs3MDYsNiBAQAogCQlpZiAocHV0X3VzZXIoc3RhdGVfaW5mbywgYXJncCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7Ci0JY2FzZSBWSUFGQl9TRVRfVklERU9fREVWSUNFOgotCQlnZXRfdXNlcih2aWRlb19kZXZfaW5mbywgYXJncCk7Ci0JCXZpYWZiX3NldF92aWRlb19kZXZpY2UodmlkZW9fZGV2X2luZm8pOwotCQlicmVhazsKLQljYXNlIFZJQUZCX0dFVF9WSURFT19ERVZJQ0U6Ci0JCXZpYWZiX2dldF92aWRlb19kZXZpY2UoJnZpZGVvX2Rldl9pbmZvKTsKLQkJaWYgKHB1dF91c2VyKHZpZGVvX2Rldl9pbmZvLCBhcmdwKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAljYXNlIFZJQUZCX1NZTkNfU1VSRkFDRToKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAibG9ibyBWSUFGQl9TWU5DX1NVUkZBQ0VcbiIpOwogCQlicmVhazsKQEAgLTg2NiwxMCArNzcxLDEyIEBACiBzdGF0aWMgdm9pZCB2aWFmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAljb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCiB7Ci0JdTMyIGNvbCA9IDAsIHJvcCA9IDA7Ci0JaW50IHBpdGNoOworCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmlhZmJfc2hhcmVkICpzaGFyZWQgPSB2aWFwYXItPnNoYXJlZDsKKwl1MzIgZmdfY29sb3I7CisJdTggcm9wOwogCi0JaWYgKCF2aWFmYl9hY2NlbCkgeworCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIHx8ICFzaGFyZWQtPmh3X2JpdGJsdCkgewogCQljZmJfZmlsbHJlY3QoaW5mbywgcmVjdCk7CiAJCXJldHVybjsKIAl9CkBAIC04NzcsNjggKzc4NCwzMSBAQAogCWlmICghcmVjdC0+d2lkdGggfHwgIXJlY3QtPmhlaWdodCkKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChyZWN0LT5yb3ApIHsKLQljYXNlIFJPUF9YT1I6CisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUikKKwkJZmdfY29sb3IgPSAoKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRlKVtyZWN0LT5jb2xvcl07CisJZWxzZQorCQlmZ19jb2xvciA9IHJlY3QtPmNvbG9yOworCisJaWYgKHJlY3QtPnJvcCA9PSBST1BfWE9SKQogCQlyb3AgPSAweDVBOwotCQlicmVhazsKLQljYXNlIFJPUF9DT1BZOgotCWRlZmF1bHQ6CisJZWxzZQogCQlyb3AgPSAweEYwOwotCQlicmVhazsKLQl9CiAKLQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgODoKLQkJY29sID0gcmVjdC0+Y29sb3I7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlY3QtPmNvbG9yXTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVjdC0+Y29sb3JdOwotCQlicmVhazsKLQl9Ci0KLQkvKiBCaXRCbHQgU291cmNlIEFkZHJlc3MgKi8KLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNQT1MpOwotCS8qIFNvdXJjZSBCYXNlIEFkZHJlc3MgKi8KLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKLQkvKiBEZXN0aW5hdGlvbiBCYXNlIEFkZHJlc3MgKi8KLQl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KLQkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAotCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKLQkvKiBQaXRjaCAqLwotCXBpdGNoID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43OwotCXdyaXRlbChWSUFfUElUQ0hfRU5BQkxFIHwKLQkJICAgKCgocGl0Y2ggKgotCQkgICAgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMykgPj4gMykgfAotCQkgICAgICAoKChwaXRjaCAqIGluZm8tPgotCQkgICAgICB2YXIuYml0c19wZXJfcGl4ZWwgPj4gMykgPj4gMykgPDwgMTYpKSwKLQkJICAgICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOwotCS8qIEJpdEJsdCBEZXN0aW5hdGlvbiBBZGRyZXNzICovCi0Jd3JpdGVsKCgocmVjdC0+ZHkgPDwgMTYpIHwgcmVjdC0+ZHgpLAotCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RQT1MpOwotCS8qIERpbWVuc2lvbjogd2lkdGggJiBoZWlnaHQgKi8KLQl3cml0ZWwoKCgocmVjdC0+aGVpZ2h0IC0gMSkgPDwgMTYpIHwgKHJlY3QtPndpZHRoIC0gMSkpLAotCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOwotCS8qIEZvcmdyb3VuZCBjb2xvciBvciBEZXN0aW5hdGlvbiBjb2xvciAqLwotCXdyaXRlbChjb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0ZHQ09MT1IpOwotCS8qIEdFIENvbW1hbmQgKi8KLQl3cml0ZWwoKDB4MDEgfCAweDIwMDAgfCAocm9wIDw8IDI0KSksCi0JCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKLQorCURFQlVHX01TRyhLRVJOX0RFQlVHICJ2aWFmYiAyRCBlbmdpbmU6IGZpbGxyZWN0XG4iKTsKKwlpZiAoc2hhcmVkLT5od19iaXRibHQoc2hhcmVkLT5lbmdpbmVfbW1pbywgVklBX0JJVEJMVF9GSUxMLAorCQlyZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsCisJCXZpYXBhci0+dnJhbV9hZGRyLCBpbmZvLT5maXgubGluZV9sZW5ndGgsIHJlY3QtPmR4LCByZWN0LT5keSwKKwkJTlVMTCwgMCwgMCwgMCwgMCwgZmdfY29sb3IsIDAsIHJvcCkpCisJCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKIH0KIAogc3RhdGljIHZvaWQgdmlhZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCiAJY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQogewotCXUzMiBkeSA9IGFyZWEtPmR5LCBzeSA9IGFyZWEtPnN5LCBkaXJlY3Rpb24gPSAweDA7Ci0JdTMyIHN4ID0gYXJlYS0+c3gsIGR4ID0gYXJlYS0+ZHgsIHdpZHRoID0gYXJlYS0+d2lkdGg7Ci0JaW50IHBpdGNoOworCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmlhZmJfc2hhcmVkICpzaGFyZWQgPSB2aWFwYXItPnNoYXJlZDsKIAotCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2NvcHlhcmVhISFcbiIpOwotCi0JaWYgKCF2aWFmYl9hY2NlbCkgeworCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIHx8ICFzaGFyZWQtPmh3X2JpdGJsdCkgewogCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7CiAJCXJldHVybjsKIAl9CkBAIC05NDYsMjYzICs4MTYsMTQ4IEBACiAJaWYgKCFhcmVhLT53aWR0aCB8fCAhYXJlYS0+aGVpZ2h0KQogCQlyZXR1cm47CiAKLQlpZiAoc3kgPCBkeSkgewotCQlkeSArPSBhcmVhLT5oZWlnaHQgLSAxOwotCQlzeSArPSBhcmVhLT5oZWlnaHQgLSAxOwotCQlkaXJlY3Rpb24gfD0gMHg0MDAwOwotCX0KLQotCWlmIChzeCA8IGR4KSB7Ci0JCWR4ICs9IHdpZHRoIC0gMTsKLQkJc3ggKz0gd2lkdGggLSAxOwotCQlkaXJlY3Rpb24gfD0gMHg4MDAwOwotCX0KLQotCS8qIFNvdXJjZSBCYXNlIEFkZHJlc3MgKi8KLQl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KLQkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAotCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKLQkvKiBEZXN0aW5hdGlvbiBCYXNlIEFkZHJlc3MgKi8KLQl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KLQkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAotCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKLQkvKiBQaXRjaCAqLwotCXBpdGNoID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43OwotCS8qIFZJQV9QSVRDSF9FTkFCTEUgY2FuIGJlIG9taXR0ZWQgbm93LiAqLwotCXdyaXRlbChWSUFfUElUQ0hfRU5BQkxFIHwKLQkJICAgKCgocGl0Y2ggKgotCQkgICAgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMykgPj4gMykgfCAoKChwaXRjaCAqCi0JCQkJCQkJCWluZm8tPnZhci4KLQkJCQkJCQkJYml0c19wZXJfcGl4ZWwKLQkJCQkJCQkJPj4gMykgPj4gMykKLQkJCQkJCQkgICAgICA8PCAxNikpLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKLQkvKiBCaXRCbHQgU291cmNlIEFkZHJlc3MgKi8KLQl3cml0ZWwoKChzeSA8PCAxNikgfCBzeCksIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7Ci0JLyogQml0Qmx0IERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KLQl3cml0ZWwoKChkeSA8PCAxNikgfCBkeCksIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVFBPUyk7Ci0JLyogRGltZW5zaW9uOiB3aWR0aCAmIGhlaWdodCAqLwotCXdyaXRlbCgoKChhcmVhLT5oZWlnaHQgLSAxKSA8PCAxNikgfCAoYXJlYS0+d2lkdGggLSAxKSksCi0JCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RJTUVOU0lPTik7Ci0JLyogR0UgQ29tbWFuZCAqLwotCXdyaXRlbCgoMHgwMSB8IGRpcmVjdGlvbiB8ICgweENDIDw8IDI0KSksCi0JCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKLQorCURFQlVHX01TRyhLRVJOX0RFQlVHICJ2aWFmYiAyRCBlbmdpbmU6IGNvcHlhcmVhXG4iKTsKKwlpZiAoc2hhcmVkLT5od19iaXRibHQoc2hhcmVkLT5lbmdpbmVfbW1pbywgVklBX0JJVEJMVF9DT0xPUiwKKwkJYXJlYS0+d2lkdGgsIGFyZWEtPmhlaWdodCwgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLAorCQl2aWFwYXItPnZyYW1fYWRkciwgaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCBhcmVhLT5keCwgYXJlYS0+ZHksCisJCU5VTEwsIHZpYXBhci0+dnJhbV9hZGRyLCBpbmZvLT5maXgubGluZV9sZW5ndGgsCisJCWFyZWEtPnN4LCBhcmVhLT5zeSwgMCwgMCwgMCkpCisJCWNmYl9jb3B5YXJlYShpbmZvLCBhcmVhKTsKIH0KIAogc3RhdGljIHZvaWQgdmlhZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAogCWNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCiB7Ci0JdTMyIHNpemUsIGJnX2NvbCA9IDAsIGZnX2NvbCA9IDAsICp1ZGF0YTsKLQlpbnQgaTsKLQlpbnQgcGl0Y2g7CisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCB2aWFmYl9zaGFyZWQgKnNoYXJlZCA9IHZpYXBhci0+c2hhcmVkOworCXUzMiBmZ19jb2xvciA9IDAsIGJnX2NvbG9yID0gMDsKKwl1OCBvcDsKIAotCWlmICghdmlhZmJfYWNjZWwpIHsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCB8fCAhc2hhcmVkLT5od19iaXRibHQgfHwKKwkJKGltYWdlLT5kZXB0aCAhPSAxICYmIGltYWdlLT5kZXB0aCAhPSB2aWFwYXItPmRlcHRoKSkgewogCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKIAkJcmV0dXJuOwogCX0KIAotCXVkYXRhID0gKHUzMiAqKSBpbWFnZS0+ZGF0YTsKKwlpZiAoaW1hZ2UtPmRlcHRoID09IDEpIHsKKwkJb3AgPSBWSUFfQklUQkxUX01PTk87CisJCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKKwkJCWZnX2NvbG9yID0KKwkJCQkoKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRlKVtpbWFnZS0+ZmdfY29sb3JdOworCQkJYmdfY29sb3IgPQorCQkJCSgodTMyICopaW5mby0+cHNldWRvX3BhbGV0dGUpW2ltYWdlLT5iZ19jb2xvcl07CisJCX0gZWxzZSB7CisJCQlmZ19jb2xvciA9IGltYWdlLT5mZ19jb2xvcjsKKwkJCWJnX2NvbG9yID0gaW1hZ2UtPmJnX2NvbG9yOworCQl9CisJfSBlbHNlCisJCW9wID0gVklBX0JJVEJMVF9DT0xPUjsKIAotCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7Ci0JY2FzZSA4OgotCQliZ19jb2wgPSBpbWFnZS0+YmdfY29sb3I7Ci0JCWZnX2NvbCA9IGltYWdlLT5mZ19jb2xvcjsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJYmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKLQkJZmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJYmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKLQkJZmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKLQkJYnJlYWs7Ci0JfQotCXNpemUgPSBpbWFnZS0+d2lkdGggKiBpbWFnZS0+aGVpZ2h0OwotCi0JLyogU291cmNlIEJhc2UgQWRkcmVzcyAqLwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOwotCS8qIERlc3RpbmF0aW9uIEJhc2UgQWRkcmVzcyAqLwotCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQotCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCi0JCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOwotCS8qIFBpdGNoICovCi0JcGl0Y2ggPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjc7Ci0Jd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAotCQkgICAoKChwaXRjaCAqCi0JCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzKSA+PiAzKSB8ICgoKHBpdGNoICoKLQkJCQkJCQkJaW5mby0+dmFyLgotCQkJCQkJCQliaXRzX3Blcl9waXhlbAotCQkJCQkJCQk+PiAzKSA+PiAzKQotCQkJCQkJCSAgICAgIDw8IDE2KSksCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOwotCS8qIEJpdEJsdCBTb3VyY2UgQWRkcmVzcyAqLwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7Ci0JLyogQml0Qmx0IERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KLQl3cml0ZWwoKChpbWFnZS0+ZHkgPDwgMTYpIHwgaW1hZ2UtPmR4KSwKLQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKLQkvKiBEaW1lbnNpb246IHdpZHRoICYgaGVpZ2h0ICovCi0Jd3JpdGVsKCgoKGltYWdlLT5oZWlnaHQgLSAxKSA8PCAxNikgfCAoaW1hZ2UtPndpZHRoIC0gMSkpLAotCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOwotCS8qIGZiIGNvbG9yICovCi0Jd3JpdGVsKGZnX2NvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRkdDT0xPUik7Ci0JLyogYmcgY29sb3IgKi8KLQl3cml0ZWwoYmdfY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19CR0NPTE9SKTsKLQkvKiBHRSBDb21tYW5kICovCi0Jd3JpdGVsKDB4Q0MwMjAxNDIsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSsrKSB7Ci0JCXdyaXRlbCgqdWRhdGEsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfTU1JT19CTFRCQVNFKTsKLQkJdWRhdGErKzsKLQl9Ci0KKwlERUJVR19NU0coS0VSTl9ERUJVRyAidmlhZmIgMkQgZW5naW5lOiBpbWFnZWJsaXRcbiIpOworCWlmIChzaGFyZWQtPmh3X2JpdGJsdChzaGFyZWQtPmVuZ2luZV9tbWlvLCBvcCwKKwkJaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsCisJCXZpYXBhci0+dnJhbV9hZGRyLCBpbmZvLT5maXgubGluZV9sZW5ndGgsIGltYWdlLT5keCwgaW1hZ2UtPmR5LAorCQkodTMyICopaW1hZ2UtPmRhdGEsIDAsIDAsIDAsIDAsIGZnX2NvbG9yLCBiZ19jb2xvciwgMCkpCisJCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwogfQogCiBzdGF0aWMgaW50IHZpYWZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQogewotCXUzMiB0ZW1wLCB4eCwgeXksIGJnX2NvbCA9IDAsIGZnX2NvbCA9IDA7Ci0JaW50IGksIGogPSAwOwotCXN0YXRpYyBpbnQgaHdfY3Vyc29yOwotCXN0cnVjdCB2aWFmYl9wYXIgKnBfdmlhZmJfcGFyOworCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKKwl2b2lkIF9faW9tZW0gKmVuZ2luZSA9IHZpYXBhci0+c2hhcmVkLT5lbmdpbmVfbW1pbzsKKwl1MzIgdGVtcCwgeHgsIHl5LCBiZ19jb2xvciA9IDAsIGZnX2NvbG9yID0gMCwKKwkJY2hpcF9uYW1lID0gdmlhcGFyLT5zaGFyZWQtPmNoaXBfaW5mby5nZnhfY2hpcF9uYW1lOworCWludCBpLCBqID0gMCwgY3VyX3NpemUgPSA2NDsKIAotCWlmICh2aWFmYl9hY2NlbCkKLQkJaHdfY3Vyc29yID0gMTsKLQotCWlmICghdmlhZmJfYWNjZWwpIHsKLQkJaWYgKGh3X2N1cnNvcikgewotCQkJdmlhZmJfc2hvd19od19jdXJzb3IoaW5mbywgSFdfQ3Vyc29yX09GRik7Ci0JCQlod19jdXJzb3IgPSAwOwotCQl9Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmICgoKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5pZ2FfcGF0aCA9PSBJR0EyKQotCSAgICAmJiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpKQorCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIHx8IGluZm8gIT0gdmlhZmJpbmZvKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIFdoZW4gZHVvdmlldyBhbmQgdXNpbmcgbGNkICwgdXNlIHNvZnQgY3Vyc29yICovCi0JaWYgKHZpYWZiX0xDRF9PTiB8fCAoKHN0cnVjdCB2aWFmYl9wYXIgKikoaW5mby0+cGFyKSktPmR1b3ZpZXcpCisJaWYgKGNoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2ICYmIHZpYXBhci0+aWdhX3BhdGggPT0gSUdBMikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT0ZGKTsKLQl2aWFjdXJzb3IgPSAqY3Vyc29yOwogCiAJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVEhPVCkgewotCQl2aWFjdXJzb3IuaG90ID0gY3Vyc29yLT5ob3Q7Ci0JCXRlbXAgPSAoKHZpYWN1cnNvci5ob3QueCkgPDwgMTYpICsgdmlhY3Vyc29yLmhvdC55OwotCQl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX09SRyk7CisJCXRlbXAgPSAoY3Vyc29yLT5ob3QueCA8PCAxNikgKyBjdXJzb3ItPmhvdC55OworCQl3cml0ZWwodGVtcCwgZW5naW5lICsgVklBX1JFR19DVVJTT1JfT1JHKTsKIAl9CiAKIAlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUUE9TKSB7Ci0JCXZpYWN1cnNvci5pbWFnZS5keCA9IGN1cnNvci0+aW1hZ2UuZHg7Ci0JCXZpYWN1cnNvci5pbWFnZS5keSA9IGN1cnNvci0+aW1hZ2UuZHk7CiAJCXl5ID0gY3Vyc29yLT5pbWFnZS5keSAtIGluZm8tPnZhci55b2Zmc2V0OwogCQl4eCA9IGN1cnNvci0+aW1hZ2UuZHggLSBpbmZvLT52YXIueG9mZnNldDsKIAkJdGVtcCA9IHl5ICYgMHhGRkZGOwogCQl0ZW1wIHw9ICh4eCA8PCAxNik7Ci0JCXdyaXRlbCh0ZW1wLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfUE9TKTsKKwkJd3JpdGVsKHRlbXAsIGVuZ2luZSArIFZJQV9SRUdfQ1VSU09SX1BPUyk7CisJfQorCisJaWYgKGN1cnNvci0+aW1hZ2Uud2lkdGggPD0gMzIgJiYgY3Vyc29yLT5pbWFnZS5oZWlnaHQgPD0gMzIpCisJCWN1cl9zaXplID0gMzI7CisJZWxzZSBpZiAoY3Vyc29yLT5pbWFnZS53aWR0aCA8PSA2NCAmJiBjdXJzb3ItPmltYWdlLmhlaWdodCA8PSA2NCkKKwkJY3VyX3NpemUgPSA2NDsKKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlhZmJfY3Vyc29yOiBUaGUgY3Vyc29yIGlzIHRvbyBsYXJnZSAiCisJCQkiJWR4JWQiLCBjdXJzb3ItPmltYWdlLndpZHRoLCBjdXJzb3ItPmltYWdlLmhlaWdodCk7CisJCXJldHVybiAtRU5YSU87CiAJfQogCiAJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFNJWkUpIHsKLQkJdGVtcCA9IHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKLQotCQlpZiAoKGN1cnNvci0+aW1hZ2Uud2lkdGggPD0gMzIpCi0JCSAgICAmJiAoY3Vyc29yLT5pbWFnZS5oZWlnaHQgPD0gMzIpKSB7Ci0JCQlNQVhfQ1VSUyA9IDMyOworCQl0ZW1wID0gcmVhZGwoZW5naW5lICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJCWlmIChjdXJfc2l6ZSA9PSAzMikKIAkJCXRlbXAgfD0gMHgyOwotCQl9IGVsc2UgaWYgKChjdXJzb3ItPmltYWdlLndpZHRoIDw9IDY0KQotCQkJICAgJiYgKGN1cnNvci0+aW1hZ2UuaGVpZ2h0IDw9IDY0KSkgewotCQkJTUFYX0NVUlMgPSA2NDsKLQkJCXRlbXAgJj0gMHhGRkZGRkZGRDsKLQkJfSBlbHNlIHsKLQkJCURFQlVHX01TRyhLRVJOX0lORk8KLQkJCSJUaGUgY3Vyc29yIGltYWdlIGlzIGJpZ2VyIHRoYW4gNjR4NjQgYml0cy4uLlxuIik7Ci0JCQlyZXR1cm4gLUVOWElPOwotCQl9Ci0JCXdyaXRlbCh0ZW1wLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJCWVsc2UKKwkJCXRlbXAgJj0gfjB4MjsKIAotCQl2aWFjdXJzb3IuaW1hZ2UuaGVpZ2h0ID0gY3Vyc29yLT5pbWFnZS5oZWlnaHQ7Ci0JCXZpYWN1cnNvci5pbWFnZS53aWR0aCA9IGN1cnNvci0+aW1hZ2Uud2lkdGg7CisJCXdyaXRlbCh0ZW1wLCBlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKIAl9CiAKIAlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUQ01BUCkgewotCQl2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3IgPSBjdXJzb3ItPmltYWdlLmZnX2NvbG9yOwotCQl2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3IgPSBjdXJzb3ItPmltYWdlLmJnX2NvbG9yOwotCi0JCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7Ci0JCWNhc2UgODoKLQkJY2FzZSAxNjoKLQkJY2FzZSAzMjoKLQkJCWJnX2NvbCA9Ci0JCQkgICAgKDB4RkYgPDwgMjQpIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLnJlZClbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCi0JCQkgICAgMHhGRjAwKSA8PCA4KSB8Ci0JCQkgICAgKChpbmZvLT5jbWFwLmdyZWVuKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKLQkJCSAgICAweEZGMDApIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLmJsdWUpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgotCQkJICAgIDB4RkYwMCkgPj4gOCk7Ci0JCQlmZ19jb2wgPQotCQkJICAgICgweEZGIDw8IDI0KSB8Ci0JCQkgICAgKCgoaW5mby0+Y21hcC5yZWQpW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgotCQkJICAgIDB4RkYwMCkgPDwgOCkgfAotCQkJICAgICgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCi0JCQkgICAgMHhGRjAwKSB8Ci0JCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKLQkJCSAgICAweEZGMDApID4+IDgpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKKwkJZmdfY29sb3IgPSBjdXJzb3ItPmltYWdlLmZnX2NvbG9yOworCQliZ19jb2xvciA9IGN1cnNvci0+aW1hZ2UuYmdfY29sb3I7CisJCWlmIChjaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwIHx8CisJCQljaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwIHx8CisJCQljaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODU1KSB7CisJCQlmZ19jb2xvciA9CisJCQkJKChpbmZvLT5jbWFwLnJlZFtmZ19jb2xvcl0gJiAweEZGQzApIDw8IDE0KSB8CisJCQkJKChpbmZvLT5jbWFwLmdyZWVuW2ZnX2NvbG9yXSAmIDB4RkZDMCkgPDwgNCkgfAorCQkJCSgoaW5mby0+Y21hcC5ibHVlW2ZnX2NvbG9yXSAmIDB4RkZDMCkgPj4gNik7CisJCQliZ19jb2xvciA9CisJCQkJKChpbmZvLT5jbWFwLnJlZFtiZ19jb2xvcl0gJiAweEZGQzApIDw8IDE0KSB8CisJCQkJKChpbmZvLT5jbWFwLmdyZWVuW2JnX2NvbG9yXSAmIDB4RkZDMCkgPDwgNCkgfAorCQkJCSgoaW5mby0+Y21hcC5ibHVlW2JnX2NvbG9yXSAmIDB4RkZDMCkgPj4gNik7CisJCX0gZWxzZSB7CisJCQlmZ19jb2xvciA9CisJCQkJKChpbmZvLT5jbWFwLnJlZFtmZ19jb2xvcl0gJiAweEZGMDApIDw8IDgpIHwKKwkJCQkoaW5mby0+Y21hcC5ncmVlbltmZ19jb2xvcl0gJiAweEZGMDApIHwKKwkJCQkoKGluZm8tPmNtYXAuYmx1ZVtmZ19jb2xvcl0gJiAweEZGMDApID4+IDgpOworCQkJYmdfY29sb3IgPQorCQkJCSgoaW5mby0+Y21hcC5yZWRbYmdfY29sb3JdICYgMHhGRjAwKSA8PCA4KSB8CisJCQkJKGluZm8tPmNtYXAuZ3JlZW5bYmdfY29sb3JdICYgMHhGRjAwKSB8CisJCQkJKChpbmZvLT5jbWFwLmJsdWVbYmdfY29sb3JdICYgMHhGRjAwKSA+PiA4KTsKIAkJfQogCi0JCS8qIFRoaXMgaXMgaW5kZWVkIGEgcGF0Y2ggZm9yIFZUMzMyNC9WVDMzNTMgKi8KLQkJaWYgKCFpbmZvLT5wYXIpCi0JCQlyZXR1cm4gMDsKLQkJcF92aWFmYl9wYXIgPSAoc3RydWN0IHZpYWZiX3BhciAqKWluZm8tPnBhcjsKLQotCQlpZiAoKHBfdmlhZmJfcGFyLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KLQkJCVVOSUNIUk9NRV9DWDcwMCkgfHwKLQkJCSgocF92aWFmYl9wYXItPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PQotCQkJVU5JQ0hST01FX1ZYODAwKSkpIHsKLQkJCWJnX2NvbCA9Ci0JCQkgICAgKCgoaW5mby0+Y21hcC5yZWQpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgotCQkJICAgIDB4RkZDMCkgPDwgMTQpIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLmdyZWVuKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKLQkJCSAgICAweEZGQzApIDw8IDQpIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLmJsdWUpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgotCQkJICAgIDB4RkZDMCkgPj4gNik7Ci0JCQlmZ19jb2wgPQotCQkJICAgICgoKGluZm8tPmNtYXAucmVkKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKLQkJCSAgICAweEZGQzApIDw8IDE0KSB8Ci0JCQkgICAgKCgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCi0JCQkgICAgMHhGRkMwKSA8PCA0KSB8Ci0JCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKLQkJCSAgICAweEZGQzApID4+IDYpOwotCQl9Ci0KLQkJd3JpdGVsKGJnX2NvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX0JHKTsKLQkJd3JpdGVsKGZnX2NvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX0ZHKTsKKwkJd3JpdGVsKGJnX2NvbG9yLCBlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9CRyk7CisJCXdyaXRlbChmZ19jb2xvciwgZW5naW5lICsgVklBX1JFR19DVVJTT1JfRkcpOwogCX0KIAogCWlmIChjdXJzb3ItPnNldCAmIEZCX0NVUl9TRVRTSEFQRSkgewogCQlzdHJ1Y3QgewotCQkJdTggZGF0YVtDVVJTT1JfU0laRSAvIDhdOwotCQkJdTMyIGJha1tDVVJTT1JfU0laRSAvIDMyXTsKKwkJCXU4IGRhdGFbQ1VSU09SX1NJWkVdOworCQkJdTMyIGJha1tDVVJTT1JfU0laRSAvIDRdOwogCQl9ICpjcl9kYXRhID0ga3phbGxvYyhzaXplb2YoKmNyX2RhdGEpLCBHRlBfQVRPTUlDKTsKLQkJaW50IHNpemUgPQotCQkgICAgKCh2aWFjdXJzb3IuaW1hZ2Uud2lkdGggKyA3KSA+PiAzKSAqCi0JCSAgICB2aWFjdXJzb3IuaW1hZ2UuaGVpZ2h0OworCQlpbnQgc2l6ZSA9ICgoY3Vyc29yLT5pbWFnZS53aWR0aCArIDcpID4+IDMpICoKKwkJCWN1cnNvci0+aW1hZ2UuaGVpZ2h0OwogCi0JCWlmIChjcl9kYXRhID09IE5VTEwpCi0JCQlnb3RvIG91dDsKKwkJaWYgKCFjcl9kYXRhKQorCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJaWYgKE1BWF9DVVJTID09IDMyKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKENVUlNPUl9TSVpFIC8gMzIpOyBpKyspIHsKKwkJaWYgKGN1cl9zaXplID09IDMyKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgKENVUlNPUl9TSVpFIC8gNCk7IGkrKykgewogCQkJCWNyX2RhdGEtPmJha1tpXSA9IDB4MDsKIAkJCQljcl9kYXRhLT5iYWtbaSArIDFdID0gMHhGRkZGRkZGRjsKIAkJCQlpICs9IDE7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoTUFYX0NVUlMgPT0gNjQpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCAoQ1VSU09SX1NJWkUgLyAzMik7IGkrKykgeworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IChDVVJTT1JfU0laRSAvIDQpOyBpKyspIHsKIAkJCQljcl9kYXRhLT5iYWtbaV0gPSAweDA7CiAJCQkJY3JfZGF0YS0+YmFrW2kgKyAxXSA9IDB4MDsKIAkJCQljcl9kYXRhLT5iYWtbaSArIDJdID0gMHhGRkZGRkZGRjsKQEAgLTEyMTEsMjcgKzk2NiwyNyBAQAogCQkJfQogCQl9CiAKLQkJc3dpdGNoICh2aWFjdXJzb3Iucm9wKSB7CisJCXN3aXRjaCAoY3Vyc29yLT5yb3ApIHsKIAkJY2FzZSBST1BfWE9SOgogCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKLQkJCQljcl9kYXRhLT5kYXRhW2ldID0gdmlhY3Vyc29yLm1hc2tbaV07CisJCQkJY3JfZGF0YS0+ZGF0YVtpXSA9IGN1cnNvci0+bWFza1tpXTsKIAkJCWJyZWFrOwogCQljYXNlIFJPUF9DT1BZOgogCiAJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQkJCWNyX2RhdGEtPmRhdGFbaV0gPSB2aWFjdXJzb3IubWFza1tpXTsKKwkJCQljcl9kYXRhLT5kYXRhW2ldID0gY3Vyc29yLT5tYXNrW2ldOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChNQVhfQ1VSUyA9PSAzMikgeworCQlpZiAoY3VyX3NpemUgPT0gMzIpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJCQljcl9kYXRhLT5iYWtbal0gPSAodTMyKSBjcl9kYXRhLT5kYXRhW2ldOwogCQkJCWNyX2RhdGEtPmJha1tqICsgMV0gPSB+Y3JfZGF0YS0+YmFrW2pdOwogCQkJCWogKz0gMjsKIAkJCX0KLQkJfSBlbHNlIGlmIChNQVhfQ1VSUyA9PSA2NCkgeworCQl9IGVsc2UgewogCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQkJCWNyX2RhdGEtPmJha1tqXSA9ICh1MzIpIGNyX2RhdGEtPmRhdGFbaV07CiAJCQkJY3JfZGF0YS0+YmFrW2ogKyAxXSA9IDB4MDsKQEAgLTEyNDEsMTQgKzk5NiwxMiBAQAogCQkJfQogCQl9CiAKLQkJbWVtY3B5KCgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+ZmJtZW1fdmlydCArCi0JCSAgICAgICAoKHN0cnVjdCB2aWFmYl9wYXIgKikoaW5mby0+cGFyKSktPmN1cnNvcl9zdGFydCwKLQkJICAgICAgIGNyX2RhdGEtPmJhaywgQ1VSU09SX1NJWkUpOwotb3V0OgorCQltZW1jcHlfdG9pbyh2aWFmYmluZm8tPnNjcmVlbl9iYXNlICsgdmlhcGFyLT5zaGFyZWQtPgorCQkJY3Vyc29yX3ZyYW1fYWRkciwgY3JfZGF0YS0+YmFrLCBDVVJTT1JfU0laRSk7CiAJCWtmcmVlKGNyX2RhdGEpOwogCX0KIAotCWlmICh2aWFjdXJzb3IuZW5hYmxlKQorCWlmIChjdXJzb3ItPmVuYWJsZSkKIAkJdmlhZmJfc2hvd19od19jdXJzb3IoaW5mbywgSFdfQ3Vyc29yX09OKTsKIAogCXJldHVybiAwOwpAQCAtMTI1Niw4ICsxMDA5LDggQEAKIAogc3RhdGljIGludCB2aWFmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCWlmICh2aWFmYl9hY2NlbCkKLQkJdmlhZmJfd2FpdF9lbmdpbmVfaWRsZSgpOworCWlmICghKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpKQorCQl2aWFmYl93YWl0X2VuZ2luZV9pZGxlKGluZm8pOwogCXJldHVybiAwOwogfQogCkBAIC0xMjY2LDEyICsxMDE5LDE2IEBACiAJdTMyIGk7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfZ2V0X21vZGVfaW5kZXghXG4iKTsKIAotCWZvciAoaSA9IDA7IHZpYWZiX21vZGVudHJ5W2ldLm1vZGVfaW5kZXggIT0gVklBX1JFU19JTlZBTElEOyBpKyspCi0JCWlmICh2aWFmYl9tb2RlbnRyeVtpXS54cmVzID09IGhyZXMgJiYKLQkJCXZpYWZiX21vZGVudHJ5W2ldLnlyZXMgPT0gdnJlcykKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX01PREVUQUJMRTsgaSsrKQorCQlpZiAoQ0xFMjY2TW9kZXNbaV0ubW9kZV9hcnJheSAmJgorCQkJQ0xFMjY2TW9kZXNbaV0uY3J0Y1swXS5jcnRjLmhvcl9hZGRyID09IGhyZXMgJiYKKwkJCUNMRTI2Nk1vZGVzW2ldLmNydGNbMF0uY3J0Yy52ZXJfYWRkciA9PSB2cmVzKQogCQkJYnJlYWs7CiAKLQlyZXR1cm4gdmlhZmJfbW9kZW50cnlbaV0ubW9kZV9pbmRleDsKKwlpZiAoaSA9PSBOVU1fVE9UQUxfTU9ERVRBQkxFKQorCQlyZXR1cm4gVklBX1JFU19JTlZBTElEOworCisJcmV0dXJuIENMRTI2Nk1vZGVzW2ldLk1vZGVJbmRleDsKIH0KIAogc3RhdGljIHZvaWQgY2hlY2tfYXZhaWxhYmxlX2RldmljZV90b19lbmFibGUoaW50IGRldmljZV9pZCkKQEAgLTEzNzUsMzYgKzExMzIsMTEgQEAKIAkJdmlhZmJfU0FNTV9PTiA9IGFjdGl2ZV9kZXYuc2FtbTsKIAl2aWFmYl9wcmltYXJ5X2RldiA9IGFjdGl2ZV9kZXYucHJpbWFyeV9kZXY7CiAKLQl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCXZpYWZiX3NldF9wcmltYXJ5X2FkZHJlc3MoMCk7CisJdmlhZmJfc2V0X3NlY29uZGFyeV9hZGRyZXNzKHZpYWZiX1NBTU1fT04gPyB2aWFmYl9zZWNvbmRfb2Zmc2V0IDogMCk7CiAJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHZpYWZiX3NldF92aWRlb19kZXZpY2UodTMyIHZpZGVvX2Rldl9pbmZvKQotewotCXZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9IFNUQVRFX09GRjsKLQl2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPSBTVEFURV9PRkY7Ci0JdmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID0gU1RBVEVfT0ZGOwotCi0JLyogQ2hlY2sgYXZhaWxhYmxlIGRldmljZSB0byBlbmFibGU6ICovCi0JaWYgKCh2aWRlb19kZXZfaW5mbyAmIENSVF9EZXZpY2UpID09IENSVF9EZXZpY2UpCi0JCXZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9IFNUQVRFX09OOwotCWVsc2UgaWYgKCh2aWRlb19kZXZfaW5mbyAmIERWSV9EZXZpY2UpID09IERWSV9EZXZpY2UpCi0JCXZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9IFNUQVRFX09OOwotCWVsc2UgaWYgKCh2aWRlb19kZXZfaW5mbyAmIExDRF9EZXZpY2UpID09IExDRF9EZXZpY2UpCi0JCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09OOwotfQotCi1zdGF0aWMgdm9pZCB2aWFmYl9nZXRfdmlkZW9fZGV2aWNlKHUzMiAqdmlkZW9fZGV2X2luZm8pCi17Ci0JKnZpZGVvX2Rldl9pbmZvID0gTm9uZV9EZXZpY2U7Ci0JaWYgKHZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9PSBTVEFURV9PTikKLQkJKnZpZGVvX2Rldl9pbmZvIHw9IENSVF9EZXZpY2U7Ci0JZWxzZSBpZiAodmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID09IFNUQVRFX09OKQotCQkqdmlkZW9fZGV2X2luZm8gfD0gRFZJX0RldmljZTsKLQllbHNlIGlmICh2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPT0gU1RBVEVfT04pCi0JCSp2aWRlb19kZXZfaW5mbyB8PSBMQ0RfRGV2aWNlOwotfQotCiBzdGF0aWMgaW50IGdldF9wcmltYXJ5X2RldmljZSh2b2lkKQogewogCWludCBwcmltYXJ5X2RldmljZSA9IDA7CkBAIC0xNDQ2LDE4ICsxMTc4LDYgQEAKIAlyZXR1cm4gcHJpbWFyeV9kZXZpY2U7CiB9CiAKLXN0YXRpYyB1OCBpc19kdW92aWV3KHZvaWQpCi17Ci0JaWYgKDAgPT0gdmlhZmJfU0FNTV9PTikgewotCQlpZiAodmlhZmJfTENEX09OICsgdmlhZmJfTENEMl9PTiArCi0JCQl2aWFmYl9EVklfT04gKyB2aWFmYl9DUlRfT04gPT0gMikKLQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KLQogc3RhdGljIHZvaWQgYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8KIAkqc2VjX3ZhcikKIHsKQEAgLTE1NTksMTQgKzEyNzksMTMgQEAKIAkJCWlmICh2aWFmYl9TQU1NX09OKQogCQkJCXZpYWZiX3ByaW1hcnlfZGV2ID0gc2V0dGluZ19pbmZvLnByaW1hcnlfZGV2aWNlOwogCi0JCQl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCQkJdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcygwKTsKKwkJCXZpYWZiX3NldF9zZWNvbmRhcnlfYWRkcmVzcyh2aWFmYl9TQU1NX09OID8gdmlhZmJfc2Vjb25kX29mZnNldCA6IDApOwogCQkJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CiAJCX0KIAkJbmVlZF9zZXRfbW9kZSA9IDE7CiAJfQogCi0JdmlhcGFyaW5mby0+ZHVvdmlldyA9IGlzX2R1b3ZpZXcoKTsKLQogCWlmICghbmVlZF9zZXRfbW9kZSkgewogCQk7CiAJfSBlbHNlIHsKQEAgLTE1ODksMTggKzEzMDgsNiBAQAogCQlzZXR0aW5nX2luZm8tPmRldmljZV9zdGF0dXMgfD0gTENEX0RldmljZTsKIAlpZiAodmlhZmJfTENEMl9PTiA9PSAxKQogCQlzZXR0aW5nX2luZm8tPmRldmljZV9zdGF0dXMgfD0gTENEMl9EZXZpY2U7Ci0JaWYgKCh2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPT0gMSkgJiYgKHZpYWZiX0NSVF9PTiA9PSAxKSkgewotCQlzZXR0aW5nX2luZm8tPnZpZGVvX2RldmljZV9zdGF0dXMgPQotCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGg7Ci0JfSBlbHNlIGlmICgodmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID09IDEpICYmICh2aWFmYl9EVklfT04gPT0gMSkpIHsKLQkJc2V0dGluZ19pbmZvLT52aWRlb19kZXZpY2Vfc3RhdHVzID0KLQkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKLQl9IGVsc2UgaWYgKCh2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPT0gMSkgJiYgKHZpYWZiX0xDRF9PTiA9PSAxKSkgewotCQlzZXR0aW5nX2luZm8tPnZpZGVvX2RldmljZV9zdGF0dXMgPQotCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoOwotCX0gZWxzZSB7Ci0JCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9IDA7Ci0JfQogCiAJc2V0dGluZ19pbmZvLT5zYW1tX3N0YXR1cyA9IHZpYWZiX1NBTU1fT047CiAJc2V0dGluZ19pbmZvLT5wcmltYXJ5X2RldmljZSA9IGdldF9wcmltYXJ5X2RldmljZSgpOwpAQCAtMTY4NywyNSArMTM5NCw2IEBACiAJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOwogCX0KLQl2aWFwYXJpbmZvLT5kdW92aWV3ID0gaXNfZHVvdmlldygpOwotfQotCi1zdGF0aWMgdm9pZCBwYXJzZV92aWRlb19kZXYodm9pZCkKLXsKLQl2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPSBTVEFURV9PRkY7Ci0JdmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID0gU1RBVEVfT0ZGOwotCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09GRjsKLQotCWlmICghc3RybmNtcCh2aWFmYl92aWRlb19kZXYsICJDUlQiLCAzKSkgewotCQkvKiBWaWRlbyBvbiBDUlQgKi8KLQkJdmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID0gU1RBVEVfT047Ci0JfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl92aWRlb19kZXYsICJEVkkiLCAzKSkgewotCQkvKiBWaWRlbyBvbiBEVkkgKi8KLQkJdmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID0gU1RBVEVfT047Ci0JfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl92aWRlb19kZXYsICJMQ0QiLCAzKSkgewotCQkvKiBWaWRlbyBvbiBMQ0QgKi8KLQkJdmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID0gU1RBVEVfT047Ci0JfQogfQogCiBzdGF0aWMgaW50IHBhcnNlX3BvcnQoY2hhciAqb3B0X3N0ciwgaW50ICpvdXRwdXRfaW50ZXJmYWNlKQpAQCAtMTc1NCwxMCArMTQ0Miw4IEBACiAgKiBEVlAxRHJpdmluZywgREZQSGlnaCwgREZQTG93IENSOTYsICAgU1IyQVs1XSwgU1IxQlsxXSwgU1IyQVs0XSwgU1IxRVsyXSwKICAqIENSOUIsICAgIFNSNjUsICAgIENSOTcsICAgIENSOTkKICAqLwotc3RhdGljIGludCB2aWFmYl9kdnAwX3Byb2NfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdmlhZmJfZHZwMF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwogCXU4IGR2cDBfZGF0YV9kcmkgPSAwLCBkdnAwX2Nsa19kcmkgPSAwLCBkdnAwID0gMDsKIAlkdnAwX2RhdGFfZHJpID0KIAkgICAgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKSAmIEJJVDUpID4+IDQgfApAQCAtMTc2NiwxMyArMTQ1MiwxNyBAQAogCSAgICAodmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpICYgQklUNCkgPj4gMyB8CiAJICAgICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSkgJiBCSVQyKSA+PiAyOwogCWR2cDAgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5NikgJiAweDBmOwotCWxlbiArPQotCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4ICV4ICV4XG4iLCBkdnAwLCBkdnAwX2RhdGFfZHJpLCBkdnAwX2Nsa19kcmkpOwotCSplb2YgPSAxOwkJLypJbmZvcm0ga2VybmVsIGVuZCBvZiBkYXRhICovCi0JcmV0dXJuIGxlbjsKKwlzZXFfcHJpbnRmKG0sICIleCAleCAleFxuIiwgZHZwMCwgZHZwMF9kYXRhX2RyaSwgZHZwMF9jbGtfZHJpKTsKKwlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbnQgdmlhZmJfZHZwMF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCisKK3N0YXRpYyBpbnQgdmlhZmJfZHZwMF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZpYWZiX2R2cDBfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgdmlhZmJfZHZwMF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBidWZbMjBdLCAqdmFsdWUsICpwYnVmOwogCXU4IHJlZ192YWwgPSAwOwpAQCAtMTgxNiwyMSArMTUwNiwzMyBAQAogCX0KIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgaW50IHZpYWZiX2R2cDFfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlhZmJfZHZwMF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZpYWZiX2R2cDBfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHZpYWZiX2R2cDBfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgdmlhZmJfZHZwMV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwogCXU4IGR2cDEgPSAwLCBkdnAxX2RhdGFfZHJpID0gMCwgZHZwMV9jbGtfZHJpID0gMDsKIAlkdnAxID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOUIpICYgMHgwZjsKIAlkdnAxX2RhdGFfZHJpID0gKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjY1KSAmIDB4MGMpID4+IDI7CiAJZHZwMV9jbGtfZHJpID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSNjUpICYgMHgwMzsKLQlsZW4gKz0KLQkgICAgc3ByaW50ZihidWYgKyBsZW4sICIleCAleCAleFxuIiwgZHZwMSwgZHZwMV9kYXRhX2RyaSwgZHZwMV9jbGtfZHJpKTsKLQkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLwotCXJldHVybiBsZW47CisJc2VxX3ByaW50ZihtLCAiJXggJXggJXhcbiIsIGR2cDEsIGR2cDFfZGF0YV9kcmksIGR2cDFfY2xrX2RyaSk7CisJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IHZpYWZiX2R2cDFfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorCitzdGF0aWMgaW50IHZpYWZiX2R2cDFfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB2aWFmYl9kdnAxX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpYWZiX2R2cDFfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgYnVmWzIwXSwgKnZhbHVlLCAqcGJ1ZjsKIAl1OCByZWdfdmFsID0gMDsKQEAgLTE4NjksMTggKzE1NzEsMzAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgdmlhZmJfZGZwaF9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlhZmJfZHZwMV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZpYWZiX2R2cDFfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHZpYWZiX2R2cDFfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgdmlhZmJfZGZwaF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwogCXU4IGRmcF9oaWdoID0gMDsKIAlkZnBfaGlnaCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjk3KSAmIDB4MGY7Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXhcbiIsIGRmcF9oaWdoKTsKLQkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLwotCXJldHVybiBsZW47CisJc2VxX3ByaW50ZihtLCAiJXhcbiIsIGRmcF9oaWdoKTsKKwlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbnQgdmlhZmJfZGZwaF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCisKK3N0YXRpYyBpbnQgdmlhZmJfZGZwaF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZpYWZiX2RmcGhfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgdmlhZmJfZGZwaF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBidWZbMjBdOwogCXU4IHJlZ192YWwgPSAwOwpAQCAtMTg5NSwxOCArMTYwOSwzMSBAQAogCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCByZWdfdmFsLCAweDBmKTsKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgaW50IHZpYWZiX2RmcGxfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlhZmJfZGZwaF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZpYWZiX2RmcGhfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHZpYWZiX2RmcGhfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgdmlhZmJfZGZwbF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwogCXU4IGRmcF9sb3cgPSAwOwogCWRmcF9sb3cgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5OSkgJiAweDBmOwotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4XG4iLCBkZnBfbG93KTsKLQkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLwotCXJldHVybiBsZW47CisJc2VxX3ByaW50ZihtLCAiJXhcbiIsIGRmcF9sb3cpOworCXJldHVybiAwOwogfQotc3RhdGljIGludCB2aWFmYl9kZnBsX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKKworc3RhdGljIGludCB2aWFmYl9kZnBsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdmlhZmJfZGZwbF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCB2aWFmYl9kZnBsX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAljaGFyIGJ1ZlsyMF07CiAJdTggcmVnX3ZhbCA9IDA7CkBAIC0xOTIxLDEwICsxNjQ4LDE4IEBACiAJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIHJlZ192YWwsIDB4MGYpOwogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBpbnQgdmlhZmJfdnQxNjM2X3Byb2NfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwKLQlvZmZfdCBvZmZzZXQsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpYWZiX2RmcGxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB2aWFmYl9kZnBsX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSB2aWFmYl9kZnBsX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgaW50IHZpYWZiX3Z0MTYzNl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwogCXU4IHZ0MTYzNl8wOCA9IDAsIHZ0MTYzNl8wOSA9IDA7CiAJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CiAJY2FzZSBWVDE2MzZfTFZEUzoKQEAgLTE5MzQsNyArMTY2OSw3IEBACiAJCXZ0MTYzNl8wOSA9CiAJCSAgICB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHModmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCiAJCSAgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywgMHgwOSkgJiAweDFmOwotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIleCAleFxuIiwgdnQxNjM2XzA4LCB2dDE2MzZfMDkpOworCQlzZXFfcHJpbnRmKG0sICIleCAleFxuIiwgdnQxNjM2XzA4LCB2dDE2MzZfMDkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTE5NDcsMTYgKzE2ODIsMjEgQEAKIAkJdnQxNjM2XzA5ID0KIAkJICAgIHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIsCiAJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIsIDB4MDkpICYgMHgxZjsKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiICV4ICV4XG4iLCB2dDE2MzZfMDgsIHZ0MTYzNl8wOSk7CisJCXNlcV9wcmludGYobSwgIiAleCAleFxuIiwgdnQxNjM2XzA4LCB2dDE2MzZfMDkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQotc3RhdGljIGludCB2aWFmYl92dDE2MzZfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorCitzdGF0aWMgaW50IHZpYWZiX3Z0MTYzNl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZpYWZiX3Z0MTYzNl9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCB2aWFmYl92dDE2MzZfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgYnVmWzMwXSwgKnZhbHVlLCAqcGJ1ZjsKIAlzdHJ1Y3QgSU9EQVRBIHJlZ192YWw7CkBAIC0yMDQ1LDM5ICsxNzg1LDI3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aWFmYl92dDE2MzZfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB2aWFmYl92dDE2MzZfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHZpYWZiX3Z0MTYzNl9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIHZvaWQgdmlhZmJfaW5pdF9wcm9jKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKnZpYWZiX2VudHJ5KQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CiAJKnZpYWZiX2VudHJ5ID0gcHJvY19ta2RpcigidmlhZmIiLCBOVUxMKTsKIAlpZiAodmlhZmJfZW50cnkpIHsKLQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHZwMCIsIDAsICp2aWFmYl9lbnRyeSk7Ci0JCWlmIChlbnRyeSkgewotCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2R2cDBfcHJvY19yZWFkOwotCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kdnAwX3Byb2Nfd3JpdGU7Ci0JCX0KLQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHZwMSIsIDAsICp2aWFmYl9lbnRyeSk7Ci0JCWlmIChlbnRyeSkgewotCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2R2cDFfcHJvY19yZWFkOwotCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kdnAxX3Byb2Nfd3JpdGU7Ci0JCX0KLQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGZwaCIsIDAsICp2aWFmYl9lbnRyeSk7Ci0JCWlmIChlbnRyeSkgewotCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2RmcGhfcHJvY19yZWFkOwotCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kZnBoX3Byb2Nfd3JpdGU7Ci0JCX0KLQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGZwbCIsIDAsICp2aWFmYl9lbnRyeSk7Ci0JCWlmIChlbnRyeSkgewotCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2RmcGxfcHJvY19yZWFkOwotCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kZnBsX3Byb2Nfd3JpdGU7Ci0JCX0KKwkJcHJvY19jcmVhdGUoImR2cDAiLCAwLCAqdmlhZmJfZW50cnksICZ2aWFmYl9kdnAwX3Byb2NfZm9wcyk7CisJCXByb2NfY3JlYXRlKCJkdnAxIiwgMCwgKnZpYWZiX2VudHJ5LCAmdmlhZmJfZHZwMV9wcm9jX2ZvcHMpOworCQlwcm9jX2NyZWF0ZSgiZGZwaCIsIDAsICp2aWFmYl9lbnRyeSwgJnZpYWZiX2RmcGhfcHJvY19mb3BzKTsKKwkJcHJvY19jcmVhdGUoImRmcGwiLCAwLCAqdmlhZmJfZW50cnksICZ2aWFmYl9kZnBsX3Byb2NfZm9wcyk7CiAJCWlmIChWVDE2MzZfTFZEUyA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgogCQkJbHZkc19jaGlwX25hbWUgfHwgVlQxNjM2X0xWRFMgPT0KIAkJICAgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSB7Ci0JCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJ2dDE2MzYiLCAwLCAqdmlhZmJfZW50cnkpOwotCQkJaWYgKGVudHJ5KSB7Ci0JCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX3Z0MTYzNl9wcm9jX3JlYWQ7Ci0JCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl92dDE2MzZfcHJvY193cml0ZTsKLQkJCX0KKwkJCXByb2NfY3JlYXRlKCJ2dDE2MzYiLCAwLCAqdmlhZmJfZW50cnksICZ2aWFmYl92dDE2MzZfcHJvY19mb3BzKTsKIAkJfQogCiAJfQpAQCAtMjA5NCw1MSArMTgyMiw2MSBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KCJ2aWFmYiIsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB2aWFfcGNpX3Byb2JlKHZvaWQpCitzdGF0aWMgdm9pZCBwYXJzZV9tb2RlKGNvbnN0IGNoYXIgKnN0ciwgdTMyICp4cmVzLCB1MzIgKnlyZXMpCiB7Ci0JdW5zaWduZWQgbG9uZyBkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlczsKLQljaGFyICp0bXBjLCAqdG1wbTsKLQljaGFyICp0bXBjX3NlYywgKnRtcG1fc2VjOworCWNoYXIgKnB0cjsKKworCSp4cmVzID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmcHRyLCAxMCk7CisJaWYgKHB0clswXSAhPSAneCcpCisJCWdvdG8gb3V0X2RlZmF1bHQ7CisKKwkqeXJlcyA9IHNpbXBsZV9zdHJ0b3VsKCZwdHJbMV0sICZwdHIsIDEwKTsKKwlpZiAocHRyWzBdKQorCQlnb3RvIG91dF9kZWZhdWx0OworCisJcmV0dXJuOworCitvdXRfZGVmYXVsdDoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYiByZWNlaXZlZCBpbnZhbGlkIG1vZGUgc3RyaW5nOiAlc1xuIiwgc3RyKTsKKwkqeHJlcyA9IDY0MDsKKwkqeXJlcyA9IDQ4MDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdmlhX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXUzMiBkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlczsKIAlpbnQgdm1vZGVfaW5kZXg7Ci0JdTMyIHRtZHNfbGVuZ3RoLCBsdmRzX2xlbmd0aCwgY3J0X2xlbmd0aCwgY2hpcF9sZW5ndGgsIHZpYWZiX3Bhcl9sZW5ndGg7CisJdTMyIHZpYWZiX3Bhcl9sZW5ndGg7CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJWSUFGQiBQQ0kgUHJvYmUhIVxuIik7CiAKIAl2aWFmYl9wYXJfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB2aWFmYl9wYXIpLCBCSVRTX1BFUl9MT05HLzgpOwotCXRtZHNfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24pLAotCQlCSVRTX1BFUl9MT05HLzgpOwotCWx2ZHNfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24pLAotCQlCSVRTX1BFUl9MT05HLzgpOwotCWNydF9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiksCi0JCUJJVFNfUEVSX0xPTkcvOCk7Ci0JY2hpcF9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGNoaXBfaW5mb3JtYXRpb24pLCBCSVRTX1BFUl9MT05HLzgpOwogCiAJLyogQWxsb2NhdGUgZmJfaW5mbyBhbmQgKioqX3BhciBoZXJlLCBhbHNvIGluY2x1ZGluZyBzb21lIG90aGVyIG5lZWRlZAogCSAqIHZhcmlhYmxlcwogCSovCi0JdmlhZmJpbmZvID0gZnJhbWVidWZmZXJfYWxsb2ModmlhZmJfcGFyX2xlbmd0aCArIDIgKiBsdmRzX2xlbmd0aCArCi0JdG1kc19sZW5ndGggKyBjcnRfbGVuZ3RoICsgY2hpcF9sZW5ndGgsIE5VTEwpOworCXZpYWZiaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHZpYWZiX3Bhcl9sZW5ndGggKworCQlBTElHTihzaXplb2Yoc3RydWN0IHZpYWZiX3NoYXJlZCksIEJJVFNfUEVSX0xPTkcvOCksCisJCSZwZGV2LT5kZXYpOwogCWlmICghdmlhZmJpbmZvKSB7CiAJCXByaW50ayhLRVJOX0VSUiJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2aWFmYl9pbmZvLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXZpYXBhcmluZm8gPSAoc3RydWN0IHZpYWZiX3BhciAqKXZpYWZiaW5mby0+cGFyOwotCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvID0gKHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKikKLQkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8gKyB2aWFmYl9wYXJfbGVuZ3RoKTsKLQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyA9IChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICopCi0JCSgodW5zaWduZWQgbG9uZyl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mbyArIHRtZHNfbGVuZ3RoKTsKLQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIgPSAoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqKQotCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8gKyBsdmRzX2xlbmd0aCk7Ci0JdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mbyA9IChzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gKikKLQkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiArIGx2ZHNfbGVuZ3RoKTsKLQl2aWFwYXJpbmZvLT5jaGlwX2luZm8gPSAoc3RydWN0IGNoaXBfaW5mb3JtYXRpb24gKikKLQkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8gKyBjcnRfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5zaGFyZWQgPSB2aWFmYmluZm8tPnBhciArIHZpYWZiX3Bhcl9sZW5ndGg7CisJdmlhcGFyaW5mby0+dnJhbV9hZGRyID0gMDsKKwl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mbyA9ICZ2aWFwYXJpbmZvLT5zaGFyZWQtPnRtZHNfc2V0dGluZ19pbmZvOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvID0gJnZpYXBhcmluZm8tPnNoYXJlZC0+bHZkc19zZXR0aW5nX2luZm87CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yID0KKwkJJnZpYXBhcmluZm8tPnNoYXJlZC0+bHZkc19zZXR0aW5nX2luZm8yOworCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8gPSAmdmlhcGFyaW5mby0+c2hhcmVkLT5jcnRfc2V0dGluZ19pbmZvOworCXZpYXBhcmluZm8tPmNoaXBfaW5mbyA9ICZ2aWFwYXJpbmZvLT5zaGFyZWQtPmNoaXBfaW5mbzsKIAogCWlmICh2aWFmYl9kdWFsX2ZiKQogCQl2aWFmYl9TQU1NX09OID0gMTsKIAlwYXJzZV9hY3RpdmVfZGV2KCk7Ci0JcGFyc2VfdmlkZW9fZGV2KCk7CiAJcGFyc2VfbGNkX3BvcnQoKTsKIAlwYXJzZV9kdmlfcG9ydCgpOwogCkBAIC0yMTQ5LDMyICsxODg3LDMyIEBACiAJLyogU2V0IHVwIEkyQyBidXMgc3R1ZmYgKi8KIAl2aWFmYl9jcmVhdGVfaTJjX2J1cyh2aWFwYXJpbmZvKTsKIAotCXZpYWZiX2luaXRfY2hpcF9pbmZvKCk7Ci0JdmlhZmJfZ2V0X2ZiX2luZm8oJnZpYXBhcmluZm8tPmZibWVtLCAmdmlhcGFyaW5mby0+bWVtc2l6ZSk7CisJdmlhZmJfaW5pdF9jaGlwX2luZm8ocGRldiwgZW50KTsKKwl2aWFwYXJpbmZvLT5mYm1lbSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwl2aWFwYXJpbmZvLT5tZW1zaXplID0gdmlhZmJfZ2V0X2ZiX3NpemVfZnJvbV9wY2koKTsKIAl2aWFwYXJpbmZvLT5mYm1lbV9mcmVlID0gdmlhcGFyaW5mby0+bWVtc2l6ZTsKIAl2aWFwYXJpbmZvLT5mYm1lbV91c2VkID0gMDsKLQl2aWFwYXJpbmZvLT5mYm1lbV92aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHZpYXBhcmluZm8tPmZibWVtLAorCXZpYWZiaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUodmlhcGFyaW5mby0+ZmJtZW0sCiAJCXZpYXBhcmluZm8tPm1lbXNpemUpOwotCXZpYWZiaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciAqKXZpYXBhcmluZm8tPmZibWVtX3ZpcnQ7Ci0KLQlpZiAoIXZpYXBhcmluZm8tPmZibWVtX3ZpcnQpIHsKKwlpZiAoIXZpYWZiaW5mby0+c2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaW9yZW1hcCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXZpYWZiX2dldF9tbWlvX2luZm8oJnZpYXBhcmluZm8tPm1taW9fYmFzZSwgJnZpYXBhcmluZm8tPm1taW9fbGVuKTsKLQl2aWFwYXJpbmZvLT5pb192aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHZpYXBhcmluZm8tPm1taW9fYmFzZSwKLQkJdmlhcGFyaW5mby0+bW1pb19sZW4pOwotCisJdmlhZmJpbmZvLT5maXgubW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwl2aWFmYmluZm8tPmZpeC5tbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CiAJdmlhZmJpbmZvLT5ub2RlID0gMDsKIAl2aWFmYmluZm8tPmZib3BzID0gJnZpYWZiX29wczsKIAl2aWFmYmluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9ZUEFOOwogCiAJdmlhZmJpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBzZXVkb19wYWw7Ci0JaWYgKHZpYWZiX2FjY2VsKSB7Ci0JCXZpYWZiX2luaXRfYWNjZWwoKTsKLQkJdmlhZmJfaW5pdF8yZF9lbmdpbmUoKTsKLQkJdmlhZmJfaHdfY3Vyc29yX2luaXQoKTsKKwlpZiAodmlhZmJfYWNjZWwgJiYgIXZpYWZiX2luaXRfZW5naW5lKHZpYWZiaW5mbykpIHsKKwkJdmlhZmJpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8CisJCQlGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCB8ICBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQ7CisJCWRlZmF1bHRfdmFyLmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7CisJfSBlbHNlIHsKKwkJdmlhZmJpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKwkJZGVmYXVsdF92YXIuYWNjZWxfZmxhZ3MgPSAwOwogCX0KIAogCWlmICh2aWFmYl9zZWNvbmRfc2l6ZSAmJiAodmlhZmJfc2Vjb25kX3NpemUgPCA4KSkgewpAQCAtMjE4NiwyNyArMTkyNCwxNCBAQAogCQkJdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKIAl9CiAKLQl2aWFmYl9GQl9NTSA9IHZpYXBhcmluZm8tPmZibWVtX3ZpcnQ7Ci0JdG1wbSA9IHZpYWZiX21vZGU7Ci0JdG1wYyA9IHN0cnNlcCgmdG1wbSwgIngiKTsKLQlzdHJpY3Rfc3RydG91bCh0bXBjLCAwLCAmZGVmYXVsdF94cmVzKTsKLQlzdHJpY3Rfc3RydG91bCh0bXBtLCAwLCAmZGVmYXVsdF95cmVzKTsKLQorCXBhcnNlX21vZGUodmlhZmJfbW9kZSwgJmRlZmF1bHRfeHJlcywgJmRlZmF1bHRfeXJlcyk7CiAJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlcyk7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAiMC0+aW5kZXg9JWRcbiIsIHZtb2RlX2luZGV4KTsKIAogCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKLQkJaWYgKHN0cmNtcCh2aWFmYl9tb2RlLCB2aWFmYl9tb2RlMSkpIHsKLQkJCXRtcG1fc2VjID0gdmlhZmJfbW9kZTE7Ci0JCQl0bXBjX3NlYyA9IHN0cnNlcCgmdG1wbV9zZWMsICJ4Iik7Ci0JCQlzdHJpY3Rfc3RydG91bCh0bXBjX3NlYywgMCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9zZWNvbmRfeHJlcyk7Ci0JCQlzdHJpY3Rfc3RydG91bCh0bXBtX3NlYywgMCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9zZWNvbmRfeXJlcyk7Ci0JCX0gZWxzZSB7Ci0JCQl2aWFmYl9zZWNvbmRfeHJlcyA9IGRlZmF1bHRfeHJlczsKLQkJCXZpYWZiX3NlY29uZF95cmVzID0gZGVmYXVsdF95cmVzOwotCQl9CisJCXBhcnNlX21vZGUodmlhZmJfbW9kZTEsICZ2aWFmYl9zZWNvbmRfeHJlcywKKwkJCSZ2aWFmYl9zZWNvbmRfeXJlcyk7CisKIAkJaWYgKDAgPT0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcykgewogCQkJc3dpdGNoICh2aWFmYl9zZWNvbmRfeHJlcykgewogCQkJY2FzZSAxNDAwOgpAQCAtMjI1NiwxOCArMTk4MSw5IEBACiAJZGVmYXVsdF92YXIubG93ZXJfbWFyZ2luID0gNDsKIAlkZWZhdWx0X3Zhci5oc3luY19sZW4gPSBkZWZhdWx0X3Zhci5sZWZ0X21hcmdpbjsKIAlkZWZhdWx0X3Zhci52c3luY19sZW4gPSA0OwotCWRlZmF1bHRfdmFyLmFjY2VsX2ZsYWdzID0gMDsKLQotCWlmICh2aWFmYl9hY2NlbCkgewotCQl2aWFmYmluZm8tPmZsYWdzIHw9Ci0JCSAgICAoRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCB8Ci0JCSAgICAgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUKTsKLQkJZGVmYXVsdF92YXIuYWNjZWxfZmxhZ3MgfD0gRkJfQUNDRUxGX1RFWFQ7Ci0JfSBlbHNlCi0JCXZpYWZiaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CiAKIAlpZiAodmlhZmJfZHVhbF9mYikgewotCQl2aWFmYmluZm8xID0gZnJhbWVidWZmZXJfYWxsb2ModmlhZmJfcGFyX2xlbmd0aCwgTlVMTCk7CisJCXZpYWZiaW5mbzEgPSBmcmFtZWJ1ZmZlcl9hbGxvYyh2aWFmYl9wYXJfbGVuZ3RoLCAmcGRldi0+ZGV2KTsKIAkJaWYgKCF2aWFmYmluZm8xKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSJhbGxvY2F0ZSB0aGUgc2Vjb25kIGZyYW1lYnVmZmVyIHN0cnVjdCBlcnJvclxuIik7CkBAIC0yMjc2LDExICsxOTkyLDEwIEBACiAJCX0KIAkJdmlhcGFyaW5mbzEgPSB2aWFmYmluZm8xLT5wYXI7CiAJCW1lbWNweSh2aWFwYXJpbmZvMSwgdmlhcGFyaW5mbywgdmlhZmJfcGFyX2xlbmd0aCk7CisJCXZpYXBhcmluZm8xLT52cmFtX2FkZHIgPSB2aWFmYl9zZWNvbmRfb2Zmc2V0OwogCQl2aWFwYXJpbmZvMS0+bWVtc2l6ZSA9IHZpYXBhcmluZm8tPm1lbXNpemUgLQogCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKIAkJdmlhcGFyaW5mby0+bWVtc2l6ZSA9IHZpYWZiX3NlY29uZF9vZmZzZXQ7Ci0JCXZpYXBhcmluZm8xLT5mYm1lbV92aXJ0ID0gdmlhcGFyaW5mby0+ZmJtZW1fdmlydCArCi0JCQl2aWFmYl9zZWNvbmRfb2Zmc2V0OwogCQl2aWFwYXJpbmZvMS0+ZmJtZW0gPSB2aWFwYXJpbmZvLT5mYm1lbSArIHZpYWZiX3NlY29uZF9vZmZzZXQ7CiAKIAkJdmlhcGFyaW5mbzEtPmZibWVtX3VzZWQgPSB2aWFwYXJpbmZvLT5mYm1lbV91c2VkOwpAQCAtMjI4OCwyMCArMjAwMywxMyBAQAogCQkJdmlhcGFyaW5mbzEtPmZibWVtX3VzZWQ7CiAJCXZpYXBhcmluZm8tPmZibWVtX2ZyZWUgPSB2aWFwYXJpbmZvLT5tZW1zaXplOwogCQl2aWFwYXJpbmZvLT5mYm1lbV91c2VkID0gMDsKLQkJaWYgKHZpYWZiX2FjY2VsKSB7Ci0JCQl2aWFwYXJpbmZvMS0+Y3Vyc29yX3N0YXJ0ID0KLQkJCSAgICB2aWFwYXJpbmZvLT5jdXJzb3Jfc3RhcnQgLSB2aWFmYl9zZWNvbmRfb2Zmc2V0OwotCQkJdmlhcGFyaW5mbzEtPlZRX3N0YXJ0ID0gdmlhcGFyaW5mby0+VlFfc3RhcnQgLQotCQkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7Ci0JCQl2aWFwYXJpbmZvMS0+VlFfZW5kID0gdmlhcGFyaW5mby0+VlFfZW5kIC0KLQkJCQl2aWFmYl9zZWNvbmRfb2Zmc2V0OwotCQl9CiAKKwkJdmlhcGFyaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQl2aWFwYXJpbmZvMS0+aWdhX3BhdGggPSBJR0EyOwogCQltZW1jcHkodmlhZmJpbmZvMSwgdmlhZmJpbmZvLCBzaXplb2Yoc3RydWN0IGZiX2luZm8pKTsKKwkJdmlhZmJpbmZvMS0+cGFyID0gdmlhcGFyaW5mbzE7CiAJCXZpYWZiaW5mbzEtPnNjcmVlbl9iYXNlID0gdmlhZmJpbmZvLT5zY3JlZW5fYmFzZSArCiAJCQl2aWFmYl9zZWNvbmRfb2Zmc2V0OwotCQl2aWFmYmluZm8xLT5maXguc21lbV9zdGFydCA9IHZpYXBhcmluZm8xLT5mYm1lbTsKLQkJdmlhZmJpbmZvMS0+Zml4LnNtZW1fbGVuID0gdmlhcGFyaW5mbzEtPmZibWVtX2ZyZWU7CiAKIAkJZGVmYXVsdF92YXIueHJlcyA9IHZpYWZiX3NlY29uZF94cmVzOwogCQlkZWZhdWx0X3Zhci55cmVzID0gdmlhZmJfc2Vjb25kX3lyZXM7CkBAIC0yMzIzLDE1ICsyMDMxLDE3IEBACiAJCXZpYWZiX3NldHVwX2ZpeGluZm8oJnZpYWZiaW5mbzEtPmZpeCwgdmlhcGFyaW5mbzEpOwogCQl2aWFmYl9jaGVja192YXIoJmRlZmF1bHRfdmFyLCB2aWFmYmluZm8xKTsKIAkJdmlhZmJpbmZvMS0+dmFyID0gZGVmYXVsdF92YXI7Ci0JCXZpYWZiX3VwZGF0ZV92aWFmYl9wYXIodmlhZmJpbmZvKTsKLQkJdmlhZmJfdXBkYXRlX2ZpeCgmdmlhZmJpbmZvMS0+Zml4LCB2aWFmYmluZm8xKTsKKwkJdmlhZmJfdXBkYXRlX2ZpeCh2aWFmYmluZm8xKTsKKwkJdmlhcGFyaW5mbzEtPmRlcHRoID0gZmJfZ2V0X2NvbG9yX2RlcHRoKCZ2aWFmYmluZm8xLT52YXIsCisJCQkmdmlhZmJpbmZvMS0+Zml4KTsKIAl9CiAKIAl2aWFmYl9zZXR1cF9maXhpbmZvKCZ2aWFmYmluZm8tPmZpeCwgdmlhcGFyaW5mbyk7CiAJdmlhZmJfY2hlY2tfdmFyKCZkZWZhdWx0X3ZhciwgdmlhZmJpbmZvKTsKIAl2aWFmYmluZm8tPnZhciA9IGRlZmF1bHRfdmFyOwotCXZpYWZiX3VwZGF0ZV92aWFmYl9wYXIodmlhZmJpbmZvKTsKLQl2aWFmYl91cGRhdGVfZml4KCZ2aWFmYmluZm8tPmZpeCwgdmlhZmJpbmZvKTsKKwl2aWFmYl91cGRhdGVfZml4KHZpYWZiaW5mbyk7CisJdmlhcGFyaW5mby0+ZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJnZpYWZiaW5mby0+dmFyLAorCQkmdmlhZmJpbmZvLT5maXgpOwogCWRlZmF1bHRfdmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCWZiX2FsbG9jX2NtYXAoJnZpYWZiaW5mby0+Y21hcCwgMjU2LCAwKTsKIApAQCAtMjM1MywyMCArMjA2MywyMCBAQAogCQkgIHZpYWZiaW5mby0+bm9kZSwgdmlhZmJpbmZvLT5maXguaWQsIGRlZmF1bHRfdmFyLnhyZXMsCiAJCSAgZGVmYXVsdF92YXIueXJlcywgZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwpOwogCi0JdmlhZmJfaW5pdF9wcm9jKCZ2aWFwYXJpbmZvLT5wcm9jX2VudHJ5KTsKKwl2aWFmYl9pbml0X3Byb2MoJnZpYXBhcmluZm8tPnNoYXJlZC0+cHJvY19lbnRyeSk7CiAJdmlhZmJfaW5pdF9kYWMoSUdBMik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aWFfcGNpX3JlbW92ZSh2b2lkKQorc3RhdGljIHZvaWQgX19kZXZleGl0IHZpYV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYV9wY2lfcmVtb3ZlIVxuIik7CiAJZmJfZGVhbGxvY19jbWFwKCZ2aWFmYmluZm8tPmNtYXApOwogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIodmlhZmJpbmZvKTsKIAlpZiAodmlhZmJfZHVhbF9mYikKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcih2aWFmYmluZm8xKTsKLQlpb3VubWFwKCh2b2lkICopdmlhcGFyaW5mby0+ZmJtZW1fdmlydCk7Ci0JaW91bm1hcCh2aWFwYXJpbmZvLT5pb192aXJ0KTsKKwlpb3VubWFwKCh2b2lkICopdmlhZmJpbmZvLT5zY3JlZW5fYmFzZSk7CisJaW91bm1hcCh2aWFwYXJpbmZvLT5zaGFyZWQtPmVuZ2luZV9tbWlvKTsKIAogCXZpYWZiX2RlbGV0ZV9pMmNfYnVzcyh2aWFwYXJpbmZvKTsKIApAQCAtMjM3NCw3ICsyMDg0LDcgQEAKIAlpZiAodmlhZmJfZHVhbF9mYikKIAkJZnJhbWVidWZmZXJfcmVsZWFzZSh2aWFmYmluZm8xKTsKIAotCXZpYWZiX3JlbW92ZV9wcm9jKHZpYXBhcmluZm8tPnByb2NfZW50cnkpOworCXZpYWZiX3JlbW92ZV9wcm9jKHZpYXBhcmluZm8tPnNoYXJlZC0+cHJvY19lbnRyeSk7CiB9CiAKICNpZm5kZWYgTU9EVUxFCkBAIC0yNDQxLDggKzIxNTEsNiBAQAogCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2xjZF9tb2RlPSIsIDE1KSkKIAkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTUsIDAsCiAJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfbGNkX21vZGUpOwotCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX3ZpZGVvX2Rldj0iLCAxNikpCi0JCQl2aWFmYl92aWRlb19kZXYgPSBrc3RyZHVwKHRoaXNfb3B0ICsgMTYsIEdGUF9LRVJORUwpOwogCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2xjZF9wb3J0PSIsIDE1KSkKIAkJCXZpYWZiX2xjZF9wb3J0ID0ga3N0cmR1cCh0aGlzX29wdCArIDE1LCBHRlBfS0VSTkVMKTsKIAkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9kdmlfcG9ydD0iLCAxNSkpCkBAIC0yNDUyLDYgKzIxNjAsNDAgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmlhZmJfcGNpX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9DTEUyNjZfRElEKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9DTEUyNjYgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9QTTgwMF9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX1BNODAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfSzQwMF9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX0s0MDAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9LODAwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfSzgwMCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX1A0TTg5MF9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX0NONzAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfSzhNODkwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfSzhNODkwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfQ1g3MDBfRElEKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9DWDcwMCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX1A0TTkwMF9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX1A0TTkwMCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX0NONzUwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfQ043NTAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9WWDgwMF9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX1ZYODAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfVlg4NTVfRElEKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9WWDg1NSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2aWFmYl9wY2lfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdmlhZmJfZHJpdmVyID0geworCS5uYW1lCQk9ICJ2aWFmYiIsCisJLmlkX3RhYmxlCT0gdmlhZmJfcGNpX3RhYmxlLAorCS5wcm9iZQkJPSB2aWFfcGNpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodmlhX3BjaV9yZW1vdmUpLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgdmlhZmJfaW5pdCh2b2lkKQogewogI2lmbmRlZiBNT0RVTEUKQEAgLTI0NjMsMTMgKzIyMDUsMTMgQEAKIAlwcmludGsoS0VSTl9JTkZPCiAgICAgICAgIlZJQSBHcmFwaGljcyBJbnRlcmdyYXRpb24gQ2hpcHNldCBmcmFtZWJ1ZmZlciAlZC4lZCBpbml0aWFsaXppbmdcbiIsCiAJICAgICAgIFZFUlNJT05fTUFKT1IsIFZFUlNJT05fTUlOT1IpOwotCXJldHVybiB2aWFfcGNpX3Byb2JlKCk7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnZpYWZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2aWFmYl9leGl0KHZvaWQpCiB7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfZXhpdCFcbiIpOwotCXZpYV9wY2lfcmVtb3ZlKCk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2aWFmYl9kcml2ZXIpOwogfQogCiBzdGF0aWMgc3RydWN0IGZiX29wcyB2aWFmYl9vcHMgPSB7CkBAIC0yNDk0LDgyICsyMjM2LDc5IEBACiBtb2R1bGVfZXhpdCh2aWFmYl9leGl0KTsKIAogI2lmZGVmIE1PRFVMRQotbW9kdWxlX3BhcmFtKHZpYWZiX21lbXNpemUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfbWVtc2l6ZSwgaW50LCBTX0lSVVNSKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX21vZGUsIGNoYXJwLCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9tb2RlLCBjaGFycCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX21vZGUsICJTZXQgcmVzb2x1dGlvbiAoZGVmYXVsdD02NDB4NDgwKSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfbW9kZTEsIGNoYXJwLCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9tb2RlMSwgY2hhcnAsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9tb2RlMSwgIlNldCByZXNvbHV0aW9uIChkZWZhdWx0PTY0MHg0ODApIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9icHAsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfYnBwLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9icHAsICJTZXQgY29sb3IgZGVwdGggKGRlZmF1bHQ9MzJicHApIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9icHAxLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX2JwcDEsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2JwcDEsICJTZXQgY29sb3IgZGVwdGggKGRlZmF1bHQ9MzJicHApIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9yZWZyZXNoLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX3JlZnJlc2gsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX3JlZnJlc2gsCiAJIlNldCBDUlQgdmlhZmJfcmVmcmVzaCByYXRlIChkZWZhdWx0ID0gNjApIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9yZWZyZXNoMSwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9yZWZyZXNoMSwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfcmVmcmVzaDEsCiAJIlNldCBDUlQgcmVmcmVzaCByYXRlIChkZWZhdWx0ID0gNjApIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9sY2RfcGFuZWxfaWQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfbGNkX3BhbmVsX2lkLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfcGFuZWxfaWQsCiAJIlNldCBGbGF0IFBhbmVsIHR5cGUoRGVmYXVsdD0xMDI0eDc2OCkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9kc3BfbWV0aG9kLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9kc3BfbWV0aG9kLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfZHNwX21ldGhvZCwKIAkiU2V0IEZsYXQgUGFuZWwgZGlzcGxheSBzY2FsaW5nIG1ldGhvZC4oRGVmYXVsdD1FeHBhbmRzaW9uKSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfU0FNTV9PTiwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9TQU1NX09OLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9TQU1NX09OLAogCSJUdXJuIG9uL29mZiBmbGFnIG9mIFNBTU0oRGVmYXVsdD1PRkYpIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9hY2NlbCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9hY2NlbCwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfYWNjZWwsCi0JIlNldCAyRCBIYXJkd2FyZSBBY2NlbGVyYXRpb24uKERlZmF1bHQgPSBPRkYpIik7CisJIlNldCAyRCBIYXJkd2FyZSBBY2NlbGVyYXRpb246IDAgPSBPRkYsIDEgPSBPTiAoZGVmYXVsdCkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2FjdGl2ZV9kZXYsIGNoYXJwLCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9hY3RpdmVfZGV2LCBjaGFycCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2FjdGl2ZV9kZXYsICJTcGVjaWZ5IGFjdGl2ZSBkZXZpY2VzLiIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0LAogCSJEaXNwbGF5IEhhcmR3YXJlIExheW91dCAoTENEIE9ubHksIERWSSBPbmx5Li4uLGV0YykiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX3NlY29uZF9zaXplLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX3NlY29uZF9zaXplLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9zZWNvbmRfc2l6ZSwKIAkiU2V0IHNlY29uZGFyeSBkZXZpY2UgbWVtb3J5IHNpemUiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2R1YWxfZmIsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfZHVhbF9mYiwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfZHVhbF9mYiwKIAkiVHVybiBvbi9vZmYgZmxhZyBvZiBkdWFsIGZyYW1lYnVmZmVyIGRldmljZXMuKERlZmF1bHQgPSBPRkYpIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfcGxhdGZvcm1fZXBpYV9kdmksCiAJIlR1cm4gb24vb2ZmIGZsYWcgb2YgRFZJIGRldmljZXMgb24gRVBJQSBib2FyZC4oRGVmYXVsdCA9IE9GRikiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2UsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSwKIAkiVHVybiBvbi9vZmYgZmxhZyBvZiBkdWFsIGVkZ2UgcGFuZWwuKERlZmF1bHQgPSBPRkYpIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9idXNfd2lkdGgsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfYnVzX3dpZHRoLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9idXNfd2lkdGgsCiAJIlNldCBidXMgd2lkdGggb2YgcGFuZWwuKERlZmF1bHQgPSAxMikiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9tb2RlLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9tb2RlLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfbW9kZSwKIAkiU2V0IEZsYXQgUGFuZWwgbW9kZShEZWZhdWx0PU9QRU5MREkpIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl92aWRlb19kZXYsIGNoYXJwLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModmlhZmJfdmlkZW9fZGV2LCAiU3BlY2lmeSB2aWRlbyBkZXZpY2VzLiIpOwotCi1tb2R1bGVfcGFyYW0odmlhZmJfbGNkX3BvcnQsIGNoYXJwLCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9sY2RfcG9ydCwgY2hhcnAsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfcG9ydCwgIlNwZWNpZnkgTENEIG91dHB1dCBwb3J0LiIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfZHZpX3BvcnQsIGNoYXJwLCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9kdmlfcG9ydCwgY2hhcnAsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kdmlfcG9ydCwgIlNwZWNpZnkgRFZJIG91dHB1dCBwb3J0LiIpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaAppbmRleCAyMjdiMDAwLi4wYzk0ZDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmgKQEAgLTM3LDUxICszNyw1MCBAQAogI2RlZmluZSBWRVJTSU9OX09TICAgICAgICAgIDAJLyogMDogZm9yIDMyIGJpdHMgT1MsIDE6IGZvciA2NCBiaXRzIE9TICovCiAjZGVmaW5lIFZFUlNJT05fTUlOT1IgICAgICAgNAogCi1zdHJ1Y3QgdmlhZmJfcGFyIHsKLQlpbnQgYnBwOwotCWludCBocmVzOwotCWludCB2cmVzOwotCWludCBsaW5lbGVuZ3RoOwotCXUzMiB4b2Zmc2V0OwotCXUzMiB5b2Zmc2V0OwotCi0Jdm9pZCBfX2lvbWVtICpmYm1lbV92aXJ0OwkvKmZyYW1lYnVmZmVyIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgKi8KLQl2b2lkIF9faW9tZW0gKmlvX3ZpcnQ7CS8qaW9zcGFjZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzICovCi0JdW5zaWduZWQgaW50IGZibWVtOwkvKmZyYW1lYnVmZmVyIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzICovCi0JdW5zaWduZWQgaW50IG1lbXNpemU7CS8qc2l6ZSBvZiBmYm1lbSAqLwotCXVuc2lnbmVkIGludCBpbzsJLyppbyBzcGFjZSBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2U7CS8qbW1pbyBiYXNlIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIG1taW9fbGVuOwkvKm1taW8gYmFzZSBsZW5ndGggKi8KLQl1MzIgZmJtZW1fZnJlZTsJCS8qIEZyZWUgRkIgbWVtb3J5ICovCi0JdTMyIGZibWVtX3VzZWQ7CQkvKiBVc2UgRkIgbWVtb3J5IHNpemUgKi8KLQl1MzIgY3Vyc29yX3N0YXJ0OwkvKiBDdXJzb3IgU3RhcnQgQWRkcmVzcyAqLwotCXUzMiBWUV9zdGFydDsJCS8qIFZpcnR1YWwgUXVldWUgU3RhcnQgQWRkcmVzcyAqLwotCXUzMiBWUV9lbmQ7CQkvKiBWaXJ0dWFsIFF1ZXVlIEVuZCBBZGRyZXNzICovCi0JdTMyIGlnYV9wYXRoOworc3RydWN0IHZpYWZiX3NoYXJlZCB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OwkvKnZpYWZiIHByb2MgZW50cnkgKi8KLQl1OCBkdW92aWV3OwkJLypJcyB3b3JraW5nIGluIGR1b3ZpZXcgbW9kZT8gKi8KIAogCS8qIEkyQyBzdHVmZiAqLwogCXN0cnVjdCB2aWFfaTJjX3N0dWZmIGkyY19zdHVmZjsKIAogCS8qIEFsbCB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBuZWVkZWQgdG8gc2V0IGVuZ2luZSAqLworCXN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gdG1kc19zZXR0aW5nX2luZm87CisJc3RydWN0IGNydF9zZXR0aW5nX2luZm9ybWF0aW9uIGNydF9zZXR0aW5nX2luZm87CisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiBsdmRzX3NldHRpbmdfaW5mbzsKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uIGx2ZHNfc2V0dGluZ19pbmZvMjsKKwlzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbiBjaGlwX2luZm87CisKKwkvKiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gc3R1ZmYgKi8KKwl2b2lkIF9faW9tZW0gKmVuZ2luZV9tbWlvOworCXUzMiBjdXJzb3JfdnJhbV9hZGRyOworCXUzMiB2cV92cmFtX2FkZHI7CS8qIHZpcnR1YWwgcXVldWUgYWRkcmVzcyBpbiB2aWRlbyByYW0gKi8KKwlpbnQgKCpod19iaXRibHQpKHZvaWQgX19pb21lbSAqZW5naW5lLCB1OCBvcCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAorCQl1OCBkc3RfYnBwLCB1MzIgZHN0X2FkZHIsIHUzMiBkc3RfcGl0Y2gsIHUzMiBkc3RfeCwgdTMyIGRzdF95LAorCQl1MzIgKnNyY19tZW0sIHUzMiBzcmNfYWRkciwgdTMyIHNyY19waXRjaCwgdTMyIHNyY194LCB1MzIgc3JjX3ksCisJCXUzMiBmZ19jb2xvciwgdTMyIGJnX2NvbG9yLCB1OCBmaWxsX3JvcCk7Cit9OworCitzdHJ1Y3QgdmlhZmJfcGFyIHsKKwl1OCBkZXB0aDsKKwl1MzIgdnJhbV9hZGRyOworCisJdW5zaWduZWQgaW50IGZibWVtOwkvKmZyYW1lYnVmZmVyIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IG1lbXNpemU7CS8qc2l6ZSBvZiBmYm1lbSAqLworCXUzMiBmYm1lbV9mcmVlOwkJLyogRnJlZSBGQiBtZW1vcnkgKi8KKwl1MzIgZmJtZW1fdXNlZDsJCS8qIFVzZSBGQiBtZW1vcnkgc2l6ZSAqLworCXUzMiBpZ2FfcGF0aDsKKworCXN0cnVjdCB2aWFmYl9zaGFyZWQgKnNoYXJlZDsKKworCS8qIEFsbCB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBuZWVkZWQgdG8gc2V0IGVuZ2luZSAqLworCS8qIGRlcHJlY2lhdGVkLCB1c2UgdGhlIG9uZXMgaW4gc2hhcmVkIGRpcmVjdGx5ICovCiAJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nX2luZm87CiAJc3RydWN0IGNydF9zZXR0aW5nX2luZm9ybWF0aW9uICpjcnRfc2V0dGluZ19pbmZvOwogCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKmx2ZHNfc2V0dGluZ19pbmZvOwogCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKmx2ZHNfc2V0dGluZ19pbmZvMjsKIAlzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbiAqY2hpcF9pbmZvOwotCi0JLyogc29tZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHZpZGVvIHBsYXlpbmcgKi8KLQlpbnQgdmlkZW9fb25fY3J0OwotCWludCB2aWRlb19vbl9kdmk7Ci0JaW50IHZpZGVvX29uX2xjZDsKLQogfTsKLXN0cnVjdCB2aWFmYl9tb2RlaW5mbyB7Ci0JdTMyIHhyZXM7Ci0JdTMyIHlyZXM7Ci0JaW50IG1vZGVfaW5kZXg7Ci19OworCiBleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CkBAIC05MSwxNCArOTAsMTIgQEAKIGV4dGVybiBpbnQgdmlhZmJfTENEMl9PTjsKIGV4dGVybiBpbnQgdmlhZmJfTENEX09OOwogZXh0ZXJuIGludCB2aWFmYl9EVklfT047Ci1leHRlcm4gaW50IHZpYWZiX2FjY2VsOwogZXh0ZXJuIGludCB2aWFmYl9ob3RwbHVnOwogZXh0ZXJuIGludCB2aWFmYl9tZW1zaXplOwogCiBleHRlcm4gaW50IHN0cmljdF9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwKIAl1bnNpZ25lZCBsb25nICpyZXMpOwogCi12b2lkIHZpYWZiX21lbW9yeV9waXRjaF9wYXRjaChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiB2b2lkIHZpYWZiX2ZpbGxfdmFyX3RpbWluZ19pbmZvKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgcmVmcmVzaCwKIAkJCSAgaW50IG1vZGVfaW5kZXgpOwogaW50IHZpYWZiX2dldF9tb2RlX2luZGV4KGludCBocmVzLCBpbnQgdnJlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMKaW5kZXggNmRjZjU4My4uYjc0ZjhhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYwpAQCAtMTAwLDEyICsxMDAsOCBAQAoge1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzMsIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzYsIDB4MDgsIDB4MDB9LAote1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KLXtWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCi17VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwoge1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I2QSwgMHhGRiwgMHg0MH0sCiB7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LApAQCAtMTU5LDE2ICsxNTUsMTIgQEAKIHtWSUFTUiwgQ1IzMCwgMHhGRiwgMHgwNH0sCiB7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjMzLCAweDdGLCAweDAwfSwKLXtWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjM2LCAweEZGLCAweDMxfSwKIHtWSUFDUiwgQ1I0MSwgMHhGRiwgMHg4MH0sCiB7VklBQ1IsIENSNDIsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjU1LCAweDgwLCAweDAwfSwKIHtWSUFDUiwgQ1I1RCwgMHg4MCwgMHgwMH0sCS8qSG9yaXpvbnRhbCBSZXRyYWNlIFN0YXJ0IGJpdFsxMV0gc2hvdWxkIGJlIDAqLwote1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwote1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwote1ZJQUNSLCBDUjY0LCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwoge1ZJQUNSLCBDUjY4LCAweEZGLCAweDY3fSwJLyogRGVmYXVsdCBGSUZPIEZvciBJR0EyICovCiB7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjZBLCAweEZELCAweDQwfSwKQEAgLTIzMyw5ICsyMjUsNiBAQAogCXtWSUFDUiwgQ1I1NSwgMHg4MCwgMHgwMH0sCiAJe1ZJQUNSLCBDUjVELCAweDgwLCAweDAwfSwKIAl7VklBQ1IsIENSMzYsIDB4RkYsIDB4MDF9LAkvKiBQb3dlciBNYW5nZW1lbnQgMyAgICAgICAgICAgICAgICAgICovCi0Je1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwotCXtWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgKi8KLQl7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCiAJe1ZJQUNSLCBDUjY4LCAweEZGLCAweDY3fSwJLyogRGVmYXVsdCBGSUZPIEZvciBJR0EyICAgICAgICAgICAgICAqLwogCXtWSUFDUiwgQ1I2QSwgMHgyMCwgMHgyMH0sCS8qIEV4dGVuZGVkIEZJRk8gT24gICAgICAgICAgICAgICAgICAgKi8KIAl7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICovCkBAIC0yODUsMTQgKzI3NCw5IEBACiB7VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSMzQsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNiwgMHgwOCwgMHgwMH0sCiB7VklBQ1IsIENSNDcsIDB4QzgsIDB4MDB9LAkvKiBDbGVhciBWQ0sgUGx1cy4gKi8KLXtWSUFDUiwgQ1I2MiwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCi17VklBQ1IsIENSNjMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwote1ZJQUNSLCBDUjY0LCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KLXtWSUFDUiwgQ1JBMywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCiB7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKIHtWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCkBAIC0zMjUsNjkgKzMwOSw2MSBAQAoge1ZJQUNSLCBDUjk2LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I5NywgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSOTksIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1JEMiwgMHhGRiwgMHhGRn0JLyogVE1EUy9MVkRTIGNvbnRyb2wgcmVnaXN0ZXIuICAgICAgICAgKi8KK3tWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0KIH07CiAKLS8qIEZvciBWVDMzNTM6IENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCi1zdHJ1Y3QgaW9fcmVnIFZYODAwX01vZGVYcmVnc1tdID0geyB7VklBU1IsIFNSMTAsIDB4RkYsIDB4MDF9LAorc3RydWN0IGlvX3JlZyBWWDg1NV9Nb2RlWHJlZ3NbXSA9IHsKK3tWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCiB7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAoge1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKIHtWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCiB7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAoge1ZJQVNSLCBTUjFBLCAweEZCLCAweDA4fSwKIHtWSUFTUiwgU1IxQiwgMHhGRiwgMHhGMH0sCi17VklBU1IsIFNSMUUsIDB4RkYsIDB4MDF9LAote1ZJQVNSLCBTUjJBLCAweEZGLCAweDAwfSwKK3tWSUFTUiwgU1IxRSwgMHgwNywgMHgwMX0sCit7VklBU1IsIFNSMkEsIDB4RjAsIDB4MDB9LAore1ZJQVNSLCBTUjU4LCAweEZGLCAweDAwfSwKK3tWSUFTUiwgU1I1OSwgMHhGRiwgMHgwMH0sCiB7VklBU1IsIFNSMkQsIDB4RkYsIDB4RkZ9LAkvKiBWQ0sgYW5kIExDSyBQTEwgcG93ZXIgb24uICAgICAgICAgICAqLwore1ZJQUNSLCBDUjA5LCAweEZGLCAweDAwfSwJLyogSW5pdGlhbCBDUjA5PTAqLwore1ZJQUNSLCBDUjExLCAweDhGLCAweDAwfSwJLyogSUdBMSBpbml0aWFsICBWZXJ0aWNhbCBlbmQgICAgICAgKi8KK3tWSUFDUiwgQ1IxNywgMHg3RiwgMHgwMH0sIAkvKiBJR0ExIENSVCBNb2RlIGNvbnRyb2wgaW5pdCAgICovCiB7VklBQ1IsIENSMEEsIDB4RkYsIDB4MUV9LAkvKiBDdXJzb3IgU3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjBCLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1IwRSwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhdGlvbiBIaWdoICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSMzQsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjMzLCAweDdGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzYsIDB4MDgsIDB4MDB9LAote1ZJQUNSLCBDUjQ3LCAweEM4LCAweDAwfSwJLyogQ2xlYXIgVkNLIFBsdXMuICovCi17VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwote1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KLXtWSUFDUiwgQ1I2NCwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCi17VklBQ1IsIENSQTMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwoge1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1I2QSwgMHhGRiwgMHg0MH0sCit7VklBQ1IsIENSNkEsIDB4RkQsIDB4NjB9LAoge1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICAgICAgICAgICAgICovCi17VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICAgICAgICAgICAgICovCi17VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICAgICAgICAgICAgICovCi17VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMiAgICAgICAgICAgICovCi17VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sCS8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwJLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1JENCwgMHhGRiwgMHg4MX0sCS8qIFNlY29uZCBwb3dlciBzZXF1ZW5jZSBjb250cm9sICAgICAgICovCi17VklBQ1IsIENSOEIsIDB4RkYsIDB4NUR9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAwICAgICAgICAqLwote1ZJQUNSLCBDUjhDLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMSAgICAgICAgKi8KLXtWSUFDUiwgQ1I4RCwgMHhGRiwgMHg2Rn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDIgICAgICAgICovCi17VklBQ1IsIENSOEUsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAzICAgICAgICAqLwote1ZJQUNSLCBDUjhGLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNCAgICAgICAgKi8KLXtWSUFDUiwgQ1I5MCwgMHhGRiwgMHgwMX0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDUgICAgICAgICovCi17VklBQ1IsIENSOTEsIDB4RkYsIDB4ODB9LAkvKiAyNC8xMiBiaXQgTFZEUyBEYXRhIG9mZiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdBLCAweEZGLCAweDAxfSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QiwgMHhGRiwgMHgwMn0sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAyICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0MsIDB4RkYsIDB4MDN9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdELCAweEZGLCAweDA0fSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDQgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RSwgMHhGRiwgMHgwN30sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA1ICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0YsIDB4RkYsIDB4MEF9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgwLCAweEZGLCAweDBEfSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDcgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MSwgMHhGRiwgMHgxM30sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA4ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODIsIDB4RkYsIDB4MTZ9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgzLCAweEZGLCAweDE5fSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEwICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NCwgMHhGRiwgMHgxQ30sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMSAgICAgICAgICAgICovCit7VklBQ1IsIENSODUsIDB4RkYsIDB4MUR9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTIgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg2LCAweEZGLCAweDFFfSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEzICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NywgMHhGRiwgMHgxRn0sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxNCAgICAgICAgICAgICovCit7VklBQ1IsIENSODgsIDB4RkYsIDB4NDB9LCAgICAgICAgICAvKiBMQ0QgUGFuZWwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg5LCAweEZGLCAweDAwfSwgICAgICAgICAgLyogTENEIFRpbWluZyBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QSwgMHhGRiwgMHg4OH0sICAgICAgICAgIC8qIExDRCBUaW1pbmcgQ29udHJvbCAxICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSRDQsIDB4RkYsIDB4ODF9LCAgICAgICAgICAvKiBTZWNvbmQgcG93ZXIgc2VxdWVuY2UgY29udHJvbCAgICAgICAqLwore1ZJQUNSLCBDUjkxLCAweEZGLCAweDgwfSwgICAgICAgICAgLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSOTcsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjk5LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSRDIsIDB4RkYsIDB4RkZ9CS8qIFRNRFMvTFZEUyBjb250cm9sIHJlZ2lzdGVyLiAgICAgICAgICovCit7VklBQ1IsIENSRDIsIDB4RkYsIDB4RkZ9ICAgICAgICAgICAvKiBUTURTL0xWRFMgY29udHJvbCByZWdpc3Rlci4gICAgICAgICAqLwogfTsKIAogLyogVmlkZW8gTW9kZSBUYWJsZSAqLwpAQCAtNDAxLDcgKzM3Nyw2IEBACiB7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAogCiB7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzYsIDB4MDgsIDB4MDB9LAoge1ZJQUNSLCBDUjZBLCAweEZGLCAweDgwfSwKQEAgLTEwODQsMyArMTA1OSwxNCBAQAogCXtWSUFfUkVTXzEyODBYNzIwLCBDRUFNMTI4MHg3MjAsIEFSUkFZX1NJWkUoQ0VBTTEyODB4NzIwKX0sCiAJe1ZJQV9SRVNfMTkyMFgxMDgwLCBDRUFNMTkyMHgxMDgwLCBBUlJBWV9TSVpFKENFQU0xOTIweDEwODApfQogfTsKKworaW50IE5VTV9UT1RBTF9SRVNfTUFQX1JFRlJFU0ggPSBBUlJBWV9TSVpFKHJlc19tYXBfcmVmcmVzaF90YmwpOworaW50IE5VTV9UT1RBTF9DRUFfTU9ERVMgPSBBUlJBWV9TSVpFKENFQV9IRE1JX01vZGVzKTsKK2ludCBOVU1fVE9UQUxfQ040MDBfTW9kZVhyZWdzID0gQVJSQVlfU0laRShDTjQwMF9Nb2RlWHJlZ3MpOworaW50IE5VTV9UT1RBTF9DTjcwMF9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKENONzAwX01vZGVYcmVncyk7CitpbnQgTlVNX1RPVEFMX0tNNDAwX01vZGVYcmVncyA9IEFSUkFZX1NJWkUoS000MDBfTW9kZVhyZWdzKTsKK2ludCBOVU1fVE9UQUxfQ1g3MDBfTW9kZVhyZWdzID0gQVJSQVlfU0laRShDWDcwMF9Nb2RlWHJlZ3MpOworaW50IE5VTV9UT1RBTF9WWDg1NV9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKFZYODU1X01vZGVYcmVncyk7CitpbnQgTlVNX1RPVEFMX0NMRTI2Nl9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKENMRTI2Nl9Nb2RlWHJlZ3MpOworaW50IE5VTV9UT1RBTF9QQVRDSF9NT0RFID0gQVJSQVlfU0laRShyZXNfcGF0Y2hfdGFibGUpOworaW50IE5VTV9UT1RBTF9NT0RFVEFCTEUgPSBBUlJBWV9TSVpFKENMRTI2Nk1vZGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaAppbmRleCAxYTVkZTUwLi5hOWQ2NTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oCkBAIC01MCwxMjggKzUwLDM1IEBACiAJaW50IHZtb2RlX3JlZnJlc2g7CiB9OwogCi0jZGVmaW5lIE5VTV9UT1RBTF9SRVNfTUFQX1JFRlJFU0ggQVJSQVlfU0laRShyZXNfbWFwX3JlZnJlc2hfdGJsKQotI2RlZmluZSBOVU1fVE9UQUxfQ0VBX01PREVTICBBUlJBWV9TSVpFKENFQV9IRE1JX01vZGVzKQotI2RlZmluZSBOVU1fVE9UQUxfQ040MDBfTW9kZVhyZWdzIEFSUkFZX1NJWkUoQ040MDBfTW9kZVhyZWdzKQotI2RlZmluZSBOVU1fVE9UQUxfQ043MDBfTW9kZVhyZWdzIEFSUkFZX1NJWkUoQ043MDBfTW9kZVhyZWdzKQotI2RlZmluZSBOVU1fVE9UQUxfS000MDBfTW9kZVhyZWdzIEFSUkFZX1NJWkUoS000MDBfTW9kZVhyZWdzKQotI2RlZmluZSBOVU1fVE9UQUxfQ1g3MDBfTW9kZVhyZWdzIEFSUkFZX1NJWkUoQ1g3MDBfTW9kZVhyZWdzKQotI2RlZmluZSBOVU1fVE9UQUxfVlg4MDBfTW9kZVhyZWdzIEFSUkFZX1NJWkUoVlg4MDBfTW9kZVhyZWdzKQotI2RlZmluZSBOVU1fVE9UQUxfQ0xFMjY2X01vZGVYcmVncyBBUlJBWV9TSVpFKENMRTI2Nl9Nb2RlWHJlZ3MpCi0jZGVmaW5lIE5VTV9UT1RBTF9QQVRDSF9NT0RFIEFSUkFZX1NJWkUocmVzX3BhdGNoX3RhYmxlKQotI2RlZmluZSBOVU1fVE9UQUxfTU9ERVRBQkxFIEFSUkFZX1NJWkUoQ0xFMjY2TW9kZXMpCitleHRlcm4gaW50IE5VTV9UT1RBTF9SRVNfTUFQX1JFRlJFU0g7CitleHRlcm4gaW50IE5VTV9UT1RBTF9DRUFfTU9ERVM7CitleHRlcm4gaW50IE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3M7CitleHRlcm4gaW50IE5VTV9UT1RBTF9DTjcwMF9Nb2RlWHJlZ3M7CitleHRlcm4gaW50IE5VTV9UT1RBTF9LTTQwMF9Nb2RlWHJlZ3M7CitleHRlcm4gaW50IE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3M7CitleHRlcm4gaW50IE5VTV9UT1RBTF9WWDg1NV9Nb2RlWHJlZ3M7CitleHRlcm4gaW50IE5VTV9UT1RBTF9DTEUyNjZfTW9kZVhyZWdzOworZXh0ZXJuIGludCBOVU1fVE9UQUxfUEFUQ0hfTU9ERTsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX01PREVUQUJMRTsKIAogLyoqKioqKioqKioqKioqKioqKioqLwogLyogTW9kZSBUYWJsZSAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqLwogCi0vKiA0ODB4NjQwICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE00ODB4NjQwWzFdOwotLyogNjQweDQ4MCovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE02NDB4NDgwWzVdOwotLyo3MjB4NDgwIChHVEYpKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTcyMHg0ODBbMV07Ci0vKjcyMHg1NzYgKEdURikqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNNzIweDU3NlsxXTsKLS8qIDgwMHg0ODAgKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg0ODBbMV07Ci0vKiA4MDB4NjAwKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg2MDBbNV07Ci0vKiA4NDh4NDgwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NDh4NDgwWzFdOwotLyo4NTZ4NDgwIChHVEYpIGNvbnZlcnQgdG8gODUyeDQ4MCovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NTJ4NDgwWzFdOwotLyoxMDI0eDUxMiAoR1RGKSovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDUxMlsxXTsKLS8qIDEwMjR4NjAwKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NjAwWzFdOwotLyogMTAyNHg3NjgqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg3NjhbNF07Ci0vKiAxMTUyeDg2NCovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDg2NFsxXTsKLS8qIDEyODB4NzIwIChIRE1JIDcyMFApKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NzIwWzJdOwotLyoxMjgweDc2OCAoR1RGKSovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDc2OFsyXTsKLS8qIDEyODB4ODAwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDgwMFsxXTsKLS8qMTI4MHg5NjAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg5NjBbMV07Ci0vKiAxMjgweDEwMjQqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHgxMDI0WzNdOwotLyogMTM2OHg3NjggKEdURikgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjh4NzY4WzFdOwotLyoxNDQweDEwNTAgKEdURikqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHgxMDUwWzFdOwotLyogMTYwMHgxMjAwKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4MTIwMFsyXTsKLS8qIDE2ODB4MTA1MCAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTY4MHgxMDUwWzJdOwotLyogMTY4MHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTY4MHgxMDUwX1JCWzFdOwotLyogMTkyMHgxMDgwIChDVlQpKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTA4MFsxXTsKLS8qIDE5MjB4MTA4MCAoQ1ZUIHdpdGggUmVkdWNlIEJsYW5raW5nKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMDgwX1JCWzFdOwotLyogMTkyMHgxNDQwKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTQ0MFsyXTsKLS8qIDE0MDB4MTA1MCAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwWzJdOwotLyogMTQwMHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwX1JCWzFdOwotLyogOTYweDYwMCAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNOTYweDYwMFsxXTsKLS8qIDEwMDB4NjAwIChHVEYpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDAweDYwMFsxXTsKLS8qIDEwMjR4NTc2IChHVEYpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDU3NlsxXTsKLS8qIDEwODh4NjEyIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDg4eDYxMlsxXTsKLS8qIDExNTJ4NzIwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDcyMFsxXTsKLS8qIDEyMDB4NzIwIChHVEYpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjAweDcyMFsxXTsKLS8qIDEyODB4NjAwIChHVEYpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDYwMFsxXTsKLS8qIDEzNjB4NzY4IChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzYweDc2OFsxXTsKLS8qIDEzNjB4NzY4IChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2MHg3NjhfUkJbMV07Ci0vKiAxMzY2eDc2OCAoR1RGKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2Nng3NjhbMl07Ci0vKiAxNDQweDkwMCAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHg5MDBbMl07Ci0vKiAxNDQweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0NDB4OTAwX1JCWzFdOwotLyogMTYwMHg5MDAgKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwWzFdOwotLyogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjAweDkwMF9SQlsxXTsKLS8qIDE2MDB4MTAyNCAoR1RGKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMDI0WzFdOwotLyogMTc5MngxMzQ0IChETVQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNzkyeDEzNDRbMV07Ci0vKiAxODU2eDEzOTIgKERNVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE4NTZ4MTM5MlsxXTsKLS8qIDE5MjB4MTIwMCAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMjAwWzFdOwotLyogMTkyMHgxMjAwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEyMDBfUkJbMV07Ci0vKiAyMDQ4eDE1MzYgKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTIwNDh4MTUzNlsxXTsKLWV4dGVybiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0xFMjY2TW9kZXNbNDddOwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTI4MHg3MjBbMV07Ci1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xOTIweDEwODBbMV07Ci1leHRlcm4gc3RydWN0IFZpZGVvTW9kZVRhYmxlIENFQV9IRE1JX01vZGVzWzJdOworZXh0ZXJuIHN0cnVjdCBWaWRlb01vZGVUYWJsZSBDTEUyNjZNb2Rlc1tdOworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTI4MHg3MjBbXTsKK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTE5MjB4MTA4MFtdOworZXh0ZXJuIHN0cnVjdCBWaWRlb01vZGVUYWJsZSBDRUFfSERNSV9Nb2Rlc1tdOwogCi1leHRlcm4gc3RydWN0IHJlc19tYXBfcmVmcmVzaCByZXNfbWFwX3JlZnJlc2hfdGJsWzYxXTsKLWV4dGVybiBzdHJ1Y3QgaW9fcmVnIENONDAwX01vZGVYcmVnc1s1Ml07Ci1leHRlcm4gc3RydWN0IGlvX3JlZyBDTjcwMF9Nb2RlWHJlZ3NbNjZdOwotZXh0ZXJuIHN0cnVjdCBpb19yZWcgS000MDBfTW9kZVhyZWdzWzU1XTsKLWV4dGVybiBzdHJ1Y3QgaW9fcmVnIENYNzAwX01vZGVYcmVnc1s1OF07Ci1leHRlcm4gc3RydWN0IGlvX3JlZyBWWDgwMF9Nb2RlWHJlZ3NbNThdOwotZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ0xFMjY2X01vZGVYcmVnc1szMl07Ci1leHRlcm4gc3RydWN0IGlvX3JlZyBQTTEwMjR4NzY4WzJdOwotZXh0ZXJuIHN0cnVjdCBwYXRjaF90YWJsZSByZXNfcGF0Y2hfdGFibGVbMV07CitleHRlcm4gc3RydWN0IHJlc19tYXBfcmVmcmVzaCByZXNfbWFwX3JlZnJlc2hfdGJsW107CitleHRlcm4gc3RydWN0IGlvX3JlZyBDTjQwMF9Nb2RlWHJlZ3NbXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENONzAwX01vZGVYcmVnc1tdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgS000MDBfTW9kZVhyZWdzW107CitleHRlcm4gc3RydWN0IGlvX3JlZyBDWDcwMF9Nb2RlWHJlZ3NbXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIFZYODAwX01vZGVYcmVnc1tdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgVlg4NTVfTW9kZVhyZWdzW107CitleHRlcm4gc3RydWN0IGlvX3JlZyBDTEUyNjZfTW9kZVhyZWdzW107CitleHRlcm4gc3RydWN0IGlvX3JlZyBQTTEwMjR4NzY4W107CitleHRlcm4gc3RydWN0IHBhdGNoX3RhYmxlIHJlc19wYXRjaF90YWJsZVtdOwogZXh0ZXJuIHN0cnVjdCBWUElUVGFibGUgVlBJVDsKICNlbmRpZiAvKiBfX1ZJQU1PREVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92dDE2MzYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jCmluZGV4IDMyMmE5ZjkuLmE2YjM3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jCkBAIC0yNyw3ICsyNyw3IEBACiB7CiAJdTggZGF0YTsKIAotCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IHBsdmRzX2NoaXBfaW5mby0+aTJjX3BvcnQ7CisJdmlhcGFyaW5mby0+c2hhcmVkLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBwbHZkc19jaGlwX2luZm8tPmkyY19wb3J0OwogCXZpYWZiX2kyY19yZWFkYnl0ZShwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9zbGF2ZV9hZGRyLCBpbmRleCwgJmRhdGEpOwogCiAJcmV0dXJuIGRhdGE7CkBAIC0zOSw3ICszOSw3IEBACiB7CiAJaW50IGluZGV4LCBkYXRhOwogCi0JdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0gcGx2ZHNfY2hpcF9pbmZvLT5pMmNfcG9ydDsKKwl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9IHBsdmRzX2NoaXBfaW5mby0+aTJjX3BvcnQ7CiAKIAlpbmRleCA9IGlvX2RhdGEuSW5kZXg7CiAJZGF0YSA9IHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCmluZGV4IDI2YjI3ODIuLjIwMGMyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwpAQCAtMTksNiArMTksNyBAQAogICovCiAvLyNkZWZpbmUgREVCVUcKICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2JhbGxvb24uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtODQsNyArODUsNyBAQAogCWluaXRfY29tcGxldGlvbigmdmItPmFja2VkKTsKIAogCS8qIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhZGQgb25lIGJ1ZmZlciB0byBhbiBlbXB0eSBxdWV1ZS4gKi8KLQlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgJnNnLCAxLCAwLCB2YikgIT0gMCkKKwlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgJnNnLCAxLCAwLCB2YikgPCAwKQogCQlCVUcoKTsKIAl2cS0+dnFfb3BzLT5raWNrKHZxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCmluZGV4IDI0OGUwMGUuLjRhMWYxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAKIAkvKiBNU0ktWCB2ZWN0b3IgKG9yIG5vbmUpICovCi0JdW5zaWduZWQgdmVjdG9yOworCXVuc2lnbmVkIG1zaXhfdmVjdG9yOwogfTsKIAogLyogUXVtcmFuZXQgZG9uYXRlZCB0aGVpciB2ZW5kb3IgSUQgZm9yIGRldmljZXMgMHgxMDAwIHRocnUgMHgxMEZGLiAqLwpAQCAtMjgwLDI1ICsyODAsMTQgQEAKIAl2cF9kZXYtPm1zaXhfZW50cmllcyA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgdnBfcmVxdWVzdF92ZWN0b3JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBpbnQgbnZlY3RvcnMsCi0JCQkgICAgICBib29sIHBlcl92cV92ZWN0b3JzKQorc3RhdGljIGludCB2cF9yZXF1ZXN0X21zaXhfdmVjdG9ycyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgaW50IG52ZWN0b3JzLAorCQkJCSAgIGJvb2wgcGVyX3ZxX3ZlY3RvcnMpCiB7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodmRldik7CiAJY29uc3QgY2hhciAqbmFtZSA9IGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KTsKIAl1bnNpZ25lZCBpLCB2OwogCWludCBlcnIgPSAtRU5PTUVNOwogCi0JaWYgKCFudmVjdG9ycykgewotCQkvKiBDYW4ndCBhbGxvY2F0ZSBNU0ktWCB2ZWN0b3JzLCB1c2UgcmVndWxhciBpbnRlcnJ1cHQgKi8KLQkJdnBfZGV2LT5tc2l4X3ZlY3RvcnMgPSAwOwotCQllcnIgPSByZXF1ZXN0X2lycSh2cF9kZXYtPnBjaV9kZXYtPmlycSwgdnBfaW50ZXJydXB0LAotCQkJCSAgSVJRRl9TSEFSRUQsIG5hbWUsIHZwX2Rldik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQl2cF9kZXYtPmludHhfZW5hYmxlZCA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQogCXZwX2Rldi0+bXNpeF9lbnRyaWVzID0ga21hbGxvYyhudmVjdG9ycyAqIHNpemVvZiAqdnBfZGV2LT5tc2l4X2VudHJpZXMsCiAJCQkJICAgICAgIEdGUF9LRVJORUwpOwogCWlmICghdnBfZGV2LT5tc2l4X2VudHJpZXMpCkBAIC0zMTEsNiArMzAwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnZlY3RvcnM7ICsraSkKIAkJdnBfZGV2LT5tc2l4X2VudHJpZXNbaV0uZW50cnkgPSBpOwogCisJLyogcGNpX2VuYWJsZV9tc2l4IHJldHVybnMgcG9zaXRpdmUgaWYgd2UgY2FuJ3QgZ2V0IHRoaXMgbWFueS4gKi8KIAllcnIgPSBwY2lfZW5hYmxlX21zaXgodnBfZGV2LT5wY2lfZGV2LCB2cF9kZXYtPm1zaXhfZW50cmllcywgbnZlY3RvcnMpOwogCWlmIChlcnIgPiAwKQogCQllcnIgPSAtRU5PU1BDOwpAQCAtMzU2LDEwICszNDYsMjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHZpcnRxdWV1ZSAqdnBfZmluZF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW5kZXgsCi0JCQkJICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqdnEpLAotCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICB1MTYgdmVjdG9yKQorc3RhdGljIGludCB2cF9yZXF1ZXN0X2ludHgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2ZGV2KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+cGNpX2Rldi0+aXJxLCB2cF9pbnRlcnJ1cHQsCisJCQkgIElSUUZfU0hBUkVELCBkZXZfbmFtZSgmdmRldi0+ZGV2KSwgdnBfZGV2KTsKKwlpZiAoIWVycikKKwkJdnBfZGV2LT5pbnR4X2VuYWJsZWQgPSAxOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpzZXR1cF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW5kZXgsCisJCQkJICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICB1MTYgbXNpeF92ZWMpCiB7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodmRldik7CiAJc3RydWN0IHZpcnRpb19wY2lfdnFfaW5mbyAqaW5mbzsKQEAgLTM4NCw3ICszODYsNyBAQAogCiAJaW5mby0+cXVldWVfaW5kZXggPSBpbmRleDsKIAlpbmZvLT5udW0gPSBudW07Ci0JaW5mby0+dmVjdG9yID0gdmVjdG9yOworCWluZm8tPm1zaXhfdmVjdG9yID0gbXNpeF92ZWM7CiAKIAlzaXplID0gUEFHRV9BTElHTih2cmluZ19zaXplKG51bSwgVklSVElPX1BDSV9WUklOR19BTElHTikpOwogCWluZm8tPnF1ZXVlID0gYWxsb2NfcGFnZXNfZXhhY3Qoc2l6ZSwgR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKQEAgLTQwOCwxMCArNDEwLDEwIEBACiAJdnEtPnByaXYgPSBpbmZvOwogCWluZm8tPnZxID0gdnE7CiAKLQkgaWYgKHZlY3RvciAhPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikgewotCQlpb3dyaXRlMTYodmVjdG9yLCB2cF9kZXYtPmlvYWRkciArIFZJUlRJT19NU0lfUVVFVUVfVkVDVE9SKTsKLQkJdmVjdG9yID0gaW9yZWFkMTYodnBfZGV2LT5pb2FkZHIgKyBWSVJUSU9fTVNJX1FVRVVFX1ZFQ1RPUik7Ci0JCWlmICh2ZWN0b3IgPT0gVklSVElPX01TSV9OT19WRUNUT1IpIHsKKwlpZiAobXNpeF92ZWMgIT0gVklSVElPX01TSV9OT19WRUNUT1IpIHsKKwkJaW93cml0ZTE2KG1zaXhfdmVjLCB2cF9kZXYtPmlvYWRkciArIFZJUlRJT19NU0lfUVVFVUVfVkVDVE9SKTsKKwkJbXNpeF92ZWMgPSBpb3JlYWQxNih2cF9kZXYtPmlvYWRkciArIFZJUlRJT19NU0lfUVVFVUVfVkVDVE9SKTsKKwkJaWYgKG1zaXhfdmVjID09IFZJUlRJT19NU0lfTk9fVkVDVE9SKSB7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIG91dF9hc3NpZ247CiAJCX0KQEAgLTQ3Miw3ICs0NzQsOCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cSwgbiwgJnZkZXYtPnZxcywgbGlzdCkgewogCQlpbmZvID0gdnEtPnByaXY7CiAJCWlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzKQotCQkJZnJlZV9pcnEodnBfZGV2LT5tc2l4X2VudHJpZXNbaW5mby0+dmVjdG9yXS52ZWN0b3IsIHZxKTsKKwkJCWZyZWVfaXJxKHZwX2Rldi0+bXNpeF9lbnRyaWVzW2luZm8tPm1zaXhfdmVjdG9yXS52ZWN0b3IsCisJCQkJIHZxKTsKIAkJdnBfZGVsX3ZxKHZxKTsKIAl9CiAJdnBfZGV2LT5wZXJfdnFfdmVjdG9ycyA9IGZhbHNlOwpAQCAtNDg0LDM4ICs0ODcsNTggQEAKIAkJCSAgICAgIHN0cnVjdCB2aXJ0cXVldWUgKnZxc1tdLAogCQkJICAgICAgdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10sCiAJCQkgICAgICBjb25zdCBjaGFyICpuYW1lc1tdLAotCQkJICAgICAgaW50IG52ZWN0b3JzLAorCQkJICAgICAgYm9vbCB1c2VfbXNpeCwKIAkJCSAgICAgIGJvb2wgcGVyX3ZxX3ZlY3RvcnMpCiB7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodmRldik7Ci0JdTE2IHZlY3RvcjsKLQlpbnQgaSwgZXJyLCBhbGxvY2F0ZWRfdmVjdG9yczsKKwl1MTYgbXNpeF92ZWM7CisJaW50IGksIGVyciwgbnZlY3RvcnMsIGFsbG9jYXRlZF92ZWN0b3JzOwogCi0JZXJyID0gdnBfcmVxdWVzdF92ZWN0b3JzKHZkZXYsIG52ZWN0b3JzLCBwZXJfdnFfdmVjdG9ycyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcl9yZXF1ZXN0OworCWlmICghdXNlX21zaXgpIHsKKwkJLyogT2xkIHN0eWxlOiBvbmUgbm9ybWFsIGludGVycnVwdCBmb3IgY2hhbmdlIGFuZCBhbGwgdnFzLiAqLworCQllcnIgPSB2cF9yZXF1ZXN0X2ludHgodmRldik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yX3JlcXVlc3Q7CisJfSBlbHNlIHsKKwkJaWYgKHBlcl92cV92ZWN0b3JzKSB7CisJCQkvKiBCZXN0IG9wdGlvbjogb25lIGZvciBjaGFuZ2UgaW50ZXJydXB0LCBvbmUgcGVyIHZxLiAqLworCQkJbnZlY3RvcnMgPSAxOworCQkJZm9yIChpID0gMDsgaSA8IG52cXM7ICsraSkKKwkJCQlpZiAoY2FsbGJhY2tzW2ldKQorCQkJCQkrK252ZWN0b3JzOworCQl9IGVsc2UgeworCQkJLyogU2Vjb25kIGJlc3Q6IG9uZSBmb3IgY2hhbmdlLCBzaGFyZWQgZm9yIGFsbCB2cXMuICovCisJCQludmVjdG9ycyA9IDI7CisJCX0KKworCQllcnIgPSB2cF9yZXF1ZXN0X21zaXhfdmVjdG9ycyh2ZGV2LCBudmVjdG9ycywgcGVyX3ZxX3ZlY3RvcnMpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcl9yZXF1ZXN0OworCX0KIAogCXZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMgPSBwZXJfdnFfdmVjdG9yczsKIAlhbGxvY2F0ZWRfdmVjdG9ycyA9IHZwX2Rldi0+bXNpeF91c2VkX3ZlY3RvcnM7CiAJZm9yIChpID0gMDsgaSA8IG52cXM7ICsraSkgewogCQlpZiAoIWNhbGxiYWNrc1tpXSB8fCAhdnBfZGV2LT5tc2l4X2VuYWJsZWQpCi0JCQl2ZWN0b3IgPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUjsKKwkJCW1zaXhfdmVjID0gVklSVElPX01TSV9OT19WRUNUT1I7CiAJCWVsc2UgaWYgKHZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMpCi0JCQl2ZWN0b3IgPSBhbGxvY2F0ZWRfdmVjdG9ycysrOworCQkJbXNpeF92ZWMgPSBhbGxvY2F0ZWRfdmVjdG9ycysrOwogCQllbHNlCi0JCQl2ZWN0b3IgPSBWUF9NU0lYX1ZRX1ZFQ1RPUjsKLQkJdnFzW2ldID0gdnBfZmluZF92cSh2ZGV2LCBpLCBjYWxsYmFja3NbaV0sIG5hbWVzW2ldLCB2ZWN0b3IpOworCQkJbXNpeF92ZWMgPSBWUF9NU0lYX1ZRX1ZFQ1RPUjsKKwkJdnFzW2ldID0gc2V0dXBfdnEodmRldiwgaSwgY2FsbGJhY2tzW2ldLCBuYW1lc1tpXSwgbXNpeF92ZWMpOwogCQlpZiAoSVNfRVJSKHZxc1tpXSkpIHsKIAkJCWVyciA9IFBUUl9FUlIodnFzW2ldKTsKIAkJCWdvdG8gZXJyb3JfZmluZDsKIAkJfQogCQkvKiBhbGxvY2F0ZSBwZXItdnEgaXJxIGlmIGF2YWlsYWJsZSBhbmQgbmVjZXNzYXJ5ICovCi0JCWlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzICYmIHZlY3RvciAhPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikgewotCQkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW3ZlY3Rvcl0sIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAotCQkJCSAiJXMtJXMiLCBkZXZfbmFtZSgmdnBfZGV2LT52ZGV2LmRldiksIG5hbWVzW2ldKTsKLQkJCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAotCQkJCQkgIHZyaW5nX2ludGVycnVwdCwgMCwKLQkJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbdmVjdG9yXSwgdnFzW2ldKTsKKwkJaWYgKHZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMpIHsKKwkJCXNucHJpbnRmKHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCisJCQkJIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAorCQkJCSAiJXMtJXMiLAorCQkJCSBkZXZfbmFtZSgmdnBfZGV2LT52ZGV2LmRldiksIG5hbWVzW2ldKTsKKwkJCWVyciA9IHJlcXVlc3RfaXJxKG1zaXhfdmVjLCB2cmluZ19pbnRlcnJ1cHQsIDAsCisJCQkJCSAgdnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKKwkJCQkJICB2cXNbaV0pOwogCQkJaWYgKGVycikgewogCQkJCXZwX2RlbF92cSh2cXNbaV0pOwogCQkJCWdvdG8gZXJyb3JfZmluZDsKQEAgLTUzNywyOCArNTYwLDIwIEBACiAJCSAgICAgICB2cV9jYWxsYmFja190ICpjYWxsYmFja3NbXSwKIAkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWVzW10pCiB7Ci0JaW50IHZlY3RvcnMgPSAwOwotCWludCBpLCB1bmluaXRpYWxpemVkX3ZhcihlcnIpOworCWludCBlcnI7CiAKLQkvKiBIb3cgbWFueSB2ZWN0b3JzIHdvdWxkIHdlIGxpa2U/ICovCi0JZm9yIChpID0gMDsgaSA8IG52cXM7ICsraSkKLQkJaWYgKGNhbGxiYWNrc1tpXSkKLQkJCSsrdmVjdG9yczsKLQotCS8qIFdlIHdhbnQgYXQgbW9zdCBvbmUgdmVjdG9yIHBlciBxdWV1ZSBhbmQgb25lIGZvciBjb25maWcgY2hhbmdlcy4gKi8KLQllcnIgPSB2cF90cnlfdG9fZmluZF92cXModmRldiwgbnZxcywgdnFzLCBjYWxsYmFja3MsIG5hbWVzLAotCQkJCSB2ZWN0b3JzICsgMSwgdHJ1ZSk7CisJLyogVHJ5IE1TSS1YIHdpdGggb25lIHZlY3RvciBwZXIgcXVldWUuICovCisJZXJyID0gdnBfdHJ5X3RvX2ZpbmRfdnFzKHZkZXYsIG52cXMsIHZxcywgY2FsbGJhY2tzLCBuYW1lcywgdHJ1ZSwgdHJ1ZSk7CiAJaWYgKCFlcnIpCiAJCXJldHVybiAwOwotCS8qIEZhbGxiYWNrIHRvIHNlcGFyYXRlIHZlY3RvcnMgZm9yIGNvbmZpZyBhbmQgYSBzaGFyZWQgZm9yIHF1ZXVlcy4gKi8KKwkvKiBGYWxsYmFjazogTVNJLVggd2l0aCBvbmUgdmVjdG9yIGZvciBjb25maWcsIG9uZSBzaGFyZWQgZm9yIHF1ZXVlcy4gKi8KIAllcnIgPSB2cF90cnlfdG9fZmluZF92cXModmRldiwgbnZxcywgdnFzLCBjYWxsYmFja3MsIG5hbWVzLAotCQkJCSAyLCBmYWxzZSk7CisJCQkJIHRydWUsIGZhbHNlKTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIDA7CiAJLyogRmluYWxseSBmYWxsIGJhY2sgdG8gcmVndWxhciBpbnRlcnJ1cHRzLiAqLwotCWVyciA9IHZwX3RyeV90b19maW5kX3Zxcyh2ZGV2LCBudnFzLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMsCi0JCQkJIDAsIGZhbHNlKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiB2cF90cnlfdG9fZmluZF92cXModmRldiwgbnZxcywgdnFzLCBjYWxsYmFja3MsIG5hbWVzLAorCQkJCSAgZmFsc2UsIGZhbHNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fcGNpX2NvbmZpZ19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBhODgyZjI2Li5mNTM2MDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTIwOCw3ICsyMDgsMTEgQEAKIAogCXByX2RlYnVnKCJBZGRlZCBidWZmZXIgaGVhZCAlaSB0byAlcFxuIiwgaGVhZCwgdnEpOwogCUVORF9VU0UodnEpOwotCXJldHVybiAwOworCisJLyogSWYgd2UncmUgaW5kaXJlY3QsIHdlIGNhbiBmaXQgbWFueSAoYXNzdW1pbmcgbm90IE9PTSkuICovCisJaWYgKHZxLT5pbmRpcmVjdCkKKwkJcmV0dXJuIHZxLT5udW1fZnJlZSA/IHZxLT52cmluZy5udW0gOiAwOworCXJldHVybiB2cS0+bnVtX2ZyZWU7CiB9CiAKIHN0YXRpYyB2b2lkIHZyaW5nX2tpY2soc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92bHlucS92bHlucS5jIGIvZHJpdmVycy92bHlucS92bHlucS5jCmluZGV4IGYwNWQyYTMuLmJhM2Q3MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmx5bnEvdmx5bnEuYworKysgYi9kcml2ZXJzL3ZseW5xL3ZseW5xLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vYmFsbG9vbi5jIGIvZHJpdmVycy94ZW4vYmFsbG9vbi5jCmluZGV4IGY1YmJkOWUuLmQzMTUwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2JhbGxvb24uYworKysgYi9kcml2ZXJzL3hlbi9iYWxsb29uLmMKQEAgLTk2LDExICs5Niw3IEBACiAvKiBXZSBpbmNyZWFzZS9kZWNyZWFzZSBpbiBiYXRjaGVzIHdoaWNoIGZpdCBpbiBhIHBhZ2UgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZyYW1lX2xpc3RbUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKIAotLyogVk0gL3Byb2MgaW5mb3JtYXRpb24gZm9yIG1lbW9yeSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyYW1fcGFnZXM7Ci0KICNpZmRlZiBDT05GSUdfSElHSE1FTQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxoaWdoX3BhZ2VzOwogI2RlZmluZSBpbmNfdG90YWxoaWdoX3BhZ2VzKCkgKHRvdGFsaGlnaF9wYWdlcysrKQogI2RlZmluZSBkZWNfdG90YWxoaWdoX3BhZ2VzKCkgKHRvdGFsaGlnaF9wYWdlcy0tKQogI2Vsc2UKQEAgLTIxNCw3ICsyMTAsNyBAQAogCXBhZ2UgPSBiYWxsb29uX2ZpcnN0X3BhZ2UoKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewogCQlCVUdfT04ocGFnZSA9PSBOVUxMKTsKLQkJZnJhbWVfbGlzdFtpXSA9IHBhZ2VfdG9fcGZuKHBhZ2UpOzsKKwkJZnJhbWVfbGlzdFtpXSA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwogCQlwYWdlID0gYmFsbG9vbl9uZXh0X3BhZ2UocGFnZSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldnRjaG4uYyBiL2RyaXZlcnMveGVuL2V2dGNobi5jCmluZGV4IGFmMDMxOTUuLjc5YmVkYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2dGNobi5jCisrKyBiL2RyaXZlcnMveGVuL2V2dGNobi5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCBmZmUyNjYzLi41ZWE4MGIxIDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtNDYsNiArNDYsMjIgQEAKIAkJCQkgICBjeGdiMy9hZWwyMDA1X29wdF9lZGMuYmluIFwKIAkJCQkgICBjeGdiMy9hZWwyMDA1X3R3eF9lZGMuYmluIFwKIAkJCQkgICBjeGdiMy9hZWwyMDIwX3R3eF9lZGMuYmluCitmdy1zaGlwcGVkLSQoQ09ORklHX0RSTV9NR0EpICs9IG1hdHJveC9nMjAwX3dhcnAuZncgbWF0cm94L2c0MDBfd2FycC5mdworZnctc2hpcHBlZC0kKENPTkZJR19EUk1fUjEyOCkgKz0gcjEyOC9yMTI4X2NjZS5iaW4KK2Z3LXNoaXBwZWQtJChDT05GSUdfRFJNX1JBREVPTikgKz0gcmFkZW9uL1IxMDBfY3AuYmluIHJhZGVvbi9SMjAwX2NwLmJpbiBcCisJCQkJICAgcmFkZW9uL1IzMDBfY3AuYmluIHJhZGVvbi9SNDIwX2NwLmJpbiBcCisJCQkJICAgcmFkZW9uL1JTNjkwX2NwLmJpbiByYWRlb24vUlM2MDBfY3AuYmluIFwKKwkJCQkgICByYWRlb24vUjUyMF9jcC5iaW4gXAorCQkJCSAgIHJhZGVvbi9SNjAwX3BmcC5iaW4gcmFkZW9uL1I2MDBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY2MTBfcGZwLmJpbiByYWRlb24vUlY2MTBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY2MzBfcGZwLmJpbiByYWRlb24vUlY2MzBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY2MjBfcGZwLmJpbiByYWRlb24vUlY2MjBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY2MzVfcGZwLmJpbiByYWRlb24vUlY2MzVfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY2NzBfcGZwLmJpbiByYWRlb24vUlY2NzBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlM3ODBfcGZwLmJpbiByYWRlb24vUlM3ODBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY3NzBfcGZwLmJpbiByYWRlb24vUlY3NzBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY3MzBfcGZwLmJpbiByYWRlb24vUlY3MzBfbWUuYmluIFwKKwkJCQkgICByYWRlb24vUlY3MTBfcGZwLmJpbiByYWRlb24vUlY3MTBfbWUuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0RWQl9BVjcxMTApICs9IGF2NzExMC9ib290Y29kZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRFZCX1RUVVNCX0JVREdFVCkgKz0gdHR1c2ItYnVkZ2V0L2RzcGJvb3Rjb2RlLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19FMTAwKSArPSBlMTAwL2QxMDFtX3Vjb2RlLmJpbiBlMTAwL2QxMDFzX3Vjb2RlLmJpbiBcCmRpZmYgLS1naXQgYS9maXJtd2FyZS9XSEVOQ0UgYi9maXJtd2FyZS9XSEVOQ0UKaW5kZXggODJkYjUyNS4uM2Y4YzRmNiAxMDA2NDQKLS0tIGEvZmlybXdhcmUvV0hFTkNFCisrKyBiL2Zpcm13YXJlL1dIRU5DRQpAQCAtNzI3LDMgKzcyNywxMjQgQEAKICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAyIGJ5IFBhdWwgRGF2aXMgPHBiZEBvcC5uZXQ+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogbWdhIC0gTWF0cm94IEcyMDAvRzQwMC9HNTUwCisKK0ZpbGU6IG1hdHJveC9nMjAwX3dhcnAuZncKK0ZpbGU6IG1hdHJveC9nNDAwX3dhcnAuZncKKworTGljZW5jZToKKworQ29weXJpZ2h0IDE5OTkgTWF0cm94IEdyYXBoaWNzIEluYy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCitjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAordG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgordGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCithbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCitpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCitNQVRST1ggR1JBUEhJQ1MgSU5DLiwgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK0RBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFCitPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiByMTI4IC0gQVRJIFJhZ2UgMTI4CisKK0ZpbGU6IHIxMjgvcjEyOF9jY2UuYmluCisKK0xpY2VuY2U6CisKK0NvcHlyaWdodCAyMDAwIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKworICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFBSRUNJU0lPTiBJTlNJR0hUIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitGb3VuZCBpbiBkZWNpbWFsIGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiByYWRlb24gLSBBVEkgUmFkZW9uCisKK0ZpbGU6IHJhZGVvbi9SMTAwX2NwLmJpbgorRmlsZTogcmFkZW9uL1IyMDBfY3AuYmluCitGaWxlOiByYWRlb24vUjMwMF9jcC5iaW4KK0ZpbGU6IHJhZGVvbi9SNDIwX2NwLmJpbgorRmlsZTogcmFkZW9uL1JTNjAwX2NwLmJpbgorRmlsZTogcmFkZW9uL1JTNjkwX2NwLmJpbgorRmlsZTogcmFkZW9uL1I1MjBfY3AuYmluCitGaWxlOiByYWRlb24vUjYwMF9wZnAuYmluCitGaWxlOiByYWRlb24vUjYwMF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYxMF9wZnAuYmluCitGaWxlOiByYWRlb24vUlY2MTBfbWUuYmluCitGaWxlOiByYWRlb24vUlY2MzBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNjMwX21lLmJpbgorRmlsZTogcmFkZW9uL1JWNjIwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYyMF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYzNV9wZnAuYmluCitGaWxlOiByYWRlb24vUlY2MzVfbWUuYmluCitGaWxlOiByYWRlb24vUlY2NzBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNjcwX21lLmJpbgorRmlsZTogcmFkZW9uL1JTNzgwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SUzc4MF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjc3MF9wZnAuYmluCitGaWxlOiByYWRlb24vUlY3NzBfbWUuYmluCitGaWxlOiByYWRlb24vUlY3MzBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNzMwX21lLmJpbgorRmlsZTogcmFkZW9uL1JWNzEwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjcxMF9tZS5iaW4KKworTGljZW5jZToKKworICogQ29weXJpZ2h0IDIwMDctMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvaWhleDJmdy5jIGIvZmlybXdhcmUvaWhleDJmdy5jCmluZGV4IDhmN2ZkYWEuLjVhMDNiYTggMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL2loZXgyZncuYworKysgYi9maXJtd2FyZS9paGV4MmZ3LmMKQEAgLTU2LDcgKzU2LDcgQEAKIHN0YXRpYyBpbnQgc29ydF9yZWNvcmRzID0gMDsKIHN0YXRpYyBpbnQgd2lkZV9yZWNvcmRzID0gMDsKIAotaW50IHVzYWdlKHZvaWQpCitzdGF0aWMgaW50IHVzYWdlKHZvaWQpCiB7CiAJZnByaW50ZihzdGRlcnIsICJpaGV4MmZ3OiBDb252ZXJ0IGloZXggZmlsZXMgaW50byBiaW5hcnkgIgogCQkicmVwcmVzZW50YXRpb24gZm9yIHVzZSBieSBMaW51eCBrZXJuZWxcbiIpOwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvbWF0cm94L2cyMDBfd2FycC5IMTYgYi9maXJtd2FyZS9tYXRyb3gvZzIwMF93YXJwLkgxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDY0YjZmCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvbWF0cm94L2cyMDBfd2FycC5IMTYKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIFdBUlAgcGlwZXMgYXJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb25zIHRoZXkgcGVyZm9ybSwgd2hlcmUKKyAqCisgKiAgIC0gVCBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHRleHR1cmUgc3RhZ2UgMAorICogICAtIFQyIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgYm90aCB0ZXh0dXJlIHN0YWdlIDAgYW5kIHRleHR1cmUgc3RhZ2UgMQorICogICAtIEcgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB0cmlhbmdsZSBpbnRlbnNpdHkgKEdvdXJhdWQgaW50ZXJwb2xhdGlvbikKKyAqICAgLSBaIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgWiBidWZmZXIgaW50ZXJwb2xhdGlvbgorICogICAtIFMgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBzcGVjdWxhciBoaWdobGlnaHQKKyAqICAgLSBBIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdGhlIGFscGhhIGNoYW5uZWwKKyAqICAgLSBGIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdmVydGV4IGZvZyBpbnRlcnBvbGF0aW9uCisgKi8KKy8qIFRHWiAqLworOjA0QjgwMDAwMDAwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwOThBMEU5NDA0MEQ4RUNGRjgwQzBFOTAwODAwMEU4MUZENzE4QkQzRkQ3MjJCRDgxMDQ4OTA0MDEwNDA5MDRDOTQxQzBFQzExMDQwMEUwNDFDQzQxQ0Q0OUNDNDlDREQxNDFDMEVDNTFDQzUxQ0Q4MDA0MTAwNDA4MDQwMEUwMDBDQ0MwQ0REMTQ5QzBFQzhBMUYyMEU5OEIzRjIwRTk0MTNDNDFBRDQ5M0M0OUFEMTBDQzEwQ0QwOENDMDhDREI5NDE0OUJCMUZGMDQxQ0Q1MTNDNTFBRDAwOTg4MEU5NzI4MDA3RUEyNDFGMjBFOTE1NDE0OUJEMUQ0MTUxQkQyRTQxMkFCODM0NTNBMEU4MTUzMDFEMzA1OEUzMDBFMEI1NDA0OEJEM0Q0MDUwQkQyNDQzQTBFODJDNEJBMEU4MTU3MjA5RTMwMEUwMUQ3MjM1MzBCNTMwQkQzMDNEMzA5Qzk3NTc5RjAwODAwMEU4NkM2NEM4RUM5OEUxQjUwNUJEMDUyRTMwMzJDMEEwRTgzM0MwQTBFODc0NjRDOEVDNDAzQzQwQUQzMjZBMkEzMDIwNzMzMzZBMDBFMDI4NzMxQzcyODNFMjYwODAxNUVBQjgzRDI4REYzMDM1MjBERjQwMzAwMEUwQ0NFMjY0NzIyNTQyNTJCRjJENDI0QUJGMzAyRTMwREYzODJFMzhERjE4MUQ0NUU5MUUxNTQ1RTkyQjQ5NTFCRDAwRTAxRjczMzgzODQwQUYzMDMwNDBBRjI0MUYyNERGMUQzMjIwRTkyQzFGMkNERjFBMzMyMEU5QjAxMDA4RTM0MDEwQjgxMDI2RjAzMENEMkZGMDM4Q0QyQjgwMjBFOTJBODAyMEU5QTYyMDg4RTIwMEUwQUYyMDI4MkEyNkFGMjAyQUMwQUYzNDFGMzRERjQ2MjQ0NkRGMjgzMDgwQkYyMDM4ODBCRjQ3MjQ0N0RGNEUyQzRFREY0RjJDNEZERjU2MzQ1NkRGMjgxNTI4REYyMDFEMjBERjU3MzQ1N0RGMDBFMDFEMDUwNDgwMTBFQTg5RTIyQjMwM0ZDMTFEQkQwMDgwMDBFODAwODAwMEU4MDA4MDAwRThBMDY4QkYyNTAwODAwMEU4MjBDMDIwQUYyODA1OTc3NDAwRTAyQTEwMTZDMDIwRTkwNDgwMTBFQThDRTI5NTA1MjhDMTI4QUQxRkMxMTVCRDAwODAwMEU4MDA4MDAwRThBODY3OUY2QjAwODAwMEU4MjhDMDI4QUQxRDI1MjAwNTI4MzI4MEFENDAyQTQwQkQxQzgwMjBFOTIwMzMyMEFEMjA3MzAwRTBCNjQ5NTFCQjI2MkZCMEU4MTkyMDIwRTkzNTIwMzVERjNEMjAzRERGMTUyMDE1REYxRDIwMURERjI2RDAyNkNEMjk0OTJBQjgyNjQwODBCRDNCNDg1MEJEM0U1NDU3OUYwMEUwODJFMTFFQUY1OTlGMDA4MDAwRTgyNjMwMjkzMDQ4M0M0OEFEMkI3MkMyRTEyQ0MwNDRDMjA1MjQzNEJGMEQyNDJDQkYyRDQ2NEVCRjI1NDY1NkJGMjAxRDZGOEYzMjNFNUZFOTNFNTA1NjlGMDBFMDNCMzAxRThGNTE5RjMzMUU1RkU5MDU0NDU0QjIwRDQ0NENCMjE5QzBCMEU4MzRDMDQ0QzQzMzczMDBFMDNFNjI1NzlGMUVBRjU5OUYwMEUwMEQyMDg0M0U1OEU5MjgxRDZGOEYwNTIwMDBFMDg1MUU1OEU5OUIzQjMzREYyMDIwNDJBRjMwNDI1NjlGODAzRTU3RTkzRjhGNTE5RjMwODA1RkU5MjgyODI0QUY4MTFFNTdFOTA1NDc1N0JGMEQ0NzRGQkY4ODgwNThFOTFCMjkxQkRGMzAxRDZGOEYzQTMwNEZFOTFDMzAyNkRGMDlFMzNCMDUzRTUwNTY5RjNCM0Y0RkU5MUU4RjUxOUYwMEUwQUMyMDJENDQ0Q0I0MkMxQ0MwQUYyNTQ0NTRCNDAwRTBDODMwMzA0NjMwQUYxQjFCNDhBRjAwRTAyNTIwMzgyQzRGRTk4NjgwNTdFOTM4MUQ2RjhGMjg3NDAwRTAwRDQ0NENCMDA1NDQ1NEIwMkQyMDlCMTA4MjNFNTdFOTMyRjAxQkNEMUVCRDU5OUY4MzFFNTdFOTM4NDczOEFGMzQyMDJBMzAwMEUwMEQyMDMyMjAwNTIwODc4MDU3RTkxRjU0NTc5RjE3NDI1NjlGMDBFMDNCNkEzRjhGNTE5RjM3MUU0RkU5MzczMjJBQUYwMEUwMzIwMDAwODAwMEU4MjdDMDQ0QzAzNjFGNEZFOTFGMUYyNkRGMzcxQjM3QkYxNzI2MTdERjNFMTc0RkU5M0YzRjRGRTkzNDFGMzRBRjJCMDVBNzIwMzMyQjM3REYyNzE3QzBBRjM0ODA0RkU5MDA4MDAwRTgwMzgwMEFFQTE3QzEyQkJEMDA4MDAwRTgwMDgwMDBFOEIzNjg5NzI1MDA4MDAwRTgzM0MwMzNBRjNDMjc0RkU5NTczOTIwRTkyODE5NjBFQzJCMzIyMEU5MUQzQjIwRTlCMzA1MDBFMDE2MjgyMEU5MjMzQjMzQUQxRTJCMjBFOTFDODAyMEU5NTczNjIwRTkwMDgwQTBFOTQwNDBEOEVDRkY4MEMwRTk5MEUyMDBFMDg1RkYyMEVBMTlDOEMxQ0QxRkQ3MThCRDNGRDcyMkJEOUY0MTQ5QkQwMDgwMDBFODI1NDE0OUJEMkQ0MTUxQkQwRDgwMDdFQTAwODAwMEU4MzU0MDQ4QkQzRDQwNTBCRDAwODAwMEU4MjUzMDJEMzAzNTMwQjUzMEJEMzAzRDMwOUNBNzVCOUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg4NEZGMEFFQTAwODAwMEU4Qzk0MUM4RUM0MkUxMDBFMDgyRkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4Qzg0MEMwRUMwMDgwMDBFODdGRkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4NzEKKy8qIFRHWkYgKi8KKzowNTQ4MDAwMDAwMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwOThBMEU5NDA0MEQ4RUNGRjgwQzBFOTAwODAwMEU4MUZENzE4QkQzRkQ3MjJCRDgxMDQ4OTA0MDEwNDA5MDRDOTQxQzBFQzExMDQwMEUwNDFDQzQxQ0Q0OUNDNDlDREQxNDFDMEVDNTFDQzUxQ0Q4MDA0MTAwNDA4MDQwMEUwMDBDQ0MwQ0REMTQ5QzBFQzhBMUYyMEU5OEIzRjIwRTk0MTNDNDFBRDQ5M0M0OUFEMTBDQzEwQ0QwOENDMDhDREI5NDE0OUJCMUZGMDQxQ0Q1MTNDNTFBRDAwOTg4MEU5N0Y4MDA3RUEyNDFGMjBFOTIxNDU4MEU4MUE0RDgwRTgzMTU1ODBFODAwODAwMEU4MTU0MTQ5QkQxRDQxNTFCRDJFNDEyQUI4MzQ1M0EwRTgxNTMwMUQzMDU4RTMwMEUwQjU0MDQ4QkQzRDQwNTBCRDI0NDNBMEU4MkM0QkEwRTgxNTcyMDlFMzAwRTAxRDcyMzUzMEI1MzBCRDMwM0QzMDlDOTc1NzlGMDA4MDAwRTg2QzY0QzhFQzk4RTFCNTA1QkQwNTJFMzAzMkMwQTBFODMzQzBBMEU4NzQ2NEM4RUM0MDNDNDBBRDMyNkEyQTMwMjA3MzMzNkEwMEUwMjg3MzFDNzI4M0UyNkI4MDE1RUFCODNEMjhERjMwMzUyMERGNDAzMDAwRTBDQ0UyNjQ3MjI1NDI1MkJGMkQ0MjRBQkYzMDJFMzBERjM4MkUzOERGMTgxRDQ1RTkxRTE1NDVFOTJCNDk1MUJEMDBFMDFGNzMzODM4NDBBRjMwMzA0MEFGMjQxRjI0REYxRDMyMjBFOTJDMUYyQ0RGMUEzMzIwRTlCMDEwMDhFMzQwMTBCODEwMjZGMDMwQ0QyRkYwMzhDRDJCODAyMEU5MkE4MDIwRTlBNjIwODhFMjAwRTBBRjIwMjgyQTI2QUYyMDJBQzBBRjM0MUYzNERGNDYyNDQ2REYyODMwODBCRjIwMzg4MEJGNDcyNDQ3REY0RTJDNEVERjRGMkM0RkRGNTYzNDU2REYyODE1MjhERjIwMUQyMERGNTczNDU3REYwMEUwMUQwNTA0ODAxMEVBODlFMjJCMzAzRkMxMURCRDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEEwNjhCRjI1MDA4MDAwRTgyMEMwMjBBRjI4MDU5Nzc0MDBFMDJBMTAxNkMwMjBFOTA0ODAxMEVBOENFMjk1MDUyOEMxMjhBRDFGQzExNUJEMDA4MDAwRTgwMDgwMDBFOEE4Njc5RjZCMDA4MDAwRTgyOEMwMjhBRDFEMjUyMDA1MjgzMjgwQUQ0MDJBNDBCRDFDODAyMEU5MjAzMzIwQUQyMDczMDBFMEI2NDk1MUJCMjYyRkIwRTgxOTIwMjBFOTM1MjAzNURGM0QyMDNEREYxNTIwMTVERjFEMjAxRERGMjZEMDI2Q0QyOTQ5MkFCODI2NDA4MEJEM0I0ODUwQkQzRTU0NTc5RjAwRTA4MkUxMUVBRjU5OUYwMDgwMDBFODI2MzAyOTMwNDgzQzQ4QUQyQjcyQzJFMTJDQzA0NEMyMDUyNDM0QkYwRDI0MkNCRjJENDY0RUJGMjU0NjU2QkYyMDFENkY4RjMyM0U1RkU5M0U1MDU2OUYwMEUwM0IzMDFFOEY1MTlGMzMxRTVGRTkwNTQ0NTRCMjBENDQ0Q0IyMTlDMEIwRTgzNEMwNDRDNDMzNzMwMEUwM0U2MjU3OUYxRUFGNTk5RjAwRTAwRDIwODQzRTU4RTkyODFENkY4RjA1MjAwMEUwODUxRTU4RTk5QjNCMzNERjIwMjA0MkFGMzA0MjU2OUY4MDNFNTdFOTNGOEY1MTlGMzA4MDVGRTkyODI4MjRBRjgxMUU1N0U5MDU0NzU3QkYwRDQ3NEZCRjg4ODA1OEU5MUIyOTFCREYzMDFENkY4RjNBMzA0RkU5MUMzMDI2REYwOUUzM0IwNTNFNTA1NjlGM0IzRjRGRTkxRThGNTE5RjAwRTBBQzIwMkQ0NDRDQjQyQzFDQzBBRjI1NDQ1NEI0MDBFMEM4MzAzMDQ2MzBBRjFCMUI0OEFGMDBFMDI1MjAzODJDNEZFOTg2ODA1N0U5MzgxRDZGOEYyODc0MDBFMDBENDQ0Q0IwMDU0NDU0QjAyRDIwOUIxMDgyM0U1N0U5MzJGMDFCQ0QxRUJENTk5RjgzMUU1N0U5Mzg0NzM4QUYzNDIwMkEzMDAwRTAwRDIwMzIyMDA1MjA4NzgwNTdFOTFGNTQ1NzlGMTc0MjU2OUYwMEUwM0I2QTNGOEY1MTlGMzcxRTRGRTkzNzMyMkFBRjAwRTAzMjAwMDA4MDAwRTgyN0MwNDRDMDM2MUY0RkU5MUYxRjI2REYzNzFCMzdCRjE3MjYxN0RGM0UxNzRGRTkzRjNGNEZFOTM0MUYzNEFGMkIwNUE3MjAzMzJCMzdERjI3MTdDMEFGMzQ4MDRGRTkwMDgwMDBFODBEMjExQUI2MDUyMTMxQjYwMzgwMkFFQTE3QzEyQkJEMEQyMDA1MjAyRkMwMjFDNkIzNjg5NzI1MDA4MDAwRTgzM0MwMzNBRjNDMjc0RkU5MTc1MDU2OUYwMDgwMDBFODM3MEY1QzlGMDBFMDJGMjAwMDgwMDBFODI4MTk2MEVDQjMwNTAwRTAwMDgwMDBFODIzM0IzM0FEMDA4MDAwRTgxNzI2MTdERjM1MTc0RkU5MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MzkzNzRGRTkyRjJGMTdBRjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODMxODA0RkU5MDA4MDAwRTgwMDgwMDBFODU3MzkyMEU5MTYyODIwRTkxRDNCMjBFOTFFMkIyMEU5MkIzMjIwRTkxQzIzMjBFOTU3MzYyMEU5MDA4MEEwRTk0MDQwRDhFQ0ZGODBDMEU5OTBFMjAwRTA3OEZGMjBFQTE5QzhDMUNEMUZENzE4QkQzRkQ3MjJCRDlGNDE0OUJEMDA4MDAwRTgyNTQxNDlCRDJENDE1MUJEMEQ4MDA3RUEwMDgwMDBFODM1NDA0OEJEM0Q0MDUwQkQwMDgwMDBFODI1MzAyRDMwMzUzMEI1MzBCRDMwM0QzMDlDQTc1QjlGMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4NzdGRjBBRUEwMDgwMDBFOEM5NDFDOEVDNDJFMTAwRTA3NUZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEM4NDBDMEVDMDA4MDAwRTg3MkZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEJCCisvKiBUR1pBICovCis6MDRFODAwMDAwMDAwOThBMEU5NDA0MEQ4RUNGRjgwQzBFOTAwODAwMEU4MUZENzE4QkQzRkQ3MjJCRDgxMDQ4OTA0MDEwNDA5MDRDOTQxQzBFQzExMDQwMEUwNDFDQzQxQ0Q0OUNDNDlDREQxNDFDMEVDNTFDQzUxQ0Q4MDA0MTAwNDA4MDQwMEUwMDBDQ0MwQ0REMTQ5QzBFQzhBMUYyMEU5OEIzRjIwRTk0MTNDNDFBRDQ5M0M0OUFEMTBDQzEwQ0QwOENDMDhDREI5NDE0OUJCMUZGMDQxQ0Q1MTNDNTFBRDAwOTg4MEU5N0Q4MDA3RUEyNDFGMjBFOTE1NDE0OUJEMUQ0MTUxQkQyRTQxMkFCODM0NTNBMEU4MTUzMDFEMzA1OEUzMDBFMEI1NDA0OEJEM0Q0MDUwQkQyNDQzQTBFODJDNEJBMEU4MTU3MjA5RTMwMEUwMUQ3MjM1MzBCNTMwQkQzMDNEMzA5Qzk3NTc5RjAwODAwMEU4NkM2NEM4RUM5OEUxQjUwNUJEMDUyRTMwMzJDMEEwRTgzM0MwQTBFODc0NjRDOEVDNDAzQzQwQUQzMjZBMkEzMDIwNzMzMzZBMDBFMDI4NzMxQzcyODNFMjZCODAxNUVBQjgzRDI4REYzMDM1MjBERjQwMzAwMEUwQ0NFMjY0NzIyNTQyNTJCRjJENDI0QUJGMzAyRTMwREYzODJFMzhERjE4MUQ0NUU5MUUxNTQ1RTkyQjQ5NTFCRDAwRTAxRjczMzgzODQwQUYzMDMwNDBBRjI0MUYyNERGMUQzMjIwRTkyQzFGMkNERjFBMzMyMEU5QjAxMDA4RTM0MDEwQjgxMDI2RjAzMENEMkZGMDM4Q0QyQjgwMjBFOTJBODAyMEU5QTYyMDg4RTIwMEUwQUYyMDI4MkEyNkFGMjAyQUMwQUYzNDFGMzRERjQ2MjQ0NkRGMjgzMDgwQkYyMDM4ODBCRjQ3MjQ0N0RGNEUyQzRFREY0RjJDNEZERjU2MzQ1NkRGMjgxNTI4REYyMDFEMjBERjU3MzQ1N0RGMDBFMDFEMDUwNDgwMTBFQTg5RTIyQjMwM0ZDMTFEQkQwMDgwMDBFODAwODAwMEU4MDA4MDAwRThBMDY4QkYyNTAwODAwMEU4MjBDMDIwQUYyODA1OTc3NDAwRTAyQTEwMTZDMDIwRTkwNDgwMTBFQThDRTI5NTA1MjhDMTI4QUQxRkMxMTVCRDAwODAwMEU4MDA4MDAwRThBODY3OUY2QjAwODAwMEU4MjhDMDI4QUQxRDI1MjAwNTI4MzI4MEFENDAyQTQwQkQxQzgwMjBFOTIwMzMyMEFEMjA3MzAwRTBCNjQ5NTFCQjI2MkZCMEU4MTkyMDIwRTkzNTIwMzVERjNEMjAzRERGMTUyMDE1REYxRDIwMURERjI2RDAyNkNEMjk0OTJBQjgyNjQwODBCRDNCNDg1MEJEM0U1NDU3OUYwMEUwODJFMTFFQUY1OTlGMDA4MDAwRTgyNjMwMjkzMDQ4M0M0OEFEMkI3MkMyRTEyQ0MwNDRDMjA1MjQzNEJGMEQyNDJDQkYyRDQ2NEVCRjI1NDY1NkJGMjAxRDZGOEYzMjNFNUZFOTNFNTA1NjlGMDBFMDNCMzAxRThGNTE5RjMzMUU1RkU5MDU0NDU0QjIwRDQ0NENCMjE5QzBCMEU4MzRDMDQ0QzQzMzczMDBFMDNFNjI1NzlGMUVBRjU5OUYwMEUwMEQyMDg0M0U1OEU5MjgxRDZGOEYwNTIwMDBFMDg1MUU1OEU5OUIzQjMzREYyMDIwNDJBRjMwNDI1NjlGODAzRTU3RTkzRjhGNTE5RjMwODA1RkU5MjgyODI0QUY4MTFFNTdFOTA1NDc1N0JGMEQ0NzRGQkY4ODgwNThFOTFCMjkxQkRGMzAxRDZGOEYzQTMwNEZFOTFDMzAyNkRGMDlFMzNCMDUzRTUwNTY5RjNCM0Y0RkU5MUU4RjUxOUYwMEUwQUMyMDJENDQ0Q0I0MkMxQ0MwQUYyNTQ0NTRCNDAwRTBDODMwMzA0NjMwQUYxQjFCNDhBRjAwRTAyNTIwMzgyQzRGRTk4NjgwNTdFOTM4MUQ2RjhGMjg3NDAwRTAwRDQ0NENCMDA1NDQ1NEIwMkQyMDlCMTA4MjNFNTdFOTMyRjAxQkNEMUVCRDU5OUY4MzFFNTdFOTM4NDczOEFGMzQyMDJBMzAwMEUwMEQyMDMyMjAwNTIwODc4MDU3RTkxRjU0NTc5RjE3NDI1NjlGMDBFMDNCNkEzRjhGNTE5RjM3MUU0RkU5MzczMjJBQUYwMEUwMzIwMDAwODAwMEU4MjdDMDQ0QzAzNjFGNEZFOTFGMUYyNkRGMzcxQjM3QkYxNzI2MTdERjNFMTc0RkU5M0YzRjRGRTkzNDFGMzRBRjJCMDVBNzIwMzMyQjM3REYyNzE3QzBBRjM0ODA0RkU5MDA4MDAwRTgyRDQ0NENCNjI1NDQ1NEI2MDM4MDJBRUExN0MxMkJCRDJEMjAyNTIwMDdDMDQ0QzZCMzY4OTcyNTAwODAwMEU4MzNDMDMzQUYzQzI3NEZFOTFGNjI1NzlGMDA4MDAwRTgzRjNENUQ5RjAwRTAwNzIwMDA4MDAwRTgyODE5NjBFQ0IzMDUwMEUwMDA4MDAwRTgyMzNCMzNBRDAwODAwMEU4MUYyNjFGREY5RDFGNEZFOTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODlFM0Y0RkU5MDcwNzFGQUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg5QzgwNEZFOTAwODAwMEU4MDA4MDAwRTg1NzM5MjBFOTE2MjgyMEU5MUQzQjIwRTkxRTJCMjBFOTJCMzIyMEU5MUMyMzIwRTk1NzM2MjBFOTAwODBBMEU5NDA0MEQ4RUNGRjgwQzBFOTkwRTIwMEUwN0FGRjIwRUExOUM4QzFDRDFGRDcxOEJEM0ZENzIyQkQ5RjQxNDlCRDAwODAwMEU4MjU0MTQ5QkQyRDQxNTFCRDBEODAwN0VBMDA4MDAwRTgzNTQwNDhCRDNENDA1MEJEMDA4MDAwRTgyNTMwMkQzMDM1MzBCNTMwQkQzMDNEMzA5Q0E3NUI5RjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODc5RkYwQUVBMDA4MDAwRThDOTQxQzhFQzQyRTEwMEUwNzdGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThDODQwQzBFQzAwODAwMEU4NzRGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThEOQorLyogVEdaQUYgKi8KKzowNTY4MDAwMDAwMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwOThBMEU5NDA0MEQ4RUNGRjgwQzBFOTAwODAwMEU4MUZENzE4QkQzRkQ3MjJCRDgxMDQ4OTA0MDEwNDA5MDRDOTQxQzBFQzExMDQwMEUwNDFDQzQxQ0Q0OUNDNDlDREQxNDFDMEVDNTFDQzUxQ0Q4MDA0MTAwNDA4MDQwMEUwMDBDQ0MwQ0REMTQ5QzBFQzhBMUYyMEU5OEIzRjIwRTk0MTNDNDFBRDQ5M0M0OUFEMTBDQzEwQ0QwOENDMDhDREI5NDE0OUJCMUZGMDQxQ0Q1MTNDNTFBRDAwOTg4MEU5ODM4MDA3RUEyNDFGMjBFOTIxNDU4MEU4MUE0RDgwRTgzMTU1ODBFODAwODAwMEU4MTU0MTQ5QkQxRDQxNTFCRDJFNDEyQUI4MzQ1M0EwRTgxNTMwMUQzMDU4RTMwMEUwQjU0MDQ4QkQzRDQwNTBCRDI0NDNBMEU4MkM0QkEwRTgxNTcyMDlFMzAwRTAxRDcyMzUzMEI1MzBCRDMwM0QzMDlDOTc1NzlGMDA4MDAwRTg2QzY0QzhFQzk4RTFCNTA1QkQwNTJFMzAzMkMwQTBFODMzQzBBMEU4NzQ2NEM4RUM0MDNDNDBBRDMyNkEyQTMwMjA3MzMzNkEwMEUwMjg3MzFDNzI4M0UyNkY4MDE1RUFCODNEMjhERjMwMzUyMERGNDAzMDAwRTBDQ0UyNjQ3MjI1NDI1MkJGMkQ0MjRBQkYzMDJFMzBERjM4MkUzOERGMTgxRDQ1RTkxRTE1NDVFOTJCNDk1MUJEMDBFMDFGNzMzODM4NDBBRjMwMzA0MEFGMjQxRjI0REYxRDMyMjBFOTJDMUYyQ0RGMUEzMzIwRTlCMDEwMDhFMzQwMTBCODEwMjZGMDMwQ0QyRkYwMzhDRDJCODAyMEU5MkE4MDIwRTlBNjIwODhFMjAwRTBBRjIwMjgyQTI2QUYyMDJBQzBBRjM0MUYzNERGNDYyNDQ2REYyODMwODBCRjIwMzg4MEJGNDcyNDQ3REY0RTJDNEVERjRGMkM0RkRGNTYzNDU2REYyODE1MjhERjIwMUQyMERGNTczNDU3REYwMEUwMUQwNTA0ODAxMEVBODlFMjJCMzAzRkMxMURCRDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEEwNjhCRjI1MDA4MDAwRTgyMEMwMjBBRjI4MDU5Nzc0MDBFMDJBMTAxNkMwMjBFOTA0ODAxMEVBOENFMjk1MDUyOEMxMjhBRDFGQzExNUJEMDA4MDAwRTgwMDgwMDBFOEE4Njc5RjZCMDA4MDAwRTgyOEMwMjhBRDFEMjUyMDA1MjgzMjgwQUQ0MDJBNDBCRDFDODAyMEU5MjAzMzIwQUQyMDczMDBFMEI2NDk1MUJCMjYyRkIwRTgxOTIwMjBFOTM1MjAzNURGM0QyMDNEREYxNTIwMTVERjFEMjAxRERGMjZEMDI2Q0QyOTQ5MkFCODI2NDA4MEJEM0I0ODUwQkQzRTU0NTc5RjAwRTA4MkUxMUVBRjU5OUYwMDgwMDBFODI2MzAyOTMwNDgzQzQ4QUQyQjcyQzJFMTJDQzA0NEMyMDUyNDM0QkYwRDI0MkNCRjJENDY0RUJGMjU0NjU2QkYyMDFENkY4RjMyM0U1RkU5M0U1MDU2OUYwMEUwM0IzMDFFOEY1MTlGMzMxRTVGRTkwNTQ0NTRCMjBENDQ0Q0IyMTlDMEIwRTgzNEMwNDRDNDMzNzMwMEUwM0U2MjU3OUYxRUFGNTk5RjAwRTAwRDIwODQzRTU4RTkyODFENkY4RjA1MjAwMEUwODUxRTU4RTk5QjNCMzNERjIwMjA0MkFGMzA0MjU2OUY4MDNFNTdFOTNGOEY1MTlGMzA4MDVGRTkyODI4MjRBRjgxMUU1N0U5MDU0NzU3QkYwRDQ3NEZCRjg4ODA1OEU5MUIyOTFCREYzMDFENkY4RjNBMzA0RkU5MUMzMDI2REYwOUUzM0IwNTNFNTA1NjlGM0IzRjRGRTkxRThGNTE5RjAwRTBBQzIwMkQ0NDRDQjQyQzFDQzBBRjI1NDQ1NEI0MDBFMEM4MzAzMDQ2MzBBRjFCMUI0OEFGMDBFMDI1MjAzODJDNEZFOTg2ODA1N0U5MzgxRDZGOEYyODc0MDBFMDBENDQ0Q0IwMDU0NDU0QjAyRDIwOUIxMDgyM0U1N0U5MzJGMDFCQ0QxRUJENTk5RjgzMUU1N0U5Mzg0NzM4QUYzNDIwMkEzMDAwRTAwRDIwMzIyMDA1MjA4NzgwNTdFOTFGNTQ1NzlGMTc0MjU2OUYwMEUwM0I2QTNGOEY1MTlGMzcxRTRGRTkzNzMyMkFBRjAwRTAzMjAwMDA4MDAwRTgyN0MwNDRDMDM2MUY0RkU5MUYxRjI2REYzNzFCMzdCRjE3MjYxN0RGM0UxNzRGRTkzRjNGNEZFOTM0MUYzNEFGMkIwNUE3MjAzMzJCMzdERjI3MTdDMEFGMzQ4MDRGRTkwMDgwMDBFODBEMjExQUI2MDUyMTMxQjYyRDQ0NENCNjI1NDQ1NEI2MDM4MDJBRUExN0MxMkJCRDBEMjAwNTIwMkZDMDIxQzZCMzY4OTcyNTAwODAwMEU4MzNDMDMzQUYzQzI3NEZFOTAwRTAyNTIwMDdDMDQ0QzYxNzUwNTY5RjAwRTAyRDIwMzcwRjVDOUYwMEUwMkYyMDFGNjI1NzlGMDBFMDA3MjAzRjNENUQ5RjAwODAwMEU4MDA4MDAwRTgyODE5NjBFQ0IzMDUwMEUwMTcyNjE3REYyMzNCMzNBRDM1MTc0RkU5MUYyNjFGREY5RDFGNEZFOTlFM0Y0RkU5MzkzNzRGRTkyRjJGMTdBRjAwODAwMEU4MDcwNzFGQUYwMDgwMDBFODMxODA0RkU5MDA4MDAwRTg5QzgwNEZFOTAwODAwMEU4MDA4MDAwRTg1NzM5MjBFOTE2MjgyMEU5MUQzQjIwRTkxRTJCMjBFOTJCMzIyMEU5MUMyMzIwRTk1NzM2MjBFOTAwODBBMEU5NDA0MEQ4RUNGRjgwQzBFOTkwRTIwMEUwNzRGRjIwRUExOUM4QzFDRDFGRDcxOEJEM0ZENzIyQkQ5RjQxNDlCRDAwODAwMEU4MjU0MTQ5QkQyRDQxNTFCRDBEODAwN0VBMDA4MDAwRTgzNTQwNDhCRDNENDA1MEJEMDA4MDAwRTgyNTMwMkQzMDM1MzBCNTMwQkQzMDNEMzA5Q0E3NUI5RjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODczRkYwQUVBMDA4MDAwRThDOTQxQzhFQzQyRTEwMEUwNzFGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThDODQwQzBFQzAwODAwMEU4NkVGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgzMAorLyogVEdaUyAqLworOjA1QzAwMDAwMDAwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA5OEEwRTk0MDQwRDhFQ0ZGODBDMEU5MDA4MDAwRTgxRkQ3MThCRDNGRDcyMkJEODEwNDg5MDQwMTA0MDkwNEM5NDFDMEVDMTEwNDAwRTA0MUNDNDFDRDQ5Q0M0OUNERDE0MUMwRUM1MUNDNTFDRDgwMDQxMDA0MDgwNDAwRTAwMENDQzBDREQxNDlDMEVDOEExRjIwRTk4QjNGMjBFOTQxM0M0MUFENDkzQzQ5QUQxMENDMTBDRDA4Q0MwOENEQjk0MTQ5QkIxRkYwNDFDRDUxM0M1MUFEMDA5ODgwRTk4QjgwMDdFQTI0MUYyMEU5MjE0NTgwRTgxQTREODBFODMxNTU4MEU4MDA4MDAwRTgxNTQxNDlCRDFENDE1MUJEMkU0MTJBQjgzNDUzQTBFODE1MzAxRDMwNThFMzAwRTBCNTQwNDhCRDNENDA1MEJEMjQ0M0EwRTgyQzRCQTBFODE1NzIwOUUzMDBFMDFENzIzNTMwQjUzMEJEMzAzRDMwOUM5NzU3OUYwMDgwMDBFODZDNjRDOEVDOThFMUI1MDVCRDA1MkUzMDMyQzBBMEU4MzNDMEEwRTg3NDY0QzhFQzQwM0M0MEFEMzI2QTJBMzAyMDczMzM2QTAwRTAyODczMUM3MjgzRTI3NzgwMTVFQUI4M0QyOERGMzAzNTIwREY0MDMwMDBFMENDRTI2NDcyMjU0MjUyQkYyRDQyNEFCRjMwMkUzMERGMzgyRTM4REYxODFENDVFOTFFMTU0NUU5MkI0OTUxQkQwMEUwMUY3MzM4Mzg0MEFGMzAzMDQwQUYyNDFGMjRERjFEMzIyMEU5MkMxRjJDREYxQTMzMjBFOUIwMTAwOEUzNDAxMEI4MTAyNkYwMzBDRDJGRjAzOENEMkI4MDIwRTkyQTgwMjBFOUE2MjA4OEUyMDBFMEFGMjAyODJBMjZBRjIwMkFDMEFGMzQxRjM0REY0NjI0NDZERjI4MzA4MEJGMjAzODgwQkY0NzI0NDdERjRFMkM0RURGNEYyQzRGREY1NjM0NTZERjI4MTUyOERGMjAxRDIwREY1NzM0NTdERjAwRTAxRDA1MDQ4MDEwRUE4OUUyMkIzMDNGQzExREJEMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4QTA2OEJGMjUwMDgwMDBFODIwQzAyMEFGMjgwNTk3NzQwMEUwMkExMDE2QzAyMEU5MDQ4MDEwRUE4Q0UyOTUwNTI4QzEyOEFEMUZDMTE1QkQwMDgwMDBFODAwODAwMEU4QTg2NzlGNkIwMDgwMDBFODI4QzAyOEFEMUQyNTIwMDUyODMyODBBRDQwMkE0MEJEMUM4MDIwRTkyMDMzMjBBRDIwNzMwMEUwQjY0OTUxQkIyNjJGQjBFODE5MjAyMEU5MzUyMDM1REYzRDIwM0RERjE1MjAxNURGMUQyMDFEREYyNkQwMjZDRDI5NDkyQUI4MjY0MDgwQkQzQjQ4NTBCRDNFNTQ1NzlGMDBFMDgyRTExRUFGNTk5RjAwODAwMEU4MjYzMDI5MzA0ODNDNDhBRDJCNzJDMkUxMkNDMDQ0QzIwNTI0MzRCRjBEMjQyQ0JGMkQ0NjRFQkYyNTQ2NTZCRjIwMUQ2RjhGMzIzRTVGRTkzRTUwNTY5RjAwRTAzQjMwMUU4RjUxOUYzMzFFNUZFOTA1NDQ1NEIyMEQ0NDRDQjIxOUMwQjBFODM0QzA0NEM0MzM3MzAwRTAzRTYyNTc5RjFFQUY1OTlGMDBFMDBEMjA4NDNFNThFOTI4MUQ2RjhGMDUyMDAwRTA4NTFFNThFOTlCM0IzM0RGMjAyMDQyQUYzMDQyNTY5RjgwM0U1N0U5M0Y4RjUxOUYzMDgwNUZFOTI4MjgyNEFGODExRTU3RTkwNTQ3NTdCRjBENDc0RkJGODg4MDU4RTkxQjI5MUJERjMwMUQ2RjhGM0EzMDRGRTkxQzMwMjZERjA5RTMzQjA1M0U1MDU2OUYzQjNGNEZFOTFFOEY1MTlGMDBFMEFDMjAyRDQ0NENCNDJDMUNDMEFGMjU0NDU0QjQwMEUwQzgzMDMwNDYzMEFGMUIxQjQ4QUYwMEUwMjUyMDM4MkM0RkU5ODY4MDU3RTkzODFENkY4RjI4NzQwMEUwMEQ0NDRDQjAwNTQ0NTRCMDJEMjA5QjEwODIzRTU3RTkzMkYwMUJDRDFFQkQ1OTlGODMxRTU3RTkzODQ3MzhBRjM0MjAyQTMwMDBFMDBEMjAzMjIwMDUyMDg3ODA1N0U5MUY1NDU3OUYxNzQyNTY5RjAwRTAzQjZBM0Y4RjUxOUYzNzFFNEZFOTM3MzIyQUFGMDBFMDMyMDAwMDgwMDBFODI3QzA0NEMwMzYxRjRGRTkxRjFGMjZERjM3MUIzN0JGMTcyNjE3REYzRTE3NEZFOTNGM0Y0RkU5MzQxRjM0QUYyQjA1QTcyMDMzMkIzN0RGMjcxN0MwQUYzNDgwNEZFOTAwODAwMEU4MkQyMTFBQjAyNTIxMzFCMDBEMjExQUIyMDUyMTMxQjIwMzgwMkFFQTE3QzEyQkJEMkQyMDI1MjAwNTIwMEQyMEIzNjg5NzI1MDA4MDAwRTgzM0MwMzNBRjJGQzAyMUMwMTY0MjU2OUYzQzI3NEZFOTFFNjI1NzlGMDA4MDAwRTgyNTIxMzFCNDJEMjExQUI0M0YyRjVEOUYwMDgwMDBFODMzMDUwMEUwMjgxOTYwRUMzNzBGNUM5RjAwRTAyRjIwMjMzQjMzQUQxRTI2MUVERkE3MUU0RkU5MTcyNjE2REYyRDIwMDBFMEE4M0Y0RkU5MkYyRjFFQUYyNTIwMDBFMEE0MTY0RkU5MEZDMDIxQzJBNjgwNEZFOTFGNjI1NzlGM0YyRjVEOUYwMEUwOEYyMEE1Mzc0RkU5MEYxNzBGQUYwNkMwMjFDNDAwODAwMEU4MDA4MDAwRThBMzgwNEZFOTA2MjAwMEUwMUYyNjFGREZBMTFGNEZFOUEyM0Y0RkU5MDA4MDAwRTgwMDgwMDBFODA2MDYxRkFGMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4QTA4MDRGRTkwMDgwMDBFODAwODAwMEU4NTczOTIwRTkxNjI4MjBFOTFEM0IyMEU5MUUyQjIwRTkyQjMyMjBFOTFDMjMyMEU5NTczNjIwRTkwMDgwQTBFOTQwNDBEOEVDRkY4MEMwRTk5MEUyMDBFMDZDRkYyMEVBMTlDOEMxQ0QxRkQ3MThCRDNGRDcyMkJEOUY0MTQ5QkQwMDgwMDBFODI1NDE0OUJEMkQ0MTUxQkQwRDgwMDdFQTAwODAwMEU4MzU0MDQ4QkQzRDQwNTBCRDAwODAwMEU4MjUzMDJEMzAzNTMwQjUzMEJEMzAzRDMwOUNBNzVCOUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg2QkZGMEFFQTAwODAwMEU4Qzk0MUM4RUM0MkUxMDBFMDY5RkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4Qzg0MEMwRUMwMDgwMDBFODY2RkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4NUMKKy8qIFRHWlNGICovCis6MDVFMDAwMDAwMDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDk4QTBFOTQwNDBEOEVDRkY4MEMwRTkwMDgwMDBFODFGRDcxOEJEM0ZENzIyQkQ4MTA0ODkwNDAxMDQwOTA0Qzk0MUMwRUMxMTA0MDBFMDQxQ0M0MUNENDlDQzQ5Q0REMTQxQzBFQzUxQ0M1MUNEODAwNDEwMDQwODA0MDBFMDAwQ0NDMENERDE0OUMwRUM4QTFGMjBFOThCM0YyMEU5NDEzQzQxQUQ0OTNDNDlBRDEwQ0MxMENEMDhDQzA4Q0RCOTQxNDlCQjFGRjA0MUNENTEzQzUxQUQwMDk4ODBFOThGODAwN0VBMjQxRjIwRTkyMTQ1ODBFODFBNEQ4MEU4MzE1NTgwRTgwMDgwMDBFODE1NDE0OUJEMUQ0MTUxQkQyRTQxMkFCODM0NTNBMEU4MTUzMDFEMzA1OEUzMDBFMEI1NDA0OEJEM0Q0MDUwQkQyNDQzQTBFODJDNEJBMEU4MTU3MjA5RTMwMEUwMUQ3MjM1MzBCNTMwQkQzMDNEMzA5Qzk3NTc5RjAwODAwMEU4NkM2NEM4RUM5OEUxQjUwNUJEMDUyRTMwMzJDMEEwRTgzM0MwQTBFODc0NjRDOEVDNDAzQzQwQUQzMjZBMkEzMDIwNzMzMzZBMDBFMDI4NzMxQzcyODNFMjdCODAxNUVBQjgzRDI4REYzMDM1MjBERjQwMzAwMEUwQ0NFMjY0NzIyNTQyNTJCRjJENDI0QUJGMzAyRTMwREYzODJFMzhERjE4MUQ0NUU5MUUxNTQ1RTkyQjQ5NTFCRDAwRTAxRjczMzgzODQwQUYzMDMwNDBBRjI0MUYyNERGMUQzMjIwRTkyQzFGMkNERjFBMzMyMEU5QjAxMDA4RTM0MDEwQjgxMDI2RjAzMENEMkZGMDM4Q0QyQjgwMjBFOTJBODAyMEU5QTYyMDg4RTIwMEUwQUYyMDI4MkEyNkFGMjAyQUMwQUYzNDFGMzRERjQ2MjQ0NkRGMjgzMDgwQkYyMDM4ODBCRjQ3MjQ0N0RGNEUyQzRFREY0RjJDNEZERjU2MzQ1NkRGMjgxNTI4REYyMDFEMjBERjU3MzQ1N0RGMDBFMDFEMDUwNDgwMTBFQTg5RTIyQjMwM0ZDMTFEQkQwMDgwMDBFODAwODAwMEU4MDA4MDAwRThBMDY4QkYyNTAwODAwMEU4MjBDMDIwQUYyODA1OTc3NDAwRTAyQTEwMTZDMDIwRTkwNDgwMTBFQThDRTI5NTA1MjhDMTI4QUQxRkMxMTVCRDAwODAwMEU4MDA4MDAwRThBODY3OUY2QjAwODAwMEU4MjhDMDI4QUQxRDI1MjAwNTI4MzI4MEFENDAyQTQwQkQxQzgwMjBFOTIwMzMyMEFEMjA3MzAwRTBCNjQ5NTFCQjI2MkZCMEU4MTkyMDIwRTkzNTIwMzVERjNEMjAzRERGMTUyMDE1REYxRDIwMURERjI2RDAyNkNEMjk0OTJBQjgyNjQwODBCRDNCNDg1MEJEM0U1NDU3OUYwMEUwODJFMTFFQUY1OTlGMDA4MDAwRTgyNjMwMjkzMDQ4M0M0OEFEMkI3MkMyRTEyQ0MwNDRDMjA1MjQzNEJGMEQyNDJDQkYyRDQ2NEVCRjI1NDY1NkJGMjAxRDZGOEYzMjNFNUZFOTNFNTA1NjlGMDBFMDNCMzAxRThGNTE5RjMzMUU1RkU5MDU0NDU0QjIwRDQ0NENCMjE5QzBCMEU4MzRDMDQ0QzQzMzczMDBFMDNFNjI1NzlGMUVBRjU5OUYwMEUwMEQyMDg0M0U1OEU5MjgxRDZGOEYwNTIwMDBFMDg1MUU1OEU5OUIzQjMzREYyMDIwNDJBRjMwNDI1NjlGODAzRTU3RTkzRjhGNTE5RjMwODA1RkU5MjgyODI0QUY4MTFFNTdFOTA1NDc1N0JGMEQ0NzRGQkY4ODgwNThFOTFCMjkxQkRGMzAxRDZGOEYzQTMwNEZFOTFDMzAyNkRGMDlFMzNCMDUzRTUwNTY5RjNCM0Y0RkU5MUU4RjUxOUYwMEUwQUMyMDJENDQ0Q0I0MkMxQ0MwQUYyNTQ0NTRCNDAwRTBDODMwMzA0NjMwQUYxQjFCNDhBRjAwRTAyNTIwMzgyQzRGRTk4NjgwNTdFOTM4MUQ2RjhGMjg3NDAwRTAwRDQ0NENCMDA1NDQ1NEIwMkQyMDlCMTA4MjNFNTdFOTMyRjAxQkNEMUVCRDU5OUY4MzFFNTdFOTM4NDczOEFGMzQyMDJBMzAwMEUwMEQyMDMyMjAwNTIwODc4MDU3RTkxRjU0NTc5RjE3NDI1NjlGMDBFMDNCNkEzRjhGNTE5RjM3MUU0RkU5MzczMjJBQUYwMEUwMzIwMDAwODAwMEU4MjdDMDQ0QzAzNjFGNEZFOTFGMUYyNkRGMzcxQjM3QkYxNzI2MTdERjNFMTc0RkU5M0YzRjRGRTkzNDFGMzRBRjJCMDVBNzIwMzMyQjM3REYyNzE3QzBBRjM0ODA0RkU5MDA4MDAwRTgyRDIxMUFCMDI1MjEzMUIwMEQyMTFBQjIwNTIxMzFCMjAzODAyQUVBMTdDMTJCQkQyRDIwMjUyMDA1MjAwRDIwQjM2ODk3MjUwMDgwMDBFODMzQzAzM0FGMkZDMDIxQzAxNjQyNTY5RjNDMjc0RkU5MUU2MjU3OUYwMDgwMDBFODI1MjEzMUI0MkQyMTFBQjQzRjJGNUQ5RjAwODAwMEU4MzMwNTAwRTAyODE5NjBFQzBEMjExQUI2MDUyMTMxQjYzNzBGNUM5RjAwRTAyRjIwMjMzQjMzQUQxRTI2MUVERkE3MUU0RkU5MTcyNjE2REYyRDIwMDBFMEE4M0Y0RkU5MkYyRjFFQUYyNTIwMDBFMEE0MTY0RkU5MEZDMDIxQzJBNjgwNEZFOTFGNjI1NzlGMEQyMDA1MjAyRkMwMjFDNjNGMkY1RDlGMDBFMDBGMjAxNzUwNTY5RkE1Mzc0RkU5MDZDMDIxQzQwRjE3MEZBRjM3MEY1QzlGMDA4MDAwRTgyRjIwMDBFMEEzODA0RkU5MDYyMDAwRTAxRjI2MUZERjE3MjYxN0RGMzUxNzRGRTlBMTFGNEZFOUEyM0Y0RkU5MDYwNjFGQUYzOTM3NEZFOTJGMkYxN0FGMDA4MDAwRThBMDgwNEZFOTAwODAwMEU4MzE4MDRGRTkwMDgwMDBFODAwODAwMEU4NTczOTIwRTkxNjI4MjBFOTFEM0IyMEU5MUUyQjIwRTkyQjMyMjBFOTFDMjMyMEU5NTczNjIwRTkwMDgwQTBFOTQwNDBEOEVDRkY4MEMwRTk5MEUyMDBFMDY4RkYyMEVBMTlDOEMxQ0QxRkQ3MThCRDNGRDcyMkJEOUY0MTQ5QkQwMDgwMDBFODI1NDE0OUJEMkQ0MTUxQkQwRDgwMDdFQTAwODAwMEU4MzU0MDQ4QkQzRDQwNTBCRDAwODAwMEU4MjUzMDJEMzAzNTMwQjUzMEJEMzAzRDMwOUNBNzVCOUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg2N0ZGMEFFQTAwODAwMEU4Qzk0MUM4RUM0MkUxMDBFMDY1RkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4Qzg0MEMwRUMwMDgwMDBFODYyRkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4RjkKKy8qIFRHWlNBICovCis6MDVFMDAwMDAwMDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDk4QTBFOTQwNDBEOEVDRkY4MEMwRTkwMDgwMDBFODFGRDcxOEJEM0ZENzIyQkQ4MTA0ODkwNDAxMDQwOTA0Qzk0MUMwRUMxMTA0MDBFMDQxQ0M0MUNENDlDQzQ5Q0REMTQxQzBFQzUxQ0M1MUNEODAwNDEwMDQwODA0MDBFMDAwQ0NDMENERDE0OUMwRUM4QTFGMjBFOThCM0YyMEU5NDEzQzQxQUQ0OTNDNDlBRDEwQ0MxMENEMDhDQzA4Q0RCOTQxNDlCQjFGRjA0MUNENTEzQzUxQUQwMDk4ODBFOThGODAwN0VBMjQxRjIwRTkyMTQ1ODBFODFBNEQ4MEU4MzE1NTgwRTgwMDgwMDBFODE1NDE0OUJEMUQ0MTUxQkQyRTQxMkFCODM0NTNBMEU4MTUzMDFEMzA1OEUzMDBFMEI1NDA0OEJEM0Q0MDUwQkQyNDQzQTBFODJDNEJBMEU4MTU3MjA5RTMwMEUwMUQ3MjM1MzBCNTMwQkQzMDNEMzA5Qzk3NTc5RjAwODAwMEU4NkM2NEM4RUM5OEUxQjUwNUJEMDUyRTMwMzJDMEEwRTgzM0MwQTBFODc0NjRDOEVDNDAzQzQwQUQzMjZBMkEzMDIwNzMzMzZBMDBFMDI4NzMxQzcyODNFMjdCODAxNUVBQjgzRDI4REYzMDM1MjBERjQwMzAwMEUwQ0NFMjY0NzIyNTQyNTJCRjJENDI0QUJGMzAyRTMwREYzODJFMzhERjE4MUQ0NUU5MUUxNTQ1RTkyQjQ5NTFCRDAwRTAxRjczMzgzODQwQUYzMDMwNDBBRjI0MUYyNERGMUQzMjIwRTkyQzFGMkNERjFBMzMyMEU5QjAxMDA4RTM0MDEwQjgxMDI2RjAzMENEMkZGMDM4Q0QyQjgwMjBFOTJBODAyMEU5QTYyMDg4RTIwMEUwQUYyMDI4MkEyNkFGMjAyQUMwQUYzNDFGMzRERjQ2MjQ0NkRGMjgzMDgwQkYyMDM4ODBCRjQ3MjQ0N0RGNEUyQzRFREY0RjJDNEZERjU2MzQ1NkRGMjgxNTI4REYyMDFEMjBERjU3MzQ1N0RGMDBFMDFEMDUwNDgwMTBFQTg5RTIyQjMwM0ZDMTFEQkQwMDgwMDBFODAwODAwMEU4MDA4MDAwRThBMDY4QkYyNTAwODAwMEU4MjBDMDIwQUYyODA1OTc3NDAwRTAyQTEwMTZDMDIwRTkwNDgwMTBFQThDRTI5NTA1MjhDMTI4QUQxRkMxMTVCRDAwODAwMEU4MDA4MDAwRThBODY3OUY2QjAwODAwMEU4MjhDMDI4QUQxRDI1MjAwNTI4MzI4MEFENDAyQTQwQkQxQzgwMjBFOTIwMzMyMEFEMjA3MzAwRTBCNjQ5NTFCQjI2MkZCMEU4MTkyMDIwRTkzNTIwMzVERjNEMjAzRERGMTUyMDE1REYxRDIwMURERjI2RDAyNkNEMjk0OTJBQjgyNjQwODBCRDNCNDg1MEJEM0U1NDU3OUYwMEUwODJFMTFFQUY1OTlGMDA4MDAwRTgyNjMwMjkzMDQ4M0M0OEFEMkI3MkMyRTEyQ0MwNDRDMjA1MjQzNEJGMEQyNDJDQkYyRDQ2NEVCRjI1NDY1NkJGMjAxRDZGOEYzMjNFNUZFOTNFNTA1NjlGMDBFMDNCMzAxRThGNTE5RjMzMUU1RkU5MDU0NDU0QjIwRDQ0NENCMjE5QzBCMEU4MzRDMDQ0QzQzMzczMDBFMDNFNjI1NzlGMUVBRjU5OUYwMEUwMEQyMDg0M0U1OEU5MjgxRDZGOEYwNTIwMDBFMDg1MUU1OEU5OUIzQjMzREYyMDIwNDJBRjMwNDI1NjlGODAzRTU3RTkzRjhGNTE5RjMwODA1RkU5MjgyODI0QUY4MTFFNTdFOTA1NDc1N0JGMEQ0NzRGQkY4ODgwNThFOTFCMjkxQkRGMzAxRDZGOEYzQTMwNEZFOTFDMzAyNkRGMDlFMzNCMDUzRTUwNTY5RjNCM0Y0RkU5MUU4RjUxOUYwMEUwQUMyMDJENDQ0Q0I0MkMxQ0MwQUYyNTQ0NTRCNDAwRTBDODMwMzA0NjMwQUYxQjFCNDhBRjAwRTAyNTIwMzgyQzRGRTk4NjgwNTdFOTM4MUQ2RjhGMjg3NDAwRTAwRDQ0NENCMDA1NDQ1NEIwMkQyMDlCMTA4MjNFNTdFOTMyRjAxQkNEMUVCRDU5OUY4MzFFNTdFOTM4NDczOEFGMzQyMDJBMzAwMEUwMEQyMDMyMjAwNTIwODc4MDU3RTkxRjU0NTc5RjE3NDI1NjlGMDBFMDNCNkEzRjhGNTE5RjM3MUU0RkU5MzczMjJBQUYwMEUwMzIwMDAwODAwMEU4MjdDMDQ0QzAzNjFGNEZFOTFGMUYyNkRGMzcxQjM3QkYxNzI2MTdERjNFMTc0RkU5M0YzRjRGRTkzNDFGMzRBRjJCMDVBNzIwMzMyQjM3REYyNzE3QzBBRjM0ODA0RkU5MDA4MDAwRTgyRDIxMUFCMDI1MjEzMUIwMEQyMTFBQjIwNTIxMzFCMjAzODAyQUVBMTdDMTJCQkQyRDIwMjUyMDA1MjAwRDIwQjM2ODk3MjUwMDgwMDBFODMzQzAzM0FGMkZDMDIxQzAxNjQyNTY5RjNDMjc0RkU5MUU2MjU3OUYwMDgwMDBFODI1MjEzMUI0MkQyMTFBQjQzRjJGNUQ5RjAwODAwMEU4MzMwNTAwRTAyODE5NjBFQzBENDQ0Q0I2MDU0NDU0QjYzNzBGNUM5RjAwRTAyRjIwMjMzQjMzQUQxRTI2MUVERkE3MUU0RkU5MTcyNjE2REYyRDIwMDBFMEE4M0Y0RkU5MkYyRjFFQUYyNTIwMDBFMEE0MTY0RkU5MEZDMDIxQzJBNjgwNEZFOTFGNjI1NzlGMEQyMDA1MjAwMDgwMDBFODNGMkY1RDlGMDBFMDBGMjAxNzUwNTY5RkE1Mzc0RkU5MDZDMDIxQzQwRjE3MEZBRjM3MEY1QzlGMDA4MDAwRTgyRkMwNDRDNkEzODA0RkU5MDYyMDAwRTAxRjI2MUZERjE3MjYxN0RGOUQxNzRGRTlBMTFGNEZFOUEyM0Y0RkU5MDYwNjFGQUYwMEUwQUYyMDlFMzc0RkU5MkYxNzJGQUZBMDgwNEZFOTAwODAwMEU4MDA4MDAwRTg5QzgwNEZFOTAwODAwMEU4NTczOTIwRTkxNjI4MjBFOTFEM0IyMEU5MUUyQjIwRTkyQjMyMjBFOTFDMjMyMEU5NTczNjIwRTkwMDgwQTBFOTQwNDBEOEVDRkY4MEMwRTk5MEUyMDBFMDY4RkYyMEVBMTlDOEMxQ0QxRkQ3MThCRDNGRDcyMkJEOUY0MTQ5QkQwMDgwMDBFODI1NDE0OUJEMkQ0MTUxQkQwRDgwMDdFQTAwODAwMEU4MzU0MDQ4QkQzRDQwNTBCRDAwODAwMEU4MjUzMDJEMzAzNTMwQjUzMEJEMzAzRDMwOUNBNzVCOUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg2N0ZGMEFFQTAwODAwMEU4Qzk0MUM4RUM0MkUxMDBFMDY1RkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4Qzg0MEMwRUMwMDgwMDBFODYyRkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4ODMKKy8qIFRHWkFGICovCis6MDVCODAwMDAwMDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwOThBMEU5NDA0MEQ4RUNGRjgwQzBFOTAwODAwMEU4MUZENzE4QkQzRkQ3MjJCRDgxMDQ4OTA0MDEwNDA5MDRDOTQxQzBFQzExMDQwMEUwNDFDQzQxQ0Q0OUNDNDlDREQxNDFDMEVDNTFDQzUxQ0Q4MDA0MTAwNDA4MDQwMEUwMDBDQ0MwQ0REMTQ5QzBFQzhBMUYyMEU5OEIzRjIwRTk0MTNDNDFBRDQ5M0M0OUFEMTBDQzEwQ0QwOENDMDhDREI5NDE0OUJCMUZGMDQxQ0Q1MTNDNTFBRDAwOTg4MEU5OTQ4MDA3RUEyNDFGMjBFOTIxNDU4MEU4MUE0RDgwRTgzMTU1ODBFODAwODAwMEU4MTU0MTQ5QkQxRDQxNTFCRDJFNDEyQUI4MzQ1M0EwRTgxNTMwMUQzMDU4RTMwMEUwQjU0MDQ4QkQzRDQwNTBCRDI0NDNBMEU4MkM0QkEwRTgxNTcyMDlFMzAwRTAxRDcyMzUzMEI1MzBCRDMwM0QzMDlDOTc1NzlGMDA4MDAwRTg2QzY0QzhFQzk4RTFCNTA1QkQwNTJFMzAzMkMwQTBFODMzQzBBMEU4NzQ2NEM4RUM0MDNDNDBBRDMyNkEyQTMwMjA3MzMzNkEwMEUwMjg3MzFDNzI4M0UyODA4MDE1RUFCODNEMjhERjMwMzUyMERGNDAzMDAwRTBDQ0UyNjQ3MjI1NDI1MkJGMkQ0MjRBQkYzMDJFMzBERjM4MkUzOERGMTgxRDQ1RTkxRTE1NDVFOTJCNDk1MUJEMDBFMDFGNzMzODM4NDBBRjMwMzA0MEFGMjQxRjI0REYxRDMyMjBFOTJDMUYyQ0RGMUEzMzIwRTlCMDEwMDhFMzQwMTBCODEwMjZGMDMwQ0QyRkYwMzhDRDJCODAyMEU5MkE4MDIwRTlBNjIwODhFMjAwRTBBRjIwMjgyQTI2QUYyMDJBQzBBRjM0MUYzNERGNDYyNDQ2REYyODMwODBCRjIwMzg4MEJGNDcyNDQ3REY0RTJDNEVERjRGMkM0RkRGNTYzNDU2REYyODE1MjhERjIwMUQyMERGNTczNDU3REYwMEUwMUQwNTA0ODAxMEVBODlFMjJCMzAzRkMxMURCRDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEEwNjhCRjI1MDA4MDAwRTgyMEMwMjBBRjI4MDU5Nzc0MDBFMDJBMTAxNkMwMjBFOTA0ODAxMEVBOENFMjk1MDUyOEMxMjhBRDFGQzExNUJEMDA4MDAwRTgwMDgwMDBFOEE4Njc5RjZCMDA4MDAwRTgyOEMwMjhBRDFEMjUyMDA1MjgzMjgwQUQ0MDJBNDBCRDFDODAyMEU5MjAzMzIwQUQyMDczMDBFMEI2NDk1MUJCMjYyRkIwRTgxOTIwMjBFOTM1MjAzNURGM0QyMDNEREYxNTIwMTVERjFEMjAxRERGMjZEMDI2Q0QyOTQ5MkFCODI2NDA4MEJEM0I0ODUwQkQzRTU0NTc5RjAwRTA4MkUxMUVBRjU5OUYwMDgwMDBFODI2MzAyOTMwNDgzQzQ4QUQyQjcyQzJFMTJDQzA0NEMyMDUyNDM0QkYwRDI0MkNCRjJENDY0RUJGMjU0NjU2QkYyMDFENkY4RjMyM0U1RkU5M0U1MDU2OUYwMEUwM0IzMDFFOEY1MTlGMzMxRTVGRTkwNTQ0NTRCMjBENDQ0Q0IyMTlDMEIwRTgzNEMwNDRDNDMzNzMwMEUwM0U2MjU3OUYxRUFGNTk5RjAwRTAwRDIwODQzRTU4RTkyODFENkY4RjA1MjAwMEUwODUxRTU4RTk5QjNCMzNERjIwMjA0MkFGMzA0MjU2OUY4MDNFNTdFOTNGOEY1MTlGMzA4MDVGRTkyODI4MjRBRjgxMUU1N0U5MDU0NzU3QkYwRDQ3NEZCRjg4ODA1OEU5MUIyOTFCREYzMDFENkY4RjNBMzA0RkU5MUMzMDI2REYwOUUzM0IwNTNFNTA1NjlGM0IzRjRGRTkxRThGNTE5RjAwRTBBQzIwMkQ0NDRDQjQyQzFDQzBBRjI1NDQ1NEI0MDBFMEM4MzAzMDQ2MzBBRjFCMUI0OEFGMDBFMDI1MjAzODJDNEZFOTg2ODA1N0U5MzgxRDZGOEYyODc0MDBFMDBENDQ0Q0IwMDU0NDU0QjAyRDIwOUIxMDgyM0U1N0U5MzJGMDFCQ0QxRUJENTk5RjgzMUU1N0U5Mzg0NzM4QUYzNDIwMkEzMDAwRTAwRDIwMzIyMDA1MjA4NzgwNTdFOTFGNTQ1NzlGMTc0MjU2OUYwMEUwM0I2QTNGOEY1MTlGMzcxRTRGRTkzNzMyMkFBRjAwRTAzMjAwMDA4MDAwRTgyN0MwNDRDMDM2MUY0RkU5MUYxRjI2REYzNzFCMzdCRjE3MjYxN0RGM0UxNzRGRTkzRjNGNEZFOTM0MUYzNEFGMkIwNUE3MjAzMzJCMzdERjI3MTdDMEFGMzQ4MDRGRTkwMDgwMDBFODJEMjExQUIwMjUyMTMxQjAwRDIxMUFCMjA1MjEzMUIyMDM4MDJBRUExN0MxMkJCRDJEMjAyNTIwMDUyMDBEMjBCMzY4OTcyNTAwODAwMEU4MzNDMDMzQUYyRkMwMjFDMDE2NDI1NjlGM0MyNzRGRTkxRTYyNTc5RjAwODAwMEU4MjUyMTMxQjQyRDIxMUFCNDNGMkY1RDlGMDA4MDAwRTgzMzA1MDBFMDI4MTk2MEVDMEQyMTFBQjYwNTIxMzFCNjM3MEY1QzlGMDBFMDJGMjAyMzNCMzNBRDFFMjYxRURGQTcxRTRGRTkxNzI2MTZERjJEMjAwMEUwQTgzRjRGRTkyRjJGMUVBRjI1MjAwMEUwQTQxNjRGRTkwRkMwMjFDMkE2ODA0RkU5MUY2MjU3OUYwRDIwMDUyMDJGQzAyMUM2MkQ0NDRDQjYyNTQ0NTRCNjNGMkY1RDlGMDBFMDBGMjAyRDIwMjUyMDA3QzA0NEM2MTc1MDU2OUZBNTM3NEZFOTA2QzAyMUM0MEYxNzBGQUYzNzBGNUM5RjAwODAwMEU4MUU2MjU3OUYwMDgwMDBFODNFM0Q1RDlGMDBFMDA3MjAyRjIwMDBFMEEzMEY0RkU5MDYyMDAwRTAxRjI2MUZERjE3MjYxN0RGQTExRjRGRTkxRTI2MUVERjlEMUU0RkU5MzUxNzRGRTlBMjNGNEZFOTA2MDYxRkFGMzkzNzRGRTkyRjJGMTdBRjA3MDcxRUFGQTA4MDRGRTk5RTNFNEZFOTMxODA0RkU5OUM4MDRGRTkwMDgwMDBFODU3MzkyMEU5MTYyODIwRTkxRDNCMjBFOTFFMkIyMEU5MkIzMjIwRTkxQzIzMjBFOTU3MzYyMEU5MDA4MEEwRTk0MDQwRDhFQ0ZGODBDMEU5OTBFMjAwRTA2M0ZGMjBFQTE5QzhDMUNEMUZENzE4QkQzRkQ3MjJCRDlGNDE0OUJEMDA4MDAwRTgyNTQxNDlCRDJENDE1MUJEMEQ4MDA3RUEwMDgwMDBFODM1NDA0OEJEM0Q0MDUwQkQwMDgwMDBFODI1MzAyRDMwMzUzMEI1MzBCRDMwM0QzMDlDQTc1QjlGMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4NjJGRjBBRUEwMDgwMDBFOEM5NDFDOEVDNDJFMTAwRTA2MEZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEM4NDBDMEVDMDA4MDAwRTg1REZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEQ4Cis6MDAwMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9tYXRyb3gvZzQwMF93YXJwLkgxNiBiL2Zpcm13YXJlL21hdHJveC9nNDAwX3dhcnAuSDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzJkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9tYXRyb3gvZzQwMF93YXJwLkgxNgpAQCAtMCwwICsxLDQ0IEBACisvKgorICogV0FSUCBwaXBlcyBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbnMgdGhleSBwZXJmb3JtLCB3aGVyZQorICoKKyAqICAgLSBUIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdGV4dHVyZSBzdGFnZSAwCisgKiAgIC0gVDIgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBib3RoIHRleHR1cmUgc3RhZ2UgMCBhbmQgdGV4dHVyZSBzdGFnZSAxCisgKiAgIC0gRyBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHRyaWFuZ2xlIGludGVuc2l0eSAoR291cmF1ZCBpbnRlcnBvbGF0aW9uKQorICogICAtIFogc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBaIGJ1ZmZlciBpbnRlcnBvbGF0aW9uCisgKiAgIC0gUyBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHNwZWN1bGFyIGhpZ2hsaWdodAorICogICAtIEEgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB0aGUgYWxwaGEgY2hhbm5lbAorICogICAtIEYgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB2ZXJ0ZXggZm9nIGludGVycG9sYXRpb24KKyAqLworLyogVEdaICovCis6MDMzODAwMDAwMDAwODg5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODIyNDA0OEJGMkE0MDUwQkYzMjQxNDlCRjNBNDE1MUJGQzM2QkNCNkIwMDg4OThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNEJBMEU4QURFRTI5OUYwMEUwNDkwNDkwRTI1MTA0MzE0NkIxRTg0OTQxQzBFQzM5NTdCMUU4MDAwNDQ2RTI3MzUzQTBFODUxNDFDMEVDMzEwMDM5MDA1ODgwMTVFQTA4MDQxMDA0NTE0OUMwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNEFCRjI3NEFBMEU4MUE0MjUyQkYxRTQ5NjBFQTczN0JDOEVDMjY1MTYwRUEzMjQwNDhCRDIyNDA1MEJEMTI0MTQ5QkQzQTQxNTFCREJGMkYyNkJEMDBFMDdCNzIzMjIwMjIyMDEyMjAzQTIwNDYzMTQ2QkY0RTMxNEVCRkIzRTIyRDlGMDA4MDAwRTg1NjMxNTZCRjQ3Mzk0N0JGNEYzOTRGQkY1NzM5NTdCRjRBODAwN0VBMjQ0MTIwRTk0MjczRjhFQzAwRTAyRDczMzM3MjBDRTNBNTJGMUVCRDQzNDMyRERGNEI0QjJEREZBRTFFMjZCRDU4RTMzMzY2NTM1MzJEREYwMDgwMDBFOEI4MzgzM0JGMDBFMDU5RTMxRTEyNDFFOTFBMjI0MUU5MkI0MDNERTkzRjRCQTBFODJENzMzMDc2MDU4MDNERUEzNzQzQTBFODNENTNBMEU4NDg3MEY4RUMyQjQ4M0NFOTFGMjdCQ0U4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxODNBNDFFOTFEMzI0MUU5MkE0MDIwRTk1NjNENTZERjQ2Mzc0NkRGNEUzRjRFREYxNjMwMjBFOTRGM0Y0RkRGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREY0NzM3NDdERjU3M0Q1N0RGM0RDRjc0QzAzN0NGNzRDNDMxNTMyRjlGMzQ4MDIwRTkzOUU1MkM5RjNDM0QyMEU5MEE0NDRDQjAwMjQ0NTRCMDJBNDQ0Q0IyMUE0NDU0QjIxRDgwM0FFQTBBMjAwMjIwM0RDRjc0QzIyQTIwMUEyMDMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5MzE1MzJGOUYwMDgwMDBFODJBNDQ0Q0I0MUE0NDU0QjQzOUU1MkM5RjM4M0QyMEU5ODg3MzVFRTkyQTIwMUEyMDJBNDY0RUJGMUE0NjU2QkYzMTUzMkY5RjNFMzA0RkU5MzlFNTJDOUYzRjM4NEZFOTBBNDc0RkJGMDI0NzU3QkYzMTUzMkY5RjNBMzE0RkU5MzlFNTJDOUYzQjM5NEZFOTJBNDM0QkJGMUE0MzUzQkYzMDUwMkU5RjM2MzE0RkU5MzgyMTJDOUYzNzM5NEZFOTMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5Mzc0ODUwQkQ4QTM2MjBFOTg2NzY1N0U5OEIzRTIwRTk4MjMwNTdFOTg3Nzc1N0U5ODMzODU3RTkzNTQ5NTFCRDg0MzE1RUU5MzAxRjVGRTk4NTM5NUVFOTU3MjUyMEU5MkI0ODIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDI2NzcyNDQ5MjBFOUFGRkYyMEVBMTYyNjIwRTk1NzJFQkZFQTFDNDZBMEU4MjM0RUEwRTgyQjU2QTBFODFENDdBMEU4MjQ0RkEwRTgyQzU3QTBFODFDMDAyMzAwMkIwMDAwRTAxRDAwMjQwMDJDMDAwMEUwMUM2NTIzNjUyQjY1MDBFMDFENjUyNDY1MkM2NTAwRTAxQzIzNjBFQzM2RDczNkFEMkI4MDYwRUMxRDI0NjBFQzNFRDczRUFEMkM4MDYwRUMxQzJCREVFODIzODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcxQ0JEM0JENzIzQkQ0NjgwNDZDRjRGODA0RkNGNTYzMzU2Q0Y0NzNCNDdDRkQ2RkYyMEVBMDA4MDAwRTg0RTMzNEVDRjU3M0I1N0NGOURGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUM1OQorLyogVEdaRiAqLworOjAzNjAwMDAwMDAwMDg4OThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgyMjQwNDhCRjJBNDA1MEJGMzI0MTQ5QkYzQTQxNTFCRkMzNkJDQjZCMDA4ODk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzRCQTBFOEFERUUyOTlGMDBFMDQ5MDQ5MEUyNTEwNDMxNDZCMUU4NDk0MUMwRUMzOTU3QjFFODAwMDQ0NkUyNzM1M0EwRTg1MTQxQzBFQzMxMDAzOTAwNUQ4MDE1RUEwODA0MTAwNDUxNDlDMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjRBQkYyNzRBQTBFODFBNDI1MkJGMUU0OTYwRUE3MzdCQzhFQzI2NTE2MEVBMzI0MDQ4QkQyMjQwNTBCRDEyNDE0OUJEM0E0MTUxQkRCRjJGMjZCRDAwRTA3QjcyMzIyMDIyMjAxMjIwM0EyMDQ2MzE0NkJGNEUzMTRFQkZCM0UyMkQ5RjAwODAwMEU4NTYzMTU2QkY0NzM5NDdCRjRGMzk0RkJGNTczOTU3QkY0RjgwMDdFQTI0NDEyMEU5NDI3M0Y4RUMwMEUwMkQ3MzMzNzIwQ0UzQTUyRjFFQkQ0MzQzMkRERjRCNEIyRERGQUUxRTI2QkQ1OEUzMzM2NjUzNTMyRERGMDA4MDAwRThCODM4MzNCRjAwRTA1OUUzMUUxMjQxRTkxQTIyNDFFOTJCNDAzREU5M0Y0QkEwRTgyRDczMzA3NjA1ODAzREVBMzc0M0EwRTgzRDUzQTBFODQ4NzBGOEVDMkI0ODNDRTkxRjI3QkNFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTgzQTQxRTkxRDMyNDFFOTJBNDAyMEU5NTYzRDU2REY0NjM3NDZERjRFM0Y0RURGMTYzMDIwRTk0RjNGNEZERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGNDczNzQ3REY1NzNENTdERjNEQ0Y3NEMwMzdDRjc0QzQzOUU1MkM5RjM0ODAyMEU5MzE1MzJGOUYwMDgwMDBFODg4NzM1RUU5MDA4MDAwRTgyN0NGNzVDNjNDM0QyMEU5MEE0NDRDQjAwMjQ0NTRCMDJBNDQ0Q0IyMUE0NDU0QjIyMDgwM0FFQTBBMjAwMjIwM0RDRjc0QzIyQTIwMUEyMDMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5MzE1MzJGOUYzMTI3MjBFOTBBNDQ0Q0I0MDI0NDU0QjQyQTQ1NERCNjFBNDU1NUI2MzlFNTJDOUYzODNEMjBFOTBBMjAwMjIwMkEyMDFBMjAwQTQ3NEZCRjAyNDc1N0JGMzA1MDJFOUYzRTMwNEZFOTM4MjEyQzlGM0YzODRGRTkyQTQ2NEVCRjFBNDY1NkJGMzE1MzJGOUYzQTMxNEZFOTM5RTUyQzlGM0IzOTRGRTkzMTUzMkY5RjM2MzA0RkU5MzlFNTJDOUYzNzM4NEZFOTJBNDM0QkJGMUE0MzUzQkYzMDUwMkU5RjM1MzE0RkU5MzgyMTJDOUYzOTM5NEZFOTMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5Mzc0ODUwQkQ4QTM2MjBFOTg2NzY1N0U5OEIzRTIwRTk4MjMwNTdFOTg3Nzc1N0U5ODMzODU3RTkzNTQ5NTFCRDg0MzE1RUU5MzAxRjVGRTk4NTM5NUVFOTU3MjUyMEU5MkI0ODIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDI2NzcyNDQ5MjBFOUFBRkYyMEVBMTYyNjIwRTk1NzJFQkZFQTFDNDZBMEU4MjM0RUEwRTgyQjU2QTBFODFENDdBMEU4MjQ0RkEwRTgyQzU3QTBFODFDMDAyMzAwMkIwMDAwRTAxRDAwMjQwMDJDMDAwMEUwMUM2NTIzNjUyQjY1MDBFMDFENjUyNDY1MkM2NTAwRTAxQzIzNjBFQzM2RDczNkFEMkI4MDYwRUMxRDI0NjBFQzNFRDczRUFEMkM4MDYwRUMxQzJCREVFODIzODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcxQ0JEM0JENzIzQkQ0NjgwNDZDRjRGODA0RkNGNTYzMzU2Q0Y0NzNCNDdDRkQzRkYyMEVBMDA4MDAwRTg0RTMzNEVDRjU3M0I1N0NGOThGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUM5MAorLyogVEdaQSAqLworOjAzNTgwMDAwMDAwMDg4OThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgyMjQwNDhCRjJBNDA1MEJGMzI0MTQ5QkYzQTQxNTFCRkMzNkJDQjZCMDA4ODk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzRCQTBFOEFERUUyOTlGMDBFMDQ5MDQ5MEUyNTEwNDMxNDZCMUU4NDk0MUMwRUMzOTU3QjFFODAwMDQ0NkUyNzM1M0EwRTg1MTQxQzBFQzMxMDAzOTAwNUM4MDE1RUEwODA0MTAwNDUxNDlDMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjRBQkYyNzRBQTBFODFBNDI1MkJGMUU0OTYwRUE3MzdCQzhFQzI2NTE2MEVBMzI0MDQ4QkQyMjQwNTBCRDEyNDE0OUJEM0E0MTUxQkRCRjJGMjZCRDAwRTA3QjcyMzIyMDIyMjAxMjIwM0EyMDQ2MzE0NkJGNEUzMTRFQkZCM0UyMkQ5RjAwODAwMEU4NTYzMTU2QkY0NzM5NDdCRjRGMzk0RkJGNTczOTU3QkY0RTgwMDdFQTI0NDEyMEU5NDI3M0Y4RUMwMEUwMkQ3MzMzNzIwQ0UzQTUyRjFFQkQ0MzQzMkRERjRCNEIyRERGQUUxRTI2QkQ1OEUzMzM2NjUzNTMyRERGMDA4MDAwRThCODM4MzNCRjAwRTA1OUUzMUUxMjQxRTkxQTIyNDFFOTJCNDAzREU5M0Y0QkEwRTgyRDczMzA3NjA1ODAzREVBMzc0M0EwRTgzRDUzQTBFODQ4NzBGOEVDMkI0ODNDRTkxRjI3QkNFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTgzQTQxRTkxRDMyNDFFOTJBNDAyMEU5NTYzRDU2REY0NjM3NDZERjRFM0Y0RURGMTYzMDIwRTk0RjNGNEZERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGNDczNzQ3REY1NzNENTdERjNEQ0Y3NEMwMzdDRjc0QzQzMTUzMkY5RjM0ODAyMEU5MzlFNTJDOUYzQzNEMjBFOTI3Q0Y3NEM2M0RDRjc0QzIwQTQ0NENCMDAyNDQ1NEIwMkE0NDRDQjIxQTQ0NTRCMjIwODAzQUVBMEEyMDAyMjA4ODczNUVFOTJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzMTUzMkY5RjlDMjcyMEU5MEE0NDRDQjQwMjQ0NTRCNDJBNDQ0Q0I2MUE0NDU0QjYzOUU1MkM5RjM4M0QyMEU5MEEyMDAyMjAyQTIwMUEyMDBBNDc0RkJGMDI0NzU3QkYzMDUwMkU5RjNFMzA0RkU5MzgyMTJDOUYzRjM4NEZFOTJBNDY0RUJGMUE0NjU2QkYzMTUzMkY5RjNBMzE0RkU5MzlFNTJDOUYzQjM5NEZFOTMxNTMyRjlGMzYzMDRGRTkzOUU1MkM5RjM3Mzg0RkU5MkE0MzRCQkYxQTQzNTNCRjMwNTAyRTlGOUQzMTRGRTkzODIxMkM5RjlFMzk0RkU5MzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkzNzQ4NTBCRDhBMzYyMEU5ODY3NjU3RTk4QjNFMjBFOTgyMzA1N0U5ODc3NzU3RTk4MzM4NTdFOTM1NDk1MUJEODQzMTVFRTkzMDFGNUZFOTg1Mzk1RUU5NTcyNTIwRTkyQjQ4MjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMjY3NzI0NDkyMEU5QUJGRjIwRUExNjI2MjBFOTU3MkVCRkVBMUM0NkEwRTgyMzRFQTBFODJCNTZBMEU4MUQ0N0EwRTgyNDRGQTBFODJDNTdBMEU4MUMwMDIzMDAyQjAwMDBFMDFEMDAyNDAwMkMwMDAwRTAxQzY1MjM2NTJCNjUwMEUwMUQ2NTI0NjUyQzY1MDBFMDFDMjM2MEVDMzZENzM2QUQyQjgwNjBFQzFEMjQ2MEVDM0VENzNFQUQyQzgwNjBFQzFDMkJERUU4MjM4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzFDQkQzQkQ3MjNCRDQ2ODA0NkNGNEY4MDRGQ0Y1NjMzNTZDRjQ3M0I0N0NGRDNGRjIwRUEwMDgwMDBFODRFMzM0RUNGNTczQjU3Q0Y5OUZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQzM1CisvKiBUR1pBRiAqLworOjAzODAwMDAwMDAwMDg4OThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgyMjQwNDhCRjJBNDA1MEJGMzI0MTQ5QkYzQTQxNTFCRkMzNkJDQjZCMDA4ODk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzRCQTBFOEFERUUyOTlGMDBFMDQ5MDQ5MEUyNTEwNDMxNDZCMUU4NDk0MUMwRUMzOTU3QjFFODAwMDQ0NkUyNzM1M0EwRTg1MTQxQzBFQzMxMDAzOTAwNjE4MDE1RUEwODA0MTAwNDUxNDlDMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjRBQkYyNzRBQTBFODFBNDI1MkJGMUU0OTYwRUE3MzdCQzhFQzI2NTE2MEVBMzI0MDQ4QkQyMjQwNTBCRDEyNDE0OUJEM0E0MTUxQkRCRjJGMjZCRDAwRTA3QjcyMzIyMDIyMjAxMjIwM0EyMDQ2MzE0NkJGNEUzMTRFQkZCM0UyMkQ5RjAwODAwMEU4NTYzMTU2QkY0NzM5NDdCRjRGMzk0RkJGNTczOTU3QkY1MzgwMDdFQTI0NDEyMEU5NDI3M0Y4RUMwMEUwMkQ3MzMzNzIwQ0UzQTUyRjFFQkQ0MzQzMkRERjRCNEIyRERGQUUxRTI2QkQ1OEUzMzM2NjUzNTMyRERGMDA4MDAwRThCODM4MzNCRjAwRTA1OUUzMUUxMjQxRTkxQTIyNDFFOTJCNDAzREU5M0Y0QkEwRTgyRDczMzA3NjA1ODAzREVBMzc0M0EwRTgzRDUzQTBFODQ4NzBGOEVDMkI0ODNDRTkxRjI3QkNFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTgzQTQxRTkxRDMyNDFFOTJBNDAyMEU5NTYzRDU2REY0NjM3NDZERjRFM0Y0RURGMTYzMDIwRTk0RjNGNEZERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGNDczNzQ3REY1NzNENTdERjNEQ0Y3NEMwMzdDRjc0QzQwQTQ0NENCMDAyNDQ1NEIwMzE1MzJGOUYzNDM3MjBFOTM5RTUyQzlGM0MzRDIwRTkyQTQ0NENCMjFBNDQ1NEIyMjY4MDNBRUEwQTIwMDIyMDg4NzM1RUU5MkEyMDFBMjAzRENGNzRDMjI3Q0Y3NEM2MzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzMTUzMkY5RjlDMjcyMEU5MEE0NDRDQjQwMjQ0NTRCNDJBNDQ0Q0I2MUE0NDU0QjYzOUU1MkM5RjM4M0QyMEU5MEEyMDAyMjAyQTIwMUEyMDNEQ0Y3NUM2MDA4MDAwRTgzMDUwMkU5RjNFMzA0RkU5MzgyMTJDOUYzRjM4NEZFOTBBNDU0REI2MDI0NTU1QjYzMTUzMkY5RjNBMzE0RkU5MzlFNTJDOUYzQjM5NEZFOTMxM0QyMEU5MEEyMDAyMjAyQTQ2NEVCRjFBNDY1NkJGMEE0NzRGQkYwMjQ3NTdCRjMwNTAyRTlGMzYzMDRGRTkzODIxMkM5RjM3Mzg0RkU5MzE1MzJGOUY5RDMxNEZFOTM5RTUyQzlGOUUzOTRGRTkyQTQzNEJCRjFBNDM1M0JGMzA1MDJFOUYzNTMwNEZFOTM4MjEyQzlGMzkzODRGRTkzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTM3NDg1MEJEOEEzNjIwRTk4Njc2NTdFOThCM0UyMEU5ODIzMDU3RTk4Nzc3NTdFOTgzMzg1N0U5MzU0OTUxQkQ4NDMxNUVFOTMwMUY1RkU5ODUzOTVFRTk1NzI1MjBFOTJCNDgyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAyNjc3MjQ0OTIwRTlBNkZGMjBFQTE2MjYyMEU5NTcyRUJGRUExQzQ2QTBFODIzNEVBMEU4MkI1NkEwRTgxRDQ3QTBFODI0NEZBMEU4MkM1N0EwRTgxQzAwMjMwMDJCMDAwMEUwMUQwMDI0MDAyQzAwMDBFMDFDNjUyMzY1MkI2NTAwRTAxRDY1MjQ2NTJDNjUwMEUwMUMyMzYwRUMzNkQ3MzZBRDJCODA2MEVDMUQyNDYwRUMzRUQ3M0VBRDJDODA2MEVDMUMyQkRFRTgyMzgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MUNCRDNCRDcyM0JENDY4MDQ2Q0Y0RjgwNEZDRjU2MzM1NkNGNDczQjQ3Q0ZDREZGMjBFQTAwODAwMEU4NEUzMzRFQ0Y1NzNCNTdDRjk0RkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDODkKKy8qIFRHWlMgKi8KKzowM0EwMDAwMDAwMDA4ODk4RTkwMDgwMDBFODAwODBBMEU5MDAwMEQ4RUNGRjgwQzBFOTAwODAwMEU4MjI0MDQ4QkYyQTQwNTBCRjMyNDE0OUJGM0E0MTUxQkZDMzZCQ0I2QjAwODg5OEU5NzM3QkM4RUM5NkUyNDEwNDdCNDNBMEU4NzM0QkEwRThBREVFMjk5RjAwRTA0OTA0OTBFMjUxMDQzMTQ2QjFFODQ5NDFDMEVDMzk1N0IxRTgwMDA0NDZFMjczNTNBMEU4NTE0MUMwRUMzMTAwMzkwMDY1ODAxNUVBMDgwNDEwMDQ1MTQ5QzBFQzJGNDE2MEVBMzEyMDM5MjAxRjQyQTBFODJBNDI0QUJGMjc0QUEwRTgxQTQyNTJCRjFFNDk2MEVBNzM3QkM4RUMyNjUxNjBFQTMyNDA0OEJEMjI0MDUwQkQxMjQxNDlCRDNBNDE1MUJEQkYyRjI2QkQwMEUwN0I3MjMyMjAyMjIwMTIyMDNBMjA0NjMxNDZCRjRFMzE0RUJGQjNFMjJEOUYwMDgwMDBFODU2MzE1NkJGNDczOTQ3QkY0RjM5NEZCRjU3Mzk1N0JGNTc4MDA3RUEyNDQxMjBFOTQyNzNGOEVDMDBFMDJENzMzMzcyMENFM0E1MkYxRUJENDM0MzJEREY0QjRCMkRERkFFMUUyNkJENThFMzMzNjY1MzUzMkRERjAwODAwMEU4QjgzODMzQkYwMEUwNTlFMzFFMTI0MUU5MUEyMjQxRTkyQjQwM0RFOTNGNEJBMEU4MkQ3MzMwNzYwNTgwM0RFQTM3NDNBMEU4M0Q1M0EwRTg0ODcwRjhFQzJCNDgzQ0U5MUYyN0JDRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE4M0E0MUU5MUQzMjQxRTkyQTQwMjBFOTU2M0Q1NkRGNDYzNzQ2REY0RTNGNEVERjE2MzAyMEU5NEYzRjRGREY0NzM3NDdERjU3M0Q1N0RGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREYyN0NGNzRDMjM3Q0Y3NEM0MEE0NDRDQjAwMjQ0NTRCMDNEQ0Y3NEMwMzQzNzIwRTkzMTUzMkY5RjM4MjcyMEU5MzlFNTJDOUYzQzNEMjBFOTJBNDQ0Q0IyMUE0NDU0QjIyOTgwM0FFQTBBMjAwMjIwMjdDRjc1QzAyQTIwMUEyMDMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5M0RDRjc1QzIzN0NGNzVDNDMxNTMyRjlGQTYyNzIwRTkzOUU1MkM5RkEzM0QyMEU5MkE0NDRDQjQxQTQ0NTRCNDBBNDU0REIwMDI0NTU1QjA4ODczNUVFOTJBMjAxQTIwQTAzNzIwRTkwQTIwMDIyMDMxNTMyRjlGM0UzMDRGRTkzOUU1MkM5RjNGMzg0RkU5MzA1MDJFOUYzQTMxNEZFOTJBNDU0REIyMUE0NTU1QjIwQTQ1NERCNDAyNDU1NUI0MzgyMTJDOUYzQjM5NEZFOTBBMjAwMjIwMkEyMDFBMjAyQTQ2NEVCRjFBNDY1NkJGMzE1MzJGOUYzNjMxNEZFOTM5RTUyQzlGMzczOTRGRTkzMDUwMkU5RkE3MzA0RkU5MzgyMTJDOUZBODM4NEZFOTBBNDc0RkJGMDI0NzU3QkYzMTUzMkY5RkE0MzE0RkU5MzlFNTJDOUZBNTM5NEZFOTJBNDM0QkJGMUE0MzUzQkYzMDUwMkU5RkExMzA0RkU5MzgyMTJDOUZBMjM4NEZFOTMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5Mzc0ODUwQkQ4QTM2MjBFOTg2NzY1N0U5OEIzRTIwRTk4MjMwNTdFOTg3Nzc1N0U5ODMzODU3RTkzNTQ5NTFCRDg0MzE1RUU5MzAxRjVGRTk4NTM5NUVFOTU3MjUyMEU5MkI0ODIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDI2NzcyNDQ5MjBFOUEyRkYyMEVBMTYyNjIwRTk1NzJFQkZFQTFDNDZBMEU4MjM0RUEwRTgyQjU2QTBFODFENDdBMEU4MjQ0RkEwRTgyQzU3QTBFODFDMDAyMzAwMkIwMDAwRTAxRDAwMjQwMDJDMDAwMEUwMUM2NTIzNjUyQjY1MDBFMDFENjUyNDY1MkM2NTAwRTAxQzIzNjBFQzM2RDczNkFEMkI4MDYwRUMxRDI0NjBFQzNFRDczRUFEMkM4MDYwRUMxQzJCREVFODIzODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcxQ0JEM0JENzIzQkQ0NjgwNDZDRjRGODA0RkNGNTYzMzU2Q0Y0NzNCNDdDRkNBRkYyMEVBMDA4MDAwRTg0RTMzNEVDRjU3M0I1N0NGOTBGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUNEOAorLyogVEdaU0YgKi8KKzowM0M4MDAwMDAwMDA4ODk4RTkwMDgwMDBFODAwODBBMEU5MDAwMEQ4RUNGRjgwQzBFOTAwODAwMEU4MjI0MDQ4QkYyQTQwNTBCRjMyNDE0OUJGM0E0MTUxQkZDMzZCQ0I2QjAwODg5OEU5NzM3QkM4RUM5NkUyNDEwNDdCNDNBMEU4NzM0QkEwRThBREVFMjk5RjAwRTA0OTA0OTBFMjUxMDQzMTQ2QjFFODQ5NDFDMEVDMzk1N0IxRTgwMDA0NDZFMjczNTNBMEU4NTE0MUMwRUMzMTAwMzkwMDZBODAxNUVBMDgwNDEwMDQ1MTQ5QzBFQzJGNDE2MEVBMzEyMDM5MjAxRjQyQTBFODJBNDI0QUJGMjc0QUEwRTgxQTQyNTJCRjFFNDk2MEVBNzM3QkM4RUMyNjUxNjBFQTMyNDA0OEJEMjI0MDUwQkQxMjQxNDlCRDNBNDE1MUJEQkYyRjI2QkQwMEUwN0I3MjMyMjAyMjIwMTIyMDNBMjA0NjMxNDZCRjRFMzE0RUJGQjNFMjJEOUYwMDgwMDBFODU2MzE1NkJGNDczOTQ3QkY0RjM5NEZCRjU3Mzk1N0JGNUM4MDA3RUEyNDQxMjBFOTQyNzNGOEVDMDBFMDJENzMzMzcyMENFM0E1MkYxRUJENDM0MzJEREY0QjRCMkRERkFFMUUyNkJENThFMzMzNjY1MzUzMkRERjAwODAwMEU4QjgzODMzQkYwMEUwNTlFMzFFMTI0MUU5MUEyMjQxRTkyQjQwM0RFOTNGNEJBMEU4MkQ3MzMwNzYwNTgwM0RFQTM3NDNBMEU4M0Q1M0EwRTg0ODcwRjhFQzJCNDgzQ0U5MUYyN0JDRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE4M0E0MUU5MUQzMjQxRTkyQTQwMjBFOTU2M0Q1NkRGNDYzNzQ2REY0RTNGNEVERjE2MzAyMEU5NEYzRjRGREY0NzM3NDdERjU3M0Q1N0RGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREYyN0NGNzRDMjM3Q0Y3NEM0MEE0NDRDQjAwMjQ0NTRCMDNEQ0Y3NEMwMzQzNzIwRTkzMTUzMkY5RjM4MjcyMEU5MzlFNTJDOUYzQzNEMjBFOTJBNDQ0Q0IyMUE0NDU0QjIyRTgwM0FFQTBBMjAwMjIwMjdDRjc1QzAyQTIwMUEyMDMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5M0RDRjc1QzIzN0NGNzVDNDMxNTMyRjlGQTYyNzIwRTkzOUU1MkM5RkEzM0QyMEU5MkE0NDRDQjQxQTQ0NTRCNDBBNDU0REIwMDI0NTU1QjA4ODczNUVFOTJBMjAxQTIwQTAzNzIwRTkwQTIwMDIyMDMxNTMyRjlGM0UzMDRGRTkzOUU1MkM5RjNGMzg0RkU5MzA1MDJFOUYzQTMxNEZFOTM4MjEyQzlGM0IzOTRGRTkyQTQ1NERCMjFBNDU1NUIyMEE0NTREQjQwMjQ1NTVCNDI3Q0Y3NUM2MkEyMDFBMjBBNzMwNEZFOTBBMjAwMjIwMzE1MzJGOUYzMTI3MjBFOTM5RTUyQzlGQTgzODRGRTkyQTQ1NERCNjFBNDU1NUI2MzA1MDJFOUYzNjMxNEZFOTM4MjEyQzlGMzczOTRGRTkwMDgwMDBFODJBMjAxQTIwMkE0NjRFQkYxQTQ2NTZCRjMxNTMyRjlGQTQzMTRGRTkzOUU1MkM5RkE1Mzk0RkU5MEE0NzRGQkYwMjQ3NTdCRjMxNTMyRjlGQTEzMDRGRTkzOUU1MkM5RkEyMzg0RkU5MkE0MzRCQkYxQTQzNTNCRjMwNTAyRTlGMzUzMTRGRTkzODIxMkM5RjM5Mzk0RkU5MzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkzNzQ4NTBCRDhBMzYyMEU5ODY3NjU3RTk4QjNFMjBFOTgyMzA1N0U5ODc3NzU3RTk4MzM4NTdFOTM1NDk1MUJEODQzMTVFRTkzMDFGNUZFOTg1Mzk1RUU5NTcyNTIwRTkyQjQ4MjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMjY3NzI0NDkyMEU5OURGRjIwRUExNjI2MjBFOTU3MkVCRkVBMUM0NkEwRTgyMzRFQTBFODJCNTZBMEU4MUQ0N0EwRTgyNDRGQTBFODJDNTdBMEU4MUMwMDIzMDAyQjAwMDBFMDFEMDAyNDAwMkMwMDAwRTAxQzY1MjM2NTJCNjUwMEUwMUQ2NTI0NjUyQzY1MDBFMDFDMjM2MEVDMzZENzM2QUQyQjgwNjBFQzFEMjQ2MEVDM0VENzNFQUQyQzgwNjBFQzFDMkJERUU4MjM4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzFDQkQzQkQ3MjNCRDQ2ODA0NkNGNEY4MDRGQ0Y1NjMzNTZDRjQ3M0I0N0NGQzVGRjIwRUEwMDgwMDBFODRFMzM0RUNGNTczQjU3Q0Y4QkZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQ0QzCisvKiBUR1pTQSAqLworOjAzQzgwMDAwMDAwMDg4OThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgyMjQwNDhCRjJBNDA1MEJGMzI0MTQ5QkYzQTQxNTFCRkMzNkJDQjZCMDA4ODk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzRCQTBFOEFERUUyOTlGMDBFMDQ5MDQ5MEUyNTEwNDMxNDZCMUU4NDk0MUMwRUMzOTU3QjFFODAwMDQ0NkUyNzM1M0EwRTg1MTQxQzBFQzMxMDAzOTAwNkE4MDE1RUEwODA0MTAwNDUxNDlDMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjRBQkYyNzRBQTBFODFBNDI1MkJGMUU0OTYwRUE3MzdCQzhFQzI2NTE2MEVBMzI0MDQ4QkQyMjQwNTBCRDEyNDE0OUJEM0E0MTUxQkRCRjJGMjZCRDAwRTA3QjcyMzIyMDIyMjAxMjIwM0EyMDQ2MzE0NkJGNEUzMTRFQkZCM0UyMkQ5RjAwODAwMEU4NTYzMTU2QkY0NzM5NDdCRjRGMzk0RkJGNTczOTU3QkY1QzgwMDdFQTI0NDEyMEU5NDI3M0Y4RUMwMEUwMkQ3MzMzNzIwQ0UzQTUyRjFFQkQ0MzQzMkRERjRCNEIyRERGQUUxRTI2QkQ1OEUzMzM2NjUzNTMyRERGMDA4MDAwRThCODM4MzNCRjAwRTA1OUUzMUUxMjQxRTkxQTIyNDFFOTJCNDAzREU5M0Y0QkEwRTgyRDczMzA3NjA1ODAzREVBMzc0M0EwRTgzRDUzQTBFODQ4NzBGOEVDMkI0ODNDRTkxRjI3QkNFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTgzQTQxRTkxRDMyNDFFOTJBNDAyMEU5NTYzRDU2REY0NjM3NDZERjRFM0Y0RURGMTYzMDIwRTk0RjNGNEZERjQ3Mzc0N0RGNTczRDU3REYzMjMyMkRERjIyMjIyRERGMTIxMjJEREYzQTNBMkRERjI3Q0Y3NEMyMzdDRjc0QzQwQTQ0NENCMDAyNDQ1NEIwM0RDRjc0QzAzNDM3MjBFOTMxNTMyRjlGMzgyNzIwRTkzOUU1MkM5RjNDM0QyMEU5MkE0NDRDQjIxQTQ0NTRCMjJFODAzQUVBMEEyMDAyMjAyN0NGNzVDMDJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzRENGNzVDMjM3Q0Y3NUM0MzE1MzJGOUZBNjI3MjBFOTM5RTUyQzlGQTMzRDIwRTkyQTQ0NENCNDFBNDQ1NEI0MEE0NTREQjAwMjQ1NTVCMDg4NzM1RUU5MkEyMDFBMjBBMDM3MjBFOTBBMjAwMjIwMzE1MzJGOUYzRTMwNEZFOTM5RTUyQzlGM0YzODRGRTkzMDUwMkU5RjNBMzE0RkU5MzgyMTJDOUYzQjM5NEZFOTJBNDU0REIyMUE0NTU1QjIwQTQ1NERCNDAyNDU1NUI0MjdDRjc0QzYyQTIwMUEyMEE3MzA0RkU5MEEyMDAyMjAzMTUzMkY5RjlDMjcyMEU5MzlFNTJDOUZBODM4NEZFOTJBNDQ0Q0I2MUE0NDU0QjYzMDUwMkU5RjM2MzE0RkU5MzgyMTJDOUYzNzM5NEZFOTAwODAwMEU4MkEyMDFBMjAyQTQ2NEVCRjFBNDY1NkJGMzE1MzJGOUZBNDMxNEZFOTM5RTUyQzlGQTUzOTRGRTkwQTQ3NEZCRjAyNDc1N0JGMzE1MzJGOUZBMTMwNEZFOTM5RTUyQzlGQTIzODRGRTkyQTQzNEJCRjFBNDM1M0JGMzA1MDJFOUY5RDMxNEZFOTM4MjEyQzlGOUUzOTRGRTkzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTM3NDg1MEJEOEEzNjIwRTk4Njc2NTdFOThCM0UyMEU5ODIzMDU3RTk4Nzc3NTdFOTgzMzg1N0U5MzU0OTUxQkQ4NDMxNUVFOTMwMUY1RkU5ODUzOTVFRTk1NzI1MjBFOTJCNDgyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAyNjc3MjQ0OTIwRTk5REZGMjBFQTE2MjYyMEU5NTcyRUJGRUExQzQ2QTBFODIzNEVBMEU4MkI1NkEwRTgxRDQ3QTBFODI0NEZBMEU4MkM1N0EwRTgxQzAwMjMwMDJCMDAwMEUwMUQwMDI0MDAyQzAwMDBFMDFDNjUyMzY1MkI2NTAwRTAxRDY1MjQ2NTJDNjUwMEUwMUMyMzYwRUMzNkQ3MzZBRDJCODA2MEVDMUQyNDYwRUMzRUQ3M0VBRDJDODA2MEVDMUMyQkRFRTgyMzgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MUNCRDNCRDcyM0JENDY4MDQ2Q0Y0RjgwNEZDRjU2MzM1NkNGNDczQjQ3Q0ZDNUZGMjBFQTAwODAwMEU4NEUzMzRFQ0Y1NzNCNTdDRjhCRkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDQTAKKy8qIFRHWlNBRiAqLworOjAzRTgwMDAwMDAwMDg4OThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgyMjQwNDhCRjJBNDA1MEJGMzI0MTQ5QkYzQTQxNTFCRkMzNkJDQjZCMDA4ODk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzRCQTBFOEFERUUyOTlGMDBFMDQ5MDQ5MEUyNTEwNDMxNDZCMUU4NDk0MUMwRUMzOTU3QjFFODAwMDQ0NkUyNzM1M0EwRTg1MTQxQzBFQzMxMDAzOTAwNkU4MDE1RUEwODA0MTAwNDUxNDlDMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjRBQkYyNzRBQTBFODFBNDI1MkJGMUU0OTYwRUE3MzdCQzhFQzI2NTE2MEVBMzI0MDQ4QkQyMjQwNTBCRDEyNDE0OUJEM0E0MTUxQkRCRjJGMjZCRDAwRTA3QjcyMzIyMDIyMjAxMjIwM0EyMDQ2MzE0NkJGNEUzMTRFQkZCM0UyMkQ5RjAwODAwMEU4NTYzMTU2QkY0NzM5NDdCRjRGMzk0RkJGNTczOTU3QkY2MDgwMDdFQTI0NDEyMEU5NDI3M0Y4RUMwMEUwMkQ3MzMzNzIwQ0UzQTUyRjFFQkQ0MzQzMkRERjRCNEIyRERGQUUxRTI2QkQ1OEUzMzM2NjUzNTMyRERGMDA4MDAwRThCODM4MzNCRjAwRTA1OUUzMUUxMjQxRTkxQTIyNDFFOTJCNDAzREU5M0Y0QkEwRTgyRDczMzA3NjA1ODAzREVBMzc0M0EwRTgzRDUzQTBFODQ4NzBGOEVDMkI0ODNDRTkxRjI3QkNFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTgzQTQxRTkxRDMyNDFFOTJBNDAyMEU5NTYzRDU2REY0NjM3NDZERjRFM0Y0RURGMTYzMDIwRTk0RjNGNEZERjQ3Mzc0N0RGNTczRDU3REYzMjMyMkRERjIyMjIyRERGMTIxMjJEREYzQTNBMkRERjI3Q0Y3NEMyMzdDRjc0QzQwQTQ0NENCMDAyNDQ1NEIwM0RDRjc0QzAzNDM3MjBFOTMxNTMyRjlGMzgyNzIwRTkzOUU1MkM5RjNDM0QyMEU5MkE0NDRDQjIxQTQ0NTRCMjMyODAzQUVBMEEyMDAyMjAyN0NGNzVDMDJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzRENGNzVDMjM3Q0Y3NUM0MzE1MzJGOUZBNjI3MjBFOTM5RTUyQzlGQTMzRDIwRTkyQTQ0NENCNDFBNDQ1NEI0MEE0NTREQjAwMjQ1NTVCMDg4NzM1RUU5MkEyMDFBMjBBMDM3MjBFOTBBMjAwMjIwMzE1MzJGOUYzRTMwNEZFOTM5RTUyQzlGM0YzODRGRTkzMDUwMkU5RjNBMzE0RkU5MzgyMTJDOUYzQjM5NEZFOTJBNDU0REIyMUE0NTU1QjIwQTQ1NERCNDAyNDU1NUI0MjdDRjc0QzYyQTIwMUEyMEE3MzA0RkU5MEEyMDAyMjAzMTUzMkY5RjlDMjcyMEU5MzlFNTJDOUZBODM4NEZFOTJBNDQ0Q0I2MUE0NDU0QjYzMDUwMkU5RjM2MzE0RkU5MzgyMTJDOUYzNzM5NEZFOTBBNDU0REI2MDI0NTU1QjYzRENGNzVDNjJBMjAxQTIwMkE0NjRFQkYxQTQ2NTZCRjMxNTMyRjlGQTQzMTRGRTkzOUU1MkM5RkE1Mzk0RkU5MzEzRDIwRTkwQTIwMDIyMDBBNDc0RkJGMDI0NzU3QkYzMDUwMkU5RkExMzA0RkU5MzgyMTJDOUZBMjM4NEZFOTMxNTMyRjlGOUQzMTRGRTkzOUU1MkM5RjlFMzk0RkU5MkE0MzRCQkYxQTQzNTNCRjMwNTAyRTlGMzUzMDRGRTkzODIxMkM5RjM5Mzg0RkU5MzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkzNzQ4NTBCRDhBMzYyMEU5ODY3NjU3RTk4QjNFMjBFOTgyMzA1N0U5ODc3NzU3RTk4MzM4NTdFOTM1NDk1MUJEODQzMTVFRTkzMDFGNUZFOTg1Mzk1RUU5NTcyNTIwRTkyQjQ4MjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMjY3NzI0NDkyMEU5OTlGRjIwRUExNjI2MjBFOTU3MkVCRkVBMUM0NkEwRTgyMzRFQTBFODJCNTZBMEU4MUQ0N0EwRTgyNDRGQTBFODJDNTdBMEU4MUMwMDIzMDAyQjAwMDBFMDFEMDAyNDAwMkMwMDAwRTAxQzY1MjM2NTJCNjUwMEUwMUQ2NTI0NjUyQzY1MDBFMDFDMjM2MEVDMzZENzM2QUQyQjgwNjBFQzFEMjQ2MEVDM0VENzNFQUQyQzgwNjBFQzFDMkJERUU4MjM4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzFDQkQzQkQ3MjNCRDQ2ODA0NkNGNEY4MDRGQ0Y1NjMzNTZDRjQ3M0I0N0NGQzFGRjIwRUEwMDgwMDBFODRFMzM0RUNGNTczQjU3Q0Y4N0ZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQzgzCisvKiBUMkdaICovCis6MDQzODAwMDAwMDAwOEE5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODBBNDA1MEJGMkE0MDYwQkYzMjQxNTFCRjNBNDE2MUJGQzM2QkQzNkIwMDhBOThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNTNBMEU4QURFRTIzOUYwMEUwNTEwNDkwRTI2MTA0MzE0NkIxRTg1MTQxRTBFQzM5NjdCMUU4MDAwNDQ2RTI3MzYzQTBFODYxNDFFMEVDMzEwMDM5MDA3ODgwMTVFQTEwMDQyMDA0NjE1MUUwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNTJCRjBGNTJBMEU4MUE0MjYyQkYxRTUxNjBFQTczN0JDOEVDMEU2MTYwRUEzMjQwNTBCRDIyNDA2MEJEMTI0MTUxQkQzQTQxNjFCREJGMkYwRUJEOTdFMjdCNzIzMjIwMjIyMDEyMjAzQTIwMzU0OEIxRTgzRDU5QjFFODQ2MzE0NkJGNTYzMTU2QkZCM0UyMkQ5RjAwODAwMEU4NjYzMTY2QkY0NzM5NDdCRjU3Mzk1N0JGNjczOTY3QkY2OTgwMDdFQTI0NDEyMEU5MzUwMDNEMDAwMEUwMkQ3MzMzNzIwQ0UzOEQyRjFFQkQ0Mzc1RjhFQzM1MjAzRDIwNDM0MzJEREY1MzUzMkRERkFFMUUwRUJENThFMzMzNjY0ODM1NDhCRjU4MzU1OEJGNjgzNTY4QkY0OTNENDlCRjU5M0Q1OUJGNjkzRDY5QkY2MzYzMkRERjREN0RGOEVDNTlFMzAwRTBCODM4MzNCRjJENzMzMDc2MTgzQTQxRTkzRjUzQTBFODA1ODAzREVBMzc0M0EwRTgzRDYzQTBFODUwNzBGOEVDMkI1MDNDRTkxRjBGQkNFODAwODAwMEU4NTk3OEY4RUMwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MUUxMjQxRTkxQTIyNDFFOTQ2Mzc0NkRGNTYzRjU2REYyQjQwM0RFOTY2M0Q2NkRGMUQzMjQxRTk2NzNENjdERjQ3Mzc0N0RGNTczRjU3REYyQTQwMjBFOTU5M0Y1OURGMTYzMDIwRTk2OTNENjlERjQ4Mzc0OERGNTgzRjU4REYxMjEyMkRERjIyMjIyRERGMzIzMjJEREYzQTNBMkRERjY4M0Q2OERGNDkzNzQ5REYzRENGNzRDMDM3Q0Y3NEM0MzE1MzJGOUYzNDgwMjBFOTM5RTUyQzlGM0MzRDIwRTkwQTQ0NTRCMDAyNDQ2NEIwMkE0NDU0QjIxQTQ0NjRCMjI1ODAzQUVBMEEyMDAyMjAzRENGNzRDMjJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzMTUzMkY5RjAwODAwMEU4MkE0NDU0QjQxQTQ0NjRCNDM5RTUyQzlGMzgzRDIwRTk4ODczNUVFOTJBMjAxQTIwMkE0NjU2QkYxQTQ2NjZCRjMxNTMyRjlGM0UzMDRGRTkzOUU1MkM5RjNGMzg0RkU5MEE0NzU3QkYwMjQ3NjdCRjMxNTMyRjlGM0EzMTRGRTkzOUU1MkM5RjNCMzk0RkU5MkE0MzUzQkYxQTQzNjNCRjMwNTAyRTlGMzYzMTRGRTkzODIxMkM5RjM3Mzk0RkU5MEE0ODU4QkYwMjQ4NjhCRjMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5MkE0OTU5QkYxQTQ5NjlCRjMwNTAyRTlGODIzMDU3RTkzODIxMkM5RjgzMzg1N0U5MzE1MzJGOUY4NDMxNUVFOTM5RTUyQzlGODUzOTVFRTk4Njc2NTdFOThBMzYyMEU5ODc3NzU3RTk4QjNFQkZFQTgwMzA1N0U5ODEzODU3RTk4MjMxNTdFOTg2Nzg1N0U5ODMzOTU3RTk4Nzc5NTdFOTMwMUY1RkU5OEEzNDIwRTk4QjNDMjBFOTM3NTA2MEJENTcwRDIwRTkzNTUxNjFCRDJCNTAyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAwRTc3MjQ1MTIwRTk5RkZGMjBFQTE2MEUyMEU5NTcyRUJGRUEwQjQ2QTBFODFCNTZBMEU4MkI2NkEwRTgwQzQ3QTBFODFDNTdBMEU4MkM2N0EwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNkQ3MzZBRDJCODA2MEVDMEMxQzYwRUMzRUQ3M0VBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MEJCRDNCRDcxQkJENDY4MDQ2Q0Y1NzgwNTdDRjY2MzM2NkNGNDczQjQ3Q0Y1NjMzNTZDRjY3M0I2N0NGMEI0OEEwRTgxQjU4QTBFODJCNjhBMEU4MEM0OUEwRTgxQzU5QTBFODJDNjlBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzRENzM0QUQyQjgwNjBFQzBDMUM2MEVDM0NENzNDQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNDgwMzRCRDNDODAzQ0JEMzNENzBCQkQzQkQ3MUJCRDQ4ODA0OENGNTk4MDU5Q0Y2ODMzNjhDRjQ5M0I0OUNGQkVGRjIwRUEwMDgwMDBFODU4MzM1OENGNjkzQjY5Q0Y3REZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQ0FDCisvKiBUMkdaRiAqLworOjA0NjAwMDAwMDAwMDhBOThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgwQTQwNTBCRjJBNDA2MEJGMzI0MTUxQkYzQTQxNjFCRkMzNkJEMzZCMDA4QTk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzUzQTBFOEFERUUyMzlGMDBFMDUxMDQ5MEUyNjEwNDMxNDZCMUU4NTE0MUUwRUMzOTY3QjFFODAwMDQ0NkUyNzM2M0EwRTg2MTQxRTBFQzMxMDAzOTAwN0Q4MDE1RUExMDA0MjAwNDYxNTFFMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjUyQkYwRjUyQTBFODFBNDI2MkJGMUU1MTYwRUE3MzdCQzhFQzBFNjE2MEVBMzI0MDUwQkQyMjQwNjBCRDEyNDE1MUJEM0E0MTYxQkRCRjJGMEVCRDk3RTI3QjcyMzIyMDIyMjAxMjIwM0EyMDM1NDhCMUU4M0Q1OUIxRTg0NjMxNDZCRjU2MzE1NkJGQjNFMjJEOUYwMDgwMDBFODY2MzE2NkJGNDczOTQ3QkY1NzM5NTdCRjY3Mzk2N0JGNkU4MDA3RUEyNDQxMjBFOTM1MDAzRDAwMDBFMDJENzMzMzcyMENFMzhEMkYxRUJENDM3NUY4RUMzNTIwM0QyMDQzNDMyRERGNTM1MzJEREZBRTFFMEVCRDU4RTMzMzY2NDgzNTQ4QkY1ODM1NThCRjY4MzU2OEJGNDkzRDQ5QkY1OTNENTlCRjY5M0Q2OUJGNjM2MzJEREY0RDdERjhFQzU5RTMwMEUwQjgzODMzQkYyRDczMzA3NjE4M0E0MUU5M0Y1M0EwRTgwNTgwM0RFQTM3NDNBMEU4M0Q2M0EwRTg1MDcwRjhFQzJCNTAzQ0U5MUYwRkJDRTgwMDgwMDBFODU5NzhGOEVDMDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTFFMTI0MUU5MUEyMjQxRTk0NjM3NDZERjU2M0Y1NkRGMkI0MDNERTk2NjNENjZERjFEMzI0MUU5NjczRDY3REY0NzM3NDdERjU3M0Y1N0RGMkE0MDIwRTk1OTNGNTlERjE2MzAyMEU5NjkzRDY5REY0ODM3NDhERjU4M0Y1OERGMTIxMjJEREYyMjIyMkRERjMyMzIyRERGM0EzQTJEREY2ODNENjhERjQ5Mzc0OURGM0RDRjc0QzAzN0NGNzRDNDM5RTUyQzlGMzQ4MDIwRTkzMTUzMkY5RjAwODAwMEU4ODg3MzVFRTkwMDgwMDBFODBGQ0Y3NUM2M0MzRDIwRTkwQTQ0NTRCMDAyNDQ2NEIwMkE0NDU0QjIxQTQ0NjRCMjI4ODAzQUVBMEEyMDAyMjAzRENGNzRDMjJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzMTUzMkY5RjMxMEYyMEU5MEE0NDU0QjQwMjQ0NjRCNDJBNDU1NUI2MUE0NTY1QjYzOUU1MkM5RjM4M0QyMEU5MEEyMDAyMjAyQTIwMUEyMDBBNDc1N0JGMDI0NzY3QkYzMDUwMkU5RjNFMzA0RkU5MzgyMTJDOUYzRjM4NEZFOTJBNDY1NkJGMUE0NjY2QkYzMTUzMkY5RjNBMzE0RkU5MzlFNTJDOUYzQjM5NEZFOTMxNTMyRjlGMzYzMDRGRTkzOUU1MkM5RjM3Mzg0RkU5MkE0MzUzQkYxQTQzNjNCRjMwNTAyRTlGMzUzMTRGRTkzODIxMkM5RjM5Mzk0RkU5MEE0ODU4QkYwMjQ4NjhCRjMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5MkE0OTU5QkYxQTQ5NjlCRjMwNTAyRTlGODIzMDU3RTkzODIxMkM5RjgzMzg1N0U5MzE1MzJGOUY4NDMxNUVFOTM5RTUyQzlGODUzOTVFRTk4Njc2NTdFOThBMzYyMEU5ODc3NzU3RTk4QjNFQkZFQTgwMzA1N0U5ODEzODU3RTk4MjMxNTdFOTg2Nzg1N0U5ODMzOTU3RTk4Nzc5NTdFOTMwMUY1RkU5OEEzNDIwRTk4QjNDMjBFOTM3NTA2MEJENTcwRDIwRTkzNTUxNjFCRDJCNTAyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAwRTc3MjQ1MTIwRTk5QUZGMjBFQTE2MEUyMEU5NTcyRUJGRUEwQjQ2QTBFODFCNTZBMEU4MkI2NkEwRTgwQzQ3QTBFODFDNTdBMEU4MkM2N0EwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNkQ3MzZBRDJCODA2MEVDMEMxQzYwRUMzRUQ3M0VBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MEJCRDNCRDcxQkJENDY4MDQ2Q0Y1NzgwNTdDRjY2MzM2NkNGNDczQjQ3Q0Y1NjMzNTZDRjY3M0I2N0NGMEI0OEEwRTgxQjU4QTBFODJCNjhBMEU4MEM0OUEwRTgxQzU5QTBFODJDNjlBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzRENzM0QUQyQjgwNjBFQzBDMUM2MEVDM0NENzNDQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNDgwMzRCRDNDODAzQ0JEMzNENzBCQkQzQkQ3MUJCRDQ4ODA0OENGNTk4MDU5Q0Y2ODMzNjhDRjQ5M0I0OUNGQkJGRjIwRUEwMDgwMDBFODU4MzM1OENGNjkzQjY5Q0Y3OEZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQ0ZCCisvKiBUMkdaQSAqLworOjA0NTgwMDAwMDAwMDhBOThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgwQTQwNTBCRjJBNDA2MEJGMzI0MTUxQkYzQTQxNjFCRkMzNkJEMzZCMDA4QTk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzUzQTBFOEFERUUyMzlGMDBFMDUxMDQ5MEUyNjEwNDMxNDZCMUU4NTE0MUUwRUMzOTY3QjFFODAwMDQ0NkUyNzM2M0EwRTg2MTQxRTBFQzMxMDAzOTAwN0M4MDE1RUExMDA0MjAwNDYxNTFFMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjUyQkYwRjUyQTBFODFBNDI2MkJGMUU1MTYwRUE3MzdCQzhFQzBFNjE2MEVBMzI0MDUwQkQyMjQwNjBCRDEyNDE1MUJEM0E0MTYxQkRCRjJGMEVCRDk3RTI3QjcyMzIyMDIyMjAxMjIwM0EyMDM1NDhCMUU4M0Q1OUIxRTg0NjMxNDZCRjU2MzE1NkJGQjNFMjJEOUYwMDgwMDBFODY2MzE2NkJGNDczOTQ3QkY1NzM5NTdCRjY3Mzk2N0JGNkQ4MDA3RUEyNDQxMjBFOTM1MDAzRDAwMDBFMDJENzMzMzcyMENFMzhEMkYxRUJENDM3NUY4RUMzNTIwM0QyMDQzNDMyRERGNTM1MzJEREZBRTFFMEVCRDU4RTMzMzY2NDgzNTQ4QkY1ODM1NThCRjY4MzU2OEJGNDkzRDQ5QkY1OTNENTlCRjY5M0Q2OUJGNjM2MzJEREY0RDdERjhFQzU5RTMwMEUwQjgzODMzQkYyRDczMzA3NjE4M0E0MUU5M0Y1M0EwRTgwNTgwM0RFQTM3NDNBMEU4M0Q2M0EwRTg1MDcwRjhFQzJCNTAzQ0U5MUYwRkJDRTgwMDgwMDBFODU5NzhGOEVDMDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTFFMTI0MUU5MUEyMjQxRTk0NjM3NDZERjU2M0Y1NkRGMkI0MDNERTk2NjNENjZERjFEMzI0MUU5NjczRDY3REY0NzM3NDdERjU3M0Y1N0RGMkE0MDIwRTk1OTNGNTlERjE2MzAyMEU5NjkzRDY5REY0ODM3NDhERjU4M0Y1OERGMTIxMjJEREYyMjIyMkRERjMyMzIyRERGM0EzQTJEREY2ODNENjhERjQ5Mzc0OURGM0RDRjc0QzAzN0NGNzRDNDMxNTMyRjlGMzQ4MDIwRTkzOUU1MkM5RjNDM0QyMEU5MEE0NDU0QjAwMjQ0NjRCMDJBNDQ1NEIyMUE0NDY0QjIyOTgwM0FFQTBBMjAwMjIwMEZDRjc0QzYzRENGNzRDMjg4NzM1RUU5MkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTMxNTMyRjlGOUMwRjIwRTkwQTQ0NTRCNDAyNDQ2NEI0MkE0NDU0QjYxQTQ0NjRCNjM5RTUyQzlGMzgzRDIwRTkwQTIwMDIyMDJBMjAxQTIwMEE0NzU3QkYwMjQ3NjdCRjMwNTAyRTlGM0UzMDRGRTkzODIxMkM5RjNGMzg0RkU5MkE0NjU2QkYxQTQ2NjZCRjMxNTMyRjlGM0EzMTRGRTkzOUU1MkM5RjNCMzk0RkU5MzE1MzJGOUYzNjMwNEZFOTM5RTUyQzlGMzczODRGRTkyQTQzNTNCRjFBNDM2M0JGMzA1MDJFOUY5RDMxNEZFOTM4MjEyQzlGOUUzOTRGRTkwQTQ4NThCRjAyNDg2OEJGMzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkyQTQ5NTlCRjFBNDk2OUJGMzA1MDJFOUY4MjMwNTdFOTM4MjEyQzlGODMzODU3RTkzMTUzMkY5Rjg0MzE1RUU5MzlFNTJDOUY4NTM5NUVFOTg2NzY1N0U5OEEzNjIwRTk4Nzc3NTdFOThCM0VCRkVBODAzMDU3RTk4MTM4NTdFOTgyMzE1N0U5ODY3ODU3RTk4MzM5NTdFOTg3Nzk1N0U5MzAxRjVGRTk4QTM0MjBFOThCM0MyMEU5Mzc1MDYwQkQ1NzBEMjBFOTM1NTE2MUJEMkI1MDIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDBFNzcyNDUxMjBFOTlCRkYyMEVBMTYwRTIwRTk1NzJFQkZFQTBCNDZBMEU4MUI1NkEwRTgyQjY2QTBFODBDNDdBMEU4MUM1N0EwRTgyQzY3QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM2RDczNkFEMkI4MDYwRUMwQzFDNjBFQzNFRDczRUFEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcwQkJEM0JENzFCQkQ0NjgwNDZDRjU3ODA1N0NGNjYzMzY2Q0Y0NzNCNDdDRjU2MzM1NkNGNjczQjY3Q0YwQjQ4QTBFODFCNThBMEU4MkI2OEEwRTgwQzQ5QTBFODFDNTlBMEU4MkM2OUEwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNEQ3MzRBRDJCODA2MEVDMEMxQzYwRUMzQ0Q3M0NBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM0ODAzNEJEM0M4MDNDQkQzM0Q3MEJCRDNCRDcxQkJENDg4MDQ4Q0Y1OTgwNTlDRjY4MzM2OENGNDkzQjQ5Q0ZCQUZGMjBFQTAwODAwMEU4NTgzMzU4Q0Y2OTNCNjlDRjc5RkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDQTAKKy8qIFQyR1pBRiAqLworOjA0ODAwMDAwMDAwMDhBOThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgwQTQwNTBCRjJBNDA2MEJGMzI0MTUxQkYzQTQxNjFCRkMzNkJEMzZCMDA4QTk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzUzQTBFOEFERUUyMzlGMDBFMDUxMDQ5MEUyNjEwNDMxNDZCMUU4NTE0MUUwRUMzOTY3QjFFODAwMDQ0NkUyNzM2M0EwRTg2MTQxRTBFQzMxMDAzOTAwODE4MDE1RUExMDA0MjAwNDYxNTFFMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjUyQkYwRjUyQTBFODFBNDI2MkJGMUU1MTYwRUE3MzdCQzhFQzBFNjE2MEVBMzI0MDUwQkQyMjQwNjBCRDEyNDE1MUJEM0E0MTYxQkRCRjJGMEVCRDk3RTI3QjcyMzIyMDIyMjAxMjIwM0EyMDM1NDhCMUU4M0Q1OUIxRTg0NjMxNDZCRjU2MzE1NkJGQjNFMjJEOUYwMDgwMDBFODY2MzE2NkJGNDczOTQ3QkY1NzM5NTdCRjY3Mzk2N0JGNzI4MDA3RUEyNDQxMjBFOTM1MDAzRDAwMDBFMDJENzMzMzcyMENFMzhEMkYxRUJENDM3NUY4RUMzNTIwM0QyMDQzNDMyRERGNTM1MzJEREZBRTFFMEVCRDU4RTMzMzY2NDgzNTQ4QkY1ODM1NThCRjY4MzU2OEJGNDkzRDQ5QkY1OTNENTlCRjY5M0Q2OUJGNjM2MzJEREY0RDdERjhFQzU5RTMwMEUwQjgzODMzQkYyRDczMzA3NjE4M0E0MUU5M0Y1M0EwRTgwNTgwM0RFQTM3NDNBMEU4M0Q2M0EwRTg1MDcwRjhFQzJCNTAzQ0U5MUYwRkJDRTgwMDgwMDBFODU5NzhGOEVDMDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTFFMTI0MUU5MUEyMjQxRTk0NjM3NDZERjU2M0Y1NkRGMkI0MDNERTk2NjNENjZERjFEMzI0MUU5NjczRDY3REY0NzM3NDdERjU3M0Y1N0RGMkE0MDIwRTk1OTNGNTlERjE2MzAyMEU5NjkzRDY5REY0ODM3NDhERjU4M0Y1OERGMTIxMjJEREYyMjIyMkRERjMyMzIyRERGM0EzQTJEREY2ODNENjhERjQ5Mzc0OURGM0RDRjc0QzAzN0NGNzRDNDBBNDQ1NEIwMDI0NDY0QjAzMTUzMkY5RjM0MzcyMEU5MzlFNTJDOUYzQzNEMjBFOTJBNDQ1NEIyMUE0NDY0QjIyRTgwM0FFQTBBMjAwMjIwODg3MzVFRTkyQTIwMUEyMDNEQ0Y3NEMyMEZDRjc0QzYzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTMxNTMyRjlGOUMwRjIwRTkwQTQ0NTRCNDAyNDQ2NEI0MkE0NDU0QjYxQTQ0NjRCNjM5RTUyQzlGMzgzRDIwRTkwQTIwMDIyMDJBMjAxQTIwM0RDRjc1QzYwMDgwMDBFODMwNTAyRTlGM0UzMDRGRTkzODIxMkM5RjNGMzg0RkU5MEE0NTU1QjYwMjQ1NjVCNjMxNTMyRjlGM0EzMTRGRTkzOUU1MkM5RjNCMzk0RkU5MzEzRDIwRTkwQTIwMDIyMDJBNDY1NkJGMUE0NjY2QkYwQTQ3NTdCRjAyNDc2N0JGMzA1MDJFOUYzNjMwNEZFOTM4MjEyQzlGMzczODRGRTkzMTUzMkY5RjlEMzE0RkU5MzlFNTJDOUY5RTM5NEZFOTJBNDM1M0JGMUE0MzYzQkYzMDUwMkU5RjM1MzA0RkU5MzgyMTJDOUYzOTM4NEZFOTBBNDg1OEJGMDI0ODY4QkYzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTJBNDk1OUJGMUE0OTY5QkYzMDUwMkU5RjgyMzA1N0U5MzgyMTJDOUY4MzM4NTdFOTMxNTMyRjlGODQzMTVFRTkzOUU1MkM5Rjg1Mzk1RUU5ODY3NjU3RTk4QTM2MjBFOTg3Nzc1N0U5OEIzRUJGRUE4MDMwNTdFOTgxMzg1N0U5ODIzMTU3RTk4Njc4NTdFOTgzMzk1N0U5ODc3OTU3RTkzMDFGNUZFOThBMzQyMEU5OEIzQzIwRTkzNzUwNjBCRDU3MEQyMEU5MzU1MTYxQkQyQjUwMjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMEU3NzI0NTEyMEU5OTZGRjIwRUExNjBFMjBFOTU3MkVCRkVBMEI0NkEwRTgxQjU2QTBFODJCNjZBMEU4MEM0N0EwRTgxQzU3QTBFODJDNjdBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzZENzM2QUQyQjgwNjBFQzBDMUM2MEVDM0VENzNFQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzBCQkQzQkQ3MUJCRDQ2ODA0NkNGNTc4MDU3Q0Y2NjMzNjZDRjQ3M0I0N0NGNTYzMzU2Q0Y2NzNCNjdDRjBCNDhBMEU4MUI1OEEwRTgyQjY4QTBFODBDNDlBMEU4MUM1OUEwRTgyQzY5QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM0RDczNEFEMkI4MDYwRUMwQzFDNjBFQzNDRDczQ0FEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzQ4MDM0QkQzQzgwM0NCRDMzRDcwQkJEM0JENzFCQkQ0ODgwNDhDRjU5ODA1OUNGNjgzMzY4Q0Y0OTNCNDlDRkI1RkYyMEVBMDA4MDAwRTg1ODMzNThDRjY5M0I2OUNGNzRGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUNEQworLyogVDJHWlMgKi8KKzowNEEwMDAwMDAwMDA4QTk4RTkwMDgwMDBFODAwODBBMEU5MDAwMEQ4RUNGRjgwQzBFOTAwODAwMEU4MEE0MDUwQkYyQTQwNjBCRjMyNDE1MUJGM0E0MTYxQkZDMzZCRDM2QjAwOEE5OEU5NzM3QkM4RUM5NkUyNDEwNDdCNDNBMEU4NzM1M0EwRThBREVFMjM5RjAwRTA1MTA0OTBFMjYxMDQzMTQ2QjFFODUxNDFFMEVDMzk2N0IxRTgwMDA0NDZFMjczNjNBMEU4NjE0MUUwRUMzMTAwMzkwMDg1ODAxNUVBMTAwNDIwMDQ2MTUxRTBFQzJGNDE2MEVBMzEyMDM5MjAxRjQyQTBFODJBNDI1MkJGMEY1MkEwRTgxQTQyNjJCRjFFNTE2MEVBNzM3QkM4RUMwRTYxNjBFQTMyNDA1MEJEMjI0MDYwQkQxMjQxNTFCRDNBNDE2MUJEQkYyRjBFQkQ5N0UyN0I3MjMyMjAyMjIwMTIyMDNBMjAzNTQ4QjFFODNENTlCMUU4NDYzMTQ2QkY1NjMxNTZCRkIzRTIyRDlGMDA4MDAwRTg2NjMxNjZCRjQ3Mzk0N0JGNTczOTU3QkY2NzM5NjdCRjc2ODAwN0VBMjQ0MTIwRTkzNTAwM0QwMDAwRTAyRDczMzM3MjBDRTM4RDJGMUVCRDQzNzVGOEVDMzUyMDNEMjA0MzQzMkRERjUzNTMyRERGQUUxRTBFQkQ1OEUzMzM2NjQ4MzU0OEJGNTgzNTU4QkY2ODM1NjhCRjQ5M0Q0OUJGNTkzRDU5QkY2OTNENjlCRjYzNjMyRERGNEQ3REY4RUM1OUUzMDBFMEI4MzgzM0JGMkQ3MzMwNzYxODNBNDFFOTNGNTNBMEU4MDU4MDNERUEzNzQzQTBFODNENjNBMEU4NTA3MEY4RUMyQjUwM0NFOTFGMEZCQ0U4MDA4MDAwRTg1OTc4RjhFQzAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxRTEyNDFFOTFBMjI0MUU5NDYzNzQ2REY1NjNGNTZERjJCNDAzREU5NjYzRDY2REYxRDMyNDFFOTY3M0Q2N0RGNDczNzQ3REY1NzNGNTdERjJBNDAyMEU5NTkzRjU5REYxNjMwMjBFOTY5M0Q2OURGNDgzNzQ4REY1ODNGNThERjY4M0Q2OERGNDkzNzQ5REYzMjMyMkRERjIyMjIyRERGMTIxMjJEREYzQTNBMkRERjBGQ0Y3NEMyMzdDRjc0QzQwQTQ0NTRCMDAyNDQ2NEIwM0RDRjc0QzAzNDM3MjBFOTMxNTMyRjlGMzgwRjIwRTkzOUU1MkM5RjNDM0QyMEU5MkE0NDU0QjIxQTQ0NjRCMjMxODAzQUVBMEEyMDAyMjAwRkNGNzVDMDJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzRENGNzVDMjM3Q0Y3NUM0MzE1MzJGOUZBNjBGMjBFOTM5RTUyQzlGQTMzRDIwRTkyQTQ0NTRCNDFBNDQ2NEI0MEE0NTU1QjAwMjQ1NjVCMDg4NzM1RUU5MkEyMDFBMjBBMDM3MjBFOTBBMjAwMjIwMzE1MzJGOUYzRTMwNEZFOTM5RTUyQzlGM0YzODRGRTkzMDUwMkU5RjNBMzE0RkU5MkE0NTU1QjIxQTQ1NjVCMjBBNDU1NUI0MDI0NTY1QjQzODIxMkM5RjNCMzk0RkU5MkEyMDFBMjAwQTIwMDIyMDJBNDY1NkJGMUE0NjY2QkYzMTUzMkY5RjM2MzE0RkU5MzlFNTJDOUYzNzM5NEZFOTMwNTAyRTlGQTczMDRGRTkzODIxMkM5RkE4Mzg0RkU5MEE0NzU3QkYwMjQ3NjdCRjMxNTMyRjlGQTQzMTRGRTkzOUU1MkM5RkE1Mzk0RkU5MkE0MzUzQkYxQTQzNjNCRjMwNTAyRTlGQTEzMDRGRTkzODIxMkM5RkEyMzg0RkU5MEE0ODU4QkYwMjQ4NjhCRjMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5MkE0OTU5QkYxQTQ5NjlCRjMwNTAyRTlGODIzMDU3RTkzODIxMkM5RjgzMzg1N0U5MzE1MzJGOUY4NDMxNUVFOTM5RTUyQzlGODUzOTVFRTk4Njc2NTdFOThBMzYyMEU5ODc3NzU3RTk4QjNFQkZFQTgwMzA1N0U5ODEzODU3RTk4MjMxNTdFOTg2Nzg1N0U5ODMzOTU3RTk4Nzc5NTdFOTMwMUY1RkU5OEEzNDIwRTk4QjNDMjBFOTM3NTA2MEJENTcwRDIwRTkzNTUxNjFCRDJCNTAyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAwRTc3MjQ1MTIwRTk5MkZGMjBFQTE2MEUyMEU5NTcyRUJGRUEwQjQ2QTBFODFCNTZBMEU4MkI2NkEwRTgwQzQ3QTBFODFDNTdBMEU4MkM2N0EwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNkQ3MzZBRDJCODA2MEVDMEMxQzYwRUMzRUQ3M0VBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MEJCRDNCRDcxQkJENDY4MDQ2Q0Y1NzgwNTdDRjY2MzM2NkNGNDczQjQ3Q0Y1NjMzNTZDRjY3M0I2N0NGMEI0OEEwRTgxQjU4QTBFODJCNjhBMEU4MEM0OUEwRTgxQzU5QTBFODJDNjlBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzRENzM0QUQyQjgwNjBFQzBDMUM2MEVDM0NENzNDQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNDgwMzRCRDNDODAzQ0JEMzNENzBCQkQzQkQ3MUJCRDQ4ODA0OENGNTk4MDU5Q0Y2ODMzNjhDRjQ5M0I0OUNGQjJGRjIwRUEwMDgwMDBFODU4MzM1OENGNjkzQjY5Q0Y3MEZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQzQzCisvKiBUMkdaU0YgKi8KKzowNEM4MDAwMDAwMDA4QTk4RTkwMDgwMDBFODAwODBBMEU5MDAwMEQ4RUNGRjgwQzBFOTAwODAwMEU4MEE0MDUwQkYyQTQwNjBCRjMyNDE1MUJGM0E0MTYxQkZDMzZCRDM2QjAwOEE5OEU5NzM3QkM4RUM5NkUyNDEwNDdCNDNBMEU4NzM1M0EwRThBREVFMjM5RjAwRTA1MTA0OTBFMjYxMDQzMTQ2QjFFODUxNDFFMEVDMzk2N0IxRTgwMDA0NDZFMjczNjNBMEU4NjE0MUUwRUMzMTAwMzkwMDhBODAxNUVBMTAwNDIwMDQ2MTUxRTBFQzJGNDE2MEVBMzEyMDM5MjAxRjQyQTBFODJBNDI1MkJGMEY1MkEwRTgxQTQyNjJCRjFFNTE2MEVBNzM3QkM4RUMwRTYxNjBFQTMyNDA1MEJEMjI0MDYwQkQxMjQxNTFCRDNBNDE2MUJEQkYyRjBFQkQ5N0UyN0I3MjMyMjAyMjIwMTIyMDNBMjAzNTQ4QjFFODNENTlCMUU4NDYzMTQ2QkY1NjMxNTZCRkIzRTIyRDlGMDA4MDAwRTg2NjMxNjZCRjQ3Mzk0N0JGNTczOTU3QkY2NzM5NjdCRjdCODAwN0VBMjQ0MTIwRTkzNTAwM0QwMDAwRTAyRDczMzM3MjBDRTM4RDJGMUVCRDQzNzVGOEVDMzUyMDNEMjA0MzQzMkRERjUzNTMyRERGQUUxRTBFQkQ1OEUzMzM2NjQ4MzU0OEJGNTgzNTU4QkY2ODM1NjhCRjQ5M0Q0OUJGNTkzRDU5QkY2OTNENjlCRjYzNjMyRERGNEQ3REY4RUM1OUUzMDBFMEI4MzgzM0JGMkQ3MzMwNzYxODNBNDFFOTNGNTNBMEU4MDU4MDNERUEzNzQzQTBFODNENjNBMEU4NTA3MEY4RUMyQjUwM0NFOTFGMEZCQ0U4MDA4MDAwRTg1OTc4RjhFQzAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxRTEyNDFFOTFBMjI0MUU5NDYzNzQ2REY1NjNGNTZERjJCNDAzREU5NjYzRDY2REYxRDMyNDFFOTY3M0Q2N0RGNDczNzQ3REY1NzNGNTdERjJBNDAyMEU5NTkzRjU5REYxNjMwMjBFOTY5M0Q2OURGNDgzNzQ4REY1ODNGNThERjY4M0Q2OERGNDkzNzQ5REYzMjMyMkRERjIyMjIyRERGMTIxMjJEREYzQTNBMkRERjBGQ0Y3NEMyMzdDRjc0QzQwQTQ0NTRCMDAyNDQ2NEIwM0RDRjc0QzAzNDM3MjBFOTMxNTMyRjlGMzgwRjIwRTkzOUU1MkM5RjNDM0QyMEU5MkE0NDU0QjIxQTQ0NjRCMjM2ODAzQUVBMEEyMDAyMjAwRkNGNzVDMDJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzRENGNzVDMjM3Q0Y3NUM0MzE1MzJGOUZBNjBGMjBFOTM5RTUyQzlGQTMzRDIwRTkyQTQ0NTRCNDFBNDQ2NEI0MEE0NTU1QjAwMjQ1NjVCMDg4NzM1RUU5MkEyMDFBMjBBMDM3MjBFOTBBMjAwMjIwMzE1MzJGOUYzRTMwNEZFOTM5RTUyQzlGM0YzODRGRTkzMDUwMkU5RjNBMzE0RkU5MzgyMTJDOUYzQjM5NEZFOTJBNDU1NUIyMUE0NTY1QjIwQTQ1NTVCNDAyNDU2NUI0MEZDRjc1QzYyQTIwMUEyMEE3MzA0RkU5MEEyMDAyMjAzMTUzMkY5RjMxMEYyMEU5MzlFNTJDOUZBODM4NEZFOTJBNDU1NUI2MUE0NTY1QjYzMDUwMkU5RjM2MzE0RkU5MzgyMTJDOUYzNzM5NEZFOTAwODAwMEU4MkEyMDFBMjAyQTQ2NTZCRjFBNDY2NkJGMzE1MzJGOUZBNDMxNEZFOTM5RTUyQzlGQTUzOTRGRTkwQTQ3NTdCRjAyNDc2N0JGMzE1MzJGOUZBMTMwNEZFOTM5RTUyQzlGQTIzODRGRTkyQTQzNTNCRjFBNDM2M0JGMzA1MDJFOUYzNTMxNEZFOTM4MjEyQzlGMzkzOTRGRTkwQTQ4NThCRjAyNDg2OEJGMzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkyQTQ5NTlCRjFBNDk2OUJGMzA1MDJFOUY4MjMwNTdFOTM4MjEyQzlGODMzODU3RTkzMTUzMkY5Rjg0MzE1RUU5MzlFNTJDOUY4NTM5NUVFOTg2NzY1N0U5OEEzNjIwRTk4Nzc3NTdFOThCM0VCRkVBODAzMDU3RTk4MTM4NTdFOTgyMzE1N0U5ODY3ODU3RTk4MzM5NTdFOTg3Nzk1N0U5MzAxRjVGRTk4QTM0MjBFOThCM0MyMEU5Mzc1MDYwQkQ1NzBEMjBFOTM1NTE2MUJEMkI1MDIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDBFNzcyNDUxMjBFOThERkYyMEVBMTYwRTIwRTk1NzJFQkZFQTBCNDZBMEU4MUI1NkEwRTgyQjY2QTBFODBDNDdBMEU4MUM1N0EwRTgyQzY3QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM2RDczNkFEMkI4MDYwRUMwQzFDNjBFQzNFRDczRUFEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcwQkJEM0JENzFCQkQ0NjgwNDZDRjU3ODA1N0NGNjYzMzY2Q0Y0NzNCNDdDRjU2MzM1NkNGNjczQjY3Q0YwQjQ4QTBFODFCNThBMEU4MkI2OEEwRTgwQzQ5QTBFODFDNTlBMEU4MkM2OUEwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNEQ3MzRBRDJCODA2MEVDMEMxQzYwRUMzQ0Q3M0NBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM0ODAzNEJEM0M4MDNDQkQzM0Q3MEJCRDNCRDcxQkJENDg4MDQ4Q0Y1OTgwNTlDRjY4MzM2OENGNDkzQjQ5Q0ZBREZGMjBFQTAwODAwMEU4NTgzMzU4Q0Y2OTNCNjlDRjZCRkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDNTYKKy8qIFQyR1pTQSAqLworOjA0QzgwMDAwMDAwMDhBOThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgwQTQwNTBCRjJBNDA2MEJGMzI0MTUxQkYzQTQxNjFCRkMzNkJEMzZCMDA4QTk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzUzQTBFOEFERUUyMzlGMDBFMDUxMDQ5MEUyNjEwNDMxNDZCMUU4NTE0MUUwRUMzOTY3QjFFODAwMDQ0NkUyNzM2M0EwRTg2MTQxRTBFQzMxMDAzOTAwOEE4MDE1RUExMDA0MjAwNDYxNTFFMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjUyQkYwRjUyQTBFODFBNDI2MkJGMUU1MTYwRUE3MzdCQzhFQzBFNjE2MEVBMzI0MDUwQkQyMjQwNjBCRDEyNDE1MUJEM0E0MTYxQkRCRjJGMEVCRDk3RTI3QjcyMzIyMDIyMjAxMjIwM0EyMDM1NDhCMUU4M0Q1OUIxRTg0NjMxNDZCRjU2MzE1NkJGQjNFMjJEOUYwMDgwMDBFODY2MzE2NkJGNDczOTQ3QkY1NzM5NTdCRjY3Mzk2N0JGN0I4MDA3RUEyNDQxMjBFOTM1MDAzRDAwMDBFMDJENzMzMzcyMENFMzhEMkYxRUJENDM3NUY4RUMzNTIwM0QyMDQzNDMyRERGNTM1MzJEREZBRTFFMEVCRDU4RTMzMzY2NDgzNTQ4QkY1ODM1NThCRjY4MzU2OEJGNDkzRDQ5QkY1OTNENTlCRjY5M0Q2OUJGNjM2MzJEREY0RDdERjhFQzU5RTMwMEUwQjgzODMzQkYyRDczMzA3NjE4M0E0MUU5M0Y1M0EwRTgwNTgwM0RFQTM3NDNBMEU4M0Q2M0EwRTg1MDcwRjhFQzJCNTAzQ0U5MUYwRkJDRTgwMDgwMDBFODU5NzhGOEVDMDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTFFMTI0MUU5MUEyMjQxRTk0NjM3NDZERjU2M0Y1NkRGMkI0MDNERTk2NjNENjZERjFEMzI0MUU5NjczRDY3REY0NzM3NDdERjU3M0Y1N0RGMkE0MDIwRTk1OTNGNTlERjE2MzAyMEU5NjkzRDY5REY0ODM3NDhERjU4M0Y1OERGNjgzRDY4REY0OTM3NDlERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGMEZDRjc0QzIzN0NGNzRDNDBBNDQ1NEIwMDI0NDY0QjAzRENGNzRDMDM0MzcyMEU5MzE1MzJGOUYzODBGMjBFOTM5RTUyQzlGM0MzRDIwRTkyQTQ0NTRCMjFBNDQ2NEIyMzY4MDNBRUEwQTIwMDIyMDBGQ0Y3NUMwMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTNEQ0Y3NUMyMzdDRjc1QzQzMTUzMkY5RkE2MEYyMEU5MzlFNTJDOUZBMzNEMjBFOTJBNDQ1NEI0MUE0NDY0QjQwQTQ1NTVCMDAyNDU2NUIwODg3MzVFRTkyQTIwMUEyMEEwMzcyMEU5MEEyMDAyMjAzMTUzMkY5RjNFMzA0RkU5MzlFNTJDOUYzRjM4NEZFOTMwNTAyRTlGM0EzMTRGRTkzODIxMkM5RjNCMzk0RkU5MkE0NTU1QjIxQTQ1NjVCMjBBNDU1NUI0MDI0NTY1QjQwRkNGNzRDNjJBMjAxQTIwQTczMDRGRTkwQTIwMDIyMDMxNTMyRjlGOUMwRjIwRTkzOUU1MkM5RkE4Mzg0RkU5MkE0NDU0QjYxQTQ0NjRCNjMwNTAyRTlGMzYzMTRGRTkzODIxMkM5RjM3Mzk0RkU5MDA4MDAwRTgyQTIwMUEyMDJBNDY1NkJGMUE0NjY2QkYzMTUzMkY5RkE0MzE0RkU5MzlFNTJDOUZBNTM5NEZFOTBBNDc1N0JGMDI0NzY3QkYzMTUzMkY5RkExMzA0RkU5MzlFNTJDOUZBMjM4NEZFOTJBNDM1M0JGMUE0MzYzQkYzMDUwMkU5RjlEMzE0RkU5MzgyMTJDOUY5RTM5NEZFOTBBNDg1OEJGMDI0ODY4QkYzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTJBNDk1OUJGMUE0OTY5QkYzMDUwMkU5RjgyMzA1N0U5MzgyMTJDOUY4MzM4NTdFOTMxNTMyRjlGODQzMTVFRTkzOUU1MkM5Rjg1Mzk1RUU5ODY3NjU3RTk4QTM2MjBFOTg3Nzc1N0U5OEIzRUJGRUE4MDMwNTdFOTgxMzg1N0U5ODIzMTU3RTk4Njc4NTdFOTgzMzk1N0U5ODc3OTU3RTkzMDFGNUZFOThBMzQyMEU5OEIzQzIwRTkzNzUwNjBCRDU3MEQyMEU5MzU1MTYxQkQyQjUwMjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMEU3NzI0NTEyMEU5OERGRjIwRUExNjBFMjBFOTU3MkVCRkVBMEI0NkEwRTgxQjU2QTBFODJCNjZBMEU4MEM0N0EwRTgxQzU3QTBFODJDNjdBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzZENzM2QUQyQjgwNjBFQzBDMUM2MEVDM0VENzNFQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzBCQkQzQkQ3MUJCRDQ2ODA0NkNGNTc4MDU3Q0Y2NjMzNjZDRjQ3M0I0N0NGNTYzMzU2Q0Y2NzNCNjdDRjBCNDhBMEU4MUI1OEEwRTgyQjY4QTBFODBDNDlBMEU4MUM1OUEwRTgyQzY5QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM0RDczNEFEMkI4MDYwRUMwQzFDNjBFQzNDRDczQ0FEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzQ4MDM0QkQzQzgwM0NCRDMzRDcwQkJEM0JENzFCQkQ0ODgwNDhDRjU5ODA1OUNGNjgzMzY4Q0Y0OTNCNDlDRkFERkYyMEVBMDA4MDAwRTg1ODMzNThDRjY5M0I2OUNGNkJGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUMyMworLyogVDJHWlNBRiAqLworOjA0RTgwMDAwMDAwMDhBOThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgwQTQwNTBCRjJBNDA2MEJGMzI0MTUxQkYzQTQxNjFCRkMzNkJEMzZCMDA4QTk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzUzQTBFOEFERUUyMzlGMDBFMDUxMDQ5MEUyNjEwNDMxNDZCMUU4NTE0MUUwRUMzOTY3QjFFODAwMDQ0NkUyNzM2M0EwRTg2MTQxRTBFQzMxMDAzOTAwOEU4MDE1RUExMDA0MjAwNDYxNTFFMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjUyQkYwRjUyQTBFODFBNDI2MkJGMUU1MTYwRUE3MzdCQzhFQzBFNjE2MEVBMzI0MDUwQkQyMjQwNjBCRDEyNDE1MUJEM0E0MTYxQkRCRjJGMEVCRDk3RTI3QjcyMzIyMDIyMjAxMjIwM0EyMDM1NDhCMUU4M0Q1OUIxRTg0NjMxNDZCRjU2MzE1NkJGQjNFMjJEOUYwMDgwMDBFODY2MzE2NkJGNDczOTQ3QkY1NzM5NTdCRjY3Mzk2N0JGN0Y4MDA3RUEyNDQxMjBFOTM1MDAzRDAwMDBFMDJENzMzMzcyMENFMzhEMkYxRUJENDM3NUY4RUMzNTIwM0QyMDQzNDMyRERGNTM1MzJEREZBRTFFMEVCRDU4RTMzMzY2NDgzNTQ4QkY1ODM1NThCRjY4MzU2OEJGNDkzRDQ5QkY1OTNENTlCRjY5M0Q2OUJGNjM2MzJEREY0RDdERjhFQzU5RTMwMEUwQjgzODMzQkYyRDczMzA3NjE4M0E0MUU5M0Y1M0EwRTgwNTgwM0RFQTM3NDNBMEU4M0Q2M0EwRTg1MDcwRjhFQzJCNTAzQ0U5MUYwRkJDRTgwMDgwMDBFODU5NzhGOEVDMDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTFFMTI0MUU5MUEyMjQxRTk0NjM3NDZERjU2M0Y1NkRGMkI0MDNERTk2NjNENjZERjFEMzI0MUU5NjczRDY3REY0NzM3NDdERjU3M0Y1N0RGMkE0MDIwRTk1OTNGNTlERjE2MzAyMEU5NjkzRDY5REY0ODM3NDhERjU4M0Y1OERGNjgzRDY4REY0OTM3NDlERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGMEZDRjc0QzIzN0NGNzRDNDBBNDQ1NEIwMDI0NDY0QjAzRENGNzRDMDM0MzcyMEU5MzE1MzJGOUYzODBGMjBFOTM5RTUyQzlGM0MzRDIwRTkyQTQ0NTRCMjFBNDQ2NEIyM0E4MDNBRUEwQTIwMDIyMDBGQ0Y3NUMwMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTNEQ0Y3NUMyMzdDRjc1QzQzMTUzMkY5RkE2MEYyMEU5MzlFNTJDOUZBMzNEMjBFOTJBNDQ1NEI0MUE0NDY0QjQwQTQ1NTVCMDAyNDU2NUIwODg3MzVFRTkyQTIwMUEyMEEwMzcyMEU5MEEyMDAyMjAzMTUzMkY5RjNFMzA0RkU5MzlFNTJDOUYzRjM4NEZFOTMwNTAyRTlGM0EzMTRGRTkzODIxMkM5RjNCMzk0RkU5MkE0NTU1QjIxQTQ1NjVCMjBBNDU1NUI0MDI0NTY1QjQwRkNGNzRDNjJBMjAxQTIwQTczMDRGRTkwQTIwMDIyMDMxNTMyRjlGOUMwRjIwRTkzOUU1MkM5RkE4Mzg0RkU5MkE0NDU0QjYxQTQ0NjRCNjMwNTAyRTlGMzYzMTRGRTkzODIxMkM5RjM3Mzk0RkU5MEE0NTU1QjYwMjQ1NjVCNjNEQ0Y3NUM2MkEyMDFBMjAyQTQ2NTZCRjFBNDY2NkJGMzE1MzJGOUZBNDMxNEZFOTM5RTUyQzlGQTUzOTRGRTkzMTNEMjBFOTBBMjAwMjIwMEE0NzU3QkYwMjQ3NjdCRjMwNTAyRTlGQTEzMDRGRTkzODIxMkM5RkEyMzg0RkU5MzE1MzJGOUY5RDMxNEZFOTM5RTUyQzlGOUUzOTRGRTkyQTQzNTNCRjFBNDM2M0JGMzA1MDJFOUYzNTMwNEZFOTM4MjEyQzlGMzkzODRGRTkwQTQ4NThCRjAyNDg2OEJGMzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkyQTQ5NTlCRjFBNDk2OUJGMzA1MDJFOUY4MjMwNTdFOTM4MjEyQzlGODMzODU3RTkzMTUzMkY5Rjg0MzE1RUU5MzlFNTJDOUY4NTM5NUVFOTg2NzY1N0U5OEEzNjIwRTk4Nzc3NTdFOThCM0VCRkVBODAzMDU3RTk4MTM4NTdFOTgyMzE1N0U5ODY3ODU3RTk4MzM5NTdFOTg3Nzk1N0U5MzAxRjVGRTk4QTM0MjBFOThCM0MyMEU5Mzc1MDYwQkQ1NzBEMjBFOTM1NTE2MUJEMkI1MDIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDBFNzcyNDUxMjBFOTg5RkYyMEVBMTYwRTIwRTk1NzJFQkZFQTBCNDZBMEU4MUI1NkEwRTgyQjY2QTBFODBDNDdBMEU4MUM1N0EwRTgyQzY3QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM2RDczNkFEMkI4MDYwRUMwQzFDNjBFQzNFRDczRUFEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcwQkJEM0JENzFCQkQ0NjgwNDZDRjU3ODA1N0NGNjYzMzY2Q0Y0NzNCNDdDRjU2MzM1NkNGNjczQjY3Q0YwQjQ4QTBFODFCNThBMEU4MkI2OEEwRTgwQzQ5QTBFODFDNTlBMEU4MkM2OUEwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNEQ3MzRBRDJCODA2MEVDMEMxQzYwRUMzQ0Q3M0NBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM0ODAzNEJEM0M4MDNDQkQzM0Q3MEJCRDNCRDcxQkJENDg4MDQ4Q0Y1OTgwNTlDRjY4MzM2OENGNDkzQjQ5Q0ZBOUZGMjBFQTAwODAwMEU4NTgzMzU4Q0Y2OTNCNjlDRjY3RkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDRUUKKzowMDAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3IxMjgvcjEyOF9jY2UuYmluLmloZXggYi9maXJtd2FyZS9yMTI4L3IxMjhfY2NlLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzEzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yMTI4L3IxMjhfY2NlLmJpbi5paGV4CkBAIC0wLDAgKzEsMTI5IEBACis6MTAwMDAwMDAwMDAwMDAwMDEwODAzODAwMDAwMDAwMDAxMDAwMzgwMEUwCis6MTAwMDEwMDAwMDAwMDAwMjAwMDAwMDhFMDAwMDAwMDIwMDAwMDA5MUJECis6MTAwMDIwMDAwMDAwMDAwMDQwMkUyNDIzMDAwMDAwMDA2MDYyMTI0RkY4Cis6MTAwMDMwMDAwMDAwMDAwMDJFMkI1OTZEMDAwMDAwMDA3Njc3NzUzRTAxCis6MTAwMDQwMDAwMDAwMDAwMDg5ODk4NDgyMDAwMDAwMDAyM0JDOEIwRDIxCis6MTAwMDUwMDAwMDAwMDAwMDIzMjMyMzIzMDAwMDAwMDAyMzhEQUJCNDA1Cis6MTAwMDYwMDAwMDAwMDAwMDIzMjMyMzIzMDAwMDAwMDEwMEIwMjgwMDJCCis6MTAwMDcwMDAwMDAwMDAwMTAwMDMyODAwMDAwMDAwMDEwMDA0QzAwMDhGCis6MTAwMDgwMDAwMDAwMDAwMTAwMDMwODAwMDAwMDAwMDIzNjYwMzAwRThFCis6MTAwMDkwMDAwMDAwMDAwQjAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTAwMEEwMDAwMDAwMDAwMTAyMDAxNTFEMDAwMDAwMDEwMDAwMUQwRUVGCis6MTAwMEIwMDAwMDAwMDAwMTAwMDAzOUQ5MDAwMDAwMDEwMDAwMTlENzNDCis6MTAwMEMwMDAwMDAwMDAwQzAwMDAwMDFDMDAwMDAwMDEwMDAwMTlENjE4Cis6MTAwMEQwMDAwMDAwMDAwQzAwMDAwMDFDMDAwMDAwMDIwMDAwMDAxN0RGCis6MTAwMEUwMDAwMDAwMDAwQjAxMjAwMDAwMDAwMDAwMDAwMTAwMzU4QTI0Cis6MTAwMEYwMDAwMDAwMDAwMTAwMDY0MDAwMDAwMDAwMDkwMDAwMDAxRTkyCis6MTAwMTAwMDAwMDAwMDAwMTA4RDAxNUI0MDAwMDAwMTAxOTEwMTAwMDA0Cis6MTAwMTEwMDAwMDAwMDAwMzAwMDAyMDAwMDAwMDAwMDAwMDAwMjgwMDk0Cis6MTAwMTIwMDAwMDAwMDAwMTAwMDMwODAwMDAwMDAwMDEwMDAwM0QwRTc3Cis6MTAwMTMwMDAwMDAwMDAwMTAwMDBDODAwMDAwMDAwMEEwMDAwODgyQTNBCis6MTAwMTQwMDAwMDAwMDAwOTAwMDAwMDJBMDAwMDAwMDEwMjAwMTUwRjU1Cis6MTAwMTUwMDAwMDAwMDAwMjAwMDAyODI0MDAwMDAwMDEwMDAwM0Q2NUFFCis6MTAwMTYwMDAwMDAwMDAwMTAwMDAzRDY2MDAwMDAwMDIwMDAwMDAyQkJFCis6MTAwMTcwMDAwMDAwMDAwMTAwRjMyREI0MDAwMDAwMDEyMjAwRDhCRkYwCis6MTAwMTgwMDAwMDAwMDAwMTAwRTA4OEJGMDAwMDAwMEMxMzMzMzgzNzg2Cis6MTAwMTkwMDAwMDAwMDAwMTAyMDYxNTY1MDAwMDAwMEMwMDAwMDAzNzk5Cis6MTAwMUEwMDAwMDAwMDAwMTAyMDAxNTY0MDAwMDAwMDEwMDAwM0Q2NjJGCis6MTAwMUIwMDAwMDAwMDAwMjAwMDAwMDJFMDAwMDAwMDQwMDIwMDgzQUE5Cis6MTAwMUMwMDAwMDAwMDAwMTAwMDgwODAwMDAwMDAwMDEwMDA2QzBGRjU4Cis6MTAwMUQwMDAwMDAwMDAwNDAwNDAwMDNEMDAwMDAwMDEwMDA3QzgwMENFCis6MTAwMUUwMDAwMDAwMDAwMTAwMDcwMEZGMDAwMDAwMDMwMDAwMDAwMDA1Cis6MTAwMUYwMDAwMDAwMDAwQzAwMDAwMDVDMDAwMDAwMDIwMDAwMDAyRTY3Cis6MTAwMjAwMDAwMDAwMDAwQzAwMDAwMEIwMDAwMDAwMDEwMDAwM0Q3NjdFCis6MTAwMjEwMDAwMDAwMDAwMTAwMDMyODAwMDAwMDAwMDEwMDAwNDgwMDY5Cis6MTAwMjIwMDAwMDAwMDAwMTAwMDIwODAwMDAwMDAwMDEwNjAwMUQwRTkxCis6MTAwMjMwMDAwMDAwMDAwMTAwMDI0ODAwMDAwMDAwMDEwMDAyODgwMEU4Cis6MTAwMjQwMDAwMDAwMDAwMTAwRjNDNUY4MDAwMDAwMDEwMDEwMDAwMEVDCis6MTAwMjUwMDAwMDAwMDAwNjAwMzAwMDRFMDAwMDAwMDEwMDAwM0Q2Mzc5Cis6MTAwMjYwMDAwMDAwMDAxMDgwMzAzREYwMDAwMDAwMDIxMDAwMzg0MzE0Cis6MTAwMjcwMDAwMDAwMDAwMjAwMDAyODQzMDAwMDAwMEMwMDAwMDBCMDU1Cis6MTAwMjgwMDAwMDAwMDAwMTAwMDAzRDc2MDAwMDAwMDEwMDAwM0Q3NzA1Cis6MTAwMjkwMDAwMDAwMDAwMTAwMDAzRDBFMDAwMDAwMDEwMDAwM0QwRkM1Cis6MTAwMkEwMDAwMDAwMDAwMTAwNTAyODAwMDAwMDAwMDYwMDMwMDA1MjRECis6MTAwMkIwMDAwMDAwMDAxMDgwMzAzREYwMDAwMDAwMDEwMDAwM0RGODFCCis6MTAwMkMwMDAwMDAwMDAwMjAwMDAwMDUyMDAwMDAwMDEwMDA1M0QwRTg5Cis6MTAwMkQwMDAwMDAwMDAwMTAwMTAzRDBGMDAwMDAwMDIwMDMwMDA1NTNBCis6MTAwMkUwMDAwMDAwMDAwMTAwMDAzRDcwMDAwMDAwMDEwMDAwMUU4OUI4Cis6MTAwMkYwMDAwMDAwMDAwMTAwMDAzRDcxMDAwMDAwMDMwMDAwM0Q3MjlECis6MTAwMzAwMDAwMDAwMDAwQzAwMDAwMDVDMDAwMDAwMDIwMDAwMDA2MjIxCis6MTAwMzEwMDAwMDAwMDAwMTAwMDAzRjI4MDAwMDAwMDEwMDAwM0YyNzBFCis6MTAwMzIwMDAwMDAwMDAwMTAwMDAzRTgyMDAwMDAwMDEwMDAwM0U4ODQ1Cis6MTAwMzMwMDAwMDAwMDAwMTAwMDAzRTY2MDAwMDAwMDEwMDAwM0U2NzcyCis6MTAwMzQwMDAwMDAwMDAwMTAwMDAzRTc2MDAwMDAwMDEwMDAwM0U2ODUxCis6MTAwMzUwMDAwMDAwMDAwMTAwMDAzRTY5MDAwMDAwMDEwMDAwM0U2QzRBCis6MTAwMzYwMDAwMDAwMDAwMDAwMDAzRTZEMDAwMDAwMDEwMDAwMjgwMEI5Cis6MTAwMzcwMDAwMDAwMDAwMTAwNTAyODAwMDAwMDAwMDEwMDAwM0Q2ODVFCis6MTAwMzgwMDAwMDAwMDAwMTAwMDMwODAwMDAwMDAwMDYwMDAwMDA2RUVECis6MTAwMzkwMDAwMDAwMDAwMTAwMDJDMDAwMDAwMDAwMDEwNjMwM0Q2MkM0Cis6MTAwM0EwMDAwMDAwMDAwMjAwMDAwMDcwMDAwMDAwMDIwMDMwMDA2RjNBCis6MTAwM0IwMDAwMDAwMDAwMDIwMDAzOEMwMDAwMDAwMDEwMDAxQzBDMEEzCis6MTAwM0MwMDAwMDAwMDAwRTAwMDAwMDdEMDAwMDAwMEMwMDAzMjg3RkVDCis6MTAwM0QwMDAwMDAwMDAwMTAyMDAxNUJCMDAwMDAwMEMwMDAzMDg4MEIzCis6MTAwM0UwMDAwMDAwMDAwMDAyMDAzREJDMDAwMDAwMDEwMDAwM0RCQjE5Cis6MTAwM0YwMDAwMDAwMDAwMDAwMDAzREJDMDAwMDAwMDMwMDA0ODAwMDdECis6MTAwNDAwMDAwMDAwMDAwMTAwMDQ4MDAwMDAwMDAwMDMwMDA2QzAwMjlDCis6MTAwNDEwMDAwMDAwMDAwMTAwQjAyODAwMDAwMDAwMDAzMDYwMzgwMDNCCis6MTAwNDIwMDAwMDAwMDAwMTAwQzAyODAwMDAwMDAwMDEwMEIwMDgwMDJBCis6MTAwNDMwMDAwMDAwMDAwMTAwRDYwMDAwMDAwMDAwMDcxMjgwMTA4NkI2Cis6MTAwNDQwMDAwMDAwMDAwMDAwMDAyODAwMDAwMDAwMDEwMDAwMzlDQzdFCis6MTAwNDUwMDAwMDAwMDAwMTAwMDAzOUNEMDAwMDAwMDEwMDAwMzlDOTkyCis6MTAwNDYwMDAwMDAwMDAwMTAwMDAzOUNBMDAwMDAwMDAwMDAwMzlDQjg0Cis6MTAwNDcwMDAwMDAwMDAwMTEwMDNCODAwMDAwMDAwMDEwMDkwMDAwMDFGCis6MTAwNDgwMDAwMDAwMDAwMTEwMDAzODAwMDAwMDAwMDEwMDAzMDgwMDE3Cis6MTAwNDkwMDAwMDAwMDAwMTAwOTAzRDFCMDAwMDAwMDE0MDIwM0QwQUNCCis6MTAwNEEwMDAwMDAwMDAwMTQwMjAzRDBCMDAwMDAwMDEwMDA4ODAwMDFBCis6MTAwNEIwMDAwMDAwMDAwMTAwMDFDMEMwMDAwMDAwMEUwMDAwMDA5RjBECis6MTAwNEMwMDAwMDAwMDAwQzAwMDMwODgwMDAwMDAwMDE0MjIwM0RCRDM4Cis6MTAwNEQwMDAwMDAwMDAwQzAwMDMwODdGMDAwMDAwMDE0MjAwM0RCQjRCCis6MTAwNEUwMDAwMDAwMDAwQzAwMDMwODgwMDAwMDAwMDE0MjIwM0RCQzE5Cis6MTAwNEYwMDAwMDAwMDAwMjAwMDAwMEEyMDAwMDAwMDE0MDIwM0RCREZECis6MTAwNTAwMDAwMDAwMDAwMTQwMDAzREJCMDAwMDAwMDE0MDIwM0RCQzU4Cis6MTAwNTEwMDAwMDAwMDAwMTAwMDg0MDAwMDAwMDAwMDEwMEEwMDAwMEYxCis6MTAwNTIwMDAwMDAwMDAwNjAwMzAwMEE2MDAwMDAwMTAxMDYwMzgwMDM3Cis6MTAwNTMwMDAwMDAwMDAwOTAwMDAwMEE4MDAwMDAwMDMwMDQwMDAwMEM3Cis6MTAwNTQwMDAwMDAwMDAwMzAwNDAzRDFEMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAwNTUwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMEUwMDAwMDBBRURFCis6MTAwNTYwMDAwMDAwMDAwMTAwMDFDMEE5MDAwMDAwMDEwMjAwMTVDNzQxCis6MTAwNTcwMDAwMDAwMDAwQzAwMDAwMEIwMDAwMDAwMDAwMDAwMjgwMDk3Cis6MTAwNTgwMDAwMDAwMDAwMTAwMDFDMEFBMDAwMDAwMDEwMjAwMTVEMjE1Cis6MTAwNTkwMDAwMDAwMDAwMTAwMDFDMEE5MDAwMDAwMDMwMjAwMTVDNzBGCis6MTAwNUEwMDAwMDAwMDAwMTAwMDAzRTg4MDAwMDAwMDEwMDAxQzBCQTA4Cis6MTAwNUIwMDAwMDAwMDAwMTAyMDAxNzI4MDAwMDAwMDEwMDAxQzBCQjdDCis6MTAwNUMwMDAwMDAwMDAwMTAyMDAxNjVBMDAwMDAwMDAwMDAwM0U1QjFGCis6MTAwNUQwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTAwMDBBCis6MTAwNUUwMDAwMDAwMDAwMTAwMDY0MDBCMDAwMDAwMDkwMDAwMDBCQ0Y0Cis6MTAwNUYwMDAwMDAwMDAwMDAwMDAyODAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTAwNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTAwNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTAwNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTAwNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTAwNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTAwNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTAwNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTAwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAwNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTAwNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTAwNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTAwNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTAwNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTAwNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTAwNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTAwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTAwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTAwNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAwN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1IxMDBfY3AuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUjEwMF9jcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTE2NDdiCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1IxMDBfY3AuYmluLmloZXgKQEAgLTAsMCArMSwxMzAgQEAKKzoxMDAwMDAwMDAwMDAwMDAwMjEwMDcwMDAwMDAwMDAwMDIwMDA3MDAwQ0YKKzoxMDAwMTAwMDAwMDAwMDA0MDAwMDAwQjQwMDAwMDAwNDAwMDAwMEI4NkMKKzoxMDAwMjAwMDAwMDAwMDAwNkY1QjRENEMwMDAwMDAwMDRDNEM0MjdGMTQKKzoxMDAwMzAwMDAwMDAwMDAwNUI1NjhBOTIwMDAwMDAwMDRDQTA5QzZERkUKKzoxMDAwNDAwMDAwMDAwMDAwQUQ0QzRDNEMwMDAwMDAwMDRDRTFBRjNEMDYKKzoxMDAwNTAwMDAwMDAwMDAwRDhBRkFGQUYwMDAwMDAwMEQ2NEM0Q0RDNzEKKzoxMDAwNjAwMDAwMDAwMDAwNENEMTBEMTAwMDAwMDAxNjAwMEYwMDAwMzEKKzoxMDAwNzAwMDAwMDAwMDAwMzYyRjI0MkQwMDAwMDAwNDAwMDAwMDEyQjQKKzoxMDAwODAwMDAwMDAwMDE2MDAwRjAwMDAwMDAwMDAwMDM2MkYyODJEOTEKKzoxMDAwOTAwMDAwMDAwMDAyMDAwMzgwRTcwMDAwMDAwMjA0MDAyQzk3MkIKKzoxMDAwQTAwMDAwMDAwMDE2MDAwRjAwMDEwMDAwMDAwMDMzM0EzNzMwNTYKKzoxMDAwQjAwMDAwMDAwMDAyMDAwMDc3RUYwMDAwMDAwMjAwMDYxMDAwQzAKKzoxMDAwQzAwMDAwMDAwMDFBMDAwMDAwMjEwMDAwMDAxRTAwMDA0MDAwOTcKKzoxMDAwRDAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAxQTAwMDAwMDIxQ0QKKzoxMDAwRTAwMDAwMDAwMDFFMDAwMDQwMDAwMDAwMDAwMjAwMDYxMDAwOUEKKzoxMDAwRjAwMDAwMDAwMDFBMDAwMDAwMjEwMDAwMDAxRTAwMDA0MDAwNjcKKzoxMDAxMDAwMDAwMDAwMDA0MDAwMDAwMTcwMDAwMDAwMjAwMDM4MDJCMjQKKzoxMDAxMTAwMDAwMDAwMDAyMDQwMDY3RTAwMDAwMDAwNDAwMDAwMDE3NzcKKzoxMDAxMjAwMDAwMDAwMDAyMDAwMDc3RTAwMDAwMDAwMjAwMDY1MDAwMUUKKzoxMDAxMzAwMDAwMDAwMDAyMDAwMDM3RTEwMDAwMDAwNjA0MDA2N0UxNTMKKzoxMDAxNDAwMDAwMDAwMDAyMDAwMDc3RTAwMDAwMDAwMjAwMDA3N0UxRkMKKzoxMDAxNTAwMDAwMDAwMDA2MDAwMDc3RTEwMDAwMDAwMEZGRkZGRkZGNDUKKzoxMDAxNjAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMjAwMDM4MDJCQ0YKKzoxMDAxNzAwMDAwMDAwMDA2MDQwMDY3RTAwMDAwMDAwMjAwMDA3Njc1NDEKKzoxMDAxODAwMDAwMDAwMDAyMDAwMDc2NzYwMDAwMDAwMjAwMDA3Njc3OTIKKzoxMDAxOTAwMDAwMDAwMDA2MDAwMDc2NzgwMDAwMDAwMjAwMDM4MDJDQkEKKzoxMDAxQTAwMDAwMDAwMDAyMDQwMDI2NzYwMDAwMDAwMjAwMDA3Njc3QkUKKzoxMDAxQjAwMDAwMDAwMDA2MDAwMDc2NzgwMDAwMDAxODAwMDAwMDJGMDQKKzoxMDAxQzAwMDAwMDAwMDE4MDAwMDAwMkYwMDAwMDAwNjAwMDAwMDAwRTIKKzoxMDAxRDAwMDAwMDAwMDE4MDAwMDAwMzAwMDAwMDAxODAwMDAwMDMwOEYKKzoxMDAxRTAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMDAwMjAxNjA1MDAwNTYKKzoxMDAxRjAwMDAwMDAwMDAyMDAwNjUwMDAwMDAwMDAwMjAwMDk4MDAwMUMKKzoxMDAyMDAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAwNDY0QzA2MDNFMTAKKzoxMDAyMTAwMDAwMDAwMDAyMDAwMzgwRTYwMDAwMDAwMjA0MDAyNUM1ODMKKzoxMDAyMjAwMDAwMDAwMDE2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDAyMzAwMDAwMDAwMDAyMDQwMDI1MUQwMDAwMDAwMjAwMDA3NTgwN0YKKzoxMDAyNDAwMDAwMDAwMDAyMDAwNjc1ODEwMDAwMDAwMjA0MDAyNTgwMDUKKzoxMDAyNTAwMDAwMDAwMDAyMDAwNjc1ODEwMDAwMDAwNDAwMDAwMDQ5NTMKKzoxMDAyNjAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMjAwMDM4MEU2RDMKKzoxMDAyNzAwMDAwMDAwMDAyMDQwMDI1QzUwMDAwMDAwMjAwMDYxMDAwNzYKKzoxMDAyODAwMDAwMDAwMDAyMDAwMDc1MEUwMDAwMDAwMjAwMDE5MDAwNTYKKzoxMDAyOTAwMDAwMDAwMDE0MDAwMTEwNTUwMDAwMDAxMjAwMDAwMDU1N0QKKzoxMDAyQTAwMDAwMDAwMDAyMDQwMDI1MEYwMDAwMDAwNDAwMDA1MDRGNzEKKzoxMDAyQjAwMDAwMDAwMDAyMDAwMzgwRTYwMDAwMDAwMjA0MDAyNUM1RTMKKzoxMDAyQzAwMDAwMDAwMDAyMDAwMDc1NjUwMDAwMDAwMjAwMDA3NTY2NzUKKzoxMDAyRDAwMDAwMDAwMDA0MDAwMDAwNTgwMDAwMDAwMjAwMDM4MEU2NTcKKzoxMDAyRTAwMDAwMDAwMDAyMDQwMDI1QzUwMDAwMDAwMjAxRTY1NUI0MkMKKzoxMDAyRjAwMDAwMDAwMDAyNDQwMUIwRTQwMDAwMDAwMjAxQzExMEU0NkIKKzoxMDAzMDAwMDAwMDAwMDE4MjY2NjcwNjYwMDAwMDAwMjA0MEMyNTY1RDcKKzoxMDAzMTAwMDAwMDAwMDE4MDAwMDAwNjYwMDAwMDAwMjA0MDAyNTY0RDAKKzoxMDAzMjAwMDAwMDAwMDAyMDAwMDc1NjYwMDAwMDAwNDAwMDAwMDVEOEYKKzoxMDAzMzAwMDAwMDAwMDA4MDA0MDEwNjkwMDAwMDAwMjAwMTAxMDAwREEKKzoxMDAzNDAwMDAwMDAwMDAyMDAwRDgwRkYwMDAwMDAwODAwODAwMDZDMkIKKzoxMDAzNTAwMDAwMDAwMDAyMDAwRjkwMDAwMDAwMDAwMjAwMEUwMEZGRUQKKzoxMDAzNjAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMDAxODAwMDAwMDhGRTAKKzoxMDAzNzAwMDAwMDAwMDA0MDAwMDAwNUIwMDAwMDAwMjAwMDM4MEU2QjMKKzoxMDAzODAwMDAwMDAwMDAyMDQwMDI1QzUwMDAwMDAwMjAwMDA3NTc2OTAKKzoxMDAzOTAwMDAwMDAwMDAyMDAwNjUwMDAwMDAwMDAwMjAwMDA5MDAwNzMKKzoxMDAzQTAwMDAwMDAwMDAyMDAwNDEwMDAwMDAwMDAwMjBDMDAzNTBFRTYKKzoxMDAzQjAwMDAwMDAwMDAyMDAwNDkwMDAwMDAwMDAwMjAwMDUxMDAwOTAKKzoxMDAzQzAwMDAwMDAwMDAyMDFFNzg1RjgwMDAwMDAwMjAwMjAwMDAwQTQKKzoxMDAzRDAwMDAwMDAwMDBDMDA2MDAwN0UwMDAwMDAwMjAwMDA3NTYzNTkKKzoxMDAzRTAwMDAwMDAwMDIxMDA2MDc1RjAwMDAwMDAwNDIwMDA3MDczMjAKKzoxMDAzRjAwMDAwMDAwMDA0MDAwMDUwNzMwMDAwMDAwMjAwMDM4MEU2Q0IKKzoxMDA0MDAwMDAwMDAwMDAyMDQwMDI1QzUwMDAwMDAwMjAwMDA3NTc2MEYKKzoxMDA0MTAwMDAwMDAwMDAyMDAwMDc1NzcwMDAwMDAwMjAwMDA3NTBFNjkKKzoxMDA0MjAwMDAwMDAwMDAyMDAwMDc1MEYwMDAwMDAwMjAwQTA1MDAwNTQKKzoxMDA0MzAwMDAwMDAwMDBDMDA2MDAwODMwMDAwMDAyMTAwNjA3NUYwRTcKKzoxMDA0NDAwMDAwMDAwMDAyMDAwMDc1RjgwMDAwMDAwNDAwMDAwMDgzQjYKKzoxMDA0NTAwMDAwMDAwMDAyMDAwQTc1MEUwMDAwMDAwMjAwMDM4MEU2QTIKKzoxMDA0NjAwMDAwMDAwMDAyMDQwMDI1QzUwMDAwMDAwMjAwMjA3NTBGRjYKKzoxMDA0NzAwMDAwMDAwMDA0MDA2MDAwODYwMDAwMDAwMjAwMDA3NTcwQUIKKzoxMDA0ODAwMDAwMDAwMDAyMDAwMDc1NzEwMDAwMDAwNjAwMDA3NTcyOTcKKzoxMDA0OTAwMDAwMDAwMDAyMDAwMzgwRTYwMDAwMDAwMjA0MDAyNUM1MDEKKzoxMDA0QTAwMDAwMDAwMDAyMDAwMDUwMDAwMDAwMDAwMjAwQTA1MDAwMDgKKzoxMDA0QjAwMDAwMDAwMDAyMDAwMDc1NjgwMDAwMDAwMjAwMDYxMDAwNDUKKzoxMDA0QzAwMDAwMDAwMDBDMDAwMDAwOTUwMDAwMDAwMjAwMDU4MDAwMDQKKzoxMDA0RDAwMDAwMDAwMDAyMEM2MDc1NjIwMDAwMDAwNDAwMDAwMDk3M0MKKzoxMDA0RTAwMDAwMDAwMDAyMDAwMzgwRTYwMDAwMDAwMjA0MDAyNUM1QjEKKzoxMDA0RjAwMDAwMDAwMDA0MDA2MDAwOTYwMDAwMDAwMDQwMDA3MEU1NkQKKzoxMDA1MDAwMDAwMDAwMDAyMDAwMzgwRTYwMDAwMDAwMjA0MDAyNUM1OTAKKzoxMDA1MTAwMDAwMDAwMDAyMDAwMzgwRTUwMDAwMDAxQzAwMDAwMEE4QUQKKzoxMDA1MjAwMDAwMDAwMDE4MDAwNjUwQUEwMDAwMDAwMjA0MDAyNUJCQ0QKKzoxMDA1MzAwMDAwMDAwMDE4MDAwNjEwQUIwMDAwMDAwMDA0MDA3NUJDQUQKKzoxMDA1NDAwMDAwMDAwMDAyMDAwMDc1QkIwMDAwMDAwMDAwMDA3NUJDNDgKKzoxMDA1NTAwMDAwMDAwMDA2MDAwOTAwMDAwMDAwMDAwMjAwMDkwMDAwODEKKzoxMDA1NjAwMDAwMDAwMDA2MDAwRDgwMDIwMDAwMDAwMjAwMDA3ODMyNEEKKzoxMDA1NzAwMDAwMDAwMDAyMDAwMDUwMDAwMDAwMDAwMjAwMDM4MEU3QkQKKzoxMDA1ODAwMDAwMDAwMDAyMDQwMDJDOTcwMDAwMDAwMjAwMDA3ODIwMDgKKzoxMDA1OTAwMDAwMDAwMDAyMDAwMDc4MjEwMDAwMDAwMDAwMDA3ODAwNDgKKzoxMDA1QTAwMDAwMDAwMDAyMDEyMDAwMDAwMDAwMDAwMjIwMDc3MDAwOEYKKzoxMDA1QjAwMDAwMDAwMDAyMDEyMDAwMDAwMDAwMDAwMjIwMDA3MDAwODYKKzoxMDA1QzAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAwMjAxMjA3NTFCNjAKKzoxMDA1RDAwMDAwMDAwMDAyODA0MDc1MEEwMDAwMDAwMjgwNDA3NTBCOTgKKzoxMDA1RTAwMDAwMDAwMDAyMDAxMTAwMDAwMDAwMDAwMjAwMDM4MEU1OEUKKzoxMDA1RjAwMDAwMDAwMDFDMDAwMDAwQzYwMDAwMDAxODAwMDYxMEFCNDAKKzoxMDA2MDAwMDAwMDAwMDAyODQ0MDc1QkQwMDAwMDAxODAwMDYxMEFBMUEKKzoxMDA2MTAwMDAwMDAwMDAyODQwMDc1QkIwMDAwMDAxODAwMDYxMEFCNEIKKzoxMDA2MjAwMDAwMDAwMDAyODQ0MDc1QkMwMDAwMDAwNDAwMDAwMEM5MDYKKzoxMDA2MzAwMDAwMDAwMDAyODA0MDc1QkQwMDAwMDAwMjgwMDA3NUJCMTQKKzoxMDA2NDAwMDAwMDAwMDAyODA0MDc1QkMwMDAwMDAwMjAwMTA4MDAwMjUKKzoxMDA2NTAwMDAwMDAwMDAyMDE0MDAwMDAwMDAwMDAwQzAwNjAwMENEMUUKKzoxMDA2NjAwMDAwMDAwMDIwMjBDMDcwMDAwMDAwMDAxMjAwMDAwMENGMzkKKzoxMDA2NzAwMDAwMDAwMDA2MDA4MDAwMDAwMDAwMDAwNjAwODA3NTFEREMKKzoxMDA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA3NzVDOTUKKzoxMDA2OTAwMDAwMDAwMDAyMDBBMDUwMDAwMDAwMDAwMjAwNjYxMDAwRjAKKzoxMDA2QTAwMDAwMDAwMDIwMDQ2MDI3NUQwMDAwMDAwMDAwMDA0MDAwMDIKKzoxMDA2QjAwMDAwMDAwMDAyMDFFMDA4MzAwMDAwMDAwMDIxMDA3MDAwOEUKKzoxMDA2QzAwMDAwMDAwMDAwNjQ2NDYxNEQwMDAwMDAwMDY5Njg3NDIwNEYKKzoxMDA2RDAwMDAwMDAwMDAwMDAwMDAwNzMwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDA2RTAwMDAwMDAwMDAyMDAwMDUwMDAwMDAwMDAwMjAwMDM4MEQwNjMKKzoxMDA2RjAwMDAwMDAwMDAyMDQwMDI1RTAwMDAwMDAwMDAwMDA3NUUxOTkKKzoxMDA3MDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjAwMDM4MEUwODMKKzoxMDA3MTAwMDAwMDAwMDAyMDQwMDIzOTQwMDAwMDAwMDAwMDA1MDAwQ0MKKzoxMDA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDA3MzAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA0QUQKKzoxMDA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMDA3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDA3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzowMDAwMDAwMUZGCisvKiBwcm9kdWN0aW9uIHJhZGVvbiB1Y29kZSByMXh4LXI2eHggKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SMjAwX2NwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1IyMDBfY3AuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwYmQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SMjAwX2NwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTMwIEBACis6MTAwMDAwMDAwMDAwMDAwMDIxMDA3MDAwMDAwMDAwMDAyMDAwNzAwMENGCis6MTAwMDEwMDAwMDAwMDAwNDAwMDAwMEJGMDAwMDAwMDQwMDAwMDBDMzU2Cis6MTAwMDIwMDAwMDAwMDAwMDdBNjg1RTVEMDAwMDAwMDA1RDVENTU4ODlDCis6MTAwMDMwMDAwMDAwMDAwMDY4NjU5MTk3MDAwMDAwMDA1REExOUY3OEI2Cis6MTAwMDQwMDAwMDAwMDAwMDVENUQ1RDVEMDAwMDAwMDA1REVFNUQ1MDQ0Cis6MTAwMDUwMDAwMDAwMDAwMEYyQUNBQ0FDMDAwMDAwMDBFNzVERjlFOTg0Cis6MTAwMDYwMDAwMDAwMDAwMEIxREQwRTExMDAwMDAwMDBFMkFGQUZBRkY0Cis6MTAwMDcwMDAwMDAwMDAxNjAwMEYwMDAwMDAwMDAwMDA0NTJGMjMyRDk3Cis6MTAwMDgwMDAwMDAwMDAwNDAwMDAwMDEzMDAwMDAwMTYwMDBGMDAwMDM0Cis6MTAwMDkwMDAwMDAwMDAwMDQ1MkYyNzJEMDAwMDAwMTYwMDBGMDAwMTcyCis6MTAwMEEwMDAwMDAwMDAwMDNFNEQ0QTM3MDAwMDAwMDIwMDAwNzdFRkRDCis6MTAwMEIwMDAwMDAwMDAwMjAwMDYxMDAwMDAwMDAwMUEwMDAwMDAyMEVFCis6MTAwMEMwMDAwMDAwMDAxRTAwMDA0MDAwMDAwMDAwMDIwMDA2MTAwMEJBCis6MTAwMEQwMDAwMDAwMDAxQTAwMDAwMDIwMDAwMDAwMUUwMDAwNDAwMDg4Cis6MTAwMEUwMDAwMDAwMDAwMjAwMDYxMDAwMDAwMDAwMUEwMDAwMDAyMEJFCis6MTAwMEYwMDAwMDAwMDAxRTAwMDA0MDAwMDAwMDAwMDQwMDAwMDAxNjg4Cis6MTAwMTAwMDAwMDAwMDAwMjAwMDM4MDJBMDAwMDAwMDIwNDAwNjdFMEYzCis6MTAwMTEwMDAwMDAwMDAwNDAwMDAwMDE2MDAwMDAwMDIwMDAwNzdFMDZDCis6MTAwMTIwMDAwMDAwMDAwMjAwMDY1MDAwMDAwMDAwMDIwMDAwMzdFMTVECis6MTAwMTMwMDAwMDAwMDAwNjA0MDA2N0UxMDAwMDAwMDIwMDAwNzdFMDE0Cis6MTAwMTQwMDAwMDAwMDAwMjAwMDA3N0UxMDAwMDAwMDYwMDAwNzdFMUY3Cis6MTAwMTUwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDAxMDAwMDAwMDkzCis6MTAwMTYwMDAwMDAwMDAwMDA3RjAwN0YwMDAwMDAwMDIwMDAzODAyQUYyCis6MTAwMTcwMDAwMDAwMDAwNjA0MDA2N0UwMDAwMDAwMDIwMDAzODAyQzdECis6MTAwMTgwMDAwMDAwMDAwMjA0MDAyNzQxMDAwMDAwMDIwNDAwMjc0MTkzCis6MTAwMTkwMDAwMDAwMDAwMjA0MDAyNzQzMDAwMDAwMDIwMDAwNzY3NTAyCis6MTAwMUEwMDAwMDAwMDAwMjAwMDA3Njc2MDAwMDAwMDIwMDAwNzY3NzcyCis6MTAwMUIwMDAwMDAwMDAwNjAwMDA3Njc4MDAwMDAwMDIwMDAzODAyQzlBCis6MTAwMUMwMDAwMDAwMDAwMjA0MDAyNzQxMDAwMDAwMDIwNDAwMjc0MTUzCis6MTAwMUQwMDAwMDAwMDAwMjA0MDAyNzQzMDAwMDAwMDIwMDAwNzY3NkMxCis6MTAwMUUwMDAwMDAwMDAwMjAwMDA3Njc3MDAwMDAwMDYwMDAwNzY3ODJDCis6MTAwMUYwMDAwMDAwMDAwMjAwMDM4MDJCMDAwMDAwMDIwNDAwMjY3NkFECis6MTAwMjAwMDAwMDAwMDAwMjAwMDA3Njc3MDAwMDAwMDIwMDAzODAyQzRFCis6MTAwMjEwMDAwMDAwMDAwMjA0MDAyNzQxMDAwMDAwMDIwNDAwMjc0MzAwCis6MTAwMjIwMDAwMDAwMDAwNjAwMDA3Njc4MDAwMDAwMDIwMDAzODAyQzI5Cis6MTAwMjMwMDAwMDAwMDAwMjA0MDAyNzQxMDAwMDAwMDIwNDAwMjc0MUUyCis6MTAwMjQwMDAwMDAwMDAwMjA0MDAyNzQzMDAwMDAwMDYwMDAwNzY3ODRBCis6MTAwMjUwMDAwMDAwMDAxODAwMDAwMDJGMDAwMDAwMTgwMDAwMDAyRjEwCis6MTAwMjYwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMDAwMTgwMDAwMDAzNzM5Cis6MTAwMjcwMDAwMDAwMDAxODAwMDAwMDM3MDAwMDAwMDYwMDAwMDAwMDI5Cis6MTAwMjgwMDAwMDAwMDAwMjAxNjA1MDAwMDAwMDAwMDIwMDA2NTAwMDYzCis6MTAwMjkwMDAwMDAwMDAwMjAwMDk4MDAwMDAwMDAwMDIwMDA2MTAwMEJCCis6MTAwMkEwMDAwMDAwMDAwNDY0QzA2MDUxMDAwMDAwMTYwMDA4MDAwMDU3Cis6MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDAwMjUxREY2Cis6MTAwMkMwMDAwMDAwMDAwMjAwMDA3NTgwMDAwMDAwMDIwMDA2NzU4MTM5Cis6MTAwMkQwMDAwMDAwMDAwMjA0MDAyNTgwMDAwMDAwMDIwMDA2NzU4MTc1Cis6MTAwMkUwMDAwMDAwMDAwNDAwMDAwMDVBMDAwMDAwMDAwMDAwNTAwMDYwCis6MTAwMkYwMDAwMDAwMDAwMjAwMDYxMDAwMDAwMDAwMDIwMDAwNzUwRTYxCis6MTAwMzAwMDAwMDAwMDAwMjAwMDE5MDAwMDAwMDAwMTQwMDAxMTA2NEQxCis6MTAwMzEwMDAwMDAwMDAxMjAwMDAwMDY0MDAwMDAwMDIwNDAwMjUwRjJECis6MTAwMzIwMDAwMDAwMDAwNDAwMDA1MDVFMDAwMDAwMDIwMDAwNzU2NTNGCis6MTAwMzMwMDAwMDAwMDAwMjAwMDA3NTY2MDAwMDAwMDQwMDAwMDA2NTc3Cis6MTAwMzQwMDAwMDAwMDAwMjAxRTY1NUI0MDAwMDAwMDI0NDAxQjBGMEQ0Cis6MTAwMzUwMDAwMDAwMDAwMjAxQzExMEYwMDAwMDAwMTgyNjY2NzA3MTU0Cis6MTAwMzYwMDAwMDAwMDAwMjA0MEMyNTY1MDAwMDAwMTgwMDAwMDA3MTY4Cis6MTAwMzcwMDAwMDAwMDAwMjA0MDAyNTY0MDAwMDAwMDIwMDAwNzU2NjExCis6MTAwMzgwMDAwMDAwMDAwNDAwMDAwMDY4MDAwMDAwMDgwMDQwMTA3NDM1Cis6MTAwMzkwMDAwMDAwMDAwMjAwMTAxMDAwMDAwMDAwMDIwMDBEODBGRkFECis6MTAwM0EwMDAwMDAwMDAwODAwODAwMDc3MDAwMDAwMDIwMDBGOTAwMEFECis6MTAwM0IwMDAwMDAwMDAwMjAwMEUwMEZGMDAwMDAwMDYwMDAwMDAwMDI4Cis6MTAwM0MwMDAwMDAwMDAxODAwMDAwMDk0MDAwMDAwMDQwMDAwMDA2ODE1Cis6MTAwM0QwMDAwMDAwMDAwMjAwMDA3NTc2MDAwMDAwMDIwMDA2NTAwMEQ4Cis6MTAwM0UwMDAwMDAwMDAwMjAwMDA5MDAwMDAwMDAwMDIwMDA0MTAwMDY1Cis6MTAwM0YwMDAwMDAwMDAwMjBDMDAzNTBFMDAwMDAwMDIwMDA0OTAwMDE2Cis6MTAwNDAwMDAwMDAwMDAwMjAwMDUxMDAwMDAwMDAwMDIwMUU3ODVGODZFCis6MTAwNDEwMDAwMDAwMDAwMjAwMjAwMDAwMDAwMDAwMEMwMDYwMDA4N0M3Cis6MTAwNDIwMDAwMDAwMDAwMjAwMDA3NTYzMDAwMDAwMjEwMDYwNzVGMDBDCis6MTAwNDMwMDAwMDAwMDAwNDIwMDA3MDdDMDAwMDAwMDQwMDAwNTA3Q0RDCis6MTAwNDQwMDAwMDAwMDAwMjAwMDA3NTc2MDAwMDAwMDIwMDAwNzU3N0QxCis6MTAwNDUwMDAwMDAwMDAwMjAwMDA3NTBFMDAwMDAwMDIwMDAwNzUwRjkxCis6MTAwNDYwMDAwMDAwMDAwMjAwQTA1MDAwMDAwMDAwMEMwMDYwMDA4QUE0Cis6MTAwNDcwMDAwMDAwMDAyMTAwNjA3NUYwMDAwMDAwMDIwMDAwNzVGODI3Cis6MTAwNDgwMDAwMDAwMDAwNDAwMDAwMDhBMDAwMDAwMDIwMDBBNzUwRTRGCis6MTAwNDkwMDAwMDAwMDAwMjAwMjA3NTBGMDAwMDAwMDQwMDYwMDA4REM1Cis6MTAwNEEwMDAwMDAwMDAwMjAwMDA3NTcwMDAwMDAwMDIwMDAwNzU3MTdECis6MTAwNEIwMDAwMDAwMDAwNjAwMDA3NTcyMDAwMDAwMDIwMDAwNTAwMEZECis6MTAwNEMwMDAwMDAwMDAwMjAwQTA1MDAwMDAwMDAwMDIwMDAwNzU2ODVCCis6MTAwNEQwMDAwMDAwMDAwMjAwMDYxMDAwMDAwMDAwMEMwMDAwMDA5ODYwCis6MTAwNEUwMDAwMDAwMDAwMjAwMDU4MDAwMDAwMDAwMDIwQzYwNzU2MjQwCis6MTAwNEYwMDAwMDAwMDAwNDAwMDAwMDlBMDAwMDAwMDQwMDYwMDA5OTYxCis6MTAwNTAwMDAwMDAwMDAwMDQwMDA3MEYxMDAwMDAwMDIwMDAzODBGMUQ0Cis6MTAwNTEwMDAwMDAwMDAxQzAwMDAwMEE3MDAwMDAwMTgwMDA2NTBBOTAxCis6MTAwNTIwMDAwMDAwMDAwMjA0MDAyNUJCMDAwMDAwMTgwMDA2MTBBQTBECis6MTAwNTMwMDAwMDAwMDAwMDA0MDA3NUJDMDAwMDAwMDIwMDAwNzVCQjU0Cis6MTAwNTQwMDAwMDAwMDAwMDAwMDA3NUJDMDAwMDAwMDYwMDA5MDAwMDZCCis6MTAwNTUwMDAwMDAwMDAwMjAwMDkwMDAwMDAwMDAwMDYwMDBEODAwMkZCCis6MTAwNTYwMDAwMDAwMDAwMjAwMDA1MDAwMDAwMDAwMDIwMDAwNzgyMTlFCis6MTAwNTcwMDAwMDAwMDAwMDAwMDA3ODAwMDAwMDAwMDIwMDAwNzgyMTY4Cis6MTAwNTgwMDAwMDAwMDAwMDAwMDA3ODAwMDAwMDAwMDIwMTY2NTAwMDNBCis6MTAwNTkwMDAwMDAwMDAwMjAwMEEwMDAwMDAwMDAwMDIwMDA2NzFDQzBBCis6MTAwNUEwMDAwMDAwMDAwMjAyODZGMUNEMDAwMDAwMTAwMDAwMDBCNzNDCis6MTAwNUIwMDAwMDAwMDAwMDIxMDA3MDAwMDAwMDAwMUMwMDAwMDBCRUQwCis6MTAwNUMwMDAwMDAwMDAwMjAwMDY1MDAwMDAwMDAwMDIwMDBBMDAwMEM3Cis6MTAwNUQwMDAwMDAwMDAwMjAwMDYxMDAwMDAwMDAwMDIwMDBCMDAwMEY2Cis6MTAwNUUwMDAwMDAwMDAwMjM4MDY3MDAwMDAwMDAwMDQwMDBBMDBCQTkzCis6MTAwNUYwMDAwMDAwMDAwMDIwMDA3MDAwMDAwMDAwMDIwMTIwMDAwMDQ4Cis6MTAwNjAwMDAwMDAwMDAwMjIwMDc3MDAwMDAwMDAwMDIwMTIwMDAwMDJFCis6MTAwNjEwMDAwMDAwMDAwMDIwMDA3MDAwMDAwMDAwMDIwMDA2MTAwMDMyCis6MTAwNjIwMDAwMDAwMDAwMjAxMjA3NTFCMDAwMDAwMDI4MDQwNzUwQUQ2Cis6MTAwNjMwMDAwMDAwMDAwMjgwNDA3NTBCMDAwMDAwMDIwMDExMDAwMDY1Cis6MTAwNjQwMDAwMDAwMDAwMjAwMDM4MEYxMDAwMDAwMUMwMDAwMDBEMTQ3Cis6MTAwNjUwMDAwMDAwMDAxODAwMDYxMEFBMDAwMDAwMDI4NDQwNzVCRENBCis6MTAwNjYwMDAwMDAwMDAxODAwMDYxMEE5MDAwMDAwMDI4NDAwNzVCQkZECis6MTAwNjcwMDAwMDAwMDAxODAwMDYxMEFBMDAwMDAwMDI4NDQwNzVCQ0FCCis6MTAwNjgwMDAwMDAwMDAwNDAwMDAwMEQ0MDAwMDAwMDI4MDQwNzVCRDlFCis6MTAwNjkwMDAwMDAwMDAwMjgwMDA3NUJCMDAwMDAwMDI4MDQwNzVCQ0I1Cis6MTAwNkEwMDAwMDAwMDAwMjAwMTA4MDAwMDAwMDAwMDIwMTQwMDAwMDc1Cis6MTAwNkIwMDAwMDAwMDAwQzAwNjAwMEQ4MDAwMDAwMjAyMEMwNzAwMDg2Cis6MTAwNkMwMDAwMDAwMDAxMjAwMDAwMERBMDAwMDAwMDYwMDgwMDAwMEI4Cis6MTAwNkQwMDAwMDAwMDAwNjAwODA3NTFEMDAwMDAwMDIwMDAwMjVCQjIwCis6MTAwNkUwMDAwMDAwMDAwNDAwMDA0MEQ0MDAwMDAwMDIwMDAwNzc1QzFECis6MTAwNkYwMDAwMDAwMDAwMjAwQTA1MDAwMDAwMDAwMDIwMDY2MTAwMDkwCis6MTAwNzAwMDAwMDAwMDAyMDA0NjAyNzVEMDAwMDAwMDAwMDAwNDAwMEExCis6MTAwNzEwMDAwMDAwMDAwMjAwMDA3OTk5MDAwMDAwMDIwMEEwNTAwMEQzCis6MTAwNzIwMDAwMDAwMDAwMjAwNjYxMDAwMDAwMDAwMjAwNDYwMjk5QjA5Cis6MTAwNzMwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDIwMUUwMDgzMDVFCis6MTAwNzQwMDAwMDAwMDAwMDIxMDA3MDAwMDAwMDAwMDIwMDAwNTAwMEM2Cis6MTAwNzUwMDAwMDAwMDAwMjAwMDM4MDU2MDAwMDAwMDIwNDAwMjVFMEIzCis6MTAwNzYwMDAwMDAwMDAwMDAwMDA3NUUxMDAwMDAwMDAwMDAwMDAwMTMyCis6MTAwNzcwMDAwMDAwMDAwMjAwMDM4MEVEMDAwMDAwMDAwNDAwNzM5NEZDCis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMjAwMDA3OEM0MDAwMDAwMDIwMDAwNzhDNURDCis6MTAwN0EwMDAwMDAwMDAwMjAwMDA3OEM2MDAwMDAwMDIwMDAwNzkyNDZBCis6MTAwN0IwMDAwMDAwMDAwMjAwMDA3OTI1MDAwMDAwMDIwMDAwNzkyNkY4Cis6MTAwN0MwMDAwMDAwMDAwNDAwMDAwMEYyMDAwMDAwMDIwMDAwNzkyNDk0Cis6MTAwN0QwMDAwMDAwMDAwMjAwMDA3OTI1MDAwMDAwMDIwMDAwNzkyNkQ4Cis6MTAwN0UwMDAwMDAwMDAwNDAwMDAwMEY5MDAwMDAwMDAwMDAwMDAwMDBDCis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MDAwMDAwMDFGRgorLyogcHJvZHVjdGlvbiByYWRlb24gdWNvZGUgcjF4eC1yNnh4ICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUjMwMF9jcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SMzAwX2NwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMDdkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUjMwMF9jcC5iaW4uaWhleApAQCAtMCwwICsxLDEzMCBAQAorOjEwMDAwMDAwMDAwMDAwMDA0MjAwRTAwMDAwMDAwMDAwNDAwMEUwMDBBRQorOjEwMDAxMDAwMDAwMDAwMDgwMDAwMDBBRTAwMDAwMDA4MDAwMDAwQjI3MAorOjEwMDAyMDAwMDAwMDAwMDA2NzU1NEI0QTAwMDAwMDAwNEE0QTQ0NzUzMgorOjEwMDAzMDAwMDAwMDAwMDA1NTUyN0Q4MzAwMDAwMDAwNEE4QzhCNjU1MworOjEwMDA0MDAwMDAwMDAwMDA0QUVGNEFGNjAwMDAwMDAwNEFFMTRBNEE3OAorOjEwMDA1MDAwMDAwMDAwMDBFNDk3OTc5NzAwMDAwMDAwREI0QUVCREQwQQorOjEwMDA2MDAwMDAwMDAwMDA5Q0NDNEE0QTAwMDAwMDAwRDE5ODk4OThGQgorOjEwMDA3MDAwMDAwMDAwMDA0QTBGOUFENjAwMDAwMDA0MDAwQ0EwMDAwNworOjEwMDA4MDAwMDAwMDAwMzgwMDBEMDAxMjAwMDAwMDA0MDAwMEU4QjQ3OQorOjEwMDA5MDAwMDAwMDAwMzgwMDBEMDAxNDAwMDAwMDA0MDAwMEU4QjY2NQorOjEwMDBBMDAwMDAwMDAwMzgwMDBEMDAxNjAwMDAwMDA0MDAwMEU4NTRCNQorOjEwMDBCMDAwMDAwMDAwMzgwMDBEMDAxODAwMDAwMDA0MDAwMEU4NTVBMgorOjEwMDBDMDAwMDAwMDAwMzgwMDBEMDAxQTAwMDAwMDA0MDAwMEU4NTY4RgorOjEwMDBEMDAwMDAwMDAwMzgwMDBEMDAxQzAwMDAwMDA0MDAwMEU4NTc3QworOjEwMDBFMDAwMDAwMDAwMzgwMDBEMDAxRTAwMDAwMDA0MDAwMEU4MjQ5RAorOjEwMDBGMDAwMDAwMDAwMzgwMDBEMDAyMDAwMDAwMDA0MDAwMEU4MjU4QQorOjEwMDEwMDAwMDAwMDAwMzgwMDBEMDAyMjAwMDAwMDA0MDAwMEU4MzA2QworOjEwMDExMDAwMDAwMDAwMzgwMDBEMDAyNDAwMDAwMDA0MDAwMEYwQzBDMgorOjEwMDEyMDAwMDAwMDAwMzgwMDBEMDAyNjAwMDAwMDA0MDAwMEYwQzFBRgorOjEwMDEzMDAwMDAwMDAwMzgwMDBEMDAyODAwMDAwMDA0MDAwMEYwNDExRAorOjEwMDE0MDAwMDAwMDAwMzgwMDBEMDAyQTAwMDAwMDA0MDAwMEYxODRDNworOjEwMDE1MDAwMDAwMDAwMzgwMDBEMDAyQzAwMDAwMDA0MDAwMEYxODVCNAorOjEwMDE2MDAwMDAwMDAwMzgwMDBEMDAyRTAwMDAwMDA0MDAwMEYxODZBMQorOjEwMDE3MDAwMDAwMDAwMzgwMDBEMDAzMDAwMDAwMDA0MDAwMEYxODc4RQorOjEwMDE4MDAwMDAwMDAwMzgwMDBEMDAzMjAwMDAwMDA0MDAwMEYxODA4MworOjEwMDE5MDAwMDAwMDAwMzgwMDBEMDAzNDAwMDAwMDA0MDAwMEYzOTM1QworOjEwMDFBMDAwMDAwMDAwMzgwMDBEMDAzNjAwMDAwMDA0MDAwMEYzOEE1MworOjEwMDFCMDAwMDAwMDAwMzgwMDBEMDAzODAwMDAwMDA0MDAwMEYzOEUzRAorOjEwMDFDMDAwMDAwMDAwMDQwMDAwRTgyMTAwMDAwMDA0MDE0MEEwMDAzRAorOjEwMDFEMDAwMDAwMDAwMTgwMDAwMDA0MzAwMDAwMDA0MDBDQ0U4MDAwQworOjEwMDFFMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA5QgorOjEwMDFGMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA4QgorOjEwMDIwMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA3QQorOjEwMDIxMDAwMDAwMDAwMDgwMDAwMDAzQTAwMDAwMDAwMDAwMEEwMDBGQworOjEwMDIyMDAwMDAwMDAwMDQyMDAwNDUxRDAwMDAwMDA0MDAwMEU1ODBERgorOjEwMDIzMDAwMDAwMDAwMDQwMDBDRTU4MTAwMDAwMDA0MDgwMDQ1ODA3NworOjEwMDI0MDAwMDAwMDAwMDQwMDBDRTU4MTAwMDAwMDA4MDAwMDAwNDdFOQorOjEwMDI1MDAwMDAwMDAwMDAwMDAwQTAwMDAwMDAwMDA0MDAwQzIwMDBDRQorOjEwMDI2MDAwMDAwMDAwMDQwMDAwRTUwRTAwMDAwMDA0MDAwMzIwMDA3MAorOjEwMDI3MDAwMDAwMDAwMjgwMDAyMjA1MTAwMDAwMDI0MDAwMDAwNTE2RQorOjEwMDI4MDAwMDAwMDAwMDQwODAwNDUwRjAwMDAwMDA4MDAwMEEwNEIxQgorOjEwMDI5MDAwMDAwMDAwMDQwMDAwRTU2NTAwMDAwMDA0MDAwMEU1NjZDMQorOjEwMDJBMDAwMDAwMDAwMDgwMDAwMDA1MjAwMDAwMDA0MDNDQ0E1QjRDOAorOjEwMDJCMDAwMDAwMDAwMDQwNTQzMjAwMDAwMDAwMDA0MDAwMjIwMDBBQworOjEwMDJDMDAwMDAwMDAwMzA0Q0NDRTA1RTAwMDAwMDA0MDgyNzQ1NjVDQgorOjEwMDJEMDAwMDAwMDAwMzAwMDAwMDA1RTAwMDAwMDA0MDgwMDQ1NjREQgorOjEwMDJFMDAwMDAwMDAwMDQwMDAwRTU2NjAwMDAwMDA4MDAwMDAwNTU2MgorOjEwMDJGMDAwMDAwMDAwMTAwMDgwMjA2MTAwMDAwMDA0MDAyMDIwMDBBOQorOjEwMDMwMDAwMDAwMDAwMDQwMDFCMDBGRjAwMDAwMDEwMDEwMDAwNjQ1QQorOjEwMDMxMDAwMDAwMDAwMDQwMDFGMjAwMDAwMDAwMDA0MDAxQzAwRkY3QgorOjEwMDMyMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDMwMDAwMDAwODAxMQorOjEwMDMzMDAwMDAwMDAwMDgwMDAwMDA1NTAwMDAwMDA0MDAwMEU1NzYwMQorOjEwMDM0MDAwMDAwMDAwMDQwMDBDQTAwMDAwMDAwMDA0MDAwMTIwMDBEOAorOjEwMDM1MDAwMDAwMDAwMDQwMDA4MjAwMDAwMDAwMDA0MTgwMDY1MEVFMgorOjEwMDM2MDAwMDAwMDAwMDQwMDA5MjAwMDAwMDAwMDA0MDAwQTIwMDAzMgorOjEwMDM3MDAwMDAwMDAwMDQwMDBGMDAwMDAwMDAwMDA0MDA0MDAwMDAyNgorOjEwMDM4MDAwMDAwMDAwMTgwMDAwMDA3NDAwMDAwMDA0MDAwMEU1NjM5NQorOjEwMDM5MDAwMDAwMDAwQzIwMEMwRTVGOTAwMDAwMDA4MDAwMDAwNjk4QworOjEwMDNBMDAwMDAwMDAwMDgwMDAwQTA2OTAwMDAwMDA0MDAwMEU1NzZERAorOjEwMDNCMDAwMDAwMDAwMDQwMDAwRTU3NzAwMDAwMDA0MDAwMEU1MEVFNgorOjEwMDNDMDAwMDAwMDAwMDQwMDAwRTUwRjAwMDAwMDA0MDE0MEEwMDA1MAorOjEwMDNEMDAwMDAwMDAwMTgwMDAwMDA3NzAwMDAwMEMyMDBDMEU1RjkyRQorOjEwMDNFMDAwMDAwMDAwMDgwMDAwMDA3NzAwMDAwMDA0MDAxNEU1MEU4MworOjEwMDNGMDAwMDAwMDAwMDQwMDQwRTUwRjAwMDAwMDA4MDBDMDAwN0E4MworOjEwMDQwMDAwMDAwMDAwMDQwMDAwRTU3MDAwMDAwMDA0MDAwMEU1NzEzOQorOjEwMDQxMDAwMDAwMDAwMEMwMDAwRTU3MjAwMDAwMDA0MDAwMEEwMDBENQorOjEwMDQyMDAwMDAwMDAwMDQwMTQwQTAwMDAwMDAwMDA0MDAwMEU1Njg5NgorOjEwMDQzMDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDE4MDAwMDAwODRGMAorOjEwMDQ0MDAwMDAwMDAwMDQwMDBCMDAwMDAwMDAwMDA0MThDMEU1NjI3QQorOjEwMDQ1MDAwMDAwMDAwMDgwMDAwMDA4NjAwMDAwMDA4MDBDMDAwODVDMQorOjEwMDQ2MDAwMDAwMDAwMDQwMDA3MDBFMzAwMDAwMDM4MDAwMDAwOTJENAorOjEwMDQ3MDAwMDAwMDAwMzAwMDBDQTA5NDAwMDAwMDA0MDgwMDQ1QkIwMAorOjEwMDQ4MDAwMDAwMDAwMzAwMDBDMjA5NTAwMDAwMDAwMDgwMEU1QkNEMgorOjEwMDQ5MDAwMDAwMDAwMDQwMDAwRTVCQjAwMDAwMDAwMDAwMEU1QkMxNworOjEwMDRBMDAwMDAwMDAwMEMwMDEyMDAwMDAwMDAwMDA0MDAxMjAwMDAxOAorOjEwMDRCMDAwMDAwMDAwMEMwMDFCMDAwMjAwMDAwMDA0MDAwMEEwMDA2RgorOjEwMDRDMDAwMDAwMDAwMDQwMDAwRTgyMTAwMDAwMDAwMDAwMEU4MDAzNworOjEwMDREMDAwMDAwMDAwMDQwMDAwRTgyMTAwMDAwMDAwMDAwMEU4MkVGOQorOjEwMDRFMDAwMDAwMDAwMDQwMkNDQTAwMDAwMDAwMDA0MDAxNDAwMDA4MgorOjEwMDRGMDAwMDAwMDAwMDQwMDBDRTFDQzAwMDAwMDA0MDUwREUxQ0Q3QgorOjEwMDUwMDAwMDAwMDAwMDQwMDQwMDAwMDAwMDAwMDE4MDAwMDAwQTRFQgorOjEwMDUxMDAwMDAwMDAwMDQwMEMwQTAwMDAwMDAwMDA4MDAwMDAwQTFDRQorOjEwMDUyMDAwMDAwMDAwMjAwMDAwMDBBNjAwMDAwMDAwNDIwMEUwMDBFMworOjEwMDUzMDAwMDAwMDAwMzgwMDAwMDBBRDAwMDAwMDA0MDAwQ0EwMDAyNgorOjEwMDU0MDAwMDAwMDAwMDQwMDE0MDAwMDAwMDAwMDA0MDAwQzIwMDA2MworOjEwMDU1MDAwMDAwMDAwMDQwMDE2MDAwMDAwMDAwMDA0NzAwQ0UwMDAyMQorOjEwMDU2MDAwMDAwMDAwMDgwMDE0MDBBOTAwMDAwMDAwNDAwMEUwMDBBNgorOjEwMDU3MDAwMDAwMDAwMDQwMjQwMDAwMDAwMDAwMDA0NDAwRUUwMDAwMworOjEwMDU4MDAwMDAwMDAwMDQwMjQwMDAwMDAwMDAwMDAwNDAwMEUwMDAwNQorOjEwMDU5MDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDA0MDI0MEU1MUJFNQorOjEwMDVBMDAwMDAwMDAwMDUwMDgwRTUwQTAwMDAwMDA1MDA4MEU1MEI2MgorOjEwMDVCMDAwMDAwMDAwMDQwMDIyMDAwMDAwMDAwMDA0MDAwNzAwRTMyNworOjEwMDVDMDAwMDAwMDAwMzgwMDAwMDBDMDAwMDAwMDMwMDAwQzIwOTU0MgorOjEwMDVEMDAwMDAwMDAwMDUwODgwRTVCRDAwMDAwMDMwMDAwQzIwOTRGQworOjEwMDVFMDAwMDAwMDAwMDUwODAwRTVCQjAwMDAwMDMwMDAwQzIwOTU2RAorOjEwMDVGMDAwMDAwMDAwMDUwODgwRTVCQzAwMDAwMDA4MDAwMDAwQzMwMgorOjEwMDYwMDAwMDAwMDAwMDUwMDgwRTVCRDAwMDAwMDA1MDAwMEU1QkIxRQorOjEwMDYxMDAwMDAwMDAwMDUwMDgwRTVCQzAwMDAwMDA0MDAyMTAwMDA4RgorOjEwMDYyMDAwMDAwMDAwMDQwMjgwMDAwMDAwMDAwMDE4MDBDMDAwQzdBNQorOjEwMDYzMDAwMDAwMDAwNDA0MTgwRTAwMDAwMDAwMDI0MDAwMDAwQzlFQworOjEwMDY0MDAwMDAwMDAwMEMwMTAwMDAwMDAwMDAwMDBDMDEwMEU1MUQ4RQorOjEwMDY1MDAwMDAwMDAwMDQwMDAwNDVCQjAwMDAwMDA4MDAwMDgwQzM0QgorOjEwMDY2MDAwMDAwMDAwMDQwMDAwRjNDRTAwMDAwMDA0MDE0MEEwMDBFMAorOjEwMDY3MDAwMDAwMDAwMDQwMENDMjAwMDAwMDAwMDQwMDhDMDUzQ0Y2MAorOjEwMDY4MDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDA0MDAwMEYzRDIyMQorOjEwMDY5MDAwMDAwMDAwMDQwMTQwQTAwMDAwMDAwMDA0MDBDQzIwMDA4NQorOjEwMDZBMDAwMDAwMDAwNDAwOEMwNTNEMzAwMDAwMDAwMDAwMDgwMDA5QworOjEwMDZCMDAwMDAwMDAwMDQwMDAwRjM5RDAwMDAwMDA0MDE0MEEwMDBDMQorOjEwMDZDMDAwMDAwMDAwMDQwMENDMjAwMDAwMDAwMDQwMDhDMDUzOUU0MQorOjEwMDZEMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDA0MDNDMDA4MzA5QgorOjEwMDZFMDAwMDAwMDAwMDA0MjAwRTAwMDAwMDAwMDA0MDAwMEEwMDA0NAorOjEwMDZGMDAwMDAwMDAwMDQyMDAwNDVFMDAwMDAwMDAwMDAwMEU1RTFFQgorOjEwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDA0MDAwNzAwRTBGRAorOjEwMDcxMDAwMDAwMDAwMDAwODAwRTM5NDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMDcyMDAwMDAwMDAwMDQwMDAwRThDNDAwMDAwMDA0MDAwMEU4QzU2OAorOjEwMDczMDAwMDAwMDAwMDQwMDAwRThDNjAwMDAwMDA0MDAwMEU5MjhGMgorOjEwMDc0MDAwMDAwMDAwMDQwMDAwRTkyOTAwMDAwMDA0MDAwMEU5MkE3QworOjEwMDc1MDAwMDAwMDAwMDgwMDAwMDBFNDAwMDAwMDA0MDAwMEU5Mjg5OAorOjEwMDc2MDAwMDAwMDAwMDQwMDAwRTkyOTAwMDAwMDA0MDAwMEU5MkE1QworOjEwMDc3MDAwMDAwMDAwMDgwMDAwMDBFQjAwMDAwMDA0MDJDMDIwMDBBMAorOjEwMDc4MDAwMDAwMDAwMDQwMDA2MDAwMDAwMDAwMDM0MDAwMDAwRjMzOAorOjEwMDc5MDAwMDAwMDAwMDgwMDAwMDBGMDAwMDAwMDA0MDAwMDgwMDBERAorOjEwMDdBMDAwMDAwMDAwMDBDMDAwRTAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwMDdCMDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDA0MDAxRDAwMThEMAorOjEwMDdDMDAwMDAwMDAwMDQwMDFBMDAwMTAwMDAwMDM0MDAwMDAwRkJEQgorOjEwMDdEMDAwMDAwMDAwMDgwMDAwMDA0QTAwMDAwMDA4MDUwMEEwNEFEMAorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjAwMDAwMDAxRkYKKy8qIHByb2R1Y3Rpb24gcmFkZW9uIHVjb2RlIHIxeHgtcjZ4eCAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1I0MjBfY3AuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUjQyMF9jcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODE1ODkxCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1I0MjBfY3AuYmluLmloZXgKQEAgLTAsMCArMSwxMzAgQEAKKzoxMDAwMDAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAwMDQwMDBFMDAwQUUKKzoxMDAwMTAwMDAwMDAwMDA4MDAwMDAwOTkwMDAwMDAwODAwMDAwMDlEOUEKKzoxMDAwMjAwMDAwMDAwMDAwNEE1NTRCNEEwMDAwMDAwMDRBNEE0NDY3NUQKKzoxMDAwMzAwMDAwMDAwMDAwNTU1MjZGNzUwMDAwMDAwMDRBN0U3RDY1OEIKKzoxMDAwNDAwMDAwMDAwMDAwRDlEM0RGRjYwMDAwMDAwMDRBQzU0QTRBOEMKKzoxMDAwNTAwMDAwMDAwMDAwQzg4MjgyODIwMDAwMDAwMEJGNEFDRkMxQjkKKzoxMDAwNjAwMDAwMDAwMDAwODdCMDRBNEEwMDAwMDAwMEI1ODM4MzgzODcKKzoxMDAwNzAwMDAwMDAwMDAwNEEwRjg1QkEwMDAwMDAwNDAwMENBMDAwMzgKKzoxMDAwODAwMDAwMDAwMDM4MDAwRDAwMTIwMDAwMDAwNDAwMDBFOEI0NzkKKzoxMDAwOTAwMDAwMDAwMDM4MDAwRDAwMTQwMDAwMDAwNDAwMDBFOEI2NjUKKzoxMDAwQTAwMDAwMDAwMDM4MDAwRDAwMTYwMDAwMDAwNDAwMDBFODU0QjUKKzoxMDAwQjAwMDAwMDAwMDM4MDAwRDAwMTgwMDAwMDAwNDAwMDBFODU1QTIKKzoxMDAwQzAwMDAwMDAwMDM4MDAwRDAwMUEwMDAwMDAwNDAwMDBFODU2OEYKKzoxMDAwRDAwMDAwMDAwMDM4MDAwRDAwMUMwMDAwMDAwNDAwMDBFODU3N0MKKzoxMDAwRTAwMDAwMDAwMDM4MDAwRDAwMUUwMDAwMDAwNDAwMDBFODI0OUQKKzoxMDAwRjAwMDAwMDAwMDM4MDAwRDAwMjAwMDAwMDAwNDAwMDBFODI1OEEKKzoxMDAxMDAwMDAwMDAwMDM4MDAwRDAwMjIwMDAwMDAwNDAwMDBFODMwNkMKKzoxMDAxMTAwMDAwMDAwMDM4MDAwRDAwMjQwMDAwMDAwNDAwMDBGMEMwQzIKKzoxMDAxMjAwMDAwMDAwMDM4MDAwRDAwMjYwMDAwMDAwNDAwMDBGMEMxQUYKKzoxMDAxMzAwMDAwMDAwMDM4MDAwRDAwMjgwMDAwMDAwNDAwMDBGMDQxMUQKKzoxMDAxNDAwMDAwMDAwMDM4MDAwRDAwMkEwMDAwMDAwNDAwMDBGMTg0QzcKKzoxMDAxNTAwMDAwMDAwMDM4MDAwRDAwMkMwMDAwMDAwNDAwMDBGMTg1QjQKKzoxMDAxNjAwMDAwMDAwMDM4MDAwRDAwMkUwMDAwMDAwNDAwMDBGMTg2QTEKKzoxMDAxNzAwMDAwMDAwMDM4MDAwRDAwMzAwMDAwMDAwNDAwMDBGMTg3OEUKKzoxMDAxODAwMDAwMDAwMDM4MDAwRDAwMzIwMDAwMDAwNDAwMDBGMTgwODMKKzoxMDAxOTAwMDAwMDAwMDM4MDAwRDAwMzQwMDAwMDAwNDAwMDBGMzkzNUMKKzoxMDAxQTAwMDAwMDAwMDM4MDAwRDAwMzYwMDAwMDAwNDAwMDBGMzhBNTMKKzoxMDAxQjAwMDAwMDAwMDM4MDAwRDAwMzgwMDAwMDAwNDAwMDBGMzhFM0QKKzoxMDAxQzAwMDAwMDAwMDA0MDAwMEU4MjEwMDAwMDAwNDAxNDBBMDAwM0QKKzoxMDAxRDAwMDAwMDAwMDE4MDAwMDAwNDMwMDAwMDAwNDAwQ0NFODAwMEMKKzoxMDAxRTAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwOUIKKzoxMDAxRjAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwOEIKKzoxMDAyMDAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwN0EKKzoxMDAyMTAwMDAwMDAwMDA4MDAwMDAwM0EwMDAwMDAwMDAwMDBBMDAwRkMKKzoxMDAyMjAwMDAwMDAwMDA0MjAwMDQ1MUQwMDAwMDAwNDAwMDBFNTgwREYKKzoxMDAyMzAwMDAwMDAwMDA0MDAwQ0U1ODEwMDAwMDAwNDA4MDA0NTgwNzcKKzoxMDAyNDAwMDAwMDAwMDA0MDAwQ0U1ODEwMDAwMDAwODAwMDAwMDQ3RTkKKzoxMDAyNTAwMDAwMDAwMDAwMDAwMEEwMDAwMDAwMDAwNDAwMEMyMDAwQ0UKKzoxMDAyNjAwMDAwMDAwMDA0MDAwMEU1MEUwMDAwMDAwNDAwMDMyMDAwNzAKKzoxMDAyNzAwMDAwMDAwMDI4MDAwMjIwNTEwMDAwMDAyNDAwMDAwMDUxNkUKKzoxMDAyODAwMDAwMDAwMDA0MDgwMDQ1MEYwMDAwMDAwODAwMDBBMDRCMUIKKzoxMDAyOTAwMDAwMDAwMDA0MDAwMEU1NjUwMDAwMDAwNDAwMDBFNTY2QzEKKzoxMDAyQTAwMDAwMDAwMDA4MDAwMDAwNTIwMDAwMDAwNDAzQ0NBNUI0QzgKKzoxMDAyQjAwMDAwMDAwMDA0MDU0MzIwMDAwMDAwMDAwNDAwMDIyMDAwQUMKKzoxMDAyQzAwMDAwMDAwMDMwNENDQ0UwNUUwMDAwMDAwNDA4Mjc0NTY1Q0IKKzoxMDAyRDAwMDAwMDAwMDMwMDAwMDAwNUUwMDAwMDAwNDA4MDA0NTY0REIKKzoxMDAyRTAwMDAwMDAwMDA0MDAwMEU1NjYwMDAwMDAwODAwMDAwMDU1NjIKKzoxMDAyRjAwMDAwMDAwMDEwMDA4MDIwNjEwMDAwMDAwNDAwMjAyMDAwQTkKKzoxMDAzMDAwMDAwMDAwMDA0MDAxQjAwRkYwMDAwMDAxMDAxMDAwMDY0NUEKKzoxMDAzMTAwMDAwMDAwMDA0MDAxRjIwMDAwMDAwMDAwNDAwMUMwMEZGN0IKKzoxMDAzMjAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAzMDAwMDAwMDcyMUYKKzoxMDAzMzAwMDAwMDAwMDA4MDAwMDAwNTUwMDAwMDAwNDAwMDBFNTc2MDEKKzoxMDAzNDAwMDAwMDAwMDA0MDAwMEU1NzcwMDAwMDAwNDAwMDBFNTBFNTYKKzoxMDAzNTAwMDAwMDAwMDA0MDAwMEU1MEYwMDAwMDAwNDAxNDBBMDAwQzAKKzoxMDAzNjAwMDAwMDAwMDE4MDAwMDAwNjkwMDAwMDBDMjAwQzBFNUY5QUMKKzoxMDAzNzAwMDAwMDAwMDA4MDAwMDAwNjkwMDAwMDAwNDAwMTRFNTBFMDEKKzoxMDAzODAwMDAwMDAwMDA0MDA0MEU1MEYwMDAwMDAwODAwQzAwMDZDMDEKKzoxMDAzOTAwMDAwMDAwMDA0MDAwMEU1NzAwMDAwMDAwNDAwMDBFNTcxQUEKKzoxMDAzQTAwMDAwMDAwMDBDMDAwMEU1NzIwMDAwMDAwNDAwMDBBMDAwNDYKKzoxMDAzQjAwMDAwMDAwMDA0MDE0MEEwMDAwMDAwMDAwNDAwMDBFNTY4MDcKKzoxMDAzQzAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAxODAwMDAwMDc2NkYKKzoxMDAzRDAwMDAwMDAwMDA0MDAwQjAwMDAwMDAwMDAwNDE4QzBFNTYyRUIKKzoxMDAzRTAwMDAwMDAwMDA4MDAwMDAwNzgwMDAwMDAwODAwQzAwMDc3NEUKKzoxMDAzRjAwMDAwMDAwMDA0MDAwNzAwQzcwMDAwMDAzODAwMDAwMDgwNzMKKzoxMDA0MDAwMDAwMDAwMDA0MDAwMEU1QkIwMDAwMDAwMDAwMDBFNUJDQTcKKzoxMDA0MTAwMDAwMDAwMDA0MDAwMEEwMDAwMDAwMDAwNDAwMDBFODIxMkIKKzoxMDA0MjAwMDAwMDAwMDAwMDAwMEU4MDAwMDAwMDAwNDAwMDBFODIxRDcKKzoxMDA0MzAwMDAwMDAwMDAwMDAwMEU4MkUwMDAwMDAwNDAyQ0NBMDAwMzQKKzoxMDA0NDAwMDAwMDAwMDA0MDAxNDAwMDAwMDAwMDAwNDAwMENFMUNDRDcKKzoxMDA0NTAwMDAwMDAwMDA0MDUwREUxQ0QwMDAwMDAwNDAwNDAwMDAwOTQKKzoxMDA0NjAwMDAwMDAwMDE4MDAwMDAwOEYwMDAwMDAwNDAwQzBBMDAwODEKKzoxMDA0NzAwMDAwMDAwMDA4MDAwMDAwOEMwMDAwMDAyMDAwMDAwMDkxMzcKKzoxMDA0ODAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAzODAwMDAwMDk4N0EKKzoxMDA0OTAwMDAwMDAwMDA0MDAwQ0EwMDAwMDAwMDAwNDAwMTQwMDAwOTQKKzoxMDA0QTAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAwNDAwMTYwMDAwMDIKKzoxMDA0QjAwMDAwMDAwMDA0NzAwQ0UwMDAwMDAwMDAwODAwMTQwMDk0MkMKKzoxMDA0QzAwMDAwMDAwMDAwNDAwMEUwMDAwMDAwMDAwNDAyNDAwMDAwQzYKKzoxMDA0RDAwMDAwMDAwMDA0NDAwRUUwMDAwMDAwMDAwNDAyNDAwMDAwQTQKKzoxMDA0RTAwMDAwMDAwMDAwNDAwMEUwMDAwMDAwMDAwNDAwMEMyMDAwQkMKKzoxMDA0RjAwMDAwMDAwMDA0MDI0MEU1MUIwMDAwMDAwNTAwODBFNTBBNDIKKzoxMDA1MDAwMDAwMDAwMDA1MDA4MEU1MEIwMDAwMDAwNDAwMjIwMDAwNTAKKzoxMDA1MTAwMDAwMDAwMDA0MDAwNzAwQzcwMDAwMDAzODAwMDAwMEE0MkQKKzoxMDA1MjAwMDAwMDAwMDA1MDA4MEU1QkQwMDAwMDAwNTAwMDBFNUJCRkYKKzoxMDA1MzAwMDAwMDAwMDA1MDA4MEU1QkMwMDAwMDAwNDAwMjEwMDAwNzAKKzoxMDA1NDAwMDAwMDAwMDA0MDI4MDAwMDAwMDAwMDAxODAwQzAwMEFCQTIKKzoxMDA1NTAwMDAwMDAwMDQwNDE4MEUwMDAwMDAwMDAyNDAwMDAwMEFERTkKKzoxMDA1NjAwMDAwMDAwMDBDMDEwMDAwMDAwMDAwMDAwQzAxMDBFNTFENkYKKzoxMDA1NzAwMDAwMDAwMDA0MDAwMDQ1QkIwMDAwMDAwODAwMDA4MEE3NDgKKzoxMDA1ODAwMDAwMDAwMDA0MDAwMEYzQ0UwMDAwMDAwNDAxNDBBMDAwQzEKKzoxMDA1OTAwMDAwMDAwMDA0MDBDQzIwMDAwMDAwMDA0MDA4QzA1M0NGNDEKKzoxMDA1QTAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwNDAwMDBGM0QyMDIKKzoxMDA1QjAwMDAwMDAwMDA0MDE0MEEwMDAwMDAwMDAwNDAwQ0MyMDAwNjYKKzoxMDA1QzAwMDAwMDAwMDQwMDhDMDUzRDMwMDAwMDAwMDAwMDA4MDAwN0QKKzoxMDA1RDAwMDAwMDAwMDA0MDAwMEYzOUQwMDAwMDAwNDAxNDBBMDAwQTIKKzoxMDA1RTAwMDAwMDAwMDA0MDBDQzIwMDAwMDAwMDA0MDA4QzA1MzlFMjIKKzoxMDA1RjAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwNDAzQzAwODMwN0MKKzoxMDA2MDAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAwNDAwMDBBMDAwMjQKKzoxMDA2MTAwMDAwMDAwMDA0MjAwMDQ1RTAwMDAwMDAwMDAwMDBFNUUxQ0IKKzoxMDA2MjAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwNDAwMDcwMEM0RkEKKzoxMDA2MzAwMDAwMDAwMDAwMDgwMEUzOTQwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMDA2NDAwMDAwMDAwMDA0MDAwMEU4QzQwMDAwMDAwNDAwMDBFOEM1NDkKKzoxMDA2NTAwMDAwMDAwMDA0MDAwMEU4QzYwMDAwMDAwNDAwMDBFOTI4RDMKKzoxMDA2NjAwMDAwMDAwMDA0MDAwMEU5MjkwMDAwMDAwNDAwMDBFOTJBNUQKKzoxMDA2NzAwMDAwMDAwMDA4MDAwMDAwQzgwMDAwMDAwNDAwMDBFOTI4OTUKKzoxMDA2ODAwMDAwMDAwMDA0MDAwMEU5MjkwMDAwMDAwNDAwMDBFOTJBM0QKKzoxMDA2OTAwMDAwMDAwMDA4MDAwMDAwQ0YwMDAwMDAwNDAyQzAyMDAwOUQKKzoxMDA2QTAwMDAwMDAwMDA0MDAwNjAwMDAwMDAwMDAzNDAwMDAwMEQ3MzUKKzoxMDA2QjAwMDAwMDAwMDA4MDAwMDAwRDQwMDAwMDAwNDAwMDA4MDAwREEKKzoxMDA2QzAwMDAwMDAwMDAwQzAwMEUwMDAwMDAwMDAwNDAwMDBFMUNDRDkKKzoxMDA2RDAwMDAwMDAwMDA0MDUwMEUxQ0QwMDAwMDAwNDAwMENBMDAwQjMKKzoxMDA2RTAwMDAwMDAwMDM0MDAwMDAwREUwMDAwMDAwODAwMDAwMERBMTYKKzoxMDA2RjAwMDAwMDAwMDAwMDAwMEEwMDAwMDAwMDAwNDAwMTlFMUNDOTAKKzoxMDA3MDAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA1MDBBMDAwMjAKKzoxMDA3MTAwMDAwMDAwMDA0MDgwMDQxQ0QwMDAwMDAwNDAwMENBMDAwMEYKKzoxMDA3MjAwMDAwMDAwMDM0MDAwMDAwRkIwMDAwMDAwODAwMDAwMDRBNDgKKzoxMDA3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMDA3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAwNDAwMUQwMDE4RDAKKzoxMDA3QzAwMDAwMDAwMDA0MDAxQTAwMDEwMDAwMDAzNDAwMDAwMEZCREIKKzoxMDA3RDAwMDAwMDAwMDA4MDAwMDAwNEEwMDAwMDAwODA1MDBBMDRBRDAKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzowMDAwMDAwMUZGCisvKiBwcm9kdWN0aW9uIHJhZGVvbiB1Y29kZSByMXh4LXI2eHggKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SNTIwX2NwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1I1MjBfY3AuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyZmY4MgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SNTIwX2NwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTMwIEBACis6MTAwMDAwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMDA0MDAwRTAwMEFFCis6MTAwMDEwMDAwMDAwMDAwODAwMDAwMDk5MDAwMDAwMDgwMDAwMDA5RDlBCis6MTAwMDIwMDAwMDAwMDAwMDRBNTU0QjRBMDAwMDAwMDA0QTRBNDQ2NzVECis6MTAwMDMwMDAwMDAwMDAwMDU1NTI2Rjc1MDAwMDAwMDA0QTdFN0Q2NThCCis6MTAwMDQwMDAwMDAwMDAwMEUwREFFNkY2MDAwMDAwMDA0QUM1NEE0QTc3Cis6MTAwMDUwMDAwMDAwMDAwMEM4ODI4MjgyMDAwMDAwMDBCRjRBQ0ZDMUI5Cis6MTAwMDYwMDAwMDAwMDAwMDg3QjA0QUQ1MDAwMDAwMDBCNTgzODM4M0ZDCis6MTAwMDcwMDAwMDAwMDAwMDRBMEY4NUJBMDAwMDAwMDQwMDBDQTAwMDM4Cis6MTAwMDgwMDAwMDAwMDAzODAwMEQwMDEyMDAwMDAwMDQwMDAwRThCNDc5Cis6MTAwMDkwMDAwMDAwMDAzODAwMEQwMDE0MDAwMDAwMDQwMDAwRThCNjY1Cis6MTAwMEEwMDAwMDAwMDAzODAwMEQwMDE2MDAwMDAwMDQwMDAwRTg1NEI1Cis6MTAwMEIwMDAwMDAwMDAzODAwMEQwMDE4MDAwMDAwMDQwMDAwRTg1NUEyCis6MTAwMEMwMDAwMDAwMDAzODAwMEQwMDFBMDAwMDAwMDQwMDAwRTg1NjhGCis6MTAwMEQwMDAwMDAwMDAzODAwMEQwMDFDMDAwMDAwMDQwMDAwRTg1NzdDCis6MTAwMEUwMDAwMDAwMDAzODAwMEQwMDFFMDAwMDAwMDQwMDAwRTgyNDlECis6MTAwMEYwMDAwMDAwMDAzODAwMEQwMDIwMDAwMDAwMDQwMDAwRTgyNThBCis6MTAwMTAwMDAwMDAwMDAzODAwMEQwMDIyMDAwMDAwMDQwMDAwRTgzMDZDCis6MTAwMTEwMDAwMDAwMDAzODAwMEQwMDI0MDAwMDAwMDQwMDAwRjBDMEMyCis6MTAwMTIwMDAwMDAwMDAzODAwMEQwMDI2MDAwMDAwMDQwMDAwRjBDMUFGCis6MTAwMTMwMDAwMDAwMDAzODAwMEQwMDI4MDAwMDAwMDQwMDAwRTAwMDZFCis6MTAwMTQwMDAwMDAwMDAzODAwMEQwMDJBMDAwMDAwMDQwMDAwRTAwMDVDCis6MTAwMTUwMDAwMDAwMDAzODAwMEQwMDJDMDAwMDAwMDQwMDAwRTAwMDRBCis6MTAwMTYwMDAwMDAwMDAzODAwMEQwMDJFMDAwMDAwMDQwMDAwRTAwMDM4Cis6MTAwMTcwMDAwMDAwMDAzODAwMEQwMDMwMDAwMDAwMDQwMDAwRTAwMDI2Cis6MTAwMTgwMDAwMDAwMDAzODAwMEQwMDMyMDAwMDAwMDQwMDAwRjE4MDgzCis6MTAwMTkwMDAwMDAwMDAzODAwMEQwMDM0MDAwMDAwMDQwMDAwRjM5MzVDCis6MTAwMUEwMDAwMDAwMDAzODAwMEQwMDM2MDAwMDAwMDQwMDAwRjM4QTUzCis6MTAwMUIwMDAwMDAwMDAzODAwMEQwMDM4MDAwMDAwMDQwMDAwRjM4RTNECis6MTAwMUMwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDQwMTQwQTAwMDNECis6MTAwMUQwMDAwMDAwMDAxODAwMDAwMDQzMDAwMDAwMDQwMENDRTgwMDBDCis6MTAwMUUwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDlCCis6MTAwMUYwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDhCCis6MTAwMjAwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDdBCis6MTAwMjEwMDAwMDAwMDAwODAwMDAwMDNBMDAwMDAwMDAwMDAwQTAwMEZDCis6MTAwMjIwMDAwMDAwMDAwNDIwMDA0NTFEMDAwMDAwMDQwMDAwRTU4MERGCis6MTAwMjMwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDQwODAwNDU4MDc3Cis6MTAwMjQwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDgwMDAwMDA0N0U5Cis6MTAwMjUwMDAwMDAwMDAwMDAwMDBBMDAwMDAwMDAwMDQwMDBDMjAwMENFCis6MTAwMjYwMDAwMDAwMDAwNDAwMDBFNTBFMDAwMDAwMDQwMDAzMjAwMDcwCis6MTAwMjcwMDAwMDAwMDAyODAwMDIyMDUxMDAwMDAwMjQwMDAwMDA1MTZFCis6MTAwMjgwMDAwMDAwMDAwNDA4MDA0NTBGMDAwMDAwMDgwMDAwQTA0QjFCCis6MTAwMjkwMDAwMDAwMDAwNDAwMDBFNTY1MDAwMDAwMDQwMDAwRTU2NkMxCis6MTAwMkEwMDAwMDAwMDAwODAwMDAwMDUyMDAwMDAwMDQwM0NDQTVCNEM4Cis6MTAwMkIwMDAwMDAwMDAwNDA1NDMyMDAwMDAwMDAwMDQwMDAyMjAwMEFDCis6MTAwMkMwMDAwMDAwMDAzMDRDQ0NFMDVFMDAwMDAwMDQwODI3NDU2NUNCCis6MTAwMkQwMDAwMDAwMDAzMDAwMDAwMDVFMDAwMDAwMDQwODAwNDU2NERCCis6MTAwMkUwMDAwMDAwMDAwNDAwMDBFNTY2MDAwMDAwMDgwMDAwMDA1NTYyCis6MTAwMkYwMDAwMDAwMDAxMDAwODAyMDYxMDAwMDAwMDQwMDIwMjAwMEE5Cis6MTAwMzAwMDAwMDAwMDAwNDAwMUIwMEZGMDAwMDAwMTAwMTAwMDA2NDVBCis6MTAwMzEwMDAwMDAwMDAwNDAwMUYyMDAwMDAwMDAwMDQwMDFDMDBGRjdCCis6MTAwMzIwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMzAwMDAwMDA3MjFGCis6MTAwMzMwMDAwMDAwMDAwODAwMDAwMDU1MDAwMDAwMDQwMDAwRTU3NjAxCis6MTAwMzQwMDAwMDAwMDAwNDAwMDBFNTc3MDAwMDAwMDQwMDAwRTUwRTU2Cis6MTAwMzUwMDAwMDAwMDAwNDAwMDBFNTBGMDAwMDAwMDQwMTQwQTAwMEMwCis6MTAwMzYwMDAwMDAwMDAxODAwMDAwMDY5MDAwMDAwQzIwMEMwRTVGOUFDCis6MTAwMzcwMDAwMDAwMDAwODAwMDAwMDY5MDAwMDAwMDQwMDE0RTUwRTAxCis6MTAwMzgwMDAwMDAwMDAwNDAwNDBFNTBGMDAwMDAwMDgwMEMwMDA2QzAxCis6MTAwMzkwMDAwMDAwMDAwNDAwMDBFNTcwMDAwMDAwMDQwMDAwRTU3MUFBCis6MTAwM0EwMDAwMDAwMDAwQzAwMDBFNTcyMDAwMDAwMDQwMDAwQTAwMDQ2Cis6MTAwM0IwMDAwMDAwMDAwNDAxNDBBMDAwMDAwMDAwMDQwMDAwRTU2ODA3Cis6MTAwM0MwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMTgwMDAwMDA3NjZGCis6MTAwM0QwMDAwMDAwMDAwNDAwMEIwMDAwMDAwMDAwMDQxOEMwRTU2MkVCCis6MTAwM0UwMDAwMDAwMDAwODAwMDAwMDc4MDAwMDAwMDgwMEMwMDA3NzRFCis6MTAwM0YwMDAwMDAwMDAwNDAwMDcwMEM3MDAwMDAwMzgwMDAwMDA4MDczCis6MTAwNDAwMDAwMDAwMDAwNDAwMDBFNUJCMDAwMDAwMDAwMDAwRTVCQ0E3Cis6MTAwNDEwMDAwMDAwMDAwNDAwMDBBMDAwMDAwMDAwMDQwMDAwRTgyMTJCCis6MTAwNDIwMDAwMDAwMDAwMDAwMDBFODAwMDAwMDAwMDQwMDAwRTgyMUQ3Cis6MTAwNDMwMDAwMDAwMDAwMDAwMDBFODJFMDAwMDAwMDQwMkNDQTAwMDM0Cis6MTAwNDQwMDAwMDAwMDAwNDAwMTQwMDAwMDAwMDAwMDQwMDBDRTFDQ0Q3Cis6MTAwNDUwMDAwMDAwMDAwNDA1MERFMUNEMDAwMDAwMDQwMDQwMDAwMDk0Cis6MTAwNDYwMDAwMDAwMDAxODAwMDAwMDhGMDAwMDAwMDQwMEMwQTAwMDgxCis6MTAwNDcwMDAwMDAwMDAwODAwMDAwMDhDMDAwMDAwMjAwMDAwMDA5MTM3Cis6MTAwNDgwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMzgwMDAwMDA5ODdBCis6MTAwNDkwMDAwMDAwMDAwNDAwMENBMDAwMDAwMDAwMDQwMDE0MDAwMDk0Cis6MTAwNEEwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMDQwMDE2MDAwMDAyCis6MTAwNEIwMDAwMDAwMDAwNDcwMENFMDAwMDAwMDAwMDgwMDE0MDA5NDJDCis6MTAwNEMwMDAwMDAwMDAwMDQwMDBFMDAwMDAwMDAwMDQwMjQwMDAwMEM2Cis6MTAwNEQwMDAwMDAwMDAwNDQwMEVFMDAwMDAwMDAwMDQwMjQwMDAwMEE0Cis6MTAwNEUwMDAwMDAwMDAwMDQwMDBFMDAwMDAwMDAwMDQwMDBDMjAwMEJDCis6MTAwNEYwMDAwMDAwMDAwNDAyNDBFNTFCMDAwMDAwMDUwMDgwRTUwQTQyCis6MTAwNTAwMDAwMDAwMDAwNTAwODBFNTBCMDAwMDAwMDQwMDIyMDAwMDUwCis6MTAwNTEwMDAwMDAwMDAwNDAwMDcwMEM3MDAwMDAwMzgwMDAwMDBBNDJECis6MTAwNTIwMDAwMDAwMDAwNTAwODBFNUJEMDAwMDAwMDUwMDAwRTVCQkZGCis6MTAwNTMwMDAwMDAwMDAwNTAwODBFNUJDMDAwMDAwMDQwMDIxMDAwMDcwCis6MTAwNTQwMDAwMDAwMDAwNDAyODAwMDAwMDAwMDAwMTgwMEMwMDBBQkEyCis6MTAwNTUwMDAwMDAwMDA0MDQxODBFMDAwMDAwMDAwMjQwMDAwMDBBREU5Cis6MTAwNTYwMDAwMDAwMDAwQzAxMDAwMDAwMDAwMDAwMEMwMTAwRTUxRDZGCis6MTAwNTcwMDAwMDAwMDAwNDAwMDA0NUJCMDAwMDAwMDgwMDAwODBBNzQ4Cis6MTAwNTgwMDAwMDAwMDAwNDAwMDBGM0NFMDAwMDAwMDQwMTQwQTAwMEMxCis6MTAwNTkwMDAwMDAwMDAwNDAwQ0MyMDAwMDAwMDAwNDAwOEMwNTNDRjQxCis6MTAwNUEwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDQwMDAwRjNEMjAyCis6MTAwNUIwMDAwMDAwMDAwNDAxNDBBMDAwMDAwMDAwMDQwMENDMjAwMDY2Cis6MTAwNUMwMDAwMDAwMDA0MDA4QzA1M0QzMDAwMDAwMDAwMDAwODAwMDdECis6MTAwNUQwMDAwMDAwMDAwNDAwMDBGMzlEMDAwMDAwMDQwMTQwQTAwMEEyCis6MTAwNUUwMDAwMDAwMDAwNDAwQ0MyMDAwMDAwMDAwNDAwOEMwNTM5RTIyCis6MTAwNUYwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDQwM0MwMDgzMDdDCis6MTAwNjAwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMDQwMDAwQTAwMDI0Cis6MTAwNjEwMDAwMDAwMDAwNDIwMDA0NUUwMDAwMDAwMDAwMDAwRTVFMUNCCis6MTAwNjIwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDQwMDA3MDBDNEZBCis6MTAwNjMwMDAwMDAwMDAwMDA4MDBFMzk0MDAwMDAwMDAwMDAwMDAwMDNCCis6MTAwNjQwMDAwMDAwMDAwNDAwMDBFOEM0MDAwMDAwMDQwMDAwRThDNTQ5Cis6MTAwNjUwMDAwMDAwMDAwNDAwMDBFOEM2MDAwMDAwMDQwMDAwRTkyOEQzCis6MTAwNjYwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQTVECis6MTAwNjcwMDAwMDAwMDAwODAwMDAwMEM4MDAwMDAwMDQwMDAwRTkyODk1Cis6MTAwNjgwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQTNECis6MTAwNjkwMDAwMDAwMDAwODAwMDAwMENGMDAwMDAwMDBERUFEQkVFRjRCCis6MTAwNkEwMDAwMDAwMDAwMDAwMDAwMTE2MDAwMDAwMDQwMDA3MDBEMzU1Cis6MTAwNkIwMDAwMDAwMDAwNDA4MDA1MEU3MDAwMDAwMDQwMDA3MDBENDE4Cis6MTAwNkMwMDAwMDAwMDAwNDA4MDA0MDFDMDAwMDAwMDAwMDAwRTAxREM1Cis6MTAwNkQwMDAwMDAwMDAwNDAyQzAyMDAwMDAwMDAwMDQwMDA2MDAwMDJBCis6MTAwNkUwMDAwMDAwMDAzNDAwMDAwMERFMDAwMDAwMDgwMDAwMDBEQjE1Cis6MTAwNkYwMDAwMDAwMDAwNDAwMDA4MDAwMDAwMDAwMDBDMDAwRTAwMEQ2Cis6MTAwNzAwMDAwMDAwMDAwNDAwMDBFMUNDMDAwMDAwMDQwNTAwRTFDRDgxCis6MTAwNzEwMDAwMDAwMDAwNDAwMENBMDAwMDAwMDAwMzQwMDAwMDBFNTEwCis6MTAwNzIwMDAwMDAwMDAwODAwMDAwMEUxMDAwMDAwMDAwMDAwQTAwMDQwCis6MTAwNzMwMDAwMDAwMDAwNDAwMTlFMUNDMDAwMDAwMDQwMDFCMDAwMUNGCis6MTAwNzQwMDAwMDAwMDAwNDA1MDBBMDAwMDAwMDAwMDQwODAwNDFDREU2Cis6MTAwNzUwMDAwMDAwMDAwNDAwMENBMDAwMDAwMDAwMzQwMDAwMDBGQkJBCis6MTAwNzYwMDAwMDAwMDAwODAwMDAwMDRBMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMDQwMDFEMDAxOEQwCis6MTAwN0MwMDAwMDAwMDAwNDAwMUEwMDAxMDAwMDAwMzQwMDAwMDBGQkRCCis6MTAwN0QwMDAwMDAwMDAwODAwMDAwMDRBMDAwMDAwMDgwNTAwQTA0QUQwCis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MDAwMDAwMDFGRgorLyogcHJvZHVjdGlvbiByYWRlb24gdWNvZGUgcjF4eC1yNnh4ICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUjYwMF9tZS5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SNjAwX21lLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDRjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUjYwMF9tZS5iaW4uaWhleApAQCAtMCwwICsxLDEzNDUgQEAKKzoxMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDAwMTAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwRkZGRjAwMjg0NjIxQTkKKzoxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwQUYKKzoxMDAwMzAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDAwNDAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMjYKKzoxMDAwNTAwMDAwMDAwMDAwMDAwMTAwMDBDMDI5NDYyMDAwMDAwMDAwNTAKKzoxMDAwNjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDAwNzAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBRjIKKzoxMDAwODAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwN0EKKzoxMDAwOTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0QkUKKzoxMDAwQTAwMDAwNjA0NDExMDAwMDA2MTQwMDAwMDAwMDAwNjAwMDAwMjEKKzoxMDAwQjAwMDAwMDAwNUIyMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUM1NUYKKzoxMDAwQzAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwRjAwMzkKKzoxMDAwRDAwMDAwMjgxNjIyMDAwMDAwMDAwMDAwMDAwODAwMjExNjI1NUMKKzoxMDAwRTAwMDAwMDAwMDAwMDAwMDAwMjAwMDIwMzYyNTAwMDAwMDAwNzUKKzoxMDAwRjAwMDhEMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0RkEKKzoxMDAxMDAwMDAwMkYwMjI1MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQUQKKzoxMDAxMTAwMDAwMDAwMDE4MDA0MTIwMDAwMDQwNDgxMTAwMDAwMDE5QjQKKzoxMDAxMjAwMDAwNDIyMDAwMDAyMDQ4MTEwMDAwMDAwMDhFMDAwMDAwNjYKKzoxMDAxMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAzMTAwMjA0QTJEODIKKzoxMDAxNDAwMDAwMDAwMDAwOTAwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUEKKzoxMDAxNTAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDBDMjYKKzoxMDAxNjAwMDAwMjExNjIyMDAwMDAwMDAwMDAwMDAwMzAwMjgxNjI1RDAKKzoxMDAxNzAwMDAwMDAwMDAwMDAwMDAwMTkwMDIxMUEyMjAwMDAwMDAwMDkKKzoxMDAxODAwMDAwMDAwMDA0MDAyODFBMjYwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDAxOTAwMDAwMjkxNEM1MDAwMDAwMDAwMDAwMDAyMTAwMjAzNjI1QzEKKzoxMDAxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMTQwMjAwMDAwMDAwRkYKKzoxMDAxQjAwMDAwMDAwMDE2MDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAzQ0EKKzoxMDAxQzAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwMDAxRDAwMjAwRTJENTQKKzoxMDAxRDAwMDAwMDAwMDAwRkZGRkZGRkMwMDI4MEUyMzAwMDAwMDAwQ0QKKzoxMDAxRTAwMDAwMDAwMDAwMDAyOTE0QTMwMDAwMDAwMDAwMDAwMDFEMTIKKzoxMDAxRjAwMDAwMjAzNjI1MDAwMDAwMDAwMDAwODAwMDAwMjgwRTIyQUMKKzoxMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDIyMEUyMzAwMDAwMDAwOTQKKzoxMDAyMTAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDIwMDAwMDAwRUYKKzoxMDAyMjAwMDAwMjgwRTIyMDAwMDAwMDAwMDAwMDAwNjAwMjEwRTIzMUUKKzoxMDAyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwRUYKKzoxMDAyNDAwMDAwMDAwMDAwMDAyMjAyMjIwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDAyNTAwMDE0RTAwMDAwMDAwMDAwMzgwMDAwMDAwMDJFRTAwMDAwNjQKKzoxMDAyNjAwMDAwMDAwMDM1MDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDM3MTYKKzoxMDAyNzAwMDAwMDAwMDAwMDA0MDBFMkQwMDAwMDAzOTAwMDAwMDA4QzIKKzoxMDAyODAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwOTAwNDAxMjJEOEIKKzoxMDAyOTAwMDAwMDAwMDQ2MDAwMDAwMDEwMDQwMEUyRDAwMDAwMDM5NjMKKzoxMDAyQTAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMjgKKzoxMDAyQjAwMDAwMjgxMjIzMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0ODcKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzAwMDAwMDAwQUQKKzoxMDAyRDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDAzRTAwMDAwMDA4RTQKKzoxMDAyRTAwMDAwNDAxQzExMDAwMDAwNDEwMDAwMDAwRDAwMjAxRTJERTgKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMEYwMDI4MUUyNzAwMDAwMDAwODIKKzoxMDAzMDAwMDAwMDAwMDAzMDAyMjFFMjcwMDAwMDAwMDdGQzAwMDAwNDQKKzoxMDAzMTAwMDAwMjgxQTIzMDAwMDAwMDAwMDAwMDAxNDAwMjExQTI2MDMKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDMzMUEyNjAwMDAwMDAwNTkKKzoxMDAzMzAwMDAwMDAwMDA4MDAyMjFBMjYwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDAzNDAwMDAwMjkwQ0M3MDAwMDAwMDAwMDAwMDAzMDAwMjAzNjI0MDcKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MTIyMTAwMDAwMDAwQzMKKzoxMDAzNjAwMDAwMDAxNDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDAzNzAwMDBDRTAwMDAwMDAwMDAwNEIwMDAwMDAwMTAwMjkwRTIzRUIKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMTAwMDIwMzYyMzAwMDAwMDAwRTQKKzoxMDAzOTAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRjgwMDAwMTEKKzoxMDAzQTAwMDAwMjk0QTIzMDAwMDAwMDAwMDAwMDAwMDAwM0EyQzAyNEYKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMEUyQjAwMDAwMDAwRTAKKzoxMDAzQzAwMEZDMDAwMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDExQzcKKzoxMDAzRDAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTIzRjAKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMzAwMDIwNEEyRDAwMDAwMDAwNDYKKzoxMDAzRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDMyNTIKKzoxMDA0MDAwMDAwMjAwRTJEMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTIzRTkKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDA0MjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxNTIKKzoxMDA0MzAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwODMKKzoxMDA0NDAwMDAwMDAwMDYxMDAwMDAwMDAyRUUwMDAwMDAwMDAwMDVGREUKKzoxMDA0NTAwMDAwMDAwMDAwMkNFMDAwMDAwMDAwMDA1RTAwMDAwMDAwMzIKKzoxMDA0NjAwMDAwNDAwRTJEMDAwMDAwNjIwMDAwMDAwMTAwNDAwRTJEMzMKKzoxMDA0NzAwMDAwMDAwMDYyMDAwMDAwMEEwMDIwMEUyRDAwMDAwMDAwQjUKKzoxMDA0ODAwMDAwMDAwMDBCMDA0MDEyMkQwMDAwMDA2QTAwMDAwMDAwNzgKKzoxMDA0OTAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzAwMjgxMjIzRDkKKzoxMDA0QTAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDAwMDAwMDAwRjIKKzoxMDA0QjAwMDdGQzAwMDAwMDAyODE2MjMwMDAwMDAwMDAwMDAwMDE0ODgKKzoxMDA0QzAwMDAwMjExNjI1MDAwMDAwMDAwMDAwMDAwMTAwMzMxNjI1NjEKKzoxMDA0RDAwMDAwMDAwMDAwODAwMDAwMDAwMDI4MEUyMzAwMDAwMDAwNDMKKzoxMDA0RTAwMDAwMDAwMDAwMDAyOTBDQTMwMDAwMDAwMDNGRkZGQzAwRkEKKzoxMDA0RjAwMDAwMjkwRTIzMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMjEKKzoxMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDZEOEEKKzoxMDA1MTAwMDAwMDAwMTAwMDA0MDFDMTEwMDAwMDA3MDAwMDAwMDBERjAKKzoxMDA1MjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDBGMDAwMjgxRTI3MDMKKzoxMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDQwMDIyMUUyNzAwMDAwMDAwNTAKKzoxMDA1NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBEQTgKKzoxMDA1NTAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRjBGRjAwMjgxQTMwQzMKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMEEwMjgwMDIwNDQxMTAwMDAwMDAwNEUKKzoxMDA1NzAwMDAwMDAwMDAwMDAyOTQ4RTYwMDAwMDAwMDAwMDBBMDE4NkMKKzoxMDA1ODAwMDAwMjA0NDExMDAwMDAwMDAzRkZGRkZGRjAwMjg0QTIzMjUKKzoxMDA1OTAwMDAwMDAwMDAwMDAwMEEwMTAwMDIwNDQxMTAwMDAwMDAwMzYKKzoxMDA1QTAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDJEQjIKKzoxMDA1QjAwMDAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEEzMDYKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMDgwREYKKzoxMDA1RDAwMDAwMDAwMDJFMDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMDA1RTAwMDAwMkYwMEE0MDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNkMKKzoxMDA1RjAwMDAwMDAwMDgxMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDg3QjMKKzoxMDA2MDAwMDAwMDAwMDJEMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDJFMTYKKzoxMDA2MTAwMDAwMjAzNjI0MDAwMDAwMDAwMDAwMDAxRDAwMjAxRTJERDgKKzoxMDA2MjAwMDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyNzAwMDAwMDAwN0UKKzoxMDA2MzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA4NzAwMDAwMDAwM0YKKzoxMDA2NDAwMDAwNjAwMDAwMDAwMDA1RUQwMDAwMDAwMDAwNjAwMDAwRjgKKzoxMDA2NTAwMDAwMDAwNUUxMDAwMDAwMDIwMDIxMEUyMjAwMDAwMDAwNjEKKzoxMDA2NjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA4QTAwMDAwMDE4MTQKKzoxMDA2NzAwMEMwNDAzNjIwMDAwMDAwOTAwMDAwMDAwMDJFRTAwMDAwODYKKzoxMDA2ODAwMDAwMDAwMDhFMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDhENDMKKzoxMDA2OTAwMDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA4RjAwMDAwMDAzNEIKKzoxMDA2QTAwMDAwNDAwRTJEMDAwMDAwOEYwMDAwMDAwQzAwMjAwRTJERDkKKzoxMDA2QjAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwMzYyMzAwMDAwMDAwQTkKKzoxMDA2QzAwMDAwMDAwMDAzMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDA2RDAwMDE0QzAwMDAwMDAwMDAwOTUwMDAwQTAwQzAwMjA0NDExOTAKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRTIKKzoxMDA2RjAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDA5RDAwMDBBMDBDNjkKKzoxMDA3MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRkIKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDAyRUUwMDAwMDAwMDAwMDlCMzAKKzoxMDA3MjAwMDAwMDAwMDAwMkNFMDAwMDAwMDAwMDA5QTAwMDAwMDAyMjEKKzoxMDA3MzAwMDAwNDAwRTJEMDAwMDAwOUMwMDAwMDAwMzAwNDAwRTJEMjQKKzoxMDA3NDAwMDAwMDAwMDlDMDAwMDAwMEMwMDIwMEUyRDAwMDAwMDAwQTYKKzoxMDA3NTAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDA3NjAwMDAwM0EwQzAyMDAwMDAwMDAwMDNGMDAwMDAwMjgwRTIzQTkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMEUyMzAwMDAwMDAwMTcKKzoxMDA3ODAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDFFQkYKKzoxMDA3OTAwMDAwMjEwMjJCMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMzcKKzoxMDA3QTAwMDAwMDAwMEE0MDAwMDAwMUNDMDIwMzYyMDAwMDAwMDAwNTMKKzoxMDA3QjAwMDAwMDAwMDFGMDAyMTAyMkIwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDA3QzAwMDE0QzAwMDAwMDAwMDAwQTcwMDAwMDAxQkMwMjAzNjIwNUQKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMDgwMDIxMEUyQjAwMDAwMDAwQjcKKzoxMDA3RTAwMDAwMDAwMDdGMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDA3RjAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQjkKKzoxMDA4MDAwMDAwMDAwMERCMDAwMDAwMDAyNzAwMDAwMDAwMDAwMDAwRTYKKzoxMDA4MTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDI4QzgxMDAwMDAwNjkKKzoxMDA4MjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExRDQKKzoxMDA4MzAwMDAwMDAwMDAwMDAwMDAwMEMwMDIyMUUzMDAwMDAwMDAwM0MKKzoxMDA4NDAwMDk5ODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0MTYKKzoxMDA4NTAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwODAwMjIxMjI0RDkKKzoxMDA4NjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIwMTgxMTAwMDAwMDAwMkYKKzoxMDA4NzAwMDAwMDAwMDAwMDAyOTFDRTQwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDA4ODAwMDAwNjA0ODA3MDAwMDAxMjg5QjAwMDAwMDAwMjA0NDExODAKKzoxMDA4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwRUUKKzoxMDA4QTAwMDlDMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDA4QjAwMDAwMzMxNDZGMDAwMDAwMDAwMDAwMDAwMTAwMzMzRTIzRUQKKzoxMDA4QzAwMDAwMDAwMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDcKKzoxMDA4RDAwMDAwMDAwMDAwMDAyMDNDMDUwMDAwMDAwMDgxMDAwMDAwMzYKKzoxMDA4RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwRTAwMjA0ODExMEMKKzoxMDA4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMTAxMDAwMDAwMDAwQjgKKzoxMDA5MDAwMDAwMDBFMDA3MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBGN0MKKzoxMDA5MTAwMDAwMjEwMjJCMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQjUKKzoxMDA5MjAwMDAwMDAwMEM1MDBGOEZGMDgwMDIwNDgxMTAwMDAwMDAwOEEKKzoxMDA5MzAwMDk4MDAwMDAwMDA0MDQ4MTEwMDAwMDBENjAwMDAwMEYwQzAKKzoxMDA5NDAwMDAwMjgwRTIyMDAwMDAwMDAwMDAwMDBBMDAwMkYwMjIzNUIKKzoxMDA5NTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMEQ0RjcKKzoxMDA5NjAwMDAwMDAwMDEzMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDAxMTgKKzoxMDA5NzAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMzcKKzoxMDA5ODAwMDAwMDAwMENGMDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwNDIKKzoxMDA5OTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBDRTAwMDAzRjAwNUUKKzoxMDA5QTAwMDAwNDAwQzExMDAwMDAwRDAwMDAwMUYwMDAwNDAwQzExOUUKKzoxMDA5QjAwMDAwMDAwMEQwMDAwMDBGMDAwMDIwMEMxMTAwMDAwMDAwMUIKKzoxMDA5QzAwMDAwMzgwMDA5MDAyOTRBMjMwMDAwMDAwMDNGMDAwMDAwMTEKKzoxMDA5RDAwMDAwMjgwRTJCMDAwMDAwMDAwMDAwMDAwMjAwMjIwRTIzNjEKKzoxMDA5RTAwMDAwMDAwMDAwMDAwMDAwMDcwMDQ5NEEyMzAwMDAwMEQ2NzQKKzoxMDA5RjAwMDAwMzgwRjA5MDAyMDQ4MTEwMDAwMDAwMDY4MDAwMDA3QkYKKzoxMDBBMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwODAwMjE0QTI3RDMKKzoxMDBBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNUQKKzoxMDBBMjAwMDA2MEEwMjAwMDAyOTRBMjQwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDBBMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExQzQKKzoxMDBBNDAwMDAwMDAwMDAwMDAwMEEyMDIwMDIwNDQxMTAwMDAwMDAwOEQKKzoxMDBBNTAwMDAwRkYwMDAwMDAyODRBMjIwMDAwMDAwMDAwMDAwMDMwRDMKKzoxMDBBNjAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAyRTAwMjAxMjJEOUUKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDA4MzAwMDAwMDAwQzQKKzoxMDBBODAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBFMzAwMDAwMDAwOTcKKzoxMDBBOTAwMDAwNjAwMDAwMDAwMDA1RTcwMDAwMDAwMDAwNDAwMDAwQ0EKKzoxMDBBQTAwMDAwMDAwMEU0MDAwMDAwMDAwMDYwMDAwMDAwMDAwNUVBMTMKKzoxMDBBQjAwMDAwMDAwMDA3MDAyMDIyMkQwMDAwMDAwMDAwMDAwMDA1QkIKKzoxMDBBQzAwMDAwMjIwRTIyMDAwMDAwMDAwMDEwMDAwMDAwMjgwRTIzNkIKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MjA2ODAwMDAwMDAwNjUKKzoxMDBBRTAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDAwMDAwMEVGQ0YKKzoxMDBBRjAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjkyMDY4RUMKKzoxMDBCMDAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMEUyRDAwMDAwMDAwNkQKKzoxMDBCMTAwMDAwMDAwMDAzMDAyMTAyMjMwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDBCMjAwMDE0RTAwMDAwMDAwMDAwRjEwMDAwMDAwQjAwMjEwMjI4OEEKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMEYxRjAKKzoxMDBCNDAwMDAwMDAwNDAwMDAyOTIyMjgwMDAwMDAwMDAwMDAwMDFBMTQKKzoxMDBCNTAwMDAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxQzAwMjEwRTIyQUEKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMEY2QkIKKzoxMDBCNzAwMDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDBCODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAxRTAwMjEwRTIyN0QKKzoxMDBCOTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMTA0N0MKKzoxMDBCQTAwMDAwMDBBMzBGMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDEzMEIKKzoxMDBCQjAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjIzODUKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMEZENUMKKzoxMDBCRDAwMEZGRkZGRkZGMDA0MDQ4MTEwMDAwMDEwNDAwMDAwMDAyNzkKKzoxMDBCRTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwRTUKKzoxMDBCRjAwMDAwMDAwMTAwMDAwMEZGRkYwMDQwNDgxMTAwMDAwMTA0NTgKKzoxMDBDMDAwMDAwMDAwMDA0MDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDBDMTAwMDBDQzAwMDAwMDAwMDAxMDMwMDAwMDBGRjAwNDA0ODExNkMKKzoxMDBDMjAwMDAwMDAwMTA0MDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNDUKKzoxMDBDMzAwMDAwMDJDNDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFGNUEKKzoxMDBDNDAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwN0YKKzoxMDBDNTAwMDAwMDAwMTBCMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwRTkKKzoxMDBDNjAwMDAwMDAwMDE5MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDE4REEKKzoxMDBDNzAwMDQwMjI0QTIwMDAwMDAwMDAwMDAwMDAxMEMwNDI0QTIwMkMKKzoxMDBDODAwMDAwMDAwMTBEMDAwMDAwMDAwMDIwMEMxMTAwMDAwMDAwMTkKKzoxMDBDOTAwMDAwMDAwMDE5MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDBDQTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNTIKKzoxMDBDQjAwMDAwMDAwMDAwMDAwMDAwMEEwMDIwMTAxMTAwMDAwMDAwRTkKKzoxMDBDQzAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDBDRDAwMDBDRTAwMDAwMDAwMDAxMTQwMDAwMDAwMDAwMjA0ODExOUEKKzoxMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDEwMDUzMTIyNDAwMDAwMTEwNjkKKzoxMDBDRjAwMEZGQkZGRkZGMDAyODNBMkUwMDAwMDAwMDAwMDAwMDFCOEQKKzoxMDBEMDAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQ0EKKzoxMDBEMTAwMDAwMDAwMTI3ODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQjUKKzoxMDBEMjAwMDAwMDAwMDBEMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDE4MjUKKzoxMDBEMzAwMDAwMjIwRTMwMDAwMDAwMDBGQzAwMDAwMDAwMjgwRTIzRkUKKzoxMDBENDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUQKKzoxMDBENTAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDBENjAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwRTAwMjA0NDExRTAKKzoxMDBENzAwMDAwMDAwMDAwMDdGOEZGMDgwMDIwNDgxMTAwMDAwMDAwRjQKKzoxMDBEODAwMDAwMDAwMDAwMDAyOTRBMjMwMDAwMDAwMDAwMDAwMDI0QTkKKzoxMDBEOTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwODAwMjE0QTI3NEUKKzoxMDBEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQ0EKKzoxMDBEQjAwMDA2MEEwMjAwMDAyOTRBMjQwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMDBEQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMzEKKzoxMDBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwOTMKKzoxMDBERTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMEMKKzoxMDBERjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExNjgKKzoxMDBFMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDIwNDgxMTAwMDAwMDAwRTkKKzoxMDBFMTAwMDAwMDAwMDAwMDAyMDQ4MDYwMDAwMDAwMDAwMDAwMDA4NUMKKzoxMDBFMjAwMDAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwMTkKKzoxMDBFMzAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjE0M0YKKzoxMDBFNDAwMDAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDBFNTAwMDE0QzAwMDAwMDAwMDA2MTMwMDAwMDAwNDAwNDA0QzExMDQKKzoxMDBFNjAwMDAwMDAwMTJFMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCRTgKKzoxMDBFNzAwMDAwMDAwMDAwMDA2MDA0MTEwMDAwMDJGRTAwMDAwMDAwRkQKKzoxMDBFODAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExQjQKKzoxMDBFOTAwMDAwMDAwMTlGMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTUxMDAKKzoxMDBFQTAwMDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwOUUKKzoxMDBFQjAwMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjQwMjgwNjIwOTMKKzoxMDBFQzAwMDAwMDAwMDAwMDAwMDAwMTBDMDIxMEEyMDAwMDAwMDAwMDcKKzoxMDBFRDAwMDAwMDAwMDAwMDAzNDE0NjEwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDBFRTAwMDAwNzQxODgyMDAwMDAyQTQwMDAxQTFGRDAwNjA0NDExRkEKKzoxMDBFRjAwMDAwMDAwMkM5MDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwODkKKzoxMDBGMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDEzODAwMDAwMDAwREMKKzoxMDBGMTAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMDAwNjAwMDAwNkMKKzoxMDBGMjAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkZFNDEKKzoxMDBGMzAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDBGNDAwMDAwNjAwODExMDAwMDAxOUYwMDAwM0ZGRjAwMkYwMjJGRUEKKzoxMDBGNTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwQTUKKzoxMDBGNjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDE1MTAwMDAwMDEwQkYKKzoxMDBGNzAwMDQwMjEwRTIwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwQ0EKKzoxMDBGODAwMDAwMDAwMDAwMDAwMDAwMTA0MDIxMTYyMDAwMDAwMDAwQkEKKzoxMDBGOTAwMDAwMDBGRkZGQzA2ODFBMjAwMDAwMDJBNDAwMDFBMUZEQUMKKzoxMDBGQTAwMDAwNjA0NDExMDAwMDAyQzkwMDAwM0ZGRjAwMkYwMjJGMjMKKzoxMDBGQjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTQ5MUIKKzoxMDBGQzAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAyMjVDOUUKKzoxMDBGRDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMzAwQTJGMzIKKzoxMDBGRTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIxMEEyMjAwMDAwMDAwQjMKKzoxMDBGRjAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMDAwMDAyMjU2RDIKKzoxMDEwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTAwMjA0ODExRDgKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwQkUKKzoxMDEwMjAwMDAwMDAwMDAxMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDEwMzAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwMDAwRTUKKzoxMDEwNDAwMDAwMDAwMTdDMDAwMDAwMDAwMDYwMDAwMDAwMDAwMThEMzUKKzoxMDEwNTAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDEwNjAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyQzA4NDAKKzoxMDEwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjQxMTAwMDAwMDAwMUIKKzoxMDEwODAwMDAwMDAwMDAwMDAyMDI4MTEwMDAwMDAwMDAwMDAyMjU2OEYKKzoxMDEwOTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjAwMjA0ODExNEMKKzoxMDEwQTAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwNEQKKzoxMDEwQjAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDkzODAwMDAwQTEKKzoxMDEwQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMjAwMjIxRTI5NDAKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwNDhFQjAwMDAwMTg5RTMKKzoxMDEwRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBNDAwMDAwMDAxRjkKKzoxMDEwRjAwMDQwMzMwNjIwMDAwMDAwMDAwMDAwMDAwMEMwMzAyNDA5M0EKKzoxMDExMDAwMDAwMDAwMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwNDEKKzoxMDExMTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDExMjAwMDAwNjAwMDAwMDAwMDAyOEM5NTAwMDAwMDAwMjA0NDExQzcKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwNUQKKzoxMDExNDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDE3MzAwMDAwMDAwM0YKKzoxMDExNTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTAwNTMwNjIxRUMKKzoxMDExNjAwMDAwMDAwMTZGOTIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDgKKzoxMDExNzAwMDAwMDAwMDAwQzA2MDQ4MDAwMDAwMDE4NDAwMDFBMUZERTMKKzoxMDExODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMzAwMjAwNjJEODQKKzoxMDExOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4MDQyQTAwMDAwMkU0QzMKKzoxMDExQTAwMDAwMDAwMDAwMDAyMDI4MDkwMDAwMDAwMDAwMDAzRkZGQjAKKzoxMDExQjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDMKKzoxMDExQzAwMDAwMDAwMTY1MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxQjQKKzoxMDExRDAwMDAwMDAwMjEwMDA2MDA0MTEwMDAwMDJGRTAwMDAzRkZGNEEKKzoxMDExRTAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQjMKKzoxMDExRjAwMDAwMDAwMTgxMDAwMDAwMUJDMDIwMzYyMDAwMDAwMDAwMUMKKzoxMDEyMDAwMDAwMDAwMDFDQzAyMDM2MjAwMDAwMDAwMDNGODAwMDAwQ0QKKzoxMDEyMTAwMDAwMjAwNDExMDAwMDAwMDA0NjAwMDAwMDAwNjAwODExREEKKzoxMDEyMjAwMDAwMDAwMTlGMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwOUUKKzoxMDEyMzAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAzRkZGNUUKKzoxMDEyNDAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNzIKKzoxMDEyNTAwMDAwMDAwMTg4MDAwMDAwMDEwMDgwNDgxMTAwMDAwMDAwMkIKKzoxMDEyNjAwMDAwMDAwMDIxMDA4MDQ4MTEwMDAwMDAwMDAwMDBGRkZGODYKKzoxMDEyNzAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEMwMjExMjIwQjUKKzoxMDEyODAwMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTYyMDAwMDAwMDAwQzIKKzoxMDEyOTAwMDAwMDAwMDEwQzA4MTFBMjAwMDAwMDAwMDgxMDAwMDAwNDIKKzoxMDEyQTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExNEEKKzoxMDEyQjAwMDAwMDAwMDAwMDAwMDAwMDgwMDIyMUUzMDAwMDAwMDAwQjYKKzoxMDEyQzAwMDAwMDAwMDMyMDAyMDFBMkQwMDAwMDAwMDAwMDBFMDAwQTUKKzoxMDEyRDAwMDAwMjA0NDExMDAwMDAwMDBGRkZCRkYwOTAwMjA0ODExMUUKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMTEwMDIwMjIyRDAwMDAwMDAwN0UKKzoxMDEyRjAwMDAwMDAxRkZGMDAyOTRBMjgwMDAwMDAwMDAwMDAwMDA2MkYKKzoxMDEzMDAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDAwMjkyMEU4M0QKKzoxMDEzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwODAwMDAwMDAwNUQKKzoxMDEzMjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMzIKKzoxMDEzMzAwMDAwMjk0QTI2MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExOUIKKzoxMDEzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMjQKKzoxMDEzNTAwMDAwMDAwMTAwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDA4M0IKKzoxMDEzNjAwMDAwNjIxRTI4MDAwMDAxMjgwMDAwMDAwODAwODIyMjI4RDgKKzoxMDEzNzAwMDAwMDAwMDAwMDAwMkMwMDAwMDIwNDQxMTAwMDAwMDAwMzYKKzoxMDEzODAwMDAwMDAwMDFCMDA2MDBFMkQwMDAwMDFBQTAwMDAwMDFDRTAKKzoxMDEzOTAwMDAwNjAwRTJEMDAwMDAxQUEwMDAwQzAwODAwMjA0NDExQ0EKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMEUyRDAwMDAwMDAwQzUKKzoxMDEzQjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDFBNjAwMDAwMDAwQjIKKzoxMDEzQzAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAxN0YKKzoxMDEzRDAwMDAwMDAwMDAwMzkwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNUIKKzoxMDEzRTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDEzRjAwMDAwODA0ODAyMDAwMDAwMDAwMDAwMDAyMDAwMjAyRTJEODgKKzoxMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCMEQ2MzAwMDAwMDAwMzEKKzoxMDE0MTAwMDAwMDAwMDA4MDAyMjRBMjMwMDAwMDAwMDAwMDAwMDEwMjUKKzoxMDE0MjAwMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAxODAwMjI0QTIzODYKKzoxMDE0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwNDgwMzAwMDAwMDAwRTEKKzoxMDE0NDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAxMDAwMjEKKzoxMDE0NTAwMDAwNjAwNDExMDAwMDAyRkUwMDAwMDAwMDAwMjAwNDExRTIKKzoxMDE0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMTlGNjMKKzoxMDE0NzAwMDAwMDAwMDA3MDAyMTA2MkYwMDAwMDAwMDAwMDAwMDE5RjYKKzoxMDE0ODAwMDAwMjAwQTJEMDAwMDAwMDAwMDAwMDAwMTAwMjAyQzExQTcKKzoxMDE0OTAwMDAwMDAwMDAwMDAwMEZGRkY0MDI4MjIyMDAwMDAwMDAwQTQKKzoxMDE0QTAwMDAwMDAwMDBGMDAyNjIyMjgwMDAwMDAwMDAwMDAwMDEwQUQKKzoxMDE0QjAwMDQwMjEyNjIwMDAwMDAwMDAwMDAwMDAwRjAwMjYyNjI5MDEKKzoxMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjAwMDAwMDAwRDIKKzoxMDE0RDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFCMDQKKzoxMDE0RTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMzEKKzoxMDE0RjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMUNEMzIKKzoxMDE1MDAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDgxNjcKKzoxMDE1MTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExNDAKKzoxMDE1MjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNDEKKzoxMDE1MzAwMDAwMDAwMDgwMDAyMDFDMTEwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDE1NDAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwNTcKKzoxMDE1NTAwMDAwMDAwMUM5MDAwMDAwMDAwMDYwMDAwMDAwMDAwMUQ2OEEKKzoxMDE1NjAwMDAwMDAwMDAxMDA1MzFFMjcwMDAwMDFDNTAwMDAwMDAxMUIKKzoxMDE1NzAwMDAwMjAyQzExMDAwMDAwMDAwMDAwMDAxRjAwMjgwQTIyOUIKKzoxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMUYwMDI4MkEyQTAwMDAwMDAwQzAKKzoxMDE1OTAwMDAwMDAwMDAxMDA1MzA2MjEwMDAwMDFCRTAwMDAyMjVDOTMKKzoxMDE1QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMjAwMzA0QTJGMUIKKzoxMDE1QjAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMTkKKzoxMDE1QzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxQTAKKzoxMDE1RDAwMDAwMzAxRTJGMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI3MzYKKzoxMDE1RTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMEYKKzoxMDE1RjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFENjAwMDAwMDAxQjMKKzoxMDE2MDAwMDAwNTMxRTI3MDAwMDAxRDIwMDAwRkZGRjQwMjgwRTIwREIKKzoxMDE2MTAwMDAwMDAwMDAwMDAwMDAwMEYwMDI2MEUyMzAwMDAwMDAwNjQKKzoxMDE2MjAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMDAwMDAwMDBGODgKKzoxMDE2MzAwMDAwMjYxMjI0MDAwMDAwMDAwMDAwMDAwMDAwMjAxNDExMDkKKzoxMDE2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMTgxMTAwMDAwMkE0NkIKKzoxMDE2NTAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDE2NjAwMDAwMkYwMjJCMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMzIKKzoxMDE2NzAwMDAwMDAwMUU1MDAwMDAwMTAwMDIyMTYyODAwMDAwMDAwMTQKKzoxMDE2ODAwMEZGRkYwMDAwMDAyODE2MjUwMDAwMDAwMDAwMDBGRkZGRkIKKzoxMDE2OTAwMDAwMjgxQTI5MDAwMDAwMDAwMDAwMDAwMDAwMjk0OEM1QTkKKzoxMDE2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwQTAwMDAwMDAwQzgKKzoxMDE2QjAwMDAwMDAwMDAwMDAyMDJDMTEwMDAwMDAwMDAwMDAwMDEwQkQKKzoxMDE2QzAwMDAwMjIxNjIzMDAwMDAwMDBGRkZGMDAwMDAwMjgxNjI1NUUKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MUEyNDAwMDAwMDAwQTYKKzoxMDE2RTAwMDAwMDAwMDAwMDAyOTQ4QzUwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDE2RjAwMDAwNzMxNTAzMDAwMDAxRjIwMDAwMDAwMDAwMjAxODA1MkYKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczMTUyNDAwMDAwMUYyM0EKKzoxMDE3MTAwMDAwMDAwMDAwMDAyRDE0QzUwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDE3MjAwMDAwMzAwOEEyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyNzUKKzoxMDE3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjAwMDAwMDAwNUYKKzoxMDE3NDAwMDAwMDAwMDAwMDAyMDIwMDMwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDE3NTAwMDAwODAyNDA0MDAwMDAwMDAwMDAwMDAwRjAwMjEwMjI1OEEKKzoxMDE3NjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjEzOEMKKzoxMDE3NzAwMDAwMDAwMDAwMDAyQjE0MDUwMDAwMDAwMDAwMDAwMDAxMjQKKzoxMDE3ODAwMDAwOTAxNjI1MDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMkUKKzoxMDE3OTAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkZFQzkKKzoxMDE3QTAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDE3QjAwMDAwNjAwODExMDAwMDAxOUYwMDAwMjI1NjAwMjA0NDExMjMKKzoxMDE3QzAwMDAwMDAwMDAwMDAwMDAwMUEwMDI5NEEyMjAwMDAwMDAwNkEKKzoxMDE3RDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAzRkZGRUIKKzoxMDE3RTAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQUQKKzoxMDE3RjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDUKKzoxMDE4MDAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRTIKKzoxMDE4MTAwMDAwMzg0QTIxMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMTMKKzoxMDE4MjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwM0UKKzoxMDE4MzAwMDAwMDBGRkZGNDAyODEyMjAwMDAwMDAwMDAwMDAwMDEwMDAKKzoxMDE4NDAwMEMwMjExQTIwMDAwMDAwMDAwMDAwRkZGRjQwMjgwRTIwRTkKKzoxMDE4NTAwMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTYyMDAwMDAwMDAwNjEKKzoxMDE4NjAwMDAwMDAwMDAwMDA3NDE0NjUwMDAwMDJBNDAwMDFBMUZENDYKKzoxMDE4NzAwMDAwNjA0NDExMDAwMDAyQzkwMDAwMDAwMTAwMzMwNjIxOEQKKzoxMDE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDYKKzoxMDE4OTAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDIwNjAwMDAzRkZGMzYKKzoxMDE4QTAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMEMKKzoxMDE4QjAwMDAwMDAwMUZGMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMjMKKzoxMDE4QzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVDNTAwMDAwMDAwRUUKKzoxMDE4RDAwMDAwNDAwNDBGMDAwMDAyMDAwMDAwMDAwMDAwNjAwMDAwNTMKKzoxMDE4RTAwMDAwMDAwNUIyMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUM1MTcKKzoxMDE4RjAwMDAwMDAwMjEwMDA2MDA0MTEwMDAwMDJGRTAwMDAwMDAwNjEKKzoxMDE5MDAwMDAwNjAwMDAwMDAwMDAxOEQwMDAwMDAwMDAwNjAwMDAwODkKKzoxMDE5MTAwMDAwMDAwMTg5MDAwMDAwMDAwMDYwMDAwMDAwMDAwMkE0MzcKKzoxMDE5MjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDI4QzkzODAwMDAwQjYKKzoxMDE5MzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA4QzIKKzoxMDE5NDAwMDAwMDAwMDAwOTUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwOEQKKzoxMDE5NTAwMDAwMDAwMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDE5NjAwMDBDRTAwMDAwMDAwMDAyMUYwMDAwMDAwMEMwNDA0ODAwMjIKKzoxMDE5NzAwMDAwMDAwMjFDOTIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNDIKKzoxMDE5ODAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAyMjU2QjcKKzoxMDE5OTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjAwMjA0ODExNDMKKzoxMDE5QTAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwNDQKKzoxMDE5QjAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMEUKKzoxMDE5QzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMjgKKzoxMDE5RDAwMDAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwRjMKKzoxMDE5RTAwMDAwMDAwMDAwMDA2MDA0MTEwMDAwMDJFNDAwMDAwMDAwOUMKKzoxMDE5RjAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMDAwNjAwMDAwODIKKzoxMDFBMDAwMDAwMDAwNUIyMDAwMEEwMEMwMDIwNDQxMTAwMDAwMDAwRkUKKzoxMDFBMTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDFBMjAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMEUKKzoxMDFBMzAwMDAwMDAwMDBCMDAwMDAwMTg0MDIxMEEyMDAwMDAwMDAwRjgKKzoxMDFBNDAwMDAwMDAwMDAzMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDFBNTAwMDBBRTAwMDAwMDAwMDAyMzUwMDAwMDAxQTAwMjAyMjJEREMKKzoxMDFBNjAwMDAwMDAwMDAwMDAwODAxMDEwMDI5MjIyODAwMDAwMDAwRjkKKzoxMDFBNzAwMDAwMDAwMDFBMDAyMDM2MjgwMDAwMDAwMDAwMDBBMzBDMUYKKzoxMDFBODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQjkKKzoxMDFBOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMUUKKzoxMDFBQTAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDIzQTAwMDAwMDAwQjIKKzoxMDFBQjAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxMDAwNjAwNDExMzYKKzoxMDFBQzAwMDAwMDAwMkZFM0Y4MDAwMDAwMDIwMDQxMTAwMDAwMDAwMjIKKzoxMDFBRDAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDE5RjAwMDAyMjVDNkYKKzoxMDFBRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDUKKzoxMDFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMjY1MUYKKzoxMDFCMDAwMDAwMDAwMDFEMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAxNEMKKzoxMDFCMTAwMDAwMjExRTI3MDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwNkIKKzoxMDFCMjAwMDAwMDAwMjUzMDAwMDAwMTgwMDIwMUUyRDAwMDAwMDAwREQKKzoxMDFCMzAwMDAwMDBGRkZGMDAyODFFMjcwMDAwMDAwMDAwMDAwMDAwM0EKKzoxMDFCNDAwMDAwMzQxQzI3MDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwNEMKKzoxMDFCNTAwMDAwMDAwMjQ4MDAwMDAwMDAwMDIwMUMxMTAwMDAwMDAwRUUKKzoxMDFCNjAwMDAwMDAwMDAwMDAyRjAwRTUwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDFCNzAwMDA4QzAwMDAwMDAwMDAyNEIwMDAwMDAwMDAwMjAxNDA3MTUKKzoxMDFCODAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwMUUyRDAwMDAwMDAwRDIKKzoxMDFCOTAwMDAwMDAwMDEwMDAyMTFFMjcwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDFCQTAwMDAwMzQxQzQ3MDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwQ0MKKzoxMDFCQjAwMDAwMDAwMjUwMDAwMDAwMDAwMDIwMUMxMTAwMDAwMDAwODYKKzoxMDFCQzAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDFCRDAwMDA4QzAwMDAwMDAwMDAyNTMwMDAwMDAwMDAwMjAxODA3QTkKKzoxMDFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkFBRTkKKzoxMDFCRjAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMDFDMDAwMDAwMzQyMDIzMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwOEIKKzoxMDFDMTAwMDAwMDAwMjVCMDAwMDAwMDAwMDM0MjA0NDAwMDAwMDAwQ0YKKzoxMDFDMjAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI1QTAwMDAwMDE2NzAKKzoxMDFDMzAwMDAwNDA0ODExMDAwMDAyNUYwMDAwMDAxODAwNDA0ODExRjkKKzoxMDFDNDAwMDAwMDAwMjVGMDAwMDAwMDAwMDM0MjA0NDAwMDAwMDAwOUIKKzoxMDFDNTAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI1RTAwMDAwMDE3M0IKKzoxMDFDNjAwMDAwNDA0ODExMDAwMDAyNUYwMDAwMDAxOTAwMjA0ODExRTgKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwNTIKKzoxMDFDODAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMUZEM0IKKzoxMDFDOTAwMDAwNjA0NDExMDAwMDAyRDIwMDAwM0ZGRjAwMkYwMjJGMUQKKzoxMDFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMjNGMjcKKzoxMDFDQjAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDEwMEYKKzoxMDFDQzAwMDQwMjEwNjIwMDAwMDAwMDAwMDAwRkZGRkMwMjgwQTIwN0QKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwNjUKKzoxMDFDRTAwMDAwMDBGRkZGQzAyODEyMjAwMDAwMDAwMDAwMDAwMDEwQ0MKKzoxMDFDRjAwMDQwMjExNjIwMDAwMDAwMDAwMDAwRkZGRkMwODgxQTIwQ0QKKzoxMDFEMDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwREQKKzoxMDFEMTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0MjEKKzoxMDFEMjAwMDAwNjA0NDExMDAwMDA2MTQwMDAwMDAwMDAwNjAwMDAwODQKKzoxMDFEMzAwMDAwMDAwNUIyMDAwMDAwMDBDMDYwMDAwMDAwMDAwMjhDM0UKKzoxMDFENDAwMDAwMDAwMDA1MDAyMDBBMkQwMDAwMDAwMDAwMDAwMDA4MkYKKzoxMDFENTAwMDAwMjIwQTIyMDAwMDAwMDAwMDAwMDAzNDAwMjAxQTJEOUEKKzoxMDFENjAwMDAwMDAwMDAwMDAwMDAwMjQwMDIwMUUyRDAwMDAwMDAwRTQKKzoxMDFENzAwMDAwMDA3MDAwMDAyODFFMjcwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDFEODAwMDAwMzExQ0U2MDAwMDAwMDAwMDAwMDAzMzAwMjAxQTJEODYKKzoxMDFEOTAwMDAwMDAwMDAwMDAwMDAwMEMwMDIyMUEyNjAwMDAwMDAwRDUKKzoxMDFEQTAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDFEQjAwMDA2RTAwMDAwMDAwMDAyN0IwMDAwMDAwMDAwMjAxQzExNzMKKzoxMDFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMEMxMTAwMDAwMDAwRDYKKzoxMDFERDAwMDAwMDAwMDM0MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDEwNDYKKzoxMDFERTAwMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDAwNjkxQ0UyNDMKKzoxMDFERjAwMDAwMDAwMTI4OTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMzIKKzoxMDFFMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDk1MDAwMDAwQ0UKKzoxMDFFMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGRUQKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMjg2M0UKKzoxMDFFMzAwMDAwMDAwMDAxMDAzMzNFMkYwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDFFNDAwMEQ5MDA0ODAwMDAwMDAwMDA5MjAwMDAwMDAwMjA0NDExNkEKKzoxMDFFNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNUEKKzoxMDFFNjAwMDAwMDAwMDI0MDA0MDM2MjcwMDAwMDAwMDAwMDAwMDBDQTUKKzoxMDFFNzAwMEMwMjIwQTIwMDAwMDAwMDAwMDAwMDAzMjAwMjAzNjIyQUMKKzoxMDFFODAwMDAwMDAwMDAwMDAwMDAwMzFDMDQwMzYyMDAwMDAwMDAwQ0IKKzoxMDFFOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA5N0UKKzoxMDFFQTAwMDAwMjA0ODExMDAwMDAwMDBBMTAwMDAwMDAwMjA0NDExQTMKKzoxMDFFQjAwMDAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMTAwMDAwMDAwNDgKKzoxMDFFQzAwMDAwMDAwMDI5MDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDFFRDAwMDAwMkMxQ0UzMDAwMDAwMDAwMDAwMDAyOTAwMjAzNjI3MzEKKzoxMDFFRTAwMDAwMDAwMDAwMDAwMDAwMkEwMDIwMUUyRDAwMDAwMDAwNUQKKzoxMDFFRjAwMDAwMDAwMDAwMDAyQzFDRTQwMDAwMDAwMDAwMDAwMDJBOEMKKzoxMDFGMDAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyQjAwMjAxRTJEQkUKKzoxMDFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBBMzAwMDAwMDAwQ0QKKzoxMDFGMjAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDAwMDAwMDJCMzUKKzoxMDFGMzAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyQzAwMjAxRTJEOEQKKzoxMDFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwN0MKKzoxMDFGNTAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDAwMDAwMDJDMDQKKzoxMDFGNjAwMDAwODAzNjI3MDAwMDAwMDAwMDAwMDAyOTAwMjAzNjIzRjIKKzoxMDFGNzAwMDAwMDAwMDAwMDAwMDAwMkEwMDIwMzYyNDAwMDAwMDAwQkQKKzoxMDFGODAwMDAwMDAwMDAwMDAzMTFDQTMwMDAwMDAwMDAwMDAwMDJCMzYKKzoxMDFGOTAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0M0QjMKKzoxMDFGQTAwMDAwMDAwMDAwMDAwMDAwMkMwMDgwMzYyNzAwMDAwMDAwMjgKKzoxMDFGQjAwMDAwMDAwMDIyMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIzNUYKKzoxMDFGQzAwMDAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxRDAwMjAxRTJEMEIKKzoxMDFGRDAwMDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyNzAwMDAwMDAwQjUKKzoxMDFGRTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDJDNTAwMDAwMDAwNTYKKzoxMDFGRjAwMDAwNDAwMDAwMDAwMDAyQzIwMDAwMDAyMjAwMjAzNjI3M0UKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMjMwMDIwMzYyODAwMDAwMDAwMkYKKzoxMDIwMTAwMDAwMDAwMDFEMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMzYKKzoxMDIwMjAwMDAwMjEwMjI3MDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwNzIKKzoxMDIwMzAwMDAwMDAwMkMyMDAwMDAwMDMwMDIxMDIyNzAwMDAwMDAwOEYKKzoxMDIwNDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDJDNTAwMDAwMDJCQUEKKzoxMDIwNTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMkUwMEUxMDYKKzoxMDIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMkMwMDAwMDAwMDAwMkM1RTcKKzoxMDIwNzAwMDAwMDAwMDI5MDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDIwODAwMDAwMzEyMEExMDAwMDAwMDAwMDAwMDAwMDAwMkUwMEU4NDgKKzoxMDIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwNkMwMDAwMDAwMDAwMkM1QjMKKzoxMDIwQTAwMDAwMDAwMDJDMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDIwQjAwMDAwMkUwMEUyMDAwMDAwMDAwMDAwMDAwMDAyQzAwMDAwNEUKKzoxMDIwQzAwMDAwMDAwMkM1MDAwMDAwMkEwMDIwMUUyRDAwMDAwMDAwQjQKKzoxMDIwRDAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDIwRTAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMDA2QzAwMDAwMTQKKzoxMDIwRjAwMDAwMDAwMkM1MDAwMDAwMDAwMDYwMDAwMDAwMDAwNUVEQzcKKzoxMDIxMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDI5RTAwMDAwMDAwQ0YKKzoxMDIxMTAwMDAwNDAwMDAwMDAwMDAyQzcwMDAwMDAwMDAwNjAwMDAwNTYKKzoxMDIxMjAwMDAwMDAwMjlFMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUU0QzYKKzoxMDIxMzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJDNzAwMDAwMDAwOTYKKzoxMDIxNDAwMDAwNjAwMDAwMDAwMDAyOTAwMDAwMDAwMDAwNDAwMDAwNUQKKzoxMDIxNTAwMDAwMDAwMkM3MDAwMDAwMjIwMDIwMUUyRDAwMDAwMDAwMjkKKzoxMDIxNjAwMDAwMDAwMDIzMDA4MDIyMkQwMDAwMDAwMDAwMDAwMDEwNkQKKzoxMDIxNzAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3MDQKKzoxMDIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzAwMDAwMDAwNUYKKzoxMDIxOTAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMDIxQTAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzQzQKKzoxMDIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMEEKKzoxMDIxQzAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDIxRDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzQjMKKzoxMDIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwRjcKKzoxMDIxRjAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDIyMDAwMDAwMjk0ODQ3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzMjYKKzoxMDIyMTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwNDcKKzoxMDIyMjAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDIyMzAwMDAwMzExQ0ExMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MzkKKzoxMDIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDg0NzAwMDAwMDAwRDYKKzoxMDIyNTAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMDIyNjAwMDAwMzEyMEM0MDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4RTkKKzoxMDIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwRTUKKzoxMDIyODAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDIyOTAwMDAwMzEyMEMyMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4QkIKKzoxMDIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwNTUKKzoxMDIyQjAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDIyQzAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMTAwMjIwQTIxQzgKKzoxMDIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzMDhBMjAwMDAwMDAwMjEKKzoxMDIyRTAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDAwMDAwMDEwNkMKKzoxMDIyRjAwMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3MDAKKzoxMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzAwMDAwMDAwREQKKzoxMDIzMTAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDIzMjAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMTAwMjIwQTIxNjcKKzoxMDIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDhBMjAwMDAwMDAwQzMKKzoxMDIzNDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDAwMDAwMDEwMEIKKzoxMDIzNTAwMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3OUYKKzoxMDIzNjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwRkEKKzoxMDIzNzAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDAwMDBGRkZGNEEKKzoxMDIzODAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3NjIKKzoxMDIzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4MDhDNTAwMDAwMDAwMzgKKzoxMDIzQTAwMDAwMDAwMDAwMDAzMDA4NDEwMDAwMDAwMDAwMDAwMDAxQjMKKzoxMDIzQjAwMDAwMjIwQTIyMDAwMDAwMDAwMDAwMDAwMDAwMzMwOEEyRjIKKzoxMDIzQzAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwOUIKKzoxMDIzRDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDIzRTAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxRDAwMjAyMjJEODgKKzoxMDIzRjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMzAxMDUKKzoxMDI0MDAwMEZGRkZGRkVGMDAyODA2MjEwMDAwMDAwMDAwMDAwMDFBNzcKKzoxMDI0MTAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwRjhFMDAwMjA0NDExMDAKKzoxMDI0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwMTAwMDAwMDAwMzkKKzoxMDI0MzAwMDAwMDAwMDAwMDA4OTQ5MDEwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDI0NDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExOUEKKzoxMDI0NTAwMDAwMDAwMDAwMDYwQTAyMDAwMDgwNDgxMTAwMDAwMDAwOTEKKzoxMDI0NjAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDk3MDAwMDAwRjUKKzoxMDI0NzAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODExRUUKKzoxMDI0ODAwMDAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNEQKKzoxMDI0OTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDNDUKKzoxMDI0QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwOEYKKzoxMDI0QjAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMEEKKzoxMDI0QzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDI0RDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBNkUKKzoxMDI0RTAwMDAwMDAwMDAwOTcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRTAKKzoxMDI0RjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwRDkKKzoxMDI1MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExREQKKzoxMDI1MTAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwQzgKKzoxMDI1MjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDRTYKKzoxMDI1MzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRkUKKzoxMDI1NDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwQTcKKzoxMDI1NTAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDk3MDAwMDAwM0EKKzoxMDI1NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExN0QKKzoxMDI1NzAwMDAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNUMKKzoxMDI1ODAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDNTQKKzoxMDI1OTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwOUUKKzoxMDI1QTAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMTkKKzoxMDI1QjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDFBMUZENTQKKzoxMDI1QzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwNzUKKzoxMDI1RDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMTcKKzoxMDI1RTAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDAwMDAyMjU3QzgKKzoxMDI1RjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0MwNDg0QTIwRjEKKzoxMDI2MDAwMDAwMDAwMDAwMDAwMDIyNUQwMDIwNDQxMTAwMDAwMDAwRDYKKzoxMDI2MTAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDI2MjAwMDAwNjAwMDAwMDAwMDA1QzUwMDAwMDAwMEMwMjAwODAwOTgKKzoxMDI2MzAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwQTcKKzoxMDI2NDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMDAwMDBBMUZDNDYKKzoxMDI2NTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwREQKKzoxMDI2NjAwMDAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwNTYKKzoxMDI2NzAwMDAwMDAwMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDI2ODAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMjA0ODAwQjYKKzoxMDI2OTAwMDAwMDAwMDAwMDAwMDAwMDE0MDMwNEEyMDAwMDAwMDAwNUYKKzoxMDI2QTAwMDAwMDAwMDAyQzAzMDRBMjAwMDAwMDAwMDAwMDAwMDAxQ0QKKzoxMDI2QjAwMDAwNTMwQTIyMDAwMDAzMzQwMDAwMDAzRkMwMjgwQTIwMTMKKzoxMDI2QzAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMTQKKzoxMDI2RDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4NjcKKzoxMDI2RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNzAwMjA0ODExRTUKKzoxMDI2RjAwMDAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjE0RUQKKzoxMDI3MDAwMDAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDI3MTAwMDE0RTAwMDAwMDAwMDAzM0QwMDAwMDAxNDAwMkYwMjIyMUUKKzoxMDI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMzUxODkKKzoxMDI3MzAwMDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwNzQKKzoxMDI3NDAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExNTQKKzoxMDI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAKKzoxMDI3NjAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM1RTAwMDAyMTAwMTgKKzoxMDI3NzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQkMKKzoxMDI3ODAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMjEKKzoxMDI3OTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDI3QTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExNDUKKzoxMDI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQTAKKzoxMDI3QzAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMDAwMDAwMDA0N0IKKzoxMDI3RDAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwREEKKzoxMDI3RTAwMDAwMDAwMzU1MDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwRUMKKzoxMDI3RjAwMDAwMDA4MDAwMDA0MDQ4MTEwMDAwMDM0OTAwMDAwMDI4NEMKKzoxMDI4MDAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwODkKKzoxMDI4MTAwMDAwMDAwMzQ5MDAwMDIxMDQwMDIwNDQxMTAwMDAwMDAwRDIKKzoxMDI4MjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDI4MzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNDgKKzoxMDI4NDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNjAKKzoxMDI4NTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI4NjAwMDAwNDA0ODAyMDAwMDAwMDAwMDAwMDAzNTAwMjAzNjI2MkQKKzoxMDI4NzAwMDAwMDAwMDAwMDAwMDAwNDkwMDIwMTgxMTAwMDAwMDAwQzYKKzoxMDI4ODAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxQ0UKKzoxMDI4OTAwMDAwMzMxQTI2MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI2NkUKKzoxMDI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMzYwRjkKKzoxMDI4QjAwMDAwMDAwMDM1MDA4MDFBMkQwMDAwMDAwMDAwMDAwMDNGREQKKzoxMDI4QzAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxNTAwMkYwMjIyOEUKKzoxMDI4RDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzc2OTMKKzoxMDI4RTAwMDAwMDAwMDFFMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDI4RjAwMDBDRTAwMDAwMDAwMDAzODAwMDAwMDAyMDAwMkYwMjIyRjYKKzoxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzhDNEMKKzoxMDI5MTAwMDAwMDAwMDBGMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDI5MjAwMDBDRTAwMDAwMDAwMDAzOTgwMDAwMDAxMDAwMkYwMjIyQkQKKzoxMDI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzk4MTAKKzoxMDI5NDAwMDAwMDAwMDA2MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDI5NTAwMDBDRTAwMDAwMDAwMDAzOUEwMDAwMDAxNjAwMkYwMjIyODUKKzoxMDI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzlGRDkKKzoxMDI5NzAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMDI5ODAwMDAwNDA0ODAyMDAwMDAwMDAwODAwMDAwMDAwMjkwQTIyNjAKKzoxMDI5OTAwMDAwMDAwMDAwMDAwMDAwMDM0MDIxMEUyMDAwMDAwMDAwQTUKKzoxMDI5QTAwMDAwMDAwMDBDQzAyMTEyMjAwMDAwMDAwMDAwMDgwMDAwMDAKKzoxMDI5QjAwMDAwMjgxMjI0MDAwMDAwMDAwMDAwMDAxNEMwMjIxNjIwOEQKKzoxMDI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MTRBNDAwMDAwMDAwMjYKKzoxMDI5RDAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMDI5RTAwMDAwMjk0OEEyMDAwMDAwMDAwMDAwQTFGRTAwMjA0NDExQzAKKzoxMDI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMzAwMDAwMDAwNEMKKzoxMDJBMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQ0YKKzoxMDJBMTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExQUYKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMTUwMDIwNDgxMTAwMDAwMDAwMTgKKzoxMDJBMzAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDE1OTQKKzoxMDJBNDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwM0YKKzoxMDJBNTAwMDAwMDAwMzgyMDAwMDIxMEUwMDIwNDQxMTAwMDAwMDAwNEQKKzoxMDJBNjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDJBNzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExNzMKKzoxMDJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwQkMKKzoxMDJBOTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxM0YKKzoxMDJBQTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExMUYKKzoxMDJBQjAwMDAwMDAwMDAwMDAwMDAwMTYwMDIwNDgxMTAwMDAwMDAwODcKKzoxMDJBQzAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDAzMTYKKzoxMDJBRDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwQUYKKzoxMDJBRTAwMDAwMDAwMzhFMDAwMDIxMDgwMDIwNDQxMTAwMDAwMDAwQjcKKzoxMDJBRjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDJCMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExRTIKKzoxMDJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwMkIKKzoxMDJCMjAwMDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwODAKKzoxMDJCMzAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMjAxMDAwMjA0NDExNTcKKzoxMDJCNDAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwOEMKKzoxMDJCNTAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDJCNjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwNjAwNDA0ODExNEQKKzoxMDJCNzAwMDAwMDAwMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwQjAKKzoxMDJCODAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MDUKKzoxMDJCOTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNDcKKzoxMDJCQTAwMDAwMDAwMDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzVFRjUKKzoxMDJCQjAwMDAwMDAwMDE2MDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDJCQzAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwQzAwMzEKKzoxMDJCRDAwMDAwMDAwMDAwMDAwMDAwMUQwMDIxMDIyMzAwMDAwMDAwOTIKKzoxMDJCRTAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDNCOTgxMDAwMDAwQjQKKzoxMDJCRjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRTYKKzoxMDJDMDAwMDAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMzYKKzoxMDJDMTAwMDAwMDAwMDE3MDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDYKKzoxMDJDMjAwMDAwNjA0NDExMDAwMDA2MTQwMDAwMDAxMTAwMjEwMjMwNzEKKzoxMDJDMzAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwM0FCRjIKKzoxMDJDNDAwMDAwMDAyMTAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDJDNTAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzOUYKKzoxMDJDNjAwMDAwMDAwMDAwQkFCRUNBRkUwMDIwNDgxMTAwMDAwMDAwQUIKKzoxMDJDNzAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMDEwNkIKKzoxMDJDODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDYKKzoxMDJDOTAwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwNzkKKzoxMDJDQTAwMDAwMDAwMDA0MDA0MDQ4MTEwMDAwMDAwMDAwMDAyMTcwRjYKKzoxMDJDQjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMzUKKzoxMDJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwOTkKKzoxMDJDRDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBBRjQKKzoxMDJDRTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwM0IKKzoxMDJDRjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0JFM0YKKzoxMDJEMDAwMDhDMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFODIKKzoxMDJEMTAwMDAwNDA0ODExMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMjQKKzoxMDJEMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMjkKKzoxMDJEMzAwMDAwMDAzRkZGNDAyODBBMjAwMDAwMDAwMDgwMDAwMDAwNDMKKzoxMDJENDAwMDQwMjgwRTIwMDAwMDAwMDA0MDAwMDAwMEMwMjgxMjIwOTMKKzoxMDJENTAwMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjE0ODQKKzoxMDJENjAwMDAwMDAwMDAwMDAyMDE0MTAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDJENzAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMzMKKzoxMDJEODAwMDAwMDAwM0NDMDAwMDAwMDBDMDQwMTgwMDAwMDAwM0NGOEEKKzoxMDJEOTAwMDAwMDAzRkZGQzAyODFBMjAwMDAwMDAwMDAwMDQwMDAwQ0YKKzoxMDJEQTAwMDAwNjk0NjI2MDAwMDA2MTQwMDAwMDAwMDAwMjAxODEwRUMKKzoxMDJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwQkUKKzoxMDJEQzAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDNEMjAwMDAwMDAwNjIKKzoxMDJERDAwMEMwNDAxQzAwMDAwMDAzRDUwMDAwM0ZGRkMwMjgxRTIwOUIKKzoxMDJERTAwMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNzAwMDAwNjE0RUYKKzoxMDJERjAwMDAwMDAwMDAwMDAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDJFMDAwMDAwMjA0NDAyMDAwMDAwMDAwMDAwMDAwMDAwMjgyMEM1NEYKKzoxMDJFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5NDhFODAwMDAwMDAwMzkKKzoxMDJFMjAwMEE1ODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDAyMDAwMjQKKzoxMDJFMzAwMDAwMjAwQzExMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExMUQKKzoxMDJFNDAwMDAwMDAwM0ZEMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwMUMKKzoxMDJFNTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMDJFNjAwMDQwMjA0ODAwMDAwMDAwMDAwMDAwMDAxRkMwMjEwMjIwOTgKKzoxMDJFNzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0UyOTkKKzoxMDJFODAwMDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMUQKKzoxMDJFOTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwRkZGRkMwNDgxMjIwODEKKzoxMDJFQTAwMDAwMDAwM0VBQTc4MDAwMDAwMDIwMDgxMTAwMDAwMDAwRDUKKzoxMDJFQjAwMDAwMDBBMDAwMDAyMDBDMTEwMDAwMDAwMDgzMDAwMDAwQjIKKzoxMDJFQzAwMDAwNjA0NDExMDAwMDAzRkQwMDAwMDAwMDAwMjA0NDAyRTcKKzoxMDJFRDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQ0EKKzoxMDJFRTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBGRkZGQkMKKzoxMDJFRjAwMEMwMjgxMjIwMDAwMDAwMDA4MzAwMDAwMDAwMjA0NDExQzAKKzoxMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDg4MzAwMDAwMDAwQzYKKzoxMDJGMTAwMDg0MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDJGMjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwNUMKKzoxMDJGMzAwMDAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwM0ZENTkKKzoxMDJGNDAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMUE5ODAwMDAwNTMKKzoxMDJGNTAwMDAwMjAwODExMDAwMDAwMDAwMDAwQzAwMDAwNDAwQzExMUIKKzoxMDJGNjAwMDAwMDAwM0U1QUI4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMTUKKzoxMDJGNzAwMDAwMDBGOEUwMDA0MDBDMTEwMDAwMDNFNUFEODAwMDAwMDcKKzoxMDJGODAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjg4MDAwNDAwQzExMzMKKzoxMDJGOTAwMDAwMDAwM0U1QjM4MDAwMDAwMDIwMDgxMTAwMDAwMDAwREQKKzoxMDJGQTAwMDAwMDBGM0ZDMDA0MDBDMTEwMDAwMDNFNUFGODAwMDAwQkUKKzoxMDJGQjAwMDAwMjAwODExMDAwMDAwMDAwMDAwRTAwMDAwNDAwQzExOUIKKzoxMDJGQzAwMDAwMDAwM0U1QjE4MDAwMDAwMDIwMDgxMTAwMDAwMDAwQUYKKzoxMDJGRDAwMDAwMDBGMDAwMDA0MDBDMTEwMDAwMDNFNTgzMDAwMDAwMzkKKzoxMDJGRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMjE0ODAwMjA0ODExOEEKKzoxMDJGRjAwMDAwMDAwMDAwODQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDgKKzoxMDMwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMDMwMTAwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMTMKKzoxMDMwMjAwMDAwMDAwMDAwMDAxODIwMDBDMDMwNDYyMDAwMDAwMDAwMTIKKzoxMDMwMzAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDMwNDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBRjIKKzoxMDMwNTAwMDAwMDAwMDAwMDAxOEEwMDBDMDMwNDYyMDAwMDAwMDAwNjIKKzoxMDMwNjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDMwNzAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBQzIKKzoxMDMwODAwMDAwMDAwMDAwMDAxOEMwMDBDMDMwNDYyMDAwMDAwMDAwMTIKKzoxMDMwOTAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDMwQTAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBOTIKKzoxMDMwQjAwMDAwMDAwMDAwMDAxOEY4RTBDMDMwNDYyMDAwMDAwMDAwQ0EKKzoxMDMwQzAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDMwRDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBNjIKKzoxMDMwRTAwMDAwMDAwMDAwMDAxOEY4ODBDMDMwNDYyMDAwMDAwMDAwRkEKKzoxMDMwRjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDMxMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMzEKKzoxMDMxMTAwMDAwMDAwMDAwMDAxOEUwMDBDMDMwNDYyMDAwMDAwMDAwNjEKKzoxMDMxMjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDMxMzAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDEKKzoxMDMxNDAwMDAwMDAwMDAwMDAxOEYwMDBDMDMwNDYyMDAwMDAwMDAwMjEKKzoxMDMxNTAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDMxNjAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBRDEKKzoxMDMxNzAwMDAwMDAwMDAwMDAxOEYzRkNDMDMwNDYyMDAwMDAwMDAwRjIKKzoxMDMxODAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDMxOTAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBQTEKKzoxMDMxQTAwMDAwMDAwMDAwODYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMjQKKzoxMDMxQjAwMDAwMDAwMDAwMDA0MDQ4MDEwMDAwMDAwMDg1MDAwMDAwMDEKKzoxMDMxQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAxMDEKKzoxMDMxRDAwMDAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwREQKKzoxMDMxRTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMDMxRjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwN0YKKzoxMDMyMDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQzgKKzoxMDMyMTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDMyMjAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwOUYKKzoxMDMyMzAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjE0MUIKKzoxMDMyNDAwMDAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDMyNTAwMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0QzAyMEMKKzoxMDMyNjAwMDAwMDAwNDJFMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwNDAKKzoxMDMyNzAwMDAwMDAwMDAwQzAyMDEwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDMyODAwMEMwMjAxNDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxODAwNTIKKzoxMDMyOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMUMwMDAwMDAwMDAwMzIKKzoxMDMyQTAwMDAwMDA3RjAwMDAyODBBMjEwMDAwMDAwMDAwMDA0NTAwMDcKKzoxMDMyQjAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQ0YKKzoxMDMyQzAwMDAwMDAwNDNDMDAwMDAwMDBDMDIwMjAwMDAwMDAwMDAwQkUKKzoxMDMyRDAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDEwQzcKKzoxMDMyRTAwMDAwMjgwQTIzMDAwMDAwMDAwMDAwMDAxMDAwMkYwMjIyMjYKKzoxMDMyRjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNDQ0OUEKKzoxMDMzMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQzYKKzoxMDMzMTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI0NUQKKzoxMDMzMjAwMDAwMDAwNjE0MDAwMDAwMDAwMDQwMDAwMDAwMDAwNDRERjIKKzoxMDMzMzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDMzNDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExMDEKKzoxMDMzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDEKKzoxMDMzNjAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDMzNzAwMDFBQzAwMDAwMDAwMDA0NDk5RTAwMDAwMDAwMjA0NDExMTMKKzoxMDMzODAwMDAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwODQKKzoxMDMzOTAwMDAwMDAwMDAwMUFFMDAwMDAwMDAwMDQ0QzAwMDAwMDAwRTMKKzoxMDMzQTAwMDAwMjgyNEYwMDAwMDAwMDAwMDAwMDAwNzAwMjgwQTIzODUKKzoxMDMzQjAwMDAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyMjAwMDAwMDAwQjkKKzoxMDMzQzAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ1NDAwMDAwMDAwQkIKKzoxMDMzRDAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMDA0RTAwMDAwMTEKKzoxMDMzRTAwMDAwMDAwNDZEMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDdBQUUKKzoxMDMzRjAwMDAwMDAwMDAyMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDM0MDAwMDBBRTAwMDAwMDAwMDA0NTkwMDAwMDAwMDAwMkYwMEM5N0QKKzoxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMkUwMDAwMDAwMDAwNDZENTkKKzoxMDM0MjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ3QTAwMDAwMDAzREIKKzoxMDM0MzAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwNEYKKzoxMDM0NDAwMDAwMDAwNDVFMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMjIKKzoxMDM0NTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ2RDAwMDAwMDAwMEYKKzoxMDM0NjAwMDAwNDAwMDAwMDAwMDA0N0EwMDAwMDAwNDAwMkYwMjIyNDcKKzoxMDM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDYzRkIKKzoxMDM0ODAwMDAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDM0OTAwMDBBRTAwMDAwMDAwMDA0NkQwMDAwMDAwMDAwNDAwMDAwOTEKKzoxMDM0QTAwMDAwMDAwNDdBMDAwMDAwMDUwMDJGMDIyMjAwMDAwMDAwNDYKKzoxMDM0QjAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ2ODAwMDAwMDAwQjYKKzoxMDM0QzAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMDA2RTAwMDAwMUUKKzoxMDM0RDAwMDAwMDAwNDZEMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDdBQkQKKzoxMDM0RTAwMDAwMDAwMDA2MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDM0RjAwMDBBRTAwMDAwMDAwMDA0NkQwMDAwMDAwMDAwMkYwMEM5NzkKKzoxMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUwMDAwMDAwMDAwNDZENjIKKzoxMDM1MTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ3QTAwMDA3RjAwNkUKKzoxMDM1MjAwMDAwMjgwQTIxMDAwMDAwMDAwMDAwNDUwMDAwMkYwMjIyQjAKKzoxMDM1MzAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMDAwQTEKKzoxMDM1NDAwMDAwMDAwMDA4MDAyMTBBMjMwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDM1NTAwMDE0QzAwMDAwMDAwMDA0NzcwMDAwMjE2OTAwMjA0NDExMUQKKzoxMDM1NjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMzMKKzoxMDM1NzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDM1ODAwMEMwMjA0ODAwMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExM0EKKzoxMDM1OTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDQwMDAwMDAwMDAwMDcKKzoxMDM1QTAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMDM1QjAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwN0YwMDAwMjgwQTIxRjEKKzoxMDM1QzAwMDAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwNjMKKzoxMDM1RDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ4MDAwMDAwMDAwN0QKKzoxMDM1RTAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMUIKKzoxMDM1RjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwMDAwQ0IKKzoxMDM2MDAwMDAwMDAwMDAwMDA0MDRDMDgwMDAwMDQzQzAwMDAwMDAwRTYKKzoxMDM2MTAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwMjMKKzoxMDM2MjAwMDAwMDAwMDAwMDAwMDAwMTE0MDIxMTIyMDAwMDAwMDAwRjYKKzoxMDM2MzAwMDAwMDAwMDEyNDAyMTE2MjAwMDAwMDAwMDAwMDAyMTY5NTcKKzoxMDM2NDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyOUIKKzoxMDM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxMDIyNTAwMDAwMDAwMjIKKzoxMDM2NjAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDQ4QTAwMDQwMDAwRDQKKzoxMDM2NzAwMEMwNDk0QTIwMDAwMDA0OEJGRkZCRkZGRkMwMjg0QTIwRkUKKzoxMDM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxMDIyMzAwMDAwMDAwRjQKKzoxMDM2OTAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDQ5NzAwMDAwMDAwOUIKKzoxMDM2QTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQ0EKKzoxMDM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxMDIyNDAwMDAwMDAwQzMKKzoxMDM2QzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDAwMDgxMDAwMDAwQTUKKzoxMDM2RDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwQzAwMjA0ODExRjAKKzoxMDM2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwQUEKKzoxMDM2RjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDQ5M0EwMDAwMDAwQkYKKzoxMDM3MDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExNkIKKzoxMDM3MTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQjMKKzoxMDM3MjAwMDAwMDAwMDA0MDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZCOTAKKzoxMDM3MzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODEwREMKKzoxMDM3NDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwODMKKzoxMDM3NTAwMDAwMDAwMDA1MDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZDNUUKKzoxMDM3NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODEwQUMKKzoxMDM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwRjQKKzoxMDM3ODAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDM3OTAwMDAwNDAwMDAwMDAwMDA0OTEwMDAwMDAwMEMwMjEwQTIwNDkKKzoxMDM3QTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNEFFOTMKKzoxMDM3QjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDM3QzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExN0QKKzoxMDM3RDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQzEKKzoxMDM3RTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDM3RjAwMDFBQzAwMDAwMDAwMDA0QTk5RTAwMDAwMDAwMjA0NDExMkYKKzoxMDM4MDAwMDAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwRkYKKzoxMDM4MTAwMDAwMDAwMDAwMUFFMDAwMDAwMDAwMDRBQzAwMDAwMDAwRkUKKzoxMDM4MjAwMDAwNDAwMDAwMDAwMDA0QjI4MTAwMDAwMDAwMjA0NDExQUMKKzoxMDM4MzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMEUKKzoxMDM4NDAwMDAwMDQwMDAwQzAyOTQ2MjAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDM4NTAwMEMwNjAwMDAwMDAwMDA2MTQwMDAwMDAwMTAwMjEwMjIyRTgKKzoxMDM4NjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNEI5QzcKKzoxMDM4NzAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDM4ODAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTgKKzoxMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwQjAKKzoxMDM4QTAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDM4QjAwMEMwMjA0NDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODEwOEMKKzoxMDM4QzAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDIKKzoxMDM4RDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4NTUKKzoxMDM4RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwRDAwMjA0ODExREQKKzoxMDM4RjAwMDAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjE0REIKKzoxMDM5MDAwMDAwMDAwMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDM5MTAwMDE0QzAwMDAwMDAwMDA0QkIwMDAwMjE4MDAwMjA0NDExRkUKKzoxMDM5MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNkYKKzoxMDM5MzAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDM5NDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwNkYKKzoxMDM5NTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMUYKKzoxMDM5NjAwMDAwMDAwMDAzMDAzMzNFMkYwMDAwMDAwMDAwMDAwMDAxQjMKKzoxMDM5NzAwMDAwMjEwMjIxMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMEYKKzoxMDM5ODAwMDAwMDAwNEVCMDAwMDAwMzUwMDIwMEEyRDAwMDAwMDAwQkMKKzoxMDM5OTAwMDAwMDQwMDAwMThFMDBDMTEwMDAwMDREQTAwMDAwMDAxMkYKKzoxMDM5QTAwMDAwMzMzRTJGMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExNzgKKzoxMDM5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwOUQKKzoxMDM5QzAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4ODQKKzoxMDM5RDAwMDAwMzAwQTIyMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNjMKKzoxMDM5RTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQUYKKzoxMDM5RjAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMDNBMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzRTEKKzoxMDNBMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwNDIKKzoxMDNBMjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDNBMzAwMEQ4QzA0ODAwMDAwMDA0Q0UwMDAwMjE2OTAwMjA0NDExRDUKKzoxMDNBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMEMKKzoxMDNBNTAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4RjMKKzoxMDNBNjAwMDAwMzAwQTIyMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRDIKKzoxMDNBNzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMUUKKzoxMDNBODAwMDAwMDAwMDM2MDAyMDEyMkQwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDNBOTAwMDAwMjkwQzgzMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExNkYKKzoxMDNBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwQUMKKzoxMDNBQjAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4OTMKKzoxMDNBQzAwMDAwMzAwQTIyMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNzIKKzoxMDNBRDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQkUKKzoxMDNBRTAwMDAwMDAwMDExMDAyMTAyMjQwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDNBRjAwMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwQjIKKzoxMDNCMDAwMDAwMDAwNDkxMDAwMDAwMzVDMDIwMzYyMDAwMDAwMDAwQjUKKzoxMDNCMTAwMDAwMDAwMDM2QzA0MDM2MjAwMDAwMDAwMDAwMDAzMDRBOUYKKzoxMDNCMjAwMDAwMjA0NDExMDAwMDAwMDBFMDAwMDAwMEMwNDg0QTIwQ0UKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyMTAwMDAwMDAwMzIKKzoxMDNCNDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRGMjAwMDAwMDAwQUIKKzoxMDNCNTAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMEQ5MDAwMDAwMjEKKzoxMDNCNjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxNTAKKzoxMDNCNzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyNEQKKzoxMDNCODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDBGRjAwMjgwRTMwNTcKKzoxMDNCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwRDEKKzoxMDNCQTAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDRGNjAwMDAwMDAwNEYKKzoxMDNCQjAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwNDkKKzoxMDNCQzAwMDAwMDAwNTBCMDAwMDAwMDAwMDIwMEMxMTAwMDAwMDAwQTgKKzoxMDNCRDAwMDAwMDAwMDI0MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDM0MTQKKzoxMDNCRTAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAzMjAwMjAzNjIzQjEKKzoxMDNCRjAwMDAwMDAwMDAwMDAwMDAwMzEwMDIwMzYyMzAwMDAwMDAwMUIKKzoxMDNDMDAwMDAwMDAwMDFEMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDJERjEKKzoxMDNDMTAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyRTAwMjAzNjIzODQKKzoxMDNDMjAwMDAwMDAwMDAwMDAwMDAwMUIwMDIwMzYyMzAwMDAwMDAwMDAKKzoxMDNDMzAwMDAwMDAwMDFDMDAyMDM2MjMwMDAwMDAwMEZGRkZFMDAwMTEKKzoxMDNDNDAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAyOTAwMjAzNjIzOTUKKzoxMDNDNTAwMDAwMDAwMDAwMDAwMDAwMkEwMDIwMzYyMzAwMDAwMDAwQzEKKzoxMDNDNjAwMDAwMDAxRkZGMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDJCQ0UKKzoxMDNDNzAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyQzAwMjAzNjIzMjYKKzoxMDNDODAwMDAwMDAwMDAwRjFGRkZGRkYwMDI4M0EyRTAwMDAwMDAwQjYKKzoxMDNDOTAwMDAwMDAwMDFBQzAyMjBFMjAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMDNDQTAwMDAwMjkzODZFMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNEYKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwODUKKzoxMDNDQzAwMDAwMDAwMDMzNDAyMDM2MjAwMDAwMDAwMDg3MDAwMDAwODQKKzoxMDNDRDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNDcKKzoxMDNDRTAwMDAwMDAwMDAwMDAwMEExRjQwMDIwNDQxMTAwMDAwMDAwQ0EKKzoxMDNDRjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDlEMDAwMDAwQUYKKzoxMDNEMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxRjQwMjE0QTIwNTQKKzoxMDNEMTAwMDAwMDAwMDAwOTYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwOTgKKzoxMDNEMjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDNEMzAwMEMwMjAwQzAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxMDAwQTcKKzoxMDNENDAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMTYyNDAwMDAwMDAwRjkKKzoxMDNENTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDI1NkEKKzoxMDNENjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAwMzAwMjgxRTIzNkUKKzoxMDNENzAwMDAwMDAwMDAwMDAwMDAwMDgwMDIyMjIyMzAwMDAwMDAwRDQKKzoxMDNEODAwMEZGRkZGMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDNEOTAwMDAwMjkyMEU4MDAwMDAwMDAwMDAwMDAyNzAwMjAzNjI4NEQKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMTgwMDIxMUUyMzAwMDAwMDAwOTkKKzoxMDNEQjAwMDAwMDAwMDI4MDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAyNUMKKzoxMDNEQzAwMDAwMjIxNjI0MDAwMDAwMDAwMDAwMDAwMDAwMzAxNEE4QUIKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMjYwMDIwMzYyNTAwMDAwMDAwNDIKKzoxMDNERTAwMDAwMDAwMDAzMDAyMTFBMjQwMDAwMDAwMDEwMDAwMDAwNjEKKzoxMDNERjAwMDAwMjgxQTI2MDAwMDAwMDBFRkZGRkZGRjAwMjgzQTJFREYKKzoxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5MzhDRTAwMDAwNjAyNUIKKzoxMDNFMTAwMDAwMDAwMDAxNDAyODBBMjAwMDAwMDAwMDAwMDAwMDA2MDkKKzoxMDNFMjAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDMwMEMwMjgxMjIwREYKKzoxMDNFMzAwMDAwMDAwMDAwMDAwMDAwMDgwMDIxMTIyNDAwMDAwMDAwMjMKKzoxMDNFNDAwMDAwMDAwMDAwQzAyMDE2MjAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMDNFNTAwMEMwMjAxQTIwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjIyMDMKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNTQxMzgKKzoxMDNFNzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNEIKKzoxMDNFODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1ODAwMzAwQTI0RTEKKzoxMDNFOTAwMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjE0MzMKKzoxMDNFQTAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDNFQjAwMDAwMjA0ODA1MDAwMDAwMDAwMDAyMDAwMDAwMjk0QTI2RkEKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwN0EKKzoxMDNFRDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAyMjcKKzoxMDNFRTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwQjIKKzoxMDNFRjAwMDAwMDAwNTQ5MDAwMDAwMDBDMDIwMUMxMDAwMDAwMDAwNjgKKzoxMDNGMDAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDU1QjAwMDAwMDAyNEYKKzoxMDNGMTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwODEKKzoxMDNGMjAwMDAwMDAwNTQ5ODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNEQKKzoxMDNGMzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU4OEQKKzoxMDNGNDAwMDAwMzAwQTI0MDAwMDAwMDAwMDA0MDAwMDAwNjk0NjIyM0UKKzoxMDNGNTAwMDAwMDAwNjE0MDAwMDAwMDBDMDIwMUMxMDAwMDAwMDAwM0IKKzoxMDNGNjAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDU1QjAwMDAwMDAwRjEKKzoxMDNGNzAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMjEKKzoxMDNGODAwMDAwMDAwNTREMDAwMDAwMDBDMDIwMUMwMDAwMDAwMDAwRTMKKzoxMDNGOTAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDU1QjAwMDAwMDA0QkQKKzoxMDNGQTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwRjEKKzoxMDNGQjAwMDAwMDAwNTU5ODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUQKKzoxMDNGQzAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZERUEKKzoxMDNGRDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNDQKKzoxMDNGRTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQTkKKzoxMDNGRjAwMDAwMDAwMDAwMUFDMDAwMDAwMDAwMDU1NDlFMDAwMDAwRjAKKzoxMDQwMDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExODIKKzoxMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAxQUUwMDAwMDAwMDAwNTU3NEEKKzoxMDQwMjAwMDAwMDAwMDAwMDA0MDFDMTAwMDAwMDU1QjAwMDAwMDAwQzQKKzoxMDQwMzAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwQTAKKzoxMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUwMDAwMDAwMDAwNTVEMjAKKzoxMDQwNTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVBNDAwMDAwMDAwNTcKKzoxMDQwNjAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMkYKKzoxMDQwNzAwMDAwMDAwNTZEMDAwMEEyQjcwMDIwNDQxMTAwMDAwMDAwMDAKKzoxMDQwODAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwNDAKKzoxMDQwOTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMzEKKzoxMDQwQTAwMDAwMDAwMDAwMDAwNEEyQjYwMDYwNDQxMTAwMDAwNjE0RTUKKzoxMDQwQjAwMDAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2NkQKKzoxMDQwQzAwMDAwMjIyNjMwMDAwMDAwMDAwMDAwQTJDNDAwMjA0NDExOUQKKzoxMDQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwN0YKKzoxMDQwRTAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU2QjAwMDBBMkQxMEQKKzoxMDQwRjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4QkIKKzoxMDQxMDAwMDAwMDAwMDAwMDAwMEEyRDEwMDIwNDQxMTAwMDAwMDAwQzcKKzoxMDQxMTAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDAwMDAwMDAxREIKKzoxMDQxMjAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNkUKKzoxMDQxMzAwMDAwMDAwNTdEMDAwMEEyQkIwMDIwNDQxMTAwMDAwMDAwMkIKKzoxMDQxNDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwN0YKKzoxMDQxNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExNzAKKzoxMDQxNjAwMDAwMDAwMDAwMDAwNEEyQkEwMDYwNDQxMTAwMDAwNjE0MjAKKzoxMDQxNzAwMDAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2QUMKKzoxMDQxODAwMDAwMjIyNjMwMDAwMDAwMDAwMDAwQTJDNTAwMjA0NDExREIKKzoxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwQkUKKzoxMDQxQTAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU3QjAwMDBBMkQyM0IKKzoxMDQxQjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4RkEKKzoxMDQxQzAwMDAwMDAwMDAwMDAwMEEyRDIwMDIwNDQxMTAwMDAwMDAwMDYKKzoxMDQxRDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDAwMDAwMDAyMUEKKzoxMDQxRTAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwQUUKKzoxMDQxRjAwMDAwMDAwNThEMDAwMEEyQkYwMDIwNDQxMTAwMDAwMDAwNTcKKzoxMDQyMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwQkUKKzoxMDQyMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExQUYKKzoxMDQyMjAwMDAwMDAwMDAwMDAwNEEyQkUwMDYwNDQxMTAwMDAwNjE0NUIKKzoxMDQyMzAwMDAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2RUIKKzoxMDQyNDAwMDAwMjIyNjMwMDAwMDAwMDAwMDAwQTJDNjAwMjA0NDExMTkKKzoxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwRkQKKzoxMDQyNjAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU4QjAwMDBBMkQzNjkKKzoxMDQyNzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4MzkKKzoxMDQyODAwMDAwMDAwMDAwMDAwMEEyRDMwMDIwNDQxMTAwMDAwMDAwNDQKKzoxMDQyOTAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDAwMDBBMkMzRjYKKzoxMDQyQTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MkEKKzoxMDQyQjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDgKKzoxMDQyQzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkMyMEMKKzoxMDQyRDAwMDAwNjA0NDExMDAwMDA2MTQwMDAwMDAxQTAwMjEyMjMwODIKKzoxMDQyRTAwMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwNTAKKzoxMDQyRjAwMDAwMDBBMkM3MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDQzMDAwMDAwMzA0OEU5MDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwNkMKKzoxMDQzMTAwMDAwMDAwNTk5MDAwMEEyRDQwMDIwNDQxMTAwMDAwMDAwMTQKKzoxMDQzMjAwMDAwMDAwMDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQ0ODcKKzoxMDQzMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4NDUKKzoxMDQzNDAwMDAwMDAwMDAwODUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNzMKKzoxMDQzNTAwMDAwMDAwMDAwMDAyMDQ4MDEwMDAwMDAwMDAwMDAzMDRBN0EKKzoxMDQzNjAwMDAwMjA0NDExMDAwMDAwMDAwMTAwMDAwMDAwMjA0ODExNUUKKzoxMDQzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNTlGNTkKKzoxMDQzODAwMEE0MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDQzOTAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwQjUKKzoxMDQzQTAwMDAwMDAwNUE0MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxNUYKKzoxMDQzQjAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDQzQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRkIKKzoxMDQzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjQKKzoxMDQzRTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA1NEYKKzoxMDQzRjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGNDAwMjA0NDExM0EKKzoxMDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMzMKKzoxMDQ0MTAwMDg4MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxOUUKKzoxMDQ0MjAwMDAwMjA0ODExMDAwMDAwMDBGRjAwMDAwMDAwMjA0NDExOUYKKzoxMDQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDMKKzoxMDQ0NDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAyRjAKKzoxMDQ0NTAwMDAwODA0ODExMDAwMDAwMDAwMDAwMDAwMDBFRTAwMDAwOTUKKzoxMDQ0NjAwMDAwMDAwNUI3MDAwMDEwMDAwMDIwMDgxMTAwMDAwMDAwNDcKKzoxMDQ0NzAwMDAwMDAwMDM0MDAyMDM2MjIwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDQ0ODAwMDAwNjAwMDAwMDAwMDA1QkIwMDAwMDAwMDAwNjAwMDAwQUMKKzoxMDQ0OTAwMDAwMDAwNUE0OTgwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNjYKKzoxMDQ0QTAwMDAwMDAwMDAwMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDQ0QjAwMEMwNjAwMDAwMDAwMDA1QkIwMDAwMDAwMEMwNDAwNDAwMTgKKzoxMDQ0QzAwMDAwMDAwMDAxMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMzAKKzoxMDQ0RDAwMDAwMDAwMDIyMDAyMDQ4MTEwMDAwMDAwMDg5MDAwMDAwQjgKKzoxMDQ0RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExREQKKzoxMDQ0RjAwMDAwMDAwMDAwRkYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNDgKKzoxMDQ1MDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxMzEKKzoxMDQ1MTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMjAwODA0ODExNDcKKzoxMDQ1MjAwMDAwMDAwMDAwMDAwMDIxN0FDMDIwNDQxMTAwMDAwMDAwQkIKKzoxMDQ1MzAwMDAwMDAwMDAwMDA0MDQ4MTEwMDAwMDAwMDk3MDAwMDAwNEIKKzoxMDQ1NDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExN0QKKzoxMDQ1NTAwMDAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNUMKKzoxMDQ1NjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZGMDAwMDAwRDMKKzoxMDQ1NzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNEQKKzoxMDQ1ODAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQjEKKzoxMDQ1OTAwMDAwMDAwMDAyMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDQ1QTAwMDAwNjAwMDAwMDAwMDA1RTEwMDAwMjAxMDAwMjA0NDExMjAKKzoxMDQ1QjAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMDIKKzoxMDQ1QzAwMDAwMDFBMkE0QzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDQ1RDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAxNjAwNjA0ODExOTMKKzoxMDQ1RTAwMDAwMDAwMzVFMDAwMDAwMTYwMDIwNDgxMTAwMDAwMDAwREIKKzoxMDQ1RjAwMDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDAwMDEwMDAwMTUKKzoxMDQ2MDAwMDAwMjA0ODExMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExM0IKKzoxMDQ2MTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMjAKKzoxMDQ2MjAwMDAwMDAyMTdDMDAyMDQ0MTEwMDAwMDAwMDA5ODAwMDAwRUYKKzoxMDQ2MzAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRkZGRjAwMjA0ODExOEMKKzoxMDQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRjEKKzoxMDQ2NTAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGOUYKKzoxMDQ2NjAwMDAwNjA0NDExMDAwMDA2MTQwMDAwMDAxRjAwMjEwMjMwMDkKKzoxMDQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwNjYKKzoxMDQ2ODAwMDAwMDAwMDA0MDA0MDRDMTEwMDAwMDVEQzAwMDAwMDFEOEIKKzoxMDQ2OTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwNDAwMjkxRTI3M0QKKzoxMDQ2QTAwMDAwMDAwMDAwMDAwMDAwMUQwMDgwMzYyNzAwMDAwMDAwMTAKKzoxMDQ2QjAwMDAwMDAwMDFEMDAyMDFFMkQwMDAwMDAwMEZGRkZGRkZCN0EKKzoxMDQ2QzAwMDAwMjgxRTI3MDAwMDAwMDAwMDAwMDAxRDAwODAzNjI3ODMKKzoxMDQ2RDAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMUUyRDAwMDAwMDAwNTIKKzoxMDQ2RTAwMDAwMDAwMDA4MDAyOTFFMjcwMDAwMDAwMDAwMDAwMDFEMzcKKzoxMDQ2RjAwMDAwODAzNjI3MDAwMDAwMDAwMDAwMDAxRDAwMjAxRTJENTUKKzoxMDQ3MDAwMDAwMDAwMDAwRkZGRkZGRjcwMDI4MUUyNzAwMDAwMDAwNDgKKzoxMDQ3MTAwMDAwMDAwMDFEMDA4MDM2MjcwMDAwMDAwMDAwMDAyMDEwNkYKKzoxMDQ3MjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMUIKKzoxMDQ3MzAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwQkQKKzoxMDQ3NDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDE2REEKKzoxMDQ3NTAwMDAwNjA0ODExMDAwMDAzNUUwMDAwMDAxNjAwMjA0ODExQjAKKzoxMDQ3NjAwMDAwMDAwMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwQTQKKzoxMDQ3NzAwMDAwMDEwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDMjIKKzoxMDQ3ODAwMDAwMjA0NDExMDAwMDAwMDAwMTgwMDAwMDAwMjA0ODExQkEKKzoxMDQ3OTAwMDAwMDAwMDAwMDBGRkZGRkYwMDIwNDgxMTAwMDAwMDAwQTMKKzoxMDQ3QTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDQ3QjAwMDE3MDAwMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExRUMKKzoxMDQ3QzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNkYKKzoxMDQ3RDAwMDAwMDQyMTdGMDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDAwNjYKKzoxMDQ3RTAwMDAwMjAwMDEwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQzUKKzoxMDQ3RjAwMDAwMDAwNjEzMDAwMDAwMTAwMDQwNEMxMTAwMDAwNUY5RjUKKzoxMDQ4MDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDQ4MTAwMDM4QzAwMDAwMDAwMDAwMDAwMDAwMDAyNTAwMjAwQTJEMjQKKzoxMDQ4MjAwMDAwMDAwMDAwMDAwMDAwMjYwMDIwMEUyRDAwMDAwMDAwMDcKKzoxMDQ4MzAwMDAwMDAwMDI3MDAyMDEyMkQwMDAwMDAwMDAwMDAwMDI4Q0EKKzoxMDQ4NDAwMDAwMjAxNjJEMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDYKKzoxMDQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwRUMKKzoxMDQ4NjAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDQ4NzAwMDAwMjA0ODAxMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMTYKKzoxMDQ4ODAwMDAwMDAwMDAwMDAwMDAwMDQwMDMwMTIyNDAwMDAwMDAwQkUKKzoxMDQ4OTAwMDAwMDAwMDAwMDAyRjAwNjQwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDQ4QTAwMDBDQzAwMDAwMDAwMDA2MTIwMDAwMDAwMzAwMjgxQTIyQkQKKzoxMDQ4QjAwMDAwMDAwMDAwMDAwMDAwMDgwMDIyMTIyMjAwMDAwMDAwOUEKKzoxMDQ4QzAwMEZGRkZGMDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMDQ4RDAwMDAwMjkxMEM0MDAwMDAwMDAwMDAwMDAyNzAwNDAzNjI0MUEKKzoxMDQ4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwNDgKKzoxMDQ4RjAwMDAwMDAwMDAwMUFDMDAwMDAwMDAwMDYxNDlGMDAwMDAwMjUKKzoxMDQ5MDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExNzkKKzoxMDQ5MTAwMDAwMDAwMDAwMDAwMDAwMDAxQUUwMDAwMDAwMDAwNjE3ODAKKzoxMDQ5MjAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDQ5MzAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMTAwMDAwNjAwNDExODcKKzoxMDQ5NDAwMDAwMDAwMkZFMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMzIKKzoxMDQ5NTAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDE5RjAwMDAyMjVDQzAKKzoxMDQ5NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExNTYKKzoxMDQ5NzAwMDAwMDAwMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwNEEKKzoxMDQ5ODAwMDAwMDAwMDFCMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDRjYKKzoxMDQ5OTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMjgKKzoxMDQ5QTAwMDAwMDAwMDAwMDAwMUExRkRDMDIwNDQxMTAwMDAwMDAwMzMKKzoxMDQ5QjAwMDAwMDAwMDI5MDAyMDFFMkQwMDAwMDAwMDAwMDAwMDEwNTMKKzoxMDQ5QzAwMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAyQzAwMjAyMjJERTUKKzoxMDQ5RDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwNjcKKzoxMDQ5RTAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDQ5RjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyQTAwMjAyMjJEQTUKKzoxMDRBMDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMzYKKzoxMDRBMTAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDRBMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyQjAwMjAxRTJENzcKKzoxMDRBMzAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwRkYKKzoxMDRBNDAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDRBNTAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDRBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDRBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMDRBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDRBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDRBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMDRBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDRBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDRBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDRBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDRCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMDRCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDRCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDRCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDRCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDRCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDRCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDRCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDRCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDRCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDRCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDRCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMDRCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDRCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDRDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMDRDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDRDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDRDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDRDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDRDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDRDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDRDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDRDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMDRDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDRDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDRDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDRDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDRDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDREMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDREMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDREMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDRENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDRENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDRENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDRENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDREODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDREOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDREQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDREQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDREQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDRERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDRFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDRFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMDRFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDRFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDRFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDRFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDRFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDRFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDRFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDRFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDRFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDRFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDRFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDRFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDRGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDRGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDRGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDRGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDRGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDRGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDRGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDRGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDRGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDRGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDRGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDRGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDRGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDRGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDUwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDUwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDUwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDUwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDUwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDUwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDUwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDUwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDUwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDUwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDUwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDUwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDUxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDUxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDUxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDUxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDUxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDUxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDUxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDUxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDUxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDUxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDUxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDUxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDUyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDUyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDUyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDUyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDUyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDUyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDUyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDUyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDUyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDUyQjAwMDAxMzMwNEVGMDU5QjAyMzkwMDAwMDAwMDAxQjAwMTU5RTEKKzoxMDUyQzAwMDA0MjUwNTlCMDAwMDAwMDAwMjEyMDFGNjAyMzkwMTQyOEMKKzoxMDUyRDAwMDAwMDAwMDAwMDIxMDAyMkUwMjg5MDIyQTAwMDAwMDAwRDUKKzoxMDUyRTAwMDAzQzIwNTlCMDU5QjA1OUIwMDAwMDAwMDA1Q0QwNUNFNzQKKzoxMDUyRjAwMDAzMDgwNTlCMDAwMDAwMDAwNTlCMDVBMDAzMDkwMzI5ODYKKzoxMDUzMDAwMDAwMDAwMDAwMDMxMzAyNkIwMzJCMDMxRDAwMDAwMDAwQ0MKKzoxMDUzMTAwMDA1OUIwNTlCMDU5QjA1OUIwMDAwMDAwMDA1OUIwNTJDM0MKKzoxMDUzMjAwMDA1OUIwNTlCMDAwMDAwMDAwM0E1MDU5QjA0QTIwMzJEMUYKKzoxMDUzMzAwMDAwMDAwMDAwMDQ4MTA0MzMwNDIzMDU5QjAwMDAwMDAwRUEKKzoxMDUzNDAwMDA0QkIwNEVEMDQyNzA0QzgwMDAwMDAwMDA0MzMwNEY0ODcKKzoxMDUzNTAwMDAzM0EwMzY1MDAwMDAwMDAwNTlCMDU5QjA1OUIwNTlCMjgKKzoxMDUzNjAwMDAwMDAwMDAwMDU5QjA1OUIwNTlCMDU5QjAwMDAwMDAwQkQKKzoxMDUzNzAwMDA1OUIwNTlCMDVCOTA1QTIwMDAwMDAwMDA1OUIwNTlCNDgKKzoxMDUzODAwMDAwMDcwNTlCMDAwMDAwMDAwNTlCMDU5QjA1OUIwNTlCRjYKKzoxMDUzOTAwMDAwMDAwMDAwMDU5QjA1OUIwNTlCMDU5QjAwMDAwMDAwOEQKKzoxMDUzQTAwMDAzRTMwM0Q4MDNGMzAzRjEwMDAwMDAwMDAzRjkwM0Y1NUUKKzoxMDUzQjAwMDAzRjcwM0ZCMDAwMDAwMDAwNDA3MDQwMzA0MEYwNDBCQzEKKzoxMDUzQzAwMDAwMDAwMDAwMDQxNzA0MTMwNDFGMDQxQjAwMDAwMDAwNjkKKzoxMDUzRDAwMDA1OUIwNTlCMDU5QjA1OUIwMDAwMDAwMDA1OUIwNTlCMEQKKzoxMDUzRTAwMDA1OUIwNTlCMDAwMDAwMDAwNTlCMDU5QjA1OUIwNTlCRkQKKzoxMDUzRjAwMDAwMDAwMDAwMDAwMjA2MDAwNjE5MDAwNjAwMDAwMDAwODAKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUjYwMF9wZnAuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUjYwMF9wZnAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzNjEwOAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SNjAwX3BmcC5iaW4uaWhleApAQCAtMCwwICsxLDE0NSBAQAorOjEwMDAwMDAwMDBENDAwNzEwMEQ0MDA3MjAwQ0EwNDAwMDBBMDAwMDBGNworOjEwMDAxMDAwMDA3RTgyOEIwMDgwMDAwMzAwQ0EwNDAwMDBENDQwMUVEMgorOjEwMDAyMDAwMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEJDQgorOjEwMDAzMDAwMDBDNDE4MzgwMENBMjQwMDAwQ0EyODAwMDA5NTgxQTgwRQorOjEwMDA0MDAwMDBDNDFDM0EwMEMzQzAwMDAwQ0EwODAwMDBDQTBDMDA2QgorOjEwMDA1MDAwMDA3Qzc0NEIwMEMyMDAwNTAwOTlDMDAwMDBDNDFDM0EyQgorOjEwMDA2MDAwMDA3Qzc0NEMwMEMwRkZGMDAwMDQyQzA0MDAzMDkwMDJBRgorOjEwMDA3MDAwMDA3RDI1MDAwMDM1MTQwMjAwN0QzNTBCMDAyNTU0MDM1QQorOjEwMDA4MDAwMDA3Q0Q1ODAwMDI1OUMwMzAwOTVDMDA0MDBENTAwMUI5MgorOjEwMDA5MDAwMDA3RUREQzEwMDdEOUQ4MDAwRDY4MDFCMDBENTgwMUJDOQorOjEwMDBBMDAwMDBENDQwMUUwMEQ1NDAxRTAwRDY0MDFFMDBENjgwMUU0MworOjEwMDBCMDAwMDBENDgwMUUwMEQ0QzAxRTAwOTc4M0Q0MDBENUMwMUU3QgorOjEwMDBDMDAwMDBDQTA4MDAwMDgwMDAxQjAwQ0EwQzAwMDBFNDAxMUVFQQorOjEwMDBEMDAwMDBENDAwMUUwMDgwMDAwRDAwQzQxODM4MDBFNDAxM0U2QQorOjEwMDBFMDAwMDBENDAwMUUwMDgwMDAwRDAwQzQxODM4MDBENDQwMUU0QgorOjEwMDBGMDAwMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEJGQgorOjEwMDEwMDAwMDBFNDAxMUUwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUVCQworOjEwMDExMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxM0VDMworOjEwMDEyMDAwMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDBEMQorOjEwMDEzMDAwMDBBMDAwMDAwMDdFODI4QjAwQ0ExODAwMDBENDQwMUU4MAorOjEwMDE0MDAwMDBENTgwMUUwMDgwMDA1NDAwRDQwMDczMDBENDQwMUVFRgorOjEwMDE1MDAwMDBDQTA4MDAwMENBMEMwMDAwQ0ExMDAwMDBENDgwMTlCMAorOjEwMDE2MDAwMDBENEMwMTgwMEQ1MDAxNzAwRDQ4MDFFMDBENEMwMUVEMworOjEwMDE3MDAwMDBENTAwMUUwMEUyMDAxRTAwQ0EwNDAwMDBBMDAwMDAxRQorOjEwMDE4MDAwMDA3RTgyOEIwMENBMDgwMDAwRDQ4MDYwMDBENDQwMUUyQworOjEwMDE5MDAwMDA4MDAwMDIwMEQ0ODAxRTAwQ0EwODAwMDBENDgwNjFFNAorOjEwMDFBMDAwMDBENDQwMUUwMDgwMDAwMjAwRDQ4MDFFMDBDQTA4MDA1NworOjEwMDFCMDAwMDBDQTBDMDAwMEQ0NDAxRTAwRDQ4MDE2MDBENEMwMTYyMworOjEwMDFDMDAwMDBENDgwMUUwMDgwMDFCOTAwRDRDMDFFMDBDNjA4M0VDNQorOjEwMDFEMDAwMDBDQTBDMDAwMENBMTAwMDAwOTQ4MDA0MDBDQTE0MDA3OQorOjEwMDFFMDAwMDBFNDIwRjMwMEQ0MjAxMzAwRDU2MDY1MDBENEUwMUNBNworOjEwMDFGMDAwMDBENTIwMUMwMEQ1NjAxQzAwODAwMDAyMDAwNjIwMDFGNAorOjEwMDIwMDAwMDBDNjA4M0UwMENBMEMwMDAwQ0ExMDAwMDA5NDgzRjcyNAorOjEwMDIxMDAwMDBDQTE0MDAwMEU0MjBGMzAwODAwMDdBMDBENDIwMTMwOAorOjEwMDIyMDAwMDBDNjA4M0UwMENBMEMwMDAwQ0ExMDAwMDA5ODgzRUYwOAorOjEwMDIzMDAwMDBDQTE0MDAwMEQ0MDA2NDAwODAwMDhFMDAwMDAwMDA5QQorOjEwMDI0MDAwMDBDNDE0MzIwMEM2MTgzRTAwQzQwODJGMDA5NTQwMDVCMworOjEwMDI1MDAwMDBDNDBDMzAwMEQ0NDAxRTAwODAwMDAyMDBFRTAwMUVERQorOjEwMDI2MDAwMDA5NTgzRjUwMEM0MTAzMTAwRDQ0MDMzMDBENTIwNjVEQgorOjEwMDI3MDAwMDBENEEwMUMwMEQ0RTAxQzAwRDUyMDFDMDBENDAwNzNDNgorOjEwMDI4MDAwMDBFNDAxNUUwMEQ0MDAxRTAwODAwMUI5MDAwNjIwMDFEOAorOjEwMDI5MDAwMDAwQTIwMDEwMEQ2MDA3NDAwQzQwODM2MDBDNjEwNDBEMQorOjEwMDJBMDAwMDA5ODgwMDcwMENDMzgzNTAwOTUwMTBGMDBENDAwMUY1RQorOjEwMDJCMDAwMDBENDYwNjIwMDgwMDAwMjAwRDQyMDYyMDBDQzE0MzNCRAorOjEwMDJDMDAwMDA4NDAxQkMwMEQ0MDA3MDAwRDU0MDFFMDA4MDAwMDJGNAorOjEwMDJEMDAwMDBFRTAwMUUwMENBMEMwMDAwQ0ExMDAwMDBENEMwMUFCNAorOjEwMDJFMDAwMDA4NDAxQkMwMEQ1MDAxQTAwQ0MwNDQzMDAzNTEwMUY2NworOjEwMDJGMDAwMDAyQzk0MDEwMDdEMDk4QjAwOTg0MDA1MDA3RDE1Q0JGMgorOjEwMDMwMDAwMDBENDAwMUEwMDgwMDFCOTAwRDQwMDZEMDAzNDQ0MDEwQgorOjEwMDMxMDAwMDBDQzBDNDQwMDk4NDAzQTAwQ0MyQzQ2MDA5NTgwMDQ1OAorOjEwMDMyMDAwMDBDQzA0NDUwMDgwMDFCOTAwRDQwMDFBMDBENEMwMUFFMgorOjEwMDMzMDAwMDAyODI4MDEwMDg0MDBGMzAwQ0MxMDAzMDA5ODgwMUJFMworOjEwMDM0MDAwMDAwNDM4MEMwMDg0MDBGMzAwQ0MxMDAzMDA5ODgwMTdFMAorOjEwMDM1MDAwMDAwNDM4MDgwMDg0MDBGMzAwQ0MxMDAzMDA5ODgwMTNEOAorOjEwMDM2MDAwMDAwNDM4MDQwMDg0MDBGMzAwQ0MxMDAzMDA5ODgwMTRDQgorOjEwMDM3MDAwMDBDQzEwNDcwMDlBODAwOTAwQ0MxNDQ4MDA5ODQwREE1RAorOjEwMDM4MDAwMDBENDAwNkQwMENDMTg0NDAwRDUwMDFBMDBENTQwMUFFNgorOjEwMDM5MDAwMDA4MDAwQ0MwMEQ1ODAxQTAwOTZDMEQzMDBENDAwNkQzOAorOjEwMDNBMDAwMDA4MDAxQjkwMEQ0MDA2RTAwOUFDMDAzMDBENDAwNkQzMworOjEwMDNCMDAwMDBENDAwNkUwMDgwMDAwMjAwRUMwMDdGMDA5QUMwQ0FFQQorOjEwMDNDMDAwMDBENDAwNkQwMDgwMDFCOTAwRDQwMDZFMDBDQzE0MDM4RAorOjEwMDNEMDAwMDBDQzE4MDMwMENDMUMwMzAwN0Q5MTAzMDA3REQ1ODM2NQorOjEwMDNFMDAwMDA3RDE5MEMwMDM1Q0MxRjAwMzU3MDFGMDA3Q0YwQ0I1MAorOjEwMDNGMDAwMDA3Q0QwOEIwMDg4MDAwMDAwN0U4RThCMDA5NUMwMDRBRQorOjEwMDQwMDAwMDBENDAwNkUwMDgwMDFCOTAwRDQwMDFBMDBENEMwMUFENAorOjEwMDQxMDAwMDBDQzA4MDMwMENDMEMwMzAwQ0MxMDAzMDBDQzE0MDM2OAorOjEwMDQyMDAwMDBDQzE4MDMwMENDMUMwMzAwQ0MyNDAzMDBDQzI4MDMxMAorOjEwMDQzMDAwMDAzNUM0MUYwMDM2QjAxRjAwN0M3MDRCMDAzNEYwMUYyNQorOjEwMDQ0MDAwMDA3QzcwNEIwMDM1NzAxRjAwN0M3MDRCMDA3RDg4ODFGNAorOjEwMDQ1MDAwMDA3RENDQzEwMDdFNTEwMTAwN0U5NTQxMDA3QzkwODJFMAorOjEwMDQ2MDAwMDA3Q0Q0QzIwMDdDODQ4QjAwOUFDMDAzMDA3QzhDOEJGRgorOjEwMDQ3MDAwMDAyQzg4MDEwMDk4ODA5QzAwRDQwMDZEMDA5ODQwOUE2MAorOjEwMDQ4MDAwMDBENDAwNkUwMENDMDg0NzAwQ0MwQzQ4MDBDQzEwNDRDRgorOjEwMDQ5MDAwMDBENDgwMUEwMEQ0QzAxQTAwODAwMTA0MDBENTAwMUFDQworOjEwMDRBMDAwMDBDQzA4MzIwMEQ0MDAzMjAwOTQ4MkQ4MDBDQTBDMDA3QworOjEwMDRCMDAwMDBENDQwMUUwMDgwMDAwMjAwRDQwMDFFMDBFNDAxMUU5MworOjEwMDRDMDAwMDBENDAwMUUwMENBMDgwMDAwQ0EwQzAwMDBDQTEwMDBCOAorOjEwMDREMDAwMDBENDQwMUUwMENBMTQwMDAwRDQ4MDFFMDBENEMwMUVFOAorOjEwMDRFMDAwMDBENTAwMUUwMEQ1NDAxRTAwRDU0MDM0MDA4MDAwMDIxQgorOjEwMDRGMDAwMDBFRTAwMUUwMDI4MDQwNDAwRTIwMDFBMDBFMjAwMUFDOAorOjEwMDUwMDAwMDBENDQwMUEwMENBMzgwMDAwQ0MwODAzMDBDQzBDMDMwOQorOjEwMDUxMDAwMDBDQzBDMDMwMENDMEMwMzAwOTg4MkJDMDAwMDAwMDA0RgorOjEwMDUyMDAwMDA4NDAxQkMwMEQ3ODA2RjAwODAwMDAyMDBFRTAwMUYzNQorOjEwMDUzMDAwMDBDQTA0MDAwMEMyRkYwMDAwQ0MwODM0MDBDMTNGRkYyNQorOjEwMDU0MDAwMDA3Qzc0Q0IwMDdDQzkwQjAwN0QwMTBGMDA5OTAyQUZDOQorOjEwMDU1MDAwMDA3QzczOEIwMDg0MDFCQzAwRDc4MDZGMDA4MDAwMDI5OAorOjEwMDU2MDAwMDBFRTAwMUYwMENBMDgwMDAwMjgxOTAwMDA3RDg5OEJEQQorOjEwMDU3MDAwMDA5NTgwMTQwMDI4MTQwNDAwQ0EwQzAwMDBDQTEwMDA2MgorOjEwMDU4MDAwMDBDQTFDMDAwMENBMjQwMDAwRTIwMDFGMDBENEMwMUFFOAorOjEwMDU5MDAwMDBENTAwMUEwMEQ1NDAxQTAwQ0MxODAzMDBDQzJDMDM1QgorOjEwMDVBMDAwMDBDQzJDMDMwMENDMkMwMzAwN0RBNThCMDA3RDlDNDc0OAorOjEwMDVCMDAwMDA5ODQyOTYwMDAwMDAwMDAwODAwMTY0MDBENEMwMUEzOAorOjEwMDVDMDAwMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAyMDBFRTAwMUVGOQorOjEwMDVEMDAwMDBFNDAxMUUwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUVFOAorOjEwMDVFMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxM0VFRgorOjEwMDVGMDAwMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDBGRAorOjEwMDYwMDAwMDBBMDAwMDAwMDdFODI4QjAwQ0EwODAwMDAyNDhDMDYzNworOjEwMDYxMDAwMDAwQ0NDMDYwMDk4QzAwNjAwQ0MxMDQ5MDA5OTAwMDREQworOjEwMDYyMDAwMDBENDAwNzEwMEU0MDExRTAwRDQwMDFFMDBENDQwMUU1RQorOjEwMDYzMDAwMDBENDgwMUUwMDgwMDAwMjAwRUUwMDFFMDBDQTA4MDBFOAorOjEwMDY0MDAwMDBDQTBDMDAwMDM0RDAxODAwMjUxMDAxMDA5NTAwMUZDRQorOjEwMDY1MDAwMDBDMTdGRkYwMENBMTAwMDAwQ0ExNDAwMDBDQTE4MDBDMQorOjEwMDY2MDAwMDBENDgwMUQwMEQ0QzAxRDAwN0RCMThCMDBDMTQyMDJBQQorOjEwMDY3MDAwMDBDMkMwMDEwMEQ1ODAxRDAwMzREQzBFMDA3RDVENEM0MQorOjEwMDY4MDAwMDA3RjczNEMwMEQ3NDAxRTAwRDUwMDFFMDBENTQwMUVEMQorOjEwMDY5MDAwMDBDMTQyMDAwMEMyQzAwMDAwMDk5QzAxMDAzMURDMTAxMgorOjEwMDZBMDAwMDA3RjVGNEMwMDdGNzM0QzAwN0Q4MzgwMDBENTgwNkY5RQorOjEwMDZCMDAwMDBENTgwNjYwMEQ3NDAxRTAwRUMwMDVFMDBDODI0MDIxMgorOjEwMDZDMDAwMDA4MDAxQjkwMEQ2MDA3NDAwRDQ0MDFFMDBENDgwMUUwMgorOjEwMDZEMDAwMDBENEMwMUUwMDgwMDAwMjAwRUUwMDFFMDA4MDAwMDI1OAorOjEwMDZFMDAwMDBFRTAwMUYwMEQ0MDAxRjAwODAwMDAyMDBENDAwMUY5NQorOjEwMDZGMDAwMDBENDAwMUYwMDg4MDAwMDAwRDQwMDFGMDAwMDAwMDA4QworOjEwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwMDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwMDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwMDgwMDAwMDAwMTAxNzQwMDAyMDE3QjAwMDMwMDkwMDAwNDAwODBERAorOjEwMDgxMDAwMDAwNTAwMDUwMDA2MDA0MDAwMDcwMDMzMDAwODAxMkYxNgorOjEwMDgyMDAwMDAwOTAwNDcwMDBBMDAzNzAwMTAwMUI3MDAxNzAwQTRCNAorOjEwMDgzMDAwMDAyMjAxM0QwMDIzMDE0QzAwMjAwMEI1MDAyNDAxMjhDNgorOjEwMDg0MDAwMDAyNzAwNEUwMDI4MDA2QjAwMkEwMDYxMDAyQjAwNTM5NworOjEwMDg1MDAwMDAyRjAwNjYwMDMyMDA4ODAwMzQwMTgyMDAzQzAxNTlGQworOjEwMDg2MDAwMDAzRjAwNzMwMDQxMDE4RjAwNDQwMTMxMDA1NTAxNzZDMworOjEwMDg3MDAwMDA1NjAxN0QwMDYwMDAwQzAwNjEwMDM1MDA2MjAwMzkwNworOjEwMDg4MDAwMDA2MzAwMzkwMDY0MDAzOTAwNjUwMDM5MDA2NjAwMzlGMgorOjEwMDg5MDAwMDA2NzAwMzkwMDY4MDAzQjAwNjkwMDQyMDA2QTAwNDlCNworOjEwMDhBMDAwMDA2QjAwNDkwMDZDMDA0OTAwNkQwMDQ5MDA2RTAwNDk3MgorOjEwMDhCMDAwMDA2RjAwNDkwMDczMDFCNzAwMDAwMDA3MDAwMDAwMDc0NworOjEwMDhDMDAwMDAwMDAwMDcwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDcwQworOjEwMDhEMDAwMDAwMDAwMDcwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDdGQworOjEwMDhFMDAwMDAwMDAwMDcwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDdFQworOjEwMDhGMDAwMDAwMDAwMDcwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDdEQworOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SUzYwMF9jcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SUzYwMF9jcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg5NTAxCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JTNjAwX2NwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTMwIEBACis6MTAwMDAwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMDA0MDAwRTAwMEFFCis6MTAwMDEwMDAwMDAwMDAwODAwMDAwMEEwMDAwMDAwMDgwMDAwMDBBNDhDCis6MTAwMDIwMDAwMDAwMDAwMDRBNTU0QjRBMDAwMDAwMDA0QTRBNDQ2NzVECis6MTAwMDMwMDAwMDAwMDAwMDU1NTI2Rjc1MDAwMDAwMDA0QTdFN0Q2NThCCis6MTAwMDQwMDAwMDAwMDAwMDRBRTc0QUY2MDAwMDAwMDA0QUQzNEE0QThFCis6MTAwMDUwMDAwMDAwMDAwMEQ2ODk4OTg5MDAwMDAwMDBDRDRBRERDRjZDCis6MTAwMDYwMDAwMDAwMDAwMDhFQkU0QUUyMDAwMDAwMDBDMzhBOEE4QUI3Cis6MTAwMDcwMDAwMDAwMDAwMDRBMEY4Q0M4MDAwMDAwMDQwMDBDQTAwMDIzCis6MTAwMDgwMDAwMDAwMDAzODAwMEQwMDEyMDAwMDAwMDQwMDAwRThCNDc5Cis6MTAwMDkwMDAwMDAwMDAzODAwMEQwMDE0MDAwMDAwMDQwMDAwRThCNjY1Cis6MTAwMEEwMDAwMDAwMDAzODAwMEQwMDE2MDAwMDAwMDQwMDAwRTg1NEI1Cis6MTAwMEIwMDAwMDAwMDAzODAwMEQwMDE4MDAwMDAwMDQwMDAwRTg1NUEyCis6MTAwMEMwMDAwMDAwMDAzODAwMEQwMDFBMDAwMDAwMDQwMDAwRTg1NjhGCis6MTAwMEQwMDAwMDAwMDAzODAwMEQwMDFDMDAwMDAwMDQwMDAwRTg1NzdDCis6MTAwMEUwMDAwMDAwMDAzODAwMEQwMDFFMDAwMDAwMDQwMDAwRTgyNDlECis6MTAwMEYwMDAwMDAwMDAzODAwMEQwMDIwMDAwMDAwMDQwMDAwRTgyNThBCis6MTAwMTAwMDAwMDAwMDAzODAwMEQwMDIyMDAwMDAwMDQwMDAwRTgzMDZDCis6MTAwMTEwMDAwMDAwMDAzODAwMEQwMDI0MDAwMDAwMDQwMDAwRjBDMEMyCis6MTAwMTIwMDAwMDAwMDAzODAwMEQwMDI2MDAwMDAwMDQwMDAwRjBDMUFGCis6MTAwMTMwMDAwMDAwMDAzODAwMEQwMDI4MDAwMDAwMDQwMDAwRjA0MTFECis6MTAwMTQwMDAwMDAwMDAzODAwMEQwMDJBMDAwMDAwMDQwMDAwRjE4NEM3Cis6MTAwMTUwMDAwMDAwMDAzODAwMEQwMDJDMDAwMDAwMDQwMDAwRjE4NUI0Cis6MTAwMTYwMDAwMDAwMDAzODAwMEQwMDJFMDAwMDAwMDQwMDAwRjE4NkExCis6MTAwMTcwMDAwMDAwMDAzODAwMEQwMDMwMDAwMDAwMDQwMDAwRjE4NzhFCis6MTAwMTgwMDAwMDAwMDAzODAwMEQwMDMyMDAwMDAwMDQwMDAwRjE4MDgzCis6MTAwMTkwMDAwMDAwMDAzODAwMEQwMDM0MDAwMDAwMDQwMDAwRjM5MzVDCis6MTAwMUEwMDAwMDAwMDAzODAwMEQwMDM2MDAwMDAwMDQwMDAwRjM4QTUzCis6MTAwMUIwMDAwMDAwMDAzODAwMEQwMDM4MDAwMDAwMDQwMDAwRjM4RTNECis6MTAwMUMwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDQwMTQwQTAwMDNECis6MTAwMUQwMDAwMDAwMDAxODAwMDAwMDQzMDAwMDAwMDQwMENDRTgwMDBDCis6MTAwMUUwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDlCCis6MTAwMUYwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDhCCis6MTAwMjAwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDdBCis6MTAwMjEwMDAwMDAwMDAwODAwMDAwMDNBMDAwMDAwMDAwMDAwQTAwMEZDCis6MTAwMjIwMDAwMDAwMDAwNDIwMDA0NTFEMDAwMDAwMDQwMDAwRTU4MERGCis6MTAwMjMwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDQwODAwNDU4MDc3Cis6MTAwMjQwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDgwMDAwMDA0N0U5Cis6MTAwMjUwMDAwMDAwMDAwMDAwMDBBMDAwMDAwMDAwMDQwMDBDMjAwMENFCis6MTAwMjYwMDAwMDAwMDAwNDAwMDBFNTBFMDAwMDAwMDQwMDAzMjAwMDcwCis6MTAwMjcwMDAwMDAwMDAyODAwMDIyMDUxMDAwMDAwMjQwMDAwMDA1MTZFCis6MTAwMjgwMDAwMDAwMDAwNDA4MDA0NTBGMDAwMDAwMDgwMDAwQTA0QjFCCis6MTAwMjkwMDAwMDAwMDAwNDAwMDBFNTY1MDAwMDAwMDQwMDAwRTU2NkMxCis6MTAwMkEwMDAwMDAwMDAwODAwMDAwMDUyMDAwMDAwMDQwM0NDQTVCNEM4Cis6MTAwMkIwMDAwMDAwMDAwNDA1NDMyMDAwMDAwMDAwMDQwMDAyMjAwMEFDCis6MTAwMkMwMDAwMDAwMDAzMDRDQ0NFMDVFMDAwMDAwMDQwODI3NDU2NUNCCis6MTAwMkQwMDAwMDAwMDAzMDAwMDAwMDVFMDAwMDAwMDQwODAwNDU2NERCCis6MTAwMkUwMDAwMDAwMDAwNDAwMDBFNTY2MDAwMDAwMDgwMDAwMDA1NTYyCis6MTAwMkYwMDAwMDAwMDAxMDAwODAyMDYxMDAwMDAwMDQwMDIwMjAwMEE5Cis6MTAwMzAwMDAwMDAwMDAwNDAwMUIwMEZGMDAwMDAwMTAwMTAwMDA2NDVBCis6MTAwMzEwMDAwMDAwMDAwNDAwMUYyMDAwMDAwMDAwMDQwMDFDMDBGRjdCCis6MTAwMzIwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMzAwMDAwMDA3MjFGCis6MTAwMzMwMDAwMDAwMDAwODAwMDAwMDU1MDAwMDAwMDQwMDAwRTU3NjAxCis6MTAwMzQwMDAwMDAwMDAwNDAwMDBFNTc3MDAwMDAwMDQwMDAwRTUwRTU2Cis6MTAwMzUwMDAwMDAwMDAwNDAwMDBFNTBGMDAwMDAwMDQwMTQwQTAwMEMwCis6MTAwMzYwMDAwMDAwMDAxODAwMDAwMDY5MDAwMDAwQzIwMEMwRTVGOUFDCis6MTAwMzcwMDAwMDAwMDAwODAwMDAwMDY5MDAwMDAwMDQwMDE0RTUwRTAxCis6MTAwMzgwMDAwMDAwMDAwNDAwNDBFNTBGMDAwMDAwMDgwMEMwMDA2QzAxCis6MTAwMzkwMDAwMDAwMDAwNDAwMDBFNTcwMDAwMDAwMDQwMDAwRTU3MUFBCis6MTAwM0EwMDAwMDAwMDAwQzAwMDBFNTcyMDAwMDAwMDQwMDAwQTAwMDQ2Cis6MTAwM0IwMDAwMDAwMDAwNDAxNDBBMDAwMDAwMDAwMDQwMDAwRTU2ODA3Cis6MTAwM0MwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMTgwMDAwMDA3NjZGCis6MTAwM0QwMDAwMDAwMDAwNDAwMEIwMDAwMDAwMDAwMDQxOEMwRTU2MkVCCis6MTAwM0UwMDAwMDAwMDAwODAwMDAwMDc4MDAwMDAwMDgwMEMwMDA3NzRFCis6MTAwM0YwMDAwMDAwMDAwNDAwMDcwMEQ1MDAwMDAwMzgwMDAwMDA4NDYxCis6MTAwNDAwMDAwMDAwMDAzMDAwMENBMDg2MDAwMDAwMDQwODAwNDVCQjdFCis6MTAwNDEwMDAwMDAwMDAzMDAwMEMyMDg3MDAwMDAwMDAwODAwRTVCQzUwCis6MTAwNDIwMDAwMDAwMDAwNDAwMDBFNUJCMDAwMDAwMDAwMDAwRTVCQzg3Cis6MTAwNDMwMDAwMDAwMDAwQzAwMTIwMDAwMDAwMDAwMDQwMDEyMDAwMDg4Cis6MTAwNDQwMDAwMDAwMDAwQzAwMUIwMDAyMDAwMDAwMDQwMDAwQTAwMERGCis6MTAwNDUwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDAwMDAwRTgwMEE3Cis6MTAwNDYwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDAwMDAwRTgyRTY5Cis6MTAwNDcwMDAwMDAwMDAwNDAyQ0NBMDAwMDAwMDAwMDQwMDE0MDAwMEYyCis6MTAwNDgwMDAwMDAwMDAwNDAwMENFMUNDMDAwMDAwMDQwNTBERTFDREVCCis6MTAwNDkwMDAwMDAwMDAwNDAwNDAwMDAwMDAwMDAwMTgwMDAwMDA5NjZBCis6MTAwNEEwMDAwMDAwMDAwNDAwQzBBMDAwMDAwMDAwMDgwMDAwMDA5MzRECis6MTAwNEIwMDAwMDAwMDAyMDAwMDAwMDk4MDAwMDAwMDA0MjAwRTAwMDYyCis6MTAwNEMwMDAwMDAwMDAzODAwMDAwMDlGMDAwMDAwMDQwMDBDQTAwMEE1Cis6MTAwNEQwMDAwMDAwMDAwNDAwMTQwMDAwMDAwMDAwMDQwMDBDMjAwMEQ0Cis6MTAwNEUwMDAwMDAwMDAwNDAwMTYwMDAwMDAwMDAwMDQ3MDBDRTAwMDkyCis6MTAwNEYwMDAwMDAwMDAwODAwMTQwMDlCMDAwMDAwMDA0MDAwRTAwMDI1Cis6MTAwNTAwMDAwMDAwMDAwNDAyNDAwMDAwMDAwMDAwMDQ0MDBFRTAwMDczCis6MTAwNTEwMDAwMDAwMDAwNDAyNDAwMDAwMDAwMDAwMDA0MDAwRTAwMDc1Cis6MTAwNTIwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMDQwMjQwRTUxQjU1Cis6MTAwNTMwMDAwMDAwMDAwNTAwODBFNTBBMDAwMDAwMDUwMDgwRTUwQkQyCis6MTAwNTQwMDAwMDAwMDAwNDAwMjIwMDAwMDAwMDAwMDQwMDA3MDBENUE1Cis6MTAwNTUwMDAwMDAwMDAzODAwMDAwMEIyMDAwMDAwMzAwMDBDMjA4N0NFCis6MTAwNTYwMDAwMDAwMDAwNTA4ODBFNUJEMDAwMDAwMzAwMDBDMjA4NjdBCis6MTAwNTcwMDAwMDAwMDAwNTA4MDBFNUJCMDAwMDAwMzAwMDBDMjA4N0VCCis6MTAwNTgwMDAwMDAwMDAwNTA4ODBFNUJDMDAwMDAwMDgwMDAwMDBCNTgwCis6MTAwNTkwMDAwMDAwMDAwNTAwODBFNUJEMDAwMDAwMDUwMDAwRTVCQjhGCis6MTAwNUEwMDAwMDAwMDAwNTAwODBFNUJDMDAwMDAwMDQwMDIxMDAwMDAwCis6MTAwNUIwMDAwMDAwMDAwNDAyODAwMDAwMDAwMDAwMTgwMEMwMDBCOTI0Cis6MTAwNUMwMDAwMDAwMDA0MDQxODBFMDAwMDAwMDAwMjQwMDAwMDBCQjZCCis6MTAwNUQwMDAwMDAwMDAwQzAxMDAwMDAwMDAwMDAwMEMwMTAwRTUxREZGCis6MTAwNUUwMDAwMDAwMDAwNDAwMDA0NUJCMDAwMDAwMDgwMDAwODBCNUNBCis6MTAwNUYwMDAwMDAwMDAwNDAwMDBGM0NFMDAwMDAwMDQwMTQwQTAwMDUxCis6MTAwNjAwMDAwMDAwMDAwNDAwQ0MyMDAwMDAwMDAwNDAwOEMwNTNDRkQwCis6MTAwNjEwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDQwMDAwRjNEMjkxCis6MTAwNjIwMDAwMDAwMDAwNDAxNDBBMDAwMDAwMDAwMDQwMENDMjAwMEY1Cis6MTAwNjMwMDAwMDAwMDA0MDA4QzA1M0QzMDAwMDAwMDAwMDAwODAwMDBDCis6MTAwNjQwMDAwMDAwMDAwNDAwMDBGMzlEMDAwMDAwMDQwMTQwQTAwMDMxCis6MTAwNjUwMDAwMDAwMDAwNDAwQ0MyMDAwMDAwMDAwNDAwOEMwNTM5RUIxCis6MTAwNjYwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDQwM0MwMDgzMDBCCis6MTAwNjcwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMDQwMDAwQTAwMEI0Cis6MTAwNjgwMDAwMDAwMDAwNDIwMDA0NUUwMDAwMDAwMDAwMDAwRTVFMTVCCis6MTAwNjkwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDQwMDA3MDBEMjdDCis6MTAwNkEwMDAwMDAwMDAwMDA4MDBFMzk0MDAwMDAwMDAwMDAwMDAwMENCCis6MTAwNkIwMDAwMDAwMDAwNDAwMDBFOEM0MDAwMDAwMDQwMDAwRThDNUQ5Cis6MTAwNkMwMDAwMDAwMDAwNDAwMDBFOEM2MDAwMDAwMDQwMDAwRTkyODYzCis6MTAwNkQwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQUVECis6MTAwNkUwMDAwMDAwMDAwODAwMDAwMEQ2MDAwMDAwMDQwMDAwRTkyODE3Cis6MTAwNkYwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQUNECis6MTAwNzAwMDAwMDAwMDAwODAwMDAwMEREMDAwMDAwMDAwMEUwMDExNjBECis6MTAwNzEwMDAwMDAwMDAwNDAwMDcwMEUxMDAwMDAwMDQwODAwNDAxQzg1Cis6MTAwNzIwMDAwMDAwMDAwNDIwMDA1MEU3MDAwMDAwMDQwMDAwRTAxRDZECis6MTAwNzMwMDAwMDAwMDAwODAwMDAwMEU0MDAwMDAwMDQwMkMwMjAwMEU3Cis6MTAwNzQwMDAwMDAwMDAwNDAwMDYwMDAwMDAwMDAwMzQwMDAwMDBFQjgwCis6MTAwNzUwMDAwMDAwMDAwODAwMDAwMEU4MDAwMDAwMDQwMDAwODAwMDI1Cis6MTAwNzYwMDAwMDAwMDAwMEMwMDBFMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMDQwMDFEMDAxOEQwCis6MTAwN0MwMDAwMDAwMDAwNDAwMUEwMDAxMDAwMDAwMzQwMDAwMDBGQkRCCis6MTAwN0QwMDAwMDAwMDAwODAwMDAwMDRBMDAwMDAwMDgwNTAwQTA0QUQwCis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MDAwMDAwMDFGRgorLyogcHJvZHVjdGlvbiByYWRlb24gdWNvZGUgcjF4eC1yNnh4ICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlM2OTBfY3AuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlM2OTBfY3AuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5NjI3NAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SUzY5MF9jcC5iaW4uaWhleApAQCAtMCwwICsxLDEzMCBAQAorOjEwMDAwMDAwMDAwMDAwMDgwMDAwMDBERDAwMDAwMDA4MDAwMDAwREYyNAorOjEwMDAxMDAwMDAwMDAwMDgwMDAwMDBBMDAwMDAwMDA4MDAwMDAwQTQ4QworOjEwMDAyMDAwMDAwMDAwMDA0QTU1NEI0QTAwMDAwMDAwNEE0QTQ0Njc1RAorOjEwMDAzMDAwMDAwMDAwMDA1NTUyNkY3NTAwMDAwMDAwNEE3RTdENjU4QgorOjEwMDA0MDAwMDAwMDAwMDA0QUQ3NEFGNjAwMDAwMDAwNEFDOTRBNEFBOAorOjEwMDA1MDAwMDAwMDAwMDBDQzg5ODk4OTAwMDAwMDAwQzM0QUQzQzU5NAorOjEwMDA2MDAwMDAwMDAwMDA4RTRBNEE0QTAwMDAwMDAwNEE4QThBOEEzQworOjEwMDA3MDAwMDAwMDAwMDA0QTBGOEM0QTAwMDAwMDA0MDAwQ0EwMDBBMQorOjEwMDA4MDAwMDAwMDAwMzgwMDBEMDAxMjAwMDAwMDA0MDAwMEU4QjQ3OQorOjEwMDA5MDAwMDAwMDAwMzgwMDBEMDAxNDAwMDAwMDA0MDAwMEU4QjY2NQorOjEwMDBBMDAwMDAwMDAwMzgwMDBEMDAxNjAwMDAwMDA0MDAwMEU4NTRCNQorOjEwMDBCMDAwMDAwMDAwMzgwMDBEMDAxODAwMDAwMDA0MDAwMEU4NTVBMgorOjEwMDBDMDAwMDAwMDAwMzgwMDBEMDAxQTAwMDAwMDA0MDAwMEU4NTY4RgorOjEwMDBEMDAwMDAwMDAwMzgwMDBEMDAxQzAwMDAwMDA0MDAwMEU4NTc3QworOjEwMDBFMDAwMDAwMDAwMzgwMDBEMDAxRTAwMDAwMDA0MDAwMEU4MjQ5RAorOjEwMDBGMDAwMDAwMDAwMzgwMDBEMDAyMDAwMDAwMDA0MDAwMEU4MjU4QQorOjEwMDEwMDAwMDAwMDAwMzgwMDBEMDAyMjAwMDAwMDA0MDAwMEU4MzA2QworOjEwMDExMDAwMDAwMDAwMzgwMDBEMDAyNDAwMDAwMDA0MDAwMEYwQzBDMgorOjEwMDEyMDAwMDAwMDAwMzgwMDBEMDAyNjAwMDAwMDA0MDAwMEYwQzFBRgorOjEwMDEzMDAwMDAwMDAwMzgwMDBEMDAyODAwMDAwMDA0MDAwMEYwNDExRAorOjEwMDE0MDAwMDAwMDAwMzgwMDBEMDAyQTAwMDAwMDA0MDAwMEYxODRDNworOjEwMDE1MDAwMDAwMDAwMzgwMDBEMDAyQzAwMDAwMDA0MDAwMEYxODVCNAorOjEwMDE2MDAwMDAwMDAwMzgwMDBEMDAyRTAwMDAwMDA0MDAwMEYxODZBMQorOjEwMDE3MDAwMDAwMDAwMzgwMDBEMDAzMDAwMDAwMDA0MDAwMEYxODc4RQorOjEwMDE4MDAwMDAwMDAwMzgwMDBEMDAzMjAwMDAwMDA0MDAwMEYxODA4MworOjEwMDE5MDAwMDAwMDAwMzgwMDBEMDAzNDAwMDAwMDA0MDAwMEYzOTM1QworOjEwMDFBMDAwMDAwMDAwMzgwMDBEMDAzNjAwMDAwMDA0MDAwMEYzOEE1MworOjEwMDFCMDAwMDAwMDAwMzgwMDBEMDAzODAwMDAwMDA0MDAwMEYzOEUzRAorOjEwMDFDMDAwMDAwMDAwMDQwMDAwRTgyMTAwMDAwMDA0MDE0MEEwMDAzRAorOjEwMDFEMDAwMDAwMDAwMTgwMDAwMDA0MzAwMDAwMDA0MDBDQ0U4MDAwQworOjEwMDFFMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA5QgorOjEwMDFGMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA4QgorOjEwMDIwMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA3QQorOjEwMDIxMDAwMDAwMDAwMDgwMDAwMDAzQTAwMDAwMDAwMDAwMEEwMDBGQworOjEwMDIyMDAwMDAwMDAwMDQyMDAwNDUxRDAwMDAwMDA0MDAwMEU1ODBERgorOjEwMDIzMDAwMDAwMDAwMDQwMDBDRTU4MTAwMDAwMDA0MDgwMDQ1ODA3NworOjEwMDI0MDAwMDAwMDAwMDQwMDBDRTU4MTAwMDAwMDA4MDAwMDAwNDdFOQorOjEwMDI1MDAwMDAwMDAwMDAwMDAwQTAwMDAwMDAwMDA0MDAwQzIwMDBDRQorOjEwMDI2MDAwMDAwMDAwMDQwMDAwRTUwRTAwMDAwMDA0MDAwMzIwMDA3MAorOjEwMDI3MDAwMDAwMDAwMjgwMDAyMjA1MTAwMDAwMDI0MDAwMDAwNTE2RQorOjEwMDI4MDAwMDAwMDAwMDQwODAwNDUwRjAwMDAwMDA4MDAwMEEwNEIxQgorOjEwMDI5MDAwMDAwMDAwMDQwMDAwRTU2NTAwMDAwMDA0MDAwMEU1NjZDMQorOjEwMDJBMDAwMDAwMDAwMDgwMDAwMDA1MjAwMDAwMDA0MDNDQ0E1QjRDOAorOjEwMDJCMDAwMDAwMDAwMDQwNTQzMjAwMDAwMDAwMDA0MDAwMjIwMDBBQworOjEwMDJDMDAwMDAwMDAwMzA0Q0NDRTA1RTAwMDAwMDA0MDgyNzQ1NjVDQgorOjEwMDJEMDAwMDAwMDAwMzAwMDAwMDA1RTAwMDAwMDA0MDgwMDQ1NjREQgorOjEwMDJFMDAwMDAwMDAwMDQwMDAwRTU2NjAwMDAwMDA4MDAwMDAwNTU2MgorOjEwMDJGMDAwMDAwMDAwMTAwMDgwMjA2MTAwMDAwMDA0MDAyMDIwMDBBOQorOjEwMDMwMDAwMDAwMDAwMDQwMDFCMDBGRjAwMDAwMDEwMDEwMDAwNjQ1QQorOjEwMDMxMDAwMDAwMDAwMDQwMDFGMjAwMDAwMDAwMDA0MDAxQzAwRkY3QgorOjEwMDMyMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDMwMDAwMDAwNzIxRgorOjEwMDMzMDAwMDAwMDAwMDgwMDAwMDA1NTAwMDAwMDA0MDAwMEU1NzYwMQorOjEwMDM0MDAwMDAwMDAwMDQwMDAwRTU3NzAwMDAwMDA0MDAwMEU1MEU1NgorOjEwMDM1MDAwMDAwMDAwMDQwMDAwRTUwRjAwMDAwMDA0MDE0MEEwMDBDMAorOjEwMDM2MDAwMDAwMDAwMTgwMDAwMDA2OTAwMDAwMEMyMDBDMEU1RjlBQworOjEwMDM3MDAwMDAwMDAwMDgwMDAwMDA2OTAwMDAwMDA0MDAxNEU1MEUwMQorOjEwMDM4MDAwMDAwMDAwMDQwMDQwRTUwRjAwMDAwMDA4MDBDMDAwNkMwMQorOjEwMDM5MDAwMDAwMDAwMDQwMDAwRTU3MDAwMDAwMDA0MDAwMEU1NzFBQQorOjEwMDNBMDAwMDAwMDAwMEMwMDAwRTU3MjAwMDAwMDA0MDAwMEEwMDA0NgorOjEwMDNCMDAwMDAwMDAwMDQwMTQwQTAwMDAwMDAwMDA0MDAwMEU1NjgwNworOjEwMDNDMDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDE4MDAwMDAwNzY2RgorOjEwMDNEMDAwMDAwMDAwMDQwMDBCMDAwMDAwMDAwMDA0MThDMEU1NjJFQgorOjEwMDNFMDAwMDAwMDAwMDgwMDAwMDA3ODAwMDAwMDA4MDBDMDAwNzc0RQorOjEwMDNGMDAwMDAwMDAwMDQwMDA3MDBDQjAwMDAwMDM4MDAwMDAwODQ2QgorOjEwMDQwMDAwMDAwMDAwMzAwMDBDQTA4NjAwMDAwMDA0MDgwMDQ1QkI3RQorOjEwMDQxMDAwMDAwMDAwMzAwMDBDMjA4NzAwMDAwMDAwMDgwMEU1QkM1MAorOjEwMDQyMDAwMDAwMDAwMDQwMDAwRTVCQjAwMDAwMDAwMDAwMEU1QkM4NworOjEwMDQzMDAwMDAwMDAwMEMwMDEyMDAwMDAwMDAwMDA0MDAxMjAwMDA4OAorOjEwMDQ0MDAwMDAwMDAwMEMwMDFCMDAwMjAwMDAwMDA0MDAwMEEwMDBERgorOjEwMDQ1MDAwMDAwMDAwMDQwMDAwRTgyMTAwMDAwMDAwMDAwMEU4MDBBNworOjEwMDQ2MDAwMDAwMDAwMDQwMDAwRTgyMTAwMDAwMDAwMDAwMEU4MkU2OQorOjEwMDQ3MDAwMDAwMDAwMDQwMkNDQTAwMDAwMDAwMDA0MDAxNDAwMDBGMgorOjEwMDQ4MDAwMDAwMDAwMDQwMDBDRTFDQzAwMDAwMDA0MDUwREUxQ0RFQgorOjEwMDQ5MDAwMDAwMDAwMDQwMDQwMDAwMDAwMDAwMDE4MDAwMDAwOTY2QQorOjEwMDRBMDAwMDAwMDAwMDQwMEMwQTAwMDAwMDAwMDA4MDAwMDAwOTM0RAorOjEwMDRCMDAwMDAwMDAwMjAwMDAwMDA5ODAwMDAwMDAwNDIwMEUwMDA2MgorOjEwMDRDMDAwMDAwMDAwMzgwMDAwMDA5RjAwMDAwMDA0MDAwQ0EwMDBBNQorOjEwMDREMDAwMDAwMDAwMDQwMDE0MDAwMDAwMDAwMDA0MDAwQzIwMDBENAorOjEwMDRFMDAwMDAwMDAwMDQwMDE2MDAwMDAwMDAwMDA0NzAwQ0UwMDA5MgorOjEwMDRGMDAwMDAwMDAwMDgwMDE0MDA5QjAwMDAwMDAwNDAwMEUwMDAyNQorOjEwMDUwMDAwMDAwMDAwMDQwMjQwMDAwMDAwMDAwMDA0NDAwRUUwMDA3MworOjEwMDUxMDAwMDAwMDAwMDQwMjQwMDAwMDAwMDAwMDAwNDAwMEUwMDA3NQorOjEwMDUyMDAwMDAwMDAwMkMwMDEwMDAwMDAwMDAwMDAwMDAwMDQwMDA0RgorOjEwMDUzMDAwMDAwMDAwMDQwODAwNDVDODAwMDAwMDA0MDAyNDAwMDU3NQorOjEwMDU0MDAwMDAwMDAwMDQwODAwNEQwQjAwMDAwMDA0MDAwQzIwMDAxNworOjEwMDU1MDAwMDAwMDAwMDQwMjQwRTUxQjAwMDAwMDA1MDA4MEU1MEFFMQorOjEwMDU2MDAwMDAwMDAwMDUwMDgwRTUwQjAwMDAwMDA0MDAyMjAwMDBGMAorOjEwMDU3MDAwMDAwMDAwMDQwMDA3MDBDQjAwMDAwMDM4MDAwMDAwQjdCNgorOjEwMDU4MDAwMDAwMDAwMzAwMDBDMjA4NzAwMDAwMDA1MDg4MEU1QkQ1OQorOjEwMDU5MDAwMDAwMDAwMzAwMDBDMjA4NjAwMDAwMDA1MDgwMEU1QkJDQworOjEwMDVBMDAwMDAwMDAwMzAwMDBDMjA4NzAwMDAwMDA1MDg4MEU1QkMzQQorOjEwMDVCMDAwMDAwMDAwMDgwMDAwMDBCQTAwMDAwMDA1MDA4MEU1QkQ1MgorOjEwMDVDMDAwMDAwMDAwMDUwMDAwRTVCQjAwMDAwMDA1MDA4MEU1QkM2MAorOjEwMDVEMDAwMDAwMDAwMDQwMDIxMDAwMDAwMDAwMDA0MDI4MDAwMDA3MAorOjEwMDVFMDAwMDAwMDAwMTgwMEMwMDBCRTAwMDAwMDQwNDE4MEUwMDA5NAorOjEwMDVGMDAwMDAwMDAwMjQwMDAwMDBDMDAwMDAwMDBDMDEwMDAwMDAwQQorOjEwMDYwMDAwMDAwMDAwMEMwMTAwRTUxRDAwMDAwMDA0MDAwMDQ1QkJENworOjEwMDYxMDAwMDAwMDAwMDgwMDAwODBCQTAwMDAwMDA0MDNDMDA4MzA5OQorOjEwMDYyMDAwMDAwMDAwMDA0MjAwRTAwMDAwMDAwMDA0MDAwMEEwMDAwNAorOjEwMDYzMDAwMDAwMDAwMDQyMDAwNDVFMDAwMDAwMDAwMDAwMEU1RTFBQgorOjEwMDY0MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDA0MDAwNzAwQzhENgorOjEwMDY1MDAwMDAwMDAwMDAwODAwRTM5NDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwMDY2MDAwMDAwMDAwMDQwMDAwRThDNDAwMDAwMDA0MDAwMEU4QzUyOQorOjEwMDY3MDAwMDAwMDAwMDQwMDAwRThDNjAwMDAwMDA0MDAwMEU5MjhCMworOjEwMDY4MDAwMDAwMDAwMDQwMDAwRTkyOTAwMDAwMDA0MDAwMEU5MkEzRAorOjEwMDY5MDAwMDAwMDAwMDgwMDAwMDBDQzAwMDAwMDA0MDAwMEU5Mjg3MQorOjEwMDZBMDAwMDAwMDAwMDQwMDAwRTkyOTAwMDAwMDA0MDAwMEU5MkExRAorOjEwMDZCMDAwMDAwMDAwMDgwMDAwMDBEMzAwMDAwMDA0MDJDMDIwMDA3OQorOjEwMDZDMDAwMDAwMDAwMDQwMDA2MDAwMDAwMDAwMDM0MDAwMDAwREIxMQorOjEwMDZEMDAwMDAwMDAwMDgwMDAwMDBEODAwMDAwMDA0MDAwMDgwMDBCNgorOjEwMDZFMDAwMDAwMDAwMDBDMDAwRTAwMDAwMDAwMDMwMDAwMDAwRTE1OQorOjEwMDZGMDAwMDAwMDAwMDA0MjAwRTAwMDAwMDAwMDMwMDAwMDAwRTFDNworOjEwMDcwMDAwMDAwMDAwMDA0MDAwRTAwMDAwMDAwMDA0MDAyNTAwMUI4NQorOjEwMDcxMDAwMDAwMDAwMDQwMDIzMDAwMDAwMDAwMDA0MDAyNTAwMDU4NAorOjEwMDcyMDAwMDAwMDAwMzQwMDAwMDBFNjAwMDAwMDBDMDAwMDAwMDBBMworOjEwMDczMDAwMDAwMDAwMDQwMDI0NDAwMDAwMDAwMDA0MDgwMDQ1QzgzOAorOjEwMDc0MDAwMDAwMDAwMDQwMDI0MDAwNTAwMDAwMDBDMDgwMDREMEIxMAorOjEwMDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDA0MDAxRDAwMThEMAorOjEwMDdDMDAwMDAwMDAwMDQwMDFBMDAwMTAwMDAwMDM0MDAwMDAwRkJEQgorOjEwMDdEMDAwMDAwMDAwMDgwMDAwMDA0QTAwMDAwMDA4MDUwMEEwNEFEMAorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjAwMDAwMDAxRkYKKy8qIHByb2R1Y3Rpb24gcmFkZW9uIHVjb2RlIHIxeHgtcjZ4eCAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JTNzgwX21lLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JTNzgwX21lLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NzljMTAKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlM3ODBfbWUuYmluLmloZXgKQEAgLTAsMCArMSwxMzQ1IEBACis6MTAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAwMDEwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMEZGRkYwMDI4NDYyMUE5Cis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMEFGCis6MTAwMDMwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTAwMDQwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDI2Cis6MTAwMDUwMDAwMDAwMDAwMDAwMDEwMDAwQzAyOTQ2MjAwMDAwMDAwMDUwCis6MTAwMDYwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAwMDcwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQUYyCis6MTAwMDgwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDdBCis6MTAwMDkwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MjAwNEJFCis6MTAwMEEwMDAwMDYwNDQxMTAwMDAwNjIyMDAwMDAwMDAwMDYwMDAwMDEzCis6MTAwMEIwMDAwMDAwMDVEMTAwMDAwMDAwMDA2MDAwMDAwMDAwMDVERTI3Cis6MTAwMEMwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMEYwMDM5Cis6MTAwMEQwMDAwMDI4MTYyMjAwMDAwMDAwMDAwMDAwMDgwMDIxMTYyNTVDCis6MTAwMEUwMDAwMDAwMDAwMDAwMDAwMDE4MDAyMDM2MjUwMDAwMDAwMDdECis6MTAwMEYwMDA4RDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNEZBCis6MTAwMTAwMDAwMDJGMDIyNTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEFECis6MTAwMTEwMDAwMDAwMDAxODAwNDEyMDAwMDA0MDQ4MTEwMDAwMDAxOUI0Cis6MTAwMTIwMDAwMDQyMjAwMDAwMjA0ODExMDAwMDAwMDA4RTAwMDAwMDY2Cis6MTAwMTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjgwMDIwNEEyRDhCCis6MTAwMTQwMDAwMDAwMDAwMDkwMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEFBCis6MTAwMTUwMDAwMDAwMDAwMDAwMjA0ODA1MDAwMDAwMDAwMDAwMDAwQzI2Cis6MTAwMTYwMDAwMDIxMTYyMjAwMDAwMDAwMDAwMDAwMDMwMDI4MTYyNUQwCis6MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDE5MDAyMTFBMjIwMDAwMDAwMDA5Cis6MTAwMTgwMDAwMDAwMDAwNDAwMjgxQTI2MDAwMDAwMDAwMDAwMDAwMDAzCis6MTAwMTkwMDAwMDI5MTRDNTAwMDAwMDAwMDAwMDAwMTkwMDIwMzYyNUM5Cis6MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTE0MDIwMDAwMDAwMEZGCis6MTAwMUIwMDAwMDAwMDAxNjAwMjExNjI1MDAwMDAwMDAwMDAwMDAwM0NBCis6MTAwMUMwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDVBCis6MTAwMUQwMDAwMDAwMDAwMEZGRkZGRkZDMDAyODBFMjMwMDAwMDAwMENECis6MTAwMUUwMDAwMDAwMDAwMDAwMjkxNEEzMDAwMDAwMDAwMDAwMDAxNzE4Cis6MTAwMUYwMDAwMDIwMzYyNTAwMDAwMDAwMDAwMDgwMDAwMDI4MEUyMkFDCis6MTAwMjAwMDAwMDAwMDAwMDAwMDAwMDA3MDAyMjBFMjMwMDAwMDAwMDk0Cis6MTAwMjEwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDAyMDAwMDAwMEVGCis6MTAwMjIwMDAwMDI4MEUyMjAwMDAwMDAwMDAwMDAwMDYwMDIxMEUyMzFFCis6MTAwMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMEVGCis6MTAwMjQwMDAwMDAwMDAwMDAwMjIwMjIyMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTAwMjUwMDAxNEUwMDAwMDAwMDAwMDM4MDAwMDAwMDAyRUUwMDAwMDY0Cis6MTAwMjYwMDAwMDAwMDAzNTAwMDAwMDAwMkNFMDAwMDAwMDAwMDAzNzE2Cis6MTAwMjcwMDAwMDAwMDAwMDAwNDAwRTJEMDAwMDAwMzkwMDAwMDAwOEMyCis6MTAwMjgwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDkwMDQwMTIyRDhCCis6MTAwMjkwMDAwMDAwMDA0NjAwMDAwMDAxMDA0MDBFMkQwMDAwMDAzOTYzCis6MTAwMkEwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzI4Cis6MTAwMkIwMDAwMDI4MTIyMzAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDg3Cis6MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMwMDAwMDAwMEFECis6MTAwMkQwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwM0UwMDAwMDAwOEU0Cis6MTAwMkUwMDAwMDQwMUMxMTAwMDAwMDQxMDAwMDAwMEQwMDIwMUUyREU4Cis6MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDBGMDAyODFFMjcwMDAwMDAwMDgyCis6MTAwMzAwMDAwMDAwMDAwMzAwMjIxRTI3MDAwMDAwMDA3RkMwMDAwMDQ0Cis6MTAwMzEwMDAwMDI4MUEyMzAwMDAwMDAwMDAwMDAwMTQwMDIxMUEyNjAzCis6MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAxMDAzMzFBMjYwMDAwMDAwMDU5Cis6MTAwMzMwMDAwMDAwMDAwODAwMjIxQTI2MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwMzQwMDAwMDI5MENDNzAwMDAwMDAwMDAwMDAwMjcwMDIwMzYyNDEwCis6MTAwMzUwMDAwMDAwMDAwMDAwMDA3RjAwMDAyODEyMjEwMDAwMDAwMEMzCis6MTAwMzYwMDAwMDAwMTQwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAwMzcwMDAwQ0UwMDAwMDAwMDAwMDRCMDAwMDAwMDEwMDI5MEUyM0VCCis6MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDM2MjMwMDAwMDAwMEU2Cis6MTAwMzkwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkY4MDAwMDExCis6MTAwM0EwMDAwMDI5NEEyMzAwMDAwMDAwMDAwMDAwMDAwMDNBMkMwMjRGCis6MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjBFMkIwMDAwMDAwMEUwCis6MTAwM0MwMDBGQzAwMDAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwRkM5Cis6MTAwM0QwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyM0YwCis6MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDI3MDAyMDRBMkQwMDAwMDAwMDRGCis6MTAwM0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyOTVCCis6MTAwNDAwMDAwMDIwMEUyRDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyM0U5Cis6MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAwNDIwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTUyCis6MTAwNDMwMDAwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDgzCis6MTAwNDQwMDAwMDAwMDA2MTAwMDAwMDAwMkVFMDAwMDAwMDAwMDA1RkRFCis6MTAwNDUwMDAwMDAwMDAwMDJDRTAwMDAwMDAwMDAwNUUwMDAwMDAwMDMyCis6MTAwNDYwMDAwMDQwMEUyRDAwMDAwMDYyMDAwMDAwMDEwMDQwMEUyRDMzCis6MTAwNDcwMDAwMDAwMDA2MjAwMDAwMDBBMDAyMDBFMkQwMDAwMDAwMEI1Cis6MTAwNDgwMDAwMDAwMDAwQjAwNDAxMjJEMDAwMDAwNkEwMDAwMDAwMDc4Cis6MTAwNDkwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMwMDI4MTIyM0Q5Cis6MTAwNEEwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQwMDAwMDAwMEYyCis6MTAwNEIwMDA3RkMwMDAwMDAwMjgxNjIzMDAwMDAwMDAwMDAwMDAxNDg4Cis6MTAwNEMwMDAwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDEwMDMzMTYyNTYxCis6MTAwNEQwMDAwMDAwMDAwMDgwMDAwMDAwMDAyODBFMjMwMDAwMDAwMDQzCis6MTAwNEUwMDAwMDAwMDAwMDAwMjkwQ0EzMDAwMDAwMDAzRkZGRkMwMEZBCis6MTAwNEYwMDAwMDI5MEUyMzAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzIxCis6MTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA2RDhBCis6MTAwNTEwMDAwMDAwMDEwMDAwNDAxQzExMDAwMDAwNzAwMDAwMDAwREYwCis6MTAwNTIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwRjAwMDI4MUUyNzAzCis6MTAwNTMwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMjFFMjcwMDAwMDAwMDUwCis6MTAwNTQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwREE4Cis6MTAwNTUwMDAwMDIwNDgxMTAwMDAwMDAwRkZGRkYwRkYwMDI4MUEzMEMzCis6MTAwNTYwMDAwMDAwMDAwMDAwMDBBMDI4MDAyMDQ0MTEwMDAwMDAwMDRFCis6MTAwNTcwMDAwMDAwMDAwMDAwMjk0OEU2MDAwMDAwMDAwMDAwQTAxODZDCis6MTAwNTgwMDAwMDIwNDQxMTAwMDAwMDAwM0ZGRkZGRkYwMDI4NEEyMzI1Cis6MTAwNTkwMDAwMDAwMDAwMDAwMDBBMDEwMDAyMDQ0MTEwMDAwMDAwMDM2Cis6MTAwNUEwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAzMEFGCis6MTAwNUIwMDAwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDIwMDI5MTYyNTcyCis6MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjUwMDAwMDAwMDgwCis6MTAwNUQwMDAwMDAwMDAyNTAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAwNUUwMDAwMDJGMDBBMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDZECis6MTAwNUYwMDAwMDAwMDA4MzAwMDAwMDI2MDAyMDE2MkQwMDAwMDAwMEVGCis6MTAwNjAwMDAwMDAwMDAwMDAwMkYwMEE0MDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAwNjEwMDAwQ0MwMDAwMDAwMDAwMDg0MDAwMDAwMDAwMDQwMDAwMDRBCis6MTAwNjIwMDAwMDAwMDA4QTAwMDAwMDI1MDAyMDM2MjMwMDAwMDAwMEEyCis6MTAwNjMwMDAwMDAwMDAyNjAwMjAzNjI0MDAwMDAwMDAwMDAwMDAxNzAzCis6MTAwNjQwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyN0YzCis6MTAwNjUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA4QTFDCis6MTAwNjYwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA1RkYwMDAwMDAwMDI2Cis6MTAwNjcwMDAwMDYwMDAwMDAwMDAwNUYzMDAwMDAwMDIwMDIxMEUyMkNGCis6MTAwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA4RDA5Cis6MTAwNjkwMDAwMDAwMDAxMkMwNDAzNjIwMDAwMDAwOTMwMDAwMDAwMDVGCis6MTAwNkEwMDAyRUUwMDAwMDAwMDAwMDkxMDAwMDAwMDAyQ0UwMDAwMDlGCis6MTAwNkIwMDAwMDAwMDA5MDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5MjlCCis6MTAwNkMwMDAwMDAwMDAwMzAwNDAwRTJEMDAwMDAwOTIwMDAwMDAwQzBFCis6MTAwNkQwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMTIwMDIwMzYyMzM0Cis6MTAwNkUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTBFMjIwMDAwMDAwMEI2Cis6MTAwNkYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOTgwMDAwQTAwQ0UyCis6MTAwNzAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDRDCis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDBBMEYxCis6MTAwNzIwMDAwMDAwQTAwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTAwNzMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAyRUUwMDAwMDMyCis6MTAwNzQwMDAwMDAwMDA5RTAwMDAwMDAwMkNFMDAwMDAwMDAwMDA5RDYyCis6MTAwNzUwMDAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwMzdBCis6MTAwNzYwMDAwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMEMwMDIwMEUyRDA4Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDBFCis6MTAwNzgwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDAwMDNGMDAwMEUyCis6MTAwNzkwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMTAwMDIxMEUyMzlFCis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDExMDAyMDM2MjMwMDAwMDAwMEJGCis6MTAwN0IwMDAwMDAwMDAxRTAwMjEwMjJCMDAwMDAwMDAwMDAwMDAwMENECis6MTAwN0MwMDAxNEMwMDAwMDAwMDAwMEE3MDAwMDAwMTZDMDIwMzYyMDYyCis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTAyMkIwMDAwMDAwMEFDCis6MTAwN0UwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQUEwMDAwMDAxNTc2Cis6MTAwN0YwMDBDMDIwMzYyMDAwMDAwMDAwMDAwMDAwMDgwMDIxMEUyQjYxCis6MTAwODAwMDAwMDAwMDAwMDAwMDAwMDdGMDAyODBFMjMwMDAwMDAwMDEwCis6MTAwODEwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAwODIwMDAwQ0UwMDAwMDAwMDAwMEUxMDAwMDAwMDAyNzAwMDAwMEQ0Cis6MTAwODMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBM0IzCis6MTAwODQwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwODUwMDAwQUUwMDAwMDAwMDAwMEIzMDAwMDAwMDAwMDYwMDAwMDlCCis6MTAwODYwMDAwMDAwMDEzQTgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDU3Cis6MTAwODcwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQ0VECis6MTAwODgwMDAwMDIyMUUzMDAwMDAwMDAwOTk4MDAwMDAwMDIwNDQxMTZBCis6MTAwODkwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMDEyMkQwMDAwMDAwMEY1Cis6MTAwOEEwMDAwMDAwMDAwODAwMjIxMjI0MDAwMDAwMDAwMDAwMDAxMEQ4Cis6MTAwOEIwMDAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDAwMDI5MUNFNEM2Cis6MTAwOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDcwMDAwMDEyRjQ5Cis6MTAwOEQwMDA5QjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTAwOEUwMDAwMDIwNDgwMjAwMDAwMDAwOUMwMDAwMDAwMDIwNDQxMThECis6MTAwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzE0NkYwMDAwMDAwMDQyCis6MTAwOTAwMDAwMDAwMDAwMTAwMzMzRTIzMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAwOTEwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDIwM0MwNTU1Cis6MTAwOTIwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQxCis6MTAwOTMwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAwOTQwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMDcwMDIwNDQxMTBCCis6MTAwOTUwMDAwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMkIwMDAwMDAwMDNBCis6MTAwOTYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQ0IwMEY4RkYwOEU5Cis6MTAwOTcwMDAwMDIwNDgxMTAwMDAwMDAwOTgwMDAwMDAwMDQwNDgxMUNECis6MTAwOTgwMDAwMDAwMDBEQzAwMDAwMEYwMDAyODBFMjIwMDAwMDAwMDQzCis6MTAwOTkwMDAwMDAwMDBBMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAwOUEwMDAwQ0MwMDAwMDAwMDAwMERBMDAwMDAwMTEwMDIwMEUyRDM1Cis6MTAwOUIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMEUyCis6MTAwOUMwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRDUwMDAwMDAwMjY0Cis6MTAwOUQwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ3Cis6MTAwOUUwMDAwMDAwMDBENDAwMDAzRjAwMDA0MDBDMTEwMDAwMDBENkMxCis6MTAwOUYwMDAwMDAwMUYwMDAwNDAwQzExMDAwMDAwRDYwMDAwMEYwMDk2Cis6MTAwQTAwMDAwMDIwMEMxMTAwMDAwMDAwMDAzODAwMDkwMDI5NEEyM0QyCis6MTAwQTEwMDAwMDAwMDAwMDNGMDAwMDAwMDAyODBFMkIwMDAwMDAwMDM2Cis6MTAwQTIwMDAwMDAwMDAwMjAwMjIwRTIzMDAwMDAwMDAwMDAwMDAwNzZBCis6MTAwQTMwMDAwMDQ5NEEyMzAwMDAwMERDMDAzODBGMDkwMDIwNDgxMTVCCis6MTAwQTQwMDAwMDAwMDAwMDY4MDAwMDA3MDAyMDQ4MTEwMDAwMDAwMEJFCis6MTAwQTUwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEZDCis6MTAwQTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDY0Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZECis6MTAwQTgwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTIwMjQ5Cis6MTAwQTkwMDAwMDIwNDQxMTAwMDAwMDAwMDBGRjAwMDAwMDI4MEUyMjhBCis6MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyOTRBMjMwMDAwMDAwMDMwCis6MTAwQUIwMDAwMDAwMDAyNzAwMjAwRTJEMDAwMDAwMDAwMDAwMDAyNjhFCis6MTAwQUMwMDAwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDAwMDJGMDA4MzE1Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBFQTQwCis6MTAwQUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA1RjkwMDAwMDAwMEE4Cis6MTAwQUYwMDAwMDQwMDAwMDAwMDAwMEVCMDAwMDAwMDAwMDYwMDAwMDZCCis6MTAwQjAwMDAwMDAwMDVGQzAwMDAwMDA3MDAyMDIyMkQwMDAwMDAwMDZFCis6MTAwQjEwMDAwMDAwMDAwNTAwMjIwRTIyMDAwMDAwMDAwMDEwMDAwMDZFCis6MTAwQjIwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5MjA2OEJCCis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDZECis6MTAwQjQwMDAwMDAwMDBFRjAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDVECis6MTAwQjUwMDAwMDI5MjA2ODAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDcyCis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTAyMjMwMDAwMDAwMDNDCis6MTAwQjcwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwRjgwMDAwMDAwQjdFCis6MTAwQjgwMDAwMDIxMDIyODAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDQ2Cis6MTAwQjkwMDAwMDAwMDBGODAwMDAwNDAwMDAyOTIyMjgwMDAwMDAwMEU2Cis6MTAwQkEwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxQzk3Cis6MTAwQkIwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDEwCis6MTAwQkMwMDAwMDAwMDBGRDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDA0Cis6MTAwQkQwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAxRTdFCis6MTAwQkUwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEUwCis6MTAwQkYwMDAwMDAwMDEwQjAwMDBBMzBGMDAyMDQ0MTEwMDAwMDAwMEMyCis6MTAwQzAwMDAwMDAwMDAxMTAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwMTc3Cis6MTAwQzEwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEI0Cis6MTAwQzIwMDAwMDAwMDEwNEZGRkZGRkZGMDA0MDQ4MTEwMDAwMDEwQjFFCis6MTAwQzMwMDAwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAwQzQwMDAwQ0MwMDAwMDAwMDAwMTA3MDAwMEZGRkYwMDQwNDgxMTM5Cis6MTAwQzUwMDAwMDAwMDEwQjAwMDAwMDA0MDAyRjAyMjMwMDAwMDAwMDMwCis6MTAwQzYwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxMEEwMDAwMDBGRkFFCis6MTAwQzcwMDAwMDQwNDgxMTAwMDAwMTBCMDAwMDAwMDEwMDIwNDgxMTU1Cis6MTAwQzgwMDAwMDAwMDAwMDAwMDJDNDAwMDAyMDQ0MTEwMDAwMDAwMDI5Cis6MTAwQzkwMDAwMDAwMDAxRjAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAwQ0EwMDAxNEMwMDAwMDAwMDAwMTEyMDAwMDAwMTA0MDIxMEUyMEJFCis6MTAwQ0IwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMEE4Cis6MTAwQ0MwMDAwMDAwMDAxODQwMjI0QTIwMDAwMDAwMDAwMDAwMDAxMDMwCis6MTAwQ0QwMDBDMDQyNEEyMDAwMDAwMTE0MDAwMDAwMDAwMDIwMEMxMTU2Cis6MTAwQ0UwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMDc4Cis6MTAwQ0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAwRDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEEwMDIwMTAxMTFGCis6MTAwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDdFCis6MTAwRDIwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxMUIwMDAwMDAwMEJCCis6MTAwRDMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDEwMDUzMTIyNEIwCis6MTAwRDQwMDAwMDAwMDExN0ZGQkZGRkZGMDAyODNBMkUwMDAwMDAwMDNGCis6MTAwRDUwMDAwMDAwMDAxQjAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwRDYwMDAxNEMwMDAwMDAwMDAwMTJFODEwMDAwMDAwMDIwNDQxMThBCis6MTAwRDcwMDAwMDAwMDAwMDAwMDAwMDBEMDAyMDQ4MTEwMDAwMDAwMEVECis6MTAwRDgwMDAwMDAwMDAxODAwMjIwRTMwMDAwMDAwMDBGQzAwMDAwMEVGCis6MTAwRDkwMDAwMDI4MEUyMzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTA0Cis6MTAwREEwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMEJDCis6MTAwREIwMDAwMDAwMDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwRTA1Cis6MTAwREMwMDAwMDIwNDQxMTAwMDAwMDAwMDdGOEZGMDgwMDIwNDgxMTJGCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTRBMjMwMDAwMDAwMDdECis6MTAwREUwMDAwMDAwMDAxQzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwODc0Cis6MTAwREYwMDAwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUU4Cis6MTAwRTAwMDAwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQwMDAwMDAwMDM5Cis6MTAwRTEwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwRTIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMEM5Cis6MTAwRTMwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAwRTQwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzhCCis6MTAwRTUwMDAwMDIwNDQxMTAwMDAwMDAwMDA4MDAwMDAwMDIwNDgxMTI0Cis6MTAwRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDYwMDAwMDAwMDE0Cis6MTAwRTcwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAwRTgwMDAxNzAwMDAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMUYyCis6MTAwRTkwMDAwMDAwMDYyMjAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMEI4Cis6MTAwRUEwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2MjEwMDAwMDAwNDQzCis6MTAwRUIwMDAwMDQwNEMxMTAwMDAwMTM1ODEwMDAwMDAwMDIwNDQxMTY5Cis6MTAwRUMwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEE4Cis6MTAwRUQwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQzY4Cis6MTAwRUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMUI2Cis6MTAwRUYwMDAwMDAwMDYyMjAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMDY2Cis6MTAwRjAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAxM0MwMDAwMDAwMEIwCis6MTAwRjEwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEYxCis6MTAwRjIwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEwMDAwMDMxNTI5Cis6MTAwRjMwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAwRjQwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDYwMDAwMDE1Cis6MTAwRjUwMDAwMDAwMDE2MDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDlDCis6MTAwRjYwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjYwCis6MTAwRjcwMDA0MDI4MDYyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMEEyMEM4Cis6MTAwRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDE0NjEwMDAwMDAwMEI4Cis6MTAwRjkwMDAwMDAwMDAwMDAwNzQxODgyMDAwMDAyQkIwMDAxQTFGREU3Cis6MTAwRkEwMDAwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYwMDJGMDIyRjBDCis6MTAwRkIwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDE0NzFECis6MTAwRkMwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMDFDCis6MTAwRkQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTMxCis6MTAwRkUwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMEI0Cis6MTAwRkYwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwM0ZGRjg3Cis6MTAxMDAwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDk0Cis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDE2MDBGCis6MTAxMDIwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDAwMDAwRkZGRjIzCis6MTAxMDMwMDBDMDI4MTIyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMTYyMEVGCis6MTAxMDQwMDAwMDAwMDAwMDAwMDBGRkZGQzA2ODFBMjAwMDAwMDJCQjgzCis6MTAxMDUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjFDCis6MTAxMDYwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDU0Cis6MTAxMDcwMDAwMDAwMDE1ODAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTEyCis6MTAxMDgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTZDCis6MTAxMDkwMDAwMDMwMEEyRjAwMDAwMDAwMDAwMDAwMDEwMDIxMEEyMjk5Cis6MTAxMEEwMDAwMDAwMDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMDk5Cis6MTAxMEIwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTI5Cis6MTAxMEMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTk1Cis6MTAxMEQwMDAwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTEwMDAwMDAwMDM2Cis6MTAxMEUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDk1Cis6MTAxMEYwMDAwMDYwMDAwMDAwMDAwMThGMDAwMDAwMDAwMDYwMDAwMEEwCis6MTAxMTAwMDAwMDAwMDFBMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMEEwCis6MTAxMTEwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAxMTIwMDAwMDIwMkMwODAwMDAwMDAwMDAwMDAwMDAwMDIwMjQxMTE2Cis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MTEwMDAwMDAwMDU2Cis6MTAxMTQwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjlDCis6MTAxMTUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTIzCis6MTAxMTYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDAzCis6MTAxMTcwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMkU1Cis6MTAxMTgwMDAwMDIyMUUyOTAwMDAwMDAwMDAwMDAwMDAwMDcwNDhFQjUzCis6MTAxMTkwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCQjk1Cis6MTAxMUEwMDAwMDAwMDAwMTQwMzMwNjIwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAxMUIwMDBDMDMwMjQwOTAwMDAwMDAwMDAwMDNGRkYwMDJGMDIyRjc0Cis6MTAxMUMwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDMzCis6MTAxMUQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMwMDAwMDAwMDBBCis6MTAxMUUwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEMzCis6MTAxMUYwMDAwMDAwMDE4MTAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQUQyCis6MTAxMjAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAxODY5NTAwMDAwMDgyCis6MTAxMjEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTA3Cis6MTAxMjIwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDE4NjRCCis6MTAxMjMwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTg1Cis6MTAxMjQwMDAwMDUzMDYyMTAwMDAwMTgyOTIwMDAwMDAwMDIwNDQxMTlBCis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDQ4MDAwMDAwMDE5NzhFCis6MTAxMjYwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMTU5Cis6MTAxMjcwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDAwMDAwMDc4MDQyQTc1Cis6MTAxMjgwMDAwMDAwMDJGQjAwMDAwMDAwMDAyMDI4MDkwMDAwMDAwMDEwCis6MTAxMjkwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAxMkEwMDAwQ0MwMDAwMDAwMDAwMTc0MDAwMDAwMDBDMDQwMDQwMEY5Cis6MTAxMkIwMDAwMDAwMDAwMTAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNThFCis6MTAxMkMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAxMkQwMDAwQ0UwMDAwMDAwMDAwMTk0MDAwMDAwMTVDMDIwMzYyMDQyCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDE2QzAyMDM2MjAwMDAwMDAwMEIyCis6MTAxMkYwMDAzRjgwMDAwMDAwMjAwNDExMDAwMDAwMDA0NjAwMDAwMEI0Cis6MTAxMzAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDgwMDAwMDMxCis6MTAxMzEwMDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMEJCCis6MTAxMzIwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAxMzMwMDAwQ0MwMDAwMDAwMDAwMTlCMDAwMDAwMDEwMDgwNDgxMTZCCis6MTAxMzQwMDAwMDAwMDAwMDAwMDAwMDIxMDA4MDQ4MTEwMDAwMDAwMEEzCis6MTAxMzUwMDAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEU5Cis6MTAxMzYwMDBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTYyMENFCis6MTAxMzcwMDAwMDAwMDAwMDAwMDAwMDEwQzA4MTFBMjAwMDAwMDAwMEUyCis6MTAxMzgwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjYxCis6MTAxMzkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDgwMDIyMUUzMDVDCis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMDI5MDAyMDFBMkQwMDAwMDAwMEFECis6MTAxM0IwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkZCRkYwOUQ2Cis6MTAxM0MwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEYwMDIwMjIyRDI2Cis6MTAxM0QwMDAwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjgwMDAwMDAwMDU0Cis6MTAxM0UwMDAwMDAwMDAwNjAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAxM0YwMDAwMDI5MjBFODAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwODRDCis6MTAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAxNDEwMDAwNjBBMDIwMDAwMjk0QTI2MDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxNDIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUNBCis6MTAxNDMwMDAwMDAwMDAwMDAwMDAwMTAwMDAyMDE4MTEwMDAwMDAwMDYyCis6MTAxNDQwMDAwMDAwMDAwODAwNjIxRTI4MDAwMDAxMkYwMDAwMDAwOEI0Cis6MTAxNDUwMDAwMDgyMjIyODAwMDAwMDAwMDAwMkMwMDAwMDIwNDQxMTg5Cis6MTAxNDYwMDAwMDAwMDAwMDAwMDAwMDE1MDA2MDBFMkQwMDAwMDFCRDBFCis6MTAxNDcwMDAwMDAwMDAxNjAwNjAwRTJEMDAwMDAxQkQwMDAwQzAwODM1Cis6MTAxNDgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDc1Cis6MTAxNDkwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDFCOUJFCis6MTAxNEEwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAxNEIwMDAwMDIwNDgwMTAwMDAwMDAwMzkwMDAwMDAwMDIwNDgxMTExCis6MTAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEEzCis6MTAxNEQwMDAwMDAwMDAwMDAwODA0ODAyMDAwMDAwMDAwMDAwMDAxODJBCis6MTAxNEUwMDAwMDIwMkUyRDAwMDAwMDAwMDAwMDAwMDAwMDNCMEQ2M0Q2Cis6MTAxNEYwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMjRBMjMwMDAwMDAwMDU1Cis6MTAxNTAwMDAwMDAwMDAxMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAxODI0Cis6MTAxNTEwMDAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMDAwMDgwNDgwMzcxCis6MTAxNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjUwCis6MTAxNTMwMDAwMDAwMTAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMDBFCis6MTAxNTQwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMUVECis6MTAxNTUwMDAwMDAwMDFCMjAwMDAwMDA3MDAyMTA2MkYwMDAwMDAwMDdCCis6MTAxNTYwMDAwMDAwMDAxMzAwMjAwQTJEMDAwMDAwMDAwMDAwMDAwMTEwCis6MTAxNTcwMDAwMDIwMkMxMTAwMDAwMDAwMDAwMEZGRkY0MDI4MjIyMDY2Cis6MTAxNTgwMDAwMDAwMDAwMDAwMDAwMDBGMDAyNjIyMjgwMDAwMDAwMERDCis6MTAxNTkwMDAwMDAwMDAxMDQwMjEyNjIwMDAwMDAwMDAwMDAwMDAwRjg1Cis6MTAxNUEwMDAwMDI2MjYyOTAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjdDCis6MTAxNUIwMDAwMDAwMDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDNFCis6MTAxNUMwMDAwMDAwMDAxQjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAxNUQwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMENECis6MTAxNUUwMDAwMDAwMDFFMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDI3Cis6MTAxNUYwMDAwMDAwMDA4MTAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzU0Cis6MTAxNjAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUVCCis6MTAxNjEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyMDFDMTEwMDAwMDAwMEZECis6MTAxNjIwMDAwMDAwMDAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDYyCis6MTAxNjMwMDAwQ0UwMDAwMDAwMDAwMURDMDAwMDAwMDAwMDYwMDAwMDgxCis6MTAxNjQwMDAwMDAwMDFFOTAwMDAwMDAxMDA1MzFFMjcwMDAwMDFEODNFCis6MTAxNjUwMDAwMDAwMDAwMTAwMjAyQzExMDAwMDAwMDAwMDAwMDAxRjBECis6MTAxNjYwMDAwMDI4MEEyMjAwMDAwMDAwMDAwMDAwMUYwMDI4MkEyQThCCis6MTAxNjcwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MzA2MjEwMDAwMDFEMTFECis6MTAxNjgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMjY1Cis6MTAxNjkwMDAwMDMwNEEyRjAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMThGCis6MTAxNkEwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEMwCis6MTAxNkIwMDAwMDAwMDAwMTAwMzAxRTJGMDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxNkMwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ2Cis6MTAxNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFFOUMwCis6MTAxNkUwMDAwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRTUwMDAwRkZGRjdECis6MTAxNkYwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMEYwMDI2MEUyM0VFCis6MTAxNzAwMDAwMDAwMDAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMEI2Cis6MTAxNzEwMDAwMDAwMDAwRjAwMjYxMjI0MDAwMDAwMDAwMDAwMDAwMDVFCis6MTAxNzIwMDAwMDIwMTQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMTgxMUVCCis6MTAxNzMwMDAwMDAwMDJCQjAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMEQ4Cis6MTAxNzQwMDAwMDAwMDAwMDAwMkYwMjJCMDAwMDAwMDAwMDAwMDAwMDNECis6MTAxNzUwMDAwQ0UwMDAwMDAwMDAwMUY4MDAwMDAwMTAwMDIyMTYyODM0Cis6MTAxNzYwMDAwMDAwMDAwMEZGRkYwMDAwMDAyODE2MjUwMDAwMDAwMDE4Cis6MTAxNzcwMDAwMDAwRkZGRjAwMjgxQTI5MDAwMDAwMDAwMDAwMDAwMDAwCis6MTAxNzgwMDAwMDI5NDhDNTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwQUIxCis6MTAxNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDJDMTEwMDAwMDAwMEVDCis6MTAxN0EwMDAwMDAwMDAxMDAwMjIxNjIzMDAwMDAwMDBGRkZGMDAwMEQwCis6MTAxN0IwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMEZGRkYwMDI4MUEyNDYyCis6MTAxN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4QzUwMDAwMDAwMEUzCis6MTAxN0QwMDAwMDAwMDAwMDAwNzMxNTAzMDAwMDAyMDUwMDAwMDAwMDc3Cis6MTAxN0UwMDAwMDIwMTgwNTAwMDAwMDAwMDAwMDAwMDAwMDczMTUyNDEwCis6MTAxN0YwMDAwMDAwMDIwNTAwMDAwMDAwMDAyRDE0QzUwMDAwMDAwMERDCis6MTAxODAwMDAwMDAwMDAwMDAwMzAwOEEyMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAxODEwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjE0Cis6MTAxODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDIwMDMwMDAwMDAwMDc1Cis6MTAxODMwMDAwMDAwMDAwMDAwODAyNDA0MDAwMDAwMDAwMDAwMDAwRkYxCis6MTAxODQwMDAwMDIxMDIyNTAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDdDCis6MTAxODUwMDAwMDAwMDYyMTAwMDAwMDAwMDAyQjE0MDUwMDAwMDAwMDFECis6MTAxODYwMDAwMDAwMDAwMTAwOTAxNjI1MDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxODcwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTg4Cis6MTAxODgwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDBCCis6MTAxODkwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMjI1NkE0Cis6MTAxOEEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEwMDI5NEEyMjE0Cis6MTAxOEIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDQ4Cis6MTAxOEMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDdBCis6MTAxOEQwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDM4Cis6MTAxOEUwMDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDA1Cis6MTAxOEYwMDAwMDAwMDAwMzAwMzg0QTIxMDAwMDAwMDAwMDAwQTFGQ0E1Cis6MTAxOTAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUU4Cis6MTAxOTEwMDAwMDAwMDAwMDAwMDBGRkZGNDAyODEyMjAwMDAwMDAwMDJGCis6MTAxOTIwMDAwMDAwMDAxMEMwMjExQTIwMDAwMDAwMDAwMDAwRkZGRjhFCis6MTAxOTMwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTYyMEVBCis6MTAxOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NDE0NjUwMDAwMDJCQkVECis6MTAxOTUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwMDAwMTUwCis6MTAxOTYwMDAwMDMzMDYyMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMUNCCis6MTAxOTcwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDIxOTgwCis6MTAxOTgwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAxOTkwMDAwQ0MwMDAwMDAwMDAwMjEyMDAwMDAwMDBDMDQwMDQwMDYzCis6MTAxOUEwMDAwMDAwMDAwMTAwMDAwMDAwMDA2MDAwMDAwMDAwMDVERUYzCis6MTAxOUIwMDAwMDAwMDAwMDAwNDAwNDBGMDAwMDAyMTMwMDAwMDAwMEJGCis6MTAxOUMwMDAwMDYwMDAwMDAwMDAwNUQxMDAwMDAwMDAwMDYwMDAwMDgxCis6MTAxOUQwMDAwMDAwMDVERTAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNTg1Cis6MTAxOUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxQTAwMDAwMDAwMEY2Cis6MTAxOUYwMDAwMDYwMDAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDhBCis6MTAxQTAwMDAwMDAwMDJCQjAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzE0Cis6MTAxQTEwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAxQTIwMDAwMDIwNDgwODAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRkU2Cis6MTAxQTMwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDIzMjg4Cis6MTAxQTQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0EwMDAwMDAwMEZCCis6MTAxQTUwMDAwMDQwMDAwMDAwMDAwMjM2OTUwMDAwMDAwMDIwNDQxMTA0Cis6MTAxQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkYwMDAwMDAwMDE2Cis6MTAxQTcwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAyMzYwMDAwMDAwMDQyCis6MTAxQTgwMDBDMDQwNDgwMDAwMDAwMjMzOTIwMDAwMDAwMDIwNDQxMUQyCis6MTAxQTkwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDFFCis6MTAxQUEwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjMzCis6MTAxQUIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMUJBCis6MTAxQUMwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDlBCis6MTAxQUQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUYzCis6MTAxQUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTY5Cis6MTAxQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA0MTEwMDAwMDJGQjc0Cis6MTAxQjAwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMEQwCis6MTAxQjEwMDAwMDYwMDAwMDAwMDAwNUQxMDAwMEEwMEMwMDIwNDQxMTZFCis6MTAxQjIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDhECis6MTAxQjMwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAxQjQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTg0MDIxMEEyMDg3Cis6MTAxQjUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyRjAyMjIwMDAwMDAwMDJGCis6MTAxQjYwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyNEMwMDAwMDAxNDI5Cis6MTAxQjcwMDAwMDIwMjIyRDAwMDAwMDAwMDAwODAxMDEwMDI5MjIyODc5Cis6MTAxQjgwMDAwMDAwMDAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMEMzCis6MTAxQjkwMDAwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxQkEwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEU1Cis6MTAxQkIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDI1MThBCis6MTAxQkMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxMDlBCis6MTAxQkQwMDAwMDYwMDQxMTAwMDAwMzE1M0Y4MDAwMDAwMDIwMDQxMTg0Cis6MTAxQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMkM5Cis6MTAxQkYwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0VGCis6MTAxQzAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEZCCis6MTAxQzEwMDAwMDAwMDI3QzAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEM0Cis6MTAxQzIwMDAwMDAwMDAwMTAwMjExRTI3MDAwMDAwMDAwMDAwMDAwMDRECis6MTAxQzMwMDAxNEUwMDAwMDAwMDAwMjZBMDAwMDAwMTIwMDIwMUUyREM3Cis6MTAxQzQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODFFMjcwMDAwMDAwMDI5Cis6MTAxQzUwMDAwMDAwMDAwMDAwMzQxQzI3MDAwMDAwMDAwMDAwMDAwMDBECis6MTAxQzYwMDAxMkMwMDAwMDAwMDAwMjVGMDAwMDAwMDAwMDIwMUMxMUY0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTUwMDAwMDAwMDUwCis6MTAxQzgwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNjIwMDAwMDAwMDI4Cis6MTAxQzkwMDAwMDIwMTQwNzAwMDAwMDAwMDAwMDAwMTIwMDIwMUUyRDhDCis6MTAxQ0EwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTFFMjcwMDAwMDAwMEJFCis6MTAxQ0IwMDAwMDAwMDAwMDAwMzQxQzQ3MDAwMDAwMDAwMDAwMDAwMDhECis6MTAxQ0MwMDAxMkMwMDAwMDAwMDAwMjY3MDAwMDAwMDAwMDIwMUMxMThDCis6MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMEVGCis6MTAxQ0UwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNkEwMDAwMDAwMEMwCis6MTAxQ0YwMDAwMDIwMTgwNzAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDQ1Cis6MTAxRDAwMDAwMDAwMDJDMTAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDIzCis6MTAxRDEwMDAwMDAwMDAwMDAwMzQyMDIzMDAwMDAwMDAwMDAwMDAwMDRDCis6MTAxRDIwMDAxMkMwMDAwMDAwMDAwMjcyMDAwMDAwMDAwMDM0MjA0NEQ1Cis6MTAxRDMwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3MTVFCis6MTAxRDQwMDAwMDAwMDAxNjAwNDA0ODExMDAwMDAyNzYwMDAwMDAxODU0Cis6MTAxRDUwMDAwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMDAwMDM0MjA0NERBCis6MTAxRDYwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3NTJBCis6MTAxRDcwMDAwMDAwMDAxNzAwNDA0ODExMDAwMDAyNzYwMDAwMDAxOTIyCis6MTAxRDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUM4Cis6MTAxRDkwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEM5Cis6MTAxREEwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTkwMDAwM0ZGRkI2Cis6MTAxREIwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEY3Cis6MTAxREMwMDAwMDAwMDI1NjAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMUI2Cis6MTAxREQwMDAwMDAwMDAxMDQwMjEwNjIwMDAwMDAwMDAwMDAwRkZGRjZFCis6MTAxREUwMDBDMDI4MEEyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDQyCis6MTAxREYwMDAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjAwMDAwMDAwMENCCis6MTAxRTAwMDAwMDAwMDAxMDQwMjExNjIwMDAwMDAwMDAwMDAwRkZGRjJECis6MTAxRTEwMDBDMDg4MUEyMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTRBCis6MTAxRTIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDM4Cis6MTAxRTMwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2MjIwMDAwMDAwMDlECis6MTAxRTQwMDAwMDYwMDAwMDAwMDAwNUQxMDAwMDAwMDBDMDYwMDAwMDNDCis6MTAxRTUwMDAwMDAwMDJBMzAwMDAwMDA1MDAyMDBBMkQwMDAwMDAwMDgxCis6MTAxRTYwMDAwMDAwMDAwODAwMjIwQTIyMDAwMDAwMDAwMDAwMDAyQkYxCis6MTAxRTcwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMUMwMDIwMUUyRDc0Cis6MTAxRTgwMDAwMDAwMDAwMDAwMDA3MDAwMDAyODFFMjcwMDAwMDAwMDc1Cis6MTAxRTkwMDAwMDAwMDAwMDAwMzExQ0U2MDAwMDAwMDAwMDAwMDAyQUU1Cis6MTAxRUEwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMEMwMDIyMUEyNjVECis6MTAxRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMDBECis6MTAxRUMwMDAwMDAwMDAwMDA2RTAwMDAwMDAwMDAyOTIwMDAwMDAwMDk4Cis6MTAxRUQwMDAwMDIwMUMxMTAwMDAwMDAwMDAwMDAwMDAwMDIwMEMxMTc4Cis6MTAxRUUwMDAwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjMwMDAwMDAwMDRFCis6MTAxRUYwMDAwMDAwMDAxMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAxRjAwMDAwMDY5MUNFMjAwMDAwMTJGOTM4MDAwMDAwMDIwNDQxMUIyCis6MTAxRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDUyCis6MTAxRjIwMDA5NTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTAxRjMwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDU1Cis6MTAxRjQwMDAwMDAwMDI5RDAwMDAwMDAxMDAzMzNFMkYwMDAwMDAwMDUxCis6MTAxRjUwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDA5MjAwMDAwMENFCis6MTAxRjYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEQ0Cis6MTAxRjcwMDAwMDAwMDAwMDAwMDAwMDFDMDA0MDM2MjcwMDAwMDAwMEE4Cis6MTAxRjgwMDAwMDAwMDAwQ0MwMjIwQTIwMDAwMDAwMDAwMDAwMDAyOTEwCis6MTAxRjkwMDAwMDIwMzYyMjAwMDAwMDAwMDAwMDAwMjhDMDQwMzYyMDRCCis6MTAxRkEwMDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDc2Cis6MTAxRkIwMDAwMDAwMDAwOTAwMjA0ODExMDAwMDAwMDBBMTAwMDAwMEZFCis6MTAxRkMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMUMyCis6MTAxRkQwMDAwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMDc1Cis6MTAxRkUwMDAwMDAwMDAwMDAwMkMxQ0UzMDAwMDAwMDAwMDAwMDAyMUE1Cis6MTAxRkYwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjIwMDIwMUUyREQ3Cis6MTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQzFDRTQwMDAwMDAwMEE0Cis6MTAyMDEwMDAwMDAwMDAyMjAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyM0ZFCis6MTAyMDIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBBMzUxCis6MTAyMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDRGCis6MTAyMDQwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyNENDCis6MTAyMDUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwCis6MTAyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDFGCis6MTAyMDcwMDAwMDAwMDAyNDAwODAzNjI3MDAwMDAwMDAwMDAwMDAyMTNFCis6MTAyMDgwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyNDNCCis6MTAyMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTMwMDAwMDAwMDUwCis6MTAyMEEwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAwMDkwCis6MTAyMEIwMDAwMDMxMUNDNDAwMDAwMDAwMDAwMDAwMjQwMDgwMzYyNzBFCis6MTAyMEMwMDAwMDAwMDAwMDAwMDAwMDFBMDAyMDM2MjcwMDAwMDAwMDc5Cis6MTAyMEQwMDAwMDAwMDAxQjAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxNzUwCis6MTAyMEUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyNzM5Cis6MTAyMEYwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDJEQzJFCis6MTAyMTAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyRDkwMDAwMDAxQTlBCis6MTAyMTEwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMUIwMDIwMzYyOEE5Cis6MTAyMTIwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMDJECis6MTAyMTMwMDAwMDAwMDAwMjAwMjEwMjI3MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAyMTQwMDAxNEUwMDAwMDAwMDAwMkQ5MDAwMDAwMDMwMDIxMDIyNzczCis6MTAyMTUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDJEQ0FECis6MTAyMTYwMDAwMDAwMDAyMzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAyMTcwMDAwMDJFMDBFMTAwMDAwMDAwMDAwMDAwMDAwMkMwMDAwMDhFCis6MTAyMTgwMDAwMDAwMDJEQzAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMEU1Cis6MTAyMTkwMDAwMDAwMDAwMDAwMzEyMEExMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyMUEwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDAwNkMwMDAwMDUzCis6MTAyMUIwMDAwMDAwMDJEQzAwMDAwMDI0MDAyMDFFMkQwMDAwMDAwMEIyCis6MTAyMUMwMDAwMDAwMDAwMDAwMkUwMEUyMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyMUQwMDAwMkMwMDAwMDAwMDAwMkRDMDAwMDAwMjIwMDIwMUUyREQyCis6MTAyMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMERDCis6MTAyMUYwMDAwMDAwMDAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAyMjAwMDAwNkMwMDAwMDAwMDAwMkRDMDAwMDAwMDAwMDYwMDAwMENBCis6MTAyMjEwMDAwMDAwMDVGRjAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCNUEzCis6MTAyMjIwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAwMDhFCis6MTAyMjMwMDAwMDYwMDAwMDAwMDAwMkI1MDAwMDAwMDAwMDYwMDAwMDI3Cis6MTAyMjQwMDAwMDAwMDVGNjAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTczCis6MTAyMjUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTcwMDAwMDAwMDc1Cis6MTAyMjYwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMUEwMDIwMUUyREM5Cis6MTAyMjcwMDAwMDAwMDAwMDAwMDAwMDFCMDA4MDIyMkQwMDAwMDAwMDc0Cis6MTAyMjgwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMERCCis6MTAyMjkwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzU2Cis6MTAyMkEwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMEI3Cis6MTAyMkIwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAxMDE2Cis6MTAyMkMwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDk2Cis6MTAyMkQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDhFCis6MTAyMkUwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxMDA1Cis6MTAyMkYwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzgzCis6MTAyMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMDVDCis6MTAyMzEwMDAwMDAwMDAwMDAwMjk0ODQ3MDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAyMzIwMDAwMDMxMUNBMzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzQ2Cis6MTAyMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMEE1Cis6MTAyMzQwMDAwMDAwMDAwMDAwMzExQ0ExMDAwMDAwMDAwMDAwMDAxMDhGCis6MTAyMzUwMDAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg0NzVFCis6MTAyMzYwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMEZBCis6MTAyMzcwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAwMDAwRkZGRjRBCis6MTAyMzgwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzYyCis6MTAyMzkwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMENDCis6MTAyM0EwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDAwMDAwRkZGRjFDCis6MTAyM0IwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwN0QyCis6MTAyM0MwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDlBCis6MTAyM0QwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMTA0Cis6MTAyM0UwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMzMDhBMkMzCis6MTAyM0YwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDZCCis6MTAyNDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyNDEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzUzCis6MTAyNDIwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDM1Cis6MTAyNDMwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMUEzCis6MTAyNDQwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMwMDhBMjY1Cis6MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDBBCis6MTAyNDYwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAyNDcwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzcwCis6MTAyNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDM3Cis6MTAyNDkwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMENDCis6MTAyNEEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDM4MDhDNUFFCis6MTAyNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDA4NDEwMDAwMDAwMEEzCis6MTAyNEMwMDAwMDAwMDAwMTAwMjIwQTIyMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNEQwMDAwMDMzMDhBMjAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMkFECis6MTAyNEUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDc3Cis6MTAyNEYwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxN0VDCis6MTAyNTAwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDg4Cis6MTAyNTEwMDAwMDAwMDMxOEZGRkZGRkVGMDAyODA2MjEwMDAwMDAwMDY1Cis6MTAyNTIwMDAwMDAwMDAxNDAwMjAyMjJEMDAwMDAwMDAwMDAwRjhFMDUwCis6MTAyNTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwMUIzCis6MTAyNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDEwMDAwMDAwMEI4Cis6MTAyNTUwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAyNTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDgwNDgxMTA3Cis6MTAyNTcwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDdCCis6MTAyNTgwMDA5NzAwMDAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAyNTkwMDBDMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAzCis6MTAyNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEIyCis6MTAyNUIwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTAyNUMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUQxCis6MTAyNUQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEQzCis6MTAyNUUwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAyNUYwMDAwMEEwMDAwQTAwMDAwMDAwOTcwMDAwMDBDMDIwNDQxMTY1Cis6MTAyNjAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTEwMDAwMDAwMDkxCis6MTAyNjEwMDA4QTAwMDAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEZCCis6MTAyNjIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTNFCis6MTAyNjMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDcyCis6MTAyNjQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTAyNjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDZFCis6MTAyNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEMwCis6MTAyNjcwMDA5NzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyNjgwMDAwMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMUQyCis6MTAyNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEMxCis6MTAyNkEwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyNkIwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUUwCis6MTAyNkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEUyCis6MTAyNkQwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTAyNkUwMDAwMEEwMDAwQTAwMDAwMDAwOTcwMDAwMDAwMDIwNDQxMTM0Cis6MTAyNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYxCis6MTAyNzAwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMENBCis6MTAyNzEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTRECis6MTAyNzIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDgxCis6MTAyNzMwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAyNzQwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTRECis6MTAyNzUwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDU4Cis6MTAyNzYwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTAyNzcwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMDIyNTcwMDIwNDQxMUMxCis6MTAyNzgwMDAwMDAwMDAwMDAwMDAwMDAzQzA0ODRBMjAwMDAwMDAwMEQ0Cis6MTAyNzkwMDAwMDAwMjI1RDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAyN0EwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDgxCis6MTAyN0IwMDAwMDAwMDVERTAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDRFCis6MTAyN0MwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMzEzCis6MTAyN0QwMDAwMDM4NEEyMjAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTQzCis6MTAyN0UwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEMxCis6MTAyN0YwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAyODAwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDg5Cis6MTAyODEwMDAwMDAwMDAwMDAwMDAwMDAwNDAyMDQ4MDAwMDAwMDAwMDEwCis6MTAyODIwMDAwMDAwMDAwMTQwMzA0QTIwMDAwMDAwMDAwMDAwMDAwMkNCCis6MTAyODMwMDBDMDMwNEEyMDAwMDAwMDAwMDAwMDAwMDEwMDUzMEEyMkJFCis6MTAyODQwMDAwMDAwMDM1NTAwMDAwMDNGQzAyODBBMjAwMDAwMDAwMERGCis6MTAyODUwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTgxCis6MTAyODYwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTYxCis6MTAyODcwMDAwMDAwMDAwMDAwMDAwMDE4MDAyMDQ4MTEwMDAwMDAwMEM3Cis6MTAyODgwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2MjIwMDAwMDAxMTNDCis6MTAyODkwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMEYxCis6MTAyOEEwMDAwMDAwMDM1RTAwMDAwMDE0MDAyRjAyMjIwMDAwMDAwMDYwCis6MTAyOEIwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNkMwMDAxQTJBNDk2Cis6MTAyOEMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwMkU5Cis6MTAyOEQwMDAwMDAwMDM3NDAwMDAyMTAwMDAyMDQ0MTEwMDAwMDAwMEVCCis6MTAyOEUwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyOEYwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDg4Cis6MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDdGCis6MTAyOTEwMDAwMDAwMDAwNDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAyOTIwMDAwQ0MwMDAwMDAwMDAwMzcwMDAwMUEyQTQwMDIwNDQxMUFDCis6MTAyOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDM2N0EzCis6MTAyOTQwMDAwMDAwMDAyODAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAyOTUwMDAwQ0MwMDAwMDAwMDAwNUJBMDAwMUEyQTQwMDIwNDQxMTMwCis6MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDM2NzczCis6MTAyOTcwMDAwMDAwMDAyQzAwMjAzNjI2MDAwMDAwMDAwMDAwMDA0OTY2Cis6MTAyOTgwMDAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMTQ2Cis6MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAxMDAzMzFBMjYwMDAwMDAwMEMzCis6MTAyOUEwMDAwMDAwMDAwMDAwMkYwMjI2MDAwMDAwMDAwMDAwMDAwMEQwCis6MTAyOUIwMDAwQ0MwMDAwMDAwMDAwMzc2MDAwMDAwMkMwMDgwMUEyRERGCis6MTAyOUMwMDAwMDAwMDAwMDAwMDAwMDNGQzAyODBBMjAwMDAwMDAwMEI2Cis6MTAyOUQwMDAwMDAwMDAxNTAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDhGCis6MTAyOUUwMDAwQ0UwMDAwMDAwMDAwMzhDMDAwMDAwMDYwMDJGMDIyMjEzCis6MTAyOUYwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNCNzMxCis6MTAyQTAwMDAwMDAwMDAxNjAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDVECis6MTAyQTEwMDAwQ0UwMDAwMDAwMDAwM0I5MDAwMDAwMjAwMDJGMDIyMjlCCis6MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNBMjE1Cis6MTAyQTMwMDAwMDAwMDAwRjAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAyQTQwMDAwQ0UwMDAwMDAwMDAwM0FFMDAwMDAwMTAwMDJGMDIyMjg2Cis6MTAyQTUwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNBRUQ5Cis6MTAyQTYwMDAwMDAwMDAxRTAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAyQTcwMDAwQ0UwMDAwMDAwMDAwMzk2MDAwMEEyQTQwMDIwNDQxMTE2Cis6MTAyQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMEJDCis6MTAyQTkwMDAwODAwMDAwMDAwMjkwQTIyMDAwMDAwMDAwMDAwMDAwM0Q2Cis6MTAyQUEwMDA0MDIxMEUyMDAwMDAwMDAwMDAwMDAwMENDMDIxMTIyMDc4Cis6MTAyQUIwMDAwMDAwMDAwMDAwMDgwMDAwMDAyODEyMjQwMDAwMDAwMEIwCis6MTAyQUMwMDAwMDAwMDAxNEMwMjIxNjIwMDAwMDAwMDAwMDAwMDAwMERBCis6MTAyQUQwMDAwMDI5MTRBNDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTVBCis6MTAyQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4QTIwMDAwMDAwMEQzCis6MTAyQUYwMDAwMDAwQTFGRTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAyQjAwMDAwMDQwNDgwMzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTQ0Cis6MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDNCCis6MTAyQjIwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjAxCis6MTAyQjMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTQ5Cis6MTAyQjQwMDAwMDAwMDYyMjAwMDAwMDE1MDAyMTAyMzAwMDAwMDAwMEY1Cis6MTAyQjUwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzOTgwMDAwMjEwRUI3Cis6MTAyQjYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEM4Cis6MTAyQjcwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDJECis6MTAyQjgwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDhBCis6MTAyQjkwMDAwMDQwNDgwMjAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUI1Cis6MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEFCCis6MTAyQkIwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNzcwCis6MTAyQkMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMUI5Cis6MTAyQkQwMDAwMDAwMDYyMjAwMDAwMDAzMDAyMTAyMzAwMDAwMDAwMDc3Cis6MTAyQkUwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzQTQwMDAwMjEwODIxCis6MTAyQkYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDM4Cis6MTAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDlDCis6MTAyQzEwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAyQzIwMDAwMDQwNDgwMjAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTVGCis6MTAyQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDJBCis6MTAyQzQwMDA4MDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDhGCis6MTAyQzUwMDAwMDIwNDgxMTAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTA1Cis6MTAyQzYwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMDQ4MTEwMDAwMDAwMERCCis6MTAyQzcwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAyQzgwMDAxNEMwMDAwMDAwMDAwM0I0MDAwMDAwMDAwMDQwMDAwMDc5Cis6MTAyQzkwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDc4Cis6MTAyQ0EwMDAwMDAwMDAwNjAwNDA0ODExMDAwMDAwMDAwMDAxQTJBNDNFCis6MTAyQ0IwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYwMDYwNDgxMUQwCis6MTAyQ0MwMDAwMDAwMDM3NDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDRECis6MTAyQ0QwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAyQ0UwMDBDMDIwMEMwMDAwMDAwMDAwMDAwMDAwMUQwMDIxMDIyMzk1Cis6MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDNDRTBGCis6MTAyRDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUNDCis6MTAyRDEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMUFDCis6MTAyRDIwMDAwMDAwMDAwMDAwMDAwMDE4MDAyMDQ4MTEwMDAwMDAwMDEyCis6MTAyRDMwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2MjIwMDAwMDAxMTg3Cis6MTAyRDQwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDNDCis6MTAyRDUwMDAwMDAwMDNDMjAwMDAyMTAwMDAyMDQ0MTEwMDAwMDAwMDE4Cis6MTAyRDYwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAyRDcwMDAwMDIwNDgwMzAwMDAwMDAwQkFCRUNBRkUwMDIwNDgxMTJGCis6MTAyRDgwMDAwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDhBCis6MTAyRDkwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNDc0Cis6MTAyREEwMDAwMDQwNDgxMTAwMDAwMDAwMDAwMDIxNzAwMDIwNDQxMTg0Cis6MTAyREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMEE5Cis6MTAyREMwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDA4MTAwMDAwMDE3Cis6MTAyREQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMEEwMDIwNDgxMUZCCis6MTAyREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTAwMDAwMDAwMEIzCis6MTAyREYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzRDM4QzAwMDAwMDlECis6MTAyRTAwMDAwMDIwNDQxMTAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMTc0Cis6MTAyRTEwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAyRTIwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwM0ZGRkVBCis6MTAyRTMwMDA0MDI4MEEyMDAwMDAwMDAwODAwMDAwMDA0MDI4MEUyMEVBCis6MTAyRTQwMDAwMDAwMDAwMDQwMDAwMDAwQzAyODEyMjAwMDAwMDAwMDI4Cis6MTAyRTUwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2MjIwMDAwMDAwMDc1Cis6MTAyRTYwMDAwMDIwMTQxMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyM0NBCis6MTAyRTcwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDNFMUEyCis6MTAyRTgwMDAwMDAwMDAwMEMwNDAxODAwMDAwMDAzRTQwMDAwM0ZGRjA1Cis6MTAyRTkwMDBDMDI4MUEyMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNjM3Cis6MTAyRUEwMDAwMDAwMDYyMjAwMDAwMDAwMDAyMDE4MTAwMDAwMDAwMEIyCis6MTAyRUIwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMEJECis6MTAyRUMwMDAwQ0MwMDAwMDAwMDAwM0U3MDAwMDAwMDBDMDQwMUMwMDMwCis6MTAyRUQwMDAwMDAwMDNFQTAwMDAzRkZGQzAyODFFMjAwMDAwMDAwMEExCis6MTAyRUUwMDAwMDA0MDAwMDAwNjk0NjI3MDAwMDA2MjIwMDAwMDAwMEUwCis6MTAyRUYwMDAwMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDQwMjIwCis6MTAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODIwQzUwMDAwMDAwMEI0Cis6MTAyRjEwMDAwMDAwMDAwMDAwNDk0OEU4MDAwMDAwMDBBNTgwMDAwMDEzCis6MTAyRjIwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMDIwMDAwMDIwMEMxMTBCCis6MTAyRjMwMDAwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTEwMDAwMDQxMjQzCis6MTAyRjQwMDAwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDAwMDAwMDAwMDFCCis6MTAyRjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA0MDIwNDgwMEExCis6MTAyRjYwMDAwMDAwMDAwMDAwMDAwMDFGQzAyMTAyMjAwMDAwMDAwMDNGCis6MTAyRjcwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzRjcwMDAwMjAxMDUzCis6MTAyRjgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMUQzCis6MTAyRjkwMDAwMDAwMDAwMDAwMDBGRkZGQzA0ODEyMjAwMDAwMDNGRkY3Cis6MTAyRkEwMDBBNzgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwQTAwMDIxCis6MTAyRkIwMDAwMDIwMEMxMTAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTlDCis6MTAyRkMwMDAwMDAwMDQxMjAwMDAwMDAwMDAyMDQ0MDIwMDAwMDAwMDg1Cis6MTAyRkQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAyRkUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEZGRkZDMDI4MTIyMEExCis6MTAyRkYwMDAwMDAwMDAwMDgzMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ5Cis6MTAzMDAwMDAwMDAwMDAwMDAwMzA0ODgzMDAwMDAwMDA4NDAwMDAwMDQxCis6MTAzMDEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDEzCis6MTAzMDIwMDAwMDAwMDAwMDAwMDAwMDAwMUQwMDAwMDAwMDAwMDAwMDgzCis6MTAzMDMwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDA0MTIwMDAwMDAwMDQyCis6MTAzMDQwMDBDMDQwMDQwMDAwMDAwMDAxQTk4MDAwMDAwMDIwMDgxMTE5Cis6MTAzMDUwMDAwMDAwMDAwMDAwMDBDMDAwMDA0MDBDMTEwMDAwMDNGQTU2Cis6MTAzMDYwMDBBQjgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjhFMDI0Cis6MTAzMDcwMDAwMDQwMEMxMTAwMDAwM0ZBQUQ4MDAwMDAwMDIwMDgxMTkwCis6MTAzMDgwMDAwMDAwMDAwMDAwMDBGODgwMDA0MDBDMTEwMDAwMDNGQTZFCis6MTAzMDkwMDBCMzgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjNGQ0Q1Cis6MTAzMEEwMDAwMDQwMEMxMTAwMDAwM0ZBQUY4MDAwMDAwMDIwMDgxMTVFCis6MTAzMEIwMDAwMDAwMDAwMDAwMDBFMDAwMDA0MDBDMTEwMDAwMDNGQUQ2Cis6MTAzMEMwMDBCMTgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjAwMEE2Cis6MTAzMEQwMDAwMDQwMEMxMTAwMDAwM0ZBODMwMDAwMDAwMDIwNDQxMTlFCis6MTAzMEUwMDAwMDAwMDAwMDAwMDAyMTQ4MDAyMDQ4MTEwMDAwMDAwMEZFCis6MTAzMEYwMDA4NDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTAzMTAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMDAwMDdBCis6MTAzMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDJGCis6MTAzMTIwMDAwMTE4MjAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAzMTMwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDhBCis6MTAzMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEQ1Cis6MTAzMTUwMDAwMjE4QTAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAzMTYwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDVBCis6MTAzMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEE1Cis6MTAzMTgwMDAwMzE4QzAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAzMTkwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDJBCis6MTAzMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDc1Cis6MTAzMUIwMDAwNDE4RjhFMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAzMUMwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMEZBCis6MTAzMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDQ1Cis6MTAzMUUwMDAwNTE4Rjg4MEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAzMUYwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMENBCis6MTAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDE0Cis6MTAzMjEwMDAwNjE4RTAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTAzMjIwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDk5Cis6MTAzMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEU0Cis6MTAzMjQwMDAwNzE4RjAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAzMjUwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDY5Cis6MTAzMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEI0Cis6MTAzMjcwMDAwODE4RjNGQ0MwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAzMjgwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDM5Cis6MTAzMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDg0Cis6MTAzMkEwMDAwMDAwMDAzM0MwMzAwQTIwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzMkIwMDBDMDQwMzQ0MDAwMDAwMDAwMDAwMDAwMzAwMDIwMEEyRDEzCis6MTAzMkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyOTBDNDAwMDAwMDAwMEM5Cis6MTAzMkQwMDAwMDAwMDAzMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAzMkUwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTUwCis6MTAzMkYwMDAwMDAwMDAwMDg2MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQzCis6MTAzMzAwMDAwMDAwMDAwMDAwNDA0ODAxMDAwMDAwMDA4NTAwMDAwMEFGCis6MTAzMzEwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMUVGCis6MTAzMzIwMDAwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTEwMDAwMDAwMDhCCis6MTAzMzMwMDAwMDAwMDAxODQwMjEwMjIwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAzMzQwMDAxNEMwMDAwMDAwMDAwNDQ3MDA4MDAwMDBDMDQ5NEEyMDZCCis6MTAzMzUwMDAwMDAwMDQ0ODAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEY5Cis6MTAzMzYwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAzMzcwMDBDMDIwNDgwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTJGCis6MTAzMzgwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEMzCis6MTAzMzkwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwNDQxCis6MTAzM0EwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwNkUwMDAwMEU0Cis6MTAzM0IwMDAwMDAwMDQ1MDAwMDAwMDA0MDAyMDA4MTEwMDAwMDAwMDdDCis6MTAzM0MwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDAwMDA0MjE3RjQyCis6MTAzM0QwMDAwMDYwNDQxMTAwMDAwNjIyMDAwMDAwMUYwMDIxMDIzMDlFCis6MTAzM0UwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDAwMDA5Cis6MTAzM0YwMDAwMDAwMDAwMDAwNDA0QzAyMDAwMDA0NTAwMDAwMDAwMEVCCis6MTAzNDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTAwMEUwCis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE0MDAwMDAwMDAwMEI4Cis6MTAzNDIwMDAwMDAwMDAwMEMwMjAxODAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTAzNDMwMDBDMDIwMUMwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MEEyMUJFCis6MTAzNDQwMDAwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMEU0Cis6MTAzNDUwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NjEwMDAwMDAwMDFCCis6MTAzNDYwMDBDMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDQwMDJGMDIyOEZGCis6MTAzNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDQ2MTAxCis6MTAzNDgwMDAwMDAwMDAwNDAwMjAyMDExMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTAzNDkwMDAxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDI4MEEyM0IwCis6MTAzNEEwMDAwMDAwMDAwMDAwMDAwMDEwMDAyRjAyMjIwMDAwMDAwMEI5Cis6MTAzNEIwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0Njk4MTAwMDAwMDMyCis6MTAzNEMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTBECis6MTAzNEQwMDAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjQwMDAwMDYyMkVECis6MTAzNEUwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0NkU4MTAwMDAwMEE5Cis6MTAzNEYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMURFCis6MTAzNTAwMDAwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMEI4Cis6MTAzNTEwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMDNGCis6MTAzNTIwMDAwMDYwNDgwNTAwMDAwNjI3MDAwMDAwMDAwMDI4MjRGMDg1Cis6MTAzNTMwMDAwMDAwMDAwMDAwMDAwMDA3MDAyODBBMjMwMDAwMDAwMDJGCis6MTAzNTQwMDAwMDAwMDAwMTAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAzNTUwMDAwQUUwMDAwMDAwMDAwNDc1MDAwMDAwMDAwMDJGMDBDOTEwCis6MTAzNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDRFMDAwMDAwMDAwMDQ4RUU1Cis6MTAzNTcwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OUIwMDAwMDAwMjZBCis6MTAzNTgwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEZFCis6MTAzNTkwMDAwMDAwMDQ3QTAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMEI1Cis6MTAzNUEwMDAwMDAwMDAwMDAyRTAwMDAwMDAwMDA0OEUwMDAwMDAwMEE3Cis6MTAzNUIwMDAwMDQwMDAwMDAwMDAwNDlCMDAwMDAwMDMwMDJGMDIyMkQ2Cis6MTAzNUMwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ3RjhFCis6MTAzNUQwMDAwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzNUUwMDAwQ0UwMDAwMDAwMDAwNDhFMDAwMDAwMDAwMDQwMDAwMDFECis6MTAzNUYwMDAwMDAwMDQ5QjAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMEQ1Cis6MTAzNjAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0ODQwMDAwMDAwMDQ4Cis6MTAzNjEwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEM4Cis6MTAzNjIwMDAwMDAwMDQ4RTAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5QjI5Cis6MTAzNjMwMDAwMDAwMDAwNTAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDMyCis6MTAzNjQwMDAwQUUwMDAwMDAwMDAwNDg5MDAwMDAwMDAwMDJGMDBDOTBCCis6MTAzNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDQ4RUYyCis6MTAzNjYwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OUIwMDAwMDAwNjc1Cis6MTAzNjcwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDBECis6MTAzNjgwMDAwMDAwMDQ4RTAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMEIwCis6MTAzNjkwMDAwMDAwMDAwMDA4RTAwMDAwMDAwMDA0OEUwMDAwMDAwMEIwCis6MTAzNkEwMDAwMDQwMDAwMDAwMDAwNDlCMDAwMDdGMDAwMDI4MEEyMTY5Cis6MTAzNkIwMDAwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMDcyCis6MTAzNkMwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwODA4Cis6MTAzNkQwMDAwMDIxMEEyMzAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEM4Cis6MTAzNkUwMDAwMDAwMDQ5ODAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDNGCis6MTAzNkYwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTAzNzAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDY5Cis6MTAzNzEwMDAwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMEQwCis6MTAzNzIwMDAwMDAwMDAwMEMwMjA0NDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTAzNzMwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDYxCis6MTAzNzQwMDAwMDAwMDAwMDAwMDA3RjAwMDAyODBBMjEwMDAwMDAwMEE3Cis6MTAzNzUwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzNzYwMDAwQUUwMDAwMDAwMDAwNEExMDAwMDAwMDBDMDIwMDAwMEVBCis6MTAzNzcwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDY5Cis6MTAzNzgwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAzNzkwMDAwMDQwNEMwODAwMDAwNDYxMDAwMDAwMDBDMDIwMDgwMDQ4Cis6MTAzN0EwMDAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMDdBCis6MTAzN0IwMDAwMDAwMDAxMTQwMjExMjIwMDAwMDAwMDAwMDAwMDAxMjUzCis6MTAzN0MwMDA0MDIxMTYyMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTYzCis6MTAzN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDdGCis6MTAzN0UwMDAwMDAwMDAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMDkxCis6MTAzN0YwMDAxNEUwMDAwMDAwMDAwNEFCMDAwNDAwMDBDMDQ5NEEyMEFGCis6MTAzODAwMDAwMDAwMDRBQ0ZGRkJGRkZGQzAyODRBMjAwMDAwMDAwMEJFCis6MTAzODEwMDAwMDAwMDAwMDAwMjEwMjIzMDAwMDAwMDAwMDAwMDAwMDYyCis6MTAzODIwMDAxNEUwMDAwMDAwMDAwNEI4MDAwMDAwMDBDMDIwNDgwMEMwCis6MTAzODMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDYwCis6MTAzODQwMDAwMDAwMDAwMDAwMjEwMjI0MDAwMDAwMDAwMDAwMDAwMDMxCis6MTAzODUwMDAxNEMwMDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTlFCis6MTAzODYwMDAwMDAwMDAwMDAwMDAwMDBDMDAyMDQ4MTEwMDAwMDAwMEQzCis6MTAzODcwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTAzODgwMDAxNEMwMDAwMDAwMDAwNEI0QTAwMDAwMDAwMDIwNDQxMTk3Cis6MTAzODkwMDAwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMDRGCis6MTAzOEEwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNDFFCis6MTAzOEIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkIwMDIwNDQxMThFCis6MTAzOEMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMEMwCis6MTAzOEQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNUVECis6MTAzOEUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkMwMDIwNDQxMTVECis6MTAzOEYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMDkwCis6MTAzOTAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDYyCis6MTAzOTEwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDdCCis6MTAzOTIwMDAwMDAwMDRCMjAwMDAwMDAwQzAyMTBBMjAwMDAwMDAwMEQ2Cis6MTAzOTMwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0Q0I4MTAwMDAwMDYzCis6MTAzOTQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTg5Cis6MTAzOTUwMDAwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDY0Cis6MTAzOTYwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAzOTcwMDBDMDYwNDgwMDAwMDAwNjI3MDAwMDAwMDAwMDQwMDAwMDcyCis6MTAzOTgwMDAwMDAwMDRDRjgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDZFCis6MTAzOTkwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MDAwMEE5Cis6MTAzOUEwMDBDMDI5NDYyMDAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMEE4Cis6MTAzOUIwMDAwMDAwMDYyMjAwMDAwMDAxMDAyMTAyMjIwMDAwMDAwMDk5Cis6MTAzOUMwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0RDYwMDAwMjE2OUJGCis6MTAzOUQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDRBCis6MTAzOUUwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEFGCis6MTAzOUYwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBDQUZFQkFCRTBGCis6MTAzQTAwMDAwMDQwNDgxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDQwMEY5Cis6MTAzQTEwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MTAwMDAwMDAwMDRFCis6MTAzQTIwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTlGCis6MTAzQTMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTdGCis6MTAzQTQwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMEVGCis6MTAzQTUwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2MjIwMDAwMDAwMDZCCis6MTAzQTYwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDJGCis6MTAzQTcwMDAwMDAwMDREODAwMDAyMTgwMDAyMDQ0MTEwMDAwMDAwMDU0Cis6MTAzQTgwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAzQTkwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDFFCis6MTAzQUEwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDM2Cis6MTAzQUIwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwM0JCCis6MTAzQUMwMDAwMDMzM0UyRjAwMDAwMDAwMDAwMDAwMDEwMDIxMDIyMTExCis6MTAzQUQwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDUwOEU1Cis6MTAzQUUwMDAwMDAwMDAyQzAwMjAwQTJEMDAwMDAwMDAwMDA0MDAwMDRGCis6MTAzQUYwMDAxOEUwMEMxMTAwMDAwNEY3MDAwMDAwMDEwMDMzM0UyRjE1Cis6MTAzQjAwMDAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMEI2Cis6MTAzQjEwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDNCCis6MTAzQjIwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMkM2Cis6MTAzQjMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDVECis6MTAzQjQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMjE2OUMzCis6MTAzQjUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjg2Cis6MTAzQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMEVBCis6MTAzQjcwMDAwMDAwMDAwODAwMzAwQTIyMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAzQjgwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBEOEMwNDgwMDJECis6MTAzQjkwMDAwMDAwMDRFQjAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDM3Cis6MTAzQkEwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAzQkIwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjM2Cis6MTAzQkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMENECis6MTAzQkQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAyRDkwCis6MTAzQkUwMDAwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDAwMDI5MEM4M0JFCis6MTAzQkYwMDAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMEM2Cis6MTAzQzAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDRBCis6MTAzQzEwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMkQ1Cis6MTAzQzIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDZDCis6MTAzQzMwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAxMTRCCis6MTAzQzQwMDAwMDIxMDIyNDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDU5Cis6MTAzQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDRCMjZFCis6MTAzQzYwMDAwMDAwMDAyQ0MwMjAzNjIwMDAwMDAwMDAwMDAwMDAyREM1Cis6MTAzQzcwMDBDMDQwMzYyMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyMTlCCis6MTAzQzgwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDUwRDRFCis6MTAzQzkwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMEI5Cis6MTAzQ0EwMDBEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDQwMDM3Cis6MTAzQ0IwMDAwMDAwMDAwMUI1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ5Cis6MTAzQ0MwMDAwMDAwMjAwMDAwMjA0ODExMDAwMDAwMDBCNjAwMDAwMEE1Cis6MTAzQ0QwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEEwMDAwMDIwNDgxMTU2Cis6MTAzQ0UwMDAwMDAwMDAwMEI3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEE4Cis6MTAzQ0YwMDAwMDAwQzAwMDAwMjA0ODExMDAwMDAwMDBCODAwMDAwMEQzCis6MTAzRDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEY4RTAwMDIwNDgxMUVECis6MTAzRDEwMDAwMDAwMDAwMEI5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDc1Cis6MTAzRDIwMDAwMDAwRjg4MDAwMjA0ODExMDAwMDAwMDBCQTAwMDAwMEU4Cis6MTAzRDMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEUwMDAwMDIwNDgxMUI1Cis6MTAzRDQwMDAwMDAwMDAwMEJCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDQzCis6MTAzRDUwMDAwMDAwRjAwMDAwMjA0ODExMDAwMDAwMDBCQzAwMDAwMDNFCis6MTAzRDYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEYzRkMwMDIwNDgxMTc2Cis6MTAzRDcwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDRECis6MTAzRDgwMDAwMDAwMDAwMjAwMjA0ODExMDAwMDAwMDAwMDAwMDBGRkI5Cis6MTAzRDkwMDAwMDI4MEUzMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMzY5Cis6MTAzREEwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDUyMTIxCis6MTAzREIwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTAzREMwMDAxNEMwMDAwMDAwMDAwNTM2MDAwMDAwMDAwMDIwMEMxMUE3Cis6MTAzREQwMDAwMDAwMDAwMDAwMDAwMDFDMDAyMDM2MjMwMDAwMDAwMDRFCis6MTAzREUwMDAwMDAwMDAyQjAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyOTA2Cis6MTAzREYwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjgwMDIwMzYyM0E5Cis6MTAzRTAwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDM2MjMwMDAwMDAwMDIyCis6MTAzRTEwMDAwMDAwMDAyNTAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNkRFCis6MTAzRTIwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMTUwMDIwMzYyMzhCCis6MTAzRTMwMDAwMDAwMDAwMDAwMDAwMDE2MDAyMDM2MjMwMDAwMDAwMEYzCis6MTAzRTQwMDBGRkZGRTAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAyMTM2Cis6MTAzRTUwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyMzRFCis6MTAzRTYwMDAwMDAwMDAwMDAwMDAxRkZGMDAyMDBDMTEwMDAwMDAwMEY3Cis6MTAzRTcwMDAwMDAwMDAyMzAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNDgyCis6MTAzRTgwMDAwMDIwMzYyMzAwMDAwMDAwRjFGRkZGRkYwMDI4M0EyRTNCCis6MTAzRTkwMDAwMDAwMDAwMDAwMDAwMDFBQzAyMjBFMjAwMDAwMDAwMEY4Cis6MTAzRUEwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDA4MTAwMDAwMEMyCis6MTAzRUIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTBFCis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDJBNDAyMDM2MjAwMDAwMDAwMDEyCis6MTAzRUQwMDA4NzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTAzRUUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRjQwMDIwNDQxMUEwCis6MTAzRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDRBCis6MTAzRjAwMDA5RDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxRjgwCis6MTAzRjEwMDA0MDIxNEEyMDAwMDAwMDAwOTYwMDAwMDAwMDIwNDQxMUNCCis6MTAzRjIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDY5Cis6MTAzRjMwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTAzRjQwMDBDMDIwMTAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMTYyNDA3Cis6MTAzRjUwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDAwMDhECis6MTAzRjYwMDAwMDAwMDAxRDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAwM0I4Cis6MTAzRjcwMDAwMDI4MUUyMzAwMDAwMDAwMDAwMDAwMDgwMDIyMjIyMzY5Cis6MTAzRjgwMDAwMDAwMDAwMEZGRkZGMDAwMDAyODIyMjgwMDAwMDAwMEQxCis6MTAzRjkwMDAwMDAwMDAwMDAwMjkyMEU4MDAwMDAwMDAwMDAwMDAxRkQxCis6MTAzRkEwMDAwMDIwMzYyODAwMDAwMDAwMDAwMDAwMTgwMDIxMUUyMzE5Cis6MTAzRkIwMDAwMDAwMDAwMDAwMDAwMDIwMDAyMDM2MjcwMDAwMDAwMDY0Cis6MTAzRkMwMDAwMDAwMDAwMjAwMjIxNjI0MDAwMDAwMDAwMDAwMDAwMDkzCis6MTAzRkQwMDAwMDMwMTRBODAwMDAwMDAwMDAwMDAwMUUwMDIwMzYyNTVDCis6MTAzRkUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTFBMjQwMDAwMDAwMDZGCis6MTAzRkYwMDAxMDAwMDAwMDAwMjgxQTI2MDAwMDAwMDBFRkZGRkZGRjVECis6MTA0MDAwMDAwMDI4M0EyRTAwMDAwMDAwMDAwMDAwMDAwMDQ5MzhDRUQxCis6MTA0MDEwMDAwMDAwMDYxMDAwMDAwMDAxNDAyODBBMjAwMDAwMDAwMEY3Cis6MTA0MDIwMDAwMDAwMDAwNjQwMjgwRTIwMDAwMDAwMDAwMDAwMDMwMEYxCis6MTA0MDMwMDBDMDI4MTIyMDAwMDAwMDAwMDAwMDAwMDgwMDIxMTIyNDA3Cis6MTA0MDQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE2MjAwMDAwMDAwMDVBCis6MTA0MDUwMDAwMDAwMDAwMEMwMjAxQTIwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTA0MDYwMDAwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDM3Cis6MTA0MDcwMDAwMDAwMDU2QzgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ5Cis6MTA0MDgwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjI1ODNDCis6MTA0MDkwMDAwMDMwMEEyNDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyMkVECis6MTA0MEEwMDAwMDAwMDYyMjAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMEU5Cis6MTA0MEIwMDAwMDAwMDAwMDAwMjA0ODA1MDAwMDAwMDAwMDAyMDAwMDkxCis6MTA0MEMwMDAwMDI5NEEyNjAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMERGCis6MTA0MEQwMDAwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDI3Cis6MTA0MEUwMDAwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDdBCis6MTA0MEYwMDAwQ0MwMDAwMDAwMDAwNTc0MDAwMDAwMDBDMDIwMUMxMDZGCis6MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDU4MjI4Cis6MTA0MTEwMDAwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0MTIwMDAwQ0MwMDAwMDAwMDAwNTc0ODEwMDAwMDAwMDIwNDQxMTU0Cis6MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDA1Cis6MTA0MTQwMDAwMDAwMjI1ODAwMzAwQTI0MDAwMDAwMDAwMDA0MDAwMDkzCis6MTA0MTUwMDAwMDY5NDYyMjAwMDAwNjIyMDAwMDAwMDBDMDIwMUMxMDVBCis6MTA0MTYwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDU4MkM4Cis6MTA0MTcwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMEVCCis6MTA0MTgwMDAwQ0MwMDAwMDAwMDAwNTc4MDAwMDAwMDBDMDIwMUMwMEVBCis6MTA0MTkwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDU4Mjk4Cis6MTA0MUEwMDAwMDAwMDAwNDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTA0MUIwMDAwQ0MwMDAwMDAwMDAwNTgwODEwMDAwMDAwMDIwNDQxMUI4Cis6MTA0MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDc2Cis6MTA0MUQwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMERDCis6MTA0MUUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDYwNDgwMDNGCis6MTA0MUYwMDAwMDAwMDYyNzAwMDAwMDAwMDA0MDFDMTAwMDAwMDU4MjlGCis6MTA0MjAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTA0MjEwMDBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUwMDAwMEIwCis6MTA0MjIwMDAwMDAwMDU4NDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVDM0RECis6MTA0MjMwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDI5Cis6MTA0MjQwMDAwQ0MwMDAwMDAwMDAwNTkyMDAwMEEyQjcwMDIwNDQxMTNECis6MTA0MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMEVGCis6MTA0MjYwMDAwMDAwMDAzMzAwMjAyNjJEMDAwMDAwMDAwMDAwMDAxQThFCis6MTA0MjcwMDAwMDIxMjIyOTAwMDAwMDAwMDAwMDAwMDYwMDIyMjYyOTVCCis6MTA0MjgwMDAwMDAwMDAwMDAwMDBBMkM0MDAyMDQ0MTEwMDAwMDAwMDUzCis6MTA0MjkwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDAwMDAwMDAwMEJECis6MTA0MkEwMDAwMEUwMDAwMDAwMDAwNTkwMDAwMEEyRDEwMDIwNDQxMUIxCis6MTA0MkIwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDgwMDAwMDAwMDZFCis6MTA0MkMwMDAwMDAwQTJEMTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTA1Cis6MTA0MkQwMDAwMDUwNEEyODAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyNEM2Cis6MTA0MkUwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDVBMDVECis6MTA0MkYwMDAwMDAwQTJCQjAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEVDCis6MTA0MzAwMDAwMDIwNDgwNzAwMDAwMDAwMDAwMDAwMzQwMDIwMjYyRDk3Cis6MTA0MzEwMDAwMDAwMDAwMDAwMDAwMDFBMDAyMTIyMjkwMDAwMDAwMDE3Cis6MTA0MzIwMDAwMDAwMDAwNjAwMjIyNjI5MDAwMDAwMDAwMDAwQTJDNUFGCis6MTA0MzMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOUE3Cis6MTA0MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU5RUVBCis6MTA0MzUwMDAwMDAwQTJEMjAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTA0MzYwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDIwMDIwNDQxMUQ0Cis6MTA0MzcwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDdBCis6MTA0MzgwMDAwMDAwMDAwMjAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTA0MzkwMDAwQ0MwMDAwMDAwMDAwNUFFMDAwMEEyQkYwMDIwNDQxMUM4Cis6MTA0M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDlFCis6MTA0M0IwMDAwMDAwMDAzNTAwMjAyNjJEMDAwMDAwMDAwMDAwMDAxQTNCCis6MTA0M0MwMDAwMDIxMjIyOTAwMDAwMDAwMDAwMDAwMDYwMDIyMjYyOTBBCis6MTA0M0QwMDAwMDAwMDAwMDAwMDBBMkM2MDAyMDQ0MTEwMDAwMDAwMDAwCis6MTA0M0UwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDAwMDAwMDAwMDZDCis6MTA0M0YwMDAwMEUwMDAwMDAwMDAwNUFDMDAwMEEyRDMwMDIwNDQxMTQyCis6MTA0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDgwMDAwMDAwMDFDCis6MTA0NDEwMDAwMDAwQTJEMzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUIxCis6MTA0NDIwMDAwMDUwNEEyODAwMDAwMDAwMDAwMEEyQzMwMDIwNDQxMUYwCis6MTA0NDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDBECis6MTA0NDQwMDAwMDAwMDAzNjAwMjAyNjJEMDAwMDAwMDAwMDAwMDAxQUE5Cis6MTA0NDUwMDAwMDIxMjIyOTAwMDAwMDAwMDAwMDAwMDYwMDIyMjYyOTc5Cis6MTA0NDYwMDAwMDAwMDAwMDAwMDBBMkM3MDAyMDQ0MTEwMDAwMDAwMDZFCis6MTA0NDcwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDAwMDAwMDAwMERCCis6MTA0NDgwMDAwMEUwMDAwMDAwMDAwNUI4MDAwMEEyRDQwMDIwNDQxMUE0Cis6MTA0NDkwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDgwMDAwMDAwMDhDCis6MTA0NEEwMDAwMDAwQTJENDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTIwCis6MTA0NEIwMDAwMDUwNEEyODAwMDAwMDAwODUwMDAwMDAwMDIwNDQxMTQwCis6MTA0NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDEwMDAwMDAwMDgzCis6MTA0NEQwMDAwMDAwMzA0QTAwMjA0NDExMDAwMDAwMDAwMTAwMDAwMEVDCis6MTA0NEUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDEzCis6MTA0NEYwMDAwMDAwMDVCRUE0MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDIwCis6MTA0NTAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTA0NTEwMDBDMDYwMDAwMDAwMDAwNUMzMDAwMDAwMDBDMDQwMDQwMEFGCis6MTA0NTIwMDAwMDAwMDAwMTAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMENFCis6MTA0NTMwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAzRjg0Cis6MTA0NTQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMTNBCis6MTA0NTUwMDAwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMEEzCis6MTA0NTYwMDAwMDAwMDAwNTAwMjA0ODExMDAwMDAwMDAwMDAwQTFGNDM4Cis6MTA0NTcwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTRECis6MTA0NTgwMDAwMDAwMDAwMDg4MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDJFCis6MTA0NTkwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBGRjAwMDAwMEEyCis6MTA0NUEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTFECis6MTA0NUIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDgxCis6MTA0NUMwMDAwMDAwMDAwMjAwODA0ODExMDAwMDAwMDAwMDAwMDAwMDEwCis6MTA0NUQwMDAwRUUwMDAwMDAwMDAwNUQ2MDAwMDEwMDAwMDIwMDgxMUM5Cis6MTA0NUUwMDAwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjIwMDAwMDAwMDI4Cis6MTA0NUYwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA1REEwMDAwMDAwMDdDCis6MTA0NjAwMDAwMDYwMDAwMDAwMDAwNUMzOTgwMDAwMDAwMDIwNDQxMTc1Cis6MTA0NjEwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MTEwMDAwMDAwMEMxCis6MTA0NjIwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA1REEwMDAwMDAwMDhCCis6MTA0NjMwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMEEyQTQwMDIwNDQxMUJBCis6MTA0NjQwMDAwMDAwMDAwMDAwMDAwMDIyMDAyMDQ4MTEwMDAwMDAwMENGCis6MTA0NjUwMDA4OTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTVCCis6MTA0NjYwMDAwMDQwNDgxMTAwMDAwNUNEOTcwMDAwMDAwMDIwNDQxMUQzCis6MTA0NjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEMxCis6MTA0NjgwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDJCCis6MTA0NjkwMDAwMDQwNDgxMTAwMDAwNUNEMDAwMDAwMDAwMDYwMDAwMDRGCis6MTA0NkEwMDAwMDAwMDVGMzAwMDFBMkE0QzAyMDQ0MTEwMDAwMDAwMDk2Cis6MTA0NkIwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNzQwMDAwMjAxMDg0Cis6MTA0NkMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMTAwMDAwMDIwNDgxMUZCCis6MTA0NkQwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEU0Cis6MTA0NkUwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjE3Q0IzCis6MTA0NkYwMDAwMDIwNDQxMTAwMDAwMDAwMDk4MDAwMDAwMDIwNDgxMTQzCis6MTA0NzAwMDAwMDAwMDAwMEZGRkZGRkZGMDAyMDQ4MTEwMDAwMDAwMDM0Cis6MTA0NzEwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA0NzIwMDAxNzAwMDAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMTE5Cis6MTA0NzMwMDAwMDAwMDYyMjAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMERGCis6MTA0NzQwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwNDkxCis6MTA0NzUwMDAwMDQwNEMxMTAwMDAwNUVEMDAwMDAwMDAwMDQwMDAwMDhBCis6MTA0NzYwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEM3Cis6MTA0NzcwMDAwMDAwMDAwNDAwMjkxRTI3MDAwMDAwMDAwMDAwMDAxN0IwCis6MTA0NzgwMDAwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRENBCis6MTA0NzkwMDAwMDAwMDAwMEZGRkZGRkZCMDAyODFFMjcwMDAwMDAwMEI0Cis6MTA0N0EwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDAwMDAwMDAxN0ZFCis6MTA0N0IwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDgwMDI5MUUyNzE4Cis6MTA0N0MwMDAwMDAwMDAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMEY1Cis6MTA0N0QwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBGRkZGRkZGNzYzCis6MTA0N0UwMDAwMDI4MUUyNzAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyNzY4Cis6MTA0N0YwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMEZECis6MTA0ODAwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNzQwMDAwMjAxMDMyCis6MTA0ODEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMTAwMDAwMDIwNDgxMUE5Cis6MTA0ODIwMDAwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTEwMDAwMDAwMDc2Cis6MTA0ODMwMDAwMTgwMDAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRkZGRjgyCis6MTA0ODQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTc2Cis6MTA0ODUwMDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDQxCis6MTA0ODYwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTUxCis6MTA0ODcwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMTY2Cis6MTA0ODgwMDAwMDAwMDYyMjAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDhFCis6MTA0ODkwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2MjEwMDAwMDAxMDBECis6MTA0OEEwMDAwMDQwNEMxMTAwMDAwNjA3MDAwMDAwMDBDMDIwMDQwMDdBCis6MTA0OEIwMDAwMDAwMDAwMDAwMDAwMDAwMzhDMDAwMDAwMDAwMDAwMDAwCis6MTA0OEMwMDAwMDAwMDAxRDAwMjAwQTJEMDAwMDAwMDAwMDAwMDAxRTU2Cis6MTA0OEQwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMUYwMDIwMTIyREZGCis6MTA0OEUwMDAwMDAwMDAwMDAwMDAwMDIwMDAyMDE2MkQwMDAwMDAwMDQ1Cis6MTA0OEYwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTA0OTAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNUNFCis6MTA0OTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDEwMDAwMDAwMDJFCis6MTA0OTIwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwNENBCis6MTA0OTMwMDAwMDMwMTIyNDAwMDAwMDAwMDAwMDAwMDAwMDJGMDA2NDdFCis6MTA0OTQwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDYyMDc1Cis6MTA0OTUwMDAwMDAwMDAwMzAwMjgxQTIyMDAwMDAwMDAwMDAwMDAwOEU4Cis6MTA0OTYwMDAwMDIyMTIyMjAwMDAwMDAwRkZGRkYwMDAwMDI4MTIyNEE1Cis6MTA0OTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTEwQzQwMDAwMDAwMDNBCis6MTA0OTgwMDAwMDAwMDAxRjAwNDAzNjI0MDAwMDAwMDAwMDAwMDAwMDZFCis6MTA0OTkwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQUMwMDAwMEJECis6MTA0OUEwMDAwMDAwMDYyMjlGMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMENCCis6MTA0OUIwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA0OUMwMDAxQUUwMDAwMDAwMDAwNjI1MDAwMDAwMDAwMDgwMDAwMDQyCis6MTA0OUQwMDAwMDAwMDAwMDAwMDAwMDAwMUFDMDAwMDAwMDAwMDYyN0QwCis6MTA0OUUwMDA5RTAwMDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTc0Cis6MTA0OUYwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAxQUUwMDAwMDQ0Cis6MTA0QTAwMDAwMDAwMDYyQTAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMEY2Cis6MTA0QTEwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMTAwMDFCCis6MTA0QTIwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMUM0Cis6MTA0QTMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjRBCis6MTA0QTQwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMzcwCis6MTA0QTUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTYwMDIwNDQxMUYwCis6MTA0QTYwMDAwMDAwMDAwMDAwMDAwMDFCMDAyMDQ4MTEwMDAwMDAwMEIyCis6MTA0QTcwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTIzCis6MTA0QTgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkRDMDIwNDQxMUQ5Cis6MTA0QTkwMDAwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMDhBCis6MTA0QUEwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAyNDZCCis6MTA0QUIwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODE3Cis6MTA0QUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDZECis6MTA0QUQwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyMjNCCis6MTA0QUUwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyOEU3Cis6MTA0QUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDNECis6MTA0QjAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyMzA5Cis6MTA0QjEwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyN0IzCis6MTA0QjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDBDCis6MTA0QjMwMDAwMDAwMDAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMDAwMERDCis6MTA0QjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTA0QjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTA0QjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTA0QjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTA0QjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTA0QjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0QkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA0QkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTA0QkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTA0QkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTA0QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTA0QkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTA0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTA0QzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTA0QzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTA0QzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTA0QzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTA0QzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTA0QzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTA0QzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTA0QzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTA0QzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTA0Q0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0Q0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA0Q0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTA0Q0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTA0Q0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTA0Q0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTA0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTA0RDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTA0RDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTA0RDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTA0RDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTA0RDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTA0RDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTA0RDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTA0RDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTA0RDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTA0REEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTA0REIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0REMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA0REQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTA0REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTA0REYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTA0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTA0RTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTA0RTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTA0RTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTA0RTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTA0RTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTA0RTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTA0RTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTA0RTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTA0RTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTA0RUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTA0RUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTA0RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0RUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA0RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTA0RUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTA0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTA0RjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTA0RjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTA0RjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTA0RjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTA0RjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTA0RjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTA0RjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTA0RjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTA0RjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTA0RkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTA0RkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTA1MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA1MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTA1MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA1MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA1MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTA1MEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA1MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTA1MTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTA1MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTA1MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTA1MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA1MjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA1MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTA1MkIwMDAwMTQyMDUwQTA1QkEwMjUwMDAwMDAwMDAwMUMzMDE2ODVFCis6MTA1MkMwMDAwNDQxMDVCQTAwMDAwMDAwMDIyNTAyMDkwMjUwMDE1MTA0Cis6MTA1MkQwMDAwMDAwMDAwMDAyMjMwMjQ1MDJBMDAyNDEwMDAwMDAwMDdECis6MTA1MkUwMDAwM0Q3MDVCQTA1QkEwNUJBMDAwMDAwMDAwNUUyMDVFM0Q4Cis6MTA1MkYwMDAwMzFGMDVCQTAwMDAwMDAwMDMyMDA1QkYwMzIwMDM0QTc2Cis6MTA1MzAwMDAwMDAwMDAwMDAzMzQwMjgyMDM0QzAzM0UwMDAwMDAwMDUyCis6MTA1MzEwMDAwNUJBMDVCQTA1QkEwNUJBMDAwMDAwMDAwNUJBMDU1Nzc2Cis6MTA1MzIwMDAwNUJBMDMyQTAwMDAwMDAwMDNCQzA1QkEwNEMzMDM0RUZCCis6MTA1MzMwMDAwMDAwMDAwMDA0QTIwNDU1MDQzRjA1QkEwMDAwMDAwMDZDCis6MTA1MzQwMDAwNEQ4MDVCQTA0NDMwNEU1MDAwMDAwMDAwNDU1MDUwRjI1Cis6MTA1MzUwMDAwMzVCMDM3QjAwMDAwMDAwMDVCQTA1QkEwNUJBMDVCQTc1Cis6MTA1MzYwMDAwMDAwMDAwMDA1QkEwNUJBMDVCQTA1QkEwMDAwMDAwMDQxCis6MTA1MzcwMDAwNUJBMDVCQTA1RDgwNUMxMDAwMDAwMDAwNUJBMDVCQThFCis6MTA1MzgwMDAwMDA3MDVCQTAwMDAwMDAwMDVCQTA1QkEwNUJBMDVCQTVCCis6MTA1MzkwMDAwMDAwMDAwMDA1QkEwNUJBMDVCQTA1QkEwMDAwMDAwMDExCis6MTA1M0EwMDAwM0Y4MDNFRDA0MDgwNDA2MDAwMDAwMDAwNDBFMDQwQURDCis6MTA1M0IwMDAwNDBDMDQxMDAwMDAwMDAwMDQxQzA0MTgwNDI0MDQyMDQxCis6MTA1M0MwMDAwMDAwMDAwMDA0MkMwNDI4MDQzNDA0MzAwMDAwMDAwMDE1Cis6MTA1M0QwMDAwNUJBMDVCQTA0M0EwNDM4MDAwMDAwMDAwNUJBMDVCQTU3Cis6MTA1M0UwMDAwNUJBMDVCQTAwMDAwMDAwMDVCQTA1QkEwNUJBMDVCQTQzCis6MTA1M0YwMDAwMDAwMDAwMDAwMDIwNjBFMDYyQzAwMDYwMDAwMDAwMDVGCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JTNzgwX3BmcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SUzc4MF9wZnAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4ODA0MQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SUzc4MF9wZnAuYmluLmloZXgKQEAgLTAsMCArMSwxNDUgQEAKKzoxMDAwMDAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwN0MwMzhCRUQKKzoxMDAwMTAwMDAwODAwMURCMDA3QzAzOEIwMEQ0NDAxRTAwRUUwMDFFM0MKKzoxMDAwMjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwQzQxODM4QzMKKzoxMDAwMzAwMDAwQ0EyNDAwMDBDQTI4MDAwMDk1ODFDQjAwQzQxQzNBRTUKKzoxMDAwNDAwMDAwQzNDMDAwMDBDQTA4MDAwMENBMEMwMDAwN0M3NDRCNEEKKzoxMDAwNTAwMDAwQzIwMDA1MDA5OUMwMDAwMEM0MUMzQTAwN0M3NDRDMkEKKzoxMDAwNjAwMDAwQzBGRkUwMDAwNDJDMDgwMDMwOTAwMjAwN0QyNTAwNTUKKzoxMDAwNzAwMDAwMzUxNDAyMDA3RDM1MEIwMDI1NTQwNzAwN0NENTgwMjcKKzoxMDAwODAwMDAwMjU5QzA3MDA5NUMwMDQwMEQ1MDAxQjAwN0VEREMxNDMKKzoxMDAwOTAwMDAwN0Q5RDgwMDBENjgwMUIwMEQ1ODAxQjAwRDQ0MDFFQjMKKzoxMDAwQTAwMDAwRDU0MDFFMDBENjQwMUUwMEQ2ODAxRTAwRDQ4MDFFMDMKKzoxMDAwQjAwMDAwRDRDMDFFMDA5NzgzRDMwMEQ1QzAxRTAwQ0EwODAwMUMKKzoxMDAwQzAwMDAwODAwMDFBMDBDQTBDMDAwMEU0MDExRTAwRDQwMDFFQ0IKKzoxMDAwRDAwMDAwODAwMDBDMDBDNDE4MzgwMEU0MDEzRTAwRDQwMDFFNkIKKzoxMDAwRTAwMDAwODAwMDBDMDBDNDE4MzgwMEQ0NDAxRTAwRUUwMDFFMzIKKzoxMDAwRjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTFFMDQKKzoxMDAxMDAwMDAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwRjEKKzoxMDAxMTAwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDEzRTAwRDQwMDFFOUYKKzoxMDAxMjAwMDAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMjMKKzoxMDAxMzAwMDAwN0U4MjhCMDBDQTA4MDAwMENBMEMwMDAwODAwMURCMzAKKzoxMDAxNDAwMDAwRDQ4MDI0MDBDQTA4MDAwMDdDMDBDMDAwQzgxNDI1MjgKKzoxMDAxNTAwMDAwQzgxODI0MDA3Qzk0ODgwMDdDOTg4MDAwQzIwMDAzQUEKKzoxMDAxNjAwMDAwRDQwMDc1MDA3Qzc0NEMwMDgwMDA2NDAwRDQ0MDFFRjQKKzoxMDAxNzAwMDAwQ0ExODAwMDBENDQwMUUwMEQ1ODAxRTAwODAwMDYyMTYKKzoxMDAxODAwMDAwRDQwMDc1MDBENDQwMUUwMENBMDgwMDAwQ0EwQzAwNEMKKzoxMDAxOTAwMDAwQ0ExMDAwMDBENDgwMTkwMEQ0QzAxODAwRDUwMDE3ODAKKzoxMDAxQTAwMDAwRDQ4MDFFMDBENEMwMUUwMEQ1MDAxRTAwRTIwMDFFMzgKKzoxMDAxQjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwRDQwMDc1RkQKKzoxMDAxQzAwMDAwRDQ0MDFFMDBDQTA4MDAwMENBMEMwMDAwQ0ExMDAwN0IKKzoxMDAxRDAwMDAwRDQ4MDE5MDBENEMwMTgwMEQ1MDAxNzAwRDQ4MDFFQTgKKzoxMDAxRTAwMDAwRDRDMDFFMDBENTAwMUUwMEVFMDAxRTAwQ0EwNDAwOTAKKzoxMDAxRjAwMDAwQTAwMDAwMDA3RTgyOEIwMENBMDgwMDAwMjQ4QzAxNTEKKzoxMDAyMDAwMDAwRDQ4MDYwMDA5NEMwMDMwMDA0MTAwMTAwMDQxMDAyQjgKKzoxMDAyMTAwMDAwRDUwMDI1MDBENDQwMUUwMDgwMDAwMDAwRDQ4MDFFQzAKKzoxMDAyMjAwMDAwQ0EwODAwMDBENDgwNjEwMEQ0NDAxRTAwODAwMDAwOTUKKzoxMDAyMzAwMDAwRDQ4MDFFMDBDQTA4MDAwMENBMEMwMDAwRDQ0MDFFNzIKKzoxMDAyNDAwMDAwRDQ4MDE2MDBENEMwMTYwMEQ0ODAxRTAwODAwMURCQ0MKKzoxMDAyNTAwMDAwRDRDMDFFMDBDNjA4NDMwMENBMEMwMDAwQ0ExMDAwMkIKKzoxMDAyNjAwMDAwOTQ4MDA0MDBDQTE0MDAwMEU0MjBGMzAwRDQyMDEzOUEKKzoxMDAyNzAwMDAwRDU2MDY1MDBENEUwMUMwMEQ1MjAxQzAwRDU2MDFDQjIKKzoxMDAyODAwMDAwODAwMDAwMDAwNjIwMDEwMEM2MDg0MzAwQ0EwQzAwRTAKKzoxMDAyOTAwMDAwQ0ExMDAwMDA5NDgzRjcwMENBMTQwMDAwRTQyMEYzQTEKKzoxMDAyQTAwMDAwODAwMDlDMDBENDIwMTMwMEM2MDg0MzAwQ0EwQzAwNDQKKzoxMDAyQjAwMDAwQ0ExMDAwMDA5ODgzRUYwMENBMTQwMDAwRDQwMDY0NDQKKzoxMDAyQzAwMDAwODAwMEIwMDAwMDAwMDAwMEM0MTQzMjAwQzYxODQzRDMKKzoxMDAyRDAwMDAwQzQwODJGMDA5NTQwMDUwMEM0MEMzMDAwRDQ0MDFFMTcKKzoxMDAyRTAwMDAwODAwMDAwMDBFRTAwMUUwMDk1ODNGNTAwQzQxMDMxNzAKKzoxMDAyRjAwMDAwRDQ0MDMzMDBENTIwNjUwMEQ0QTAxQzAwRDRFMDFDRkQKKzoxMDAzMDAwMDAwRDUyMDFDMDBFNDAxNUUwMEQ0MDAxRTAwODAwMDAwMjcKKzoxMDAzMTAwMDAwMDYyMDAxMDBDQTE4MDAwMDBBMjAwMTAwRDYwMDc2NUQKKzoxMDAzMjAwMDAwQzQwODM2MDA5ODgwMDcwMEM2MTA0NTAwOTUwMTEwRUIKKzoxMDAzMzAwMDAwRDQwMDFGMDBENDYwNjIwMDgwMDAwMDAwRDQyMDYyNUUKKzoxMDAzNDAwMDAwQ0MzODM1MDBDQzE0MzMwMDg0MDFERTAwRDQwMDcyQjgKKzoxMDAzNTAwMDAwRDU0MDFFMDA4MDAwMDAwMEVFMDAxRTAwRTIwMDFBRTIKKzoxMDAzNjAwMDAwODQwMURFMDBFMjAwMUEwMENDMTA0QjAwQ0MwNDQ3RjAKKzoxMDAzNzAwMDAwMkM5NDAxMDA3RDA5OEIwMDk4NDAwNTAwN0QxNUNCNzEKKzoxMDAzODAwMDAwRDQwMDFBMDA4MDAxREIwMEQ0MDA2RDAwMzQ0NDAxNjkKKzoxMDAzOTAwMDAwQ0MwQzQ4MDA5ODQwM0EwMENDMkM0QTAwOTU4MDA0RDAKKzoxMDAzQTAwMDAwQ0MwNDQ5MDA4MDAxREIwMEQ0MDAxQTAwRDRDMDFBM0MKKzoxMDAzQjAwMDAwMjgyODAxMDA4NDAxMTMwMENDMTAwMzAwOTg4MDFCNDIKKzoxMDAzQzAwMDAwMDQzODBDMDA4NDAxMTMwMENDMTAwMzAwOTg4MDE3M0YKKzoxMDAzRDAwMDAwMDQzODA4MDA4NDAxMTMwMENDMTAwMzAwOTg4MDEzMzcKKzoxMDAzRTAwMDAwMDQzODA0MDA4NDAxMTMwMENDMTAwMzAwOTg4MDE0MkEKKzoxMDAzRjAwMDAwQ0MxMDRDMDA5QTgwMDkwMENDMTQ0RDAwOTg0MERDRDEKKzoxMDA0MDAwMDAwRDQwMDZEMDBDQzE4NDgwMEQ1MDAxQTAwRDU0MDFBNjEKKzoxMDA0MTAwMDAwODAwMEVDMDBENTgwMUEwMDk2QzBENTAwRDQwMDZEOTUKKzoxMDA0MjAwMDAwODAwMURCMDBENDAwNkUwMDlBQzAwMzAwRDQwMDZEOTAKKzoxMDA0MzAwMDAwRDQwMDZFMDA4MDAwMDAwMEVDMDA3RjAwOUFDMENDNjkKKzoxMDA0NDAwMDAwRDQwMDZEMDA4MDAxREIwMEQ0MDA2RTAwQ0MxNDAzRUEKKzoxMDA0NTAwMDAwQ0MxODAzMDBDQzFDMDMwMDdEOTEwMzAwN0RENTgzRTQKKzoxMDA0NjAwMDAwN0QxOTBDMDAzNUNDMUYwMDM1NzAxRjAwN0NGMENCQ0YKKzoxMDA0NzAwMDAwN0NEMDhCMDA4ODAwMDAwMDdFOEU4QjAwOTVDMDA0MkQKKzoxMDA0ODAwMDAwRDQwMDZFMDA4MDAxREIwMEQ0MDAxQTAwRDRDMDFBMzIKKzoxMDA0OTAwMDAwQ0MwODAzMDBDQzBDMDMwMENDMTAwMzAwQ0MxNDAzRTgKKzoxMDA0QTAwMDAwQ0MxODAzMDBDQzFDMDMwMENDMjQwMzAwQ0MyODAzOTAKKzoxMDA0QjAwMDAwMzVDNDFGMDAzNkIwMUYwMDdDNzA0QjAwMzRGMDFGQTUKKzoxMDA0QzAwMDAwN0M3MDRCMDAzNTcwMUYwMDdDNzA0QjAwN0Q4ODgxNzQKKzoxMDA0RDAwMDAwN0RDQ0MxMDA3RTUxMDEwMDdFOTU0MTAwN0M5MDgyNjAKKzoxMDA0RTAwMDAwN0NENEMyMDA3Qzg0OEIwMDlBQzAwMzAwN0M4QzhCN0YKKzoxMDA0RjAwMDAwMkM4ODAxMDA5ODgwOUUwMEQ0MDA2RDAwOTg0MDlDREMKKzoxMDA1MDAwMDAwRDQwMDZFMDBDQzA4NEMwMENDMEM0RDAwQ0MxMDQ4NDAKKzoxMDA1MTAwMDAwRDQ4MDFBMDBENEMwMUEwMDgwMDEyNDAwRDUwMDFBMkIKKzoxMDA1MjAwMDAwQ0MwODMyMDBENDAwMzIwMDk0ODJCNjAwQ0EwQzAwMUQKKzoxMDA1MzAwMDAwRDQ0MDFFMDA4MDAwMDAwMEQ0MDAxRTAwRTQwMTFFMTQKKzoxMDA1NDAwMDAwRDQwMDFFMDBDQTA4MDAwMENBMEMwMDAwQ0ExMDAwMzcKKzoxMDA1NTAwMDAwRDQ0MDFFMDBDQTE0MDAwMEQ0ODAxRTAwRDRDMDFFNjcKKzoxMDA1NjAwMDAwRDUwMDFFMDBENTQwMUUwMEQ1NDAzNDAwODAwMDAwOUMKKzoxMDA1NzAwMDAwRUUwMDFFMDAyODA0MDQwMEUyMDAxQTAwRTIwMDFBNDcKKzoxMDA1ODAwMDAwRDQ0MDFBMDBDQTM4MDAwMENDMDgwMzAwQ0MwQzAzODkKKzoxMDA1OTAwMDAwQ0MwQzAzMDBDQzBDMDMwMDk4ODI5QTAwMDAwMDAwRjEKKzoxMDA1QTAwMDAwODQwMURFMDBEN0EwNkYwMDgwMDAwMDAwRUUwMDFGNzUKKzoxMDA1QjAwMDAwQ0EwNDAwMDBDMkZGMDAwMENDMDgzNDAwQzEzRkZGQTUKKzoxMDA1QzAwMDAwN0M3NENCMDA3Q0M5MEIwMDdEMDEwRjAwOTkwMjhENkIKKzoxMDA1RDAwMDAwN0M3MzhCMDA4NDAxREUwMEQ3QTA2RjAwODAwMDAwRDgKKzoxMDA1RTAwMDAwRUUwMDFGMDBDQTA4MDAwMDI4MTkwMDAwN0Q4OThCNUEKKzoxMDA1RjAwMDAwOTU4MDE0MDAyODE0MDQwMENBMEMwMDAwQ0ExMDAwRTIKKzoxMDA2MDAwMDAwQ0ExQzAwMDBDQTI0MDAwMEUyMDAxRjAwRDRDMDFBNjcKKzoxMDA2MTAwMDAwRDUwMDFBMDBENTQwMUEwMENDMTgwMzAwQ0MyQzAzREEKKzoxMDA2MjAwMDAwQ0MyQzAzMDBDQzJDMDMwMDdEQTU4QjAwN0Q5QzQ3QzcKKzoxMDA2MzAwMDAwOTg0Mjc0MDAwMDAwMDAwMDgwMDE4NDAwRDRDMDFBQjkKKzoxMDA2NDAwMDAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDAwRUUwMDFFN0EKKzoxMDA2NTAwMDAwRTQwMTFFMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFNjcKKzoxMDA2NjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTNFNkUKKzoxMDA2NzAwMDAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwN0MKKzoxMDA2ODAwMDAwQTAwMDAwMDA3RTgyOEIwMENBMDgwMDAwMjQ4QzA2QjcKKzoxMDA2OTAwMDAwMENDQzA2MDA5OEMwMDYwMENDMTA0RTAwOTkwMDA0NTcKKzoxMDA2QTAwMDAwRDQwMDczMDBFNDAxMUUwMEQ0MDAxRTAwRDQ0MDFFREMKKzoxMDA2QjAwMDAwRDQ4MDFFMDA4MDAwMDAwMEVFMDAxRTAwQ0EwODAwNkEKKzoxMDA2QzAwMDAwQ0EwQzAwMDAzNEQwMTgwMDI1MTAwMTAwOTUwMDIxNEMKKzoxMDA2RDAwMDAwQzE3RkZGMDBDQTEwMDAwMENBMTQwMDAwQ0ExODAwNDEKKzoxMDA2RTAwMDAwRDQ4MDFEMDBENEMwMUQwMDdEQjE4QjAwQzE0MjAyMkEKKzoxMDA2RjAwMDAwQzJDMDAxMDBENTgwMUQwMDM0REMwRTAwN0Q1RDRDQzEKKzoxMDA3MDAwMDAwN0Y3MzRDMDBENzQwMUUwMEQ1MDAxRTAwRDU0MDFFNTAKKzoxMDA3MTAwMDAwQzE0MjAwMDBDMkMwMDAwMDA5OUMwMTAwMzFEQzEwOTEKKzoxMDA3MjAwMDAwN0Y1RjRDMDA3RjczNEMwMDA0MjgwMjAwN0Q4MzgwQjMKKzoxMDA3MzAwMDAwRDVBODZGMDBENTgwNjYwMEQ3NDAxRTAwRUMwMDVFOTMKKzoxMDA3NDAwMDAwQzgyNDAyMDBDODI0MDIwMDgwMDFEQjAwRDYwMDc2MjUKKzoxMDA3NTAwMDAwRDQ0MDFFMDBENDgwMUUwMEQ0QzAxRTAwODAwMDAwQzMKKzoxMDA3NjAwMDAwRUUwMDFFMDA4MDAwMDAwMEVFMDAxRjAwRDQwMDFGRkQKKzoxMDA3NzAwMDAwODAwMDAwMDBENDAwMUYwMEQ0MDAxRjAwODgwMDAwOEIKKzoxMDA3ODAwMDAwRDQwMDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDA3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDA4MDAwMDAwMDEwMTk0MDAwMjAxOUIwMDAzMDBCMjAwMDQwMEEyNTkKKzoxMDA4MTAwMDAwMDUwMDAzMDAwNjAwM0YwMDA3MDAzMjAwMDgwMTRGRkEKKzoxMDA4MjAwMDAwMDkwMDQ2MDAwQTAwMzYwMDEwMDFEOTAwMTcwMEM1NzMKKzoxMDA4MzAwMDAwMjIwMTVEMDAyMzAxNkMwMDIwMDBENzAwMjQwMTQ4NDQKKzoxMDA4NDAwMDAwMjYwMDREMDAyNzAwNUMwMDI4MDA4RDAwMjkwMDUxODMKKzoxMDA4NTAwMDAwMkEwMDdFMDAyQjAwNjEwMDJGMDA4ODAwMzIwMEFBRDEKKzoxMDA4NjAwMDAwMzQwMUEyMDAzNjAwNkYwMDNDMDE3OTAwM0YwMDk1ODIKKzoxMDA4NzAwMDAwNDEwMUFGMDA0NDAxNTEwMDU1MDE5NjAwNTYwMTlEMTEKKzoxMDA4ODAwMDAwNjAwMDBCMDA2MTAwMzQwMDYyMDAzODAwNjMwMDM4MzMKKzoxMDA4OTAwMDAwNjQwMDM4MDA2NTAwMzgwMDY2MDAzODAwNjcwMDM4RTIKKzoxMDA4QTAwMDAwNjgwMDNBMDA2OTAwNDEwMDZBMDA0ODAwNkIwMDQ4OTcKKzoxMDA4QjAwMDAwNkMwMDQ4MDA2RDAwNDgwMDZFMDA0ODAwNkYwMDQ4NjIKKzoxMDA4QzAwMDAwNzMwMUQ5MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2QzkKKzoxMDA4RDAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAKKzoxMDA4RTAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RjAKKzoxMDA4RjAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RTAKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY2MTBfbWUuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY2MTBfbWUuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExOWVkOAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjYxMF9tZS5iaW4uaWhleApAQCAtMCwwICsxLDEzNDUgQEAKKzoxMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDAwMTAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwRkZGRjAwMjg0NjIxQTkKKzoxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwQUYKKzoxMDAwMzAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDAwNDAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMjYKKzoxMDAwNTAwMDAwMDAwMDAwMDAwMTAwMDBDMDI5NDYyMDAwMDAwMDAwNTAKKzoxMDAwNjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDAwNzAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBRjIKKzoxMDAwODAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwN0EKKzoxMDAwOTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0QkUKKzoxMDAwQTAwMDAwNjA0NDExMDAwMDA2OEQwMDAwMDAwMDAwNjAwMDAwQTgKKzoxMDAwQjAwMDAwMDAwNjMxMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQ1NUUKKzoxMDAwQzAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwRjAwMzkKKzoxMDAwRDAwMDAwMjgxNjIyMDAwMDAwMDAwMDAwMDAwODAwMjExNjI1NUMKKzoxMDAwRTAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwMzYyNTAwMDAwMDAwN0QKKzoxMDAwRjAwMDhEMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0RkEKKzoxMDAxMDAwMDAwMkYwMjI1MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQUQKKzoxMDAxMTAwMDAwMDAwMDE4MDA0MTIwMDAwMDQwNDgxMTAwMDAwMDE5QjQKKzoxMDAxMjAwMDAwNDIyMDAwMDAyMDQ4MTEwMDAwMDAwMDhFMDAwMDAwNjYKKzoxMDAxMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAyODAwMjA0QTJEOEIKKzoxMDAxNDAwMDAwMDAwMDAwOTAwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUEKKzoxMDAxNTAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDBDMjYKKzoxMDAxNjAwMDAwMjExNjIyMDAwMDAwMDAwMDAwMDAwMzAwMjgxNjI1RDAKKzoxMDAxNzAwMDAwMDAwMDAwMDAwMDAwMTkwMDIxMUEyMjAwMDAwMDAwMDkKKzoxMDAxODAwMDAwMDAwMDA0MDAyODFBMjYwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDAxOTAwMDAwMjkxNEM1MDAwMDAwMDAwMDAwMDAxOTAwMjAzNjI1QzkKKzoxMDAxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMTQwMjAwMDAwMDAwRkYKKzoxMDAxQjAwMDAwMDAwMDE2MDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAzQ0EKKzoxMDAxQzAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENUEKKzoxMDAxRDAwMDAwMDAwMDAwRkZGRkZGRkMwMDI4MEUyMzAwMDAwMDAwQ0QKKzoxMDAxRTAwMDAwMDAwMDAwMDAyOTE0QTMwMDAwMDAwMDAwMDAwMDE3MTgKKzoxMDAxRjAwMDAwMjAzNjI1MDAwMDAwMDAwMDAwODAwMDAwMjgwRTIyQUMKKzoxMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDIyMEUyMzAwMDAwMDAwOTQKKzoxMDAyMTAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDIwMDAwMDAwRUYKKzoxMDAyMjAwMDAwMjgwRTIyMDAwMDAwMDAwMDAwMDAwNjAwMjEwRTIzMUUKKzoxMDAyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwRUYKKzoxMDAyNDAwMDAwMDAwMDAwMDAyMjAyMjIwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDAyNTAwMDE0RTAwMDAwMDAwMDAwMzgwMDAwMDAwMDJFRTAwMDAwNjQKKzoxMDAyNjAwMDAwMDAwMDM1MDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDM3MTYKKzoxMDAyNzAwMDAwMDAwMDAwMDA0MDBFMkQwMDAwMDAzOTAwMDAwMDA4QzIKKzoxMDAyODAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwOTAwNDAxMjJEOEIKKzoxMDAyOTAwMDAwMDAwMDQ2MDAwMDAwMDEwMDQwMEUyRDAwMDAwMDM5NjMKKzoxMDAyQTAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMjgKKzoxMDAyQjAwMDAwMjgxMjIzMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0ODcKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzAwMDAwMDAwQUQKKzoxMDAyRDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDAzRTAwMDAwMDA4RTQKKzoxMDAyRTAwMDAwNDAxQzExMDAwMDAwNDEwMDAwMDAwRDAwMjAxRTJERTgKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMEYwMDI4MUUyNzAwMDAwMDAwODIKKzoxMDAzMDAwMDAwMDAwMDAzMDAyMjFFMjcwMDAwMDAwMDdGQzAwMDAwNDQKKzoxMDAzMTAwMDAwMjgxQTIzMDAwMDAwMDAwMDAwMDAxNDAwMjExQTI2MDMKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDMzMUEyNjAwMDAwMDAwNTkKKzoxMDAzMzAwMDAwMDAwMDA4MDAyMjFBMjYwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDAzNDAwMDAwMjkwQ0M3MDAwMDAwMDAwMDAwMDAyNzAwMjAzNjI0MTAKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MTIyMTAwMDAwMDAwQzMKKzoxMDAzNjAwMDAwMDAxNDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDAzNzAwMDBDRTAwMDAwMDAwMDAwNEIwMDAwMDAwMTAwMjkwRTIzRUIKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwMzYyMzAwMDAwMDAwRTYKKzoxMDAzOTAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRjgwMDAwMTEKKzoxMDAzQTAwMDAwMjk0QTIzMDAwMDAwMDAwMDAwMDAwMDAwM0EyQzAyNEYKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMEUyQjAwMDAwMDAwRTAKKzoxMDAzQzAwMEZDMDAwMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDBGQzkKKzoxMDAzRDAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTIzRjAKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMjcwMDIwNEEyRDAwMDAwMDAwNEYKKzoxMDAzRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDI5NUIKKzoxMDA0MDAwMDAwMjAwRTJEMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTIzRTkKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDA0MjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxNTIKKzoxMDA0MzAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwODMKKzoxMDA0NDAwMDAwMDAwMDYxMDAwMDAwMDAyRUUwMDAwMDAwMDAwMDVGREUKKzoxMDA0NTAwMDAwMDAwMDAwMkNFMDAwMDAwMDAwMDA1RTAwMDAwMDAwMzIKKzoxMDA0NjAwMDAwNDAwRTJEMDAwMDAwNjIwMDAwMDAwMTAwNDAwRTJEMzMKKzoxMDA0NzAwMDAwMDAwMDYyMDAwMDAwMEEwMDIwMEUyRDAwMDAwMDAwQjUKKzoxMDA0ODAwMDAwMDAwMDBCMDA0MDEyMkQwMDAwMDA2QTAwMDAwMDAwNzgKKzoxMDA0OTAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzAwMjgxMjIzRDkKKzoxMDA0QTAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDAwMDAwMDAwRjIKKzoxMDA0QjAwMDdGQzAwMDAwMDAyODE2MjMwMDAwMDAwMDAwMDAwMDE0ODgKKzoxMDA0QzAwMDAwMjExNjI1MDAwMDAwMDAwMDAwMDAwMTAwMzMxNjI1NjEKKzoxMDA0RDAwMDAwMDAwMDAwODAwMDAwMDAwMDI4MEUyMzAwMDAwMDAwNDMKKzoxMDA0RTAwMDAwMDAwMDAwMDAyOTBDQTMwMDAwMDAwMDNGRkZGQzAwRkEKKzoxMDA0RjAwMDAwMjkwRTIzMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMjEKKzoxMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDZEOEEKKzoxMDA1MTAwMDAwMDAwMTAwMDA0MDFDMTEwMDAwMDA3MDAwMDAwMDBERjAKKzoxMDA1MjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDBGMDAwMjgxRTI3MDMKKzoxMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDQwMDIyMUUyNzAwMDAwMDAwNTAKKzoxMDA1NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBEQTgKKzoxMDA1NTAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRjBGRjAwMjgxQTMwQzMKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMEEwMjgwMDIwNDQxMTAwMDAwMDAwNEUKKzoxMDA1NzAwMDAwMDAwMDAwMDAyOTQ4RTYwMDAwMDAwMDAwMDBBMDE4NkMKKzoxMDA1ODAwMDAwMjA0NDExMDAwMDAwMDAzRkZGRkZGRjAwMjg0QTIzMjUKKzoxMDA1OTAwMDAwMDAwMDAwMDAwMEEwMTAwMDIwNDQxMTAwMDAwMDAwMzYKKzoxMDA1QTAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDMwQUYKKzoxMDA1QjAwMDAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMjAwMjkxNjI1NzIKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMzAwMDIwMzYyNTAwMDAwMDAwODAKKzoxMDA1RDAwMDAwMDAwMDI1MDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDA1RTAwMDAwMkYwMEEzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNkQKKzoxMDA1RjAwMDAwMDAwMDgzMDAwMDAwMjYwMDIwMTYyRDAwMDAwMDAwRUYKKzoxMDA2MDAwMDAwMDAwMDAwMDAyRjAwQTQwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDA2MTAwMDBDQzAwMDAwMDAwMDAwODQwMDAwMDAwMDAwNDAwMDAwNEEKKzoxMDA2MjAwMDAwMDAwMDhBMDAwMDAwMjUwMDIwMzYyMzAwMDAwMDAwQTIKKzoxMDA2MzAwMDAwMDAwMDI2MDAyMDM2MjQwMDAwMDAwMDAwMDAwMDE3MDMKKzoxMDA2NDAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3RjMKKzoxMDA2NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDhBMUMKKzoxMDA2NjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY2ODAwMDAwMDAwQkMKKzoxMDA2NzAwMDAwNjAwMDAwMDAwMDA2NUMwMDAwMDAwMjAwMjEwRTIyNjUKKzoxMDA2ODAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDhEMDkKKzoxMDA2OTAwMDAwMDAwMDEyQzA0MDM2MjAwMDAwMDA5MzAwMDAwMDAwNUYKKzoxMDA2QTAwMDJFRTAwMDAwMDAwMDAwOTEwMDAwMDAwMDJDRTAwMDAwOUYKKzoxMDA2QjAwMDAwMDAwMDkwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDkyOUIKKzoxMDA2QzAwMDAwMDAwMDAzMDA0MDBFMkQwMDAwMDA5MjAwMDAwMDBDMEUKKzoxMDA2RDAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxMjAwMjAzNjIzMzQKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMEUyMjAwMDAwMDAwQjYKKzoxMDA2RjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA5ODAwMDBBMDBDRTIKKzoxMDA3MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNEMKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMEEwRjEKKzoxMDA3MjAwMDAwMDBBMDBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDA3MzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDJFRTAwMDAwMzIKKzoxMDA3NDAwMDAwMDAwMDlFMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDlENjIKKzoxMDA3NTAwMDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDAzN0EKKzoxMDA3NjAwMDAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwQzAwMjAwRTJEMDgKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMEUKKzoxMDA3ODAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDAwM0YwMDAwRTIKKzoxMDA3OTAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAxMDAwMjEwRTIzOUUKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMTEwMDIwMzYyMzAwMDAwMDAwQkYKKzoxMDA3QjAwMDAwMDAwMDFFMDAyMTAyMkIwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA3QzAwMDE0QzAwMDAwMDAwMDAwQTcwMDAwMDAxNkMwMjAzNjIwNjIKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMDIyQjAwMDAwMDAwQUMKKzoxMDA3RTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBBQTAwMDAwMDE1NzYKKzoxMDA3RjAwMEMwMjAzNjIwMDAwMDAwMDAwMDAwMDAwODAwMjEwRTJCNjEKKzoxMDA4MDAwMDAwMDAwMDAwMDAwMDAwN0YwMDI4MEUyMzAwMDAwMDAwMTAKKzoxMDA4MTAwMDAwMDAwMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDA4MjAwMDBDRTAwMDAwMDAwMDAwRTEwMDAwMDAwMDI3MDAwMDAwRDQKKzoxMDA4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzQjMKKzoxMDA4NDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDA4NTAwMDBBRTAwMDAwMDAwMDAwQjMwMDAwMDAwMDAwNjAwMDAwOUIKKzoxMDA4NjAwMDAwMDAwMTNBODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNTcKKzoxMDA4NzAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBDRUQKKzoxMDA4ODAwMDAwMjIxRTMwMDAwMDAwMDA5OTgwMDAwMDAwMjA0NDExNkEKKzoxMDA4OTAwMDAwMDAwMDAwMDAwMDAwMDQwMDIwMTIyRDAwMDAwMDAwRjUKKzoxMDA4QTAwMDAwMDAwMDA4MDAyMjEyMjQwMDAwMDAwMDAwMDAwMDEwRDgKKzoxMDA4QjAwMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDAwMjkxQ0U0QzYKKzoxMDA4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwNzAwMDAwMTJGNDkKKzoxMDA4RDAwMDlCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDA4RTAwMDAwMjA0ODAyMDAwMDAwMDA5QzAwMDAwMDAwMjA0NDExOEQKKzoxMDA4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzMTQ2RjAwMDAwMDAwNDIKKzoxMDA5MDAwMDAwMDAwMDAxMDAzMzNFMjMwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDA5MTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMjAzQzA1NTUKKzoxMDA5MjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDEKKzoxMDA5MzAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDA5NDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwNzAwMjA0NDExMEIKKzoxMDA5NTAwMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyQjAwMDAwMDAwM0EKKzoxMDA5NjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBDQjAwRjhGRjA4RTkKKzoxMDA5NzAwMDAwMjA0ODExMDAwMDAwMDA5ODAwMDAwMDAwNDA0ODExQ0QKKzoxMDA5ODAwMDAwMDAwMERDMDAwMDAwRjAwMDI4MEUyMjAwMDAwMDAwNDMKKzoxMDA5OTAwMDAwMDAwMEEwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDA5QTAwMDBDQzAwMDAwMDAwMDAwREEwMDAwMDAxMTAwMjAwRTJEMzUKKzoxMDA5QjAwMDAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwRTIKKzoxMDA5QzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBENTAwMDAwMDAyNjQKKzoxMDA5RDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDcKKzoxMDA5RTAwMDAwMDAwMEQ0MDAwMDNGMDAwMDQwMEMxMTAwMDAwMEQ2QzEKKzoxMDA5RjAwMDAwMDAxRjAwMDA0MDBDMTEwMDAwMDBENjAwMDAwRjAwOTYKKzoxMDBBMDAwMDAwMjAwQzExMDAwMDAwMDAwMDM4MDAwOTAwMjk0QTIzRDIKKzoxMDBBMTAwMDAwMDAwMDAwM0YwMDAwMDAwMDI4MEUyQjAwMDAwMDAwMzYKKzoxMDBBMjAwMDAwMDAwMDAyMDAyMjBFMjMwMDAwMDAwMDAwMDAwMDA3NkEKKzoxMDBBMzAwMDAwNDk0QTIzMDAwMDAwREMwMDM4MEYwOTAwMjA0ODExNUIKKzoxMDBBNDAwMDAwMDAwMDAwNjgwMDAwMDcwMDIwNDgxMTAwMDAwMDAwQkUKKzoxMDBBNTAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDBBNjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0NjQKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRkQKKzoxMDBBODAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMjAyNDkKKzoxMDBBOTAwMDAwMjA0NDExMDAwMDAwMDAwMEZGMDAwMDAwMjgwRTIyOEEKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwODAwMDI5NEEyMzAwMDAwMDAwMzAKKzoxMDBBQjAwMDAwMDAwMDI3MDAyMDBFMkQwMDAwMDAwMDAwMDAwMDI2OEUKKzoxMDBBQzAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwMDAwMkYwMDgzMTUKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEVBNDAKKzoxMDBBRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY2MjAwMDAwMDAwM0UKKzoxMDBBRjAwMDAwNDAwMDAwMDAwMDAwRUIwMDAwMDAwMDAwNjAwMDAwNkIKKzoxMDBCMDAwMDAwMDAwNjY1MDAwMDAwMDcwMDIwMjIyRDAwMDAwMDAwMDQKKzoxMDBCMTAwMDAwMDAwMDA1MDAyMjBFMjIwMDAwMDAwMDAwMTAwMDAwNkUKKzoxMDBCMjAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjkyMDY4QkIKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwNkQKKzoxMDBCNDAwMDAwMDAwMEVGMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDBCNTAwMDAwMjkyMDY4MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzIKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMDIyMzAwMDAwMDAwM0MKKzoxMDBCNzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDBGODAwMDAwMDBCN0UKKzoxMDBCODAwMDAwMjEwMjI4MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwNDYKKzoxMDBCOTAwMDAwMDAwMEY4MDAwMDA0MDAwMDI5MjIyODAwMDAwMDAwRTYKKzoxMDBCQTAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMDAwMDAwMDFDOTcKKzoxMDBCQjAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMTAKKzoxMDBCQzAwMDAwMDAwMEZEMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDQKKzoxMDBCRDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDFFN0UKKzoxMDBCRTAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwRTAKKzoxMDBCRjAwMDAwMDAwMTBCMDAwMEEzMEYwMDIwNDQxMTAwMDAwMDAwQzIKKzoxMDBDMDAwMDAwMDAwMDExMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDAxNzcKKzoxMDBDMTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwQjQKKzoxMDBDMjAwMDAwMDAwMTA0RkZGRkZGRkYwMDQwNDgxMTAwMDAwMTBCMUUKKzoxMDBDMzAwMDAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDBDNDAwMDBDQzAwMDAwMDAwMDAxMDcwMDAwRkZGRjAwNDA0ODExMzkKKzoxMDBDNTAwMDAwMDAwMTBCMDAwMDAwMDQwMDJGMDIyMzAwMDAwMDAwMzAKKzoxMDBDNjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDEwQTAwMDAwMEZGQUUKKzoxMDBDNzAwMDAwNDA0ODExMDAwMDAxMEIwMDAwMDAwMTAwMjA0ODExNTUKKzoxMDBDODAwMDAwMDAwMDAwMDAwMkM0MDAwMDIwNDQxMTAwMDAwMDAwMjkKKzoxMDBDOTAwMDAwMDAwMDFGMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDBDQTAwMDE0QzAwMDAwMDAwMDAxMTIwMDAwMDAxMDQwMjEwRTIwQkUKKzoxMDBDQjAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwQTgKKzoxMDBDQzAwMDAwMDAwMDE4NDAyMjRBMjAwMDAwMDAwMDAwMDAwMDEwMzAKKzoxMDBDRDAwMEMwNDI0QTIwMDAwMDAxMTQwMDAwMDAwMDAwMjAwQzExNTYKKzoxMDBDRTAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwNzgKKzoxMDBDRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDBEMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQTAwMjAxMDExMUYKKzoxMDBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwN0UKKzoxMDBEMjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDExQjAwMDAwMDAwQkIKKzoxMDBEMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTAwNTMxMjI0QjAKKzoxMDBENDAwMDAwMDAwMTE3RkZCRkZGRkYwMDI4M0EyRTAwMDAwMDAwM0YKKzoxMDBENTAwMDAwMDAwMDFCMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDBENjAwMDE0QzAwMDAwMDAwMDAxMkU4MTAwMDAwMDAwMjA0NDExOEEKKzoxMDBENzAwMDAwMDAwMDAwMDAwMDAwMEQwMDIwNDgxMTAwMDAwMDAwRUQKKzoxMDBEODAwMDAwMDAwMDE4MDAyMjBFMzAwMDAwMDAwMEZDMDAwMDAwRUYKKzoxMDBEOTAwMDAwMjgwRTIzMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDQKKzoxMDBEQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwQkMKKzoxMDBEQjAwMDAwMDAwMDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDBFMDUKKzoxMDBEQzAwMDAwMjA0NDExMDAwMDAwMDAwN0Y4RkYwODAwMjA0ODExMkYKKzoxMDBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NEEyMzAwMDAwMDAwN0QKKzoxMDBERTAwMDAwMDAwMDFDMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA4NzQKKzoxMDBERjAwMDAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRTgKKzoxMDBFMDAwMDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDAwMDAwMDAwMzkKKzoxMDBFMTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDBFMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwQzkKKzoxMDBFMzAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDBFNDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDOEIKKzoxMDBFNTAwMDAwMjA0NDExMDAwMDAwMDAwMDgwMDAwMDAwMjA0ODExMjQKKzoxMDBFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNjAwMDAwMDAwMTQKKzoxMDBFNzAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDBFODAwMDE3MDAwMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExRjIKKzoxMDBFOTAwMDAwMDAwNjhEMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwNEQKKzoxMDBFQTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDY4QzAwMDAwMDA0RDgKKzoxMDBFQjAwMDAwNDA0QzExMDAwMDAxMzU4MTAwMDAwMDAwMjA0NDExNjkKKzoxMDBFQzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQTgKKzoxMDBFRDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFDNjgKKzoxMDBFRTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExQjYKKzoxMDBFRjAwMDAwMDAwNjhEMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwRkIKKzoxMDBGMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDEzQzAwMDAwMDAwQjAKKzoxMDBGMTAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRjEKKzoxMDBGMjAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTAwMDAwMzE1MjkKKzoxMDBGMzAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDBGNDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwNjAwMDAwMTUKKzoxMDBGNTAwMDAwMDAwMTYwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwOUMKKzoxMDBGNjAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNjAKKzoxMDBGNzAwMDQwMjgwNjIwMDAwMDAwMDAwMDAwMDAxMEMwMjEwQTIwQzgKKzoxMDBGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0MTQ2MTAwMDAwMDAwQjgKKzoxMDBGOTAwMDAwMDAwMDAwMDA3NDE4ODIwMDAwMDJCQjAwMDFBMUZERTcKKzoxMDBGQTAwMDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjAwMkYwMjJGMEMKKzoxMDBGQjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTQ3MUQKKzoxMDBGQzAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwMUMKKzoxMDBGRDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMzEKKzoxMDBGRTAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwQjQKKzoxMDBGRjAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAzRkZGODcKKzoxMDEwMDAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwOTQKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTYwMEYKKzoxMDEwMjAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMDAwMDBGRkZGMjMKKzoxMDEwMzAwMEMwMjgxMjIwMDAwMDAwMDAwMDAwMDAxMDQwMjExNjIwRUYKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMEZGRkZDMDY4MUEyMDAwMDAwMkJCODMKKzoxMDEwNTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMUMKKzoxMDEwNjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNTQKKzoxMDEwNzAwMDAwMDAwMTU4MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMTIKKzoxMDEwODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNkMKKzoxMDEwOTAwMDAwMzAwQTJGMDAwMDAwMDAwMDAwMDAwMTAwMjEwQTIyOTkKKzoxMDEwQTAwMDAwMDAwMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwOTkKKzoxMDEwQjAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMjkKKzoxMDEwQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOTUKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMTAwMDAwMDAwMzYKKzoxMDEwRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwOTUKKzoxMDEwRjAwMDAwNjAwMDAwMDAwMDAxOEYwMDAwMDAwMDAwNjAwMDAwQTAKKzoxMDExMDAwMDAwMDAwMUEwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwQTAKKzoxMDExMTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDExMjAwMDAwMjAyQzA4MDAwMDAwMDAwMDAwMDAwMDAwMjAyNDExMTYKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjgxMTAwMDAwMDAwNTYKKzoxMDExNDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2OUMKKzoxMDExNTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMjMKKzoxMDExNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwMDMKKzoxMDExNzAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyRTUKKzoxMDExODAwMDAwMjIxRTI5MDAwMDAwMDAwMDAwMDAwMDAwNzA0OEVCNTMKKzoxMDExOTAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkJCOTUKKzoxMDExQTAwMDAwMDAwMDAxNDAzMzA2MjAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDExQjAwMEMwMzAyNDA5MDAwMDAwMDAwMDAwM0ZGRjAwMkYwMjJGNzQKKzoxMDExQzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMzMKKzoxMDExRDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzAwMDAwMDAwMEEKKzoxMDExRTAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQzMKKzoxMDExRjAwMDAwMDAwMTgxMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBRDIKKzoxMDEyMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDE4Njk1MDAwMDAwODIKKzoxMDEyMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDcKKzoxMDEyMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTg2NEIKKzoxMDEyMzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxODUKKzoxMDEyNDAwMDAwNTMwNjIxMDAwMDAxODI5MjAwMDAwMDAwMjA0NDExOUEKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwMTk3OEUKKzoxMDEyNjAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDExNTkKKzoxMDEyNzAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDAwMDAwNzgwNDJBNzUKKzoxMDEyODAwMDAwMDAwMkZCMDAwMDAwMDAwMDIwMjgwOTAwMDAwMDAwMTAKKzoxMDEyOTAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDEyQTAwMDBDQzAwMDAwMDAwMDAxNzQwMDAwMDAwMEMwNDAwNDAwRjkKKzoxMDEyQjAwMDAwMDAwMDAxMDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1OEUKKzoxMDEyQzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDEyRDAwMDBDRTAwMDAwMDAwMDAxOTQwMDAwMDAxNUMwMjAzNjIwNDIKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMTZDMDIwMzYyMDAwMDAwMDAwQjIKKzoxMDEyRjAwMDNGODAwMDAwMDAyMDA0MTEwMDAwMDAwMDQ2MDAwMDAwQjQKKzoxMDEzMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwODAwMDAwMzEKKzoxMDEzMTAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwQkIKKzoxMDEzMjAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDEzMzAwMDBDQzAwMDAwMDAwMDAxOUIwMDAwMDAwMTAwODA0ODExNkIKKzoxMDEzNDAwMDAwMDAwMDAwMDAwMDAwMjEwMDgwNDgxMTAwMDAwMDAwQTMKKzoxMDEzNTAwMDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwRTkKKzoxMDEzNjAwMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjQwMjgxNjIwQ0UKKzoxMDEzNzAwMDAwMDAwMDAwMDAwMDAwMTBDMDgxMUEyMDAwMDAwMDAwRTIKKzoxMDEzODAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2NjEKKzoxMDEzOTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwODAwMjIxRTMwNUMKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwMjkwMDIwMUEyRDAwMDAwMDAwQUQKKzoxMDEzQjAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRkJGRjA5RDYKKzoxMDEzQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwRjAwMjAyMjJEMjYKKzoxMDEzRDAwMDAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyODAwMDAwMDAwNTQKKzoxMDEzRTAwMDAwMDAwMDA2MDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDEzRjAwMDAwMjkyMEU4MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA4NEMKKzoxMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDE0MTAwMDA2MEEwMjAwMDAyOTRBMjYwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDE0MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExQ0EKKzoxMDE0MzAwMDAwMDAwMDAwMDAwMDAxMDAwMDIwMTgxMTAwMDAwMDAwNjIKKzoxMDE0NDAwMDAwMDAwMDA4MDA2MjFFMjgwMDAwMDEyRjAwMDAwMDA4QjQKKzoxMDE0NTAwMDAwODIyMjI4MDAwMDAwMDAwMDAyQzAwMDAwMjA0NDExODkKKzoxMDE0NjAwMDAwMDAwMDAwMDAwMDAwMTUwMDYwMEUyRDAwMDAwMUJEMEUKKzoxMDE0NzAwMDAwMDAwMDE2MDA2MDBFMkQwMDAwMDFCRDAwMDBDMDA4MzUKKzoxMDE0ODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzUKKzoxMDE0OTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMUI5QkUKKzoxMDE0QTAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDE0QjAwMDAwMjA0ODAxMDAwMDAwMDAzOTAwMDAwMDAwMjA0ODExMTEKKzoxMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQTMKKzoxMDE0RDAwMDAwMDAwMDAwMDA4MDQ4MDIwMDAwMDAwMDAwMDAwMDE4MkEKKzoxMDE0RTAwMDAwMjAyRTJEMDAwMDAwMDAwMDAwMDAwMDAwM0IwRDYzRDYKKzoxMDE0RjAwMDAwMDAwMDAwMDAwMDAwMDgwMDIyNEEyMzAwMDAwMDAwNTUKKzoxMDE1MDAwMDAwMDAwMDEwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDE4MjQKKzoxMDE1MTAwMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAwMDAwODA0ODAzNzEKKzoxMDE1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCNTAKKzoxMDE1MzAwMDAwMDAxMDAwMDA2MDA0MTEwMDAwMDMxNTAwMDAwMDAwMEUKKzoxMDE1NDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExRUQKKzoxMDE1NTAwMDAwMDAwMUIyMDAwMDAwMDcwMDIxMDYyRjAwMDAwMDAwN0IKKzoxMDE1NjAwMDAwMDAwMDEzMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAxMTAKKzoxMDE1NzAwMDAwMjAyQzExMDAwMDAwMDAwMDAwRkZGRjQwMjgyMjIwNjYKKzoxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMEYwMDI2MjIyODAwMDAwMDAwREMKKzoxMDE1OTAwMDAwMDAwMDEwNDAyMTI2MjAwMDAwMDAwMDAwMDAwMDBGODUKKzoxMDE1QTAwMDAwMjYyNjI5MDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyN0MKKzoxMDE1QjAwMDAwMDAwMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwM0UKKzoxMDE1QzAwMDAwMDAwMDFCMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDE1RDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQ0QKKzoxMDE1RTAwMDAwMDAwMUUwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMjcKKzoxMDE1RjAwMDAwMDAwMDgxMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDNTQKKzoxMDE2MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRUIKKzoxMDE2MTAwMDAwMDAwMDAwMDAwMDAwODAwMDIwMUMxMTAwMDAwMDAwRkQKKzoxMDE2MjAwMDAwMDAwMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDE2MzAwMDBDRTAwMDAwMDAwMDAxREMwMDAwMDAwMDAwNjAwMDAwODEKKzoxMDE2NDAwMDAwMDAwMUU5MDAwMDAwMDEwMDUzMUUyNzAwMDAwMUQ4M0UKKzoxMDE2NTAwMDAwMDAwMDAxMDAyMDJDMTEwMDAwMDAwMDAwMDAwMDFGMEQKKzoxMDE2NjAwMDAwMjgwQTIyMDAwMDAwMDAwMDAwMDAxRjAwMjgyQTJBOEIKKzoxMDE2NzAwMDAwMDAwMDAwMDAwMDAwMDEwMDUzMDYyMTAwMDAwMUQxMUQKKzoxMDE2ODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyNjUKKzoxMDE2OTAwMDAwMzA0QTJGMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOEYKKzoxMDE2QTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzAKKzoxMDE2QjAwMDAwMDAwMDAxMDAzMDFFMkYwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE2QzAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDYKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUU5QzAKKzoxMDE2RTAwMDAwMDAwMDAxMDA1MzFFMjcwMDAwMDFFNTAwMDBGRkZGN0QKKzoxMDE2RjAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAwRjAwMjYwRTIzRUUKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwQjYKKzoxMDE3MTAwMDAwMDAwMDBGMDAyNjEyMjQwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDE3MjAwMDAwMjAxNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAxODExRUIKKzoxMDE3MzAwMDAwMDAwMkJCMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwRDgKKzoxMDE3NDAwMDAwMDAwMDAwMDAyRjAyMkIwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDE3NTAwMDBDRTAwMDAwMDAwMDAxRjgwMDAwMDAxMDAwMjIxNjI4MzQKKzoxMDE3NjAwMDAwMDAwMDAwRkZGRjAwMDAwMDI4MTYyNTAwMDAwMDAwMTgKKzoxMDE3NzAwMDAwMDBGRkZGMDAyODFBMjkwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDE3ODAwMDAwMjk0OEM1MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODBBQjEKKzoxMDE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMkMxMTAwMDAwMDAwRUMKKzoxMDE3QTAwMDAwMDAwMDEwMDAyMjE2MjMwMDAwMDAwMEZGRkYwMDAwRDAKKzoxMDE3QjAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwRkZGRjAwMjgxQTI0NjIKKzoxMDE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDhDNTAwMDAwMDAwRTMKKzoxMDE3RDAwMDAwMDAwMDAwMDA3MzE1MDMwMDAwMDIwNTAwMDAwMDAwNzcKKzoxMDE3RTAwMDAwMjAxODA1MDAwMDAwMDAwMDAwMDAwMDAwNzMxNTI0MTAKKzoxMDE3RjAwMDAwMDAwMjA1MDAwMDAwMDAwMDJEMTRDNTAwMDAwMDAwREMKKzoxMDE4MDAwMDAwMDAwMDAwMDAzMDA4QTIwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDE4MTAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyMTQKKzoxMDE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjAwMzAwMDAwMDAwNzUKKzoxMDE4MzAwMDAwMDAwMDAwMDA4MDI0MDQwMDAwMDAwMDAwMDAwMDBGRjEKKzoxMDE4NDAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwN0MKKzoxMDE4NTAwMDAwMDAwNjhDMDAwMDAwMDAwMDJCMTQwNTAwMDAwMDAwQjIKKzoxMDE4NjAwMDAwMDAwMDAxMDA5MDE2MjUwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE4NzAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExODgKKzoxMDE4ODAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMEIKKzoxMDE4OTAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAyMjU2QTQKKzoxMDE4QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTAwMjk0QTIyMTQKKzoxMDE4QjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwNDgKKzoxMDE4QzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDE4RDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzgKKzoxMDE4RTAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDUKKzoxMDE4RjAwMDAwMDAwMDAzMDAzODRBMjEwMDAwMDAwMDAwMDBBMUZDQTUKKzoxMDE5MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRTgKKzoxMDE5MTAwMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTIyMDAwMDAwMDAwMkYKKzoxMDE5MjAwMDAwMDAwMDEwQzAyMTFBMjAwMDAwMDAwMDAwMDBGRkZGOEUKKzoxMDE5MzAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEMwMjExNjIwRUEKKzoxMDE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MTQ2NTAwMDAwMkJCRUQKKzoxMDE5NTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAwMDAxNTAKKzoxMDE5NjAwMDAwMzMwNjIxMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxQ0IKKzoxMDE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMjE5ODAKKzoxMDE5ODAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDE5OTAwMDBDQzAwMDAwMDAwMDAyMTIwMDAwMDAwMEMwNDAwNDAwNjMKKzoxMDE5QTAwMDAwMDAwMDAxMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQ1OEIKKzoxMDE5QjAwMDAwMDAwMDAwMDA0MDA0MEYwMDAwMDIxMzAwMDAwMDAwQkYKKzoxMDE5QzAwMDAwNjAwMDAwMDAwMDA2MzEwMDAwMDAwMDAwNjAwMDAwMjAKKzoxMDE5RDAwMDAwMDAwNjQ1MDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1MUQKKzoxMDE5RTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFBMDAwMDAwMDAwRjYKKzoxMDE5RjAwMDAwNjAwMDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwOEEKKzoxMDFBMDAwMDAwMDAwMkJCMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMTQKKzoxMDFBMTAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDFBMjAwMDAwMjA0ODA4MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGRTYKKzoxMDFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjMyODgKKzoxMDFBNDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQTAwMDAwMDAwRkIKKzoxMDFBNTAwMDAwNDAwMDAwMDAwMDAyMzY5NTAwMDAwMDAwMjA0NDExMDQKKzoxMDFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRjAwMDAwMDAwMTYKKzoxMDFBNzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDIzNjAwMDAwMDAwNDIKKzoxMDFBODAwMEMwNDA0ODAwMDAwMDAyMzM5MjAwMDAwMDAwMjA0NDExRDIKKzoxMDFBOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMUUKKzoxMDFBQTAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MzMKKzoxMDFBQjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExQkEKKzoxMDFBQzAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwOUEKKzoxMDFBRDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRjMKKzoxMDFBRTAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExNjkKKzoxMDFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkZCNzQKKzoxMDFCMDAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwRDAKKzoxMDFCMTAwMDAwNjAwMDAwMDAwMDA2MzEwMDAwQTAwQzAwMjA0NDExMEQKKzoxMDFCMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwOEQKKzoxMDFCMzAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDFCNDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxODQwMjEwQTIwODcKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwMDMwMDJGMDIyMjAwMDAwMDAwMkYKKzoxMDFCNjAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDI0QzAwMDAwMDE0MjkKKzoxMDFCNzAwMDAwMjAyMjJEMDAwMDAwMDAwMDA4MDEwMTAwMjkyMjI4NzkKKzoxMDFCODAwMDAwMDAwMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwQzMKKzoxMDFCOTAwMDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDFCQTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTUKKzoxMDFCQjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMjUxOEEKKzoxMDFCQzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDEwOUEKKzoxMDFCRDAwMDAwNjAwNDExMDAwMDAzMTUzRjgwMDAwMDAwMjAwNDExODQKKzoxMDFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyQzkKKzoxMDFCRjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRUYKKzoxMDFDMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRkIKKzoxMDFDMTAwMDAwMDAwMjdDMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQzQKKzoxMDFDMjAwMDAwMDAwMDAxMDAyMTFFMjcwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDFDMzAwMDE0RTAwMDAwMDAwMDAyNkEwMDAwMDAxMjAwMjAxRTJEQzcKKzoxMDFDNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MUUyNzAwMDAwMDAwMjkKKzoxMDFDNTAwMDAwMDAwMDAwMDAzNDFDMjcwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDFDNjAwMDEyQzAwMDAwMDAwMDAyNUYwMDAwMDAwMDAwMjAxQzExRjQKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNTAwMDAwMDAwNTAKKzoxMDFDODAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2MjAwMDAwMDAwMjgKKzoxMDFDOTAwMDAwMjAxNDA3MDAwMDAwMDAwMDAwMDAxMjAwMjAxRTJEOEMKKzoxMDFDQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMUUyNzAwMDAwMDAwQkUKKzoxMDFDQjAwMDAwMDAwMDAwMDAzNDFDNDcwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDFDQzAwMDEyQzAwMDAwMDAwMDAyNjcwMDAwMDAwMDAwMjAxQzExOEMKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwRUYKKzoxMDFDRTAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2QTAwMDAwMDAwQzAKKzoxMDFDRjAwMDAwMjAxODA3MDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwNDUKKzoxMDFEMDAwMDAwMDAwMkMxMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMjMKKzoxMDFEMTAwMDAwMDAwMDAwMDAzNDIwMjMwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDFEMjAwMDEyQzAwMDAwMDAwMDAyNzIwMDAwMDAwMDAwMzQyMDQ0RDUKKzoxMDFEMzAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjcxNUUKKzoxMDFENDAwMDAwMDAwMDE2MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE4NTQKKzoxMDFENTAwMDAwNDA0ODExMDAwMDAyNzYwMDAwMDAwMDAwMzQyMDQ0REEKKzoxMDFENjAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjc1MkEKKzoxMDFENzAwMDAwMDAwMDE3MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE5MjIKKzoxMDFEODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExQzgKKzoxMDFEOTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzkKKzoxMDFEQTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFOTAwMDAzRkZGQjYKKzoxMDFEQjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwRjcKKzoxMDFEQzAwMDAwMDAwMjU2MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxQjYKKzoxMDFERDAwMDAwMDAwMDEwNDAyMTA2MjAwMDAwMDAwMDAwMDBGRkZGNkUKKzoxMDFERTAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwNDIKKzoxMDFERjAwMDAwMDAwMDAwMDAwMEZGRkZDMDI4MTIyMDAwMDAwMDAwQ0IKKzoxMDFFMDAwMDAwMDAwMDEwNDAyMTE2MjAwMDAwMDAwMDAwMDBGRkZGMkQKKzoxMDFFMTAwMEMwODgxQTIwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNEEKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMzgKKzoxMDFFMzAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDAwMzIKKzoxMDFFNDAwMDAwNjAwMDAwMDAwMDA2MzEwMDAwMDAwMEMwNjAwMDAwREIKKzoxMDFFNTAwMDAwMDAwMkEzMDAwMDAwMDUwMDIwMEEyRDAwMDAwMDAwODEKKzoxMDFFNjAwMDAwMDAwMDA4MDAyMjBBMjIwMDAwMDAwMDAwMDAwMDJCRjEKKzoxMDFFNzAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAxQzAwMjAxRTJENzQKKzoxMDFFODAwMDAwMDAwMDAwMDAwMDcwMDAwMDI4MUUyNzAwMDAwMDAwNzUKKzoxMDFFOTAwMDAwMDAwMDAwMDAzMTFDRTYwMDAwMDAwMDAwMDAwMDJBRTUKKzoxMDFFQTAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAwQzAwMjIxQTI2NUQKKzoxMDFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwMEQKKzoxMDFFQzAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDI5MjAwMDAwMDAwOTgKKzoxMDFFRDAwMDAwMjAxQzExMDAwMDAwMDAwMDAwMDAwMDAwMjAwQzExNzgKKzoxMDFFRTAwMDAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMzAwMDAwMDAwNEUKKzoxMDFFRjAwMDAwMDAwMDEwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDFGMDAwMDAwNjkxQ0UyMDAwMDAxMkY5MzgwMDAwMDAwMjA0NDExQjIKKzoxMDFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwNTIKKzoxMDFGMjAwMDk1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDFGMzAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwNTUKKzoxMDFGNDAwMDAwMDAwMjlEMDAwMDAwMDEwMDMzM0UyRjAwMDAwMDAwNTEKKzoxMDFGNTAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDkyMDAwMDAwQ0UKKzoxMDFGNjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRDQKKzoxMDFGNzAwMDAwMDAwMDAwMDAwMDAwMUMwMDQwMzYyNzAwMDAwMDAwQTgKKzoxMDFGODAwMDAwMDAwMDBDQzAyMjBBMjAwMDAwMDAwMDAwMDAwMDI5MTAKKzoxMDFGOTAwMDAwMjAzNjIyMDAwMDAwMDAwMDAwMDAyOEMwNDAzNjIwNEIKKzoxMDFGQTAwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwNzYKKzoxMDFGQjAwMDAwMDAwMDA5MDAyMDQ4MTEwMDAwMDAwMEExMDAwMDAwRkUKKzoxMDFGQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExQzIKKzoxMDFGRDAwMDAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwNzUKKzoxMDFGRTAwMDAwMDAwMDAwMDAyQzFDRTMwMDAwMDAwMDAwMDAwMDIxQTUKKzoxMDFGRjAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyMjAwMjAxRTJERDcKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDMUNFNDAwMDAwMDAwQTQKKzoxMDIwMTAwMDAwMDAwMDIyMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIzRkUKKzoxMDIwMjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEEzNTEKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwNEYKKzoxMDIwNDAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDI0Q0MKKzoxMDIwNTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAKKzoxMDIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwMUYKKzoxMDIwNzAwMDAwMDAwMDI0MDA4MDM2MjcwMDAwMDAwMDAwMDAwMDIxM0UKKzoxMDIwODAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyMjAwMjAzNjI0M0IKKzoxMDIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzAwMDAwMDAwNTAKKzoxMDIwQTAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIwQjAwMDAwMzExQ0M0MDAwMDAwMDAwMDAwMDAyNDAwODAzNjI3MEUKKzoxMDIwQzAwMDAwMDAwMDAwMDAwMDAwMUEwMDIwMzYyNzAwMDAwMDAwNzkKKzoxMDIwRDAwMDAwMDAwMDFCMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDE3NTAKKzoxMDIwRTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3MzkKKzoxMDIwRjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMkRDMkUKKzoxMDIxMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJEOTAwMDAwMDFBOUEKKzoxMDIxMTAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAxQjAwMjAzNjI4QTkKKzoxMDIxMjAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwMkQKKzoxMDIxMzAwMDAwMDAwMDAyMDAyMTAyMjcwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDIxNDAwMDE0RTAwMDAwMDAwMDAyRDkwMDAwMDAwMzAwMjEwMjI3NzMKKzoxMDIxNTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMkRDQUQKKzoxMDIxNjAwMDAwMDAwMDIzMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDIxNzAwMDAwMkUwMEUxMDAwMDAwMDAwMDAwMDAwMDAyQzAwMDAwOEUKKzoxMDIxODAwMDAwMDAwMkRDMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwRTUKKzoxMDIxOTAwMDAwMDAwMDAwMDAzMTIwQTEwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDIxQTAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMDA2QzAwMDAwNTMKKzoxMDIxQjAwMDAwMDAwMkRDMDAwMDAwMjQwMDIwMUUyRDAwMDAwMDAwQjIKKzoxMDIxQzAwMDAwMDAwMDAwMDAyRTAwRTIwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIxRDAwMDAyQzAwMDAwMDAwMDAyREMwMDAwMDAyMjAwMjAxRTJERDIKKzoxMDIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwREMKKzoxMDIxRjAwMDAwMDAwMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDIyMDAwMDA2QzAwMDAwMDAwMDAyREMwMDAwMDAwMDAwNjAwMDAwQ0EKKzoxMDIyMTAwMDAwMDAwNjY4MDAwMDAwMDAwMDYwMDAwMDAwMDAwMkI1MzkKKzoxMDIyMjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDAwOEUKKzoxMDIyMzAwMDAwNjAwMDAwMDAwMDAyQjUwMDAwMDAwMDAwNjAwMDAwMjcKKzoxMDIyNDAwMDAwMDAwNjVGMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFMDkKKzoxMDIyNTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBNzAwMDAwMDAwNzUKKzoxMDIyNjAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAxQTAwMjAxRTJEQzkKKzoxMDIyNzAwMDAwMDAwMDAwMDAwMDAwMUIwMDgwMjIyRDAwMDAwMDAwNzQKKzoxMDIyODAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDIyOTAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTYKKzoxMDIyQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwQjcKKzoxMDIyQjAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDEwMTYKKzoxMDIyQzAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0OTYKKzoxMDIyRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwOEUKKzoxMDIyRTAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDUKKzoxMDIyRjAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3ODMKKzoxMDIzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwNUMKKzoxMDIzMTAwMDAwMDAwMDAwMDAyOTQ4NDcwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDIzMjAwMDAwMzExQ0EzMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3NDYKKzoxMDIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwQTUKKzoxMDIzNDAwMDAwMDAwMDAwMDAzMTFDQTEwMDAwMDAwMDAwMDAwMDEwOEYKKzoxMDIzNTAwMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAwMDAwMjk0ODQ3NUUKKzoxMDIzNjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwRkEKKzoxMDIzNzAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDAwMDBGRkZGNEEKKzoxMDIzODAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3NjIKKzoxMDIzOTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwQ0MKKzoxMDIzQTAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMDAwMDBGRkZGMUMKKzoxMDIzQjAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwODk0OTA3RDIKKzoxMDIzQzAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwOUEKKzoxMDIzRDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxMDQKKzoxMDIzRTAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzMwOEEyQzMKKzoxMDIzRjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwNkIKKzoxMDI0MDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDI0MTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTMKKzoxMDI0MjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMzUKKzoxMDI0MzAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxQTMKKzoxMDI0NDAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzAwOEEyNjUKKzoxMDI0NTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwMEEKKzoxMDI0NjAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDI0NzAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzNzAKKzoxMDI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMzcKKzoxMDI0OTAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDI0QTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzgwOEM1QUUKKzoxMDI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDg0MTAwMDAwMDAwQTMKKzoxMDI0QzAwMDAwMDAwMDAxMDAyMjBBMjIwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI0RDAwMDAwMzMwOEEyMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyQUQKKzoxMDI0RTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwNzcKKzoxMDI0RjAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDE3RUMKKzoxMDI1MDAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwODgKKzoxMDI1MTAwMDAwMDAwMzE4RkZGRkZGRUYwMDI4MDYyMTAwMDAwMDAwNjUKKzoxMDI1MjAwMDAwMDAwMDE0MDAyMDIyMkQwMDAwMDAwMDAwMDBGOEUwNTAKKzoxMDI1MzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTAxQjMKKzoxMDI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwMTAwMDAwMDAwQjgKKzoxMDI1NTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDI1NjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwODA0ODExMDcKKzoxMDI1NzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwN0IKKzoxMDI1ODAwMDk3MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDI1OTAwMEMwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDMKKzoxMDI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQjIKKzoxMDI1QjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDI1QzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRDEKKzoxMDI1RDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRDMKKzoxMDI1RTAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDI1RjAwMDAwQTAwMDBBMDAwMDAwMDA5NzAwMDAwMDAwMjA0NDExMjUKKzoxMDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNTEKKzoxMDI2MTAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMDI2MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExM0UKKzoxMDI2MzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNzIKKzoxMDI2NDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDI2NTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNkUKKzoxMDI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQzAKKzoxMDI2NzAwMDk3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDI2ODAwMDAwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExRDIKKzoxMDI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQzEKKzoxMDI2QTAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDI2QjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRTAKKzoxMDI2QzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRTIKKzoxMDI2RDAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDI2RTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwRTUKKzoxMDI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMzAKKzoxMDI3MDAwMDAwMDAyMjU3MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRDgKKzoxMDI3MTAwMEMwNDg0QTIwMDAwMDAwMDAwMDAwMjI1RDAwMjA0NDExNTMKKzoxMDI3MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwNjEKKzoxMDI3MzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0NTAwMDAwMDAwRUUKKzoxMDI3NDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExQUUKKzoxMDI3NTAwMDAwMDAwMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwRDIKKzoxMDI3NjAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDI3NzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExMUQKKzoxMDI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMjAwMDAwMDAwRjYKKzoxMDI3OTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDI3QTAwMDQwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTQwMzA0QTIwQTYKKzoxMDI3QjAwMDAwMDAwMDAwMDAwMDAwMDJDMDMwNEEyMDAwMDAwMDAwQkQKKzoxMDI3QzAwMDAwMDAwMDAxMDA1MzBBMjIwMDAwMDM0QjAwMDAwMDNGRkMKKzoxMDI3RDAwMEMwMjgwQTIwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExRjEKKzoxMDI3RTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNkYKKzoxMDI3RjAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4MzMKKzoxMDI4MDAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExN0MKKzoxMDI4MTAwMDAwMDAwNjhEMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwQzEKKzoxMDI4MjAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDM1NDAwMDAwMDE0NDkKKzoxMDI4MzAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNzkKKzoxMDI4NDAwMDAwMDAwMzY0MDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwN0MKKzoxMDI4NTAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MzgKKzoxMDI4NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODAyNDkKKzoxMDI4NzAwMDAwMDAwMzZFMDAwMDIxMDAwMDIwNDQxMTAwMDAwMDAwNTEKKzoxMDI4ODAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDI4OTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTgKKzoxMDI4QTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwRTAKKzoxMDI4QjAwMDAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDI4QzAwMDBDQzAwMDAwMDAwMDAzNkEwMDAwMjAxMDAwMjA0NDExMkEKKzoxMDI4RDAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwRkYKKzoxMDI4RTAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDI4RjAwMDAwNDA0ODAyMDAwMDAzNUYwMDAwMDAyODAwMkYwMjIyNzEKKzoxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUMwMzYKKzoxMDI5MTAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDI5MjAwMDAwNDA0ODAyMDAwMDAzNUYwMDAwMDAyQzAwMjAzNjI2MTMKKzoxMDI5MzAwMDAwMDAwMDAwMDAwMDAwNDkwMDIwMTgxMTAwMDAwMDAwMDUKKzoxMDI5NDAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxQ0UKKzoxMDI5NTAwMDAwMzMxQTI2MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI2QUQKKzoxMDI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMzcwMjgKKzoxMDI5NzAwMDAwMDAwMDJDMDA4MDFBMkQwMDAwMDAwMDAwMDAwMDNGMjUKKzoxMDI5ODAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxNTAwMkYwMjIyQ0QKKzoxMDI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzg2QzIKKzoxMDI5QTAwMDAwMDAwMDA2MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDI5QjAwMDBDRTAwMDAwMDAwMDAzQjEwMDAwMDAxNjAwMkYwMjIyMEUKKzoxMDI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0I1NjMKKzoxMDI5RDAwMDAwMDAwMDIwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDI5RTAwMDBDRTAwMDAwMDAwMDAzOUMwMDAwMDAwRjAwMkYwMjIyRkEKKzoxMDI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0E4NDAKKzoxMDJBMDAwMDAwMDAwMDEwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDJBMTAwMDBDRTAwMDAwMDAwMDAzQTgwMDAwMDAxRTAwMkYwMjIyQUUKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzkwMjcKKzoxMDJBMzAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDJBNDAwMDAwNDA0ODAyMDAwMDAwMDAwODAwMDAwMDAwMjkwQTIyOUYKKzoxMDJBNTAwMDAwMDAwMDAwMDAwMDAwMDM0MDIxMEUyMDAwMDAwMDAwRTQKKzoxMDJBNjAwMDAwMDAwMDBDQzAyMTEyMjAwMDAwMDAwMDAwMDgwMDAwM0YKKzoxMDJBNzAwMDAwMjgxMjI0MDAwMDAwMDAwMDAwMDAxNEMwMjIxNjIwQ0MKKzoxMDJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MTRBNDAwMDAwMDAwNjUKKzoxMDJBOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJBQTAwMDAwMjk0OEEyMDAwMDAwMDAwMDAwQTFGRTAwMjA0NDExRkYKKzoxMDJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMzAwMDAwMDAwOEIKKzoxMDJBQzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMEYKKzoxMDJBRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExRUYKKzoxMDJBRTAwMDAwMDAwMDAwMDAwMDAwMTYwMDIwNDgxMTAwMDAwMDAwNTcKKzoxMDJBRjAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDE1NUIKKzoxMDJCMDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwN0UKKzoxMDJCMTAwMDAwMDAwMzkyMDAwMDIxMEUwMDIwNDQxMTAwMDAwMDAwN0MKKzoxMDJCMjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDJCMzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExQjIKKzoxMDJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwRkIKKzoxMDJCNTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxN0UKKzoxMDJCNjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExNUUKKzoxMDJCNzAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwNDgxMTAwMDAwMDAwQzUKKzoxMDJCODAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDAzREMKKzoxMDJCOTAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwRUUKKzoxMDJCQTAwMDAwMDAwMzlFMDAwMDIxMDgwMDIwNDQxMTAwMDAwMDAwRTYKKzoxMDJCQjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDJCQzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMjIKKzoxMDJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwNkIKKzoxMDJCRTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMDJCRjAwMDAwMjA0ODAyMDAwMDAwMDA4MDAwMDAwMDAwMjA0NDExNzYKKzoxMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNEIKKzoxMDJDMTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDEwQUUKKzoxMDJDMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwRkIKKzoxMDJDMzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0FFMEYKKzoxMDJDNDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAyMDEwMTQKKzoxMDJDNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDYKKzoxMDJDNjAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwQTgKKzoxMDJDNzAwMDAwMDAwMDA2MDA0MDQ4MTEwMDAwMDAwMDAwMDAyMDEwODUKKzoxMDJDODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDYKKzoxMDJDOTAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwNzgKKzoxMDJDQTAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM2RTAwMDAwMDAwRTQKKzoxMDJDQjAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwODAwRUMKKzoxMDJDQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMTgKKzoxMDJDRDAwMDAwMDAwMDFEMDAyMTAyMjMwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDJDRTAwMDE0RTAwMDAwMDAwMDAzQ0U4MTAwMDAwMDAwMjA0NDExMjkKKzoxMDJDRjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNUEKKzoxMDJEMDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4MUQKKzoxMDJEMTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExNjcKKzoxMDJEMjAwMDAwMDAwNjhEMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwQUMKKzoxMDJEMzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDNDMDAwMDAyMTAwQkIKKzoxMDJENDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyQTQKKzoxMDJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDgKKzoxMDJENjAwMEJBQkVDQUZFMDAyMDQ4MTEwMDAwMDAwMENBRkVCQUJFNkEKKzoxMDJENzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjAxMDAwMjA0NDExMzUKKzoxMDJEODAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwNEEKKzoxMDJEOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0NzQKKzoxMDJEQTAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMjE3MDAwMjA0NDExODQKKzoxMDJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwQTkKKzoxMDJEQzAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDgxMDAwMDAwMTcKKzoxMDJERDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwQTAwMjA0ODExRkIKKzoxMDJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwQjMKKzoxMDJERjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNEMzhDMDAwMDAwOUQKKzoxMDJFMDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExNzQKKzoxMDJFMTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDJFMjAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAzRkZGRUEKKzoxMDJFMzAwMDQwMjgwQTIwMDAwMDAwMDA4MDAwMDAwMDQwMjgwRTIwRUEKKzoxMDJFNDAwMDAwMDAwMDAwNDAwMDAwMDBDMDI4MTIyMDAwMDAwMDAwMjgKKzoxMDJFNTAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY4RDAwMDAwMDAwMEEKKzoxMDJFNjAwMDAwMjAxNDEwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzQ0EKKzoxMDJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwM0UxQTIKKzoxMDJFODAwMDAwMDAwMDAwQzA0MDE4MDAwMDAwMDNFNDAwMDAzRkZGMDUKKzoxMDJFOTAwMEMwMjgxQTIwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI2MzcKKzoxMDJFQTAwMDAwMDAwNjhEMDAwMDAwMDAwMDIwMTgxMDAwMDAwMDAwNDcKKzoxMDJFQjAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDJFQzAwMDBDQzAwMDAwMDAwMDAzRTcwMDAwMDAwMEMwNDAxQzAwMzAKKzoxMDJFRDAwMDAwMDAwM0VBMDAwMDNGRkZDMDI4MUUyMDAwMDAwMDAwQTEKKzoxMDJFRTAwMDAwMDQwMDAwMDA2OTQ2MjcwMDAwMDY4RDAwMDAwMDAwNzUKKzoxMDJFRjAwMDAwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMDAwMjA0NDAyMjAKKzoxMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MjBDNTAwMDAwMDAwQjQKKzoxMDJGMTAwMDAwMDAwMDAwMDA0OTQ4RTgwMDAwMDAwMEE1ODAwMDAwMTMKKzoxMDJGMjAwMDAwMjAwODExMDAwMDAwMDAwMDAwMjAwMDAwMjAwQzExMEIKKzoxMDJGMzAwMDAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDEyNDMKKzoxMDJGNDAwMDAwMDAwMDAwMDAyMDQ0MDIwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDJGNTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDQwMjA0ODAwQTEKKzoxMDJGNjAwMDAwMDAwMDAwMDAwMDAwMUZDMDIxMDIyMDAwMDAwMDAwM0YKKzoxMDJGNzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNGNzAwMDAyMDEwNTMKKzoxMDJGODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDMKKzoxMDJGOTAwMDAwMDAwMDAwMDAwMEZGRkZDMDQ4MTIyMDAwMDAwM0ZGRjcKKzoxMDJGQTAwMEE3ODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBBMDAwMjEKKzoxMDJGQjAwMDAwMjAwQzExMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExOUMKKzoxMDJGQzAwMDAwMDAwNDEyMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwODUKKzoxMDJGRDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDJGRTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwQTEKKzoxMDJGRjAwMDAwMDAwMDAwODMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDkKKzoxMDMwMDAwMDAwMDAwMDAwMDAzMDQ4ODMwMDAwMDAwMDg0MDAwMDAwNDEKKzoxMDMwMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMTMKKzoxMDMwMjAwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMDAwMDAwMDAwMDAwODMKKzoxMDMwMzAwMDgzMDAwMDAwMDA2MDQ0MTEwMDAwMDQxMjAwMDAwMDAwNDIKKzoxMDMwNDAwMEMwNDAwNDAwMDAwMDAwMDFBOTgwMDAwMDAwMjAwODExMTkKKzoxMDMwNTAwMDAwMDAwMDAwMDAwMEMwMDAwMDQwMEMxMTAwMDAwM0ZBNTYKKzoxMDMwNjAwMEFCODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGOEUwMjQKKzoxMDMwNzAwMDAwNDAwQzExMDAwMDAzRkFBRDgwMDAwMDAwMjAwODExOTAKKzoxMDMwODAwMDAwMDAwMDAwMDAwMEY4ODAwMDQwMEMxMTAwMDAwM0ZBNkUKKzoxMDMwOTAwMEIzODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGM0ZDRDUKKzoxMDMwQTAwMDAwNDAwQzExMDAwMDAzRkFBRjgwMDAwMDAwMjAwODExNUUKKzoxMDMwQjAwMDAwMDAwMDAwMDAwMEUwMDAwMDQwMEMxMTAwMDAwM0ZBRDYKKzoxMDMwQzAwMEIxODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGMDAwQTYKKzoxMDMwRDAwMDAwNDAwQzExMDAwMDAzRkE4MzAwMDAwMDAwMjA0NDExOUUKKzoxMDMwRTAwMDAwMDAwMDAwMDAwMDIxNDgwMDIwNDgxMTAwMDAwMDAwRkUKKzoxMDMwRjAwMDg0MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDMxMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwN0EKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMkYKKzoxMDMxMjAwMDAxMTgyMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDMxMzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOEEKKzoxMDMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRDUKKzoxMDMxNTAwMDAyMThBMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDMxNjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNUEKKzoxMDMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQTUKKzoxMDMxODAwMDAzMThDMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDMxOTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMkEKKzoxMDMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNzUKKzoxMDMxQjAwMDA0MThGOEUwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDMxQzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwRkEKKzoxMDMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNDUKKzoxMDMxRTAwMDA1MThGODgwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDMxRjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwQ0EKKzoxMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMTQKKzoxMDMyMTAwMDA2MThFMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDMyMjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOTkKKzoxMDMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRTQKKzoxMDMyNDAwMDA3MThGMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDMyNTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNjkKKzoxMDMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQjQKKzoxMDMyNzAwMDA4MThGM0ZDQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDMyODAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzkKKzoxMDMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwODQKKzoxMDMyQTAwMDAwMDAwMDMwMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDMyQjAwMEMwMjkwQzQwMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjIzMzAKKzoxMDMyQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMUEKKzoxMDMyRDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDg2MDAwMDAwQkUKKzoxMDMyRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAxRTAKKzoxMDMyRjAwMDAwMDAwMDAwODUwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMTQKKzoxMDMzMDAwMDAwMDAwMDAwMDA0MDQ4MDEwMDAwMDAwMDAwMDAyMTdDOTcKKzoxMDMzMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxODQwMjEwMjIwOUQKKzoxMDMzMjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNDQ1ODAKKzoxMDMzMzAwMDAwODAwMDAwQzA0OTRBMjAwMDAwMDQ0NjAwMDAwMDAwNTAKKzoxMDMzNDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMkQKKzoxMDMzNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNDUKKzoxMDMzNjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNjYKKzoxMDMzNzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMEMwMjAwODAwRUMKKzoxMDMzODAwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwMjYKKzoxMDMzOTAwMDAwMDQyMTdGMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFGMjIKKzoxMDMzQTAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwRjYKKzoxMDMzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNEMwMjAwMDAwNDRCMzAKKzoxMDMzQzAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDMzRDAwMEMwMjAxMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxNDAwMDkKKzoxMDMzRTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTgwMDAwMDAwMDAwRTUKKzoxMDMzRjAwMDAwMDAwMDAwQzAyMDFDMDAwMDAwMDAwMDAwMDA3RjAwNTIKKzoxMDM0MDAwMDAwMjgwQTIxMDAwMDAwMDAwMDAwNDUwMDAwMkYwMjIyRDEKKzoxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNDU5NjMKKzoxMDM0MjAwMDAwMDAwMDAwQzAyMDIwMDAwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMDM0MzAwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjgwQTIzMTAKKzoxMDM0NDAwMDAwMDAwMDAwMDAwMDAwMTAwMDJGMDIyMjAwMDAwMDAwMTkKKzoxMDM0NTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ2MTgxMDAwMDAwOUEKKzoxMDM0NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExNkQKKzoxMDM0NzAwMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNDAwMDAwNjhERTIKKzoxMDM0ODAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ2NjgxMDAwMDAwMTEKKzoxMDM0OTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExM0UKKzoxMDM0QTAwMDAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwMTkKKzoxMDM0QjAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDM0QzAwMDAwNjA0ODA1MDAwMDA2OTIwMDAwMDAwMDAwMjgyNEYwN0IKKzoxMDM0RDAwMDAwMDAwMDAwMDAwMDAwMDcwMDI4MEEyMzAwMDAwMDAwOTAKKzoxMDM0RTAwMDAwMDAwMDAxMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDM0RjAwMDBBRTAwMDAwMDAwMDA0NkQwMDAwMDAwMDAwMkYwMEM5NzkKKzoxMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUwMDAwMDAwMDAwNDg2NEQKKzoxMDM1MTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5MzAwMDAwMDAyRDIKKzoxMDM1MjAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwNUUKKzoxMDM1MzAwMDAwMDAwNDcyMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMUQKKzoxMDM1NDAwMDAwMDAwMDAwMDJFMDAwMDAwMDAwMDQ4NjAwMDAwMDAwMEYKKzoxMDM1NTAwMDAwNDAwMDAwMDAwMDA0OTMwMDAwMDAwMzAwMkYwMjIyM0UKKzoxMDM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDc3RjYKKzoxMDM1NzAwMDAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDM1ODAwMDBDRTAwMDAwMDAwMDA0ODYwMDAwMDAwMDAwNDAwMDAwODUKKzoxMDM1OTAwMDAwMDAwNDkzMDAwMDAwMDQwMDJGMDIyMjAwMDAwMDAwM0QKKzoxMDM1QTAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ3QzAwMDAwMDAwQjEKKzoxMDM1QjAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMjkKKzoxMDM1QzAwMDAwMDAwNDg2MDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkzOUEKKzoxMDM1RDAwMDAwMDAwMDA1MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDM1RTAwMDBBRTAwMDAwMDAwMDA0ODEwMDAwMDAwMDAwMkYwMEM5NzQKKzoxMDM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwNDg2NUIKKzoxMDM2MDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5MzAwMDAwMDA2REQKKzoxMDM2MTAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwNkQKKzoxMDM2MjAwMDAwMDAwNDg2MDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMTgKKzoxMDM2MzAwMDAwMDAwMDAwMDhFMDAwMDAwMDAwMDQ4NjAwMDAwMDAwMTgKKzoxMDM2NDAwMDAwNDAwMDAwMDAwMDA0OTMwMDAwN0YwMDAwMjgwQTIxRDEKKzoxMDM2NTAwMDAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwRDIKKzoxMDM2NjAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDA4NjgKKzoxMDM2NzAwMDAwMjEwQTIzMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMjgKKzoxMDM2ODAwMDAwMDAwNDkwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwQTcKKzoxMDM2OTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDM2QTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQ0EKKzoxMDM2QjAwMDAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwMzEKKzoxMDM2QzAwMDAwMDAwMDAwQzAyMDQ0MDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDM2RDAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwQzIKKzoxMDM2RTAwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MEEyMTAwMDAwMDAwMDgKKzoxMDM2RjAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDM3MDAwMDBBRTAwMDAwMDAwMDA0OTkwMDAwMDAwMEMwMjAwMDAwNTIKKzoxMDM3MTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwQzkKKzoxMDM3MjAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDM3MzAwMDAwNDA0QzA4MDAwMDA0NTkwMDAwMDAwMEMwMjAwODAwQjAKKzoxMDM3NDAwMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwREEKKzoxMDM3NTAwMDAwMDAwMDExNDAyMTEyMjAwMDAwMDAwMDAwMDAwMDEyQjMKKzoxMDM3NjAwMDQwMjExNjIwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExQzMKKzoxMDM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwREYKKzoxMDM3ODAwMDAwMDAwMDAwMDAyMTAyMjUwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDM3OTAwMDE0RTAwMDAwMDAwMDA0QTMwMDA0MDAwMEMwNDk0QTIwMTcKKzoxMDM3QTAwMDAwMDAwNEE0RkZGQkZGRkZDMDI4NEEyMDAwMDAwMDAwMjcKKzoxMDM3QjAwMDAwMDAwMDAwMDAyMTAyMjMwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDM3QzAwMDE0RTAwMDAwMDAwMDA0QjAwMDAwMDAwMEMwMjA0ODAwMjkKKzoxMDM3RDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQzEKKzoxMDM3RTAwMDAwMDAwMDAwMDAyMTAyMjQwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDM3RjAwMDE0QzAwMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExRkYKKzoxMDM4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMDIwNDgxMTAwMDAwMDAwMzMKKzoxMDM4MTAwMDAwMDAwMDAwMDAyMDAwMTAwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDM4MjAwMDE0QzAwMDAwMDAwMDA0QUNBMDAwMDAwMDAwMjA0NDExRkYKKzoxMDM4MzAwMDAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwQUYKKzoxMDM4NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0N0UKKzoxMDM4NTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2QjAwMjA0NDExRUUKKzoxMDM4NjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgxMDAwMDAwMDAwMjAKKzoxMDM4NzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA1NEQKKzoxMDM4ODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2QzAwMjA0NDExQkQKKzoxMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgxMDAwMDAwMDAwRjAKKzoxMDM4QTAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDM4QjAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwREMKKzoxMDM4QzAwMDAwMDAwNEFBMDAwMDAwMDBDMDIxMEEyMDAwMDAwMDAwM0YKKzoxMDM4RDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRDMzgxMDAwMDAwQ0MKKzoxMDM4RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRUEKKzoxMDM4RjAwMDAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwQzUKKzoxMDM5MDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDM5MTAwMEMwNjA0ODAwMDAwMDA2OTIwMDAwMDAwMDAwNDAwMDAwNjcKKzoxMDM5MjAwMDAwMDAwNEM3ODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDYKKzoxMDM5MzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQwMDAwMDkKKzoxMDM5NDAwMEMwMjk0NjIwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwMDgKKzoxMDM5NTAwMDAwMDAwNjhEMDAwMDAwMDEwMDIxMDIyMjAwMDAwMDAwOEUKKzoxMDM5NjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRDRTAwMDAyMTY5MjcKKzoxMDM5NzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQUEKKzoxMDM5ODAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMEYKKzoxMDM5OTAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMENBRkVCQUJFNkYKKzoxMDM5QTAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMDAwMEMwMjA0NDAwNUEKKzoxMDM5QjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgxMDAwMDAwMDAwQUYKKzoxMDM5QzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAKKzoxMDM5RDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExRTAKKzoxMDM5RTAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwNTAKKzoxMDM5RjAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDAwNjEKKzoxMDNBMDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwOEYKKzoxMDNBMTAwMDAwMDAwNEQwMDAwMDIxODAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDNBMjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDNBMzAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwN0UKKzoxMDNBNDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwOTYKKzoxMDNBNTAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAzMUIKKzoxMDNBNjAwMDAwMzMzRTJGMDAwMDAwMDAwMDAwMDAwMTAwMjEwMjIxNzEKKzoxMDNBNzAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwNTAwNEQKKzoxMDNBODAwMDAwMDAwMDJDMDAyMDBBMkQwMDAwMDAwMDAwMDQwMDAwQUYKKzoxMDNBOTAwMDE4RTAwQzExMDAwMDA0RUYwMDAwMDAwMTAwMzMzRTJGN0QKKzoxMDNBQTAwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMTcKKzoxMDNBQjAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMDNBQzAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMjcKKzoxMDNBRDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQkUKKzoxMDNBRTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAyMTY5MjQKKzoxMDNBRjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyRTcKKzoxMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwNEEKKzoxMDNCMTAwMDAwMDAwMDA4MDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDNCMjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEQ4QzA0ODAwOEQKKzoxMDNCMzAwMDAwMDAwNEUzMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwOUYKKzoxMDNCNDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMDNCNTAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyOTYKKzoxMDNCNjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMkQKKzoxMDNCNzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDJERjAKKzoxMDNCODAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwMDAwMjkwQzgzMUUKKzoxMDNCOTAwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMjYKKzoxMDNCQTAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDNCQjAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMzYKKzoxMDNCQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQ0QKKzoxMDNCRDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDExQUMKKzoxMDNCRTAwMDAwMjEwMjI0MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQkEKKzoxMDNCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNEFBRDcKKzoxMDNDMDAwMDAwMDAwMDJDQzAyMDM2MjAwMDAwMDAwMDAwMDAwMDJEMjUKKzoxMDNDMTAwMEMwNDAzNjIwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjIxRkIKKzoxMDNDMjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNTA1QjYKKzoxMDNDMzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMTkKKzoxMDNDNDAwMEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwNDAwOTcKKzoxMDNDNTAwMDAwMDAwMDAxQjUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMzkKKzoxMDNDNjAwMDAwMDAyMDAwMDAyMDQ4MTEwMDAwMDAwMEI2MDAwMDAwMDUKKzoxMDNDNzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwQTAwMDAwMjA0ODExQjYKKzoxMDNDODAwMDAwMDAwMDAwQjcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDgKKzoxMDNDOTAwMDAwMDBDMDAwMDAyMDQ4MTEwMDAwMDAwMEI4MDAwMDAwMzMKKzoxMDNDQTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjhFMDAwMjA0ODExNEUKKzoxMDNDQjAwMDAwMDAwMDAwQjkwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDYKKzoxMDNDQzAwMDAwMDBGODgwMDAyMDQ4MTEwMDAwMDAwMEJBMDAwMDAwNDkKKzoxMDNDRDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRTAwMDAwMjA0ODExMTYKKzoxMDNDRTAwMDAwMDAwMDAwQkIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQTQKKzoxMDNDRjAwMDAwMDBGMDAwMDAyMDQ4MTEwMDAwMDAwMEJDMDAwMDAwOUYKKzoxMDNEMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjNGQzAwMjA0ODExRDYKKzoxMDNEMTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUQKKzoxMDNEMjAwMDAwMDAwMDAyMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMEZGMTkKKzoxMDNEMzAwMDAwMjgwRTMwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzQzkKKzoxMDNENDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTE5ODkKKzoxMDNENTAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDNENjAwMDE0QzAwMDAwMDAwMDA1MkUwMDAwMDAwMDAwMjAwQzExMEYKKzoxMDNENzAwMDAwMDAwMDAwMDAwMDAwMUMwMDIwMzYyMzAwMDAwMDAwQUUKKzoxMDNEODAwMDAwMDAwMDJCMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI5NjYKKzoxMDNEOTAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyODAwMjAzNjIzMDkKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMzYyMzAwMDAwMDAwODMKKzoxMDNEQjAwMDAwMDAwMDI1MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI2M0YKKzoxMDNEQzAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAxNTAwMjAzNjIzRUMKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMTYwMDIwMzYyMzAwMDAwMDAwNTQKKzoxMDNERTAwMEZGRkZFMDAwMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDIxOTcKKzoxMDNERjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyMjAwMjAzNjIzQUYKKzoxMDNFMDAwMDAwMDAwMDAwMDAwMDFGRkYwMDIwMEMxMTAwMDAwMDAwNTcKKzoxMDNFMTAwMDAwMDAwMDIzMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI0RTIKKzoxMDNFMjAwMDAwMjAzNjIzMDAwMDAwMDBGMUZGRkZGRjAwMjgzQTJFOUIKKzoxMDNFMzAwMDAwMDAwMDAwMDAwMDAwMUFDMDIyMEUyMDAwMDAwMDAwNTgKKzoxMDNFNDAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDgxMDAwMDAwMjIKKzoxMDNFNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExNkUKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMDAwMkE0MDIwMzYyMDAwMDAwMDAwNzIKKzoxMDNFNzAwMDg3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDNFODAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGNDAwMjA0NDExMDAKKzoxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwQUEKKzoxMDNFQTAwMDAwMDAwMDAwMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDMwQTUKKzoxMDNFQjAwMDAwMjAzNjIzMDAwMDAwMDA5RDAwMDAwMDAwMjA0NDExNzcKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMUY0MDIxNEEyMDAwMDAwMDAwMDgKKzoxMDNFRDAwMDk2MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDNFRTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwQzAwQkUKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTAwMDAwMDAwMDAwRDIKKzoxMDNGMDAwMDAwMDAwMDFGMDAyMTE2MjQwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDNGMTAwMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjAzNjIzMzcKKzoxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDMwMDI4MUUyMzAwMDAwMDAwMjUKKzoxMDNGMzAwMDAwMDAwMDA4MDAyMjIyMjMwMDAwMDAwMEZGRkZGMDAwMjQKKzoxMDNGNDAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjkyMEU4Q0UKKzoxMDNGNTAwMDAwMDAwMDAwMDAwMDAwMUYwMDIwMzYyODAwMDAwMDAwQzQKKzoxMDNGNjAwMDAwMDAwMDE4MDAyMTFFMjMwMDAwMDAwMDAwMDAwMDIwQjcKKzoxMDNGNzAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAwMjAwMjIxNjI0NjYKKzoxMDNGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMTRBODAwMDAwMDAwNDUKKzoxMDNGOTAwMDAwMDAwMDFFMDAyMDM2MjUwMDAwMDAwMDAwMDAwMDAzODUKKzoxMDNGQTAwMDAwMjExQTI0MDAwMDAwMDAxMDAwMDAwMDAwMjgxQTI2M0EKKzoxMDNGQjAwMDAwMDAwMDAwRUZGRkZGRkYwMDI4M0EyRTAwMDAwMDAwODUKKzoxMDNGQzAwMDAwMDAwMDAwMDA0OTM4Q0UwMDAwMDY3QjAwMDAwMDAxMjAKKzoxMDNGRDAwMDQwMjgwQTIwMDAwMDAwMDAwMDAwMDAwNjQwMjgwRTIwQjMKKzoxMDNGRTAwMDAwMDAwMDAwMDAwMDAzMDBDMDI4MTIyMDAwMDAwMDAwQjQKKzoxMDNGRjAwMDAwMDAwMDA4MDAyMTEyMjQwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDQwMDAwMEMwMjAxNjIwMDAwMDAwMDAwMDAwMDAwMEMwMjAxQTIwODAKKzoxMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxMDIyMjAwMDAwMDAwNUIKKzoxMDQwMjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDU2NjgxMDAwMDAwRDAKKzoxMDQwMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExOTEKKzoxMDQwNDAwMDAwMDAwMDAwMDAwMDIyNTgwMDMwMEEyNDAwMDAwMDAwOTgKKzoxMDQwNTAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY4RDAwMDAyMTY5NkUKKzoxMDQwNjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA1NkUKKzoxMDQwNzAwMDAwMDAwMDAwMDAwMjAwMDAwMDI5NEEyNjAwMDAwMDAwQTUKKzoxMDQwODAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMENBRkVCQUJFNzgKKzoxMDQwOTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMjAwMkYwMjIzNTEKKzoxMDQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTZFRDEKKzoxMDQwQjAwMDAwMDAwMDAwQzAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDQwQzAwMEMwNDAwMDAwMDAwMDA1N0MwMDAwMDAwMjAwMkYwMjIzMTkKKzoxMDQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTZFQTEKKzoxMDQwRTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRDkKKzoxMDQwRjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1ODAwMzAwQTI0NkYKKzoxMDQxMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjhENDcKKzoxMDQxMTAwMDAwMDAwMDAwQzAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDQxMjAwMEMwNDAwMDAwMDAwMDA1N0MwMDAwMDAwMDAwMkYwMjIzQkEKKzoxMDQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTcyM0MKKzoxMDQxNDAwMDAwMDAwMDAwQzAyMDFDMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDQxNTAwMEMwNDAwMDAwMDAwMDA1N0MwMDAwMDAwNDAwMkYwMjIzODYKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTdBMDQKKzoxMDQxNzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDQxODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExQjMKKzoxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRjcKKzoxMDQxQTAwMDAwMDAwMDAwQzA2MDQ4MDAwMDAwMDY5MjAwMDAwMDAwMEYKKzoxMDQxQjAwMDAwNDAxQzEwMDAwMDA1N0MwMDAwMDAwMEMwMjAwMDAwMzIKKzoxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwMDAwRUYKKzoxMDQxRDAwMDAwMDAwMDAwMEVFMDAwMDAwMDAwMDU3RTAwMDAwMDAwNkUKKzoxMDQxRTAwMDAwNjAwMDAwMDAwMDA1QzkwMDAwMDAwMDAwMkYwMjI0NEMKKzoxMDQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNThGNUYKKzoxMDQyMDAwMDAwMDBBMkI3MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDQyMTAwMDAwMjA0ODA3MDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMzkKKzoxMDQyMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMTQKKzoxMDQyMzAwMDAwMDRBMkI2MDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFBQzAKKzoxMDQyNDAwMDAwMjEyMjMwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwN0QKKzoxMDQyNTAwMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhERUUKKzoxMDQyNjAwMDAwMDBBMkM0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDQyNzAwMDAwMzA0OEU5MDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwRkQKKzoxMDQyODAwMDAwMDAwNThEMDAwMEEyRDEwMDIwNDQxMTAwMDAwMDAwQjQKKzoxMDQyOTAwMDAwMDAwMDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQxMUIKKzoxMDQyQTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4RDYKKzoxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyNDAwMDAwMDAwQTgKKzoxMDQyQzAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDVBMDAwMDBBMkJCMjAKKzoxMDQyRDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3RkEKKzoxMDQyRTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDgKKzoxMDQyRjAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkJBRTQKKzoxMDQzMDAwMDAwNjA0NDExMDAwMDA2OEQwMDAwMDAxQTAwMjEyMjMwRDgKKzoxMDQzMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwMUYKKzoxMDQzMjAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4RDAwMDBBMkM1QjYKKzoxMDQzMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5QTcKKzoxMDQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNTlFRUEKKzoxMDQzNTAwMDAwMDBBMkQyMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDQzNjAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJEMjAwMjA0NDExRDQKKzoxMDQzNzAwMDAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwN0EKKzoxMDQzODAwMDAwMDAwMDAyMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDQzOTAwMDBDQzAwMDAwMDAwMDA1QjEwMDAwQTJCRjAwMjA0NDExQzUKKzoxMDQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwOUUKKzoxMDQzQjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDYKKzoxMDQzQzAwMDAwMjA0ODExMDAwMDAwMDAwMDA0QTJCRTAwNjA0NDExNUIKKzoxMDQzRDAwMDAwMDAwNjhEMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwQkQKKzoxMDQzRTAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDAwMDQyMDA0MjcKKzoxMDQzRjAwMDAwNjA0NDExMDAwMDA2OEQwMDAwQTJDNjAwMjA0NDExOTgKKzoxMDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwNEIKKzoxMDQ0MTAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDVBRjAwMDBBMkQzOTMKKzoxMDQ0MjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4ODcKKzoxMDQ0MzAwMDAwMDAwMDAwMDAwMEEyRDMwMDIwNDQxMTAwMDAwMDAwOTIKKzoxMDQ0NDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDAwMDBBMkMzNDQKKzoxMDQ0NTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3NzgKKzoxMDQ0NjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNTYKKzoxMDQ0NzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkMyNUEKKzoxMDQ0ODAwMDAwNjA0NDExMDAwMDA2OEQwMDAwMDAxQTAwMjEyMjMwNTcKKzoxMDQ0OTAwMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwOUUKKzoxMDQ0QTAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4RDAwMDBBMkM3MzMKKzoxMDQ0QjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MjYKKzoxMDQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNUJFNDkKKzoxMDQ0RDAwMDAwMDBBMkQ0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDQ0RTAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJENDAwMjA0NDExNTEKKzoxMDQ0RjAwMDAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwRjkKKzoxMDQ1MDAwMDg1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDQ1MTAwMDAwMjA0ODAxMDAwMDAwMDAwMDAwMzA0QTAwMjA0NDExNDMKKzoxMDQ1MjAwMDAwMDAwMDAwMDEwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMTEKKzoxMDQ1MzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDVDNEE0MDAwMDAwQ0UKKzoxMDQ1NDAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwRUUKKzoxMDQ1NTAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMDAwMDAwNUM5NkQKKzoxMDQ1NjAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDJDMUEKKzoxMDQ1NzAwMDAwMjAzNjIxMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExQ0UKKzoxMDQ1ODAwMDAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwQUMKKzoxMDQ1OTAwMDAwMDAwMDAwMDAyRjAyMzAwMDAwMDAwMDAwMDAwMDAwQkEKKzoxMDQ1QTAwMDBDQzAwMDAwMDAwMDA1RDAwMDAwMDAwMDAwMjAwNDExMzUKKzoxMDQ1QjAwMDAwMDAwMDAwMDAwMDAwMzAwMDQwMzYyMTAwMDAwNUUzNEMKKzoxMDQ1QzAwMDAwMDAwMDMwMDAyMDA2MkQwMDAwMDAwMDAwMDA3RTAwRUEKKzoxMDQ1RDAwMDAwMjgwNjIxMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxM0EKKzoxMDQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNUUzRjcKKzoxMDQ1RjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQzQKKzoxMDQ2MDAwMDAwMjA0ODExMDAwMDAwMDAwMDA0QTA5MjAwNjA0NDExNDYKKzoxMDQ2MTAwMDAwMDAwNjhEMDAwMDAwMzEwMDIwMzYzMDAwMDAwMDAwNTAKKzoxMDQ2MjAwMDAwMDRBMDkzMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDMyRDkKKzoxMDQ2MzAwMDAwMjAzNjMwMDAwMDAwMDAwMDA0QTJCNjAwNjA0NDExRTMKKzoxMDQ2NDAwMDAwMDAwNjhEMDAwMDAwMzMwMDIwMzYzMDAwMDAwMDAwMUUKKzoxMDQ2NTAwMDAwMDRBMkJBMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDM0N0UKKzoxMDQ2NjAwMDAwMjAzNjMwMDAwMDAwMDAwMDA0QTJCRTAwNjA0NDExQUIKKzoxMDQ2NzAwMDAwMDAwNjhEMDAwMDAwMzUwMDIwMzYzMDAwMDAwMDAwRUMKKzoxMDQ2ODAwMDAwMDRBMkMyMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDM2NDQKKzoxMDQ2OTAwMDAwMjAzNjMwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExQjcKKzoxMDQ2QTAwMDAwMDAwNjhEMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwQkIKKzoxMDQ2QjAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDNGMDMKKzoxMDQ2QzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExQjkKKzoxMDQ2RDAwMDAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMjIKKzoxMDQ2RTAwMDAwMDAwMDA1MDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUY0QjcKKzoxMDQ2RjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExQ0MKKzoxMDQ3MDAwMDAwMDAwMDAwODgwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUMKKzoxMDQ3MTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDgxMDAwMDAwOUUKKzoxMDQ3MjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExOTUKKzoxMDQ3MzAwMDAwMDAwMDAwMDAwMDAwMDEwMDJGMDIzMDAwMDAwMDAwMTcKKzoxMDQ3NDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYyQzAwMDAwMDMwMUIKKzoxMDQ3NTAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxQjQKKzoxMDQ3NjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjJDMkIKKzoxMDQ3NzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNDIKKzoxMDQ3ODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwN0UwMDAwMjgwNjIxRTMKKzoxMDQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwQzcKKzoxMDQ3QTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYwNTAwMDBBMDkyRTAKKzoxMDQ3QjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAzMTAwMjA0QTJEQkMKKzoxMDQ3QzAwMDAwMDAwMDAwMDAwMEEwOTMwMDIwNDQxMTAwMDAwMDAwNDEKKzoxMDQ3RDAwMDAwMDAwMDMyMDAyMDRBMkQwMDAwMDAwMDAwMDBBMkI2QjgKKzoxMDQ3RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAzMzAwMjA0QTJEOEEKKzoxMDQ3RjAwMDAwMDAwMDAwMDAwMEEyQkEwMDIwNDQxMTAwMDAwMDAwRTgKKzoxMDQ4MDAwMDAwMDAwMDM0MDAyMDRBMkQwMDAwMDAwMDAwMDBBMkJFN0QKKzoxMDQ4MTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAzNTAwMjA0QTJENTcKKzoxMDQ4MjAwMDAwMDAwMDAwMDAwMEEyQzIwMDIwNDQxMTAwMDAwMDAwQUYKKzoxMDQ4MzAwMDAwMDAwMDM2MDAyMDRBMkQwMDAwMDAwMDAwMDAwMDMwN0IKKzoxMDQ4NDAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDFGRjAwMjgwNjIxQzYKKzoxMDQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDYKKzoxMDQ4NjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYyQjAwMDAwMDAwMkIKKzoxMDQ4NzAwMDAwMjEwMjIxMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMjAKKzoxMDQ4ODAwMDAwMDAwNjBFMDAwNEEwMDMwMDYwNDQxMTAwMDAwNjhEMjUKKzoxMDQ4OTAwMDAwMDBBMDAzMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDQ4QTAwMDAwMjA0ODEwMDAwMDAwMDAwMDAwMDAwMTAwMjEwNjIxNDcKKzoxMDQ4QjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjEzMEIKKzoxMDQ4QzAwMDAwMDRBMDEwMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMDEwM0MKKzoxMDQ4RDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwRUIKKzoxMDQ4RTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIxMDYyMTAwMDAwMDAwN0YKKzoxMDQ4RjAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDQ5MDAwMDBDRTAwMDAwMDAwMDA2MkIwMDA0QTAxMTAwNjA0NDExMjAKKzoxMDQ5MTAwMDAwMDAwNjhEMDAwMEEwMTEwMDIwNDQxMTAwMDAwMDAwREUKKzoxMDQ5MjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDEyNTkKKzoxMDQ5MzAwMDAwNjA0NDExMDAwMDA2OEQwMDAwQTAxMjAwMjA0NDExMDgKKzoxMDQ5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwRUYKKzoxMDQ5NTAwMDAwMDRBMDEzMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMDEzQTUKKzoxMDQ5NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwNUEKKzoxMDQ5NzAwMDAwMDAwMDAwMDAwNEEwMTQwMDYwNDQxMTAwMDAwNjhEMzcKKzoxMDQ5ODAwMDAwMDBBMDE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDQ5OTAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxNTAwNjA0NDExMzEKKzoxMDQ5QTAwMDAwMDAwNjhEMDAwMEEwMTUwMDIwNDQxMTAwMDAwMDAwNEEKKzoxMDQ5QjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDE2QzUKKzoxMDQ5QzAwMDAwNjA0NDExMDAwMDA2OEQwMDAwQTAxNjAwMjA0NDExNzQKKzoxMDQ5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwNUYKKzoxMDQ5RTAwMDAwMDRBMDE3MDA2MDQ0MTEwMDAwMDY4RDAwMDBBMDE3MEQKKzoxMDQ5RjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwQ0EKKzoxMDRBMDAwMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMzYKKzoxMDRBMTAwMDAwMDAwMDJDMDA4MDA2MkQwMDAwMDAwMEZGMDAwMDAwQjgKKzoxMDRBMjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExOTgKKzoxMDRBMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwRkMKKzoxMDRBNDAwMDAwMDAwMDAyMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMDRBNTAwMDBFRTAwMDAwMDAwMDA2M0QwMDAwMDAzMDAwMjAwNjJEQTIKKzoxMDRBNjAwMDAwMDAwMDAwMDAwMDAwMDIwMDI4MDYyMTAwMDAwMDAwRjUKKzoxMDRBNzAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDRBODAwMDBDRTAwMDAwMDAwMDA2M0I4MTAwMDAwMDAwMjA0NDExMDMKKzoxMDRBOTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwOUMKKzoxMDRBQTAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4RDAwMDAxMDAwODYKKzoxMDRBQjAwMDAwMjAwODExMDAwMDAwMDAwMDAwMDAyQjAwMjAzNjIyMUEKKzoxMDRBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQxM0YKKzoxMDRBRDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVDOTk4MDAwMDAwMTAKKzoxMDRBRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwODA0ODExNzgKKzoxMDRBRjAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMDAwMDAwNjQxNEYKKzoxMDRCMDAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDBBMkE0NUEKKzoxMDRCMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAyMjAwMjA0ODExODUKKzoxMDRCMjAwMDAwMDAwMDAwODkwMDAwMDAwMDIwNDQxMTAwMDAwMDAwODcKKzoxMDRCMzAwMDAwMDAwMDAxMDA0MDQ4MTEwMDAwMDYyRDk3MDAwMDAwMTEKKzoxMDRCNDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNzcKKzoxMDRCNTAwMDAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNTYKKzoxMDRCNjAwMDAwMDAwMDAwMDA0MDQ4MTEwMDAwMDYyRDAwMDAwMDAwNzkKKzoxMDRCNzAwMDAwNjAwMDAwMDAwMDA2NUMwMDAwMjAxMDAwMjA0NDExQ0UKKzoxMDRCODAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMkMKKzoxMDRCOTAwMDAwMDFBMkE0QzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2ODMKKzoxMDRCQTAwMDAwNjA0ODExMDAwMDAzNkUwMDAwMjAxMDAwMjA0NDExMzYKKzoxMDRCQjAwMDAwMDAwMDAwMDAwMTAwMDAwMDIwNDgxMTAwMDAwMDAwN0IKKzoxMDRCQzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRUUKKzoxMDRCRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExNEEKKzoxMDRCRTAwMDAwMDAwMDAwMDk4MDAwMDAwMDIwNDgxMTAwMDAwMDAwQzMKKzoxMDRCRjAwMEZGRkZGRkZGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDRDMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwMTQKKzoxMDRDMTAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjhEQTgKKzoxMDRDMjAwMDAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDRDMzAwMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwNDA0QzExRkYKKzoxMDRDNDAwMDAwMDAwNjU2MDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwQzgKKzoxMDRDNTAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA0Q0UKKzoxMDRDNjAwMDAwMjkxRTI3MDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3RTIKKzoxMDRDNzAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQjIKKzoxMDRDODAwMEZGRkZGRkZCMDAyODFFMjcwMDAwMDAwMDAwMDAwMDE3QTgKKzoxMDRDOTAwMDAwODAzNjI3MDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEQjUKKzoxMDRDQTAwMDAwMDAwMDAwMDAwMDAwMDgwMDI5MUUyNzAwMDAwMDAwOEUKKzoxMDRDQjAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMDAwMDAwMDE3RTkKKzoxMDRDQzAwMDAwMjAxRTJEMDAwMDAwMDBGRkZGRkZGNzAwMjgxRTI3MTgKKzoxMDRDRDAwMDAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwRTAKKzoxMDRDRTAwMDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwOUYKKzoxMDRDRjAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExN0YKKzoxMDREMDAwMDAwMDAwMDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzZFNjMKKzoxMDREMTAwMDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDAwMDEwMDAwRUQKKzoxMDREMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExRjgKKzoxMDREMzAwMDAwMDAwMDAwMDE4MDAwMDAwMDIwNDgxMTAwMDAwMDAwNzkKKzoxMDRENDAwMEZGRkZGRkZGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDRENTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwQzMKKzoxMDRENjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNEQKKzoxMDRENzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMTdGMTUKKzoxMDREODAwMDAwNjA0NDExMDAwMDA2OEQwMDAwMDAxRjAwMjEwMjMwNjkKKzoxMDREOTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjhDQUQKKzoxMDREQTAwMDAwMDAwMDEwMDA0MDRDMTEwMDAwMDY3MjAwMDAwMDAwREUKKzoxMDREQjAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDM4QzAwMDAwMTcKKzoxMDREQzAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMEEyRDAwMDAwMDAwNkYKKzoxMDRERDAwMDAwMDAwMDFFMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDFGM0IKKzoxMDRERTAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAyMDAwMjAxNjJERTEKKzoxMDRERjAwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwQjQKKzoxMDRFMDAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMDRFMTAwMDAwMjA0ODA1MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAxQkMKKzoxMDRFMjAwMDAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwQzkKKzoxMDRFMzAwMDAwMDAwMDA0MDAzMDEyMjQwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDRFNDAwMDAwMkYwMDY0MDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDMKKzoxMDRFNTAwMDAwMDAwNjhCMDAwMDAwMDMwMDI4MUEyMjAwMDAwMDAwNUEKKzoxMDRFNjAwMDAwMDAwMDA4MDAyMjEyMjIwMDAwMDAwMEZGRkZGMDAwRjYKKzoxMDRFNzAwMDAwMjgxMjI0MDAwMDAwMDAwMDAwMDAwMDAwMjkxMEM0RDcKKzoxMDRFODAwMDAwMDAwMDAwMDAwMDAwMUYwMDQwMzYyNDAwMDAwMDAwNjkKKzoxMDRFOTAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDRFQTAwMDFBQzAwMDAwMDAwMDA2OEQ5RjAwMDAwMDAwMjA0NDExODEKKzoxMDRFQjAwMDAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMzkKKzoxMDRFQzAwMDAwMDAwMDAwMUFFMDAwMDAwMDAwMDY5MDAwMDAwMDAwNTIKKzoxMDRFRDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBQzAwMDAwNzgKKzoxMDRFRTAwMDAwMDAwNjkyOUUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMTcKKzoxMDRFRjAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDRGMDAwMDFBRTAwMDAwMDAwMDA2OTUwMDAwMDAwMDAwODAwMDAwOEMKKzoxMDRGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMjYKKzoxMDRGMjAwMDAwMDAxMDAwMDA2MDA0MTEwMDAwMDMxNTAwMDAwMDAwRTQKKzoxMDRGMzAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExQzMKKzoxMDRGNDAwMDAwMDAwMUIyMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwQkIKKzoxMDRGNTAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU2NUQKKzoxMDRGNjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQjAwMjA0ODExMzgKKzoxMDRGNzAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMUYKKzoxMDRGODAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMUZEMDgKKzoxMDRGOTAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAyMTAwMjAxRTJENTAKKzoxMDRGQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwOEEKKzoxMDRGQjAwMDAwMDAwMDI0MDAyMDIyMkQwMDAwMDAwMDAwMDBGRkZGNjAKKzoxMDRGQzAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3RjYKKzoxMDRGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNTgKKzoxMDRGRTAwMDAwMDAwMDIyMDAyMDIyMkQwMDAwMDAwMDAwMDBGRkZGMzIKKzoxMDRGRjAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3QzYKKzoxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMjcKKzoxMDUwMTAwMDAwMDAwMDIzMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDEwRjIKKzoxMDUwMjAwMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3QTAKKzoxMDUwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgxMTAwMDAwMDAwRDcKKzoxMDUwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDUwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDUwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDUwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDUwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDUwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDUwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDUwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDUwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDUxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDUxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDUxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDUxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDUxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDUxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDUxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDUxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDUxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDUxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDUxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDUxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDUyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDUyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDUyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDUyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDUyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDUyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDUyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDUyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDUyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDUyQjAwMDAxNDIwNTAyMDVDMDAyNTAwMDAwMDAwMDAxQzMwMTY4NjAKKzoxMDUyQzAwMDA0M0YwNUMwMDAwMDAwMDAwMjI1MDIwOTAyNTAwMTUxMDAKKzoxMDUyRDAwMDAwMDAwMDAwMDIyMzAyNDUwMkEwMDI0MTAwMDAwMDAwN0QKKzoxMDUyRTAwMDAzRDcwNUMwMDVDMDA1QzAwMDAwMDAwMDA2NDkwNjRBRjYKKzoxMDUyRjAwMDAzMUYwNUMwMDAwMDAwMDAwNUMwMDVDNTAzMjAwMzQwRDIKKzoxMDUzMDAwMDAwMDAwMDAwMDMyQTAyODIwMzQyMDMzNDAwMDAwMDAwNzAKKzoxMDUzMTAwMDA1QzAwNUMwMDVDMDA1QzAwMDAwMDAwMDA1QzAwNTUxNUUKKzoxMDUzMjAwMDA1QzAwNUMwMDAwMDAwMDAwM0JBMDVDMDA0QkIwMzQ0NkIKKzoxMDUzMzAwMDAwMDAwMDAwMDQ5QTA0NTAwNDNEMDVDMDAwMDAwMDAwNzUKKzoxMDUzNDAwMDA0RDAwNUMwMDQ0MTA0REQwMDAwMDAwMDA0NTAwNTA3M0UKKzoxMDUzNTAwMDAzNTEwMzc1MDAwMDAwMDAwNUMwMDVDMDA1QzAwNUMwNkQKKzoxMDUzNjAwMDAwMDAwMDAwMDVDMDA1QzAwNUMwMDVDMDAwMDAwMDAwMjkKKzoxMDUzNzAwMDA1QzAwNUMwMDYzRjA1QzcwMDAwMDAwMDA1QzAwNUMwMDgKKzoxMDUzODAwMDAwMDcwNUMwMDAwMDAwMDAwNUMwMDVDMDA1QzAwNUMwM0QKKzoxMDUzOTAwMDAwMDAwMDAwMDVDMDA1QzAwNUMwMDVDMDAwMDAwMDAwRjkKKzoxMDUzQTAwMDAzRjgwM0VEMDQwODA0MDYwMDAwMDAwMDA0MEUwNDBBREMKKzoxMDUzQjAwMDA0MEMwNDEwMDAwMDAwMDAwNDFDMDQxODA0MjQwNDIwNDEKKzoxMDUzQzAwMDAwMDAwMDAwMDQyQzA0MjgwNDM0MDQzMDAwMDAwMDAwMTUKKzoxMDUzRDAwMDA1QzAwNUMwMDQzODA1QzAwMDAwMDAwMDA1QzAwNUMwQjgKKzoxMDUzRTAwMDA1QzAwNUMwMDAwMDAwMDAwNUMwMDVDMDA1QzAwNUMwMUYKKzoxMDUzRjAwMDAwMDAwMDAwMDAwMjA2NzkwNjk3MDAwNjAwMDAwMDAwODkKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY2MTBfcGZwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNjEwX3BmcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUyOTJjCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNjEwX3BmcC5iaW4uaWhleApAQCAtMCwwICsxLDE0NSBAQAorOjEwMDAwMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDA3QzAzOEJFRAorOjEwMDAxMDAwMDA4MDAxQjgwMDdDMDM4QjAwRDQ0MDFFMDBFRTAwMUU1RgorOjEwMDAyMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBDNDE4MzhDMworOjEwMDAzMDAwMDBDQTI0MDAwMENBMjgwMDAwOTU4MUE4MDBDNDFDM0EwOAorOjEwMDA0MDAwMDBDM0MwMDAwMENBMDgwMDAwQ0EwQzAwMDA3Qzc0NEI0QQorOjEwMDA1MDAwMDBDMjAwMDUwMDk5QzAwMDAwQzQxQzNBMDA3Qzc0NEMyQQorOjEwMDA2MDAwMDBDMEZGRjAwMDA0MkMwNDAwMzA5MDAyMDA3RDI1MDA0OQorOjEwMDA3MDAwMDAzNTE0MDIwMDdEMzUwQjAwMjU1NDAzMDA3Q0Q1ODAyQgorOjEwMDA4MDAwMDAyNTlDMDMwMDk1QzAwNDAwRDUwMDFCMDA3RUREQzE0NworOjEwMDA5MDAwMDA3RDlEODAwMEQ2ODAxQjAwRDU4MDFCMDBENDQwMUVCMworOjEwMDBBMDAwMDBENTQwMUUwMEQ2NDAxRTAwRDY4MDFFMDBENDgwMUUwMworOjEwMDBCMDAwMDBENEMwMUUwMDk3ODNEMzAwRDVDMDFFMDBDQTA4MDAxQworOjEwMDBDMDAwMDA4MDAwMUEwMENBMEMwMDAwRTQwMTFFMDBENDAwMUVDQgorOjEwMDBEMDAwMDA4MDAwMEMwMEM0MTgzODAwRTQwMTNFMDBENDAwMUU2QgorOjEwMDBFMDAwMDA4MDAwMEMwMEM0MTgzODAwRDQ0MDFFMDBFRTAwMUUzMgorOjEwMDBGMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxMUUwNAorOjEwMDEwMDAwMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDBGMQorOjEwMDExMDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTNFMDBENDAwMUU5RgorOjEwMDEyMDAwMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAyMworOjEwMDEzMDAwMDA3RTgyOEIwMENBMTgwMDAwRDQ0MDFFMDBENTgwMUVBRAorOjEwMDE0MDAwMDA4MDAwNTMwMEQ0MDA3NTAwRDQ0MDFFMDBDQTA4MDA4RgorOjEwMDE1MDAwMDBDQTBDMDAwMENBMTAwMDAwRDQ4MDE5MDBENEMwMThENgorOjEwMDE2MDAwMDBENTAwMTcwMEQ0ODAxRTAwRDRDMDFFMDBENTAwMUU4QworOjEwMDE3MDAwMDBFMjAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEI4NgorOjEwMDE4MDAwMDBDQTA4MDAwMEQ0ODA2MDAwRDQ0MDFFMDA4MDAwMDAzNworOjEwMDE5MDAwMDBENDgwMUUwMENBMDgwMDAwRDQ4MDYxMDBENDQwMUUzNAorOjEwMDFBMDAwMDA4MDAwMDAwMEQ0ODAxRTAwQ0EwODAwMDBDQTBDMDBCNQorOjEwMDFCMDAwMDBENDQwMUUwMEQ0ODAxNjAwRDRDMDE2MDBENDgwMUU4NworOjEwMDFDMDAwMDA4MDAxQjgwMEQ0QzAxRTAwQzYwODQzMDBDQTBDMDA1RAorOjEwMDFEMDAwMDBDQTEwMDAwMDk0ODAwNDAwQ0ExNDAwMDBFNDIwRjM1OAorOjEwMDFFMDAwMDBENDIwMTMwMEQ1NjA2NTAwRDRFMDFDMDBENTIwMUM4RAorOjEwMDFGMDAwMDBENTYwMUMwMDgwMDAwMDAwMDYyMDAxMDBDNjA4NDNGNgorOjEwMDIwMDAwMDBDQTBDMDAwMENBMTAwMDAwOTQ4M0Y3MDBDQTE0MDA1MgorOjEwMDIxMDAwMDBFNDIwRjMwMDgwMDA3OTAwRDQyMDEzMDBDNjA4NDNENgorOjEwMDIyMDAwMDBDQTBDMDAwMENBMTAwMDAwOTg4M0VGMDBDQTE0MDAzNgorOjEwMDIzMDAwMDBENDAwNjQwMDgwMDA4RDAwMDAwMDAwMDBDNDE0MzI2RgorOjEwMDI0MDAwMDBDNjE4NDMwMEM0MDgyRjAwOTU0MDA1MDBDNDBDMzBCOAorOjEwMDI1MDAwMDBENDQwMUUwMDgwMDAwMDAwRUUwMDFFMDA5NTgzRjVEMworOjEwMDI2MDAwMDBDNDEwMzEwMEQ0NDAzMzAwRDUyMDY1MDBENEEwMUM1OAorOjEwMDI3MDAwMDBENEUwMUMwMEQ1MjAxQzAwRTQwMTVFMDBENDAwMUU2OAorOjEwMDI4MDAwMDA4MDAwMDAwMDA2MjAwMTAwQ0ExODAwMDAwQTIwMDFCQQorOjEwMDI5MDAwMDBENjAwNzYwMEM0MDgzNjAwOTg4MDA3MDBDNjEwNDVENgorOjEwMDJBMDAwMDA5NTAxMTAwMEQ0MDAxRjAwRDQ2MDYyMDA4MDAwMDA5RgorOjEwMDJCMDAwMDBENDIwNjIwMENDMzgzNTAwQ0MxNDMzMDA4NDAxQkI1QworOjEwMDJDMDAwMDBENDAwNzIwMEQ1NDAxRTAwODAwMDAwMDBFRTAwMUUyOQorOjEwMDJEMDAwMDBFMjAwMUEwMDg0MDFCQjAwRTIwMDFBMDBDQzEwNEJCRgorOjEwMDJFMDAwMDBDQzA0NDcwMDJDOTQwMTAwN0QwOThCMDA5ODQwMDU0OAorOjEwMDJGMDAwMDA3RDE1Q0IwMEQ0MDAxQTAwODAwMUI4MDBENDAwNkQzOQorOjEwMDMwMDAwMDAzNDQ0MDEwMENDMEM0ODAwOTg0MDNBMDBDQzJDNEEwMAorOjEwMDMxMDAwMDA5NTgwMDQwMENDMDQ0OTAwODAwMUI4MDBENDAwMUE4NAorOjEwMDMyMDAwMDBENEMwMUEwMDI4MjgwMTAwODQwMEYwMDBDQzEwMDM3QgorOjEwMDMzMDAwMDA5ODgwMUIwMDA0MzgwQzAwODQwMEYwMDBDQzEwMDNFRgorOjEwMDM0MDAwMDA5ODgwMTcwMDA0MzgwODAwODQwMEYwMDBDQzEwMDNFNworOjEwMDM1MDAwMDA5ODgwMTMwMDA0MzgwNDAwODQwMEYwMDBDQzEwMDNERgorOjEwMDM2MDAwMDA5ODgwMTQwMENDMTA0QzAwOUE4MDA5MDBDQzE0NERFOQorOjEwMDM3MDAwMDA5ODQwREMwMEQ0MDA2RDAwQ0MxODQ4MDBENTAwMUE2RAorOjEwMDM4MDAwMDBENTQwMUEwMDgwMDBDOTAwRDU4MDFBMDA5NkMwRDU1QgorOjEwMDM5MDAwMDBENDAwNkQwMDgwMDFCODAwRDQwMDZFMDA5QUMwMDM0NAorOjEwMDNBMDAwMDBENDAwNkQwMEQ0MDA2RTAwODAwMDAwMDBFQzAwN0ZERgorOjEwMDNCMDAwMDA5QUMwQ0MwMEQ0MDA2RDAwODAwMUI4MDBENDAwNkU1QgorOjEwMDNDMDAwMDBDQzE0MDMwMENDMTgwMzAwQ0MxQzAzMDA3RDkxMDM2NworOjEwMDNEMDAwMDA3REQ1ODMwMDdEMTkwQzAwMzVDQzFGMDAzNTcwMUZDMgorOjEwMDNFMDAwMDA3Q0YwQ0IwMDdDRDA4QjAwODgwMDAwMDA3RThFOEJFMAorOjEwMDNGMDAwMDA5NUMwMDQwMEQ0MDA2RTAwODAwMUI4MDBENDAwMUEzQgorOjEwMDQwMDAwMDBENEMwMUEwMENDMDgwMzAwQ0MwQzAzMDBDQzEwMDNBRAorOjEwMDQxMDAwMDBDQzE0MDMwMENDMTgwMzAwQ0MxQzAzMDBDQzI0MDMzNAorOjEwMDQyMDAwMDBDQzI4MDMwMDM1QzQxRjAwMzZCMDFGMDA3QzcwNEI4MQorOjEwMDQzMDAwMDAzNEYwMUYwMDdDNzA0QjAwMzU3MDFGMDA3QzcwNEI0NworOjEwMDQ0MDAwMDA3RDg4ODEwMDdEQ0NDMTAwN0U1MTAxMDA3RTk1NDFGOAorOjEwMDQ1MDAwMDA3QzkwODIwMDdDRDRDMjAwN0M4NDhCMDA5QUMwMDMxNAorOjEwMDQ2MDAwMDA3QzhDOEIwMDJDODgwMTAwOTg4MDlFMDBENDAwNkQ0RAorOjEwMDQ3MDAwMDA5ODQwOUMwMEQ0MDA2RTAwQ0MwODRDMDBDQzBDNEQ4MQorOjEwMDQ4MDAwMDBDQzEwNDgwMEQ0ODAxQTAwRDRDMDFBMDA4MDAxMDFBQQorOjEwMDQ5MDAwMDBENTAwMUEwMENDMDgzMjAwRDQwMDMyMDA5NDgyRDk3MgorOjEwMDRBMDAwMDBDQTBDMDAwMEQ0NDAxRTAwODAwMDAwMDBENDAwMUVEMgorOjEwMDRCMDAwMDBFNDAxMUUwMEQ0MDAxRTAwQ0EwODAwMDBDQTBDMDA5RgorOjEwMDRDMDAwMDBDQTEwMDAwMEQ0NDAxRTAwQ0ExNDAwMDBENDgwMUVEMAorOjEwMDREMDAwMDBENEMwMUUwMEQ1MDAxRTAwRDU0MDFFMDBENTQwMzRGQgorOjEwMDRFMDAwMDA4MDAwMDAwMEVFMDAxRTAwMjgwNDA0MDBFMjAwMUE1NAorOjEwMDRGMDAwMDBFMjAwMUEwMEQ0NDAxQTAwQ0EzODAwMDBDQzA4MDNGOQorOjEwMDUwMDAwMDBDQzBDMDMwMENDMEMwMzAwQ0MwQzAzMDA5ODgyQkQ4MworOjEwMDUxMDAwMDAwMDAwMDAwMDg0MDFCQjAwRDdBMDZGMDA4MDAwMDAzNQorOjEwMDUyMDAwMDBFRTAwMUYwMENBMDQwMDAwQzJGRjAwMDBDQzA4MzQyNworOjEwMDUzMDAwMDBDMTNGRkYwMDdDNzRDQjAwN0NDOTBCMDA3RDAxMEYyNAorOjEwMDU0MDAwMDA5OTAyQjAwMDdDNzM4QjAwODQwMUJCMDBEN0EwNkZDMAorOjEwMDU1MDAwMDA4MDAwMDAwMEVFMDAxRjAwQ0EwODAwMDAyODE5MDBGQgorOjEwMDU2MDAwMDA3RDg5OEIwMDk1ODAxNDAwMjgxNDA0MDBDQTBDMDBCQgorOjEwMDU3MDAwMDBDQTEwMDAwMENBMUMwMDAwQ0EyNDAwMDBFMjAwMUZDQworOjEwMDU4MDAwMDBENEMwMUEwMEQ1MDAxQTAwRDU0MDFBMDBDQzE4MDNCOAorOjEwMDU5MDAwMDBDQzJDMDMwMENDMkMwMzAwQ0MyQzAzMDA3REE1OEJCRAorOjEwMDVBMDAwMDA3RDlDNDcwMDk4NDI5NzAwMDAwMDAwMDA4MDAxNjE5OAorOjEwMDVCMDAwMDBENEMwMUEwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDA2OQorOjEwMDVDMDAwMDBFRTAwMUUwMEU0MDExRTAwRDQwMDFFMDBENDQwMUVGOAorOjEwMDVEMDAwMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIxNgorOjEwMDVFMDAwMDBFNDAxM0UwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUVCOAorOjEwMDVGMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBDQTA4MDAzMAorOjEwMDYwMDAwMDAyNDhDMDYwMDBDQ0MwNjAwOThDMDA2MDBDQzEwNEVDRQorOjEwMDYxMDAwMDA5OTAwMDQwMEQ0MDA3MzAwRTQwMTFFMDBENDAwMUUwMQorOjEwMDYyMDAwMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAwMDBFRTAwMUU5QQorOjEwMDYzMDAwMDBDQTA4MDAwMENBMEMwMDAwMzREMDE4MDAyNTEwMDFDMAorOjEwMDY0MDAwMDA5NTAwMjEwMEMxN0ZGRjAwQ0ExMDAwMDBDQTE0MDBGRAorOjEwMDY1MDAwMDBDQTE4MDAwMEQ0ODAxRDAwRDRDMDFEMDA3REIxOEJERAorOjEwMDY2MDAwMDBDMTQyMDIwMEMyQzAwMTAwRDU4MDFEMDAzNERDMEU3MgorOjEwMDY3MDAwMDA3RDVENEMwMDdGNzM0QzAwRDc0MDFFMDBENTAwMUVFRQorOjEwMDY4MDAwMDBENTQwMUUwMEMxNDIwMDAwQzJDMDAwMDAwOTlDMDEwQworOjEwMDY5MDAwMDAzMURDMTAwMDdGNUY0QzAwN0Y3MzRDMDAwNDI4MDJBNworOjEwMDZBMDAwMDA3RDgzODAwMEQ1QTg2RjAwRDU4MDY2MDBENzQwMUVFRQorOjEwMDZCMDAwMDBFQzAwNUUwMEM4MjQwMjAwQzgyNDAyMDA4MDAxQjhEQgorOjEwMDZDMDAwMDBENjAwNzYwMEQ0NDAxRTAwRDQ4MDFFMDBENEMwMUU4OAorOjEwMDZEMDAwMDA4MDAwMDAwMEVFMDAxRTAwODAwMDAwMDBFRTAwMUYwMQorOjEwMDZFMDAwMDBENDAwMUYwMDgwMDAwMDAwRDQwMDFGMDBENDAwMUZCMQorOjEwMDZGMDAwMDA4ODAwMDAwMEQ0MDAxRjAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwMDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwMDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwMDgwMDAwMDAwMTAxNzEwMDAyMDE3ODAwMDMwMDhGMDAwNDAwN0ZFNQorOjEwMDgxMDAwMDAwNTAwMDMwMDA2MDAzRjAwMDcwMDMyMDAwODAxMkMxRAorOjEwMDgyMDAwMDAwOTAwNDYwMDBBMDAzNjAwMTAwMUI2MDAxNzAwQTJCOQorOjEwMDgzMDAwMDAyMjAxM0EwMDIzMDE0OTAwMjAwMEI0MDAyNDAxMjVEMAorOjEwMDg0MDAwMDAyNzAwNEQwMDI4MDA2QTAwMkEwMDYwMDAyQjAwNTI5QgorOjEwMDg1MDAwMDAyRjAwNjUwMDMyMDA4NzAwMzQwMTdGMDAzQzAxNTYwNAorOjEwMDg2MDAwMDAzRjAwNzIwMDQxMDE4QzAwNDQwMTJFMDA1NTAxNzNDRAorOjEwMDg3MDAwMDA1NjAxN0EwMDYwMDAwQjAwNjEwMDM0MDA2MjAwMzgwRAorOjEwMDg4MDAwMDA2MzAwMzgwMDY0MDAzODAwNjUwMDM4MDA2NjAwMzhGNgorOjEwMDg5MDAwMDA2NzAwMzgwMDY4MDAzQTAwNjkwMDQxMDA2QTAwNDhCQgorOjEwMDhBMDAwMDA2QjAwNDgwMDZDMDA0ODAwNkQwMDQ4MDA2RTAwNDg3NgorOjEwMDhCMDAwMDA2RjAwNDgwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDY2RgorOjEwMDhDMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYxMAorOjEwMDhEMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMAorOjEwMDhFMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZGMAorOjEwMDhGMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZFMAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjYyMF9tZS5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjYyMF9tZS5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTE5ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNjIwX21lLmJpbi5paGV4CkBAIC0wLDAgKzEsMTM0NSBAQAorOjEwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMDAxMDAwMDBBMDAwMEEwMDAwMDAwMDAwMDBGRkZGMDAyODQ2MjFBOQorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBBRgorOjEwMDAzMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwMDA0MDAwMDBBMDAwMEEwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAyNgorOjEwMDA1MDAwMDAwMDAwMDAwMDAxMDAwMEMwMjk0NjIwMDAwMDAwMDA1MAorOjEwMDA2MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMDA3MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFGMgorOjEwMDA4MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3QQorOjEwMDA5MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIwMDRCRQorOjEwMDBBMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDAwMDA2MDAwMDBBOAorOjEwMDBCMDAwMDAwMDA2MzEwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDU1RQorOjEwMDBDMDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDBGMDAzOQorOjEwMDBEMDAwMDAyODE2MjIwMDAwMDAwMDAwMDAwMDA4MDAyMTE2MjU1QworOjEwMDBFMDAwMDAwMDAwMDAwMDAwMDAxODAwMjAzNjI1MDAwMDAwMDA3RAorOjEwMDBGMDAwOEQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDRGQQorOjEwMDEwMDAwMDAyRjAyMjUwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBBRAorOjEwMDExMDAwMDAwMDAwMTgwMDQxMjAwMDAwNDA0ODExMDAwMDAwMTlCNAorOjEwMDEyMDAwMDA0MjIwMDAwMDIwNDgxMTAwMDAwMDAwOEUwMDAwMDA2NgorOjEwMDEzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDI4MDAyMDRBMkQ4QgorOjEwMDE0MDAwMDAwMDAwMDA5MDAwMDAwMDAwMjA0NDExMDAwMDAwMDBBQQorOjEwMDE1MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMEMyNgorOjEwMDE2MDAwMDAyMTE2MjIwMDAwMDAwMDAwMDAwMDAzMDAyODE2MjVEMAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAxOTAwMjExQTIyMDAwMDAwMDAwOQorOjEwMDE4MDAwMDAwMDAwMDQwMDI4MUEyNjAwMDAwMDAwMDAwMDAwMDAwMworOjEwMDE5MDAwMDAyOTE0QzUwMDAwMDAwMDAwMDAwMDE5MDAyMDM2MjVDOQorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0ExNDAyMDAwMDAwMDBGRgorOjEwMDFCMDAwMDAwMDAwMTYwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDNDQQorOjEwMDFDMDAwMDAyODE2MjUwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ1QQorOjEwMDFEMDAwMDAwMDAwMDBGRkZGRkZGQzAwMjgwRTIzMDAwMDAwMDBDRAorOjEwMDFFMDAwMDAwMDAwMDAwMDI5MTRBMzAwMDAwMDAwMDAwMDAwMTcxOAorOjEwMDFGMDAwMDAyMDM2MjUwMDAwMDAwMDAwMDA4MDAwMDAyODBFMjJBQworOjEwMDIwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMjIwRTIzMDAwMDAwMDA5NAorOjEwMDIxMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwMjAwMDAwMDBFRgorOjEwMDIyMDAwMDAyODBFMjIwMDAwMDAwMDAwMDAwMDA2MDAyMTBFMjMxRQorOjEwMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDBFRgorOjEwMDI0MDAwMDAwMDAwMDAwMDIyMDIyMjAwMDAwMDAwMDAwMDAwMDA2OAorOjEwMDI1MDAwMTRFMDAwMDAwMDAwMDAzODAwMDAwMDAwMkVFMDAwMDA2NAorOjEwMDI2MDAwMDAwMDAwMzUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwMzcxNgorOjEwMDI3MDAwMDAwMDAwMDAwMDQwMEUyRDAwMDAwMDM5MDAwMDAwMDhDMgorOjEwMDI4MDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDA5MDA0MDEyMkQ4QgorOjEwMDI5MDAwMDAwMDAwNDYwMDAwMDAwMTAwNDAwRTJEMDAwMDAwMzk2MworOjEwMDJBMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMyOAorOjEwMDJCMDAwMDAyODEyMjMwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQ4NworOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMDAwMDAwMDBBRAorOjEwMDJEMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDNFMDAwMDAwMDhFNAorOjEwMDJFMDAwMDA0MDFDMTEwMDAwMDA0MTAwMDAwMDBEMDAyMDFFMkRFOAorOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjgxRTI3MDAwMDAwMDA4MgorOjEwMDMwMDAwMDAwMDAwMDMwMDIyMUUyNzAwMDAwMDAwN0ZDMDAwMDA0NAorOjEwMDMxMDAwMDAyODFBMjMwMDAwMDAwMDAwMDAwMDE0MDAyMTFBMjYwMworOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMzMxQTI2MDAwMDAwMDA1OQorOjEwMDMzMDAwMDAwMDAwMDgwMDIyMUEyNjAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDM0MDAwMDAyOTBDQzcwMDAwMDAwMDAwMDAwMDI3MDAyMDM2MjQxMAorOjEwMDM1MDAwMDAwMDAwMDAwMDAwN0YwMDAwMjgxMjIxMDAwMDAwMDBDMworOjEwMDM2MDAwMDAwMDE0MDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMDM3MDAwMENFMDAwMDAwMDAwMDA0QjAwMDAwMDAxMDAyOTBFMjNFQgorOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwRTAwMjAzNjIzMDAwMDAwMDBFNgorOjEwMDM5MDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGODAwMDAxMQorOjEwMDNBMDAwMDAyOTRBMjMwMDAwMDAwMDAwMDAwMDAwMDAzQTJDMDI0RgorOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIwRTJCMDAwMDAwMDBFMAorOjEwMDNDMDAwRkMwMDAwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMEZDOQorOjEwMDNEMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjNGMAorOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAyNzAwMjA0QTJEMDAwMDAwMDA0RgorOjEwMDNGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMjk1QgorOjEwMDQwMDAwMDAyMDBFMkQwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjNFOQorOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMDQyMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDE1MgorOjEwMDQzMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA4MworOjEwMDQ0MDAwMDAwMDAwNjEwMDAwMDAwMDJFRTAwMDAwMDAwMDAwNUZERQorOjEwMDQ1MDAwMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDVFMDAwMDAwMDAzMgorOjEwMDQ2MDAwMDA0MDBFMkQwMDAwMDA2MjAwMDAwMDAxMDA0MDBFMkQzMworOjEwMDQ3MDAwMDAwMDAwNjIwMDAwMDAwQTAwMjAwRTJEMDAwMDAwMDBCNQorOjEwMDQ4MDAwMDAwMDAwMEIwMDQwMTIyRDAwMDAwMDZBMDAwMDAwMDA3OAorOjEwMDQ5MDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMDAyODEyMjNEOQorOjEwMDRBMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0MDAwMDAwMDBGMgorOjEwMDRCMDAwN0ZDMDAwMDAwMDI4MTYyMzAwMDAwMDAwMDAwMDAwMTQ4OAorOjEwMDRDMDAwMDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAxMDAzMzE2MjU2MQorOjEwMDREMDAwMDAwMDAwMDA4MDAwMDAwMDAwMjgwRTIzMDAwMDAwMDA0MworOjEwMDRFMDAwMDAwMDAwMDAwMDI5MENBMzAwMDAwMDAwM0ZGRkZDMDBGQQorOjEwMDRGMDAwMDAyOTBFMjMwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMyMQorOjEwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwNkQ4QQorOjEwMDUxMDAwMDAwMDAxMDAwMDQwMUMxMTAwMDAwMDcwMDAwMDAwMERGMAorOjEwMDUyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMEYwMDAyODFFMjcwMworOjEwMDUzMDAwMDAwMDAwMDAwMDAwMDAwNDAwMjIxRTI3MDAwMDAwMDA1MAorOjEwMDU0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMERBOAorOjEwMDU1MDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGMEZGMDAyODFBMzBDMworOjEwMDU2MDAwMDAwMDAwMDAwMDAwQTAyODAwMjA0NDExMDAwMDAwMDA0RQorOjEwMDU3MDAwMDAwMDAwMDAwMDI5NDhFNjAwMDAwMDAwMDAwMEEwMTg2QworOjEwMDU4MDAwMDAyMDQ0MTEwMDAwMDAwMDNGRkZGRkZGMDAyODRBMjMyNQorOjEwMDU5MDAwMDAwMDAwMDAwMDAwQTAxMDAwMjA0NDExMDAwMDAwMDAzNgorOjEwMDVBMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMzBBRgorOjEwMDVCMDAwMDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAyMDAyOTE2MjU3MgorOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjI1MDAwMDAwMDA4MAorOjEwMDVEMDAwMDAwMDAwMjUwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMDVFMDAwMDAyRjAwQTMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA2RAorOjEwMDVGMDAwMDAwMDAwODMwMDAwMDAyNjAwMjAxNjJEMDAwMDAwMDBFRgorOjEwMDYwMDAwMDAwMDAwMDAwMDJGMDBBNDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMDYxMDAwMENDMDAwMDAwMDAwMDA4NDAwMDAwMDAwMDA0MDAwMDA0QQorOjEwMDYyMDAwMDAwMDAwOEEwMDAwMDAyNTAwMjAzNjIzMDAwMDAwMDBBMgorOjEwMDYzMDAwMDAwMDAwMjYwMDIwMzYyNDAwMDAwMDAwMDAwMDAwMTcwMworOjEwMDY0MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjdGMworOjEwMDY1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwOEExQworOjEwMDY2MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjY4MDAwMDAwMDBCQworOjEwMDY3MDAwMDA2MDAwMDAwMDAwMDY1QzAwMDAwMDAyMDAyMTBFMjI2NQorOjEwMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOEQwOQorOjEwMDY5MDAwMDAwMDAwMTJDMDQwMzYyMDAwMDAwMDkzMDAwMDAwMDA1RgorOjEwMDZBMDAwMkVFMDAwMDAwMDAwMDA5MTAwMDAwMDAwMkNFMDAwMDA5RgorOjEwMDZCMDAwMDAwMDAwOTAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOTI5QgorOjEwMDZDMDAwMDAwMDAwMDMwMDQwMEUyRDAwMDAwMDkyMDAwMDAwMEMwRQorOjEwMDZEMDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDEyMDAyMDM2MjMzNAorOjEwMDZFMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwRTIyMDAwMDAwMDBCNgorOjEwMDZGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDk4MDAwMEEwMENFMgorOjEwMDcwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0QworOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwQTBGMQorOjEwMDcyMDAwMDAwMEEwMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBOAorOjEwMDczMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMkVFMDAwMDAzMgorOjEwMDc0MDAwMDAwMDAwOUUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwOUQ2MgorOjEwMDc1MDAwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMDM3QQorOjEwMDc2MDAwMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDBDMDAyMDBFMkQwOAorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwRQorOjEwMDc4MDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwMDAzRjAwMDBFMgorOjEwMDc5MDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDEwMDAyMTBFMjM5RQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAxMTAwMjAzNjIzMDAwMDAwMDBCRgorOjEwMDdCMDAwMDAwMDAwMUUwMDIxMDIyQjAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDdDMDAwMTRDMDAwMDAwMDAwMDBBNzAwMDAwMDE2QzAyMDM2MjA2MgorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjEwMjJCMDAwMDAwMDBBQworOjEwMDdFMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMEFBMDAwMDAwMTU3NgorOjEwMDdGMDAwQzAyMDM2MjAwMDAwMDAwMDAwMDAwMDA4MDAyMTBFMkI2MQorOjEwMDgwMDAwMDAwMDAwMDAwMDAwMDA3RjAwMjgwRTIzMDAwMDAwMDAxMAorOjEwMDgxMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMDgyMDAwMENFMDAwMDAwMDAwMDBFMTAwMDAwMDAwMjcwMDAwMDBENAorOjEwMDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTNCMworOjEwMDg0MDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDg1MDAwMEFFMDAwMDAwMDAwMDBCMzAwMDAwMDAwMDA2MDAwMDA5QgorOjEwMDg2MDAwMDAwMDAxM0E4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NworOjEwMDg3MDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMENFRAorOjEwMDg4MDAwMDAyMjFFMzAwMDAwMDAwMDk5ODAwMDAwMDAyMDQ0MTE2QQorOjEwMDg5MDAwMDAwMDAwMDAwMDAwMDAwNDAwMjAxMjJEMDAwMDAwMDBGNQorOjEwMDhBMDAwMDAwMDAwMDgwMDIyMTIyNDAwMDAwMDAwMDAwMDAwMTBEOAorOjEwMDhCMDAwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTFDRTRDNgorOjEwMDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODA3MDAwMDAxMkY0OQorOjEwMDhEMDAwOUIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwOAorOjEwMDhFMDAwMDAyMDQ4MDIwMDAwMDAwMDlDMDAwMDAwMDAyMDQ0MTE4RAorOjEwMDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMxNDZGMDAwMDAwMDA0MgorOjEwMDkwMDAwMDAwMDAwMDEwMDMzM0UyMzAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMDkxMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDNDMDU1NQorOjEwMDkyMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBEMQorOjEwMDkzMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMDk0MDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDA3MDAyMDQ0MTEwQgorOjEwMDk1MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjJCMDAwMDAwMDAzQQorOjEwMDk2MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMENCMDBGOEZGMDhFOQorOjEwMDk3MDAwMDAyMDQ4MTEwMDAwMDAwMDk4MDAwMDAwMDA0MDQ4MTFDRAorOjEwMDk4MDAwMDAwMDAwREMwMDAwMDBGMDAwMjgwRTIyMDAwMDAwMDA0MworOjEwMDk5MDAwMDAwMDAwQTAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA2MworOjEwMDlBMDAwMENDMDAwMDAwMDAwMDBEQTAwMDAwMDExMDAyMDBFMkQzNQorOjEwMDlCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDBFMgorOjEwMDlDMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEQ1MDAwMDAwMDI2NAorOjEwMDlEMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENworOjEwMDlFMDAwMDAwMDAwRDQwMDAwM0YwMDAwNDAwQzExMDAwMDAwRDZDMQorOjEwMDlGMDAwMDAwMDFGMDAwMDQwMEMxMTAwMDAwMEQ2MDAwMDBGMDA5NgorOjEwMEEwMDAwMDAyMDBDMTEwMDAwMDAwMDAwMzgwMDA5MDAyOTRBMjNEMgorOjEwMEExMDAwMDAwMDAwMDAzRjAwMDAwMDAwMjgwRTJCMDAwMDAwMDAzNgorOjEwMEEyMDAwMDAwMDAwMDIwMDIyMEUyMzAwMDAwMDAwMDAwMDAwMDc2QQorOjEwMEEzMDAwMDA0OTRBMjMwMDAwMDBEQzAwMzgwRjA5MDAyMDQ4MTE1QgorOjEwMEE0MDAwMDAwMDAwMDA2ODAwMDAwNzAwMjA0ODExMDAwMDAwMDBCRQorOjEwMEE1MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBGQworOjEwMEE2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQ2NAorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBGRAorOjEwMEE4MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEEyMDI0OQorOjEwMEE5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwRkYwMDAwMDAyODBFMjI4QQorOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjk0QTIzMDAwMDAwMDAzMAorOjEwMEFCMDAwMDAwMDAwMjcwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMjY4RQorOjEwMEFDMDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDAwMDAyRjAwODMxNQorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRUE0MAorOjEwMEFFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjYyMDAwMDAwMDAzRQorOjEwMEFGMDAwMDA0MDAwMDAwMDAwMDBFQjAwMDAwMDAwMDA2MDAwMDA2QgorOjEwMEIwMDAwMDAwMDA2NjUwMDAwMDAwNzAwMjAyMjJEMDAwMDAwMDAwNAorOjEwMEIxMDAwMDAwMDAwMDUwMDIyMEUyMjAwMDAwMDAwMDAxMDAwMDA2RQorOjEwMEIyMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTIwNjhCQgorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDA2RAorOjEwMEI0MDAwMDAwMDAwRUYwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMEI1MDAwMDAyOTIwNjgwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3MgorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwMjIzMDAwMDAwMDAzQworOjEwMEI3MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMEY4MDAwMDAwMEI3RQorOjEwMEI4MDAwMDAyMTAyMjgwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA0NgorOjEwMEI5MDAwMDAwMDAwRjgwMDAwMDQwMDAwMjkyMjI4MDAwMDAwMDBFNgorOjEwMEJBMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwMDAwMDAwMUM5NworOjEwMEJCMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAxMAorOjEwMEJDMDAwMDAwMDAwRkQwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwNAorOjEwMEJEMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMUU3RQorOjEwMEJFMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBFMAorOjEwMEJGMDAwMDAwMDAxMEIwMDAwQTMwRjAwMjA0NDExMDAwMDAwMDBDMgorOjEwMEMwMDAwMDAwMDAwMTEwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDE3NworOjEwMEMxMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBCNAorOjEwMEMyMDAwMDAwMDAxMDRGRkZGRkZGRjAwNDA0ODExMDAwMDAxMEIxRQorOjEwMEMzMDAwMDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMEM0MDAwMENDMDAwMDAwMDAwMDEwNzAwMDBGRkZGMDA0MDQ4MTEzOQorOjEwMEM1MDAwMDAwMDAxMEIwMDAwMDAwNDAwMkYwMjIzMDAwMDAwMDAzMAorOjEwMEM2MDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTBBMDAwMDAwRkZBRQorOjEwMEM3MDAwMDA0MDQ4MTEwMDAwMDEwQjAwMDAwMDAxMDAyMDQ4MTE1NQorOjEwMEM4MDAwMDAwMDAwMDAwMDAyQzQwMDAwMjA0NDExMDAwMDAwMDAyOQorOjEwMEM5MDAwMDAwMDAwMUYwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMENBMDAwMTRDMDAwMDAwMDAwMDExMjAwMDAwMDEwNDAyMTBFMjBCRQorOjEwMENCMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDBBOAorOjEwMENDMDAwMDAwMDAwMTg0MDIyNEEyMDAwMDAwMDAwMDAwMDAwMTAzMAorOjEwMENEMDAwQzA0MjRBMjAwMDAwMDExNDAwMDAwMDAwMDAyMDBDMTE1NgorOjEwMENFMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDA3OAorOjEwMENGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMEQwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBBMDAyMDEwMTExRgorOjEwMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDA3RQorOjEwMEQyMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTFCMDAwMDAwMDBCQgorOjEwMEQzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxMDA1MzEyMjRCMAorOjEwMEQ0MDAwMDAwMDAxMTdGRkJGRkZGRjAwMjgzQTJFMDAwMDAwMDAzRgorOjEwMEQ1MDAwMDAwMDAwMUIwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAzMworOjEwMEQ2MDAwMTRDMDAwMDAwMDAwMDEyRTgxMDAwMDAwMDAyMDQ0MTE4QQorOjEwMEQ3MDAwMDAwMDAwMDAwMDAwMDAwRDAwMjA0ODExMDAwMDAwMDBFRAorOjEwMEQ4MDAwMDAwMDAwMTgwMDIyMEUzMDAwMDAwMDAwRkMwMDAwMDBFRgorOjEwMEQ5MDAwMDAyODBFMjMwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwNAorOjEwMERBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDBCQworOjEwMERCMDAwMDAwMDAwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMEUwNQorOjEwMERDMDAwMDAyMDQ0MTEwMDAwMDAwMDA3RjhGRjA4MDAyMDQ4MTEyRgorOjEwMEREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0QTIzMDAwMDAwMDA3RAorOjEwMERFMDAwMDAwMDAwMUMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDg3NAorOjEwMERGMDAwMDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFFOAorOjEwMEUwMDAwMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0MDAwMDAwMDAzOQorOjEwMEUxMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMEUyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDBDOQorOjEwMEUzMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCQworOjEwMEU0MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0M4QgorOjEwMEU1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwODAwMDAwMDAyMDQ4MTEyNAorOjEwMEU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA2MDAwMDAwMDAxNAorOjEwMEU3MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBEOAorOjEwMEU4MDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGMDA2MDQ0MTFGMgorOjEwMEU5MDAwMDAwMDA2OEQwMDAwMDAxRjAwMjEwMjMwMDAwMDAwMDA0RAorOjEwMEVBMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjhDMDAwMDAwMDREOAorOjEwMEVCMDAwMDA0MDRDMTEwMDAwMDEzNTgxMDAwMDAwMDAyMDQ0MTE2OQorOjEwMEVDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBBOAorOjEwMEVEMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUM2OAorOjEwMEVFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTFCNgorOjEwMEVGMDAwMDAwMDA2OEQwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBGQgorOjEwMEYwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMTNDMDAwMDAwMDBCMAorOjEwMEYxMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGMQorOjEwMEYyMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMDAwMDAzMTUyOQorOjEwMEYzMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDA3QworOjEwMEY0MDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA2MDAwMDAxNQorOjEwMEY1MDAwMDAwMDAxNjAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDA5QworOjEwMEY2MDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY2MAorOjEwMEY3MDAwNDAyODA2MjAwMDAwMDAwMDAwMDAwMDEwQzAyMTBBMjBDOAorOjEwMEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQxNDYxMDAwMDAwMDBCOAorOjEwMEY5MDAwMDAwMDAwMDAwMDc0MTg4MjAwMDAwMkJCMDAwMUExRkRFNworOjEwMEZBMDAwMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMDAyRjAyMkYwQworOjEwMEZCMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxNDcxRAorOjEwMEZDMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDAxQworOjEwMEZEMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEzMQorOjEwMEZFMDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDBCNAorOjEwMEZGMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDNGRkY4NworOjEwMTAwMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA5NAorOjEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxNjAwRgorOjEwMTAyMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwMDAwMEZGRkYyMworOjEwMTAzMDAwQzAyODEyMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTE2MjBFRgorOjEwMTA0MDAwMDAwMDAwMDAwMDAwRkZGRkMwNjgxQTIwMDAwMDAyQkI4MworOjEwMTA1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYxQworOjEwMTA2MDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA1NAorOjEwMTA3MDAwMDAwMDAxNTgwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDExMgorOjEwMTA4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE2QworOjEwMTA5MDAwMDAzMDBBMkYwMDAwMDAwMDAwMDAwMDAxMDAyMTBBMjI5OQorOjEwMTBBMDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDA5OQorOjEwMTBCMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEyOQorOjEwMTBDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE5NQorOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExMDAwMDAwMDAzNgorOjEwMTBFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDA5NQorOjEwMTBGMDAwMDA2MDAwMDAwMDAwMDE4RjAwMDAwMDAwMDA2MDAwMDBBMAorOjEwMTEwMDAwMDAwMDAxQTAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDBBMAorOjEwMTExMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMTEyMDAwMDAyMDJDMDgwMDAwMDAwMDAwMDAwMDAwMDAyMDI0MTExNgorOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyODExMDAwMDAwMDA1NgorOjEwMTE0MDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTY5QworOjEwMTE1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEyMworOjEwMTE2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDAwMworOjEwMTE3MDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDJFNQorOjEwMTE4MDAwMDAyMjFFMjkwMDAwMDAwMDAwMDAwMDAwMDA3MDQ4RUI1MworOjEwMTE5MDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQkI5NQorOjEwMTFBMDAwMDAwMDAwMDE0MDMzMDYyMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMTFCMDAwQzAzMDI0MDkwMDAwMDAwMDAwMDAzRkZGMDAyRjAyMkY3NAorOjEwMTFDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAzMworOjEwMTFEMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMDAwMDAwMDAwQQorOjEwMTFFMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBDMworOjEwMTFGMDAwMDAwMDAxODEwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0FEMgorOjEwMTIwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMTg2OTUwMDAwMDA4MgorOjEwMTIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwNworOjEwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxODY0QgorOjEwMTIzMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDE4NQorOjEwMTI0MDAwMDA1MzA2MjEwMDAwMDE4MjkyMDAwMDAwMDAyMDQ0MTE5QQorOjEwMTI1MDAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwMDAwMDAxOTc4RQorOjEwMTI2MDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTE1OQorOjEwMTI3MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMDAwMDA3ODA0MkE3NQorOjEwMTI4MDAwMDAwMDAyRkIwMDAwMDAwMDAwMjAyODA5MDAwMDAwMDAxMAorOjEwMTI5MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMTJBMDAwMENDMDAwMDAwMDAwMDE3NDAwMDAwMDAwQzA0MDA0MDBGOQorOjEwMTJCMDAwMDAwMDAwMDEwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTU4RQorOjEwMTJDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMTJEMDAwMENFMDAwMDAwMDAwMDE5NDAwMDAwMDE1QzAyMDM2MjA0MgorOjEwMTJFMDAwMDAwMDAwMDAwMDAwMDAxNkMwMjAzNjIwMDAwMDAwMDBCMgorOjEwMTJGMDAwM0Y4MDAwMDAwMDIwMDQxMTAwMDAwMDAwNDYwMDAwMDBCNAorOjEwMTMwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA4MDAwMDAzMQorOjEwMTMxMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDBCQgorOjEwMTMyMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMTMzMDAwMENDMDAwMDAwMDAwMDE5QjAwMDAwMDAxMDA4MDQ4MTE2QgorOjEwMTM0MDAwMDAwMDAwMDAwMDAwMDAyMTAwODA0ODExMDAwMDAwMDBBMworOjEwMTM1MDAwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBFOQorOjEwMTM2MDAwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNDAyODE2MjBDRQorOjEwMTM3MDAwMDAwMDAwMDAwMDAwMDAxMEMwODExQTIwMDAwMDAwMDBFMgorOjEwMTM4MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDY2MQorOjEwMTM5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA4MDAyMjFFMzA1QworOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDAyOTAwMjAxQTJEMDAwMDAwMDBBRAorOjEwMTNCMDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGQkZGMDlENgorOjEwMTNDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBGMDAyMDIyMkQyNgorOjEwMTNEMDAwMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTI4MDAwMDAwMDA1NAorOjEwMTNFMDAwMDAwMDAwMDYwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMTNGMDAwMDAyOTIwRTgwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDg0QworOjEwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMTQxMDAwMDYwQTAyMDAwMDI5NEEyNjAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMTQyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFDQQorOjEwMTQzMDAwMDAwMDAwMDAwMDAwMDEwMDAwMjAxODExMDAwMDAwMDA2MgorOjEwMTQ0MDAwMDAwMDAwMDgwMDYyMUUyODAwMDAwMTJGMDAwMDAwMDhCNAorOjEwMTQ1MDAwMDA4MjIyMjgwMDAwMDAwMDAwMDJDMDAwMDAyMDQ0MTE4OQorOjEwMTQ2MDAwMDAwMDAwMDAwMDAwMDAxNTAwNjAwRTJEMDAwMDAxQkQwRQorOjEwMTQ3MDAwMDAwMDAwMTYwMDYwMEUyRDAwMDAwMUJEMDAwMEMwMDgzNQorOjEwMTQ4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3NQorOjEwMTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAxQjlCRQorOjEwMTRBMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwNworOjEwMTRCMDAwMDAyMDQ4MDEwMDAwMDAwMDM5MDAwMDAwMDAyMDQ4MTExMQorOjEwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBBMworOjEwMTREMDAwMDAwMDAwMDAwMDgwNDgwMjAwMDAwMDAwMDAwMDAwMTgyQQorOjEwMTRFMDAwMDAyMDJFMkQwMDAwMDAwMDAwMDAwMDAwMDAzQjBENjNENgorOjEwMTRGMDAwMDAwMDAwMDAwMDAwMDAwODAwMjI0QTIzMDAwMDAwMDA1NQorOjEwMTUwMDAwMDAwMDAwMTAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMTgyNAorOjEwMTUxMDAwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MDM3MQorOjEwMTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEI1MAorOjEwMTUzMDAwMDAwMDEwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDAwRQorOjEwMTU0MDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTFFRAorOjEwMTU1MDAwMDAwMDAxQjIwMDAwMDAwNzAwMjEwNjJGMDAwMDAwMDA3QgorOjEwMTU2MDAwMDAwMDAwMTMwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDExMAorOjEwMTU3MDAwMDAyMDJDMTEwMDAwMDAwMDAwMDBGRkZGNDAyODIyMjA2NgorOjEwMTU4MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjYyMjI4MDAwMDAwMDBEQworOjEwMTU5MDAwMDAwMDAwMTA0MDIxMjYyMDAwMDAwMDAwMDAwMDAwMEY4NQorOjEwMTVBMDAwMDAyNjI2MjkwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDI3QworOjEwMTVCMDAwMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAzRQorOjEwMTVDMDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA4NworOjEwMTVEMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBDRAorOjEwMTVFMDAwMDAwMDAxRTAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAyNworOjEwMTVGMDAwMDAwMDAwODEwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkM1NAorOjEwMTYwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFQgorOjEwMTYxMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjAxQzExMDAwMDAwMDBGRAorOjEwMTYyMDAwMDAwMDAwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDA2MgorOjEwMTYzMDAwMENFMDAwMDAwMDAwMDFEQzAwMDAwMDAwMDA2MDAwMDA4MQorOjEwMTY0MDAwMDAwMDAxRTkwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRDgzRQorOjEwMTY1MDAwMDAwMDAwMDEwMDIwMkMxMTAwMDAwMDAwMDAwMDAwMUYwRAorOjEwMTY2MDAwMDAyODBBMjIwMDAwMDAwMDAwMDAwMDFGMDAyODJBMkE4QgorOjEwMTY3MDAwMDAwMDAwMDAwMDAwMDAwMTAwNTMwNjIxMDAwMDAxRDExRAorOjEwMTY4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDI2NQorOjEwMTY5MDAwMDAzMDRBMkYwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE4RgorOjEwMTZBMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDMAorOjEwMTZCMDAwMDAwMDAwMDEwMDMwMUUyRjAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTZDMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENgorOjEwMTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxRTlDMAorOjEwMTZFMDAwMDAwMDAwMDEwMDUzMUUyNzAwMDAwMUU1MDAwMEZGRkY3RAorOjEwMTZGMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDBGMDAyNjBFMjNFRQorOjEwMTcwMDAwMDAwMDAwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDBCNgorOjEwMTcxMDAwMDAwMDAwMEYwMDI2MTIyNDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMTcyMDAwMDAyMDE0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDE4MTFFQgorOjEwMTczMDAwMDAwMDAyQkIwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDBEOAorOjEwMTc0MDAwMDAwMDAwMDAwMDJGMDIyQjAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTc1MDAwMENFMDAwMDAwMDAwMDFGODAwMDAwMDEwMDAyMjE2MjgzNAorOjEwMTc2MDAwMDAwMDAwMDBGRkZGMDAwMDAwMjgxNjI1MDAwMDAwMDAxOAorOjEwMTc3MDAwMDAwMEZGRkYwMDI4MUEyOTAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMTc4MDAwMDAyOTQ4QzUwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MEFCMQorOjEwMTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyQzExMDAwMDAwMDBFQworOjEwMTdBMDAwMDAwMDAwMTAwMDIyMTYyMzAwMDAwMDAwRkZGRjAwMDBEMAorOjEwMTdCMDAwMDAyODE2MjUwMDAwMDAwMDAwMDBGRkZGMDAyODFBMjQ2MgorOjEwMTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OEM1MDAwMDAwMDBFMworOjEwMTdEMDAwMDAwMDAwMDAwMDczMTUwMzAwMDAwMjA1MDAwMDAwMDA3NworOjEwMTdFMDAwMDAyMDE4MDUwMDAwMDAwMDAwMDAwMDAwMDA3MzE1MjQxMAorOjEwMTdGMDAwMDAwMDAyMDUwMDAwMDAwMDAwMkQxNEM1MDAwMDAwMDBEQworOjEwMTgwMDAwMDAwMDAwMDAwMDMwMDhBMjAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMTgxMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDIxNAorOjEwMTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyMDAzMDAwMDAwMDA3NQorOjEwMTgzMDAwMDAwMDAwMDAwMDgwMjQwNDAwMDAwMDAwMDAwMDAwMEZGMQorOjEwMTg0MDAwMDAyMTAyMjUwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA3QworOjEwMTg1MDAwMDAwMDA2OEMwMDAwMDAwMDAwMkIxNDA1MDAwMDAwMDBCMgorOjEwMTg2MDAwMDAwMDAwMDEwMDkwMTYyNTAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTg3MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTE4OAorOjEwMTg4MDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwQgorOjEwMTg5MDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDIyNTZBNAorOjEwMThBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMDAyOTRBMjIxNAorOjEwMThCMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA0OAorOjEwMThDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA3QQorOjEwMThEMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAzOAorOjEwMThFMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwNQorOjEwMThGMDAwMDAwMDAwMDMwMDM4NEEyMTAwMDAwMDAwMDAwMEExRkNBNQorOjEwMTkwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFOAorOjEwMTkxMDAwMDAwMDAwMDAwMDAwRkZGRjQwMjgxMjIwMDAwMDAwMDAyRgorOjEwMTkyMDAwMDAwMDAwMTBDMDIxMUEyMDAwMDAwMDAwMDAwMEZGRkY4RQorOjEwMTkzMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwQzAyMTE2MjBFQQorOjEwMTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQxNDY1MDAwMDAyQkJFRAorOjEwMTk1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDAwMDE1MAorOjEwMTk2MDAwMDAzMzA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjFDQgorOjEwMTk3MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAyMTk4MAorOjEwMTk4MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMTk5MDAwMENDMDAwMDAwMDAwMDIxMjAwMDAwMDAwQzA0MDA0MDA2MworOjEwMTlBMDAwMDAwMDAwMDEwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDU4QgorOjEwMTlCMDAwMDAwMDAwMDAwMDQwMDQwRjAwMDAwMjEzMDAwMDAwMDBCRgorOjEwMTlDMDAwMDA2MDAwMDAwMDAwMDYzMTAwMDAwMDAwMDA2MDAwMDAyMAorOjEwMTlEMDAwMDAwMDA2NDUwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTUxRAorOjEwMTlFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUEwMDAwMDAwMDBGNgorOjEwMTlGMDAwMDA2MDAwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDA4QQorOjEwMUEwMDAwMDAwMDAyQkIwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMxNAorOjEwMUExMDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMUEyMDAwMDAyMDQ4MDgwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkZFNgorOjEwMUEzMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyMzI4OAorOjEwMUE0MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBMDAwMDAwMDBGQgorOjEwMUE1MDAwMDA0MDAwMDAwMDAwMDIzNjk1MDAwMDAwMDAyMDQ0MTEwNAorOjEwMUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGMDAwMDAwMDAxNgorOjEwMUE3MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMjM2MDAwMDAwMDA0MgorOjEwMUE4MDAwQzA0MDQ4MDAwMDAwMDIzMzkyMDAwMDAwMDAyMDQ0MTFEMgorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxRQorOjEwMUFBMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYzMworOjEwMUFCMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFCQQorOjEwMUFDMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDA5QQorOjEwMUFEMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFGMworOjEwMUFFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTE2OQorOjEwMUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwNDExMDAwMDAyRkI3NAorOjEwMUIwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDBEMAorOjEwMUIxMDAwMDA2MDAwMDAwMDAwMDYzMTAwMDBBMDBDMDAyMDQ0MTEwRAorOjEwMUIyMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA4RAorOjEwMUIzMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMUI0MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDE4NDAyMTBBMjA4NworOjEwMUI1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMkYwMjIyMDAwMDAwMDAyRgorOjEwMUI2MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjRDMDAwMDAwMTQyOQorOjEwMUI3MDAwMDAyMDIyMkQwMDAwMDAwMDAwMDgwMTAxMDAyOTIyMjg3OQorOjEwMUI4MDAwMDAwMDAwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDBDMworOjEwMUI5MDAwMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMUJBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFNQorOjEwMUJCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAyNTE4QQorOjEwMUJDMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTA5QQorOjEwMUJEMDAwMDA2MDA0MTEwMDAwMDMxNTNGODAwMDAwMDAyMDA0MTE4NAorOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjJDOQorOjEwMUJGMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNFRgorOjEwMUMwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGQgorOjEwMUMxMDAwMDAwMDAyN0MwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBDNAorOjEwMUMyMDAwMDAwMDAwMDEwMDIxMUUyNzAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMUMzMDAwMTRFMDAwMDAwMDAwMDI2QTAwMDAwMDEyMDAyMDFFMkRDNworOjEwMUM0MDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgxRTI3MDAwMDAwMDAyOQorOjEwMUM1MDAwMDAwMDAwMDAwMDM0MUMyNzAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMUM2MDAwMTJDMDAwMDAwMDAwMDI1RjAwMDAwMDAwMDAyMDFDMTFGNAorOjEwMUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU1MDAwMDAwMDA1MAorOjEwMUM4MDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjYyMDAwMDAwMDAyOAorOjEwMUM5MDAwMDAyMDE0MDcwMDAwMDAwMDAwMDAwMDEyMDAyMDFFMkQ4QworOjEwMUNBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjExRTI3MDAwMDAwMDBCRQorOjEwMUNCMDAwMDAwMDAwMDAwMDM0MUM0NzAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMUNDMDAwMTJDMDAwMDAwMDAwMDI2NzAwMDAwMDAwMDAyMDFDMTE4QworOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDBFRgorOjEwMUNFMDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjZBMDAwMDAwMDBDMAorOjEwMUNGMDAwMDAyMDE4MDcwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDA0NQorOjEwMUQwMDAwMDAwMDAyQzEwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAyMworOjEwMUQxMDAwMDAwMDAwMDAwMDM0MjAyMzAwMDAwMDAwMDAwMDAwMDA0QworOjEwMUQyMDAwMTJDMDAwMDAwMDAwMDI3MjAwMDAwMDAwMDAzNDIwNDRENQorOjEwMUQzMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzE1RQorOjEwMUQ0MDAwMDAwMDAwMTYwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTg1NAorOjEwMUQ1MDAwMDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDAwMDAzNDIwNDREQQorOjEwMUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzUyQQorOjEwMUQ3MDAwMDAwMDAwMTcwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTkyMgorOjEwMUQ4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFDOAorOjEwMUQ5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDOQorOjEwMURBMDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkU5MDAwMDNGRkZCNgorOjEwMURCMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBGNworOjEwMURDMDAwMDAwMDAyNTYwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDFCNgorOjEwMUREMDAwMDAwMDAwMTA0MDIxMDYyMDAwMDAwMDAwMDAwMEZGRkY2RQorOjEwMURFMDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjA0MgorOjEwMURGMDAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwMDAwMDAwMDBDQgorOjEwMUUwMDAwMDAwMDAwMTA0MDIxMTYyMDAwMDAwMDAwMDAwMEZGRkYyRAorOjEwMUUxMDAwQzA4ODFBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTE0QQorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAzOAorOjEwMUUzMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMDAzMgorOjEwMUU0MDAwMDA2MDAwMDAwMDAwMDYzMTAwMDAwMDAwQzA2MDAwMDBEQgorOjEwMUU1MDAwMDAwMDAyQTMwMDAwMDAwNTAwMjAwQTJEMDAwMDAwMDA4MQorOjEwMUU2MDAwMDAwMDAwMDgwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMkJGMQorOjEwMUU3MDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDFDMDAyMDFFMkQ3NAorOjEwMUU4MDAwMDAwMDAwMDAwMDAwNzAwMDAwMjgxRTI3MDAwMDAwMDA3NQorOjEwMUU5MDAwMDAwMDAwMDAwMDMxMUNFNjAwMDAwMDAwMDAwMDAwMkFFNQorOjEwMUVBMDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDBDMDAyMjFBMjY1RAorOjEwMUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDAwRAorOjEwMUVDMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwMjkyMDAwMDAwMDA5OAorOjEwMUVEMDAwMDAyMDFDMTEwMDAwMDAwMDAwMDAwMDAwMDAyMDBDMTE3OAorOjEwMUVFMDAwMDAwMDAwMDAwMDAwMDAyQjAwMjAzNjIzMDAwMDAwMDA0RQorOjEwMUVGMDAwMDAwMDAwMTAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMUYwMDAwMDA2OTFDRTIwMDAwMDEyRjkzODAwMDAwMDAyMDQ0MTFCMgorOjEwMUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA1MgorOjEwMUYyMDAwOTUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBNworOjEwMUYzMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA1NQorOjEwMUY0MDAwMDAwMDAyOUQwMDAwMDAwMTAwMzMzRTJGMDAwMDAwMDA1MQorOjEwMUY1MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwOTIwMDAwMDBDRQorOjEwMUY2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBENAorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAxQzAwNDAzNjI3MDAwMDAwMDBBOAorOjEwMUY4MDAwMDAwMDAwMENDMDIyMEEyMDAwMDAwMDAwMDAwMDAwMjkxMAorOjEwMUY5MDAwMDAyMDM2MjIwMDAwMDAwMDAwMDAwMDI4QzA0MDM2MjA0QgorOjEwMUZBMDAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDA3NgorOjEwMUZCMDAwMDAwMDAwMDkwMDIwNDgxMTAwMDAwMDAwQTEwMDAwMDBGRQorOjEwMUZDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTFDMgorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDA3NQorOjEwMUZFMDAwMDAwMDAwMDAwMDJDMUNFMzAwMDAwMDAwMDAwMDAwMjFBNQorOjEwMUZGMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIyMDAyMDFFMkRENworOjEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMxQ0U0MDAwMDAwMDBBNAorOjEwMjAxMDAwMDAwMDAwMjIwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjNGRQorOjEwMjAyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQTM1MQorOjEwMjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDA0RgorOjEwMjA0MDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjRDQworOjEwMjA1MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMAorOjEwMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDAxRgorOjEwMjA3MDAwMDAwMDAwMjQwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMjEzRQorOjEwMjA4MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDIyMDAyMDM2MjQzQgorOjEwMjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzMDAwMDAwMDA1MAorOjEwMjBBMDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMjBCMDAwMDAzMTFDQzQwMDAwMDAwMDAwMDAwMDI0MDA4MDM2MjcwRQorOjEwMjBDMDAwMDAwMDAwMDAwMDAwMDAxQTAwMjAzNjI3MDAwMDAwMDA3OQorOjEwMjBEMDAwMDAwMDAwMUIwMDIwMzYyODAwMDAwMDAwMDAwMDAwMTc1MAorOjEwMjBFMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjczOQorOjEwMjBGMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAyREMyRQorOjEwMjEwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkQ5MDAwMDAwMUE5QQorOjEwMjExMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDFCMDAyMDM2MjhBOQorOjEwMjEyMDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDAyRAorOjEwMjEzMDAwMDAwMDAwMDIwMDIxMDIyNzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMjE0MDAwMTRFMDAwMDAwMDAwMDJEOTAwMDAwMDAzMDAyMTAyMjc3MworOjEwMjE1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAyRENBRAorOjEwMjE2MDAwMDAwMDAwMjMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMjE3MDAwMDAyRTAwRTEwMDAwMDAwMDAwMDAwMDAwMDJDMDAwMDA4RQorOjEwMjE4MDAwMDAwMDAyREMwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDBFNQorOjEwMjE5MDAwMDAwMDAwMDAwMDMxMjBBMTAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjFBMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwMDZDMDAwMDA1MworOjEwMjFCMDAwMDAwMDAyREMwMDAwMDAyNDAwMjAxRTJEMDAwMDAwMDBCMgorOjEwMjFDMDAwMDAwMDAwMDAwMDJFMDBFMjAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjFEMDAwMDJDMDAwMDAwMDAwMDJEQzAwMDAwMDIyMDAyMDFFMkREMgorOjEwMjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDBEQworOjEwMjFGMDAwMDAwMDAwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMjIwMDAwMDZDMDAwMDAwMDAwMDJEQzAwMDAwMDAwMDA2MDAwMDBDQQorOjEwMjIxMDAwMDAwMDA2NjgwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQjUzOQorOjEwMjIyMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMDA4RQorOjEwMjIzMDAwMDA2MDAwMDAwMDAwMDJCNTAwMDAwMDAwMDA2MDAwMDAyNworOjEwMjI0MDAwMDAwMDA2NUYwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUwOQorOjEwMjI1MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkE3MDAwMDAwMDA3NQorOjEwMjI2MDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDFBMDAyMDFFMkRDOQorOjEwMjI3MDAwMDAwMDAwMDAwMDAwMDAxQjAwODAyMjJEMDAwMDAwMDA3NAorOjEwMjI4MDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDBEQgorOjEwMjI5MDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1NgorOjEwMjJBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDBCNworOjEwMjJCMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMTAxNgorOjEwMjJDMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQ5NgorOjEwMjJEMDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDA4RQorOjEwMjJFMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTAwNQorOjEwMjJGMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODc4MworOjEwMjMwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDA1QworOjEwMjMxMDAwMDAwMDAwMDAwMDI5NDg0NzAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMjMyMDAwMDAzMTFDQTMwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjc0NgorOjEwMjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDBBNQorOjEwMjM0MDAwMDAwMDAwMDAwMDMxMUNBMTAwMDAwMDAwMDAwMDAwMTA4RgorOjEwMjM1MDAwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4NDc1RQorOjEwMjM2MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDBGQQorOjEwMjM3MDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMDAwMEZGRkY0QQorOjEwMjM4MDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDc2MgorOjEwMjM5MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDBDQworOjEwMjNBMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwMDAwMEZGRkYxQworOjEwMjNCMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDdEMgorOjEwMjNDMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDA5QQorOjEwMjNEMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDEwNAorOjEwMjNFMDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMzA4QTJDMworOjEwMjNGMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDA2QgorOjEwMjQwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjQxMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1MworOjEwMjQyMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDAzNQorOjEwMjQzMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDFBMworOjEwMjQ0MDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMDA4QTI2NQorOjEwMjQ1MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDAwQQorOjEwMjQ2MDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDBGNworOjEwMjQ3MDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjM3MAorOjEwMjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAzNworOjEwMjQ5MDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDBDQworOjEwMjRBMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzODA4QzVBRQorOjEwMjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwODQxMDAwMDAwMDBBMworOjEwMjRDMDAwMDAwMDAwMDEwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjREMDAwMDAzMzA4QTIwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjJBRAorOjEwMjRFMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDA3NworOjEwMjRGMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTdFQworOjEwMjUwMDAwMDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA4OAorOjEwMjUxMDAwMDAwMDAzMThGRkZGRkZFRjAwMjgwNjIxMDAwMDAwMDA2NQorOjEwMjUyMDAwMDAwMDAwMTQwMDIwMjIyRDAwMDAwMDAwMDAwMEY4RTA1MAorOjEwMjUzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDFCMworOjEwMjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwODk0OTAxMDAwMDAwMDBCOAorOjEwMjU1MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMjU2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDA4MDQ4MTEwNworOjEwMjU3MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA3QgorOjEwMjU4MDAwOTcwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMjU5MDAwQzAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTEwMworOjEwMjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBCMgorOjEwMjVCMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyOAorOjEwMjVDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFEMQorOjEwMjVEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBEMworOjEwMjVFMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMjVGMDAwMDBBMDAwMEEwMDAwMDAwMDk3MDAwMDAwMDAyMDQ0MTEyNQorOjEwMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA1MQorOjEwMjYxMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjYyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEzRQorOjEwMjYzMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA3MgorOjEwMjY0MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3OAorOjEwMjY1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA2RQorOjEwMjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBDMAorOjEwMjY3MDAwOTcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjY4MDAwMDAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTFEMgorOjEwMjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBDMQorOjEwMjZBMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzNworOjEwMjZCMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFFMAorOjEwMjZDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBFMgorOjEwMjZEMDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMjZFMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBFNQorOjEwMjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDAzMAorOjEwMjcwMDAwMDAwMDIyNTcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNEOAorOjEwMjcxMDAwQzA0ODRBMjAwMDAwMDAwMDAwMDAyMjVEMDAyMDQ0MTE1MworOjEwMjcyMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDA2MQorOjEwMjczMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQ1MDAwMDAwMDBFRQorOjEwMjc0MDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFBRQorOjEwMjc1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDBEMgorOjEwMjc2MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjc3MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTExRAorOjEwMjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIyMDAwMDAwMDBGNgorOjEwMjc5MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjdBMDAwNDAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxNDAzMDRBMjBBNgorOjEwMjdCMDAwMDAwMDAwMDAwMDAwMDAwMkMwMzA0QTIwMDAwMDAwMDBCRAorOjEwMjdDMDAwMDAwMDAwMDEwMDUzMEEyMjAwMDAwMzRCMDAwMDAwM0ZGQworOjEwMjdEMDAwQzAyODBBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFGMQorOjEwMjdFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA2RgorOjEwMjdGMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTgzMworOjEwMjgwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTE3QworOjEwMjgxMDAwMDAwMDA2OEQwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBDMQorOjEwMjgyMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMzU0MDAwMDAwMTQ0OQorOjEwMjgzMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA3OQorOjEwMjg0MDAwMDAwMDAzNjQwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDA3QworOjEwMjg1MDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUEyQTQzOAorOjEwMjg2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDI0OQorOjEwMjg3MDAwMDAwMDAzNkUwMDAwMjEwMDAwMjA0NDExMDAwMDAwMDA1MQorOjEwMjg4MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMjg5MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFOAorOjEwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDBFMAorOjEwMjhCMDAwMDAwMDAwMDQwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMjhDMDAwMENDMDAwMDAwMDAwMDM2QTAwMDAyMDEwMDAyMDQ0MTEyQQorOjEwMjhEMDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDBGRgorOjEwMjhFMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQworOjEwMjhGMDAwMDA0MDQ4MDIwMDAwMDM1RjAwMDAwMDI4MDAyRjAyMjI3MQorOjEwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1QzAzNgorOjEwMjkxMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGQgorOjEwMjkyMDAwMDA0MDQ4MDIwMDAwMDM1RjAwMDAwMDJDMDAyMDM2MjYxMworOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDA0OTAwMjAxODExMDAwMDAwMDAwNQorOjEwMjk0MDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDFDRQorOjEwMjk1MDAwMDAzMzFBMjYwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjZBRAorOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNzAyOAorOjEwMjk3MDAwMDAwMDAwMkMwMDgwMUEyRDAwMDAwMDAwMDAwMDAwM0YyNQorOjEwMjk4MDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDE1MDAyRjAyMjJDRAorOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzODZDMgorOjEwMjlBMDAwMDAwMDAwMDYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjlCMDAwMENFMDAwMDAwMDAwMDNCMTAwMDAwMDE2MDAyRjAyMjIwRQorOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQjU2MworOjEwMjlEMDAwMDAwMDAwMjAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMjlFMDAwMENFMDAwMDAwMDAwMDM5QzAwMDAwMDBGMDAyRjAyMjJGQQorOjEwMjlGMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQTg0MAorOjEwMkEwMDAwMDAwMDAwMTAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA2MworOjEwMkExMDAwMENFMDAwMDAwMDAwMDNBODAwMDAwMDFFMDAyRjAyMjJBRQorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzOTAyNworOjEwMkEzMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBEQgorOjEwMkE0MDAwMDA0MDQ4MDIwMDAwMDAwMDA4MDAwMDAwMDAyOTBBMjI5RgorOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMzQwMjEwRTIwMDAwMDAwMDBFNAorOjEwMkE2MDAwMDAwMDAwMENDMDIxMTIyMDAwMDAwMDAwMDAwODAwMDAzRgorOjEwMkE3MDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDE0QzAyMjE2MjBDQworOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkxNEE0MDAwMDAwMDA2NQorOjEwMkE5MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkFBMDAwMDAyOTQ4QTIwMDAwMDAwMDAwMDBBMUZFMDAyMDQ0MTFGRgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAzMDAwMDAwMDA4QgorOjEwMkFDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwRgorOjEwMkFEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTFFRgorOjEwMkFFMDAwMDAwMDAwMDAwMDAwMDAxNjAwMjA0ODExMDAwMDAwMDA1NworOjEwMkFGMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMTU1QgorOjEwMkIwMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA3RQorOjEwMkIxMDAwMDAwMDAzOTIwMDAwMjEwRTAwMjA0NDExMDAwMDAwMDA3QworOjEwMkIyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMkIzMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTFCMgorOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDBGQgorOjEwMkI1MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE3RQorOjEwMkI2MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTE1RQorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAxNzAwMjA0ODExMDAwMDAwMDBDNQorOjEwMkI4MDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMDNEQworOjEwMkI5MDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDBFRQorOjEwMkJBMDAwMDAwMDAzOUUwMDAwMjEwODAwMjA0NDExMDAwMDAwMDBFNgorOjEwMkJCMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMkJDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTEyMgorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDA2QgorOjEwMkJFMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQQorOjEwMkJGMDAwMDAyMDQ4MDIwMDAwMDAwMDgwMDAwMDAwMDAyMDQ0MTE3NgorOjEwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA0QgorOjEwMkMxMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTBBRQorOjEwMkMyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTBGQgorOjEwMkMzMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzQUUwRgorOjEwMkM0MDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDIwMTAxNAorOjEwMkM1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwNgorOjEwMkM2MDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDBBOAorOjEwMkM3MDAwMDAwMDAwMDYwMDQwNDgxMTAwMDAwMDAwMDAwMDIwMTA4NQorOjEwMkM4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTFENgorOjEwMkM5MDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDA3OAorOjEwMkNBMDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzZFMDAwMDAwMDBFNAorOjEwMkNCMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA4MDBFQworOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAxOAorOjEwMkNEMDAwMDAwMDAwMUQwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMkNFMDAwMTRFMDAwMDAwMDAwMDNDRTgxMDAwMDAwMDAyMDQ0MTEyOQorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA1QQorOjEwMkQwMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTgxRAorOjEwMkQxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTE2NworOjEwMkQyMDAwMDAwMDA2OEQwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBBQworOjEwMkQzMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwM0MwMDAwMDIxMDBCQgorOjEwMkQ0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDJBNAorOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwOAorOjEwMkQ2MDAwQkFCRUNBRkUwMDIwNDgxMTAwMDAwMDAwQ0FGRUJBQkU2QQorOjEwMkQ3MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMDEwMDAyMDQ0MTEzNQorOjEwMkQ4MDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDA0QQorOjEwMkQ5MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDQ3NAorOjEwMkRBMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAyMTcwMDAyMDQ0MTE4NAorOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBBOQorOjEwMkRDMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwODEwMDAwMDAxNworOjEwMkREMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBBMDAyMDQ4MTFGQgorOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDBCMworOjEwMkRGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0QzOEMwMDAwMDA5RAorOjEwMkUwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTE3NAorOjEwMkUxMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCQworOjEwMkUyMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDNGRkZFQQorOjEwMkUzMDAwNDAyODBBMjAwMDAwMDAwMDgwMDAwMDAwNDAyODBFMjBFQQorOjEwMkU0MDAwMDAwMDAwMDA0MDAwMDAwMEMwMjgxMjIwMDAwMDAwMDAyOAorOjEwMkU1MDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjhEMDAwMDAwMDAwQQorOjEwMkU2MDAwMDAyMDE0MTAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjNDQQorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzRTFBMgorOjEwMkU4MDAwMDAwMDAwMDBDMDQwMTgwMDAwMDAwM0U0MDAwMDNGRkYwNQorOjEwMkU5MDAwQzAyODFBMjAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjYzNworOjEwMkVBMDAwMDAwMDA2OEQwMDAwMDAwMDAwMjAxODEwMDAwMDAwMDA0NworOjEwMkVCMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMkVDMDAwMENDMDAwMDAwMDAwMDNFNzAwMDAwMDAwQzA0MDFDMDAzMAorOjEwMkVEMDAwMDAwMDAzRUEwMDAwM0ZGRkMwMjgxRTIwMDAwMDAwMDBBMQorOjEwMkVFMDAwMDAwNDAwMDAwMDY5NDYyNzAwMDAwNjhEMDAwMDAwMDA3NQorOjEwMkVGMDAwMDAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ0MDIyMAorOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgyMEM1MDAwMDAwMDBCNAorOjEwMkYxMDAwMDAwMDAwMDAwMDQ5NDhFODAwMDAwMDAwQTU4MDAwMDAxMworOjEwMkYyMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDAyMDAwMDAyMDBDMTEwQgorOjEwMkYzMDAwMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDA0MTI0MworOjEwMkY0MDAwMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwMDAwMDAwMDAxQgorOjEwMkY1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNDAyMDQ4MDBBMQorOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAxRkMwMjEwMjIwMDAwMDAwMDAzRgorOjEwMkY3MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0Y3MDAwMDIwMTA1MworOjEwMkY4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTFEMworOjEwMkY5MDAwMDAwMDAwMDAwMDAwRkZGRkMwNDgxMjIwMDAwMDAzRkZGNworOjEwMkZBMDAwQTc4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEEwMDAyMQorOjEwMkZCMDAwMDAyMDBDMTEwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTE5QworOjEwMkZDMDAwMDAwMDA0MTIwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDA4NQorOjEwMkZEMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMkZFMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjBBMQorOjEwMkZGMDAwMDAwMDAwMDA4MzAwMDAwMDAwMjA0NDExMDAwMDAwMDBEOQorOjEwMzAwMDAwMDAwMDAwMDAwMDMwNDg4MzAwMDAwMDAwODQwMDAwMDA0MQorOjEwMzAxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAxMworOjEwMzAyMDAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwMDAwMDAwMDA4MworOjEwMzAzMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDEyMDAwMDAwMDA0MgorOjEwMzA0MDAwQzA0MDA0MDAwMDAwMDAwMUE5ODAwMDAwMDAyMDA4MTExOQorOjEwMzA1MDAwMDAwMDAwMDAwMDAwQzAwMDAwNDAwQzExMDAwMDAzRkE1NgorOjEwMzA2MDAwQUI4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEY4RTAyNAorOjEwMzA3MDAwMDA0MDBDMTEwMDAwMDNGQUFEODAwMDAwMDAyMDA4MTE5MAorOjEwMzA4MDAwMDAwMDAwMDAwMDAwRjg4MDAwNDAwQzExMDAwMDAzRkE2RQorOjEwMzA5MDAwQjM4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEYzRkNENQorOjEwMzBBMDAwMDA0MDBDMTEwMDAwMDNGQUFGODAwMDAwMDAyMDA4MTE1RQorOjEwMzBCMDAwMDAwMDAwMDAwMDAwRTAwMDAwNDAwQzExMDAwMDAzRkFENgorOjEwMzBDMDAwQjE4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEYwMDBBNgorOjEwMzBEMDAwMDA0MDBDMTEwMDAwMDNGQTgzMDAwMDAwMDAyMDQ0MTE5RQorOjEwMzBFMDAwMDAwMDAwMDAwMDAwMjE0ODAwMjA0ODExMDAwMDAwMDBGRQorOjEwMzBGMDAwODQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBENworOjEwMzEwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMUQwMDAwMDA3QQorOjEwMzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAyRgorOjEwMzEyMDAwMDExODIwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMzEzMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA4QQorOjEwMzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBENQorOjEwMzE1MDAwMDIxOEEwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMzE2MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA1QQorOjEwMzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBBNQorOjEwMzE4MDAwMDMxOEMwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMzE5MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAyQQorOjEwMzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA3NQorOjEwMzFCMDAwMDQxOEY4RTBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMzFDMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBGQQorOjEwMzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA0NQorOjEwMzFFMDAwMDUxOEY4ODBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMzFGMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBDQQorOjEwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDAxNAorOjEwMzIxMDAwMDYxOEUwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMzIyMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA5OQorOjEwMzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBFNAorOjEwMzI0MDAwMDcxOEYwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMzI1MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA2OQorOjEwMzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBCNAorOjEwMzI3MDAwMDgxOEYzRkNDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMzI4MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAzOQorOjEwMzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA4NAorOjEwMzJBMDAwMDAwMDAwMzAwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMzJCMDAwQzAyOTBDNDAwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjMzMAorOjEwMzJDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAxQQorOjEwMzJEMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwODYwMDAwMDBCRQorOjEwMzJFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDFFMAorOjEwMzJGMDAwMDAwMDAwMDA4NTAwMDAwMEMwMjA0NDExMDAwMDAwMDAxNAorOjEwMzMwMDAwMDAwMDAwMDAwMDQwNDgwMTAwMDAwMDAwMDAwMDIxN0M5NworOjEwMzMxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4NDAyMTAyMjA5RAorOjEwMzMyMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0NDU4MAorOjEwMzMzMDAwMDA4MDAwMDBDMDQ5NEEyMDAwMDAwNDQ2MDAwMDAwMDA1MAorOjEwMzM0MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAyRAorOjEwMzM1MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA0NQorOjEwMzM2MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE2NgorOjEwMzM3MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDA4MDBFQworOjEwMzM4MDAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDAyNgorOjEwMzM5MDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMUYyMgorOjEwMzNBMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBGNgorOjEwMzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0QzAyMDAwMDA0NEIzMAorOjEwMzNDMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMzNEMDAwQzAyMDEwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE0MDAwOQorOjEwMzNFMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxODAwMDAwMDAwMDBFNQorOjEwMzNGMDAwMDAwMDAwMDBDMDIwMUMwMDAwMDAwMDAwMDAwMDdGMDA1MgorOjEwMzQwMDAwMDAyODBBMjEwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjJEMQorOjEwMzQxMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NTk2MworOjEwMzQyMDAwMDAwMDAwMDBDMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwMzQzMDAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAyODBBMjMxMAorOjEwMzQ0MDAwMDAwMDAwMDAwMDAwMDAxMDAwMkYwMjIyMDAwMDAwMDAxOQorOjEwMzQ1MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNDYxODEwMDAwMDA5QQorOjEwMzQ2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE2RAorOjEwMzQ3MDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI0MDAwMDA2OERFMgorOjEwMzQ4MDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDY2ODEwMDAwMDAxMQorOjEwMzQ5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEzRQorOjEwMzRBMDAwMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDAxOQorOjEwMzRCMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwMzRDMDAwMDA2MDQ4MDUwMDAwMDY5MjAwMDAwMDAwMDAyODI0RjA3QgorOjEwMzREMDAwMDAwMDAwMDAwMDAwMDAwNzAwMjgwQTIzMDAwMDAwMDA5MAorOjEwMzRFMDAwMDAwMDAwMDEwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMzRGMDAwMEFFMDAwMDAwMDAwMDQ2RDAwMDAwMDAwMDAyRjAwQzk3OQorOjEwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RTAwMDAwMDAwMDA0ODY0RAorOjEwMzUxMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkzMDAwMDAwMDJEMgorOjEwMzUyMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDA1RQorOjEwMzUzMDAwMDAwMDA0NzIwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAxRAorOjEwMzU0MDAwMDAwMDAwMDAwMkUwMDAwMDAwMDAwNDg2MDAwMDAwMDAwRgorOjEwMzU1MDAwMDA0MDAwMDAwMDAwMDQ5MzAwMDAwMDAzMDAyRjAyMjIzRQorOjEwMzU2MDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NzdGNgorOjEwMzU3MDAwMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDA1MworOjEwMzU4MDAwMENFMDAwMDAwMDAwMDQ4NjAwMDAwMDAwMDA0MDAwMDA4NQorOjEwMzU5MDAwMDAwMDA0OTMwMDAwMDAwNDAwMkYwMjIyMDAwMDAwMDAzRAorOjEwMzVBMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDdDMDAwMDAwMDBCMQorOjEwMzVCMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAyOQorOjEwMzVDMDAwMDAwMDA0ODYwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OTM5QQorOjEwMzVEMDAwMDAwMDAwMDUwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA5MworOjEwMzVFMDAwMEFFMDAwMDAwMDAwMDQ4MTAwMDAwMDAwMDAyRjAwQzk3NAorOjEwMzVGMDAwMDAwMDAwMDAwMDAwMDAwMDA2RTAwMDAwMDAwMDA0ODY1QgorOjEwMzYwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkzMDAwMDAwMDZERAorOjEwMzYxMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDA2RAorOjEwMzYyMDAwMDAwMDA0ODYwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAxOAorOjEwMzYzMDAwMDAwMDAwMDAwOEUwMDAwMDAwMDAwNDg2MDAwMDAwMDAxOAorOjEwMzY0MDAwMDA0MDAwMDAwMDAwMDQ5MzAwMDA3RjAwMDAyODBBMjFEMQorOjEwMzY1MDAwMDAwMDAwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDBEMgorOjEwMzY2MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDg2OAorOjEwMzY3MDAwMDAyMTBBMjMwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAyOAorOjEwMzY4MDAwMDAwMDA0OTAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDBBNworOjEwMzY5MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMzZBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBDQQorOjEwMzZCMDAwMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDAzMQorOjEwMzZDMDAwMDAwMDAwMDBDMDIwNDQwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMzZEMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDBDMgorOjEwMzZFMDAwMDAwMDAwMDAwMDAwN0YwMDAwMjgwQTIxMDAwMDAwMDAwOAorOjEwMzZGMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAzMgorOjEwMzcwMDAwMEFFMDAwMDAwMDAwMDQ5OTAwMDAwMDAwQzAyMDAwMDA1MgorOjEwMzcxMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDBDOQorOjEwMzcyMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMzczMDAwMDA0MDRDMDgwMDAwMDQ1OTAwMDAwMDAwQzAyMDA4MDBCMAorOjEwMzc0MDAwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDBEQQorOjEwMzc1MDAwMDAwMDAwMTE0MDIxMTIyMDAwMDAwMDAwMDAwMDAwMTJCMworOjEwMzc2MDAwNDAyMTE2MjAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTFDMworOjEwMzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBERgorOjEwMzc4MDAwMDAwMDAwMDAwMDIxMDIyNTAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMzc5MDAwMTRFMDAwMDAwMDAwMDRBMzAwMDQwMDAwQzA0OTRBMjAxNworOjEwMzdBMDAwMDAwMDA0QTRGRkZCRkZGRkMwMjg0QTIwMDAwMDAwMDAyNworOjEwMzdCMDAwMDAwMDAwMDAwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDBDMworOjEwMzdDMDAwMTRFMDAwMDAwMDAwMDRCMDAwMDAwMDAwQzAyMDQ4MDAyOQorOjEwMzdEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBDMQorOjEwMzdFMDAwMDAwMDAwMDAwMDIxMDIyNDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMzdGMDAwMTRDMDAwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFGRgorOjEwMzgwMDAwMDAwMDAwMDAwMDAwMDAwQzAwMjA0ODExMDAwMDAwMDAzMworOjEwMzgxMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwMzgyMDAwMTRDMDAwMDAwMDAwMDRBQ0EwMDAwMDAwMDAyMDQ0MTFGRgorOjEwMzgzMDAwMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDBBRgorOjEwMzg0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDQ3RQorOjEwMzg1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZCMDAyMDQ0MTFFRQorOjEwMzg2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODEwMDAwMDAwMDAyMAorOjEwMzg3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDU0RAorOjEwMzg4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZDMDAyMDQ0MTFCRAorOjEwMzg5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODEwMDAwMDAwMDBGMAorOjEwMzhBMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBDMworOjEwMzhCMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDBEQworOjEwMzhDMDAwMDAwMDA0QUEwMDAwMDAwMEMwMjEwQTIwMDAwMDAwMDAzRgorOjEwMzhEMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNEMzODEwMDAwMDBDQworOjEwMzhFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFFQQorOjEwMzhGMDAwMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDBDNQorOjEwMzkwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwMzkxMDAwQzA2MDQ4MDAwMDAwMDY5MjAwMDAwMDAwMDA0MDAwMDA2NworOjEwMzkyMDAwMDAwMDA0Qzc4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBENgorOjEwMzkzMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDAwMDAwOQorOjEwMzk0MDAwQzAyOTQ2MjAwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDAwOAorOjEwMzk1MDAwMDAwMDA2OEQwMDAwMDAwMTAwMjEwMjIyMDAwMDAwMDA4RQorOjEwMzk2MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNENFMDAwMDIxNjkyNworOjEwMzk3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBBQQorOjEwMzk4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwRgorOjEwMzk5MDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwQ0FGRUJBQkU2RgorOjEwMzlBMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ0MDA1QQorOjEwMzlCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODEwMDAwMDAwMDBBRgorOjEwMzlDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMAorOjEwMzlEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTFFMAorOjEwMzlFMDAwMDAwMDAwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDA1MAorOjEwMzlGMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMDA2MQorOjEwM0EwMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA4RgorOjEwM0ExMDAwMDAwMDA0RDAwMDAwMjE4MDAwMjA0NDExMDAwMDAwMDBCQworOjEwM0EyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwM0EzMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA3RQorOjEwM0E0MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA5NgorOjEwM0E1MDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDMxQgorOjEwM0E2MDAwMDAzMzNFMkYwMDAwMDAwMDAwMDAwMDAxMDAyMTAyMjE3MQorOjEwM0E3MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDA1MDA0RAorOjEwM0E4MDAwMDAwMDAwMkMwMDIwMEEyRDAwMDAwMDAwMDAwNDAwMDBBRgorOjEwM0E5MDAwMThFMDBDMTEwMDAwMDRFRjAwMDAwMDAxMDAzMzNFMkY3RAorOjEwM0FBMDAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAxNworOjEwM0FCMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDA5QworOjEwM0FDMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIyNworOjEwM0FEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBCRQorOjEwM0FFMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDIxNjkyNAorOjEwM0FGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDJFNworOjEwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDA0QQorOjEwM0IxMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwMDAwMDAwMDA0MQorOjEwM0IyMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRDhDMDQ4MDA4RAorOjEwM0IzMDAwMDAwMDA0RTMwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDA5RgorOjEwM0I0MDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwQgorOjEwM0I1MDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjI5NgorOjEwM0I2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAyRAorOjEwM0I3MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMkRGMAorOjEwM0I4MDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDAwMDAyOTBDODMxRQorOjEwM0I5MDAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAyNgorOjEwM0JBMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDBBQgorOjEwM0JCMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIzNgorOjEwM0JDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBDRAorOjEwM0JEMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMTFBQworOjEwM0JFMDAwMDAyMTAyMjQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBCQQorOjEwM0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0QUFENworOjEwM0MwMDAwMDAwMDAwMkNDMDIwMzYyMDAwMDAwMDAwMDAwMDAwMkQyNQorOjEwM0MxMDAwQzA0MDM2MjAwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMjFGQgorOjEwM0MyMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA1MDVCNgorOjEwM0MzMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAxOQorOjEwM0M0MDAwRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDA0MDA5NworOjEwM0M1MDAwMDAwMDAwMDFCNTAwMDAwMDAwMjA0NDExMDAwMDAwMDAzOQorOjEwM0M2MDAwMDAwMDIwMDAwMDIwNDgxMTAwMDAwMDAwQjYwMDAwMDAwNQorOjEwM0M3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBBMDAwMDAyMDQ4MTFCNgorOjEwM0M4MDAwMDAwMDAwMDBCNzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwOAorOjEwM0M5MDAwMDAwMEMwMDAwMDIwNDgxMTAwMDAwMDAwQjgwMDAwMDAzMworOjEwM0NBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGOEUwMDAyMDQ4MTE0RQorOjEwM0NCMDAwMDAwMDAwMDBCOTAwMDAwMDAwMjA0NDExMDAwMDAwMDBENgorOjEwM0NDMDAwMDAwMEY4ODAwMDIwNDgxMTAwMDAwMDAwQkEwMDAwMDA0OQorOjEwM0NEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBFMDAwMDAyMDQ4MTExNgorOjEwM0NFMDAwMDAwMDAwMDBCQjAwMDAwMDAwMjA0NDExMDAwMDAwMDBBNAorOjEwM0NGMDAwMDAwMEYwMDAwMDIwNDgxMTAwMDAwMDAwQkMwMDAwMDA5RgorOjEwM0QwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGM0ZDMDAyMDQ4MTFENgorOjEwM0QxMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBBRAorOjEwM0QyMDAwMDAwMDAwMDIwMDIwNDgxMTAwMDAwMDAwMDAwMDAwRkYxOQorOjEwM0QzMDAwMDAyODBFMzAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjNDOQorOjEwM0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1MTk4OQorOjEwM0Q1MDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwM0Q2MDAwMTRDMDAwMDAwMDAwMDUyRTAwMDAwMDAwMDAyMDBDMTEwRgorOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAxQzAwMjAzNjIzMDAwMDAwMDBBRQorOjEwM0Q4MDAwMDAwMDAwMkIwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjk2NgorOjEwM0Q5MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI4MDAyMDM2MjMwOQorOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAzNjIzMDAwMDAwMDA4MworOjEwM0RCMDAwMDAwMDAwMjUwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjYzRgorOjEwM0RDMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDE1MDAyMDM2MjNFQworOjEwM0REMDAwMDAwMDAwMDAwMDAwMDAxNjAwMjAzNjIzMDAwMDAwMDA1NAorOjEwM0RFMDAwRkZGRkUwMDAwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMjE5NworOjEwM0RGMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDIyMDAyMDM2MjNBRgorOjEwM0UwMDAwMDAwMDAwMDAwMDAwMUZGRjAwMjAwQzExMDAwMDAwMDA1NworOjEwM0UxMDAwMDAwMDAwMjMwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjRFMgorOjEwM0UyMDAwMDAyMDM2MjMwMDAwMDAwMEYxRkZGRkZGMDAyODNBMkU5QgorOjEwM0UzMDAwMDAwMDAwMDAwMDAwMDAxQUMwMjIwRTIwMDAwMDAwMDA1OAorOjEwM0U0MDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwODEwMDAwMDAyMgorOjEwM0U1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTE2RQorOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDAyQTQwMjAzNjIwMDAwMDAwMDA3MgorOjEwM0U3MDAwODcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0NgorOjEwM0U4MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUY0MDAyMDQ0MTEwMAorOjEwM0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBBQQorOjEwM0VBMDAwMDAwMDAwMDAwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMzBBNQorOjEwM0VCMDAwMDAyMDM2MjMwMDAwMDAwMDlEMDAwMDAwMDAyMDQ0MTE3NworOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAxRjQwMjE0QTIwMDAwMDAwMDAwOAorOjEwM0VEMDAwOTYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBENworOjEwM0VFMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDBDMDBCRQorOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxMDAwMDAwMDAwMDBEMgorOjEwM0YwMDAwMDAwMDAwMUYwMDIxMTYyNDAwMDAwMDAwMDAwMDAwMDAzNworOjEwM0YxMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDFEMDAyMDM2MjMzNworOjEwM0YyMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjgxRTIzMDAwMDAwMDAyNQorOjEwM0YzMDAwMDAwMDAwMDgwMDIyMjIyMzAwMDAwMDAwRkZGRkYwMDAyNAorOjEwM0Y0MDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTIwRThDRQorOjEwM0Y1MDAwMDAwMDAwMDAwMDAwMDAxRjAwMjAzNjI4MDAwMDAwMDBDNAorOjEwM0Y2MDAwMDAwMDAwMTgwMDIxMUUyMzAwMDAwMDAwMDAwMDAwMjBCNworOjEwM0Y3MDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAyMDAyMjE2MjQ2NgorOjEwM0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAxNEE4MDAwMDAwMDA0NQorOjEwM0Y5MDAwMDAwMDAwMUUwMDIwMzYyNTAwMDAwMDAwMDAwMDAwMDM4NQorOjEwM0ZBMDAwMDAyMTFBMjQwMDAwMDAwMDEwMDAwMDAwMDAyODFBMjYzQQorOjEwM0ZCMDAwMDAwMDAwMDBFRkZGRkZGRjAwMjgzQTJFMDAwMDAwMDA4NQorOjEwM0ZDMDAwMDAwMDAwMDAwMDQ5MzhDRTAwMDAwNjdCMDAwMDAwMDEyMAorOjEwM0ZEMDAwNDAyODBBMjAwMDAwMDAwMDAwMDAwMDA2NDAyODBFMjBCMworOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDMwMEMwMjgxMjIwMDAwMDAwMDBCNAorOjEwM0ZGMDAwMDAwMDAwMDgwMDIxMTIyNDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwNDAwMDAwQzAyMDE2MjAwMDAwMDAwMDAwMDAwMDAwQzAyMDFBMjA4MAorOjEwNDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjIyMDAwMDAwMDA1QgorOjEwNDAyMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNTY2ODEwMDAwMDBEMAorOjEwNDAzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE5MQorOjEwNDA0MDAwMDAwMDAwMDAwMDAwMjI1ODAwMzAwQTI0MDAwMDAwMDA5OAorOjEwNDA1MDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjhEMDAwMDIxNjk2RQorOjEwNDA2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDU2RQorOjEwNDA3MDAwMDAwMDAwMDAwMDAyMDAwMDAwMjk0QTI2MDAwMDAwMDBBNQorOjEwNDA4MDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwQ0FGRUJBQkU3OAorOjEwNDA5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAyMDAyRjAyMjM1MQorOjEwNDBBMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NkVEMQorOjEwNDBCMDAwMDAwMDAwMDBDMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNDBDMDAwQzA0MDAwMDAwMDAwMDU3QzAwMDAwMDAyMDAyRjAyMjMxOQorOjEwNDBEMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NkVBMQorOjEwNDBFMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFEOQorOjEwNDBGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU4MDAzMDBBMjQ2RgorOjEwNDEwMDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2OEQ0NworOjEwNDExMDAwMDAwMDAwMDBDMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwNDEyMDAwQzA0MDAwMDAwMDAwMDU3QzAwMDAwMDAwMDAyRjAyMjNCQQorOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NzIzQworOjEwNDE0MDAwMDAwMDAwMDBDMDIwMUMwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwNDE1MDAwQzA0MDAwMDAwMDAwMDU3QzAwMDAwMDA0MDAyRjAyMjM4NgorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1N0EwNAorOjEwNDE3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNDE4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTFCMworOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBGNworOjEwNDFBMDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwNjkyMDAwMDAwMDAwRgorOjEwNDFCMDAwMDA0MDFDMTAwMDAwMDU3QzAwMDAwMDAwQzAyMDAwMDAzMgorOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDAwMDBFRgorOjEwNDFEMDAwMDAwMDAwMDAwRUUwMDAwMDAwMDAwNTdFMDAwMDAwMDA2RQorOjEwNDFFMDAwMDA2MDAwMDAwMDAwMDVDOTAwMDAwMDAwMDAyRjAyMjQ0QworOjEwNDFGMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1OEY1RgorOjEwNDIwMDAwMDAwMEEyQjcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNDIxMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEzOQorOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAxNAorOjEwNDIzMDAwMDAwNEEyQjYwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMUFDMAorOjEwNDI0MDAwMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzA3RAorOjEwNDI1MDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OERFRQorOjEwNDI2MDAwMDAwMEEyQzQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3MworOjEwNDI3MDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDBGRAorOjEwNDI4MDAwMDAwMDA1OEQwMDAwQTJEMTAwMjA0NDExMDAwMDAwMDBCNAorOjEwNDI5MDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDExQgorOjEwNDJBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjhENgorOjEwNDJCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjI0MDAwMDAwMDBBOAorOjEwNDJDMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUEwMDAwMEEyQkIyMAorOjEwNDJEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDdGQQorOjEwNDJFMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBEOAorOjEwNDJGMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQkFFNAorOjEwNDMwMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFBMDAyMTIyMzBEOAorOjEwNDMxMDAwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDAxRgorOjEwNDMyMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMEEyQzVCNgorOjEwNDMzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTlBNworOjEwNDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1OUVFQQorOjEwNDM1MDAwMDAwMEEyRDIwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3NAorOjEwNDM2MDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQyMDAyMDQ0MTFENAorOjEwNDM3MDAwMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDA3QQorOjEwNDM4MDAwMDAwMDAwMDIwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBENgorOjEwNDM5MDAwMENDMDAwMDAwMDAwMDVCMTAwMDBBMkJGMDAyMDQ0MTFDNQorOjEwNDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA5RQorOjEwNDNCMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwNgorOjEwNDNDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkJFMDA2MDQ0MTE1QgorOjEwNDNEMDAwMDAwMDA2OEQwMDAwMDAxQTAwMjEyMjMwMDAwMDAwMDBCRAorOjEwNDNFMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwMDAwNDIwMDQyNworOjEwNDNGMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMkM2MDAyMDQ0MTE5OAorOjEwNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDA0QgorOjEwNDQxMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNUFGMDAwMEEyRDM5MworOjEwNDQyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDg4NworOjEwNDQzMDAwMDAwMDAwMDAwMDAwQTJEMzAwMjA0NDExMDAwMDAwMDA5MgorOjEwNDQ0MDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwMDAwMEEyQzM0NAorOjEwNDQ1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDc3OAorOjEwNDQ2MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NgorOjEwNDQ3MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQzI1QQorOjEwNDQ4MDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFBMDAyMTIyMzA1NworOjEwNDQ5MDAwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDA5RQorOjEwNDRBMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMEEyQzczMworOjEwNDRCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTkyNgorOjEwNDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1QkU0OQorOjEwNDREMDAwMDAwMEEyRDQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGMQorOjEwNDRFMDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQ0MDAyMDQ0MTE1MQorOjEwNDRGMDAwMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDBGOQorOjEwNDUwMDAwODUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCMQorOjEwNDUxMDAwMDAyMDQ4MDEwMDAwMDAwMDAwMDAzMDRBMDAyMDQ0MTE0MworOjEwNDUyMDAwMDAwMDAwMDAwMTAwMDAwMDAwMjA0ODExMDAwMDAwMDAxMQorOjEwNDUzMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNUM0QTQwMDAwMDBDRQorOjEwNDU0MDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDBFRQorOjEwNDU1MDAwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA1Qzk2RAorOjEwNDU2MDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMkMxQQorOjEwNDU3MDAwMDAyMDM2MjEwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFDRQorOjEwNDU4MDAwMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDBBQworOjEwNDU5MDAwMDAwMDAwMDAwMDJGMDIzMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwNDVBMDAwMENDMDAwMDAwMDAwMDVEMDAwMDAwMDAwMDAyMDA0MTEzNQorOjEwNDVCMDAwMDAwMDAwMDAwMDAwMDAzMDAwNDAzNjIxMDAwMDA1RTM0QworOjEwNDVDMDAwMDAwMDAwMzAwMDIwMDYyRDAwMDAwMDAwMDAwMDdFMDBFQQorOjEwNDVEMDAwMDAyODA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEzQQorOjEwNDVFMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA1RTNGNworOjEwNDVGMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFDNAorOjEwNDYwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMDkyMDA2MDQ0MTE0NgorOjEwNDYxMDAwMDAwMDA2OEQwMDAwMDAzMTAwMjAzNjMwMDAwMDAwMDA1MAorOjEwNDYyMDAwMDAwNEEwOTMwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMzJEOQorOjEwNDYzMDAwMDAyMDM2MzAwMDAwMDAwMDAwMDRBMkI2MDA2MDQ0MTFFMworOjEwNDY0MDAwMDAwMDA2OEQwMDAwMDAzMzAwMjAzNjMwMDAwMDAwMDAxRQorOjEwNDY1MDAwMDAwNEEyQkEwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMzQ3RQorOjEwNDY2MDAwMDAyMDM2MzAwMDAwMDAwMDAwMDRBMkJFMDA2MDQ0MTFBQgorOjEwNDY3MDAwMDAwMDA2OEQwMDAwMDAzNTAwMjAzNjMwMDAwMDAwMDBFQworOjEwNDY4MDAwMDAwNEEyQzIwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMzY0NAorOjEwNDY5MDAwMDAyMDM2MzAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTFCNworOjEwNDZBMDAwMDAwMDA2OEQwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDBCQgorOjEwNDZCMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwM0YwMworOjEwNDZDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTFCOQorOjEwNDZEMDAwMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAyMgorOjEwNDZFMDAwMDAwMDAwMDUwMDIwNDgxMTAwMDAwMDAwMDAwMEExRjRCNworOjEwNDZGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFDQworOjEwNDcwMDAwMDAwMDAwMDA4ODAwMDAwMDAwMjA0NDExMDAwMDAwMDBBQworOjEwNDcxMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwODEwMDAwMDA5RQorOjEwNDcyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTE5NQorOjEwNDczMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjMwMDAwMDAwMDAxNworOjEwNDc0MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjJDMDAwMDAwMzAxQgorOjEwNDc1MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjFCNAorOjEwNDc2MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MkMyQgorOjEwNDc3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE0MgorOjEwNDc4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDA3RTAwMDAyODA2MjFFMworOjEwNDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDBDNworOjEwNDdBMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjA1MDAwMEEwOTJFMAorOjEwNDdCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDMxMDAyMDRBMkRCQworOjEwNDdDMDAwMDAwMDAwMDAwMDAwQTA5MzAwMjA0NDExMDAwMDAwMDA0MQorOjEwNDdEMDAwMDAwMDAwMzIwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQjZCOAorOjEwNDdFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDMzMDAyMDRBMkQ4QQorOjEwNDdGMDAwMDAwMDAwMDAwMDAwQTJCQTAwMjA0NDExMDAwMDAwMDBFOAorOjEwNDgwMDAwMDAwMDAwMzQwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQkU3RAorOjEwNDgxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDM1MDAyMDRBMkQ1NworOjEwNDgyMDAwMDAwMDAwMDAwMDAwQTJDMjAwMjA0NDExMDAwMDAwMDBBRgorOjEwNDgzMDAwMDAwMDAwMzYwMDIwNEEyRDAwMDAwMDAwMDAwMDAwMzA3QgorOjEwNDg0MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMUZGMDAyODA2MjFDNgorOjEwNDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwNgorOjEwNDg2MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjJCMDAwMDAwMDAyQgorOjEwNDg3MDAwMDAyMTAyMjEwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAyMAorOjEwNDg4MDAwMDAwMDA2MEUwMDA0QTAwMzAwNjA0NDExMDAwMDA2OEQyNQorOjEwNDg5MDAwMDAwMEEwMDMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNDhBMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDAwMDAxMDAyMTA2MjE0NworOjEwNDhCMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2MTMwQgorOjEwNDhDMDAwMDAwNEEwMTAwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTAzQworOjEwNDhEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTBFQgorOjEwNDhFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjEwNjIxMDAwMDAwMDA3RgorOjEwNDhGMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDA2NgorOjEwNDkwMDAwMENFMDAwMDAwMDAwMDYyQjAwMDRBMDExMDA2MDQ0MTEyMAorOjEwNDkxMDAwMDAwMDA2OEQwMDAwQTAxMTAwMjA0NDExMDAwMDAwMDBERQorOjEwNDkyMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTI1OQorOjEwNDkzMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMDEyMDAyMDQ0MTEwOAorOjEwNDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBFRgorOjEwNDk1MDAwMDAwNEEwMTMwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTNBNQorOjEwNDk2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTA1QQorOjEwNDk3MDAwMDAwMDAwMDAwMDA0QTAxNDAwNjA0NDExMDAwMDA2OEQzNworOjEwNDk4MDAwMDAwMEEwMTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNDk5MDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDE1MDA2MDQ0MTEzMQorOjEwNDlBMDAwMDAwMDA2OEQwMDAwQTAxNTAwMjA0NDExMDAwMDAwMDA0QQorOjEwNDlCMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTZDNQorOjEwNDlDMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMDE2MDAyMDQ0MTE3NAorOjEwNDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDA1RgorOjEwNDlFMDAwMDAwNEEwMTcwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTcwRAorOjEwNDlGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTBDQQorOjEwNEEwMDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEQzNgorOjEwNEExMDAwMDAwMDAwMkMwMDgwMDYyRDAwMDAwMDAwRkYwMDAwMDBCOAorOjEwNEEyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE5OAorOjEwNEEzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBGQworOjEwNEE0MDAwMDAwMDAwMDIwMDgwNDgxMTAwMDAwMDAwMDAwMDAwMDA4QgorOjEwNEE1MDAwMEVFMDAwMDAwMDAwMDYzRDAwMDAwMDMwMDAyMDA2MkRBMgorOjEwNEE2MDAwMDAwMDAwMDAwMDAwMDAwMjAwMjgwNjIxMDAwMDAwMDBGNQorOjEwNEE3MDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDBFNAorOjEwNEE4MDAwMENFMDAwMDAwMDAwMDYzQjgxMDAwMDAwMDAyMDQ0MTEwMworOjEwNEE5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA5QworOjEwNEFBMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMDEwMDA4NgorOjEwNEFCMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjIxQQorOjEwNEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDEzRgorOjEwNEFEMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUM5OTgwMDAwMDAxMAorOjEwNEFFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MTE3OAorOjEwNEFGMDAwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA2NDE0RgorOjEwNEIwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMEEyQTQ1QQorOjEwNEIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDIyMDAyMDQ4MTE4NQorOjEwNEIyMDAwMDAwMDAwMDA4OTAwMDAwMDAwMjA0NDExMDAwMDAwMDA4NworOjEwNEIzMDAwMDAwMDAwMDEwMDQwNDgxMTAwMDAwNjJEOTcwMDAwMDAxMQorOjEwNEI0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE3NworOjEwNEI1MDAwMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NgorOjEwNEI2MDAwMDAwMDAwMDAwMDQwNDgxMTAwMDAwNjJEMDAwMDAwMDA3OQorOjEwNEI3MDAwMDA2MDAwMDAwMDAwMDY1QzAwMDAyMDEwMDAyMDQ0MTFDRQorOjEwNEI4MDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDAyQworOjEwNEI5MDAwMDAwMUEyQTRDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTY4MworOjEwNEJBMDAwMDA2MDQ4MTEwMDAwMDM2RTAwMDAyMDEwMDAyMDQ0MTEzNgorOjEwNEJCMDAwMDAwMDAwMDAwMDAxMDAwMDAwMjA0ODExMDAwMDAwMDA3QgorOjEwNEJDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFFRQorOjEwNEJEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTE0QQorOjEwNEJFMDAwMDAwMDAwMDAwOTgwMDAwMDAwMjA0ODExMDAwMDAwMDBDMworOjEwNEJGMDAwRkZGRkZGRkYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNEMwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAxNAorOjEwNEMxMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2OERBOAorOjEwNEMyMDAwMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwNEMzMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDA0MDRDMTFGRgorOjEwNEM0MDAwMDAwMDA2NTYwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDBDOAorOjEwNEM1MDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDRDRQorOjEwNEM2MDAwMDAyOTFFMjcwMDAwMDAwMDAwMDAwMDE3MDA4MDM2MjdFMgorOjEwNEM3MDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBCMgorOjEwNEM4MDAwRkZGRkZGRkIwMDI4MUUyNzAwMDAwMDAwMDAwMDAwMTdBOAorOjEwNEM5MDAwMDA4MDM2MjcwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkRCNQorOjEwNENBMDAwMDAwMDAwMDAwMDAwMDAwODAwMjkxRTI3MDAwMDAwMDA4RQorOjEwNENCMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMTdFOQorOjEwNENDMDAwMDAyMDFFMkQwMDAwMDAwMEZGRkZGRkY3MDAyODFFMjcxOAorOjEwNENEMDAwMDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDBFMAorOjEwNENFMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDA5RgorOjEwNENGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTE3RgorOjEwNEQwMDAwMDAwMDAwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNkU2MworOjEwNEQxMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMTAwMDBFRAorOjEwNEQyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTFGOAorOjEwNEQzMDAwMDAwMDAwMDAwMTgwMDAwMDAwMjA0ODExMDAwMDAwMDA3OQorOjEwNEQ0MDAwRkZGRkZGRkYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBFRQorOjEwNEQ1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDBDMworOjEwNEQ2MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA0RAorOjEwNEQ3MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIxN0YxNQorOjEwNEQ4MDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFGMDAyMTAyMzA2OQorOjEwNEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2OENBRAorOjEwNERBMDAwMDAwMDAwMTAwMDQwNEMxMTAwMDAwNjcyMDAwMDAwMDBERQorOjEwNERCMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMzhDMDAwMDAxNworOjEwNERDMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjAwQTJEMDAwMDAwMDA2RgorOjEwNEREMDAwMDAwMDAwMUUwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMUYzQgorOjEwNERFMDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDIwMDAyMDE2MkRFMQorOjEwNERGMDAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDBCNAorOjEwNEUwMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwNEUxMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDFCQworOjEwNEUyMDAwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDBDOQorOjEwNEUzMDAwMDAwMDAwMDQwMDMwMTIyNDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwNEU0MDAwMDAyRjAwNjQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMworOjEwNEU1MDAwMDAwMDA2OEIwMDAwMDAwMzAwMjgxQTIyMDAwMDAwMDA1QQorOjEwNEU2MDAwMDAwMDAwMDgwMDIyMTIyMjAwMDAwMDAwRkZGRkYwMDBGNgorOjEwNEU3MDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDAwMDAyOTEwQzRENworOjEwNEU4MDAwMDAwMDAwMDAwMDAwMDAxRjAwNDAzNjI0MDAwMDAwMDA2OQorOjEwNEU5MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwNEVBMDAwMUFDMDAwMDAwMDAwMDY4RDlGMDAwMDAwMDAyMDQ0MTE4MQorOjEwNEVCMDAwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAzOQorOjEwNEVDMDAwMDAwMDAwMDAxQUUwMDAwMDAwMDAwNjkwMDAwMDAwMDA1MgorOjEwNEVEMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMUFDMDAwMDA3OAorOjEwNEVFMDAwMDAwMDA2OTI5RTAwMDAwMDAwMjA0NDExMDAwMDAwMDAxNworOjEwNEVGMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBGOQorOjEwNEYwMDAwMUFFMDAwMDAwMDAwMDY5NTAwMDAwMDAwMDA4MDAwMDA4QworOjEwNEYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIyNgorOjEwNEYyMDAwMDAwMDEwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDBFNAorOjEwNEYzMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTFDMworOjEwNEY0MDAwMDAwMDAxQjIwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDBCQgorOjEwNEY1MDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTY1RAorOjEwNEY2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFCMDAyMDQ4MTEzOAorOjEwNEY3MDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAxRgorOjEwNEY4MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkQwOAorOjEwNEY5MDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQ1MAorOjEwNEZBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDA4QQorOjEwNEZCMDAwMDAwMDAwMjQwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkY2MAorOjEwNEZDMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDdGNgorOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA1OAorOjEwNEZFMDAwMDAwMDAwMjIwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkYzMgorOjEwNEZGMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDdDNgorOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAyNworOjEwNTAxMDAwMDAwMDAwMjMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMTBGMgorOjEwNTAyMDAwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDdBMAorOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODExMDAwMDAwMDBENworOjEwNTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNTA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNTBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwNTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwNTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwNTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwNTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwNTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNTJCMDAwMDE0MjA1MDIwNUMwMDI1MDAwMDAwMDAwMDFDMzAxNjg2MAorOjEwNTJDMDAwMDQzRjA1QzAwMDAwMDAwMDAyMjUwMjA5MDI1MDAxNTEwMAorOjEwNTJEMDAwMDAwMDAwMDAwMjIzMDI0NTAyQTAwMjQxMDAwMDAwMDA3RAorOjEwNTJFMDAwMDNENzA1QzAwNUMwMDVDMDAwMDAwMDAwMDY0OTA2NEFGNgorOjEwNTJGMDAwMDMxRjA1QzAwMDAwMDAwMDA1QzAwNUM1MDMyMDAzNDBEMgorOjEwNTMwMDAwMDAwMDAwMDAwMzJBMDI4MjAzNDIwMzM0MDAwMDAwMDA3MAorOjEwNTMxMDAwMDVDMDA1QzAwNUMwMDVDMDAwMDAwMDAwMDVDMDA1NTE1RQorOjEwNTMyMDAwMDVDMDA1QzAwMDAwMDAwMDAzQkEwNUMwMDRCQjAzNDQ2QgorOjEwNTMzMDAwMDAwMDAwMDAwNDlBMDQ1MDA0M0QwNUMwMDAwMDAwMDA3NQorOjEwNTM0MDAwMDREMDA1QzAwNDQxMDRERDAwMDAwMDAwMDQ1MDA1MDczRQorOjEwNTM1MDAwMDM1MTAzNzUwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzA2RAorOjEwNTM2MDAwMDAwMDAwMDAwNUMwMDVDMDA1QzAwNUMwMDAwMDAwMDAyOQorOjEwNTM3MDAwMDVDMDA1QzAwNjNGMDVDNzAwMDAwMDAwMDVDMDA1QzAwOAorOjEwNTM4MDAwMDAwNzA1QzAwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzAzRAorOjEwNTM5MDAwMDAwMDAwMDAwNUMwMDVDMDA1QzAwNUMwMDAwMDAwMDBGOQorOjEwNTNBMDAwMDNGODAzRUQwNDA4MDQwNjAwMDAwMDAwMDQwRTA0MEFEQworOjEwNTNCMDAwMDQwQzA0MTAwMDAwMDAwMDA0MUMwNDE4MDQyNDA0MjA0MQorOjEwNTNDMDAwMDAwMDAwMDAwNDJDMDQyODA0MzQwNDMwMDAwMDAwMDAxNQorOjEwNTNEMDAwMDVDMDA1QzAwNDM4MDVDMDAwMDAwMDAwMDVDMDA1QzBCOAorOjEwNTNFMDAwMDVDMDA1QzAwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzAxRgorOjEwNTNGMDAwMDAwMDAwMDAwMDAyMDY3OTA2OTcwMDA2MDAwMDAwMDA4OQorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjYyMF9wZnAuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY2MjBfcGZwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTI5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY2MjBfcGZwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTQ1IEBACis6MTAwMDAwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMDdDMDM4QkVECis6MTAwMDEwMDAwMDgwMDFCODAwN0MwMzhCMDBENDQwMUUwMEVFMDAxRTVGCis6MTAwMDIwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEM0MTgzOEMzCis6MTAwMDMwMDAwMENBMjQwMDAwQ0EyODAwMDA5NTgxQTgwMEM0MUMzQTA4Cis6MTAwMDQwMDAwMEMzQzAwMDAwQ0EwODAwMDBDQTBDMDAwMDdDNzQ0QjRBCis6MTAwMDUwMDAwMEMyMDAwNTAwOTlDMDAwMDBDNDFDM0EwMDdDNzQ0QzJBCis6MTAwMDYwMDAwMEMwRkZGMDAwMDQyQzA0MDAzMDkwMDIwMDdEMjUwMDQ5Cis6MTAwMDcwMDAwMDM1MTQwMjAwN0QzNTBCMDAyNTU0MDMwMDdDRDU4MDJCCis6MTAwMDgwMDAwMDI1OUMwMzAwOTVDMDA0MDBENTAwMUIwMDdFRERDMTQ3Cis6MTAwMDkwMDAwMDdEOUQ4MDAwRDY4MDFCMDBENTgwMUIwMEQ0NDAxRUIzCis6MTAwMEEwMDAwMEQ1NDAxRTAwRDY0MDFFMDBENjgwMUUwMEQ0ODAxRTAzCis6MTAwMEIwMDAwMEQ0QzAxRTAwOTc4M0QzMDBENUMwMUUwMENBMDgwMDFDCis6MTAwMEMwMDAwMDgwMDAxQTAwQ0EwQzAwMDBFNDAxMUUwMEQ0MDAxRUNCCis6MTAwMEQwMDAwMDgwMDAwQzAwQzQxODM4MDBFNDAxM0UwMEQ0MDAxRTZCCis6MTAwMEUwMDAwMDgwMDAwQzAwQzQxODM4MDBENDQwMUUwMEVFMDAxRTMyCis6MTAwMEYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDExRTA0Cis6MTAwMTAwMDAwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMEYxCis6MTAwMTEwMDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxM0UwMEQ0MDAxRTlGCis6MTAwMTIwMDAwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDAwMEEwMDAwMDIzCis6MTAwMTMwMDAwMDdFODI4QjAwQ0ExODAwMDBENDQwMUUwMEQ1ODAxRUFECis6MTAwMTQwMDAwMDgwMDA1MzAwRDQwMDc1MDBENDQwMUUwMENBMDgwMDhGCis6MTAwMTUwMDAwMENBMEMwMDAwQ0ExMDAwMDBENDgwMTkwMEQ0QzAxOEQ2Cis6MTAwMTYwMDAwMEQ1MDAxNzAwRDQ4MDFFMDBENEMwMUUwMEQ1MDAxRThDCis6MTAwMTcwMDAwMEUyMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4Qjg2Cis6MTAwMTgwMDAwMENBMDgwMDAwRDQ4MDYwMDBENDQwMUUwMDgwMDAwMDM3Cis6MTAwMTkwMDAwMEQ0ODAxRTAwQ0EwODAwMDBENDgwNjEwMEQ0NDAxRTM0Cis6MTAwMUEwMDAwMDgwMDAwMDAwRDQ4MDFFMDBDQTA4MDAwMENBMEMwMEI1Cis6MTAwMUIwMDAwMEQ0NDAxRTAwRDQ4MDE2MDBENEMwMTYwMEQ0ODAxRTg3Cis6MTAwMUMwMDAwMDgwMDFCODAwRDRDMDFFMDBDNjA4NDMwMENBMEMwMDVECis6MTAwMUQwMDAwMENBMTAwMDAwOTQ4MDA0MDBDQTE0MDAwMEU0MjBGMzU4Cis6MTAwMUUwMDAwMEQ0MjAxMzAwRDU2MDY1MDBENEUwMUMwMEQ1MjAxQzhECis6MTAwMUYwMDAwMEQ1NjAxQzAwODAwMDAwMDAwNjIwMDEwMEM2MDg0M0Y2Cis6MTAwMjAwMDAwMENBMEMwMDAwQ0ExMDAwMDA5NDgzRjcwMENBMTQwMDUyCis6MTAwMjEwMDAwMEU0MjBGMzAwODAwMDc5MDBENDIwMTMwMEM2MDg0M0Q2Cis6MTAwMjIwMDAwMENBMEMwMDAwQ0ExMDAwMDA5ODgzRUYwMENBMTQwMDM2Cis6MTAwMjMwMDAwMEQ0MDA2NDAwODAwMDhEMDAwMDAwMDAwMEM0MTQzMjZGCis6MTAwMjQwMDAwMEM2MTg0MzAwQzQwODJGMDA5NTQwMDUwMEM0MEMzMEI4Cis6MTAwMjUwMDAwMEQ0NDAxRTAwODAwMDAwMDBFRTAwMUUwMDk1ODNGNUQzCis6MTAwMjYwMDAwMEM0MTAzMTAwRDQ0MDMzMDBENTIwNjUwMEQ0QTAxQzU4Cis6MTAwMjcwMDAwMEQ0RTAxQzAwRDUyMDFDMDBFNDAxNUUwMEQ0MDAxRTY4Cis6MTAwMjgwMDAwMDgwMDAwMDAwMDYyMDAxMDBDQTE4MDAwMDBBMjAwMUJBCis6MTAwMjkwMDAwMEQ2MDA3NjAwQzQwODM2MDA5ODgwMDcwMEM2MTA0NUQ2Cis6MTAwMkEwMDAwMDk1MDExMDAwRDQwMDFGMDBENDYwNjIwMDgwMDAwMDlGCis6MTAwMkIwMDAwMEQ0MjA2MjAwQ0MzODM1MDBDQzE0MzMwMDg0MDFCQjVDCis6MTAwMkMwMDAwMEQ0MDA3MjAwRDU0MDFFMDA4MDAwMDAwMEVFMDAxRTI5Cis6MTAwMkQwMDAwMEUyMDAxQTAwODQwMUJCMDBFMjAwMUEwMENDMTA0QkJGCis6MTAwMkUwMDAwMENDMDQ0NzAwMkM5NDAxMDA3RDA5OEIwMDk4NDAwNTQ4Cis6MTAwMkYwMDAwMDdEMTVDQjAwRDQwMDFBMDA4MDAxQjgwMEQ0MDA2RDM5Cis6MTAwMzAwMDAwMDM0NDQwMTAwQ0MwQzQ4MDA5ODQwM0EwMENDMkM0QTAwCis6MTAwMzEwMDAwMDk1ODAwNDAwQ0MwNDQ5MDA4MDAxQjgwMEQ0MDAxQTg0Cis6MTAwMzIwMDAwMEQ0QzAxQTAwMjgyODAxMDA4NDAwRjAwMENDMTAwMzdCCis6MTAwMzMwMDAwMDk4ODAxQjAwMDQzODBDMDA4NDAwRjAwMENDMTAwM0VGCis6MTAwMzQwMDAwMDk4ODAxNzAwMDQzODA4MDA4NDAwRjAwMENDMTAwM0U3Cis6MTAwMzUwMDAwMDk4ODAxMzAwMDQzODA0MDA4NDAwRjAwMENDMTAwM0RGCis6MTAwMzYwMDAwMDk4ODAxNDAwQ0MxMDRDMDA5QTgwMDkwMENDMTQ0REU5Cis6MTAwMzcwMDAwMDk4NDBEQzAwRDQwMDZEMDBDQzE4NDgwMEQ1MDAxQTZECis6MTAwMzgwMDAwMEQ1NDAxQTAwODAwMEM5MDBENTgwMUEwMDk2QzBENTVCCis6MTAwMzkwMDAwMEQ0MDA2RDAwODAwMUI4MDBENDAwNkUwMDlBQzAwMzQ0Cis6MTAwM0EwMDAwMEQ0MDA2RDAwRDQwMDZFMDA4MDAwMDAwMEVDMDA3RkRGCis6MTAwM0IwMDAwMDlBQzBDQzAwRDQwMDZEMDA4MDAxQjgwMEQ0MDA2RTVCCis6MTAwM0MwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMDdEOTEwMzY3Cis6MTAwM0QwMDAwMDdERDU4MzAwN0QxOTBDMDAzNUNDMUYwMDM1NzAxRkMyCis6MTAwM0UwMDAwMDdDRjBDQjAwN0NEMDhCMDA4ODAwMDAwMDdFOEU4QkUwCis6MTAwM0YwMDAwMDk1QzAwNDAwRDQwMDZFMDA4MDAxQjgwMEQ0MDAxQTNCCis6MTAwNDAwMDAwMEQ0QzAxQTAwQ0MwODAzMDBDQzBDMDMwMENDMTAwM0FECis6MTAwNDEwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMENDMjQwMzM0Cis6MTAwNDIwMDAwMENDMjgwMzAwMzVDNDFGMDAzNkIwMUYwMDdDNzA0QjgxCis6MTAwNDMwMDAwMDM0RjAxRjAwN0M3MDRCMDAzNTcwMUYwMDdDNzA0QjQ3Cis6MTAwNDQwMDAwMDdEODg4MTAwN0RDQ0MxMDA3RTUxMDEwMDdFOTU0MUY4Cis6MTAwNDUwMDAwMDdDOTA4MjAwN0NENEMyMDA3Qzg0OEIwMDlBQzAwMzE0Cis6MTAwNDYwMDAwMDdDOEM4QjAwMkM4ODAxMDA5ODgwOUUwMEQ0MDA2RDRECis6MTAwNDcwMDAwMDk4NDA5QzAwRDQwMDZFMDBDQzA4NEMwMENDMEM0RDgxCis6MTAwNDgwMDAwMENDMTA0ODAwRDQ4MDFBMDBENEMwMUEwMDgwMDEwMUFBCis6MTAwNDkwMDAwMEQ1MDAxQTAwQ0MwODMyMDBENDAwMzIwMDk0ODJEOTcyCis6MTAwNEEwMDAwMENBMEMwMDAwRDQ0MDFFMDA4MDAwMDAwMEQ0MDAxRUQyCis6MTAwNEIwMDAwMEU0MDExRTAwRDQwMDFFMDBDQTA4MDAwMENBMEMwMDlGCis6MTAwNEMwMDAwMENBMTAwMDAwRDQ0MDFFMDBDQTE0MDAwMEQ0ODAxRUQwCis6MTAwNEQwMDAwMEQ0QzAxRTAwRDUwMDFFMDBENTQwMUUwMEQ1NDAzNEZCCis6MTAwNEUwMDAwMDgwMDAwMDAwRUUwMDFFMDAyODA0MDQwMEUyMDAxQTU0Cis6MTAwNEYwMDAwMEUyMDAxQTAwRDQ0MDFBMDBDQTM4MDAwMENDMDgwM0Y5Cis6MTAwNTAwMDAwMENDMEMwMzAwQ0MwQzAzMDBDQzBDMDMwMDk4ODJCRDgzCis6MTAwNTEwMDAwMDAwMDAwMDAwODQwMUJCMDBEN0EwNkYwMDgwMDAwMDM1Cis6MTAwNTIwMDAwMEVFMDAxRjAwQ0EwNDAwMDBDMkZGMDAwMENDMDgzNDI3Cis6MTAwNTMwMDAwMEMxM0ZGRjAwN0M3NENCMDA3Q0M5MEIwMDdEMDEwRjI0Cis6MTAwNTQwMDAwMDk5MDJCMDAwN0M3MzhCMDA4NDAxQkIwMEQ3QTA2RkMwCis6MTAwNTUwMDAwMDgwMDAwMDAwRUUwMDFGMDBDQTA4MDAwMDI4MTkwMEZCCis6MTAwNTYwMDAwMDdEODk4QjAwOTU4MDE0MDAyODE0MDQwMENBMEMwMEJCCis6MTAwNTcwMDAwMENBMTAwMDAwQ0ExQzAwMDBDQTI0MDAwMEUyMDAxRkNDCis6MTAwNTgwMDAwMEQ0QzAxQTAwRDUwMDFBMDBENTQwMUEwMENDMTgwM0I4Cis6MTAwNTkwMDAwMENDMkMwMzAwQ0MyQzAzMDBDQzJDMDMwMDdEQTU4QkJECis6MTAwNUEwMDAwMDdEOUM0NzAwOTg0Mjk3MDAwMDAwMDAwMDgwMDE2MTk4Cis6MTAwNUIwMDAwMEQ0QzAxQTAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDY5Cis6MTAwNUMwMDAwMEVFMDAxRTAwRTQwMTFFMDBENDAwMUUwMEQ0NDAxRUY4Cis6MTAwNUQwMDAwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjE2Cis6MTAwNUUwMDAwMEU0MDEzRTAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRUI4Cis6MTAwNUYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMENBMDgwMDMwCis6MTAwNjAwMDAwMDI0OEMwNjAwMENDQzA2MDA5OEMwMDYwMENDMTA0RUNFCis6MTAwNjEwMDAwMDk5MDAwNDAwRDQwMDczMDBFNDAxMUUwMEQ0MDAxRTAxCis6MTAwNjIwMDAwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDAwMEVFMDAxRTlBCis6MTAwNjMwMDAwMENBMDgwMDAwQ0EwQzAwMDAzNEQwMTgwMDI1MTAwMUMwCis6MTAwNjQwMDAwMDk1MDAyMTAwQzE3RkZGMDBDQTEwMDAwMENBMTQwMEZECis6MTAwNjUwMDAwMENBMTgwMDAwRDQ4MDFEMDBENEMwMUQwMDdEQjE4QkRECis6MTAwNjYwMDAwMEMxNDIwMjAwQzJDMDAxMDBENTgwMUQwMDM0REMwRTcyCis6MTAwNjcwMDAwMDdENUQ0QzAwN0Y3MzRDMDBENzQwMUUwMEQ1MDAxRUVFCis6MTAwNjgwMDAwMEQ1NDAxRTAwQzE0MjAwMDBDMkMwMDAwMDA5OUMwMTBDCis6MTAwNjkwMDAwMDMxREMxMDAwN0Y1RjRDMDA3RjczNEMwMDA0MjgwMkE3Cis6MTAwNkEwMDAwMDdEODM4MDAwRDVBODZGMDBENTgwNjYwMEQ3NDAxRUVFCis6MTAwNkIwMDAwMEVDMDA1RTAwQzgyNDAyMDBDODI0MDIwMDgwMDFCOERCCis6MTAwNkMwMDAwMEQ2MDA3NjAwRDQ0MDFFMDBENDgwMUUwMEQ0QzAxRTg4Cis6MTAwNkQwMDAwMDgwMDAwMDAwRUUwMDFFMDA4MDAwMDAwMEVFMDAxRjAxCis6MTAwNkUwMDAwMEQ0MDAxRjAwODAwMDAwMDBENDAwMUYwMEQ0MDAxRkIxCis6MTAwNkYwMDAwMDg4MDAwMDAwRDQwMDFGMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTAwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTAwNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAwN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAwODAwMDAwMDAxMDE3MTAwMDIwMTc4MDAwMzAwOEYwMDA0MDA3RkU1Cis6MTAwODEwMDAwMDA1MDAwMzAwMDYwMDNGMDAwNzAwMzIwMDA4MDEyQzFECis6MTAwODIwMDAwMDA5MDA0NjAwMEEwMDM2MDAxMDAxQjYwMDE3MDBBMkI5Cis6MTAwODMwMDAwMDIyMDEzQTAwMjMwMTQ5MDAyMDAwQjQwMDI0MDEyNUQwCis6MTAwODQwMDAwMDI3MDA0RDAwMjgwMDZBMDAyQTAwNjAwMDJCMDA1MjlCCis6MTAwODUwMDAwMDJGMDA2NTAwMzIwMDg3MDAzNDAxN0YwMDNDMDE1NjA0Cis6MTAwODYwMDAwMDNGMDA3MjAwNDEwMThDMDA0NDAxMkUwMDU1MDE3M0NECis6MTAwODcwMDAwMDU2MDE3QTAwNjAwMDBCMDA2MTAwMzQwMDYyMDAzODBECis6MTAwODgwMDAwMDYzMDAzODAwNjQwMDM4MDA2NTAwMzgwMDY2MDAzOEY2Cis6MTAwODkwMDAwMDY3MDAzODAwNjgwMDNBMDA2OTAwNDEwMDZBMDA0OEJCCis6MTAwOEEwMDAwMDZCMDA0ODAwNkMwMDQ4MDA2RDAwNDgwMDZFMDA0ODc2Cis6MTAwOEIwMDAwMDZGMDA0ODAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjZGCis6MTAwOEMwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjEwCis6MTAwOEQwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwCis6MTAwOEUwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkYwCis6MTAwOEYwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkUwCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNjMwX21lLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNjMwX21lLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhM2E3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY2MzBfbWUuYmluLmloZXgKQEAgLTAsMCArMSwxMzQ1IEBACis6MTAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAwMDEwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMEZGRkYwMDI4NDYyMUE5Cis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMEFGCis6MTAwMDMwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTAwMDQwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDI2Cis6MTAwMDUwMDAwMDAwMDAwMDAwMDEwMDAwQzAyOTQ2MjAwMDAwMDAwMDUwCis6MTAwMDYwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAwMDcwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQUYyCis6MTAwMDgwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDdBCis6MTAwMDkwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MjAwNEJFCis6MTAwMEEwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMDAwMDYwMDAwMEFCCis6MTAwMEIwMDAwMDAwMDYyRTAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0MjY0Cis6MTAwMEMwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMEYwMDM5Cis6MTAwMEQwMDAwMDI4MTYyMjAwMDAwMDAwMDAwMDAwMDgwMDIxMTYyNTVDCis6MTAwMEUwMDAwMDAwMDAwMDAwMDAwMDE4MDAyMDM2MjUwMDAwMDAwMDdECis6MTAwMEYwMDA4RDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNEZBCis6MTAwMTAwMDAwMDJGMDIyNTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEFECis6MTAwMTEwMDAwMDAwMDAxODAwNDEyMDAwMDA0MDQ4MTEwMDAwMDAxOUI0Cis6MTAwMTIwMDAwMDQyMjAwMDAwMjA0ODExMDAwMDAwMDA4RTAwMDAwMDY2Cis6MTAwMTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjgwMDIwNEEyRDhCCis6MTAwMTQwMDAwMDAwMDAwMDkwMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEFBCis6MTAwMTUwMDAwMDAwMDAwMDAwMjA0ODA1MDAwMDAwMDAwMDAwMDAwQzI2Cis6MTAwMTYwMDAwMDIxMTYyMjAwMDAwMDAwMDAwMDAwMDMwMDI4MTYyNUQwCis6MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDE5MDAyMTFBMjIwMDAwMDAwMDA5Cis6MTAwMTgwMDAwMDAwMDAwNDAwMjgxQTI2MDAwMDAwMDAwMDAwMDAwMDAzCis6MTAwMTkwMDAwMDI5MTRDNTAwMDAwMDAwMDAwMDAwMTkwMDIwMzYyNUM5Cis6MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTE0MDIwMDAwMDAwMEZGCis6MTAwMUIwMDAwMDAwMDAxNjAwMjExNjI1MDAwMDAwMDAwMDAwMDAwM0NBCis6MTAwMUMwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDVBCis6MTAwMUQwMDAwMDAwMDAwMEZGRkZGRkZDMDAyODBFMjMwMDAwMDAwMENECis6MTAwMUUwMDAwMDAwMDAwMDAwMjkxNEEzMDAwMDAwMDAwMDAwMDAxNzE4Cis6MTAwMUYwMDAwMDIwMzYyNTAwMDAwMDAwMDAwMDgwMDAwMDI4MEUyMkFDCis6MTAwMjAwMDAwMDAwMDAwMDAwMDAwMDA3MDAyMjBFMjMwMDAwMDAwMDk0Cis6MTAwMjEwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDAyMDAwMDAwMEVGCis6MTAwMjIwMDAwMDI4MEUyMjAwMDAwMDAwMDAwMDAwMDYwMDIxMEUyMzFFCis6MTAwMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMEVGCis6MTAwMjQwMDAwMDAwMDAwMDAwMjIwMjIyMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTAwMjUwMDAxNEUwMDAwMDAwMDAwMDM4MDAwMDAwMDAyRUUwMDAwMDY0Cis6MTAwMjYwMDAwMDAwMDAzNTAwMDAwMDAwMkNFMDAwMDAwMDAwMDAzNzE2Cis6MTAwMjcwMDAwMDAwMDAwMDAwNDAwRTJEMDAwMDAwMzkwMDAwMDAwOEMyCis6MTAwMjgwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDkwMDQwMTIyRDhCCis6MTAwMjkwMDAwMDAwMDA0NjAwMDAwMDAxMDA0MDBFMkQwMDAwMDAzOTYzCis6MTAwMkEwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzI4Cis6MTAwMkIwMDAwMDI4MTIyMzAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDg3Cis6MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMwMDAwMDAwMEFECis6MTAwMkQwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwM0UwMDAwMDAwOEU0Cis6MTAwMkUwMDAwMDQwMUMxMTAwMDAwMDQxMDAwMDAwMEQwMDIwMUUyREU4Cis6MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDBGMDAyODFFMjcwMDAwMDAwMDgyCis6MTAwMzAwMDAwMDAwMDAwMzAwMjIxRTI3MDAwMDAwMDA3RkMwMDAwMDQ0Cis6MTAwMzEwMDAwMDI4MUEyMzAwMDAwMDAwMDAwMDAwMTQwMDIxMUEyNjAzCis6MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAxMDAzMzFBMjYwMDAwMDAwMDU5Cis6MTAwMzMwMDAwMDAwMDAwODAwMjIxQTI2MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwMzQwMDAwMDI5MENDNzAwMDAwMDAwMDAwMDAwMjcwMDIwMzYyNDEwCis6MTAwMzUwMDAwMDAwMDAwMDAwMDA3RjAwMDAyODEyMjEwMDAwMDAwMEMzCis6MTAwMzYwMDAwMDAwMTQwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAwMzcwMDAwQ0UwMDAwMDAwMDAwMDRCMDAwMDAwMDEwMDI5MEUyM0VCCis6MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDM2MjMwMDAwMDAwMEU2Cis6MTAwMzkwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkY4MDAwMDExCis6MTAwM0EwMDAwMDI5NEEyMzAwMDAwMDAwMDAwMDAwMDAwMDNBMkMwMjRGCis6MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjBFMkIwMDAwMDAwMEUwCis6MTAwM0MwMDBGQzAwMDAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwRkM5Cis6MTAwM0QwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyM0YwCis6MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDI3MDAyMDRBMkQwMDAwMDAwMDRGCis6MTAwM0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyOTVCCis6MTAwNDAwMDAwMDIwMEUyRDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyM0U5Cis6MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAwNDIwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTUyCis6MTAwNDMwMDAwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDgzCis6MTAwNDQwMDAwMDAwMDA2MTAwMDAwMDAwMkVFMDAwMDAwMDAwMDA1RkRFCis6MTAwNDUwMDAwMDAwMDAwMDJDRTAwMDAwMDAwMDAwNUUwMDAwMDAwMDMyCis6MTAwNDYwMDAwMDQwMEUyRDAwMDAwMDYyMDAwMDAwMDEwMDQwMEUyRDMzCis6MTAwNDcwMDAwMDAwMDA2MjAwMDAwMDBBMDAyMDBFMkQwMDAwMDAwMEI1Cis6MTAwNDgwMDAwMDAwMDAwQjAwNDAxMjJEMDAwMDAwNkEwMDAwMDAwMDc4Cis6MTAwNDkwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMwMDI4MTIyM0Q5Cis6MTAwNEEwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQwMDAwMDAwMEYyCis6MTAwNEIwMDA3RkMwMDAwMDAwMjgxNjIzMDAwMDAwMDAwMDAwMDAxNDg4Cis6MTAwNEMwMDAwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDEwMDMzMTYyNTYxCis6MTAwNEQwMDAwMDAwMDAwMDgwMDAwMDAwMDAyODBFMjMwMDAwMDAwMDQzCis6MTAwNEUwMDAwMDAwMDAwMDAwMjkwQ0EzMDAwMDAwMDAzRkZGRkMwMEZBCis6MTAwNEYwMDAwMDI5MEUyMzAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzIxCis6MTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA2RDhBCis6MTAwNTEwMDAwMDAwMDEwMDAwNDAxQzExMDAwMDAwNzAwMDAwMDAwREYwCis6MTAwNTIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwRjAwMDI4MUUyNzAzCis6MTAwNTMwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMjFFMjcwMDAwMDAwMDUwCis6MTAwNTQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwREE4Cis6MTAwNTUwMDAwMDIwNDgxMTAwMDAwMDAwRkZGRkYwRkYwMDI4MUEzMEMzCis6MTAwNTYwMDAwMDAwMDAwMDAwMDBBMDI4MDAyMDQ0MTEwMDAwMDAwMDRFCis6MTAwNTcwMDAwMDAwMDAwMDAwMjk0OEU2MDAwMDAwMDAwMDAwQTAxODZDCis6MTAwNTgwMDAwMDIwNDQxMTAwMDAwMDAwM0ZGRkZGRkYwMDI4NEEyMzI1Cis6MTAwNTkwMDAwMDAwMDAwMDAwMDBBMDEwMDAyMDQ0MTEwMDAwMDAwMDM2Cis6MTAwNUEwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAzMEFGCis6MTAwNUIwMDAwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDIwMDI5MTYyNTcyCis6MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjUwMDAwMDAwMDgwCis6MTAwNUQwMDAwMDAwMDAyNTAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAwNUUwMDAwMDJGMDBBMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDZECis6MTAwNUYwMDAwMDAwMDA4MzAwMDAwMDI2MDAyMDE2MkQwMDAwMDAwMEVGCis6MTAwNjAwMDAwMDAwMDAwMDAwMkYwMEE0MDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAwNjEwMDAwQ0MwMDAwMDAwMDAwMDg0MDAwMDAwMDAwMDQwMDAwMDRBCis6MTAwNjIwMDAwMDAwMDA4QTAwMDAwMDI1MDAyMDM2MjMwMDAwMDAwMEEyCis6MTAwNjMwMDAwMDAwMDAyNjAwMjAzNjI0MDAwMDAwMDAwMDAwMDAxNzAzCis6MTAwNjQwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyN0YzCis6MTAwNjUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA4QTFDCis6MTAwNjYwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NjUwMDAwMDAwMEJGCis6MTAwNjcwMDAwMDYwMDAwMDAwMDAwNjU5MDAwMDAwMDIwMDIxMEUyMjY4Cis6MTAwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA4RDA5Cis6MTAwNjkwMDAwMDAwMDAxMkMwNDAzNjIwMDAwMDAwOTMwMDAwMDAwMDVGCis6MTAwNkEwMDAyRUUwMDAwMDAwMDAwMDkxMDAwMDAwMDAyQ0UwMDAwMDlGCis6MTAwNkIwMDAwMDAwMDA5MDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5MjlCCis6MTAwNkMwMDAwMDAwMDAwMzAwNDAwRTJEMDAwMDAwOTIwMDAwMDAwQzBFCis6MTAwNkQwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMTIwMDIwMzYyMzM0Cis6MTAwNkUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTBFMjIwMDAwMDAwMEI2Cis6MTAwNkYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOTgwMDAwQTAwQ0UyCis6MTAwNzAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDRDCis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDBBMEYxCis6MTAwNzIwMDAwMDAwQTAwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTAwNzMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAyRUUwMDAwMDMyCis6MTAwNzQwMDAwMDAwMDA5RTAwMDAwMDAwMkNFMDAwMDAwMDAwMDA5RDYyCis6MTAwNzUwMDAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwMzdBCis6MTAwNzYwMDAwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMEMwMDIwMEUyRDA4Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDBFCis6MTAwNzgwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDAwMDNGMDAwMEUyCis6MTAwNzkwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMTAwMDIxMEUyMzlFCis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDExMDAyMDM2MjMwMDAwMDAwMEJGCis6MTAwN0IwMDAwMDAwMDAxRTAwMjEwMjJCMDAwMDAwMDAwMDAwMDAwMENECis6MTAwN0MwMDAxNEMwMDAwMDAwMDAwMEE3MDAwMDAwMTZDMDIwMzYyMDYyCis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTAyMkIwMDAwMDAwMEFDCis6MTAwN0UwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQUEwMDAwMDAxNTc2Cis6MTAwN0YwMDBDMDIwMzYyMDAwMDAwMDAwMDAwMDAwMDgwMDIxMEUyQjYxCis6MTAwODAwMDAwMDAwMDAwMDAwMDAwMDdGMDAyODBFMjMwMDAwMDAwMDEwCis6MTAwODEwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAwODIwMDAwQ0UwMDAwMDAwMDAwMEUxMDAwMDAwMDAyNzAwMDAwMEQ0Cis6MTAwODMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBM0IzCis6MTAwODQwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwODUwMDAwQUUwMDAwMDAwMDAwMEIzMDAwMDAwMDAwMDYwMDAwMDlCCis6MTAwODYwMDAwMDAwMDEzQTgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDU3Cis6MTAwODcwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQ0VECis6MTAwODgwMDAwMDIyMUUzMDAwMDAwMDAwOTk4MDAwMDAwMDIwNDQxMTZBCis6MTAwODkwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMDEyMkQwMDAwMDAwMEY1Cis6MTAwOEEwMDAwMDAwMDAwODAwMjIxMjI0MDAwMDAwMDAwMDAwMDAxMEQ4Cis6MTAwOEIwMDAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDAwMDI5MUNFNEM2Cis6MTAwOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDcwMDAwMDEyRjQ5Cis6MTAwOEQwMDA5QjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTAwOEUwMDAwMDIwNDgwMjAwMDAwMDAwOUMwMDAwMDAwMDIwNDQxMThECis6MTAwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzE0NkYwMDAwMDAwMDQyCis6MTAwOTAwMDAwMDAwMDAwMTAwMzMzRTIzMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAwOTEwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDIwM0MwNTU1Cis6MTAwOTIwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQxCis6MTAwOTMwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAwOTQwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMDcwMDIwNDQxMTBCCis6MTAwOTUwMDAwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMkIwMDAwMDAwMDNBCis6MTAwOTYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQ0IwMEY4RkYwOEU5Cis6MTAwOTcwMDAwMDIwNDgxMTAwMDAwMDAwOTgwMDAwMDAwMDQwNDgxMUNECis6MTAwOTgwMDAwMDAwMDBEQzAwMDAwMEYwMDAyODBFMjIwMDAwMDAwMDQzCis6MTAwOTkwMDAwMDAwMDBBMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAwOUEwMDAwQ0MwMDAwMDAwMDAwMERBMDAwMDAwMTEwMDIwMEUyRDM1Cis6MTAwOUIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMEUyCis6MTAwOUMwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRDUwMDAwMDAwMjY0Cis6MTAwOUQwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ3Cis6MTAwOUUwMDAwMDAwMDBENDAwMDAzRjAwMDA0MDBDMTEwMDAwMDBENkMxCis6MTAwOUYwMDAwMDAwMUYwMDAwNDAwQzExMDAwMDAwRDYwMDAwMEYwMDk2Cis6MTAwQTAwMDAwMDIwMEMxMTAwMDAwMDAwMDAzODAwMDkwMDI5NEEyM0QyCis6MTAwQTEwMDAwMDAwMDAwMDNGMDAwMDAwMDAyODBFMkIwMDAwMDAwMDM2Cis6MTAwQTIwMDAwMDAwMDAwMjAwMjIwRTIzMDAwMDAwMDAwMDAwMDAwNzZBCis6MTAwQTMwMDAwMDQ5NEEyMzAwMDAwMERDMDAzODBGMDkwMDIwNDgxMTVCCis6MTAwQTQwMDAwMDAwMDAwMDY4MDAwMDA3MDAyMDQ4MTEwMDAwMDAwMEJFCis6MTAwQTUwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEZDCis6MTAwQTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDY0Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZECis6MTAwQTgwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTIwMjQ5Cis6MTAwQTkwMDAwMDIwNDQxMTAwMDAwMDAwMDBGRjAwMDAwMDI4MEUyMjhBCis6MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyOTRBMjMwMDAwMDAwMDMwCis6MTAwQUIwMDAwMDAwMDAyNzAwMjAwRTJEMDAwMDAwMDAwMDAwMDAyNjhFCis6MTAwQUMwMDAwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDAwMDJGMDA4MzE1Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBFQTQwCis6MTAwQUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NUYwMDAwMDAwMDQxCis6MTAwQUYwMDAwMDQwMDAwMDAwMDAwMEVCMDAwMDAwMDAwMDYwMDAwMDZCCis6MTAwQjAwMDAwMDAwMDY2MjAwMDAwMDA3MDAyMDIyMkQwMDAwMDAwMDA3Cis6MTAwQjEwMDAwMDAwMDAwNTAwMjIwRTIyMDAwMDAwMDAwMDEwMDAwMDZFCis6MTAwQjIwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5MjA2OEJCCis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDZECis6MTAwQjQwMDAwMDAwMDBFRjAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDVECis6MTAwQjUwMDAwMDI5MjA2ODAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDcyCis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTAyMjMwMDAwMDAwMDNDCis6MTAwQjcwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwRjgwMDAwMDAwQjdFCis6MTAwQjgwMDAwMDIxMDIyODAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDQ2Cis6MTAwQjkwMDAwMDAwMDBGODAwMDAwNDAwMDAyOTIyMjgwMDAwMDAwMEU2Cis6MTAwQkEwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxQzk3Cis6MTAwQkIwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDEwCis6MTAwQkMwMDAwMDAwMDBGRDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDA0Cis6MTAwQkQwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAxRTdFCis6MTAwQkUwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEUwCis6MTAwQkYwMDAwMDAwMDEwQjAwMDBBMzBGMDAyMDQ0MTEwMDAwMDAwMEMyCis6MTAwQzAwMDAwMDAwMDAxMTAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwMTc3Cis6MTAwQzEwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEI0Cis6MTAwQzIwMDAwMDAwMDEwNEZGRkZGRkZGMDA0MDQ4MTEwMDAwMDEwQjFFCis6MTAwQzMwMDAwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAwQzQwMDAwQ0MwMDAwMDAwMDAwMTA3MDAwMEZGRkYwMDQwNDgxMTM5Cis6MTAwQzUwMDAwMDAwMDEwQjAwMDAwMDA0MDAyRjAyMjMwMDAwMDAwMDMwCis6MTAwQzYwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxMEEwMDAwMDBGRkFFCis6MTAwQzcwMDAwMDQwNDgxMTAwMDAwMTBCMDAwMDAwMDEwMDIwNDgxMTU1Cis6MTAwQzgwMDAwMDAwMDAwMDAwMDJDNDAwMDAyMDQ0MTEwMDAwMDAwMDI5Cis6MTAwQzkwMDAwMDAwMDAxRjAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAwQ0EwMDAxNEMwMDAwMDAwMDAwMTEyMDAwMDAwMTA0MDIxMEUyMEJFCis6MTAwQ0IwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMEE4Cis6MTAwQ0MwMDAwMDAwMDAxODQwMjI0QTIwMDAwMDAwMDAwMDAwMDAxMDMwCis6MTAwQ0QwMDBDMDQyNEEyMDAwMDAwMTE0MDAwMDAwMDAwMDIwMEMxMTU2Cis6MTAwQ0UwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMDc4Cis6MTAwQ0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAwRDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEEwMDIwMTAxMTFGCis6MTAwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDdFCis6MTAwRDIwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxMUIwMDAwMDAwMEJCCis6MTAwRDMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDEwMDUzMTIyNEIwCis6MTAwRDQwMDAwMDAwMDExN0ZGQkZGRkZGMDAyODNBMkUwMDAwMDAwMDNGCis6MTAwRDUwMDAwMDAwMDAxQjAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwRDYwMDAxNEMwMDAwMDAwMDAwMTJFODEwMDAwMDAwMDIwNDQxMThBCis6MTAwRDcwMDAwMDAwMDAwMDAwMDAwMDBEMDAyMDQ4MTEwMDAwMDAwMEVECis6MTAwRDgwMDAwMDAwMDAxODAwMjIwRTMwMDAwMDAwMDBGQzAwMDAwMEVGCis6MTAwRDkwMDAwMDI4MEUyMzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTA0Cis6MTAwREEwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMEJDCis6MTAwREIwMDAwMDAwMDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwRTA1Cis6MTAwREMwMDAwMDIwNDQxMTAwMDAwMDAwMDdGOEZGMDgwMDIwNDgxMTJGCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTRBMjMwMDAwMDAwMDdECis6MTAwREUwMDAwMDAwMDAxQzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwODc0Cis6MTAwREYwMDAwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUU4Cis6MTAwRTAwMDAwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQwMDAwMDAwMDM5Cis6MTAwRTEwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwRTIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMEM5Cis6MTAwRTMwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAwRTQwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzhCCis6MTAwRTUwMDAwMDIwNDQxMTAwMDAwMDAwMDA4MDAwMDAwMDIwNDgxMTI0Cis6MTAwRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDYwMDAwMDAwMDE0Cis6MTAwRTcwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAwRTgwMDAxNzAwMDAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMUYyCis6MTAwRTkwMDAwMDAwMDY4QTAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDUwCis6MTAwRUEwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2ODkwMDAwMDAwNERCCis6MTAwRUIwMDAwMDQwNEMxMTAwMDAwMTM1ODEwMDAwMDAwMDIwNDQxMTY5Cis6MTAwRUMwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEE4Cis6MTAwRUQwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQzY4Cis6MTAwRUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMUI2Cis6MTAwRUYwMDAwMDAwMDY4QTAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMEZFCis6MTAwRjAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAxM0MwMDAwMDAwMEIwCis6MTAwRjEwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEYxCis6MTAwRjIwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEwMDAwMDMxNTI5Cis6MTAwRjMwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAwRjQwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDYwMDAwMDE1Cis6MTAwRjUwMDAwMDAwMDE2MDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDlDCis6MTAwRjYwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjYwCis6MTAwRjcwMDA0MDI4MDYyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMEEyMEM4Cis6MTAwRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDE0NjEwMDAwMDAwMEI4Cis6MTAwRjkwMDAwMDAwMDAwMDAwNzQxODgyMDAwMDAyQkIwMDAxQTFGREU3Cis6MTAwRkEwMDAwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYwMDJGMDIyRjBDCis6MTAwRkIwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDE0NzFECis6MTAwRkMwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMDFDCis6MTAwRkQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTMxCis6MTAwRkUwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMEI0Cis6MTAwRkYwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwM0ZGRjg3Cis6MTAxMDAwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDk0Cis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDE2MDBGCis6MTAxMDIwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDAwMDAwRkZGRjIzCis6MTAxMDMwMDBDMDI4MTIyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMTYyMEVGCis6MTAxMDQwMDAwMDAwMDAwMDAwMDBGRkZGQzA2ODFBMjAwMDAwMDJCQjgzCis6MTAxMDUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjFDCis6MTAxMDYwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDU0Cis6MTAxMDcwMDAwMDAwMDE1ODAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTEyCis6MTAxMDgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTZDCis6MTAxMDkwMDAwMDMwMEEyRjAwMDAwMDAwMDAwMDAwMDEwMDIxMEEyMjk5Cis6MTAxMEEwMDAwMDAwMDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMDk5Cis6MTAxMEIwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTI5Cis6MTAxMEMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTk1Cis6MTAxMEQwMDAwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTEwMDAwMDAwMDM2Cis6MTAxMEUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDk1Cis6MTAxMEYwMDAwMDYwMDAwMDAwMDAwMThGMDAwMDAwMDAwMDYwMDAwMEEwCis6MTAxMTAwMDAwMDAwMDFBMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMEEwCis6MTAxMTEwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAxMTIwMDAwMDIwMkMwODAwMDAwMDAwMDAwMDAwMDAwMDIwMjQxMTE2Cis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MTEwMDAwMDAwMDU2Cis6MTAxMTQwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjlDCis6MTAxMTUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTIzCis6MTAxMTYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDAzCis6MTAxMTcwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMkU1Cis6MTAxMTgwMDAwMDIyMUUyOTAwMDAwMDAwMDAwMDAwMDAwMDcwNDhFQjUzCis6MTAxMTkwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCQjk1Cis6MTAxMUEwMDAwMDAwMDAwMTQwMzMwNjIwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAxMUIwMDBDMDMwMjQwOTAwMDAwMDAwMDAwMDNGRkYwMDJGMDIyRjc0Cis6MTAxMUMwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDMzCis6MTAxMUQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMwMDAwMDAwMDBBCis6MTAxMUUwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEMzCis6MTAxMUYwMDAwMDAwMDE4MTAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQUQyCis6MTAxMjAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAxODY5NTAwMDAwMDgyCis6MTAxMjEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTA3Cis6MTAxMjIwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDE4NjRCCis6MTAxMjMwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTg1Cis6MTAxMjQwMDAwMDUzMDYyMTAwMDAwMTgyOTIwMDAwMDAwMDIwNDQxMTlBCis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDQ4MDAwMDAwMDE5NzhFCis6MTAxMjYwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMTU5Cis6MTAxMjcwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDAwMDAwMDc4MDQyQTc1Cis6MTAxMjgwMDAwMDAwMDJGQjAwMDAwMDAwMDAyMDI4MDkwMDAwMDAwMDEwCis6MTAxMjkwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAxMkEwMDAwQ0MwMDAwMDAwMDAwMTc0MDAwMDAwMDBDMDQwMDQwMEY5Cis6MTAxMkIwMDAwMDAwMDAwMTAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNThFCis6MTAxMkMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAxMkQwMDAwQ0UwMDAwMDAwMDAwMTk0MDAwMDAwMTVDMDIwMzYyMDQyCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDE2QzAyMDM2MjAwMDAwMDAwMEIyCis6MTAxMkYwMDAzRjgwMDAwMDAwMjAwNDExMDAwMDAwMDA0NjAwMDAwMEI0Cis6MTAxMzAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDgwMDAwMDMxCis6MTAxMzEwMDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMEJCCis6MTAxMzIwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAxMzMwMDAwQ0MwMDAwMDAwMDAwMTlCMDAwMDAwMDEwMDgwNDgxMTZCCis6MTAxMzQwMDAwMDAwMDAwMDAwMDAwMDIxMDA4MDQ4MTEwMDAwMDAwMEEzCis6MTAxMzUwMDAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEU5Cis6MTAxMzYwMDBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTYyMENFCis6MTAxMzcwMDAwMDAwMDAwMDAwMDAwMDEwQzA4MTFBMjAwMDAwMDAwMEUyCis6MTAxMzgwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjYxCis6MTAxMzkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDgwMDIyMUUzMDVDCis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMDI5MDAyMDFBMkQwMDAwMDAwMEFECis6MTAxM0IwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkZCRkYwOUQ2Cis6MTAxM0MwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEYwMDIwMjIyRDI2Cis6MTAxM0QwMDAwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjgwMDAwMDAwMDU0Cis6MTAxM0UwMDAwMDAwMDAwNjAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAxM0YwMDAwMDI5MjBFODAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwODRDCis6MTAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAxNDEwMDAwNjBBMDIwMDAwMjk0QTI2MDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxNDIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUNBCis6MTAxNDMwMDAwMDAwMDAwMDAwMDAwMTAwMDAyMDE4MTEwMDAwMDAwMDYyCis6MTAxNDQwMDAwMDAwMDAwODAwNjIxRTI4MDAwMDAxMkYwMDAwMDAwOEI0Cis6MTAxNDUwMDAwMDgyMjIyODAwMDAwMDAwMDAwMkMwMDAwMDIwNDQxMTg5Cis6MTAxNDYwMDAwMDAwMDAwMDAwMDAwMDE1MDA2MDBFMkQwMDAwMDFCRDBFCis6MTAxNDcwMDAwMDAwMDAxNjAwNjAwRTJEMDAwMDAxQkQwMDAwQzAwODM1Cis6MTAxNDgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDc1Cis6MTAxNDkwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDFCOUJFCis6MTAxNEEwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAxNEIwMDAwMDIwNDgwMTAwMDAwMDAwMzkwMDAwMDAwMDIwNDgxMTExCis6MTAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEEzCis6MTAxNEQwMDAwMDAwMDAwMDAwODA0ODAyMDAwMDAwMDAwMDAwMDAxODJBCis6MTAxNEUwMDAwMDIwMkUyRDAwMDAwMDAwMDAwMDAwMDAwMDNCMEQ2M0Q2Cis6MTAxNEYwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMjRBMjMwMDAwMDAwMDU1Cis6MTAxNTAwMDAwMDAwMDAxMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAxODI0Cis6MTAxNTEwMDAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMDAwMDgwNDgwMzcxCis6MTAxNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjUwCis6MTAxNTMwMDAwMDAwMTAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMDBFCis6MTAxNTQwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMUVECis6MTAxNTUwMDAwMDAwMDFCMjAwMDAwMDA3MDAyMTA2MkYwMDAwMDAwMDdCCis6MTAxNTYwMDAwMDAwMDAxMzAwMjAwQTJEMDAwMDAwMDAwMDAwMDAwMTEwCis6MTAxNTcwMDAwMDIwMkMxMTAwMDAwMDAwMDAwMEZGRkY0MDI4MjIyMDY2Cis6MTAxNTgwMDAwMDAwMDAwMDAwMDAwMDBGMDAyNjIyMjgwMDAwMDAwMERDCis6MTAxNTkwMDAwMDAwMDAxMDQwMjEyNjIwMDAwMDAwMDAwMDAwMDAwRjg1Cis6MTAxNUEwMDAwMDI2MjYyOTAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjdDCis6MTAxNUIwMDAwMDAwMDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDNFCis6MTAxNUMwMDAwMDAwMDAxQjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAxNUQwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMENECis6MTAxNUUwMDAwMDAwMDFFMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDI3Cis6MTAxNUYwMDAwMDAwMDA4MTAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzU0Cis6MTAxNjAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUVCCis6MTAxNjEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyMDFDMTEwMDAwMDAwMEZECis6MTAxNjIwMDAwMDAwMDAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDYyCis6MTAxNjMwMDAwQ0UwMDAwMDAwMDAwMURDMDAwMDAwMDAwMDYwMDAwMDgxCis6MTAxNjQwMDAwMDAwMDFFOTAwMDAwMDAxMDA1MzFFMjcwMDAwMDFEODNFCis6MTAxNjUwMDAwMDAwMDAwMTAwMjAyQzExMDAwMDAwMDAwMDAwMDAxRjBECis6MTAxNjYwMDAwMDI4MEEyMjAwMDAwMDAwMDAwMDAwMUYwMDI4MkEyQThCCis6MTAxNjcwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MzA2MjEwMDAwMDFEMTFECis6MTAxNjgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMjY1Cis6MTAxNjkwMDAwMDMwNEEyRjAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMThGCis6MTAxNkEwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEMwCis6MTAxNkIwMDAwMDAwMDAwMTAwMzAxRTJGMDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxNkMwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ2Cis6MTAxNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFFOUMwCis6MTAxNkUwMDAwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRTUwMDAwRkZGRjdECis6MTAxNkYwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMEYwMDI2MEUyM0VFCis6MTAxNzAwMDAwMDAwMDAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMEI2Cis6MTAxNzEwMDAwMDAwMDAwRjAwMjYxMjI0MDAwMDAwMDAwMDAwMDAwMDVFCis6MTAxNzIwMDAwMDIwMTQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMTgxMUVCCis6MTAxNzMwMDAwMDAwMDJCQjAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMEQ4Cis6MTAxNzQwMDAwMDAwMDAwMDAwMkYwMjJCMDAwMDAwMDAwMDAwMDAwMDNECis6MTAxNzUwMDAwQ0UwMDAwMDAwMDAwMUY4MDAwMDAwMTAwMDIyMTYyODM0Cis6MTAxNzYwMDAwMDAwMDAwMEZGRkYwMDAwMDAyODE2MjUwMDAwMDAwMDE4Cis6MTAxNzcwMDAwMDAwRkZGRjAwMjgxQTI5MDAwMDAwMDAwMDAwMDAwMDAwCis6MTAxNzgwMDAwMDI5NDhDNTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwQUIxCis6MTAxNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDJDMTEwMDAwMDAwMEVDCis6MTAxN0EwMDAwMDAwMDAxMDAwMjIxNjIzMDAwMDAwMDBGRkZGMDAwMEQwCis6MTAxN0IwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMEZGRkYwMDI4MUEyNDYyCis6MTAxN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4QzUwMDAwMDAwMEUzCis6MTAxN0QwMDAwMDAwMDAwMDAwNzMxNTAzMDAwMDAyMDUwMDAwMDAwMDc3Cis6MTAxN0UwMDAwMDIwMTgwNTAwMDAwMDAwMDAwMDAwMDAwMDczMTUyNDEwCis6MTAxN0YwMDAwMDAwMDIwNTAwMDAwMDAwMDAyRDE0QzUwMDAwMDAwMERDCis6MTAxODAwMDAwMDAwMDAwMDAwMzAwOEEyMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAxODEwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjE0Cis6MTAxODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDIwMDMwMDAwMDAwMDc1Cis6MTAxODMwMDAwMDAwMDAwMDAwODAyNDA0MDAwMDAwMDAwMDAwMDAwRkYxCis6MTAxODQwMDAwMDIxMDIyNTAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDdDCis6MTAxODUwMDAwMDAwMDY4OTAwMDAwMDAwMDAyQjE0MDUwMDAwMDAwMEI1Cis6MTAxODYwMDAwMDAwMDAwMTAwOTAxNjI1MDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxODcwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTg4Cis6MTAxODgwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDBCCis6MTAxODkwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMjI1NkE0Cis6MTAxOEEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEwMDI5NEEyMjE0Cis6MTAxOEIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDQ4Cis6MTAxOEMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDdBCis6MTAxOEQwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDM4Cis6MTAxOEUwMDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDA1Cis6MTAxOEYwMDAwMDAwMDAwMzAwMzg0QTIxMDAwMDAwMDAwMDAwQTFGQ0E1Cis6MTAxOTAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUU4Cis6MTAxOTEwMDAwMDAwMDAwMDAwMDBGRkZGNDAyODEyMjAwMDAwMDAwMDJGCis6MTAxOTIwMDAwMDAwMDAxMEMwMjExQTIwMDAwMDAwMDAwMDAwRkZGRjhFCis6MTAxOTMwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTYyMEVBCis6MTAxOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NDE0NjUwMDAwMDJCQkVECis6MTAxOTUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwMDAwMTUwCis6MTAxOTYwMDAwMDMzMDYyMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMUNCCis6MTAxOTcwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDIxOTgwCis6MTAxOTgwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAxOTkwMDAwQ0MwMDAwMDAwMDAwMjEyMDAwMDAwMDBDMDQwMDQwMDYzCis6MTAxOUEwMDAwMDAwMDAwMTAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0MjhFCis6MTAxOUIwMDAwMDAwMDAwMDAwNDAwNDBGMDAwMDAyMTMwMDAwMDAwMEJGCis6MTAxOUMwMDAwMDYwMDAwMDAwMDAwNjJFMDAwMDAwMDAwMDYwMDAwMDIzCis6MTAxOUQwMDAwMDAwMDY0MjAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNTIwCis6MTAxOUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxQTAwMDAwMDAwMEY2Cis6MTAxOUYwMDAwMDYwMDAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDhBCis6MTAxQTAwMDAwMDAwMDJCQjAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzE0Cis6MTAxQTEwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAxQTIwMDAwMDIwNDgwODAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRkU2Cis6MTAxQTMwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDIzMjg4Cis6MTAxQTQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0EwMDAwMDAwMEZCCis6MTAxQTUwMDAwMDQwMDAwMDAwMDAwMjM2OTUwMDAwMDAwMDIwNDQxMTA0Cis6MTAxQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkYwMDAwMDAwMDE2Cis6MTAxQTcwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAyMzYwMDAwMDAwMDQyCis6MTAxQTgwMDBDMDQwNDgwMDAwMDAwMjMzOTIwMDAwMDAwMDIwNDQxMUQyCis6MTAxQTkwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDFFCis6MTAxQUEwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjMzCis6MTAxQUIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMUJBCis6MTAxQUMwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDlBCis6MTAxQUQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUYzCis6MTAxQUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTY5Cis6MTAxQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA0MTEwMDAwMDJGQjc0Cis6MTAxQjAwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMEQwCis6MTAxQjEwMDAwMDYwMDAwMDAwMDAwNjJFMDAwMEEwMEMwMDIwNDQxMTEwCis6MTAxQjIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDhECis6MTAxQjMwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAxQjQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTg0MDIxMEEyMDg3Cis6MTAxQjUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyRjAyMjIwMDAwMDAwMDJGCis6MTAxQjYwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyNEMwMDAwMDAxNDI5Cis6MTAxQjcwMDAwMDIwMjIyRDAwMDAwMDAwMDAwODAxMDEwMDI5MjIyODc5Cis6MTAxQjgwMDAwMDAwMDAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMEMzCis6MTAxQjkwMDAwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxQkEwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEU1Cis6MTAxQkIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDI1MThBCis6MTAxQkMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxMDlBCis6MTAxQkQwMDAwMDYwMDQxMTAwMDAwMzE1M0Y4MDAwMDAwMDIwMDQxMTg0Cis6MTAxQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMkM5Cis6MTAxQkYwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0VGCis6MTAxQzAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEZCCis6MTAxQzEwMDAwMDAwMDI3QzAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEM0Cis6MTAxQzIwMDAwMDAwMDAwMTAwMjExRTI3MDAwMDAwMDAwMDAwMDAwMDRECis6MTAxQzMwMDAxNEUwMDAwMDAwMDAwMjZBMDAwMDAwMTIwMDIwMUUyREM3Cis6MTAxQzQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODFFMjcwMDAwMDAwMDI5Cis6MTAxQzUwMDAwMDAwMDAwMDAwMzQxQzI3MDAwMDAwMDAwMDAwMDAwMDBECis6MTAxQzYwMDAxMkMwMDAwMDAwMDAwMjVGMDAwMDAwMDAwMDIwMUMxMUY0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTUwMDAwMDAwMDUwCis6MTAxQzgwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNjIwMDAwMDAwMDI4Cis6MTAxQzkwMDAwMDIwMTQwNzAwMDAwMDAwMDAwMDAwMTIwMDIwMUUyRDhDCis6MTAxQ0EwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTFFMjcwMDAwMDAwMEJFCis6MTAxQ0IwMDAwMDAwMDAwMDAwMzQxQzQ3MDAwMDAwMDAwMDAwMDAwMDhECis6MTAxQ0MwMDAxMkMwMDAwMDAwMDAwMjY3MDAwMDAwMDAwMDIwMUMxMThDCis6MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMEVGCis6MTAxQ0UwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNkEwMDAwMDAwMEMwCis6MTAxQ0YwMDAwMDIwMTgwNzAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDQ1Cis6MTAxRDAwMDAwMDAwMDJDMTAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDIzCis6MTAxRDEwMDAwMDAwMDAwMDAwMzQyMDIzMDAwMDAwMDAwMDAwMDAwMDRDCis6MTAxRDIwMDAxMkMwMDAwMDAwMDAwMjcyMDAwMDAwMDAwMDM0MjA0NEQ1Cis6MTAxRDMwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3MTVFCis6MTAxRDQwMDAwMDAwMDAxNjAwNDA0ODExMDAwMDAyNzYwMDAwMDAxODU0Cis6MTAxRDUwMDAwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMDAwMDM0MjA0NERBCis6MTAxRDYwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3NTJBCis6MTAxRDcwMDAwMDAwMDAxNzAwNDA0ODExMDAwMDAyNzYwMDAwMDAxOTIyCis6MTAxRDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUM4Cis6MTAxRDkwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEM5Cis6MTAxREEwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTkwMDAwM0ZGRkI2Cis6MTAxREIwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEY3Cis6MTAxREMwMDAwMDAwMDI1NjAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMUI2Cis6MTAxREQwMDAwMDAwMDAxMDQwMjEwNjIwMDAwMDAwMDAwMDAwRkZGRjZFCis6MTAxREUwMDBDMDI4MEEyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDQyCis6MTAxREYwMDAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjAwMDAwMDAwMENCCis6MTAxRTAwMDAwMDAwMDAxMDQwMjExNjIwMDAwMDAwMDAwMDAwRkZGRjJECis6MTAxRTEwMDBDMDg4MUEyMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTRBCis6MTAxRTIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDM4Cis6MTAxRTMwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEEwMDAwMDAwMDM1Cis6MTAxRTQwMDAwMDYwMDAwMDAwMDAwNjJFMDAwMDAwMDBDMDYwMDAwMERFCis6MTAxRTUwMDAwMDAwMDJBMzAwMDAwMDA1MDAyMDBBMkQwMDAwMDAwMDgxCis6MTAxRTYwMDAwMDAwMDAwODAwMjIwQTIyMDAwMDAwMDAwMDAwMDAyQkYxCis6MTAxRTcwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMUMwMDIwMUUyRDc0Cis6MTAxRTgwMDAwMDAwMDAwMDAwMDA3MDAwMDAyODFFMjcwMDAwMDAwMDc1Cis6MTAxRTkwMDAwMDAwMDAwMDAwMzExQ0U2MDAwMDAwMDAwMDAwMDAyQUU1Cis6MTAxRUEwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMEMwMDIyMUEyNjVECis6MTAxRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMDBECis6MTAxRUMwMDAwMDAwMDAwMDA2RTAwMDAwMDAwMDAyOTIwMDAwMDAwMDk4Cis6MTAxRUQwMDAwMDIwMUMxMTAwMDAwMDAwMDAwMDAwMDAwMDIwMEMxMTc4Cis6MTAxRUUwMDAwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjMwMDAwMDAwMDRFCis6MTAxRUYwMDAwMDAwMDAxMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAxRjAwMDAwMDY5MUNFMjAwMDAwMTJGOTM4MDAwMDAwMDIwNDQxMUIyCis6MTAxRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDUyCis6MTAxRjIwMDA5NTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTAxRjMwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDU1Cis6MTAxRjQwMDAwMDAwMDI5RDAwMDAwMDAxMDAzMzNFMkYwMDAwMDAwMDUxCis6MTAxRjUwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDA5MjAwMDAwMENFCis6MTAxRjYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEQ0Cis6MTAxRjcwMDAwMDAwMDAwMDAwMDAwMDFDMDA0MDM2MjcwMDAwMDAwMEE4Cis6MTAxRjgwMDAwMDAwMDAwQ0MwMjIwQTIwMDAwMDAwMDAwMDAwMDAyOTEwCis6MTAxRjkwMDAwMDIwMzYyMjAwMDAwMDAwMDAwMDAwMjhDMDQwMzYyMDRCCis6MTAxRkEwMDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDc2Cis6MTAxRkIwMDAwMDAwMDAwOTAwMjA0ODExMDAwMDAwMDBBMTAwMDAwMEZFCis6MTAxRkMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMUMyCis6MTAxRkQwMDAwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMDc1Cis6MTAxRkUwMDAwMDAwMDAwMDAwMkMxQ0UzMDAwMDAwMDAwMDAwMDAyMUE1Cis6MTAxRkYwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjIwMDIwMUUyREQ3Cis6MTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQzFDRTQwMDAwMDAwMEE0Cis6MTAyMDEwMDAwMDAwMDAyMjAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyM0ZFCis6MTAyMDIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBBMzUxCis6MTAyMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDRGCis6MTAyMDQwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyNENDCis6MTAyMDUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwCis6MTAyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDFGCis6MTAyMDcwMDAwMDAwMDAyNDAwODAzNjI3MDAwMDAwMDAwMDAwMDAyMTNFCis6MTAyMDgwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyNDNCCis6MTAyMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTMwMDAwMDAwMDUwCis6MTAyMEEwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAwMDkwCis6MTAyMEIwMDAwMDMxMUNDNDAwMDAwMDAwMDAwMDAwMjQwMDgwMzYyNzBFCis6MTAyMEMwMDAwMDAwMDAwMDAwMDAwMDFBMDAyMDM2MjcwMDAwMDAwMDc5Cis6MTAyMEQwMDAwMDAwMDAxQjAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxNzUwCis6MTAyMEUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyNzM5Cis6MTAyMEYwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDJEQzJFCis6MTAyMTAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyRDkwMDAwMDAxQTlBCis6MTAyMTEwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMUIwMDIwMzYyOEE5Cis6MTAyMTIwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMDJECis6MTAyMTMwMDAwMDAwMDAwMjAwMjEwMjI3MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAyMTQwMDAxNEUwMDAwMDAwMDAwMkQ5MDAwMDAwMDMwMDIxMDIyNzczCis6MTAyMTUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDJEQ0FECis6MTAyMTYwMDAwMDAwMDAyMzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAyMTcwMDAwMDJFMDBFMTAwMDAwMDAwMDAwMDAwMDAwMkMwMDAwMDhFCis6MTAyMTgwMDAwMDAwMDJEQzAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMEU1Cis6MTAyMTkwMDAwMDAwMDAwMDAwMzEyMEExMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyMUEwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDAwNkMwMDAwMDUzCis6MTAyMUIwMDAwMDAwMDJEQzAwMDAwMDI0MDAyMDFFMkQwMDAwMDAwMEIyCis6MTAyMUMwMDAwMDAwMDAwMDAwMkUwMEUyMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyMUQwMDAwMkMwMDAwMDAwMDAwMkRDMDAwMDAwMjIwMDIwMUUyREQyCis6MTAyMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMERDCis6MTAyMUYwMDAwMDAwMDAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAyMjAwMDAwNkMwMDAwMDAwMDAwMkRDMDAwMDAwMDAwMDYwMDAwMENBCis6MTAyMjEwMDAwMDAwMDY2NTAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCNTNDCis6MTAyMjIwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAwMDhFCis6MTAyMjMwMDAwMDYwMDAwMDAwMDAwMkI1MDAwMDAwMDAwMDYwMDAwMDI3Cis6MTAyMjQwMDAwMDAwMDY1QzAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTBDCis6MTAyMjUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTcwMDAwMDAwMDc1Cis6MTAyMjYwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMUEwMDIwMUUyREM5Cis6MTAyMjcwMDAwMDAwMDAwMDAwMDAwMDFCMDA4MDIyMkQwMDAwMDAwMDc0Cis6MTAyMjgwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMERCCis6MTAyMjkwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzU2Cis6MTAyMkEwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMEI3Cis6MTAyMkIwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAxMDE2Cis6MTAyMkMwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDk2Cis6MTAyMkQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDhFCis6MTAyMkUwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxMDA1Cis6MTAyMkYwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzgzCis6MTAyMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMDVDCis6MTAyMzEwMDAwMDAwMDAwMDAwMjk0ODQ3MDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAyMzIwMDAwMDMxMUNBMzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzQ2Cis6MTAyMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMEE1Cis6MTAyMzQwMDAwMDAwMDAwMDAwMzExQ0ExMDAwMDAwMDAwMDAwMDAxMDhGCis6MTAyMzUwMDAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg0NzVFCis6MTAyMzYwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMEZBCis6MTAyMzcwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAwMDAwRkZGRjRBCis6MTAyMzgwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzYyCis6MTAyMzkwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMENDCis6MTAyM0EwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDAwMDAwRkZGRjFDCis6MTAyM0IwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwN0QyCis6MTAyM0MwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDlBCis6MTAyM0QwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMTA0Cis6MTAyM0UwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMzMDhBMkMzCis6MTAyM0YwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDZCCis6MTAyNDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyNDEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzUzCis6MTAyNDIwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDM1Cis6MTAyNDMwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMUEzCis6MTAyNDQwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMwMDhBMjY1Cis6MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDBBCis6MTAyNDYwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAyNDcwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzcwCis6MTAyNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDM3Cis6MTAyNDkwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMENDCis6MTAyNEEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDM4MDhDNUFFCis6MTAyNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDA4NDEwMDAwMDAwMEEzCis6MTAyNEMwMDAwMDAwMDAwMTAwMjIwQTIyMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNEQwMDAwMDMzMDhBMjAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMkFECis6MTAyNEUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDc3Cis6MTAyNEYwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxN0VDCis6MTAyNTAwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDg4Cis6MTAyNTEwMDAwMDAwMDMxOEZGRkZGRkVGMDAyODA2MjEwMDAwMDAwMDY1Cis6MTAyNTIwMDAwMDAwMDAxNDAwMjAyMjJEMDAwMDAwMDAwMDAwRjhFMDUwCis6MTAyNTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwMUIzCis6MTAyNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDEwMDAwMDAwMEI4Cis6MTAyNTUwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAyNTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDgwNDgxMTA3Cis6MTAyNTcwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDdCCis6MTAyNTgwMDA5NzAwMDAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAyNTkwMDBDMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAzCis6MTAyNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEIyCis6MTAyNUIwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTAyNUMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUQxCis6MTAyNUQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEQzCis6MTAyNUUwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAyNUYwMDAwMEEwMDAwQTAwMDAwMDAwOTcwMDAwMDAwMDIwNDQxMTI1Cis6MTAyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDUxCis6MTAyNjEwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEJCCis6MTAyNjIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTNFCis6MTAyNjMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDcyCis6MTAyNjQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTAyNjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDZFCis6MTAyNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEMwCis6MTAyNjcwMDA5NzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyNjgwMDAwMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMUQyCis6MTAyNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEMxCis6MTAyNkEwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyNkIwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUUwCis6MTAyNkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEUyCis6MTAyNkQwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTAyNkUwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMEU1Cis6MTAyNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDMwCis6MTAyNzAwMDAwMDAwMjI1NzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0Q4Cis6MTAyNzEwMDBDMDQ4NEEyMDAwMDAwMDAwMDAwMDIyNUQwMDIwNDQxMTUzCis6MTAyNzIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDYxCis6MTAyNzMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDIwMDAwMDAwMEYxCis6MTAyNzQwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMUFFCis6MTAyNzUwMDAwMDAwMDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMEQyCis6MTAyNzYwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyNzcwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTFECis6MTAyNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjIwMDAwMDAwMEY2Cis6MTAyNzkwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyN0EwMDA0MDIwNDgwMDAwMDAwMDAwMDAwMDAwMDE0MDMwNEEyMEE2Cis6MTAyN0IwMDAwMDAwMDAwMDAwMDAwMDAyQzAzMDRBMjAwMDAwMDAwMEJECis6MTAyN0MwMDAwMDAwMDAwMTAwNTMwQTIyMDAwMDAzNEIwMDAwMDAzRkZDCis6MTAyN0QwMDBDMDI4MEEyMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUYxCis6MTAyN0UwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDZGCis6MTAyN0YwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxODMzCis6MTAyODAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTdDCis6MTAyODEwMDAwMDAwMDY4QTAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMEM0Cis6MTAyODIwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzNTQwMDAwMDAxNDQ5Cis6MTAyODMwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDc5Cis6MTAyODQwMDAwMDAwMDM2NDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDdDCis6MTAyODUwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTJBNDM4Cis6MTAyODYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwMjQ5Cis6MTAyODcwMDAwMDAwMDM2RTAwMDAyMTAwMDAyMDQ0MTEwMDAwMDAwMDUxCis6MTAyODgwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTAyODkwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEU4Cis6MTAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMEUwCis6MTAyOEIwMDAwMDAwMDAwNDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEMxCis6MTAyOEMwMDAwQ0MwMDAwMDAwMDAwMzZBMDAwMDIwMTAwMDIwNDQxMTJBCis6MTAyOEQwMDAwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMEZGCis6MTAyOEUwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDJDCis6MTAyOEYwMDAwMDQwNDgwMjAwMDAwMzVGMDAwMDAwMjgwMDJGMDIyMjcxCis6MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDVCRDM5Cis6MTAyOTEwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEZCCis6MTAyOTIwMDAwMDQwNDgwMjAwMDAwMzVGMDAwMDAwMkMwMDIwMzYyNjEzCis6MTAyOTMwMDAwMDAwMDAwMDAwMDAwMDQ5MDAyMDE4MTEwMDAwMDAwMDA1Cis6MTAyOTQwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMUNFCis6MTAyOTUwMDAwMDMzMUEyNjAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNkFECis6MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDM3MDI4Cis6MTAyOTcwMDAwMDAwMDAyQzAwODAxQTJEMDAwMDAwMDAwMDAwMDAzRjI1Cis6MTAyOTgwMDBDMDI4MEEyMDAwMDAwMDAwMDAwMDAwMTUwMDJGMDIyMkNECis6MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDM4NkMyCis6MTAyOUEwMDAwMDAwMDAwNjAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyOUIwMDAwQ0UwMDAwMDAwMDAwM0IxMDAwMDAwMTYwMDJGMDIyMjBFCis6MTAyOUMwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNCNTYzCis6MTAyOUQwMDAwMDAwMDAyMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAyOUUwMDAwQ0UwMDAwMDAwMDAwMzlDMDAwMDAwMEYwMDJGMDIyMkZBCis6MTAyOUYwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNBODQwCis6MTAyQTAwMDAwMDAwMDAxMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAyQTEwMDAwQ0UwMDAwMDAwMDAwM0E4MDAwMDAwMUUwMDJGMDIyMkFFCis6MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDM5MDI3Cis6MTAyQTMwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMERCCis6MTAyQTQwMDAwMDQwNDgwMjAwMDAwMDAwMDgwMDAwMDAwMDI5MEEyMjlGCis6MTAyQTUwMDAwMDAwMDAwMDAwMDAwMDAzNDAyMTBFMjAwMDAwMDAwMEU0Cis6MTAyQTYwMDAwMDAwMDAwQ0MwMjExMjIwMDAwMDAwMDAwMDA4MDAwMDNGCis6MTAyQTcwMDAwMDI4MTIyNDAwMDAwMDAwMDAwMDAwMTRDMDIyMTYyMENDCis6MTAyQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTE0QTQwMDAwMDAwMDY1Cis6MTAyQTkwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyQUEwMDAwMDI5NDhBMjAwMDAwMDAwMDAwMEExRkUwMDIwNDQxMUZGCis6MTAyQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDMwMDAwMDAwMDhCCis6MTAyQUMwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTBGCis6MTAyQUQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMUVGCis6MTAyQUUwMDAwMDAwMDAwMDAwMDAwMDE2MDAyMDQ4MTEwMDAwMDAwMDU3Cis6MTAyQUYwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2OEEwMDAwMDAxNTVFCis6MTAyQjAwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDdFCis6MTAyQjEwMDAwMDAwMDM5MjAwMDAyMTBFMDAyMDQ0MTEwMDAwMDAwMDdDCis6MTAyQjIwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyQjMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMUIyCis6MTAyQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMEZCCis6MTAyQjUwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTdFCis6MTAyQjYwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTVFCis6MTAyQjcwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDQ4MTEwMDAwMDAwMEM1Cis6MTAyQjgwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2OEEwMDAwMDAwM0RGCis6MTAyQjkwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMEVFCis6MTAyQkEwMDAwMDAwMDM5RTAwMDAyMTA4MDAyMDQ0MTEwMDAwMDAwMEU2Cis6MTAyQkIwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAyQkMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTIyCis6MTAyQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMDZCCis6MTAyQkUwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDJBCis6MTAyQkYwMDAwMDIwNDgwMjAwMDAwMDAwODAwMDAwMDAwMDIwNDQxMTc2Cis6MTAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDRCCis6MTAyQzEwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMEFFCis6MTAyQzIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMEZCCis6MTAyQzMwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNBRTBGCis6MTAyQzQwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMjAxMDE0Cis6MTAyQzUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTA2Cis6MTAyQzYwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMEE4Cis6MTAyQzcwMDAwMDAwMDAwNjAwNDA0ODExMDAwMDAwMDAwMDAwMjAxMDg1Cis6MTAyQzgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMUQ2Cis6MTAyQzkwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDc4Cis6MTAyQ0EwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNkUwMDAwMDAwMEU0Cis6MTAyQ0IwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDgwMEVDCis6MTAyQ0MwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDE4Cis6MTAyQ0QwMDAwMDAwMDAxRDAwMjEwMjIzMDAwMDAwMDAwMDAwMDAwMDkxCis6MTAyQ0UwMDAxNEUwMDAwMDAwMDAwM0NFODEwMDAwMDAwMDIwNDQxMTI5Cis6MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDVBCis6MTAyRDAwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxODFECis6MTAyRDEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTY3Cis6MTAyRDIwMDAwMDAwMDY4QTAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMEFGCis6MTAyRDMwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzQzAwMDAwMjEwMEJCCis6MTAyRDQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMkE0Cis6MTAyRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDA4Cis6MTAyRDYwMDBCQUJFQ0FGRTAwMjA0ODExMDAwMDAwMDBDQUZFQkFCRTZBCis6MTAyRDcwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIwMTAwMDIwNDQxMTM1Cis6MTAyRDgwMDAwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDRBCis6MTAyRDkwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNDc0Cis6MTAyREEwMDAwMDQwNDgxMTAwMDAwMDAwMDAwMDIxNzAwMDIwNDQxMTg0Cis6MTAyREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMEE5Cis6MTAyREMwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDA4MTAwMDAwMDE3Cis6MTAyREQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMEEwMDIwNDgxMUZCCis6MTAyREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTAwMDAwMDAwMEIzCis6MTAyREYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzRDM4QzAwMDAwMDlECis6MTAyRTAwMDAwMDIwNDQxMTAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMTc0Cis6MTAyRTEwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAyRTIwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwM0ZGRkVBCis6MTAyRTMwMDA0MDI4MEEyMDAwMDAwMDAwODAwMDAwMDA0MDI4MEUyMEVBCis6MTAyRTQwMDAwMDAwMDAwMDQwMDAwMDAwQzAyODEyMjAwMDAwMDAwMDI4Cis6MTAyRTUwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2OEEwMDAwMDAwMDBECis6MTAyRTYwMDAwMDIwMTQxMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyM0NBCis6MTAyRTcwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDNFMUEyCis6MTAyRTgwMDAwMDAwMDAwMEMwNDAxODAwMDAwMDAzRTQwMDAwM0ZGRjA1Cis6MTAyRTkwMDBDMDI4MUEyMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNjM3Cis6MTAyRUEwMDAwMDAwMDY4QTAwMDAwMDAwMDAyMDE4MTAwMDAwMDAwMDRBCis6MTAyRUIwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMEJECis6MTAyRUMwMDAwQ0MwMDAwMDAwMDAwM0U3MDAwMDAwMDBDMDQwMUMwMDMwCis6MTAyRUQwMDAwMDAwMDNFQTAwMDAzRkZGQzAyODFFMjAwMDAwMDAwMEExCis6MTAyRUUwMDAwMDA0MDAwMDAwNjk0NjI3MDAwMDA2OEEwMDAwMDAwMDc4Cis6MTAyRUYwMDAwMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDQwMjIwCis6MTAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODIwQzUwMDAwMDAwMEI0Cis6MTAyRjEwMDAwMDAwMDAwMDAwNDk0OEU4MDAwMDAwMDBBNTgwMDAwMDEzCis6MTAyRjIwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMDIwMDAwMDIwMEMxMTBCCis6MTAyRjMwMDAwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTEwMDAwMDQxMjQzCis6MTAyRjQwMDAwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDAwMDAwMDAwMDFCCis6MTAyRjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA0MDIwNDgwMEExCis6MTAyRjYwMDAwMDAwMDAwMDAwMDAwMDFGQzAyMTAyMjAwMDAwMDAwMDNGCis6MTAyRjcwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzRjcwMDAwMjAxMDUzCis6MTAyRjgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMUQzCis6MTAyRjkwMDAwMDAwMDAwMDAwMDBGRkZGQzA0ODEyMjAwMDAwMDNGRkY3Cis6MTAyRkEwMDBBNzgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwQTAwMDIxCis6MTAyRkIwMDAwMDIwMEMxMTAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTlDCis6MTAyRkMwMDAwMDAwMDQxMjAwMDAwMDAwMDAyMDQ0MDIwMDAwMDAwMDg1Cis6MTAyRkQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAyRkUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEZGRkZDMDI4MTIyMEExCis6MTAyRkYwMDAwMDAwMDAwMDgzMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ5Cis6MTAzMDAwMDAwMDAwMDAwMDAwMzA0ODgzMDAwMDAwMDA4NDAwMDAwMDQxCis6MTAzMDEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDEzCis6MTAzMDIwMDAwMDAwMDAwMDAwMDAwMDAwMUQwMDAwMDAwMDAwMDAwMDgzCis6MTAzMDMwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDA0MTIwMDAwMDAwMDQyCis6MTAzMDQwMDBDMDQwMDQwMDAwMDAwMDAxQTk4MDAwMDAwMDIwMDgxMTE5Cis6MTAzMDUwMDAwMDAwMDAwMDAwMDBDMDAwMDA0MDBDMTEwMDAwMDNGQTU2Cis6MTAzMDYwMDBBQjgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjhFMDI0Cis6MTAzMDcwMDAwMDQwMEMxMTAwMDAwM0ZBQUQ4MDAwMDAwMDIwMDgxMTkwCis6MTAzMDgwMDAwMDAwMDAwMDAwMDBGODgwMDA0MDBDMTEwMDAwMDNGQTZFCis6MTAzMDkwMDBCMzgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjNGQ0Q1Cis6MTAzMEEwMDAwMDQwMEMxMTAwMDAwM0ZBQUY4MDAwMDAwMDIwMDgxMTVFCis6MTAzMEIwMDAwMDAwMDAwMDAwMDBFMDAwMDA0MDBDMTEwMDAwMDNGQUQ2Cis6MTAzMEMwMDBCMTgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjAwMEE2Cis6MTAzMEQwMDAwMDQwMEMxMTAwMDAwM0ZBODMwMDAwMDAwMDIwNDQxMTlFCis6MTAzMEUwMDAwMDAwMDAwMDAwMDAyMTQ4MDAyMDQ4MTEwMDAwMDAwMEZFCis6MTAzMEYwMDA4NDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTAzMTAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMDAwMDdBCis6MTAzMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDJGCis6MTAzMTIwMDAwMTE4MjAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAzMTMwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDhBCis6MTAzMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEQ1Cis6MTAzMTUwMDAwMjE4QTAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAzMTYwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDVBCis6MTAzMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEE1Cis6MTAzMTgwMDAwMzE4QzAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAzMTkwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDJBCis6MTAzMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDc1Cis6MTAzMUIwMDAwNDE4RjhFMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAzMUMwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMEZBCis6MTAzMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDQ1Cis6MTAzMUUwMDAwNTE4Rjg4MEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAzMUYwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMENBCis6MTAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDE0Cis6MTAzMjEwMDAwNjE4RTAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTAzMjIwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDk5Cis6MTAzMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEU0Cis6MTAzMjQwMDAwNzE4RjAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAzMjUwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDY5Cis6MTAzMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEI0Cis6MTAzMjcwMDAwODE4RjNGQ0MwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAzMjgwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDM5Cis6MTAzMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDg0Cis6MTAzMkEwMDAwMDAwMDAzMDAwMjAwQTJEMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAzMkIwMDBDMDI5MEM0MDAwMDAwMDAwMDAwMDAwMzAwMDIwMzYyMzMwCis6MTAzMkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDFBCis6MTAzMkQwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA4NjAwMDAwMEJFCis6MTAzMkUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMUUwCis6MTAzMkYwMDAwMDAwMDAwMDg1MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDE0Cis6MTAzMzAwMDAwMDAwMDAwMDAwNDA0ODAxMDAwMDAwMDAwMDAwMjE3Qzk3Cis6MTAzMzEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDEwCis6MTAzMzIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDc1Cis6MTAzMzMwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA4MTAwMDAwMEU0Cis6MTAzMzQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMThFCis6MTAzMzUwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDg1Cis6MTAzMzYwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDAwMDA0MjE3RkEyCis6MTAzMzcwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMUYwMDIxMDIzMDk2Cis6MTAzMzgwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDAwMDY5Cis6MTAzMzkwMDAwMDAwMDAwMDAwNDA0QzAyMDAwMDA0NDgwMDAwMDAwMDUzCis6MTAzM0EwMDBDMDIwMEMwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTAwMDQxCis6MTAzM0IwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE0MDAwMDAwMDAwMDE5Cis6MTAzM0MwMDAwMDAwMDAwMEMwMjAxODAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAzM0QwMDBDMDIwMUMwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MEEyMTFGCis6MTAzM0UwMDAwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMDQ1Cis6MTAzM0YwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NTYwMDAwMDAwMDg3Cis6MTAzNDAwMDBDMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMEE1Cis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMDEwMDAyODBBMjMwMDAwMDAwMDQ3Cis6MTAzNDIwMDAwMDAwMDAxMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAzNDMwMDAwQ0UwMDAwMDAwMDAwNDVFODEwMDAwMDAwMDIwNDQxMTQ4Cis6MTAzNDQwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAyCis6MTAzNDUwMDAwMDA0MDAwMDAwNjk0NjI0MDAwMDA2OEEwMDAwMDAwMDA1Cis6MTAzNDYwMDAwMDQwMDAwMDAwMDAwNDYzODEwMDAwMDAwMDIwNDQxMUJGCis6MTAzNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEQzCis6MTAzNDgwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAzNDkwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwNTEzCis6MTAzNEEwMDAwMDAwMDY4RjAwMDAwMDAwMDAyODI0RjAwMDAwMDAwMDRCCis6MTAzNEIwMDAwMDAwMDAwNzAwMjgwQTIzMDAwMDAwMDAwMDAwMDAwMUFGCis6MTAzNEMwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEJGCis6MTAzNEQwMDAwMDAwMDQ2QTAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDg2Cis6MTAzNEUwMDAwMDAwMDAwMDA0RTAwMDAwMDAwMDA0ODMwMDAwMDAwMDcxCis6MTAzNEYwMDAwMDQwMDAwMDAwMDAwNDkwMDAwMDAwMDIwMDJGMDIyMkEzCis6MTAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ2RjVFCis6MTAzNTEwMDAwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMEIzCis6MTAzNTIwMDAwMkUwMDAwMDAwMDAwNDgzMDAwMDAwMDAwMDQwMDAwMEYyCis6MTAzNTMwMDAwMDAwMDQ5MDAwMDAwMDAzMDAyRjAyMjIwMDAwMDAwMEExCis6MTAzNTQwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NzQwMDAwMDAwMDE5Cis6MTAzNTUwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDg3Cis6MTAzNTYwMDAwMDAwMDQ4MzAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5MDAwCis6MTAzNTcwMDAwMDAwMDAwNDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAzNTgwMDAwQUUwMDAwMDAwMDAwNDc5MDAwMDAwMDAwMDJGMDBDOURDCis6MTAzNTkwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ4M0JBCis6MTAzNUEwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OTAwMDAwMDAwNTQyCis6MTAzNUIwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMENFCis6MTAzNUMwMDAwMDAwMDQ3RTAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDgxCis6MTAzNUQwMDAwMDAwMDAwMDA2RTAwMDAwMDAwMDA0ODMwMDAwMDAwMDdFCis6MTAzNUUwMDAwMDQwMDAwMDAwMDAwNDkwMDAwMDAwMDYwMDJGMDIyMkFFCis6MTAzNUYwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ4MzVBCis6MTAzNjAwMDAwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMEMyCis6MTAzNjEwMDAwOEUwMDAwMDAwMDAwNDgzMDAwMDAwMDAwMDQwMDAwMEZCCis6MTAzNjIwMDAwMDAwMDQ5MDAwMDA3RjAwMDAyODBBMjEwMDAwMDAwMDM0Cis6MTAzNjMwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAzNjQwMDAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDIxMEEyMzNBCis6MTAzNjUwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDQ4RDA1Cis6MTAzNjYwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDVCCis6MTAzNjcwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEZBCis6MTAzNjgwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDEyCis6MTAzNjkwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDAwMDAwMDAwMDUxCis6MTAzNkEwMDBDMDIwNDQwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDE2Cis6MTAzNkIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMEMyCis6MTAzNkMwMDAwMDAwN0YwMDAwMjgwQTIxMDAwMDAwMDAwMDAwNDUwMEUzCis6MTAzNkQwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEFECis6MTAzNkUwMDAwMDAwMDQ5NjAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDYwCis6MTAzNkYwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTAzNzAwMDBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNEMwODI1Cis6MTAzNzEwMDAwMDAwMDQ1NjAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDY3Cis6MTAzNzIwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDAwMDAwMDAxMUU5Cis6MTAzNzMwMDA0MDIxMTIyMDAwMDAwMDAwMDAwMDAwMTI0MDIxMTYyMDRECis6MTAzNzQwMDAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDdBCis6MTAzNzUwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAzNzYwMDAwMDIxMDIyNTAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDFECis6MTAzNzcwMDAwMDAwMDRBMDAwMDQwMDAwQzA0OTRBMjAwMDAwMDRBMTg5Cis6MTAzNzgwMDBGRkZCRkZGRkMwMjg0QTIwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAzNzkwMDAwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMEVGCis6MTAzN0EwMDAwMDAwMDRBRDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDQwCis6MTAzN0IwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAzN0MwMDAwMDIxMDIyNDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMERFCis6MTAzN0QwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEYzCis6MTAzN0UwMDAwMDAwMDAwQzAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTAzN0YwMDAwMDIwMDAxMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEM1Cis6MTAzODAwMDAwMDAwMDRBOUEwMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEY2Cis6MTAzODEwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDA4MTAwMDAwMDRFCis6MTAzODIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDQwMDIwNDgxMUE2Cis6MTAzODMwMDAwMDAwMDAwMDAwMDAyMTZCMDAyMDQ0MTEwMDAwMDAwMDg3Cis6MTAzODQwMDAwMDAwMDAwMEMwMjA0ODEwMDAwMDAwMDA4MTAwMDAwMEJGCis6MTAzODUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDUwMDIwNDgxMTc1Cis6MTAzODYwMDAwMDAwMDAwMDAwMDAyMTZDMDAyMDQ0MTEwMDAwMDAwMDU2Cis6MTAzODcwMDAwMDAwMDAwMEMwMjA0ODEwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAzODgwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEY3Cis6MTAzODkwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDRBNzNECis6MTAzOEEwMDAwMDAwMDAwMEMwMjEwQTIwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAzOEIwMDAxNEMwMDAwMDAwMDAwNEMwODEwMDAwMDAwMDIwNDQxMTdBCis6MTAzOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDdGCis6MTAzOEQwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAzOEUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDYwNDgwMDQ4Cis6MTAzOEYwMDAwMDAwMDY4RjAwMDAwMDAwMDA0MDAwMDAwMDAwMDRDNDJCCis6MTAzOTAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUMwCis6MTAzOTEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDAwMDBDMDI5NDYyMERCCis6MTAzOTIwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDY4QUU3Cis6MTAzOTMwMDAwMDAwMDAwMTAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAzOTQwMDAxNEMwMDAwMDAwMDAwNENCMDAwMDIxNjkwMDIwNDQxMUQ1Cis6MTAzOTUwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDNGCis6MTAzOTYwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAzOTcwMDAwMDIwNDgxMDAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMUY2Cis6MTAzOTgwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ0MDAwMDAwMDAwMDEzCis6MTAzOTkwMDAwMDAwMDAwMEMwNDA0ODEwMDAwMDAwMDA4MTAwMDAwMDRFCis6MTAzOUEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTI4Cis6MTAzOUIwMDAwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDc5Cis6MTAzOUMwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTUyCis6MTAzOUQwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMDAwMDIxMDIzMDRGCis6MTAzOUUwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRDRDMyCis6MTAzOUYwMDAwMDAwMjE4MDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEIxCis6MTAzQTAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMEFFCis6MTAzQTEwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDdFCis6MTAzQTIwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTAzQTMwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDMwMDMzM0UyRjlCCis6MTAzQTQwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMTAyMjEwMDAwMDAwMDMxCis6MTAzQTUwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDA0RkQwMDAwMDAyQzQ1Cis6MTAzQTYwMDAwMDIwMEEyRDAwMDAwMDAwMDAwNDAwMDAxOEUwMEMxMUU2Cis6MTAzQTcwMDAwMDAwMDRFQzAwMDAwMDAxMDAzMzNFMkYwMDAwMDAwMEI1Cis6MTAzQTgwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzQTkwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzUxCis6MTAzQUEwMDAwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIwMDAwMDAwMEIyCis6MTAzQUIwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAzQUMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMUNGCis6MTAzQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDdDCis6MTAzQUUwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODYzCis6MTAzQUYwMDAwMDMwMEEyMjAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDQyCis6MTAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwRDhDMDQ4MDAwMDAwMDRFMEYxCis6MTAzQjEwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTAzQjIwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwM0MwCis6MTAzQjMwMDAwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIwMDAwMDAwMDIxCis6MTAzQjQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAzQjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMkQwMDIwMTIyREIxCis6MTAzQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTBDODMwMDAwMDAwMDlECis6MTAzQjcwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTAzQjgwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzYwCis6MTAzQjkwMDAwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIwMDAwMDAwMEMxCis6MTAzQkEwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAzQkIwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMTEwMDIxMDIyNDg1Cis6MTAzQkMwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDAwMDIxCis6MTAzQkQwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0QTcwMDAwMDAyQ0NFCis6MTAzQkUwMDBDMDIwMzYyMDAwMDAwMDAwMDAwMDAwMkRDMDQwMzYyMDFDCis6MTAzQkYwMDAwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMjEwMDAwMDAwMDcyCis6MTAzQzAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA1MDIwMDAwMDAwMEQ5Cis6MTAzQzEwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDBEOTAwMDAwMDYwCis6MTAzQzIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMThGCis6MTAzQzMwMDBCNTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMjAwMDNBCis6MTAzQzQwMDAwMDIwNDgxMTAwMDAwMDAwQjYwMDAwMDAwMDIwNDQxMUQwCis6MTAzQzUwMDAwMDAwMDAwMDAwMDBBMDAwMDAyMDQ4MTEwMDAwMDAwMDRCCis6MTAzQzYwMDBCNzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwQzAwMDY4Cis6MTAzQzcwMDAwMDIwNDgxMTAwMDAwMDAwQjgwMDAwMDAwMDIwNDQxMTlFCis6MTAzQzgwMDAwMDAwMDAwMDAwMDBGOEUwMDAyMDQ4MTEwMDAwMDAwMEUzCis6MTAzQzkwMDBCOTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjg4MDdFCis6MTAzQ0EwMDAwMDIwNDgxMTAwMDAwMDAwQkEwMDAwMDAwMDIwNDQxMTZDCis6MTAzQ0IwMDAwMDAwMDAwMDAwMDBFMDAwMDAyMDQ4MTEwMDAwMDAwMEFCCis6MTAzQ0MwMDBCQjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjAwMEQ0Cis6MTAzQ0QwMDAwMDIwNDgxMTAwMDAwMDAwQkMwMDAwMDAwMDIwNDQxMTNBCis6MTAzQ0UwMDAwMDAwMDAwMDAwMDBGM0ZDMDAyMDQ4MTEwMDAwMDAwMDZDCis6MTAzQ0YwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMkNDCis6MTAzRDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwRkYwMDI4MEUzMEQ1Cis6MTAzRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjMwMDAwMDAwMDRGCis6MTAzRDIwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1MTYwMDAwMDAwMEFDCis6MTAzRDMwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEM3Cis6MTAzRDQwMDAwMDAwMDUyQjAwMDAwMDAwMDAyMDBDMTEwMDAwMDAwMDA2Cis6MTAzRDUwMDAwMDAwMDAxQzAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyQkEzCis6MTAzRDYwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjkwMDIwMzYyMzM4Cis6MTAzRDcwMDAwMDAwMDAwMDAwMDAwMDI4MDAyMDM2MjMwMDAwMDAwMEEyCis6MTAzRDgwMDAwMDAwMDAxNzAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNTdFCis6MTAzRDkwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjYwMDIwMzYyMzBCCis6MTAzREEwMDAwMDAwMDAwMDAwMDAwMDE1MDAyMDM2MjMwMDAwMDAwMDg1Cis6MTAzREIwMDAwMDAwMDAxNjAwMjAzNjIzMDAwMDAwMDBGRkZGRTAwMDk2Cis6MTAzREMwMDAwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMjEwMDIwMzYyMzFDCis6MTAzREQwMDAwMDAwMDAwMDAwMDAwMDIyMDAyMDM2MjMwMDAwMDAwMDQ4Cis6MTAzREUwMDAwMDAwMUZGRjAwMjAwQzExMDAwMDAwMDAwMDAwMDAyMzU1Cis6MTAzREYwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjQwMDIwMzYyM0FECis6MTAzRTAwMDAwMDAwMDAwMEYxRkZGRkZGMDAyODNBMkUwMDAwMDAwMDM0Cis6MTAzRTEwMDAwMDAwMDAxQUMwMjIwRTIwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTAzRTIwMDAwMDI5Mzg2RTAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUNECis6MTAzRTMwMDAwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDAzCis6MTAzRTQwMDAwMDAwMDAyQTQwMjAzNjIwMDAwMDAwMDA4NzAwMDAwMDBCCis6MTAzRTUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEM1Cis6MTAzRTYwMDAwMDAwMDAwMDAwMDBBMUY0MDAyMDQ0MTEwMDAwMDAwMDQ4Cis6MTAzRTcwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAwMDAwMDAwMENBCis6MTAzRTgwMDAwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMzAwMDIwMzYyMzRDCis6MTAzRTkwMDAwMDAwMDAwMDlEMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDEwCis6MTAzRUEwMDAwMDAwMDAxRjQwMjE0QTIwMDAwMDAwMDA5NjAwMDAwMDkyCis6MTAzRUIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDY1Cis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDA2Cis6MTAzRUQwMDAwMDAwMDAwMEMwMjAxMDAwMDAwMDAwMDAwMDAwMDAxRkQzCis6MTAzRUUwMDAwMDIxMTYyNDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEEzCis6MTAzRUYwMDAwMDAwMDAwMDAwMDAwMDFEMDAyMDM2MjMwMDAwMDAwMDJDCis6MTAzRjAwMDAwMDAwMDAwMzAwMjgxRTIzMDAwMDAwMDAwMDAwMDAwODNECis6MTAzRjEwMDAwMDIyMjIyMzAwMDAwMDAwRkZGRkYwMDAwMDI4MjIyOERBCis6MTAzRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTIwRTgwMDAwMDAwMDYwCis6MTAzRjMwMDAwMDAwMDAxRjAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxOENDCis6MTAzRjQwMDAwMDIxMUUyMzAwMDAwMDAwMDAwMDAwMjAwMDIwMzYyNzcyCis6MTAzRjUwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjE2MjQwMDAwMDAwMDAzCis6MTAzRjYwMDAwMDAwMDAwMDAwMzAxNEE4MDAwMDAwMDAwMDAwMDAxRTQ3Cis6MTAzRjcwMDAwMDIwMzYyNTAwMDAwMDAwMDAwMDAwMDMwMDIxMUEyNDY0Cis6MTAzRjgwMDAwMDAwMDAwMDEwMDAwMDAwMDAyODFBMjYwMDAwMDAwMEI5Cis6MTAzRjkwMDBFRkZGRkZGRjAwMjgzQTJFMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAzRkEwMDAwMDQ5MzhDRTAwMDAwNjc4MDAwMDAwMDE0MDI4MEEyMEIxCis6MTAzRkIwMDAwMDAwMDAwMDAwMDAwMDA2NDAyODBFMjAwMDAwMDAwMDY1Cis6MTAzRkMwMDAwMDAwMDMwMEMwMjgxMjIwMDAwMDAwMDAwMDAwMDAwOENDCis6MTAzRkQwMDAwMDIxMTIyNDAwMDAwMDAwMDAwMDAwMDBDMDIwMTYyMDc0Cis6MTAzRkUwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDFBMjAwMDAwMDAwMEI3Cis6MTAzRkYwMDAwMDAwMDAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0MDAwMDAxNEMwMDAwMDAwMDAwNTYzODEwMDAwMDAwMDIwNDQxMTdFCis6MTA0MDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDI2Cis6MTA0MDIwMDAwMDAwMjI1ODAwMzAwQTI0MDAwMDAwMDAwMDA0MDAwMEI0Cis6MTA0MDMwMDAwMDY5NDYyMjAwMDAwNjhBMDAwMDIxNjkwMDIwNDQxMTIwCis6MTA0MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAzCis6MTA0MDUwMDAwMDAyMDAwMDAwMjk0QTI2MDAwMDAwMDAwMDAwMDAwMEM1Cis6MTA0MDYwMDAwMDIwNDgxMDAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTFGCis6MTA0MDcwMDAwMDAwMDAwMDAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMEVBCis6MTA0MDgwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NkIwMDAwMDAwMEY0Cis6MTA0MDkwMDBDMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMDE0Cis6MTA0MEEwMDAwMDAwMDU3OTAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMDNDCis6MTA0MEIwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NkI4MTAwMDAwMDQzCis6MTA0MEMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAxCis6MTA0MEQwMDAwMDAwMDAwMDAwMDAyMjU4MDAzMDBBMjQwMDAwMDAwMDA4Cis6MTA0MEUwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2OEEwMDAwMDAwMDZCCis6MTA0MEYwMDBDMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMEI0Cis6MTA0MTAwMDAwMDAwMDU3OTAwMDAwMDAwMDAyRjAyMjMwMDAwMDAwMERECis6MTA0MTEwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NkYwMDAwMDAwMDVGCis6MTA0MTIwMDBDMDIwMUMwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMDkzCis6MTA0MTMwMDAwMDAwMDU3OTAwMDAwMDA0MDAyRjAyMjMwMDAwMDAwMEE5Cis6MTA0MTQwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1Nzc4MTAwMDAwMEE2Cis6MTA0MTUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTcxCis6MTA0MTYwMDAwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDRDCis6MTA0MTcwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTA0MTgwMDBDMDYwNDgwMDAwMDAwNjhGMDAwMDAwMDAwMDQwMUMxMEM2Cis6MTA0MTkwMDAwMDAwMDU3OTAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMEMxCis6MTA0MUEwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTA0MUIwMDAwRUUwMDAwMDAwMDAwNTdCMDAwMDAwMDAwMDYwMDAwMDMxCis6MTA0MUMwMDAwMDAwMDVDNjAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMENGCis6MTA0MUQwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1OEMwMDAwQTJCNzI5Cis6MTA0MUUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwN0VCCis6MTA0MUYwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEM5Cis6MTA0MjAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0QTJCNkQ4Cis6MTA0MjEwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMUEwMDIxMjIzMENDCis6MTA0MjIwMDAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDEwCis6MTA0MjMwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEEwMDAwQTJDNEFCCis6MTA0MjQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTk4Cis6MTA0MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU4QUVGCis6MTA0MjYwMDAwMDAwQTJEMTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTA0MjcwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDEwMDIwNDQxMUM2Cis6MTA0MjgwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDZCCis6MTA0MjkwMDAwMDAwMDAwMTAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMEM4Cis6MTA0MkEwMDAwQ0MwMDAwMDAwMDAwNTlEMDAwMEEyQkIwMDIwNDQxMUNFCis6MTA0MkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDhGCis6MTA0MkMwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUY3Cis6MTA0MkQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQkEwMDYwNDQxMTUwCis6MTA0MkUwMDAwMDAwMDY4QTAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMEIxCis6MTA0MkYwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDAwMDA0MjAwNDE4Cis6MTA0MzAwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMEEyQzUwMDIwNDQxMThDCis6MTA0MzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMDNDCis6MTA0MzIwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1OUIwMDAwQTJEMjk5Cis6MTA0MzMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwODc4Cis6MTA0MzQwMDAwMDAwMDAwMDAwMDBBMkQyMDAyMDQ0MTEwMDAwMDAwMDg0Cis6MTA0MzUwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDAwMDAwMDAwMjk4Cis6MTA0MzYwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDJDCis6MTA0MzcwMDAwMDAwMDVBRTAwMDBBMkJGMDAyMDQ0MTEwMDAwMDAwMEI0Cis6MTA0MzgwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA4MTAwMDAwMDNECis6MTA0MzkwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTJFCis6MTA0M0EwMDAwMDAwMDAwMDAwMDRBMkJFMDA2MDQ0MTEwMDAwMDY4QTY0Cis6MTA0M0IwMDAwMDAwMDAxQTAwMjEyMjMwMDAwMDAwMDAwMDAwMDAwNjZBCis6MTA0M0MwMDAwMDIyMjYzMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMTk4Cis6MTA0M0QwMDAwMDAwMDY4QTAwMDBBMkM2MDAyMDQ0MTEwMDAwMDAwMDcwCis6MTA0M0UwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDAwMDAwMDAwMDZDCis6MTA0M0YwMDAwMEUwMDAwMDAwMDAwNUFDMDAwMEEyRDMwMDIwNDQxMTQyCis6MTA0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDgwMDAwMDAwMDFDCis6MTA0NDEwMDAwMDAwQTJEMzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUIxCis6MTA0NDIwMDAwMDUwNEEyODAwMDAwMDAwMDAwMEEyQzMwMDIwNDQxMUYwCis6MTA0NDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDBECis6MTA0NDQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTc1Cis6MTA0NDUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQzIwMDYwNDQxMUM2Cis6MTA0NDYwMDAwMDAwMDY4QTAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMDJGCis6MTA0NDcwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDAwMDA0MjAwNDk2Cis6MTA0NDgwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMEEyQzcwMDIwNDQxMTA5Cis6MTA0NDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMEJCCis6MTA0NEEwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1QkIwMDAwQTJENEY2Cis6MTA0NEIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwOEY3Cis6MTA0NEMwMDAwMDAwMDAwMDAwMDBBMkQ0MDAyMDQ0MTEwMDAwMDAwMDAxCis6MTA0NEQwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDA4NTAwMDAwMDk0Cis6MTA0NEUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMUVFCis6MTA0NEYwMDAwMDAwMDAwMDAwMDAzMDRBMDAyMDQ0MTEwMDAwMDAwMENECis6MTA0NTAwMDAwMTAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDMxCis6MTA0NTEwMDAwMDQwMDAwMDAwMDAwNUMxQTQwMDAwMDBDMDIwNDQxMUJDCis6MTA0NTIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDQzCis6MTA0NTMwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA1QzYwMDAwMDAwMDkwCis6MTA0NTQwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMkMwMDIwMzYyMUMzCis6MTA0NTUwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDY1Cis6MTA0NTYwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMENDCis6MTA0NTcwMDAwMDJGMDIzMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDBFCis6MTA0NTgwMDAwMDAwMDVDRDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDI0Cis6MTA0NTkwMDAwMDAwMDAzMDAwNDAzNjIxMDAwMDA1RTAwMDAwMDAzMDNGCis6MTA0NUEwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDdFMDAwMDI4MDYyMUVCCis6MTA0NUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMEE5Cis6MTA0NUMwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA1RTA4MTAwMDAwMDk5Cis6MTA0NUQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUVDCis6MTA0NUUwMDAwMDAwMDAwMDAwMDRBMDkyMDA2MDQ0MTEwMDAwMDY4QTUwCis6MTA0NUYwMDAwMDAwMDAzMTAwMjAzNjMwMDAwMDAwMDAwMDA0QTA5M0NECis6MTA0NjAwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMzIwMDIwMzYzMEFECis6MTA0NjEwMDAwMDAwMDAwMDAwMDRBMkI2MDA2MDQ0MTEwMDAwMDY4QUY5Cis6MTA0NjIwMDAwMDAwMDAzMzAwMjAzNjMwMDAwMDAwMDAwMDA0QTJCQTcxCis6MTA0NjMwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMzQwMDIwMzYzMDdCCis6MTA0NjQwMDAwMDAwMDAwMDAwMDRBMkJFMDA2MDQ0MTEwMDAwMDY4QUMxCis6MTA0NjUwMDAwMDAwMDAzNTAwMjAzNjMwMDAwMDAwMDAwMDA0QTJDMjM3Cis6MTA0NjYwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMzYwMDIwMzYzMDQ5Cis6MTA0NjcwMDAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4QUNECis6MTA0NjgwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAzRjJGCis6MTA0NjkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMUU5Cis6MTA0NkEwMDAwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDUyCis6MTA0NkIwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwNTNECis6MTA0NkMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRjQwMDIwNDQxMTY3Cis6MTA0NkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYxCis6MTA0NkUwMDA4ODAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUNDCis6MTA0NkYwMDAwMDIwNDgxMTAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTRCCis6MTA0NzAwMDAwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDJBCis6MTA0NzEwMDAwMDAwMDAwMTAwMkYwMjMwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0NzIwMDAwQ0UwMDAwMDAwMDAwNjI5MDAwMDAwMzAwMDIwMDYyREVCCis6MTA0NzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDI3Cis6MTA0NzQwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2Mjk4MTAwMDAwMENECis6MTA0NzUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTZBCis6MTA0NzYwMDAwMDAwMDAwMDAwMDA3RTAwMDAyODA2MjEwMDAwMDAwMDdDCis6MTA0NzcwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTA0NzgwMDAwQ0UwMDAwMDAwMDAwNjAyMDAwMEEwOTIwMDIwNDQxMThFCis6MTA0NzkwMDAwMDAwMDAwMDAwMDAwMDMxMDAyMDRBMkQwMDAwMDAwMDUxCis6MTA0N0EwMDAwMDAwQTA5MzAwMjA0NDExMDAwMDAwMDAwMDAwMDAzMjJGCis6MTA0N0IwMDAwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQjYwMDIwNDQxMTk1Cis6MTA0N0MwMDAwMDAwMDAwMDAwMDAwMDMzMDAyMDRBMkQwMDAwMDAwMDFGCis6MTA0N0QwMDAwMDAwQTJCQTAwMjA0NDExMDAwMDAwMDAwMDAwMDAzNEQ0Cis6MTA0N0UwMDAwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQkUwMDIwNDQxMTVECis6MTA0N0YwMDAwMDAwMDAwMDAwMDAwMDM1MDAyMDRBMkQwMDAwMDAwMEVECis6MTA0ODAwMDAwMDAwQTJDMjAwMjA0NDExMDAwMDAwMDAwMDAwMDAzNjk5Cis6MTA0ODEwMDAwMDIwNEEyRDAwMDAwMDAwMDAwMDAwMzAwMDIwMDYyRDdFCis6MTA0ODIwMDAwMDAwMDAwMDAwMDAwMUZGMDAyODA2MjEwMDAwMDAwMDM5Cis6MTA0ODMwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0ODQwMDAwQ0UwMDAwMDAwMDAwNjI4MDAwMDAwMDAwMDIxMDIyMTBBCis6MTA0ODUwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDYwQjczCis6MTA0ODYwMDAwMDA0QTAwMzAwNjA0NDExMDAwMDA2OEEwMDAwQTAwM0I5Cis6MTA0ODcwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDRCCis6MTA0ODgwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMTA2MjEwMDAwMDAwMERGCis6MTA0ODkwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2MTAwMDA0QTAxMDdBCis6MTA0OEEwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMEEwMTAwMDIwNDQxMTlFCis6MTA0OEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDgwCis6MTA0OEMwMDAwMDAwMDAwMTAwMjEwNjIxMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA0OEQwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDlBCis6MTA0OEUwMDAwMDAwMDYyODAwMDRBMDExMDA2MDQ0MTEwMDAwMDY4QUEwCis6MTA0OEYwMDAwMDAwQTAxMTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDkyCis6MTA0OTAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTIwMDYwNDQxMUM0Cis6MTA0OTEwMDAwMDAwMDY4QTAwMDBBMDEyMDAyMDQ0MTEwMDAwMDAwMEUwCis6MTA0OTIwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxMzU4Cis6MTA0OTMwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMEEwMTMwMDIwNDQxMTBBCis6MTA0OTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMEVGCis6MTA0OTUwMDAwMDA0QTAxNDAwNjA0NDExMDAwMDA2OEEwMDAwQTAxNEE2Cis6MTA0OTYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDVBCis6MTA0OTcwMDAwMDAwMDAwMDAwMDRBMDE1MDA2MDQ0MTEwMDAwMDY4QTM5Cis6MTA0OTgwMDAwMDAwQTAxNTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEZECis6MTA0OTkwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTYwMDYwNDQxMTMwCis6MTA0OUEwMDAwMDAwMDY4QTAwMDBBMDE2MDAyMDQ0MTEwMDAwMDAwMDRDCis6MTA0OUIwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxN0M0Cis6MTA0OUMwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMEEwMTcwMDIwNDQxMTc2Cis6MTA0OUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDVGCis6MTA0OUUwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEEwMDAwMDAyQzJFCis6MTA0OUYwMDAwMDgwMDYyRDAwMDAwMDAwRkYwMDAwMDAwMDIwNDQxMTkwCis6MTA0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDJECis6MTA0QTEwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMjFBCis6MTA0QTIwMDAwMDgwNDgxMTAwMDAwMDAwMDAwMDAwMDAwRUUwMDAwMEJGCis6MTA0QTMwMDAwMDAwMDYzQTAwMDAwMDMwMDAyMDA2MkQwMDAwMDAwMEIzCis6MTA0QTQwMDAwMDAwMDAwMjAwMjgwNjIxMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0QTUwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDE4Cis6MTA0QTYwMDAwMDAwMDYzODgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDEyCis6MTA0QTcwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MjAwNDk0Cis6MTA0QTgwMDAwMDYwNDQxMTAwMDAwNjhBMDAwMDEwMDAwMDIwMDgxMTk4Cis6MTA0QTkwMDAwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjIwMDAwMDAwMDczCis6MTA0QUEwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2M0UwMDAwMDAwMDYyCis6MTA0QUIwMDAwMDYwMDAwMDAwMDAwNUM2OTgwMDAwMDAwMDIwNDQxMUJFCis6MTA0QUMwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MTEwMDAwMDAwMDBECis6MTA0QUQwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA2M0UwMDAwMDAwMDcyCis6MTA0QUUwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMEEyQTQwMDIwNDQxMTA2Cis6MTA0QUYwMDAwMDAwMDAwMDAwMDAwMDIyMDAyMDQ4MTEwMDAwMDAwMDFCCis6MTA0QjAwMDA4OTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUE2Cis6MTA0QjEwMDAwMDQwNDgxMTAwMDAwNjJBOTcwMDAwMDAwMDIwNDQxMUMwCis6MTA0QjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDBDCis6MTA0QjMwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTA0QjQwMDAwMDQwNDgxMTAwMDAwNjJBMDAwMDAwMDAwMDYwMDAwMDNDCis6MTA0QjUwMDAwMDAwMDY1OTAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDUxCis6MTA0QjYwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTJBNDA1Cis6MTA0QjcwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYwMDYwNDgxMTMxCis6MTA0QjgwMDAwMDAwMDM2RTAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDBGCis6MTA0QjkwMDAwMDAxMDAwMDAwMjA0ODExMDAwMDAwMDA4MTAwMDAwMDFBCis6MTA0QkEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTE2Cis6MTA0QkIwMDAwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTEwMDAwMDAwMEUzCis6MTA0QkMwMDAwOTgwMDAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRkZGRkU3Cis6MTA0QkQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUUzCis6MTA0QkUwMDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMEFFCis6MTA0QkYwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2OEEwMDAwMDAxRkFECis6MTA0QzAwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDdECis6MTA0QzEwMDAwMDAwMDAwMDAwMDAwMDA0MDA0MDRDMTEwMDAwMDY1MzlBCis6MTA0QzIwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAxNzJECis6MTA0QzMwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDQwMDI5MUUyNzk3Cis6MTA0QzQwMDAwMDAwMDAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMDcwCis6MTA0QzUwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBGRkZGRkZGQkRBCis6MTA0QzYwMDAwMDI4MUUyNzAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyN0UzCis6MTA0QzcwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEIyCis6MTA0QzgwMDAwMDAwMDAwODAwMjkxRTI3MDAwMDAwMDAwMDAwMDAxNzk3Cis6MTA0QzkwMDAwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyREI1Cis6MTA0Q0EwMDAwMDAwMDAwMEZGRkZGRkY3MDAyODFFMjcwMDAwMDAwMEEzCis6MTA0Q0IwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDAwMDAwMjAxMEQwCis6MTA0Q0MwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTc2Cis6MTA0Q0QwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDE4Cis6MTA0Q0UwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNkUwMDAwMjAxMDU0Cis6MTA0Q0YwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMTAwMDAwMDIwNDgxMUM1Cis6MTA0RDAwMDAwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTEwMDAwMDAwMDkxCis6MTA0RDEwMDAwMTgwMDAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRkZGRjlECis6MTA0RDIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTkxCis6MTA0RDMwMDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDVDCis6MTA0RDQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTZDCis6MTA0RDUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMTgxCis6MTA0RDYwMDAwMDAwMDY4QTAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDQxCis6MTA0RDcwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2ODkwMDAwMDAxMEMwCis6MTA0RDgwMDAwMDQwNEMxMTAwMDAwNjZGMDAwMDAwMDBDMDIwMDQwMDJECis6MTA0RDkwMDAwMDAwMDAwMDAwMDAwMDAwMzhDMDAwMDAwMDAwMDAwMDFCCis6MTA0REEwMDAwMDAwMDAxRDAwMjAwQTJEMDAwMDAwMDAwMDAwMDAxRTcxCis6MTA0REIwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMUYwMDIwMTIyRDFBCis6MTA0REMwMDAwMDAwMDAwMDAwMDAwMDIwMDAyMDE2MkQwMDAwMDAwMDYwCis6MTA0REQwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTA0REUwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNUVBCis6MTA0REYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDEwMDAwMDAwMDRBCis6MTA0RTAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwNEU1Cis6MTA0RTEwMDAwMDMwMTIyNDAwMDAwMDAwMDAwMDAwMDAwMDJGMDA2NDk5Cis6MTA0RTIwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDY4ODI4Cis6MTA0RTMwMDAwMDAwMDAwMzAwMjgxQTIyMDAwMDAwMDAwMDAwMDAwODAzCis6MTA0RTQwMDAwMDIyMTIyMjAwMDAwMDAwRkZGRkYwMDAwMDI4MTIyNEMwCis6MTA0RTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTEwQzQwMDAwMDAwMDU1Cis6MTA0RTYwMDAwMDAwMDAxRjAwNDAzNjI0MDAwMDAwMDAwMDAwMDAwMDg5Cis6MTA0RTcwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQUMwMDAwMEQ4Cis6MTA0RTgwMDAwMDAwMDY4QTlGMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDdFCis6MTA0RTkwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0RUEwMDAxQUUwMDAwMDAwMDAwNjhEMDAwMDAwMDAwMDgwMDAwMEY1Cis6MTA0RUIwMDAwMDAwMDAwMDAwMDAwMDAwMUFDMDAwMDAwMDAwMDY4RjgzCis6MTA0RUMwMDA5RTAwMDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRThGCis6MTA0RUQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAxQUUwMDAwMDVGCis6MTA0RUUwMDAwMDAwMDY5MjAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMEFBCis6MTA0RUYwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMTAwMDM3Cis6MTA0RjAwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMURGCis6MTA0RjEwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjY1Cis6MTA0RjIwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMzhCCis6MTA0RjMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTYwMDIwNDQxMTBCCis6MTA0RjQwMDAwMDAwMDAwMDAwMDAwMDFCMDAyMDQ4MTEwMDAwMDAwMENECis6MTA0RjUwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTNFCis6MTA0RjYwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkRDMDIwNDQxMUY0Cis6MTA0RjcwMDAwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMEE1Cis6MTA0RjgwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAyNDg2Cis6MTA0RjkwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODMyCis6MTA0RkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDg4Cis6MTA0RkIwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyMjU2Cis6MTA0RkMwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODAyCis6MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDU4Cis6MTA0RkUwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyMzI1Cis6MTA0RkYwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyN0NGCis6MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDcwMDAwMDAwMDI3Cis6MTA1MDEwMDAwMDAwMDAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA1MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTA1MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA1MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA1MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTA1MEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA1MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTA1MTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTA1MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTA1MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTA1MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA1MjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA1MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTA1MkIwMDAwMTQyMDRGRjA1QkQwMjUwMDAwMDAwMDAwMUMzMDE2ODY3Cis6MTA1MkMwMDAwNDNGMDVCRDAwMDAwMDAwMDIyNTAyMDkwMjUwMDE1MTAzCis6MTA1MkQwMDAwMDAwMDAwMDAyMjMwMjQ1MDJBMDAyNDEwMDAwMDAwMDdECis6MTA1MkUwMDAwM0Q3MDVCRDA1QkQwNUJEMDAwMDAwMDAwNjQ2MDY0NzA1Cis6MTA1MkYwMDAwMzFGMDVCRDAwMDAwMDAwMDVCRDA1QzIwMzIwMDM0MERCCis6MTA1MzAwMDAwMDAwMDAwMDAzMkEwMjgyMDM0MjAzMzQwMDAwMDAwMDcwCis6MTA1MzEwMDAwNUJEMDVCRDA1QkQwNUJEMDAwMDAwMDAwNUJEMDU0RTcwCis6MTA1MzIwMDAwNUJEMDVCRDAwMDAwMDAwMDNCQTA1QkQwNEI4MDM0NDc3Cis6MTA1MzMwMDAwMDAwMDAwMDA0OTcwNDREMDQzRDA1QkQwMDAwMDAwMDdFCis6MTA1MzQwMDAwNENEMDVCRDA0NDEwNERBMDAwMDAwMDAwNDREMDUwNDRECis6MTA1MzUwMDAwMzUxMDM3NTAwMDAwMDAwMDVCRDA1QkQwNUJEMDVCRDc5Cis6MTA1MzYwMDAwMDAwMDAwMDA1QkQwNUJEMDVCRDA1QkQwMDAwMDAwMDM1Cis6MTA1MzcwMDAwNUJEMDVCRDA2M0MwNUM0MDAwMDAwMDAwNUJEMDVCRDFBCis6MTA1MzgwMDAwMDA3MDVCRDAwMDAwMDAwMDVCRDA1QkQwNUJEMDVCRDRDCis6MTA1MzkwMDAwMDAwMDAwMDA1QkQwNUJEMDVCRDA1QkQwMDAwMDAwMDA1Cis6MTA1M0EwMDAwM0Y4MDNFRDA0MDgwNDA2MDAwMDAwMDAwNDBFMDQwQURDCis6MTA1M0IwMDAwNDBDMDQxMDAwMDAwMDAwMDQxQzA0MTgwNDI0MDQyMDQxCis6MTA1M0MwMDAwMDAwMDAwMDA0MkMwNDI4MDQzNDA0MzAwMDAwMDAwMDE1Cis6MTA1M0QwMDAwNUJEMDVCRDA0MzgwNUJEMDAwMDAwMDAwNUJEMDVCREM3Cis6MTA1M0UwMDAwNUJEMDVCRDAwMDAwMDAwMDVCRDA1QkQwNUJEMDVCRDMxCis6MTA1M0YwMDAwMDAwMDAwMDAwMDIwNjc2MDY5NDAwMDYwMDAwMDAwMDhGCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNjMwX3BmcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjYzMF9wZnAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1MjkyYwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjYzMF9wZnAuYmluLmloZXgKQEAgLTAsMCArMSwxNDUgQEAKKzoxMDAwMDAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwN0MwMzhCRUQKKzoxMDAwMTAwMDAwODAwMUI4MDA3QzAzOEIwMEQ0NDAxRTAwRUUwMDFFNUYKKzoxMDAwMjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwQzQxODM4QzMKKzoxMDAwMzAwMDAwQ0EyNDAwMDBDQTI4MDAwMDk1ODFBODAwQzQxQzNBMDgKKzoxMDAwNDAwMDAwQzNDMDAwMDBDQTA4MDAwMENBMEMwMDAwN0M3NDRCNEEKKzoxMDAwNTAwMDAwQzIwMDA1MDA5OUMwMDAwMEM0MUMzQTAwN0M3NDRDMkEKKzoxMDAwNjAwMDAwQzBGRkYwMDAwNDJDMDQwMDMwOTAwMjAwN0QyNTAwNDkKKzoxMDAwNzAwMDAwMzUxNDAyMDA3RDM1MEIwMDI1NTQwMzAwN0NENTgwMkIKKzoxMDAwODAwMDAwMjU5QzAzMDA5NUMwMDQwMEQ1MDAxQjAwN0VEREMxNDcKKzoxMDAwOTAwMDAwN0Q5RDgwMDBENjgwMUIwMEQ1ODAxQjAwRDQ0MDFFQjMKKzoxMDAwQTAwMDAwRDU0MDFFMDBENjQwMUUwMEQ2ODAxRTAwRDQ4MDFFMDMKKzoxMDAwQjAwMDAwRDRDMDFFMDA5NzgzRDMwMEQ1QzAxRTAwQ0EwODAwMUMKKzoxMDAwQzAwMDAwODAwMDFBMDBDQTBDMDAwMEU0MDExRTAwRDQwMDFFQ0IKKzoxMDAwRDAwMDAwODAwMDBDMDBDNDE4MzgwMEU0MDEzRTAwRDQwMDFFNkIKKzoxMDAwRTAwMDAwODAwMDBDMDBDNDE4MzgwMEQ0NDAxRTAwRUUwMDFFMzIKKzoxMDAwRjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTFFMDQKKzoxMDAxMDAwMDAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwRjEKKzoxMDAxMTAwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDEzRTAwRDQwMDFFOUYKKzoxMDAxMjAwMDAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMjMKKzoxMDAxMzAwMDAwN0U4MjhCMDBDQTE4MDAwMEQ0NDAxRTAwRDU4MDFFQUQKKzoxMDAxNDAwMDAwODAwMDUzMDBENDAwNzUwMEQ0NDAxRTAwQ0EwODAwOEYKKzoxMDAxNTAwMDAwQ0EwQzAwMDBDQTEwMDAwMEQ0ODAxOTAwRDRDMDE4RDYKKzoxMDAxNjAwMDAwRDUwMDE3MDBENDgwMUUwMEQ0QzAxRTAwRDUwMDFFOEMKKzoxMDAxNzAwMDAwRTIwMDFFMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCODYKKzoxMDAxODAwMDAwQ0EwODAwMDBENDgwNjAwMEQ0NDAxRTAwODAwMDAwMzcKKzoxMDAxOTAwMDAwRDQ4MDFFMDBDQTA4MDAwMEQ0ODA2MTAwRDQ0MDFFMzQKKzoxMDAxQTAwMDAwODAwMDAwMDBENDgwMUUwMENBMDgwMDAwQ0EwQzAwQjUKKzoxMDAxQjAwMDAwRDQ0MDFFMDBENDgwMTYwMEQ0QzAxNjAwRDQ4MDFFODcKKzoxMDAxQzAwMDAwODAwMUI4MDBENEMwMUUwMEM2MDg0MzAwQ0EwQzAwNUQKKzoxMDAxRDAwMDAwQ0ExMDAwMDA5NDgwMDQwMENBMTQwMDAwRTQyMEYzNTgKKzoxMDAxRTAwMDAwRDQyMDEzMDBENTYwNjUwMEQ0RTAxQzAwRDUyMDFDOEQKKzoxMDAxRjAwMDAwRDU2MDFDMDA4MDAwMDAwMDA2MjAwMTAwQzYwODQzRjYKKzoxMDAyMDAwMDAwQ0EwQzAwMDBDQTEwMDAwMDk0ODNGNzAwQ0ExNDAwNTIKKzoxMDAyMTAwMDAwRTQyMEYzMDA4MDAwNzkwMEQ0MjAxMzAwQzYwODQzRDYKKzoxMDAyMjAwMDAwQ0EwQzAwMDBDQTEwMDAwMDk4ODNFRjAwQ0ExNDAwMzYKKzoxMDAyMzAwMDAwRDQwMDY0MDA4MDAwOEQwMDAwMDAwMDAwQzQxNDMyNkYKKzoxMDAyNDAwMDAwQzYxODQzMDBDNDA4MkYwMDk1NDAwNTAwQzQwQzMwQjgKKzoxMDAyNTAwMDAwRDQ0MDFFMDA4MDAwMDAwMEVFMDAxRTAwOTU4M0Y1RDMKKzoxMDAyNjAwMDAwQzQxMDMxMDBENDQwMzMwMEQ1MjA2NTAwRDRBMDFDNTgKKzoxMDAyNzAwMDAwRDRFMDFDMDBENTIwMUMwMEU0MDE1RTAwRDQwMDFFNjgKKzoxMDAyODAwMDAwODAwMDAwMDAwNjIwMDEwMENBMTgwMDAwMEEyMDAxQkEKKzoxMDAyOTAwMDAwRDYwMDc2MDBDNDA4MzYwMDk4ODAwNzAwQzYxMDQ1RDYKKzoxMDAyQTAwMDAwOTUwMTEwMDBENDAwMUYwMEQ0NjA2MjAwODAwMDAwOUYKKzoxMDAyQjAwMDAwRDQyMDYyMDBDQzM4MzUwMENDMTQzMzAwODQwMUJCNUMKKzoxMDAyQzAwMDAwRDQwMDcyMDBENTQwMUUwMDgwMDAwMDAwRUUwMDFFMjkKKzoxMDAyRDAwMDAwRTIwMDFBMDA4NDAxQkIwMEUyMDAxQTAwQ0MxMDRCQkYKKzoxMDAyRTAwMDAwQ0MwNDQ3MDAyQzk0MDEwMDdEMDk4QjAwOTg0MDA1NDgKKzoxMDAyRjAwMDAwN0QxNUNCMDBENDAwMUEwMDgwMDFCODAwRDQwMDZEMzkKKzoxMDAzMDAwMDAwMzQ0NDAxMDBDQzBDNDgwMDk4NDAzQTAwQ0MyQzRBMDAKKzoxMDAzMTAwMDAwOTU4MDA0MDBDQzA0NDkwMDgwMDFCODAwRDQwMDFBODQKKzoxMDAzMjAwMDAwRDRDMDFBMDAyODI4MDEwMDg0MDBGMDAwQ0MxMDAzN0IKKzoxMDAzMzAwMDAwOTg4MDFCMDAwNDM4MEMwMDg0MDBGMDAwQ0MxMDAzRUYKKzoxMDAzNDAwMDAwOTg4MDE3MDAwNDM4MDgwMDg0MDBGMDAwQ0MxMDAzRTcKKzoxMDAzNTAwMDAwOTg4MDEzMDAwNDM4MDQwMDg0MDBGMDAwQ0MxMDAzREYKKzoxMDAzNjAwMDAwOTg4MDE0MDBDQzEwNEMwMDlBODAwOTAwQ0MxNDRERTkKKzoxMDAzNzAwMDAwOTg0MERDMDBENDAwNkQwMENDMTg0ODAwRDUwMDFBNkQKKzoxMDAzODAwMDAwRDU0MDFBMDA4MDAwQzkwMEQ1ODAxQTAwOTZDMEQ1NUIKKzoxMDAzOTAwMDAwRDQwMDZEMDA4MDAxQjgwMEQ0MDA2RTAwOUFDMDAzNDQKKzoxMDAzQTAwMDAwRDQwMDZEMDBENDAwNkUwMDgwMDAwMDAwRUMwMDdGREYKKzoxMDAzQjAwMDAwOUFDMENDMDBENDAwNkQwMDgwMDFCODAwRDQwMDZFNUIKKzoxMDAzQzAwMDAwQ0MxNDAzMDBDQzE4MDMwMENDMUMwMzAwN0Q5MTAzNjcKKzoxMDAzRDAwMDAwN0RENTgzMDA3RDE5MEMwMDM1Q0MxRjAwMzU3MDFGQzIKKzoxMDAzRTAwMDAwN0NGMENCMDA3Q0QwOEIwMDg4MDAwMDAwN0U4RThCRTAKKzoxMDAzRjAwMDAwOTVDMDA0MDBENDAwNkUwMDgwMDFCODAwRDQwMDFBM0IKKzoxMDA0MDAwMDAwRDRDMDFBMDBDQzA4MDMwMENDMEMwMzAwQ0MxMDAzQUQKKzoxMDA0MTAwMDAwQ0MxNDAzMDBDQzE4MDMwMENDMUMwMzAwQ0MyNDAzMzQKKzoxMDA0MjAwMDAwQ0MyODAzMDAzNUM0MUYwMDM2QjAxRjAwN0M3MDRCODEKKzoxMDA0MzAwMDAwMzRGMDFGMDA3QzcwNEIwMDM1NzAxRjAwN0M3MDRCNDcKKzoxMDA0NDAwMDAwN0Q4ODgxMDA3RENDQzEwMDdFNTEwMTAwN0U5NTQxRjgKKzoxMDA0NTAwMDAwN0M5MDgyMDA3Q0Q0QzIwMDdDODQ4QjAwOUFDMDAzMTQKKzoxMDA0NjAwMDAwN0M4QzhCMDAyQzg4MDEwMDk4ODA5RTAwRDQwMDZENEQKKzoxMDA0NzAwMDAwOTg0MDlDMDBENDAwNkUwMENDMDg0QzAwQ0MwQzREODEKKzoxMDA0ODAwMDAwQ0MxMDQ4MDBENDgwMUEwMEQ0QzAxQTAwODAwMTAxQUEKKzoxMDA0OTAwMDAwRDUwMDFBMDBDQzA4MzIwMEQ0MDAzMjAwOTQ4MkQ5NzIKKzoxMDA0QTAwMDAwQ0EwQzAwMDBENDQwMUUwMDgwMDAwMDAwRDQwMDFFRDIKKzoxMDA0QjAwMDAwRTQwMTFFMDBENDAwMUUwMENBMDgwMDAwQ0EwQzAwOUYKKzoxMDA0QzAwMDAwQ0ExMDAwMDBENDQwMUUwMENBMTQwMDAwRDQ4MDFFRDAKKzoxMDA0RDAwMDAwRDRDMDFFMDBENTAwMUUwMEQ1NDAxRTAwRDU0MDM0RkIKKzoxMDA0RTAwMDAwODAwMDAwMDBFRTAwMUUwMDI4MDQwNDAwRTIwMDFBNTQKKzoxMDA0RjAwMDAwRTIwMDFBMDBENDQwMUEwMENBMzgwMDAwQ0MwODAzRjkKKzoxMDA1MDAwMDAwQ0MwQzAzMDBDQzBDMDMwMENDMEMwMzAwOTg4MkJEODMKKzoxMDA1MTAwMDAwMDAwMDAwMDA4NDAxQkIwMEQ3QTA2RjAwODAwMDAwMzUKKzoxMDA1MjAwMDAwRUUwMDFGMDBDQTA0MDAwMEMyRkYwMDAwQ0MwODM0MjcKKzoxMDA1MzAwMDAwQzEzRkZGMDA3Qzc0Q0IwMDdDQzkwQjAwN0QwMTBGMjQKKzoxMDA1NDAwMDAwOTkwMkIwMDA3QzczOEIwMDg0MDFCQjAwRDdBMDZGQzAKKzoxMDA1NTAwMDAwODAwMDAwMDBFRTAwMUYwMENBMDgwMDAwMjgxOTAwRkIKKzoxMDA1NjAwMDAwN0Q4OThCMDA5NTgwMTQwMDI4MTQwNDAwQ0EwQzAwQkIKKzoxMDA1NzAwMDAwQ0ExMDAwMDBDQTFDMDAwMENBMjQwMDAwRTIwMDFGQ0MKKzoxMDA1ODAwMDAwRDRDMDFBMDBENTAwMUEwMEQ1NDAxQTAwQ0MxODAzQjgKKzoxMDA1OTAwMDAwQ0MyQzAzMDBDQzJDMDMwMENDMkMwMzAwN0RBNThCQkQKKzoxMDA1QTAwMDAwN0Q5QzQ3MDA5ODQyOTcwMDAwMDAwMDAwODAwMTYxOTgKKzoxMDA1QjAwMDAwRDRDMDFBMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAwNjkKKzoxMDA1QzAwMDAwRUUwMDFFMDBFNDAxMUUwMEQ0MDAxRTAwRDQ0MDFFRjgKKzoxMDA1RDAwMDAwRUUwMDFFMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMTYKKzoxMDA1RTAwMDAwRTQwMTNFMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFQjgKKzoxMDA1RjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwQ0EwODAwMzAKKzoxMDA2MDAwMDAwMjQ4QzA2MDAwQ0NDMDYwMDk4QzAwNjAwQ0MxMDRFQ0UKKzoxMDA2MTAwMDAwOTkwMDA0MDBENDAwNzMwMEU0MDExRTAwRDQwMDFFMDEKKzoxMDA2MjAwMDAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDAwRUUwMDFFOUEKKzoxMDA2MzAwMDAwQ0EwODAwMDBDQTBDMDAwMDM0RDAxODAwMjUxMDAxQzAKKzoxMDA2NDAwMDAwOTUwMDIxMDBDMTdGRkYwMENBMTAwMDAwQ0ExNDAwRkQKKzoxMDA2NTAwMDAwQ0ExODAwMDBENDgwMUQwMEQ0QzAxRDAwN0RCMThCREQKKzoxMDA2NjAwMDAwQzE0MjAyMDBDMkMwMDEwMEQ1ODAxRDAwMzREQzBFNzIKKzoxMDA2NzAwMDAwN0Q1RDRDMDA3RjczNEMwMEQ3NDAxRTAwRDUwMDFFRUUKKzoxMDA2ODAwMDAwRDU0MDFFMDBDMTQyMDAwMEMyQzAwMDAwMDk5QzAxMEMKKzoxMDA2OTAwMDAwMzFEQzEwMDA3RjVGNEMwMDdGNzM0QzAwMDQyODAyQTcKKzoxMDA2QTAwMDAwN0Q4MzgwMDBENUE4NkYwMEQ1ODA2NjAwRDc0MDFFRUUKKzoxMDA2QjAwMDAwRUMwMDVFMDBDODI0MDIwMEM4MjQwMjAwODAwMUI4REIKKzoxMDA2QzAwMDAwRDYwMDc2MDBENDQwMUUwMEQ0ODAxRTAwRDRDMDFFODgKKzoxMDA2RDAwMDAwODAwMDAwMDBFRTAwMUUwMDgwMDAwMDAwRUUwMDFGMDEKKzoxMDA2RTAwMDAwRDQwMDFGMDA4MDAwMDAwMEQ0MDAxRjAwRDQwMDFGQjEKKzoxMDA2RjAwMDAwODgwMDAwMDBENDAwMUYwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMDA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDA3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMDA3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDA3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDA4MDAwMDAwMDEwMTcxMDAwMjAxNzgwMDAzMDA4RjAwMDQwMDdGRTUKKzoxMDA4MTAwMDAwMDUwMDAzMDAwNjAwM0YwMDA3MDAzMjAwMDgwMTJDMUQKKzoxMDA4MjAwMDAwMDkwMDQ2MDAwQTAwMzYwMDEwMDFCNjAwMTcwMEEyQjkKKzoxMDA4MzAwMDAwMjIwMTNBMDAyMzAxNDkwMDIwMDBCNDAwMjQwMTI1RDAKKzoxMDA4NDAwMDAwMjcwMDREMDAyODAwNkEwMDJBMDA2MDAwMkIwMDUyOUIKKzoxMDA4NTAwMDAwMkYwMDY1MDAzMjAwODcwMDM0MDE3RjAwM0MwMTU2MDQKKzoxMDA4NjAwMDAwM0YwMDcyMDA0MTAxOEMwMDQ0MDEyRTAwNTUwMTczQ0QKKzoxMDA4NzAwMDAwNTYwMTdBMDA2MDAwMEIwMDYxMDAzNDAwNjIwMDM4MEQKKzoxMDA4ODAwMDAwNjMwMDM4MDA2NDAwMzgwMDY1MDAzODAwNjYwMDM4RjYKKzoxMDA4OTAwMDAwNjcwMDM4MDA2ODAwM0EwMDY5MDA0MTAwNkEwMDQ4QkIKKzoxMDA4QTAwMDAwNkIwMDQ4MDA2QzAwNDgwMDZEMDA0ODAwNkUwMDQ4NzYKKzoxMDA4QjAwMDAwNkYwMDQ4MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2NkYKKzoxMDA4QzAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MTAKKzoxMDA4RDAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAKKzoxMDA4RTAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RjAKKzoxMDA4RjAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RTAKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY2MzVfbWUuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY2MzVfbWUuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzYTdlNgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjYzNV9tZS5iaW4uaWhleApAQCAtMCwwICsxLDEzNDUgQEAKKzoxMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDAwMTAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwRkZGRjAwMjg0NjIxQTkKKzoxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwQUYKKzoxMDAwMzAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDAwNDAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMjYKKzoxMDAwNTAwMDAwMDAwMDAwMDAwMTAwMDBDMDI5NDYyMDAwMDAwMDAwNTAKKzoxMDAwNjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDAwNzAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBRjIKKzoxMDAwODAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwN0EKKzoxMDAwOTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0QkUKKzoxMDAwQTAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAwMDAwNjAwMDAwQUIKKzoxMDAwQjAwMDAwMDAwNjJFMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQyNjQKKzoxMDAwQzAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwRjAwMzkKKzoxMDAwRDAwMDAwMjgxNjIyMDAwMDAwMDAwMDAwMDAwODAwMjExNjI1NUMKKzoxMDAwRTAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwMzYyNTAwMDAwMDAwN0QKKzoxMDAwRjAwMDhEMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0RkEKKzoxMDAxMDAwMDAwMkYwMjI1MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQUQKKzoxMDAxMTAwMDAwMDAwMDE4MDA0MTIwMDAwMDQwNDgxMTAwMDAwMDE5QjQKKzoxMDAxMjAwMDAwNDIyMDAwMDAyMDQ4MTEwMDAwMDAwMDhFMDAwMDAwNjYKKzoxMDAxMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAyODAwMjA0QTJEOEIKKzoxMDAxNDAwMDAwMDAwMDAwOTAwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUEKKzoxMDAxNTAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDBDMjYKKzoxMDAxNjAwMDAwMjExNjIyMDAwMDAwMDAwMDAwMDAwMzAwMjgxNjI1RDAKKzoxMDAxNzAwMDAwMDAwMDAwMDAwMDAwMTkwMDIxMUEyMjAwMDAwMDAwMDkKKzoxMDAxODAwMDAwMDAwMDA0MDAyODFBMjYwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDAxOTAwMDAwMjkxNEM1MDAwMDAwMDAwMDAwMDAxOTAwMjAzNjI1QzkKKzoxMDAxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMTQwMjAwMDAwMDAwRkYKKzoxMDAxQjAwMDAwMDAwMDE2MDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAzQ0EKKzoxMDAxQzAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENUEKKzoxMDAxRDAwMDAwMDAwMDAwRkZGRkZGRkMwMDI4MEUyMzAwMDAwMDAwQ0QKKzoxMDAxRTAwMDAwMDAwMDAwMDAyOTE0QTMwMDAwMDAwMDAwMDAwMDE3MTgKKzoxMDAxRjAwMDAwMjAzNjI1MDAwMDAwMDAwMDAwODAwMDAwMjgwRTIyQUMKKzoxMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDIyMEUyMzAwMDAwMDAwOTQKKzoxMDAyMTAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDIwMDAwMDAwRUYKKzoxMDAyMjAwMDAwMjgwRTIyMDAwMDAwMDAwMDAwMDAwNjAwMjEwRTIzMUUKKzoxMDAyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwRUYKKzoxMDAyNDAwMDAwMDAwMDAwMDAyMjAyMjIwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDAyNTAwMDE0RTAwMDAwMDAwMDAwMzgwMDAwMDAwMDJFRTAwMDAwNjQKKzoxMDAyNjAwMDAwMDAwMDM1MDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDM3MTYKKzoxMDAyNzAwMDAwMDAwMDAwMDA0MDBFMkQwMDAwMDAzOTAwMDAwMDA4QzIKKzoxMDAyODAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwOTAwNDAxMjJEOEIKKzoxMDAyOTAwMDAwMDAwMDQ2MDAwMDAwMDEwMDQwMEUyRDAwMDAwMDM5NjMKKzoxMDAyQTAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMjgKKzoxMDAyQjAwMDAwMjgxMjIzMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0ODcKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzAwMDAwMDAwQUQKKzoxMDAyRDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDAzRTAwMDAwMDA4RTQKKzoxMDAyRTAwMDAwNDAxQzExMDAwMDAwNDEwMDAwMDAwRDAwMjAxRTJERTgKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMEYwMDI4MUUyNzAwMDAwMDAwODIKKzoxMDAzMDAwMDAwMDAwMDAzMDAyMjFFMjcwMDAwMDAwMDdGQzAwMDAwNDQKKzoxMDAzMTAwMDAwMjgxQTIzMDAwMDAwMDAwMDAwMDAxNDAwMjExQTI2MDMKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDMzMUEyNjAwMDAwMDAwNTkKKzoxMDAzMzAwMDAwMDAwMDA4MDAyMjFBMjYwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDAzNDAwMDAwMjkwQ0M3MDAwMDAwMDAwMDAwMDAyNzAwMjAzNjI0MTAKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MTIyMTAwMDAwMDAwQzMKKzoxMDAzNjAwMDAwMDAxNDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDAzNzAwMDBDRTAwMDAwMDAwMDAwNEIwMDAwMDAwMTAwMjkwRTIzRUIKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwMzYyMzAwMDAwMDAwRTYKKzoxMDAzOTAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRjgwMDAwMTEKKzoxMDAzQTAwMDAwMjk0QTIzMDAwMDAwMDAwMDAwMDAwMDAwM0EyQzAyNEYKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMEUyQjAwMDAwMDAwRTAKKzoxMDAzQzAwMEZDMDAwMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDBGQzkKKzoxMDAzRDAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTIzRjAKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMjcwMDIwNEEyRDAwMDAwMDAwNEYKKzoxMDAzRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDI5NUIKKzoxMDA0MDAwMDAwMjAwRTJEMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTIzRTkKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDA0MjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxNTIKKzoxMDA0MzAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwODMKKzoxMDA0NDAwMDAwMDAwMDYxMDAwMDAwMDAyRUUwMDAwMDAwMDAwMDVGREUKKzoxMDA0NTAwMDAwMDAwMDAwMkNFMDAwMDAwMDAwMDA1RTAwMDAwMDAwMzIKKzoxMDA0NjAwMDAwNDAwRTJEMDAwMDAwNjIwMDAwMDAwMTAwNDAwRTJEMzMKKzoxMDA0NzAwMDAwMDAwMDYyMDAwMDAwMEEwMDIwMEUyRDAwMDAwMDAwQjUKKzoxMDA0ODAwMDAwMDAwMDBCMDA0MDEyMkQwMDAwMDA2QTAwMDAwMDAwNzgKKzoxMDA0OTAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzAwMjgxMjIzRDkKKzoxMDA0QTAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDAwMDAwMDAwRjIKKzoxMDA0QjAwMDdGQzAwMDAwMDAyODE2MjMwMDAwMDAwMDAwMDAwMDE0ODgKKzoxMDA0QzAwMDAwMjExNjI1MDAwMDAwMDAwMDAwMDAwMTAwMzMxNjI1NjEKKzoxMDA0RDAwMDAwMDAwMDAwODAwMDAwMDAwMDI4MEUyMzAwMDAwMDAwNDMKKzoxMDA0RTAwMDAwMDAwMDAwMDAyOTBDQTMwMDAwMDAwMDNGRkZGQzAwRkEKKzoxMDA0RjAwMDAwMjkwRTIzMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMjEKKzoxMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDZEOEEKKzoxMDA1MTAwMDAwMDAwMTAwMDA0MDFDMTEwMDAwMDA3MDAwMDAwMDBERjAKKzoxMDA1MjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDBGMDAwMjgxRTI3MDMKKzoxMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDQwMDIyMUUyNzAwMDAwMDAwNTAKKzoxMDA1NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBEQTgKKzoxMDA1NTAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRjBGRjAwMjgxQTMwQzMKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMEEwMjgwMDIwNDQxMTAwMDAwMDAwNEUKKzoxMDA1NzAwMDAwMDAwMDAwMDAyOTQ4RTYwMDAwMDAwMDAwMDBBMDE4NkMKKzoxMDA1ODAwMDAwMjA0NDExMDAwMDAwMDAzRkZGRkZGRjAwMjg0QTIzMjUKKzoxMDA1OTAwMDAwMDAwMDAwMDAwMEEwMTAwMDIwNDQxMTAwMDAwMDAwMzYKKzoxMDA1QTAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDMwQUYKKzoxMDA1QjAwMDAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMjAwMjkxNjI1NzIKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMzAwMDIwMzYyNTAwMDAwMDAwODAKKzoxMDA1RDAwMDAwMDAwMDI1MDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDA1RTAwMDAwMkYwMEEzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNkQKKzoxMDA1RjAwMDAwMDAwMDgzMDAwMDAwMjYwMDIwMTYyRDAwMDAwMDAwRUYKKzoxMDA2MDAwMDAwMDAwMDAwMDAyRjAwQTQwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDA2MTAwMDBDQzAwMDAwMDAwMDAwODQwMDAwMDAwMDAwNDAwMDAwNEEKKzoxMDA2MjAwMDAwMDAwMDhBMDAwMDAwMjUwMDIwMzYyMzAwMDAwMDAwQTIKKzoxMDA2MzAwMDAwMDAwMDI2MDAyMDM2MjQwMDAwMDAwMDAwMDAwMDE3MDMKKzoxMDA2NDAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3RjMKKzoxMDA2NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDhBMUMKKzoxMDA2NjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY2NTAwMDAwMDAwQkYKKzoxMDA2NzAwMDAwNjAwMDAwMDAwMDA2NTkwMDAwMDAwMjAwMjEwRTIyNjgKKzoxMDA2ODAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDhEMDkKKzoxMDA2OTAwMDAwMDAwMDEyQzA0MDM2MjAwMDAwMDA5MzAwMDAwMDAwNUYKKzoxMDA2QTAwMDJFRTAwMDAwMDAwMDAwOTEwMDAwMDAwMDJDRTAwMDAwOUYKKzoxMDA2QjAwMDAwMDAwMDkwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDkyOUIKKzoxMDA2QzAwMDAwMDAwMDAzMDA0MDBFMkQwMDAwMDA5MjAwMDAwMDBDMEUKKzoxMDA2RDAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxMjAwMjAzNjIzMzQKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMEUyMjAwMDAwMDAwQjYKKzoxMDA2RjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA5ODAwMDBBMDBDRTIKKzoxMDA3MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNEMKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMEEwRjEKKzoxMDA3MjAwMDAwMDBBMDBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDA3MzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDJFRTAwMDAwMzIKKzoxMDA3NDAwMDAwMDAwMDlFMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDlENjIKKzoxMDA3NTAwMDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDAzN0EKKzoxMDA3NjAwMDAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwQzAwMjAwRTJEMDgKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMEUKKzoxMDA3ODAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDAwM0YwMDAwRTIKKzoxMDA3OTAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAxMDAwMjEwRTIzOUUKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMTEwMDIwMzYyMzAwMDAwMDAwQkYKKzoxMDA3QjAwMDAwMDAwMDFFMDAyMTAyMkIwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA3QzAwMDE0QzAwMDAwMDAwMDAwQTcwMDAwMDAxNkMwMjAzNjIwNjIKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMDIyQjAwMDAwMDAwQUMKKzoxMDA3RTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBBQTAwMDAwMDE1NzYKKzoxMDA3RjAwMEMwMjAzNjIwMDAwMDAwMDAwMDAwMDAwODAwMjEwRTJCNjEKKzoxMDA4MDAwMDAwMDAwMDAwMDAwMDAwN0YwMDI4MEUyMzAwMDAwMDAwMTAKKzoxMDA4MTAwMDAwMDAwMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDA4MjAwMDBDRTAwMDAwMDAwMDAwRTEwMDAwMDAwMDI3MDAwMDAwRDQKKzoxMDA4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzQjMKKzoxMDA4NDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDA4NTAwMDBBRTAwMDAwMDAwMDAwQjMwMDAwMDAwMDAwNjAwMDAwOUIKKzoxMDA4NjAwMDAwMDAwMTNBODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNTcKKzoxMDA4NzAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBDRUQKKzoxMDA4ODAwMDAwMjIxRTMwMDAwMDAwMDA5OTgwMDAwMDAwMjA0NDExNkEKKzoxMDA4OTAwMDAwMDAwMDAwMDAwMDAwMDQwMDIwMTIyRDAwMDAwMDAwRjUKKzoxMDA4QTAwMDAwMDAwMDA4MDAyMjEyMjQwMDAwMDAwMDAwMDAwMDEwRDgKKzoxMDA4QjAwMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDAwMjkxQ0U0QzYKKzoxMDA4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwNzAwMDAwMTJGNDkKKzoxMDA4RDAwMDlCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDA4RTAwMDAwMjA0ODAyMDAwMDAwMDA5QzAwMDAwMDAwMjA0NDExOEQKKzoxMDA4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzMTQ2RjAwMDAwMDAwNDIKKzoxMDA5MDAwMDAwMDAwMDAxMDAzMzNFMjMwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDA5MTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMjAzQzA1NTUKKzoxMDA5MjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDEKKzoxMDA5MzAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDA5NDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwNzAwMjA0NDExMEIKKzoxMDA5NTAwMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyQjAwMDAwMDAwM0EKKzoxMDA5NjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBDQjAwRjhGRjA4RTkKKzoxMDA5NzAwMDAwMjA0ODExMDAwMDAwMDA5ODAwMDAwMDAwNDA0ODExQ0QKKzoxMDA5ODAwMDAwMDAwMERDMDAwMDAwRjAwMDI4MEUyMjAwMDAwMDAwNDMKKzoxMDA5OTAwMDAwMDAwMEEwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDA5QTAwMDBDQzAwMDAwMDAwMDAwREEwMDAwMDAxMTAwMjAwRTJEMzUKKzoxMDA5QjAwMDAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwRTIKKzoxMDA5QzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBENTAwMDAwMDAyNjQKKzoxMDA5RDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDcKKzoxMDA5RTAwMDAwMDAwMEQ0MDAwMDNGMDAwMDQwMEMxMTAwMDAwMEQ2QzEKKzoxMDA5RjAwMDAwMDAxRjAwMDA0MDBDMTEwMDAwMDBENjAwMDAwRjAwOTYKKzoxMDBBMDAwMDAwMjAwQzExMDAwMDAwMDAwMDM4MDAwOTAwMjk0QTIzRDIKKzoxMDBBMTAwMDAwMDAwMDAwM0YwMDAwMDAwMDI4MEUyQjAwMDAwMDAwMzYKKzoxMDBBMjAwMDAwMDAwMDAyMDAyMjBFMjMwMDAwMDAwMDAwMDAwMDA3NkEKKzoxMDBBMzAwMDAwNDk0QTIzMDAwMDAwREMwMDM4MEYwOTAwMjA0ODExNUIKKzoxMDBBNDAwMDAwMDAwMDAwNjgwMDAwMDcwMDIwNDgxMTAwMDAwMDAwQkUKKzoxMDBBNTAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDBBNjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0NjQKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRkQKKzoxMDBBODAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMjAyNDkKKzoxMDBBOTAwMDAwMjA0NDExMDAwMDAwMDAwMEZGMDAwMDAwMjgwRTIyOEEKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwODAwMDI5NEEyMzAwMDAwMDAwMzAKKzoxMDBBQjAwMDAwMDAwMDI3MDAyMDBFMkQwMDAwMDAwMDAwMDAwMDI2OEUKKzoxMDBBQzAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwMDAwMkYwMDgzMTUKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEVBNDAKKzoxMDBBRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY1RjAwMDAwMDAwNDEKKzoxMDBBRjAwMDAwNDAwMDAwMDAwMDAwRUIwMDAwMDAwMDAwNjAwMDAwNkIKKzoxMDBCMDAwMDAwMDAwNjYyMDAwMDAwMDcwMDIwMjIyRDAwMDAwMDAwMDcKKzoxMDBCMTAwMDAwMDAwMDA1MDAyMjBFMjIwMDAwMDAwMDAwMTAwMDAwNkUKKzoxMDBCMjAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjkyMDY4QkIKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwNkQKKzoxMDBCNDAwMDAwMDAwMEVGMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDBCNTAwMDAwMjkyMDY4MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzIKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMDIyMzAwMDAwMDAwM0MKKzoxMDBCNzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDBGODAwMDAwMDBCN0UKKzoxMDBCODAwMDAwMjEwMjI4MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwNDYKKzoxMDBCOTAwMDAwMDAwMEY4MDAwMDA0MDAwMDI5MjIyODAwMDAwMDAwRTYKKzoxMDBCQTAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMDAwMDAwMDFDOTcKKzoxMDBCQjAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMTAKKzoxMDBCQzAwMDAwMDAwMEZEMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDQKKzoxMDBCRDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDFFN0UKKzoxMDBCRTAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwRTAKKzoxMDBCRjAwMDAwMDAwMTBCMDAwMEEzMEYwMDIwNDQxMTAwMDAwMDAwQzIKKzoxMDBDMDAwMDAwMDAwMDExMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDAxNzcKKzoxMDBDMTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwQjQKKzoxMDBDMjAwMDAwMDAwMTA0RkZGRkZGRkYwMDQwNDgxMTAwMDAwMTBCMUUKKzoxMDBDMzAwMDAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDBDNDAwMDBDQzAwMDAwMDAwMDAxMDcwMDAwRkZGRjAwNDA0ODExMzkKKzoxMDBDNTAwMDAwMDAwMTBCMDAwMDAwMDQwMDJGMDIyMzAwMDAwMDAwMzAKKzoxMDBDNjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDEwQTAwMDAwMEZGQUUKKzoxMDBDNzAwMDAwNDA0ODExMDAwMDAxMEIwMDAwMDAwMTAwMjA0ODExNTUKKzoxMDBDODAwMDAwMDAwMDAwMDAwMkM0MDAwMDIwNDQxMTAwMDAwMDAwMjkKKzoxMDBDOTAwMDAwMDAwMDFGMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDBDQTAwMDE0QzAwMDAwMDAwMDAxMTIwMDAwMDAxMDQwMjEwRTIwQkUKKzoxMDBDQjAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwQTgKKzoxMDBDQzAwMDAwMDAwMDE4NDAyMjRBMjAwMDAwMDAwMDAwMDAwMDEwMzAKKzoxMDBDRDAwMEMwNDI0QTIwMDAwMDAxMTQwMDAwMDAwMDAwMjAwQzExNTYKKzoxMDBDRTAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwNzgKKzoxMDBDRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDBEMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQTAwMjAxMDExMUYKKzoxMDBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwN0UKKzoxMDBEMjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDExQjAwMDAwMDAwQkIKKzoxMDBEMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTAwNTMxMjI0QjAKKzoxMDBENDAwMDAwMDAwMTE3RkZCRkZGRkYwMDI4M0EyRTAwMDAwMDAwM0YKKzoxMDBENTAwMDAwMDAwMDFCMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDBENjAwMDE0QzAwMDAwMDAwMDAxMkU4MTAwMDAwMDAwMjA0NDExOEEKKzoxMDBENzAwMDAwMDAwMDAwMDAwMDAwMEQwMDIwNDgxMTAwMDAwMDAwRUQKKzoxMDBEODAwMDAwMDAwMDE4MDAyMjBFMzAwMDAwMDAwMEZDMDAwMDAwRUYKKzoxMDBEOTAwMDAwMjgwRTIzMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDQKKzoxMDBEQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwQkMKKzoxMDBEQjAwMDAwMDAwMDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDBFMDUKKzoxMDBEQzAwMDAwMjA0NDExMDAwMDAwMDAwN0Y4RkYwODAwMjA0ODExMkYKKzoxMDBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NEEyMzAwMDAwMDAwN0QKKzoxMDBERTAwMDAwMDAwMDFDMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA4NzQKKzoxMDBERjAwMDAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRTgKKzoxMDBFMDAwMDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDAwMDAwMDAwMzkKKzoxMDBFMTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDBFMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwQzkKKzoxMDBFMzAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDBFNDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDOEIKKzoxMDBFNTAwMDAwMjA0NDExMDAwMDAwMDAwMDgwMDAwMDAwMjA0ODExMjQKKzoxMDBFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNjAwMDAwMDAwMTQKKzoxMDBFNzAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDBFODAwMDE3MDAwMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExRjIKKzoxMDBFOTAwMDAwMDAwNjhBMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwNTAKKzoxMDBFQTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDY4OTAwMDAwMDA0REIKKzoxMDBFQjAwMDAwNDA0QzExMDAwMDAxMzU4MTAwMDAwMDAwMjA0NDExNjkKKzoxMDBFQzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQTgKKzoxMDBFRDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFDNjgKKzoxMDBFRTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExQjYKKzoxMDBFRjAwMDAwMDAwNjhBMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwRkUKKzoxMDBGMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDEzQzAwMDAwMDAwQjAKKzoxMDBGMTAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRjEKKzoxMDBGMjAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTAwMDAwMzE1MjkKKzoxMDBGMzAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDBGNDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwNjAwMDAwMTUKKzoxMDBGNTAwMDAwMDAwMTYwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwOUMKKzoxMDBGNjAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNjAKKzoxMDBGNzAwMDQwMjgwNjIwMDAwMDAwMDAwMDAwMDAxMEMwMjEwQTIwQzgKKzoxMDBGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0MTQ2MTAwMDAwMDAwQjgKKzoxMDBGOTAwMDAwMDAwMDAwMDA3NDE4ODIwMDAwMDJCQjAwMDFBMUZERTcKKzoxMDBGQTAwMDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjAwMkYwMjJGMEMKKzoxMDBGQjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTQ3MUQKKzoxMDBGQzAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwMUMKKzoxMDBGRDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMzEKKzoxMDBGRTAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwQjQKKzoxMDBGRjAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAzRkZGODcKKzoxMDEwMDAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwOTQKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTYwMEYKKzoxMDEwMjAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMDAwMDBGRkZGMjMKKzoxMDEwMzAwMEMwMjgxMjIwMDAwMDAwMDAwMDAwMDAxMDQwMjExNjIwRUYKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMEZGRkZDMDY4MUEyMDAwMDAwMkJCODMKKzoxMDEwNTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMUMKKzoxMDEwNjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNTQKKzoxMDEwNzAwMDAwMDAwMTU4MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMTIKKzoxMDEwODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNkMKKzoxMDEwOTAwMDAwMzAwQTJGMDAwMDAwMDAwMDAwMDAwMTAwMjEwQTIyOTkKKzoxMDEwQTAwMDAwMDAwMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwOTkKKzoxMDEwQjAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMjkKKzoxMDEwQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOTUKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMTAwMDAwMDAwMzYKKzoxMDEwRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwOTUKKzoxMDEwRjAwMDAwNjAwMDAwMDAwMDAxOEYwMDAwMDAwMDAwNjAwMDAwQTAKKzoxMDExMDAwMDAwMDAwMUEwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwQTAKKzoxMDExMTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDExMjAwMDAwMjAyQzA4MDAwMDAwMDAwMDAwMDAwMDAwMjAyNDExMTYKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjgxMTAwMDAwMDAwNTYKKzoxMDExNDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2OUMKKzoxMDExNTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMjMKKzoxMDExNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwMDMKKzoxMDExNzAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyRTUKKzoxMDExODAwMDAwMjIxRTI5MDAwMDAwMDAwMDAwMDAwMDAwNzA0OEVCNTMKKzoxMDExOTAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkJCOTUKKzoxMDExQTAwMDAwMDAwMDAxNDAzMzA2MjAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDExQjAwMEMwMzAyNDA5MDAwMDAwMDAwMDAwM0ZGRjAwMkYwMjJGNzQKKzoxMDExQzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMzMKKzoxMDExRDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzAwMDAwMDAwMEEKKzoxMDExRTAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQzMKKzoxMDExRjAwMDAwMDAwMTgxMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBRDIKKzoxMDEyMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDE4Njk1MDAwMDAwODIKKzoxMDEyMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDcKKzoxMDEyMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTg2NEIKKzoxMDEyMzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxODUKKzoxMDEyNDAwMDAwNTMwNjIxMDAwMDAxODI5MjAwMDAwMDAwMjA0NDExOUEKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwMTk3OEUKKzoxMDEyNjAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDExNTkKKzoxMDEyNzAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDAwMDAwNzgwNDJBNzUKKzoxMDEyODAwMDAwMDAwMkZCMDAwMDAwMDAwMDIwMjgwOTAwMDAwMDAwMTAKKzoxMDEyOTAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDEyQTAwMDBDQzAwMDAwMDAwMDAxNzQwMDAwMDAwMEMwNDAwNDAwRjkKKzoxMDEyQjAwMDAwMDAwMDAxMDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1OEUKKzoxMDEyQzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDEyRDAwMDBDRTAwMDAwMDAwMDAxOTQwMDAwMDAxNUMwMjAzNjIwNDIKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMTZDMDIwMzYyMDAwMDAwMDAwQjIKKzoxMDEyRjAwMDNGODAwMDAwMDAyMDA0MTEwMDAwMDAwMDQ2MDAwMDAwQjQKKzoxMDEzMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwODAwMDAwMzEKKzoxMDEzMTAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwQkIKKzoxMDEzMjAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDEzMzAwMDBDQzAwMDAwMDAwMDAxOUIwMDAwMDAwMTAwODA0ODExNkIKKzoxMDEzNDAwMDAwMDAwMDAwMDAwMDAwMjEwMDgwNDgxMTAwMDAwMDAwQTMKKzoxMDEzNTAwMDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwRTkKKzoxMDEzNjAwMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjQwMjgxNjIwQ0UKKzoxMDEzNzAwMDAwMDAwMDAwMDAwMDAwMTBDMDgxMUEyMDAwMDAwMDAwRTIKKzoxMDEzODAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2NjEKKzoxMDEzOTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwODAwMjIxRTMwNUMKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwMjkwMDIwMUEyRDAwMDAwMDAwQUQKKzoxMDEzQjAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRkJGRjA5RDYKKzoxMDEzQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwRjAwMjAyMjJEMjYKKzoxMDEzRDAwMDAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyODAwMDAwMDAwNTQKKzoxMDEzRTAwMDAwMDAwMDA2MDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDEzRjAwMDAwMjkyMEU4MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA4NEMKKzoxMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDE0MTAwMDA2MEEwMjAwMDAyOTRBMjYwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDE0MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExQ0EKKzoxMDE0MzAwMDAwMDAwMDAwMDAwMDAxMDAwMDIwMTgxMTAwMDAwMDAwNjIKKzoxMDE0NDAwMDAwMDAwMDA4MDA2MjFFMjgwMDAwMDEyRjAwMDAwMDA4QjQKKzoxMDE0NTAwMDAwODIyMjI4MDAwMDAwMDAwMDAyQzAwMDAwMjA0NDExODkKKzoxMDE0NjAwMDAwMDAwMDAwMDAwMDAwMTUwMDYwMEUyRDAwMDAwMUJEMEUKKzoxMDE0NzAwMDAwMDAwMDE2MDA2MDBFMkQwMDAwMDFCRDAwMDBDMDA4MzUKKzoxMDE0ODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzUKKzoxMDE0OTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMUI5QkUKKzoxMDE0QTAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDE0QjAwMDAwMjA0ODAxMDAwMDAwMDAzOTAwMDAwMDAwMjA0ODExMTEKKzoxMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQTMKKzoxMDE0RDAwMDAwMDAwMDAwMDA4MDQ4MDIwMDAwMDAwMDAwMDAwMDE4MkEKKzoxMDE0RTAwMDAwMjAyRTJEMDAwMDAwMDAwMDAwMDAwMDAwM0IwRDYzRDYKKzoxMDE0RjAwMDAwMDAwMDAwMDAwMDAwMDgwMDIyNEEyMzAwMDAwMDAwNTUKKzoxMDE1MDAwMDAwMDAwMDEwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDE4MjQKKzoxMDE1MTAwMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAwMDAwODA0ODAzNzEKKzoxMDE1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCNTAKKzoxMDE1MzAwMDAwMDAxMDAwMDA2MDA0MTEwMDAwMDMxNTAwMDAwMDAwMEUKKzoxMDE1NDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExRUQKKzoxMDE1NTAwMDAwMDAwMUIyMDAwMDAwMDcwMDIxMDYyRjAwMDAwMDAwN0IKKzoxMDE1NjAwMDAwMDAwMDEzMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAxMTAKKzoxMDE1NzAwMDAwMjAyQzExMDAwMDAwMDAwMDAwRkZGRjQwMjgyMjIwNjYKKzoxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMEYwMDI2MjIyODAwMDAwMDAwREMKKzoxMDE1OTAwMDAwMDAwMDEwNDAyMTI2MjAwMDAwMDAwMDAwMDAwMDBGODUKKzoxMDE1QTAwMDAwMjYyNjI5MDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyN0MKKzoxMDE1QjAwMDAwMDAwMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwM0UKKzoxMDE1QzAwMDAwMDAwMDFCMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDE1RDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQ0QKKzoxMDE1RTAwMDAwMDAwMUUwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMjcKKzoxMDE1RjAwMDAwMDAwMDgxMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDNTQKKzoxMDE2MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRUIKKzoxMDE2MTAwMDAwMDAwMDAwMDAwMDAwODAwMDIwMUMxMTAwMDAwMDAwRkQKKzoxMDE2MjAwMDAwMDAwMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDE2MzAwMDBDRTAwMDAwMDAwMDAxREMwMDAwMDAwMDAwNjAwMDAwODEKKzoxMDE2NDAwMDAwMDAwMUU5MDAwMDAwMDEwMDUzMUUyNzAwMDAwMUQ4M0UKKzoxMDE2NTAwMDAwMDAwMDAxMDAyMDJDMTEwMDAwMDAwMDAwMDAwMDFGMEQKKzoxMDE2NjAwMDAwMjgwQTIyMDAwMDAwMDAwMDAwMDAxRjAwMjgyQTJBOEIKKzoxMDE2NzAwMDAwMDAwMDAwMDAwMDAwMDEwMDUzMDYyMTAwMDAwMUQxMUQKKzoxMDE2ODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyNjUKKzoxMDE2OTAwMDAwMzA0QTJGMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOEYKKzoxMDE2QTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzAKKzoxMDE2QjAwMDAwMDAwMDAxMDAzMDFFMkYwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE2QzAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDYKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUU5QzAKKzoxMDE2RTAwMDAwMDAwMDAxMDA1MzFFMjcwMDAwMDFFNTAwMDBGRkZGN0QKKzoxMDE2RjAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAwRjAwMjYwRTIzRUUKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwQjYKKzoxMDE3MTAwMDAwMDAwMDBGMDAyNjEyMjQwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDE3MjAwMDAwMjAxNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAxODExRUIKKzoxMDE3MzAwMDAwMDAwMkJCMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwRDgKKzoxMDE3NDAwMDAwMDAwMDAwMDAyRjAyMkIwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDE3NTAwMDBDRTAwMDAwMDAwMDAxRjgwMDAwMDAxMDAwMjIxNjI4MzQKKzoxMDE3NjAwMDAwMDAwMDAwRkZGRjAwMDAwMDI4MTYyNTAwMDAwMDAwMTgKKzoxMDE3NzAwMDAwMDBGRkZGMDAyODFBMjkwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDE3ODAwMDAwMjk0OEM1MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODBBQjEKKzoxMDE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMkMxMTAwMDAwMDAwRUMKKzoxMDE3QTAwMDAwMDAwMDEwMDAyMjE2MjMwMDAwMDAwMEZGRkYwMDAwRDAKKzoxMDE3QjAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwRkZGRjAwMjgxQTI0NjIKKzoxMDE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDhDNTAwMDAwMDAwRTMKKzoxMDE3RDAwMDAwMDAwMDAwMDA3MzE1MDMwMDAwMDIwNTAwMDAwMDAwNzcKKzoxMDE3RTAwMDAwMjAxODA1MDAwMDAwMDAwMDAwMDAwMDAwNzMxNTI0MTAKKzoxMDE3RjAwMDAwMDAwMjA1MDAwMDAwMDAwMDJEMTRDNTAwMDAwMDAwREMKKzoxMDE4MDAwMDAwMDAwMDAwMDAzMDA4QTIwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDE4MTAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyMTQKKzoxMDE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjAwMzAwMDAwMDAwNzUKKzoxMDE4MzAwMDAwMDAwMDAwMDA4MDI0MDQwMDAwMDAwMDAwMDAwMDBGRjEKKzoxMDE4NDAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwN0MKKzoxMDE4NTAwMDAwMDAwNjg5MDAwMDAwMDAwMDJCMTQwNTAwMDAwMDAwQjUKKzoxMDE4NjAwMDAwMDAwMDAxMDA5MDE2MjUwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE4NzAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExODgKKzoxMDE4ODAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMEIKKzoxMDE4OTAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAyMjU2QTQKKzoxMDE4QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTAwMjk0QTIyMTQKKzoxMDE4QjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwNDgKKzoxMDE4QzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDE4RDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzgKKzoxMDE4RTAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDUKKzoxMDE4RjAwMDAwMDAwMDAzMDAzODRBMjEwMDAwMDAwMDAwMDBBMUZDQTUKKzoxMDE5MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRTgKKzoxMDE5MTAwMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTIyMDAwMDAwMDAwMkYKKzoxMDE5MjAwMDAwMDAwMDEwQzAyMTFBMjAwMDAwMDAwMDAwMDBGRkZGOEUKKzoxMDE5MzAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEMwMjExNjIwRUEKKzoxMDE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MTQ2NTAwMDAwMkJCRUQKKzoxMDE5NTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAwMDAxNTAKKzoxMDE5NjAwMDAwMzMwNjIxMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxQ0IKKzoxMDE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMjE5ODAKKzoxMDE5ODAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDE5OTAwMDBDQzAwMDAwMDAwMDAyMTIwMDAwMDAwMEMwNDAwNDAwNjMKKzoxMDE5QTAwMDAwMDAwMDAxMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQyOEUKKzoxMDE5QjAwMDAwMDAwMDAwMDA0MDA0MEYwMDAwMDIxMzAwMDAwMDAwQkYKKzoxMDE5QzAwMDAwNjAwMDAwMDAwMDA2MkUwMDAwMDAwMDAwNjAwMDAwMjMKKzoxMDE5RDAwMDAwMDAwNjQyMDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1MjAKKzoxMDE5RTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFBMDAwMDAwMDAwRjYKKzoxMDE5RjAwMDAwNjAwMDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwOEEKKzoxMDFBMDAwMDAwMDAwMkJCMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMTQKKzoxMDFBMTAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDFBMjAwMDAwMjA0ODA4MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGRTYKKzoxMDFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjMyODgKKzoxMDFBNDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQTAwMDAwMDAwRkIKKzoxMDFBNTAwMDAwNDAwMDAwMDAwMDAyMzY5NTAwMDAwMDAwMjA0NDExMDQKKzoxMDFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRjAwMDAwMDAwMTYKKzoxMDFBNzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDIzNjAwMDAwMDAwNDIKKzoxMDFBODAwMEMwNDA0ODAwMDAwMDAyMzM5MjAwMDAwMDAwMjA0NDExRDIKKzoxMDFBOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMUUKKzoxMDFBQTAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MzMKKzoxMDFBQjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExQkEKKzoxMDFBQzAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwOUEKKzoxMDFBRDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRjMKKzoxMDFBRTAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExNjkKKzoxMDFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkZCNzQKKzoxMDFCMDAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwRDAKKzoxMDFCMTAwMDAwNjAwMDAwMDAwMDA2MkUwMDAwQTAwQzAwMjA0NDExMTAKKzoxMDFCMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwOEQKKzoxMDFCMzAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDFCNDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxODQwMjEwQTIwODcKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwMDMwMDJGMDIyMjAwMDAwMDAwMkYKKzoxMDFCNjAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDI0QzAwMDAwMDE0MjkKKzoxMDFCNzAwMDAwMjAyMjJEMDAwMDAwMDAwMDA4MDEwMTAwMjkyMjI4NzkKKzoxMDFCODAwMDAwMDAwMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwQzMKKzoxMDFCOTAwMDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDFCQTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTUKKzoxMDFCQjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMjUxOEEKKzoxMDFCQzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDEwOUEKKzoxMDFCRDAwMDAwNjAwNDExMDAwMDAzMTUzRjgwMDAwMDAwMjAwNDExODQKKzoxMDFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyQzkKKzoxMDFCRjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRUYKKzoxMDFDMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRkIKKzoxMDFDMTAwMDAwMDAwMjdDMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQzQKKzoxMDFDMjAwMDAwMDAwMDAxMDAyMTFFMjcwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDFDMzAwMDE0RTAwMDAwMDAwMDAyNkEwMDAwMDAxMjAwMjAxRTJEQzcKKzoxMDFDNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MUUyNzAwMDAwMDAwMjkKKzoxMDFDNTAwMDAwMDAwMDAwMDAzNDFDMjcwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDFDNjAwMDEyQzAwMDAwMDAwMDAyNUYwMDAwMDAwMDAwMjAxQzExRjQKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNTAwMDAwMDAwNTAKKzoxMDFDODAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2MjAwMDAwMDAwMjgKKzoxMDFDOTAwMDAwMjAxNDA3MDAwMDAwMDAwMDAwMDAxMjAwMjAxRTJEOEMKKzoxMDFDQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMUUyNzAwMDAwMDAwQkUKKzoxMDFDQjAwMDAwMDAwMDAwMDAzNDFDNDcwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDFDQzAwMDEyQzAwMDAwMDAwMDAyNjcwMDAwMDAwMDAwMjAxQzExOEMKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwRUYKKzoxMDFDRTAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2QTAwMDAwMDAwQzAKKzoxMDFDRjAwMDAwMjAxODA3MDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwNDUKKzoxMDFEMDAwMDAwMDAwMkMxMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMjMKKzoxMDFEMTAwMDAwMDAwMDAwMDAzNDIwMjMwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDFEMjAwMDEyQzAwMDAwMDAwMDAyNzIwMDAwMDAwMDAwMzQyMDQ0RDUKKzoxMDFEMzAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjcxNUUKKzoxMDFENDAwMDAwMDAwMDE2MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE4NTQKKzoxMDFENTAwMDAwNDA0ODExMDAwMDAyNzYwMDAwMDAwMDAwMzQyMDQ0REEKKzoxMDFENjAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjc1MkEKKzoxMDFENzAwMDAwMDAwMDE3MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE5MjIKKzoxMDFEODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExQzgKKzoxMDFEOTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzkKKzoxMDFEQTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFOTAwMDAzRkZGQjYKKzoxMDFEQjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwRjcKKzoxMDFEQzAwMDAwMDAwMjU2MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxQjYKKzoxMDFERDAwMDAwMDAwMDEwNDAyMTA2MjAwMDAwMDAwMDAwMDBGRkZGNkUKKzoxMDFERTAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwNDIKKzoxMDFERjAwMDAwMDAwMDAwMDAwMEZGRkZDMDI4MTIyMDAwMDAwMDAwQ0IKKzoxMDFFMDAwMDAwMDAwMDEwNDAyMTE2MjAwMDAwMDAwMDAwMDBGRkZGMkQKKzoxMDFFMTAwMEMwODgxQTIwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNEEKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMzgKKzoxMDFFMzAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDAwMzUKKzoxMDFFNDAwMDAwNjAwMDAwMDAwMDA2MkUwMDAwMDAwMEMwNjAwMDAwREUKKzoxMDFFNTAwMDAwMDAwMkEzMDAwMDAwMDUwMDIwMEEyRDAwMDAwMDAwODEKKzoxMDFFNjAwMDAwMDAwMDA4MDAyMjBBMjIwMDAwMDAwMDAwMDAwMDJCRjEKKzoxMDFFNzAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAxQzAwMjAxRTJENzQKKzoxMDFFODAwMDAwMDAwMDAwMDAwMDcwMDAwMDI4MUUyNzAwMDAwMDAwNzUKKzoxMDFFOTAwMDAwMDAwMDAwMDAzMTFDRTYwMDAwMDAwMDAwMDAwMDJBRTUKKzoxMDFFQTAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAwQzAwMjIxQTI2NUQKKzoxMDFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwMEQKKzoxMDFFQzAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDI5MjAwMDAwMDAwOTgKKzoxMDFFRDAwMDAwMjAxQzExMDAwMDAwMDAwMDAwMDAwMDAwMjAwQzExNzgKKzoxMDFFRTAwMDAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMzAwMDAwMDAwNEUKKzoxMDFFRjAwMDAwMDAwMDEwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDFGMDAwMDAwNjkxQ0UyMDAwMDAxMkY5MzgwMDAwMDAwMjA0NDExQjIKKzoxMDFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwNTIKKzoxMDFGMjAwMDk1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDFGMzAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwNTUKKzoxMDFGNDAwMDAwMDAwMjlEMDAwMDAwMDEwMDMzM0UyRjAwMDAwMDAwNTEKKzoxMDFGNTAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDkyMDAwMDAwQ0UKKzoxMDFGNjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRDQKKzoxMDFGNzAwMDAwMDAwMDAwMDAwMDAwMUMwMDQwMzYyNzAwMDAwMDAwQTgKKzoxMDFGODAwMDAwMDAwMDBDQzAyMjBBMjAwMDAwMDAwMDAwMDAwMDI5MTAKKzoxMDFGOTAwMDAwMjAzNjIyMDAwMDAwMDAwMDAwMDAyOEMwNDAzNjIwNEIKKzoxMDFGQTAwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwNzYKKzoxMDFGQjAwMDAwMDAwMDA5MDAyMDQ4MTEwMDAwMDAwMEExMDAwMDAwRkUKKzoxMDFGQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExQzIKKzoxMDFGRDAwMDAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwNzUKKzoxMDFGRTAwMDAwMDAwMDAwMDAyQzFDRTMwMDAwMDAwMDAwMDAwMDIxQTUKKzoxMDFGRjAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyMjAwMjAxRTJERDcKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDMUNFNDAwMDAwMDAwQTQKKzoxMDIwMTAwMDAwMDAwMDIyMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIzRkUKKzoxMDIwMjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEEzNTEKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwNEYKKzoxMDIwNDAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDI0Q0MKKzoxMDIwNTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAKKzoxMDIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwMUYKKzoxMDIwNzAwMDAwMDAwMDI0MDA4MDM2MjcwMDAwMDAwMDAwMDAwMDIxM0UKKzoxMDIwODAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyMjAwMjAzNjI0M0IKKzoxMDIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzAwMDAwMDAwNTAKKzoxMDIwQTAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIwQjAwMDAwMzExQ0M0MDAwMDAwMDAwMDAwMDAyNDAwODAzNjI3MEUKKzoxMDIwQzAwMDAwMDAwMDAwMDAwMDAwMUEwMDIwMzYyNzAwMDAwMDAwNzkKKzoxMDIwRDAwMDAwMDAwMDFCMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDE3NTAKKzoxMDIwRTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3MzkKKzoxMDIwRjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMkRDMkUKKzoxMDIxMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJEOTAwMDAwMDFBOUEKKzoxMDIxMTAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAxQjAwMjAzNjI4QTkKKzoxMDIxMjAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwMkQKKzoxMDIxMzAwMDAwMDAwMDAyMDAyMTAyMjcwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDIxNDAwMDE0RTAwMDAwMDAwMDAyRDkwMDAwMDAwMzAwMjEwMjI3NzMKKzoxMDIxNTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMkRDQUQKKzoxMDIxNjAwMDAwMDAwMDIzMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDIxNzAwMDAwMkUwMEUxMDAwMDAwMDAwMDAwMDAwMDAyQzAwMDAwOEUKKzoxMDIxODAwMDAwMDAwMkRDMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwRTUKKzoxMDIxOTAwMDAwMDAwMDAwMDAzMTIwQTEwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDIxQTAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMDA2QzAwMDAwNTMKKzoxMDIxQjAwMDAwMDAwMkRDMDAwMDAwMjQwMDIwMUUyRDAwMDAwMDAwQjIKKzoxMDIxQzAwMDAwMDAwMDAwMDAyRTAwRTIwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIxRDAwMDAyQzAwMDAwMDAwMDAyREMwMDAwMDAyMjAwMjAxRTJERDIKKzoxMDIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwREMKKzoxMDIxRjAwMDAwMDAwMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDIyMDAwMDA2QzAwMDAwMDAwMDAyREMwMDAwMDAwMDAwNjAwMDAwQ0EKKzoxMDIyMTAwMDAwMDAwNjY1MDAwMDAwMDAwMDYwMDAwMDAwMDAwMkI1M0MKKzoxMDIyMjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDAwOEUKKzoxMDIyMzAwMDAwNjAwMDAwMDAwMDAyQjUwMDAwMDAwMDAwNjAwMDAwMjcKKzoxMDIyNDAwMDAwMDAwNjVDMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFMEMKKzoxMDIyNTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBNzAwMDAwMDAwNzUKKzoxMDIyNjAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAxQTAwMjAxRTJEQzkKKzoxMDIyNzAwMDAwMDAwMDAwMDAwMDAwMUIwMDgwMjIyRDAwMDAwMDAwNzQKKzoxMDIyODAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDIyOTAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTYKKzoxMDIyQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwQjcKKzoxMDIyQjAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDEwMTYKKzoxMDIyQzAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0OTYKKzoxMDIyRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwOEUKKzoxMDIyRTAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDUKKzoxMDIyRjAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3ODMKKzoxMDIzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwNUMKKzoxMDIzMTAwMDAwMDAwMDAwMDAyOTQ4NDcwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDIzMjAwMDAwMzExQ0EzMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3NDYKKzoxMDIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwQTUKKzoxMDIzNDAwMDAwMDAwMDAwMDAzMTFDQTEwMDAwMDAwMDAwMDAwMDEwOEYKKzoxMDIzNTAwMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAwMDAwMjk0ODQ3NUUKKzoxMDIzNjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwRkEKKzoxMDIzNzAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDAwMDBGRkZGNEEKKzoxMDIzODAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3NjIKKzoxMDIzOTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwQ0MKKzoxMDIzQTAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMDAwMDBGRkZGMUMKKzoxMDIzQjAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwODk0OTA3RDIKKzoxMDIzQzAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwOUEKKzoxMDIzRDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxMDQKKzoxMDIzRTAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzMwOEEyQzMKKzoxMDIzRjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwNkIKKzoxMDI0MDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDI0MTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTMKKzoxMDI0MjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMzUKKzoxMDI0MzAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxQTMKKzoxMDI0NDAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzAwOEEyNjUKKzoxMDI0NTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwMEEKKzoxMDI0NjAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDI0NzAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzNzAKKzoxMDI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMzcKKzoxMDI0OTAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDI0QTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzgwOEM1QUUKKzoxMDI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDg0MTAwMDAwMDAwQTMKKzoxMDI0QzAwMDAwMDAwMDAxMDAyMjBBMjIwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI0RDAwMDAwMzMwOEEyMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyQUQKKzoxMDI0RTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwNzcKKzoxMDI0RjAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDE3RUMKKzoxMDI1MDAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwODgKKzoxMDI1MTAwMDAwMDAwMzE4RkZGRkZGRUYwMDI4MDYyMTAwMDAwMDAwNjUKKzoxMDI1MjAwMDAwMDAwMDE0MDAyMDIyMkQwMDAwMDAwMDAwMDBGOEUwNTAKKzoxMDI1MzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTAxQjMKKzoxMDI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwMTAwMDAwMDAwQjgKKzoxMDI1NTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDI1NjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwODA0ODExMDcKKzoxMDI1NzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwN0IKKzoxMDI1ODAwMDk3MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDI1OTAwMEMwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDMKKzoxMDI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQjIKKzoxMDI1QjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDI1QzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRDEKKzoxMDI1RDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRDMKKzoxMDI1RTAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDI1RjAwMDAwQTAwMDBBMDAwMDAwMDA5NzAwMDAwMDAwMjA0NDExMjUKKzoxMDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNTEKKzoxMDI2MTAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMDI2MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExM0UKKzoxMDI2MzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNzIKKzoxMDI2NDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDI2NTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNkUKKzoxMDI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQzAKKzoxMDI2NzAwMDk3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDI2ODAwMDAwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExRDIKKzoxMDI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQzEKKzoxMDI2QTAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDI2QjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRTAKKzoxMDI2QzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRTIKKzoxMDI2RDAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDI2RTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwRTUKKzoxMDI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMzAKKzoxMDI3MDAwMDAwMDAyMjU3MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRDgKKzoxMDI3MTAwMEMwNDg0QTIwMDAwMDAwMDAwMDAwMjI1RDAwMjA0NDExNTMKKzoxMDI3MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwNjEKKzoxMDI3MzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0MjAwMDAwMDAwRjEKKzoxMDI3NDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExQUUKKzoxMDI3NTAwMDAwMDAwMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwRDIKKzoxMDI3NjAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDI3NzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExMUQKKzoxMDI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMjAwMDAwMDAwRjYKKzoxMDI3OTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDI3QTAwMDQwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTQwMzA0QTIwQTYKKzoxMDI3QjAwMDAwMDAwMDAwMDAwMDAwMDJDMDMwNEEyMDAwMDAwMDAwQkQKKzoxMDI3QzAwMDAwMDAwMDAxMDA1MzBBMjIwMDAwMDM0QjAwMDAwMDNGRkMKKzoxMDI3RDAwMEMwMjgwQTIwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExRjEKKzoxMDI3RTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNkYKKzoxMDI3RjAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4MzMKKzoxMDI4MDAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExN0MKKzoxMDI4MTAwMDAwMDAwNjhBMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwQzQKKzoxMDI4MjAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDM1NDAwMDAwMDE0NDkKKzoxMDI4MzAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNzkKKzoxMDI4NDAwMDAwMDAwMzY0MDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwN0MKKzoxMDI4NTAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MzgKKzoxMDI4NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODAyNDkKKzoxMDI4NzAwMDAwMDAwMzZFMDAwMDIxMDAwMDIwNDQxMTAwMDAwMDAwNTEKKzoxMDI4ODAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDI4OTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTgKKzoxMDI4QTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwRTAKKzoxMDI4QjAwMDAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDI4QzAwMDBDQzAwMDAwMDAwMDAzNkEwMDAwMjAxMDAwMjA0NDExMkEKKzoxMDI4RDAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwRkYKKzoxMDI4RTAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDI4RjAwMDAwNDA0ODAyMDAwMDAzNUYwMDAwMDAyODAwMkYwMjIyNzEKKzoxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUJEMzkKKzoxMDI5MTAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDI5MjAwMDAwNDA0ODAyMDAwMDAzNUYwMDAwMDAyQzAwMjAzNjI2MTMKKzoxMDI5MzAwMDAwMDAwMDAwMDAwMDAwNDkwMDIwMTgxMTAwMDAwMDAwMDUKKzoxMDI5NDAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxQ0UKKzoxMDI5NTAwMDAwMzMxQTI2MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI2QUQKKzoxMDI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMzcwMjgKKzoxMDI5NzAwMDAwMDAwMDJDMDA4MDFBMkQwMDAwMDAwMDAwMDAwMDNGMjUKKzoxMDI5ODAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxNTAwMkYwMjIyQ0QKKzoxMDI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzg2QzIKKzoxMDI5QTAwMDAwMDAwMDA2MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDI5QjAwMDBDRTAwMDAwMDAwMDAzQjEwMDAwMDAxNjAwMkYwMjIyMEUKKzoxMDI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0I1NjMKKzoxMDI5RDAwMDAwMDAwMDIwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDI5RTAwMDBDRTAwMDAwMDAwMDAzOUMwMDAwMDAwRjAwMkYwMjIyRkEKKzoxMDI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0E4NDAKKzoxMDJBMDAwMDAwMDAwMDEwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDJBMTAwMDBDRTAwMDAwMDAwMDAzQTgwMDAwMDAxRTAwMkYwMjIyQUUKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzkwMjcKKzoxMDJBMzAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDJBNDAwMDAwNDA0ODAyMDAwMDAwMDAwODAwMDAwMDAwMjkwQTIyOUYKKzoxMDJBNTAwMDAwMDAwMDAwMDAwMDAwMDM0MDIxMEUyMDAwMDAwMDAwRTQKKzoxMDJBNjAwMDAwMDAwMDBDQzAyMTEyMjAwMDAwMDAwMDAwMDgwMDAwM0YKKzoxMDJBNzAwMDAwMjgxMjI0MDAwMDAwMDAwMDAwMDAxNEMwMjIxNjIwQ0MKKzoxMDJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MTRBNDAwMDAwMDAwNjUKKzoxMDJBOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJBQTAwMDAwMjk0OEEyMDAwMDAwMDAwMDAwQTFGRTAwMjA0NDExRkYKKzoxMDJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMzAwMDAwMDAwOEIKKzoxMDJBQzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMEYKKzoxMDJBRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExRUYKKzoxMDJBRTAwMDAwMDAwMDAwMDAwMDAwMTYwMDIwNDgxMTAwMDAwMDAwNTcKKzoxMDJBRjAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDE1NUUKKzoxMDJCMDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwN0UKKzoxMDJCMTAwMDAwMDAwMzkyMDAwMDIxMEUwMDIwNDQxMTAwMDAwMDAwN0MKKzoxMDJCMjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDJCMzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExQjIKKzoxMDJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwRkIKKzoxMDJCNTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxN0UKKzoxMDJCNjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExNUUKKzoxMDJCNzAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwNDgxMTAwMDAwMDAwQzUKKzoxMDJCODAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDAzREYKKzoxMDJCOTAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwRUUKKzoxMDJCQTAwMDAwMDAwMzlFMDAwMDIxMDgwMDIwNDQxMTAwMDAwMDAwRTYKKzoxMDJCQjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDJCQzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMjIKKzoxMDJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwNkIKKzoxMDJCRTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMDJCRjAwMDAwMjA0ODAyMDAwMDAwMDA4MDAwMDAwMDAwMjA0NDExNzYKKzoxMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNEIKKzoxMDJDMTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDEwQUUKKzoxMDJDMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwRkIKKzoxMDJDMzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0FFMEYKKzoxMDJDNDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAyMDEwMTQKKzoxMDJDNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDYKKzoxMDJDNjAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwQTgKKzoxMDJDNzAwMDAwMDAwMDA2MDA0MDQ4MTEwMDAwMDAwMDAwMDAyMDEwODUKKzoxMDJDODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDYKKzoxMDJDOTAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwNzgKKzoxMDJDQTAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM2RTAwMDAwMDAwRTQKKzoxMDJDQjAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwODAwRUMKKzoxMDJDQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMTgKKzoxMDJDRDAwMDAwMDAwMDFEMDAyMTAyMjMwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDJDRTAwMDE0RTAwMDAwMDAwMDAzQ0U4MTAwMDAwMDAwMjA0NDExMjkKKzoxMDJDRjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNUEKKzoxMDJEMDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4MUQKKzoxMDJEMTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExNjcKKzoxMDJEMjAwMDAwMDAwNjhBMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwQUYKKzoxMDJEMzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDNDMDAwMDAyMTAwQkIKKzoxMDJENDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyQTQKKzoxMDJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDgKKzoxMDJENjAwMEJBQkVDQUZFMDAyMDQ4MTEwMDAwMDAwMENBRkVCQUJFNkEKKzoxMDJENzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjAxMDAwMjA0NDExMzUKKzoxMDJEODAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwNEEKKzoxMDJEOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0NzQKKzoxMDJEQTAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMjE3MDAwMjA0NDExODQKKzoxMDJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwQTkKKzoxMDJEQzAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDgxMDAwMDAwMTcKKzoxMDJERDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwQTAwMjA0ODExRkIKKzoxMDJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwQjMKKzoxMDJERjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNEMzhDMDAwMDAwOUQKKzoxMDJFMDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExNzQKKzoxMDJFMTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDJFMjAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAzRkZGRUEKKzoxMDJFMzAwMDQwMjgwQTIwMDAwMDAwMDA4MDAwMDAwMDQwMjgwRTIwRUEKKzoxMDJFNDAwMDAwMDAwMDAwNDAwMDAwMDBDMDI4MTIyMDAwMDAwMDAwMjgKKzoxMDJFNTAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY4QTAwMDAwMDAwMEQKKzoxMDJFNjAwMDAwMjAxNDEwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzQ0EKKzoxMDJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwM0UxQTIKKzoxMDJFODAwMDAwMDAwMDAwQzA0MDE4MDAwMDAwMDNFNDAwMDAzRkZGMDUKKzoxMDJFOTAwMEMwMjgxQTIwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI2MzcKKzoxMDJFQTAwMDAwMDAwNjhBMDAwMDAwMDAwMDIwMTgxMDAwMDAwMDAwNEEKKzoxMDJFQjAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDJFQzAwMDBDQzAwMDAwMDAwMDAzRTcwMDAwMDAwMEMwNDAxQzAwMzAKKzoxMDJFRDAwMDAwMDAwM0VBMDAwMDNGRkZDMDI4MUUyMDAwMDAwMDAwQTEKKzoxMDJFRTAwMDAwMDQwMDAwMDA2OTQ2MjcwMDAwMDY4QTAwMDAwMDAwNzgKKzoxMDJFRjAwMDAwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMDAwMjA0NDAyMjAKKzoxMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MjBDNTAwMDAwMDAwQjQKKzoxMDJGMTAwMDAwMDAwMDAwMDA0OTQ4RTgwMDAwMDAwMEE1ODAwMDAwMTMKKzoxMDJGMjAwMDAwMjAwODExMDAwMDAwMDAwMDAwMjAwMDAwMjAwQzExMEIKKzoxMDJGMzAwMDAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDEyNDMKKzoxMDJGNDAwMDAwMDAwMDAwMDAyMDQ0MDIwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDJGNTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDQwMjA0ODAwQTEKKzoxMDJGNjAwMDAwMDAwMDAwMDAwMDAwMUZDMDIxMDIyMDAwMDAwMDAwM0YKKzoxMDJGNzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNGNzAwMDAyMDEwNTMKKzoxMDJGODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDMKKzoxMDJGOTAwMDAwMDAwMDAwMDAwMEZGRkZDMDQ4MTIyMDAwMDAwM0ZGRjcKKzoxMDJGQTAwMEE3ODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBBMDAwMjEKKzoxMDJGQjAwMDAwMjAwQzExMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExOUMKKzoxMDJGQzAwMDAwMDAwNDEyMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwODUKKzoxMDJGRDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDJGRTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwQTEKKzoxMDJGRjAwMDAwMDAwMDAwODMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDkKKzoxMDMwMDAwMDAwMDAwMDAwMDAzMDQ4ODMwMDAwMDAwMDg0MDAwMDAwNDEKKzoxMDMwMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMTMKKzoxMDMwMjAwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMDAwMDAwMDAwMDAwODMKKzoxMDMwMzAwMDgzMDAwMDAwMDA2MDQ0MTEwMDAwMDQxMjAwMDAwMDAwNDIKKzoxMDMwNDAwMEMwNDAwNDAwMDAwMDAwMDFBOTgwMDAwMDAwMjAwODExMTkKKzoxMDMwNTAwMDAwMDAwMDAwMDAwMEMwMDAwMDQwMEMxMTAwMDAwM0ZBNTYKKzoxMDMwNjAwMEFCODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGOEUwMjQKKzoxMDMwNzAwMDAwNDAwQzExMDAwMDAzRkFBRDgwMDAwMDAwMjAwODExOTAKKzoxMDMwODAwMDAwMDAwMDAwMDAwMEY4ODAwMDQwMEMxMTAwMDAwM0ZBNkUKKzoxMDMwOTAwMEIzODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGM0ZDRDUKKzoxMDMwQTAwMDAwNDAwQzExMDAwMDAzRkFBRjgwMDAwMDAwMjAwODExNUUKKzoxMDMwQjAwMDAwMDAwMDAwMDAwMEUwMDAwMDQwMEMxMTAwMDAwM0ZBRDYKKzoxMDMwQzAwMEIxODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGMDAwQTYKKzoxMDMwRDAwMDAwNDAwQzExMDAwMDAzRkE4MzAwMDAwMDAwMjA0NDExOUUKKzoxMDMwRTAwMDAwMDAwMDAwMDAwMDIxNDgwMDIwNDgxMTAwMDAwMDAwRkUKKzoxMDMwRjAwMDg0MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDMxMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwN0EKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMkYKKzoxMDMxMjAwMDAxMTgyMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDMxMzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOEEKKzoxMDMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRDUKKzoxMDMxNTAwMDAyMThBMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDMxNjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNUEKKzoxMDMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQTUKKzoxMDMxODAwMDAzMThDMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDMxOTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMkEKKzoxMDMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNzUKKzoxMDMxQjAwMDA0MThGOEUwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDMxQzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwRkEKKzoxMDMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNDUKKzoxMDMxRTAwMDA1MThGODgwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDMxRjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwQ0EKKzoxMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMTQKKzoxMDMyMTAwMDA2MThFMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDMyMjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOTkKKzoxMDMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRTQKKzoxMDMyNDAwMDA3MThGMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDMyNTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNjkKKzoxMDMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQjQKKzoxMDMyNzAwMDA4MThGM0ZDQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDMyODAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzkKKzoxMDMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwODQKKzoxMDMyQTAwMDAwMDAwMDMwMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDMyQjAwMEMwMjkwQzQwMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjIzMzAKKzoxMDMyQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMUEKKzoxMDMyRDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDg2MDAwMDAwQkUKKzoxMDMyRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAxRTAKKzoxMDMyRjAwMDAwMDAwMDAwODUwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMTQKKzoxMDMzMDAwMDAwMDAwMDAwMDA0MDQ4MDEwMDAwMDAwMDAwMDAyMTdDOTcKKzoxMDMzMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMTAKKzoxMDMzMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNzUKKzoxMDMzMzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDgxMDAwMDAwRTQKKzoxMDMzNDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExOEUKKzoxMDMzNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwODUKKzoxMDMzNjAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGQTIKKzoxMDMzNzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAxRjAwMjEwMjMwOTYKKzoxMDMzODAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwNjkKKzoxMDMzOTAwMDAwMDAwMDAwMDA0MDRDMDIwMDAwMDQ0ODAwMDAwMDAwNTMKKzoxMDMzQTAwMEMwMjAwQzAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxMDAwNDEKKzoxMDMzQjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTQwMDAwMDAwMDAwMTkKKzoxMDMzQzAwMDAwMDAwMDAwQzAyMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDMzRDAwMEMwMjAxQzAwMDAwMDAwMDAwMDAwN0YwMDAwMjgwQTIxMUYKKzoxMDMzRTAwMDAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwNDUKKzoxMDMzRjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ1NjAwMDAwMDAwODcKKzoxMDM0MDAwMEMwMjAyMDAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwQTUKKzoxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMTAwMDI4MEEyMzAwMDAwMDAwNDcKKzoxMDM0MjAwMDAwMDAwMDEwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDM0MzAwMDBDRTAwMDAwMDAwMDA0NUU4MTAwMDAwMDAwMjA0NDExNDgKKzoxMDM0NDAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDIKKzoxMDM0NTAwMDAwMDQwMDAwMDA2OTQ2MjQwMDAwMDY4QTAwMDAwMDAwMDUKKzoxMDM0NjAwMDAwNDAwMDAwMDAwMDA0NjM4MTAwMDAwMDAwMjA0NDExQkYKKzoxMDM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRDMKKzoxMDM0ODAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDM0OTAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMDAwNjA0ODA1MTMKKzoxMDM0QTAwMDAwMDAwNjhGMDAwMDAwMDAwMDI4MjRGMDAwMDAwMDAwNEIKKzoxMDM0QjAwMDAwMDAwMDA3MDAyODBBMjMwMDAwMDAwMDAwMDAwMDAxQUYKKzoxMDM0QzAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQkYKKzoxMDM0RDAwMDAwMDAwNDZBMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwODYKKzoxMDM0RTAwMDAwMDAwMDAwMDRFMDAwMDAwMDAwMDQ4MzAwMDAwMDAwNzEKKzoxMDM0RjAwMDAwNDAwMDAwMDAwMDA0OTAwMDAwMDAwMjAwMkYwMjIyQTMKKzoxMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDZGNUUKKzoxMDM1MTAwMDAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDM1MjAwMDAyRTAwMDAwMDAwMDA0ODMwMDAwMDAwMDAwNDAwMDAwRjIKKzoxMDM1MzAwMDAwMDAwNDkwMDAwMDAwMDMwMDJGMDIyMjAwMDAwMDAwQTEKKzoxMDM1NDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ3NDAwMDAwMDAwMTkKKzoxMDM1NTAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwODcKKzoxMDM1NjAwMDAwMDAwNDgzMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkwMDAKKzoxMDM1NzAwMDAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDM1ODAwMDBBRTAwMDAwMDAwMDA0NzkwMDAwMDAwMDAwMkYwMEM5REMKKzoxMDM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDgzQkEKKzoxMDM1QTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5MDAwMDAwMDA1NDIKKzoxMDM1QjAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQ0UKKzoxMDM1QzAwMDAwMDAwNDdFMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwODEKKzoxMDM1RDAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDQ4MzAwMDAwMDAwN0UKKzoxMDM1RTAwMDAwNDAwMDAwMDAwMDA0OTAwMDAwMDAwNjAwMkYwMjIyQUUKKzoxMDM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDgzNUEKKzoxMDM2MDAwMDAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDM2MTAwMDA4RTAwMDAwMDAwMDA0ODMwMDAwMDAwMDAwNDAwMDAwRkIKKzoxMDM2MjAwMDAwMDAwNDkwMDAwMDdGMDAwMDI4MEEyMTAwMDAwMDAwMzQKKzoxMDM2MzAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDM2NDAwMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMjEwQTIzM0EKKzoxMDM2NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNDhEMDUKKzoxMDM2NjAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNUIKKzoxMDM2NzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRkEKKzoxMDM2ODAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMTIKKzoxMDM2OTAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDM2QTAwMEMwMjA0NDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMTYKKzoxMDM2QjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwQzIKKzoxMDM2QzAwMDAwMDA3RjAwMDAyODBBMjEwMDAwMDAwMDAwMDA0NTAwRTMKKzoxMDM2RDAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQUQKKzoxMDM2RTAwMDAwMDAwNDk2MDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwNjAKKzoxMDM2RjAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMDM3MDAwMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0QzA4MjUKKzoxMDM3MTAwMDAwMDAwNDU2MDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwNjcKKzoxMDM3MjAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMDAwMDAwMDExRTkKKzoxMDM3MzAwMDQwMjExMjIwMDAwMDAwMDAwMDAwMDAxMjQwMjExNjIwNEQKKzoxMDM3NDAwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwN0EKKzoxMDM3NTAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDM3NjAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMUQKKzoxMDM3NzAwMDAwMDAwNEEwMDAwNDAwMDBDMDQ5NEEyMDAwMDAwNEExODkKKzoxMDM3ODAwMEZGRkJGRkZGQzAyODRBMjAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDM3OTAwMDAwMjEwMjIzMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwRUYKKzoxMDM3QTAwMDAwMDAwNEFEMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNDAKKzoxMDM3QjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDM3QzAwMDAwMjEwMjI0MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwREUKKzoxMDM3RDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRjMKKzoxMDM3RTAwMDAwMDAwMDBDMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDM3RjAwMDAwMjAwMDEwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQzUKKzoxMDM4MDAwMDAwMDAwNEE5QTAwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRjYKKzoxMDM4MTAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMDgxMDAwMDAwNEUKKzoxMDM4MjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNDAwMjA0ODExQTYKKzoxMDM4MzAwMDAwMDAwMDAwMDAwMDIxNkIwMDIwNDQxMTAwMDAwMDAwODcKKzoxMDM4NDAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMDgxMDAwMDAwQkYKKzoxMDM4NTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNTAwMjA0ODExNzUKKzoxMDM4NjAwMDAwMDAwMDAwMDAwMDIxNkMwMDIwNDQxMTAwMDAwMDAwNTYKKzoxMDM4NzAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDM4ODAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRjcKKzoxMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNEE3M0QKKzoxMDM4QTAwMDAwMDAwMDAwQzAyMTBBMjAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDM4QjAwMDE0QzAwMDAwMDAwMDA0QzA4MTAwMDAwMDAwMjA0NDExN0EKKzoxMDM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwN0YKKzoxMDM4RDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDM4RTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwNDgKKzoxMDM4RjAwMDAwMDAwNjhGMDAwMDAwMDAwMDQwMDAwMDAwMDAwNEM0MkIKKzoxMDM5MDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQzAKKzoxMDM5MTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MDAwMEMwMjk0NjIwREIKKzoxMDM5MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMDAwMDAwNjhBRTcKKzoxMDM5MzAwMDAwMDAwMDAxMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDM5NDAwMDE0QzAwMDAwMDAwMDA0Q0IwMDAwMjE2OTAwMjA0NDExRDUKKzoxMDM5NTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwM0YKKzoxMDM5NjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDM5NzAwMDAwMjA0ODEwMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExRjYKKzoxMDM5ODAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDQwMDAwMDAwMDAwMTMKKzoxMDM5OTAwMDAwMDAwMDAwQzA0MDQ4MTAwMDAwMDAwMDgxMDAwMDAwNEUKKzoxMDM5QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMjgKKzoxMDM5QjAwMDAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwNzkKKzoxMDM5QzAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5NTIKKzoxMDM5RDAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAwMDAwMjEwMjMwNEYKKzoxMDM5RTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNENEMzIKKzoxMDM5RjAwMDAwMDAyMTgwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDNBMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwQUUKKzoxMDNBMTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwN0UKKzoxMDNBMjAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDNBMzAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMzAwMzMzRTJGOUIKKzoxMDNBNDAwMDAwMDAwMDAwMDAwMDAwMDEwMDIxMDIyMTAwMDAwMDAwMzEKKzoxMDNBNTAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDRGRDAwMDAwMDJDNDUKKzoxMDNBNjAwMDAwMjAwQTJEMDAwMDAwMDAwMDA0MDAwMDE4RTAwQzExRTYKKzoxMDNBNzAwMDAwMDAwNEVDMDAwMDAwMDEwMDMzM0UyRjAwMDAwMDAwQjUKKzoxMDNBODAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDNBOTAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzNTEKKzoxMDNBQTAwMDAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwQjIKKzoxMDNBQjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDNBQzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExQ0YKKzoxMDNBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwN0MKKzoxMDNBRTAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4NjMKKzoxMDNBRjAwMDAwMzAwQTIyMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNDIKKzoxMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDBEOEMwNDgwMDAwMDAwNEUwRjEKKzoxMDNCMTAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDNCMjAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzQzAKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwMjEKKzoxMDNCNDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDNCNTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAyRDAwMjAxMjJEQjEKKzoxMDNCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MEM4MzAwMDAwMDAwOUQKKzoxMDNCNzAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDNCODAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzNjAKKzoxMDNCOTAwMDAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwQzEKKzoxMDNCQTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDNCQjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAxMTAwMjEwMjI0ODUKKzoxMDNCQzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwMjEKKzoxMDNCRDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDRBNzAwMDAwMDJDQ0UKKzoxMDNCRTAwMEMwMjAzNjIwMDAwMDAwMDAwMDAwMDAyREMwNDAzNjIwMUMKKzoxMDNCRjAwMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyMTAwMDAwMDAwNzIKKzoxMDNDMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDUwMjAwMDAwMDAwRDkKKzoxMDNDMTAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMEQ5MDAwMDAwNjAKKzoxMDNDMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxOEYKKzoxMDNDMzAwMEI1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAyMDAwM0EKKzoxMDNDNDAwMDAwMjA0ODExMDAwMDAwMDBCNjAwMDAwMDAwMjA0NDExRDAKKzoxMDNDNTAwMDAwMDAwMDAwMDAwMEEwMDAwMDIwNDgxMTAwMDAwMDAwNEIKKzoxMDNDNjAwMEI3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBDMDAwNjgKKzoxMDNDNzAwMDAwMjA0ODExMDAwMDAwMDBCODAwMDAwMDAwMjA0NDExOUUKKzoxMDNDODAwMDAwMDAwMDAwMDAwMEY4RTAwMDIwNDgxMTAwMDAwMDAwRTMKKzoxMDNDOTAwMEI5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGODgwN0UKKzoxMDNDQTAwMDAwMjA0ODExMDAwMDAwMDBCQTAwMDAwMDAwMjA0NDExNkMKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMEUwMDAwMDIwNDgxMTAwMDAwMDAwQUIKKzoxMDNDQzAwMEJCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGMDAwRDQKKzoxMDNDRDAwMDAwMjA0ODExMDAwMDAwMDBCQzAwMDAwMDAwMjA0NDExM0EKKzoxMDNDRTAwMDAwMDAwMDAwMDAwMEYzRkMwMDIwNDgxMTAwMDAwMDAwNkMKKzoxMDNDRjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyQ0MKKzoxMDNEMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDBGRjAwMjgwRTMwRDUKKzoxMDNEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwNEYKKzoxMDNEMjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDUxNjAwMDAwMDAwQUMKKzoxMDNEMzAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQzcKKzoxMDNENDAwMDAwMDAwNTJCMDAwMDAwMDAwMDIwMEMxMTAwMDAwMDAwMDYKKzoxMDNENTAwMDAwMDAwMDFDMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDJCQTMKKzoxMDNENjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyOTAwMjAzNjIzMzgKKzoxMDNENzAwMDAwMDAwMDAwMDAwMDAwMjgwMDIwMzYyMzAwMDAwMDAwQTIKKzoxMDNEODAwMDAwMDAwMDE3MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI1N0UKKzoxMDNEOTAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNjAwMjAzNjIzMEIKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMTUwMDIwMzYyMzAwMDAwMDAwODUKKzoxMDNEQjAwMDAwMDAwMDE2MDAyMDM2MjMwMDAwMDAwMEZGRkZFMDAwOTYKKzoxMDNEQzAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAyMTAwMjAzNjIzMUMKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyMzAwMDAwMDAwNDgKKzoxMDNERTAwMDAwMDAxRkZGMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDIzNTUKKzoxMDNERjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNDAwMjAzNjIzQUQKKzoxMDNFMDAwMDAwMDAwMDAwRjFGRkZGRkYwMDI4M0EyRTAwMDAwMDAwMzQKKzoxMDNFMTAwMDAwMDAwMDFBQzAyMjBFMjAwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDNFMjAwMDAwMjkzODZFMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExQ0QKKzoxMDNFMzAwMDAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMDMKKzoxMDNFNDAwMDAwMDAwMDJBNDAyMDM2MjAwMDAwMDAwMDg3MDAwMDAwMEIKKzoxMDNFNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQzUKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMEExRjQwMDIwNDQxMTAwMDAwMDAwNDgKKzoxMDNFNzAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDNFODAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjIzNEMKKzoxMDNFOTAwMDAwMDAwMDAwOUQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMTAKKzoxMDNFQTAwMDAwMDAwMDFGNDAyMTRBMjAwMDAwMDAwMDk2MDAwMDAwOTIKKzoxMDNFQjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNjUKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDYKKzoxMDNFRDAwMDAwMDAwMDAwQzAyMDEwMDAwMDAwMDAwMDAwMDAwMDFGRDMKKzoxMDNFRTAwMDAwMjExNjI0MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQTMKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMzYyMzAwMDAwMDAwMkMKKzoxMDNGMDAwMDAwMDAwMDAzMDAyODFFMjMwMDAwMDAwMDAwMDAwMDA4M0QKKzoxMDNGMTAwMDAwMjIyMjIzMDAwMDAwMDBGRkZGRjAwMDAwMjgyMjI4REEKKzoxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MjBFODAwMDAwMDAwNjAKKzoxMDNGMzAwMDAwMDAwMDFGMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDE4Q0MKKzoxMDNGNDAwMDAwMjExRTIzMDAwMDAwMDAwMDAwMDAyMDAwMjAzNjI3NzIKKzoxMDNGNTAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMTYyNDAwMDAwMDAwMDMKKzoxMDNGNjAwMDAwMDAwMDAwMDAzMDE0QTgwMDAwMDAwMDAwMDAwMDFFNDcKKzoxMDNGNzAwMDAwMjAzNjI1MDAwMDAwMDAwMDAwMDAwMzAwMjExQTI0NjQKKzoxMDNGODAwMDAwMDAwMDAwMTAwMDAwMDAwMDI4MUEyNjAwMDAwMDAwQjkKKzoxMDNGOTAwMEVGRkZGRkZGMDAyODNBMkUwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDNGQTAwMDAwNDkzOENFMDAwMDA2NzgwMDAwMDAwMTQwMjgwQTIwQjEKKzoxMDNGQjAwMDAwMDAwMDAwMDAwMDAwMDY0MDI4MEUyMDAwMDAwMDAwNjUKKzoxMDNGQzAwMDAwMDAwMzAwQzAyODEyMjAwMDAwMDAwMDAwMDAwMDA4Q0MKKzoxMDNGRDAwMDAwMjExMjI0MDAwMDAwMDAwMDAwMDAwMEMwMjAxNjIwNzQKKzoxMDNGRTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMUEyMDAwMDAwMDAwQjcKKzoxMDNGRjAwMDAwMDAwMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDQwMDAwMDE0QzAwMDAwMDAwMDA1NjM4MTAwMDAwMDAwMjA0NDExN0UKKzoxMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMjYKKzoxMDQwMjAwMDAwMDAyMjU4MDAzMDBBMjQwMDAwMDAwMDAwMDQwMDAwQjQKKzoxMDQwMzAwMDAwNjk0NjIyMDAwMDA2OEEwMDAwMjE2OTAwMjA0NDExMjAKKzoxMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDMKKzoxMDQwNTAwMDAwMDIwMDAwMDAyOTRBMjYwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDQwNjAwMDAwMjA0ODEwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMUYKKzoxMDQwNzAwMDAwMDAwMDAwMDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwRUEKKzoxMDQwODAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2QjAwMDAwMDAwRjQKKzoxMDQwOTAwMEMwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwMTQKKzoxMDQwQTAwMDAwMDAwNTc5MDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwM0MKKzoxMDQwQjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2QjgxMDAwMDAwNDMKKzoxMDQwQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDEKKzoxMDQwRDAwMDAwMDAwMDAwMDAwMDIyNTgwMDMwMEEyNDAwMDAwMDAwMDgKKzoxMDQwRTAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY4QTAwMDAwMDAwNkIKKzoxMDQwRjAwMEMwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwQjQKKzoxMDQxMDAwMDAwMDAwNTc5MDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwREQKKzoxMDQxMTAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2RjAwMDAwMDAwNUYKKzoxMDQxMjAwMEMwMjAxQzAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwOTMKKzoxMDQxMzAwMDAwMDAwNTc5MDAwMDAwMDQwMDJGMDIyMzAwMDAwMDAwQTkKKzoxMDQxNDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU3NzgxMDAwMDAwQTYKKzoxMDQxNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNzEKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwNEMKKzoxMDQxNzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDQxODAwMEMwNjA0ODAwMDAwMDA2OEYwMDAwMDAwMDAwNDAxQzEwQzYKKzoxMDQxOTAwMDAwMDAwNTc5MDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwQzEKKzoxMDQxQTAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDQxQjAwMDBFRTAwMDAwMDAwMDA1N0IwMDAwMDAwMDAwNjAwMDAwMzEKKzoxMDQxQzAwMDAwMDAwNUM2MDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwQ0YKKzoxMDQxRDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU4QzAwMDBBMkI3MjkKKzoxMDQxRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3RUIKKzoxMDQxRjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQzkKKzoxMDQyMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkI2RDgKKzoxMDQyMTAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAxQTAwMjEyMjMwQ0MKKzoxMDQyMjAwMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwMTAKKzoxMDQyMzAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4QTAwMDBBMkM0QUIKKzoxMDQyNDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5OTgKKzoxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNThBRUYKKzoxMDQyNjAwMDAwMDBBMkQxMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDQyNzAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJEMTAwMjA0NDExQzYKKzoxMDQyODAwMDAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwNkIKKzoxMDQyOTAwMDAwMDAwMDAxMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMDQyQTAwMDBDQzAwMDAwMDAwMDA1OUQwMDAwQTJCQjAwMjA0NDExQ0UKKzoxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwOEYKKzoxMDQyQzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRjcKKzoxMDQyRDAwMDAwMjA0ODExMDAwMDAwMDAwMDA0QTJCQTAwNjA0NDExNTAKKzoxMDQyRTAwMDAwMDAwNjhBMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwQjEKKzoxMDQyRjAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDAwMDQyMDA0MTgKKzoxMDQzMDAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTJDNTAwMjA0NDExOEMKKzoxMDQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwM0MKKzoxMDQzMjAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU5QjAwMDBBMkQyOTkKKzoxMDQzMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4NzgKKzoxMDQzNDAwMDAwMDAwMDAwMDAwMEEyRDIwMDIwNDQxMTAwMDAwMDAwODQKKzoxMDQzNTAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDAwMDAwMDAyOTgKKzoxMDQzNjAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMkMKKzoxMDQzNzAwMDAwMDAwNUFFMDAwMEEyQkYwMDIwNDQxMTAwMDAwMDAwQjQKKzoxMDQzODAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwM0QKKzoxMDQzOTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMkUKKzoxMDQzQTAwMDAwMDAwMDAwMDAwNEEyQkUwMDYwNDQxMTAwMDAwNjhBNjQKKzoxMDQzQjAwMDAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2NkEKKzoxMDQzQzAwMDAwMjIyNjMwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExOTgKKzoxMDQzRDAwMDAwMDAwNjhBMDAwMEEyQzYwMDIwNDQxMTAwMDAwMDAwNzAKKzoxMDQzRTAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDQzRjAwMDAwRTAwMDAwMDAwMDA1QUMwMDAwQTJEMzAwMjA0NDExNDIKKzoxMDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMUMKKzoxMDQ0MTAwMDAwMDBBMkQzMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQjEKKzoxMDQ0MjAwMDAwNTA0QTI4MDAwMDAwMDAwMDAwQTJDMzAwMjA0NDExRjAKKzoxMDQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwMEQKKzoxMDQ0NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNzUKKzoxMDQ0NTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0QTJDMjAwNjA0NDExQzYKKzoxMDQ0NjAwMDAwMDAwNjhBMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwMkYKKzoxMDQ0NzAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDAwMDQyMDA0OTYKKzoxMDQ0ODAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTJDNzAwMjA0NDExMDkKKzoxMDQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwQkIKKzoxMDQ0QTAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDVCQjAwMDBBMkQ0RjYKKzoxMDQ0QjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4RjcKKzoxMDQ0QzAwMDAwMDAwMDAwMDAwMEEyRDQwMDIwNDQxMTAwMDAwMDAwMDEKKzoxMDQ0RDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDg1MDAwMDAwOTQKKzoxMDQ0RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAxRUUKKzoxMDQ0RjAwMDAwMDAwMDAwMDAwMDMwNEEwMDIwNDQxMTAwMDAwMDAwQ0QKKzoxMDQ1MDAwMDAxMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDQ1MTAwMDAwNDAwMDAwMDAwMDA1QzFBNDAwMDAwMEMwMjA0NDExQkMKKzoxMDQ1MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwNDMKKzoxMDQ1MzAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDVDNjAwMDAwMDAwOTAKKzoxMDQ1NDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAyQzAwMjAzNjIxQzMKKzoxMDQ1NTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNjUKKzoxMDQ1NjAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDQ1NzAwMDAwMkYwMjMwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMEUKKzoxMDQ1ODAwMDAwMDAwNUNEMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMjQKKzoxMDQ1OTAwMDAwMDAwMDMwMDA0MDM2MjEwMDAwMDVFMDAwMDAwMDMwM0YKKzoxMDQ1QTAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwN0UwMDAwMjgwNjIxRUIKKzoxMDQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwQTkKKzoxMDQ1QzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDVFMDgxMDAwMDAwOTkKKzoxMDQ1RDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRUMKKzoxMDQ1RTAwMDAwMDAwMDAwMDAwNEEwOTIwMDYwNDQxMTAwMDAwNjhBNTAKKzoxMDQ1RjAwMDAwMDAwMDMxMDAyMDM2MzAwMDAwMDAwMDAwMDRBMDkzQ0QKKzoxMDQ2MDAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAzMjAwMjAzNjMwQUQKKzoxMDQ2MTAwMDAwMDAwMDAwMDAwNEEyQjYwMDYwNDQxMTAwMDAwNjhBRjkKKzoxMDQ2MjAwMDAwMDAwMDMzMDAyMDM2MzAwMDAwMDAwMDAwMDRBMkJBNzEKKzoxMDQ2MzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAzNDAwMjAzNjMwN0IKKzoxMDQ2NDAwMDAwMDAwMDAwMDAwNEEyQkUwMDYwNDQxMTAwMDAwNjhBQzEKKzoxMDQ2NTAwMDAwMDAwMDM1MDAyMDM2MzAwMDAwMDAwMDAwMDRBMkMyMzcKKzoxMDQ2NjAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAzNjAwMjAzNjMwNDkKKzoxMDQ2NzAwMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhBQ0QKKzoxMDQ2ODAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDNGMkYKKzoxMDQ2OTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExRTkKKzoxMDQ2QTAwMDAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwNTIKKzoxMDQ2QjAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA1M0QKKzoxMDQ2QzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGNDAwMjA0NDExNjcKKzoxMDQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjEKKzoxMDQ2RTAwMDg4MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQ0MKKzoxMDQ2RjAwMDAwMjA0ODExMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNEIKKzoxMDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMkEKKzoxMDQ3MTAwMDAwMDAwMDAxMDAyRjAyMzAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDQ3MjAwMDBDRTAwMDAwMDAwMDA2MjkwMDAwMDAzMDAwMjAwNjJERUIKKzoxMDQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMjcKKzoxMDQ3NDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYyOTgxMDAwMDAwQ0QKKzoxMDQ3NTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExNkEKKzoxMDQ3NjAwMDAwMDAwMDAwMDAwMDdFMDAwMDI4MDYyMTAwMDAwMDAwN0MKKzoxMDQ3NzAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDQ3ODAwMDBDRTAwMDAwMDAwMDA2MDIwMDAwQTA5MjAwMjA0NDExOEUKKzoxMDQ3OTAwMDAwMDAwMDAwMDAwMDAwMzEwMDIwNEEyRDAwMDAwMDAwNTEKKzoxMDQ3QTAwMDAwMDBBMDkzMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDMyMkYKKzoxMDQ3QjAwMDAwMjA0QTJEMDAwMDAwMDAwMDAwQTJCNjAwMjA0NDExOTUKKzoxMDQ3QzAwMDAwMDAwMDAwMDAwMDAwMzMwMDIwNEEyRDAwMDAwMDAwMUYKKzoxMDQ3RDAwMDAwMDBBMkJBMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDM0RDQKKzoxMDQ3RTAwMDAwMjA0QTJEMDAwMDAwMDAwMDAwQTJCRTAwMjA0NDExNUQKKzoxMDQ3RjAwMDAwMDAwMDAwMDAwMDAwMzUwMDIwNEEyRDAwMDAwMDAwRUQKKzoxMDQ4MDAwMDAwMDBBMkMyMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDM2OTkKKzoxMDQ4MTAwMDAwMjA0QTJEMDAwMDAwMDAwMDAwMDAzMDAwMjAwNjJEN0UKKzoxMDQ4MjAwMDAwMDAwMDAwMDAwMDAxRkYwMDI4MDYyMTAwMDAwMDAwMzkKKzoxMDQ4MzAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDQ4NDAwMDBDRTAwMDAwMDAwMDA2MjgwMDAwMDAwMDAwMjEwMjIxMEEKKzoxMDQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjBCNzMKKzoxMDQ4NjAwMDAwMDRBMDAzMDA2MDQ0MTEwMDAwMDY4QTAwMDBBMDAzQjkKKzoxMDQ4NzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwNEIKKzoxMDQ4ODAwMDAwMDAwMDAwMDAwMDAwMDEwMDIxMDYyMTAwMDAwMDAwREYKKzoxMDQ4OTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDYxMDAwMDRBMDEwN0EKKzoxMDQ4QTAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTAxMDAwMjA0NDExOUUKKzoxMDQ4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwODAKKzoxMDQ4QzAwMDAwMDAwMDAxMDAyMTA2MjEwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDQ4RDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwOUEKKzoxMDQ4RTAwMDAwMDAwNjI4MDAwNEEwMTEwMDYwNDQxMTAwMDAwNjhBQTAKKzoxMDQ4RjAwMDAwMDBBMDExMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDQ5MDAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxMjAwNjA0NDExQzQKKzoxMDQ5MTAwMDAwMDAwNjhBMDAwMEEwMTIwMDIwNDQxMTAwMDAwMDAwRTAKKzoxMDQ5MjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDEzNTgKKzoxMDQ5MzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTAxMzAwMjA0NDExMEEKKzoxMDQ5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwRUYKKzoxMDQ5NTAwMDAwMDRBMDE0MDA2MDQ0MTEwMDAwMDY4QTAwMDBBMDE0QTYKKzoxMDQ5NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwNUEKKzoxMDQ5NzAwMDAwMDAwMDAwMDAwNEEwMTUwMDYwNDQxMTAwMDAwNjhBMzkKKzoxMDQ5ODAwMDAwMDBBMDE1MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDQ5OTAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxNjAwNjA0NDExMzAKKzoxMDQ5QTAwMDAwMDAwNjhBMDAwMEEwMTYwMDIwNDQxMTAwMDAwMDAwNEMKKzoxMDQ5QjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDE3QzQKKzoxMDQ5QzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTAxNzAwMjA0NDExNzYKKzoxMDQ5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwNUYKKzoxMDQ5RTAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDJDMkUKKzoxMDQ5RjAwMDAwODAwNjJEMDAwMDAwMDBGRjAwMDAwMDAwMjA0NDExOTAKKzoxMDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMkQKKzoxMDRBMTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAyMUEKKzoxMDRBMjAwMDAwODA0ODExMDAwMDAwMDAwMDAwMDAwMDBFRTAwMDAwQkYKKzoxMDRBMzAwMDAwMDAwNjNBMDAwMDAwMzAwMDIwMDYyRDAwMDAwMDAwQjMKKzoxMDRBNDAwMDAwMDAwMDAyMDAyODA2MjEwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRBNTAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMTgKKzoxMDRBNjAwMDAwMDAwNjM4ODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMTIKKzoxMDRBNzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0OTQKKzoxMDRBODAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMTAwMDAwMjAwODExOTgKKzoxMDRBOTAwMDAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMjAwMDAwMDAwNzMKKzoxMDRBQTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDYzRTAwMDAwMDAwNjIKKzoxMDRBQjAwMDAwNjAwMDAwMDAwMDA1QzY5ODAwMDAwMDAwMjA0NDExQkUKKzoxMDRBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwNDgxMTAwMDAwMDAwMEQKKzoxMDRBRDAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDYzRTAwMDAwMDAwNzIKKzoxMDRBRTAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwQTJBNDAwMjA0NDExMDYKKzoxMDRBRjAwMDAwMDAwMDAwMDAwMDAwMjIwMDIwNDgxMTAwMDAwMDAwMUIKKzoxMDRCMDAwMDg5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQTYKKzoxMDRCMTAwMDAwNDA0ODExMDAwMDA2MkE5NzAwMDAwMDAwMjA0NDExQzAKKzoxMDRCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMEMKKzoxMDRCMzAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDRCNDAwMDAwNDA0ODExMDAwMDA2MkEwMDAwMDAwMDAwNjAwMDAwM0MKKzoxMDRCNTAwMDAwMDAwNjU5MDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwNTEKKzoxMDRCNjAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MDUKKzoxMDRCNzAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjAwNjA0ODExMzEKKzoxMDRCODAwMDAwMDAwMzZFMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMEYKKzoxMDRCOTAwMDAwMDEwMDAwMDAyMDQ4MTEwMDAwMDAwMDgxMDAwMDAwMUEKKzoxMDRCQTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMTYKKzoxMDRCQjAwMDAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwRTMKKzoxMDRCQzAwMDA5ODAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGRkZGRTcKKzoxMDRCRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRTMKKzoxMDRCRTAwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwQUUKKzoxMDRCRjAwMDAwMDQyMTdGMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDFGQUQKKzoxMDRDMDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwN0QKKzoxMDRDMTAwMDAwMDAwMDAwMDAwMDAwMDQwMDQwNEMxMTAwMDAwNjUzOUEKKzoxMDRDMjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDE3MkQKKzoxMDRDMzAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwNDAwMjkxRTI3OTcKKzoxMDRDNDAwMDAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwNzAKKzoxMDRDNTAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEZGRkZGRkZCREEKKzoxMDRDNjAwMDAwMjgxRTI3MDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3RTMKKzoxMDRDNzAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQjIKKzoxMDRDODAwMDAwMDAwMDA4MDAyOTFFMjcwMDAwMDAwMDAwMDAwMDE3OTcKKzoxMDRDOTAwMDAwODAzNjI3MDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEQjUKKzoxMDRDQTAwMDAwMDAwMDAwRkZGRkZGRjcwMDI4MUUyNzAwMDAwMDAwQTMKKzoxMDRDQjAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMDAwMDAyMDEwRDAKKzoxMDRDQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExNzYKKzoxMDRDRDAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMTgKKzoxMDRDRTAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM2RTAwMDAyMDEwNTQKKzoxMDRDRjAwMDAwMjA0NDExMDAwMDAwMDAwMDAxMDAwMDAwMjA0ODExQzUKKzoxMDREMDAwMDAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwOTEKKzoxMDREMTAwMDAxODAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGRkZGOUQKKzoxMDREMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExOTEKKzoxMDREMzAwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwNUMKKzoxMDRENDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNkMKKzoxMDRENTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExODEKKzoxMDRENjAwMDAwMDAwNjhBMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwNDEKKzoxMDRENzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDY4OTAwMDAwMDEwQzAKKzoxMDREODAwMDAwNDA0QzExMDAwMDA2NkYwMDAwMDAwMEMwMjAwNDAwMkQKKzoxMDREOTAwMDAwMDAwMDAwMDAwMDAwMDAzOEMwMDAwMDAwMDAwMDAwMUIKKzoxMDREQTAwMDAwMDAwMDFEMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDFFNzEKKzoxMDREQjAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxRjAwMjAxMjJEMUEKKzoxMDREQzAwMDAwMDAwMDAwMDAwMDAwMjAwMDIwMTYyRDAwMDAwMDAwNjAKKzoxMDRERDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDRERTAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA1RUEKKzoxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMTAwMDAwMDAwNEEKKzoxMDRFMDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA0RTUKKzoxMDRFMTAwMDAwMzAxMjI0MDAwMDAwMDAwMDAwMDAwMDAwMkYwMDY0OTkKKzoxMDRFMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNjg4MjgKKzoxMDRFMzAwMDAwMDAwMDAzMDAyODFBMjIwMDAwMDAwMDAwMDAwMDA4MDMKKzoxMDRFNDAwMDAwMjIxMjIyMDAwMDAwMDBGRkZGRjAwMDAwMjgxMjI0QzAKKzoxMDRFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MTBDNDAwMDAwMDAwNTUKKzoxMDRFNjAwMDAwMDAwMDFGMDA0MDM2MjQwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDRFNzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBQzAwMDAwRDgKKzoxMDRFODAwMDAwMDAwNjhBOUYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwN0UKKzoxMDRFOTAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRFQTAwMDFBRTAwMDAwMDAwMDA2OEQwMDAwMDAwMDAwODAwMDAwRjUKKzoxMDRFQjAwMDAwMDAwMDAwMDAwMDAwMDAxQUMwMDAwMDAwMDAwNjhGODMKKzoxMDRFQzAwMDlFMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFOEYKKzoxMDRFRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDFBRTAwMDAwNUYKKzoxMDRFRTAwMDAwMDAwNjkyMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwQUEKKzoxMDRFRjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAxMDAwMzcKKzoxMDRGMDAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExREYKKzoxMDRGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyNjUKKzoxMDRGMjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzOEIKKzoxMDRGMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExMEIKKzoxMDRGNDAwMDAwMDAwMDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwQ0QKKzoxMDRGNTAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxM0UKKzoxMDRGNjAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTFGREMwMjA0NDExRjQKKzoxMDRGNzAwMDAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwQTUKKzoxMDRGODAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDI0ODYKKzoxMDRGOTAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MzIKKzoxMDRGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwODgKKzoxMDRGQjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDIyNTYKKzoxMDRGQzAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDIKKzoxMDRGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwNTgKKzoxMDRGRTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDIzMjUKKzoxMDRGRjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3Q0YKKzoxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwMjcKKzoxMDUwMTAwMDAwMDAwMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDUwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDUwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDUwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDUwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDUwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDUwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDUwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDUwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDUwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDUwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDUwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDUxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDUxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDUxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDUxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDUxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDUxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDUxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDUxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDUxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDUxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDUxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDUxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDUyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDUyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDUyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDUyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDUyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDUyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDUyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDUyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDUyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDUyQjAwMDAxNDIwNEZGMDVCRDAyNTAwMDAwMDAwMDAxQzMwMTY4NjcKKzoxMDUyQzAwMDA0M0YwNUJEMDAwMDAwMDAwMjI1MDIwOTAyNTAwMTUxMDMKKzoxMDUyRDAwMDAwMDAwMDAwMDIyMzAyNDUwMkEwMDI0MTAwMDAwMDAwN0QKKzoxMDUyRTAwMDAzRDcwNUJEMDVCRDA1QkQwMDAwMDAwMDA2NDYwNjQ3MDUKKzoxMDUyRjAwMDAzMUYwNUJEMDAwMDAwMDAwNUJEMDVDMjAzMjAwMzQwREIKKzoxMDUzMDAwMDAwMDAwMDAwMDMyQTAyODIwMzQyMDMzNDAwMDAwMDAwNzAKKzoxMDUzMTAwMDA1QkQwNUJEMDVCRDA1QkQwMDAwMDAwMDA1QkQwNTRFNzAKKzoxMDUzMjAwMDA1QkQwNUJEMDAwMDAwMDAwM0JBMDVCRDA0QjgwMzQ0NzcKKzoxMDUzMzAwMDAwMDAwMDAwMDQ5NzA0NEQwNDNEMDVCRDAwMDAwMDAwN0UKKzoxMDUzNDAwMDA0Q0QwNUJEMDQ0MTA0REEwMDAwMDAwMDA0NEQwNTA0NEQKKzoxMDUzNTAwMDAzNTEwMzc1MDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJENzkKKzoxMDUzNjAwMDAwMDAwMDAwMDVCRDA1QkQwNUJEMDVCRDAwMDAwMDAwMzUKKzoxMDUzNzAwMDA1QkQwNUJEMDYzQzA1QzQwMDAwMDAwMDA1QkQwNUJEMUEKKzoxMDUzODAwMDAwMDcwNUJEMDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJENEMKKzoxMDUzOTAwMDAwMDAwMDAwMDVCRDA1QkQwNUJEMDVCRDAwMDAwMDAwMDUKKzoxMDUzQTAwMDAzRjgwM0VEMDQwODA0MDYwMDAwMDAwMDA0MEUwNDBBREMKKzoxMDUzQjAwMDA0MEMwNDEwMDAwMDAwMDAwNDFDMDQxODA0MjQwNDIwNDEKKzoxMDUzQzAwMDAwMDAwMDAwMDQyQzA0MjgwNDM0MDQzMDAwMDAwMDAwMTUKKzoxMDUzRDAwMDA1QkQwNUJEMDQzODA1QkQwMDAwMDAwMDA1QkQwNUJEQzcKKzoxMDUzRTAwMDA1QkQwNUJEMDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJEMzEKKzoxMDUzRjAwMDAwMDAwMDAwMDAwMjA2NzYwNjk0MDAwNjAwMDAwMDAwOEYKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY2MzVfcGZwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNjM1X3BmcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUyOTJjCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNjM1X3BmcC5iaW4uaWhleApAQCAtMCwwICsxLDE0NSBAQAorOjEwMDAwMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDA3QzAzOEJFRAorOjEwMDAxMDAwMDA4MDAxQjgwMDdDMDM4QjAwRDQ0MDFFMDBFRTAwMUU1RgorOjEwMDAyMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBDNDE4MzhDMworOjEwMDAzMDAwMDBDQTI0MDAwMENBMjgwMDAwOTU4MUE4MDBDNDFDM0EwOAorOjEwMDA0MDAwMDBDM0MwMDAwMENBMDgwMDAwQ0EwQzAwMDA3Qzc0NEI0QQorOjEwMDA1MDAwMDBDMjAwMDUwMDk5QzAwMDAwQzQxQzNBMDA3Qzc0NEMyQQorOjEwMDA2MDAwMDBDMEZGRjAwMDA0MkMwNDAwMzA5MDAyMDA3RDI1MDA0OQorOjEwMDA3MDAwMDAzNTE0MDIwMDdEMzUwQjAwMjU1NDAzMDA3Q0Q1ODAyQgorOjEwMDA4MDAwMDAyNTlDMDMwMDk1QzAwNDAwRDUwMDFCMDA3RUREQzE0NworOjEwMDA5MDAwMDA3RDlEODAwMEQ2ODAxQjAwRDU4MDFCMDBENDQwMUVCMworOjEwMDBBMDAwMDBENTQwMUUwMEQ2NDAxRTAwRDY4MDFFMDBENDgwMUUwMworOjEwMDBCMDAwMDBENEMwMUUwMDk3ODNEMzAwRDVDMDFFMDBDQTA4MDAxQworOjEwMDBDMDAwMDA4MDAwMUEwMENBMEMwMDAwRTQwMTFFMDBENDAwMUVDQgorOjEwMDBEMDAwMDA4MDAwMEMwMEM0MTgzODAwRTQwMTNFMDBENDAwMUU2QgorOjEwMDBFMDAwMDA4MDAwMEMwMEM0MTgzODAwRDQ0MDFFMDBFRTAwMUUzMgorOjEwMDBGMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxMUUwNAorOjEwMDEwMDAwMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDBGMQorOjEwMDExMDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTNFMDBENDAwMUU5RgorOjEwMDEyMDAwMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAyMworOjEwMDEzMDAwMDA3RTgyOEIwMENBMTgwMDAwRDQ0MDFFMDBENTgwMUVBRAorOjEwMDE0MDAwMDA4MDAwNTMwMEQ0MDA3NTAwRDQ0MDFFMDBDQTA4MDA4RgorOjEwMDE1MDAwMDBDQTBDMDAwMENBMTAwMDAwRDQ4MDE5MDBENEMwMThENgorOjEwMDE2MDAwMDBENTAwMTcwMEQ0ODAxRTAwRDRDMDFFMDBENTAwMUU4QworOjEwMDE3MDAwMDBFMjAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEI4NgorOjEwMDE4MDAwMDBDQTA4MDAwMEQ0ODA2MDAwRDQ0MDFFMDA4MDAwMDAzNworOjEwMDE5MDAwMDBENDgwMUUwMENBMDgwMDAwRDQ4MDYxMDBENDQwMUUzNAorOjEwMDFBMDAwMDA4MDAwMDAwMEQ0ODAxRTAwQ0EwODAwMDBDQTBDMDBCNQorOjEwMDFCMDAwMDBENDQwMUUwMEQ0ODAxNjAwRDRDMDE2MDBENDgwMUU4NworOjEwMDFDMDAwMDA4MDAxQjgwMEQ0QzAxRTAwQzYwODQzMDBDQTBDMDA1RAorOjEwMDFEMDAwMDBDQTEwMDAwMDk0ODAwNDAwQ0ExNDAwMDBFNDIwRjM1OAorOjEwMDFFMDAwMDBENDIwMTMwMEQ1NjA2NTAwRDRFMDFDMDBENTIwMUM4RAorOjEwMDFGMDAwMDBENTYwMUMwMDgwMDAwMDAwMDYyMDAxMDBDNjA4NDNGNgorOjEwMDIwMDAwMDBDQTBDMDAwMENBMTAwMDAwOTQ4M0Y3MDBDQTE0MDA1MgorOjEwMDIxMDAwMDBFNDIwRjMwMDgwMDA3OTAwRDQyMDEzMDBDNjA4NDNENgorOjEwMDIyMDAwMDBDQTBDMDAwMENBMTAwMDAwOTg4M0VGMDBDQTE0MDAzNgorOjEwMDIzMDAwMDBENDAwNjQwMDgwMDA4RDAwMDAwMDAwMDBDNDE0MzI2RgorOjEwMDI0MDAwMDBDNjE4NDMwMEM0MDgyRjAwOTU0MDA1MDBDNDBDMzBCOAorOjEwMDI1MDAwMDBENDQwMUUwMDgwMDAwMDAwRUUwMDFFMDA5NTgzRjVEMworOjEwMDI2MDAwMDBDNDEwMzEwMEQ0NDAzMzAwRDUyMDY1MDBENEEwMUM1OAorOjEwMDI3MDAwMDBENEUwMUMwMEQ1MjAxQzAwRTQwMTVFMDBENDAwMUU2OAorOjEwMDI4MDAwMDA4MDAwMDAwMDA2MjAwMTAwQ0ExODAwMDAwQTIwMDFCQQorOjEwMDI5MDAwMDBENjAwNzYwMEM0MDgzNjAwOTg4MDA3MDBDNjEwNDVENgorOjEwMDJBMDAwMDA5NTAxMTAwMEQ0MDAxRjAwRDQ2MDYyMDA4MDAwMDA5RgorOjEwMDJCMDAwMDBENDIwNjIwMENDMzgzNTAwQ0MxNDMzMDA4NDAxQkI1QworOjEwMDJDMDAwMDBENDAwNzIwMEQ1NDAxRTAwODAwMDAwMDBFRTAwMUUyOQorOjEwMDJEMDAwMDBFMjAwMUEwMDg0MDFCQjAwRTIwMDFBMDBDQzEwNEJCRgorOjEwMDJFMDAwMDBDQzA0NDcwMDJDOTQwMTAwN0QwOThCMDA5ODQwMDU0OAorOjEwMDJGMDAwMDA3RDE1Q0IwMEQ0MDAxQTAwODAwMUI4MDBENDAwNkQzOQorOjEwMDMwMDAwMDAzNDQ0MDEwMENDMEM0ODAwOTg0MDNBMDBDQzJDNEEwMAorOjEwMDMxMDAwMDA5NTgwMDQwMENDMDQ0OTAwODAwMUI4MDBENDAwMUE4NAorOjEwMDMyMDAwMDBENEMwMUEwMDI4MjgwMTAwODQwMEYwMDBDQzEwMDM3QgorOjEwMDMzMDAwMDA5ODgwMUIwMDA0MzgwQzAwODQwMEYwMDBDQzEwMDNFRgorOjEwMDM0MDAwMDA5ODgwMTcwMDA0MzgwODAwODQwMEYwMDBDQzEwMDNFNworOjEwMDM1MDAwMDA5ODgwMTMwMDA0MzgwNDAwODQwMEYwMDBDQzEwMDNERgorOjEwMDM2MDAwMDA5ODgwMTQwMENDMTA0QzAwOUE4MDA5MDBDQzE0NERFOQorOjEwMDM3MDAwMDA5ODQwREMwMEQ0MDA2RDAwQ0MxODQ4MDBENTAwMUE2RAorOjEwMDM4MDAwMDBENTQwMUEwMDgwMDBDOTAwRDU4MDFBMDA5NkMwRDU1QgorOjEwMDM5MDAwMDBENDAwNkQwMDgwMDFCODAwRDQwMDZFMDA5QUMwMDM0NAorOjEwMDNBMDAwMDBENDAwNkQwMEQ0MDA2RTAwODAwMDAwMDBFQzAwN0ZERgorOjEwMDNCMDAwMDA5QUMwQ0MwMEQ0MDA2RDAwODAwMUI4MDBENDAwNkU1QgorOjEwMDNDMDAwMDBDQzE0MDMwMENDMTgwMzAwQ0MxQzAzMDA3RDkxMDM2NworOjEwMDNEMDAwMDA3REQ1ODMwMDdEMTkwQzAwMzVDQzFGMDAzNTcwMUZDMgorOjEwMDNFMDAwMDA3Q0YwQ0IwMDdDRDA4QjAwODgwMDAwMDA3RThFOEJFMAorOjEwMDNGMDAwMDA5NUMwMDQwMEQ0MDA2RTAwODAwMUI4MDBENDAwMUEzQgorOjEwMDQwMDAwMDBENEMwMUEwMENDMDgwMzAwQ0MwQzAzMDBDQzEwMDNBRAorOjEwMDQxMDAwMDBDQzE0MDMwMENDMTgwMzAwQ0MxQzAzMDBDQzI0MDMzNAorOjEwMDQyMDAwMDBDQzI4MDMwMDM1QzQxRjAwMzZCMDFGMDA3QzcwNEI4MQorOjEwMDQzMDAwMDAzNEYwMUYwMDdDNzA0QjAwMzU3MDFGMDA3QzcwNEI0NworOjEwMDQ0MDAwMDA3RDg4ODEwMDdEQ0NDMTAwN0U1MTAxMDA3RTk1NDFGOAorOjEwMDQ1MDAwMDA3QzkwODIwMDdDRDRDMjAwN0M4NDhCMDA5QUMwMDMxNAorOjEwMDQ2MDAwMDA3QzhDOEIwMDJDODgwMTAwOTg4MDlFMDBENDAwNkQ0RAorOjEwMDQ3MDAwMDA5ODQwOUMwMEQ0MDA2RTAwQ0MwODRDMDBDQzBDNEQ4MQorOjEwMDQ4MDAwMDBDQzEwNDgwMEQ0ODAxQTAwRDRDMDFBMDA4MDAxMDFBQQorOjEwMDQ5MDAwMDBENTAwMUEwMENDMDgzMjAwRDQwMDMyMDA5NDgyRDk3MgorOjEwMDRBMDAwMDBDQTBDMDAwMEQ0NDAxRTAwODAwMDAwMDBENDAwMUVEMgorOjEwMDRCMDAwMDBFNDAxMUUwMEQ0MDAxRTAwQ0EwODAwMDBDQTBDMDA5RgorOjEwMDRDMDAwMDBDQTEwMDAwMEQ0NDAxRTAwQ0ExNDAwMDBENDgwMUVEMAorOjEwMDREMDAwMDBENEMwMUUwMEQ1MDAxRTAwRDU0MDFFMDBENTQwMzRGQgorOjEwMDRFMDAwMDA4MDAwMDAwMEVFMDAxRTAwMjgwNDA0MDBFMjAwMUE1NAorOjEwMDRGMDAwMDBFMjAwMUEwMEQ0NDAxQTAwQ0EzODAwMDBDQzA4MDNGOQorOjEwMDUwMDAwMDBDQzBDMDMwMENDMEMwMzAwQ0MwQzAzMDA5ODgyQkQ4MworOjEwMDUxMDAwMDAwMDAwMDAwMDg0MDFCQjAwRDdBMDZGMDA4MDAwMDAzNQorOjEwMDUyMDAwMDBFRTAwMUYwMENBMDQwMDAwQzJGRjAwMDBDQzA4MzQyNworOjEwMDUzMDAwMDBDMTNGRkYwMDdDNzRDQjAwN0NDOTBCMDA3RDAxMEYyNAorOjEwMDU0MDAwMDA5OTAyQjAwMDdDNzM4QjAwODQwMUJCMDBEN0EwNkZDMAorOjEwMDU1MDAwMDA4MDAwMDAwMEVFMDAxRjAwQ0EwODAwMDAyODE5MDBGQgorOjEwMDU2MDAwMDA3RDg5OEIwMDk1ODAxNDAwMjgxNDA0MDBDQTBDMDBCQgorOjEwMDU3MDAwMDBDQTEwMDAwMENBMUMwMDAwQ0EyNDAwMDBFMjAwMUZDQworOjEwMDU4MDAwMDBENEMwMUEwMEQ1MDAxQTAwRDU0MDFBMDBDQzE4MDNCOAorOjEwMDU5MDAwMDBDQzJDMDMwMENDMkMwMzAwQ0MyQzAzMDA3REE1OEJCRAorOjEwMDVBMDAwMDA3RDlDNDcwMDk4NDI5NzAwMDAwMDAwMDA4MDAxNjE5OAorOjEwMDVCMDAwMDBENEMwMUEwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDA2OQorOjEwMDVDMDAwMDBFRTAwMUUwMEU0MDExRTAwRDQwMDFFMDBENDQwMUVGOAorOjEwMDVEMDAwMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIxNgorOjEwMDVFMDAwMDBFNDAxM0UwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUVCOAorOjEwMDVGMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBDQTA4MDAzMAorOjEwMDYwMDAwMDAyNDhDMDYwMDBDQ0MwNjAwOThDMDA2MDBDQzEwNEVDRQorOjEwMDYxMDAwMDA5OTAwMDQwMEQ0MDA3MzAwRTQwMTFFMDBENDAwMUUwMQorOjEwMDYyMDAwMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAwMDBFRTAwMUU5QQorOjEwMDYzMDAwMDBDQTA4MDAwMENBMEMwMDAwMzREMDE4MDAyNTEwMDFDMAorOjEwMDY0MDAwMDA5NTAwMjEwMEMxN0ZGRjAwQ0ExMDAwMDBDQTE0MDBGRAorOjEwMDY1MDAwMDBDQTE4MDAwMEQ0ODAxRDAwRDRDMDFEMDA3REIxOEJERAorOjEwMDY2MDAwMDBDMTQyMDIwMEMyQzAwMTAwRDU4MDFEMDAzNERDMEU3MgorOjEwMDY3MDAwMDA3RDVENEMwMDdGNzM0QzAwRDc0MDFFMDBENTAwMUVFRQorOjEwMDY4MDAwMDBENTQwMUUwMEMxNDIwMDAwQzJDMDAwMDAwOTlDMDEwQworOjEwMDY5MDAwMDAzMURDMTAwMDdGNUY0QzAwN0Y3MzRDMDAwNDI4MDJBNworOjEwMDZBMDAwMDA3RDgzODAwMEQ1QTg2RjAwRDU4MDY2MDBENzQwMUVFRQorOjEwMDZCMDAwMDBFQzAwNUUwMEM4MjQwMjAwQzgyNDAyMDA4MDAxQjhEQgorOjEwMDZDMDAwMDBENjAwNzYwMEQ0NDAxRTAwRDQ4MDFFMDBENEMwMUU4OAorOjEwMDZEMDAwMDA4MDAwMDAwMEVFMDAxRTAwODAwMDAwMDBFRTAwMUYwMQorOjEwMDZFMDAwMDBENDAwMUYwMDgwMDAwMDAwRDQwMDFGMDBENDAwMUZCMQorOjEwMDZGMDAwMDA4ODAwMDAwMEQ0MDAxRjAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwMDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwMDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwMDgwMDAwMDAwMTAxNzEwMDAyMDE3ODAwMDMwMDhGMDAwNDAwN0ZFNQorOjEwMDgxMDAwMDAwNTAwMDMwMDA2MDAzRjAwMDcwMDMyMDAwODAxMkMxRAorOjEwMDgyMDAwMDAwOTAwNDYwMDBBMDAzNjAwMTAwMUI2MDAxNzAwQTJCOQorOjEwMDgzMDAwMDAyMjAxM0EwMDIzMDE0OTAwMjAwMEI0MDAyNDAxMjVEMAorOjEwMDg0MDAwMDAyNzAwNEQwMDI4MDA2QTAwMkEwMDYwMDAyQjAwNTI5QgorOjEwMDg1MDAwMDAyRjAwNjUwMDMyMDA4NzAwMzQwMTdGMDAzQzAxNTYwNAorOjEwMDg2MDAwMDAzRjAwNzIwMDQxMDE4QzAwNDQwMTJFMDA1NTAxNzNDRAorOjEwMDg3MDAwMDA1NjAxN0EwMDYwMDAwQjAwNjEwMDM0MDA2MjAwMzgwRAorOjEwMDg4MDAwMDA2MzAwMzgwMDY0MDAzODAwNjUwMDM4MDA2NjAwMzhGNgorOjEwMDg5MDAwMDA2NzAwMzgwMDY4MDAzQTAwNjkwMDQxMDA2QTAwNDhCQgorOjEwMDhBMDAwMDA2QjAwNDgwMDZDMDA0ODAwNkQwMDQ4MDA2RTAwNDg3NgorOjEwMDhCMDAwMDA2RjAwNDgwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDY2RgorOjEwMDhDMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYxMAorOjEwMDhEMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMAorOjEwMDhFMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZGMAorOjEwMDhGMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZFMAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjY3MF9tZS5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjY3MF9tZS5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmJmYzBlCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNjcwX21lLmJpbi5paGV4CkBAIC0wLDAgKzEsMTM0NSBAQAorOjEwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMDAxMDAwMDBBMDAwMEEwMDAwMDAwMDAwMDBGRkZGMDAyODQ2MjFBOQorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBBRgorOjEwMDAzMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwMDA0MDAwMDBBMDAwMEEwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAyNgorOjEwMDA1MDAwMDAwMDAwMDAwMDAxMDAwMEMwMjk0NjIwMDAwMDAwMDA1MAorOjEwMDA2MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMDA3MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFGMgorOjEwMDA4MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3QQorOjEwMDA5MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIwMDRCRQorOjEwMDBBMDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDAwMDAwMDA2MDAwMDBCOQorOjEwMDBCMDAwMDAwMDA2MjQwMDAwMDAwMDAwNjAwMDAwMDAwMDA2Mzg3OAorOjEwMDBDMDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDBGMDAzOQorOjEwMDBEMDAwMDAyODE2MjIwMDAwMDAwMDAwMDAwMDA4MDAyMTE2MjU1QworOjEwMDBFMDAwMDAwMDAwMDAwMDAwMDAxODAwMjAzNjI1MDAwMDAwMDA3RAorOjEwMDBGMDAwOEQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDRGQQorOjEwMDEwMDAwMDAyRjAyMjUwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBBRAorOjEwMDExMDAwMDAwMDAwMTgwMDQxMjAwMDAwNDA0ODExMDAwMDAwMTlCNAorOjEwMDEyMDAwMDA0MjIwMDAwMDIwNDgxMTAwMDAwMDAwOEUwMDAwMDA2NgorOjEwMDEzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDI4MDAyMDRBMkQ4QgorOjEwMDE0MDAwMDAwMDAwMDA5MDAwMDAwMDAwMjA0NDExMDAwMDAwMDBBQQorOjEwMDE1MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMEMyNgorOjEwMDE2MDAwMDAyMTE2MjIwMDAwMDAwMDAwMDAwMDAzMDAyODE2MjVEMAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAxOTAwMjExQTIyMDAwMDAwMDAwOQorOjEwMDE4MDAwMDAwMDAwMDQwMDI4MUEyNjAwMDAwMDAwMDAwMDAwMDAwMworOjEwMDE5MDAwMDAyOTE0QzUwMDAwMDAwMDAwMDAwMDE5MDAyMDM2MjVDOQorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0ExNDAyMDAwMDAwMDBGRgorOjEwMDFCMDAwMDAwMDAwMTYwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDNDQQorOjEwMDFDMDAwMDAyODE2MjUwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ1QQorOjEwMDFEMDAwMDAwMDAwMDBGRkZGRkZGQzAwMjgwRTIzMDAwMDAwMDBDRAorOjEwMDFFMDAwMDAwMDAwMDAwMDI5MTRBMzAwMDAwMDAwMDAwMDAwMTcxOAorOjEwMDFGMDAwMDAyMDM2MjUwMDAwMDAwMDAwMDA4MDAwMDAyODBFMjJBQworOjEwMDIwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMjIwRTIzMDAwMDAwMDA5NAorOjEwMDIxMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwMjAwMDAwMDBFRgorOjEwMDIyMDAwMDAyODBFMjIwMDAwMDAwMDAwMDAwMDA2MDAyMTBFMjMxRQorOjEwMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDBFRgorOjEwMDI0MDAwMDAwMDAwMDAwMDIyMDIyMjAwMDAwMDAwMDAwMDAwMDA2OAorOjEwMDI1MDAwMTRFMDAwMDAwMDAwMDAzODAwMDAwMDAwMkVFMDAwMDA2NAorOjEwMDI2MDAwMDAwMDAwMzUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwMzcxNgorOjEwMDI3MDAwMDAwMDAwMDAwMDQwMEUyRDAwMDAwMDM5MDAwMDAwMDhDMgorOjEwMDI4MDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDA5MDA0MDEyMkQ4QgorOjEwMDI5MDAwMDAwMDAwNDYwMDAwMDAwMTAwNDAwRTJEMDAwMDAwMzk2MworOjEwMDJBMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMyOAorOjEwMDJCMDAwMDAyODEyMjMwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQ4NworOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMDAwMDAwMDBBRAorOjEwMDJEMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDNFMDAwMDAwMDhFNAorOjEwMDJFMDAwMDA0MDFDMTEwMDAwMDA0MTAwMDAwMDBEMDAyMDFFMkRFOAorOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjgxRTI3MDAwMDAwMDA4MgorOjEwMDMwMDAwMDAwMDAwMDMwMDIyMUUyNzAwMDAwMDAwN0ZDMDAwMDA0NAorOjEwMDMxMDAwMDAyODFBMjMwMDAwMDAwMDAwMDAwMDE0MDAyMTFBMjYwMworOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMzMxQTI2MDAwMDAwMDA1OQorOjEwMDMzMDAwMDAwMDAwMDgwMDIyMUEyNjAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDM0MDAwMDAyOTBDQzcwMDAwMDAwMDAwMDAwMDI3MDAyMDM2MjQxMAorOjEwMDM1MDAwMDAwMDAwMDAwMDAwN0YwMDAwMjgxMjIxMDAwMDAwMDBDMworOjEwMDM2MDAwMDAwMDE0MDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMDM3MDAwMENFMDAwMDAwMDAwMDA0QjAwMDAwMDAxMDAyOTBFMjNFQgorOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwRTAwMjAzNjIzMDAwMDAwMDBFNgorOjEwMDM5MDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGODAwMDAxMQorOjEwMDNBMDAwMDAyOTRBMjMwMDAwMDAwMDAwMDAwMDAwMDAzQTJDMDI0RgorOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIwRTJCMDAwMDAwMDBFMAorOjEwMDNDMDAwRkMwMDAwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMEZDOQorOjEwMDNEMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjNGMAorOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAyNzAwMjA0QTJEMDAwMDAwMDA0RgorOjEwMDNGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMjk1QgorOjEwMDQwMDAwMDAyMDBFMkQwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjNFOQorOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMDQyMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDE1MgorOjEwMDQzMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA4MworOjEwMDQ0MDAwMDAwMDAwNjEwMDAwMDAwMDJFRTAwMDAwMDAwMDAwNUZERQorOjEwMDQ1MDAwMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDVFMDAwMDAwMDAzMgorOjEwMDQ2MDAwMDA0MDBFMkQwMDAwMDA2MjAwMDAwMDAxMDA0MDBFMkQzMworOjEwMDQ3MDAwMDAwMDAwNjIwMDAwMDAwQTAwMjAwRTJEMDAwMDAwMDBCNQorOjEwMDQ4MDAwMDAwMDAwMEIwMDQwMTIyRDAwMDAwMDZBMDAwMDAwMDA3OAorOjEwMDQ5MDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMDAyODEyMjNEOQorOjEwMDRBMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0MDAwMDAwMDBGMgorOjEwMDRCMDAwN0ZDMDAwMDAwMDI4MTYyMzAwMDAwMDAwMDAwMDAwMTQ4OAorOjEwMDRDMDAwMDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAxMDAzMzE2MjU2MQorOjEwMDREMDAwMDAwMDAwMDA4MDAwMDAwMDAwMjgwRTIzMDAwMDAwMDA0MworOjEwMDRFMDAwMDAwMDAwMDAwMDI5MENBMzAwMDAwMDAwM0ZGRkZDMDBGQQorOjEwMDRGMDAwMDAyOTBFMjMwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMyMQorOjEwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwNkQ4QQorOjEwMDUxMDAwMDAwMDAxMDAwMDQwMUMxMTAwMDAwMDcwMDAwMDAwMERGMAorOjEwMDUyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMEYwMDAyODFFMjcwMworOjEwMDUzMDAwMDAwMDAwMDAwMDAwMDAwNDAwMjIxRTI3MDAwMDAwMDA1MAorOjEwMDU0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMERBOAorOjEwMDU1MDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGMEZGMDAyODFBMzBDMworOjEwMDU2MDAwMDAwMDAwMDAwMDAwQTAyODAwMjA0NDExMDAwMDAwMDA0RQorOjEwMDU3MDAwMDAwMDAwMDAwMDI5NDhFNjAwMDAwMDAwMDAwMEEwMTg2QworOjEwMDU4MDAwMDAyMDQ0MTEwMDAwMDAwMDNGRkZGRkZGMDAyODRBMjMyNQorOjEwMDU5MDAwMDAwMDAwMDAwMDAwQTAxMDAwMjA0NDExMDAwMDAwMDAzNgorOjEwMDVBMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMzBBRgorOjEwMDVCMDAwMDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAyMDAyOTE2MjU3MgorOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjI1MDAwMDAwMDA4MAorOjEwMDVEMDAwMDAwMDAwMjUwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMDVFMDAwMDAyRjAwQTMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA2RAorOjEwMDVGMDAwMDAwMDAwODMwMDAwMDAyNjAwMjAxNjJEMDAwMDAwMDBFRgorOjEwMDYwMDAwMDAwMDAwMDAwMDJGMDBBNDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMDYxMDAwMENDMDAwMDAwMDAwMDA4NDAwMDAwMDAwMDA0MDAwMDA0QQorOjEwMDYyMDAwMDAwMDAwOEEwMDAwMDAyNTAwMjAzNjIzMDAwMDAwMDBBMgorOjEwMDYzMDAwMDAwMDAwMjYwMDIwMzYyNDAwMDAwMDAwMDAwMDAwMTcwMworOjEwMDY0MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjdGMworOjEwMDY1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwOEExQworOjEwMDY2MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjU5MDAwMDAwMDBDQgorOjEwMDY3MDAwMDA2MDAwMDAwMDAwMDY0RDAwMDAwMDAyMDAyMTBFMjI3NAorOjEwMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOEQwOQorOjEwMDY5MDAwMDAwMDAwMTJDMDQwMzYyMDAwMDAwMDkzMDAwMDAwMDA1RgorOjEwMDZBMDAwMkVFMDAwMDAwMDAwMDA5MTAwMDAwMDAwMkNFMDAwMDA5RgorOjEwMDZCMDAwMDAwMDAwOTAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOTI5QgorOjEwMDZDMDAwMDAwMDAwMDMwMDQwMEUyRDAwMDAwMDkyMDAwMDAwMEMwRQorOjEwMDZEMDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDEyMDAyMDM2MjMzNAorOjEwMDZFMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwRTIyMDAwMDAwMDBCNgorOjEwMDZGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDk4MDAwMEEwMENFMgorOjEwMDcwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0QworOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwQTBGMQorOjEwMDcyMDAwMDAwMEEwMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBOAorOjEwMDczMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMkVFMDAwMDAzMgorOjEwMDc0MDAwMDAwMDAwOUUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwOUQ2MgorOjEwMDc1MDAwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMDM3QQorOjEwMDc2MDAwMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDBDMDAyMDBFMkQwOAorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwRQorOjEwMDc4MDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwMDAzRjAwMDBFMgorOjEwMDc5MDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDEwMDAyMTBFMjM5RQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAxMTAwMjAzNjIzMDAwMDAwMDBCRgorOjEwMDdCMDAwMDAwMDAwMUUwMDIxMDIyQjAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDdDMDAwMTRDMDAwMDAwMDAwMDBBNzAwMDAwMDE2QzAyMDM2MjA2MgorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjEwMjJCMDAwMDAwMDBBQworOjEwMDdFMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMEFBMDAwMDAwMTU3NgorOjEwMDdGMDAwQzAyMDM2MjAwMDAwMDAwMDAwMDAwMDA4MDAyMTBFMkI2MQorOjEwMDgwMDAwMDAwMDAwMDAwMDAwMDA3RjAwMjgwRTIzMDAwMDAwMDAxMAorOjEwMDgxMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMDgyMDAwMENFMDAwMDAwMDAwMDBFMTAwMDAwMDAwMjcwMDAwMDBENAorOjEwMDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTNCMworOjEwMDg0MDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDg1MDAwMEFFMDAwMDAwMDAwMDBCMzAwMDAwMDAwMDA2MDAwMDA5QgorOjEwMDg2MDAwMDAwMDAxM0E4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NworOjEwMDg3MDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMENFRAorOjEwMDg4MDAwMDAyMjFFMzAwMDAwMDAwMDk5ODAwMDAwMDAyMDQ0MTE2QQorOjEwMDg5MDAwMDAwMDAwMDAwMDAwMDAwNDAwMjAxMjJEMDAwMDAwMDBGNQorOjEwMDhBMDAwMDAwMDAwMDgwMDIyMTIyNDAwMDAwMDAwMDAwMDAwMTBEOAorOjEwMDhCMDAwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTFDRTRDNgorOjEwMDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODA3MDAwMDAxMkY0OQorOjEwMDhEMDAwOUIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwOAorOjEwMDhFMDAwMDAyMDQ4MDIwMDAwMDAwMDlDMDAwMDAwMDAyMDQ0MTE4RAorOjEwMDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMxNDZGMDAwMDAwMDA0MgorOjEwMDkwMDAwMDAwMDAwMDEwMDMzM0UyMzAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMDkxMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDNDMDU1NQorOjEwMDkyMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBEMQorOjEwMDkzMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMDk0MDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDA3MDAyMDQ0MTEwQgorOjEwMDk1MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjJCMDAwMDAwMDAzQQorOjEwMDk2MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMENCMDBGOEZGMDhFOQorOjEwMDk3MDAwMDAyMDQ4MTEwMDAwMDAwMDk4MDAwMDAwMDA0MDQ4MTFDRAorOjEwMDk4MDAwMDAwMDAwREMwMDAwMDBGMDAwMjgwRTIyMDAwMDAwMDA0MworOjEwMDk5MDAwMDAwMDAwQTAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA2MworOjEwMDlBMDAwMENDMDAwMDAwMDAwMDBEQTAwMDAwMDExMDAyMDBFMkQzNQorOjEwMDlCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDBFMgorOjEwMDlDMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEQ1MDAwMDAwMDI2NAorOjEwMDlEMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENworOjEwMDlFMDAwMDAwMDAwRDQwMDAwM0YwMDAwNDAwQzExMDAwMDAwRDZDMQorOjEwMDlGMDAwMDAwMDFGMDAwMDQwMEMxMTAwMDAwMEQ2MDAwMDBGMDA5NgorOjEwMEEwMDAwMDAyMDBDMTEwMDAwMDAwMDAwMzgwMDA5MDAyOTRBMjNEMgorOjEwMEExMDAwMDAwMDAwMDAzRjAwMDAwMDAwMjgwRTJCMDAwMDAwMDAzNgorOjEwMEEyMDAwMDAwMDAwMDIwMDIyMEUyMzAwMDAwMDAwMDAwMDAwMDc2QQorOjEwMEEzMDAwMDA0OTRBMjMwMDAwMDBEQzAwMzgwRjA5MDAyMDQ4MTE1QgorOjEwMEE0MDAwMDAwMDAwMDA2ODAwMDAwNzAwMjA0ODExMDAwMDAwMDBCRQorOjEwMEE1MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBGQworOjEwMEE2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQ2NAorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBGRAorOjEwMEE4MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEEyMDI0OQorOjEwMEE5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwRkYwMDAwMDAyODBFMjI4QQorOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjk0QTIzMDAwMDAwMDAzMAorOjEwMEFCMDAwMDAwMDAwMjcwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMjY4RQorOjEwMEFDMDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDAwMDAyRjAwODMxNQorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRUE0MAorOjEwMEFFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjUzMDAwMDAwMDA0RAorOjEwMEFGMDAwMDA0MDAwMDAwMDAwMDBFQjAwMDAwMDAwMDA2MDAwMDA2QgorOjEwMEIwMDAwMDAwMDA2NTYwMDAwMDAwNzAwMjAyMjJEMDAwMDAwMDAxMworOjEwMEIxMDAwMDAwMDAwMDUwMDIyMEUyMjAwMDAwMDAwMDAxMDAwMDA2RQorOjEwMEIyMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTIwNjhCQgorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDA2RAorOjEwMEI0MDAwMDAwMDAwRUYwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMEI1MDAwMDAyOTIwNjgwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3MgorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwMjIzMDAwMDAwMDAzQworOjEwMEI3MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMEY4MDAwMDAwMEI3RQorOjEwMEI4MDAwMDAyMTAyMjgwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA0NgorOjEwMEI5MDAwMDAwMDAwRjgwMDAwMDQwMDAwMjkyMjI4MDAwMDAwMDBFNgorOjEwMEJBMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwMDAwMDAwMUM5NworOjEwMEJCMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAxMAorOjEwMEJDMDAwMDAwMDAwRkQwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwNAorOjEwMEJEMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMUU3RQorOjEwMEJFMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBFMAorOjEwMEJGMDAwMDAwMDAxMEIwMDAwQTMwRjAwMjA0NDExMDAwMDAwMDBDMgorOjEwMEMwMDAwMDAwMDAwMTEwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDE3NworOjEwMEMxMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBCNAorOjEwMEMyMDAwMDAwMDAxMDRGRkZGRkZGRjAwNDA0ODExMDAwMDAxMEIxRQorOjEwMEMzMDAwMDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMEM0MDAwMENDMDAwMDAwMDAwMDEwNzAwMDBGRkZGMDA0MDQ4MTEzOQorOjEwMEM1MDAwMDAwMDAxMEIwMDAwMDAwNDAwMkYwMjIzMDAwMDAwMDAzMAorOjEwMEM2MDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTBBMDAwMDAwRkZBRQorOjEwMEM3MDAwMDA0MDQ4MTEwMDAwMDEwQjAwMDAwMDAxMDAyMDQ4MTE1NQorOjEwMEM4MDAwMDAwMDAwMDAwMDAyQzQwMDAwMjA0NDExMDAwMDAwMDAyOQorOjEwMEM5MDAwMDAwMDAwMUYwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMENBMDAwMTRDMDAwMDAwMDAwMDExMjAwMDAwMDEwNDAyMTBFMjBCRQorOjEwMENCMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDBBOAorOjEwMENDMDAwMDAwMDAwMTg0MDIyNEEyMDAwMDAwMDAwMDAwMDAwMTAzMAorOjEwMENEMDAwQzA0MjRBMjAwMDAwMDExNDAwMDAwMDAwMDAyMDBDMTE1NgorOjEwMENFMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDA3OAorOjEwMENGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMEQwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBBMDAyMDEwMTExRgorOjEwMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDA3RQorOjEwMEQyMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTFCMDAwMDAwMDBCQgorOjEwMEQzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxMDA1MzEyMjRCMAorOjEwMEQ0MDAwMDAwMDAxMTdGRkJGRkZGRjAwMjgzQTJFMDAwMDAwMDAzRgorOjEwMEQ1MDAwMDAwMDAwMUIwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAzMworOjEwMEQ2MDAwMTRDMDAwMDAwMDAwMDEyRTgxMDAwMDAwMDAyMDQ0MTE4QQorOjEwMEQ3MDAwMDAwMDAwMDAwMDAwMDAwRDAwMjA0ODExMDAwMDAwMDBFRAorOjEwMEQ4MDAwMDAwMDAwMTgwMDIyMEUzMDAwMDAwMDAwRkMwMDAwMDBFRgorOjEwMEQ5MDAwMDAyODBFMjMwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwNAorOjEwMERBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDBCQworOjEwMERCMDAwMDAwMDAwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMEUwNQorOjEwMERDMDAwMDAyMDQ0MTEwMDAwMDAwMDA3RjhGRjA4MDAyMDQ4MTEyRgorOjEwMEREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0QTIzMDAwMDAwMDA3RAorOjEwMERFMDAwMDAwMDAwMUMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDg3NAorOjEwMERGMDAwMDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFFOAorOjEwMEUwMDAwMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0MDAwMDAwMDAzOQorOjEwMEUxMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMEUyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDBDOQorOjEwMEUzMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCQworOjEwMEU0MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0M4QgorOjEwMEU1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwODAwMDAwMDAyMDQ4MTEyNAorOjEwMEU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA2MDAwMDAwMDAxNAorOjEwMEU3MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBEOAorOjEwMEU4MDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGMDA2MDQ0MTFGMgorOjEwMEU5MDAwMDAwMDA2N0MwMDAwMDAxRjAwMjEwMjMwMDAwMDAwMDA1RQorOjEwMEVBMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjdCMDAwMDAwMDRFOQorOjEwMEVCMDAwMDA0MDRDMTEwMDAwMDEzNTgxMDAwMDAwMDAyMDQ0MTE2OQorOjEwMEVDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBBOAorOjEwMEVEMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUM2OAorOjEwMEVFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTFCNgorOjEwMEVGMDAwMDAwMDA2N0MwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDAwQworOjEwMEYwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMTNDMDAwMDAwMDBCMAorOjEwMEYxMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGMQorOjEwMEYyMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMDAwMDAzMTUyOQorOjEwMEYzMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDA3QworOjEwMEY0MDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA2MDAwMDAxNQorOjEwMEY1MDAwMDAwMDAxNjAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDA5QworOjEwMEY2MDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY2MAorOjEwMEY3MDAwNDAyODA2MjAwMDAwMDAwMDAwMDAwMDEwQzAyMTBBMjBDOAorOjEwMEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQxNDYxMDAwMDAwMDBCOAorOjEwMEY5MDAwMDAwMDAwMDAwMDc0MTg4MjAwMDAwMkJCMDAwMUExRkRFNworOjEwMEZBMDAwMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMDAyRjAyMkYwQworOjEwMEZCMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxNDcxRAorOjEwMEZDMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDAxQworOjEwMEZEMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEzMQorOjEwMEZFMDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDBCNAorOjEwMEZGMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDNGRkY4NworOjEwMTAwMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA5NAorOjEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxNjAwRgorOjEwMTAyMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwMDAwMEZGRkYyMworOjEwMTAzMDAwQzAyODEyMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTE2MjBFRgorOjEwMTA0MDAwMDAwMDAwMDAwMDAwRkZGRkMwNjgxQTIwMDAwMDAyQkI4MworOjEwMTA1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYxQworOjEwMTA2MDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA1NAorOjEwMTA3MDAwMDAwMDAxNTgwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDExMgorOjEwMTA4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE2QworOjEwMTA5MDAwMDAzMDBBMkYwMDAwMDAwMDAwMDAwMDAxMDAyMTBBMjI5OQorOjEwMTBBMDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDA5OQorOjEwMTBCMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEyOQorOjEwMTBDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE5NQorOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExMDAwMDAwMDAzNgorOjEwMTBFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDA5NQorOjEwMTBGMDAwMDA2MDAwMDAwMDAwMDE4RjAwMDAwMDAwMDA2MDAwMDBBMAorOjEwMTEwMDAwMDAwMDAxQTAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDBBMAorOjEwMTExMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMTEyMDAwMDAyMDJDMDgwMDAwMDAwMDAwMDAwMDAwMDAyMDI0MTExNgorOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyODExMDAwMDAwMDA1NgorOjEwMTE0MDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTY5QworOjEwMTE1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEyMworOjEwMTE2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDAwMworOjEwMTE3MDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDJFNQorOjEwMTE4MDAwMDAyMjFFMjkwMDAwMDAwMDAwMDAwMDAwMDA3MDQ4RUI1MworOjEwMTE5MDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQkI5NQorOjEwMTFBMDAwMDAwMDAwMDE0MDMzMDYyMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMTFCMDAwQzAzMDI0MDkwMDAwMDAwMDAwMDAzRkZGMDAyRjAyMkY3NAorOjEwMTFDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAzMworOjEwMTFEMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMDAwMDAwMDAwQQorOjEwMTFFMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBDMworOjEwMTFGMDAwMDAwMDAxODEwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0FEMgorOjEwMTIwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMTg2OTUwMDAwMDA4MgorOjEwMTIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwNworOjEwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxODY0QgorOjEwMTIzMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDE4NQorOjEwMTI0MDAwMDA1MzA2MjEwMDAwMDE4MjkyMDAwMDAwMDAyMDQ0MTE5QQorOjEwMTI1MDAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwMDAwMDAxOTc4RQorOjEwMTI2MDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTE1OQorOjEwMTI3MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMDAwMDA3ODA0MkE3NQorOjEwMTI4MDAwMDAwMDAyRkIwMDAwMDAwMDAwMjAyODA5MDAwMDAwMDAxMAorOjEwMTI5MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMTJBMDAwMENDMDAwMDAwMDAwMDE3NDAwMDAwMDAwQzA0MDA0MDBGOQorOjEwMTJCMDAwMDAwMDAwMDEwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTU4RQorOjEwMTJDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMTJEMDAwMENFMDAwMDAwMDAwMDE5NDAwMDAwMDE1QzAyMDM2MjA0MgorOjEwMTJFMDAwMDAwMDAwMDAwMDAwMDAxNkMwMjAzNjIwMDAwMDAwMDBCMgorOjEwMTJGMDAwM0Y4MDAwMDAwMDIwMDQxMTAwMDAwMDAwNDYwMDAwMDBCNAorOjEwMTMwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA4MDAwMDAzMQorOjEwMTMxMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDBCQgorOjEwMTMyMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMTMzMDAwMENDMDAwMDAwMDAwMDE5QjAwMDAwMDAxMDA4MDQ4MTE2QgorOjEwMTM0MDAwMDAwMDAwMDAwMDAwMDAyMTAwODA0ODExMDAwMDAwMDBBMworOjEwMTM1MDAwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBFOQorOjEwMTM2MDAwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNDAyODE2MjBDRQorOjEwMTM3MDAwMDAwMDAwMDAwMDAwMDAxMEMwODExQTIwMDAwMDAwMDBFMgorOjEwMTM4MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDY2MQorOjEwMTM5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA4MDAyMjFFMzA1QworOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDAyOTAwMjAxQTJEMDAwMDAwMDBBRAorOjEwMTNCMDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGQkZGMDlENgorOjEwMTNDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBGMDAyMDIyMkQyNgorOjEwMTNEMDAwMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTI4MDAwMDAwMDA1NAorOjEwMTNFMDAwMDAwMDAwMDYwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMTNGMDAwMDAyOTIwRTgwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDg0QworOjEwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMTQxMDAwMDYwQTAyMDAwMDI5NEEyNjAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMTQyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFDQQorOjEwMTQzMDAwMDAwMDAwMDAwMDAwMDEwMDAwMjAxODExMDAwMDAwMDA2MgorOjEwMTQ0MDAwMDAwMDAwMDgwMDYyMUUyODAwMDAwMTJGMDAwMDAwMDhCNAorOjEwMTQ1MDAwMDA4MjIyMjgwMDAwMDAwMDAwMDJDMDAwMDAyMDQ0MTE4OQorOjEwMTQ2MDAwMDAwMDAwMDAwMDAwMDAxNTAwNjAwRTJEMDAwMDAxQkQwRQorOjEwMTQ3MDAwMDAwMDAwMTYwMDYwMEUyRDAwMDAwMUJEMDAwMEMwMDgzNQorOjEwMTQ4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3NQorOjEwMTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAxQjlCRQorOjEwMTRBMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwNworOjEwMTRCMDAwMDAyMDQ4MDEwMDAwMDAwMDM5MDAwMDAwMDAyMDQ4MTExMQorOjEwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBBMworOjEwMTREMDAwMDAwMDAwMDAwMDgwNDgwMjAwMDAwMDAwMDAwMDAwMTgyQQorOjEwMTRFMDAwMDAyMDJFMkQwMDAwMDAwMDAwMDAwMDAwMDAzQjBENjNENgorOjEwMTRGMDAwMDAwMDAwMDAwMDAwMDAwODAwMjI0QTIzMDAwMDAwMDA1NQorOjEwMTUwMDAwMDAwMDAwMTAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMTgyNAorOjEwMTUxMDAwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MDM3MQorOjEwMTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEI1MAorOjEwMTUzMDAwMDAwMDEwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDAwRQorOjEwMTU0MDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTFFRAorOjEwMTU1MDAwMDAwMDAxQjIwMDAwMDAwNzAwMjEwNjJGMDAwMDAwMDA3QgorOjEwMTU2MDAwMDAwMDAwMTMwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDExMAorOjEwMTU3MDAwMDAyMDJDMTEwMDAwMDAwMDAwMDBGRkZGNDAyODIyMjA2NgorOjEwMTU4MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjYyMjI4MDAwMDAwMDBEQworOjEwMTU5MDAwMDAwMDAwMTA0MDIxMjYyMDAwMDAwMDAwMDAwMDAwMEY4NQorOjEwMTVBMDAwMDAyNjI2MjkwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDI3QworOjEwMTVCMDAwMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAzRQorOjEwMTVDMDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA4NworOjEwMTVEMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBDRAorOjEwMTVFMDAwMDAwMDAxRTAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAyNworOjEwMTVGMDAwMDAwMDAwODEwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkM1NAorOjEwMTYwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFQgorOjEwMTYxMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjAxQzExMDAwMDAwMDBGRAorOjEwMTYyMDAwMDAwMDAwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDA2MgorOjEwMTYzMDAwMENFMDAwMDAwMDAwMDFEQzAwMDAwMDAwMDA2MDAwMDA4MQorOjEwMTY0MDAwMDAwMDAxRTkwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRDgzRQorOjEwMTY1MDAwMDAwMDAwMDEwMDIwMkMxMTAwMDAwMDAwMDAwMDAwMUYwRAorOjEwMTY2MDAwMDAyODBBMjIwMDAwMDAwMDAwMDAwMDFGMDAyODJBMkE4QgorOjEwMTY3MDAwMDAwMDAwMDAwMDAwMDAwMTAwNTMwNjIxMDAwMDAxRDExRAorOjEwMTY4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDI2NQorOjEwMTY5MDAwMDAzMDRBMkYwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE4RgorOjEwMTZBMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDMAorOjEwMTZCMDAwMDAwMDAwMDEwMDMwMUUyRjAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTZDMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENgorOjEwMTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxRTlDMAorOjEwMTZFMDAwMDAwMDAwMDEwMDUzMUUyNzAwMDAwMUU1MDAwMEZGRkY3RAorOjEwMTZGMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDBGMDAyNjBFMjNFRQorOjEwMTcwMDAwMDAwMDAwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDBCNgorOjEwMTcxMDAwMDAwMDAwMEYwMDI2MTIyNDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMTcyMDAwMDAyMDE0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDE4MTFFQgorOjEwMTczMDAwMDAwMDAyQkIwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDBEOAorOjEwMTc0MDAwMDAwMDAwMDAwMDJGMDIyQjAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTc1MDAwMENFMDAwMDAwMDAwMDFGODAwMDAwMDEwMDAyMjE2MjgzNAorOjEwMTc2MDAwMDAwMDAwMDBGRkZGMDAwMDAwMjgxNjI1MDAwMDAwMDAxOAorOjEwMTc3MDAwMDAwMEZGRkYwMDI4MUEyOTAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMTc4MDAwMDAyOTQ4QzUwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MEFCMQorOjEwMTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyQzExMDAwMDAwMDBFQworOjEwMTdBMDAwMDAwMDAwMTAwMDIyMTYyMzAwMDAwMDAwRkZGRjAwMDBEMAorOjEwMTdCMDAwMDAyODE2MjUwMDAwMDAwMDAwMDBGRkZGMDAyODFBMjQ2MgorOjEwMTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OEM1MDAwMDAwMDBFMworOjEwMTdEMDAwMDAwMDAwMDAwMDczMTUwMzAwMDAwMjA1MDAwMDAwMDA3NworOjEwMTdFMDAwMDAyMDE4MDUwMDAwMDAwMDAwMDAwMDAwMDA3MzE1MjQxMAorOjEwMTdGMDAwMDAwMDAyMDUwMDAwMDAwMDAwMkQxNEM1MDAwMDAwMDBEQworOjEwMTgwMDAwMDAwMDAwMDAwMDMwMDhBMjAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMTgxMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDIxNAorOjEwMTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyMDAzMDAwMDAwMDA3NQorOjEwMTgzMDAwMDAwMDAwMDAwMDgwMjQwNDAwMDAwMDAwMDAwMDAwMEZGMQorOjEwMTg0MDAwMDAyMTAyMjUwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA3QworOjEwMTg1MDAwMDAwMDA2N0IwMDAwMDAwMDAwMkIxNDA1MDAwMDAwMDBDMworOjEwMTg2MDAwMDAwMDAwMDEwMDkwMTYyNTAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTg3MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTE4OAorOjEwMTg4MDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwQgorOjEwMTg5MDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDIyNTZBNAorOjEwMThBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMDAyOTRBMjIxNAorOjEwMThCMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA0OAorOjEwMThDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA3QQorOjEwMThEMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAzOAorOjEwMThFMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwNQorOjEwMThGMDAwMDAwMDAwMDMwMDM4NEEyMTAwMDAwMDAwMDAwMEExRkNBNQorOjEwMTkwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFOAorOjEwMTkxMDAwMDAwMDAwMDAwMDAwRkZGRjQwMjgxMjIwMDAwMDAwMDAyRgorOjEwMTkyMDAwMDAwMDAwMTBDMDIxMUEyMDAwMDAwMDAwMDAwMEZGRkY4RQorOjEwMTkzMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwQzAyMTE2MjBFQQorOjEwMTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQxNDY1MDAwMDAyQkJFRAorOjEwMTk1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDAwMDE1MAorOjEwMTk2MDAwMDAzMzA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjFDQgorOjEwMTk3MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAyMTk4MAorOjEwMTk4MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMTk5MDAwMENDMDAwMDAwMDAwMDIxMjAwMDAwMDAwQzA0MDA0MDA2MworOjEwMTlBMDAwMDAwMDAwMDEwMDAwMDAwMDAwNjAwMDAwMDAwMDA2Mzg5OAorOjEwMTlCMDAwMDAwMDAwMDAwMDQwMDQwRjAwMDAwMjEzMDAwMDAwMDBCRgorOjEwMTlDMDAwMDA2MDAwMDAwMDAwMDYyNDAwMDAwMDAwMDA2MDAwMDAyRAorOjEwMTlEMDAwMDAwMDA2MzgwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTUyQQorOjEwMTlFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUEwMDAwMDAwMDBGNgorOjEwMTlGMDAwMDA2MDAwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDA4QQorOjEwMUEwMDAwMDAwMDAyQkIwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMxNAorOjEwMUExMDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMUEyMDAwMDAyMDQ4MDgwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkZFNgorOjEwMUEzMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyMzI4OAorOjEwMUE0MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBMDAwMDAwMDBGQgorOjEwMUE1MDAwMDA0MDAwMDAwMDAwMDIzNjk1MDAwMDAwMDAyMDQ0MTEwNAorOjEwMUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGMDAwMDAwMDAxNgorOjEwMUE3MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMjM2MDAwMDAwMDA0MgorOjEwMUE4MDAwQzA0MDQ4MDAwMDAwMDIzMzkyMDAwMDAwMDAyMDQ0MTFEMgorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxRQorOjEwMUFBMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYzMworOjEwMUFCMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFCQQorOjEwMUFDMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDA5QQorOjEwMUFEMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFGMworOjEwMUFFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTE2OQorOjEwMUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwNDExMDAwMDAyRkI3NAorOjEwMUIwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDBEMAorOjEwMUIxMDAwMDA2MDAwMDAwMDAwMDYyNDAwMDBBMDBDMDAyMDQ0MTExQQorOjEwMUIyMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA4RAorOjEwMUIzMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMUI0MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDE4NDAyMTBBMjA4NworOjEwMUI1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMkYwMjIyMDAwMDAwMDAyRgorOjEwMUI2MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjRDMDAwMDAwMTQyOQorOjEwMUI3MDAwMDAyMDIyMkQwMDAwMDAwMDAwMDgwMTAxMDAyOTIyMjg3OQorOjEwMUI4MDAwMDAwMDAwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDBDMworOjEwMUI5MDAwMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMUJBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFNQorOjEwMUJCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAyNTE4QQorOjEwMUJDMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTA5QQorOjEwMUJEMDAwMDA2MDA0MTEwMDAwMDMxNTNGODAwMDAwMDAyMDA0MTE4NAorOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjJDOQorOjEwMUJGMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNFRgorOjEwMUMwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGQgorOjEwMUMxMDAwMDAwMDAyN0MwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBDNAorOjEwMUMyMDAwMDAwMDAwMDEwMDIxMUUyNzAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMUMzMDAwMTRFMDAwMDAwMDAwMDI2QTAwMDAwMDEyMDAyMDFFMkRDNworOjEwMUM0MDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgxRTI3MDAwMDAwMDAyOQorOjEwMUM1MDAwMDAwMDAwMDAwMDM0MUMyNzAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMUM2MDAwMTJDMDAwMDAwMDAwMDI1RjAwMDAwMDAwMDAyMDFDMTFGNAorOjEwMUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU1MDAwMDAwMDA1MAorOjEwMUM4MDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjYyMDAwMDAwMDAyOAorOjEwMUM5MDAwMDAyMDE0MDcwMDAwMDAwMDAwMDAwMDEyMDAyMDFFMkQ4QworOjEwMUNBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjExRTI3MDAwMDAwMDBCRQorOjEwMUNCMDAwMDAwMDAwMDAwMDM0MUM0NzAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMUNDMDAwMTJDMDAwMDAwMDAwMDI2NzAwMDAwMDAwMDAyMDFDMTE4QworOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDBFRgorOjEwMUNFMDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjZBMDAwMDAwMDBDMAorOjEwMUNGMDAwMDAyMDE4MDcwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDA0NQorOjEwMUQwMDAwMDAwMDAyQzEwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAyMworOjEwMUQxMDAwMDAwMDAwMDAwMDM0MjAyMzAwMDAwMDAwMDAwMDAwMDA0QworOjEwMUQyMDAwMTJDMDAwMDAwMDAwMDI3MjAwMDAwMDAwMDAzNDIwNDRENQorOjEwMUQzMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzE1RQorOjEwMUQ0MDAwMDAwMDAwMTYwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTg1NAorOjEwMUQ1MDAwMDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDAwMDAzNDIwNDREQQorOjEwMUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzUyQQorOjEwMUQ3MDAwMDAwMDAwMTcwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTkyMgorOjEwMUQ4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFDOAorOjEwMUQ5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDOQorOjEwMURBMDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkU5MDAwMDNGRkZCNgorOjEwMURCMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBGNworOjEwMURDMDAwMDAwMDAyNTYwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDFCNgorOjEwMUREMDAwMDAwMDAwMTA0MDIxMDYyMDAwMDAwMDAwMDAwMEZGRkY2RQorOjEwMURFMDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjA0MgorOjEwMURGMDAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwMDAwMDAwMDBDQgorOjEwMUUwMDAwMDAwMDAwMTA0MDIxMTYyMDAwMDAwMDAwMDAwMEZGRkYyRAorOjEwMUUxMDAwQzA4ODFBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTE0QQorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAzOAorOjEwMUUzMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMDA0MworOjEwMUU0MDAwMDA2MDAwMDAwMDAwMDYyNDAwMDAwMDAwQzA2MDAwMDBFOAorOjEwMUU1MDAwMDAwMDAyQTMwMDAwMDAwNTAwMjAwQTJEMDAwMDAwMDA4MQorOjEwMUU2MDAwMDAwMDAwMDgwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMkJGMQorOjEwMUU3MDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDFDMDAyMDFFMkQ3NAorOjEwMUU4MDAwMDAwMDAwMDAwMDAwNzAwMDAwMjgxRTI3MDAwMDAwMDA3NQorOjEwMUU5MDAwMDAwMDAwMDAwMDMxMUNFNjAwMDAwMDAwMDAwMDAwMkFFNQorOjEwMUVBMDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDBDMDAyMjFBMjY1RAorOjEwMUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDAwRAorOjEwMUVDMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwMjkyMDAwMDAwMDA5OAorOjEwMUVEMDAwMDAyMDFDMTEwMDAwMDAwMDAwMDAwMDAwMDAyMDBDMTE3OAorOjEwMUVFMDAwMDAwMDAwMDAwMDAwMDAyQjAwMjAzNjIzMDAwMDAwMDA0RQorOjEwMUVGMDAwMDAwMDAwMTAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMUYwMDAwMDA2OTFDRTIwMDAwMDEyRjkzODAwMDAwMDAyMDQ0MTFCMgorOjEwMUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA1MgorOjEwMUYyMDAwOTUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBNworOjEwMUYzMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA1NQorOjEwMUY0MDAwMDAwMDAyOUQwMDAwMDAwMTAwMzMzRTJGMDAwMDAwMDA1MQorOjEwMUY1MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwOTIwMDAwMDBDRQorOjEwMUY2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBENAorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAxQzAwNDAzNjI3MDAwMDAwMDBBOAorOjEwMUY4MDAwMDAwMDAwMENDMDIyMEEyMDAwMDAwMDAwMDAwMDAwMjkxMAorOjEwMUY5MDAwMDAyMDM2MjIwMDAwMDAwMDAwMDAwMDI4QzA0MDM2MjA0QgorOjEwMUZBMDAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDA3NgorOjEwMUZCMDAwMDAwMDAwMDkwMDIwNDgxMTAwMDAwMDAwQTEwMDAwMDBGRQorOjEwMUZDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTFDMgorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDA3NQorOjEwMUZFMDAwMDAwMDAwMDAwMDJDMUNFMzAwMDAwMDAwMDAwMDAwMjFBNQorOjEwMUZGMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIyMDAyMDFFMkRENworOjEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMxQ0U0MDAwMDAwMDBBNAorOjEwMjAxMDAwMDAwMDAwMjIwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjNGRQorOjEwMjAyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQTM1MQorOjEwMjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDA0RgorOjEwMjA0MDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjRDQworOjEwMjA1MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMAorOjEwMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDAxRgorOjEwMjA3MDAwMDAwMDAwMjQwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMjEzRQorOjEwMjA4MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDIyMDAyMDM2MjQzQgorOjEwMjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzMDAwMDAwMDA1MAorOjEwMjBBMDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMjBCMDAwMDAzMTFDQzQwMDAwMDAwMDAwMDAwMDI0MDA4MDM2MjcwRQorOjEwMjBDMDAwMDAwMDAwMDAwMDAwMDAxQTAwMjAzNjI3MDAwMDAwMDA3OQorOjEwMjBEMDAwMDAwMDAwMUIwMDIwMzYyODAwMDAwMDAwMDAwMDAwMTc1MAorOjEwMjBFMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjczOQorOjEwMjBGMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAyREMyRQorOjEwMjEwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkQ5MDAwMDAwMUE5QQorOjEwMjExMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDFCMDAyMDM2MjhBOQorOjEwMjEyMDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDAyRAorOjEwMjEzMDAwMDAwMDAwMDIwMDIxMDIyNzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMjE0MDAwMTRFMDAwMDAwMDAwMDJEOTAwMDAwMDAzMDAyMTAyMjc3MworOjEwMjE1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAyRENBRAorOjEwMjE2MDAwMDAwMDAwMjMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMjE3MDAwMDAyRTAwRTEwMDAwMDAwMDAwMDAwMDAwMDJDMDAwMDA4RQorOjEwMjE4MDAwMDAwMDAyREMwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDBFNQorOjEwMjE5MDAwMDAwMDAwMDAwMDMxMjBBMTAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjFBMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwMDZDMDAwMDA1MworOjEwMjFCMDAwMDAwMDAyREMwMDAwMDAyNDAwMjAxRTJEMDAwMDAwMDBCMgorOjEwMjFDMDAwMDAwMDAwMDAwMDJFMDBFMjAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjFEMDAwMDJDMDAwMDAwMDAwMDJEQzAwMDAwMDIyMDAyMDFFMkREMgorOjEwMjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDBEQworOjEwMjFGMDAwMDAwMDAwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMjIwMDAwMDZDMDAwMDAwMDAwMDJEQzAwMDAwMDAwMDA2MDAwMDBDQQorOjEwMjIxMDAwMDAwMDA2NTkwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQjU0OAorOjEwMjIyMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMDA4RQorOjEwMjIzMDAwMDA2MDAwMDAwMDAwMDJCNTAwMDAwMDAwMDA2MDAwMDAyNworOjEwMjI0MDAwMDAwMDA2NTAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUxOAorOjEwMjI1MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkE3MDAwMDAwMDA3NQorOjEwMjI2MDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDFBMDAyMDFFMkRDOQorOjEwMjI3MDAwMDAwMDAwMDAwMDAwMDAxQjAwODAyMjJEMDAwMDAwMDA3NAorOjEwMjI4MDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDBEQgorOjEwMjI5MDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1NgorOjEwMjJBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDBCNworOjEwMjJCMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMTAxNgorOjEwMjJDMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQ5NgorOjEwMjJEMDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDA4RQorOjEwMjJFMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTAwNQorOjEwMjJGMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODc4MworOjEwMjMwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDA1QworOjEwMjMxMDAwMDAwMDAwMDAwMDI5NDg0NzAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMjMyMDAwMDAzMTFDQTMwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjc0NgorOjEwMjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDBBNQorOjEwMjM0MDAwMDAwMDAwMDAwMDMxMUNBMTAwMDAwMDAwMDAwMDAwMTA4RgorOjEwMjM1MDAwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4NDc1RQorOjEwMjM2MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDBGQQorOjEwMjM3MDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMDAwMEZGRkY0QQorOjEwMjM4MDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDc2MgorOjEwMjM5MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDBDQworOjEwMjNBMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwMDAwMEZGRkYxQworOjEwMjNCMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDdEMgorOjEwMjNDMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDA5QQorOjEwMjNEMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDEwNAorOjEwMjNFMDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMzA4QTJDMworOjEwMjNGMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDA2QgorOjEwMjQwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjQxMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1MworOjEwMjQyMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDAzNQorOjEwMjQzMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDFBMworOjEwMjQ0MDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMDA4QTI2NQorOjEwMjQ1MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDAwQQorOjEwMjQ2MDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDBGNworOjEwMjQ3MDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjM3MAorOjEwMjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAzNworOjEwMjQ5MDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDBDQworOjEwMjRBMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzODA4QzVBRQorOjEwMjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwODQxMDAwMDAwMDBBMworOjEwMjRDMDAwMDAwMDAwMDEwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjREMDAwMDAzMzA4QTIwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjJBRAorOjEwMjRFMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDA3NworOjEwMjRGMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTdFQworOjEwMjUwMDAwMDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA4OAorOjEwMjUxMDAwMDAwMDAzMThGRkZGRkZFRjAwMjgwNjIxMDAwMDAwMDA2NQorOjEwMjUyMDAwMDAwMDAwMTQwMDIwMjIyRDAwMDAwMDAwMDAwMEY4RTA1MAorOjEwMjUzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDFCMworOjEwMjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwODk0OTAxMDAwMDAwMDBCOAorOjEwMjU1MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMjU2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDA4MDQ4MTEwNworOjEwMjU3MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA3QgorOjEwMjU4MDAwOTcwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMjU5MDAwQzAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTEwMworOjEwMjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBCMgorOjEwMjVCMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyOAorOjEwMjVDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFEMQorOjEwMjVEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBEMworOjEwMjVFMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMjVGMDAwMDBBMDAwMEEwMDAwMDAwMDk3MDAwMDAwMDAyMDQ0MTEyNQorOjEwMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA1MQorOjEwMjYxMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjYyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEzRQorOjEwMjYzMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA3MgorOjEwMjY0MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3OAorOjEwMjY1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA2RQorOjEwMjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBDMAorOjEwMjY3MDAwOTcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjY4MDAwMDAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTFEMgorOjEwMjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBDMQorOjEwMjZBMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzNworOjEwMjZCMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFFMAorOjEwMjZDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBFMgorOjEwMjZEMDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMjZFMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBFNQorOjEwMjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDAzMAorOjEwMjcwMDAwMDAwMDIyNTcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNEOAorOjEwMjcxMDAwQzA0ODRBMjAwMDAwMDAwMDAwMDAyMjVEMDAyMDQ0MTE1MworOjEwMjcyMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDA2MQorOjEwMjczMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjM4MDAwMDAwMDBGQgorOjEwMjc0MDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFBRQorOjEwMjc1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDBEMgorOjEwMjc2MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjc3MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTExRAorOjEwMjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIyMDAwMDAwMDBGNgorOjEwMjc5MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjdBMDAwNDAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxNDAzMDRBMjBBNgorOjEwMjdCMDAwMDAwMDAwMDAwMDAwMDAwMkMwMzA0QTIwMDAwMDAwMDBCRAorOjEwMjdDMDAwMDAwMDAwMDEwMDUzMEEyMjAwMDAwMzRCMDAwMDAwM0ZGQworOjEwMjdEMDAwQzAyODBBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFGMQorOjEwMjdFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA2RgorOjEwMjdGMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTgzMworOjEwMjgwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTE3QworOjEwMjgxMDAwMDAwMDA2N0MwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBEMgorOjEwMjgyMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMzU0MDAwMDAwMTQ0OQorOjEwMjgzMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA3OQorOjEwMjg0MDAwMDAwMDAzNjIwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDA2NworOjEwMjg1MDAwMDAwMDAwMDAwMDYwNDgwMjAwMDAwMzZBMDAwMDIxMDA0MAorOjEwMjg2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBDQgorOjEwMjg3MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAzMAorOjEwMjg4MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMjg5MDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDA0MDAyRjAyMjI5OQorOjEwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNjZGMworOjEwMjhCMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1QworOjEwMjhDMDAwMDA0MDQ4MDIwMDAwMDM1RDAwMDAwMDI4MDAyRjAyMjJBMworOjEwMjhEMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1QjM3NAorOjEwMjhFMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQworOjEwMjhGMDAwMDA0MDQ4MDIwMDAwMDM1RDAwMDAwMDJDMDAyMDM2MjY0NgorOjEwMjkwMDAwMDAwMDAwMDAwMDAwMDA0OTAwMjAxODExMDAwMDAwMDAzNQorOjEwMjkxMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDFGRQorOjEwMjkyMDAwMDAzMzFBMjYwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjZERAorOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNkM1QworOjEwMjk0MDAwMDAwMDAwMkMwMDgwMUEyRDAwMDAwMDAwMDAwMDAwM0Y1NQorOjEwMjk1MDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDE1MDAyRjAyMjJGRAorOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzODJGNgorOjEwMjk3MDAwMDAwMDAwMDYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMjk4MDAwMENFMDAwMDAwMDAwMDNBRDAwMDAwMDE2MDAyRjAyMjI0MgorOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQUY5OQorOjEwMjlBMDAwMDAwMDAwMjAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMjlCMDAwMENFMDAwMDAwMDAwMDM5ODAwMDAwMDBGMDAyRjAyMjIyRQorOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQTQ3NAorOjEwMjlEMDAwMDAwMDAwMTAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA5NAorOjEwMjlFMDAwMENFMDAwMDAwMDAwMDNBNDAwMDAwMDFFMDAyRjAyMjJFMworOjEwMjlGMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzOEM1QworOjEwMkEwMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwQgorOjEwMkExMDAwMDA0MDQ4MDIwMDAwMDAwMDA4MDAwMDAwMDAyOTBBMjJDRgorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMzQwMjEwRTIwMDAwMDAwMDAxNAorOjEwMkEzMDAwMDAwMDAwMENDMDIxMTIyMDAwMDAwMDAwMDAwODAwMDA2RgorOjEwMkE0MDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDE0QzAyMjE2MjBGQworOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkxNEE0MDAwMDAwMDA5NQorOjEwMkE2MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMkE3MDAwMDAyOTQ4QTIwMDAwMDAwMDAwMDBBMUZFMDAyMDQ0MTEyRgorOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAzMDAwMDAwMDBCQgorOjEwMkE5MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEzRgorOjEwMkFBMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTExRgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAxNjAwMjA0ODExMDAwMDAwMDA4NworOjEwMkFDMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMTU5QworOjEwMkFEMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDBBRgorOjEwMkFFMDAwMDAwMDAzOEUwMDAwMjEwRTAwMjA0NDExMDAwMDAwMDBCMQorOjEwMkFGMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMkIwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTFFMgorOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDAyQgorOjEwMkIyMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFBRQorOjEwMkIzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTE4RQorOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAxNzAwMjA0ODExMDAwMDAwMDBGNQorOjEwMkI1MDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMDMxRAorOjEwMkI2MDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAxRQorOjEwMkI3MDAwMDAwMDAzOUEwMDAwMjEwODAwMjA0NDExMDAwMDAwMDAxQQorOjEwMkI4MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMkI5MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTE1MgorOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDA5QgorOjEwMkJCMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMkJDMDAwMDAyMDQ4MDIwMDAwMDAwMDgwMDAwMDAwMDAyMDQ0MTFBNgorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA3QworOjEwMkJFMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTBERgorOjEwMkJGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTAyQworOjEwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzQUE0MworOjEwMkMxMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMUEyQTQyRAorOjEwMkMyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDA0MDQ4MTE5MAorOjEwMkMzMDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDBEOAorOjEwMkM0MDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzZBMDAwMDAwMDA0OAorOjEwMkM1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA4MDA0QworOjEwMkM2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDA3OAorOjEwMkM3MDAwMDAwMDAwMUQwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMkM4MDAwMTRFMDAwMDAwMDAwMDNDNDgxMDAwMDAwMDAyMDQ0MTE5MworOjEwMkM5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBCQQorOjEwMkNBMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTg3RQorOjEwMkNCMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTFDOAorOjEwMkNDMDAwMDAwMDA2N0MwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDAxRQorOjEwMkNEMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwM0I4MDAwMDIxMDAyNAorOjEwMkNFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwNQorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDA2OQorOjEwMkQwMDAwQkFCRUNBRkUwMDIwNDgxMTAwMDAwMDAwQ0FGRUJBQkVDQQorOjEwMkQxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTE3RgorOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwNDAwNDA0ODExMDAwMDAwMDAwNgorOjEwMkQzMDAwMDAwMDIxNzAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMkQ0MDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDNBRQorOjEwMkQ1MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3RAorOjEwMkQ2MDAwMDAwMDAwMEEwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMkQ3MDAwMDAyMDAwMTAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA0RgorOjEwMkQ4MDAwMDAwMDAzQzk4QzAwMDAwMDAwMjA0NDExMDAwMDAwMDA3NgorOjEwMkQ5MDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwODEwMDAwMDBEOQorOjEwMkRBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEzNAorOjEwMkRCMDAwMDAwMDAwMDAwMDAwM0ZGRjQwMjgwQTIwMDAwMDAwMDA0MworOjEwMkRDMDAwODAwMDAwMDA0MDI4MEUyMDAwMDAwMDAwNDAwMDAwMDBBRAorOjEwMkREMDAwQzAyODEyMjAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjIwNAorOjEwMkRFMDAwMDAwMDA2N0MwMDAwMDAwMDAwMjAxNDEwMDAwMDAwMDAxRAorOjEwMkRGMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMkUwMDAwMENDMDAwMDAwMDAwMDNENzAwMDAwMDAwQzA0MDE4MDAwNAorOjEwMkUxMDAwMDAwMDAzREEwMDAwM0ZGRkMwMjgxQTIwMDAwMDAwMDA3NQorOjEwMkUyMDAwMDAwNDAwMDAwMDY5NDYyNjAwMDAwNjdDMDAwMDAwMDA0NworOjEwMkUzMDAwMDAyMDE4MTAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjRGNQorOjEwMkU0MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzRERENgorOjEwMkU1MDAwMDAwMDAwMDBDMDQwMUMwMDAwMDAwM0UwMDAwMDNGRkYzNQorOjEwMkU2MDAwQzAyODFFMjAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2Mjc2MgorOjEwMkU3MDAwMDAwMDA2N0MwMDAwMDAwMDAwMjAxQzEwMDAwMDAwMDA4NAorOjEwMkU4MDAwMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwMDAwMDAwMDBEQworOjEwMkU5MDAwMDAyODIwQzUwMDAwMDAwMDAwMDAwMDAwMDA0OTQ4RThBQworOjEwMkVBMDAwMDAwMDAwMDBBNTgwMDAwMDAwMjAwODExMDAwMDAwMDBDNAorOjEwMkVCMDAwMDAwMDIwMDAwMDIwMEMxMTAwMDAwMDAwODMwMDAwMDAzMgorOjEwMkVDMDAwMDA2MDQ0MTEwMDAwMDQwODAwMDAwMDAwMDAyMDQ0MDJEQgorOjEwMkVEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBDQQorOjEwMkVFMDAwMDAwMDAwMDA0MDIwNDgwMDAwMDAwMDAwMDAwMDAwMUYxQgorOjEwMkVGMDAwQzAyMTAyMjAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBGQgorOjEwMkYwMDAwMDAwMDAzRUQwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDAyQworOjEwMkYxMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEZGRkZCQQorOjEwMkYyMDAwQzA0ODEyMjAwMDAwMDNGNUE3ODAwMDAwMDAyMDA4MTEwRgorOjEwMkYzMDAwMDAwMDAwMDAwMDAwQTAwMDAwMjAwQzExMDAwMDAwMDBCNAorOjEwMkY0MDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDA4MDAwMDAwMDAzRAorOjEwMkY1MDAwMDAyMDQ0MDIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFMworOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAzOQorOjEwMkY3MDAwMDAwMEZGRkZDMDI4MTIyMDAwMDAwMDAwODMwMDAwMDBCNgorOjEwMkY4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4ODNEMQorOjEwMkY5MDAwMDAwMDAwMDA4NDAwMDAwMDAwMjA0NDExMDAwMDAwMDAzOAorOjEwMkZBMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwMkZCMDAwMUQwMDAwMDAwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTFCQworOjEwMkZDMDAwMDAwMDA0MDgwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDFGMAorOjEwMkZEMDAwQTk4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEMwMDBDRgorOjEwMkZFMDAwMDA0MDBDMTEwMDAwMDNGMEFCODAwMDAwMDAyMDA4MTEyRAorOjEwMkZGMDAwMDAwMDAwMDAwMDAwRjhFMDAwNDAwQzExMDAwMDAzRjBBOQorOjEwMzAwMDAwQUQ4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEY4ODBFMgorOjEwMzAxMDAwMDA0MDBDMTEwMDAwMDNGMEIzODAwMDAwMDAyMDA4MTFGNAorOjEwMzAyMDAwMDAwMDAwMDAwMDAwRjNGQzAwNDAwQzExMDAwMDAzRjA2MQorOjEwMzAzMDAwQUY4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEUwMDA0OAorOjEwMzA0MDAwMDA0MDBDMTEwMDAwMDNGMEIxODAwMDAwMDAyMDA4MTFDNgorOjEwMzA1MDAwMDAwMDAwMDAwMDAwRjAwMDAwNDAwQzExMDAwMDAzRjAzMAorOjEwMzA2MDAwODMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDIxNDhGRgorOjEwMzA3MDAwMDAyMDQ4MTEwMDAwMDAwMDg0MDAwMDAwMDAyMDQ0MTFERQorOjEwMzA4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxOAorOjEwMzA5MDAwMDAwMDAwMDAxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwMzBBMDAwMDA4MDAwMDAwMDAwMDAwMDAxMTgyMDAwQzAzMDQ2MjAxMQorOjEwMzBCMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBFRgorOjEwMzBDMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwMzBEMDAwMDBBMDAwMEEwMDAwMDAwMDAyMThBMDAwQzAzMDQ2MjAzNgorOjEwMzBFMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBCRgorOjEwMzBGMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwMzEwMDAwMDBBMDAwMEEwMDAwMDAwMDAzMThDMDAwQzAzMDQ2MjBFNAorOjEwMzExMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDA4RQorOjEwMzEyMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMzEzMDAwMDBBMDAwMEEwMDAwMDAwMDA0MThGOEUwQzAzMDQ2MjA5QgorOjEwMzE0MDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDA1RQorOjEwMzE1MDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwMzE2MDAwMDBBMDAwMEEwMDAwMDAwMDA1MThGODgwQzAzMDQ2MjBDQQorOjEwMzE3MDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDAyRQorOjEwMzE4MDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwMzE5MDAwMDBBMDAwMEEwMDAwMDAwMDA2MThFMDAwQzAzMDQ2MjAzMQorOjEwMzFBMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBGRQorOjEwMzFCMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwMzFDMDAwMDBBMDAwMEEwMDAwMDAwMDA3MThGMDAwQzAzMDQ2MjBGMAorOjEwMzFEMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBDRQorOjEwMzFFMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwMzFGMDAwMDBBMDAwMEEwMDAwMDAwMDA4MThGM0ZDQzAzMDQ2MjBDMAorOjEwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDA5RAorOjEwMzIxMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwMzIyMDAwMDBBMDAwMEEwMDAwMDAwMDAwMDAwMDMwMDAyMDBBMkQ2RAorOjEwMzIzMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjkwQzQwMDAwMDAwMDA1OQorOjEwMzI0MDAwMDAwMDAwMzAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMDBENQorOjEwMzI1MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFFMAorOjEwMzI2MDAwMDAwMDAwMDA4NjAwMDAwMDAwMjA0NDExMDAwMDAwMDA2MworOjEwMzI3MDAwMDAwMDAwMDAwMDQwNDgwMTAwMDAwMDAwODUwMDAwMDA0MAorOjEwMzI4MDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDE4MAorOjEwMzI5MDAwMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExMDAwMDAwMDAxQworOjEwMzJBMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwMzJCMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBCRQorOjEwMzJDMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwOAorOjEwMzJEMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA3NAorOjEwMzJFMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDBERgorOjEwMzJGMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2N0NGMworOjEwMzMwMDAwMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwMzMxMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDRDMDI0QgorOjEwMzMyMDAwMDAwMDA0M0UwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDA2RgorOjEwMzMzMDAwMDAwMDAwMDBDMDIwMTAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMzM0MDAwQzAyMDE0MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE4MDA5MQorOjEwMzM1MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxQzAwMDAwMDAwMDA3MQorOjEwMzM2MDAwMDAwMDdGMDAwMDI4MEEyMTAwMDAwMDAwMDAwMDQ1MDA0NgorOjEwMzM3MDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwRQorOjEwMzM4MDAwMDAwMDA0NEMwMDAwMDAwMEMwMjAyMDAwMDAwMDAwMDBFRAorOjEwMzM5MDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwNgorOjEwMzNBMDAwMDAyODBBMjMwMDAwMDAwMDAwMDAwMDEwMDAyRjAyMjI2NQorOjEwMzNCMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NTRDOQorOjEwMzNDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwNgorOjEwMzNEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjQ5RAorOjEwMzNFMDAwMDAwMDA2N0MwMDAwMDAwMDAwNDAwMDAwMDAwMDA0NTlCRQorOjEwMzNGMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBENworOjEwMzQwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTE0MAorOjEwMzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDA0MAorOjEwMzQyMDAwMDAwMDAwMDAwMDYwNDgwNTAwMDAwNjgxMDAwMDAwMDA2OAorOjEwMzQzMDAwMDAyODI0RjAwMDAwMDAwMDAwMDAwMDA3MDAyODBBMjNGNAorOjEwMzQ0MDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjIyMDAwMDAwMDAyOAorOjEwMzQ1MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDYwMDAwMDAwMDAxRQorOjEwMzQ2MDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwMDRFMDAwMDA4MAorOjEwMzQ3MDAwMDAwMDA0NzkwMDAwMDAwMDAwNDAwMDAwMDAwMDA0ODYwNQorOjEwMzQ4MDAwMDAwMDAwMDIwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBFNworOjEwMzQ5MDAwMEFFMDAwMDAwMDAwMDQ2NTAwMDAwMDAwMDAyRjAwQzlFMQorOjEwMzRBMDAwMDAwMDAwMDAwMDAwMDAwMDAyRTAwMDAwMDAwMDA0NzlCRAorOjEwMzRCMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDg2MDAwMDAwMDMzRgorOjEwMzRDMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBCRgorOjEwMzREMDAwMDAwMDA0NkEwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDA4NgorOjEwMzRFMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNDc5MDAwMDAwMDA3MworOjEwMzRGMDAwMDA0MDAwMDAwMDAwMDQ4NjAwMDAwMDA0MDAyRjAyMjJBQgorOjEwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NkY1RQorOjEwMzUxMDAwMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDBCMworOjEwMzUyMDAwMEFFMDAwMDAwMDAwMDQ3OTAwMDAwMDAwMDA0MDAwMDBGNAorOjEwMzUzMDAwMDAwMDA0ODYwMDAwMDAwNTAwMkYwMjIyMDAwMDAwMDBBOQorOjEwMzU0MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDc0MDAwMDAwMDAxOQorOjEwMzU1MDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwMDZFMDAwMDA4RAorOjEwMzU2MDAwMDAwMDA0NzkwMDAwMDAwMDAwNDAwMDAwMDAwMDA0ODYxNAorOjEwMzU3MDAwMDAwMDAwMDYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMzU4MDAwMEFFMDAwMDAwMDAwMDQ3OTAwMDAwMDAwMDAyRjAwQzlEQworOjEwMzU5MDAwMDAwMDAwMDAwMDAwMDAwMDA4RTAwMDAwMDAwMDA0NzlDNgorOjEwMzVBMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDg2MDAwMDdGMDBEMgorOjEwMzVCMDAwMDAyODBBMjEwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjIyMAorOjEwMzVDMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAwMDAxMQorOjEwMzVEMDAwMDAwMDAwMDgwMDIxMEEyMzAwMDAwMDAwMDAwMDAwMDA5NQorOjEwMzVFMDAwMTRDMDAwMDAwMDAwMDQ4MzAwMDAyMTY5MDAyMDQ0MTE4MQorOjEwMzVGMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBBMworOjEwMzYwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMzYxMDAwQzAyMDQ4MDAwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTFBOQorOjEwMzYyMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0NDAwMDAwMDAwMDA3NgorOjEwMzYzMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwMzY0MDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDA3RjAwMDAyODBBMjE2MAorOjEwMzY1MDAwMDAwMDAwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDBEMgorOjEwMzY2MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDhDMDAwMDAwMDBFMAorOjEwMzY3MDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDA4QQorOjEwMzY4MDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDAwMDAzQQorOjEwMzY5MDAwMDAwMDAwMDAwMDQwNEMwODAwMDAwNDRDMDAwMDAwMDA0NgorOjEwMzZBMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjA5MworOjEwMzZCMDAwMDAwMDAwMDAwMDAwMDAxMTQwMjExMjIwMDAwMDAwMDA2NgorOjEwMzZDMDAwMDAwMDAwMTI0MDIxMTYyMDAwMDAwMDAwMDAwMDIxNjlDNworOjEwMzZEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwQgorOjEwMzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjI1MDAwMDAwMDA5MgorOjEwMzZGMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwNDk2MDAwNDAwMDAzOAorOjEwMzcwMDAwQzA0OTRBMjAwMDAwMDQ5N0ZGRkJGRkZGQzAyODRBMjA2MQorOjEwMzcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjIzMDAwMDAwMDA2MworOjEwMzcyMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwNEEzMDAwMDAwMDBGRQorOjEwMzczMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAzOQorOjEwMzc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjI0MDAwMDAwMDAzMgorOjEwMzc1MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwODEwMDAwMDAxNAorOjEwMzc2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBDMDAyMDQ4MTE1RgorOjEwMzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDAxOQorOjEwMzc4MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNDlGQTAwMDAwMDAyMgorOjEwMzc5MDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTFEQgorOjEwMzdBMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAyMworOjEwMzdCMDAwMDAwMDAwMDQwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkIwMAorOjEwMzdDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTA0QworOjEwMzdEMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBGMworOjEwMzdFMDAwMDAwMDAwMDUwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkNDRQorOjEwMzdGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTAxQworOjEwMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDA2MworOjEwMzgxMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMzgyMDAwMDA0MDAwMDAwMDAwMDQ5RDAwMDAwMDAwQzAyMTBBMjBBQworOjEwMzgzMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0QjZGQQorOjEwMzg0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA4MgorOjEwMzg1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTFFQworOjEwMzg2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAzMAorOjEwMzg3MDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwNjgxMDAwMDAwMDA1OQorOjEwMzg4MDAwMDA0MDAwMDAwMDAwMDRCQTgxMDAwMDAwMDAyMDQ0MTE0NAorOjEwMzg5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBBRQorOjEwMzhBMDAwMDAwNDAwMDBDMDI5NDYyMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMzhCMDAwQzA2MDAwMDAwMDAwMDY3QzAwMDAwMDAxMDAyMTAyMjIyMAorOjEwMzhDMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0QzE1RgorOjEwMzhEMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMzhFMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA4OAorOjEwMzhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDA1MAorOjEwMzkwMDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwMDAwMDAwMDBERQorOjEwMzkxMDAwQzAyMDQ0MDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MTAyQgorOjEwMzkyMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBBMQorOjEwMzkzMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjhGNAorOjEwMzk0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTE3QgorOjEwMzk1MDAwMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2N0MxMgorOjEwMzk2MDAwMDAwMDAwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMzk3MDAwMTRDMDAwMDAwMDAwMDRDMzAwMDAyMTgwMDAyMDQ0MTE5NgorOjEwMzk4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwRgorOjEwMzk5MDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMzlBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwRgorOjEwMzlCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDBCRgorOjEwMzlDMDAwMDAwMDAwMDMwMDMzM0UyRjAwMDAwMDAwMDAwMDAwMDE1MworOjEwMzlEMDAwMDAyMTAyMjEwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDBBRgorOjEwMzlFMDAwMDAwMDA0RjMwMDAwMDAyQzAwMjAwQTJEMDAwMDAwMDA1RAorOjEwMzlGMDAwMDAwNDAwMDAxOEUwMEMxMTAwMDAwNEUyMDAwMDAwMDFDNworOjEwM0EwMDAwMDAzMzNFMkYwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTExNworOjEwM0ExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAzQworOjEwM0EyMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgyMworOjEwM0EzMDAwMDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMgorOjEwM0E0MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA0RQorOjEwM0E1MDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA2NworOjEwM0E2MDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDM4MQorOjEwM0E3MDAwMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMDAwMDAwMDBFMgorOjEwM0E4MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwM0E5MDAwRDhDMDQ4MDAwMDAwMDRENjAwMDAyMTY5MDAyMDQ0MTE2RAorOjEwM0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBBQworOjEwM0FCMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDg5MworOjEwM0FDMDAwMDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA3MgorOjEwM0FEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBCRQorOjEwM0FFMDAwMDAwMDAwMkQwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwM0FGMDAwMDAyOTBDODMwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwRgorOjEwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDA0QgorOjEwM0IxMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgzMgorOjEwM0IyMDAwMDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAxMQorOjEwM0IzMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA1RAorOjEwM0I0MDAwMDAwMDAwMTEwMDIxMDIyNDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwM0I1MDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDA1MQorOjEwM0I2MDAwMDAwMDA0OUQwMDAwMDAyQ0MwMjAzNjIwMDAwMDAwMDA1MgorOjEwM0I3MDAwMDAwMDAwMkRDMDQwMzYyMDAwMDAwMDAwMDAwMDAwMEZCMworOjEwM0I4MDAwMDAyMTAyMjEwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAxRAorOjEwM0I5MDAwMDAwMDA0RjgwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEJCRQorOjEwM0JBMDAwMDAwMDAwMDBEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwM0JCMDAwQzA0MDA0MDAwMDAwMDAwMUI1MDAwMDAwMDAyMDQ0MTFENgorOjEwM0JDMDAwMDAwMDAwMDAwMDAwMjAwMDAwMjA0ODExMDAwMDAwMDA1QworOjEwM0JEMDAwQjYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEEwMDAxQQorOjEwM0JFMDAwMDAyMDQ4MTEwMDAwMDAwMEI3MDAwMDAwMDAyMDQ0MTEzMAorOjEwM0JGMDAwMDAwMDAwMDAwMDAwQzAwMDAwMjA0ODExMDAwMDAwMDA4QworOjEwM0MwMDAwQjgwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEY4RTBBRgorOjEwM0MxMDAwMDAyMDQ4MTEwMDAwMDAwMEI5MDAwMDAwMDAyMDQ0MTFGRAorOjEwM0MyMDAwMDAwMDAwMDAwMDAwRjg4MDAwMjA0ODExMDAwMDAwMDBBMworOjEwM0MzMDAwQkEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEUwMDA3NQorOjEwM0M0MDAwMDAyMDQ4MTEwMDAwMDAwMEJCMDAwMDAwMDAyMDQ0MTFDQgorOjEwM0M1MDAwMDAwMDAwMDAwMDAwRjAwMDAwMjA0ODExMDAwMDAwMDBGQgorOjEwM0M2MDAwQkMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEYzRkMzNAorOjEwM0M3MDAwMDAyMDQ4MTEwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFENQorOjEwM0M4MDAwMDAwMDAwMDAwMDAwMDAwMjAwMjA0ODExMDAwMDAwMDBCOQorOjEwM0M5MDAwMDAwMDAwRkYwMDI4MEUzMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwM0NBMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBGNAorOjEwM0NCMDAwMDAwMDA1MEMwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwQgorOjEwM0NDMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNTIxMDAwMDAwMDBGQQorOjEwM0NEMDAwMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDFDMDAyMDM2MjMxMgorOjEwM0NFMDAwMDAwMDAwMDAwMDAwMDAyQjAwMjAzNjIzMDAwMDAwMDAzMAorOjEwM0NGMDAwMDAwMDAwMjkwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjhGQQorOjEwM0QwMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDE3MDAyMDM2MjNBQQorOjEwM0QxMDAwMDAwMDAwMDAwMDAwMDAyNTAwMjAzNjIzMDAwMDAwMDAwNQorOjEwM0QyMDAwMDAwMDAwMjYwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMTVERgorOjEwM0QzMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDE2MDAyMDM2MjM3QgorOjEwM0Q0MDAwMDAwMDAwMDBGRkZGRTAwMDAwMjAwQzExMDAwMDAwMDA1OAorOjEwM0Q1MDAwMDAwMDAwMjEwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjJBNworOjEwM0Q2MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAxRkZGMDAyMDBDMTE3RgorOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAyMzAwMjAzNjIzMDAwMDAwMDBBNworOjEwM0Q4MDAwMDAwMDAwMjQwMDIwMzYyMzAwMDAwMDAwRjFGRkZGRkZBOAorOjEwM0Q5MDAwMDAyODNBMkUwMDAwMDAwMDAwMDAwMDFBQzAyMjBFMjA2OQorOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDA0NAorOjEwM0RCMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDYwNworOjEwM0RDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDJBNDAyMDM2MjA5QQorOjEwM0REMDAwMDAwMDAwMDA4NzAwMDAwMDAwMjA0NDExMDAwMDAwMDBFNworOjEwM0RFMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRjQxNgorOjEwM0RGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTBENgorOjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwQzExMDAwMDAwMDA3NQorOjEwM0UxMDAwMDAwMDAwMzAwMDIwMzYyMzAwMDAwMDAwOUQwMDAwMDA1QworOjEwM0UyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFGNDAyMTRBMjAzMworOjEwM0UzMDAwMDAwMDAwMDA5NjAwMDAwMDAwMjA0NDExMDAwMDAwMDA3NworOjEwM0U0MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwM0U1MDAwQzAyMDBDMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDEwMDA4NgorOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExNjI0MDAwMDAwMDBEOAorOjEwM0U3MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMUQ1MQorOjEwM0U4MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDAzMDAyODFFMjM0RAorOjEwM0U5MDAwMDAwMDAwMDAwMDAwMDAwODAwMjIyMjIzMDAwMDAwMDBCMworOjEwM0VBMDAwRkZGRkYwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDBCMgorOjEwM0VCMDAwMDAyOTIwRTgwMDAwMDAwMDAwMDAwMDFGMDAyMDM2MjgzNAorOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAxODAwMjExRTIzMDAwMDAwMDA3OAorOjEwM0VEMDAwMDAwMDAwMjAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMDI0MworOjEwM0VFMDAwMDAyMjE2MjQwMDAwMDAwMDAwMDAwMDAwMDAzMDE0QTg4QQorOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAxRTAwMjAzNjI1MDAwMDAwMDAyOQorOjEwM0YwMDAwMDAwMDAwMDMwMDIxMUEyNDAwMDAwMDAwMTAwMDAwMDAzRgorOjEwM0YxMDAwMDAyODFBMjYwMDAwMDAwMEVGRkZGRkZGMDAyODNBMkVCRAorOjEwM0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkzOENFMDAwMDA2NkFEMgorOjEwM0YzMDAwMDAwMDAwMDE0MDI4MEEyMDAwMDAwMDAwMDAwMDAwMDZFOAorOjEwM0Y0MDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMzAwQzAyODEyMjBCRQorOjEwM0Y1MDAwMDAwMDAwMDAwMDAwMDAwODAwMjExMjI0MDAwMDAwMDAwMgorOjEwM0Y2MDAwMDAwMDAwMDBDMDIwMTYyMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwM0Y3MDAwQzAyMDFBMjAwMDAwMDAwMDAwMDAwMDAwMDAyMTAyMjJFMgorOjEwM0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA1NTlGRgorOjEwM0Y5MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEyQQorOjEwM0ZBMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU4MDAzMDBBMjRDMAorOjEwM0ZCMDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2N0NBQQorOjEwM0ZDMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGMgorOjEwM0ZEMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDIwMDAwMDAyOTRBMjZEOQorOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDA1OQorOjEwM0ZGMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDIwNgorOjEwNDAwMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA5MAorOjEwNDAxMDAwMDAwMDA1NjEwMDAwMDAwMEMwMjAxQzEwMDAwMDAwMDAyRQorOjEwNDAyMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTZGMDAwMDAwMDIxQQorOjEwNDAzMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA2MAorOjEwNDA0MDAwMDAwMDA1NjE4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAxNAorOjEwNDA1MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTg2QworOjEwNDA2MDAwMDAzMDBBMjQwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjIxRAorOjEwNDA3MDAwMDAwMDA2N0MwMDAwMDAwMEMwMjAxQzEwMDAwMDAwMDBCMgorOjEwNDA4MDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTZGMDAwMDAwMDBCQworOjEwNDA5MDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMAorOjEwNDBBMDAwMDAwMDA1NjUwMDAwMDAwMEMwMjAxQzAwMDAwMDAwMDBBQQorOjEwNDBCMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTZGMDAwMDAwMDQ4OAorOjEwNDBDMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBEMAorOjEwNDBEMDAwMDAwMDA1NkQ4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3OAorOjEwNDBFMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkRDOQorOjEwNDBGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAyMworOjEwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwMDAwMDA2ODFDMAorOjEwNDExMDAwMDAwMDAwMDAwMDQwMUMxMDAwMDAwNTZGMDAwMDAwMDBCRgorOjEwNDEyMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDBBRgorOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDBFRTAwMDAwMDAwMDA1NzExQgorOjEwNDE0MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUJDMDAwMDAwMDA0RQorOjEwNDE1MDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAzRQorOjEwNDE2MDAwMDAwMDA1ODIwMDAwQTJCNzAwMjA0NDExMDAwMDAwMDBGQQorOjEwNDE3MDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDA0RgorOjEwNDE4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE0MAorOjEwNDE5MDAwMDAwMDAwMDAwMDA0QTJCNjAwNjA0NDExMDAwMDA2N0M4QworOjEwNDFBMDAwMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDY3QworOjEwNDFCMDAwMDAyMjI2MzAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTFBQQorOjEwNDFDMDAwMDAwMDA2N0MwMDAwQTJDNDAwMjA0NDExMDAwMDAwMDA5MgorOjEwNDFEMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNDFFMDAwMDBFMDAwMDAwMDAwMDU4MDAwMDBBMkQxMDAyMDQ0MTE4MgorOjEwNDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4MDAwMDAwMDAyRgorOjEwNDIwMDAwMDAwMEEyRDEwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFDNQorOjEwNDIxMDAwMDA1MDRBMjgwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjQ4NgorOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1OTMyQQorOjEwNDIzMDAwMDAwMEEyQkIwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBQworOjEwNDI0MDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwOQorOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBFNAorOjEwNDI2MDAwMDAwNEEyQkEwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMUE5RAorOjEwNDI3MDAwMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzA0RAorOjEwNDI4MDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2N0NDRgorOjEwNDI5MDAwMDAwMEEyQzUwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0MgorOjEwNDJBMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDBDRAorOjEwNDJCMDAwMDAwMDA1OTEwMDAwQTJEMjAwMjA0NDExMDAwMDAwMDA3RgorOjEwNDJDMDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDJFQQorOjEwNDJEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjhBNgorOjEwNDJFMDAwMDAwMDAwMDAwMDAwMDAwMjAwMkYwMjI0MDAwMDAwMDA3NworOjEwNDJGMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUE0MDAwMEEyQkZFOAorOjEwNDMwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDdDOQorOjEwNDMxMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBBNworOjEwNDMyMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQkVBRgorOjEwNDMzMDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDAwMDFBMDAyMTIyMzBCOQorOjEwNDM0MDAwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDBFRgorOjEwNDM1MDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjdDMDAwMEEyQzY5NgorOjEwNDM2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTk3NworOjEwNDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1QTJCNgorOjEwNDM4MDAwMDAwMEEyRDMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0MworOjEwNDM5MDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQzMDAyMDQ0MTFBMworOjEwNDNBMDAwMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDA0QQorOjEwNDNCMDAwMDAwMEEyQzMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyMworOjEwNDNDMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTE4OAorOjEwNDNEMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA2MworOjEwNDNFMDAwMDAwNEEyQzIwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMUExNAorOjEwNDNGMDAwMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzBDQworOjEwNDQwMDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2N0M0RAorOjEwNDQxMDAwMDAwMEEyQzcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCRQorOjEwNDQyMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDA0QgorOjEwNDQzMDAwMDAwMDA1QjEwMDAwQTJENDAwMjA0NDExMDAwMDAwMDBEQgorOjEwNDQ0MDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDQ2NgorOjEwNDQ1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjgyNAorOjEwNDQ2MDAwMDAwMDAwMDA4NTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1MgorOjEwNDQ3MDAwMDAwMDAwMDAwMDIwNDgwMTAwMDAwMDAwMDAwMDMwNEE1OQorOjEwNDQ4MDAwMDAyMDQ0MTEwMDAwMDAwMDAxMDAwMDAwMDAyMDQ4MTEzRAorOjEwNDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA1QjcyMAorOjEwNDRBMDAwQTQwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzMworOjEwNDRCMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDA5NAorOjEwNDRDMDAwMDAwMDA1QkMwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEyNgorOjEwNDREMDAwMDAwMDAwMkMwMDIwMzYyMTAwMDAwMDAwODEwMDAwMDBCOAorOjEwNDRFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTFEOAorOjEwNDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjMwMDAwMDAwMDA1QgorOjEwNDUwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUMzMDAwMDAwMDAxNworOjEwNDUxMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDMwMDA0MDM2MjE5RgorOjEwNDUyMDAwMDAwMDA1RDYwMDAwMDAzMDAwMjAwNjJEMDAwMDAwMDAyRAorOjEwNDUzMDAwMDAwMDdFMDAwMDI4MDYyMTAwMDAwMDAwMDAwMDAwMDBBRQorOjEwNDU0MDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAyRAorOjEwNDU1MDAwMDAwMDA1RDY4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA4QQorOjEwNDU2MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEwOTI5QgorOjEwNDU3MDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDAwMDMxMDAyMDM2MzA0RAorOjEwNDU4MDAwMDAwMDAwMDAwMDA0QTA5MzAwNjA0NDExMDAwMDA2N0NCRAorOjEwNDU5MDAwMDAwMDAwMzIwMDIwMzYzMDAwMDAwMDAwMDAwNEEyQjYwNworOjEwNDVBMDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDAwMDMzMDAyMDM2MzAxQgorOjEwNDVCMDAwMDAwMDAwMDAwMDA0QTJCQTAwNjA0NDExMDAwMDA2N0M2NAorOjEwNDVDMDAwMDAwMDAwMzQwMDIwMzYzMDAwMDAwMDAwMDAwNEEyQkVDRAorOjEwNDVEMDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDAwMDM1MDAyMDM2MzBFOQorOjEwNDVFMDAwMDAwMDAwMDAwMDA0QTJDMjAwNjA0NDExMDAwMDA2N0MyQworOjEwNDVGMDAwMDAwMDAwMzYwMDIwMzYzMDAwMDAwMDAwMDAwNDIwMDRENworOjEwNDYwMDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDFBMkE0MDAyMDQ0MTFCNworOjEwNDYxMDAwMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDBFMgorOjEwNDYyMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwM0Y5MworOjEwNDYzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTE0OQorOjEwNDY0MDAwMDAwMDAwMDAwMDAwMDAwNTAwMjA0ODExMDAwMDAwMDBFQworOjEwNDY1MDAwMDAwMEExRjQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNDY2MDAwMDAyMDQ4MTEwMDAwMDAwMDg4MDAwMDAwMDAyMDQ0MTFENAorOjEwNDY3MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDMAorOjEwNDY4MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDYyRQorOjEwNDY5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMzAzRgorOjEwNDZBMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MUZGOQorOjEwNDZCMDAwMDAwMDAwMzAwMDIwMDYyRDAwMDAwMDAwMDAwMDAwMDA3NworOjEwNDZDMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBBQworOjEwNDZEMDAwMDAwMDA2MUY4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCRgorOjEwNDZFMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDdFMDBEMgorOjEwNDZGMDAwMDAyODA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjExOQorOjEwNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA1RjhDMAorOjEwNDcxMDAwMDAwMEEwOTIwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzFDMQorOjEwNDcyMDAwMDAyMDRBMkQwMDAwMDAwMDAwMDBBMDkzMDAyMDQ0MTE0QQorOjEwNDczMDAwMDAwMDAwMDAwMDAwMDAzMjAwMjA0QTJEMDAwMDAwMDBCMAorOjEwNDc0MDAwMDAwMEEyQjYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzM2OQorOjEwNDc1MDAwMDAyMDRBMkQwMDAwMDAwMDAwMDBBMkJBMDAyMDQ0MTFGMQorOjEwNDc2MDAwMDAwMDAwMDAwMDAwMDAzNDAwMjA0QTJEMDAwMDAwMDA3RQorOjEwNDc3MDAwMDAwMEEyQkUwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzUyRgorOjEwNDc4MDAwMDAyMDRBMkQwMDAwMDAwMDAwMDBBMkMyMDAyMDQ0MTFCOQorOjEwNDc5MDAwMDAwMDAwMDAwMDAwMDAzNjAwMjA0QTJEMDAwMDAwMDA0QworOjEwNDdBMDAwMDAwMDAwMzAwMDIwMDYyRDAwMDAwMDAwMDAwMDAxRkY4NgorOjEwNDdCMDAwMDAyODA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjE1OAorOjEwNDdDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MUVEOQorOjEwNDdEMDAwMDAwMDAwMDAwMDIxMDIyMTAwMDAwMDAwMDAwMDAwMDA5NQorOjEwNDdFMDAwMTRDMDAwMDAwMDAwMDYwMTAwMDRBMDAzMDA2MDQ0MTE5MgorOjEwNDdGMDAwMDAwMDA2N0MwMDAwQTAwMzAwMjA0NDExMDAwMDAwMDAxRgorOjEwNDgwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwMDAwMDEyRgorOjEwNDgxMDAwMDAyMTA2MjEwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA3QworOjEwNDgyMDAwMDAwMDA2MDYwMDA0QTAxMDAwNjA0NDExMDAwMDA2N0M5MQorOjEwNDgzMDAwMDAwMEEwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1MworOjEwNDg0MDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDAwMDAxMDAyMTA2MjFBNworOjEwNDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwNgorOjEwNDg2MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjFFMDAwNEEwMTE4MworOjEwNDg3MDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDBBMDExMDAyMDQ0MTFEQgorOjEwNDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBCMAorOjEwNDg5MDAwMDAwNEEwMTIwMDYwNDQxMTAwMDAwNjdDMDAwMEEwMTI3OQorOjEwNDhBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAxQgorOjEwNDhCMDAwMDAwMDAwMDAwMDA0QTAxMzAwNjA0NDExMDAwMDA2N0MwQQorOjEwNDhDMDAwMDAwMEEwMTMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNDhEMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDE0MDA2MDQ0MTFGMworOjEwNDhFMDAwMDAwMDA2N0MwMDAwQTAxNDAwMjA0NDExMDAwMDAwMDAxRAorOjEwNDhGMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTU4NworOjEwNDkwMDAwMDA2MDQ0MTEwMDAwMDY3QzAwMDBBMDE1MDAyMDQ0MTE0NgorOjEwNDkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAxRgorOjEwNDkyMDAwMDAwNEEwMTYwMDYwNDQxMTAwMDAwNjdDMDAwMEEwMTZFMAorOjEwNDkzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTA4QQorOjEwNDk0MDAwMDAwMDAwMDAwMDA0QTAxNzAwNjA0NDExMDAwMDA2N0M3NQorOjEwNDk1MDAwMDAwMEEwMTcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQgorOjEwNDk2MDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTFGMgorOjEwNDk3MDAwMDAwMDA2N0MwMDAwMDAyQzAwODAwNjJEMDAwMDAwMDBENgorOjEwNDk4MDAwRkYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCMworOjEwNDk5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEyNAorOjEwNDlBMDAwMDAwMDAwMDAwMDAwMDAwMjAwODA0ODExMDAwMDAwMDAyQworOjEwNDlCMDAwMDAwMDAwMDAwRUUwMDAwMDAwMDAwNjMwMDAwMDAwMzBBMworOjEwNDlDMDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMDAyMDAyODA2MjE0MworOjEwNDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDA4NQorOjEwNDlFMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjJFODEwMDAwMDAyNgorOjEwNDlGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFDOAorOjEwNEEwMDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2N0M0NworOjEwNEExMDAwMDAwMDEwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMDAwMkIyMgorOjEwNEEyMDAwMDAyMDM2MjIwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBBRQorOjEwNEEzMDAwMDAwMDA2MzQwMDAwMDAwMDAwNjAwMDAwMDAwMDA1QkMxQgorOjEwNEE0MDAwOTgwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEE1MDAwMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDA1RAorOjEwNEE2MDAwMDAwMDA2MzQwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwNworOjEwNEE3MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjI1OQorOjEwNEE4MDAwMDAyMDQ4MTEwMDAwMDAwMDg5MDAwMDAwMDAyMDQ0MTFBRgorOjEwNEE5MDAwMDAwMDAwMDAwMDAwMDAwMTAwNDA0ODExMDAwMDA2MjA1NgorOjEwNEFBMDAwOTcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGQQorOjEwNEFCMDAwMDAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTE3RQorOjEwNEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODExMDAwMDA2MjAyNworOjEwNEFEMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjREMDAwMUEyQTREQworOjEwNEFFMDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MDA2MDQ4MTFDMgorOjEwNEFGMDAwMDAwMDAzNkEwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDBBNAorOjEwNEIwMDAwMDAwMTAwMDAwMDIwNDgxMTAwMDAwMDAwODEwMDAwMDBBQQorOjEwNEIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFBNgorOjEwNEIyMDAwMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExMDAwMDAwMDA3MworOjEwNEIzMDAwMDk4MDAwMDAwMDIwNDgxMTAwMDAwMDAwRkZGRkZGRkY3NworOjEwNEI0MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE3MworOjEwNEI1MDAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDAzRQorOjEwNEI2MDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMUY0QgorOjEwNEI3MDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwRQorOjEwNEI4MDAwMDAwMDAwMDAwMDAwMDAwNDAwNDA0QzExMDAwMDA2NDczNworOjEwNEI5MDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMTdCRQorOjEwNEJBMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA0MDAyOTFFMjcyOAorOjEwNEJCMDAwMDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDAwMQorOjEwNEJDMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwRkZGRkZGRkI2QgorOjEwNEJEMDAwMDAyODFFMjcwMDAwMDAwMDAwMDAwMDE3MDA4MDM2Mjc3NAorOjEwNEJFMDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDA0MworOjEwNEJGMDAwMDAwMDAwMDgwMDI5MUUyNzAwMDAwMDAwMDAwMDAwMTcyOAorOjEwNEMwMDAwMDA4MDM2MjcwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQ0NQorOjEwNEMxMDAwMDAwMDAwMDBGRkZGRkZGNzAwMjgxRTI3MDAwMDAwMDAzMworOjEwNEMyMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwMDAwMUEyQTQ0OQorOjEwNEMzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MDA2MDQ4MTEzMAorOjEwNEM0MDAwMDAwMDAzNkEwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDA1MgorOjEwNEM1MDAwMDAwMTAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0MzRAorOjEwNEM2MDAwMDAyMDQ0MTEwMDAwMDAwMDAxODAwMDAwMDAyMDQ4MTFENQorOjEwNEM3MDAwMDAwMDAwMDBGRkZGRkZGRjAwMjA0ODExMDAwMDAwMDBCRgorOjEwNEM4MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBBQgorOjEwNEM5MDAwMTcwMDAwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwNworOjEwNENBMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA4QQorOjEwNENCMDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMUZGQQorOjEwNENDMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBCRAorOjEwNENEMDAwMDAwMDA2N0IwMDAwMDAxMDAwNDA0QzExMDAwMDA2NjEzRgorOjEwNENFMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNENGMDAwMzhDMDAwMDAwMDAwMDAwMDAwMDAwMDFEMDAyMDBBMkQ0OAorOjEwNEQwMDAwMDAwMDAwMDAwMDAwMDAxRTAwMjAwRTJEMDAwMDAwMDAyQQorOjEwNEQxMDAwMDAwMDAwMUYwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMjBGNQorOjEwNEQyMDAwMDAyMDE2MkQwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEyMQorOjEwNEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwNworOjEwNEQ0MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMDBGNgorOjEwNEQ1MDAwMDAyMDQ4MDEwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTEzMQorOjEwNEQ2MDAwMDAwMDAwMDAwMDAwMDAwNDAwMzAxMjI0MDAwMDAwMDBEOQorOjEwNEQ3MDAwMDAwMDAwMDAwMDJGMDA2NDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwNEQ4MDAwMENDMDAwMDAwMDAwMDY3QTAwMDAwMDAzMDAyODFBMjI3MAorOjEwNEQ5MDAwMDAwMDAwMDAwMDAwMDAwODAwMjIxMjIyMDAwMDAwMDBCNQorOjEwNERBMDAwRkZGRkYwMDAwMDI4MTIyNDAwMDAwMDAwMDAwMDAwMDBCNworOjEwNERCMDAwMDAyOTEwQzQwMDAwMDAwMDAwMDAwMDFGMDA0MDM2MjQzRAorOjEwNERDMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDA2MworOjEwNEREMDAwMDAwMDAwMDAxQUMwMDAwMDAwMDAwNjdDOUYwMDAwMDBEOAorOjEwNERFMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTE5NQorOjEwNERGMDAwMDAwMDAwMDAwMDAwMDAwMDFBRTAwMDAwMDAwMDA2N0YzNAorOjEwNEUwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwNEUxMDAwMUFDMDAwMDAwMDAwMDY4MTlFMDAwMDAwMDAyMDQ0MTExRQorOjEwNEUyMDAwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDBDOQorOjEwNEUzMDAwMDAwMDAwMDAxQUUwMDAwMDAwMDAwNjg0MDAwMDAwMDBFRQorOjEwNEU0MDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDA4MgorOjEwNEU1MDAwMDAwMDAwMEIwMDAwMTAwMDAwNjAwNDExMDAwMDAzMTVBQQorOjEwNEU2MDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwRAorOjEwNEU3MDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAyMjVDMDAyMDQ0MTExMworOjEwNEU4MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDBBNgorOjEwNEU5MDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUIwQQorOjEwNEVBMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE3NworOjEwNEVCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA3OAorOjEwNEVDMDAwMDAwMUExRkRDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjFFRAorOjEwNEVEMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjdGMAorOjEwNEVFMDAwMDAwMDAwMDAwMDAwMDAyNDAwMjAyMjJEMDAwMDAwMDAyRgorOjEwNEVGMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDA0MgorOjEwNEYwMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFBRgorOjEwNEYxMDAwMDAwMDAwMDAwMDAwMDAyMjAwMjAyMjJEMDAwMDAwMDAwMAorOjEwNEYyMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAxMQorOjEwNEYzMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE3RgorOjEwNEY0MDAwMDAwMDAwMDAwMDAwMDAyMzAwMjAxRTJEMDAwMDAwMDBEMworOjEwNEY1MDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDBEQQorOjEwNEY2MDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MTEyRgorOjEwNEY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwNEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwNEY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwNEZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwNEZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwNEZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNEZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwNTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwNTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNTA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNTBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwNTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwNTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwNTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwNTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwNTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNTJCMDAwMDE0MjA0RjUwNUIzMDI1MDAwMDAwMDAwMDFDMzAxNjg3QgorOjEwNTJDMDAwMDQzNTA1QjMwMDAwMDAwMDAyMjUwMjA5MDI1MDAxNTExNworOjEwNTJEMDAwMDAwMDAwMDAwMjIzMDI0NTAyQTAwMjQxMDAwMDAwMDA3RAorOjEwNTJFMDAwMDNDRDA1QjMwNUIzMDVCMzAwMDAwMDAwMDYzQzA2M0Q0MQorOjEwNTJGMDAwMDMxRjA1QjMwMDAwMDAwMDA1QjMwNUI4MDMyMDAzNDBGOQorOjEwNTMwMDAwMDAwMDAwMDAwMzJBMDI4MjAzNDIwMzM0MDAwMDAwMDA3MAorOjEwNTMxMDAwMDVCMzA1QjMwNUIzMDVCMzAwMDAwMDAwMDVCMzA1NDRBQworOjEwNTMyMDAwMDVCMzA1QjMwMDAwMDAwMDAzQjIwNUIzMDRBRTAzNDRBNworOjEwNTMzMDAwMDAwMDAwMDAwNDhEMDQ0MzA0MzMwNUIzMDAwMDAwMDBBNgorOjEwNTM0MDAwMDRDMzA1QjMwNDM3MDREMDAwMDAwMDAwMDQ0MzA0RkE4QQorOjEwNTM1MDAwMDM1MTAzNzEwMDAwMDAwMDA1QjMwNUIzMDVCMzA1QjNBNQorOjEwNTM2MDAwMDAwMDAwMDAwNUIzMDVCMzA1QjMwNUIzMDAwMDAwMDA1RAorOjEwNTM3MDAwMDVCMzA1QjMwNjMyMDVCQTAwMDAwMDAwMDVCMzA1QjM1NgorOjEwNTM4MDAwMDAwNzA1QjMwMDAwMDAwMDA1QjMwNUIzMDVCMzA1QjM3RQorOjEwNTM5MDAwMDAwMDAwMDAwNUIzMDVCMzA1QjMwNUIzMDAwMDAwMDAyRAorOjEwNTNBMDAwMDNFRTAzRTMwM0ZFMDNGQzAwMDAwMDAwMDQwNDA0MDAxQQorOjEwNTNCMDAwMDQwMjA0MDYwMDAwMDAwMDA0MTIwNDBFMDQxQTA0MTY3RAorOjEwNTNDMDAwMDAwMDAwMDAwNDIyMDQxRTA0MkEwNDI2MDAwMDAwMDAzRAorOjEwNTNEMDAwMDVCMzA1QjMwNDJFMDVCMzAwMDAwMDAwMDVCMzA1QjMwMworOjEwNTNFMDAwMDVCMzA1QjMwMDAwMDAwMDA1QjMwNUIzMDVCMzA1QjM2RAorOjEwNTNGMDAwMDAwMDAwMDAwMDAyMDY2ODA2ODYwMDA2MDAwMDAwMDBBQgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjY3MF9wZnAuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY2NzBfcGZwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTI5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY2NzBfcGZwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTQ1IEBACis6MTAwMDAwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMDdDMDM4QkVECis6MTAwMDEwMDAwMDgwMDFCODAwN0MwMzhCMDBENDQwMUUwMEVFMDAxRTVGCis6MTAwMDIwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEM0MTgzOEMzCis6MTAwMDMwMDAwMENBMjQwMDAwQ0EyODAwMDA5NTgxQTgwMEM0MUMzQTA4Cis6MTAwMDQwMDAwMEMzQzAwMDAwQ0EwODAwMDBDQTBDMDAwMDdDNzQ0QjRBCis6MTAwMDUwMDAwMEMyMDAwNTAwOTlDMDAwMDBDNDFDM0EwMDdDNzQ0QzJBCis6MTAwMDYwMDAwMEMwRkZGMDAwMDQyQzA0MDAzMDkwMDIwMDdEMjUwMDQ5Cis6MTAwMDcwMDAwMDM1MTQwMjAwN0QzNTBCMDAyNTU0MDMwMDdDRDU4MDJCCis6MTAwMDgwMDAwMDI1OUMwMzAwOTVDMDA0MDBENTAwMUIwMDdFRERDMTQ3Cis6MTAwMDkwMDAwMDdEOUQ4MDAwRDY4MDFCMDBENTgwMUIwMEQ0NDAxRUIzCis6MTAwMEEwMDAwMEQ1NDAxRTAwRDY0MDFFMDBENjgwMUUwMEQ0ODAxRTAzCis6MTAwMEIwMDAwMEQ0QzAxRTAwOTc4M0QzMDBENUMwMUUwMENBMDgwMDFDCis6MTAwMEMwMDAwMDgwMDAxQTAwQ0EwQzAwMDBFNDAxMUUwMEQ0MDAxRUNCCis6MTAwMEQwMDAwMDgwMDAwQzAwQzQxODM4MDBFNDAxM0UwMEQ0MDAxRTZCCis6MTAwMEUwMDAwMDgwMDAwQzAwQzQxODM4MDBENDQwMUUwMEVFMDAxRTMyCis6MTAwMEYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDExRTA0Cis6MTAwMTAwMDAwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMEYxCis6MTAwMTEwMDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxM0UwMEQ0MDAxRTlGCis6MTAwMTIwMDAwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDAwMEEwMDAwMDIzCis6MTAwMTMwMDAwMDdFODI4QjAwQ0ExODAwMDBENDQwMUUwMEQ1ODAxRUFECis6MTAwMTQwMDAwMDgwMDA1MzAwRDQwMDc1MDBENDQwMUUwMENBMDgwMDhGCis6MTAwMTUwMDAwMENBMEMwMDAwQ0ExMDAwMDBENDgwMTkwMEQ0QzAxOEQ2Cis6MTAwMTYwMDAwMEQ1MDAxNzAwRDQ4MDFFMDBENEMwMUUwMEQ1MDAxRThDCis6MTAwMTcwMDAwMEUyMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4Qjg2Cis6MTAwMTgwMDAwMENBMDgwMDAwRDQ4MDYwMDBENDQwMUUwMDgwMDAwMDM3Cis6MTAwMTkwMDAwMEQ0ODAxRTAwQ0EwODAwMDBENDgwNjEwMEQ0NDAxRTM0Cis6MTAwMUEwMDAwMDgwMDAwMDAwRDQ4MDFFMDBDQTA4MDAwMENBMEMwMEI1Cis6MTAwMUIwMDAwMEQ0NDAxRTAwRDQ4MDE2MDBENEMwMTYwMEQ0ODAxRTg3Cis6MTAwMUMwMDAwMDgwMDFCODAwRDRDMDFFMDBDNjA4NDMwMENBMEMwMDVECis6MTAwMUQwMDAwMENBMTAwMDAwOTQ4MDA0MDBDQTE0MDAwMEU0MjBGMzU4Cis6MTAwMUUwMDAwMEQ0MjAxMzAwRDU2MDY1MDBENEUwMUMwMEQ1MjAxQzhECis6MTAwMUYwMDAwMEQ1NjAxQzAwODAwMDAwMDAwNjIwMDEwMEM2MDg0M0Y2Cis6MTAwMjAwMDAwMENBMEMwMDAwQ0ExMDAwMDA5NDgzRjcwMENBMTQwMDUyCis6MTAwMjEwMDAwMEU0MjBGMzAwODAwMDc5MDBENDIwMTMwMEM2MDg0M0Q2Cis6MTAwMjIwMDAwMENBMEMwMDAwQ0ExMDAwMDA5ODgzRUYwMENBMTQwMDM2Cis6MTAwMjMwMDAwMEQ0MDA2NDAwODAwMDhEMDAwMDAwMDAwMEM0MTQzMjZGCis6MTAwMjQwMDAwMEM2MTg0MzAwQzQwODJGMDA5NTQwMDUwMEM0MEMzMEI4Cis6MTAwMjUwMDAwMEQ0NDAxRTAwODAwMDAwMDBFRTAwMUUwMDk1ODNGNUQzCis6MTAwMjYwMDAwMEM0MTAzMTAwRDQ0MDMzMDBENTIwNjUwMEQ0QTAxQzU4Cis6MTAwMjcwMDAwMEQ0RTAxQzAwRDUyMDFDMDBFNDAxNUUwMEQ0MDAxRTY4Cis6MTAwMjgwMDAwMDgwMDAwMDAwMDYyMDAxMDBDQTE4MDAwMDBBMjAwMUJBCis6MTAwMjkwMDAwMEQ2MDA3NjAwQzQwODM2MDA5ODgwMDcwMEM2MTA0NUQ2Cis6MTAwMkEwMDAwMDk1MDExMDAwRDQwMDFGMDBENDYwNjIwMDgwMDAwMDlGCis6MTAwMkIwMDAwMEQ0MjA2MjAwQ0MzODM1MDBDQzE0MzMwMDg0MDFCQjVDCis6MTAwMkMwMDAwMEQ0MDA3MjAwRDU0MDFFMDA4MDAwMDAwMEVFMDAxRTI5Cis6MTAwMkQwMDAwMEUyMDAxQTAwODQwMUJCMDBFMjAwMUEwMENDMTA0QkJGCis6MTAwMkUwMDAwMENDMDQ0NzAwMkM5NDAxMDA3RDA5OEIwMDk4NDAwNTQ4Cis6MTAwMkYwMDAwMDdEMTVDQjAwRDQwMDFBMDA4MDAxQjgwMEQ0MDA2RDM5Cis6MTAwMzAwMDAwMDM0NDQwMTAwQ0MwQzQ4MDA5ODQwM0EwMENDMkM0QTAwCis6MTAwMzEwMDAwMDk1ODAwNDAwQ0MwNDQ5MDA4MDAxQjgwMEQ0MDAxQTg0Cis6MTAwMzIwMDAwMEQ0QzAxQTAwMjgyODAxMDA4NDAwRjAwMENDMTAwMzdCCis6MTAwMzMwMDAwMDk4ODAxQjAwMDQzODBDMDA4NDAwRjAwMENDMTAwM0VGCis6MTAwMzQwMDAwMDk4ODAxNzAwMDQzODA4MDA4NDAwRjAwMENDMTAwM0U3Cis6MTAwMzUwMDAwMDk4ODAxMzAwMDQzODA0MDA4NDAwRjAwMENDMTAwM0RGCis6MTAwMzYwMDAwMDk4ODAxNDAwQ0MxMDRDMDA5QTgwMDkwMENDMTQ0REU5Cis6MTAwMzcwMDAwMDk4NDBEQzAwRDQwMDZEMDBDQzE4NDgwMEQ1MDAxQTZECis6MTAwMzgwMDAwMEQ1NDAxQTAwODAwMEM5MDBENTgwMUEwMDk2QzBENTVCCis6MTAwMzkwMDAwMEQ0MDA2RDAwODAwMUI4MDBENDAwNkUwMDlBQzAwMzQ0Cis6MTAwM0EwMDAwMEQ0MDA2RDAwRDQwMDZFMDA4MDAwMDAwMEVDMDA3RkRGCis6MTAwM0IwMDAwMDlBQzBDQzAwRDQwMDZEMDA4MDAxQjgwMEQ0MDA2RTVCCis6MTAwM0MwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMDdEOTEwMzY3Cis6MTAwM0QwMDAwMDdERDU4MzAwN0QxOTBDMDAzNUNDMUYwMDM1NzAxRkMyCis6MTAwM0UwMDAwMDdDRjBDQjAwN0NEMDhCMDA4ODAwMDAwMDdFOEU4QkUwCis6MTAwM0YwMDAwMDk1QzAwNDAwRDQwMDZFMDA4MDAxQjgwMEQ0MDAxQTNCCis6MTAwNDAwMDAwMEQ0QzAxQTAwQ0MwODAzMDBDQzBDMDMwMENDMTAwM0FECis6MTAwNDEwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMENDMjQwMzM0Cis6MTAwNDIwMDAwMENDMjgwMzAwMzVDNDFGMDAzNkIwMUYwMDdDNzA0QjgxCis6MTAwNDMwMDAwMDM0RjAxRjAwN0M3MDRCMDAzNTcwMUYwMDdDNzA0QjQ3Cis6MTAwNDQwMDAwMDdEODg4MTAwN0RDQ0MxMDA3RTUxMDEwMDdFOTU0MUY4Cis6MTAwNDUwMDAwMDdDOTA4MjAwN0NENEMyMDA3Qzg0OEIwMDlBQzAwMzE0Cis6MTAwNDYwMDAwMDdDOEM4QjAwMkM4ODAxMDA5ODgwOUUwMEQ0MDA2RDRECis6MTAwNDcwMDAwMDk4NDA5QzAwRDQwMDZFMDBDQzA4NEMwMENDMEM0RDgxCis6MTAwNDgwMDAwMENDMTA0ODAwRDQ4MDFBMDBENEMwMUEwMDgwMDEwMUFBCis6MTAwNDkwMDAwMEQ1MDAxQTAwQ0MwODMyMDBENDAwMzIwMDk0ODJEOTcyCis6MTAwNEEwMDAwMENBMEMwMDAwRDQ0MDFFMDA4MDAwMDAwMEQ0MDAxRUQyCis6MTAwNEIwMDAwMEU0MDExRTAwRDQwMDFFMDBDQTA4MDAwMENBMEMwMDlGCis6MTAwNEMwMDAwMENBMTAwMDAwRDQ0MDFFMDBDQTE0MDAwMEQ0ODAxRUQwCis6MTAwNEQwMDAwMEQ0QzAxRTAwRDUwMDFFMDBENTQwMUUwMEQ1NDAzNEZCCis6MTAwNEUwMDAwMDgwMDAwMDAwRUUwMDFFMDAyODA0MDQwMEUyMDAxQTU0Cis6MTAwNEYwMDAwMEUyMDAxQTAwRDQ0MDFBMDBDQTM4MDAwMENDMDgwM0Y5Cis6MTAwNTAwMDAwMENDMEMwMzAwQ0MwQzAzMDBDQzBDMDMwMDk4ODJCRDgzCis6MTAwNTEwMDAwMDAwMDAwMDAwODQwMUJCMDBEN0EwNkYwMDgwMDAwMDM1Cis6MTAwNTIwMDAwMEVFMDAxRjAwQ0EwNDAwMDBDMkZGMDAwMENDMDgzNDI3Cis6MTAwNTMwMDAwMEMxM0ZGRjAwN0M3NENCMDA3Q0M5MEIwMDdEMDEwRjI0Cis6MTAwNTQwMDAwMDk5MDJCMDAwN0M3MzhCMDA4NDAxQkIwMEQ3QTA2RkMwCis6MTAwNTUwMDAwMDgwMDAwMDAwRUUwMDFGMDBDQTA4MDAwMDI4MTkwMEZCCis6MTAwNTYwMDAwMDdEODk4QjAwOTU4MDE0MDAyODE0MDQwMENBMEMwMEJCCis6MTAwNTcwMDAwMENBMTAwMDAwQ0ExQzAwMDBDQTI0MDAwMEUyMDAxRkNDCis6MTAwNTgwMDAwMEQ0QzAxQTAwRDUwMDFBMDBENTQwMUEwMENDMTgwM0I4Cis6MTAwNTkwMDAwMENDMkMwMzAwQ0MyQzAzMDBDQzJDMDMwMDdEQTU4QkJECis6MTAwNUEwMDAwMDdEOUM0NzAwOTg0Mjk3MDAwMDAwMDAwMDgwMDE2MTk4Cis6MTAwNUIwMDAwMEQ0QzAxQTAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDY5Cis6MTAwNUMwMDAwMEVFMDAxRTAwRTQwMTFFMDBENDAwMUUwMEQ0NDAxRUY4Cis6MTAwNUQwMDAwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjE2Cis6MTAwNUUwMDAwMEU0MDEzRTAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRUI4Cis6MTAwNUYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMENBMDgwMDMwCis6MTAwNjAwMDAwMDI0OEMwNjAwMENDQzA2MDA5OEMwMDYwMENDMTA0RUNFCis6MTAwNjEwMDAwMDk5MDAwNDAwRDQwMDczMDBFNDAxMUUwMEQ0MDAxRTAxCis6MTAwNjIwMDAwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDAwMEVFMDAxRTlBCis6MTAwNjMwMDAwMENBMDgwMDAwQ0EwQzAwMDAzNEQwMTgwMDI1MTAwMUMwCis6MTAwNjQwMDAwMDk1MDAyMTAwQzE3RkZGMDBDQTEwMDAwMENBMTQwMEZECis6MTAwNjUwMDAwMENBMTgwMDAwRDQ4MDFEMDBENEMwMUQwMDdEQjE4QkRECis6MTAwNjYwMDAwMEMxNDIwMjAwQzJDMDAxMDBENTgwMUQwMDM0REMwRTcyCis6MTAwNjcwMDAwMDdENUQ0QzAwN0Y3MzRDMDBENzQwMUUwMEQ1MDAxRUVFCis6MTAwNjgwMDAwMEQ1NDAxRTAwQzE0MjAwMDBDMkMwMDAwMDA5OUMwMTBDCis6MTAwNjkwMDAwMDMxREMxMDAwN0Y1RjRDMDA3RjczNEMwMDA0MjgwMkE3Cis6MTAwNkEwMDAwMDdEODM4MDAwRDVBODZGMDBENTgwNjYwMEQ3NDAxRUVFCis6MTAwNkIwMDAwMEVDMDA1RTAwQzgyNDAyMDBDODI0MDIwMDgwMDFCOERCCis6MTAwNkMwMDAwMEQ2MDA3NjAwRDQ0MDFFMDBENDgwMUUwMEQ0QzAxRTg4Cis6MTAwNkQwMDAwMDgwMDAwMDAwRUUwMDFFMDA4MDAwMDAwMEVFMDAxRjAxCis6MTAwNkUwMDAwMEQ0MDAxRjAwODAwMDAwMDBENDAwMUYwMEQ0MDAxRkIxCis6MTAwNkYwMDAwMDg4MDAwMDAwRDQwMDFGMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTAwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTAwNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAwN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAwODAwMDAwMDAxMDE3MTAwMDIwMTc4MDAwMzAwOEYwMDA0MDA3RkU1Cis6MTAwODEwMDAwMDA1MDAwMzAwMDYwMDNGMDAwNzAwMzIwMDA4MDEyQzFECis6MTAwODIwMDAwMDA5MDA0NjAwMEEwMDM2MDAxMDAxQjYwMDE3MDBBMkI5Cis6MTAwODMwMDAwMDIyMDEzQTAwMjMwMTQ5MDAyMDAwQjQwMDI0MDEyNUQwCis6MTAwODQwMDAwMDI3MDA0RDAwMjgwMDZBMDAyQTAwNjAwMDJCMDA1MjlCCis6MTAwODUwMDAwMDJGMDA2NTAwMzIwMDg3MDAzNDAxN0YwMDNDMDE1NjA0Cis6MTAwODYwMDAwMDNGMDA3MjAwNDEwMThDMDA0NDAxMkUwMDU1MDE3M0NECis6MTAwODcwMDAwMDU2MDE3QTAwNjAwMDBCMDA2MTAwMzQwMDYyMDAzODBECis6MTAwODgwMDAwMDYzMDAzODAwNjQwMDM4MDA2NTAwMzgwMDY2MDAzOEY2Cis6MTAwODkwMDAwMDY3MDAzODAwNjgwMDNBMDA2OTAwNDEwMDZBMDA0OEJCCis6MTAwOEEwMDAwMDZCMDA0ODAwNkMwMDQ4MDA2RDAwNDgwMDZFMDA0ODc2Cis6MTAwOEIwMDAwMDZGMDA0ODAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjZGCis6MTAwOEMwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjEwCis6MTAwOEQwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwCis6MTAwOEUwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkYwCis6MTAwOEYwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkUwCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNzEwX21lLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNzEwX21lLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZGZlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY3MTBfbWUuYmluLmloZXgKQEAgLTAsMCArMSwzNDEgQEAKKzoxMDAwMDAwMENDMDAwM0VBMDQwODAwMDNDQzgwMDA0MzdDNDA4MDAwNUQKKzoxMDAwMTAwMEEwMDAwMDAwQ0M4MDAwNjI4MDAwMDAwM0QwNDAwMDdGODAKKzoxMDAwMjAwMDgwMDAwMDAzQ0M0MDAwNDE3QzQwQzAwMEMwMTYwMDA0QUEKKzoxMDAwMzAwMDMwRDAzRkZGN0QxNTAwMENDQzExMDAwMDI4RDgwMDFFRTkKKzoxMDAwNDAwMDMxOTgwMDAxMjhEQzAwMUZDODIwMDAwNDk1QzAwMDA2N0MKKzoxMDAwNTAwMDdDNDI0MDAwQ0MwMDAwNjI3RTU2ODAwQ0NDMjkwMDAwMUYKKzoxMDAwNjAwMEM4MjQwMDA0N0UyNjAwMEI5NTgwMDAwNjdDNDJDMDAwNTgKKzoxMDAwNzAwMENDMDAwMDYyN0VENzAwMENDQzMxMDAwMEM4MkMwMDA0RkMKKzoxMDAwODAwMDdFMkUwMDBDQ0MwMDAwNjIzMTEwM0ZGRjgwMDAwMDAzODgKKzoxMDAwOTAwMENFMTEwMDAwN0M0MEMwMDA4MDAwMDAwM0NDNDAwMDQwMzYKKzoxMDAwQTAwMDgwMDAwMDAzQ0M0MTIyNTc3QzQxODAwMENDNDAwMDQ1QjkKKzoxMDAwQjAwMENDNDAwMDQ4Q0M0MTIyNUNDQzQxQTFGQzdDNDA4MDAwN0IKKzoxMDAwQzAwMEEwMDAwMDAwQ0M4MDAwNjJDQzQwMDA0NUNDNDAwMDQ4M0QKKzoxMDAwRDAwMDdDNDBDMDAwQ0M0MTIyNUNDQzQxQTFGQzdDNDA4MDAwMzMKKzoxMDAwRTAwMEEwMDAwMDAwQ0M4MDAwNjJDQzAwMDA0NUNDMDAwMDQ4OUQKKzoxMDAwRjAwMENDNDEyMjVDQ0M0MUExRkM3QzQwODAwMEEwMDAwMDAwRUYKKzoxMDAxMDAwMENDODAwMDYyMDQwQ0ExRkRDMDEyMDAwMUNDMDAwMDQ1QUYKKzoxMDAxMTAwMENDMDAwMDQ4N0NEMEMwMENDQzQxMjI1Q0NDNDFBMUZDN0UKKzoxMDAxMjAwMEQwNEQwMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyMjgKKzoxMDAxMzAwMDgwMDAwMDAzQ0M0MTIyNUQ3QzQwODAwMDdDNDBDMDAwRjgKKzoxMDAxNDAwMEMwMkEwMDAyN0M0MTAwMDA3RDI5MDAwQzMwOTQwMDAxOEYKKzoxMDAxNTAwMDMwOTgwMDA2MzA5QzAzMDAyOURDMDAwODdDNDIwMDAwMzcKKzoxMDAxNjAwMDdDNDI0MDAwOTU0MDAwMEZDMDJFMDAwNDA1RjAyMjU4NEMKKzoxMDAxNzAwMDdGMkYwMDBDQ0MzMTAwMDBDODI4MDAwNENDQzEyMTY5QkQKKzoxMDAxODAwMENEMDEyMTZBQ0U4MTIxNkIwREI0MDAwMkNDMDEyMTZDMUUKKzoxMDAxOTAwMDk3NDAwMDBFMERCNDAwMDA4MDAwMDA3REM4MzQwMDBBQjYKKzoxMDAxQTAwMDBEQjQwMDAyOTc0MDAwMDkwREI0MDAwMEMwMkUwMDA0RjkKKzoxMDAxQjAwMDA1RjAyMjU4N0YyRjAwMENDQzMxMDAwMEM4MjgwMDA0MjUKKzoxMDAxQzAwMDgwMDAwMDdEQzgzNDAwMEE5NzQwMDAwNDdFMDI4MDAwNTEKKzoxMDAxRDAwMDgwMDAwMDdEQzgzNDAwMEEwREI0MDAwNDk3NDBGRjhDRjUKKzoxMDAxRTAwMDAwMDAwMDAwQ0UwMTIxNkRDRTQxMjE2RUM4MjgwMDAzMjEKKzoxMDAxRjAwMEM4MzQwMDBBOUI0MDAwMDQwNDNDMDAwNTg0MDAwMjZERTIKKzoxMDAyMDAwMENDMDAwMDYyMERGNDAwMDA5NzQwMDAwQkM4MkMwM0U2MDAKKzoxMDAyMTAwMENFODFBMkI3QzAzMDAwMDY3RUYzNDAyOEMwMzAwMDIwNTcKKzoxMDAyMjAwMDdGNkI4MDIwN0ZCM0MwMjlDRjgxQTJDNDgwMDAwMDAzRjAKKzoxMDAyMzAwMENGQzFBMkQxMERGNDAwMDE5NzQwMDAwQkM4MkMwM0U3RjkKKzoxMDAyNDAwMENFODFBMkJCQzAzMDAwMDY3RUYzNDAyOEMwMzAwMDIwMjMKKzoxMDAyNTAwMDdGNkI4MDIwN0ZCM0MwMjlDRjgxQTJDNTgwMDAwMDAzQkYKKzoxMDAyNjAwMENGQzFBMkQyMERGNDAwMDI5NzQwMDAwQkM4MkMwM0U4QzYKKzoxMDAyNzAwMENFODFBMkJGQzAzMDAwMDY3RUYzNDAyOEMwMzAwMDIwRUYKKzoxMDAyODAwMDdGNkI4MDIwN0ZCM0MwMjlDRjgxQTJDNjgwMDAwMDAzOEUKKzoxMDAyOTAwMENGQzFBMkQzQzgyQzAzRTlDRTgxQTJDM0MwMzAwMDA2Q0YKKzoxMDAyQTAwMDdFRjM0MDI4QzAzMDAwMjA3RjZCODAyMDdGQjNDMDI5QzAKKzoxMDAyQjAwMENGODFBMkM3ODAwMDAwMDNDRkMxQTJENDgwMDAwMDAzNzkKKzoxMDAyQzAwMENDNDAwMDQyN0M0MEMwMDA3QzQxMDAwMDI5MTQwMDFENEQKKzoxMDAyRDAwMDMxNTQwMDAxOTk0MDAwMEMzMTE4MTAwMEM4MUMwMDExNjUKKzoxMDAyRTAwMDk1QzAwMDAwQzgxQzAwMTFDQ0MxMjEwMENEMDEyMTAxMjYKKzoxMDAyRjAwMENDQzEyMTAyQ0QwMTIxMDMwNDE4MDAwNDgwMDAwMzdFM0IKKzoxMDAzMDAwMENEODFBMkE0QzAyQTAwMDQ5NTgwMDAwODM2QTgyMUEzQUMKKzoxMDAzMTAwMENDMjkwMDAwQzgyODAwMDRDODFDMDAxMTBERTQwMDQwQ0UKKzoxMDAzMjAwMDk2NDBGRkZGQzgxQzAwMTFDQ0MxMjE3MENEMDEyMTcxODYKKzoxMDAzMzAwMEM4MjAwMDEyOTYwMDAwMDBDODIwMDAxMjgwMDAwMzdFMzIKKzoxMDAzNDAwMENDMDAwMDY0N0M0MEMwMDA3QzQxMDAwMENDMDAwMDQ1MzMKKzoxMDAzNTAwMENDMDAwMDQ4NDBENDAwMDNDRDQxMjI1Q0NEMDFBMUZDN0IKKzoxMDAzNjAwMEMwMUEwMDAxMDQxQ0ExRkQ3REQ5QzAwQzdDNDIwMDAwMTQKKzoxMDAzNzAwMDA4Q0MwMDAxMDYyNDAwMDEwNjI4MDAwMkNFMUQwMDAwNjIKKzoxMDAzODAwMENFNUQwMDAwOThDMEZGRkFDRTlEMDAwMDdDNDA4MDAwNEEKKzoxMDAzOTAwMEEwMDAwMDAwQ0M4MDAwNjI3QzQwQzAwMDMwRDAwMDAxOTIKKzoxMDAzQTAwMDI4Q0MwMDAxN0M0MTQwMDA5NTAwMDAwNjdDNDE4MDAwODMKKzoxMDAzQjAwMENENDEyMTZEQ0Q4MTIxNkU4MDAwMDBGNEM4MUMwMDAzNjkKKzoxMDAzQzAwMEMwMjIwMDA0N0UxNjAwMENDQzIxMDAwMEM4MUMwMDA0RDIKKzoxMDAzRDAwMDdDNDI0MDAwOThDMDAwMDQ3QzQyODAwMDgwMDAwMDAzMDIKKzoxMDAzRTAwMENERTUwMDAwQ0U0MTIxNjlDRTgxMjE2QUNEQzEyMTZCQ0UKKzoxMDAzRjAwMDgwMDAwMDAzQ0MwMTIxNkM3QzQwQzAwMDdDNDEwMDAwRTcKKzoxMDA0MDAwMDdDNDE0MDAwN0M0MTgwMDA3QzQxQzAwMDI4QTQwMDA4NjEKKzoxMDA0MTAwMDMyNjQwMEZGMEU2ODAwM0M5NjgwMDAwQTdDMDIwMDAwRjcKKzoxMDA0MjAwMDdDNDIwMDAwMUUzMDAwMDNDQzAwMDA2QTlCMDAwMDAzRTkKKzoxMDA0MzAwMDQyMjAwMDA1MDQyMDAwNDA4MDAwMDExMTdDMDI0MDAwQTEKKzoxMDA0NDAwMDdFMDI0MDAwOUE0MDAwMDAwQTY0MDAwMTMwRUMwMDEwNzcKKzoxMDA0NTAwMDlBQzAwMDBBQ0MwMDAwNjJDMDJBMDAwNEM4MkMwMDIxMDcKKzoxMDA0NjAwMDdFOTI4MDBDQ0MwMDAwNDFDQzI5MDAwMENFQzAwMDIxM0YKKzoxMDA0NzAwMDgwMDAwMTIxQzgzMDAwMDRDRDAxMjE2RENENDEyMTZFRTUKKzoxMDA0ODAwMEM4MzAwMDAzN0YxRjAwMEIzMEY0MDAwNzI3NzgwMDAxRkQKKzoxMDA0OTAwMDk3NDAwMDJBMDdCODAxMjY5RjgwMDAwMDAwMDAwMDAwNTYKKzoxMDA0QTAwMDgwMDAwMTM2N0YxQjgwMDQ4MDAwMDEzQTdGMUI4MDA1OUQKKzoxMDA0QjAwMDgwMDAwMTNFN0YxQjgwMDI4MDAwMDE0MjdGMUI4MDAzODEKKzoxMDA0QzAwMDgwMDAwMTQ2N0YxQjgwMDc4MDAwMDE0QTdGMUI4MDA2NTkKKzoxMDA0RDAwMDgwMDAwMTRGMjhBNDAwMDg5QjgwMDAxOTI4QTQwMDA4NzAKKzoxMDA0RTAwMDgwMDAwMTVGMzI2NDAwRkY5QjgwMDAxNTI4QTQwMDA4OTMKKzoxMDA0RjAwMDgwMDAwMTVGMzI2NDAwRkY5QjgwMDAxMTI4QTQwMDA4ODcKKzoxMDA1MDAwMDgwMDAwMTVGMzI2NDAwRkY5QjgwMDAwRDI4QTQwMDA4N0EKKzoxMDA1MTAwMDgwMDAwMTVGMzI2NDAwRkY5QjgwMDAwOTI4QTQwMDA4NkUKKzoxMDA1MjAwMDgwMDAwMTVGMzI2NDAwRkY5QjgwMDAwNTI4QTQwMDA4NjIKKzoxMDA1MzAwMDgwMDAwMTVGMzI2NDAwRkYyOEE0MDAwODMyNjQwMEZGREQKKzoxMDA1NDAwMDBFNjgwMDNDOUE4MEZFQjIyOEVDMDAwODdDNDM0MDAwMTQKKzoxMDA1NTAwMDdDNDM4MDAwN0M0M0MwMDA5NkMwMDAwN0NDMDAwMDYyNTIKKzoxMDA1NjAwMENGNDEyMTY5Q0Y4MTIxNkFDRkMxMjE2QjgwMDAwMDAzNzcKKzoxMDA1NzAwMENDMDEyMTZDODAwMDAwMDNDRkY1MDAwMENDMDAwMDZCQTMKKzoxMDA1ODAwMDg0MDAwMzgxMEU2ODAwM0M5QTgwMDAwNEM4MjgwMDE1OEUKKzoxMDA1OTAwMDgwMDAwMDAzRDA0MDAwN0Y5NjgwRkZBQjdFMDI0MDAwQzkKKzoxMDA1QTAwMDg0MDAwMjNCQzAwRTAwMDJDQzAwMDA0MTgwMDAwMjM5RjIKKzoxMDA1QjAwMENDQzEzMDRBN0M0MEMwMDA3QzQxMDAwMEMwMUUwMDAxMUMKKzoxMDA1QzAwMDI5MjQwMDEyQzAyMjAwMDI5NjQwMDAwNUMwMjYwMDA0MjMKKzoxMDA1RDAwMEMwMjdGRkZCN0QyNTAwMEJDMDI2MDAwMDdERDI4MDBCQ0QKKzoxMDA1RTAwMDdFMTJDMDBCN0QyNTAwMEM3QzQxNDAwMDdDNDE4MDAwQzgKKzoxMDA1RjAwMENDQzEyMTY5OUE4MDAwMEFDRDAxMjE2QUNENDEyMTZCQ0QKKzoxMDA2MDAwMDk2QzBGRTgzQ0Q4MTIxNkNDODMwMDAxODk3MDAwMDAwOTEKKzoxMDA2MTAwMEM4MzAwMDE4ODAwMDAwMDNDQzAwMDAxODg0MDAwMzgxNUIKKzoxMDA2MjAwMENDMDAwMDdGQzgxNDAwMTNDODE4MDAxNENENDEyMTZCMDIKKzoxMDA2MzAwMDk2QzBGRTc3Q0Q4MTIxNkM4MDAwMDE4M0M4MzAwMDE4MDAKKzoxMDA2NDAwMEM4MEMwMDA4OThDMDAwMDBDODBDMDAwODdDNDEwMDAwREQKKzoxMDA2NTAwMDk1MDAwMDAyMDAwMDAwMDA3QzQxNDAwMEM4MjAwMDA5MTUKKzoxMDA2NjAwMENDNDAwMDQzQ0UwMUExRjRDQzQwMDA0NEMwMEU4MDAwMzkKKzoxMDA2NzAwMDdDNDI0MDAwN0M0MjgwMDAyQUFDMDAxRjk2QzBGRTY0OTEKKzoxMDA2ODAwMEMwMzVGMDAwQ0U0MDAzRTIzMjc4MDAwMzI2N0MwMDA4M0IKKzoxMDA2OTAwMDdGRjdDMDBCN0ZGQkMwMEMyQTc4MDAxOENGQzAwM0UzQTQKKzoxMDA2QTAwMENGODAwM0U0MjZCMDAwMDI3RjNGMDAwMENGMDAwM0U1QzcKKzoxMDA2QjAwMDgwMDAwMzFGN0M4MEMwMDA3QzQwQzAwMDI4RDAwMDA4NjAKKzoxMDA2QzAwMDMxMTAwMDBGOTUwMDAwMEYyNTI4MDAwMTA2QTgwMUI0ODUKKzoxMDA2RDAwMDlFODAwMDAwMDAwMDAwMDA4MDAwMDFENUMwMTIwODAwQ0MKKzoxMDA2RTAwMDgwMDAwMUUzQzgxNDAwMEY4MDAwMDFFQUM4MTQwMDEwNjQKKzoxMDA2RjAwMDgwMDAwMUYxQ0NDMUEyQTQ4MDAwMDFGQUM4MTQwMDExNEQKKzoxMDA3MDAwMDMwRDAwMDNGMEQyODAwMTU5QTgwMDAxMjBEMjgwMDFFRTEKKzoxMDA3MTAwMDlBODAwMDFFMEQyODAwMjA5QTgwMDAyMzBEMjQwMDBGQ0YKKzoxMDA3MjAwMDBEMjgwMDEwN0U2QTgwMEM5QTgwMDAyNjBEMjAwMDA0OUYKKzoxMDA3MzAwMDBEMjQwMDE0MEQyODAwMjg3RTYyNDAwQzdFQTY4MDBDM0IKKzoxMDA3NDAwMDlBODAwMDJBQzgxNDAwMTE4MDAwMDAwM0NDQzFBMkE0MjIKKzoxMDA3NTAwMEMwMTIwODAwN0M0MTQwMDA3RDBDQzAwQ0MwMTIwMDA4OTMKKzoxMDA3NjAwMDI5NTgwMDAzMjk1QzAwMEM3QzQyMDAwMDdERDFDMDBCOUQKKzoxMDA3NzAwMDI2MjAwMDE0N0UxRTQwMEM3RTRFODAwQ0NFODFBMkE0NEEKKzoxMDA3ODAwMDgwMDAwMDAzQ0Q4MUExRkVDODE0MDAwRjA0MTAyMTBFQ0IKKzoxMDA3OTAwMDk1NDAwMDAwQzgxNDAwMEZEMDUxMDAwMDgwMDAwMDAzRjUKKzoxMDA3QTAwMENDQzFBMkE0QzgxNDAwMTAwNDEwMjEwODk1NDAwMDAwNzgKKzoxMDA3QjAwMEM4MTQwMDEwRDA1MTAwMDA4MDAwMDAwM0NDQzFBMkE0RDYKKzoxMDA3QzAwMENDQzFBMkE0MDQxMDAwMDFDRDAwMDAxOTg0MDAwMzgxNTMKKzoxMDA3RDAwMENDMDAwMDdGQzgxMDAwMTk5OTAwMDAwMEM4MTAwMDE5NTMKKzoxMDA3RTAwMDgwMDAwMDA0N0M0MDgwMDAwNDEwMjEwMDk1NDAwMDAwM0YKKzoxMDA3RjAwMEM4MTQwMDExRDA1MTAwMDA4MDAwMDM3RUNDQzFBMkE0MTcKKzoxMDA4MDAwMDdDNDBDMDAwQ0M0MDAwMEQ5NEMwRkUwMUNDNDAwMDBFRTYKKzoxMDA4MTAwMDdDNDEwMDAwOTUwMDAwMDUwOENDMDAwMUM4MTQwMDA1Q0IKKzoxMDA4MjAwMDk5NDAwMDE0MDAwMDAwMDA5OEMwRkZGQjdDNDEwMDAwQ0MKKzoxMDA4MzAwMDgwMDAwMDA0N0QwMDgwMDBDODE0MDAwNTdDNDBDMDAwREEKKzoxMDA4NDAwMDk5NDAwMDBDQzgxODAwMEM3QzQxMDAwMDk1ODBGREYwMTgKKzoxMDA4NTAwMEM4MjAwMDBFQzgxQzAwMEQ2NjIwMDAyMDdFMUUwMDJDNDMKKzoxMDA4NjAwMDI1MjQwMDAyN0U2MjQwMjA4MDAwMDAwM0NDRTYwMDAwQzgKKzoxMDA4NzAwMDdDNDEwMDAwQ0MwMDAwNkNDQzAwMDA2REM4MTgwMDFGNEIKKzoxMDA4ODAwMEM4MUMwMDFFNjU5ODAwMjA3REQ5QzAyQzdDRDRDMDBDRUIKKzoxMDA4OTAwMENDREUwMDAwNDVEQzAwMDRDODI4MDAxNzk2ODAwMDBGNUQKKzoxMDA4QTAwMEMwMEUwMDAxMjg2ODAwMDgyQUFDMDAxNjMyQTgwMEZGMUMKKzoxMDA4QjAwMDBFQjAwMDQ5N0YyRjAwMEI5NzAwMDAwNjAwMDAwMDAwREIKKzoxMDA4QzAwMEM4MTQwMDA1N0M0MEMwMDA4MDAwMDIyMzdDNDEwMDAwNjkKKzoxMDA4RDAwMDgwMDAwMjI2RDA0MDAwN0Y4NDAwMDIzQkNDMDAwMDQxMTMKKzoxMDA4RTAwMENDQzEzMDRBOTQwMDAwMDBDODNDMDAxQTA0M0MwMDA1MEEKKzoxMDA4RjAwMENGQzFBMkE0QzAzNjFGOTBDMDM4N0ZGRjdDMDNDMDEwQjgKKzoxMDA5MDAwMDdGN0I0MDBDQ0Y0MTIxN0NDRkMxMjE3RENDMDEyMTdFNUEKKzoxMDA5MTAwMEMwM0EwMDA0MDQzNDIxN0Y3RjdCNDAwQ0NDMzUwMDAwQkEKKzoxMDA5MjAwMEM4M0MwMDA0MkJGQzAwMUYwNDM4MDAyMDk3QzAwMDA1QzEKKzoxMDA5MzAwMENDMDAwMDYyOUI4MDAwMDAwQkI4MDAwMTgwMDAwMjQ3RTEKKzoxMDA5NDAwMENDMDAwMDcxQ0MwMUExRjQwNDM4MDAxNkMwMzYwMDAyQkUKKzoxMDA5NTAwMENGODFBMkE0ODgwMDAwMDBDRjQxMjAxMDdDNDBDMDAwQkQKKzoxMDA5NjAwMDI4RDAwMDFDOTUwMDAwMDUwNEQ0MDAwMUNENDAwMDY1OEUKKzoxMDA5NzAwMDgwMDAwMDAzQ0Q0MDAwNjgwOTU0MDAwMjgwMDAwMDAzOUQKKzoxMDA5ODAwMENENDAwMDY2ODQwMDAyNkNDODE4MDNFQTdDNDBDMDAwQjkKKzoxMDA5OTAwMDk5ODBGRDlGQzgxNDAwMTYwOEQwMDAwMTk5NDAwMDJCRDMKKzoxMDA5QTAwMENEMDAwMDY4N0M0MDgwMDBBMDAwMDAwMENDODAwMDYyODgKKzoxMDA5QjAwMDA0M0MwMDA1Q0ZDMUEyQTRDQzAxQTFGNDg0MDAwMzgxQjIKKzoxMDA5QzAwMENDMDAwMDQ2ODgwMDAwMDBDQzAwMDA3Rjg0MDAwMjdFM0UKKzoxMDA5RDAwMEM4MTgwM0VBN0M0MEMwMDA5OTgwRkQ4REM4MTQwMDE2MzkKKzoxMDA5RTAwMDA4RDAwMDAxOTk0MDAwMTlDRDAwMDA2ODdDNDA4MDAwQ0IKKzoxMDA5RjAwMEEwMDAwMDAwQ0M4MDAwNjIwNDNDMDAyMkNGQzFBMkE0NzEKKzoxMDBBMDAwMDg0MDAwMzgxQ0MwMDAwNDc4ODAwMDAwMENDMDAwMDdGRjgKKzoxMDBBMTAwMEM4MTAwMDE2OTkwMDAwMERDQzQwMDA2NzgwMDAwMDA0NEIKKzoxMDBBMjAwMDdDNDA4MDAwQzgxODAzRUE5OTgwRkQ3OTdDNDBDMDAwQjIKKzoxMDBBMzAwMDk0QzAwMDAzQzgxMDAwMTY5OTAwMDAwNENDQzAwMDY4RTAKKzoxMDBBNDAwMDgwMDAwMDA0N0M0MDgwMDA4NDAwMDIzQkMwMTQ4MDAwRDEKKzoxMDBBNTAwMENDMDAwMDQxQ0Q0MTMwNEFDMDE0ODAwMDk5MDAwMDAwMTQKKzoxMDBBNjAwMEM4MTAwMDE2ODAwMDAwMDQ3QzQwODAwMEMwMTIwMDAxMDUKKzoxMDBBNzAwMDdDNTE0MDBDODAwMDAwMDNEMDU1MDAwMDdDNDBDMDAwMzkKKzoxMDBBODAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMDI5MUMwMDFGMEIKKzoxMDBBOTAwMENDQzAwMDRBQ0QwMDAwNEI5NUMwMDAwM0MwMUM4MDAwQjQKKzoxMDBBQTAwMENEQzEyMDEwREQ4MzAwMDAwNTVDMjAwMENDMDAwMDYyNzkKKzoxMDBBQjAwMDgwMDAwMDAzRDgxRjQxMDA3QzQwQzAwMDdDNDEwMDAwNDIKKzoxMDBBQzAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MwMDA0Q0NEMDAwMDRERkEKKzoxMDBBRDAwMEREODMwMDAwMDU1Q0EwMDA4MDAwMDAwM0Q4MUY0MTAwRkEKKzoxMDBBRTAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwOTMKKzoxMDBBRjAwMENDQzAwMDRFQ0QwMDAwNEZERDgzMDAwMDA1NUNDMDAwN0YKKzoxMDBCMDAwMDgwMDAwMDAzRDgxRjQxMDA3QzQwQzAwMDdDNDEwMDAwRjEKKzoxMDBCMTAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MwMDA1MENEMDAwMDUxQTEKKzoxMDBCMjAwMEREODMwMDAwMDU1Q0Y4RTA4MDAwMDAwM0Q4MUY0MTAwNzEKKzoxMDBCMzAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwNDIKKzoxMDBCNDAwMENDQzAwMDUyQ0QwMDAwNTNERDgzMDAwMDA1NUNGODgwNkUKKzoxMDBCNTAwMDgwMDAwMDAzRDgxRjQxMDA3QzQwQzAwMDdDNDEwMDAwQTEKKzoxMDBCNjAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MwMDA1NENEMDAwMDU1NDkKKzoxMDBCNzAwMEREODMwMDAwMDU1Q0UwMDA4MDAwMDAwM0Q4MUY0MTAwMTkKKzoxMDBCODAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwRjIKKzoxMDBCOTAwMENDQzAwMDU2Q0QwMDAwNTdERDgzMDAwMDA1NUNGMDAwOUUKKzoxMDBCQTAwMDgwMDAwMDAzRDgxRjQxMDA3QzQwQzAwMDdDNDEwMDAwNTEKKzoxMDBCQjAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MwMDA1OENEMDAwMDU5RjEKKzoxMDBCQzAwMEREODMwMDAwMDU1Q0YzRkM4MDAwMDAwM0Q4MUY0MTAwQkEKKzoxMDBCRDAwMEQwNDMyMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyNTgKKzoxMDBCRTAwMEQwNDNBMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyQzgKKzoxMDBCRjAwMEQwNDNDMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyOTgKKzoxMDBDMDAwMEQwNDNGOEUwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyNkYKKzoxMDBDMTAwMEQwNDNGODgwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyQkYKKzoxMDBDMjAwMEQwNDNFMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyNDcKKzoxMDBDMzAwMEQwNDNGMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyMjcKKzoxMDBDNDAwMEQwNDNGM0ZDN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyMTgKKzoxMDBDNTAwMEM4MTQwM0UwQ0M0MzAwMDBDQzQzMDAwMENDNDMwMDAwQTgKKzoxMDBDNjAwMDdENDVDMDAwQ0RDMzAwMDBEMDQzMDAwMDdDNDA4MDAwMjMKKzoxMDBDNzAwMEEwMDAwMDAwQ0M4MDAwNjI3QzQwQzAwMEM4MTAwM0UyRUQKKzoxMDBDODAwMEM4MTQwM0U1QzgxODAzRTNDODFDMDNFNENEODEyMTY5MzcKKzoxMDBDOTAwMENEQzEyMTZBQ0NDMTIxNkJDQzAxMjE2QzA0MjAwMDA0QTAKKzoxMDBDQTAwMDdEQTE4MDAwN0Q5NjQwMDI5NjQwRkNEOUNEODAwM0UzNzMKKzoxMDBDQjAwMDMxMjgwMDAzQzAyREYwMDAyNTE4MDAwODdEQUQ4MDBCMDEKKzoxMDBDQzAwMDdEQTk4MDBDODAwMDAwMDNDRDgwMDNFMzMwOENGRkZGMDIKKzoxMDBDRDAwMEQwNEQwMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyNkQKKzoxMDBDRTAwMEM4MTQwMDIwMTU1ODAwMDI5NTgwRkZGRkM4MTQwMDIwOEEKKzoxMDBDRjAwMENDMDAwMDZFQ0M0MTIxODA3QzQwQzAwMENDQzEyMThENTUKKzoxMDBEMDAwMENDNDEyMTgxMjhEMDAwMUYzNDU4ODAwMENEODEyMThDMTYKKzoxMDBEMTAwMDk1MDBGQ0JGQ0M0MTIxODJDODE0MDAyMDk5NDBGRkZGMDAKKzoxMDBEMjAwMEM4MTQwMDIwODAwMDAwMDQ3QzQwODAwMDdDNDBDMDAwOEIKKzoxMDBEMzAwMDI4RDAwMDE4MzExMDAwMDFDMDE2MDA4MDk1MDAwMDAzNzMKKzoxMDBENDAwMEMwMkEwMDA0N0NENEMwMENDQ0MxMjE3Q0NDNDEyMTdEQzQKKzoxMDBENTAwMENDNDEyMTdFN0M0MTgwMDAxREIwMDAwMzM2QTAyMTdGNjQKKzoxMDBENjAwMDlCMDAwMDAzNDE5QzAwMDUwNDFDMDA0MDk5QzAwMDAwNEEKKzoxMDBENzAwMDA5REMwMDAxQ0MyMTAwMDBDODI0MDAwNDJBNkMwMDFGRkIKKzoxMDBEODAwMDQxOUMwMDA1OUFDMEZGRkFDQzgwMDA2MjgwMDAwMDA0RkMKKzoxMDBEOTAwMDdDNDA4MDAwN0M0MEMwMDAwNEQ0MDNFNjgwMDAwMDAzNTcKKzoxMDBEQTAwMENDNTQwMDAwODAwMDAzN0VDQzQwMDNFQUMwMUM4MDAwQ0QKKzoxMDBEQjAwMDA0NENBMDAwQ0RDMTIwMTA3QzQxMDAwMEM4MTQwMDA5RTMKKzoxMDBEQzAwMDA0MTgwMDAwMDQxQzAwMDhDRDgwMDA3MTA5REMwMDAxM0IKKzoxMDBERDAwMDA1OTgwMDAxQ0QwRDAwMDA5OUMwRkZGQ0NDODAwMDYyOTkKKzoxMDBERTAwMDgwMDAwMzdFQ0Q0MDAwNzFDMDBFMDEwMENDMDAwMDQxQTgKKzoxMDBERjAwMENDQzEzMDRBQzgzQzAwN0ZDQzAwMDA3RjgwMDAwMDAzOUIKKzoxMDBFMDAwMENDMDAwMDdGQ0MwMDAwN0Y4ODAwMDAwMENDMDAwMDdGNzkKKzoxMDBFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDBFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDBFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDBFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDBFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDBFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMDBFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDBFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDBFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDBFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDBFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDBFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDBFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDBFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDBFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDBGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDBGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDBGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDBGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDBGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDBGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDBGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDBGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDBGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDBGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDBGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDBGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDBGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDBGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDEwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDEwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDEwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDEwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDEwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDEwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDEwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDEwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDExMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDExMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDExNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDExNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDExNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDExNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDExODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDExOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDExQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDExQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDExQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDExRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDExRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDExRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDEyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDEyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDEyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDEyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDEyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDEyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDEyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDEyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDEyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDEyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDEyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDEyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDEyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDEzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDEzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDEzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDEzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDEzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDEzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDEzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDEzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDEzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDEzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDEzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDEzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDEzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDEzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDE0MDAwMDAwMDEwMzMzMDAxMDAwMDYwMDE3MDAwODAwMjEwMDBBNDUKKzoxMDE0MTAwMDAwMjcwMDJBMDAyODAwMjUwMDI5MDAyQjAwMkEwMDI4ODgKKzoxMDE0MjAwMDAwMkIwMDJCMDAyRDAwM0EwMDJFMDA0MTAwMkYwMDRDMTUKKzoxMDE0MzAwMDAwMzQwMDRFMDAzNjAwMzIwMDM5MDBCMTAwM0EwMEQxQ0QKKzoxMDE0NDAwMDAwM0IwMEU2MDAzQzAwRkUwMDNEMDE2RDAwM0YwMEFGQTgKKzoxMDE0NTAwMDAwNDEwMzM4MDA0MzAzNEIwMDQ0MDE5MDAwNDUwMEZFNjcKKzoxMDE0NjAwMDAwNDYwMUFFMDA0NzAxQUUwMDQ4MDIwMDAwNDkwMjBFRUUKKzoxMDE0NzAwMDAwNEEwMjU3MDA0QjAyODQwMDUyMDI2MTAwNTMwMjczN0IKKzoxMDE0ODAwMDAwNTQwMjg5MDA1NzAyOUIwMDYwMDI5RjAwNjEwMkFFNzcKKzoxMDE0OTAwMDAwNjIwMkI4MDA2MzAyQzIwMDY0MDJDQzAwNjUwMkQ2OUEKKzoxMDE0QTAwMDAwNjYwMkUwMDA2NzAyRUEwMDY4MDJGNDAwNjkwMkY4RTAKKzoxMDE0QjAwMDAwNkEwMkZDMDA2QjAzMDAwMDZDMDMwNDAwNkQwMzA4NkIKKzoxMDE0QzAwMDAwNkUwMzBDMDA2RjAzMTAwMDcwMDMxNDAwNzIwMzY1QkMKKzoxMDE0RDAwMDAwNzQwMzZCMDA3OTAzNjkwMDdDMDMxRTAwMEYwMzdBMUMKKzoxMDE0RTAwMDAwMEYwMzdBMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBQ0MKKzoxMDE0RjAwMDAwMEYwMzdBMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBQkMKKzoxMDE1MDAwMDAwMEYwMzdBMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBQUIKKzoxMDE1MTAwMDAwMEYwMzdBMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBOUIKKzoxMDE1MjAwMDAwMEYwMzdBMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBOEIKKzoxMDE1MzAwMDAwMEYwMzdBMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBN0IKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY3MTBfcGZwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNzEwX3BmcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDgxMWZmCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNzEwX3BmcC5iaW4uaWhleApAQCAtMCwwICsxLDIxMyBAQAorOjEwMDAwMDAwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCODAwMDAwMDAwOQorOjEwMDAxMDAwREMwMzAwMDBDQzgwMDA0MEQwNDAwMDQwN0M0MDgwMDBFOQorOjEwMDAyMDAwQTAwMDAwMDA3RTgyODAwQkM4MTgwMDBFMzE5ODAwMDFFRAorOjEwMDAzMDAwN0M0MjQwMDA5NTgwMDIzQTdDNDI4MDAwQzgxQzAwMUMzMworOjEwMDA0MDAwQzAzN0MwMDA3QzQwQzAwMDdDNDEwMDAwN0NCNDgwMEIwNQorOjEwMDA1MDAwQzAzNjAwMDM5OUMwMDAwMEM4MUMwMDFDN0NCNDgwMEM5MgorOjEwMDA2MDAwMjRENDAwMDI3RDY1NDAwMENENDAwMDQzQ0U4MDAwNDM5MworOjEwMDA3MDAwQ0QwMDAwNDNDQzgwMDA0MENFNDAwMDQwQ0U4MDAwNDAwOAorOjEwMDA4MDAwQ0NDMDAwNDBEQzNBMDAwMDk3ODBGRkRFQ0QwMDAwNDA4RAorOjEwMDA5MDAwN0M0MEMwMDA4MDAwMDAxODdDNDEwMDAwRDQwMDAzNDA3OAorOjEwMDBBMDAwRDQwMDBGQzBENDAwMEZBMkM4MTgwMDBFODAwMDAwMENBRQorOjEwMDBCMDAwMzE5ODAwMDJENDAwMDNDMEQ0MDAwRkMwRDQwMDBGQTJCNgorOjEwMDBDMDAwQzgxODAwMEUyODhDMDAwODMwQ0MwMDBGMzQxMDAwMDEzNgorOjEwMDBEMDAwN0QwRDAwMDg4MDAwMDAwQzdEOTE4MDBCQ0M4MDAwNDBERAorOjEwMDBFMDAwRDA0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI1OQorOjEwMDBGMDAwRDQwMDAzNDBENDAwMEZDMEQ0MDAwRkEyQ0M4MDAwNDAzNQorOjEwMDEwMDAwRDA0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEIzOAorOjEwMDExMDAwRDQwMDAzQzBENDAwMEZDMEQ0MDAwRkEyQ0M4MDAwNDA5NAorOjEwMDEyMDAwRDA0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEIxOAorOjEwMDEzMDAwQ0M0MDAzRjk4MDAwMDI0OUNDNDAwM0Y4QzAzN0ZGRkZGMAorOjEwMDE0MDAwN0M0MTQwMDBDRjQxQTI5RUM4MjAwM0Y4QzgxQzAzRjk5RgorOjEwMDE1MDAwNjYyMDAwMjBDODE4MDNGQjdERTFDMDJDN0Q1OEMwMDgzNAorOjEwMDE2MDAwN0NEQ0MwMjA2OTEwMDAyMEMwMzYwMDAzQ0MwMDAwNTRBNQorOjEwMDE3MDAwN0NCNDgwMEM4MDAwMDA2OUNDODAwMDQwN0M0MTgwMDAxMQorOjEwMDE4MDAwQ0Q4MUEyOUVDQzgwMDA0MDgwMDAwMDY3Q0Q4MDAwNDBFMQorOjEwMDE5MDAwQzAxOUZGRkZDQzgwMDA0MENEODFBMjlFN0M0MEMwMDBGMgorOjEwMDFBMDAwN0M0MTAwMDA3QzQxNDAwMENDQzFBMUZBQ0QwMUExRjkwNQorOjEwMDFCMDAwQ0Q0MUEyOURDQ0MwMDA0MENEMDAwMDQwQ0Q0MDAwNDBDQworOjEwMDFDMDAwQ0M0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI3QworOjEwMDFEMDAwQ0MwMDAwNTRDQzgwMDA0MDdDNDBDMDAwN0M0MTAwMDAzQQorOjEwMDFFMDAwN0M0MTQwMDBDQ0MxQTFGQUNEMDFBMUY5Q0Q0MUEyOUQzNQorOjEwMDFGMDAwQ0NDMDAwNDBDRDAwMDA0MENENDAwMDQwRDA0MDAwNDA4OQorOjEwMDIwMDAwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCN0M0MEMwMDAwQgorOjEwMDIxMDAwMzBEMDAwMDFDQ0MxQTI5Rjk1MDAwMDAzMDQxNDAwMDE1RQorOjEwMDIyMDAwMDQxNDAwMDJDRDQwMDNGQkNDODAwMDQwODAwMDAwMDA5RAorOjEwMDIzMDAwQ0NDMDAwNDA3QzQwQzAwMENDODAwMDQwQ0NDMUEyQTIxOQorOjEwMDI0MDAwODAwMDAwMDBDQ0MwMDA0MDdDNDBDMDAwMjhENDAwMUZDQgorOjEwMDI1MDAwQ0M4MDAwNDA5NTQwMDAwMzdDNDEwMDAwQ0NDMDAwNTc5QQorOjEwMDI2MDAwMjkxODAwMUZDQ0MwMDA0MDk1ODAwMDAzQ0QwMDAwNDAzRAorOjEwMDI3MDAwQ0QwMDAwNTg4MDAwMDI0OUNDMDAwMDdGQzgyMDAwMTc0NAorOjEwMDI4MDAwQzgzMDAwMjI5QTAwMDAwNjBFMjgwMDAxQzgyNDAwMUU3MworOjEwMDI5MDAwMEE2NDAwMDFENDAwMTI0MENFNDAwMDQwQzAzNkMwMDBDNQorOjEwMDJBMDAwOTY4MDAwMDczNzc0NzkwMDA0MUMwMDAxQ0Y0MDAwNDA5RAorOjEwMDJCMDAwQ0RDMDAwNDBDRjAwMDNGQTdDMDMwMDAwQ0EwQzAwMTA0MAorOjEwMDJDMDAwN0M0MTAwMDA5NEMwMDAwNDdDNDE0MDAwRDQyMDAyQzQ2MgorOjEwMDJEMDAwQ0RFMDAwNDQ5QjAwMDAwQjdDNDE4MDAwQ0MwMDAwNEIzMworOjEwMDJFMDAwQ0RBMDAwNDlDRDIwMDA0MUNENjAwMDQxQ0RBMDAwNDEwRQorOjEwMDJGMDAwMDYyMDAwMDFDRTAwMDA1NjgwMDAwMjQ5Q0MwMDAwN0Y5RAorOjEwMDMwMDAwQzgyODAwMjBDODJDMDAyMUNDMDAwMDYzN0VFQTQwMDFGMAorOjEwMDMxMDAwNjU3NDAwMjA3RjUzNDAyQzI2OUMwMDAyN0RGNUMwMjA5MAorOjEwMDMyMDAwNjlGODAwMjBDRTgwMDA0QkNFNjAwMDQ5Q0RFMDAwNDE0RQorOjEwMDMzMDAwQ0ZBMDAwNDFDRTYwMDA0MTI3MUMwMDAyN0RGNUMwMjAwNworOjEwMDM0MDAwNjlGODAwMjA3REIyNDAwMUNGMDAwMDRCQ0U2MDAwNDkyQgorOjEwMDM1MDAwQ0RFMDAwNDFDRkEwMDA0MTgwMDAwMEJDQ0U2MDAwNDE1NAorOjEwMDM2MDAwQzgyMDAwMTdDODMwMDAyMjlBMDAwMDA2MEUyODAwMDE5RAorOjEwMDM3MDAwQzgyNDAwMUUwQTY0MDAwMUQ0MDAxMjQwQ0U0MDAwNDA5MAorOjEwMDM4MDAwQ0EwQzAwMTA3QzQxMDAwMDk0QzAwMDBCQzAzNkMwMDBCNQorOjEwMDM5MDAwOTY4MDAwMDczNzc0NzkwMDA0MUMwMDAxQ0Y0MDAwNDBBQworOjEwMDNBMDAwQ0RDMDAwNDBDRjAwMDNGQTdDMDMwMDAwODAwMDAwQjUwMAorOjEwMDNCMDAwN0M0MTQwMDBDQzAwMDA0ODgwMDAwMEVFMDAwMDAwMDBCRQorOjEwMDNDMDAwQzgyMDAwMTdDODFDMDAyMzBFMjQwMDAyOTlDMDAwMTU4NQorOjEwMDNEMDAwN0M0MTgwMDAwQTIwMDAwMUNFMDAwMDU2RDQwMDA0NDA3OQorOjEwMDNFMDAwQ0MwMDAwNDBDMDM2QzAwMENBMTQwMDEzOTY0MDAwMDc3RAorOjEwMDNGMDAwMzc3NDc5MDBDRjQwMDA0MENDMDAwMDQwQzgzMDAzRkE4OQorOjEwMDQwMDAwODAwMDAxMDNDRjAwMDAyMkNDMDAwMDIyOTU0MDAxNDY2RAorOjEwMDQxMDAwQ0MwMDAwN0ZDQ0EwMDA0NjgwMDAwMDAwQ0MyMDAwNDYyRAorOjEwMDQyMDAwODAwMDAyNDlDQzAwMDA2NEM4MjAwMDE3QzgxMDAwMUZEQgorOjEwMDQzMDAwOTYwMDAwMDUwOTEwMDAwMUQ0MDAwNDQwQ0QwMDAwNDBFMgorOjEwMDQ0MDAwQ0QwMDAwMjJDQzgwMDA0MEQwNDAwMDQwQzgwQzAwMjVFOAorOjEwMDQ1MDAwOTRDMEZFRUNDODEwMDAwOENEMDAwMDQwRDQwMDBGQzBDRQorOjEwMDQ2MDAwODAwMDAwMDBENDAwMEZBMjdDNDBDMDAwN0M0MTAwMDA0RQorOjEwMDQ3MDAwQ0NDMDAzRkRDRDAwMDNGQ0NDQzAwMDQyQ0QwMDAwNDI0NworOjEwMDQ4MDAwMjkxNDAwMUYyOTE4MDAxMDMxOTgwMDA3M0I1QzAwMDE1NworOjEwMDQ5MDAwN0Q3NjAwMEI5OTgwMDAwNTdENUU0MDBCQ0MwMDAwNDIwQworOjEwMDRBMDAwODAwMDAyNDlDQzAwMDA0RDI5OTgwMDAxMjkyQzAwMDg0OQorOjEwMDRCMDAwOTk4MDAwM0QzMkVDMDAwMTk2MDAwMDA0MjkzMDAwMENDOAorOjEwMDRDMDAwODAwMDAyNDlDQzAwMDA0MjA0MTQwMDEwQ0Q0MDAwNDJEQworOjEwMDREMDAwMzMzMDAwMDEzNDI4MDAwMTg0MDAwMTVEQzgxNDAwMDM5QQorOjEwMDRFMDAwOUI0MDAwMUIwNDM4MDAwQzg0MDAwMTVEQzgxNDAwMDMwRAorOjEwMDRGMDAwOUI0MDAwMTcwNDM4MDAwODg0MDAwMTVEQzgxNDAwMDMwNQorOjEwMDUwMDAwOUI0MDAwMTMwNDM4MDAwNDg0MDAwMTVEQzgxNDAwMDNGQworOjEwMDUxMDAwOUI0MDAwMTVDODBDMDNGRDlBODAwMDA5QzgxMDAzRkMxRAorOjEwMDUyMDAwOUIwMDAxMDFDQzAwMDA0RDA0MTQwMDEwQ0NDMDAwNDIxRgorOjEwMDUzMDAwQ0QwMDAwNDI4MDAwMDEzNUNENDAwMDQyOTZDMDAwRkE1NworOjEwMDU0MDAwQ0MwMDAwNEQ4MDAwMDI0OUNDMDAwMDRFOUFDMDAwMDM1MAorOjEwMDU1MDAwQ0MwMDAwNERDQzAwMDA0RURGODMwMDAwODAwMDAwMDA4NgorOjEwMDU2MDAwRDgwMzAxRkY5QUMwMDBGMENDMDAwMDREODAwMDAyNDk4MgorOjEwMDU3MDAwQ0MwMDAwNEVDODE4MDAwM0M4MUMwMDAzQzgyMDAwMDNBQworOjEwMDU4MDAwN0Q1RDQwMDM3REExQzAwMzdENUQ0MDBDMkExMDAwMUZFRQorOjEwMDU5MDAwMjk5QzAwMUY3RDFEMDAwQjdEMTc0MDBCODgwMDAwMDA2QgorOjEwMDVBMDAwN0U5MjgwMEI5NjQwMDAwNENDMDAwMDRFODAwMDAyNDlGMQorOjEwMDVCMDAwQ0MwMDAwNDIwNDM4MDAwOENGODAwMDQyQzgwODAwMDM4NQorOjEwMDVDMDAwQzgwQzAwMDNDODEwMDAwM0M4MTQwMDAzQzgxODAwMDNCNworOjEwMDVEMDAwQzgxQzAwMDNDODI0MDAwM0M4MjgwMDAzMjlGQzAwMUYwRQorOjEwMDVFMDAwMkFCMDAwMUY3RkYzQzAwQjI4RjAwMDFGN0ZGM0MwMEI2MQorOjEwMDVGMDAwMjk3MDAwMUY3RkYzQzAwQjdEODg4MDAxN0RDQ0MwMDE3NgorOjEwMDYwMDAwN0U1MTAwMDE3RTk1NDAwMTdDOTA4MDAyN0NENEMwMDIyNgorOjEwMDYxMDAwN0NCQzgwMEI5QUMwMDAwMzdDOEY0MDBCMzhCNDAwMDE3NworOjEwMDYyMDAwOUI0MDAwQzFDQzAwMDA0RDlCQzAwMEJGQ0MwMDAwNEVFMQorOjEwMDYzMDAwQzgwQzAzRkRDODEwMDNGQ0NDQzAwMDQyODAwMDAxNkU1MgorOjEwMDY0MDAwQ0QwMDAwNDJENDAwMDM0MEQ0MDAwRkMwRDQwMDBGQTI1QworOjEwMDY1MDAwQ0M4MDAwNDBDQzQwMDA0MENDNDAwMDQwQ0M0MDAwNDAyQQorOjEwMDY2MDAwN0M0MEMwMDBDQ0MwMDA0MENDQzAwMDBEODAwMDAwMDAyOQorOjEwMDY3MDAwRDA0MDAwNDA3QzQwQzAwMDdDNDEwMDAwNjUxNDAwMjA1OAorOjEwMDY4MDAwN0Q0RDQwMkMyNDU4MDAwMjdENTk4MDIwN0M0MUMwMDBDMworOjEwMDY5MDAwQ0Q4MDAwNDI2OTk4MDAyMENEODAwMDQyQ0RDMDAwNDI0QworOjEwMDZBMDAwQzAyM0MwMDAwNUU0MDAwMjdDQTA4MDBCMjY2NDAwMTA3QgorOjEwMDZCMDAwN0NBNDgwMENDQzgwMDA0MENEQzAwMDQwQ0NDMDAwNDA2OQorOjEwMDZDMDAwOTVDMDAwMEVDRDAwMDA0MDA5REMwMDAxQzgyODAwMDNFMQorOjEwMDZEMDAwOTY4MDAwMDhDRTgwMDA0MEM4MzQwMDFEOTc0MDAwMDA3RQorOjEwMDZFMDAwQzgzNDAwMUQyNkE4MDAwODg0MDAwMjRDQ0MyQjAwMDA1MgorOjEwMDZGMDAwOTlDMEZGRjcwOURDMDAwMURDM0EwMDAwOTc4MDAwMDQ5NAorOjEwMDcwMDAwN0M0MTgwMDA4MDAwMDFBMjI1OTgwMDAyQTAwMDAwMDAyQQorOjEwMDcxMDAwN0Q4MDgwMDBDODE4MDAxRDdDNDBDMDAwNjREMDAwMDhBNworOjEwMDcyMDAwOTU4MDAwMDBDODE4MDAxRENDMTMwMDAwQ0M4MDAwNDA0QworOjEwMDczMDAwQ0NDMDAwNDA4MDAwMDAwMENDNDAwMDQwQzgxMDAwMUYyQQorOjEwMDc0MDAwN0M0MEMwMDBDQzgwMDA0MDdDRDE0MDBDQ0Q0MDAwNDBCQgorOjEwMDc1MDAwMDUxODAwMDE4MDAwMDAwMENEODAwMDIyN0M0MEMwMDAxMAorOjEwMDc2MDAwNjQ1MDAwMjA4NDAwMDI0Q0NDMDAwMDYxN0NEMEMwMkM3RQorOjEwMDc3MDAwQzgyMDAwMTdDOEQ2MDAwMDk5NDAwMDA4N0M0MzgwMDBCQworOjEwMDc4MDAwREY4MzAwMDBDRkEwMDA0Rjg0MDAwMjRDQ0MwMDAwNjI0OQorOjEwMDc5MDAwODAwMDAwMDBEMDQwMDA3RjgwMDAwMjQ5Q0MwMDAwNjI1MQorOjEwMDdBMDAwODQwMDAyNENDQzAwMDA2MUM4MjAwMDE3N0M0MEMwMDBDRgorOjEwMDdCMDAwQzAzNkZGMDBDODEwMDAwREMwMzAzRkZGN0NGNTQwMEI3NQorOjEwMDdDMDAwN0Q1MTgwMEI3RDgxODAwRjk5ODAwMDA4N0NGMzgwMEIyOAorOjEwMDdEMDAwREY4MzAwMDBDRkEwMDA0Rjg0MDAwMjRDQ0MwMDAwNjJGOQorOjEwMDdFMDAwODAwMDAwMDBEMDQwMDA3RjgwMDAwMjQ5Q0MwMDAwNjIwMQorOjEwMDdGMDAwODQwMDAyNEM3QzQwQzAwMDI4REMwMDA4OTVDMDAwMTkzMQorOjEwMDgwMDAwMzBEQzAwMTA3QzQxMDAwMDk5QzAwMDA0NjQ1NDAwMjBEQQorOjEwMDgxMDAwODAwMDAyMDhDOTFEMDAwMDdEMTUwMDJDQzkxRTAwMDBDMworOjEwMDgyMDAwN0M0MjAwMDA3QzQyNDAwMDdDNDE4MDAwN0RFNUMwMEJBMgorOjEwMDgzMDAwN0RFMjgwMDc5QTgwMDAwRTQxQUMwMDA1OUFDMDAwMDA1RQorOjEwMDg0MDAwMEFFQzAwMDEzMERDMDAxMDk5QzAwMDA0MDAwMDAwMDAzOAorOjEwMDg1MDAwODAwMDAyMEJDOTFEMDAwMDgwMDAwMjBCQzkxRTAwMDBCMQorOjEwMDg2MDAwQ0M4MDAwNDBDQ0MwMDA0MEQwNDAwMDQwQzgwQzAwMjVFNworOjEwMDg3MDAwOTRDMEZERTRDODEwMDAwOENEMDAwMDQwRDQwMDBGQzBCMworOjEwMDg4MDAwODAwMDAwMDBENDAwMEZBMkQ0MDAwMzQwRDQwMDBGQzBBOQorOjEwMDg5MDAwRDQwMDBGQTJDQzgwMDA0MEQwNDAwMDQwN0M0MDgwMDBCQgorOjEwMDhBMDAwQTAwMDAwMDA3RTgyODAwQkQ0MDAwM0MwRDQwMDBGQzBFMworOjEwMDhCMDAwRDQwMDBGQTJDQzgwMDA0MEQwNDAwMDQwN0M0MDgwMDA5QgorOjEwMDhDMDAwQTAwMDAwMDA3RTgyODAwQjdDNDBDMDAwMzBEMDAwMDY3QgorOjEwMDhEMDAwMEQxMDAwMDY5OTAwMDAwN0M4MTQwMDE1OTk0MDAwMDU4NgorOjEwMDhFMDAwQ0MwMDAwNTJENDAwMDM0MEQ0MDAwRkMwRDQwMDBGQTJBQgorOjEwMDhGMDAwQ0M4MDAwNDBDQ0MwMDA0MDgwMDAwMDAwRDA0MDAwNDBEMAorOjEwMDkwMDAwN0M0MEMwMDBDQzREMDAwMERDM0EwMDAwOTc4MEZEQkQ2QgorOjEwMDkxMDAwMDRDQzAwMDE4MDAwMDI0MkNDNEQwMDAwODAwMDAwMDBBOQorOjEwMDkyMDAwRDA0MDAwN0ZDQzAwMDA3RjgwMDAwMDAwQ0MwMDAwN0YyMgorOjEwMDkzMDAwQ0MwMDAwN0Y4ODAwMDAwMENDMDAwMDdGMDAwMDAwMDA5OQorOjEwMDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwMDk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMDk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwMDk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwMDlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMDlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMDlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMDlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMDlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMEExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMEEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwMEEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMEE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwMEE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwMEE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMEMwMDAwMDAwMzAyMjIwMDA0MDIyQTAwMDUwMDlGMDAwMjAwMDNFNAorOjEwMEMxMDAwMDAwNjAwM0MwMDA3MDAyNzAwMDgwMTkxMDAwOTAwNDQ3RAorOjEwMEMyMDAwMDAwQTAwMkQwMDEwMDI0NzAwMTcwMEYwMDAyMjAxRDczMworOjEwMEMzMDAwMDAyMzAxRTgwMDI2MDA0QzAwMjcwMDVGMDAyMDAxMUE3NQorOjEwMEM0MDAwMDAyODAwOTIwMDI5MDA0RjAwMkEwMDgzMDAyQjAwNjQzNgorOjEwMEM1MDAwMDAyRjAwOEQwMDMyMDBEODAwMzQwMjMyMDAzNjAwNzRCQworOjEwMEM2MDAwMDAzOTAxMEEwMDNDMDFGQzAwM0YwMDlGMDA0MTAwMDVFMworOjEwMEM3MDAwMDA0NDAxOTQwMDQ4MDE5RDAwNDkwMUM1MDA0QTAxQ0Y4QworOjEwMEM4MDAwMDA1NTAyMjUwMDU2MDIyRDAwNjAwMDBBMDA2MTAwMkE2RQorOjEwMEM5MDAwMDA2MjAwMzAwMDYzMDAzMDAwNjQwMDMwMDA2NTAwMzAwNgorOjEwMENBMDAwMDA2NjAwMzAwMDY3MDAzMDAwNjgwMDM3MDA2OTAwM0ZEMAorOjEwMENCMDAwMDA2QTAwNDcwMDZCMDA0NzAwNkMwMDQ3MDA2RDAwNDc2QQorOjEwMENDMDAwMDA2RTAwNDcwMDZGMDA0NzAwNzAwMDQ3MDA3MzAyNDc0NgorOjEwMENEMDAwMDA3QjAyNDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDU0OAorOjEwMENFMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVGMAorOjEwMENGMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVFMAorOjEwMEQwMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVDRgorOjEwMEQxMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVCRgorOjEwMEQyMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVBRgorOjEwMEQzMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDU5RgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjczMF9tZS5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjczMF9tZS5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBjMThlCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNzMwX21lLmJpbi5paGV4CkBAIC0wLDAgKzEsMzQxIEBACis6MTAwMDAwMDBDQzAwMDNFQTdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MkFECis6MTAwMDEwMDA4MDAwMDAwMUQwNDAwMDdGODAwMDAwMDFDQzQwMDA0MTAyCis6MTAwMDIwMDA3QzQwQzAwMEMwMTYwMDA0MzBEMDNGRkY3RDE1MDAwQzlFCis6MTAwMDMwMDBDQzExMDAwMDI4RDgwMDFFMzE5ODAwMDEyOERDMDAxRkQ4Cis6MTAwMDQwMDBDODIwMDAwNDk1QzAwMDA2N0M0MjQwMDBDQzAwMDA2MjNECis6MTAwMDUwMDA3RTU2ODAwQ0NDMjkwMDAwQzgyNDAwMDQ3RTI2MDAwQkFDCis6MTAwMDYwMDA5NTgwMDAwNjdDNDJDMDAwQ0MwMDAwNjI3RUQ3MDAwQzY4Cis6MTAwMDcwMDBDQzMxMDAwMEM4MkMwMDA0N0UyRTAwMENDQzAwMDA2MkE1Cis6MTAwMDgwMDAzMTEwM0ZGRjgwMDAwMDAxQ0UxMTAwMDA3QzQwQzAwMDE1Cis6MTAwMDkwMDA4MDAwMDAwMUNDNDAwMDQwODAwMDAwMDFDQzQxMjI1NzhDCis6MTAwMEEwMDA3QzQxODAwMENDNDAwMDQ1Q0M0MDAwNDhDQzQxMjI1Q0UzCis6MTAwMEIwMDBDQzQxQTFGQzdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjBDCis6MTAwMEMwMDBDQzQwMDA0NUNDNDAwMDQ4N0M0MEMwMDBDQzQxMjI1Qzg0Cis6MTAwMEQwMDBDQzQxQTFGQzdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MkVDCis6MTAwMEUwMDBDQzAwMDA0NUNDMDAwMDQ4Q0M0MTIyNUNDQzQxQTFGQ0I2Cis6MTAwMEYwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIwNDBDQTFGREM4Cis6MTAwMTAwMDBDMDEyMDAwMUNDMDAwMDQ1Q0MwMDAwNDg3Q0QwQzAwQ0RGCis6MTAwMTEwMDBDQzQxMjI1Q0NDNDFBMUZDRDA0RDAwMDA3QzQwODAwMDUxCis6MTAwMTIwMDBBMDAwMDAwMENDODAwMDYyODAwMDAwMDFDQzQxMjI1RDc0Cis6MTAwMTMwMDA3QzQwODAwMDdDNDBDMDAwQzAyQTAwMDI3QzQxMDAwMDVFCis6MTAwMTQwMDA3RDI5MDAwQzMwOTQwMDAxMzA5ODAwMDYzMDlDMDMwMDlCCis6MTAwMTUwMDAyOURDMDAwODdDNDIwMDAwN0M0MjQwMDA5NTQwMDAwRkYyCis6MTAwMTYwMDBDMDJFMDAwNDA1RjAyMjU4N0YyRjAwMENDQzMxMDAwMDc3Cis6MTAwMTcwMDBDODI4MDAwNENDQzEyMTY5Q0QwMTIxNkFDRTgxMjE2QjQwCis6MTAwMTgwMDAwREI0MDAwMkNDMDEyMTZDOTc0MDAwMEUwREI0MDAwMEFDCis6MTAwMTkwMDA4MDAwMDA3QkM4MzQwMDBBMERCNDAwMDI5NzQwMDAwOUJCCis6MTAwMUEwMDAwREI0MDAwMEMwMkUwMDA0MDVGMDIyNTg3RjJGMDAwQzczCis6MTAwMUIwMDBDQzMxMDAwMEM4MjgwMDA0ODAwMDAwN0JDODM0MDAwQTRECis6MTAwMUMwMDA5NzQwMDAwNDdFMDI4MDAwODAwMDAwN0JDODM0MDAwQTUzCis6MTAwMUQwMDAwREI0MDAwNDk3NDBGRjhDMDAwMDAwMDBDRTAxMjE2RDlCCis6MTAwMUUwMDBDRTQxMjE2RUM4MjgwMDAzQzgzNDAwMEE5QjQwMDAwNDk5Cis6MTAwMUYwMDAwNDNDMDAwNTg0MDAwMjZCQ0MwMDAwNjIwREY0MDAwMDlBCis6MTAwMjAwMDA5NzQwMDAwQkM4MkMwM0U2Q0U4MUEyQjdDMDMwMDAwNjkxCis6MTAwMjEwMDA3RUYzNDAyOEMwMzAwMDIwN0Y2QjgwMjA3RkIzQzAyOTUwCis6MTAwMjIwMDBDRjgxQTJDNDgwMDAwMDAxQ0ZDMUEyRDEwREY0MDAwMTkyCis6MTAwMjMwMDA5NzQwMDAwQkM4MkMwM0U3Q0U4MUEyQkJDMDMwMDAwNjVDCis6MTAwMjQwMDA3RUYzNDAyOEMwMzAwMDIwN0Y2QjgwMjA3RkIzQzAyOTIwCis6MTAwMjUwMDBDRjgxQTJDNTgwMDAwMDAxQ0ZDMUEyRDIwREY0MDAwMjVGCis6MTAwMjYwMDA5NzQwMDAwQkM4MkMwM0U4Q0U4MUEyQkZDMDMwMDAwNjI3Cis6MTAwMjcwMDA3RUYzNDAyOEMwMzAwMDIwN0Y2QjgwMjA3RkIzQzAyOUYwCis6MTAwMjgwMDBDRjgxQTJDNjgwMDAwMDAxQ0ZDMUEyRDNDODJDMDNFOTUwCis6MTAwMjkwMDBDRTgxQTJDM0MwMzAwMDA2N0VGMzQwMjhDMDMwMDAyMENCCis6MTAwMkEwMDA3RjZCODAyMDdGQjNDMDI5Q0Y4MUEyQzc4MDAwMDAwMTZGCis6MTAwMkIwMDBDRkMxQTJENDgwMDAwMDAxQ0M0MDAwNDI3QzQwQzAwMEVECis6MTAwMkMwMDA3QzQxMDAwMDI5MTQwMDFEMzE1NDAwMDE5OTQwMDAwQ0FDCis6MTAwMkQwMDAzMTE4MTAwMEM4MUMwMDExOTVDMDAwMDBDODFDMDAxMTg2Cis6MTAwMkUwMDBDQ0MxMjEwMENEMDEyMTAxQ0NDMTIxMDJDRDAxMjEwM0NFCis6MTAwMkYwMDAwNDE4MDAwNDgwMDAwMzdDQ0Q4MUEyQTRDMDJBMDAwNDVECis6MTAwMzAwMDA5NTgwMDAwODM2QTgyMUEzQ0MyOTAwMDBDODI4MDAwNDQ1Cis6MTAwMzEwMDBDODFDMDAxMTBERTQwMDQwOTY0MEZGRkZDODFDMDAxMUVFCis6MTAwMzIwMDBDQ0MxMjE3MENEMDEyMTcxQzgyMDAwMTI5NjAwMDAwMEJGCis6MTAwMzMwMDBDODIwMDAxMjgwMDAwMzdDQ0MwMDAwNjQ3QzQwQzAwMDE4Cis6MTAwMzQwMDA3QzQxMDAwMENDMDAwMDQ1Q0MwMDAwNDg0MEQ0MDAwM0I0Cis6MTAwMzUwMDBDRDQxMjI1Q0NEMDFBMUZDQzAxQTAwMDEwNDFDQTFGRDBECis6MTAwMzYwMDA3REQ5QzAwQzdDNDIwMDAwMDhDQzAwMDEwNjI0MDAwMUFECis6MTAwMzcwMDAwNjI4MDAwMkNFMUQwMDAwQ0U1RDAwMDA5OEMwRkZGQUU2Cis6MTAwMzgwMDBDRTlEMDAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2Mjc4Cis6MTAwMzkwMDA3QzQwQzAwMDMwRDAwMDAxMjhDQzAwMDE3QzQxNDAwMEVFCis6MTAwM0EwMDA5NTAwMDAwNjdDNDE4MDAwQ0Q0MTIxNkRDRDgxMjE2RUZDCis6MTAwM0IwMDA4MDAwMDBGMkM4MUMwMDAzQzAyMjAwMDQ3RTE2MDAwQzVFCis6MTAwM0MwMDBDQzIxMDAwMEM4MUMwMDA0N0M0MjQwMDA5OEMwMDAwNEZFCis6MTAwM0QwMDA3QzQyODAwMDgwMDAwMDAxQ0RFNTAwMDBDRTQxMjE2OTEzCis6MTAwM0UwMDBDRTgxMjE2QUNEQzEyMTZCODAwMDAwMDFDQzAxMjE2QzNFCis6MTAwM0YwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMDhBCis6MTAwNDAwMDA3QzQxQzAwMDI4QTQwMDA4MzI2NDAwRkYwRTY4MDAzQzU0Cis6MTAwNDEwMDA5NjgwMDAwQTdDMDIwMDAwN0M0MjAwMDAxRTMwMDAwMzJGCis6MTAwNDIwMDBDQzAwMDA2QTlCMDAwMDAzNDIyMDAwMDUwNDIwMDA0MDJECis6MTAwNDMwMDA4MDAwMDEwRjdDMDI0MDAwN0UwMjQwMDA5QTQwMDAwMEQ0Cis6MTAwNDQwMDAwQTY0MDAwMTMwRUMwMDEwOUFDMDAwMEFDQzAwMDA2MjdGCis6MTAwNDUwMDBDMDJBMDAwNEM4MkMwMDIxN0U5MjgwMENDQzAwMDA0MUYwCis6MTAwNDYwMDBDQzI5MDAwMENFQzAwMDIxODAwMDAxMUZDODMwMDAwNDRDCis6MTAwNDcwMDBDRDAxMjE2RENENDEyMTZFQzgzMDAwMDM3RjFGMDAwQkRGCis6MTAwNDgwMDAzMEY0MDAwNzI3NzgwMDAxOTc0MDAwMkEwN0I4MDEyNEJDCis6MTAwNDkwMDA5RjgwMDAwMDAwMDAwMDAwODAwMDAxMzQ3RjFCODAwNDZBCis6MTAwNEEwMDA4MDAwMDEzODdGMUI4MDA1ODAwMDAxM0M3RjFCODAwMjlCCis6MTAwNEIwMDA4MDAwMDE0MDdGMUI4MDAzODAwMDAxNDQ3RjFCODAwNzc4Cis6MTAwNEMwMDA4MDAwMDE0ODdGMUI4MDA2ODAwMDAxNEQyOEE0MDAwOEExCis6MTAwNEQwMDA5QjgwMDAxOTI4QTQwMDA4ODAwMDAxNUQzMjY0MDBGRkExCis6MTAwNEUwMDA5QjgwMDAxNTI4QTQwMDA4ODAwMDAxNUQzMjY0MDBGRjk1Cis6MTAwNEYwMDA5QjgwMDAxMTI4QTQwMDA4ODAwMDAxNUQzMjY0MDBGRjg5Cis6MTAwNTAwMDA5QjgwMDAwRDI4QTQwMDA4ODAwMDAxNUQzMjY0MDBGRjdDCis6MTAwNTEwMDA5QjgwMDAwOTI4QTQwMDA4ODAwMDAxNUQzMjY0MDBGRjcwCis6MTAwNTIwMDA5QjgwMDAwNTI4QTQwMDA4ODAwMDAxNUQzMjY0MDBGRjY0Cis6MTAwNTMwMDAyOEE0MDAwODMyNjQwMEZGMEU2ODAwM0M5QTgwRkVCMkQ2Cis6MTAwNTQwMDAyOEVDMDAwODdDNDM0MDAwN0M0MzgwMDA3QzQzQzAwMEQyCis6MTAwNTUwMDA5NkMwMDAwN0NDMDAwMDYyQ0Y0MTIxNjlDRjgxMjE2QTlCCis6MTAwNTYwMDBDRkMxMjE2QjgwMDAwMDAxQ0MwMTIxNkM4MDAwMDAwMTEzCis6MTAwNTcwMDBDRkY1MDAwMENDMDAwMDZCODQwMDAzN0YwRTY4MDAzQ0M4Cis6MTAwNTgwMDA5QTgwMDAwNEM4MjgwMDE1ODAwMDAwMDFEMDQwMDA3RjM4Cis6MTAwNTkwMDA5NjgwRkZBQjdFMDI0MDAwODQwMDAyMzlDMDBFMDAwMjRDCis6MTAwNUEwMDBDQzAwMDA0MTgwMDAwMjM3Q0NDMTMwNEE3QzQwQzAwMDAyCis6MTAwNUIwMDA3QzQxMDAwMEMwMUUwMDAxMjkyNDAwMTJDMDIyMDAwMjVDCis6MTAwNUMwMDA5NjQwMDAwNUMwMjYwMDA0QzAyN0ZGRkI3RDI1MDAwQkQ4Cis6MTAwNUQwMDBDMDI2MDAwMDdERDI4MDBCN0UxMkMwMEI3RDI1MDAwQzUyCis6MTAwNUUwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMTIxNjk5QTgwMDAwQTk2Cis6MTAwNUYwMDBDRDAxMjE2QUNENDEyMTZCOTZDMEZFODNDRDgxMjE2QzU2Cis6MTAwNjAwMDBDODMwMDAxODk3MDAwMDAwQzgzMDAwMTg4MDAwMDAwMUIyCis6MTAwNjEwMDBDQzAwMDAxODg0MDAwMzdGQ0MwMDAwN0ZDODE0MDAxM0I2Cis6MTAwNjIwMDBDODE4MDAxNENENDEyMTZCOTZDMEZFNzdDRDgxMjE2Qzk2Cis6MTAwNjMwMDA4MDAwMDE4MUM4MzAwMDE4QzgwQzAwMDg5OEMwMDAwMDc0Cis6MTAwNjQwMDBDODBDMDAwODdDNDEwMDAwOTUwMDAwMDIwMDAwMDAwMDdBCis6MTAwNjUwMDA3QzQxNDAwMEM4MjAwMDA5Q0M0MDAwNDNDRTAxQTFGNEY5Cis6MTAwNjYwMDBDQzQwMDA0NEMwMEU4MDAwN0M0MjQwMDA3QzQyODAwMEIwCis6MTAwNjcwMDAyQUFDMDAxRjk2QzBGRTY0QzAzNUYwMDBDRTQwMDNFMkY1Cis6MTAwNjgwMDAzMjc4MDAwMzI2N0MwMDA4N0ZGN0MwMEI3RkZCQzAwQzhDCis6MTAwNjkwMDAyQTc4MDAxOENGQzAwM0UzQ0Y4MDAzRTQyNkIwMDAwMjFECis6MTAwNkEwMDA3RjNGMDAwMENGMDAwM0U1ODAwMDAzMUQ3QzgwQzAwMDc5Cis6MTAwNkIwMDA3QzQwQzAwMDI4RDAwMDA4MzExMDAwMEY5NTAwMDAwRkNBCis6MTAwNkMwMDAyNTI4MDAwMTA2QTgwMUIyOUU4MDAwMDAwMDAwMDAwMDVECis6MTAwNkQwMDA4MDAwMDFEM0MwMTIwODAwODAwMDAxRTFDODE0MDAwRjlGCis6MTAwNkUwMDA4MDAwMDFFOEM4MTQwMDEwODAwMDAxRUZDQ0MxQTJBNDcyCis6MTAwNkYwMDA4MDAwMDFGOEM4MTQwMDExMzBEMDAwM0YwRDI4MDAxNTBCCis6MTAwNzAwMDA5QTgwMDAxMjBEMjgwMDFFOUE4MDAwMUUwRDI4MDAyMERECis6MTAwNzEwMDA5QTgwMDAyMzBEMjQwMDBGMEQyODAwMTA3RTZBODAwQ0EzCis6MTAwNzIwMDA5QTgwMDAyNjBEMjAwMDA0MEQyNDAwMTQwRDI4MDAyOEI2Cis6MTAwNzMwMDA3RTYyNDAwQzdFQTY4MDBDOUE4MDAwMkFDODE0MDAxMUFDCis6MTAwNzQwMDA4MDAwMDAwMUNDQzFBMkE0QzAxMjA4MDA3QzQxNDAwMDdFCis6MTAwNzUwMDA3RDBDQzAwQ0MwMTIwMDA4Mjk1ODAwMDMyOTVDMDAwQzU1Cis6MTAwNzYwMDA3QzQyMDAwMDdERDFDMDBCMjYyMDAwMTQ3RTFFNDAwQzcwCis6MTAwNzcwMDA3RTRFODAwQ0NFODFBMkE0ODAwMDAwMDFDRDgxQTFGRTFFCis6MTAwNzgwMDBDODE0MDAwRjA0MTAyMTBFOTU0MDAwMDBDODE0MDAwRjdCCis6MTAwNzkwMDBEMDUxMDAwMDgwMDAwMDAxQ0NDMUEyQTRDODE0MDAxMEY4Cis6MTAwN0EwMDAwNDEwMjEwODk1NDAwMDAwQzgxNDAwMTBEMDUxMDAwMDJBCis6MTAwN0IwMDA4MDAwMDAwMUNDQzFBMkE0Q0NDMUEyQTQwNDEwMDAwMUZECis6MTAwN0MwMDBDRDAwMDAxOTg0MDAwMzdGQ0MwMDAwN0ZDODEwMDAxOTAxCis6MTAwN0QwMDA5OTAwMDAwMEM4MTAwMDE5ODAwMDAwMDI3QzQwODAwMEQxCis6MTAwN0UwMDAwNDEwMjEwMDk1NDAwMDAwQzgxNDAwMTFEMDUxMDAwMEYxCis6MTAwN0YwMDA4MDAwMDM3Q0NDQzFBMkE0N0M0MEMwMDBDQzQwMDAwRDkyCis6MTAwODAwMDA5NEMwRkUwMUNDNDAwMDBFN0M0MTAwMDA5NTAwMDAwNTI0Cis6MTAwODEwMDAwOENDMDAwMUM4MTQwMDA1OTk0MDAwMTQwMDAwMDAwMDM1Cis6MTAwODIwMDA5OEMwRkZGQjdDNDEwMDAwODAwMDAwMDI3RDAwODAwMDNBCis6MTAwODMwMDBDODE0MDAwNTdDNDBDMDAwOTk0MDAwMENDODE4MDAwQzhBCis6MTAwODQwMDA3QzQxMDAwMDk1ODBGREYwQzgyMDAwMEVDODFDMDAwRDAyCis6MTAwODUwMDA2NjIwMDAyMDdFMUUwMDJDMjUyNDAwMDI3RTYyNDAyMDlGCis6MTAwODYwMDA4MDAwMDAwMUNDRTYwMDAwN0M0MTAwMDBDQzAwMDA2QzYwCis6MTAwODcwMDBDQzAwMDA2REM4MTgwMDFGQzgxQzAwMUU2NTk4MDAyMDIxCis6MTAwODgwMDA3REQ5QzAyQzdDRDRDMDBDQ0NERTAwMDA0NURDMDAwNDNCCis6MTAwODkwMDBDODI4MDAxNzk2ODAwMDBGQzAwRTAwMDEyODY4MDAwOEM1Cis6MTAwOEEwMDAyQUFDMDAxNjMyQTgwMEZGMEVCMDAwNDk3RjJGMDAwQkMzCis6MTAwOEIwMDA5NzAwMDAwNjAwMDAwMDAwQzgxNDAwMDU3QzQwQzAwMDNFCis6MTAwOEMwMDA4MDAwMDIyMTdDNDEwMDAwODAwMDAyMjREMDQwMDA3RjkzCis6MTAwOEQwMDA4NDAwMDIzOUNDMDAwMDQxQ0NDMTMwNEE5NDAwMDAwMEIxCis6MTAwOEUwMDBDODNDMDAxQTA0M0MwMDA1Q0ZDMUEyQTRDMDM2MUY5MDJBCis6MTAwOEYwMDBDMDM4N0ZGRjdDMDNDMDEwN0Y3QjQwMENDRjQxMjE3QzQwCis6MTAwOTAwMDBDRkMxMjE3RENDMDEyMTdFQzAzQTAwMDQwNDM0MjE3Rjc3Cis6MTAwOTEwMDA3RjdCNDAwQ0NDMzUwMDAwQzgzQzAwMDQyQkZDMDAxRjQyCis6MTAwOTIwMDAwNDM4MDAyMDk3QzAwMDA1Q0MwMDAwNjI5QjgwMDAwMEM2Cis6MTAwOTMwMDAwQkI4MDAwMTgwMDAwMjQ1Q0MwMDAwNzFDQzAxQTFGNDhECis6MTAwOTQwMDAwNDM4MDAxNkMwMzYwMDAyQ0Y4MUEyQTQ4ODAwMDAwMDNGCis6MTAwOTUwMDBDRjQxMjAxMDdDNDBDMDAwMjhEMDAwMUM5NTAwMDAwNTJECis6MTAwOTYwMDAwNEQ0MDAwMUNENDAwMDY1ODAwMDAwMDFDRDQwMDA2ODQ2Cis6MTAwOTcwMDAwOTU0MDAwMjgwMDAwMDAxQ0Q0MDAwNjY4NDAwMDI2QTM0Cis6MTAwOTgwMDBDODE4MDNFQTdDNDBDMDAwOTk4MEZEOUZDODE0MDAxNjc3Cis6MTAwOTkwMDAwOEQwMDAwMTk5NDAwMDJCQ0QwMDAwNjg3QzQwODAwMDA5Cis6MTAwOUEwMDBBMDAwMDAwMENDODAwMDYyMDQzQzAwMDVDRkMxQTJBNERFCis6MTAwOUIwMDBDQzAxQTFGNDg0MDAwMzdGQ0MwMDAwNDY4ODAwMDAwMDM1Cis6MTAwOUMwMDBDQzAwMDA3Rjg0MDAwMjdDQzgxODAzRUE3QzQwQzAwMDkxCis6MTAwOUQwMDA5OTgwRkQ4REM4MTQwMDE2MDhEMDAwMDE5OTQwMDAxOUI3Cis6MTAwOUUwMDBDRDAwMDA2ODdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjQ4Cis6MTAwOUYwMDAwNDNDMDAyMkNGQzFBMkE0ODQwMDAzN0ZDQzAwMDA0N0E2Cis6MTAwQTAwMDA4ODAwMDAwMENDMDAwMDdGQzgxMDAwMTY5OTAwMDAwRDdGCis6MTAwQTEwMDBDQzQwMDA2NzgwMDAwMDAyN0M0MDgwMDBDODE4MDNFQUQ4Cis6MTAwQTIwMDA5OTgwRkQ3OTdDNDBDMDAwOTRDMDAwMDNDODEwMDAxNjc2Cis6MTAwQTMwMDA5OTAwMDAwNENDQzAwMDY4ODAwMDAwMDI3QzQwODAwMDY3Cis6MTAwQTQwMDA4NDAwMDIzOUMwMTQ4MDAwQ0MwMDAwNDFDRDQxMzA0QUZFCis6MTAwQTUwMDBDMDE0ODAwMDk5MDAwMDAwQzgxMDAwMTY4MDAwMDAwMjM5Cis6MTAwQTYwMDA3QzQwODAwMEMwMTIwMDAxN0M1MTQwMEM4MDAwMDAwMURECis6MTAwQTcwMDBEMDU1MDAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDFCCis6MTAwQTgwMDA3QzQxODAwMDI5MUMwMDFGQ0NDMDAwNEFDRDAwMDA0QkQ3Cis6MTAwQTkwMDA5NUMwMDAwM0MwMUM4MDAwQ0RDMTIwMTBERDgzMDAwMDg0Cis6MTAwQUEwMDAwNTVDMjAwMENDMDAwMDYyODAwMDAwMDFEODFGNDEwMERFCis6MTAwQUIwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMEMzCis6MTAwQUMwMDBDQ0MwMDA0Q0NEMDAwMDREREQ4MzAwMDAwNTVDQTAwMEQzCis6MTAwQUQwMDA4MDAwMDAwMUQ4MUY0MTAwN0M0MEMwMDA3QzQxMDAwMDI0Cis6MTAwQUUwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMDAwNEVDRDAwMDA0RkQ2Cis6MTAwQUYwMDBERDgzMDAwMDA1NUNDMDAwODAwMDAwMDFEODFGNDEwMEJDCis6MTAwQjAwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMDcyCis6MTAwQjEwMDBDQ0MwMDA1MENEMDAwMDUxREQ4MzAwMDAwNTVDRjhFMDQyCis6MTAwQjIwMDA4MDAwMDAwMUQ4MUY0MTAwN0M0MEMwMDA3QzQxMDAwMEQzCis6MTAwQjMwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMDAwNTJDRDAwMDA1MzdECis6MTAwQjQwMDBERDgzMDAwMDA1NUNGODgwODAwMDAwMDFEODFGNDEwMEIzCis6MTAwQjUwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMDIyCis6MTAwQjYwMDBDQ0MwMDA1NENEMDAwMDU1REQ4MzAwMDAwNTVDRTAwMEUyCis6MTAwQjcwMDA4MDAwMDAwMUQ4MUY0MTAwN0M0MEMwMDA3QzQxMDAwMDgzCis6MTAwQjgwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMDAwNTZDRDAwMDA1NzI1Cis6MTAwQjkwMDBERDgzMDAwMDA1NUNGMDAwODAwMDAwMDFEODFGNDEwMEVCCis6MTAwQkEwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMEQyCis6MTAwQkIwMDBDQ0MwMDA1OENEMDAwMDU5REQ4MzAwMDAwNTVDRjNGQzdCCis6MTAwQkMwMDA4MDAwMDAwMUQ4MUY0MTAwRDA0MzIwMDA3QzQwODAwMEZECis6MTAwQkQwMDBBMDAwMDAwMENDODAwMDYyRDA0M0EwMDA3QzQwODAwMEQ4Cis6MTAwQkUwMDBBMDAwMDAwMENDODAwMDYyRDA0M0MwMDA3QzQwODAwMEE4Cis6MTAwQkYwMDBBMDAwMDAwMENDODAwMDYyRDA0M0Y4RTA3QzQwODAwMDgwCis6MTAwQzAwMDBBMDAwMDAwMENDODAwMDYyRDA0M0Y4ODA3QzQwODAwMENGCis6MTAwQzEwMDBBMDAwMDAwMENDODAwMDYyRDA0M0UwMDA3QzQwODAwMDU3Cis6MTAwQzIwMDBBMDAwMDAwMENDODAwMDYyRDA0M0YwMDA3QzQwODAwMDM3Cis6MTAwQzMwMDBBMDAwMDAwMENDODAwMDYyRDA0M0YzRkM3QzQwODAwMDI4Cis6MTAwQzQwMDBBMDAwMDAwMENDODAwMDYyQzgxNDAzRTBDQzQzMDAwMDg4Cis6MTAwQzUwMDBDQzQzMDAwMENDNDMwMDAwN0Q0NUMwMDBDREMzMDAwMDY0Cis6MTAwQzYwMDBEMDQzMDAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MkU3Cis6MTAwQzcwMDA3QzQwQzAwMEM4MTAwM0UyQzgxNDAzRTVDODE4MDNFM0IxCis6MTAwQzgwMDBDODFDMDNFNENEODEyMTY5Q0RDMTIxNkFDQ0MxMjE2QjhGCis6MTAwQzkwMDBDQzAxMjE2QzA0MjAwMDA0N0RBMTgwMDA3RDk2NDAwMkRGCis6MTAwQ0EwMDA5NjQwRkNEOUNEODAwM0UzMzEyODAwMDNDMDJERjAwMDJECis6MTAwQ0IwMDAyNTE4MDAwODdEQUQ4MDBCN0RBOTgwMEM4MDAwMDAwMTA3Cis6MTAwQ0MwMDBDRDgwMDNFMzMwOENGRkZGRDA0RDAwMDA3QzQwODAwMERFCis6MTAwQ0QwMDBBMDAwMDAwMENDODAwMDYyQzgxNDAwMjAxNTU4MDAwMjVCCis6MTAwQ0UwMDA5NTgwRkZGRkM4MTQwMDIwQ0MwMDAwNkVDQzQxMjE4MDBECis6MTAwQ0YwMDA3QzQwQzAwMENDQzEyMThEQ0M0MTIxODEyOEQwMDAxRjc3Cis6MTAwRDAwMDAzNDU4ODAwMENEODEyMThDOTUwMEZDQkZDQzQxMjE4MkRDCis6MTAwRDEwMDBDODE0MDAyMDk5NDBGRkZGQzgxNDAwMjA4MDAwMDAwMjgyCis6MTAwRDIwMDA3QzQwODAwMDdDNDBDMDAwMjhEMDAwMTgzMTEwMDAwMUI5Cis6MTAwRDMwMDBDMDE2MDA4MDk1MDAwMDAzQzAyQTAwMDQ3Q0Q0QzAwQ0JCCis6MTAwRDQwMDBDQ0MxMjE3Q0NDNDEyMTdEQ0M0MTIxN0U3QzQxODAwMEU1Cis6MTAwRDUwMDAxREIwMDAwMzM2QTAyMTdGOUIwMDAwMDM0MTlDMDAwNUNECis6MTAwRDYwMDAwNDFDMDA0MDk5QzAwMDAwMDlEQzAwMDFDQzIxMDAwMEY3Cis6MTAwRDcwMDBDODI0MDAwNDJBNkMwMDFGNDE5QzAwMDU5QUMwRkZGQTk5Cis6MTAwRDgwMDBDQzgwMDA2MjgwMDAwMDAyN0M0MDgwMDA3QzQwQzAwMDdCCis6MTAwRDkwMDAwNEQ0MDNFNjgwMDAwMDAxQ0M1NDAwMDA4MDAwMDM3Q0YyCis6MTAwREEwMDBDQzQwMDNFQUMwMUM4MDAwMDQ0Q0EwMDBDREMxMjAxMDQwCis6MTAwREIwMDA3QzQxMDAwMEM4MTQwMDA5MDQxODAwMDAwNDFDMDAwODRECis6MTAwREMwMDBDRDgwMDA3MTA5REMwMDAxMDU5ODAwMDFDRDBEMDAwMDA3Cis6MTAwREQwMDA5OUMwRkZGQ0NDODAwMDYyODAwMDAzN0NDRDQwMDA3MTk0Cis6MTAwREUwMDBDMDBFMDEwMENDMDAwMDQxQ0NDMTMwNEFDODNDMDA3RjlECis6MTAwREYwMDBDQzAwMDA3RjgwMDAwMDAxQ0MwMDAwN0ZDQzAwMDA3RjkxCis6MTAwRTAwMDA4ODAwMDAwMENDMDAwMDdGMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAwRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTAwRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAwRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTAwRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTAwRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTAwRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTAwRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTAwRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTAwRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAwRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTAwRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTAwRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAwRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTAwRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAwRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAwRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAwRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTAwRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTAwRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTAwRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTAwRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTAwRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAwRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTAwRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTAwRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAwRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTAwRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAwRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAwRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAxMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAxMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTAxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTAxMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAxMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTAxMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAxMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTAxMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTAxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTAxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAxMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAxMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTAxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAxMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTAxMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAxMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTAxMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTAxMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAxMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAxMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAxMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAxMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAxMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAxMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAxMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAxMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAxMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAxMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAxMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAxMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAxMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAxMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAxMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAxMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAxMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAxMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAxMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAxMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAxMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAxMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTAxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAxMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAxMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAxMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAxMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAxMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAxMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAxMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAxMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAxMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAxM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAxM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAxM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAxM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAxM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAxNDAwMDAwMDAxMDMzMTAwMTAwMDA0MDAxNzAwMDYwMDIxMDAwODRECis6MTAxNDEwMDAwMDI3MDAyODAwMjgwMDIzMDAyOTAwMjkwMDJBMDAyNjkwCis6MTAxNDIwMDAwMDJCMDAyOTAwMkQwMDM4MDAyRTAwM0YwMDJGMDA0QTFECis6MTAxNDMwMDAwMDM0MDA0QzAwMzYwMDMwMDAzOTAwQUYwMDNBMDBDRkQ1Cis6MTAxNDQwMDAwMDNCMDBFNDAwM0MwMEZDMDAzRDAxNkIwMDNGMDBBREIwCis6MTAxNDUwMDAwMDQxMDMzNjAwNDMwMzQ5MDA0NDAxOEUwMDQ1MDBGQzZGCis6MTAxNDYwMDAwMDQ2MDFBQzAwNDcwMUFDMDA0ODAxRkUwMDQ5MDIwQ0Y3Cis6MTAxNDcwMDAwMDRBMDI1NTAwNEIwMjgyMDA1MjAyNUYwMDUzMDI3MTgzCis6MTAxNDgwMDAwMDU0MDI4NzAwNTcwMjk5MDA2MDAyOUQwMDYxMDJBQzdGCis6MTAxNDkwMDAwMDYyMDJCNjAwNjMwMkMwMDA2NDAyQ0EwMDY1MDJENEEyCis6MTAxNEEwMDAwMDY2MDJERTAwNjcwMkU4MDA2ODAyRjIwMDY5MDJGNkU4Cis6MTAxNEIwMDAwMDZBMDJGQTAwNkIwMkZFMDA2QzAzMDIwMDZEMDMwNjc0Cis6MTAxNEMwMDAwMDZFMDMwQTAwNkYwMzBFMDA3MDAzMTIwMDcyMDM2M0M0Cis6MTAxNEQwMDAwMDc0MDM2OTAwNzkwMzY3MDA3QzAzMUMwMDBGMDM3ODI0Cis6MTAxNEUwMDAwMDBGMDM3ODAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3OEQ0Cis6MTAxNEYwMDAwMDBGMDM3ODAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3OEM0Cis6MTAxNTAwMDAwMDBGMDM3ODAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3OEIzCis6MTAxNTEwMDAwMDBGMDM3ODAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3OEEzCis6MTAxNTIwMDAwMDBGMDM3ODAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODkzCis6MTAxNTMwMDAwMDBGMDM3ODAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODgzCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNzMwX3BmcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjczMF9wZnAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4MTFmZgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjczMF9wZnAuYmluLmloZXgKQEAgLTAsMCArMSwyMTMgQEAKKzoxMDAwMDAwMDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjgwMDAwMDAwMDkKKzoxMDAwMTAwMERDMDMwMDAwQ0M4MDAwNDBEMDQwMDA0MDdDNDA4MDAwRTkKKzoxMDAwMjAwMEEwMDAwMDAwN0U4MjgwMEJDODE4MDAwRTMxOTgwMDAxRUQKKzoxMDAwMzAwMDdDNDI0MDAwOTU4MDAyM0E3QzQyODAwMEM4MUMwMDFDMzMKKzoxMDAwNDAwMEMwMzdDMDAwN0M0MEMwMDA3QzQxMDAwMDdDQjQ4MDBCMDUKKzoxMDAwNTAwMEMwMzYwMDAzOTlDMDAwMDBDODFDMDAxQzdDQjQ4MDBDOTIKKzoxMDAwNjAwMDI0RDQwMDAyN0Q2NTQwMDBDRDQwMDA0M0NFODAwMDQzOTMKKzoxMDAwNzAwMENEMDAwMDQzQ0M4MDAwNDBDRTQwMDA0MENFODAwMDQwMDgKKzoxMDAwODAwMENDQzAwMDQwREMzQTAwMDA5NzgwRkZERUNEMDAwMDQwOEQKKzoxMDAwOTAwMDdDNDBDMDAwODAwMDAwMTg3QzQxMDAwMEQ0MDAwMzQwNzgKKzoxMDAwQTAwMEQ0MDAwRkMwRDQwMDBGQTJDODE4MDAwRTgwMDAwMDBDQUUKKzoxMDAwQjAwMDMxOTgwMDAyRDQwMDAzQzBENDAwMEZDMEQ0MDAwRkEyQjYKKzoxMDAwQzAwMEM4MTgwMDBFMjg4QzAwMDgzMENDMDAwRjM0MTAwMDAxMzYKKzoxMDAwRDAwMDdEMEQwMDA4ODAwMDAwMEM3RDkxODAwQkNDODAwMDQwREQKKzoxMDAwRTAwMEQwNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCNTkKKzoxMDAwRjAwMEQ0MDAwMzQwRDQwMDBGQzBENDAwMEZBMkNDODAwMDQwMzUKKzoxMDAxMDAwMEQwNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCMzgKKzoxMDAxMTAwMEQ0MDAwM0MwRDQwMDBGQzBENDAwMEZBMkNDODAwMDQwOTQKKzoxMDAxMjAwMEQwNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCMTgKKzoxMDAxMzAwMENDNDAwM0Y5ODAwMDAyNDlDQzQwMDNGOEMwMzdGRkZGRjAKKzoxMDAxNDAwMDdDNDE0MDAwQ0Y0MUEyOUVDODIwMDNGOEM4MUMwM0Y5OUYKKzoxMDAxNTAwMDY2MjAwMDIwQzgxODAzRkI3REUxQzAyQzdENThDMDA4MzQKKzoxMDAxNjAwMDdDRENDMDIwNjkxMDAwMjBDMDM2MDAwM0NDMDAwMDU0QTUKKzoxMDAxNzAwMDdDQjQ4MDBDODAwMDAwNjlDQzgwMDA0MDdDNDE4MDAwMTEKKzoxMDAxODAwMENEODFBMjlFQ0M4MDAwNDA4MDAwMDA2N0NEODAwMDQwRTEKKzoxMDAxOTAwMEMwMTlGRkZGQ0M4MDAwNDBDRDgxQTI5RTdDNDBDMDAwRjIKKzoxMDAxQTAwMDdDNDEwMDAwN0M0MTQwMDBDQ0MxQTFGQUNEMDFBMUY5MDUKKzoxMDAxQjAwMENENDFBMjlEQ0NDMDAwNDBDRDAwMDA0MENENDAwMDQwQ0MKKzoxMDAxQzAwMENDNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCN0MKKzoxMDAxRDAwMENDMDAwMDU0Q0M4MDAwNDA3QzQwQzAwMDdDNDEwMDAwM0EKKzoxMDAxRTAwMDdDNDE0MDAwQ0NDMUExRkFDRDAxQTFGOUNENDFBMjlEMzUKKzoxMDAxRjAwMENDQzAwMDQwQ0QwMDAwNDBDRDQwMDA0MEQwNDAwMDQwODkKKzoxMDAyMDAwMDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjdDNDBDMDAwMEIKKzoxMDAyMTAwMDMwRDAwMDAxQ0NDMUEyOUY5NTAwMDAwMzA0MTQwMDAxNUUKKzoxMDAyMjAwMDA0MTQwMDAyQ0Q0MDAzRkJDQzgwMDA0MDgwMDAwMDAwOUQKKzoxMDAyMzAwMENDQzAwMDQwN0M0MEMwMDBDQzgwMDA0MENDQzFBMkEyMTkKKzoxMDAyNDAwMDgwMDAwMDAwQ0NDMDAwNDA3QzQwQzAwMDI4RDQwMDFGQ0IKKzoxMDAyNTAwMENDODAwMDQwOTU0MDAwMDM3QzQxMDAwMENDQzAwMDU3OUEKKzoxMDAyNjAwMDI5MTgwMDFGQ0NDMDAwNDA5NTgwMDAwM0NEMDAwMDQwM0QKKzoxMDAyNzAwMENEMDAwMDU4ODAwMDAyNDlDQzAwMDA3RkM4MjAwMDE3NDQKKzoxMDAyODAwMEM4MzAwMDIyOUEwMDAwMDYwRTI4MDAwMUM4MjQwMDFFNzMKKzoxMDAyOTAwMDBBNjQwMDAxRDQwMDEyNDBDRTQwMDA0MEMwMzZDMDAwQzUKKzoxMDAyQTAwMDk2ODAwMDA3Mzc3NDc5MDAwNDFDMDAwMUNGNDAwMDQwOUQKKzoxMDAyQjAwMENEQzAwMDQwQ0YwMDAzRkE3QzAzMDAwMENBMEMwMDEwNDAKKzoxMDAyQzAwMDdDNDEwMDAwOTRDMDAwMDQ3QzQxNDAwMEQ0MjAwMkM0NjIKKzoxMDAyRDAwMENERTAwMDQ0OUIwMDAwMEI3QzQxODAwMENDMDAwMDRCMzMKKzoxMDAyRTAwMENEQTAwMDQ5Q0QyMDAwNDFDRDYwMDA0MUNEQTAwMDQxMEUKKzoxMDAyRjAwMDA2MjAwMDAxQ0UwMDAwNTY4MDAwMDI0OUNDMDAwMDdGOUQKKzoxMDAzMDAwMEM4MjgwMDIwQzgyQzAwMjFDQzAwMDA2MzdFRUE0MDAxRjAKKzoxMDAzMTAwMDY1NzQwMDIwN0Y1MzQwMkMyNjlDMDAwMjdERjVDMDIwOTAKKzoxMDAzMjAwMDY5RjgwMDIwQ0U4MDAwNEJDRTYwMDA0OUNERTAwMDQxNEUKKzoxMDAzMzAwMENGQTAwMDQxQ0U2MDAwNDEyNzFDMDAwMjdERjVDMDIwMDcKKzoxMDAzNDAwMDY5RjgwMDIwN0RCMjQwMDFDRjAwMDA0QkNFNjAwMDQ5MkIKKzoxMDAzNTAwMENERTAwMDQxQ0ZBMDAwNDE4MDAwMDBCQ0NFNjAwMDQxNTQKKzoxMDAzNjAwMEM4MjAwMDE3QzgzMDAwMjI5QTAwMDAwNjBFMjgwMDAxOUQKKzoxMDAzNzAwMEM4MjQwMDFFMEE2NDAwMDFENDAwMTI0MENFNDAwMDQwOTAKKzoxMDAzODAwMENBMEMwMDEwN0M0MTAwMDA5NEMwMDAwQkMwMzZDMDAwQjUKKzoxMDAzOTAwMDk2ODAwMDA3Mzc3NDc5MDAwNDFDMDAwMUNGNDAwMDQwQUMKKzoxMDAzQTAwMENEQzAwMDQwQ0YwMDAzRkE3QzAzMDAwMDgwMDAwMEI1MDAKKzoxMDAzQjAwMDdDNDE0MDAwQ0MwMDAwNDg4MDAwMDBFRTAwMDAwMDAwQkUKKzoxMDAzQzAwMEM4MjAwMDE3QzgxQzAwMjMwRTI0MDAwMjk5QzAwMDE1ODUKKzoxMDAzRDAwMDdDNDE4MDAwMEEyMDAwMDFDRTAwMDA1NkQ0MDAwNDQwNzkKKzoxMDAzRTAwMENDMDAwMDQwQzAzNkMwMDBDQTE0MDAxMzk2NDAwMDA3N0QKKzoxMDAzRjAwMDM3NzQ3OTAwQ0Y0MDAwNDBDQzAwMDA0MEM4MzAwM0ZBODkKKzoxMDA0MDAwMDgwMDAwMTAzQ0YwMDAwMjJDQzAwMDAyMjk1NDAwMTQ2NkQKKzoxMDA0MTAwMENDMDAwMDdGQ0NBMDAwNDY4MDAwMDAwMENDMjAwMDQ2MkQKKzoxMDA0MjAwMDgwMDAwMjQ5Q0MwMDAwNjRDODIwMDAxN0M4MTAwMDFGREIKKzoxMDA0MzAwMDk2MDAwMDA1MDkxMDAwMDFENDAwMDQ0MENEMDAwMDQwRTIKKzoxMDA0NDAwMENEMDAwMDIyQ0M4MDAwNDBEMDQwMDA0MEM4MEMwMDI1RTgKKzoxMDA0NTAwMDk0QzBGRUVDQzgxMDAwMDhDRDAwMDA0MEQ0MDAwRkMwQ0UKKzoxMDA0NjAwMDgwMDAwMDAwRDQwMDBGQTI3QzQwQzAwMDdDNDEwMDAwNEUKKzoxMDA0NzAwMENDQzAwM0ZEQ0QwMDAzRkNDQ0MwMDA0MkNEMDAwMDQyNDcKKzoxMDA0ODAwMDI5MTQwMDFGMjkxODAwMTAzMTk4MDAwNzNCNUMwMDAxNTcKKzoxMDA0OTAwMDdENzYwMDBCOTk4MDAwMDU3RDVFNDAwQkNDMDAwMDQyMEMKKzoxMDA0QTAwMDgwMDAwMjQ5Q0MwMDAwNEQyOTk4MDAwMTI5MkMwMDA4NDkKKzoxMDA0QjAwMDk5ODAwMDNEMzJFQzAwMDE5NjAwMDAwNDI5MzAwMDBDQzgKKzoxMDA0QzAwMDgwMDAwMjQ5Q0MwMDAwNDIwNDE0MDAxMENENDAwMDQyREMKKzoxMDA0RDAwMDMzMzAwMDAxMzQyODAwMDE4NDAwMDE1REM4MTQwMDAzOUEKKzoxMDA0RTAwMDlCNDAwMDFCMDQzODAwMEM4NDAwMDE1REM4MTQwMDAzMEQKKzoxMDA0RjAwMDlCNDAwMDE3MDQzODAwMDg4NDAwMDE1REM4MTQwMDAzMDUKKzoxMDA1MDAwMDlCNDAwMDEzMDQzODAwMDQ4NDAwMDE1REM4MTQwMDAzRkMKKzoxMDA1MTAwMDlCNDAwMDE1QzgwQzAzRkQ5QTgwMDAwOUM4MTAwM0ZDMUQKKzoxMDA1MjAwMDlCMDAwMTAxQ0MwMDAwNEQwNDE0MDAxMENDQzAwMDQyMUYKKzoxMDA1MzAwMENEMDAwMDQyODAwMDAxMzVDRDQwMDA0Mjk2QzAwMEZBNTcKKzoxMDA1NDAwMENDMDAwMDREODAwMDAyNDlDQzAwMDA0RTlBQzAwMDAzNTAKKzoxMDA1NTAwMENDMDAwMDREQ0MwMDAwNEVERjgzMDAwMDgwMDAwMDAwODYKKzoxMDA1NjAwMEQ4MDMwMUZGOUFDMDAwRjBDQzAwMDA0RDgwMDAwMjQ5ODIKKzoxMDA1NzAwMENDMDAwMDRFQzgxODAwMDNDODFDMDAwM0M4MjAwMDAzQUMKKzoxMDA1ODAwMDdENUQ0MDAzN0RBMUMwMDM3RDVENDAwQzJBMTAwMDFGRUUKKzoxMDA1OTAwMDI5OUMwMDFGN0QxRDAwMEI3RDE3NDAwQjg4MDAwMDAwNkIKKzoxMDA1QTAwMDdFOTI4MDBCOTY0MDAwMDRDQzAwMDA0RTgwMDAwMjQ5RjEKKzoxMDA1QjAwMENDMDAwMDQyMDQzODAwMDhDRjgwMDA0MkM4MDgwMDAzODUKKzoxMDA1QzAwMEM4MEMwMDAzQzgxMDAwMDNDODE0MDAwM0M4MTgwMDAzQjcKKzoxMDA1RDAwMEM4MUMwMDAzQzgyNDAwMDNDODI4MDAwMzI5RkMwMDFGMEUKKzoxMDA1RTAwMDJBQjAwMDFGN0ZGM0MwMEIyOEYwMDAxRjdGRjNDMDBCNjEKKzoxMDA1RjAwMDI5NzAwMDFGN0ZGM0MwMEI3RDg4ODAwMTdEQ0NDMDAxNzYKKzoxMDA2MDAwMDdFNTEwMDAxN0U5NTQwMDE3QzkwODAwMjdDRDRDMDAyMjYKKzoxMDA2MTAwMDdDQkM4MDBCOUFDMDAwMDM3QzhGNDAwQjM4QjQwMDAxNzcKKzoxMDA2MjAwMDlCNDAwMEMxQ0MwMDAwNEQ5QkMwMDBCRkNDMDAwMDRFRTEKKzoxMDA2MzAwMEM4MEMwM0ZEQzgxMDAzRkNDQ0MwMDA0MjgwMDAwMTZFNTIKKzoxMDA2NDAwMENEMDAwMDQyRDQwMDAzNDBENDAwMEZDMEQ0MDAwRkEyNUMKKzoxMDA2NTAwMENDODAwMDQwQ0M0MDAwNDBDQzQwMDA0MENDNDAwMDQwMkEKKzoxMDA2NjAwMDdDNDBDMDAwQ0NDMDAwNDBDQ0MwMDAwRDgwMDAwMDAwMjkKKzoxMDA2NzAwMEQwNDAwMDQwN0M0MEMwMDA3QzQxMDAwMDY1MTQwMDIwNTgKKzoxMDA2ODAwMDdENEQ0MDJDMjQ1ODAwMDI3RDU5ODAyMDdDNDFDMDAwQzMKKzoxMDA2OTAwMENEODAwMDQyNjk5ODAwMjBDRDgwMDA0MkNEQzAwMDQyNEMKKzoxMDA2QTAwMEMwMjNDMDAwMDVFNDAwMDI3Q0EwODAwQjI2NjQwMDEwN0IKKzoxMDA2QjAwMDdDQTQ4MDBDQ0M4MDAwNDBDREMwMDA0MENDQzAwMDQwNjkKKzoxMDA2QzAwMDk1QzAwMDBFQ0QwMDAwNDAwOURDMDAwMUM4MjgwMDAzRTEKKzoxMDA2RDAwMDk2ODAwMDA4Q0U4MDAwNDBDODM0MDAxRDk3NDAwMDAwN0UKKzoxMDA2RTAwMEM4MzQwMDFEMjZBODAwMDg4NDAwMDI0Q0NDMkIwMDAwNTIKKzoxMDA2RjAwMDk5QzBGRkY3MDlEQzAwMDFEQzNBMDAwMDk3ODAwMDA0OTQKKzoxMDA3MDAwMDdDNDE4MDAwODAwMDAxQTIyNTk4MDAwMkEwMDAwMDAwMkEKKzoxMDA3MTAwMDdEODA4MDAwQzgxODAwMUQ3QzQwQzAwMDY0RDAwMDA4QTcKKzoxMDA3MjAwMDk1ODAwMDAwQzgxODAwMURDQzEzMDAwMENDODAwMDQwNEMKKzoxMDA3MzAwMENDQzAwMDQwODAwMDAwMDBDQzQwMDA0MEM4MTAwMDFGMkEKKzoxMDA3NDAwMDdDNDBDMDAwQ0M4MDAwNDA3Q0QxNDAwQ0NENDAwMDQwQkIKKzoxMDA3NTAwMDA1MTgwMDAxODAwMDAwMDBDRDgwMDAyMjdDNDBDMDAwMTAKKzoxMDA3NjAwMDY0NTAwMDIwODQwMDAyNENDQzAwMDA2MTdDRDBDMDJDN0UKKzoxMDA3NzAwMEM4MjAwMDE3QzhENjAwMDA5OTQwMDAwODdDNDM4MDAwQkMKKzoxMDA3ODAwMERGODMwMDAwQ0ZBMDAwNEY4NDAwMDI0Q0NDMDAwMDYyNDkKKzoxMDA3OTAwMDgwMDAwMDAwRDA0MDAwN0Y4MDAwMDI0OUNDMDAwMDYyNTEKKzoxMDA3QTAwMDg0MDAwMjRDQ0MwMDAwNjFDODIwMDAxNzdDNDBDMDAwQ0YKKzoxMDA3QjAwMEMwMzZGRjAwQzgxMDAwMERDMDMwM0ZGRjdDRjU0MDBCNzUKKzoxMDA3QzAwMDdENTE4MDBCN0Q4MTgwMEY5OTgwMDAwODdDRjM4MDBCMjgKKzoxMDA3RDAwMERGODMwMDAwQ0ZBMDAwNEY4NDAwMDI0Q0NDMDAwMDYyRjkKKzoxMDA3RTAwMDgwMDAwMDAwRDA0MDAwN0Y4MDAwMDI0OUNDMDAwMDYyMDEKKzoxMDA3RjAwMDg0MDAwMjRDN0M0MEMwMDAyOERDMDAwODk1QzAwMDE5MzEKKzoxMDA4MDAwMDMwREMwMDEwN0M0MTAwMDA5OUMwMDAwNDY0NTQwMDIwREEKKzoxMDA4MTAwMDgwMDAwMjA4QzkxRDAwMDA3RDE1MDAyQ0M5MUUwMDAwQzMKKzoxMDA4MjAwMDdDNDIwMDAwN0M0MjQwMDA3QzQxODAwMDdERTVDMDBCQTIKKzoxMDA4MzAwMDdERTI4MDA3OUE4MDAwMEU0MUFDMDAwNTlBQzAwMDAwNUUKKzoxMDA4NDAwMDBBRUMwMDAxMzBEQzAwMTA5OUMwMDAwNDAwMDAwMDAwMzgKKzoxMDA4NTAwMDgwMDAwMjBCQzkxRDAwMDA4MDAwMDIwQkM5MUUwMDAwQjEKKzoxMDA4NjAwMENDODAwMDQwQ0NDMDAwNDBEMDQwMDA0MEM4MEMwMDI1RTcKKzoxMDA4NzAwMDk0QzBGREU0QzgxMDAwMDhDRDAwMDA0MEQ0MDAwRkMwQjMKKzoxMDA4ODAwMDgwMDAwMDAwRDQwMDBGQTJENDAwMDM0MEQ0MDAwRkMwQTkKKzoxMDA4OTAwMEQ0MDAwRkEyQ0M4MDAwNDBEMDQwMDA0MDdDNDA4MDAwQkIKKzoxMDA4QTAwMEEwMDAwMDAwN0U4MjgwMEJENDAwMDNDMEQ0MDAwRkMwRTMKKzoxMDA4QjAwMEQ0MDAwRkEyQ0M4MDAwNDBEMDQwMDA0MDdDNDA4MDAwOUIKKzoxMDA4QzAwMEEwMDAwMDAwN0U4MjgwMEI3QzQwQzAwMDMwRDAwMDA2N0IKKzoxMDA4RDAwMDBEMTAwMDA2OTkwMDAwMDdDODE0MDAxNTk5NDAwMDA1ODYKKzoxMDA4RTAwMENDMDAwMDUyRDQwMDAzNDBENDAwMEZDMEQ0MDAwRkEyQUIKKzoxMDA4RjAwMENDODAwMDQwQ0NDMDAwNDA4MDAwMDAwMEQwNDAwMDQwRDAKKzoxMDA5MDAwMDdDNDBDMDAwQ0M0RDAwMDBEQzNBMDAwMDk3ODBGREJENkIKKzoxMDA5MTAwMDA0Q0MwMDAxODAwMDAyNDJDQzREMDAwMDgwMDAwMDAwQTkKKzoxMDA5MjAwMEQwNDAwMDdGQ0MwMDAwN0Y4MDAwMDAwMENDMDAwMDdGMjIKKzoxMDA5MzAwMENDMDAwMDdGODgwMDAwMDBDQzAwMDA3RjAwMDAwMDAwOTkKKzoxMDA5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDA5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDA5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDA5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDA5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMDA5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDA5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMDA5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDA5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDA5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDA5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDA5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDBBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMDBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMDBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDBDMDAwMDAwMDMwMjIyMDAwNDAyMkEwMDA1MDA5RjAwMDIwMDAzRTQKKzoxMDBDMTAwMDAwMDYwMDNDMDAwNzAwMjcwMDA4MDE5MTAwMDkwMDQ0N0QKKzoxMDBDMjAwMDAwMEEwMDJEMDAxMDAyNDcwMDE3MDBGMDAwMjIwMUQ3MzMKKzoxMDBDMzAwMDAwMjMwMUU4MDAyNjAwNEMwMDI3MDA1RjAwMjAwMTFBNzUKKzoxMDBDNDAwMDAwMjgwMDkyMDAyOTAwNEYwMDJBMDA4MzAwMkIwMDY0MzYKKzoxMDBDNTAwMDAwMkYwMDhEMDAzMjAwRDgwMDM0MDIzMjAwMzYwMDc0QkMKKzoxMDBDNjAwMDAwMzkwMTBBMDAzQzAxRkMwMDNGMDA5RjAwNDEwMDA1RTMKKzoxMDBDNzAwMDAwNDQwMTk0MDA0ODAxOUQwMDQ5MDFDNTAwNEEwMUNGOEMKKzoxMDBDODAwMDAwNTUwMjI1MDA1NjAyMkQwMDYwMDAwQTAwNjEwMDJBNkUKKzoxMDBDOTAwMDAwNjIwMDMwMDA2MzAwMzAwMDY0MDAzMDAwNjUwMDMwMDYKKzoxMDBDQTAwMDAwNjYwMDMwMDA2NzAwMzAwMDY4MDAzNzAwNjkwMDNGRDAKKzoxMDBDQjAwMDAwNkEwMDQ3MDA2QjAwNDcwMDZDMDA0NzAwNkQwMDQ3NkEKKzoxMDBDQzAwMDAwNkUwMDQ3MDA2RjAwNDcwMDcwMDA0NzAwNzMwMjQ3NDYKKzoxMDBDRDAwMDAwN0IwMjQwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1NDgKKzoxMDBDRTAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1RjAKKzoxMDBDRjAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1RTAKKzoxMDBEMDAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1Q0YKKzoxMDBEMTAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1QkYKKzoxMDBEMjAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1QUYKKzoxMDBEMzAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1OUYKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY3NzBfbWUuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY3NzBfbWUuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlMTY5OQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjc3MF9tZS5iaW4uaWhleApAQCAtMCwwICsxLDM0MSBAQAorOjEwMDAwMDAwQ0MwMDAzRUE3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjJBRAorOjEwMDAxMDAwODAwMDAwMDFEMDQwMDA3RjgwMDAwMDAxQ0M0MDAwNDEwMgorOjEwMDAyMDAwN0M0MEMwMDBDMDE2MDAwNDMwRDAzRkZGN0QxNTAwMEM5RQorOjEwMDAzMDAwQ0MxMTAwMDAyOEQ4MDAxRTMxOTgwMDAxMjhEQzAwMUZEOAorOjEwMDA0MDAwQzgyMDAwMDQ5NUMwMDAwNjdDNDI0MDAwQ0MwMDAwNjIzRAorOjEwMDA1MDAwN0U1NjgwMENDQzI5MDAwMEM4MjQwMDA0N0UyNjAwMEJBQworOjEwMDA2MDAwOTU4MDAwMDY3QzQyQzAwMENDMDAwMDYyN0VENzAwMEM2OAorOjEwMDA3MDAwQ0MzMTAwMDBDODJDMDAwNDdFMkUwMDBDQ0MwMDAwNjJBNQorOjEwMDA4MDAwMzExMDNGRkY4MDAwMDAwMUNFMTEwMDAwN0M0MEMwMDAxNQorOjEwMDA5MDAwODAwMDAwMDFDQzQwMDA0MDgwMDAwMDAxQ0M0MTIyNTc4QworOjEwMDBBMDAwN0M0MTgwMDBDQzQwMDA0NUNDNDAwMDQ4Q0M0MTIyNUNFMworOjEwMDBCMDAwQ0M0MUExRkM3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIwQworOjEwMDBDMDAwQ0M0MDAwNDVDQzQwMDA0ODdDNDBDMDAwQ0M0MTIyNUM4NAorOjEwMDBEMDAwQ0M0MUExRkM3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjJFQworOjEwMDBFMDAwQ0MwMDAwNDVDQzAwMDA0OENDNDEyMjVDQ0M0MUExRkNCNgorOjEwMDBGMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyMDQwQ0ExRkRDOAorOjEwMDEwMDAwQzAxMjAwMDFDQzAwMDA0NUNDMDAwMDQ4N0NEMEMwMENERgorOjEwMDExMDAwQ0M0MTIyNUNDQzQxQTFGQ0QwNEQwMDAwN0M0MDgwMDA1MQorOjEwMDEyMDAwQTAwMDAwMDBDQzgwMDA2MjgwMDAwMDAxQ0M0MTIyNUQ3NAorOjEwMDEzMDAwN0M0MDgwMDA3QzQwQzAwMEMwMkEwMDAyN0M0MTAwMDA1RQorOjEwMDE0MDAwN0QyOTAwMEMzMDk0MDAwMTMwOTgwMDA2MzA5QzAzMDA5QgorOjEwMDE1MDAwMjlEQzAwMDg3QzQyMDAwMDdDNDI0MDAwOTU0MDAwMEZGMgorOjEwMDE2MDAwQzAyRTAwMDQwNUYwMjI1ODdGMkYwMDBDQ0MzMTAwMDA3NworOjEwMDE3MDAwQzgyODAwMDRDQ0MxMjE2OUNEMDEyMTZBQ0U4MTIxNkI0MAorOjEwMDE4MDAwMERCNDAwMDJDQzAxMjE2Qzk3NDAwMDBFMERCNDAwMDBBQworOjEwMDE5MDAwODAwMDAwN0JDODM0MDAwQTBEQjQwMDAyOTc0MDAwMDlCQgorOjEwMDFBMDAwMERCNDAwMDBDMDJFMDAwNDA1RjAyMjU4N0YyRjAwMEM3MworOjEwMDFCMDAwQ0MzMTAwMDBDODI4MDAwNDgwMDAwMDdCQzgzNDAwMEE0RAorOjEwMDFDMDAwOTc0MDAwMDQ3RTAyODAwMDgwMDAwMDdCQzgzNDAwMEE1MworOjEwMDFEMDAwMERCNDAwMDQ5NzQwRkY4QzAwMDAwMDAwQ0UwMTIxNkQ5QgorOjEwMDFFMDAwQ0U0MTIxNkVDODI4MDAwM0M4MzQwMDBBOUI0MDAwMDQ5OQorOjEwMDFGMDAwMDQzQzAwMDU4NDAwMDI2RENDMDAwMDYyMERGNDAwMDA5OAorOjEwMDIwMDAwOTc0MDAwMEJDODJDMDNFNkNFODFBMkI3QzAzMDAwMDY5MQorOjEwMDIxMDAwN0VGMzQwMjhDMDMwMDAyMDdGNkI4MDIwN0ZCM0MwMjk1MAorOjEwMDIyMDAwQ0Y4MUEyQzQ4MDAwMDAwMUNGQzFBMkQxMERGNDAwMDE5MgorOjEwMDIzMDAwOTc0MDAwMEJDODJDMDNFN0NFODFBMkJCQzAzMDAwMDY1QworOjEwMDI0MDAwN0VGMzQwMjhDMDMwMDAyMDdGNkI4MDIwN0ZCM0MwMjkyMAorOjEwMDI1MDAwQ0Y4MUEyQzU4MDAwMDAwMUNGQzFBMkQyMERGNDAwMDI1RgorOjEwMDI2MDAwOTc0MDAwMEJDODJDMDNFOENFODFBMkJGQzAzMDAwMDYyNworOjEwMDI3MDAwN0VGMzQwMjhDMDMwMDAyMDdGNkI4MDIwN0ZCM0MwMjlGMAorOjEwMDI4MDAwQ0Y4MUEyQzY4MDAwMDAwMUNGQzFBMkQzQzgyQzAzRTk1MAorOjEwMDI5MDAwQ0U4MUEyQzNDMDMwMDAwNjdFRjM0MDI4QzAzMDAwMjBDQgorOjEwMDJBMDAwN0Y2QjgwMjA3RkIzQzAyOUNGODFBMkM3ODAwMDAwMDE2RgorOjEwMDJCMDAwQ0ZDMUEyRDQ4MDAwMDAwMUNDNDAwMDQyN0M0MEMwMDBFRAorOjEwMDJDMDAwN0M0MTAwMDAyOTE0MDAxRDMxNTQwMDAxOTk0MDAwMERBQgorOjEwMDJEMDAwMzExODEwMDBDODFDMDAxMTA5REMwMDAxOTVDMEZGRkY5NworOjEwMDJFMDAwQzgxQzAwMTFDQ0MxMjEwMENEMDEyMTAxQ0NDMTIxMDJDQgorOjEwMDJGMDAwQ0QwMTIxMDMwNDE4MDAwNDgwMDAwMzlGQ0Q4MUEyQTQzNgorOjEwMDMwMDAwQzAyQTAwMDQ5NTgwMDAwODM2QTgyMUEzQ0MyOTAwMDA0QgorOjEwMDMxMDAwQzgyODAwMDRDODFDMDAxMTBERTQwMDQwOTY0MEZGRkZFRgorOjEwMDMyMDAwQzgxQzAwMTFDQ0MxMjE3MENEMDEyMTcxQzgyMDAwMTI2MAorOjEwMDMzMDAwOTYwMDAwMDBDODIwMDAxMjgwMDAwMzlGQ0MwMDAwNjREQgorOjEwMDM0MDAwN0M0MEMwMDA3QzQxMDAwMENDMDAwMDQ1Q0MwMDAwNDg0RgorOjEwMDM1MDAwNDBENDAwMDNDRDQxMjI1Q0NEMDFBMUZDQzAxQTAwMDFCNAorOjEwMDM2MDAwMDQxQ0ExRkQ3REQ5QzAwQzdDNDIwMDAwMDhDQzAwMDExQQorOjEwMDM3MDAwMDYyNDAwMDEwNjI4MDAwMkNFMUQwMDAwQ0U1RDAwMDAwQworOjEwMDM4MDAwOThDMEZGRkFDRTlEMDAwMDdDNDA4MDAwQTAwMDAwMDBENQorOjEwMDM5MDAwQ0M4MDAwNjI3QzQwQzAwMDMwRDAwMDAxMjhDQzAwMDEzRAorOjEwMDNBMDAwN0M0MTQwMDA5NTAwMDAwNjdDNDE4MDAwQ0Q0MTIxNkREQworOjEwMDNCMDAwQ0Q4MTIxNkU4MDAwMDBGM0M4MUMwMDAzQzAyMjAwMDQyMAorOjEwMDNDMDAwN0UxNjAwMENDQzIxMDAwMEM4MUMwMDA0N0M0MjQwMDBCQQorOjEwMDNEMDAwOThDMDAwMDQ3QzQyODAwMDgwMDAwMDAxQ0RFNTAwMDA1MAorOjEwMDNFMDAwQ0U0MTIxNjlDRTgxMjE2QUNEQzEyMTZCODAwMDAwMDFGRgorOjEwMDNGMDAwQ0MwMTIxNkM3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA2RAorOjEwMDQwMDAwN0M0MTgwMDA3QzQxQzAwMDI4QTQwMDA4MzI2NDAwRkZDOQorOjEwMDQxMDAwMEU2ODAwM0M5NjgwMDAwQTdDMDIwMDAwN0M0MjAwMDBDRQorOjEwMDQyMDAwMUUzMDAwMDNDQzAwMDA2QTlCMDAwMDAzNDIyMDAwMDU0MAorOjEwMDQzMDAwMDQyMDAwNDA4MDAwMDExMDdDMDI0MDAwN0UwMjQwMDA0OQorOjEwMDQ0MDAwOUE0MDAwMDAwQTY0MDAwMTMwRUMwMDEwOUFDMDAwMEFEMworOjEwMDQ1MDAwQ0MwMDAwNjJDMDJBMDAwNEM4MkMwMDIxN0U5MjgwMENDRgorOjEwMDQ2MDAwQ0MwMDAwNDFDQzI5MDAwMENFQzAwMDIxODAwMDAxMjAzQQorOjEwMDQ3MDAwQzgzMDAwMDRDRDAxMjE2RENENDEyMTZFQzgzMDAwMDM4QworOjEwMDQ4MDAwN0YxRjAwMEIzMEY0MDAwNzI3NzgwMDAxOTc0MDAwMkFGNworOjEwMDQ5MDAwMDdCODAxMjU5RjgwMDAwMDAwMDAwMDAwODAwMDAxMzVBMgorOjEwMDRBMDAwN0YxQjgwMDQ4MDAwMDEzOTdGMUI4MDA1ODAwMDAxM0Q5NworOjEwMDRCMDAwN0YxQjgwMDI4MDAwMDE0MTdGMUI4MDAzODAwMDAxNDU3QgorOjEwMDRDMDAwN0YxQjgwMDc4MDAwMDE0OTdGMUI4MDA2ODAwMDAxNEU1MgorOjEwMDREMDAwMjhBNDAwMDg5QjgwMDAxOTI4QTQwMDA4ODAwMDAxNUU2MQorOjEwMDRFMDAwMzI2NDAwRkY5QjgwMDAxNTI4QTQwMDA4ODAwMDAxNUU5NAorOjEwMDRGMDAwMzI2NDAwRkY5QjgwMDAxMTI4QTQwMDA4ODAwMDAxNUU4OAorOjEwMDUwMDAwMzI2NDAwRkY5QjgwMDAwRDI4QTQwMDA4ODAwMDAxNUU3QgorOjEwMDUxMDAwMzI2NDAwRkY5QjgwMDAwOTI4QTQwMDA4ODAwMDAxNUU2RgorOjEwMDUyMDAwMzI2NDAwRkY5QjgwMDAwNTI4QTQwMDA4ODAwMDAxNUU2MworOjEwMDUzMDAwMzI2NDAwRkYyOEE0MDAwODMyNjQwMEZGMEU2ODAwM0MwQgorOjEwMDU0MDAwOUE4MEZFQjEyOEVDMDAwODdDNDM0MDAwN0M0MzgwMDA4OAorOjEwMDU1MDAwN0M0M0MwMDA5NkMwMDAwN0NDMDAwMDYyQ0Y0MTIxNjlGNworOjEwMDU2MDAwQ0Y4MTIxNkFDRkMxMjE2QjgwMDAwMDAxQ0MwMTIxNkNCOQorOjEwMDU3MDAwODAwMDAwMDFDRkY1MDAwMENDMDAwMDZCODQwMDAzQTJENgorOjEwMDU4MDAwMEU2ODAwM0M5QTgwMDAwNEM4MjgwMDE1ODAwMDAwMDExNQorOjEwMDU5MDAwRDA0MDAwN0Y5NjgwRkZBQjdFMDI0MDAwODQwMDAyM0I4QgorOjEwMDVBMDAwQzAwRTAwMDJDQzAwMDA0MTgwMDAwMjM5Q0NDMTMwNEFBQworOjEwMDVCMDAwN0M0MEMwMDA3QzQxMDAwMEMwMUUwMDAxMjkyNDAwMTJDNAorOjEwMDVDMDAwQzAyMjAwMDI5NjQwMDAwNUMwMjYwMDA0QzAyN0ZGRkJBMQorOjEwMDVEMDAwN0QyNTAwMEJDMDI2MDAwMDdERDI4MDBCN0UxMkMwMEI1MworOjEwMDVFMDAwN0QyNTAwMEM3QzQxNDAwMDdDNDE4MDAwQ0NDMTIxNjkwQworOjEwMDVGMDAwOUE4MDAwMEFDRDAxMjE2QUNENDEyMTZCOTZDMEZFODIwRQorOjEwMDYwMDAwQ0Q4MTIxNkNDODMwMDAxODk3MDAwMDAwQzgzMDAwMTg1OAorOjEwMDYxMDAwODAwMDAwMDFDQzAwMDAxODg0MDAwM0EyQ0MwMDAwN0YwMQorOjEwMDYyMDAwQzgxNDAwMTNDODE4MDAxNENENDEyMTZCOTZDMEZFNzY4MworOjEwMDYzMDAwQ0Q4MTIxNkM4MDAwMDE4MkM4MzAwMDE4QzgwQzAwMDhGMAorOjEwMDY0MDAwOThDMDAwMDBDODBDMDAwODdDNDEwMDAwOTUwMDAwMDIyMgorOjEwMDY1MDAwMDAwMDAwMDA3QzQxNDAwMEM4MjAwMDA5Q0M0MDAwNDM1RAorOjEwMDY2MDAwQ0UwMUExRjRDQzQwMDA0NEMwMEU4MDAwN0M0MjQwMDA4QQorOjEwMDY3MDAwN0M0MjgwMDAyQUFDMDAxRjk2QzBGRTYzQzAzNUYwMDBBQgorOjEwMDY4MDAwQ0U0MDAzRTIzMjc4MDAwMzI2N0MwMDA4N0ZGN0MwMEJERgorOjEwMDY5MDAwN0ZGQkMwMEMyQTc4MDAxOENGQzAwM0UzQ0Y4MDAzRTRBRgorOjEwMDZBMDAwMjZCMDAwMDI3RjNGMDAwMENGMDAwM0U1ODAwMDAzMUY1QgorOjEwMDZCMDAwN0M4MEMwMDA3QzQwQzAwMDI4RDAwMDA4MzExMDAwMEZCMgorOjEwMDZDMDAwOTUwMDAwMEYyNTI4MDAwMTA2QTgwMUIzOUU4MDAwMDBCOAorOjEwMDZEMDAwMDAwMDAwMDA4MDAwMDFENEMwMTIwODAwODAwMDAxRTI4OAorOjEwMDZFMDAwQzgxNDAwMEY4MDAwMDFFOUM4MTQwMDEwODAwMDAxRjA1OAorOjEwMDZGMDAwQ0NDMUEyQTQ4MDAwMDFGOUM4MTQwMDExMzBEMDAwM0Y4MQorOjEwMDcwMDAwMEQyODAwMTU5QTgwMDAxMjBEMjgwMDFFOUE4MDAwMUVFOAorOjEwMDcxMDAwMEQyODAwMjA5QTgwMDAyMzBEMjQwMDBGMEQyODAwMTBDMgorOjEwMDcyMDAwN0U2QTgwMEM5QTgwMDAyNjBEMjAwMDA0MEQyNDAwMTQ5RgorOjEwMDczMDAwMEQyODAwMjg3RTYyNDAwQzdFQTY4MDBDOUE4MDAwMkEzQworOjEwMDc0MDAwQzgxNDAwMTE4MDAwMDAwMUNDQzFBMkE0QzAxMjA4MDA4RQorOjEwMDc1MDAwN0M0MTQwMDA3RDBDQzAwQ0MwMTIwMDA4Mjk1ODAwMDNFOQorOjEwMDc2MDAwMjk1QzAwMEM3QzQyMDAwMDdERDFDMDBCMjYyMDAwMTRDNworOjEwMDc3MDAwN0UxRTQwMEM3RTRFODAwQ0NFODFBMkE0ODAwMDAwMDEyMworOjEwMDc4MDAwQ0Q4MUExRkVDODE0MDAwRjA0MTAyMTBFOTU0MDAwMDA3OQorOjEwMDc5MDAwQzgxNDAwMEZEMDUxMDAwMDgwMDAwMDAxQ0NDMUEyQTRGOQorOjEwMDdBMDAwQzgxNDAwMTAwNDEwMjEwODk1NDAwMDAwQzgxNDAwMTA1RgorOjEwMDdCMDAwRDA1MTAwMDA4MDAwMDAwMUNDQzFBMkE0Q0NDMUEyQTRGMQorOjEwMDdDMDAwMDQxMDAwMDFDRDAwMDAxOTg0MDAwM0EyQ0MwMDAwN0ZCQQorOjEwMDdEMDAwQzgxMDAwMTk5OTAwMDAwMEM4MTAwMDE5ODAwMDAwMDIxQworOjEwMDdFMDAwN0M0MDgwMDAwNDEwMjEwMDA5NTQwMDAxOTU0MEZGRkY2NworOjEwMDdGMDAwQzgxNDAwMTFEMDUxMDAwMDgwMDAwMzlGQ0NDMUEyQTRGNgorOjEwMDgwMDAwN0M0MEMwMDBDQzQwMDAwRDk0QzBGREZGQ0M0MDAwMEVFOQorOjEwMDgxMDAwN0M0MTAwMDA5NTAwMDAwNTA4Q0MwMDAxQzgxNDAwMDVDQgorOjEwMDgyMDAwOTk0MDAwMTQwMDAwMDAwMDk4QzBGRkZCN0M0MTAwMDBDQworOjEwMDgzMDAwODAwMDAwMDI3RDAwODAwMEM4MTQwMDA1N0M0MEMwMDBEQworOjEwMDg0MDAwOTk0MDAwMENDODE4MDAwQzdDNDEwMDAwOTU4MEZERUUxQQorOjEwMDg1MDAwQzgyMDAwMEVDODFDMDAwRDY2MjAwMDIwN0UxRTAwMkM0MworOjEwMDg2MDAwMjUyNDAwMDI3RTYyNDAyMDgwMDAwMDAxQ0NFNjAwMDBDQQorOjEwMDg3MDAwN0M0MTAwMDBDQzAwMDA2Q0NDMDAwMDZEQzgxODAwMUY0QgorOjEwMDg4MDAwQzgxQzAwMUU2NTk4MDAyMDdERDlDMDJDN0NENEMwMENFQgorOjEwMDg5MDAwQ0NERTAwMDA0NURDMDAwNEM4MjgwMDE3OTY4MDAwMEY1RAorOjEwMDhBMDAwQzAwRTAwMDEyODY4MDAwODJBQUMwMDE2MzJBODAwRkYxQworOjEwMDhCMDAwMEVCMDAwNDk3RjJGMDAwQjk3MDAwMDA2MDAwMDAwMDBEQgorOjEwMDhDMDAwQzgxNDAwMDU3QzQwQzAwMDgwMDAwMjIzN0M0MTAwMDA2OQorOjEwMDhEMDAwODAwMDAyMjZEMDQwMDA3Rjg0MDAwMjNCQ0MwMDAwNDExMworOjEwMDhFMDAwQ0NDMTMwNEE5NDAwMDAwMEM4M0MwMDFBMDQzQzAwMDUwQQorOjEwMDhGMDAwQ0ZDMUEyQTRDMDM2MUY5MEMwMzg3RkZGN0MwM0MwMTBCOAorOjEwMDkwMDAwN0Y3QjQwMENDRjQxMjE3Q0NGQzEyMTdEQ0MwMTIxN0U1QQorOjEwMDkxMDAwQzAzQTAwMDQwNDM0MjE3RjdGN0I0MDBDQ0MzNTAwMDBCQQorOjEwMDkyMDAwQzgzQzAwMDQyQkZDMDAxRjA0MzgwMDIwOTdDMDAwMDVDMQorOjEwMDkzMDAwQ0MwMDAwNjI5QjgwMDAwMDBCQjgwMDAxODAwMDAyNDdFMQorOjEwMDk0MDAwQ0MwMDAwNzFDQzAxQTFGNDA0MzgwMDE2QzAzNjAwMDJCRQorOjEwMDk1MDAwQ0Y4MUEyQTQ4ODAwMDAwMENGNDEyMDEwN0M0MEMwMDBCRAorOjEwMDk2MDAwMjhEMDAwMUM5NTAwMDAwNTA0RDQwMDAxQ0Q0MDAwNjU4RQorOjEwMDk3MDAwODAwMDAwMDFDRDQwMDA2ODA5NTQwMDAyODAwMDAwMDFBMQorOjEwMDk4MDAwQ0Q0MDAwNjY4NDAwMDI2Q0M4MTgwM0VBN0M0MEMwMDBCOQorOjEwMDk5MDAwOTk4MEZEOURDODE0MDAxNjA4RDAwMDAxOTk0MDAwMkJENQorOjEwMDlBMDAwQ0QwMDAwNjg3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI4OAorOjEwMDlCMDAwMDQzQzAwMDVDRkMxQTJBNENDMDFBMUY0ODQwMDAzQTI5MQorOjEwMDlDMDAwQ0MwMDAwNDY4ODAwMDAwMENDMDAwMDdGODQwMDAyN0UzRQorOjEwMDlEMDAwQzgxODAzRUE3QzQwQzAwMDk5ODBGRDhCQzgxNDAwMTYzQgorOjEwMDlFMDAwMDhEMDAwMDE5OTQwMDAxOUNEMDAwMDY4N0M0MDgwMDBDQgorOjEwMDlGMDAwQTAwMDAwMDBDQzgwMDA2MjA0M0MwMDIyQ0ZDMUEyQTQ3MQorOjEwMEEwMDAwODQwMDAzQTJDQzAwMDA0Nzg4MDAwMDAwQ0MwMDAwN0ZENworOjEwMEExMDAwQzgxMDAwMTY5OTAwMDAwRENDNDAwMDY3ODAwMDAwMDI0RAorOjEwMEEyMDAwN0M0MDgwMDBDODE4MDNFQTk5ODBGRDc3N0M0MEMwMDBCNAorOjEwMEEzMDAwOTRDMDAwMDNDODEwMDAxNjk5MDAwMDA0Q0NDMDAwNjhFMAorOjEwMEE0MDAwODAwMDAwMDI3QzQwODAwMDg0MDAwMjNCQzAxNDgwMDBEMworOjEwMEE1MDAwQ0MwMDAwNDFDRDQxMzA0QUMwMTQ4MDAwOTkwMDAwMDAxNAorOjEwMEE2MDAwQzgxMDAwMTY4MDAwMDAwMjdDNDA4MDAwQzAxMjAwMDEwNworOjEwMEE3MDAwN0M1MTQwMEM4MDAwMDAwMUQwNTUwMDAwN0M0MEMwMDAzQgorOjEwMEE4MDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwMjkxQzAwMUYwQgorOjEwMEE5MDAwQ0NDMDAwNEFDRDAwMDA0Qjk1QzAwMDAzQzAxQzgwMDBCNAorOjEwMEFBMDAwQ0RDMTIwMTBERDgzMDAwMDA1NUMyMDAwQ0MwMDAwNjI3OQorOjEwMEFCMDAwODAwMDAwMDFEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDA0NAorOjEwMEFDMDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDRDQ0QwMDAwNERGQQorOjEwMEFEMDAwREQ4MzAwMDAwNTVDQTAwMDgwMDAwMDAxRDgxRjQxMDBGQworOjEwMEFFMDAwN0M0MEMwMDA3QzQxMDAwMDdDNDE0MDAwN0M0MTgwMDA5MworOjEwMEFGMDAwQ0NDMDAwNEVDRDAwMDA0RkREODMwMDAwMDU1Q0MwMDA3RgorOjEwMEIwMDAwODAwMDAwMDFEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDBGMworOjEwMEIxMDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDUwQ0QwMDAwNTFBMQorOjEwMEIyMDAwREQ4MzAwMDAwNTVDRjhFMDgwMDAwMDAxRDgxRjQxMDA3MworOjEwMEIzMDAwN0M0MEMwMDA3QzQxMDAwMDdDNDE0MDAwN0M0MTgwMDA0MgorOjEwMEI0MDAwQ0NDMDAwNTJDRDAwMDA1M0REODMwMDAwMDU1Q0Y4ODA2RQorOjEwMEI1MDAwODAwMDAwMDFEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDBBMworOjEwMEI2MDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDU0Q0QwMDAwNTU0OQorOjEwMEI3MDAwREQ4MzAwMDAwNTVDRTAwMDgwMDAwMDAxRDgxRjQxMDAxQgorOjEwMEI4MDAwN0M0MEMwMDA3QzQxMDAwMDdDNDE0MDAwN0M0MTgwMDBGMgorOjEwMEI5MDAwQ0NDMDAwNTZDRDAwMDA1N0REODMwMDAwMDU1Q0YwMDA5RQorOjEwMEJBMDAwODAwMDAwMDFEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDA1MworOjEwMEJCMDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDU4Q0QwMDAwNTlGMQorOjEwMEJDMDAwREQ4MzAwMDAwNTVDRjNGQzgwMDAwMDAxRDgxRjQxMDBCQworOjEwMEJEMDAwRDA0MzIwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI1OAorOjEwMEJFMDAwRDA0M0EwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjJDOAorOjEwMEJGMDAwRDA0M0MwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI5OAorOjEwMEMwMDAwRDA0M0Y4RTA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI2RgorOjEwMEMxMDAwRDA0M0Y4ODA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjJCRgorOjEwMEMyMDAwRDA0M0UwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI0NworOjEwMEMzMDAwRDA0M0YwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIyNworOjEwMEM0MDAwRDA0M0YzRkM3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIxOAorOjEwMEM1MDAwQzgxNDAzRTBDQzQzMDAwMENDNDMwMDAwQ0M0MzAwMDBBOAorOjEwMEM2MDAwN0Q0NUMwMDBDREMzMDAwMEQwNDMwMDAwN0M0MDgwMDAyMworOjEwMEM3MDAwQTAwMDAwMDBDQzgwMDA2MjdDNDBDMDAwQzgxMDAzRTJFRAorOjEwMEM4MDAwQzgxNDAzRTVDODE4MDNFM0M4MUMwM0U0Q0Q4MTIxNjkzNworOjEwMEM5MDAwQ0RDMTIxNkFDQ0MxMjE2QkNDMDEyMTZDMDQyMDAwMDRBMAorOjEwMENBMDAwN0RBMTgwMDA3RDk2NDAwMjk2NDBGQ0Q3Q0Q4MDAzRTM3NQorOjEwMENCMDAwMzEyODAwMDNDMDJERjAwMDI1MTgwMDA4N0RBRDgwMEIwMQorOjEwMENDMDAwN0RBOTgwMEM4MDAwMDAwMUNEODAwM0UzMzA4Q0ZGRkYwNAorOjEwMENEMDAwRDA0RDAwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI2RAorOjEwMENFMDAwN0M0MEMwMDA3QzQxMDAwMDI5MjQwMDE4MzI2NDAwMDFDRgorOjEwMENGMDAwOUE0MDAwMTNDODE0MDAyMDE1NTgwMDAyOTU4MEZGRkY4OQorOjEwMEQwMDAwQzgxNDAwMjBDQzAwMDA2RUNDQzEyMTgwQ0QwMTIxOEQwMworOjEwMEQxMDAwQ0M0MTIxODEyOTE0MDAxRjM0NTg4MDAwQ0Q4MTIxOENDMQorOjEwMEQyMDAwOTU0MEZDQjlDQzQxMjE4MkM4MTQwMDIwOTk0MEZGRkZCNgorOjEwMEQzMDAwQzgxNDAwMjA4MDAwMDAwMjdDNDA4MDAwN0M0MTQwMDBGQworOjEwMEQ0MDAwN0M0MTgwMDA3QzQxQzAwMDY1QjQwMDIwN0Y1NzQwMkM2RQorOjEwMEQ1MDAwRDQzNzgxMDA0Nzc0MDAwNEQ0Mzc4MTAwNDc3NDAwMDRGRAorOjEwMEQ2MDAwRDQzNzgxMDA0Nzc0MDAwNDA5REMwMDA0RDQzNzgxMDBDMworOjEwMEQ3MDAwOTlDMEZGRjg0Nzc0MDAwNDI5MjQwMDFGQzAzODAwMTlFNworOjEwMEQ4MDAwOTY0MEZDQTFDMDNFMDAwNENGODEyMUY4MzdFMDIxRjk1NAorOjEwMEQ5MDAwQ0MyMTAwMDBDODIwMDAwNDJBMjAwMDE4MzIyMDAwMDFDNQorOjEwMERBMDAwOUEwMEZGRkJDRjgxMjFGODgwMDAwMDAyN0M0MDgwMDA4OAorOjEwMERCMDAwN0M0MEMwMDAyOEQwMDAxODMxMTAwMDAxQzAxNjAwODAwRgorOjEwMERDMDAwOTUwMDAwMDNDMDJBMDAwNDdDRDRDMDBDQ0NDMTIxN0M1NworOjEwMEREMDAwQ0M0MTIxN0RDQzQxMjE3RTdDNDE4MDAwMURCMDAwMDNBRgorOjEwMERFMDAwMzZBMDIxN0Y5QjAwMDAwMzQxOUMwMDA1MDQxQzAwNDBBRAorOjEwMERGMDAwOTlDMDAwMDAwOURDMDAwMUNDMjEwMDAwQzgyNDAwMDRENworOjEwMEUwMDAwMkE2QzAwMUY0MTlDMDAwNTlBQzBGRkZBQ0M4MDAwNjI0QQorOjEwMEUxMDAwODAwMDAwMDI3QzQwODAwMDdDNDBDMDAwMDRENDAzRTZENworOjEwMEUyMDAwODAwMDAwMDFDQzU0MDAwMDgwMDAwMzlGQ0M0MDAzRUEwNgorOjEwMEUzMDAwQzAxQzgwMDAwNDRDQTAwMENEQzEyMDEwN0M0MTAwMDBFQgorOjEwMEU0MDAwQzgxNDAwMDkwNDE4MDAwMDA0MUMwMDA4Q0Q4MDAwNzFCQgorOjEwMEU1MDAwMDlEQzAwMDEwNTk4MDAwMUNEMEQwMDAwOTlDMEZGRkNFMAorOjEwMEU2MDAwQ0M4MDAwNjI4MDAwMDM5RkNENDAwMDcxQzAwRTAxMDA2NQorOjEwMEU3MDAwQ0MwMDAwNDFDQ0MxMzA0QUM4M0MwMDdGQ0MwMDAwN0Y5MAorOjEwMEU4MDAwODAwMDAwMDFDQzAwMDA3RkNDMDAwMDdGODgwMDAwMDBDMworOjEwMEU5MDAwQ0MwMDAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMEVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMEVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwMEVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMEVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwMEVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMEVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMEYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMEYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMEYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwMEY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwMEY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMEY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMEY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMEY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMEZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMEZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMEZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMEZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMEZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwMTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMTA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwMTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwMTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwMTBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwMTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwMTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMTJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMTJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMTJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMTJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMTJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMTMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMTMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMTMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMTM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMTM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMTM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMTM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMTM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMTM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMTNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMTNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMTNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMTQwMDAwMDAwMTAzMzMwMDEwMDAwNDAwMTcwMDA2MDAyMTAwMDg0QgorOjEwMTQxMDAwMDAyNzAwMjgwMDI4MDAyMzAwMjkwMDI5MDAyQTAwMjY5MAorOjEwMTQyMDAwMDAyQjAwMjkwMDJEMDAzODAwMkUwMDNGMDAyRjAwNEExRAorOjEwMTQzMDAwMDAzNDAwNEMwMDM2MDAzMDAwMzkwMEFGMDAzQTAwRDBENAorOjEwMTQ0MDAwMDAzQjAwRTUwMDNDMDBGRDAwM0QwMTZDMDAzRjAwQURBRAorOjEwMTQ1MDAwMDA0MTAzMzgwMDQzMDM2QzAwNDQwMThGMDA0NTAwRkQ0OAorOjEwMTQ2MDAwMDA0NjAxQUQwMDQ3MDFBRDAwNDgwMjAwMDA0OTAyMEVGMAorOjEwMTQ3MDAwMDA0QTAyNTcwMDRCMDI4NDAwNTIwMjYxMDA1MzAyNzM3QgorOjEwMTQ4MDAwMDA1NDAyODkwMDU3MDI5QjAwNjAwMjlGMDA2MTAyQUU3NworOjEwMTQ5MDAwMDA2MjAyQjgwMDYzMDJDMjAwNjQwMkNDMDA2NTAyRDY5QQorOjEwMTRBMDAwMDA2NjAyRTAwMDY3MDJFQTAwNjgwMkY0MDA2OTAyRjhFMAorOjEwMTRCMDAwMDA2QTAyRkMwMDZCMDMwMDAwNkMwMzA0MDA2RDAzMDg2QgorOjEwMTRDMDAwMDA2RTAzMEMwMDZGMDMxMDAwNzAwMzE0MDA3MjAzODY5QgorOjEwMTREMDAwMDA3NDAzOEMwMDc5MDM4QTAwN0MwMzFFMDAwRjAzOUJCOQorOjEwMTRFMDAwMDAwRjAzOUIwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUI0OAorOjEwMTRGMDAwMDAwRjAzOUIwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIzOAorOjEwMTUwMDAwMDAwRjAzOUIwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIyNworOjEwMTUxMDAwMDAwRjAzOUIwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIxNworOjEwMTUyMDAwMDAwRjAzOUIwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIwNworOjEwMTUzMDAwMDAwRjAzOUIwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUJGNworOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjc3MF9wZnAuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY3NzBfcGZwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDE2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY3NzBfcGZwLmJpbi5paGV4CkBAIC0wLDAgKzEsMjEzIEBACis6MTAwMDAwMDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI4MDAwMDAwMDA5Cis6MTAwMDEwMDBEQzAzMDAwMENDODAwMDQwRDA0MDAwNDA3QzQwODAwMEU5Cis6MTAwMDIwMDBBMDAwMDAwMDdFODI4MDBCQzgxODAwMEUzMTk4MDAwMUVECis6MTAwMDMwMDA3QzQyNDAwMDk1ODAwMjUyN0M0MjgwMDBDODFDMDAxQzFCCis6MTAwMDQwMDBDMDM3QzAwMDdDNDBDMDAwN0M0MTAwMDA3Q0I0ODAwQjA1Cis6MTAwMDUwMDBDMDM2MDAwMzk5QzAwMDAwQzgxQzAwMUM3Q0I0ODAwQzkyCis6MTAwMDYwMDAyNEQ0MDAwMjdENjU0MDAwQ0Q0MDAwNDNDRTgwMDA0MzkzCis6MTAwMDcwMDBDRDAwMDA0M0NDODAwMDQwQ0U0MDAwNDBDRTgwMDA0MDA4Cis6MTAwMDgwMDBDQ0MwMDA0MERDM0EwMDAwOTc4MEZGREVDRDAwMDA0MDhECis6MTAwMDkwMDA3QzQwQzAwMDgwMDAwMDE4N0M0MTAwMDBENDAwMDM0MDc4Cis6MTAwMEEwMDBENDAwMEZDMEQ0MDAwRkEyQzgxODAwMEU4MDAwMDAwQ0FFCis6MTAwMEIwMDAzMTk4MDAwMkQ0MDAwM0MwRDQwMDBGQzBENDAwMEZBMkI2Cis6MTAwMEMwMDBDODE4MDAwRTI4OEMwMDA4MzBDQzAwMEYzNDEwMDAwMTM2Cis6MTAwMEQwMDA3RDBEMDAwODgwMDAwMDBDN0Q5MTgwMEJDQzgwMDA0MERECis6MTAwMEUwMDBEMDQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjU5Cis6MTAwMEYwMDBENDAwMDM0MEQ0MDAwRkMwRDQwMDBGQTJDQzgwMDA0MDM1Cis6MTAwMTAwMDBEMDQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjM4Cis6MTAwMTEwMDBENDAwMDNDMEQ0MDAwRkMwRDQwMDBGQTJDQzgwMDA0MDk0Cis6MTAwMTIwMDBEMDQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjE4Cis6MTAwMTMwMDBDQzQwMDNGOTgwMDAwMjYxQ0M0MDAzRjhDODIwMDNGOEVBCis6MTAwMTQwMDBDODFDMDNGOUM4MTgwM0ZCQzAzN0ZGRkY3QzQxNDAwMEZGCis6MTAwMTUwMDBDRjQxQTI5RTY2MjAwMDIwN0RFMUMwMkM3RDU4QzAwOEMyCis6MTAwMTYwMDA3Q0RDQzAyMDY4RDAwMDIwQzAzNjAwMDNDQzAwMDA1NEU2Cis6MTAwMTcwMDA3Q0I0ODAwQzgwMDAwMDZBQ0M4MDAwNDA3QzQxODAwMDEwCis6MTAwMTgwMDBDRDgxQTI5RUNDODAwMDQwQ0Q4MDAwNDA4MDAwMDA2OEUwCis6MTAwMTkwMDBDQzAwMDA1NEMwMTlGRkZGQ0M4MDAwNDBDRDgxQTI5RTRFCis6MTAwMUEwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDBDQ0MxQTFGQUYxCis6MTAwMUIwMDBDRDAxQTFGOUNENDFBMjlEQ0NDMDAwNDBDRDAwMDA0MEIxCis6MTAwMUMwMDBDRDQwMDA0MENDNDAwMDQwN0M0MDgwMDBBMDAwMDAwMEJBCis6MTAwMUQwMDA3RTgyODAwQkNDMDAwMDU0Q0M4MDAwNDA3QzQwQzAwMDZDCis6MTAwMUUwMDA3QzQxMDAwMDdDNDE0MDAwQ0NDMUExRkFDRDAxQTFGOUM1Cis6MTAwMUYwMDBDRDQxQTI5RENDQzAwMDQwQ0QwMDAwNDBDRDQwMDA0MDhDCis6MTAwMjAwMDBEMDQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjM3Cis6MTAwMjEwMDA3QzQwQzAwMDMwRDAwMDAxQ0NDMUEyOUY5NTAwMDAwM0ZCCis6MTAwMjIwMDAwNDE0MDAwMTA0MTQwMDAyQ0Q0MDAzRkJDQzgwMDA0MDA0Cis6MTAwMjMwMDA4MDAwMDAwMENDQzAwMDQwN0M0MEMwMDBDQzgwMDA0MDZBCis6MTAwMjQwMDBDQ0MxQTJBMjgwMDAwMDAwQ0NDMDAwNDA3QzQwQzAwMDE1Cis6MTAwMjUwMDAyOEQ0MDAxRkNDODAwMDQwOTU0MDAwMDM3QzQxMDAwMDYyCis6MTAwMjYwMDBDQ0MwMDA1NzI5MTgwMDFGQ0NDMDAwNDA5NTgwMDAwMzY3Cis6MTAwMjcwMDBDRDAwMDA0MENEMDAwMDU4ODAwMDAyNjFDQzAwMDA3RjFFCis6MTAwMjgwMDBDODIwMDAxN0M4MzAwMDIyOUEwMDAwMDYwRTI4MDAwMTdFCis6MTAwMjkwMDBDODI0MDAxRTBBNjQwMDAxRDQwMDEyNDBDRTQwMDA0MDcxCis6MTAwMkEwMDBDMDM2QzAwMDk2ODAwMDA3Mzc3NDc5MDAwNDFDMDAwMTM2Cis6MTAwMkIwMDBDRjQwMDA0MENEQzAwMDQwQ0YwMDAzRkE3QzAzMDAwMEQ3Cis6MTAwMkMwMDBDQTBDMDAxMDdDNDEwMDAwOTRDMDAwMDQ3QzQxNDAwMDM2Cis6MTAwMkQwMDBENDIwMDJDNENERTAwMDQ0OUIwMDAwMEI3QzQxODAwMDkwCis6MTAwMkUwMDBDQzAwMDA0QkNEQTAwMDQ5Q0QyMDAwNDFDRDYwMDA0MUE1Cis6MTAwMkYwMDBDREEwMDA0MTA2MjAwMDAxQ0UwMDAwNTY4MDAwMDI2MTIyCis6MTAwMzAwMDBDQzAwMDA3RkM4MjgwMDIwQzgyQzAwMjFDQzAwMDA2MzRFCis6MTAwMzEwMDA3RUVBNDAwMTY1NzQwMDIwN0Y1MzQwMkMyNjlDMDAwMjM5Cis6MTAwMzIwMDA3REY1QzAyMDY5RjgwMDIwQ0U4MDAwNEJDRTYwMDA0OUVBCis6MTAwMzMwMDBDREUwMDA0MUNGQTAwMDQxQ0U2MDAwNDEyNzFDMDAwMjZCCis6MTAwMzQwMDA3REY1QzAyMDY5RjgwMDIwN0RCMjQwMDFDRjAwMDA0QjUwCis6MTAwMzUwMDBDRTYwMDA0OUNERTAwMDQxQ0ZBMDAwNDE4MDAwMDBCRDRCCis6MTAwMzYwMDBDRTYwMDA0MUM4MjAwMDE3QzgzMDAwMjI5QTAwMDAwNjY1Cis6MTAwMzcwMDAwRTI4MDAwMUM4MjQwMDFFMEE2NDAwMDFENDAwMTI0MEE3Cis6MTAwMzgwMDBDRTQwMDA0MENBMEMwMDEwN0M0MTAwMDA5NEMwMDAwQjFECis6MTAwMzkwMDBDMDM2QzAwMDk2ODAwMDA3Mzc3NDc5MDAwNDFDMDAwMTQ1Cis6MTAwM0EwMDBDRjQwMDA0MENEQzAwMDQwQ0YwMDAzRkE3QzAzMDAwMEU2Cis6MTAwM0IwMDA4MDAwMDBCNjdDNDE0MDAwQ0MwMDAwNDg4MDAwMDBFRjg3Cis6MTAwM0MwMDAwMDAwMDAwMEM4MjAwMDE3QzgxQzAwMjMwRTI0MDAwMkYzCis6MTAwM0QwMDA5OUMwMDAxNTdDNDE4MDAwMEEyMDAwMDFDRTAwMDA1NjIzCis6MTAwM0UwMDBENDAwMDQ0MENDMDAwMDQwQzAzNkMwMDBDQTE0MDAxMzQyCis6MTAwM0YwMDA5NjQwMDAwNzM3NzQ3OTAwQ0Y0MDAwNDBDQzAwMDA0MEExCis6MTAwNDAwMDBDODMwMDNGQTgwMDAwMTA0Q0YwMDAwMjJDQzAwMDAyMjkzCis6MTAwNDEwMDA5NTQwMDE1RENDMDAwMDdGQ0NBMDAwNDY4MDAwMDAwMDJDCis6MTAwNDIwMDBDQzIwMDA0NjgwMDAwMjYxQ0MwMDAwNjRDODIwMDAxNzg4Cis6MTAwNDMwMDBDODEwMDAxRjk2MDAwMDA1MDkxMDAwMDFENDAwMDQ0MEY4Cis6MTAwNDQwMDBDRDAwMDA0MENEMDAwMDIyQ0M4MDAwNDBEMDQwMDA0MEQ0Cis6MTAwNDUwMDBDODBDMDAyNTk0QzBGRUVCQzgxMDAwMDhDRDAwMDA0MDc5Cis6MTAwNDYwMDBENDAwMEZDMDgwMDAwMDAwRDQwMDBGQTI3QzQwQzAwMDY4Cis6MTAwNDcwMDA3QzQxMDAwMENDQzAwM0ZEQ0QwMDAzRkNDQ0MwMDA0Mjk5Cis6MTAwNDgwMDBDRDAwMDA0MjI5MTQwMDFGMjkxODAwMTAzMTk4MDAwN0UwCis6MTAwNDkwMDAzQjVDMDAwMTdENzYwMDBCOTk4MDAwMDU3RDVFNDAwQjgyCis6MTAwNEEwMDBDQzAwMDA0MjgwMDAwMjYxQ0MwMDAwNEQyOTk4MDAwMTgwCis6MTAwNEIwMDAyOTJDMDAwODk5ODAwMDNEMzJFQzAwMDE5NjAwMDAwNEQwCis6MTAwNEMwMDAyOTMwMDAwQzgwMDAwMjYxQ0MwMDAwNDIwNDE0MDAxMEFFCis6MTAwNEQwMDBDRDQwMDA0MjMzMzAwMDAxMzQyODAwMDE4NDAwMDE1RTI5Cis6MTAwNEUwMDBDODE0MDAwMzlCNDAwMDFCMDQzODAwMEM4NDAwMDE1RTBDCis6MTAwNEYwMDBDODE0MDAwMzlCNDAwMDE3MDQzODAwMDg4NDAwMDE1RTA0Cis6MTAwNTAwMDBDODE0MDAwMzlCNDAwMDEzMDQzODAwMDQ4NDAwMDE1RUZCCis6MTAwNTEwMDBDODE0MDAwMzlCNDAwMDE1QzgwQzAzRkQ5QTgwMDAwOTE1Cis6MTAwNTIwMDBDODEwMDNGQzlCMDAwMTE4Q0MwMDAwNEQwNDE0MDAxMEZGCis6MTAwNTMwMDBDQ0MwMDA0MkNEMDAwMDQyODAwMDAxMzZDRDQwMDA0MkQ4Cis6MTAwNTQwMDA5NkMwMDExMUNDMDAwMDREODAwMDAyNjFDQzAwMDA0RTJECis6MTAwNTUwMDA5QUMwMDAwM0NDMDAwMDREQ0MwMDAwNEVERjgzMDAwMEE5Cis6MTAwNTYwMDA4MDAwMDAwMEQ4MDMwMUZGOUFDMDAxMDdDQzAwMDA0REI1Cis6MTAwNTcwMDA4MDAwMDI2MUNDMDAwMDRFQzgxODAwMDNDODFDMDAwM0I0Cis6MTAwNTgwMDBDODIwMDAwMzdENUQ0MDAzN0RBMUMwMDM3RDVENDAwQzVDCis6MTAwNTkwMDAyQTEwMDAxRjI5OUMwMDFGN0QxRDAwMEI3RDE3NDAwQjlBCis6MTAwNUEwMDA4ODAwMDAwMDdFOTI4MDBCOTY0MDAwMDRDQzAwMDA0RTM0Cis6MTAwNUIwMDA4MDAwMDI2MUNDMDAwMDQyMDQzODAwMDhDRjgwMDA0Mjc1Cis6MTAwNUMwMDBDODA4MDAwM0M4MEMwMDAzQzgxMDAwMDNDODE0MDAwM0M3Cis6MTAwNUQwMDBDODE4MDAwM0M4MUMwMDAzQzgyNDAwMDNDODI4MDAwMzZGCis6MTAwNUUwMDAyOUZDMDAxRjJBQjAwMDFGN0ZGM0MwMEIyOEYwMDAxRjVBCis6MTAwNUYwMDA3RkYzQzAwQjI5NzAwMDFGN0ZGM0MwMEI3RDg4ODAwMTQzCis6MTAwNjAwMDA3RENDQzAwMTdFNTEwMDAxN0U5NTQwMDE3QzkwODAwMjJFCis6MTAwNjEwMDA3Q0Q0QzAwMjdDQkM4MDBCOUFDMDAwMDM3QzhGNDAwQjUyCis6MTAwNjIwMDAzOEI0MDAwMTlCNDAwMEQ4Q0MwMDAwNEQ5QkMwMDBENkUwCis6MTAwNjMwMDBDQzAwMDA0RUM4MEMwM0ZEQzgxMDAzRkNDQ0MwMDA0MjI3Cis6MTAwNjQwMDA4MDAwMDE2RkNEMDAwMDQyRDQwMDAzNDBENDAwMEZDMEYxCis6MTAwNjUwMDBENDAwMEZBMkNDODAwMDQwQ0M0MDAwNDBDQzQwMDA0MEYxCis6MTAwNjYwMDBDQzQwMDA0MDdDNDBDMDAwQ0NDMDAwNDBDQ0MwMDAwRDVECis6MTAwNjcwMDA4MDAwMDAwMEQwNDAwMDQwN0M0MEMwMDA3QzQxMDAwMDcxCis6MTAwNjgwMDA2NTE0MDAyMDdENEQ0MDJDMjQ1ODAwMDI3RDU5ODAyMEE3Cis6MTAwNjkwMDA3QzQxQzAwMENEODAwMDQyNjk5ODAwMjBDRDgwMDA0MjlFCis6MTAwNkEwMDBDREMwMDA0MkMwMjNDMDAwMDVFNDAwMDI3Q0EwODAwQjQ2Cis6MTAwNkIwMDAyNjY0MDAxMDdDQTQ4MDBDQ0M4MDAwNDBDREMwMDA0MDlCCis6MTAwNkMwMDBDQ0MwMDA0MDk1QzAwMDBFQ0QwMDAwNDAwOURDMDAwMTA4Cis6MTAwNkQwMDBDODI4MDAwMzk2ODAwMDA4Q0U4MDAwNDBDODM0MDAxRDYyCis6MTAwNkUwMDA5NzQwMDAwMEM4MzQwMDFEMjZBODAwMDg4NDAwMDI2NDVBCis6MTAwNkYwMDBDQzJCMDAwMDk5QzBGRkY3MDlEQzAwMDFEQzNBMDAwMEI4Cis6MTAwNzAwMDA5NzgwMDAwNDdDNDE4MDAwODAwMDAxQTMyNTk4MDAwMkFFCis6MTAwNzEwMDBBMDAwMDAwMDdEODA4MDAwQzgxODAwMUQ3QzQwQzAwMDQzCis6MTAwNzIwMDA2NEQwMDAwODk1ODAwMDAwQzgxODAwMURDQzEzMDAwMDlDCis6MTAwNzMwMDBDQzgwMDA0MENDQzAwMDQwODAwMDAwMDBDQzQwMDA0MDk1Cis6MTAwNzQwMDBDODEwMDAxRjdDNDBDMDAwQ0M4MDAwNDA3Q0QxNDAwQzExCis6MTAwNzUwMDBDRDQwMDA0MDA1MTgwMDAxODAwMDAwMDBDRDgwMDAyMjNGCis6MTAwNzYwMDA3QzQwQzAwMDY0NTAwMDIwODQwMDAyNjRDQzAwMDA2MTIyCis6MTAwNzcwMDA3Q0QwQzAyQ0M4MjAwMDE3QzhENjAwMDA5OTQwMDAwOEMzCis6MTAwNzgwMDA3QzQzODAwMERGODMwMDAwQ0ZBMDAwNEY4NDAwMDI2NDIwCis6MTAwNzkwMDBDQzAwMDA2MjgwMDAwMDAwRDA0MDAwN0Y4MDAwMDI2MTM5Cis6MTAwN0EwMDBDQzAwMDA2Mjg0MDAwMjY0Q0MwMDAwNjFDODIwMDAxNzA1Cis6MTAwN0IwMDA3QzQwQzAwMEMwMzZGRjAwQzgxMDAwMERDMDMwM0ZGRkI1Cis6MTAwN0MwMDA3Q0Y1NDAwQjdENTE4MDBCN0Q4MTgwMEY5OTgwMDAwODY2Cis6MTAwN0QwMDA3Q0YzODAwQkRGODMwMDAwQ0ZBMDAwNEY4NDAwMDI2NDE1Cis6MTAwN0UwMDBDQzAwMDA2MjgwMDAwMDAwRDA0MDAwN0Y4MDAwMDI2MUU5Cis6MTAwN0YwMDBDQzAwMDA2Mjg0MDAwMjY0N0M0MEMwMDAyOERDMDAwODU5Cis6MTAwODAwMDA5NUMwMDAxOTMwREMwMDEwN0M0MTAwMDA5OUMwMDAwNDQ0Cis6MTAwODEwMDA2NDU0MDAyMDgwMDAwMjA5QzkxRDAwMDA3RDE1MDAyQ0QxCis6MTAwODIwMDBDOTFFMDAwMDdDNDIwMDAwN0M0MjQwMDA3QzQxODAwMEU4Cis6MTAwODMwMDA3REU1QzAwQjdERTI4MDA3OUE4MDAwMEU0MUFDMDAwNThCCis6MTAwODQwMDA5QUMwMDAwMDBBRUMwMDAxMzBEQzAwMTA5OUMwMDAwNERFCis6MTAwODUwMDAwMDAwMDAwMDgwMDAwMjBDQzkxRDAwMDA4MDAwMDIwQzk2Cis6MTAwODYwMDBDOTFFMDAwMENDODAwMDQwQ0NDMDAwNDBEMDQwMDA0MEY5Cis6MTAwODcwMDBDODBDMDAyNTk0QzBGREUzQzgxMDAwMDhDRDAwMDA0MDVFCis6MTAwODgwMDBENDAwMEZDMDgwMDAwMDAwRDQwMDBGQTJENDAwMDM0MEE5Cis6MTAwODkwMDBENDAwMEZDMEQ0MDAwRkEyQ0M4MDAwNDBEMDQwMDA0MDU0Cis6MTAwOEEwMDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEJENDAwMDNDMDRBCis6MTAwOEIwMDBENDAwMEZDMEQ0MDAwRkEyQ0M4MDAwNDBEMDQwMDA0MDM0Cis6MTAwOEMwMDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI3QzQwQzAwMDQ1Cis6MTAwOEQwMDAzMEQwMDAwNjBEMTAwMDA2OTkwMDAwMDdDODE0MDAxNTVFCis6MTAwOEUwMDA5OTQwMDAwNUNDMDAwMDUyRDQwMDAzNDBENDAwMEZDMDUyCis6MTAwOEYwMDBENDAwMEZBMkNDODAwMDQwQ0NDMDAwNDA4MDAwMDAwMDlCCis6MTAwOTAwMDBEMDQwMDA0MDdDNDBDMDAwQ0M0RDAwMDBEQzNBMDAwMEVDCis6MTAwOTEwMDA5NzgwRkRCQzA0Q0MwMDAxODAwMDAyNDNDQzREMDAwMDU4Cis6MTAwOTIwMDA3QzQwQzAwMDdDNDEwMDAwMjkyNDAwMTgzMjY0MDAwMTkyCis6MTAwOTMwMDA5NjQwMDAwRkNDODAwMDQwN0M0MTQwMDA3QzQxODAwMDBDCis6MTAwOTQwMDA3QzQxQzAwMENDQzAwMDQzQ0QwMDAwNDMzMURDN0ZGRkMwCis6MTAwOTUwMDBDREMwMDA0M0NDQzAwMDQwQ0QwMDAwNDBDRDQwMDA0MEExCis6MTAwOTYwMDBDRDgwMDA0MDgwMDAwMDAwQ0RDMDAwNDBDQ0MwMDA0MEUxCis6MTAwOTcwMDBDRDAwMDA0MDgwMDAwMDAwRDA0MDAwNDA4MDAwMDAwMDFBCis6MTAwOTgwMDBEMDQwMDA3RkNDMDAwMDdGODAwMDAwMDBDQzAwMDA3RkMyCis6MTAwOTkwMDBDQzAwMDA3Rjg4MDAwMDAwQ0MwMDAwN0YwMDAwMDAwMDM5Cis6MTAwOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAwOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAwOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAwOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAwOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAwOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTAwQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTAwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTAwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTAwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTAwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTAwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTAwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTAwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTAwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTAwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTAwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTAwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTAwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTAwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAwQzAwMDAwMDAzMDIyMzAwMDQwMjJCMDAwNTAwQTAwMDAyMDAwM0UxCis6MTAwQzEwMDAwMDA2MDAzQzAwMDcwMDI3MDAwODAxOTIwMDA5MDA0NDdDCis6MTAwQzIwMDAwMDBBMDAyRDAwMTAwMjVGMDAxNzAwRjEwMDIyMDFEODE5Cis6MTAwQzMwMDAwMDIzMDFFOTAwMjYwMDRDMDAyNzAwNUYwMDIwMDExQjczCis6MTAwQzQwMDAwMDI4MDA5MzAwMjkwMDRGMDAyQTAwODQwMDJCMDA2NTMzCis6MTAwQzUwMDAwMDJGMDA4RTAwMzIwMEQ5MDAzNDAyMzMwMDM2MDA3NUI4Cis6MTAwQzYwMDAwMDM5MDEwQjAwM0MwMUZEMDAzRjAwQTAwMDQxMDI0ODlCCis6MTAwQzcwMDAwMDQ0MDE5NTAwNDgwMTlFMDA0OTAxQzYwMDRBMDFEMDg4Cis6MTAwQzgwMDAwMDU1MDIyNjAwNTYwMjJFMDA2MDAwMEEwMDYxMDAyQTZDCis6MTAwQzkwMDAwMDYyMDAzMDAwNjMwMDMwMDA2NDAwMzAwMDY1MDAzMDA2Cis6MTAwQ0EwMDAwMDY2MDAzMDAwNjcwMDMwMDA2ODAwMzcwMDY5MDAzRkQwCis6MTAwQ0IwMDAwMDZBMDA0NzAwNkIwMDQ3MDA2QzAwNDcwMDZEMDA0NzZBCis6MTAwQ0MwMDAwMDZFMDA0NzAwNkYwMDQ3MDA3MDAwNDcwMDczMDI1RjJFCis6MTAwQ0QwMDAwMDdCMDI0MTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTQ3Cis6MTAwQ0UwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUYwCis6MTAwQ0YwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUUwCis6MTAwRDAwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUNGCis6MTAwRDEwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUJGCis6MTAwRDIwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUFGCis6MTAwRDMwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTlGCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZnMvOXAvS2NvbmZpZyBiL2ZzLzlwL0tjb25maWcKaW5kZXggNzRlMDcyMy4uNzk1MjMzNyAxMDA2NDQKLS0tIGEvZnMvOXAvS2NvbmZpZworKysgYi9mcy85cC9LY29uZmlnCkBAIC04LDMgKzgsMTIgQEAKIAkgIFNlZSA8aHR0cDovL3Y5ZnMuc2YubmV0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIDlQX0ZTQ0FDSEUKKwlib29sICJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gOVBfRlM9bSAmJiBGU0NBQ0hFIHx8IDlQX0ZTPXkgJiYgRlNDQUNIRT15CisJaGVscAorCSAgQ2hvb3NlIFkgaGVyZSB0byBlbmFibGUgcGVyc2lzdGVudCwgcmVhZC1vbmx5IGxvY2FsCisJICBjYWNoaW5nIHN1cHBvcnQgZm9yIDlwIGNsaWVudHMgdXNpbmcgRlMtQ2FjaGUKKwpkaWZmIC0tZ2l0IGEvZnMvOXAvTWFrZWZpbGUgYi9mcy85cC9NYWtlZmlsZQppbmRleCBiYzdmMGQxLi4xYTk0MGVjIDEwMDY0NAotLS0gYS9mcy85cC9NYWtlZmlsZQorKysgYi9mcy85cC9NYWtlZmlsZQpAQCAtOCw1ICs4LDYgQEAKIAl2ZnNfZGlyLm8gXAogCXZmc19kZW50cnkubyBcCiAJdjlmcy5vIFwKLQlmaWQubyBcCisJZmlkLm8KIAorOXAtJChDT05GSUdfOVBfRlNDQUNIRSkgKz0gY2FjaGUubwpkaWZmIC0tZ2l0IGEvZnMvOXAvY2FjaGUuYyBiL2ZzLzlwL2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjOTRlMgotLS0gL2Rldi9udWxsCisrKyBiL2ZzLzlwL2NhY2hlLmMKQEAgLTAsMCArMSw0NzQgQEAKKy8qCisgKiBWOUZTIGNhY2hlIGRlZmluaXRpb25zLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgQWJoaXNoZWsgS3Vsa2FybmkgPGFka3Vsa2FyQHVtYWlsLml1LmVkdT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KKworI2luY2x1ZGUgInY5ZnMuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjZGVmaW5lIENBQ0hFVEFHX0xFTiAgMTEKKworc3RydWN0IGttZW1fY2FjaGUgKnZjb29raWVfY2FjaGU7CisKK3N0cnVjdCBmc2NhY2hlX25ldGZzIHY5ZnNfY2FjaGVfbmV0ZnMgPSB7CisJLm5hbWUgCQk9ICI5cCIsCisJLnZlcnNpb24gCT0gMCwKK307CisKK3N0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCit7CisJc3RydWN0IHY5ZnNfY29va2llICp2Y29va2llID0gKHN0cnVjdCB2OWZzX2Nvb2tpZSAqKSBmb287CisJdmNvb2tpZS0+ZnNjYWNoZSA9IE5VTEw7CisJdmNvb2tpZS0+cWlkID0gTlVMTDsKKwlpbm9kZV9pbml0X29uY2UoJnZjb29raWUtPmlub2RlKTsKK30KKworLyoqCisgKiB2OWZzX2luaXRfdmNvb2tpZWNhY2hlIC0gaW5pdGlhbGl6ZSBhIGNhY2hlIGZvciB2Y29va2llcyB0byBtYWludGFpbgorICoJCQkgICAgdmNvb2tpZSB0byBpbm9kZSBtYXBwaW5nCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KKworc3RhdGljIGludCB2OWZzX2luaXRfdmNvb2tpZWNhY2hlKHZvaWQpCit7CisJdmNvb2tpZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ2Y29va2llX2NhY2hlIiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHY5ZnNfY29va2llKSwKKwkJCQkJICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCSAgICAgIFNMQUJfTUVNX1NQUkVBRCksCisJCQkJCSAgaW5pdF9vbmNlKTsKKwlpZiAoIXZjb29raWVfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdjlmc19kZXN0cm95X3Zjb29raWVjYWNoZSAtIGRlc3Ryb3kgdGhlIGNhY2hlIG9mIHZjb29raWVzCisgKgorICovCisKK3N0YXRpYyB2b2lkIHY5ZnNfZGVzdHJveV92Y29va2llY2FjaGUodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kodmNvb2tpZV9jYWNoZSk7Cit9CisKK2ludCBfX3Y5ZnNfY2FjaGVfcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHY5ZnNfaW5pdF92Y29va2llY2FjaGUoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzKCZ2OWZzX2NhY2hlX25ldGZzKTsKK30KKwordm9pZCBfX3Y5ZnNfY2FjaGVfdW5yZWdpc3Rlcih2b2lkKQoreworCXY5ZnNfZGVzdHJveV92Y29va2llY2FjaGUoKTsKKwlmc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoJnY5ZnNfY2FjaGVfbmV0ZnMpOworfQorCisvKioKKyAqIHY5ZnNfcmFuZG9tX2NhY2hldGFnIC0gR2VuZXJhdGUgYSByYW5kb20gdGFnIHRvIGJlIGFzc29jaWF0ZWQKKyAqCQkJICB3aXRoIGEgbmV3IGNhY2hlIHNlc3Npb24uCisgKgorICogVGhlIHZhbHVlIG9mIGppZmZpZXMgaXMgdXNlZCBmb3IgYSBmYWlybHkgcmFuZG9tbHkgY2FjaGUgdGFnLgorICovCisKK3N0YXRpYworaW50IHY5ZnNfcmFuZG9tX2NhY2hldGFnKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpCit7CisJdjlzZXMtPmNhY2hldGFnID0ga21hbGxvYyhDQUNIRVRBR19MRU4sIEdGUF9LRVJORUwpOworCWlmICghdjlzZXMtPmNhY2hldGFnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiBzY25wcmludGYodjlzZXMtPmNhY2hldGFnLCBDQUNIRVRBR19MRU4sICIlbHUiLCBqaWZmaWVzKTsKK30KKworc3RhdGljIHVpbnQxNl90IHY5ZnNfY2FjaGVfc2Vzc2lvbl9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOworCXVpbnQxNl90IGtsZW4gPSAwOworCisJdjlzZXMgPSAoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICopY29va2llX25ldGZzX2RhdGE7CisJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJzZXNzaW9uICVwIGJ1ZiAlcCBzaXplICV1IiwgdjlzZXMsCisJCSAgIGJ1ZmZlciwgYnVmbWF4KTsKKworCWlmICh2OXNlcy0+Y2FjaGV0YWcpCisJCWtsZW4gPSBzdHJsZW4odjlzZXMtPmNhY2hldGFnKTsKKworCWlmIChrbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsIHY5c2VzLT5jYWNoZXRhZywga2xlbik7CisJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJjYWNoZSBzZXNzaW9uIHRhZyAlcyIsIHY5c2VzLT5jYWNoZXRhZyk7CisJcmV0dXJuIGtsZW47Cit9CisKK2NvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgdjlmc19jYWNoZV9zZXNzaW9uX2luZGV4X2RlZiA9IHsKKwkubmFtZSAJCT0gIjlQLnNlc3Npb24iLAorCS50eXBlIAkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5IAk9IHY5ZnNfY2FjaGVfc2Vzc2lvbl9nZXRfa2V5LAorfTsKKwordm9pZCB2OWZzX2NhY2hlX3Nlc3Npb25fZ2V0X2Nvb2tpZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzKQoreworCS8qIElmIG5vIGNhY2hlIHNlc3Npb24gdGFnIHdhcyBzcGVjaWZpZWQsIHdlIGdlbmVyYXRlIGEgcmFuZG9tIG9uZS4gKi8KKwlpZiAoIXY5c2VzLT5jYWNoZXRhZykKKwkJdjlmc19yYW5kb21fY2FjaGV0YWcodjlzZXMpOworCisJdjlzZXMtPmZzY2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKHY5ZnNfY2FjaGVfbmV0ZnMucHJpbWFyeV9pbmRleCwKKwkJCQkJCSZ2OWZzX2NhY2hlX3Nlc3Npb25faW5kZXhfZGVmLAorCQkJCQkJdjlzZXMpOworCVA5X0RQUklOVEsoUDlfREVCVUdfRlNDLCAic2Vzc2lvbiAlcCBnZXQgY29va2llICVwIiwgdjlzZXMsCisJCSAgIHY5c2VzLT5mc2NhY2hlKTsKK30KKwordm9pZCB2OWZzX2NhY2hlX3Nlc3Npb25fcHV0X2Nvb2tpZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzKQoreworCVA5X0RQUklOVEsoUDlfREVCVUdfRlNDLCAic2Vzc2lvbiAlcCBwdXQgY29va2llICVwIiwgdjlzZXMsCisJCSAgIHY5c2VzLT5mc2NhY2hlKTsKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHY5c2VzLT5mc2NhY2hlLCAwKTsKKwl2OXNlcy0+ZnNjYWNoZSA9IE5VTEw7Cit9CisKKworc3RhdGljIHVpbnQxNl90IHY5ZnNfY2FjaGVfaW5vZGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCWNvbnN0IHN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCW1lbWNweShidWZmZXIsICZ2Y29va2llLT5xaWQtPnBhdGgsIHNpemVvZih2Y29va2llLT5xaWQtPnBhdGgpKTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfRlNDLCAiaW5vZGUgJXAgZ2V0IGtleSAlbGx1IiwgJnZjb29raWUtPmlub2RlLAorCQkgICB2Y29va2llLT5xaWQtPnBhdGgpOworCXJldHVybiBzaXplb2YodmNvb2tpZS0+cWlkLT5wYXRoKTsKK30KKworc3RhdGljIHZvaWQgdjlmc19jYWNoZV9pbm9kZV9nZXRfYXR0cihjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgICB1aW50NjRfdCAqc2l6ZSkKK3sKKwljb25zdCBzdHJ1Y3Qgdjlmc19jb29raWUgKnZjb29raWUgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwkqc2l6ZSA9IGlfc2l6ZV9yZWFkKCZ2Y29va2llLT5pbm9kZSk7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0ZTQywgImlub2RlICVwIGdldCBhdHRyICVsbHUiLCAmdmNvb2tpZS0+aW5vZGUsCisJCSAgICpzaXplKTsKK30KKworc3RhdGljIHVpbnQxNl90IHY5ZnNfY2FjaGVfaW5vZGVfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbGVuKQoreworCWNvbnN0IHN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCW1lbWNweShidWZmZXIsICZ2Y29va2llLT5xaWQtPnZlcnNpb24sIHNpemVvZih2Y29va2llLT5xaWQtPnZlcnNpb24pKTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfRlNDLCAiaW5vZGUgJXAgZ2V0IGF1eCAldSIsICZ2Y29va2llLT5pbm9kZSwKKwkJICAgdmNvb2tpZS0+cWlkLT52ZXJzaW9uKTsKKwlyZXR1cm4gc2l6ZW9mKHZjb29raWUtPnFpZC0+dmVyc2lvbik7Cit9CisKK3N0YXRpYyBlbnVtCitmc2NhY2hlX2NoZWNrYXV4IHY5ZnNfY2FjaGVfaW5vZGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCQkgICAgdWludDE2X3QgYnVmbGVuKQoreworCWNvbnN0IHN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCisJaWYgKGJ1ZmxlbiAhPSBzaXplb2YodmNvb2tpZS0+cWlkLT52ZXJzaW9uKSkKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisKKwlpZiAobWVtY21wKGJ1ZmZlciwgJnZjb29raWUtPnFpZC0+dmVyc2lvbiwKKwkJICAgc2l6ZW9mKHZjb29raWUtPnFpZC0+dmVyc2lvbikpKQorCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKworCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09LQVk7Cit9CisKK3N0YXRpYyB2b2lkIHY5ZnNfY2FjaGVfaW5vZGVfbm93X3VuY2FjaGVkKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKQoreworCXN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisJcGdvZmZfdCBmaXJzdDsKKwlpbnQgbG9vcCwgbnJfcGFnZXM7CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCWZpcnN0ID0gMDsKKworCWZvciAoOzspIHsKKwkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cCgmcHZlYywgdmNvb2tpZS0+aW5vZGUuaV9tYXBwaW5nLAorCQkJCQkgIGZpcnN0LAorCQkJCQkgIFBBR0VWRUNfU0laRSAtIHBhZ2V2ZWNfY291bnQoJnB2ZWMpKTsKKwkJaWYgKCFucl9wYWdlcykKKwkJCWJyZWFrOworCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBucl9wYWdlczsgbG9vcCsrKQorCQkJQ2xlYXJQYWdlRnNDYWNoZShwdmVjLnBhZ2VzW2xvb3BdKTsKKworCQlmaXJzdCA9IHB2ZWMucGFnZXNbbnJfcGFnZXMgLSAxXS0+aW5kZXggKyAxOworCisJCXB2ZWMubnIgPSBucl9wYWdlczsKKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorfQorCitjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIHY5ZnNfY2FjaGVfaW5vZGVfaW5kZXhfZGVmID0geworCS5uYW1lCQk9ICI5cC5pbm9kZSIsCisJLnR5cGUJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRSwKKwkuZ2V0X2tleQk9IHY5ZnNfY2FjaGVfaW5vZGVfZ2V0X2tleSwKKwkuZ2V0X2F0dHIJPSB2OWZzX2NhY2hlX2lub2RlX2dldF9hdHRyLAorCS5nZXRfYXV4CT0gdjlmc19jYWNoZV9pbm9kZV9nZXRfYXV4LAorCS5jaGVja19hdXgJPSB2OWZzX2NhY2hlX2lub2RlX2NoZWNrX2F1eCwKKwkubm93X3VuY2FjaGVkCT0gdjlmc19jYWNoZV9pbm9kZV9ub3dfdW5jYWNoZWQsCit9OworCit2b2lkIHY5ZnNfY2FjaGVfaW5vZGVfZ2V0X2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZTsKKwlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOworCisJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm47CisKKwl2Y29va2llID0gdjlmc19pbm9kZTJjb29raWUoaW5vZGUpOworCWlmICh2Y29va2llLT5mc2NhY2hlKQorCQlyZXR1cm47CisKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoaW5vZGUpOworCXZjb29raWUtPmZzY2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKHY5c2VzLT5mc2NhY2hlLAorCQkJCQkJICAmdjlmc19jYWNoZV9pbm9kZV9pbmRleF9kZWYsCisJCQkJCQkgIHZjb29raWUpOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJpbm9kZSAlcCBnZXQgY29va2llICVwIiwgaW5vZGUsCisJCSAgIHZjb29raWUtPmZzY2FjaGUpOworfQorCit2b2lkIHY5ZnNfY2FjaGVfaW5vZGVfcHV0X2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IHY5ZnNfaW5vZGUyY29va2llKGlub2RlKTsKKworCWlmICghdmNvb2tpZS0+ZnNjYWNoZSkKKwkJcmV0dXJuOworCVA5X0RQUklOVEsoUDlfREVCVUdfRlNDLCAiaW5vZGUgJXAgcHV0IGNvb2tpZSAlcCIsIGlub2RlLAorCQkgICB2Y29va2llLT5mc2NhY2hlKTsKKworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUodmNvb2tpZS0+ZnNjYWNoZSwgMCk7CisJdmNvb2tpZS0+ZnNjYWNoZSA9IE5VTEw7Cit9CisKK3ZvaWQgdjlmc19jYWNoZV9pbm9kZV9mbHVzaF9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgdjlmc19jb29raWUgKnZjb29raWUgPSB2OWZzX2lub2RlMmNvb2tpZShpbm9kZSk7CisKKwlpZiAoIXZjb29raWUtPmZzY2FjaGUpCisJCXJldHVybjsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0ZTQywgImlub2RlICVwIGZsdXNoIGNvb2tpZSAlcCIsIGlub2RlLAorCQkgICB2Y29va2llLT5mc2NhY2hlKTsKKworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUodmNvb2tpZS0+ZnNjYWNoZSwgMSk7CisJdmNvb2tpZS0+ZnNjYWNoZSA9IE5VTEw7Cit9CisKK3ZvaWQgdjlmc19jYWNoZV9pbm9kZV9zZXRfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IHY5ZnNfaW5vZGUyY29va2llKGlub2RlKTsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisKKwlpZiAoIXZjb29raWUtPmZzY2FjaGUpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmdmNvb2tpZS0+bG9jayk7CisJZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpCisJCXY5ZnNfY2FjaGVfaW5vZGVfZmx1c2hfY29va2llKGlub2RlKTsKKwllbHNlCisJCXY5ZnNfY2FjaGVfaW5vZGVfZ2V0X2Nvb2tpZShpbm9kZSk7CisKKwlzcGluX3VubG9jaygmdmNvb2tpZS0+bG9jayk7Cit9CisKK3ZvaWQgdjlmc19jYWNoZV9pbm9kZV9yZXNldF9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgdjlmc19jb29raWUgKnZjb29raWUgPSB2OWZzX2lub2RlMmNvb2tpZShpbm9kZSk7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKm9sZDsKKworCWlmICghdmNvb2tpZS0+ZnNjYWNoZSkKKwkJcmV0dXJuOworCisJb2xkID0gdmNvb2tpZS0+ZnNjYWNoZTsKKworCXNwaW5fbG9jaygmdmNvb2tpZS0+bG9jayk7CisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh2Y29va2llLT5mc2NhY2hlLCAxKTsKKworCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhpbm9kZSk7CisJdmNvb2tpZS0+ZnNjYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUodjlzZXMtPmZzY2FjaGUsCisJCQkJCQkgICZ2OWZzX2NhY2hlX2lub2RlX2luZGV4X2RlZiwKKwkJCQkJCSAgdmNvb2tpZSk7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0ZTQywgImlub2RlICVwIHJldmFsaWRhdGluZyBjb29raWUgb2xkICVwIG5ldyAlcCIsCisJCSAgIGlub2RlLCBvbGQsIHZjb29raWUtPmZzY2FjaGUpOworCisJc3Bpbl91bmxvY2soJnZjb29raWUtPmxvY2spOworfQorCitpbnQgX192OWZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHY5ZnNfY29va2llICp2Y29va2llID0gdjlmc19pbm9kZTJjb29raWUoaW5vZGUpOworCisJQlVHX09OKCF2Y29va2llLT5mc2NhY2hlKTsKKworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkgeworCQlpZiAoZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKHZjb29raWUtPmZzY2FjaGUsIHBhZ2UpKSB7CisJCQlpZiAoIShnZnAgJiBfX0dGUF9XQUlUKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHZjb29raWUtPmZzY2FjaGUsIHBhZ2UpOworCQl9CisKKwkJZnNjYWNoZV91bmNhY2hlX3BhZ2UodmNvb2tpZS0+ZnNjYWNoZSwgcGFnZSk7CisJCUNsZWFyUGFnZUZzQ2FjaGUocGFnZSk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgX192OWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IHY5ZnNfaW5vZGUyY29va2llKGlub2RlKTsKKworCUJVR19PTighdmNvb2tpZS0+ZnNjYWNoZSk7CisKKwlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpIHsKKwkJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUodmNvb2tpZS0+ZnNjYWNoZSwgcGFnZSk7CisJCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKHZjb29raWUtPmZzY2FjaGUsIHBhZ2UpOworCQlDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpOworCX0KK30KKworc3RhdGljIHZvaWQgdjlmc192ZnNfcmVhZHBhZ2VfY29tcGxldGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmRhdGEsCisJCQkJICAgICAgIGludCBlcnJvcikKK3sKKwlpZiAoIWVycm9yKQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisKKwl1bmxvY2tfcGFnZShwYWdlKTsKK30KKworLyoqCisgKiBfX3Y5ZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlIC0gcmVhZCBhIHBhZ2UgZnJvbSBjYWNoZQorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgcGFnZXMgYXJlIGluIGNhY2hlIGFuZCBhIEJJTyBpcyBzdWJtaXR0ZWQsCisgKiAxIGlmIHRoZSBwYWdlcyBhcmUgbm90IGluIGNhY2hlIGFuZCAtZXJyb3Igb3RoZXJ3aXNlLgorICovCisKK2ludCBfX3Y5ZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IHY5ZnNfY29va2llICp2Y29va2llID0gdjlmc19pbm9kZTJjb29raWUoaW5vZGUpOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJpbm9kZSAlcCBwYWdlICVwIiwgaW5vZGUsIHBhZ2UpOworCWlmICghdmNvb2tpZS0+ZnNjYWNoZSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2UodmNvb2tpZS0+ZnNjYWNoZSwKKwkJCQkJIHBhZ2UsCisJCQkJCSB2OWZzX3Zmc19yZWFkcGFnZV9jb21wbGV0ZSwKKwkJCQkJIE5VTEwsCisJCQkJCSBHRlBfS0VSTkVMKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVOT0JVRlM6CisJY2FzZSAtRU5PREFUQToKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJwYWdlL2lub2RlIG5vdCBpbiBjYWNoZSAlZCIsIHJldCk7CisJCXJldHVybiAxOworCWNhc2UgMDoKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJCSU8gc3VibWl0dGVkIik7CisJCXJldHVybiByZXQ7CisJZGVmYXVsdDoKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJyZXQgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KK30KKworLyoqCisgKiBfX3Y5ZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZSAtIHJlYWQgbXVsdGlwbGUgcGFnZXMgZnJvbSBjYWNoZQorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgcGFnZXMgYXJlIGluIGNhY2hlIGFuZCBhIEJJTyBpcyBzdWJtaXR0ZWQsCisgKiAxIGlmIHRoZSBwYWdlcyBhcmUgbm90IGluIGNhY2hlIGFuZCAtZXJyb3Igb3RoZXJ3aXNlLgorICovCisKK2ludCBfX3Y5ZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkgIHVuc2lnbmVkICpucl9wYWdlcykKK3sKKwlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IHY5ZnNfaW5vZGUyY29va2llKGlub2RlKTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfRlNDLCAiaW5vZGUgJXAgcGFnZXMgJXUiLCBpbm9kZSwgKm5yX3BhZ2VzKTsKKwlpZiAoIXZjb29raWUtPmZzY2FjaGUpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXJldCA9IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyh2Y29va2llLT5mc2NhY2hlLAorCQkJCQkgIG1hcHBpbmcsIHBhZ2VzLCBucl9wYWdlcywKKwkJCQkJICB2OWZzX3Zmc19yZWFkcGFnZV9jb21wbGV0ZSwKKwkJCQkJICBOVUxMLAorCQkJCQkgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAtRU5PQlVGUzoKKwljYXNlIC1FTk9EQVRBOgorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0ZTQywgInBhZ2VzL2lub2RlcyBub3QgaW4gY2FjaGUgJWQiLCByZXQpOworCQlyZXR1cm4gMTsKKwljYXNlIDA6CisJCUJVR19PTighbGlzdF9lbXB0eShwYWdlcykpOworCQlCVUdfT04oKm5yX3BhZ2VzICE9IDApOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0ZTQywgIkJJTyBzdWJtaXR0ZWQiKTsKKwkJcmV0dXJuIHJldDsKKwlkZWZhdWx0OgorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0ZTQywgInJldCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorfQorCisvKioKKyAqIF9fdjlmc19yZWFkcGFnZV90b19mc2NhY2hlIC0gd3JpdGUgYSBwYWdlIHRvIHRoZSBjYWNoZQorICoKKyAqLworCit2b2lkIF9fdjlmc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IHY5ZnNfY29va2llICp2Y29va2llID0gdjlmc19pbm9kZTJjb29raWUoaW5vZGUpOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19GU0MsICJpbm9kZSAlcCBwYWdlICVwIiwgaW5vZGUsIHBhZ2UpOworCXJldCA9IGZzY2FjaGVfd3JpdGVfcGFnZSh2Y29va2llLT5mc2NhY2hlLCBwYWdlLCBHRlBfS0VSTkVMKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0ZTQywgInJldCA9ICAlZCIsIHJldCk7CisJaWYgKHJldCAhPSAwKQorCQl2OWZzX3VuY2FjaGVfcGFnZShpbm9kZSwgcGFnZSk7Cit9CmRpZmYgLS1naXQgYS9mcy85cC9jYWNoZS5oIGIvZnMvOXAvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQxOTJiCi0tLSAvZGV2L251bGwKKysrIGIvZnMvOXAvY2FjaGUuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIFY5RlMgY2FjaGUgZGVmaW5pdGlvbnMuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBieSBBYmhpc2hlayBLdWxrYXJuaSA8YWRrdWxrYXJAdW1haWwuaXUuZWR1PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG86CisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKiAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgorICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF85UF9DQUNIRV9ICisjaWZkZWYgQ09ORklHXzlQX0ZTQ0FDSEUKKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICp2Y29va2llX2NhY2hlOworCitzdHJ1Y3Qgdjlmc19jb29raWUgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgaW5vZGUgaW5vZGU7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpmc2NhY2hlOworCXN0cnVjdCBwOV9xaWQgKnFpZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHY5ZnNfY29va2llICp2OWZzX2lub2RlMmNvb2tpZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCB2OWZzX2Nvb2tpZSwgaW5vZGUpOworfQorCitleHRlcm4gc3RydWN0IGZzY2FjaGVfbmV0ZnMgdjlmc19jYWNoZV9uZXRmczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIHY5ZnNfY2FjaGVfc2Vzc2lvbl9pbmRleF9kZWY7CitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiB2OWZzX2NhY2hlX2lub2RlX2luZGV4X2RlZjsKKworZXh0ZXJuIHZvaWQgdjlmc19jYWNoZV9zZXNzaW9uX2dldF9jb29raWUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyk7CitleHRlcm4gdm9pZCB2OWZzX2NhY2hlX3Nlc3Npb25fcHV0X2Nvb2tpZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzKTsKKworZXh0ZXJuIHZvaWQgdjlmc19jYWNoZV9pbm9kZV9nZXRfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgdjlmc19jYWNoZV9pbm9kZV9wdXRfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgdjlmc19jYWNoZV9pbm9kZV9mbHVzaF9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCB2OWZzX2NhY2hlX2lub2RlX3NldF9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIHZvaWQgdjlmc19jYWNoZV9pbm9kZV9yZXNldF9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSk7CisKK2V4dGVybiBpbnQgX192OWZzX2NhY2hlX3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgX192OWZzX2NhY2hlX3VucmVnaXN0ZXIodm9pZCk7CisKK2V4dGVybiBpbnQgX192OWZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApOworZXh0ZXJuIHZvaWQgX192OWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiBpbnQgX192OWZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gaW50IF9fdjlmc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCQkgdW5zaWduZWQgKm5yX3BhZ2VzKTsKK2V4dGVybiB2b2lkIF9fdjlmc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKTsKKworCisvKioKKyAqIHY5ZnNfY2FjaGVfcmVnaXN0ZXIgLSBSZWdpc3RlciB2OWZzIGZpbGUgc3lzdGVtIHdpdGggdGhlIGNhY2hlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHY5ZnNfY2FjaGVfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gX192OWZzX2NhY2hlX3JlZ2lzdGVyKCk7Cit9CisKKy8qKgorICogdjlmc19jYWNoZV91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciB2OWZzIGZyb20gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2OWZzX2NhY2hlX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlfX3Y5ZnNfY2FjaGVfdW5yZWdpc3RlcigpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2OWZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBfX3Y5ZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2UocGFnZSwgZ2ZwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHY5ZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX192OWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2OWZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBfX3Y5ZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKGlub2RlLCBwYWdlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdjlmc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkJICAgICAgdW5zaWduZWQgKm5yX3BhZ2VzKQoreworCXJldHVybiBfX3Y5ZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShpbm9kZSwgbWFwcGluZywgcGFnZXMsCisJCQkJCSAgICAgbnJfcGFnZXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdjlmc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpCisJCV9fdjlmc19yZWFkcGFnZV90b19mc2NhY2hlKGlub2RlLCBwYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHY5ZnNfdW5jYWNoZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IHY5ZnNfaW5vZGUyY29va2llKGlub2RlKTsKKwlmc2NhY2hlX3VuY2FjaGVfcGFnZSh2Y29va2llLT5mc2NhY2hlLCBwYWdlKTsKKwlCVUdfT04oUGFnZUZzQ2FjaGUocGFnZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdjlmc192Y29va2llX3NldF9xaWQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IHA5X3FpZCAqcWlkKQoreworCXN0cnVjdCB2OWZzX2Nvb2tpZSAqdmNvb2tpZSA9IHY5ZnNfaW5vZGUyY29va2llKGlub2RlKTsKKwlzcGluX2xvY2soJnZjb29raWUtPmxvY2spOworCXZjb29raWUtPnFpZCA9IHFpZDsKKwlzcGluX3VubG9jaygmdmNvb2tpZS0+bG9jayk7Cit9CisKKyNlbHNlIC8qIENPTkZJR185UF9GU0NBQ0hFICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHY5ZnNfY2FjaGVfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHY5ZnNfY2FjaGVfdW5yZWdpc3Rlcih2b2lkKSB7fQorCitzdGF0aWMgaW5saW5lIGludCB2OWZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgZ2ZwX3QgZ2ZwKSB7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2OWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKSB7fQorCitzdGF0aWMgaW5saW5lIGludCB2OWZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAtRU5PQlVGUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgdjlmc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkJICAgICAgdW5zaWduZWQgKm5yX3BhZ2VzKQoreworCXJldHVybiAtRU5PQlVGUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHY5ZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7fQorCitzdGF0aWMgaW5saW5lIHZvaWQgdjlmc191bmNhY2hlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7fQorCitzdGF0aWMgaW5saW5lIHZvaWQgdjlmc192Y29va2llX3NldF9xaWQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IHA5X3FpZCAqcWlkKQore30KKworI2VuZGlmIC8qIENPTkZJR185UF9GU0NBQ0hFICovCisjZW5kaWYgLyogXzlQX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCBmNzAwM2NmLi5jZjYyYjA1IDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC0zNCwyMSArMzQsMjUgQEAKICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSAidjlmcy5oIgogI2luY2x1ZGUgInY5ZnNfdmZzLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RhdGljIERFRklORV9TUElOTE9DSyh2OWZzX3Nlc3Npb25saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRCh2OWZzX3Nlc3Npb25saXN0KTsKIAogLyoKLSAgKiBPcHRpb24gUGFyc2luZyAoY29kZSBpbnNwaXJlZCBieSBORlMgY29kZSkKLSAgKiAgTk9URTogZWFjaCB0cmFuc3BvcnQgd2lsbCBwYXJzZSBpdHMgb3duIG9wdGlvbnMKLSAgKi8KKyAqIE9wdGlvbiBQYXJzaW5nIChjb2RlIGluc3BpcmVkIGJ5IE5GUyBjb2RlKQorICogIE5PVEU6IGVhY2ggdHJhbnNwb3J0IHdpbGwgcGFyc2UgaXRzIG93biBvcHRpb25zCisgKi8KIAogZW51bSB7CiAJLyogT3B0aW9ucyB0aGF0IHRha2UgaW50ZWdlciBhcmd1bWVudHMgKi8KIAlPcHRfZGVidWcsIE9wdF9kZmx0dWlkLCBPcHRfZGZsdGdpZCwgT3B0X2FmaWQsCiAJLyogU3RyaW5nIG9wdGlvbnMgKi8KLQlPcHRfdW5hbWUsIE9wdF9yZW1vdGVuYW1lLCBPcHRfdHJhbnMsCisJT3B0X3VuYW1lLCBPcHRfcmVtb3RlbmFtZSwgT3B0X3RyYW5zLCBPcHRfY2FjaGUsIE9wdF9jYWNoZXRhZywKIAkvKiBPcHRpb25zIHRoYXQgdGFrZSBubyBhcmd1bWVudHMgKi8KIAlPcHRfbm9kZXZtYXAsCiAJLyogQ2FjaGUgb3B0aW9ucyAqLwotCU9wdF9jYWNoZV9sb29zZSwKKwlPcHRfY2FjaGVfbG9vc2UsIE9wdF9mc2NhY2hlLAogCS8qIEFjY2VzcyBvcHRpb25zICovCiAJT3B0X2FjY2VzcywKIAkvKiBFcnJvciB0b2tlbiAqLwpAQCAtNjMsOCArNjcsMTAgQEAKIAl7T3B0X3VuYW1lLCAidW5hbWU9JXMifSwKIAl7T3B0X3JlbW90ZW5hbWUsICJhbmFtZT0lcyJ9LAogCXtPcHRfbm9kZXZtYXAsICJub2Rldm1hcCJ9LAotCXtPcHRfY2FjaGVfbG9vc2UsICJjYWNoZT1sb29zZSJ9LAorCXtPcHRfY2FjaGUsICJjYWNoZT0lcyJ9LAogCXtPcHRfY2FjaGVfbG9vc2UsICJsb29zZSJ9LAorCXtPcHRfZnNjYWNoZSwgImZzY2FjaGUifSwKKwl7T3B0X2NhY2hldGFnLCAiY2FjaGV0YWc9JXMifSwKIAl7T3B0X2FjY2VzcywgImFjY2Vzcz0lcyJ9LAogCXtPcHRfZXJyLCBOVUxMfQogfTsKQEAgLTg5LDE2ICs5NSwxNiBAQAogCXY5c2VzLT5hZmlkID0gfjA7CiAJdjlzZXMtPmRlYnVnID0gMDsKIAl2OXNlcy0+Y2FjaGUgPSAwOworI2lmZGVmIENPTkZJR185UF9GU0NBQ0hFCisJdjlzZXMtPmNhY2hldGFnID0gTlVMTDsKKyNlbmRpZgogCiAJaWYgKCFvcHRzKQogCQlyZXR1cm4gMDsKIAogCW9wdGlvbnMgPSBrc3RyZHVwKG9wdHMsIEdGUF9LRVJORUwpOwotCWlmICghb3B0aW9ucykgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBjb3B5IG9mIG9wdGlvbiBzdHJpbmdcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCFvcHRpb25zKQorCQlnb3RvIGZhaWxfb3B0aW9uX2FsbG9jOwogCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CiAJCWludCB0b2tlbjsKQEAgLTE0MywxNiArMTQ5LDMzIEBACiAJCWNhc2UgT3B0X2NhY2hlX2xvb3NlOgogCQkJdjlzZXMtPmNhY2hlID0gQ0FDSEVfTE9PU0U7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZnNjYWNoZToKKwkJCXY5c2VzLT5jYWNoZSA9IENBQ0hFX0ZTQ0FDSEU7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfY2FjaGV0YWc6CisjaWZkZWYgQ09ORklHXzlQX0ZTQ0FDSEUKKwkJCXY5c2VzLT5jYWNoZXRhZyA9IG1hdGNoX3N0cmR1cCgmYXJnc1swXSk7CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIE9wdF9jYWNoZToKKwkJCXMgPSBtYXRjaF9zdHJkdXAoJmFyZ3NbMF0pOworCQkJaWYgKCFzKQorCQkJCWdvdG8gZmFpbF9vcHRpb25fYWxsb2M7CisKKwkJCWlmIChzdHJjbXAocywgImxvb3NlIikgPT0gMCkKKwkJCQl2OXNlcy0+Y2FjaGUgPSBDQUNIRV9MT09TRTsKKwkJCWVsc2UgaWYgKHN0cmNtcChzLCAiZnNjYWNoZSIpID09IDApCisJCQkJdjlzZXMtPmNhY2hlID0gQ0FDSEVfRlNDQUNIRTsKKwkJCWVsc2UKKwkJCQl2OXNlcy0+Y2FjaGUgPSBDQUNIRV9OT05FOworCQkJa2ZyZWUocyk7CisJCQlicmVhazsKIAogCQljYXNlIE9wdF9hY2Nlc3M6CiAJCQlzID0gbWF0Y2hfc3RyZHVwKCZhcmdzWzBdKTsKLQkJCWlmICghcykgewotCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCi0JCQkJCSAgICJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSIKLQkJCQkJICAgIiBvZiBvcHRpb24gYXJndW1lbnRcbiIpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlpZiAoIXMpCisJCQkJZ290byBmYWlsX29wdGlvbl9hbGxvYzsKKwogCQkJdjlzZXMtPmZsYWdzICY9IH5WOUZTX0FDQ0VTU19NQVNLOwogCQkJaWYgKHN0cmNtcChzLCAidXNlciIpID09IDApCiAJCQkJdjlzZXMtPmZsYWdzIHw9IFY5RlNfQUNDRVNTX1VTRVI7CkBAIC0xNzMsNiArMTk2LDExIEBACiAJfQogCWtmcmVlKG9wdGlvbnMpOwogCXJldHVybiByZXQ7CisKK2ZhaWxfb3B0aW9uX2FsbG9jOgorCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCisJCSAgICJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gYXJndW1lbnRcbiIpOworCXJldHVybiAtRU5PTUVNOwogfQogCiAvKioKQEAgLTIwMCw2ICsyMjgsMTAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCisJc3Bpbl9sb2NrKCZ2OWZzX3Nlc3Npb25saXN0X2xvY2spOworCWxpc3RfYWRkKCZ2OXNlcy0+c2xpc3QsICZ2OWZzX3Nlc3Npb25saXN0KTsKKwlzcGluX3VubG9jaygmdjlmc19zZXNzaW9ubGlzdF9sb2NrKTsKKwogCXY5c2VzLT5mbGFncyA9IFY5RlNfRVhURU5ERUQgfCBWOUZTX0FDQ0VTU19VU0VSOwogCXN0cmNweSh2OXNlcy0+dW5hbWUsIFY5RlNfREVGVVNFUik7CiAJc3RyY3B5KHY5c2VzLT5hbmFtZSwgVjlGU19ERUZBTkFNRSk7CkBAIC0yNDksNiArMjgxLDExIEBACiAJZWxzZQogCQlmaWQtPnVpZCA9IH4wOwogCisjaWZkZWYgQ09ORklHXzlQX0ZTQ0FDSEUKKwkvKiByZWdpc3RlciB0aGUgc2Vzc2lvbiBmb3IgY2FjaGluZyAqLworCXY5ZnNfY2FjaGVfc2Vzc2lvbl9nZXRfY29va2llKHY5c2VzKTsKKyNlbmRpZgorCiAJcmV0dXJuIGZpZDsKIAogZXJyb3I6CkBAIC0yNjgsOCArMzA1LDE4IEBACiAJCXY5c2VzLT5jbG50ID0gTlVMTDsKIAl9CiAKKyNpZmRlZiBDT05GSUdfOVBfRlNDQUNIRQorCWlmICh2OXNlcy0+ZnNjYWNoZSkgeworCQl2OWZzX2NhY2hlX3Nlc3Npb25fcHV0X2Nvb2tpZSh2OXNlcyk7CisJCWtmcmVlKHY5c2VzLT5jYWNoZXRhZyk7CisJfQorI2VuZGlmCiAJX19wdXRuYW1lKHY5c2VzLT51bmFtZSk7CiAJX19wdXRuYW1lKHY5c2VzLT5hbmFtZSk7CisKKwlzcGluX2xvY2soJnY5ZnNfc2Vzc2lvbmxpc3RfbG9jayk7CisJbGlzdF9kZWwoJnY5c2VzLT5zbGlzdCk7CisJc3Bpbl91bmxvY2soJnY5ZnNfc2Vzc2lvbmxpc3RfbG9jayk7CiB9CiAKIC8qKgpAQCAtMjg2LDI1ICszMzMsMTMyIEBACiAKIGV4dGVybiBpbnQgdjlmc19lcnJvcl9pbml0KHZvaWQpOwogCitzdGF0aWMgc3RydWN0IGtvYmplY3QgKnY5ZnNfa29iajsKKworI2lmZGVmIENPTkZJR185UF9GU0NBQ0hFCiAvKioKLSAqIHY5ZnNfaW5pdCAtIEluaXRpYWxpemUgbW9kdWxlCisgKiBjYWNoZXNfc2hvdyAtIGxpc3QgY2FjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIHNlc3Npb24KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIGJ1ZmZlciB3cml0dGVuLgorICovCisKK3N0YXRpYyBzc2l6ZV90IGNhY2hlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXNzaXplX3QgbiA9IDAsIGNvdW50ID0gMCwgbGltaXQgPSBQQUdFX1NJWkU7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKworCXNwaW5fbG9jaygmdjlmc19zZXNzaW9ubGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHY5c2VzLCAmdjlmc19zZXNzaW9ubGlzdCwgc2xpc3QpIHsKKwkJaWYgKHY5c2VzLT5jYWNoZXRhZykgeworCQkJbiA9IHNucHJpbnRmKGJ1ZiwgbGltaXQsICIlc1xuIiwgdjlzZXMtPmNhY2hldGFnKTsKKwkJCWlmIChuIDwgMCkgeworCQkJCWNvdW50ID0gbjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY291bnQgKz0gbjsKKwkJCWxpbWl0IC09IG47CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmdjlmc19zZXNzaW9ubGlzdF9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdjlmc19hdHRyX2NhY2hlID0gX19BVFRSX1JPKGNhY2hlcyk7CisjZW5kaWYgLyogQ09ORklHXzlQX0ZTQ0FDSEUgKi8KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnY5ZnNfYXR0cnNbXSA9IHsKKyNpZmRlZiBDT05GSUdfOVBfRlNDQUNIRQorCSZ2OWZzX2F0dHJfY2FjaGUuYXR0ciwKKyNlbmRpZgorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB2OWZzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gdjlmc19hdHRycywKK307CisKKy8qKgorICogdjlmc19zeXNmc19pbml0IC0gSW5pdGlhbGl6ZSB0aGUgdjlmcyBzeXNmcyBpbnRlcmZhY2UKKyAqCisgKi8KKworc3RhdGljIGludCB2OWZzX3N5c2ZzX2luaXQodm9pZCkKK3sKKwl2OWZzX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCI5cCIsIGZzX2tvYmopOworCWlmICghdjlmc19rb2JqKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAodjlmc19rb2JqLCAmdjlmc19hdHRyX2dyb3VwKSkgeworCQlrb2JqZWN0X3B1dCh2OWZzX2tvYmopOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2OWZzX3N5c2ZzX2NsZWFudXAgLSBVbnJlZ2lzdGVyIHRoZSB2OWZzIHN5c2ZzIGludGVyZmFjZQorICoKKyAqLworCitzdGF0aWMgdm9pZCB2OWZzX3N5c2ZzX2NsZWFudXAodm9pZCkKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAodjlmc19rb2JqLCAmdjlmc19hdHRyX2dyb3VwKTsKKwlrb2JqZWN0X3B1dCh2OWZzX2tvYmopOworfQorCisvKioKKyAqIGluaXRfdjlmcyAtIEluaXRpYWxpemUgbW9kdWxlCiAgKgogICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfdjlmcyh2b2lkKQogeworCWludCBlcnI7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSW5zdGFsbGluZyB2OWZzIDlwMjAwMCBmaWxlIHN5c3RlbSBzdXBwb3J0XG4iKTsKIAkvKiBUT0RPOiBTZXR1cCBsaXN0IG9mIHJlZ2lzdGVyZWQgdHJhc25wb3J0IG1vZHVsZXMgKi8KLQlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmdjlmc19mc190eXBlKTsKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZ2OWZzX2ZzX3R5cGUpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGZpbGVzeXN0ZW1cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHY5ZnNfY2FjaGVfcmVnaXN0ZXIoKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciB2OWZzIGZvciBjYWNoaW5nXG4iKTsKKwkJZ290byBvdXRfZnNfdW5yZWc7CisJfQorCisJZXJyID0gdjlmc19zeXNmc19pbml0KCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgd2l0aCBzeXNmc1xuIik7CisJCWdvdG8gb3V0X3N5c2ZzX2NsZWFudXA7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9zeXNmc19jbGVhbnVwOgorCXY5ZnNfc3lzZnNfY2xlYW51cCgpOworCitvdXRfZnNfdW5yZWc6CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZ2OWZzX2ZzX3R5cGUpOworCisJcmV0dXJuIGVycjsKIH0KIAogLyoqCi0gKiB2OWZzX2luaXQgLSBzaHV0ZG93biBtb2R1bGUKKyAqIGV4aXRfdjlmcyAtIHNodXRkb3duIG1vZHVsZQogICoKICAqLwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF92OWZzKHZvaWQpCiB7CisJdjlmc19zeXNmc19jbGVhbnVwKCk7CisJdjlmc19jYWNoZV91bnJlZ2lzdGVyKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZ2OWZzX2ZzX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9mcy85cC92OWZzLmggYi9mcy85cC92OWZzLmgKaW5kZXggMzg3NjJiZi4uMDE5ZjRjYyAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmcy5oCisrKyBiL2ZzLzlwL3Y5ZnMuaApAQCAtNTEsNiArNTEsNyBAQAogZW51bSBwOV9jYWNoZV9tb2RlcyB7CiAJQ0FDSEVfTk9ORSwKIAlDQUNIRV9MT09TRSwKKwlDQUNIRV9GU0NBQ0hFLAogfTsKIAogLyoqCkBAIC02MCw2ICs2MSw4IEBACiAgKiBAZGVidWc6IGRlYnVnIGxldmVsCiAgKiBAYWZpZDogYXV0aGVudGljYXRpb24gaGFuZGxlCiAgKiBAY2FjaGU6IGNhY2hlIG1vZGUgb2YgdHlwZSAmcDlfY2FjaGVfbW9kZXMKKyAqIEBjYWNoZXRhZzogdGhlIHRhZyBvZiB0aGUgY2FjaGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbgorICogQGZzY2FjaGU6IHNlc3Npb24gY29va2llIGFzc29jaWF0ZWQgd2l0aCBGUy1DYWNoZQogICogQG9wdGlvbnM6IGNvcHkgb2Ygb3B0aW9ucyBzdHJpbmcgZ2l2ZW4gYnkgdXNlcgogICogQHVuYW1lOiBzdHJpbmcgdXNlciBuYW1lIHRvIG1vdW50IGhpZXJhcmNoeSBhcwogICogQGFuYW1lOiBtb3VudCBzcGVjaWZpZXIgZm9yIHJlbW90ZSBoaWVyYXJjaHkKQEAgLTY4LDcgKzcxLDcgQEAKICAqIEBkZmx0Z2lkOiBkZWZhdWx0IG51bWVyaWMgZ3JvdXBpZCB0byBtb3VudCBoaWVyYXJjaHkgYXMKICAqIEB1aWQ6IGlmICVWOUZTX0FDQ0VTU19TSU5HTEUsIHRoZSBudW1lcmljIHVpZCB3aGljaCBtb3VudGVkIHRoZSBoaWVyYXJjaHkKICAqIEBjbG50OiByZWZlcmVuY2UgdG8gOVAgbmV0d29yayBjbGllbnQgaW5zdGFudGlhdGVkIGZvciB0aGlzIHNlc3Npb24KLSAqIEBkZWJ1Z2ZzX2RpcjogcmVmZXJlbmNlIHRvIGRlYnVnZnNfZGlyIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBhZGQnbCBkZWJ1ZworICogQHNsaXN0OiByZWZlcmVuY2UgdG8gbGlzdCBvZiByZWdpc3RlcmVkIDlwIHNlc3Npb25zCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgc3RhdGUgZm9yIGVhY2ggc2Vzc2lvbiBpbnN0YW5jZSBlc3RhYmxpc2hlZCBkdXJpbmcKICAqIGEgc3lzX21vdW50KCkgLgpAQCAtODQsNiArODcsMTAgQEAKIAl1bnNpZ25lZCBzaG9ydCBkZWJ1ZzsKIAl1bnNpZ25lZCBpbnQgYWZpZDsKIAl1bnNpZ25lZCBpbnQgY2FjaGU7CisjaWZkZWYgQ09ORklHXzlQX0ZTQ0FDSEUKKwljaGFyICpjYWNoZXRhZzsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmZzY2FjaGU7CisjZW5kaWYKIAogCWNoYXIgKnVuYW1lOwkJLyogdXNlciBuYW1lIHRvIG1vdW50IGFzICovCiAJY2hhciAqYW5hbWU7CQkvKiBuYW1lIG9mIHJlbW90ZSBoaWVyYXJjaHkgYmVpbmcgbW91bnRlZCAqLwpAQCAtOTIsMTEgKzk5LDkgQEAKIAl1bnNpZ25lZCBpbnQgZGZsdGdpZDsJLyogZGVmYXVsdCBnaWQgZm9yIGxlZ2FjeSBzdXBwb3J0ICovCiAJdTMyIHVpZDsJCS8qIGlmIEFDQ0VTU19TSU5HTEUsIHRoZSB1aWQgdGhhdCBoYXMgYWNjZXNzICovCiAJc3RydWN0IHA5X2NsaWVudCAqY2xudDsJLyogOXAgY2xpZW50ICovCi0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXI7CisJc3RydWN0IGxpc3RfaGVhZCBzbGlzdDsgLyogbGlzdCBvZiBzZXNzaW9ucyByZWdpc3RlcmVkIHdpdGggdjlmcyAqLwogfTsKIAotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnY5ZnNfZGVidWdmc19yb290OwotCiBzdHJ1Y3QgcDlfZmlkICp2OWZzX3Nlc3Npb25faW5pdChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKiwgY29uc3QgY2hhciAqLAogCQkJCQkJCQkJY2hhciAqKTsKIHZvaWQgdjlmc19zZXNzaW9uX2Nsb3NlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggZjBjN2RlNy4uM2E3NTYwZSAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC00NCw3ICs0NCwxMyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2RlbnRyeV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9uczsKIAorI2lmZGVmIENPTkZJR185UF9GU0NBQ0hFCitzdHJ1Y3QgaW5vZGUgKnY5ZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIHY5ZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKyNlbmRpZgorCiBzdHJ1Y3QgaW5vZGUgKnY5ZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlKTsKK3ZvaWQgdjlmc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGlub190IHY5ZnNfcWlkMmlubyhzdHJ1Y3QgcDlfcWlkICpxaWQpOwogdm9pZCB2OWZzX3N0YXQyaW5vZGUoc3RydWN0IHA5X3dzdGF0ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBpbnQgdjlmc19kaXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfYWRkci5jIGIvZnMvOXAvdmZzX2FkZHIuYwppbmRleCA5MjgyODI4Li45MGUzODQ0IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfYWRkci5jCisrKyBiL2ZzLzlwL3Zmc19hZGRyLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgInY5ZnMuaCIKICNpbmNsdWRlICJ2OWZzX3Zmcy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCiAKIC8qKgogICogdjlmc192ZnNfcmVhZHBhZ2UgLSByZWFkIGFuIGVudGlyZSBwYWdlIGluIGZyb20gOVAKQEAgLTUyLDE4ICs1MywzMSBAQAogCWludCByZXR2YWw7CiAJbG9mZl90IG9mZnNldDsKIAljaGFyICpidWZmZXI7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAorCWlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIlxuIik7CisKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJcmV0dmFsID0gdjlmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoaW5vZGUsIHBhZ2UpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKwogCWJ1ZmZlciA9IGttYXAocGFnZSk7CiAJb2Zmc2V0ID0gcGFnZV9vZmZzZXQocGFnZSk7CiAKIAlyZXR2YWwgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgYnVmZmVyLCBOVUxMLCBQQUdFX0NBQ0hFX1NJWkUsIG9mZnNldCk7Ci0JaWYgKHJldHZhbCA8IDApCisJaWYgKHJldHZhbCA8IDApIHsKKwkJdjlmc191bmNhY2hlX3BhZ2UoaW5vZGUsIHBhZ2UpOwogCQlnb3RvIGRvbmU7CisJfQogCiAJbWVtc2V0KGJ1ZmZlciArIHJldHZhbCwgMCwgUEFHRV9DQUNIRV9TSVpFIC0gcmV0dmFsKTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisKKwl2OWZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoaW5vZGUsIHBhZ2UpOwogCXJldHZhbCA9IDA7CiAKIGRvbmU6CkBAIC03Miw2ICs4Niw3OCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICogdjlmc192ZnNfcmVhZHBhZ2VzIC0gcmVhZCBhIHNldCBvZiBwYWdlcyBmcm9tIDlQCisgKgorICogQGZpbHA6IGZpbGUgYmVpbmcgcmVhZAorICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzIHNwYWNlCisgKiBAcGFnZXM6IGxpc3Qgb2YgcGFnZXMgdG8gcmVhZAorICogQG5yX3BhZ2VzOiBjb3VudCBvZiBwYWdlcyB0byByZWFkCisgKgorICovCisKK3N0YXRpYyBpbnQgdjlmc192ZnNfcmVhZHBhZ2VzKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZTogJXAgZmlsZTogJXBcbiIsIGlub2RlLCBmaWxwKTsKKworCXJldCA9IHY5ZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShpbm9kZSwgbWFwcGluZywgcGFnZXMsICZucl9wYWdlcyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcmVhZF9jYWNoZV9wYWdlcyhtYXBwaW5nLCBwYWdlcywgKHZvaWQgKil2OWZzX3Zmc19yZWFkcGFnZSwgZmlscCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICIgID0gJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2OWZzX3JlbGVhc2VfcGFnZSAtIHJlbGVhc2UgdGhlIHByaXZhdGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZQorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgcGFnZSBjYW4gYmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworCitzdGF0aWMgaW50IHY5ZnNfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApCit7CisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB2OWZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHBhZ2UsIGdmcCk7Cit9CisKKy8qKgorICogdjlmc19pbnZhbGlkYXRlX3BhZ2UgLSBJbnZhbGlkYXRlIGEgcGFnZSBjb21wbGV0ZWx5IG9yIHBhcnRpYWxseQorICoKKyAqIEBwYWdlOiBzdHJ1Y3R1cmUgdG8gcGFnZQorICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBwYWdlCisgKi8KKworc3RhdGljIHZvaWQgdjlmc19pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPT0gMCkKKwkJdjlmc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShwYWdlKTsKK30KKworLyoqCisgKiB2OWZzX2xhdW5kZXJfcGFnZSAtIFdyaXRlYmFjayBhIGRpcnR5IHBhZ2UKKyAqIFNpbmNlIHRoZSB3cml0ZXMgZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZlciwgd2Ugc2ltcGx5IHJldHVybiBhIDAKKyAqIGhlcmUgdG8gaW5kaWNhdGUgc3VjY2Vzcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworCitzdGF0aWMgaW50IHY5ZnNfbGF1bmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAwOworfQorCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHY5ZnNfYWRkcl9vcGVyYXRpb25zID0gewogICAgICAgLnJlYWRwYWdlID0gdjlmc192ZnNfcmVhZHBhZ2UsCisgICAgICAucmVhZHBhZ2VzID0gdjlmc192ZnNfcmVhZHBhZ2VzLAorICAgICAgLnJlbGVhc2VwYWdlID0gdjlmc19yZWxlYXNlX3BhZ2UsCisgICAgICAuaW52YWxpZGF0ZXBhZ2UgPSB2OWZzX2ludmFsaWRhdGVfcGFnZSwKKyAgICAgIC5sYXVuZGVyX3BhZ2UgPSB2OWZzX2xhdW5kZXJfcGFnZSwKIH07CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCA2OGJmMmFmLi4zOTAyYmY0IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPG5ldC85cC85cC5oPgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgInY5ZnMuaCIKICNpbmNsdWRlICJ2OWZzX3Zmcy5oIgogI2luY2x1ZGUgImZpZC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2ZpbGVfb3BlcmF0aW9uczsKIApAQCAtNzIsNyArNzQsNyBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCQlpZiAob21vZGUgJiBQOV9PVFJVTkMpIHsKLQkJCWlub2RlLT5pX3NpemUgPSAwOworCQkJaV9zaXplX3dyaXRlKGlub2RlLCAwKTsKIAkJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCX0KIAkJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICghdjlmc19leHRlbmRlZCh2OXNlcykpKQpAQCAtODUsNiArODcsMTAgQEAKIAkJLyogZW5hYmxlIGNhY2hlZCBmaWxlIG9wdGlvbnMgKi8KIAkJaWYoZmlsZS0+Zl9vcCA9PSAmdjlmc19maWxlX29wZXJhdGlvbnMpCiAJCQlmaWxlLT5mX29wID0gJnY5ZnNfY2FjaGVkX2ZpbGVfb3BlcmF0aW9uczsKKworI2lmZGVmIENPTkZJR185UF9GU0NBQ0hFCisJCXY5ZnNfY2FjaGVfaW5vZGVfc2V0X2Nvb2tpZShpbm9kZSwgZmlsZSk7CisjZW5kaWYKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIxMCw2ICsyMTYsNyBAQAogCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IG9yaWdpbiA9ICpvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBwZ19zdGFydCwgcGdfZW5kOwogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJkYXRhICVwIGNvdW50ICVkIG9mZnNldCAleFxuIiwgZGF0YSwKIAkJKGludCljb3VudCwgKGludCkqb2Zmc2V0KTsKQEAgLTIyNSw3ICsyMzIsNyBAQAogCQlpZiAoY291bnQgPCByc2l6ZSkKIAkJCXJzaXplID0gY291bnQ7CiAKLQkJbiA9IHA5X2NsaWVudF93cml0ZShmaWQsIE5VTEwsIGRhdGErdG90YWwsICpvZmZzZXQrdG90YWwsCisJCW4gPSBwOV9jbGllbnRfd3JpdGUoZmlkLCBOVUxMLCBkYXRhK3RvdGFsLCBvcmlnaW4rdG90YWwsCiAJCQkJCQkJCQlyc2l6ZSk7CiAJCWlmIChuIDw9IDApCiAJCQlicmVhazsKQEAgLTIzNCwxNCArMjQxLDE0IEBACiAJfSB3aGlsZSAoY291bnQgPiAwKTsKIAogCWlmICh0b3RhbCA+IDApIHsKLQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgb3JpZ2luLAotCQkJCQkJCQlvcmlnaW4rdG90YWwpOworCQlwZ19zdGFydCA9IG9yaWdpbiA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQlwZ19lbmQgPSAob3JpZ2luICsgdG90YWwgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQlpZiAoaW5vZGUtPmlfbWFwcGluZyAmJiBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKQorCQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywKKwkJCQkJCSAgICAgIHBnX3N0YXJ0LCBwZ19lbmQpOwogCQkqb2Zmc2V0ICs9IHRvdGFsOwotCX0KLQotCWlmICgqb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkgewotCQlpbm9kZS0+aV9zaXplID0gKm9mZnNldDsKLQkJaW5vZGUtPmlfYmxvY2tzID0gKGlub2RlLT5pX3NpemUgKyA1MTIgLSAxKSA+PiA5OworCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSArIHRvdGFsKTsKKwkJaW5vZGUtPmlfYmxvY2tzID0gKGlfc2l6ZV9yZWFkKGlub2RlKSArIDUxMiAtIDEpID4+IDk7CiAJfQogCiAJaWYgKG4gPCAwKQpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCAwNmEyMjNkLi41OTQ3NjI4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgInY5ZnMuaCIKICNpbmNsdWRlICJ2OWZzX3Zmcy5oIgogI2luY2x1ZGUgImZpZC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZXh0OwpAQCAtMTk3LDYgKzE5OCwzOSBAQAogCXdzdGF0LT5leHRlbnNpb24gPSBOVUxMOwogfQogCisjaWZkZWYgQ09ORklHXzlQX0ZTQ0FDSEUKKy8qKgorICogdjlmc19hbGxvY19pbm9kZSAtIGhlbHBlciBmdW5jdGlvbiB0byBhbGxvY2F0ZSBhbiBpbm9kZQorICogVGhpcyBjYWxsYmFjayBpcyBleGVjdXRlZCBiZWZvcmUgc2V0dGluZyB1cCB0aGUgaW5vZGUgc28gdGhhdCB3ZQorICogY2FuIGFzc29jaWF0ZSBhIHZjb29raWUgd2l0aCBlYWNoIGlub2RlLgorICoKKyAqLworCitzdHJ1Y3QgaW5vZGUgKnY5ZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3Qgdjlmc19jb29raWUgKnZjb29raWU7CisJdmNvb2tpZSA9IChzdHJ1Y3Qgdjlmc19jb29raWUgKilrbWVtX2NhY2hlX2FsbG9jKHZjb29raWVfY2FjaGUsCisJCQkJCQkJIEdGUF9LRVJORUwpOworCWlmICghdmNvb2tpZSkKKwkJcmV0dXJuIE5VTEw7CisKKwl2Y29va2llLT5mc2NhY2hlID0gTlVMTDsKKwl2Y29va2llLT5xaWQgPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZ2Y29va2llLT5sb2NrKTsKKwlyZXR1cm4gJnZjb29raWUtPmlub2RlOworfQorCisvKioKKyAqIHY5ZnNfZGVzdHJveV9pbm9kZSAtIGRlc3Ryb3kgYW4gaW5vZGUKKyAqCisgKi8KKwordm9pZCB2OWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUodmNvb2tpZV9jYWNoZSwgdjlmc19pbm9kZTJjb29raWUoaW5vZGUpKTsKK30KKyNlbmRpZgorCiAvKioKICAqIHY5ZnNfZ2V0X2lub2RlIC0gaGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIGFuIGlub2RlCiAgKiBAc2I6IHN1cGVyYmxvY2sKQEAgLTMyNiw2ICszNjAsMjEgQEAKIH0KICovCiAKKworLyoqCisgKiB2OWZzX2NsZWFyX2lub2RlIC0gcmVsZWFzZSBhbiBpbm9kZQorICogQGlub2RlOiBpbm9kZSB0byByZWxlYXNlCisgKgorICovCit2b2lkIHY5ZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisKKyNpZmRlZiBDT05GSUdfOVBfRlNDQUNIRQorCXY5ZnNfY2FjaGVfaW5vZGVfcHV0X2Nvb2tpZShpbm9kZSk7CisjZW5kaWYKK30KKwogLyoqCiAgKiB2OWZzX2lub2RlX2Zyb21fZmlkIC0gcG9wdWxhdGUgYW4gaW5vZGUgYnkgaXNzdWluZyBhIGF0dHJpYnV0ZSByZXF1ZXN0CiAgKiBAdjlzZXM6IHNlc3Npb24gaW5mb3JtYXRpb24KQEAgLTM1Niw4ICs0MDUsMTQgQEAKIAogCXY5ZnNfc3RhdDJpbm9kZShzdCwgcmV0LCBzYik7CiAJcmV0LT5pX2lubyA9IHY5ZnNfcWlkMmlubygmc3QtPnFpZCk7CisKKyNpZmRlZiBDT05GSUdfOVBfRlNDQUNIRQorCXY5ZnNfdmNvb2tpZV9zZXRfcWlkKHJldCwgJnN0LT5xaWQpOworCXY5ZnNfY2FjaGVfaW5vZGVfZ2V0X2Nvb2tpZShyZXQpOworI2VuZGlmCiAJcDlzdGF0X2ZyZWUoc3QpOwogCWtmcmVlKHN0KTsKKwogCXJldHVybiByZXQ7CiAKIGVycm9yOgpAQCAtNzUxLDcgKzgwNiw3IEBACiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJkZW50cnk6ICVwXG4iLCBkZW50cnkpOwogCWVyciA9IC1FUEVSTTsKIAl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFKQorCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUpCiAJCXJldHVybiBzaW1wbGVfZ2V0YXR0cihtbnQsIGRlbnRyeSwgc3RhdCk7CiAKIAlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKQEAgLTg3MiwxMCArOTI3LDEwIEBACiAJfSBlbHNlCiAJCWlub2RlLT5pX3JkZXYgPSAwOwogCi0JaW5vZGUtPmlfc2l6ZSA9IHN0YXQtPmxlbmd0aDsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXQtPmxlbmd0aCk7CiAKIAkvKiBub3QgcmVhbCBudW1iZXIgb2YgYmxvY2tzLCBidXQgNTEyIGJ5dGUgb25lcyAuLi4gKi8KLQlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIDUxMiAtIDEpID4+IDk7CisJaW5vZGUtPmlfYmxvY2tzID0gKGlfc2l6ZV9yZWFkKGlub2RlKSArIDUxMiAtIDEpID4+IDk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCA4OTYxZjFhLi4xNGE4NjQ0IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtNDQsMjEgKzQ0LDkgQEAKICNpbmNsdWRlICJ2OWZzX3Zmcy5oIgogI2luY2x1ZGUgImZpZC5oIgogCi1zdGF0aWMgdm9pZCB2OWZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB2OWZzX3N1cGVyX29wczsKIAogLyoqCi0gKiB2OWZzX2NsZWFyX2lub2RlIC0gcmVsZWFzZSBhbiBpbm9kZQotICogQGlub2RlOiBpbm9kZSB0byByZWxlYXNlCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIHY5ZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci19Ci0KLS8qKgogICogdjlmc19zZXRfc3VwZXIgLSBzZXQgdGhlIHN1cGVyYmxvY2sKICAqIEBzOiBzdXBlciBibG9jawogICogQGRhdGE6IGZpbGUgc3lzdGVtIHNwZWNpZmljIGRhdGEKQEAgLTIyMCw2ICsyMDgsMTAgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHY5ZnNfc3VwZXJfb3BzID0geworI2lmZGVmIENPTkZJR185UF9GU0NBQ0hFCisJLmFsbG9jX2lub2RlID0gdjlmc19hbGxvY19pbm9kZSwKKwkuZGVzdHJveV9pbm9kZSA9IHY5ZnNfZGVzdHJveV9pbm9kZSwKKyNlbmRpZgogCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLAogCS5jbGVhcl9pbm9kZSA9IHY5ZnNfY2xlYXJfaW5vZGUsCiAJLnNob3dfb3B0aW9ucyA9IGdlbmVyaWNfc2hvd19vcHRpb25zLApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggNDU1YWEyMC4uZDRiZjhjYSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0xMDksNiArMTA5LDcgQEAKIAogY29uZmlnIFRNUEZTCiAJYm9vbCAiVmlydHVhbCBtZW1vcnkgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoZm9ybWVyIHNobSBmcykiCisJZGVwZW5kcyBvbiBTSE1FTQogCWhlbHAKIAkgIFRtcGZzIGlzIGEgZmlsZSBzeXN0ZW0gd2hpY2gga2VlcHMgYWxsIGZpbGVzIGluIHZpcnR1YWwgbWVtb3J5LgogCmRpZmYgLS1naXQgYS9mcy9hZnMvZmxvY2suYyBiL2ZzL2Fmcy9mbG9jay5jCmluZGV4IDNmZjhiZGQuLjA5MzFiYzEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9mbG9jay5jCisrKyBiL2ZzL2Fmcy9mbG9jay5jCkBAIC0yMSw3ICsyMSw3IEBACiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmFmc19sb2NrX21hbmFnZXI7CiBzdGF0aWMgREVGSU5FX01VVEVYKGFmc19sb2NrX21hbmFnZXJfbXV0ZXgpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfbG9ja19vcGVyYXRpb25zIGFmc19sb2NrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9sb2NrX29wZXJhdGlvbnMgYWZzX2xvY2tfb3BzID0gewogCS5mbF9jb3B5X2xvY2sJCT0gYWZzX2ZsX2NvcHlfbG9jaywKIAkuZmxfcmVsZWFzZV9wcml2YXRlCT0gYWZzX2ZsX3JlbGVhc2VfcHJpdmF0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9hZnMvcHJvYy5jIGIvZnMvYWZzL3Byb2MuYwppbmRleCA4NjMwNjE1Li44NTI3MzlkIDEwMDY0NAotLS0gYS9mcy9hZnMvcHJvYy5jCisrKyBiL2ZzL2Fmcy9wcm9jLmMKQEAgLTI4LDcgKzI4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGFmc19wcm9jX2NlbGxzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICBzaXplX3Qgc2l6ZSwgbG9mZl90ICpfcG9zKTsKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhZnNfcHJvY19jZWxsc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxzX29wcyA9IHsKIAkuc3RhcnQJPSBhZnNfcHJvY19jZWxsc19zdGFydCwKIAkubmV4dAk9IGFmc19wcm9jX2NlbGxzX25leHQsCiAJLnN0b3AJPSBhZnNfcHJvY19jZWxsc19zdG9wLApAQCAtNzAsNyArNzAsNyBAQAogc3RhdGljIHZvaWQgYWZzX3Byb2NfY2VsbF92b2x1bWVzX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgYWZzX3Byb2NfY2VsbF92b2x1bWVzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhZnNfcHJvY19jZWxsX3ZvbHVtZXNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhZnNfcHJvY19jZWxsX3ZvbHVtZXNfb3BzID0gewogCS5zdGFydAk9IGFmc19wcm9jX2NlbGxfdm9sdW1lc19zdGFydCwKIAkubmV4dAk9IGFmc19wcm9jX2NlbGxfdm9sdW1lc19uZXh0LAogCS5zdG9wCT0gYWZzX3Byb2NfY2VsbF92b2x1bWVzX3N0b3AsCkBAIC05NSw3ICs5NSw3IEBACiBzdGF0aWMgdm9pZCBhZnNfcHJvY19jZWxsX3Zsc2VydmVyc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiBzdGF0aWMgaW50IGFmc19wcm9jX2NlbGxfdmxzZXJ2ZXJzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhZnNfcHJvY19jZWxsX3Zsc2VydmVyc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxfdmxzZXJ2ZXJzX29wcyA9IHsKIAkuc3RhcnQJPSBhZnNfcHJvY19jZWxsX3Zsc2VydmVyc19zdGFydCwKIAkubmV4dAk9IGFmc19wcm9jX2NlbGxfdmxzZXJ2ZXJzX25leHQsCiAJLnN0b3AJPSBhZnNfcHJvY19jZWxsX3Zsc2VydmVyc19zdG9wLApAQCAtMTE5LDcgKzExOSw3IEBACiBzdGF0aWMgdm9pZCBhZnNfcHJvY19jZWxsX3NlcnZlcnNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpOwogc3RhdGljIGludCBhZnNfcHJvY19jZWxsX3NlcnZlcnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpOwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxfc2VydmVyc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxfc2VydmVyc19vcHMgPSB7CiAJLnN0YXJ0CT0gYWZzX3Byb2NfY2VsbF9zZXJ2ZXJzX3N0YXJ0LAogCS5uZXh0CT0gYWZzX3Byb2NfY2VsbF9zZXJ2ZXJzX25leHQsCiAJLnN0b3AJPSBhZnNfcHJvY19jZWxsX3NlcnZlcnNfc3RvcCwKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZDA2NWIyYy4uMDJhMmM5MyAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKKysrIGIvZnMvYWlvLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9haW8uaD4KQEAgLTM0LDcgKzM1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAogI2lmIERFQlVHID4gMQogI2RlZmluZSBkcHJpbnRrCQlwcmludGsKQEAgLTc4LDYgKzc4LDcgQEAKIAogCXJldHVybiAwOwogfQorX19pbml0Y2FsbChhaW9fc2V0dXApOwogCiBzdGF0aWMgdm9pZCBhaW9fZnJlZV9yaW5nKHN0cnVjdCBraW9jdHggKmN0eCkKIHsKQEAgLTM4MCw2ICszODEsNyBAQAogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZXR1cm4gaW9jYi0+a2lfdXNlcl9kYXRhOwogfQorRVhQT1JUX1NZTUJPTCh3YWl0X29uX3N5bmNfa2lvY2IpOwogCiAvKiBleGl0X2FpbzogY2FsbGVkIHdoZW4gdGhlIGxhc3QgdXNlciBvZiBtbSBnb2VzIGF3YXkuICBBdCB0aGlzIHBvaW50LCAKICAqIHRoZXJlIGlzIG5vIHdheSBmb3IgYW55IG5ldyByZXF1ZXN0cyB0byBiZSBzdWJtaXRlZCBvciBhbnkgb2YgdGhlIApAQCAtNTczLDYgKzU3NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChhaW9fcHV0X3JlcSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga2lvY3R4ICpsb29rdXBfaW9jdHgodW5zaWduZWQgbG9uZyBjdHhfaWQpCiB7CkBAIC01OTUsNTEgKzU5OCw2IEBACiB9CiAKIC8qCi0gKiB1c2VfbW0KLSAqCU1ha2VzIHRoZSBjYWxsaW5nIGtlcm5lbCB0aHJlYWQgdGFrZSBvbiB0aGUgc3BlY2lmaWVkCi0gKgltbSBjb250ZXh0LgotICoJQ2FsbGVkIGJ5IHRoZSByZXRyeSB0aHJlYWQgZXhlY3V0ZSByZXRyaWVzIHdpdGhpbiB0aGUKLSAqCWlvY2IgaXNzdWVyJ3MgbW0gY29udGV4dCwgc28gdGhhdCBjb3B5X2Zyb20vdG9fdXNlcgotICoJb3BlcmF0aW9ucyB3b3JrIHNlYW1sZXNzbHkgZm9yIGFpby4KLSAqCShOb3RlOiB0aGlzIHJvdXRpbmUgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIG9ubHkKLSAqCWZyb20gYSBrZXJuZWwgdGhyZWFkIGNvbnRleHQpCi0gKi8KLXN0YXRpYyB2b2lkIHVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JdGFza19sb2NrKHRzayk7Ci0JYWN0aXZlX21tID0gdHNrLT5hY3RpdmVfbW07Ci0JYXRvbWljX2luYygmbW0tPm1tX2NvdW50KTsKLQl0c2stPm1tID0gbW07Ci0JdHNrLT5hY3RpdmVfbW0gPSBtbTsKLQlzd2l0Y2hfbW0oYWN0aXZlX21tLCBtbSwgdHNrKTsKLQl0YXNrX3VubG9jayh0c2spOwotCi0JbW1kcm9wKGFjdGl2ZV9tbSk7Ci19Ci0KLS8qCi0gKiB1bnVzZV9tbQotICoJUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2VfbW0sIGkuZS4gcmVsZWFzZXMgdGhlCi0gKglzcGVjaWZpZWQgbW0gY29udGV4dCB3aGljaCB3YXMgZWFybGllciB0YWtlbiBvbgotICoJYnkgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZAotICoJKE5vdGU6IHRoaXMgcm91dGluZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seQotICoJZnJvbSBhIGtlcm5lbCB0aHJlYWQgY29udGV4dCkKLSAqLwotc3RhdGljIHZvaWQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JdGFza19sb2NrKHRzayk7Ci0JdHNrLT5tbSA9IE5VTEw7Ci0JLyogYWN0aXZlX21tIGlzIHN0aWxsICdtbScgKi8KLQllbnRlcl9sYXp5X3RsYihtbSwgdHNrKTsKLQl0YXNrX3VubG9jayh0c2spOwotfQotCi0vKgogICogUXVldWUgdXAgYSBraW9jYiB0byBiZSByZXRyaWVkLiBBc3N1bWVzIHRoYXQgdGhlIGtpb2NiCiAgKiBoYXMgYWxyZWFkeSBiZWVuIG1hcmtlZCBhcyBraWNrZWQsIGFuZCBwbGFjZXMgaXQgb24KICAqIHRoZSByZXRyeSBydW4gbGlzdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgaW9jdHgsIGlmIGl0CkBAIC0xMDM3LDYgKzk5NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5jdHhfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGFpb19jb21wbGV0ZSk7CiAKIC8qIGFpb19yZWFkX2V2dAogICoJUHVsbCBhbiBldmVudCBvZmYgb2YgdGhlIGlvY3R4J3MgZXZlbnQgcmluZy4gIFJldHVybnMgdGhlIG51bWJlciBvZiAKQEAgLTE4MjUsOSArMTc4NCwzIEBACiAJYXNtbGlua2FnZV9wcm90ZWN0KDUsIHJldCwgY3R4X2lkLCBtaW5fbnIsIG5yLCBldmVudHMsIHRpbWVvdXQpOwogCXJldHVybiByZXQ7CiB9Ci0KLV9faW5pdGNhbGwoYWlvX3NldHVwKTsKLQotRVhQT1JUX1NZTUJPTChhaW9fY29tcGxldGUpOwotRVhQT1JUX1NZTUJPTChhaW9fcHV0X3JlcSk7Ci1FWFBPUlRfU1lNQk9MKHdhaXRfb25fc3luY19raW9jYik7CmRpZmYgLS1naXQgYS9mcy9hbm9uX2lub2Rlcy5jIGIvZnMvYW5vbl9pbm9kZXMuYwppbmRleCA0N2Q0YTAxLi5kMTFjNTFmIDEwMDY0NAotLS0gYS9mcy9hbm9uX2lub2Rlcy5jCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTc3LDI4ICs3NywyNCBAQAogICoKICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBieSBob29raW5nIGl0IG9uIGEgc2luZ2xlIGlub2RlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZmlsZXMKICAqIHRoYXQgZG8gbm90IG5lZWQgdG8gaGF2ZSBhIGZ1bGwtZmxlZGdlZCBpbm9kZSBpbiBvcmRlciB0byBvcGVyYXRlIGNvcnJlY3RseS4KLSAqIEFsbCB0aGUgZmlsZXMgY3JlYXRlZCB3aXRoIGFub25faW5vZGVfZ2V0ZmQoKSB3aWxsIHNoYXJlIGEgc2luZ2xlIGlub2RlLAorICogQWxsIHRoZSBmaWxlcyBjcmVhdGVkIHdpdGggYW5vbl9pbm9kZV9nZXRmaWxlKCkgd2lsbCBzaGFyZSBhIHNpbmdsZSBpbm9kZSwKICAqIGhlbmNlIHNhdmluZyBtZW1vcnkgYW5kIGF2b2lkaW5nIGNvZGUgZHVwbGljYXRpb24gZm9yIHRoZSBmaWxlL2lub2RlL2RlbnRyeQotICogc2V0dXAuICBSZXR1cm5zIG5ldyBkZXNjcmlwdG9yIG9yIC1lcnJvci4KKyAqIHNldHVwLiAgUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlKiBvciBhbiBlcnJvciBwb2ludGVyLgogICovCi1pbnQgYW5vbl9pbm9kZV9nZXRmZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAotCQkgICAgIHZvaWQgKnByaXYsIGludCBmbGFncykKK3N0cnVjdCBmaWxlICphbm9uX2lub2RlX2dldGZpbGUoY29uc3QgY2hhciAqbmFtZSwKKwkJCQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQkJCXZvaWQgKnByaXYsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcXN0ciB0aGlzOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlpbnQgZXJyb3IsIGZkOworCWludCBlcnJvcjsKIAogCWlmIChJU19FUlIoYW5vbl9pbm9kZV9pbm9kZSkpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAogCWlmIChmb3BzLT5vd25lciAmJiAhdHJ5X21vZHVsZV9nZXQoZm9wcy0+b3duZXIpKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWVycm9yID0gZ2V0X3VudXNlZF9mZF9mbGFncyhmbGFncyk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBlcnJfbW9kdWxlOwotCWZkID0gZXJyb3I7CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCiAJLyoKIAkgKiBMaW5rIHRoZSBpbm9kZSB0byBhIGRpcmVjdG9yeSBlbnRyeSBieSBjcmVhdGluZyBhIHVuaXF1ZSBuYW1lCkBAIC0xMTAsNyArMTA2LDcgQEAKIAl0aGlzLmhhc2ggPSAwOwogCWRlbnRyeSA9IGRfYWxsb2MoYW5vbl9pbm9kZV9tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CiAJaWYgKCFkZW50cnkpCi0JCWdvdG8gZXJyX3B1dF91bnVzZWRfZmQ7CisJCWdvdG8gZXJyX21vZHVsZTsKIAogCS8qCiAJICogV2Uga25vdyB0aGUgYW5vbl9pbm9kZSBpbm9kZSBjb3VudCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIHplcm8sCkBAIC0xMzYsMTYgKzEzMiw1NCBAQAogCWZpbGUtPmZfdmVyc2lvbiA9IDA7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKIAorCXJldHVybiBmaWxlOworCitlcnJfZHB1dDoKKwlkcHV0KGRlbnRyeSk7CitlcnJfbW9kdWxlOgorCW1vZHVsZV9wdXQoZm9wcy0+b3duZXIpOworCXJldHVybiBFUlJfUFRSKGVycm9yKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFub25faW5vZGVfZ2V0ZmlsZSk7CisKKy8qKgorICogYW5vbl9pbm9kZV9nZXRmZCAtIGNyZWF0ZXMgYSBuZXcgZmlsZSBpbnN0YW5jZSBieSBob29raW5nIGl0IHVwIHRvIGFuCisgKiAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzIGlub2RlLCBhbmQgYSBkZW50cnkgdGhhdCBkZXNjcmliZSB0aGUgImNsYXNzIgorICogICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmaWxlCisgKgorICogQG5hbWU6ICAgIFtpbl0gICAgbmFtZSBvZiB0aGUgImNsYXNzIiBvZiB0aGUgbmV3IGZpbGUKKyAqIEBmb3BzOiAgICBbaW5dICAgIGZpbGUgb3BlcmF0aW9ucyBmb3IgdGhlIG5ldyBmaWxlCisgKiBAcHJpdjogICAgW2luXSAgICBwcml2YXRlIGRhdGEgZm9yIHRoZSBuZXcgZmlsZSAod2lsbCBiZSBmaWxlJ3MgcHJpdmF0ZV9kYXRhKQorICogQGZsYWdzOiAgIFtpbl0gICAgZmxhZ3MKKyAqCisgKiBDcmVhdGVzIGEgbmV3IGZpbGUgYnkgaG9va2luZyBpdCBvbiBhIHNpbmdsZSBpbm9kZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGZpbGVzCisgKiB0aGF0IGRvIG5vdCBuZWVkIHRvIGhhdmUgYSBmdWxsLWZsZWRnZWQgaW5vZGUgaW4gb3JkZXIgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisgKiBBbGwgdGhlIGZpbGVzIGNyZWF0ZWQgd2l0aCBhbm9uX2lub2RlX2dldGZkKCkgd2lsbCBzaGFyZSBhIHNpbmdsZSBpbm9kZSwKKyAqIGhlbmNlIHNhdmluZyBtZW1vcnkgYW5kIGF2b2lkaW5nIGNvZGUgZHVwbGljYXRpb24gZm9yIHRoZSBmaWxlL2lub2RlL2RlbnRyeQorICogc2V0dXAuICBSZXR1cm5zIG5ldyBkZXNjcmlwdG9yIG9yIGFuIGVycm9yIGNvZGUuCisgKi8KK2ludCBhbm9uX2lub2RlX2dldGZkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCSAgICAgdm9pZCAqcHJpdiwgaW50IGZsYWdzKQoreworCWludCBlcnJvciwgZmQ7CisJc3RydWN0IGZpbGUgKmZpbGU7CisKKwllcnJvciA9IGdldF91bnVzZWRfZmRfZmxhZ3MoZmxhZ3MpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKwlmZCA9IGVycm9yOworCisJZmlsZSA9IGFub25faW5vZGVfZ2V0ZmlsZShuYW1lLCBmb3BzLCBwcml2LCBmbGFncyk7CisJaWYgKElTX0VSUihmaWxlKSkgeworCQllcnJvciA9IFBUUl9FUlIoZmlsZSk7CisJCWdvdG8gZXJyX3B1dF91bnVzZWRfZmQ7CisJfQogCWZkX2luc3RhbGwoZmQsIGZpbGUpOwogCiAJcmV0dXJuIGZkOwogCi1lcnJfZHB1dDoKLQlkcHV0KGRlbnRyeSk7CiBlcnJfcHV0X3VudXNlZF9mZDoKIAlwdXRfdW51c2VkX2ZkKGZkKTsKLWVycl9tb2R1bGU6Ci0JbW9kdWxlX3B1dChmb3BzLT5vd25lcik7CiAJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYW5vbl9pbm9kZV9nZXRmZCk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnMvZGlyaGFzaC5jIGIvZnMvYXV0b2ZzL2Rpcmhhc2guYwppbmRleCAyMzE2ZTk0Li5lOTQ3OTE1IDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvZGlyaGFzaC5jCisrKyBiL2ZzL2F1dG9mcy9kaXJoYXNoLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkJCURQUklOVEsoKCJhdXRvZnM6IG5vdCBleHBpcmFibGUgKG5vdCBhIG1vdW50ZWQgZGlyZWN0b3J5KTogJXNcbiIsIGVudC0+bmFtZSkpOwogCQkJY29udGludWU7CiAJCX0KLQkJd2hpbGUgKGRfbW91bnRwb2ludChwYXRoLmRlbnRyeSkgJiYgZm9sbG93X2Rvd24oJnBhdGgpKTsKKwkJd2hpbGUgKGRfbW91bnRwb2ludChwYXRoLmRlbnRyeSkgJiYgZm9sbG93X2Rvd24oJnBhdGgpKQogCQkJOwogCQl1bW91bnRfb2sgPSBtYXlfdW1vdW50KHBhdGgubW50KTsKIAkJcGF0aF9wdXQoJnBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9saW51eHZmcy5jIGIvZnMvYmVmcy9saW51eHZmcy5jCmluZGV4IDYxNWQ1NDkuLmRkMzc2YzEgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvbGludXh2ZnMuYworKysgYi9mcy9iZWZzL2xpbnV4dmZzLmMKQEAgLTg0Miw3ICs4NDIsNyBAQAogCXNiLT5zX21hZ2ljID0gQkVGU19TVVBFUl9NQUdJQzsKIAkvKiBTZXQgcmVhbCBibG9ja3NpemUgb2YgZnMgKi8KIAlzYl9zZXRfYmxvY2tzaXplKHNiLCAodWxvbmcpIGJlZnNfc2ItPmJsb2NrX3NpemUpOwotCXNiLT5zX29wID0gKHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICopICZiZWZzX3NvcHM7CisJc2ItPnNfb3AgPSAmYmVmc19zb3BzOwogCXJvb3QgPSBiZWZzX2lnZXQoc2IsIGlhZGRyMmJsb2Nrbm8oc2IsICYoYmVmc19zYi0+cm9vdF9kaXIpKSk7CiAJaWYgKElTX0VSUihyb290KSkgewogCQlyZXQgPSBQVFJfRVJSKHJvb3QpOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jCmluZGV4IDdjMWU2NWQuLjQ0MmQ5NGYgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGYuYworKysgYi9mcy9iaW5mbXRfZWxmLmMKQEAgLTEyODAsOSArMTI4MCw2IEBACiAjZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIpCVwKIAlpZiAoKHNpemUgKz0gKG5yKSkgPiBsaW1pdCB8fCAhZHVtcF93cml0ZShmaWxlLCAoYWRkciksIChucikpKSBcCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwotI2RlZmluZSBEVU1QX1NFRUsob2ZmKQlcCi0JaWYgKCFkdW1wX3NlZWsoZmlsZSwgKG9mZikpKSBcCi0JCWdvdG8gZW5kX2NvcmVkdW1wOwogCiBzdGF0aWMgdm9pZCBmaWxsX2VsZl9oZWFkZXIoc3RydWN0IGVsZmhkciAqZWxmLCBpbnQgc2VncywKIAkJCSAgICB1MTYgbWFjaGluZSwgdTMyIGZsYWdzLCB1OCBvc2FiaSkKQEAgLTIwMTYsNyArMjAxMyw4IEBACiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJLyogQWxpZ24gdG8gcGFnZSAqLwotCURVTVBfU0VFSyhkYXRhb2ZmIC0gZm9mZnNldCk7CisJaWYgKCFkdW1wX3NlZWsoZmlsZSwgZGF0YW9mZiAtIGZvZmZzZXQpKQorCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogCWZvciAodm1hID0gZmlyc3Rfdm1hKGN1cnJlbnQsIGdhdGVfdm1hKTsgdm1hICE9IE5VTEw7CiAJCQl2bWEgPSBuZXh0X3ZtYSh2bWEsIGdhdGVfdm1hKSkgewpAQCAtMjAyNywzMyArMjAyNSwxOSBAQAogCiAJCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdG1wX3ZtYTsKKwkJCWludCBzdG9wOwogCi0JCQlpZiAoZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIDEsIDAsIDEsCi0JCQkJCQkmcGFnZSwgJnRtcF92bWEpIDw9IDApIHsKLQkJCQlEVU1QX1NFRUsoUEFHRV9TSVpFKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHBhZ2UgPT0gWkVST19QQUdFKDApKSB7Ci0JCQkJCWlmICghZHVtcF9zZWVrKGZpbGUsIFBBR0VfU0laRSkpIHsKLQkJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCQkJCWdvdG8gZW5kX2NvcmVkdW1wOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdm9pZCAqa2FkZHI7Ci0JCQkJCWZsdXNoX2NhY2hlX3BhZ2UodG1wX3ZtYSwgYWRkciwKLQkJCQkJCQkgcGFnZV90b19wZm4ocGFnZSkpOwotCQkJCQlrYWRkciA9IGttYXAocGFnZSk7Ci0JCQkJCWlmICgoc2l6ZSArPSBQQUdFX1NJWkUpID4gbGltaXQgfHwKLQkJCQkJICAgICFkdW1wX3dyaXRlKGZpbGUsIGthZGRyLAotCQkJCQkgICAgUEFHRV9TSVpFKSkgewotCQkJCQkJa3VubWFwKHBhZ2UpOwotCQkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJCQkJZ290byBlbmRfY29yZWR1bXA7Ci0JCQkJCX0KLQkJCQkJa3VubWFwKHBhZ2UpOwotCQkJCX0KKwkJCXBhZ2UgPSBnZXRfZHVtcF9wYWdlKGFkZHIpOworCQkJaWYgKHBhZ2UpIHsKKwkJCQl2b2lkICprYWRkciA9IGttYXAocGFnZSk7CisJCQkJc3RvcCA9ICgoc2l6ZSArPSBQQUdFX1NJWkUpID4gbGltaXQpIHx8CisJCQkJCSFkdW1wX3dyaXRlKGZpbGUsIGthZGRyLCBQQUdFX1NJWkUpOworCQkJCWt1bm1hcChwYWdlKTsKIAkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQl9CisJCQl9IGVsc2UKKwkJCQlzdG9wID0gIWR1bXBfc2VlayhmaWxlLCBQQUdFX1NJWkUpOworCQkJaWYgKHN0b3ApCisJCQkJZ290byBlbmRfY29yZWR1bXA7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwppbmRleCAyMGZiZWNlLi43NjI4NTQ3IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKKysrIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCkBAIC0xMzI1LDkgKzEzMjUsNiBAQAogI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yKQlcCiAJaWYgKChzaXplICs9IChucikpID4gbGltaXQgfHwgIWR1bXBfd3JpdGUoZmlsZSwgKGFkZHIpLCAobnIpKSkgXAogCQlnb3RvIGVuZF9jb3JlZHVtcDsKLSNkZWZpbmUgRFVNUF9TRUVLKG9mZikJXAotCWlmICghZHVtcF9zZWVrKGZpbGUsIChvZmYpKSkgXAotCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogc3RhdGljIGlubGluZSB2b2lkIGZpbGxfZWxmX2ZkcGljX2hlYWRlcihzdHJ1Y3QgZWxmaGRyICplbGYsIGludCBzZWdzKQogewpAQCAtMTUxOCw2ICsxNTE1LDcgQEAKIAkJCSAgIHVuc2lnbmVkIGxvbmcgKmxpbWl0LCB1bnNpZ25lZCBsb25nIG1tX2ZsYWdzKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWludCBlcnIgPSAwOwogCiAJZm9yICh2bWEgPSBjdXJyZW50LT5tbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyOwpAQCAtMTUyNSw0MyArMTUyMywyNiBAQAogCQlpZiAoIW1heWR1bXAodm1hLCBtbV9mbGFncykpCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGFkZHIgPSB2bWEtPnZtX3N0YXJ0OwotCQkgICAgIGFkZHIgPCB2bWEtPnZtX2VuZDsKLQkJICAgICBhZGRyICs9IFBBR0VfU0laRQotCQkgICAgICkgewotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQkJaWYgKGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLCAxLCAwLCAxLAotCQkJCQkgICAmcGFnZSwgJnZtYSkgPD0gMCkgewotCQkJCURVTVBfU0VFSyhmaWxlLT5mX3BvcyArIFBBR0VfU0laRSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChwYWdlID09IFpFUk9fUEFHRSgwKSkgewotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCQlEVU1QX1NFRUsoZmlsZS0+Zl9wb3MgKyBQQUdFX1NJWkUpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJdm9pZCAqa2FkZHI7Ci0KLQkJCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcGFnZV90b19wZm4ocGFnZSkpOwotCQkJCWthZGRyID0ga21hcChwYWdlKTsKLQkJCQlpZiAoKCpzaXplICs9IFBBR0VfU0laRSkgPiAqbGltaXQgfHwKLQkJCQkgICAgIWR1bXBfd3JpdGUoZmlsZSwga2FkZHIsIFBBR0VfU0laRSkKLQkJCQkgICAgKSB7Ci0JCQkJCWt1bm1hcChwYWdlKTsKLQkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQl9CisJCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7IGFkZHIgPCB2bWEtPnZtX2VuZDsKKwkJCQkJCQlhZGRyICs9IFBBR0VfU0laRSkgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBnZXRfZHVtcF9wYWdlKGFkZHIpOworCQkJaWYgKHBhZ2UpIHsKKwkJCQl2b2lkICprYWRkciA9IGttYXAocGFnZSk7CisJCQkJKnNpemUgKz0gUEFHRV9TSVpFOworCQkJCWlmICgqc2l6ZSA+ICpsaW1pdCkKKwkJCQkJZXJyID0gLUVGQklHOworCQkJCWVsc2UgaWYgKCFkdW1wX3dyaXRlKGZpbGUsIGthZGRyLCBQQUdFX1NJWkUpKQorCQkJCQllcnIgPSAtRUlPOwogCQkJCWt1bm1hcChwYWdlKTsKIAkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQl9CisJCQl9IGVsc2UgaWYgKCFkdW1wX3NlZWsoZmlsZSwgZmlsZS0+Zl9wb3MgKyBQQUdFX1NJWkUpKQorCQkJCWVyciA9IC1FRkJJRzsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0KLQlyZXR1cm4gMDsKLQotZW5kX2NvcmVkdW1wOgotCXJldHVybiAtRUZCSUc7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC0xODAyLDcgKzE3ODMsOCBAQAogCQkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCX0KIAotCURVTVBfU0VFSyhkYXRhb2ZmKTsKKwlpZiAoIWR1bXBfc2VlayhmaWxlLCBkYXRhb2ZmKSkKKwkJZ290byBlbmRfY29yZWR1bXA7CiAKIAlpZiAoZWxmX2ZkcGljX2R1bXBfc2VnbWVudHMoZmlsZSwgJnNpemUsICZsaW1pdCwgbW1fZmxhZ3MpIDwgMCkKIAkJZ290byBlbmRfY29yZWR1bXA7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDcxZTdlMDMuLjVkMWVkNTAgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xMTE0LDcgKzExMTQsNyBAQAogaW50IGNoZWNrX2Rpc2tfY2hhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqIGJkb3BzID0gZGlzay0+Zm9wczsKKwljb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKmJkb3BzID0gZGlzay0+Zm9wczsKIAogCWlmICghYmRvcHMtPm1lZGlhX2NoYW5nZWQpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDhiODE5MjcuLjZjNDE3MzEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTc3Miw3ICs3NzIsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZWVfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmVlX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gYnRyZWVfcmVhZHBhZ2UsCiAJLndyaXRlcGFnZQk9IGJ0cmVlX3dyaXRlcGFnZSwKIAkud3JpdGVwYWdlcwk9IGJ0cmVlX3dyaXRlcGFnZXMsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCA1OWNiYTE4Li45MDk2ZmQwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTU1LDEzICs1NSwxMyBAQAogCXN0cnVjdCBidHJmc19yb290ICpyb290OwogfTsKIAotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19kaXJfcm9faW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfYW9wczsKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfYW9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZGlyX3JvX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX2FvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19zeW1saW5rX2FvcHM7CiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBleHRlbnRfaW9fb3BzIGJ0cmZzX2V4dGVudF9pb19vcHM7CiAKQEAgLTUyMDEsNyArNTIwMSw3IEBACiAJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgYnRyZnNfY2hlY2tfYWNsKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRhdHRyCT0gYnRyZnNfZ2V0YXR0ciwKIAkubG9va3VwCQk9IGJ0cmZzX2xvb2t1cCwKIAkuY3JlYXRlCQk9IGJ0cmZzX2NyZWF0ZSwKQEAgLTUyMTksNyArNTIxOSw3IEBACiAJLnJlbW92ZXhhdHRyCT0gYnRyZnNfcmVtb3ZleGF0dHIsCiAJLnBlcm1pc3Npb24JPSBidHJmc19wZXJtaXNzaW9uLAogfTsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19kaXJfcm9faW5vZGVfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19kaXJfcm9faW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkubG9va3VwCQk9IGJ0cmZzX2xvb2t1cCwKIAkucGVybWlzc2lvbgk9IGJ0cmZzX3Blcm1pc3Npb24sCiB9OwpAQCAtNTI1OSw3ICs1MjU5LDcgQEAKICAqCiAgKiBGb3Igbm93IHdlJ3JlIGF2b2lkaW5nIHRoaXMgYnkgZHJvcHBpbmcgYm1hcC4KICAqLwotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gYnRyZnNfcmVhZHBhZ2UsCiAJLndyaXRlcGFnZQk9IGJ0cmZzX3dyaXRlcGFnZSwKIAkud3JpdGVwYWdlcwk9IGJ0cmZzX3dyaXRlcGFnZXMsCkBAIC01MjcxLDE0ICs1MjcxLDE0IEBACiAJLnNldF9wYWdlX2RpcnR5CT0gYnRyZnNfc2V0X3BhZ2VfZGlydHksCiB9OwogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19zeW1saW5rX2FvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19zeW1saW5rX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gYnRyZnNfcmVhZHBhZ2UsCiAJLndyaXRlcGFnZQk9IGJ0cmZzX3dyaXRlcGFnZSwKIAkuaW52YWxpZGF0ZXBhZ2UgPSBidHJmc19pbnZhbGlkYXRlcGFnZSwKIAkucmVsZWFzZXBhZ2UJPSBidHJmc19yZWxlYXNlcGFnZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS50cnVuY2F0ZQk9IGJ0cmZzX3RydW5jYXRlLAogCS5nZXRhdHRyCT0gYnRyZnNfZ2V0YXR0ciwKIAkuc2V0YXR0cgk9IGJ0cmZzX3NldGF0dHIsCkBAIC01MjkwLDcgKzUyOTAsNyBAQAogCS5mYWxsb2NhdGUJPSBidHJmc19mYWxsb2NhdGUsCiAJLmZpZW1hcAkJPSBidHJmc19maWVtYXAsCiB9Owotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmdldGF0dHIJPSBidHJmc19nZXRhdHRyLAogCS5zZXRhdHRyCT0gYnRyZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IGJ0cmZzX3Blcm1pc3Npb24sCkBAIC01Mjk5LDcgKzUyOTksNyBAQAogCS5saXN0eGF0dHIJPSBidHJmc19saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gYnRyZnNfcmVtb3ZleGF0dHIsCiB9Owotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKIAkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAogCS5wdXRfbGluawk9IHBhZ2VfcHV0X2xpbmssCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA2ZDZkMDZjLi4yZGIxN2NkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJleHBvcnQuaCIKICNpbmNsdWRlICJjb21wcmVzc2lvbi5oIgogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYnRyZnNfc3VwZXJfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJ0cmZzX3N1cGVyX29wczsKIAogc3RhdGljIHZvaWQgYnRyZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC02NzUsNyArNjc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJ0cmZzX3N1cGVyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7CiAJLmRlbGV0ZV9pbm9kZQk9IGJ0cmZzX2RlbGV0ZV9pbm9kZSwKIAkucHV0X3N1cGVyCT0gYnRyZnNfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCT0gYnRyZnNfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IGQ5MWIwZGUuLjMwYzBkNDUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMjYwNSw3ICsyNjA1LDcgQEAKIAkJCQkJCQkJZXh0ZW50KTsKIAkJCQljcyA9IGJ0cmZzX2ZpbGVfZXh0ZW50X29mZnNldChzcmMsIGV4dGVudCk7CiAJCQkJY2wgPSBidHJmc19maWxlX2V4dGVudF9udW1fYnl0ZXMoc3JjLAotCQkJCQkJCQlleHRlbnQpOzsKKwkJCQkJCQkJZXh0ZW50KTsKIAkJCQlpZiAoYnRyZnNfZmlsZV9leHRlbnRfY29tcHJlc3Npb24oc3JjLAogCQkJCQkJCQkgIGV4dGVudCkpIHsKIAkJCQkJY3MgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA5MGE5ODg2Li4yMDlmN2YxIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtNTIsNiArNTIsNyBAQAogCWJoLT5iX2VuZF9pbyA9IGhhbmRsZXI7CiAJYmgtPmJfcHJpdmF0ZSA9IHByaXZhdGU7CiB9CitFWFBPUlRfU1lNQk9MKGluaXRfYnVmZmVyKTsKIAogc3RhdGljIGludCBzeW5jX2J1ZmZlcih2b2lkICp3b3JkKQogewpAQCAtODAsNiArODEsNyBAQAogCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJd2FrZV91cF9iaXQoJmJoLT5iX3N0YXRlLCBCSF9Mb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0wodW5sb2NrX2J1ZmZlcik7CiAKIC8qCiAgKiBCbG9jayB1bnRpbCBhIGJ1ZmZlciBjb21lcyB1bmxvY2tlZC4gIFRoaXMgZG9lc24ndCBzdG9wIGl0CkBAIC05MCw2ICs5Miw3IEBACiB7CiAJd2FpdF9vbl9iaXQoJmJoLT5iX3N0YXRlLCBCSF9Mb2NrLCBzeW5jX2J1ZmZlciwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogfQorRVhQT1JUX1NZTUJPTChfX3dhaXRfb25fYnVmZmVyKTsKIAogc3RhdGljIHZvaWQKIF9fY2xlYXJfcGFnZV9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMTQ0LDYgKzE0Nyw3IEBACiAJX19lbmRfYnVmZmVyX3JlYWRfbm90b3VjaChiaCwgdXB0b2RhdGUpOwogCXB1dF9iaChiaCk7CiB9CitFWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfcmVhZF9zeW5jKTsKIAogdm9pZCBlbmRfYnVmZmVyX3dyaXRlX3N5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKQogewpAQCAtMTY0LDYgKzE2OCw3IEBACiAJdW5sb2NrX2J1ZmZlcihiaCk7CiAJcHV0X2JoKGJoKTsKIH0KK0VYUE9SVF9TWU1CT0woZW5kX2J1ZmZlcl93cml0ZV9zeW5jKTsKIAogLyoKICAqIFZhcmlvdXMgZmlsZXN5c3RlbXMgYXBwZWFyIHRvIHdhbnQgX19maW5kX2dldF9ibG9jayB0byBiZSBub24tYmxvY2tpbmcuCkBAIC0yNzIsNiArMjc3LDcgQEAKIAlpbnZhbGlkYXRlX2JoX2xydXMoKTsKIAlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMobWFwcGluZywgMCwgLTEpOwogfQorRVhQT1JUX1NZTUJPTChpbnZhbGlkYXRlX2JkZXYpOwogCiAvKgogICogS2ljayBwZGZsdXNoIHRoZW4gdHJ5IHRvIGZyZWUgdXAgc29tZSBaT05FX05PUk1BTCBtZW1vcnkuCkBAIC00MTAsNiArNDE2LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuOwogfQorRVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX2FzeW5jX3dyaXRlKTsKIAogLyoKICAqIElmIGEgcGFnZSdzIGJ1ZmZlcnMgYXJlIHVuZGVyIGFzeW5jIHJlYWRpbiAoZW5kX2J1ZmZlcl9hc3luY19yZWFkCkBAIC00MzgsOCArNDQ1LDggQEAKIAlzZXRfYnVmZmVyX2FzeW5jX3JlYWQoYmgpOwogfQogCi12b2lkIG1hcmtfYnVmZmVyX2FzeW5jX3dyaXRlX2VuZGlvKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQkJICAgYmhfZW5kX2lvX3QgKmhhbmRsZXIpCitzdGF0aWMgdm9pZCBtYXJrX2J1ZmZlcl9hc3luY193cml0ZV9lbmRpbyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQkgIGJoX2VuZF9pb190ICpoYW5kbGVyKQogewogCWJoLT5iX2VuZF9pbyA9IGhhbmRsZXI7CiAJc2V0X2J1ZmZlcl9hc3luY193cml0ZShiaCk7CkBAIC01NTMsNyArNTYwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGRvX3RoYXdfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGRvX3RoYXdfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKQEAgLTExNzIsNiArMTE3OSw3IEBACiAJCX0KIAl9CiB9CitFWFBPUlRfU1lNQk9MKG1hcmtfYnVmZmVyX2RpcnR5KTsKIAogLyoKICAqIERlY3JlbWVudCBhIGJ1ZmZlcl9oZWFkJ3MgcmVmZXJlbmNlIGNvdW50LiAgSWYgYWxsIGJ1ZmZlcnMgYWdhaW5zdCBhIHBhZ2UKQEAgLTExODgsNiArMTE5Niw3IEBACiAJfQogCVdBUk4oMSwgS0VSTl9FUlIgIlZGUzogYnJlbHNlOiBUcnlpbmcgdG8gZnJlZSBmcmVlIGJ1ZmZlclxuIik7CiB9CitFWFBPUlRfU1lNQk9MKF9fYnJlbHNlKTsKIAogLyoKICAqIGJmb3JnZXQoKSBpcyBsaWtlIGJyZWxzZSgpLCBleGNlcHQgaXQgZGlzY2FyZHMgYW55CkBAIC0xMjA2LDYgKzEyMTUsNyBAQAogCX0KIAlfX2JyZWxzZShiaCk7CiB9CitFWFBPUlRfU1lNQk9MKF9fYmZvcmdldCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fYnJlYWRfc2xvdyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewpAQCAtMjIxOCw2ICsyMjI4LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGJsb2NrX3JlYWRfZnVsbF9wYWdlKTsKIAogLyogdXRpbGl0eSBmdW5jdGlvbiBmb3IgZmlsZXN5c3RlbXMgdGhhdCBuZWVkIHRvIGRvIHdvcmsgb24gZXhwYW5kaW5nCiAgKiB0cnVuY2F0ZXMuICBVc2VzIGZpbGVzeXN0ZW0gcGFnZWNhY2hlIHdyaXRlcyB0byBhbGxvdyB0aGUgZmlsZXN5c3RlbSB0bwpAQCAtMjI1Miw2ICsyMjYzLDcgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSk7CiAKIHN0YXRpYyBpbnQgY29udF9leHBhbmRfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICAgbG9mZl90IHBvcywgbG9mZl90ICpieXRlcykKQEAgLTIzNTIsNiArMjM2NCw3IEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woY29udF93cml0ZV9iZWdpbik7CiAKIGludCBibG9ja19wcmVwYXJlX3dyaXRlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywKIAkJCWdldF9ibG9ja190ICpnZXRfYmxvY2spCkBAIC0yMzYyLDYgKzIzNzUsNyBAQAogCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChibG9ja19wcmVwYXJlX3dyaXRlKTsKIAogaW50IGJsb2NrX2NvbW1pdF93cml0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CkBAIC0yMzY5LDYgKzIzODMsNyBAQAogCV9fYmxvY2tfY29tbWl0X3dyaXRlKGlub2RlLHBhZ2UsZnJvbSx0byk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGJsb2NrX2NvbW1pdF93cml0ZSk7CiAKIC8qCiAgKiBibG9ja19wYWdlX21rd3JpdGUoKSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGZpbGUgc2l6ZSBhcyBpdCBnZXRzCkBAIC0yNDI2LDYgKzI0NDEsNyBAQAogb3V0OgogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGJsb2NrX3BhZ2VfbWt3cml0ZSk7CiAKIC8qCiAgKiBub2JoX3dyaXRlX2JlZ2luKCkncyBwcmVyZWFkcyBhcmUgc3BlY2lhbDogdGhlIGJ1ZmZlcl9oZWFkcyBhcmUgZnJlZWQKQEAgLTI4NDksNiArMjg2NSw3IEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woYmxvY2tfdHJ1bmNhdGVfcGFnZSk7CiAKIC8qCiAgKiBUaGUgZ2VuZXJpYyAtPndyaXRlcGFnZSBmdW5jdGlvbiBmb3IgYnVmZmVyLWJhY2tlZCBhZGRyZXNzX3NwYWNlcwpAQCAtMjg5MCw2ICsyOTA3LDcgQEAKIAl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBvZmZzZXQsIFBBR0VfQ0FDSEVfU0laRSk7CiAJcmV0dXJuIF9fYmxvY2tfd3JpdGVfZnVsbF9wYWdlKGlub2RlLCBwYWdlLCBnZXRfYmxvY2ssIHdiYywgaGFuZGxlcik7CiB9CitFWFBPUlRfU1lNQk9MKGJsb2NrX3dyaXRlX2Z1bGxfcGFnZV9lbmRpbyk7CiAKIC8qCiAgKiBUaGUgZ2VuZXJpYyAtPndyaXRlcGFnZSBmdW5jdGlvbiBmb3IgYnVmZmVyLWJhY2tlZCBhZGRyZXNzX3NwYWNlcwpAQCAtMjkwMCw3ICsyOTE4LDcgQEAKIAlyZXR1cm4gYmxvY2tfd3JpdGVfZnVsbF9wYWdlX2VuZGlvKHBhZ2UsIGdldF9ibG9jaywgd2JjLAogCQkJCQkgICBlbmRfYnVmZmVyX2FzeW5jX3dyaXRlKTsKIH0KLQorRVhQT1JUX1NZTUJPTChibG9ja193cml0ZV9mdWxsX3BhZ2UpOwogCiBzZWN0b3JfdCBnZW5lcmljX2Jsb2NrX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrLAogCQkJICAgIGdldF9ibG9ja190ICpnZXRfYmxvY2spCkBAIC0yOTEzLDYgKzI5MzEsNyBAQAogCWdldF9ibG9jayhpbm9kZSwgYmxvY2ssICZ0bXAsIDApOwogCXJldHVybiB0bXAuYl9ibG9ja25yOwogfQorRVhQT1JUX1NZTUJPTChnZW5lcmljX2Jsb2NrX2JtYXApOwogCiBzdGF0aWMgdm9pZCBlbmRfYmlvX2JoX2lvX3N5bmMoc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQogewpAQCAtMjk4Miw2ICszMDAxLDcgQEAKIAliaW9fcHV0KGJpbyk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woc3VibWl0X2JoKTsKIAogLyoqCiAgKiBsbF9yd19ibG9jazogbG93LWxldmVsIGFjY2VzcyB0byBibG9jayBkZXZpY2VzIChERVBSRUNBVEVEKQpAQCAtMzA0Myw2ICszMDYzLDcgQEAKIAkJdW5sb2NrX2J1ZmZlcihiaCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChsbF9yd19ibG9jayk7CiAKIC8qCiAgKiBGb3IgYSBkYXRhLWludGVncml0eSB3cml0ZW91dCwgd2UgbmVlZCB0byB3YWl0IHVwb24gYW55IGluLXByb2dyZXNzIEkvTwpAQCAtMzA3MSw2ICszMDkyLDcgQEAKIAl9CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woc3luY19kaXJ0eV9idWZmZXIpOwogCiAvKgogICogdHJ5X3RvX2ZyZWVfYnVmZmVycygpIGNoZWNrcyBpZiBhbGwgdGhlIGJ1ZmZlcnMgb24gdGhpcyBwYXJ0aWN1bGFyIHBhZ2UKQEAgLTMxODUsNiArMzIwNyw3IEBACiAJaWYgKG1hcHBpbmcpCiAJCWJsa19ydW5fYmFja2luZ19kZXYobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywgcGFnZSk7CiB9CitFWFBPUlRfU1lNQk9MKGJsb2NrX3N5bmNfcGFnZSk7CiAKIC8qCiAgKiBUaGVyZSBhcmUgbm8gYmRmbHVzaCB0dW5hYmxlcyBsZWZ0LiAgQnV0IGRpc3RyaWJ1dGlvbnMgYXJlCkBAIC0zMzYxLDI5ICszMzg0LDMgQEAKIAltYXhfYnVmZmVyX2hlYWRzID0gbnJwYWdlcyAqIChQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkKSk7CiAJaG90Y3B1X25vdGlmaWVyKGJ1ZmZlcl9jcHVfbm90aWZ5LCAwKTsKIH0KLQotRVhQT1JUX1NZTUJPTChfX2Jmb3JnZXQpOwotRVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7Ci1FWFBPUlRfU1lNQk9MKF9fd2FpdF9vbl9idWZmZXIpOwotRVhQT1JUX1NZTUJPTChibG9ja19jb21taXRfd3JpdGUpOwotRVhQT1JUX1NZTUJPTChibG9ja19wcmVwYXJlX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woYmxvY2tfcGFnZV9ta3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woYmxvY2tfcmVhZF9mdWxsX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChibG9ja19zeW5jX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChibG9ja190cnVuY2F0ZV9wYWdlKTsKLUVYUE9SVF9TWU1CT0woYmxvY2tfd3JpdGVfZnVsbF9wYWdlKTsKLUVYUE9SVF9TWU1CT0woYmxvY2tfd3JpdGVfZnVsbF9wYWdlX2VuZGlvKTsKLUVYUE9SVF9TWU1CT0woY29udF93cml0ZV9iZWdpbik7Ci1FWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfcmVhZF9zeW5jKTsKLUVYUE9SVF9TWU1CT0woZW5kX2J1ZmZlcl93cml0ZV9zeW5jKTsKLUVYUE9SVF9TWU1CT0woZW5kX2J1ZmZlcl9hc3luY193cml0ZSk7Ci1FWFBPUlRfU1lNQk9MKGZpbGVfZnN5bmMpOwotRVhQT1JUX1NZTUJPTChnZW5lcmljX2Jsb2NrX2JtYXApOwotRVhQT1JUX1NZTUJPTChnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSk7Ci1FWFBPUlRfU1lNQk9MKGluaXRfYnVmZmVyKTsKLUVYUE9SVF9TWU1CT0woaW52YWxpZGF0ZV9iZGV2KTsKLUVYUE9SVF9TWU1CT0wobGxfcndfYmxvY2spOwotRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7Ci1FWFBPUlRfU1lNQk9MKHN1Ym1pdF9iaCk7Ci1FWFBPUlRfU1lNQk9MKHN5bmNfZGlydHlfYnVmZmVyKTsKLUVYUE9SVF9TWU1CT0wodW5sb2NrX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA2MDY5MTJkLi5mZWE5ZTg5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXJjID0gZG5zX3Jlc29sdmVfc2VydmVyX25hbWVfdG9faXAoKmRldm5hbWUsICZzcnZJUCk7CiAJaWYgKHJjICE9IDApIHsKIAkJY0VSUk9SKDEsICgiJXM6IEZhaWxlZCB0byByZXNvbHZlIHNlcnZlciBwYXJ0IG9mICVzIHRvIElQOiAlZCIsCi0JCQkgIF9fZnVuY19fLCAqZGV2bmFtZSwgcmMpKTs7CisJCQkgIF9fZnVuY19fLCAqZGV2bmFtZSwgcmMpKTsKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwogCX0KIAkvKiBtZF9sZW4gPSBzdHJsZW4oLi4uKSArIDEyIGZvciAnc2VwK3ByZWZpeHBhdGg9JwpAQCAtMzg1LDcgKzM4NSw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGZzX3JlZmVycmFsX2lub2RlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rmc19yZWZlcnJhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5mb2xsb3dfbGluayA9IGNpZnNfZGZzX2ZvbGxvd19tb3VudHBvaW50LAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggMzYxMGU5OS4uZDc5Y2UyZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIENJRlNfTUFHSUNfTlVNQkVSIDB4RkY1MzRENDIJLyogdGhlIGZpcnN0IGZvdXIgYnl0ZXMgb2YgU01CIFBEVXMgKi8KIAogI2lmZGVmIENPTkZJR19DSUZTX1FVT1RBCi1zdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyBjaWZzX3F1b3RhY3RsX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGNpZnNfcXVvdGFjdGxfb3BzOwogI2VuZGlmIC8qIFFVT1RBICovCiAKIGludCBjaWZzRllJID0gMDsKQEAgLTUxNyw3ICs1MTcsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBxdW90YWN0bF9vcHMgY2lmc19xdW90YWN0bF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBjaWZzX3F1b3RhY3RsX29wcyA9IHsKIAkuc2V0X3hxdW90YQk9IGNpZnNfeHF1b3RhX3NldCwKIAkuZ2V0X3hxdW90YQk9IGNpZnNfeHF1b3RhX2dldCwKIAkuc2V0X3hzdGF0ZQk9IGNpZnNfeHN0YXRlX3NldCwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IDA5NDMyNWUuLmFjMmIyNGMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtNjcsNyArNjcsNyBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX3N5bWxpbmtfaW5vZGVfb3BzOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGZzX3JlZmVycmFsX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kZnNfcmVmZXJyYWxfaW5vZGVfb3BlcmF0aW9uczsKIAogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi8KZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggNmQ2Zjk4Zi4uM2FhNDg4MyAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTEwMCwxMyArMTAwLDYgQEAKIAkJICAgIGdldF9jb21wYXRfdGltZXNwZWMoJnR2WzFdLCAmdFsxXSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoKHR2WzBdLnR2X25zZWMgPT0gVVRJTUVfT01JVCB8fCB0dlswXS50dl9uc2VjID09IFVUSU1FX05PVykKLQkJICAgICYmIHR2WzBdLnR2X3NlYyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICgodHZbMV0udHZfbnNlYyA9PSBVVElNRV9PTUlUIHx8IHR2WzFdLnR2X25zZWMgPT0gVVRJTUVfTk9XKQotCQkgICAgJiYgdHZbMV0udHZfc2VjICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQogCQlpZiAodHZbMF0udHZfbnNlYyA9PSBVVElNRV9PTUlUICYmIHR2WzFdLnR2X25zZWMgPT0gVVRJTUVfT01JVCkKIAkJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggNzVlZmIwMi4uZDVmOGM5NiAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKKysrIGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTE4LDE0ICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldnB0c19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAotI2RlZmluZSBERVZQVFNfU1VQRVJfTUFHSUMgMHgxY2QxCi0KICNkZWZpbmUgREVWUFRTX0RFRkFVTFRfTU9ERSAwNjAwCiAvKgogICogcHRteCBpcyBhIG5ldyBub2RlIGluIC9kZXYvcHRzIGFuZCB3aWxsIGJlIHVudXNlZCBpbiBsZWdhY3kgKHNpbmdsZS0KZGlmZiAtLWdpdCBhL2ZzL2RsbS9kZWJ1Z19mcy5jIGIvZnMvZGxtL2RlYnVnX2ZzLmMKaW5kZXggMWQxZDI3NC4uMWM4YmI4YyAxMDA2NDQKLS0tIGEvZnMvZGxtL2RlYnVnX2ZzLmMKKysrIGIvZnMvZGxtL2RlYnVnX2ZzLmMKQEAgLTM4Niw5ICszODYsOSBAQAogCXJldHVybiBydjsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQxX3NlcV9vcHM7Ci1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDJfc2VxX29wczsKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0M19zZXFfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQxX3NlcV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDJfc2VxX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0M19zZXFfb3BzOwogCiBzdGF0aWMgdm9pZCAqdGFibGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTUzNCwyMSArNTM0LDIxIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDFfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0MV9zZXFfb3BzID0gewogCS5zdGFydCA9IHRhYmxlX3NlcV9zdGFydCwKIAkubmV4dCAgPSB0YWJsZV9zZXFfbmV4dCwKIAkuc3RvcCAgPSB0YWJsZV9zZXFfc3RvcCwKIAkuc2hvdyAgPSB0YWJsZV9zZXFfc2hvdywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0Ml9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQyX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gdGFibGVfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IHRhYmxlX3NlcV9uZXh0LAogCS5zdG9wICA9IHRhYmxlX3NlcV9zdG9wLAogCS5zaG93ICA9IHRhYmxlX3NlcV9zaG93LAogfTsKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQzX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDNfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSB0YWJsZV9zZXFfc3RhcnQsCiAJLm5leHQgID0gdGFibGVfc2VxX25leHQsCiAJLnN0b3AgID0gdGFibGVfc2VxX3N0b3AsCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaCBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCmluZGV4IDAwYjMwYTIuLjU0MmY2MjUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCisrKyBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCkBAIC01ODIsNyArNTgyLDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlY3J5cHRmc19zeW1saW5rX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZWNyeXB0ZnNfc29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVjcnlwdGZzX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlY3J5cHRmc19hb3BzOwogZXh0ZXJuIGludCBlY3J5cHRmc192ZXJib3NpdHk7CiBleHRlcm4gdW5zaWduZWQgaW50IGVjcnlwdGZzX21lc3NhZ2VfYnVmX2xlbjsKIGV4dGVybiBzaWduZWQgbG9uZyBlY3J5cHRmc19tZXNzYWdlX3dhaXRfdGltZW91dDsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCA1YzZiYWI5Li4wNTc3MmFlIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC01NDUsNyArNTQ1LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWNyeXB0ZnNfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWNyeXB0ZnNfYW9wcyA9IHsKIAkud3JpdGVwYWdlID0gZWNyeXB0ZnNfd3JpdGVwYWdlLAogCS5yZWFkcGFnZSA9IGVjcnlwdGZzX3JlYWRwYWdlLAogCS53cml0ZV9iZWdpbiA9IGVjcnlwdGZzX3dyaXRlX2JlZ2luLApkaWZmIC0tZ2l0IGEvZnMvZXZlbnRmZC5jIGIvZnMvZXZlbnRmZC5jCmluZGV4IDMxZDEyZGUuLjhiNDdlNDIgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50ZmQuYworKysgYi9mcy9ldmVudGZkLmMKQEAgLTY4LDExICs2OCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZXZlbnRmZF9zaWduYWwpOwogCitzdGF0aWMgdm9pZCBldmVudGZkX2ZyZWVfY3R4KHN0cnVjdCBldmVudGZkX2N0eCAqY3R4KQoreworCWtmcmVlKGN0eCk7Cit9CisKIHN0YXRpYyB2b2lkIGV2ZW50ZmRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZXZlbnRmZF9jdHgsIGtyZWYpOwogCi0Ja2ZyZWUoY3R4KTsKKwlldmVudGZkX2ZyZWVfY3R4KGN0eCk7CiB9CiAKIC8qKgpAQCAtMjk4LDkgKzMwMywyMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZXZlbnRmZF9jdHhfZmlsZWdldCk7CiAKLVNZU0NBTExfREVGSU5FMihldmVudGZkMiwgdW5zaWduZWQgaW50LCBjb3VudCwgaW50LCBmbGFncykKKy8qKgorICogZXZlbnRmZF9maWxlX2NyZWF0ZSAtIENyZWF0ZXMgYW4gZXZlbnRmZCBmaWxlIHBvaW50ZXIuCisgKiBAY291bnQ6IEluaXRpYWwgZXZlbnRmZCBjb3VudGVyIHZhbHVlLgorICogQGZsYWdzOiBGbGFncyBmb3IgdGhlIGV2ZW50ZmQgZmlsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZXZlbnRmZCBmaWxlIHBvaW50ZXIsIHcvb3V0IGluc3RhbGxpbmcgaXQgaW50bworICogdGhlIGZkIHRhYmxlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBldmVudGZkIGZpbGUgaXMgdXNlZCBkdXJpbmcgdGhlCisgKiBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZXF1aXJlIGV4dHJhIHNldHVwIGFmdGVyIHRoZSBldmVudGZkCisgKiBjcmVhdGlvbi4gU28gdGhlIGV2ZW50ZmQgY3JlYXRpb24gaXMgc3BsaXQgaW50byB0aGUgZmlsZSBwb2ludGVyIGNyZWF0aW9uCisgKiBwaGFzZSwgYW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgaW5zdGFsbGF0aW9uIHBoYXNlLgorICogSW4gdGhpcyB3YXkgcmFjZXMgd2l0aCB1c2Vyc3BhY2UgY2xvc2luZyB0aGUgbmV3bHkgaW5zdGFsbGVkIGZpbGUgZGVzY3JpcHRvcgorICogY2FuIGJlIGF2b2lkZWQuCisgKiBSZXR1cm5zIGFuIGV2ZW50ZmQgZmlsZSBwb2ludGVyLCBvciBhIHByb3BlciBlcnJvciBwb2ludGVyLgorICovCitzdHJ1Y3QgZmlsZSAqZXZlbnRmZF9maWxlX2NyZWF0ZSh1bnNpZ25lZCBpbnQgY291bnQsIGludCBmbGFncykKIHsKLQlpbnQgZmQ7CisJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7CiAKIAkvKiBDaGVjayB0aGUgRUZEXyogY29uc3RhbnRzIGZvciBjb25zaXN0ZW5jeS4gICovCkBAIC0zMDgsMjYgKzMyNyw0OCBAQAogCUJVSUxEX0JVR19PTihFRkRfTk9OQkxPQ0sgIT0gT19OT05CTE9DSyk7CiAKIAlpZiAoZmxhZ3MgJiB+RUZEX0ZMQUdTX1NFVCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJY3R4ID0ga21hbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwogCWlmICghY3R4KQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlrcmVmX2luaXQoJmN0eC0+a3JlZik7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3R4LT53cWgpOwogCWN0eC0+Y291bnQgPSBjb3VudDsKIAljdHgtPmZsYWdzID0gZmxhZ3M7CiAKLQkvKgotCSAqIFdoZW4gd2UgY2FsbCB0aGlzLCB0aGUgaW5pdGlhbGl6YXRpb24gbXVzdCBiZSBjb21wbGV0ZSwgc2luY2UKLQkgKiBhbm9uX2lub2RlX2dldGZkKCkgd2lsbCBpbnN0YWxsIHRoZSBmZC4KLQkgKi8KLQlmZCA9IGFub25faW5vZGVfZ2V0ZmQoIltldmVudGZkXSIsICZldmVudGZkX2ZvcHMsIGN0eCwKLQkJCSAgICAgIGZsYWdzICYgRUZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7Ci0JaWYgKGZkIDwgMCkKLQkJa2ZyZWUoY3R4KTsKKwlmaWxlID0gYW5vbl9pbm9kZV9nZXRmaWxlKCJbZXZlbnRmZF0iLCAmZXZlbnRmZF9mb3BzLCBjdHgsCisJCQkJICBmbGFncyAmIEVGRF9TSEFSRURfRkNOVExfRkxBR1MpOworCWlmIChJU19FUlIoZmlsZSkpCisJCWV2ZW50ZmRfZnJlZV9jdHgoY3R4KTsKKworCXJldHVybiBmaWxlOworfQorCitTWVNDQUxMX0RFRklORTIoZXZlbnRmZDIsIHVuc2lnbmVkIGludCwgY291bnQsIGludCwgZmxhZ3MpCit7CisJaW50IGZkLCBlcnJvcjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKworCWVycm9yID0gZ2V0X3VudXNlZF9mZF9mbGFncyhmbGFncyAmIEVGRF9TSEFSRURfRkNOVExfRkxBR1MpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKwlmZCA9IGVycm9yOworCisJZmlsZSA9IGV2ZW50ZmRfZmlsZV9jcmVhdGUoY291bnQsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGZpbGUpKSB7CisJCWVycm9yID0gUFRSX0VSUihmaWxlKTsKKwkJZ290byBlcnJfcHV0X3VudXNlZF9mZDsKKwl9CisJZmRfaW5zdGFsbChmZCwgZmlsZSk7CisKIAlyZXR1cm4gZmQ7CisKK2Vycl9wdXRfdW51c2VkX2ZkOgorCXB1dF91bnVzZWRfZmQoZmQpOworCisJcmV0dXJuIGVycm9yOwogfQogCiBTWVNDQUxMX0RFRklORTEoZXZlbnRmZCwgdW5zaWduZWQgaW50LCBjb3VudCkKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCAxNzJjZWI2Li41YzgzM2MxIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2V5Lmg+CkBAIC04NDUsNiArODQ1LDkgQEAKIAlzaWctPm5vdGlmeV9jb3VudCA9IDA7CiAKIG5vX3RocmVhZF9ncm91cDoKKwlpZiAoY3VycmVudC0+bW0pCisJCXNldG1heF9tbV9oaXdhdGVyX3Jzcygmc2lnLT5tYXhyc3MsIGN1cnJlbnQtPm1tKTsKKwogCWV4aXRfaXRpbWVycyhzaWcpOwogCWZsdXNoX2l0aW1lcl9zaWduYWxzKCk7CiAKQEAgLTkyMyw3ICs5MjYsNyBAQAogCXRhc2tfbG9jayh0c2spOwogCXN0cmxjcHkodHNrLT5jb21tLCBidWYsIHNpemVvZih0c2stPmNvbW0pKTsKIAl0YXNrX3VubG9jayh0c2spOwotCXBlcmZfY291bnRlcl9jb21tKHRzayk7CisJcGVyZl9ldmVudF9jb21tKHRzayk7CiB9CiAKIGludCBmbHVzaF9vbGRfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSkKQEAgLTk5Nyw3ICsxMDAwLDcgQEAKIAkgKiBzZWN1cml0eSBkb21haW46CiAJICovCiAJaWYgKCFnZXRfZHVtcGFibGUoY3VycmVudC0+bW0pKQotCQlwZXJmX2NvdW50ZXJfZXhpdF90YXNrKGN1cnJlbnQpOworCQlwZXJmX2V2ZW50X2V4aXRfdGFzayhjdXJyZW50KTsKIAogCS8qIEFuIGV4ZWMgY2hhbmdlcyBvdXIgZG9tYWluLiBXZSBhcmUgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIHRocmVhZAogCSAgIGdyb3VwICovCkBAIC0xMzU0LDYgKzEzNTcsOCBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dDsKIAorCWN1cnJlbnQtPnN0YWNrX3N0YXJ0ID0gY3VycmVudC0+bW0tPnN0YXJ0X3N0YWNrOworCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLwogCWN1cnJlbnQtPmZzLT5pbl9leGVjID0gMDsKIAljdXJyZW50LT5pbl9leGVjdmUgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9uYW1laS5jIGIvZnMvZXh0Mi9uYW1laS5jCmluZGV4IDIzNzAxZjIuLmRkNzE3NWMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvbmFtZWkuYworKysgYi9mcy9leHQyL25hbWVpLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJCWlmIChQVFJfRVJSKGlub2RlKSA9PSAtRVNUQUxFKSB7CiAJCQkJZXh0Ml9lcnJvcihkaXItPmlfc2IsIF9fZnVuY19fLAogCQkJCQkJImRlbGV0ZWQgaW5vZGUgcmVmZXJlbmNlZDogJWx1IiwKLQkJCQkJCWlubyk7CisJCQkJCQkodW5zaWduZWQgbG9uZykgaW5vKTsKIAkJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGlwLmMgYi9mcy9leHQyL3hpcC5jCmluZGV4IGI3MmI4NTguLmMxOGZiZjMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGlwLmMKKysrIGIvZnMvZXh0Mi94aXAuYwpAQCAtMjAsNyArMjAsNyBAQAogCQkgICAgICB2b2lkICoqa2FkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbikKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKm9wcyA9IGJkZXYtPmJkX2Rpc2stPmZvcHM7CisJY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICpvcHMgPSBiZGV2LT5iZF9kaXNrLT5mb3BzOwogCXNlY3Rvcl90IHNlY3RvcjsKIAogCXNlY3RvciA9IGJsb2NrICogKFBBR0VfU0laRSAvIDUxMik7IC8qIGV4dDIgYmxvY2sgdG8gYmRldiBzZWN0b3IgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCBhOGQ4MGE3Li43Mjc0M2QzIDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC03MjAsNyArNzIwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGV4dDNfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsCiAJCQkJY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7CiAKLXN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQzX3F1b3RhX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZXh0M19xdW90YV9vcGVyYXRpb25zID0gewogCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKIAkuZHJvcAkJPSBkcXVvdF9kcm9wLAogCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLApAQCAtNzM3LDcgKzczNyw3IEBACiAJLmRlc3Ryb3lfZHF1b3QJPSBkcXVvdF9kZXN0cm95LAogfTsKIAotc3RhdGljIHN0cnVjdCBxdW90YWN0bF9vcHMgZXh0M19xY3RsX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBleHQzX3FjdGxfb3BlcmF0aW9ucyA9IHsKIAkucXVvdGFfb24JPSBleHQzX3F1b3RhX29uLAogCS5xdW90YV9vZmYJPSB2ZnNfcXVvdGFfb2ZmLAogCS5xdW90YV9zeW5jCT0gdmZzX3F1b3RhX3N5bmMsCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggNGFiZDY4My4uM2E3OTg3MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMjMzNyw3ICsyMzM3LDcgQEAKIAkJLyoKIAkJICogUmVzdCBvZiB0aGUgcGFnZSBpbiB0aGUgcGFnZV92ZWMKIAkJICogcmVkaXJ0eSB0aGVuIGFuZCBza2lwIHRoZW4uIFdlIHdpbGwKLQkJICogdHJ5IHRvIHRvIHdyaXRlIHRoZW0gYWdhaW4gYWZ0ZXIKKwkJICogdHJ5IHRvIHdyaXRlIHRoZW0gYWdhaW4gYWZ0ZXIKIAkJICogc3RhcnRpbmcgYSBuZXcgdHJhbnNhY3Rpb24KIAkJICovCiAJCXJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKHdiYywgcGFnZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggYTZiMWFiNy4uZGY1MzliYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtOTY0LDcgKzk2NCw3IEBACiBzdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLAogCQkJCWNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpOwogCi1zdGF0aWMgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZXh0NF9xdW90YV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGV4dDRfcXVvdGFfb3BlcmF0aW9ucyA9IHsKIAkuaW5pdGlhbGl6ZQk9IGRxdW90X2luaXRpYWxpemUsCiAJLmRyb3AJCT0gZHF1b3RfZHJvcCwKIAkuYWxsb2Nfc3BhY2UJPSBkcXVvdF9hbGxvY19zcGFjZSwKQEAgLTk4NSw3ICs5ODUsNyBAQAogCS5kZXN0cm95X2RxdW90CT0gZHF1b3RfZGVzdHJveSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGV4dDRfcWN0bF9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgZXh0NF9xY3RsX29wZXJhdGlvbnMgPSB7CiAJLnF1b3RhX29uCT0gZXh0NF9xdW90YV9vbiwKIAkucXVvdGFfb2ZmCT0gdmZzX3F1b3RhX29mZiwKIAkucXVvdGFfc3luYwk9IHZmc19xdW90YV9zeW5jLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCAyOGM1OTBiLi44ZjFjZmIwIDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAgKiBhbHdheXMgYWxpZ25lZCB0byBhIDY0IGJpdCBib3VuZGFyeS4KICAqCiAgKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIGluIGJ5dGVzLCBidXQgaXMgaXQgYXNzdW1lZCB0aGF0IGl0IGlzCi0gKiBhbHdheXMgb2sgdG8gdG8gcmVhZCBhIGNvbXBsZXRlIG11bHRpcGxlIG9mIDY0IGJpdHMgYXQgdGhlIGVuZAorICogYWx3YXlzIG9rIHRvIHJlYWQgYSBjb21wbGV0ZSBtdWx0aXBsZSBvZiA2NCBiaXRzIGF0IHRoZSBlbmQKICAqIG9mIHRoZSBibG9jayBpbiBjYXNlIHRoZSBlbmQgaXMgbm8gYWxpZ25lZCB0byBhIG5hdHVyYWwgYm91bmRhcnkuCiAgKgogICogUmV0dXJuOiB0aGUgYmxvY2sgbnVtYmVyIChiaXRtYXAgYnVmZmVyIHNjb3BlKSB0aGF0IHdhcyBmb3VuZApkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCBhOTNiODg1Li5lYmE2ZDU1IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMzEsMTIgKzMxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotLyogc29tZSByYW5kb20gbnVtYmVyICovCi0jZGVmaW5lIEhVR0VUTEJGU19NQUdJQwkweDk1ODQ1OGY2Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBodWdldGxiZnNfb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2FvcHM7CiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CkBAIC01MDcsNiArNTA1LDEzIEBACiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX21hcHBpbmctPnByaXZhdGVfbGlzdCk7CiAJCWluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7CisJCS8qCisJCSAqIFRoZSBwb2xpY3kgaXMgaW5pdGlhbGl6ZWQgaGVyZSBldmVuIGlmIHdlIGFyZSBjcmVhdGluZyBhCisJCSAqIHByaXZhdGUgaW5vZGUgYmVjYXVzZSBpbml0aWFsaXphdGlvbiBzaW1wbHkgY3JlYXRlcyBhbgorCQkgKiBhbiBlbXB0eSByYiB0cmVlIGFuZCBjYWxscyBzcGluX2xvY2tfaW5pdCgpLCBsYXRlciB3aGVuIHdlCisJCSAqIGNhbGwgbXBvbF9mcmVlX3NoYXJlZF9wb2xpY3koKSBpdCB3aWxsIGp1c3QgcmV0dXJuIGJlY2F1c2UKKwkJICogdGhlIHJiIHRyZWUgd2lsbCBzdGlsbCBiZSBlbXB0eS4KKwkJICovCiAJCW1wb2xfc2hhcmVkX3BvbGljeV9pbml0KCZpbmZvLT5wb2xpY3ksIE5VTEwpOwogCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAkJZGVmYXVsdDoKQEAgLTkzMSwxMyArOTM2LDE5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmh1Z2V0bGJmc192ZnNtb3VudDsKIAotc3RhdGljIGludCBjYW5fZG9faHVnZXRsYl9zaG0odm9pZCkKK3N0YXRpYyBpbnQgY2FuX2RvX2h1Z2V0bGJfc2htKGludCBjcmVhdF9mbGFncykKIHsKLQlyZXR1cm4gY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8IGluX2dyb3VwX3Aoc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwKTsKKwlpZiAoY3JlYXRfZmxhZ3MgIT0gSFVHRVRMQl9TSE1GU19JTk9ERSkKKwkJcmV0dXJuIDA7CisJaWYgKGNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKKwkJcmV0dXJuIDE7CisJaWYgKGluX2dyb3VwX3Aoc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIGludCBhY2N0ZmxhZywKLQkJCQkJCXN0cnVjdCB1c2VyX3N0cnVjdCAqKnVzZXIpCisJCQkJc3RydWN0IHVzZXJfc3RydWN0ICoqdXNlciwgaW50IGNyZWF0X2ZsYWdzKQogewogCWludCBlcnJvciA9IC1FTk9NRU07CiAJc3RydWN0IGZpbGUgKmZpbGU7CkBAIC05NDksNyArOTYwLDcgQEAKIAlpZiAoIWh1Z2V0bGJmc192ZnNtb3VudCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKLQlpZiAoIWNhbl9kb19odWdldGxiX3NobSgpKSB7CisJaWYgKCFjYW5fZG9faHVnZXRsYl9zaG0oY3JlYXRfZmxhZ3MpKSB7CiAJCSp1c2VyID0gY3VycmVudF91c2VyKCk7CiAJCWlmICh1c2VyX3NobV9sb2NrKHNpemUsICp1c2VyKSkgewogCQkJV0FSTl9PTkNFKDEsCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCBiMmJhODNkLi43NjU4MmIwIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KQEAgLTg3LDE0ICs4OCwxOCBAQAogREVGSU5FX1NQSU5MT0NLKGlub2RlX2xvY2spOwogCiAvKgotICogaXBydW5lX211dGV4IHByb3ZpZGVzIGV4Y2x1c2lvbiBiZXR3ZWVuIHRoZSBrc3dhcGQgb3IgdHJ5X3RvX2ZyZWVfcGFnZXMKKyAqIGlwcnVuZV9zZW0gcHJvdmlkZXMgZXhjbHVzaW9uIGJldHdlZW4gdGhlIGtzd2FwZCBvciB0cnlfdG9fZnJlZV9wYWdlcwogICogaWNhY2hlIHNocmlua2luZyBwYXRoLCBhbmQgdGhlIHVtb3VudCBwYXRoLiAgV2l0aG91dCB0aGlzIGV4Y2x1c2lvbiwKICAqIGJ5IHRoZSB0aW1lIHBydW5lX2ljYWNoZSBjYWxscyBpcHV0IGZvciB0aGUgaW5vZGUgd2hvc2UgcGFnZXMgaXQgaGFzCiAgKiBiZWVuIGludmFsaWRhdGluZywgb3IgYnkgdGhlIHRpbWUgaXQgY2FsbHMgY2xlYXJfaW5vZGUgJiBkZXN0cm95X2lub2RlCiAgKiBmcm9tIGl0cyBmaW5hbCBkaXNwb3NlX2xpc3QsIHRoZSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgdGhleSByZWZlciB0bwogICogKGZvciBpbm9kZS0+aV9zYi0+c19vcCkgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGZyZWVkIGFuZCByZXVzZWQuCisgKgorICogV2UgbWFrZSB0aGlzIGFuIHJ3c2VtIGJlY2F1c2UgdGhlIGZhc3RwYXRoIGlzIGljYWNoZSBzaHJpbmtpbmcuIEluCisgKiBzb21lIGNhc2VzIGEgZmlsZXN5c3RlbSBtYXkgYmUgZG9pbmcgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd29yayBpbgorICogaXRzIGlub2RlIHJlY2xhaW0gY29kZSwgc28gdGhpcyBzaG91bGQgaW1wcm92ZSBwYXJhbGxlbGlzbS4KICAqLwotc3RhdGljIERFRklORV9NVVRFWChpcHJ1bmVfbXV0ZXgpOworc3RhdGljIERFQ0xBUkVfUldTRU0oaXBydW5lX3NlbSk7CiAKIC8qCiAgKiBTdGF0aXN0aWNzIGdhdGhlcmluZy4uCkBAIC0xMjMsNyArMTI4LDcgQEAKIGludCBpbm9kZV9pbml0X2Fsd2F5cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVtcHR5X2FvcHM7Ci0Jc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVtcHR5X2lvcHM7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVtcHR5X2lvcHM7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZW1wdHlfZm9wczsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqY29uc3QgbWFwcGluZyA9ICZpbm9kZS0+aV9kYXRhOwogCkBAIC0zODEsNyArMzg2LDcgQEAKIAkJLyoKIAkJICogV2UgY2FuIHJlc2NoZWR1bGUgaGVyZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHRoZSBsaXN0J3MKIAkJICogY29uc2lzdGVuY3kgYmVjYXVzZSB0aGUgcGVyLXNiIGxpc3Qgb2YgaW5vZGVzIG11c3Qgbm90Ci0JCSAqIGNoYW5nZSBkdXJpbmcgdW1vdW50IGFueW1vcmUsIGFuZCBiZWNhdXNlIGlwcnVuZV9tdXRleCBrZWVwcworCQkgKiBjaGFuZ2UgZHVyaW5nIHVtb3VudCBhbnltb3JlLCBhbmQgYmVjYXVzZSBpcHJ1bmVfc2VtIGtlZXBzCiAJCSAqIHNocmlua19pY2FjaGVfbWVtb3J5KCkgYXdheS4KIAkJICovCiAJCWNvbmRfcmVzY2hlZF9sb2NrKCZpbm9kZV9sb2NrKTsKQEAgLTQyMCw3ICs0MjUsNyBAQAogCWludCBidXN5OwogCUxJU1RfSEVBRCh0aHJvd19hd2F5KTsKIAotCW11dGV4X2xvY2soJmlwcnVuZV9tdXRleCk7CisJZG93bl93cml0ZSgmaXBydW5lX3NlbSk7CiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlpbm90aWZ5X3VubW91bnRfaW5vZGVzKCZzYi0+c19pbm9kZXMpOwogCWZzbm90aWZ5X3VubW91bnRfaW5vZGVzKCZzYi0+c19pbm9kZXMpOwpAQCAtNDI4LDcgKzQzMyw3IEBACiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCiAJZGlzcG9zZV9saXN0KCZ0aHJvd19hd2F5KTsKLQltdXRleF91bmxvY2soJmlwcnVuZV9tdXRleCk7CisJdXBfd3JpdGUoJmlwcnVuZV9zZW0pOwogCiAJcmV0dXJuIGJ1c3k7CiB9CkBAIC00NjcsNyArNDcyLDcgQEAKIAlpbnQgbnJfc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIHJlYXAgPSAwOwogCi0JbXV0ZXhfbG9jaygmaXBydW5lX211dGV4KTsKKwlkb3duX3JlYWQoJmlwcnVuZV9zZW0pOwogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJZm9yIChucl9zY2FubmVkID0gMDsgbnJfc2Nhbm5lZCA8IG5yX3RvX3NjYW47IG5yX3NjYW5uZWQrKykgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtNTA5LDcgKzUxNCw3IEBACiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCiAJZGlzcG9zZV9saXN0KCZmcmVlYWJsZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpcHJ1bmVfbXV0ZXgpOworCXVwX3JlYWQoJmlwcnVuZV9zZW0pOwogfQogCiAvKgpAQCAtNjk1LDEzICs3MDAsMTUgQEAKIAl9CiAjZW5kaWYKIAkvKgotCSAqIFRoaXMgaXMgc3BlY2lhbCEgIFdlIGRvIG5vdCBuZWVkIHRoZSBzcGlubG9jawotCSAqIHdoZW4gY2xlYXJpbmcgSV9MT0NLLCBiZWNhdXNlIHdlJ3JlIGd1YXJhbnRlZWQKLQkgKiB0aGF0IG5vYm9keSBlbHNlIHRyaWVzIHRvIGRvIGFueXRoaW5nIGFib3V0IHRoZQotCSAqIHN0YXRlIG9mIHRoZSBpbm9kZSB3aGVuIGl0IGlzIGxvY2tlZCwgYXMgd2UKLQkgKiBqdXN0IGNyZWF0ZWQgaXQgKHNvIHRoZXJlIGNhbiBiZSBubyBvbGQgaG9sZGVycwotCSAqIHRoYXQgaGF2ZW4ndCB0ZXN0ZWQgSV9MT0NLKS4KKwkgKiBUaGlzIGlzIHNwZWNpYWwhICBXZSBkbyBub3QgbmVlZCB0aGUgc3BpbmxvY2sgd2hlbiBjbGVhcmluZyBJX0xPQ0ssCisJICogYmVjYXVzZSB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgbm9ib2R5IGVsc2UgdHJpZXMgdG8gZG8gYW55dGhpbmcgYWJvdXQKKwkgKiB0aGUgc3RhdGUgb2YgdGhlIGlub2RlIHdoZW4gaXQgaXMgbG9ja2VkLCBhcyB3ZSBqdXN0IGNyZWF0ZWQgaXQgKHNvCisJICogdGhlcmUgY2FuIGJlIG5vIG9sZCBob2xkZXJzIHRoYXQgaGF2ZW4ndCB0ZXN0ZWQgSV9MT0NLKS4KKwkgKiBIb3dldmVyIHdlIG11c3QgZW1pdCB0aGUgbWVtb3J5IGJhcnJpZXIgc28gdGhhdCBvdGhlciBDUFVzIHJlbGlhYmx5CisJICogc2VlIHRoZSBjbGVhcmluZyBvZiBJX0xPQ0sgYWZ0ZXIgdGhlIG90aGVyIGlub2RlIGluaXRpYWxpc2F0aW9uIGhhcworCSAqIGNvbXBsZXRlZC4KIAkgKi8KKwlzbXBfbWIoKTsKIAlXQVJOX09OKChpbm9kZS0+aV9zdGF0ZSAmIChJX0xPQ0t8SV9ORVcpKSAhPSAoSV9MT0NLfElfTkVXKSk7CiAJaW5vZGUtPmlfc3RhdGUgJj0gfihJX0xPQ0t8SV9ORVcpOwogCXdha2VfdXBfaW5vZGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBhOGEzNThiLi41M2I4NmUxIDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtNzY4LDcgKzc2OCw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgamJkMl9zZXFfaGlzdG9yeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGpiZDJfc2VxX2hpc3Rvcnlfb3BzID0gewogCS5zdGFydCAgPSBqYmQyX3NlcV9oaXN0b3J5X3N0YXJ0LAogCS5uZXh0ICAgPSBqYmQyX3NlcV9oaXN0b3J5X25leHQsCiAJLnN0b3AgICA9IGpiZDJfc2VxX2hpc3Rvcnlfc3RvcCwKQEAgLTg3Miw3ICs4NzIsNyBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBqYmQyX3NlcV9pbmZvX29wcyA9IHsKIAkuc3RhcnQgID0gamJkMl9zZXFfaW5mb19zdGFydCwKIAkubmV4dCAgID0gamJkMl9zZXFfaW5mb19uZXh0LAogCS5zdG9wICAgPSBqYmQyX3NlcV9pbmZvX3N0b3AsCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9iYWNrZ3JvdW5kLmMgYi9mcy9qZmZzMi9iYWNrZ3JvdW5kLmMKaW5kZXggZTk1ODAxMC4uM2ZmNTBkYSAxMDA2NDQKLS0tIGEvZnMvamZmczIvYmFja2dyb3VuZC5jCisrKyBiL2ZzL2pmZnMyL2JhY2tncm91bmQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSAibm9kZWxpc3QuaCIKIAogCkBAIC0zMSw3ICszMiw3IEBACiAvKiBUaGlzIG11c3Qgb25seSBldmVyIGJlIGNhbGxlZCB3aGVuIG5vIEdDIHRocmVhZCBpcyBjdXJyZW50bHkgcnVubmluZyAqLwogaW50IGpmZnMyX3N0YXJ0X2dhcmJhZ2VfY29sbGVjdF90aHJlYWQoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCiB7Ci0JcGlkX3QgcGlkOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCWludCByZXQgPSAwOwogCiAJQlVHX09OKGMtPmdjX3Rhc2spOwpAQCAtMzksMTUgKzQwLDE2IEBACiAJaW5pdF9jb21wbGV0aW9uKCZjLT5nY190aHJlYWRfc3RhcnQpOwogCWluaXRfY29tcGxldGlvbigmYy0+Z2NfdGhyZWFkX2V4aXQpOwogCi0JcGlkID0ga2VybmVsX3RocmVhZChqZmZzMl9nYXJiYWdlX2NvbGxlY3RfdGhyZWFkLCBjLCBDTE9ORV9GU3xDTE9ORV9GSUxFUyk7Ci0JaWYgKHBpZCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZm9yayBmYWlsZWQgZm9yIEpGRlMyIGdhcmJhZ2UgY29sbGVjdCB0aHJlYWQ6ICVkXG4iLCAtcGlkKTsKKwl0c2sgPSBrdGhyZWFkX3J1bihqZmZzMl9nYXJiYWdlX2NvbGxlY3RfdGhyZWFkLCBjLCAiamZmczJfZ2NkX210ZCVkIiwgYy0+bXRkLT5pbmRleCk7CisJaWYgKElTX0VSUih0c2spKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImZvcmsgZmFpbGVkIGZvciBKRkZTMiBnYXJiYWdlIGNvbGxlY3QgdGhyZWFkOiAlbGRcbiIsIC1QVFJfRVJSKHRzaykpOwogCQljb21wbGV0ZSgmYy0+Z2NfdGhyZWFkX2V4aXQpOwotCQlyZXQgPSBwaWQ7CisJCXJldCA9IFBUUl9FUlIodHNrKTsKIAl9IGVsc2UgewogCQkvKiBXYWl0IGZvciBpdC4uLiAqLwotCQlEMShwcmludGsoS0VSTl9ERUJVRyAiSkZGUzI6IEdhcmJhZ2UgY29sbGVjdCB0aHJlYWQgaXMgcGlkICVkXG4iLCBwaWQpKTsKKwkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkpGRlMyOiBHYXJiYWdlIGNvbGxlY3QgdGhyZWFkIGlzIHBpZCAlZFxuIiwgdHNrLT5waWQpKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmYy0+Z2NfdGhyZWFkX3N0YXJ0KTsKKwkJcmV0ID0gdHNrLT5waWQ7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTcxLDcgKzczLDYgQEAKIHsKIAlzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyA9IF9jOwogCi0JZGFlbW9uaXplKCJqZmZzMl9nY2RfbXRkJWQiLCBjLT5tdGQtPmluZGV4KTsKIAlhbGxvd19zaWduYWwoU0lHS0lMTCk7CiAJYWxsb3dfc2lnbmFsKFNJR1NUT1ApOwogCWFsbG93X3NpZ25hbChTSUdDT05UKTsKQEAgLTEwNyw2ICsxMDgsMTEgQEAKIAkJICogdGhlIEdDIHRocmVhZCBnZXQgdGhlcmUgZmlyc3QuICovCiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDUwKSk7CiAKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2dhcmJhZ2VfY29sbGVjdF90aHJlYWQoKTogIGt0aHJlYWRfc3RvcCgpIGNhbGxlZC5cbiIpKTsKKwkJCWdvdG8gZGllOworCQl9CisKIAkJLyogUHV0X3N1cGVyIHdpbGwgc2VuZCBhIFNJR0tJTEwgYW5kIHRoZW4gd2FpdCBvbiB0aGUgc2VtLgogCQkgKi8KIAkJd2hpbGUgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8IGZyZWV6aW5nKGN1cnJlbnQpKSB7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9tYWxsb2MuYyBiL2ZzL2pmZnMyL21hbGxvYy5jCmluZGV4IDllZmYyYmQuLmMwODI4NjggMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL21hbGxvYy5jCisrKyBiL2ZzL2pmZnMyL21hbGxvYy5jCkBAIC0zOSwxMyArMzksMTMgQEAKIAogCXJhd19kaXJlbnRfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzMl9yYXdfZGlyZW50IiwKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCksCi0JCQkJCSAgICAwLCAwLCBOVUxMKTsKKwkJCQkJICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CiAJaWYgKCFyYXdfZGlyZW50X3NsYWIpCiAJCWdvdG8gZXJyOwogCiAJcmF3X2lub2RlX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiamZmczJfcmF3X2lub2RlIiwKIAkJCQkJICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUpLAotCQkJCQkgICAwLCAwLCBOVUxMKTsKKwkJCQkJICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKIAlpZiAoIXJhd19pbm9kZV9zbGFiKQogCQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VwZXIuYyBiL2ZzL2pmZnMyL3N1cGVyLmMKaW5kZXggMDAzNWMwMi4uOWE4MGU4ZSAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VwZXIuYworKysgYi9mcy9qZmZzMi9zdXBlci5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAlyZXR1cm4gZF9vYnRhaW5fYWxpYXMoamZmczJfaWdldChjaGlsZC0+ZF9pbm9kZS0+aV9zYiwgcGlubykpOwogfQogCi1zdGF0aWMgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGpmZnMyX2V4cG9ydF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGpmZnMyX2V4cG9ydF9vcHMgPSB7CiAJLmdldF9wYXJlbnQgPSBqZmZzMl9nZXRfcGFyZW50LAogCS5maF90b19kZW50cnkgPSBqZmZzMl9maF90b19kZW50cnksCiAJLmZoX3RvX3BhcmVudCA9IGpmZnMyX2ZoX3RvX3BhcmVudCwKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMgYi9mcy9sb2NrZC9jbG50bG9jay5jCmluZGV4IDFmM2IwZmMuLmZjOTAzMmQgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMKKysrIGIvZnMvbG9ja2QvY2xudGxvY2suYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCSAqLwogCQlpZiAoZmxfYmxvY2tlZC0+ZmxfdS5uZnNfZmwub3duZXItPnBpZCAhPSBsb2NrLT5zdmlkKQogCQkJY29udGludWU7Ci0JCWlmICghbmxtX2NtcF9hZGRyKG5sbV9hZGRyKGJsb2NrLT5iX2hvc3QpLCBhZGRyKSkKKwkJaWYgKCFycGNfY21wX2FkZHIobmxtX2FkZHIoYmxvY2stPmJfaG9zdCksIGFkZHIpKQogCQkJY29udGludWU7CiAJCWlmIChuZnNfY29tcGFyZV9maChORlNfRkgoZmxfYmxvY2tlZC0+ZmxfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgLGZoKSAhPSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9jbG50cHJvYy5jIGIvZnMvbG9ja2QvY2xudHByb2MuYwppbmRleCA0MzM2YWRiLi5jODEyNDlmIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9jbG50cHJvYy5jCisrKyBiL2ZzL2xvY2tkL2NsbnRwcm9jLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCW5sbV9wdXRfbG9ja293bmVyKGZsLT5mbF91Lm5mc19mbC5vd25lcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrX29wZXJhdGlvbnMgbmxtY2xudF9sb2NrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9sb2NrX29wZXJhdGlvbnMgbmxtY2xudF9sb2NrX29wcyA9IHsKIAkuZmxfY29weV9sb2NrID0gbmxtY2xudF9sb2Nrc19jb3B5X2xvY2ssCiAJLmZsX3JlbGVhc2VfcHJpdmF0ZSA9IG5sbWNsbnRfbG9ja3NfcmVsZWFzZV9wcml2YXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2hvc3QuYyBiL2ZzL2xvY2tkL2hvc3QuYwppbmRleCA3Y2IwNzZhLi40NjAwYzIwIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9ob3N0LmMKKysrIGIvZnMvbG9ja2QvaG9zdC5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkgKi8KIAljaGFpbiA9ICZubG1faG9zdHNbbmxtX2hhc2hfYWRkcmVzcyhuaS0+c2FwKV07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoaG9zdCwgcG9zLCBjaGFpbiwgaF9oYXNoKSB7Ci0JCWlmICghbmxtX2NtcF9hZGRyKG5sbV9hZGRyKGhvc3QpLCBuaS0+c2FwKSkKKwkJaWYgKCFycGNfY21wX2FkZHIobmxtX2FkZHIoaG9zdCksIG5pLT5zYXApKQogCQkJY29udGludWU7CiAKIAkJLyogU2VlIGlmIHdlIGhhdmUgYW4gTlNNIGhhbmRsZSBmb3IgdGhpcyBjbGllbnQgKi8KQEAgLTEyNSw3ICsxMjUsNyBAQAogCQlpZiAoaG9zdC0+aF9zZXJ2ZXIgIT0gbmktPnNlcnZlcikKIAkJCWNvbnRpbnVlOwogCQlpZiAobmktPnNlcnZlciAmJgotCQkgICAgIW5sbV9jbXBfYWRkcihubG1fc3JjYWRkcihob3N0KSwgbmktPnNyY19zYXApKQorCQkgICAgIXJwY19jbXBfYWRkcihubG1fc3JjYWRkcihob3N0KSwgbmktPnNyY19zYXApKQogCQkJY29udGludWU7CiAKIAkJLyogTW92ZSB0byBoZWFkIG9mIGhhc2ggY2hhaW4uICovCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9tb24uYyBiL2ZzL2xvY2tkL21vbi5jCmluZGV4IDMwYzkzMzEuLmY5NTY2NTEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL21vbi5jCisrKyBiL2ZzL2xvY2tkL21vbi5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAlzdHJ1Y3QgbnNtX2hhbmRsZSAqbnNtOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuc20sICZuc21faGFuZGxlcywgc21fbGluaykKLQkJaWYgKG5sbV9jbXBfYWRkcihuc21fYWRkcihuc20pLCBzYXApKQorCQlpZiAocnBjX2NtcF9hZGRyKG5zbV9hZGRyKG5zbSksIHNhcCkpCiAJCQlyZXR1cm4gbnNtOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjbG9jay5jIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCmluZGV4IGU1NzdhNzguLmQxMDAxNzkgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y2xvY2suYworKysgYi9mcy9sb2NrZC9zdmNsb2NrLmMKQEAgLTcwNSw3ICs3MDUsNyBAQAogCXJldHVybiBmbDEtPmZsX293bmVyID09IGZsMi0+Zmxfb3duZXIgJiYgZmwxLT5mbF9waWQgPT0gZmwyLT5mbF9waWQ7CiB9CiAKLXN0cnVjdCBsb2NrX21hbmFnZXJfb3BlcmF0aW9ucyBubG1zdmNfbG9ja19vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5sbXN2Y19sb2NrX29wZXJhdGlvbnMgPSB7CiAJLmZsX2NvbXBhcmVfb3duZXIgPSBubG1zdmNfc2FtZV9vd25lciwKIAkuZmxfbm90aWZ5ID0gbmxtc3ZjX25vdGlmeV9ibG9ja2VkLAogCS5mbF9ncmFudCA9IG5sbXN2Y19ncmFudF9kZWZlcnJlZCwKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3N1YnMuYyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwppbmRleCA5ZTRkNmFhYi4uYWQ0NzhkYSAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3Zjc3Vicy5jCisrKyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwpAQCAtNDE3LDcgKzQxNyw3IEBACiBzdGF0aWMgaW50CiBubG1zdmNfbWF0Y2hfaXAodm9pZCAqZGF0YXAsIHN0cnVjdCBubG1faG9zdCAqaG9zdCkKIHsKLQlyZXR1cm4gbmxtX2NtcF9hZGRyKG5sbV9zcmNhZGRyKGhvc3QpLCBkYXRhcCk7CisJcmV0dXJuIHJwY19jbXBfYWRkcihubG1fc3JjYWRkcihob3N0KSwgZGF0YXApOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDE5ZWUxOGEuLmE4Nzk0ZjIgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtNDM0LDcgKzQzNCw3IEBACiAJcmV0dXJuIGZsLT5mbF9maWxlID09IHRyeS0+ZmxfZmlsZTsKIH0KIAotc3RhdGljIHN0cnVjdCBsb2NrX21hbmFnZXJfb3BlcmF0aW9ucyBsZWFzZV9tYW5hZ2VyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbGVhc2VfbWFuYWdlcl9vcHMgPSB7CiAJLmZsX2JyZWFrID0gbGVhc2VfYnJlYWtfY2FsbGJhY2ssCiAJLmZsX3JlbGVhc2VfcHJpdmF0ZSA9IGxlYXNlX3JlbGVhc2VfcHJpdmF0ZV9jYWxsYmFjaywKIAkuZmxfbXlsZWFzZSA9IGxlYXNlX215bGVhc2VfY2FsbGJhY2ssCmRpZmYgLS1naXQgYS9mcy9taW5peC9kaXIuYyBiL2ZzL21pbml4L2Rpci5jCmluZGV4IGQ0MDdlN2EuLjYxOTg3MzEgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2Rpci5jCisrKyBiL2ZzL21pbml4L2Rpci5jCkBAIC0zMDgsMTQgKzMwOCwxOCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAoc3RydWN0IGlub2RlKiltYXBwaW5nLT5ob3N0OwogCWNoYXIgKmthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChwYWdlKSArIChjaGFyKilkZSAtIGthZGRyOwotCXVuc2lnbmVkIGxlbiA9IG1pbml4X3NiKGlub2RlLT5pX3NiKS0+c19kaXJzaXplOworCXN0cnVjdCBtaW5peF9zYl9pbmZvICpzYmkgPSBtaW5peF9zYihpbm9kZS0+aV9zYik7CisJdW5zaWduZWQgbGVuID0gc2JpLT5zX2RpcnNpemU7CiAJaW50IGVycjsKIAogCWxvY2tfcGFnZShwYWdlKTsKIAllcnIgPSBfX21pbml4X3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHBvcywgbGVuLAogCQkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKIAlpZiAoZXJyID09IDApIHsKLQkJZGUtPmlub2RlID0gMDsKKwkJaWYgKHNiaS0+c192ZXJzaW9uID09IE1JTklYX1YzKQorCQkJKChtaW5peDNfZGlyZW50ICopIGRlKS0+aW5vZGUgPSAwOworCQllbHNlCisJCQlkZS0+aW5vZGUgPSAwOwogCQllcnIgPSBkaXJfY29tbWl0X2NodW5rKHBhZ2UsIHBvcywgbGVuKTsKIAl9IGVsc2UgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTQ0MCw3ICs0NDQsMTAgQEAKIAllcnIgPSBfX21pbml4X3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHBvcywgc2JpLT5zX2RpcnNpemUsCiAJCQkJCUFPUF9GTEFHX1VOSU5URVJSVVBUSUJMRSwgJnBhZ2UsIE5VTEwpOwogCWlmIChlcnIgPT0gMCkgewotCQlkZS0+aW5vZGUgPSBpbm9kZS0+aV9pbm87CisJCWlmIChzYmktPnNfdmVyc2lvbiA9PSBNSU5JWF9WMykKKwkJCSgobWluaXgzX2RpcmVudCAqKSBkZSktPmlub2RlID0gaW5vZGUtPmlfaW5vOworCQllbHNlCisJCQlkZS0+aW5vZGUgPSBpbm9kZS0+aV9pbm87CiAJCWVyciA9IGRpcl9jb21taXRfY2h1bmsocGFnZSwgcG9zLCBzYmktPnNfZGlyc2l6ZSk7CiAJfSBlbHNlIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC00NzAsNyArNDc3LDE0IEBACiAJaW5vX3QgcmVzID0gMDsKIAogCWlmIChkZSkgewotCQlyZXMgPSBkZS0+aW5vZGU7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJCXN0cnVjdCBtaW5peF9zYl9pbmZvICpzYmkgPSBtaW5peF9zYihpbm9kZS0+aV9zYik7CisKKwkJaWYgKHNiaS0+c192ZXJzaW9uID09IE1JTklYX1YzKQorCQkJcmVzID0gKChtaW5peDNfZGlyZW50ICopIGRlKS0+aW5vZGU7CisJCWVsc2UKKwkJCXJlcyA9IGRlLT5pbm9kZTsKIAkJZGlyX3B1dF9wYWdlKHBhZ2UpOwogCX0KIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvZGlyLmMgYi9mcy9uY3Bmcy9kaXIuYwppbmRleCA5YzU5MDcyLi5iOGI1YjMwIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9kaXIuYworKysgYi9mcy9uY3Bmcy9kaXIuYwpAQCAtMTI0MSw3ICsxMjQxLDcgQEAKIAkJbW9udGggPSAyOwogCX0gZWxzZSB7CiAJCW5sX2RheSA9ICh5ZWFyICYgMykgfHwgZGF5IDw9IDU5ID8gZGF5IDogZGF5IC0gMTsKLQkJZm9yIChtb250aCA9IDA7IG1vbnRoIDwgMTI7IG1vbnRoKyspCisJCWZvciAobW9udGggPSAxOyBtb250aCA8IDEyOyBtb250aCsrKQogCQkJaWYgKGRheV9uW21vbnRoXSA+IG5sX2RheSkKIAkJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9pb2N0bC5jIGIvZnMvbmNwZnMvaW9jdGwuYwppbmRleCBmYTAzOGRmLi41M2E3ZWQ3IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9pb2N0bC5jCisrKyBiL2ZzL25jcGZzL2lvY3RsLmMKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCQkJaWYgKGRlbnRyeSkgewogCQkJCXN0cnVjdCBpbm9kZSogc19pbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAkJCQkKLQkJCQlpZiAoaW5vZGUpIHsKKwkJCQlpZiAoc19pbm9kZSkgewogCQkJCQlOQ1BfRklORk8oc19pbm9kZSktPnZvbE51bWJlciA9IHZudW07CiAJCQkJCU5DUF9GSU5GTyhzX2lub2RlKS0+ZGlyRW50TnVtID0gZGU7CiAJCQkJCU5DUF9GSU5GTyhzX2lub2RlKS0+RG9zRGlyTnVtID0gZG9zZGU7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKaW5kZXggZTVhMmRhYy4uNzZiMGFhMCAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jCisrKyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAKIAlwID0gcmVhZF9idWYoeGRyLCBsZW4pOwogCWlmICh1bmxpa2VseShwID09IE5VTEwpKQotCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRSk7OworCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRSk7CiAKIAltZW1jcHkoc2lkLT5kYXRhLCBwLCBsZW4pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IGUzNTBiZDYuLjYzOTc2YzBjIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC02NDgsOCArNjQ4LDYgQEAKIAkJLmhvc3RuYW1lCT0gY2xwLT5jbF9ob3N0bmFtZSwKIAkJLmFkZHJlc3MJPSAoc3RydWN0IHNvY2thZGRyICopJmNscC0+Y2xfYWRkciwKIAkJLmFkZHJsZW4JPSBjbHAtPmNsX2FkZHJsZW4sCi0JCS5wcm90b2NvbAk9IHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfVENQID8KLQkJCQkJCUlQUFJPVE9fVENQIDogSVBQUk9UT19VRFAsCiAJCS5uZnNfdmVyc2lvbgk9IGNscC0+cnBjX29wcy0+dmVyc2lvbiwKIAkJLm5vcmVzdnBvcnQJPSBzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX05PUkVTVlBPUlQgPwogCQkJCQkxIDogMCwKQEAgLTY2MCw2ICs2NTgsMTQgQEAKIAlpZiAoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9OT05MTSkKIAkJcmV0dXJuIDA7CiAKKwlzd2l0Y2ggKGNscC0+Y2xfcHJvdG8pIHsKKwkJZGVmYXVsdDoKKwkJCW5sbV9pbml0LnByb3RvY29sID0gSVBQUk9UT19UQ1A7CisJCQlicmVhazsKKwkJY2FzZSBYUFJUX1RSQU5TUE9SVF9VRFA6CisJCQlubG1faW5pdC5wcm90b2NvbCA9IElQUFJPVE9fVURQOworCX0KKwogCWhvc3QgPSBubG1jbG50X2luaXQoJm5sbV9pbml0KTsKIAlpZiAoSVNfRVJSKGhvc3QpKQogCQlyZXR1cm4gUFRSX0VSUihob3N0KTsKQEAgLTc4Nyw3ICs3OTMsNyBAQAogCWRwcmludGsoIi0tPiBuZnNfaW5pdF9zZXJ2ZXIoKVxuIik7CiAKICNpZmRlZiBDT05GSUdfTkZTX1YzCi0JaWYgKGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX1ZFUjMpCisJaWYgKGRhdGEtPnZlcnNpb24gPT0gMykKIAkJY2xfaW5pdC5ycGNfb3BzID0gJm5mc192M19jbGllbnRvcHM7CiAjZW5kaWYKIApAQCAtOTMzLDEwICs5MzksNiBAQAogCQlnb3RvIG91dF9lcnJvcjsKIAogCW5mc19zZXJ2ZXJfc2V0X2ZzaW5mbyhzZXJ2ZXIsICZmc2luZm8pOwotCWVycm9yID0gYmRpX2luaXQoJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9lcnJvcjsKLQogCiAJLyogR2V0IHNvbWUgZ2VuZXJhbCBmaWxlIHN5c3RlbSBpbmZvICovCiAJaWYgKHNlcnZlci0+bmFtZWxlbiA9PSAwKSB7CkBAIC05NjgsNiArOTcwLDcgQEAKIAl0YXJnZXQtPmFjZGlybWluID0gc291cmNlLT5hY2Rpcm1pbjsKIAl0YXJnZXQtPmFjZGlybWF4ID0gc291cmNlLT5hY2Rpcm1heDsKIAl0YXJnZXQtPmNhcHMgPSBzb3VyY2UtPmNhcHM7CisJdGFyZ2V0LT5vcHRpb25zID0gc291cmNlLT5vcHRpb25zOwogfQogCiAvKgpAQCAtOTk1LDYgKzk5OCwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlpZiAoYmRpX2luaXQoJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbykpIHsKKwkJbmZzX2ZyZWVfaW9zdGF0cyhzZXJ2ZXItPmlvX3N0YXRzKTsKKwkJa2ZyZWUoc2VydmVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJcmV0dXJuIHNlcnZlcjsKIH0KIApAQCAtMTUyOSw3ICsxNTM4LDcgQEAKIHN0YXRpYyB2b2lkIG5mc19zZXJ2ZXJfbGlzdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiBzdGF0aWMgaW50IG5mc19zZXJ2ZXJfbGlzdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX3NlcnZlcl9saXN0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX3NlcnZlcl9saXN0X29wcyA9IHsKIAkuc3RhcnQJPSBuZnNfc2VydmVyX2xpc3Rfc3RhcnQsCiAJLm5leHQJPSBuZnNfc2VydmVyX2xpc3RfbmV4dCwKIAkuc3RvcAk9IG5mc19zZXJ2ZXJfbGlzdF9zdG9wLApAQCAtMTU1MCw3ICsxNTU5LDcgQEAKIHN0YXRpYyB2b2lkIG5mc192b2x1bWVfbGlzdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiBzdGF0aWMgaW50IG5mc192b2x1bWVfbGlzdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX3ZvbHVtZV9saXN0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX3ZvbHVtZV9saXN0X29wcyA9IHsKIAkuc3RhcnQJPSBuZnNfdm9sdW1lX2xpc3Rfc3RhcnQsCiAJLm5leHQJPSBuZnNfdm9sdW1lX2xpc3RfbmV4dCwKIAkuc3RvcAk9IG5mc192b2x1bWVfbGlzdF9zdG9wLApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZzY2FjaGUuYyBiL2ZzL25mcy9mc2NhY2hlLmMKaW5kZXggMzc5YmU2Ny4uNzBmYWQ2OSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZzY2FjaGUuYworKysgYi9mcy9uZnMvZnNjYWNoZS5jCkBAIC01OCwxNyArNTgsMzQgQEAKIC8qCiAgKiBHZXQgdGhlIGNhY2hlIGNvb2tpZSBmb3IgYW4gTkZTIHN1cGVyYmxvY2suICBXZSBoYXZlIHRvIGhhbmRsZQogICogdW5pcXVpZmljYXRpb24gaGVyZSBiZWNhdXNlIHRoZSBjYWNoZSBkb2Vzbid0IGRvIGl0IGZvciB1cy4KKyAqCisgKiBUaGUgZGVmYXVsdCB1bmlxdWlmaWVyIGlzIGp1c3QgYW4gZW1wdHkgc3RyaW5nLCBidXQgaXQgbWF5IGJlIG92ZXJyaWRkZW4KKyAqIGVpdGhlciBieSB0aGUgJ2ZzYz14eHgnIG9wdGlvbiB0byBtb3VudCwgb3IgYnkgaW5oZXJpdGluZyBpdCBmcm9tIHRoZSBwYXJlbnQKKyAqIHN1cGVyYmxvY2sgYWNyb3NzIGFuIGF1dG9tb3VudCBwb2ludCBvZiBzb21lIG5hdHVyZS4KICAqLwotdm9pZCBuZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJICBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhKQordm9pZCBuZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKnVuaXEsCisJCQkJICBzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICptbnRkYXRhKQogewogCXN0cnVjdCBuZnNfZnNjYWNoZV9rZXkgKmtleSwgKnhrZXk7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MgPSBORlNfU0Ioc2IpOwogCXN0cnVjdCByYl9ub2RlICoqcCwgKnBhcmVudDsKLQljb25zdCBjaGFyICp1bmlxID0gZGF0YS0+ZnNjYWNoZV91bmlxID86ICIiOwogCWludCBkaWZmLCB1bGVuOwogCi0JdWxlbiA9IHN0cmxlbih1bmlxKTsKKwlpZiAodW5pcSkgeworCQl1bGVuID0gc3RybGVuKHVuaXEpOworCX0gZWxzZSBpZiAobW50ZGF0YSkgeworCQlzdHJ1Y3QgbmZzX3NlcnZlciAqbW50X3MgPSBORlNfU0IobW50ZGF0YS0+c2IpOworCQlpZiAobW50X3MtPmZzY2FjaGVfa2V5KSB7CisJCQl1bmlxID0gbW50X3MtPmZzY2FjaGVfa2V5LT5rZXkudW5pcXVpZmllcjsKKwkJCXVsZW4gPSBtbnRfcy0+ZnNjYWNoZV9rZXktPmtleS51bmlxX2xlbjsKKwkJfQorCX0KKworCWlmICghdW5pcSkgeworCQl1bmlxID0gIiI7CisJCXVsZW4gPSAxOworCX0KKwogCWtleSA9IGt6YWxsb2Moc2l6ZW9mKCprZXkpICsgdWxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrZXkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL25mcy9mc2NhY2hlLmggYi9mcy9uZnMvZnNjYWNoZS5oCmluZGV4IDZlODA5YmIuLmI5YzU3MmQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9mc2NhY2hlLmgKKysrIGIvZnMvbmZzL2ZzY2FjaGUuaApAQCAtNzQsNyArNzQsOCBAQAogZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9jbGllbnRfY29va2llKHN0cnVjdCBuZnNfY2xpZW50ICopOwogCiBleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqLAotCQkJCQkgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqKTsKKwkJCQkJIGNvbnN0IGNoYXIgKiwKKwkJCQkJIHN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKik7CiBleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAKIGV4dGVybiB2b2lkIG5mc19mc2NhY2hlX2luaXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqKTsKQEAgLTE3Myw3ICsxNzQsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZSgKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCXN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKmRhdGEpCisJY29uc3QgY2hhciAqdW5pcSwKKwlzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICptbnRkYXRhKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpIHt9CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHN0YXRlLmMgYi9mcy9uZnMvbmZzNHN0YXRlLmMKaW5kZXggMTQzNDA4MC4uMmVmNGZlYyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mcy9uZnM0c3RhdGUuYwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJbmZzNF9wdXRfbG9ja19zdGF0ZShmbC0+ZmxfdS5uZnM0X2ZsLm93bmVyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX2xvY2tfb3BlcmF0aW9ucyBuZnM0X2ZsX2xvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX2xvY2tfb3BlcmF0aW9ucyBuZnM0X2ZsX2xvY2tfb3BzID0gewogCS5mbF9jb3B5X2xvY2sgPSBuZnM0X2ZsX2NvcHlfbG9jaywKIAkuZmxfcmVsZWFzZV9wcml2YXRlID0gbmZzNF9mbF9yZWxlYXNlX2xvY2ssCiB9OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCBkZTkzNTY5Li44MTA3NzBmIDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtNzI4LDYgKzcyOCwyNyBAQAogCXVubG9ja19rZXJuZWwoKTsKIH0KIAorc3RhdGljIHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKm5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YShpbnQgZmxhZ3MpCit7CisJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YTsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChkYXRhKSB7CisJCWRhdGEtPmZsYWdzCQk9IGZsYWdzOworCQlkYXRhLT5yc2l6ZQkJPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKKwkJZGF0YS0+d3NpemUJCT0gTkZTX01BWF9GSUxFX0lPX1NJWkU7CisJCWRhdGEtPmFjcmVnbWluCQk9IE5GU19ERUZfQUNSRUdNSU47CisJCWRhdGEtPmFjcmVnbWF4CQk9IE5GU19ERUZfQUNSRUdNQVg7CisJCWRhdGEtPmFjZGlybWluCQk9IE5GU19ERUZfQUNESVJNSU47CisJCWRhdGEtPmFjZGlybWF4CQk9IE5GU19ERUZfQUNESVJNQVg7CisJCWRhdGEtPm5mc19zZXJ2ZXIucG9ydAk9IE5GU19VTlNQRUNfUE9SVDsKKwkJZGF0YS0+YXV0aF9mbGF2b3JzWzBdCT0gUlBDX0FVVEhfVU5JWDsKKwkJZGF0YS0+YXV0aF9mbGF2b3JfbGVuCT0gMTsKKwkJZGF0YS0+bWlub3J2ZXJzaW9uCT0gMDsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKIC8qCiAgKiBTYW5pdHktY2hlY2sgYSBzZXJ2ZXIgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgbW91bnQgY29tbWFuZC4KICAqCkBAIC0xNDMwLDEwICsxNDUxLDEzIEBACiAJaW50IHN0YXR1czsKIAogCWlmIChhcmdzLT5tb3VudF9zZXJ2ZXIudmVyc2lvbiA9PSAwKSB7Ci0JCWlmIChhcmdzLT5mbGFncyAmIE5GU19NT1VOVF9WRVIzKQotCQkJYXJncy0+bW91bnRfc2VydmVyLnZlcnNpb24gPSBORlNfTU5UM19WRVJTSU9OOwotCQllbHNlCi0JCQlhcmdzLT5tb3VudF9zZXJ2ZXIudmVyc2lvbiA9IE5GU19NTlRfVkVSU0lPTjsKKwkJc3dpdGNoIChhcmdzLT52ZXJzaW9uKSB7CisJCQlkZWZhdWx0OgorCQkJCWFyZ3MtPm1vdW50X3NlcnZlci52ZXJzaW9uID0gTkZTX01OVDNfVkVSU0lPTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlhcmdzLT5tb3VudF9zZXJ2ZXIudmVyc2lvbiA9IE5GU19NTlRfVkVSU0lPTjsKKwkJfQogCX0KIAlyZXF1ZXN0LnZlcnNpb24gPSBhcmdzLT5tb3VudF9zZXJ2ZXIudmVyc2lvbjsKIApAQCAtMTYzNCwyMCArMTY1OCw2IEBACiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfbm9fZGF0YTsKIAotCWFyZ3MtPmZsYWdzCQk9IChORlNfTU9VTlRfVkVSMyB8IE5GU19NT1VOVF9UQ1ApOwotCWFyZ3MtPnJzaXplCQk9IE5GU19NQVhfRklMRV9JT19TSVpFOwotCWFyZ3MtPndzaXplCQk9IE5GU19NQVhfRklMRV9JT19TSVpFOwotCWFyZ3MtPmFjcmVnbWluCQk9IE5GU19ERUZfQUNSRUdNSU47Ci0JYXJncy0+YWNyZWdtYXgJCT0gTkZTX0RFRl9BQ1JFR01BWDsKLQlhcmdzLT5hY2Rpcm1pbgkJPSBORlNfREVGX0FDRElSTUlOOwotCWFyZ3MtPmFjZGlybWF4CQk9IE5GU19ERUZfQUNESVJNQVg7Ci0JYXJncy0+bW91bnRfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7Ci0JYXJncy0+bmZzX3NlcnZlci5wb3J0CT0gTkZTX1VOU1BFQ19QT1JUOwotCWFyZ3MtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9UQ1A7Ci0JYXJncy0+YXV0aF9mbGF2b3JzWzBdCT0gUlBDX0FVVEhfVU5JWDsKLQlhcmdzLT5hdXRoX2ZsYXZvcl9sZW4JPSAxOwotCWFyZ3MtPm1pbm9ydmVyc2lvbgk9IDA7Ci0KIAlzd2l0Y2ggKGRhdGEtPnZlcnNpb24pIHsKIAljYXNlIDE6CiAJCWRhdGEtPm5hbWxlbiA9IDA7CkBAIC0xNzc4LDcgKzE3ODgsNyBAQAogCX0KIAogI2lmbmRlZiBDT05GSUdfTkZTX1YzCi0JaWYgKGFyZ3MtPmZsYWdzICYgTkZTX01PVU5UX1ZFUjMpCisJaWYgKGFyZ3MtPnZlcnNpb24gPT0gMykKIAkJZ290byBvdXRfdjNfbm90X2NvbXBpbGVkOwogI2VuZGlmIC8qICFDT05GSUdfTkZTX1YzICovCiAKQEAgLTE5MzYsNyArMTk0Niw3IEBACiAJaWYgKGRhdGEtPmJzaXplKQogCQlzYi0+c19ibG9ja3NpemUgPSBuZnNfYmxvY2tfc2l6ZShkYXRhLT5ic2l6ZSwgJnNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKIAotCWlmIChzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX1ZFUjMpIHsKKwlpZiAoc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT52ZXJzaW9uID09IDMpIHsKIAkJLyogVGhlIFZGUyBzaG91bGRuJ3QgYXBwbHkgdGhlIHVtYXNrIHRvIG1vZGUgYml0cy4gV2Ugd2lsbCBkbwogCQkgKiBzbyBvdXJzZWx2ZXMgd2hlbiBuZWNlc3NhcnkuCiAJCSAqLwpAQCAtMTk2MCw3ICsxOTcwLDcgQEAKIAlzYi0+c19ibG9ja3NpemUgPSBvbGRfc2ItPnNfYmxvY2tzaXplOwogCXNiLT5zX21heGJ5dGVzID0gb2xkX3NiLT5zX21heGJ5dGVzOwogCi0JaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfVkVSMykgeworCWlmIChzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPnZlcnNpb24gPT0gMykgewogCQkvKiBUaGUgVkZTIHNob3VsZG4ndCBhcHBseSB0aGUgdW1hc2sgdG8gbW9kZSBiaXRzLiBXZSB3aWxsIGRvCiAJCSAqIHNvIG91cnNlbHZlcyB3aGVuIG5lY2Vzc2FyeS4KIAkJICovCkBAIC0yMDk0LDcgKzIxMDQsNyBAQAogCX07CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAotCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWRhdGEgPSBuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoTkZTX01PVU5UX1ZFUjMgfCBORlNfTU9VTlRfVENQKTsKIAltbnRmaCA9IGt6YWxsb2Moc2l6ZW9mKCptbnRmaCksIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwgfHwgbW50ZmggPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9maDsKQEAgLTIxNDQsNyArMjE1NCw4IEBACiAJaWYgKCFzLT5zX3Jvb3QpIHsKIAkJLyogaW5pdGlhbCBzdXBlcmJsb2NrL3Jvb3QgY3JlYXRpb24gKi8KIAkJbmZzX2ZpbGxfc3VwZXIocywgZGF0YSk7Ci0JCW5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUocywgZGF0YSk7CisJCW5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUoCisJCQlzLCBkYXRhID8gZGF0YS0+ZnNjYWNoZV91bmlxIDogTlVMTCwgTlVMTCk7CiAJfQogCiAJbW50cm9vdCA9IG5mc19nZXRfcm9vdChzLCBtbnRmaCk7CkBAIC0yMTkwLDggKzIyMDEsOCBAQAogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Iocyk7CiAKLQliZGlfdW5yZWdpc3Rlcigmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsKIAlraWxsX2Fub25fc3VwZXIocyk7CisJYmRpX3VucmVnaXN0ZXIoJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbyk7CiAJbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUocyk7CiAJbmZzX2ZyZWVfc2VydmVyKHNlcnZlcik7CiB9CkBAIC0yMjQ1LDYgKzIyNTYsNyBAQAogCWlmICghcy0+c19yb290KSB7CiAJCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovCiAJCW5mc19jbG9uZV9zdXBlcihzLCBkYXRhLT5zYik7CisJCW5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUocywgTlVMTCwgZGF0YSk7CiAJfQogCiAJbW50cm9vdCA9IG5mc19nZXRfcm9vdChzLCBkYXRhLT5maCk7CkBAIC0yMzYyLDE4ICsyMzc0LDcgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9ub19kYXRhOwogCi0JYXJncy0+cnNpemUJCT0gTkZTX01BWF9GSUxFX0lPX1NJWkU7Ci0JYXJncy0+d3NpemUJCT0gTkZTX01BWF9GSUxFX0lPX1NJWkU7Ci0JYXJncy0+YWNyZWdtaW4JCT0gTkZTX0RFRl9BQ1JFR01JTjsKLQlhcmdzLT5hY3JlZ21heAkJPSBORlNfREVGX0FDUkVHTUFYOwotCWFyZ3MtPmFjZGlybWluCQk9IE5GU19ERUZfQUNESVJNSU47Ci0JYXJncy0+YWNkaXJtYXgJCT0gTkZTX0RFRl9BQ0RJUk1BWDsKLQlhcmdzLT5uZnNfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7Ci0JYXJncy0+YXV0aF9mbGF2b3JzWzBdCT0gUlBDX0FVVEhfVU5JWDsKLQlhcmdzLT5hdXRoX2ZsYXZvcl9sZW4JPSAxOwogCWFyZ3MtPnZlcnNpb24JCT0gNDsKLQlhcmdzLT5taW5vcnZlcnNpb24JPSAwOwotCiAJc3dpdGNoIChkYXRhLT52ZXJzaW9uKSB7CiAJY2FzZSAxOgogCQlpZiAoZGF0YS0+aG9zdF9hZGRybGVuID4gc2l6ZW9mKGFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmVzcykpCkBAIC0yNTA4LDcgKzI1MDksOCBAQAogCWlmICghcy0+c19yb290KSB7CiAJCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovCiAJCW5mczRfZmlsbF9zdXBlcihzKTsKLQkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzLCBkYXRhKTsKKwkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZSgKKwkJCXMsIGRhdGEgPyBkYXRhLT5mc2NhY2hlX3VuaXEgOiBOVUxMLCBOVUxMKTsKIAl9CiAKIAltbnRyb290ID0gbmZzNF9nZXRfcm9vdChzLCBtbnRmaCk7CkBAIC0yNjU2LDcgKzI2NTgsNyBAQAogCXN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKmRhdGE7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAotCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWRhdGEgPSBuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoMCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9kYXRhOwogCkBAIC0yNzQxLDYgKzI3NDMsNyBAQAogCWlmICghcy0+c19yb290KSB7CiAJCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovCiAJCW5mczRfY2xvbmVfc3VwZXIocywgZGF0YS0+c2IpOworCQluZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHMsIE5VTEwsIGRhdGEpOwogCX0KIAogCW1udHJvb3QgPSBuZnM0X2dldF9yb290KHMsIGRhdGEtPmZoKTsKQEAgLTI4MjIsNiArMjgyNSw3IEBACiAJaWYgKCFzLT5zX3Jvb3QpIHsKIAkJLyogaW5pdGlhbCBzdXBlcmJsb2NrL3Jvb3QgY3JlYXRpb24gKi8KIAkJbmZzNF9maWxsX3N1cGVyKHMpOworCQluZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHMsIE5VTEwsIGRhdGEpOwogCX0KIAogCW1udHJvb3QgPSBuZnM0X2dldF9yb290KHMsICZtbnRmaCk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL2V4cG9ydC5jIGIvZnMvbmZzZC9leHBvcnQuYwppbmRleCBkOTQ2MjY0Li5jMWM5ZTAzIDEwMDY0NAotLS0gYS9mcy9uZnNkL2V4cG9ydC5jCisrKyBiL2ZzL25mc2QvZXhwb3J0LmMKQEAgLTEzNDEsNiArMTM0MSw4IEBACiAJaWYgKHJ2KQogCQlnb3RvIG91dDsKIAlydiA9IGNoZWNrX25mc2RfYWNjZXNzKGV4cCwgcnFzdHApOworCWlmIChydikKKwkJZmhfcHV0KGZocCk7CiBvdXQ6CiAJZXhwX3B1dChleHApOwogCXJldHVybiBydjsKQEAgLTE1MTUsNyArMTUxNyw3IEBACiAJcmV0dXJuIHN2Y19leHBvcnRfc2hvdyhtLCAmc3ZjX2V4cG9ydF9jYWNoZSwgY3ApOwogfQogCi1zdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX2V4cG9ydHNfb3AgPSB7Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX2V4cG9ydHNfb3AgPSB7CiAJLnN0YXJ0CT0gZV9zdGFydCwKIAkubmV4dAk9IGVfbmV4dCwKIAkuc3RvcAk9IGVfc3RvcCwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3hkci5jIGIvZnMvbmZzZC9uZnMzeGRyLmMKaW5kZXggMDFkNGVjMS4uZWRmOTI2ZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzeGRyLmMKKysrIGIvZnMvbmZzZC9uZnMzeGRyLmMKQEAgLTgxNCwxNyArODE0LDYgQEAKIAlyZXR1cm4gcDsKIH0KIAotc3RhdGljIF9fYmUzMiAqCi1lbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2Uoc3RydWN0IG5mc2QzX3JlYWRkaXJyZXMgKmNkLCBfX2JlMzIgKnAsCi0JCXN0cnVjdCBzdmNfZmggKmZocCkKLXsKLQlwID0gZW5jb2RlX3Bvc3Rfb3BfYXR0cihjZC0+cnFzdHAsIHAsIGZocCk7Ci0JKnArKyA9IHhkcl9vbmU7CQkJLyogeWVzLCBhIGZpbGUgaGFuZGxlIGZvbGxvd3MgKi8KLQlwID0gZW5jb2RlX2ZoKHAsIGZocCk7Ci0JZmhfcHV0KGZocCk7Ci0JcmV0dXJuIHA7Ci19Ci0KIHN0YXRpYyBpbnQKIGNvbXBvc2VfZW50cnlfZmgoc3RydWN0IG5mc2QzX3JlYWRkaXJyZXMgKmNkLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsCiAJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4pCkBAIC04MzYsMjkgKzgyNSw1NCBAQAogCWRwYXJlbnQgPSBjZC0+ZmguZmhfZGVudHJ5OwogCWV4cCAgPSBjZC0+ZmguZmhfZXhwb3J0OwogCi0JZmhfaW5pdChmaHAsIE5GUzNfRkhTSVpFKTsKIAlpZiAoaXNkb3RlbnQobmFtZSwgbmFtbGVuKSkgewogCQlpZiAobmFtbGVuID09IDIpIHsKIAkJCWRjaGlsZCA9IGRnZXRfcGFyZW50KGRwYXJlbnQpOwogCQkJaWYgKGRjaGlsZCA9PSBkcGFyZW50KSB7CiAJCQkJLyogZmlsZXN5c3RlbSByb290IC0gY2Fubm90IHJldHVybiBmaWxlaGFuZGxlIGZvciAiLi4iICovCiAJCQkJZHB1dChkY2hpbGQpOwotCQkJCXJldHVybiAxOworCQkJCXJldHVybiAtRU5PRU5UOwogCQkJfQogCQl9IGVsc2UKIAkJCWRjaGlsZCA9IGRnZXQoZHBhcmVudCk7CiAJfSBlbHNlCiAJCWRjaGlsZCA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIGRwYXJlbnQsIG5hbWxlbik7CiAJaWYgKElTX0VSUihkY2hpbGQpKQotCQlyZXR1cm4gMTsKLQlpZiAoZF9tb3VudHBvaW50KGRjaGlsZCkgfHwKLQkgICAgZmhfY29tcG9zZShmaHAsIGV4cCwgZGNoaWxkLCAmY2QtPmZoKSAhPSAwIHx8Ci0JICAgICFkY2hpbGQtPmRfaW5vZGUpCi0JCXJ2ID0gMTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcnYgPSAtRU5PRU5UOworCWlmIChkX21vdW50cG9pbnQoZGNoaWxkKSkKKwkJZ290byBvdXQ7CisJcnYgPSBmaF9jb21wb3NlKGZocCwgZXhwLCBkY2hpbGQsICZjZC0+ZmgpOworCWlmIChydikKKwkJZ290byBvdXQ7CisJaWYgKCFkY2hpbGQtPmRfaW5vZGUpCisJCWdvdG8gb3V0OworCXJ2ID0gMDsKK291dDoKIAlkcHV0KGRjaGlsZCk7CiAJcmV0dXJuIHJ2OwogfQogCitfX2JlMzIgKmVuY29kZV9lbnRyeXBsdXNfYmFnZ2FnZShzdHJ1Y3QgbmZzZDNfcmVhZGRpcnJlcyAqY2QsIF9fYmUzMiAqcCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWxlbikKK3sKKwlzdHJ1Y3Qgc3ZjX2ZoCWZoOworCWludCBlcnI7CisKKwlmaF9pbml0KCZmaCwgTkZTM19GSFNJWkUpOworCWVyciA9IGNvbXBvc2VfZW50cnlfZmgoY2QsICZmaCwgbmFtZSwgbmFtbGVuKTsKKwlpZiAoZXJyKSB7CisJCSpwKysgPSAwOworCQkqcCsrID0gMDsKKwkJZ290byBvdXQ7CisJfQorCXAgPSBlbmNvZGVfcG9zdF9vcF9hdHRyKGNkLT5ycXN0cCwgcCwgJmZoKTsKKwkqcCsrID0geGRyX29uZTsJCQkvKiB5ZXMsIGEgZmlsZSBoYW5kbGUgZm9sbG93cyAqLworCXAgPSBlbmNvZGVfZmgocCwgJmZoKTsKK291dDoKKwlmaF9wdXQoJmZoKTsKKwlyZXR1cm4gcDsKK30KKwogLyoKICAqIEVuY29kZSBhIGRpcmVjdG9yeSBlbnRyeS4gVGhpcyBvbmUgd29ya3MgZm9yIGJvdGggbm9ybWFsIHJlYWRkaXIKICAqIGFuZCByZWFkZGlycGx1cy4KQEAgLTkyOSwxNiArOTQzLDggQEAKIAogCQlwID0gZW5jb2RlX2VudHJ5X2JhZ2dhZ2UoY2QsIHAsIG5hbWUsIG5hbWxlbiwgaW5vKTsKIAotCQkvKiB0aHJvdyBpbiByZWFkZGlycGx1cyBiYWdnYWdlICovCi0JCWlmIChwbHVzKSB7Ci0JCQlzdHJ1Y3Qgc3ZjX2ZoCWZoOwotCi0JCQlpZiAoY29tcG9zZV9lbnRyeV9maChjZCwgJmZoLCBuYW1lLCBuYW1sZW4pID4gMCkgewotCQkJCSpwKysgPSAwOwotCQkJCSpwKysgPSAwOwotCQkJfSBlbHNlCi0JCQkJcCA9IGVuY29kZV9lbnRyeXBsdXNfYmFnZ2FnZShjZCwgcCwgJmZoKTsKLQkJfQorCQlpZiAocGx1cykKKwkJCXAgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAsIG5hbWUsIG5hbWxlbik7CiAJCW51bV9lbnRyeV93b3JkcyA9IHAgLSBjZC0+YnVmZmVyOwogCX0gZWxzZSBpZiAoY2QtPnJxc3RwLT5ycV9yZXNwYWdlc1twbisxXSAhPSBOVUxMKSB7CiAJCS8qIHRlbXBvcmFyaWx5IGVuY29kZSBlbnRyeSBpbnRvIG5leHQgcGFnZSwgdGhlbiBtb3ZlIGJhY2sgdG8KQEAgLTk1MSwxNyArOTU3LDggQEAKIAogCQlwMSA9IGVuY29kZV9lbnRyeV9iYWdnYWdlKGNkLCBwMSwgbmFtZSwgbmFtbGVuLCBpbm8pOwogCi0JCS8qIHRocm93IGluIHJlYWRkaXJwbHVzIGJhZ2dhZ2UgKi8KLQkJaWYgKHBsdXMpIHsKLQkJCXN0cnVjdCBzdmNfZmgJZmg7Ci0KLQkJCWlmIChjb21wb3NlX2VudHJ5X2ZoKGNkLCAmZmgsIG5hbWUsIG5hbWxlbikgPiAwKSB7Ci0JCQkJLyogemVybyBvdXQgdGhlIGZpbGVoYW5kbGUgKi8KLQkJCQkqcDErKyA9IDA7Ci0JCQkJKnAxKysgPSAwOwotCQkJfSBlbHNlCi0JCQkJcDEgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCAmZmgpOwotCQl9CisJCWlmIChwbHVzKQorCQkJcCA9IGVuY29kZV9lbnRyeXBsdXNfYmFnZ2FnZShjZCwgcDEsIG5hbWUsIG5hbWxlbik7CiAKIAkJLyogZGV0ZXJtaW5lIGVudHJ5IHdvcmQgbGVuZ3RoIGFuZCBsZW5ndGhzIHRvIGdvIGluIHBhZ2VzICovCiAJCW51bV9lbnRyeV93b3JkcyA9IHAxIC0gdG1wOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0YWNsLmMgYi9mcy9uZnNkL25mczRhY2wuYwppbmRleCA1NGI4YjQxLi43MjVkMDJmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRhY2wuYworKysgYi9mcy9uZnNkL25mczRhY2wuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJZGVueSA9IH5wYXMuZ3JvdXAgJiBwYXMub3RoZXI7CiAJaWYgKGRlbnkpIHsKIAkJYWNlLT50eXBlID0gTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRTsKLQkJYWNlLT5mbGFnID0gZWZsYWcgfCBORlM0X0FDRV9JREVOVElGSUVSX0dST1VQOworCQlhY2UtPmZsYWcgPSBlZmxhZzsKIAkJYWNlLT5hY2Nlc3NfbWFzayA9IGRlbnlfbWFza19mcm9tX3Bvc2l4KGRlbnksIGZsYWdzKTsKIAkJYWNlLT53aG90eXBlID0gTkZTNF9BQ0xfV0hPX0dST1VQOwogCQlhY2UrKzsKQEAgLTMzNSw3ICszMzUsNyBAQAogCQlpZiAoZGVueSkgewogCQkJYWNlLT50eXBlID0gTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRTsKIAkJCWFjZS0+ZmxhZyA9IGVmbGFnIHwgTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUDsKLQkJCWFjZS0+YWNjZXNzX21hc2sgPSBtYXNrX2Zyb21fcG9zaXgoZGVueSwgZmxhZ3MpOworCQkJYWNlLT5hY2Nlc3NfbWFzayA9IGRlbnlfbWFza19mcm9tX3Bvc2l4KGRlbnksIGZsYWdzKTsKIAkJCWFjZS0+d2hvdHlwZSA9IE5GUzRfQUNMX1dIT19OQU1FRDsKIAkJCWFjZS0+d2hvID0gcGEtPmVfaWQ7CiAJCQlhY2UrKzsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCmluZGV4IDNmZDIzZjcuLjI0ZThkNzggMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKKysrIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwpAQCAtNDMsMjUgKzQzLDMwIEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzZC9zdGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydHNvY2suaD4KIAogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZICAgICAgICAgICAgICAgIE5GU0REQkdfUFJPQwogCiAjZGVmaW5lIE5GU1BST0M0X0NCX05VTEwgMAogI2RlZmluZSBORlNQUk9DNF9DQl9DT01QT1VORCAxCisjZGVmaW5lIE5GUzRfU1RBVEVJRF9TSVpFIDE2CiAKIC8qIEluZGV4IG9mIHByZWRlZmluZWQgTGludXggY2FsbGJhY2sgY2xpZW50IG9wZXJhdGlvbnMgKi8KIAogZW51bSB7Ci0gICAgICAgIE5GU1BST0M0X0NMTlRfQ0JfTlVMTCA9IDAsCisJTkZTUFJPQzRfQ0xOVF9DQl9OVUxMID0gMCwKIAlORlNQUk9DNF9DTE5UX0NCX1JFQ0FMTCwKKwlORlNQUk9DNF9DTE5UX0NCX1NFUVVFTkNFLAogfTsKIAogZW51bSBuZnNfY2Jfb3BudW00IHsKIAlPUF9DQl9SRUNBTEwgICAgICAgICAgICA9IDQsCisJT1BfQ0JfU0VRVUVOQ0UgICAgICAgICAgPSAxMSwKIH07CiAKICNkZWZpbmUgTkZTNF9NQVhUQUdMRU4JCTIwCkBAIC03MCwxNyArNzUsMjkgQEAKICNkZWZpbmUgTkZTNF9kZWNfY2JfbnVsbF9zegkJMAogI2RlZmluZSBjYl9jb21wb3VuZF9lbmNfaGRyX3N6CQk0CiAjZGVmaW5lIGNiX2NvbXBvdW5kX2RlY19oZHJfc3oJCSgzICsgKE5GUzRfTUFYVEFHTEVOID4+IDIpKQorI2RlZmluZSBzZXNzaW9uaWRfc3oJCQkoTkZTNF9NQVhfU0VTU0lPTklEX0xFTiA+PiAyKQorI2RlZmluZSBjYl9zZXF1ZW5jZV9lbmNfc3oJCShzZXNzaW9uaWRfc3ogKyA0ICsgICAgICAgICAgICAgXAorCQkJCQkxIC8qIG5vIHJlZmVycmluZyBjYWxscyBsaXN0IHlldCAqLykKKyNkZWZpbmUgY2Jfc2VxdWVuY2VfZGVjX3N6CQkob3BfZGVjX3N6ICsgc2Vzc2lvbmlkX3N6ICsgNCkKKwogI2RlZmluZSBvcF9lbmNfc3oJCQkxCiAjZGVmaW5lIG9wX2RlY19zegkJCTIKICNkZWZpbmUgZW5jX25mczRfZmhfc3oJCQkoMSArIChORlM0X0ZIU0laRSA+PiAyKSkKICNkZWZpbmUgZW5jX3N0YXRlaWRfc3oJCQkoTkZTNF9TVEFURUlEX1NJWkUgPj4gMikKICNkZWZpbmUgTkZTNF9lbmNfY2JfcmVjYWxsX3N6CQkoY2JfY29tcG91bmRfZW5jX2hkcl9zeiArICAgICAgIFwKKwkJCQkJY2Jfc2VxdWVuY2VfZW5jX3N6ICsgICAgICAgICAgICBcCiAJCQkJCTEgKyBlbmNfc3RhdGVpZF9zeiArICAgICAgICAgICAgXAogCQkJCQllbmNfbmZzNF9maF9zeikKIAogI2RlZmluZSBORlM0X2RlY19jYl9yZWNhbGxfc3oJCShjYl9jb21wb3VuZF9kZWNfaGRyX3N6ICArICAgICAgXAorCQkJCQljYl9zZXF1ZW5jZV9kZWNfc3ogKyAgICAgICAgICAgIFwKIAkJCQkJb3BfZGVjX3N6KQogCitzdHJ1Y3QgbmZzNF9ycGNfYXJncyB7CisJdm9pZAkJCQkqYXJnc19vcDsKKwlzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UJYXJnc19zZXE7Cit9OworCiAvKgogKiBHZW5lcmljIGVuY29kZSByb3V0aW5lcyBmcm9tIGZzL25mcy9uZnM0eGRyLmMKICovCkBAIC0xMzcsMTEgKzE1NCwxMyBAQAogfSB3aGlsZSAoMCkKIAogc3RydWN0IG5mczRfY2JfY29tcG91bmRfaGRyIHsKLQlpbnQJCXN0YXR1czsKLQl1MzIJCWlkZW50OworCS8qIGFyZ3MgKi8KKwl1MzIJCWlkZW50OwkvKiBtaW5vcnZlcnNpb24gMCBvbmx5ICovCiAJdTMyCQlub3BzOwogCV9fYmUzMgkJKm5vcHNfcDsKIAl1MzIJCW1pbm9ydmVyc2lvbjsKKwkvKiByZXMgKi8KKwlpbnQJCXN0YXR1czsKIAl1MzIJCXRhZ2xlbjsKIAljaGFyCQkqdGFnOwogfTsKQEAgLTIzOCw2ICsyNTcsMjcgQEAKIAloZHItPm5vcHMrKzsKIH0KIAorc3RhdGljIHZvaWQKK2VuY29kZV9jYl9zZXF1ZW5jZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgKmFyZ3MsCisJCSAgIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKQoreworCV9fYmUzMiAqcDsKKworCWlmIChoZHItPm1pbm9ydmVyc2lvbiA9PSAwKQorCQlyZXR1cm47CisKKwlSRVNFUlZFX1NQQUNFKDEgKyBORlM0X01BWF9TRVNTSU9OSURfTEVOICsgMjApOworCisJV1JJVEUzMihPUF9DQl9TRVFVRU5DRSk7CisJV1JJVEVNRU0oYXJncy0+Y2JzX2NscC0+Y2xfc2Vzc2lvbmlkLmRhdGEsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pOworCVdSSVRFMzIoYXJncy0+Y2JzX2NscC0+Y2xfY2Jfc2VxX25yKTsKKwlXUklURTMyKDApOwkJLyogc2xvdGlkLCBhbHdheXMgMCAqLworCVdSSVRFMzIoMCk7CQkvKiBoaWdoZXN0IHNsb3RpZCBhbHdheXMgMCAqLworCVdSSVRFMzIoMCk7CQkvKiBjYWNoZXRoaXMgYWx3YXlzIDAgKi8KKwlXUklURTMyKDApOyAvKiBGSVhNRTogc3VwcG9ydCByZWZlcnJpbmdfY2FsbF9saXN0cyAqLworCWhkci0+bm9wcysrOworfQorCiBzdGF0aWMgaW50CiBuZnM0X3hkcl9lbmNfY2JfbnVsbChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwKQogewpAQCAtMjQ5LDE1ICsyODksMTkgQEAKIH0KIAogc3RhdGljIGludAotbmZzNF94ZHJfZW5jX2NiX3JlY2FsbChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICphcmdzKQorbmZzNF94ZHJfZW5jX2NiX3JlY2FsbChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAorCQlzdHJ1Y3QgbmZzNF9ycGNfYXJncyAqcnBjX2FyZ3MpCiB7CiAJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmFyZ3MgPSBycGNfYXJncy0+YXJnc19vcDsKIAlzdHJ1Y3QgbmZzNF9jYl9jb21wb3VuZF9oZHIgaGRyID0gewogCQkuaWRlbnQgPSBhcmdzLT5kbF9pZGVudCwKKwkJLm1pbm9ydmVyc2lvbiA9IHJwY19hcmdzLT5hcmdzX3NlcS5jYnNfbWlub3J2ZXJzaW9uLAogCX07CiAKIAl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7CiAJZW5jb2RlX2NiX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwllbmNvZGVfY2Jfc2VxdWVuY2UoJnhkciwgJnJwY19hcmdzLT5hcmdzX3NlcSwgJmhkcik7CiAJZW5jb2RlX2NiX3JlY2FsbCgmeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfY2Jfbm9wcygmaGRyKTsKIAlyZXR1cm4gMDsKQEAgLTI5OSw2ICszNDMsNTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIE91ciBjdXJyZW50IGJhY2sgY2hhbm5lbCBpbXBsbWVudGF0aW9uIHN1cHBvcnRzIGEgc2luZ2xlIGJhY2tjaGFubmVsCisgKiB3aXRoIGEgc2luZ2xlIHNsb3QuCisgKi8KK3N0YXRpYyBpbnQKK2RlY29kZV9jYl9zZXF1ZW5jZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgKnJlcywKKwkJICAgc3RydWN0IHJwY19ycXN0ICpycXN0cCkKK3sKKwlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgaWQ7CisJaW50IHN0YXR1czsKKwl1MzIgZHVtbXk7CisJX19iZTMyICpwOworCisJaWYgKHJlcy0+Y2JzX21pbm9ydmVyc2lvbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IGRlY29kZV9jYl9vcF9oZHIoeGRyLCBPUF9DQl9TRVFVRU5DRSk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qCisJICogSWYgdGhlIHNlcnZlciByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHNlc3Npb25JRCwgc2xvdElEIG9yCisJICogc2VxdWVuY2UgbnVtYmVyLCB0aGUgc2VydmVyIGlzIGxvb25leSB0dW5lcy4KKwkgKi8KKwlzdGF0dXMgPSAtRVNFUlZFUkZBVUxUOworCisJUkVBRF9CVUYoTkZTNF9NQVhfU0VTU0lPTklEX0xFTiArIDE2KTsKKwltZW1jcHkoaWQuZGF0YSwgcCwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7CisJcCArPSBYRFJfUVVBRExFTihORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKKwlpZiAobWVtY21wKGlkLmRhdGEsIHJlcy0+Y2JzX2NscC0+Y2xfc2Vzc2lvbmlkLmRhdGEsCisJCSAgIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKSB7CisJCWRwcmludGsoIiVzIEludmFsaWQgc2Vzc2lvbiBpZFxuIiwgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJUkVBRDMyKGR1bW15KTsKKwlpZiAoZHVtbXkgIT0gcmVzLT5jYnNfY2xwLT5jbF9jYl9zZXFfbnIpIHsKKwkJZHByaW50aygiJXMgSW52YWxpZCBzZXF1ZW5jZSBudW1iZXJcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCVJFQUQzMihkdW1teSk7IAkvKiBzbG90aWQgbXVzdCBiZSAwICovCisJaWYgKGR1bW15ICE9IDApIHsKKwkJZHByaW50aygiJXMgSW52YWxpZCBzbG90aWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIEZJWE1FOiBwcm9jZXNzIGhpZ2hlc3Qgc2xvdGlkIGFuZCB0YXJnZXQgaGlnaGVzdCBzbG90aWQgKi8KKwlzdGF0dXMgPSAwOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKwogc3RhdGljIGludAogbmZzNF94ZHJfZGVjX2NiX251bGwoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCkKIHsKQEAgLTMwNiw3ICs0MDEsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1uZnM0X3hkcl9kZWNfY2JfcmVjYWxsKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCkKK25mczRfeGRyX2RlY19jYl9yZWNhbGwoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLAorCQlzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgKnNlcSkKIHsKIAlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IG5mczRfY2JfY29tcG91bmRfaGRyIGhkcjsKQEAgLTMxNiw2ICs0MTIsMTEgQEAKIAlzdGF0dXMgPSBkZWNvZGVfY2JfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OworCWlmIChzZXEpIHsKKwkJc3RhdHVzID0gZGVjb2RlX2NiX3NlcXVlbmNlKCZ4ZHIsIHNlcSwgcnFzdHApOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBvdXQ7CisJfQogCXN0YXR1cyA9IGRlY29kZV9jYl9vcF9oZHIoJnhkciwgT1BfQ0JfUkVDQUxMKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzc3LDE2ICs0NzgsMTUgQEAKIAogaW50IHNldHVwX2NhbGxiYWNrX2NsaWVudChzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4JYWRkcjsKIAlzdHJ1Y3QgbmZzNF9jYl9jb25uICpjYiA9ICZjbHAtPmNsX2NiX2Nvbm47CiAJc3RydWN0IHJwY190aW1lb3V0CXRpbWVwYXJtcyA9IHsKIAkJLnRvX2luaXR2YWwJPSBtYXhfY2JfdGltZSgpLAogCQkudG9fcmV0cmllcwk9IDAsCiAJfTsKIAlzdHJ1Y3QgcnBjX2NyZWF0ZV9hcmdzIGFyZ3MgPSB7Ci0JCS5wcm90b2NvbAk9IElQUFJPVE9fVENQLAotCQkuYWRkcmVzcwk9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKLQkJLmFkZHJzaXplCT0gc2l6ZW9mKGFkZHIpLAorCQkucHJvdG9jb2wJPSBYUFJUX1RSQU5TUE9SVF9UQ1AsCisJCS5hZGRyZXNzCT0gKHN0cnVjdCBzb2NrYWRkciAqKSAmY2ItPmNiX2FkZHIsCisJCS5hZGRyc2l6ZQk9IGNiLT5jYl9hZGRybGVuLAogCQkudGltZW91dAk9ICZ0aW1lcGFybXMsCiAJCS5wcm9ncmFtCT0gJmNiX3Byb2dyYW0sCiAJCS5wcm9nbnVtYmVyCT0gY2ItPmNiX3Byb2csCkBAIC0zOTksMTMgKzQ5OSwxMCBAQAogCiAJaWYgKCFjbHAtPmNsX3ByaW5jaXBhbCAmJiAoY2xwLT5jbF9mbGF2b3IgPj0gUlBDX0FVVEhfR1NTX0tSQjUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEluaXRpYWxpemUgYWRkcmVzcyAqLwotCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKLQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWFkZHIuc2luX3BvcnQgPSBodG9ucyhjYi0+Y2JfcG9ydCk7Ci0JYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChjYi0+Y2JfYWRkcik7Ci0KKwlpZiAoY2ItPmNiX21pbm9ydmVyc2lvbikgeworCQlhcmdzLmJjX3hwcnQgPSBjbHAtPmNsX2NiX3hwcnQ7CisJCWFyZ3MucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9CQ19UQ1A7CisJfQogCS8qIENyZWF0ZSBSUEMgY2xpZW50ICovCiAJY2xpZW50ID0gcnBjX2NyZWF0ZSgmYXJncyk7CiAJaWYgKElTX0VSUihjbGllbnQpKSB7CkBAIC00MzksNDIgKzUzNiwyOSBAQAogCS5ycGNfY2FsbF9kb25lID0gbmZzZDRfY2JfcHJvYmVfZG9uZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX2NyZWQgKmxvb2t1cF9jYl9jcmVkKHN0cnVjdCBuZnM0X2NiX2Nvbm4gKmNiKQotewotCXN0cnVjdCBhdXRoX2NyZWQgYWNyZWQgPSB7Ci0JCS5tYWNoaW5lX2NyZWQgPSAxCi0JfTsKK3N0YXRpYyBzdHJ1Y3QgcnBjX2NyZWQgKmNhbGxiYWNrX2NyZWQ7CiAKLQkvKgotCSAqIE5vdGUgaW4gdGhlIGdzcyBjYXNlIHRoaXMgZG9lc24ndCBhY3R1YWxseSBoYXZlIHRvIHdhaXQgZm9yIGEKLQkgKiBnc3MgdXBjYWxsIChvciBhbnkgY2FsbHMgdG8gdGhlIGNsaWVudCk7IHRoaXMganVzdCBjcmVhdGVzIGEKLQkgKiBub24tdXB0b2RhdGUgY3JlZCB3aGljaCB0aGUgcnBjIHN0YXRlIG1hY2hpbmUgd2lsbCBmaWxsIGluIHdpdGgKLQkgKiBhIHJlZnJlc2hfdXBjYWxsIGxhdGVyLgotCSAqLwotCXJldHVybiBycGNhdXRoX2xvb2t1cF9jcmVkY2FjaGUoY2ItPmNiX2NsaWVudC0+Y2xfYXV0aCwgJmFjcmVkLAotCQkJCQkJCVJQQ0FVVEhfTE9PS1VQX05FVyk7CitpbnQgc2V0X2NhbGxiYWNrX2NyZWQodm9pZCkKK3sKKwljYWxsYmFja19jcmVkID0gcnBjX2xvb2t1cF9tYWNoaW5lX2NyZWQoKTsKKwlpZiAoIWNhbGxiYWNrX2NyZWQpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOwogfQogCisKIHZvaWQgZG9fcHJvYmVfY2FsbGJhY2soc3RydWN0IG5mczRfY2xpZW50ICpjbHApCiB7CiAJc3RydWN0IG5mczRfY2JfY29ubiAqY2IgPSAmY2xwLT5jbF9jYl9jb25uOwogCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CiAJCS5ycGNfcHJvYyAgICAgICA9ICZuZnM0X2NiX3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9DQl9OVUxMXSwKIAkJLnJwY19hcmdwICAgICAgID0gY2xwLAorCQkucnBjX2NyZWQJPSBjYWxsYmFja19jcmVkCiAJfTsKLQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CiAJaW50IHN0YXR1czsKIAotCWNyZWQgPSBsb29rdXBfY2JfY3JlZChjYik7Ci0JaWYgKElTX0VSUihjcmVkKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKGNyZWQpOwotCQlnb3RvIG91dDsKLQl9Ci0JY2ItPmNiX2NyZWQgPSBjcmVkOwotCW1zZy5ycGNfY3JlZCA9IGNiLT5jYl9jcmVkOwogCXN0YXR1cyA9IHJwY19jYWxsX2FzeW5jKGNiLT5jYl9jbGllbnQsICZtc2csIFJQQ19UQVNLX1NPRlQsCiAJCQkJJm5mc2Q0X2NiX3Byb2JlX29wcywgKHZvaWQgKiljbHApOwotb3V0OgogCWlmIChzdGF0dXMpIHsKIAkJd2Fybl9ub19jYWxsYmFja19wYXRoKGNscCwgc3RhdHVzKTsKIAkJcHV0X25mczRfY2xpZW50KGNscCk7CkBAIC01MDMsMTEgKzU4Nyw5NSBAQAogCWRvX3Byb2JlX2NhbGxiYWNrKGNscCk7CiB9CiAKKy8qCisgKiBUaGVyZSdzIGN1cnJlbnRseSBhIHNpbmdsZSBjYWxsYmFjayBjaGFubmVsIHNsb3QuCisgKiBJZiB0aGUgc2xvdCBpcyBhdmFpbGFibGUsIHRoZW4gbWFyayBpdCBidXN5LiAgT3RoZXJ3aXNlLCBzZXQgdGhlCisgKiB0aHJlYWQgZm9yIHNsZWVwaW5nIG9uIHRoZSBjYWxsYmFjayBSUEMgd2FpdCBxdWV1ZS4KKyAqLworc3RhdGljIGludCBuZnNkNDFfY2Jfc2V0dXBfc2VxdWVuY2Uoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsCisJCXN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgbmZzNF9ycGNfYXJncyAqYXJncyA9IHRhc2stPnRrX21zZy5ycGNfYXJncDsKKwl1MzIgKnB0ciA9ICh1MzIgKiljbHAtPmNsX3Nlc3Npb25pZC5kYXRhOworCWludCBzdGF0dXMgPSAwOworCisJZHByaW50aygiJXM6ICV1OiV1OiV1OiV1XG4iLCBfX2Z1bmNfXywKKwkJcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdKTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZjbHAtPmNsX2NiX3Nsb3RfYnVzeSkgIT0gMCkgeworCQlycGNfc2xlZXBfb24oJmNscC0+Y2xfY2Jfd2FpdHEsIHRhc2ssIE5VTEwpOworCQlkcHJpbnRrKCIlcyBzbG90IGlzIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBXZSdsbCBuZWVkIHRoZSBjbHAgZHVyaW5nIFhEUiBlbmNvZGluZyBhbmQgZGVjb2RpbmcsCisJICogYW5kIHRoZSBzZXF1ZW5jZSBkdXJpbmcgZGVjb2RpbmcgdG8gdmVyaWZ5IHRoZSByZXBseQorCSAqLworCWFyZ3MtPmFyZ3Nfc2VxLmNic19jbHAgPSBjbHA7CisJdGFzay0+dGtfbXNnLnJwY19yZXNwID0gJmFyZ3MtPmFyZ3Nfc2VxOworCitvdXQ6CisJZHByaW50aygiJXMgc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogVE9ETzogY2Jfc2VxdWVuY2Ugc2hvdWxkIHN1cHBvcnQgcmVmZXJyaW5nIGNhbGwgbGlzdHMsIGNhY2hldGhpcywgbXVsdGlwbGUKKyAqIHNsb3RzLCBhbmQgbWFyayBjYWxsYmFjayBjaGFubmVsIGRvd24gb24gY29tbXVuaWNhdGlvbiBlcnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkIG5mc2Q0X2NiX3ByZXBhcmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpjYWxsZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IGNhbGxkYXRhOworCXN0cnVjdCBuZnM0X2NsaWVudCAqY2xwID0gZHAtPmRsX2NsaWVudDsKKwlzdHJ1Y3QgbmZzNF9ycGNfYXJncyAqYXJncyA9IHRhc2stPnRrX21zZy5ycGNfYXJncDsKKwl1MzIgbWlub3J2ZXJzaW9uID0gY2xwLT5jbF9jYl9jb25uLmNiX21pbm9ydmVyc2lvbjsKKwlpbnQgc3RhdHVzID0gMDsKKworCWFyZ3MtPmFyZ3Nfc2VxLmNic19taW5vcnZlcnNpb24gPSBtaW5vcnZlcnNpb247CisJaWYgKG1pbm9ydmVyc2lvbikgeworCQlzdGF0dXMgPSBuZnNkNDFfY2Jfc2V0dXBfc2VxdWVuY2UoY2xwLCB0YXNrKTsKKwkJaWYgKHN0YXR1cykgeworCQkJaWYgKHN0YXR1cyAhPSAtRUFHQUlOKSB7CisJCQkJLyogdGVybWluYXRlIHJwYyB0YXNrICovCisJCQkJdGFzay0+dGtfc3RhdHVzID0gc3RhdHVzOworCQkJCXRhc2stPnRrX2FjdGlvbiA9IE5VTEw7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9CisJcnBjX2NhbGxfc3RhcnQodGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG5mc2Q0X2NiX2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpjYWxsZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IGNhbGxkYXRhOworCXN0cnVjdCBuZnM0X2NsaWVudCAqY2xwID0gZHAtPmRsX2NsaWVudDsKKworCWRwcmludGsoIiVzOiBtaW5vcnZlcnNpb249JWRcbiIsIF9fZnVuY19fLAorCQljbHAtPmNsX2NiX2Nvbm4uY2JfbWlub3J2ZXJzaW9uKTsKKworCWlmIChjbHAtPmNsX2NiX2Nvbm4uY2JfbWlub3J2ZXJzaW9uKSB7CisJCS8qIE5vIG5lZWQgZm9yIGxvY2ssIGFjY2VzcyBzZXJpYWxpemVkIGluIG5mc2Q0X2NiX3ByZXBhcmUgKi8KKwkJKytjbHAtPmNsX2NiX3NlcV9ucjsKKwkJY2xlYXJfYml0KDAsICZjbHAtPmNsX2NiX3Nsb3RfYnVzeSk7CisJCXJwY193YWtlX3VwX25leHQoJmNscC0+Y2xfY2Jfd2FpdHEpOworCQlkcHJpbnRrKCIlczogZnJlZWQgc2xvdCwgbmV3IHNlcWlkPSVkXG4iLCBfX2Z1bmNfXywKKwkJCWNscC0+Y2xfY2Jfc2VxX25yKTsKKworCQkvKiBXZSdyZSBkb25lIGxvb2tpbmcgaW50byB0aGUgc2VxdWVuY2UgaW5mb3JtYXRpb24gKi8KKwkJdGFzay0+dGtfbXNnLnJwY19yZXNwID0gTlVMTDsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG5mc2Q0X2NiX3JlY2FsbF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCiB7CiAJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAgPSBjYWxsZGF0YTsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCA9IGRwLT5kbF9jbGllbnQ7CiAKKwluZnNkNF9jYl9kb25lKHRhc2ssIGNhbGxkYXRhKTsKKwogCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7CiAJY2FzZSAtRUlPOgogCQkvKiBOZXR3b3JrIHBhcnRpdGlvbj8gKi8KQEAgLTUyMCwxNiArNjg4LDE5IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHN1Y2Nlc3MsIG9yIGVycm9yIHdlIGNhbid0IGhhbmRsZSAqLwotCQlyZXR1cm47CisJCWdvdG8gZG9uZTsKIAl9CiAJaWYgKGRwLT5kbF9yZXRyaWVzLS0pIHsKIAkJcnBjX2RlbGF5KHRhc2ssIDIqSFopOwogCQl0YXNrLT50a19zdGF0dXMgPSAwOwogCQlycGNfcmVzdGFydF9jYWxsKHRhc2spOworCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJYXRvbWljX3NldCgmY2xwLT5jbF9jYl9jb25uLmNiX3NldCwgMCk7CiAJCXdhcm5fbm9fY2FsbGJhY2tfcGF0aChjbHAsIHRhc2stPnRrX3N0YXR1cyk7CiAJfQorZG9uZToKKwlrZnJlZSh0YXNrLT50a19tc2cucnBjX2FyZ3ApOwogfQogCiBzdGF0aWMgdm9pZCBuZnNkNF9jYl9yZWNhbGxfcmVsZWFzZSh2b2lkICpjYWxsZGF0YSkKQEAgLTU0Miw2ICs3MTMsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnNkNF9jYl9yZWNhbGxfb3BzID0geworCS5ycGNfY2FsbF9wcmVwYXJlID0gbmZzZDRfY2JfcHJlcGFyZSwKIAkucnBjX2NhbGxfZG9uZSA9IG5mc2Q0X2NiX3JlY2FsbF9kb25lLAogCS5ycGNfcmVsZWFzZSA9IG5mc2Q0X2NiX3JlY2FsbF9yZWxlYXNlLAogfTsKQEAgLTU1NCwxNyArNzI2LDI0IEBACiB7CiAJc3RydWN0IG5mczRfY2xpZW50ICpjbHAgPSBkcC0+ZGxfY2xpZW50OwogCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGNscC0+Y2xfY2JfY29ubi5jYl9jbGllbnQ7CisJc3RydWN0IG5mczRfcnBjX2FyZ3MgKmFyZ3M7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jID0gJm5mczRfY2JfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX0NCX1JFQ0FMTF0sCi0JCS5ycGNfYXJncCA9IGRwLAotCQkucnBjX2NyZWQgPSBjbHAtPmNsX2NiX2Nvbm4uY2JfY3JlZAorCQkucnBjX2NyZWQgPSBjYWxsYmFja19jcmVkCiAJfTsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSAtRU5PTUVNOwogCisJYXJncyA9IGt6YWxsb2Moc2l6ZW9mKCphcmdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmdzKQorCQlnb3RvIG91dDsKKwlhcmdzLT5hcmdzX29wID0gZHA7CisJbXNnLnJwY19hcmdwID0gYXJnczsKIAlkcC0+ZGxfcmV0cmllcyA9IDE7CiAJc3RhdHVzID0gcnBjX2NhbGxfYXN5bmMoY2xudCwgJm1zZywgUlBDX1RBU0tfU09GVCwKIAkJCQkmbmZzZDRfY2JfcmVjYWxsX29wcywgZHApOworb3V0OgogCWlmIChzdGF0dXMpIHsKKwkJa2ZyZWUoYXJncyk7CiAJCXB1dF9uZnM0X2NsaWVudChjbHApOwogCQluZnM0X3B1dF9kZWxlZ2F0aW9uKGRwKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRwcm9jLmMgYi9mcy9uZnNkL25mczRwcm9jLmMKaW5kZXggN2M4ODAxNy4uYmViYzBjMiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzNHByb2MuYwpAQCAtNjgsNyArNjgsNiBAQAogCQkgICB1MzIgKmJtdmFsLCB1MzIgKndyaXRhYmxlKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGNzdGF0ZS0+Y3VycmVudF9maC5maF9kZW50cnk7Ci0Jc3RydWN0IHN2Y19leHBvcnQgKmV4cCA9IGNzdGF0ZS0+Y3VycmVudF9maC5maF9leHBvcnQ7CiAKIAkvKgogCSAqIENoZWNrIGFib3V0IGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgTkZTdjQgc2VydmVyIG9yIG5vdC4KQEAgLTgwLDE3ICs3OSwxMyBAQAogCQlyZXR1cm4gbmZzZXJyX2F0dHJub3RzdXBwOwogCiAJLyoKLQkgKiBDaGVjayBGQVRUUjRfV09SRDBfQUNMICYgRkFUVFI0X1dPUkQwX0ZTX0xPQ0FUSU9OUyBjYW4gYmUgc3VwcG9ydGVkCisJICogQ2hlY2sgRkFUVFI0X1dPUkQwX0FDTCBjYW4gYmUgc3VwcG9ydGVkCiAJICogaW4gY3VycmVudCBlbnZpcm9ubWVudCBvciBub3QuCiAJICovCiAJaWYgKGJtdmFsWzBdICYgRkFUVFI0X1dPUkQwX0FDTCkgewogCQlpZiAoIUlTX1BPU0lYQUNMKGRlbnRyeS0+ZF9pbm9kZSkpCiAJCQlyZXR1cm4gbmZzZXJyX2F0dHJub3RzdXBwOwogCX0KLQlpZiAoYm12YWxbMF0gJiBGQVRUUjRfV09SRDBfRlNfTE9DQVRJT05TKSB7Ci0JCWlmIChleHAtPmV4X2ZzbG9jcy5sb2NhdGlvbnMgPT0gTlVMTCkKLQkJCXJldHVybiBuZnNlcnJfYXR0cm5vdHN1cHA7Ci0JfQogCiAJLyoKIAkgKiBBY2NvcmRpbmcgdG8gc3BlYywgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgcmV0dXJuIEVSUl9JTlZBTC4KQEAgLTEyMyw2ICsxMTgsMzUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50Citpc19jcmVhdGVfd2l0aF9hdHRycyhzdHJ1Y3QgbmZzZDRfb3BlbiAqb3BlbikKK3sKKwlyZXR1cm4gb3Blbi0+b3BfY3JlYXRlID09IE5GUzRfT1BFTl9DUkVBVEUKKwkJJiYgKG9wZW4tPm9wX2NyZWF0ZW1vZGUgPT0gTkZTNF9DUkVBVEVfVU5DSEVDS0VECisJCSAgICB8fCBvcGVuLT5vcF9jcmVhdGVtb2RlID09IE5GUzRfQ1JFQVRFX0dVQVJERUQKKwkJICAgIHx8IG9wZW4tPm9wX2NyZWF0ZW1vZGUgPT0gTkZTNF9DUkVBVEVfRVhDTFVTSVZFNF8xKTsKK30KKworLyoKKyAqIGlmIGVycm9yIG9jY3VycyB3aGVuIHNldHRpbmcgdGhlIGFjbCwganVzdCBjbGVhciB0aGUgYWNsIGJpdAorICogaW4gdGhlIHJldHVybmVkIGF0dHIgYml0bWFwLgorICovCitzdGF0aWMgdm9pZAorZG9fc2V0X25mczRfYWNsKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCwKKwkJc3RydWN0IG5mczRfYWNsICphY2wsIHUzMiAqYm12YWwpCit7CisJX19iZTMyIHN0YXR1czsKKworCXN0YXR1cyA9IG5mc2Q0X3NldF9uZnM0X2FjbChycXN0cCwgZmhwLCBhY2wpOworCWlmIChzdGF0dXMpCisJCS8qCisJCSAqIFdlIHNob3VsZCBwcm9iYWJseSBmYWlsIHRoZSB3aG9sZSBvcGVuIGF0IHRoaXMgcG9pbnQsCisJCSAqIGJ1dCB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIGZpbGUsIHNvIGl0J3MgdG9vIGxhdGU7CisJCSAqIFNvIHRoaXMgc2VlbXMgdGhlIGxlYXN0IG9mIGV2aWxzOgorCQkgKi8KKwkJYm12YWxbMF0gJj0gfkZBVFRSNF9XT1JEMF9BQ0w7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogZmhfZHVwMihzdHJ1Y3Qgc3ZjX2ZoICpkc3QsIHN0cnVjdCBzdmNfZmggKnNyYykKIHsKQEAgLTIwNiw2ICsyMzAsOSBAQAogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwogCisJaWYgKGlzX2NyZWF0ZV93aXRoX2F0dHJzKG9wZW4pICYmIG9wZW4tPm9wX2FjbCAhPSBOVUxMKQorCQlkb19zZXRfbmZzNF9hY2wocnFzdHAsICZyZXNmaCwgb3Blbi0+b3BfYWNsLCBvcGVuLT5vcF9ibXZhbCk7CisKIAlzZXRfY2hhbmdlX2luZm8oJm9wZW4tPm9wX2NpbmZvLCBjdXJyZW50X2ZoKTsKIAlmaF9kdXAyKGN1cnJlbnRfZmgsICZyZXNmaCk7CiAKQEAgLTUzNiwxMiArNTYzLDE3IEBACiAJCXN0YXR1cyA9IG5mc2Vycl9iYWR0eXBlOwogCX0KIAotCWlmICghc3RhdHVzKSB7Ci0JCWZoX3VubG9jaygmY3N0YXRlLT5jdXJyZW50X2ZoKTsKLQkJc2V0X2NoYW5nZV9pbmZvKCZjcmVhdGUtPmNyX2NpbmZvLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKLQkJZmhfZHVwMigmY3N0YXRlLT5jdXJyZW50X2ZoLCAmcmVzZmgpOwotCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKIAorCWlmIChjcmVhdGUtPmNyX2FjbCAhPSBOVUxMKQorCQlkb19zZXRfbmZzNF9hY2wocnFzdHAsICZyZXNmaCwgY3JlYXRlLT5jcl9hY2wsCisJCQkJY3JlYXRlLT5jcl9ibXZhbCk7CisKKwlmaF91bmxvY2soJmNzdGF0ZS0+Y3VycmVudF9maCk7CisJc2V0X2NoYW5nZV9pbmZvKCZjcmVhdGUtPmNyX2NpbmZvLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKKwlmaF9kdXAyKCZjc3RhdGUtPmN1cnJlbnRfZmgsICZyZXNmaCk7CitvdXQ6CiAJZmhfcHV0KCZyZXNmaCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTk0NywzNCArOTc5LDYgQEAKIHN0YXRpYyBjb25zdCBjaGFyICpuZnNkNF9vcF9uYW1lKHVuc2lnbmVkIG9wbnVtKTsKIAogLyoKLSAqIFRoaXMgaXMgYSByZXBsYXkgb2YgYSBjb21wb3VuZCBmb3Igd2hpY2ggbm8gY2FjaGUgZW50cnkgcGFnZXMKLSAqIHdlcmUgdXNlZC4gRW5jb2RlIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb24sIGFuZCBpZiBjYWNoZXRoaXMgaXMgRkFMU0UKLSAqIGVuY29kZSB0aGUgdW5jYWNoZSByZXAgZXJyb3Igb24gdGhlIG5leHQgb3BlcmF0aW9uLgotICovCi1zdGF0aWMgX19iZTMyCi1uZnNkNF9lbmNfdW5jYWNoZWRfcmVwbGF5KHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3MsCi0JCQkgc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwKQotewotCXN0cnVjdCBuZnNkNF9vcCAqb3A7Ci0KLQlkcHJpbnRrKCItLT4gJXMgcmVzcC0+b3BjbnQgJWQgY2VfY2FjaGV0aGlzICV1IFxuIiwgX19mdW5jX18sCi0JCXJlc3AtPm9wY250LCByZXNwLT5jc3RhdGUuc2xvdC0+c2xfY2FjaGVfZW50cnkuY2VfY2FjaGV0aGlzKTsKLQotCS8qIEVuY29kZSB0aGUgcmVwbGF5ZWQgc2VxdWVuY2Ugb3BlcmF0aW9uICovCi0JQlVHX09OKHJlc3AtPm9wY250ICE9IDEpOwotCW9wID0gJmFyZ3MtPm9wc1tyZXNwLT5vcGNudCAtIDFdOwotCW5mc2Q0X2VuY29kZV9vcGVyYXRpb24ocmVzcCwgb3ApOwotCi0JLypyZXR1cm4gbmZzZXJyX3JldHJ5X3VuY2FjaGVkX3JlcCBpbiBuZXh0IG9wZXJhdGlvbi4gKi8KLQlpZiAocmVzcC0+Y3N0YXRlLnNsb3QtPnNsX2NhY2hlX2VudHJ5LmNlX2NhY2hldGhpcyA9PSAwKSB7Ci0JCW9wID0gJmFyZ3MtPm9wc1tyZXNwLT5vcGNudCsrXTsKLQkJb3AtPnN0YXR1cyA9IG5mc2Vycl9yZXRyeV91bmNhY2hlZF9yZXA7Ci0JCW5mc2Q0X2VuY29kZV9vcGVyYXRpb24ocmVzcCwgb3ApOwotCX0KLQlyZXR1cm4gb3AtPnN0YXR1czsKLX0KLQotLyoKICAqIEVuZm9yY2UgTkZTdjQuMSBDT01QT1VORCBvcmRlcmluZyBydWxlcy4KICAqCiAgKiBUT0RPOgpAQCAtMTA4MywxMyArMTA4NywxMCBAQAogCQkJQlVHX09OKG9wLT5zdGF0dXMgPT0gbmZzX29rKTsKIAogZW5jb2RlX29wOgotCQkvKiBPbmx5IGZyb20gU0VRVUVOQ0Ugb3IgQ1JFQVRFX1NFU1NJT04gKi8KKwkJLyogT25seSBmcm9tIFNFUVVFTkNFICovCiAJCWlmIChyZXNwLT5jc3RhdGUuc3RhdHVzID09IG5mc2Vycl9yZXBsYXlfY2FjaGUpIHsKIAkJCWRwcmludGsoIiVzIE5GUzQuMSByZXBsYXkgZnJvbSBjYWNoZVxuIiwgX19mdW5jX18pOwotCQkJaWYgKG5mc2Q0X25vdF9jYWNoZWQocmVzcCkpCi0JCQkJc3RhdHVzID0gbmZzZDRfZW5jX3VuY2FjaGVkX3JlcGxheShhcmdzLCByZXNwKTsKLQkJCWVsc2UKLQkJCQlzdGF0dXMgPSBvcC0+c3RhdHVzOworCQkJc3RhdHVzID0gb3AtPnN0YXR1czsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWlmIChvcC0+c3RhdHVzID09IG5mc2Vycl9yZXBsYXlfbWUpIHsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDk4MGEyMTYuLjIxNTNmOWIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjYXV0aF9nc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogCiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkgICAgICAgICAgICAgICAgTkZTRERCR19QUk9DCiAKQEAgLTQxMywzNiArNDE0LDY1IEBACiB9CiAKIC8qCi0gKiBHaXZlIHRoZSBjbGllbnQgdGhlIG51bWJlciBvZiBzbG90cyBpdCByZXF1ZXN0cyBib3VuZCBieQotICogTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04gYW5kIGJ5IHN2X2RyY19tYXhfcGFnZXMuCi0gKgotICogSWYgd2UgcnVuIG91dCBvZiBwYWdlcyAoc3ZfZHJjX3BhZ2VzX3VzZWQgPT0gc3ZfZHJjX21heF9wYWdlcykgd2UKLSAqIHNob3VsZCAodXAgdG8gYSBwb2ludCkgcmUtbmVnb3RpYXRlIGFjdGl2ZSBzZXNzaW9ucyBhbmQgcmVkdWNlIHRoZWlyCi0gKiBzbG90IHVzYWdlIHRvIG1ha2Ugcm9vb20gZm9yIG5ldyBjb25uZWN0aW9ucy4gRm9yIG5vdyB3ZSBqdXN0IGZhaWwgdGhlCi0gKiBjcmVhdGUgc2Vzc2lvbi4KKyAqIFRoZSBwcm90b2NvbCBkZWZpbmVzIGNhX21heHJlc3BvbnNzaXplX2NhY2hlZCB0byBpbmNsdWRlIHRoZSBzaXplIG9mCisgKiB0aGUgcnBjIGhlYWRlciwgYnV0IGFsbCB3ZSBuZWVkIHRvIGNhY2hlIGlzIHRoZSBkYXRhIHN0YXJ0aW5nIGFmdGVyCisgKiB0aGUgZW5kIG9mIHRoZSBpbml0aWFsIFNFUVVFTkNFIG9wZXJhdGlvbi0tdGhlIHJlc3Qgd2UgcmVnZW5lcmF0ZQorICogZWFjaCB0aW1lLiAgVGhlcmVmb3JlIHdlIGNhbiBhZHZlcnRpc2UgYSBjYV9tYXhyZXNwb25zc2l6ZV9jYWNoZWQKKyAqIHZhbHVlIHRoYXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiBvdXIgY2FjaGUgcGx1cyBhIGZldyBhZGRpdGlvbmFsCisgKiBieXRlcy4gIEluIG9yZGVyIHRvIHN0YXkgb24gdGhlIHNhZmUgc2lkZSwgYW5kIG5vdCBwcm9taXNlIG1vcmUgdGhhbgorICogd2UgY2FuIGNhY2hlLCB0aG9zZSBhZGRpdGlvbmFsIGJ5dGVzIG11c3QgYmUgdGhlIG1pbmltdW0gcG9zc2libGU6IDI0CisgKiBieXRlcyBvZiBycGMgaGVhZGVyICh4aWQgdGhyb3VnaCBhY2NlcHQgc3RhdGUsIHdpdGggQVVUSF9OVUxMCisgKiB2ZXJpZmllciksIDEyIGZvciB0aGUgY29tcG91bmQgaGVhZGVyICh3aXRoIHplcm8tbGVuZ3RoIHRhZyksIGFuZCA0NAorICogZm9yIHRoZSBTRVFVRU5DRSBvcCByZXNwb25zZToKICAqLwotc3RhdGljIGludCBzZXRfZm9yZWNoYW5uZWxfbWF4cmVxcyhzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyAqZmNoYW4pCisjZGVmaW5lIE5GU0RfTUlOX0hEUl9TRVFfU1ogICgyNCArIDEyICsgNDQpCisKKy8qCisgKiBHaXZlIHRoZSBjbGllbnQgdGhlIG51bWJlciBvZiBjYV9tYXhyZXNwb25zZXNpemVfY2FjaGVkIHNsb3RzIGl0CisgKiByZXF1ZXN0cywgb2Ygc2l6ZSBib3VuZGVkIGJ5IE5GU0RfU0xPVF9DQUNIRV9TSVpFLAorICogTkZTRF9NQVhfTUVNX1BFUl9TRVNTSU9OLCBhbmQgbmZzZF9kcmNfbWF4X21lbS4gRG8gbm90IGFsbG93IG1vcmUKKyAqIHRoYW4gTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04uCisgKgorICogSWYgd2UgcnVuIG91dCBvZiByZXNlcnZlZCBEUkMgbWVtb3J5IHdlIHNob3VsZCAodXAgdG8gYSBwb2ludCkKKyAqIHJlLW5lZ290aWF0ZSBhY3RpdmUgc2Vzc2lvbnMgYW5kIHJlZHVjZSB0aGVpciBzbG90IHVzYWdlIHRvIG1ha2UKKyAqIHJvb29tIGZvciBuZXcgY29ubmVjdGlvbnMuIEZvciBub3cgd2UganVzdCBmYWlsIHRoZSBjcmVhdGUgc2Vzc2lvbi4KKyAqLworc3RhdGljIGludCBzZXRfZm9yZWNoYW5uZWxfZHJjX3NpemUoc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMgKmZjaGFuKQogewotCWludCBzdGF0dXMgPSAwLCBucCA9IGZjaGFuLT5tYXhyZXFzICogTkZTRF9QQUdFU19QRVJfU0xPVDsKKwlpbnQgbWVtLCBzaXplID0gZmNoYW4tPm1heHJlc3BfY2FjaGVkOwogCiAJaWYgKGZjaGFuLT5tYXhyZXFzIDwgMSkKIAkJcmV0dXJuIG5mc2Vycl9pbnZhbDsKLQllbHNlIGlmIChmY2hhbi0+bWF4cmVxcyA+IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OKQotCQlmY2hhbi0+bWF4cmVxcyA9IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OOwogCi0Jc3Bpbl9sb2NrKCZuZnNkX3NlcnYtPnN2X2xvY2spOwotCWlmIChucCArIG5mc2Rfc2Vydi0+c3ZfZHJjX3BhZ2VzX3VzZWQgPiBuZnNkX3NlcnYtPnN2X2RyY19tYXhfcGFnZXMpCi0JCW5wID0gbmZzZF9zZXJ2LT5zdl9kcmNfbWF4X3BhZ2VzIC0gbmZzZF9zZXJ2LT5zdl9kcmNfcGFnZXNfdXNlZDsKLQluZnNkX3NlcnYtPnN2X2RyY19wYWdlc191c2VkICs9IG5wOwotCXNwaW5fdW5sb2NrKCZuZnNkX3NlcnYtPnN2X2xvY2spOworCWlmIChzaXplIDwgTkZTRF9NSU5fSERSX1NFUV9TWikKKwkJc2l6ZSA9IE5GU0RfTUlOX0hEUl9TRVFfU1o7CisJc2l6ZSAtPSBORlNEX01JTl9IRFJfU0VRX1NaOworCWlmIChzaXplID4gTkZTRF9TTE9UX0NBQ0hFX1NJWkUpCisJCXNpemUgPSBORlNEX1NMT1RfQ0FDSEVfU0laRTsKIAotCWlmIChucCA8PSAwKSB7Ci0JCXN0YXR1cyA9IG5mc2Vycl9yZXNvdXJjZTsKLQkJZmNoYW4tPm1heHJlcXMgPSAwOwotCX0gZWxzZQotCQlmY2hhbi0+bWF4cmVxcyA9IG5wIC8gTkZTRF9QQUdFU19QRVJfU0xPVDsKKwkvKiBib3VuZCB0aGUgbWF4cmVxcyBieSBORlNEX01BWF9NRU1fUEVSX1NFU1NJT04gKi8KKwltZW0gPSBmY2hhbi0+bWF4cmVxcyAqIHNpemU7CisJaWYgKG1lbSA+IE5GU0RfTUFYX01FTV9QRVJfU0VTU0lPTikgeworCQlmY2hhbi0+bWF4cmVxcyA9IE5GU0RfTUFYX01FTV9QRVJfU0VTU0lPTiAvIHNpemU7CisJCWlmIChmY2hhbi0+bWF4cmVxcyA+IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OKQorCQkJZmNoYW4tPm1heHJlcXMgPSBORlNEX01BWF9TTE9UU19QRVJfU0VTU0lPTjsKKwkJbWVtID0gZmNoYW4tPm1heHJlcXMgKiBzaXplOworCX0KIAotCXJldHVybiBzdGF0dXM7CisJc3Bpbl9sb2NrKCZuZnNkX2RyY19sb2NrKTsKKwkvKiBib3VuZCB0aGUgdG90YWwgc2Vzc2lvbiBkcmMgbWVtb3J5IHVzc2FnZSAqLworCWlmIChtZW0gKyBuZnNkX2RyY19tZW1fdXNlZCA+IG5mc2RfZHJjX21heF9tZW0pIHsKKwkJZmNoYW4tPm1heHJlcXMgPSAobmZzZF9kcmNfbWF4X21lbSAtIG5mc2RfZHJjX21lbV91c2VkKSAvIHNpemU7CisJCW1lbSA9IGZjaGFuLT5tYXhyZXFzICogc2l6ZTsKKwl9CisJbmZzZF9kcmNfbWVtX3VzZWQgKz0gbWVtOworCXNwaW5fdW5sb2NrKCZuZnNkX2RyY19sb2NrKTsKKworCWlmIChmY2hhbi0+bWF4cmVxcyA9PSAwKQorCQlyZXR1cm4gbmZzZXJyX3NlcnZlcmZhdWx0OworCisJZmNoYW4tPm1heHJlc3BfY2FjaGVkID0gc2l6ZSArIE5GU0RfTUlOX0hEUl9TRVFfU1o7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00NjYsMzYgKzQ5Niw0MSBAQAogCQlmY2hhbi0+bWF4cmVzcF9zeiA9IG1heGNvdW50OwogCXNlc3Npb25fZmNoYW4tPm1heHJlc3Bfc3ogPSBmY2hhbi0+bWF4cmVzcF9zejsKIAotCS8qIFNldCB0aGUgbWF4IHJlc3BvbnNlIGNhY2hlZCBzaXplIG91ciBkZWZhdWx0IHdoaWNoIGlzCi0JICogYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgYW5kIHNtYWxsICovCi0Jc2Vzc2lvbl9mY2hhbi0+bWF4cmVzcF9jYWNoZWQgPSBORlNEX1BBR0VTX1BFUl9TTE9UICogUEFHRV9TSVpFOwotCWZjaGFuLT5tYXhyZXNwX2NhY2hlZCA9IHNlc3Npb25fZmNoYW4tPm1heHJlc3BfY2FjaGVkOwotCiAJLyogVXNlIHRoZSBjbGllbnQncyBtYXhvcHMgaWYgcG9zc2libGUgKi8KIAlpZiAoZmNoYW4tPm1heG9wcyA+IE5GU0RfTUFYX09QU19QRVJfQ09NUE9VTkQpCiAJCWZjaGFuLT5tYXhvcHMgPSBORlNEX01BWF9PUFNfUEVSX0NPTVBPVU5EOwogCXNlc3Npb25fZmNoYW4tPm1heG9wcyA9IGZjaGFuLT5tYXhvcHM7CiAKLQkvKiB0cnkgdG8gdXNlIHRoZSBjbGllbnQgcmVxdWVzdGVkIG51bWJlciBvZiBzbG90cyAqLwotCWlmIChmY2hhbi0+bWF4cmVxcyA+IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OKQotCQlmY2hhbi0+bWF4cmVxcyA9IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OOwotCiAJLyogRklYTUU6IEVycm9yIG1lYW5zIG5vIG1vcmUgRFJDIHBhZ2VzIHNvIHRoZSBzZXJ2ZXIgc2hvdWxkCiAJICogcmVjb3ZlciBwYWdlcyBmcm9tIGV4aXN0aW5nIHNlc3Npb25zLiBGb3Igbm93IGZhaWwgc2Vzc2lvbgogCSAqIGNyZWF0aW9uLgogCSAqLwotCXN0YXR1cyA9IHNldF9mb3JlY2hhbm5lbF9tYXhyZXFzKGZjaGFuKTsKKwlzdGF0dXMgPSBzZXRfZm9yZWNoYW5uZWxfZHJjX3NpemUoZmNoYW4pOwogCisJc2Vzc2lvbl9mY2hhbi0+bWF4cmVzcF9jYWNoZWQgPSBmY2hhbi0+bWF4cmVzcF9jYWNoZWQ7CiAJc2Vzc2lvbl9mY2hhbi0+bWF4cmVxcyA9IGZjaGFuLT5tYXhyZXFzOworCisJZHByaW50aygiJXMgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgdm9pZAorZnJlZV9zZXNzaW9uX3Nsb3RzKHN0cnVjdCBuZnNkNF9zZXNzaW9uICpzZXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VzLT5zZV9mY2hhbm5lbC5tYXhyZXFzOyBpKyspCisJCWtmcmVlKHNlcy0+c2Vfc2xvdHNbaV0pOworfQorCiBzdGF0aWMgaW50CiBhbGxvY19pbml0X3Nlc3Npb24oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mczRfY2xpZW50ICpjbHAsCiAJCSAgIHN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbiAqY3NlcykKIHsKIAlzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiAqbmV3LCB0bXA7Ci0JaW50IGlkeCwgc3RhdHVzID0gbmZzZXJyX3Jlc291cmNlLCBzbG90c2l6ZTsKKwlzdHJ1Y3QgbmZzZDRfc2xvdCAqc3A7CisJaW50IGlkeCwgc2xvdHNpemUsIGNhY2hlc2l6ZSwgaTsKKwlpbnQgc3RhdHVzOwogCiAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKIApAQCAtNTA2LDE0ICs1NDEsMjcgQEAKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIAotCS8qIGFsbG9jYXRlIHN0cnVjdCBuZnNkNF9zZXNzaW9uIGFuZCBzbG90IHRhYmxlIGluIG9uZSBwaWVjZSAqLwotCXNsb3RzaXplID0gdG1wLnNlX2ZjaGFubmVsLm1heHJlcXMgKiBzaXplb2Yoc3RydWN0IG5mc2Q0X3Nsb3QpOworCUJVSUxEX0JVR19PTihORlNEX01BWF9TTE9UU19QRVJfU0VTU0lPTiAqIHNpemVvZihzdHJ1Y3QgbmZzZDRfc2xvdCkKKwkJICAgICArIHNpemVvZihzdHJ1Y3QgbmZzZDRfc2Vzc2lvbikgPiBQQUdFX1NJWkUpOworCisJc3RhdHVzID0gbmZzZXJyX3NlcnZlcmZhdWx0OworCS8qIGFsbG9jYXRlIHN0cnVjdCBuZnNkNF9zZXNzaW9uIGFuZCBzbG90IHRhYmxlIHBvaW50ZXJzIGluIG9uZSBwaWVjZSAqLworCXNsb3RzaXplID0gdG1wLnNlX2ZjaGFubmVsLm1heHJlcXMgKiBzaXplb2Yoc3RydWN0IG5mc2Q0X3Nsb3QgKik7CiAJbmV3ID0ga3phbGxvYyhzaXplb2YoKm5ldykgKyBzbG90c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXcpCiAJCWdvdG8gb3V0OwogCiAJbWVtY3B5KG5ldywgJnRtcCwgc2l6ZW9mKCpuZXcpKTsKIAorCS8qIGFsbG9jYXRlIGVhY2ggc3RydWN0IG5mc2Q0X3Nsb3QgYW5kIGRhdGEgY2FjaGUgaW4gb25lIHBpZWNlICovCisJY2FjaGVzaXplID0gbmV3LT5zZV9mY2hhbm5lbC5tYXhyZXNwX2NhY2hlZCAtIE5GU0RfTUlOX0hEUl9TRVFfU1o7CisJZm9yIChpID0gMDsgaSA8IG5ldy0+c2VfZmNoYW5uZWwubWF4cmVxczsgaSsrKSB7CisJCXNwID0ga3phbGxvYyhzaXplb2YoKnNwKSArIGNhY2hlc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3ApCisJCQlnb3RvIG91dF9mcmVlOworCQluZXctPnNlX3Nsb3RzW2ldID0gc3A7CisJfQorCiAJbmV3LT5zZV9jbGllbnQgPSBjbHA7CiAJZ2VuX3Nlc3Npb25pZChuZXcpOwogCWlkeCA9IGhhc2hfc2Vzc2lvbmlkKCZuZXctPnNlX3Nlc3Npb25pZCk7CkBAIC01MzAsNiArNTc4LDEwIEBACiAJc3RhdHVzID0gbmZzX29rOwogb3V0OgogCXJldHVybiBzdGF0dXM7CitvdXRfZnJlZToKKwlmcmVlX3Nlc3Npb25fc2xvdHMobmV3KTsKKwlrZnJlZShuZXcpOworCWdvdG8gb3V0OwogfQogCiAvKiBjYWxsZXIgbXVzdCBob2xkIHNlc3Npb25pZF9sb2NrICovCkBAIC01NzIsMTkgKzYyNCwxNiBAQAogCW5mc2Q0X3B1dF9zZXNzaW9uKHNlcyk7CiB9CiAKLXN0YXRpYyB2b2lkIG5mc2Q0X3JlbGVhc2VfcmVzcGFnZXMoc3RydWN0IHBhZ2UgKipyZXNwYWdlcywgc2hvcnQgcmVzdXNlZCk7Ci0KIHZvaWQKIGZyZWVfc2Vzc2lvbihzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiAqc2VzOwotCWludCBpOwogCiAJc2VzID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBuZnNkNF9zZXNzaW9uLCBzZV9yZWYpOwotCWZvciAoaSA9IDA7IGkgPCBzZXMtPnNlX2ZjaGFubmVsLm1heHJlcXM7IGkrKykgewotCQlzdHJ1Y3QgbmZzZDRfY2FjaGVfZW50cnkgKmUgPSAmc2VzLT5zZV9zbG90c1tpXS5zbF9jYWNoZV9lbnRyeTsKLQkJbmZzZDRfcmVsZWFzZV9yZXNwYWdlcyhlLT5jZV9yZXNwYWdlcywgZS0+Y2VfcmVzdXNlZCk7Ci0JfQorCXNwaW5fbG9jaygmbmZzZF9kcmNfbG9jayk7CisJbmZzZF9kcmNfbWVtX3VzZWQgLT0gc2VzLT5zZV9mY2hhbm5lbC5tYXhyZXFzICogTkZTRF9TTE9UX0NBQ0hFX1NJWkU7CisJc3Bpbl91bmxvY2soJm5mc2RfZHJjX2xvY2spOworCWZyZWVfc2Vzc2lvbl9zbG90cyhzZXMpOwogCWtmcmVlKHNlcyk7CiB9CiAKQEAgLTY0NywxOCArNjk2LDE0IEBACiAJCWNscC0+Y2xfY2JfY29ubi5jYl9jbGllbnQgPSBOVUxMOwogCQlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOwogCX0KLQlpZiAoY2xwLT5jbF9jYl9jb25uLmNiX2NyZWQpIHsKLQkJcHV0X3JwY2NyZWQoY2xwLT5jbF9jYl9jb25uLmNiX2NyZWQpOwotCQljbHAtPmNsX2NiX2Nvbm4uY2JfY3JlZCA9IE5VTEw7Ci0JfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGZyZWVfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKQogewogCXNodXRkb3duX2NhbGxiYWNrX2NsaWVudChjbHApOwotCW5mc2Q0X3JlbGVhc2VfcmVzcGFnZXMoY2xwLT5jbF9zbG90LnNsX2NhY2hlX2VudHJ5LmNlX3Jlc3BhZ2VzLAotCQkJICAgICBjbHAtPmNsX3Nsb3Quc2xfY2FjaGVfZW50cnkuY2VfcmVzdXNlZCk7CisJaWYgKGNscC0+Y2xfY2JfeHBydCkKKwkJc3ZjX3hwcnRfcHV0KGNscC0+Y2xfY2JfeHBydCk7CiAJaWYgKGNscC0+Y2xfY3JlZC5jcl9ncm91cF9pbmZvKQogCQlwdXRfZ3JvdXBfaW5mbyhjbHAtPmNsX2NyZWQuY3JfZ3JvdXBfaW5mbyk7CiAJa2ZyZWUoY2xwLT5jbF9wcmluY2lwYWwpOwpAQCAtNzE0LDI1ICs3NTksNiBAQAogCXB1dF9uZnM0X2NsaWVudChjbHApOwogfQogCi1zdGF0aWMgc3RydWN0IG5mczRfY2xpZW50ICpjcmVhdGVfY2xpZW50KHN0cnVjdCB4ZHJfbmV0b2JqIG5hbWUsIGNoYXIgKnJlY2RpcikKLXsKLQlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscDsKLQotCWNscCA9IGFsbG9jX2NsaWVudChuYW1lKTsKLQlpZiAoY2xwID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCW1lbWNweShjbHAtPmNsX3JlY2RpciwgcmVjZGlyLCBIRVhESVJfTEVOKTsKLQlhdG9taWNfc2V0KCZjbHAtPmNsX2NvdW50LCAxKTsKLQlhdG9taWNfc2V0KCZjbHAtPmNsX2NiX2Nvbm4uY2Jfc2V0LCAwKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9pZGhhc2gpOwotCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX3N0cmhhc2gpOwotCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX29wZW5vd25lcnMpOwotCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX2RlbGVnYXRpb25zKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9zZXNzaW9ucyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNscC0+Y2xfbHJ1KTsKLQlyZXR1cm4gY2xwOwotfQotCiBzdGF0aWMgdm9pZCBjb3B5X3ZlcmYoc3RydWN0IG5mczRfY2xpZW50ICp0YXJnZXQsIG5mczRfdmVyaWZpZXIgKnNvdXJjZSkKIHsKIAltZW1jcHkodGFyZ2V0LT5jbF92ZXJpZmllci5kYXRhLCBzb3VyY2UtPmRhdGEsCkBAIC03OTUsNiArODIxLDQ2IEBACiAJKnArKyA9IGkrKzsKIH0KIAorc3RhdGljIHN0cnVjdCBuZnM0X2NsaWVudCAqY3JlYXRlX2NsaWVudChzdHJ1Y3QgeGRyX25ldG9iaiBuYW1lLCBjaGFyICpyZWNkaXIsCisJCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIG5mczRfdmVyaWZpZXIgKnZlcmYpCit7CisJc3RydWN0IG5mczRfY2xpZW50ICpjbHA7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IHN2Y19hZGRyKHJxc3RwKTsKKwljaGFyICpwcmluYzsKKworCWNscCA9IGFsbG9jX2NsaWVudChuYW1lKTsKKwlpZiAoY2xwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcHJpbmMgPSBzdmNfZ3NzX3ByaW5jaXBhbChycXN0cCk7CisJaWYgKHByaW5jKSB7CisJCWNscC0+Y2xfcHJpbmNpcGFsID0ga3N0cmR1cChwcmluYywgR0ZQX0tFUk5FTCk7CisJCWlmIChjbHAtPmNsX3ByaW5jaXBhbCA9PSBOVUxMKSB7CisJCQlmcmVlX2NsaWVudChjbHApOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwltZW1jcHkoY2xwLT5jbF9yZWNkaXIsIHJlY2RpciwgSEVYRElSX0xFTik7CisJYXRvbWljX3NldCgmY2xwLT5jbF9jb3VudCwgMSk7CisJYXRvbWljX3NldCgmY2xwLT5jbF9jYl9jb25uLmNiX3NldCwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJmNscC0+Y2xfaWRoYXNoKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9zdHJoYXNoKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9vcGVub3duZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9kZWxlZ2F0aW9ucyk7CisJSU5JVF9MSVNUX0hFQUQoJmNscC0+Y2xfc2Vzc2lvbnMpOworCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX2xydSk7CisJY2xlYXJfYml0KDAsICZjbHAtPmNsX2NiX3Nsb3RfYnVzeSk7CisJcnBjX2luaXRfd2FpdF9xdWV1ZSgmY2xwLT5jbF9jYl93YWl0cSwgIkJhY2tjaGFubmVsIHNsb3QgdGFibGUiKTsKKwljb3B5X3ZlcmYoY2xwLCB2ZXJmKTsKKwlycGNfY29weV9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNscC0+Y2xfYWRkciwgc2EpOworCWNscC0+Y2xfZmxhdm9yID0gcnFzdHAtPnJxX2ZsYXZvcjsKKwljb3B5X2NyZWQoJmNscC0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKTsKKwlnZW5fY29uZmlybShjbHApOworCisJcmV0dXJuIGNscDsKK30KKwogc3RhdGljIGludCBjaGVja19uYW1lKHN0cnVjdCB4ZHJfbmV0b2JqIG5hbWUpCiB7CiAJaWYgKG5hbWUubGVuID09IDApIApAQCAtOTAyLDkzICs5NjgsNDAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2NhbGxiYWNrICovCi1zdGF0aWMgaW50Ci1wYXJzZV9vY3RldCh1bnNpZ25lZCBpbnQgKmxlbnAsIGNoYXIgKiphZGRycCkKLXsKLQl1bnNpZ25lZCBpbnQgbGVuID0gKmxlbnA7Ci0JY2hhciAqcCA9ICphZGRycDsKLQlpbnQgbiA9IC0xOwotCWNoYXIgYzsKLQotCWZvciAoOzspIHsKLQkJaWYgKCFsZW4pCi0JCQlicmVhazsKLQkJbGVuLS07Ci0JCWMgPSAqcCsrOwotCQlpZiAoYyA9PSAnLicpCi0JCQlicmVhazsKLQkJaWYgKChjIDwgJzAnKSB8fCAoYyA+ICc5JykpIHsKLQkJCW4gPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChuIDwgMCkKLQkJCW4gPSAwOwotCQluID0gKG4gKiAxMCkgKyAoYyAtICcwJyk7Ci0JCWlmIChuID4gMjU1KSB7Ci0JCQluID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQkqbGVucCA9IGxlbjsKLQkqYWRkcnAgPSBwOwotCXJldHVybiBuOwotfQotCi0vKiBwYXJzZSBhbmQgc2V0IHRoZSBzZXRjbGllbnRpZCBpcHY0IGNhbGxiYWNrIGFkZHJlc3MgKi8KLXN0YXRpYyBpbnQKLXBhcnNlX2lwdjQodW5zaWduZWQgaW50IGFkZHJfbGVuLCBjaGFyICphZGRyX3ZhbCwgdW5zaWduZWQgaW50ICpjYmFkZHJwLCB1bnNpZ25lZCBzaG9ydCAqY2Jwb3J0cCkKLXsKLQlpbnQgdGVtcCA9IDA7Ci0JdTMyIGNiYWRkciA9IDA7Ci0JdTE2IGNicG9ydCA9IDA7Ci0JdTMyIGFkZHJsZW4gPSBhZGRyX2xlbjsKLQljaGFyICphZGRyID0gYWRkcl92YWw7Ci0JaW50IGksIHNoaWZ0OwotCi0JLyogaXBhZGRyZXNzICovCi0Jc2hpZnQgPSAyNDsKLQlmb3IoaSA9IDQ7IGkgPiAwICA7IGktLSkgewotCQlpZiAoKHRlbXAgPSBwYXJzZV9vY3RldCgmYWRkcmxlbiwgJmFkZHIpKSA8IDApIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNiYWRkciB8PSAodGVtcCA8PCBzaGlmdCk7Ci0JCWlmIChzaGlmdCA+IDApCi0JCXNoaWZ0IC09IDg7Ci0JfQotCSpjYmFkZHJwID0gY2JhZGRyOwotCi0JLyogcG9ydCAqLwotCXNoaWZ0ID0gODsKLQlmb3IoaSA9IDI7IGkgPiAwICA7IGktLSkgewotCQlpZiAoKHRlbXAgPSBwYXJzZV9vY3RldCgmYWRkcmxlbiwgJmFkZHIpKSA8IDApIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNicG9ydCB8PSAodGVtcCA8PCBzaGlmdCk7Ci0JCWlmIChzaGlmdCA+IDApCi0JCQlzaGlmdCAtPSA4OwotCX0KLQkqY2Jwb3J0cCA9IGNicG9ydDsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQKLWdlbl9jYWxsYmFjayhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzZSkKK2dlbl9jYWxsYmFjayhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzZSwgdTMyIHNjb3BlaWQpCiB7CiAJc3RydWN0IG5mczRfY2JfY29ubiAqY2IgPSAmY2xwLT5jbF9jYl9jb25uOworCXVuc2lnbmVkIHNob3J0IGV4cGVjdGVkX2ZhbWlseTsKIAotCS8qIEN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IHRjcCBmb3IgdGhlIGNhbGxiYWNrIGNoYW5uZWwgKi8KLQlpZiAoKHNlLT5zZV9jYWxsYmFja19uZXRpZF9sZW4gIT0gMykgfHwgbWVtY21wKChjaGFyICopc2UtPnNlX2NhbGxiYWNrX25ldGlkX3ZhbCwgInRjcCIsIDMpKQorCS8qIEN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IHRjcCBhbmQgdGNwNiBmb3IgdGhlIGNhbGxiYWNrIGNoYW5uZWwgKi8KKwlpZiAoc2UtPnNlX2NhbGxiYWNrX25ldGlkX2xlbiA9PSAzICYmCisJICAgICFtZW1jbXAoc2UtPnNlX2NhbGxiYWNrX25ldGlkX3ZhbCwgInRjcCIsIDMpKQorCQlleHBlY3RlZF9mYW1pbHkgPSBBRl9JTkVUOworCWVsc2UgaWYgKHNlLT5zZV9jYWxsYmFja19uZXRpZF9sZW4gPT0gNCAmJgorCQkgIW1lbWNtcChzZS0+c2VfY2FsbGJhY2tfbmV0aWRfdmFsLCAidGNwNiIsIDQpKQorCQlleHBlY3RlZF9mYW1pbHkgPSBBRl9JTkVUNjsKKwllbHNlCiAJCWdvdG8gb3V0X2VycjsKIAotCWlmICggIShwYXJzZV9pcHY0KHNlLT5zZV9jYWxsYmFja19hZGRyX2xlbiwgc2UtPnNlX2NhbGxiYWNrX2FkZHJfdmFsLAotCSAgICAgICAgICAgICAgICAgJmNiLT5jYl9hZGRyLCAmY2ItPmNiX3BvcnQpKSkKKwljYi0+Y2JfYWRkcmxlbiA9IHJwY191YWRkcjJzb2NrYWRkcihzZS0+c2VfY2FsbGJhY2tfYWRkcl92YWwsCisJCQkJCSAgICBzZS0+c2VfY2FsbGJhY2tfYWRkcl9sZW4sCisJCQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopICZjYi0+Y2JfYWRkciwKKwkJCQkJICAgIHNpemVvZihjYi0+Y2JfYWRkcikpOworCisJaWYgKCFjYi0+Y2JfYWRkcmxlbiB8fCBjYi0+Y2JfYWRkci5zc19mYW1pbHkgIT0gZXhwZWN0ZWRfZmFtaWx5KQogCQlnb3RvIG91dF9lcnI7CisKKwlpZiAoY2ItPmNiX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KQorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJmNiLT5jYl9hZGRyKS0+c2luNl9zY29wZV9pZCA9IHNjb3BlaWQ7CisKIAljYi0+Y2JfbWlub3J2ZXJzaW9uID0gMDsKIAljYi0+Y2JfcHJvZyA9IHNlLT5zZV9jYWxsYmFja19wcm9nOwogCWNiLT5jYl9pZGVudCA9IHNlLT5zZV9jYWxsYmFja19pZGVudDsKIAlyZXR1cm47CiBvdXRfZXJyOgorCWNiLT5jYl9hZGRyLnNzX2ZhbWlseSA9IEFGX1VOU1BFQzsKKwljYi0+Y2JfYWRkcmxlbiA9IDA7CiAJZHByaW50ayhLRVJOX0lORk8gIk5GU0Q6IHRoaXMgY2xpZW50IChjbGllbnRpZCAlMDh4LyUwOHgpICIKIAkJIndpbGwgbm90IHJlY2VpdmUgZGVsZWdhdGlvbnNcbiIsCiAJCWNscC0+Y2xfY2xpZW50aWQuY2xfYm9vdCwgY2xwLT5jbF9jbGllbnRpZC5jbF9pZCk7CkBAIC05OTYsMTc1ICsxMDA5LDg3IEBACiAJcmV0dXJuOwogfQogCi12b2lkCi1uZnNkNF9zZXRfc3RhdHAoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpzdGF0cCkKLXsKLQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AgPSBycXN0cC0+cnFfcmVzcDsKLQotCXJlc3AtPmNzdGF0ZS5zdGF0cCA9IHN0YXRwOwotfQotCiAvKgotICogRGVyZWZlcmVuY2UgdGhlIHJlc3VsdCBwYWdlcy4KLSAqLwotc3RhdGljIHZvaWQKLW5mc2Q0X3JlbGVhc2VfcmVzcGFnZXMoc3RydWN0IHBhZ2UgKipyZXNwYWdlcywgc2hvcnQgcmVzdXNlZCkKLXsKLQlpbnQgaTsKLQotCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwotCWZvciAoaSA9IDA7IGkgPCByZXN1c2VkOyBpKyspIHsKLQkJaWYgKCFyZXNwYWdlc1tpXSkKLQkJCWNvbnRpbnVlOwotCQlwdXRfcGFnZShyZXNwYWdlc1tpXSk7Ci0JCXJlc3BhZ2VzW2ldID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1uZnNkNF9jb3B5X3BhZ2VzKHN0cnVjdCBwYWdlICoqdG9wYWdlcywgc3RydWN0IHBhZ2UgKipmcm9tcGFnZXMsIHNob3J0IGNvdW50KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJdG9wYWdlc1tpXSA9IGZyb21wYWdlc1tpXTsKLQkJaWYgKCF0b3BhZ2VzW2ldKQotCQkJY29udGludWU7Ci0JCWdldF9wYWdlKHRvcGFnZXNbaV0pOwotCX0KLX0KLQotLyoKLSAqIENhY2hlIHRoZSByZXBseSBwYWdlcyB1cCB0byBORlNEX1BBR0VTX1BFUl9TTE9UICsgMSwgY2xlYXJpbmcgdGhlIHByZXZpb3VzCi0gKiBwYWdlcy4gV2UgYWRkIGEgcGFnZSB0byBORlNEX1BBR0VTX1BFUl9TTE9UIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdG90YWwKLSAqIGxlbmd0aCBvZiB0aGUgWERSIHJlc3BvbnNlIGlzIGxlc3MgdGhhbiBzZV9mbWF4cmVzcF9jYWNoZWQKLSAqIChORlNEX1BBR0VTX1BFUl9TTE9UICogUEFHRV9TSVpFKSBidXQgdGhlIHhkcl9idWYgcGFnZXMgaXMgdXNlZCBmb3IgYQotICogb2YgdGhlIHJlcGx5IChlLmcuIHJlYWRkaXIpLgotICoKLSAqIFN0b3JlIHRoZSBiYXNlIGFuZCBsZW5ndGggb2YgdGhlIHJxX3JlcS5oZWFkWzBdIHBhZ2UKLSAqIG9mIHRoZSBORlN2NC4xIGRhdGEsIGp1c3QgcGFzdCB0aGUgcnBjIGhlYWRlci4KKyAqIENhY2hlIGEgcmVwbHkuIG5mc2Q0X2NoZWNrX2RyY19saW1pdCgpIGhhcyBib3VuZGVkIHRoZSBjYWNoZSBzaXplLgogICovCiB2b2lkCiBuZnNkNF9zdG9yZV9jYWNoZV9lbnRyeShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3ApCiB7Ci0Jc3RydWN0IG5mc2Q0X2NhY2hlX2VudHJ5ICplbnRyeSA9ICZyZXNwLT5jc3RhdGUuc2xvdC0+c2xfY2FjaGVfZW50cnk7Ci0Jc3RydWN0IHN2Y19ycXN0ICpycXN0cCA9IHJlc3AtPnJxc3RwOwotCXN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3MgPSBycXN0cC0+cnFfYXJncDsKLQlzdHJ1Y3QgbmZzZDRfb3AgKm9wID0gJmFyZ3MtPm9wc1tyZXNwLT5vcGNudF07Ci0Jc3RydWN0IGt2ZWMgKnJlc3YgPSAmcnFzdHAtPnJxX3Jlcy5oZWFkWzBdOworCXN0cnVjdCBuZnNkNF9zbG90ICpzbG90ID0gcmVzcC0+Y3N0YXRlLnNsb3Q7CisJdW5zaWduZWQgaW50IGJhc2U7CiAKLQlkcHJpbnRrKCItLT4gJXMgZW50cnkgJXBcbiIsIF9fZnVuY19fLCBlbnRyeSk7CisJZHByaW50aygiLS0+ICVzIHNsb3QgJXBcbiIsIF9fZnVuY19fLCBzbG90KTsKIAotCS8qIERvbid0IGNhY2hlIGEgZmFpbGVkIE9QX1NFUVVFTkNFLiAqLwotCWlmIChyZXNwLT5vcGNudCA9PSAxICYmIG9wLT5vcG51bSA9PSBPUF9TRVFVRU5DRSAmJiByZXNwLT5jc3RhdGUuc3RhdHVzKQotCQlyZXR1cm47Ci0KLQluZnNkNF9yZWxlYXNlX3Jlc3BhZ2VzKGVudHJ5LT5jZV9yZXNwYWdlcywgZW50cnktPmNlX3Jlc3VzZWQpOwotCWVudHJ5LT5jZV9vcGNudCA9IHJlc3AtPm9wY250OwotCWVudHJ5LT5jZV9zdGF0dXMgPSByZXNwLT5jc3RhdGUuc3RhdHVzOwotCi0JLyoKLQkgKiBEb24ndCBuZWVkIGEgcGFnZSB0byBjYWNoZSBqdXN0IHRoZSBzZXF1ZW5jZSBvcGVyYXRpb24gLSB0aGUgc2xvdAotCSAqIGRvZXMgdGhpcyBmb3IgdXMhCi0JICovCisJc2xvdC0+c2xfb3BjbnQgPSByZXNwLT5vcGNudDsKKwlzbG90LT5zbF9zdGF0dXMgPSByZXNwLT5jc3RhdGUuc3RhdHVzOwogCiAJaWYgKG5mc2Q0X25vdF9jYWNoZWQocmVzcCkpIHsKLQkJZW50cnktPmNlX3Jlc3VzZWQgPSAwOwotCQllbnRyeS0+Y2VfcnBjaGRybGVuID0gMDsKLQkJZHByaW50aygiJXMgSnVzdCBjYWNoZSBTRVFVRU5DRS4gY2VfY2FjaGV0aGlzICVkXG4iLCBfX2Z1bmNfXywKLQkJCXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZV9lbnRyeS5jZV9jYWNoZXRoaXMpOworCQlzbG90LT5zbF9kYXRhbGVuID0gMDsKIAkJcmV0dXJuOwogCX0KLQllbnRyeS0+Y2VfcmVzdXNlZCA9IHJxc3RwLT5ycV9yZXN1c2VkOwotCWlmIChlbnRyeS0+Y2VfcmVzdXNlZCA+IE5GU0RfUEFHRVNfUEVSX1NMT1QgKyAxKQotCQllbnRyeS0+Y2VfcmVzdXNlZCA9IE5GU0RfUEFHRVNfUEVSX1NMT1QgKyAxOwotCW5mc2Q0X2NvcHlfcGFnZXMoZW50cnktPmNlX3Jlc3BhZ2VzLCBycXN0cC0+cnFfcmVzcGFnZXMsCi0JCQkgZW50cnktPmNlX3Jlc3VzZWQpOwotCWVudHJ5LT5jZV9kYXRhdi5pb3ZfYmFzZSA9IHJlc3AtPmNzdGF0ZS5zdGF0cDsKLQllbnRyeS0+Y2VfZGF0YXYuaW92X2xlbiA9IHJlc3YtPmlvdl9sZW4gLSAoKGNoYXIgKilyZXNwLT5jc3RhdGUuc3RhdHAgLQotCQkJCShjaGFyICopcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9yZXNwYWdlc1swXSkpOwotCS8qIEN1cnJlbnQgcmVxdWVzdCBycGMgaGVhZGVyIGxlbmd0aCovCi0JZW50cnktPmNlX3JwY2hkcmxlbiA9IChjaGFyICopcmVzcC0+Y3N0YXRlLnN0YXRwIC0KLQkJCQkoY2hhciAqKXBhZ2VfYWRkcmVzcyhycXN0cC0+cnFfcmVzcGFnZXNbMF0pOworCXNsb3QtPnNsX2RhdGFsZW4gPSAoY2hhciAqKXJlc3AtPnAgLSAoY2hhciAqKXJlc3AtPmNzdGF0ZS5kYXRhcDsKKwliYXNlID0gKGNoYXIgKilyZXNwLT5jc3RhdGUuZGF0YXAgLQorCQkJCQkoY2hhciAqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7CisJaWYgKHJlYWRfYnl0ZXNfZnJvbV94ZHJfYnVmKHJlc3AtPnhidWYsIGJhc2UsIHNsb3QtPnNsX2RhdGEsCisJCQkJICAgIHNsb3QtPnNsX2RhdGFsZW4pKQorCQlXQVJOKCIlczogc2Vzc2lvbnMgRFJDIGNvdWxkIG5vdCBjYWNoZSBjb21wb3VuZFxuIiwgX19mdW5jX18pOworCXJldHVybjsKIH0KIAogLyoKLSAqIFdlIGtlZXAgdGhlIHJwYyBoZWFkZXIsIGJ1dCB0YWtlIHRoZSBuZnMgcmVwbHkgZnJvbSB0aGUgcmVwbHljYWNoZS4KKyAqIEVuY29kZSB0aGUgcmVwbGF5IHNlcXVlbmNlIG9wZXJhdGlvbiBmcm9tIHRoZSBzbG90IHZhbHVlcy4KKyAqIElmIGNhY2hldGhpcyBpcyBGQUxTRSBlbmNvZGUgdGhlIHVuY2FjaGVkIHJlcCBlcnJvciBvbiB0aGUgbmV4dAorICogb3BlcmF0aW9uIHdoaWNoIHNldHMgcmVzcC0+cCBhbmQgaW5jcmVtZW50cyByZXNwLT5vcGNudCBmb3IKKyAqIG5mczRzdmNfZW5jb2RlX2NvbXBvdW5kcmVzLgorICoKICAqLwotc3RhdGljIGludAotbmZzZDQxX2NvcHlfcmVwbGF5X2RhdGEoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLAotCQkJc3RydWN0IG5mc2Q0X2NhY2hlX2VudHJ5ICplbnRyeSkKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X2VuY19zZXF1ZW5jZV9yZXBsYXkoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncywKKwkJCSAgc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwKQogewotCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSByZXNwLT5ycXN0cDsKLQlzdHJ1Y3Qga3ZlYyAqcmVzdiA9ICZyZXNwLT5ycXN0cC0+cnFfcmVzLmhlYWRbMF07Ci0JaW50IGxlbjsKKwlzdHJ1Y3QgbmZzZDRfb3AgKm9wOworCXN0cnVjdCBuZnNkNF9zbG90ICpzbG90ID0gcmVzcC0+Y3N0YXRlLnNsb3Q7CiAKLQkvKiBDdXJyZW50IHJlcXVlc3QgcnBjIGhlYWRlciBsZW5ndGgqLwotCWxlbiA9IChjaGFyICopcmVzcC0+Y3N0YXRlLnN0YXRwIC0KLQkJCShjaGFyICopcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9yZXNwYWdlc1swXSk7Ci0JaWYgKGVudHJ5LT5jZV9kYXRhdi5pb3ZfbGVuICsgbGVuID4gUEFHRV9TSVpFKSB7Ci0JCWRwcmludGsoIiVzIHY0MSBjYWNoZWQgcmVwbHkgdG9vIGxhcmdlICglWmQpLlxuIiwgX19mdW5jX18sCi0JCQllbnRyeS0+Y2VfZGF0YXYuaW92X2xlbik7Ci0JCXJldHVybiAwOworCWRwcmludGsoIi0tPiAlcyByZXNwLT5vcGNudCAlZCBjYWNoZXRoaXMgJXUgXG4iLCBfX2Z1bmNfXywKKwkJcmVzcC0+b3BjbnQsIHJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZXRoaXMpOworCisJLyogRW5jb2RlIHRoZSByZXBsYXllZCBzZXF1ZW5jZSBvcGVyYXRpb24gKi8KKwlvcCA9ICZhcmdzLT5vcHNbcmVzcC0+b3BjbnQgLSAxXTsKKwluZnNkNF9lbmNvZGVfb3BlcmF0aW9uKHJlc3AsIG9wKTsKKworCS8qIFJldHVybiBuZnNlcnJfcmV0cnlfdW5jYWNoZWRfcmVwIGluIG5leHQgb3BlcmF0aW9uLiAqLworCWlmIChhcmdzLT5vcGNudCA+IDEgJiYgc2xvdC0+c2xfY2FjaGV0aGlzID09IDApIHsKKwkJb3AgPSAmYXJncy0+b3BzW3Jlc3AtPm9wY250KytdOworCQlvcC0+c3RhdHVzID0gbmZzZXJyX3JldHJ5X3VuY2FjaGVkX3JlcDsKKwkJbmZzZDRfZW5jb2RlX29wZXJhdGlvbihyZXNwLCBvcCk7CiAJfQotCS8qIGNvcHkgdGhlIGNhY2hlZCByZXBseSBuZnNkIGRhdGEgcGFzdCB0aGUgY3VycmVudCBycGMgaGVhZGVyICovCi0JbWVtY3B5KChjaGFyICopcmVzdi0+aW92X2Jhc2UgKyBsZW4sIGVudHJ5LT5jZV9kYXRhdi5pb3ZfYmFzZSwKLQkJZW50cnktPmNlX2RhdGF2Lmlvdl9sZW4pOwotCXJlc3YtPmlvdl9sZW4gPSBsZW4gKyBlbnRyeS0+Y2VfZGF0YXYuaW92X2xlbjsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gb3AtPnN0YXR1czsKIH0KIAogLyoKLSAqIEtlZXAgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHJlcGxheS4gQ29weSB0aGUgTkZTdjQuMSBkYXRhIGZyb20gdGhlIGZpcnN0Ci0gKiBjYWNoZWQgcGFnZS4gIFJlcGxhY2UgYW55IGZ1dGhlciByZXBsYXkgcGFnZXMgZnJvbSB0aGUgY2FjaGUuCisgKiBUaGUgc2VxdWVuY2Ugb3BlcmF0aW9uIGlzIG5vdCBjYWNoZWQgYmVjYXVzZSB3ZSBjYW4gdXNlIHRoZSBzbG90IGFuZAorICogc2Vzc2lvbiB2YWx1ZXMuCiAgKi8KIF9fYmUzMgogbmZzZDRfcmVwbGF5X2NhY2hlX2VudHJ5KHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwKIAkJCSBzdHJ1Y3QgbmZzZDRfc2VxdWVuY2UgKnNlcSkKIHsKLQlzdHJ1Y3QgbmZzZDRfY2FjaGVfZW50cnkgKmVudHJ5ID0gJnJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZV9lbnRyeTsKKwlzdHJ1Y3QgbmZzZDRfc2xvdCAqc2xvdCA9IHJlc3AtPmNzdGF0ZS5zbG90OwogCV9fYmUzMiBzdGF0dXM7CiAKLQlkcHJpbnRrKCItLT4gJXMgZW50cnkgJXBcbiIsIF9fZnVuY19fLCBlbnRyeSk7CisJZHByaW50aygiLS0+ICVzIHNsb3QgJXBcbiIsIF9fZnVuY19fLCBzbG90KTsKIAotCS8qCi0JICogSWYgdGhpcyBpcyBqdXN0IHRoZSBzZXF1ZW5jZSBvcGVyYXRpb24sIHdlIGRpZCBub3Qga2VlcAotCSAqIGEgcGFnZSBpbiB0aGUgY2FjaGUgZW50cnkgYmVjYXVzZSB3ZSBjYW4ganVzdCB1c2UgdGhlCi0JICogc2xvdCBpbmZvIHN0b3JlZCBpbiBzdHJ1Y3QgbmZzZDRfc2VxdWVuY2UgdGhhdCB3YXMgY2hlY2tlZAotCSAqIGFnYWluc3QgdGhlIHNsb3QgaW4gbmZzZDRfc2VxdWVuY2UoKS4KLQkgKgotCSAqIFRoaXMgb2NjdXJzIHdoZW4gc2VxLT5jYWNoZXRoaXMgaXMgRkFMU0UsIG9yIHdoZW4gdGhlIGNsaWVudAotCSAqIHNlc3Npb24gaW5hY3Rpdml0eSB0aW1lciBmaXJlcyBhbmQgYSBzb2xvIHNlcXVlbmNlIG9wZXJhdGlvbgotCSAqIGlzIHNlbnQgKGxlYXNlIHJlbmV3YWwpLgotCSAqLwotCWlmIChzZXEgJiYgbmZzZDRfbm90X2NhY2hlZChyZXNwKSkgewotCQlzZXEtPm1heHNsb3RzID0gcmVzcC0+Y3N0YXRlLnNlc3Npb24tPnNlX2ZjaGFubmVsLm1heHJlcXM7Ci0JCXJldHVybiBuZnNfb2s7Ci0JfQorCS8qIEVpdGhlciByZXR1cm5zIDAgb3IgbmZzZXJyX3JldHJ5X3VuY2FjaGVkICovCisJc3RhdHVzID0gbmZzZDRfZW5jX3NlcXVlbmNlX3JlcGxheShyZXNwLT5ycXN0cC0+cnFfYXJncCwgcmVzcCk7CisJaWYgKHN0YXR1cyA9PSBuZnNlcnJfcmV0cnlfdW5jYWNoZWRfcmVwKQorCQlyZXR1cm4gc3RhdHVzOwogCi0JaWYgKCFuZnNkNDFfY29weV9yZXBsYXlfZGF0YShyZXNwLCBlbnRyeSkpIHsKLQkJLyoKLQkJICogTm90IGVub3VnaCByb29tIHRvIHVzZSB0aGUgcmVwbGF5IHJwYyBoZWFkZXIsIHNlbmQgdGhlCi0JCSAqIGNhY2hlZCBoZWFkZXIuIFJlbGVhc2UgYWxsIHRoZSBhbGxvY2F0ZWQgcmVzdWx0IHBhZ2VzLgotCQkgKi8KLQkJc3ZjX2ZyZWVfcmVzX3BhZ2VzKHJlc3AtPnJxc3RwKTsKLQkJbmZzZDRfY29weV9wYWdlcyhyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXMsIGVudHJ5LT5jZV9yZXNwYWdlcywKLQkJCWVudHJ5LT5jZV9yZXN1c2VkKTsKLQl9IGVsc2UgewotCQkvKiBSZWxlYXNlIGFsbCBidXQgdGhlIGZpcnN0IGFsbG9jYXRlZCByZXN1bHQgcGFnZSAqLworCS8qIFRoZSBzZXF1ZW5jZSBvcGVyYXRpb24gaGFzIGJlZW4gZW5jb2RlZCwgY3N0YXRlLT5kYXRhcCBzZXQuICovCisJbWVtY3B5KHJlc3AtPmNzdGF0ZS5kYXRhcCwgc2xvdC0+c2xfZGF0YSwgc2xvdC0+c2xfZGF0YWxlbik7CiAKLQkJcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtLTsKLQkJc3ZjX2ZyZWVfcmVzX3BhZ2VzKHJlc3AtPnJxc3RwKTsKLQotCQluZnNkNF9jb3B5X3BhZ2VzKCZyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXNbMV0sCi0JCQkJICZlbnRyeS0+Y2VfcmVzcGFnZXNbMV0sCi0JCQkJIGVudHJ5LT5jZV9yZXN1c2VkIC0gMSk7Ci0JfQotCi0JcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQgPSBlbnRyeS0+Y2VfcmVzdXNlZDsKLQlyZXNwLT5vcGNudCA9IGVudHJ5LT5jZV9vcGNudDsKLQlyZXNwLT5jc3RhdGUuaW92bGVuID0gZW50cnktPmNlX2RhdGF2Lmlvdl9sZW4gKyBlbnRyeS0+Y2VfcnBjaGRybGVuOwotCXN0YXR1cyA9IGVudHJ5LT5jZV9zdGF0dXM7CisJcmVzcC0+b3BjbnQgPSBzbG90LT5zbF9vcGNudDsKKwlyZXNwLT5wID0gcmVzcC0+Y3N0YXRlLmRhdGFwICsgWERSX1FVQURMRU4oc2xvdC0+c2xfZGF0YWxlbik7CisJc3RhdHVzID0gc2xvdC0+c2xfc3RhdHVzOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTExOTQsMTMgKzExMTksMTUgQEAKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludAkJc3RyaGFzaHZhbDsKIAljaGFyCQkJZG5hbWVbSEVYRElSX0xFTl07CisJY2hhcgkJCWFkZHJfc3RyW0lORVQ2X0FERFJTVFJMRU5dOwogCW5mczRfdmVyaWZpZXIJCXZlcmYgPSBleGlkLT52ZXJpZmllcjsKLQl1MzIJCQlpcF9hZGRyID0gc3ZjX2FkZHJfaW4ocnFzdHApLT5zaW5fYWRkci5zX2FkZHI7CisJc3RydWN0IHNvY2thZGRyCQkqc2EgPSBzdmNfYWRkcihycXN0cCk7CiAKKwlycGNfbnRvcChzYSwgYWRkcl9zdHIsIHNpemVvZihhZGRyX3N0cikpOwogCWRwcmludGsoIiVzIHJxc3RwPSVwIGV4aWQ9JXAgY2xuYW1lLmxlbj0ldSBjbG5hbWUuZGF0YT0lcCAiCi0JCSIgaXBfYWRkcj0ldSBmbGFncyAleCwgc3BhX2hvdyAlZFxuIiwKKwkJImlwX2FkZHI9JXMgZmxhZ3MgJXgsIHNwYV9ob3cgJWRcbiIsCiAJCV9fZnVuY19fLCBycXN0cCwgZXhpZCwgZXhpZC0+Y2xuYW1lLmxlbiwgZXhpZC0+Y2xuYW1lLmRhdGEsCi0JCWlwX2FkZHIsIGV4aWQtPmZsYWdzLCBleGlkLT5zcGFfaG93KTsKKwkJYWRkcl9zdHIsIGV4aWQtPmZsYWdzLCBleGlkLT5zcGFfaG93KTsKIAogCWlmICghY2hlY2tfbmFtZShleGlkLT5jbG5hbWUpIHx8IChleGlkLT5mbGFncyAmIH5FWENIR0lENF9GTEFHX01BU0tfQSkpCiAJCXJldHVybiBuZnNlcnJfaW52YWw7CkBAIC0xMjgxLDI4ICsxMjA4LDIzIEBACiAKIG91dF9uZXc6CiAJLyogTm9ybWFsIGNhc2UgKi8KLQluZXcgPSBjcmVhdGVfY2xpZW50KGV4aWQtPmNsbmFtZSwgZG5hbWUpOworCW5ldyA9IGNyZWF0ZV9jbGllbnQoZXhpZC0+Y2xuYW1lLCBkbmFtZSwgcnFzdHAsICZ2ZXJmKTsKIAlpZiAobmV3ID09IE5VTEwpIHsKLQkJc3RhdHVzID0gbmZzZXJyX3Jlc291cmNlOworCQlzdGF0dXMgPSBuZnNlcnJfc2VydmVyZmF1bHQ7CiAJCWdvdG8gb3V0OwogCX0KIAotCWNvcHlfdmVyZihuZXcsICZ2ZXJmKTsKLQljb3B5X2NyZWQoJm5ldy0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKTsKLQluZXctPmNsX2FkZHIgPSBpcF9hZGRyOwogCWdlbl9jbGlkKG5ldyk7Ci0JZ2VuX2NvbmZpcm0obmV3KTsKIAlhZGRfdG9fdW5jb25maXJtZWQobmV3LCBzdHJoYXNodmFsKTsKIG91dF9jb3B5OgogCWV4aWQtPmNsaWVudGlkLmNsX2Jvb3QgPSBuZXctPmNsX2NsaWVudGlkLmNsX2Jvb3Q7CiAJZXhpZC0+Y2xpZW50aWQuY2xfaWQgPSBuZXctPmNsX2NsaWVudGlkLmNsX2lkOwogCi0JbmV3LT5jbF9zbG90LnNsX3NlcWlkID0gMDsKIAlleGlkLT5zZXFpZCA9IDE7CiAJbmZzZDRfc2V0X2V4X2ZsYWdzKG5ldywgZXhpZCk7CiAKIAlkcHJpbnRrKCJuZnNkNF9leGNoYW5nZV9pZCBzZXFpZCAlZCBmbGFncyAleFxuIiwKLQkJbmV3LT5jbF9zbG90LnNsX3NlcWlkLCBuZXctPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKKwkJbmV3LT5jbF9jc19zbG90LnNsX3NlcWlkLCBuZXctPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKIAlzdGF0dXMgPSBuZnNfb2s7CiAKIG91dDoKQEAgLTEzMTMsNDAgKzEyMzUsNjAgQEAKIH0KIAogc3RhdGljIGludAotY2hlY2tfc2xvdF9zZXFpZCh1MzIgc2VxaWQsIHN0cnVjdCBuZnNkNF9zbG90ICpzbG90KQorY2hlY2tfc2xvdF9zZXFpZCh1MzIgc2VxaWQsIHUzMiBzbG90X3NlcWlkLCBpbnQgc2xvdF9pbnVzZSkKIHsKLQlkcHJpbnRrKCIlcyBlbnRlci4gc2VxaWQgJWQgc2xvdC0+c2xfc2VxaWQgJWRcbiIsIF9fZnVuY19fLCBzZXFpZCwKLQkJc2xvdC0+c2xfc2VxaWQpOworCWRwcmludGsoIiVzIGVudGVyLiBzZXFpZCAlZCBzbG90X3NlcWlkICVkXG4iLCBfX2Z1bmNfXywgc2VxaWQsCisJCXNsb3Rfc2VxaWQpOwogCiAJLyogVGhlIHNsb3QgaXMgaW4gdXNlLCBhbmQgbm8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudC4gKi8KLQlpZiAoc2xvdC0+c2xfaW51c2UpIHsKLQkJaWYgKHNlcWlkID09IHNsb3QtPnNsX3NlcWlkKQorCWlmIChzbG90X2ludXNlKSB7CisJCWlmIChzZXFpZCA9PSBzbG90X3NlcWlkKQogCQkJcmV0dXJuIG5mc2Vycl9qdWtlYm94OwogCQllbHNlCiAJCQlyZXR1cm4gbmZzZXJyX3NlcV9taXNvcmRlcmVkOwogCX0KIAkvKiBOb3JtYWwgKi8KLQlpZiAobGlrZWx5KHNlcWlkID09IHNsb3QtPnNsX3NlcWlkICsgMSkpCisJaWYgKGxpa2VseShzZXFpZCA9PSBzbG90X3NlcWlkICsgMSkpCiAJCXJldHVybiBuZnNfb2s7CiAJLyogUmVwbGF5ICovCi0JaWYgKHNlcWlkID09IHNsb3QtPnNsX3NlcWlkKQorCWlmIChzZXFpZCA9PSBzbG90X3NlcWlkKQogCQlyZXR1cm4gbmZzZXJyX3JlcGxheV9jYWNoZTsKIAkvKiBXcmFwYXJvdW5kICovCi0JaWYgKHNlcWlkID09IDEgJiYgKHNsb3QtPnNsX3NlcWlkICsgMSkgPT0gMCkKKwlpZiAoc2VxaWQgPT0gMSAmJiAoc2xvdF9zZXFpZCArIDEpID09IDApCiAJCXJldHVybiBuZnNfb2s7CiAJLyogTWlzb3JkZXJlZCByZXBsYXkgb3IgbWlzb3JkZXJlZCBuZXcgcmVxdWVzdCAqLwogCXJldHVybiBuZnNlcnJfc2VxX21pc29yZGVyZWQ7CiB9CiAKKy8qCisgKiBDYWNoZSB0aGUgY3JlYXRlIHNlc3Npb24gcmVzdWx0IGludG8gdGhlIGNyZWF0ZSBzZXNzaW9uIHNpbmdsZSBEUkMKKyAqIHNsb3QgY2FjaGUgYnkgc2F2aW5nIHRoZSB4ZHIgc3RydWN0dXJlLiBzbF9zZXFpZCBoYXMgYmVlbiBzZXQuCisgKiBEbyB0aGlzIGZvciBzb2xvIG9yIGVtYmVkZGVkIGNyZWF0ZSBzZXNzaW9uIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCituZnNkNF9jYWNoZV9jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24gKmNyX3NlcywKKwkJCSAgIHN0cnVjdCBuZnNkNF9jbGlkX3Nsb3QgKnNsb3QsIGludCBuZnNlcnIpCit7CisJc2xvdC0+c2xfc3RhdHVzID0gbmZzZXJyOworCW1lbWNweSgmc2xvdC0+c2xfY3Jfc2VzLCBjcl9zZXMsIHNpemVvZigqY3Jfc2VzKSk7Cit9CisKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X3JlcGxheV9jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24gKmNyX3NlcywKKwkJCSAgICBzdHJ1Y3QgbmZzZDRfY2xpZF9zbG90ICpzbG90KQoreworCW1lbWNweShjcl9zZXMsICZzbG90LT5zbF9jcl9zZXMsIHNpemVvZigqY3Jfc2VzKSk7CisJcmV0dXJuIHNsb3QtPnNsX3N0YXR1czsKK30KKwogX19iZTMyCiBuZnNkNF9jcmVhdGVfc2Vzc2lvbihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAogCQkgICAgIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAogCQkgICAgIHN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbiAqY3Jfc2VzKQogewotCXUzMiBpcF9hZGRyID0gc3ZjX2FkZHJfaW4ocnFzdHApLT5zaW5fYWRkci5zX2FkZHI7Ci0Jc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwID0gcnFzdHAtPnJxX3Jlc3A7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IHN2Y19hZGRyKHJxc3RwKTsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNvbmYsICp1bmNvbmY7Ci0Jc3RydWN0IG5mc2Q0X3Nsb3QgKnNsb3QgPSBOVUxMOworCXN0cnVjdCBuZnNkNF9jbGlkX3Nsb3QgKmNzX3Nsb3QgPSBOVUxMOwogCWludCBzdGF0dXMgPSAwOwogCiAJbmZzNF9sb2NrX3N0YXRlKCk7CkBAIC0xMzU0LDQwICsxMjk2LDM4IEBACiAJY29uZiA9IGZpbmRfY29uZmlybWVkX2NsaWVudCgmY3Jfc2VzLT5jbGllbnRpZCk7CiAKIAlpZiAoY29uZikgewotCQlzbG90ID0gJmNvbmYtPmNsX3Nsb3Q7Ci0JCXN0YXR1cyA9IGNoZWNrX3Nsb3Rfc2VxaWQoY3Jfc2VzLT5zZXFpZCwgc2xvdCk7CisJCWNzX3Nsb3QgPSAmY29uZi0+Y2xfY3Nfc2xvdDsKKwkJc3RhdHVzID0gY2hlY2tfc2xvdF9zZXFpZChjcl9zZXMtPnNlcWlkLCBjc19zbG90LT5zbF9zZXFpZCwgMCk7CiAJCWlmIChzdGF0dXMgPT0gbmZzZXJyX3JlcGxheV9jYWNoZSkgewogCQkJZHByaW50aygiR290IGEgY3JlYXRlX3Nlc3Npb24gcmVwbGF5ISBzZXFpZD0gJWRcbiIsCi0JCQkJc2xvdC0+c2xfc2VxaWQpOwotCQkJY3N0YXRlLT5zbG90ID0gc2xvdDsKLQkJCWNzdGF0ZS0+c3RhdHVzID0gc3RhdHVzOworCQkJCWNzX3Nsb3QtPnNsX3NlcWlkKTsKIAkJCS8qIFJldHVybiB0aGUgY2FjaGVkIHJlcGx5IHN0YXR1cyAqLwotCQkJc3RhdHVzID0gbmZzZDRfcmVwbGF5X2NhY2hlX2VudHJ5KHJlc3AsIE5VTEwpOworCQkJc3RhdHVzID0gbmZzZDRfcmVwbGF5X2NyZWF0ZV9zZXNzaW9uKGNyX3NlcywgY3Nfc2xvdCk7CiAJCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmIChjcl9zZXMtPnNlcWlkICE9IGNvbmYtPmNsX3Nsb3Quc2xfc2VxaWQgKyAxKSB7CisJCX0gZWxzZSBpZiAoY3Jfc2VzLT5zZXFpZCAhPSBjc19zbG90LT5zbF9zZXFpZCArIDEpIHsKIAkJCXN0YXR1cyA9IG5mc2Vycl9zZXFfbWlzb3JkZXJlZDsKIAkJCWRwcmludGsoIlNlcXVlbmNlIG1pc29yZGVyZWQhXG4iKTsKIAkJCWRwcmludGsoIkV4cGVjdGVkIHNlcWlkPSAlZCBidXQgZ290IHNlcWlkPSAlZFxuIiwKLQkJCQlzbG90LT5zbF9zZXFpZCwgY3Jfc2VzLT5zZXFpZCk7CisJCQkJY3Nfc2xvdC0+c2xfc2VxaWQsIGNyX3Nlcy0+c2VxaWQpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJY29uZi0+Y2xfc2xvdC5zbF9zZXFpZCsrOworCQljc19zbG90LT5zbF9zZXFpZCsrOwogCX0gZWxzZSBpZiAodW5jb25mKSB7CiAJCWlmICghc2FtZV9jcmVkcygmdW5jb25mLT5jbF9jcmVkLCAmcnFzdHAtPnJxX2NyZWQpIHx8Ci0JCSAgICAoaXBfYWRkciAhPSB1bmNvbmYtPmNsX2FkZHIpKSB7CisJCSAgICAhcnBjX2NtcF9hZGRyKHNhLCAoc3RydWN0IHNvY2thZGRyICopICZ1bmNvbmYtPmNsX2FkZHIpKSB7CiAJCQlzdGF0dXMgPSBuZnNlcnJfY2xpZF9pbnVzZTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc2xvdCA9ICZ1bmNvbmYtPmNsX3Nsb3Q7Ci0JCXN0YXR1cyA9IGNoZWNrX3Nsb3Rfc2VxaWQoY3Jfc2VzLT5zZXFpZCwgc2xvdCk7CisJCWNzX3Nsb3QgPSAmdW5jb25mLT5jbF9jc19zbG90OworCQlzdGF0dXMgPSBjaGVja19zbG90X3NlcWlkKGNyX3Nlcy0+c2VxaWQsIGNzX3Nsb3QtPnNsX3NlcWlkLCAwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJLyogYW4gdW5jb25maXJtZWQgcmVwbGF5IHJldHVybnMgbWlzb3JkZXJlZCAqLwogCQkJc3RhdHVzID0gbmZzZXJyX3NlcV9taXNvcmRlcmVkOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9jYWNoZTsKIAkJfQogCi0JCXNsb3QtPnNsX3NlcWlkKys7IC8qIGZyb20gMCB0byAxICovCisJCWNzX3Nsb3QtPnNsX3NlcWlkKys7IC8qIGZyb20gMCB0byAxICovCiAJCW1vdmVfdG9fY29uZmlybWVkKHVuY29uZik7CiAKIAkJLyoKQEAgLTEzOTYsNiArMTMzNiwxOSBAQAogCQljcl9zZXMtPmZsYWdzICY9IH5TRVNTSU9ONF9QRVJTSVNUOwogCQljcl9zZXMtPmZsYWdzICY9IH5TRVNTSU9ONF9SRE1BOwogCisJCWlmIChjcl9zZXMtPmZsYWdzICYgU0VTU0lPTjRfQkFDS19DSEFOKSB7CisJCQl1bmNvbmYtPmNsX2NiX3hwcnQgPSBycXN0cC0+cnFfeHBydDsKKwkJCXN2Y194cHJ0X2dldCh1bmNvbmYtPmNsX2NiX3hwcnQpOworCQkJcnBjX2NvcHlfYWRkcigKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJnVuY29uZi0+Y2xfY2JfY29ubi5jYl9hZGRyLAorCQkJCXNhKTsKKwkJCXVuY29uZi0+Y2xfY2JfY29ubi5jYl9hZGRybGVuID0gc3ZjX2FkZHJfbGVuKHNhKTsKKwkJCXVuY29uZi0+Y2xfY2JfY29ubi5jYl9taW5vcnZlcnNpb24gPQorCQkJCWNzdGF0ZS0+bWlub3J2ZXJzaW9uOworCQkJdW5jb25mLT5jbF9jYl9jb25uLmNiX3Byb2cgPSBjcl9zZXMtPmNhbGxiYWNrX3Byb2c7CisJCQl1bmNvbmYtPmNsX2NiX3NlcV9uciA9IDE7CisJCQluZnNkNF9wcm9iZV9jYWxsYmFjayh1bmNvbmYpOworCQl9CiAJCWNvbmYgPSB1bmNvbmY7CiAJfSBlbHNlIHsKIAkJc3RhdHVzID0gbmZzZXJyX3N0YWxlX2NsaWVudGlkOwpAQCAtMTQwOCwxMiArMTM2MSwxMSBAQAogCiAJbWVtY3B5KGNyX3Nlcy0+c2Vzc2lvbmlkLmRhdGEsIGNvbmYtPmNsX3Nlc3Npb25pZC5kYXRhLAogCSAgICAgICBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQljcl9zZXMtPnNlcWlkID0gc2xvdC0+c2xfc2VxaWQ7CisJY3Jfc2VzLT5zZXFpZCA9IGNzX3Nsb3QtPnNsX3NlcWlkOwogCi0Jc2xvdC0+c2xfaW51c2UgPSB0cnVlOwotCWNzdGF0ZS0+c2xvdCA9IHNsb3Q7Ci0JLyogRW5zdXJlIGEgcGFnZSBpcyB1c2VkIGZvciB0aGUgY2FjaGUgKi8KLQlzbG90LT5zbF9jYWNoZV9lbnRyeS5jZV9jYWNoZXRoaXMgPSAxOworb3V0X2NhY2hlOgorCS8qIGNhY2hlIHNvbG8gYW5kIGVtYmVkZGVkIGNyZWF0ZSBzZXNzaW9ucyB1bmRlciB0aGUgc3RhdGUgbG9jayAqLworCW5mc2Q0X2NhY2hlX2NyZWF0ZV9zZXNzaW9uKGNyX3NlcywgY3Nfc2xvdCwgc3RhdHVzKTsKIG91dDoKIAluZnM0X3VubG9ja19zdGF0ZSgpOwogCWRwcmludGsoIiVzIHJldHVybnMgJWRcbiIsIF9fZnVuY19fLCBudG9obChzdGF0dXMpKTsKQEAgLTE0NzgsMTggKzE0MzAsMjMgQEAKIAlpZiAoc2VxLT5zbG90aWQgPj0gc2Vzc2lvbi0+c2VfZmNoYW5uZWwubWF4cmVxcykKIAkJZ290byBvdXQ7CiAKLQlzbG90ID0gJnNlc3Npb24tPnNlX3Nsb3RzW3NlcS0+c2xvdGlkXTsKKwlzbG90ID0gc2Vzc2lvbi0+c2Vfc2xvdHNbc2VxLT5zbG90aWRdOwogCWRwcmludGsoIiVzOiBzbG90aWQgJWRcbiIsIF9fZnVuY19fLCBzZXEtPnNsb3RpZCk7CiAKLQlzdGF0dXMgPSBjaGVja19zbG90X3NlcWlkKHNlcS0+c2VxaWQsIHNsb3QpOworCS8qIFdlIGRvIG5vdCBuZWdvdGlhdGUgdGhlIG51bWJlciBvZiBzbG90cyB5ZXQsIHNvIHNldCB0aGUKKwkgKiBtYXhzbG90cyB0byB0aGUgc2Vzc2lvbiBtYXhyZXFzIHdoaWNoIGlzIHVzZWQgdG8gZW5jb2RlCisJICogc3JfaGlnaGVzdF9zbG90aWQgYW5kIHRoZSBzcl90YXJnZXRfc2xvdCBpZCB0byBtYXhzbG90cyAqLworCXNlcS0+bWF4c2xvdHMgPSBzZXNzaW9uLT5zZV9mY2hhbm5lbC5tYXhyZXFzOworCisJc3RhdHVzID0gY2hlY2tfc2xvdF9zZXFpZChzZXEtPnNlcWlkLCBzbG90LT5zbF9zZXFpZCwgc2xvdC0+c2xfaW51c2UpOwogCWlmIChzdGF0dXMgPT0gbmZzZXJyX3JlcGxheV9jYWNoZSkgewogCQljc3RhdGUtPnNsb3QgPSBzbG90OwogCQljc3RhdGUtPnNlc3Npb24gPSBzZXNzaW9uOwogCQkvKiBSZXR1cm4gdGhlIGNhY2hlZCByZXBseSBzdGF0dXMgYW5kIHNldCBjc3RhdGUtPnN0YXR1cwotCQkgKiBmb3IgbmZzZDRfc3ZjX2VuY29kZV9jb21wb3VuZHJlcyBwcm9jZXNzaW5nICovCisJCSAqIGZvciBuZnNkNF9wcm9jX2NvbXBvdW5kIHByb2Nlc3NpbmcgKi8KIAkJc3RhdHVzID0gbmZzZDRfcmVwbGF5X2NhY2hlX2VudHJ5KHJlc3AsIHNlcSk7CiAJCWNzdGF0ZS0+c3RhdHVzID0gbmZzZXJyX3JlcGxheV9jYWNoZTsKLQkJZ290byByZXBsYXlfY2FjaGU7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKQEAgLTE0OTcsMjMgKzE0NTQsMjMgQEAKIAkvKiBTdWNjZXNzISBidW1wIHNsb3Qgc2VxaWQgKi8KIAlzbG90LT5zbF9pbnVzZSA9IHRydWU7CiAJc2xvdC0+c2xfc2VxaWQgPSBzZXEtPnNlcWlkOwotCXNsb3QtPnNsX2NhY2hlX2VudHJ5LmNlX2NhY2hldGhpcyA9IHNlcS0+Y2FjaGV0aGlzOwotCS8qIEFsd2F5cyBzZXQgdGhlIGNhY2hlIGVudHJ5IGNhY2hldGhpcyBmb3Igc29sbyBzZXF1ZW5jZSAqLwotCWlmIChuZnNkNF9pc19zb2xvX3NlcXVlbmNlKHJlc3ApKQotCQlzbG90LT5zbF9jYWNoZV9lbnRyeS5jZV9jYWNoZXRoaXMgPSAxOworCXNsb3QtPnNsX2NhY2hldGhpcyA9IHNlcS0+Y2FjaGV0aGlzOwogCiAJY3N0YXRlLT5zbG90ID0gc2xvdDsKIAljc3RhdGUtPnNlc3Npb24gPSBzZXNzaW9uOwogCi1yZXBsYXlfY2FjaGU6Ci0JLyogUmVuZXcgdGhlIGNsaWVudGlkIG9uIHN1Y2Nlc3MgYW5kIG9uIHJlcGxheS4KLQkgKiBIb2xkIGEgc2Vzc2lvbiByZWZlcmVuY2UgdW50aWwgZG9uZSBwcm9jZXNzaW5nIHRoZSBjb21wb3VuZDoKKwkvKiBIb2xkIGEgc2Vzc2lvbiByZWZlcmVuY2UgdW50aWwgZG9uZSBwcm9jZXNzaW5nIHRoZSBjb21wb3VuZDoKIAkgKiBuZnNkNF9wdXRfc2Vzc2lvbiBjYWxsZWQgb25seSBpZiB0aGUgY3N0YXRlIHNsb3QgaXMgc2V0LgogCSAqLwotCXJlbmV3X2NsaWVudChzZXNzaW9uLT5zZV9jbGllbnQpOwogCW5mc2Q0X2dldF9zZXNzaW9uKHNlc3Npb24pOwogb3V0OgogCXNwaW5fdW5sb2NrKCZzZXNzaW9uaWRfbG9jayk7CisJLyogUmVuZXcgdGhlIGNsaWVudGlkIG9uIHN1Y2Nlc3MgYW5kIG9uIHJlcGxheSAqLworCWlmIChjc3RhdGUtPnNlc3Npb24pIHsKKwkJbmZzNF9sb2NrX3N0YXRlKCk7CisJCXJlbmV3X2NsaWVudChzZXNzaW9uLT5zZV9jbGllbnQpOworCQluZnM0X3VubG9ja19zdGF0ZSgpOworCX0KIAlkcHJpbnRrKCIlczogcmV0dXJuICVkXG4iLCBfX2Z1bmNfXywgbnRvaGwoc3RhdHVzKSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTE1MjIsNyArMTQ3OSw3IEBACiBuZnNkNF9zZXRjbGllbnRpZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKIAkJICBzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWQgKnNldGNsaWQpCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luCSpzaW4gPSBzdmNfYWRkcl9pbihycXN0cCk7CisJc3RydWN0IHNvY2thZGRyCQkqc2EgPSBzdmNfYWRkcihycXN0cCk7CiAJc3RydWN0IHhkcl9uZXRvYmogCWNsbmFtZSA9IHsgCiAJCS5sZW4gPSBzZXRjbGlkLT5zZV9uYW1lbGVuLAogCQkuZGF0YSA9IHNldGNsaWQtPnNlX25hbWUsCkBAIC0xNTMxLDcgKzE0ODgsNiBAQAogCXVuc2lnbmVkIGludCAJCXN0cmhhc2h2YWw7CiAJc3RydWN0IG5mczRfY2xpZW50CSpjb25mLCAqdW5jb25mLCAqbmV3OwogCV9fYmUzMiAJCQlzdGF0dXM7Ci0JY2hhcgkJCSpwcmluYzsKIAljaGFyICAgICAgICAgICAgICAgICAgICBkbmFtZVtIRVhESVJfTEVOXTsKIAkKIAlpZiAoIWNoZWNrX25hbWUoY2xuYW1lKSkKQEAgLTE1NTQsOCArMTUxMCwxMSBAQAogCQkvKiBSRkMgMzUzMCAxNC4yLjMzIENBU0UgMDogKi8KIAkJc3RhdHVzID0gbmZzZXJyX2NsaWRfaW51c2U7CiAJCWlmICghc2FtZV9jcmVkcygmY29uZi0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKSkgewotCQkJZHByaW50aygiTkZTRDogc2V0Y2xpZW50aWQ6IHN0cmluZyBpbiB1c2UgYnkgY2xpZW50IgotCQkJCSIgYXQgJXBJNFxuIiwgJmNvbmYtPmNsX2FkZHIpOworCQkJY2hhciBhZGRyX3N0cltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCXJwY19udG9wKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbmYtPmNsX2FkZHIsIGFkZHJfc3RyLAorCQkJCSBzaXplb2YoYWRkcl9zdHIpKTsKKwkJCWRwcmludGsoIk5GU0Q6IHNldGNsaWVudGlkOiBzdHJpbmcgaW4gdXNlIGJ5IGNsaWVudCAiCisJCQkJImF0ICVzXG4iLCBhZGRyX3N0cik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTE1NzMsNyArMTUzMiw3IEBACiAJCSAqLwogCQlpZiAodW5jb25mKQogCQkJZXhwaXJlX2NsaWVudCh1bmNvbmYpOwotCQluZXcgPSBjcmVhdGVfY2xpZW50KGNsbmFtZSwgZG5hbWUpOworCQluZXcgPSBjcmVhdGVfY2xpZW50KGNsbmFtZSwgZG5hbWUsIHJxc3RwLCAmY2x2ZXJpZmllcik7CiAJCWlmIChuZXcgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCQlnZW5fY2xpZChuZXcpOwpAQCAtMTU5MCw3ICsxNTQ5LDcgQEAKIAkJCSAqLwogCQkJZXhwaXJlX2NsaWVudCh1bmNvbmYpOwogCQl9Ci0JCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSk7CisJCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSwgcnFzdHAsICZjbHZlcmlmaWVyKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJCWNvcHlfY2xpZChuZXcsIGNvbmYpOwpAQCAtMTYwMCw3ICsxNTU5LDcgQEAKIAkJICogcHJvYmFibGUgY2xpZW50IHJlYm9vdDsgc3RhdGUgd2lsbCBiZSByZW1vdmVkIGlmCiAJCSAqIGNvbmZpcm1lZC4KIAkJICovCi0JCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSk7CisJCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSwgcnFzdHAsICZjbHZlcmlmaWVyKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJCWdlbl9jbGlkKG5ldyk7CkBAIC0xNjExLDI1ICsxNTcwLDEyIEBACiAJCSAqIGNvbmZpcm1lZC4KIAkJICovCiAJCWV4cGlyZV9jbGllbnQodW5jb25mKTsKLQkJbmV3ID0gY3JlYXRlX2NsaWVudChjbG5hbWUsIGRuYW1lKTsKKwkJbmV3ID0gY3JlYXRlX2NsaWVudChjbG5hbWUsIGRuYW1lLCBycXN0cCwgJmNsdmVyaWZpZXIpOwogCQlpZiAobmV3ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIAkJZ2VuX2NsaWQobmV3KTsKIAl9Ci0JY29weV92ZXJmKG5ldywgJmNsdmVyaWZpZXIpOwotCW5ldy0+Y2xfYWRkciA9IHNpbi0+c2luX2FkZHIuc19hZGRyOwotCW5ldy0+Y2xfZmxhdm9yID0gcnFzdHAtPnJxX2ZsYXZvcjsKLQlwcmluYyA9IHN2Y19nc3NfcHJpbmNpcGFsKHJxc3RwKTsKLQlpZiAocHJpbmMpIHsKLQkJbmV3LT5jbF9wcmluY2lwYWwgPSBrc3RyZHVwKHByaW5jLCBHRlBfS0VSTkVMKTsKLQkJaWYgKG5ldy0+Y2xfcHJpbmNpcGFsID09IE5VTEwpIHsKLQkJCWZyZWVfY2xpZW50KG5ldyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQljb3B5X2NyZWQoJm5ldy0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKTsKLQlnZW5fY29uZmlybShuZXcpOwotCWdlbl9jYWxsYmFjayhuZXcsIHNldGNsaWQpOworCWdlbl9jYWxsYmFjayhuZXcsIHNldGNsaWQsIHJwY19nZXRfc2NvcGVfaWQoc2EpKTsKIAlhZGRfdG9fdW5jb25maXJtZWQobmV3LCBzdHJoYXNodmFsKTsKIAlzZXRjbGlkLT5zZV9jbGllbnRpZC5jbF9ib290ID0gbmV3LT5jbF9jbGllbnRpZC5jbF9ib290OwogCXNldGNsaWQtPnNlX2NsaWVudGlkLmNsX2lkID0gbmV3LT5jbF9jbGllbnRpZC5jbF9pZDsKQEAgLTE2NTEsNyArMTU5Nyw3IEBACiAJCQkgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCiAJCQkgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0gKnNldGNsaWVudGlkX2NvbmZpcm0pCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBzdmNfYWRkcl9pbihycXN0cCk7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IHN2Y19hZGRyKHJxc3RwKTsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNvbmYsICp1bmNvbmY7CiAJbmZzNF92ZXJpZmllciBjb25maXJtID0gc2V0Y2xpZW50aWRfY29uZmlybS0+c2NfY29uZmlybTsgCiAJY2xpZW50aWRfdCAqIGNsaWQgPSAmc2V0Y2xpZW50aWRfY29uZmlybS0+c2NfY2xpZW50aWQ7CkBAIC0xNjcwLDkgKzE2MTYsOSBAQAogCXVuY29uZiA9IGZpbmRfdW5jb25maXJtZWRfY2xpZW50KGNsaWQpOwogCiAJc3RhdHVzID0gbmZzZXJyX2NsaWRfaW51c2U7Ci0JaWYgKGNvbmYgJiYgY29uZi0+Y2xfYWRkciAhPSBzaW4tPnNpbl9hZGRyLnNfYWRkcikKKwlpZiAoY29uZiAmJiAhcnBjX2NtcF9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbmYtPmNsX2FkZHIsIHNhKSkKIAkJZ290byBvdXQ7Ci0JaWYgKHVuY29uZiAmJiB1bmNvbmYtPmNsX2FkZHIgIT0gc2luLT5zaW5fYWRkci5zX2FkZHIpCisJaWYgKHVuY29uZiAmJiAhcnBjX2NtcF9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnVuY29uZi0+Y2xfYWRkciwgc2EpKQogCQlnb3RvIG91dDsKIAogCS8qCkBAIC0yMTYzLDcgKzIxMDksNyBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIH0KIAotc3RhdGljIHN0cnVjdCBsb2NrX21hbmFnZXJfb3BlcmF0aW9ucyBuZnNkX2xlYXNlX21uZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5mc2RfbGVhc2VfbW5nX29wcyA9IHsKIAkuZmxfYnJlYWsgPSBuZnNkX2JyZWFrX2RlbGVnX2NiLAogCS5mbF9yZWxlYXNlX3ByaXZhdGUgPSBuZnNkX3JlbGVhc2VfZGVsZWdfY2IsCiAJLmZsX2NvcHlfbG9jayA9IG5mc2RfY29weV9sb2NrX2RlbGVnX2NiLApAQCAtMzM2OCw3ICszMzE0LDcgQEAKIAogLyogSGFjayE6IEZvciBub3csIHdlJ3JlIGRlZmluaW5nIHRoaXMganVzdCBzbyB3ZSBjYW4gdXNlIGEgcG9pbnRlciB0byBpdAogICogYXMgYSB1bmlxdWUgY29va2llIHRvIGlkZW50aWZ5IG91ciAoTkZTdjQncykgcG9zaXggbG9ja3MuICovCi1zdGF0aWMgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5mc2RfcG9zaXhfbW5nX29wcyAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5mc2RfcG9zaXhfbW5nX29wcyAgPSB7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTQwNzIsNyArNDAxOCw3IEBACiAKIC8qIGluaXRpYWxpemF0aW9uIHRvIHBlcmZvcm0gd2hlbiB0aGUgbmZzZCBzZXJ2aWNlIGlzIHN0YXJ0ZWQ6ICovCiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBfX25mczRfc3RhdGVfc3RhcnQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGdyYWNlX3RpbWU7CkBAIC00MDg0LDE5ICs0MDMwLDI2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiTkZTRDogc3RhcnRpbmcgJWxkLXNlY29uZCBncmFjZSBwZXJpb2RcbiIsCiAJICAgICAgIGdyYWNlX3RpbWUvSFopOwogCWxhdW5kcnlfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibmZzZDQiKTsKKwlpZiAobGF1bmRyeV93cSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAlxdWV1ZV9kZWxheWVkX3dvcmsobGF1bmRyeV93cSwgJmxhdW5kcm9tYXRfd29yaywgZ3JhY2VfdGltZSk7CiAJc2V0X21heF9kZWxlZ2F0aW9ucygpOworCXJldHVybiBzZXRfY2FsbGJhY2tfY3JlZCgpOwogfQogCi12b2lkCitpbnQKIG5mczRfc3RhdGVfc3RhcnQodm9pZCkKIHsKKwlpbnQgcmV0OworCiAJaWYgKG5mczRfaW5pdCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAluZnNkNF9sb2FkX3JlYm9vdF9yZWNvdmVyeV9kYXRhKCk7Ci0JX19uZnM0X3N0YXRlX3N0YXJ0KCk7CisJcmV0ID0gX19uZnM0X3N0YXRlX3N0YXJ0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAluZnM0X2luaXQgPSAxOwotCXJldHVybjsKKwlyZXR1cm4gMDsKIH0KIAogdGltZV90CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDJkY2M3ZmUuLjBmYmQ1MGMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0xNTk5LDcgKzE1OTksOCBAQAogc3RhdGljIGNoYXIgKm5mc2Q0X3BhdGgoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCwgX19iZTMyICpzdGF0KQogewogCXN0cnVjdCBzdmNfZmggdG1wX2ZoOwotCWNoYXIgKnBhdGgsICpyb290cGF0aDsKKwljaGFyICpwYXRoID0gTlVMTCwgKnJvb3RwYXRoOworCXNpemVfdCByb290bGVuOwogCiAJZmhfaW5pdCgmdG1wX2ZoLCBORlM0X0ZIU0laRSk7CiAJKnN0YXQgPSBleHBfcHNldWRvcm9vdChycXN0cCwgJnRtcF9maCk7CkBAIC0xNjA5LDE0ICsxNjEwLDE4IEBACiAKIAlwYXRoID0gZXhwLT5leF9wYXRobmFtZTsKIAotCWlmIChzdHJuY21wKHBhdGgsIHJvb3RwYXRoLCBzdHJsZW4ocm9vdHBhdGgpKSkgeworCXJvb3RsZW4gPSBzdHJsZW4ocm9vdHBhdGgpOworCWlmIChzdHJuY21wKHBhdGgsIHJvb3RwYXRoLCByb290bGVuKSkgewogCQlkcHJpbnRrKCJuZnNkOiBmc19sb2NhdGlvbnMgZmFpbGVkOyIKIAkJCSIlcyBpcyBub3QgY29udGFpbmVkIGluICVzXG4iLCBwYXRoLCByb290cGF0aCk7CiAJCSpzdGF0ID0gbmZzZXJyX25vdHN1cHA7Ci0JCXJldHVybiBOVUxMOworCQlwYXRoID0gTlVMTDsKKwkJZ290byBvdXQ7CiAJfQotCi0JcmV0dXJuIHBhdGggKyBzdHJsZW4ocm9vdHBhdGgpOworCXBhdGggKz0gcm9vdGxlbjsKK291dDoKKwlmaF9wdXQoJnRtcF9maCk7CisJcmV0dXJuIHBhdGg7CiB9CiAKIC8qCkBAIC0xNzkzLDExICsxNzk4LDYgQEAKIAkJCQlnb3RvIG91dF9uZnNlcnI7CiAJCX0KIAl9Ci0JaWYgKGJtdmFsMCAmIEZBVFRSNF9XT1JEMF9GU19MT0NBVElPTlMpIHsKLQkJaWYgKGV4cC0+ZXhfZnNsb2NzLmxvY2F0aW9ucyA9PSBOVUxMKSB7Ci0JCQlibXZhbDAgJj0gfkZBVFRSNF9XT1JEMF9GU19MT0NBVElPTlM7Ci0JCX0KLQl9CiAJaWYgKChidWZsZW4gLT0gMTYpIDwgMCkKIAkJZ290byBvdXRfcmVzb3VyY2U7CiAKQEAgLTE4MjUsOCArMTgyNSw2IEBACiAJCQlnb3RvIG91dF9yZXNvdXJjZTsKIAkJaWYgKCFhY2xzdXBwb3J0KQogCQkJd29yZDAgJj0gfkZBVFRSNF9XT1JEMF9BQ0w7Ci0JCWlmICghZXhwLT5leF9mc2xvY3MubG9jYXRpb25zKQotCQkJd29yZDAgJj0gfkZBVFRSNF9XT1JEMF9GU19MT0NBVElPTlM7CiAJCWlmICghd29yZDIpIHsKIAkJCVdSSVRFMzIoMik7CiAJCQlXUklURTMyKHdvcmQwKTsKQEAgLTMwNjQsNiArMzA2Miw3IEBACiAJV1JJVEUzMigwKTsKIAogCUFESlVTVF9BUkdTKCk7CisJcmVzcC0+Y3N0YXRlLmRhdGFwID0gcDsgLyogRFJDIGNhY2hlIGRhdGEgcG9pbnRlciAqLwogCXJldHVybiAwOwogfQogCkBAIC0zMTY2LDcgKzMxNjUsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJc2Vzc2lvbiA9IHJlc3AtPmNzdGF0ZS5zZXNzaW9uOwotCWlmIChzZXNzaW9uID09IE5VTEwgfHwgc2xvdC0+c2xfY2FjaGVfZW50cnkuY2VfY2FjaGV0aGlzID09IDApCisJaWYgKHNlc3Npb24gPT0gTlVMTCB8fCBzbG90LT5zbF9jYWNoZXRoaXMgPT0gMCkKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChyZXNwLT5vcGNudCA+PSBhcmdzLT5vcGNudCkKQEAgLTMyOTEsNiArMzI5MCw3IEBACiAJLyoKIAkgKiBBbGwgdGhhdCByZW1haW5zIGlzIHRvIHdyaXRlIHRoZSB0YWcgYW5kIG9wZXJhdGlvbiBjb3VudC4uLgogCSAqLworCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3MgPSAmcmVzcC0+Y3N0YXRlOwogCXN0cnVjdCBrdmVjICppb3Y7CiAJcCA9IHJlc3AtPnRhZ3A7CiAJKnArKyA9IGh0b25sKHJlc3AtPnRhZ2xlbik7CkBAIC0zMzA0LDE3ICszMzA0LDExIEBACiAJCWlvdiA9ICZycXN0cC0+cnFfcmVzLmhlYWRbMF07CiAJaW92LT5pb3ZfbGVuID0gKChjaGFyKilyZXNwLT5wKSAtIChjaGFyKilpb3YtPmlvdl9iYXNlOwogCUJVR19PTihpb3YtPmlvdl9sZW4gPiBQQUdFX1NJWkUpOwotCWlmIChuZnNkNF9oYXNfc2Vzc2lvbigmcmVzcC0+Y3N0YXRlKSkgewotCQlpZiAocmVzcC0+Y3N0YXRlLnN0YXR1cyA9PSBuZnNlcnJfcmVwbGF5X2NhY2hlICYmCi0JCQkJIW5mc2Q0X25vdF9jYWNoZWQocmVzcCkpIHsKLQkJCWlvdi0+aW92X2xlbiA9IHJlc3AtPmNzdGF0ZS5pb3ZsZW47Ci0JCX0gZWxzZSB7Ci0JCQluZnNkNF9zdG9yZV9jYWNoZV9lbnRyeShyZXNwKTsKLQkJCWRwcmludGsoIiVzOiBTRVQgU0xPVCBTVEFURSBUTyBBVkFJTEFCTEVcbiIsIF9fZnVuY19fKTsKLQkJCXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9pbnVzZSA9IDA7Ci0JCX0KLQkJaWYgKHJlc3AtPmNzdGF0ZS5zZXNzaW9uKQotCQkJbmZzZDRfcHV0X3Nlc3Npb24ocmVzcC0+Y3N0YXRlLnNlc3Npb24pOworCWlmIChuZnNkNF9oYXNfc2Vzc2lvbihjcykgJiYgY3MtPnN0YXR1cyAhPSBuZnNlcnJfcmVwbGF5X2NhY2hlKSB7CisJCW5mc2Q0X3N0b3JlX2NhY2hlX2VudHJ5KHJlc3ApOworCQlkcHJpbnRrKCIlczogU0VUIFNMT1QgU1RBVEUgVE8gQVZBSUxBQkxFXG4iLCBfX2Z1bmNfXyk7CisJCXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9pbnVzZSA9IGZhbHNlOworCQluZnNkNF9wdXRfc2Vzc2lvbihyZXNwLT5jc3RhdGUuc2Vzc2lvbik7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggN2U5MDZjNS4uMDAzODhkMiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC0xNzQsMTIgKzE3NCwxMyBAQAogfTsKIAogZXh0ZXJuIGludCBuZnNkX3Bvb2xfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitleHRlcm4gaW50IG5mc2RfcG9vbF9zdGF0c19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9vbF9zdGF0c19vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IG5mc2RfcG9vbF9zdGF0c19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBuZnNkX3Bvb2xfc3RhdHNfcmVsZWFzZSwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCkBAIC03NzYsMTAgKzc3Nyw3IEBACiAJCXNpemUgLT0gbGVuOwogCQltZXNnICs9IGxlbjsKIAl9Ci0KLQltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOwotCXJldHVybiAobWVzZy1idWYpOwotCisJcnYgPSBtZXNnIC0gYnVmOwogb3V0X2ZyZWU6CiAJa2ZyZWUobnRocmVhZHMpOwogCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2ZoLmMgYi9mcy9uZnNkL25mc2ZoLmMKaW5kZXggODg0N2YzZi4uMDE5NjViMiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNmaC5jCisrKyBiL2ZzL25mc2QvbmZzZmguYwpAQCAtMzk3LDQ0ICszOTcsNTEgQEAKIAkJZmgtPm9maF9kaXJpbm8gPSAwOwogfQogCi1fX2JlMzIKLWZoX2NvbXBvc2Uoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JICAgc3RydWN0IHN2Y19maCAqcmVmX2ZoKQorc3RhdGljIGJvb2wgaXNfcm9vdF9leHBvcnQoc3RydWN0IHN2Y19leHBvcnQgKmV4cCkKIHsKLQkvKiByZWZfZmggaXMgYSByZWZlcmVuY2UgZmlsZSBoYW5kbGUuCi0JICogaWYgaXQgaXMgbm9uLW51bGwgYW5kIGZvciB0aGUgc2FtZSBmaWxlc3lzdGVtLCB0aGVuIHdlIHNob3VsZCBjb21wb3NlCi0JICogYSBmaWxlaGFuZGxlIHdoaWNoIGlzIG9mIHRoZSBzYW1lIHZlcnNpb24sIHdoZXJlIHBvc3NpYmxlLgotCSAqIEN1cnJlbnRseSwgdGhhdCBtZWFucyB0aGF0IGlmIHJlZl9maC0+ZmhfaGFuZGxlLmZoX3ZlcnNpb24gPT0gMHhjYQotCSAqIFRoZW4gY3JlYXRlIGEgMzJieXRlIGZpbGVoYW5kbGUgdXNpbmcgbmZzX2ZoYmFzZV9vbGQKLQkgKgotCSAqLworCXJldHVybiBleHAtPmV4X3BhdGguZGVudHJ5ID09IGV4cC0+ZXhfcGF0aC5kZW50cnktPmRfc2ItPnNfcm9vdDsKK30KIAorc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZXhwX3NiKHN0cnVjdCBzdmNfZXhwb3J0ICpleHApCit7CisJcmV0dXJuIGV4cC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2I7Cit9CisKK3N0YXRpYyBib29sIGZzaWRfdHlwZV9va19mb3JfZXhwKHU4IGZzaWRfdHlwZSwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCkKK3sKKwlzd2l0Y2ggKGZzaWRfdHlwZSkgeworCWNhc2UgRlNJRF9ERVY6CisJCWlmICghb2xkX3ZhbGlkX2RldihleHBfc2IoZXhwKS0+c19kZXYpKQorCQkJcmV0dXJuIDA7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgRlNJRF9NQUpPUl9NSU5PUjoKKwljYXNlIEZTSURfRU5DT0RFX0RFVjoKKwkJcmV0dXJuIGV4cF9zYihleHApLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfUkVRVUlSRVNfREVWOworCWNhc2UgRlNJRF9OVU06CisJCXJldHVybiBleHAtPmV4X2ZsYWdzICYgTkZTRVhQX0ZTSUQ7CisJY2FzZSBGU0lEX1VVSUQ4OgorCWNhc2UgRlNJRF9VVUlEMTY6CisJCWlmICghaXNfcm9vdF9leHBvcnQoZXhwKSkKKwkJCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEZTSURfVVVJRDRfSU5VTToKKwljYXNlIEZTSURfVVVJRDE2X0lOVU06CisJCXJldHVybiBleHAtPmV4X3V1aWQgIT0gTlVMTDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3ZlcnNpb25fYW5kX2ZzaWRfdHlwZShzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBzdmNfZXhwb3J0ICpleHAsIHN0cnVjdCBzdmNfZmggKnJlZl9maCkKK3sKIAl1OCB2ZXJzaW9uOwotCXU4IGZzaWRfdHlwZSA9IDA7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQlfX3UzMiAqZGF0YXA7Ci0JZGV2X3QgZXhfZGV2ID0gZXhwLT5leF9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19kZXY7Ci0JaW50IHJvb3RfZXhwb3J0ID0gKGV4cC0+ZXhfcGF0aC5kZW50cnkgPT0gZXhwLT5leF9wYXRoLmRlbnRyeS0+ZF9zYi0+c19yb290KTsKLQotCWRwcmludGsoIm5mc2Q6IGZoX2NvbXBvc2UoZXhwICUwMng6JTAyeC8lbGQgJXMvJXMsIGlubz0lbGQpXG4iLAotCQlNQUpPUihleF9kZXYpLCBNSU5PUihleF9kZXYpLAotCQkobG9uZykgZXhwLT5leF9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCi0JCXBhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCShpbm9kZSA/IGlub2RlLT5pX2lubyA6IDApKTsKLQotCS8qIENob29zZSBmaWxlaGFuZGxlIHZlcnNpb24gYW5kIGZzaWQgdHlwZSBiYXNlZCBvbgotCSAqIHRoZSByZWZlcmVuY2UgZmlsZWhhbmRsZSAoaWYgaXQgaXMgaW4gdGhlIHNhbWUgZXhwb3J0KQotCSAqIG9yIHRoZSBleHBvcnQgb3B0aW9ucy4KLQkgKi8KLSByZXRyeToKKwl1OCBmc2lkX3R5cGU7CityZXRyeToKIAl2ZXJzaW9uID0gMTsKIAlpZiAocmVmX2ZoICYmIHJlZl9maC0+ZmhfZXhwb3J0ID09IGV4cCkgewogCQl2ZXJzaW9uID0gcmVmX2ZoLT5maF9oYW5kbGUuZmhfdmVyc2lvbjsKIAkJZnNpZF90eXBlID0gcmVmX2ZoLT5maF9oYW5kbGUuZmhfZnNpZF90eXBlOwogCi0JCWlmIChyZWZfZmggPT0gZmhwKQotCQkJZmhfcHV0KHJlZl9maCk7CiAJCXJlZl9maCA9IE5VTEw7CiAKIAkJc3dpdGNoICh2ZXJzaW9uKSB7CkBAIC00NDcsNTggKzQ1NCw2NiBAQAogCQkJZ290byByZXRyeTsKIAkJfQogCi0JCS8qIE5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIHR5cGUgd29ya3MgZm9yIHRoaXMKLQkJICogZXhwb3J0IHBvaW50LiAgQXMgdGhlIGZzaWQgLT4gZmlsZXN5c3RlbSBtYXBwaW5nCi0JCSAqIHdhcyBndWlkZWQgYnkgdXNlci1zcGFjZSwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlCi0JCSAqIHRoYXQgdGhlIGZpbGVzeXN0ZW0gYWN0dWFsbHkgc3VwcG9ydHMgdGhhdCBmc2lkCi0JCSAqIHR5cGUuIElmIGl0IGRvZXNuJ3Qgd2UgbG9vcCBhcm91bmQgYWdhaW4gd2l0aG91dAotCQkgKiByZWZfZmggc2V0LgorCQkvKgorCQkgKiBBcyB0aGUgZnNpZCAtPiBmaWxlc3lzdGVtIG1hcHBpbmcgd2FzIGd1aWRlZCBieQorCQkgKiB1c2VyLXNwYWNlLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgZmlsZXN5c3RlbQorCQkgKiBhY3R1YWxseSBzdXBwb3J0cyB0aGF0IGZzaWQgdHlwZS4gSWYgaXQgZG9lc24ndCB3ZQorCQkgKiBsb29wIGFyb3VuZCBhZ2FpbiB3aXRob3V0IHJlZl9maCBzZXQuCiAJCSAqLwotCQlzd2l0Y2goZnNpZF90eXBlKSB7Ci0JCWNhc2UgRlNJRF9ERVY6Ci0JCQlpZiAoIW9sZF92YWxpZF9kZXYoZXhfZGV2KSkKLQkJCQlnb3RvIHJldHJ5OwotCQkJLyogRkFMTCBUSFJPVUdIICovCi0JCWNhc2UgRlNJRF9NQUpPUl9NSU5PUjoKLQkJY2FzZSBGU0lEX0VOQ09ERV9ERVY6Ci0JCQlpZiAoIShleHAtPmV4X3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX3R5cGUtPmZzX2ZsYWdzCi0JCQkgICAgICAmIEZTX1JFUVVJUkVTX0RFVikpCi0JCQkJZ290byByZXRyeTsKLQkJCWJyZWFrOwotCQljYXNlIEZTSURfTlVNOgotCQkJaWYgKCEgKGV4cC0+ZXhfZmxhZ3MgJiBORlNFWFBfRlNJRCkpCi0JCQkJZ290byByZXRyeTsKLQkJCWJyZWFrOwotCQljYXNlIEZTSURfVVVJRDg6Ci0JCWNhc2UgRlNJRF9VVUlEMTY6Ci0JCQlpZiAoIXJvb3RfZXhwb3J0KQotCQkJCWdvdG8gcmV0cnk7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBGU0lEX1VVSUQ0X0lOVU06Ci0JCWNhc2UgRlNJRF9VVUlEMTZfSU5VTToKLQkJCWlmIChleHAtPmV4X3V1aWQgPT0gTlVMTCkKLQkJCQlnb3RvIHJldHJ5OwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKCFmc2lkX3R5cGVfb2tfZm9yX2V4cChmc2lkX3R5cGUsIGV4cCkpCisJCQlnb3RvIHJldHJ5OwogCX0gZWxzZSBpZiAoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9GU0lEKSB7CiAJCWZzaWRfdHlwZSA9IEZTSURfTlVNOwogCX0gZWxzZSBpZiAoZXhwLT5leF91dWlkKSB7CiAJCWlmIChmaHAtPmZoX21heHNpemUgPj0gNjQpIHsKLQkJCWlmIChyb290X2V4cG9ydCkKKwkJCWlmIChpc19yb290X2V4cG9ydChleHApKQogCQkJCWZzaWRfdHlwZSA9IEZTSURfVVVJRDE2OwogCQkJZWxzZQogCQkJCWZzaWRfdHlwZSA9IEZTSURfVVVJRDE2X0lOVU07CiAJCX0gZWxzZSB7Ci0JCQlpZiAocm9vdF9leHBvcnQpCisJCQlpZiAoaXNfcm9vdF9leHBvcnQoZXhwKSkKIAkJCQlmc2lkX3R5cGUgPSBGU0lEX1VVSUQ4OwogCQkJZWxzZQogCQkJCWZzaWRfdHlwZSA9IEZTSURfVVVJRDRfSU5VTTsKIAkJfQotCX0gZWxzZSBpZiAoIW9sZF92YWxpZF9kZXYoZXhfZGV2KSkKKwl9IGVsc2UgaWYgKCFvbGRfdmFsaWRfZGV2KGV4cF9zYihleHApLT5zX2RldikpCiAJCS8qIGZvciBuZXdlciBkZXZpY2UgbnVtYmVycywgd2UgbXVzdCB1c2UgYSBuZXdlciBmc2lkIGZvcm1hdCAqLwogCQlmc2lkX3R5cGUgPSBGU0lEX0VOQ09ERV9ERVY7CiAJZWxzZQogCQlmc2lkX3R5cGUgPSBGU0lEX0RFVjsKKwlmaHAtPmZoX2hhbmRsZS5maF92ZXJzaW9uID0gdmVyc2lvbjsKKwlpZiAodmVyc2lvbikKKwkJZmhwLT5maF9oYW5kbGUuZmhfZnNpZF90eXBlID0gZnNpZF90eXBlOworfQorCitfX2JlMzIKK2ZoX2NvbXBvc2Uoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJICAgc3RydWN0IHN2Y19maCAqcmVmX2ZoKQoreworCS8qIHJlZl9maCBpcyBhIHJlZmVyZW5jZSBmaWxlIGhhbmRsZS4KKwkgKiBpZiBpdCBpcyBub24tbnVsbCBhbmQgZm9yIHRoZSBzYW1lIGZpbGVzeXN0ZW0sIHRoZW4gd2Ugc2hvdWxkIGNvbXBvc2UKKwkgKiBhIGZpbGVoYW5kbGUgd2hpY2ggaXMgb2YgdGhlIHNhbWUgdmVyc2lvbiwgd2hlcmUgcG9zc2libGUuCisJICogQ3VycmVudGx5LCB0aGF0IG1lYW5zIHRoYXQgaWYgcmVmX2ZoLT5maF9oYW5kbGUuZmhfdmVyc2lvbiA9PSAweGNhCisJICogVGhlbiBjcmVhdGUgYSAzMmJ5dGUgZmlsZWhhbmRsZSB1c2luZyBuZnNfZmhiYXNlX29sZAorCSAqCisJICovCisKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCV9fdTMyICpkYXRhcDsKKwlkZXZfdCBleF9kZXYgPSBleHBfc2IoZXhwKS0+c19kZXY7CisKKwlkcHJpbnRrKCJuZnNkOiBmaF9jb21wb3NlKGV4cCAlMDJ4OiUwMngvJWxkICVzLyVzLCBpbm89JWxkKVxuIiwKKwkJTUFKT1IoZXhfZGV2KSwgTUlOT1IoZXhfZGV2KSwKKwkJKGxvbmcpIGV4cC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vLAorCQlwYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkoaW5vZGUgPyBpbm9kZS0+aV9pbm8gOiAwKSk7CisKKwkvKiBDaG9vc2UgZmlsZWhhbmRsZSB2ZXJzaW9uIGFuZCBmc2lkIHR5cGUgYmFzZWQgb24KKwkgKiB0aGUgcmVmZXJlbmNlIGZpbGVoYW5kbGUgKGlmIGl0IGlzIGluIHRoZSBzYW1lIGV4cG9ydCkKKwkgKiBvciB0aGUgZXhwb3J0IG9wdGlvbnMuCisJICovCisJIHNldF92ZXJzaW9uX2FuZF9mc2lkX3R5cGUoZmhwLCBleHAsIHJlZl9maCk7CiAKIAlpZiAocmVmX2ZoID09IGZocCkKIAkJZmhfcHV0KHJlZl9maCk7CkBAIC01MTYsNyArNTMxLDcgQEAKIAlmaHAtPmZoX2V4cG9ydCA9IGV4cDsKIAljYWNoZV9nZXQoJmV4cC0+aCk7CiAKLQlpZiAodmVyc2lvbiA9PSAweGNhKSB7CisJaWYgKGZocC0+ZmhfaGFuZGxlLmZoX3ZlcnNpb24gPT0gMHhjYSkgewogCQkvKiBvbGQgc3R5bGUgZmlsZWhhbmRsZSBwbGVhc2UgKi8KIAkJbWVtc2V0KCZmaHAtPmZoX2hhbmRsZS5maF9iYXNlLCAwLCBORlNfRkhTSVpFKTsKIAkJZmhwLT5maF9oYW5kbGUuZmhfc2l6ZSA9IE5GU19GSFNJWkU7CkBAIC01MzAsMjIgKzU0NSwyMiBAQAogCQkJX2ZoX3VwZGF0ZV9vbGQoZGVudHJ5LCBleHAsICZmaHAtPmZoX2hhbmRsZSk7CiAJfSBlbHNlIHsKIAkJaW50IGxlbjsKLQkJZmhwLT5maF9oYW5kbGUuZmhfdmVyc2lvbiA9IDE7CiAJCWZocC0+ZmhfaGFuZGxlLmZoX2F1dGhfdHlwZSA9IDA7CiAJCWRhdGFwID0gZmhwLT5maF9oYW5kbGUuZmhfYXV0aCswOwotCQlmaHAtPmZoX2hhbmRsZS5maF9mc2lkX3R5cGUgPSBmc2lkX3R5cGU7Ci0JCW1rX2ZzaWQoZnNpZF90eXBlLCBkYXRhcCwgZXhfZGV2LAorCQlta19mc2lkKGZocC0+ZmhfaGFuZGxlLmZoX2ZzaWRfdHlwZSwgZGF0YXAsIGV4X2RldiwKIAkJCWV4cC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vLAogCQkJZXhwLT5leF9mc2lkLCBleHAtPmV4X3V1aWQpOwogCi0JCWxlbiA9IGtleV9sZW4oZnNpZF90eXBlKTsKKwkJbGVuID0ga2V5X2xlbihmaHAtPmZoX2hhbmRsZS5maF9mc2lkX3R5cGUpOwogCQlkYXRhcCArPSBsZW4vNDsKIAkJZmhwLT5maF9oYW5kbGUuZmhfc2l6ZSA9IDQgKyBsZW47CiAKIAkJaWYgKGlub2RlKQogCQkJX2ZoX3VwZGF0ZShmaHAsIGV4cCwgZGVudHJ5KTsKLQkJaWYgKGZocC0+ZmhfaGFuZGxlLmZoX2ZpbGVpZF90eXBlID09IDI1NSkKKwkJaWYgKGZocC0+ZmhfaGFuZGxlLmZoX2ZpbGVpZF90eXBlID09IDI1NSkgeworCQkJZmhfcHV0KGZocCk7CiAJCQlyZXR1cm4gbmZzZXJyX29wbm90c3VwcDsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNjM5LDggKzY1NCw3IEBACiAJY2FzZSBGU0lEX0RFVjoKIAljYXNlIEZTSURfRU5DT0RFX0RFVjoKIAljYXNlIEZTSURfTUFKT1JfTUlOT1I6Ci0JCWlmIChmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfdHlwZS0+ZnNfZmxhZ3MKLQkJICAgICYgRlNfUkVRVUlSRVNfREVWKQorCQlpZiAoZXhwX3NiKGZocC0+ZmhfZXhwb3J0KS0+c190eXBlLT5mc19mbGFncyAmIEZTX1JFUVVJUkVTX0RFVikKIAkJCXJldHVybiBGU0lEU09VUkNFX0RFVjsKIAkJYnJlYWs7CiAJY2FzZSBGU0lEX05VTToKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IDI0ZDU4YWQuLjY3ZWE4M2UgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3lzY2FsbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNhY2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkJTkZTRERCR19TVkMKIApAQCAtNjYsNiArNjcsMTYgQEAKIERFRklORV9NVVRFWChuZnNkX211dGV4KTsKIHN0cnVjdCBzdmNfc2VydiAJCSpuZnNkX3NlcnY7CiAKKy8qCisgKiBuZnNkX2RyY19sb2NrIHByb3RlY3RzIG5mc2RfZHJjX21heF9wYWdlcyBhbmQgbmZzZF9kcmNfcGFnZXNfdXNlZC4KKyAqIG5mc2RfZHJjX21heF9wYWdlcyBsaW1pdHMgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIGZvcgorICogdmVyc2lvbiA0LjEgRFJDIGNhY2hlcy4KKyAqIG5mc2RfZHJjX3BhZ2VzX3VzZWQgdHJhY2tzIHRoZSBjdXJyZW50IHZlcnNpb24gNC4xIERSQyBtZW1vcnkgdXNhZ2UuCisgKi8KK3NwaW5sb2NrX3QJbmZzZF9kcmNfbG9jazsKK3Vuc2lnbmVkIGludAluZnNkX2RyY19tYXhfbWVtOwordW5zaWduZWQgaW50CW5mc2RfZHJjX21lbV91c2VkOworCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTRF9WMl9BQ0wpIHx8IGRlZmluZWQoQ09ORklHX05GU0RfVjNfQUNMKQogc3RhdGljIHN0cnVjdCBzdmNfc3RhdAluZnNkX2FjbF9zdmNzdGF0czsKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3ZlcnNpb24gKgluZnNkX2FjbF92ZXJzaW9uW10gPSB7CkBAIC0yMzUsMTMgKzI0NiwxMiBAQAogICovCiBzdGF0aWMgdm9pZCBzZXRfbWF4X2RyYyh2b2lkKQogewotCS8qIFRoZSBwZXJjZW50IG9mIG5yX2ZyZWVfYnVmZmVyX3BhZ2VzIHVzZWQgYnkgdGhlIFY0LjEgc2VydmVyIERSQyAqLwotCSNkZWZpbmUgTkZTRF9EUkNfU0laRV9TSElGVAk3Ci0JbmZzZF9zZXJ2LT5zdl9kcmNfbWF4X3BhZ2VzID0gbnJfZnJlZV9idWZmZXJfcGFnZXMoKQotCQkJCQkJPj4gTkZTRF9EUkNfU0laRV9TSElGVDsKLQluZnNkX3NlcnYtPnN2X2RyY19wYWdlc191c2VkID0gMDsKLQlkcHJpbnRrKCIlcyBzdmNfZHJjX21heF9wYWdlcyAldVxuIiwgX19mdW5jX18sCi0JCW5mc2Rfc2Vydi0+c3ZfZHJjX21heF9wYWdlcyk7CisJI2RlZmluZSBORlNEX0RSQ19TSVpFX1NISUZUCTEwCisJbmZzZF9kcmNfbWF4X21lbSA9IChucl9mcmVlX2J1ZmZlcl9wYWdlcygpCisJCQkJCT4+IE5GU0RfRFJDX1NJWkVfU0hJRlQpICogUEFHRV9TSVpFOworCW5mc2RfZHJjX21lbV91c2VkID0gMDsKKwlzcGluX2xvY2tfaW5pdCgmbmZzZF9kcmNfbG9jayk7CisJZHByaW50aygiJXMgbmZzZF9kcmNfbWF4X21lbSAldSBcbiIsIF9fZnVuY19fLCBuZnNkX2RyY19tYXhfbWVtKTsKIH0KIAogaW50IG5mc2RfY3JlYXRlX3NlcnYodm9pZCkKQEAgLTQwMSw3ICs0MTEsOSBAQAogCWVycm9yID0JbmZzZF9yYWNhY2hlX2luaXQoMipucnNlcnZzKTsKIAlpZiAoZXJyb3I8MCkKIAkJZ290byBvdXQ7Ci0JbmZzNF9zdGF0ZV9zdGFydCgpOworCWVycm9yID0gbmZzNF9zdGF0ZV9zdGFydCgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CiAKIAluZnNkX3Jlc2V0X3ZlcnNpb25zKCk7CiAKQEAgLTU2OSwxMCArNTgxLDYgQEAKIAkJKyBycXN0cC0+cnFfcmVzLmhlYWRbMF0uaW92X2xlbjsKIAlycXN0cC0+cnFfcmVzLmhlYWRbMF0uaW92X2xlbiArPSBzaXplb2YoX19iZTMyKTsKIAotCS8qIE5GU3Y0LjEgRFJDIHJlcXVpcmVzIHN0YXRwICovCi0JaWYgKHJxc3RwLT5ycV92ZXJzID09IDQpCi0JCW5mc2Q0X3NldF9zdGF0cChycXN0cCwgc3RhdHApOwotCiAJLyogTm93IGNhbGwgdGhlIHByb2NlZHVyZSBoYW5kbGVyLCBhbmQgZW5jb2RlIE5GUyBzdGF0dXMuICovCiAJbmZzZXJyID0gcHJvYy0+cGNfZnVuYyhycXN0cCwgcnFzdHAtPnJxX2FyZ3AsIHJxc3RwLT5ycV9yZXNwKTsKIAluZnNlcnIgPSBtYXBfbmV3X2Vycm9ycyhycXN0cC0+cnFfdmVycywgbmZzZXJyKTsKQEAgLTYwNyw3ICs2MTUsMjUgQEAKIAogaW50IG5mc2RfcG9vbF9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWlmIChuZnNkX3NlcnYgPT0gTlVMTCkKKwlpbnQgcmV0OworCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOworCWlmIChuZnNkX3NlcnYgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gc3ZjX3Bvb2xfc3RhdHNfb3BlbihuZnNkX3NlcnYsIGZpbGUpOworCX0KKwkvKiBidW1wIHVwIHRoZSBwc3VkbyByZWZjb3VudCB3aGlsZSB0cmF2ZXJzaW5nICovCisJc3ZjX2dldChuZnNkX3NlcnYpOworCXJldCA9IHN2Y19wb29sX3N0YXRzX29wZW4obmZzZF9zZXJ2LCBmaWxlKTsKKwltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBuZnNkX3Bvb2xfc3RhdHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0ID0gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOworCS8qIHRoaXMgZnVuY3Rpb24gcmVhbGx5LCByZWFsbHkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgc3ZjX3B1dCgpICovCisJc3ZjX2Rlc3Ryb3kobmZzZF9zZXJ2KTsKKwltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCA4ZmEwOWJmLi5hMjkzZjAyIDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTg5LDYgKzg5LDEyIEBACiAjZGVmaW5lIFJBUEFSTV9IQVNIX01BU0sJKFJBUEFSTV9IQVNIX1NJWkUtMSkKIHN0YXRpYyBzdHJ1Y3QgcmFwYXJtX2hidWNrZXQJcmFwYXJtX2hhc2hbUkFQQVJNX0hBU0hfU0laRV07CiAKK3N0YXRpYyBpbmxpbmUgaW50CituZnNkX3Y0Y2xpZW50KHN0cnVjdCBzdmNfcnFzdCAqcnEpCit7CisgICAgcmV0dXJuIHJxLT5ycV9wcm9nID09IE5GU19QUk9HUkFNICYmIHJxLT5ycV92ZXJzID09IDQ7Cit9CisKIC8qIAogICogQ2FsbGVkIGZyb20gbmZzZF9sb29rdXAgYW5kIGVuY29kZV9kaXJlbnQuIENoZWNrIGlmIHdlIGhhdmUgY3Jvc3NlZCAKICAqIGEgbW91bnQgcG9pbnQuCkBAIC0xMTUsNyArMTIxLDggQEAKIAkJcGF0aF9wdXQoJnBhdGgpOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKChleHAtPmV4X2ZsYWdzICYgTkZTRVhQX0NST1NTTU9VTlQpIHx8IEVYX05PSElERShleHAyKSkgeworCWlmIChuZnNkX3Y0Y2xpZW50KHJxc3RwKSB8fAorCQkoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9DUk9TU01PVU5UKSB8fCBFWF9OT0hJREUoZXhwMikpIHsKIAkJLyogc3VjY2Vzc2Z1bGx5IGNyb3NzZWQgbW91bnQgcG9pbnQgKi8KIAkJLyoKIAkJICogVGhpcyBpcyBzdWJ0bGU6IHBhdGguZGVudHJ5IGlzICpub3QqIG9uIHBhdGgubW50CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggYzY2OGJjYS4uNmEyNzExZiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtNDYsNyArNDYsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZidG5jLT5pX21tYXBfbm9ubGluZWFyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0gewogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2ZpbGUuYyBiL2ZzL25pbGZzMi9maWxlLmMKaW5kZXggNmJkODRhMC4uZmM4Mjc4YyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2ZpbGUuYworKysgYi9mcy9uaWxmczIvZmlsZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnRydW5jYXRlCT0gbmlsZnNfdHJ1bmNhdGUsCiAJLnNldGF0dHIJPSBuaWxmc19zZXRhdHRyLAogCS5wZXJtaXNzaW9uICAgICA9IG5pbGZzX3Blcm1pc3Npb24sCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZ2Npbm9kZS5jIGIvZnMvbmlsZnMyL2djaW5vZGUuYwppbmRleCAxYjNjMmJiLi5lNmRlMGEyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZ2Npbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9nY2lub2RlLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJkYXQuaCIKICNpbmNsdWRlICJpZmlsZS5oIgogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBkZWZfZ2Npbm9kZV9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2djaW5vZGVfYW9wcyA9IHsKIAkuc3luY19wYWdlCQk9IGJsb2NrX3N5bmNfcGFnZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pbm9kZS5jIGIvZnMvbmlsZnMyL2lub2RlLmMKaW5kZXggODA3ZTU4NC4uMmQyYzUwMSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lub2RlLmMKKysrIGIvZnMvbmlsZnMyL2lub2RlLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCXJldHVybiBzaXplOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5pbGZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5pbGZzX2FvcHMgPSB7CiAJLndyaXRlcGFnZQkJPSBuaWxmc193cml0ZXBhZ2UsCiAJLnJlYWRwYWdlCQk9IG5pbGZzX3JlYWRwYWdlLAogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5jIGIvZnMvbmlsZnMyL21kdC5jCmluZGV4IDE1NmJmNjAuLmIxOGM0OTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9tZHQuYworKysgYi9mcy9uaWxmczIvbWR0LmMKQEAgLTQyNywxMiArNDI3LDEyIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX21kdF9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX21kdF9hb3BzID0gewogCS53cml0ZXBhZ2UJCT0gbmlsZnNfbWR0X3dyaXRlX3BhZ2UsCiAJLnN5bmNfcGFnZQkJPSBibG9ja19zeW5jX3BhZ2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGVmX21kdF9pb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRlZl9tZHRfaW9wczsKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9tZHRfZm9wczsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9uYW1laS5jIGIvZnMvbmlsZnMyL25hbWVpLmMKaW5kZXggZGY3MGRhZC4uZWQwMmU4OCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL25hbWVpLmMKKysrIGIvZnMvbmlsZnMyL25hbWVpLmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmNyZWF0ZQkJPSBuaWxmc19jcmVhdGUsCiAJLmxvb2t1cAkJPSBuaWxmc19sb29rdXAsCiAJLmxpbmsJCT0gbmlsZnNfbGluaywKQEAgLTQ2MiwxMiArNDYyLDEyIEBACiAJLnBlcm1pc3Npb24JPSBuaWxmc19wZXJtaXNzaW9uLAogfTsKIAotc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gbmlsZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IG5pbGZzX3Blcm1pc3Npb24sCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKIAkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAogCS5wdXRfbGluawk9IHBhZ2VfcHV0X2xpbmssCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmlsZnMuaCBiL2ZzL25pbGZzMi9uaWxmcy5oCmluZGV4IDcyNGM2MzcuLmJhZDczNjggMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi9uaWxmcy5oCkBAIC0yOTUsMTIgKzI5NSwxMiBAQAogICogSW5vZGVzIGFuZCBmaWxlcyBvcGVyYXRpb25zCiAgKi8KIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuaWxmc19hb3BzOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuaWxmc19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAKIC8qCiAgKiBmaWxlc3lzdGVtIHR5cGUKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zdXBlci5jIGIvZnMvbmlsZnMyL3N1cGVyLmMKaW5kZXggNTVmM2Q2Yi4uNjQ0ZTY2NyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3N1cGVyLmMKKysrIGIvZnMvbmlsZnMyL3N1cGVyLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbmlsZnNfc29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuaWxmc19zb3BzID0gewogCS5hbGxvY19pbm9kZSAgICA9IG5pbGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlICA9IG5pbGZzX2Rlc3Ryb3lfaW5vZGUsCiAJLmRpcnR5X2lub2RlICAgID0gbmlsZnNfZGlydHlfaW5vZGUsCkBAIC01NjAsNyArNTYwLDcgQEAKIAkJCQkgICAgbmlsZnNfbmZzX2dldF9pbm9kZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgbmlsZnNfZXhwb3J0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgbmlsZnNfZXhwb3J0X29wcyA9IHsKIAkuZmhfdG9fZGVudHJ5ID0gbmlsZnNfZmhfdG9fZGVudHJ5LAogCS5maF90b19wYXJlbnQgPSBuaWxmc19maF90b19wYXJlbnQsCiAJLmdldF9wYXJlbnQgPSBuaWxmc19nZXRfcGFyZW50LApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCA0MzUwZDQ5Li42NjNjMGUzIDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYworKysgYi9mcy9udGZzL2ZpbGUuYwpAQCAtMjE0Niw0NiArMjE0Niw2IEBACiB9CiAKIC8qKgotICogbnRmc19maWxlX3dyaXRldiAtCi0gKgotICogQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGdlbmVyaWNfZmlsZV93cml0ZXYoKSBleGNlcHQgdGhhdCBpdCBlbmRzIHVwIGNhbGxpbmcKLSAqIG50ZnNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKCkgaW5zdGVhZCBvZiBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKCkuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZXYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQlzdHJ1Y3Qga2lvY2Iga2lvY2I7Ci0Jc3NpemVfdCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlsZSk7Ci0JcmV0ID0gbnRmc19maWxlX2Fpb193cml0ZV9ub2xvY2soJmtpb2NiLCBpb3YsIG5yX3NlZ3MsIHBwb3MpOwotCWlmIChyZXQgPT0gLUVJT0NCUVVFVUVEKQotCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmtpb2NiKTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAocmV0ID4gMCkgewotCQlpbnQgZXJyID0gZ2VuZXJpY193cml0ZV9zeW5jKGZpbGUsICpwcG9zIC0gcmV0LCByZXQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldCA9IGVycjsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBudGZzX2ZpbGVfd3JpdGUgLSBzaW1wbGUgd3JhcHBlciBmb3IgbnRmc19maWxlX3dyaXRldigpCi0gKi8KLXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGlvdmVjIGxvY2FsX2lvdiA9IHsgLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYnVmLAotCQkJCSAgIC5pb3ZfbGVuID0gY291bnQgfTsKLQotCXJldHVybiBudGZzX2ZpbGVfd3JpdGV2KGZpbGUsICZsb2NhbF9pb3YsIDEsIHBwb3MpOwotfQotCi0vKioKICAqIG50ZnNfZmlsZV9mc3luYyAtIHN5bmMgYSBmaWxlIHRvIGRpc2sKICAqIEBmaWxwOglmaWxlIHRvIGJlIHN5bmNlZAogICogQGRlbnRyeToJZGVudHJ5IGRlc2NyaWJpbmcgdGhlIGZpbGUgdG8gc3luYwpAQCAtMjI0Nyw3ICsyMjA3LDcgQEAKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCQkgLyogUmVhZCBmcm9tIGZpbGUuICovCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLCAvKiBBc3luYyByZWFkIGZyb20gZmlsZS4gKi8KICNpZmRlZiBOVEZTX1JXCi0JLndyaXRlCQk9IG50ZnNfZmlsZV93cml0ZSwJIC8qIFdyaXRlIHRvIGZpbGUuICovCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCSAvKiBXcml0ZSB0byBmaWxlLiAqLwogCS5haW9fd3JpdGUJPSBudGZzX2ZpbGVfYWlvX3dyaXRlLAkgLyogQXN5bmMgd3JpdGUgdG8gZmlsZS4gKi8KIAkvKi5yZWxlYXNlCT0gLCovCQkJIC8qIExhc3QgZmlsZSBpcyBjbG9zZWQuICBTZWUKIAkJCQkJCSAgICBmcy9leHQyL2ZpbGUuYzo6CmRpZmYgLS1naXQgYS9mcy9udGZzL2xheW91dC5oIGIvZnMvbnRmcy9sYXlvdXQuaAppbmRleCA1MDkzMWIxLi44YjI1NDlmIDEwMDY0NAotLS0gYS9mcy9udGZzL2xheW91dC5oCisrKyBiL2ZzL250ZnMvbGF5b3V0LmgKQEAgLTgyOSw3ICs4MjksNyBAQAogCS8qIE5vdGUsIEZJTEVfQVRUUl9WQUxJRF9TRVRfRkxBR1MgbWFza3Mgb3V0IHRoZSBvbGQgRE9TIFZvbElkLCB0aGUKIAkgICBGX0FfREVWSUNFLCBGX0FfRElSRUNUT1JZLCBGX0FfU1BBUlNFX0ZJTEUsIEZfQV9SRVBBUlNFX1BPSU5ULAogCSAgIEZfQV9DT01QUkVTU0VELCBhbmQgRl9BX0VOQ1JZUFRFRCBhbmQgcHJlc2VydmVzIHRoZSByZXN0LiAgVGhpcyBtYXNrCi0JICAgaXMgdXNlZCB0byB0byBvYnRhaW4gYWxsIGZsYWdzIHRoYXQgYXJlIHZhbGlkIGZvciBzZXR0aW5nLiAqLworCSAgIGlzIHVzZWQgdG8gb2J0YWluIGFsbCBmbGFncyB0aGF0IGFyZSB2YWxpZCBmb3Igc2V0dGluZy4gKi8KIAkvKgogCSAqIFRoZSBmbGFnIEZJTEVfQVRUUl9EVVBfRklMRU5BTUVfSU5ERVhfUFJFU0VOVCBpcyBwcmVzZW50IGluIGFsbAogCSAqIEZJTEVOQU1FX0FUVFIgYXR0cmlidXRlcyBidXQgbm90IGluIHRoZSBTVEFOREFSRF9JTkZPUk1BVElPTgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9tYWxsb2MuaCBiL2ZzL250ZnMvbWFsbG9jLmgKaW5kZXggY2QwYmUzZi4uYTQ0YjE0YyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9tYWxsb2MuaAorKysgYi9mcy9udGZzL21hbGxvYy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAJCXJldHVybiBrbWFsbG9jKFBBR0VfU0laRSwgZ2ZwX21hc2sgJiB+X19HRlBfSElHSE1FTSk7CiAJCS8qIHJldHVybiAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzayk7ICovCiAJfQotCWlmIChsaWtlbHkoc2l6ZSA+PiBQQUdFX1NISUZUIDwgbnVtX3BoeXNwYWdlcykpCisJaWYgKGxpa2VseSgoc2l6ZSA+PiBQQUdFX1NISUZUKSA8IHRvdGFscmFtX3BhZ2VzKSkKIAkJcmV0dXJuIF9fdm1hbGxvYyhzaXplLCBnZnBfbWFzaywgUEFHRV9LRVJORUwpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvTWFrZWZpbGUgYi9mcy9vY2ZzMi9NYWtlZmlsZQppbmRleCAwMTU5NjA3Li4zMWYyNWNlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogCWxvY2tzLm8JCQlcCiAJbW1hcC5vIAkJCVwKIAluYW1laS5vIAkJXAorCXJlZmNvdW50dHJlZS5vCQlcCiAJcmVzaXplLm8JCVwKIAlzbG90X21hcC5vIAkJXAogCXN1YmFsbG9jLm8gCQlcCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCBhYjUxM2RkLi4zOGE0MmY1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTQ5LDEwICs0OSwyMSBAQAogI2luY2x1ZGUgInN1cGVyLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgorI2luY2x1ZGUgInJlZmNvdW50dHJlZS5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIAorZW51bSBvY2ZzMl9jb250aWdfdHlwZSB7CisJQ09OVElHX05PTkUgPSAwLAorCUNPTlRJR19MRUZULAorCUNPTlRJR19SSUdIVCwKKwlDT05USUdfTEVGVFJJR0hULAorfTsKIAorc3RhdGljIGVudW0gb2NmczJfY29udGlnX3R5cGUKKwlvY2ZzMl9leHRlbnRfcmVjX2NvbnRpZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpleHQsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpOwogLyoKICAqIE9wZXJhdGlvbnMgZm9yIGEgc3BlY2lmaWMgZXh0ZW50IHRyZWUgdHlwZS4KICAqCkBAIC03OSwxOCArOTAsMzAgQEAKIAkgKiB0aGF0IHZhbHVlLiAgbmV3X2NsdXN0ZXJzIGlzIHRoZSBkZWx0YSwgYW5kIG11c3QgYmUKIAkgKiBhZGRlZCB0byB0aGUgdG90YWwuICBSZXF1aXJlZC4KIAkgKi8KLQl2b2lkICgqZW9fdXBkYXRlX2NsdXN0ZXJzKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJdm9pZCAoKmVvX3VwZGF0ZV9jbHVzdGVycykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICB1MzIgbmV3X2NsdXN0ZXJzKTsKIAogCS8qCisJICogSWYgdGhpcyBleHRlbnQgdHJlZSBpcyBzdXBwb3J0ZWQgYnkgYW4gZXh0ZW50IG1hcCwgaW5zZXJ0CisJICogYSByZWNvcmQgaW50byB0aGUgbWFwLgorCSAqLworCXZvaWQgKCplb19leHRlbnRfbWFwX2luc2VydCkoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOworCisJLyoKKwkgKiBJZiB0aGlzIGV4dGVudCB0cmVlIGlzIHN1cHBvcnRlZCBieSBhbiBleHRlbnQgbWFwLCB0cnVuY2F0ZSB0aGUKKwkgKiBtYXAgdG8gY2x1c3RlcnMsCisJICovCisJdm9pZCAoKmVvX2V4dGVudF9tYXBfdHJ1bmNhdGUpKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICAgIHUzMiBjbHVzdGVycyk7CisKKwkvKgogCSAqIElmIC0+ZW9faW5zZXJ0X2NoZWNrKCkgZXhpc3RzLCBpdCBpcyBjYWxsZWQgYmVmb3JlIHJlYyBpcwogCSAqIGluc2VydGVkIGludG8gdGhlIGV4dGVudCB0cmVlLiAgSXQgaXMgb3B0aW9uYWwuCiAJICovCi0JaW50ICgqZW9faW5zZXJ0X2NoZWNrKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJaW50ICgqZW9faW5zZXJ0X2NoZWNrKShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOwotCWludCAoKmVvX3Nhbml0eV9jaGVjaykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisJaW50ICgqZW9fc2FuaXR5X2NoZWNrKShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKIAogCS8qCiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwOSw4ICsxMzIsMTcgQEAKIAkgKiBpdCBleGlzdHMuICBJZiBpdCBkb2VzIG5vdCwgZXQtPmV0X21heF9sZWFmX2NsdXN0ZXJzIGlzIHNldAogCSAqIHRvIDAgKHVubGltaXRlZCkuICBPcHRpb25hbC4KIAkgKi8KLQl2b2lkICgqZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycykoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKKwl2b2lkICgqZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisKKwkvKgorCSAqIC0+ZW9fZXh0ZW50X2NvbnRpZyB0ZXN0IHdoZXRoZXIgdGhlIDIgb2NmczJfZXh0ZW50X3JlYworCSAqIGFyZSBjb250aWd1b3VzIG9yIG5vdC4gT3B0aW9uYWwuIERvbid0IG5lZWQgdG8gc2V0IGl0IGlmIHVzZQorCSAqIG9jZnMyX2V4dGVudF9yZWMgYXMgdGhlIHRyZWUgbGVhZi4KKwkgKi8KKwllbnVtIG9jZnMyX2NvbnRpZ190eXBlCisJCSgqZW9fZXh0ZW50X2NvbnRpZykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmV4dCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpOwogfTsKIAogCkBAIC0xMjEsMTkgKzE1MywyMiBAQAogc3RhdGljIHU2NCBvY2ZzMl9kaW5vZGVfZ2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOwogc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX3NldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCQkgdTY0IGJsa25vKTsKLXN0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSB1MzIgY2x1c3RlcnMpOwotc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfaW5zZXJ0KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgICB1MzIgY2x1c3RlcnMpOworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKTsKLXN0YXRpYyBpbnQgb2NmczJfZGlub2RlX3Nhbml0eV9jaGVjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CitzdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CiBzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOwogc3RhdGljIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIG9jZnMyX2Rpbm9kZV9ldF9vcHMgPSB7CiAJLmVvX3NldF9sYXN0X2ViX2Jsawk9IG9jZnMyX2Rpbm9kZV9zZXRfbGFzdF9lYl9ibGssCiAJLmVvX2dldF9sYXN0X2ViX2Jsawk9IG9jZnMyX2Rpbm9kZV9nZXRfbGFzdF9lYl9ibGssCiAJLmVvX3VwZGF0ZV9jbHVzdGVycwk9IG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMsCisJLmVvX2V4dGVudF9tYXBfaW5zZXJ0CT0gb2NmczJfZGlub2RlX2V4dGVudF9tYXBfaW5zZXJ0LAorCS5lb19leHRlbnRfbWFwX3RydW5jYXRlCT0gb2NmczJfZGlub2RlX2V4dGVudF9tYXBfdHJ1bmNhdGUsCiAJLmVvX2luc2VydF9jaGVjawk9IG9jZnMyX2Rpbm9kZV9pbnNlcnRfY2hlY2ssCiAJLmVvX3Nhbml0eV9jaGVjawk9IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2ssCiAJLmVvX2ZpbGxfcm9vdF9lbAk9IG9jZnMyX2Rpbm9kZV9maWxsX3Jvb3RfZWwsCkBAIC0xNTYsNDAgKzE5MSw1MyBAQAogCXJldHVybiBsZTY0X3RvX2NwdShkaS0+aV9sYXN0X2ViX2Jsayk7CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSB1MzIgY2x1c3RlcnMpCiB7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gY2FjaGVfaW5mb190b19pbm9kZShldC0+ZXRfY2kpOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gZXQtPmV0X29iamVjdDsKIAogCWxlMzJfYWRkX2NwdSgmZGktPmlfY2x1c3RlcnMsIGNsdXN0ZXJzKTsKLQlzcGluX2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKLQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShkaS0+aV9jbHVzdGVycyk7Ci0Jc3Bpbl91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShkaS0+aV9jbHVzdGVycyk7CisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfaW5zZXJ0KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZjYWNoZV9pbmZvX3RvX2lub2RlKGV0LT5ldF9jaSktPnZmc19pbm9kZTsKKworCW9jZnMyX2V4dGVudF9tYXBfaW5zZXJ0X3JlYyhpbm9kZSwgcmVjKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgICB1MzIgY2x1c3RlcnMpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZjYWNoZV9pbmZvX3RvX2lub2RlKGV0LT5ldF9jaSktPnZmc19pbm9kZTsKKworCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIGNsdXN0ZXJzKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKQogewotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IGNhY2hlX2luZm9fdG9faW5vZGUoZXQtPmV0X2NpKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKG9pLT52ZnNfaW5vZGUuaV9zYik7CiAKLQlCVUdfT04oT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKTsKKwlCVUdfT04ob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKTsKIAltbG9nX2J1Z19vbl9tc2coIW9jZnMyX3NwYXJzZV9hbGxvYyhvc2IpICYmCi0JCQkoT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzICE9Ci0JCQkgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpKSwKKwkJCShvaS0+aXBfY2x1c3RlcnMgIT0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpKSwKIAkJCSJEZXZpY2UgJXMsIGFza2luZyBmb3Igc3BhcnNlIGFsbG9jYXRpb246IGlub2RlICVsbHUsICIKIAkJCSJjcG9zICV1LCBjbHVzdGVycyAldVxuIiwKIAkJCW9zYi0+ZGV2X3N0ciwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJcmVjLT5lX2Nwb3MsCi0JCQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpOworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJCQlyZWMtPmVfY3Bvcywgb2ktPmlwX2NsdXN0ZXJzKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCitzdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IGV0LT5ldF9vYmplY3Q7CiAKQEAgLTIyOSw4ICsyNzcsNyBAQAogCXJldHVybiBsZTY0X3RvX2NwdSh2Yi0+dmJfeHYtPnhyX2xhc3RfZWJfYmxrKTsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdmFsdWVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl92YWx1ZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJICAgICAgdTMyIGNsdXN0ZXJzKQogewogCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiID0gZXQtPmV0X29iamVjdDsKQEAgLTI1MiwxMiArMjk5LDExIEBACiAJZXQtPmV0X3Jvb3RfZWwgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3QueHRfbGlzdDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV9maWxsX21heF9sZWFmX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3RyZWVfZmlsbF9tYXhfbGVhZl9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogeworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAlldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgPQotCQlvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoaW5vZGUtPmlfc2IsCi0JCQkJCSBPQ0ZTMl9NQVhfWEFUVFJfVFJFRV9MRUFGX1NJWkUpOworCQlvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc2IsIE9DRlMyX01BWF9YQVRUUl9UUkVFX0xFQUZfU0laRSk7CiB9CiAKIHN0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3RyZWVfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCkBAIC0yNzcsOCArMzIzLDcgQEAKIAlyZXR1cm4gbGU2NF90b19jcHUoeHQtPnh0X2xhc3RfZWJfYmxrKTsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJICAgICB1MzIgY2x1c3RlcnMpCiB7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9IGV0LT5ldF9vYmplY3Q7CkBAIC0zMDksOCArMzU0LDcgQEAKIAlyZXR1cm4gbGU2NF90b19jcHUoZHhfcm9vdC0+ZHJfbGFzdF9lYl9ibGspOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9keF9yb290X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9yb290X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCQkgIHUzMiBjbHVzdGVycykKIHsKIAlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCA9IGV0LT5ldF9vYmplY3Q7CkBAIC0zMTgsOCArMzYyLDcgQEAKIAlsZTMyX2FkZF9jcHUoJmR4X3Jvb3QtPmRyX2NsdXN0ZXJzLCBjbHVzdGVycyk7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZHhfcm9vdF9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQorc3RhdGljIGludCBvY2ZzMl9keF9yb290X3Nhbml0eV9jaGVjayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290ID0gZXQtPmV0X29iamVjdDsKIApAQCAtMzQzLDggKzM4Niw1NCBAQAogCS5lb19maWxsX3Jvb3RfZWwJPSBvY2ZzMl9keF9yb290X2ZpbGxfcm9vdF9lbCwKIH07CiAKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X3RyZWVfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9IGV0LT5ldF9vYmplY3Q7CisKKwlldC0+ZXRfcm9vdF9lbCA9ICZyYi0+cmZfbGlzdDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfcmVmY291bnRfdHJlZV9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJCXU2NCBibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0gZXQtPmV0X29iamVjdDsKKworCXJiLT5yZl9sYXN0X2ViX2JsayA9IGNwdV90b19sZTY0KGJsa25vKTsKK30KKworc3RhdGljIHU2NCBvY2ZzMl9yZWZjb3VudF90cmVlX2dldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPSBldC0+ZXRfb2JqZWN0OworCisJcmV0dXJuIGxlNjRfdG9fY3B1KHJiLT5yZl9sYXN0X2ViX2Jsayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X3RyZWVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCQl1MzIgY2x1c3RlcnMpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9IGV0LT5ldF9vYmplY3Q7CisKKwlsZTMyX2FkZF9jcHUoJnJiLT5yZl9jbHVzdGVycywgY2x1c3RlcnMpOworfQorCitzdGF0aWMgZW51bSBvY2ZzMl9jb250aWdfdHlwZQorb2NmczJfcmVmY291bnRfdHJlZV9leHRlbnRfY29udGlnKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqZXh0LAorCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpCit7CisJcmV0dXJuIENPTlRJR19OT05FOworfQorCitzdGF0aWMgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgb2NmczJfcmVmY291bnRfdHJlZV9ldF9vcHMgPSB7CisJLmVvX3NldF9sYXN0X2ViX2Jsawk9IG9jZnMyX3JlZmNvdW50X3RyZWVfc2V0X2xhc3RfZWJfYmxrLAorCS5lb19nZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl9yZWZjb3VudF90cmVlX2dldF9sYXN0X2ViX2JsaywKKwkuZW9fdXBkYXRlX2NsdXN0ZXJzCT0gb2NmczJfcmVmY291bnRfdHJlZV91cGRhdGVfY2x1c3RlcnMsCisJLmVvX2ZpbGxfcm9vdF9lbAk9IG9jZnMyX3JlZmNvdW50X3RyZWVfZmlsbF9yb290X2VsLAorCS5lb19leHRlbnRfY29udGlnCT0gb2NmczJfcmVmY291bnRfdHJlZV9leHRlbnRfY29udGlnLAorfTsKKwogc3RhdGljIHZvaWQgX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgICAgb2NmczJfam91cm5hbF9hY2Nlc3NfZnVuYyBhY2Nlc3MsCiAJCQkJICAgICB2b2lkICpvYmosCkBAIC0zNTIsNiArNDQxLDcgQEAKIHsKIAlldC0+ZXRfb3BzID0gb3BzOwogCWV0LT5ldF9yb290X2JoID0gYmg7CisJZXQtPmV0X2NpID0gY2k7CiAJZXQtPmV0X3Jvb3Rfam91cm5hbF9hY2Nlc3MgPSBhY2Nlc3M7CiAJaWYgKCFvYmopCiAJCW9iaiA9ICh2b2lkICopYmgtPmJfZGF0YTsKQEAgLTM2MSw0MSArNDUxLDQ5IEBACiAJaWYgKCFldC0+ZXRfb3BzLT5lb19maWxsX21heF9sZWFmX2NsdXN0ZXJzKQogCQlldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgPSAwOwogCWVsc2UKLQkJZXQtPmV0X29wcy0+ZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycyhpbm9kZSwgZXQpOworCQlldC0+ZXRfb3BzLT5lb19maWxsX21heF9sZWFmX2NsdXN0ZXJzKGV0KTsKIH0KIAogdm9pZCBvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGlub2RlLCBiaCwgb2NmczJfam91cm5hbF9hY2Nlc3NfZGksCisJX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBjaSwgYmgsIG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpLAogCQkJCSBOVUxMLCAmb2NmczJfZGlub2RlX2V0X29wcyk7CiB9CiAKIHZvaWQgb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgaW5vZGUsIGJoLCBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YiwKKwlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGNpLCBiaCwgb2NmczJfam91cm5hbF9hY2Nlc3NfeGIsCiAJCQkJIE5VTEwsICZvY2ZzMl94YXR0cl90cmVlX2V0X29wcyk7CiB9CiAKIHZvaWQgb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIpCiB7Ci0JX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBpbm9kZSwgdmItPnZiX2JoLCB2Yi0+dmJfYWNjZXNzLCB2YiwKKwlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGNpLCB2Yi0+dmJfYmgsIHZiLT52Yl9hY2Nlc3MsIHZiLAogCQkJCSAmb2NmczJfeGF0dHJfdmFsdWVfZXRfb3BzKTsKIH0KIAogdm9pZCBvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKLQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBpbm9kZSwgYmgsIG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyLAorCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgY2ksIGJoLCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kciwKIAkJCQkgTlVMTCwgJm9jZnMyX2R4X3Jvb3RfZXRfb3BzKTsKIH0KIAordm9pZCBvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBjaSwgYmgsIG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiLAorCQkJCSBOVUxMLCAmb2NmczJfcmVmY291bnRfdHJlZV9ldF9vcHMpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfZXRfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgICB1NjQgbmV3X2xhc3RfZWJfYmxrKQogewpAQCAtNDA3LDc4ICs1MDUsNzEgQEAKIAlyZXR1cm4gZXQtPmV0X29wcy0+ZW9fZ2V0X2xhc3RfZWJfYmxrKGV0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2V0X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJICAgIHUzMiBjbHVzdGVycykKIHsKLQlldC0+ZXRfb3BzLT5lb191cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LCBjbHVzdGVycyk7CisJZXQtPmV0X29wcy0+ZW9fdXBkYXRlX2NsdXN0ZXJzKGV0LCBjbHVzdGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF9leHRlbnRfbWFwX2luc2VydChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKQoreworCWlmIChldC0+ZXRfb3BzLT5lb19leHRlbnRfbWFwX2luc2VydCkKKwkJZXQtPmV0X29wcy0+ZW9fZXh0ZW50X21hcF9pbnNlcnQoZXQsIHJlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF9leHRlbnRfbWFwX3RydW5jYXRlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCQl1MzIgY2x1c3RlcnMpCit7CisJaWYgKGV0LT5ldF9vcHMtPmVvX2V4dGVudF9tYXBfdHJ1bmNhdGUpCisJCWV0LT5ldF9vcHMtPmVvX2V4dGVudF9tYXBfdHJ1bmNhdGUoZXQsIGNsdXN0ZXJzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgICAgICBpbnQgdHlwZSkKIHsKLQlyZXR1cm4gZXQtPmV0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQtPmV0X3Jvb3RfYmgsCisJcmV0dXJuIGV0LT5ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCBldC0+ZXRfcm9vdF9iaCwKIAkJCQkJICB0eXBlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgaW5saW5lIGVudW0gb2NmczJfY29udGlnX3R5cGUKKwlvY2ZzMl9ldF9leHRlbnRfY29udGlnKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYywKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYykKK3sKKwlpZiAoZXQtPmV0X29wcy0+ZW9fZXh0ZW50X2NvbnRpZykKKwkJcmV0dXJuIGV0LT5ldF9vcHMtPmVvX2V4dGVudF9jb250aWcoZXQsIHJlYywgaW5zZXJ0X3JlYyk7CisKKwlyZXR1cm4gb2NmczJfZXh0ZW50X3JlY19jb250aWcoCisJCQkJb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJcmVjLCBpbnNlcnRfcmVjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfaW5zZXJ0X2NoZWNrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZXQtPmV0X29wcy0+ZW9faW5zZXJ0X2NoZWNrKQotCQlyZXQgPSBldC0+ZXRfb3BzLT5lb19pbnNlcnRfY2hlY2soaW5vZGUsIGV0LCByZWMpOworCQlyZXQgPSBldC0+ZXRfb3BzLT5lb19pbnNlcnRfY2hlY2soZXQsIHJlYyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfc2FuaXR5X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9ldF9zYW5pdHlfY2hlY2soc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChldC0+ZXRfb3BzLT5lb19zYW5pdHlfY2hlY2spCi0JCXJldCA9IGV0LT5ldF9vcHMtPmVvX3Nhbml0eV9jaGVjayhpbm9kZSwgZXQpOworCQlyZXQgPSBldC0+ZXRfb3BzLT5lb19zYW5pdHlfY2hlY2soZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG9jZnMyX2ZyZWVfdHJ1bmNhdGVfY29udGV4dChzdHJ1Y3Qgb2NmczJfdHJ1bmNhdGVfY29udGV4dCAqdGMpOwogc3RhdGljIGludCBvY2ZzMl9jYWNoZV9leHRlbnRfYmxvY2tfZnJlZShzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqY3R4dCwKIAkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViKTsKLQotLyoKLSAqIFN0cnVjdHVyZXMgd2hpY2ggZGVzY3JpYmUgYSBwYXRoIHRocm91Z2ggYSBidHJlZSwgYW5kIGZ1bmN0aW9ucyB0bwotICogbWFuaXB1bGF0ZSB0aGVtLgotICoKLSAqIFRoZSBpZGVhIGhlcmUgaXMgdG8gYmUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZSB3aXRoIHRoZSB0cmVlCi0gKiBtYW5pcHVsYXRpb24gY29kZS4KLSAqLwotc3RydWN0IG9jZnMyX3BhdGhfaXRlbSB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkCQkqYmg7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9saXN0CSplbDsKLX07Ci0KLSNkZWZpbmUgT0NGUzJfTUFYX1BBVEhfREVQVEgJNQotCi1zdHJ1Y3Qgb2NmczJfcGF0aCB7Ci0JaW50CQkJCXBfdHJlZV9kZXB0aDsKLQlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jCXBfcm9vdF9hY2Nlc3M7Ci0Jc3RydWN0IG9jZnMyX3BhdGhfaXRlbQkJcF9ub2RlW09DRlMyX01BWF9QQVRIX0RFUFRIXTsKLX07Ci0KLSNkZWZpbmUgcGF0aF9yb290X2JoKF9wYXRoKSAoKF9wYXRoKS0+cF9ub2RlWzBdLmJoKQotI2RlZmluZSBwYXRoX3Jvb3RfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbMF0uZWwpCi0jZGVmaW5lIHBhdGhfcm9vdF9hY2Nlc3MoX3BhdGgpKChfcGF0aCktPnBfcm9vdF9hY2Nlc3MpCi0jZGVmaW5lIHBhdGhfbGVhZl9iaChfcGF0aCkgKChfcGF0aCktPnBfbm9kZVsoX3BhdGgpLT5wX3RyZWVfZGVwdGhdLmJoKQotI2RlZmluZSBwYXRoX2xlYWZfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbKF9wYXRoKS0+cF90cmVlX2RlcHRoXS5lbCkKLSNkZWZpbmUgcGF0aF9udW1faXRlbXMoX3BhdGgpICgoX3BhdGgpLT5wX3RyZWVfZGVwdGggKyAxKQotCi1zdGF0aWMgaW50IG9jZnMyX2ZpbmRfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCSAgIHUzMiBjcG9zKTsKLXN0YXRpYyB2b2lkIG9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIHZvaWQgb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYyk7CiAvKgpAQCAtNDg2LDcgKzU3Nyw3IEBACiAgKiB0byBidWlsZCBhbm90aGVyIHBhdGguIEdlbmVyYWxseSwgdGhpcyBpbnZvbHZlcyBmcmVlaW5nIHRoZSBidWZmZXIKICAqIGhlYWRzLgogICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9yZWluaXRfcGF0aChzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgaW50IGtlZXBfcm9vdCkKK3ZvaWQgb2NmczJfcmVpbml0X3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIGludCBrZWVwX3Jvb3QpCiB7CiAJaW50IGksIHN0YXJ0ID0gMCwgZGVwdGggPSAwOwogCXN0cnVjdCBvY2ZzMl9wYXRoX2l0ZW0gKm5vZGU7CkBAIC01MTUsNyArNjA2LDcgQEAKIAlwYXRoLT5wX3RyZWVfZGVwdGggPSBkZXB0aDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfZnJlZV9wYXRoKHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKQordm9pZCBvY2ZzMl9mcmVlX3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpCiB7CiAJaWYgKHBhdGgpIHsKIAkJb2NmczJfcmVpbml0X3BhdGgocGF0aCwgMCk7CkBAIC02MTMsMTMgKzcwNCwxMyBAQAogCXJldHVybiBwYXRoOwogfQogCi1zdGF0aWMgc3RydWN0IG9jZnMyX3BhdGggKm9jZnMyX25ld19wYXRoX2Zyb21fcGF0aChzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKK3N0cnVjdCBvY2ZzMl9wYXRoICpvY2ZzMl9uZXdfcGF0aF9mcm9tX3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpCiB7CiAJcmV0dXJuIG9jZnMyX25ld19wYXRoKHBhdGhfcm9vdF9iaChwYXRoKSwgcGF0aF9yb290X2VsKHBhdGgpLAogCQkJICAgICAgcGF0aF9yb290X2FjY2VzcyhwYXRoKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2NmczJfcGF0aCAqb2NmczJfbmV3X3BhdGhfZnJvbV9ldChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQorc3RydWN0IG9jZnMyX3BhdGggKm9jZnMyX25ld19wYXRoX2Zyb21fZXQoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlyZXR1cm4gb2NmczJfbmV3X3BhdGgoZXQtPmV0X3Jvb3RfYmgsIGV0LT5ldF9yb290X2VsLAogCQkJICAgICAgZXQtPmV0X3Jvb3Rfam91cm5hbF9hY2Nlc3MpOwpAQCAtNjMyLDEwICs3MjMsMTAgQEAKICAqIEkgZG9uJ3QgbGlrZSB0aGUgd2F5IHRoaXMgZnVuY3Rpb24ncyBuYW1lIGxvb2tzIG5leHQgdG8KICAqIG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoKSwgYnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBvbmUuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkJaW50IGlkeCkKK2ludCBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJCQkgaW50IGlkeCkKIHsKIAlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jIGFjY2VzcyA9IHBhdGhfcm9vdF9hY2Nlc3MocGF0aCk7CiAKQEAgLTY0NSwxNSArNzM2LDE2IEBACiAJaWYgKGlkeCkKIAkJYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWI7CiAKLQlyZXR1cm4gYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGgtPnBfbm9kZVtpZHhdLmJoLAorCXJldHVybiBhY2Nlc3MoaGFuZGxlLCBjaSwgcGF0aC0+cF9ub2RlW2lkeF0uYmgsCiAJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIH0KIAogLyoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGpvdXJuYWwgYWxsIGNvbXBvbmVudHMgaW4gYSBwYXRoLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKQoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpCiB7CiAJaW50IGksIHJldCA9IDA7CiAKQEAgLTY2MSw3ICs3NTMsNyBAQAogCQlnb3RvIG91dDsKIAogCWZvcihpID0gMDsgaSA8IHBhdGhfbnVtX2l0ZW1zKHBhdGgpOyBpKyspIHsKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoLCBpKTsKKwkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBwYXRoLCBpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNzAyLDE3ICs3OTQsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWVudW0gb2NmczJfY29udGlnX3R5cGUgewotCUNPTlRJR19OT05FID0gMCwKLQlDT05USUdfTEVGVCwKLQlDT05USUdfUklHSFQsCi0JQ09OVElHX0xFRlRSSUdIVCwKLX07Ci0KLQogLyoKICAqIE5PVEU6IG9jZnMyX2Jsb2NrX2V4dGVudF9jb250aWcoKSwgb2NmczJfZXh0ZW50c19hZGphY2VudCgpIGFuZAotICogb2NmczJfZXh0ZW50X2NvbnRpZyBvbmx5IHdvcmsgcHJvcGVybHkgYWdhaW5zdCBsZWFmIG5vZGVzIQorICogb2NmczJfZXh0ZW50X3JlY19jb250aWcgb25seSB3b3JrIHByb3Blcmx5IGFnYWluc3QgbGVhZiBub2RlcyEKICAqLwogc3RhdGljIGludCBvY2ZzMl9ibG9ja19leHRlbnRfY29udGlnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqZXh0LApAQCAtNzM4LDkgKzgyMiw5IEBACiB9CiAKIHN0YXRpYyBlbnVtIG9jZnMyX2NvbnRpZ190eXBlCi0Jb2NmczJfZXh0ZW50X2NvbnRpZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpleHQsCi0JCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpCisJb2NmczJfZXh0ZW50X3JlY19jb250aWcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqZXh0LAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjKQogewogCXU2NCBibGtubyA9IGxlNjRfdG9fY3B1KGluc2VydF9yZWMtPmVfYmxrbm8pOwogCkBAIC03NTMsMTIgKzgzNywxMiBAQAogCQlyZXR1cm4gQ09OVElHX05PTkU7CiAKIAlpZiAob2NmczJfZXh0ZW50c19hZGphY2VudChleHQsIGluc2VydF9yZWMpICYmCi0JICAgIG9jZnMyX2Jsb2NrX2V4dGVudF9jb250aWcoaW5vZGUtPmlfc2IsIGV4dCwgYmxrbm8pKQorCSAgICBvY2ZzMl9ibG9ja19leHRlbnRfY29udGlnKHNiLCBleHQsIGJsa25vKSkKIAkJCXJldHVybiBDT05USUdfUklHSFQ7CiAKIAlibGtubyA9IGxlNjRfdG9fY3B1KGV4dC0+ZV9ibGtubyk7CiAJaWYgKG9jZnMyX2V4dGVudHNfYWRqYWNlbnQoaW5zZXJ0X3JlYywgZXh0KSAmJgotCSAgICBvY2ZzMl9ibG9ja19leHRlbnRfY29udGlnKGlub2RlLT5pX3NiLCBpbnNlcnRfcmVjLCBibGtubykpCisJICAgIG9jZnMyX2Jsb2NrX2V4dGVudF9jb250aWcoc2IsIGluc2VydF9yZWMsIGJsa25vKSkKIAkJcmV0dXJuIENPTlRJR19MRUZUOwogCiAJcmV0dXJuIENPTlRJR19OT05FOwpAQCAtODUzLDEzICs5MzcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBlYl9ibGtubywKK2ludCBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGViX2Jsa25vLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQogewogCWludCByYzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpiaDsKIAotCXJjID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgZWJfYmxrbm8sICZ0bXAsCisJcmMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGNpLCBlYl9ibGtubywgJnRtcCwKIAkJCSAgICAgIG9jZnMyX3ZhbGlkYXRlX2V4dGVudF9ibG9jayk7CiAKIAkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLwpAQCAtODc0LDcgKzk1OCw2IEBACiAgKiBIb3cgbWFueSBmcmVlIGV4dGVudHMgaGF2ZSB3ZSBnb3QgYmVmb3JlIHdlIG5lZWQgbW9yZSBtZXRhIGRhdGE/CiAgKi8KIGludCBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCiB7CiAJaW50IHJldHZhbDsKQEAgLTg4OSw3ICs5NzIsOCBAQAogCWxhc3RfZWJfYmxrID0gb2NmczJfZXRfZ2V0X2xhc3RfZWJfYmxrKGV0KTsKIAogCWlmIChsYXN0X2ViX2JsaykgewotCQlyZXR2YWwgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhpbm9kZSwgbGFzdF9lYl9ibGssICZlYl9iaCk7CisJCXJldHZhbCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGV0LT5ldF9jaSwgbGFzdF9lYl9ibGssCisJCQkJCQkgJmViX2JoKTsKIAkJaWYgKHJldHZhbCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0dmFsKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTkxMyw5ICs5OTcsOCBAQAogICogc2V0cyBoX3NpZ25hdHVyZSwgaF9ibGtubywgaF9zdWJhbGxvY19iaXQsIGhfc3ViYWxsb2Nfc2xvdCwgYW5kCiAgKiBsX2NvdW50IGZvciB5b3UKICAqLwotc3RhdGljIGludCBvY2ZzMl9jcmVhdGVfbmV3X21ldGFfYmhzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJCSAgICAgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9uZXdfbWV0YV9iaHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBpbnQgd2FudGVkLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdKQpAQCAtOTI0LDYgKzEwMDcsOCBAQAogCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CiAJdTMyIG51bV9nb3Q7CiAJdTY0IGZpcnN0X2Jsa25vOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0KKwkJT0NGUzJfU0Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSkpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CkBAIC05NDksOSArMTAzNCwxMCBAQAogCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9Ci0JCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmhzW2ldKTsKKwkJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGV0LT5ldF9jaSwgYmhzW2ldKTsKIAotCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgYmhzW2ldLAorCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBldC0+ZXRfY2ksCisJCQkJCQkJIGJoc1tpXSwKIAkJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAkJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTAyMyw3ICsxMTA5LDYgQEAKICAqIGV4dGVudCBibG9jaydzIHJpZ2h0bW9zdCByZWNvcmQuCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9icmFuY2goaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCWludCBzdGF0dXM7CkBAIC0xMDM3LDcgKzExMjIsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgVUlOVF9NQVgpOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIHBhdGgsIFVJTlRfTUFYKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0OwpAQCAtMTA1MCw3ICsxMTM1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBwYXRoKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCBwYXRoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0OwpAQCAtMTA1OSw3ICsxMTQ0LDcgQEAKIAllbCA9IHBhdGhfbGVhZl9lbChwYXRoKTsKIAlyZWMgPSAmZWwtPmxfcmVjc1tsZTMyX3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDFdOwogCi0Jb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGlub2RlLCBoYW5kbGUsIHBhdGgsIHJlYyk7CisJb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZSwgZXQsIHBhdGgsIHJlYyk7CiAKIG91dDoKIAlvY2ZzMl9mcmVlX3BhdGgocGF0aCk7CkBAIC0xMDY4LDcgKzExNTMsNyBAQAogCiAvKgogICogQWRkIGFuIGVudGlyZSB0cmVlIGJyYW5jaCB0byBvdXIgaW5vZGUuIGViX2JoIGlzIHRoZSBleHRlbnQgYmxvY2sKLSAqIHRvIHN0YXJ0IGF0LCBpZiB3ZSBkb24ndCB3YW50IHRvIHN0YXJ0IHRoZSBicmFuY2ggYXQgdGhlIGRpbm9kZQorICogdG8gc3RhcnQgYXQsIGlmIHdlIGRvbid0IHdhbnQgdG8gc3RhcnQgdGhlIGJyYW5jaCBhdCB0aGUgcm9vdAogICogc3RydWN0dXJlLgogICoKICAqIGxhc3RfZWJfYmggaXMgcmVxdWlyZWQgYXMgd2UgaGF2ZSB0byB1cGRhdGUgaXQncyBuZXh0X2xlYWYgcG9pbnRlcgpAQCAtMTA3Nyw5ICsxMTYyLDcgQEAKICAqIHRoZSBuZXcgYnJhbmNoIHdpbGwgYmUgJ2VtcHR5JyBpbiB0aGUgc2Vuc2UgdGhhdCBldmVyeSBibG9jayB3aWxsCiAgKiBjb250YWluIGEgc2luZ2xlIHJlY29yZCB3aXRoIGNsdXN0ZXIgY291bnQgPT0gMC4KICAqLwotc3RhdGljIGludCBvY2ZzMl9hZGRfYnJhbmNoKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKK3N0YXRpYyBpbnQgb2NmczJfYWRkX2JyYW5jaChoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLApAQCAtMTEyMyw3ICsxMjA2LDcgQEAKIAlpZiAocm9vdF9lbmQgPiBuZXdfY3BvcykgewogCQltbG9nKDAsICJhZGp1c3QgdGhlIGNsdXN0ZXIgZW5kIGZyb20gJXUgdG8gJXVcbiIsCiAJCSAgICAgcm9vdF9lbmQsIG5ld19jcG9zKTsKLQkJc3RhdHVzID0gb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9icmFuY2goaGFuZGxlLCBpbm9kZSwgZXQpOworCQlzdGF0dXMgPSBvY2ZzMl9hZGp1c3RfcmlnaHRtb3N0X2JyYW5jaChoYW5kbGUsIGV0KTsKIAkJaWYgKHN0YXR1cykgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTEzOSw3ICsxMjIyLDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2NyZWF0ZV9uZXdfbWV0YV9iaHMob3NiLCBoYW5kbGUsIGlub2RlLCBuZXdfYmxvY2tzLAorCXN0YXR1cyA9IG9jZnMyX2NyZWF0ZV9uZXdfbWV0YV9iaHMoaGFuZGxlLCBldCwgbmV3X2Jsb2NrcywKIAkJCQkJICAgbWV0YV9hYywgbmV3X2ViX2Jocyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTE2MSw3ICsxMjQ0LDcgQEAKIAkJQlVHX09OKCFPQ0ZTMl9JU19WQUxJRF9FWFRFTlRfQkxPQ0soZWIpKTsKIAkJZWJfZWwgPSAmZWItPmhfbGlzdDsKIAotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGlub2RlLCBiaCwKKwkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBldC0+ZXRfY2ksIGJoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMjAxLDIwICsxMjg0LDIwIEBACiAJICogam91cm5hbF9kaXJ0eSBlcnJvcmluZyBhcyBpdCB3b24ndCB1bmxlc3Mgd2UndmUgYWJvcnRlZCB0aGUKIAkgKiBoYW5kbGUgKGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgbmV2ZXIgYmUgaGVyZSkgc28gcmVzZXJ2aW5nCiAJICogdGhlIHdyaXRlIHdpdGggam91cm5hbF9hY2Nlc3MgaXMgYWxsIHdlIG5lZWQgdG8gZG8uICovCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgKmxhc3RfZWJfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBldC0+ZXRfY2ksICpsYXN0X2ViX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KLQlzdGF0dXMgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXN0YXR1cyA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KIAlpZiAoZWJfYmgpIHsKLQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgZWJfYmgsCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZSwgZXQtPmV0X2NpLCBlYl9iaCwKIAkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMjc0LDkgKzEzNTcsNyBAQAogICogcmV0dXJucyBiYWNrIHRoZSBuZXcgZXh0ZW50IGJsb2NrIHNvIHlvdSBjYW4gYWRkIGEgYnJhbmNoIHRvIGl0CiAgKiBhZnRlciB0aGlzIGNhbGwuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfc2hpZnRfdHJlZV9kZXB0aChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQkgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfbmV3X2ViX2JoKQpAQCAtMTI5MCw3ICsxMzcxLDcgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0Jc3RhdHVzID0gb2NmczJfY3JlYXRlX25ld19tZXRhX2Jocyhvc2IsIGhhbmRsZSwgaW5vZGUsIDEsIG1ldGFfYWMsCisJc3RhdHVzID0gb2NmczJfY3JlYXRlX25ld19tZXRhX2JocyhoYW5kbGUsIGV0LCAxLCBtZXRhX2FjLAogCQkJCQkgICAmbmV3X2ViX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMzA0LDcgKzEzODUsNyBAQAogCWViX2VsID0gJmViLT5oX2xpc3Q7CiAJcm9vdF9lbCA9IGV0LT5ldF9yb290X2VsOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgbmV3X2ViX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZSwgZXQtPmV0X2NpLCBuZXdfZWJfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEzMjMsNyArMTQwNCw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXN0YXR1cyA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEzNzksOSArMTQ2MCw3IEBACiAgKgogICogcmV0dXJuIHN0YXR1cyA8IDAgaW5kaWNhdGVzIGFuIGVycm9yLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKK3N0YXRpYyBpbnQgb2NmczJfZmluZF9icmFuY2hfdGFyZ2V0KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnRhcmdldF9iaCkKIHsKIAlpbnQgc3RhdHVzID0gMCwgaTsKQEAgLTEzOTksMTkgKzE0NzgsMjEgQEAKIAogCXdoaWxlKGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpID4gMSkgewogCQlpZiAobGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMCkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsICJEaW5vZGUgJWxsdSBoYXMgZW1wdHkgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1IGhhcyBlbXB0eSAiCiAJCQkJICAgICJleHRlbnQgbGlzdCAobmV4dF9mcmVlX3JlYyA9PSAwKSIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpKTsKIAkJCXN0YXR1cyA9IC1FSU87CiAJCQlnb3RvIGJhaWw7CiAJCX0KIAkJaSA9IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMTsKIAkJYmxrbm8gPSBsZTY0X3RvX2NwdShlbC0+bF9yZWNzW2ldLmVfYmxrbm8pOwogCQlpZiAoIWJsa25vKSB7Ci0JCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIkRpbm9kZSAlbGx1IGhhcyBleHRlbnQgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1IGhhcyBleHRlbnQgIgogCQkJCSAgICAibGlzdCB3aGVyZSBleHRlbnQgIyAlZCBoYXMgbm8gcGh5c2ljYWwgIgogCQkJCSAgICAiYmxvY2sgc3RhcnQiLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgaSk7CisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwgaSk7CiAJCQlzdGF0dXMgPSAtRUlPOwogCQkJZ290byBiYWlsOwogCQl9CkBAIC0xNDE5LDcgKzE1MDAsNyBAQAogCQlicmVsc2UoYmgpOwogCQliaCA9IE5VTEw7CiAKLQkJc3RhdHVzID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soaW5vZGUsIGJsa25vLCAmYmgpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhldC0+ZXRfY2ksIGJsa25vLCAmYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTQ2MCwyMCArMTU0MSwxOCBAQAogICoKICAqICpsYXN0X2ViX2JoIHdpbGwgYmUgdXBkYXRlZCBieSBvY2ZzMl9hZGRfYnJhbmNoKCkuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZ3Jvd190cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LCBpbnQgKmZpbmFsX2RlcHRoLAotCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbGFzdF9lYl9iaCwKK3N0YXRpYyBpbnQgb2NmczJfZ3Jvd190cmVlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICBpbnQgKmZpbmFsX2RlcHRoLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CiAJaW50IHJldCwgc2hpZnQ7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9IGV0LT5ldF9yb290X2VsOwogCWludCBkZXB0aCA9IGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpOwotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCiAJQlVHX09OKG1ldGFfYWMgPT0gTlVMTCk7CiAKLQlzaGlmdCA9IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChvc2IsIGlub2RlLCBldCwgJmJoKTsKKwlzaGlmdCA9IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChldCwgJmJoKTsKIAlpZiAoc2hpZnQgPCAwKSB7CiAJCXJldCA9IHNoaWZ0OwogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xNDkwLDggKzE1NjksNyBAQAogCQkvKiBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoIHdpbGwgcmV0dXJuIHVzIGEgYnVmZmVyIHdpdGgKIAkJICogdGhlIG5ldyBleHRlbnQgYmxvY2sgKHNvIHdlIGNhbiBwYXNzIHRoYXQgdG8KIAkJICogb2NmczJfYWRkX2JyYW5jaCkuICovCi0JCXJldCA9IG9jZnMyX3NoaWZ0X3RyZWVfZGVwdGgob3NiLCBoYW5kbGUsIGlub2RlLCBldCwKLQkJCQkJICAgICBtZXRhX2FjLCAmYmgpOworCQlyZXQgPSBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoKGhhbmRsZSwgZXQsIG1ldGFfYWMsICZiaCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTE1MTcsNyArMTU5NSw3IEBACiAJLyogY2FsbCBvY2ZzMl9hZGRfYnJhbmNoIHRvIGFkZCB0aGUgZmluYWwgcGFydCBvZiB0aGUgdHJlZSB3aXRoCiAJICogdGhlIG5ldyBkYXRhLiAqLwogCW1sb2coMCwgImFkZCBicmFuY2guIGJoID0gJXBcbiIsIGJoKTsKLQlyZXQgPSBvY2ZzMl9hZGRfYnJhbmNoKG9zYiwgaGFuZGxlLCBpbm9kZSwgZXQsIGJoLCBsYXN0X2ViX2JoLAorCXJldCA9IG9jZnMyX2FkZF9icmFuY2goaGFuZGxlLCBldCwgYmgsIGxhc3RfZWJfYmgsCiAJCQkgICAgICAgbWV0YV9hYyk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTY4Nyw3ICsxNzY1LDcgQEAKICAqCiAgKiBUaGUgYXJyYXkgaW5kZXggb2YgdGhlIHN1YnRyZWUgcm9vdCBpcyBwYXNzZWQgYmFjay4KICAqLwotc3RhdGljIGludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0LAogCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodCkKIHsKQEAgLTE3MDUsMTAgKzE3ODMsMTAgQEAKIAkJICogVGhlIGNhbGxlciBkaWRuJ3QgcGFzcyB0d28gYWRqYWNlbnQgcGF0aHMuCiAJCSAqLwogCQltbG9nX2J1Z19vbl9tc2coaSA+IGxlZnQtPnBfdHJlZV9kZXB0aCwKLQkJCQkiSW5vZGUgJWx1LCBsZWZ0IGRlcHRoICV1LCByaWdodCBkZXB0aCAldVxuIgorCQkJCSJPd25lciAlbGx1LCBsZWZ0IGRlcHRoICV1LCByaWdodCBkZXB0aCAldVxuIgogCQkJCSJsZWZ0IGxlYWYgYmxrICVsbHUsIHJpZ2h0IGxlYWYgYmxrICVsbHVcbiIsCi0JCQkJaW5vZGUtPmlfaW5vLCBsZWZ0LT5wX3RyZWVfZGVwdGgsCi0JCQkJcmlnaHQtPnBfdHJlZV9kZXB0aCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCisJCQkJbGVmdC0+cF90cmVlX2RlcHRoLCByaWdodC0+cF90cmVlX2RlcHRoLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGF0aF9sZWFmX2JoKGxlZnQpLT5iX2Jsb2NrbnIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwYXRoX2xlYWZfYmgocmlnaHQpLT5iX2Jsb2NrbnIpOwogCX0gd2hpbGUgKGxlZnQtPnBfbm9kZVtpXS5iaC0+Yl9ibG9ja25yID09CkBAIC0xNzI1LDcgKzE4MDMsNyBAQAogICogVGhpcyBjb2RlIGNhbiBiZSBjYWxsZWQgd2l0aCBhIGNwb3MgbGFyZ2VyIHRoYW4gdGhlIHRyZWUsIGluIHdoaWNoCiAgKiBjYXNlIGl0IHdpbGwgcmV0dXJuIHRoZSByaWdodG1vc3QgcGF0aC4KICAqLwotc3RhdGljIGludCBfX29jZnMyX2ZpbmRfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBfX29jZnMyX2ZpbmRfcGF0aChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyb290X2VsLCB1MzIgY3BvcywKIAkJCSAgICAgcGF0aF9pbnNlcnRfdCAqZnVuYywgdm9pZCAqZGF0YSkKIHsKQEAgLTE3MzYsMTUgKzE4MTQsMTQgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7Ci0Jc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAKIAllbCA9IHJvb3RfZWw7CiAJd2hpbGUgKGVsLT5sX3RyZWVfZGVwdGgpIHsKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IDApIHsKLQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgICAiSW5vZGUgJWxsdSBoYXMgZW1wdHkgZXh0ZW50IGxpc3QgYXQgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGVtcHR5IGV4dGVudCBsaXN0IGF0ICIKIAkJCQkgICAgImRlcHRoICV1XG4iLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCiAJCQkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpKTsKIAkJCXJldCA9IC1FUk9GUzsKIAkJCWdvdG8gb3V0OwpAQCAtMTc2NywxMCArMTg0NCwxMCBAQAogCiAJCWJsa25vID0gbGU2NF90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Jsa25vKTsKIAkJaWYgKGJsa25vID09IDApIHsKLQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgICAiSW5vZGUgJWxsdSBoYXMgYmFkIGJsa25vIGluIGV4dGVudCBsaXN0ICIKKwkJCW9jZnMyX2Vycm9yKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSksCisJCQkJICAgICJPd25lciAlbGx1IGhhcyBiYWQgYmxrbm8gaW4gZXh0ZW50IGxpc3QgIgogCQkJCSAgICAiYXQgZGVwdGggJXUgKGluZGV4ICVkKVxuIiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAogCQkJCSAgICBsZTE2X3RvX2NwdShlbC0+bF90cmVlX2RlcHRoKSwgaSk7CiAJCQlyZXQgPSAtRVJPRlM7CiAJCQlnb3RvIG91dDsKQEAgLTE3NzgsNyArMTg1NSw3IEBACiAKIAkJYnJlbHNlKGJoKTsKIAkJYmggPSBOVUxMOwotCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhpbm9kZSwgYmxrbm8sICZiaCk7CisJCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGNpLCBibGtubywgJmJoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0xNzg5LDEwICsxODY2LDEwIEBACiAKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID4KIAkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJJbm9kZSAlbGx1IGhhcyBiYWQgY291bnQgaW4gZXh0ZW50IGxpc3QgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGJhZCBjb3VudCBpbiBleHRlbnQgbGlzdCAiCiAJCQkJICAgICJhdCBibG9jayAlbGx1IChuZXh0IGZyZWU9JXUsIGNvdW50PSV1KVxuIiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCiAJCQkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpLAogCQkJCSAgICBsZTE2X3RvX2NwdShlbC0+bF9jb3VudCkpOwpAQCAtMTgzNiwxNCArMTkxMywxNCBAQAogCW9jZnMyX3BhdGhfaW5zZXJ0X2ViKGZwLT5wYXRoLCBmcC0+aW5kZXgsIGJoKTsKIAlmcC0+aW5kZXgrKzsKIH0KLXN0YXRpYyBpbnQgb2NmczJfZmluZF9wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAotCQkJICAgdTMyIGNwb3MpCitpbnQgb2NmczJfZmluZF9wYXRoKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIHUzMiBjcG9zKQogewogCXN0cnVjdCBmaW5kX3BhdGhfZGF0YSBkYXRhOwogCiAJZGF0YS5pbmRleCA9IDE7CiAJZGF0YS5wYXRoID0gcGF0aDsKLQlyZXR1cm4gX19vY2ZzMl9maW5kX3BhdGgoaW5vZGUsIHBhdGhfcm9vdF9lbChwYXRoKSwgY3BvcywKKwlyZXR1cm4gX19vY2ZzMl9maW5kX3BhdGgoY2ksIHBhdGhfcm9vdF9lbChwYXRoKSwgY3BvcywKIAkJCQkgZmluZF9wYXRoX2lucywgJmRhdGEpOwogfQogCkBAIC0xODY4LDEzICsxOTQ1LDE0IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhbmRsZSBub24gYnRyZWUgZXh0ZW50IGxpc3RzLgogICovCi1pbnQgb2NmczJfZmluZF9sZWFmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcm9vdF9lbCwKLQkJICAgIHUzMiBjcG9zLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsZWFmX2JoKQoraW50IG9jZnMyX2ZpbmRfbGVhZihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcm9vdF9lbCwgdTMyIGNwb3MsCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsZWFmX2JoKQogewogCWludCByZXQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAKLQlyZXQgPSBfX29jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcm9vdF9lbCwgY3BvcywgZmluZF9sZWFmX2lucywgJmJoKTsKKwlyZXQgPSBfX29jZnMyX2ZpbmRfcGF0aChjaSwgcm9vdF9lbCwgY3BvcywgZmluZF9sZWFmX2lucywgJmJoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0xOTgwLDcgKzIwNTgsNyBAQAogICogICAtIFdoZW4gd2UndmUgYWRqdXN0ZWQgdGhlIGxhc3QgZXh0ZW50IHJlY29yZCBpbiB0aGUgbGVmdCBwYXRoIGxlYWYgYW5kIHRoZQogICogICAgIDFzdCBleHRlbnQgcmVjb3JkIGluIHRoZSByaWdodCBwYXRoIGxlYWYgZHVyaW5nIGNyb3NzIGV4dGVudCBibG9jayBtZXJnZS4KICAqLwotc3RhdGljIHZvaWQgb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyB2b2lkIG9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGgsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCSAgICAgICBpbnQgc3VidHJlZV9pbmRleCkKQEAgLTIwNTgsOCArMjEzNiw4IEBACiAJCW1sb2dfZXJybm8ocmV0KTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfc3VidHJlZV9yaWdodChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX3JpZ2h0KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAogCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCSAgICAgIGludCBzdWJ0cmVlX2luZGV4KQpAQCAtMjA3NSwxMCArMjE1MywxMCBAQAogCWxlZnRfZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKIAogCWlmIChsZWZ0X2VsLT5sX25leHRfZnJlZV9yZWMgIT0gbGVmdF9lbC0+bF9jb3VudCkgewotCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCiAJCQkgICAgIklub2RlICVsbHUgaGFzIG5vbi1mdWxsIGludGVyaW9yIGxlYWYgbm9kZSAlbGx1IgogCQkJICAgICIobmV4dCBmcmVlID0gJXUpIiwKLQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWZ0X2xlYWZfYmgtPmJfYmxvY2tuciwKIAkJCSAgICBsZTE2X3RvX2NwdShsZWZ0X2VsLT5sX25leHRfZnJlZV9yZWMpKTsKIAkJcmV0dXJuIC1FUk9GUzsKQEAgLTIwOTQsNyArMjE3Miw3IEBACiAJcm9vdF9iaCA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfaW5kZXhdLmJoOwogCUJVR19PTihyb290X2JoICE9IHJpZ2h0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX2luZGV4XS5iaCk7CiAKLQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHJpZ2h0X3BhdGgsCisJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwgcmlnaHRfcGF0aCwKIAkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yMTAyLDE0ICsyMTgwLDE0IEBACiAJfQogCiAJZm9yKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsgaSA8IHBhdGhfbnVtX2l0ZW1zKHJpZ2h0X3BhdGgpOyBpKyspIHsKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLAogCQkJCQkJICAgcmlnaHRfcGF0aCwgaSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLAogCQkJCQkJICAgbGVmdF9wYXRoLCBpKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjEyMyw3ICsyMjAxLDcgQEAKIAkvKiBUaGlzIGlzIGEgY29kZSBlcnJvciwgbm90IGEgZGlzayBjb3JydXB0aW9uLiAqLwogCW1sb2dfYnVnX29uX21zZyghcmlnaHRfZWwtPmxfbmV4dF9mcmVlX3JlYywgIklub2RlICVsbHU6IFJvdGF0ZSBmYWlscyAiCiAJCQkiYmVjYXVzZSByaWdodG1vc3QgbGVhZiBibG9jayAlbGx1IGlzIGVtcHR5XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQkodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJpZ2h0X2xlYWZfYmgtPmJfYmxvY2tucik7CiAKIAlvY2ZzMl9jcmVhdGVfZW1wdHlfZXh0ZW50KHJpZ2h0X2VsKTsKQEAgLTIxNTcsOCArMjIzNSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKLQkJCQlzdWJ0cmVlX2luZGV4KTsKKwlvY2ZzMl9jb21wbGV0ZV9lZGdlX2luc2VydChoYW5kbGUsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKKwkJCQkgICBzdWJ0cmVlX2luZGV4KTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC0yMjQ4LDEwICsyMzI2LDE4IEBACiAJCQkJCSAgIGludCBvcF9jcmVkaXRzLAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKIHsKKwlpbnQgcmV0OwogCWludCBjcmVkaXRzID0gKHBhdGgtPnBfdHJlZV9kZXB0aCAtIHN1YnRyZWVfZGVwdGgpICogMiArIDEgKyBvcF9jcmVkaXRzOwogCi0JaWYgKGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyA8IGNyZWRpdHMpCi0JCXJldHVybiBvY2ZzMl9leHRlbmRfdHJhbnMoaGFuZGxlLCBjcmVkaXRzKTsKKwlpZiAoaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzIDwgY3JlZGl0cykgeworCQlyZXQgPSBvY2ZzMl9leHRlbmRfdHJhbnMoaGFuZGxlLAorCQkJCQkgY3JlZGl0cyAtIGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmICh1bmxpa2VseShoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMgPCBjcmVkaXRzKSkKKwkJCXJldHVybiBvY2ZzMl9leHRlbmRfdHJhbnMoaGFuZGxlLCBjcmVkaXRzKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMjEsOCArMjQwNyw4IEBACiAgKiAgICpyZXRfbGVmdF9wYXRoIHdpbGwgY29udGFpbiBhIHZhbGlkIHBhdGggd2hpY2ggY2FuIGJlIHBhc3NlZCB0bwogICogICBvY2ZzMl9pbnNlcnRfcGF0aCgpLgogICovCi1zdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV90cmVlX3JpZ2h0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfcm90YXRlX3RyZWVfcmlnaHQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgIGVudW0gb2NmczJfc3BsaXRfdHlwZSBzcGxpdCwKIAkJCQkgICB1MzIgaW5zZXJ0X2Nwb3MsCiAJCQkJICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCkBAIC0yMzMxLDYgKzI0MTcsNyBAQAogCWludCByZXQsIHN0YXJ0LCBvcmlnX2NyZWRpdHMgPSBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHM7CiAJdTMyIGNwb3M7CiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpOwogCiAJKnJldF9sZWZ0X3BhdGggPSBOVUxMOwogCkBAIC0yMzQxLDcgKzI0MjgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcmlnaHRfcGF0aCwgJmNwb3MpOworCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKHNiLCByaWdodF9wYXRoLCAmY3Bvcyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjM3OSw3ICsyNDY2LDcgQEAKIAkJbWxvZygwLCAiUm90YXRpbmcgYSB0cmVlOiBpbnMuIGNwb3M6ICV1LCBsZWZ0IHBhdGggY3BvczogJXVcbiIsCiAJCSAgICAgaW5zZXJ0X2Nwb3MsIGNwb3MpOwogCi0JCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBjcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgbGVmdF9wYXRoLCBjcG9zKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0yMzg3LDEwICsyNDc0LDExIEBACiAKIAkJbWxvZ19idWdfb25fbXNnKHBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpID09CiAJCQkJcGF0aF9sZWFmX2JoKHJpZ2h0X3BhdGgpLAotCQkJCSJJbm9kZSAlbHU6IGVycm9yIGR1cmluZyBpbnNlcnQgb2YgJXUgIgorCQkJCSJPd25lciAlbGx1OiBlcnJvciBkdXJpbmcgaW5zZXJ0IG9mICV1ICIKIAkJCQkiKGxlZnQgcGF0aCBjcG9zICV1KSByZXN1bHRzIGluIHR3byBpZGVudGljYWwgIgogCQkJCSJwYXRocyBlbmRpbmcgYXQgJWxsdVxuIiwKLQkJCQlpbm9kZS0+aV9pbm8sIGluc2VydF9jcG9zLCBjcG9zLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKKwkJCQlpbnNlcnRfY3BvcywgY3BvcywKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKQogCQkJCXBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpLT5iX2Jsb2NrbnIpOwogCkBAIC0yNDE2LDcgKzI1MDQsNyBAQAogCQkJZ290byBvdXRfcmV0X3BhdGg7CiAJCX0KIAotCQlzdGFydCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGlub2RlLCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgpOworCQlzdGFydCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgpOwogCiAJCW1sb2coMCwgIlN1YnRyZWUgcm9vdCBhdCBpbmRleCAlZCAoYmxrICVsbHUsIGRlcHRoICVkKVxuIiwKIAkJICAgICBzdGFydCwKQEAgLTI0MzAsNyArMjUxOCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX3JpZ2h0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwKKwkJcmV0ID0gb2NmczJfcm90YXRlX3N1YnRyZWVfcmlnaHQoaGFuZGxlLCBldCwgbGVmdF9wYXRoLAogCQkJCQkJIHJpZ2h0X3BhdGgsIHN0YXJ0KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjQ2Miw4ICsyNTUwLDcgQEAKIAkJICovCiAJCW9jZnMyX212X3BhdGgocmlnaHRfcGF0aCwgbGVmdF9wYXRoKTsKIAotCQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcmlnaHRfcGF0aCwKLQkJCQkJCSAgICAmY3Bvcyk7CisJCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKHNiLCByaWdodF9wYXRoLCAmY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtMjQ3Nyw3ICsyNTY0LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3VwZGF0ZV9lZGdlX2xlbmd0aHMoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfdXBkYXRlX2VkZ2VfbGVuZ3RocyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgIGludCBzdWJ0cmVlX2luZGV4LCBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKIHsKIAlpbnQgaSwgaWR4LCByZXQ7CkBAIC0yNTAyLDcgKzI1OTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGlub2RlLCBoYW5kbGUsIHBhdGgpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoZXQtPmV0X2NpLCBoYW5kbGUsIHBhdGgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTI1MzIsNyArMjYyMCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfdW5saW5rX3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyB2b2lkIG9jZnMyX3VubGlua19wYXRoKGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgaW50IHVubGlua19zdGFydCkKIHsKQEAgLTI1NTQsMTIgKzI2NDMsMTIgQEAKIAkJCW1sb2coTUxfRVJST1IsCiAJCQkgICAgICJJbm9kZSAlbGx1LCBhdHRlbXB0ZWQgdG8gcmVtb3ZlIGV4dGVudCBibG9jayAiCiAJCQkgICAgICIlbGx1IHdpdGggJXUgcmVjb3Jkc1xuIiwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShlYi0+aF9ibGtubyksCiAJCQkgICAgIGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpKTsKIAogCQkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoKTsKLQkJCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKGlub2RlLCBiaCk7CisJCQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShldC0+ZXRfY2ksIGJoKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTI1NzIsMTEgKzI2NjEsMTIgQEAKIAkJaWYgKHJldCkKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAotCQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShpbm9kZSwgYmgpOworCQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShldC0+ZXRfY2ksIGJoKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX3VubGlua19zdWJ0cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgdm9pZCBvY2ZzMl91bmxpbmtfc3VidHJlZShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAogCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCwKIAkJCQkgaW50IHN1YnRyZWVfaW5kZXgsCkBAIC0yNjA3LDE3ICsyNjk3LDE3IEBACiAJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHJvb3RfYmgpOwogCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBwYXRoX2xlYWZfYmgobGVmdF9wYXRoKSk7CiAKLQlvY2ZzMl91bmxpbmtfcGF0aChpbm9kZSwgaGFuZGxlLCBkZWFsbG9jLCByaWdodF9wYXRoLAorCW9jZnMyX3VubGlua19wYXRoKGhhbmRsZSwgZXQsIGRlYWxsb2MsIHJpZ2h0X3BhdGgsCiAJCQkgIHN1YnRyZWVfaW5kZXggKyAxKTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfc3VidHJlZV9sZWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX2xlZnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCiAJCQkJICAgICBpbnQgc3VidHJlZV9pbmRleCwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgICAgaW50ICpkZWxldGVkLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKKwkJCQkgICAgIGludCAqZGVsZXRlZCkKIHsKIAlpbnQgcmV0LCBpLCBkZWxfcmlnaHRfc3VidHJlZSA9IDAsIHJpZ2h0X2hhc19lbXB0eSA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLCAqZXRfcm9vdF9iaCA9IHBhdGhfcm9vdF9iaChyaWdodF9wYXRoKTsKQEAgLTI2NTMsNyArMjc0Myw3IEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlpZiAobGUxNl90b19jcHUocmlnaHRfbGVhZl9lbC0+bF9uZXh0X2ZyZWVfcmVjKSA+IDEpIHsKLQkJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZSwgaW5vZGUsCisJCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCSAgICAgIHBhdGhfbGVhZl9iaChyaWdodF9wYXRoKSwKIAkJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJCWlmIChyZXQpIHsKQEAgLTI2NzIsNyArMjc2Miw3IEBACiAJCSAqIFdlIGhhdmUgdG8gdXBkYXRlIGlfbGFzdF9lYl9ibGsgZHVyaW5nIHRoZSBtZXRhCiAJCSAqIGRhdGEgZGVsZXRlLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBldCwKKwkJcmV0ID0gb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LAogCQkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNjg4LDcgKzI3NzgsNyBAQAogCSAqLwogCUJVR19PTihyaWdodF9oYXNfZW1wdHkgJiYgIWRlbF9yaWdodF9zdWJ0cmVlKTsKIAotCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcmlnaHRfcGF0aCwKKwlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCByaWdodF9wYXRoLAogCQkJCQkgICBzdWJ0cmVlX2luZGV4KTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI2OTYsMTQgKzI3ODYsMTQgQEAKIAl9CiAKIAlmb3IoaSA9IHN1YnRyZWVfaW5kZXggKyAxOyBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgewotCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsCisJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkgICByaWdodF9wYXRoLCBpKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsCisJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkgICBsZWZ0X3BhdGgsIGkpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNzQwLDkgKzI4MzAsOSBAQAogCQltbG9nX2Vycm5vKHJldCk7CiAKIAlpZiAoZGVsX3JpZ2h0X3N1YnRyZWUpIHsKLQkJb2NmczJfdW5saW5rX3N1YnRyZWUoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQlvY2ZzMl91bmxpbmtfc3VidHJlZShoYW5kbGUsIGV0LCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgsCiAJCQkJICAgICBzdWJ0cmVlX2luZGV4LCBkZWFsbG9jKTsKLQkJcmV0ID0gb2NmczJfdXBkYXRlX2VkZ2VfbGVuZ3Rocyhpbm9kZSwgaGFuZGxlLCBzdWJ0cmVlX2luZGV4LAorCQlyZXQgPSBvY2ZzMl91cGRhdGVfZWRnZV9sZW5ndGhzKGhhbmRsZSwgZXQsIHN1YnRyZWVfaW5kZXgsCiAJCQkJCQlsZWZ0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNzY2LDcgKzI4NTYsNyBAQAogCiAJCSpkZWxldGVkID0gMTsKIAl9IGVsc2UKLQkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQlvY2ZzMl9jb21wbGV0ZV9lZGdlX2luc2VydChoYW5kbGUsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKIAkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAKIG91dDoKQEAgLTI4NTIsOCArMjk0Miw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfcmlnaHRtb3N0X2xlYWZfbGVmdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfcm90YXRlX3JpZ2h0bW9zdF9sZWFmX2xlZnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKIHsKIAlpbnQgcmV0OwpAQCAtMjg2Myw3ICsyOTUzLDcgQEAKIAlpZiAoIW9jZnMyX2lzX2VtcHR5X2V4dGVudCgmZWwtPmxfcmVjc1swXSkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoLAorCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksIHBhdGgsCiAJCQkJCSAgIHBhdGhfbnVtX2l0ZW1zKHBhdGgpIC0gMSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yODgwLDI0ICsyOTcwLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX29jZnMyX3JvdGF0ZV90cmVlX2xlZnQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwgaW50IG9yaWdfY3JlZGl0cywKK3N0YXRpYyBpbnQgX19vY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgIGludCBvcmlnX2NyZWRpdHMsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKLQkJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKiplbXB0eV9leHRlbnRfcGF0aCwKLQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKKwkJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKiplbXB0eV9leHRlbnRfcGF0aCkKIHsKIAlpbnQgcmV0LCBzdWJ0cmVlX3Jvb3QsIGRlbGV0ZWQ7CiAJdTMyIHJpZ2h0X2Nwb3M7CiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGggPSBOVUxMOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAogCUJVR19PTighb2NmczJfaXNfZW1wdHlfZXh0ZW50KCYocGF0aF9sZWFmX2VsKHBhdGgpLT5sX3JlY3NbMF0pKSk7CiAKIAkqZW1wdHlfZXh0ZW50X3BhdGggPSBOVUxMOwogCi0JcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKGlub2RlLT5pX3NiLCBwYXRoLAotCQkJCQkgICAgICZyaWdodF9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc2IsIHBhdGgsICZyaWdodF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0yOTIwLDEzICszMDEwLDEzIEBACiAJfQogCiAJd2hpbGUgKHJpZ2h0X2Nwb3MpIHsKLQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcmlnaHRfcGF0aCwgcmlnaHRfY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc3VidHJlZV9yb290ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsIGxlZnRfcGF0aCwKKwkJc3VidHJlZV9yb290ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoZXQsIGxlZnRfcGF0aCwKIAkJCQkJCSAgICAgICByaWdodF9wYXRoKTsKIAogCQltbG9nKDAsICJTdWJ0cmVlIHJvb3QgYXQgaW5kZXggJWQgKGJsayAlbGx1LCBkZXB0aCAlZClcbiIsCkBAIC0yOTQ2LDE2ICszMDM2LDE2IEBACiAJCSAqIENhbGxlciBtaWdodCBzdGlsbCB3YW50IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUKIAkJICogdHJlZSByb290LCBzbyByZS1hZGQgaXQgdG8gdGhlIGpvdXJuYWwgaGVyZS4KIAkJICovCi0JCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCSAgIGxlZnRfcGF0aCwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gb2NmczJfcm90YXRlX3N1YnRyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgsCisJCXJldCA9IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX2xlZnQoaGFuZGxlLCBldCwgbGVmdF9wYXRoLAogCQkJCQkJcmlnaHRfcGF0aCwgc3VidHJlZV9yb290LAotCQkJCQkJZGVhbGxvYywgJmRlbGV0ZWQsIGV0KTsKKwkJCQkJCWRlYWxsb2MsICZkZWxldGVkKTsKIAkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CiAJCQkvKgogCQkJICogVGhlIHJvdGF0aW9uIGhhcyB0byB0ZW1wb3JhcmlseSBzdG9wIGR1ZSB0bwpAQCAtMjk4Miw3ICszMDcyLDcgQEAKIAogCQlvY2ZzMl9tdl9wYXRoKGxlZnRfcGF0aCwgcmlnaHRfcGF0aCk7CiAKLQkJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKGlub2RlLT5pX3NiLCBsZWZ0X3BhdGgsCisJCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzYiwgbGVmdF9wYXRoLAogCQkJCQkJICAgICAmcmlnaHRfY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI5OTcsMTAgKzMwODcsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3JlbW92ZV9yaWdodG1vc3RfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfcmlnaHRtb3N0X3BhdGgoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCXN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAotCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCiB7CiAJaW50IHJldCwgc3VidHJlZV9pbmRleDsKIAl1MzIgY3BvczsKQEAgLTMwMDksNyArMzA5OSw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAogCi0JcmV0ID0gb2NmczJfZXRfc2FuaXR5X2NoZWNrKGlub2RlLCBldCk7CisJcmV0ID0gb2NmczJfZXRfc2FuaXR5X2NoZWNrKGV0KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAkvKgpAQCAtMzAyNCwxMyArMzExNCwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGlub2RlLCBoYW5kbGUsIHBhdGgpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoZXQtPmV0X2NpLCBoYW5kbGUsIHBhdGgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcGF0aCwgJmNwb3MpOworCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpLAorCQkJCQkgICAgcGF0aCwgJmNwb3MpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMwNDgsMjMgKzMxMzksMjMgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGNwb3MpOworCQlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBsZWZ0X3BhdGgsIGNwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoKTsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChldC0+ZXRfY2ksIGhhbmRsZSwgbGVmdF9wYXRoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsIGxlZnRfcGF0aCwgcGF0aCk7CisJCXN1YnRyZWVfaW5kZXggPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChldCwgbGVmdF9wYXRoLCBwYXRoKTsKIAotCQlvY2ZzMl91bmxpbmtfc3VidHJlZShpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgsIHBhdGgsCisJCW9jZnMyX3VubGlua19zdWJ0cmVlKGhhbmRsZSwgZXQsIGxlZnRfcGF0aCwgcGF0aCwKIAkJCQkgICAgIHN1YnRyZWVfaW5kZXgsIGRlYWxsb2MpOwotCQlyZXQgPSBvY2ZzMl91cGRhdGVfZWRnZV9sZW5ndGhzKGlub2RlLCBoYW5kbGUsIHN1YnRyZWVfaW5kZXgsCisJCXJldCA9IG9jZnMyX3VwZGF0ZV9lZGdlX2xlbmd0aHMoaGFuZGxlLCBldCwgc3VidHJlZV9pbmRleCwKIAkJCQkJCWxlZnRfcGF0aCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMwNzgsMTAgKzMxNjksMTAgQEAKIAkJICogJ3BhdGgnIGlzIGFsc28gdGhlIGxlZnRtb3N0IHBhdGggd2hpY2gKIAkJICogbWVhbnMgaXQgbXVzdCBiZSB0aGUgb25seSBvbmUuIFRoaXMgZ2V0cwogCQkgKiBoYW5kbGVkIGRpZmZlcmVudGx5IGJlY2F1c2Ugd2Ugd2FudCB0bwotCQkgKiByZXZlcnQgdGhlIGlub2RlIGJhY2sgdG8gaGF2aW5nIGV4dGVudHMKKwkJICogcmV2ZXJ0IHRoZSByb290IGJhY2sgdG8gaGF2aW5nIGV4dGVudHMKIAkJICogaW4tbGluZS4KIAkJICovCi0JCW9jZnMyX3VubGlua19wYXRoKGlub2RlLCBoYW5kbGUsIGRlYWxsb2MsIHBhdGgsIDEpOworCQlvY2ZzMl91bmxpbmtfcGF0aChoYW5kbGUsIGV0LCBkZWFsbG9jLCBwYXRoLCAxKTsKIAogCQllbCA9IGV0LT5ldF9yb290X2VsOwogCQllbC0+bF90cmVlX2RlcHRoID0gMDsKQEAgLTMxMTQsMTAgKzMyMDUsMTAgQEAKICAqIHRoZSByaWdodG1vc3QgdHJlZSBsZWFmIHJlY29yZCBpcyByZW1vdmVkIHNvIHRoZSBjYWxsZXIgaXMKICAqIHJlc3BvbnNpYmxlIGZvciBkZXRlY3RpbmcgYW5kIGNvcnJlY3RpbmcgdGhhdC4KICAqLwotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKKwkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQogewogCWludCByZXQsIG9yaWdfY3JlZGl0cyA9IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqdG1wX3BhdGggPSBOVUxMLCAqcmVzdGFydF9wYXRoID0gTlVMTDsKQEAgLTMxMzQsOCArMzIyNSw3IEBACiAJCSAqIElubGluZSBleHRlbnRzLiBUaGlzIGlzIHRyaXZpYWxseSBoYW5kbGVkLCBzbyBkbwogCQkgKiBpdCB1cCBmcm9udC4KIAkJICovCi0JCXJldCA9IG9jZnMyX3JvdGF0ZV9yaWdodG1vc3RfbGVhZl9sZWZ0KGlub2RlLCBoYW5kbGUsCi0JCQkJCQkgICAgICAgcGF0aCk7CisJCXJldCA9IG9jZnMyX3JvdGF0ZV9yaWdodG1vc3RfbGVhZl9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMxNTEsNyArMzI0MSw3IEBACiAJICoKIAkgKiAgMSkgaXMgaGFuZGxlZCB2aWEgb2NmczJfcm90YXRlX3JpZ2h0bW9zdF9sZWFmX2xlZnQoKQogCSAqICAyYSkgd2UgbmVlZCB0aGUgbGVmdCBicmFuY2ggc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGl0IHdpdGggdGhlIHVubGluawotCSAqICAyYikgd2UgbmVlZCB0byBicmluZyB0aGUgaW5vZGUgYmFjayB0byBpbmxpbmUgZXh0ZW50cy4KKwkgKiAgMmIpIHdlIG5lZWQgdG8gYnJpbmcgdGhlIHJvb3QgYmFjayB0byBpbmxpbmUgZXh0ZW50cy4KIAkgKi8KIAogCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKilwYXRoX2xlYWZfYmgocGF0aCktPmJfZGF0YTsKQEAgLTMxNjcsOSArMzI1Nyw5IEBACiAKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IDApIHsKIAkJCXJldCA9IC1FSU87Ci0JCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCQkgICAgIklub2RlICVsbHUgaGFzIGVtcHR5IGV4dGVudCBibG9jayBhdCAlbGx1IiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQlvY2ZzMl9lcnJvcihvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGVtcHR5IGV4dGVudCBibG9jayBhdCAlbGx1IiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGViLT5oX2Jsa25vKSk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzE4Myw4ICszMjczLDggQEAKIAkJICogbm9uZW1wdHkgbGlzdC4KIAkJICovCiAKLQkJcmV0ID0gb2NmczJfcmVtb3ZlX3JpZ2h0bW9zdF9wYXRoKGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCQkgIGRlYWxsb2MsIGV0KTsKKwkJcmV0ID0gb2NmczJfcmVtb3ZlX3JpZ2h0bW9zdF9wYXRoKGhhbmRsZSwgZXQsIHBhdGgsCisJCQkJCQkgIGRlYWxsb2MpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMxOTUsOCArMzI4NSw4IEBACiAJICogYW5kIHJlc3RhcnRpbmcgZnJvbSB0aGVyZS4KIAkgKi8KIHRyeV9yb3RhdGU6Ci0JcmV0ID0gX19vY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIG9yaWdfY3JlZGl0cywgcGF0aCwKLQkJCQkgICAgICAgZGVhbGxvYywgJnJlc3RhcnRfcGF0aCwgZXQpOworCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChoYW5kbGUsIGV0LCBvcmlnX2NyZWRpdHMsIHBhdGgsCisJCQkJICAgICAgIGRlYWxsb2MsICZyZXN0YXJ0X3BhdGgpOwogCWlmIChyZXQgJiYgcmV0ICE9IC1FQUdBSU4pIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMyMDYsOSArMzI5Niw5IEBACiAJCXRtcF9wYXRoID0gcmVzdGFydF9wYXRoOwogCQlyZXN0YXJ0X3BhdGggPSBOVUxMOwogCi0JCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBvcmlnX2NyZWRpdHMsCisJCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChoYW5kbGUsIGV0LCBvcmlnX2NyZWRpdHMsCiAJCQkJCSAgICAgICB0bXBfcGF0aCwgZGVhbGxvYywKLQkJCQkJICAgICAgICZyZXN0YXJ0X3BhdGgsIGV0KTsKKwkJCQkJICAgICAgICZyZXN0YXJ0X3BhdGgpOwogCQlpZiAocmV0ICYmIHJldCAhPSAtRUFHQUlOKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTMyNTksNyArMzM0OSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG9jZnMyX2dldF9yaWdodF9wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IG9jZnMyX2dldF9yaWdodF9wYXRoKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCwKIAkJCQlzdHJ1Y3Qgb2NmczJfcGF0aCAqKnJldF9yaWdodF9wYXRoKQogewpAQCAtMzI3Niw4ICszMzY2LDggQEAKIAlsZWZ0X2VsID0gcGF0aF9sZWFmX2VsKGxlZnRfcGF0aCk7CiAJQlVHX09OKGxlZnRfZWwtPmxfbmV4dF9mcmVlX3JlYyAhPSBsZWZ0X2VsLT5sX2NvdW50KTsKIAotCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihpbm9kZS0+aV9zYiwgbGVmdF9wYXRoLAotCQkJCQkgICAgICZyaWdodF9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJCSAgICAgbGVmdF9wYXRoLCAmcmlnaHRfY3Bvcyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMzI5Myw3ICszMzgzLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0zMzEzLDkgKzM0MDMsOSBAQAogICogRm9yIGluZGV4ID09IGxfY291bnQgLSAxLCB0aGUgIm5leHQiIG1lYW5zIHRoZSAxc3QgZXh0ZW50IHJlYyBvZiB0aGUKICAqIG5leHQgZXh0ZW50IGJsb2NrLgogICovCi1zdGF0aWMgaW50IG9jZnMyX21lcmdlX3JlY19yaWdodChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAorc3RhdGljIGludCBvY2ZzMl9tZXJnZV9yZWNfcmlnaHQoc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCwKIAkJCQkgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKIAkJCQkgaW50IGluZGV4KQogewpAQCAtMzMzNiw3ICszNDI2LDcgQEAKIAlpZiAoaW5kZXggPT0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxICYmCiAJICAgIGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IGxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSkgewogCQkvKiB3ZSBtZWV0IHdpdGggYSBjcm9zcyBleHRlbnQgYmxvY2sgbWVyZ2UuICovCi0JCXJldCA9IG9jZnMyX2dldF9yaWdodF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsICZyaWdodF9wYXRoKTsKKwkJcmV0ID0gb2NmczJfZ2V0X3JpZ2h0X3BhdGgoZXQsIGxlZnRfcGF0aCwgJnJpZ2h0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTMzNTUsOCArMzQ0NSw4IEBACiAJCSAgICAgICBsZTE2X3RvX2NwdShsZWZ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSAhPQogCQkgICAgICAgbGUzMl90b19jcHUocmlnaHRfcmVjLT5lX2Nwb3MpKTsKIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsCi0JCQkJCQkJbGVmdF9wYXRoLCByaWdodF9wYXRoKTsKKwkJc3VidHJlZV9pbmRleCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsCisJCQkJCQkJcmlnaHRfcGF0aCk7CiAKIAkJcmV0ID0gb2NmczJfZXh0ZW5kX3JvdGF0ZV90cmFuc2FjdGlvbihoYW5kbGUsIHN1YnRyZWVfaW5kZXgsCiAJCQkJCQkgICAgICBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMsCkBAIC0zMzY5LDcgKzM0NTksNyBAQAogCQlyb290X2JoID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9pbmRleF0uYmg7CiAJCUJVR19PTihyb290X2JoICE9IHJpZ2h0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX2luZGV4XS5iaCk7CiAKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCByaWdodF9wYXRoLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCByaWdodF9wYXRoLAogCQkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMzNzgsMTQgKzM0NjgsMTQgQEAKIAogCQlmb3IgKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsKIAkJICAgICBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgewotCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCQkgICByaWdodF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkJICAgbGVmdF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zMzk4LDcgKzM0ODgsNyBAQAogCQlyaWdodF9yZWMgPSAmZWwtPmxfcmVjc1tpbmRleCArIDFdOwogCX0KIAotCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgbGVmdF9wYXRoLAorCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksIGxlZnRfcGF0aCwKIAkJCQkJICAgcGF0aF9udW1faXRlbXMobGVmdF9wYXRoKSAtIDEpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzQwOSw3ICszNDk5LDggQEAKIAogCWxlMzJfYWRkX2NwdSgmcmlnaHRfcmVjLT5lX2Nwb3MsIC1zcGxpdF9jbHVzdGVycyk7CiAJbGU2NF9hZGRfY3B1KCZyaWdodF9yZWMtPmVfYmxrbm8sCi0JCSAgICAgLW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgc3BsaXRfY2x1c3RlcnMpKTsKKwkJICAgICAtb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpLAorCQkJCQkgICAgICAgc3BsaXRfY2x1c3RlcnMpKTsKIAlsZTE2X2FkZF9jcHUoJnJpZ2h0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzLCBzcGxpdF9jbHVzdGVycyk7CiAKIAlvY2ZzMl9jbGVhbnVwX21lcmdlKGVsLCBpbmRleCk7CkBAIC0zNDIzLDggKzM1MTQsOCBAQAogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCi0JCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwKLQkJCQkJICAgcmlnaHRfcGF0aCwgc3VidHJlZV9pbmRleCk7CisJCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQkJCQkgICBzdWJ0cmVlX2luZGV4KTsKIAl9CiBvdXQ6CiAJaWYgKHJpZ2h0X3BhdGgpCkBAIC0zNDMyLDcgKzM1MjMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZ2V0X2xlZnRfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl9nZXRfbGVmdF9wYXRoKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKipyZXRfbGVmdF9wYXRoKQogewpAQCAtMzQ0NSw3ICszNTM2LDcgQEAKIAkvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIG5vbi10cmVlcy4gKi8KIAlCVUdfT04ocmlnaHRfcGF0aC0+cF90cmVlX2RlcHRoID09IDApOwogCi0JcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoaW5vZGUtPmlfc2IsCisJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCiAJCQkJCSAgICByaWdodF9wYXRoLCAmbGVmdF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTM0NjIsNyArMzU1Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBsZWZ0X2Nwb3MpOworCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIGxlZnRfcGF0aCwgbGVmdF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0zNDg1LDEyICszNTc2LDExIEBACiAgKiByZW1vdmUgdGhlIHJpZ2h0bW9zdCBsZWFmIGV4dGVudCBibG9jayBpbiB0aGUgcmlnaHRfcGF0aCBhbmQgY2hhbmdlCiAgKiB0aGUgcmlnaHQgcGF0aCB0byBpbmRpY2F0ZSB0aGUgbmV3IHJpZ2h0bW9zdCBwYXRoLgogICovCi1zdGF0aWMgaW50IG9jZnMyX21lcmdlX3JlY19sZWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCitzdGF0aWMgaW50IG9jZnMyX21lcmdlX3JlY19sZWZ0KHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCWhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAogCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJaW50IGluZGV4KQogewogCWludCByZXQsIGksIHN1YnRyZWVfaW5kZXggPSAwLCBoYXNfZW1wdHlfZXh0ZW50ID0gMDsKQEAgLTM1MDgsNyArMzU5OCw3IEBACiAJcmlnaHRfcmVjID0gJmVsLT5sX3JlY3NbaW5kZXhdOwogCWlmIChpbmRleCA9PSAwKSB7CiAJCS8qIHdlIG1lZXQgd2l0aCBhIGNyb3NzIGV4dGVudCBibG9jayBtZXJnZS4gKi8KLQkJcmV0ID0gb2NmczJfZ2V0X2xlZnRfcGF0aChpbm9kZSwgcmlnaHRfcGF0aCwgJmxlZnRfcGF0aCk7CisJCXJldCA9IG9jZnMyX2dldF9sZWZ0X3BhdGgoZXQsIHJpZ2h0X3BhdGgsICZsZWZ0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTM1MjQsOCArMzYxNCw4IEBACiAJCSAgICAgICBsZTE2X3RvX2NwdShsZWZ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSAhPQogCQkgICAgICAgbGUzMl90b19jcHUoc3BsaXRfcmVjLT5lX2Nwb3MpKTsKIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsCi0JCQkJCQkJbGVmdF9wYXRoLCByaWdodF9wYXRoKTsKKwkJc3VidHJlZV9pbmRleCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsCisJCQkJCQkJcmlnaHRfcGF0aCk7CiAKIAkJcmV0ID0gb2NmczJfZXh0ZW5kX3JvdGF0ZV90cmFuc2FjdGlvbihoYW5kbGUsIHN1YnRyZWVfaW5kZXgsCiAJCQkJCQkgICAgICBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMsCkBAIC0zNTM4LDcgKzM2MjgsNyBAQAogCQlyb290X2JoID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9pbmRleF0uYmg7CiAJCUJVR19PTihyb290X2JoICE9IHJpZ2h0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX2luZGV4XS5iaCk7CiAKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCByaWdodF9wYXRoLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCByaWdodF9wYXRoLAogCQkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTM1NDcsMTQgKzM2MzcsMTQgQEAKIAogCQlmb3IgKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsKIAkJICAgICBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgewotCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCQkgICByaWdodF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkJICAgbGVmdF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNTY3LDcgKzM2NTcsNyBAQAogCQkJaGFzX2VtcHR5X2V4dGVudCA9IDE7CiAJfQogCi0JcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCByaWdodF9wYXRoLAorCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksIHJpZ2h0X3BhdGgsCiAJCQkJCSAgIHBhdGhfbnVtX2l0ZW1zKHJpZ2h0X3BhdGgpIC0gMSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNTg2LDcgKzM2NzYsOCBAQAogCiAJbGUzMl9hZGRfY3B1KCZyaWdodF9yZWMtPmVfY3Bvcywgc3BsaXRfY2x1c3RlcnMpOwogCWxlNjRfYWRkX2NwdSgmcmlnaHRfcmVjLT5lX2Jsa25vLAotCQkgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgc3BsaXRfY2x1c3RlcnMpKTsKKwkJICAgICBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJCSAgICAgIHNwbGl0X2NsdXN0ZXJzKSk7CiAJbGUxNl9hZGRfY3B1KCZyaWdodF9yZWMtPmVfbGVhZl9jbHVzdGVycywgLXNwbGl0X2NsdXN0ZXJzKTsKIAogCW9jZnMyX2NsZWFudXBfbWVyZ2UoZWwsIGluZGV4KTsKQEAgLTM2MDgsOSArMzY5OSw5IEBACiAJCWlmIChsZTE2X3RvX2NwdShyaWdodF9yZWMtPmVfbGVhZl9jbHVzdGVycykgPT0gMCAmJgogCQkgICAgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMSkgewogCi0JCQlyZXQgPSBvY2ZzMl9yZW1vdmVfcmlnaHRtb3N0X3BhdGgoaW5vZGUsIGhhbmRsZSwKKwkJCXJldCA9IG9jZnMyX3JlbW92ZV9yaWdodG1vc3RfcGF0aChoYW5kbGUsIGV0LAogCQkJCQkJCSAgcmlnaHRfcGF0aCwKLQkJCQkJCQkgIGRlYWxsb2MsIGV0KTsKKwkJCQkJCQkgIGRlYWxsb2MpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCQlnb3RvIG91dDsKQEAgLTM2MjIsNyArMzcxMyw3IEBACiAJCQlvY2ZzMl9tdl9wYXRoKHJpZ2h0X3BhdGgsIGxlZnRfcGF0aCk7CiAJCQlsZWZ0X3BhdGggPSBOVUxMOwogCQl9IGVsc2UKLQkJCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwKKwkJCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGhhbmRsZSwgbGVmdF9wYXRoLAogCQkJCQkJICAgcmlnaHRfcGF0aCwgc3VidHJlZV9pbmRleCk7CiAJfQogb3V0OgpAQCAtMzYzMSwxNSArMzcyMiwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICAgaW50IHNwbGl0X2luZGV4LAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX21lcmdlX2N0eHQgKmN0eHQsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQotCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfbWVyZ2VfY3R4dCAqY3R4dCkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwpAQCAtMzY1NSw4ICszNzQ0LDcgQEAKIAkJICogZXh0ZW50cyAtIGhhdmluZyBtb3JlIHRoYW4gb25lIGluIGEgbGVhZiBpcwogCQkgKiBpbGxlZ2FsLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLAotCQkJCQkgICAgIGRlYWxsb2MsIGV0KTsKKwkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChoYW5kbGUsIGV0LCBwYXRoLCBkZWFsbG9jKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0zNjg1LDggKzM3NzMsNyBAQAogCQkgKiBwcmV2b2l1cyBleHRlbnQgYmxvY2suIEl0IGlzIG1vcmUgZWZmaWNpZW50IGFuZCBlYXNpZXIKIAkJICogaWYgd2UgZG8gbWVyZ2VfcmlnaHQgZmlyc3QgYW5kIG1lcmdlX2xlZnQgbGF0ZXIuCiAJCSAqLwotCQlyZXQgPSBvY2ZzMl9tZXJnZV9yZWNfcmlnaHQoaW5vZGUsIHBhdGgsCi0JCQkJCSAgICBoYW5kbGUsIHNwbGl0X3JlYywKKwkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX3JpZ2h0KHBhdGgsIGhhbmRsZSwgZXQsIHNwbGl0X3JlYywKIAkJCQkJICAgIHNwbGl0X2luZGV4KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzY5OSw4ICszNzg2LDcgQEAKIAkJQlVHX09OKCFvY2ZzMl9pc19lbXB0eV9leHRlbnQoJmVsLT5sX3JlY3NbMF0pKTsKIAogCQkvKiBUaGUgbWVyZ2UgbGVmdCB1cyB3aXRoIGFuIGVtcHR5IGV4dGVudCwgcmVtb3ZlIGl0LiAqLwotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCSAgICAgZGVhbGxvYywgZXQpOworCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgsIGRlYWxsb2MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTM3MTIsMTggKzM3OTgsMTUgQEAKIAkJICogTm90ZSB0aGF0IHdlIGRvbid0IHBhc3Mgc3BsaXRfcmVjIGhlcmUgb24gcHVycG9zZSAtCiAJCSAqIHdlJ3ZlIG1lcmdlZCBpdCBpbnRvIHRoZSByZWMgYWxyZWFkeS4KIAkJICovCi0JCXJldCA9IG9jZnMyX21lcmdlX3JlY19sZWZ0KGlub2RlLCBwYXRoLAotCQkJCQkgICBoYW5kbGUsIHJlYywKLQkJCQkJICAgZGVhbGxvYywgZXQsCi0JCQkJCSAgIHNwbGl0X2luZGV4KTsKKwkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX2xlZnQocGF0aCwgaGFuZGxlLCBldCwgcmVjLAorCQkJCQkgICBkZWFsbG9jLCBzcGxpdF9pbmRleCk7CiAKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCSAgICAgZGVhbGxvYywgZXQpOworCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgsIGRlYWxsb2MpOwogCQkvKgogCQkgKiBFcnJvciBmcm9tIHRoaXMgbGFzdCByb3RhdGUgaXMgbm90IGNyaXRpY2FsLCBzbwogCQkgKiBwcmludCBidXQgZG9uJ3QgYnViYmxlIGl0IHVwLgpAQCAtMzc0MCwxOSArMzgyMywxNiBAQAogCQkgKiB0aGUgcmVjb3JkIG9uIHRoZSBsZWZ0IChoZW5jZSB0aGUgbGVmdCBtZXJnZSkuCiAJCSAqLwogCQlpZiAoY3R4dC0+Y19jb250aWdfdHlwZSA9PSBDT05USUdfUklHSFQpIHsKLQkJCXJldCA9IG9jZnMyX21lcmdlX3JlY19sZWZ0KGlub2RlLAotCQkJCQkJICAgcGF0aCwKLQkJCQkJCSAgIGhhbmRsZSwgc3BsaXRfcmVjLAotCQkJCQkJICAgZGVhbGxvYywgZXQsCisJCQlyZXQgPSBvY2ZzMl9tZXJnZV9yZWNfbGVmdChwYXRoLCBoYW5kbGUsIGV0LAorCQkJCQkJICAgc3BsaXRfcmVjLCBkZWFsbG9jLAogCQkJCQkJICAgc3BsaXRfaW5kZXgpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXJldCA9IG9jZnMyX21lcmdlX3JlY19yaWdodChpbm9kZSwKLQkJCQkJCSAgICBwYXRoLAotCQkJCQkJICAgIGhhbmRsZSwgc3BsaXRfcmVjLAorCQkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX3JpZ2h0KHBhdGgsIGhhbmRsZSwKKwkJCQkJCSAgICBldCwgc3BsaXRfcmVjLAogCQkJCQkJICAgIHNwbGl0X2luZGV4KTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNzY1LDggKzM4NDUsOCBAQAogCQkJICogVGhlIG1lcmdlIG1heSBoYXZlIGxlZnQgYW4gZW1wdHkgZXh0ZW50IGluCiAJCQkgKiBvdXIgbGVhZi4gVHJ5IHRvIHJvdGF0ZSBpdCBhd2F5LgogCQkJICovCi0JCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCQkgICAgIGRlYWxsb2MsIGV0KTsKKwkJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaGFuZGxlLCBldCwgcGF0aCwKKwkJCQkJCSAgICAgZGVhbGxvYyk7CiAJCQlpZiAocmV0KQogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCXJldCA9IDA7CkBAIC0zODEyLDEwICszODkyLDEwIEBACiAgKiBsaXN0LiBJZiB0aGlzIGxlYWYgaXMgcGFydCBvZiBhbiBhbGxvY2F0aW9uIHRyZWUsIGl0IGlzIGFzc3VtZWQKICAqIHRoYXQgdGhlIHRyZWUgYWJvdmUgaGFzIGJlZW4gcHJlcGFyZWQuCiAgKi8KLXN0YXRpYyB2b2lkIG9jZnMyX2luc2VydF9hdF9sZWFmKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjLAorc3RhdGljIHZvaWQgb2NmczJfaW5zZXJ0X2F0X2xlYWYoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCiAJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCi0JCQkJIHN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSAqaW5zZXJ0LAotCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorCQkJCSBzdHJ1Y3Qgb2NmczJfaW5zZXJ0X3R5cGUgKmluc2VydCkKIHsKIAlpbnQgaSA9IGluc2VydC0+aW5zX2NvbnRpZ19pbmRleDsKIAl1bnNpZ25lZCBpbnQgcmFuZ2U7CkBAIC0zODI3LDcgKzM5MDcsOCBAQAogCQlpID0gb2NmczJfc2VhcmNoX2V4dGVudF9saXN0KGVsLCBsZTMyX3RvX2NwdShpbnNlcnRfcmVjLT5lX2Nwb3MpKTsKIAkJQlVHX09OKGkgPT0gLTEpOwogCQlyZWMgPSAmZWwtPmxfcmVjc1tpXTsKLQkJb2NmczJfc3VidHJhY3RfZnJvbV9yZWMoaW5vZGUtPmlfc2IsIGluc2VydC0+aW5zX3NwbGl0LCByZWMsCisJCW9jZnMyX3N1YnRyYWN0X2Zyb21fcmVjKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpLAorCQkJCQlpbnNlcnQtPmluc19zcGxpdCwgcmVjLAogCQkJCQlpbnNlcnRfcmVjKTsKIAkJZ290byByb3RhdGU7CiAJfQpAQCAtMzg2OSwxMCArMzk1MCwxMCBAQAogCiAJCW1sb2dfYnVnX29uX21zZyhsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA+PQogCQkJCWxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSwKLQkJCQkiaW5vZGUgJWx1LCBkZXB0aCAldSwgY291bnQgJXUsIG5leHQgZnJlZSAldSwgIgorCQkJCSJvd25lciAlbGx1LCBkZXB0aCAldSwgY291bnQgJXUsIG5leHQgZnJlZSAldSwgIgogCQkJCSJyZWMuY3BvcyAldSwgcmVjLmNsdXN0ZXJzICV1LCAiCiAJCQkJImluc2VydC5jcG9zICV1LCBpbnNlcnQuY2x1c3RlcnMgJXVcbiIsCi0JCQkJaW5vZGUtPmlfaW5vLAorCQkJCW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkJbGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCksCiAJCQkJbGUxNl90b19jcHUoZWwtPmxfY291bnQpLAogCQkJCWxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpLApAQCAtMzkwMCw4ICszOTgxLDggQEAKIAlvY2ZzMl9yb3RhdGVfbGVhZihlbCwgaW5zZXJ0X3JlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIHZvaWQgb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYykKIHsKQEAgLTM5MTksOSArNDAwMCw5IEBACiAKIAkJbmV4dF9mcmVlID0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYyk7CiAJCWlmIChuZXh0X2ZyZWUgPT0gMCkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJEaW5vZGUgJWxsdSBoYXMgYSBiYWQgZXh0ZW50IGxpc3QiLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisJCQlvY2ZzMl9lcnJvcihvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGEgYmFkIGV4dGVudCBsaXN0IiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpKTsKIAkJCXJldCA9IC1FSU87CiAJCQlyZXR1cm47CiAJCX0KQEAgLTM5NDEsNyArNDAyMiw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG9jZnMyX2FwcGVuZF9yZWNfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIGludCBvY2ZzMl9hcHBlbmRfcmVjX3RvX3BhdGgoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqKnJldF9sZWZ0X3BhdGgpCkBAIC0zOTY5LDggKzQwNTEsOCBAQAogCSAgICAobmV4dF9mcmVlID09IDEgJiYgb2NmczJfaXNfZW1wdHlfZXh0ZW50KCZlbC0+bF9yZWNzWzBdKSkpIHsKIAkJdTMyIGxlZnRfY3BvczsKIAotCQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcmlnaHRfcGF0aCwKLQkJCQkJCSAgICAmbGVmdF9jcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJCQkgICAgcmlnaHRfcGF0aCwgJmxlZnRfY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtMzk5Miw3ICs0MDc0LDggQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGxlZnRfY3Bvcyk7CisJCQlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBsZWZ0X3BhdGgsCisJCQkJCSAgICAgIGxlZnRfY3Bvcyk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJCWdvdG8gb3V0OwpAQCAtNDAwNSwxMyArNDA4OCwxMyBAQAogCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCByaWdodF9wYXRoKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCByaWdodF9wYXRoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGlub2RlLCBoYW5kbGUsIHJpZ2h0X3BhdGgsIGluc2VydF9yZWMpOworCW9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhoYW5kbGUsIGV0LCByaWdodF9wYXRoLCBpbnNlcnRfcmVjKTsKIAogCSpyZXRfbGVmdF9wYXRoID0gbGVmdF9wYXRoOwogCXJldCA9IDA7CkBAIC00MDIyLDcgKzQxMDUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX3NwbGl0X3JlY29yZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIHZvaWQgb2NmczJfc3BsaXRfcmVjb3JkKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCwKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCwKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLApAQCAtNDA5NSw3ICs0MTc4LDggQEAKIAl9CiAKIAlyZWMgPSAmZWwtPmxfcmVjc1tpbmRleF07Ci0Jb2NmczJfc3VidHJhY3RfZnJvbV9yZWMoaW5vZGUtPmlfc2IsIHNwbGl0LCByZWMsIHNwbGl0X3JlYyk7CisJb2NmczJfc3VidHJhY3RfZnJvbV9yZWMob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJc3BsaXQsIHJlYywgc3BsaXRfcmVjKTsKIAlvY2ZzMl9yb3RhdGVfbGVhZihpbnNlcnRfZWwsIHNwbGl0X3JlYyk7CiB9CiAKQEAgLTQxMDcsOCArNDE5MSw4IEBACiAgKiBpbi4gbGVmdF9wYXRoIHNob3VsZCBvbmx5IGJlIHBhc3NlZCBpbiBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGF0CiAgKiBwb3J0aW9uIG9mIHRoZSB0cmVlIGFmdGVyIGFuIGVkZ2UgaW5zZXJ0LgogICovCi1zdGF0aWMgaW50IG9jZnMyX2luc2VydF9wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX2luc2VydF9wYXRoKGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGgsCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYywKQEAgLTQxMzQsNyArNDIxOCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoKTsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChldC0+ZXRfY2ksIGhhbmRsZSwgbGVmdF9wYXRoKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNDE0NSw3ICs0MjI5LDcgQEAKIAkgKiBQYXNzIGJvdGggcGF0aHMgdG8gdGhlIGpvdXJuYWwuIFRoZSBtYWpvcml0eSBvZiBpbnNlcnRzCiAJICogd2lsbCBiZSB0b3VjaGluZyBhbGwgY29tcG9uZW50cyBhbnl3YXkuCiAJICovCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCByaWdodF9wYXRoKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCByaWdodF9wYXRoKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNDE1Nyw3ICs0MjQxLDcgQEAKIAkJICogb2Ygc3BsaXRzLCBidXQgaXQncyBlYXNpZXIgdG8ganVzdCBsZXQgb25lIHNlcGFyYXRlCiAJCSAqIGZ1bmN0aW9uIHNvcnQgaXQgYWxsIG91dC4KIAkJICovCi0JCW9jZnMyX3NwbGl0X3JlY29yZChpbm9kZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQlvY2ZzMl9zcGxpdF9yZWNvcmQoZXQsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKIAkJCQkgICBpbnNlcnRfcmVjLCBpbnNlcnQtPmluc19zcGxpdCk7CiAKIAkJLyoKQEAgLTQxNzEsOCArNDI1NSw4IEBACiAJCQlpZiAocmV0KQogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAl9IGVsc2UKLQkJb2NmczJfaW5zZXJ0X2F0X2xlYWYoaW5zZXJ0X3JlYywgcGF0aF9sZWFmX2VsKHJpZ2h0X3BhdGgpLAotCQkJCSAgICAgaW5zZXJ0LCBpbm9kZSk7CisJCW9jZnMyX2luc2VydF9hdF9sZWFmKGV0LCBpbnNlcnRfcmVjLCBwYXRoX2xlYWZfZWwocmlnaHRfcGF0aCksCisJCQkJICAgICBpbnNlcnQpOwogCiAJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGxlYWZfYmgpOwogCWlmIChyZXQpCkBAIC00MTg1LDEwICs0MjY5LDEwIEBACiAJCSAqCiAJCSAqIFhYWDogU2hvdWxkIHdlIGV4dGVuZCB0aGUgdHJhbnNhY3Rpb24gaGVyZT8KIAkJICovCi0JCXN1YnRyZWVfaW5kZXggPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChpbm9kZSwgbGVmdF9wYXRoLAorCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoZXQsIGxlZnRfcGF0aCwKIAkJCQkJCQlyaWdodF9wYXRoKTsKLQkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLAotCQkJCQkgICByaWdodF9wYXRoLCBzdWJ0cmVlX2luZGV4KTsKKwkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaGFuZGxlLCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgsCisJCQkJCSAgIHN1YnRyZWVfaW5kZXgpOwogCX0KIAogCXJldCA9IDA7CkBAIC00MTk2LDggKzQyODAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZG9faW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjLAogCQkJCSAgc3RydWN0IG9jZnMyX2luc2VydF90eXBlICp0eXBlKQpAQCAtNDIxMCw3ICs0MjkzLDcgQEAKIAogCWVsID0gZXQtPmV0X3Jvb3RfZWw7CiAKLQlyZXQgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDIxOCw3ICs0MzAxLDcgQEAKIAl9CiAKIAlpZiAobGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCkgPT0gMCkgewotCQlvY2ZzMl9pbnNlcnRfYXRfbGVhZihpbnNlcnRfcmVjLCBlbCwgdHlwZSwgaW5vZGUpOworCQlvY2ZzMl9pbnNlcnRfYXRfbGVhZihldCwgaW5zZXJ0X3JlYywgZWwsIHR5cGUpOwogCQlnb3RvIG91dF91cGRhdGVfY2x1c3RlcnM7CiAJfQogCkBAIC00MjQxLDcgKzQzMjQsNyBAQAogCQljcG9zID0gVUlOVF9NQVg7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCBjcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCByaWdodF9wYXRoLCBjcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC00MjYwLDcgKzQzNDMsNyBAQAogCSAqIGNhbiB3aW5kIHVwIHNraXBwaW5nIGJvdGggb2YgdGhlc2UgdHdvIHNwZWNpYWwgY2FzZXMuLi4KIAkgKi8KIAlpZiAocm90YXRlKSB7Ci0JCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX3JpZ2h0KGlub2RlLCBoYW5kbGUsIHR5cGUtPmluc19zcGxpdCwKKwkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfcmlnaHQoaGFuZGxlLCBldCwgdHlwZS0+aW5zX3NwbGl0LAogCQkJCQkgICAgICBsZTMyX3RvX2NwdShpbnNlcnRfcmVjLT5lX2Nwb3MpLAogCQkJCQkgICAgICByaWdodF9wYXRoLCAmbGVmdF9wYXRoKTsKIAkJaWYgKHJldCkgewpAQCAtNDI3Miw3ICs0MzU1LDcgQEAKIAkJICogb2NmczJfcm90YXRlX3RyZWVfcmlnaHQoKSBtaWdodCBoYXZlIGV4dGVuZGVkIHRoZQogCQkgKiB0cmFuc2FjdGlvbiB3aXRob3V0IHJlLWpvdXJuYWxpbmcgb3VyIHRyZWUgcm9vdC4KIAkJICovCi0JCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQsCisJCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDI4MCw3ICs0MzYzLDcgQEAKIAkJfQogCX0gZWxzZSBpZiAodHlwZS0+aW5zX2FwcGVuZGluZyA9PSBBUFBFTkRfVEFJTAogCQkgICAmJiB0eXBlLT5pbnNfY29udGlnICE9IENPTlRJR19MRUZUKSB7Ci0JCXJldCA9IG9jZnMyX2FwcGVuZF9yZWNfdG9fcGF0aChpbm9kZSwgaGFuZGxlLCBpbnNlcnRfcmVjLAorCQlyZXQgPSBvY2ZzMl9hcHBlbmRfcmVjX3RvX3BhdGgoaGFuZGxlLCBldCwgaW5zZXJ0X3JlYywKIAkJCQkJICAgICAgIHJpZ2h0X3BhdGgsICZsZWZ0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC00Mjg4LDcgKzQzNzEsNyBAQAogCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfaW5zZXJ0X3BhdGgoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCXJldCA9IG9jZnMyX2luc2VydF9wYXRoKGhhbmRsZSwgZXQsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKIAkJCQlpbnNlcnRfcmVjLCB0eXBlKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQyOTcsNyArNDM4MCw3IEBACiAKIG91dF91cGRhdGVfY2x1c3RlcnM6CiAJaWYgKHR5cGUtPmluc19zcGxpdCA9PSBTUExJVF9OT05FKQotCQlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LAorCQlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoZXQsCiAJCQkJCSBsZTE2X3RvX2NwdShpbnNlcnRfcmVjLT5lX2xlYWZfY2x1c3RlcnMpKTsKIAogCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBldC0+ZXRfcm9vdF9iaCk7CkBAIC00MzEyLDcgKzQzOTUsOCBAQAogfQogCiBzdGF0aWMgZW51bSBvY2ZzMl9jb250aWdfdHlwZQotb2NmczJfZmlndXJlX21lcmdlX2NvbnRpZ190eXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAorb2NmczJfZmlndXJlX21lcmdlX2NvbnRpZ190eXBlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwgaW50IGluZGV4LAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpzcGxpdF9yZWMpCiB7CkBAIC00MzI0LDEyICs0NDA4LDEyIEBACiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEwsICpyaWdodF9wYXRoID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAogCWlmIChpbmRleCA+IDApIHsKIAkJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXggLSAxXTsKIAl9IGVsc2UgaWYgKHBhdGgtPnBfdHJlZV9kZXB0aCA+IDApIHsKLQkJc3RhdHVzID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoaW5vZGUtPmlfc2IsCi0JCQkJCQkgICAgICAgcGF0aCwgJmxlZnRfY3Bvcyk7CisJCXN0YXR1cyA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKHNiLCBwYXRoLCAmbGVmdF9jcG9zKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0OwogCkBAIC00MzM4LDcgKzQ0MjIsOCBAQAogCQkJaWYgKCFsZWZ0X3BhdGgpCiAJCQkJZ290byBvdXQ7CiAKLQkJCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBsZWZ0X2Nwb3MpOworCQkJc3RhdHVzID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgbGVmdF9wYXRoLAorCQkJCQkJIGxlZnRfY3Bvcyk7CiAJCQlpZiAoc3RhdHVzKQogCQkJCWdvdG8gb3V0OwogCkBAIC00MzQ4LDcgKzQ0MzMsNyBAQAogCQkJICAgIGxlMTZfdG9fY3B1KG5ld19lbC0+bF9jb3VudCkpIHsKIAkJCQliaCA9IHBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpOwogCQkJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKiliaC0+Yl9kYXRhOwotCQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCW9jZnMyX2Vycm9yKHNiLAogCQkJCQkgICAgIkV4dGVudCBibG9jayAjJWxsdSBoYXMgYW4gIgogCQkJCQkgICAgImludmFsaWQgbF9uZXh0X2ZyZWVfcmVjIG9mICIKIAkJCQkJICAgICIlZC4gIEl0IHNob3VsZCBoYXZlICIKQEAgLTQzNzMsNyArNDQ1OCw3IEBACiAJCQlpZiAoc3BsaXRfcmVjLT5lX2Nwb3MgPT0gZWwtPmxfcmVjc1tpbmRleF0uZV9jcG9zKQogCQkJCXJldCA9IENPTlRJR19SSUdIVDsKIAkJfSBlbHNlIHsKLQkJCXJldCA9IG9jZnMyX2V4dGVudF9jb250aWcoaW5vZGUsIHJlYywgc3BsaXRfcmVjKTsKKwkJCXJldCA9IG9jZnMyX2V0X2V4dGVudF9jb250aWcoZXQsIHJlYywgc3BsaXRfcmVjKTsKIAkJfQogCX0KIApAQCAtNDM4Miw4ICs0NDY3LDcgQEAKIAkJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXggKyAxXTsKIAllbHNlIGlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSBsZTE2X3RvX2NwdShlbC0+bF9jb3VudCkgJiYKIAkJIHBhdGgtPnBfdHJlZV9kZXB0aCA+IDApIHsKLQkJc3RhdHVzID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKGlub2RlLT5pX3NiLAotCQkJCQkJCXBhdGgsICZyaWdodF9jcG9zKTsKKwkJc3RhdHVzID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKHNiLCBwYXRoLCAmcmlnaHRfY3Bvcyk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKIApAQCAtNDM5NCw3ICs0NDc4LDcgQEAKIAkJaWYgKCFyaWdodF9wYXRoKQogCQkJZ290byBvdXQ7CiAKLQkJc3RhdHVzID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKKwkJc3RhdHVzID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcmlnaHRfcGF0aCwgcmlnaHRfY3Bvcyk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKIApAQCAtNDQwNCw3ICs0NDg4LDcgQEAKIAkJCWlmIChsZTE2X3RvX2NwdShuZXdfZWwtPmxfbmV4dF9mcmVlX3JlYykgPD0gMSkgewogCQkJCWJoID0gcGF0aF9sZWFmX2JoKHJpZ2h0X3BhdGgpOwogCQkJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKiliaC0+Yl9kYXRhOwotCQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCW9jZnMyX2Vycm9yKHNiLAogCQkJCQkgICAgIkV4dGVudCBibG9jayAjJWxsdSBoYXMgYW4gIgogCQkJCQkgICAgImludmFsaWQgbF9uZXh0X2ZyZWVfcmVjIG9mICVkIiwKIAkJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZWItPmhfYmxrbm8pLApAQCAtNDQxOSw3ICs0NTAzLDcgQEAKIAlpZiAocmVjKSB7CiAJCWVudW0gb2NmczJfY29udGlnX3R5cGUgY29udGlnX3R5cGU7CiAKLQkJY29udGlnX3R5cGUgPSBvY2ZzMl9leHRlbnRfY29udGlnKGlub2RlLCByZWMsIHNwbGl0X3JlYyk7CisJCWNvbnRpZ190eXBlID0gb2NmczJfZXRfZXh0ZW50X2NvbnRpZyhldCwgcmVjLCBzcGxpdF9yZWMpOwogCiAJCWlmIChjb250aWdfdHlwZSA9PSBDT05USUdfTEVGVCAmJiByZXQgPT0gQ09OVElHX1JJR0hUKQogCQkJcmV0ID0gQ09OVElHX0xFRlRSSUdIVDsKQEAgLTQ0MzYsMTEgKzQ1MjAsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9maWd1cmVfY29udGlnX3R5cGUoc3RydWN0IGlub2RlICppbm9kZSwKK3N0YXRpYyB2b2lkIG9jZnMyX2ZpZ3VyZV9jb250aWdfdHlwZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2luc2VydF90eXBlICppbnNlcnQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpCiB7CiAJaW50IGk7CiAJZW51bSBvY2ZzMl9jb250aWdfdHlwZSBjb250aWdfdHlwZSA9IENPTlRJR19OT05FOwpAQCAtNDQ0OCw4ICs0NTMxLDggQEAKIAlCVUdfT04obGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCkgIT0gMCk7CiAKIAlmb3IoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKSB7Ci0JCWNvbnRpZ190eXBlID0gb2NmczJfZXh0ZW50X2NvbnRpZyhpbm9kZSwgJmVsLT5sX3JlY3NbaV0sCi0JCQkJCQkgIGluc2VydF9yZWMpOworCQljb250aWdfdHlwZSA9IG9jZnMyX2V0X2V4dGVudF9jb250aWcoZXQsICZlbC0+bF9yZWNzW2ldLAorCQkJCQkJICAgICBpbnNlcnRfcmVjKTsKIAkJaWYgKGNvbnRpZ190eXBlICE9IENPTlRJR19OT05FKSB7CiAJCQlpbnNlcnQtPmluc19jb250aWdfaW5kZXggPSBpOwogCQkJYnJlYWs7CkBAIC00NTMwLDggKzQ2MTMsNyBAQAogICogQWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgb24gdGhlIG9jZnMyX2luc2VydF90eXBlCiAgKiBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZmlndXJlX2luc2VydF90eXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgaW50IG9jZnMyX2ZpZ3VyZV9pbnNlcnRfdHlwZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYywKIAkJCQkgICAgaW50ICpmcmVlX3JlY29yZHMsCkBAIC00NTU1LDcgKzQ2MzcsNyBAQAogCQkgKiBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoKSBhbmQgb2NmczJfYWRkX2JyYW5jaCgpCiAJCSAqIG1heSB3YW50IGl0IGxhdGVyLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soaW5vZGUsCisJCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGV0LT5ldF9jaSwKIAkJCQkJICAgICAgb2NmczJfZXRfZ2V0X2xhc3RfZWJfYmxrKGV0KSwKIAkJCQkJICAgICAgJmJoKTsKIAkJaWYgKHJldCkgewpAQCAtNDU3OCw3ICs0NjYwLDcgQEAKIAkJbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYyk7CiAKIAlpZiAoIWluc2VydC0+aW5zX3RyZWVfZGVwdGgpIHsKLQkJb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjLCBldCk7CisJCW9jZnMyX2ZpZ3VyZV9jb250aWdfdHlwZShldCwgaW5zZXJ0LCBlbCwgaW5zZXJ0X3JlYyk7CiAJCW9jZnMyX2ZpZ3VyZV9hcHBlbmRpbmdfdHlwZShpbnNlcnQsIGVsLCBpbnNlcnRfcmVjKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDU5Niw3ICs0Njc4LDcgQEAKIAkgKiB1cyB0aGUgcmlnaHRtb3N0IHRyZWUgcGF0aC4gVGhpcyBpcyBhY2NvdW50ZWQgZm9yIGJlbG93IGluCiAJICogdGhlIGFwcGVuZGluZyBjb2RlLgogCSAqLwotCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgbGUzMl90b19jcHUoaW5zZXJ0X3JlYy0+ZV9jcG9zKSk7CisJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcGF0aCwgbGUzMl90b19jcHUoaW5zZXJ0X3JlYy0+ZV9jcG9zKSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNDYxMiw3ICs0Njk0LDcgQEAKICAgICAgICAgICogICAgIGludG8gdHdvIHR5cGVzIG9mIGFwcGVuZHM6IHNpbXBsZSByZWNvcmQgYXBwZW5kLCBvciBhCiAgICAgICAgICAqICAgICByb3RhdGUgaW5zaWRlIHRoZSB0YWlsIGxlYWYuCiAJICovCi0Jb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjLCBldCk7CisJb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGV0LCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjKTsKIAogCS8qCiAJICogVGhlIGluc2VydCBjb2RlIGlzbid0IHF1aXRlIHJlYWR5IHRvIGRlYWwgd2l0aCBhbGwgY2FzZXMgb2YKQEAgLTQ2NTcsMTMgKzQ3MzksMTEgQEAKIH0KIAogLyoKLSAqIEluc2VydCBhbiBleHRlbnQgaW50byBhbiBpbm9kZSBidHJlZS4KKyAqIEluc2VydCBhbiBleHRlbnQgaW50byBhIGJ0cmVlLgogICoKLSAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gdXBkYXRlIGZlLT5pX2NsdXN0ZXJzCisgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHVwZGF0ZSB0aGUgb3duaW5nIGJ0cmVlJ3MgY2x1c3RlciBjb3VudC4KICAqLwotaW50IG9jZnMyX2luc2VydF9leHRlbnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQloYW5kbGVfdCAqaGFuZGxlLAotCQkJc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsCiAJCQl1NjQgc3RhcnRfYmxrLApAQCAtNDY3NywyMSArNDc1NywyMiBAQAogCXN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSBpbnNlcnQgPSB7MCwgfTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyByZWM7CiAKLQltbG9nKDAsICJhZGQgJXUgY2x1c3RlcnMgYXQgcG9zaXRpb24gJXUgdG8gaW5vZGUgJWxsdVxuIiwKLQkgICAgIG5ld19jbHVzdGVycywgY3BvcywgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOworCW1sb2coMCwgImFkZCAldSBjbHVzdGVycyBhdCBwb3NpdGlvbiAldSB0byBvd25lciAlbGx1XG4iLAorCSAgICAgbmV3X2NsdXN0ZXJzLCBjcG9zLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpKTsKIAogCW1lbXNldCgmcmVjLCAwLCBzaXplb2YocmVjKSk7CiAJcmVjLmVfY3BvcyA9IGNwdV90b19sZTMyKGNwb3MpOwogCXJlYy5lX2Jsa25vID0gY3B1X3RvX2xlNjQoc3RhcnRfYmxrKTsKIAlyZWMuZV9sZWFmX2NsdXN0ZXJzID0gY3B1X3RvX2xlMTYobmV3X2NsdXN0ZXJzKTsKIAlyZWMuZV9mbGFncyA9IGZsYWdzOwotCXN0YXR1cyA9IG9jZnMyX2V0X2luc2VydF9jaGVjayhpbm9kZSwgZXQsICZyZWMpOworCXN0YXR1cyA9IG9jZnMyX2V0X2luc2VydF9jaGVjayhldCwgJnJlYyk7CiAJaWYgKHN0YXR1cykgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoaW5vZGUsIGV0LCAmbGFzdF9lYl9iaCwgJnJlYywKKwlzdGF0dXMgPSBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoZXQsICZsYXN0X2ViX2JoLCAmcmVjLAogCQkJCQkgICZmcmVlX3JlY29yZHMsICZpbnNlcnQpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTQ3MDUsNyArNDc4Niw3IEBACiAJICAgICBmcmVlX3JlY29yZHMsIGluc2VydC5pbnNfdHJlZV9kZXB0aCk7CiAKIAlpZiAoaW5zZXJ0Lmluc19jb250aWcgPT0gQ09OVElHX05PTkUgJiYgZnJlZV9yZWNvcmRzID09IDApIHsKLQkJc3RhdHVzID0gb2NmczJfZ3Jvd190cmVlKGlub2RlLCBoYW5kbGUsIGV0LAorCQlzdGF0dXMgPSBvY2ZzMl9ncm93X3RyZWUoaGFuZGxlLCBldCwKIAkJCQkJICZpbnNlcnQuaW5zX3RyZWVfZGVwdGgsICZsYXN0X2ViX2JoLAogCQkJCQkgbWV0YV9hYyk7CiAJCWlmIChzdGF0dXMpIHsKQEAgLTQ3MTUsMTEgKzQ3OTYsMTEgQEAKIAl9CiAKIAkvKiBGaW5hbGx5LCB3ZSBjYW4gYWRkIGNsdXN0ZXJzLiBUaGlzIG1pZ2h0IHJvdGF0ZSB0aGUgdHJlZSBmb3IgdXMuICovCi0Jc3RhdHVzID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnJlYywgJmluc2VydCk7CisJc3RhdHVzID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCAmcmVjLCAmaW5zZXJ0KTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwotCWVsc2UgaWYgKGV0LT5ldF9vcHMgPT0gJm9jZnMyX2Rpbm9kZV9ldF9vcHMpCi0JCW9jZnMyX2V4dGVudF9tYXBfaW5zZXJ0X3JlYyhpbm9kZSwgJnJlYyk7CisJZWxzZQorCQlvY2ZzMl9ldF9leHRlbnRfbWFwX2luc2VydChldCwgJnJlYyk7CiAKIGJhaWw6CiAJYnJlbHNlKGxhc3RfZWJfYmgpOwpAQCAtNDczNSwxMyArNDgxNiwxMSBAQAogICogaXQgaXMgbm90IGxpbWl0ZWQgdG8gdGhlIGZpbGUgc3RvcmFnZS4gQW55IGV4dGVudCB0cmVlIGNhbiB1c2UgdGhpcwogICogZnVuY3Rpb24gaWYgaXQgaW1wbGVtZW50cyB0aGUgcHJvcGVyIG9jZnMyX2V4dGVudF90cmVlLgogICovCi1pbnQgb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQl1MzIgKmxvZ2ljYWxfb2Zmc2V0LAogCQkJCXUzMiBjbHVzdGVyc190b19hZGQsCiAJCQkJaW50IG1hcmtfdW53cml0dGVuLAotCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKIAkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCQllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCAqcmVhc29uX3JldCkKQEAgLTQ3NTIsMTMgKzQ4MzEsMTUgQEAKIAl1MzIgYml0X29mZiwgbnVtX2JpdHM7CiAJdTY0IGJsb2NrOwogCXU4IGZsYWdzID0gMDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9CisJCU9DRlMyX1NCKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpKTsKIAogCUJVR19PTighY2x1c3RlcnNfdG9fYWRkKTsKIAogCWlmIChtYXJrX3Vud3JpdHRlbikKIAkJZmxhZ3MgPSBPQ0ZTMl9FWFRfVU5XUklUVEVOOwogCi0JZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGlub2RlLCBldCk7CisJZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGV0KTsKIAlpZiAoZnJlZV9leHRlbnRzIDwgMCkgewogCQlzdGF0dXMgPSBmcmVlX2V4dGVudHM7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTQ3OTUsNyArNDg3Niw3IEBACiAJQlVHX09OKG51bV9iaXRzID4gY2x1c3RlcnNfdG9fYWRkKTsKIAogCS8qIHJlc2VydmUgb3VyIHdyaXRlIGVhcmx5IC0tIGluc2VydF9leHRlbnQgbWF5IHVwZGF0ZSB0aGUgdHJlZSByb290ICovCi0Jc3RhdHVzID0gb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBldCwKKwlzdGF0dXMgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00ODAzLDEwICs0ODg0LDEwIEBACiAJfQogCiAJYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob3NiLT5zYiwgYml0X29mZik7Ci0JbWxvZygwLCAiQWxsb2NhdGluZyAldSBjbHVzdGVycyBhdCBibG9jayAldSBmb3IgaW5vZGUgJWxsdVxuIiwKLQkgICAgIG51bV9iaXRzLCBiaXRfb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7Ci0Jc3RhdHVzID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsIGV0LAotCQkJCSAgICAgKmxvZ2ljYWxfb2Zmc2V0LCBibG9jaywKKwltbG9nKDAsICJBbGxvY2F0aW5nICV1IGNsdXN0ZXJzIGF0IGJsb2NrICV1IGZvciBvd25lciAlbGx1XG4iLAorCSAgICAgbnVtX2JpdHMsIGJpdF9vZmYsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSkpOworCXN0YXR1cyA9IG9jZnMyX2luc2VydF9leHRlbnQoaGFuZGxlLCBldCwgKmxvZ2ljYWxfb2Zmc2V0LCBibG9jaywKIAkJCQkgICAgIG51bV9iaXRzLCBmbGFncywgbWV0YV9hYyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNDg1NiwxMCArNDkzNyw5IEBACiAJc3BsaXRfcmVjLT5lX2ZsYWdzID0gcmVjLT5lX2ZsYWdzOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3NwbGl0X2FuZF9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKK3N0YXRpYyBpbnQgb2NmczJfc3BsaXRfYW5kX2luc2VydChoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbGFzdF9lYl9iaCwKIAkJCQkgIGludCBzcGxpdF9pbmRleCwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpvcmlnX3NwbGl0X3JlYywKQEAgLTQ4OTIsNyArNDk3Miw3IEBACiAKIAlpZiAobGUxNl90b19jcHUocmlnaHRtb3N0X2VsLT5sX25leHRfZnJlZV9yZWMpID09CiAJICAgIGxlMTZfdG9fY3B1KHJpZ2h0bW9zdF9lbC0+bF9jb3VudCkpIHsKLQkJcmV0ID0gb2NmczJfZ3Jvd190cmVlKGlub2RlLCBoYW5kbGUsIGV0LAorCQlyZXQgPSBvY2ZzMl9ncm93X3RyZWUoaGFuZGxlLCBldCwKIAkJCQkgICAgICAmZGVwdGgsIGxhc3RfZWJfYmgsIG1ldGFfYWMpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC00OTIxLDggKzUwMDEsOCBAQAogCQkgKi8KIAkJaW5zZXJ0Lmluc19zcGxpdCA9IFNQTElUX1JJR0hUOwogCi0JCW9jZnMyX21ha2VfcmlnaHRfc3BsaXRfcmVjKGlub2RlLT5pX3NiLCAmdG1wcmVjLCBpbnNlcnRfcmFuZ2UsCi0JCQkJCSAgICZyZWMpOworCQlvY2ZzMl9tYWtlX3JpZ2h0X3NwbGl0X3JlYyhvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKSwKKwkJCQkJICAgJnRtcHJlYywgaW5zZXJ0X3JhbmdlLCAmcmVjKTsKIAogCQlzcGxpdF9yZWMgPSB0bXByZWM7CiAKQEAgLTQ5MzAsNyArNTAxMCw3IEBACiAJCWRvX2xlZnRyaWdodCA9IDE7CiAJfQogCi0JcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnNwbGl0X3JlYywgJmluc2VydCk7CisJcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCAmc3BsaXRfcmVjLCAmaW5zZXJ0KTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC00OTQ2LDcgKzUwMjYsNyBAQAogCQlvY2ZzMl9yZWluaXRfcGF0aChwYXRoLCAxKTsKIAogCQljcG9zID0gbGUzMl90b19jcHUoc3BsaXRfcmVjLmVfY3Bvcyk7Ci0JCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgY3Bvcyk7CisJCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIHBhdGgsIGNwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTQ5NjEsOCArNTA0MSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yZXBsYWNlX2V4dGVudF9yZWMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfcmVwbGFjZV9leHRlbnRfcmVjKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAogCQkJCSAgICBpbnQgc3BsaXRfaW5kZXgsCkBAIC00OTcwLDcgKzUwNTAsNyBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGgsCisJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwgcGF0aCwKIAkJCQkJICAgcGF0aF9udW1faXRlbXMocGF0aCkgLSAxKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQ5ODUsOSArNTA2NSw4IEBACiB9CiAKIC8qCi0gKiBNYXJrIHBhcnQgb3IgYWxsIG9mIHRoZSBleHRlbnQgcmVjb3JkIGF0IHNwbGl0X2luZGV4IGluIHRoZSBsZWFmCi0gKiBwb2ludGVkIHRvIGJ5IHBhdGggYXMgd3JpdHRlbi4gVGhpcyByZW1vdmVzIHRoZSB1bndyaXR0ZW4KLSAqIGV4dGVudCBmbGFnLgorICogU3BsaXQgcGFydCBvciBhbGwgb2YgdGhlIGV4dGVudCByZWNvcmQgYXQgc3BsaXRfaW5kZXggaW4gdGhlIGxlYWYKKyAqIHBvaW50ZWQgdG8gYnkgcGF0aC4gTWVyZ2Ugd2l0aCB0aGUgY29udGlndW91cyBleHRlbnQgcmVjb3JkIGlmIG5lZWRlZC4KICAqCiAgKiBDYXJlIGlzIHRha2VuIHRvIGhhbmRsZSBjb250aWd1b3VzbmVzcyBzbyBhcyB0byBub3QgZ3JvdyB0aGUgdHJlZS4KICAqCkBAIC01MDA0LDE0ICs1MDgzLDEzIEBACiAgKiBoYXZlIGJlZW4gYnJvdWdodCBpbnRvIGNhY2hlIChhbmQgcGlubmVkIHZpYSB0aGUgam91cm5hbCksIHNvIHRoZQogICogZXh0cmEgb3ZlcmhlYWQgaXMgbm90IGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBkaXNrIHJlYWRzLgogICovCi1zdGF0aWMgaW50IF9fb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkgICAgICAgaW50IHNwbGl0X2luZGV4LAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKLQkJCQkgICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCitpbnQgb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCisJCSAgICAgICBpbnQgc3BsaXRfaW5kZXgsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwpAQCAtNTAyMCwxMiArNTA5OCw2IEBACiAJc3RydWN0IG9jZnMyX21lcmdlX2N0eHQgY3R4dDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnJpZ2h0bW9zdF9lbDsKIAotCWlmICghKHJlYy0+ZV9mbGFncyAmIE9DRlMyX0VYVF9VTldSSVRURU4pKSB7Ci0JCXJldCA9IC1FSU87Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSA+IGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+ZV9jcG9zKSB8fAogCSAgICAoKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSArIGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSkgPAogCSAgICAgKGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+ZV9jcG9zKSArIGxlMTZfdG9fY3B1KHNwbGl0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSkpKSB7CkBAIC01MDM0LDE5ICs1MTA2LDE5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWN0eHQuY19jb250aWdfdHlwZSA9IG9jZnMyX2ZpZ3VyZV9tZXJnZV9jb250aWdfdHlwZShpbm9kZSwgcGF0aCwgZWwsCisJY3R4dC5jX2NvbnRpZ190eXBlID0gb2NmczJfZmlndXJlX21lcmdlX2NvbnRpZ190eXBlKGV0LCBwYXRoLCBlbCwKIAkJCQkJCQkgICAgc3BsaXRfaW5kZXgsCiAJCQkJCQkJICAgIHNwbGl0X3JlYyk7CiAKIAkvKgogCSAqIFRoZSBjb3JlIG1lcmdlIC8gc3BsaXQgY29kZSB3YW50cyB0byBrbm93IGhvdyBtdWNoIHJvb20gaXMKLQkgKiBsZWZ0IGluIHRoaXMgaW5vZGVzIGFsbG9jYXRpb24gdHJlZSwgc28gd2UgcGFzcyB0aGUKKwkgKiBsZWZ0IGluIHRoaXMgYWxsb2NhdGlvbiB0cmVlLCBzbyB3ZSBwYXNzIHRoZQogCSAqIHJpZ2h0bW9zdCBleHRlbnQgbGlzdC4KIAkgKi8KIAlpZiAocGF0aC0+cF90cmVlX2RlcHRoKSB7CiAJCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCi0JCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGlub2RlLAorCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhldC0+ZXRfY2ksCiAJCQkJCSAgICAgIG9jZnMyX2V0X2dldF9sYXN0X2ViX2JsayhldCksCiAJCQkJCSAgICAgICZsYXN0X2ViX2JoKTsKIAkJaWYgKHJldCkgewpAQCAtNTA3MywxOSArNTE0NSwxOCBAQAogCiAJaWYgKGN0eHQuY19jb250aWdfdHlwZSA9PSBDT05USUdfTk9ORSkgewogCQlpZiAoY3R4dC5jX3NwbGl0X2NvdmVyc19yZWMpCi0JCQlyZXQgPSBvY2ZzMl9yZXBsYWNlX2V4dGVudF9yZWMoaW5vZGUsIGhhbmRsZSwKLQkJCQkJCSAgICAgICBwYXRoLCBlbCwKKwkJCXJldCA9IG9jZnMyX3JlcGxhY2VfZXh0ZW50X3JlYyhoYW5kbGUsIGV0LCBwYXRoLCBlbCwKIAkJCQkJCSAgICAgICBzcGxpdF9pbmRleCwgc3BsaXRfcmVjKTsKIAkJZWxzZQotCQkJcmV0ID0gb2NmczJfc3BsaXRfYW5kX2luc2VydChpbm9kZSwgaGFuZGxlLCBwYXRoLCBldCwKKwkJCXJldCA9IG9jZnMyX3NwbGl0X2FuZF9pbnNlcnQoaGFuZGxlLCBldCwgcGF0aCwKIAkJCQkJCSAgICAgJmxhc3RfZWJfYmgsIHNwbGl0X2luZGV4LAogCQkJCQkJICAgICBzcGxpdF9yZWMsIG1ldGFfYWMpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCX0gZWxzZSB7Ci0JCXJldCA9IG9jZnMyX3RyeV90b19tZXJnZV9leHRlbnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwKKwkJcmV0ID0gb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChoYW5kbGUsIGV0LCBwYXRoLAogCQkJCQkJc3BsaXRfaW5kZXgsIHNwbGl0X3JlYywKLQkJCQkJCWRlYWxsb2MsICZjdHh0LCBldCk7CisJCQkJCQlkZWFsbG9jLCAmY3R4dCk7CiAJCWlmIChyZXQpCiAJCQltbG9nX2Vycm5vKHJldCk7CiAJfQpAQCAtNTA5Niw3ICs1MTY3LDEwMCBAQAogfQogCiAvKgorICogQ2hhbmdlIHRoZSBmbGFncyBvZiB0aGUgYWxyZWFkeS1leGlzdGluZyBleHRlbnQgYXQgY3BvcyBmb3IgbGVuIGNsdXN0ZXJzLgorICoKKyAqIG5ld19mbGFnczogdGhlIGZsYWdzIHdlIHdhbnQgdG8gc2V0LgorICogY2xlYXJfZmxhZ3M6IHRoZSBmbGFncyB3ZSB3YW50IHRvIGNsZWFyLgorICogcGh5czogdGhlIG5ldyBwaHlzaWNhbCBvZmZzZXQgd2Ugd2FudCB0aGlzIG5ldyBleHRlbnQgc3RhcnRzIGZyb20uCisgKgorICogSWYgdGhlIGV4aXN0aW5nIGV4dGVudCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdCwgaW5pdGlhdGUgYQorICogc3BsaXQuIEFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGF0IG1lcmdpbmcgd2l0aCBhZGphY2VudCBleHRlbnRzLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgZG93biBtZXRhX2FjIGlmIHdlJ2xsIG5lZWQgaXQuCisgKi8KK2ludCBvY2ZzMl9jaGFuZ2VfZXh0ZW50X2ZsYWcoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICAgdTMyIGNwb3MsIHUzMiBsZW4sIHUzMiBwaHlzLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgIGludCBuZXdfZmxhZ3MsIGludCBjbGVhcl9mbGFncykKK3sKKwlpbnQgcmV0LCBpbmRleDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSk7CisJdTY0IHN0YXJ0X2Jsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCBwaHlzKTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyBzcGxpdF9yZWM7CisJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjOworCisJbGVmdF9wYXRoID0gb2NmczJfbmV3X3BhdGhfZnJvbV9ldChldCk7CisJaWYgKCFsZWZ0X3BhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBsZWZ0X3BhdGgsIGNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKKworCWluZGV4ID0gb2NmczJfc2VhcmNoX2V4dGVudF9saXN0KGVsLCBjcG9zKTsKKwlpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPj0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykpIHsKKwkJb2NmczJfZXJyb3Ioc2IsCisJCQkgICAgIk93bmVyICVsbHUgaGFzIGFuIGV4dGVudCBhdCBjcG9zICV1IHdoaWNoIGNhbiBubyAiCisJCQkgICAgImxvbmdlciBiZSBmb3VuZC5cbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgIG9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksIGNwb3MpOworCQlyZXQgPSAtRVJPRlM7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IC1FSU87CisJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXhdOworCWlmIChuZXdfZmxhZ3MgJiYgKHJlYy0+ZV9mbGFncyAmIG5ld19mbGFncykpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIk93bmVyICVsbHUgdHJpZWQgdG8gc2V0ICVkIGZsYWdzIG9uIGFuICIKKwkJICAgICAiZXh0ZW50IHRoYXQgYWxyZWFkeSBoYWQgdGhlbSIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpLAorCQkgICAgIG5ld19mbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjbGVhcl9mbGFncyAmJiAhKHJlYy0+ZV9mbGFncyAmIGNsZWFyX2ZsYWdzKSkgeworCQltbG9nKE1MX0VSUk9SLCAiT3duZXIgJWxsdSB0cmllZCB0byBjbGVhciAlZCBmbGFncyBvbiBhbiAiCisJCSAgICAgImV4dGVudCB0aGF0IGRpZG4ndCBoYXZlIHRoZW0iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKKwkJICAgICBjbGVhcl9mbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldCgmc3BsaXRfcmVjLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpKTsKKwlzcGxpdF9yZWMuZV9jcG9zID0gY3B1X3RvX2xlMzIoY3Bvcyk7CisJc3BsaXRfcmVjLmVfbGVhZl9jbHVzdGVycyA9IGNwdV90b19sZTE2KGxlbik7CisJc3BsaXRfcmVjLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChzdGFydF9ibGtubyk7CisJc3BsaXRfcmVjLmVfZmxhZ3MgPSByZWMtPmVfZmxhZ3M7CisJaWYgKG5ld19mbGFncykKKwkJc3BsaXRfcmVjLmVfZmxhZ3MgfD0gbmV3X2ZsYWdzOworCWlmIChjbGVhcl9mbGFncykKKwkJc3BsaXRfcmVjLmVfZmxhZ3MgJj0gfmNsZWFyX2ZsYWdzOworCisJcmV0ID0gb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZSwgZXQsIGxlZnRfcGF0aCwKKwkJCQkgaW5kZXgsICZzcGxpdF9yZWMsIG1ldGFfYWMsCisJCQkJIGRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOworCXJldHVybiByZXQ7CisKK30KKworLyoKICAqIE1hcmsgdGhlIGFscmVhZHktZXhpc3RpbmcgZXh0ZW50IGF0IGNwb3MgYXMgd3JpdHRlbiBmb3IgbGVuIGNsdXN0ZXJzLgorICogVGhpcyByZW1vdmVzIHRoZSB1bndyaXR0ZW4gZXh0ZW50IGZsYWcuCiAgKgogICogSWYgdGhlIGV4aXN0aW5nIGV4dGVudCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdCwgaW5pdGlhdGUgYQogICogc3BsaXQuIEFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGF0IG1lcmdpbmcgd2l0aCBhZGphY2VudCBleHRlbnRzLgpAQCAtNTEwOSwxNCArNTI3MywxMCBAQAogCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKIHsKLQlpbnQgcmV0LCBpbmRleDsKLQl1NjQgc3RhcnRfYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBoeXMpOwotCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjIHNwbGl0X3JlYzsKLQlzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOworCWludCByZXQ7CiAKLQltbG9nKDAsICJJbm9kZSAlbHUgY3BvcyAldSwgbGVuICV1LCBwaHlzICV1ICglbGx1KVxuIiwKLQkgICAgIGlub2RlLT5pX2lubywgY3BvcywgbGVuLCBwaHlzLCAodW5zaWduZWQgbG9uZyBsb25nKXN0YXJ0X2Jsa25vKTsKKwltbG9nKDAsICJJbm9kZSAlbHUgY3BvcyAldSwgbGVuICV1LCBwaHlzIGNsdXN0ZXJzICV1XG4iLAorCSAgICAgaW5vZGUtPmlfaW5vLCBjcG9zLCBsZW4sIHBoeXMpOwogCiAJaWYgKCFvY2ZzMl93cml0ZXNfdW53cml0dGVuX2V4dGVudHMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkgewogCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsbHUgaGFzIHVud3JpdHRlbiBleHRlbnRzICIKQEAgLTUxMzAsNTcgKzUyOTAsMjEgQEAKIAkvKgogCSAqIFhYWDogVGhpcyBzaG91bGQgYmUgZml4ZWQgdXAgc28gdGhhdCB3ZSBqdXN0IHJlLWluc2VydCB0aGUKIAkgKiBuZXh0IGV4dGVudCByZWNvcmRzLgotCSAqCi0JICogWFhYOiBUaGlzIGlzIGEgaGFjayBvbiB0aGUgZXh0ZW50IHRyZWUsIG1heWJlIGl0IHNob3VsZCBiZQotCSAqIGFuIG9wPwogCSAqLwotCWlmIChldC0+ZXRfb3BzID09ICZvY2ZzMl9kaW5vZGVfZXRfb3BzKQotCQlvY2ZzMl9leHRlbnRfbWFwX3RydW5jKGlub2RlLCAwKTsKKwlvY2ZzMl9ldF9leHRlbnRfbWFwX3RydW5jYXRlKGV0LCAwKTsKIAotCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoZXQpOwotCWlmICghbGVmdF9wYXRoKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGNwb3MpOwotCWlmIChyZXQpIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0JZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKLQotCWluZGV4ID0gb2NmczJfc2VhcmNoX2V4dGVudF9saXN0KGVsLCBjcG9zKTsKLQlpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPj0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykpIHsKLQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkgICAgIklub2RlICVsbHUgaGFzIGFuIGV4dGVudCBhdCBjcG9zICV1IHdoaWNoIGNhbiBubyAiCi0JCQkgICAgImxvbmdlciBiZSBmb3VuZC5cbiIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIGNwb3MpOwotCQlyZXQgPSAtRVJPRlM7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbXNldCgmc3BsaXRfcmVjLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpKTsKLQlzcGxpdF9yZWMuZV9jcG9zID0gY3B1X3RvX2xlMzIoY3Bvcyk7Ci0Jc3BsaXRfcmVjLmVfbGVhZl9jbHVzdGVycyA9IGNwdV90b19sZTE2KGxlbik7Ci0Jc3BsaXRfcmVjLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChzdGFydF9ibGtubyk7Ci0Jc3BsaXRfcmVjLmVfZmxhZ3MgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKS0+bF9yZWNzW2luZGV4XS5lX2ZsYWdzOwotCXNwbGl0X3JlYy5lX2ZsYWdzICY9IH5PQ0ZTMl9FWFRfVU5XUklUVEVOOwotCi0JcmV0ID0gX19vY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKGlub2RlLCBldCwgaGFuZGxlLCBsZWZ0X3BhdGgsCi0JCQkJCSAgaW5kZXgsICZzcGxpdF9yZWMsIG1ldGFfYWMsCi0JCQkJCSAgZGVhbGxvYyk7CisJcmV0ID0gb2NmczJfY2hhbmdlX2V4dGVudF9mbGFnKGhhbmRsZSwgZXQsIGNwb3MsCisJCQkJICAgICAgIGxlbiwgcGh5cywgbWV0YV9hYywgZGVhbGxvYywKKwkJCQkgICAgICAgMCwgT0NGUzJfRVhUX1VOV1JJVFRFTik7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiBvdXQ6Ci0Jb2NmczJfZnJlZV9wYXRoKGxlZnRfcGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9zcGxpdF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCitzdGF0aWMgaW50IG9jZnMyX3NwbGl0X3RyZWUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKIAkJCSAgICBpbnQgaW5kZXgsIHUzMiBuZXdfcmFuZ2UsCiAJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CkBAIC01MTk3LDExICs1MzIxLDEyIEBACiAJICovCiAJZWwgPSBwYXRoX2xlYWZfZWwocGF0aCk7CiAJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXhdOwotCW9jZnMyX21ha2VfcmlnaHRfc3BsaXRfcmVjKGlub2RlLT5pX3NiLCAmc3BsaXRfcmVjLCBuZXdfcmFuZ2UsIHJlYyk7CisJb2NmczJfbWFrZV9yaWdodF9zcGxpdF9yZWMob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgJnNwbGl0X3JlYywgbmV3X3JhbmdlLCByZWMpOwogCiAJZGVwdGggPSBwYXRoLT5wX3RyZWVfZGVwdGg7CiAJaWYgKGRlcHRoID4gMCkgewotCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhpbm9kZSwKKwkJcmV0ID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soZXQtPmV0X2NpLAogCQkJCQkgICAgICBvY2ZzMl9ldF9nZXRfbGFzdF9lYl9ibGsoZXQpLAogCQkJCQkgICAgICAmbGFzdF9lYl9iaCk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC01MjI0LDcgKzUzNDksNyBAQAogCiAJaWYgKGxlMTZfdG9fY3B1KHJpZ2h0bW9zdF9lbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PQogCSAgICBsZTE2X3RvX2NwdShyaWdodG1vc3RfZWwtPmxfY291bnQpKSB7Ci0JCXJldCA9IG9jZnMyX2dyb3dfdHJlZShpbm9kZSwgaGFuZGxlLCBldCwgJmRlcHRoLCAmbGFzdF9lYl9iaCwKKwkJcmV0ID0gb2NmczJfZ3Jvd190cmVlKGhhbmRsZSwgZXQsICZkZXB0aCwgJmxhc3RfZWJfYmgsCiAJCQkJICAgICAgbWV0YV9hYyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTUyMzgsNyArNTM2Myw3IEBACiAJaW5zZXJ0Lmluc19zcGxpdCA9IFNQTElUX1JJR0hUOwogCWluc2VydC5pbnNfdHJlZV9kZXB0aCA9IGRlcHRoOwogCi0JcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnNwbGl0X3JlYywgJmluc2VydCk7CisJcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCAmc3BsaXRfcmVjLCAmaW5zZXJ0KTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKQEAgLTUyNDcsMjMgKzUzNzIsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3RydW5jYXRlX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIGludCBvY2ZzMl90cnVuY2F0ZV9yZWMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgaW50IGluZGV4LAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCi0JCQkgICAgICB1MzIgY3BvcywgdTMyIGxlbiwKLQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCisJCQkgICAgICB1MzIgY3BvcywgdTMyIGxlbikKIHsKIAlpbnQgcmV0OwogCXUzMiBsZWZ0X2Nwb3MsIHJlY19yYW5nZSwgdHJ1bmNfcmFuZ2U7CiAJaW50IHdhbnRzX3JvdGF0ZSA9IDAsIGlzX3JpZ2h0bW9zdF90cmVlX3JlYyA9IDA7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAKIAlpZiAob2NmczJfaXNfZW1wdHlfZXh0ZW50KCZlbC0+bF9yZWNzWzBdKSAmJiBpbmRleCA+IDApIHsKLQkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLCBkZWFsbG9jLCBldCk7CisJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaGFuZGxlLCBldCwgcGF0aCwgZGVhbGxvYyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNTI5NSwxNCArNTQyMCwxMyBAQAogCQkgKiBieSB0aGlzIGxlYWYgYW5kIHRoZSBvbmUgdG8gaXQncyBsZWZ0LgogCQkgKgogCQkgKiBUaGVyZSBhcmUgdHdvIGNhc2VzIHdlIGNhbiBza2lwOgotCQkgKiAgIDEpIFBhdGggaXMgdGhlIGxlZnRtb3N0IG9uZSBpbiBvdXIgaW5vZGUgdHJlZS4KKwkJICogICAxKSBQYXRoIGlzIHRoZSBsZWZ0bW9zdCBvbmUgaW4gb3VyIGJ0cmVlLgogCQkgKiAgIDIpIFRoZSBsZWFmIGlzIHJpZ2h0bW9zdCBhbmQgd2lsbCBiZSBlbXB0eSBhZnRlcgogCQkgKiAgICAgIHdlIHJlbW92ZSB0aGUgZXh0ZW50IHJlY29yZCAtIHRoZSByb3RhdGUgY29kZQogCQkgKiAgICAgIGtub3dzIGhvdyB0byB1cGRhdGUgdGhlIG5ld2x5IGZvcm1lZCBlZGdlLgogCQkgKi8KIAotCQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcGF0aCwKLQkJCQkJCSAgICAmbGVmdF9jcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoc2IsIHBhdGgsICZsZWZ0X2Nwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTUzMTYsNyArNTQ0MCw4IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBsZWZ0X2Nwb3MpOworCQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgbGVmdF9wYXRoLAorCQkJCQkgICAgICBsZWZ0X2Nwb3MpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCQlnb3RvIG91dDsKQEAgLTUzMzIsMTMgKzU0NTcsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBwYXRoKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCBwYXRoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoZXQtPmV0X2NpLCBoYW5kbGUsIGxlZnRfcGF0aCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNTM2MSw3ICs1NDg2LDcgQEAKIAkJCSAqIGJlIGRlbGV0ZWQgYnkgdGhlIHJvdGF0ZSBjb2RlLgogCQkJICovCiAJCQlyZWMgPSAmZWwtPmxfcmVjc1tuZXh0X2ZyZWUgLSAxXTsKLQkJCW9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3Jkcyhpbm9kZSwgaGFuZGxlLCBwYXRoLAorCQkJb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZSwgZXQsIHBhdGgsCiAJCQkJCQkgICAgICAgcmVjKTsKIAkJfQogCX0gZWxzZSBpZiAobGUzMl90b19jcHUocmVjLT5lX2Nwb3MpID09IGNwb3MpIHsKQEAgLTUzNzMsMTEgKzU0OTgsMTIgQEAKIAkJLyogUmVtb3ZlIHJpZ2h0bW9zdCBwb3J0aW9uIG9mIHRoZSByZWNvcmQgKi8KIAkJbGUxNl9hZGRfY3B1KCZyZWMtPmVfbGVhZl9jbHVzdGVycywgLWxlbik7CiAJCWlmIChpc19yaWdodG1vc3RfdHJlZV9yZWMpCi0JCQlvY2ZzMl9hZGp1c3RfcmlnaHRtb3N0X3JlY29yZHMoaW5vZGUsIGhhbmRsZSwgcGF0aCwgcmVjKTsKKwkJCW9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhoYW5kbGUsIGV0LCBwYXRoLCByZWMpOwogCX0gZWxzZSB7CiAJCS8qIENhbGxlciBzaG91bGQgaGF2ZSB0cmFwcGVkIHRoaXMuICovCi0JCW1sb2coTUxfRVJST1IsICJJbm9kZSAlbGx1OiBJbnZhbGlkIHJlY29yZCB0cnVuY2F0ZTogKCV1LCAldSkgIgotCQkgICAgICIoJXUsICV1KVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCW1sb2coTUxfRVJST1IsICJPd25lciAlbGx1OiBJbnZhbGlkIHJlY29yZCB0cnVuY2F0ZTogKCV1LCAldSkgIgorCQkgICAgICIoJXUsICV1KVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCSAgICAgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpLAogCQkgICAgIGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSwgY3BvcywgbGVuKTsKIAkJQlVHKCk7CkBAIC01Mzg2LDE0ICs1NTEyLDE0IEBACiAJaWYgKGxlZnRfcGF0aCkgewogCQlpbnQgc3VidHJlZV9pbmRleDsKIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsIGxlZnRfcGF0aCwgcGF0aCk7Ci0JCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwgcGF0aCwKKwkJc3VidHJlZV9pbmRleCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsIHBhdGgpOworCQlvY2ZzMl9jb21wbGV0ZV9lZGdlX2luc2VydChoYW5kbGUsIGxlZnRfcGF0aCwgcGF0aCwKIAkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJfQogCiAJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHBhdGhfbGVhZl9iaChwYXRoKSk7CiAKLQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGRlYWxsb2MsIGV0KTsKKwlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgsIGRlYWxsb2MpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTU0MDQsOSArNTUzMCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG9jZnMyX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9yZW1vdmVfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJdTMyIGNwb3MsIHUzMiBsZW4sIGhhbmRsZV90ICpoYW5kbGUsCisJCQl1MzIgY3BvcywgdTMyIGxlbiwKIAkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCiB7CkBAIC01NDE2LDcgKzU1NDIsMTEgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOwogCXN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoID0gTlVMTDsKIAotCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIDApOworCS8qCisJICogWFhYOiBXaHkgYXJlIHdlIHRydW5jYXRpbmcgdG8gMCBpbnN0ZWFkIG9mIHdoZXJldmVyIHRoaXMKKwkgKiBhZmZlY3RzIHVzPworCSAqLworCW9jZnMyX2V0X2V4dGVudF9tYXBfdHJ1bmNhdGUoZXQsIDApOwogCiAJcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoZXQpOwogCWlmICghcGF0aCkgewpAQCAtNTQyNSw3ICs1NTU1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBwYXRoLCBjcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBwYXRoLCBjcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC01NDM0LDEwICs1NTY0LDExIEBACiAJZWwgPSBwYXRoX2xlYWZfZWwocGF0aCk7CiAJaW5kZXggPSBvY2ZzMl9zZWFyY2hfZXh0ZW50X2xpc3QoZWwsIGNwb3MpOwogCWlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSkgewotCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCSAgICAiSW5vZGUgJWxsdSBoYXMgYW4gZXh0ZW50IGF0IGNwb3MgJXUgd2hpY2ggY2FuIG5vICIKKwkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkgICAgIk93bmVyICVsbHUgaGFzIGFuIGV4dGVudCBhdCBjcG9zICV1IHdoaWNoIGNhbiBubyAiCiAJCQkgICAgImxvbmdlciBiZSBmb3VuZC5cbiIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIGNwb3MpOworCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKKwkJCSAgICBjcG9zKTsKIAkJcmV0ID0gLUVST0ZTOwogCQlnb3RvIG91dDsKIAl9CkBAIC01NDY0LDIwICs1NTk1LDIxIEBACiAKIAlCVUdfT04oY3BvcyA8IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSB8fCB0cnVuY19yYW5nZSA+IHJlY19yYW5nZSk7CiAKLQltbG9nKDAsICJJbm9kZSAlbGx1LCByZW1vdmUgKGNwb3MgJXUsIGxlbiAldSkuIEV4aXN0aW5nIGluZGV4ICVkICIKKwltbG9nKDAsICJPd25lciAlbGx1LCByZW1vdmUgKGNwb3MgJXUsIGxlbiAldSkuIEV4aXN0aW5nIGluZGV4ICVkICIKIAkgICAgICIoY3BvcyAldSwgbGVuICV1KVxuIiwKLQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBjcG9zLCBsZW4sIGluZGV4LAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpLAorCSAgICAgY3BvcywgbGVuLCBpbmRleCwKIAkgICAgIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSwgb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCByZWMpKTsKIAogCWlmIChsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykgPT0gY3BvcyB8fCByZWNfcmFuZ2UgPT0gdHJ1bmNfcmFuZ2UpIHsKLQkJcmV0ID0gb2NmczJfdHJ1bmNhdGVfcmVjKGlub2RlLCBoYW5kbGUsIHBhdGgsIGluZGV4LCBkZWFsbG9jLAotCQkJCQkgY3BvcywgbGVuLCBldCk7CisJCXJldCA9IG9jZnMyX3RydW5jYXRlX3JlYyhoYW5kbGUsIGV0LCBwYXRoLCBpbmRleCwgZGVhbGxvYywKKwkJCQkJIGNwb3MsIGxlbik7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0ID0gb2NmczJfc3BsaXRfdHJlZShpbm9kZSwgZXQsIGhhbmRsZSwgcGF0aCwgaW5kZXgsCisJCXJldCA9IG9jZnMyX3NwbGl0X3RyZWUoaGFuZGxlLCBldCwgcGF0aCwgaW5kZXgsCiAJCQkJICAgICAgIHRydW5jX3JhbmdlLCBtZXRhX2FjKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNTQ5MCw3ICs1NjIyLDcgQEAKIAkJICovCiAJCW9jZnMyX3JlaW5pdF9wYXRoKHBhdGgsIDEpOwogCi0JCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgY3Bvcyk7CisJCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIHBhdGgsIGNwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTU0OTksOSArNTYzMSw5IEBACiAJCWVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwogCQlpbmRleCA9IG9jZnMyX3NlYXJjaF9leHRlbnRfbGlzdChlbCwgY3Bvcyk7CiAJCWlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJJbm9kZSAlbGx1OiBzcGxpdCBhdCBjcG9zICV1IGxvc3QgcmVjb3JkLiIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1OiBzcGxpdCBhdCBjcG9zICV1IGxvc3QgcmVjb3JkLiIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKIAkJCQkgICAgY3Bvcyk7CiAJCQlyZXQgPSAtRVJPRlM7CiAJCQlnb3RvIG91dDsKQEAgLTU1MTUsMTggKzU2NDcsMTggQEAKIAkJcmVjX3JhbmdlID0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpICsKIAkJCW9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKTsKIAkJaWYgKHJlY19yYW5nZSAhPSB0cnVuY19yYW5nZSkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJJbm9kZSAlbGx1OiBlcnJvciBhZnRlciBzcGxpdCBhdCBjcG9zICV1IgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1OiBlcnJvciBhZnRlciBzcGxpdCBhdCBjcG9zICV1IgogCQkJCSAgICAidHJ1bmMgbGVuICV1LCBleGlzdGluZyByZWNvcmQgaXMgKCV1LCV1KSIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkJICAgIGNwb3MsIGxlbiwgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpLAogCQkJCSAgICBvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsIHJlYykpOwogCQkJcmV0ID0gLUVST0ZTOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl90cnVuY2F0ZV9yZWMoaW5vZGUsIGhhbmRsZSwgcGF0aCwgaW5kZXgsIGRlYWxsb2MsCi0JCQkJCSBjcG9zLCBsZW4sIGV0KTsKKwkJcmV0ID0gb2NmczJfdHJ1bmNhdGVfcmVjKGhhbmRsZSwgZXQsIHBhdGgsIGluZGV4LCBkZWFsbG9jLAorCQkJCQkgY3BvcywgbGVuKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC01NTczLDcgKzU3MDUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNTU4MywxNCArNTcxNSwxMyBAQAogCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsCiAJCQkJICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhpbm9kZS0+aV9zYiwgbGVuKSk7CiAKLQlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGlub2RlLCBldCwgY3BvcywgbGVuLCBoYW5kbGUsIG1ldGFfYWMsCi0JCQkJICBkZWFsbG9jKTsKKwlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGhhbmRsZSwgZXQsIGNwb3MsIGxlbiwgbWV0YV9hYywgZGVhbGxvYyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LCAtbGVuKTsKKwlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoZXQsIC1sZW4pOwogCiAJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGV0LT5ldF9yb290X2JoKTsKIAlpZiAocmV0KSB7CkBAIC01NjkwLDcgKzU4MjEsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCB0bF9pbm9kZSwgdGxfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRSh0bF9pbm9kZSksIHRsX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTU3NTIsNyArNTg4Myw3IEBACiAJd2hpbGUgKGkgPj0gMCkgewogCQkvKiBDYWxsZXIgaGFzIGdpdmVuIHVzIGF0IGxlYXN0IGVub3VnaCBjcmVkaXRzIHRvCiAJCSAqIHVwZGF0ZSB0aGUgdHJ1bmNhdGUgbG9nIGRpbm9kZSAqLwotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIHRsX2lub2RlLCB0bF9iaCwKKwkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRSh0bF9pbm9kZSksIHRsX2JoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTYwMTAsNyArNjE0MSw3IEBACiAJCXRsLT50bF91c2VkID0gMDsKIAogCQlvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi0+c2IsIHRsX2JoLT5iX2RhdGEsICZkaS0+aV9jaGVjayk7Ci0JCXN0YXR1cyA9IG9jZnMyX3dyaXRlX2Jsb2NrKG9zYiwgdGxfYmgsIHRsX2lub2RlKTsKKwkJc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCB0bF9iaCwgSU5PREVfQ0FDSEUodGxfaW5vZGUpKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTY0MDAsOSArNjUzMSw5IEBACiAJcmV0dXJuIGZsOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2NhY2hlX2Jsb2NrX2RlYWxsb2Moc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmN0eHQsCi0JCQkJICAgICBpbnQgdHlwZSwgaW50IHNsb3QsIHU2NCBibGtubywKLQkJCQkgICAgIHVuc2lnbmVkIGludCBiaXQpCitpbnQgb2NmczJfY2FjaGVfYmxvY2tfZGVhbGxvYyhzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqY3R4dCwKKwkJCSAgICAgIGludCB0eXBlLCBpbnQgc2xvdCwgdTY0IGJsa25vLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJpdCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBvY2ZzMl9wZXJfc2xvdF9mcmVlX2xpc3QgKmZsOwpAQCAtNjUxOCw3ICs2NjQ5LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9sZWFmKGlub2RlLCBwYXRoX3Jvb3RfZWwocGF0aCksIGNwb3MsICZiaCk7CisJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgcGF0aF9yb290X2VsKHBhdGgpLCBjcG9zLCAmYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTY1NTEsNyArNjY4Miw3IEBACiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfdHJpbV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3RydW5jYXRlX2NvbnRleHQgKnRjLAotCQkJICAgdTMyIGNsdXN0ZXJzX3RvX2RlbCwgdTY0ICpkZWxldGVfc3RhcnQpCisJCQkgICB1MzIgY2x1c3RlcnNfdG9fZGVsLCB1NjQgKmRlbGV0ZV9zdGFydCwgdTggKmZsYWdzKQogewogCWludCByZXQsIGksIGluZGV4ID0gcGF0aC0+cF90cmVlX2RlcHRoOwogCXUzMiBuZXdfZWRnZSA9IDA7CkBAIC02NTYxLDYgKzY2OTIsNyBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7CiAKIAkqZGVsZXRlX3N0YXJ0ID0gMDsKKwkqZmxhZ3MgPSAwOwogCiAJd2hpbGUgKGluZGV4ID49IDApIHsKIAkJYmggPSBwYXRoLT5wX25vZGVbaW5kZXhdLmJoOwpAQCAtNjY0OCw2ICs2NzgwLDcgQEAKIAkJCSpkZWxldGVfc3RhcnQgPSBsZTY0X3RvX2NwdShyZWMtPmVfYmxrbm8pCiAJCQkJKyBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsCiAJCQkJCWxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSk7CisJCQkqZmxhZ3MgPSByZWMtPmVfZmxhZ3M7CiAKIAkJCS8qCiAJCQkgKiBJZiBpdCdzIG5vdyBlbXB0eSwgcmVtb3ZlIHRoaXMgcmVjb3JkLgpAQCAtNjcxOSw3ICs2ODUyLDcgQEAKIAogCQkJbWxvZygwLCAiZGVsZXRpbmcgdGhpcyBleHRlbnQgYmxvY2suXG4iKTsKIAotCQkJb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoaW5vZGUsIGJoKTsKKwkJCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKElOT0RFX0NBQ0hFKGlub2RlKSwgYmgpOwogCiAJCQlCVUdfT04ob2NmczJfcmVjX2NsdXN0ZXJzKGVsLCAmZWwtPmxfcmVjc1swXSkpOwogCQkJQlVHX09OKGxlMzJfdG9fY3B1KGVsLT5sX3JlY3NbMF0uZV9jcG9zKSk7CkBAIC02NzQ3LDcgKzY4ODAsOCBAQAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAogCQkJICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfdHJ1bmNhdGVfY29udGV4dCAqdGMsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKQorCQkJICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZTsKQEAgLTY3NTUsNiArNjg4OSw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxhc3RfZWJfYmggPSBOVUxMOwogCXU2NCBkZWxldGVfYmxrID0gMDsKKwl1OCByZWNfZmxhZ3M7CiAKIAlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7CiAKQEAgLTY3NjksMTQgKzY5MDQsMTQgQEAKIAkgKiBFYWNoIGNvbXBvbmVudCB3aWxsIGJlIHRvdWNoZWQsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgam91cm5hbAogCSAqIGhlcmUgdG8gYXZvaWQgaGF2aW5nIHRvIGhhbmRsZSBlcnJvcnMgbGF0ZXIuCiAJICovCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBwYXRoKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKElOT0RFX0NBQ0hFKGlub2RlKSwgaGFuZGxlLCBwYXRoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKIAlpZiAobGFzdF9lYl9iaCkgewotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGlub2RlLCBsYXN0X2ViX2JoLAorCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgbGFzdF9lYl9iaCwKIAkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02ODEwLDcgKzY5NDUsNyBAQAogCWlub2RlLT5pX2Jsb2NrcyA9IG9jZnMyX2lub2RlX3NlY3Rvcl9jb3VudChpbm9kZSk7CiAKIAlzdGF0dXMgPSBvY2ZzMl90cmltX3RyZWUoaW5vZGUsIHBhdGgsIGhhbmRsZSwgdGMsCi0JCQkJIGNsdXN0ZXJzX3RvX2RlbCwgJmRlbGV0ZV9ibGspOworCQkJCSBjbHVzdGVyc190b19kZWwsICZkZWxldGVfYmxrLCAmcmVjX2ZsYWdzKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtNjg0Miw4ICs2OTc3LDE2IEBACiAJfQogCiAJaWYgKGRlbGV0ZV9ibGspIHsKLQkJc3RhdHVzID0gb2NmczJfdHJ1bmNhdGVfbG9nX2FwcGVuZChvc2IsIGhhbmRsZSwgZGVsZXRlX2JsaywKLQkJCQkJCSAgIGNsdXN0ZXJzX3RvX2RlbCk7CisJCWlmIChyZWNfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkKKwkJCXN0YXR1cyA9IG9jZnMyX2RlY3JlYXNlX3JlZmNvdW50KGlub2RlLCBoYW5kbGUsCisJCQkJCW9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhvc2ItPnNiLAorCQkJCQkJCQkgZGVsZXRlX2JsayksCisJCQkJCWNsdXN0ZXJzX3RvX2RlbCwgbWV0YV9hYywKKwkJCQkJJnRjLT50Y19kZWFsbG9jLCAxKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gb2NmczJfdHJ1bmNhdGVfbG9nX2FwcGVuZChvc2IsIGhhbmRsZSwKKwkJCQkJCQkgICBkZWxldGVfYmxrLAorCQkJCQkJCSAgIGNsdXN0ZXJzX3RvX2RlbCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CkBAIC02ODYzLDkgKzcwMDYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9tYXBfYW5kX2RpcnR5X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8sCi0JCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHplcm8sIHU2NCAqcGh5cykKK3ZvaWQgb2NmczJfbWFwX2FuZF9kaXJ0eV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvLAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB6ZXJvLCB1NjQgKnBoeXMpCiB7CiAJaW50IHJldCwgcGFydGlhbCA9IDA7CiAKQEAgLTY5MzMsMjAgKzcwNzYsMTYgQEAKIAkJb2NmczJfdW5sb2NrX2FuZF9mcmVlX3BhZ2VzKHBhZ2VzLCBudW1wYWdlcyk7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZ3JhYl9lb2ZfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAotCQkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnVtKQoraW50IG9jZnMyX2dyYWJfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAorCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnVtKQogewogCWludCBudW1wYWdlcywgcmV0ID0gMDsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJbG9mZl90IGxhc3RfcGFnZV9ieXRlczsKIAogCUJVR19PTihzdGFydCA+IGVuZCk7CiAKLQlCVUdfT04oc3RhcnQgPj4gT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMgIT0KLQkgICAgICAgKGVuZCAtIDEpID4+IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzKTsKLQogCW51bXBhZ2VzID0gMDsKIAlsYXN0X3BhZ2VfYnl0ZXMgPSBQQUdFX0FMSUdOKGVuZCk7CiAJaW5kZXggPSBzdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtNjk3NCw2ICs3MTEzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBvY2ZzMl9ncmFiX2VvZl9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCisJCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpudW0pCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCisJQlVHX09OKHN0YXJ0ID4+IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzICE9CisJICAgICAgIChlbmQgLSAxKSA+PiBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0cyk7CisKKwlyZXR1cm4gb2NmczJfZ3JhYl9wYWdlcyhpbm9kZSwgc3RhcnQsIGVuZCwgcGFnZXMsIG51bSk7Cit9CisKIC8qCiAgKiBaZXJvIHRoZSBhcmVhIHBhc3QgaV9zaXplIGJ1dCBzdGlsbCB3aXRoaW4gYW4gYWxsb2NhdGVkCiAgKiBjbHVzdGVyLiBUaGlzIGF2b2lkcyBleHBvc2luZyBub256ZXJvIGRhdGEgb24gc3Vic2VxdWVudCBmaWxlCkBAIC03MTM4LDcgKzcyODgsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTcyMTgsOSArNzM2OCw4IEBACiAJCSAqIHRoaXMgcHJvdmVzIHRvIGJlIGZhbHNlLCB3ZSBjb3VsZCBhbHdheXMgcmUtYnVpbGQKIAkJICogdGhlIGluLWlub2RlIGRhdGEgZnJvbSBvdXIgcGFnZXMuCiAJCSAqLwotCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCBkaV9iaCk7Ci0JCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGlub2RlLCAmZXQsCi0JCQkJCSAgMCwgYmxvY2ssIDEsIDAsIE5VTEwpOworCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOworCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgJmV0LCAwLCBibG9jaywgMSwgMCwgTlVMTCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0X2NvbW1pdDsKQEAgLTcyNjIsMTEgKzc0MTEsMTQgQEAKIHsKIAlpbnQgc3RhdHVzLCBpLCBjcmVkaXRzLCB0bF9zZW0gPSAwOwogCXUzMiBjbHVzdGVyc190b19kZWwsIG5ld19oaWdoZXN0X2Nwb3MsIHJhbmdlOworCXU2NCBibGtubyA9IDA7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKnRsX2lub2RlID0gb3NiLT5vc2JfdGxfaW5vZGU7CiAJc3RydWN0IG9jZnMyX3BhdGggKnBhdGggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilmZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWUgPSBOVUxMOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTcyOTIsMTAgKzc0NDQsMTIgQEAKIAkJZ290byBiYWlsOwogCX0KIAorCWNyZWRpdHMgPSAwOworCiAJLyoKIAkgKiBUcnVuY2F0ZSBhbHdheXMgd29ya3MgYWdhaW5zdCB0aGUgcmlnaHRtb3N0IHRyZWUgYnJhbmNoLgogCSAqLwotCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgVUlOVF9NQVgpOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChJTk9ERV9DQUNIRShpbm9kZSksIHBhdGgsIFVJTlRfTUFYKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtNzMzMiwxMCArNzQ4NiwxNSBAQAogCQljbHVzdGVyc190b19kZWwgPSAwOwogCX0gZWxzZSBpZiAobGUzMl90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Nwb3MpID49IG5ld19oaWdoZXN0X2Nwb3MpIHsKIAkJY2x1c3RlcnNfdG9fZGVsID0gb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCAmZWwtPmxfcmVjc1tpXSk7CisJCWJsa25vID0gbGU2NF90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Jsa25vKTsKIAl9IGVsc2UgaWYgKHJhbmdlID4gbmV3X2hpZ2hlc3RfY3BvcykgewogCQljbHVzdGVyc190b19kZWwgPSAob2NmczJfcmVjX2NsdXN0ZXJzKGVsLCAmZWwtPmxfcmVjc1tpXSkgKwogCQkJCSAgIGxlMzJfdG9fY3B1KGVsLT5sX3JlY3NbaV0uZV9jcG9zKSkgLQogCQkJCSAgbmV3X2hpZ2hlc3RfY3BvczsKKwkJYmxrbm8gPSBsZTY0X3RvX2NwdShlbC0+bF9yZWNzW2ldLmVfYmxrbm8pICsKKwkJCW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwKKwkJCQlvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsICZlbC0+bF9yZWNzW2ldKSAtCisJCQkJY2x1c3RlcnNfdG9fZGVsKTsKIAl9IGVsc2UgewogCQlzdGF0dXMgPSAwOwogCQlnb3RvIGJhaWw7CkBAIC03MzQ0LDYgKzc1MDMsMjkgQEAKIAltbG9nKDAsICJjbHVzdGVyc190b19kZWwgPSAldSBpbiB0aGlzIHBhc3MsIHRhaWwgYmxrPSVsbHVcbiIsCiAJICAgICBjbHVzdGVyc190b19kZWwsICh1bnNpZ25lZCBsb25nIGxvbmcpcGF0aF9sZWFmX2JoKHBhdGgpLT5iX2Jsb2NrbnIpOwogCisJaWYgKGVsLT5sX3JlY3NbaV0uZV9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEICYmIGNsdXN0ZXJzX3RvX2RlbCkgeworCQlCVUdfT04oIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYKKwkJCSBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpKTsKKworCQlzdGF0dXMgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLAorCQkJCQkJbGU2NF90b19jcHUoZGktPmlfcmVmY291bnRfbG9jKSwKKwkJCQkJCTEsICZyZWZfdHJlZSwgTlVMTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfcmVmY291bnRfY2hhbmdlX2Zvcl9kZWwoaW5vZGUsIGZlX2JoLAorCQkJCQkJCSAgICAgICBibGtubywKKwkJCQkJCQkgICAgICAgY2x1c3RlcnNfdG9fZGVsLAorCQkJCQkJCSAgICAgICAmY3JlZGl0cywKKwkJCQkJCQkgICAgICAgJm1ldGFfYWMpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJZ290byBiYWlsOworCQl9CisJfQorCiAJbXV0ZXhfbG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCXRsX3NlbSA9IDE7CiAJLyogb2NmczJfdHJ1bmNhdGVfbG9nX25lZWRzX2ZsdXNoIGd1YXJhbnRlZXMgdXMgYXQgbGVhc3Qgb25lCkBAIC03MzU3LDcgKzc1MzksNyBAQAogCQl9CiAJfQogCi0JY3JlZGl0cyA9IG9jZnMyX2NhbGNfdHJlZV90cnVuY19jcmVkaXRzKG9zYi0+c2IsIGNsdXN0ZXJzX3RvX2RlbCwKKwljcmVkaXRzICs9IG9jZnMyX2NhbGNfdHJlZV90cnVuY19jcmVkaXRzKG9zYi0+c2IsIGNsdXN0ZXJzX3RvX2RlbCwKIAkJCQkJCShzdHJ1Y3Qgb2NmczJfZGlub2RlICopZmVfYmgtPmJfZGF0YSwKIAkJCQkJCWVsKTsKIAloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOwpAQCAtNzM2OSw3ICs3NTUxLDcgQEAKIAl9CiAKIAlzdGF0dXMgPSBvY2ZzMl9kb190cnVuY2F0ZShvc2IsIGNsdXN0ZXJzX3RvX2RlbCwgaW5vZGUsIGZlX2JoLCBoYW5kbGUsCi0JCQkJICAgdGMsIHBhdGgpOworCQkJCSAgIHRjLCBwYXRoLCBtZXRhX2FjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTczODMsNiArNzU2NSwxNiBAQAogCiAJb2NmczJfcmVpbml0X3BhdGgocGF0aCwgMSk7CiAKKwlpZiAobWV0YV9hYykgeworCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisJCW1ldGFfYWMgPSBOVUxMOworCX0KKworCWlmIChyZWZfdHJlZSkgeworCQlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwkJcmVmX3RyZWUgPSBOVUxMOworCX0KKwogCS8qCiAJICogVGhlIGNoZWNrIGFib3ZlIHdpbGwgY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgd2UndmUgdHJ1bmNhdGVkCiAJICogYXdheSBhbGwgYWxsb2NhdGlvbi4KQEAgLTczOTksNiArNzU5MSwxMiBAQAogCWlmIChoYW5kbGUpCiAJCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CiAKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCisJaWYgKHJlZl90cmVlKQorCQlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwogCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZ0Yy0+dGNfZGVhbGxvYyk7CiAKIAlvY2ZzMl9mcmVlX3BhdGgocGF0aCk7CkBAIC03NDQ1LDcgKzc2NDMsNyBAQAogCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCYoKnRjKS0+dGNfZGVhbGxvYyk7CiAKIAlpZiAoZmUtPmlkMi5pX2xpc3QubF90cmVlX2RlcHRoKSB7Ci0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGlub2RlLAorCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksCiAJCQkJCQkgbGU2NF90b19jcHUoZmUtPmlfbGFzdF9lYl9ibGspLAogCQkJCQkJICZsYXN0X2ViX2JoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTc1MDcsNyArNzcwNSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5oIGIvZnMvb2NmczIvYWxsb2MuaAppbmRleCAzNTMyNTRiLi45YzEyMmQ1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5oCisrKyBiL2ZzL29jZnMyL2FsbG9jLmgKQEAgLTQ1LDcgKzQ1LDggQEAKICAqCiAgKiBvY2ZzMl9leHRlbnRfdHJlZSBjb250YWlucyBpbmZvIGZvciB0aGUgcm9vdCBvZiB0aGUgYi10cmVlLCBpdCBtdXN0IGhhdmUgYQogICogcm9vdCBvY2ZzMl9leHRlbnRfbGlzdCBhbmQgYSByb290X2JoIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiB0aGUgYi10cmVlCi0gKiBmdW5jdGlvbnMuICBXaXRoIG1ldGFkYXRhIGVjYywgd2Ugbm93IGNhbGwgZGlmZmVyZW50IGpvdXJuYWxfYWNjZXNzCisgKiBmdW5jdGlvbnMuICBJdCBuZWVkcyB0aGUgb2NmczJfY2FjaGluZ19pbmZvIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGgKKyAqIEkvTyBvbiB0aGUgdHJlZS4gIFdpdGggbWV0YWRhdGEgZWNjLCB3ZSBub3cgY2FsbCBkaWZmZXJlbnQgam91cm5hbF9hY2Nlc3MKICAqIGZ1bmN0aW9ucyBmb3IgZWFjaCB0eXBlIG9mIG1ldGFkYXRhLCBzbyBpdCBtdXN0IGhhdmUgdGhlCiAgKiByb290X2pvdXJuYWxfYWNjZXNzIGZ1bmN0aW9uLgogICogb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyBhYnN0cmFjdCB0aGUgbm9ybWFsIG9wZXJhdGlvbnMgd2UgZG8gZm9yCkBAIC01Niw2ICs1Nyw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMJKmV0X29wczsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJCQkqZXRfcm9vdF9iaDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QJCSpldF9yb290X2VsOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8JCSpldF9jaTsKIAlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jCQlldF9yb290X2pvdXJuYWxfYWNjZXNzOwogCXZvaWQJCQkJCSpldF9vYmplY3Q7CiAJdW5zaWduZWQgaW50CQkJCWV0X21heF9sZWFmX2NsdXN0ZXJzOwpAQCAtNjYsMzEgKzY4LDMyIEBACiAgKiBzcGVjaWZpZWQgb2JqZWN0IGJ1ZmZlci4KICAqLwogdm9pZCBvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiB2b2lkIG9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmOwogdm9pZCBvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2Yik7CiB2b2lkIG9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Cit2b2lkIG9jZnMyX2luaXRfcmVmY291bnRfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKIC8qCiAgKiBSZWFkIGFuIGV4dGVudCBibG9jayBpbnRvICpiaC4gIElmICpiaCBpcyBOVUxMLCBhIGJoIHdpbGwgYmUKICAqIGFsbG9jYXRlZC4gIFRoaXMgaXMgYSBjYWNoZWQgcmVhZC4gIFRoZSBleHRlbnQgYmxvY2sgd2lsbCBiZSB2YWxpZGF0ZWQKICAqIHdpdGggb2NmczJfdmFsaWRhdGVfZXh0ZW50X2Jsb2NrKCkuCiAgKi8KLWludCBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZWJfYmxrbm8sCitpbnQgb2NmczJfcmVhZF9leHRlbnRfYmxvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksIHU2NCBlYl9ibGtubywKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCk7CiAKIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0OwotaW50IG9jZnMyX2luc2VydF9leHRlbnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQloYW5kbGVfdCAqaGFuZGxlLAotCQkJc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsCiAJCQl1NjQgc3RhcnRfYmxrLApAQCAtMTAzLDI1ICsxMDYsMzYgQEAKIAlSRVNUQVJUX1RSQU5TLAogCVJFU1RBUlRfTUVUQQogfTsKLWludCBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkJc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCXUzMiAqbG9naWNhbF9vZmZzZXQsCiAJCQkJdTMyIGNsdXN0ZXJzX3RvX2FkZCwKIAkJCQlpbnQgbWFya191bndyaXR0ZW4sCi0JCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKLQkJCQloYW5kbGVfdCAqaGFuZGxlLAogCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAogCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJCWVudW0gb2NmczJfYWxsb2NfcmVzdGFydGVkICpyZWFzb25fcmV0KTsKIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0Oworc3RydWN0IG9jZnMyX3BhdGg7CitpbnQgb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCisJCSAgICAgICBpbnQgc3BsaXRfaW5kZXgsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7CiBpbnQgb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCSAgICAgIGhhbmRsZV90ICpoYW5kbGUsIHUzMiBjcG9zLCB1MzIgbGVuLCB1MzIgcGh5cywKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpOwotaW50IG9jZnMyX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQl1MzIgY3BvcywgdTMyIGxlbiwgaGFuZGxlX3QgKmhhbmRsZSwKK2ludCBvY2ZzMl9jaGFuZ2VfZXh0ZW50X2ZsYWcoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICAgdTMyIGNwb3MsIHUzMiBsZW4sIHUzMiBwaHlzLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgIGludCBuZXdfZmxhZ3MsIGludCBjbGVhcl9mbGFncyk7CitpbnQgb2NmczJfcmVtb3ZlX2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJdTMyIGNwb3MsIHUzMiBsZW4sCiAJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTsKIGludCBvY2ZzMl9yZW1vdmVfYnRyZWVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKQEAgLTEzMCw3ICsxNDQsNiBAQAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7CiAKIGludCBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOwogCiAvKgpAQCAtMTk1LDYgKzIwOCw5IEBACiB9CiBpbnQgb2NmczJfY2FjaGVfY2x1c3Rlcl9kZWFsbG9jKHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpjdHh0LAogCQkJCXU2NCBibGtubywgdW5zaWduZWQgaW50IGJpdCk7CitpbnQgb2NmczJfY2FjaGVfYmxvY2tfZGVhbGxvYyhzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqY3R4dCwKKwkJCSAgICAgIGludCB0eXBlLCBpbnQgc2xvdCwgdTY0IGJsa25vLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJpdCk7CiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9kZWFsbG9jX2hhc19jbHVzdGVyKHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpjKQogewogCXJldHVybiBjLT5jX2dsb2JhbF9hbGxvY2F0b3IgIT0gTlVMTDsKQEAgLTIyMiw4ICsyMzgsOSBAQAogaW50IG9jZnMyX3RydW5jYXRlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAogCQkJICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQsIGludCB0cnVuYyk7CiAKLWludCBvY2ZzMl9maW5kX2xlYWYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyb290X2VsLAotCQkgICAgdTMyIGNwb3MsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmxlYWZfYmgpOworaW50IG9jZnMyX2ZpbmRfbGVhZihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcm9vdF9lbCwgdTMyIGNwb3MsCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsZWFmX2JoKTsKIGludCBvY2ZzMl9zZWFyY2hfZXh0ZW50X2xpc3Qoc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwgdTMyIHZfY2x1c3Rlcik7CiAKIC8qCkBAIC0yNTQsNCArMjcxLDUwIEBACiAJcmV0dXJuICFyZWMtPmVfbGVhZl9jbHVzdGVyczsKIH0KIAoraW50IG9jZnMyX2dyYWJfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAorCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnVtKTsKK3ZvaWQgb2NmczJfbWFwX2FuZF9kaXJ0eV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvLAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB6ZXJvLCB1NjQgKnBoeXMpOworLyoKKyAqIFN0cnVjdHVyZXMgd2hpY2ggZGVzY3JpYmUgYSBwYXRoIHRocm91Z2ggYSBidHJlZSwgYW5kIGZ1bmN0aW9ucyB0bworICogbWFuaXB1bGF0ZSB0aGVtLgorICoKKyAqIFRoZSBpZGVhIGhlcmUgaXMgdG8gYmUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZSB3aXRoIHRoZSB0cmVlCisgKiBtYW5pcHVsYXRpb24gY29kZS4KKyAqLworc3RydWN0IG9jZnMyX3BhdGhfaXRlbSB7CisJc3RydWN0IGJ1ZmZlcl9oZWFkCQkqYmg7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0CSplbDsKK307CisKKyNkZWZpbmUgT0NGUzJfTUFYX1BBVEhfREVQVEgJNQorCitzdHJ1Y3Qgb2NmczJfcGF0aCB7CisJaW50CQkJCXBfdHJlZV9kZXB0aDsKKwlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jCXBfcm9vdF9hY2Nlc3M7CisJc3RydWN0IG9jZnMyX3BhdGhfaXRlbQkJcF9ub2RlW09DRlMyX01BWF9QQVRIX0RFUFRIXTsKK307CisKKyNkZWZpbmUgcGF0aF9yb290X2JoKF9wYXRoKSAoKF9wYXRoKS0+cF9ub2RlWzBdLmJoKQorI2RlZmluZSBwYXRoX3Jvb3RfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbMF0uZWwpCisjZGVmaW5lIHBhdGhfcm9vdF9hY2Nlc3MoX3BhdGgpKChfcGF0aCktPnBfcm9vdF9hY2Nlc3MpCisjZGVmaW5lIHBhdGhfbGVhZl9iaChfcGF0aCkgKChfcGF0aCktPnBfbm9kZVsoX3BhdGgpLT5wX3RyZWVfZGVwdGhdLmJoKQorI2RlZmluZSBwYXRoX2xlYWZfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbKF9wYXRoKS0+cF90cmVlX2RlcHRoXS5lbCkKKyNkZWZpbmUgcGF0aF9udW1faXRlbXMoX3BhdGgpICgoX3BhdGgpLT5wX3RyZWVfZGVwdGggKyAxKQorCit2b2lkIG9jZnMyX3JlaW5pdF9wYXRoKHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCBpbnQga2VlcF9yb290KTsKK3ZvaWQgb2NmczJfZnJlZV9wYXRoKHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKTsKK2ludCBvY2ZzMl9maW5kX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJICAgIHUzMiBjcG9zKTsKK3N0cnVjdCBvY2ZzMl9wYXRoICpvY2ZzMl9uZXdfcGF0aF9mcm9tX3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpOworc3RydWN0IG9jZnMyX3BhdGggKm9jZnMyX25ld19wYXRoX2Zyb21fZXQoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CitpbnQgb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCisJCQkJIGludCBpZHgpOworaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpOwogI2VuZGlmIC8qIE9DRlMyX0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCA4YTFlNjE1Li43MmU3NjA2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAic3ViYWxsb2MuaCIKICNpbmNsdWRlICJzdXBlci5oIgogI2luY2x1ZGUgInN5bWxpbmsuaCIKKyNpbmNsdWRlICJyZWZjb3VudHRyZWUuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTEyNiw4ICsxMjcsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKLQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoraW50IG9jZnMyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzOwpAQCAtNTkwLDYgKzU5MSw4IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwkvKiBXZSBzaG91bGQgYWxyZWFkeSBDb1cgdGhlIHJlZmNvdW50ZWQgZXh0ZW50LiAqLworCUJVR19PTihleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCk7CiAJLyoKIAkgKiBnZXRfbW9yZV9ibG9ja3MoKSBleHBlY3RzIHVzIHRvIGRlc2NyaWJlIGEgaG9sZSBieSBjbGVhcmluZwogCSAqIHRoZSBtYXBwZWQgYml0IG9uIGJoX3Jlc3VsdCgpLgpAQCAtNjg3LDYgKzY5MCwxMCBAQAogCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCiAJCXJldHVybiAwOwogCisJLyogRmFsbGJhY2sgdG8gYnVmZmVyZWQgSS9PIGlmIHdlIGFyZSBhcHBlbmRpbmcuICovCisJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA8PSBvZmZzZXQpCisJCXJldHVybiAwOworCiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX25vX2xvY2tpbmcocncsIGlvY2IsIGlub2RlLAogCQkJCQkgICAgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LCBvZmZzZXQsCiAJCQkJCSAgICBucl9zZWdzLCAKQEAgLTEyNTksNyArMTI2Niw4IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSBpZiAodW53cml0dGVuKSB7Ci0JCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIHdjLT53X2RpX2JoKTsKKwkJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSAgICAgIHdjLT53X2RpX2JoKTsKIAkJcmV0ID0gb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihpbm9kZSwgJmV0LAogCQkJCQkJd2MtPndfaGFuZGxlLCBjcG9zLCAxLCBwaHlzLAogCQkJCQkJbWV0YV9hYywgJndjLT53X2RlYWxsb2MpOwpAQCAtMTQ0OCw2ICsxNDU2LDkgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAorCQkJLyogV2Ugc2hvdWxkIGFscmVhZHkgQ29XIHRoZSByZWZjb3VudGQgZXh0ZW50LiAqLworCQkJQlVHX09OKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKTsKKwogCQkJLyoKIAkJCSAqIEFzc3VtZSB3b3JzdCBjYXNlIC0gdGhhdCB3ZSdyZSB3cml0aW5nIGluCiAJCQkgKiB0aGUgbWlkZGxlIG9mIHRoZSBleHRlbnQuCkBAIC0xNTI4LDcgKzE1MzksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCB3Yy0+d19kaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgd2MtPndfZGlfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKQEAgLTE2OTksNiArMTcxMCwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlyZXQgPSBvY2ZzMl9jaGVja19yYW5nZV9mb3JfcmVmY291bnQoaW5vZGUsIHBvcywgbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocmV0ID09IDEpIHsKKwkJcmV0ID0gb2NmczJfcmVmY291bnRfY293KGlub2RlLCBkaV9iaCwKKwkJCQkJIHdjLT53X2Nwb3MsIHdjLT53X2NsZW4sIFVJTlRfTUFYKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKIAlyZXQgPSBvY2ZzMl9wb3B1bGF0ZV93cml0ZV9kZXNjKGlub2RlLCB3YywgJmNsdXN0ZXJzX3RvX2FsbG9jLAogCQkJCQkmZXh0ZW50c190b19zcGxpdCk7CiAJaWYgKHJldCkgewpAQCAtMTcyNiw3ICsxNzUwLDggQEAKIAkJICAgICAobG9uZyBsb25nKWlfc2l6ZV9yZWFkKGlub2RlKSwgbGUzMl90b19jcHUoZGktPmlfY2x1c3RlcnMpLAogCQkgICAgIGNsdXN0ZXJzX3RvX2FsbG9jLCBleHRlbnRzX3RvX3NwbGl0KTsKIAotCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCB3Yy0+d19kaV9iaCk7CisJCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoaW5vZGUpLAorCQkJCQkgICAgICB3Yy0+d19kaV9iaCk7CiAJCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LAogCQkJCQkgICAgY2x1c3RlcnNfdG9fYWxsb2MsIGV4dGVudHNfdG9fc3BsaXQsCiAJCQkJCSAgICAmZGF0YV9hYywgJm1ldGFfYWMpOwpAQCAtMTc3Myw3ICsxNzk4LDcgQEAKIAkgKiBXZSBkb24ndCB3YW50IHRoaXMgdG8gZmFpbCBpbiBvY2ZzMl93cml0ZV9lbmQoKSwgc28gZG8gaXQKIAkgKiBoZXJlLgogCSAqLwotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIHdjLT53X2RpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB3Yy0+d19kaV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmggYi9mcy9vY2ZzMi9hb3BzLmgKaW5kZXggNTAzZTQ5Mi4uYzQ4ZTkzZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5oCisrKyBiL2ZzL29jZnMyL2FvcHMuaApAQCAtNTcsNiArNTcsOCBAQAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCk7CiBpbnQgb2NmczJfc2l6ZV9maXRzX2lubGluZV9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsIHU2NCBuZXdfc2l6ZSk7CiAKK2ludCBvY2ZzMl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAorCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpOwogLyogYWxsIG9jZnMyX2Rpb19lbmRfaW8oKSdzIGZhdWx0ICovCiAjZGVmaW5lIG9jZnMyX2lvY2JfaXNfcndfbG9ja2VkKGlvY2IpIFwKIAl0ZXN0X2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKSZpb2NiLT5wcml2YXRlKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKaW5kZXggMTVjOGU2ZC4uZDQzZDM0YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYworKysgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCkBAIC01MiwxMiArNTIsMTIgQEAKIEJVRkZFUl9GTlMoTmVlZHNWYWxpZGF0ZSwgbmVlZHNfdmFsaWRhdGUpOwogCiBpbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJCSAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQogewogCWludCByZXQgPSAwOwogCi0JbWxvZ19lbnRyeSgiKGJoLT5iX2Jsb2NrbnIgPSAlbGx1LCBpbm9kZT0lcClcbiIsCi0JCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwgaW5vZGUpOworCW1sb2dfZW50cnkoIihiaC0+Yl9ibG9ja25yID0gJWxsdSwgY2k9JXApXG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsIGNpKTsKIAogCUJVR19PTihiaC0+Yl9ibG9ja25yIDwgT0NGUzJfU1VQRVJfQkxPQ0tfQkxLTk8pOwogCUJVR19PTihidWZmZXJfamJkKGJoKSk7CkBAIC03MCw3ICs3MCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhjaSk7CiAKIAlsb2NrX2J1ZmZlcihiaCk7CiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CkBAIC04NSw3ICs4NSw3IEBACiAJd2FpdF9vbl9idWZmZXIoYmgpOwogCiAJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKLQkJb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpOworCQlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCk7CiAJfSBlbHNlIHsKIAkJLyogV2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgdGhlIGNsdXN0ZXJlZCB1cHRvZGF0ZQogCQkgKiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBiaCBhcyBpdCdzIG5vdCBtYXJrZWQgbG9jYWxseQpAQCAtOTQsNyArOTQsNyBAQAogCQlwdXRfYmgoYmgpOwogCX0KIAotCW11dGV4X3VubG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2lvX211dGV4KTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pb191bmxvY2soY2kpOwogb3V0OgogCW1sb2dfZXhpdChyZXQpOwogCXJldHVybiByZXQ7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgb2NmczJfcmVhZF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJsb2NrLCBpbnQgbnIsCitpbnQgb2NmczJfcmVhZF9ibG9ja3Moc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksIHU2NCBibG9jaywgaW50IG5yLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdLCBpbnQgZmxhZ3MsCiAJCSAgICAgIGludCAoKnZhbGlkYXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpKQpAQCAtMTg1LDExICsxODUsMTIgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaSwgaWdub3JlX2NhY2hlID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOwogCi0JbWxvZ19lbnRyeSgiKGlub2RlPSVwLCBibG9jaz0oJWxsdSksIG5yPSglZCksIGZsYWdzPSVkKVxuIiwKLQkJICAgaW5vZGUsICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIG5yLCBmbGFncyk7CisJbWxvZ19lbnRyeSgiKGNpPSVwLCBibG9jaz0oJWxsdSksIG5yPSglZCksIGZsYWdzPSVkKVxuIiwKKwkJICAgY2ksICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIG5yLCBmbGFncyk7CiAKLQlCVUdfT04oIWlub2RlKTsKKwlCVUdfT04oIWNpKTsKIAlCVUdfT04oKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKSAmJgogCSAgICAgICAoZmxhZ3MgJiBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpKTsKIApAQCAtMjEyLDEyICsyMTMsMTIgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhjaSk7CiAJZm9yIChpID0gMCA7IGkgPCBuciA7IGkrKykgewogCQlpZiAoYmhzW2ldID09IE5VTEwpIHsKLQkJCWJoc1tpXSA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmxvY2srKyk7CisJCQliaHNbaV0gPSBzYl9nZXRibGsoc2IsIGJsb2NrKyspOwogCQkJaWYgKGJoc1tpXSA9PSBOVUxMKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCQkJCW9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhjaSk7CiAJCQkJc3RhdHVzID0gLUVJTzsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMjUwLDExICsyNTEsMTEgQEAKIAkJICogICAgYmVmb3JlIG91ciBpcy1pdC1pbi1mbGlnaHQgY2hlY2suCiAJCSAqLwogCi0JCWlmICghaWdub3JlX2NhY2hlICYmICFvY2ZzMl9idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoKSkgeworCQlpZiAoIWlnbm9yZV9jYWNoZSAmJiAhb2NmczJfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCkpIHsKIAkJCW1sb2coTUxfVVBUT0RBVEUsCi0JCQkgICAgICJiaCAoJWxsdSksIGlub2RlICVsbHUgbm90IHVwdG9kYXRlXG4iLAorCQkJICAgICAiYmggKCVsbHUpLCBvd25lciAlbGx1IG5vdCB1cHRvZGF0ZVxuIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAotCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpKTsKIAkJCS8qIFdlJ3JlIHVzaW5nIGlnbm9yZV9jYWNoZSBoZXJlIHRvIHNheQogCQkJICogImdvIHRvIGRpc2siICovCiAJCQlpZ25vcmVfY2FjaGUgPSAxOwpAQCAtMjgzLDcgKzI4NCw3IEBACiAJCQkgKiBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0IHRoYW4gd2UgYXJlCiAJCQkgKiBkb25lIGhlcmUuICovCiAJCQlpZiAoKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKQotCQkJICAgICYmIG9jZnMyX2J1ZmZlcl9yZWFkX2FoZWFkKGlub2RlLCBiaCkpCisJCQkgICAgJiYgb2NmczJfYnVmZmVyX3JlYWRfYWhlYWQoY2ksIGJoKSkKIAkJCQljb250aW51ZTsKIAogCQkJbG9ja19idWZmZXIoYmgpOwpAQCAtMzA1LDcgKzMwNiw3IEBACiAJCQkgKiBidWZmZXIgbG9jay4gKi8KIAkJCWlmICghKGZsYWdzICYgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKQogCQkJICAgICYmICEoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpCi0JCQkgICAgJiYgb2NmczJfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCkpIHsKKwkJCSAgICAmJiBvY2ZzMl9idWZmZXJfdXB0b2RhdGUoY2ksIGJoKSkgewogCQkJCXVubG9ja19idWZmZXIoYmgpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMzI3LDcgKzMyOCw3IEBACiAKIAkJaWYgKCEoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpKSB7CiAJCQkvKiBXZSBrbm93IHRoaXMgY2FuJ3QgaGF2ZSBjaGFuZ2VkIGFzIHdlIGhvbGQgdGhlCi0JCQkgKiBpbm9kZSBzZW0uIEF2b2lkIGRvaW5nIGFueSB3b3JrIG9uIHRoZSBiaCBpZiB0aGUKKwkJCSAqIG93bmVyIHNlbS4gQXZvaWQgZG9pbmcgYW55IHdvcmsgb24gdGhlIGJoIGlmIHRoZQogCQkJICogam91cm5hbCBoYXMgaXQuICovCiAJCQlpZiAoIWJ1ZmZlcl9qYmQoYmgpKQogCQkJCXdhaXRfb25fYnVmZmVyKGJoKTsKQEAgLTM1MSw3ICszNTIsNyBAQAogCQkJCSAqIHRoYXQgYmV0dGVyIG5vdCBoYXZlIGNoYW5nZWQgKi8KIAkJCQlCVUdfT04oYnVmZmVyX2piZChiaCkpOwogCQkJCWNsZWFyX2J1ZmZlcl9uZWVkc192YWxpZGF0ZShiaCk7Ci0JCQkJc3RhdHVzID0gdmFsaWRhdGUoaW5vZGUtPmlfc2IsIGJoKTsKKwkJCQlzdGF0dXMgPSB2YWxpZGF0ZShzYiwgYmgpOwogCQkJCWlmIChzdGF0dXMpIHsKIAkJCQkJcHV0X2JoKGJoKTsKIAkJCQkJYmhzW2ldID0gTlVMTDsKQEAgLTM2Myw5ICszNjQsOSBAQAogCQkvKiBBbHdheXMgc2V0IHRoZSBidWZmZXIgaW4gdGhlIGNhY2hlLCBldmVuIGlmIGl0IHdhcwogCQkgKiBhIGZvcmNlZCByZWFkLCBvciByZWFkLWFoZWFkIHdoaWNoIGhhc24ndCB5ZXQKIAkJICogY29tcGxldGVkLiAqLwotCQlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCk7CisJCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoY2ksIGJoKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhjaSk7CiAKIAltbG9nKE1MX0JIX0lPLCAiYmxvY2s9KCVsbHUpLCBucj0oJWQpLCBjYWNoZWQ9JXMsIGZsYWdzPTB4JXhcbiIsIAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgbnIsCkBAIC0zOTksNyArNDAwLDcgQEAKIAogLyoKICAqIFdyaXRlIHN1cGVyIGJsb2NrIGFuZCBiYWNrdXBzIGRvZXNuJ3QgbmVlZCB0byBjb2xsYWJvcmF0ZSB3aXRoIGpvdXJuYWwsCi0gKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgaXBfaW9fbXV0ZXggYW5kIGlub2RlIGRvZXNuJ3QgbmVlZCB0byBiZWEgcGFzc2VkCisgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgaXBfaW9fbXV0ZXggYW5kIGNpIGRvZXNuJ3QgbmVlZCB0byBiZWEgcGFzc2VkCiAgKiBpbnRvIHRoaXMgZnVuY3Rpb24uCiAgKi8KIGludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uaAppbmRleCBjNzVkNjgyLi5iOTdiY2M2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oCisrKyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAgICAgICAgICAqb3NiLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgICpiaCwKLQkJICAgICAgc3RydWN0IGlub2RlICAgICAgICAqaW5vZGUpOworCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICAgKmNpKTsKIGludCBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxvY2ssCiAJCQkgICB1bnNpZ25lZCBpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10pOwogCkBAIC00NCw3ICs0NCw3IEBACiAgKiBiZSBzZXQgZXZlbiBmb3IgYSBSRUFEQUhFQUQgY2FsbCwgYXMgaXQgbWFya3MgdGhlIGJ1ZmZlciBmb3IgbGF0ZXIKICAqIHZhbGlkYXRpb24uCiAgKi8KLWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYmxvY2ssIGludCBuciwKK2ludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsCiAJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sIGludCBmbGFncywKIAkJICAgICAgaW50ICgqdmFsaWRhdGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkpOwpAQCAtNTUsNyArNTUsNyBAQAogI2RlZmluZSBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUgICAgICAxCiAjZGVmaW5lIE9DRlMyX0JIX1JFQURBSEVBRCAgICAgICAgIDgKIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2ZmLAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IG9mZiwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKIAkJCQkgICBpbnQgKCp2YWxpZGF0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpKQpAQCAtNjgsNyArNjgsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIG9mZiwgMSwgYmgsIDAsIHZhbGlkYXRlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhjaSwgb2ZmLCAxLCBiaCwgMCwgdmFsaWRhdGUpOwogCiBiYWlsOgogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCmluZGV4IDk2ZGY1NDEuLjFjZDI5MzQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCkBAIC0xMTEsNiArMTExLDcgQEAKIAlkZWZpbmVfbWFzayhFWFBPUlQpLAogCWRlZmluZV9tYXNrKFhBVFRSKSwKIAlkZWZpbmVfbWFzayhRVU9UQSksCisJZGVmaW5lX21hc2soUkVGQ09VTlQpLAogCWRlZmluZV9tYXNrKEVSUk9SKSwKIAlkZWZpbmVfbWFzayhOT1RJQ0UpLAogCWRlZmluZV9tYXNrKEtUSFJFQUQpLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCA2OTZjMzJlLi45YjRkMTE3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMTEzLDYgKzExMyw3IEBACiAjZGVmaW5lIE1MX0VYUE9SVAkweDAwMDAwMDAwMTAwMDAwMDBVTEwgLyogb2NmczIgZXhwb3J0IG9wZXJhdGlvbnMgKi8KICNkZWZpbmUgTUxfWEFUVFIJMHgwMDAwMDAwMDIwMDAwMDAwVUxMIC8qIG9jZnMyIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgTUxfUVVPVEEJMHgwMDAwMDAwMDQwMDAwMDAwVUxMIC8qIG9jZnMyIHF1b3RhIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTUxfUkVGQ09VTlQJMHgwMDAwMDAwMDgwMDAwMDAwVUxMIC8qIHJlZmNvdW50IHRyZWUgb3BlcmF0aW9ucyAqLwogLyogYml0cyB0aGF0IGFyZSBpbmZyZXF1ZW50bHkgZ2l2ZW4gYW5kIGZyZXF1ZW50bHkgbWF0Y2hlZCBpbiB0aGUgaGlnaCB3b3JkICovCiAjZGVmaW5lIE1MX0VSUk9SCTB4MDAwMDAwMDEwMDAwMDAwMFVMTCAvKiBzZW50IHRvIEtFUk5fRVJSICovCiAjZGVmaW5lIE1MX05PVElDRQkweDAwMDAwMDAyMDAwMDAwMDBVTEwgLyogc2V0biB0byBLRVJOX05PVElDRSAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jIGIvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCmluZGV4IGY4NDI0ODcuLmNmYjJiZTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5zdF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuc3Rfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBuc3Rfc2VxX3N0YXJ0LAogCS5uZXh0ID0gbnN0X3NlcV9uZXh0LAogCS5zdG9wID0gbnN0X3NlcV9zdG9wLApAQCAtMzQ0LDcgKzM0NCw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2Nfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2Nfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBzY19zZXFfc3RhcnQsCiAJLm5leHQgPSBzY19zZXFfbmV4dCwKIAkuc3RvcCA9IHNjX3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGlyLmMgYi9mcy9vY2ZzMi9kaXIuYwppbmRleCBiMzU4ZjNiLi4yOGMzZWMyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kaXIuYworKysgYi9mcy9vY2ZzMi9kaXIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CiAJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGR4X3Jvb3RfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBJTk9ERV9DQUNIRShkaXIpLCBkeF9yb290X2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTU2NCw3ICs1NjQsOCBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgcGh5cywgJnRtcCwgb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKElOT0RFX0NBQ0hFKGRpciksIHBoeXMsICZ0bXAsCisJCQkgICAgICAgb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC02MjIsNyArNjIzLDggQEAKIAl1NjQgYmxrbm8gPSBsZTY0X3RvX2NwdShkaS0+aV9keF9yb290KTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpkeF9yb290X2JoOwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhkaXIsIGJsa25vLCAmdG1wLCBvY2ZzMl92YWxpZGF0ZV9keF9yb290KTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKElOT0RFX0NBQ0hFKGRpciksIGJsa25vLCAmdG1wLAorCQkJICAgICAgIG9jZnMyX3ZhbGlkYXRlX2R4X3Jvb3QpOwogCiAJLyogSWYgb2NmczJfcmVhZF9ibG9jaygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KIAlpZiAoIXJldCAmJiAhKmR4X3Jvb3RfYmgpCkBAIC02NjIsNyArNjY0LDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmR4X2xlYWZfYmg7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgYmxrbm8sICZ0bXAsIG9jZnMyX3ZhbGlkYXRlX2R4X2xlYWYpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoZGlyKSwgYmxrbm8sICZ0bXAsCisJCQkgICAgICAgb2NmczJfdmFsaWRhdGVfZHhfbGVhZik7CiAKIAkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLwogCWlmICghcmV0ICYmICEqZHhfbGVhZl9iaCkKQEAgLTY4MCw3ICs2ODMsNyBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhkaXIsIHN0YXJ0LCBudW0sIGR4X2xlYWZfYmhzLCAwLAorCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGRpciksIHN0YXJ0LCBudW0sIGR4X2xlYWZfYmhzLCAwLAogCQkJCW9jZnMyX3ZhbGlkYXRlX2R4X2xlYWYpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTgwMiw3ICs4MDUsOCBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMgPSBOVUxMOwogCiAJaWYgKGVsLT5sX3RyZWVfZGVwdGgpIHsKLQkJcmV0ID0gb2NmczJfZmluZF9sZWFmKGlub2RlLCBlbCwgbWFqb3JfaGFzaCwgJmViX2JoKTsKKwkJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgZWwsIG1ham9yX2hhc2gsCisJCQkJICAgICAgJmViX2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0xMTMzLDcgKzExMzcsOCBAQAogCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKQogCQlhY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaTsKIAotCXJldCA9IGFjY2VzcyhoYW5kbGUsIGRpciwgZGVfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlyZXQgPSBhY2Nlc3MoaGFuZGxlLCBJTk9ERV9DQUNIRShkaXIpLCBkZV9iaCwKKwkJICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMTE3Niw3ICsxMTgxLDcgQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCQlpZiAoZGUgPT0gZGVfZGVsKSAgewotCQkJc3RhdHVzID0gYWNjZXNzKGhhbmRsZSwgZGlyLCBiaCwKKwkJCXN0YXR1cyA9IGFjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGJoLAogCQkJCQlPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJCXN0YXR1cyA9IC1FSU87CkBAIC0xMzI2LDcgKzEzMzEsNyBAQAogCSAqIHRoZSBlbnRyeSBjb3VudCBuZWVkcyB0byBiZSB1cGRhdGVkLiBBbHNvLCB3ZSBtaWdodCBiZQogCSAqIGFkZGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIGZyZWUgbGlzdC4KIAkgKi8KLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGR4X3Jvb3RfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTMzNCw3ICsxMzM5LDcgQEAKIAl9CiAKIAlpZiAoIW9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKSB7Ci0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLAorCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksCiAJCQkJCSAgICAgIGxvb2t1cC0+ZGxfZHhfbGVhZl9iaCwKIAkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAocmV0KSB7CkBAIC0xNDkzLDcgKzE0OTgsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWY7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgZHhfbGVhZl9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGR4X2xlYWZfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTUyMyw3ICsxNTI4LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGR4X3Jvb3RfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTY0NSwxMSArMTY1MCwxMyBAQAogCQkgKi8KIAkJaWYgKG9jZnMyX2ZyZWVfbGlzdF9hdF9yb290KGxvb2t1cCkpIHsKIAkJCWJoID0gbG9va3VwLT5kbF9keF9yb290X2JoOwotCQkJcmV0dmFsID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGJoLAorCQkJcmV0dmFsID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLAorCQkJCQkJIElOT0RFX0NBQ0hFKGRpciksIGJoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJfSBlbHNlIHsKIAkJCWJoID0gbG9va3VwLT5kbF9wcmV2X2xlYWZfYmg7Ci0JCQlyZXR2YWwgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIGRpciwgYmgsCisJCQlyZXR2YWwgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsCisJCQkJCQkgSU5PREVfQ0FDSEUoZGlyKSwgYmgsCiAJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQl9CiAJCWlmIChyZXR2YWwpIHsKQEAgLTE3MDAsMTEgKzE3MDcsMTMgQEAKIAkJCX0KIAogCQkJaWYgKGluc2VydF9iaCA9PSBwYXJlbnRfZmVfYmgpCi0JCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBkaXIsCisJCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkJCQkgSU5PREVfQ0FDSEUoZGlyKSwKIAkJCQkJCQkJIGluc2VydF9iaCwKIAkJCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJCWVsc2UgewotCQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgZGlyLAorCQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwKKwkJCQkJCQkJIElOT0RFX0NBQ0hFKGRpciksCiAJCQkJCQkJCSBpbnNlcnRfYmgsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIApAQCAtMjI4MCw3ICsyMjg5LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfaW5saW5lX2RhdGEgKmRhdGEgPSAmZGktPmlkMi5pX2RhdGE7CiAJdW5zaWduZWQgaW50IHNpemUgPSBsZTE2X3RvX2NwdShkYXRhLT5pZF9jb3VudCk7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCBkaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjMzMiw5ICsyMzQxLDkgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBuZXdfYmgpOworCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGlub2RlKSwgbmV3X2JoKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgbmV3X2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0yNDE4LDkgKzI0MjcsOSBAQAogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9Ci0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBkeF9yb290X2JoKTsKKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShkaXIpLCBkeF9yb290X2JoKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI0NTQsNyArMjQ2Myw3IEBACiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBkaXIsIGRpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZGlfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI0OTUsOSArMjUwNCw5IEBACiAJCX0KIAkJZHhfbGVhdmVzW2ldID0gYmg7CiAKLQkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBiaCk7CisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGRpciksIGJoKTsKIAotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgYmgsCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgYmgsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNTgyLDcgKzI1OTEsNiBAQAogewogCWludCByZXQ7CiAJdTY0IHBoeXNfYmxrbm87Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOwogCiAJcmV0ID0gX19vY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoZGlyLCBjcG9zLCBoYW5kbGUsIGRhdGFfYWMsIGR4X2xlYXZlcywKIAkJCQkJIG51bV9keF9sZWF2ZXMsICZwaHlzX2Jsa25vKTsKQEAgLTI1OTEsNyArMjU5OSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgZXQsIGNwb3MsIHBoeXNfYmxrbm8sIDEsIDAsCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCBjcG9zLCBwaHlzX2Jsa25vLCAxLCAwLAogCQkJCSAgbWV0YV9hYyk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjg5NSw3ICsyOTAzLDcgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZHhfZXQ7CiAJaW50IGRpZF9xdW90YSA9IDAsIGJ5dGVzX2FsbG9jYXRlZCA9IDA7CiAKLQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGRpciwgZGlfYmgpOworCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoZGlyKSwgZGlfYmgpOwogCiAJYWxsb2MgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc2IsIGJ5dGVzKTsKIAlkeF9hbGxvYyA9IDA7CkBAIC0zMDA1LDkgKzMwMTMsOSBAQAogCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCi0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBkaXJkYXRhX2JoKTsKKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShkaXIpLCBkaXJkYXRhX2JoKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgZGlyLCBkaXJkYXRhX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZGlyZGF0YV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzA2MCw3ICszMDY4LDcgQEAKIAkgKiBXZSBsZXQgdGhlIGxhdGVyIGRpcmVudCBpbnNlcnQgbW9kaWZ5IGMvbXRpbWUgLSB0byB0aGUgdXNlcgogCSAqIHRoZSBkYXRhIGhhc24ndCBjaGFuZ2VkLgogCSAqLwotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBkaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zMDg1LDcgKzMwOTMsNyBAQAogCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgYXMgb3VyIGV4dGVudCBsaXN0IGlzIGVtcHR5IGFuZCBhbGwKIAkgKiByZWxhdGVkIGJsb2NrcyBoYXZlIGJlZW4gam91cm5hbGVkIGFscmVhZHkuCiAJICovCi0JcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgZGlyLCAmZXQsIDAsIGJsa25vLCBsZW4sCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZldCwgMCwgYmxrbm8sIGxlbiwKIAkJCQkgIDAsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzExNyw4ICszMTI1LDEwIEBACiAJCQlvY2ZzMl9keF9kaXJfaW5kZXhfcm9vdF9ibG9jayhkaXIsIGR4X3Jvb3RfYmgsCiAJCQkJCQkgICAgICBkaXJkYXRhX2JoKTsKIAkJfSBlbHNlIHsKLQkJCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZHhfZXQsIGRpciwgZHhfcm9vdF9iaCk7Ci0JCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsICZkeF9ldCwgMCwKKwkJCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZHhfZXQsCisJCQkJCQkgICAgICAgSU5PREVfQ0FDSEUoZGlyKSwKKwkJCQkJCSAgICAgICBkeF9yb290X2JoKTsKKwkJCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQoaGFuZGxlLCAmZHhfZXQsIDAsCiAJCQkJCQkgIGR4X2luc2VydF9ibGtubywgMSwgMCwgTlVMTCk7CiAJCQlpZiAocmV0KQogCQkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMxMzgsNyArMzE0OCw3IEBACiAJCX0KIAkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLT5pX3NiLCBiaXRfb2ZmKTsKIAotCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsICZldCwgMSwKKwkJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZldCwgMSwKIAkJCQkJICBibGtubywgbGVuLCAwLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzMzNyw4ICszMzQ3LDkgQEAKIAlzcGluX2xvY2soJk9DRlMyX0koZGlyKS0+aXBfbG9jayk7CiAJaWYgKGRpcl9pX3NpemUgPT0gb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoc2IsIE9DRlMyX0koZGlyKS0+aXBfY2x1c3RlcnMpKSB7CiAJCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGRpciktPmlwX2xvY2spOwotCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGRpciwgcGFyZW50X2ZlX2JoKTsKLQkJbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBkaXIsICZldCk7CisJCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoZGlyKSwKKwkJCQkJICAgICAgcGFyZW50X2ZlX2JoKTsKKwkJbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCAmZXQpOwogCQlpZiAobnVtX2ZyZWVfZXh0ZW50cyA8IDApIHsKIAkJCXN0YXR1cyA9IG51bV9mcmVlX2V4dGVudHM7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0zMzg3LDkgKzMzOTgsOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBuZXdfYmgpOworCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGRpciksIG5ld19iaCk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIGRpciwgbmV3X2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgbmV3X2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0zODI5LDcgKzM4NDAsNyBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWFmX2Jsa25vLCBpbnNlcnRfaGFzaCk7CiAKLQlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGR4X3Jvb3RfYmgpOworCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGRpciksIGR4X3Jvb3RfYmgpOwogCiAJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKIAkvKgpAQCAtMzg4NSw3ICszODk2LDcgQEAKIAl9CiAJZGlkX3F1b3RhID0gMTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLCBkeF9sZWFmX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfbGVhZl9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zOTQ5LDcgKzM5NjAsOCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspIHsKLQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlLCBkaXIsIG9yaWdfZHhfbGVhdmVzW2ldLAorCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksCisJCQkJCSAgICAgIG9yaWdfZHhfbGVhdmVzW2ldLAogCQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQxNjUsNyArNDE3Nyw3IEBACiAJICogZmFpbHVyZSB0byBhZGQgdGhlIGR4X3Jvb3RfYmggdG8gdGhlIGpvdXJuYWwgd29uJ3QgcmVzdWx0CiAJICogdXMgbG9zaW5nIGNsdXN0ZXJzLgogCSAqLwotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC00MjA3LDkgKzQyMTksOCBAQAogCiAJLyogVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCBjb25zaWRlcmluZyB3ZSBzdGFydCB3aXRoIGFuIGVtcHR5CiAJICogZHhfcm9vdC4gKi8KLQlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGR4X3Jvb3RfYmgpOwotCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgJmV0LCAwLAotCQkJCSAgaW5zZXJ0X2Jsa25vLCAxLCAwLCBOVUxMKTsKKwlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShkaXIpLCBkeF9yb290X2JoKTsKKwlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgJmV0LCAwLCBpbnNlcnRfYmxrbm8sIDEsIDAsIE5VTEwpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKIAlkaWRfcXVvdGEgPSAwOwpAQCAtNDQ2OSw3ICs0NDgwLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBkaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQ1MzIsNyArNDU0Myw3IEBACiAJaWYgKG9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKQogCQlnb3RvIHJlbW92ZV9pbmRleDsKIAotCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZXQsIGRpciwgZHhfcm9vdF9iaCk7CisJb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCk7CiAKIAkvKiBYWFg6IFdoYXQgaWYgZHJfY2x1c3RlcnMgaXMgdG9vIGxhcmdlPyAqLwogCXdoaWxlIChsZTMyX3RvX2NwdShkeF9yb290LT5kcl9jbHVzdGVycykpIHsKQEAgLTQ1NjUsNyArNDU3Niw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKGRpciwgZHhfcm9vdF9iaCk7CisJb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCk7CiBvdXQ6CiAJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMSk7CiAJb2NmczJfcnVuX2RlYWxsb2NzKG9zYiwgJmRlYWxsb2MpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwppbmRleCBkZjUyZjcwLi5jNWM4ODEyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwpAQCAtNjgzLDcgKzY4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGVidWdfbG9ja3Jlc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRlYnVnX2xvY2tyZXNfb3BzID0gewogCS5zdGFydCA9CWxvY2tyZXNfc2VxX3N0YXJ0LAogCS5zdG9wID0JCWxvY2tyZXNfc2VxX3N0b3AsCiAJLm5leHQgPQkJbG9ja3Jlc19zZXFfbmV4dCwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYyBiL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYwppbmRleCBkNDkwYjY2Li45ODU2OWU4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCkBAIC0yMTIsMTQgKzIxMiwxOCBAQAogCQlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCX0KIAorCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZyZXMtPnB1cmdlKSkgewogCQltbG9nKDAsICJyZW1vdmluZyBsb2NrcmVzICUuKnM6JXAgZnJvbSBwdXJnZWxpc3QsICIKIAkJICAgICAibWFzdGVyID0gJWRcbiIsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCiAJCSAgICAgcmVzLCBtYXN0ZXIpOwogCQlsaXN0X2RlbF9pbml0KCZyZXMtPnB1cmdlKTsKKwkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKIAkJZGxtLT5wdXJnZV9jb3VudC0tOwotCX0KKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOworCiAJX19kbG1fdW5oYXNoX2xvY2tyZXMocmVzKTsKIAogCS8qIGxvY2tyZXMgaXMgbm90IGluIHRoZSBoYXNoIG5vdy4gIGRyb3AgdGhlIGZsYWcgYW5kIHdha2UgdXAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuYyBiL2ZzL29jZnMyL2RsbWdsdWUuYwppbmRleCAxMTBiYjU3Li4wZDM4ZDY3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmMKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJ1cHRvZGF0ZS5oIgogI2luY2x1ZGUgInF1b3RhLmgiCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC0xMTAsNiArMTExLDExIEBACiAKIHN0YXRpYyB2b2lkIG9jZnMyX3NldF9xaW5mb19sdmIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKTsKIAorc3RhdGljIGludCBvY2ZzMl9jaGVja19yZWZjb3VudF9kb3duY29udmVydChzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJCSAgICBpbnQgbmV3X2xldmVsKTsKK3N0YXRpYyBpbnQgb2NmczJfcmVmY291bnRfY29udmVydF93b3JrZXIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQkgaW50IGJsb2NraW5nKTsKKwogI2RlZmluZSBtbG9nX21ldGFfbHZiKF9fbGV2ZWwsIF9fbG9ja3Jlcykgb2NmczJfZHVtcF9tZXRhX2x2Yl9pbmZvKF9fbGV2ZWwsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX2xvY2tyZXMpCiAKIC8qIFRoaXMgYWlkcyBpbiBkZWJ1Z2dpbmcgc2l0dWF0aW9ucyB3aGVyZSBhIGJhZCBMVkIgbWlnaHQgYmUgaW52b2x2ZWQuICovCkBAIC0yNzgsNiArMjg0LDEyIEBACiAJLmZsYWdzCQk9IExPQ0tfVFlQRV9SRVFVSVJFU19SRUZSRVNIIHwgTE9DS19UWVBFX1VTRVNfTFZCLAogfTsKIAorc3RhdGljIHN0cnVjdCBvY2ZzMl9sb2NrX3Jlc19vcHMgb2NmczJfcmVmY291bnRfYmxvY2tfbG9wcyA9IHsKKwkuY2hlY2tfZG93bmNvbnZlcnQgPSBvY2ZzMl9jaGVja19yZWZjb3VudF9kb3duY29udmVydCwKKwkuZG93bmNvbnZlcnRfd29ya2VyID0gb2NmczJfcmVmY291bnRfY29udmVydF93b3JrZXIsCisJLmZsYWdzCQk9IDAsCit9OworCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pc19pbm9kZV9sb2NrKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKIHsKIAlyZXR1cm4gbG9ja3Jlcy0+bF90eXBlID09IE9DRlMyX0xPQ0tfVFlQRV9NRVRBIHx8CkBAIC0zMDYsNiArMzE4LDEyIEBACiAJcmV0dXJuIChzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqKWxvY2tyZXMtPmxfcHJpdjsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqCitvY2ZzMl9sb2NrX3Jlc19yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqcmVzKQoreworCXJldHVybiBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSwgcmZfbG9ja3Jlcyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9jZnMyX3N1cGVyICpvY2ZzMl9nZXRfbG9ja3Jlc19vc2Ioc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewogCWlmIChsb2NrcmVzLT5sX29wcy0+Z2V0X29zYikKQEAgLTY5Myw2ICs3MTEsMTcgQEAKIAkJCQkgICBpbmZvKTsKIH0KIAordm9pZCBvY2ZzMl9yZWZjb3VudF9sb2NrX3Jlc19pbml0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkgIHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgcmVmX2Jsa25vLAorCQkJCSAgdW5zaWduZWQgaW50IGdlbmVyYXRpb24pCit7CisJb2NmczJfbG9ja19yZXNfaW5pdF9vbmNlKGxvY2tyZXMpOworCW9jZnMyX2J1aWxkX2xvY2tfbmFtZShPQ0ZTMl9MT0NLX1RZUEVfUkVGQ09VTlQsIHJlZl9ibGtubywKKwkJCSAgICAgIGdlbmVyYXRpb24sIGxvY2tyZXMtPmxfbmFtZSk7CisJb2NmczJfbG9ja19yZXNfaW5pdF9jb21tb24ob3NiLCBsb2NrcmVzLCBPQ0ZTMl9MT0NLX1RZUEVfUkVGQ09VTlQsCisJCQkJICAgJm9jZnMyX3JlZmNvdW50X2Jsb2NrX2xvcHMsIG9zYik7Cit9CisKIHZvaWQgb2NmczJfbG9ja19yZXNfZnJlZShzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKnJlcykKIHsKIAltbG9nX2VudHJ5X3ZvaWQoKTsKQEAgLTE1NDgsOCArMTU3NywxMCBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCiAJICAgICB3cml0ZSA/ICJFWE1PREUiIDogIlBSTU9ERSIpOwogCi0JaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpIHsKKwkJbWxvZ19leGl0KDApOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9yd19sb2NrcmVzOwogCkBAIC0yMTI3LDcgKzIxNTgsNyBAQAogCiAJLyogVGhpcyB3aWxsIGRpc2NhcmQgYW55IGNhY2hpbmcgaW5mb3JtYXRpb24gd2UgbWlnaHQgaGF2ZSBoYWQKIAkgKiBmb3IgdGhlIGlub2RlIG1ldGFkYXRhLiAqLwotCW9jZnMyX21ldGFkYXRhX2NhY2hlX3B1cmdlKGlub2RlKTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShJTk9ERV9DQUNIRShpbm9kZSkpOwogCiAJb2NmczJfZXh0ZW50X21hcF90cnVuYyhpbm9kZSwgMCk7CiAKQEAgLTMwMDksNiArMzA0MCw3IEBACiAJCSAgICAgInVubG9ja19hY3Rpb24gJWRcbiIsIGVycm9yLCBsb2NrcmVzLT5sX25hbWUsCiAJCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJCW1sb2dfZXhpdF92b2lkKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM0OTUsMTEgKzM1MjcsMTEgQEAKIAlyZXR1cm4gVU5CTE9DS19DT05USU5VRTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9jaGVja19tZXRhX2Rvd25jb252ZXJ0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCQkJaW50IG5ld19sZXZlbCkKK3N0YXRpYyBpbnQgb2NmczJfY2lfY2hlY2twb2ludGVkKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJIGludCBuZXdfbGV2ZWwpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG9jZnMyX2xvY2tfcmVzX2lub2RlKGxvY2tyZXMpOwotCWludCBjaGVja3BvaW50ZWQgPSBvY2ZzMl9pbm9kZV9mdWxseV9jaGVja3BvaW50ZWQoaW5vZGUpOworCWludCBjaGVja3BvaW50ZWQgPSBvY2ZzMl9jaV9mdWxseV9jaGVja3BvaW50ZWQoY2kpOwogCiAJQlVHX09OKG5ld19sZXZlbCAhPSBETE1fTE9DS19OTCAmJiBuZXdfbGV2ZWwgIT0gRExNX0xPQ0tfUFIpOwogCUJVR19PTihsb2NrcmVzLT5sX2xldmVsICE9IERMTV9MT0NLX0VYICYmICFjaGVja3BvaW50ZWQpOwpAQCAtMzUwNywxMCArMzUzOSwxOCBAQAogCWlmIChjaGVja3BvaW50ZWQpCiAJCXJldHVybiAxOwogCi0Jb2NmczJfc3RhcnRfY2hlY2twb2ludChPQ0ZTMl9TQihpbm9kZS0+aV9zYikpOworCW9jZnMyX3N0YXJ0X2NoZWNrcG9pbnQoT0NGUzJfU0Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSkpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9jZnMyX2NoZWNrX21ldGFfZG93bmNvbnZlcnQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQlpbnQgbmV3X2xldmVsKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvY2ZzMl9sb2NrX3Jlc19pbm9kZShsb2NrcmVzKTsKKworCXJldHVybiBvY2ZzMl9jaV9jaGVja3BvaW50ZWQoSU5PREVfQ0FDSEUoaW5vZGUpLCBsb2NrcmVzLCBuZXdfbGV2ZWwpOworfQorCiBzdGF0aWMgdm9pZCBvY2ZzMl9zZXRfbWV0YV9sdmIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvY2ZzMl9sb2NrX3Jlc19pbm9kZShsb2NrcmVzKTsKQEAgLTM2NDAsNiArMzY4MCwyNiBAQAogCXJldHVybiBVTkJMT0NLX0NPTlRJTlVFX1BPU1Q7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfY2hlY2tfcmVmY291bnRfZG93bmNvbnZlcnQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQkgICAgaW50IG5ld19sZXZlbCkKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSA9CisJCQkJb2NmczJfbG9ja19yZXNfcmVmY291bnRfdHJlZShsb2NrcmVzKTsKKworCXJldHVybiBvY2ZzMl9jaV9jaGVja3BvaW50ZWQoJnRyZWUtPnJmX2NpLCBsb2NrcmVzLCBuZXdfbGV2ZWwpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X2NvbnZlcnRfd29ya2VyKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkJIGludCBibG9ja2luZykKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSA9CisJCQkJb2NmczJfbG9ja19yZXNfcmVmY291bnRfdHJlZShsb2NrcmVzKTsKKworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3B1cmdlKCZ0cmVlLT5yZl9jaSk7CisKKwlyZXR1cm4gVU5CTE9DS19DT05USU5VRTsKK30KKwogc3RhdGljIHZvaWQgb2NmczJfc2V0X3FpbmZvX2x2YihzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMpCiB7CiAJc3RydWN0IG9jZnMyX3FpbmZvX2x2YiAqbHZiOwpAQCAtMzc1Miw2ICszODEyLDM3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAoraW50IG9jZnMyX3JlZmNvdW50X2xvY2soc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlLCBpbnQgZXgpCit7CisJaW50IHN0YXR1czsKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJnJlZl90cmVlLT5yZl9sb2NrcmVzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gbG9ja3Jlcy0+bF9wcml2OworCisKKwlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpKQorCQlyZXR1cm4gLUVST0ZTOworCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCXJldHVybiAwOworCisJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9sb2NrKG9zYiwgbG9ja3JlcywgbGV2ZWwsIDAsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQltbG9nX2Vycm5vKHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIG9jZnMyX3JlZmNvdW50X3VubG9jayhzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWUsIGludCBleCkKK3sKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJnJlZl90cmVlLT5yZl9sb2NrcmVzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gbG9ja3Jlcy0+bF9wcml2OworCisJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsIGxldmVsKTsKK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBwcm90b2NvbC4gIEl0IHByb3ZpZGVzIHRoZSBsb2NrIGhhbmRsaW5nCiAgKiBob29rcyBmb3IgdGhlIHVuZGVybHlpbmcgRExNLiAgSXQgaGFzIGEgbWF4aW11bSB2ZXJzaW9uIG51bWJlci4KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuaCBiL2ZzL29jZnMyL2RsbWdsdWUuaAppbmRleCA3NTUzODM2Li5kMWNlNDhlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmgKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5oCkBAIC0xMDEsNiArMTAxLDkgQEAKIHN0cnVjdCBvY2ZzMl9tZW1fZHFpbmZvOwogdm9pZCBvY2ZzMl9xaW5mb19sb2NrX3Jlc19pbml0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqaW5mbyk7Cit2b2lkIG9jZnMyX3JlZmNvdW50X2xvY2tfcmVzX2luaXQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCSAgc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCByZWZfYmxrbm8sCisJCQkJICB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbik7CiB2b2lkIG9jZnMyX2xvY2tfcmVzX2ZyZWUoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpyZXMpOwogaW50IG9jZnMyX2NyZWF0ZV9uZXdfaW5vZGVfbG9ja3Moc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgb2NmczJfZHJvcF9pbm9kZV9sb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTE0OCw2ICsxNTEsOSBAQAogdm9pZCBvY2ZzMl9maWxlX3VubG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgb2NmczJfcWluZm9fbG9jayhzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqb2luZm8sIGludCBleCk7CiB2b2lkIG9jZnMyX3FpbmZvX3VubG9jayhzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqb2luZm8sIGludCBleCk7CitzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZTsKK2ludCBvY2ZzMl9yZWZjb3VudF9sb2NrKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSwgaW50IGV4KTsKK3ZvaWQgb2NmczJfcmVmY291bnRfdW5sb2NrKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSwgaW50IGV4KTsKIAogCiB2b2lkIG9jZnMyX21hcmtfbG9ja3Jlc19mcmVlaW5nKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3Jlcyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmMgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKaW5kZXggZjJiYjFhMC4uODQzZGI2NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZXh0ZW50X21hcC5jCisrKyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAotCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGlub2RlLCBsYXN0X2ViX2JsaywgJmViX2JoKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksIGxhc3RfZWJfYmxrLCAmZWJfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTM1MywxMSArMzUzLDExIEBACiAgKiBlYl9iaCBpcyBOVUxMLiBPdGhlcndpc2UsIGViX2JoIHNob3VsZCBwb2ludCB0byB0aGUgZXh0ZW50IGJsb2NrCiAgKiBjb250YWluaW5nIGVsLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2ZpZ3VyZV9ob2xlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKLQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoLAotCQkJCSAgICAgIHUzMiB2X2NsdXN0ZXIsCi0JCQkJICAgICAgdTMyICpudW1fY2x1c3RlcnMpCitpbnQgb2NmczJfZmlndXJlX2hvbGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoLAorCQkJICAgICAgIHUzMiB2X2NsdXN0ZXIsCisJCQkgICAgICAgdTMyICpudW1fY2x1c3RlcnMpCiB7CiAJaW50IHJldCwgaTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5leHRfZWJfYmggPSBOVUxMOwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJCWlmIChsZTY0X3RvX2NwdShlYi0+aF9uZXh0X2xlYWZfYmxrKSA9PSAwVUxMKQogCQkJZ290byBub19tb3JlX2V4dGVudHM7CiAKLQkJcmV0ID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soaW5vZGUsCisJCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGNpLAogCQkJCQkgICAgICBsZTY0X3RvX2NwdShlYi0+aF9uZXh0X2xlYWZfYmxrKSwKIAkJCQkJICAgICAgJm5leHRfZWJfYmgpOwogCQlpZiAocmV0KSB7CkBAIC00MjgsNyArNDI4LDggQEAKIAl0cmVlX2hlaWdodCA9IGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpOwogCiAJaWYgKHRyZWVfaGVpZ2h0ID4gMCkgewotCQlyZXQgPSBvY2ZzMl9maW5kX2xlYWYoaW5vZGUsIGVsLCB2X2NsdXN0ZXIsICZlYl9iaCk7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihJTk9ERV9DQUNIRShpbm9kZSksIGVsLCB2X2NsdXN0ZXIsCisJCQkJICAgICAgJmViX2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC00NTUsNyArNDU2LDggQEAKIAkJICogZmllbGQuCiAJCSAqLwogCQlpZiAoaG9sZV9sZW4pIHsKLQkJCXJldCA9IG9jZnMyX2ZpZ3VyZV9ob2xlX2NsdXN0ZXJzKGlub2RlLCBlbCwgZWJfYmgsCisJCQlyZXQgPSBvY2ZzMl9maWd1cmVfaG9sZV9jbHVzdGVycyhJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCQkJIGVsLCBlYl9iaCwKIAkJCQkJCQkgdl9jbHVzdGVyLCAmbGVuKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC01MzksNyArNTQxLDggQEAKIAogaW50IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgdl9jbHVzdGVyLAogCQkJICAgICB1MzIgKnBfY2x1c3RlciwgdTMyICpudW1fY2x1c3RlcnMsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwpCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCisJCQkgICAgIHVuc2lnbmVkIGludCAqZXh0ZW50X2ZsYWdzKQogewogCWludCByZXQgPSAwLCBpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOwpAQCAtNTQ4LDcgKzU1MSw4IEBACiAJdTMyIGNvZmY7CiAKIAlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgewotCQlyZXQgPSBvY2ZzMl9maW5kX2xlYWYoaW5vZGUsIGVsLCB2X2NsdXN0ZXIsICZlYl9iaCk7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihJTk9ERV9DQUNIRShpbm9kZSksIGVsLCB2X2NsdXN0ZXIsCisJCQkJICAgICAgJmViX2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC01OTAsNiArNTk0LDkgQEAKIAkJKnBfY2x1c3RlciA9ICpwX2NsdXN0ZXIgKyBjb2ZmOwogCQlpZiAobnVtX2NsdXN0ZXJzKQogCQkJKm51bV9jbHVzdGVycyA9IG9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKSAtIGNvZmY7CisKKwkJaWYgKGV4dGVudF9mbGFncykKKwkJCSpleHRlbnRfZmxhZ3MgPSByZWMtPmVfZmxhZ3M7CiAJfQogb3V0OgogCWlmIChlYl9iaCkKQEAgLTg2Miw4ICs4NjksOCBAQAogCQkJQlVHX09OKGJoc1tkb25lICsgaV0tPmJfYmxvY2tuciAhPSAocF9ibG9jayArIGkpKTsKIAkJfQogCi0JCXJjID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIHBfYmxvY2ssIGNvdW50LCBiaHMgKyBkb25lLAotCQkJCSAgICAgICBmbGFncywgdmFsaWRhdGUpOworCQlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGlub2RlKSwgcF9ibG9jaywgY291bnQsCisJCQkJICAgICAgIGJocyArIGRvbmUsIGZsYWdzLCB2YWxpZGF0ZSk7CiAJCWlmIChyYykgewogCQkJbWxvZ19lcnJubyhyYyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4dGVudF9tYXAuaCBiL2ZzL29jZnMyL2V4dGVudF9tYXAuaAppbmRleCBiN2RkOTczLi5lNzlkNDFjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmgKKysrIGIvZnMvb2NmczIvZXh0ZW50X21hcC5oCkBAIC01NSwxMiArNTUsMTggQEAKIAogaW50IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgdl9jbHVzdGVyLAogCQkJICAgICB1MzIgKnBfY2x1c3RlciwgdTMyICpudW1fY2x1c3RlcnMsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwpOworCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKmV4dGVudF9mbGFncyk7CiAKIGludCBvY2ZzMl9yZWFkX3ZpcnRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2X2Jsb2NrLCBpbnQgbnIsCiAJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdLCBpbnQgZmxhZ3MsCiAJCQkgICBpbnQgKCp2YWxpZGF0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkpOworaW50IG9jZnMyX2ZpZ3VyZV9ob2xlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCisJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCwKKwkJCSAgICAgICB1MzIgdl9jbHVzdGVyLAorCQkJICAgICAgIHUzMiAqbnVtX2NsdXN0ZXJzKTsKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlYWRfdmlydF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgdl9ibG9jaywKIAkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsCiAJCQkJCWludCAoKnZhbGlkYXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IDIyMWM1ZTkuLjg5ZmM4ZWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJ4YXR0ci5oIgogI2luY2x1ZGUgImFjbC5oIgogI2luY2x1ZGUgInF1b3RhLmgiCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC0yNTksNyArMjYwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGJoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMzNCw2ICszMzUsMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG9jZnMyX2Nvd19maWxlX3BvcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCSAgICAgIHU2NCBvZmZzZXQpCit7CisJaW50IHN0YXR1czsKKwl1MzIgcGh5cywgY3BvcyA9IG9mZnNldCA+PiBPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPnNfY2x1c3RlcnNpemVfYml0czsKKwl1bnNpZ25lZCBpbnQgbnVtX2NsdXN0ZXJzID0gMDsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzID0gMDsKKworCS8qCisJICogSWYgdGhlIG5ldyBvZmZzZXQgaXMgYWxpZ25lZCB0byB0aGUgcmFuZ2Ugb2YgdGhlIGNsdXN0ZXIsIHRoZXJlIGlzCisJICogbm8gc3BhY2UgZm9yIG9jZnMyX3plcm9fcmFuZ2VfZm9yX3RydW5jYXRlIHRvIGZpbGwsIHNvIG5vIG5lZWQgdG8KKwkgKiBDb1cgZWl0aGVyLgorCSAqLworCWlmICgob2Zmc2V0ICYgKE9DRlMyX1NCKGlub2RlLT5pX3NiKS0+c19jbHVzdGVyc2l6ZSAtIDEpKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IG9jZnMyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBoeXMsCisJCQkJICAgICZudW1fY2x1c3RlcnMsICZleHRfZmxhZ3MpOworCWlmIChzdGF0dXMpIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpCisJCWdvdG8gb3V0OworCisJcmV0dXJuIG9jZnMyX3JlZmNvdW50X2Nvdyhpbm9kZSwgZmVfYmgsIGNwb3MsIDEsIGNwb3MrMSk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgaW50IG9jZnMyX29ycGhhbl9mb3JfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKQEAgLTM0Niw2ICszODAsMTcgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCisJLyoKKwkgKiBXZSBuZWVkIHRvIENvVyB0aGUgY2x1c3RlciBjb250YWlucyB0aGUgb2Zmc2V0IGlmIGl0IGlzIHJlZmxpbmtlZAorCSAqIHNpbmNlIHdlIHdpbGwgY2FsbCBvY2ZzMl96ZXJvX3JhbmdlX2Zvcl90cnVuY2F0ZSBsYXRlciB3aGljaCB3aWxsCisJICogd3JpdGUgIjAiIGZyb20gb2Zmc2V0IHRvIHRoZSBlbmQgb2YgdGhlIGNsdXN0ZXIuCisJICovCisJc3RhdHVzID0gb2NmczJfY293X2ZpbGVfcG9zKGlub2RlLCBmZV9iaCwgbmV3X2lfc2l6ZSk7CisJaWYgKHN0YXR1cykgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCiAJLyogVE9ETzogVGhpcyBuZWVkcyB0byBhY3R1YWxseSBvcnBoYW4gdGhlIGlub2RlIGluIHRoaXMKIAkgKiB0cmFuc2FjdGlvbi4gKi8KIApAQCAtMzU2LDcgKzQwMSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGZlX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBmZV9iaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00ODYsNiArNTMxLDggQEAKIAl1cF93cml0ZSgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7CiAKIGJhaWw6CisJaWYgKCFzdGF0dXMgJiYgT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzID09IDApCisJCXN0YXR1cyA9IG9jZnMyX3RyeV9yZW1vdmVfcmVmY291bnRfdHJlZShpbm9kZSwgZGlfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTUxNSwxMSArNTYyLDEwIEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CiAKLQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCBmZV9iaCk7Ci0JcmV0ID0gb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKG9zYiwgaW5vZGUsIGxvZ2ljYWxfb2Zmc2V0LAotCQkJCQkgICBjbHVzdGVyc190b19hZGQsIG1hcmtfdW53cml0dGVuLAotCQkJCQkgICAmZXQsIGhhbmRsZSwKLQkJCQkJICAgZGF0YV9hYywgbWV0YV9hYywgcmVhc29uX3JldCk7CisJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksIGZlX2JoKTsKKwlyZXQgPSBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoaGFuZGxlLCAmZXQsIGxvZ2ljYWxfb2Zmc2V0LAorCQkJCQkgIGNsdXN0ZXJzX3RvX2FkZCwgbWFya191bndyaXR0ZW4sCisJCQkJCSAgZGF0YV9hYywgbWV0YV9hYywgcmVhc29uX3JldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTY0LDcgKzYxMCw3IEBACiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKIAkgICAgIChsb25nIGxvbmcpaV9zaXplX3JlYWQoaW5vZGUpLCBsZTMyX3RvX2NwdShmZS0+aV9jbHVzdGVycyksCiAJICAgICBjbHVzdGVyc190b19hZGQpOwotCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIGJoKTsKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgYmgpOwogCXN0YXR1cyA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LCBjbHVzdGVyc190b19hZGQsIDAsCiAJCQkJICAgICAgICZkYXRhX2FjLCAmbWV0YV9hYyk7CiAJaWYgKHN0YXR1cykgewpAQCAtNTkzLDcgKzYzOSw3IEBACiAJLyogcmVzZXJ2ZSBhIHdyaXRlIHRvIHRoZSBmaWxlIGVudHJ5IGVhcmx5IG9uIC0gdGhhdCB3ZSBpZiB3ZQogCSAqIHJ1biBvdXQgb2YgY3JlZGl0cyBpbiB0aGUgYWxsb2NhdGlvbiBwYXRoLCB3ZSBjYW4gc3RpbGwKIAkgKiB1cGRhdGUgaV9zaXplLiAqLwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGJoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBiaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMTMxLDcgKzExNzcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCBiaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTEzOTUsNyArMTQ0MSw3IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAotCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIGRpX2JoKTsKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOwogCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZkZWFsbG9jKTsKIAogCWlmIChieXRlX2xlbiA9PSAwKQpAQCAtMTY1Nyw2ICsxNzAzLDcwIEBACiAJCQkJCSBPQ0ZTMl9JT0NfUkVTVlNQNjQsICZzciwgY2hhbmdlX3NpemUpOwogfQogCitpbnQgb2NmczJfY2hlY2tfcmFuZ2VfZm9yX3JlZmNvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsCisJCQkJICAgc2l6ZV90IGNvdW50KQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBleHRlbnRfZmxhZ3M7CisJdTMyIGNwb3MsIGNsdXN0ZXJzLCBleHRlbnRfbGVuLCBwaHlzX2Nwb3M7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCisJaWYgKCFvY2ZzMl9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkgfHwKKwkgICAgIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSkKKwkJcmV0dXJuIDA7CisKKwljcG9zID0gcG9zID4+IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzOworCWNsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKHNiLCBwb3MgKyBjb3VudCkgLSBjcG9zOworCisJd2hpbGUgKGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBoeXNfY3BvcywgJmV4dGVudF9sZW4sCisJCQkJCSAmZXh0ZW50X2ZsYWdzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHBoeXNfY3BvcyAmJiAoZXh0ZW50X2ZsYWdzICYgT0NGUzJfRVhUX1JFRkNPVU5URUQpKSB7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXh0ZW50X2xlbiA+IGNsdXN0ZXJzKQorCQkJZXh0ZW50X2xlbiA9IGNsdXN0ZXJzOworCisJCWNsdXN0ZXJzIC09IGV4dGVudF9sZW47CisJCWNwb3MgKz0gZXh0ZW50X2xlbjsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX2lub2RlX2Zvcl9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50LAorCQkJCQkgICAgaW50ICptZXRhX2xldmVsKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJdTMyIGNwb3MgPSBwb3MgPj4gT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHM7CisJdTMyIGNsdXN0ZXJzID0KKwkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGlub2RlLT5pX3NiLCBwb3MgKyBjb3VudCkgLSBjcG9zOworCisJcmV0ID0gb2NmczJfaW5vZGVfbG9jayhpbm9kZSwgJmRpX2JoLCAxKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJKm1ldGFfbGV2ZWwgPSAxOworCisJcmV0ID0gb2NmczJfcmVmY291bnRfY293KGlub2RlLCBkaV9iaCwgY3BvcywgY2x1c3RlcnMsIFVJTlRfTUFYKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CitvdXQ6CisJYnJlbHNlKGRpX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG9jZnMyX3ByZXBhcmVfaW5vZGVfZm9yX3dyaXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkJIGxvZmZfdCAqcHBvcywKIAkJCQkJIHNpemVfdCBjb3VudCwKQEAgLTE3MTMsNiArMTgyMywyMiBAQAogCiAJCWVuZCA9IHNhdmVkX3BvcyArIGNvdW50OwogCisJCXJldCA9IG9jZnMyX2NoZWNrX3JhbmdlX2Zvcl9yZWZjb3VudChpbm9kZSwgc2F2ZWRfcG9zLCBjb3VudCk7CisJCWlmIChyZXQgPT0gMSkgeworCQkJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCBtZXRhX2xldmVsKTsKKwkJCW1ldGFfbGV2ZWwgPSAtMTsKKworCQkJcmV0ID0gb2NmczJfcHJlcGFyZV9pbm9kZV9mb3JfcmVmY291bnQoaW5vZGUsCisJCQkJCQkJICAgICAgIHNhdmVkX3BvcywKKwkJCQkJCQkgICAgICAgY291bnQsCisJCQkJCQkJICAgICAgICZtZXRhX2xldmVsKTsKKwkJfQorCisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwogCQkvKgogCQkgKiBTa2lwIHRoZSBPX0RJUkVDVCBjaGVja3MgaWYgd2UgZG9uJ3QgbmVlZAogCQkgKiB0aGVtLgpAQCAtMTc1OSw3ICsxODg1LDggQEAKIAkJKnBwb3MgPSBzYXZlZF9wb3M7CiAKIG91dF91bmxvY2s6Ci0Jb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCBtZXRhX2xldmVsKTsKKwlpZiAobWV0YV9sZXZlbCA+PSAwKQorCQlvY2ZzMl9pbm9kZV91bmxvY2soaW5vZGUsIG1ldGFfbGV2ZWwpOwogCiBvdXQ6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuaCBiL2ZzL29jZnMyL2ZpbGUuaAppbmRleCAxNzJmOWZiLi5kNjZjZjRmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmgKKysrIGIvZnMvb2NmczIvZmlsZS5oCkBAIC02OSw0ICs2OSw2IEBACiBpbnQgb2NmczJfY2hhbmdlX2ZpbGVfc3BhY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YgKnNyKTsKIAoraW50IG9jZnMyX2NoZWNrX3JhbmdlX2Zvcl9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAorCQkJCSAgIHNpemVfdCBjb3VudCk7CiAjZW5kaWYgLyogT0NGUzJfRklMRV9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5jIGIvZnMvb2NmczIvaW5vZGUuYwppbmRleCA0ZGM4ODkwLi4wMjk3ZmI4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5jCisrKyBiL2ZzL29jZnMyL2lub2RlLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgorI2luY2x1ZGUgInJlZmNvdW50dHJlZS5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIApAQCAtNTYyLDcgKzU2Myw4IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGZlX2JoLAorCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwKKwkJCQkJCSBmZV9iaCwKIAkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NDYsNyArNjQ4LDcgQEAKIAl9CiAKIAkvKiBzZXQgdGhlIGlub2RlcyBkdGltZSAqLwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NjIsNyArNjY0LDcgQEAKIAkJZ290byBiYWlsX2NvbW1pdDsKIAl9CiAKLQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShpbm9kZSwgZGlfYmgpOworCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOwogCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKIAogCXN0YXR1cyA9IG9jZnMyX2ZyZWVfZGlub2RlKGhhbmRsZSwgaW5vZGVfYWxsb2NfaW5vZGUsCkBAIC03ODEsNiArNzgzLDEyIEBACiAJCWdvdG8gYmFpbF91bmxvY2tfZGlyOwogCX0KIAorCXN0YXR1cyA9IG9jZnMyX3JlbW92ZV9yZWZjb3VudF90cmVlKGlub2RlLCBkaV9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGJhaWxfdW5sb2NrX2RpcjsKKwl9CisKIAlzdGF0dXMgPSBvY2ZzMl9yZW1vdmVfaW5vZGUoaW5vZGUsIGRpX2JoLCBvcnBoYW5fZGlyX2lub2RlLAogCQkJCSAgICBvcnBoYW5fZGlyX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkKQEAgLTExMTIsMTMgKzExMjAsMTQgQEAKIAlvY2ZzMl9sb2NrX3Jlc19mcmVlKCZvaS0+aXBfaW5vZGVfbG9ja3Jlcyk7CiAJb2NmczJfbG9ja19yZXNfZnJlZSgmb2ktPmlwX29wZW5fbG9ja3Jlcyk7CiAKLQlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShpbm9kZSk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfZXhpdChJTk9ERV9DQUNIRShpbm9kZSkpOwogCi0JbWxvZ19idWdfb25fbXNnKG9pLT5pcF9tZXRhZGF0YV9jYWNoZS5jaV9udW1fY2FjaGVkLAorCW1sb2dfYnVnX29uX21zZyhJTk9ERV9DQUNIRShpbm9kZSktPmNpX251bV9jYWNoZWQsCiAJCQkiQ2xlYXIgaW5vZGUgb2YgJWxsdSwgaW5vZGUgaGFzICV1IGNhY2hlIGl0ZW1zXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sIG9pLT5pcF9tZXRhZGF0YV9jYWNoZS5jaV9udW1fY2FjaGVkKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2ktPmlwX2Jsa25vLAorCQkJSU5PREVfQ0FDSEUoaW5vZGUpLT5jaV9udW1fY2FjaGVkKTsKIAotCW1sb2dfYnVnX29uX21zZyghKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSksCisJbWxvZ19idWdfb25fbXNnKCEoSU5PREVfQ0FDSEUoaW5vZGUpLT5jaV9mbGFncyAmIE9DRlMyX0NBQ0hFX0ZMX0lOTElORSksCiAJCQkiQ2xlYXIgaW5vZGUgb2YgJWxsdSwgaW5vZGUgaGFzIGEgYmFkIGZsYWdcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubyk7CiAKQEAgLTExNDUsOSArMTE1NCw3IEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywgb2ktPmlwX29wZW5fY291bnQpOwogCiAJLyogQ2xlYXIgYWxsIG90aGVyIGZsYWdzLiAqLwotCW9pLT5pcF9mbGFncyA9IE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORTsKLQlvaS0+aXBfY3JlYXRlZF90cmFucyA9IDA7Ci0Jb2ktPmlwX2xhc3RfdHJhbnMgPSAwOworCW9pLT5pcF9mbGFncyA9IDA7CiAJb2ktPmlwX2Rpcl9zdGFydF9sb29rdXAgPSAwOwogCW9pLT5pcF9ibGtubyA9IDBVTEw7CiAKQEAgLTEyMzksNyArMTI0Niw3IEBACiAJbWxvZ19lbnRyeSgiKGlub2RlICVsbHUpXG4iLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCBiaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTM4MCw4ICsxMzg3LDggQEAKIAlpbnQgcmM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7CiAKLQlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIDEsICZ0bXAsCi0JCQkgICAgICAgZmxhZ3MsIG9jZnMyX3ZhbGlkYXRlX2lub2RlX2Jsb2NrKTsKKwlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGlub2RlKSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJICAgICAgIDEsICZ0bXAsIGZsYWdzLCBvY2ZzMl92YWxpZGF0ZV9pbm9kZV9ibG9jayk7CiAKIAkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrcygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KIAlpZiAoIXJjICYmICEqYmgpCkBAIC0xMzk0LDMgKzE0MDEsNTYgQEAKIHsKIAlyZXR1cm4gb2NmczJfcmVhZF9pbm9kZV9ibG9ja19mdWxsKGlub2RlLCBiaCwgMCk7CiB9CisKKworc3RhdGljIHU2NCBvY2ZzMl9pbm9kZV9jYWNoZV9vd25lcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCXJldHVybiBvaS0+aXBfYmxrbm87Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9jZnMyX2lub2RlX2NhY2hlX2dldF9zdXBlcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCXJldHVybiBvaS0+dmZzX2lub2RlLmlfc2I7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2lub2RlX2NhY2hlX2xvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gY2FjaGVfaW5mb190b19pbm9kZShjaSk7CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfaW5vZGVfY2FjaGVfdW5sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IGNhY2hlX2luZm9fdG9faW5vZGUoY2kpOworCisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfaW5vZGVfY2FjaGVfaW9fbG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCW11dGV4X2xvY2soJm9pLT5pcF9pb19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2lub2RlX2NhY2hlX2lvX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCW11dGV4X3VubG9jaygmb2ktPmlwX2lvX211dGV4KTsKK30KKworY29uc3Qgc3RydWN0IG9jZnMyX2NhY2hpbmdfb3BlcmF0aW9ucyBvY2ZzMl9pbm9kZV9jYWNoaW5nX29wcyA9IHsKKwkuY29fb3duZXIJCT0gb2NmczJfaW5vZGVfY2FjaGVfb3duZXIsCisJLmNvX2dldF9zdXBlcgkJPSBvY2ZzMl9pbm9kZV9jYWNoZV9nZXRfc3VwZXIsCisJLmNvX2NhY2hlX2xvY2sJCT0gb2NmczJfaW5vZGVfY2FjaGVfbG9jaywKKwkuY29fY2FjaGVfdW5sb2NrCT0gb2NmczJfaW5vZGVfY2FjaGVfdW5sb2NrLAorCS5jb19pb19sb2NrCQk9IG9jZnMyX2lub2RlX2NhY2hlX2lvX2xvY2ssCisJLmNvX2lvX3VubG9jawkJPSBvY2ZzMl9pbm9kZV9jYWNoZV9pb191bmxvY2ssCit9OworCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5oIGIvZnMvb2NmczIvaW5vZGUuaAppbmRleCBlYTcxNTI1Li5iYTRmZTA3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5oCisrKyBiL2ZzL29jZnMyL2lub2RlLmgKQEAgLTYwLDEyICs2MCw2IEBACiAKIAl1MzIJCQkJaXBfZGlyX3N0YXJ0X2xvb2t1cDsKIAotCS8qIG5leHQgdHdvIGFyZSBwcm90ZWN0ZWQgYnkgdHJhbnNfaW5jX2xvY2sgKi8KLQkvKiB3aGljaCB0cmFuc2FjdGlvbiB3ZXJlIHdlIGNyZWF0ZWQgb24/IFplcm8gaWYgbm9uZS4gKi8KLQl1bnNpZ25lZCBsb25nCQkJaXBfY3JlYXRlZF90cmFuczsKLQkvKiBsYXN0IHRyYW5zYWN0aW9uIHdlIHdlcmUgYSBwYXJ0IG9mLiAqLwotCXVuc2lnbmVkIGxvbmcJCQlpcF9sYXN0X3RyYW5zOwotCiAJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbwlpcF9tZXRhZGF0YV9jYWNoZTsKIAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbWFwCQlpcF9leHRlbnRfbWFwOwpAQCAtMTA2LDggKzEwMCw2IEBACiAjZGVmaW5lIE9DRlMyX0lOT0RFX01BWUJFX09SUEhBTkVECTB4MDAwMDAwMjAKIC8qIERvZXMgc29tZW9uZSBoYXZlIHRoZSBmaWxlIG9wZW4gT19ESVJFQ1QgKi8KICNkZWZpbmUgT0NGUzJfSU5PREVfT1BFTl9ESVJFQ1QJCTB4MDAwMDAwNDAKLS8qIEluZGljYXRlcyB0aGF0IHRoZSBtZXRhZGF0YSBjYWNoZSBzaG91bGQgYmUgdXNlZCBhcyBhbiBhcnJheS4gKi8KLSNkZWZpbmUgT0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FCTB4MDAwMDAwODAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqT0NGUzJfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMTIwLDYgKzExMiwxMiBAQAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpvY2ZzMl9pbm9kZV9jYWNoZTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zIG9jZnMyX2lub2RlX2NhY2hpbmdfb3BzOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKklOT0RFX0NBQ0hFKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuICZPQ0ZTMl9JKGlub2RlKS0+aXBfbWV0YWRhdGFfY2FjaGU7Cit9CiAKIHZvaWQgb2NmczJfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG9jZnMyX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTE3Miw0ICsxNzAsMTAgQEAKIC8qIFRoZSBzYW1lLCBidXQgY2FuIGJlIHBhc3NlZCBPQ0ZTMl9CSF8qIGZsYWdzICovCiBpbnQgb2NmczJfcmVhZF9pbm9kZV9ibG9ja19mdWxsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAogCQkJCWludCBmbGFncyk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKmNhY2hlX2luZm9fdG9faW5vZGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaSwgc3RydWN0IG9jZnMyX2lub2RlX2luZm8sIGlwX21ldGFkYXRhX2NhY2hlKTsKK30KKwogI2VuZGlmIC8qIE9DRlMyX0lOT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lvY3RsLmMgYi9mcy9vY2ZzMi9pb2N0bC5jCmluZGV4IDQ2N2I0MTMuLjMxZmJiMDYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lvY3RsLmMKKysrIGIvZnMvb2NmczIvaW9jdGwuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIm9jZnMyX2ZzLmgiCiAjaW5jbHVkZSAiaW9jdGwuaCIKICNpbmNsdWRlICJyZXNpemUuaCIKKyNpbmNsdWRlICJyZWZjb3VudHRyZWUuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KIApAQCAtMTE1LDYgKzExNiw5IEBACiAJaW50IHN0YXR1czsKIAlzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdiBzcjsKIAlzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0IGlucHV0OworCXN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cyBhcmdzOworCWNvbnN0IGNoYXIgKm9sZF9wYXRoLCAqbmV3X3BhdGg7CisJYm9vbCBwcmVzZXJ2ZTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBPQ0ZTMl9JT0NfR0VURkxBR1M6CkBAIC0xNjAsNiArMTY0LDE1IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZXR1cm4gb2NmczJfZ3JvdXBfYWRkKGlub2RlLCAmaW5wdXQpOworCWNhc2UgT0NGUzJfSU9DX1JFRkxJTks6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgKHN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cyAqKWFyZywKKwkJCQkgICBzaXplb2YoYXJncykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCW9sZF9wYXRoID0gKGNvbnN0IGNoYXIgKikodW5zaWduZWQgbG9uZylhcmdzLm9sZF9wYXRoOworCQluZXdfcGF0aCA9IChjb25zdCBjaGFyICopKHVuc2lnbmVkIGxvbmcpYXJncy5uZXdfcGF0aDsKKwkJcHJlc2VydmUgPSAoYXJncy5wcmVzZXJ2ZSAhPSAwKTsKKworCQlyZXR1cm4gb2NmczJfcmVmbGlua19pb2N0bChpbm9kZSwgb2xkX3BhdGgsIG5ld19wYXRoLCBwcmVzZXJ2ZSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpAQCAtMTgyLDYgKzE5NSw3IEBACiAJY2FzZSBPQ0ZTMl9JT0NfR1JPVVBfRVhURU5EOgogCWNhc2UgT0NGUzJfSU9DX0dST1VQX0FERDoKIAljYXNlIE9DRlMyX0lPQ19HUk9VUF9BREQ2NDoKKwljYXNlIE9DRlMyX0lPQ19SRUZMSU5LOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGM0OGI5M2EuLjU0YzE2YjYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJzbG90X21hcC5oIgogI2luY2x1ZGUgInN1cGVyLmgiCiAjaW5jbHVkZSAic3lzZmlsZS5oIgorI2luY2x1ZGUgInVwdG9kYXRlLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCkBAIC01NTQsNiArNTU1LDE0IEBACiAJLm90X29mZnNldAk9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2ssIGhfY2hlY2spLAogfTsKIAorc3RhdGljIHN0cnVjdCBvY2ZzMl90cmlnZ2VycyByYl90cmlnZ2VycyA9IHsKKwkub3RfdHJpZ2dlcnMgPSB7CisJCS50X2NvbW1pdCA9IG9jZnMyX2NvbW1pdF90cmlnZ2VyLAorCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCisJfSwKKwkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9jaGVjayksCit9OworCiBzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGdkX3RyaWdnZXJzID0gewogCS5vdF90cmlnZ2VycyA9IHsKIAkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCkBAIC02MDEsMTQgKzYxMCwxNiBAQAogfTsKIAogc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgc3RydWN0IG9jZnMyX3RyaWdnZXJzICp0cmlnZ2VycywKIAkJCQkgIGludCB0eXBlKQogewogCWludCBzdGF0dXM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPQorCQlPQ0ZTMl9TQihvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpKTsKIAotCUJVR19PTighaW5vZGUpOworCUJVR19PTighY2kgfHwgIWNpLT5jaV9vcHMpOwogCUJVR19PTighaGFuZGxlKTsKIAlCVUdfT04oIWJoKTsKIApAQCAtNjI3LDE1ICs2MzgsMTUgQEAKIAkJQlVHKCk7CiAJfQogCi0JLyogU2V0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGluZm9ybWF0aW9uIG9uIHRoZSBpbm9kZSBzbworCS8qIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBvbiB0aGUgY2kgc28KIAkgKiB0aGF0IHRoZSBsb2NraW5nIGNvZGUga25vd3Mgd2hldGhlciBpdCBjYW4gZHJvcCBpdCdzIGxvY2tzCi0JICogb24gdGhpcyBpbm9kZSBvciBub3QuIFdlJ3JlIHByb3RlY3RlZCBmcm9tIHRoZSBjb21taXQKKwkgKiBvbiB0aGlzIGNpIG9yIG5vdC4gV2UncmUgcHJvdGVjdGVkIGZyb20gdGhlIGNvbW1pdAogCSAqIHRocmVhZCB1cGRhdGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpZCB1bnRpbAogCSAqIG9jZnMyX2NvbW1pdF90cmFucygpIGJlY2F1c2Ugb2NmczJfc3RhcnRfdHJhbnMoKSB0b29rCiAJICogal90cmFuc19iYXJyaWVyIGZvciB1cy4gKi8KLQlvY2ZzMl9zZXRfaW5vZGVfbG9ja190cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPmpvdXJuYWwsIGlub2RlKTsKKwlvY2ZzMl9zZXRfY2lfbG9ja190cmFucyhvc2ItPmpvdXJuYWwsIGNpKTsKIAotCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhjaSk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEU6CiAJY2FzZSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURToKQEAgLTY1MCw5ICs2NjEsOSBAQAogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQltbG9nKE1MX0VSUk9SLCAiVWtub3duIGFjY2VzcyB0eXBlIVxuIik7CiAJfQotCWlmICghc3RhdHVzICYmIG9jZnMyX21ldGFfZWNjKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkgJiYgdHJpZ2dlcnMpCisJaWYgKCFzdGF0dXMgJiYgb2NmczJfbWV0YV9lY2Mob3NiKSAmJiB0cmlnZ2VycykKIAkJamJkMl9qb3VybmFsX3NldF90cmlnZ2VycyhiaCwgJnRyaWdnZXJzLT5vdF90cmlnZ2Vycyk7Ci0JbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhjaSk7CiAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZyhNTF9FUlJPUiwgIkVycm9yICVkIGdldHRpbmcgJWQgYWNjZXNzIHRvIGJ1ZmZlciFcbiIsCkBAIC02NjIsNjYgKzY3Myw2NSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQotewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZGlfdHJpZ2dlcnMsCi0JCQkJICAgICAgdHlwZSk7Ci19Ci0KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZWJfdHJpZ2dlcnMsCi0JCQkJICAgICAgdHlwZSk7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZkaV90cmlnZ2VycywgdHlwZSk7CiB9CiAKLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZ2RfdHJpZ2dlcnMsCi0JCQkJICAgICAgdHlwZSk7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZlYl90cmlnZ2VycywgdHlwZSk7CiB9CiAKLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZGJfdHJpZ2dlcnMsCisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZyYl90cmlnZ2VycywKIAkJCQkgICAgICB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZ4Yl90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmdkX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkcV90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmRiX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkcl90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJnhiX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkbF90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmRxX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCit7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZkcl90cmlnZ2VycywgdHlwZSk7Cit9CisKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmRsX3RyaWdnZXJzLCB0eXBlKTsKK30KKworaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCBOVUxMLCB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgTlVMTCwgdHlwZSk7CiB9CiAKIGludCBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZV90ICpoYW5kbGUsCkBAIC04OTgsNyArOTA4LDcgQEAKIAkJb2NmczJfYnVtcF9yZWNvdmVyeV9nZW5lcmF0aW9uKGZlKTsKIAogCW9jZnMyX2NvbXB1dGVfbWV0YV9lY2Mob3NiLT5zYiwgYmgtPmJfZGF0YSwgJmZlLT5pX2NoZWNrKTsKLQlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGJoLCBqb3VybmFsLT5qX2lub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGJoLCBJTk9ERV9DQUNIRShqb3VybmFsLT5qX2lub2RlKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIApAQCAtMTY0Miw3ICsxNjUyLDcgQEAKIAkJCQkJb2NmczJfZ2V0X3JlY292ZXJ5X2dlbmVyYXRpb24oZmUpOwogCiAJb2NmczJfY29tcHV0ZV9tZXRhX2VjYyhvc2ItPnNiLCBiaC0+Yl9kYXRhLCAmZmUtPmlfY2hlY2spOwotCXN0YXR1cyA9IG9jZnMyX3dyaXRlX2Jsb2NrKG9zYiwgYmgsIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGJoLCBJTk9ERV9DQUNIRShpbm9kZSkpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCAyYzMyMjJhLi4zZjc0ZTA5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC05MCw1NiArOTAsNjYgQEAKIAlyZXR1cm4gb2xkX2lkOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2V0X2lub2RlX2xvY2tfdHJhbnMoc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwsCi0JCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2V0X2NpX2xvY2tfdHJhbnMoc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQogewogCXNwaW5fbG9jaygmdHJhbnNfaW5jX2xvY2spOwotCU9DRlMyX0koaW5vZGUpLT5pcF9sYXN0X3RyYW5zID0gam91cm5hbC0+al90cmFuc19pZDsKKwljaS0+Y2lfbGFzdF90cmFucyA9IGpvdXJuYWwtPmpfdHJhbnNfaWQ7CiAJc3Bpbl91bmxvY2soJnRyYW5zX2luY19sb2NrKTsKIH0KIAogLyogVXNlZCB0byBmaWd1cmUgb3V0IHdoZXRoZXIgaXQncyBzYWZlIHRvIGRyb3AgYSBtZXRhZGF0YSBsb2NrIG9uIGFuCi0gKiBpbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFsbCB0aGUgaW5vZGVzIGNoYW5nZXMgaGF2ZSBiZWVuCisgKiBjYWNoZWQgb2JqZWN0LiBSZXR1cm5zIHRydWUgaWYgYWxsIHRoZSBvYmplY3QncyBjaGFuZ2VzIGhhdmUgYmVlbgogICogY2hlY2twb2ludGVkIHRvIGRpc2suIFlvdSBzaG91bGQgYmUgaG9sZGluZyB0aGUgc3BpbmxvY2sgb24gdGhlCiAgKiBtZXRhZGF0YSBsb2NrIHdoaWxlIGNhbGxpbmcgdGhpcyB0byBiZSBzdXJlIHRoYXQgbm9ib2R5IGNhbiB0YWtlCiAgKiB0aGUgbG9jayBhbmQgcHV0IGl0IG9uIGFub3RoZXIgdHJhbnNhY3Rpb24uICovCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pbm9kZV9mdWxseV9jaGVja3BvaW50ZWQoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NpX2Z1bGx5X2NoZWNrcG9pbnRlZChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBvY2ZzMl9qb3VybmFsICpqb3VybmFsID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5qb3VybmFsOworCXN0cnVjdCBvY2ZzMl9qb3VybmFsICpqb3VybmFsID0KKwkJT0NGUzJfU0Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSktPmpvdXJuYWw7CiAKIAlzcGluX2xvY2soJnRyYW5zX2luY19sb2NrKTsKLQlyZXQgPSB0aW1lX2FmdGVyKGpvdXJuYWwtPmpfdHJhbnNfaWQsIE9DRlMyX0koaW5vZGUpLT5pcF9sYXN0X3RyYW5zKTsKKwlyZXQgPSB0aW1lX2FmdGVyKGpvdXJuYWwtPmpfdHJhbnNfaWQsIGNpLT5jaV9sYXN0X3RyYW5zKTsKIAlzcGluX3VubG9jaygmdHJhbnNfaW5jX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKLS8qIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFuIGlub2RlIGlzIHN0aWxsIG5ldyAoaGFzIG5ldmVyCi0gKiBoaXQgZGlzaykgV2lsbCBkbyB5b3UgYSBmYXZvciBhbmQgc2V0IGNyZWF0ZWRfdHJhbnMgPSAwIHdoZW4geW91J3ZlCi0gKiBiZWVuIGNoZWNrcG9pbnRlZC4gIHJldHVybnMgJzEnIGlmIHRoZSBpbm9kZSBpcyBzdGlsbCBuZXcuICovCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pbm9kZV9pc19uZXcoc3RydWN0IGlub2RlICppbm9kZSkKKy8qIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBiYWNrZWQgYnkgc3RydWN0CisgKiBvY2ZzMl9jYWNoaW5nX2luZm8gIGlzIHN0aWxsIG5ldyAoaGFzIG5ldmVyIGhpdCBkaXNrKSBXaWxsIGRvIHlvdSBhCisgKiBmYXZvciBhbmQgc2V0IGNyZWF0ZWRfdHJhbnMgPSAwIHdoZW4geW91J3ZlCisgKiBiZWVuIGNoZWNrcG9pbnRlZC4gIHJldHVybnMgJzEnIGlmIHRoZSBjaSBpcyBzdGlsbCBuZXcuICovCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jaV9pc19uZXcoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfam91cm5hbCAqam91cm5hbCA9CisJCU9DRlMyX1NCKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSkpLT5qb3VybmFsOwogCisJc3Bpbl9sb2NrKCZ0cmFuc19pbmNfbG9jayk7CisJcmV0ID0gISh0aW1lX2FmdGVyKGpvdXJuYWwtPmpfdHJhbnNfaWQsIGNpLT5jaV9jcmVhdGVkX3RyYW5zKSk7CisJaWYgKCFyZXQpCisJCWNpLT5jaV9jcmVhdGVkX3RyYW5zID0gMDsKKwlzcGluX3VubG9jaygmdHJhbnNfaW5jX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qIFdyYXBwZXIgZm9yIGlub2RlcyBzbyB3ZSBjYW4gY2hlY2sgc3lzdGVtIGZpbGVzICovCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pbm9kZV9pc19uZXcoc3RydWN0IGlub2RlICppbm9kZSkKK3sKIAkvKiBTeXN0ZW0gZmlsZXMgYXJlIG5ldmVyICJuZXciIGFzIHRoZXkncmUgd3JpdHRlbiBvdXQgYnkKIAkgKiBta2ZzLiBUaGlzIGhlbHBzIHVzIGVhcmx5IGR1cmluZyBtb3VudCwgYmVmb3JlIHdlIGhhdmUgdGhlCiAJICogam91cm5hbCBvcGVuIGFuZCBqX3RyYW5zX2lkIGNvdWxkIGJlIGp1bmsuICovCiAJaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX1NZU1RFTV9GSUxFKQogCQlyZXR1cm4gMDsKLQlzcGluX2xvY2soJnRyYW5zX2luY19sb2NrKTsKLQlyZXQgPSAhKHRpbWVfYWZ0ZXIoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5qb3VybmFsLT5qX3RyYW5zX2lkLAotCQkJICAgT0NGUzJfSShpbm9kZSktPmlwX2NyZWF0ZWRfdHJhbnMpKTsKLQlpZiAoIXJldCkKLQkJT0NGUzJfSShpbm9kZSktPmlwX2NyZWF0ZWRfdHJhbnMgPSAwOwotCXNwaW5fdW5sb2NrKCZ0cmFuc19pbmNfbG9jayk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiBvY2ZzMl9jaV9pc19uZXcoSU5PREVfQ0FDSEUoaW5vZGUpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2lub2RlX3NldF9uZXcoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfY2lfc2V0X25ldyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCiB7CiAJc3Bpbl9sb2NrKCZ0cmFuc19pbmNfbG9jayk7Ci0JT0NGUzJfSShpbm9kZSktPmlwX2NyZWF0ZWRfdHJhbnMgPSBvc2ItPmpvdXJuYWwtPmpfdHJhbnNfaWQ7CisJY2ktPmNpX2NyZWF0ZWRfdHJhbnMgPSBvc2ItPmpvdXJuYWwtPmpfdHJhbnNfaWQ7CiAJc3Bpbl91bmxvY2soJnRyYW5zX2luY19sb2NrKTsKIH0KIApAQCAtMjAwLDcgKzIxMCw3IEBACiAJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCiAJCXJldHVybjsKIAotCWlmICghb2NmczJfaW5vZGVfZnVsbHlfY2hlY2twb2ludGVkKGlub2RlKSkgeworCWlmICghb2NmczJfY2lfZnVsbHlfY2hlY2twb2ludGVkKElOT0RFX0NBQ0hFKGlub2RlKSkpIHsKIAkJLyogV0FSTklORzogVGhpcyBvbmx5IGtpY2tzIG9mZiBhIHNpbmdsZQogCQkgKiBjaGVja3BvaW50LiBJZiBzb21lb25lIHJhY2VzIHlvdSBhbmQgYWRkcyBtb3JlCiAJCSAqIG1ldGFkYXRhIHRvIHRoZSBqb3VybmFsLCB5b3Ugd29uJ3Qga25vdywgYW5kIHdpbGwKQEAgLTIxMCw3ICsyMjAsNyBAQAogCQlvY2ZzMl9zdGFydF9jaGVja3BvaW50KG9zYik7CiAKIAkJd2FpdF9ldmVudChvc2ItPmpvdXJuYWwtPmpfY2hlY2twb2ludGVkLAotCQkJICAgb2NmczJfaW5vZGVfZnVsbHlfY2hlY2twb2ludGVkKGlub2RlKSk7CisJCQkgICBvY2ZzMl9jaV9mdWxseV9jaGVja3BvaW50ZWQoSU5PREVfQ0FDSEUoaW5vZGUpKSk7CiAJfQogfQogCkBAIC0yNjYsMzEgKzI3NiwzNCBAQAogCiAKIC8qIG9jZnMyX2lub2RlICovCi1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdHlwZSk7CiAvKiBvY2ZzMl9leHRlbnRfYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKKy8qIG9jZnMyX3JlZmNvdW50X2Jsb2NrICovCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogLyogb2NmczJfZ3JvdXBfZGVzYyAqLwotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2dkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogLyogb2NmczJfeGF0dHJfYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIHF1b3RhIGJsb2NrcyAqLwotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogLyogZGlyYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIG9jZnMyX2R4X3Jvb3RfYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIG9jZnMyX2R4X2xlYWYgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIEFueXRoaW5nIHRoYXQgaGFzIG5vIGVjYyAqLwotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogCiAvKgpAQCAtNDc3LDYgKzQ5MCwyMyBAQAogCXJldHVybiBjcmVkaXRzOwogfQogCisvKiBpbm9kZSB1cGRhdGUsIG5ldyByZWZjb3VudCBibG9jayBhbmQgaXRzIGFsbG9jYXRpb24gY3JlZGl0cy4gKi8KKyNkZWZpbmUgT0NGUzJfUkVGQ09VTlRfVFJFRV9DUkVBVEVfQ1JFRElUUyAoT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAxIFwKKwkJCQkJICAgICsgT0NGUzJfU1VCQUxMT0NfQUxMT0MpCisKKy8qIGlub2RlIGFuZCB0aGUgcmVmY291bnQgYmxvY2sgdXBkYXRlLiAqLworI2RlZmluZSBPQ0ZTMl9SRUZDT1VOVF9UUkVFX1NFVF9DUkVESVRTIChPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDEpCisKKy8qCisgKiBpbm9kZSBhbmQgdGhlIHJlZmNvdW50IGJsb2NrIHVwZGF0ZS4KKyAqIEl0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgY3JlZGl0cyBmb3Igc3ViIGFsbG9jIGNoYW5nZS4KKyAqIFNvIGlmIHdlIG5lZWQgdG8gZnJlZSB0aGUgYml0LCBPQ0ZTMl9TVUJBTExPQ19GUkVFIG5lZWRzIHRvIGJlIGFkZGVkLgorICovCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX1RSRUVfUkVNT1ZFX0NSRURJVFMgKE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMSkKKworLyogMiBtZXRhZGF0YSBhbGxvYywgMiBuZXcgYmxvY2tzIGFuZCByb290IHJlZmNvdW50IGJsb2NrICovCisjZGVmaW5lIE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFMgKE9DRlMyX1NVQkFMTE9DX0FMTE9DICogMiArIDMpCisKIC8qCiAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCByb290X2VsIGlzIHRoZSByb290CiAgKiBvZiBleHRlbnQgdHJlZS4gU28gZm9yIGFuIGlub2RlLCBpdCBzaG91bGQgYmUgJmZlLT5pZDIuaV9saXN0LiBPdGhlcndpc2UKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwppbmRleCBiYWM3ZTZhLi5hYzEwZjgzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKKysrIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCkBAIC0yOTcsOCArMjk3LDggQEAKIAl9CiAJbWVtY3B5KGFsbG9jX2NvcHksIGFsbG9jLCBiaC0+Yl9zaXplKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgbG9jYWxfYWxsb2NfaW5vZGUsIGJoLAotCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUobG9jYWxfYWxsb2NfaW5vZGUpLAorCQkJCQkgYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKQEAgLTM5Miw3ICszOTIsNyBAQAogCW9jZnMyX2NsZWFyX2xvY2FsX2FsbG9jKGFsbG9jKTsKIAogCW9jZnMyX2NvbXB1dGVfbWV0YV9lY2Mob3NiLT5zYiwgYWxsb2NfYmgtPmJfZGF0YSwgJmFsbG9jLT5pX2NoZWNrKTsKLQlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGFsbG9jX2JoLCBpbm9kZSk7CisJc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCBhbGxvY19iaCwgSU5PREVfQ0FDSEUoaW5vZGUpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCkBAIC02NzgsNyArNjc4LDggQEAKIAkgKiBkZWxldGUgYml0cyBmcm9tIGl0ISAqLwogCSpudW1fYml0cyA9IGJpdHNfd2FudGVkOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBsb2NhbF9hbGxvY19pbm9kZSwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsCisJCQkJCSBJTk9ERV9DQUNIRShsb2NhbF9hbGxvY19pbm9kZSksCiAJCQkJCSBvc2ItPmxvY2FsX2FsbG9jX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xMTU2LDcgKzExNTcsOCBAQAogCX0KIAltZW1jcHkoYWxsb2NfY29weSwgYWxsb2MsIG9zYi0+bG9jYWxfYWxsb2NfYmgtPmJfc2l6ZSk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGxvY2FsX2FsbG9jX2lub2RlLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwKKwkJCQkJIElOT0RFX0NBQ0hFKGxvY2FsX2FsbG9jX2lub2RlKSwKIAkJCQkJIG9zYi0+bG9jYWxfYWxsb2NfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDg2MDFmOTMuLmYwMTBiMjIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtNjksNyArNjksNiBAQAogc3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgICBkZXZfdCBkZXYsCiAJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfZmVfYmgsCiAJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKQEAgLTc4LDcgKzc3LDcgQEAKIAogc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqKnJldF9vcnBoYW5fZGlyLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICB1NjQgYmxrbm8sCiAJCQkJICAgIGNoYXIgKm5hbWUsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKTsKIApAQCAtMzU4LDggKzM1NywxMiBAQAogCX0KIAlkaWRfcXVvdGFfaW5vZGUgPSAxOwogCisJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICVkLCAlbHUsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAorCQkgICBpbm9kZS0+aV9tb2RlLCAodW5zaWduZWQgbG9uZylkZXYsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkJICAgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKIAkvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi8KLQlzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLCBkZW50cnksIGRldiwKKwlzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLCBkZXYsCiAJCQkJICAgICZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLAogCQkJCSAgICBpbm9kZV9hYyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTM3NSw3ICszNzgsOCBAQAogCQkJZ290byBsZWF2ZTsKIAkJfQogCi0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBwYXJlbnRfZmVfYmgsCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwKKwkJCQkJCSBwYXJlbnRfZmVfYmgsCiAJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNDY1LDcgKzQ2OSw2IEBACiBzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgIGRldl90IGRldiwKIAkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19mZV9iaCwKIAkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLApAQCAtNDc5LDEwICs0ODIsNiBAQAogCXUxNiBzdWJhbGxvY19iaXQ7CiAJdTE2IGZlYXQ7CiAKLQltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJWQsICVsdSwgJyUuKnMnKVxuIiwgZGlyLCBkZW50cnksCi0JCSAgIGlub2RlLT5pX21vZGUsICh1bnNpZ25lZCBsb25nKWRldiwgZGVudHJ5LT5kX25hbWUubGVuLAotCQkgICBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQogCSpuZXdfZmVfYmggPSBOVUxMOwogCiAJc3RhdHVzID0gb2NmczJfY2xhaW1fbmV3X2lub2RlKG9zYiwgaGFuZGxlLCBkaXIsIHBhcmVudF9mZV9iaCwKQEAgLTUwNyw5ICs1MDYsMTAgQEAKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwogCX0KLQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgKm5ld19mZV9iaCk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUoaW5vZGUpLCAqbmV3X2ZlX2JoKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsICpuZXdfZmVfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSAqbmV3X2ZlX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC01NjUsNyArNTY1LDcgQEAKIAl9CiAKIAlvY2ZzMl9wb3B1bGF0ZV9pbm9kZShpbm9kZSwgZmUsIDEpOwotCW9jZnMyX2lub2RlX3NldF9uZXcob3NiLCBpbm9kZSk7CisJb2NmczJfY2lfc2V0X25ldyhvc2IsIElOT0RFX0NBQ0hFKGlub2RlKSk7CiAJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKSB7CiAJCXN0YXR1cyA9IG9jZnMyX2NyZWF0ZV9uZXdfaW5vZGVfbG9ja3MoaW5vZGUpOwogCQlpZiAoc3RhdHVzIDwgMCkKQEAgLTY4Miw3ICs2ODIsNyBAQAogCQlnb3RvIG91dF91bmxvY2tfaW5vZGU7CiAJfQogCi0JZXJyID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZmVfYmgsCisJZXJyID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGZlX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoZXJyIDwgMCkgewogCQltbG9nX2Vycm5vKGVycik7CkBAIC04NTAsNyArODUwLDggQEAKIAl9CiAKIAlpZiAoaW5vZGVfaXNfdW5saW5rYWJsZShpbm9kZSkpIHsKLQkJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9vcnBoYW5fZGlyKG9zYiwgJm9ycGhhbl9kaXIsIGlub2RlLAorCQlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIob3NiLCAmb3JwaGFuX2RpciwKKwkJCQkJCSAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAogCQkJCQkJICBvcnBoYW5fbmFtZSwgJm9ycGhhbl9pbnNlcnQpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtODY2LDcgKzg2Nyw3IEBACiAJCWdvdG8gbGVhdmU7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZmVfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGZlX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEyNDEsOSArMTI0Miw4IEBACiAKIAkJaWYgKFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpIHx8IChuZXdfaW5vZGUtPmlfbmxpbmsgPT0gMSkpIHsKIAkJCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfb3JwaGFuX2Rpcihvc2IsICZvcnBoYW5fZGlyLAotCQkJCQkJCSAgbmV3X2lub2RlLAotCQkJCQkJCSAgb3JwaGFuX25hbWUsCi0JCQkJCQkJICAmb3JwaGFuX2luc2VydCk7CisJCQkJCQlPQ0ZTMl9JKG5ld19pbm9kZSktPmlwX2Jsa25vLAorCQkJCQkJb3JwaGFuX25hbWUsICZvcnBoYW5faW5zZXJ0KTsKIAkJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJCWdvdG8gYmFpbDsKQEAgLTEyODQsNyArMTI4NCw4IEBACiAJCQkJZ290byBiYWlsOwogCQkJfQogCQl9Ci0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgbmV3X2lub2RlLCBuZXdmZV9iaCwKKwkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShuZXdfaW5vZGUpLAorCQkJCQkJIG5ld2ZlX2JoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEzMzEsNyArMTMzMiw4IEBACiAJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgb2xkX2lub2RlLCBvbGRfaW5vZGVfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShvbGRfaW5vZGUpLAorCQkJCQkgb2xkX2lub2RlX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPj0gMCkgewogCQlvbGRfZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvbGRfaW5vZGVfYmgtPmJfZGF0YTsKQEAgLTE0MDcsOSArMTQwOSwxMCBAQAogCQkJICAgICAoaW50KW9sZF9kaXJfbmxpbmssIG9sZF9kaXItPmlfbmxpbmspOwogCQl9IGVsc2UgewogCQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmU7Ci0JCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIG9sZF9kaXIsCi0JCQkJCQkgICAgICBvbGRfZGlyX2JoLAotCQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkJCSBJTk9ERV9DQUNIRShvbGRfZGlyKSwKKwkJCQkJCQkgb2xkX2Rpcl9iaCwKKwkJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvbGRfZGlyX2JoLT5iX2RhdGE7CiAJCQlvY2ZzMl9zZXRfbGlua3NfY291bnQoZmUsIG9sZF9kaXItPmlfbmxpbmspOwogCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG9sZF9kaXJfYmgpOwpAQCAtMTUyNyw5ICsxNTMwLDExIEBACiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CiAJCX0KLQkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoc1t2aXJ0dWFsXSk7CisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGlub2RlKSwKKwkJCQkJICAgICAgYmhzW3ZpcnR1YWxdKTsKIAotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBiaHNbdmlydHVhbF0sCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLAorCQkJCQkgICAgICBiaHNbdmlydHVhbF0sCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xNjkyLDcgKzE2OTcsMTEgQEAKIAl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAotCXN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRlbnRyeSwKKwltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJWQsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAorCQkgICBpbm9kZS0+aV9tb2RlLCBkZW50cnktPmRfbmFtZS5sZW4sCisJCSAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCisJc3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwKIAkJCQkgICAgMCwgJm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsCiAJCQkJICAgIGlub2RlX2FjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMTg0Miw3ICsxODUxLDcgQEAKIAogc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqKnJldF9vcnBoYW5fZGlyLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICB1NjQgYmxrbm8sCiAJCQkJICAgIGNoYXIgKm5hbWUsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewpAQCAtMTg1MCw3ICsxODU5LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9ycGhhbl9kaXJfYmggPSBOVUxMOwogCWludCBzdGF0dXMgPSAwOwogCi0Jc3RhdHVzID0gb2NmczJfYmxrbm9fc3RyaW5naWZ5KE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgbmFtZSk7CisJc3RhdHVzID0gb2NmczJfYmxrbm9fc3RyaW5naWZ5KGJsa25vLCBuYW1lKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CkBAIC0xOTE3LDcgKzE5MjYsOSBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgb3JwaGFuX2Rpcl9pbm9kZSwgb3JwaGFuX2Rpcl9iaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsCisJCQkJCSBJTk9ERV9DQUNIRShvcnBoYW5fZGlyX2lub2RlKSwKKwkJCQkJIG9ycGhhbl9kaXJfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMjAwMiw3ICsyMDEzLDkgQEAKIAkJZ290byBsZWF2ZTsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsb3JwaGFuX2Rpcl9pbm9kZSwgIG9ycGhhbl9kaXJfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkgSU5PREVfQ0FDSEUob3JwaGFuX2Rpcl9pbm9kZSksCisJCQkJCSBvcnBoYW5fZGlyX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTIwMjgsNiArMjA0MSwyNzQgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgaW50IG1vZGUsCisJCQkJIHN0cnVjdCBpbm9kZSAqKm5ld19pbm9kZSkKK3sKKwlpbnQgc3RhdHVzLCBkaWRfcXVvdGFfaW5vZGUgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqb3JwaGFuX2RpciA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gTlVMTDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwljaGFyIG9ycGhhbl9uYW1lW09DRlMyX09SUEhBTl9OQU1FTEVOICsgMV07CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZGlfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2RpX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqaW5vZGVfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBvcnBoYW5faW5zZXJ0ID0geyBOVUxMLCB9OworCisJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhkaXIsICZwYXJlbnRfZGlfYmgsIDEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKgorCSAqIFdlIGdpdmUgdGhlIG9ycGhhbiBkaXIgdGhlIHJvb3QgYmxrbm8gdG8gZmFrZSBhbiBvcnBoYW4gbmFtZSwKKwkgKiBhbmQgYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBvdXIgaW5zZXJ0aW9uLgorCSAqLworCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfb3JwaGFuX2Rpcihvc2IsICZvcnBoYW5fZGlyLAorCQkJCQkgIG9zYi0+cm9vdF9ibGtubywKKwkJCQkJICBvcnBoYW5fbmFtZSwgJm9ycGhhbl9pbnNlcnQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiByZXNlcnZlIGFuIGlub2RlIHNwb3QgKi8KKwlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX25ld19pbm9kZShvc2IsICZpbm9kZV9hYyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCWlub2RlID0gb2NmczJfZ2V0X2luaXRfaW5vZGUoZGlyLCBtb2RlKTsKKwlpZiAoIWlub2RlKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLT5zYiwgMCwgMCkpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiBXZSBkb24ndCB1c2Ugc3RhbmRhcmQgVkZTIHdyYXBwZXIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHZmc19kcV9pbml0CisJICogdG8gYmUgY2FsbGVkLiAqLworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKG9zYi0+c2IpICYmCisJICAgIG9zYi0+c2ItPmRxX29wLT5hbGxvY19pbm9kZShpbm9kZSwgMSkgPT0gTk9fUVVPVEEpIHsKKwkJc3RhdHVzID0gLUVEUVVPVDsKKwkJZ290byBsZWF2ZTsKKwl9CisJZGlkX3F1b3RhX2lub2RlID0gMTsKKworCS8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqLworCXN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsCisJCQkJICAgIDAsICZuZXdfZGlfYmgsIHBhcmVudF9kaV9iaCwgaGFuZGxlLAorCQkJCSAgICBpbm9kZV9hYyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCXN0YXR1cyA9IG9jZnMyX2Jsa25vX3N0cmluZ2lmeShPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIG9ycGhhbl9uYW1lKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKW5ld19kaV9iaC0+Yl9kYXRhOworCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9hZGQob3NiLCBoYW5kbGUsIGlub2RlLCBkaSwgb3JwaGFuX25hbWUsCisJCQkJICAmb3JwaGFuX2luc2VydCwgb3JwaGFuX2Rpcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qIGdldCBvcGVuIGxvY2sgc28gdGhhdCBvbmx5IG5vZGVzIGNhbid0IHJlbW92ZSBpdCBmcm9tIG9ycGhhbiBkaXIuICovCisJc3RhdHVzID0gb2NmczJfb3Blbl9sb2NrKGlub2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCitsZWF2ZToKKwlpZiAoc3RhdHVzIDwgMCAmJiBkaWRfcXVvdGFfaW5vZGUpCisJCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwlpZiAoaGFuZGxlKQorCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCisJaWYgKG9ycGhhbl9kaXIpIHsKKwkJLyogVGhpcyB3YXMgbG9ja2VkIGZvciB1cyBpbiBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIoKSAqLworCQlvY2ZzMl9pbm9kZV91bmxvY2sob3JwaGFuX2RpciwgMSk7CisJCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpci0+aV9tdXRleCk7CisJCWlwdXQob3JwaGFuX2Rpcik7CisJfQorCisJaWYgKHN0YXR1cyA9PSAtRU5PU1BDKQorCQltbG9nKDAsICJEaXNrIGlzIGZ1bGxcbiIpOworCisJaWYgKChzdGF0dXMgPCAwKSAmJiBpbm9kZSkgeworCQljbGVhcl9ubGluayhpbm9kZSk7CisJCWlwdXQoaW5vZGUpOworCX0KKworCWlmIChpbm9kZV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGlub2RlX2FjKTsKKworCWJyZWxzZShuZXdfZGlfYmgpOworCisJaWYgKCFzdGF0dXMpCisJCSpuZXdfaW5vZGUgPSBpbm9kZTsKKworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9ycGhhbl9pbnNlcnQpOworCisJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMSk7CisJYnJlbHNlKHBhcmVudF9kaV9iaCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IG9jZnMyX212X29ycGhhbmVkX2lub2RlX3RvX25ldyhzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9kaV9iaCA9IE5VTEw7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpcl9kaSwgKmRpOworCXN0cnVjdCBpbm9kZSAqb3JwaGFuX2Rpcl9pbm9kZSA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpvcnBoYW5fZGlyX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgbG9va3VwID0geyBOVUxMLCB9OworCisJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICUuKnMnKVxuIiwgZGlyLCBkZW50cnksCisJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKKwlzdGF0dXMgPSBvY2ZzMl9pbm9kZV9sb2NrKGRpciwgJnBhcmVudF9kaV9iaCwgMSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXR1cyAhPSAtRU5PRU5UKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWRpcl9kaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9kaV9iaC0+Yl9kYXRhOworCWlmICghZGlyX2RpLT5pX2xpbmtzX2NvdW50KSB7CisJCS8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovCisJCXN0YXR1cyA9IC1FTk9FTlQ7CisJCWdvdG8gbGVhdmU7CisJfQorCisJc3RhdHVzID0gb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbik7CisJaWYgKHN0YXR1cykKKwkJZ290byBsZWF2ZTsKKworCS8qIGdldCBhIHNwb3QgaW5zaWRlIHRoZSBkaXIuICovCisJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIGRpciwgcGFyZW50X2RpX2JoLAorCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5sZW4sICZsb29rdXApOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlvcnBoYW5fZGlyX2lub2RlID0gb2NmczJfZ2V0X3N5c3RlbV9maWxlX2lub2RlKG9zYiwKKwkJCQkJCSAgICAgICBPUlBIQU5fRElSX1NZU1RFTV9JTk9ERSwKKwkJCQkJCSAgICAgICBvc2ItPnNsb3RfbnVtKTsKKwlpZiAoIW9ycGhhbl9kaXJfaW5vZGUpIHsKKwkJc3RhdHVzID0gLUVFWElTVDsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCW11dGV4X2xvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOworCisJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhvcnBoYW5fZGlyX2lub2RlLCAmb3JwaGFuX2Rpcl9iaCwgMSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQltdXRleF91bmxvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOworCQlpcHV0KG9ycGhhbl9kaXJfaW5vZGUpOworCQlnb3RvIGxlYXZlOworCX0KKworCXN0YXR1cyA9IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soaW5vZGUsICZkaV9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG9ycGhhbl91bmxvY2s7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9yZW5hbWVfY3JlZGl0cyhvc2ItPnNiKSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG9ycGhhbl91bmxvY2s7CisJfQorCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSBkaV9iaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9kZWwob3NiLCBoYW5kbGUsIG9ycGhhbl9kaXJfaW5vZGUsIGlub2RlLAorCQkJCSAgb3JwaGFuX2Rpcl9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJbGUzMl9hZGRfY3B1KCZkaS0+aV9mbGFncywgLU9DRlMyX09SUEhBTkVEX0ZMKTsKKwlkaS0+aV9vcnBoYW5lZF9zbG90ID0gMDsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOworCisJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKKwkJCQkgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBwYXJlbnRfZGlfYmgsCisJCQkJICZsb29rdXApOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXN0YXR1cyA9IG9jZnMyX2RlbnRyeV9hdHRhY2hfbG9jayhkZW50cnksIGlub2RlLAorCQkJCQkgIE9DRlMyX0koZGlyKS0+aXBfYmxrbm8pOworCWlmIChzdGF0dXMpIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOworCWRlbnRyeS0+ZF9vcCA9ICZvY2ZzMl9kZW50cnlfb3BzOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJc3RhdHVzID0gMDsKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK29ycGhhbl91bmxvY2s6CisJb2NmczJfaW5vZGVfdW5sb2NrKG9ycGhhbl9kaXJfaW5vZGUsIDEpOworCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CisJaXB1dChvcnBoYW5fZGlyX2lub2RlKTsKK2xlYXZlOgorCisJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMSk7CisKKwlicmVsc2UoZGlfYmgpOworCWJyZWxzZShwYXJlbnRfZGlfYmgpOworCWJyZWxzZShvcnBoYW5fZGlyX2JoKTsKKworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CisKKwltbG9nX2V4aXQoc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0gewogCS5jcmVhdGUJCT0gb2NmczJfY3JlYXRlLAogCS5sb29rdXAJCT0gb2NmczJfbG9va3VwLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuaCBiL2ZzL29jZnMyL25hbWVpLmgKaW5kZXggNjg4YWVmNi4uZTVkMDU5ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuaAorKysgYi9mcy9vY2ZzMi9uYW1laS5oCkBAIC0zNSw1ICszNSwxMSBAQAogCQkgICAgIHN0cnVjdCBpbm9kZSAqb3JwaGFuX2Rpcl9pbm9kZSwKIAkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqb3JwaGFuX2Rpcl9iaCk7CitpbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgaW50IG1vZGUsCisJCQkJIHN0cnVjdCBpbm9kZSAqKm5ld19pbm9kZSk7CitpbnQgb2NmczJfbXZfb3JwaGFuZWRfaW5vZGVfdG9fbmV3KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgIHN0cnVjdCBpbm9kZSAqbmV3X2lub2RlLAorCQkJCSAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwogCiAjZW5kaWYgLyogT0NGUzJfTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggMzllMWQ1YS4uZWFlNDA0NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC01MSwyMCArNTEsNTEgQEAKIC8qIEZvciBzdHJ1Y3Qgb2NmczJfYmxvY2tjaGVja19zdGF0cyAqLwogI2luY2x1ZGUgImJsb2NrY2hlY2suaCIKIAorCisvKiBDYWNoaW5nIG9mIG1ldGFkYXRhIGJ1ZmZlcnMgKi8KKwogLyogTW9zdCB1c2VyIHZpc2libGUgT0NGUzIgaW5vZGVzIHdpbGwgaGF2ZSB2ZXJ5IGZldyBwaWVjZXMgb2YKICAqIG1ldGFkYXRhLCBidXQgbGFyZ2VyIGZpbGVzIChpbmNsdWRpbmcgYml0bWFwcywgZXRjKSBtdXN0IGJlIHRha2VuCiAgKiBpbnRvIGFjY291bnQgd2hlbiBkZXNpZ25pbmcgYW4gYWNjZXNzIHNjaGVtZS4gV2UgYWxsb3cgYSBzbWFsbAogICogYW1vdW50IG9mIGlubGluZWQgYmxvY2tzIHRvIGJlIHN0b3JlZCBvbiBhbiBhcnJheSBhbmQgZ3JvdyB0aGUKICAqIHN0cnVjdHVyZSBpbnRvIGEgcmIgdHJlZSB3aGVuIG5lY2Vzc2FyeS4gKi8KLSNkZWZpbmUgT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZIDIKKyNkZWZpbmUgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkgMgogCisvKiBGbGFncyBmb3Igb2NmczJfY2FjaGluZ19pbmZvICovCisKK2VudW0gb2NmczJfY2FjaGluZ19pbmZvX2ZsYWdzIHsKKwkvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgdXNpbmcgdGhlIGlubGluZSBhcnJheSAqLworCU9DRlMyX0NBQ0hFX0ZMX0lOTElORQk9IDE8PDEsCit9OworCitzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zOwogc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyB7CisJLyoKKwkgKiBUaGUgcGFyZW50IHN0cnVjdHVyZSBwcm92aWRlcyB0aGUgbG9ja3MsIGJ1dCBiZWNhdXNlIHRoZQorCSAqIHBhcmVudCBzdHJ1Y3R1cmUgY2FuIGRpZmZlciwgaXQgcHJvdmlkZXMgbG9ja2luZyBvcGVyYXRpb25zCisJICogdG8gc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mby4KKwkgKi8KKwljb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zICpjaV9vcHM7CisKKwkvKiBuZXh0IHR3byBhcmUgcHJvdGVjdGVkIGJ5IHRyYW5zX2luY19sb2NrICovCisJLyogd2hpY2ggdHJhbnNhY3Rpb24gd2VyZSB3ZSBjcmVhdGVkIG9uPyBaZXJvIGlmIG5vbmUuICovCisJdW5zaWduZWQgbG9uZwkJY2lfY3JlYXRlZF90cmFuczsKKwkvKiBsYXN0IHRyYW5zYWN0aW9uIHdlIHdlcmUgYSBwYXJ0IG9mLiAqLworCXVuc2lnbmVkIGxvbmcJCWNpX2xhc3RfdHJhbnM7CisKKwkvKiBDYWNoZSBzdHJ1Y3R1cmVzICovCisJdW5zaWduZWQgaW50CQljaV9mbGFnczsKIAl1bnNpZ25lZCBpbnQJCWNpX251bV9jYWNoZWQ7CiAJdW5pb24gewotCQlzZWN0b3JfdAljaV9hcnJheVtPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVldOworCXNlY3Rvcl90CWNpX2FycmF5W09DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZXTsKIAkJc3RydWN0IHJiX3Jvb3QJY2lfdHJlZTsKIAl9IGNpX2NhY2hlOwogfTsKKy8qCisgKiBOZWVkIHRoaXMgcHJvdG90eXBlIGhlcmUgaW5zdGVhZCBvZiBpbiB1cHRvZGF0ZS5oIGJlY2F1c2Ugam91cm5hbC5oCisgKiB1c2VzIGl0LgorICovCitzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSk7CiAKIC8qIHRoaXMgbGltaXRzIHVzIHRvIDI1NiBub2RlcwogICogaWYgd2UgbmVlZCBtb3JlLCB3ZSBjYW4gZG8gYSBrbWFsbG9jIGZvciB0aGUgbWFwICovCkBAIC0zNzcsMTIgKzQwOCwxNyBAQAogCiAJLyogdGhlIGdyb3VwIHdlIHVzZWQgdG8gYWxsb2NhdGUgaW5vZGVzLiAqLwogCXU2NAkJCQlvc2JfaW5vZGVfYWxsb2NfZ3JvdXA7CisKKwkvKiByYiB0cmVlIHJvb3QgZm9yIHJlZmNvdW50IGxvY2suICovCisJc3RydWN0IHJiX3Jvb3QJb3NiX3JmX2xvY2tfdHJlZTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqb3NiX3JlZl90cmVlX2xydTsKIH07CiAKICNkZWZpbmUgT0NGUzJfU0Ioc2IpCSAgICAoKHN0cnVjdCBvY2ZzMl9zdXBlciAqKShzYiktPnNfZnNfaW5mbykKIAogLyogVXNlZnVsIHR5cGVkZWYgZm9yIHBhc3NpbmcgYXJvdW5kIGpvdXJuYWwgYWNjZXNzIGZ1bmN0aW9ucyAqLwotdHlwZWRlZiBpbnQgKCpvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jKShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAordHlwZWRlZiBpbnQgKCpvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jKShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC00ODAsNiArNTE2LDEzIEBACiAJb2NmczJfc2V0X2xpbmtzX2NvdW50KGRpLCBsaW5rcyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJaWYgKG9zYi0+c19mZWF0dXJlX2luY29tcGF0ICYgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9SRUZDT1VOVF9UUkVFKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogLyogc2V0IC8gY2xlYXIgZnVuY3Rpb25zIGJlY2F1c2UgY2x1c3RlciBldmVudHMgY2FuIG1ha2UgdGhlc2UgaGFwcGVuCiAgKiBpbiBwYXJhbGxlbCBzbyB3ZSB3YW50IHRoZSB0cmFuc2l0aW9ucyB0byBiZSBhdG9taWMuIHRoaXMgYWxzbwogICogbWVhbnMgdGhhdCBhbnkgZnV0dXJlIGZsYWdzIG9zYl9mbGFncyBtdXN0IGJlIHByb3RlY3RlZCBieSBzcGlubG9jawpAQCAtNTc4LDYgKzYyMSw5IEBACiAjZGVmaW5lIE9DRlMyX0lTX1ZBTElEX0RYX0xFQUYocHRyKQkJCQkJXAogCSghc3RyY21wKChwdHIpLT5kbF9zaWduYXR1cmUsIE9DRlMyX0RYX0xFQUZfU0lHTkFUVVJFKSkKIAorI2RlZmluZSBPQ0ZTMl9JU19WQUxJRF9SRUZDT1VOVF9CTE9DSyhwdHIpCQkJCVwKKwkoIXN0cmNtcCgocHRyKS0+cmZfc2lnbmF0dXJlLCBPQ0ZTMl9SRUZDT1VOVF9CTE9DS19TSUdOQVRVUkUpKQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW5vX2Zyb21fYmxrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgdTY0IGJsa25vKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggN2FiNmU5ZS4uZTk0MzFlNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC02OCw2ICs2OCw3IEBACiAjZGVmaW5lIE9DRlMyX0RJUl9UUkFJTEVSX1NJR05BVFVSRQkiRElSVFJMMSIKICNkZWZpbmUgT0NGUzJfRFhfUk9PVF9TSUdOQVRVUkUJCSJEWERJUjAxIgogI2RlZmluZSBPQ0ZTMl9EWF9MRUFGX1NJR05BVFVSRQkJIkRYTEVBRjEiCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX0JMT0NLX1NJR05BVFVSRQkiUkVGQ05UMSIKIAogLyogQ29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBPQ0ZTMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCkBAIC05OCw3ICs5OSw4IEBACiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfVVNFUlNQQUNFX1NUQUNLIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUiBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9FQ0MgXAotCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0lOREVYRURfRElSUykKKwkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9JTkRFWEVEX0RJUlMgXAorCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1JFRkNPVU5UX1RSRUUpCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJKE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VOV1JJVFRFTiBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VTUlFVT1RBIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfR1JQUVVPVEEpCkBAIC0xNjAsNiArMTYyLDkgQEAKIC8qIE1ldGFkYXRhIGNoZWNrc3VtIGFuZCBlcnJvciBjb3JyZWN0aW9uICovCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9FQ0MJCTB4MDgwMAogCisvKiBSZWZjb3VudCB0cmVlIHN1cHBvcnQgKi8KKyNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9SRUZDT1VOVF9UUkVFCTB4MTAwMAorCiAvKgogICogYmFja3VwIHN1cGVyYmxvY2sgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhpcyB2b2x1bWUKICAqIGhhcyBiYWNrdXAgc3VwZXJibG9ja3MuCkBAIC0yMjMsNiArMjI4LDcgQEAKICNkZWZpbmUgT0NGUzJfSEFTX1hBVFRSX0ZMCSgweDAwMDIpCiAjZGVmaW5lIE9DRlMyX0lOTElORV9YQVRUUl9GTAkoMHgwMDA0KQogI2RlZmluZSBPQ0ZTMl9JTkRFWEVEX0RJUl9GTAkoMHgwMDA4KQorI2RlZmluZSBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwgICAoMHgwMDEwKQogCiAvKiBJbm9kZSBhdHRyaWJ1dGVzLCBrZWVwIGluIHN5bmMgd2l0aCBFWFQyICovCiAjZGVmaW5lIE9DRlMyX1NFQ1JNX0ZMCQkoMHgwMDAwMDAwMSkJLyogU2VjdXJlIGRlbGV0aW9uICovCkBAIC0yNDEsOCArMjQ3LDExIEBACiAvKgogICogRXh0ZW50IHJlY29yZCBmbGFncyAoZV9ub2RlLmxlYWYuZmxhZ3MpCiAgKi8KLSNkZWZpbmUgT0NGUzJfRVhUX1VOV1JJVFRFTgkoMHgwMSkJLyogRXh0ZW50IGlzIGFsbG9jYXRlZCBidXQKLQkJCQkJICogdW53cml0dGVuICovCisjZGVmaW5lIE9DRlMyX0VYVF9VTldSSVRURU4JCSgweDAxKQkvKiBFeHRlbnQgaXMgYWxsb2NhdGVkIGJ1dAorCQkJCQkJICogdW53cml0dGVuICovCisjZGVmaW5lIE9DRlMyX0VYVF9SRUZDT1VOVEVECQkoMHgwMikgIC8qIEV4dGVudCBpcyByZWZlcmVuY2UKKwkJCQkJCSAqIGNvdW50ZWQgaW4gYW4gYXNzb2NpYXRlZAorCQkJCQkJICogcmVmY291bnQgdHJlZSAqLwogCiAvKgogICogaW9jdGwgY29tbWFuZHMKQEAgLTI5Miw2ICszMDEsMTUgQEAKICNkZWZpbmUgT0NGUzJfSU9DX0dST1VQX0FERAlfSU9XKCdvJywgMixzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0KQogI2RlZmluZSBPQ0ZTMl9JT0NfR1JPVVBfQURENjQJX0lPVygnbycsIDMsc3RydWN0IG9jZnMyX25ld19ncm91cF9pbnB1dCkKIAorLyogVXNlZCB0byBwYXNzIDIgZmlsZSBuYW1lcyB0byByZWZsaW5rLiAqLworc3RydWN0IHJlZmxpbmtfYXJndW1lbnRzIHsKKwlfX3U2NCBvbGRfcGF0aDsKKwlfX3U2NCBuZXdfcGF0aDsKKwlfX3U2NCBwcmVzZXJ2ZTsKK307CisjZGVmaW5lIE9DRlMyX0lPQ19SRUZMSU5LCV9JT1coJ28nLCA0LCBzdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMpCisKKwogLyoKICAqIEpvdXJuYWwgRmxhZ3MgKG9jZnMyX2Rpbm9kZS5pZDEuam91cm5hbDEuaV9mbGFncykKICAqLwpAQCAtNzE3LDcgKzczNSw4IEBACiAJX19sZTY0IGlfeGF0dHJfbG9jOwogLyo4MCovCXN0cnVjdCBvY2ZzMl9ibG9ja19jaGVjayBpX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLwogLyo4OCovCV9fbGU2NCBpX2R4X3Jvb3Q7CQkvKiBQb2ludGVyIHRvIGRpciBpbmRleCByb290IGJsb2NrICovCi0JX19sZTY0IGlfcmVzZXJ2ZWQyWzVdOworLyo5MCovCV9fbGU2NCBpX3JlZmNvdW50X2xvYzsKKwlfX2xlNjQgaV9yZXNlcnZlZDJbNF07CiAvKkI4Ki8JdW5pb24gewogCQlfX2xlNjQgaV9wYWQxOwkJLyogR2VuZXJpYyB3YXkgdG8gcmVmZXIgdG8gdGhpcwogCQkJCQkgICA2NGJpdCB1bmlvbiAqLwpAQCAtOTAxLDYgKzkyMCw2MCBAQAogLyo0MCovCV9fdTggICAgYmdfYml0bWFwWzBdOwogfTsKIAorc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyB7CisvKjAwKi8JX19sZTY0IHJfY3BvczsJCS8qIFBoeXNpY2FsIG9mZnNldCwgaW4gY2x1c3RlcnMgKi8KKwlfX2xlMzIgcl9jbHVzdGVyczsJLyogQ2x1c3RlcnMgY292ZXJlZCBieSB0aGlzIGV4dGVudCAqLworCV9fbGUzMiByX3JlZmNvdW50OwkvKiBSZWZlcmVuY2UgY291bnQgb2YgdGhpcyBleHRlbnQgKi8KKy8qMTAqLworfTsKKyNkZWZpbmUgT0NGUzJfMzJCSVRfUE9TX01BU0sJCSgweGZmZmZmZmZmVUxMKQorCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX0xFQUZfRkwgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwgICAgICAgICAgKDB4MDAwMDAwMDIpCisKK3N0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0IHsKKy8qMDAqLwlfX2xlMTYgcmxfY291bnQ7CS8qIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgcG9zc2libGUKKwkJCQkgICBpbiBybF9yZWNvcmRzICovCisJX19sZTE2IHJsX3VzZWQ7CQkvKiBDdXJyZW50IG51bWJlciBvZiB1c2VkIHJlY29yZHMgKi8KKwlfX2xlMzIgcmxfcmVzZXJ2ZWQyOworCV9fbGU2NCBybF9yZXNlcnZlZDE7CS8qIFBhZCB0byBzaXplb2Yob2NmczJfcmVmY291bnRfcmVjb3JkKSAqLworLyoxMCovCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgcmxfcmVjc1swXTsJLyogUmVmY291bnQgcmVjb3JkcyAqLworfTsKKworCitzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgeworLyowMCovCV9fdTggcmZfc2lnbmF0dXJlWzhdOwkJLyogU2lnbmF0dXJlIGZvciB2ZXJpZmljYXRpb24gKi8KKwlfX2xlMTYgcmZfc3ViYWxsb2Nfc2xvdDsJLyogU2xvdCBzdWJhbGxvY2F0b3IgdGhpcyBibG9jaworCQkJCQkgICBiZWxvbmdzIHRvICovCisJX19sZTE2IHJmX3N1YmFsbG9jX2JpdDsJCS8qIEJpdCBvZmZzZXQgaW4gc3ViYWxsb2NhdG9yCisJCQkJCSAgIGJsb2NrIGdyb3VwICovCisJX19sZTMyIHJmX2ZzX2dlbmVyYXRpb247CS8qIE11c3QgbWF0Y2ggc3VwZXJibG9jayAqLworLyoxMCovCV9fbGU2NCByZl9ibGtubzsJCS8qIE9mZnNldCBvbiBkaXNrLCBpbiBibG9ja3MgKi8KKwlfX2xlNjQgcmZfcGFyZW50OwkJLyogUGFyZW50IGJsb2NrLCBvbmx5IHZhbGlkIGlmCisJCQkJCSAgIE9DRlMyX1JFRkNPVU5UX0xFQUZfRkwgaXMgc2V0IGluCisJCQkJCSAgIHJmX2ZsYWdzICovCisvKjIwKi8Jc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrIHJmX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLworCV9fbGU2NCByZl9sYXN0X2ViX2JsazsJCS8qIFBvaW50ZXIgdG8gbGFzdCBleHRlbnQgYmxvY2sgKi8KKy8qMzAqLwlfX2xlMzIgcmZfY291bnQ7CQkvKiBOdW1iZXIgb2YgaW5vZGVzIHNoYXJpbmcgdGhpcworCQkJCQkgICByZWZjb3VudCB0cmVlICovCisJX19sZTMyIHJmX2ZsYWdzOwkJLyogU2VlIHRoZSBmbGFncyBhYm92ZSAqLworCV9fbGUzMiByZl9jbHVzdGVyczsJCS8qIGNsdXN0ZXJzIGNvdmVyZWQgYnkgcmVmY291bnQgdHJlZS4gKi8KKwlfX2xlMzIgcmZfY3BvczsJCQkvKiBjbHVzdGVyIG9mZnNldCBpbiByZWZjb3VudCB0cmVlLiovCisvKjQwKi8JX19sZTMyIHJmX2dlbmVyYXRpb247CQkvKiBnZW5lcmF0aW9uIG51bWJlci4gYWxsIGJlIHRoZSBzYW1lCisJCQkJCSAqIGZvciB0aGUgc2FtZSByZWZjb3VudCB0cmVlLiAqLworCV9fbGUzMiByZl9yZXNlcnZlZDA7CisJX19sZTY0IHJmX3Jlc2VydmVkMVs3XTsKKy8qODAqLwl1bmlvbiB7CisJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0IHJmX3JlY29yZHM7ICAvKiBMaXN0IG9mIHJlZmNvdW50CisJCQkJCQkJICByZWNvcmRzICovCisJCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCByZl9saXN0OwkvKiBFeHRlbnQgcmVjb3JkIGxpc3QsCisJCQkJCQkJb25seSB2YWxpZCBpZgorCQkJCQkJCU9DRlMyX1JFRkNPVU5UX1RSRUVfRkwKKwkJCQkJCQlpcyBzZXQgaW4gcmZfZmxhZ3MgKi8KKwl9OworLyogQWN0dWFsIG9uLWRpc2sgc2l6ZSBpcyBvbmUgYmxvY2sgKi8KK307CisKIC8qCiAgKiBPbiBkaXNrIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIE9DRlMyLgogICovCkBAIC0xMzEyLDYgKzEzODUsMzIgQEAKIAogCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKIH0KKworc3RhdGljIGlubGluZSB1MTYgb2NmczJfZXh0ZW50X3JlY3NfcGVyX3JiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9saXN0LmxfcmVjcyk7CisKKwlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG9jZnMyX3JlZmNvdW50X3JlY3NfcGVyX3JiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9yZWNvcmRzLnJsX3JlY3MpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCitvY2ZzMl9nZXRfcmVmX3JlY19sb3dfY3Bvcyhjb25zdCBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICpyZWMpCit7CisJcmV0dXJuIGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSAmIE9DRlMyXzMyQklUX1BPU19NQVNLOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhpbnQgYmxvY2tzaXplKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfbG9ja2lkLmggYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAppbmRleCBjMjEyY2Y1Li5kMjc3YWFiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaApAQCAtNDksNiArNDksNyBAQAogCU9DRlMyX0xPQ0tfVFlQRV9RSU5GTywKIAlPQ0ZTMl9MT0NLX1RZUEVfTkZTX1NZTkMsCiAJT0NGUzJfTE9DS19UWVBFX09SUEhBTl9TQ0FOLAorCU9DRlMyX0xPQ0tfVFlQRV9SRUZDT1VOVCwKIAlPQ0ZTMl9OVU1fTE9DS19UWVBFUwogfTsKIApAQCAtODksNiArOTAsOSBAQAogCQljYXNlIE9DRlMyX0xPQ0tfVFlQRV9PUlBIQU5fU0NBTjoKIAkJCWMgPSAnUCc7CiAJCQlicmVhazsKKwkJY2FzZSBPQ0ZTMl9MT0NLX1RZUEVfUkVGQ09VTlQ6CisJCQljID0gJ1QnOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQljID0gJ1wwJzsKIAl9CkBAIC0xMTAsNiArMTE0LDcgQEAKIAlbT0NGUzJfTE9DS19UWVBFX1FJTkZPXSA9ICJRdW90YSIsCiAJW09DRlMyX0xPQ0tfVFlQRV9ORlNfU1lOQ10gPSAiTkZTU3luYyIsCiAJW09DRlMyX0xPQ0tfVFlQRV9PUlBIQU5fU0NBTl0gPSAiT3JwaGFuU2NhbiIsCisJW09DRlMyX0xPQ0tfVFlQRV9SRUZDT1VOVF0gPSAiUmVmY291bnQiLAogfTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpvY2ZzMl9sb2NrX3R5cGVfc3RyaW5nKGVudW0gb2NmczJfbG9ja190eXBlIHR5cGUpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YS5oIGIvZnMvb2NmczIvcXVvdGEuaAppbmRleCAzZmI5NmZjZC4uZTVkZjlkMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcXVvdGEuaAorKysgYi9mcy9vY2ZzMi9xdW90YS5oCkBAIC0xMDksNyArMTA5LDcgQEAKIGludCBvY2ZzMl9yZWFkX3F1b3RhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2X2Jsb2NrLAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpOwogCi1leHRlcm4gc3RydWN0IGRxdW90X29wZXJhdGlvbnMgb2NmczJfcXVvdGFfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBvY2ZzMl9xdW90YV9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSBvY2ZzMl9xdW90YV9mb3JtYXQ7CiAKIGludCBvY2ZzMl9xdW90YV9zZXR1cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jIGIvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKaW5kZXggNDRmMmE1ZS4uYjQzN2RjMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKKysrIGIvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQllcnIgPSAtRUlPOwogCQltbG9nX2Vycm5vKGVycik7CiAJfQotCXJldHVybiBlcnI7OworCXJldHVybiBlcnI7CiB9CiAKIC8qIFJlYWQgZGF0YSBmcm9tIGdsb2JhbCBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QKQEAgLTI1Myw4ICsyNTMsOSBAQAogCWZsdXNoX2RjYWNoZV9wYWdlKGJoLT5iX3BhZ2UpOwogCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCXVubG9ja19idWZmZXIoYmgpOwotCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoZ3Fpbm9kZSwgYmgpOwotCWVyciA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgZ3Fpbm9kZSwgYmgsIGphX3R5cGUpOworCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUoZ3Fpbm9kZSksIGJoKTsKKwllcnIgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIElOT0RFX0NBQ0hFKGdxaW5vZGUpLCBiaCwKKwkJCQkgICAgICBqYV90eXBlKTsKIAlpZiAoZXJyIDwgMCkgewogCQlicmVsc2UoYmgpOwogCQlnb3RvIG91dDsKQEAgLTg0OSw3ICs4NTAsNyBAQAogCWttZW1fY2FjaGVfZnJlZShvY2ZzMl9kcXVvdF9jYWNoZXAsIGRxdW90KTsKIH0KIAotc3RydWN0IGRxdW90X29wZXJhdGlvbnMgb2NmczJfcXVvdGFfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIG9jZnMyX3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAogCS5kcm9wCQk9IGRxdW90X2Ryb3AsCiAJLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jIGIvZnMvb2NmczIvcXVvdGFfbG9jYWwuYwppbmRleCBiZGIwOWNiLi4xYTJjNTBhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jCisrKyBiL2ZzL29jZnMyL3F1b3RhX2xvY2FsLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgaW5vZGUsIGJoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBiaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC01MTAsNyArNTEwLDggQEAKIAkJCQlnb3RvIG91dF9jb21taXQ7CiAJCQl9CiAJCQkvKiBSZWxlYXNlIGxvY2FsIHF1b3RhIGZpbGUgZW50cnkgKi8KLQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgbHFpbm9kZSwKKwkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwKKwkJCQkJSU5PREVfQ0FDSEUobHFpbm9kZSksCiAJCQkJCXFiaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02MTksNyArNjIwLDggQEAKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gb3V0X2JoOwogCQl9Ci0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgbHFpbm9kZSwgYmgsCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgSU5PREVfQ0FDSEUobHFpbm9kZSksCisJCQkJCQkgYmgsCiAJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtOTkzLDggKzk5NSw4IEBACiAJCWdvdG8gb3V0X3RyYW5zOwogCX0KIAlkY2h1bmsgPSAoc3RydWN0IG9jZnMyX2xvY2FsX2Rpc2tfY2h1bmsgKiliaC0+Yl9kYXRhOwotCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGxxaW5vZGUsIGJoKTsKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIGxxaW5vZGUsIGJoLAorCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGxxaW5vZGUpLCBiaCk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBJTk9ERV9DQUNIRShscWlub2RlKSwgYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEwMjcsOCArMTAyOSw4IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBvdXRfdHJhbnM7CiAJfQotCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGxxaW5vZGUsIGRiaCk7Ci0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBscWlub2RlLCBkYmgsCisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUobHFpbm9kZSksIGRiaCk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBJTk9ERV9DQUNIRShscWlub2RlKSwgZGJoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMTMxLDcgKzExMzMsNyBAQAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0OwogCX0KLQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShscWlub2RlLCBiaCk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUobHFpbm9kZSksIGJoKTsKIAogCS8qIExvY2FsIHF1b3RhIGluZm8sIGNodW5rIGhlYWRlciBhbmQgdGhlIG5ldyBibG9jayB3ZSBpbml0aWFsaXplICovCiAJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMoT0NGUzJfU0Ioc2IpLApAQCAtMTE0Myw3ICsxMTQ1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCS8qIFplcm8gY3JlYXRlZCBibG9jayAqLwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgbHFpbm9kZSwgYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBJTk9ERV9DQUNIRShscWlub2RlKSwgYmgsCiAJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTE1OCw3ICsxMTYwLDggQEAKIAkJZ290byBvdXRfdHJhbnM7CiAJfQogCS8qIFVwZGF0ZSBjaHVuayBoZWFkZXIgKi8KLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIGxxaW5vZGUsIGNodW5rLT5xY19oZWFkZXJiaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIElOT0RFX0NBQ0hFKGxxaW5vZGUpLAorCQkJCQkgY2h1bmstPnFjX2hlYWRlcmJoLAogCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTI5Miw3ICsxMjk1LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBzYl9kcW9wdChzYiktPmZpbGVzW3R5cGVdLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwKKwkJCUlOT0RFX0NBQ0hFKHNiX2Rxb3B0KHNiKS0+ZmlsZXNbdHlwZV0pLAogCQkJb2QtPmRxX2NodW5rLT5xY19oZWFkZXJiaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyODdmYwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCkBAIC0wLDAgKzEsNDMxMyBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHJlZmNvdW50dHJlZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfUkVGQ09VTlQKKyNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KKyNpbmNsdWRlICJvY2ZzMi5oIgorI2luY2x1ZGUgImlub2RlLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJzdWJhbGxvYy5oIgorI2luY2x1ZGUgImpvdXJuYWwuaCIKKyNpbmNsdWRlICJ1cHRvZGF0ZS5oIgorI2luY2x1ZGUgInN1cGVyLmgiCisjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKKyNpbmNsdWRlICJibG9ja2NoZWNrLmgiCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCisjaW5jbHVkZSAic3lzZmlsZS5oIgorI2luY2x1ZGUgImRsbWdsdWUuaCIKKyNpbmNsdWRlICJleHRlbnRfbWFwLmgiCisjaW5jbHVkZSAiYW9wcy5oIgorI2luY2x1ZGUgInhhdHRyLmgiCisjaW5jbHVkZSAibmFtZWkuaCIKKworI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKworc3RydWN0IG9jZnMyX2Nvd19jb250ZXh0IHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXUzMiBjb3dfc3RhcnQ7CisJdTMyIGNvd19sZW47CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGRhdGFfZXQ7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmg7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWM7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWM7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwl2b2lkICpjb3dfb2JqZWN0OworCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpwb3N0X3JlZmNvdW50OworCWludCBleHRyYV9jcmVkaXRzOworCWludCAoKmdldF9jbHVzdGVycykoc3RydWN0IG9jZnMyX2Nvd19jb250ZXh0ICpjb250ZXh0LAorCQkJICAgIHUzMiB2X2NsdXN0ZXIsIHUzMiAqcF9jbHVzdGVyLAorCQkJICAgIHUzMiAqbnVtX2NsdXN0ZXJzLAorCQkJICAgIHVuc2lnbmVkIGludCAqZXh0ZW50X2ZsYWdzKTsKKwlpbnQgKCpjb3dfZHVwbGljYXRlX2NsdXN0ZXJzKShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkgICAgICB1MzIgY3BvcywgdTMyIG9sZF9jbHVzdGVyLAorCQkJCSAgICAgIHUzMiBuZXdfY2x1c3RlciwgdTMyIG5ld19sZW4pOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqCitjYWNoZV9pbmZvX3RvX3JlZmNvdW50KHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2ksIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlLCByZl9jaSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfdmFsaWRhdGVfcmVmY291bnRfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJaW50IHJjOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopYmgtPmJfZGF0YTsKKworCW1sb2coMCwgIlZhbGlkYXRpbmcgcmVmY291bnQgYmxvY2sgJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisKKwlCVUdfT04oIWJ1ZmZlcl91cHRvZGF0ZShiaCkpOworCisJLyoKKwkgKiBJZiB0aGUgZWNjIGZhaWxzLCB3ZSByZXR1cm4gdGhlIGVycm9yIGJ1dCBvdGhlcndpc2UKKwkgKiBsZWF2ZSB0aGUgZmlsZXN5c3RlbSBydW5uaW5nLiAgV2Uga25vdyBhbnkgZXJyb3IgaXMKKwkgKiBsb2NhbCB0byB0aGlzIGJsb2NrLgorCSAqLworCXJjID0gb2NmczJfdmFsaWRhdGVfbWV0YV9lY2Moc2IsIGJoLT5iX2RhdGEsICZyYi0+cmZfY2hlY2spOworCWlmIChyYykgeworCQltbG9nKE1MX0VSUk9SLCAiQ2hlY2tzdW0gZmFpbGVkIGZvciByZWZjb3VudCBibG9jayAlbGx1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCXJldHVybiByYzsKKwl9CisKKworCWlmICghT0NGUzJfSVNfVkFMSURfUkVGQ09VTlRfQkxPQ0socmIpKSB7CisJCW9jZnMyX2Vycm9yKHNiLAorCQkJICAgICJSZWZjb3VudCBibG9jayAjJWxsdSBoYXMgYmFkIHNpZ25hdHVyZSAlLipzIiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsIDcsCisJCQkgICAgcmItPnJmX3NpZ25hdHVyZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsZTY0X3RvX2NwdShyYi0+cmZfYmxrbm8pICE9IGJoLT5iX2Jsb2NrbnIpIHsKKwkJb2NmczJfZXJyb3Ioc2IsCisJCQkgICAgIlJlZmNvdW50IGJsb2NrICMlbGx1IGhhcyBhbiBpbnZhbGlkIHJmX2Jsa25vICIKKwkJCSAgICAib2YgJWxsdSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmItPnJmX2Jsa25vKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsZTMyX3RvX2NwdShyYi0+cmZfZnNfZ2VuZXJhdGlvbikgIT0gT0NGUzJfU0Ioc2IpLT5mc19nZW5lcmF0aW9uKSB7CisJCW9jZnMyX2Vycm9yKHNiLAorCQkJICAgICJSZWZjb3VudCBibG9jayAjJWxsdSBoYXMgYW4gaW52YWxpZCAiCisJCQkgICAgInJmX2ZzX2dlbmVyYXRpb24gb2YgIyV1IiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCisJCQkgICAgbGUzMl90b19jcHUocmItPnJmX2ZzX2dlbmVyYXRpb24pKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHU2NCByYl9ibGtubywKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQoreworCWludCByYzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpiaDsKKworCXJjID0gb2NmczJfcmVhZF9ibG9jayhjaSwgcmJfYmxrbm8sICZ0bXAsCisJCQkgICAgICBvY2ZzMl92YWxpZGF0ZV9yZWZjb3VudF9ibG9jayk7CisKKwkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLworCWlmICghcmMgJiYgISpiaCkKKwkJKmJoID0gdG1wOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdTY0IG9jZnMyX3JlZmNvdW50X2NhY2hlX293bmVyKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZiA9IGNhY2hlX2luZm9fdG9fcmVmY291bnQoY2kpOworCisJcmV0dXJuIHJmLT5yZl9ibGtubzsKK30KKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqCitvY2ZzMl9yZWZjb3VudF9jYWNoZV9nZXRfc3VwZXIoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJmID0gY2FjaGVfaW5mb190b19yZWZjb3VudChjaSk7CisKKwlyZXR1cm4gcmYtPnJmX3NiOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9yZWZjb3VudF9jYWNoZV9sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZiA9IGNhY2hlX2luZm9fdG9fcmVmY291bnQoY2kpOworCisJc3Bpbl9sb2NrKCZyZi0+cmZfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X2NhY2hlX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmYgPSBjYWNoZV9pbmZvX3RvX3JlZmNvdW50KGNpKTsKKworCXNwaW5fdW5sb2NrKCZyZi0+cmZfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X2NhY2hlX2lvX2xvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJmID0gY2FjaGVfaW5mb190b19yZWZjb3VudChjaSk7CisKKwltdXRleF9sb2NrKCZyZi0+cmZfaW9fbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9yZWZjb3VudF9jYWNoZV9pb191bmxvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJmID0gY2FjaGVfaW5mb190b19yZWZjb3VudChjaSk7CisKKwltdXRleF91bmxvY2soJnJmLT5yZl9pb19tdXRleCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zIG9jZnMyX3JlZmNvdW50X2NhY2hpbmdfb3BzID0geworCS5jb19vd25lcgkJPSBvY2ZzMl9yZWZjb3VudF9jYWNoZV9vd25lciwKKwkuY29fZ2V0X3N1cGVyCQk9IG9jZnMyX3JlZmNvdW50X2NhY2hlX2dldF9zdXBlciwKKwkuY29fY2FjaGVfbG9jawkJPSBvY2ZzMl9yZWZjb3VudF9jYWNoZV9sb2NrLAorCS5jb19jYWNoZV91bmxvY2sJPSBvY2ZzMl9yZWZjb3VudF9jYWNoZV91bmxvY2ssCisJLmNvX2lvX2xvY2sJCT0gb2NmczJfcmVmY291bnRfY2FjaGVfaW9fbG9jaywKKwkuY29faW9fdW5sb2NrCQk9IG9jZnMyX3JlZmNvdW50X2NhY2hlX2lvX3VubG9jaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqCitvY2ZzMl9maW5kX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCBibGtubykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IG9zYi0+b3NiX3JmX2xvY2tfdHJlZS5yYl9ub2RlOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlID0gTlVMTDsKKworCXdoaWxlIChuKSB7CisJCXRyZWUgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSwgcmZfbm9kZSk7CisKKwkJaWYgKGJsa25vIDwgdHJlZS0+cmZfYmxrbm8pCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoYmxrbm8gPiB0cmVlLT5yZl9ibGtubykKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHRyZWU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIG9zYl9sb2NrIGlzIGFscmVhZHkgbG9ja2VkLiAqLworc3RhdGljIHZvaWQgb2NmczJfaW5zZXJ0X3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpuZXcpCit7CisJdTY0IHJmX2Jsa25vID0gbmV3LT5yZl9ibGtubzsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmb3NiLT5vc2JfcmZfbG9ja190cmVlLnJiX25vZGU7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRtcDsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKworCQl0bXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlLAorCQkJICAgICAgIHJmX25vZGUpOworCisJCWlmIChyZl9ibGtubyA8IHRtcC0+cmZfYmxrbm8pCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJmX2Jsa25vID4gdG1wLT5yZl9ibGtubykKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuISAqLworCQkJbWxvZyhNTF9FUlJPUiwgIkR1cGxpY2F0ZSByZWZjb3VudCBibG9jayAlbGx1IGZvdW5kIVxuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZl9ibGtubyk7CisJCQlCVUcoKTsKKwkJfQorCX0KKworCXJiX2xpbmtfbm9kZSgmbmV3LT5yZl9ub2RlLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmbmV3LT5yZl9ub2RlLCAmb3NiLT5vc2JfcmZfbG9ja190cmVlKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZnJlZV9yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlKQoreworCW9jZnMyX21ldGFkYXRhX2NhY2hlX2V4aXQoJnRyZWUtPnJmX2NpKTsKKwlvY2ZzMl9zaW1wbGVfZHJvcF9sb2NrcmVzKE9DRlMyX1NCKHRyZWUtPnJmX3NiKSwgJnRyZWUtPnJmX2xvY2tyZXMpOworCW9jZnMyX2xvY2tfcmVzX2ZyZWUoJnRyZWUtPnJmX2xvY2tyZXMpOworCWtmcmVlKHRyZWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK29jZnMyX2VyYXNlX3JlZmNvdW50X3RyZWVfZnJvbV9saXN0X25vX2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlKQoreworCXJiX2VyYXNlKCZ0cmVlLT5yZl9ub2RlLCAmb3NiLT5vc2JfcmZfbG9ja190cmVlKTsKKwlpZiAob3NiLT5vc2JfcmVmX3RyZWVfbHJ1ICYmIG9zYi0+b3NiX3JlZl90cmVlX2xydSA9PSB0cmVlKQorCQlvc2ItPm9zYl9yZWZfdHJlZV9scnUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9lcmFzZV9yZWZjb3VudF90cmVlX2Zyb21fbGlzdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUpCit7CisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlvY2ZzMl9lcmFzZV9yZWZjb3VudF90cmVlX2Zyb21fbGlzdF9ub19sb2NrKG9zYiwgdHJlZSk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworfQorCit2b2lkIG9jZnMyX2tyZWZfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUgPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUsIHJmX2dldGNudCk7CisKKwlvY2ZzMl9mcmVlX3JlZmNvdW50X3RyZWUodHJlZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb2NmczJfcmVmY291bnRfdHJlZV9nZXQoc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUpCit7CisJa3JlZl9nZXQoJnRyZWUtPnJmX2dldGNudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb2NmczJfcmVmY291bnRfdHJlZV9wdXQoc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUpCit7CisJa3JlZl9wdXQoJnRyZWUtPnJmX2dldGNudCwgb2NmczJfa3JlZl9yZW1vdmVfcmVmY291bnRfdHJlZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9pbml0X3JlZmNvdW50X3RyZWVfY2koc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKm5ldywKKwkJCQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdCgmbmV3LT5yZl9jaSwgJm9jZnMyX3JlZmNvdW50X2NhY2hpbmdfb3BzKTsKKwltdXRleF9pbml0KCZuZXctPnJmX2lvX211dGV4KTsKKwluZXctPnJmX3NiID0gc2I7CisJc3Bpbl9sb2NrX2luaXQoJm5ldy0+cmZfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9pbml0X3JlZmNvdW50X3RyZWVfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKm5ldywKKwkJCQkJdTY0IHJmX2Jsa25vLCB1MzIgZ2VuZXJhdGlvbikKK3sKKwlpbml0X3J3c2VtKCZuZXctPnJmX3NlbSk7CisJb2NmczJfcmVmY291bnRfbG9ja19yZXNfaW5pdCgmbmV3LT5yZl9sb2NrcmVzLCBvc2IsCisJCQkJICAgICByZl9ibGtubywgZ2VuZXJhdGlvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSoKK29jZnMyX2FsbG9jYXRlX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCByZl9ibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqbmV3OworCisJbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUpLCBHRlBfTk9GUyk7CisJaWYgKCFuZXcpCisJCXJldHVybiBOVUxMOworCisJbmV3LT5yZl9ibGtubyA9IHJmX2Jsa25vOworCWtyZWZfaW5pdCgmbmV3LT5yZl9nZXRjbnQpOworCW9jZnMyX2luaXRfcmVmY291bnRfdHJlZV9jaShuZXcsIG9zYi0+c2IpOworCisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIGludCBvY2ZzMl9nZXRfcmVmY291bnRfdHJlZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IHJmX2Jsa25vLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmV0X3RyZWUpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUsICpuZXcgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmVmX3JiOworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlpZiAob3NiLT5vc2JfcmVmX3RyZWVfbHJ1ICYmCisJICAgIG9zYi0+b3NiX3JlZl90cmVlX2xydS0+cmZfYmxrbm8gPT0gcmZfYmxrbm8pCisJCXRyZWUgPSBvc2ItPm9zYl9yZWZfdHJlZV9scnU7CisJZWxzZQorCQl0cmVlID0gb2NmczJfZmluZF9yZWZjb3VudF90cmVlKG9zYiwgcmZfYmxrbm8pOworCWlmICh0cmVlKQorCQlnb3RvIG91dDsKKworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKworCW5ldyA9IG9jZnMyX2FsbG9jYXRlX3JlZmNvdW50X3RyZWUob3NiLCByZl9ibGtubyk7CisJaWYgKCFuZXcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIFdlIG5lZWQgdGhlIGdlbmVyYXRpb24gdG8gY3JlYXRlIHRoZSByZWZjb3VudCB0cmVlIGxvY2sgYW5kIHNpbmNlCisJICogaXQgaXNuJ3QgY2hhbmdlZCBkdXJpbmcgdGhlIHRyZWUgbW9kaWZpY2F0aW9uLCB3ZSBhcmUgc2FmZSBoZXJlIHRvCisJICogcmVhZCB3aXRob3V0IHByb3RlY3Rpb24uCisJICogV2UgYWxzbyBoYXZlIHRvIHB1cmdlIHRoZSBjYWNoZSBhZnRlciB3ZSBjcmVhdGUgdGhlIGxvY2sgc2luY2UgdGhlCisJICogcmVmY291bnQgYmxvY2sgbWF5IGhhdmUgdGhlIHN0YWxlIGRhdGEuIEl0IGNhbiBvbmx5IGJlIHRydXN0ZWQgd2hlbgorCSAqIHdlIGhvbGQgdGhlIHJlZmNvdW50IGxvY2suCisJICovCisJcmV0ID0gb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jaygmbmV3LT5yZl9jaSwgcmZfYmxrbm8sICZyZWZfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCW9jZnMyX21ldGFkYXRhX2NhY2hlX2V4aXQoJm5ldy0+cmZfY2kpOworCQlrZnJlZShuZXcpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9yYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCW5ldy0+cmZfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KHJlZl9yYi0+cmZfZ2VuZXJhdGlvbik7CisJb2NmczJfaW5pdF9yZWZjb3VudF90cmVlX2xvY2sob3NiLCBuZXcsIHJmX2Jsa25vLAorCQkJCSAgICAgIG5ldy0+cmZfZ2VuZXJhdGlvbik7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfcHVyZ2UoJm5ldy0+cmZfY2kpOworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwl0cmVlID0gb2NmczJfZmluZF9yZWZjb3VudF90cmVlKG9zYiwgcmZfYmxrbm8pOworCWlmICh0cmVlKQorCQlnb3RvIG91dDsKKworCW9jZnMyX2luc2VydF9yZWZjb3VudF90cmVlKG9zYiwgbmV3KTsKKworCXRyZWUgPSBuZXc7CisJbmV3ID0gTlVMTDsKKworb3V0OgorCSpyZXRfdHJlZSA9IHRyZWU7CisKKwlvc2ItPm9zYl9yZWZfdHJlZV9scnUgPSB0cmVlOworCisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJaWYgKG5ldykKKwkJb2NmczJfZnJlZV9yZWZjb3VudF90cmVlKG5ldyk7CisKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmNvdW50X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCAqcmVmX2Jsa25vKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2lub2RlX2Jsb2NrKGlub2RlLCAmZGlfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlCVUdfT04oIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSk7CisKKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwkqcmVmX2Jsa25vID0gbGU2NF90b19jcHUoZGktPmlfcmVmY291bnRfbG9jKTsKKwlicmVsc2UoZGlfYmgpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19vY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUsIGludCBydykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gb2NmczJfcmVmY291bnRfbG9jayh0cmVlLCBydyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChydykKKwkJZG93bl93cml0ZSgmdHJlZS0+cmZfc2VtKTsKKwllbHNlCisJCWRvd25fcmVhZCgmdHJlZS0+cmZfc2VtKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBMb2NrIHRoZSByZWZjb3VudCB0cmVlIHBvaW50ZWQgYnkgcmVmX2Jsa25vIGFuZCByZXR1cm4gdGhlIHRyZWUuCisgKiBJbiBtb3N0IGNhc2UsIHdlIGxvY2sgdGhlIHRyZWUgYW5kIHJlYWQgdGhlIHJlZmNvdW50IGJsb2NrLgorICogU28gcmVhZCBpdCBoZXJlIGlmIHRoZSBjYWxsZXIgcmVhbGx5IG5lZWRzIGl0LgorICoKKyAqIElmIHRoZSB0cmVlIGhhcyBiZWVuIHJlLWNyZWF0ZWQgYnkgb3RoZXIgbm9kZSwgaXQgd2lsbCBmcmVlIHRoZQorICogb2xkIG9uZSBhbmQgcmUtY3JlYXRlIGl0LgorICovCitpbnQgb2NmczJfbG9ja19yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJICAgICB1NjQgcmVmX2Jsa25vLCBpbnQgcncsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmV0X3RyZWUsCisJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJlZl9iaCkKK3sKKwlpbnQgcmV0LCBkZWxldGVfdHJlZSA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisKK2FnYWluOgorCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF90cmVlKG9zYiwgcmVmX2Jsa25vLCAmdHJlZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb2NmczJfcmVmY291bnRfdHJlZV9nZXQodHJlZSk7CisKKwlyZXQgPSBfX29jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIHRyZWUsIHJ3KTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJb2NmczJfcmVmY291bnRfdHJlZV9wdXQodHJlZSk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfcmVmY291bnRfYmxvY2soJnRyZWUtPnJmX2NpLCB0cmVlLT5yZl9ibGtubywKKwkJCQkJJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCB0cmVlLCBydyk7CisJCW9jZnMyX3JlZmNvdW50X3RyZWVfcHV0KHRyZWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCS8qCisJICogSWYgdGhlIHJlZmNvdW50IGJsb2NrIGhhcyBiZWVuIGZyZWVkIGFuZCByZS1jcmVhdGVkLCB3ZSBtYXkgbmVlZAorCSAqIHRvIHJlY3JlYXRlIHRoZSByZWZjb3VudCB0cmVlIGFsc28uCisJICoKKwkgKiBIZXJlIHdlIGp1c3QgcmVtb3ZlIHRoZSB0cmVlIGZyb20gdGhlIHJiLXRyZWUsIGFuZCB0aGUgbGFzdAorCSAqIGtyZWYgaG9sZGVyIHdpbGwgdW5sb2NrIGFuZCBkZWxldGUgdGhpcyByZWZjb3VudF90cmVlLgorCSAqIFRoZW4gd2UgZ290byAiYWdhaW4iIGFuZCBvY2ZzMl9nZXRfcmVmY291bnRfdHJlZSB3aWxsIGNyZWF0ZQorCSAqIHRoZSBuZXcgcmVmY291bnQgdHJlZSBmb3IgdXMuCisJICovCisJaWYgKHRyZWUtPnJmX2dlbmVyYXRpb24gIT0gbGUzMl90b19jcHUocmItPnJmX2dlbmVyYXRpb24pKSB7CisJCWlmICghdHJlZS0+cmZfcmVtb3ZlZCkgeworCQkJb2NmczJfZXJhc2VfcmVmY291bnRfdHJlZV9mcm9tX2xpc3Qob3NiLCB0cmVlKTsKKwkJCXRyZWUtPnJmX3JlbW92ZWQgPSAxOworCQkJZGVsZXRlX3RyZWUgPSAxOworCQl9CisKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCB0cmVlLCBydyk7CisJCS8qCisJCSAqIFdlIGdldCBhbiBleHRyYSByZWZlcmVuY2Ugd2hlbiB3ZSBjcmVhdGUgdGhlIHJlZmNvdW50CisJCSAqIHRyZWUsIHNvIGFub3RoZXIgcHV0IHdpbGwgZGVzdHJveSBpdC4KKwkJICovCisJCWlmIChkZWxldGVfdHJlZSkKKwkJCW9jZnMyX3JlZmNvdW50X3RyZWVfcHV0KHRyZWUpOworCQlicmVsc2UocmVmX3Jvb3RfYmgpOworCQlyZWZfcm9vdF9iaCA9IE5VTEw7CisJCWdvdG8gYWdhaW47CisJfQorCisJKnJldF90cmVlID0gdHJlZTsKKwlpZiAocmVmX2JoKSB7CisJCSpyZWZfYmggPSByZWZfcm9vdF9iaDsKKwkJcmVmX3Jvb3RfYmggPSBOVUxMOworCX0KK291dDoKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWVfYnlfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJ3LAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmV0X3RyZWUsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmVmX2JoKQoreworCWludCByZXQ7CisJdTY0IHJlZl9ibGtubzsKKworCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9ibG9jayhpbm9kZSwgJnJlZl9ibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIHJlZl9ibGtubywKKwkJCQkJcncsIHJldF90cmVlLCByZWZfYmgpOworfQorCit2b2lkIG9jZnMyX3VubG9ja19yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlLCBpbnQgcncpCit7CisJaWYgKHJ3KQorCQl1cF93cml0ZSgmdHJlZS0+cmZfc2VtKTsKKwllbHNlCisJCXVwX3JlYWQoJnRyZWUtPnJmX3NlbSk7CisKKwlvY2ZzMl9yZWZjb3VudF91bmxvY2sodHJlZSwgcncpOworCW9jZnMyX3JlZmNvdW50X3RyZWVfcHV0KHRyZWUpOworfQorCit2b2lkIG9jZnMyX3B1cmdlX3JlZmNvdW50X3RyZWVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlOworCXN0cnVjdCByYl9yb290ICpyb290ID0gJm9zYi0+b3NiX3JmX2xvY2tfdHJlZTsKKworCXdoaWxlICgobm9kZSA9IHJiX2xhc3Qocm9vdCkpICE9IE5VTEwpIHsKKwkJdHJlZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlLCByZl9ub2RlKTsKKworCQltbG9nKDAsICJQdXJnZSB0cmVlICVsbHVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHJlZS0+cmZfYmxrbm8pOworCisJCXJiX2VyYXNlKCZ0cmVlLT5yZl9ub2RlLCByb290KTsKKwkJb2NmczJfZnJlZV9yZWZjb3VudF90cmVlKHRyZWUpOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIHJlZmNvdW50IHRyZWUgZm9yIGFuIGlub2RlLgorICogV2UgdGFrZSBmb3IgZ3JhbnRlZCB0aGF0IHRoZSBpbm9kZSBpcyBhbHJlYWR5IGxvY2tlZC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jcmVhdGVfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKm5ld190cmVlID0gTlVMTCwgKnRyZWUgPSBOVUxMOworCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CisJdTMyIG51bV9nb3Q7CisJdTY0IGZpcnN0X2Jsa25vOworCisJQlVHX09OKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpOworCisJbWxvZygwLCAiY3JlYXRlIHRyZWUgZm9yIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKKworCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIDEsICZtZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9SRUZDT1VOVF9UUkVFX0NSRUFURV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShvc2IsIGhhbmRsZSwgbWV0YV9hYywgMSwKKwkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKKwkJCQkgICAmZmlyc3RfYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X3RyZWUgPSBvY2ZzMl9hbGxvY2F0ZV9yZWZjb3VudF90cmVlKG9zYiwgZmlyc3RfYmxrbm8pOworCWlmICghbmV3X3RyZWUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBmaXJzdF9ibGtubyk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoJm5ld190cmVlLT5yZl9jaSwgbmV3X2JoKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgJm5ld190cmVlLT5yZl9jaSwgbmV3X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwkvKiBJbml0aWFsaXplIG9jZnMyX3JlZmNvdW50X2Jsb2NrLiAqLworCXJiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKW5ld19iaC0+Yl9kYXRhOworCW1lbXNldChyYiwgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwlzdHJjcHkoKHZvaWQgKilyYiwgT0NGUzJfUkVGQ09VTlRfQkxPQ0tfU0lHTkFUVVJFKTsKKwlyYi0+cmZfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KG9zYi0+c2xvdF9udW0pOworCXJiLT5yZl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOworCXJiLT5yZl9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIob3NiLT5mc19nZW5lcmF0aW9uKTsKKwlyYi0+cmZfYmxrbm8gPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7CisJcmItPnJmX2NvdW50ID0gY3B1X3RvX2xlMzIoMSk7CisJcmItPnJmX3JlY29yZHMucmxfY291bnQgPQorCQkJY3B1X3RvX2xlMTYob2NmczJfcmVmY291bnRfcmVjc19wZXJfcmIob3NiLT5zYikpOworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJcmItPnJmX2dlbmVyYXRpb24gPSBvc2ItPnNfbmV4dF9nZW5lcmF0aW9uKys7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0hBU19SRUZDT1VOVF9GTDsKKwlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihvaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlkaS0+aV9yZWZjb3VudF9sb2MgPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7CisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKKworCW1sb2coMCwgImNyZWF0ZWQgdHJlZSBmb3IgaW5vZGUgJWx1LCByZWZibG9jayAlbGx1XG4iLAorCSAgICAgaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9uZyBsb25nKWZpcnN0X2Jsa25vKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gaW5pdCB0aGUgdHJlZSBsb2NrIGhlcmUgc2luY2UgaXQgd2lsbCB1c2UKKwkgKiB0aGUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gY3JlYXRlIGl0LgorCSAqLworCW5ld190cmVlLT5yZl9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUocmItPnJmX2dlbmVyYXRpb24pOworCW9jZnMyX2luaXRfcmVmY291bnRfdHJlZV9sb2NrKG9zYiwgbmV3X3RyZWUsIGZpcnN0X2Jsa25vLAorCQkJCSAgICAgIG5ld190cmVlLT5yZl9nZW5lcmF0aW9uKTsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJdHJlZSA9IG9jZnMyX2ZpbmRfcmVmY291bnRfdHJlZShvc2IsIGZpcnN0X2Jsa25vKTsKKworCS8qCisJICogV2UndmUganVzdCBjcmVhdGVkIGEgbmV3IHJlZmNvdW50IHRyZWUgaW4gdGhpcyBibG9jay4gIElmCisJICogd2UgZm91bmQgYSByZWZjb3VudCB0cmVlIG9uIHRoZSBvY2ZzMl9zdXBlciwgaXQgbXVzdCBiZQorCSAqIG9uZSB3ZSBqdXN0IGRlbGV0ZWQuICBXZSBmcmVlIHRoZSBvbGQgdHJlZSBiZWZvcmUKKwkgKiBpbnNlcnRpbmcgdGhlIG5ldyB0cmVlLgorCSAqLworCUJVR19PTih0cmVlICYmIHRyZWUtPnJmX2dlbmVyYXRpb24gPT0gbmV3X3RyZWUtPnJmX2dlbmVyYXRpb24pOworCWlmICh0cmVlKQorCQlvY2ZzMl9lcmFzZV9yZWZjb3VudF90cmVlX2Zyb21fbGlzdF9ub19sb2NrKG9zYiwgdHJlZSk7CisJb2NmczJfaW5zZXJ0X3JlZmNvdW50X3RyZWUob3NiLCBuZXdfdHJlZSk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCW5ld190cmVlID0gTlVMTDsKKwlpZiAodHJlZSkKKwkJb2NmczJfcmVmY291bnRfdHJlZV9wdXQodHJlZSk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKworb3V0OgorCWlmIChuZXdfdHJlZSkgeworCQlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9leGl0KCZuZXdfdHJlZS0+cmZfY2kpOworCQlrZnJlZShuZXdfdHJlZSk7CisJfQorCisJYnJlbHNlKG5ld19iaCk7CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfc2V0X3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgIHU2NCByZWZjb3VudF9sb2MpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZTsKKworCUJVR19PTihvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKTsKKworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZmNvdW50X2xvYywgMSwKKwkJCQkgICAgICAgJnJlZl90cmVlLCAmcmVmX3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfUkVGQ09VTlRfVFJFRV9TRVRfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlLCAmcmVmX3RyZWUtPnJmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCWxlMzJfYWRkX2NwdSgmcmItPnJmX2NvdW50LCAxKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfcm9vdF9iaCk7CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0hBU19SRUZDT1VOVF9GTDsKKwlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihvaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlkaS0+aV9yZWZjb3VudF9sb2MgPSBjcHVfdG9fbGU2NChyZWZjb3VudF9sb2MpOworCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGRpX2JoKTsKKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0OgorCW9jZnMyX3VubG9ja19yZWZjb3VudF90cmVlKG9zYiwgcmVmX3RyZWUsIDEpOworCWJyZWxzZShyZWZfcm9vdF9iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgb2NmczJfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgcmV0LCBkZWxldGVfdHJlZSA9IDA7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYjsKKwlzdHJ1Y3QgaW5vZGUgKmFsbG9jX2lub2RlID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmFsbG9jX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlOworCWludCBjcmVkaXRzID0gT0NGUzJfUkVGQ09VTlRfVFJFRV9SRU1PVkVfQ1JFRElUUzsKKwl1NjQgYmxrID0gMCwgYmdfYmxrbm8gPSAwLCByZWZfYmxrbm8gPSBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpOworCXUxNiBiaXQgPSAwOworCisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCkpCisJCXJldHVybiAwOworCisJQlVHX09OKCFyZWZfYmxrbm8pOworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl9ibGtubywgMSwgJnJlZl90cmVlLCAmYmxrX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilibGtfYmgtPmJfZGF0YTsKKworCS8qCisJICogSWYgd2UgYXJlIHRoZSBsYXN0IHVzZXIsIHdlIG5lZWQgdG8gZnJlZSB0aGUgYmxvY2suCisJICogU28gbG9jayB0aGUgYWxsb2NhdG9yIGFoZWFkLgorCSAqLworCWlmIChsZTMyX3RvX2NwdShyYi0+cmZfY291bnQpID09IDEpIHsKKwkJYmxrID0gbGU2NF90b19jcHUocmItPnJmX2Jsa25vKTsKKwkJYml0ID0gbGUxNl90b19jcHUocmItPnJmX3N1YmFsbG9jX2JpdCk7CisJCWJnX2Jsa25vID0gb2NmczJfd2hpY2hfc3ViYWxsb2NfZ3JvdXAoYmxrLCBiaXQpOworCisJCWFsbG9jX2lub2RlID0gb2NmczJfZ2V0X3N5c3RlbV9maWxlX2lub2RlKG9zYiwKKwkJCQkJRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQkJbGUxNl90b19jcHUocmItPnJmX3N1YmFsbG9jX3Nsb3QpKTsKKwkJaWYgKCFhbGxvY19pbm9kZSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW11dGV4X2xvY2soJmFsbG9jX2lub2RlLT5pX211dGV4KTsKKworCQlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKGFsbG9jX2lub2RlLCAmYWxsb2NfYmgsIDEpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9tdXRleDsKKwkJfQorCisJCWNyZWRpdHMgKz0gT0NGUzJfU1VCQUxMT0NfRlJFRTsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsICZyZWZfdHJlZS0+cmZfY2ksIGJsa19iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzICY9IH5PQ0ZTMl9IQVNfUkVGQ09VTlRfRkw7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYob2ktPmlwX2R5bl9mZWF0dXJlcyk7CisJZGktPmlfcmVmY291bnRfbG9jID0gMDsKKwlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisKKwlsZTMyX2FkZF9jcHUoJnJiLT5yZl9jb3VudCAsIC0xKTsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYmxrX2JoKTsKKworCWlmICghcmItPnJmX2NvdW50KSB7CisJCWRlbGV0ZV90cmVlID0gMTsKKwkJb2NmczJfZXJhc2VfcmVmY291bnRfdHJlZV9mcm9tX2xpc3Qob3NiLCByZWZfdHJlZSk7CisJCXJldCA9IG9jZnMyX2ZyZWVfc3ViYWxsb2NfYml0cyhoYW5kbGUsIGFsbG9jX2lub2RlLAorCQkJCQkgICAgICAgYWxsb2NfYmgsIGJpdCwgYmdfYmxrbm8sIDEpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0X3VubG9jazoKKwlpZiAoYWxsb2NfaW5vZGUpIHsKKwkJb2NmczJfaW5vZGVfdW5sb2NrKGFsbG9jX2lub2RlLCAxKTsKKwkJYnJlbHNlKGFsbG9jX2JoKTsKKwl9CitvdXRfbXV0ZXg6CisJaWYgKGFsbG9jX2lub2RlKSB7CisJCW11dGV4X3VubG9jaygmYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOworCQlpcHV0KGFsbG9jX2lub2RlKTsKKwl9CitvdXQ6CisJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCByZWZfdHJlZSwgMSk7CisJaWYgKGRlbGV0ZV90cmVlKQorCQlvY2ZzMl9yZWZjb3VudF90cmVlX3B1dChyZWZfdHJlZSk7CisJYnJlbHNlKGJsa19iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9maW5kX3JlZmNvdW50X3JlY19pbl9ybChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCQkgIHU2NCBjcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKnJldF9yZWMsCisJCQkJCSAgaW50ICppbmRleCkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKnJlYyA9IE5VTEw7CisKKwlmb3IgKDsgaSA8IGxlMTZfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpOyBpKyspIHsKKwkJcmVjID0gJnJiLT5yZl9yZWNvcmRzLnJsX3JlY3NbaV07CisKKwkJaWYgKGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSArCisJCSAgICBsZTMyX3RvX2NwdShyZWMtPnJfY2x1c3RlcnMpIDw9IGNwb3MpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAobGU2NF90b19jcHUocmVjLT5yX2Nwb3MpID4gY3BvcykKKwkJCWJyZWFrOworCisJCS8qIG9rLCBjcG9zIGZhaWwgaW4gdGhpcyByZWMuIEp1c3QgcmV0dXJuLiAqLworCQlpZiAocmV0X3JlYykKKwkJCSpyZXRfcmVjID0gKnJlYzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJldF9yZWMpIHsKKwkJLyogV2UgbWVldCB3aXRoIGEgaG9sZSBoZXJlLCBzbyBmYWtlIHRoZSByZWMuICovCisJCXJldF9yZWMtPnJfY3BvcyA9IGNwdV90b19sZTY0KGNwb3MpOworCQlyZXRfcmVjLT5yX3JlZmNvdW50ID0gMDsKKwkJaWYgKGkgPCBsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSAmJgorCQkgICAgbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpIDwgY3BvcyArIGxlbikKKwkJCXJldF9yZWMtPnJfY2x1c3RlcnMgPQorCQkJCWNwdV90b19sZTMyKGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSAtIGNwb3MpOworCQllbHNlCisJCQlyZXRfcmVjLT5yX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIobGVuKTsKKwl9CisKK291dDoKKwkqaW5kZXggPSBpOworfQorCisvKgorICogVHJ5IHRvIHJlbW92ZSByZWZjb3VudCB0cmVlLiBUaGUgbWVjaGFuaXNtIGlzOgorICogMSkgQ2hlY2sgd2hldGhlciBpX2NsdXN0ZXJzID09IDAsIGlmIG5vLCBleGl0LgorICogMikgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGlfeGF0dHJfbG9jIGluIGRpbm9kZS4gaWYgeWVzLCBleGl0LgorICogMykgQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGlubGluZSB4YXR0ciBzdG9yZWQgb3V0c2lkZSwgaWYgeWVzLCBleGl0LgorICogNCkgUmVtb3ZlIHRoZSB0cmVlLgorICovCitpbnQgb2NmczJfdHJ5X3JlbW92ZV9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCisJZG93bl93cml0ZSgmb2ktPmlwX3hhdHRyX3NlbSk7CisJZG93bl93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7CisKKwlpZiAob2ktPmlwX2NsdXN0ZXJzKQorCQlnb3RvIG91dDsKKworCWlmICgob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkgJiYgZGktPmlfeGF0dHJfbG9jKQorCQlnb3RvIG91dDsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMICYmCisJICAgIG9jZnMyX2hhc19pbmxpbmVfeGF0dHJfdmFsdWVfb3V0c2lkZShpbm9kZSwgZGkpKQorCQlnb3RvIG91dDsKKworCXJldCA9IG9jZnMyX3JlbW92ZV9yZWZjb3VudF90cmVlKGlub2RlLCBkaV9iaCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworb3V0OgorCXVwX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKKwl1cF93cml0ZSgmb2ktPmlwX3hhdHRyX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHaXZlbiBhIGNwb3MgYW5kIGxlbiwgdHJ5IHRvIGZpbmQgdGhlIHJlZmNvdW50IHJlY29yZCB3aGljaCBjb250YWlucyBjcG9zLgorICogMS4gSWYgY3BvcyBjYW4gYmUgZm91bmQgaW4gb25lIHJlZmNvdW50IHJlY29yZCwgcmV0dXJuIHRoZSByZWNvcmQuCisgKiAyLiBJZiBjcG9zIGNhbid0IGJlIGZvdW5kLCByZXR1cm4gYSBmYWtlIHJlY29yZCB3aGljaCBzdGFydCBmcm9tIGNwb3MKKyAqICAgIGFuZCBlbmQgYXQgYSBzbWFsbCB2YWx1ZSBiZXR3ZWVuIGNwb3MrbGVuIGFuZCBzdGFydCBvZiB0aGUgbmV4dCByZWNvcmQuCisgKiAgICBUaGlzIGZha2UgcmVjb3JkIGhhcyByX3JlZmNvdW50ID0gMC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgIHU2NCBjcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqcmV0X3JlYywKKwkJCQkgIGludCAqaW5kZXgsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfYmgpCit7CisJaW50IHJldCA9IDAsIGksIGZvdW5kOworCXUzMiBsb3dfY3BvczsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICp0bXAsICpyZWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMLCAqcmVmX2xlYWZfYmggPSBOVUxMOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisKKwlpZiAoIShsZTMyX3RvX2NwdShyYi0+cmZfZmxhZ3MpICYgT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCkpIHsKKwkJb2NmczJfZmluZF9yZWZjb3VudF9yZWNfaW5fcmwoY2ksIHJlZl9yb290X2JoLCBjcG9zLCBsZW4sCisJCQkJCSAgICAgIHJldF9yZWMsIGluZGV4KTsKKwkJKnJldF9iaCA9IHJlZl9yb290X2JoOworCQlnZXRfYmgocmVmX3Jvb3RfYmgpOworCQlyZXR1cm4gMDsKKwl9CisKKwllbCA9ICZyYi0+cmZfbGlzdDsKKwlsb3dfY3BvcyA9IGNwb3MgJiBPQ0ZTMl8zMkJJVF9QT1NfTUFTSzsKKworCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihjaSwgZWwsIGxvd19jcG9zLCAmZWJfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKikgZWJfYmgtPmJfZGF0YTsKKwkJZWwgPSAmZWItPmhfbGlzdDsKKworCQlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgeworCQkJb2NmczJfZXJyb3Ioc2IsCisJCQkicmVmY291bnQgdHJlZSAlbGx1IGhhcyBub24gemVybyB0cmVlICIKKwkJCSJkZXB0aCBpbiBsZWFmIGJ0cmVlIHRyZWUgYmxvY2sgJWxsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyllYl9iaC0+Yl9ibG9ja25yKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZm91bmQgPSAwOworCWZvciAoaSA9IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcmVjID0gJmVsLT5sX3JlY3NbaV07CisKKwkJaWYgKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSA8PSBsb3dfY3BvcykgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBhZGp1c3QgbGVuIHdoZW4gd2UgaGF2ZSBvY2ZzMl9leHRlbnRfcmVjIGFmdGVyIGl0LiAqLworCWlmIChmb3VuZCAmJiBpIDwgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxKSB7CisJCXRtcCA9ICZlbC0+bF9yZWNzW2krMV07CisKKwkJaWYgKGxlMzJfdG9fY3B1KHRtcC0+ZV9jcG9zKSA8IGNwb3MgKyBsZW4pCisJCQlsZW4gPSBsZTMyX3RvX2NwdSh0bXAtPmVfY3BvcykgLSBjcG9zOworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfcmVmY291bnRfYmxvY2soY2ksIGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyksCisJCQkJCSZyZWZfbGVhZl9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW9jZnMyX2ZpbmRfcmVmY291bnRfcmVjX2luX3JsKGNpLCByZWZfbGVhZl9iaCwgY3BvcywgbGVuLAorCQkJCSAgICAgIHJldF9yZWMsIGluZGV4KTsKKwkqcmV0X2JoID0gcmVmX2xlYWZfYmg7CitvdXQ6CisJYnJlbHNlKGViX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitlbnVtIG9jZnMyX3JlZl9yZWNfY29udGlnIHsKKwlSRUZfQ09OVElHX05PTkUgPSAwLAorCVJFRl9DT05USUdfTEVGVCwKKwlSRUZfQ09OVElHX1JJR0hULAorCVJFRl9DT05USUdfTEVGVFJJR0hULAorfTsKKworc3RhdGljIGVudW0gb2NmczJfcmVmX3JlY19jb250aWcKKwlvY2ZzMl9yZWZjb3VudF9yZWNfYWRqYWNlbnQoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiwKKwkJCQkgICAgaW50IGluZGV4KQoreworCWlmICgocmItPnJmX3JlY29yZHMucmxfcmVjc1tpbmRleF0ucl9yZWZjb3VudCA9PQorCSAgICByYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4ICsgMV0ucl9yZWZjb3VudCkgJiYKKwkgICAgKGxlNjRfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3JlY3NbaW5kZXhdLnJfY3BvcykgKworCSAgICBsZTMyX3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4XS5yX2NsdXN0ZXJzKSA9PQorCSAgICBsZTY0X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4ICsgMV0ucl9jcG9zKSkpCisJCXJldHVybiBSRUZfQ09OVElHX1JJR0hUOworCisJcmV0dXJuIFJFRl9DT05USUdfTk9ORTsKK30KKworc3RhdGljIGVudW0gb2NmczJfcmVmX3JlY19jb250aWcKKwlvY2ZzMl9yZWZjb3VudF9yZWNfY29udGlnKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIsCisJCQkJICBpbnQgaW5kZXgpCit7CisJZW51bSBvY2ZzMl9yZWZfcmVjX2NvbnRpZyByZXQgPSBSRUZfQ09OVElHX05PTkU7CisKKwlpZiAoaW5kZXggPCBsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSAtIDEpCisJCXJldCA9IG9jZnMyX3JlZmNvdW50X3JlY19hZGphY2VudChyYiwgaW5kZXgpOworCisJaWYgKGluZGV4ID4gMCkgeworCQllbnVtIG9jZnMyX3JlZl9yZWNfY29udGlnIHRtcDsKKworCQl0bXAgPSBvY2ZzMl9yZWZjb3VudF9yZWNfYWRqYWNlbnQocmIsIGluZGV4IC0gMSk7CisKKwkJaWYgKHRtcCA9PSBSRUZfQ09OVElHX1JJR0hUKSB7CisJCQlpZiAocmV0ID09IFJFRl9DT05USUdfUklHSFQpCisJCQkJcmV0ID0gUkVGX0NPTlRJR19MRUZUUklHSFQ7CisJCQllbHNlCisJCQkJcmV0ID0gUkVGX0NPTlRJR19MRUZUOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfcm90YXRlX3JlZmNvdW50X3JlY19sZWZ0KHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIsCisJCQkJCSAgIGludCBpbmRleCkKK3sKKwlCVUdfT04ocmItPnJmX3JlY29yZHMucmxfcmVjc1tpbmRleF0ucl9yZWZjb3VudCAhPQorCSAgICAgICByYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4KzFdLnJfcmVmY291bnQpOworCisJbGUzMl9hZGRfY3B1KCZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4XS5yX2NsdXN0ZXJzLAorCQkgICAgIGxlMzJfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3JlY3NbaW5kZXgrMV0ucl9jbHVzdGVycykpOworCisJaWYgKGluZGV4IDwgbGUxNl90b19jcHUocmItPnJmX3JlY29yZHMucmxfdXNlZCkgLSAyKQorCQltZW1tb3ZlKCZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4ICsgMV0sCisJCQkmcmItPnJmX3JlY29yZHMucmxfcmVjc1tpbmRleCArIDJdLAorCQkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpICoKKwkJCShsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSAtIGluZGV4IC0gMikpOworCisJbWVtc2V0KCZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2xlMTZfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpIC0gMV0sCisJICAgICAgIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJbGUxNl9hZGRfY3B1KCZyYi0+cmZfcmVjb3Jkcy5ybF91c2VkLCAtMSk7Cit9CisKKy8qCisgKiBNZXJnZSB0aGUgcmVmY291bnQgcmVjIGlmIHdlIGFyZSBjb250aWd1b3VzIHdpdGggdGhlIGFkamFjZW50IHJlY3MuCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X3JlY19tZXJnZShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiLAorCQkJCSAgICAgaW50IGluZGV4KQoreworCWVudW0gb2NmczJfcmVmX3JlY19jb250aWcgY29udGlnID0KKwkJCQlvY2ZzMl9yZWZjb3VudF9yZWNfY29udGlnKHJiLCBpbmRleCk7CisKKwlpZiAoY29udGlnID09IFJFRl9DT05USUdfTk9ORSkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRpZyA9PSBSRUZfQ09OVElHX0xFRlQgfHwgY29udGlnID09IFJFRl9DT05USUdfTEVGVFJJR0hUKSB7CisJCUJVR19PTihpbmRleCA9PSAwKTsKKwkJaW5kZXgtLTsKKwl9CisKKwlvY2ZzMl9yb3RhdGVfcmVmY291bnRfcmVjX2xlZnQocmIsIGluZGV4KTsKKworCWlmIChjb250aWcgPT0gUkVGX0NPTlRJR19MRUZUUklHSFQpCisJCW9jZnMyX3JvdGF0ZV9yZWZjb3VudF9yZWNfbGVmdChyYiwgaW5kZXgpOworfQorCisvKgorICogQ2hhbmdlIHRoZSByZWZjb3VudCBpbmRleGVkIGJ5ICJpbmRleCIgaW4gcmVmX2JoLgorICogSWYgcmVmY291bnQgcmVhY2hlcyAwLCByZW1vdmUgaXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfY2hhbmdlX3JlZmNvdW50X3JlYyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCSAgICAgaW50IGluZGV4LCBpbnQgbWVyZ2UsIGludCBjaGFuZ2UpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0KKwkJCShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0ICpybCA9ICZyYi0+cmZfcmVjb3JkczsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICpyZWMgPSAmcmwtPnJsX3JlY3NbaW5kZXhdOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlLCBjaSwgcmVmX2xlYWZfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwltbG9nKDAsICJjaGFuZ2UgaW5kZXggJWQsIG9sZCBjb3VudCAldSwgY2hhbmdlICVkXG4iLCBpbmRleCwKKwkgICAgIGxlMzJfdG9fY3B1KHJlYy0+cl9yZWZjb3VudCksIGNoYW5nZSk7CisJbGUzMl9hZGRfY3B1KCZyZWMtPnJfcmVmY291bnQsIGNoYW5nZSk7CisKKwlpZiAoIXJlYy0+cl9yZWZjb3VudCkgeworCQlpZiAoaW5kZXggIT0gbGUxNl90b19jcHUocmwtPnJsX3VzZWQpIC0gMSkgeworCQkJbWVtbW92ZShyZWMsIHJlYyArIDEsCisJCQkJKGxlMTZfdG9fY3B1KHJsLT5ybF91c2VkKSAtIGluZGV4IC0gMSkgKgorCQkJCXNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJCQltZW1zZXQoJnJsLT5ybF9yZWNzW2xlMTZfdG9fY3B1KHJsLT5ybF91c2VkKSAtIDFdLAorCQkJICAgICAgIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJCX0KKworCQlsZTE2X2FkZF9jcHUoJnJsLT5ybF91c2VkLCAtMSk7CisJfSBlbHNlIGlmIChtZXJnZSkKKwkJb2NmczJfcmVmY291bnRfcmVjX21lcmdlKHJiLCBpbmRleCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcmVmX2xlYWZfYmgpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2V4cGFuZF9pbmxpbmVfcmVmX3Jvb3QoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKnJlZl9sZWFmX2JoLAorCQkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYykKK3sKKwlpbnQgcmV0OworCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CisJdTMyIG51bV9nb3Q7CisJdTY0IGJsa25vOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKm5ld19yYjsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJvb3RfcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2NsYWltX21ldGFkYXRhKE9DRlMyX1NCKHNiKSwgaGFuZGxlLCBtZXRhX2FjLCAxLAorCQkJCSAgICZzdWJhbGxvY19iaXRfc3RhcnQsICZudW1fZ290LAorCQkJCSAgICZibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW5ld19iaCA9IHNiX2dldGJsayhzYiwgYmxrbm8pOworCWlmIChuZXdfYmggPT0gTlVMTCkgeworCQlyZXQgPSAtRUlPOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShjaSwgbmV3X2JoKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgY2ksIG5ld19iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgb2NmczJfcmVmY291bnRfYmxvY2suCisJICogSXQgc2hvdWxkIGNvbnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIG9sZCByb290LgorCSAqIHNvIGp1c3QgbWVtY3B5IGl0IGFuZCBjaGFuZ2UgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQuCisJICovCisJbWVtY3B5KG5ld19iaC0+Yl9kYXRhLCByZWZfcm9vdF9iaC0+Yl9kYXRhLCBzYi0+c19ibG9ja3NpemUpOworCisJbmV3X3JiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKW5ld19iaC0+Yl9kYXRhOworCW5ld19yYi0+cmZfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KE9DRlMyX1NCKHNiKS0+c2xvdF9udW0pOworCW5ld19yYi0+cmZfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0X3N0YXJ0KTsKKwluZXdfcmItPnJmX2Jsa25vID0gY3B1X3RvX2xlNjQoYmxrbm8pOworCW5ld19yYi0+cmZfY3BvcyA9IGNwdV90b19sZTMyKDApOworCW5ld19yYi0+cmZfcGFyZW50ID0gY3B1X3RvX2xlNjQocmVmX3Jvb3RfYmgtPmJfYmxvY2tucik7CisJbmV3X3JiLT5yZl9mbGFncyA9IGNwdV90b19sZTMyKE9DRlMyX1JFRkNPVU5UX0xFQUZfRkwpOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfYmgpOworCisJLyogTm93IGNoYW5nZSB0aGUgcm9vdC4gKi8KKwltZW1zZXQoJnJvb3RfcmItPnJmX2xpc3QsIDAsIHNiLT5zX2Jsb2Nrc2l6ZSAtCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jaywgcmZfbGlzdCkpOworCXJvb3RfcmItPnJmX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KG9jZnMyX2V4dGVudF9yZWNzX3Blcl9yYihzYikpOworCXJvb3RfcmItPnJmX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIoMSk7CisJcm9vdF9yYi0+cmZfbGlzdC5sX25leHRfZnJlZV9yZWMgPSBjcHVfdG9fbGUxNigxKTsKKwlyb290X3JiLT5yZl9saXN0LmxfcmVjc1swXS5lX2Jsa25vID0gY3B1X3RvX2xlNjQoYmxrbm8pOworCXJvb3RfcmItPnJmX2xpc3QubF9yZWNzWzBdLmVfbGVhZl9jbHVzdGVycyA9IGNwdV90b19sZTE2KDEpOworCXJvb3RfcmItPnJmX2ZsYWdzID0gY3B1X3RvX2xlMzIoT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcmVmX3Jvb3RfYmgpOworCisJbWxvZygwLCAibmV3IGxlYWYgYmxvY2sgJWxsdSwgdXNlZCAldVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubywKKwkgICAgIGxlMTZfdG9fY3B1KG5ld19yYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSk7CisKKwkqcmVmX2xlYWZfYmggPSBuZXdfYmg7CisJbmV3X2JoID0gTlVMTDsKK291dDoKKwlicmVsc2UobmV3X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X3JlY19ub19pbnRlcnNlY3Qoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqcHJldiwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqbmV4dCkKK3sKKwlpZiAob2NmczJfZ2V0X3JlZl9yZWNfbG93X2Nwb3MocHJldikgKyBsZTMyX3RvX2NwdShwcmV2LT5yX2NsdXN0ZXJzKSA8PQorCQlvY2ZzMl9nZXRfcmVmX3JlY19sb3dfY3BvcyhuZXh0KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbXBfcmVmY291bnRfcmVjX2J5X2xvd19jcG9zKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqbCA9IGEsICpyID0gYjsKKwl1MzIgbF9jcG9zID0gb2NmczJfZ2V0X3JlZl9yZWNfbG93X2Nwb3MobCk7CisJdTMyIHJfY3BvcyA9IG9jZnMyX2dldF9yZWZfcmVjX2xvd19jcG9zKHIpOworCisJaWYgKGxfY3BvcyA+IHJfY3BvcykKKwkJcmV0dXJuIDE7CisJaWYgKGxfY3BvcyA8IHJfY3BvcykKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtcF9yZWZjb3VudF9yZWNfYnlfY3Bvcyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKmwgPSBhLCAqciA9IGI7CisJdTY0IGxfY3BvcyA9IGxlNjRfdG9fY3B1KGwtPnJfY3Bvcyk7CisJdTY0IHJfY3BvcyA9IGxlNjRfdG9fY3B1KHItPnJfY3Bvcyk7CisKKwlpZiAobF9jcG9zID4gcl9jcG9zKQorCQlyZXR1cm4gMTsKKwlpZiAobF9jcG9zIDwgcl9jcG9zKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN3YXBfcmVmY291bnRfcmVjKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplKQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKmwgPSBhLCAqciA9IGIsIHRtcDsKKworCXRtcCA9ICooc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqKWw7CisJKihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICopbCA9CisJCQkqKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKilyOworCSooc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqKXIgPSB0bXA7Cit9CisKKy8qCisgKiBUaGUgcmVmY291bnQgY3BvcyBhcmUgb3JkZXJlZCBieSB0aGVpciA2NGJpdCBjcG9zLAorICogQnV0IHdlIHdpbGwgdXNlIHRoZSBsb3cgMzIgYml0IHRvIGJlIHRoZSBlX2Nwb3MgaW4gdGhlIGItdHJlZS4KKyAqIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBwb3MgaXNuJ3QgaW50ZXJzZWN0ZWQgd2l0aCBvdGhlcnMuCisgKgorICogTm90ZTogVGhlIHJlZmNvdW50IGJsb2NrIGlzIGFscmVhZHkgc29ydGVkIGJ5IHRoZWlyIGxvdyAzMiBiaXQgY3BvcywKKyAqICAgICAgIFNvIGp1c3QgdHJ5IHRoZSBtaWRkbGUgcG9zIGZpcnN0LCBhbmQgd2Ugd2lsbCBleGl0IHdoZW4gd2UgZmluZAorICogICAgICAgdGhlIGdvb2QgcG9zaXRpb24uCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZmluZF9yZWZjb3VudF9zcGxpdF9wb3Moc3RydWN0IG9jZnMyX3JlZmNvdW50X2xpc3QgKnJsLAorCQkJCQkgdTMyICpzcGxpdF9wb3MsIGludCAqc3BsaXRfaW5kZXgpCit7CisJaW50IG51bV91c2VkID0gbGUxNl90b19jcHUocmwtPnJsX3VzZWQpOworCWludCBkZWx0YSwgbWlkZGxlID0gbnVtX3VzZWQgLyAyOworCisJZm9yIChkZWx0YSA9IDA7IGRlbHRhIDwgbWlkZGxlOyBkZWx0YSsrKSB7CisJCS8qIExldCdzIGNoZWNrIGRlbHRhIGVhcmxpZXIgdGhhbiBtaWRkbGUgKi8KKwkJaWYgKG9jZnMyX3JlZmNvdW50X3JlY19ub19pbnRlcnNlY3QoCisJCQkJCSZybC0+cmxfcmVjc1ttaWRkbGUgLSBkZWx0YSAtIDFdLAorCQkJCQkmcmwtPnJsX3JlY3NbbWlkZGxlIC0gZGVsdGFdKSkgeworCQkJKnNwbGl0X2luZGV4ID0gbWlkZGxlIC0gZGVsdGE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZvciBldmVuIGNvdW50cywgZG9uJ3Qgd2FsayBvZmYgdGhlIGVuZCAqLworCQlpZiAoKG1pZGRsZSArIGRlbHRhICsgMSkgPT0gbnVtX3VzZWQpCisJCQljb250aW51ZTsKKworCQkvKiBOb3cgdHJ5IGRlbHRhIHBhc3QgbWlkZGxlICovCisJCWlmIChvY2ZzMl9yZWZjb3VudF9yZWNfbm9faW50ZXJzZWN0KAorCQkJCQkmcmwtPnJsX3JlY3NbbWlkZGxlICsgZGVsdGFdLAorCQkJCQkmcmwtPnJsX3JlY3NbbWlkZGxlICsgZGVsdGEgKyAxXSkpIHsKKwkJCSpzcGxpdF9pbmRleCA9IG1pZGRsZSArIGRlbHRhICsgMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGRlbHRhID49IG1pZGRsZSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwkqc3BsaXRfcG9zID0gb2NmczJfZ2V0X3JlZl9yZWNfbG93X2Nwb3MoJnJsLT5ybF9yZWNzWypzcGxpdF9pbmRleF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX2RpdmlkZV9sZWFmX3JlZmNvdW50X2Jsb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmgsCisJCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCwKKwkJCQkJICAgIHUzMiAqc3BsaXRfY3BvcykKK3sKKwlpbnQgc3BsaXRfaW5kZXggPSAwLCBudW1fbW92ZWQsIHJldDsKKwl1MzIgY3BvcyA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfbGlzdCAqcmwgPSAmcmItPnJmX3JlY29yZHM7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpuZXdfcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKW5ld19iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0ICpuZXdfcmwgPSAmbmV3X3JiLT5yZl9yZWNvcmRzOworCisJbWxvZygwLCAic3BsaXQgb2xkIGxlYWYgcmVmY291bnQgYmxvY2sgJWxsdSwgY291bnQgPSAldSwgdXNlZCA9ICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWZfbGVhZl9iaC0+Yl9ibG9ja25yLAorCSAgICAgbGUzMl90b19jcHUocmwtPnJsX2NvdW50KSwgbGUzMl90b19jcHUocmwtPnJsX3VzZWQpKTsKKworCS8qCisJICogWFhYOiBJbXByb3ZlbWVudCBsYXRlci4KKwkgKiBJZiB3ZSBrbm93IGFsbCB0aGUgaGlnaCAzMiBiaXQgY3BvcyBpcyB0aGUgc2FtZSwgbm8gbmVlZCB0byBzb3J0LgorCSAqCisJICogSW4gb3JkZXIgdG8gbWFrZSB0aGUgd2hvbGUgcHJvY2VzcyBzYWZlLCB3ZSBkbzoKKwkgKiAxLiBzb3J0IHRoZSBlbnRyaWVzIGJ5IHRoZWlyIGxvdyAzMiBiaXQgY3BvcyBmaXJzdCBzbyB0aGF0IHdlIGNhbgorCSAqICAgIGZpbmQgdGhlIHNwbGl0IGNwb3MgZWFzaWx5LgorCSAqIDIuIGNhbGwgb2NmczJfaW5zZXJ0X2V4dGVudCB0byBpbnNlcnQgdGhlIG5ldyByZWZjb3VudCBibG9jay4KKwkgKiAzLiBtb3ZlIHRoZSByZWZjb3VudCByZWMgdG8gdGhlIG5ldyBibG9jay4KKwkgKiA0LiBzb3J0IHRoZSBlbnRyaWVzIGJ5IHRoZWlyIDY0IGJpdCBjcG9zLgorCSAqIDUuIGRpcnR5IHRoZSBuZXdfcmIgYW5kIHJiLgorCSAqLworCXNvcnQoJnJsLT5ybF9yZWNzLCBsZTE2X3RvX2NwdShybC0+cmxfdXNlZCksCisJICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyksCisJICAgICBjbXBfcmVmY291bnRfcmVjX2J5X2xvd19jcG9zLCBzd2FwX3JlZmNvdW50X3JlYyk7CisKKwlyZXQgPSBvY2ZzMl9maW5kX3JlZmNvdW50X3NwbGl0X3BvcyhybCwgJmNwb3MsICZzcGxpdF9pbmRleCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbmV3X3JiLT5yZl9jcG9zID0gY3B1X3RvX2xlMzIoY3Bvcyk7CisKKwkvKiBtb3ZlIHJlZmNvdW50IHJlY29yZHMgc3RhcnRpbmcgZnJvbSBzcGxpdF9pbmRleCB0byB0aGUgbmV3IGJsb2NrLiAqLworCW51bV9tb3ZlZCA9IGxlMTZfdG9fY3B1KHJsLT5ybF91c2VkKSAtIHNwbGl0X2luZGV4OworCW1lbWNweShuZXdfcmwtPnJsX3JlY3MsICZybC0+cmxfcmVjc1tzcGxpdF9pbmRleF0sCisJICAgICAgIG51bV9tb3ZlZCAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisKKwkvKm9rLCByZW1vdmUgdGhlIGVudHJpZXMgd2UganVzdCBtb3ZlZCBvdmVyIHRvIHRoZSBvdGhlciBibG9jay4gKi8KKwltZW1zZXQoJnJsLT5ybF9yZWNzW3NwbGl0X2luZGV4XSwgMCwKKwkgICAgICAgbnVtX21vdmVkICogc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpKTsKKworCS8qIGNoYW5nZSBvbGQgYW5kIG5ldyBybF91c2VkIGFjY29yZGluZ2x5LiAqLworCWxlMTZfYWRkX2NwdSgmcmwtPnJsX3VzZWQsIC1udW1fbW92ZWQpOworCW5ld19ybC0+cmxfdXNlZCA9IGNwdV90b19sZTMyKG51bV9tb3ZlZCk7CisKKwlzb3J0KCZybC0+cmxfcmVjcywgbGUxNl90b19jcHUocmwtPnJsX3VzZWQpLAorCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpLAorCSAgICAgY21wX3JlZmNvdW50X3JlY19ieV9jcG9zLCBzd2FwX3JlZmNvdW50X3JlYyk7CisKKwlzb3J0KCZuZXdfcmwtPnJsX3JlY3MsIGxlMTZfdG9fY3B1KG5ld19ybC0+cmxfdXNlZCksCisJICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyksCisJICAgICBjbXBfcmVmY291bnRfcmVjX2J5X2Nwb3MsIHN3YXBfcmVmY291bnRfcmVjKTsKKworCSpzcGxpdF9jcG9zID0gY3BvczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl9uZXdfbGVhZl9yZWZjb3VudF9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfbGVhZl9iaCwKKwkJCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQoreworCWludCByZXQ7CisJdTE2IHN1YmFsbG9jX2JpdF9zdGFydDsKKwl1MzIgbnVtX2dvdCwgbmV3X2Nwb3M7CisJdTY0IGJsa25vOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcm9vdF9yYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpuZXdfcmI7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIHJlZl9ldDsKKworCUJVR19PTighKGxlMzJfdG9fY3B1KHJvb3RfcmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlLCBjaSwgcmVmX2xlYWZfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShPQ0ZTMl9TQihzYiksIGhhbmRsZSwgbWV0YV9hYywgMSwKKwkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKKwkJCQkgICAmYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwluZXdfYmggPSBzYl9nZXRibGsoc2IsIGJsa25vKTsKKwlpZiAobmV3X2JoID09IE5VTEwpIHsKKwkJcmV0ID0gLUVJTzsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoY2ksIG5ld19iaCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCBuZXdfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSBvY2ZzMl9yZWZjb3VudF9ibG9jay4gKi8KKwluZXdfcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7CisJbWVtc2V0KG5ld19yYiwgMCwgc2ItPnNfYmxvY2tzaXplKTsKKwlzdHJjcHkoKHZvaWQgKiluZXdfcmIsIE9DRlMyX1JFRkNPVU5UX0JMT0NLX1NJR05BVFVSRSk7CisJbmV3X3JiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYoT0NGUzJfU0Ioc2IpLT5zbG90X251bSk7CisJbmV3X3JiLT5yZl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOworCW5ld19yYi0+cmZfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKE9DRlMyX1NCKHNiKS0+ZnNfZ2VuZXJhdGlvbik7CisJbmV3X3JiLT5yZl9ibGtubyA9IGNwdV90b19sZTY0KGJsa25vKTsKKwluZXdfcmItPnJmX3BhcmVudCA9IGNwdV90b19sZTY0KHJlZl9yb290X2JoLT5iX2Jsb2NrbnIpOworCW5ld19yYi0+cmZfZmxhZ3MgPSBjcHVfdG9fbGUzMihPQ0ZTMl9SRUZDT1VOVF9MRUFGX0ZMKTsKKwluZXdfcmItPnJmX3JlY29yZHMucmxfY291bnQgPQorCQkJCWNwdV90b19sZTE2KG9jZnMyX3JlZmNvdW50X3JlY3NfcGVyX3JiKHNiKSk7CisJbmV3X3JiLT5yZl9nZW5lcmF0aW9uID0gcm9vdF9yYi0+cmZfZ2VuZXJhdGlvbjsKKworCXJldCA9IG9jZnMyX2RpdmlkZV9sZWFmX3JlZmNvdW50X2Jsb2NrKHJlZl9sZWFmX2JoLCBuZXdfYmgsICZuZXdfY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfbGVhZl9iaCk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CisKKwlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZyZWZfZXQsIGNpLCByZWZfcm9vdF9iaCk7CisKKwltbG9nKDAsICJpbnNlcnQgbmV3IGxlYWYgYmxvY2sgJWxsdSBhdCAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X2JoLT5iX2Jsb2NrbnIsIG5ld19jcG9zKTsKKworCS8qIEluc2VydCB0aGUgbmV3IGxlYWYgYmxvY2sgd2l0aCB0aGUgc3BlY2lmaWMgb2Zmc2V0IGNwb3MuICovCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZyZWZfZXQsIG5ld19jcG9zLCBuZXdfYmgtPmJfYmxvY2tuciwKKwkJCQkgIDEsIDAsIG1ldGFfYWMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCWJyZWxzZShuZXdfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZXhwYW5kX3JlZmNvdW50X3RyZWUoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmgsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4cGFuZF9iaCA9IE5VTEw7CisKKwlpZiAocmVmX3Jvb3RfYmggPT0gcmVmX2xlYWZfYmgpIHsKKwkJLyoKKwkJICogdGhlIG9sZCByb290IGJoIGhhc24ndCBiZWVuIGV4cGFuZGVkIHRvIGEgYi10cmVlLAorCQkgKiBzbyBleHBhbmQgaXQgZmlyc3QuCisJCSAqLworCQlyZXQgPSBvY2ZzMl9leHBhbmRfaW5saW5lX3JlZl9yb290KGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkJICAgJmV4cGFuZF9iaCwgbWV0YV9hYyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJZXhwYW5kX2JoID0gcmVmX2xlYWZfYmg7CisJCWdldF9iaChleHBhbmRfYmgpOworCX0KKworCisJLyogTm93IGFkZCBhIG5ldyByZWZjb3VudCBibG9jayBpbnRvIHRoZSB0cmVlLiovCisJcmV0ID0gb2NmczJfbmV3X2xlYWZfcmVmY291bnRfYmxvY2soaGFuZGxlLCBjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgICBleHBhbmRfYmgsIG1ldGFfYWMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlicmVsc2UoZXhwYW5kX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQWRqdXN0IHRoZSBleHRlbnQgcmVjIGluIGItdHJlZSByZXByZXNlbnRpbmcgcmVmX2xlYWZfYmguCisgKgorICogT25seSBjYWxsZWQgd2hlbiB3ZSBoYXZlIGluc2VydGVkIGEgbmV3IHJlZmNvdW50IHJlYyBhdCBpbmRleCAwCisgKiB3aGljaCBtZWFucyBvY2ZzMl9leHRlbnRfcmVjLmVfY3BvcyBtYXkgbmVlZCBzb21lIGNoYW5nZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl9hZGp1c3RfcmVmY291bnRfcmVjKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqcmVjKQoreworCWludCByZXQgPSAwLCBpOworCXUzMiBuZXdfY3Bvcywgb2xkX2Nwb3M7CisJc3RydWN0IG9jZnMyX3BhdGggKnBhdGggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0KKwkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKKworCWlmICghKGxlMzJfdG9fY3B1KHJiLT5yZl9mbGFncykgJiBPQ0ZTMl9SRUZDT1VOVF9UUkVFX0ZMKSkKKwkJZ290byBvdXQ7CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCW9sZF9jcG9zID0gbGUzMl90b19jcHUocmItPnJmX2Nwb3MpOworCW5ld19jcG9zID0gbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpICYgT0NGUzJfMzJCSVRfUE9TX01BU0s7CisJaWYgKG9sZF9jcG9zIDw9IG5ld19jcG9zKQorCQlnb3RvIG91dDsKKworCW9jZnMyX2luaXRfcmVmY291bnRfZXh0ZW50X3RyZWUoJmV0LCBjaSwgcmVmX3Jvb3RfYmgpOworCisJcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoJmV0KTsKKwlpZiAoIXBhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIHBhdGgsIG9sZF9jcG9zKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAyIG1vcmUgY3JlZGl0cywgb25lIGZvciB0aGUgbGVhZiByZWZjb3VudCBibG9jaywgb25lIGZvcgorCSAqIHRoZSBleHRlbnQgYmxvY2sgY29udGFpbnMgdGhlIGV4dGVudCByZWMuCisJICovCisJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzICsgMik7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGNpLCBwYXRoX2xlYWZfYmgocGF0aCksCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hhbmdlIHRoZSBsZWFmIGV4dGVudCBibG9jayBmaXJzdC4gKi8KKwllbCA9IHBhdGhfbGVhZl9lbChwYXRoKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKQorCQlpZiAobGUzMl90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Nwb3MpID09IG9sZF9jcG9zKQorCQkJYnJlYWs7CisKKwlCVUdfT04oaSA9PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSk7CisKKwllbC0+bF9yZWNzW2ldLmVfY3BvcyA9IGNwdV90b19sZTMyKG5ld19jcG9zKTsKKworCS8qIGNoYW5nZSB0aGUgcl9jcG9zIGluIHRoZSBsZWFmIGJsb2NrLiAqLworCXJiLT5yZl9jcG9zID0gY3B1X3RvX2xlMzIobmV3X2Nwb3MpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHBhdGhfbGVhZl9iaChwYXRoKSk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHJlZl9sZWFmX2JoKTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2luc2VydF9yZWZjb3VudF9yZWMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmgsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICpyZWMsCisJCQkJICAgICBpbnQgaW5kZXgsIGludCBtZXJnZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfbGlzdCAqcmZfbGlzdCA9ICZyYi0+cmZfcmVjb3JkczsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CisKKwlCVUdfT04obGUzMl90b19jcHUocmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpOworCisJaWYgKHJmX2xpc3QtPnJsX3VzZWQgPT0gcmZfbGlzdC0+cmxfY291bnQpIHsKKwkJdTY0IGNwb3MgPSBsZTY0X3RvX2NwdShyZWMtPnJfY3Bvcyk7CisJCXUzMiBsZW4gPSBsZTMyX3RvX2NwdShyZWMtPnJfY2x1c3RlcnMpOworCisJCXJldCA9IG9jZnMyX2V4cGFuZF9yZWZjb3VudF90cmVlKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkJIHJlZl9sZWFmX2JoLCBtZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKGNpLCByZWZfcm9vdF9iaCwKKwkJCQkJICAgICBjcG9zLCBsZW4sIE5VTEwsICZpbmRleCwKKwkJCQkJICAgICAmbmV3X2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZWZfbGVhZl9iaCA9IG5ld19iaDsKKwkJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwkJcmZfbGlzdCA9ICZyYi0+cmZfcmVjb3JkczsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpbmRleCA8IGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpKQorCQltZW1tb3ZlKCZyZl9saXN0LT5ybF9yZWNzW2luZGV4ICsgMV0sCisJCQkmcmZfbGlzdC0+cmxfcmVjc1tpbmRleF0sCisJCQkobGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgLSBpbmRleCkgKgorCQkJIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisKKwltbG9nKDAsICJpbnNlcnQgcmVmY291bnQgcmVjb3JkIHN0YXJ0ICVsbHUsIGxlbiAldSwgY291bnQgJXUgIgorCSAgICAgInRvIGxlYWYgYmxvY2sgJWxsdSBhdCBpbmRleCAlZFxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpLAorCSAgICAgbGUzMl90b19jcHUocmVjLT5yX2NsdXN0ZXJzKSwgbGUzMl90b19jcHUocmVjLT5yX3JlZmNvdW50KSwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVmX2xlYWZfYmgtPmJfYmxvY2tuciwgaW5kZXgpOworCisJcmZfbGlzdC0+cmxfcmVjc1tpbmRleF0gPSAqcmVjOworCisJbGUxNl9hZGRfY3B1KCZyZl9saXN0LT5ybF91c2VkLCAxKTsKKworCWlmIChtZXJnZSkKKwkJb2NmczJfcmVmY291bnRfcmVjX21lcmdlKHJiLCBpbmRleCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcmVmX2xlYWZfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5kZXggPT0gMCkgeworCQlyZXQgPSBvY2ZzMl9hZGp1c3RfcmVmY291bnRfcmVjKGhhbmRsZSwgY2ksCisJCQkJCQlyZWZfcm9vdF9iaCwKKwkJCQkJCXJlZl9sZWFmX2JoLCByZWMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KK291dDoKKwlicmVsc2UobmV3X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU3BsaXQgdGhlIHJlZmNvdW50X3JlYyBpbmRleGVkIGJ5ICJpbmRleCIgaW4gcmVmX2xlYWZfYmguCisgKiBUaGlzIGlzIG11Y2ggc2ltcGxlIHRoYW4gb3VyIGItdHJlZSBjb2RlLgorICogc3BsaXRfcmVjIGlzIHRoZSBuZXcgcmVmY291bnQgcmVjIHdlIHdhbnQgdG8gaW5zZXJ0LgorICogSWYgc3BsaXRfcmVjLT5yX3JlZmNvdW50ID4gMCwgd2UgYXJlIGNoYW5naW5nIHRoZSByZWZjb3VudChpbiBjYXNlIHdlCisgKiBpbmNyZWFzZSByZWZjb3VudCBvciBkZWNyZWFzZSBhIHJlZmNvdW50IHRvIG5vbi16ZXJvKS4KKyAqIElmIHNwbGl0X3JlYy0+cl9yZWZjb3VudCA9PSAwLCB3ZSBhcmUgcHVuY2hpbmcgYSBob2xlIGluIGN1cnJlbnQgcmVmY291bnQKKyAqIHJlYyggaW4gY2FzZSB3ZSBkZWNyZWFzZSBhIHJlZmNvdW50IHRvIHplcm8pLgorICovCitzdGF0aWMgaW50IG9jZnMyX3NwbGl0X3JlZmNvdW50X3JlYyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfbGVhZl9iaCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqc3BsaXRfcmVjLAorCQkJCSAgICBpbnQgaW5kZXgsIGludCBtZXJnZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCWludCByZXQsIHJlY3NfbmVlZDsKKwl1MzIgbGVuOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9sZWFmX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2xpc3QgKnJmX2xpc3QgPSAmcmItPnJmX3JlY29yZHM7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqb3JpZ19yZWMgPSAmcmZfbGlzdC0+cmxfcmVjc1tpbmRleF07CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqdGFpbF9yZWMgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKKworCUJVR19PTihsZTMyX3RvX2NwdShyYi0+cmZfZmxhZ3MpICYgT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCk7CisKKwltbG9nKDAsICJvcmlnaW5hbCByX3BvcyAlbGx1LCBjbHVzdGVyICV1LCBzcGxpdCAlbGx1LCBjbHVzdGVyICV1XG4iLAorCSAgICAgbGU2NF90b19jcHUob3JpZ19yZWMtPnJfY3BvcyksIGxlMzJfdG9fY3B1KG9yaWdfcmVjLT5yX2NsdXN0ZXJzKSwKKwkgICAgIGxlNjRfdG9fY3B1KHNwbGl0X3JlYy0+cl9jcG9zKSwKKwkgICAgIGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+cl9jbHVzdGVycykpOworCisJLyoKKwkgKiBJZiB3ZSBqdXN0IG5lZWQgdG8gc3BsaXQgdGhlIGhlYWRlciBvciB0YWlsIGNsdXN0ZXJzLAorCSAqIG5vIG1vcmUgcmVjcyBhcmUgbmVlZGVkLCBqdXN0IHNwbGl0IGlzIE9LLgorCSAqIE90aGVyd2lzZSB3ZSBhdCBsZWFzdCBuZWVkIG9uZSBuZXcgcmVjcy4KKwkgKi8KKwlpZiAoIXNwbGl0X3JlYy0+cl9yZWZjb3VudCAmJgorCSAgICAoc3BsaXRfcmVjLT5yX2Nwb3MgPT0gb3JpZ19yZWMtPnJfY3BvcyB8fAorCSAgICAgbGU2NF90b19jcHUoc3BsaXRfcmVjLT5yX2Nwb3MpICsKKwkgICAgIGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+cl9jbHVzdGVycykgPT0KKwkgICAgIGxlNjRfdG9fY3B1KG9yaWdfcmVjLT5yX2Nwb3MpICsgbGUzMl90b19jcHUob3JpZ19yZWMtPnJfY2x1c3RlcnMpKSkKKwkJcmVjc19uZWVkID0gMDsKKwllbHNlCisJCXJlY3NfbmVlZCA9IDE7CisKKwkvKgorCSAqIFdlIG5lZWQgb25lIG1vcmUgcmVjIGlmIHdlIHNwbGl0IGluIHRoZSBtaWRkbGUgYW5kIHRoZSBuZXcgcmVjIGhhdmUKKwkgKiBzb21lIHJlZmNvdW50IGluIGl0LgorCSAqLworCWlmIChzcGxpdF9yZWMtPnJfcmVmY291bnQgJiYKKwkgICAgKHNwbGl0X3JlYy0+cl9jcG9zICE9IG9yaWdfcmVjLT5yX2Nwb3MgJiYKKwkgICAgIGxlNjRfdG9fY3B1KHNwbGl0X3JlYy0+cl9jcG9zKSArCisJICAgICBsZTMyX3RvX2NwdShzcGxpdF9yZWMtPnJfY2x1c3RlcnMpICE9CisJICAgICBsZTY0X3RvX2NwdShvcmlnX3JlYy0+cl9jcG9zKSArIGxlMzJfdG9fY3B1KG9yaWdfcmVjLT5yX2NsdXN0ZXJzKSkpCisJCXJlY3NfbmVlZCsrOworCisJLyogSWYgdGhlIGxlYWYgYmxvY2sgZG9uJ3QgaGF2ZSBlbm91Z2ggcmVjb3JkLCBleHBhbmQgaXQuICovCisJaWYgKGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpICsgcmVjc19uZWVkID4gcmZfbGlzdC0+cmxfY291bnQpIHsKKwkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyB0bXBfcmVjOworCQl1NjQgY3BvcyA9IGxlNjRfdG9fY3B1KG9yaWdfcmVjLT5yX2Nwb3MpOworCQlsZW4gPSBsZTMyX3RvX2NwdShvcmlnX3JlYy0+cl9jbHVzdGVycyk7CisJCXJldCA9IG9jZnMyX2V4cGFuZF9yZWZjb3VudF90cmVlKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkJIHJlZl9sZWFmX2JoLCBtZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBXZSBoYXZlIHRvIHJlLWdldCBpdCBzaW5jZSBub3cgY3BvcyBtYXkgYmUgbW92ZWQgdG8KKwkJICogYW5vdGhlciBsZWFmIGJsb2NrLgorCQkgKi8KKwkJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3JlYyhjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgICAgY3BvcywgbGVuLCAmdG1wX3JlYywgJmluZGV4LAorCQkJCQkgICAgICZuZXdfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJlZl9sZWFmX2JoID0gbmV3X2JoOworCQlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCQlyZl9saXN0ID0gJnJiLT5yZl9yZWNvcmRzOworCQlvcmlnX3JlYyA9ICZyZl9saXN0LT5ybF9yZWNzW2luZGV4XTsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgaGF2ZSBjYWxjdWxhdGVkIG91dCBob3cgbWFueSBuZXcgcmVjb3JkcyB3ZSBuZWVkIGFuZCBzdG9yZQorCSAqIGluIHJlY3NfbmVlZCwgc28gc3BhcmUgZW5vdWdoIHNwYWNlIGZpcnN0IGJ5IG1vdmluZyB0aGUgcmVjb3JkcworCSAqIGFmdGVyICJpbmRleCIgdG8gdGhlIGVuZC4KKwkgKi8KKwlpZiAoaW5kZXggIT0gbGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgLSAxKQorCQltZW1tb3ZlKCZyZl9saXN0LT5ybF9yZWNzW2luZGV4ICsgMSArIHJlY3NfbmVlZF0sCisJCQkmcmZfbGlzdC0+cmxfcmVjc1tpbmRleCArIDFdLAorCQkJKGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpIC0gaW5kZXggLSAxKSAqCisJCQkgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpKTsKKworCWxlbiA9IChsZTY0X3RvX2NwdShvcmlnX3JlYy0+cl9jcG9zKSArCisJICAgICAgbGUzMl90b19jcHUob3JpZ19yZWMtPnJfY2x1c3RlcnMpKSAtCisJICAgICAgKGxlNjRfdG9fY3B1KHNwbGl0X3JlYy0+cl9jcG9zKSArCisJICAgICAgbGUzMl90b19jcHUoc3BsaXRfcmVjLT5yX2NsdXN0ZXJzKSk7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgImxlbiIsIHRoZSB3ZSB3aWxsIHNwbGl0IGluIHRoZSB0YWlsIGFuZCBtb3ZlIGl0CisJICogdG8gdGhlIGVuZCBvZiB0aGUgc3BhY2Ugd2UgaGF2ZSBqdXN0IHNwYXJlZC4KKwkgKi8KKwlpZiAobGVuKSB7CisJCXRhaWxfcmVjID0gJnJmX2xpc3QtPnJsX3JlY3NbaW5kZXggKyByZWNzX25lZWRdOworCisJCW1lbWNweSh0YWlsX3JlYywgb3JpZ19yZWMsIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJCWxlNjRfYWRkX2NwdSgmdGFpbF9yZWMtPnJfY3BvcywKKwkJCSAgICAgbGUzMl90b19jcHUodGFpbF9yZWMtPnJfY2x1c3RlcnMpIC0gbGVuKTsKKwkJdGFpbF9yZWMtPnJfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShsZW4pOworCX0KKworCS8qCisJICogSWYgdGhlIHNwbGl0IHBvcyBpc24ndCB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgb25lLCB3ZSBuZWVkIHRvCisJICogc3BsaXQgaW4gdGhlIGhlYWQuCisJICoKKwkgKiBOb3RlOiBXZSBoYXZlIHRoZSBjaGFuY2UgdGhhdCBzcGxpdF9yZWMucl9yZWZjb3VudCA9IDAsCisJICogcmVjc19uZWVkID0gMCBhbmQgbGVuID4gMCwgd2hpY2ggbWVhbnMgd2UganVzdCBjdXQgdGhlIGhlYWQgZnJvbQorCSAqIHRoZSBvcmlnX3JlYyBhbmQgaW4gdGhhdCBjYXNlIHdlIGhhdmUgZG9uZSBzb21lIG1vZGlmaWNhdGlvbiBpbgorCSAqIG9yaWdfcmVjIGFib3ZlLCBzbyB0aGUgY2hlY2sgZm9yIHJfY3BvcyBpcyBmYWtlZC4KKwkgKi8KKwlpZiAoc3BsaXRfcmVjLT5yX2Nwb3MgIT0gb3JpZ19yZWMtPnJfY3BvcyAmJiB0YWlsX3JlYyAhPSBvcmlnX3JlYykgeworCQlsZW4gPSBsZTY0X3RvX2NwdShzcGxpdF9yZWMtPnJfY3BvcykgLQorCQkgICAgICBsZTY0X3RvX2NwdShvcmlnX3JlYy0+cl9jcG9zKTsKKwkJb3JpZ19yZWMtPnJfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMihsZW4pOworCQlpbmRleCsrOworCX0KKworCWxlMTZfYWRkX2NwdSgmcmZfbGlzdC0+cmxfdXNlZCwgcmVjc19uZWVkKTsKKworCWlmIChzcGxpdF9yZWMtPnJfcmVmY291bnQpIHsKKwkJcmZfbGlzdC0+cmxfcmVjc1tpbmRleF0gPSAqc3BsaXRfcmVjOworCQltbG9nKDAsICJpbnNlcnQgcmVmY291bnQgcmVjb3JkIHN0YXJ0ICVsbHUsIGxlbiAldSwgY291bnQgJXUgIgorCQkgICAgICJ0byBsZWFmIGJsb2NrICVsbHUgYXQgaW5kZXggJWRcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShzcGxpdF9yZWMtPnJfY3BvcyksCisJCSAgICAgbGUzMl90b19jcHUoc3BsaXRfcmVjLT5yX2NsdXN0ZXJzKSwKKwkJICAgICBsZTMyX3RvX2NwdShzcGxpdF9yZWMtPnJfcmVmY291bnQpLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVmX2xlYWZfYmgtPmJfYmxvY2tuciwgaW5kZXgpOworCisJCWlmIChtZXJnZSkKKwkJCW9jZnMyX3JlZmNvdW50X3JlY19tZXJnZShyYiwgaW5kZXgpOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfbGVhZl9iaCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJYnJlbHNlKG5ld19iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX29jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICB1NjQgY3BvcywgdTMyIGxlbiwgaW50IG1lcmdlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlpbnQgcmV0ID0gMCwgaW5kZXg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfbGVhZl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyByZWM7CisJdW5zaWduZWQgaW50IHNldF9sZW4gPSAwOworCisJbWxvZygwLCAiVHJlZSBvd25lciAlbGx1LCBhZGQgcmVmY291bnQgc3RhcnQgJWxsdSwgbGVuICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIGxlbik7CisKKwl3aGlsZSAobGVuKSB7CisJCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9yZWMoY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgIGNwb3MsIGxlbiwgJnJlYywgJmluZGV4LAorCQkJCQkgICAgICZyZWZfbGVhZl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJc2V0X2xlbiA9IGxlMzJfdG9fY3B1KHJlYy5yX2NsdXN0ZXJzKTsKKworCQkvKgorCQkgKiBIZXJlIHdlIG1heSBtZWV0IHdpdGggMyBzaXR1YXRpb25zOgorCQkgKgorCQkgKiAxLiBJZiB3ZSBmaW5kIGFuIGFscmVhZHkgZXhpc3RpbmcgcmVjb3JkLCBhbmQgdGhlIGxlbmd0aAorCQkgKiAgICBpcyB0aGUgc2FtZSwgY29vbCwgd2UganVzdCBuZWVkIHRvIGluY3JlYXNlIHRoZSByX3JlZmNvdW50CisJCSAqICAgIGFuZCBpdCBpcyBPSy4KKwkJICogMi4gSWYgd2UgZmluZCBhIGhvbGUsIGp1c3QgaW5zZXJ0IGl0IHdpdGggcl9yZWZjb3VudCA9IDEuCisJCSAqIDMuIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIG9uZSBleHRlbnQgcmVjb3JkLCBzcGxpdAorCQkgKiAgICBpdC4KKwkJICovCisJCWlmIChyZWMucl9yZWZjb3VudCAmJiBsZTY0X3RvX2NwdShyZWMucl9jcG9zKSA9PSBjcG9zICYmCisJCSAgICBzZXRfbGVuIDw9IGxlbikgeworCQkJbWxvZygwLCAiaW5jcmVhc2UgcmVmY291bnQgcmVjLCBzdGFydCAlbGx1LCBsZW4gJXUsICIKKwkJCSAgICAgImNvdW50ICV1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIHNldF9sZW4sCisJCQkgICAgIGxlMzJfdG9fY3B1KHJlYy5yX3JlZmNvdW50KSk7CisJCQlyZXQgPSBvY2ZzMl9jaGFuZ2VfcmVmY291bnRfcmVjKGhhbmRsZSwgY2ksCisJCQkJCQkJcmVmX2xlYWZfYmgsIGluZGV4LAorCQkJCQkJCW1lcmdlLCAxKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSBpZiAoIXJlYy5yX3JlZmNvdW50KSB7CisJCQlyZWMucl9yZWZjb3VudCA9IGNwdV90b19sZTMyKDEpOworCisJCQltbG9nKDAsICJpbnNlcnQgcmVmY291bnQgcmVjLCBzdGFydCAlbGx1LCBsZW4gJXVcbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLnJfY3BvcyksCisJCQkgICAgIHNldF9sZW4pOworCQkJcmV0ID0gb2NmczJfaW5zZXJ0X3JlZmNvdW50X3JlYyhoYW5kbGUsIGNpLCByZWZfcm9vdF9iaCwKKwkJCQkJCQlyZWZfbGVhZl9iaCwKKwkJCQkJCQkmcmVjLCBpbmRleCwKKwkJCQkJCQltZXJnZSwgbWV0YV9hYyk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgIHsKKwkJCXNldF9sZW4gPSBtaW4oKHU2NCkoY3BvcyArIGxlbiksCisJCQkJICAgICAgbGU2NF90b19jcHUocmVjLnJfY3BvcykgKyBzZXRfbGVuKSAtIGNwb3M7CisJCQlyZWMucl9jcG9zID0gY3B1X3RvX2xlNjQoY3Bvcyk7CisJCQlyZWMucl9jbHVzdGVycyA9IGNwdV90b19sZTMyKHNldF9sZW4pOworCQkJbGUzMl9hZGRfY3B1KCZyZWMucl9yZWZjb3VudCwgMSk7CisKKwkJCW1sb2coMCwgInNwbGl0IHJlZmNvdW50IHJlYywgc3RhcnQgJWxsdSwgIgorCQkJICAgICAibGVuICV1LCBjb3VudCAldVxuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShyZWMucl9jcG9zKSwKKwkJCSAgICAgc2V0X2xlbiwgbGUzMl90b19jcHUocmVjLnJfcmVmY291bnQpKTsKKwkJCXJldCA9IG9jZnMyX3NwbGl0X3JlZmNvdW50X3JlYyhoYW5kbGUsIGNpLAorCQkJCQkJICAgICAgIHJlZl9yb290X2JoLCByZWZfbGVhZl9iaCwKKwkJCQkJCSAgICAgICAmcmVjLCBpbmRleCwgbWVyZ2UsCisJCQkJCQkgICAgICAgbWV0YV9hYywgZGVhbGxvYyk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJY3BvcyArPSBzZXRfbGVuOworCQlsZW4gLT0gc2V0X2xlbjsKKwkJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwkJcmVmX2xlYWZfYmggPSBOVUxMOworCX0KKworb3V0OgorCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfcmVmY291bnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCWludCByZXQ7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSk7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisKKwlCVUdfT04ocmItPnJmX3JlY29yZHMucmxfdXNlZCk7CisKKwlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZldCwgY2ksIHJlZl9yb290X2JoKTsKKwlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGhhbmRsZSwgJmV0LCBsZTMyX3RvX2NwdShyYi0+cmZfY3BvcyksCisJCQkJICAxLCBtZXRhX2FjLCBkZWFsbG9jKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoY2ksIHJlZl9sZWFmX2JoKTsKKworCS8qCisJICogYWRkIHRoZSBmcmVlZCBibG9jayB0byB0aGUgZGVhbGxvYyBzbyB0aGF0IGl0IHdpbGwgYmUgZnJlZWQKKwkgKiB3aGVuIHdlIHJ1biBkZWFsbG9jLgorCSAqLworCXJldCA9IG9jZnMyX2NhY2hlX2Jsb2NrX2RlYWxsb2MoZGVhbGxvYywgRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQkJbGUxNl90b19jcHUocmItPnJmX3N1YmFsbG9jX3Nsb3QpLAorCQkJCQlsZTY0X3RvX2NwdShyYi0+cmZfYmxrbm8pLAorCQkJCQlsZTE2X3RvX2NwdShyYi0+cmZfc3ViYWxsb2NfYml0KSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKworCWxlMzJfYWRkX2NwdSgmcmItPnJmX2NsdXN0ZXJzLCAtMSk7CisKKwkvKgorCSAqIGNoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byByZXN0b3JlIHRoZSByb290IHJlZmNvdW50IGJsb2NrIGlmCisJICogdGhlcmUgaXMgbm8gbGVhZiBleHRlbnQgYmxvY2sgYXQgYXRsbC4KKwkgKi8KKwlpZiAoIXJiLT5yZl9saXN0LmxfbmV4dF9mcmVlX3JlYykgeworCQlCVUdfT04ocmItPnJmX2NsdXN0ZXJzKTsKKworCQltbG9nKDAsICJyZXNldCByZWZjb3VudCB0cmVlIHJvb3QgJWxsdSB0byBiZSBhIHJlY29yZCBibG9jay5cbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWZfcm9vdF9iaC0+Yl9ibG9ja25yKTsKKworCQlyYi0+cmZfZmxhZ3MgPSAwOworCQlyYi0+cmZfcGFyZW50ID0gMDsKKwkJcmItPnJmX2Nwb3MgPSAwOworCQltZW1zZXQoJnJiLT5yZl9yZWNvcmRzLCAwLCBzYi0+c19ibG9ja3NpemUgLQorCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9yZWNvcmRzKSk7CisJCXJiLT5yZl9yZWNvcmRzLnJsX2NvdW50ID0KKwkJCQljcHVfdG9fbGUxNihvY2ZzMl9yZWZjb3VudF9yZWNzX3Blcl9yYihzYikpOworCX0KKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfcm9vdF9iaCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgb2NmczJfaW5jcmVhc2VfcmVmY291bnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJICAgIHU2NCBjcG9zLCB1MzIgbGVuLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCXJldHVybiBfX29jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkgY3BvcywgbGVuLCAxLAorCQkJCQkgbWV0YV9hYywgZGVhbGxvYyk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGVjcmVhc2VfcmVmY291bnRfcmVjKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCWludCBpbmRleCwgdTY0IGNwb3MsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0KKwkJCShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKnJlYyA9ICZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4XTsKKworCUJVR19PTihjcG9zIDwgbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpKTsKKwlCVUdfT04oY3BvcyArIGxlbiA+CisJICAgICAgIGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSArIGxlMzJfdG9fY3B1KHJlYy0+cl9jbHVzdGVycykpOworCisJaWYgKGNwb3MgPT0gbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpICYmCisJICAgIGxlbiA9PSBsZTMyX3RvX2NwdShyZWMtPnJfY2x1c3RlcnMpKQorCQlyZXQgPSBvY2ZzMl9jaGFuZ2VfcmVmY291bnRfcmVjKGhhbmRsZSwgY2ksCisJCQkJCQlyZWZfbGVhZl9iaCwgaW5kZXgsIDEsIC0xKTsKKwllbHNlIHsKKwkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyBzcGxpdCA9ICpyZWM7CisJCXNwbGl0LnJfY3BvcyA9IGNwdV90b19sZTY0KGNwb3MpOworCQlzcGxpdC5yX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIobGVuKTsKKworCQlsZTMyX2FkZF9jcHUoJnNwbGl0LnJfcmVmY291bnQsIC0xKTsKKworCQltbG9nKDAsICJzcGxpdCByZWZjb3VudCByZWMsIHN0YXJ0ICVsbHUsICIKKwkJICAgICAibGVuICV1LCBjb3VudCAldSwgb3JpZ2luYWwgc3RhcnQgJWxsdSwgbGVuICV1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoc3BsaXQucl9jcG9zKSwKKwkJICAgICBsZW4sIGxlMzJfdG9fY3B1KHNwbGl0LnJfcmVmY291bnQpLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpLAorCQkgICAgIGxlMzJfdG9fY3B1KHJlYy0+cl9jbHVzdGVycykpOworCQlyZXQgPSBvY2ZzMl9zcGxpdF9yZWZjb3VudF9yZWMoaGFuZGxlLCBjaSwKKwkJCQkJICAgICAgIHJlZl9yb290X2JoLCByZWZfbGVhZl9iaCwKKwkJCQkJICAgICAgICZzcGxpdCwgaW5kZXgsIDEsCisJCQkJCSAgICAgICBtZXRhX2FjLCBkZWFsbG9jKTsKKwl9CisKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUmVtb3ZlIHRoZSBsZWFmIHJlZmNvdW50IGJsb2NrIGlmIGl0IGNvbnRhaW5zIG5vIHJlZmNvdW50IHJlY29yZC4gKi8KKwlpZiAoIXJiLT5yZl9yZWNvcmRzLnJsX3VzZWQgJiYgcmVmX2xlYWZfYmggIT0gcmVmX3Jvb3RfYmgpIHsKKwkJcmV0ID0gb2NmczJfcmVtb3ZlX3JlZmNvdW50X2V4dGVudChoYW5kbGUsIGNpLCByZWZfcm9vdF9iaCwKKwkJCQkJCSAgIHJlZl9sZWFmX2JoLCBtZXRhX2FjLAorCQkJCQkJICAgZGVhbGxvYyk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX29jZnMyX2RlY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICB1NjQgY3BvcywgdTMyIGxlbiwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkJICAgICBpbnQgZGVsZXRlKQoreworCWludCByZXQgPSAwLCBpbmRleCA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyByZWM7CisJdW5zaWduZWQgaW50IHJfY291bnQgPSAwLCByX2xlbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoID0gTlVMTDsKKworCW1sb2coMCwgIlRyZWUgb3duZXIgJWxsdSwgZGVjcmVhc2UgcmVmY291bnQgc3RhcnQgJWxsdSwgIgorCSAgICAgImxlbiAldSwgZGVsZXRlICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIGxlbiwgZGVsZXRlKTsKKworCXdoaWxlIChsZW4pIHsKKwkJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3JlYyhjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgICAgY3BvcywgbGVuLCAmcmVjLCAmaW5kZXgsCisJCQkJCSAgICAgJnJlZl9sZWFmX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyX2NvdW50ID0gbGUzMl90b19jcHUocmVjLnJfcmVmY291bnQpOworCQlCVUdfT04ocl9jb3VudCA9PSAwKTsKKwkJaWYgKCFkZWxldGUpCisJCQlCVUdfT04ocl9jb3VudCA+IDEpOworCisJCXJfbGVuID0gbWluKCh1NjQpKGNwb3MgKyBsZW4pLCBsZTY0X3RvX2NwdShyZWMucl9jcG9zKSArCisJCQkgICAgICBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpIC0gY3BvczsKKworCQlyZXQgPSBvY2ZzMl9kZWNyZWFzZV9yZWZjb3VudF9yZWMoaGFuZGxlLCBjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCQkgIHJlZl9sZWFmX2JoLCBpbmRleCwKKwkJCQkJCSAgY3Bvcywgcl9sZW4sCisJCQkJCQkgIG1ldGFfYWMsIGRlYWxsb2MpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChsZTMyX3RvX2NwdShyZWMucl9yZWZjb3VudCkgPT0gMSAmJiBkZWxldGUpIHsKKwkJCXJldCA9IG9jZnMyX2NhY2hlX2NsdXN0ZXJfZGVhbGxvYyhkZWFsbG9jLAorCQkJCQkgIG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhzYiwgY3BvcyksCisJCQkJCQkJICByX2xlbik7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJY3BvcyArPSByX2xlbjsKKwkJbGVuIC09IHJfbGVuOworCQlicmVsc2UocmVmX2xlYWZfYmgpOworCQlyZWZfbGVhZl9iaCA9IE5VTEw7CisJfQorCitvdXQ6CisJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxsZXIgbXVzdCBob2xkIHJlZmNvdW50IHRyZWUgbG9jay4gKi8KK2ludCBvY2ZzMl9kZWNyZWFzZV9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsIHUzMiBjcG9zLCB1MzIgbGVuLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAorCQkJICAgIGludCBkZWxldGUpCit7CisJaW50IHJldDsKKwl1NjQgcmVmX2Jsa25vOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlOworCisJQlVHX09OKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCkpOworCisJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X2Jsb2NrKGlub2RlLCAmcmVmX2Jsa25vKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCByZWZfYmxrbm8sICZ0cmVlKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jaygmdHJlZS0+cmZfY2ksIHRyZWUtPnJmX2Jsa25vLAorCQkJCQkmcmVmX3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBfX29jZnMyX2RlY3JlYXNlX3JlZmNvdW50KGhhbmRsZSwgJnRyZWUtPnJmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJY3BvcywgbGVuLCBtZXRhX2FjLCBkZWFsbG9jLCBkZWxldGUpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBNYXJrIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGV4dGVudCBhdCBjcG9zIGFzIHJlZmNvdW50ZWQgZm9yIGxlbiBjbHVzdGVycy4KKyAqIFRoaXMgYWRkcyB0aGUgcmVmY291bnQgZXh0ZW50IGZsYWcuCisgKgorICogSWYgdGhlIGV4aXN0aW5nIGV4dGVudCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdCwgaW5pdGlhdGUgYQorICogc3BsaXQuIEFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGF0IG1lcmdpbmcgd2l0aCBhZGphY2VudCBleHRlbnRzLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgZG93biBtZXRhX2FjIGlmIHdlJ2xsIG5lZWQgaXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfbWFya19leHRlbnRfcmVmY291bnRlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJaGFuZGxlX3QgKmhhbmRsZSwgdTMyIGNwb3MsCisJCQkJdTMyIGxlbiwgdTMyIHBoeXMsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldDsKKworCW1sb2coMCwgIklub2RlICVsdSByZWZjb3VudCB0cmVlIGNwb3MgJXUsIGxlbiAldSwgcGh5cyBjbHVzdGVyICV1XG4iLAorCSAgICAgaW5vZGUtPmlfaW5vLCBjcG9zLCBsZW4sIHBoeXMpOworCisJaWYgKCFvY2ZzMl9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpIHsKKwkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsICJJbm9kZSAlbHUgd2FudCB0byB1c2UgcmVmY291bnQgIgorCQkJICAgICJ0cmVlLCBidXQgdGhlIGZlYXR1cmUgYml0IGlzIG5vdCBzZXQgaW4gdGhlICIKKwkJCSAgICAic3VwZXIgYmxvY2suIiwgaW5vZGUtPmlfaW5vKTsKKwkJcmV0ID0gLUVST0ZTOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jaGFuZ2VfZXh0ZW50X2ZsYWcoaGFuZGxlLCBldCwgY3BvcywKKwkJCQkgICAgICAgbGVuLCBwaHlzLCBtZXRhX2FjLCBkZWFsbG9jLAorCQkJCSAgICAgICBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCwgMCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdpdmVuIHNvbWUgY29udGlndW91cyBwaHlzaWNhbCBjbHVzdGVycywgY2FsY3VsYXRlIHdoYXQgd2UgbmVlZAorICogZm9yIG1vZGlmeWluZyB0aGVpciByZWZjb3VudC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jYWxjX3JlZmNvdW50X21ldGFfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCQkgICAgdTY0IHN0YXJ0X2Nwb3MsCisJCQkJCSAgICB1MzIgY2x1c3RlcnMsCisJCQkJCSAgICBpbnQgKm1ldGFfYWRkLAorCQkJCQkgICAgaW50ICpjcmVkaXRzKQoreworCWludCByZXQgPSAwLCBpbmRleCwgcmVmX2Jsb2NrcyA9IDAsIHJlY3NfYWRkID0gMDsKKwl1NjQgY3BvcyA9IHN0YXJ0X2Nwb3M7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYjsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjIHJlYzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoID0gTlVMTCwgKnByZXZfYmggPSBOVUxMOworCXUzMiBsZW47CisKKwltbG9nKDAsICJzdGFydF9jcG9zICVsbHUsIGNsdXN0ZXJzICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9jcG9zLCBjbHVzdGVycyk7CisJd2hpbGUgKGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9yZWMoY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgIGNwb3MsIGNsdXN0ZXJzLCAmcmVjLAorCQkJCQkgICAgICZpbmRleCwgJnJlZl9sZWFmX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAocmVmX2xlYWZfYmggIT0gcHJldl9iaCkgeworCQkJLyoKKwkJCSAqIE5vdyB3ZSBlbmNvdW50ZXIgYSBuZXcgbGVhZiBibG9jaywgc28gY2FsY3VsYXRlCisJCQkgKiB3aGV0aGVyIHdlIG5lZWQgdG8gZXh0ZW5kIHRoZSBvbGQgbGVhZi4KKwkJCSAqLworCQkJaWYgKHByZXZfYmgpIHsKKwkJCQlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKikKKwkJCQkJCQlwcmV2X2JoLT5iX2RhdGE7CisKKwkJCQlpZiAobGU2NF90b19jcHUocmItPnJmX3JlY29yZHMucmxfdXNlZCkgKworCQkJCSAgICByZWNzX2FkZCA+CisJCQkJICAgIGxlMTZfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX2NvdW50KSkKKwkJCQkJcmVmX2Jsb2NrcysrOworCQkJfQorCisJCQlyZWNzX2FkZCA9IDA7CisJCQkqY3JlZGl0cyArPSAxOworCQkJYnJlbHNlKHByZXZfYmgpOworCQkJcHJldl9iaCA9IHJlZl9sZWFmX2JoOworCQkJZ2V0X2JoKHByZXZfYmgpOworCQl9CisKKwkJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKworCQltbG9nKDAsICJyZWNzX2FkZCAlZCxjcG9zICVsbHUsIGNsdXN0ZXJzICV1LCByZWMtPnJfY3BvcyAlbGx1LCIKKwkJICAgICAicmVjLT5yX2NsdXN0ZXJzICV1LCByZWMtPnJfcmVmY291bnQgJXUsIGluZGV4ICVkXG4iLAorCQkgICAgIHJlY3NfYWRkLCAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIGNsdXN0ZXJzLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLnJfY3BvcyksCisJCSAgICAgbGUzMl90b19jcHUocmVjLnJfY2x1c3RlcnMpLAorCQkgICAgIGxlMzJfdG9fY3B1KHJlYy5yX3JlZmNvdW50KSwgaW5kZXgpOworCisJCWxlbiA9IG1pbigodTY0KWNwb3MgKyBjbHVzdGVycywgbGU2NF90b19jcHUocmVjLnJfY3BvcykgKworCQkJICBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpIC0gY3BvczsKKwkJLyoKKwkJICogSWYgdGhlIHJlZmNvdW50IHJlYyBhbHJlYWR5IGV4aXN0LCBjb29sLiBXZSBqdXN0IG5lZWQKKwkJICogdG8gY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIHNwbGl0LiBPdGhlcndpc2Ugd2UganVzdCBuZWVkCisJCSAqIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudC4KKwkJICogSWYgd2Ugd2lsbCBpbnNlcnQgb25lLCBpbmNyZWFzZXMgcmVjc19hZGQuCisJCSAqCisJCSAqIFdlIHJlY29yZCBhbGwgdGhlIHJlY29yZHMgd2hpY2ggd2lsbCBiZSBpbnNlcnRlZCB0byB0aGUKKwkJICogc2FtZSByZWZjb3VudCBibG9jaywgc28gdGhhdCB3ZSBjYW4gdGVsbCBleGFjdGx5IHdoZXRoZXIKKwkJICogd2UgbmVlZCBhIG5ldyByZWZjb3VudCBibG9jayBvciBub3QuCisJCSAqLworCQlpZiAocmVjLnJfcmVmY291bnQpIHsKKwkJCS8qIENoZWNrIHdoZXRoZXIgd2UgbmVlZCBhIHNwbGl0IGF0IHRoZSBiZWdpbm5pbmcuICovCisJCQlpZiAoY3BvcyA9PSBzdGFydF9jcG9zICYmCisJCQkgICAgY3BvcyAhPSBsZTY0X3RvX2NwdShyZWMucl9jcG9zKSkKKwkJCQlyZWNzX2FkZCsrOworCisJCQkvKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgYSBzcGxpdCBpbiB0aGUgZW5kLiAqLworCQkJaWYgKGNwb3MgKyBjbHVzdGVycyA8IGxlNjRfdG9fY3B1KHJlYy5yX2Nwb3MpICsKKwkJCSAgICBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpCisJCQkJcmVjc19hZGQrKzsKKwkJfSBlbHNlCisJCQlyZWNzX2FkZCsrOworCisJCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJCXJlZl9sZWFmX2JoID0gTlVMTDsKKwkJY2x1c3RlcnMgLT0gbGVuOworCQljcG9zICs9IGxlbjsKKwl9CisKKwlpZiAocHJldl9iaCkgeworCQlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilwcmV2X2JoLT5iX2RhdGE7CisKKwkJaWYgKGxlNjRfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpICsgcmVjc19hZGQgPgorCQkgICAgbGUxNl90b19jcHUocmItPnJmX3JlY29yZHMucmxfY291bnQpKQorCQkJcmVmX2Jsb2NrcysrOworCisJCSpjcmVkaXRzICs9IDE7CisJfQorCisJaWYgKCFyZWZfYmxvY2tzKQorCQlnb3RvIG91dDsKKworCW1sb2coMCwgIndlIG5lZWQgcmVmX2Jsb2NrcyAlZFxuIiwgcmVmX2Jsb2Nrcyk7CisJKm1ldGFfYWRkICs9IHJlZl9ibG9ja3M7CisJKmNyZWRpdHMgKz0gcmVmX2Jsb2NrczsKKworCS8qCisJICogU28gd2UgbWF5IG5lZWQgcmVmX2Jsb2NrcyB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4KKwkgKiBUaGF0IGFsc28gbWVhbnMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGItdHJlZSBhbmQgYWRkIHRoYXQgbnVtYmVyCisJICogb2YgcmVjb3JkcyBzaW5jZSB3ZSBuZXZlciBtZXJnZSB0aGVtLgorCSAqIFdlIG5lZWQgb25lIG1vcmUgYmxvY2sgZm9yIGV4cGFuc2lvbiBzaW5jZSB0aGUgbmV3IGNyZWF0ZWQgbGVhZgorCSAqIGJsb2NrIGlzIGFsc28gZnVsbCBhbmQgbmVlZHMgc3BsaXQuCisJICovCisJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKwlpZiAobGUzMl90b19jcHUocmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpIHsKKwkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJCW9jZnMyX2luaXRfcmVmY291bnRfZXh0ZW50X3RyZWUoJmV0LCBjaSwgcmVmX3Jvb3RfYmgpOworCQkqbWV0YV9hZGQgKz0gb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKGV0LmV0X3Jvb3RfZWwpOworCQkqY3JlZGl0cyArPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKHNiLAorCQkJCQkJICAgICAgZXQuZXRfcm9vdF9lbCwKKwkJCQkJCSAgICAgIHJlZl9ibG9ja3MpOworCX0gZWxzZSB7CisJCSpjcmVkaXRzICs9IE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFM7CisJCSptZXRhX2FkZCArPSAxOworCX0KKworb3V0OgorCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJYnJlbHNlKHByZXZfYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgcmVmY291bnQgdHJlZSwgd2Ugd2lsbCBkZWNyZWFzZSBzb21lIGNvbnRpZ3VvdXMgY2x1c3RlcnMKKyAqIHJlZmNvdW50IGNvdW50LCBzbyBqdXN0IGdvIHRocm91Z2ggaXQgdG8gc2VlIGhvdyBtYW55IGJsb2NrcworICogd2UgZ29ubmEgdG91Y2ggYW5kIHdoZXRoZXIgd2UgbmVlZCB0byBjcmVhdGUgbmV3IGJsb2Nrcy4KKyAqCisgKiBOb3JtYWxseSB0aGUgcmVmY291bnQgYmxvY2tzIHN0b3JlIHRoZXNlIHJlZmNvdW50IHNob3VsZCBiZQorICogY29udGluZ3VvdXMgYWxzbywgc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBudW1iZXIgZWFzaWx5LgorICogQXMgZm9yIG1ldGFfYWMsIHdlIHdpbGwgYXQgbW9zdCBhZGQgc3BsaXQgMiByZWZjb3VudCByZWNvcmQgYW5kCisgKiAyIG1vcmUgcmVmY291bnQgYmxvY2ssIHNvIGp1c3QgY2hlY2sgaXQgaW4gYSByb3VnaCB3YXkuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCByZWZjb3VudCB0cmVlIGxvY2suCisgKi8KK2ludCBvY2ZzMl9wcmVwYXJlX3JlZmNvdW50X2NoYW5nZV9mb3JfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkJICB1NjQgcGh5c19ibGtubywKKwkJCQkJICB1MzIgY2x1c3RlcnMsCisJCQkJCSAgaW50ICpjcmVkaXRzLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYykKK3sKKwlpbnQgcmV0LCByZWZfYmxvY2tzID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZTsKKwl1NjQgc3RhcnRfY3BvcyA9IG9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhpbm9kZS0+aV9zYiwgcGh5c19ibGtubyk7CisKKwlpZiAoIW9jZnMyX3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkgeworCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsdSB3YW50IHRvIHVzZSByZWZjb3VudCAiCisJCQkgICAgInRyZWUsIGJ1dCB0aGUgZmVhdHVyZSBiaXQgaXMgbm90IHNldCBpbiB0aGUgIgorCQkJICAgICJzdXBlciBibG9jay4iLCBpbm9kZS0+aV9pbm8pOworCQlyZXQgPSAtRVJPRlM7CisJCWdvdG8gb3V0OworCX0KKworCUJVR19PTighKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpKTsKKworCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJCQkgICAgICBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLCAmdHJlZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfcmVmY291bnRfYmxvY2soJnRyZWUtPnJmX2NpLAorCQkJCQlsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLAorCQkJCQkmcmVmX3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jYWxjX3JlZmNvdW50X21ldGFfY3JlZGl0cyhpbm9kZS0+aV9zYiwKKwkJCQkJICAgICAgICZ0cmVlLT5yZl9jaSwKKwkJCQkJICAgICAgIHJlZl9yb290X2JoLAorCQkJCQkgICAgICAgc3RhcnRfY3BvcywgY2x1c3RlcnMsCisJCQkJCSAgICAgICAmcmVmX2Jsb2NrcywgY3JlZGl0cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgInJlc2VydmUgbmV3IG1ldGFkYXRhICVkLCBjcmVkaXRzID0gJWRcbiIsCisJICAgICByZWZfYmxvY2tzLCAqY3JlZGl0cyk7CisKKwlpZiAocmVmX2Jsb2NrcykgeworCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAorCQkJCQkJCXJlZl9ibG9ja3MsIG1ldGFfYWMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KKworb3V0OgorCWJyZWxzZShyZWZfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZQlNQVhfQ09OVElHX0JZVEVTCTEwNDg1NzYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfY293X2NvbnRpZ19jbHVzdGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc2IsIE1BWF9DT05USUdfQllURVMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9jb3dfY29udGlnX21hc2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gfihvY2ZzMl9jb3dfY29udGlnX2NsdXN0ZXJzKHNiKSAtIDEpOworfQorCisvKgorICogR2l2ZW4gYW4gZXh0ZW50IHRoYXQgc3RhcnRzIGF0ICdzdGFydCcgYW5kIGFuIEkvTyB0aGF0IHN0YXJ0cyBhdCAnY3BvcycsCisgKiBmaW5kIGFuIG9mZnNldCAoc3RhcnQgKyAobiAqIGNvbnRpZ19jbHVzdGVycykpIHRoYXQgaXMgY2xvc2VzdCB0byBjcG9zCisgKiB3aGlsZSBzdGlsbCBiZWluZyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gaXQuCisgKgorICogVGhlIGdvYWwgaXMgdG8gYnJlYWsgdGhlIGV4dGVudCBhdCBhIG11bHRpcGxlIG9mIGNvbnRpZ19jbHVzdGVycy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfY293X2FsaWduX3N0YXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCQkgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJCQkJIHVuc2lnbmVkIGludCBjcG9zKQoreworCUJVR19PTihzdGFydCA+IGNwb3MpOworCisJcmV0dXJuIHN0YXJ0ICsgKChjcG9zIC0gc3RhcnQpICYgb2NmczJfY293X2NvbnRpZ19tYXNrKHNiKSk7Cit9CisKKy8qCisgKiBHaXZlbiBhIGNsdXN0ZXIgY291bnQgb2YgbGVuLCBwYWQgaXQgb3V0IHNvIHRoYXQgaXQgaXMgYSBtdWx0aXBsZQorICogb2YgY29udGlnX2NsdXN0ZXJzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9jb3dfYWxpZ25fbGVuZ3RoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCQkgIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHBhZGRlZCA9CisJCShsZW4gKyAob2NmczJfY293X2NvbnRpZ19jbHVzdGVycyhzYikgLSAxKSkgJgorCQlvY2ZzMl9jb3dfY29udGlnX21hc2soc2IpOworCisJLyogRGlkIHdlIHdyYXA/ICovCisJaWYgKHBhZGRlZCA8IGxlbikKKwkJcGFkZGVkID0gVUlOVF9NQVg7CisKKwlyZXR1cm4gcGFkZGVkOworfQorCisvKgorICogQ2FsY3VsYXRlIG91dCB0aGUgc3RhcnQgYW5kIG51bWJlciBvZiB2aXJ0dWFsIGNsdXN0ZXJzIHdlIG5lZWQgdG8gdG8gQ29XLgorICoKKyAqIGNwb3MgaXMgdml0dWFsIHN0YXJ0IGNsdXN0ZXIgcG9zaXRpb24gd2Ugd2FudCB0byBkbyBDb1cgaW4gYQorICogZmlsZSBhbmQgd3JpdGVfbGVuIGlzIHRoZSBjbHVzdGVyIGxlbmd0aC4KKyAqIG1heF9jcG9zIGlzIHRoZSBwbGFjZSB3aGVyZSB3ZSB3YW50IHRvIHN0b3AgQ29XIGludGVudGlvbmFsbHkuCisgKgorICogTm9ybWFsIHdlIHdpbGwgc3RhcnQgQ29XIGZyb20gdGhlIGJlZ2lubmluZyBvZiBleHRlbnQgcmVjb3JkIGNvdGFpbmluZyBjcG9zLgorICogV2UgdHJ5IHRvIGJyZWFrIHVwIGV4dGVudHMgb24gYm91bmRhcmllcyBvZiBNQVhfQ09OVElHX0JZVEVTIHNvIHRoYXQgd2UKKyAqIGdldCBnb29kIEkvTyBmcm9tIHRoZSByZXN1bHRpbmcgZXh0ZW50IHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVmY291bnRfY2FsX2Nvd19jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAorCQkJCQkgICB1MzIgY3BvcywKKwkJCQkJICAgdTMyIHdyaXRlX2xlbiwKKwkJCQkJICAgdTMyIG1heF9jcG9zLAorCQkJCQkgICB1MzIgKmNvd19zdGFydCwKKwkJCQkJICAgdTMyICpjb3dfbGVuKQoreworCWludCByZXQgPSAwOworCWludCB0cmVlX2hlaWdodCA9IGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpLCBpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjOworCXVuc2lnbmVkIGludCB3YW50X2NsdXN0ZXJzLCByZWNfZW5kID0gMDsKKwlpbnQgY29udGlnX2NsdXN0ZXJzID0gb2NmczJfY293X2NvbnRpZ19jbHVzdGVycyhpbm9kZS0+aV9zYik7CisJaW50IGxlYWZfY2x1c3RlcnM7CisKKwlCVUdfT04oY3BvcyArIHdyaXRlX2xlbiA+IG1heF9jcG9zKTsKKworCWlmICh0cmVlX2hlaWdodCA+IDApIHsKKwkJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgZWwsIGNwb3MsICZlYl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSBlYl9iaC0+Yl9kYXRhOworCQllbCA9ICZlYi0+aF9saXN0OworCisJCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkgICAgIklub2RlICVsdSBoYXMgbm9uIHplcm8gdHJlZSBkZXB0aCBpbiAiCisJCQkJICAgICJsZWFmIGJsb2NrICVsbHVcbiIsIGlub2RlLT5pX2lubywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllYl9iaC0+Yl9ibG9ja25yKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJKmNvd19sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKSB7CisJCXJlYyA9ICZlbC0+bF9yZWNzW2ldOworCisJCWlmIChvY2ZzMl9pc19lbXB0eV9leHRlbnQocmVjKSkgeworCQkJbWxvZ19idWdfb25fbXNnKGkgIT0gMCwgIklub2RlICVsdSBoYXMgZW1wdHkgcmVjb3JkIGluICIKKwkJCQkJImluZGV4ICVkXG4iLCBpbm9kZS0+aV9pbm8sIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAobGUzMl90b19jcHUocmVjLT5lX2Nwb3MpICsKKwkJICAgIGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSA8PSBjcG9zKQorCQkJY29udGludWU7CisKKwkJaWYgKCpjb3dfbGVuID09IDApIHsKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgZmluZCBhIHJlZmNvdW50ZWQgcmVjb3JkIGluIHRoZQorCQkJICogZmlyc3QgcGFzcy4KKwkJCSAqLworCQkJQlVHX09OKCEocmVjLT5lX2ZsYWdzICYgT0NGUzJfRVhUX1JFRkNPVU5URUQpKTsKKwkJCSpjb3dfc3RhcnQgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBlbmNvdW50ZXIgYSBob2xlLCBhIG5vbi1yZWZjb3VudGVkIHJlY29yZCBvcgorCQkgKiBwYXNzIHRoZSBtYXhfY3Bvcywgc3RvcCB0aGUgc2VhcmNoLgorCQkgKi8KKwkJaWYgKCghKHJlYy0+ZV9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSkgfHwKKwkJICAgICgqY293X2xlbiAmJiByZWNfZW5kICE9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSkgfHwKKwkJICAgIChtYXhfY3BvcyA8PSBsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykpKQorCQkJYnJlYWs7CisKKwkJbGVhZl9jbHVzdGVycyA9IGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKTsKKwkJcmVjX2VuZCA9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSArIGxlYWZfY2x1c3RlcnM7CisJCWlmIChyZWNfZW5kID4gbWF4X2Nwb3MpIHsKKwkJCXJlY19lbmQgPSBtYXhfY3BvczsKKwkJCWxlYWZfY2x1c3RlcnMgPSByZWNfZW5kIC0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpOworCQl9CisKKwkJLyoKKwkJICogSG93IG1hbnkgY2x1c3RlcnMgZG8gd2UgYWN0dWFsbHkgbmVlZCBmcm9tCisJCSAqIHRoaXMgZXh0ZW50PyAgRmlyc3Qgd2Ugc2VlIGhvdyBtYW55IHdlIGFjdHVhbGx5CisJCSAqIG5lZWQgdG8gY29tcGxldGUgdGhlIHdyaXRlLiAgSWYgdGhhdCdzIHNtYWxsZXIKKwkJICogdGhhbiBjb250aWdfY2x1c3RlcnMsIHdlIHRyeSBmb3IgY29udGlnX2NsdXN0ZXJzLgorCQkgKi8KKwkJaWYgKCEqY293X2xlbikKKwkJCXdhbnRfY2x1c3RlcnMgPSB3cml0ZV9sZW47CisJCWVsc2UKKwkJCXdhbnRfY2x1c3RlcnMgPSAoY3BvcyArIHdyaXRlX2xlbikgLQorCQkJCSgqY293X3N0YXJ0ICsgKmNvd19sZW4pOworCQlpZiAod2FudF9jbHVzdGVycyA8IGNvbnRpZ19jbHVzdGVycykKKwkJCXdhbnRfY2x1c3RlcnMgPSBjb250aWdfY2x1c3RlcnM7CisKKwkJLyoKKwkJICogSWYgdGhlIHdyaXRlIGRvZXMgbm90IGNvdmVyIHRoZSB3aG9sZSBleHRlbnQsIHdlCisJCSAqIG5lZWQgdG8gY2FsY3VsYXRlIGhvdyB3ZSdyZSBnb2luZyB0byBzcGxpdCB0aGUgZXh0ZW50LgorCQkgKiBXZSB0cnkgdG8gZG8gaXQgb24gY29udGlnX2NsdXN0ZXJzIGJvdW5kYXJpZXMuCisJCSAqCisJCSAqIEFueSBleHRlbnQgc21hbGxlciB0aGFuIGNvbnRpZ19jbHVzdGVycyB3aWxsIGJlCisJCSAqIENvV2VkIGluIGl0cyBlbnRpcmV0eS4KKwkJICovCisJCWlmIChsZWFmX2NsdXN0ZXJzIDw9IGNvbnRpZ19jbHVzdGVycykKKwkJCSpjb3dfbGVuICs9IGxlYWZfY2x1c3RlcnM7CisJCWVsc2UgaWYgKCpjb3dfbGVuIHx8ICgqY293X3N0YXJ0ID09IGNwb3MpKSB7CisJCQkvKgorCQkJICogVGhpcyBleHRlbnQgbmVlZHMgdG8gYmUgQ29XJ2QgZnJvbSBpdHMKKwkJCSAqIGJlZ2lubmluZywgc28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgY29tcHV0ZQorCQkJICogaG93IG1hbnkgY2x1c3RlcnMgdG8gZ3JhYi4gIFdlIGFsaWduCisJCQkgKiB3YW50X2NsdXN0ZXJzIHRvIHRoZSBlZGdlIG9mIGNvbnRpZ19jbHVzdGVycworCQkJICogdG8gZ2V0IGJldHRlciBJL08uCisJCQkgKi8KKwkJCXdhbnRfY2x1c3RlcnMgPSBvY2ZzMl9jb3dfYWxpZ25fbGVuZ3RoKGlub2RlLT5pX3NiLAorCQkJCQkJCSAgICAgICB3YW50X2NsdXN0ZXJzKTsKKworCQkJaWYgKGxlYWZfY2x1c3RlcnMgPCB3YW50X2NsdXN0ZXJzKQorCQkJCSpjb3dfbGVuICs9IGxlYWZfY2x1c3RlcnM7CisJCQllbHNlCisJCQkJKmNvd19sZW4gKz0gd2FudF9jbHVzdGVyczsKKwkJfSBlbHNlIGlmICgoKmNvd19zdGFydCArIGNvbnRpZ19jbHVzdGVycykgPj0KKwkJCSAgIChjcG9zICsgd3JpdGVfbGVuKSkgeworCQkJLyoKKwkJCSAqIEJyZWFraW5nIG9mZiBjb250aWdfY2x1c3RlcnMgYXQgdGhlIGZyb250CisJCQkgKiBvZiB0aGUgZXh0ZW50IHdpbGwgY292ZXIgb3VyIHdyaXRlLiAgVGhhdCdzCisJCQkgKiBlYXN5LgorCQkJICovCisJCQkqY293X2xlbiA9IGNvbnRpZ19jbHVzdGVyczsKKwkJfSBlbHNlIGlmICgocmVjX2VuZCAtIGNwb3MpIDw9IGNvbnRpZ19jbHVzdGVycykgeworCQkJLyoKKwkJCSAqIEJyZWFraW5nIG9mZiBjb250aWdfY2x1c3RlcnMgYXQgdGhlIHRhaWwgb2YKKwkJCSAqIHRoaXMgZXh0ZW50IHdpbGwgY292ZXIgY3Bvcy4KKwkJCSAqLworCQkJKmNvd19zdGFydCA9IHJlY19lbmQgLSBjb250aWdfY2x1c3RlcnM7CisJCQkqY293X2xlbiA9IGNvbnRpZ19jbHVzdGVyczsKKwkJfSBlbHNlIGlmICgocmVjX2VuZCAtIGNwb3MpIDw9IHdhbnRfY2x1c3RlcnMpIHsKKwkJCS8qCisJCQkgKiBXaGlsZSB3ZSBjYW4ndCBmaXQgdGhlIGVudGlyZSB3cml0ZSBpbiB0aGlzCisJCQkgKiBleHRlbnQsIHdlIGtub3cgdGhhdCB0aGUgd3JpdGUgZ29lcyBmcm9tIGNwb3MKKwkJCSAqIHRvIHRoZSBlbmQgb2YgdGhlIGV4dGVudC4gIEJyZWFrIHRoYXQgb2ZmLgorCQkJICogV2UgdHJ5IHRvIGJyZWFrIGl0IGF0IHNvbWUgbXVsdGlwbGUgb2YKKwkJCSAqIGNvbnRpZ19jbHVzdGVycyBmcm9tIHRoZSBmcm9udCBvZiB0aGUgZXh0ZW50LgorCQkJICogRmFpbGluZyB0aGF0IChpZSwgY3BvcyBpcyB3aXRoaW4KKwkJCSAqIGNvbnRpZ19jbHVzdGVycyBvZiB0aGUgZnJvbnQpLCB3ZSdsbCBDb1cgdGhlCisJCQkgKiBlbnRpcmUgZXh0ZW50LgorCQkJICovCisJCQkqY293X3N0YXJ0ID0gb2NmczJfY293X2FsaWduX3N0YXJ0KGlub2RlLT5pX3NiLAorCQkJCQkJCSAgICpjb3dfc3RhcnQsIGNwb3MpOworCQkJKmNvd19sZW4gPSByZWNfZW5kIC0gKmNvd19zdGFydDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBPaywgdGhlIGVudGlyZSB3cml0ZSBsaXZlcyBpbiB0aGUgbWlkZGxlIG9mCisJCQkgKiB0aGlzIGV4dGVudC4gIExldCdzIHRyeSB0byBzbGljZSB0aGUgZXh0ZW50IHVwCisJCQkgKiBuaWNlbHkuICBPcHRpbWFsbHksIG91ciBDb1cgcmVnaW9uIHN0YXJ0cyBhdAorCQkJICogbSpjb250aWdfY2x1c3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQorCQkJICogZXh0ZW50IGFuZCBnb2VzIGZvciBuKmNvbnRpZ19jbHVzdGVycywKKwkJCSAqIGNvdmVyaW5nIHRoZSBlbnRpcmUgd3JpdGUuCisJCQkgKi8KKwkJCSpjb3dfc3RhcnQgPSBvY2ZzMl9jb3dfYWxpZ25fc3RhcnQoaW5vZGUtPmlfc2IsCisJCQkJCQkJICAgKmNvd19zdGFydCwgY3Bvcyk7CisKKwkJCXdhbnRfY2x1c3RlcnMgPSAoY3BvcyArIHdyaXRlX2xlbikgLSAqY293X3N0YXJ0OworCQkJd2FudF9jbHVzdGVycyA9IG9jZnMyX2Nvd19hbGlnbl9sZW5ndGgoaW5vZGUtPmlfc2IsCisJCQkJCQkJICAgICAgIHdhbnRfY2x1c3RlcnMpOworCQkJaWYgKCpjb3dfc3RhcnQgKyB3YW50X2NsdXN0ZXJzIDw9IHJlY19lbmQpCisJCQkJKmNvd19sZW4gPSB3YW50X2NsdXN0ZXJzOworCQkJZWxzZQorCQkJCSpjb3dfbGVuID0gcmVjX2VuZCAtICpjb3dfc3RhcnQ7CisJCX0KKworCQkvKiBIYXZlIHdlIGNvdmVyZWQgb3VyIGVudGlyZSB3cml0ZSB5ZXQ/ICovCisJCWlmICgoKmNvd19zdGFydCArICpjb3dfbGVuKSA+PSAoY3BvcyArIHdyaXRlX2xlbikpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBleHRlbnQgYmxvY2sgYW5kIGRvbid0IGdldCBlbm91Z2gKKwkJICogY2x1c3RlcnMsIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgZXh0ZW50IGJsb2NrIGlmIHBvc3NpYmxlLgorCQkgKi8KKwkJaWYgKGkgKyAxID09IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpICYmCisJCSAgICBlYiAmJiBlYi0+aF9uZXh0X2xlYWZfYmxrKSB7CisJCQlicmVsc2UoZWJfYmgpOworCQkJZWJfYmggPSBOVUxMOworCisJCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSAgICAgICBsZTY0X3RvX2NwdShlYi0+aF9uZXh0X2xlYWZfYmxrKSwKKwkJCQkJICAgICAgICZlYl9iaCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopIGViX2JoLT5iX2RhdGE7CisJCQllbCA9ICZlYi0+aF9saXN0OworCQkJaSA9IC0xOworCQl9CisJfQorCitvdXQ6CisJYnJlbHNlKGViX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJlcGFyZSBtZXRhX2FjLCBkYXRhX2FjIGFuZCBjYWxjdWxhdGUgY3JlZGl0cyB3aGVuIHdlIHdhbnQgdG8gYWRkIHNvbWUKKyAqIG51bV9jbHVzdGVycyBpbiBkYXRhX3RyZWUgImV0IiBhbmQgY2hhbmdlIHRoZSByZWZjb3VudCBmb3IgdGhlIG9sZAorICogY2x1c3RlcnMoc3RhcnRpbmcgZm9ybSBwX2NsdXN0ZXIpIGluIHRoZSByZWZjb3VudCB0cmVlLgorICoKKyAqIE5vdGU6CisgKiAxLiBzaW5jZSB3ZSBtYXkgc3BsaXQgdGhlIG9sZCB0cmVlLCBzbyB3ZSBhdCBtb3N0IHdpbGwgbmVlZCBudW1fY2x1c3RlcnMgKyAyCisgKiAgICBtb3JlIG5ldyBsZWFmIHJlY29yZHMuCisgKiAyLiBJbiBzb21lIGNhc2UsIHdlIG1heSBub3QgbmVlZCB0byByZXNlcnZlIG5ldyBjbHVzdGVycyhlLmcsIHJlZmxpbmspLCBzbworICogICAganVzdCBnaXZlIGRhdGFfYWMgPSBOVUxMLgorICovCitzdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmY291bnRfYWxsb2NhdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQl1MzIgcF9jbHVzdGVyLCB1MzIgbnVtX2NsdXN0ZXJzLAorCQkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYywKKwkJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKipkYXRhX2FjLAorCQkJCQlpbnQgKmNyZWRpdHMpCit7CisJaW50IHJldCA9IDAsIG1ldGFfYWRkID0gMDsKKwlpbnQgbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMoT0NGUzJfU0Ioc2IpLCBldCk7CisKKwlpZiAobnVtX2ZyZWVfZXh0ZW50cyA8IDApIHsKKwkJcmV0ID0gbnVtX2ZyZWVfZXh0ZW50czsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobnVtX2ZyZWVfZXh0ZW50cyA8IG51bV9jbHVzdGVycyArIDIpCisJCW1ldGFfYWRkID0KKwkJCW9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChldC0+ZXRfcm9vdF9lbCk7CisKKwkqY3JlZGl0cyArPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKHNiLCBldC0+ZXRfcm9vdF9lbCwKKwkJCQkJICAgICAgbnVtX2NsdXN0ZXJzICsgMik7CisKKwlyZXQgPSBvY2ZzMl9jYWxjX3JlZmNvdW50X21ldGFfY3JlZGl0cyhzYiwgcmVmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJICAgICAgIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLAorCQkJCQkgICAgICAgJm1ldGFfYWRkLCBjcmVkaXRzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbWxvZygwLCAicmVzZXJ2ZSBuZXcgbWV0YWRhdGEgJWQsIGNsdXN0ZXJzICV1LCBjcmVkaXRzID0gJWRcbiIsCisJICAgICBtZXRhX2FkZCwgbnVtX2NsdXN0ZXJzLCAqY3JlZGl0cyk7CisJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKE9DRlMyX1NCKHNiKSwgbWV0YV9hZGQsCisJCQkJCQltZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRhdGFfYWMpIHsKKwkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhPQ0ZTMl9TQihzYiksIG51bV9jbHVzdGVycywKKwkJCQkJICAgICBkYXRhX2FjKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dDoKKwlpZiAocmV0KSB7CisJCWlmICgqbWV0YV9hYykgeworCQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KCptZXRhX2FjKTsKKwkJCSptZXRhX2FjID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY2xlYXJfY293X2J1ZmZlcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCUJVR19PTihidWZmZXJfZGlydHkoYmgpKTsKKworCWNsZWFyX2J1ZmZlcl9tYXBwZWQoYmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHVwbGljYXRlX2NsdXN0ZXJzX2J5X3BhZ2UoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkJICAgIHUzMiBjcG9zLCB1MzIgb2xkX2NsdXN0ZXIsCisJCQkJCSAgICB1MzIgbmV3X2NsdXN0ZXIsIHUzMiBuZXdfbGVuKQoreworCWludCByZXQgPSAwLCBwYXJ0aWFsOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpID0gY29udGV4dC0+ZGF0YV9ldC5ldF9jaTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKKwl1NjQgbmV3X2Jsb2NrID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCBuZXdfY2x1c3Rlcik7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdvZmZfdCBwYWdlX2luZGV4OworCXVuc2lnbmVkIGludCBmcm9tLCB0bzsKKwlsb2ZmX3Qgb2Zmc2V0LCBlbmQsIG1hcF9lbmQ7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBjb250ZXh0LT5pbm9kZS0+aV9tYXBwaW5nOworCisJbWxvZygwLCAib2xkX2NsdXN0ZXIgJXUsIG5ldyAldSwgbGVuICV1IGF0IG9mZnNldCAldVxuIiwgb2xkX2NsdXN0ZXIsCisJICAgICBuZXdfY2x1c3RlciwgbmV3X2xlbiwgY3Bvcyk7CisKKwlvZmZzZXQgPSAoKGxvZmZfdCljcG9zKSA8PCBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0czsKKwllbmQgPSBvZmZzZXQgKyAobmV3X2xlbiA8PCBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0cyk7CisKKwl3aGlsZSAob2Zmc2V0IDwgZW5kKSB7CisJCXBhZ2VfaW5kZXggPSBvZmZzZXQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJbWFwX2VuZCA9IChwYWdlX2luZGV4ICsgMSkgPDwgUEFHRV9DQUNIRV9TSElGVDsKKwkJaWYgKG1hcF9lbmQgPiBlbmQpCisJCQltYXBfZW5kID0gZW5kOworCisJCS8qIGZyb20sIHRvIGlzIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBwYWdlLiAqLworCQlmcm9tID0gb2Zmc2V0ICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCQl0byA9IFBBR0VfQ0FDSEVfU0laRTsKKwkJaWYgKG1hcF9lbmQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpCisJCQl0byA9IG1hcF9lbmQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisKKwkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlX2luZGV4KTsKKworCQkvKiBUaGlzIHBhZ2UgY2FuJ3QgYmUgZGlydGllZCBiZWZvcmUgd2UgQ29XIGl0IG91dC4gKi8KKwkJQlVHX09OKFBhZ2VEaXJ0eShwYWdlKSk7CisKKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCXJldCA9IGJsb2NrX3JlYWRfZnVsbF9wYWdlKHBhZ2UsIG9jZnMyX2dldF9ibG9jayk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQorCQkJbG9ja19wYWdlKHBhZ2UpOworCQl9CisKKwkJaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKKwkJCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLAorCQkJCQkJZnJvbSwgdG8sICZwYXJ0aWFsLAorCQkJCQkJb2NmczJfY2xlYXJfY293X2J1ZmZlcik7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQorCQl9CisKKwkJb2NmczJfbWFwX2FuZF9kaXJ0eV9wYWdlKGNvbnRleHQtPmlub2RlLAorCQkJCQkgaGFuZGxlLCBmcm9tLCB0bywKKwkJCQkJIHBhZ2UsIDAsICZuZXdfYmxvY2spOworCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7Cit1bmxvY2s6CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCXBhZ2UgPSBOVUxMOworCQlvZmZzZXQgPSBtYXBfZW5kOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9kdXBsaWNhdGVfY2x1c3RlcnNfYnlfamJkKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkJICAgdTMyIGNwb3MsIHUzMiBvbGRfY2x1c3RlciwKKwkJCQkJICAgdTMyIG5ld19jbHVzdGVyLCB1MzIgbmV3X2xlbikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gY29udGV4dC0+aW5vZGUtPmlfc2I7CisJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kgPSBjb250ZXh0LT5kYXRhX2V0LmV0X2NpOworCWludCBpLCBibG9ja3MgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIG5ld19sZW4pOworCXU2NCBvbGRfYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIG9sZF9jbHVzdGVyKTsKKwl1NjQgbmV3X2Jsb2NrID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCBuZXdfY2x1c3Rlcik7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihzYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKKworCW1sb2coMCwgIm9sZF9jbHVzdGVyICV1LCBuZXcgJXUsIGxlbiAldVxuIiwgb2xkX2NsdXN0ZXIsCisJICAgICBuZXdfY2x1c3RlciwgbmV3X2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxvY2tzOyBpKyssIG9sZF9ibG9jaysrLCBuZXdfYmxvY2srKykgeworCQluZXdfYmggPSBzYl9nZXRibGsob3NiLT5zYiwgbmV3X2Jsb2NrKTsKKwkJaWYgKG5ld19iaCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShjaSwgbmV3X2JoKTsKKworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGNpLCBvbGRfYmxvY2ssICZvbGRfYmgsIE5VTEwpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIG5ld19iaCwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQltZW1jcHkobmV3X2JoLT5iX2RhdGEsIG9sZF9iaC0+Yl9kYXRhLCBzYi0+c19ibG9ja3NpemUpOworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlicmVsc2UobmV3X2JoKTsKKwkJYnJlbHNlKG9sZF9iaCk7CisJCW5ld19iaCA9IE5VTEw7CisJCW9sZF9iaCA9IE5VTEw7CisJfQorCisJYnJlbHNlKG5ld19iaCk7CisJYnJlbHNlKG9sZF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9jbGVhcl9leHRfcmVmY291bnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsIHUzMiBsZW4sCisJCQkJICAgIHVuc2lnbmVkIGludCBleHRfZmxhZ3MsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlpbnQgcmV0LCBpbmRleDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyByZXBsYWNlX3JlYzsKKwlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSk7CisJdTY0IGlubyA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSk7CisKKwltbG9nKDAsICJpbm9kZSAlbGx1IGNwb3MgJXUsIGxlbiAldSwgcF9jbHVzdGVyICV1LCBleHRfZmxhZ3MgJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlubywgY3BvcywgbGVuLCBwX2NsdXN0ZXIsIGV4dF9mbGFncyk7CisKKwltZW1zZXQoJnJlcGxhY2VfcmVjLCAwLCBzaXplb2YocmVwbGFjZV9yZWMpKTsKKwlyZXBsYWNlX3JlYy5lX2Nwb3MgPSBjcHVfdG9fbGUzMihjcG9zKTsKKwlyZXBsYWNlX3JlYy5lX2xlYWZfY2x1c3RlcnMgPSBjcHVfdG9fbGUxNihsZW4pOworCXJlcGxhY2VfcmVjLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsCisJCQkJCQkJCSAgIHBfY2x1c3RlcikpOworCXJlcGxhY2VfcmVjLmVfZmxhZ3MgPSBleHRfZmxhZ3M7CisJcmVwbGFjZV9yZWMuZV9mbGFncyAmPSB+T0NGUzJfRVhUX1JFRkNPVU5URUQ7CisKKwlwYXRoID0gb2NmczJfbmV3X3BhdGhfZnJvbV9ldChldCk7CisJaWYgKCFwYXRoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcGF0aCwgY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOworCisJaW5kZXggPSBvY2ZzMl9zZWFyY2hfZXh0ZW50X2xpc3QoZWwsIGNwb3MpOworCWlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSkgeworCQlvY2ZzMl9lcnJvcihzYiwKKwkJCSAgICAiSW5vZGUgJWxsdSBoYXMgYW4gZXh0ZW50IGF0IGNwb3MgJXUgd2hpY2ggY2FuIG5vICIKKwkJCSAgICAibG9uZ2VyIGJlIGZvdW5kLlxuIiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWlubywgY3Bvcyk7CisJCXJldCA9IC1FUk9GUzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZSwgZXQsIHBhdGgsIGluZGV4LAorCQkJCSAmcmVwbGFjZV9yZWMsIG1ldGFfYWMsIGRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlcGxhY2VfY2x1c3RlcnMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkgIHUzMiBjcG9zLCB1MzIgb2xkLAorCQkJCSAgdTMyIG5ldywgdTMyIGxlbiwKKwkJCQkgIHVuc2lnbmVkIGludCBleHRfZmxhZ3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9IGNvbnRleHQtPmRhdGFfZXQuZXRfY2k7CisJdTY0IGlubyA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKTsKKworCW1sb2coMCwgImlub2RlICVsbHUsIGNwb3MgJXUsIG9sZCAldSwgbmV3ICV1LCBsZW4gJXUsIGV4dF9mbGFncyAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5vLCBjcG9zLCBvbGQsIG5ldywgbGVuLCBleHRfZmxhZ3MpOworCisJLypJZiB0aGUgb2xkIGNsdXN0ZXJzIGlzIHVud3JpdHRlbiwgbm8gbmVlZCB0byBkdXBsaWNhdGUuICovCisJaWYgKCEoZXh0X2ZsYWdzICYgT0NGUzJfRVhUX1VOV1JJVFRFTikpIHsKKwkJcmV0ID0gY29udGV4dC0+Y293X2R1cGxpY2F0ZV9jbHVzdGVycyhoYW5kbGUsIGNvbnRleHQsIGNwb3MsCisJCQkJCQkgICAgICBvbGQsIG5ldywgbGVuKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGVhcl9leHRfcmVmY291bnQoaGFuZGxlLCAmY29udGV4dC0+ZGF0YV9ldCwKKwkJCQkgICAgICAgY3BvcywgbmV3LCBsZW4sIGV4dF9mbGFncywKKwkJCQkgICAgICAgY29udGV4dC0+bWV0YV9hYywgJmNvbnRleHQtPmRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2Nvd19zeW5jX3dyaXRlYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQgKmNvbnRleHQsCisJCQkJICAgIHUzMiBjcG9zLCB1MzIgbnVtX2NsdXN0ZXJzKQoreworCWludCByZXQgPSAwOworCWxvZmZfdCBvZmZzZXQsIGVuZCwgbWFwX2VuZDsKKwlwZ29mZl90IHBhZ2VfaW5kZXg7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoY29udGV4dC0+aW5vZGUpKQorCQlyZXR1cm4gMDsKKworCW9mZnNldCA9ICgobG9mZl90KWNwb3MpIDw8IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzOworCWVuZCA9IG9mZnNldCArIChudW1fY2x1c3RlcnMgPDwgT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMpOworCisJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGNvbnRleHQtPmlub2RlLT5pX21hcHBpbmcsCisJCQkJICAgICAgIG9mZnNldCwgZW5kIC0gMSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdoaWxlIChvZmZzZXQgPCBlbmQpIHsKKwkJcGFnZV9pbmRleCA9IG9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQltYXBfZW5kID0gKHBhZ2VfaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOworCQlpZiAobWFwX2VuZCA+IGVuZCkKKwkJCW1hcF9lbmQgPSBlbmQ7CisKKwkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShjb250ZXh0LT5pbm9kZS0+aV9tYXBwaW5nLCBwYWdlX2luZGV4KTsKKwkJQlVHX09OKCFwYWdlKTsKKworCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCQlpZiAoUGFnZUVycm9yKHBhZ2UpKSB7CisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQl9IGVsc2UKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlwYWdlID0gTlVMTDsKKwkJb2Zmc2V0ID0gbWFwX2VuZDsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGlfZ2V0X2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkgdTMyIHZfY2x1c3RlciwgdTMyICpwX2NsdXN0ZXIsCisJCQkJIHUzMiAqbnVtX2NsdXN0ZXJzLAorCQkJCSB1bnNpZ25lZCBpbnQgKmV4dGVudF9mbGFncykKK3sKKwlyZXR1cm4gb2NmczJfZ2V0X2NsdXN0ZXJzKGNvbnRleHQtPmlub2RlLCB2X2NsdXN0ZXIsIHBfY2x1c3RlciwKKwkJCQkgIG51bV9jbHVzdGVycywgZXh0ZW50X2ZsYWdzKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9tYWtlX2NsdXN0ZXJzX3dyaXRhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCXN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkJdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsCisJCQkJCXUzMiBudW1fY2x1c3RlcnMsIHVuc2lnbmVkIGludCBlX2ZsYWdzKQoreworCWludCByZXQsIGRlbGV0ZSwgaW5kZXgsIGNyZWRpdHMgPSAgMDsKKwl1MzIgbmV3X2JpdCwgbmV3X2xlbjsKKwl1bnNpZ25lZCBpbnQgc2V0X2xlbjsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKHNiKTsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSA9ICZjb250ZXh0LT5yZWZfdHJlZS0+cmZfY2k7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyByZWM7CisKKwltbG9nKDAsICJjcG9zICV1LCBwX2NsdXN0ZXIgJXUsIG51bV9jbHVzdGVycyAldSwgZV9mbGFncyAldVxuIiwKKwkgICAgIGNwb3MsIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLCBlX2ZsYWdzKTsKKworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfYWxsb2NhdG9ycyhzYiwgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgJmNvbnRleHQtPmRhdGFfZXQsCisJCQkJCSAgICAgcmVmX2NpLAorCQkJCQkgICAgIGNvbnRleHQtPnJlZl9yb290X2JoLAorCQkJCQkgICAgICZjb250ZXh0LT5tZXRhX2FjLAorCQkJCQkgICAgICZjb250ZXh0LT5kYXRhX2FjLCAmY3JlZGl0cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGNvbnRleHQtPnBvc3RfcmVmY291bnQpCisJCWNyZWRpdHMgKz0gY29udGV4dC0+cG9zdF9yZWZjb3VudC0+Y3JlZGl0czsKKworCWNyZWRpdHMgKz0gY29udGV4dC0+ZXh0cmFfY3JlZGl0czsKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKG51bV9jbHVzdGVycykgeworCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKHJlZl9jaSwgY29udGV4dC0+cmVmX3Jvb3RfYmgsCisJCQkJCSAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgJnJlYywgJmluZGV4LCAmcmVmX2xlYWZfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKworCQlCVUdfT04oIXJlYy5yX3JlZmNvdW50KTsKKwkJc2V0X2xlbiA9IG1pbigodTY0KXBfY2x1c3RlciArIG51bV9jbHVzdGVycywKKwkJCSAgICAgIGxlNjRfdG9fY3B1KHJlYy5yX2Nwb3MpICsKKwkJCSAgICAgIGxlMzJfdG9fY3B1KHJlYy5yX2NsdXN0ZXJzKSkgLSBwX2NsdXN0ZXI7CisKKwkJLyoKKwkJICogVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IHNpdHVhdGlvbiBoZXJlLgorCQkgKiAxLiBJZiByZWZjb3VudCA9PSAxLCByZW1vdmUgdGhlIGZsYWcgYW5kIGRvbid0IENPVy4KKwkJICogMi4gSWYgcmVmY291bnQgPiAxLCBhbGxvY2F0ZSBjbHVzdGVycy4KKwkJICogICAgSGVyZSB3ZSBtYXkgbm90IGFsbG9jYXRlIHJfbGVuIG9uY2UgYXQgYSB0aW1lLCBzbyBjb250aW51ZQorCQkgKiAgICB1bnRpbCB3ZSByZWFjaCBudW1fY2x1c3RlcnMuCisJCSAqLworCQlpZiAobGUzMl90b19jcHUocmVjLnJfcmVmY291bnQpID09IDEpIHsKKwkJCWRlbGV0ZSA9IDA7CisJCQlyZXQgPSBvY2ZzMl9jbGVhcl9leHRfcmVmY291bnQoaGFuZGxlLAorCQkJCQkJICAgICAgICZjb250ZXh0LT5kYXRhX2V0LAorCQkJCQkJICAgICAgIGNwb3MsIHBfY2x1c3RlciwKKwkJCQkJCSAgICAgICBzZXRfbGVuLCBlX2ZsYWdzLAorCQkJCQkJICAgICAgIGNvbnRleHQtPm1ldGFfYWMsCisJCQkJCQkgICAgICAgJmNvbnRleHQtPmRlYWxsb2MpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dF9jb21taXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZWxldGUgPSAxOworCisJCQlyZXQgPSBfX29jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLAorCQkJCQkJICAgICBjb250ZXh0LT5kYXRhX2FjLAorCQkJCQkJICAgICAxLCBzZXRfbGVuLAorCQkJCQkJICAgICAmbmV3X2JpdCwgJm5ld19sZW4pOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dF9jb21taXQ7CisJCQl9CisKKwkJCXJldCA9IG9jZnMyX3JlcGxhY2VfY2x1c3RlcnMoaGFuZGxlLCBjb250ZXh0LAorCQkJCQkJICAgICBjcG9zLCBwX2NsdXN0ZXIsIG5ld19iaXQsCisJCQkJCQkgICAgIG5ld19sZW4sIGVfZmxhZ3MpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dF9jb21taXQ7CisJCQl9CisJCQlzZXRfbGVuID0gbmV3X2xlbjsKKwkJfQorCisJCXJldCA9IF9fb2NmczJfZGVjcmVhc2VfcmVmY291bnQoaGFuZGxlLCByZWZfY2ksCisJCQkJCQljb250ZXh0LT5yZWZfcm9vdF9iaCwKKwkJCQkJCXBfY2x1c3Rlciwgc2V0X2xlbiwKKwkJCQkJCWNvbnRleHQtPm1ldGFfYWMsCisJCQkJCQkmY29udGV4dC0+ZGVhbGxvYywgZGVsZXRlKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisKKwkJY3BvcyArPSBzZXRfbGVuOworCQlwX2NsdXN0ZXIgKz0gc2V0X2xlbjsKKwkJbnVtX2NsdXN0ZXJzIC09IHNldF9sZW47CisJCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJCXJlZl9sZWFmX2JoID0gTlVMTDsKKwl9CisKKwkvKiBoYW5kbGUgYW55IHBvc3RfY293IGFjdGlvbi4gKi8KKwlpZiAoY29udGV4dC0+cG9zdF9yZWZjb3VudCAmJiBjb250ZXh0LT5wb3N0X3JlZmNvdW50LT5mdW5jKSB7CisJCXJldCA9IGNvbnRleHQtPnBvc3RfcmVmY291bnQtPmZ1bmMoY29udGV4dC0+aW5vZGUsIGhhbmRsZSwKKwkJCQkJCWNvbnRleHQtPnBvc3RfcmVmY291bnQtPnBhcmEpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEhlcmUgd2Ugc2hvdWxkIHdyaXRlIHRoZSBuZXcgcGFnZSBvdXQgZmlyc3QgaWYgd2UgYXJlCisJICogaW4gd3JpdGUtYmFjayBtb2RlLgorCSAqLworCWlmIChjb250ZXh0LT5nZXRfY2x1c3RlcnMgPT0gb2NmczJfZGlfZ2V0X2NsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2Nvd19zeW5jX3dyaXRlYmFjayhzYiwgY29udGV4dCwgY3BvcywgbnVtX2NsdXN0ZXJzKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKworb3V0OgorCWlmIChjb250ZXh0LT5kYXRhX2FjKSB7CisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjb250ZXh0LT5kYXRhX2FjKTsKKwkJY29udGV4dC0+ZGF0YV9hYyA9IE5VTEw7CisJfQorCWlmIChjb250ZXh0LT5tZXRhX2FjKSB7CisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjb250ZXh0LT5tZXRhX2FjKTsKKwkJY29udGV4dC0+bWV0YV9hYyA9IE5VTEw7CisJfQorCWJyZWxzZShyZWZfbGVhZl9iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlcGxhY2VfY293KHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGV4dC0+aW5vZGU7CisJdTMyIGNvd19zdGFydCA9IGNvbnRleHQtPmNvd19zdGFydCwgY293X2xlbiA9IGNvbnRleHQtPmNvd19sZW47CisJdTMyIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisKKwlpZiAoIW9jZnMyX3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkgeworCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsdSB3YW50IHRvIHVzZSByZWZjb3VudCAiCisJCQkgICAgInRyZWUsIGJ1dCB0aGUgZmVhdHVyZSBiaXQgaXMgbm90IHNldCBpbiB0aGUgIgorCQkJICAgICJzdXBlciBibG9jay4iLCBpbm9kZS0+aV9pbm8pOworCQlyZXR1cm4gLUVST0ZTOworCX0KKworCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZjb250ZXh0LT5kZWFsbG9jKTsKKworCXdoaWxlIChjb3dfbGVuKSB7CisJCXJldCA9IGNvbnRleHQtPmdldF9jbHVzdGVycyhjb250ZXh0LCBjb3dfc3RhcnQsICZwX2NsdXN0ZXIsCisJCQkJCSAgICAmbnVtX2NsdXN0ZXJzLCAmZXh0X2ZsYWdzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlCVUdfT04oIShleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpOworCisJCWlmIChjb3dfbGVuIDwgbnVtX2NsdXN0ZXJzKQorCQkJbnVtX2NsdXN0ZXJzID0gY293X2xlbjsKKworCQlyZXQgPSBvY2ZzMl9tYWtlX2NsdXN0ZXJzX3dyaXRhYmxlKGlub2RlLT5pX3NiLCBjb250ZXh0LAorCQkJCQkJICAgY293X3N0YXJ0LCBwX2NsdXN0ZXIsCisJCQkJCQkgICBudW1fY2x1c3RlcnMsIGV4dF9mbGFncyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJY293X2xlbiAtPSBudW1fY2x1c3RlcnM7CisJCWNvd19zdGFydCArPSBudW1fY2x1c3RlcnM7CisJfQorCisJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmNvbnRleHQtPmRlYWxsb2MpKSB7CisJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOworCQlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmY29udGV4dC0+ZGVhbGxvYyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0YXJ0aW5nIGF0IGNwb3MsIHRyeSB0byBDb1cgd3JpdGVfbGVuIGNsdXN0ZXJzLiAgRG9uJ3QgQ29XCisgKiBwYXN0IG1heF9jcG9zLiAgVGhpcyB3aWxsIHN0b3Agd2hlbiBpdCBydW5zIGludG8gYSBob2xlIG9yIGFuCisgKiB1bnJlZmNvdW50ZWQgZXh0ZW50LgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X2Nvd19odW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgICB1MzIgY3BvcywgdTMyIHdyaXRlX2xlbiwgdTMyIG1heF9jcG9zKQoreworCWludCByZXQ7CisJdTMyIGNvd19zdGFydCA9IDAsIGNvd19sZW4gPSAwOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZTsKKwlzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQgKmNvbnRleHQgPSBOVUxMOworCisJQlVHX09OKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCkpOworCisJcmV0ID0gb2NmczJfcmVmY291bnRfY2FsX2Nvd19jbHVzdGVycyhpbm9kZSwgJmRpLT5pZDIuaV9saXN0LAorCQkJCQkgICAgICBjcG9zLCB3cml0ZV9sZW4sIG1heF9jcG9zLAorCQkJCQkgICAgICAmY293X3N0YXJ0LCAmY293X2xlbik7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgIkNvVyBpbm9kZSAlbHUsIGNwb3MgJXUsIHdyaXRlX2xlbiAldSwgY293X3N0YXJ0ICV1LCAiCisJICAgICAiY293X2xlbiAldVxuIiwgaW5vZGUtPmlfaW5vLAorCSAgICAgY3Bvcywgd3JpdGVfbGVuLCBjb3dfc3RhcnQsIGNvd19sZW4pOworCisJQlVHX09OKGNvd19sZW4gPT0gMCk7CisKKwljb250ZXh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2Nvd19jb250ZXh0KSwgR0ZQX05PRlMpOworCWlmICghY29udGV4dCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYyksCisJCQkJICAgICAgIDEsICZyZWZfdHJlZSwgJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJY29udGV4dC0+aW5vZGUgPSBpbm9kZTsKKwljb250ZXh0LT5jb3dfc3RhcnQgPSBjb3dfc3RhcnQ7CisJY29udGV4dC0+Y293X2xlbiA9IGNvd19sZW47CisJY29udGV4dC0+cmVmX3RyZWUgPSByZWZfdHJlZTsKKwljb250ZXh0LT5yZWZfcm9vdF9iaCA9IHJlZl9yb290X2JoOworCWNvbnRleHQtPmNvd19kdXBsaWNhdGVfY2x1c3RlcnMgPSBvY2ZzMl9kdXBsaWNhdGVfY2x1c3RlcnNfYnlfcGFnZTsKKwljb250ZXh0LT5nZXRfY2x1c3RlcnMgPSBvY2ZzMl9kaV9nZXRfY2x1c3RlcnM7CisKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmY29udGV4dC0+ZGF0YV9ldCwKKwkJCQkgICAgICBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoKTsKKworCXJldCA9IG9jZnMyX3JlcGxhY2VfY293KGNvbnRleHQpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCS8qCisJICogdHJ1bmNhdGUgdGhlIGV4dGVudCBtYXAgaGVyZSBzaW5jZSBubyBtYXR0ZXIgd2hldGhlciB3ZSBtZWV0IHdpdGgKKwkgKiBhbnkgZXJyb3IgZHVyaW5nIHRoZSBhY3Rpb24sIHdlIHNob3VsZG4ndCB0cnVzdCBjYWNoZWQgZXh0ZW50IG1hcAorCSAqIGFueSBtb3JlLgorCSAqLworCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIGNvd19zdGFydCk7CisKKwlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworb3V0OgorCWtmcmVlKGNvbnRleHQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDb1cgYW55IGFuZCBhbGwgY2x1c3RlcnMgYmV0d2VlbiBjcG9zIGFuZCBjcG9zK3dyaXRlX2xlbi4KKyAqIERvbid0IENvVyBwYXN0IG1heF9jcG9zLiAgSWYgdGhpcyByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgYWxsCisgKiBjbHVzdGVycyBiZXR3ZWVuIGNwb3MgYW5kIGNwb3Mrd3JpdGVfbGVuIGFyZSBzYWZlIHRvIG1vZGlmeS4KKyAqLworaW50IG9jZnMyX3JlZmNvdW50X2NvdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJICAgICAgIHUzMiBjcG9zLCB1MzIgd3JpdGVfbGVuLCB1MzIgbWF4X2Nwb3MpCit7CisJaW50IHJldCA9IDA7CisJdTMyIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisKKwl3aGlsZSAod3JpdGVfbGVuKSB7CisJCXJldCA9IG9jZnMyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBfY2x1c3RlciwKKwkJCQkJICZudW1fY2x1c3RlcnMsICZleHRfZmxhZ3MpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3cml0ZV9sZW4gPCBudW1fY2x1c3RlcnMpCisJCQludW1fY2x1c3RlcnMgPSB3cml0ZV9sZW47CisKKwkJaWYgKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSB7CisJCQlyZXQgPSBvY2ZzMl9yZWZjb3VudF9jb3dfaHVuayhpbm9kZSwgZGlfYmgsIGNwb3MsCisJCQkJCQkgICAgICBudW1fY2x1c3RlcnMsIG1heF9jcG9zKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl3cml0ZV9sZW4gLT0gbnVtX2NsdXN0ZXJzOworCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3ZhbHVlX2dldF9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCSAgdTMyIHZfY2x1c3RlciwgdTMyICpwX2NsdXN0ZXIsCisJCQkJCSAgdTMyICpudW1fY2x1c3RlcnMsCisJCQkJCSAgdW5zaWduZWQgaW50ICpleHRlbnRfZmxhZ3MpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRleHQtPmlub2RlOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diA9IGNvbnRleHQtPmNvd19vYmplY3Q7CisKKwlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCB2X2NsdXN0ZXIsIHBfY2x1c3RlciwKKwkJCQkJbnVtX2NsdXN0ZXJzLCAmeHYtPnhyX2xpc3QsCisJCQkJCWV4dGVudF9mbGFncyk7Cit9CisKKy8qCisgKiBHaXZlbiBhIHhhdHRyIHZhbHVlIHJvb3QsIGNhbGN1bGF0ZSB0aGUgbW9zdCBtZXRhL2NyZWRpdHMgd2UgbmVlZCBmb3IKKyAqIHJlZmNvdW50IHRyZWUgY2hhbmdlIGlmIHdlIHRydW5jYXRlIGl0IHRvIDAuCisgKi8KK2ludCBvY2ZzMl9yZWZjb3VudGVkX3hhdHRyX2RlbGV0ZV9uZWVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2LAorCQkJCSAgICAgICBpbnQgKm1ldGFfYWRkLCBpbnQgKmNyZWRpdHMpCit7CisJaW50IHJldCA9IDAsIGluZGV4LCByZWZfYmxvY2tzID0gMDsKKwl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnM7CisJdTMyIGNwb3MgPSAwLCBjbHVzdGVycyA9IGxlMzJfdG9fY3B1KHh2LT54cl9jbHVzdGVycyk7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYjsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjIHJlYzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoID0gTlVMTDsKKworCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgJnh2LT54cl9saXN0LAorCQkJCQkgICAgICAgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJY3BvcyArPSBudW1fY2x1c3RlcnM7CisKKwkJd2hpbGUgKG51bV9jbHVzdGVycykgeworCQkJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3JlYyhyZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkJICAgICBwX2NsdXN0ZXIsIG51bV9jbHVzdGVycywKKwkJCQkJCSAgICAgJnJlYywgJmluZGV4LAorCQkJCQkJICAgICAmcmVmX2xlYWZfYmgpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJQlVHX09OKCFyZWMucl9yZWZjb3VudCk7CisKKwkJCXJiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9sZWFmX2JoLT5iX2RhdGE7CisKKwkJCS8qCisJCQkgKiBXZSByZWFsbHkgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBvdGhlciBjbHVzdGVycyBpcyBpbgorCQkJICogdGhpcyByZWZjb3VudCBibG9jayBvciBub3QsIHNvIGp1c3QgdGFrZSB0aGUgd29yc3QKKwkJCSAqIGNhc2UgdGhhdCBhbGwgdGhlIGNsdXN0ZXJzIGFyZSBpbiB0aGlzIGJsb2NrIGFuZCBlYWNoCisJCQkgKiBvbmUgd2lsbCBzcGxpdCBhIHJlZmNvdW50IHJlYywgc28gdG90YWxseSB3ZSBuZWVkCisJCQkgKiBjbHVzdGVycyAqIDIgbmV3IHJlZmNvdW50IHJlYy4KKwkJCSAqLworCQkJaWYgKGxlNjRfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpICsgY2x1c3RlcnMgKiAyID4KKwkJCSAgICBsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF9jb3VudCkpCisJCQkJcmVmX2Jsb2NrcysrOworCisJCQkqY3JlZGl0cyArPSAxOworCQkJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwkJCXJlZl9sZWFmX2JoID0gTlVMTDsKKworCQkJaWYgKG51bV9jbHVzdGVycyA8PSBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJbnVtX2NsdXN0ZXJzIC09IGxlMzJfdG9fY3B1KHJlYy5yX2NsdXN0ZXJzKTsKKwkJCXBfY2x1c3RlciArPSBudW1fY2x1c3RlcnM7CisJCX0KKwl9CisKKwkqbWV0YV9hZGQgKz0gcmVmX2Jsb2NrczsKKwlpZiAoIXJlZl9ibG9ja3MpCisJCWdvdG8gb3V0OworCisJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKwlpZiAobGUzMl90b19jcHUocmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpCisJCSpjcmVkaXRzICs9IE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFM7CisJZWxzZSB7CisJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCQlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZldCwgcmVmX2NpLCByZWZfcm9vdF9iaCk7CisJCSpjcmVkaXRzICs9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMoaW5vZGUtPmlfc2IsCisJCQkJCQkgICAgICBldC5ldF9yb290X2VsLAorCQkJCQkJICAgICAgcmVmX2Jsb2Nrcyk7CisJfQorCitvdXQ6CisJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRG8gQ29XIGZvciB4YXR0ci4KKyAqLworaW50IG9jZnMyX3JlZmNvdW50X2Nvd194YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCSAgICAgdTMyIGNwb3MsIHUzMiB3cml0ZV9sZW4sCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpwb3N0KQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2ID0gdmItPnZiX3h2OworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCA9IE5VTEw7CisJdTMyIGNvd19zdGFydCwgY293X2xlbjsKKworCUJVR19PTighKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpKTsKKworCXJldCA9IG9jZnMyX3JlZmNvdW50X2NhbF9jb3dfY2x1c3RlcnMoaW5vZGUsICZ4di0+eHJfbGlzdCwKKwkJCQkJICAgICAgY3Bvcywgd3JpdGVfbGVuLCBVSU5UX01BWCwKKwkJCQkJICAgICAgJmNvd19zdGFydCwgJmNvd19sZW4pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlCVUdfT04oY293X2xlbiA9PSAwKTsKKworCWNvbnRleHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQpLCBHRlBfTk9GUyk7CisJaWYgKCFjb250ZXh0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJY29udGV4dC0+aW5vZGUgPSBpbm9kZTsKKwljb250ZXh0LT5jb3dfc3RhcnQgPSBjb3dfc3RhcnQ7CisJY29udGV4dC0+Y293X2xlbiA9IGNvd19sZW47CisJY29udGV4dC0+cmVmX3RyZWUgPSByZWZfdHJlZTsKKwljb250ZXh0LT5yZWZfcm9vdF9iaCA9IHJlZl9yb290X2JoOzsKKwljb250ZXh0LT5jb3dfb2JqZWN0ID0geHY7CisKKwljb250ZXh0LT5jb3dfZHVwbGljYXRlX2NsdXN0ZXJzID0gb2NmczJfZHVwbGljYXRlX2NsdXN0ZXJzX2J5X2piZDsKKwkvKiBXZSBuZWVkIHRoZSBleHRyYSBjcmVkaXRzIGZvciBkdXBsaWNhdGVfY2x1c3RlcnMgYnkgamJkLiAqLworCWNvbnRleHQtPmV4dHJhX2NyZWRpdHMgPQorCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpICogY293X2xlbjsKKwljb250ZXh0LT5nZXRfY2x1c3RlcnMgPSBvY2ZzMl94YXR0cl92YWx1ZV9nZXRfY2x1c3RlcnM7CisJY29udGV4dC0+cG9zdF9yZWZjb3VudCA9IHBvc3Q7CisKKwlvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKCZjb250ZXh0LT5kYXRhX2V0LAorCQkJCQkgICBJTk9ERV9DQUNIRShpbm9kZSksIHZiKTsKKworCXJldCA9IG9jZnMyX3JlcGxhY2VfY293KGNvbnRleHQpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCWtmcmVlKGNvbnRleHQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZXh0ZW50IGludG8gcmVmY291bnQgdHJlZSBhbmQgbWFyayBhIGV4dGVudCByZWMKKyAqIGFzIHJlZmNvdW50ZWQgaW4gdGhlIGRpbm9kZSB0cmVlLgorICovCitpbnQgb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmRhdGFfZXQsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkgICAgdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsIHUzMiBudW1fY2x1c3RlcnMsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgc3RydWN0IG9jZnMyX3Bvc3RfcmVmY291bnQgKnBvc3QpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCWludCBjcmVkaXRzID0gMSwgcmVmX2Jsb2NrcyA9IDA7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOworCisJcmV0ID0gb2NmczJfY2FsY19yZWZjb3VudF9tZXRhX2NyZWRpdHMoaW5vZGUtPmlfc2IsCisJCQkJCSAgICAgICByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgICAmcmVmX2Jsb2NrcywgJmNyZWRpdHMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwltbG9nKDAsICJyZXNlcnZlIG5ldyBtZXRhZGF0YSAlZCwgY3JlZGl0cyA9ICVkXG4iLAorCSAgICAgcmVmX2Jsb2NrcywgY3JlZGl0cyk7CisKKwlpZiAocmVmX2Jsb2NrcykgeworCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAorCQkJCQkJCXJlZl9ibG9ja3MsICZtZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAocG9zdCkKKwkJY3JlZGl0cyArPSBwb3N0LT5jcmVkaXRzOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX21hcmtfZXh0ZW50X3JlZmNvdW50ZWQoaW5vZGUsIGRhdGFfZXQsIGhhbmRsZSwKKwkJCQkJICAgY3BvcywgbnVtX2NsdXN0ZXJzLCBwX2NsdXN0ZXIsCisJCQkJCSAgIG1ldGFfYWMsIGRlYWxsb2MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gX19vY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGUsIHJlZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJCXBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLCAwLAorCQkJCQltZXRhX2FjLCBkZWFsbG9jKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCWlmIChwb3N0ICYmIHBvc3QtPmZ1bmMpIHsKKwkJcmV0ID0gcG9zdC0+ZnVuYyhpbm9kZSwgaGFuZGxlLCBwb3N0LT5wYXJhKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY2hhbmdlX2N0aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQoreworCWludCByZXQ7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJCQkgICBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJZGktPmlfY3RpbWUgPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9jdGltZS50dl9zZWMpOworCWRpLT5pX2N0aW1lX25zZWMgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9jdGltZS50dl9uc2VjKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2F0dGFjaF9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgcmV0LCBkYXRhX2NoYW5nZWQgPSAwOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZTsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzOworCWxvZmZfdCBzaXplOworCXUzMiBjcG9zLCBudW1fY2x1c3RlcnMsIGNsdXN0ZXJzLCBwX2NsdXN0ZXI7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZGlfZXQ7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmZGVhbGxvYyk7CisKKwlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSkgeworCQlyZXQgPSBvY2ZzMl9jcmVhdGVfcmVmY291bnRfdHJlZShpbm9kZSwgZGlfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCUJVR19PTighZGktPmlfcmVmY291bnRfbG9jKTsKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLAorCQkJCSAgICAgICBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLCAxLAorCQkJCSAgICAgICAmcmVmX3RyZWUsICZyZWZfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZkaV9ldCwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCk7CisKKwlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWNsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGlub2RlLT5pX3NiLCBzaXplKTsKKworCWNwb3MgPSAwOworCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJcmV0ID0gb2NmczJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgJm51bV9jbHVzdGVycywgJmV4dF9mbGFncyk7CisKKwkJaWYgKHBfY2x1c3RlciAmJiAhKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSkgeworCQkJcmV0ID0gb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoaW5vZGUsICZkaV9ldCwKKwkJCQkJCSAgICAgICZyZWZfdHJlZS0+cmZfY2ksCisJCQkJCQkgICAgICByZWZfcm9vdF9iaCwgY3BvcywKKwkJCQkJCSAgICAgIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLAorCQkJCQkJICAgICAgJmRlYWxsb2MsIE5VTEwpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIHVubG9jazsKKwkJCX0KKworCQkJZGF0YV9jaGFuZ2VkID0gMTsKKwkJfQorCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CisKKwlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShpbm9kZSwgZGlfYmgsCisJCQkJCQkgICAgICAgJnJlZl90cmVlLT5yZl9jaSwKKwkJCQkJCSAgICAgICByZWZfcm9vdF9iaCwKKwkJCQkJCSAgICAgICAmZGVhbGxvYyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJfQorCisJaWYgKGRhdGFfY2hhbmdlZCkgeworCQlyZXQgPSBvY2ZzMl9jaGFuZ2VfY3RpbWUoaW5vZGUsIGRpX2JoKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK3VubG9jazoKKwlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCisJaWYgKCFyZXQgJiYgb2NmczJfZGVhbGxvY19oYXNfY2x1c3RlcigmZGVhbGxvYykpIHsKKwkJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMSk7CisJCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZkZWFsbG9jKTsKKwl9CitvdXQ6CisJLyoKKwkgKiBFbXB0eSB0aGUgZXh0ZW50IG1hcCBzbyB0aGF0IHdlIG1heSBnZXQgdGhlIHJpZ2h0IGV4dGVudAorCSAqIHJlY29yZCBmcm9tIHRoZSBkaXNrLgorCSAqLworCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9hZGRfcmVmY291bnRlZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgIHUzMiBjcG9zLCB1MzIgcF9jbHVzdGVyLCB1MzIgbnVtX2NsdXN0ZXJzLAorCQkJCSAgIHVuc2lnbmVkIGludCBleHRfZmxhZ3MsCisJCQkJICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCWludCBjcmVkaXRzID0gMDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X2FsbG9jYXRvcnMoaW5vZGUtPmlfc2IsCisJCQkJCSAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgZXQsIHJlZl9jaSwKKwkJCQkJICAgICByZWZfcm9vdF9iaCwgJm1ldGFfYWMsCisJCQkJCSAgICAgTlVMTCwgJmNyZWRpdHMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCBjcG9zLAorCQkJY3B1X3RvX2xlNjQob2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLAorCQkJCQkJCSAgICAgcF9jbHVzdGVyKSksCisJCQludW1fY2x1c3RlcnMsIGV4dF9mbGFncywgbWV0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGUsIHJlZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJICAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJICAgICAgbWV0YV9hYywgZGVhbGxvYyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CitvdXQ6CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2R1cGxpY2F0ZV9leHRlbnRfbGlzdChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsCisJCQkJc3RydWN0IGlub2RlICp0X2lub2RlLAorCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsIGNsdXN0ZXJzLCBjcG9zOworCWxvZmZfdCBzaXplOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRSh0X2lub2RlKSwgdF9iaCk7CisKKwlzaXplID0gaV9zaXplX3JlYWQoc19pbm9kZSk7CisJY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc19pbm9kZS0+aV9zYiwgc2l6ZSk7CisKKwljcG9zID0gMDsKKwl3aGlsZSAoY3BvcyA8IGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2dldF9jbHVzdGVycyhzX2lub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgJm51bV9jbHVzdGVycywgJmV4dF9mbGFncyk7CisKKwkJaWYgKHBfY2x1c3RlcikgeworCQkJcmV0ID0gb2NmczJfYWRkX3JlZmNvdW50ZWRfZXh0ZW50KHRfaW5vZGUsICZldCwKKwkJCQkJCQkgIHJlZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJCQkJICBjcG9zLCBwX2NsdXN0ZXIsCisJCQkJCQkJICBudW1fY2x1c3RlcnMsCisJCQkJCQkJICBleHRfZmxhZ3MsCisJCQkJCQkJICBkZWFsbG9jKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogY2hhbmdlIHRoZSBuZXcgZmlsZSdzIGF0dHJpYnV0ZXMgdG8gdGhlIHNyYy4KKyAqCisgKiByZWZsaW5rIGNyZWF0ZXMgYSBzbmFwc2hvdCBvZiBhIGZpbGUsIHRoYXQgbWVhbnMgdGhlIGF0dHJpYnV0ZXMKKyAqIG11c3QgYmUgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhyZWUgZXhjZXB0aW9ucyAtIG5saW5rLCBpbm8sIGFuZCBjdGltZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jb21wbGV0ZV9yZWZsaW5rKHN0cnVjdCBpbm9kZSAqc19pbm9kZSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCwKKwkJCQkgIHN0cnVjdCBpbm9kZSAqdF9pbm9kZSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCwKKwkJCQkgIGJvb2wgcHJlc2VydmUpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKnNfZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXNfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopdF9iaC0+Yl9kYXRhOworCWxvZmZfdCBzaXplID0gaV9zaXplX3JlYWQoc19pbm9kZSk7CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhPQ0ZTMl9TQih0X2lub2RlLT5pX3NiKSwKKwkJCQkgICBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUodF9pbm9kZSksIHRfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJc3Bpbl9sb2NrKCZPQ0ZTMl9JKHRfaW5vZGUpLT5pcF9sb2NrKTsKKwlPQ0ZTMl9JKHRfaW5vZGUpLT5pcF9jbHVzdGVycyA9IE9DRlMyX0koc19pbm9kZSktPmlwX2NsdXN0ZXJzOworCU9DRlMyX0kodF9pbm9kZSktPmlwX2F0dHIgPSBPQ0ZTMl9JKHNfaW5vZGUpLT5pcF9hdHRyOworCU9DRlMyX0kodF9pbm9kZSktPmlwX2R5bl9mZWF0dXJlcyA9IE9DRlMyX0koc19pbm9kZSktPmlwX2R5bl9mZWF0dXJlczsKKwlzcGluX3VubG9jaygmT0NGUzJfSSh0X2lub2RlKS0+aXBfbG9jayk7CisJaV9zaXplX3dyaXRlKHRfaW5vZGUsIHNpemUpOworCisJZGktPmlfeGF0dHJfaW5saW5lX3NpemUgPSBzX2RpLT5pX3hhdHRyX2lubGluZV9zaXplOworCWRpLT5pX2NsdXN0ZXJzID0gc19kaS0+aV9jbHVzdGVyczsKKwlkaS0+aV9zaXplID0gc19kaS0+aV9zaXplOworCWRpLT5pX2R5bl9mZWF0dXJlcyA9IHNfZGktPmlfZHluX2ZlYXR1cmVzOworCWRpLT5pX2F0dHIgPSBzX2RpLT5pX2F0dHI7CisKKwlpZiAocHJlc2VydmUpIHsKKwkJZGktPmlfdWlkID0gc19kaS0+aV91aWQ7CisJCWRpLT5pX2dpZCA9IHNfZGktPmlfZ2lkOworCQlkaS0+aV9tb2RlID0gc19kaS0+aV9tb2RlOworCisJCS8qCisJCSAqIHVwZGF0ZSB0aW1lLgorCQkgKiB3ZSB3YW50IG10aW1lIHRvIGFwcGVhciBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBhbmQKKwkJICogdXBkYXRlIGN0aW1lLgorCQkgKi8KKwkJdF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKworCQlkaS0+aV9jdGltZSA9IGNwdV90b19sZTY0KHRfaW5vZGUtPmlfY3RpbWUudHZfc2VjKTsKKwkJZGktPmlfY3RpbWVfbnNlYyA9IGNwdV90b19sZTMyKHRfaW5vZGUtPmlfY3RpbWUudHZfbnNlYyk7CisKKwkJdF9pbm9kZS0+aV9tdGltZSA9IHNfaW5vZGUtPmlfbXRpbWU7CisJCWRpLT5pX210aW1lID0gc19kaS0+aV9tdGltZTsKKwkJZGktPmlfbXRpbWVfbnNlYyA9IHNfZGktPmlfbXRpbWVfbnNlYzsKKwl9CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdF9iaCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKHRfaW5vZGUtPmlfc2IpLCBoYW5kbGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3JlZmxpbmtfbm9kZShzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKnRfaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRfYmgsCisJCQkJICAgICBib29sIHByZXNlcnZlKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKHNfaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXNfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWU7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmZGVhbGxvYyk7CisKKwlyZXQgPSBvY2ZzMl9zZXRfcmVmY291bnRfdHJlZSh0X2lub2RlLCB0X2JoLAorCQkJCSAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYykpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLCBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLAorCQkJCSAgICAgICAxLCAmcmVmX3RyZWUsICZyZWZfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCisJcmV0ID0gb2NmczJfZHVwbGljYXRlX2V4dGVudF9saXN0KHNfaW5vZGUsIHRfaW5vZGUsIHRfYmgsCisJCQkJCSAgJnJlZl90cmVlLT5yZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgJmRlYWxsb2MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF91bmxvY2tfcmVmY291bnQ7CisJfQorCisJcmV0ID0gb2NmczJfY29tcGxldGVfcmVmbGluayhzX2lub2RlLCBzX2JoLCB0X2lub2RlLCB0X2JoLCBwcmVzZXJ2ZSk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfdW5sb2NrX3JlZmNvdW50OgorCW9jZnMyX3VubG9ja19yZWZjb3VudF90cmVlKG9zYiwgcmVmX3RyZWUsIDEpOworCWJyZWxzZShyZWZfcm9vdF9iaCk7CitvdXQ6CisJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmRlYWxsb2MpKSB7CisJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOworCQlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmZGVhbGxvYyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX29jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJICAgc3RydWN0IGlub2RlICpuZXdfaW5vZGUsCisJCQkgICBib29sIHByZXNlcnZlKQoreworCWludCByZXQ7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmggPSBOVUxMOworCisJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9hdHRhY2hfcmVmY291bnRfdHJlZShpbm9kZSwgb2xkX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbXV0ZXhfbG9jaygmbmV3X2lub2RlLT5pX211dGV4KTsKKwlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKG5ld19pbm9kZSwgJm5ld19iaCwgMSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jcmVhdGVfcmVmbGlua19ub2RlKGlub2RlLCBvbGRfYmgsCisJCQkJCW5ld19pbm9kZSwgbmV3X2JoLCBwcmVzZXJ2ZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gaW5vZGVfdW5sb2NrOworCX0KKworCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJzKGlub2RlLCBvbGRfYmgsCisJCQkJCSAgIG5ld19pbm9kZSwgbmV3X2JoLAorCQkJCQkgICBwcmVzZXJ2ZSk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJfQoraW5vZGVfdW5sb2NrOgorCW9jZnMyX2lub2RlX3VubG9jayhuZXdfaW5vZGUsIDEpOworCWJyZWxzZShuZXdfYmgpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJm5ld19pbm9kZS0+aV9tdXRleCk7CitvdXQ6CisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBib29sIHByZXNlcnZlKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCA9IE5VTEw7CisJc3RydWN0IGlub2RlICpuZXdfb3JwaGFuX2lub2RlID0gTlVMTDsKKworCWlmICghb2NmczJfcmVmY291bnRfdHJlZShPQ0ZTMl9TQihpbm9kZS0+aV9zYikpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnJvciA9IG9jZnMyX2NyZWF0ZV9pbm9kZV9pbl9vcnBoYW4oZGlyLCBpbm9kZS0+aV9tb2RlLAorCQkJCQkgICAgICZuZXdfb3JwaGFuX2lub2RlKTsKKwlpZiAoZXJyb3IpIHsKKwkJbWxvZ19lcnJubyhlcnJvcik7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gb2NmczJfaW5vZGVfbG9jayhpbm9kZSwgJm9sZF9iaCwgMSk7CisJaWYgKGVycm9yKSB7CisJCW1sb2dfZXJybm8oZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfeGF0dHJfc2VtKTsKKwlkb3duX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwllcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsCisJCQkJbmV3X29ycGhhbl9pbm9kZSwgcHJlc2VydmUpOworCXVwX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwl1cF93cml0ZSgmT0NGUzJfSShpbm9kZSktPmlwX3hhdHRyX3NlbSk7CisKKwlvY2ZzMl9pbm9kZV91bmxvY2soaW5vZGUsIDEpOworCWJyZWxzZShvbGRfYmgpOworCisJaWYgKGVycm9yKSB7CisJCW1sb2dfZXJybm8oZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJZiB0aGUgc2VjdXJpdHkgaXNuJ3QgcHJlc2VydmVkLCB3ZSBuZWVkIHRvIHJlLWluaXRpYWxpemUgdGhlbS4gKi8KKwlpZiAoIXByZXNlcnZlKSB7CisJCWVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSk7CisJCWlmIChlcnJvcikKKwkJCW1sb2dfZXJybm8oZXJyb3IpOworCX0KK291dDoKKwlpZiAoIWVycm9yKSB7CisJCWVycm9yID0gb2NmczJfbXZfb3JwaGFuZWRfaW5vZGVfdG9fbmV3KGRpciwgbmV3X29ycGhhbl9pbm9kZSwKKwkJCQkJCSAgICAgICBuZXdfZGVudHJ5KTsKKwkJaWYgKGVycm9yKQorCQkJbWxvZ19lcnJubyhlcnJvcik7CisJfQorCisJaWYgKG5ld19vcnBoYW5faW5vZGUpIHsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBvcGVuX3VubG9jayB0aGUgaW5vZGUgbm8gbWF0dGVyIHdoZXRoZXIgd2UKKwkJICogc3VjY2VlZCBvciBub3QsIHNvIHRoYXQgb3RoZXIgbm9kZXMgY2FuIGRlbGV0ZSBpdCBsYXRlci4KKwkJICovCisJCW9jZnMyX29wZW5fdW5sb2NrKG5ld19vcnBoYW5faW5vZGUpOworCQlpZiAoZXJyb3IpCisJCQlpcHV0KG5ld19vcnBoYW5faW5vZGUpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIEJlbG93IGhlcmUgYXJlIHRoZSBiaXRzIHVzZWQgYnkgT0NGUzJfSU9DX1JFRkxJTksoKSB0byBmYWtlCisgKiBzeXNfcmVmbGluaygpLiAgVGhpcyB3aWxsIGdvIGF3YXkgd2hlbiB2ZnNfcmVmbGluaygpIGV4aXN0cyBpbgorICogZnMvbmFtZWkuYy4KKyAqLworCisvKiBjb3BpZWQgZnJvbSBtYXlfY3JlYXRlIGluIFZGUy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21heV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmNoaWxkKQoreworCWlmIChjaGlsZC0+ZF9pbm9kZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisJaWYgKElTX0RFQURESVIoZGlyKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGlub2RlX3Blcm1pc3Npb24oZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7Cit9CisKKy8qIGNvcGllZCBmcm9tIHVzZXJfcGF0aF9wYXJlbnQuICovCitzdGF0aWMgaW50IG9jZnMyX3VzZXJfcGF0aF9wYXJlbnQoY29uc3QgY2hhciBfX3VzZXIgKnBhdGgsCisJCQkJICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY2hhciAqKm5hbWUpCit7CisJY2hhciAqcyA9IGdldG5hbWUocGF0aCk7CisJaW50IGVycm9yOworCisJaWYgKElTX0VSUihzKSkKKwkJcmV0dXJuIFBUUl9FUlIocyk7CisKKwllcnJvciA9IHBhdGhfbG9va3VwKHMsIExPT0tVUF9QQVJFTlQsIG5kKTsKKwlpZiAoZXJyb3IpCisJCXB1dG5hbWUocyk7CisJZWxzZQorCQkqbmFtZSA9IHM7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogb2NmczJfdmZzX3JlZmxpbmsgLSBDcmVhdGUgYSByZWZlcmVuY2UtY291bnRlZCBsaW5rCisgKgorICogQG9sZF9kZW50cnk6ICAgICAgICBzb3VyY2UgZGVudHJ5ICsgaW5vZGUKKyAqIEBkaXI6ICAgICAgIGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHRhcmdldAorICogQG5ld19kZW50cnk6ICAgICAgICB0YXJnZXQgZGVudHJ5CisgKiBAcHJlc2VydmU6ICBpZiB0cnVlLCBwcmVzZXJ2ZSBhbGwgZmlsZSBhdHRyaWJ1dGVzCisgKi8KK2ludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWVycm9yID0gb2NmczJfbWF5X2NyZWF0ZShkaXIsIG5ld19kZW50cnkpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGRpci0+aV9zYiAhPSBpbm9kZS0+aV9zYikKKwkJcmV0dXJuIC1FWERFVjsKKworCS8qCisJICogQSByZWZsaW5rIHRvIGFuIGFwcGVuZC1vbmx5IG9yIGltbXV0YWJsZSBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkLgorCSAqLworCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBPbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGJlIHJlZmxpbmtlZC4gKi8KKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAtRVBFUk07CisKKwkvKgorCSAqIElmIHRoZSBjYWxsZXIgd2FudHMgdG8gcHJlc2VydmUgb3duZXJzaGlwLCB0aGV5IHJlcXVpcmUgdGhlCisJICogcmlnaHRzIHRvIGRvIHNvLgorCSAqLworCWlmIChwcmVzZXJ2ZSkgeworCQlpZiAoKGN1cnJlbnRfZnN1aWQoKSAhPSBpbm9kZS0+aV91aWQpICYmICFjYXBhYmxlKENBUF9DSE9XTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlpZiAoIWluX2dyb3VwX3AoaW5vZGUtPmlfZ2lkKSAmJiAhY2FwYWJsZShDQVBfQ0hPV04pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBjYWxsZXIgaXMgbW9kaWZ5aW5nIGFueSBhc3BlY3Qgb2YgdGhlIGF0dHJpYnV0ZXMsIHRoZXkKKwkgKiBhcmUgbm90IGNyZWF0aW5nIGEgc25hcHNob3QuICBUaGV5IG5lZWQgcmVhZCBwZXJtaXNzaW9uIG9uIHRoZQorCSAqIGZpbGUuCisJICovCisJaWYgKCFwcmVzZXJ2ZSkgeworCQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9SRUFEKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwl2ZnNfZHFfaW5pdChkaXIpOworCWVycm9yID0gb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnksIHByZXNlcnZlKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAoIWVycm9yKQorCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBuZXdfZGVudHJ5KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisvKgorICogTW9zdCBjb2RlcyBhcmUgY29waWVkIGZyb20gc3lzX2xpbmthdC4KKyAqLworaW50IG9jZnMyX3JlZmxpbmtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCWNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLAorCQkJY29uc3QgY2hhciBfX3VzZXIgKm5ld25hbWUsCisJCQlib29sIHByZXNlcnZlKQoreworCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnk7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBvbGRfcGF0aDsKKwlpbnQgZXJyb3I7CisJY2hhciAqdG8gPSBOVUxMOworCisJaWYgKCFvY2ZzMl9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVycm9yID0gdXNlcl9wYXRoX2F0KEFUX0ZEQ1dELCBvbGRuYW1lLCAwLCAmb2xkX3BhdGgpOworCWlmIChlcnJvcikgeworCQltbG9nX2Vycm5vKGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gb2NmczJfdXNlcl9wYXRoX3BhcmVudChuZXduYW1lLCAmbmQsICZ0byk7CisJaWYgKGVycm9yKSB7CisJCW1sb2dfZXJybm8oZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnJvciA9IC1FWERFVjsKKwlpZiAob2xkX3BhdGgubW50ICE9IG5kLnBhdGgubW50KQorCQlnb3RvIG91dF9yZWxlYXNlOworCW5ld19kZW50cnkgPSBsb29rdXBfY3JlYXRlKCZuZCwgMCk7CisJZXJyb3IgPSBQVFJfRVJSKG5ld19kZW50cnkpOworCWlmIChJU19FUlIobmV3X2RlbnRyeSkpIHsKKwkJbWxvZ19lcnJubyhlcnJvcik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoZXJyb3IpIHsKKwkJbWxvZ19lcnJubyhlcnJvcik7CisJCWdvdG8gb3V0X2RwdXQ7CisJfQorCisJZXJyb3IgPSBvY2ZzMl92ZnNfcmVmbGluayhvbGRfcGF0aC5kZW50cnksCisJCQkJICBuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKKwkJCQkgIG5ld19kZW50cnksIHByZXNlcnZlKTsKKwltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CitvdXRfZHB1dDoKKwlkcHV0KG5ld19kZW50cnkpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJm5kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKK291dF9yZWxlYXNlOgorCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlwdXRuYW1lKHRvKTsKK291dDoKKwlwYXRoX3B1dCgmb2xkX3BhdGgpOworCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmggYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQxOWIxCi0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiByZWZjb3VudHRyZWUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBPQ0ZTMl9SRUZDT1VOVFRSRUVfSAorI2RlZmluZSBPQ0ZTMl9SRUZDT1VOVFRSRUVfSAorCitzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSB7CisJc3RydWN0IHJiX25vZGUgcmZfbm9kZTsKKwl1NjQgcmZfYmxrbm87CisJdTMyIHJmX2dlbmVyYXRpb247CisJc3RydWN0IHJ3X3NlbWFwaG9yZSByZl9zZW07CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzIHJmX2xvY2tyZXM7CisJc3RydWN0IGtyZWYgcmZfZ2V0Y250OworCWludCByZl9yZW1vdmVkOworCisJLyogdGhlIGZvbGxvd2luZyA0IGZpZWxkcyBhcmUgdXNlZCBieSBjYWNoaW5nX2luZm8uICovCisJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyByZl9jaTsKKwlzcGlubG9ja190IHJmX2xvY2s7CisJc3RydWN0IG11dGV4IHJmX2lvX211dGV4OworCXN0cnVjdCBzdXBlcl9ibG9jayAqcmZfc2I7Cit9OworCit2b2lkIG9jZnMyX3B1cmdlX3JlZmNvdW50X3RyZWVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKK2ludCBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCByZWZfYmxrbm8sIGludCBydywKKwkJCSAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKip0cmVlLAorCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZWZfYmgpOwordm9pZCBvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSwKKwkJCQlpbnQgcncpOworCitpbnQgb2NmczJfZGVjcmVhc2VfcmVmY291bnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBoYW5kbGVfdCAqaGFuZGxlLCB1MzIgY3BvcywgdTMyIGxlbiwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKKwkJCSAgICBpbnQgZGVsZXRlKTsKK2ludCBvY2ZzMl9wcmVwYXJlX3JlZmNvdW50X2NoYW5nZV9mb3JfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkJICB1NjQgcGh5c19ibGtubywKKwkJCQkJICB1MzIgY2x1c3RlcnMsCisJCQkJCSAgaW50ICpjcmVkaXRzLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYyk7CitpbnQgb2NmczJfcmVmY291bnRfY293KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCSAgICAgICB1MzIgY3BvcywgdTMyIHdyaXRlX2xlbiwgdTMyIG1heF9jcG9zKTsKKwordHlwZWRlZiBpbnQgKG9jZnMyX3Bvc3RfcmVmY291bnRfZnVuYykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICAgdm9pZCAqcGFyYSk7CisvKgorICogU29tZSByZWZjb3VudCBjYWxsZXIgbmVlZCB0byBkbyBtb3JlIHdvcmsgYWZ0ZXIgd2UgbW9kaWZ5IHRoZSBkYXRhIGItdHJlZQorICogZHVyaW5nIHJlZmNvdW50IG9wZXJhdGlvbihpbmNsdWRpbmcgQ29XIGFuZCBhZGQgcmVmY291bnQgZmxhZyksIGFuZCBtYWtlIHRoZQorICogdHJhbnNhY3Rpb24gY29tcGxldGUuIFNvIGl0IG11c3QgZ2l2ZSB1cyB0aGlzIHN0cnVjdHVyZSBzbyB0aGF0IHdlIGNhbiBkbyBpdAorICogd2l0aGluIG91ciB0cmFuc2FjdGlvbi4KKyAqCisgKi8KK3N0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50IHsKKwlpbnQgY3JlZGl0czsJCQkvKiBjcmVkaXRzIGl0IG5lZWQgZm9yIGpvdXJuYWwuICovCisJb2NmczJfcG9zdF9yZWZjb3VudF9mdW5jICpmdW5jOwkvKiByZWFsIGZ1bmN0aW9uLiAqLworCXZvaWQgKnBhcmE7Cit9OworCitpbnQgb2NmczJfcmVmY291bnRlZF94YXR0cl9kZWxldGVfbmVlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkgICAgICAgaW50ICptZXRhX2FkZCwgaW50ICpjcmVkaXRzKTsKK2ludCBvY2ZzMl9yZWZjb3VudF9jb3dfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWUsCisJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkgICAgIHUzMiBjcG9zLCB1MzIgd3JpdGVfbGVuLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfcG9zdF9yZWZjb3VudCAqcG9zdCk7CitpbnQgb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmRhdGFfZXQsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkgICAgdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsIHUzMiBudW1fY2x1c3RlcnMsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgc3RydWN0IG9jZnMyX3Bvc3RfcmVmY291bnQgKnBvc3QpOworaW50IG9jZnMyX3JlbW92ZV9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpOworaW50IG9jZnMyX3RyeV9yZW1vdmVfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpOworaW50IG9jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCSAgICB1NjQgY3BvcywgdTMyIGxlbiwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7CitpbnQgb2NmczJfcmVmbGlua19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJY29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsCisJCQljb25zdCBjaGFyIF9fdXNlciAqbmV3bmFtZSwKKwkJCWJvb2wgcHJlc2VydmUpOworI2VuZGlmIC8qIE9DRlMyX1JFRkNPVU5UVFJFRV9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZXNpemUuYyBiL2ZzL29jZnMyL3Jlc2l6ZS5jCmluZGV4IDQyNGFkYWEuLjNjM2Q2NzMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3Jlc2l6ZS5jCisrKyBiL2ZzL29jZnMyL3Jlc2l6ZS5jCkBAIC0xMDYsOCArMTA2LDggQEAKIAltbG9nX2VudHJ5KCIobmV3X2NsdXN0ZXJzPSVkLCBmaXJzdF9uZXdfY2x1c3RlciA9ICV1KVxuIiwKIAkJICAgbmV3X2NsdXN0ZXJzLCBmaXJzdF9uZXdfY2x1c3Rlcik7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIGJtX2lub2RlLCBncm91cF9iaCwKLQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBJTk9ERV9DQUNIRShibV9pbm9kZSksCisJCQkJICAgICAgZ3JvdXBfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJfQogCiAJLyogdXBkYXRlIHRoZSBpbm9kZSBhY2NvcmRpbmdseS4gKi8KLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGJtX2lub2RlLCBibV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGJtX2lub2RlKSwgYm1fYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTUxNCw3ICs1MTQsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGdyb3VwX2JoKTsKKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShpbm9kZSksIGdyb3VwX2JoKTsKIAogCXJldCA9IG9jZnMyX3ZlcmlmeV9ncm91cF9hbmRfaW5wdXQobWFpbl9ibV9pbm9kZSwgZmUsIGlucHV0LCBncm91cF9iaCk7CiAJaWYgKHJldCkgewpAQCAtNTM2LDggKzUzNiw4IEBACiAJY2wgPSAmZmUtPmlkMi5pX2NoYWluOwogCWNyID0gJmNsLT5jbF9yZWNzW2lucHV0LT5jaGFpbl07CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIG1haW5fYm1faW5vZGUsIGdyb3VwX2JoLAotCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIElOT0RFX0NBQ0hFKG1haW5fYm1faW5vZGUpLAorCQkJCSAgICAgIGdyb3VwX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dF9jb21taXQ7CkBAIC01NTIsOCArNTUyLDggQEAKIAkJZ290byBvdXRfY29tbWl0OwogCX0KIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgbWFpbl9ibV9pbm9kZSwgbWFpbl9ibV9iaCwKLQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShtYWluX2JtX2lub2RlKSwKKwkJCQkgICAgICBtYWluX2JtX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dF9jb21taXQ7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zbG90X21hcC5jIGIvZnMvb2NmczIvc2xvdF9tYXAuYwppbmRleCA0MDY2MWU3Li5iZmJkN2U5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zbG90X21hcC5jCisrKyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmMKQEAgLTE1MCw4ICsxNTAsOCBAQAogCSAqIGJlICFOVUxMLiAgVGh1cywgb2NmczJfcmVhZF9ibG9ja3MoKSB3aWxsIGlnbm9yZSBibG9ja25yLiAgSWYKIAkgKiB0aGlzIGlzIG5vdCB0cnVlLCB0aGUgcmVhZCBvZiAtMSAoVUlOVDY0X01BWCkgd2lsbCBmYWlsLgogCSAqLwotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKHNpLT5zaV9pbm9kZSwgLTEsIHNpLT5zaV9ibG9ja3MsIHNpLT5zaV9iaCwKLQkJCQlPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUsIE5VTEwpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKHNpLT5zaV9pbm9kZSksIC0xLCBzaS0+c2lfYmxvY2tzLAorCQkJCXNpLT5zaV9iaCwgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFLCBOVUxMKTsKIAlpZiAocmV0ID09IDApIHsKIAkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAkJb2NmczJfdXBkYXRlX3Nsb3RfaW5mbyhzaSk7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJb2NmczJfdXBkYXRlX2Rpc2tfc2xvdF9vbGQoc2ksIHNsb3RfbnVtLCAmYmgpOwogCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAotCXN0YXR1cyA9IG9jZnMyX3dyaXRlX2Jsb2NrKG9zYiwgYmgsIHNpLT5zaV9pbm9kZSk7CisJc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCBiaCwgSU5PREVfQ0FDSEUoc2ktPnNpX2lub2RlKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIApAQCAtNDA0LDggKzQwNCw4IEBACiAJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubyk7CiAKIAkJYmggPSBOVUxMOyAgLyogQWNxdWlyZSBhIGZyZXNoIGJoICovCi0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKHNpLT5zaV9pbm9kZSwgYmxrbm8sIDEsICZiaCwKLQkJCQkJICAgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFLCBOVUxMKTsKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoSU5PREVfQ0FDSEUoc2ktPnNpX2lub2RlKSwgYmxrbm8sCisJCQkJCSAgIDEsICZiaCwgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFLCBOVUxMKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1YmFsbG9jLmMgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCmluZGV4IDczYTE2ZDQuLmMzMGI2NDQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1YmFsbG9jLmMKKysrIGIvZnMvb2NmczIvc3ViYWxsb2MuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJaW50IHJjOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmJoOwogCi0JcmMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBnZF9ibGtubywgJnRtcCwKKwlyYyA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoaW5vZGUpLCBnZF9ibGtubywgJnRtcCwKIAkJCSAgICAgIG9jZnMyX3ZhbGlkYXRlX2dyb3VwX2Rlc2NyaXB0b3IpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CkBAIC0zNTIsNyArMzUyLDcgQEAKIAl9CiAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsCi0JCQkJCSBhbGxvY19pbm9kZSwKKwkJCQkJIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKIAkJCQkJIGJnX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KLQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShhbGxvY19pbm9kZSwgYmdfYmgpOworCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwgYmdfYmgpOwogCiAJc3RhdHVzID0gb2NmczJfYmxvY2tfZ3JvdXBfZmlsbChoYW5kbGUsCiAJCQkJCWFsbG9jX2lub2RlLApAQCAtNDkxLDcgKzQ5MSw3IEBACiAKIAliZyA9IChzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqKSBiZ19iaC0+Yl9kYXRhOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBhbGxvY19pbm9kZSwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKIAkJCQkJIGJoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTAzMyw3ICsxMDMzLDcgQEAKIAkJam91cm5hbF90eXBlID0gT0NGUzJfSk9VUk5BTF9BQ0NFU1NfVU5ETzsKIAogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2dkKGhhbmRsZSwKLQkJCQkJIGFsbG9jX2lub2RlLAorCQkJCQkgSU5PREVfQ0FDSEUoYWxsb2NfaW5vZGUpLAogCQkJCQkgZ3JvdXBfYmgsCiAJCQkJCSBqb3VybmFsX3R5cGUpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xMTA2LDcgKzExMDYsOCBAQAogCWJnX3B0ciA9IGxlNjRfdG9fY3B1KGJnLT5iZ19uZXh0X2dyb3VwKTsKIAlwcmV2X2JnX3B0ciA9IGxlNjRfdG9fY3B1KHByZXZfYmctPmJnX25leHRfZ3JvdXApOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBhbGxvY19pbm9kZSwgcHJldl9iZ19iaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKKwkJCQkJIHByZXZfYmdfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTEyMSw4ICsxMTIyLDggQEAKIAkJZ290byBvdXRfcm9sbGJhY2s7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBhbGxvY19pbm9kZSwgYmdfYmgsCi0JCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBJTk9ERV9DQUNIRShhbGxvY19pbm9kZSksCisJCQkJCSBiZ19iaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBvdXRfcm9sbGJhY2s7CkBAIC0xMTM2LDggKzExMzcsOCBAQAogCQlnb3RvIG91dF9yb2xsYmFjazsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGFsbG9jX2lub2RlLCBmZV9iaCwKLQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKKwkJCQkJIGZlX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIG91dF9yb2xsYmFjazsKQEAgLTEyODgsNyArMTI4OSw3IEBACiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBkaV9iaC0+Yl9kYXRhOwogCXN0cnVjdCBvY2ZzMl9jaGFpbl9saXN0ICpjbCA9IChzdHJ1Y3Qgb2NmczJfY2hhaW5fbGlzdCAqKSAmZGktPmlkMi5pX2NoYWluOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xNDYxLDcgKzE0NjIsNyBAQAogCS8qIE9rLCBjbGFpbSBvdXIgYml0cyBub3c6IHNldCB0aGUgaW5mbyBvbiBkaW5vZGUsIGNoYWlubGlzdAogCSAqIGFuZCB0aGVuIHRoZSBncm91cCAqLwogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwKLQkJCQkJIGFsbG9jX2lub2RlLAorCQkJCQkgSU5PREVfQ0FDSEUoYWxsb2NfaW5vZGUpLAogCQkJCQkgYWMtPmFjX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xOTA3LDggKzE5MDgsOCBAQAogCWlmIChvY2ZzMl9pc19jbHVzdGVyX2JpdG1hcChhbGxvY19pbm9kZSkpCiAJCWpvdXJuYWxfdHlwZSA9IE9DRlMyX0pPVVJOQUxfQUNDRVNTX1VORE87CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIGFsbG9jX2lub2RlLCBncm91cF9iaCwKLQkJCQkJIGpvdXJuYWxfdHlwZSk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBJTk9ERV9DQUNIRShhbGxvY19pbm9kZSksCisJCQkJCSBncm91cF9iaCwgam91cm5hbF90eXBlKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTE5OTMsOCArMTk5NCw4IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGFsbG9jX2lub2RlLCBhbGxvY19iaCwKLQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKKwkJCQkJIGFsbG9jX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0yMTUxLDcgKzIxNTIsNyBAQAogCiAJQlVHX09OKGNsdXN0ZXJzX3RvX2FkZCAhPSAwICYmIGRhdGFfYWMgPT0gTlVMTCk7CiAKLQludW1fZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGlub2RlLCBldCk7CisJbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBldCk7CiAJaWYgKG51bV9mcmVlX2V4dGVudHMgPCAwKSB7CiAJCXJldCA9IG51bV9mcmVlX2V4dGVudHM7CiAJCW1sb2dfZXJybm8ocmV0KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IGEzZjg4NzEuLjI0ZmViNDQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgInZlci5oIgogI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKKyNpbmNsdWRlICJyZWZjb3VudHRyZWUuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTk2NSw3ICs5NjYsNyBAQAogCXJldHVybiB2ZnNfcXVvdGFfZGlzYWJsZShzYiwgdHlwZSwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwogfQogCi1zdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyBvY2ZzMl9xdW90YWN0bF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBvY2ZzMl9xdW90YWN0bF9vcHMgPSB7CiAJLnF1b3RhX29uCT0gb2NmczJfcXVvdGFfb24sCiAJLnF1b3RhX29mZgk9IG9jZnMyX3F1b3RhX29mZiwKIAkucXVvdGFfc3luYwk9IHZmc19xdW90YV9zeW5jLApAQCAtMTY2OCw4ICsxNjY5LDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmb2ktPmlwX2xvY2spOwogCW9jZnMyX2V4dGVudF9tYXBfaW5pdCgmb2ktPnZmc19pbm9kZSk7CiAJSU5JVF9MSVNUX0hFQUQoJm9pLT5pcF9pb19tYXJrZXJzKTsKLQlvaS0+aXBfY3JlYXRlZF90cmFucyA9IDA7Ci0Jb2ktPmlwX2xhc3RfdHJhbnMgPSAwOwogCW9pLT5pcF9kaXJfc3RhcnRfbG9va3VwID0gMDsKIAogCWluaXRfcndzZW0oJm9pLT5pcF9hbGxvY19zZW0pOwpAQCAtMTY4Myw3ICsxNjgyLDggQEAKIAlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UoJm9pLT5pcF9pbm9kZV9sb2NrcmVzKTsKIAlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UoJm9pLT5pcF9vcGVuX2xvY2tyZXMpOwogCi0Jb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdCgmb2ktPnZmc19pbm9kZSk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdChJTk9ERV9DQUNIRSgmb2ktPnZmc19pbm9kZSksCisJCQkJICAmb2NmczJfaW5vZGVfY2FjaGluZ19vcHMpOwogCiAJaW5vZGVfaW5pdF9vbmNlKCZvaS0+dmZzX2lub2RlKTsKIH0KQEAgLTE4NTksNiArMTg1OSw4IEBACiAKIAlvY2ZzMl9zeW5jX2Jsb2NrZGV2KHNiKTsKIAorCW9jZnMyX3B1cmdlX3JlZmNvdW50X3RyZWVzKG9zYik7CisKIAkvKiBObyBjbHVzdGVyIGNvbm5lY3Rpb24gbWVhbnMgd2UndmUgZmFpbGVkIGR1cmluZyBtb3VudCwgc28gc2tpcAogCSAqIGFsbCB0aGUgc3RlcHMgd2hpY2ggZGVwZW5kZWQgb24gdGhhdCB0byBjb21wbGV0ZS4gKi8KIAlpZiAob3NiLT5jY29ubikgewpAQCAtMjA2NSw2ICsyMDY3LDggQEAKIAkJZ290byBiYWlsOwogCX0KIAorCW9zYi0+b3NiX3JmX2xvY2tfdHJlZSA9IFJCX1JPT1Q7CisKIAlvc2ItPnNfZmVhdHVyZV9jb21wYXQgPQogCQlsZTMyX3RvX2NwdShPQ0ZTMl9SQVdfU0IoZGkpLT5zX2ZlYXR1cmVfY29tcGF0KTsKIAlvc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgPQpAQCAtMjQ5MCw3ICsyNDk0LDggQEAKIAkvKiBGb3JjZSBhIHBhbmljKCkuIFRoaXMgc3RpbmtzLCBidXQgaXQncyBiZXR0ZXIgdGhhbiBsZXR0aW5nCiAJICogdGhpbmdzIGNvbnRpbnVlIHdpdGhvdXQgaGF2aW5nIGEgcHJvcGVyIGhhcmQgcmVhZG9ubHkKIAkgKiBoZXJlLiAqLwotCU9DRlMyX1NCKHNiKS0+c19tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfRVJST1JTX1BBTklDOworCWlmICghb2NmczJfbW91bnRfbG9jYWwoT0NGUzJfU0Ioc2IpKSkKKwkJT0NGUzJfU0Ioc2IpLT5zX21vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9FUlJPUlNfUEFOSUM7CiAJb2NmczJfaGFuZGxlX2Vycm9yKHNiKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvdXB0b2RhdGUuYyBiL2ZzL29jZnMyL3VwdG9kYXRlLmMKaW5kZXggMTg3Yjk5Zi4uYjYyODRmMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvdXB0b2RhdGUuYworKysgYi9mcy9vY2ZzMi91cHRvZGF0ZS5jCkBAIC03NSwxNSArNzUsNzcgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpvY2ZzMl91cHRvZGF0ZV9jYWNoZXAgPSBOVUxMOwogCi12b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX2luaXQoc3RydWN0IGlub2RlICppbm9kZSkKK3U2NCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKIHsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CisJQlVHX09OKCFjaSB8fCAhY2ktPmNpX29wcyk7CiAKLQlvaS0+aXBfZmxhZ3MgfD0gT0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FOwotCWNpLT5jaV9udW1fY2FjaGVkID0gMDsKKwlyZXR1cm4gY2ktPmNpX29wcy0+Y29fb3duZXIoY2kpOwogfQogCitzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCXJldHVybiBjaS0+Y2lfb3BzLT5jb19nZXRfc3VwZXIoY2kpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCUJVR19PTighY2kgfHwgIWNpLT5jaV9vcHMpOworCisJY2ktPmNpX29wcy0+Y29fY2FjaGVfbG9jayhjaSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCWNpLT5jaV9vcHMtPmNvX2NhY2hlX3VubG9jayhjaSk7Cit9CisKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCWNpLT5jaV9vcHMtPmNvX2lvX2xvY2soY2kpOworfQorCit2b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCWNpLT5jaV9vcHMtPmNvX2lvX3VubG9jayhjaSk7Cit9CisKKworc3RhdGljIHZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfcmVzZXQoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJICAgICAgIGludCBjbGVhcikKK3sKKwljaS0+Y2lfZmxhZ3MgfD0gT0NGUzJfQ0FDSEVfRkxfSU5MSU5FOworCWNpLT5jaV9udW1fY2FjaGVkID0gMDsKKworCWlmIChjbGVhcikgeworCQljaS0+Y2lfY3JlYXRlZF90cmFucyA9IDA7CisJCWNpLT5jaV9sYXN0X3RyYW5zID0gMDsKKwl9Cit9CisKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zICpvcHMpCit7CisJQlVHX09OKCFvcHMpOworCisJY2ktPmNpX29wcyA9IG9wczsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9yZXNldChjaSwgMSk7Cit9CisKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfZXhpdChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShjaSk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfcmVzZXQoY2ksIDEpOworfQorCisKIC8qIE5vIGxvY2sgdGFrZW4gaGVyZSBhcyAncm9vdCcgaXMgbm90IGV4cGVjdGVkIHRvIGJlIHZpc2libGUgdG8gb3RoZXIKICAqIHByb2Nlc3Nlcy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2NmczJfcHVyZ2VfY29waWVkX21ldGFkYXRhX3RyZWUoc3RydWN0IHJiX3Jvb3QgKnJvb3QpCkBAIC0xMTIsMTkgKzE3NCwyMCBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBhIGZldyBtb3JlIGxpbmVzIGxvbmdlciB0aGFuIG5lY2Vzc2FyeSBkdWUgdG8gc29tZQogICogYWNjb3VudGluZyBkb25lIGhlcmUsIGJ1dCBJIHRoaW5rIGl0J3Mgd29ydGggdHJhY2tpbmcgZG93biB0aG9zZQogICogYnVncyBzb29uZXIgLS0gTWFyayAqLwotdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQordm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKIHsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKIAl1bnNpZ25lZCBpbnQgdHJlZSwgdG9fcHVyZ2UsIHB1cmdlZDsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CiAJc3RydWN0IHJiX3Jvb3Qgcm9vdCA9IFJCX1JPT1Q7CiAKLQlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKLQl0cmVlID0gIShvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpOworCUJVR19PTighY2kgfHwgIWNpLT5jaV9vcHMpOworCisJb2NmczJfbWV0YWRhdGFfY2FjaGVfbG9jayhjaSk7CisJdHJlZSA9ICEoY2ktPmNpX2ZsYWdzICYgT0NGUzJfQ0FDSEVfRkxfSU5MSU5FKTsKIAl0b19wdXJnZSA9IGNpLT5jaV9udW1fY2FjaGVkOwogCi0JbWxvZygwLCAiUHVyZ2UgJXUgJXMgaXRlbXMgZnJvbSBJbm9kZSAlbGx1XG4iLCB0b19wdXJnZSwKLQkgICAgIHRyZWUgPyAiYXJyYXkiIDogInRyZWUiLCAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubyk7CisJbWxvZygwLCAiUHVyZ2UgJXUgJXMgaXRlbXMgZnJvbSBPd25lciAlbGx1XG4iLCB0b19wdXJnZSwKKwkgICAgIHRyZWUgPyAiYXJyYXkiIDogInRyZWUiLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSkpOwogCiAJLyogSWYgd2UncmUgYSB0cmVlLCBzYXZlIG9mZiB0aGUgcm9vdCBzbyB0aGF0IHdlIGNhbiBzYWZlbHkKIAkgKiBpbml0aWFsaXplIHRoZSBjYWNoZS4gV2UgZG8gdGhlIHdvcmsgdG8gZnJlZSB0cmVlIG1lbWJlcnMKQEAgLTEzMiwxNiArMTk1LDE3IEBACiAJaWYgKHRyZWUpCiAJCXJvb3QgPSBjaS0+Y2lfY2FjaGUuY2lfdHJlZTsKIAotCW9jZnMyX21ldGFkYXRhX2NhY2hlX2luaXQoaW5vZGUpOwotCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfcmVzZXQoY2ksIDApOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAKIAlwdXJnZWQgPSBvY2ZzMl9wdXJnZV9jb3BpZWRfbWV0YWRhdGFfdHJlZSgmcm9vdCk7CiAJLyogSWYgcG9zc2libGUsIHRyYWNrIHRoZSBudW1iZXIgd2lwZWQgc28gdGhhdCB3ZSBjYW4gbW9yZQogCSAqIGVhc2lseSBkZXRlY3QgY291bnRpbmcgZXJyb3JzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG9ubHkKIAkgKiBtZWFuaW5nZnVsIGZvciB0cmVlcy4gKi8KIAlpZiAodHJlZSAmJiBwdXJnZWQgIT0gdG9fcHVyZ2UpCi0JCW1sb2coTUxfRVJST1IsICJJbm9kZSAlbGx1LCBjb3VudCA9ICV1LCBwdXJnZWQgPSAldVxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywgdG9fcHVyZ2UsIHB1cmdlZCk7CisJCW1sb2coTUxfRVJST1IsICJPd25lciAlbGx1LCBjb3VudCA9ICV1LCBwdXJnZWQgPSAldVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKKwkJICAgICB0b19wdXJnZSwgcHVyZ2VkKTsKIH0KIAogLyogUmV0dXJucyB0aGUgaW5kZXggaW4gdGhlIGNhY2hlIGFycmF5LCAtMSBpZiBub3QgZm91bmQuCkBAIC0xODIsMjcgKzI0NiwyNSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2J1ZmZlcl9jYWNoZWQoc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pLAorc3RhdGljIGludCBvY2ZzMl9idWZmZXJfY2FjaGVkKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJaW50IGluZGV4ID0gLTE7CiAJc3RydWN0IG9jZnMyX21ldGFfY2FjaGVfaXRlbSAqaXRlbSA9IE5VTEw7CiAKLQlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKGNpKTsKIAotCW1sb2coMCwgIklub2RlICVsbHUsIHF1ZXJ5IGJsb2NrICVsbHUgKGlubGluZSA9ICV1KVxuIiwKLQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2ktPmlwX2Jsa25vLAorCW1sb2coMCwgIk93bmVyICVsbHUsIHF1ZXJ5IGJsb2NrICVsbHUgKGlubGluZSA9ICV1KVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmgtPmJfYmxvY2tuciwKLQkgICAgICEhKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSkpOworCSAgICAgISEoY2ktPmNpX2ZsYWdzICYgT0NGUzJfQ0FDSEVfRkxfSU5MSU5FKSk7CiAKLQlpZiAob2ktPmlwX2ZsYWdzICYgT0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FKQotCQlpbmRleCA9IG9jZnMyX3NlYXJjaF9jYWNoZV9hcnJheSgmb2ktPmlwX21ldGFkYXRhX2NhY2hlLAotCQkJCQkJIGJoLT5iX2Jsb2NrbnIpOworCWlmIChjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpCisJCWluZGV4ID0gb2NmczJfc2VhcmNoX2NhY2hlX2FycmF5KGNpLCBiaC0+Yl9ibG9ja25yKTsKIAllbHNlCi0JCWl0ZW0gPSBvY2ZzMl9zZWFyY2hfY2FjaGVfdHJlZSgmb2ktPmlwX21ldGFkYXRhX2NhY2hlLAotCQkJCQkgICAgICAgYmgtPmJfYmxvY2tucik7CisJCWl0ZW0gPSBvY2ZzMl9zZWFyY2hfY2FjaGVfdHJlZShjaSwgYmgtPmJfYmxvY2tucik7CiAKLQlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAKIAltbG9nKDAsICJpbmRleCA9ICVkLCBpdGVtID0gJXBcbiIsIGluZGV4LCBpdGVtKTsKIApAQCAtMjE0LDcgKzI3Niw3IEBACiAgKiAKICAqIFRoaXMgY2FuIGJlIGNhbGxlZCB1bmRlciBsb2NrX2J1ZmZlcigpCiAgKi8KLWludCBvY2ZzMl9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJLyogRG9lc24ndCBtYXR0ZXIgaWYgdGhlIGJoIGlzIGluIG91ciBjYWNoZSBvciBub3QgLS0gaWYgaXQncwpAQCAtMjMwLDI0ICsyOTIsMjQgQEAKIAogCS8qIE9rLCBsb2NhbGx5IHRoZSBidWZmZXIgaXMgbWFya2VkIGFzIHVwIHRvIGRhdGUsIG5vdyBzZWFyY2gKIAkgKiBvdXIgY2FjaGUgdG8gc2VlIGlmIHdlIGNhbiB0cnVzdCB0aGF0LiAqLwotCXJldHVybiBvY2ZzMl9idWZmZXJfY2FjaGVkKE9DRlMyX0koaW5vZGUpLCBiaCk7CisJcmV0dXJuIG9jZnMyX2J1ZmZlcl9jYWNoZWQoY2ksIGJoKTsKIH0KIAotLyogCisvKgogICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBidWZmZXIgaXMgY3VycmVudGx5IG91dCBvbiBhIHJlYWQtYWhlYWQgcmVxdWVzdC4KLSAqIGlwX2lvX3NlbSBzaG91bGQgYmUgaGVsZCB0byBzZXJpYWxpemUgc3VibWl0dGVycyB3aXRoIHRoZSBsb2dpYyBoZXJlLgorICogY2lfaW9fc2VtIHNob3VsZCBiZSBoZWxkIHRvIHNlcmlhbGl6ZSBzdWJtaXR0ZXJzIHdpdGggdGhlIGxvZ2ljIGhlcmUuCiAgKi8KLWludCBvY2ZzMl9idWZmZXJfcmVhZF9haGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2J1ZmZlcl9yZWFkX2FoZWFkKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JcmV0dXJuIGJ1ZmZlcl9sb2NrZWQoYmgpICYmIG9jZnMyX2J1ZmZlcl9jYWNoZWQoT0NGUzJfSShpbm9kZSksIGJoKTsKKwlyZXR1cm4gYnVmZmVyX2xvY2tlZChiaCkgJiYgb2NmczJfYnVmZmVyX2NhY2hlZChjaSwgYmgpOwogfQogCiAvKiBSZXF1aXJlcyBpcF9sb2NrICovCiBzdGF0aWMgdm9pZCBvY2ZzMl9hcHBlbmRfY2FjaGVfYXJyYXkoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgICBzZWN0b3JfdCBibG9jaykKIHsKLQlCVUdfT04oY2ktPmNpX251bV9jYWNoZWQgPj0gT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZKTsKKwlCVUdfT04oY2ktPmNpX251bV9jYWNoZWQgPj0gT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkpOwogCiAJbWxvZygwLCAiYmxvY2sgJWxsdSB0YWtlcyBwb3NpdGlvbiAldVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxvY2ssCiAJICAgICBjaS0+Y2lfbnVtX2NhY2hlZCk7CkBAIC0yOTIsNjYgKzM1NCw2NCBAQAogCWNpLT5jaV9udW1fY2FjaGVkKys7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KHN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSwKLQkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKKy8qIGNvX2NhY2hlX2xvY2soKSBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQogewotCWFzc2VydF9zcGluX2xvY2tlZCgmb2ktPmlwX2xvY2spOwotCi0JcmV0dXJuIChvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpICYmCi0JCShjaS0+Y2lfbnVtX2NhY2hlZCA8IE9DRlMyX0lOT0RFX01BWF9DQUNIRV9BUlJBWSk7CisJcmV0dXJuIChjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpICYmCisJCShjaS0+Y2lfbnVtX2NhY2hlZCA8IE9DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZKTsKIH0KIAotLyogdHJlZSBzaG91bGQgYmUgZXhhY3RseSBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVkgd2lkZS4gTlVMTCB0aGUKKy8qIHRyZWUgc2hvdWxkIGJlIGV4YWN0bHkgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkgd2lkZS4gTlVMTCB0aGUKICAqIHBvaW50ZXJzIGluIHRyZWUgYWZ0ZXIgd2UgdXNlIHRoZW0gLSB0aGlzIGFsbG93cyBjYWxsZXIgdG8gZGV0ZWN0Ci0gKiB3aGVuIHRvIGZyZWUgaW4gY2FzZSBvZiBlcnJvci4gKi8KLXN0YXRpYyB2b2lkIG9jZnMyX2V4cGFuZF9jYWNoZShzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2ksCisgKiB3aGVuIHRvIGZyZWUgaW4gY2FzZSBvZiBlcnJvci4KKyAqCisgKiBUaGUgY29fY2FjaGVfbG9jaygpIG11c3QgYmUgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIG9jZnMyX2V4cGFuZF9jYWNoZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfbWV0YV9jYWNoZV9pdGVtICoqdHJlZSkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CiAKLQltbG9nX2J1Z19vbl9tc2coY2ktPmNpX251bV9jYWNoZWQgIT0gT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZLAotCQkJIklub2RlICVsbHUsIG51bSBjYWNoZWQgPSAldSwgc2hvdWxkIGJlICV1XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sIGNpLT5jaV9udW1fY2FjaGVkLAotCQkJT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZKTsKLQltbG9nX2J1Z19vbl9tc2coIShvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpLAotCQkJIklub2RlICVsbHUgbm90IG1hcmtlZCBhcyBpbmxpbmUgYW55bW9yZSFcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubyk7Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZvaS0+aXBfbG9jayk7CisJbWxvZ19idWdfb25fbXNnKGNpLT5jaV9udW1fY2FjaGVkICE9IE9DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZLAorCQkJIk93bmVyICVsbHUsIG51bSBjYWNoZWQgPSAldSwgc2hvdWxkIGJlICV1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCisJCQljaS0+Y2lfbnVtX2NhY2hlZCwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkpOworCW1sb2dfYnVnX29uX21zZyghKGNpLT5jaV9mbGFncyAmIE9DRlMyX0NBQ0hFX0ZMX0lOTElORSksCisJCQkiT3duZXIgJWxsdSBub3QgbWFya2VkIGFzIGlubGluZSBhbnltb3JlIVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpKTsKIAogCS8qIEJlIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZSBtZW1iZXJzICpmaXJzdCogYmVjYXVzZQogCSAqIG9uY2UgdGhlIGNpX3RyZWUgaXMgdXNlZCwgdGhlIGFycmF5IGlzIGp1bmsuLi4gKi8KLQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVk7IGkrKykKIAkJdHJlZVtpXS0+Y19ibG9jayA9IGNpLT5jaV9jYWNoZS5jaV9hcnJheVtpXTsKIAotCW9pLT5pcF9mbGFncyAmPSB+T0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FOworCWNpLT5jaV9mbGFncyAmPSB+T0NGUzJfQ0FDSEVfRkxfSU5MSU5FOwogCWNpLT5jaV9jYWNoZS5jaV90cmVlID0gUkJfUk9PVDsKIAkvKiB0aGlzIHdpbGwgYmUgc2V0IGFnYWluIGJ5IF9fb2NmczJfaW5zZXJ0X2NhY2hlX3RyZWUgKi8KIAljaS0+Y2lfbnVtX2NhY2hlZCA9IDA7CiAKLQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBPQ0ZTMl9DQUNIRV9JTkZPX01BWF9BUlJBWTsgaSsrKSB7CiAJCV9fb2NmczJfaW5zZXJ0X2NhY2hlX3RyZWUoY2ksIHRyZWVbaV0pOwogCQl0cmVlW2ldID0gTlVMTDsKIAl9CiAKIAltbG9nKDAsICJFeHBhbmRlZCAlbGx1IHRvIGEgdHJlZSBjYWNoZTogZmxhZ3MgMHgleCwgbnVtID0gJXVcbiIsCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywgb2ktPmlwX2ZsYWdzLCBjaS0+Y2lfbnVtX2NhY2hlZCk7CisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKKwkgICAgIGNpLT5jaV9mbGFncywgY2ktPmNpX251bV9jYWNoZWQpOwogfQogCiAvKiBTbG93IHBhdGggZnVuY3Rpb24gLSBtZW1vcnkgYWxsb2NhdGlvbiBpcyBuZWNlc3NhcnkuIFNlZSB0aGUKICAqIGNvbW1lbnQgYWJvdmUgb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gKi8KLXN0YXRpYyB2b2lkIF9fb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2ksCitzdGF0aWMgdm9pZCBfX29jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCXNlY3Rvcl90IGJsb2NrLAogCQkJCQlpbnQgZXhwYW5kX3RyZWUpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kgPSAmb2ktPmlwX21ldGFkYXRhX2NhY2hlOwogCXN0cnVjdCBvY2ZzMl9tZXRhX2NhY2hlX2l0ZW0gKm5ldyA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX21ldGFfY2FjaGVfaXRlbSAqdHJlZVtPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVldID0KKwlzdHJ1Y3Qgb2NmczJfbWV0YV9jYWNoZV9pdGVtICp0cmVlW09DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZXSA9CiAJCXsgTlVMTCwgfTsKIAotCW1sb2coMCwgIklub2RlICVsbHUsIGJsb2NrICVsbHUsIGV4cGFuZCA9ICVkXG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJbWxvZygwLCAiT3duZXIgJWxsdSwgYmxvY2sgJWxsdSwgZXhwYW5kID0gJWRcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIGV4cGFuZF90cmVlKTsKIAogCW5ldyA9IGttZW1fY2FjaGVfYWxsb2Mob2NmczJfdXB0b2RhdGVfY2FjaGVwLCBHRlBfTk9GUyk7CkBAIC0zNjQsNyArNDI0LDcgQEAKIAlpZiAoZXhwYW5kX3RyZWUpIHsKIAkJLyogRG8gKm5vdCogYWxsb2NhdGUgYW4gYXJyYXkgaGVyZSAtIHRoZSByZW1vdmFsIGNvZGUKIAkJICogaGFzIG5vIHdheSBvZiB0cmFja2luZyB0aGF0LiAqLwotCQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVk7IGkrKykgewogCQkJdHJlZVtpXSA9IGttZW1fY2FjaGVfYWxsb2Mob2NmczJfdXB0b2RhdGVfY2FjaGVwLAogCQkJCQkJICAgR0ZQX05PRlMpOwogCQkJaWYgKCF0cmVlW2ldKSB7CkBAIC0zNzYsMjEgKzQzNiwyMSBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrKCZvaS0+aXBfbG9jayk7Ci0JaWYgKG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KG9pLCBjaSkpIHsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKGNpKTsKKwlpZiAob2NmczJfaW5zZXJ0X2Nhbl91c2VfYXJyYXkoY2kpKSB7CiAJCW1sb2coMCwgIlNvbWVvbmUgY2xlYXJlZCB0aGUgdHJlZSB1bmRlcm5lYXRoIHVzXG4iKTsKIAkJLyogT2ssIGl0ZW1zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBpbiBiZXR3ZWVuCiAJCSAqIGxvY2tzLiBEZXRlY3QgdGhpcyBhbmQgcmV2ZXJ0IGJhY2sgdG8gdGhlIGZhc3QgcGF0aCAqLwogCQlvY2ZzMl9hcHBlbmRfY2FjaGVfYXJyYXkoY2ksIGJsb2NrKTsKLQkJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKKwkJb2NmczJfbWV0YWRhdGFfY2FjaGVfdW5sb2NrKGNpKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKIAlpZiAoZXhwYW5kX3RyZWUpCi0JCW9jZnMyX2V4cGFuZF9jYWNoZShvaSwgdHJlZSk7CisJCW9jZnMyX2V4cGFuZF9jYWNoZShjaSwgdHJlZSk7CiAKIAlfX29jZnMyX2luc2VydF9jYWNoZV90cmVlKGNpLCBuZXcpOwotCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfdW5sb2NrKGNpKTsKIAogCW5ldyA9IE5VTEw7CiBvdXRfZnJlZToKQEAgLTQwMCwxNCArNDYwLDE0IEBACiAJLyogSWYgdGhlc2Ugd2VyZSB1c2VkLCB0aGVuIG9jZnMyX2V4cGFuZF9jYWNoZSByZS1zZXQgdGhlbSB0bwogCSAqIE5VTEwgZm9yIHVzLiAqLwogCWlmICh0cmVlWzBdKSB7Ci0JCWZvcihpID0gMDsgaSA8IE9DRlMyX0lOT0RFX01BWF9DQUNIRV9BUlJBWTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVk7IGkrKykKIAkJCWlmICh0cmVlW2ldKQogCQkJCWttZW1fY2FjaGVfZnJlZShvY2ZzMl91cHRvZGF0ZV9jYWNoZXAsCiAJCQkJCQl0cmVlW2ldKTsKIAl9CiB9CiAKLS8qIEl0ZW0gaW5zZXJ0aW9uIGlzIGd1YXJkZWQgYnkgaXBfaW9fbXV0ZXgsIHNvIHRoZSBpbnNlcnRpb24gcGF0aCB0YWtlcworLyogSXRlbSBpbnNlcnRpb24gaXMgZ3VhcmRlZCBieSBjb19pb19sb2NrKCksIHNvIHRoZSBpbnNlcnRpb24gcGF0aCB0YWtlcwogICogYWR2YW50YWdlIG9mIHRoaXMgYnkgbm90IHJlY2hlY2tpbmcgZm9yIGEgZHVwbGljYXRlIGluc2VydCBkdXJpbmcKICAqIHRoZSBzbG93IGNhc2UuIEFkZGl0aW9uYWxseSwgaWYgdGhlIGNhY2hlIG5lZWRzIHRvIGJlIGJ1bXBlZCB1cCB0bwogICogYSB0cmVlLCB0aGUgY29kZSB3aWxsIG5vdCByZWNoZWNrIGFmdGVyIGFjcXVpcmluZyB0aGUgbG9jayAtLQpAQCAtNDI1LDU5ICs0ODUsNTUgQEAKICAqIFJlYWRhaGVhZCBidWZmZXJzIGNhbiBiZSBwYXNzZWQgaW4gaGVyZSBiZWZvcmUgdGhlIEkvTyByZXF1ZXN0IGlzCiAgKiBjb21wbGV0ZWQuCiAgKi8KLXZvaWQgb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAordm9pZCBvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJaW50IGV4cGFuZDsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CiAKIAkvKiBUaGUgYmxvY2sgbWF5IHZlcnkgd2VsbCBleGlzdCBpbiBvdXIgY2FjaGUgYWxyZWFkeSwgc28gYXZvaWQKIAkgKiBkb2luZyBhbnkgbW9yZSB3b3JrIGluIHRoYXQgY2FzZS4gKi8KLQlpZiAob2NmczJfYnVmZmVyX2NhY2hlZChvaSwgYmgpKQorCWlmIChvY2ZzMl9idWZmZXJfY2FjaGVkKGNpLCBiaCkpCiAJCXJldHVybjsKIAotCW1sb2coMCwgIklub2RlICVsbHUsIGluc2VydGluZyBibG9jayAlbGx1XG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJbWxvZygwLCAiT3duZXIgJWxsdSwgaW5zZXJ0aW5nIGJsb2NrICVsbHVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CiAKIAkvKiBObyBuZWVkIHRvIHJlY2hlY2sgdW5kZXIgc3BpbmxvY2sgLSBpbnNlcnRpb24gaXMgZ3VhcmRlZCBieQotCSAqIGlwX2lvX211dGV4ICovCi0Jc3Bpbl9sb2NrKCZvaS0+aXBfbG9jayk7Ci0JaWYgKG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KG9pLCBjaSkpIHsKKwkgKiBjb19pb19sb2NrKCkgKi8KKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKGNpKTsKKwlpZiAob2NmczJfaW5zZXJ0X2Nhbl91c2VfYXJyYXkoY2kpKSB7CiAJCS8qIEZhc3QgY2FzZSAtIGl0J3MgYW4gYXJyYXkgYW5kIHRoZXJlJ3MgYSBmcmVlCiAJCSAqIHNwb3QuICovCiAJCW9jZnMyX2FwcGVuZF9jYWNoZV9hcnJheShjaSwgYmgtPmJfYmxvY2tucik7Ci0JCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAJCXJldHVybjsKIAl9CiAKIAlleHBhbmQgPSAwOwotCWlmIChvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpIHsKKwlpZiAoY2ktPmNpX2ZsYWdzICYgT0NGUzJfQ0FDSEVfRkxfSU5MSU5FKSB7CiAJCS8qIFdlIG5lZWQgdG8gYnVtcCB0aGluZ3MgdXAgdG8gYSB0cmVlLiAqLwogCQlleHBhbmQgPSAxOwogCX0KLQlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAKLQlfX29jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUob2ksIGJoLT5iX2Jsb2NrbnIsIGV4cGFuZCk7CisJX19vY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaC0+Yl9ibG9ja25yLCBleHBhbmQpOwogfQogCiAvKiBDYWxsZWQgYWdhaW5zdCBhIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIuIE1vc3QgbGlrZWx5IG5vYm9keSBzaG91bGQKICAqIGJlIGFibGUgdG8gcmVhZCB0aGlzIHNvcnQgb2YgbWV0YWRhdGEgd2hpbGUgaXQncyBzdGlsbCBiZWluZwotICogYWxsb2NhdGVkLCBidXQgdGhpcyBpcyBjYXJlZnVsIHRvIHRha2UgaXBfaW9fbXV0ZXggYW55d2F5LiAqLwotdm9pZCBvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorICogYWxsb2NhdGVkLCBidXQgdGhpcyBpcyBjYXJlZnVsIHRvIHRha2UgY29faW9fbG9jaygpIGFueXdheS4gKi8KK3ZvaWQgb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKLQogCS8qIFRoaXMgc2hvdWxkIGRlZmluaXRlbHkgKm5vdCogZXhpc3QgaW4gb3VyIGNhY2hlICovCi0JQlVHX09OKG9jZnMyX2J1ZmZlcl9jYWNoZWQob2ksIGJoKSk7CisJQlVHX09OKG9jZnMyX2J1ZmZlcl9jYWNoZWQoY2ksIGJoKSk7CiAKIAlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAotCW11dGV4X2xvY2soJm9pLT5pcF9pb19tdXRleCk7Ci0Jb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpOwotCW11dGV4X3VubG9jaygmb2ktPmlwX2lvX211dGV4KTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pb19sb2NrKGNpKTsKKwlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fdW5sb2NrKGNpKTsKIH0KIAogLyogUmVxdWlyZXMgaXBfbG9jay4gKi8KQEAgLTQ4Nyw3ICs1NDMsNyBAQAogCXNlY3Rvcl90ICphcnJheSA9IGNpLT5jaV9jYWNoZS5jaV9hcnJheTsKIAlpbnQgYnl0ZXM7CiAKLQlCVUdfT04oaW5kZXggPCAwIHx8IGluZGV4ID49IE9DRlMyX0lOT0RFX01BWF9DQUNIRV9BUlJBWSk7CisJQlVHX09OKGluZGV4IDwgMCB8fCBpbmRleCA+PSBPQ0ZTMl9DQUNIRV9JTkZPX01BWF9BUlJBWSk7CiAJQlVHX09OKGluZGV4ID49IGNpLT5jaV9udW1fY2FjaGVkKTsKIAlCVUdfT04oIWNpLT5jaV9udW1fY2FjaGVkKTsKIApAQCAtNTE1LDIxICs1NzEsMTkgQEAKIAljaS0+Y2lfbnVtX2NhY2hlZC0tOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIHZvaWQgb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCSAgc2VjdG9yX3QgYmxvY2spCiB7CiAJaW50IGluZGV4OwogCXN0cnVjdCBvY2ZzMl9tZXRhX2NhY2hlX2l0ZW0gKml0ZW0gPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwotCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpID0gJm9pLT5pcF9tZXRhZGF0YV9jYWNoZTsKIAotCXNwaW5fbG9jaygmb2ktPmlwX2xvY2spOwotCW1sb2coMCwgIklub2RlICVsbHUsIHJlbW92ZSAlbGx1LCBpdGVtcyA9ICV1LCBhcnJheSA9ICV1XG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJb2NmczJfbWV0YWRhdGFfY2FjaGVfbG9jayhjaSk7CisJbWxvZygwLCAiT3duZXIgJWxsdSwgcmVtb3ZlICVsbHUsIGl0ZW1zID0gJXUsIGFycmF5ID0gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrLCBjaS0+Y2lfbnVtX2NhY2hlZCwKLQkgICAgIG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSk7CisJICAgICBjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpOwogCi0JaWYgKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSkgeworCWlmIChjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpIHsKIAkJaW5kZXggPSBvY2ZzMl9zZWFyY2hfY2FjaGVfYXJyYXkoY2ksIGJsb2NrKTsKIAkJaWYgKGluZGV4ICE9IC0xKQogCQkJb2NmczJfcmVtb3ZlX21ldGFkYXRhX2FycmF5KGNpLCBpbmRleCk7CkBAIC01MzgsNyArNTkyLDcgQEAKIAkJaWYgKGl0ZW0pCiAJCQlvY2ZzMl9yZW1vdmVfbWV0YWRhdGFfdHJlZShjaSwgaXRlbSk7CiAJfQotCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfdW5sb2NrKGNpKTsKIAogCWlmIChpdGVtKQogCQlrbWVtX2NhY2hlX2ZyZWUob2NmczJfdXB0b2RhdGVfY2FjaGVwLCBpdGVtKTsKQEAgLTU0OSwyMyArNjAzLDI0IEBACiAgKiBib3RoZXIgcmV2ZXJ0aW5nIHRoaW5ncyB0byBhbiBpbmxpbmVkIGFycmF5IGluIHRoZSBjYXNlIG9mIGEgcmVtb3ZlCiAgKiB3aGljaCBtb3ZlcyB1cyBiYWNrIHVuZGVyIHRoZSBsaW1pdC4KICAqLwotdm9pZCBvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAordm9pZCBvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlzZWN0b3JfdCBibG9jayA9IGJoLT5iX2Jsb2NrbnI7CiAKLQlvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9jYWNoZShpbm9kZSwgYmxvY2spOworCW9jZnMyX3JlbW92ZV9ibG9ja19mcm9tX2NhY2hlKGNpLCBibG9jayk7CiB9CiAKIC8qIENhbGxlZCB3aGVuIHdlIHJlbW92ZSB4YXR0ciBjbHVzdGVycyBmcm9tIGFuIGlub2RlLiAqLwotdm9pZCBvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAordm9pZCBvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkJICAgIHNlY3Rvcl90IGJsb2NrLAogCQkJCQkgICAgdTMyIGNfbGVuKQogewotCXVuc2lnbmVkIGludCBpLCBiX2xlbiA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgMSkgKiBjX2xlbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKKwl1bnNpZ25lZCBpbnQgaSwgYl9sZW4gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIDEpICogY19sZW47CiAKIAlmb3IgKGkgPSAwOyBpIDwgYl9sZW47IGkrKywgYmxvY2srKykKLQkJb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoaW5vZGUsIGJsb2NrKTsKKwkJb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoY2ksIGJsb2NrKTsKIH0KIAogaW50IF9faW5pdCBpbml0X29jZnMyX3VwdG9kYXRlX2NhY2hlKHZvaWQpCkBAIC01NzcsNyArNjMyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltbG9nKDAsICIldSBpbmxpbmVkIGNhY2hlIGl0ZW1zIHBlciBpbm9kZS5cbiIsCi0JICAgICBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVkpOworCSAgICAgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi91cHRvZGF0ZS5oIGIvZnMvb2NmczIvdXB0b2RhdGUuaAppbmRleCA1MzFiNGIzLi4wZDgyNmZlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi91cHRvZGF0ZS5oCisrKyBiL2ZzL29jZnMyL3VwdG9kYXRlLmgKQEAgLTI2LDI0ICsyNiw1OSBAQAogI2lmbmRlZiBPQ0ZTMl9VUFRPREFURV9ICiAjZGVmaW5lIE9DRlMyX1VQVE9EQVRFX0gKIAorLyoKKyAqIFRoZSBjYWNoaW5nIGNvZGUgcmVsaWVzIG9uIGxvY2tpbmcgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb2YKKyAqIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8uICBUaGVzZSBvcGVyYXRpb25zIGNvbm5lY3QgdGhhdCB1cC4KKyAqLworc3RydWN0IG9jZnMyX2NhY2hpbmdfb3BlcmF0aW9ucyB7CisJLyoKKwkgKiBBIHU2NCByZXByZXNlbnRpbmcgdGhlIG93bmluZyBzdHJ1Y3R1cmUuICBVc3VhbGx5IHRoaXMKKwkgKiBpcyB0aGUgYmxvY2sgbnVtYmVyIChpX2Jsa25vIG9yIHdoYXRub3QpLiAgVGhpcyBpcyB1c2VkIHNvCisJICogdGhhdCBjYWNoaW5nIGxvZyBtZXNzYWdlcyBjYW4gaWRlbnRpZnkgdGhlIG93bmluZyBzdHJ1Y3R1cmUuCisJICovCisJdTY0CSgqY29fb3duZXIpKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKworCS8qIFRoZSBzdXBlcmJsb2NrIGlzIG5lZWRlZCBkdXJpbmcgSS9PLiAqLworCXN0cnVjdCBzdXBlcl9ibG9jayAqKCpjb19nZXRfc3VwZXIpKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKwkvKgorCSAqIExvY2sgYW5kIHVubG9jayB0aGUgY2FjaGluZyBkYXRhLiAgVGhlc2Ugd2lsbCBub3Qgc2xlZXAsIGFuZAorCSAqIHNob3VsZCBwcm9iYWJseSBiZSBzcGlubG9ja3MuCisJICovCisJdm9pZAkoKmNvX2NhY2hlX2xvY2spKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKwl2b2lkCSgqY29fY2FjaGVfdW5sb2NrKShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSk7CisKKwkvKgorCSAqIExvY2sgYW5kIHVubG9jayBmb3IgZGlzayBJL08uICBUaGVzZSB3aWxsIHNsZWVwLCBhbmQgc2hvdWxkCisJICogYmUgbXV0ZXhlcy4KKwkgKi8KKwl2b2lkCSgqY29faW9fbG9jaykoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpOworCXZvaWQJKCpjb19pb191bmxvY2spKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKK307CisKIGludCBfX2luaXQgaW5pdF9vY2ZzMl91cHRvZGF0ZV9jYWNoZSh2b2lkKTsKIHZvaWQgZXhpdF9vY2ZzMl91cHRvZGF0ZV9jYWNoZSh2b2lkKTsKIAotdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zICpvcHMpOwordm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSk7Cit2b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX2V4aXQoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpOwogCi1pbnQgb2NmczJfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCit1NjQgb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpOwordm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pb19sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fdW5sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKworaW50IG9jZnMyX2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Ci12b2lkIG9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLXZvaWQgb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Ci12b2lkIG9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCit2b2lkIG9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLXZvaWQgb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCSAgICBzZWN0b3JfdCBibG9jaywKIAkJCQkJICAgIHUzMiBjX2xlbik7Ci1pbnQgb2NmczJfYnVmZmVyX3JlYWRfYWhlYWQoc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9idWZmZXJfcmVhZF9haGVhZChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIAogI2VuZGlmIC8qIE9DRlMyX1VQVE9EQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IGQxYTI3Y2QuLmZlMzQxOTAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKKysrIGIvZnMvb2NmczIveGF0dHIuYwpAQCAtNTUsNyArNTUsOCBAQAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgotCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCisjaW5jbHVkZSAiYWNsLmgiCiAKIHN0cnVjdCBvY2ZzMl94YXR0cl9kZWZfdmFsdWVfcm9vdCB7CiAJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QJeHY7CkBAIC0xNDAsNyArMTQxLDcgQEAKIAlpbnQgbm90X2ZvdW5kOwogfTsKIAotc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoc3RydWN0IGlub2RlICppbm9kZSwKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsCiAJCQkJCSAgICAgaW50IGluZGV4LAogCQkJCQkgICAgIGludCAqYmxvY2tfb2ZmLApAQCAtMTU3LDcgKzE1OCw3IEBACiAJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKTsKIAogc3RhdGljIGludCBvY2ZzMl94YXR0cl90cmVlX2xpc3RfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoLAogCQkJCQljaGFyICpidWZmZXIsCiAJCQkJCXNpemVfdCBidWZmZXJfc2l6ZSk7CiAKQEAgLTE3MCwxMiArMTcxLDQyIEBACiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KTsKIAotc3RhdGljIGludCBvY2ZzMl9kZWxldGVfeGF0dHJfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2JoKTsKK3R5cGVkZWYgaW50ICh4YXR0cl90cmVlX3JlY19mdW5jKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgdTY0IGJsa25vLCB1MzIgY3BvcywgdTMyIGxlbiwgdm9pZCAqcGFyYSk7CitzdGF0aWMgaW50IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCQkgICB4YXR0cl90cmVlX3JlY19mdW5jICpyZWNfZnVuYywKKwkJCQkJICAgdm9pZCAqcGFyYSk7CitzdGF0aWMgaW50IG9jZnMyX2RlbGV0ZV94YXR0cl9pbl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAorCQkJCQl2b2lkICpwYXJhKTsKK3N0YXRpYyBpbnQgb2NmczJfcm1feGF0dHJfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgdTY0IGJsa25vLAorCQkJCSAgdTMyIGNwb3MsCisJCQkJICB1MzIgbGVuLAorCQkJCSAgdm9pZCAqcGFyYSk7CisKIHN0YXRpYyBpbnQgb2NmczJfbXZfeGF0dHJfYnVja2V0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgdTY0IHNyY19ibGssIHU2NCBsYXN0X2JsaywgdTY0IHRvX2JsaywKIAkJCQkgIHVuc2lnbmVkIGludCBzdGFydF9idWNrZXQsCiAJCQkJICB1MzIgKmZpcnN0X2hhc2gpOworc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX3JlZmNvdW50X3hhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhpcywKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGJzLAorCQkJCQlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqKnJlZl90cmVlLAorCQkJCQlpbnQgKm1ldGFfbmVlZCwKKwkJCQkJaW50ICpjcmVkaXRzKTsKK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3RyZWVfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJCSAgIGludCBvZmZzZXQsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKTsKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIAogc3RhdGljIGlubGluZSB1MTYgb2NmczJfeGF0dHJfYnVja2V0c19wZXJfY2x1c3RlcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKIHsKQEAgLTI1NCw5ICsyODUsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIW9jZnMyX2J1ZmZlcl91cHRvZGF0ZShidWNrZXQtPmJ1X2lub2RlLAorCQlpZiAoIW9jZnMyX2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShidWNrZXQtPmJ1X2lub2RlKSwKIAkJCQkJICAgYnVja2V0LT5idV9iaHNbaV0pKQotCQkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoYnVja2V0LT5idV9pbm9kZSwKKwkJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGJ1Y2tldC0+YnVfaW5vZGUpLAogCQkJCQkJICAgICAgYnVja2V0LT5idV9iaHNbaV0pOwogCX0KIApAQCAtMjcxLDcgKzMwMiw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhidWNrZXQtPmJ1X2lub2RlLCB4Yl9ibGtubywKKwlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGJ1Y2tldC0+YnVfaW5vZGUpLCB4Yl9ibGtubywKIAkJCSAgICAgICBidWNrZXQtPmJ1X2Jsb2NrcywgYnVja2V0LT5idV9iaHMsIDAsCiAJCQkgICAgICAgTlVMTCk7CiAJaWYgKCFyYykgewpAQCAtMjk3LDcgKzMyOCw4IEBACiAJaW50IGksIHJjID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBidWNrZXQtPmJ1X2Jsb2NrczsgaSsrKSB7Ci0JCXJjID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBidWNrZXQtPmJ1X2lub2RlLAorCQlyYyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwKKwkJCQkJICBJTk9ERV9DQUNIRShidWNrZXQtPmJ1X2lub2RlKSwKIAkJCQkJICBidWNrZXQtPmJ1X2Joc1tpXSwgdHlwZSk7CiAJCWlmIChyYykgewogCQkJbWxvZ19lcnJubyhyYyk7CkBAIC0zOTksNyArNDMxLDcgQEAKIAlpbnQgcmM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7CiAKLQlyYyA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIHhiX2Jsa25vLCAmdG1wLAorCXJjID0gb2NmczJfcmVhZF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksIHhiX2Jsa25vLCAmdG1wLAogCQkJICAgICAgb2NmczJfdmFsaWRhdGVfeGF0dHJfYmxvY2spOwogCiAJLyogSWYgb2NmczJfcmVhZF9ibG9jaygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KQEAgLTU5NiwxNSArNjI4LDE0IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IGN0eHQtPmhhbmRsZTsKIAllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCB3aHk7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAJdTMyIHByZXZfY2x1c3RlcnMsIGxvZ2ljYWxfc3RhcnQgPSBsZTMyX3RvX2NwdSh2Yi0+dmJfeHYtPnhyX2NsdXN0ZXJzKTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CiAKIAltbG9nKDAsICIoY2x1c3RlcnNfdG9fYWRkIGZvciB4YXR0cj0gJXUpXG4iLCBjbHVzdGVyc190b19hZGQpOwogCi0Jb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCB2Yik7CisJb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmIpOwogCi0Jc3RhdHVzID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB2Yi0+dmJfYmgsCisJc3RhdHVzID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmItPnZiX2JoLAogCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTYxMiwxMyArNjQzLDExIEBACiAJfQogCiAJcHJldl9jbHVzdGVycyA9IGxlMzJfdG9fY3B1KHZiLT52Yl94di0+eHJfY2x1c3RlcnMpOwotCXN0YXR1cyA9IG9jZnMyX2FkZF9jbHVzdGVyc19pbl9idHJlZShvc2IsCi0JCQkJCSAgICAgaW5vZGUsCisJc3RhdHVzID0gb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKGhhbmRsZSwKKwkJCQkJICAgICAmZXQsCiAJCQkJCSAgICAgJmxvZ2ljYWxfc3RhcnQsCiAJCQkJCSAgICAgY2x1c3RlcnNfdG9fYWRkLAogCQkJCQkgICAgIDAsCi0JCQkJCSAgICAgJmV0LAotCQkJCQkgICAgIGhhbmRsZSwKIAkJCQkJICAgICBjdHh0LT5kYXRhX2FjLAogCQkJCQkgICAgIGN0eHQtPm1ldGFfYWMsCiAJCQkJCSAgICAgJndoeSk7CkBAIC02NDksNiArNjc4LDcgQEAKIHN0YXRpYyBpbnQgX19vY2ZzMl9yZW1vdmVfeGF0dHJfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YiwKIAkJCQkgICAgICB1MzIgY3BvcywgdTMyIHBoeXNfY3BvcywgdTMyIGxlbiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzLAogCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKIHsKIAlpbnQgcmV0OwpAQCAtNjU2LDE2ICs2ODYsMTYgQEAKIAloYW5kbGVfdCAqaGFuZGxlID0gY3R4dC0+aGFuZGxlOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAotCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgdmIpOworCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksIHZiKTsKIAotCXJldCA9IHZiLT52Yl9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgdmItPnZiX2JoLAorCXJldCA9IHZiLT52Yl9hY2Nlc3MoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHZiLT52Yl9iaCwKIAkJCSAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX3JlbW92ZV9leHRlbnQoaW5vZGUsICZldCwgY3BvcywgbGVuLCBoYW5kbGUsIGN0eHQtPm1ldGFfYWMsCisJcmV0ID0gb2NmczJfcmVtb3ZlX2V4dGVudChoYW5kbGUsICZldCwgY3BvcywgbGVuLCBjdHh0LT5tZXRhX2FjLAogCQkJCSAgJmN0eHQtPmRlYWxsb2MpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNjgwLDcgKzcxMCwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9jYWNoZV9jbHVzdGVyX2RlYWxsb2MoJmN0eHQtPmRlYWxsb2MsIHBoeXNfYmxrbm8sIGxlbik7CisJaWYgKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKQorCQlyZXQgPSBvY2ZzMl9kZWNyZWFzZV9yZWZjb3VudChpbm9kZSwgaGFuZGxlLAorCQkJCQlvY2ZzMl9ibG9ja3NfdG9fY2x1c3RlcnMoaW5vZGUtPmlfc2IsCisJCQkJCQkJCSBwaHlzX2Jsa25vKSwKKwkJCQkJbGVuLCBjdHh0LT5tZXRhX2FjLCAmY3R4dC0+ZGVhbGxvYywgMSk7CisJZWxzZQorCQlyZXQgPSBvY2ZzMl9jYWNoZV9jbHVzdGVyX2RlYWxsb2MoJmN0eHQtPmRlYWxsb2MsCisJCQkJCQkgIHBoeXNfYmxrbm8sIGxlbik7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCkBAIC02OTUsNiArNzMyLDcgQEAKIAkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCiB7CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGV4dF9mbGFnczsKIAl1MzIgdHJ1bmNfbGVuLCBjcG9zLCBwaHlzX2Nwb3MsIGFsbG9jX3NpemU7CiAJdTY0IGJsb2NrOwogCkBAIC03MDYsNyArNzQ0LDcgQEAKIAl3aGlsZSAodHJ1bmNfbGVuKSB7CiAJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBoeXNfY3BvcywKIAkJCQkJICAgICAgICZhbGxvY19zaXplLAotCQkJCQkgICAgICAgJnZiLT52Yl94di0+eHJfbGlzdCk7CisJCQkJCSAgICAgICAmdmItPnZiX3h2LT54cl9saXN0LCAmZXh0X2ZsYWdzKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC03MTcsMTUgKzc1NSwxNSBAQAogCiAJCXJldCA9IF9fb2NmczJfcmVtb3ZlX3hhdHRyX3JhbmdlKGlub2RlLCB2YiwgY3BvcywKIAkJCQkJCSBwaHlzX2Nwb3MsIGFsbG9jX3NpemUsCi0JCQkJCQkgY3R4dCk7CisJCQkJCQkgZXh0X2ZsYWdzLCBjdHh0KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAogCQlibG9jayA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgcGh5c19jcG9zKTsKLQkJb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoaW5vZGUsIGJsb2NrLAotCQkJCQkJICAgICAgIGFsbG9jX3NpemUpOworCQlvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCQkgICAgICAgYmxvY2ssIGFsbG9jX3NpemUpOwogCQljcG9zICs9IGFsbG9jX3NpemU7CiAJCXRydW5jX2xlbiAtPSBhbGxvY19zaXplOwogCX0KQEAgLTgxMCw2ICs4NDgsMjMgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitpbnQgb2NmczJfaGFzX2lubGluZV94YXR0cl92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKKwlpbnQgaTsKKworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJICgodm9pZCAqKWRpICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KKwkJIGxlMTZfdG9fY3B1KGRpLT5pX3hhdHRyX2lubGluZV9zaXplKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKQorCQlpZiAoIW9jZnMyX3hhdHRyX2lzX2xvY2FsKCZ4aC0+eGhfZW50cmllc1tpXSkpCisJCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2lib2R5X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAogCQkJCSAgY2hhciAqYnVmZmVyLApAQCAtODU1LDExICs5MTAsOSBAQAogCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSAmeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKIAkJcmV0ID0gb2NmczJfeGF0dHJfbGlzdF9lbnRyaWVzKGlub2RlLCBoZWFkZXIsCiAJCQkJCSAgICAgICBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290ICp4dCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdDsKLQkJcmV0ID0gb2NmczJfeGF0dHJfdHJlZV9saXN0X2luZGV4X2Jsb2NrKGlub2RlLCB4dCwKKwl9IGVsc2UKKwkJcmV0ID0gb2NmczJfeGF0dHJfdHJlZV9saXN0X2luZGV4X2Jsb2NrKGlub2RlLCBibGtfYmgsCiAJCQkJCQkgICBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLQl9CiAKIAlicmVsc2UoYmxrX2JoKTsKIApAQCAtOTYxLDcgKzEwMTQsNyBAQAogCWNwb3MgPSAwOwogCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKIAkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAotCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgZWwpOworCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgZWwsIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTk3MCw3ICsxMDIzLDggQEAKIAkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3Rlcik7CiAJCS8qIENvcHkgb2NmczJfeGF0dHJfdmFsdWUgKi8KIAkJZm9yIChpID0gMDsgaSA8IG51bV9jbHVzdGVycyAqIGJwYzsgaSsrLCBibGtubysrKSB7Ci0JCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoLCBOVUxMKTsKKwkJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoaW5vZGUpLCBibGtubywKKwkJCQkJICAgICAgICZiaCwgTlVMTCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJCWdvdG8gb3V0OwpAQCAtMTA4NSw3ICsxMTM5LDcgQEAKIAkJaSA9IHhzLT5oZXJlIC0geHMtPmhlYWRlci0+eGhfZW50cmllczsKIAogCQlpZiAobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpIHsKLQkJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZSwKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZS0+aV9zYiwKIAkJCQkJCQkJYnVja2V0X3hoKHhzLT5idWNrZXQpLAogCQkJCQkJCQlpLAogCQkJCQkJCQkmYmxvY2tfb2ZmLApAQCAtMTE4Myw3ICsxMjM3LDcgQEAKIAogc3RhdGljIGludCBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCiAJCQkJCSAgIGNvbnN0IHZvaWQgKnZhbHVlLAogCQkJCQkgICBpbnQgdmFsdWVfbGVuKQogewpAQCAtMTE5NCwyOCArMTI0OCwzNCBAQAogCXUzMiBjbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwgdmFsdWVfbGVuKTsKIAl1NjQgYmxrbm87CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGV4dF9mbGFnczsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYgPSB2Yi0+dmJfeHY7CiAKIAlCVUdfT04oY2x1c3RlcnMgPiBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpKTsKIAogCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKIAkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAotCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgJnh2LT54cl9saXN0KTsKKwkJCQkJICAgICAgICZudW1fY2x1c3RlcnMsICZ4di0+eHJfbGlzdCwKKwkJCQkJICAgICAgICZleHRfZmxhZ3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCisJCUJVR19PTihleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCk7CisKIAkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3Rlcik7CiAKIAkJZm9yIChpID0gMDsgaSA8IG51bV9jbHVzdGVycyAqIGJwYzsgaSsrLCBibGtubysrKSB7Ci0JCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoLCBOVUxMKTsKKwkJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoaW5vZGUpLCBibGtubywKKwkJCQkJICAgICAgICZiaCwgTlVMTCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCiAJCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsCi0JCQkJCQkgICBpbm9kZSwKKwkJCQkJCSAgIElOT0RFX0NBQ0hFKGlub2RlKSwKIAkJCQkJCSAgIGJoLAogCQkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJaWYgKHJldCA8IDApIHsKQEAgLTEyNjYsNyArMTMyNiw3IEBACiAJdm9pZCAqdmFsID0geHMtPmJhc2UgKyBvZmZzOwogCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CiAKLQlyZXQgPSB2Yi0+dmJfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHZiLT52Yl9iaCwKKwlyZXQgPSB2Yi0+dmJfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yi0+dmJfYmgsCiAJCQkgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTI5NCw3ICsxMzU0LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB2Yi0+dmJfYmgsCisJcmV0ID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmItPnZiX2JoLAogCQkJICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTEzNTUsNyArMTQxNSw3IEBACiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgY3R4dC0+aGFuZGxlLCB2Yi0+dmJfeHYsCisJcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgY3R4dC0+aGFuZGxlLCB2YiwKIAkJCQkJICAgICAgeGktPnZhbHVlLCB4aS0+dmFsdWVfbGVuKTsKIAlpZiAocmV0IDwgMCkKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTU5NCw3ICsxNjU0LDcgQEAKIAogCQkJCXJldCA9IF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsCiAJCQkJCQkJCWhhbmRsZSwKLQkJCQkJCQkJdmIudmJfeHYsCisJCQkJCQkJCSZ2YiwKIAkJCQkJCQkJeGktPnZhbHVlLAogCQkJCQkJCQl4aS0+dmFsdWVfbGVuKTsKIAkJCQlpZiAocmV0IDwgMCkKQEAgLTE2MTUsNyArMTY3NSw3IEBACiAJCX0KIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCB4cy0+aW5vZGVfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHhzLT5pbm9kZV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xNjIzLDcgKzE2ODMsNyBAQAogCX0KIAogCWlmICghKGZsYWcgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7Ci0JCXJldCA9IHZiLnZiX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB2Yi52Yl9iaCwKKwkJcmV0ID0gdmIudmJfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yi52Yl9iaCwKIAkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTE3MDAsNTEgKzE3NjAsMTEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUqaW5vZGUsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyKQorLyoKKyAqIEluIHhhdHRyIHJlbW92ZSwgaWYgaXQgaXMgc3RvcmVkIG91dHNpZGUgYW5kIHJlZmNvdW50ZWQsIHdlIG1heSBoYXZlCisgKiB0aGUgY2hhbmNlIHRvIHNwbGl0IHRoZSByZWZjb3VudCB0cmVlLiBTbyBuZWVkIHRoZSBhbGxvY2F0b3JzLgorICovCitzdGF0aWMgaW50IG9jZnMyX2xvY2tfeGF0dHJfcmVtb3ZlX2FsbG9jYXRvcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2LAorCQkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYywKKwkJCQkJaW50ICpyZWZfY3JlZGl0cykKIHsKLQlpbnQgcmV0ID0gMCwgaTsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgY3R4dCA9IHsgTlVMTCwgTlVMTCwgfTsKKwlpbnQgcmV0LCBtZXRhX2FkZCA9IDA7CisJdTMyIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CiAKLQlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmY3R4dC5kZWFsbG9jKTsKLQotCWN0eHQuaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLAotCQkJCQlvY2ZzMl9yZW1vdmVfZXh0ZW50X2NyZWRpdHMob3NiLT5zYikpOwotCWlmIChJU19FUlIoY3R4dC5oYW5kbGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoY3R4dC5oYW5kbGUpOworCSpyZWZfY3JlZGl0cyA9IDA7CisJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCAwLCAmcF9jbHVzdGVyLAorCQkJCSAgICAgICAmbnVtX2NsdXN0ZXJzLAorCQkJCSAgICAgICAmeHYtPnhyX2xpc3QsCisJCQkJICAgICAgICZleHRfZmxhZ3MpOworCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoaGVhZGVyLT54aF9jb3VudCk7IGkrKykgewotCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5ID0gJmhlYWRlci0+eGhfZW50cmllc1tpXTsKKwlpZiAoIShleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpCisJCWdvdG8gb3V0OwogCi0JCWlmICghb2NmczJfeGF0dHJfaXNfbG9jYWwoZW50cnkpKSB7Ci0JCQl2b2lkICp2YWw7Ci0KLQkJCXZhbCA9ICh2b2lkICopaGVhZGVyICsKLQkJCQlsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOwotCQkJdmItPnZiX3h2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCi0JCQkJKHZhbCArIE9DRlMyX1hBVFRSX1NJWkUoZW50cnktPnhlX25hbWVfbGVuKSk7Ci0JCQlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwgdmIsIDAsICZjdHh0KTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJcmV0ID0gb2NmczJfcmVmY291bnRlZF94YXR0cl9kZWxldGVfbmVlZChpbm9kZSwgcmVmX2NpLAorCQkJCQkJIHJlZl9yb290X2JoLCB4diwKKwkJCQkJCSAmbWV0YV9hZGQsIHJlZl9jcmVkaXRzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CiAJfQogCi0Jb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgY3R4dC5oYW5kbGUpOwotCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOwotCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZjdHh0LmRlYWxsb2MpOworCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2NrcyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCisJCQkJCQltZXRhX2FkZCwgbWV0YV9hYyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoKQoreworCWludCByZXQgPSAwLCBpLCByZWZfY3JlZGl0czsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgY3R4dCA9IHsgTlVMTCwgTlVMTCwgfTsKKwl2b2lkICp2YWw7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmY3R4dC5kZWFsbG9jKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShoZWFkZXItPnhoX2NvdW50KTsgaSsrKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkgPSAmaGVhZGVyLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbChlbnRyeSkpCisJCQljb250aW51ZTsKKworCQl2YWwgPSAodm9pZCAqKWhlYWRlciArCisJCQlsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCQl2Yi0+dmJfeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKKwkJCSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKGVudHJ5LT54ZV9uYW1lX2xlbikpOworCisJCXJldCA9IG9jZnMyX2xvY2tfeGF0dHJfcmVtb3ZlX2FsbG9jYXRvcnMoaW5vZGUsIHZiLT52Yl94diwKKwkJCQkJCQkgcmVmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJCQkgJmN0eHQubWV0YV9hYywKKwkJCQkJCQkgJnJlZl9jcmVkaXRzKTsKKworCQljdHh0LmhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgcmVmX2NyZWRpdHMgKworCQkJCQlvY2ZzMl9yZW1vdmVfZXh0ZW50X2NyZWRpdHMob3NiLT5zYikpOworCQlpZiAoSVNfRVJSKGN0eHQuaGFuZGxlKSkgeworCQkJcmV0ID0gUFRSX0VSUihjdHh0LmhhbmRsZSk7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLCB2YiwgMCwgJmN0eHQpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBjdHh0LmhhbmRsZSk7CisJCWlmIChjdHh0Lm1ldGFfYWMpIHsKKwkJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjdHh0Lm1ldGFfYWMpOworCQkJY3R4dC5tZXRhX2FjID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChjdHh0Lm1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjdHh0Lm1ldGFfYWMpOworCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOworCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZjdHh0LmRlYWxsb2MpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfaWJvZHlfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCkKIHsKIAogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwpAQCAtMTc1OSwxMyArMTg4MCwyMSBAQAogCQkgKCh2b2lkICopZGkgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQogCQkgbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpKTsKIAotCXJldCA9IG9jZnMyX3JlbW92ZV92YWx1ZV9vdXRzaWRlKGlub2RlLCAmdmIsIGhlYWRlcik7CisJcmV0ID0gb2NmczJfcmVtb3ZlX3ZhbHVlX291dHNpZGUoaW5vZGUsICZ2YiwgaGVhZGVyLAorCQkJCQkgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3Qgb2NmczJfcm1feGF0dHJfYnVja2V0X3BhcmEgeworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoOworfTsKKwogc3RhdGljIGludCBvY2ZzMl94YXR0cl9ibG9ja19yZW1vdmUoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgpCiB7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YjsKIAlpbnQgcmV0ID0gMDsKQEAgLTE3NzMsMTkgKzE5MDIsMjkgQEAKIAkJLnZiX2JoID0gYmxrX2JoLAogCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIsCiAJfTsKKwlzdHJ1Y3Qgb2NmczJfcm1feGF0dHJfYnVja2V0X3BhcmEgYXJncyA9IHsKKwkJLnJlZl9jaSA9IHJlZl9jaSwKKwkJLnJlZl9yb290X2JoID0gcmVmX3Jvb3RfYmgsCisJfTsKIAogCXhiID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOwogCWlmICghKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSkgewogCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSAmKHhiLT54Yl9hdHRycy54Yl9oZWFkZXIpOwotCQlyZXQgPSBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShpbm9kZSwgJnZiLCBoZWFkZXIpOworCQlyZXQgPSBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShpbm9kZSwgJnZiLCBoZWFkZXIsCisJCQkJCQkgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAJfSBlbHNlCi0JCXJldCA9IG9jZnMyX2RlbGV0ZV94YXR0cl9pbmRleF9ibG9jayhpbm9kZSwgYmxrX2JoKTsKKwkJcmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhpbm9kZSwKKwkJCQkJCWJsa19iaCwKKwkJCQkJCW9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIsCisJCQkJCQkmYXJncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgIHU2NCBibG9jaykKKwkJCQkgIHU2NCBibG9jaywKKwkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgpCiB7CiAJc3RydWN0IGlub2RlICp4Yl9hbGxvY19pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2FsbG9jX2JoID0gTlVMTDsKQEAgLTE4MDMsNyArMTk0Miw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX3JlbW92ZShpbm9kZSwgYmxrX2JoKTsKKwlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19yZW1vdmUoaW5vZGUsIGJsa19iaCwgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTE4NjMsNiArMjAwMiw5IEBACiB7CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2kgPSBOVUxMOwogCWhhbmRsZV90ICpoYW5kbGU7CiAJaW50IHJldDsKIApAQCAtMTg3Miw4ICsyMDE0LDIxIEBACiAJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkpCiAJCXJldHVybiAwOwogCisJaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpIHsKKwkJcmV0ID0gb2NmczJfbG9ja19yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJCQkJICAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYyksCisJCQkJCSAgICAgICAxLCAmcmVmX3RyZWUsICZyZWZfcm9vdF9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlZl9jaSA9ICZyZWZfdHJlZS0+cmZfY2k7CisKKwl9CisKIAlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkgewotCQlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9yZW1vdmUoaW5vZGUsIGRpX2JoKTsKKwkJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfcmVtb3ZlKGlub2RlLCBkaV9iaCwKKwkJCQkJICAgICAgIHJlZl9jaSwgcmVmX3Jvb3RfYmgpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0xODgyLDcgKzIwMzcsOCBAQAogCiAJaWYgKGRpLT5pX3hhdHRyX2xvYykgewogCQlyZXQgPSBvY2ZzMl94YXR0cl9mcmVlX2Jsb2NrKGlub2RlLAotCQkJCQkgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3hhdHRyX2xvYykpOworCQkJCQkgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3hhdHRyX2xvYyksCisJCQkJCSAgICAgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTE4OTYsNyArMjA1Miw3IEBACiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xOTE2LDYgKzIwNzIsOSBAQAogb3V0X2NvbW1pdDoKIAlvY2ZzMl9jb21taXRfdHJhbnMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBoYW5kbGUpOwogb3V0OgorCWlmIChyZWZfdHJlZSkKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCByZWZfdHJlZSwgMSk7CisJYnJlbHNlKHJlZl9yb290X2JoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDgzLDYgKzIyNDIsODQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2JoLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCSAgICBpbnQgaW5kZXhlZCkKK3sKKwlpbnQgcmV0OworCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CisJdTMyIG51bV9nb3Q7CisJdTY0IGZpcnN0X2Jsa25vOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gIChzdHJ1Y3Qgb2NmczJfZGlub2RlICopaW5vZGVfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YmxrOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGlub2RlX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGVuZDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShvc2IsIGhhbmRsZSwgbWV0YV9hYywgMSwKKwkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKKwkJCQkgICAmZmlyc3RfYmxrbm8pOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBlbmQ7CisJfQorCisJbmV3X2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBmaXJzdF9ibGtubyk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUoaW5vZGUpLCBuZXdfYmgpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJICAgICAgbmV3X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBJbml0aWFsaXplIG9jZnMyX3hhdHRyX2Jsb2NrICovCisJeGJsayA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKiluZXdfYmgtPmJfZGF0YTsKKwltZW1zZXQoeGJsaywgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwlzdHJjcHkoKHZvaWQgKil4YmxrLCBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUpOworCXhibGstPnhiX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihvc2ItPnNsb3RfbnVtKTsKKwl4YmxrLT54Yl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOworCXhibGstPnhiX2ZzX2dlbmVyYXRpb24gPSBjcHVfdG9fbGUzMihvc2ItPmZzX2dlbmVyYXRpb24pOworCXhibGstPnhiX2Jsa25vID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOworCisJaWYgKGluZGV4ZWQpIHsKKwkJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHIgPSAmeGJsay0+eGJfYXR0cnMueGJfcm9vdDsKKwkJeHItPnh0X2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIoMSk7CisJCXhyLT54dF9sYXN0X2ViX2JsayA9IDA7CisJCXhyLT54dF9saXN0LmxfdHJlZV9kZXB0aCA9IDA7CisJCXhyLT54dF9saXN0LmxfY291bnQgPSBjcHVfdG9fbGUxNigKKwkJCQkJb2NmczJfeGF0dHJfcmVjc19wZXJfeGIoaW5vZGUtPmlfc2IpKTsKKwkJeHItPnh0X2xpc3QubF9uZXh0X2ZyZWVfcmVjID0gY3B1X3RvX2xlMTYoMSk7CisJCXhibGstPnhiX2ZsYWdzID0gY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfSU5ERVhFRCk7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGVuZDsKKwl9CisJZGktPmlfeGF0dHJfbG9jID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBpbm9kZV9iaCk7CisKKwkqcmV0X2JoID0gbmV3X2JoOworCW5ld19iaCA9IE5VTEw7CisKK2VuZDoKKwlicmVsc2UobmV3X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogb2NmczJfeGF0dHJfYmxvY2tfc2V0KCkKICAqCkBAIC0yMDk1LDYzICsyMzMyLDI0IEBACiAJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAgKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKIAloYW5kbGVfdCAqaGFuZGxlID0gY3R4dC0+aGFuZGxlOwogCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGJsayA9IE5VTEw7Ci0JdTE2IHN1YmFsbG9jX2JpdF9zdGFydDsKLQl1MzIgbnVtX2dvdDsKLQl1NjQgZmlyc3RfYmxrbm87CiAJaW50IHJldDsKIAogCWlmICgheHMtPnhhdHRyX2JoKSB7Ci0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIHhzLT5pbm9kZV9iaCwKLQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKLQkJaWYgKHJldCA8IDApIHsKKwkJcmV0ID0gb2NmczJfY3JlYXRlX3hhdHRyX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIHhzLT5pbm9kZV9iaCwKKwkJCQkJICAgICAgIGN0eHQtPm1ldGFfYWMsICZuZXdfYmgsIDApOworCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIGVuZDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX2NsYWltX21ldGFkYXRhKG9zYiwgaGFuZGxlLCBjdHh0LT5tZXRhX2FjLCAxLAotCQkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKLQkJCQkJICAgJmZpcnN0X2Jsa25vKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0KLQkJbmV3X2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBmaXJzdF9ibGtubyk7Ci0JCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBuZXdfYmgpOwotCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKLQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0KLQkJLyogSW5pdGlhbGl6ZSBvY2ZzMl94YXR0cl9ibG9jayAqLwogCQl4cy0+eGF0dHJfYmggPSBuZXdfYmg7Ci0JCXhibGsgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7Ci0JCW1lbXNldCh4YmxrLCAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwotCQlzdHJjcHkoKHZvaWQgKil4YmxrLCBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUpOwotCQl4YmxrLT54Yl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7Ci0JCXhibGstPnhiX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KHN1YmFsbG9jX2JpdF9zdGFydCk7Ci0JCXhibGstPnhiX2ZzX2dlbmVyYXRpb24gPSBjcHVfdG9fbGUzMihvc2ItPmZzX2dlbmVyYXRpb24pOwotCQl4YmxrLT54Yl9ibGtubyA9IGNwdV90b19sZTY0KGZpcnN0X2Jsa25vKTsKLQorCQl4YmxrID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhzLT54YXR0cl9iaC0+Yl9kYXRhOwogCQl4cy0+aGVhZGVyID0gJnhibGstPnhiX2F0dHJzLnhiX2hlYWRlcjsKIAkJeHMtPmJhc2UgPSAodm9pZCAqKXhzLT5oZWFkZXI7CiAJCXhzLT5lbmQgPSAodm9pZCAqKXhibGsgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJCXhzLT5oZXJlID0geHMtPmhlYWRlci0+eGhfZW50cmllczsKLQotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCWRpLT5pX3hhdHRyX2xvYyA9IGNwdV90b19sZTY0KGZpcnN0X2Jsa25vKTsKLQkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT5pbm9kZV9iaCk7CiAJfSBlbHNlCiAJCXhibGsgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeHMtPnhhdHRyX2JoLT5iX2RhdGE7CiAKQEAgLTIyNzMsNyArMjQ3MSw3IEBACiAJCW9sZF9pbl94YiA9IDE7CiAKIAkJaWYgKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSB7Ci0JCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsCisJCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUtPmlfc2IsCiAJCQkJCQkJYnVja2V0X3hoKHhicy0+YnVja2V0KSwKIAkJCQkJCQlpLCAmYmxvY2tfb2ZmLAogCQkJCQkJCSZuYW1lX29mZnNldCk7CkBAIC0yNDI4LDYgKzI2MjYsNyBAQAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGlzLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGJzLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0LAorCQkJCSAgICAgaW50IGV4dHJhX21ldGEsCiAJCQkJICAgICBpbnQgKmNyZWRpdHMpCiB7CiAJaW50IGNsdXN0ZXJzX2FkZCwgbWV0YV9hZGQsIHJldDsKQEAgLTI0NDQsNiArMjY0Myw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJbWV0YV9hZGQgKz0gZXh0cmFfbWV0YTsKIAltbG9nKDAsICJTZXQgeGF0dHIgJXMsIHJlc2VydmUgbWV0YSBibG9ja3MgPSAlZCwgY2x1c3RlcnMgPSAlZCwgIgogCSAgICAgImNyZWRpdHMgPSAlZFxuIiwgeGktPm5hbWUsIG1ldGFfYWRkLCBjbHVzdGVyc19hZGQsICpjcmVkaXRzKTsKIApAQCAtMjU5OCw3ICsyNzk4LDcgQEAKIAogCWlmICghcmV0KSB7CiAJCS8qIFVwZGF0ZSBpbm9kZSBjdGltZS4gKi8KLQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoY3R4dC0+aGFuZGxlLCBpbm9kZSwKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoY3R4dC0+aGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCiAJCQkJCSAgICAgIHhpcy0+aW5vZGVfYmgsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHJldCkgewpAQCAtMjcxMSwxMCArMjkxMSwxMSBAQAogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOwotCWludCByZXQsIGNyZWRpdHM7CisJaW50IHJldCwgY3JlZGl0cywgcmVmX21ldGEgPSAwLCByZWZfY3JlZGl0cyA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IGlub2RlICp0bF9pbm9kZSA9IG9zYi0+b3NiX3RsX2lub2RlOwogCXN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCBjdHh0ID0geyBOVUxMLCBOVUxMLCB9OworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSA9IE5VTEw7CiAKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyB4aSA9IHsKIAkJLm5hbWVfaW5kZXggPSBuYW1lX2luZGV4LApAQCAtMjc3OSw2ICsyOTgwLDE3IEBACiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCisJLyogQ2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaXMgcmVmY291bnRlZCBhbmQgZG8gc29tZSBwcmVwYXJ0aW9uLiAqLworCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMICYmCisJICAgICgheGlzLm5vdF9mb3VuZCB8fCAheGJzLm5vdF9mb3VuZCkpIHsKKwkJcmV0ID0gb2NmczJfcHJlcGFyZV9yZWZjb3VudF94YXR0cihpbm9kZSwgZGksICZ4aSwKKwkJCQkJCSAgICZ4aXMsICZ4YnMsICZyZWZfdHJlZSwKKwkJCQkJCSAgICZyZWZfbWV0YSwgJnJlZl9jcmVkaXRzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQogCiAJbXV0ZXhfbG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCkBAIC0yNzkzLDcgKzMwMDUsNyBAQAogCW11dGV4X3VubG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0ID0gb2NmczJfaW5pdF94YXR0cl9zZXRfY3R4dChpbm9kZSwgZGksICZ4aSwgJnhpcywKLQkJCQkJJnhicywgJmN0eHQsICZjcmVkaXRzKTsKKwkJCQkJJnhicywgJmN0eHQsIHJlZl9tZXRhLCAmY3JlZGl0cyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gY2xlYW51cDsKQEAgLTI4MDEsNyArMzAxMyw3IEBACiAKIAkvKiB3ZSBuZWVkIHRvIHVwZGF0ZSBpbm9kZSdzIGN0aW1lIGZpZWxkLCBzbyBhZGQgY3JlZGl0IGZvciBpdC4gKi8KIAljcmVkaXRzICs9IE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTOwotCWN0eHQuaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwljdHh0LmhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyArIHJlZl9jcmVkaXRzKTsKIAlpZiAoSVNfRVJSKGN0eHQuaGFuZGxlKSkgewogCQlyZXQgPSBQVFJfRVJSKGN0eHQuaGFuZGxlKTsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjgxOSw4ICszMDMxLDE2IEBACiAJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmN0eHQuZGVhbGxvYykpCiAJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOwogCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZjdHh0LmRlYWxsb2MpOworCiBjbGVhbnVwOgorCWlmIChyZWZfdHJlZSkKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCByZWZfdHJlZSwgMSk7CiAJdXBfd3JpdGUoJk9DRlMyX0koaW5vZGUpLT5pcF94YXR0cl9zZW0pOworCWlmICghdmFsdWUgJiYgIXJldCkgeworCQlyZXQgPSBvY2ZzMl90cnlfcmVtb3ZlX3JlZmNvdW50X3RyZWUoaW5vZGUsIGRpX2JoKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CiAJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCAxKTsKIGNsZWFudXBfbm9sb2NrOgogCWJyZWxzZShkaV9iaCk7CkBAIC0yODQ5LDcgKzMwNjksOCBAQAogCXU2NCBlX2Jsa25vID0gMDsKIAogCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7Ci0JCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihpbm9kZSwgZWwsIG5hbWVfaGFzaCwgJmViX2JoKTsKKwkJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgZWwsIG5hbWVfaGFzaCwKKwkJCQkgICAgICAmZWJfYmgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTI5MzEsNyArMzE1Miw3IEBACiAJCWlmIChjbXApCiAJCQljb250aW51ZTsKIAotCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsCisJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZS0+aV9zYiwKIAkJCQkJCQl4aCwKIAkJCQkJCQlpLAogCQkJCQkJCSZibG9ja19vZmYsCkBAIC0zMTc1LDcgKzMzOTYsNyBAQAogCXNpemVfdCByZXN1bHQ7CiB9OwogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKIAkJCQkJICAgICBpbnQgaW5kZXgsCiAJCQkJCSAgICAgaW50ICpibG9ja19vZmYsCkBAIC0zMTg4LDggKzM0MDksOCBAQAogCiAJbmFtZV9vZmZzZXQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZW50cmllc1tpbmRleF0ueGVfbmFtZV9vZmZzZXQpOwogCi0JKmJsb2NrX29mZiA9IG5hbWVfb2Zmc2V0ID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCSpuZXdfb2Zmc2V0ID0gbmFtZV9vZmZzZXQgJSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJKmJsb2NrX29mZiA9IG5hbWVfb2Zmc2V0ID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCSpuZXdfb2Zmc2V0ID0gbmFtZV9vZmZzZXQgJSBzYi0+c19ibG9ja3NpemU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMDksNyArMzQzMCw3IEBACiAJCXByZWZpeCA9IG9jZnMyX3hhdHRyX3ByZWZpeCh0eXBlKTsKIAogCQlpZiAocHJlZml4KSB7Ci0JCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsCisJCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUtPmlfc2IsCiAJCQkJCQkJCWJ1Y2tldF94aChidWNrZXQpLAogCQkJCQkJCQlpLAogCQkJCQkJCQkmYmxvY2tfb2ZmLApAQCAtMzIzMiwyMiArMzQ1MywxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfdHJlZV9saXN0X2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQsCi0JCQkJCSAgICAgY2hhciAqYnVmZmVyLAotCQkJCQkgICAgIHNpemVfdCBidWZmZXJfc2l6ZSkKK3N0YXRpYyBpbnQgb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCwKKwkJCQkJICAgeGF0dHJfdHJlZV9yZWNfZnVuYyAqcmVjX2Z1bmMsCisJCQkJCSAgIHZvaWQgKnBhcmEpCiB7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZ4dC0+eHRfbGlzdDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKilibGtfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnhiLT54Yl9hdHRycy54Yl9yb290Lnh0X2xpc3Q7CiAJaW50IHJldCA9IDA7CiAJdTMyIG5hbWVfaGFzaCA9IFVJTlRfTUFYLCBlX2Nwb3MgPSAwLCBudW1fY2x1c3RlcnMgPSAwOwogCXU2NCBwX2Jsa25vID0gMDsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9saXN0IHhsID0gewotCQkuYnVmZmVyID0gYnVmZmVyLAotCQkuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZSwKLQkJLnJlc3VsdCA9IDAsCi0JfTsKIAotCWlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSAwKQorCWlmICghZWwtPmxfbmV4dF9mcmVlX3JlYyB8fCAhcmVjX2Z1bmMpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKG5hbWVfaGFzaCA+IDApIHsKQEAgLTMyNTUsMTYgKzM0NzMsMTUgQEAKIAkJCQkJICAmZV9jcG9zLCAmbnVtX2NsdXN0ZXJzLCBlbCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIHBfYmxrbm8sIG51bV9jbHVzdGVycywKLQkJCQkJCSAgb2NmczJfbGlzdF94YXR0cl9idWNrZXQsCi0JCQkJCQkgICZ4bCk7CisJCXJldCA9IHJlY19mdW5jKGlub2RlLCBibGtfYmgsIHBfYmxrbm8sIGVfY3BvcywKKwkJCSAgICAgICBudW1fY2x1c3RlcnMsIHBhcmEpOwogCQlpZiAocmV0KSB7CiAJCQlpZiAocmV0ICE9IC1FUkFOR0UpCiAJCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQogCiAJCWlmIChlX2Nwb3MgPT0gMCkKQEAgLTMyNzMsNiArMzQ5MCwzNyBAQAogCQluYW1lX2hhc2ggPSBlX2Nwb3MgLSAxOwogCX0KIAorCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIGludCBvY2ZzMl9saXN0X3hhdHRyX3RyZWVfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgICB1NjQgYmxrbm8sIHUzMiBjcG9zLCB1MzIgbGVuLCB2b2lkICpwYXJhKQoreworCXJldHVybiBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgIG9jZnMyX2xpc3RfeGF0dHJfYnVja2V0LCBwYXJhKTsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl90cmVlX2xpc3RfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCwKKwkJCQkJICAgICBjaGFyICpidWZmZXIsCisJCQkJCSAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfbGlzdCB4bCA9IHsKKwkJLmJ1ZmZlciA9IGJ1ZmZlciwKKwkJLmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUsCisJCS5yZXN1bHQgPSAwLAorCX07CisKKwlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2luZGV4X2Jsb2NrKGlub2RlLCBibGtfYmgsCisJCQkJCSAgICAgIG9jZnMyX2xpc3RfeGF0dHJfdHJlZV9yZWMsICZ4bCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwogCXJldCA9IHhsLnJlc3VsdDsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMzQyNiw3ICszNjc0LDcgQEAKIAkgKi8KIAlkb3duX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgaW5vZGUsIHhiX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB4Yl9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC00MjYzLDkgKzQ1MTEsOSBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCiAJICAgICBwcmV2X2Nwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0X2Jsa25vKGZpcnN0KSk7CiAKLQlvY2ZzMl9pbml0X3hhdHRyX3RyZWVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgcm9vdF9iaCk7CisJb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoaW5vZGUpLCByb290X2JoKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgaW5vZGUsIHJvb3RfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHJvb3RfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQzMTksNyArNDU2Nyw3IEBACiAKIAltbG9nKDAsICJJbnNlcnQgJXUgY2x1c3RlcnMgYXQgYmxvY2sgJWxsdSBmb3IgeGF0dHIgYXQgJXVcbiIsCiAJICAgICBudW1fYml0cywgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgdl9zdGFydCk7Ci0JcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsICZldCwgdl9zdGFydCwgYmxvY2ssCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZldCwgdl9zdGFydCwgYmxvY2ssCiAJCQkJICBudW1fYml0cywgMCwgY3R4dC0+bWV0YV9hYyk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDc5OCwxMCArNTA0NiwxMyBAQAogCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSB4cy0+aGVyZTsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGJ1Y2tldF94aCh4cy0+YnVja2V0KTsKIAl2b2lkICpiYXNlOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7CisJCS52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcywKKwl9OwogCiAJQlVHX09OKCF4cy0+YmFzZSB8fCAheGUgfHwgb2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKTsKIAotCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZSwgeGgsCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKGlub2RlLT5pX3NiLCB4aCwKIAkJCQkJCXhlIC0geGgtPnhoX2VudHJpZXMsCiAJCQkJCQkmYmxvY2tfb2ZmLAogCQkJCQkJJm9mZnNldCk7CkBAIC00ODE0LDggKzUwNjUsMTAgQEAKIAl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKShiYXNlICsgb2Zmc2V0ICsKIAkJIE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSk7CiAKKwl2Yi52Yl94diA9IHh2OworCXZiLnZiX2JoID0geHMtPmJ1Y2tldC0+YnVfYmhzW2Jsb2NrX29mZl07CiAJcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgaGFuZGxlLAotCQkJCQkgICAgICB4diwgdmFsLCB2YWx1ZV9sZW4pOworCQkJCQkgICAgICAmdmIsIHZhbCwgdmFsdWVfbGVuKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiBvdXQ6CkBAIC00ODI2LDcgKzUwNzksOCBAQAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAogCQkJCSAgdTY0IGJsa25vLAogCQkJCSAgdTMyIGNwb3MsCi0JCQkJICB1MzIgbGVuKQorCQkJCSAgdTMyIGxlbiwKKwkJCQkgIHZvaWQgKnBhcmEpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKQEAgLTQ4MzgsMTQgKzUwOTIsMjIgQEAKIAlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCBkZWFsbG9jOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAotCW9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCByb290X2JoKTsKKwlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgb2NmczJfZGVsZXRlX3hhdHRyX2luX2J1Y2tldCwgcGFyYSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoaW5vZGUpLCByb290X2JoKTsKIAogCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZkZWFsbG9jKTsKIAogCW1sb2coMCwgInJtIHhhdHRyIGV4dGVudCByZWMgYXQgJXUgbGVuID0gJXUsIHN0YXJ0IGZyb20gJWxsdVxuIiwKIAkgICAgIGNwb3MsIGxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubyk7CiAKLQlvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShpbm9kZSwgYmxrbm8sIGxlbik7CisJb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoSU5PREVfQ0FDSEUoaW5vZGUpLCBibGtubywKKwkJCQkJICAgICAgIGxlbik7CiAKIAlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwgMCwgMSwgTlVMTCwgJm1ldGFfYWMpOwogCWlmIChyZXQpIHsKQEAgLTQ4NzAsMTQgKzUxMzIsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBpbm9kZSwgcm9vdF9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgcm9vdF9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGlub2RlLCAmZXQsIGNwb3MsIGxlbiwgaGFuZGxlLCBtZXRhX2FjLAorCXJldCA9IG9jZnMyX3JlbW92ZV9leHRlbnQoaGFuZGxlLCAmZXQsIGNwb3MsIGxlbiwgbWV0YV9hYywKIAkJCQkgICZkZWFsbG9jKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTUyMjAsNyArNTQ4Miw3IEBACiAJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCwKIAkJCQkJdm9pZCAqcGFyYSkKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMCwgcmVmX2NyZWRpdHM7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBidWNrZXRfeGgoYnVja2V0KTsKIAl1MTYgaTsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlOwpAQCAtNTIyOCw3ICs1NDkwLDkgQEAKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgY3R4dCA9IHtOVUxMLCBOVUxMLH07CiAJaW50IGNyZWRpdHMgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50X2NyZWRpdHMob3NiLT5zYikgKwogCQlvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7Ci0KKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJc3RydWN0IG9jZnMyX3JtX3hhdHRyX2J1Y2tldF9wYXJhICphcmdzID0KKwkJCShzdHJ1Y3Qgb2NmczJfcm1feGF0dHJfYnVja2V0X3BhcmEgKilwYXJhOwogCiAJb2NmczJfaW5pdF9kZWFsbG9jX2N0eHQoJmN0eHQuZGVhbGxvYyk7CiAKQEAgLTUyMzcsNyArNTUwMSwxNiBAQAogCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQogCQkJY29udGludWU7CiAKLQkJY3R4dC5oYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCQlyZXQgPSBvY2ZzMl9nZXRfeGF0dHJfdHJlZV92YWx1ZV9yb290KGlub2RlLT5pX3NiLCBidWNrZXQsCisJCQkJCQkgICAgICBpLCAmeHYsIE5VTEwpOworCisJCXJldCA9IG9jZnMyX2xvY2tfeGF0dHJfcmVtb3ZlX2FsbG9jYXRvcnMoaW5vZGUsIHh2LAorCQkJCQkJCSBhcmdzLT5yZWZfY2ksCisJCQkJCQkJIGFyZ3MtPnJlZl9yb290X2JoLAorCQkJCQkJCSAmY3R4dC5tZXRhX2FjLAorCQkJCQkJCSAmcmVmX2NyZWRpdHMpOworCisJCWN0eHQuaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzICsgcmVmX2NyZWRpdHMpOwogCQlpZiAoSVNfRVJSKGN0eHQuaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihjdHh0LmhhbmRsZSk7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC01MjQ4LDYzICs1NTIxLDE0OTAgQEAKIAkJCQkJCQlpLCAwLCAmY3R4dCk7CiAKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgY3R4dC5oYW5kbGUpOworCQlpZiAoY3R4dC5tZXRhX2FjKSB7CisJCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoY3R4dC5tZXRhX2FjKTsKKwkJCWN0eHQubWV0YV9hYyA9IE5VTEw7CisJCX0KIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKKwlpZiAoY3R4dC5tZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoY3R4dC5tZXRhX2FjKTsKIAlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAxKTsKIAlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmY3R4dC5kZWFsbG9jKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2RlbGV0ZV94YXR0cl9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqeGJfYmgpCisvKgorICogV2hlbmV2ZXIgd2UgbW9kaWZ5IGEgeGF0dHIgdmFsdWUgcm9vdCBpbiB0aGUgYnVja2V0KGUuZywgQ29XCisgKiBvciBjaGFuZ2UgdGhlIGV4dGVudCByZWNvcmQgZmxhZyksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUKKyAqIHRoZSBtZXRhZWNjIGZvciB0aGUgd2hvbGUgYnVja2V0LiBTbyBpdCBpcyBkb25lIGhlcmUuCisgKgorICogTm90ZToKKyAqIFdlIGhhdmUgdG8gZ2l2ZSB0aGUgZXh0cmEgY3JlZGl0cyBmb3IgdGhlIGNhbGxlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfcG9zdF9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgIHZvaWQgKnBhcmEpCiB7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9Ci0JCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeGJfYmgtPmJfZGF0YTsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnhiLT54Yl9hdHRycy54Yl9yb290Lnh0X2xpc3Q7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKilwYXJhOworCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgYnVja2V0LAorCQkJCQkJT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYnVja2V0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogU3BlY2lhbCBhY3Rpb24gd2UgbmVlZCBpZiB0aGUgeGF0dHIgdmFsdWUgaXMgcmVmY291bnRlZC4KKyAqCisgKiAxLiBJZiB0aGUgeGF0dHIgaXMgcmVmY291bnRlZCwgbG9jayB0aGUgdHJlZS4KKyAqIDIuIENvVyB0aGUgeGF0dHIgaWYgd2UgYXJlIHNldHRpbmcgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIHZhbHVlCisgKiAgICB3aWxsIGJlIHN0b3JlZCBvdXRzaWRlLgorICogMy4gSW4gb3RoZXIgY2FzZSwgZGVjcmVhc2VfcmVmY291bnQgd2lsbCB3b3JrIGZvciB1cywgc28ganVzdAorICogICAgbG9jayB0aGUgcmVmY291bnQgdHJlZSwgY2FsY3VsYXRlIHRoZSBtZXRhIGFuZCBjcmVkaXRzIGlzIE9LLgorICoKKyAqIFdlIGhhdmUgdG8gZG8gQ29XIGJlZm9yZSBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0IHNpbmNlCisgKiBjdXJyZW50bHkgQ29XIGlzIGEgY29tcGxldGVkIHRyYW5zYWN0aW9uLCB3aGlsZSB0aGlzIGZ1bmN0aW9uCisgKiB3aWxsIGFsc28gbG9jayB0aGUgYWxsb2NhdG9ycyBhbmQgbGV0IHVzIGRlYWRsb2NrLiBTbyB3ZSB3aWxsCisgKiBDb1cgdGhlIHdob2xlIHhhdHRyIHZhbHVlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3ByZXBhcmVfcmVmY291bnRfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGlzLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4YnMsCisJCQkJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmVmX3RyZWUsCisJCQkJCWludCAqbWV0YV9hZGQsCisJCQkJCWludCAqY3JlZGl0cykKK3sKIAlpbnQgcmV0ID0gMDsKLQl1MzIgbmFtZV9oYXNoID0gVUlOVF9NQVgsIGVfY3BvcywgbnVtX2NsdXN0ZXJzOwotCXU2NCBwX2Jsa25vOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGI7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwljaGFyICpiYXNlOworCXUzMiBwX2NsdXN0ZXIsIG51bV9jbHVzdGVyczsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzOworCWludCBuYW1lX29mZnNldCwgbmFtZV9sZW47CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiB2YjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50IHJlZmNvdW50OworCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpwID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKIAotCWlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSAwKQotCQlyZXR1cm4gMDsKKwlpZiAoIXhpcy0+bm90X2ZvdW5kKSB7CisJCXhlID0geGlzLT5oZXJlOworCQluYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CisJCW5hbWVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOworCQliYXNlID0geGlzLT5iYXNlOworCQl2Yi52Yl9iaCA9IHhpcy0+aW5vZGVfYmg7CisJCXZiLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpOworCX0gZWxzZSB7CisJCWludCBpLCBibG9ja19vZmYgPSAwOworCQl4YiA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKil4YnMtPnhhdHRyX2JoLT5iX2RhdGE7CisJCXhlID0geGJzLT5oZXJlOworCQluYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CisJCW5hbWVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOworCQlpID0geGJzLT5oZXJlIC0geGJzLT5oZWFkZXItPnhoX2VudHJpZXM7CiAKLQl3aGlsZSAobmFtZV9oYXNoID4gMCkgewotCQlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfcmVjKGlub2RlLCBuYW1lX2hhc2gsICZwX2Jsa25vLAotCQkJCQkgICZlX2Nwb3MsICZudW1fY2x1c3RlcnMsIGVsKTsKKwkJaWYgKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSB7CisJCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUtPmlfc2IsCisJCQkJCQkJYnVja2V0X3hoKHhicy0+YnVja2V0KSwKKwkJCQkJCQlpLCAmYmxvY2tfb2ZmLAorCQkJCQkJCSZuYW1lX29mZnNldCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJYmFzZSA9IGJ1Y2tldF9ibG9jayh4YnMtPmJ1Y2tldCwgYmxvY2tfb2ZmKTsKKwkJCXZiLnZiX2JoID0geGJzLT5idWNrZXQtPmJ1X2Joc1tibG9ja19vZmZdOworCQkJdmIudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3M7CisKKwkJCWlmIChvY2ZzMl9tZXRhX2VjYyhvc2IpKSB7CisJCQkJLypjcmVhdGUgcGFyYW1ldGVycyBmb3Igb2NmczJfcG9zdF9yZWZjb3VudC4gKi8KKwkJCQlidWNrZXQgPSB4YnMtPmJ1Y2tldDsKKwkJCQlyZWZjb3VudC5jcmVkaXRzID0gYnVja2V0LT5idV9ibG9ja3M7CisJCQkJcmVmY291bnQucGFyYSA9IGJ1Y2tldDsKKwkJCQlyZWZjb3VudC5mdW5jID0KKwkJCQkJb2NmczJfeGF0dHJfYnVja2V0X3Bvc3RfcmVmY291bnQ7CisJCQkJcCA9ICZyZWZjb3VudDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWJhc2UgPSB4YnMtPmJhc2U7CisJCQl2Yi52Yl9iaCA9IHhicy0+eGF0dHJfYmg7CisJCQl2Yi52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YjsKKwkJfQorCX0KKworCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCWdvdG8gb3V0OworCisJdmIudmJfeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKKwkJCQkoYmFzZSArIG5hbWVfb2Zmc2V0ICsgbmFtZV9sZW4pOworCisJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCAwLCAmcF9jbHVzdGVyLAorCQkJCSAgICAgICAmbnVtX2NsdXN0ZXJzLCAmdmIudmJfeHYtPnhyX2xpc3QsCisJCQkJICAgICAgICZleHRfZmxhZ3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFdlIGp1c3QgbmVlZCB0byBjaGVjayB0aGUgMXN0IGV4dGVudCByZWNvcmQsIHNpbmNlIHdlIGFsd2F5cworCSAqIENvVyB0aGUgd2hvbGUgeGF0dHIuIFNvIHRoZXJlIHNob3VsZG4ndCBiZSBhIHhhdHRyIHdpdGgKKwkgKiBzb21lIFJFRkNPVU5UIGV4dGVudCByZWNzIGFmdGVyIHRoZSAxc3Qgb25lLgorCSAqLworCWlmICghKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLCBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLAorCQkJCSAgICAgICAxLCByZWZfdHJlZSwgJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgZGVsZXRpbmcgdGhlIHhhdHRyIG9yIHRoZSBuZXcgc2l6ZSB3aWxsIGJlIHN0b3JlZCBpbnNpZGUsCisJICogY29vbCwgbGVhdmUgaXQgdGhlcmUsIHRoZSB4YXR0ciB0cnVuY2F0ZSBwcm9jZXNzIHdpbGwgcmVtb3ZlIHRoZW0KKwkgKiBmb3IgdXMoaXQgc3RpbGwgbmVlZHMgdGhlIHJlZmNvdW50IHRyZWUgbG9jayBhbmQgdGhlIG1ldGEsIGNyZWRpdHMpLgorCSAqIEFuZCB0aGUgd29yc2UgY2FzZSBpcyB0aGF0IGV2ZXJ5IGNsdXN0ZXIgdHJ1bmNhdGUgd2lsbCBzcGxpdCB0aGUKKwkgKiByZWZjb3VudCB0cmVlLCBhbmQgbWFrZSB0aGUgb3JpZ2luYWwgZXh0ZW50IGJlY29tZSAzLiBTbyB3ZSB3aWxsIG5lZWQKKwkgKiAyICogY2x1c3RlciBtb3JlIGV4dGVudCByZWNzIGF0IG1vc3QuCisJICovCisJaWYgKCF4aS0+dmFsdWUgfHwgeGktPnZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgeworCisJCXJldCA9IG9jZnMyX3JlZmNvdW50ZWRfeGF0dHJfZGVsZXRlX25lZWQoaW5vZGUsCisJCQkJCQkJICYoKnJlZl90cmVlKS0+cmZfY2ksCisJCQkJCQkJIHJlZl9yb290X2JoLCB2Yi52Yl94diwKKwkJCQkJCQkgbWV0YV9hZGQsIGNyZWRpdHMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9yZWZjb3VudF9jb3dfeGF0dHIoaW5vZGUsIGRpLCAmdmIsCisJCQkJICAgICAgICpyZWZfdHJlZSwgcmVmX3Jvb3RfYmgsIDAsCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KHZiLnZiX3h2LT54cl9jbHVzdGVycyksIHApOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCWJyZWxzZShyZWZfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFkZCB0aGUgUkVGQ09VTlRFRCBmbGFncyBmb3IgYWxsIHRoZSBleHRlbnQgcmVjIGluIG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QuCisgKiBUaGUgcGh5c2ljYWwgY2x1c3RlcnMgd2lsbCBiZSBhZGRlZCB0byByZWZjb3VudCB0cmVlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3ZhbHVlX2F0dGFjaF9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnZhbHVlX2V0LAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAorCQkJCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpyZWZjb3VudCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgY2x1c3RlcnMgPSBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpOworCXUzMiBjcG9zLCBwX2NsdXN0ZXIsIG51bV9jbHVzdGVyczsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnh2LT54cl9saXN0OworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisKKwljcG9zID0gMDsKKwl3aGlsZSAoY3BvcyA8IGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBfY2x1c3RlciwKKwkJCQkJICAgICAgICZudW1fY2x1c3RlcnMsIGVsLCAmZXh0X2ZsYWdzKTsKKworCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwkJaWYgKChleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpCisJCQljb250aW51ZTsKKworCQlCVUdfT04oIXBfY2x1c3Rlcik7CisKKwkJcmV0ID0gb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoaW5vZGUsIHZhbHVlX2V0LAorCQkJCQkgICAgICByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgICBjcG9zIC0gbnVtX2NsdXN0ZXJzLAorCQkJCQkgICAgICBwX2NsdXN0ZXIsIG51bV9jbHVzdGVycywKKwkJCQkJICAgICAgZGVhbGxvYywgcmVmY291bnQpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7Ci0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQl9CisJfQogCi0JCXJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfYnVja2V0cyhpbm9kZSwgcF9ibGtubywgbnVtX2NsdXN0ZXJzLAotCQkJCQkJICBvY2ZzMl9kZWxldGVfeGF0dHJfaW5fYnVja2V0LAotCQkJCQkJICBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2l2ZW4gYSBub3JtYWwgb2NmczJfeGF0dHJfaGVhZGVyLCByZWZjb3VudCBhbGwgdGhlIGVudHJpZXMgd2hpY2gKKyAqIGhhdmUgdmFsdWUgc3RvcmVkIG91dHNpZGUuCisgKiBVc2VkIGZvciB4YXR0cnMgc3RvcmVkIGluIGlub2RlIGFuZCBvY2ZzMl94YXR0cl9ibG9jay4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfbm9ybWFsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCWludCBpLCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGhlYWRlci0+eGhfY291bnQpOyBpKyspIHsKKwkJeGUgPSAmaGVhZGVyLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQljb250aW51ZTsKKworCQl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKSgodm9pZCAqKWhlYWRlciArCisJCQlsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsKKwkJCU9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSk7CisKKwkJdmItPnZiX3h2ID0geHY7CisJCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksIHZiKTsKKworCQlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV9hdHRhY2hfcmVmY291bnQoaW5vZGUsIHh2LCAmZXQsCisJCQkJCQkJcmVmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJCQlkZWFsbG9jLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQorCX0KIAotCQlyZXQgPSBvY2ZzMl9ybV94YXR0cl9jbHVzdGVyKGlub2RlLCB4Yl9iaCwKLQkJCQkJICAgICBwX2Jsa25vLCBlX2Nwb3MsIG51bV9jbHVzdGVycyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9pbmxpbmVfYXR0YWNoX3JlZmNvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZmVfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKQorCQkJCShmZV9iaC0+Yl9kYXRhICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KKwkJCQlsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSkpOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7CisJCS52Yl9iaCA9IGZlX2JoLAorCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGksCisJfTsKKworCXJldHVybiBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfbm9ybWFsKGlub2RlLCAmdmIsIGhlYWRlciwKKwkJCQkJCSAgcmVmX2NpLCByZWZfcm9vdF9iaCwgZGVhbGxvYyk7Cit9CisKK3N0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3ZhbHVlX3JlZmNvdW50X3BhcmEgeworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoOworCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jOworfTsKKworc3RhdGljIGludCBvY2ZzMl9nZXRfeGF0dHJfdHJlZV92YWx1ZV9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCwKKwkJCQkJICAgaW50IG9mZnNldCwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKip4diwKKwkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpCit7CisJaW50IHJldCwgYmxvY2tfb2ZmLCBuYW1lX29mZnNldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGJ1Y2tldF94aChidWNrZXQpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSAmeGgtPnhoX2VudHJpZXNbb2Zmc2V0XTsKKwl2b2lkICpiYXNlOworCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKHNiLAorCQkJCQkJYnVja2V0X3hoKGJ1Y2tldCksCisJCQkJCQlvZmZzZXQsCisJCQkJCQkmYmxvY2tfb2ZmLAorCQkJCQkJJm5hbWVfb2Zmc2V0KTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJYmFzZSA9IGJ1Y2tldF9ibG9jayhidWNrZXQsIGJsb2NrX29mZik7CisKKwkqeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikoYmFzZSArIG5hbWVfb2Zmc2V0ICsKKwkJCSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbikpOworCisJaWYgKGJoKQorCQkqYmggPSBidWNrZXQtPmJ1X2Joc1tibG9ja19vZmZdOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgYSBnaXZlbiB4YXR0ciBidWNrZXQsIHJlZmNvdW50IGFsbCB0aGUgZW50cmllcyB3aGljaAorICogaGF2ZSB2YWx1ZSBzdG9yZWQgb3V0c2lkZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJCSAgICAgdm9pZCAqcGFyYSkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfdmFsdWVfcmVmY291bnRfcGFyYSAqcmVmID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV92YWx1ZV9yZWZjb3VudF9wYXJhICopcGFyYTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWJ1Y2tldC0+YnVfYmhzWzBdLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0geworCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3MsCisJfTsKKwlzdHJ1Y3Qgb2NmczJfcG9zdF9yZWZjb3VudCByZWZjb3VudCA9IHsKKwkJLmNyZWRpdHMgPSBidWNrZXQtPmJ1X2Jsb2NrcywKKwkJLnBhcmEgPSBidWNrZXQsCisJCS5mdW5jID0gb2NmczJfeGF0dHJfYnVja2V0X3Bvc3RfcmVmY291bnQsCisJfTsKKwlzdHJ1Y3Qgb2NmczJfcG9zdF9yZWZjb3VudCAqcCA9IE5VTEw7CisKKwkvKiBXZSBvbmx5IG5lZWQgcG9zdF9yZWZjb3VudCBpZiB3ZSBzdXBwb3J0IG1ldGFlY2MuICovCisJaWYgKG9jZnMyX21ldGFfZWNjKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpCisJCXAgPSAmcmVmY291bnQ7CisKKwltbG9nKDAsICJyZWZjb3VudCBidWNrZXQgJWxsdSwgY291bnQgPSAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0X2Jsa25vKGJ1Y2tldCksCisJICAgICBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBvY2ZzMl9nZXRfeGF0dHJfdHJlZV92YWx1ZV9yb290KGlub2RlLT5pX3NiLCBidWNrZXQsIGksCisJCQkJCQkgICAgICAmdmIudmJfeHYsICZ2Yi52Yl9iaCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGVfY3BvcyA9PSAwKQotCQkJYnJlYWs7CisJCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LAorCQkJCQkJICAgSU5PREVfQ0FDSEUoaW5vZGUpLCAmdmIpOwogCi0JCW5hbWVfaGFzaCA9IGVfY3BvcyAtIDE7CisJCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX2F0dGFjaF9yZWZjb3VudChpbm9kZSwgdmIudmJfeHYsCisJCQkJCQkJJmV0LCByZWYtPnJlZl9jaSwKKwkJCQkJCQlyZWYtPnJlZl9yb290X2JoLAorCQkJCQkJCXJlZi0+ZGVhbGxvYywgcCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X3hhdHRyX3RyZWVfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgICB1NjQgYmxrbm8sIHUzMiBjcG9zLCB1MzIgbGVuLCB2b2lkICpwYXJhKQoreworCXJldHVybiBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgIG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV9yZWZjb3VudCwKKwkJCQkJICAgcGFyYSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYmxvY2tfYXR0YWNoX3JlZmNvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9CisJCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCisJaWYgKCEobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmhlYWRlciA9ICZ4Yi0+eGJfYXR0cnMueGJfaGVhZGVyOworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0geworCQkJLnZiX2JoID0gYmxrX2JoLAorCQkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiLAorCQl9OworCisJCXJldCA9IG9jZnMyX3hhdHRyX2F0dGFjaF9yZWZjb3VudF9ub3JtYWwoaW5vZGUsICZ2YiwgaGVhZGVyLAorCQkJCQkJCSByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkJCSBkZWFsbG9jKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV92YWx1ZV9yZWZjb3VudF9wYXJhIHBhcmEgPSB7CisJCQkucmVmX2NpID0gcmVmX2NpLAorCQkJLnJlZl9yb290X2JoID0gcmVmX3Jvb3RfYmgsCisJCQkuZGVhbGxvYyA9IGRlYWxsb2MsCisJCX07CisKKwkJcmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhpbm9kZSwgYmxrX2JoLAorCQkJCQkJb2NmczJfcmVmY291bnRfeGF0dHJfdHJlZV9yZWMsCisJCQkJCQkmcGFyYSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IG9jZnMyX3hhdHRyX2F0dGFjaF9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilmZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoID0gTlVMTDsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2lubGluZV9hdHRhY2hfcmVmY291bnQoaW5vZGUsIGZlX2JoLAorCQkJCQkJCSByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkJCSBkZWFsbG9jKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoIWRpLT5pX3hhdHRyX2xvYykKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX3hhdHRyX2Jsb2NrKGlub2RlLCBsZTY0X3RvX2NwdShkaS0+aV94YXR0cl9sb2MpLAorCQkJCSAgICAgJmJsa19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19hdHRhY2hfcmVmY291bnQoaW5vZGUsIGJsa19iaCwgcmVmX2NpLAorCQkJCQkJcmVmX3Jvb3RfYmgsIGRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCWJyZWxzZShibGtfYmgpOworb3V0OgorCisJcmV0dXJuIHJldDsKK30KKwordHlwZWRlZiBpbnQgKHNob3VsZF94YXR0cl9yZWZsaW5rZWQpKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpOworLyoKKyAqIFN0b3JlIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGluIHhhdHRyIHJlZmxpbmsuCisgKiBvbGRfYmggYW5kIG5ld19iaCBhcmUgaW5vZGUgYmggZm9yIHRoZSBvbGQgYW5kIG5ldyBpbm9kZS4KKyAqLworc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgeworCXN0cnVjdCBpbm9kZSAqb2xkX2lub2RlOworCXN0cnVjdCBpbm9kZSAqbmV3X2lub2RlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoOworCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jOworCXNob3VsZF94YXR0cl9yZWZsaW5rZWQgKnhhdHRyX3JlZmxpbmtlZDsKK307CisKKy8qCisgKiBHaXZlbiBhIHhhdHRyIGhlYWRlciBhbmQgeGUgb2Zmc2V0LAorICogcmV0dXJuIHRoZSBwcm9wZXIgeHYgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJoLgorICogeGF0dHIgaW4gaW5vZGUsIGJsb2NrIGFuZCB4YXR0ciB0cmVlIGhhdmUgZGlmZmVyZW50IGltcGxlbWVudGFpb25zLgorICovCit0eXBlZGVmIGludCAoZ2V0X3hhdHRyX3ZhbHVlX3Jvb3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkgICBpbnQgb2Zmc2V0LAorCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCSAgIHZvaWQgKnBhcmEpOworCisvKgorICogQ2FsY3VsYXRlIGFsbCB0aGUgeGF0dHIgdmFsdWUgcm9vdCBtZXRhZGF0YSBzdG9yZWQgaW4gdGhpcyB4YXR0ciBoZWFkZXIgYW5kCisgKiBjcmVkaXRzIHdlIG5lZWQgaWYgd2UgY3JlYXRlIHRoZW0gZnJvbSB0aGUgc2NyYXRjaC4KKyAqIFdlIHVzZSBnZXRfeGF0dHJfdmFsdWVfcm9vdCBzbyB0aGF0IGFsbCB0eXBlcyBvZiB4YXR0ciBjb250YWluZXIgY2FuIHVzZSBpdC4KKyAqLworc3RhdGljIGludCBvY2ZzMl92YWx1ZV9tZXRhc19pbl94YXR0cl9oZWFkZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLAorCQkJCQkgICAgIGludCAqbWV0YXMsIGludCAqY3JlZGl0cywKKwkJCQkJICAgICBpbnQgKm51bV9yZWNzLAorCQkJCQkgICAgIGdldF94YXR0cl92YWx1ZV9yb290ICpmdW5jLAorCQkJCQkgICAgIHZvaWQgKnBhcmEpCit7CisJaW50IGksIHJldCA9IDA7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2OworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZnVuYyhzYiwgYmgsIHhoLCBpLCAmeHYsIE5VTEwsIHBhcmEpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCSptZXRhcyArPSBsZTE2X3RvX2NwdSh4di0+eHJfbGlzdC5sX3RyZWVfZGVwdGgpICoKKwkJCSAgbGUxNl90b19jcHUoeHYtPnhyX2xpc3QubF9uZXh0X2ZyZWVfcmVjKTsKKworCQkqY3JlZGl0cyArPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKHNiLAorCQkJCQkJJmRlZl94di54di54cl9saXN0LAorCQkJCQkJbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKSk7CisKKwkJLyoKKwkJICogSWYgdGhlIHZhbHVlIGlzIGEgdHJlZSB3aXRoIGRlcHRoID4gMSwgV2UgZG9uJ3QgZ28gZGVlcAorCQkgKiB0byB0aGUgZXh0ZW50IGJsb2NrLCBzbyBqdXN0IGNhbGN1bGF0ZSBhIG1heGltdW0gcmVjb3JkIG51bS4KKwkJICovCisJCWlmICgheHYtPnhyX2xpc3QubF90cmVlX2RlcHRoKQorCQkJKm51bV9yZWNzICs9IHh2LT54cl9saXN0LmxfbmV4dF9mcmVlX3JlYzsKKwkJZWxzZQorCQkJKm51bV9yZWNzICs9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhzYiwKKwkJCQkJCQkgICAgICBYQVRUUl9TSVpFX01BWCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogVXNlZCBieSB4YXR0ciBpbm9kZSBhbmQgYmxvY2sgdG8gcmV0dXJuIHRoZSByaWdodCB4diBhbmQgYnVmZmVyX2hlYWQuICovCitzdGF0aWMgaW50IG9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkgICAgICBpbnQgb2Zmc2V0LAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCSAgICAgIHZvaWQgKnBhcmEpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSA9ICZ4aC0+eGhfZW50cmllc1tvZmZzZXRdOworCisJKnh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopKCh2b2lkICopeGggKworCQlsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsKKwkJT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pKTsKKworCWlmIChyZXRfYmgpCisJCSpyZXRfYmggPSBiaDsKKworCXJldHVybiAwOworfQorCisvKgorICogTG9jayB0aGUgbWV0YV9hYyBhbmQgY2FjdWxhdGUgaG93IG11Y2ggY3JlZGl0cyB3ZSBuZWVkIGZvciByZWZsaW5rIHhhdHRycy4KKyAqIEl0IGlzIG9ubHkgdXNlZCBmb3IgaW5saW5lIHhhdHRyIGFuZCB4YXR0ciBibG9jay4KKyAqLworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCWludCAqY3JlZGl0cywKKwkJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiptZXRhX2FjKQoreworCWludCByZXQsIG1ldGFfYWRkID0gMCwgbnVtX3JlY3MgPSAwOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisKKwkqY3JlZGl0cyA9IDA7CisKKwlyZXQgPSBvY2ZzMl92YWx1ZV9tZXRhc19pbl94YXR0cl9oZWFkZXIob3NiLT5zYiwgTlVMTCwgeGgsCisJCQkJCQkmbWV0YV9hZGQsIGNyZWRpdHMsICZudW1fcmVjcywKKwkJCQkJCW9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290LAorCQkJCQkJTlVMTCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgbmVlZCB0byBhZGQvbW9kaWZ5IG51bV9yZWNzIGluIHJlZmNvdW50IHRyZWUsIHNvIGp1c3QgY2FsY3VsYXRlCisJICogYW4gYXBwcm94aW1hdGUgbnVtYmVyIHdlIG5lZWQgZm9yIHJlZmNvdW50IHRyZWUgY2hhbmdlLgorCSAqIFNvbWV0aW1lcyB3ZSBuZWVkIHRvIHNwbGl0IHRoZSB0cmVlLCBhbmQgYWZ0ZXIgc3BsaXQsICBoYWxmIHJlY3MKKwkgKiB3aWxsIGJlIG1vdmVkIHRvIHRoZSBuZXcgYmxvY2ssIGFuZCBhIG5ldyBibG9jayBjYW4gb25seSBwcm92aWRlCisJICogaGFsZiBudW1iZXIgb2YgcmVjcy4gU28gd2UgbXVsdGlwbGUgbmV3IGJsb2NrcyBieSAyLgorCSAqLworCW51bV9yZWNzID0gbnVtX3JlY3MgLyBvY2ZzMl9yZWZjb3VudF9yZWNzX3Blcl9yYihvc2ItPnNiKSAqIDI7CisJbWV0YV9hZGQgKz0gbnVtX3JlY3M7CisJKmNyZWRpdHMgKz0gbnVtX3JlY3MgKyBudW1fcmVjcyAqIE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFM7CisJaWYgKGxlMzJfdG9fY3B1KHJiLT5yZl9mbGFncykgJiBPQ0ZTMl9SRUZDT1VOVF9UUkVFX0ZMKQorCQkqY3JlZGl0cyArPSBsZTE2X3RvX2NwdShyYi0+cmZfbGlzdC5sX3RyZWVfZGVwdGgpICoKKwkJCSAgICBsZTE2X3RvX2NwdShyYi0+cmZfbGlzdC5sX25leHRfZnJlZV9yZWMpICsgMTsKKwllbHNlCisJCSpjcmVkaXRzICs9IDE7CisKKwlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Mob3NiLCBtZXRhX2FkZCwgbWV0YV9hYyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdpdmVuIGEgeGF0dHIgaGVhZGVyLCByZWZsaW5rIGFsbCB0aGUgeGF0dHJzIGluIHRoaXMgY29udGFpbmVyLgorICogSXQgY2FuIGJlIHVzZWQgZm9yIGlub2RlLCBibG9jayBhbmQgYnVja2V0LgorICoKKyAqIE5PVEU6CisgKiBCZWZvcmUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uLCB0aGUgY2FsbGVyIGhhcyBtZW1jcHkgdGhlIHhhdHRyIGluCisgKiBvbGRfeGggdG8gdGhlIG5ld194aC4KKyAqCisgKiBJZiBhcmdzLnhhdHRyX3JlZmxpbmtlZCBpcyBzZXQsIGNhbGwgaXQgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHhlIHNob3VsZAorICogYmUgcmVmbGlua2VkIG9yIG5vdC4gSWYgbm90LCByZW1vdmUgaXQgZnJvbSB0aGUgbmV3IHhhdHRyIGhlYWRlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKm5ld194aCwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YiwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQkgICAgICBnZXRfeGF0dHJfdmFsdWVfcm9vdCAqZnVuYywKKwkJCQkgICAgICB2b2lkICpwYXJhKQoreworCWludCByZXQgPSAwLCBpLCBqOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhcmdzLT5vbGRfaW5vZGUtPmlfc2I7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp2YWx1ZV9iaDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlLCAqbGFzdDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYsICpuZXdfeHY7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGRhdGFfZXQ7CisJdTMyIGNsdXN0ZXJzLCBjcG9zLCBwX2NsdXN0ZXIsIG51bV9jbHVzdGVyczsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzID0gMDsKKworCW1sb2coMCwgInJlZmxpbmsgeGF0dHIgaW4gY29udGFpbmVyICVsbHUsIGNvdW50ID0gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9sZF9iaC0+Yl9ibG9ja25yLCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpKTsKKworCWxhc3QgPSAmbmV3X3hoLT54aF9lbnRyaWVzW2xlMTZfdG9fY3B1KG5ld194aC0+eGhfY291bnQpXTsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7IGkrKywgaisrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChhcmdzLT54YXR0cl9yZWZsaW5rZWQgJiYgIWFyZ3MtPnhhdHRyX3JlZmxpbmtlZCh4ZSkpIHsKKwkJCXhlID0gJm5ld194aC0+eGhfZW50cmllc1tqXTsKKworCQkJbGUxNl9hZGRfY3B1KCZuZXdfeGgtPnhoX2NvdW50LCAtMSk7CisJCQlpZiAobmV3X3hoLT54aF9jb3VudCkgeworCQkJCW1lbW1vdmUoeGUsIHhlICsgMSwKKwkJCQkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4ZSk7CisJCQkJbWVtc2V0KGxhc3QsIDAsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHdhbnQgaiB0byBpbmNyZWFzZSBpbiB0aGUgbmV4dCByb3VuZCBzaW5jZQorCQkJICogaXQgaXMgYWxyZWFkeSBtb3ZlZCBhaGVhZC4KKwkJCSAqLworCQkJai0tOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZnVuYyhzYiwgb2xkX2JoLCB4aCwgaSwgJnh2LCBOVUxMLCBwYXJhKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBmdW5jKHNiLCBuZXdfYmgsIG5ld194aCwgaiwgJm5ld194diwgJnZhbHVlX2JoLCBwYXJhKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBGb3IgdGhlIHhhdHRyIHdoaWNoIGhhcyBsX3RyZWVfZGVwdGggPSAwLCBhbGwgdGhlIGV4dGVudAorCQkgKiByZWNzIGhhdmUgYWxyZWFkeSBiZSBjb3BpZWQgdG8gdGhlIG5ldyB4aCB3aXRoIHRoZQorCQkgKiBwcm9wcmlhdGUgT0NGUzJfRVhUX1JFRkNPVU5URUQgZmxhZyB3ZSBqdXN0IG5lZWQgdG8KKwkJICogaW5jcmVhc2UgdGhlIHJlZm91bnQgY291bnQgaW50IHRoZSByZWZjb3VudCB0cmVlLgorCQkgKgorCQkgKiBGb3IgdGhlIHhhdHRyIHdoaWNoIGhhcyBsX3RyZWVfZGVwdGggPiAwLCB3ZSBuZWVkCisJCSAqIHRvIGluaXRpYWxpemUgaXQgdG8gdGhlIGVtcHR5IGRlZmF1bHQgdmFsdWUgcm9vdCwKKwkJICogYW5kIHRoZW4gaW5zZXJ0IHRoZSBleHRlbnRzIG9uZSBieSBvbmUuCisJCSAqLworCQlpZiAoeHYtPnhyX2xpc3QubF90cmVlX2RlcHRoKSB7CisJCQltZW1jcHkobmV3X3h2LCAmZGVmX3h2LCBzaXplb2YoZGVmX3h2KSk7CisJCQl2Yi0+dmJfeHYgPSBuZXdfeHY7CisJCQl2Yi0+dmJfYmggPSB2YWx1ZV9iaDsKKwkJCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmRhdGFfZXQsCisJCQkJCUlOT0RFX0NBQ0hFKGFyZ3MtPm5ld19pbm9kZSksIHZiKTsKKwkJfQorCisJCWNsdXN0ZXJzID0gbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKTsKKwkJY3BvcyA9IDA7CisJCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhhcmdzLT5vbGRfaW5vZGUsCisJCQkJCQkgICAgICAgY3BvcywKKwkJCQkJCSAgICAgICAmcF9jbHVzdGVyLAorCQkJCQkJICAgICAgICZudW1fY2x1c3RlcnMsCisJCQkJCQkgICAgICAgJnh2LT54cl9saXN0LAorCQkJCQkJICAgICAgICZleHRfZmxhZ3MpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJQlVHX09OKCFwX2NsdXN0ZXIpOworCisJCQlpZiAoeHYtPnhyX2xpc3QubF90cmVlX2RlcHRoKSB7CisJCQkJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsCisJCQkJCQkmZGF0YV9ldCwgY3BvcywKKwkJCQkJCW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcygKKwkJCQkJCQlhcmdzLT5vbGRfaW5vZGUtPmlfc2IsCisJCQkJCQkJcF9jbHVzdGVyKSwKKwkJCQkJCW51bV9jbHVzdGVycywgZXh0X2ZsYWdzLAorCQkJCQkJbWV0YV9hYyk7CisJCQkJaWYgKHJldCkgeworCQkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKworCQkJcmV0ID0gb2NmczJfaW5jcmVhc2VfcmVmY291bnQoaGFuZGxlLCBhcmdzLT5yZWZfY2ksCisJCQkJCQkgICAgICBhcmdzLT5yZWZfcm9vdF9iaCwKKwkJCQkJCSAgICAgIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLAorCQkJCQkJICAgICAgbWV0YV9hYywgYXJncy0+ZGVhbGxvYyk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwkJfQogCX0KIAogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MpCit7CisJaW50IHJldCA9IDAsIGNyZWRpdHMgPSAwOworCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihhcmdzLT5vbGRfaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilhcmdzLT5vbGRfYmgtPmJfZGF0YTsKKwlpbnQgaW5saW5lX3NpemUgPSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSk7CisJaW50IGhlYWRlcl9vZmYgPSBvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSAtIGlubGluZV9zaXplOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJCQkJKGFyZ3MtPm9sZF9iaC0+Yl9kYXRhICsgaGVhZGVyX29mZik7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqbmV3X3hoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJCQkJKGFyZ3MtPm5ld19iaC0+Yl9kYXRhICsgaGVhZGVyX29mZik7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpuZXdfb2k7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqbmV3X2RpOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7CisJCS52Yl9iaCA9IGFyZ3MtPm5ld19iaCwKKwkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpLAorCX07CisKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLT5yZWZfcm9vdF9iaCwKKwkJCQkJCSAgJmNyZWRpdHMsICZtZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoYXJncy0+bmV3X2lub2RlKSwKKwkJCQkgICAgICBhcmdzLT5uZXdfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW1lbWNweShhcmdzLT5uZXdfYmgtPmJfZGF0YSArIGhlYWRlcl9vZmYsCisJICAgICAgIGFyZ3MtPm9sZF9iaC0+Yl9kYXRhICsgaGVhZGVyX29mZiwgaW5saW5lX3NpemUpOworCisJbmV3X2RpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilhcmdzLT5uZXdfYmgtPmJfZGF0YTsKKwluZXdfZGktPmlfeGF0dHJfaW5saW5lX3NpemUgPSBjcHVfdG9fbGUxNihpbmxpbmVfc2l6ZSk7CisKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtPm9sZF9iaCwgeGgsCisJCQkJCSBhcmdzLT5uZXdfYmgsIG5ld194aCwgJnZiLCBtZXRhX2FjLAorCQkJCQkgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3QsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X29pID0gT0NGUzJfSShhcmdzLT5uZXdfaW5vZGUpOworCXNwaW5fbG9jaygmbmV3X29pLT5pcF9sb2NrKTsKKwluZXdfb2ktPmlwX2R5bl9mZWF0dXJlcyB8PSBPQ0ZTMl9IQVNfWEFUVFJfRkwgfCBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkw7CisJbmV3X2RpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KG5ld19vaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlzcGluX3VubG9jaygmbmV3X29pLT5pcF9sb2NrKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBhcmdzLT5uZXdfYmgpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dDoKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfYmgsCisJCQkJCSAgaW50IGluZGV4ZWQpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCisJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgMSwgJm1ldGFfYWMpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIE9DRlMyX1hBVFRSX0JMT0NLX0NSRUFURV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgImNyZWF0ZSBuZXcgeGF0dHIgYmxvY2sgZm9yIGlub2RlICVsbHUsIGluZGV4ID0gJWRcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZlX2JoLT5iX2Jsb2NrbnIsIGluZGV4ZWQpOworCXJldCA9IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhoYW5kbGUsIGlub2RlLCBmZV9iaCwKKwkJCQkgICAgICAgbWV0YV9hYywgcmV0X2JoLCBpbmRleGVkKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0OgorCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYmxvY2soc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2Jsa19iaCkKK3sKKwlpbnQgcmV0ID0gMCwgY3JlZGl0cyA9IDA7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqbmV3X29pID0gT0NGUzJfSShhcmdzLT5uZXdfaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKm5ld19kaTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGFyZ3MtPm5ld19pbm9kZS0+aV9zYik7CisJaW50IGhlYWRlcl9vZmYgPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssIHhiX2F0dHJzLnhiX2hlYWRlcik7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopYmxrX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSAmeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKm5ld194YiA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopbmV3X2Jsa19iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKm5ld194aCA9ICZuZXdfeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYzsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0geworCQkudmJfYmggPSBuZXdfYmxrX2JoLAorCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIsCisJfTsKKworCXJldCA9IG9jZnMyX3JlZmxpbmtfbG9ja194YXR0cl9hbGxvY2F0b3JzKG9zYiwgeGgsIGFyZ3MtPnJlZl9yb290X2JoLAorCQkJCQkJICAmY3JlZGl0cywgJm1ldGFfYWMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE9uZSBtb3JlIGNyZWRpdHMgaW4gY2FzZSB3ZSBuZWVkIHRvIGFkZCB4YXR0ciBmbGFncyBpbiBuZXcgaW5vZGUuICovCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzICsgMSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShuZXdfb2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkpIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkgICAgICBJTk9ERV9DQUNIRShhcmdzLT5uZXdfaW5vZGUpLAorCQkJCQkgICAgICBhcmdzLT5uZXdfYmgsCisJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBJTk9ERV9DQUNIRShhcmdzLT5uZXdfaW5vZGUpLAorCQkJCSAgICAgIG5ld19ibGtfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW1lbWNweShuZXdfYmxrX2JoLT5iX2RhdGEgKyBoZWFkZXJfb2ZmLCBibGtfYmgtPmJfZGF0YSArIGhlYWRlcl9vZmYsCisJICAgICAgIG9zYi0+c2ItPnNfYmxvY2tzaXplIC0gaGVhZGVyX29mZik7CisKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGJsa19iaCwgeGgsCisJCQkJCSBuZXdfYmxrX2JoLCBuZXdfeGgsICZ2YiwgbWV0YV9hYywKKwkJCQkJIG9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290LCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfYmxrX2JoKTsKKworCWlmICghKG5ld19vaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSkgeworCQluZXdfZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWFyZ3MtPm5ld19iaC0+Yl9kYXRhOworCQlzcGluX2xvY2soJm5ld19vaS0+aXBfbG9jayk7CisJCW5ld19vaS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0hBU19YQVRUUl9GTDsKKwkJbmV3X2RpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KG5ld19vaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwkJc3Bpbl91bmxvY2soJm5ld19vaS0+aXBfbG9jayk7CisKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGFyZ3MtPm5ld19iaCk7CisJfQorCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dDoKKwlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqcmVmbGluazsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9ibGtfYmg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmxrX2JoOworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKm9sZF9idWNrZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqbmV3X2J1Y2tldDsKK307CisKKy8qCisgKiBOT1RFOgorICogV2UgaGF2ZSB0byBoYW5kbGUgdGhlIGNhc2UgdGhhdCBib3RoIG9sZCBidWNrZXQgYW5kIG5ldyBidWNrZXQKKyAqIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgcmlnaHQgcmV0X2JoLgorICogU28gVGhlIGNhbGxlciBtdXN0IGdpdmUgdXMgdGhlIHJpZ2h0IGJoLgorICovCitzdGF0aWMgaW50IG9jZnMyX2dldF9yZWZsaW5rX3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsCisJCQkJCWludCBvZmZzZXQsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9iaCwKKwkJCQkJdm9pZCAqcGFyYSkKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqKXBhcmE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0OworCisJaWYgKGJoID09IGFyZ3MtPm9sZF9idWNrZXQtPmJ1X2Joc1swXSkKKwkJYnVja2V0ID0gYXJncy0+b2xkX2J1Y2tldDsKKwllbHNlCisJCWJ1Y2tldCA9IGFyZ3MtPm5ld19idWNrZXQ7CisKKwlyZXR1cm4gb2NmczJfZ2V0X3hhdHRyX3RyZWVfdmFsdWVfcm9vdChzYiwgYnVja2V0LCBvZmZzZXQsCisJCQkJCSAgICAgICB4diwgcmV0X2JoKTsKK30KKworc3RydWN0IG9jZnMyX3ZhbHVlX3RyZWVfbWV0YXMgeworCWludCBudW1fbWV0YXM7CisJaW50IGNyZWRpdHM7CisJaW50IG51bV9yZWNzOworfTsKKworc3RhdGljIGludCBvY2ZzMl92YWx1ZV90cmVlX21ldGFzX2luX2J1Y2tldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkJaW50IG9mZnNldCwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKip4diwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCQl2b2lkICpwYXJhKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCA9CisJCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKilwYXJhOworCisJcmV0dXJuIG9jZnMyX2dldF94YXR0cl90cmVlX3ZhbHVlX3Jvb3Qoc2IsIGJ1Y2tldCwgb2Zmc2V0LAorCQkJCQkgICAgICAgeHYsIHJldF9iaCk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY2FsY192YWx1ZV90cmVlX21ldGFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAorCQkJCSAgICAgIHZvaWQgKnBhcmEpCit7CisJc3RydWN0IG9jZnMyX3ZhbHVlX3RyZWVfbWV0YXMgKm1ldGFzID0KKwkJCShzdHJ1Y3Qgb2NmczJfdmFsdWVfdHJlZV9tZXRhcyAqKXBhcmE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilidWNrZXQtPmJ1X2Joc1swXS0+Yl9kYXRhOworCisJLyogQWRkIHRoZSBjcmVkaXRzIGZvciB0aGlzIGJ1Y2tldCBmaXJzdC4gKi8KKwltZXRhcy0+Y3JlZGl0cyArPSBidWNrZXQtPmJ1X2Jsb2NrczsKKwlyZXR1cm4gb2NmczJfdmFsdWVfbWV0YXNfaW5feGF0dHJfaGVhZGVyKGlub2RlLT5pX3NiLCBidWNrZXQtPmJ1X2Joc1swXSwKKwkJCQkJeGgsICZtZXRhcy0+bnVtX21ldGFzLAorCQkJCQkmbWV0YXMtPmNyZWRpdHMsICZtZXRhcy0+bnVtX3JlY3MsCisJCQkJCW9jZnMyX3ZhbHVlX3RyZWVfbWV0YXNfaW5fYnVja2V0LAorCQkJCQlidWNrZXQpOworfQorCisvKgorICogR2l2ZW4gYSB4YXR0ciBleHRlbnQgcmVjIHN0YXJ0aW5nIGZyb20gYmxrbm8gYW5kIGhhdmluZyBsZW4gY2x1c3RlcnMsCisgKiBpdGVyYXRlIGFsbCB0aGUgYnVja2V0cyBjYWxjdWxhdGUgaG93IG11Y2ggbWV0YWRhdGEgd2UgbmVlZCBmb3IgcmVmbGlua2luZworICogYWxsIHRoZSBvY2ZzMl94YXR0cl92YWx1ZV9yb290IGFuZCBsb2NrIHRoZSBhbGxvY2F0b3JzIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycygKKwkJCQlzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICp4dF9ldCwKKwkJCQl1NjQgYmxrbm8sIHUzMiBsZW4sIGludCAqY3JlZGl0cywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKm1ldGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKipkYXRhX2FjKQoreworCWludCByZXQsIG51bV9mcmVlX2V4dGVudHM7CisJc3RydWN0IG9jZnMyX3ZhbHVlX3RyZWVfbWV0YXMgbWV0YXM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihhcmdzLT5yZWZsaW5rLT5vbGRfaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisKKwltZW1zZXQoJm1ldGFzLCAwLCBzaXplb2YobWV0YXMpKTsKKworCXJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfYnVja2V0cyhhcmdzLT5yZWZsaW5rLT5vbGRfaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgb2NmczJfY2FsY192YWx1ZV90cmVlX21ldGFzLCAmbWV0YXMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkqY3JlZGl0cyA9IG1ldGFzLmNyZWRpdHM7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB3ZSBuZWVkIGZvciByZWZjb3VudCB0cmVlIGNoYW5nZS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gYWRkL21vZGlmeSBudW1fcmVjcyBpbiByZWZjb3VudCB0cmVlLCBzbyBqdXN0IGNhbGN1bGF0ZQorCSAqIGFuIGFwcHJveGltYXRlIG51bWJlciB3ZSBuZWVkIGZvciByZWZjb3VudCB0cmVlIGNoYW5nZS4KKwkgKiBTb21ldGltZXMgd2UgbmVlZCB0byBzcGxpdCB0aGUgdHJlZSwgYW5kIGFmdGVyIHNwbGl0LCAgaGFsZiByZWNzCisJICogd2lsbCBiZSBtb3ZlZCB0byB0aGUgbmV3IGJsb2NrLCBhbmQgYSBuZXcgYmxvY2sgY2FuIG9ubHkgcHJvdmlkZQorCSAqIGhhbGYgbnVtYmVyIG9mIHJlY3MuIFNvIHdlIG11bHRpcGxlIG5ldyBibG9ja3MgYnkgMi4KKwkgKiBJbiB0aGUgZW5kLCB3ZSBoYXZlIHRvIGFkZCBjcmVkaXRzIGZvciBtb2RpZnlpbmcgdGhlIGFscmVhZHkKKwkgKiBleGlzdGVkIHJlZmNvdW50IGJsb2NrLgorCSAqLworCXJiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKWFyZ3MtPnJlZmxpbmstPnJlZl9yb290X2JoLT5iX2RhdGE7CisJbWV0YXMubnVtX3JlY3MgPQorCQkobWV0YXMubnVtX3JlY3MgKyBvY2ZzMl9yZWZjb3VudF9yZWNzX3Blcl9yYihvc2ItPnNiKSAtIDEpIC8KKwkJIG9jZnMyX3JlZmNvdW50X3JlY3NfcGVyX3JiKG9zYi0+c2IpICogMjsKKwltZXRhcy5udW1fbWV0YXMgKz0gbWV0YXMubnVtX3JlY3M7CisJKmNyZWRpdHMgKz0gbWV0YXMubnVtX3JlY3MgKworCQkgICAgbWV0YXMubnVtX3JlY3MgKiBPQ0ZTMl9FWFBBTkRfUkVGQ09VTlRfVFJFRV9DUkVESVRTOworCWlmIChsZTMyX3RvX2NwdShyYi0+cmZfZmxhZ3MpICYgT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCkKKwkJKmNyZWRpdHMgKz0gbGUxNl90b19jcHUocmItPnJmX2xpc3QubF90cmVlX2RlcHRoKSAqCisJCQkgICAgbGUxNl90b19jcHUocmItPnJmX2xpc3QubF9uZXh0X2ZyZWVfcmVjKSArIDE7CisJZWxzZQorCQkqY3JlZGl0cyArPSAxOworCisJLyogY291bnQgaW4gdGhlIHhhdHRyIHRyZWUgY2hhbmdlLiAqLworCW51bV9mcmVlX2V4dGVudHMgPSBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKG9zYiwgeHRfZXQpOworCWlmIChudW1fZnJlZV9leHRlbnRzIDwgMCkgeworCQlyZXQgPSBudW1fZnJlZV9leHRlbnRzOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChudW1fZnJlZV9leHRlbnRzIDwgbGVuKQorCQltZXRhcy5udW1fbWV0YXMgKz0gb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKHh0X2V0LT5ldF9yb290X2VsKTsKKworCSpjcmVkaXRzICs9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwKKwkJCQkJICAgICAgeHRfZXQtPmV0X3Jvb3RfZWwsIGxlbik7CisKKwlpZiAobWV0YXMubnVtX21ldGFzKSB7CisJCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIG1ldGFzLm51bV9tZXRhcywKKwkJCQkJCQltZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAobGVuKSB7CisJCXJldCA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCBsZW4sIGRhdGFfYWMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KK291dDoKKwlpZiAocmV0KSB7CisJCWlmICgqbWV0YV9hYykgeworCQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KCptZXRhX2FjKTsKKwkJCW1ldGFfYWMgPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQl1NjQgYmxrbm8sIHU2NCBuZXdfYmxrbm8sIHUzMiBjbHVzdGVycywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQlzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MpCit7CisJaW50IGksIGosIHJldCA9IDA7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGFyZ3MtPnJlZmxpbmstPm9sZF9pbm9kZS0+aV9zYjsKKwl1MzIgYnBjID0gb2NmczJfeGF0dHJfYnVja2V0c19wZXJfY2x1c3RlcihPQ0ZTMl9TQihzYikpOworCXUzMiBudW1fYnVja2V0cyA9IGNsdXN0ZXJzICogYnBjOworCWludCBicGIgPSBhcmdzLT5vbGRfYnVja2V0LT5idV9ibG9ja3M7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiB2YiA9IHsKKwkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzLAorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKywgYmxrbm8gKz0gYnBiLCBuZXdfYmxrbm8gKz0gYnBiKSB7CisJCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KGFyZ3MtPm9sZF9idWNrZXQsIGJsa25vKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9pbml0X3hhdHRyX2J1Y2tldChhcmdzLT5uZXdfYnVja2V0LCBuZXdfYmxrbm8pOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFRoZSByZWFsIGJ1Y2tldCBudW0gaW4gdGhpcyBzZXJpZXMgb2YgYmxvY2tzIGlzIHN0b3JlZAorCQkgKiBpbiB0aGUgMXN0IGJ1Y2tldC4KKwkJICovCisJCWlmIChpID09IDApCisJCQludW1fYnVja2V0cyA9IGxlMTZfdG9fY3B1KAorCQkJCWJ1Y2tldF94aChhcmdzLT5vbGRfYnVja2V0KS0+eGhfbnVtX2J1Y2tldHMpOworCisJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsCisJCQkJCQlhcmdzLT5uZXdfYnVja2V0LAorCQkJCQkJT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgYnBiOyBqKyspCisJCQltZW1jcHkoYnVja2V0X2Jsb2NrKGFyZ3MtPm5ld19idWNrZXQsIGopLAorCQkJICAgICAgIGJ1Y2tldF9ibG9jayhhcmdzLT5vbGRfYnVja2V0LCBqKSwKKwkJCSAgICAgICBzYi0+c19ibG9ja3NpemUpOworCisJCW9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYXJncy0+bmV3X2J1Y2tldCk7CisKKwkJcmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLT5yZWZsaW5rLAorCQkJCQlhcmdzLT5vbGRfYnVja2V0LT5idV9iaHNbMF0sCisJCQkJCWJ1Y2tldF94aChhcmdzLT5vbGRfYnVja2V0KSwKKwkJCQkJYXJncy0+bmV3X2J1Y2tldC0+YnVfYmhzWzBdLAorCQkJCQlidWNrZXRfeGgoYXJncy0+bmV3X2J1Y2tldCksCisJCQkJCSZ2YiwgbWV0YV9hYywKKwkJCQkJb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdCwKKwkJCQkJYXJncyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogUmUtYWNjZXNzIGFuZCBkaXJ0eSB0aGUgYnVja2V0IHRvIGNhbGN1bGF0ZSBtZXRhZWNjLgorCQkgKiBCZWNhdXNlIHdlIG1heSBleHRlbmQgdGhlIHRyYW5zYWN0aW9uIGluIHJlZmxpbmtfeGF0dHJfaGVhZGVyCisJCSAqIHdoaWNoIHdpbGwgbGV0IHRoZSBhbHJlYWR5IGFjY2Vzc2VkIGJsb2NrIGdvbmUuCisJCSAqLworCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9hY2Nlc3MoaGFuZGxlLAorCQkJCQkJYXJncy0+bmV3X2J1Y2tldCwKKwkJCQkJCU9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9kaXJ0eShoYW5kbGUsIGFyZ3MtPm5ld19idWNrZXQpOworCQlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoYXJncy0+b2xkX2J1Y2tldCk7CisJCW9jZnMyX3hhdHRyX2J1Y2tldF9yZWxzZShhcmdzLT5uZXdfYnVja2V0KTsKKwl9CisKKwlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoYXJncy0+b2xkX2J1Y2tldCk7CisJb2NmczJfeGF0dHJfYnVja2V0X3JlbHNlKGFyZ3MtPm5ld19idWNrZXQpOworCXJldHVybiByZXQ7Cit9CisvKgorICogQ3JlYXRlIHRoZSBzYW1lIHhhdHRyIGV4dGVudCByZWNvcmQgaW4gdGhlIG5ldyBpbm9kZSdzIHhhdHRyIHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9yZWMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgdTY0IGJsa25vLAorCQkJCSAgIHUzMiBjcG9zLAorCQkJCSAgIHUzMiBsZW4sCisJCQkJICAgdm9pZCAqcGFyYSkKK3sKKwlpbnQgcmV0LCBjcmVkaXRzID0gMDsKKwl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnM7CisJdTY0IG5ld19ibGtubzsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCW9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZSgmZXQsCisJCQkJCSAgSU5PREVfQ0FDSEUoYXJncy0+cmVmbGluay0+bmV3X2lub2RlKSwKKwkJCQkJICBhcmdzLT5uZXdfYmxrX2JoKTsKKworCXJldCA9IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhhcmdzLCAmZXQsIGJsa25vLAorCQkJCQkJICAgICAgbGVuLCAmY3JlZGl0cywKKwkJCQkJCSAgICAgICZtZXRhX2FjLCAmZGF0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9jbHVzdGVycyhvc2IsIGhhbmRsZSwgZGF0YV9hYywKKwkJCQkgICBsZW4sICZwX2NsdXN0ZXIsICZudW1fY2x1c3RlcnMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X2Jsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9zYi0+c2IsIHBfY2x1c3Rlcik7CisKKwltbG9nKDAsICJyZWZsaW5rIHhhdHRyIGJ1Y2tldHMgJWxsdSB0byAlbGx1LCBsZW4gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vLCAodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubywgbGVuKTsKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBibGtubywgbmV3X2Jsa25vLCBsZW4sCisJCQkJCSAgbWV0YV9hYywgZGF0YV9hYywgYXJncyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwltbG9nKDAsICJpbnNlcnQgbmV3IHhhdHRyIGV4dGVudCByZWMgc3RhcnQgJWxsdSBsZW4gJXUgdG8gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubywgbGVuLCBjcG9zKTsKKwlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgJmV0LCBjcG9zLCBuZXdfYmxrbm8sCisJCQkJICBsZW4sIDAsIG1ldGFfYWMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCitvdXQ6CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwlpZiAoZGF0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDcmVhdGUgcmVmbGlua2VkIHhhdHRyIGJ1Y2tldHMuCisgKiBXZSB3aWxsIGFkZCBidWNrZXQgb25lIGJ5IG9uZSwgYW5kIHJlZmNvdW50IGFsbCB0aGUgeGF0dHJzIGluIHRoZSBidWNrZXQKKyAqIGlmIHRoZXkgYXJlIHN0b3JlZCBvdXRzaWRlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncywKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2Jsa19iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyBwYXJhOworCisJbWVtc2V0KCZwYXJhLCAwLCBzaXplb2YocGFyYSkpOworCXBhcmEucmVmbGluayA9IGFyZ3M7CisJcGFyYS5vbGRfYmxrX2JoID0gYmxrX2JoOworCXBhcmEubmV3X2Jsa19iaCA9IG5ld19ibGtfYmg7CisKKwlwYXJhLm9sZF9idWNrZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfbmV3KGFyZ3MtPm9sZF9pbm9kZSk7CisJaWYgKCFwYXJhLm9sZF9idWNrZXQpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGFyYS5uZXdfYnVja2V0ID0gb2NmczJfeGF0dHJfYnVja2V0X25ldyhhcmdzLT5uZXdfaW5vZGUpOworCWlmICghcGFyYS5uZXdfYnVja2V0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhhcmdzLT5vbGRfaW5vZGUsIGJsa19iaCwKKwkJCQkJICAgICAgb2NmczJfcmVmbGlua194YXR0cl9yZWMsCisJCQkJCSAgICAgICZwYXJhKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dDoKKwlvY2ZzMl94YXR0cl9idWNrZXRfZnJlZShwYXJhLm9sZF9idWNrZXQpOworCW9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHBhcmEubmV3X2J1Y2tldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2luX2Jsb2NrKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLAorCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCkKK3sKKwlpbnQgcmV0LCBpbmRleGVkID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19ibGtfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCisKKwlpZiAobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpCisJCWluZGV4ZWQgPSAxOworCisJcmV0ID0gb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKGFyZ3MtPm5ld19pbm9kZSwgYXJncy0+bmV3X2JoLAorCQkJCQkgICAgICZuZXdfYmxrX2JoLCBpbmRleGVkKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCEobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpKQorCQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7CisJZWxzZQorCQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWUoYXJncywgYmxrX2JoLCBuZXdfYmxrX2JoKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dDoKKwlicmVsc2UobmV3X2Jsa19iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpCit7CisJaW50IHR5cGUgPSBvY2ZzMl94YXR0cl9nZXRfdHlwZSh4ZSk7CisKKwlyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSAmJgorCSAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MgJiYKKwkgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDsKK30KKworaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJIHN0cnVjdCBpbm9kZSAqbmV3X2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCQkJIGJvb2wgcHJlc2VydmVfc2VjdXJpdHkpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayBhcmdzOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0kob2xkX2lub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopb2xkX2JoLT5iX2RhdGE7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0IGRlYWxsb2M7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCisJcmV0ID0gb2NmczJfbG9ja19yZWZjb3VudF90cmVlKE9DRlMyX1NCKG9sZF9pbm9kZS0+aV9zYiksCisJCQkJICAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYyksCisJCQkJICAgICAgIDEsICZyZWZfdHJlZSwgJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJb2NmczJfaW5pdF9kZWFsbG9jX2N0eHQoJmRlYWxsb2MpOworCisJYXJncy5vbGRfaW5vZGUgPSBvbGRfaW5vZGU7CisJYXJncy5uZXdfaW5vZGUgPSBuZXdfaW5vZGU7CisJYXJncy5vbGRfYmggPSBvbGRfYmg7CisJYXJncy5uZXdfYmggPSBuZXdfYmg7CisJYXJncy5yZWZfY2kgPSAmcmVmX3RyZWUtPnJmX2NpOworCWFyZ3MucmVmX3Jvb3RfYmggPSByZWZfcm9vdF9iaDsKKwlhcmdzLmRlYWxsb2MgPSAmZGVhbGxvYzsKKwlpZiAocHJlc2VydmVfc2VjdXJpdHkpCisJCWFyZ3MueGF0dHJfcmVmbGlua2VkID0gTlVMTDsKKwllbHNlCisJCWFyZ3MueGF0dHJfcmVmbGlua2VkID0gb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eTsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5saW5lKCZhcmdzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorCisJaWYgKCFkaS0+aV94YXR0cl9sb2MpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYmxvY2sob2xkX2lub2RlLCBsZTY0X3RvX2NwdShkaS0+aV94YXR0cl9sb2MpLAorCQkJCSAgICAgJmJsa19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJcmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jaygmYXJncywgYmxrX2JoKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlicmVsc2UoYmxrX2JoKTsKKworb3V0X3VubG9jazoKKwlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShPQ0ZTMl9TQihvbGRfaW5vZGUtPmlfc2IpLAorCQkJCSAgIHJlZl90cmVlLCAxKTsKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCisJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmRlYWxsb2MpKSB7CisJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChPQ0ZTMl9TQihvbGRfaW5vZGUtPmlfc2IpLCAxKTsKKwkJb2NmczJfcnVuX2RlYWxsb2NzKE9DRlMyX1NCKG9sZF9pbm9kZS0+aV9zYiksICZkZWFsbG9jKTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSW5pdGlhbGl6ZSBzZWN1cml0eSBhbmQgYWNsIGZvciBhIGFscmVhZHkgY3JlYXRlZCBpbm9kZS4KKyAqIFVzZWQgZm9yIHJlZmxpbmsgYSBub24tcHJlc2VydmUtc2VjdXJpdHkgZmlsZS4KKyAqCisgKiBJdCB1c2VzIGNvbW1vbiBhcGkgbGlrZSBvY2ZzMl94YXR0cl9zZXQsIHNvIHRoZSBjYWxsZXIKKyAqIG11c3Qgbm90IGhvbGQgYW55IGxvY2sgZXhwZWN0IGlfbXV0ZXguCisgKi8KK2ludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gc2kgPSB7CisJCS5lbmFibGUgPSAxLAorCX07CisKKwlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCAmc2kpOworCWlmICghcmV0KSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX3NlY3VyaXR5X3NldChpbm9kZSwgc2kubmFtZSwKKwkJCQkJICAgICAgIHNpLnZhbHVlLCBzaS52YWx1ZV9sZW4sCisJCQkJCSAgICAgICBYQVRUUl9DUkVBVEUpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIGxlYXZlOworCQl9CisJfSBlbHNlIGlmIChyZXQgIT0gLUVPUE5PVFNVUFApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGxlYXZlOworCX0KKworCXJldCA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCAmZGlyX2JoLCAwKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOworCWJyZWxzZShkaXJfYmgpOworbGVhdmU6CisJcmV0dXJuIHJldDsKK30KIC8qCiAgKiAnc2VjdXJpdHknIGF0dHJpYnV0ZXMgc3VwcG9ydAogICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCAxY2E3ZTlhLi4wOGUzNjM4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5oCisrKyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTU1LDYgKzU1LDggQEAKIAkJCSAgIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50LAogCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOworaW50IG9jZnMyX2hhc19pbmxpbmVfeGF0dHJfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpOwogaW50IG9jZnMyX3hhdHRyX3JlbW92ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKIAkJCSAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqKTsKQEAgLTgzLDUgKzg1LDE2IEBACiAJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QJKnZiX3h2OwogfTsKIAotCitpbnQgb2NmczJfeGF0dHJfYXR0YWNoX3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpOworaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJIHN0cnVjdCBpbm9kZSAqbmV3X2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCQkJIGJvb2wgcHJlc2VydmVfc2VjdXJpdHkpOworaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKICNlbmRpZiAvKiBPQ0ZTMl9YQVRUUl9IICovCmRpZmYgLS1naXQgYS9mcy9vbWZzL2Rpci5jIGIvZnMvb21mcy9kaXIuYwppbmRleCBjNzI3NWNmLi4zNjgwYmFlIDEwMDY0NAotLS0gYS9mcy9vbWZzL2Rpci5jCisrKyBiL2ZzL29tZnMvZGlyLmMKQEAgLTQ4OSw3ICs0ODksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9tZnNfZGlyX2lub3BzID0geworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb21mc19kaXJfaW5vcHMgPSB7CiAJLmxvb2t1cCA9IG9tZnNfbG9va3VwLAogCS5ta2RpciA9IG9tZnNfbWtkaXIsCiAJLnJlbmFtZSA9IG9tZnNfcmVuYW1lLApkaWZmIC0tZ2l0IGEvZnMvb21mcy9maWxlLmMgYi9mcy9vbWZzL2ZpbGUuYwppbmRleCBkMTdlNzc0Li40ODQ1ZmJiIDEwMDY0NAotLS0gYS9mcy9vbWZzL2ZpbGUuYworKysgYi9mcy9vbWZzL2ZpbGUuYwpAQCAtMzMzLDExICszMzMsMTEgQEAKIAkuc3BsaWNlX3JlYWQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHMgPSB7CiAJLnRydW5jYXRlID0gb21mc190cnVuY2F0ZQogfTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvbWZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9tZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UgPSBvbWZzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMgPSBvbWZzX3JlYWRwYWdlcywKIAkud3JpdGVwYWdlID0gb21mc193cml0ZXBhZ2UsCmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmMKaW5kZXggMzc5YWU1Zi4uZjNiN2MxNSAxMDA2NDQKLS0tIGEvZnMvb21mcy9pbm9kZS5jCisrKyBiL2ZzL29tZnMvaW5vZGUuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvbWZzX3NvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb21mc19zb3BzID0gewogCS53cml0ZV9pbm9kZQk9IG9tZnNfd3JpdGVfaW5vZGUsCiAJLmRlbGV0ZV9pbm9kZQk9IG9tZnNfZGVsZXRlX2lub2RlLAogCS5wdXRfc3VwZXIJPSBvbWZzX3B1dF9zdXBlciwKZGlmZiAtLWdpdCBhL2ZzL29tZnMvb21mcy5oIGIvZnMvb21mcy9vbWZzLmgKaW5kZXggMmJjMGYwNi4uZGY3MTAzOSAxMDA2NDQKLS0tIGEvZnMvb21mcy9vbWZzLmgKKysrIGIvZnMvb21mcy9vbWZzLmgKQEAgLTQ1LDE1ICs0NSwxNSBAQAogCiAvKiBkaXIuYyAqLwogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9pbm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9pbm9wczsKIGV4dGVybiBpbnQgb21mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGludCBvbWZzX2lzX2JhZChzdHJ1Y3Qgb21mc19zYl9pbmZvICpzYmksIHN0cnVjdCBvbWZzX2hlYWRlciAqaGVhZGVyLAogCQkJdTY0IGZzYmxvY2spOwogCiAvKiBmaWxlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9pbm9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9tZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvbWZzX2FvcHM7CiBleHRlcm4gdm9pZCBvbWZzX21ha2VfZW1wdHlfdGFibGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZnNldCk7CiBleHRlcm4gaW50IG9tZnNfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggMzExOTFiZi4uNGYwMWUwNiAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtMjkwLDEwICsyOTAsOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotU1lTQ0FMTF9ERUZJTkUyKHRydW5jYXRlLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRoLCB1bnNpZ25lZCBsb25nLCBsZW5ndGgpCitTWVNDQUxMX0RFRklORTIodHJ1bmNhdGUsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGgsIGxvbmcsIGxlbmd0aCkKIHsKLQkvKiBvbiAzMi1iaXQgYm94ZW4gaXQgd2lsbCBjdXQgdGhlIHJhbmdlIDJeMzEtLTJeMzItMSBvZmYgKi8KLQlyZXR1cm4gZG9fc3lzX3RydW5jYXRlKHBhdGgsIChsb25nKWxlbmd0aCk7CisJcmV0dXJuIGRvX3N5c190cnVuY2F0ZShwYXRoLCBsZW5ndGgpOwogfQogCiBzdGF0aWMgbG9uZyBkb19zeXNfZnRydW5jYXRlKHVuc2lnbmVkIGludCBmZCwgbG9mZl90IGxlbmd0aCwgaW50IHNtYWxsKQpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IGZiZWFkZGYuLjdiNjg1ZTEgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogCQl9CiAKIAkJaWYgKGZyb20gKyBzaXplID4gZ2V0X2NhcGFjaXR5KGRpc2spKSB7Ci0JCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKmJkb3BzID0gZGlzay0+Zm9wczsKKwkJCWNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqYmRvcHMgPSBkaXNrLT5mb3BzOwogCQkJdW5zaWduZWQgbG9uZyBsb25nIGNhcGFjaXR5OwogCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNzI1YTY1MC4uMGM2YmM2MCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtODIsNiArODIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTMyMSw2ICszMjIsODcgQEAKIAkJCXAtPm5pdmNzdyk7CiB9CiAKK3N0cnVjdCBzdGFja19zdGF0cyB7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZwlzdGFydHBhZ2U7CisJdW5zaWduZWQgbG9uZwl1c2FnZTsKK307CisKK3N0YXRpYyBpbnQgc3RhY2tfdXNhZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQl1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJc3RydWN0IHN0YWNrX3N0YXRzICpzcyA9IHdhbGstPnByaXZhdGU7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBzcy0+dm1hOworCXB0ZV90ICpwdGUsIHB0ZW50OworCXNwaW5sb2NrX3QgKnB0bDsKKwlpbnQgcmV0ID0gMDsKKworCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkgeworCQlwdGVudCA9ICpwdGU7CisKKyNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUAorCQlpZiAocHRlX3ByZXNlbnQocHRlbnQpIHx8IGlzX3N3YXBfcHRlKHB0ZW50KSkKKwkJCXNzLT51c2FnZSA9IGFkZHIgLSBzcy0+c3RhcnRwYWdlICsgUEFHRV9TSVpFOworI2Vsc2UKKwkJaWYgKHB0ZV9wcmVzZW50KHB0ZW50KSB8fCBpc19zd2FwX3B0ZShwdGVudCkpIHsKKwkJCXNzLT51c2FnZSA9IHNzLT5zdGFydHBhZ2UgLSBhZGRyICsgUEFHRV9TSVpFOworCQkJcHRlKys7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7CisJY29uZF9yZXNjaGVkKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9zdGFja191c2FnZV9pbl9ieXRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHN0YWNrX3N0YXRzIHNzOworCXN0cnVjdCBtbV93YWxrIHN0YWNrX3dhbGsgPSB7CisJCS5wbWRfZW50cnkgPSBzdGFja191c2FnZV9wdGVfcmFuZ2UsCisJCS5tbSA9IHZtYS0+dm1fbW0sCisJCS5wcml2YXRlID0gJnNzLAorCX07CisKKwlpZiAoIXZtYS0+dm1fbW0gfHwgaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCisJCXJldHVybiAwOworCisJc3Mudm1hID0gdm1hOworCXNzLnN0YXJ0cGFnZSA9IHRhc2stPnN0YWNrX3N0YXJ0ICYgUEFHRV9NQVNLOworCXNzLnVzYWdlID0gMDsKKworI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCisJd2Fsa19wYWdlX3JhbmdlKEtTVEtfRVNQKHRhc2spICYgUEFHRV9NQVNLLCB2bWEtPnZtX2VuZCwKKwkJJnN0YWNrX3dhbGspOworI2Vsc2UKKwl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgKEtTVEtfRVNQKHRhc2spICYgUEFHRV9NQVNLKSArIFBBR0VfU0laRSwKKwkJJnN0YWNrX3dhbGspOworI2VuZGlmCisJcmV0dXJuIHNzLnVzYWdlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19zaG93X3N0YWNrX3VzYWdlKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKnZtYTsKKwlzdHJ1Y3QgbW1fc3RydWN0CSptbSA9IGdldF90YXNrX21tKHRhc2spOworCisJaWYgKG1tKSB7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJdm1hID0gZmluZF92bWEobW0sIHRhc2stPnN0YWNrX3N0YXJ0KTsKKwkJaWYgKHZtYSkKKwkJCXNlcV9wcmludGYobSwgIlN0YWNrIHVzYWdlOlx0JWx1IGtCXG4iLAorCQkJCWdldF9zdGFja191c2FnZV9pbl9ieXRlcyh2bWEsIHRhc2spID4+IDEwKTsKKworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQltbXB1dChtbSk7CisJfQorfQorCiBpbnQgcHJvY19waWRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLAogCQkJc3RydWN0IHBpZCAqcGlkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CkBAIC0zNDAsNiArNDIyLDcgQEAKIAl0YXNrX3Nob3dfcmVncyhtLCB0YXNrKTsKICNlbmRpZgogCXRhc2tfY29udGV4dF9zd2l0Y2hfY291bnRzKG0sIHRhc2spOworCXRhc2tfc2hvd19zdGFja191c2FnZShtLCB0YXNrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgxLDcgKzU2NCw3IEBACiAJCXJzc2xpbSwKIAkJbW0gPyBtbS0+c3RhcnRfY29kZSA6IDAsCiAJCW1tID8gbW0tPmVuZF9jb2RlIDogMCwKLQkJKHBlcm1pdHRlZCAmJiBtbSkgPyBtbS0+c3RhcnRfc3RhY2sgOiAwLAorCQkocGVybWl0dGVkKSA/IHRhc2stPnN0YWNrX3N0YXJ0IDogMCwKIAkJZXNwLAogCQllaXAsCiAJCS8qIFRoZSBzaWduYWwgaW5mb3JtYXRpb24gaGVyZSBpcyBvYnNvbGV0ZS4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNmY3NDJmNi4uODM3NDY5YSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCiAJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlwb2ludHMgPSBiYWRuZXNzKHRhc2ssIHVwdGltZS50dl9zZWMpOworCXBvaW50cyA9IGJhZG5lc3ModGFzay0+Z3JvdXBfbGVhZGVyLCB1cHRpbWUudHZfc2VjKTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWx1XG4iLCBwb2ludHMpOwogfQpAQCAtNDU4LDcgKzQ1OCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGxpbWl0X25hbWVzIGxuYW1lc1tSTElNX05MSU1JVFNdID0gewotCVtSTElNSVRfQ1BVXSA9IHsiTWF4IGNwdSB0aW1lIiwgIm1zIn0sCisJW1JMSU1JVF9DUFVdID0geyJNYXggY3B1IHRpbWUiLCAic2Vjb25kcyJ9LAogCVtSTElNSVRfRlNJWkVdID0geyJNYXggZmlsZSBzaXplIiwgImJ5dGVzIn0sCiAJW1JMSU1JVF9EQVRBXSA9IHsiTWF4IGRhdGEgc2l6ZSIsICJieXRlcyJ9LAogCVtSTElNSVRfU1RBQ0tdID0geyJNYXggc3RhY2sgc2l6ZSIsICJieXRlcyJ9LApAQCAtOTk5LDExICs5OTksMTcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWNoYXIgYnVmZmVyW1BST0NfTlVNQlVGXTsKIAlzaXplX3QgbGVuOwotCWludCBvb21fYWRqdXN0OworCWludCBvb21fYWRqdXN0ID0gT09NX0RJU0FCTEU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghdGFzaykKIAkJcmV0dXJuIC1FU1JDSDsKLQlvb21fYWRqdXN0ID0gdGFzay0+b29ta2lsbGFkajsKKworCWlmIChsb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpKSB7CisJCW9vbV9hZGp1c3QgPSB0YXNrLT5zaWduYWwtPm9vbV9hZGo7CisJCXVubG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKTsKKwl9CisKIAlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAKIAlsZW4gPSBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWlcbiIsIG9vbV9hZGp1c3QpOwpAQCAtMTAxNSwzMiArMTAyMSw0NCBAQAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl0sICplbmQ7Ci0JaW50IG9vbV9hZGp1c3Q7CisJY2hhciBidWZmZXJbUFJPQ19OVU1CVUZdOworCWxvbmcgb29tX2FkanVzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CiAKIAltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CiAJaWYgKGNvdW50ID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQogCQljb3VudCA9IHNpemVvZihidWZmZXIpIC0gMTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0Jb29tX2FkanVzdCA9IHNpbXBsZV9zdHJ0b2woYnVmZmVyLCAmZW5kLCAwKTsKKworCWVyciA9IHN0cmljdF9zdHJ0b2woc3Ryc3RyaXAoYnVmZmVyKSwgMCwgJm9vbV9hZGp1c3QpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOwogCWlmICgob29tX2FkanVzdCA8IE9PTV9BREpVU1RfTUlOIHx8IG9vbV9hZGp1c3QgPiBPT01fQURKVVNUX01BWCkgJiYKIAkgICAgIG9vbV9hZGp1c3QgIT0gT09NX0RJU0FCTEUpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgqZW5kID09ICdcbicpCi0JCWVuZCsrOworCiAJdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCF0YXNrKQogCQlyZXR1cm4gLUVTUkNIOwotCWlmIChvb21fYWRqdXN0IDwgdGFzay0+b29ta2lsbGFkaiAmJiAhY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkgeworCWlmICghbG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKSkgeworCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCisJaWYgKG9vbV9hZGp1c3QgPCB0YXNrLT5zaWduYWwtPm9vbV9hZGogJiYgIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpIHsKKwkJdW5sb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpOwogCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KLQl0YXNrLT5vb21raWxsYWRqID0gb29tX2FkanVzdDsKKworCXRhc2stPnNpZ25hbC0+b29tX2FkaiA9IG9vbV9hZGp1c3Q7CisKKwl1bmxvY2tfdGFza19zaWdoYW5kKHRhc2ssICZmbGFncyk7CiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwotCWlmIChlbmQgLSBidWZmZXIgPT0gMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIGVuZCAtIGJ1ZmZlcjsKKworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vb21fYWRqdXN0X29wZXJhdGlvbnMgPSB7CkBAIC0xMTY5LDE3ICsxMTg3LDE2IEBACiAJCWNvdW50ID0gc2l6ZW9mKGJ1ZmZlcikgLSAxOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQltYWtlX2l0X2ZhaWwgPSBzaW1wbGVfc3RydG9sKGJ1ZmZlciwgJmVuZCwgMCk7Ci0JaWYgKCplbmQgPT0gJ1xuJykKLQkJZW5kKys7CisJbWFrZV9pdF9mYWlsID0gc2ltcGxlX3N0cnRvbChzdHJzdHJpcChidWZmZXIpLCAmZW5kLCAwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCWlmICghdGFzaykKIAkJcmV0dXJuIC1FU1JDSDsKIAl0YXNrLT5tYWtlX2l0X2ZhaWwgPSBtYWtlX2l0X2ZhaWw7CiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwotCWlmIChlbmQgLSBidWZmZXIgPT0gMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIGVuZCAtIGJ1ZmZlcjsKKworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19mYXVsdF9pbmplY3Rfb3BlcmF0aW9ucyA9IHsKQEAgLTI1ODYsOSArMjYwMyw2IEBACiAJCWRwdXQoZGVudHJ5KTsKIAl9CiAKLQlpZiAodGdpZCA9PSAwKQotCQlnb3RvIG91dDsKLQogCW5hbWUubmFtZSA9IGJ1ZjsKIAluYW1lLmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHRnaWQpOwogCWxlYWRlciA9IGRfaGFzaF9hbmRfbG9va3VwKG1udC0+bW50X3Jvb3QsICZuYW1lKTsKQEAgLTI2NDUsMTcgKzI2NTksMTYgQEAKIHZvaWQgcHJvY19mbHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgcGlkICpwaWQsICp0Z2lkID0gTlVMTDsKKwlzdHJ1Y3QgcGlkICpwaWQsICp0Z2lkOwogCXN0cnVjdCB1cGlkICp1cGlkOwogCiAJcGlkID0gdGFza19waWQodGFzayk7Ci0JaWYgKHRocmVhZF9ncm91cF9sZWFkZXIodGFzaykpCi0JCXRnaWQgPSB0YXNrX3RnaWQodGFzayk7CisJdGdpZCA9IHRhc2tfdGdpZCh0YXNrKTsKIAogCWZvciAoaSA9IDA7IGkgPD0gcGlkLT5sZXZlbDsgaSsrKSB7CiAJCXVwaWQgPSAmcGlkLT5udW1iZXJzW2ldOwogCQlwcm9jX2ZsdXNoX3Rhc2tfbW50KHVwaWQtPm5zLT5wcm9jX21udCwgdXBpZC0+bnIsCi0JCQl0Z2lkID8gdGdpZC0+bnVtYmVyc1tpXS5uciA6IDApOworCQkJCQl0Z2lkLT5udW1iZXJzW2ldLm5yKTsKIAl9CiAKIAl1cGlkID0gJnBpZC0+bnVtYmVyc1twaWQtPmxldmVsXTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mva2NvcmUuYyBiL2ZzL3Byb2Mva2NvcmUuYwppbmRleCA1OWI0M2EwLi41NjAxMzM3IDEwMDY0NAotLS0gYS9mcy9wcm9jL2tjb3JlLmMKKysrIGIvZnMvcHJvYy9rY29yZS5jCkBAIC0xNyw5ICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogI2RlZmluZSBDT1JFX1NUUiAiQ09SRSIKIApAQCAtMjksMTcgKzM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2tjb3JlOwogCi1zdGF0aWMgaW50IG9wZW5fa2NvcmUoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQlyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JBV0lPKSA/IDAgOiAtRVBFUk07Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlYWRfa2NvcmUoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfa2NvcmVfb3BlcmF0aW9ucyA9IHsKLQkucmVhZAkJPSByZWFkX2tjb3JlLAotCS5vcGVuCQk9IG9wZW5fa2NvcmUsCi19OwogCiAjaWZuZGVmIGtjX3ZhZGRyX3RvX29mZnNldAogI2RlZmluZQlrY192YWRkcl90b19vZmZzZXQodikgKCh2KSAtIFBBR0VfT0ZGU0VUKQpAQCAtNTcsMTggKzUyLDE5IEBACiAJdm9pZCAqZGF0YTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qga2NvcmVfbGlzdCAqa2NsaXN0Oworc3RhdGljIExJU1RfSEVBRChrY2xpc3RfaGVhZCk7CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhrY2xpc3RfbG9jayk7CitzdGF0aWMgaW50IGtjb3JlX25lZWRfdXBkYXRlID0gMTsKIAogdm9pZAota2NsaXN0X2FkZChzdHJ1Y3Qga2NvcmVfbGlzdCAqbmV3LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKK2tjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKm5ldywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogCW5ldy0+YWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiAJbmV3LT5zaXplID0gc2l6ZTsKKwluZXctPnR5cGUgPSB0eXBlOwogCiAJd3JpdGVfbG9jaygma2NsaXN0X2xvY2spOwotCW5ldy0+bmV4dCA9IGtjbGlzdDsKLQlrY2xpc3QgPSBuZXc7CisJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCAma2NsaXN0X2hlYWQpOwogCXdyaXRlX3VubG9jaygma2NsaXN0X2xvY2spOwogfQogCkBAIC04MCw3ICs3Niw3IEBACiAJKm5waGRyID0gMTsgLyogUFRfTk9URSAqLwogCXNpemUgPSAwOwogCi0JZm9yIChtPWtjbGlzdDsgbTsgbT1tLT5uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAma2NsaXN0X2hlYWQsIGxpc3QpIHsKIAkJdHJ5ID0ga2NfdmFkZHJfdG9fb2Zmc2V0KChzaXplX3QpbS0+YWRkciArIG0tPnNpemUpOwogCQlpZiAodHJ5ID4gc2l6ZSkKIAkJCXNpemUgPSB0cnk7CkBAIC05Nyw2ICs5MywxNzcgQEAKIAlyZXR1cm4gc2l6ZSArICplbGZfYnVmbGVuOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX2tjbGlzdF9lbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGtjb3JlX2xpc3QgKnRtcCwgKnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgaGVhZCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcG9zLT5saXN0KTsKKwkJa2ZyZWUocG9zKTsKKwl9Cit9CisvKgorICogUmVwbGFjZSBhbGwgS0NPUkVfUkFNL0tDT1JFX1ZNRU1NQVAgaW5mb3JtYXRpb24gd2l0aCBwYXNzZWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgX19rY29yZV91cGRhdGVfcmFtKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJaW50IG5waGRyOworCXNpemVfdCBzaXplOworCXN0cnVjdCBrY29yZV9saXN0ICp0bXAsICpwb3M7CisJTElTVF9IRUFEKGdhcmJhZ2UpOworCisJd3JpdGVfbG9jaygma2NsaXN0X2xvY2spOworCWlmIChrY29yZV9uZWVkX3VwZGF0ZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZrY2xpc3RfaGVhZCwgbGlzdCkgeworCQkJaWYgKHBvcy0+dHlwZSA9PSBLQ09SRV9SQU0KKwkJCQl8fCBwb3MtPnR5cGUgPT0gS0NPUkVfVk1FTU1BUCkKKwkJCQlsaXN0X21vdmUoJnBvcy0+bGlzdCwgJmdhcmJhZ2UpOworCQl9CisJCWxpc3Rfc3BsaWNlX3RhaWwobGlzdCwgJmtjbGlzdF9oZWFkKTsKKwl9IGVsc2UKKwkJbGlzdF9zcGxpY2UobGlzdCwgJmdhcmJhZ2UpOworCWtjb3JlX25lZWRfdXBkYXRlID0gMDsKKwlwcm9jX3Jvb3Rfa2NvcmUtPnNpemUgPSBnZXRfa2NvcmVfc2l6ZSgmbnBoZHIsICZzaXplKTsKKwl3cml0ZV91bmxvY2soJmtjbGlzdF9sb2NrKTsKKworCWZyZWVfa2NsaXN0X2VudHMoJmdhcmJhZ2UpOworfQorCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorLyoKKyAqIElmIG5vIGhpZ2htZW0sIHdlIGNhbiBhc3N1bWUgWzAuLi5tYXhfbG93X3BmbikgY29udGludW91cyByYW5nZSBvZiBtZW1vcnkKKyAqIGJlY2F1c2UgbWVtb3J5IGhvbGUgaXMgbm90IGFzIGJpZyBhcyAhSElHSE1FTSBjYXNlLgorICogKEhJR0hNRU0gaXMgc3BlY2lhbCBiZWNhdXNlIHBhcnQgb2YgbWVtb3J5IGlzIF9pbnZpc2libGVfIGZyb20gdGhlIGtlcm5lbC4pCisgKi8KK3N0YXRpYyBpbnQga2NvcmVfdXBkYXRlX3JhbSh2b2lkKQoreworCUxJU1RfSEVBRChoZWFkKTsKKwlzdHJ1Y3Qga2NvcmVfbGlzdCAqZW50OworCWludCByZXQgPSAwOworCisJZW50ID0ga21hbGxvYyhzaXplb2YoKmVudCksIEdGUF9LRVJORUwpOworCWlmICghZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKwllbnQtPmFkZHIgPSAodW5zaWduZWQgbG9uZylfX3ZhKDApOworCWVudC0+c2l6ZSA9IG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQ7CisJZW50LT50eXBlID0gS0NPUkVfUkFNOworCWxpc3RfYWRkKCZlbnQtPmxpc3QsICZoZWFkKTsKKwlfX2tjb3JlX3VwZGF0ZV9yYW0oJmhlYWQpOworCXJldHVybiByZXQ7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfSElHSE1FTSAqLworCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQCisvKiBjYWxjdWxhdGUgdm1lbW1hcCdzIGFkZHJlc3MgZnJvbSBnaXZlbiBzeXN0ZW0gcmFtIHBmbiBhbmQgcmVnaXN0ZXIgaXQgKi8KK2ludCBnZXRfc3BhcnNlbWVtX3ZtZW1tYXBfaW5mbyhzdHJ1Y3Qga2NvcmVfbGlzdCAqZW50LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gX19wYShlbnQtPmFkZHIpID4+IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGVudC0+c2l6ZSA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwlzdHJ1Y3Qga2NvcmVfbGlzdCAqdm1tLCAqdG1wOworCisKKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylwZm5fdG9fcGFnZShwZm4pKSAmIFBBR0VfTUFTSzsKKwllbmQgPSAoKHVuc2lnbmVkIGxvbmcpcGZuX3RvX3BhZ2UocGZuICsgbnJfcGFnZXMpKSAtIDE7CisJZW5kID0gQUxJR04oZW5kLCBQQUdFX1NJWkUpOworCS8qIG92ZXJsYXAgY2hlY2sgKGJlY2F1c2Ugd2UgaGF2ZSB0byBhbGlnbiBwYWdlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIGhlYWQsIGxpc3QpIHsKKwkJaWYgKHRtcC0+dHlwZSAhPSBLQ09SRV9WTUVNTUFQKQorCQkJY29udGludWU7CisJCWlmIChzdGFydCA8IHRtcC0+YWRkciArIHRtcC0+c2l6ZSkKKwkJCWlmIChlbmQgPiB0bXAtPmFkZHIpCisJCQkJZW5kID0gdG1wLT5hZGRyOworCX0KKwlpZiAoc3RhcnQgPCBlbmQpIHsKKwkJdm1tID0ga21hbGxvYyhzaXplb2YoKnZtbSksIEdGUF9LRVJORUwpOworCQlpZiAoIXZtbSkKKwkJCXJldHVybiAwOworCQl2bW0tPmFkZHIgPSBzdGFydDsKKwkJdm1tLT5zaXplID0gZW5kIC0gc3RhcnQ7CisJCXZtbS0+dHlwZSA9IEtDT1JFX1ZNRU1NQVA7CisJCWxpc3RfYWRkX3RhaWwoJnZtbS0+bGlzdCwgaGVhZCk7CisJfQorCXJldHVybiAxOworCit9CisjZWxzZQoraW50IGdldF9zcGFyc2VtZW1fdm1lbW1hcF9pbmZvKHN0cnVjdCBrY29yZV9saXN0ICplbnQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50CitrY2xpc3RfYWRkX3ByaXZhdGUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gKHN0cnVjdCBsaXN0X2hlYWQgKilhcmc7CisJc3RydWN0IGtjb3JlX2xpc3QgKmVudDsKKworCWVudCA9IGttYWxsb2Moc2l6ZW9mKCplbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZW50LT5hZGRyID0gKHVuc2lnbmVkIGxvbmcpX192YSgocGZuIDw8IFBBR0VfU0hJRlQpKTsKKwllbnQtPnNpemUgPSBucl9wYWdlcyA8PCBQQUdFX1NISUZUOworCisJLyogU2FuaXR5IGNoZWNrOiBDYW4gaGFwcGVuIGluIDMyYml0IGFyY2guLi5tYXliZSAqLworCWlmIChlbnQtPmFkZHIgPCAodW5zaWduZWQgbG9uZykgX192YSgwKSkKKwkJZ290byBmcmVlX291dDsKKworCS8qIGN1dCBub3QtbWFwcGVkIGFyZWEuIC4uLi5mcm9tIHBwYy0zMiBjb2RlLiAqLworCWlmIChVTE9OR19NQVggLSBlbnQtPmFkZHIgPCBlbnQtPnNpemUpCisJCWVudC0+c2l6ZSA9IFVMT05HX01BWCAtIGVudC0+YWRkcjsKKworCS8qIGN1dCB3aGVuIHZtYWxsb2MoKSBhcmVhIGlzIGhpZ2hlciB0aGFuIGRpcmVjdC1tYXAgYXJlYSAqLworCWlmIChWTUFMTE9DX1NUQVJUID4gKHVuc2lnbmVkIGxvbmcpX192YSgwKSkgeworCQlpZiAoZW50LT5hZGRyID4gVk1BTExPQ19TVEFSVCkKKwkJCWdvdG8gZnJlZV9vdXQ7CisJCWlmIChWTUFMTE9DX1NUQVJUIC0gZW50LT5hZGRyIDwgZW50LT5zaXplKQorCQkJZW50LT5zaXplID0gVk1BTExPQ19TVEFSVCAtIGVudC0+YWRkcjsKKwl9CisKKwllbnQtPnR5cGUgPSBLQ09SRV9SQU07CisJbGlzdF9hZGRfdGFpbCgmZW50LT5saXN0LCBoZWFkKTsKKworCWlmICghZ2V0X3NwYXJzZW1lbV92bWVtbWFwX2luZm8oZW50LCBoZWFkKSkgeworCQlsaXN0X2RlbCgmZW50LT5saXN0KTsKKwkJZ290byBmcmVlX291dDsKKwl9CisKKwlyZXR1cm4gMDsKK2ZyZWVfb3V0OgorCWtmcmVlKGVudCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQga2NvcmVfdXBkYXRlX3JhbSh2b2lkKQoreworCWludCBuaWQsIHJldDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm47CisJTElTVF9IRUFEKGhlYWQpOworCisJLyogTm90IGluaWFsaXplZC4uLi51cGRhdGUgbm93ICovCisJLyogZmluZCBvdXQgIm1heCBwZm4iICovCisJZW5kX3BmbiA9IDA7CisJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fSElHSF9NRU1PUlkpIHsKKwkJdW5zaWduZWQgbG9uZyBub2RlX2VuZDsKKwkJbm9kZV9lbmQgID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsKKwkJCU5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXM7CisJCWlmIChlbmRfcGZuIDwgbm9kZV9lbmQpCisJCQllbmRfcGZuID0gbm9kZV9lbmQ7CisJfQorCS8qIHNjYW4gMCB0byBtYXhfcGZuICovCisJcmV0ID0gd2Fsa19zeXN0ZW1fcmFtX3JhbmdlKDAsIGVuZF9wZm4sICZoZWFkLCBrY2xpc3RfYWRkX3ByaXZhdGUpOworCWlmIChyZXQpIHsKKwkJZnJlZV9rY2xpc3RfZW50cygmaGVhZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlfX2tjb3JlX3VwZGF0ZV9yYW0oJmhlYWQpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKQEAgLTE5Miw3ICszNTksNyBAQAogCW5oZHItPnBfYWxpZ24JPSAwOwogCiAJLyogc2V0dXAgRUxGIFBUX0xPQUQgcHJvZ3JhbSBoZWFkZXIgZm9yIGV2ZXJ5IGFyZWEgKi8KLQlmb3IgKG09a2NsaXN0OyBtOyBtPW0tPm5leHQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZrY2xpc3RfaGVhZCwgbGlzdCkgewogCQlwaGRyID0gKHN0cnVjdCBlbGZfcGhkciAqKSBidWZwOwogCQlidWZwICs9IHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwogCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7CkBAIC0yNjUsNyArNDMyLDggQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCiAJcmVhZF9sb2NrKCZrY2xpc3RfbG9jayk7Ci0JcHJvY19yb290X2tjb3JlLT5zaXplID0gc2l6ZSA9IGdldF9rY29yZV9zaXplKCZucGhkciwgJmVsZl9idWZsZW4pOworCXNpemUgPSBnZXRfa2NvcmVfc2l6ZSgmbnBoZHIsICZlbGZfYnVmbGVuKTsKKwogCWlmIChidWZsZW4gPT0gMCB8fCAqZnBvcyA+PSBzaXplKSB7CiAJCXJlYWRfdW5sb2NrKCZrY2xpc3RfbG9jayk7CiAJCXJldHVybiAwOwpAQCAtMzE3LDcgKzQ4NSw3IEBACiAJCXN0cnVjdCBrY29yZV9saXN0ICptOwogCiAJCXJlYWRfbG9jaygma2NsaXN0X2xvY2spOwotCQlmb3IgKG09a2NsaXN0OyBtOyBtPW0tPm5leHQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAma2NsaXN0X2hlYWQsIGxpc3QpIHsKIAkJCWlmIChzdGFydCA+PSBtLT5hZGRyICYmIHN0YXJ0IDwgKG0tPmFkZHIrbS0+c2l6ZSkpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTMyNiw0NSArNDk0LDE0IEBACiAJCWlmIChtID09IE5VTEwpIHsKIAkJCWlmIChjbGVhcl91c2VyKGJ1ZmZlciwgdHN6KSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfSBlbHNlIGlmIChpc192bWFsbG9jX2FkZHIoKHZvaWQgKilzdGFydCkpIHsKKwkJfSBlbHNlIGlmIChpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKCh2b2lkICopc3RhcnQpKSB7CiAJCQljaGFyICogZWxmX2J1ZjsKLQkJCXN0cnVjdCB2bV9zdHJ1Y3QgKm07Ci0JCQl1bnNpZ25lZCBsb25nIGN1cnN0YXJ0ID0gc3RhcnQ7Ci0JCQl1bnNpZ25lZCBsb25nIGN1cnNpemUgPSB0c3o7CiAKIAkJCWVsZl9idWYgPSBremFsbG9jKHRzeiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWVsZl9idWYpCiAJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCXJlYWRfbG9jaygmdm1saXN0X2xvY2spOwotCQkJZm9yIChtPXZtbGlzdDsgbSAmJiBjdXJzaXplOyBtPW0tPm5leHQpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHZtc3RhcnQ7Ci0JCQkJdW5zaWduZWQgbG9uZyB2bXNpemU7Ci0JCQkJdW5zaWduZWQgbG9uZyBtc2l6ZSA9IG0tPnNpemUgLSBQQUdFX1NJWkU7Ci0KLQkJCQlpZiAoKCh1bnNpZ25lZCBsb25nKW0tPmFkZHIgKyBtc2l6ZSkgPCAKLQkJCQkJCQkJY3Vyc3RhcnQpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICgodW5zaWduZWQgbG9uZyltLT5hZGRyID4gKGN1cnN0YXJ0ICsgCi0JCQkJCQkJCWN1cnNpemUpKQotCQkJCQlicmVhazsKLQkJCQl2bXN0YXJ0ID0gKGN1cnN0YXJ0IDwgKHVuc2lnbmVkIGxvbmcpbS0+YWRkciA/IAotCQkJCQkodW5zaWduZWQgbG9uZyltLT5hZGRyIDogY3Vyc3RhcnQpOwotCQkJCWlmICgoKHVuc2lnbmVkIGxvbmcpbS0+YWRkciArIG1zaXplKSA+IAotCQkJCQkJCShjdXJzdGFydCArIGN1cnNpemUpKQotCQkJCQl2bXNpemUgPSBjdXJzdGFydCArIGN1cnNpemUgLSB2bXN0YXJ0OwotCQkJCWVsc2UKLQkJCQkJdm1zaXplID0gKHVuc2lnbmVkIGxvbmcpbS0+YWRkciArIAotCQkJCQkJCW1zaXplIC0gdm1zdGFydDsKLQkJCQljdXJzdGFydCA9IHZtc3RhcnQgKyB2bXNpemU7Ci0JCQkJY3Vyc2l6ZSAtPSB2bXNpemU7Ci0JCQkJLyogZG9uJ3QgZHVtcCBpb3JlbWFwJ2Qgc3R1ZmYhIChUQSkgKi8KLQkJCQlpZiAobS0+ZmxhZ3MgJiBWTV9JT1JFTUFQKQotCQkJCQljb250aW51ZTsKLQkJCQltZW1jcHkoZWxmX2J1ZiArICh2bXN0YXJ0IC0gc3RhcnQpLAotCQkJCQkoY2hhciAqKXZtc3RhcnQsIHZtc2l6ZSk7Ci0JCQl9Ci0JCQlyZWFkX3VubG9jaygmdm1saXN0X2xvY2spOworCQkJdnJlYWQoZWxmX2J1ZiwgKGNoYXIgKilzdGFydCwgdHN6KTsKKwkJCS8qIHdlIGhhdmUgdG8gemVyby1maWxsIHVzZXIgYnVmZmVyIGV2ZW4gaWYgbm8gcmVhZCAqLwogCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGVsZl9idWYsIHRzeikpIHsKIAkJCQlrZnJlZShlbGZfYnVmKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQwMiwxMiArNTM5LDk2IEBACiAJcmV0dXJuIGFjYzsKIH0KIAorCitzdGF0aWMgaW50IG9wZW5fa2NvcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChrY29yZV9uZWVkX3VwZGF0ZSkKKwkJa2NvcmVfdXBkYXRlX3JhbSgpOworCWlmIChpX3NpemVfcmVhZChpbm9kZSkgIT0gcHJvY19yb290X2tjb3JlLT5zaXplKSB7CisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBwcm9jX3Jvb3Rfa2NvcmUtPnNpemUpOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zID0geworCS5yZWFkCQk9IHJlYWRfa2NvcmUsCisJLm9wZW4JCT0gb3Blbl9rY29yZSwKK307CisKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKKy8qIGp1c3QgcmVtZW1iZXIgdGhhdCB3ZSBoYXZlIHRvIHVwZGF0ZSBrY29yZSAqLworc3RhdGljIGludCBfX21lbWluaXQga2NvcmVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX09GRkxJTkU6CisJCXdyaXRlX2xvY2soJmtjbGlzdF9sb2NrKTsKKwkJa2NvcmVfbmVlZF91cGRhdGUgPSAxOworCQl3cml0ZV91bmxvY2soJmtjbGlzdF9sb2NrKTsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKyNlbmRpZgorCisKK3N0YXRpYyBzdHJ1Y3Qga2NvcmVfbGlzdCBrY29yZV92bWFsbG9jOworCisjaWZkZWYgQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUCitzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfdGV4dDsKKy8qCisgKiBJZiBkZWZpbmVkLCBzcGVjaWFsIHNlZ21lbnQgaXMgdXNlZCBmb3IgbWFwcGluZyBrZXJuZWwgdGV4dCBpbnN0ZWFkIG9mCisgKiBkaXJlY3QtbWFwIGFyZWEuIFdlIG5lZWQgdG8gY3JlYXRlIHNwZWNpYWwgVEVYVCBzZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcHJvY19rY29yZV90ZXh0X2luaXQodm9pZCkKK3sKKwlrY2xpc3RfYWRkKCZrY29yZV90ZXh0LCBfc3RleHQsIF9lbmQgLSBfc3RleHQsIEtDT1JFX1RFWFQpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBwcm9jX2tjb3JlX3RleHRfaW5pdCh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSAmJiBkZWZpbmVkKE1PRFVMRVNfVkFERFIpCisvKgorICogTU9EVUxFU19WQUREUiBoYXMgbm8gaW50ZXJzZWN0aW9uIHdpdGggVk1BTExPQ19BRERSLgorICovCitzdHJ1Y3Qga2NvcmVfbGlzdCBrY29yZV9tb2R1bGVzOworc3RhdGljIHZvaWQgX19pbml0IGFkZF9tb2R1bGVzX3JhbmdlKHZvaWQpCit7CisJa2NsaXN0X2FkZCgma2NvcmVfbW9kdWxlcywgKHZvaWQgKilNT0RVTEVTX1ZBRERSLAorCQkJTU9EVUxFU19FTkQgLSBNT0RVTEVTX1ZBRERSLCBLQ09SRV9WTUFMTE9DKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYWRkX21vZHVsZXNfcmFuZ2Uodm9pZCkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBwcm9jX2tjb3JlX2luaXQodm9pZCkKIHsKLQlwcm9jX3Jvb3Rfa2NvcmUgPSBwcm9jX2NyZWF0ZSgia2NvcmUiLCBTX0lSVVNSLCBOVUxMLCAmcHJvY19rY29yZV9vcGVyYXRpb25zKTsKLQlpZiAocHJvY19yb290X2tjb3JlKQotCQlwcm9jX3Jvb3Rfa2NvcmUtPnNpemUgPQotCQkJCShzaXplX3QpaGlnaF9tZW1vcnkgLSBQQUdFX09GRlNFVCArIFBBR0VfU0laRTsKKwlwcm9jX3Jvb3Rfa2NvcmUgPSBwcm9jX2NyZWF0ZSgia2NvcmUiLCBTX0lSVVNSLCBOVUxMLAorCQkJCSAgICAgICZwcm9jX2tjb3JlX29wZXJhdGlvbnMpOworCWlmICghcHJvY19yb290X2tjb3JlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY291bGRuJ3QgY3JlYXRlIC9wcm9jL2tjb3JlXG4iKTsKKwkJcmV0dXJuIDA7IC8qIEFsd2F5cyByZXR1cm5zIDAuICovCisJfQorCS8qIFN0b3JlIHRleHQgYXJlYSBpZiBpdCdzIHNwZWNpYWwgKi8KKwlwcm9jX2tjb3JlX3RleHRfaW5pdCgpOworCS8qIFN0b3JlIHZtYWxsb2MgYXJlYSAqLworCWtjbGlzdF9hZGQoJmtjb3JlX3ZtYWxsb2MsICh2b2lkICopVk1BTExPQ19TVEFSVCwKKwkJVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJULCBLQ09SRV9WTUFMTE9DKTsKKwlhZGRfbW9kdWxlc19yYW5nZSgpOworCS8qIFN0b3JlIGRpcmVjdC1tYXAgYXJlYSBmcm9tIHBoeXNpY2FsIG1lbW9yeSBtYXAgKi8KKwlrY29yZV91cGRhdGVfcmFtKCk7CisJaG90cGx1Z19tZW1vcnlfbm90aWZpZXIoa2NvcmVfY2FsbGJhY2ssIDApOworCiAJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdChwcm9jX2tjb3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9tZW1pbmZvLmMgYi9mcy9wcm9jL21lbWluZm8uYwppbmRleCBkNWM0MTBkLi4xNzFlMDUyIDEwMDY0NAotLS0gYS9mcy9wcm9jL21lbWluZm8uYworKysgYi9mcy9wcm9jL21lbWluZm8uYwpAQCAtODEsOSArODEsMTEgQEAKIAkJIldyaXRlYmFjazogICAgICAlOGx1IGtCXG4iCiAJCSJBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgogCQkiTWFwcGVkOiAgICAgICAgICU4bHUga0JcbiIKKwkJIlNobWVtOiAgICAgICAgICAlOGx1IGtCXG4iCiAJCSJTbGFiOiAgICAgICAgICAgJThsdSBrQlxuIgogCQkiU1JlY2xhaW1hYmxlOiAgICU4bHUga0JcbiIKIAkJIlNVbnJlY2xhaW06ICAgICAlOGx1IGtCXG4iCisJCSJLZXJuZWxTdGFjazogICAgJThsdSBrQlxuIgogCQkiUGFnZVRhYmxlczogICAgICU4bHUga0JcbiIKICNpZmRlZiBDT05GSUdfUVVJQ0tMSVNUCiAJCSJRdWlja2xpc3RzOiAgICAgJThsdSBrQlxuIgpAQCAtMTI0LDEwICsxMjYsMTIgQEAKIAkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spKSwKIAkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9BTk9OX1BBR0VTKSksCiAJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9NQVBQRUQpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9TSE1FTSkpLAogCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpICsKIAkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpKSwKIAkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSksCiAJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0tFUk5FTF9TVEFDSykgKiBUSFJFQURfU0laRSAvIDEwMjQsCiAJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfUEFHRVRBQkxFKSksCiAjaWZkZWYgQ09ORklHX1FVSUNLTElTVAogCQlLKHF1aWNrbGlzdF90b3RhbF9zaXplKCkpLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9ub21tdS5jIGIvZnMvcHJvYy9ub21tdS5jCmluZGV4IDdlMTRkMWEuLjlmZTdkN2UgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvbm9tbXUuYworKysgYi9mcy9wcm9jL25vbW11LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJldHVybiByYl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX25vbW11X3JlZ2lvbl9saXN0X3NlcW9wID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX25vbW11X3JlZ2lvbl9saXN0X3NlcW9wID0gewogCS5zdGFydAk9IG5vbW11X3JlZ2lvbl9saXN0X3N0YXJ0LAogCS5uZXh0CT0gbm9tbXVfcmVnaW9uX2xpc3RfbmV4dCwKIAkuc3RvcAk9IG5vbW11X3JlZ2lvbl9saXN0X3N0b3AsCmRpZmYgLS1naXQgYS9mcy9wcm9jL3BhZ2UuYyBiL2ZzL3Byb2MvcGFnZS5jCmluZGV4IDI3MDdjNmMuLjIyODFjMmMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcGFnZS5jCisrKyBiL2ZzL3Byb2MvcGFnZS5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC05NSw2ICs5Niw4IEBACiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKICNkZWZpbmUgS1BGX05PUEFHRQkJMjAKIAorI2RlZmluZSBLUEZfS1NNCQkJMjEKKwogLyoga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMKICAqIFdBUk5JTkc6IHN1YmplY3QgdG8gY2hhbmdlLCBuZXZlciByZWx5IG9uIHRoZW0hCiAgKi8KQEAgLTEzNyw2ICsxNDAsOCBAQAogCQl1IHw9IDEgPDwgS1BGX01NQVA7CiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQogCQl1IHw9IDEgPDwgS1BGX0FOT047CisJaWYgKFBhZ2VLc20ocGFnZSkpCisJCXUgfD0gMSA8PCBLUEZfS1NNOwogCiAJLyoKIAkgKiBjb21wb3VuZCBwYWdlczogZXhwb3J0IGJvdGggaGVhZC90YWlsIGluZm8KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA5YmQ4YmUxLi4yYTFiZWY5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0yNDMsNiArMjQzLDI1IEBACiAJCQkJfSBlbHNlIGlmICh2bWEtPnZtX3N0YXJ0IDw9IG1tLT5zdGFydF9zdGFjayAmJgogCQkJCQkgICB2bWEtPnZtX2VuZCA+PSBtbS0+c3RhcnRfc3RhY2spIHsKIAkJCQkJbmFtZSA9ICJbc3RhY2tdIjsKKwkJCQl9IGVsc2UgeworCQkJCQl1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0OworCQkJCQlzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnBtcDsKKworCQkJCQlwbXAgPSBtLT5wcml2YXRlOworCQkJCQlzdGFja19zdGFydCA9IHBtcC0+dGFzay0+c3RhY2tfc3RhcnQ7CisKKwkJCQkJaWYgKHZtYS0+dm1fc3RhcnQgPD0gc3RhY2tfc3RhcnQgJiYKKwkJCQkJICAgIHZtYS0+dm1fZW5kID49IHN0YWNrX3N0YXJ0KSB7CisJCQkJCQlwYWRfbGVuX3NwYWNlcyhtLCBsZW4pOworCQkJCQkJc2VxX3ByaW50ZihtLAorCQkJCQkJICJbdGhyZWFkc3RhY2s6JTA4bHhdIiwKKyNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUAorCQkJCQkJIHZtYS0+dm1fZW5kIC0gc3RhY2tfc3RhcnQKKyNlbHNlCisJCQkJCQkgc3RhY2tfc3RhcnQgLSB2bWEtPnZtX3N0YXJ0CisjZW5kaWYKKwkJCQkJCSk7CisJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCW5hbWUgPSAiW3Zkc29dIjsKQEAgLTQ2NSwyMyArNDg0LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQ0xFQVJfUkVGU19BTEwgMQorI2RlZmluZSBDTEVBUl9SRUZTX0FOT04gMgorI2RlZmluZSBDTEVBUl9SRUZTX01BUFBFRCAzCisKIHN0YXRpYyBzc2l6ZV90IGNsZWFyX3JlZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCWNoYXIgYnVmZmVyW1BST0NfTlVNQlVGXSwgKmVuZDsKKwljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl07CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJbG9uZyB0eXBlOwogCiAJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwogCWlmIChjb3VudCA+IHNpemVvZihidWZmZXIpIC0gMSkKIAkJY291bnQgPSBzaXplb2YoYnVmZmVyKSAtIDE7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgYnVmLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICghc2ltcGxlX3N0cnRvbChidWZmZXIsICZlbmQsIDApKQorCWlmIChzdHJpY3Rfc3RydG9sKHN0cnN0cmlwKGJ1ZmZlciksIDEwLCAmdHlwZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgqZW5kID09ICdcbicpCi0JCWVuZCsrOworCWlmICh0eXBlIDwgQ0xFQVJfUkVGU19BTEwgfHwgdHlwZSA+IENMRUFSX1JFRlNfTUFQUEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKIAl0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAoIXRhc2spCiAJCXJldHVybiAtRVNSQ0g7CkBAIC00OTQsMTggKzUxOCwzMSBAQAogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CiAJCQljbGVhcl9yZWZzX3dhbGsucHJpdmF0ZSA9IHZtYTsKLQkJCWlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCi0JCQkJd2Fsa19wYWdlX3JhbmdlKHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAotCQkJCQkJJmNsZWFyX3JlZnNfd2Fsayk7CisJCQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogV3JpdGluZyAxIHRvIC9wcm9jL3BpZC9jbGVhcl9yZWZzIGFmZmVjdHMgYWxsIHBhZ2VzLgorCQkJICoKKwkJCSAqIFdyaXRpbmcgMiB0byAvcHJvYy9waWQvY2xlYXJfcmVmcyBvbmx5IGFmZmVjdHMKKwkJCSAqIEFub255bW91cyBwYWdlcy4KKwkJCSAqCisJCQkgKiBXcml0aW5nIDMgdG8gL3Byb2MvcGlkL2NsZWFyX3JlZnMgb25seSBhZmZlY3RzIGZpbGUKKwkJCSAqIG1hcHBlZCBwYWdlcy4KKwkJCSAqLworCQkJaWYgKHR5cGUgPT0gQ0xFQVJfUkVGU19BTk9OICYmIHZtYS0+dm1fZmlsZSkKKwkJCQljb250aW51ZTsKKwkJCWlmICh0eXBlID09IENMRUFSX1JFRlNfTUFQUEVEICYmICF2bWEtPnZtX2ZpbGUpCisJCQkJY29udGludWU7CisJCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkJCSZjbGVhcl9yZWZzX3dhbGspOwogCQl9CiAJCWZsdXNoX3RsYl9tbShtbSk7CiAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCW1tcHV0KG1tKTsKIAl9CiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwotCWlmIChlbmQgLSBidWZmZXIgPT0gMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIGVuZCAtIGJ1ZmZlcjsKKworCXJldHVybiBjb3VudDsKIH0KIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NsZWFyX3JlZnNfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3FueDQvS2NvbmZpZyBiL2ZzL3FueDQvS2NvbmZpZwppbmRleCBiZThlMGUxLi41ZjYwODk5IDEwMDY0NAotLS0gYS9mcy9xbng0L0tjb25maWcKKysrIGIvZnMvcW54NC9LY29uZmlnCkBAIC02LDIwICs2LDkgQEAKIAkgIFFOWCA0IGFuZCBRTlggNiAodGhlIGxhdHRlciBpcyBhbHNvIGNhbGxlZCBRTlggUlRQKS4KIAkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IDxodHRwOi8vd3d3LnFueC5jb20vPi4KIAkgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gbW91bnQgUU5YIGhhcmQgZGlza3Mgb3IgZmxvcHBpZXMuCi0JICBVbmxlc3MgeW91IHNheSBZIHRvICJRTlg0RlMgcmVhZC13cml0ZSBzdXBwb3J0IiBiZWxvdywgeW91IHdpbGwKLQkgIG9ubHkgYmUgYWJsZSB0byByZWFkIHRoZXNlIGZpbGUgc3lzdGVtcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHFueDQuCiAKIAkgIElmIHlvdSBkb24ndCBrbm93IHdoZXRoZXIgeW91IG5lZWQgaXQsIHRoZW4geW91IGRvbid0IG5lZWQgaXQ6CiAJICBhbnN3ZXIgTi4KLQotY29uZmlnIFFOWDRGU19SVwotCWJvb2wgIlFOWDRGUyB3cml0ZSBzdXBwb3J0IChEQU5HRVJPVVMpIgotCWRlcGVuZHMgb24gUU5YNEZTX0ZTICYmIEVYUEVSSU1FTlRBTCAmJiBCUk9LRU4KLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byB0ZXN0IHdyaXRlIHN1cHBvcnQgZm9yIFFOWDQgZmlsZSBzeXN0ZW1zLgotCi0JICBJdCdzIGN1cnJlbnRseSBicm9rZW4sIHNvIGZvciBub3c6Ci0JICBhbnN3ZXIgTi4KZGlmZiAtLWdpdCBhL2ZzL3FueDQvTWFrZWZpbGUgYi9mcy9xbng0L01ha2VmaWxlCmluZGV4IGU0ZDQwOGMuLjRhMjgzYjMgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvTWFrZWZpbGUKKysrIGIvZnMvcW54NC9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogb2JqLSQoQ09ORklHX1FOWDRGU19GUykgKz0gcW54NC5vCiAKLXFueDQtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gZmlsZS5vIGJpdG1hcC5vIHRydW5jYXRlLm8KK3FueDQtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gYml0bWFwLm8KZGlmZiAtLWdpdCBhL2ZzL3FueDQvYml0bWFwLmMgYi9mcy9xbng0L2JpdG1hcC5jCmluZGV4IGUxY2QwNjEuLjBhZmJhMDYgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvYml0bWFwLmMKKysrIGIvZnMvcW54NC9iaXRtYXAuYwpAQCAtNzgsODQgKzc4LDMgQEAKIAogCXJldHVybiB0b3RhbF9mcmVlOwogfQotCi0jaWZkZWYgQ09ORklHX1FOWDRGU19SVwotCi1pbnQgcW54NF9pc19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2spCi17Ci0JaW50IHN0YXJ0ID0gbGUzMl90b19jcHUocW54NF9zYihzYiktPkJpdE1hcC0+ZGlfZmlyc3RfeHRudC54dG50X2JsaykgLSAxOwotCWludCBzaXplID0gbGUzMl90b19jcHUocW54NF9zYihzYiktPkJpdE1hcC0+ZGlfc2l6ZSk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQljb25zdCBjaGFyICpnOwotCWludCByZXQgPSAtRUlPOwotCi0Jc3RhcnQgKz0gYmxvY2sgLyAoUU5YNF9CTE9DS19TSVpFICogOCk7Ci0JUU5YNERFQlVHKCgicW54NDogaXNfZnJlZSByZXF1ZXN0aW5nIGJsb2NrIFslbHVdLCBiaXRtYXAgaW4gYmxvY2sgWyVsdV1cbiIsCi0JCSAgICh1bnNpZ25lZCBsb25nKSBibG9jaywgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0KSk7Ci0JKHZvaWQpIHNpemU7CQkvKiBDSEVDS01FICovCi0JYmggPSBzYl9icmVhZChzYiwgc3RhcnQpOwotCWlmIChiaCA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlnID0gYmgtPmJfZGF0YSArIChibG9jayAlIFFOWDRfQkxPQ0tfU0laRSk7Ci0JaWYgKCgoKmcpICYgKDEgPDwgKGJsb2NrICUgOCkpKSA9PSAwKSB7Ci0JCVFOWDRERUJVRygoInFueDQ6IGlzX2ZyZWUgLT4gYmxvY2sgaXMgZnJlZVxuIikpOwotCQlyZXQgPSAxOwotCX0gZWxzZSB7Ci0JCVFOWDRERUJVRygoInFueDQ6IGlzX2ZyZWUgLT4gYmxvY2sgaXMgYnVzeVxuIikpOwotCQlyZXQgPSAwOwotCX0KLQlicmVsc2UoYmgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHFueDRfc2V0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrLCBpbnQgYnVzeSkKLXsKLQlpbnQgc3RhcnQgPSBsZTMyX3RvX2NwdShxbng0X3NiKHNiKS0+Qml0TWFwLT5kaV9maXJzdF94dG50Lnh0bnRfYmxrKSAtIDE7Ci0JaW50IHNpemUgPSBsZTMyX3RvX2NwdShxbng0X3NiKHNiKS0+Qml0TWFwLT5kaV9zaXplKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCWNoYXIgKmc7Ci0KLQlzdGFydCArPSBibG9jayAvIChRTlg0X0JMT0NLX1NJWkUgKiA4KTsKLQlRTlg0REVCVUcoKCJxbng0OiBzZXRfYml0bWFwIHJlcXVlc3RpbmcgYmxvY2sgWyVsdV0sIGJpdG1hcCBpbiBibG9jayBbJWx1XVxuIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLCAodW5zaWduZWQgbG9uZykgc3RhcnQpKTsKLQkodm9pZCkgc2l6ZTsJCS8qIENIRUNLTUUgKi8KLQliaCA9IHNiX2JyZWFkKHNiLCBzdGFydCk7Ci0JaWYgKGJoID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWcgPSBiaC0+Yl9kYXRhICsgKGJsb2NrICUgUU5YNF9CTE9DS19TSVpFKTsKLQlpZiAoYnVzeSA9PSAwKSB7Ci0JCSgqZykgJj0gfigxIDw8IChibG9jayAlIDgpKTsKLQl9IGVsc2UgewotCQkoKmcpIHw9ICgxIDw8IChibG9jayAlIDgpKTsKLQl9Ci0JbWFya19idWZmZXJfZGlydHkoYmgpOwotCWJyZWxzZShiaCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcW54NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpxbng0X2lubyA9IHFueDRfcmF3X2lub2RlKGlub2RlKTsKLQkvKiBXaGF0IGZvcj8gKi8KLQltZW1zZXQocW54NF9pbm8tPmRpX2ZuYW1lLCAwLCBzaXplb2YgcW54NF9pbm8tPmRpX2ZuYW1lKTsKLQlxbng0X2luby0+ZGlfc2l6ZSA9IDA7Ci0JcW54NF9pbm8tPmRpX251bV94dG50cyA9IDA7Ci0JcW54NF9pbm8tPmRpX21vZGUgPSAwOwotCXFueDRfaW5vLT5kaV9zdGF0dXMgPSAwOwotfQotCi12b2lkIHFueDRfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmIChpbm9kZS0+aV9pbm8gPCAxKSB7Ci0JCXByaW50aygiZnJlZV9pbm9kZTogaW5vZGUgMCBvciBub25leGlzdGVudCBpbm9kZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JcW54NF9jbGVhcl9pbm9kZShpbm9kZSk7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3FueDQvZGlyLmMgYi9mcy9xbng0L2Rpci5jCmluZGV4IDAwM2M2OGYuLjg2Y2MzOWMgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvZGlyLmMKKysrIGIvZnMvcW54NC9kaXIuYwpAQCAtODUsOSArODUsNCBAQAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcW54NF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9CiB7CiAJLmxvb2t1cAkJPSBxbng0X2xvb2t1cCwKLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi0JLmNyZWF0ZQkJPSBxbng0X2NyZWF0ZSwKLQkudW5saW5rCQk9IHFueDRfdW5saW5rLAotCS5ybWRpcgkJPSBxbng0X3JtZGlyLAotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcW54NC9maWxlLmMgYi9mcy9xbng0L2ZpbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliMTcwYS4uMDAwMDAwMAotLS0gYS9mcy9xbng0L2ZpbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBRTlg0IGZpbGUgc3lzdGVtLCBMaW51eCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBWZXJzaW9uIDogMC4yLjEKLSAqCi0gKiBVc2luZyBwYXJ0cyBvZiB0aGUgeGlhZnMgZmlsZXN5c3RlbS4KLSAqCi0gKiBIaXN0b3J5IDoKLSAqCi0gKiAyNS0wNS0xOTk4IGJ5IFJpY2hhcmQgRnJvd2lqbiA6IGZpcnN0IHJlbGVhc2UuCi0gKiAyMS0wNi0xOTk4IGJ5IEZyYW5rIERlbmlzIDogd3JvdGUgcW54NF9yZWFkcGFnZSB0byB1c2UgZ2VuZXJpY19maWxlX3JlYWQuCi0gKiAyNy0wNi0xOTk4IGJ5IEZyYW5rIERlbmlzIDogZmlsZSBvdmVyd3JpdGluZy4KLSAqLwotCi0jaW5jbHVkZSAicW54NC5oIgotCi0vKgotICogV2UgaGF2ZSBtb3N0bHkgTlVMTCdzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBvayBmb3IKLSAqIHRoZSBxbng0IGZpbGVzeXN0ZW0uCi0gKi8KLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcW54NF9maWxlX29wZXJhdGlvbnMgPQotewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZAkJPSBkb19zeW5jX3JlYWQsCi0JLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAotCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAotCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi0JLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCi0JLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCi0JLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKLSNlbmRpZgotfTsKLQotY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcW54NF9maWxlX2lub2RlX29wZXJhdGlvbnMgPQotewotI2lmZGVmIENPTkZJR19RTlg0RlNfUlcKLQkudHJ1bmNhdGUJPSBxbng0X3RydW5jYXRlLAotI2VuZGlmCi19OwpkaWZmIC0tZ2l0IGEvZnMvcW54NC9pbm9kZS5jIGIvZnMvcW54NC9pbm9kZS5jCmluZGV4IDY4MWRmNWYuLmQyY2QxNzkgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvaW5vZGUuYworKysgYi9mcy9xbng0L2lub2RlLmMKQEAgLTI4LDczICsyOCw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBxbng0X3NvcHM7CiAKLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi0KLXN0YXRpYyB2b2lkIHFueDRfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JUU5YNERFQlVHKCgicW54NDogZGVsZXRpbmcgaW5vZGUgWyVsdV1cbiIsICh1bnNpZ25lZCBsb25nKSBpbm9kZS0+aV9pbm8pKTsKLQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7Ci0JaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JcW54NF90cnVuY2F0ZShpbm9kZSk7Ci0JbG9ja19rZXJuZWwoKTsKLQlxbng0X2ZyZWVfaW5vZGUoaW5vZGUpOwotCXVubG9ja19rZXJuZWwoKTsKLX0KLQotc3RhdGljIGludCBxbng0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQotewotCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpyYXdfaW5vZGU7Ci0JaW50IGJsb2NrLCBpbm87Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbm8gPSBpbm9kZS0+aV9pbm87Ci0KLQlRTlg0REVCVUcoKCJxbng0OiB3cml0ZSBpbm9kZSAxLlxuIikpOwotCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoIWlubykgewotCQlwcmludGsoInFueDQ6IGJhZCBpbm9kZSBudW1iZXIgb24gZGV2ICVzOiAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsCi0JCSAgICAgICBpbm9kZS0+aV9zYi0+c19pZCwgaW5vKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCVFOWDRERUJVRygoInFueDQ6IHdyaXRlIGlub2RlIDIuXG4iKSk7Ci0JYmxvY2sgPSBpbm8gLyBRTlg0X0lOT0RFU19QRVJfQkxPQ0s7Ci0JbG9ja19rZXJuZWwoKTsKLQlpZiAoIShiaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBibG9jaykpKSB7Ci0JCXByaW50aygicW54NDogbWFqb3IgcHJvYmxlbTogdW5hYmxlIHRvIHJlYWQgaW5vZGUgZnJvbSBkZXYgIgotCQkgICAgICAgIiVzXG4iLCBpbm9kZS0+aV9zYi0+c19pZCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJhd19pbm9kZSA9ICgoc3RydWN0IHFueDRfaW5vZGVfZW50cnkgKikgYmgtPmJfZGF0YSkgKwotCSAgICAoaW5vICUgUU5YNF9JTk9ERVNfUEVSX0JMT0NLKTsKLQlyYXdfaW5vZGUtPmRpX21vZGUgID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbW9kZSk7Ci0JcmF3X2lub2RlLT5kaV91aWQgICA9IGNwdV90b19sZTE2KGZzX2hpZ2gybG93dWlkKGlub2RlLT5pX3VpZCkpOwotCXJhd19pbm9kZS0+ZGlfZ2lkICAgPSBjcHVfdG9fbGUxNihmc19oaWdoMmxvd2dpZChpbm9kZS0+aV9naWQpKTsKLQlyYXdfaW5vZGUtPmRpX25saW5rID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOwotCXJhd19pbm9kZS0+ZGlfc2l6ZSAgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9zaXplKTsKLQlyYXdfaW5vZGUtPmRpX210aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfbXRpbWUudHZfc2VjKTsKLQlyYXdfaW5vZGUtPmRpX2F0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfYXRpbWUudHZfc2VjKTsKLQlyYXdfaW5vZGUtPmRpX2N0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfY3RpbWUudHZfc2VjKTsKLQlyYXdfaW5vZGUtPmRpX2ZpcnN0X3h0bnQueHRudF9zaXplID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfYmxvY2tzKTsKLQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JaWYgKGRvX3N5bmMpIHsKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJiYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKLQkJCXByaW50aygicW54NDogSU8gZXJyb3Igc3luY2luZyBpbm9kZSBbJXM6JTA4eF1cbiIsCi0JCQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm8pOwotCQkJYnJlbHNlKGJoKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCWJyZWxzZShiaCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgcW54NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBzdGF0aWMgc3RydWN0IGlub2RlICpxbng0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIHZvaWQgcW54NF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtMTA4LDEwICs0MSw2IEBACiAJLnB1dF9zdXBlcgk9IHFueDRfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gcW54NF9zdGF0ZnMsCiAJLnJlbW91bnRfZnMJPSBxbng0X3JlbW91bnQsCi0jaWZkZWYgQ09ORklHX1FOWDRGU19SVwotCS53cml0ZV9pbm9kZQk9IHFueDRfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IHFueDRfZGVsZXRlX2lub2RlLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IHFueDRfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQpAQCAtMTIwLDE1ICs0OSw3IEBACiAKIAlxcyA9IHFueDRfc2Ioc2IpOwogCXFzLT5WZXJzaW9uID0gUU5YNF9WRVJTSU9OOwotI2lmbmRlZiBDT05GSUdfUU5YNEZTX1JXCiAJKmZsYWdzIHw9IE1TX1JET05MWTsKLSNlbmRpZgotCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWFya19idWZmZXJfZGlydHkocXMtPnNiX2J1Zik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzU0LDkgKzI3NSw3IEBACiAJfQogCXMtPnNfb3AgPSAmcW54NF9zb3BzOwogCXMtPnNfbWFnaWMgPSBRTlg0X1NVUEVSX01BR0lDOwotI2lmbmRlZiBDT05GSUdfUU5YNEZTX1JXCiAJcy0+c19mbGFncyB8PSBNU19SRE9OTFk7CS8qIFl1cCwgcmVhZC1vbmx5IHlldCAqLwotI2VuZGlmCiAJcW54NF9zYihzKS0+c2JfYnVmID0gYmg7CiAJcW54NF9zYihzKS0+c2IgPSAoc3RydWN0IHFueDRfc3VwZXJfYmxvY2sgKikgYmgtPmJfZGF0YTsKIApAQCAtNDg5LDggKzQwOCw3IEBACiAKIAltZW1jcHkocW54NF9pbm9kZSwgcmF3X2lub2RlLCBRTlg0X0RJUl9FTlRSWV9TSVpFKTsKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQlpbm9kZS0+aV9vcCA9ICZxbng0X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfZm9wID0gJnFueDRfZmlsZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmZ2VuZXJpY19yb19mb3BzOwogCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZxbng0X2FvcHM7CiAJCXFueDRfaShpbm9kZSktPm1tdV9wcml2YXRlID0gaW5vZGUtPmlfc2l6ZTsKIAl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3FueDQvbmFtZWkuYyBiL2ZzL3FueDQvbmFtZWkuYwppbmRleCA1OTcyZWQyLi5hZTFlN2VkIDEwMDY0NAotLS0gYS9mcy9xbng0L25hbWVpLmMKKysrIGIvZnMvcW54NC9uYW1laS5jCkBAIC0xMzQsMTA4ICsxMzQsMyBAQAogCiAJcmV0dXJuIE5VTEw7CiB9Ci0KLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi1pbnQgcW54NF9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCi0JCXN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCVFOWDRERUJVRygoInFueDQ6IHFueDRfY3JlYXRlXG4iKSk7Ci0JaWYgKGRpciA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotaW50IHFueDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpkZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWludCByZXR2YWw7Ci0JaW50IGlubzsKLQotCVFOWDRERUJVRygoInFueDQ6IHFueDRfcm1kaXIgWyVzXVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSkpOwotCWxvY2tfa2VybmVsKCk7Ci0JYmggPSBxbng0X2ZpbmRfZW50cnkoZGVudHJ5LT5kX25hbWUubGVuLCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkgICAgICZkZSwgJmlubyk7Ci0JaWYgKGJoID09IE5VTEwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaWYgKGlub2RlLT5pX2lubyAhPSBpbm8pIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlbmRfcm1kaXI7Ci0JfQotI2lmIDAKLQlpZiAoIWVtcHR5X2Rpcihpbm9kZSkpIHsKLQkJcmV0dmFsID0gLUVOT1RFTVBUWTsKLQkJZ290byBlbmRfcm1kaXI7Ci0JfQotI2VuZGlmCi0JaWYgKGlub2RlLT5pX25saW5rICE9IDIpIHsKLQkJUU5YNERFQlVHKCgiZW1wdHkgZGlyZWN0b3J5IGhhcyBubGluayE9MiAoJWQpXG4iLCBpbm9kZS0+aV9ubGluaykpOwotCX0KLQlRTlg0REVCVUcoKCJxbng0OiBkZWxldGluZyBkaXJlY3RvcnlcbiIpKTsKLQlkZS0+ZGlfc3RhdHVzID0gMDsKLQltZW1zZXQoZGUtPmRpX2ZuYW1lLCAwLCBzaXplb2YgZGUtPmRpX2ZuYW1lKTsKLQlkZS0+ZGlfbW9kZSA9IDA7Ci0JbWFya19idWZmZXJfZGlydHlfaW5vZGUoYmgsIGRpcik7Ci0JY2xlYXJfbmxpbmsoaW5vZGUpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOwotCXJldHZhbCA9IDA7Ci0KLSAgICAgIGVuZF9ybWRpcjoKLQlicmVsc2UoYmgpOwotCi0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCBxbng0X3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IHFueDRfaW5vZGVfZW50cnkgKmRlOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IHJldHZhbDsKLQlpbnQgaW5vOwotCi0JUU5YNERFQlVHKCgicW54NDogcW54NF91bmxpbmsgWyVzXVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSkpOwotCWxvY2tfa2VybmVsKCk7Ci0JYmggPSBxbng0X2ZpbmRfZW50cnkoZGVudHJ5LT5kX25hbWUubGVuLCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkgICAgICZkZSwgJmlubyk7Ci0JaWYgKGJoID09IE5VTEwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaWYgKGlub2RlLT5pX2lubyAhPSBpbm8pIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlbmRfdW5saW5rOwotCX0KLQlyZXR2YWwgPSAtRVBFUk07Ci0JaWYgKCFpbm9kZS0+aV9ubGluaykgewotCQlRTlg0REVCVUcoKCJEZWxldGluZyBub25leGlzdGVudCBmaWxlICglczolbHUpLCAlZFxuIiwKLQkJCSAgIGlub2RlLT5pX3NiLT5zX2lkLAotCQkJICAgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9ubGluaykpOwotCQlpbm9kZS0+aV9ubGluayA9IDE7Ci0JfQotCWRlLT5kaV9zdGF0dXMgPSAwOwotCW1lbXNldChkZS0+ZGlfZm5hbWUsIDAsIHNpemVvZiBkZS0+ZGlfZm5hbWUpOwotCWRlLT5kaV9tb2RlID0gMDsKLQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgZGlyKTsKLQlkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKLQlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZTsKLQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7Ci0JcmV0dmFsID0gMDsKLQotZW5kX3VubGluazoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JYnJlbHNlKGJoKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3FueDQvcW54NC5oIGIvZnMvcW54NC9xbng0LmgKaW5kZXggOWVmYzA4OS4uMzNhNjA4NSAxMDA2NDQKLS0tIGEvZnMvcW54NC9xbng0LmgKKysrIGIvZnMvcW54NC9xbng0LmgKQEAgLTI5LDE3ICsyOSw5IEBACiAKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnFueDRfYnJlYWQoc3RydWN0IGlub2RlICosIGludCwgaW50KTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFueDRfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFueDRfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxbng0X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFueDRfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gaW50IHFueDRfaXNfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrKTsKLWV4dGVybiBpbnQgcW54NF9zZXRfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2ssIGludCBidXN5KTsKLWV4dGVybiBpbnQgcW54NF9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpOwotZXh0ZXJuIHZvaWQgcW54NF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWV4dGVybiB2b2lkIHFueDRfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWV4dGVybiBpbnQgcW54NF91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1leHRlcm4gaW50IHFueDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHFueDRfc2JfaW5mbyAqcW54NF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpkaWZmIC0tZ2l0IGEvZnMvcW54NC90cnVuY2F0ZS5jIGIvZnMvcW54NC90cnVuY2F0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTRkOWVlLi4wMDAwMDAwCi0tLSBhL2ZzL3FueDQvdHJ1bmNhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qIAotICogUU5YNCBmaWxlIHN5c3RlbSwgTGludXggaW1wbGVtZW50YXRpb24uCi0gKiAKLSAqIFZlcnNpb24gOiAwLjEKLSAqIAotICogVXNpbmcgcGFydHMgb2YgdGhlIHhpYWZzIGZpbGVzeXN0ZW0uCi0gKiAKLSAqIEhpc3RvcnkgOgotICogCi0gKiAzMC0wNi0xOTk4IGJ5IEZyYW5rIERFTklTIDogdWdseSBmaWxsZXIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSAicW54NC5oIgotCi0jaWZkZWYgQ09ORklHX1FOWDRGU19SVwotCi12b2lkIHFueDRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpZiAoIShTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwKLQkgICAgICBTX0lTTE5LKGlub2RlLT5pX21vZGUpKSkgewotCQlyZXR1cm47Ci0JfQotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCEoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkpIHsKLQkJLyogVE9ETyAqLwotCX0KLQlRTlg0REVCVUcoKCJxbng0OiBxbng0X3RydW5jYXRlIGNhbGxlZFxuIikpOwotCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCXVubG9ja19rZXJuZWwoKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCAzOGY3YmQ1Li4zOWI0OWM0IDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTE4MzksNyArMTgzOSw3IEBACiAvKgogICogRGVmaW5pdGlvbnMgb2YgZGlza3F1b3RhIG9wZXJhdGlvbnMuCiAgKi8KLXN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGRxdW90X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBkcXVvdF9vcGVyYXRpb25zID0gewogCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKIAkuZHJvcAkJPSBkcXVvdF9kcm9wLAogCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLApAQCAtMjQ2MSw3ICsyNDYxLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodmZzX3NldF9kcWluZm8pOwogCi1zdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHMgPSB7CiAJLnF1b3RhX29uCT0gdmZzX3F1b3RhX29uLAogCS5xdW90YV9vZmYJPSB2ZnNfcXVvdGFfb2ZmLAogCS5xdW90YV9zeW5jCT0gdmZzX3F1b3RhX3N5bmMsCmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBhN2YwMTEwLi5hNjA5MGFhIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTM0LDEyICszNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogc29tZSByYW5kb20gbnVtYmVyICovCi0jZGVmaW5lIFJBTUZTX01BR0lDCTB4ODU4NDU4ZjYKLQogI2RlZmluZSBSQU1GU19ERUZBVUxUX01PREUJMDc1NQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcmFtZnNfb3BzOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggN2FkZWE3NC4uZjBhZDA1ZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC02MTIsNyArNjEyLDcgQEAKIHN0YXRpYyBpbnQgcmVpc2VyZnNfd3JpdGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBjaGFyICosIGludCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyByZWlzZXJmc19xdW90YV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIHJlaXNlcmZzX3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLmluaXRpYWxpemUgPSBkcXVvdF9pbml0aWFsaXplLAogCS5kcm9wID0gZHF1b3RfZHJvcCwKIAkuYWxsb2Nfc3BhY2UgPSBkcXVvdF9hbGxvY19zcGFjZSwKQEAgLTYyOSw3ICs2MjksNyBAQAogCS5kZXN0cm95X2RxdW90CT0gZHF1b3RfZGVzdHJveSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHJlaXNlcmZzX3FjdGxfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHJlaXNlcmZzX3FjdGxfb3BlcmF0aW9ucyA9IHsKIAkucXVvdGFfb24gPSByZWlzZXJmc19xdW90YV9vbiwKIAkucXVvdGFfb2ZmID0gdmZzX3F1b3RhX29mZiwKIAkucXVvdGFfc3luYyA9IHZmc19xdW90YV9zeW5jLApkaWZmIC0tZ2l0IGEvZnMvcm9tZnMvc3VwZXIuYyBiL2ZzL3JvbWZzL3N1cGVyLmMKaW5kZXggNGFiM2MwMy4uNDdmMTMyZCAxMDA2NDQKLS0tIGEvZnMvcm9tZnMvc3VwZXIuYworKysgYi9mcy9yb21mcy9zdXBlci5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAkucmVhZGRpcgk9IHJvbWZzX3JlYWRkaXIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcm9tZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcm9tZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmxvb2t1cAkJPSByb21mc19sb29rdXAsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IDgwODQ4MzQuLmEyMDFmYzMgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC00MSwyMiArNDEsMjggQEAKICAqIGJldHRlciBzb2x1dGlvbnMuLgogICovCiAKKyNkZWZpbmUgTUFYX1NMQUNLCSgxMDAgKiBOU0VDX1BFUl9NU0VDKQorCiBzdGF0aWMgbG9uZyBfX2VzdGltYXRlX2FjY3VyYWN5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCiB7CiAJbG9uZyBzbGFjazsKIAlpbnQgZGl2ZmFjdG9yID0gMTAwMDsKIAorCWlmICh0di0+dHZfc2VjIDwgMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAodGFza19uaWNlKGN1cnJlbnQpID4gMCkKIAkJZGl2ZmFjdG9yID0gZGl2ZmFjdG9yIC8gNTsKIAorCWlmICh0di0+dHZfc2VjID4gTUFYX1NMQUNLIC8gKE5TRUNfUEVSX1NFQy9kaXZmYWN0b3IpKQorCQlyZXR1cm4gTUFYX1NMQUNLOworCiAJc2xhY2sgPSB0di0+dHZfbnNlYyAvIGRpdmZhY3RvcjsKIAlzbGFjayArPSB0di0+dHZfc2VjICogKE5TRUNfUEVSX1NFQy9kaXZmYWN0b3IpOwogCi0JaWYgKHNsYWNrID4gMTAwICogTlNFQ19QRVJfTVNFQykKLQkJc2xhY2sgPSAgMTAwICogTlNFQ19QRVJfTVNFQzsKKwlpZiAoc2xhY2sgPiBNQVhfU0xBQ0spCisJCXJldHVybiBNQVhfU0xBQ0s7CiAKLQlpZiAoc2xhY2sgPCAwKQotCQlzbGFjayA9IDA7CiAJcmV0dXJuIHNsYWNrOwogfQogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9wcm9jLmMgYi9mcy9zbWJmcy9wcm9jLmMKaW5kZXggOTQ2ODE2OC4uNzFjMjliNiAxMDA2NDQKLS0tIGEvZnMvc21iZnMvcHJvYy5jCisrKyBiL2ZzL3NtYmZzL3Byb2MuYwpAQCAtNTA5LDcgKzUwOSw3IEBACiAJCW1vbnRoID0gMjsKIAl9IGVsc2UgewogCQlubF9kYXkgPSAoeWVhciAmIDMpIHx8IGRheSA8PSA1OSA/IGRheSA6IGRheSAtIDE7Ci0JCWZvciAobW9udGggPSAwOyBtb250aCA8IDEyOyBtb250aCsrKQorCQlmb3IgKG1vbnRoID0gMTsgbW9udGggPCAxMjsgbW9udGgrKykKIAkJCWlmIChkYXlfblttb250aF0gPiBubF9kYXkpCiAJCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvc3VwZXIuYyBiL2ZzL3NxdWFzaGZzL3N1cGVyLmMKaW5kZXggY2I1ZmM1Ny4uNmMxOTdlZiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvc3VwZXIuYworKysgYi9mcy9zcXVhc2hmcy9zdXBlci5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAic3F1YXNoZnMuaCIKIAogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHNxdWFzaGZzX2ZzX3R5cGU7Ci1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3F1YXNoZnNfc3VwZXJfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNxdWFzaGZzX3N1cGVyX29wczsKIAogc3RhdGljIGludCBzdXBwb3J0ZWRfc3F1YXNoZnNfZmlsZXN5c3RlbShzaG9ydCBtYWpvciwgc2hvcnQgbWlub3IsIHNob3J0IGNvbXApCiB7CkBAIC00NDQsNyArNDQ0LDcgQEAKIAkuZnNfZmxhZ3MgPSBGU19SRVFVSVJFU19ERVYKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzcXVhc2hmc19zdXBlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3F1YXNoZnNfc3VwZXJfb3BzID0gewogCS5hbGxvY19pbm9kZSA9IHNxdWFzaGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID0gc3F1YXNoZnNfZGVzdHJveV9pbm9kZSwKIAkuc3RhdGZzID0gc3F1YXNoZnNfc3RhdGZzLApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggYjAzZmVhOC4uMGU3MjA3YiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3VwZXJfYmxvY2spLCAgR0ZQX1VTRVIpOwotCXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkZWZhdWx0X29wOworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkZWZhdWx0X29wOwogCiAJaWYgKHMpIHsKIAkJaWYgKHNlY3VyaXR5X3NiX2FsbG9jKHMpKSB7CmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggYzA4NDY3YS4uZDEwNDU5MSAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAJCXJldCA9IGVycjsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChmaWxlX2ZzeW5jKTsKIAogLyoqCiAgKiB2ZnNfZnN5bmNfcmFuZ2UgLSBoZWxwZXIgdG8gc3luYyBhIHJhbmdlIG9mIGRhdGEgJiBtZXRhZGF0YSB0byBkaXNrCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9idWRnZXQuYyBiL2ZzL3ViaWZzL2J1ZGdldC5jCmluZGV4IGVlMWNlNjguLjA3NmNhNTAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2J1ZGdldC5jCisrKyBiL2ZzL3ViaWZzL2J1ZGdldC5jCkBAIC03MTUsNyArNzE1LDcgQEAKICAqIHViaWZzX2dldF9mcmVlX3NwYWNlIC0gcmV0dXJuIGFtb3VudCBvZiBmcmVlIHNwYWNlLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbmQgcmV0dW5zIGFtb3VudCBvZiBmcmVlIHNwYWNlIHRvIHJlcG9ydCB0bworICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIGFtb3VudCBvZiBmcmVlIHNwYWNlIHRvIHJlcG9ydCB0bwogICogdXNlci1zcGFjZS4KICAqLwogbG9uZyBsb25nIHViaWZzX2dldF9mcmVlX3NwYWNlKHN0cnVjdCB1Ymlmc19pbmZvICpjKQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvY29tbWl0LmMgYi9mcy91Ymlmcy9jb21taXQuYwppbmRleCBmM2E3OTQ1Li40Nzc1YWY0IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9jb21taXQuYworKysgYi9mcy91Ymlmcy9jb21taXQuYwpAQCAtNTEwLDcgKzUxMCw3IEBACiAJaW50IGxudW0sIG9mZnMsIGxlbiwgZXJyID0gMCwgdW5pbml0aWFsaXplZF92YXIobGFzdF9sZXZlbCksIGNoaWxkX2NudDsKIAlpbnQgZmlyc3QgPSAxLCBpaXA7CiAJc3RydWN0IHViaWZzX2RlYnVnX2luZm8gKmQgPSBjLT5kYmc7Ci0JdW5pb24gdWJpZnNfa2V5IGxvd2VyX2tleSwgdXBwZXJfa2V5LCBsX2tleSwgdV9rZXk7CisJdW5pb24gdWJpZnNfa2V5IHVuaW5pdGlhbGl6ZWRfdmFyKGxvd2VyX2tleSksIHVwcGVyX2tleSwgbF9rZXksIHVfa2V5OwogCXVuc2lnbmVkIGxvbmcgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihsYXN0X3NxbnVtKTsKIAlzdHJ1Y3QgdWJpZnNfaWR4X25vZGUgKmlkeDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5jIGIvZnMvdWJpZnMvZGVidWcuYwppbmRleCBjZTJjZDgzLi5kYmMwOTNhIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5jCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmMKQEAgLTIxMCw2ICsyMTAsMjAgQEAKIAl9CiB9CiAKK2NvbnN0IGNoYXIgKmRiZ19qaGVhZChpbnQgamhlYWQpCit7CisJc3dpdGNoIChqaGVhZCkgeworCWNhc2UgR0NIRDoKKwkJcmV0dXJuICIwIChHQykiOworCWNhc2UgQkFTRUhEOgorCQlyZXR1cm4gIjEgKGJhc2UpIjsKKwljYXNlIERBVEFIRDoKKwkJcmV0dXJuICIyIChkYXRhKSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIGpvdXJuYWwgaGVhZCI7CisJfQorfQorCiBzdGF0aWMgdm9pZCBkdW1wX2NoKGNvbnN0IHN0cnVjdCB1Ymlmc19jaCAqY2gpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIlx0bWFnaWMgICAgICAgICAgJSN4XG4iLCBsZTMyX3RvX2NwdShjaC0+bWFnaWMpKTsKQEAgLTYyMyw4ICs2MzcsOSBAQAogCS8qIElmIHdlIGFyZSBpbiBSL08gbW9kZSwgam91cm5hbCBoZWFkcyBkbyBub3QgZXhpc3QgKi8KIAlpZiAoYy0+amhlYWRzKQogCQlmb3IgKGkgPSAwOyBpIDwgYy0+amhlYWRfY250OyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiXHRqaGVhZCAlZFx0IExFQiAlZFxuIiwKLQkJCSAgICAgICBjLT5qaGVhZHNbaV0ud2J1Zi5qaGVhZCwgYy0+amhlYWRzW2ldLndidWYubG51bSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiXHRqaGVhZCAlc1x0IExFQiAlZFxuIiwKKwkJCSAgICAgICBkYmdfamhlYWQoYy0+amhlYWRzW2ldLndidWYuamhlYWQpLAorCQkJICAgICAgIGMtPmpoZWFkc1tpXS53YnVmLmxudW0pOwogCWZvciAocmIgPSByYl9maXJzdCgmYy0+YnVkcyk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7CiAJCWJ1ZCA9IHJiX2VudHJ5KHJiLCBzdHJ1Y3QgdWJpZnNfYnVkLCByYik7CiAJCXByaW50ayhLRVJOX0RFQlVHICJcdGJ1ZCBMRUIgJWRcbiIsIGJ1ZC0+bG51bSk7CkBAIC02NDgsOSArNjYzLDkwIEBACiAKIHZvaWQgZGJnX2R1bXBfbHByb3AoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwKQogewotCXByaW50ayhLRVJOX0RFQlVHICJMRUIgJWQgbHByb3BzOiBmcmVlICVkLCBkaXJ0eSAlZCAodXNlZCAlZCksICIKLQkgICAgICAgImZsYWdzICUjeFxuIiwgbHAtPmxudW0sIGxwLT5mcmVlLCBscC0+ZGlydHksCi0JICAgICAgIGMtPmxlYl9zaXplIC0gbHAtPmZyZWUgLSBscC0+ZGlydHksIGxwLT5mbGFncyk7CisJaW50IGksIHNwYywgZGFyayA9IDAsIGRlYWQgPSAwOworCXN0cnVjdCByYl9ub2RlICpyYjsKKwlzdHJ1Y3QgdWJpZnNfYnVkICpidWQ7CisKKwlzcGMgPSBscC0+ZnJlZSArIGxwLT5kaXJ0eTsKKwlpZiAoc3BjIDwgYy0+ZGVhZF93bSkKKwkJZGVhZCA9IHNwYzsKKwllbHNlCisJCWRhcmsgPSB1Ymlmc19jYWxjX2RhcmsoYywgc3BjKTsKKworCWlmIChscC0+ZmxhZ3MgJiBMUFJPUFNfSU5ERVgpCisJCXByaW50ayhLRVJOX0RFQlVHICJMRUIgJS03ZCBmcmVlICUtOGQgZGlydHkgJS04ZCB1c2VkICUtOGQgIgorCQkgICAgICAgImZyZWUgKyBkaXJ0eSAlLThkIGZsYWdzICUjeCAoIiwgbHAtPmxudW0sIGxwLT5mcmVlLAorCQkgICAgICAgbHAtPmRpcnR5LCBjLT5sZWJfc2l6ZSAtIHNwYywgc3BjLCBscC0+ZmxhZ3MpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkxFQiAlLTdkIGZyZWUgJS04ZCBkaXJ0eSAlLThkIHVzZWQgJS04ZCAiCisJCSAgICAgICAiZnJlZSArIGRpcnR5ICUtOGQgZGFyayAlLTRkIGRlYWQgJS00ZCBub2RlcyBmaXQgJS0zZCAiCisJCSAgICAgICAiZmxhZ3MgJSMtNHggKCIsIGxwLT5sbnVtLCBscC0+ZnJlZSwgbHAtPmRpcnR5LAorCQkgICAgICAgYy0+bGViX3NpemUgLSBzcGMsIHNwYywgZGFyaywgZGVhZCwKKwkJICAgICAgIChpbnQpKHNwYyAvIFVCSUZTX01BWF9OT0RFX1NaKSwgbHAtPmZsYWdzKTsKKworCWlmIChscC0+ZmxhZ3MgJiBMUFJPUFNfVEFLRU4pIHsKKwkJaWYgKGxwLT5mbGFncyAmIExQUk9QU19JTkRFWCkKKwkJCXByaW50ayhLRVJOX0NPTlQgImluZGV4LCB0YWtlbiIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9DT05UICJ0YWtlbiIpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnM7CisKKwkJaWYgKGxwLT5mbGFncyAmIExQUk9QU19JTkRFWCkgeworCQkJc3dpdGNoIChscC0+ZmxhZ3MgJiBMUFJPUFNfQ0FUX01BU0spIHsKKwkJCWNhc2UgTFBST1BTX0RJUlRZX0lEWDoKKwkJCQlzID0gImRpcnR5IGluZGV4IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTFBST1BTX0ZSRElfSURYOgorCQkJCXMgPSAiZnJlZWFibGUgaW5kZXgiOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzID0gImluZGV4IjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAobHAtPmZsYWdzICYgTFBST1BTX0NBVF9NQVNLKSB7CisJCQljYXNlIExQUk9QU19VTkNBVDoKKwkJCQlzID0gIm5vdCBjYXRlZ29yaXplZCI7CisJCQkJYnJlYWs7CisJCQljYXNlIExQUk9QU19ESVJUWToKKwkJCQlzID0gImRpcnR5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTFBST1BTX0ZSRUU6CisJCQkJcyA9ICJmcmVlIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTFBST1BTX0VNUFRZOgorCQkJCXMgPSAiZW1wdHkiOworCQkJCWJyZWFrOworCQkJY2FzZSBMUFJPUFNfRlJFRUFCTEU6CisJCQkJcyA9ICJmcmVlYWJsZSI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXMgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgcyk7CisJfQorCisJZm9yIChyYiA9IHJiX2ZpcnN0KChzdHJ1Y3QgcmJfcm9vdCAqKSZjLT5idWRzKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKKwkJYnVkID0gcmJfZW50cnkocmIsIHN0cnVjdCB1Ymlmc19idWQsIHJiKTsKKwkJaWYgKGJ1ZC0+bG51bSA9PSBscC0+bG51bSkgeworCQkJaW50IGhlYWQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IGMtPmpoZWFkX2NudDsgaSsrKSB7CisJCQkJaWYgKGxwLT5sbnVtID09IGMtPmpoZWFkc1tpXS53YnVmLmxudW0pIHsKKwkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiLCBqaGVhZCAlcyIsCisJCQkJCSAgICAgICBkYmdfamhlYWQoaSkpOworCQkJCQloZWFkID0gMTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWhlYWQpCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiLCBidWQgb2YgamhlYWQgJXMiLAorCQkJCSAgICAgICBkYmdfamhlYWQoYnVkLT5qaGVhZCkpOworCQl9CisJfQorCWlmIChscC0+bG51bSA9PSBjLT5nY19sbnVtKQorCQlwcmludGsoS0VSTl9DT05UICIsIEdDIExFQiIpOworCXByaW50ayhLRVJOX0NPTlQgIilcbiIpOwogfQogCiB2b2lkIGRiZ19kdW1wX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKQEAgLTcyNCw3ICs4MjAsNyBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIihwaWQgJWQpIHN0YXJ0IGR1bXBpbmcgTEVCICVkXG4iLAogCSAgICAgICBjdXJyZW50LT5waWQsIGxudW0pOwotCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGMtPmRiZy0+YnVmKTsKKwlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5kYmctPmJ1ZiwgMCk7CiAJaWYgKElTX0VSUihzbGViKSkgewogCQl1Ymlmc19lcnIoInNjYW4gZXJyb3IgJWQiLCAoaW50KVBUUl9FUlIoc2xlYikpOwogCQlyZXR1cm47CkBAIC05MDksOCArMTAwNSwxMCBAQAogCXViaWZzX21zZygic2F2ZWQgbHByb3BzIHN0YXRpc3RpY3MgZHVtcCIpOwogCWRiZ19kdW1wX2xzdGF0cygmZC0+c2F2ZWRfbHN0KTsKIAl1Ymlmc19nZXRfbHBfc3RhdHMoYywgJmxzdCk7CisKIAl1Ymlmc19tc2coImN1cnJlbnQgbHByb3BzIHN0YXRpc3RpY3MgZHVtcCIpOwotCWRiZ19kdW1wX2xzdGF0cygmZC0+c2F2ZWRfbHN0KTsKKwlkYmdfZHVtcF9sc3RhdHMoJmxzdCk7CisKIAlzcGluX2xvY2soJmMtPnNwYWNlX2xvY2spOwogCWRiZ19kdW1wX2J1ZGcoYyk7CiAJc3Bpbl91bmxvY2soJmMtPnNwYWNlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZGVidWcuaCBiL2ZzL3ViaWZzL2RlYnVnLmgKaW5kZXggYzFjZDczYi4uMjlkOTYwMSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGVidWcuaAorKysgYi9mcy91Ymlmcy9kZWJ1Zy5oCkBAIC0yNzEsNiArMjcxLDcgQEAKIC8qIER1bXAgZnVuY3Rpb25zICovCiBjb25zdCBjaGFyICpkYmdfbnR5cGUoaW50IHR5cGUpOwogY29uc3QgY2hhciAqZGJnX2NzdGF0ZShpbnQgY210X3N0YXRlKTsKK2NvbnN0IGNoYXIgKmRiZ19qaGVhZChpbnQgamhlYWQpOwogY29uc3QgY2hhciAqZGJnX2dldF9rZXlfZHVtcChjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKIAkJCSAgICAgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkpOwogdm9pZCBkYmdfZHVtcF9pbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CkBAIC0zMjEsNiArMzIyLDggQEAKIGludCBkYmdfY2hlY2tfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGludCBkYmdfY2hlY2tfbHB0X25vZGVzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfY25vZGUgKmNub2RlLAogCQkJaW50IHJvdywgaW50IGNvbCk7CitpbnQgZGJnX2NoZWNrX2lub2RlX3NpemUoc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgbG9mZl90IHNpemUpOwogCiAvKiBGb3JjZSB0aGUgdXNlIG9mIGluLXRoZS1nYXBzIG1ldGhvZCBmb3IgdGVzdGluZyAqLwogCkBAIC00MjUsNiArNDI4LDcgQEAKIAogI2RlZmluZSBkYmdfbnR5cGUodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAiIgogI2RlZmluZSBkYmdfY3N0YXRlKGNtdF9zdGF0ZSkgICAgICAgICAgICAgICAgICAiIgorI2RlZmluZSBkYmdfamhlYWQoamhlYWQpICAgICAgICAgICAgICAgICAgICAgICAiIgogI2RlZmluZSBkYmdfZ2V0X2tleV9kdW1wKGMsIGtleSkgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2lub2RlKGMsIGlub2RlKSAgICAgICAgICAgICAgICh7fSkKICNkZWZpbmUgZGJnX2R1bXBfbm9kZShjLCBub2RlKSAgICAgICAgICAgICAgICAgKHt9KQpAQCAtNDYwLDYgKzQ2NCw3IEBACiAjZGVmaW5lIGRiZ19jaGVja19oZWFwKGMsIGhlYXAsIGNhdCwgYWRkX3BvcykgICAgICAoe30pCiAjZGVmaW5lIGRiZ19jaGVja19scHJvcHMoYykgICAgICAgICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19jaGVja19scHRfbm9kZXMoYywgY25vZGUsIHJvdywgY29sKSAgICAwCisjZGVmaW5lIGRiZ19jaGVja19pbm9kZV9zaXplKGMsIGlub2RlLCBzaXplKSAgICAgICAwCiAjZGVmaW5lIGRiZ19mb3JjZV9pbl90aGVfZ2Fwc19lbmFibGVkICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19mb3JjZV9pbl90aGVfZ2FwcygpICAgICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19mYWlsdXJlX21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maWxlLmMgYi9mcy91Ymlmcy9maWxlLmMKaW5kZXggNmQzNGRjNy4uMmU2NDgxYSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmlsZS5jCisrKyBiL2ZzL3ViaWZzL2ZpbGUuYwpAQCAtMjEsMzQgKzIxLDMyIEBACiAgKi8KIAogLyoKLSAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIFZGUyBmaWxlIGFuZCBpbm9kZSBvcGVyYXRpb25zIG9mIHJlZ3VsYXIgZmlsZXMsIGRldmljZQorICogVGhpcyBmaWxlIGltcGxlbWVudHMgVkZTIGZpbGUgYW5kIGlub2RlIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMsIGRldmljZQogICogbm9kZXMgYW5kIHN5bWxpbmtzIGFzIHdlbGwgYXMgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLgogICoKLSAqIFVCSUZTIHVzZXMgMiBwYWdlIGZsYWdzOiBQR19wcml2YXRlIGFuZCBQR19jaGVja2VkLiBQR19wcml2YXRlIGlzIHNldCBpZiB0aGUKLSAqIHBhZ2UgaXMgZGlydHkgYW5kIGlzIHVzZWQgZm9yIGJ1ZGdldGluZyBwdXJwb3NlcyAtIGRpcnR5IHBhZ2VzIHNob3VsZCBub3QgYmUKLSAqIGJ1ZGdldGVkLiBUaGUgUEdfY2hlY2tlZCBmbGFnIGlzIHNldCBpZiBmdWxsIGJ1ZGdldGluZyBpcyByZXF1aXJlZCBmb3IgdGhlCi0gKiBwYWdlIGUuZy4sIHdoZW4gaXQgY29ycmVzcG9uZHMgdG8gYSBmaWxlIGhvbGUgb3IgaXQgaXMganVzdCBiZXlvbmQgdGhlIGZpbGUKLSAqIHNpemUuIFRoZSBidWRnZXRpbmcgaXMgZG9uZSBpbiAndWJpZnNfd3JpdGVfYmVnaW4oKScsIGJlY2F1c2UgaXQgaXMgT0sgdG8KLSAqIGZhaWwgaW4gdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBidWRnZXQgaXMgcmVsZWFzZWQgaW4gJ3ViaWZzX3dyaXRlX2VuZCgpJy4gU28KLSAqIHRoZSBQR19wcml2YXRlIGFuZCBQR19jaGVja2VkIGZsYWdzIGNhcnJ5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHBhZ2UKLSAqIHdhcyBidWRnZXRlZCwgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byByZWxlYXNlIHRoZSBidWRnZXQgcHJvcGVybHkuCisgKiBVQklGUyB1c2VzIDIgcGFnZSBmbGFnczogQFBHX3ByaXZhdGUgYW5kIEBQR19jaGVja2VkLiBAUEdfcHJpdmF0ZSBpcyBzZXQgaWYKKyAqIHRoZSBwYWdlIGlzIGRpcnR5IGFuZCBpcyB1c2VkIGZvciBvcHRpbWl6YXRpb24gcHVycG9zZXMgLSBkaXJ0eSBwYWdlcyBhcmUKKyAqIG5vdCBidWRnZXRlZCBzbyB0aGUgZmxhZyBzaG93cyB0aGF0ICd1Ymlmc193cml0ZV9lbmQoKScgc2hvdWxkIG5vdCByZWxlYXNlCisgKiB0aGUgYnVkZ2V0IGZvciB0aGlzIHBhZ2UuIFRoZSBAUEdfY2hlY2tlZCBmbGFnIGlzIHNldCBpZiBmdWxsIGJ1ZGdldGluZyBpcworICogcmVxdWlyZWQgZm9yIHRoZSBwYWdlIGUuZy4sIHdoZW4gaXQgY29ycmVzcG9uZHMgdG8gYSBmaWxlIGhvbGUgb3IgaXQgaXMKKyAqIGJleW9uZCB0aGUgZmlsZSBzaXplLiBUaGUgYnVkZ2V0aW5nIGlzIGRvbmUgaW4gJ3ViaWZzX3dyaXRlX2JlZ2luKCknLCBiZWNhdXNlCisgKiBpdCBpcyBPSyB0byBmYWlsIGluIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgYnVkZ2V0IGlzIHJlbGVhc2VkIGluCisgKiAndWJpZnNfd3JpdGVfZW5kKCknLiBTbyB0aGUgQFBHX3ByaXZhdGUgYW5kIEBQR19jaGVja2VkIGZsYWdzIGNhcnJ5CisgKiBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHBhZ2Ugd2FzIGJ1ZGdldGVkLCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlbGVhc2UKKyAqIHRoZSBidWRnZXQgcHJvcGVybHkuCiAgKgotICogQSB0aGluZyB0byBrZWVwIGluIG1pbmQ6IGlub2RlJ3MgJ2lfbXV0ZXgnIGlzIGxvY2tlZCBpbiBtb3N0IFZGUyBvcGVyYXRpb25zCi0gKiB3ZSBpbXBsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHRydWUgZm9yICctPndyaXRlcGFnZSgpJywgd2hpY2ggbWlnaHQgYmUKLSAqIGNhbGxlZCB3aXRoICdpX211dGV4JyB1bmxvY2tlZC4gRm9yIGV4YW1wbGUsIHdoZW4gcGRmbHVzaCBpcyBwZXJmb3JtaW5nCi0gKiB3cml0ZS1iYWNrLCBpdCBjYWxscyAnd3JpdGVwYWdlKCknIHdpdGggdW5sb2NrZWQgJ2lfbXV0ZXgnLCBhbHRob3VnaCB0aGUKLSAqIGlub2RlIGhhcyAnSV9MT0NLJyBmbGFnIGluIHRoaXMgY2FzZS4gQXQgIm5vcm1hbCIgd29yay1wYXRocyAnaV9tdXRleCcgaXMKLSAqIGxvY2tlZCBpbiAnLT53cml0ZXBhZ2UnLCBlLmcuIGluICJzeXNfd3JpdGUgLT4gYWxsb2NfcGFnZXMgLT4gZGlyZWN0IHJlY2xhaW0KLSAqIHBhdGgnLiBTbywgaW4gJy0+d3JpdGVwYWdlKCknIHdlIGFyZSBvbmx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgcGFnZSBpcwotICogbG9ja2VkLgorICogQSB0aGluZyB0byBrZWVwIGluIG1pbmQ6IGlub2RlIEBpX211dGV4IGlzIGxvY2tlZCBpbiBtb3N0IFZGUyBvcGVyYXRpb25zIHdlCisgKiBpbXBsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHRydWUgZm9yICd1Ymlmc193cml0ZXBhZ2UoKScsIHdoaWNoIG1heSBiZQorICogY2FsbGVkIHdpdGggQGlfbXV0ZXggdW5sb2NrZWQuIEZvciBleGFtcGxlLCB3aGVuIHBkZmx1c2ggaXMgZG9pbmcgYmFja2dyb3VuZAorICogd3JpdGUtYmFjaywgaXQgY2FsbHMgJ3ViaWZzX3dyaXRlcGFnZSgpJyB3aXRoIHVubG9ja2VkIEBpX211dGV4LiBBdCAibm9ybWFsIgorICogd29yay1wYXRocyB0aGUgQGlfbXV0ZXggaXMgbG9ja2VkIGluICd1Ymlmc193cml0ZXBhZ2UoKScsIGUuZy4gaW4gdGhlCisgKiAic3lzX3dyaXRlIC0+IGFsbG9jX3BhZ2VzIC0+IGRpcmVjdCByZWNsYWltIHBhdGgiLiBTbywgaW4gJ3ViaWZzX3dyaXRlcGFnZSgpJworICogd2UgYXJlIG9ubHkgZ3VhcmFudGVlZCB0aGF0IHRoZSBwYWdlIGlzIGxvY2tlZC4KICAqCi0gKiBTaW1pbGFybHksICdpX211dGV4JyBkb2VzIG5vdCBoYXZlIHRvIGJlIGxvY2tlZCBpbiByZWFkcGFnZSgpLCBlLmcuLAotICogcmVhZGFoZWFkIHBhdGggZG9lcyBub3QgaGF2ZSBpdCBsb2NrZWQgKCJzeXNfcmVhZCAtPiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQKLSAqIC0+IG9uZGVtYW5kX3JlYWRhaGVhZCAtPiByZWFkcGFnZSIpLiBJbiBjYXNlIG9mIHJlYWRhaGVhZCwgJ0lfTE9DSycgZmxhZyBpcwotICogbm90IHNldCBhcyB3ZWxsLiBIb3dldmVyLCBVQklGUyBkaXNhYmxlcyByZWFkYWhlYWQuCi0gKgotICogVGhpcywgZm9yIGV4YW1wbGUgbWVhbnMgdGhhdCB0aGVyZSBtaWdodCBiZSAyIGNvbmN1cnJlbnQgJy0+d3JpdGVwYWdlKCknCi0gKiBjYWxscyBmb3IgdGhlIHNhbWUgaW5vZGUsIGJ1dCBkaWZmZXJlbnQgaW5vZGUgZGlydHkgcGFnZXMuCisgKiBTaW1pbGFybHksIEBpX211dGV4IGlzIG5vdCBhbHdheXMgbG9ja2VkIGluICd1Ymlmc19yZWFkcGFnZSgpJywgZS5nLiwgdGhlCisgKiByZWFkLWFoZWFkIHBhdGggZG9lcyBub3QgbG9jayBpdCAoInN5c19yZWFkIC0+IGdlbmVyaWNfZmlsZV9haW9fcmVhZCAtPgorICogb25kZW1hbmRfcmVhZGFoZWFkIC0+IHJlYWRwYWdlIikuIEluIGNhc2Ugb2YgcmVhZGFoZWFkLCBASV9MT0NLIGZsYWcgaXMgbm90CisgKiBzZXQgYXMgd2VsbC4gSG93ZXZlciwgVUJJRlMgZGlzYWJsZXMgcmVhZGFoZWFkLgogICovCiAKICNpbmNsdWRlICJ1Ymlmcy5oIgpAQCAtNDQ5LDkgKzQ0Nyw5IEBACiAJCQkvKgogCQkJICogV2UgY2hhbmdlIHdob2xlIHBhZ2Ugc28gbm8gbmVlZCB0byBsb2FkIGl0LiBCdXQgd2UKIAkJCSAqIGhhdmUgdG8gc2V0IHRoZSBAUEdfY2hlY2tlZCBmbGFnIHRvIG1ha2UgdGhlIGZ1cnRoZXIKLQkJCSAqIGNvZGUgdGhlIHBhZ2UgaXMgbmV3LiBUaGlzIG1pZ2h0IGJlIG5vdCB0cnVlLCBidXQgaXQKLQkJCSAqIGlzIGJldHRlciB0byBidWRnZXQgbW9yZSB0aGF0IHRvIHJlYWQgdGhlIHBhZ2UgZnJvbQotCQkJICogdGhlIG1lZGlhLgorCQkJICogY29kZSBrbm93IHRoYXQgdGhlIHBhZ2UgaXMgbmV3LiBUaGlzIG1pZ2h0IGJlIG5vdAorCQkJICogdHJ1ZSwgYnV0IGl0IGlzIGJldHRlciB0byBidWRnZXQgbW9yZSB0aGFuIHRvIHJlYWQKKwkJCSAqIHRoZSBwYWdlIGZyb20gdGhlIG1lZGlhLgogCQkJICovCiAJCQlTZXRQYWdlQ2hlY2tlZChwYWdlKTsKIAkJCXNraXBwZWRfcmVhZCA9IDE7CkBAIC00OTcsOCArNDk1LDggQEAKIAl9CiAKIAkvKgotCSAqIFdoZWUsIHdlIGFxdWlyZWQgYnVkZ2V0aW5nIHF1aWNrbHkgLSB3aXRob3V0IGludm9sdmluZwotCSAqIGdhcmJhZ2UtY29sbGVjdGlvbiwgY29tbWl0dGluZyBvciBmb3JjZWluZyB3cml0ZS1iYWNrLiBXZSByZXR1cm4KKwkgKiBXaGVlLCB3ZSBhY3F1aXJlZCBidWRnZXRpbmcgcXVpY2tseSAtIHdpdGhvdXQgaW52b2x2aW5nCisJICogZ2FyYmFnZS1jb2xsZWN0aW9uLCBjb21taXR0aW5nIG9yIGZvcmNpbmcgd3JpdGUtYmFjay4gV2UgcmV0dXJuCiAJICogd2l0aCBAdWktPnVpX211dGV4IGxvY2tlZCBpZiB3ZSBhcmUgYXBwZW5kaW5nIHBhZ2VzLCBhbmQgdW5sb2NrZWQKIAkgKiBvdGhlcndpc2UuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIChzbGlnaHRseSBoYWNreSB0aG91Z2gpLgogCSAqLwpAQCAtNTYyLDcgKzU2MCw3IEBACiAKIAkJLyoKIAkJICogUmV0dXJuIDAgdG8gZm9yY2UgVkZTIHRvIHJlcGVhdCB0aGUgd2hvbGUgb3BlcmF0aW9uLCBvciB0aGUKLQkJICogZXJyb3IgY29kZSBpZiAnZG9fcmVhZHBhZ2UoKScgZmFpbGVzLgorCQkgKiBlcnJvciBjb2RlIGlmICdkb19yZWFkcGFnZSgpJyBmYWlscy4KIAkJICovCiAJCWNvcGllZCA9IGRvX3JlYWRwYWdlKHBhZ2UpOwogCQlnb3RvIG91dDsKQEAgLTExNzUsMTEgKzExNzMsMTEgQEAKIAl1aS0+dWlfc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJLyogVHJ1bmNhdGlvbiBjaGFuZ2VzIGlub2RlIFttY110aW1lICovCiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHViaWZzX2N1cnJlbnRfdGltZShpbm9kZSk7Ci0JLyogVGhlIG90aGVyIGF0dHJpYnV0ZXMgbWF5IGJlIGNoYW5nZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZWxsICovCisJLyogT3RoZXIgYXR0cmlidXRlcyBtYXkgYmUgY2hhbmdlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlbGwgKi8KIAlkb19hdHRyX2NoYW5nZXMoaW5vZGUsIGF0dHIpOwotCiAJZXJyID0gdWJpZnNfam5sX3RydW5jYXRlKGMsIGlub2RlLCBvbGRfc2l6ZSwgbmV3X3NpemUpOwogCW11dGV4X3VubG9jaygmdWktPnVpX211dGV4KTsKKwogb3V0X2J1ZGc6CiAJaWYgKGJ1ZGdldGVkKQogCQl1Ymlmc19yZWxlYXNlX2J1ZGdldChjLCAmcmVxKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2djLmMgYi9mcy91Ymlmcy9nYy5jCmluZGV4IGYwZjVmMTUuLjYxOGMyNzAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2djLmMKKysrIGIvZnMvdWJpZnMvZ2MuYwpAQCAtNTI5LDcgKzUyOSw3IEBACiAJICogV2Ugc2NhbiB0aGUgZW50aXJlIExFQiBldmVuIHRob3VnaCB3ZSBvbmx5IHJlYWxseSBuZWVkIHRvIHNjYW4gdXAgdG8KIAkgKiAoYy0+bGViX3NpemUgLSBscC0+ZnJlZSkuCiAJICovCi0Jc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMCk7CiAJaWYgKElTX0VSUihzbGViKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2xlYik7CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2lvLmMgYi9mcy91Ymlmcy9pby5jCmluZGV4IDc2MmE3ZDYuLmU1ODlmZWQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2lvLmMKKysrIGIvZnMvdWJpZnMvaW8uYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiB7CiAJc3RydWN0IHViaWZzX3didWYgKndidWYgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB1Ymlmc193YnVmLCB0aW1lcik7CiAKLQlkYmdfaW8oImpoZWFkICVkIiwgd2J1Zi0+amhlYWQpOworCWRiZ19pbygiamhlYWQgJXMiLCBkYmdfamhlYWQod2J1Zi0+amhlYWQpKTsKIAl3YnVmLT5uZWVkX3N5bmMgPSAxOwogCXdidWYtPmMtPm5lZWRfd2J1Zl9zeW5jID0gMTsKIAl1Ymlmc193YWtlX3VwX2JndCh3YnVmLT5jKTsKQEAgLTMxNCw3ICszMTQsOCBAQAogCiAJaWYgKHdidWYtPm5vX3RpbWVyKQogCQlyZXR1cm47Ci0JZGJnX2lvKCJzZXQgdGltZXIgZm9yIGpoZWFkICVkLCAlbGx1LSVsbHUgbWlsbGlzZWNzIiwgd2J1Zi0+amhlYWQsCisJZGJnX2lvKCJzZXQgdGltZXIgZm9yIGpoZWFkICVzLCAlbGx1LSVsbHUgbWlsbGlzZWNzIiwKKwkgICAgICAgZGJnX2poZWFkKHdidWYtPmpoZWFkKSwKIAkgICAgICAgZGl2X3U2NChrdGltZV90b19ucyh3YnVmLT5zb2Z0bGltaXQpLCBVU0VDX1BFUl9TRUMpLAogCSAgICAgICBkaXZfdTY0KGt0aW1lX3RvX25zKHdidWYtPnNvZnRsaW1pdCkgKyB3YnVmLT5kZWx0YSwKIAkJICAgICAgIFVTRUNfUEVSX1NFQykpOwpAQCAtMzUxLDggKzM1Miw4IEBACiAJCS8qIFdyaXRlLWJ1ZmZlciBpcyBlbXB0eSBvciBub3Qgc2Vla2VkICovCiAJCXJldHVybiAwOwogCi0JZGJnX2lvKCJMRUIgJWQ6JWQsICVkIGJ5dGVzLCBqaGVhZCAlZCIsCi0JICAgICAgIHdidWYtPmxudW0sIHdidWYtPm9mZnMsIHdidWYtPnVzZWQsIHdidWYtPmpoZWFkKTsKKwlkYmdfaW8oIkxFQiAlZDolZCwgJWQgYnl0ZXMsIGpoZWFkICVzIiwKKwkgICAgICAgd2J1Zi0+bG51bSwgd2J1Zi0+b2Zmcywgd2J1Zi0+dXNlZCwgZGJnX2poZWFkKHdidWYtPmpoZWFkKSk7CiAJdWJpZnNfYXNzZXJ0KCEoYy0+dmZzX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSk7CiAJdWJpZnNfYXNzZXJ0KCEod2J1Zi0+YXZhaWwgJiA3KSk7CiAJdWJpZnNfYXNzZXJ0KHdidWYtPm9mZnMgKyBjLT5taW5faW9fc2l6ZSA8PSBjLT5sZWJfc2l6ZSk7CkBAIC00MDEsNyArNDAyLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IHdidWYtPmM7CiAKLQlkYmdfaW8oIkxFQiAlZDolZCwgamhlYWQgJWQiLCBsbnVtLCBvZmZzLCB3YnVmLT5qaGVhZCk7CisJZGJnX2lvKCJMRUIgJWQ6JWQsIGpoZWFkICVzIiwgbG51bSwgb2ZmcywgZGJnX2poZWFkKHdidWYtPmpoZWFkKSk7CiAJdWJpZnNfYXNzZXJ0KGxudW0gPj0gMCAmJiBsbnVtIDwgYy0+bGViX2NudCk7CiAJdWJpZnNfYXNzZXJ0KG9mZnMgPj0gMCAmJiBvZmZzIDw9IGMtPmxlYl9zaXplKTsKIAl1Ymlmc19hc3NlcnQob2ZmcyAlIGMtPm1pbl9pb19zaXplID09IDAgJiYgIShvZmZzICYgNykpOwpAQCAtNTA4LDkgKzUwOSw5IEBACiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSB3YnVmLT5jOwogCWludCBlcnIsIHdyaXR0ZW4sIG4sIGFsaWduZWRfbGVuID0gQUxJR04obGVuLCA4KSwgb2ZmczsKIAotCWRiZ19pbygiJWQgYnl0ZXMgKCVzKSB0byBqaGVhZCAlZCB3YnVmIGF0IExFQiAlZDolZCIsIGxlbiwKLQkgICAgICAgZGJnX250eXBlKCgoc3RydWN0IHViaWZzX2NoICopYnVmKS0+bm9kZV90eXBlKSwgd2J1Zi0+amhlYWQsCi0JICAgICAgIHdidWYtPmxudW0sIHdidWYtPm9mZnMgKyB3YnVmLT51c2VkKTsKKwlkYmdfaW8oIiVkIGJ5dGVzICglcykgdG8gamhlYWQgJXMgd2J1ZiBhdCBMRUIgJWQ6JWQiLCBsZW4sCisJICAgICAgIGRiZ19udHlwZSgoKHN0cnVjdCB1Ymlmc19jaCAqKWJ1ZiktPm5vZGVfdHlwZSksCisJICAgICAgIGRiZ19qaGVhZCh3YnVmLT5qaGVhZCksIHdidWYtPmxudW0sIHdidWYtPm9mZnMgKyB3YnVmLT51c2VkKTsKIAl1Ymlmc19hc3NlcnQobGVuID4gMCAmJiB3YnVmLT5sbnVtID49IDAgJiYgd2J1Zi0+bG51bSA8IGMtPmxlYl9jbnQpOwogCXViaWZzX2Fzc2VydCh3YnVmLT5vZmZzID49IDAgJiYgd2J1Zi0+b2ZmcyAlIGMtPm1pbl9pb19zaXplID09IDApOwogCXViaWZzX2Fzc2VydCghKHdidWYtPm9mZnMgJiA3KSAmJiB3YnVmLT5vZmZzIDw9IGMtPmxlYl9zaXplKTsKQEAgLTUzNSw4ICs1MzYsOCBAQAogCQltZW1jcHkod2J1Zi0+YnVmICsgd2J1Zi0+dXNlZCwgYnVmLCBsZW4pOwogCiAJCWlmIChhbGlnbmVkX2xlbiA9PSB3YnVmLT5hdmFpbCkgewotCQkJZGJnX2lvKCJmbHVzaCBqaGVhZCAlZCB3YnVmIHRvIExFQiAlZDolZCIsCi0JCQkgICAgICAgd2J1Zi0+amhlYWQsIHdidWYtPmxudW0sIHdidWYtPm9mZnMpOworCQkJZGJnX2lvKCJmbHVzaCBqaGVhZCAlcyB3YnVmIHRvIExFQiAlZDolZCIsCisJCQkgICAgICAgZGJnX2poZWFkKHdidWYtPmpoZWFkKSwgd2J1Zi0+bG51bSwgd2J1Zi0+b2Zmcyk7CiAJCQllcnIgPSB1YmlfbGViX3dyaXRlKGMtPnViaSwgd2J1Zi0+bG51bSwgd2J1Zi0+YnVmLAogCQkJCQkgICAgd2J1Zi0+b2ZmcywgYy0+bWluX2lvX3NpemUsCiAJCQkJCSAgICB3YnVmLT5kdHlwZSk7CkBAIC01NjQsOCArNTY1LDggQEAKIAkgKiBtaW5pbWFsIEkvTyB1bml0LiBXZSBoYXZlIHRvIGZpbGwgYW5kIGZsdXNoIHdyaXRlLWJ1ZmZlciBhbmQgc3dpdGNoCiAJICogdG8gdGhlIG5leHQgbWluLiBJL08gdW5pdC4KIAkgKi8KLQlkYmdfaW8oImZsdXNoIGpoZWFkICVkIHdidWYgdG8gTEVCICVkOiVkIiwKLQkgICAgICAgd2J1Zi0+amhlYWQsIHdidWYtPmxudW0sIHdidWYtPm9mZnMpOworCWRiZ19pbygiZmx1c2ggamhlYWQgJXMgd2J1ZiB0byBMRUIgJWQ6JWQiLAorCSAgICAgICBkYmdfamhlYWQod2J1Zi0+amhlYWQpLCB3YnVmLT5sbnVtLCB3YnVmLT5vZmZzKTsKIAltZW1jcHkod2J1Zi0+YnVmICsgd2J1Zi0+dXNlZCwgYnVmLCB3YnVmLT5hdmFpbCk7CiAJZXJyID0gdWJpX2xlYl93cml0ZShjLT51YmksIHdidWYtPmxudW0sIHdidWYtPmJ1Ziwgd2J1Zi0+b2ZmcywKIAkJCSAgICBjLT5taW5faW9fc2l6ZSwgd2J1Zi0+ZHR5cGUpOwpAQCAtNjk4LDggKzY5OSw4IEBACiAJaW50IGVyciwgcmxlbiwgb3ZlcmxhcDsKIAlzdHJ1Y3QgdWJpZnNfY2ggKmNoID0gYnVmOwogCi0JZGJnX2lvKCJMRUIgJWQ6JWQsICVzLCBsZW5ndGggJWQsIGpoZWFkICVkIiwgbG51bSwgb2ZmcywKLQkgICAgICAgZGJnX250eXBlKHR5cGUpLCBsZW4sIHdidWYtPmpoZWFkKTsKKwlkYmdfaW8oIkxFQiAlZDolZCwgJXMsIGxlbmd0aCAlZCwgamhlYWQgJXMiLCBsbnVtLCBvZmZzLAorCSAgICAgICBkYmdfbnR5cGUodHlwZSksIGxlbiwgZGJnX2poZWFkKHdidWYtPmpoZWFkKSk7CiAJdWJpZnNfYXNzZXJ0KHdidWYgJiYgbG51bSA+PSAwICYmIGxudW0gPCBjLT5sZWJfY250ICYmIG9mZnMgPj0gMCk7CiAJdWJpZnNfYXNzZXJ0KCEob2ZmcyAmIDcpICYmIG9mZnMgPCBjLT5sZWJfc2l6ZSk7CiAJdWJpZnNfYXNzZXJ0KHR5cGUgPj0gMCAmJiB0eXBlIDwgVUJJRlNfTk9ERV9UWVBFU19DTlQpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvam91cm5hbC5jIGIvZnMvdWJpZnMvam91cm5hbC5jCmluZGV4IDY0YjVmM2EuLmQzMjFiYWUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2pvdXJuYWwuYworKysgYi9mcy91Ymlmcy9qb3VybmFsLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCSAqIHNvbWUuIEJ1dCB0aGUgd3JpdGUtYnVmZmVyIG11dGV4IGhhcyB0byBiZSB1bmxvY2tlZCBiZWNhdXNlCiAJICogR0MgYWxzbyB0YWtlcyBpdC4KIAkgKi8KLQlkYmdfam5sKCJubyBmcmVlIHNwYWNlICBqaGVhZCAlZCwgcnVuIEdDIiwgamhlYWQpOworCWRiZ19qbmwoIm5vIGZyZWUgc3BhY2UgaW4gamhlYWQgJXMsIHJ1biBHQyIsIGRiZ19qaGVhZChqaGVhZCkpOwogCW11dGV4X3VubG9jaygmd2J1Zi0+aW9fbXV0ZXgpOwogCiAJbG51bSA9IHViaWZzX2dhcmJhZ2VfY29sbGVjdChjLCAwKTsKQEAgLTE3Myw3ICsxNzMsOCBAQAogCQkgKiBiZWNhdXNlIHdlIGRyb3BwZWQgQHdidWYtPmlvX211dGV4LCBzbyB0cnkgb25jZQogCQkgKiBhZ2Fpbi4KIAkJICovCi0JCWRiZ19qbmwoIkdDIGNvdWxkbid0IG1ha2UgYSBmcmVlIExFQiBmb3IgamhlYWQgJWQiLCBqaGVhZCk7CisJCWRiZ19qbmwoIkdDIGNvdWxkbid0IG1ha2UgYSBmcmVlIExFQiBmb3IgamhlYWQgJXMiLAorCQkJZGJnX2poZWFkKGpoZWFkKSk7CiAJCWlmIChyZXRyaWVzKysgPCAyKSB7CiAJCQlkYmdfam5sKCJyZXRyeSAoJWQpIiwgcmV0cmllcyk7CiAJCQlnb3RvIGFnYWluOwpAQCAtMTg0LDcgKzE4NSw3IEBACiAJfQogCiAJbXV0ZXhfbG9ja19uZXN0ZWQoJndidWYtPmlvX211dGV4LCB3YnVmLT5qaGVhZCk7Ci0JZGJnX2pubCgiZ290IExFQiAlZCBmb3IgamhlYWQgJWQiLCBsbnVtLCBqaGVhZCk7CisJZGJnX2pubCgiZ290IExFQiAlZCBmb3IgamhlYWQgJXMiLCBsbnVtLCBkYmdfamhlYWQoamhlYWQpKTsKIAlhdmFpbCA9IGMtPmxlYl9zaXplIC0gd2J1Zi0+b2ZmcyAtIHdidWYtPnVzZWQ7CiAKIAlpZiAod2J1Zi0+bG51bSAhPSAtMSAmJiBhdmFpbCA+PSBsZW4pIHsKQEAgLTI1NSw3ICsyNTYsOCBAQAogCSpsbnVtID0gYy0+amhlYWRzW2poZWFkXS53YnVmLmxudW07CiAJKm9mZnMgPSBjLT5qaGVhZHNbamhlYWRdLndidWYub2ZmcyArIGMtPmpoZWFkc1tqaGVhZF0ud2J1Zi51c2VkOwogCi0JZGJnX2pubCgiamhlYWQgJWQsIExFQiAlZDolZCwgbGVuICVkIiwgamhlYWQsICpsbnVtLCAqb2ZmcywgbGVuKTsKKwlkYmdfam5sKCJqaGVhZCAlcywgTEVCICVkOiVkLCBsZW4gJWQiLAorCQlkYmdfamhlYWQoamhlYWQpLCAqbG51bSwgKm9mZnMsIGxlbik7CiAJdWJpZnNfcHJlcGFyZV9ub2RlKGMsIG5vZGUsIGxlbiwgMCk7CiAKIAlyZXR1cm4gdWJpZnNfd2J1Zl93cml0ZV9ub2xvY2sod2J1Ziwgbm9kZSwgbGVuKTsKQEAgLTI4NSw3ICsyODcsOCBAQAogCiAJKmxudW0gPSBjLT5qaGVhZHNbamhlYWRdLndidWYubG51bTsKIAkqb2ZmcyA9IGMtPmpoZWFkc1tqaGVhZF0ud2J1Zi5vZmZzICsgYy0+amhlYWRzW2poZWFkXS53YnVmLnVzZWQ7Ci0JZGJnX2pubCgiamhlYWQgJWQsIExFQiAlZDolZCwgbGVuICVkIiwgamhlYWQsICpsbnVtLCAqb2ZmcywgbGVuKTsKKwlkYmdfam5sKCJqaGVhZCAlcywgTEVCICVkOiVkLCBsZW4gJWQiLAorCQlkYmdfamhlYWQoamhlYWQpLCAqbG51bSwgKm9mZnMsIGxlbik7CiAKIAllcnIgPSB1Ymlmc193YnVmX3dyaXRlX25vbG9jayh3YnVmLCBidWYsIGxlbik7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2tleS5oIGIvZnMvdWJpZnMva2V5LmgKaW5kZXggNWZhMjdlYS4uMGY1MzBjNiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMva2V5LmgKKysrIGIvZnMvdWJpZnMva2V5LmgKQEAgLTIyOSwyMyArMjI5LDYgQEAKIH0KIAogLyoqCi0gKiB4ZW50X2tleV9pbml0X2hhc2ggLSBpbml0aWFsaXplIGV4dGVuZGVkIGF0dHJpYnV0ZSBlbnRyeSBrZXkgd2l0aG91dAotICogICAgICAgICAgICAgICAgICAgICAgcmUtY2FsY3VsYXRpbmcgaGFzaCBmdW5jdGlvbi4KLSAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqIEBrZXk6IGtleSB0byBpbml0aWFsaXplCi0gKiBAaW51bTogaG9zdCBpbm9kZSBudW1iZXIKLSAqIEBoYXNoOiBleHRlbmRlZCBhdHRyaWJ1dGUgZW50cnkgbmFtZSBoYXNoCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW50X2tleV9pbml0X2hhc2goY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCi0JCQkJICAgICAgdW5pb24gdWJpZnNfa2V5ICprZXksIGlub190IGludW0sCi0JCQkJICAgICAgdWludDMyX3QgaGFzaCkKLXsKLQl1Ymlmc19hc3NlcnQoIShoYXNoICYgflVCSUZTX1NfS0VZX0hBU0hfTUFTSykpOwotCWtleS0+dTMyWzBdID0gaW51bTsKLQlrZXktPnUzMlsxXSA9IGhhc2ggfCAoVUJJRlNfWEVOVF9LRVkgPDwgVUJJRlNfU19LRVlfSEFTSF9CSVRTKTsKLX0KLQotLyoqCiAgKiB4ZW50X2tleV9pbml0X2ZsYXNoIC0gaW5pdGlhbGl6ZSBvbi1mbGFzaCBleHRlbmRlZCBhdHRyaWJ1dGUgZW50cnkga2V5LgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGs6IGtleSB0byBpbml0aWFsaXplCkBAIC0yOTUsMjIgKzI3OCwxNSBAQAogfQogCiAvKioKLSAqIGRhdGFfa2V5X2luaXRfZmxhc2ggLSBpbml0aWFsaXplIG9uLWZsYXNoIGRhdGEga2V5LgorICogaGlnaGVzdF9kYXRhX2tleSAtIGdldCB0aGUgaGlnaGVzdCBwb3NzaWJsZSBkYXRhIGtleSBmb3IgYW4gaW5vZGUuCiAgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0Ci0gKiBAazoga2V5IHRvIGluaXRpYWxpemUKKyAqIEBrZXk6IGtleSB0byBpbml0aWFsaXplCiAgKiBAaW51bTogaW5vZGUgbnVtYmVyCi0gKiBAYmxvY2s6IGJsb2NrIG51bWJlcgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZGF0YV9rZXlfaW5pdF9mbGFzaChjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqaywKLQkJCQkgICAgICAgaW5vX3QgaW51bSwgdW5zaWduZWQgaW50IGJsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGhpZ2hlc3RfZGF0YV9rZXkoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICAgdW5pb24gdWJpZnNfa2V5ICprZXksIGlub190IGludW0pCiB7Ci0JdW5pb24gdWJpZnNfa2V5ICprZXkgPSBrOwotCi0JdWJpZnNfYXNzZXJ0KCEoYmxvY2sgJiB+VUJJRlNfU19LRVlfQkxPQ0tfTUFTSykpOwotCWtleS0+ajMyWzBdID0gY3B1X3RvX2xlMzIoaW51bSk7Ci0Ja2V5LT5qMzJbMV0gPSBjcHVfdG9fbGUzMihibG9jayB8Ci0JCQkJICAoVUJJRlNfREFUQV9LRVkgPDwgVUJJRlNfU19LRVlfQkxPQ0tfQklUUykpOwotCW1lbXNldChrICsgOCwgMCwgVUJJRlNfTUFYX0tFWV9MRU4gLSA4KTsKKwlkYXRhX2tleV9pbml0KGMsIGtleSwgaW51bSwgVUJJRlNfU19LRVlfQkxPQ0tfTUFTSyk7CiB9CiAKIC8qKgpAQCAtNTU0LDQgKzUzMCw1IEBACiAJCXJldHVybiAwOwogCX0KIH0KKwogI2VuZGlmIC8qICFfX1VCSUZTX0tFWV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xvZy5jIGIvZnMvdWJpZnMvbG9nLmMKaW5kZXggNTZlMzM3Ny4uYzM0NWUxMiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbG9nLmMKKysrIGIvZnMvdWJpZnMvbG9nLmMKQEAgLTE2OSw4ICsxNjksOCBAQAogCSAqLwogCWMtPmJ1ZF9ieXRlcyArPSBjLT5sZWJfc2l6ZSAtIGJ1ZC0+c3RhcnQ7CiAKLQlkYmdfbG9nKCJMRUIgJWQ6JWQsIGpoZWFkICVkLCBidWRfYnl0ZXMgJWxsZCIsIGJ1ZC0+bG51bSwKLQkJYnVkLT5zdGFydCwgYnVkLT5qaGVhZCwgYy0+YnVkX2J5dGVzKTsKKwlkYmdfbG9nKCJMRUIgJWQ6JWQsIGpoZWFkICVzLCBidWRfYnl0ZXMgJWxsZCIsIGJ1ZC0+bG51bSwKKwkJYnVkLT5zdGFydCwgZGJnX2poZWFkKGJ1ZC0+amhlYWQpLCBjLT5idWRfYnl0ZXMpOwogCXNwaW5fdW5sb2NrKCZjLT5idWRzX2xvY2spOwogfQogCkBAIC0zNTUsMTYgKzM1NSwxNiBAQAogCQkJICogaGVhZHMgKG5vbi1jbG9zZWQgYnVkcykuCiAJCQkgKi8KIAkJCWMtPmNtdF9idWRfYnl0ZXMgKz0gd2J1Zi0+b2ZmcyAtIGJ1ZC0+c3RhcnQ7Ci0JCQlkYmdfbG9nKCJwcmVzZXJ2ZSAlZDolZCwgamhlYWQgJWQsIGJ1ZCBieXRlcyAlZCwgIgorCQkJZGJnX2xvZygicHJlc2VydmUgJWQ6JWQsIGpoZWFkICVzLCBidWQgYnl0ZXMgJWQsICIKIAkJCQkiY210X2J1ZF9ieXRlcyAlbGxkIiwgYnVkLT5sbnVtLCBidWQtPnN0YXJ0LAotCQkJCWJ1ZC0+amhlYWQsIHdidWYtPm9mZnMgLSBidWQtPnN0YXJ0LAorCQkJCWRiZ19qaGVhZChidWQtPmpoZWFkKSwgd2J1Zi0+b2ZmcyAtIGJ1ZC0+c3RhcnQsCiAJCQkJYy0+Y210X2J1ZF9ieXRlcyk7CiAJCQlidWQtPnN0YXJ0ID0gd2J1Zi0+b2ZmczsKIAkJfSBlbHNlIHsKIAkJCWMtPmNtdF9idWRfYnl0ZXMgKz0gYy0+bGViX3NpemUgLSBidWQtPnN0YXJ0OwotCQkJZGJnX2xvZygicmVtb3ZlICVkOiVkLCBqaGVhZCAlZCwgYnVkIGJ5dGVzICVkLCAiCisJCQlkYmdfbG9nKCJyZW1vdmUgJWQ6JWQsIGpoZWFkICVzLCBidWQgYnl0ZXMgJWQsICIKIAkJCQkiY210X2J1ZF9ieXRlcyAlbGxkIiwgYnVkLT5sbnVtLCBidWQtPnN0YXJ0LAotCQkJCWJ1ZC0+amhlYWQsIGMtPmxlYl9zaXplIC0gYnVkLT5zdGFydCwKKwkJCQlkYmdfamhlYWQoYnVkLT5qaGVhZCksIGMtPmxlYl9zaXplIC0gYnVkLT5zdGFydCwKIAkJCQljLT5jbXRfYnVkX2J5dGVzKTsKIAkJCXJiX2VyYXNlKHAxLCAmYy0+YnVkcyk7CiAJCQkvKgpAQCAtNDI5LDcgKzQyOSw4IEBACiAJCWlmIChsbnVtID09IC0xIHx8IG9mZnMgPT0gYy0+bGViX3NpemUpCiAJCQljb250aW51ZTsKIAotCQlkYmdfbG9nKCJhZGQgcmVmIHRvIExFQiAlZDolZCBmb3IgamhlYWQgJWQiLCBsbnVtLCBvZmZzLCBpKTsKKwkJZGJnX2xvZygiYWRkIHJlZiB0byBMRUIgJWQ6JWQgZm9yIGpoZWFkICVzIiwKKwkJCWxudW0sIG9mZnMsIGRiZ19qaGVhZChpKSk7CiAJCXJlZiA9IGJ1ZiArIGxlbjsKIAkJcmVmLT5jaC5ub2RlX3R5cGUgPSBVQklGU19SRUZfTk9ERTsKIAkJcmVmLT5sbnVtID0gY3B1X3RvX2xlMzIobG51bSk7CkBAIC02OTUsNyArNjk2LDcgQEAKIAlsbnVtID0gYy0+bHRhaWxfbG51bTsKIAl3cml0ZV9sbnVtID0gbG51bTsKIAl3aGlsZSAoMSkgewotCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5zYnVmKTsKKwkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMCk7CiAJCWlmIChJU19FUlIoc2xlYikpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2xlYik7CiAJCQlnb3RvIG91dF9mcmVlOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbHByb3BzLmMgYi9mcy91Ymlmcy9scHJvcHMuYwppbmRleCA0Y2RkMjg0Li40ZDRjYTM4IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9scHJvcHMuYworKysgYi9mcy91Ymlmcy9scHJvcHMuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJY2FzZSBMUFJPUFNfRlJFRToKIAkJaWYgKGFkZF90b19scHRfaGVhcChjLCBscHJvcHMsIGNhdCkpCiAJCQlicmVhazsKLQkJLyogTm8gbW9yZSByb29tIG9uIGhlYXAgc28gbWFrZSBpdCB1bmNhdGVnb3JpemVkICovCisJCS8qIE5vIG1vcmUgcm9vbSBvbiBoZWFwIHNvIG1ha2UgaXQgdW4tY2F0ZWdvcml6ZWQgKi8KIAkJY2F0ID0gTFBST1BTX1VOQ0FUOwogCQkvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIExQUk9QU19VTkNBVDoKQEAgLTM3NSw4ICszNzUsOCBAQAogICogQGxwcm9wczogTEVCIHByb3BlcnRpZXMKICAqCiAgKiBBIExFQiBtYXkgaGF2ZSBmYWxsZW4gb2ZmIG9mIHRoZSBib3R0b20gb2YgYSBoZWFwLCBhbmQgZW5kZWQgdXAgYXMKLSAqIHVuY2F0ZWdvcml6ZWQgZXZlbiB0aG91Z2ggaXQgaGFzIGVub3VnaCBzcGFjZSBmb3IgdXMgbm93LiBJZiB0aGF0IGlzIHRoZSBjYXNlCi0gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHV0IHRoZSBMRUIgYmFjayBvbnRvIGEgaGVhcC4KKyAqIHVuLWNhdGVnb3JpemVkIGV2ZW4gdGhvdWdoIGl0IGhhcyBlbm91Z2ggc3BhY2UgZm9yIHVzIG5vdy4gSWYgdGhhdCBpcyB0aGUKKyAqIGNhc2UgdGhpcyBmdW5jdGlvbiB3aWxsIHB1dCB0aGUgTEVCIGJhY2sgb250byBhIGhlYXAuCiAgKi8KIHZvaWQgdWJpZnNfZW5zdXJlX2NhdChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2xwcm9wcyAqbHByb3BzKQogewpAQCAtNDM2LDEwICs0MzYsMTAgQEAKIC8qKgogICogY2hhbmdlX2NhdGVnb3J5IC0gY2hhbmdlIExFQiBwcm9wZXJ0aWVzIGNhdGVnb3J5LgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAotICogQGxwcm9wczogTEVCIHByb3BlcnRpZXMgdG8gcmVjYXRlZ29yaXplCisgKiBAbHByb3BzOiBMRUIgcHJvcGVydGllcyB0byByZS1jYXRlZ29yaXplCiAgKgogICogTEVCIHByb3BlcnRpZXMgYXJlIGNhdGVnb3JpemVkIHRvIGVuYWJsZSBmYXN0IGZpbmQgb3BlcmF0aW9ucy4gV2hlbiB0aGUgTEVCCi0gKiBwcm9wZXJ0aWVzIGNoYW5nZSB0aGV5IG11c3QgYmUgcmVjYXRlZ29yaXplZC4KKyAqIHByb3BlcnRpZXMgY2hhbmdlIHRoZXkgbXVzdCBiZSByZS1jYXRlZ29yaXplZC4KICAqLwogc3RhdGljIHZvaWQgY2hhbmdlX2NhdGVnb3J5KHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfbHByb3BzICpscHJvcHMpCiB7CkBAIC00NjEsMjEgKzQ2MSwxOCBAQAogfQogCiAvKioKLSAqIGNhbGNfZGFyayAtIGNhbGN1bGF0ZSBMRUIgZGFyayBzcGFjZSBzaXplLgorICogdWJpZnNfY2FsY19kYXJrIC0gY2FsY3VsYXRlIExFQiBkYXJrIHNwYWNlIHNpemUuCiAgKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHNwYzogYW1vdW50IG9mIGZyZWUgYW5kIGRpcnR5IHNwYWNlIGluIHRoZSBMRUIKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW1vdW50IG9mIGRhcmsgc3BhY2UgaW4gYW4gTEVCIHdoaWNoIGhhcyBAc3BjIGJ5dGVzCi0gKiBvZiBmcmVlIGFuZCBkaXJ0eSBzcGFjZS4gUmV0dXJucyB0aGUgY2FsY3VsYXRpb25zIHJlc3VsdC4KKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhbW91bnQgb2YgZGFyayBzcGFjZSBpbiBhbiBMRUIgd2hpY2gKKyAqIGhhcyBAc3BjIGJ5dGVzIG9mIGZyZWUgYW5kIGRpcnR5IHNwYWNlLgogICoKLSAqIERhcmsgc3BhY2UgaXMgdGhlIHNwYWNlIHdoaWNoIGlzIG5vdCBhbHdheXMgdXNhYmxlIC0gaXQgZGVwZW5kcyBvbiB3aGljaAotICogbm9kZXMgYXJlIHdyaXR0ZW4gaW4gd2hpY2ggb3JkZXIuIEUuZy4sIGlmIGFuIExFQiBoYXMgb25seSA1MTIgZnJlZSBieXRlcywKLSAqIGl0IGlzIGRhcmsgc3BhY2UsIGJlY2F1c2UgaXQgY2Fubm90IGZpdCBhIGxhcmdlIGRhdGEgbm9kZS4gU28gVUJJRlMgY2Fubm90Ci0gKiBjb3VudCBvbiB0aGlzIExFQiBhbmQgdHJlYXQgdGhlc2UgNTEyIGJ5dGVzIGFzIHVzYWJsZSBiZWNhdXNlIGl0IGlzIG5vdCB0cnVlCi0gKiBpZiwgZm9yIGV4YW1wbGUsIG9ubHkgYmlnIGNodW5rcyBvZiB1bmNvbXByZXNzaWJsZSBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0bwotICogdGhlIEZTLgorICogVUJJRlMgaXMgdHJ5aW5nIHRvIGFjY291bnQgdGhlIHNwYWNlIHdoaWNoIG1pZ2h0IG5vdCBiZSB1c2FibGUsIGFuZCB0aGlzCisgKiBzcGFjZSBpcyBjYWxsZWQgImRhcmsgc3BhY2UiLiBGb3IgZXhhbXBsZSwgaWYgYW4gTEVCIGhhcyBvbmx5ICU1MTIgZnJlZQorICogYnl0ZXMsIGl0IGlzIGRhcmsgc3BhY2UsIGJlY2F1c2UgaXQgY2Fubm90IGZpdCBhIGxhcmdlIGRhdGEgbm9kZS4KICAqLwotc3RhdGljIGludCBjYWxjX2Rhcmsoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBzcGMpCitpbnQgdWJpZnNfY2FsY19kYXJrKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgc3BjKQogewogCXViaWZzX2Fzc2VydCghKHNwYyAmIDcpKTsKIApAQCAtNTE4LDcgKzUxNSw3IEBACiAgKiBAZnJlZTogbmV3IGZyZWUgc3BhY2UgYW1vdW50CiAgKiBAZGlydHk6IG5ldyBkaXJ0eSBzcGFjZSBhbW91bnQKICAqIEBmbGFnczogbmV3IGZsYWdzCi0gKiBAaWR4X2djX2NudDogY2hhbmdlIHRvIHRoZSBjb3VudCBvZiBpZHhfZ2MgbGlzdAorICogQGlkeF9nY19jbnQ6IGNoYW5nZSB0byB0aGUgY291bnQgb2YgQGlkeF9nYyBsaXN0CiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIExFQiBwcm9wZXJ0aWVzIChAZnJlZSwgQGRpcnR5IG9yIEBmbGFnKS4gSG93ZXZlciwgdGhlCiAgKiBwcm9wZXJ0eSB3aGljaCBoYXMgdGhlICVMUFJPUFNfTkMgdmFsdWUgaXMgbm90IGNoYW5nZWQuIFJldHVybnMgYSBwb2ludGVyIHRvCkBAIC01MzUsNyArNTMyLDcgQEAKIHsKIAkvKgogCSAqIFRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGNoYW5nZSBscHJvcHMsIHNvIHdlCi0JICogZGlzY2FyZCB0aGUgY29uc3QgcXVhbGlmaWVyLgorCSAqIGRpc2NhcmQgdGhlICJjb25zdCIgcXVhbGlmaWVyLgogCSAqLwogCXN0cnVjdCB1Ymlmc19scHJvcHMgKmxwcm9wcyA9IChzdHJ1Y3QgdWJpZnNfbHByb3BzICopbHA7CiAKQEAgLTU3NSw3ICs1NzIsNyBAQAogCQlpZiAob2xkX3NwYyA8IGMtPmRlYWRfd20pCiAJCQljLT5sc3QudG90YWxfZGVhZCAtPSBvbGRfc3BjOwogCQllbHNlCi0JCQljLT5sc3QudG90YWxfZGFyayAtPSBjYWxjX2RhcmsoYywgb2xkX3NwYyk7CisJCQljLT5sc3QudG90YWxfZGFyayAtPSB1Ymlmc19jYWxjX2RhcmsoYywgb2xkX3NwYyk7CiAKIAkJYy0+bHN0LnRvdGFsX3VzZWQgLT0gYy0+bGViX3NpemUgLSBvbGRfc3BjOwogCX0KQEAgLTYxNiw3ICs2MTMsNyBAQAogCQlpZiAobmV3X3NwYyA8IGMtPmRlYWRfd20pCiAJCQljLT5sc3QudG90YWxfZGVhZCArPSBuZXdfc3BjOwogCQllbHNlCi0JCQljLT5sc3QudG90YWxfZGFyayArPSBjYWxjX2RhcmsoYywgbmV3X3NwYyk7CisJCQljLT5sc3QudG90YWxfZGFyayArPSB1Ymlmc19jYWxjX2RhcmsoYywgbmV3X3NwYyk7CiAKIAkJYy0+bHN0LnRvdGFsX3VzZWQgKz0gYy0+bGViX3NpemUgLSBuZXdfc3BjOwogCX0KQEAgLTEwOTYsNyArMTA5Myw3IEBACiAJCX0KIAl9CiAKLQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5kYmctPmJ1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+ZGJnLT5idWYsIDApOwogCWlmIChJU19FUlIoc2xlYikpIHsKIAkJLyoKIAkJICogQWZ0ZXIgYW4gdW5jbGVhbiB1bm1vdW50LCBlbXB0eSBhbmQgZnJlZWFibGUgTEVCcwpAQCAtMTEwNyw3ICsxMTA0LDcgQEAKIAkJCQkgICItIGNvbnRpbnVpbmcgY2hlY2tpbmciKTsKIAkJCWxzdC0+ZW1wdHlfbGVicyArPSAxOwogCQkJbHN0LT50b3RhbF9mcmVlICs9IGMtPmxlYl9zaXplOwotCQkJbHN0LT50b3RhbF9kYXJrICs9IGNhbGNfZGFyayhjLCBjLT5sZWJfc2l6ZSk7CisJCQlsc3QtPnRvdGFsX2RhcmsgKz0gdWJpZnNfY2FsY19kYXJrKGMsIGMtPmxlYl9zaXplKTsKIAkJCXJldHVybiBMUFRfU0NBTl9DT05USU5VRTsKIAkJfQogCkBAIC0xMTE3LDcgKzExMTQsNyBAQAogCQkJCSAgIi0gY29udGludWluZyBjaGVja2luZyIpOwogCQkJbHN0LT50b3RhbF9mcmVlICArPSBscC0+ZnJlZTsKIAkJCWxzdC0+dG90YWxfZGlydHkgKz0gbHAtPmRpcnR5OwotCQkJbHN0LT50b3RhbF9kYXJrICArPSAgY2FsY19kYXJrKGMsIGMtPmxlYl9zaXplKTsKKwkJCWxzdC0+dG90YWxfZGFyayAgKz0gIHViaWZzX2NhbGNfZGFyayhjLCBjLT5sZWJfc2l6ZSk7CiAJCQlyZXR1cm4gTFBUX1NDQU5fQ09OVElOVUU7CiAJCX0KIAkJZGF0YS0+ZXJyID0gUFRSX0VSUihzbGViKTsKQEAgLTEyMzUsNyArMTIzMiw3IEBACiAJCWlmIChzcGMgPCBjLT5kZWFkX3dtKQogCQkJbHN0LT50b3RhbF9kZWFkICs9IHNwYzsKIAkJZWxzZQotCQkJbHN0LT50b3RhbF9kYXJrICs9IGNhbGNfZGFyayhjLCBzcGMpOworCQkJbHN0LT50b3RhbF9kYXJrICs9IHViaWZzX2NhbGNfZGFyayhjLCBzcGMpOwogCX0KIAogCXViaWZzX3NjYW5fZGVzdHJveShzbGViKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL21hc3Rlci5jIGIvZnMvdWJpZnMvbWFzdGVyLmMKaW5kZXggYTg4ZjMzOC4uMjhiZWFlZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbWFzdGVyLmMKKysrIGIvZnMvdWJpZnMvbWFzdGVyLmMKQEAgLTI5LDcgKzI5LDggQEAKICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRoZSBtYXN0ZXIgbm9kZSBMRUJzIGFuZCBzZWFyY2ggZm9yIHRoZSBsYXRlc3QgbWFzdGVyCi0gKiBub2RlLiBSZXR1cm5zIHplcm8gaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaW4gY2FzZSBvZgorICogbm9kZS4gUmV0dXJucyB6ZXJvIGluIGNhc2Ugb2Ygc3VjY2VzcywgJS1FVUNMRUFOIGlmIHRoZXJlIG1hc3RlciBhcmVhIGlzCisgKiBjb3JydXB0ZWQgYW5kIHJlcXVpcmVzIHJlY292ZXJ5LCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YKICAqIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgc2Nhbl9mb3JfbWFzdGVyKHN0cnVjdCB1Ymlmc19pbmZvICpjKQpAQCAtNDAsNyArNDEsNyBAQAogCiAJbG51bSA9IFVCSUZTX01TVF9MTlVNOwogCi0Jc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMSk7CiAJaWYgKElTX0VSUihzbGViKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2xlYik7CiAJbm9kZXNfY250ID0gc2xlYi0+bm9kZXNfY250OwpAQCAtNDgsNyArNDksNyBAQAogCQlzbm9kID0gbGlzdF9lbnRyeShzbGViLT5ub2Rlcy5wcmV2LCBzdHJ1Y3QgdWJpZnNfc2Nhbl9ub2RlLAogCQkJCSAgbGlzdCk7CiAJCWlmIChzbm9kLT50eXBlICE9IFVCSUZTX01TVF9OT0RFKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9kdW1wOwogCQltZW1jcHkoYy0+bXN0X25vZGUsIHNub2QtPm5vZGUsIHNub2QtPmxlbik7CiAJCW9mZnMgPSBzbm9kLT5vZmZzOwogCX0KQEAgLTU2LDcgKzU3LDcgQEAKIAogCWxudW0gKz0gMTsKIAotCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGMtPnNidWYpOworCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGMtPnNidWYsIDEpOwogCWlmIChJU19FUlIoc2xlYikpCiAJCXJldHVybiBQVFJfRVJSKHNsZWIpOwogCWlmIChzbGViLT5ub2Rlc19jbnQgIT0gbm9kZXNfY250KQpAQCAtNjUsNyArNjYsNyBAQAogCQlnb3RvIG91dDsKIAlzbm9kID0gbGlzdF9lbnRyeShzbGViLT5ub2Rlcy5wcmV2LCBzdHJ1Y3QgdWJpZnNfc2Nhbl9ub2RlLCBsaXN0KTsKIAlpZiAoc25vZC0+dHlwZSAhPSBVQklGU19NU1RfTk9ERSkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2R1bXA7CiAJaWYgKHNub2QtPm9mZnMgIT0gb2ZmcykKIAkJZ290byBvdXQ7CiAJaWYgKG1lbWNtcCgodm9pZCAqKWMtPm1zdF9ub2RlICsgVUJJRlNfQ0hfU1osCkBAIC03OCw2ICs3OSwxMiBAQAogCiBvdXQ6CiAJdWJpZnNfc2Nhbl9kZXN0cm95KHNsZWIpOworCXJldHVybiAtRVVDTEVBTjsKKworb3V0X2R1bXA6CisJdWJpZnNfZXJyKCJ1bmV4cGVjdGVkIG5vZGUgdHlwZSAlZCBtYXN0ZXIgTEVCICVkOiVkIiwKKwkJICBzbm9kLT50eXBlLCBsbnVtLCBzbm9kLT5vZmZzKTsKKwl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTI1Niw3ICsyNjMsOCBAQAogCiAJZXJyID0gc2Nhbl9mb3JfbWFzdGVyKGMpOwogCWlmIChlcnIpIHsKLQkJZXJyID0gdWJpZnNfcmVjb3Zlcl9tYXN0ZXJfbm9kZShjKTsKKwkJaWYgKGVyciA9PSAtRVVDTEVBTikKKwkJCWVyciA9IHViaWZzX3JlY292ZXJfbWFzdGVyX25vZGUoYyk7CiAJCWlmIChlcnIpCiAJCQkvKgogCQkJICogTm90ZSwgd2UgZG8gbm90IGZyZWUgJ2MtPm1zdF9ub2RlJyBoZXJlIGJlY2F1c2UgdGhlCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9vcnBoYW4uYyBiL2ZzL3ViaWZzL29ycGhhbi5jCmluZGV4IDE1MmE3YjMuLjgyMDA5YzcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL29ycGhhbi5jCisrKyBiL2ZzL3ViaWZzL29ycGhhbi5jCkBAIC02NzAsOSArNjcwLDEwIEBACiAJCXN0cnVjdCB1Ymlmc19zY2FuX2xlYiAqc2xlYjsKIAogCQlkYmdfcmN2cnkoIkxFQiAlZCIsIGxudW0pOwotCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5zYnVmKTsKKwkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMSk7CiAJCWlmIChJU19FUlIoc2xlYikpIHsKLQkJCXNsZWIgPSB1Ymlmc19yZWNvdmVyX2xlYihjLCBsbnVtLCAwLCBjLT5zYnVmLCAwKTsKKwkJCWlmIChQVFJfRVJSKHNsZWIpID09IC1FVUNMRUFOKQorCQkJCXNsZWIgPSB1Ymlmc19yZWNvdmVyX2xlYihjLCBsbnVtLCAwLCBjLT5zYnVmLCAwKTsKIAkJCWlmIChJU19FUlIoc2xlYikpIHsKIAkJCQllcnIgPSBQVFJfRVJSKHNsZWIpOwogCQkJCWJyZWFrOwpAQCAtODk5LDcgKzkwMCw3IEBACiAJZm9yIChsbnVtID0gYy0+b3JwaF9maXJzdDsgbG51bSA8PSBjLT5vcnBoX2xhc3Q7IGxudW0rKykgewogCQlzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWI7CiAKLQkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+ZGJnLT5idWYpOworCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5kYmctPmJ1ZiwgMCk7CiAJCWlmIChJU19FUlIoc2xlYikpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2xlYik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMgYi9mcy91Ymlmcy9yZWNvdmVyeS5jCmluZGV4IGU1ZjZjZjguLmY5NGRkZjcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMKKysrIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJCW1zdCA9IG1zdDI7CiAJfQogCi0JZGJnX3JjdnJ5KCJyZWNvdmVyZWQgbWFzdGVyIG5vZGUgZnJvbSBMRUIgJWQiLAorCXViaWZzX21zZygicmVjb3ZlcmVkIG1hc3RlciBub2RlIGZyb20gTEVCICVkIiwKIAkJICAobXN0ID09IG1zdDEgPyBVQklGU19NU1RfTE5VTSA6IFVCSUZTX01TVF9MTlVNICsgMSkpOwogCiAJbWVtY3B5KGMtPm1zdF9ub2RlLCBtc3QsIFVCSUZTX01TVF9OT0RFX1NaKTsKQEAgLTc5MCw3ICs3OTAsNyBAQAogCQkgKiBXZSBjYW4gb25seSByZWNvdmVyIGF0IHRoZSBlbmQgb2YgdGhlIGxvZywgc28gY2hlY2sgdGhhdCB0aGUKIAkJICogbmV4dCBsb2cgTEVCIGlzIGVtcHR5IG9yIG91dCBvZiBkYXRlLgogCQkgKi8KLQkJc2xlYiA9IHViaWZzX3NjYW4oYywgbmV4dF9sbnVtLCAwLCBzYnVmKTsKKwkJc2xlYiA9IHViaWZzX3NjYW4oYywgbmV4dF9sbnVtLCAwLCBzYnVmLCAwKTsKIAkJaWYgKElTX0VSUihzbGViKSkKIAkJCXJldHVybiBzbGViOwogCQlpZiAoc2xlYi0+bm9kZXNfY250KSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9yZXBsYXkuYyBiL2ZzL3ViaWZzL3JlcGxheS5jCmluZGV4IDI5NzA1MDAuLjVjMmQ2ZDcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlcGxheS5jCisrKyBiL2ZzL3ViaWZzL3JlcGxheS5jCkBAIC01MDYsNyArNTA2LDcgQEAKIAlpZiAoYy0+bmVlZF9yZWNvdmVyeSkKIAkJc2xlYiA9IHViaWZzX3JlY292ZXJfbGViKGMsIGxudW0sIG9mZnMsIGMtPnNidWYsIGpoZWFkICE9IEdDSEQpOwogCWVsc2UKLQkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgb2ZmcywgYy0+c2J1Zik7CisJCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIG9mZnMsIGMtPnNidWYsIDApOwogCWlmIChJU19FUlIoc2xlYikpCiAJCXJldHVybiBQVFJfRVJSKHNsZWIpOwogCkBAIC04MzYsOCArODM2LDggQEAKIAljb25zdCBzdHJ1Y3QgdWJpZnNfY3Nfbm9kZSAqbm9kZTsKIAogCWRiZ19tbnQoInJlcGxheSBsb2cgTEVCICVkOiVkIiwgbG51bSwgb2Zmcyk7Ci0Jc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgb2Zmcywgc2J1Zik7Ci0JaWYgKElTX0VSUihzbGViKSApIHsKKwlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCBvZmZzLCBzYnVmLCBjLT5uZWVkX3JlY292ZXJ5KTsKKwlpZiAoSVNfRVJSKHNsZWIpKSB7CiAJCWlmIChQVFJfRVJSKHNsZWIpICE9IC1FVUNMRUFOIHx8ICFjLT5uZWVkX3JlY292ZXJ5KQogCQkJcmV0dXJuIFBUUl9FUlIoc2xlYik7CiAJCXNsZWIgPSB1Ymlmc19yZWNvdmVyX2xvZ19sZWIoYywgbG51bSwgb2Zmcywgc2J1Zik7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zY2FuLmMgYi9mcy91Ymlmcy9zY2FuLmMKaW5kZXggODkyZWJmZS4uOTZjNTI1MyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc2Nhbi5jCisrKyBiL2ZzL3ViaWZzL3NjYW4uYwpAQCAtMTA4LDEwICsxMDgsOSBAQAogCiAJCS8qIE1ha2UgdGhlIG5vZGUgcGFkcyB0byA4LWJ5dGUgYm91bmRhcnkgKi8KIAkJaWYgKChub2RlX2xlbiArIHBhZF9sZW4pICYgNykgewotCQkJaWYgKCFxdWlldCkgeworCQkJaWYgKCFxdWlldCkKIAkJCQlkYmdfZXJyKCJiYWQgcGFkZGluZyBsZW5ndGggJWQgLSAlZCIsCiAJCQkJCW9mZnMsIG9mZnMgKyBub2RlX2xlbiArIHBhZF9sZW4pOwotCQkJfQogCQkJcmV0dXJuIFNDQU5ORURfQV9CQURfUEFEX05PREU7CiAJCX0KIApAQCAtMjUzLDE1ICsyNTIsMTkgQEAKICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBsbnVtOiBsb2dpY2FsIGVyYXNlYmxvY2sgbnVtYmVyCiAgKiBAb2Zmczogb2Zmc2V0IHRvIHN0YXJ0IGF0ICh1c3VhbGx5IHplcm8pCi0gKiBAc2J1Zjogc2NhbiBidWZmZXIgKG11c3QgYmUgYy0+bGViX3NpemUpCisgKiBAc2J1Zjogc2NhbiBidWZmZXIgKG11c3QgYmUgb2YgQGMtPmxlYl9zaXplIGJ5dGVzIGluIHNpemUpCisgKiBAcXVpZXQ6IHByaW50IG5vIG1lc3NhZ2VzCiAgKgogICogVGhpcyBmdW5jdGlvbiBzY2FucyBMRUIgbnVtYmVyIEBsbnVtIGFuZCByZXR1cm5zIGNvbXBsZXRlIGluZm9ybWF0aW9uIGFib3V0CiAgKiBpdHMgY29udGVudHMuIFJldHVybnMgdGhlIHNjYW5lZCBpbmZvcm1hdGlvbiBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kLAogICogJS1FVUNMRUFOIGlmIHRoZSBMRUIgbmVhZHMgcmVjb3ZlcnksIGFuZCBvdGhlciBuZWdhdGl2ZSBlcnJvciBjb2RlcyBpbiBjYXNlCiAgKiBvZiBmYWlsdXJlLgorICoKKyAqIElmIEBxdWlldCBpcyBub24temVybywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmludCBsYXJnZSBhbmQgc2NhcnkKKyAqIGVycm9yIG1lc3NhZ2VzIGFuZCBmbGFzaCBkdW1wcyBpbiBjYXNlIG9mIGVycm9ycy4KICAqLwogc3RydWN0IHViaWZzX3NjYW5fbGViICp1Ymlmc19zY2FuKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSwKLQkJCQkgIGludCBvZmZzLCB2b2lkICpzYnVmKQorCQkJCSAgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBxdWlldCkKIHsKIAl2b2lkICpidWYgPSBzYnVmICsgb2ZmczsKIAlpbnQgZXJyLCBsZW4gPSBjLT5sZWJfc2l6ZSAtIG9mZnM7CkBAIC0yODAsNyArMjgzLDcgQEAKIAogCQljb25kX3Jlc2NoZWQoKTsKIAotCQlyZXQgPSB1Ymlmc19zY2FuX2Ffbm9kZShjLCBidWYsIGxlbiwgbG51bSwgb2ZmcywgMCk7CisJCXJldCA9IHViaWZzX3NjYW5fYV9ub2RlKGMsIGJ1ZiwgbGVuLCBsbnVtLCBvZmZzLCBxdWlldCk7CiAJCWlmIChyZXQgPiAwKSB7CiAJCQkvKiBQYWRkaW5nIGJ5dGVzIG9yIGEgdmFsaWQgcGFkZGluZyBub2RlICovCiAJCQlvZmZzICs9IHJldDsKQEAgLTMyMCw3ICszMjMsOSBAQAogCX0KIAogCWlmIChvZmZzICUgYy0+bWluX2lvX3NpemUpIHsKLQkJdWJpZnNfZXJyKCJlbXB0eSBzcGFjZSBzdGFydHMgYXQgbm9uLWFsaWduZWQgb2Zmc2V0ICVkIiwgb2Zmcyk7CisJCWlmICghcXVpZXQpCisJCQl1Ymlmc19lcnIoImVtcHR5IHNwYWNlIHN0YXJ0cyBhdCBub24tYWxpZ25lZCBvZmZzZXQgJWQiLAorCQkJCSAgb2Zmcyk7CiAJCWdvdG8gY29ycnVwdGVkOzsKIAl9CiAKQEAgLTMzMSwxOCArMzM2LDI1IEBACiAJCQlicmVhazsKIAlmb3IgKDsgbGVuOyBvZmZzKyssIGJ1ZisrLCBsZW4tLSkKIAkJaWYgKCoodWludDhfdCAqKWJ1ZiAhPSAweGZmKSB7Ci0JCQl1Ymlmc19lcnIoImNvcnJ1cHQgZW1wdHkgc3BhY2UgYXQgTEVCICVkOiVkIiwKLQkJCQkgIGxudW0sIG9mZnMpOworCQkJaWYgKCFxdWlldCkKKwkJCQl1Ymlmc19lcnIoImNvcnJ1cHQgZW1wdHkgc3BhY2UgYXQgTEVCICVkOiVkIiwKKwkJCQkJICBsbnVtLCBvZmZzKTsKIAkJCWdvdG8gY29ycnVwdGVkOwogCQl9CiAKIAlyZXR1cm4gc2xlYjsKIAogY29ycnVwdGVkOgotCXViaWZzX3NjYW5uZWRfY29ycnVwdGlvbihjLCBsbnVtLCBvZmZzLCBidWYpOworCWlmICghcXVpZXQpIHsKKwkJdWJpZnNfc2Nhbm5lZF9jb3JydXB0aW9uKGMsIGxudW0sIG9mZnMsIGJ1Zik7CisJCXViaWZzX2VycigiTEVCICVkIHNjYW5uaW5nIGZhaWxlZCIsIGxudW0pOworCX0KIAllcnIgPSAtRVVDTEVBTjsKKwl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwogZXJyb3I6Ci0JdWJpZnNfZXJyKCJMRUIgJWQgc2Nhbm5pbmcgZmFpbGVkIiwgbG51bSk7CisJdWJpZnNfZXJyKCJMRUIgJWQgc2Nhbm5pbmcgZmFpbGVkLCBlcnJvciAlZCIsIGxudW0sIGVycik7CiAJdWJpZnNfc2Nhbl9kZXN0cm95KHNsZWIpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCBjNGFmMDY5Li4zMzNlMTgxIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSAidWJpZnMuaCIKIAogLyoKQEAgLTMxOCw2ICszMTcsOCBAQAogCQlpZiAoZXJyKQogCQkJdWJpZnNfZXJyKCJjYW4ndCB3cml0ZSBpbm9kZSAlbHUsIGVycm9yICVkIiwKIAkJCQkgIGlub2RlLT5pX2lubywgZXJyKTsKKwkJZWxzZQorCQkJZXJyID0gZGJnX2NoZWNrX2lub2RlX3NpemUoYywgaW5vZGUsIHVpLT51aV9zaXplKTsKIAl9CiAKIAl1aS0+ZGlydHkgPSAwOwpAQCAtNDQ4LDE3ICs0NDksNiBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogVkZTIGNhbGxzICctPnN5bmNfZnMoKScgYmVmb3JlIHN5bmNocm9uaXppbmcgYWxsIGRpcnR5IGlub2RlcyBhbmQKLQkgKiBwYWdlcywgc28gc3luY2hyb25pemUgdGhlbSBmaXJzdCwgdGhlbiBjb21taXQgdGhlIGpvdXJuYWwuIFN0cmljdGx5Ci0JICogc3BlYWtpbmcsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tbWl0IHRoZSBqb3VybmFsIGhlcmUsCi0JICogc3luY2hyb25pemluZyB3cml0ZS1idWZmZXJzIHdvdWxkIGJlIGVub3VnaC4gQnV0IGNvbW1pdHRpbmcgbWFrZXMKLQkgKiBVQklGUyBmcmVlIHNwYWNlIHByZWRpY3Rpb25zIG11Y2ggbW9yZSBhY2N1cmF0ZSwgc28gd2Ugd2FudCB0byBsZXQKLQkgKiB0aGUgdXNlciBiZSBhYmxlIHRvIGdldCBtb3JlIGFjY3VyYXRlIHJlc3VsdHMgb2YgJ3N0YXRmcygpJyBhZnRlcgotCSAqIHRoZXkgc3luY2hyb25pemUgdGhlIGZpbGUgc3lzdGVtLgotCSAqLwotCXN5bmNfaW5vZGVzX3NiKHNiKTsKLQotCS8qCiAJICogU3luY2hyb25pemUgd3JpdGUgYnVmZmVycywgYmVjYXVzZSAndWJpZnNfcnVuX2NvbW1pdCgpJyBkb2VzIG5vdAogCSAqIGRvIHRoaXMgaWYgaXQgd2FpdHMgZm9yIGFuIGFscmVhZHkgcnVubmluZyBjb21taXQuCiAJICovCkBAIC00NjgsNiArNDU4LDEzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qCisJICogU3RyaWN0bHkgc3BlYWtpbmcsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tbWl0IHRoZSBqb3VybmFsIGhlcmUsCisJICogc3luY2hyb25pemluZyB3cml0ZS1idWZmZXJzIHdvdWxkIGJlIGVub3VnaC4gQnV0IGNvbW1pdHRpbmcgbWFrZXMKKwkgKiBVQklGUyBmcmVlIHNwYWNlIHByZWRpY3Rpb25zIG11Y2ggbW9yZSBhY2N1cmF0ZSwgc28gd2Ugd2FudCB0byBsZXQKKwkgKiB0aGUgdXNlciBiZSBhYmxlIHRvIGdldCBtb3JlIGFjY3VyYXRlIHJlc3VsdHMgb2YgJ3N0YXRmcygpJyBhZnRlcgorCSAqIHRoZXkgc3luY2hyb25pemUgdGhlIGZpbGUgc3lzdGVtLgorCSAqLwogCWVyciA9IHViaWZzX3J1bl9jb21taXQoYyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTE3MjAsOCArMTcxNyw2IEBACiAJdWJpZnNfbXNnKCJ1bi1tb3VudCBVQkkgZGV2aWNlICVkLCB2b2x1bWUgJWQiLCBjLT52aS51YmlfbnVtLAogCQkgIGMtPnZpLnZvbF9pZCk7CiAKLQlsb2NrX2tlcm5lbCgpOwotCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGFzc2VydHMgYXJlIG9ubHkgdmFsaWQgaWYgdGhlcmUgaGFzIG5vdCBiZWVuIGEgZmFpbHVyZQogCSAqIG9mIHRoZSBtZWRpYS4gRm9yIGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgZGlydHkgaW5vZGVzIGlmIHdlIGZhaWxlZApAQCAtMTc4Niw4ICsxNzgxLDYgQEAKIAl1YmlfY2xvc2Vfdm9sdW1lKGMtPnViaSk7CiAJbXV0ZXhfdW5sb2NrKCZjLT51bW91bnRfbXV0ZXgpOwogCWtmcmVlKGMpOwotCi0JdW5sb2NrX2tlcm5lbCgpOwogfQogCiBzdGF0aWMgaW50IHViaWZzX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKQEAgLTE4MDMsMjIgKzE3OTYsMTcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlmICgoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpICYmICEoKmZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlpZiAoYy0+cm9fbWVkaWEpIHsKIAkJCXViaWZzX21zZygiY2Fubm90IHJlLW1vdW50IGR1ZSB0byBwcmlvciBlcnJvcnMiKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAtRVJPRlM7CiAJCX0KIAkJZXJyID0gdWJpZnNfcmVtb3VudF9ydyhjKTsKLQkJaWYgKGVycikgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJfQogCX0gZWxzZSBpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkgJiYgKCpmbGFncyAmIE1TX1JET05MWSkpIHsKIAkJaWYgKGMtPnJvX21lZGlhKSB7CiAJCQl1Ymlmc19tc2coImNhbm5vdCByZS1tb3VudCBkdWUgdG8gcHJpb3IgZXJyb3JzIik7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVST0ZTOwogCQl9CiAJCXViaWZzX3JlbW91bnRfcm8oYyk7CkBAIC0xODMzLDcgKzE4MjEsNiBAQAogCX0KIAogCXViaWZzX2Fzc2VydChjLT5sc3QudGFrZW5fZW1wdHlfbGVicyA+IDApOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdG5jLmMgYi9mcy91Ymlmcy90bmMuYwppbmRleCBmMjQ5ZjdiLi5lNWIxYTdkIDEwMDY0NAotLS0gYS9mcy91Ymlmcy90bmMuYworKysgYi9mcy91Ymlmcy90bmMuYwpAQCAtMTE1OSw4ICsxMTU5LDggQEAKICAqICAgbyBleGFjdCBtYXRjaCwgaS5lLiB0aGUgZm91bmQgemVyby1sZXZlbCB6bm9kZSBjb250YWlucyBrZXkgQGtleSwgdGhlbiAlMQogICogICAgIGlzIHJldHVybmVkIGFuZCBzbG90IG51bWJlciBvZiB0aGUgbWF0Y2hlZCBicmFuY2ggaXMgc3RvcmVkIGluIEBuOwogICogICBvIG5vdCBleGFjdCBtYXRjaCwgd2hpY2ggbWVhbnMgdGhhdCB6ZXJvLWxldmVsIHpub2RlIGRvZXMgbm90IGNvbnRhaW4KLSAqICAgICBAa2V5LCB0aGVuICUwIGlzIHJldHVybmVkIGFuZCBzbG90IG51bWJlciBvZiB0aGUgY2xvc2VkIGJyYW5jaCBpcyBzdG9yZWQKLSAqICAgICBpbiAgQG47CisgKiAgICAgQGtleSwgdGhlbiAlMCBpcyByZXR1cm5lZCBhbmQgc2xvdCBudW1iZXIgb2YgdGhlIGNsb3Nlc3QgYnJhbmNoIGlzIHN0b3JlZAorICogICAgIGluIEBuOwogICogICBvIEBrZXkgaXMgc28gc21hbGwgdGhhdCBpdCBpcyBldmVuIGxlc3MgdGhhbiB0aGUgbG93ZXN0IGtleSBvZiB0aGUKICAqICAgICBsZWZ0bW9zdCB6ZXJvLWxldmVsIG5vZGUsIHRoZW4gJTAgaXMgcmV0dXJuZWQgYW5kICUwIGlzIHN0b3JlZCBpbiBAbi4KICAqCkBAIC0xNDMzLDcgKzE0MzMsNyBAQAogICogQGxudW06IExFQiBudW1iZXIgaXMgcmV0dXJuZWQgaGVyZQogICogQG9mZnM6IG9mZnNldCBpcyByZXR1cm5lZCBoZXJlCiAgKgotICogVGhpcyBmdW5jdGlvbiBsb29rIHVwIGFuZCByZWFkcyBub2RlIHdpdGgga2V5IEBrZXkuIFRoZSBjYWxsZXIgaGFzIHRvIG1ha2UKKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgdXAgYW5kIHJlYWRzIG5vZGUgd2l0aCBrZXkgQGtleS4gVGhlIGNhbGxlciBoYXMgdG8gbWFrZQogICogc3VyZSB0aGUgQG5vZGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBmaXQgdGhlIG5vZGUuIFJldHVybnMgemVybyBpbiBjYXNlCiAgKiBvZiBzdWNjZXNzLCAlLUVOT0VOVCBpZiB0aGUgbm9kZSB3YXMgbm90IGZvdW5kLCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluCiAgKiBjYXNlIG9mIGZhaWx1cmUuIFRoZSBub2RlIGxvY2F0aW9uIGNhbiBiZSByZXR1cm5lZCBpbiBAbG51bSBhbmQgQG9mZnMuCkBAIC0zMjY4LDMgKzMyNjgsNzMgQEAKIAltdXRleF91bmxvY2soJmMtPnRuY19tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KKworI2lmZGVmIENPTkZJR19VQklGU19GU19ERUJVRworCisvKioKKyAqIGRiZ19jaGVja19pbm9kZV9zaXplIC0gY2hlY2sgaWYgaW5vZGUgc2l6ZSBpcyBjb3JyZWN0LgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGludW06IGlub2RlIG51bWJlcgorICogQHNpemU6IGlub2RlIHNpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB0aGUgaW5vZGUgc2l6ZSAoQHNpemUpIGlzIGNvcnJlY3QgYW5kIGl0IGRvZXMKKyAqIG5vdCBoYXZlIGFueSBwYWdlcyBiZXlvbmQgQHNpemUuIFJldHVybnMgemVybyBpZiB0aGUgaW5vZGUgaXMgT0ssICUtRUlOVkFMCisgKiBpZiBpdCBoYXMgYSBkYXRhIHBhZ2UgYmV5b25kIEBzaXplLCBhbmQgb3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mCisgKiBvdGhlciBlcnJvcnMuCisgKi8KK2ludCBkYmdfY2hlY2tfaW5vZGVfc2l6ZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSBsb2ZmX3Qgc2l6ZSkKK3sKKwlpbnQgZXJyLCBuOworCXVuaW9uIHViaWZzX2tleSBmcm9tX2tleSwgdG9fa2V5LCAqa2V5OworCXN0cnVjdCB1Ymlmc196bm9kZSAqem5vZGU7CisJdW5zaWduZWQgaW50IGJsb2NrOworCisJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAoISh1Ymlmc19jaGtfZmxhZ3MgJiBVQklGU19DSEtfR0VOKSkKKwkJcmV0dXJuIDA7CisKKwlibG9jayA9IChzaXplICsgVUJJRlNfQkxPQ0tfU0laRSAtIDEpID4+IFVCSUZTX0JMT0NLX1NISUZUOworCWRhdGFfa2V5X2luaXQoYywgJmZyb21fa2V5LCBpbm9kZS0+aV9pbm8sIGJsb2NrKTsKKwloaWdoZXN0X2RhdGFfa2V5KGMsICZ0b19rZXksIGlub2RlLT5pX2lubyk7CisKKwltdXRleF9sb2NrKCZjLT50bmNfbXV0ZXgpOworCWVyciA9IHViaWZzX2xvb2t1cF9sZXZlbDAoYywgJmZyb21fa2V5LCAmem5vZGUsICZuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJaWYgKGVycikgeworCQllcnIgPSAtRUlOVkFMOworCQlrZXkgPSAmZnJvbV9rZXk7CisJCWdvdG8gb3V0X2R1bXA7CisJfQorCisJZXJyID0gdG5jX25leHQoYywgJnpub2RlLCAmbik7CisJaWYgKGVyciA9PSAtRU5PRU5UKSB7CisJCWVyciA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X3VubG9jazsKKworCXViaWZzX2Fzc2VydChlcnIgPT0gMCk7CisJa2V5ID0gJnpub2RlLT56YnJhbmNoW25dLmtleTsKKwlpZiAoIWtleV9pbl9yYW5nZShjLCBrZXksICZmcm9tX2tleSwgJnRvX2tleSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworb3V0X2R1bXA6CisJYmxvY2sgPSBrZXlfYmxvY2soYywga2V5KTsKKwl1Ymlmc19lcnIoImlub2RlICVsdSBoYXMgc2l6ZSAlbGxkLCBidXQgdGhlcmUgYXJlIGRhdGEgYXQgb2Zmc2V0ICVsbGQgIgorCQkgICIoZGF0YSBrZXkgJXMpIiwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtPmlfaW5vLCBzaXplLAorCQkgICgobG9mZl90KWJsb2NrKSA8PCBVQklGU19CTE9DS19TSElGVCwgREJHS0VZKGtleSkpOworCWRiZ19kdW1wX2lub2RlKGMsIGlub2RlKTsKKwlkYmdfZHVtcF9zdGFjaygpOworCWVyciA9IC1FSU5WQUw7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjLT50bmNfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfVUJJRlNfRlNfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3RuY19jb21taXQuYyBiL2ZzL3ViaWZzL3RuY19jb21taXQuYwppbmRleCBmZGU4ZDEyLi41MzI4OGU1IDEwMDY0NAotLS0gYS9mcy91Ymlmcy90bmNfY29tbWl0LmMKKysrIGIvZnMvdWJpZnMvdG5jX2NvbW1pdC5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgKiBpdCBpcyBtb3JlIGNvbXByZWhlbnNpdmUgYW5kIGxlc3MgZWZmaWNpZW50IHRoYW4gaXMgbmVlZGVkIGZvciB0aGlzCiAJICogcHVycG9zZS4KIAkgKi8KLQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5pbGViX2J1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+aWxlYl9idWYsIDApOwogCWMtPmlsZWJfbGVuID0gMDsKIAlpZiAoSVNfRVJSKHNsZWIpKQogCQlyZXR1cm4gUFRSX0VSUihzbGViKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmggYi9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oCmluZGV4IDNlZWUwN2UuLjE5MWNhNzggMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMtbWVkaWEuaApAQCAtMTM1LDYgKzEzNSwxMyBAQAogLyogVGhlIGtleSBpcyBhbHdheXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4gYWxsIGtleWVkIG5vZGVzICovCiAjZGVmaW5lIFVCSUZTX0tFWV9PRkZTRVQgb2Zmc2V0b2Yoc3RydWN0IHViaWZzX2lub19ub2RlLCBrZXkpCiAKKy8qIEdhcmJhZ2UgY29sbGVjdG9yIGpvdXJuYWwgaGVhZCBudW1iZXIgKi8KKyNkZWZpbmUgVUJJRlNfR0NfSEVBRCAgIDAKKy8qIEJhc2Ugam91cm5hbCBoZWFkIG51bWJlciAqLworI2RlZmluZSBVQklGU19CQVNFX0hFQUQgMQorLyogRGF0YSBqb3VybmFsIGhlYWQgbnVtYmVyICovCisjZGVmaW5lIFVCSUZTX0RBVEFfSEVBRCAyCisKIC8qCiAgKiBMRUIgUHJvcGVydGllcyBUcmVlIG5vZGUgdHlwZXMuCiAgKgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdWJpZnMuaCBiL2ZzL3ViaWZzL3ViaWZzLmgKaW5kZXggYTI5MzQ5MC4uYjJkOTc2MyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvdWJpZnMuaAorKysgYi9mcy91Ymlmcy91Ymlmcy5oCkBAIC0xMDUsMTIgKzEwNSwxMCBAQAogLyogTnVtYmVyIG9mIG5vbi1kYXRhIGpvdXJuYWwgaGVhZHMgKi8KICNkZWZpbmUgTk9OREFUQV9KSEVBRFNfQ05UIDIKIAotLyogR2FyYmFnZSBjb2xsZWN0b3IgaGVhZCAqLwotI2RlZmluZSBHQ0hEICAgMAotLyogQmFzZSBqb3VybmFsIGhlYWQgbnVtYmVyICovCi0jZGVmaW5lIEJBU0VIRCAxCi0vKiBGaXJzdCAiZ2VuZXJhbCBwdXJwb3NlIiBqb3VybmFsIGhlYWQgKi8KLSNkZWZpbmUgREFUQUhEIDIKKy8qIFNob3J0ZXIgbmFtZXMgZm9yIGpvdXJuYWwgaGVhZCBudW1iZXJzIGZvciBpbnRlcm5hbCB1c2FnZSAqLworI2RlZmluZSBHQ0hEICAgVUJJRlNfR0NfSEVBRAorI2RlZmluZSBCQVNFSEQgVUJJRlNfQkFTRV9IRUFECisjZGVmaW5lIERBVEFIRCBVQklGU19EQVRBX0hFQUQKIAogLyogJ05vIGNoYW5nZScgdmFsdWUgZm9yICd1Ymlmc19jaGFuZ2VfbHAoKScgKi8KICNkZWZpbmUgTFBST1BTX05DIDB4ODAwMDAwMDEKQEAgLTE0NTEsNyArMTQ0OSw3IEBACiAKIC8qIHNjYW4uYyAqLwogc3RydWN0IHViaWZzX3NjYW5fbGViICp1Ymlmc19zY2FuKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSwKLQkJCQkgIGludCBvZmZzLCB2b2lkICpzYnVmKTsKKwkJCQkgIGludCBvZmZzLCB2b2lkICpzYnVmLCBpbnQgcXVpZXQpOwogdm9pZCB1Ymlmc19zY2FuX2Rlc3Ryb3koc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViKTsKIGludCB1Ymlmc19zY2FuX2Ffbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgbG51bSwKIAkJICAgICAgaW50IG9mZnMsIGludCBxdWlldCk7CkBAIC0xNjc2LDYgKzE2NzQsNyBAQAogY29uc3Qgc3RydWN0IHViaWZzX2xwcm9wcyAqdWJpZnNfZmFzdF9maW5kX2VtcHR5KHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKnViaWZzX2Zhc3RfZmluZF9mcmVlYWJsZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiBjb25zdCBzdHJ1Y3QgdWJpZnNfbHByb3BzICp1Ymlmc19mYXN0X2ZpbmRfZnJkaV9pZHgoc3RydWN0IHViaWZzX2luZm8gKmMpOworaW50IHViaWZzX2NhbGNfZGFyayhjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IHNwYyk7CiAKIC8qIGZpbGUuYyAqLwogaW50IHViaWZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYyk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy94YXR0ci5jIGIvZnMvdWJpZnMveGF0dHIuYwppbmRleCBhZGFmY2Y1Li4xOTU4MzBmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy94YXR0ci5jCisrKyBiL2ZzL3ViaWZzL3hhdHRyLmMKQEAgLTc4LDkgKzc4LDkgQEAKIAlTRUNVUklUWV9YQVRUUiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBub25lX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBub25lX2FkZHJlc3Nfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5vbmVfZmlsZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5vbmVfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5vbmVfYWRkcmVzc19vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbm9uZV9maWxlX29wZXJhdGlvbnM7CiAKIC8qKgogICogY3JlYXRlX3hhdHRyIC0gY3JlYXRlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCmluZGV4IGNiNmUyY2MuLjllNDFmOTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJcmV0dXJuIC14ZnNfcW1fc2NhbGxfc2V0cWxpbShtcCwgaWQsIHhmc19xdW90YV90eXBlKHR5cGUpLCBmZHEpOwogfQogCi1zdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyB4ZnNfcXVvdGFjdGxfb3BlcmF0aW9ucyA9IHsKIAkucXVvdGFfc3luYwkJPSB4ZnNfZnNfcXVvdGFfc3luYywKIAkuZ2V0X3hzdGF0ZQkJPSB4ZnNfZnNfZ2V0X3hzdGF0ZSwKIAkuc2V0X3hzdGF0ZQkJPSB4ZnNfZnNfc2V0X3hzdGF0ZSwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDVkN2M2MGEuLmJkZDQxYzggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtNjcsNyArNjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHhmc19zdXBlcl9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHhmc19zdXBlcl9vcGVyYXRpb25zOwogc3RhdGljIGttZW1fem9uZV90ICp4ZnNfaW9lbmRfem9uZTsKIG1lbXBvb2xfdCAqeGZzX2lvZW5kX3Bvb2w7CiAKQEAgLTE1MzYsNyArMTUzNiw3IEBACiAJCQkgICBtbnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeGZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeGZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CiAJLmFsbG9jX2lub2RlCQk9IHhmc19mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQkJPSB4ZnNfZnNfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJCT0geGZzX2ZzX3dyaXRlX2lub2RlLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKaW5kZXggNWEyZWEzYS4uMTgxNzVlYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCkBAIC05Myw3ICs5Myw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgeGZzX2V4cG9ydF9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyICp4ZnNfeGF0dHJfaGFuZGxlcnNbXTsKLWV4dGVybiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnM7CiAKICNkZWZpbmUgWEZTX00oc2IpCQkoKHN0cnVjdCB4ZnNfbW91bnQgKikoKHNiKS0+c19mc19pbmZvKSkKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mcy5oIGIvZnMveGZzL3hmc19mcy5oCmluZGV4IGM0ZWE1MWIuLmY1MmFjMjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnMuaAorKysgYi9mcy94ZnMveGZzX2ZzLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogI2RlZmluZSBCTVZfSUZfVkFMSUQJXAogCShCTVZfSUZfQVRUUkZPUkt8Qk1WX0lGX05PX0RNQVBJX1JFQUR8Qk1WX0lGX1BSRUFMTE9DfEJNVl9JRl9ERUxBTExPQykKIAotLyoJYm12X29mbGFncyB2YWx1ZXMgLSByZXR1cm5lZCBmb3IgZm9yIGVhY2ggbm9uLWhlYWRlciBzZWdtZW50ICovCisvKglibXZfb2ZsYWdzIHZhbHVlcyAtIHJldHVybmVkIGZvciBlYWNoIG5vbi1oZWFkZXIgc2VnbWVudCAqLwogI2RlZmluZSBCTVZfT0ZfUFJFQUxMT0MJCTB4MQkvKiBzZWdtZW50ID0gdW53cml0dGVuIHByZS1hbGxvY2F0aW9uICovCiAjZGVmaW5lIEJNVl9PRl9ERUxBTExPQwkJMHgyCS8qIHNlZ21lbnQgPSBkZWxheWVkIGFsbG9jYXRpb24gKi8KICNkZWZpbmUgQk1WX09GX0xBU1QJCTB4NAkvKiBzZWdtZW50IGlzIHRoZSBsYXN0IGluIHRoZSBmaWxlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCmluZGV4IDFmYTNmZmIuLjFjZWYxMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KIAotI2RlZmluZSBQUkVGSVgJCQkiQUNQSTogIgotCiAvKiBUQkQ6IE1ha2UgZHluYW1pYyAqLwogI2RlZmluZSBBQ1BJX01BWF9IQU5ETEVTCTEwCiBzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCB7CkBAIC04OSw3ICs4Nyw2IEBACiB0eXBlZGVmIGludCAoKmFjcGlfb3BfYWRkKSAoc3RydWN0IGFjcGlfZGV2aWNlICogZGV2aWNlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9yZW1vdmUpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIGludCB0eXBlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9zdGFydCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSk7Ci10eXBlZGVmIGludCAoKmFjcGlfb3Bfc3RvcCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSwgaW50IHR5cGUpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3N1c3BlbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsCiAJCQkJcG1fbWVzc2FnZV90IHN0YXRlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9yZXN1bWUpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwpAQCAtMTA2LDcgKzEwMyw2IEBACiAJYWNwaV9vcF9hZGQgYWRkOwogCWFjcGlfb3BfcmVtb3ZlIHJlbW92ZTsKIAlhY3BpX29wX3N0YXJ0IHN0YXJ0OwotCWFjcGlfb3Bfc3RvcCBzdG9wOwogCWFjcGlfb3Bfc3VzcGVuZCBzdXNwZW5kOwogCWFjcGlfb3BfcmVzdW1lIHJlc3VtZTsKIAlhY3BpX29wX2JpbmQgYmluZDsKQEAgLTE3MywxNyArMTY5LDE1IEBACiAKIHR5cGVkZWYgY2hhciBhY3BpX2J1c19pZFs4XTsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBhY3BpX2J1c19hZGRyZXNzOwotdHlwZWRlZiBjaGFyIGFjcGlfaGFyZHdhcmVfaWRbMTVdOwotdHlwZWRlZiBjaGFyIGFjcGlfdW5pcXVlX2lkWzldOwogdHlwZWRlZiBjaGFyIGFjcGlfZGV2aWNlX25hbWVbNDBdOwogdHlwZWRlZiBjaGFyIGFjcGlfZGV2aWNlX2NsYXNzWzIwXTsKIAogc3RydWN0IGFjcGlfZGV2aWNlX3BucCB7CiAJYWNwaV9idXNfaWQgYnVzX2lkOwkvKiBPYmplY3QgbmFtZSAqLwogCWFjcGlfYnVzX2FkZHJlc3MgYnVzX2FkZHJlc3M7CS8qIF9BRFIgKi8KLQlhY3BpX2hhcmR3YXJlX2lkIGhhcmR3YXJlX2lkOwkvKiBfSElEICovCi0Jc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdDsJLyogX0NJRHMgKi8KLQlhY3BpX3VuaXF1ZV9pZCB1bmlxdWVfaWQ7CS8qIF9VSUQgKi8KKwljaGFyICpoYXJkd2FyZV9pZDsJLyogX0hJRCAqLworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwkvKiBfQ0lEcyAqLworCWNoYXIgKnVuaXF1ZV9pZDsJLyogX1VJRCAqLwogCWFjcGlfZGV2aWNlX25hbWUgZGV2aWNlX25hbWU7CS8qIERyaXZlci1kZXRlcm1pbmVkICovCiAJYWNwaV9kZXZpY2VfY2xhc3MgZGV2aWNlX2NsYXNzOwkvKiAgICAgICAgIiAgICAgICAgICAqLwogfTsKQEAgLTMxNCw3ICszMDgsNyBAQAogCiBleHRlcm4gc3RydWN0IGtvYmplY3QgKmFjcGlfa29iajsKIGV4dGVybiBpbnQgYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHU4LCBpbnQpOwotdm9pZCBhY3BpX2J1c19wcml2YXRlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSwgdTMyLCB2b2lkICopOwordm9pZCBhY3BpX2J1c19wcml2YXRlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSwgdm9pZCAqKTsKIGludCBhY3BpX2J1c19nZXRfcHJpdmF0ZV9kYXRhKGFjcGlfaGFuZGxlLCB2b2lkICoqKTsKIGV4dGVybiBpbnQgYWNwaV9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBhY3BpX2RldmljZSAqLCB1MzIsIHUzMik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FjcGlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwpAQCAtMzI3LDcgKzMyMSw3IEBACiAgKi8KIAogaW50IGFjcGlfYnVzX2dldF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipkZXZpY2UpOwotdm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpOwordm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB2b2lkICpjb250ZXh0KTsKIGludCBhY3BpX2J1c19nZXRfc3RhdHVzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIGludCBhY3BpX2J1c19nZXRfcG93ZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnN0YXRlKTsKIGludCBhY3BpX2J1c19zZXRfcG93ZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgc3RhdGUpOwpAQCAtMzU2LDcgKzM1MCw2IEBACiAvKgogICogQmluZCBwaHlzaWNhbCBkZXZpY2VzIHdpdGggQUNQSSBkZXZpY2VzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIHN0cnVjdCBhY3BpX2J1c190eXBlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGJ1c190eXBlICpidXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IGFiMGI4NWMuLmViMGU3MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCkBAIC0yNDUsNiArMjQ1LDkgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX29zX3ZhbGlkYXRlX2FkZHJlc3ModTggc3BhY2VfaWQsIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJIGFjcGlfc2l6ZSBsZW5ndGgsIGNoYXIgKm5hbWUpOworYWNwaV9zdGF0dXMKK2FjcGlfb3NfaW52YWxpZGF0ZV9hZGRyZXNzKHU4IHNwYWNlX2lkLCBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKKwkJCSBhY3BpX3NpemUgbGVuZ3RoKTsKIAogdTY0IGFjcGlfb3NfZ2V0X3RpbWVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggODJlYzZhMy4uZTcyM2IwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBDdXJyZW50IEFDUElDQSBzdWJzeXN0ZW0gdmVyc2lvbiBpbiBZWVlZTU1ERCBmb3JtYXQgKi8KIAotI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAwOTA1MjEKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDkwOTAzCiAKICNpbmNsdWRlICJhY3R5cGVzLmgiCiAjaW5jbHVkZSAiYWN0YmwuaCIKQEAgLTY0LDYgKzY0LDcgQEAKIGV4dGVybiB1OCBhY3BpX2dibF9hbGxfbWV0aG9kc19zZXJpYWxpemVkOwogZXh0ZXJuIHU4IGFjcGlfZ2JsX2NyZWF0ZV9vc2lfbWV0aG9kOwogZXh0ZXJuIHU4IGFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZDsKK2V4dGVybiB1OCBhY3BpX2dibF91c2VfZGVmYXVsdF9yZWdpc3Rlcl93aWR0aHM7CiBleHRlcm4gYWNwaV9uYW1lIGFjcGlfZ2JsX3RyYWNlX21ldGhvZF9uYW1lOwogZXh0ZXJuIHUzMiBhY3BpX2dibF90cmFjZV9mbGFnczsKIApAQCAtMTk5LDcgKzIwMCw4IEBACiAJCQkgICBhY3BpX29iamVjdF90eXBlIHJldHVybl90eXBlKTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfZ2V0X29iamVjdF9pbmZvKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfYnVmZmVyICpyZXR1cm5fYnVmZmVyKTsKK2FjcGlfZ2V0X29iamVjdF9pbmZvKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqKnJldHVybl9idWZmZXIpOwogCiBhY3BpX3N0YXR1cyBhY3BpX2luc3RhbGxfbWV0aG9kKHU4ICpidWZmZXIpOwogCkBAIC0zNTksOSArMzYxLDkgQEAKIGFjcGlfc3RhdHVzIGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3I2NCh1NjQgcGh5c2ljYWxfYWRkcmVzcyk7CiAjZW5kaWYKIAotYWNwaV9zdGF0dXMgYWNwaV9yZWFkKHUzMiAqdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKTsKK2FjcGlfc3RhdHVzIGFjcGlfcmVhZCh1NjQgKnZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZyk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfd3JpdGUodTMyIHZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZyk7CithY3BpX3N0YXR1cyBhY3BpX3dyaXRlKHU2NCB2YWx1ZSwgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWcpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfc2xlZXBfdHlwZV9kYXRhKHU4IHNsZWVwX3N0YXRlLCB1OCAqIHNscF90eXBfYSwgdTggKiBzbHBfdHlwX2IpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCAyMjI3MzNkLi4xYjY1ODc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtNDQsOSArNDQsMjMgQEAKICNpZm5kZWYgX19BQ1RCTF9IX18KICNkZWZpbmUgX19BQ1RCTF9IX18KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGdW5kYW1lbnRhbCBBQ1BJIHRhYmxlcworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIEFDUEkgdGFibGVzIHRoYXQgYXJlIGRpcmVjdGx5IGNvbnN1bWVkCisgKiBieSBBQ1BJQ0EuIEFsbCBvdGhlciB0YWJsZXMgYXJlIGNvbnN1bWVkIGJ5IHRoZSBPUy1kZXBlbmRlbnQgQUNQSS1yZWxhdGVkCisgKiBkZXZpY2UgZHJpdmVycyBhbmQgb3RoZXIgT1Mgc3VwcG9ydCBjb2RlLgorICoKKyAqIFRoZSBSU0RQIGFuZCBGQUNTIGRvIG5vdCB1c2UgdGhlIGNvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlci4gQWxsIG90aGVyIEFDUEkKKyAqIHRhYmxlcyB1c2UgdGhlIGhlYWRlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKgotICogVmFsdWVzIGZvciBkZXNjcmlwdGlvbiB0YWJsZSBoZWFkZXIgc2lnbmF0dXJlcy4gVXNlZnVsIGJlY2F1c2UgdGhleSBtYWtlCi0gKiBpdCBtb3JlIGRpZmZpY3VsdCB0byBpbmFkdmVydGVudGx5IHR5cGUgaW4gdGhlIHdyb25nIHNpZ25hdHVyZS4KKyAqIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMgZm9yIHRhYmxlcyBkZWZpbmVkIGluIHRoaXMKKyAqIGZpbGUuIFVzZWZ1bCBiZWNhdXNlIHRoZXkgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBpbmFkdmVydGVudGx5IHR5cGUgaW4KKyAqIHRoZSB3cm9uZyBzaWduYXR1cmUuCiAgKi8KICNkZWZpbmUgQUNQSV9TSUdfRFNEVCAgICAgICAgICAgIkRTRFQiCS8qIERpZmZlcmVudGlhdGVkIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19GQURUICAgICAgICAgICAiRkFDUCIJLyogRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAqLwpAQCAtNjUsMTEgKzc5LDYgQEAKICNwcmFnbWEgcGFjaygxKQogCiAvKgotICogVGhlc2UgYXJlIHRoZSBBQ1BJIHRhYmxlcyB0aGF0IGFyZSBkaXJlY3RseSBjb25zdW1lZCBieSB0aGUgc3Vic3lzdGVtLgotICoKLSAqIFRoZSBSU0RQIGFuZCBGQUNTIGRvIG5vdCB1c2UgdGhlIGNvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlci4gQWxsIG90aGVyIEFDUEkKLSAqIHRhYmxlcyB1c2UgdGhlIGhlYWRlci4KLSAqCiAgKiBOb3RlIGFib3V0IGJpdGZpZWxkczogVGhlIHU4IHR5cGUgaXMgdXNlZCBmb3IgYml0ZmllbGRzIGluIEFDUEkgdGFibGVzLgogICogVGhpcyBpcyB0aGUgb25seSB0eXBlIHRoYXQgaXMgZXZlbiByZW1vdGVseSBwb3J0YWJsZS4gQW55dGhpbmcgZWxzZSBpcyBub3QKICAqIHBvcnRhYmxlLCBzbyBkbyBub3QgdXNlIGFueSBvdGhlciBiaXRmaWVsZCB0eXBlcy4KQEAgLTc3LDkgKzg2LDggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBBQ1BJIFRhYmxlIEhlYWRlci4gVGhpcyBjb21tb24gaGVhZGVyIGlzIHVzZWQgYnkgYWxsIHRhYmxlcyBleGNlcHQgdGhlCi0gKiBSU0RQIGFuZCBGQUNTLiBUaGUgZGVmaW5lIGlzIHVzZWQgZm9yIGRpcmVjdCBpbmNsdXNpb24gb2YgaGVhZGVyIGludG8KLSAqIG90aGVyIEFDUEkgdGFibGVzCisgKiBNYXN0ZXIgQUNQSSBUYWJsZSBIZWFkZXIuIFRoaXMgY29tbW9uIGhlYWRlciBpcyB1c2VkIGJ5IGFsbCBBQ1BJIHRhYmxlcworICogZXhjZXB0IHRoZSBSU0RQIGFuZCBGQUNTLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTk1LDEzICsxMDMsMTYgQEAKIAl1MzIgYXNsX2NvbXBpbGVyX3JldmlzaW9uOwkvKiBBU0wgY29tcGlsZXIgdmVyc2lvbiAqLwogfTsKIAotLyoKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogR0FTIC0gR2VuZXJpYyBBZGRyZXNzIFN0cnVjdHVyZSAoQUNQSSAyLjArKQogICoKICAqIE5vdGU6IFNpbmNlIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4gdGhlIEFDUEkgdGFibGVzLCBpdCBpcyBieXRlIGFsaWduZWQuCi0gKiBJZiBtaXNhbGlnbm1lbnQgaXMgbm90IHN1cHBvcnRlZCwgYWNjZXNzIHRvIHRoZSBBZGRyZXNzIGZpZWxkIG11c3QgYmUKLSAqIHBlcmZvcm1lZCB3aXRoIGNhcmUuCi0gKi8KKyAqIElmIG1pc2FsaWdlZCBhY2Nlc3MgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUsIGFjY2Vzc2VzIHRvIHRoZQorICogNjQtYml0IEFkZHJlc3MgZmllbGQgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCBjYXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB7CiAJdTggc3BhY2VfaWQ7CQkvKiBBZGRyZXNzIHNwYWNlIHdoZXJlIHN0cnVjdCBvciByZWdpc3RlciBleGlzdHMgKi8KIAl1OCBiaXRfd2lkdGg7CQkvKiBTaXplIGluIGJpdHMgb2YgZ2l2ZW4gcmVnaXN0ZXIgKi8KQEAgLTExMyw2ICsxMjQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBSU0RQIC0gUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gUG9pbnRlciAoU2lnbmF0dXJlIGlzICJSU0QgUFRSICIpCisgKiAgICAgICAgVmVyc2lvbiAyCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTMzLDYgKzE0NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFJTRFQvWFNEVCAtIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlcworICogICAgICAgICAgICAgVmVyc2lvbiAxIChib3RoKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE2MSwyMSArMTc0LDI5IEBACiAJdTMyIGZsYWdzOwogCXU2NCB4ZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsJLyogNjQtYml0IHZlcnNpb24gb2YgdGhlIEZpcm13YXJlIFdha2luZyBWZWN0b3IgKEFDUEkgMi4wKykgKi8KIAl1OCB2ZXJzaW9uOwkJLyogVmVyc2lvbiBvZiB0aGlzIHRhYmxlIChBQ1BJIDIuMCspICovCi0JdTggcmVzZXJ2ZWRbMzFdOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTggcmVzZXJ2ZWRbM107CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTMyIG9zcG1fZmxhZ3M7CQkvKiBGbGFncyB0byBiZSBzZXQgYnkgT1NQTSAoQUNQSSA0LjApICovCisJdTggcmVzZXJ2ZWQxWzI0XTsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogfTsKIAotLyogRmxhZyBtYWNyb3MgKi8KKy8qIE1hc2tzIGZvciBnbG9iYWxfbG9jayBmbGFnIGZpZWxkIGFib3ZlICovCiAKLSNkZWZpbmUgQUNQSV9GQUNTX1M0X0JJT1NfUFJFU0VOVCAoMSkJLyogMDA6IFM0QklPUyBzdXBwb3J0IGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgQUNQSV9HTE9DS19QRU5ESU5HICAgICAgICAgICgxKQkvKiAwMDogUGVuZGluZyBnbG9iYWwgbG9jayBvd25lcnNoaXAgKi8KKyNkZWZpbmUgQUNQSV9HTE9DS19PV05FRCAgICAgICAgICAgICgxPDwxKQkvKiAwMTogR2xvYmFsIGxvY2sgaXMgb3duZWQgKi8KIAotLyogR2xvYmFsIGxvY2sgZmxhZ3MgKi8KKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAgKi8KIAotI2RlZmluZSBBQ1BJX0dMT0NLX1BFTkRJTkcgICAgICAweDAxCS8qIDAwOiBQZW5kaW5nIGdsb2JhbCBsb2NrIG93bmVyc2hpcCAqLwotI2RlZmluZSBBQ1BJX0dMT0NLX09XTkVEICAgICAgICAweDAyCS8qIDAxOiBHbG9iYWwgbG9jayBpcyBvd25lZCAqLworI2RlZmluZSBBQ1BJX0ZBQ1NfUzRfQklPU19QUkVTRU5UICAgKDEpCS8qIDAwOiBTNEJJT1Mgc3VwcG9ydCBpcyBwcmVzZW50ICovCisjZGVmaW5lIEFDUElfRkFDU182NEJJVF9XQUtFICAgICAgICAoMTw8MSkJLyogMDE6IDY0LWJpdCB3YWtlIHZlY3RvciBzdXBwb3J0ZWQgKEFDUEkgNC4wKSAqLworCisvKiBNYXNrcyBmb3Igb3NwbV9mbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfRkFDU182NEJJVF9FTlZJUk9OTUVOVCAoMSkJLyogMDA6IDY0LWJpdCB3YWtlIGVudmlyb25tZW50IGlzIHJlcXVpcmVkIChBQ1BJIDQuMCkgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGQURUIC0gRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAoU2lnbmF0dXJlICJGQUNQIikKKyAqICAgICAgICBWZXJzaW9uIDQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yMzYsNyArMjU3LDcgQEAKIAlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeGdwZTFfYmxvY2s7CS8qIDY0LWJpdCBFeHRlbmRlZCBHZW5lcmFsIFB1cnBvc2UgRXZlbnQgMSBSZWcgQmxrIGFkZHJlc3MgKi8KIH07CiAKLS8qIEZBRFQgQm9vdCBBcmNoaXRlY3R1cmUgRmxhZ3MgKGJvb3RfZmxhZ3MpICovCisvKiBNYXNrcyBmb3IgRkFEVCBCb290IEFyY2hpdGVjdHVyZSBGbGFncyAoYm9vdF9mbGFncykgKi8KIAogI2RlZmluZSBBQ1BJX0ZBRFRfTEVHQUNZX0RFVklDRVMgICAgKDEpICAJLyogMDA6IFtWMl0gU3lzdGVtIGhhcyBMUEMgb3IgSVNBIGJ1cyBkZXZpY2VzICovCiAjZGVmaW5lIEFDUElfRkFEVF84MDQyICAgICAgICAgICAgICAoMTw8MSkJLyogMDE6IFtWM10gU3lzdGVtIGhhcyBhbiA4MDQyIGNvbnRyb2xsZXIgb24gcG9ydCA2MC82NCAqLwpAQCAtMjQ2LDcgKzI2Nyw3IEBACiAKICNkZWZpbmUgRkFEVDJfUkVWSVNJT05fSUQgICAgICAgICAgICAgICAzCiAKLS8qIEZBRFQgZmxhZ3MgKi8KKy8qIE1hc2tzIGZvciBGQURUIGZsYWdzICovCiAKICNkZWZpbmUgQUNQSV9GQURUX1dCSU5WRCAgICAgICAgICAgICgxKQkvKiAwMDogW1YxXSBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCiAjZGVmaW5lIEFDUElfRkFEVF9XQklOVkRfRkxVU0ggICAgICAoMTw8MSkJLyogMDE6IFtWMV0gd2JpbnZkIGZsdXNoZXMgYnV0IGRvZXMgbm90IGludmFsaWRhdGUgY2FjaGVzICovCkBAIC0yNjksNyArMjkwLDcgQEAKICNkZWZpbmUgQUNQSV9GQURUX0FQSUNfQ0xVU1RFUiAgICAgICgxPDwxOCkJLyogMTg6IFtWNF0gQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKEFDUEkgMy4wKSAqLwogI2RlZmluZSBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCAgICAgKDE8PDE5KQkvKiAxOTogW1Y0XSBBbGwgbG9jYWwgeF9hUElDcyBtdXN0IHVzZSBwaHlzaWNhbCBkZXN0IG1vZGUgKEFDUEkgMy4wKSAqLwogCi0vKiBGQURUIFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMgKi8KKy8qIFZhbHVlcyBmb3IgcHJlZmVycmVkX3Byb2ZpbGUgKFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMpICovCiAKIGVudW0gYWNwaV9wcmVmZXJlZF9wbV9wcm9maWxlcyB7CiAJUE1fVU5TUEVDSUZJRUQgPSAwLApAQCAtMjg3LDE0ICszMDgsMTYgQEAKIAogI2RlZmluZSBBQ1BJX0ZBRFRfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQsIGYpCiAKKy8qCisgKiBJbnRlcm5hbCB0YWJsZS1yZWxhdGVkIHN0cnVjdHVyZXMKKyAqLwogdW5pb24gYWNwaV9uYW1lX3VuaW9uIHsKIAl1MzIgaW50ZWdlcjsKIAljaGFyIGFzY2lpWzRdOwogfTsKIAotLyoKLSAqIEludGVybmFsIEFDUEkgVGFibGUgRGVzY3JpcHRvci4gT25lIHBlciBBQ1BJIHRhYmxlCi0gKi8KKy8qIEludGVybmFsIEFDUEkgVGFibGUgRGVzY3JpcHRvci4gT25lIHBlciBBQ1BJIHRhYmxlLiAqLworCiBzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjIHsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnBvaW50ZXI7CkBAIC0zMDQsNyArMzI3LDcgQEAKIAl1OCBmbGFnczsKIH07CiAKLS8qIEZsYWdzIGZvciBhYm92ZSAqLworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCiAKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fVU5LTk9XTiAgICAgICAoMCkKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFQUEVEICAgICAgICAoMSkKQEAgLTMxOCw1ICszNDEsNiBAQAogICovCiAKICNpbmNsdWRlIDxhY3BpL2FjdGJsMS5oPgorI2luY2x1ZGUgPGFjcGkvYWN0YmwyLmg+CiAKICNlbmRpZgkJCQkvKiBfX0FDVEJMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsMS5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCmluZGV4IDU5YWRlMDcuLjBiOWI0MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKQEAgLTQ2LDQxICs0NiwzMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEFkZGl0aW9uYWwgQUNQSSBUYWJsZXMKKyAqIEFkZGl0aW9uYWwgQUNQSSBUYWJsZXMgKDEpCiAgKgogICogVGhlc2UgdGFibGVzIGFyZSBub3QgY29uc3VtZWQgZGlyZWN0bHkgYnkgdGhlIEFDUElDQSBzdWJzeXN0ZW0sIGJ1dCBhcmUKICAqIGluY2x1ZGVkIGhlcmUgdG8gc3VwcG9ydCBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIEFNTCBkaXNhc3NlbWJsZXIuCiAgKgorICogVGhlIHRhYmxlcyBpbiB0aGlzIGZpbGUgYXJlIGZ1bGx5IGRlZmluZWQgd2l0aGluIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMuIFVzZWZ1bCBiZWNhdXNlIHRoZXkgbWFrZQotICogaXQgbW9yZSBkaWZmaWN1bHQgdG8gaW5hZHZlcnRlbnRseSB0eXBlIGluIHRoZSB3cm9uZyBzaWduYXR1cmUuCisgKiBWYWx1ZXMgZm9yIGRlc2NyaXB0aW9uIHRhYmxlIGhlYWRlciBzaWduYXR1cmVzIGZvciB0YWJsZXMgZGVmaW5lZCBpbiB0aGlzCisgKiBmaWxlLiBVc2VmdWwgYmVjYXVzZSB0aGV5IG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gaW5hZHZlcnRlbnRseSB0eXBlIGluCisgKiB0aGUgd3Jvbmcgc2lnbmF0dXJlLgogICovCi0jZGVmaW5lIEFDUElfU0lHX0FTRiAgICAgICAgICAgICJBU0YhIgkvKiBBbGVydCBTdGFuZGFyZCBGb3JtYXQgdGFibGUgKi8KICNkZWZpbmUgQUNQSV9TSUdfQkVSVCAgICAgICAgICAgIkJFUlQiCS8qIEJvb3QgRXJyb3IgUmVjb3JkIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX0JPT1QgICAgICAgICAgICJCT09UIgkvKiBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX0NQRVAgICAgICAgICAgICJDUEVQIgkvKiBDb3JyZWN0ZWQgUGxhdGZvcm0gRXJyb3IgUG9sbGluZyB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19EQkdQICAgICAgICAgICAiREJHUCIJLyogRGVidWcgUG9ydCB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19ETUFSICAgICAgICAgICAiRE1BUiIJLyogRE1BIFJlbWFwcGluZyB0YWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19FQ0RUICAgICAgICAgICAiRUNEVCIJLyogRW1iZWRkZWQgQ29udHJvbGxlciBCb290IFJlc291cmNlcyBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19FSU5KICAgICAgICAgICAiRUlOSiIJLyogRXJyb3IgSW5qZWN0aW9uIHRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX0VSU1QgICAgICAgICAgICJFUlNUIgkvKiBFcnJvciBSZWNvcmQgU2VyaWFsaXphdGlvbiBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19IRVNUICAgICAgICAgICAiSEVTVCIJLyogSGFyZHdhcmUgRXJyb3IgU291cmNlIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX0hQRVQgICAgICAgICAgICJIUEVUIgkvKiBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19JQkZUICAgICAgICAgICAiSUJGVCIJLyogaV9zQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgKi8KICNkZWZpbmUgQUNQSV9TSUdfTUFEVCAgICAgICAgICAgIkFQSUMiCS8qIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUgKi8KLSNkZWZpbmUgQUNQSV9TSUdfTUNGRyAgICAgICAgICAgIk1DRkciCS8qIFBDSSBNZW1vcnkgTWFwcGVkIENvbmZpZ3VyYXRpb24gdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfTVNDVCAgICAgICAgICAgIk1TQ1QiCS8qIE1heGltdW0gU3lzdGVtIENoYXJhY3RlcmlzdGljcyBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19TQlNUICAgICAgICAgICAiU0JTVCIJLyogU21hcnQgQmF0dGVyeSBTcGVjaWZpY2F0aW9uIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX1NMSUMgICAgICAgICAgICJTTElDIgkvKiBTb2Z0d2FyZSBMaWNlbnNpbmcgRGVzY3JpcHRpb24gVGFibGUgKi8KICNkZWZpbmUgQUNQSV9TSUdfU0xJVCAgICAgICAgICAgIlNMSVQiCS8qIFN5c3RlbSBMb2NhbGl0eSBEaXN0YW5jZSBJbmZvcm1hdGlvbiBUYWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19TUENSICAgICAgICAgICAiU1BDUiIJLyogU2VyaWFsIFBvcnQgQ29uc29sZSBSZWRpcmVjdGlvbiB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19TUE1JICAgICAgICAgICAiU1BNSSIJLyogU2VydmVyIFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJmYWNlIHRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX1NSQVQgICAgICAgICAgICJTUkFUIgkvKiBTeXN0ZW0gUmVzb3VyY2UgQWZmaW5pdHkgVGFibGUgKi8KLSNkZWZpbmUgQUNQSV9TSUdfVENQQSAgICAgICAgICAgIlRDUEEiCS8qIFRydXN0ZWQgQ29tcHV0aW5nIFBsYXRmb3JtIEFsbGlhbmNlIHRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX1VFRkkgICAgICAgICAgICJVRUZJIgkvKiBVZWZpIEJvb3QgT3B0aW1pemF0aW9uIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX1dEQVQgICAgICAgICAgICJXREFUIgkvKiBXYXRjaGRvZyBBY3Rpb24gVGFibGUgKi8KLSNkZWZpbmUgQUNQSV9TSUdfV0RSVCAgICAgICAgICAgIldEUlQiCS8qIFdhdGNoZG9nIFJlc291cmNlIFRhYmxlICovCiAKIC8qCiAgKiBBbGwgdGFibGVzIG11c3QgYmUgYnl0ZS1wYWNrZWQgdG8gbWF0Y2ggdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiwgc2luY2UKQEAgLTk0LDE0ICs4NCwyMCBAQAogICogcG9ydGFibGUsIHNvIGRvIG5vdCB1c2UgYW55IG90aGVyIGJpdGZpZWxkIHR5cGVzLgogICovCiAKLS8qIENvbW1vbiBTdWJ0YWJsZSBoZWFkZXIgKHVzZWQgaW4gTUFEVCwgU1JBVCwgZXRjLikgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29tbW9uIHN1YnRhYmxlIGhlYWRlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBHZW5lcmljIHN1YnRhYmxlIGhlYWRlciAodXNlZCBpbiBNQURULCBTUkFULCBldGMuKSAqLwogCiBzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgewogCXU4IHR5cGU7CiAJdTggbGVuZ3RoOwogfTsKIAotLyogQ29tbW9uIFN1YnRhYmxlIGhlYWRlciBmb3IgV0hFQSB0YWJsZXMgKEVJTkosIEVSU1QsIFdEQVQpICovCisvKiBTdWJ0YWJsZSBoZWFkZXIgZm9yIFdIRUEgdGFibGVzIChFSU5KLCBFUlNULCBXREFUKSAqLwogCiBzdHJ1Y3QgYWNwaV93aGVhX2hlYWRlciB7CiAJdTggYWN0aW9uOwpAQCAtMTE1LDExNiArMTExLDggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBBU0YgLSBBbGVydCBTdGFuZGFyZCBGb3JtYXQgdGFibGUgKFNpZ25hdHVyZSAiQVNGISIpCi0gKgotICogQ29uZm9ybXMgdG8gdGhlIEFsZXJ0IFN0YW5kYXJkIEZvcm1hdCBTcGVjaWZpY2F0aW9uIFYyLjAsIDIzIEFwcmlsIDIwMDMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9hc2YgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotfTsKLQotLyogQVNGIHN1YnRhYmxlIGhlYWRlciAqLwotCi1zdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkOwotCXUxNiBsZW5ndGg7Ci19OwotCi0vKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KLQotZW51bSBhY3BpX2FzZl90eXBlIHsKLQlBQ1BJX0FTRl9UWVBFX0lORk8gPSAwLAotCUFDUElfQVNGX1RZUEVfQUxFUlQgPSAxLAotCUFDUElfQVNGX1RZUEVfQ09OVFJPTCA9IDIsCi0JQUNQSV9BU0ZfVFlQRV9CT09UID0gMywKLQlBQ1BJX0FTRl9UWVBFX0FERFJFU1MgPSA0LAotCUFDUElfQVNGX1RZUEVfUkVTRVJWRUQgPSA1Ci19OwotCi0vKgotICogQVNGIHN1YnRhYmxlcwotICovCi0KLS8qIDA6IEFTRiBJbmZvcm1hdGlvbiAqLwotCi1zdHJ1Y3QgYWNwaV9hc2ZfaW5mbyB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggbWluX3Jlc2V0X3ZhbHVlOwotCXU4IG1pbl9wb2xsX2ludGVydmFsOwotCXUxNiBzeXN0ZW1faWQ7Ci0JdTMyIG1mZ19pZDsKLQl1OCBmbGFnczsKLQl1OCByZXNlcnZlZDJbM107Ci19OwotCi0vKiAxOiBBU0YgQWxlcnRzICovCi0KLXN0cnVjdCBhY3BpX2FzZl9hbGVydCB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggYXNzZXJ0X21hc2s7Ci0JdTggZGVhc3NlcnRfbWFzazsKLQl1OCBhbGVydHM7Ci0JdTggZGF0YV9sZW5ndGg7Ci19OwotCi1zdHJ1Y3QgYWNwaV9hc2ZfYWxlcnRfZGF0YSB7Ci0JdTggYWRkcmVzczsKLQl1OCBjb21tYW5kOwotCXU4IG1hc2s7Ci0JdTggdmFsdWU7Ci0JdTggc2Vuc29yX3R5cGU7Ci0JdTggdHlwZTsKLQl1OCBvZmZzZXQ7Ci0JdTggc291cmNlX3R5cGU7Ci0JdTggc2V2ZXJpdHk7Ci0JdTggc2Vuc29yX251bWJlcjsKLQl1OCBlbnRpdHk7Ci0JdTggaW5zdGFuY2U7Ci19OwotCi0vKiAyOiBBU0YgUmVtb3RlIENvbnRyb2wgKi8KLQotc3RydWN0IGFjcGlfYXNmX3JlbW90ZSB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggY29udHJvbHM7Ci0JdTggZGF0YV9sZW5ndGg7Ci0JdTE2IHJlc2VydmVkMjsKLX07Ci0KLXN0cnVjdCBhY3BpX2FzZl9jb250cm9sX2RhdGEgewotCXU4IGZ1bmN0aW9uOwotCXU4IGFkZHJlc3M7Ci0JdTggY29tbWFuZDsKLQl1OCB2YWx1ZTsKLX07Ci0KLS8qIDM6IEFTRiBSTUNQIEJvb3QgT3B0aW9ucyAqLwotCi1zdHJ1Y3QgYWNwaV9hc2Zfcm1jcCB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggY2FwYWJpbGl0aWVzWzddOwotCXU4IGNvbXBsZXRpb25fY29kZTsKLQl1MzIgZW50ZXJwcmlzZV9pZDsKLQl1OCBjb21tYW5kOwotCXUxNiBwYXJhbWV0ZXI7Ci0JdTE2IGJvb3Rfb3B0aW9uczsKLQl1MTYgb2VtX3BhcmFtZXRlcnM7Ci19OwotCi0vKiA0OiBBU0YgQWRkcmVzcyAqLwotCi1zdHJ1Y3QgYWNwaV9hc2ZfYWRkcmVzcyB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggZXByb21fYWRkcmVzczsKLQl1OCBkZXZpY2VzOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBCRVJUIC0gQm9vdCBFcnJvciBSZWNvcmQgVGFibGUKKyAqIEJFUlQgLSBCb290IEVycm9yIFJlY29yZCBUYWJsZSAoQUNQSSA0LjApCisgKiAgICAgICAgVmVyc2lvbiAxCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjM0LDM4ICsxMjIsNDMgQEAKIAl1NjQgYWRkcmVzczsJCS8qIFBoeXNpY2FsIGFkZHJlc3NzIG9mIHRoZSBlcnJvciByZWdpb24gKi8KIH07CiAKLS8qIEJvb3QgRXJyb3IgUmVnaW9uICovCisvKiBCb290IEVycm9yIFJlZ2lvbiAobm90IGEgc3VidGFibGUsIHBvaW50ZWQgdG8gYnkgQWRkcmVzcyBmaWVsZCBhYm92ZSkgKi8KIAogc3RydWN0IGFjcGlfYmVydF9yZWdpb24gewotCXUzMiBibG9ja19zdGF0dXM7Ci0JdTMyIHJhd19kYXRhX29mZnNldDsKLQl1MzIgcmF3X2RhdGFfbGVuZ3RoOwotCXUzMiBkYXRhX2xlbmd0aDsKLQl1MzIgZXJyb3Jfc2V2ZXJpdHk7CisJdTMyIGJsb2NrX3N0YXR1czsJLyogVHlwZSBvZiBlcnJvciBpbmZvcm1hdGlvbiAqLworCXUzMiByYXdfZGF0YV9vZmZzZXQ7CS8qIE9mZnNldCB0byByYXcgZXJyb3IgZGF0YSAqLworCXUzMiByYXdfZGF0YV9sZW5ndGg7CS8qIExlbmd0aCBvZiByYXcgZXJyb3IgZGF0YSAqLworCXUzMiBkYXRhX2xlbmd0aDsJLyogTGVuZ3RoIG9mIGdlbmVyaWMgZXJyb3IgZGF0YSAqLworCXUzMiBlcnJvcl9zZXZlcml0eTsJLyogU2V2ZXJpdHkgY29kZSAqLwogfTsKIAotLyogYmxvY2tfc3RhdHVzIEZsYWdzICovCisvKiBWYWx1ZXMgZm9yIGJsb2NrX3N0YXR1cyBmbGFncyBhYm92ZSAqLwogCiAjZGVmaW5lIEFDUElfQkVSVF9VTkNPUlJFQ1RBQkxFICAgICAgICAgICAgICgxKQotI2RlZmluZSBBQ1BJX0JFUlRfQ09SUkVDVEFCTEUgICAgICAgICAgICAgICAoMikKLSNkZWZpbmUgQUNQSV9CRVJUX01VTFRJUExFX1VOQ09SUkVDVEFCTEUgICAgKDQpCi0jZGVmaW5lIEFDUElfQkVSVF9NVUxUSVBMRV9DT1JSRUNUQUJMRSAgICAgICg4KQorI2RlZmluZSBBQ1BJX0JFUlRfQ09SUkVDVEFCTEUgICAgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQUNQSV9CRVJUX01VTFRJUExFX1VOQ09SUkVDVEFCTEUgICAgKDE8PDIpCisjZGVmaW5lIEFDUElfQkVSVF9NVUxUSVBMRV9DT1JSRUNUQUJMRSAgICAgICgxPDwzKQorI2RlZmluZSBBQ1BJX0JFUlRfRVJST1JfRU5UUllfQ09VTlQgICAgICAgICAoMHhGRjw8NCkJLyogOCBiaXRzLCBlcnJvciBjb3VudCAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEJPT1QgLSBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFZhbHVlcyBmb3IgZXJyb3Jfc2V2ZXJpdHkgYWJvdmUgKi8KIAotc3RydWN0IGFjcGlfdGFibGVfYm9vdCB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTggY21vc19pbmRleDsJCS8qIEluZGV4IGluIENNT1MgUkFNIGZvciB0aGUgYm9vdCByZWdpc3RlciAqLwotCXU4IHJlc2VydmVkWzNdOworZW51bSBhY3BpX2JlcnRfZXJyb3Jfc2V2ZXJpdHkgeworCUFDUElfQkVSVF9FUlJPUl9DT1JSRUNUQUJMRSA9IDAsCisJQUNQSV9CRVJUX0VSUk9SX0ZBVEFMID0gMSwKKwlBQ1BJX0JFUlRfRVJST1JfQ09SUkVDVEVEID0gMiwKKwlBQ1BJX0JFUlRfRVJST1JfTk9ORSA9IDMsCisJQUNQSV9CRVJUX0VSUk9SX1JFU0VSVkVEID0gNAkvKiA0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwogfTsKIAorLyoKKyAqIE5vdGU6IFRoZSBnZW5lcmljIGVycm9yIGRhdGEgdGhhdCBmb2xsb3dzIHRoZSBlcnJvcl9zZXZlcml0eSBmaWVsZCBhYm92ZQorICogdXNlcyB0aGUgc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX2RhdGEgZGVmaW5lZCB1bmRlciB0aGUgSEVTVCB0YWJsZSBiZWxvdworICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ1BFUCAtIENvcnJlY3RlZCBQbGF0Zm9ybSBFcnJvciBQb2xsaW5nIHRhYmxlCisgKiBDUEVQIC0gQ29ycmVjdGVkIFBsYXRmb3JtIEVycm9yIFBvbGxpbmcgdGFibGUgKEFDUEkgNC4wKQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTI3Nyw4ICsxNzAsNyBAQAogLyogU3VidGFibGUgKi8KIAogc3RydWN0IGFjcGlfY3BlcF9wb2xsaW5nIHsKLQl1OCB0eXBlOwotCXU4IGxlbmd0aDsKKwlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgaGVhZGVyOwogCXU4IGlkOwkJCS8qIFByb2Nlc3NvciBJRCAqLwogCXU4IGVpZDsJCQkvKiBQcm9jZXNzb3IgRUlEICovCiAJdTMyIGludGVydmFsOwkJLyogUG9sbGluZyBpbnRlcnZhbCAobXNlYykgKi8KQEAgLTI4NiwxMjQgKzE3OCw4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogREJHUCAtIERlYnVnIFBvcnQgdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9kYmdwIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1OCB0eXBlOwkJLyogMD1mdWxsIDE2NTUwLCAxPXN1YnNldCBvZiAxNjU1MCAqLwotCXU4IHJlc2VydmVkWzNdOwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBkZWJ1Z19wb3J0OwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBETUFSIC0gRE1BIFJlbWFwcGluZyB0YWJsZQotICoJICBGcm9tICJJbnRlbCBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2d5IGZvciBEaXJlY3RlZCBJL08iLCBTZXB0LiAyMDA3Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGFjcGlfdGFibGVfZG1hciB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTggd2lkdGg7CQkvKiBIb3N0IEFkZHJlc3MgV2lkdGggKi8KLQl1OCBmbGFnczsKLQl1OCByZXNlcnZlZFsxMF07Ci19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfRE1BUl9JTlRSX1JFTUFQCSAgICAoMSkKLQotLyogRE1BUiBzdWJ0YWJsZSBoZWFkZXIgKi8KLQotc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgewotCXUxNiB0eXBlOwotCXUxNiBsZW5ndGg7Ci19OwotCi0vKiBWYWx1ZXMgZm9yIHN1YnRhYmxlIHR5cGUgaW4gc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKi8KLQotZW51bSBhY3BpX2RtYXJfdHlwZSB7Ci0JQUNQSV9ETUFSX1RZUEVfSEFSRFdBUkVfVU5JVCA9IDAsCi0JQUNQSV9ETUFSX1RZUEVfUkVTRVJWRURfTUVNT1JZID0gMSwKLQlBQ1BJX0RNQVJfVFlQRV9BVFNSID0gMiwKLQlBQ1BJX0RNQVJfVFlQRV9SRVNFUlZFRCA9IDMJLyogMyBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KLX07Ci0KLXN0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlIHsKLQl1OCBlbnRyeV90eXBlOwotCXU4IGxlbmd0aDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTggZW51bWVyYXRpb25faWQ7Ci0JdTggYnVzOwotfTsKLQotLyogVmFsdWVzIGZvciBlbnRyeV90eXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlICovCi0KLWVudW0gYWNwaV9kbWFyX3Njb3BlX3R5cGUgewotCUFDUElfRE1BUl9TQ09QRV9UWVBFX05PVF9VU0VEID0gMCwKLQlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9FTkRQT0lOVCA9IDEsCi0JQUNQSV9ETUFSX1NDT1BFX1RZUEVfQlJJREdFID0gMiwKLQlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9JT0FQSUMgPSAzLAotCUFDUElfRE1BUl9TQ09QRV9UWVBFX0hQRVQgPSA0LAotCUFDUElfRE1BUl9TQ09QRV9UWVBFX1JFU0VSVkVEID0gNQkvKiA1IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwotfTsKLQotc3RydWN0IGFjcGlfZG1hcl9wY2lfcGF0aCB7Ci0JdTggZGV2OwotCXU4IGZuOwotfTsKLQotLyoKLSAqIERNQVIgU3ViLXRhYmxlcywgY29ycmVzcG9uZCB0byBUeXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyCi0gKi8KLQotLyogMDogSGFyZHdhcmUgVW5pdCBEZWZpbml0aW9uICovCi0KLXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCB7Ci0Jc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOwotCXU4IGZsYWdzOwotCXU4IHJlc2VydmVkOwotCXUxNiBzZWdtZW50OwotCXU2NCBhZGRyZXNzOwkJLyogUmVnaXN0ZXIgQmFzZSBBZGRyZXNzICovCi19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfRE1BUl9JTkNMVURFX0FMTCAgICAgICAoMSkKLQotLyogMTogUmVzZXJ2ZWQgTWVtb3J5IERlZmluaW5pdGlvbiAqLwotCi1zdHJ1Y3QgYWNwaV9kbWFyX3Jlc2VydmVkX21lbW9yeSB7Ci0Jc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOwotCXUxNiByZXNlcnZlZDsKLQl1MTYgc2VnbWVudDsKLQl1NjQgYmFzZV9hZGRyZXNzOwkJLyogNF9rIGFsaWduZWQgYmFzZSBhZGRyZXNzICovCi0JdTY0IGVuZF9hZGRyZXNzOwkvKiA0X2sgYWxpZ25lZCBsaW1pdCBhZGRyZXNzICovCi19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfRE1BUl9BTExPV19BTEwgICAgICAgICAoMSkKLQotCi0vKiAyOiBSb290IFBvcnQgQVRTIENhcGFiaWxpdHkgUmVwb3J0aW5nIFN0cnVjdHVyZSAqLwotCi1zdHJ1Y3QgYWNwaV9kbWFyX2F0c3IgewotICAgICAgIHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyIGhlYWRlcjsKLSAgICAgICB1OCBmbGFnczsKLSAgICAgICB1OCByZXNlcnZlZDsKLSAgICAgICB1MTYgc2VnbWVudDsKLX07Ci0KLS8qIEZsYWdzICovCi0KLSNkZWZpbmUgQUNQSV9ETUFSX0FMTF9QT1JUUwkgICAgKDEpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRUNEVCAtIEVtYmVkZGVkIENvbnRyb2xsZXIgQm9vdCBSZXNvdXJjZXMgVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00MTgsMTQgKzE5NCwxNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEVJTkogLSBFcnJvciBJbmplY3Rpb24gVGFibGUKKyAqIEVJTkogLSBFcnJvciBJbmplY3Rpb24gVGFibGUgKEFDUEkgNC4wKQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0cnVjdCBhY3BpX3RhYmxlX2VpbmogewogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwogCXUzMiBoZWFkZXJfbGVuZ3RoOwotCXUzMiByZXNlcnZlZDsKKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZFszXTsKIAl1MzIgZW50cmllczsKIH07CiAKQEAgLTQzNSw2ICsyMTMsMTAgQEAKIAlzdHJ1Y3QgYWNwaV93aGVhX2hlYWRlciB3aGVhX2hlYWRlcjsJLyogQ29tbW9uIGhlYWRlciBmb3IgV0hFQSB0YWJsZXMgKi8KIH07CiAKKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfRUlOSl9QUkVTRVJWRSAgICAgICAgICAoMSkKKwogLyogVmFsdWVzIGZvciBBY3Rpb24gZmllbGQgYWJvdmUgKi8KIAogZW51bSBhY3BpX2VpbmpfYWN0aW9ucyB7CkBAIC00NzAsOSArMjUyLDM0IEBACiAJdTMyIGVudHJ5X2NvdW50OwogfTsKIAorLyogQ29tbWFuZCBzdGF0dXMgcmV0dXJuIHZhbHVlcyAqLworCitlbnVtIGFjcGlfZWlual9jb21tYW5kX3N0YXR1cyB7CisJQUNQSV9FSU5KX1NVQ0NFU1MgPSAwLAorCUFDUElfRUlOSl9GQUlMVVJFID0gMSwKKwlBQ1BJX0VJTkpfSU5WQUxJRF9BQ0NFU1MgPSAyLAorCUFDUElfRUlOSl9TVEFUVVNfUkVTRVJWRUQgPSAzCS8qIDMgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCit9OworCisvKiBFcnJvciB0eXBlcyByZXR1cm5lZCBmcm9tIEFDUElfRUlOSl9HRVRfRVJST1JfVFlQRSAoYml0ZmllbGQpICovCisKKyNkZWZpbmUgQUNQSV9FSU5KX1BST0NFU1NPUl9DT1JSRUNUQUJMRSAgICAgKDEpCisjZGVmaW5lIEFDUElfRUlOSl9QUk9DRVNTT1JfVU5DT1JSRUNUQUJMRSAgICgxPDwxKQorI2RlZmluZSBBQ1BJX0VJTkpfUFJPQ0VTU09SX0ZBVEFMICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgQUNQSV9FSU5KX01FTU9SWV9DT1JSRUNUQUJMRSAgICAgICAgKDE8PDMpCisjZGVmaW5lIEFDUElfRUlOSl9NRU1PUllfVU5DT1JSRUNUQUJMRSAgICAgICgxPDw0KQorI2RlZmluZSBBQ1BJX0VJTkpfTUVNT1JZX0ZBVEFMICAgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgQUNQSV9FSU5KX1BDSVhfQ09SUkVDVEFCTEUgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIEFDUElfRUlOSl9QQ0lYX1VOQ09SUkVDVEFCTEUgICAgICAgICgxPDw3KQorI2RlZmluZSBBQ1BJX0VJTkpfUENJWF9GQVRBTCAgICAgICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgQUNQSV9FSU5KX1BMQVRGT1JNX0NPUlJFQ1RBQkxFICAgICAgKDE8PDkpCisjZGVmaW5lIEFDUElfRUlOSl9QTEFURk9STV9VTkNPUlJFQ1RBQkxFICAgICgxPDwxMCkKKyNkZWZpbmUgQUNQSV9FSU5KX1BMQVRGT1JNX0ZBVEFMICAgICAgICAgICAgKDE8PDExKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEVSU1QgLSBFcnJvciBSZWNvcmQgU2VyaWFsaXphdGlvbiBUYWJsZQorICogRVJTVCAtIEVycm9yIFJlY29yZCBTZXJpYWxpemF0aW9uIFRhYmxlIChBQ1BJIDQuMCkKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00ODksMTkgKzI5NiwyMyBAQAogCXN0cnVjdCBhY3BpX3doZWFfaGVhZGVyIHdoZWFfaGVhZGVyOwkvKiBDb21tb24gaGVhZGVyIGZvciBXSEVBIHRhYmxlcyAqLwogfTsKIAorLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9FUlNUX1BSRVNFUlZFICAgICAgICAgICgxKQorCiAvKiBWYWx1ZXMgZm9yIEFjdGlvbiBmaWVsZCBhYm92ZSAqLwogCiBlbnVtIGFjcGlfZXJzdF9hY3Rpb25zIHsKLQlBQ1BJX0VSU1RfQkVHSU5fV1JJVEVfT1BFUkFUSU9OID0gMCwKLQlBQ1BJX0VSU1RfQkVHSU5fUkVBRF9PUEVSQVRJT04gPSAxLAotCUFDUElfRVJTVF9CRVRHSU5fQ0xFQVJfT1BFUkFUSU9OID0gMiwKLQlBQ1BJX0VSU1RfRU5EX09QRVJBVElPTiA9IDMsCisJQUNQSV9FUlNUX0JFR0lOX1dSSVRFID0gMCwKKwlBQ1BJX0VSU1RfQkVHSU5fUkVBRCA9IDEsCisJQUNQSV9FUlNUX0JFR0lOX0NMRUFSID0gMiwKKwlBQ1BJX0VSU1RfRU5EID0gMywKIAlBQ1BJX0VSU1RfU0VUX1JFQ09SRF9PRkZTRVQgPSA0LAogCUFDUElfRVJTVF9FWEVDVVRFX09QRVJBVElPTiA9IDUsCiAJQUNQSV9FUlNUX0NIRUNLX0JVU1lfU1RBVFVTID0gNiwKIAlBQ1BJX0VSU1RfR0VUX0NPTU1BTkRfU1RBVFVTID0gNywKLQlBQ1BJX0VSU1RfR0VUX1JFQ09SRF9JREVOVElGSUVSID0gOCwKLQlBQ1BJX0VSU1RfU0VUX1JFQ09SRF9JREVOVElGSUVSID0gOSwKKwlBQ1BJX0VSU1RfR0VUX1JFQ09SRF9JRCA9IDgsCisJQUNQSV9FUlNUX1NFVF9SRUNPUkRfSUQgPSA5LAogCUFDUElfRVJTVF9HRVRfUkVDT1JEX0NPVU5UID0gMTAsCiAJQUNQSV9FUlNUX0JFR0lOX0RVTU1ZX1dSSUlURSA9IDExLAogCUFDUElfRVJTVF9OT1RfVVNFRCA9IDEyLApAQCAtNTM2LDkgKzM0NywyOSBAQAogCUFDUElfRVJTVF9JTlNUUlVDVElPTl9SRVNFUlZFRCA9IDE5CS8qIDE5IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwogfTsKIAorLyogQ29tbWFuZCBzdGF0dXMgcmV0dXJuIHZhbHVlcyAqLworCitlbnVtIGFjcGlfZXJzdF9jb21tYW5kX3N0YXR1cyB7CisJQUNQSV9FUlNUX1NVQ0VTUyA9IDAsCisJQUNQSV9FUlNUX05PX1NQQUNFID0gMSwKKwlBQ1BJX0VSU1RfTk9UX0FWQUlMQUJMRSA9IDIsCisJQUNQSV9FUlNUX0ZBSUxVUkUgPSAzLAorCUFDUElfRVJTVF9SRUNPUkRfRU1QVFkgPSA0LAorCUFDUElfRVJTVF9OT1RfRk9VTkQgPSA1LAorCUFDUElfRVJTVF9TVEFUVVNfUkVTRVJWRUQgPSA2CS8qIDYgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCit9OworCisvKiBFcnJvciBSZWNvcmQgU2VyaWFsaXphdGlvbiBJbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgYWNwaV9lcnN0X2luZm8geworCXUxNiBzaWduYXR1cmU7CQkvKiBTaG91bGQgYmUgIkVSIiAqLworCXU4IGRhdGFbNDhdOworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBIRVNUIC0gSGFyZHdhcmUgRXJyb3IgU291cmNlIFRhYmxlCisgKiBIRVNUIC0gSGFyZHdhcmUgRXJyb3IgU291cmNlIFRhYmxlIChBQ1BJIDQuMCkKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC01NTEsODUgKzM4Miw2OSBAQAogCiBzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciB7CiAJdTE2IHR5cGU7CisJdTE2IHNvdXJjZV9pZDsKIH07CiAKIC8qIFZhbHVlcyBmb3IgVHlwZSBmaWVsZCBhYm92ZSBmb3Igc3VidGFibGVzICovCiAKIGVudW0gYWNwaV9oZXN0X3R5cGVzIHsKLQlBQ1BJX0hFU1RfVFlQRV9YUEZfTUFDSElORV9DSEVDSyA9IDAsCi0JQUNQSV9IRVNUX1RZUEVfWFBGX0NPUlJFQ1RFRF9NQUNISU5FX0NIRUNLID0gMSwKLQlBQ1BJX0hFU1RfVFlQRV9YUEZfVU5VU0VEID0gMiwKLQlBQ1BJX0hFU1RfVFlQRV9YUEZfTk9OX01BU0tBQkxFX0lOVEVSUlVQVCA9IDMsCi0JQUNQSV9IRVNUX1RZUEVfSVBGX0NPUlJFQ1RFRF9NQUNISU5FX0NIRUNLID0gNCwKLQlBQ1BJX0hFU1RfVFlQRV9JUEZfQ09SUkVDVEVEX1BMQVRGT1JNX0VSUk9SID0gNSwKKwlBQ1BJX0hFU1RfVFlQRV9JQTMyX0NIRUNLID0gMCwKKwlBQ1BJX0hFU1RfVFlQRV9JQTMyX0NPUlJFQ1RFRF9DSEVDSyA9IDEsCisJQUNQSV9IRVNUX1RZUEVfSUEzMl9OTUkgPSAyLAorCUFDUElfSEVTVF9UWVBFX05PVF9VU0VEMyA9IDMsCisJQUNQSV9IRVNUX1RZUEVfTk9UX1VTRUQ0ID0gNCwKKwlBQ1BJX0hFU1RfVFlQRV9OT1RfVVNFRDUgPSA1LAogCUFDUElfSEVTVF9UWVBFX0FFUl9ST09UX1BPUlQgPSA2LAogCUFDUElfSEVTVF9UWVBFX0FFUl9FTkRQT0lOVCA9IDcsCiAJQUNQSV9IRVNUX1RZUEVfQUVSX0JSSURHRSA9IDgsCi0JQUNQSV9IRVNUX1RZUEVfR0VORVJJQ19IQVJEV0FSRV9FUlJPUl9TT1VSQ0UgPSA5LAorCUFDUElfSEVTVF9UWVBFX0dFTkVSSUNfRVJST1IgPSA5LAogCUFDUElfSEVTVF9UWVBFX1JFU0VSVkVEID0gMTAJLyogMTAgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCiB9OwogCiAvKgotICogSEVTVCBTdWItc3VidGFibGVzCisgKiBIRVNUIHN1YnN0cnVjdHVyZXMgY29udGFpbmVkIGluIHN1YnRhYmxlcwogICovCiAKLS8qIFhQRiBNYWNoaW5lIENoZWNrIEVycm9yIEJhbmsgKi8KLQotc3RydWN0IGFjcGlfaGVzdF94cGZfZXJyb3JfYmFuayB7CisvKgorICogSUEzMiBFcnJvciBCYW5rKHMpIC0gRm9sbG93cyB0aGUgc3RydWN0IGFjcGlfaGVzdF9pYV9tYWNoaW5lX2NoZWNrIGFuZAorICogc3RydWN0IGFjcGlfaGVzdF9pYV9jb3JyZWN0ZWQgc3RydWN0dXJlcy4KKyAqLworc3RydWN0IGFjcGlfaGVzdF9pYV9lcnJvcl9iYW5rIHsKIAl1OCBiYW5rX251bWJlcjsKIAl1OCBjbGVhcl9zdGF0dXNfb25faW5pdDsKIAl1OCBzdGF0dXNfZm9ybWF0OwotCXU4IGNvbmZpZ193cml0ZV9lbmFibGU7CisJdTggcmVzZXJ2ZWQ7CiAJdTMyIGNvbnRyb2xfcmVnaXN0ZXI7Ci0JdTY0IGNvbnRyb2xfaW5pdF9kYXRhOworCXU2NCBjb250cm9sX2RhdGE7CiAJdTMyIHN0YXR1c19yZWdpc3RlcjsKIAl1MzIgYWRkcmVzc19yZWdpc3RlcjsKIAl1MzIgbWlzY19yZWdpc3RlcjsKIH07CiAKLS8qIEdlbmVyaWMgRXJyb3IgU3RhdHVzICovCi0KLXN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgewotCXUzMiBibG9ja19zdGF0dXM7Ci0JdTMyIHJhd19kYXRhX29mZnNldDsKLQl1MzIgcmF3X2RhdGFfbGVuZ3RoOwotCXUzMiBkYXRhX2xlbmd0aDsKLQl1MzIgZXJyb3Jfc2V2ZXJpdHk7Ci19OwotCi0vKiBHZW5lcmljIEVycm9yIERhdGEgKi8KLQotc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX2RhdGEgewotCXU4IHNlY3Rpb25fdHlwZVsxNl07Ci0JdTMyIGVycm9yX3NldmVyaXR5OwotCXUxNiByZXZpc2lvbjsKLQl1OCB2YWxpZGF0aW9uX2JpdHM7Ci0JdTggZmxhZ3M7Ci0JdTMyIGVycm9yX2RhdGFfbGVuZ3RoOwotCXU4IGZydV9pZFsxNl07Ci0JdTggZnJ1X3RleHRbMjBdOwotfTsKLQotLyogQ29tbW9uIEhFU1Qgc3RydWN0dXJlIGZvciBQQ0kvQUVSIHR5cGVzIGJlbG93ICg2LDcsOCkgKi8KKy8qIENvbW1vbiBIRVNUIHN1Yi1zdHJ1Y3R1cmUgZm9yIFBDSS9BRVIgc3RydWN0dXJlcyBiZWxvdyAoNiw3LDgpICovCiAKIHN0cnVjdCBhY3BpX2hlc3RfYWVyX2NvbW1vbiB7Ci0JdTE2IHNvdXJjZV9pZDsKLQl1MTYgY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1MTYgcmVzZXJ2ZWQxOwogCXU4IGZsYWdzOwogCXU4IGVuYWJsZWQ7Ci0JdTMyIHJlY29yZHNfdG9fcHJlX2FsbG9jYXRlOworCXUzMiByZWNvcmRzX3RvX3ByZWFsbG9jYXRlOwogCXUzMiBtYXhfc2VjdGlvbnNfcGVyX3JlY29yZDsKIAl1MzIgYnVzOwogCXUxNiBkZXZpY2U7CiAJdTE2IGZ1bmN0aW9uOwogCXUxNiBkZXZpY2VfY29udHJvbDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTMyIHVuY29ycmVjdGFibGVfZXJyb3JfbWFzazsKLQl1MzIgdW5jb3JyZWN0YWJsZV9lcnJvcl9zZXZlcml0eTsKLQl1MzIgY29ycmVjdGFibGVfZXJyb3JfbWFzazsKLQl1MzIgYWR2YW5jZWRfZXJyb3JfY2FwYWJpbGl0aWVzOworCXUxNiByZXNlcnZlZDI7CisJdTMyIHVuY29ycmVjdGFibGVfbWFzazsKKwl1MzIgdW5jb3JyZWN0YWJsZV9zZXZlcml0eTsKKwl1MzIgY29ycmVjdGFibGVfbWFzazsKKwl1MzIgYWR2YW5jZWRfY2FwYWJpbGl0aWVzOwogfTsKIAorLyogTWFza3MgZm9yIEhFU1QgRmxhZ3MgZmllbGRzICovCisKKyNkZWZpbmUgQUNQSV9IRVNUX0ZJUk1XQVJFX0ZJUlNUICAgICAgICAoMSkKKyNkZWZpbmUgQUNQSV9IRVNUX0dMT0JBTCAgICAgICAgICAgICAgICAoMTw8MSkKKwogLyogSGFyZHdhcmUgRXJyb3IgTm90aWZpY2F0aW9uICovCiAKIHN0cnVjdCBhY3BpX2hlc3Rfbm90aWZ5IHsKQEAgLTY1NSw3MSArNDcwLDU5IEBACiAJQUNQSV9IRVNUX05PVElGWV9SRVNFUlZFRCA9IDUJLyogNSBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KIH07CiAKKy8qIFZhbHVlcyBmb3IgY29uZmlnX3dyaXRlX2VuYWJsZSBiaXRmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfSEVTVF9UWVBFICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIEFDUElfSEVTVF9QT0xMX0lOVEVSVkFMICAgICAgICAgKDE8PDEpCisjZGVmaW5lIEFDUElfSEVTVF9QT0xMX1RIUkVTSE9MRF9WQUxVRSAgKDE8PDIpCisjZGVmaW5lIEFDUElfSEVTVF9QT0xMX1RIUkVTSE9MRF9XSU5ET1cgKDE8PDMpCisjZGVmaW5lIEFDUElfSEVTVF9FUlJfVEhSRVNIT0xEX1ZBTFVFICAgKDE8PDQpCisjZGVmaW5lIEFDUElfSEVTVF9FUlJfVEhSRVNIT0xEX1dJTkRPVyAgKDE8PDUpCisKIC8qCiAgKiBIRVNUIHN1YnRhYmxlcwotICoKLSAqIEZyb20gV0hFQSBEZXNpZ24gRG9jdW1lbnQsIDE2IE1heSAyMDA3LgotICogTm90ZTogVGhlcmUgaXMgbm8gc3VidGFibGUgdHlwZSAyIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQsCi0gKiBhbmQgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgc3VidGFibGUgdHlwZSAzcy4KICAqLwogCi0gLyogMDogWFBGIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uICovCisvKiAwOiBJQTMyIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uICovCiAKLXN0cnVjdCBhY3BpX2hlc3RfeHBmX21hY2hpbmVfY2hlY2sgeworc3RydWN0IGFjcGlfaGVzdF9pYV9tYWNoaW5lX2NoZWNrIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKLQl1MTYgY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1MTYgcmVzZXJ2ZWQxOwogCXU4IGZsYWdzOwotCXU4IHJlc2VydmVkMTsKLQl1MzIgcmVjb3Jkc190b19wcmVfYWxsb2NhdGU7CisJdTggZW5hYmxlZDsKKwl1MzIgcmVjb3Jkc190b19wcmVhbGxvY2F0ZTsKIAl1MzIgbWF4X3NlY3Rpb25zX3Blcl9yZWNvcmQ7CiAJdTY0IGdsb2JhbF9jYXBhYmlsaXR5X2RhdGE7CiAJdTY0IGdsb2JhbF9jb250cm9sX2RhdGE7CiAJdTggbnVtX2hhcmR3YXJlX2JhbmtzOwotCXU4IHJlc2VydmVkMls3XTsKKwl1OCByZXNlcnZlZDNbN107CiB9OwogCi0vKiAxOiBYUEYgQ29ycmVjdGVkIE1hY2hpbmUgQ2hlY2sgKi8KKy8qIDE6IElBMzIgQ29ycmVjdGVkIE1hY2hpbmUgQ2hlY2sgKi8KIAotc3RydWN0IGFjcGlfdGFibGVfaGVzdF94cGZfY29ycmVjdGVkIHsKK3N0cnVjdCBhY3BpX2hlc3RfaWFfY29ycmVjdGVkIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKLQl1MTYgY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1MTYgcmVzZXJ2ZWQxOwogCXU4IGZsYWdzOwogCXU4IGVuYWJsZWQ7Ci0JdTMyIHJlY29yZHNfdG9fcHJlX2FsbG9jYXRlOworCXUzMiByZWNvcmRzX3RvX3ByZWFsbG9jYXRlOwogCXUzMiBtYXhfc2VjdGlvbnNfcGVyX3JlY29yZDsKIAlzdHJ1Y3QgYWNwaV9oZXN0X25vdGlmeSBub3RpZnk7CiAJdTggbnVtX2hhcmR3YXJlX2JhbmtzOwotCXU4IHJlc2VydmVkWzNdOworCXU4IHJlc2VydmVkMlszXTsKIH07CiAKLS8qIDM6IFhQRiBOb24tTWFza2FibGUgSW50ZXJydXB0ICovCisvKiAyOiBJQTMyIE5vbi1NYXNrYWJsZSBJbnRlcnJ1cHQgKi8KIAotc3RydWN0IGFjcGlfaGVzdF94cGZfbm1pIHsKK3N0cnVjdCBhY3BpX2hlc3RfaWFfbm1pIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKIAl1MzIgcmVzZXJ2ZWQ7Ci0JdTMyIHJlY29yZHNfdG9fcHJlX2FsbG9jYXRlOworCXUzMiByZWNvcmRzX3RvX3ByZWFsbG9jYXRlOwogCXUzMiBtYXhfc2VjdGlvbnNfcGVyX3JlY29yZDsKIAl1MzIgbWF4X3Jhd19kYXRhX2xlbmd0aDsKIH07CiAKLS8qIDQ6IElQRiBDb3JyZWN0ZWQgTWFjaGluZSBDaGVjayAqLwotCi1zdHJ1Y3QgYWNwaV9oZXN0X2lwZl9jb3JyZWN0ZWQgewotCXN0cnVjdCBhY3BpX2hlc3RfaGVhZGVyIGhlYWRlcjsKLQl1OCBlbmFibGVkOwotCXU4IHJlc2VydmVkOwotfTsKLQotLyogNTogSVBGIENvcnJlY3RlZCBQbGF0Zm9ybSBFcnJvciAqLwotCi1zdHJ1Y3QgYWNwaV9oZXN0X2lwZl9jb3JyZWN0ZWRfcGxhdGZvcm0gewotCXN0cnVjdCBhY3BpX2hlc3RfaGVhZGVyIGhlYWRlcjsKLQl1OCBlbmFibGVkOwotCXU4IHJlc2VydmVkOwotfTsKKy8qIDMsNCw1OiBOb3QgdXNlZCAqLwogCiAvKiA2OiBQQ0kgRXhwcmVzcyBSb290IFBvcnQgQUVSICovCiAKQEAgLTc0MSwxNDMgKzU0NCw2MSBAQAogc3RydWN0IGFjcGlfaGVzdF9hZXJfYnJpZGdlIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7CiAJc3RydWN0IGFjcGlfaGVzdF9hZXJfY29tbW9uIGFlcjsKLQl1MzIgc2Vjb25kYXJ5X3VuY29ycmVjdGFibGVfZXJyb3JfbWFzazsKLQl1MzIgc2Vjb25kYXJ5X3VuY29ycmVjdGFibGVfZXJyb3Jfc2V2ZXJpdHk7Ci0JdTMyIHNlY29uZGFyeV9hZHZhbmNlZF9jYXBhYmlsaXRpZXM7CisJdTMyIHVuY29ycmVjdGFibGVfbWFzazI7CisJdTMyIHVuY29ycmVjdGFibGVfc2V2ZXJpdHkyOworCXUzMiBhZHZhbmNlZF9jYXBhYmlsaXRpZXMyOwogfTsKIAogLyogOTogR2VuZXJpYyBIYXJkd2FyZSBFcnJvciBTb3VyY2UgKi8KIAogc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKIAl1MTYgcmVsYXRlZF9zb3VyY2VfaWQ7Ci0JdTggY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1OCByZXNlcnZlZDsKIAl1OCBlbmFibGVkOwotCXUzMiByZWNvcmRzX3RvX3ByZV9hbGxvY2F0ZTsKKwl1MzIgcmVjb3Jkc190b19wcmVhbGxvY2F0ZTsKIAl1MzIgbWF4X3NlY3Rpb25zX3Blcl9yZWNvcmQ7CiAJdTMyIG1heF9yYXdfZGF0YV9sZW5ndGg7CiAJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGVycm9yX3N0YXR1c19hZGRyZXNzOwogCXN0cnVjdCBhY3BpX2hlc3Rfbm90aWZ5IG5vdGlmeTsKLQl1MzIgZXJyb3Jfc3RhdHVzX2Jsb2NrX2xlbmd0aDsKKwl1MzIgZXJyb3JfYmxvY2tfbGVuZ3RoOwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBIUEVUIC0gSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogR2VuZXJpYyBFcnJvciBTdGF0dXMgYmxvY2sgKi8KIAotc3RydWN0IGFjcGlfdGFibGVfaHBldCB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTMyIGlkOwkJCS8qIEhhcmR3YXJlIElEIG9mIGV2ZW50IHRpbWVyIGJsb2NrICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGFkZHJlc3M7CS8qIEFkZHJlc3Mgb2YgZXZlbnQgdGltZXIgYmxvY2sgKi8KLQl1OCBzZXF1ZW5jZTsJCS8qIEhQRVQgc2VxdWVuY2UgbnVtYmVyICovCi0JdTE2IG1pbmltdW1fdGljazsJLyogTWFpbiBjb3VudGVyIG1pbiB0aWNrLCBwZXJpb2RpYyBtb2RlICovCitzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzIHsKKwl1MzIgYmxvY2tfc3RhdHVzOworCXUzMiByYXdfZGF0YV9vZmZzZXQ7CisJdTMyIHJhd19kYXRhX2xlbmd0aDsKKwl1MzIgZGF0YV9sZW5ndGg7CisJdTMyIGVycm9yX3NldmVyaXR5OworfTsKKworLyogVmFsdWVzIGZvciBibG9ja19zdGF0dXMgZmxhZ3MgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0hFU1RfVU5DT1JSRUNUQUJMRSAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgQUNQSV9IRVNUX0NPUlJFQ1RBQkxFICAgICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIEFDUElfSEVTVF9NVUxUSVBMRV9VTkNPUlJFQ1RBQkxFICAgICgxPDwyKQorI2RlZmluZSBBQ1BJX0hFU1RfTVVMVElQTEVfQ09SUkVDVEFCTEUgICAgICAoMTw8MykKKyNkZWZpbmUgQUNQSV9IRVNUX0VSUk9SX0VOVFJZX0NPVU5UICAgICAgICAgKDB4RkY8PDQpCS8qIDggYml0cywgZXJyb3IgY291bnQgKi8KKworLyogR2VuZXJpYyBFcnJvciBEYXRhIGVudHJ5ICovCisKK3N0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19kYXRhIHsKKwl1OCBzZWN0aW9uX3R5cGVbMTZdOworCXUzMiBlcnJvcl9zZXZlcml0eTsKKwl1MTYgcmV2aXNpb247CisJdTggdmFsaWRhdGlvbl9iaXRzOwogCXU4IGZsYWdzOwotfTsKLQotLyohIEZsYWdzICovCi0KLSNkZWZpbmUgQUNQSV9IUEVUX1BBR0VfUFJPVEVDVCAgICAgICgxKQkvKiAwMDogTm8gcGFnZSBwcm90ZWN0aW9uICovCi0jZGVmaW5lIEFDUElfSFBFVF9QQUdFX1BST1RFQ1RfNCAgICAoMTw8MSkJLyogMDE6IDRLQiBwYWdlIHByb3RlY3RlZCAqLwotI2RlZmluZSBBQ1BJX0hQRVRfUEFHRV9QUk9URUNUXzY0ICAgKDE8PDIpCS8qIDAyOiA2NEtCIHBhZ2UgcHJvdGVjdGVkICovCi0KLS8qISBbRW5kXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAhKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBJQkZUIC0gQm9vdCBGaXJtd2FyZSBUYWJsZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBhY3BpX3RhYmxlX2liZnQgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXU4IHJlc2VydmVkWzEyXTsKLX07Ci0KLS8qIElCRlQgY29tbW9uIHN1YnRhYmxlIGhlYWRlciAqLwotCi1zdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciB7Ci0JdTggdHlwZTsKLQl1OCB2ZXJzaW9uOwotCXUxNiBsZW5ndGg7Ci0JdTggaW5kZXg7Ci0JdTggZmxhZ3M7Ci19OwotCi0vKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KLQotZW51bSBhY3BpX2liZnRfdHlwZSB7Ci0JQUNQSV9JQkZUX1RZUEVfTk9UX1VTRUQgPSAwLAotCUFDUElfSUJGVF9UWVBFX0NPTlRST0wgPSAxLAotCUFDUElfSUJGVF9UWVBFX0lOSVRJQVRPUiA9IDIsCi0JQUNQSV9JQkZUX1RZUEVfTklDID0gMywKLQlBQ1BJX0lCRlRfVFlQRV9UQVJHRVQgPSA0LAotCUFDUElfSUJGVF9UWVBFX0VYVEVOU0lPTlMgPSA1LAotCUFDUElfSUJGVF9UWVBFX1JFU0VSVkVEID0gNgkvKiA2IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwotfTsKLQotLyogSUJGVCBzdWJ0YWJsZXMgKi8KLQotc3RydWN0IGFjcGlfaWJmdF9jb250cm9sIHsKLQlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IGV4dGVuc2lvbnM7Ci0JdTE2IGluaXRpYXRvcl9vZmZzZXQ7Ci0JdTE2IG5pYzBfb2Zmc2V0OwotCXUxNiB0YXJnZXQwX29mZnNldDsKLQl1MTYgbmljMV9vZmZzZXQ7Ci0JdTE2IHRhcmdldDFfb2Zmc2V0OwotfTsKLQotc3RydWN0IGFjcGlfaWJmdF9pbml0aWF0b3IgewotCXN0cnVjdCBhY3BpX2liZnRfaGVhZGVyIGhlYWRlcjsKLQl1OCBzbnNfc2VydmVyWzE2XTsKLQl1OCBzbHBfc2VydmVyWzE2XTsKLQl1OCBwcmltYXJ5X3NlcnZlclsxNl07Ci0JdTggc2Vjb25kYXJ5X3NlcnZlclsxNl07Ci0JdTE2IG5hbWVfbGVuZ3RoOwotCXUxNiBuYW1lX29mZnNldDsKLX07Ci0KLXN0cnVjdCBhY3BpX2liZnRfbmljIHsKLQlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7Ci0JdTggaXBfYWRkcmVzc1sxNl07Ci0JdTggc3VibmV0X21hc2tfcHJlZml4OwotCXU4IG9yaWdpbjsKLQl1OCBnYXRld2F5WzE2XTsKLQl1OCBwcmltYXJ5X2Ruc1sxNl07Ci0JdTggc2Vjb25kYXJ5X2Ruc1sxNl07Ci0JdTggZGhjcFsxNl07Ci0JdTE2IHZsYW47Ci0JdTggbWFjX2FkZHJlc3NbNl07Ci0JdTE2IHBjaV9hZGRyZXNzOwotCXUxNiBuYW1lX2xlbmd0aDsKLQl1MTYgbmFtZV9vZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgYWNwaV9pYmZ0X3RhcmdldCB7Ci0Jc3RydWN0IGFjcGlfaWJmdF9oZWFkZXIgaGVhZGVyOwotCXU4IHRhcmdldF9pcF9hZGRyZXNzWzE2XTsKLQl1MTYgdGFyZ2V0X2lwX3NvY2tldDsKLQl1OCB0YXJnZXRfYm9vdF9sdW5bOF07Ci0JdTggY2hhcF90eXBlOwotCXU4IG5pY19hc3NvY2lhdGlvbjsKLQl1MTYgdGFyZ2V0X25hbWVfbGVuZ3RoOwotCXUxNiB0YXJnZXRfbmFtZV9vZmZzZXQ7Ci0JdTE2IGNoYXBfbmFtZV9sZW5ndGg7Ci0JdTE2IGNoYXBfbmFtZV9vZmZzZXQ7Ci0JdTE2IGNoYXBfc2VjcmV0X2xlbmd0aDsKLQl1MTYgY2hhcF9zZWNyZXRfb2Zmc2V0OwotCXUxNiByZXZlcnNlX2NoYXBfbmFtZV9sZW5ndGg7Ci0JdTE2IHJldmVyc2VfY2hhcF9uYW1lX29mZnNldDsKLQl1MTYgcmV2ZXJzZV9jaGFwX3NlY3JldF9sZW5ndGg7Ci0JdTE2IHJldmVyc2VfY2hhcF9zZWNyZXRfb2Zmc2V0OworCXUzMiBlcnJvcl9kYXRhX2xlbmd0aDsKKwl1OCBmcnVfaWRbMTZdOworCXU4IGZydV90ZXh0WzIwXTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogTUFEVCAtIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC04ODcsMTYgKzYwOCwxNiBAQAogCXUzMiBmbGFnczsKIH07CiAKLS8qIEZsYWdzICovCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KIAotI2RlZmluZSBBQ1BJX01BRFRfUENBVF9DT01QQVQgICAgICAgKDEpCS8qIDAwOiAgICBTeXN0ZW0gYWxzbyBoYXMgZHVhbCA4MjU5cyAqLworI2RlZmluZSBBQ1BJX01BRFRfUENBVF9DT01QQVQgICAgICAgKDEpCS8qIDAwOiBTeXN0ZW0gYWxzbyBoYXMgZHVhbCA4MjU5cyAqLwogCiAvKiBWYWx1ZXMgZm9yIFBDQVRDb21wYXQgZmxhZyAqLwogCiAjZGVmaW5lIEFDUElfTUFEVF9EVUFMX1BJQyAgICAgICAgICAwCiAjZGVmaW5lIEFDUElfTUFEVF9NVUxUSVBMRV9BUElDICAgICAxCiAKLS8qIFZhbHVlcyBmb3Igc3VidGFibGUgdHlwZSBpbiBzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKi8KKy8qIFZhbHVlcyBmb3IgTUFEVCBzdWJ0YWJsZSB0eXBlIGluIHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqLwogCiBlbnVtIGFjcGlfbWFkdF90eXBlIHsKIAlBQ1BJX01BRFRfVFlQRV9MT0NBTF9BUElDID0gMCwKQEAgLTEwMDcsMTEgKzcyOCwxMSBAQAogCXUzMiBmbGFnczsJCS8qIEludGVycnVwdCBTb3VyY2UgRmxhZ3MgKi8KIH07CiAKLS8qIEZsYWdzIGZpZWxkIGFib3ZlICovCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KIAogI2RlZmluZSBBQ1BJX01BRFRfQ1BFSV9PVkVSUklERSAgICAgKDEpCiAKLS8qIDk6IFByb2Nlc3NvciBMb2NhbCBYMl9BUElDICgwNy8yMDA4KSAqLworLyogOTogUHJvY2Vzc29yIExvY2FsIFgyQVBJQyAoQUNQSSA0LjApICovCiAKIHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljIHsKIAlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgaGVhZGVyOwpAQCAtMTAyMSw3ICs3NDIsNyBAQAogCXUzMiB1aWQ7CQkvKiBBQ1BJIHByb2Nlc3NvciBVSUQgKi8KIH07CiAKLS8qIDEwOiBMb2NhbCBYMkFQSUMgTk1JICgwNy8yMDA4KSAqLworLyogMTA6IExvY2FsIFgyQVBJQyBOTUkgKEFDUEkgNC4wKSAqLwogCiBzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgewogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CkBAIC0xMDU4LDI4ICs3NzksMzQgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBNQ0ZHIC0gUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSBhbmQgc3ViLXRhYmxlCisgKiBNU0NUIC0gTWF4aW11bSBTeXN0ZW0gQ2hhcmFjdGVyaXN0aWNzIFRhYmxlIChBQ1BJIDQuMCkKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdHJ1Y3QgYWNwaV90YWJsZV9tY2ZnIHsKK3N0cnVjdCBhY3BpX3RhYmxlX21zY3QgewogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXU4IHJlc2VydmVkWzhdOworCXUzMiBwcm94aW1pdHlfb2Zmc2V0OwkvKiBMb2NhdGlvbiBvZiBwcm94aW1pdHkgaW5mbyBzdHJ1Y3QocykgKi8KKwl1MzIgbWF4X3Byb3hpbWl0eV9kb21haW5zOwkvKiBNYXggbnVtYmVyIG9mIHByb3hpbWl0eSBkb21haW5zICovCisJdTMyIG1heF9jbG9ja19kb21haW5zOwkvKiBNYXggbnVtYmVyIG9mIGNsb2NrIGRvbWFpbnMgKi8KKwl1NjQgbWF4X2FkZHJlc3M7CS8qIE1heCBwaHlzaWNhbCBhZGRyZXNzIGluIHN5c3RlbSAqLwogfTsKIAotLyogU3VidGFibGUgKi8KKy8qIFN1YnRhYmxlIC0gTWF4aW11bSBQcm94aW1pdHkgRG9tYWluIEluZm9ybWF0aW9uLiBWZXJzaW9uIDEgKi8KIAotc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uIHsKLQl1NjQgYWRkcmVzczsJCS8qIEJhc2UgYWRkcmVzcywgcHJvY2Vzc29yLXJlbGF0aXZlICovCi0JdTE2IHBjaV9zZWdtZW50OwkvKiBQQ0kgc2VnbWVudCBncm91cCBudW1iZXIgKi8KLQl1OCBzdGFydF9idXNfbnVtYmVyOwkvKiBTdGFydGluZyBQQ0kgQnVzIG51bWJlciAqLwotCXU4IGVuZF9idXNfbnVtYmVyOwkvKiBGaW5hbCBQQ0kgQnVzIG51bWJlciAqLwotCXUzMiByZXNlcnZlZDsKK3N0cnVjdCBhY3BpX21zY3RfcHJveGltaXR5IHsKKwl1OCByZXZpc2lvbjsKKwl1OCBsZW5ndGg7CisJdTMyIHJhbmdlX3N0YXJ0OwkvKiBTdGFydCBvZiBkb21haW4gcmFuZ2UgKi8KKwl1MzIgcmFuZ2VfZW5kOwkJLyogRW5kIG9mIGRvbWFpbiByYW5nZSAqLworCXUzMiBwcm9jZXNzb3JfY2FwYWNpdHk7CisJdTY0IG1lbW9yeV9jYXBhY2l0eTsJLyogSW4gYnl0ZXMgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0JTVCAtIFNtYXJ0IEJhdHRlcnkgU3BlY2lmaWNhdGlvbiBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEwOTMsNiArODIwLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0xJVCAtIFN5c3RlbSBMb2NhbGl0eSBEaXN0YW5jZSBJbmZvcm1hdGlvbiBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTExMDQsNjAgKzgzMiw4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogU1BDUiAtIFNlcmlhbCBQb3J0IENvbnNvbGUgUmVkaXJlY3Rpb24gdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9zcGNyIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1OCBpbnRlcmZhY2VfdHlwZTsJLyogMD1mdWxsIDE2NTUwLCAxPXN1YnNldCBvZiAxNjU1MCAqLwotCXU4IHJlc2VydmVkWzNdOwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBzZXJpYWxfcG9ydDsKLQl1OCBpbnRlcnJ1cHRfdHlwZTsKLQl1OCBwY19pbnRlcnJ1cHQ7Ci0JdTMyIGludGVycnVwdDsKLQl1OCBiYXVkX3JhdGU7Ci0JdTggcGFyaXR5OwotCXU4IHN0b3BfYml0czsKLQl1OCBmbG93X2NvbnRyb2w7Ci0JdTggdGVybWluYWxfdHlwZTsKLQl1OCByZXNlcnZlZDE7Ci0JdTE2IHBjaV9kZXZpY2VfaWQ7Ci0JdTE2IHBjaV92ZW5kb3JfaWQ7Ci0JdTggcGNpX2J1czsKLQl1OCBwY2lfZGV2aWNlOwotCXU4IHBjaV9mdW5jdGlvbjsKLQl1MzIgcGNpX2ZsYWdzOwotCXU4IHBjaV9zZWdtZW50OwotCXUzMiByZXNlcnZlZDI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFNQTUkgLSBTZXJ2ZXIgUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcmZhY2UgdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9zcG1pIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1OCByZXNlcnZlZDsKLQl1OCBpbnRlcmZhY2VfdHlwZTsKLQl1MTYgc3BlY19yZXZpc2lvbjsJLyogVmVyc2lvbiBvZiBJUE1JICovCi0JdTggaW50ZXJydXB0X3R5cGU7Ci0JdTggZ3BlX251bWJlcjsJCS8qIEdQRSBhc3NpZ25lZCAqLwotCXU4IHJlc2VydmVkMTsKLQl1OCBwY2lfZGV2aWNlX2ZsYWc7Ci0JdTMyIGludGVycnVwdDsKLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgaXBtaV9yZWdpc3RlcjsKLQl1OCBwY2lfc2VnbWVudDsKLQl1OCBwY2lfYnVzOwotCXU4IHBjaV9kZXZpY2U7Ci0JdTggcGNpX2Z1bmN0aW9uOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBTUkFUIC0gU3lzdGVtIFJlc291cmNlIEFmZmluaXR5IFRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTE5Miw2ICs4NjgsMTAgQEAKIAl1MzIgcmVzZXJ2ZWQ7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCiB9OwogCisvKiBGbGFncyAqLworCisjZGVmaW5lIEFDUElfU1JBVF9DUFVfVVNFX0FGRklOSVRZICAoMSkJLyogMDA6IFVzZSBhZmZpbml0eSBzdHJ1Y3R1cmUgKi8KKwogLyogMTogTWVtb3J5IEFmZmluaXR5ICovCiAKIHN0cnVjdCBhY3BpX3NyYXRfbWVtX2FmZmluaXR5IHsKQEAgLTEyMTEsNyArODkxLDcgQEAKICNkZWZpbmUgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFICgxPDwxKQkvKiAwMTogTWVtb3J5IHJlZ2lvbiBpcyBob3QgcGx1Z2dhYmxlICovCiAjZGVmaW5lIEFDUElfU1JBVF9NRU1fTk9OX1ZPTEFUSUxFICAoMTw8MikJLyogMDI6IE1lbW9yeSByZWdpb24gaXMgbm9uLXZvbGF0aWxlICovCiAKLS8qIDI6IFByb2Nlc3NvciBMb2NhbCBYMl9BUElDIEFmZmluaXR5ICgwNy8yMDA4KSAqLworLyogMjogUHJvY2Vzc29yIExvY2FsIFgyX0FQSUMgQWZmaW5pdHkgKEFDUEkgNC4wKSAqLwogCiBzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgewogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CkBAIC0xMjE5LDEyMiArODk5LDE0IEBACiAJdTMyIHByb3hpbWl0eV9kb21haW47CiAJdTMyIGFwaWNfaWQ7CiAJdTMyIGZsYWdzOworCXUzMiBjbG9ja19kb21haW47CisJdTMyIHJlc2VydmVkMjsKIH07CiAKIC8qIEZsYWdzIGZvciBzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSBhbmQgc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICovCiAKICNkZWZpbmUgQUNQSV9TUkFUX0NQVV9FTkFCTEVEICAgICAgICgxKQkvKiAwMDogVXNlIGFmZmluaXR5IHN0cnVjdHVyZSAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRDUEEgLSBUcnVzdGVkIENvbXB1dGluZyBQbGF0Zm9ybSBBbGxpYW5jZSB0YWJsZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBhY3BpX3RhYmxlX3RjcGEgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXUxNiByZXNlcnZlZDsKLQl1MzIgbWF4X2xvZ19sZW5ndGg7CS8qIE1heGltdW0gbGVuZ3RoIGZvciB0aGUgZXZlbnQgbG9nIGFyZWEgKi8KLQl1NjQgbG9nX2FkZHJlc3M7CS8qIEFkZHJlc3Mgb2YgdGhlIGV2ZW50IGxvZyBhcmVhICovCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFVFRkkgLSBVRUZJIEJvb3Qgb3B0aW1pemF0aW9uIFRhYmxlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGFjcGlfdGFibGVfdWVmaSB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTggaWRlbnRpZmllclsxNl07CS8qIFVVSUQgaWRlbnRpZmllciAqLwotCXUxNiBkYXRhX29mZnNldDsJLyogT2Zmc2V0IG9mIHJlbWFpbmluZyBkYXRhIGluIHRhYmxlICovCi0JdTggZGF0YTsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogV0RBVCAtIFdhdGNoZG9nIEFjdGlvbiBUYWJsZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBhY3BpX3RhYmxlX3dkYXQgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXUzMiBoZWFkZXJfbGVuZ3RoOwkvKiBXYXRjaGRvZyBIZWFkZXIgTGVuZ3RoICovCi0JdTE2IHBjaV9zZWdtZW50OwkvKiBQQ0kgU2VnbWVudCBudW1iZXIgKi8KLQl1OCBwY2lfYnVzOwkJLyogUENJIEJ1cyBudW1iZXIgKi8KLQl1OCBwY2lfZGV2aWNlOwkJLyogUENJIERldmljZSBudW1iZXIgKi8KLQl1OCBwY2lfZnVuY3Rpb247CS8qIFBDSSBGdW5jdGlvbiBudW1iZXIgKi8KLQl1OCByZXNlcnZlZFszXTsKLQl1MzIgdGltZXJfcGVyaW9kOwkvKiBQZXJpb2Qgb2Ygb25lIHRpbWVyIGNvdW50IChtc2VjKSAqLwotCXUzMiBtYXhfY291bnQ7CQkvKiBNYXhpbXVtIGNvdW50ZXIgdmFsdWUgc3VwcG9ydGVkICovCi0JdTMyIG1pbl9jb3VudDsJCS8qIE1pbmltdW0gY291bnRlciB2YWx1ZSAqLwotCXU4IGZsYWdzOwotCXU4IHJlc2VydmVkMlszXTsKLQl1MzIgZW50cmllczsJCS8qIE51bWJlciBvZiB3YXRjaGRvZyBlbnRyaWVzIHRoYXQgZm9sbG93ICovCi19OwotCi0vKiBXREFUIEluc3RydWN0aW9uIEVudHJpZXMgKGFjdGlvbnMpICovCi0KLXN0cnVjdCBhY3BpX3dkYXRfZW50cnkgewotCXN0cnVjdCBhY3BpX3doZWFfaGVhZGVyIHdoZWFfaGVhZGVyOwkvKiBDb21tb24gaGVhZGVyIGZvciBXSEVBIHRhYmxlcyAqLwotfTsKLQotLyogVmFsdWVzIGZvciBBY3Rpb24gZmllbGQgYWJvdmUgKi8KLQotZW51bSBhY3BpX3dkYXRfYWN0aW9ucyB7Ci0JQUNQSV9XREFUX1JFU0VUID0gMSwKLQlBQ1BJX1dEQVRfR0VUX0NVUlJFTlRfQ09VTlRET1dOID0gNCwKLQlBQ1BJX1dEQVRfR0VUX0NPVU5URE9XTiA9IDUsCi0JQUNQSV9XREFUX1NFVF9DT1VOVERPV04gPSA2LAotCUFDUElfV0RBVF9HRVRfUlVOTklOR19TVEFURSA9IDgsCi0JQUNQSV9XREFUX1NFVF9SVU5OSU5HX1NUQVRFID0gOSwKLQlBQ1BJX1dEQVRfR0VUX1NUT1BQRURfU1RBVEUgPSAxMCwKLQlBQ1BJX1dEQVRfU0VUX1NUT1BQRURfU1RBVEUgPSAxMSwKLQlBQ1BJX1dEQVRfR0VUX1JFQk9PVCA9IDE2LAotCUFDUElfV0RBVF9TRVRfUkVCT09UID0gMTcsCi0JQUNQSV9XREFUX0dFVF9TSFVURE9XTiA9IDE4LAotCUFDUElfV0RBVF9TRVRfU0hVVERPV04gPSAxOSwKLQlBQ1BJX1dEQVRfR0VUX1NUQVRVUyA9IDMyLAotCUFDUElfV0RBVF9TRVRfU1RBVFVTID0gMzMsCi0JQUNQSV9XREFUX0FDVElPTl9SRVNFUlZFRCA9IDM0CS8qIDM0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwotfTsKLQotLyogVmFsdWVzIGZvciBJbnN0cnVjdGlvbiBmaWVsZCBhYm92ZSAqLwotCi1lbnVtIGFjcGlfd2RhdF9pbnN0cnVjdGlvbnMgewotCUFDUElfV0RBVF9SRUFEX1ZBTFVFID0gMCwKLQlBQ1BJX1dEQVRfUkVBRF9DT1VOVERPV04gPSAxLAotCUFDUElfV0RBVF9XUklURV9WQUxVRSA9IDIsCi0JQUNQSV9XREFUX1dSSVRFX0NPVU5URE9XTiA9IDMsCi0JQUNQSV9XREFUX0lOU1RSVUNUSU9OX1JFU0VSVkVEID0gNCwJLyogNCBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KLQlBQ1BJX1dEQVRfUFJFU0VSVkVfUkVHSVNURVIgPSAweDgwCS8qIEV4Y2VwdCBmb3IgdGhpcyB2YWx1ZSAqLwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBXRFJUIC0gV2F0Y2hkb2cgUmVzb3VyY2UgVGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV93ZHJ0IHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1MzIgaGVhZGVyX2xlbmd0aDsJLyogV2F0Y2hkb2cgSGVhZGVyIExlbmd0aCAqLwotCXU4IHBjaV9zZWdtZW50OwkJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCi0JdTggcGNpX2J1czsJCS8qIFBDSSBCdXMgbnVtYmVyICovCi0JdTggcGNpX2RldmljZTsJCS8qIFBDSSBEZXZpY2UgbnVtYmVyICovCi0JdTggcGNpX2Z1bmN0aW9uOwkvKiBQQ0kgRnVuY3Rpb24gbnVtYmVyICovCi0JdTMyIHRpbWVyX3BlcmlvZDsJLyogUGVyaW9kIG9mIG9uZSB0aW1lciBjb3VudCAobXNlYykgKi8KLQl1MzIgbWF4X2NvdW50OwkJLyogTWF4aW11bSBjb3VudGVyIHZhbHVlIHN1cHBvcnRlZCAqLwotCXUzMiBtaW5fY291bnQ7CQkvKiBNaW5pbXVtIGNvdW50ZXIgdmFsdWUgKi8KLQl1OCBmbGFnczsKLQl1OCByZXNlcnZlZFszXTsKLQl1MzIgZW50cmllczsJCS8qIE51bWJlciBvZiB3YXRjaGRvZyBlbnRyaWVzIHRoYXQgZm9sbG93ICovCi19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfV0RSVF9USU1FUl9FTkFCTEVEICAgICAoMSkJLyogMDA6IFRpbWVyIGVuYWJsZWQgKi8KLQogLyogUmVzZXQgdG8gZGVmYXVsdCBwYWNraW5nICovCiAKICNwcmFnbWEgcGFjaygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZGNlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaApAQCAtMCwwICsxLDg2OCBAQAorI2lmbmRlZiBfX0FDVEJMMl9IX18KKyNkZWZpbmUgX19BQ1RCTDJfSF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQWRkaXRpb25hbCBBQ1BJIFRhYmxlcyAoMikKKyAqCisgKiBUaGVzZSB0YWJsZXMgYXJlIG5vdCBjb25zdW1lZCBkaXJlY3RseSBieSB0aGUgQUNQSUNBIHN1YnN5c3RlbSwgYnV0IGFyZQorICogaW5jbHVkZWQgaGVyZSB0byBzdXBwb3J0IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgQU1MIGRpc2Fzc2VtYmxlci4KKyAqCisgKiBUaGUgdGFibGVzIGluIHRoaXMgZmlsZSBhcmUgZGVmaW5lZCBieSB0aGlyZC1wYXJ0eSBzcGVjaWZpY2F0aW9ucywgYW5kIGFyZQorICogbm90IGRlZmluZWQgZGlyZWN0bHkgYnkgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiBpdHNlbGYuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMgZm9yIHRhYmxlcyBkZWZpbmVkIGluIHRoaXMKKyAqIGZpbGUuIFVzZWZ1bCBiZWNhdXNlIHRoZXkgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBpbmFkdmVydGVudGx5IHR5cGUgaW4KKyAqIHRoZSB3cm9uZyBzaWduYXR1cmUuCisgKi8KKyNkZWZpbmUgQUNQSV9TSUdfQVNGICAgICAgICAgICAgIkFTRiEiCS8qIEFsZXJ0IFN0YW5kYXJkIEZvcm1hdCB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19CT09UICAgICAgICAgICAiQk9PVCIJLyogU2ltcGxlIEJvb3QgRmxhZyBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19EQkdQICAgICAgICAgICAiREJHUCIJLyogRGVidWcgUG9ydCB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19ETUFSICAgICAgICAgICAiRE1BUiIJLyogRE1BIFJlbWFwcGluZyB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19IUEVUICAgICAgICAgICAiSFBFVCIJLyogSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfSUJGVCAgICAgICAgICAgIklCRlQiCS8qIGlfc0NTSSBCb290IEZpcm13YXJlIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0lWUlMgICAgICAgICAgICJJVlJTIgkvKiBJL08gVmlydHVhbGl6YXRpb24gUmVwb3J0aW5nIFN0cnVjdHVyZSAqLworI2RlZmluZSBBQ1BJX1NJR19NQ0ZHICAgICAgICAgICAiTUNGRyIJLyogUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19TTElDICAgICAgICAgICAiU0xJQyIJLyogU29mdHdhcmUgTGljZW5zaW5nIERlc2NyaXB0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1NQQ1IgICAgICAgICAgICJTUENSIgkvKiBTZXJpYWwgUG9ydCBDb25zb2xlIFJlZGlyZWN0aW9uIHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1NQTUkgICAgICAgICAgICJTUE1JIgkvKiBTZXJ2ZXIgUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcmZhY2UgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfVENQQSAgICAgICAgICAgIlRDUEEiCS8qIFRydXN0ZWQgQ29tcHV0aW5nIFBsYXRmb3JtIEFsbGlhbmNlIHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1VFRkkgICAgICAgICAgICJVRUZJIgkvKiBVZWZpIEJvb3QgT3B0aW1pemF0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1dBRVQgICAgICAgICAgICJXQUVUIgkvKiBXaW5kb3dzIEFDUEkgRW11bGF0ZWQgZGV2aWNlcyBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19XREFUICAgICAgICAgICAiV0RBVCIJLyogV2F0Y2hkb2cgQWN0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1dEUlQgICAgICAgICAgICJXRFJUIgkvKiBXYXRjaGRvZyBSZXNvdXJjZSBUYWJsZSAqLworCisvKgorICogQWxsIHRhYmxlcyBtdXN0IGJlIGJ5dGUtcGFja2VkIHRvIG1hdGNoIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24sIHNpbmNlCisgKiB0aGUgdGFibGVzIGFyZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtIEJJT1MuCisgKi8KKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogTm90ZSBhYm91dCBiaXRmaWVsZHM6IFRoZSB1OCB0eXBlIGlzIHVzZWQgZm9yIGJpdGZpZWxkcyBpbiBBQ1BJIHRhYmxlcy4KKyAqIFRoaXMgaXMgdGhlIG9ubHkgdHlwZSB0aGF0IGlzIGV2ZW4gcmVtb3RlbHkgcG9ydGFibGUuIEFueXRoaW5nIGVsc2UgaXMgbm90CisgKiBwb3J0YWJsZSwgc28gZG8gbm90IHVzZSBhbnkgb3RoZXIgYml0ZmllbGQgdHlwZXMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBBU0YgLSBBbGVydCBTdGFuZGFyZCBGb3JtYXQgdGFibGUgKFNpZ25hdHVyZSAiQVNGISIpCisgKiAgICAgICBSZXZpc2lvbiAweDEwCisgKgorICogQ29uZm9ybXMgdG8gdGhlIEFsZXJ0IFN0YW5kYXJkIEZvcm1hdCBTcGVjaWZpY2F0aW9uIFYyLjAsIDIzIEFwcmlsIDIwMDMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9hc2YgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworfTsKKworLyogQVNGIHN1YnRhYmxlIGhlYWRlciAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIHsKKwl1OCB0eXBlOworCXU4IHJlc2VydmVkOworCXUxNiBsZW5ndGg7Cit9OworCisvKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KKworZW51bSBhY3BpX2FzZl90eXBlIHsKKwlBQ1BJX0FTRl9UWVBFX0lORk8gPSAwLAorCUFDUElfQVNGX1RZUEVfQUxFUlQgPSAxLAorCUFDUElfQVNGX1RZUEVfQ09OVFJPTCA9IDIsCisJQUNQSV9BU0ZfVFlQRV9CT09UID0gMywKKwlBQ1BJX0FTRl9UWVBFX0FERFJFU1MgPSA0LAorCUFDUElfQVNGX1RZUEVfUkVTRVJWRUQgPSA1Cit9OworCisvKgorICogQVNGIHN1YnRhYmxlcworICovCisKKy8qIDA6IEFTRiBJbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfaW5mbyB7CisJc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7CisJdTggbWluX3Jlc2V0X3ZhbHVlOworCXU4IG1pbl9wb2xsX2ludGVydmFsOworCXUxNiBzeXN0ZW1faWQ7CisJdTMyIG1mZ19pZDsKKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZDJbM107Cit9OworCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0FTRl9TTUJVU19QUk9UT0NPTFMgICAgKDEpCisKKy8qIDE6IEFTRiBBbGVydHMgKi8KKworc3RydWN0IGFjcGlfYXNmX2FsZXJ0IHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBhc3NlcnRfbWFzazsKKwl1OCBkZWFzc2VydF9tYXNrOworCXU4IGFsZXJ0czsKKwl1OCBkYXRhX2xlbmd0aDsKK307CisKK3N0cnVjdCBhY3BpX2FzZl9hbGVydF9kYXRhIHsKKwl1OCBhZGRyZXNzOworCXU4IGNvbW1hbmQ7CisJdTggbWFzazsKKwl1OCB2YWx1ZTsKKwl1OCBzZW5zb3JfdHlwZTsKKwl1OCB0eXBlOworCXU4IG9mZnNldDsKKwl1OCBzb3VyY2VfdHlwZTsKKwl1OCBzZXZlcml0eTsKKwl1OCBzZW5zb3JfbnVtYmVyOworCXU4IGVudGl0eTsKKwl1OCBpbnN0YW5jZTsKK307CisKKy8qIDI6IEFTRiBSZW1vdGUgQ29udHJvbCAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfcmVtb3RlIHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBjb250cm9sczsKKwl1OCBkYXRhX2xlbmd0aDsKKwl1MTYgcmVzZXJ2ZWQyOworfTsKKworc3RydWN0IGFjcGlfYXNmX2NvbnRyb2xfZGF0YSB7CisJdTggZnVuY3Rpb247CisJdTggYWRkcmVzczsKKwl1OCBjb21tYW5kOworCXU4IHZhbHVlOworfTsKKworLyogMzogQVNGIFJNQ1AgQm9vdCBPcHRpb25zICovCisKK3N0cnVjdCBhY3BpX2FzZl9ybWNwIHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBjYXBhYmlsaXRpZXNbN107CisJdTggY29tcGxldGlvbl9jb2RlOworCXUzMiBlbnRlcnByaXNlX2lkOworCXU4IGNvbW1hbmQ7CisJdTE2IHBhcmFtZXRlcjsKKwl1MTYgYm9vdF9vcHRpb25zOworCXUxNiBvZW1fcGFyYW1ldGVyczsKK307CisKKy8qIDQ6IEFTRiBBZGRyZXNzICovCisKK3N0cnVjdCBhY3BpX2FzZl9hZGRyZXNzIHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBlcHJvbV9hZGRyZXNzOworCXU4IGRldmljZXM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEJPT1QgLSBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gdGhlICJTaW1wbGUgQm9vdCBGbGFnIFNwZWNpZmljYXRpb24iLCBWZXJzaW9uIDIuMQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2Jvb3QgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXU4IGNtb3NfaW5kZXg7CQkvKiBJbmRleCBpbiBDTU9TIFJBTSBmb3IgdGhlIGJvb3QgcmVnaXN0ZXIgKi8KKwl1OCByZXNlcnZlZFszXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREJHUCAtIERlYnVnIFBvcnQgdGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byB0aGUgIkRlYnVnIFBvcnQgU3BlY2lmaWNhdGlvbiIsIFZlcnNpb24gMS4wMCwgMi85LzIwMDAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9kYmdwIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1OCB0eXBlOwkJLyogMD1mdWxsIDE2NTUwLCAxPXN1YnNldCBvZiAxNjU1MCAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBkZWJ1Z19wb3J0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBETUFSIC0gRE1BIFJlbWFwcGluZyB0YWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJJbnRlbCBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2d5IGZvciBEaXJlY3RlZCBJL08iLAorICogVmVyc2lvbiAxLjIsIFNlcHQuIDIwMDgKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1OCB3aWR0aDsJCS8qIEhvc3QgQWRkcmVzcyBXaWR0aCAqLworCXU4IGZsYWdzOworCXU4IHJlc2VydmVkWzEwXTsKK307CisKKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfRE1BUl9JTlRSX1JFTUFQICAgICAgICAoMSkKKworLyogRE1BUiBzdWJ0YWJsZSBoZWFkZXIgKi8KKworc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgeworCXUxNiB0eXBlOworCXUxNiBsZW5ndGg7Cit9OworCisvKiBWYWx1ZXMgZm9yIHN1YnRhYmxlIHR5cGUgaW4gc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKi8KKworZW51bSBhY3BpX2RtYXJfdHlwZSB7CisJQUNQSV9ETUFSX1RZUEVfSEFSRFdBUkVfVU5JVCA9IDAsCisJQUNQSV9ETUFSX1RZUEVfUkVTRVJWRURfTUVNT1JZID0gMSwKKwlBQ1BJX0RNQVJfVFlQRV9BVFNSID0gMiwKKwlBQ1BJX0RNQVJfSEFSRFdBUkVfQUZGSU5JVFkgPSAzLAorCUFDUElfRE1BUl9UWVBFX1JFU0VSVkVEID0gNAkvKiA0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworLyogRE1BUiBEZXZpY2UgU2NvcGUgc3RydWN0dXJlICovCisKK3N0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlIHsKKwl1OCBlbnRyeV90eXBlOworCXU4IGxlbmd0aDsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTggZW51bWVyYXRpb25faWQ7CisJdTggYnVzOworfTsKKworLyogVmFsdWVzIGZvciBlbnRyeV90eXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlICovCisKK2VudW0gYWNwaV9kbWFyX3Njb3BlX3R5cGUgeworCUFDUElfRE1BUl9TQ09QRV9UWVBFX05PVF9VU0VEID0gMCwKKwlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9FTkRQT0lOVCA9IDEsCisJQUNQSV9ETUFSX1NDT1BFX1RZUEVfQlJJREdFID0gMiwKKwlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9JT0FQSUMgPSAzLAorCUFDUElfRE1BUl9TQ09QRV9UWVBFX0hQRVQgPSA0LAorCUFDUElfRE1BUl9TQ09QRV9UWVBFX1JFU0VSVkVEID0gNQkvKiA1IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworc3RydWN0IGFjcGlfZG1hcl9wY2lfcGF0aCB7CisJdTggZGV2OworCXU4IGZuOworfTsKKworLyoKKyAqIERNQVIgU3ViLXRhYmxlcywgY29ycmVzcG9uZCB0byBUeXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyCisgKi8KKworLyogMDogSGFyZHdhcmUgVW5pdCBEZWZpbml0aW9uICovCisKK3N0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCB7CisJc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOworCXU4IGZsYWdzOworCXU4IHJlc2VydmVkOworCXUxNiBzZWdtZW50OworCXU2NCBhZGRyZXNzOwkJLyogUmVnaXN0ZXIgQmFzZSBBZGRyZXNzICovCit9OworCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0RNQVJfSU5DTFVERV9BTEwgICAgICAgKDEpCisKKy8qIDE6IFJlc2VydmVkIE1lbW9yeSBEZWZpbmluaXRpb24gKi8KKworc3RydWN0IGFjcGlfZG1hcl9yZXNlcnZlZF9tZW1vcnkgeworCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyIGhlYWRlcjsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTE2IHNlZ21lbnQ7CisJdTY0IGJhc2VfYWRkcmVzczsJLyogNF9rIGFsaWduZWQgYmFzZSBhZGRyZXNzICovCisJdTY0IGVuZF9hZGRyZXNzOwkvKiA0X2sgYWxpZ25lZCBsaW1pdCBhZGRyZXNzICovCit9OworCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0RNQVJfQUxMT1dfQUxMICAgICAgICAgKDEpCisKKy8qIDI6IFJvb3QgUG9ydCBBVFMgQ2FwYWJpbGl0eSBSZXBvcnRpbmcgU3RydWN0dXJlICovCisKK3N0cnVjdCBhY3BpX2RtYXJfYXRzciB7CisJc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOworCXU4IGZsYWdzOworCXU4IHJlc2VydmVkOworCXUxNiBzZWdtZW50OworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9ETUFSX0FMTF9QT1JUUyAgICAgICAgICgxKQorCisvKiAzOiBSZW1hcHBpbmcgSGFyZHdhcmUgU3RhdGljIEFmZmluaXR5IFN0cnVjdHVyZSAqLworCitzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EgeworCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyIGhlYWRlcjsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTY0IGJhc2VfYWRkcmVzczsKKwl1MzIgcHJveGltaXR5X2RvbWFpbjsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSFBFVCAtIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIHRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gIklBLVBDIEhQRVQgKEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVycykgU3BlY2lmaWNhdGlvbiIsCisgKiBWZXJzaW9uIDEuMGEsIE9jdG9iZXIgMjAwNAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2hwZXQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXUzMiBpZDsJCQkvKiBIYXJkd2FyZSBJRCBvZiBldmVudCB0aW1lciBibG9jayAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBhZGRyZXNzOwkvKiBBZGRyZXNzIG9mIGV2ZW50IHRpbWVyIGJsb2NrICovCisJdTggc2VxdWVuY2U7CQkvKiBIUEVUIHNlcXVlbmNlIG51bWJlciAqLworCXUxNiBtaW5pbXVtX3RpY2s7CS8qIE1haW4gY291bnRlciBtaW4gdGljaywgcGVyaW9kaWMgbW9kZSAqLworCXU4IGZsYWdzOworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9IUEVUX1BBR0VfUFJPVEVDVF9NQVNLICgzKQorCisvKiBWYWx1ZXMgZm9yIFBhZ2UgUHJvdGVjdCBmbGFncyAqLworCitlbnVtIGFjcGlfaHBldF9wYWdlX3Byb3RlY3QgeworCUFDUElfSFBFVF9OT19QQUdFX1BST1RFQ1QgPSAwLAorCUFDUElfSFBFVF9QQUdFX1BST1RFQ1Q0ID0gMSwKKwlBQ1BJX0hQRVRfUEFHRV9QUk9URUNUNjQgPSAyCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElCRlQgLSBCb290IEZpcm13YXJlIFRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gImlTQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgKGlCRlQpIGFzIERlZmluZWQgaW4gQUNQSSAzLjBiCisgKiBTcGVjaWZpY2F0aW9uIiwgVmVyc2lvbiAxLjAxLCBNYXJjaCAxLCAyMDA3CisgKgorICogTm90ZTogSXQgYXBwZWFycyB0aGF0IHRoaXMgdGFibGUgaXMgbm90IGludGVuZGVkIHRvIGFwcGVhciBpbiB0aGUgUlNEVC9YU0RULgorICogVGhlcmVmb3JlLCBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgZGlzYXNzZW1ibGVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2liZnQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXU4IHJlc2VydmVkWzEyXTsKK307CisKKy8qIElCRlQgY29tbW9uIHN1YnRhYmxlIGhlYWRlciAqLworCitzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciB7CisJdTggdHlwZTsKKwl1OCB2ZXJzaW9uOworCXUxNiBsZW5ndGg7CisJdTggaW5kZXg7CisJdTggZmxhZ3M7Cit9OworCisvKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KKworZW51bSBhY3BpX2liZnRfdHlwZSB7CisJQUNQSV9JQkZUX1RZUEVfTk9UX1VTRUQgPSAwLAorCUFDUElfSUJGVF9UWVBFX0NPTlRST0wgPSAxLAorCUFDUElfSUJGVF9UWVBFX0lOSVRJQVRPUiA9IDIsCisJQUNQSV9JQkZUX1RZUEVfTklDID0gMywKKwlBQ1BJX0lCRlRfVFlQRV9UQVJHRVQgPSA0LAorCUFDUElfSUJGVF9UWVBFX0VYVEVOU0lPTlMgPSA1LAorCUFDUElfSUJGVF9UWVBFX1JFU0VSVkVEID0gNgkvKiA2IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworLyogSUJGVCBzdWJ0YWJsZXMgKi8KKworc3RydWN0IGFjcGlfaWJmdF9jb250cm9sIHsKKwlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7CisJdTE2IGV4dGVuc2lvbnM7CisJdTE2IGluaXRpYXRvcl9vZmZzZXQ7CisJdTE2IG5pYzBfb2Zmc2V0OworCXUxNiB0YXJnZXQwX29mZnNldDsKKwl1MTYgbmljMV9vZmZzZXQ7CisJdTE2IHRhcmdldDFfb2Zmc2V0OworfTsKKworc3RydWN0IGFjcGlfaWJmdF9pbml0aWF0b3IgeworCXN0cnVjdCBhY3BpX2liZnRfaGVhZGVyIGhlYWRlcjsKKwl1OCBzbnNfc2VydmVyWzE2XTsKKwl1OCBzbHBfc2VydmVyWzE2XTsKKwl1OCBwcmltYXJ5X3NlcnZlclsxNl07CisJdTggc2Vjb25kYXJ5X3NlcnZlclsxNl07CisJdTE2IG5hbWVfbGVuZ3RoOworCXUxNiBuYW1lX29mZnNldDsKK307CisKK3N0cnVjdCBhY3BpX2liZnRfbmljIHsKKwlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7CisJdTggaXBfYWRkcmVzc1sxNl07CisJdTggc3VibmV0X21hc2tfcHJlZml4OworCXU4IG9yaWdpbjsKKwl1OCBnYXRld2F5WzE2XTsKKwl1OCBwcmltYXJ5X2Ruc1sxNl07CisJdTggc2Vjb25kYXJ5X2Ruc1sxNl07CisJdTggZGhjcFsxNl07CisJdTE2IHZsYW47CisJdTggbWFjX2FkZHJlc3NbNl07CisJdTE2IHBjaV9hZGRyZXNzOworCXUxNiBuYW1lX2xlbmd0aDsKKwl1MTYgbmFtZV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgYWNwaV9pYmZ0X3RhcmdldCB7CisJc3RydWN0IGFjcGlfaWJmdF9oZWFkZXIgaGVhZGVyOworCXU4IHRhcmdldF9pcF9hZGRyZXNzWzE2XTsKKwl1MTYgdGFyZ2V0X2lwX3NvY2tldDsKKwl1OCB0YXJnZXRfYm9vdF9sdW5bOF07CisJdTggY2hhcF90eXBlOworCXU4IG5pY19hc3NvY2lhdGlvbjsKKwl1MTYgdGFyZ2V0X25hbWVfbGVuZ3RoOworCXUxNiB0YXJnZXRfbmFtZV9vZmZzZXQ7CisJdTE2IGNoYXBfbmFtZV9sZW5ndGg7CisJdTE2IGNoYXBfbmFtZV9vZmZzZXQ7CisJdTE2IGNoYXBfc2VjcmV0X2xlbmd0aDsKKwl1MTYgY2hhcF9zZWNyZXRfb2Zmc2V0OworCXUxNiByZXZlcnNlX2NoYXBfbmFtZV9sZW5ndGg7CisJdTE2IHJldmVyc2VfY2hhcF9uYW1lX29mZnNldDsKKwl1MTYgcmV2ZXJzZV9jaGFwX3NlY3JldF9sZW5ndGg7CisJdTE2IHJldmVyc2VfY2hhcF9zZWNyZXRfb2Zmc2V0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJVlJTIC0gSS9PIFZpcnR1YWxpemF0aW9uIFJlcG9ydGluZyBTdHJ1Y3R1cmUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byAiQU1EIEkvTyBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2d5IChJT01NVSkgU3BlY2lmaWNhdGlvbiIsCisgKiBSZXZpc2lvbiAxLjI2LCBGZWJydWFyeSAyMDA5LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2l2cnMgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXUzMiBpbmZvOwkJLyogQ29tbW9uIHZpcnR1YWxpemF0aW9uIGluZm8gKi8KKwl1NjQgcmVzZXJ2ZWQ7Cit9OworCisvKiBWYWx1ZXMgZm9yIEluZm8gZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0lWUlNfUEhZU0lDQUxfU0laRSAgICAgMHgwMDAwN0YwMAkvKiA3IGJpdHMsIHBoeXNpY2FsIGFkZHJlc3Mgc2l6ZSAqLworI2RlZmluZSBBQ1BJX0lWUlNfVklSVFVBTF9TSVpFICAgICAgMHgwMDNGODAwMAkvKiA3IGJpdHMsIHZpcnR1YWwgYWRkcmVzcyBzaXplICovCisjZGVmaW5lIEFDUElfSVZSU19BVFNfUkVTRVJWRUQgICAgICAweDAwNDAwMDAwCS8qIEFUUyBhZGRyZXNzIHRyYW5zbGF0aW9uIHJhbmdlIHJlc2VydmVkICovCisKKy8qIElWUlMgc3VidGFibGUgaGVhZGVyICovCisKK3N0cnVjdCBhY3BpX2l2cnNfaGVhZGVyIHsKKwl1OCB0eXBlOwkJLyogU3VidGFibGUgdHlwZSAqLworCXU4IGZsYWdzOworCXUxNiBsZW5ndGg7CQkvKiBTdWJ0YWJsZSBsZW5ndGggKi8KKwl1MTYgZGV2aWNlX2lkOwkJLyogSUQgb2YgSU9NTVUgKi8KK307CisKKy8qIFZhbHVlcyBmb3Igc3VidGFibGUgVHlwZSBhYm92ZSAqLworCitlbnVtIGFjcGlfaXZyc190eXBlIHsKKwlBQ1BJX0lWUlNfVFlQRV9IQVJEV0FSRSA9IDB4MTAsCisJQUNQSV9JVlJTX1RZUEVfTUVNT1JZMSA9IDB4MjAsCisJQUNQSV9JVlJTX1RZUEVfTUVNT1JZMiA9IDB4MjEsCisJQUNQSV9JVlJTX1RZUEVfTUVNT1JZMyA9IDB4MjIKK307CisKKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSBmb3IgSVZIRCBzdWJ0YWJsZSAqLworCisjZGVmaW5lIEFDUElfSVZIRF9UVF9FTkFCTEUgICAgICAgICAoMSkKKyNkZWZpbmUgQUNQSV9JVkhEX1BBU1NfUFcgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBBQ1BJX0lWSERfUkVTX1BBU1NfUFcgICAgICAgKDE8PDIpCisjZGVmaW5lIEFDUElfSVZIRF9JU09DICAgICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgQUNQSV9JVkhEX0lPVExCICAgICAgICAgICAgICgxPDw0KQorCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgZm9yIElWTUQgc3VidGFibGUgKi8KKworI2RlZmluZSBBQ1BJX0lWTURfVU5JVFkgICAgICAgICAgICAgKDEpCisjZGVmaW5lIEFDUElfSVZNRF9SRUFEICAgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQUNQSV9JVk1EX1dSSVRFICAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBBQ1BJX0lWTURfRVhDTFVTSU9OX1JBTkdFICAgKDE8PDMpCisKKy8qCisgKiBJVlJTIHN1YnRhYmxlcywgY29ycmVzcG9uZCB0byBUeXBlIGluIHN0cnVjdCBhY3BpX2l2cnNfaGVhZGVyCisgKi8KKworLyogMHgxMDogSS9PIFZpcnR1YWxpemF0aW9uIEhhcmR3YXJlIERlZmluaXRpb24gQmxvY2sgKElWSEQpICovCisKK3N0cnVjdCBhY3BpX2l2cnNfaGFyZHdhcmUgeworCXN0cnVjdCBhY3BpX2l2cnNfaGVhZGVyIGhlYWRlcjsKKwl1MTYgY2FwYWJpbGl0eV9vZmZzZXQ7CS8qIE9mZnNldCBmb3IgSU9NTVUgY29udHJvbCBmaWVsZHMgKi8KKwl1NjQgYmFzZV9hZGRyZXNzOwkvKiBJT01NVSBjb250cm9sIHJlZ2lzdGVycyAqLworCXUxNiBwY2lfc2VnbWVudF9ncm91cDsKKwl1MTYgaW5mbzsJCS8qIE1TSSBudW1iZXIgYW5kIHVuaXQgSUQgKi8KKwl1MzIgcmVzZXJ2ZWQ7Cit9OworCisvKiBNYXNrcyBmb3IgSW5mbyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfSVZIRF9NU0lfTlVNQkVSX01BU0sgICAweDAwMUYJLyogNSBiaXRzLCBNU0kgbWVzc2FnZSBudW1iZXIgKi8KKyNkZWZpbmUgQUNQSV9JVkhEX1VOSVRfSURfTUFTSyAgICAgIDB4MUYwMAkvKiA1IGJpdHMsIHVuaXRfaUQgKi8KKworLyoKKyAqIERldmljZSBFbnRyaWVzIGZvciBJVkhEIHN1YnRhYmxlLCBhcHBlYXIgYWZ0ZXIgc3RydWN0IGFjcGlfaXZyc19oYXJkd2FyZSBzdHJ1Y3R1cmUuCisgKiBVcHBlciB0d28gYml0cyBvZiB0aGUgVHlwZSBmaWVsZCBhcmUgdGhlIChlbmNvZGVkKSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZS4KKyAqIEN1cnJlbnRseSwgb25seSA0IGFuZCA4IGJ5dGUgZW50cmllcyBhcmUgZGVmaW5lZC4gMTYgYW5kIDMyIGJ5dGUgZW50cmllcworICogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGJ1dCBub3QgZGVmaW5lZC4KKyAqLworc3RydWN0IGFjcGlfaXZyc19kZV9oZWFkZXIgeworCXU4IHR5cGU7CisJdTE2IGlkOworCXU4IGRhdGFfc2V0dGluZzsKK307CisKKy8qIExlbmd0aCBvZiBkZXZpY2UgZW50cnkgaXMgaW4gdGhlIHRvcCB0d28gYml0cyBvZiBUeXBlIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9JVkhEX0VOVFJZX0xFTkdUSCAgICAgIDB4QzAKKworLyogVmFsdWVzIGZvciBkZXZpY2UgZW50cnkgVHlwZSBmaWVsZCBhYm92ZSAqLworCitlbnVtIGFjcGlfaXZyc19kZXZpY2VfZW50cnlfdHlwZSB7CisJLyogNC1ieXRlIGRldmljZSBlbnRyaWVzLCBhbGwgdXNlIHN0cnVjdCBhY3BpX2l2cnNfZGV2aWNlNCAqLworCisJQUNQSV9JVlJTX1RZUEVfUEFENCA9IDAsCisJQUNQSV9JVlJTX1RZUEVfQUxMID0gMSwKKwlBQ1BJX0lWUlNfVFlQRV9TRUxFQ1QgPSAyLAorCUFDUElfSVZSU19UWVBFX1NUQVJUID0gMywKKwlBQ1BJX0lWUlNfVFlQRV9FTkQgPSA0LAorCisJLyogOC1ieXRlIGRldmljZSBlbnRyaWVzICovCisKKwlBQ1BJX0lWUlNfVFlQRV9QQUQ4ID0gNjQsCisJQUNQSV9JVlJTX1RZUEVfTk9UX1VTRUQgPSA2NSwKKwlBQ1BJX0lWUlNfVFlQRV9BTElBU19TRUxFQ1QgPSA2NiwJLyogVXNlcyBzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThhICovCisJQUNQSV9JVlJTX1RZUEVfQUxJQVNfU1RBUlQgPSA2NywJLyogVXNlcyBzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThhICovCisJQUNQSV9JVlJTX1RZUEVfRVhUX1NFTEVDVCA9IDcwLAkvKiBVc2VzIHN0cnVjdCBhY3BpX2l2cnNfZGV2aWNlOGIgKi8KKwlBQ1BJX0lWUlNfVFlQRV9FWFRfU1RBUlQgPSA3MSwJLyogVXNlcyBzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThiICovCisJQUNQSV9JVlJTX1RZUEVfU1BFQ0lBTCA9IDcyCS8qIFVzZXMgc3RydWN0IGFjcGlfaXZyc19kZXZpY2U4YyAqLworfTsKKworLyogVmFsdWVzIGZvciBEYXRhIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9JVkhEX0lOSVRfUEFTUyAgICAgICAgICgxKQorI2RlZmluZSBBQ1BJX0lWSERfRUlOVF9QQVNTICAgICAgICAgKDE8PDEpCisjZGVmaW5lIEFDUElfSVZIRF9OTUlfUEFTUyAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgQUNQSV9JVkhEX1NZU1RFTV9NR01UICAgICAgICgzPDw0KQorI2RlZmluZSBBQ1BJX0lWSERfTElOVDBfUEFTUyAgICAgICAgKDE8PDYpCisjZGVmaW5lIEFDUElfSVZIRF9MSU5UMV9QQVNTICAgICAgICAoMTw8NykKKworLyogVHlwZXMgMC00OiA0LWJ5dGUgZGV2aWNlIGVudHJ5ICovCisKK3N0cnVjdCBhY3BpX2l2cnNfZGV2aWNlNCB7CisJc3RydWN0IGFjcGlfaXZyc19kZV9oZWFkZXIgaGVhZGVyOworfTsKKworLyogVHlwZXMgNjYtNjc6IDgtYnl0ZSBkZXZpY2UgZW50cnkgKi8KKworc3RydWN0IGFjcGlfaXZyc19kZXZpY2U4YSB7CisJc3RydWN0IGFjcGlfaXZyc19kZV9oZWFkZXIgaGVhZGVyOworCXU4IHJlc2VydmVkMTsKKwl1MTYgdXNlZF9pZDsKKwl1OCByZXNlcnZlZDI7Cit9OworCisvKiBUeXBlcyA3MC03MTogOC1ieXRlIGRldmljZSBlbnRyeSAqLworCitzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThiIHsKKwlzdHJ1Y3QgYWNwaV9pdnJzX2RlX2hlYWRlciBoZWFkZXI7CisJdTMyIGV4dGVuZGVkX2RhdGE7Cit9OworCisvKiBWYWx1ZXMgZm9yIGV4dGVuZGVkX2RhdGEgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0lWSERfQVRTX0RJU0FCTEVEICAgICAgKDE8PDMxKQorCisvKiBUeXBlIDcyOiA4LWJ5dGUgZGV2aWNlIGVudHJ5ICovCisKK3N0cnVjdCBhY3BpX2l2cnNfZGV2aWNlOGMgeworCXN0cnVjdCBhY3BpX2l2cnNfZGVfaGVhZGVyIGhlYWRlcjsKKwl1OCBoYW5kbGU7CisJdTE2IHVzZWRfaWQ7CisJdTggdmFyaWV0eTsKK307CisKKy8qIFZhbHVlcyBmb3IgVmFyaWV0eSBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfSVZIRF9JT0FQSUMgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfSVZIRF9IUEVUICAgICAgICAgICAgICAyCisKKy8qIDB4MjAsIDB4MjEsIDB4MjI6IEkvTyBWaXJ0dWFsaXphdGlvbiBNZW1vcnkgRGVmaW5pdGlvbiBCbG9jayAoSVZNRCkgKi8KKworc3RydWN0IGFjcGlfaXZyc19tZW1vcnkgeworCXN0cnVjdCBhY3BpX2l2cnNfaGVhZGVyIGhlYWRlcjsKKwl1MTYgYXV4X2RhdGE7CisJdTY0IHJlc2VydmVkOworCXU2NCBzdGFydF9hZGRyZXNzOworCXU2NCBtZW1vcnlfbGVuZ3RoOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNQ0ZHIC0gUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSBhbmQgc3ViLXRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gIlBDSSBGaXJtd2FyZSBTcGVjaWZpY2F0aW9uIiwgUmV2aXNpb24gMy4wLCBKdW5lIDIwLCAyMDA1CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfbWNmZyB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJdTggcmVzZXJ2ZWRbOF07Cit9OworCisvKiBTdWJ0YWJsZSAqLworCitzdHJ1Y3QgYWNwaV9tY2ZnX2FsbG9jYXRpb24geworCXU2NCBhZGRyZXNzOwkJLyogQmFzZSBhZGRyZXNzLCBwcm9jZXNzb3ItcmVsYXRpdmUgKi8KKwl1MTYgcGNpX3NlZ21lbnQ7CS8qIFBDSSBzZWdtZW50IGdyb3VwIG51bWJlciAqLworCXU4IHN0YXJ0X2J1c19udW1iZXI7CS8qIFN0YXJ0aW5nIFBDSSBCdXMgbnVtYmVyICovCisJdTggZW5kX2J1c19udW1iZXI7CS8qIEZpbmFsIFBDSSBCdXMgbnVtYmVyICovCisJdTMyIHJlc2VydmVkOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTUENSIC0gU2VyaWFsIFBvcnQgQ29uc29sZSBSZWRpcmVjdGlvbiB0YWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJTZXJpYWwgUG9ydCBDb25zb2xlIFJlZGlyZWN0aW9uIFRhYmxlIiwKKyAqIFZlcnNpb24gMS4wMCwgSmFudWFyeSAxMSwgMjAwMgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3NwY3IgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXU4IGludGVyZmFjZV90eXBlOwkvKiAwPWZ1bGwgMTY1NTAsIDE9c3Vic2V0IG9mIDE2NTUwICovCisJdTggcmVzZXJ2ZWRbM107CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHNlcmlhbF9wb3J0OworCXU4IGludGVycnVwdF90eXBlOworCXU4IHBjX2ludGVycnVwdDsKKwl1MzIgaW50ZXJydXB0OworCXU4IGJhdWRfcmF0ZTsKKwl1OCBwYXJpdHk7CisJdTggc3RvcF9iaXRzOworCXU4IGZsb3dfY29udHJvbDsKKwl1OCB0ZXJtaW5hbF90eXBlOworCXU4IHJlc2VydmVkMTsKKwl1MTYgcGNpX2RldmljZV9pZDsKKwl1MTYgcGNpX3ZlbmRvcl9pZDsKKwl1OCBwY2lfYnVzOworCXU4IHBjaV9kZXZpY2U7CisJdTggcGNpX2Z1bmN0aW9uOworCXUzMiBwY2lfZmxhZ3M7CisJdTggcGNpX3NlZ21lbnQ7CisJdTMyIHJlc2VydmVkMjsKK307CisKKy8qIE1hc2tzIGZvciBwY2lfZmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX1NQQ1JfRE9fTk9UX0RJU0FCTEUgICAgKDEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU1BNSSAtIFNlcnZlciBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSB0YWJsZQorICogICAgICAgIFZlcnNpb24gNQorICoKKyAqIENvbmZvcm1zIHRvICJJbnRlbGxpZ2VudCBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSBTcGVjaWZpY2F0aW9uCisgKiBTZWNvbmQgR2VuZXJhdGlvbiB2Mi4wIiwgRG9jdW1lbnQgUmV2aXNpb24gMS4wLCBGZWJydWFyeSAxMiwgMjAwNCB3aXRoCisgKiBKdW5lIDEyLCAyMDA5IG1hcmt1cC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9zcG1pIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1OCBpbnRlcmZhY2VfdHlwZTsKKwl1OCByZXNlcnZlZDsJCS8qIE11c3QgYmUgMSAqLworCXUxNiBzcGVjX3JldmlzaW9uOwkvKiBWZXJzaW9uIG9mIElQTUkgKi8KKwl1OCBpbnRlcnJ1cHRfdHlwZTsKKwl1OCBncGVfbnVtYmVyOwkJLyogR1BFIGFzc2lnbmVkICovCisJdTggcmVzZXJ2ZWQxOworCXU4IHBjaV9kZXZpY2VfZmxhZzsKKwl1MzIgaW50ZXJydXB0OworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBpcG1pX3JlZ2lzdGVyOworCXU4IHBjaV9zZWdtZW50OworCXU4IHBjaV9idXM7CisJdTggcGNpX2RldmljZTsKKwl1OCBwY2lfZnVuY3Rpb247CisJdTggcmVzZXJ2ZWQyOworfTsKKworLyogVmFsdWVzIGZvciBpbnRlcmZhY2VfdHlwZSBhYm92ZSAqLworCitlbnVtIGFjcGlfc3BtaV9pbnRlcmZhY2VfdHlwZXMgeworCUFDUElfU1BNSV9OT1RfVVNFRCA9IDAsCisJQUNQSV9TUE1JX0tFWUJPQVJEID0gMSwKKwlBQ1BJX1NQTUlfU01JID0gMiwKKwlBQ1BJX1NQTUlfQkxPQ0tfVFJBTlNGRVIgPSAzLAorCUFDUElfU1BNSV9TTUJVUyA9IDQsCisJQUNQSV9TUE1JX1JFU0VSVkVEID0gNQkvKiA1IGFuZCBhYm92ZSBhcmUgcmVzZXJ2ZWQgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVENQQSAtIFRydXN0ZWQgQ29tcHV0aW5nIFBsYXRmb3JtIEFsbGlhbmNlIHRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gIlRDRyBQQyBTcGVjaWZpYyBJbXBsZW1lbnRhdGlvbiBTcGVjaWZpY2F0aW9uIiwKKyAqIFZlcnNpb24gMS4xLCBBdWd1c3QgMTgsIDIwMDMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV90Y3BhIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1MTYgcmVzZXJ2ZWQ7CisJdTMyIG1heF9sb2dfbGVuZ3RoOwkvKiBNYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGV2ZW50IGxvZyBhcmVhICovCisJdTY0IGxvZ19hZGRyZXNzOwkvKiBBZGRyZXNzIG9mIHRoZSBldmVudCBsb2cgYXJlYSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBVRUZJIC0gVUVGSSBCb290IG9wdGltaXphdGlvbiBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJVbmlmaWVkIEV4dGVuc2libGUgRmlybXdhcmUgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24iLAorICogVmVyc2lvbiAyLjMsIE1heSA4LCAyMDA5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfdWVmaSB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJdTggaWRlbnRpZmllclsxNl07CS8qIFVVSUQgaWRlbnRpZmllciAqLworCXUxNiBkYXRhX29mZnNldDsJLyogT2Zmc2V0IG9mIHJlbWFpbmluZyBkYXRhIGluIHRhYmxlICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFdBRVQgLSBXaW5kb3dzIEFDUEkgRW11bGF0ZWQgZGV2aWNlcyBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJXaW5kb3dzIEFDUEkgRW11bGF0ZWQgRGV2aWNlcyBUYWJsZSIsIHZlcnNpb24gMS4wLCBBcHJpbCA2LCAyMDA5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfd2FldCB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJdTMyIGZsYWdzOworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9XQUVUX1JUQ19OT19BQ0sgICAgICAgICgxKQkvKiBSVEMgcmVxdWlyZXMgbm8gaW50IGFja25vd2xlZGdlICovCisjZGVmaW5lIEFDUElfV0FFVF9USU1FUl9PTkVfUkVBRCAgICAoMTw8MSkJLyogUE0gdGltZXIgcmVxdWlyZXMgb25seSBvbmUgcmVhZCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFdEQVQgLSBXYXRjaGRvZyBBY3Rpb24gVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byAiSGFyZHdhcmUgV2F0Y2hkb2cgVGltZXJzIERlc2lnbiBTcGVjaWZpY2F0aW9uIiwKKyAqIENvcHlyaWdodCAyMDA2IE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV93ZGF0IHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1MzIgaGVhZGVyX2xlbmd0aDsJLyogV2F0Y2hkb2cgSGVhZGVyIExlbmd0aCAqLworCXUxNiBwY2lfc2VnbWVudDsJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCisJdTggcGNpX2J1czsJCS8qIFBDSSBCdXMgbnVtYmVyICovCisJdTggcGNpX2RldmljZTsJCS8qIFBDSSBEZXZpY2UgbnVtYmVyICovCisJdTggcGNpX2Z1bmN0aW9uOwkvKiBQQ0kgRnVuY3Rpb24gbnVtYmVyICovCisJdTggcmVzZXJ2ZWRbM107CisJdTMyIHRpbWVyX3BlcmlvZDsJLyogUGVyaW9kIG9mIG9uZSB0aW1lciBjb3VudCAobXNlYykgKi8KKwl1MzIgbWF4X2NvdW50OwkJLyogTWF4aW11bSBjb3VudGVyIHZhbHVlIHN1cHBvcnRlZCAqLworCXUzMiBtaW5fY291bnQ7CQkvKiBNaW5pbXVtIGNvdW50ZXIgdmFsdWUgKi8KKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZDJbM107CisJdTMyIGVudHJpZXM7CQkvKiBOdW1iZXIgb2Ygd2F0Y2hkb2cgZW50cmllcyB0aGF0IGZvbGxvdyAqLworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9XREFUX0VOQUJMRUQgICAgICAgICAgICgxKQorI2RlZmluZSBBQ1BJX1dEQVRfU1RPUFBFRCAgICAgICAgICAgMHg4MAorCisvKiBXREFUIEluc3RydWN0aW9uIEVudHJpZXMgKGFjdGlvbnMpICovCisKK3N0cnVjdCBhY3BpX3dkYXRfZW50cnkgeworCXU4IGFjdGlvbjsKKwl1OCBpbnN0cnVjdGlvbjsKKwl1MTYgcmVzZXJ2ZWQ7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHJlZ2lzdGVyX3JlZ2lvbjsKKwl1MzIgdmFsdWU7CQkvKiBWYWx1ZSB1c2VkIHdpdGggUmVhZC9Xcml0ZSByZWdpc3RlciAqLworCXUzMiBtYXNrOwkJLyogQml0bWFzayByZXF1aXJlZCBmb3IgdGhpcyByZWdpc3RlciBpbnN0cnVjdGlvbiAqLworfTsKKworLyogVmFsdWVzIGZvciBBY3Rpb24gZmllbGQgYWJvdmUgKi8KKworZW51bSBhY3BpX3dkYXRfYWN0aW9ucyB7CisJQUNQSV9XREFUX1JFU0VUID0gMSwKKwlBQ1BJX1dEQVRfR0VUX0NVUlJFTlRfQ09VTlRET1dOID0gNCwKKwlBQ1BJX1dEQVRfR0VUX0NPVU5URE9XTiA9IDUsCisJQUNQSV9XREFUX1NFVF9DT1VOVERPV04gPSA2LAorCUFDUElfV0RBVF9HRVRfUlVOTklOR19TVEFURSA9IDgsCisJQUNQSV9XREFUX1NFVF9SVU5OSU5HX1NUQVRFID0gOSwKKwlBQ1BJX1dEQVRfR0VUX1NUT1BQRURfU1RBVEUgPSAxMCwKKwlBQ1BJX1dEQVRfU0VUX1NUT1BQRURfU1RBVEUgPSAxMSwKKwlBQ1BJX1dEQVRfR0VUX1JFQk9PVCA9IDE2LAorCUFDUElfV0RBVF9TRVRfUkVCT09UID0gMTcsCisJQUNQSV9XREFUX0dFVF9TSFVURE9XTiA9IDE4LAorCUFDUElfV0RBVF9TRVRfU0hVVERPV04gPSAxOSwKKwlBQ1BJX1dEQVRfR0VUX1NUQVRVUyA9IDMyLAorCUFDUElfV0RBVF9TRVRfU1RBVFVTID0gMzMsCisJQUNQSV9XREFUX0FDVElPTl9SRVNFUlZFRCA9IDM0CS8qIDM0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworLyogVmFsdWVzIGZvciBJbnN0cnVjdGlvbiBmaWVsZCBhYm92ZSAqLworCitlbnVtIGFjcGlfd2RhdF9pbnN0cnVjdGlvbnMgeworCUFDUElfV0RBVF9SRUFEX1ZBTFVFID0gMCwKKwlBQ1BJX1dEQVRfUkVBRF9DT1VOVERPV04gPSAxLAorCUFDUElfV0RBVF9XUklURV9WQUxVRSA9IDIsCisJQUNQSV9XREFUX1dSSVRFX0NPVU5URE9XTiA9IDMsCisJQUNQSV9XREFUX0lOU1RSVUNUSU9OX1JFU0VSVkVEID0gNCwJLyogNCBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KKwlBQ1BJX1dEQVRfUFJFU0VSVkVfUkVHSVNURVIgPSAweDgwCS8qIEV4Y2VwdCBmb3IgdGhpcyB2YWx1ZSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBXRFJUIC0gV2F0Y2hkb2cgUmVzb3VyY2UgVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byAiV2F0Y2hkb2cgVGltZXIgSGFyZHdhcmUgUmVxdWlyZW1lbnRzIGZvciBXaW5kb3dzIFNlcnZlciAyMDAzIiwKKyAqIFZlcnNpb24gMS4wMSwgQXVndXN0IDI4LCAyMDA2CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfd2RydCB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGNvbnRyb2xfcmVnaXN0ZXI7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGNvdW50X3JlZ2lzdGVyOworCXUxNiBwY2lfZGV2aWNlX2lkOworCXUxNiBwY2lfdmVuZG9yX2lkOworCXU4IHBjaV9idXM7CQkvKiBQQ0kgQnVzIG51bWJlciAqLworCXU4IHBjaV9kZXZpY2U7CQkvKiBQQ0kgRGV2aWNlIG51bWJlciAqLworCXU4IHBjaV9mdW5jdGlvbjsJLyogUENJIEZ1bmN0aW9uIG51bWJlciAqLworCXU4IHBjaV9zZWdtZW50OwkJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCisJdTE2IG1heF9jb3VudDsJCS8qIE1heGltdW0gY291bnRlciB2YWx1ZSBzdXBwb3J0ZWQgKi8KKwl1OCB1bml0czsKK307CisKKy8qIFJlc2V0IHRvIGRlZmF1bHQgcGFja2luZyAqLworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYJCQkJLyogX19BQ1RCTDJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCAzN2JhNTc2Li4xNTNmMTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogLyoKICAqIFNvbWUgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0IHVudXNlZCB2YXJpYWJsZXMuIFNvbWV0aW1lcyB3ZSBkb24ndCB3YW50IHRvCiAgKiB1c2UgYWxsIHRoZSB2YXJpYWJsZXMgKGZvciBleGFtcGxlLCBfYWNwaV9tb2R1bGVfbmFtZSkuIFRoaXMgYWxsb3dzIHVzCi0gKiB0byB0byB0ZWxsIHRoZSBjb21waWxlciBpbiBhIHBlci12YXJpYWJsZSBtYW5uZXIgdGhhdCBhIHZhcmlhYmxlCisgKiB0byB0ZWxsIHRoZSBjb21waWxlciBpbiBhIHBlci12YXJpYWJsZSBtYW5uZXIgdGhhdCBhIHZhcmlhYmxlCiAgKiBpcyB1bnVzZWQKICAqLwogI2lmbmRlZiBBQ1BJX1VOVVNFRF9WQVIKQEAgLTMzOCw3ICszMzgsNyBAQAogCiAvKiBQTSBUaW1lciB0aWNrcyBwZXIgc2Vjb25kIChIWikgKi8KIAotI2RlZmluZSBQTV9USU1FUl9GUkVRVUVOQ1kgIDM1Nzk1NDUKKyNkZWZpbmUgUE1fVElNRVJfRlJFUVVFTkNZICAgICAgICAgICAgICAzNTc5NTQ1CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNzMyLDcgKzczMiw4IEBACiAjZGVmaW5lIEFDUElfQURSX1NQQUNFX1NNQlVTICAgICAgICAgICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDQKICNkZWZpbmUgQUNQSV9BRFJfU1BBQ0VfQ01PUyAgICAgICAgICAgICAoYWNwaV9hZHJfc3BhY2VfdHlwZSkgNQogI2RlZmluZSBBQ1BJX0FEUl9TUEFDRV9QQ0lfQkFSX1RBUkdFVCAgIChhY3BpX2Fkcl9zcGFjZV90eXBlKSA2Ci0jZGVmaW5lIEFDUElfQURSX1NQQUNFX0RBVEFfVEFCTEUgICAgICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDcKKyNkZWZpbmUgQUNQSV9BRFJfU1BBQ0VfSVBNSSAgICAgICAgICAgICAoYWNwaV9hZHJfc3BhY2VfdHlwZSkgNworI2RlZmluZSBBQ1BJX0FEUl9TUEFDRV9EQVRBX1RBQkxFICAgICAgIChhY3BpX2Fkcl9zcGFjZV90eXBlKSA4CiAjZGVmaW5lIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDEyNwogCiAvKgpAQCAtOTIxLDcgKzkyMiw3IEBACiB2b2lkICgqYWNwaV9ub3RpZnlfaGFuZGxlcikgKGFjcGlfaGFuZGxlIGRldmljZSwgdTMyIHZhbHVlLCB2b2lkICpjb250ZXh0KTsKIAogdHlwZWRlZgotdm9pZCAoKmFjcGlfb2JqZWN0X2hhbmRsZXIpIChhY3BpX2hhbmRsZSBvYmplY3QsIHUzMiBmdW5jdGlvbiwgdm9pZCAqZGF0YSk7Cit2b2lkICgqYWNwaV9vYmplY3RfaGFuZGxlcikgKGFjcGlfaGFuZGxlIG9iamVjdCwgdm9pZCAqZGF0YSk7CiAKIHR5cGVkZWYgYWNwaV9zdGF0dXMoKmFjcGlfaW5pdF9oYW5kbGVyKSAoYWNwaV9oYW5kbGUgb2JqZWN0LCB1MzIgZnVuY3Rpb24pOwogCkBAIC05NjksMzggKzk3MCw2MCBAQAogI2RlZmluZSBBQ1BJX0lOVEVSUlVQVF9OT1RfSEFORExFRCAgICAgIDB4MDAKICNkZWZpbmUgQUNQSV9JTlRFUlJVUFRfSEFORExFRCAgICAgICAgICAweDAxCiAKLS8qIExlbmd0aCBvZiBfSElELCBfVUlELCBfQ0lELCBhbmQgVVVJRCB2YWx1ZXMgKi8KKy8qIExlbmd0aCBvZiAzMi1iaXQgRUlTQUlEIHZhbHVlcyB3aGVuIGNvbnZlcnRlZCBiYWNrIHRvIGEgc3RyaW5nICovCiAKLSNkZWZpbmUgQUNQSV9ERVZJQ0VfSURfTEVOR1RIICAgICAgICAgICAweDA5Ci0jZGVmaW5lIEFDUElfTUFYX0NJRF9MRU5HVEggICAgICAgICAgICAgNDgKKyNkZWZpbmUgQUNQSV9FSVNBSURfU1RSSU5HX1NJWkUgICAgICAgICA4CS8qIEluY2x1ZGVzIG51bGwgdGVybWluYXRvciAqLworCisvKiBMZW5ndGggb2YgVVVJRCAoc3RyaW5nKSB2YWx1ZXMgKi8KKwogI2RlZmluZSBBQ1BJX1VVSURfTEVOR1RIICAgICAgICAgICAgICAgIDE2CiAKLS8qIENvbW1vbiBzdHJpbmcgdmVyc2lvbiBvZiBkZXZpY2UgSElEcyBhbmQgVUlEcyAqLworLyogU3RydWN0dXJlcyB1c2VkIGZvciBkZXZpY2UvcHJvY2Vzc29yIEhJRCwgVUlELCBDSUQgKi8KIAogc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgewotCWNoYXIgdmFsdWVbQUNQSV9ERVZJQ0VfSURfTEVOR1RIXTsKKwl1MzIgbGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHN0cmluZyArIG51bGwgKi8KKwljaGFyICpzdHJpbmc7CiB9OwogCi0vKiBDb21tb24gc3RyaW5nIHZlcnNpb24gb2YgZGV2aWNlIENJRHMgKi8KLQotc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCB7Ci0JY2hhciB2YWx1ZVtBQ1BJX01BWF9DSURfTEVOR1RIXTsKK3N0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgeworCXUzMiBjb3VudDsJCS8qIE51bWJlciBvZiBJRHMgaW4gSWRzIGFycmF5ICovCisJdTMyIGxpc3Rfc2l6ZTsJCS8qIFNpemUgb2YgbGlzdCwgaW5jbHVkaW5nIElEIHN0cmluZ3MgKi8KKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBpZHNbMV07CS8qIElEIGFycmF5ICovCiB9OwogCi1zdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgewotCXUzMiBjb3VudDsKLQl1MzIgc2l6ZTsKLQlzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkIGlkWzFdOworLyoKKyAqIFN0cnVjdHVyZSByZXR1cm5lZCBmcm9tIGFjcGlfZ2V0X29iamVjdF9pbmZvLgorICogT3B0aW1pemVkIGZvciBib3RoIDMyLSBhbmQgNjQtYml0IGJ1aWxkcworICovCitzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyB7CisJdTMyIGluZm9fc2l6ZTsJCS8qIFNpemUgb2YgaW5mbywgaW5jbHVkaW5nIElEIHN0cmluZ3MgKi8KKwl1MzIgbmFtZTsJCS8qIEFDUEkgb2JqZWN0IE5hbWUgKi8KKwlhY3BpX29iamVjdF90eXBlIHR5cGU7CS8qIEFDUEkgb2JqZWN0IFR5cGUgKi8KKwl1OCBwYXJhbV9jb3VudDsJCS8qIElmIGEgbWV0aG9kLCByZXF1aXJlZCBwYXJhbWV0ZXIgY291bnQgKi8KKwl1OCB2YWxpZDsJCS8qIEluZGljYXRlcyB3aGljaCBvcHRpb25hbCBmaWVsZHMgYXJlIHZhbGlkICovCisJdTggZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIGluZm8gKi8KKwl1OCBoaWdoZXN0X2RzdGF0ZXNbNF07CS8qIF9zeF9kIHZhbHVlczogMHhGRiBpbmRpY2F0ZXMgbm90IHZhbGlkICovCisJdTggbG93ZXN0X2RzdGF0ZXNbNV07CS8qIF9zeF93IHZhbHVlczogMHhGRiBpbmRpY2F0ZXMgbm90IHZhbGlkICovCisJdTMyIGN1cnJlbnRfc3RhdHVzOwkvKiBfU1RBIHZhbHVlICovCisJYWNwaV9pbnRlZ2VyIGFkZHJlc3M7CS8qIF9BRFIgdmFsdWUgKi8KKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBoYXJkd2FyZV9pZDsJLyogX0hJRCB2YWx1ZSAqLworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIHVuaXF1ZV9pZDsJLyogX1VJRCB2YWx1ZSAqLworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgY29tcGF0aWJsZV9pZF9saXN0OwkvKiBfQ0lEIGxpc3QgPG11c3QgYmUgbGFzdD4gKi8KIH07CiAKLS8qIFN0cnVjdHVyZSBhbmQgZmxhZ3MgZm9yIGFjcGlfZ2V0X29iamVjdF9pbmZvICovCisvKiBWYWx1ZXMgZm9yIEZsYWdzIGZpZWxkIGFib3ZlIChhY3BpX2dldF9vYmplY3RfaW5mbykgKi8KIAotI2RlZmluZSBBQ1BJX1ZBTElEX1NUQSAgICAgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBBQ1BJX1ZBTElEX0FEUiAgICAgICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBBQ1BJX1ZBTElEX0hJRCAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBBQ1BJX1ZBTElEX1VJRCAgICAgICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBBQ1BJX1ZBTElEX0NJRCAgICAgICAgICAgICAgICAgIDB4MDAxMAotI2RlZmluZSBBQ1BJX1ZBTElEX1NYRFMgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBBQ1BJX1BDSV9ST09UX0JSSURHRSAgICAgICAgICAgIDB4MDEKKworLyogRmxhZ3MgZm9yIFZhbGlkIGZpZWxkIGFib3ZlIChhY3BpX2dldF9vYmplY3RfaW5mbykgKi8KKworI2RlZmluZSBBQ1BJX1ZBTElEX1NUQSAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQUNQSV9WQUxJRF9BRFIgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFDUElfVkFMSURfSElEICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBQ1BJX1ZBTElEX1VJRCAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9WQUxJRF9DSUQgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFDUElfVkFMSURfU1hEUyAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBBQ1BJX1ZBTElEX1NYV1MgICAgICAgICAgICAgICAgIDB4NDAKIAogLyogRmxhZ3MgZm9yIF9TVEEgbWV0aG9kICovCiAKQEAgLTEwMTEsMjkgKzEwMzQsNiBAQAogI2RlZmluZSBBQ1BJX1NUQV9ERVZJQ0VfT0sgICAgICAgICAgICAgIDB4MDgJLyogU3lub255bSAqLwogI2RlZmluZSBBQ1BJX1NUQV9CQVRURVJZX1BSRVNFTlQgICAgICAgIDB4MTAKIAotI2RlZmluZSBBQ1BJX0NPTU1PTl9PQkpfSU5GTyBcCi0JYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogQUNQSSBvYmplY3QgdHlwZSAqLyBcCi0JYWNwaV9uYW1lICAgICAgICAgICAgICAgICAgICAgICBuYW1lCS8qIEFDUEkgb2JqZWN0IE5hbWUgKi8KLQotc3RydWN0IGFjcGlfb2JqX2luZm9faGVhZGVyIHsKLQlBQ1BJX0NPTU1PTl9PQkpfSU5GTzsKLX07Ci0KLS8qIFN0cnVjdHVyZSByZXR1cm5lZCBmcm9tIEdldCBPYmplY3QgSW5mbyAqLwotCi1zdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyB7Ci0JQUNQSV9DT01NT05fT0JKX0lORk87Ci0KLQl1MzIgcGFyYW1fY291bnQ7CS8qIElmIGEgbWV0aG9kLCByZXF1aXJlZCBwYXJhbWV0ZXIgY291bnQgKi8KLQl1MzIgdmFsaWQ7CQkvKiBJbmRpY2F0ZXMgd2hpY2ggZmllbGRzIGJlbG93IGFyZSB2YWxpZCAqLwotCXUzMiBjdXJyZW50X3N0YXR1czsJLyogX1NUQSB2YWx1ZSAqLwotCWFjcGlfaW50ZWdlciBhZGRyZXNzOwkvKiBfQURSIHZhbHVlIGlmIGFueSAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIGhhcmR3YXJlX2lkOwkvKiBfSElEIHZhbHVlIGlmIGFueSAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIHVuaXF1ZV9pZDsJLyogX1VJRCB2YWx1ZSBpZiBhbnkgKi8KLQl1OCBoaWdoZXN0X2RzdGF0ZXNbNF07CS8qIF9zeF9kIHZhbHVlczogMHhGRiBpbmRpY2F0ZXMgbm90IHZhbGlkICovCi0Jc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0IGNvbXBhdGliaWxpdHlfaWQ7CS8qIExpc3Qgb2YgX0NJRHMgaWYgYW55ICovCi19OwotCiAvKiBDb250ZXh0IHN0cnVjdHMgZm9yIGFkZHJlc3Mgc3BhY2UgaGFuZGxlcnMgKi8KIAogc3RydWN0IGFjcGlfcGNpX2lkIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKaW5kZXggOTM1YzVkNy4uNmFhZGJmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKQEAgLTU3LDcgKzU3LDcgQEAKIC8qCiAgKiBTb21lIGNvbXBpbGVycyBjb21wbGFpbiBhYm91dCB1bnVzZWQgdmFyaWFibGVzLiBTb21ldGltZXMgd2UgZG9uJ3Qgd2FudCB0bwogICogdXNlIGFsbCB0aGUgdmFyaWFibGVzIChmb3IgZXhhbXBsZSwgX2FjcGlfbW9kdWxlX25hbWUpLiBUaGlzIGFsbG93cyB1cwotICogdG8gdG8gdGVsbCB0aGUgY29tcGlsZXIgd2FybmluZyBpbiBhIHBlci12YXJpYWJsZSBtYW5uZXIgdGhhdCBhIHZhcmlhYmxlCisgKiB0byB0ZWxsIHRoZSBjb21waWxlciB3YXJuaW5nIGluIGEgcGVyLXZhcmlhYmxlIG1hbm5lciB0aGF0IGEgdmFyaWFibGUKICAqIGlzIHVudXNlZC4KICAqLwogI2RlZmluZSBBQ1BJX1VOVVNFRF9WQVIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAppbmRleCBmY2I4ZTRiLi45ZDdmZWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKQEAgLTE0OSwxMCArMTQ5LDEwIEBACiAjZGVmaW5lIEFDUElfRlJFRShhKSAgICAgICAgICAgIGtmcmVlKGEpCiAKIC8qIFVzZWQgd2l0aGluIEFDUElDQSB0byBzaG93IHdoZXJlIGl0IGlzIHNhZmUgdG8gcHJlZW1wdCBleGVjdXRpb24gKi8KLQorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNkZWZpbmUgQUNQSV9QUkVFTVBUSU9OX1BPSU5UKCkgXAogCWRvIHsgXAotCQlpZiAoIWlycXNfZGlzYWJsZWQoKSkgXAorCQlpZiAoIWluX2F0b21pY19wcmVlbXB0X29mZigpKSBcCiAJCQljb25kX3Jlc2NoZWQoKTsgXAogCX0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKaW5kZXggMWMxZmE0Mi4uY2EwZjIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKQEAgLTcsNiArNyw3IEBACiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3B1dGltZV90OwogCiAjZGVmaW5lIGNwdXRpbWVfemVybwkJCSgwVUwpCisjZGVmaW5lIGNwdXRpbWVfb25lX2ppZmZ5CQlqaWZmaWVzX3RvX2NwdXRpbWUoMSkKICNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4wVUwgPj4gMSkgLSAxKQogI2RlZmluZSBjcHV0aW1lX2FkZChfX2EsIF9fYikJCSgoX19hKSArICAoX19iKSkKICNkZWZpbmUgY3B1dGltZV9zdWIoX19hLCBfX2IpCQkoKF9fYSkgLSAgKF9fYikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IGQ2YzM3OWQuLjljY2EzNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0xNDEsNiArMTQxLDggQEAKICAqIGJ1dCBtb3JlIHR5cGljYWxseSBpcyBjb25maWd1cmVkIGVudGlyZWx5IGZyb20gdXNlcnNwYWNlLgogICovCiBleHRlcm4gaW50IGdwaW9fZXhwb3J0KHVuc2lnbmVkIGdwaW8sIGJvb2wgZGlyZWN0aW9uX21heV9jaGFuZ2UpOworZXh0ZXJuIGludCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCXVuc2lnbmVkIGdwaW8pOwogZXh0ZXJuIHZvaWQgZ3Bpb191bmV4cG9ydCh1bnNpZ25lZCBncGlvKTsKIAogI2VuZGlmCS8qIENPTkZJR19HUElPX1NZU0ZTICovCkBAIC0xODUsNiArMTg3LDEyIEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCXVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3VuZXhwb3J0KHVuc2lnbmVkIGdwaW8pCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva21hcF90eXBlcy5oCmluZGV4IGVkZGJjZTAuLmU1ZjIzNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva21hcF90eXBlcy5oCkBAIC0yLDM0ICsyLDM1IEBACiAjZGVmaW5lIF9BU01fR0VORVJJQ19LTUFQX1RZUEVTX0gKIAogI2lmZGVmIF9fV0lUSF9LTV9GRU5DRQotIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCisjIGRlZmluZSBLTUFQX0QobikgX19LTV9GRU5DRV8jI24gLAogI2Vsc2UKLSMgZGVmaW5lIEQobikKKyMgZGVmaW5lIEtNQVBfRChuKQogI2VuZGlmCiAKIGVudW0ga21fdHlwZSB7Ci1EKDApCUtNX0JPVU5DRV9SRUFELAotRCgxKQlLTV9TS0JfU1VOUlBDX0RBVEEsCi1EKDIpCUtNX1NLQl9EQVRBX1NPRlRJUlEsCi1EKDMpCUtNX1VTRVIwLAotRCg0KQlLTV9VU0VSMSwKLUQoNSkJS01fQklPX1NSQ19JUlEsCi1EKDYpCUtNX0JJT19EU1RfSVJRLAotRCg3KQlLTV9QVEUwLAotRCg4KQlLTV9QVEUxLAotRCg5KQlLTV9JUlEwLAotRCgxMCkJS01fSVJRMSwKLUQoMTEpCUtNX1NPRlRJUlEwLAotRCgxMikJS01fU09GVElSUTEsCi1EKDEzKQlLTV9TWU5DX0lDQUNIRSwKLUQoMTQpCUtNX1NZTkNfRENBQ0hFLAotRCgxNSkJS01fVU1MX1VTRVJDT1BZLCAvKiBVTUwgc3BlY2lmaWMsIGZvciBjb3B5XypfdXNlciAtIHVzZWQgaW4gZG9fb3Bfb25lX3BhZ2UgKi8KLUQoMTYpCUtNX0lSUV9QVEUsCi1EKDE3KQlLTV9OTUksCi1EKDE4KQlLTV9OTUlfUFRFLAotRCgxOSkJS01fVFlQRV9OUgorS01BUF9EKDApCUtNX0JPVU5DRV9SRUFELAorS01BUF9EKDEpCUtNX1NLQl9TVU5SUENfREFUQSwKK0tNQVBfRCgyKQlLTV9TS0JfREFUQV9TT0ZUSVJRLAorS01BUF9EKDMpCUtNX1VTRVIwLAorS01BUF9EKDQpCUtNX1VTRVIxLAorS01BUF9EKDUpCUtNX0JJT19TUkNfSVJRLAorS01BUF9EKDYpCUtNX0JJT19EU1RfSVJRLAorS01BUF9EKDcpCUtNX1BURTAsCitLTUFQX0QoOCkJS01fUFRFMSwKK0tNQVBfRCg5KQlLTV9JUlEwLAorS01BUF9EKDEwKQlLTV9JUlExLAorS01BUF9EKDExKQlLTV9TT0ZUSVJRMCwKK0tNQVBfRCgxMikJS01fU09GVElSUTEsCitLTUFQX0QoMTMpCUtNX1NZTkNfSUNBQ0hFLAorS01BUF9EKDE0KQlLTV9TWU5DX0RDQUNIRSwKKy8qIFVNTCBzcGVjaWZpYywgZm9yIGNvcHlfKl91c2VyIC0gdXNlZCBpbiBkb19vcF9vbmVfcGFnZSAqLworS01BUF9EKDE1KQlLTV9VTUxfVVNFUkNPUFksCitLTUFQX0QoMTYpCUtNX0lSUV9QVEUsCitLTUFQX0QoMTcpCUtNX05NSSwKK0tNQVBfRCgxOCkJS01fTk1JX1BURSwKK0tNQVBfRCgxOSkJS01fVFlQRV9OUgogfTsKIAotI3VuZGVmIEQKKyN1bmRlZiBLTUFQX0QKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgKaW5kZXggM2I2OWFkMy4uZGQ2M2JkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaApAQCAtMzUsNiArMzUsOSBAQAogI2RlZmluZSBNQURWX0RPTlRGT1JLCTEwCQkvKiBkb24ndCBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAjZGVmaW5lIE1BRFZfRE9GT1JLCTExCQkvKiBkbyBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAKKyNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICAxMgkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxMwkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisKIC8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgTUFQX0ZJTEUJMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi5oCmluZGV4IDdjYWI0ZGUuLjMyYzhiZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCiAjZGVmaW5lIE1BUF9TVEFDSwkweDIwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLworI2RlZmluZSBNQVBfSFVHRVRMQgkweDQwMDAwCQkvKiBjcmVhdGUgYSBodWdlIHBhZ2UgbWFwcGluZyAqLwogCiAjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KICNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaAppbmRleCBkMDgzNTYxLi5iM2JmYWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCkBAIC0yMyw0ICsyMywyMCBAQAogI2RlZmluZSBkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHApIChwKQogI2VuZGlmCiAKKy8qIHJhbmRvbSBleHRyYSBzZWN0aW9ucyAoaWYgYW55KS4gIE92ZXJyaWRlCisgKiBpbiBhc20vc2VjdGlvbnMuaCAqLworI2lmbmRlZiBhcmNoX2lzX2tlcm5lbF90ZXh0CitzdGF0aWMgaW5saW5lIGludCBhcmNoX2lzX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZuZGVmIGFyY2hfaXNfa2VybmVsX2RhdGEKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXNfa2VybmVsX2RhdGEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfU0VDVElPTlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3lzY2FsbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zeXNjYWxsLmgKaW5kZXggZWE4MDg3Yi4uNWMxMjJhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zeXNjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zeXNjYWxsLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogQWNjZXNzIHRvIHVzZXIgc3lzdGVtIGNhbGwgcGFyYW1ldGVycyBhbmQgcmVzdWx0cwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0zMiw5ICszMiwxMyBAQAogICogSWYgQHRhc2sgaXMgbm90IGV4ZWN1dGluZyBhIHN5c3RlbSBjYWxsLCBpLmUuIGl0J3MgYmxvY2tlZAogICogaW5zaWRlIHRoZSBrZXJuZWwgZm9yIGEgZmF1bHQgb3Igc2lnbmFsLCByZXR1cm5zIC0xLgogICoKKyAqIE5vdGUgdGhpcyByZXR1cm5zIGludCBldmVuIG9uIDY0LWJpdCBtYWNoaW5lcy4gIE9ubHkgMzIgYml0cyBvZgorICogc3lzdGVtIGNhbGwgbnVtYmVyIGNhbiBiZSBtZWFuaW5nZnVsLiAgSWYgdGhlIGFjdHVhbCBhcmNoIHZhbHVlCisgKiBpcyA2NCBiaXRzLCB0aGlzIHRydW5jYXRlcyB0byAzMiBiaXRzIHNvIDB4ZmZmZmZmZmYgbWVhbnMgLTEuCisgKgogICogSXQncyBvbmx5IHZhbGlkIHRvIGNhbGwgdGhpcyB3aGVuIEB0YXNrIGlzIGtub3duIHRvIGJlIGJsb2NrZWQuCiAgKi8KLWxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIC8qKgogICogc3lzY2FsbF9yb2xsYmFjayAtIHJvbGwgYmFjayByZWdpc3RlcnMgYWZ0ZXIgYW4gYWJvcnRlZCBzeXN0ZW0gY2FsbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmgKaW5kZXggMTEyNWU1YS4uZDc2YjY2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCkBAIC02MjAsOCArNjIwLDggQEAKIAogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIDI0MAogX19TWVNDQUxMKF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbykKLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbiAyNDEKLV9fU1lTQ0FMTChfX05SX3BlcmZfY291bnRlcl9vcGVuLCBzeXNfcGVyZl9jb3VudGVyX29wZW4pCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuIDI0MQorX19TWVNDQUxMKF9fTlJfcGVyZl9ldmVudF9vcGVuLCBzeXNfcGVyZl9ldmVudF9vcGVuKQogCiAjdW5kZWYgX19OUl9zeXNjYWxscwogI2RlZmluZSBfX05SX3N5c2NhbGxzIDI0MgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IDQ1YjY3ZDkuLmM4ZTY0YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTg4LDcgKzg4LDM3IEBACiAjZGVmaW5lIERSTV9VVF9DT1JFIAkJMHgwMQogI2RlZmluZSBEUk1fVVRfRFJJVkVSCQkweDAyCiAjZGVmaW5lIERSTV9VVF9LTVMJCTB4MDQKLSNkZWZpbmUgRFJNX1VUX01PREUJCTB4MDgKKy8qCisgKiBUaHJlZSBkZWJ1ZyBsZXZlbHMgYXJlIGRlZmluZWQuCisgKiBkcm1fY29yZSwgZHJtX2RyaXZlciwgZHJtX2ttcworICogZHJtX2NvcmUgbGV2ZWwgY2FuIGJlIHVzZWQgaW4gdGhlIGdlbmVyaWMgZHJtIGNvZGUuIEZvciBleGFtcGxlOgorICogCWRybV9pb2N0bCwgZHJtX21tLCBkcm1fbWVtb3J5CisgKiBUaGUgbWFjcm8gZGVmaW5pdG9uIG9mIERSTV9ERUJVRyBpcyB1c2VkLgorICogCURSTV9ERUJVRyhmbXQsIGFyZ3MuLi4pCisgKiAJVGhlIGRlYnVnIGluZm8gYnkgdXNpbmcgdGhlIERSTV9ERUJVRyBjYW4gYmUgb2J0YWluZWQgYnkgYWRkaW5nCisgKiAJdGhlIGJvb3Qgb3B0aW9uIG9mICJkcm0uZGVidWc9MSIuCisgKgorICogZHJtX2RyaXZlciBsZXZlbCBjYW4gYmUgdXNlZCBpbiB0aGUgc3BlY2lmaWMgZHJtIGRyaXZlci4gSXQgaXMgdXNlZAorICogdG8gYWRkIHRoZSBkZWJ1ZyBpbmZvIHJlbGF0ZWQgd2l0aCB0aGUgZHJtIGRyaXZlci4gRm9yIGV4YW1wbGU6CisgKiBpOTE1X2RydiwgaTkxNV9kbWEsIGk5MTVfZ2VtLCByYWRlb25fZHJ2LAorICogCVRoZSBtYWNybyBkZWZpbml0aW9uIG9mIERSTV9ERUJVR19EUklWRVIgY2FuIGJlIHVzZWQuCisgKiAJRFJNX0RFQlVHX0RSSVZFUihmbXQsIGFyZ3MuLi4pCisgKiAJVGhlIGRlYnVnIGluZm8gYnkgdXNpbmcgdGhlIERSTV9ERUJVR19EUklWRVIgY2FuIGJlIG9idGFpbmVkIGJ5CisgKiAJYWRkaW5nIHRoZSBib290IG9wdGlvbiBvZiAiZHJtLmRlYnVnPTB4MDIiCisgKgorICogZHJtX2ttcyBsZXZlbCBjYW4gYmUgdXNlZCBpbiB0aGUgS01TIGNvZGUgcmVsYXRlZCB3aXRoIHNwZWNpZmljIGRybSBkcml2ZXIuCisgKiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZGVidWcgaW5mbyByZWxhdGVkIHdpdGggS01TIG1vZGUuIEZvciBleGFtcGxlOgorICogdGhlIGNvbm5lY3Rvci9jcnRjICwKKyAqIAlUaGUgbWFjcm8gZGVmaW5pdGlvbiBvZiBEUk1fREVCVUdfS01TIGNhbiBiZSB1c2VkLgorICogCURSTV9ERUJVR19LTVMoZm10LCBhcmdzLi4uKQorICogCVRoZSBkZWJ1ZyBpbmZvIGJ5IHVzaW5nIHRoZSBEUk1fREVCVUdfS01TIGNhbiBiZSBvYnRhaW5lZCBieQorICogCWFkZGluZyB0aGUgYm9vdCBvcHRpb24gb2YgImRybS5kZWJ1Zz0weDA0IgorICoKKyAqIElmIHdlIGFkZCB0aGUgYm9vdCBvcHRpb24gb2YgImRybS5kZWJ1Zz0weDA2Iiwgd2UgY2FuIGdldCB0aGUgZGVidWcgaW5mbyBieQorICogdXNpbmcgdGhlIERSTV9ERUJVR19LTVMgYW5kIERSTV9ERUJVR19EUklWRVIuCisgKiBJZiB3ZSBhZGQgdGhlIGJvb3Qgb3B0aW9uIG9mICJkcm0uZGVidWc9MHgwNSIsIHdlIGNhbiBnZXQgdGhlIGRlYnVnIGluZm8gYnkKKyAqIHVzaW5nIHRoZSBEUk1fREVCVUdfS01TIGFuZCBEUk1fREVCVUcuCisgKi8KIAogZXh0ZXJuIHZvaWQgZHJtX3V0X2RlYnVnX3ByaW50ayh1bnNpZ25lZCBpbnQgcmVxdWVzdF9sZXZlbCwKIAkJCQljb25zdCBjaGFyICpwcmVmaXgsCkBAIC0xNzQsMTkgKzIwNCwxNCBAQAogCQkJCQlfX2Z1bmNfXywgZm10LCAjI2FyZ3MpOwkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgRFJNX0RFQlVHX0RSSVZFUihwcmVmaXgsIGZtdCwgYXJncy4uLikJCQkJXAorI2RlZmluZSBEUk1fREVCVUdfRFJJVkVSKGZtdCwgYXJncy4uLikJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWRybV91dF9kZWJ1Z19wcmludGsoRFJNX1VUX0RSSVZFUiwgcHJlZml4LAkJXAorCQlkcm1fdXRfZGVidWdfcHJpbnRrKERSTV9VVF9EUklWRVIsIERSTV9OQU1FLAkJXAogCQkJCQlfX2Z1bmNfXywgZm10LCAjI2FyZ3MpOwkJXAogCX0gd2hpbGUgKDApCi0jZGVmaW5lIERSTV9ERUJVR19LTVMocHJlZml4LCBmbXQsIGFyZ3MuLi4pCQkJCVwKKyNkZWZpbmUgRFJNX0RFQlVHX0tNUyhmbXQsIGFyZ3MuLi4pCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWRybV91dF9kZWJ1Z19wcmludGsoRFJNX1VUX0tNUywgcHJlZml4LCAJCVwKLQkJCQkJIF9fZnVuY19fLCBmbXQsICMjYXJncyk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBEUk1fREVCVUdfTU9ERShwcmVmaXgsIGZtdCwgYXJncy4uLikJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJZHJtX3V0X2RlYnVnX3ByaW50ayhEUk1fVVRfTU9ERSwgcHJlZml4LCAJCVwKKwkJZHJtX3V0X2RlYnVnX3ByaW50ayhEUk1fVVRfS01TLCBEUk1fTkFNRSwgCQlcCiAJCQkJCSBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpOwlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgRFJNX0xPRyhmbXQsIGFyZ3MuLi4pCQkJCQkJXApAQCAtMjEwLDkgKzIzNSw4IEBACiAJCQkJCU5VTEwsIGZtdCwgIyNhcmdzKTsJCVwKIAl9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgRFJNX0RFQlVHX0RSSVZFUihwcmVmaXgsIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBEUk1fREVCVUdfS01TKHByZWZpeCwgZm10LCBhcmdzLi4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIERSTV9ERUJVR19NT0RFKHByZWZpeCwgZm10LCBhcmdzLi4uKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERSTV9ERUJVR19EUklWRVIoZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERSTV9ERUJVR19LTVMoZm10LCBhcmdzLi4uKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIERSTV9ERUJVRyhmbXQsIGFyZy4uLikJCSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIERSTV9MT0coZm10LCBhcmcuLi4pCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIERSTV9MT0dfS01TKGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQpAQCAtNzg2LDYgKzgxMCw5IEBACiAJaW50ICgqZ2VtX2luaXRfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCXZvaWQgKCpnZW1fZnJlZV9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiAKKwkvKiB2Z2EgYXJiIGlycSBoYW5kbGVyICovCisJdm9pZCAoKnZnYWFyYl9pcnEpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgc3RhdGUpOworCiAJLyogRHJpdmVyIHByaXZhdGUgb3BzIGZvciB0aGlzIG9iamVjdCAqLwogCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqZ2VtX3ZtX29wczsKIApAQCAtMTQxNyw3ICsxNDQ0LDcgQEAKIAogaW50IGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgIGludCAqaGFuZGxlcCk7CisJCQkgIHUzMiAqaGFuZGxlcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKQEAgLTE0NDMsNyArMTQ3MCw3IEBACiAKIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxwLAotCQkJCQkgICAgIGludCBoYW5kbGUpOworCQkJCQkgICAgIHUzMiBoYW5kbGUpOwogaW50IGRybV9nZW1fY2xvc2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCBkcm1fZ2VtX2ZsaW5rX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY2FjaGUuaCBiL2luY2x1ZGUvZHJtL2RybV9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZmIwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fY2FjaGUuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0IEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQXV0aG9yczoKKyAqIERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisgKi8KKworI2lmbmRlZiBfRFJNX0NBQ0hFX0hfCisjZGVmaW5lIF9EUk1fQ0FDSEVfSF8KKwordm9pZCBkcm1fY2xmbHVzaF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZXNbXSwgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IDczMDBmYjguLmFlMWU5ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtMjU5LDYgKzI1OSw4IEBACiAJdm9pZCAqZmJkZXY7CiAJdTMyIHBzZXVkb19wYWxldHRlWzE3XTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpbHBfaGVhZDsKKwkvKiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBoZWxwZXIgKi8KKwl2b2lkICpoZWxwZXJfcHJpdmF0ZTsKIH07CiAKIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiB7CkBAIC01NzIsNiArNTc0LDEyIEBACiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5OwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X3RvcF9tYXJnaW5fcHJvcGVydHk7CiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9icmlnaHRuZXNzX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X2NvbnRyYXN0X3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X292ZXJzY2FuX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X3NhdHVyYXRpb25fcHJvcGVydHk7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfaHVlX3Byb3BlcnR5OwogCiAJLyogT3B0aW9uYWwgcHJvcGVydGllcyAqLwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKnNjYWxpbmdfbW9kZV9wcm9wZXJ0eTsKQEAgLTczNiw0ICs3NDQsMTIgQEAKIGV4dGVybiBpbnQgZHJtX21vZGVfZ2FtbWFfc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBib29sIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHN0cnVjdCBlZGlkICplZGlkKTsKK2V4dGVybiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2N2dF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJaW50IGhkaXNwbGF5LCBpbnQgdmRpc3BsYXksIGludCB2cmVmcmVzaCwKKwkJCQlib29sIHJlZHVjZWQsIGJvb2wgaW50ZXJsYWNlZCk7CitleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9ndGZfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCisJCQkJYm9vbCBpbnRlcmxhY2VkLCBpbnQgbWFyZ2lucyk7CitleHRlcm4gaW50IGRybV9hZGRfbW9kZXNfbm9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJaW50IGhkaXNwbGF5LCBpbnQgdmRpc3BsYXkpOwogI2VuZGlmIC8qIF9fRFJNX0NSVENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCmluZGV4IDY3NjlmZjYuLjRjOGRhY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCkBAIC03OSw2ICs3OSw4IEBACiAJLyogZGV0ZWN0IGZvciBEQUMgc3R5bGUgZW5jb2RlcnMgKi8KIAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzICgqZGV0ZWN0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwkvKiBkaXNhYmxlIGVuY29kZXIgd2hlbiBub3QgaW4gdXNlIC0gbW9yZSBleHBsaWNpdCB0aGFuIGRwbXMgb2ZmICovCisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiB9OwogCiBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgewpAQCAtOTgsNiArMTAwLDcgQEAKIAkJCQkgICAgIGludCB4LCBpbnQgeSwKIAkJCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYik7CiBleHRlcm4gYm9vbCBkcm1faGVscGVyX2NydGNfaW5fdXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitleHRlcm4gYm9vbCBkcm1faGVscGVyX2VuY29kZXJfaW5fdXNlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiAKIGV4dGVybiB2b2lkIGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IG1vZGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZW5jb2Rlcl9zbGF2ZS5oIGIvaW5jbHVkZS9kcm0vZHJtX2VuY29kZXJfc2xhdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY1NjMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2VuY29kZXJfc2xhdmUuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBGcmFuY2lzY28gSmVyZXouCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fRFJNX0VOQ09ERVJfU0xBVkVfSF9fCisjZGVmaW5lIF9fRFJNX0VOQ09ERVJfU0xBVkVfSF9fCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtX2NydGMuaCIKKworLyoqCisgKiBzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmVfZnVuY3MgLSBFbnRyeSBwb2ludHMgZXhwb3NlZCBieSBhIHNsYXZlIGVuY29kZXIgZHJpdmVyCisgKiBAc2V0X2NvbmZpZzoJSW5pdGlhbGl6ZSBhbnkgZW5jb2Rlci1zcGVjaWZpYyBtb2Rlc2V0dGluZyBwYXJhbWV0ZXJzLgorICoJCVRoZSBtZWFuaW5nIG9mIHRoZSBAcGFyYW1zIHBhcmFtZXRlciBpcyBpbXBsZW1lbnRhdGlvbgorICoJCWRlcGVuZGVudC4gSXQgd2lsbCB1c3VhbGx5IGJlIGEgc3RydWN0dXJlIHdpdGggRFZPIHBvcnQKKyAqCQlkYXRhIGZvcm1hdCBzZXR0aW5ncyBvciB0aW1pbmdzLiBJdCdzIG5vdCByZXF1aXJlZCBmb3IKKyAqCQl0aGUgbmV3IHBhcmFtZXRlcnMgdG8gdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgbW9kZQorICoJCWlzIHNldC4KKyAqCisgKiBNb3N0IG9mIGl0cyBtZW1iZXJzIGFyZSBhbmFsb2dvdXMgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGluCisgKiAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGFuZCB0aGV5IGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8KKyAqIGluaXRpYWxpemUgdGhlIGxhdHRlci4gQ29ubmVjdG9yLWxpa2UgbWV0aG9kcyAoZS5nLiBAZ2V0X21vZGVzIGFuZAorICogQHNldF9wcm9wZXJ0eSkgd2lsbCB0eXBpY2FsbHkgYmUgd3JhcHBlZCBhcm91bmQgYW5kIG9ubHkgYmUgY2FsbGVkCisgKiBpZiB0aGUgZW5jb2RlciBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZSBmb3IgdGhlIGNvbm5lY3Rvci4KKyAqLworc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlX2Z1bmNzIHsKKwl2b2lkICgqc2V0X2NvbmZpZykoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgdm9pZCAqcGFyYW1zKTsKKworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCXZvaWQgKCpkcG1zKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKTsKKwl2b2lkICgqc2F2ZSkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKKwl2b2lkICgqcmVzdG9yZSkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKKwlib29sICgqbW9kZV9maXh1cCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CisJaW50ICgqbW9kZV92YWxpZCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CisJdm9pZCAoKm1vZGVfc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOworCisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJaW50ICgqZ2V0X21vZGVzKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJaW50ICgqY3JlYXRlX3Jlc291cmNlcykoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwlpbnQgKCpzZXRfcHJvcGVydHkpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJICAgIHVpbnQ2NF90IHZhbCk7CisKK307CisKKy8qKgorICogc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlIC0gU2xhdmUgZW5jb2RlciBzdHJ1Y3QKKyAqIEBiYXNlOiBEUk0gZW5jb2RlciBvYmplY3QuCisgKiBAc2xhdmVfZnVuY3M6IFNsYXZlIGVuY29kZXIgY2FsbGJhY2tzLgorICogQHNsYXZlX3ByaXY6IFNsYXZlIGVuY29kZXIgcHJpdmF0ZSBkYXRhLgorICogQGJ1c19wcml2OiBCdXMgc3BlY2lmaWMgZGF0YS4KKyAqCisgKiBBICZkcm1fZW5jb2Rlcl9zbGF2ZSBoYXMgdHdvIHNldHMgb2YgY2FsbGJhY2tzLCBAc2xhdmVfZnVuY3MgYW5kIHRoZQorICogb25lcyBpbiBAYmFzZS4gVGhlIGZvcm1lciBhcmUgbmV2ZXIgYWN0dWFsbHkgY2FsbGVkIGJ5IHRoZSBjb21tb24KKyAqIENSVEMgY29kZSwgaXQncyBqdXN0IGEgY29udmVuaWVuY2UgZm9yIHNwbGl0dGluZyB0aGUgZW5jb2RlcgorICogZnVuY3Rpb25zIGluIGFuIHVwcGVyLCBHUFUtc3BlY2lmaWMgbGF5ZXIgYW5kIGEgKGhvcGVmdWxseSkKKyAqIEdQVS1hZ25vc3RpYyBsb3dlciBsYXllcjogSXQncyB0aGUgR1BVIGRyaXZlciByZXNwb25zaWJpbGl0eSB0bworICogY2FsbCB0aGUgc2xhdmUgbWV0aG9kcyB3aGVuIGFwcHJvcHJpYXRlLgorICoKKyAqIGRybV9pMmNfZW5jb2Rlcl9pbml0KCkgcHJvdmlkZXMgYSB3YXkgdG8gZ2V0IGFuIGltcGxlbWVudGF0aW9uIG9mCisgKiB0aGlzLgorICovCitzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmUgeworCXN0cnVjdCBkcm1fZW5jb2RlciBiYXNlOworCisJc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlX2Z1bmNzICpzbGF2ZV9mdW5jczsKKwl2b2lkICpzbGF2ZV9wcml2OworCXZvaWQgKmJ1c19wcml2OworfTsKKyNkZWZpbmUgdG9fZW5jb2Rlcl9zbGF2ZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmUsIGJhc2UpCisKK2ludCBkcm1faTJjX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZSAqZW5jb2RlciwKKwkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkgY29uc3Qgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKKworCisvKioKKyAqIHN0cnVjdCBkcm1faTJjX2VuY29kZXJfZHJpdmVyCisgKgorICogRGVzY3JpYmVzIGEgZGV2aWNlIGRyaXZlciBmb3IgYW4gZW5jb2RlciBjb25uZWN0ZWQgdG8gdGhlIEdQVQorICogdGhyb3VnaCBhbiBJMkMgYnVzLiBJbiBhZGRpdGlvbiB0byB0aGUgZW50cnkgcG9pbnRzIGluIEBpMmNfZHJpdmVyCisgKiBhbiBAZW5jb2Rlcl9pbml0IGZ1bmN0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gSXQgd2lsbCBiZSBjYWxsZWQgdG8KKyAqIGdpdmUgdGhlIGRyaXZlciBhbiBvcHBvcnR1bml0eSB0byBhbGxvY2F0ZSBhbnkgcGVyLWVuY29kZXIgZGF0YQorICogc3RydWN0dXJlcyBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgQHNsYXZlX2Z1bmNzIGFuZCAob3B0aW9uYWxseSkKKyAqIEBzbGF2ZV9wcml2IG1lbWJlcnMgb2YgQGVuY29kZXIuCisgKi8KK3N0cnVjdCBkcm1faTJjX2VuY29kZXJfZHJpdmVyIHsKKwlzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyOworCisJaW50ICgqZW5jb2Rlcl9pbml0KShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlICplbmNvZGVyKTsKKworfTsKKyNkZWZpbmUgdG9fZHJtX2kyY19lbmNvZGVyX2RyaXZlcih4KSBjb250YWluZXJfb2YoKHgpLAkJCVwKKwkJCQkJCSAgc3RydWN0IGRybV9pMmNfZW5jb2Rlcl9kcml2ZXIsIFwKKwkJCQkJCSAgaTJjX2RyaXZlcikKKworLyoqCisgKiBkcm1faTJjX2VuY29kZXJfZ2V0X2NsaWVudCAtIEdldCB0aGUgSTJDIGNsaWVudCBjb3JyZXNwb25kaW5nIHRvIGFuIGVuY29kZXIKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaTJjX2NsaWVudCAqZHJtX2kyY19lbmNvZGVyX2dldF9jbGllbnQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXJldHVybiAoc3RydWN0IGkyY19jbGllbnQgKil0b19lbmNvZGVyX3NsYXZlKGVuY29kZXIpLT5idXNfcHJpdjsKK30KKworLyoqCisgKiBkcm1faTJjX2VuY29kZXJfcmVnaXN0ZXIgLSBSZWdpc3RlciBhbiBJMkMgZW5jb2RlciBkcml2ZXIKKyAqIEBvd25lcjoJTW9kdWxlIGNvbnRhaW5pbmcgdGhlIGRyaXZlci4KKyAqIEBkcml2ZXI6CURyaXZlciB0byBiZSByZWdpc3RlcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBkcm1faTJjX2VuY29kZXJfcmVnaXN0ZXIoc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJCSAgIHN0cnVjdCBkcm1faTJjX2VuY29kZXJfZHJpdmVyICpkcml2ZXIpCit7CisJcmV0dXJuIGkyY19yZWdpc3Rlcl9kcml2ZXIob3duZXIsICZkcml2ZXItPmkyY19kcml2ZXIpOworfQorCisvKioKKyAqIGRybV9pMmNfZW5jb2Rlcl91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciBhbiBJMkMgZW5jb2RlciBkcml2ZXIKKyAqIEBkcml2ZXI6CURyaXZlciB0byBiZSB1bnJlZ2lzdGVyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm1faTJjX2VuY29kZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2kyY19lbmNvZGVyX2RyaXZlciAqZHJpdmVyKQoreworCWkyY19kZWxfZHJpdmVyKCZkcml2ZXItPmkyY19kcml2ZXIpOworfQorCit2b2lkIGRybV9pMmNfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZmZmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNyBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqCisgKiBEUk0gZnJhbWVidWZmZXIgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKKyAqIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKKyAqIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworICogRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKKyAqIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgICAgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+CisgKiAgICAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqLworI2lmbmRlZiBEUk1fRkJfSEVMUEVSX0gKKyNkZWZpbmUgRFJNX0ZCX0hFTFBFUl9ICisKK3N0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgeworCXVpbnQzMl90IGNydGNfaWQ7CisJc3RydWN0IGRybV9tb2RlX3NldCBtb2RlX3NldDsKK307CisKK3N0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHsKKwl2b2lkICgqZ2FtbWFfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKKwkJCSAgdTE2IGJsdWUsIGludCByZWdubyk7Cit9OworCitzdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgY3J0Y19jb3VudDsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICpjcnRjX2luZm87CisJc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgKmZ1bmNzOworCWludCBjb25uX2xpbWl0OworCXN0cnVjdCBsaXN0X2hlYWQga2VybmVsX2ZiX2xpc3Q7Cit9OworCitpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmZiX2NyZWF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHVpbnQzMl90IGZiX3dpZHRoLAorCQkJCQkJICAgdWludDMyX3QgZmJfaGVpZ2h0LAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV93aWR0aCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3B0cikpOworaW50IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsIGludCBjcnRjX2NvdW50LAorCQkJCSAgaW50IG1heF9jb25uKTsKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9mcmVlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIpOworaW50IGRybV9mYl9oZWxwZXJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitpbnQgZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2ludCBkcm1fZmJfaGVscGVyX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pOworaW50IGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2ludCBkcm1fZmJfaGVscGVyX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywKKwkJCSAgICB1bnNpZ25lZCByZWQsCisJCQkgICAgdW5zaWduZWQgZ3JlZW4sCisJCQkgICAgdW5zaWduZWQgYmx1ZSwKKwkJCSAgICB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOworCit2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZSh2b2lkKTsKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7Cit2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbWVtb3J5LmggYi9pbmNsdWRlL2RybS9kcm1fbWVtb3J5LmgKaW5kZXggNjNlNDI1Yi4uMTVhZjliMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21lbW9yeS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tZW1vcnkuaApAQCAtNDQsOCArNDQsNiBAQAogCiAjaWYgX19PU19IQVNfQUdQCiAKLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KICNpZmRlZiBIQVZFX1BBR0VfQUdQCiAjaW5jbHVkZSA8YXNtL2FncC5oPgogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tbS5oIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKaW5kZXggZjgzMzIwNy4uNjIzMjlmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21tLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKQEAgLTM3LDYgKzM3LDkgQEAKICAqIEdlbmVyaWMgcmFuZ2UgbWFuYWdlciBzdHJ1Y3RzCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNlbmRpZgogCiBzdHJ1Y3QgZHJtX21tX25vZGUgewogCXN0cnVjdCBsaXN0X2hlYWQgZmxfZW50cnk7CkBAIC05Niw0ICs5OSw4IEBACiAJcmV0dXJuIGJsb2NrLT5tbTsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworaW50IGRybV9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9tbSAqbW0pOworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggYWUzMDRjYy4uMWY5MDg0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC02OCwxMCArNjgsMTEgQEAKICNkZWZpbmUgRFJNX01PREVfRFBNU19PRkYJMwogCiAvKiBTY2FsaW5nIG1vZGUgb3B0aW9ucyAqLwotI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9OT05fR1BVCQkwCi0jZGVmaW5lIERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4JMQotI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRQkJMgotI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1QJCTMKKyNkZWZpbmUgRFJNX01PREVfU0NBTEVfTk9ORQkJMCAvKiBVbm1vZGlmaWVkIHRpbWluZyAoZGlzcGxheSBvcgorCQkJCQkgICAgIHNvZnR3YXJlIGNhbiBzdGlsbCBzY2FsZSkgKi8KKyNkZWZpbmUgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTgkxIC8qIEZ1bGwgc2NyZWVuLCBpZ25vcmUgYXNwZWN0ICovCisjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0NFTlRFUgkJMiAvKiBDZW50ZXJlZCwgbm8gc2NhbGluZyAqLworI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1QJCTMgLyogRnVsbCBzY3JlZW4sIHByZXNlcnZlIGFzcGVjdCAqLwogCiAvKiBEaXRoZXJpbmcgbW9kZSBvcHRpb25zICovCiAjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19PRkYJMApAQCAtMTQxLDYgKzE0Miw3IEBACiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUJNQogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPCTYKICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvbmVudAk4CisjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TQ0FSVAk5CiAKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24JMAogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBCQkxCkBAIC0xNTUsNiArMTU3LDcgQEAKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0CTEwCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQQkxMQogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIJMTIKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1RWCQkxMwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvciB7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9zeXNmcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4ZTAzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2RybV9zeXNmcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0RSTV9TWVNGU19IXworI2RlZmluZSBfRFJNX1NZU0ZTX0hfCisKKy8qKgorICogVGhpcyBtaW5pbWFsaXN0aWMgaW5jbHVkZSBmaWxlIGlzIGludGVuZGVkIGZvciB1c2VycyAocmVhZCBUVE0pIHRoYXQKKyAqIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgZnVsbCBkcm1QLmggZmlsZS4KKyAqLworCitleHRlcm4gaW50IGRybV9jbGFzc19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9jbGFzc19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCAyYmE2MWUxLi4zYjk5MzJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC04MDIsMTEgKzgwMiwxMiBAQAogCXVpbnQzMl90CWZsYWdzOwogfTsKIAotI2RlZmluZSBSQURFT05fVElMSU5HX01BQ1JPIDB4MQotI2RlZmluZSBSQURFT05fVElMSU5HX01JQ1JPIDB4MgotI2RlZmluZSBSQURFT05fVElMSU5HX1NXQVAgIDB4NAotI2RlZmluZSBSQURFT05fVElMSU5HX1NVUkZBQ0UgIDB4OCAvKiB0aGlzIG9iamVjdCByZXF1aXJlcyBhIHN1cmZhY2UKLQkJCQkgICAgKiB3aGVuIG1hcHBlZCAtIGkuZS4gZnJvbnQgYnVmZmVyICovCisjZGVmaW5lIFJBREVPTl9USUxJTkdfTUFDUk8gICAgICAgMHgxCisjZGVmaW5lIFJBREVPTl9USUxJTkdfTUlDUk8gICAgICAgMHgyCisjZGVmaW5lIFJBREVPTl9USUxJTkdfU1dBUF8xNkJJVCAgMHg0CisjZGVmaW5lIFJBREVPTl9USUxJTkdfU1dBUF8zMkJJVCAgMHg4CisjZGVmaW5lIFJBREVPTl9USUxJTkdfU1VSRkFDRSAgICAgMHgxMCAvKiB0aGlzIG9iamVjdCByZXF1aXJlcyBhIHN1cmZhY2UKKwkJCQkJKiB3aGVuIG1hcHBlZCAtIGkuZS4gZnJvbnQgYnVmZmVyICovCiAKIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfdGlsaW5nIHsKIAl1aW50MzJfdAloYW5kbGU7CkBAIC04OTksNiArOTAwLDcgQEAKICNkZWZpbmUgUkFERU9OX0lORk9fREVWSUNFX0lECQkweDAwCiAjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9HQl9QSVBFUwkweDAxCiAjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9aX1BJUEVTIAkweDAyCisjZGVmaW5lIFJBREVPTl9JTkZPX0FDQ0VMX1dPUktJTkcJMHgwMwogCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKIAl1aW50MzJfdAkJcmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCmluZGV4IGNkMjJhYjQuLjQ5MTE0NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaApAQCAtMTU1LDYgKzE1NSw3IEBACiAJICogTWVtYmVycyBjb25zdGFudCBhdCBpbml0LgogCSAqLwogCisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2I7CiAJc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXY7CiAJdW5zaWduZWQgbG9uZyBidWZmZXJfc3RhcnQ7CiAJZW51bSB0dG1fYm9fdHlwZSB0eXBlOwpAQCAtMjQ1LDE0ICsyNDYsMTUgQEAKICAqIHByZW1hcHBlZCByZWdpb24uCiAgKi8KIAorI2RlZmluZSBUVE1fQk9fTUFQX0lPTUVNX01BU0sgMHg4MAogc3RydWN0IHR0bV9ib19rbWFwX29iaiB7CiAJdm9pZCAqdmlydHVhbDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAllbnVtIHsKLQkJdHRtX2JvX21hcF9pb21hcCwKLQkJdHRtX2JvX21hcF92bWFwLAotCQl0dG1fYm9fbWFwX2ttYXAsCi0JCXR0bV9ib19tYXBfcHJlbWFwcGVkLAorCQl0dG1fYm9fbWFwX2lvbWFwICAgICAgICA9IDEgfCBUVE1fQk9fTUFQX0lPTUVNX01BU0ssCisJCXR0bV9ib19tYXBfdm1hcCAgICAgICAgID0gMiwKKwkJdHRtX2JvX21hcF9rbWFwICAgICAgICAgPSAzLAorCQl0dG1fYm9fbWFwX3ByZW1hcHBlZCAgICA9IDQgfCBUVE1fQk9fTUFQX0lPTUVNX01BU0ssCiAJfSBib19rbWFwX3R5cGU7CiB9OwogCkBAIC01MjIsOCArNTI0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqdHRtX2ttYXBfb2JqX3ZpcnR1YWwoc3RydWN0IHR0bV9ib19rbWFwX29iaiAqbWFwLAogCQkJCQkgYm9vbCAqaXNfaW9tZW0pCiB7Ci0JKmlzX2lvbWVtID0gKG1hcC0+Ym9fa21hcF90eXBlID09IHR0bV9ib19tYXBfaW9tYXAgfHwKLQkJICAgICBtYXAtPmJvX2ttYXBfdHlwZSA9PSB0dG1fYm9fbWFwX3ByZW1hcHBlZCk7CisJKmlzX2lvbWVtID0gISEobWFwLT5ib19rbWFwX3R5cGUgJiBUVE1fQk9fTUFQX0lPTUVNX01BU0spOwogCXJldHVybiBtYXAtPnZpcnR1YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCmluZGV4IGE2ODgyOWQuLmU4Y2Q2ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaApAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAidHRtL3R0bV9ib19hcGkuaCIKICNpbmNsdWRlICJ0dG0vdHRtX21lbW9yeS5oIgorI2luY2x1ZGUgInR0bS90dG1fbW9kdWxlLmgiCiAjaW5jbHVkZSAiZHJtX21tLmgiCiAjaW5jbHVkZSAibGludXgvd29ya3F1ZXVlLmgiCiAjaW5jbHVkZSAibGludXgvZnMuaCIKQEAgLTE2MSw3ICsxNjIsNyBAQAogCWxvbmcgbGFzdF9sb21lbV9wYWdlOwogCXVpbnQzMl90IHBhZ2VfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7Ci0Jc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXY7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2I7CiAJc3RydWN0IHR0bV9iYWNrZW5kICpiZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwpAQCAtMzY0LDYgKzM2NSw2NCBAQAogCXZvaWQgKCpmYXVsdF9yZXNlcnZlX25vdGlmeSkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0dG1fYm9fZ2xvYmFsX3JlZiAtIEFyZ3VtZW50IHRvIGluaXRpYWxpemUgYSBzdHJ1Y3QgdHRtX2JvX2dsb2JhbC4KKyAqLworCitzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYgeworCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSByZWY7CisJc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYjsKK307CisKKy8qKgorICogc3RydWN0IHR0bV9ib19nbG9iYWwgLSBCdWZmZXIgb2JqZWN0IGRyaXZlciBnbG9iYWwgZGF0YS4KKyAqCisgKiBAbWVtX2dsb2I6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgb2JqZWN0IGZvciBhY2NvdW50aW5nLgorICogQGR1bW15X3JlYWRfcGFnZTogUG9pbnRlciB0byBhIGR1bW15IHBhZ2UgdXNlZCBmb3IgbWFwcGluZyByZXF1ZXN0cworICogb2YgdW5wb3B1bGF0ZWQgcGFnZXMuCisgKiBAc2hyaW5rOiBBIHNocmluayBjYWxsYmFjayBvYmplY3QgdXNlZCBmb3IgYnVmZmVyIG9iamVjdCBzd2FwLgorICogQHR0bV9ib19leHRyYV9zaXplOiBFeHRyYSBzaXplIChzaXplb2Yoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0KSBleGNsdWRlZCkKKyAqIHVzZWQgYnkgYSBidWZmZXIgb2JqZWN0LiBUaGlzIGlzIGV4Y2x1ZGluZyBwYWdlIGFycmF5cyBhbmQgYmFja2luZyBwYWdlcy4KKyAqIEB0dG1fYm9fc2l6ZTogVGhpcyBpcyBAdHRtX2JvX2V4dHJhX3NpemUgKyBzaXplb2Yoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0KS4KKyAqIEBkZXZpY2VfbGlzdF9tdXRleDogTXV0ZXggcHJvdGVjdGluZyB0aGUgZGV2aWNlIGxpc3QuCisgKiBUaGlzIG11dGV4IGlzIGhlbGQgd2hpbGUgdHJhdmVyc2luZyB0aGUgZGV2aWNlIGxpc3QgZm9yIHBtIG9wdGlvbnMuCisgKiBAbHJ1X2xvY2s6IFNwaW5sb2NrIHByb3RlY3RpbmcgdGhlIGJvIHN1YnN5c3RlbSBscnUgbGlzdHMuCisgKiBAZGV2aWNlX2xpc3Q6IExpc3Qgb2YgYnVmZmVyIG9iamVjdCBkZXZpY2VzLgorICogQHN3YXBfbHJ1OiBMcnUgbGlzdCBvZiBidWZmZXIgb2JqZWN0cyB1c2VkIGZvciBzd2FwcGluZy4KKyAqLworCitzdHJ1Y3QgdHRtX2JvX2dsb2JhbCB7CisKKwkvKioKKwkgKiBDb25zdGFudCBhZnRlciBpbml0LgorCSAqLworCisJc3RydWN0IGtvYmplY3Qga29iajsKKwlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iOworCXN0cnVjdCBwYWdlICpkdW1teV9yZWFkX3BhZ2U7CisJc3RydWN0IHR0bV9tZW1fc2hyaW5rIHNocmluazsKKwlzaXplX3QgdHRtX2JvX2V4dHJhX3NpemU7CisJc2l6ZV90IHR0bV9ib19zaXplOworCXN0cnVjdCBtdXRleCBkZXZpY2VfbGlzdF9tdXRleDsKKwlzcGlubG9ja190IGxydV9sb2NrOworCisJLyoqCisJICogUHJvdGVjdGVkIGJ5IGRldmljZV9saXN0X211dGV4LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3Q7CisKKwkvKioKKwkgKiBQcm90ZWN0ZWQgYnkgdGhlIGxydV9sb2NrLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgc3dhcF9scnU7CisKKwkvKioKKwkgKiBJbnRlcm5hbCBwcm90ZWN0aW9uLgorCSAqLworCWF0b21pY190IGJvX2NvdW50OworfTsKKworCiAjZGVmaW5lIFRUTV9OVU1fTUVNX1RZUEVTIDgKIAogI2RlZmluZSBUVE1fQk9fUFJJVl9GTEFHX01PVklORyAgMAkvKiBCdWZmZXIgb2JqZWN0IGlzIG1vdmluZyBhbmQgbmVlZHMKQEAgLTM3MiwxNiArNDMxLDcgQEAKIC8qKgogICogc3RydWN0IHR0bV9ib19kZXZpY2UgLSBCdWZmZXIgb2JqZWN0IGRyaXZlciBkZXZpY2Utc3BlY2lmaWMgZGF0YS4KICAqCi0gKiBAbWVtX2dsb2I6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgb2JqZWN0IGZvciBhY2NvdW50aW5nLgogICogQGRyaXZlcjogUG9pbnRlciB0byBhIHN0cnVjdCB0dG1fYm9fZHJpdmVyIHN0cnVjdCBzZXR1cCBieSB0aGUgZHJpdmVyLgotICogQGNvdW50OiBDdXJyZW50IG51bWJlciBvZiBidWZmZXIgb2JqZWN0LgotICogQHBhZ2VzOiBDdXJyZW50IG51bWJlciBvZiBwaW5uZWQgcGFnZXMuCi0gKiBAZHVtbXlfcmVhZF9wYWdlOiBQb2ludGVyIHRvIGEgZHVtbXkgcGFnZSB1c2VkIGZvciBtYXBwaW5nIHJlcXVlc3RzCi0gKiBvZiB1bnBvcHVsYXRlZCBwYWdlcy4KLSAqIEBzaHJpbms6IEEgc2hyaW5rIGNhbGxiYWNrIG9iamVjdCB1c2VkIGZvciBidWZmcmUgb2JqZWN0IHN3YXAuCi0gKiBAdHRtX2JvX2V4dHJhX3NpemU6IEV4dHJhIHNpemUgKHNpemVvZihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QpIGV4Y2x1ZGVkKQotICogdXNlZCBieSBhIGJ1ZmZlciBvYmplY3QuIFRoaXMgaXMgZXhjbHVkaW5nIHBhZ2UgYXJyYXlzIGFuZCBiYWNraW5nIHBhZ2VzLgotICogQHR0bV9ib19zaXplOiBUaGlzIGlzIEB0dG1fYm9fZXh0cmFfc2l6ZSArIHNpemVvZihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QpLgogICogQG1hbjogQW4gYXJyYXkgb2YgbWVtX3R5cGVfbWFuYWdlcnMuCiAgKiBAYWRkcl9zcGFjZV9tbTogUmFuZ2UgbWFuYWdlciBmb3IgdGhlIGRldmljZSBhZGRyZXNzIHNwYWNlLgogICogbHJ1X2xvY2s6IFNwaW5sb2NrIHRoYXQgcHJvdGVjdHMgdGhlIGJ1ZmZlcitkZXZpY2UgbHJ1IGxpc3RzIGFuZApAQCAtMzk5LDMyICs0NDksMjEgQEAKIAkvKgogCSAqIENvbnN0YW50IGFmdGVyIGJvIGRldmljZSBpbml0IC8gYXRvbWljLgogCSAqLwotCi0Jc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZV9saXN0OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iOwogCXN0cnVjdCB0dG1fYm9fZHJpdmVyICpkcml2ZXI7Ci0Jc3RydWN0IHBhZ2UgKmR1bW15X3JlYWRfcGFnZTsKLQlzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgc2hyaW5rOwotCi0Jc2l6ZV90IHR0bV9ib19leHRyYV9zaXplOwotCXNpemVfdCB0dG1fYm9fc2l6ZTsKLQogCXJ3bG9ja190IHZtX2xvY2s7CisJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyIG1hbltUVE1fTlVNX01FTV9UWVBFU107CiAJLyoKIAkgKiBQcm90ZWN0ZWQgYnkgdGhlIHZtIGxvY2suCiAJICovCi0Jc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyIG1hbltUVE1fTlVNX01FTV9UWVBFU107CiAJc3RydWN0IHJiX3Jvb3QgYWRkcl9zcGFjZV9yYjsKIAlzdHJ1Y3QgZHJtX21tIGFkZHJfc3BhY2VfbW07CiAKIAkvKgotCSAqIE1pZ2h0IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gb25lIGxvY2sgcGVyIG1hbmFnZXIuCi0JICovCi0Jc3BpbmxvY2tfdCBscnVfbG9jazsKLQkvKgotCSAqIFByb3RlY3RlZCBieSB0aGUgbHJ1IGxvY2suCisJICogUHJvdGVjdGVkIGJ5IHRoZSBnbG9iYWw6bHJ1IGxvY2suCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBkZGVzdHJveTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHN3YXBfbHJ1OwogCiAJLyoKIAkgKiBQcm90ZWN0ZWQgYnkgbG9hZCAvIGZpcnN0b3BlbiAvIGxhc3RjbG9zZSAvdW5sb2FkIHN5bmMuCkBAIC02NDAsNiArNjc5LDkgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyAqYnVzX29mZnNldCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyAqYnVzX3NpemUpOwogCitleHRlcm4gdm9pZCB0dG1fYm9fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpOworZXh0ZXJuIGludCB0dG1fYm9fZ2xvYmFsX2luaXQoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpOworCiBleHRlcm4gaW50IHR0bV9ib19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldik7CiAKIC8qKgpAQCAtNjU3LDcgKzY5OSw3IEBACiAgKiAhMDogRmFpbHVyZS4KICAqLwogZXh0ZXJuIGludCB0dG1fYm9fZGV2aWNlX2luaXQoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCi0JCQkgICAgICBzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iLAorCQkJICAgICAgc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsCiAJCQkgICAgICBzdHJ1Y3QgdHRtX2JvX2RyaXZlciAqZHJpdmVyLAogCQkJICAgICAgdWludDY0X3QgZmlsZV9wYWdlX29mZnNldCwgYm9vbCBuZWVkX2RtYTMyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tZW1vcnkuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fbWVtb3J5LmgKaW5kZXggZDhiOGYwNC4uNjk4M2E3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX21lbW9yeS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAKIC8qKgogICogc3RydWN0IHR0bV9tZW1fc2hyaW5rIC0gY2FsbGJhY2sgdG8gc2hyaW5rIFRUTSBtZW1vcnkgdXNhZ2UuCkBAIC02MCwzNCArNjEsMzMgQEAKICAqIEBxdWV1ZTogV2FpdCBxdWV1ZSBmb3IgcHJvY2Vzc2VzIHN1c3BlbmRlZCB3YWl0aW5nIGZvciBtZW1vcnkuCiAgKiBAbG9jazogTG9jayB0byBwcm90ZWN0IHRoZSBAc2hyaW5rIC0gYW5kIHRoZSBtZW1vcnkgYWNjb3VudGluZyBtZW1iZXJzLAogICogdGhhdCBpcywgZXNzZW50aWFsbHkgdGhlIHdob2xlIHN0cnVjdHVyZSB3aXRoIHNvbWUgZXhjZXB0aW9ucy4KLSAqIEBlbWVyX21lbW9yeTogTG93bWVtIG1lbW9yeSBsaW1pdCBhdmFpbGFibGUgZm9yIHJvb3QuCi0gKiBAbWF4X21lbW9yeTogTG93bWVtIG1lbW9yeSBsaW1pdCBhdmFpbGFibGUgZm9yIG5vbi1yb290LgotICogQHN3YXBfbGltaXQ6IExvd21lbSBtZW1vcnkgbGltaXQgd2hlcmUgdGhlIHNocmluayB3b3JrcXVldWUga2lja3MgaW4uCi0gKiBAdXNlZF9tZW1vcnk6IEN1cnJlbnRseSB1c2VkIGxvd21lbSBtZW1vcnkuCi0gKiBAdXNlZF90b3RhbF9tZW1vcnk6IEN1cnJlbnRseSB1c2VkIHRvdGFsIChsb3dtZW0gKyBoaWdobWVtKSBtZW1vcnkuCi0gKiBAdG90YWxfbWVtb3J5X3N3YXBfbGltaXQ6IFRvdGFsIG1lbW9yeSBsaW1pdCB3aGVyZSB0aGUgc2hyaW5rIHdvcmtxdWV1ZQotICoga2lja3MgaW4uCi0gKiBAbWF4X3RvdGFsX21lbW9yeTogVG90YWwgbWVtb3J5IGF2YWlsYWJsZSB0byBub24tcm9vdCBwcm9jZXNzZXMuCi0gKiBAZW1lcl90b3RhbF9tZW1vcnk6IFRvdGFsIG1lbW9yeSBhdmFpbGFibGUgdG8gcm9vdCBwcm9jZXNzZXMuCisgKiBAem9uZXM6IEFycmF5IG9mIHBvaW50ZXJzIHRvIGFjY291bnRpbmcgem9uZXMuCisgKiBAbnVtX3pvbmVzOiBOdW1iZXIgb2YgcG9wdWxhdGVkIGVudHJpZXMgaW4gdGhlIEB6b25lcyBhcnJheS4KKyAqIEB6b25lX2tlcm5lbDogUG9pbnRlciB0byB0aGUga2VybmVsIHpvbmUuCisgKiBAem9uZV9oaWdobWVtOiBQb2ludGVyIHRvIHRoZSBoaWdobWVtIHpvbmUgaWYgdGhlcmUgaXMgb25lLgorICogQHpvbmVfZG1hMzI6IFBvaW50ZXIgdG8gdGhlIGRtYTMyIHpvbmUgaWYgdGhlcmUgaXMgb25lLgogICoKICAqIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcyBub3QgcGVyIGRldmljZS4gSXQgc2hvdWxkIGJlIGdsb2JhbCBmb3IgYWxsCiAgKiBncmFwaGljcyBkZXZpY2VzLgogICovCiAKKyNkZWZpbmUgVFRNX01FTV9NQVhfWk9ORVMgMgorc3RydWN0IHR0bV9tZW1fem9uZTsKIHN0cnVjdCB0dG1fbWVtX2dsb2JhbCB7CisJc3RydWN0IGtvYmplY3Qga29iajsKIAlzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgKnNocmluazsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3dhcF9xdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKIAlzcGlubG9ja190IGxvY2s7Ci0JdWludDY0X3QgZW1lcl9tZW1vcnk7Ci0JdWludDY0X3QgbWF4X21lbW9yeTsKLQl1aW50NjRfdCBzd2FwX2xpbWl0OwotCXVpbnQ2NF90IHVzZWRfbWVtb3J5OwotCXVpbnQ2NF90IHVzZWRfdG90YWxfbWVtb3J5OwotCXVpbnQ2NF90IHRvdGFsX21lbW9yeV9zd2FwX2xpbWl0OwotCXVpbnQ2NF90IG1heF90b3RhbF9tZW1vcnk7Ci0JdWludDY0X3QgZW1lcl90b3RhbF9tZW1vcnk7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZXNbVFRNX01FTV9NQVhfWk9ORVNdOworCXVuc2lnbmVkIGludCBudW1fem9uZXM7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZV9rZXJuZWw7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lX2hpZ2htZW07CisjZWxzZQorCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmVfZG1hMzI7CisjZW5kaWYKIH07CiAKIC8qKgpAQCAtMTQ2LDggKzE0NiwxMyBAQAogZXh0ZXJuIGludCB0dG1fbWVtX2dsb2JhbF9pbml0KHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYik7CiBleHRlcm4gdm9pZCB0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYik7CiBleHRlcm4gaW50IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwgdWludDY0X3QgbWVtb3J5LAotCQkJCWJvb2wgbm9fd2FpdCwgYm9vbCBpbnRlcnJ1cHRpYmxlLCBib29sIGhpbWVtKTsKKwkJCQlib29sIG5vX3dhaXQsIGJvb2wgaW50ZXJydXB0aWJsZSk7CiBleHRlcm4gdm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKLQkJCQl1aW50NjRfdCBhbW91bnQsIGJvb2wgaGltZW0pOworCQkJCXVpbnQ2NF90IGFtb3VudCk7CitleHRlcm4gaW50IHR0bV9tZW1fZ2xvYmFsX2FsbG9jX3BhZ2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICBib29sIG5vX3dhaXQsIGJvb2wgaW50ZXJydXB0aWJsZSk7CitleHRlcm4gdm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlX3BhZ2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHNpemVfdCB0dG1fcm91bmRfcG90KHNpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tb2R1bGUuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fbW9kdWxlLmgKaW5kZXggZDFkNDMzOC4uY2Y0MTZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX21vZHVsZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIF9UVE1fTU9EVUxFX0hfCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KK3N0cnVjdCBrb2JqZWN0OwogCiAjZGVmaW5lIFRUTV9QRlggIltUVE1dICIKIApAQCAtNTQsNSArNTUsNiBAQAogZXh0ZXJuIHZvaWQgdHRtX2dsb2JhbF9yZWxlYXNlKHZvaWQpOwogZXh0ZXJuIGludCB0dG1fZ2xvYmFsX2l0ZW1fcmVmKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKIGV4dGVybiB2b2lkIHR0bV9nbG9iYWxfaXRlbV91bnJlZihzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZik7CitleHRlcm4gc3RydWN0IGtvYmplY3QgKnR0bV9nZXRfa29iaih2b2lkKTsKIAogI2VuZGlmIC8qIF9UVE1fTU9EVUxFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IDM0MzIxY2YuLmRmY2Q5MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC00MSw4ICs0MSw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0KIAogZW51bSBhY3BpX2lycV9tb2RlbF9pZCB7CiAJQUNQSV9JUlFfTU9ERUxfUElDID0gMCwKQEAgLTIxOSwxMCArMjE3LDggQEAKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19BQ1BJX1ZJREVPKSB8fCBkZWZpbmVkKENPTkZJR19BQ1BJX1ZJREVPX01PRFVMRSkgKi8KIAogZXh0ZXJuIGludCBhY3BpX2JsYWNrbGlzdGVkKHZvaWQpOwotI2lmZGVmIENPTkZJR19ETUkKIGV4dGVybiB2b2lkIGFjcGlfZG1pX29zaV9saW51eChpbnQgZW5hYmxlLCBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCk7CiBleHRlcm4gaW50IGFjcGlfb3NpX3NldHVwKGNoYXIgKnN0cik7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKIGludCBhY3BpX2dldF9weG0oYWNwaV9oYW5kbGUgaGFuZGxlKTsKQEAgLTI5Miw3ICsyODgsMTAgQEAKIGV4dGVybiBhY3BpX3N0YXR1cyBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgYWNwaV9lYXJseV9pbml0KHZvaWQpOwogCi0jZWxzZQkvKiBDT05GSUdfQUNQSSAqLworI2Vsc2UJLyogIUNPTkZJR19BQ1BJICovCisKKyNkZWZpbmUgYWNwaV9kaXNhYmxlZCAxCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2Vhcmx5X2luaXQodm9pZCkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2FjcGlfYm9vdF9pbml0KHZvaWQpCkBAIC0zMzEsNSArMzMwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcjsKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfdGFibGVfcGFyc2UoY2hhciAqaWQsCisJCQkJaW50ICgqaGFuZGxlcikoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopKQoreworCXJldHVybiAtMTsKK30KICNlbmRpZgkvKiAhQ09ORklHX0FDUEkgKi8KICNlbmRpZgkvKl9MSU5VWF9BQ1BJX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9haW8uaCBiL2luY2x1ZGUvbGludXgvYWlvLmgKaW5kZXggNDdmN2Q5My4uYWVhMjE5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Fpby5oCkBAIC0yMjUsOCArMjI1LDYgQEAKIAogI2RlZmluZSBpb193YWl0X3RvX2tpb2NiKHdhaXQpIGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3Qga2lvY2IsIGtpX3dhaXQpCiAKLSNpbmNsdWRlIDxsaW51eC9haW9fYWJpLmg+Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGtpb2NiICpsaXN0X2tpb2NiKHN0cnVjdCBsaXN0X2hlYWQgKmgpCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkoaCwgc3RydWN0IGtpb2NiLCBraV9saXN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW5vbl9pbm9kZXMuaCBiL2luY2x1ZGUvbGludXgvYW5vbl9pbm9kZXMuaAppbmRleCBlMGEwY2RjLi42OWEyMWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fub25faW5vZGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbm9uX2lub2Rlcy5oCkBAIC04LDYgKzgsOSBAQAogI2lmbmRlZiBfTElOVVhfQU5PTl9JTk9ERVNfSAogI2RlZmluZSBfTElOVVhfQU5PTl9JTk9ERVNfSAogCitzdHJ1Y3QgZmlsZSAqYW5vbl9pbm9kZV9nZXRmaWxlKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJCQl2b2lkICpwcml2LCBpbnQgZmxhZ3MpOwogaW50IGFub25faW5vZGVfZ2V0ZmQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKIAkJICAgICB2b2lkICpwcml2LCBpbnQgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IGJjM2FiNzAuLmRkOTdmYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0xMzIsOSArMTMyLDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX0FMTE9DX1JFTUFQICovCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgbnJfa2VybmVsX3BhZ2VzOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBucl9hbGxfcGFnZXM7Ci0KIGV4dGVybiB2b2lkICphbGxvY19sYXJnZV9zeXN0ZW1faGFzaChjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGJ1Y2tldHNpemUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIG51bWVudHJpZXMsCkBAIC0xNDUsNiArMTQyLDggQEAKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpOwogCiAjZGVmaW5lIEhBU0hfRUFSTFkJMHgwMDAwMDAwMQkvKiBBbGxvY2F0aW5nIGR1cmluZyBlYXJseSBib290PyAqLworI2RlZmluZSBIQVNIX1NNQUxMCTB4MDAwMDAwMDIJLyogc3ViLXBhZ2UgYWxsb2NhdGlvbiBhbGxvd2VkLCBtaW4KKwkJCQkJICogc2hpZnQgcGFzc2VkIHZpYSAqX2hhc2hfc2hpZnQgKi8KIAogLyogT25seSBOVU1BIG5lZWRzIGhhc2ggZGlzdHJpYnV0aW9uLiA2NGJpdCBOVU1BIGFyY2hpdGVjdHVyZXMgaGF2ZQogICogc3VmZmljaWVudCB2bWFsbG9jIHNwYWNlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCBjMzAyMTEwLi5jOGYyYTVmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTcsNyArNyw3IEBACiAgKgogICogU2VlIGhlcmUgZm9yIHRoZSBsaWJjYXAgbGlicmFyeSAoIlBPU0lYIGRyYWZ0IiBjb21wbGlhbmNlKToKICAqCi0gKiBmdHA6Ly9saW51eC5rZXJuZWwub3JnL3B1Yi9saW51eC9saWJzL3NlY3VyaXR5L2xpbnV4LXByaXZzL2tlcm5lbC0yLjYvCisgKiBmdHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvbGlicy9zZWN1cml0eS9saW51eC1wcml2cy9rZXJuZWwtMi42LwogICovCiAKICNpZm5kZWYgX0xJTlVYX0NBUEFCSUxJVFlfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbl9wcm9jLmggYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAppbmRleCBiODEyNWIyLi40N2RhYzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApAQCAtNTIsNiArNTIsNyBAQAogCQlQUk9DX0VWRU5UX0VYRUMgPSAweDAwMDAwMDAyLAogCQlQUk9DX0VWRU5UX1VJRCAgPSAweDAwMDAwMDA0LAogCQlQUk9DX0VWRU5UX0dJRCAgPSAweDAwMDAwMDQwLAorCQlQUk9DX0VWRU5UX1NJRCAgPSAweDAwMDAwMDgwLAogCQkvKiAibmV4dCIgc2hvdWxkIGJlIDB4MDAwMDA0MDAgKi8KIAkJLyogImxhc3QiIGlzIHRoZSBsYXN0IHByb2Nlc3MgZXZlbnQ6IGV4aXQgKi8KIAkJUFJPQ19FVkVOVF9FWElUID0gMHg4MDAwMDAwMApAQCAtODksNiArOTAsMTEgQEAKIAkJCX0gZTsKIAkJfSBpZDsKIAorCQlzdHJ1Y3Qgc2lkX3Byb2NfZXZlbnQgeworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CisJCX0gc2lkOworCiAJCXN0cnVjdCBleGl0X3Byb2NfZXZlbnQgewogCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CiAJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CkBAIC0xMDIsNiArMTA4LDcgQEAKIHZvaWQgcHJvY19mb3JrX2Nvbm5lY3RvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogdm9pZCBwcm9jX2V4ZWNfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiB2b2lkIHByb2NfaWRfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHdoaWNoX2lkKTsKK3ZvaWQgcHJvY19zaWRfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiB2b2lkIHByb2NfZXhpdF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19mb3JrX2Nvbm5lY3RvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC0xMTQsNiArMTIxLDkgQEAKIAkJCQkgICAgIGludCB3aGljaF9pZCkKIHt9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX3NpZF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQore30KKwogc3RhdGljIGlubGluZSB2b2lkIHByb2NfZXhpdF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoge30KICNlbmRpZgkvKiBDT05GSUdfUFJPQ19FVkVOVFMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKaW5kZXggNzk2ZGYxMi4uOWIxZDQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKQEAgLTcxNSw2ICs3MTUsMTggQEAKIH0KIAogLyoqCisgKiBjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdSAtIGF0b21pY2FsbHkgdGVzdCBhbmQgY2xlYXIgYSBjcHUgaW4gYSBjcHVtYXNrCisgKiBAY3B1OiBjcHUgbnVtYmVyICg8IG5yX2NwdV9pZHMpCisgKiBAY3B1bWFzazogdGhlIGNwdW1hc2sgcG9pbnRlcgorICoKKyAqIHRlc3RfYW5kX2NsZWFyX2JpdCB3cmFwcGVyIGZvciBjcHVtYXNrcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChjcHVtYXNrX2NoZWNrKGNwdSksIGNwdW1hc2tfYml0cyhjcHVtYXNrKSk7Cit9CisKKy8qKgogICogY3B1bWFza19zZXRhbGwgLSBzZXQgYWxsIGNwdXMgKDwgbnJfY3B1X2lkcykgaW4gYSBjcHVtYXNrCiAgKiBAZHN0cDogdGhlIGNwdW1hc2sgcG9pbnRlcgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IGZiMzcxNjAuLjRlMzM4N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0xNzYsMjMgKzE3Niw3IEBACiBleHRlcm4gdm9pZCBfX3ZhbGlkYXRlX3Byb2Nlc3NfY3JlZHMoc3RydWN0IHRhc2tfc3RydWN0ICosCiAJCQkJICAgICBjb25zdCBjaGFyICosIHVuc2lnbmVkKTsKIAotc3RhdGljIGlubGluZSBib29sIGNyZWRzX2FyZV9pbnZhbGlkKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQotewotCWlmIChjcmVkLT5tYWdpYyAhPSBDUkVEX01BR0lDKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoYXRvbWljX3JlYWQoJmNyZWQtPnVzYWdlKSA8IGF0b21pY19yZWFkKCZjcmVkLT5zdWJzY3JpYmVycykpCi0JCXJldHVybiB0cnVlOwotI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYCi0JaWYgKHNlbGludXhfaXNfZW5hYmxlZCgpKSB7Ci0JCWlmICgodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPCBQQUdFX1NJWkUpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKCgqKHUzMiAqKWNyZWQtPnNlY3VyaXR5ICYgMHhmZmZmZmYwMCkgPT0KLQkJICAgIChQT0lTT05fRlJFRSA8PCAyNCB8IFBPSVNPTl9GUkVFIDw8IDE2IHwgUE9JU09OX0ZSRUUgPDwgOCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gZmFsc2U7Ci19CitleHRlcm4gYm9vbCBjcmVkc19hcmVfaW52YWxpZChjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZhbGlkYXRlX2NyZWRzKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAogCQkJCSAgICBjb25zdCBjaGFyICpmaWxlLCB1bnNpZ25lZCBsaW5lKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCmluZGV4IDFmYmRlYTQuLmE1MDQ5ZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTQ5OSw2ICs0OTksNyBAQAogCQl2b2lkIF9faW9tZW0gKnA5MDUwOwogCQlzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKnA5MDYwOwogCX0gY3RsX2FkZHI7CisJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsJLyogY3l6IHNwZWNpZmljICovCiAJaW50IGlycTsKIAl1bnNpZ25lZCBpbnQgbnVtX2NoaXBzOwkvKiAwIGlmIGNhcmQgYWJzZW50LCAtMSBpZiBaL1BDSSwgZWxzZSBZICovCiAJdW5zaWduZWQgaW50IGZpcnN0X2xpbmU7CS8qIG1pbm9yIG51bWJlciBvZiBmaXJzdCBjaGFubmVsIG9uIGNhcmQgKi8KQEAgLTU0MSw2ICs1NDIsMTUgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICBtYWdpYzsKIAlzdHJ1Y3QgdHR5X3BvcnQJCXBvcnQ7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQJKmNhcmQ7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJCX0gY3l5OworCQlzdHJ1Y3QgeworCQkJc3RydWN0IENIX0NUUkwgX19pb21lbQkqY2hfY3RybDsKKwkJCXN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtCSpidWZfY3RybDsKKwkJfSBjeXo7CisJfSB1OwogCWludAkJCWxpbmU7CiAJaW50CQkJZmxhZ3M7IAkJLyogZGVmaW5lZCBpbiB0dHkuaCAqLwogCWludCAgICAgICAgICAgICAgICAgICAgIHR5cGU7CQkvKiBVQVJUIHR5cGUgKi8KQEAgLTU2OCw3ICs1NzgsNiBAQAogCXN0cnVjdCBjeWNsYWRlc19pZGxlX3N0YXRzCWlkbGVfc3RhdHM7CiAJc3RydWN0IGN5Y2xhZGVzX2ljb3VudAlpY291bnQ7CiAJc3RydWN0IGNvbXBsZXRpb24gICAgICAgc2h1dGRvd25fd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBkZWx0YV9tc3Jfd2FpdDsKIAlpbnQgdGhyb3R0bGU7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCA4NDdiNzYzLi5hY2EzMWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTE5Myw3ICsxOTMsNyBAQAogCXN0cnVjdCBrb2JqZWN0CQkJKmRldl9rb2JqOwogCiAJaW50ICgqZGV2X3VldmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwotCWNoYXIgKigqbm9kZW5hbWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJY2hhciAqKCpkZXZub2RlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSk7CiAKIAl2b2lkICgqY2xhc3NfcmVsZWFzZSkoc3RydWN0IGNsYXNzICpjbGFzcyk7CiAJdm9pZCAoKmRldl9yZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzOwogCWludCAoKnVldmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwotCWNoYXIgKigqbm9kZW5hbWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJY2hhciAqKCpkZXZub2RlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSk7CiAJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIAljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CkBAIC00ODcsNyArNDg3LDggQEAKIGV4dGVybiBpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5ld19uYW1lKTsKIGV4dGVybiBpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50LAogCQkgICAgICAgZW51bSBkcG1fb3JkZXIgZHBtX29yZGVyKTsKLWV4dGVybiBjb25zdCBjaGFyICpkZXZpY2VfZ2V0X25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqKnRtcCk7CitleHRlcm4gY29uc3QgY2hhciAqZGV2aWNlX2dldF9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBtb2RlX3QgKm1vZGUsIGNvbnN0IGNoYXIgKip0bXApOwogZXh0ZXJuIHZvaWQgKmRldl9nZXRfZHJ2ZGF0YShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZGV2X3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCmluZGV4IDUxYzhkMmQuLmI2Y2I1NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaApAQCAtMTczLDcgKzE3Myw4IEBACiB0eXBlZGVmIGVudW0gZmVfdHJhbnNtaXRfbW9kZSB7CiAJVFJBTlNNSVNTSU9OX01PREVfMkssCiAJVFJBTlNNSVNTSU9OX01PREVfOEssCi0JVFJBTlNNSVNTSU9OX01PREVfQVVUTworCVRSQU5TTUlTU0lPTl9NT0RFX0FVVE8sCisJVFJBTlNNSVNTSU9OX01PREVfNEsKIH0gZmVfdHJhbnNtaXRfbW9kZV90OwogCiB0eXBlZGVmIGVudW0gZmVfYmFuZHdpZHRoIHsKQEAgLTI2OCwxNSArMjY5LDQyIEBACiAjZGVmaW5lIERUVl9GRV9DQVBBQklMSVRZCTE2CiAjZGVmaW5lIERUVl9ERUxJVkVSWV9TWVNURU0JMTcKIAotI2RlZmluZSBEVFZfQVBJX1ZFUlNJT04JCQkJMzUKLSNkZWZpbmUgRFRWX0FQSV9WRVJTSU9OCQkJCTM1Ci0jZGVmaW5lIERUVl9DT0RFX1JBVEVfSFAJCQkzNgotI2RlZmluZSBEVFZfQ09ERV9SQVRFX0xQCQkJMzcKLSNkZWZpbmUgRFRWX0dVQVJEX0lOVEVSVkFMCQkJMzgKLSNkZWZpbmUgRFRWX1RSQU5TTUlTU0lPTl9NT0RFCQkJMzkKLSNkZWZpbmUgRFRWX0hJRVJBUkNIWQkJCQk0MAorLyogSVNEQi1UIGFuZCBJU0RCLVRzYiAqLworI2RlZmluZSBEVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT04JMTgKKyNkZWZpbmUgRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORwkxOQogCi0jZGVmaW5lIERUVl9NQVhfQ09NTUFORAkJCQlEVFZfSElFUkFSQ0hZCisjZGVmaW5lIERUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lECTIwCisjZGVmaW5lIERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWAkyMQorI2RlZmluZSBEVFZfSVNEQlRfU0JfU0VHTUVOVF9DT1VOVAkyMgorCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfRkVDCQkJMjMKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OCQkyNAorI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQJCTI1CisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkcJMjYKKworI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJCX0ZFQwkJCTI3CisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkJfTU9EVUxBVElPTgkJMjgKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQl9TRUdNRU5UX0NPVU5UCQkyOQorI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJCX1RJTUVfSU5URVJMRUFWSU5HCTMwCisKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQ19GRUMJCQkzMQorI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJDX01PRFVMQVRJT04JCTMyCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkNfU0VHTUVOVF9DT1VOVAkJMzMKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORwkzNAorCisjZGVmaW5lIERUVl9BUElfVkVSU0lPTgkJMzUKKworI2RlZmluZSBEVFZfQ09ERV9SQVRFX0hQCTM2CisjZGVmaW5lIERUVl9DT0RFX1JBVEVfTFAJMzcKKyNkZWZpbmUgRFRWX0dVQVJEX0lOVEVSVkFMCTM4CisjZGVmaW5lIERUVl9UUkFOU01JU1NJT05fTU9ERQkzOQorI2RlZmluZSBEVFZfSElFUkFSQ0hZCQk0MAorCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUl9FTkFCTEVECTQxCisKKyNkZWZpbmUgRFRWX0lTREJTX1RTX0lECQk0MgorCisjZGVmaW5lIERUVl9NQVhfQ09NTUFORAkJCQlEVFZfSVNEQlNfVFNfSUQKIAogdHlwZWRlZiBlbnVtIGZlX3BpbG90IHsKIAlQSUxPVF9PTiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL3ZlcnNpb24uaCBiL2luY2x1ZGUvbGludXgvZHZiL3ZlcnNpb24uaAppbmRleCAyNWI4MjNiLi41NDBiMDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oCkBAIC0yNCw2ICsyNCw2IEBACiAjZGVmaW5lIF9EVkJWRVJTSU9OX0hfCiAKICNkZWZpbmUgRFZCX0FQSV9WRVJTSU9OIDUKLSNkZWZpbmUgRFZCX0FQSV9WRVJTSU9OX01JTk9SIDAKKyNkZWZpbmUgRFZCX0FQSV9WRVJTSU9OX01JTk9SIDEKIAogI2VuZGlmIC8qX0RWQlZFUlNJT05fSF8qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldmVudGZkLmggYi9pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaAppbmRleCAzYjg1YmE2Li45NGRkMTAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWZkZWYgQ09ORklHX0VWRU5URkQKIAorc3RydWN0IGZpbGUgKmV2ZW50ZmRfZmlsZV9jcmVhdGUodW5zaWduZWQgaW50IGNvdW50LCBpbnQgZmxhZ3MpOwogc3RydWN0IGV2ZW50ZmRfY3R4ICpldmVudGZkX2N0eF9nZXQoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgpOwogdm9pZCBldmVudGZkX2N0eF9wdXQoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgpOwogc3RydWN0IGZpbGUgKmV2ZW50ZmRfZmdldChpbnQgZmQpOwpAQCAtNDAsNiArNDEsMTEgQEAKICAqIFVnbHkgdWdseSB1Z2x5IGVycm9yIGxheWVyIHRvIHN1cHBvcnQgbW9kdWxlcyB0aGF0IHVzZXMgZXZlbnRmZCBidXQKICAqIHByZXRlbmQgdG8gd29yayBpbiAhQ09ORklHX0VWRU5URkQgY29uZmlndXJhdGlvbnMuIE5hbWVseSwgQUlPLgogICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICpldmVudGZkX2ZpbGVfY3JlYXRlKHVuc2lnbmVkIGludCBjb3VudCwgaW50IGZsYWdzKQoreworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudGZkX2N0eCAqZXZlbnRmZF9jdHhfZmRnZXQoaW50IGZkKQogewogCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCmluZGV4IDE5MmQxZTQzLi43ZTFkNGRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCkBAIC0xMzQsMjAgKzEzNCw2IEBACiAJdTMyIHRvcG9sb2d5X21hcFsoQ1NSX1RPUE9MT0dZX01BUF9FTkQgLSBDU1JfVE9QT0xPR1lfTUFQKSAvIDRdOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfY2FyZCAqZndfY2FyZF9nZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCi17Ci0Ja3JlZl9nZXQoJmNhcmQtPmtyZWYpOwotCi0JcmV0dXJuIGNhcmQ7Ci19Ci0KLXZvaWQgZndfY2FyZF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGZ3X2NhcmRfcHV0KHN0cnVjdCBmd19jYXJkICpjYXJkKQotewotCWtyZWZfcHV0KCZjYXJkLT5rcmVmLCBmd19jYXJkX3JlbGVhc2UpOwotfQotCiBzdHJ1Y3QgZndfYXR0cmlidXRlX2dyb3VwIHsKIAlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncm91cHNbMl07CiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBncm91cDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oIGIvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKaW5kZXggNDVmZjE4NC4uMWQ3NDdmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKKysrIGIvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKQEAgLTMxLDEwICszMSwzMiBAQAogCX07CiB9OwogCi0jZGVmaW5lIEZMRVhfQVJSQVlfSU5JVChzaXplLCB0b3RhbCkgeyB7IHtcCi0JLmVsZW1lbnRfc2l6ZSA9IChzaXplKSwJCVwKLQkudG90YWxfbnJfZWxlbWVudHMgPSAodG90YWwpLAlcCi19IH0gfQorLyogTnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gYmFzZSBzdHJ1Y3QgZmxleF9hcnJheSwgZXhjbHVkaW5nIG1ldGFkYXRhICovCisjZGVmaW5lIEZMRVhfQVJSQVlfQkFTRV9CWVRFU19MRUZUCQkJCQlcCisJKEZMRVhfQVJSQVlfQkFTRV9TSVpFIC0gb2Zmc2V0b2Yoc3RydWN0IGZsZXhfYXJyYXksIHBhcnRzKSkKKworLyogTnVtYmVyIG9mIHBvaW50ZXJzIGluIGJhc2UgdG8gc3RydWN0IGZsZXhfYXJyYXlfcGFydCBwYWdlcyAqLworI2RlZmluZSBGTEVYX0FSUkFZX05SX0JBU0VfUFRSUwkJCQkJCVwKKwkoRkxFWF9BUlJBWV9CQVNFX0JZVEVTX0xFRlQgLyBzaXplb2Yoc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqKSkKKworLyogTnVtYmVyIG9mIGVsZW1lbnRzIG9mIHNpemUgdGhhdCBmaXQgaW4gc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqLworI2RlZmluZSBGTEVYX0FSUkFZX0VMRU1FTlRTX1BFUl9QQVJUKHNpemUpCQkJCVwKKwkoRkxFWF9BUlJBWV9QQVJUX1NJWkUgLyBzaXplKQorCisvKgorICogRGVmaW5lcyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZsZXggYXJyYXkgYW5kIGVuc3VyZXMgaXRzIHBhcmFtZXRlcnMgYXJlCisgKiB2YWxpZC4KKyAqLworI2RlZmluZSBERUZJTkVfRkxFWF9BUlJBWShfX2FycmF5bmFtZSwgX19lbGVtZW50X3NpemUsIF9fdG90YWwpCQlcCisJc3RydWN0IGZsZXhfYXJyYXkgX19hcnJheW5hbWUgPSB7IHsgewkJCQlcCisJCS5lbGVtZW50X3NpemUgPSAoX19lbGVtZW50X3NpemUpLAkJCVwKKwkJLnRvdGFsX25yX2VsZW1lbnRzID0gKF9fdG90YWwpLAkJCQlcCisJfSB9IH07CQkJCQkJCQlcCisJc3RhdGljIGlubGluZSB2b2lkIF9fYXJyYXluYW1lIyNfaW52YWxpZF9wYXJhbWV0ZXIodm9pZCkJXAorCXsJCQkJCQkJCVwKKwkJQlVJTERfQlVHX09OKChfX3RvdGFsKSA+IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTICoJXAorCQkJRkxFWF9BUlJBWV9FTEVNRU5UU19QRVJfUEFSVChfX2VsZW1lbnRfc2l6ZSkpOwlcCisJfQogCiBzdHJ1Y3QgZmxleF9hcnJheSAqZmxleF9hcnJheV9hbGxvYyhpbnQgZWxlbWVudF9zaXplLCB1bnNpZ25lZCBpbnQgdG90YWwsCiAJCWdmcF90IGZsYWdzKTsKQEAgLTQ0LDYgKzY2LDggQEAKIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICpmYSk7CiBpbnQgZmxleF9hcnJheV9wdXQoc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgZWxlbWVudF9uciwgdm9pZCAqc3JjLAogCQlnZnBfdCBmbGFncyk7CitpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKIHZvaWQgKmZsZXhfYXJyYXlfZ2V0KHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpOworaW50IGZsZXhfYXJyYXlfc2hyaW5rKHN0cnVjdCBmbGV4X2FycmF5ICpmYSk7CiAKICNlbmRpZiAvKiBfRkxFWF9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggOTAxNjJmYi4uNTE4MDM1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTA2Niw4ICsxMDY2LDggQEAKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqCWZsX2Zhc3luYzsgLyogZm9yIGxlYXNlIGJyZWFrIG5vdGlmaWNhdGlvbnMgKi8KIAl1bnNpZ25lZCBsb25nIGZsX2JyZWFrX3RpbWU7CS8qIGZvciBub25ibG9ja2luZyBsZWFzZSBicmVha3MgKi8KIAotCXN0cnVjdCBmaWxlX2xvY2tfb3BlcmF0aW9ucyAqZmxfb3BzOwkvKiBDYWxsYmFja3MgZm9yIGZpbGVzeXN0ZW1zICovCi0Jc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zICpmbF9sbW9wczsJLyogQ2FsbGJhY2tzIGZvciBsb2NrbWFuYWdlcnMgKi8KKwljb25zdCBzdHJ1Y3QgZmlsZV9sb2NrX29wZXJhdGlvbnMgKmZsX29wczsJLyogQ2FsbGJhY2tzIGZvciBmaWxlc3lzdGVtcyAqLworCWNvbnN0IHN0cnVjdCBsb2NrX21hbmFnZXJfb3BlcmF0aW9ucyAqZmxfbG1vcHM7CS8qIENhbGxiYWNrcyBmb3IgbG9ja21hbmFnZXJzICovCiAJdW5pb24gewogCQlzdHJ1Y3QgbmZzX2xvY2tfaW5mbwluZnNfZmw7CiAJCXN0cnVjdCBuZnM0X2xvY2tfaW5mbwluZnM0X2ZsOwpAQCAtMTMxOCw4ICsxMzE4LDggQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcJc19tYXhieXRlczsJLyogTWF4IGZpbGUgc2l6ZSAqLwogCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlCSpzX3R5cGU7CiAJY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMJKnNfb3A7Ci0Jc3RydWN0IGRxdW90X29wZXJhdGlvbnMJKmRxX29wOwotIAlzdHJ1Y3QgcXVvdGFjdGxfb3BzCSpzX3Fjb3A7CisJY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMJKmRxX29wOworCWNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMJKnNfcWNvcDsKIAljb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgKnNfZXhwb3J0X29wOwogCXVuc2lnbmVkIGxvbmcJCXNfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZwkJc19tYWdpYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCmluZGV4IGRjM2IxMzIuLjNjMDkyNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaApAQCAtNDQ2LDcgKzQ0Niw2IEBACiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwogCiAjaWZkZWYgQ09ORklHX1RSQUNJTkcKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKiBmbGFncyBmb3IgY3VycmVudC0+dHJhY2UgKi8KIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKaW5kZXggYmQwOTliYS4uNGVjNWU2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vfc2VxLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCiBzdHJ1Y3QgdHJhY2VfYXJyYXk7CiBzdHJ1Y3QgdHJhY2VyOwpAQCAtMTMwLDEwICsxMzEsMTUgQEAKIAl2b2lkCQkJKmRhdGE7CiAKIAlhdG9taWNfdAkJcHJvZmlsZV9jb3VudDsKLQlpbnQJCQkoKnByb2ZpbGVfZW5hYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7Ci0Jdm9pZAkJCSgqcHJvZmlsZV9kaXNhYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CisJaW50CQkJKCpwcm9maWxlX2VuYWJsZSkodm9pZCk7CisJdm9pZAkJCSgqcHJvZmlsZV9kaXNhYmxlKSh2b2lkKTsKIH07CiAKKyNkZWZpbmUgRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUJMjA0OAorCitleHRlcm4gY2hhcgkJCSp0cmFjZV9wcm9maWxlX2J1ZjsKK2V4dGVybiBjaGFyCQkJKnRyYWNlX3Byb2ZpbGVfYnVmX25taTsKKwogI2RlZmluZSBNQVhfRklMVEVSX1BSRUQJCTMyCiAjZGVmaW5lIE1BWF9GSUxURVJfU1RSX1ZBTAkyNTYJLyogU2hvdWxkIGhhbmRsZSBLU1lNX1NZTUJPTF9MRU4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDQ0MjYzY2IuLjI5N2RmNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRpc2tzIHRoYXQgY2FuJ3QgYmUgcGFydGl0aW9uZWQuICovCiAKIAljaGFyIGRpc2tfbmFtZVtESVNLX05BTUVfTEVOXTsJLyogbmFtZSBvZiBtYWpvciBkcml2ZXIgKi8KLQljaGFyICooKm5vZGVuYW1lKShzdHJ1Y3QgZ2VuZGlzayAqZ2QpOworCWNoYXIgKigqZGV2bm9kZSkoc3RydWN0IGdlbmRpc2sgKmdkLCBtb2RlX3QgKm1vZGUpOwogCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIHBhcnRpdGlvbnMgaW5kZXhlZCBieSBwYXJ0bm8uCiAJICogUHJvdGVjdGVkIHdpdGggbWF0Y2hpbmcgYmRldiBsb2NrIGJ1dCBzdGF0IGFuZCBvdGhlcgogCSAqIG5vbi1jcml0aWNhbCBhY2Nlc3NlcyB1c2UgUkNVLiAgQWx3YXlzIGFjY2VzcyB0aHJvdWdoCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlzdHJ1Y3QgZGlza19wYXJ0X3RibCAqcGFydF90Ymw7CiAJc3RydWN0IGhkX3N0cnVjdCBwYXJ0MDsKIAotCXN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqZm9wczsKKwljb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKmZvcHM7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggN2M3NzdhMC4uNTU3YmRhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJCQkJICgoMSA8PCBaT05FU19TSElGVCkgLSAxKTsKIAogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpKQotCQlCVUlMRF9CVUdfT04oKEdGUF9aT05FX0JBRCA+PiBiaXQpICYgMSk7CisJCU1BWUJFX0JVSUxEX0JVR19PTigoR0ZQX1pPTkVfQkFEID4+IGJpdCkgJiAxKTsKIAllbHNlIHsKICNpZmRlZiBDT05GSUdfREVCVUdfVk0KIAkJQlVHX09OKChHRlBfWk9ORV9CQUQgPj4gYml0KSAmIDEpOwpAQCAtMzI2LDcgKzMyNiw2IEBACiBleHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdm9pZCBmcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyKTsKIGV4dGVybiB2b2lkIGZyZWVfaG90X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotZXh0ZXJuIHZvaWQgZnJlZV9jb2xkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogCiAjZGVmaW5lIF9fZnJlZV9wYWdlKHBhZ2UpIF9fZnJlZV9wYWdlcygocGFnZSksIDApCiAjZGVmaW5lIGZyZWVfcGFnZShhZGRyKSBmcmVlX3BhZ2VzKChhZGRyKSwwKQpAQCAtMzM2LDE4ICszMzUsNiBAQAogdm9pZCBkcmFpbl9hbGxfcGFnZXModm9pZCk7CiB2b2lkIGRyYWluX2xvY2FsX3BhZ2VzKHZvaWQgKmR1bW15KTsKIAotZXh0ZXJuIGJvb2wgb29tX2tpbGxlcl9kaXNhYmxlZDsKLQotc3RhdGljIGlubGluZSB2b2lkIG9vbV9raWxsZXJfZGlzYWJsZSh2b2lkKQotewotCW9vbV9raWxsZXJfZGlzYWJsZWQgPSB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb29tX2tpbGxlcl9lbmFibGUodm9pZCkKLXsKLQlvb21fa2lsbGVyX2Rpc2FibGVkID0gZmFsc2U7Ci19Ci0KIGV4dGVybiBnZnBfdCBnZnBfYWxsb3dlZF9tYXNrOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKaW5kZXggZTEwYzQ5YS4uMDU5YmQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKQEAgLTEyLDYgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKK3N0cnVjdCBkZXZpY2U7CisKIC8qCiAgKiBTb21lIHBsYXRmb3JtcyBkb24ndCBzdXBwb3J0IHRoZSBHUElPIHByb2dyYW1taW5nIGludGVyZmFjZS4KICAqCkBAIC04OSw2ICs5MSwxNSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW5saW5lIGludCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQl1bnNpZ25lZCBncGlvKQoreworCS8qIEdQSU8gY2FuIG5ldmVyIGhhdmUgYmVlbiBleHBvcnRlZCAqLworCVdBUk5fT04oMSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKwogc3RhdGljIGlubGluZSB2b2lkIGdwaW9fdW5leHBvcnQodW5zaWduZWQgZ3BpbykKIHsKIAkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gZXhwb3J0ZWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGF5ZXNlc3AuaCBiL2luY2x1ZGUvbGludXgvaGF5ZXNlc3AuaAppbmRleCA5NDBhZWI1Li45MmIwOGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hheWVzZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9oYXllc2VzcC5oCkBAIC05Niw3ICs5Niw2IEBACiAJaW50CQkJeG1pdF9oZWFkOwogCWludAkJCXhtaXRfdGFpbDsKIAlpbnQJCQl4bWl0X2NudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAlkZWx0YV9tc3Jfd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlicmVha193YWl0OwogCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OwkvKiBrZXJuZWwgY291bnRlcnMgZm9yIHRoZSA0IGlucHV0IGludGVycnVwdHMgKi8KIAlzdHJ1Y3QgaGF5ZXNfZXNwX2NvbmZpZyBjb25maWc7IC8qIHBvcnQgY29uZmlndXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggYTBlYmRhYy4uMTBmNjI4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC00OTQsNiArNDk0LDcgQEAKIAogCS8qIGhpZGRldiBldmVudCBoYW5kbGVyICovCiAJaW50ICgqaGlkZGV2X2Nvbm5lY3QpKHN0cnVjdCBoaWRfZGV2aWNlICosIHVuc2lnbmVkIGludCk7CisJdm9pZCAoKmhpZGRldl9kaXNjb25uZWN0KShzdHJ1Y3QgaGlkX2RldmljZSAqKTsKIAl2b2lkICgqaGlkZGV2X2hpZF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAogCQkJCSAgc3RydWN0IGhpZF91c2FnZSAqLCBfX3MzMik7CiAJdm9pZCAoKmhpZGRldl9yZXBvcnRfZXZlbnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqKTsKQEAgLTY5MSw2ICs2OTIsNyBAQAogaW50IGhpZF9wYXJzZV9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqc3RhcnQsIHVuc2lnbmVkIHNpemUpOwogaW50IGhpZF9jaGVja19rZXlzX3ByZXNzZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiBpbnQgaGlkX2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzayk7Cit2b2lkIGhpZF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogCiAvKioKICAqIGhpZF9tYXBfdXNhZ2UgLSBtYXAgdXNhZ2UgaW5wdXQgYml0cwpAQCAtODAwLDYgKzgwMiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBoaWRfaHdfc3RvcChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKIHsKKwloaWRfZGlzY29ubmVjdChoZGV2KTsKIAloZGV2LT5sbF9kcml2ZXItPnN0b3AoaGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggNWNiYzYyMC4uMTc2ZTdlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTI0LDcgKzI0LDkgQEAKIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIGludCBodWdldGxiX3RyZWF0X21vdmFibGVfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIGludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwotaW50IGZvbGxvd19odWdldGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHBhZ2UgKiosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKiwgdW5zaWduZWQgbG9uZyAqLCBpbnQgKiwgaW50LCBpbnQpOworaW50IGZvbGxvd19odWdldGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwKKwkJCXN0cnVjdCBwYWdlICoqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiosCisJCQl1bnNpZ25lZCBsb25nICosIGludCAqLCBpbnQsIHVuc2lnbmVkIGludCBmbGFncyk7CiB2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAogCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHBhZ2UgKik7CiB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosCkBAIC0xMTAsNiArMTEyLDIxIEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqLwogCisjZGVmaW5lIEhVR0VUTEJfQU5PTl9GSUxFICJhbm9uX2h1Z2VwYWdlIgorCitlbnVtIHsKKwkvKgorCSAqIFRoZSBmaWxlIHdpbGwgYmUgdXNlZCBhcyBhbiBzaG0gZmlsZSBzbyBzaG1mcyBhY2NvdW50aW5nIHJ1bGVzCisJICogYXBwbHkKKwkgKi8KKwlIVUdFVExCX1NITUZTX0lOT0RFICAgICA9IDEsCisJLyoKKwkgKiBUaGUgZmlsZSBpcyBiZWluZyBjcmVhdGVkIG9uIHRoZSBpbnRlcm5hbCB2ZnMgbW91bnQgYW5kIHNobWZzCisJICogYWNjb3VudGluZyBydWxlcyBkbyBub3QgYXBwbHkKKwkgKi8KKwlIVUdFVExCX0FOT05IVUdFX0lOT0RFICA9IDIsCit9OworCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJGUwogc3RydWN0IGh1Z2V0bGJmc19jb25maWcgewogCXVpZF90ICAgdWlkOwpAQCAtMTQ4LDcgKzE2NSw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wczsKIHN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIGludCBhY2N0LAotCQkJCQkJc3RydWN0IHVzZXJfc3RydWN0ICoqdXNlcik7CisJCQkJc3RydWN0IHVzZXJfc3RydWN0ICoqdXNlciwgaW50IGNyZWF0X2ZsYWdzKTsKIGludCBodWdldGxiX2dldF9xdW90YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9uZyBkZWx0YSk7CiB2b2lkIGh1Z2V0bGJfcHV0X3F1b3RhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb25nIGRlbHRhKTsKIApAQCAtMTcwLDcgKzE4Nyw3IEBACiAKICNkZWZpbmUgaXNfZmlsZV9odWdlcGFnZXMoZmlsZSkJCQkwCiAjZGVmaW5lIHNldF9maWxlX2h1Z2VwYWdlcyhmaWxlKQkJQlVHKCkKLSNkZWZpbmUgaHVnZXRsYl9maWxlX3NldHVwKG5hbWUsc2l6ZSxhY2N0LHVzZXIpCUVSUl9QVFIoLUVOT1NZUykKKyNkZWZpbmUgaHVnZXRsYl9maWxlX3NldHVwKG5hbWUsc2l6ZSxhY2N0LHVzZXIsY3JlYXQpCUVSUl9QVFIoLUVOT1NZUykKIAogI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQkZTICovCiAKQEAgLTE4NSw3ICsyMDIsOCBAQAogI2RlZmluZSBIU1RBVEVfTkFNRV9MRU4gMzIKIC8qIERlZmluZXMgb25lIGh1Z2V0bGIgcGFnZSBzaXplICovCiBzdHJ1Y3QgaHN0YXRlIHsKLQlpbnQgaHVnZXRsYl9uZXh0X25pZDsKKwlpbnQgbmV4dF9uaWRfdG9fYWxsb2M7CisJaW50IG5leHRfbmlkX3RvX2ZyZWU7CiAJdW5zaWduZWQgaW50IG9yZGVyOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAl1bnNpZ25lZCBsb25nIG1heF9odWdlX3BhZ2VzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaCBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKaW5kZXggYzkwODdkZS4uZTg0NGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC0yOCwxNyArMjgsNiBAQAogICAgaWRlbnRpZnkgYSBsZWdhY3kgY2xpZW50LiBJZiB5b3UgZG9uJ3QgbmVlZCB0aGVtLCBqdXN0IGRvbid0IHNldCB0aGVtLiAqLwogCiAvKgotICogLS0tLSBEcml2ZXIgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9NU1AzNDAwCSAxCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9UVU5FUgkgMgotI2RlZmluZSBJMkNfRFJJVkVSSURfVERBNzQzMgkyNwkvKiBTdGVyZW8gc291bmQgcHJvY2Vzc29yCSovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9UVkFVRElPICAgIDI5ICAgICAgLyogR2VuZXJpYyBUViBzb3VuZCBkcml2ZXIgICAgICAqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExWAk3MwkvKiBzYWE3MTF4IHZpZGVvIGVuY29kZXJzCSovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9JTkZSQVJFRAk3NQkvKiBJMkMgSW5mcmFSZWQgb24gVmlkZW8gYm9hcmRzICovCi0KLS8qCiAgKiAtLS0tIEFkYXB0ZXIgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IGY0Nzg0YzAuLjU3ZDQxYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtOTgsNyArOTgsNiBAQAogCiAvKioKICAqIHN0cnVjdCBpMmNfZHJpdmVyIC0gcmVwcmVzZW50IGFuIEkyQyBkZXZpY2UgZHJpdmVyCi0gKiBAaWQ6IFVuaXF1ZSBkcml2ZXIgSUQgKG9wdGlvbmFsKQogICogQGNsYXNzOiBXaGF0IGtpbmQgb2YgaTJjIGRldmljZSB3ZSBpbnN0YW50aWF0ZSAoZm9yIGRldGVjdCkKICAqIEBhdHRhY2hfYWRhcHRlcjogQ2FsbGJhY2sgZm9yIGJ1cyBhZGRpdGlvbiAoZm9yIGxlZ2FjeSBkcml2ZXJzKQogICogQGRldGFjaF9hZGFwdGVyOiBDYWxsYmFjayBmb3IgYnVzIHJlbW92YWwgKGZvciBsZWdhY3kgZHJpdmVycykKQEAgLTEzNSw3ICsxMzQsNiBAQAogICogbm90IGFsbG93ZWQuCiAgKi8KIHN0cnVjdCBpMmNfZHJpdmVyIHsKLQlpbnQgaWQ7CiAJdW5zaWduZWQgaW50IGNsYXNzOwogCiAJLyogTm90aWZpZXMgdGhlIGRyaXZlciB0aGF0IGEgbmV3IGJ1cyBoYXMgYXBwZWFyZWQgb3IgaXMgYWJvdXQgdG8gYmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IDllN2YyZTguLjIxYTZmNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTA2LDEzICsxMDYsMTMgQEAKIAogZXh0ZXJuIHN0cnVjdCBjcmVkIGluaXRfY3JlZDsKIAotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCi0jIGRlZmluZSBJTklUX1BFUkZfQ09VTlRFUlModHNrKQkJCQkJXAotCS5wZXJmX2NvdW50ZXJfbXV0ZXggPSAJCQkJCQlcCi0JCSBfX01VVEVYX0lOSVRJQUxJWkVSKHRzay5wZXJmX2NvdW50ZXJfbXV0ZXgpLAkJXAotCS5wZXJmX2NvdW50ZXJfbGlzdCA9IExJU1RfSEVBRF9JTklUKHRzay5wZXJmX2NvdW50ZXJfbGlzdCksCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisjIGRlZmluZSBJTklUX1BFUkZfRVZFTlRTKHRzaykJCQkJCVwKKwkucGVyZl9ldmVudF9tdXRleCA9IAkJCQkJCVwKKwkJIF9fTVVURVhfSU5JVElBTElaRVIodHNrLnBlcmZfZXZlbnRfbXV0ZXgpLAkJXAorCS5wZXJmX2V2ZW50X2xpc3QgPSBMSVNUX0hFQURfSU5JVCh0c2sucGVyZl9ldmVudF9saXN0KSwKICNlbHNlCi0jIGRlZmluZSBJTklUX1BFUkZfQ09VTlRFUlModHNrKQorIyBkZWZpbmUgSU5JVF9QRVJGX0VWRU5UUyh0c2spCiAjZW5kaWYKIAogLyoKQEAgLTE3OCw3ICsxNzgsNyBAQAogCX0sCQkJCQkJCQlcCiAJLmRpcnRpZXMgPSBJTklUX1BST1BfTE9DQUxfU0lOR0xFKGRpcnRpZXMpLAkJCVwKIAlJTklUX0lEUwkJCQkJCQlcCi0JSU5JVF9QRVJGX0NPVU5URVJTKHRzaykJCQkJCQlcCisJSU5JVF9QRVJGX0VWRU5UUyh0c2spCQkJCQkJXAogCUlOSVRfVFJBQ0VfSVJRRkxBR1MJCQkJCQlcCiAJSU5JVF9MT0NLREVQCQkJCQkJCVwKIAlJTklUX0ZUUkFDRV9HUkFQSAkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAppbmRleCA0ODJkYzkxLi40ZjBhNzJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCkBAIC0zNjAsNCArMzYwLDYgQEAKIAogZXh0ZXJuIGludCBxaV9zdWJtaXRfc3luYyhzdHJ1Y3QgcWlfZGVzYyAqZGVzYywgc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiAKK2V4dGVybiBpbnQgZG1hcl9pcl9zdXBwb3J0KHZvaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCmluZGV4IDc4NmU3YjguLjgzYWE4MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaApAQCAtMTg0LDUgKzE4NCw5IEBACiBleHRlcm4gaW50IGlvbWVtX21hcF9zYW5pdHlfY2hlY2socmVzb3VyY2Vfc2l6ZV90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gaW50IGlvbWVtX2lzX2V4Y2x1c2l2ZSh1NjQgYWRkcik7CiAKK2V4dGVybiBpbnQKK3dhbGtfc3lzdGVtX3JhbV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJdm9pZCAqYXJnLCBpbnQgKCpmdW5jKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB2b2lkICopKTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmCS8qIF9MSU5VWF9JT1BPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3ZhLmggYi9pbmNsdWRlL2xpbnV4L2lvdmEuaAppbmRleCAyMjhmNmM5Li43NmEwNzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvdmEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvdmEuaApAQCAtMjgsNyArMjgsNiBAQAogCiAvKiBob2xkcyBhbGwgdGhlIGlvdmEgdHJhbnNsYXRpb25zIGZvciBhIGRvbWFpbiAqLwogc3RydWN0IGlvdmFfZG9tYWluIHsKLQlzcGlubG9ja190CWlvdmFfYWxsb2NfbG9jazsvKiBMb2NrIHRvIHByb3RlY3QgaW92YSAgYWxsb2NhdGlvbiAqLwogCXNwaW5sb2NrX3QJaW92YV9yYnRyZWVfbG9jazsgLyogTG9jayB0byBwcm90ZWN0IHVwZGF0ZSBvZiByYnRyZWUgKi8KIAlzdHJ1Y3QgcmJfcm9vdAlyYnJvb3Q7CQkvKiBpb3ZhIGRvbWFpbiByYnRyZWUgcm9vdCAqLwogCXN0cnVjdCByYl9ub2RlCSpjYWNoZWQzMl9ub2RlOyAvKiBTYXZlIGxhc3QgYWxsb2NlZCBub2RlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZC5oIGIvaW5jbHVkZS9saW51eC9qYmQuaAppbmRleCBhMTE4N2EwLi4zMzE1MzBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTU1Niw3ICs1NTYsNyBAQAogCSAqIFRoaXMgdHJhbnNhY3Rpb24gaXMgYmVpbmcgZm9yY2VkIGFuZCBzb21lIHByb2Nlc3MgaXMKIAkgKiB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2guCiAJICovCi0JaW50IHRfc3luY2hyb25vdXNfY29tbWl0OjE7CisJdW5zaWduZWQgaW50IHRfc3luY2hyb25vdXNfY29tbWl0OjE7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDJiNWIxZTAuLmQzY2QyM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTQ2LDcgKzE0Niw3IEBACiAjZGVmaW5lIG1pZ2h0X3NsZWVwX2lmKGNvbmQpIGRvIHsgaWYgKGNvbmQpIG1pZ2h0X3NsZWVwKCk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgYWJzKHgpICh7CQkJCVwKLQkJaW50IF9feCA9ICh4KTsJCQlcCisJCWxvbmcgX194ID0gKHgpOwkJCVwKIAkJKF9feCA8IDApID8gLV9feCA6IF9feDsJCVwKIAl9KQogCkBAIC0yNDYsMTQgKzI0NiwxNiBAQAogZXh0ZXJuIGJvb2wgcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCh1bnNpZ25lZCBsb25nICpjYWxsZXJfamlmZmllcywKIAkJCQkgICB1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfbXNlYyk7CiAKK2V4dGVybiBpbnQgcHJpbnRrX2RlbGF5X21zZWM7CisKIC8qCiAgKiBQcmludCBhIG9uZS10aW1lIG1lc3NhZ2UgKGFuYWxvZ291cyB0byBXQVJOX09OQ0UoKSBldCBhbCk6CiAgKi8KICNkZWZpbmUgcHJpbnRrX29uY2UoeC4uLikgKHsJCQlcCi0Jc3RhdGljIGludCBfX3ByaW50X29uY2UgPSAxOwkJXAorCXN0YXRpYyBib29sIF9fcHJpbnRfb25jZSA9IHRydWU7CVwKIAkJCQkJCVwKIAlpZiAoX19wcmludF9vbmNlKSB7CQkJXAotCQlfX3ByaW50X29uY2UgPSAwOwkJXAorCQlfX3ByaW50X29uY2UgPSBmYWxzZTsJCVwKIAkJcHJpbnRrKHgpOwkJCVwKIAl9CQkJCQlcCiB9KQpAQCAtNjc2LDEzICs2NzgsMTcgQEAKIH07CiAKIC8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgY29uZGl0aW9uIGlzIHRydWUgKi8KLSNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSkKKyNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKUJVSUxEX0JVR19PTl9aRVJPKGNvbmRpdGlvbikpCisKKy8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgY29uZGl0aW9uIGlzIGNvbnN0YW50IGFuZCB0cnVlICovCisjZGVmaW5lIE1BWUJFX0JVSUxEX0JVR19PTihjb25kKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIgKiAhIShjb25kKV0pKQogCiAvKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGNvbmRpdGlvbiBpcyB0cnVlLCBidXQgYWxzbyBwcm9kdWNlIGEKICAgIHJlc3VsdCAob2YgdmFsdWUgMCBhbmQgdHlwZSBzaXplX3QpLCBzbyB0aGUgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZAogICAgZS5nLiBpbiBhIHN0cnVjdHVyZSBpbml0aWFsaXplciAob3Igd2hlcmUtZXZlciBlbHNlIGNvbW1hIGV4cHJlc3Npb25zCiAgICBhcmVuJ3QgcGVybWl0dGVkKS4gKi8KLSNkZWZpbmUgQlVJTERfQlVHX09OX1pFUk8oZSkgKHNpemVvZihjaGFyWzEgLSAyICogISEoZSldKSAtIDEpCisjZGVmaW5lIEJVSUxEX0JVR19PTl9aRVJPKGUpIChzaXplb2Yoc3RydWN0IHsgaW50Oi0hIShlKTsgfSkpCisjZGVmaW5lIEJVSUxEX0JVR19PTl9OVUxMKGUpICgodm9pZCAqKXNpemVvZihzdHJ1Y3QgeyBpbnQ6LSEhKGUpOyB9KSkKIAogLyogVHJhcCBwYXN0ZXJzIG9mIF9fRlVOQ1RJT05fXyBhdCBjb21waWxlLXRpbWUgKi8KICNkZWZpbmUgX19GVU5DVElPTl9fIChfX2Z1bmNfXykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZpZm8uaCBiL2luY2x1ZGUvbGludXgva2ZpZm8uaAppbmRleCAyOWY2MmUxLi5hZDZiZGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZmlmby5oCkBAIC0zOCw3ICszOCw3IEBACiAJCQkJIHNwaW5sb2NrX3QgKmxvY2spOwogZXh0ZXJuIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pOwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pOwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2dldChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCiAJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKTsKIApAQCAtNzcsNyArNzcsNyBAQAogICogYnl0ZXMgY29waWVkLgogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrZmlmb19wdXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAppbmRleCBkYzJmZDU0Li5lODgwZDRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCisrKyBiL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKQEAgLTE0NCwxMCArMTQ0LDE1IEBACiAJaW50IG5hbWUjI19lbmRbMF07CiAKICNkZWZpbmUga21lbWNoZWNrX2Fubm90YXRlX2JpdGZpZWxkKHB0ciwgbmFtZSkJCQkJXAotCWRvIGlmIChwdHIpIHsJCQkJCQkJXAotCQlpbnQgX24gPSAobG9uZykgJigocHRyKS0+bmFtZSMjX2VuZCkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpbnQgX247CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJaWYgKCFwdHIpCQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlfbiA9IChsb25nKSAmKChwdHIpLT5uYW1lIyNfZW5kKQkJCVwKIAkJCS0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19iZWdpbik7CQlcCi0JCUJVSUxEX0JVR19PTihfbiA8IDApOwkJCQkJXAorCQlNQVlCRV9CVUlMRF9CVUdfT04oX24gPCAwKTsJCQkJXAogCQkJCQkJCQkJXAogCQlrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZCgmKChwdHIpLT5uYW1lIyNfYmVnaW4pLCBfbik7CVwKIAl9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rc20uaCBiL2luY2x1ZGUvbGludXgva3NtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4NWMxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva3NtLmgKQEAgLTAsMCArMSw3OSBAQAorI2lmbmRlZiBfX0xJTlVYX0tTTV9ICisjZGVmaW5lIF9fTElOVVhfS1NNX0gKKy8qCisgKiBNZW1vcnkgbWVyZ2luZyBzdXBwb3J0LgorICoKKyAqIFRoaXMgY29kZSBlbmFibGVzIGR5bmFtaWMgc2hhcmluZyBvZiBpZGVudGljYWwgcGFnZXMgZm91bmQgaW4gZGlmZmVyZW50CisgKiBtZW1vcnkgYXJlYXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IHNoYXJlZCBieSBmb3JrKCkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4KKworI2lmZGVmIENPTkZJR19LU00KK2ludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIGludCBhZHZpY2UsIHVuc2lnbmVkIGxvbmcgKnZtX2ZsYWdzKTsKK2ludCBfX2tzbV9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cit2b2lkIF9fa3NtX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCitzdGF0aWMgaW5saW5lIGludCBrc21fZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pCit7CisJaWYgKHRlc3RfYml0KE1NRl9WTV9NRVJHRUFCTEUsICZvbGRtbS0+ZmxhZ3MpKQorCQlyZXR1cm4gX19rc21fZW50ZXIobW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3NtX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKHRlc3RfYml0KE1NRl9WTV9NRVJHRUFCTEUsICZtbS0+ZmxhZ3MpKQorCQlfX2tzbV9leGl0KG1tKTsKK30KKworLyoKKyAqIEEgS1NNIHBhZ2UgaXMgb25lIG9mIHRob3NlIHdyaXRlLXByb3RlY3RlZCAic2hhcmVkIHBhZ2VzIiBvciAibWVyZ2VkIHBhZ2VzIgorICogd2hpY2ggS1NNIG1hcHMgaW50byBtdWx0aXBsZSBtbXMsIHdoZXJldmVyIGlkZW50aWNhbCBhbm9ueW1vdXMgcGFnZSBjb250ZW50CisgKiBpcyBmb3VuZCBpbiBWTV9NRVJHRUFCTEUgdm1hcy4gIEl0J3MgYSBQYWdlQW5vbiBwYWdlLCB3aXRoIE5VTEwgYW5vbl92bWEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IFBhZ2VLc20oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuICgodW5zaWduZWQgbG9uZylwYWdlLT5tYXBwaW5nID09IFBBR0VfTUFQUElOR19BTk9OKTsKK30KKworLyoKKyAqIEJ1dCB3ZSBoYXZlIHRvIGF2b2lkIHRoZSBjaGVja2luZyB3aGljaCBwYWdlX2FkZF9hbm9uX3JtYXAoKSBwZXJmb3Jtcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfYWRkX2tzbV9ybWFwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChhdG9taWNfaW5jX2FuZF90ZXN0KCZwYWdlLT5fbWFwY291bnQpKSB7CisJCXBhZ2UtPm1hcHBpbmcgPSAodm9pZCAqKSBQQUdFX01BUFBJTkdfQU5PTjsKKwkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0FOT05fUEFHRVMpOworCX0KK30KKyNlbHNlICAvKiAhQ09ORklHX0tTTSAqLworCitzdGF0aWMgaW5saW5lIGludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIGludCBhZHZpY2UsIHVuc2lnbmVkIGxvbmcgKnZtX2ZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBrc21fZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrc21fZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgUGFnZUtzbShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogTm8gc3R1YiByZXF1aXJlZCBmb3IgcGFnZV9hZGRfa3NtX3JtYXAocGFnZSkgKi8KKyNlbmRpZiAvKiAhQ09ORklHX0tTTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCA0YWY1NjAzLi5iN2JiYjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzM2x2MDJkLmggYi9pbmNsdWRlL2xpbnV4L2xpczNsdjAyZC5oCmluZGV4IGFkNjUxZjQuLjNjYzJmMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzM2x2MDJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9saXMzbHYwMmQuaApAQCAtMzIsOCArMzIsMTcgQEAKICNkZWZpbmUgTElTM19JUlEyX0RBVEFfUkVBRFkJKDQgPDwgMykKICNkZWZpbmUgTElTM19JUlEyX0NMSUNLCQkoNyA8PCAzKQogI2RlZmluZSBMSVMzX0lSUV9PUEVOX0RSQUlOCSgxIDw8IDYpCi0jZGVmaW5lIExJUzNfSVJRX0FDVElWRV9ISUdICSgxIDw8IDcpCisjZGVmaW5lIExJUzNfSVJRX0FDVElWRV9MT1cJKDEgPDwgNykKIAl1bnNpZ25lZCBjaGFyIGlycV9jZmc7CisKKyNkZWZpbmUgTElTM19XQUtFVVBfWF9MTwkoMSA8PCAwKQorI2RlZmluZSBMSVMzX1dBS0VVUF9YX0hJCSgxIDw8IDEpCisjZGVmaW5lIExJUzNfV0FLRVVQX1lfTE8JKDEgPDwgMikKKyNkZWZpbmUgTElTM19XQUtFVVBfWV9ISQkoMSA8PCAzKQorI2RlZmluZSBMSVMzX1dBS0VVUF9aX0xPCSgxIDw8IDQpCisjZGVmaW5lIExJUzNfV0FLRVVQX1pfSEkJKDEgPDwgNSkKKwl1bnNpZ25lZCBjaGFyIHdha2V1cF9mbGFnczsKKwl1bnNpZ25lZCBjaGFyIHdha2V1cF90aHJlc2g7CiB9OwogCiAjZW5kaWYgLyogX19MSVMzTFYwMkRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAppbmRleCBjMzI1YjE4Li5hMzRkZWE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCkBAIC0zMzgsNDkgKzMzOCw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX25sbV9jbXBfYWRkcjQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAotCQkJCSAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQotewotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXAxOwotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXAyOwotCXJldHVybiBzaW4xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2luMi0+c2luX2FkZHIuc19hZGRyOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1zdGF0aWMgaW5saW5lIGludCBfX25sbV9jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAotCQkJCSAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQotewotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDE7Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwMjsKLQlyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKCZzaW4xLT5zaW42X2FkZHIsICZzaW4yLT5zaW42X2FkZHIpOwotfQotI2Vsc2UJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCi1zdGF0aWMgaW5saW5lIGludCBfX25sbV9jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAotCQkJCSAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCS8qICEoQ09ORklHX0lQVjYgfHwgQ09ORklHX0lQVjZfTU9EVUxFKSAqLwotCi0vKgotICogQ29tcGFyZSB0d28gaG9zdCBhZGRyZXNzZXMKLSAqCi0gKiBSZXR1cm4gVFJVRSBpZiB0aGUgYWRkcmVzc2VzIGFyZSB0aGUgc2FtZTsgb3RoZXJ3aXNlIEZBTFNFLgotICovCi1zdGF0aWMgaW5saW5lIGludCBubG1fY21wX2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKLXsKLQlpZiAoc2FwMS0+c2FfZmFtaWx5ID09IHNhcDItPnNhX2ZhbWlseSkgewotCQlzd2l0Y2ggKHNhcDEtPnNhX2ZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCQlyZXR1cm4gX19ubG1fY21wX2FkZHI0KHNhcDEsIHNhcDIpOwotCQljYXNlIEFGX0lORVQ2OgotCQkJcmV0dXJuIF9fbmxtX2NtcF9hZGRyNihzYXAxLCBzYXAyKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIENvbXBhcmUgdHdvIE5MTSBsb2Nrcy4KICAqIFdoZW4gdGhlIHNlY29uZCBsb2NrIGlzIG9mIHR5cGUgRl9VTkxDSywgdGhpcyBhY3RzIGxpa2UgYSB3aWxkY2FyZC4KQEAgLTM5NSw3ICszNTIsNyBAQAogCSAgICAgJiYoZmwxLT5mbF90eXBlICA9PSBmbDItPmZsX3R5cGUgfHwgZmwyLT5mbF90eXBlID09IEZfVU5MQ0spOwogfQogCi1leHRlcm4gc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5sbXN2Y19sb2NrX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5sbXN2Y19sb2NrX29wZXJhdGlvbnM7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbUlTRE5pZi5oIGIvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKaW5kZXggNTM2Y2ExMi4uNzhjM2JlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKKysrIGIvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKQEAgLTEwNCw3ICsxMDQsNyBAQAogI2RlZmluZSBETF9VTklUREFUQV9JTkQJCTB4MzEwOAogI2RlZmluZSBETF9JTkZPUk1BVElPTl9JTkQJMHgwMDA4CiAKLS8qIGludGVybiBsYXllciAyIG1hbmFnbWVudCAqLworLyogaW50ZXJuIGxheWVyIDIgbWFuYWdlbWVudCAqLwogI2RlZmluZSBNRExfQVNTSUdOX1JFUQkJMHgxODA0CiAjZGVmaW5lIE1ETF9BU1NJR05fSU5ECQkweDE5MDQKICNkZWZpbmUgTURMX1JFTU9WRV9SRVEJCTB4MUEwNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCmluZGV4IDE5MjMzMjcuLjc2Mjg1ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFnaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKQEAgLTEyLDcgKzEyLDkgQEAKICNkZWZpbmUgU1lTRlNfTUFHSUMJCTB4NjI2NTY1NzIKICNkZWZpbmUgU0VDVVJJVFlGU19NQUdJQwkweDczNjM2NjczCiAjZGVmaW5lIFNFTElOVVhfTUFHSUMJCTB4Zjk3Y2ZmOGMKKyNkZWZpbmUgUkFNRlNfTUFHSUMJCTB4ODU4NDU4ZjYJLyogc29tZSByYW5kb20gbnVtYmVyICovCiAjZGVmaW5lIFRNUEZTX01BR0lDCQkweDAxMDIxOTk0CisjZGVmaW5lIEhVR0VUTEJGU19NQUdJQyAJMHg5NTg0NThmNgkvKiBzb21lIHJhbmRvbSBudW1iZXIgKi8KICNkZWZpbmUgU1FVQVNIRlNfTUFHSUMJCTB4NzM3MTczNjgKICNkZWZpbmUgRUZTX1NVUEVSX01BR0lDCQkweDQxNEE1MwogI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDCTB4RUY1MwpAQCAtNTMsNCArNTUsOCBAQAogI2RlZmluZSBJTk9USUZZRlNfU1VQRVJfTUFHSUMJMHgyQkFEMURFQQogCiAjZGVmaW5lIFNUQUNLX0VORF9NQUdJQwkJMHg1N0FDNkU5RAorCisjZGVmaW5lIERFVlBUU19TVVBFUl9NQUdJQwkweDFjZDEKKyNkZWZpbmUgU09DS0ZTX01BR0lDCQkweDUzNEY0MzRCCisKICNlbmRpZiAvKiBfX0xJTlVYX01BR0lDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXJrZXIuaCBiL2luY2x1ZGUvbGludXgvbWFya2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NWU3NGMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9tYXJrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0jaWZuZGVmIF9MSU5VWF9NQVJLRVJfSAotI2RlZmluZSBfTElOVVhfTUFSS0VSX0gKLQotLyoKLSAqIENvZGUgbWFya3VwIGZvciBkeW5hbWljIGFuZCBzdGF0aWMgdHJhY2luZy4KLSAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi9tYXJrZXIudHh0LgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNiBNYXRoaWV1IERlc25veWVycyA8bWF0aGlldS5kZXNub3llcnNAcG9seW10bC5jYT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgotICogU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IG1vZHVsZTsKLXN0cnVjdCBtYXJrZXI7Ci0KLS8qKgotICogbWFya2VyX3Byb2JlX2Z1bmMgLSBUeXBlIG9mIGEgbWFya2VyIHByb2JlIGZ1bmN0aW9uCi0gKiBAcHJvYmVfcHJpdmF0ZTogcHJvYmUgcHJpdmF0ZSBkYXRhCi0gKiBAY2FsbF9wcml2YXRlOiBjYWxsIHNpdGUgcHJpdmF0ZSBkYXRhCi0gKiBAZm10OiBmb3JtYXQgc3RyaW5nCi0gKiBAYXJnczogdmFyaWFibGUgYXJndW1lbnQgbGlzdCBwb2ludGVyLiBVc2UgYSBwb2ludGVyIHRvIG92ZXJjb21lIEMncwotICogICAgICAgIGluYWJpbGl0eSB0byBwYXNzIHRoaXMgYXJvdW5kIGFzIGEgcG9pbnRlciBpbiBhIHBvcnRhYmxlIG1hbm5lciBpbgotICogICAgICAgIHRoZSBjYWxsZWUgb3RoZXJ3aXNlLgotICoKLSAqIFR5cGUgb2YgbWFya2VyIHByb2JlIGZ1bmN0aW9ucy4gVGhleSByZWNlaXZlIHRoZSBtZGF0YSBhbmQgbmVlZCB0byBwYXJzZSB0aGUKLSAqIGZvcm1hdCBzdHJpbmcgdG8gcmVjb3ZlciB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KLSAqLwotdHlwZWRlZiB2b2lkIG1hcmtlcl9wcm9iZV9mdW5jKHZvaWQgKnByb2JlX3ByaXZhdGUsIHZvaWQgKmNhbGxfcHJpdmF0ZSwKLQkJY29uc3QgY2hhciAqZm10LCB2YV9saXN0ICphcmdzKTsKLQotc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlIHsKLQltYXJrZXJfcHJvYmVfZnVuYyAqZnVuYzsJLyogQ2FsbGJhY2sgKi8KLQl2b2lkICpwcm9iZV9wcml2YXRlOwkJLyogUHJpdmF0ZSBwcm9iZSBkYXRhICovCi19OwotCi1zdHJ1Y3QgbWFya2VyIHsKLQljb25zdCBjaGFyICpuYW1lOwkvKiBNYXJrZXIgbmFtZSAqLwotCWNvbnN0IGNoYXIgKmZvcm1hdDsJLyogTWFya2VyIGZvcm1hdCBzdHJpbmcsIGRlc2NyaWJpbmcgdGhlCi0JCQkJICogdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KLQkJCQkgKi8KLQljaGFyIHN0YXRlOwkJLyogTWFya2VyIHN0YXRlLiAqLwotCWNoYXIgcHR5cGU7CQkvKiBwcm9iZSB0eXBlIDogMCA6IHNpbmdsZSwgMSA6IG11bHRpICovCi0JCQkJLyogUHJvYmUgd3JhcHBlciAqLwotCXZvaWQgKCpjYWxsKShjb25zdCBzdHJ1Y3QgbWFya2VyICptZGF0YSwgdm9pZCAqY2FsbF9wcml2YXRlLCAuLi4pOwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSBzaW5nbGU7Ci0Jc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICptdWx0aTsKLQljb25zdCBjaGFyICp0cF9uYW1lOwkvKiBPcHRpb25hbCB0cmFjZXBvaW50IG5hbWUgKi8KLQl2b2lkICp0cF9jYjsJCS8qIE9wdGlvbmFsIHRyYWNlcG9pbnQgY2FsbGJhY2sgKi8KLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotCi0jaWZkZWYgQ09ORklHX01BUktFUlMKLQotI2RlZmluZSBfREVGSU5FX01BUktFUihuYW1lLCB0cF9uYW1lX3N0ciwgdHBfY2IsIGZvcm1hdCkJCVwKLQkJc3RhdGljIGNvbnN0IGNoYXIgX19tc3RydGFiXyMjbmFtZVtdCQkJXAotCQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX21hcmtlcnNfc3RyaW5ncyIpKSkJCVwKLQkJPSAjbmFtZSAiXDAiIGZvcm1hdDsJCQkJCVwKLQkJc3RhdGljIHN0cnVjdCBtYXJrZXIgX19tYXJrXyMjbmFtZQkJCVwKLQkJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19tYXJrZXJzIiksIGFsaWduZWQoOCkpKSA9CVwKLQkJeyBfX21zdHJ0YWJfIyNuYW1lLCAmX19tc3RydGFiXyMjbmFtZVtzaXplb2YoI25hbWUpXSwJXAotCQkgIDAsIDAsIG1hcmtlcl9wcm9iZV9jYiwgeyBfX21hcmtfZW1wdHlfZnVuY3Rpb24sIE5VTEx9LFwKLQkJICBOVUxMLCB0cF9uYW1lX3N0ciwgdHBfY2IgfQotCi0jZGVmaW5lIERFRklORV9NQVJLRVIobmFtZSwgZm9ybWF0KQkJCQkJXAotCQlfREVGSU5FX01BUktFUihuYW1lLCBOVUxMLCBOVUxMLCBmb3JtYXQpCi0KLSNkZWZpbmUgREVGSU5FX01BUktFUl9UUChuYW1lLCB0cF9uYW1lLCB0cF9jYiwgZm9ybWF0KQkJCVwKLQkJX0RFRklORV9NQVJLRVIobmFtZSwgI3RwX25hbWUsIHRwX2NiLCBmb3JtYXQpCi0KLS8qCi0gKiBOb3RlIDogdGhlIGVtcHR5IGFzbSB2b2xhdGlsZSB3aXRoIHJlYWQgY29uc3RyYWludCBpcyB1c2VkIGhlcmUgaW5zdGVhZCBvZiBhCi0gKiAidXNlZCIgYXR0cmlidXRlIHRvIGZpeCBhIGdjYyA0LjEueCBidWcuCi0gKiBNYWtlIHN1cmUgdGhlIGFsaWdubWVudCBvZiB0aGUgc3RydWN0dXJlIGluIHRoZSBfX21hcmtlcnMgc2VjdGlvbiB3aWxsCi0gKiBub3QgYWRkIHVud2FudGVkIHBhZGRpbmcgYmV0d2VlbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWN0aW9uIGFuZCB0aGUKLSAqIHN0cnVjdHVyZS4gRm9yY2UgYWxpZ25tZW50IHRvIHRoZSBzYW1lIGFsaWdubWVudCBhcyB0aGUgc2VjdGlvbiBzdGFydC4KLSAqCi0gKiBUaGUgImdlbmVyaWMiIGFyZ3VtZW50IGNvbnRyb2xzIHdoaWNoIG1hcmtlciBlbmFibGluZyBtZWNoYW5pc20gbXVzdCBiZSB1c2VkLgotICogSWYgZ2VuZXJpYyBpcyB0cnVlLCBhIHZhcmlhYmxlIHJlYWQgaXMgdXNlZC4KLSAqIElmIGdlbmVyaWMgaXMgZmFsc2UsIGltbWVkaWF0ZSB2YWx1ZXMgYXJlIHVzZWQuCi0gKi8KLSNkZWZpbmUgX190cmFjZV9tYXJrKGdlbmVyaWMsIG5hbWUsIGNhbGxfcHJpdmF0ZSwgZm9ybWF0LCBhcmdzLi4uKQlcCi0JZG8gewkJCQkJCQkJXAotCQlERUZJTkVfTUFSS0VSKG5hbWUsIGZvcm1hdCk7CQkJCVwKLQkJX19tYXJrX2NoZWNrX2Zvcm1hdChmb3JtYXQsICMjIGFyZ3MpOwkJCVwKLQkJaWYgKHVubGlrZWx5KF9fbWFya18jI25hbWUuc3RhdGUpKSB7CQkJXAotCQkJKCpfX21hcmtfIyNuYW1lLmNhbGwpCQkJCVwKLQkJCQkoJl9fbWFya18jI25hbWUsIGNhbGxfcHJpdmF0ZSwgIyMgYXJncyk7XAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fdHJhY2VfbWFya190cChuYW1lLCBjYWxsX3ByaXZhdGUsIHRwX25hbWUsIHRwX2NiLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7CQkJCQkJCQlcCi0JCXZvaWQgX19jaGVja190cF90eXBlKHZvaWQpCQkJCVwKLQkJewkJCQkJCQlcCi0JCQlyZWdpc3Rlcl90cmFjZV8jI3RwX25hbWUodHBfY2IpOwkJXAotCQl9CQkJCQkJCVwKLQkJREVGSU5FX01BUktFUl9UUChuYW1lLCB0cF9uYW1lLCB0cF9jYiwgZm9ybWF0KTsJCVwKLQkJX19tYXJrX2NoZWNrX2Zvcm1hdChmb3JtYXQsICMjIGFyZ3MpOwkJCVwKLQkJKCpfX21hcmtfIyNuYW1lLmNhbGwpKCZfX21hcmtfIyNuYW1lLCBjYWxsX3ByaXZhdGUsCVwKLQkJCQkJIyMgYXJncyk7CQkJXAotCX0gd2hpbGUgKDApCi0KLWV4dGVybiB2b2lkIG1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IG1hcmtlciAqYmVnaW4sCi0Jc3RydWN0IG1hcmtlciAqZW5kKTsKLQotI2RlZmluZSBHRVRfTUFSS0VSKG5hbWUpCShfX21hcmtfIyNuYW1lKQotCi0jZWxzZSAvKiAhQ09ORklHX01BUktFUlMgKi8KLSNkZWZpbmUgREVGSU5FX01BUktFUihuYW1lLCB0cF9uYW1lLCB0cF9jYiwgZm9ybWF0KQotI2RlZmluZSBfX3RyYWNlX21hcmsoZ2VuZXJpYywgbmFtZSwgY2FsbF9wcml2YXRlLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQkJX19tYXJrX2NoZWNrX2Zvcm1hdChmb3JtYXQsICMjIGFyZ3MpCi0jZGVmaW5lIF9fdHJhY2VfbWFya190cChuYW1lLCBjYWxsX3ByaXZhdGUsIHRwX25hbWUsIHRwX2NiLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7CQkJCQkJCQlcCi0JCXZvaWQgX19jaGVja190cF90eXBlKHZvaWQpCQkJCVwKLQkJewkJCQkJCQlcCi0JCQlyZWdpc3Rlcl90cmFjZV8jI3RwX25hbWUodHBfY2IpOwkJXAotCQl9CQkJCQkJCVwKLQkJX19tYXJrX2NoZWNrX2Zvcm1hdChmb3JtYXQsICMjIGFyZ3MpOwkJCVwKLQl9IHdoaWxlICgwKQotc3RhdGljIGlubGluZSB2b2lkIG1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IG1hcmtlciAqYmVnaW4sCi0Jc3RydWN0IG1hcmtlciAqZW5kKQoteyB9Ci0jZGVmaW5lIEdFVF9NQVJLRVIobmFtZSkKLSNlbmRpZiAvKiBDT05GSUdfTUFSS0VSUyAqLwotCi0vKioKLSAqIHRyYWNlX21hcmsgLSBNYXJrZXIgdXNpbmcgY29kZSBwYXRjaGluZwotICogQG5hbWU6IG1hcmtlciBuYW1lLCBub3QgcXVvdGVkLgotICogQGZvcm1hdDogZm9ybWF0IHN0cmluZwotICogQGFyZ3MuLi46IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKLSAqCi0gKiBQbGFjZXMgYSBtYXJrZXIgdXNpbmcgb3B0aW1pemVkIGNvZGUgcGF0Y2hpbmcgdGVjaG5pcXVlIChpbXZfcmVhZCgpKQotICogdG8gYmUgZW5hYmxlZCB3aGVuIGltbWVkaWF0ZSB2YWx1ZXMgYXJlIHByZXNlbnQuCi0gKi8KLSNkZWZpbmUgdHJhY2VfbWFyayhuYW1lLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlfX3RyYWNlX21hcmsoMCwgbmFtZSwgTlVMTCwgZm9ybWF0LCAjIyBhcmdzKQotCi0vKioKLSAqIF90cmFjZV9tYXJrIC0gTWFya2VyIHVzaW5nIHZhcmlhYmxlIHJlYWQKLSAqIEBuYW1lOiBtYXJrZXIgbmFtZSwgbm90IHF1b3RlZC4KLSAqIEBmb3JtYXQ6IGZvcm1hdCBzdHJpbmcKLSAqIEBhcmdzLi4uOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0Ci0gKgotICogUGxhY2VzIGEgbWFya2VyIHVzaW5nIGEgc3RhbmRhcmQgbWVtb3J5IHJlYWQgKF9pbXZfcmVhZCgpKSB0byBiZQotICogZW5hYmxlZC4gU2hvdWxkIGJlIHVzZWQgZm9yIG1hcmtlcnMgaW4gY29kZSBwYXRocyB3aGVyZSBpbnN0cnVjdGlvbgotICogbW9kaWZpY2F0aW9uIGJhc2VkIGVuYWJsaW5nIGlzIG5vdCB3ZWxjb21lLiAoX19pbml0IGFuZCBfX2V4aXQgZnVuY3Rpb25zLAotICogbG9ja2RlcCwgc29tZSB0cmFwcywgcHJpbnRrKS4KLSAqLwotI2RlZmluZSBfdHJhY2VfbWFyayhuYW1lLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlfX3RyYWNlX21hcmsoMSwgbmFtZSwgTlVMTCwgZm9ybWF0LCAjIyBhcmdzKQotCi0vKioKLSAqIHRyYWNlX21hcmtfdHAgLSBNYXJrZXIgaW4gYSB0cmFjZXBvaW50IGNhbGxiYWNrCi0gKiBAbmFtZTogbWFya2VyIG5hbWUsIG5vdCBxdW90ZWQuCi0gKiBAdHBfbmFtZTogdHJhY2Vwb2ludCBuYW1lLCBub3QgcXVvdGVkLgotICogQHRwX2NiOiB0cmFjZXBvaW50IGNhbGxiYWNrLiBTaG91bGQgaGF2ZSBhbiBhc3NvY2lhdGVkIGdsb2JhbCBzeW1ib2wgc28gaXQKLSAqICAgICAgICAgaXMgbm90IG9wdGltaXplZCBhd2F5IGJ5IHRoZSBjb21waWxlciAoc2hvdWxkIG5vdCBiZSBzdGF0aWMpLgotICogQGZvcm1hdDogZm9ybWF0IHN0cmluZwotICogQGFyZ3MuLi46IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKLSAqCi0gKiBQbGFjZXMgYSBtYXJrZXIgaW4gYSB0cmFjZXBvaW50IGNhbGxiYWNrLgotICovCi0jZGVmaW5lIHRyYWNlX21hcmtfdHAobmFtZSwgdHBfbmFtZSwgdHBfY2IsIGZvcm1hdCwgYXJncy4uLikJXAotCV9fdHJhY2VfbWFya190cChuYW1lLCBOVUxMLCB0cF9uYW1lLCB0cF9jYiwgZm9ybWF0LCAjIyBhcmdzKQotCi0vKioKLSAqIE1BUktfTk9BUkdTIC0gRm9ybWF0IHN0cmluZyBmb3IgYSBtYXJrZXIgd2l0aCBubyBhcmd1bWVudC4KLSAqLwotI2RlZmluZSBNQVJLX05PQVJHUyAiICIKLQotLyogVG8gYmUgdXNlZCBmb3Igc3RyaW5nIGZvcm1hdCB2YWxpZGl0eSBjaGVja2luZyB3aXRoIGdjYyAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fcHJpbnRmKDEsIDIpIF9fX21hcmtfY2hlY2tfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotfQotCi0jZGVmaW5lIF9fbWFya19jaGVja19mb3JtYXQoZm9ybWF0LCBhcmdzLi4uKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoMCkJCQkJCQkJXAotCQkJX19fbWFya19jaGVja19mb3JtYXQoZm9ybWF0LCAjIyBhcmdzKTsJCVwKLQl9IHdoaWxlICgwKQotCi1leHRlcm4gbWFya2VyX3Byb2JlX2Z1bmMgX19tYXJrX2VtcHR5X2Z1bmN0aW9uOwotCi1leHRlcm4gdm9pZCBtYXJrZXJfcHJvYmVfY2IoY29uc3Qgc3RydWN0IG1hcmtlciAqbWRhdGEsCi0Jdm9pZCAqY2FsbF9wcml2YXRlLCAuLi4pOwotCi0vKgotICogQ29ubmVjdCBhIHByb2JlIHRvIGEgbWFya2VyLgotICogcHJpdmF0ZSBkYXRhIHBvaW50ZXIgbXVzdCBiZSBhIHZhbGlkIGFsbG9jYXRlZCBtZW1vcnkgYWRkcmVzcywgb3IgTlVMTC4KLSAqLwotZXh0ZXJuIGludCBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LAotCQkJCW1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwgdm9pZCAqcHJvYmVfcHJpdmF0ZSk7Ci0KLS8qCi0gKiBSZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgZ2l2ZW4gdG8gbWFya2VyX3Byb2JlX3JlZ2lzdGVyLgotICovCi1leHRlcm4gaW50IG1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCi0JbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLCB2b2lkICpwcm9iZV9wcml2YXRlKTsKLS8qCi0gKiBVbnJlZ2lzdGVyIGEgbWFya2VyIGJ5IHByb3ZpZGluZyB0aGUgcmVnaXN0ZXJlZCBwcml2YXRlIGRhdGEuCi0gKi8KLWV4dGVybiBpbnQgbWFya2VyX3Byb2JlX3VucmVnaXN0ZXJfcHJpdmF0ZV9kYXRhKG1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwKLQl2b2lkICpwcm9iZV9wcml2YXRlKTsKLQotZXh0ZXJuIHZvaWQgKm1hcmtlcl9nZXRfcHJpdmF0ZV9kYXRhKGNvbnN0IGNoYXIgKm5hbWUsIG1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwKLQlpbnQgbnVtKTsKLQotLyoKLSAqIG1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgbWFya2VyIHByb2JlCi0gKiB1bnJlZ2lzdHJhdGlvbiBhbmQgdGhlIGZpcnN0IG9uZSBvZgotICogLSB0aGUgZW5kIG9mIG1vZHVsZSBleGl0IGZ1bmN0aW9uCi0gKiAtIHRoZSBmcmVlIG9mIGFueSByZXNvdXJjZSB1c2VkIGJ5IHRoZSBwcm9iZXMKLSAqIHRvIGVuc3VyZSB0aGUgY29kZSBhbmQgZGF0YSBhcmUgdmFsaWQgZm9yIGFueSBwb3NzaWJseSBydW5uaW5nIHByb2Jlcy4KLSAqLwotI2RlZmluZSBtYXJrZXJfc3luY2hyb25pemVfdW5yZWdpc3RlcigpIHN5bmNocm9uaXplX3NjaGVkKCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKaW5kZXggZDk1ZjcyZS4uZmVkOTY5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaApAQCAtMTkxLDE0ICsxOTEsNiBAQAogCiAjZW5kaWYgLyogISBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAotLyoKLSAqIFdhbGsgdGhyb3VnaCBhbGwgbWVtb3J5IHdoaWNoIGlzIHJlZ2lzdGVyZWQgYXMgcmVzb3VyY2UuCi0gKiBhcmcgaXMgKHN0YXJ0X3BmbiwgbnJfcGFnZXMsIHByaXZhdGVfYXJnX3BvaW50ZXIpCi0gKi8KLWV4dGVybiBpbnQgd2Fsa19tZW1vcnlfcmVzb3VyY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB2b2lkICphcmcsCi0JCQlpbnQgKCpmdW5jKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB2b2lkICopKTsKLQogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCiAKIGV4dGVybiBpbnQgaXNfbWVtX3NlY3Rpb25fcmVtb3ZhYmxlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKaW5kZXggOWJlNDg0ZC4uN2MwODA1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKQEAgLTQ3LDIyICs0NywxNiBAQAogfQogCiAvKgotICogMiBtZW1wb29sX2FsbG9jX3QncyBhbmQgYSBtZW1wb29sX2ZyZWVfdCB0byBrbWFsbG9jL2t6YWxsb2MgYW5kIGtmcmVlCi0gKiB0aGUgYW1vdW50IG9mIG1lbW9yeSBzcGVjaWZpZWQgYnkgcG9vbF9kYXRhCisgKiBhIG1lbXBvb2xfYWxsb2NfdCBhbmQgYSBtZW1wb29sX2ZyZWVfdCB0byBrbWFsbG9jIGFuZCBrZnJlZSB0aGUKKyAqIGFtb3VudCBvZiBtZW1vcnkgc3BlY2lmaWVkIGJ5IHBvb2xfZGF0YQogICovCiB2b2lkICptZW1wb29sX2ttYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSk7Ci12b2lkICptZW1wb29sX2t6YWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSk7CiB2b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKIHN0YXRpYyBpbmxpbmUgbWVtcG9vbF90ICptZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woaW50IG1pbl9uciwgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIG1lbXBvb2xfY3JlYXRlKG1pbl9uciwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLAogCQkJICAgICAgKHZvaWQgKikgc2l6ZSk7CiB9Ci1zdGF0aWMgaW5saW5lIG1lbXBvb2xfdCAqbWVtcG9vbF9jcmVhdGVfa3phbGxvY19wb29sKGludCBtaW5fbnIsIHNpemVfdCBzaXplKQotewotCXJldHVybiBtZW1wb29sX2NyZWF0ZShtaW5fbnIsIG1lbXBvb2xfa3phbGxvYywgbWVtcG9vbF9rZnJlZSwKLQkJCSAgICAgICh2b2lkICopIHNpemUpOwotfQogCiAvKgogICogQSBtZW1wb29sX2FsbG9jX3QgYW5kIG1lbXBvb2xfZnJlZV90IGZvciBhIHNpbXBsZSBwYWdlIGFsbG9jYXRvciB0aGF0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9kYTkwM3guaCBiL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCmluZGV4IDExNWRiZTkuLmM2M2I2NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX0xJTlVYX1BNSUNfREE5MDNYX0gKICNkZWZpbmUgX19MSU5VWF9QTUlDX0RBOTAzWF9ICiAKLS8qIFVuaWZpZWQgc3ViIGRldmljZSBJRHMgZm9yIERBOTAzMC9EQTkwMzQgKi8KKy8qIFVuaWZpZWQgc3ViIGRldmljZSBJRHMgZm9yIERBOTAzMC9EQTkwMzQvREE5MDM1ICovCiBlbnVtIHsKIAlEQTkwMzBfSURfTEVEXzEsCiAJREE5MDMwX0lEX0xFRF8yLApAQCAtNTcsNiArNTcsOCBAQAogCURBOTAzNF9JRF9MRE8xMywKIAlEQTkwMzRfSURfTERPMTQsCiAJREE5MDM0X0lEX0xETzE1LAorCisJREE5MDM1X0lEX0JVQ0szLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9wbXUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThjYmIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BtdS5oCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BtdS5oIC0tIFBNVSBmb3IgV004MzF4CisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTUZEX1dNODMxWF9QTVVfSF9fCisjZGVmaW5lIF9fTUZEX1dNODMxWF9QTVVfSF9fCisKKy8qCisgKiBSMTYzODcgKDB4NDAwMykgLSBQb3dlciBTdGF0ZQorICovCisjZGVmaW5lIFdNODMxWF9DSElQX09OICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENISVBfT04gKi8KKyNkZWZpbmUgV004MzFYX0NISVBfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ0hJUF9PTiAqLworI2RlZmluZSBXTTgzMVhfQ0hJUF9PTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDSElQX09OICovCisjZGVmaW5lIFdNODMxWF9DSElQX09OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENISVBfT04gKi8KKyNkZWZpbmUgV004MzFYX0NISVBfU0xQICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQ0hJUF9TTFAgKi8KKyNkZWZpbmUgV004MzFYX0NISVBfU0xQX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQ0hJUF9TTFAgKi8KKyNkZWZpbmUgV004MzFYX0NISVBfU0xQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogQ0hJUF9TTFAgKi8KKyNkZWZpbmUgV004MzFYX0NISVBfU0xQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0hJUF9TTFAgKi8KKyNkZWZpbmUgV004MzFYX1JFRl9MUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogUkVGX0xQICovCisjZGVmaW5lIFdNODMxWF9SRUZfTFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFJFRl9MUCAqLworI2RlZmluZSBXTTgzMVhfUkVGX0xQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBSRUZfTFAgKi8KKyNkZWZpbmUgV004MzFYX1JFRl9MUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkVGX0xQICovCisjZGVmaW5lIFdNODMxWF9QV1JTVEFURV9ETFlfTUFTSyAgICAgICAgICAgICAgICAweDBDMDAgIC8qIFBXUlNUQVRFX0RMWSAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004MzFYX1BXUlNUQVRFX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAxMCAgLyogUFdSU1RBVEVfRExZIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTgzMVhfUFdSU1RBVEVfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBQV1JTVEFURV9ETFkgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODMxWF9TV1JTVF9ETFkgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFNXUlNUX0RMWSAqLworI2RlZmluZSBXTTgzMVhfU1dSU1RfRExZX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBTV1JTVF9ETFkgKi8KKyNkZWZpbmUgV004MzFYX1NXUlNUX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogU1dSU1RfRExZICovCisjZGVmaW5lIFdNODMxWF9TV1JTVF9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNXUlNUX0RMWSAqLworI2RlZmluZSBXTTgzMVhfVVNCMTAwTUFfU1RBUlRVUF9NQVNLICAgICAgICAgICAgMHgwMDMwICAvKiBVU0IxMDBNQV9TVEFSVFVQIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004MzFYX1VTQjEwME1BX1NUQVJUVVBfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogVVNCMTAwTUFfU1RBUlRVUCAtIFs1OjRdICovCisjZGVmaW5lIFdNODMxWF9VU0IxMDBNQV9TVEFSVFVQX1dJRFRIICAgICAgICAgICAgICAgIDIgIC8qIFVTQjEwME1BX1NUQVJUVVAgLSBbNTo0XSAqLworI2RlZmluZSBXTTgzMVhfVVNCX0NVUlJfU1RTICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBVU0JfQ1VSUl9TVFMgKi8KKyNkZWZpbmUgV004MzFYX1VTQl9DVVJSX1NUU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogVVNCX0NVUlJfU1RTICovCisjZGVmaW5lIFdNODMxWF9VU0JfQ1VSUl9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIFVTQl9DVVJSX1NUUyAqLworI2RlZmluZSBXTTgzMVhfVVNCX0NVUlJfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBVU0JfQ1VSUl9TVFMgKi8KKyNkZWZpbmUgV004MzFYX1VTQl9JTElNX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogVVNCX0lMSU0gLSBbMjowXSAqLworI2RlZmluZSBXTTgzMVhfVVNCX0lMSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBVU0JfSUxJTSAtIFsyOjBdICovCisjZGVmaW5lIFdNODMxWF9VU0JfSUxJTV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFVTQl9JTElNIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxNjM5NyAoMHg0MDBEKSAtIFN5c3RlbSBTdGF0dXMKKyAqLworI2RlZmluZSBXTTgzMVhfVEhXX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBUSFdfU1RTICovCisjZGVmaW5lIFdNODMxWF9USFdfU1RTX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFRIV19TVFMgKi8KKyNkZWZpbmUgV004MzFYX1RIV19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogVEhXX1NUUyAqLworI2RlZmluZSBXTTgzMVhfVEhXX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUSFdfU1RTICovCisjZGVmaW5lIFdNODMxWF9QV1JfU1JDX0JBVFQgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIFBXUl9TUkNfQkFUVCAqLworI2RlZmluZSBXTTgzMVhfUFdSX1NSQ19CQVRUX01BU0sgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBQV1JfU1JDX0JBVFQgKi8KKyNkZWZpbmUgV004MzFYX1BXUl9TUkNfQkFUVF9TSElGVCAgICAgICAgICAgICAgICAgICAxMCAgLyogUFdSX1NSQ19CQVRUICovCisjZGVmaW5lIFdNODMxWF9QV1JfU1JDX0JBVFRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFBXUl9TUkNfQkFUVCAqLworI2RlZmluZSBXTTgzMVhfUFdSX1dBTEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBQV1JfV0FMTCAqLworI2RlZmluZSBXTTgzMVhfUFdSX1dBTExfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBQV1JfV0FMTCAqLworI2RlZmluZSBXTTgzMVhfUFdSX1dBTExfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBQV1JfV0FMTCAqLworI2RlZmluZSBXTTgzMVhfUFdSX1dBTExfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQV1JfV0FMTCAqLworI2RlZmluZSBXTTgzMVhfUFdSX1VTQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBQV1JfVVNCICovCisjZGVmaW5lIFdNODMxWF9QV1JfVVNCX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFBXUl9VU0IgKi8KKyNkZWZpbmUgV004MzFYX1BXUl9VU0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUFdSX1VTQiAqLworI2RlZmluZSBXTTgzMVhfUFdSX1VTQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQV1JfVVNCICovCisjZGVmaW5lIFdNODMxWF9NQUlOX1NUQVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIE1BSU5fU1RBVEUgLSBbNDowXSAqLworI2RlZmluZSBXTTgzMVhfTUFJTl9TVEFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNQUlOX1NUQVRFIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004MzFYX01BSU5fU1RBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogTUFJTl9TVEFURSAtIFs0OjBdICovCisKKy8qCisgKiBSMTY0NTYgKDB4NDA0OCkgLSBDaGFyZ2VyIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODMxWF9DSEdfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENIR19FTkEgKi8KKyNkZWZpbmUgV004MzFYX0NIR19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ0hHX0VOQSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDSEdfRU5BICovCisjZGVmaW5lIFdNODMxWF9DSEdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENIR19FTkEgKi8KKyNkZWZpbmUgV004MzFYX0NIR19GUkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQ0hHX0ZSQyAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0ZSQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBDSEdfRlJDICovCisjZGVmaW5lIFdNODMxWF9DSEdfRlJDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIENIR19GUkMgKi8KKyNkZWZpbmUgV004MzFYX0NIR19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0hHX0ZSQyAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0lURVJNX01BU0sgICAgICAgICAgICAgICAgICAgMHgxQzAwICAvKiBDSEdfSVRFUk0gLSBbMTI6MTBdICovCisjZGVmaW5lIFdNODMxWF9DSEdfSVRFUk1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIENIR19JVEVSTSAtIFsxMjoxMF0gKi8KKyNkZWZpbmUgV004MzFYX0NIR19JVEVSTV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQ0hHX0lURVJNIC0gWzEyOjEwXSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0ZBU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBDSEdfRkFTVCAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0ZBU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBDSEdfRkFTVCAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0ZBU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBDSEdfRkFTVCAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0ZBU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDSEdfRkFTVCAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0lNT05fRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBDSEdfSU1PTl9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0NIR19JTU9OX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQ0hHX0lNT05fRU5BICovCisjZGVmaW5lIFdNODMxWF9DSEdfSU1PTl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIENIR19JTU9OX0VOQSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0lNT05fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBDSEdfSU1PTl9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0NIR19DSElQX1RFTVBfTU9OICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ0hHX0NISVBfVEVNUF9NT04gKi8KKyNkZWZpbmUgV004MzFYX0NIR19DSElQX1RFTVBfTU9OX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQ0hHX0NISVBfVEVNUF9NT04gKi8KKyNkZWZpbmUgV004MzFYX0NIR19DSElQX1RFTVBfTU9OX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQ0hHX0NISVBfVEVNUF9NT04gKi8KKyNkZWZpbmUgV004MzFYX0NIR19DSElQX1RFTVBfTU9OX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQ0hHX0NISVBfVEVNUF9NT04gKi8KKworLyoKKyAqIFIxNjQ1NyAoMHg0MDQ5KSAtIENoYXJnZXIgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004MzFYX0NIR19PRkZfTVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQ0hHX09GRl9NU0sgKi8KKyNkZWZpbmUgV004MzFYX0NIR19PRkZfTVNLX01BU0sgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQ0hHX09GRl9NU0sgKi8KKyNkZWZpbmUgV004MzFYX0NIR19PRkZfTVNLX1NISUZUICAgICAgICAgICAgICAgICAgICAxNCAgLyogQ0hHX09GRl9NU0sgKi8KKyNkZWZpbmUgV004MzFYX0NIR19PRkZfTVNLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0hHX09GRl9NU0sgKi8KKyNkZWZpbmUgV004MzFYX0NIR19USU1FX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogQ0hHX1RJTUUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004MzFYX0NIR19USU1FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQ0hHX1RJTUUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004MzFYX0NIR19USU1FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQ0hHX1RJTUUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004MzFYX0NIR19UUktMX0lMSU1fTUFTSyAgICAgICAgICAgICAgIDB4MDBDMCAgLyogQ0hHX1RSS0xfSUxJTSAtIFs3OjZdICovCisjZGVmaW5lIFdNODMxWF9DSEdfVFJLTF9JTElNX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIENIR19UUktMX0lMSU0gLSBbNzo2XSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX1RSS0xfSUxJTV9XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBDSEdfVFJLTF9JTElNIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004MzFYX0NIR19WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogQ0hHX1ZTRUwgLSBbNTo0XSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBDSEdfVlNFTCAtIFs1OjRdICovCisjZGVmaW5lIFdNODMxWF9DSEdfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIENIR19WU0VMIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004MzFYX0NIR19GQVNUX0lMSU1fTUFTSyAgICAgICAgICAgICAgIDB4MDAwRiAgLyogQ0hHX0ZBU1RfSUxJTSAtIFszOjBdICovCisjZGVmaW5lIFdNODMxWF9DSEdfRkFTVF9JTElNX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIENIR19GQVNUX0lMSU0gLSBbMzowXSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0ZBU1RfSUxJTV9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBDSEdfRkFTVF9JTElNIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNjQ1OCAoMHg0MDRBKSAtIENoYXJnZXIgU3RhdHVzCisgKi8KKyNkZWZpbmUgV004MzFYX0JBVFRfT1ZfU1RTICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQkFUVF9PVl9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0JBVFRfT1ZfU1RTX01BU0sgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQkFUVF9PVl9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0JBVFRfT1ZfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgICAxNSAgLyogQkFUVF9PVl9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0JBVFRfT1ZfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkFUVF9PVl9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0NIR19TVEFURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4NzAwMCAgLyogQ0hHX1NUQVRFIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX1NUQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBDSEdfU1RBVEUgLSBbMTQ6MTJdICovCisjZGVmaW5lIFdNODMxWF9DSEdfU1RBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIENIR19TVEFURSAtIFsxNDoxMl0gKi8KKyNkZWZpbmUgV004MzFYX0JBVFRfSE9UX1NUUyAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQkFUVF9IT1RfU1RTICovCisjZGVmaW5lIFdNODMxWF9CQVRUX0hPVF9TVFNfTUFTSyAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEJBVFRfSE9UX1NUUyAqLworI2RlZmluZSBXTTgzMVhfQkFUVF9IT1RfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDExICAvKiBCQVRUX0hPVF9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0JBVFRfSE9UX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQkFUVF9IT1RfU1RTICovCisjZGVmaW5lIFdNODMxWF9CQVRUX0NPTERfU1RTICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEJBVFRfQ09MRF9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0JBVFRfQ09MRF9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQkFUVF9DT0xEX1NUUyAqLworI2RlZmluZSBXTTgzMVhfQkFUVF9DT0xEX1NUU19TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBCQVRUX0NPTERfU1RTICovCisjZGVmaW5lIFdNODMxWF9CQVRUX0NPTERfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEJBVFRfQ09MRF9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0NIR19UT1BPRkYgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQ0hHX1RPUE9GRiAqLworI2RlZmluZSBXTTgzMVhfQ0hHX1RPUE9GRl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBDSEdfVE9QT0ZGICovCisjZGVmaW5lIFdNODMxWF9DSEdfVE9QT0ZGX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIENIR19UT1BPRkYgKi8KKyNkZWZpbmUgV004MzFYX0NIR19UT1BPRkZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0hHX1RPUE9GRiAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBDSEdfQUNUSVZFICovCisjZGVmaW5lIFdNODMxWF9DSEdfQUNUSVZFX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIENIR19BQ1RJVkUgKi8KKyNkZWZpbmUgV004MzFYX0NIR19BQ1RJVkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQ0hHX0FDVElWRSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX0FDVElWRV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDSEdfQUNUSVZFICovCisjZGVmaW5lIFdNODMxWF9DSEdfVElNRV9FTEFQU0VEX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIENIR19USU1FX0VMQVBTRUQgLSBbNzowXSAqLworI2RlZmluZSBXTTgzMVhfQ0hHX1RJTUVfRUxBUFNFRF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBDSEdfVElNRV9FTEFQU0VEIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004MzFYX0NIR19USU1FX0VMQVBTRURfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogQ0hHX1RJTUVfRUxBUFNFRCAtIFs3OjBdICovCisKKyNkZWZpbmUgV004MzFYX0NIR19TVEFURV9PRkYgICAgICAgICAoMCA8PCBXTTgzMVhfQ0hHX1NUQVRFX1NISUZUKQorI2RlZmluZSBXTTgzMVhfQ0hHX1NUQVRFX1RSSUNLTEUgICAgICgxIDw8IFdNODMxWF9DSEdfU1RBVEVfU0hJRlQpCisjZGVmaW5lIFdNODMxWF9DSEdfU1RBVEVfRkFTVCAgICAgICAgKDIgPDwgV004MzFYX0NIR19TVEFURV9TSElGVCkKKyNkZWZpbmUgV004MzFYX0NIR19TVEFURV9UUklDS0xFX09UICAoMyA8PCBXTTgzMVhfQ0hHX1NUQVRFX1NISUZUKQorI2RlZmluZSBXTTgzMVhfQ0hHX1NUQVRFX0ZBU1RfT1QgICAgICg0IDw8IFdNODMxWF9DSEdfU1RBVEVfU0hJRlQpCisjZGVmaW5lIFdNODMxWF9DSEdfU1RBVEVfREVGRUNUSVZFICAgKDUgPDwgV004MzFYX0NIR19TVEFURV9TSElGVCkKKworLyoKKyAqIFIxNjQ1OSAoMHg0MDRCKSAtIEJhY2t1cCBDaGFyZ2VyIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzMVhfQktVUF9DSEdfRU5BICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBCS1VQX0NIR19FTkEgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQ0hHX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQktVUF9DSEdfRU5BICovCisjZGVmaW5lIFdNODMxWF9CS1VQX0NIR19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUgIC8qIEJLVVBfQ0hHX0VOQSAqLworI2RlZmluZSBXTTgzMVhfQktVUF9DSEdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBCS1VQX0NIR19FTkEgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQ0hHX1NUUyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQktVUF9DSEdfU1RTICovCisjZGVmaW5lIFdNODMxWF9CS1VQX0NIR19TVFNfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEJLVVBfQ0hHX1NUUyAqLworI2RlZmluZSBXTTgzMVhfQktVUF9DSEdfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBCS1VQX0NIR19TVFMgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQ0hHX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQktVUF9DSEdfU1RTICovCisjZGVmaW5lIFdNODMxWF9CS1VQX0NIR19NT0RFICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEJLVVBfQ0hHX01PREUgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQ0hHX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQktVUF9DSEdfTU9ERSAqLworI2RlZmluZSBXTTgzMVhfQktVUF9DSEdfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgIDEyICAvKiBCS1VQX0NIR19NT0RFICovCisjZGVmaW5lIFdNODMxWF9CS1VQX0NIR19NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEJLVVBfQ0hHX01PREUgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQkFUVF9ERVRfRU5BICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQktVUF9CQVRUX0RFVF9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQkFUVF9ERVRfRU5BX01BU0sgICAgICAgICAgIDB4MDgwMCAgLyogQktVUF9CQVRUX0RFVF9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQkFUVF9ERVRfRU5BX1NISUZUICAgICAgICAgICAgICAxMSAgLyogQktVUF9CQVRUX0RFVF9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQkFUVF9ERVRfRU5BX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQktVUF9CQVRUX0RFVF9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQkFUVF9TVFMgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQktVUF9CQVRUX1NUUyAqLworI2RlZmluZSBXTTgzMVhfQktVUF9CQVRUX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBCS1VQX0JBVFRfU1RTICovCisjZGVmaW5lIFdNODMxWF9CS1VQX0JBVFRfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIEJLVVBfQkFUVF9TVFMgKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQkFUVF9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQktVUF9CQVRUX1NUUyAqLworI2RlZmluZSBXTTgzMVhfQktVUF9DSEdfVkxJTSAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBCS1VQX0NIR19WTElNICovCisjZGVmaW5lIFdNODMxWF9CS1VQX0NIR19WTElNX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEJLVVBfQ0hHX1ZMSU0gKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQ0hHX1ZMSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQktVUF9DSEdfVkxJTSAqLworI2RlZmluZSBXTTgzMVhfQktVUF9DSEdfVkxJTV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBCS1VQX0NIR19WTElNICovCisjZGVmaW5lIFdNODMxWF9CS1VQX0NIR19JTElNX01BU0sgICAgICAgICAgICAgICAweDAwMDMgIC8qIEJLVVBfQ0hHX0lMSU0gLSBbMTowXSAqLworI2RlZmluZSBXTTgzMVhfQktVUF9DSEdfSUxJTV9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBCS1VQX0NIR19JTElNIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004MzFYX0JLVVBfQ0hHX0lMSU1fV0lEVEggICAgICAgICAgICAgICAgICAgMiAgLyogQktVUF9DSEdfSUxJTSAtIFsxOjBdICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAppbmRleCAwNTIxMTc3Li5hZGFmM2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaApAQCAtNDEsNyArNDEsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CiAJc3RydWN0IGRldmljZSAqdGhpc19kZXZpY2U7Ci0JY29uc3QgY2hhciAqZGV2bm9kZTsKKwljb25zdCBjaGFyICpub2RlbmFtZTsKKwltb2RlX3QgbW9kZTsKIH07CiAKIGV4dGVybiBpbnQgbWlzY19yZWdpc3RlcihzdHJ1Y3QgbWlzY2RldmljZSAqIG1pc2MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDlhNzJjYzcuLmI2ZWFlNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBudW1fcGh5c3BhZ2VzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyYW1fcGFnZXM7CiBleHRlcm4gdm9pZCAqIGhpZ2hfbWVtb3J5OwogZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7CiAKQEAgLTEwMyw2ICsxMDQsNyBAQAogI2RlZmluZSBWTV9NSVhFRE1BUAkweDEwMDAwMDAwCS8qIENhbiBjb250YWluICJzdHJ1Y3QgcGFnZSIgYW5kIHB1cmUgUEZOIHBhZ2VzICovCiAjZGVmaW5lIFZNX1NBTwkJMHgyMDAwMDAwMAkvKiBTdHJvbmcgQWNjZXNzIE9yZGVyaW5nIChwb3dlcnBjKSAqLwogI2RlZmluZSBWTV9QRk5fQVRfTU1BUAkweDQwMDAwMDAwCS8qIFBGTk1BUCB2bWEgdGhhdCBpcyBmdWxseSBtYXBwZWQgYXQgbW1hcCB0aW1lICovCisjZGVmaW5lIFZNX01FUkdFQUJMRQkweDgwMDAwMDAwCS8qIEtTTSBtYXkgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCiAKICNpZm5kZWYgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUwkJLyogYXJjaCBjYW4gb3ZlcnJpZGUgdGhpcyAqLwogI2RlZmluZSBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTIFZNX0RBVEFfREVGQVVMVF9GTEFHUwpAQCAtMjgzLDYgKzI4NSwxNCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpOworI2Vsc2UKK3N0YXRpYyBpbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmNvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC03MDAsMTcgKzcxMCw4IEBACiAKIGV4dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhcyh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19TSE1FTQotZXh0ZXJuIGludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywKLQkJCSAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKK2ludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKIHN0cnVjdCBmaWxlICpzaG1lbV9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQogaW50IHNobWVtX3plcm9fc2V0dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCiAjaWZuZGVmIENPTkZJR19NTVUKQEAgLTgxNSw2ICs4MTYsNyBAQAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7CiBpbnQgZ2V0X3VzZXJfcGFnZXNfZmFzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIGludCB3cml0ZSwKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXMpOworc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKTsKIAogZXh0ZXJuIGludCB0cnlfdG9fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICogcGFnZSwgZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIHZvaWQgZG9faW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKQEAgLTEwNTgsNiArMTA2MCw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcGVyX2NwdV9wYWdlc2V0KHZvaWQpIHt9CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgem9uZV9wY3BfdXBkYXRlKHN0cnVjdCB6b25lICp6b25lKTsKKwogLyogbm9tbXUuYyAqLwogZXh0ZXJuIGF0b21pY19sb25nX3QgbW1hcF9wYWdlc19hbGxvY2F0ZWQ7CiAKQEAgLTEyMjYsNyArMTIzMCw4IEBACiAjZGVmaW5lIEZPTExfV1JJVEUJMHgwMQkvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi8KICNkZWZpbmUgRk9MTF9UT1VDSAkweDAyCS8qIG1hcmsgcGFnZSBhY2Nlc3NlZCAqLwogI2RlZmluZSBGT0xMX0dFVAkweDA0CS8qIGRvIGdldF9wYWdlIG9uIHBhZ2UgKi8KLSNkZWZpbmUgRk9MTF9BTk9OCTB4MDgJLyogZ2l2ZSBaRVJPX1BBR0UgaWYgbm8gcGd0YWJsZSAqLworI2RlZmluZSBGT0xMX0RVTVAJMHgwOAkvKiBnaXZlIGVycm9yIG9uIGhvbGUgaWYgaXQgd291bGQgYmUgemVybyAqLworI2RlZmluZSBGT0xMX0ZPUkNFCTB4MTAJLyogZ2V0X3VzZXJfcGFnZXMgcmVhZC93cml0ZSB3L28gcGVybWlzc2lvbiAqLwogCiB0eXBlZGVmIGludCAoKnB0ZV9mbl90KShwdGVfdCAqcHRlLCBwZ3RhYmxlX3QgdG9rZW4sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCXZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggN2ZiYjk3Mi4uODgzNWI4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC01LDcgKzUsNyBAQAogICogcGFnZV9pc19maWxlX2NhY2hlIC0gc2hvdWxkIHRoZSBwYWdlIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAogICoKLSAqIFJldHVybnMgTFJVX0ZJTEUgaWYgQHBhZ2UgaXMgcGFnZSBjYWNoZSBwYWdlIGJhY2tlZCBieSBhIHJlZ3VsYXIgZmlsZXN5c3RlbSwKKyAqIFJldHVybnMgMSBpZiBAcGFnZSBpcyBwYWdlIGNhY2hlIHBhZ2UgYmFja2VkIGJ5IGEgcmVndWxhciBmaWxlc3lzdGVtLAogICogb3IgMCBpZiBAcGFnZSBpcyBhbm9ueW1vdXMsIHRtcGZzIG9yIG90aGVyd2lzZSByYW0gb3Igc3dhcCBiYWNrZWQuCiAgKiBVc2VkIGJ5IGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgdGhlIExSVSBsaXN0cywgdG8gc29ydCBhIHBhZ2UKICAqIG9udG8gdGhlIHJpZ2h0IExSVSBsaXN0LgpAQCAtMTYsMTEgKzE2LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgcGFnZV9pc19maWxlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBUaGUgcGFnZSBpcyBwYWdlIGNhY2hlIGJhY2tlZCBieSBhIG5vcm1hbCBmaWxlc3lzdGVtLiAqLwotCXJldHVybiBMUlVfRklMRTsKKwlyZXR1cm4gIVBhZ2VTd2FwQmFja2VkKHBhZ2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTM5LDIxICszNSwzNiBAQAogCW1lbV9jZ3JvdXBfZGVsX2xydV9saXN0KHBhZ2UsIGwpOwogfQogCisvKioKKyAqIHBhZ2VfbHJ1X2Jhc2VfdHlwZSAtIHdoaWNoIExSVSBsaXN0IHR5cGUgc2hvdWxkIGEgcGFnZSBiZSBvbj8KKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB0ZXN0CisgKgorICogVXNlZCBmb3IgTFJVIGxpc3QgaW5kZXggYXJpdGhtZXRpYy4KKyAqCisgKiBSZXR1cm5zIHRoZSBiYXNlIExSVSB0eXBlIC0gZmlsZSBvciBhbm9uIC0gQHBhZ2Ugc2hvdWxkIGJlIG9uLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnVfYmFzZV90eXBlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCisJCXJldHVybiBMUlVfSU5BQ1RJVkVfRklMRTsKKwlyZXR1cm4gTFJVX0lOQUNUSVZFX0FOT047Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogZGVsX3BhZ2VfZnJvbV9scnUoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQogewotCWVudW0gbHJ1X2xpc3QgbCA9IExSVV9CQVNFOworCWVudW0gbHJ1X2xpc3QgbDsKIAogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKIAkJX19DbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKIAkJbCA9IExSVV9VTkVWSUNUQUJMRTsKIAl9IGVsc2UgeworCQlsID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewogCQkJX19DbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAJCQlsICs9IExSVV9BQ1RJVkU7CiAJCX0KLQkJbCArPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CiAJfQogCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIAltZW1fY2dyb3VwX2RlbF9scnVfbGlzdChwYWdlLCBsKTsKQEAgLTY4LDE0ICs3OSwxNCBAQAogICovCiBzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JZW51bSBscnVfbGlzdCBscnUgPSBMUlVfQkFTRTsKKwllbnVtIGxydV9saXN0IGxydTsKIAogCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCiAJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKIAllbHNlIHsKKwkJbHJ1ID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKIAkJCWxydSArPSBMUlVfQUNUSVZFOwotCQlscnUgKz0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCX0KIAogCXJldHVybiBscnU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKaW5kZXggNDAzYWE1MC4uMmVlMjJlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaApAQCAtNDAsNiArNDAsOCBAQAogfTsKIAogc3RydWN0IG1tY19leHRfY3NkIHsKKwl1OAkJCXJldjsKKwl1bnNpZ25lZCBpbnQJCXNhX3RpbWVvdXQ7CQkvKiBVbml0czogMTAwbnMgKi8KIAl1bnNpZ25lZCBpbnQJCWhzX21heF9kdHI7CiAJdW5zaWduZWQgaW50CQlzZWN0b3JzOwogfTsKQEAgLTYyLDcgKzY0LDggQEAKIAkJCQlsb3dfc3BlZWQ6MSwKIAkJCQl3aWRlX2J1czoxLAogCQkJCWhpZ2hfcG93ZXI6MSwKLQkJCQloaWdoX3NwZWVkOjE7CisJCQkJaGlnaF9zcGVlZDoxLAorCQkJCWRpc2FibGVfY2Q6MTsKIH07CiAKIHN0cnVjdCBzZGlvX2NpcyB7CkBAIC05NCw2ICs5Nyw4IEBACiAjZGVmaW5lIE1NQ19TVEFURV9SRUFET05MWQkoMTw8MSkJCS8qIGNhcmQgaXMgcmVhZC1vbmx5ICovCiAjZGVmaW5lIE1NQ19TVEFURV9ISUdIU1BFRUQJKDE8PDIpCQkvKiBjYXJkIGlzIGluIGhpZ2ggc3BlZWQgbW9kZSAqLwogI2RlZmluZSBNTUNfU1RBVEVfQkxPQ0tBRERSCSgxPDwzKQkJLyogY2FyZCB1c2VzIGJsb2NrLWFkZHJlc3NpbmcgKi8KKwl1bnNpZ25lZCBpbnQJCXF1aXJrczsgCS8qIGNhcmQgcXVpcmtzICovCisjZGVmaW5lIE1NQ19RVUlSS19MRU5JRU5UX0ZOMAkoMTw8MCkJCS8qIGFsbG93IFNESU8gRk4wIHdyaXRlcyBvdXRzaWRlIG9mIHRoZSBWUyBDQ0NSIHJhbmdlICovCiAKIAl1MzIJCQlyYXdfY2lkWzRdOwkvKiByYXcgY2FyZCBDSUQgKi8KIAl1MzIJCQlyYXdfY3NkWzRdOwkvKiByYXcgY2FyZCBDU0QgKi8KQEAgLTEyOSw2ICsxMzQsMTEgQEAKICNkZWZpbmUgbW1jX2NhcmRfc2V0X2hpZ2hzcGVlZChjKSAoKGMpLT5zdGF0ZSB8PSBNTUNfU1RBVEVfSElHSFNQRUVEKQogI2RlZmluZSBtbWNfY2FyZF9zZXRfYmxvY2thZGRyKGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9CTE9DS0FERFIpCiAKK3N0YXRpYyBpbmxpbmUgaW50IG1tY19jYXJkX2xlbmllbnRfZm4wKGNvbnN0IHN0cnVjdCBtbWNfY2FyZCAqYykKK3sKKwlyZXR1cm4gYy0+cXVpcmtzICYgTU1DX1FVSVJLX0xFTklFTlRfRk4wOworfQorCiAjZGVmaW5lIG1tY19jYXJkX25hbWUoYykJKChjKS0+Y2lkLnByb2RfbmFtZSkKICNkZWZpbmUgbW1jX2NhcmRfaWQoYykJCShkZXZfbmFtZSgmKGMpLT5kZXYpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKaW5kZXggN2FjOGI1MC4uZTQ4OThlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaApAQCAtMTM5LDYgKzEzOSw3IEBACiAKIGV4dGVybiBpbnQgX19tbWNfY2xhaW1faG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGF0b21pY190ICphYm9ydCk7CiBleHRlcm4gdm9pZCBtbWNfcmVsZWFzZV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CitleHRlcm4gaW50IG1tY190cnlfY2xhaW1faG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCiAvKioKICAqCW1tY19jbGFpbV9ob3N0IC0gZXhjbHVzaXZlbHkgY2xhaW0gYSBob3N0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggM2U3NjE1ZS4uODFiYjQyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtNTEsNiArNTEsMzUgQEAKIH07CiAKIHN0cnVjdCBtbWNfaG9zdF9vcHMgeworCS8qCisJICogSG9zdHMgdGhhdCBzdXBwb3J0IHBvd2VyIHNhdmluZyBjYW4gdXNlIHRoZSAnZW5hYmxlJyBhbmQgJ2Rpc2FibGUnCisJICogbWV0aG9kcyB0byBleGl0IGFuZCBlbnRlciBwb3dlciBzYXZpbmcgc3RhdGVzLiAnZW5hYmxlJyBpcyBjYWxsZWQKKwkgKiB3aGVuIHRoZSBob3N0IGlzIGNsYWltZWQgYW5kICdkaXNhYmxlJyBpcyBjYWxsZWQgKG9yIHNjaGVkdWxlZCB3aXRoCisJICogYSBkZWxheSkgd2hlbiB0aGUgaG9zdCBpcyByZWxlYXNlZC4gVGhlICdkaXNhYmxlJyBpcyBzY2hlZHVsZWQgaWYKKwkgKiB0aGUgZGlzYWJsZSBkZWxheSBzZXQgYnkgJ21tY19zZXRfZGlzYWJsZV9kZWxheSgpJyBpcyBub24temVybywKKwkgKiBvdGhlcndpc2UgJ2Rpc2FibGUnIGlzIGNhbGxlZCBpbW1lZGlhdGVseS4gJ2Rpc2FibGUnIG1heSBiZQorCSAqIHNjaGVkdWxlZCByZXBlYXRlZGx5LCB0byBwZXJtaXQgZXZlciBncmVhdGVyIHBvd2VyIHNhdmluZyBhdCB0aGUKKwkgKiBleHBlbnNlIG9mIGV2ZXIgZ3JlYXRlciBsYXRlbmN5IHRvIHJlLWVuYWJsZS4gUmVzY2hlZHVsaW5nIGlzCisJICogZGV0ZXJtaW5lZCBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSAnZGlzYWJsZScgbWV0aG9kLiBBIHBvc2l0aXZlCisJICogdmFsdWUgZ2l2ZXMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4KKwkgKgorCSAqIEluIHRoZSBjYXNlIHdoZXJlIGEgaG9zdCBmdW5jdGlvbiAobGlrZSBzZXRfaW9zKSBtYXkgYmUgY2FsbGVkCisJICogd2l0aCBvciB3aXRob3V0IHRoZSBob3N0IGNsYWltZWQsIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgY2FuIGJlCisJICogZG9uZSBkaXJlY3RseSBhbmQgd2lsbCBuZXN0IGNvcnJlY3RseS4gQ2FsbCAnbW1jX2hvc3RfZW5hYmxlKCknIGFuZAorCSAqICdtbWNfaG9zdF9sYXp5X2Rpc2FibGUoKScgZm9yIHRoaXMgcHVycG9zZSwgYnV0IG5vdGUgdGhhdCB0aGVzZQorCSAqIGZ1bmN0aW9ucyBtdXN0IGJlIHBhaXJlZC4KKwkgKgorCSAqIEFsdGVybmF0aXZlbHksICdtbWNfaG9zdF9lbmFibGUoKScgbWF5IGJlIHBhaXJlZCB3aXRoCisJICogJ21tY19ob3N0X2Rpc2FibGUoKScgd2hpY2ggY2FsbHMgJ2Rpc2FibGUnIGltbWVkaWF0ZWx5LiAgSW4gdGhpcworCSAqIGNhc2UgdGhlICdkaXNhYmxlJyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCAnbGF6eScgc2V0IHRvIDAuCisJICogVGhpcyBpcyBtYWlubHkgdXNlZnVsIGZvciBlcnJvciBwYXRocy4KKwkgKgorCSAqIEJlY2F1c2UgbGF6eSBkaXNhYmxlIG1heSBiZSBjYWxsZWQgZnJvbSBhIHdvcmsgcXVldWUsIHRoZSAnZGlzYWJsZScKKwkgKiBtZXRob2QgbXVzdCBjbGFpbSB0aGUgaG9zdCB3aGVuICdsYXp5JyAhPSAwLCB3aGljaCB3aWxsIHdvcmsKKwkgKiBjb3JyZWN0bHkgYmVjYXVzZSByZWN1cnNpb24gaXMgZGV0ZWN0ZWQgYW5kIGhhbmRsZWQuCisJICovCisJaW50ICgqZW5hYmxlKShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCWludCAoKmRpc2FibGUpKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IGxhenkpOwogCXZvaWQJKCpyZXF1ZXN0KShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKTsKIAkvKgogCSAqIEF2b2lkIGNhbGxpbmcgdGhlc2UgdGhyZWUgZnVuY3Rpb25zIHRvbyBvZnRlbiBvciBpbiBhICJmYXN0IHBhdGgiLApAQCAtMTE4LDYgKzE0Nyw5IEBACiAjZGVmaW5lIE1NQ19DQVBfU1BJCQkoMSA8PCA0KQkvKiBUYWxrcyBvbmx5IFNQSSBwcm90b2NvbHMgKi8KICNkZWZpbmUgTU1DX0NBUF9ORUVEU19QT0xMCSgxIDw8IDUpCS8qIE5lZWRzIHBvbGxpbmcgZm9yIGNhcmQtZGV0ZWN0aW9uICovCiAjZGVmaW5lIE1NQ19DQVBfOF9CSVRfREFUQQkoMSA8PCA2KQkvKiBDYW4gdGhlIGhvc3QgZG8gOCBiaXQgdHJhbnNmZXJzICovCisjZGVmaW5lIE1NQ19DQVBfRElTQUJMRQkJKDEgPDwgNykJLyogQ2FuIHRoZSBob3N0IGJlIGRpc2FibGVkICovCisjZGVmaW5lIE1NQ19DQVBfTk9OUkVNT1ZBQkxFCSgxIDw8IDgpCS8qIE5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KKyNkZWZpbmUgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1kJKDEgPDwgOSkJLyogV2FpdHMgd2hpbGUgY2FyZCBpcyBidXN5ICovCiAKIAkvKiBob3N0IHNwZWNpZmljIGJsb2NrIGRhdGEgKi8KIAl1bnNpZ25lZCBpbnQJCW1heF9zZWdfc2l6ZTsJLyogc2VlIGJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplICovCkBAIC0xNDIsOSArMTc0LDE4IEBACiAJdW5zaWduZWQgaW50CQlyZW1vdmVkOjE7CS8qIGhvc3QgaXMgYmVpbmcgcmVtb3ZlZCAqLwogI2VuZGlmCiAKKwkvKiBPbmx5IHVzZWQgd2l0aCBNTUNfQ0FQX0RJU0FCTEUgKi8KKwlpbnQJCQllbmFibGVkOwkvKiBob3N0IGlzIGVuYWJsZWQgKi8KKwlpbnQJCQluZXN0aW5nX2NudDsJLyogImVuYWJsZSIgbmVzdGluZyBjb3VudCAqLworCWludAkJCWVuX2Rpc19yZWN1cnM7CS8qIGRldGVjdCByZWN1cnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWRpc2FibGVfZGVsYXk7CS8qIGRpc2FibGUgZGVsYXkgaW4gbXNlY3MgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWRpc2FibGU7CS8qIGRpc2FibGluZyB3b3JrICovCisKIAlzdHJ1Y3QgbW1jX2NhcmQJCSpjYXJkOwkJLyogZGV2aWNlIGF0dGFjaGVkIHRvIHRoaXMgaG9zdCAqLwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7CisJc3RydWN0IHRhc2tfc3RydWN0CSpjbGFpbWVyOwkvKiB0YXNrIHRoYXQgaGFzIGhvc3QgY2xhaW1lZCAqLworCWludAkJCWNsYWltX2NudDsJLyogImNsYWltIiBuZXN0aW5nIGNvdW50ICovCiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWRldGVjdDsKIApAQCAtMTgzLDYgKzIyNCw5IEBACiBleHRlcm4gaW50IG1tY19zdXNwZW5kX2hvc3Qoc3RydWN0IG1tY19ob3N0ICosIHBtX21lc3NhZ2VfdCk7CiBleHRlcm4gaW50IG1tY19yZXN1bWVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKik7CiAKK2V4dGVybiB2b2lkIG1tY19wb3dlcl9zYXZlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK2V4dGVybiB2b2lkIG1tY19wb3dlcl9yZXN0b3JlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKKwogZXh0ZXJuIHZvaWQgbW1jX2RldGVjdF9jaGFuZ2Uoc3RydWN0IG1tY19ob3N0ICosIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwogZXh0ZXJuIHZvaWQgbW1jX3JlcXVlc3RfZG9uZShzdHJ1Y3QgbW1jX2hvc3QgKiwgc3RydWN0IG1tY19yZXF1ZXN0ICopOwogCkBAIC0xOTcsNSArMjQxLDE5IEBACiBpbnQgbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHkpOwogaW50IG1tY19yZWd1bGF0b3Jfc2V0X29jcihzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHksIHVuc2lnbmVkIHNob3J0IHZkZF9iaXQpOwogCitpbnQgbW1jX2NhcmRfYXdha2Uoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK2ludCBtbWNfY2FyZF9zbGVlcChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworaW50IG1tY19jYXJkX2Nhbl9zbGVlcChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCitpbnQgbW1jX2hvc3RfZW5hYmxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CitpbnQgbW1jX2hvc3RfZGlzYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworaW50IG1tY19ob3N0X2xhenlfZGlzYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX3NldF9kaXNhYmxlX2RlbGF5KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwKKwkJCQkJIHVuc2lnbmVkIGludCBkaXNhYmxlX2RlbGF5KQoreworCWhvc3QtPmRpc2FibGVfZGVsYXkgPSBkaXNhYmxlX2RlbGF5OworfQorCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAppbmRleCAxNGI4MWYzLi5jMDJjOGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaApAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBNTUNfQUxMX1NFTkRfQ0lEICAgICAgICAgIDIgICAvKiBiY3IgICAgICAgICAgICAgICAgICAgICBSMiAgKi8KICNkZWZpbmUgTU1DX1NFVF9SRUxBVElWRV9BRERSICAgICAzICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjEgICovCiAjZGVmaW5lIE1NQ19TRVRfRFNSICAgICAgICAgICAgICAgNCAgIC8qIGJjICAgWzMxOjE2XSBSQ0EgICAgICAgICAgICAqLworI2RlZmluZSBNTUNfU0xFRVBfQVdBS0UJCSAgNSAgIC8qIGFjICAgWzMxOjE2XSBSQ0EgMTU6ZmxnIFIxYiAqLwogI2RlZmluZSBNTUNfU1dJVENIICAgICAgICAgICAgICAgIDYgICAvKiBhYyAgIFszMTowXSBTZWUgYmVsb3cgICBSMWIgKi8KICNkZWZpbmUgTU1DX1NFTEVDVF9DQVJEICAgICAgICAgICA3ICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjEgICovCiAjZGVmaW5lIE1NQ19TRU5EX0VYVF9DU0QgICAgICAgICAgOCAgIC8qIGFkdGMgICAgICAgICAgICAgICAgICAgIFIxICAqLwpAQCAtMTI3LDYgKzEyOCw3IEBACiAjZGVmaW5lIFIxX1NUQVRVUyh4KSAgICAgICAgICAgICh4ICYgMHhGRkZGRTAwMCkKICNkZWZpbmUgUjFfQ1VSUkVOVF9TVEFURSh4KQkoKHggJiAweDAwMDAxRTAwKSA+PiA5KQkvKiBzeCwgYiAoNCBiaXRzKSAqLwogI2RlZmluZSBSMV9SRUFEWV9GT1JfREFUQQkoMSA8PCA4KQkvKiBzeCwgYSAqLworI2RlZmluZSBSMV9TV0lUQ0hfRVJST1IJCSgxIDw8IDcpCS8qIHN4LCBjICovCiAjZGVmaW5lIFIxX0FQUF9DTUQJCSgxIDw8IDUpCS8qIHNyLCBjICovCiAKIC8qCkBAIC0yNTQsNiArMjU2LDcgQEAKICNkZWZpbmUgRVhUX0NTRF9DQVJEX1RZUEUJMTk2CS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfUkVWCQkxOTIJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9TRUNfQ05UCQkyMTIJLyogUk8sIDQgYnl0ZXMgKi8KKyNkZWZpbmUgRVhUX0NTRF9TX0FfVElNRU9VVAkyMTcKIAogLyoKICAqIEVYVF9DU0QgZmllbGQgZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKaW5kZXggNDUxYmRmYy4uYWMzYWI2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKQEAgLTY3LDYgKzY3LDcgQEAKIAogI2RlZmluZSBzZGlvX2dldF9kcnZkYXRhKGYpCWRldl9nZXRfZHJ2ZGF0YSgmKGYpLT5kZXYpCiAjZGVmaW5lIHNkaW9fc2V0X2RydmRhdGEoZixkKQlkZXZfc2V0X2RydmRhdGEoJihmKS0+ZGV2LCBkKQorI2RlZmluZSBkZXZfdG9fc2Rpb19mdW5jKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19mdW5jLCBkZXYpCiAKIC8qCiAgKiBTRElPIGZ1bmN0aW9uIGRldmljZSBkcml2ZXIKQEAgLTgxLDYgKzgyLDggQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcnY7CiB9OwogCisjZGVmaW5lIHRvX3NkaW9fZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19kcml2ZXIsIGRydikKKwogLyoqCiAgKiBTRElPX0RFVklDRSAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyBTRElPIGRldmljZQogICogQHZlbmQ6IHRoZSAxNiBiaXQgbWFudWZhY3R1cmVyIGNvZGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZmZmViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfTElOVVhfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfTElOVVhfTU1VX0NPTlRFWFRfSAorCitzdHJ1Y3QgbW1fc3RydWN0OworCit2b2lkIHVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cit2b2lkIHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAppbmRleCBiNzc0ODZkLi40ZTAyZWUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oCisrKyBiL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmgKQEAgLTYyLDYgKzYyLDE1IEBACiAJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIAkvKgorCSAqIGNoYW5nZV9wdGUgaXMgY2FsbGVkIGluIGNhc2VzIHRoYXQgcHRlIG1hcHBpbmcgdG8gcGFnZSBpcyBjaGFuZ2VkOgorCSAqIGZvciBleGFtcGxlLCB3aGVuIGtzbSByZW1hcHMgcHRlIHRvIHBvaW50IHRvIGEgbmV3IHNoYXJlZCBwYWdlLgorCSAqLworCXZvaWQgKCpjaGFuZ2VfcHRlKShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwKKwkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgcHRlX3QgcHRlKTsKKworCS8qCiAJICogQmVmb3JlIHRoaXMgaXMgaW52b2tlZCBhbnkgc2Vjb25kYXJ5IE1NVSBpcyBzdGlsbCBvayB0bwogCSAqIHJlYWQvd3JpdGUgdG8gdGhlIHBhZ2UgcHJldmlvdXNseSBwb2ludGVkIHRvIGJ5IHRoZSBMaW51eAogCSAqIHB0ZSBiZWNhdXNlIHRoZSBwYWdlIGhhc24ndCBiZWVuIGZyZWVkIHlldCBhbmQgaXQgd29uJ3QgYmUKQEAgLTE1NCw2ICsxNjMsOCBAQAogZXh0ZXJuIHZvaWQgX19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gaW50IF9fbW11X25vdGlmaWVyX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBfX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKTsKIGV4dGVybiB2b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKQEAgLTE3NSw2ICsxODYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG1tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3sKKwlpZiAobW1faGFzX25vdGlmaWVycyhtbSkpCisJCV9fbW11X25vdGlmaWVyX2NoYW5nZV9wdGUobW0sIGFkZHJlc3MsIHB0ZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTIzNiw2ICsyNTQsMTYgQEAKIAlfX3lvdW5nOwkJCQkJCQlcCiB9KQogCisjZGVmaW5lIHNldF9wdGVfYXRfbm90aWZ5KF9fbW0sIF9fYWRkcmVzcywgX19wdGVwLCBfX3B0ZSkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBtbV9zdHJ1Y3QgKl9fX21tID0gX19tbTsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fX2FkZHJlc3MgPSBfX2FkZHJlc3M7CQkJCVwKKwlwdGVfdCBfX19wdGUgPSBfX3B0ZTsJCQkJCQlcCisJCQkJCQkJCQlcCisJc2V0X3B0ZV9hdChfX19tbSwgX19fYWRkcmVzcywgX19wdGVwLCBfX19wdGUpOwkJCVwKKwltbXVfbm90aWZpZXJfY2hhbmdlX3B0ZShfX19tbSwgX19fYWRkcmVzcywgX19fcHRlKTsJCVwKK30pCisKICNlbHNlIC8qIENPTkZJR19NTVVfTk9USUZJRVIgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIG1tdV9ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpAQCAtMjQ4LDYgKzI3NiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbW11X25vdGlmaWVyX2NoYW5nZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0yNzMsNiArMzA2LDcgQEAKIAogI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nCiAjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2hfbm90aWZ5IHB0ZXBfY2xlYXJfZmx1c2gKKyNkZWZpbmUgc2V0X3B0ZV9hdF9ub3RpZnkgc2V0X3B0ZV9hdAogCiAjZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA4ODk1OTg1Li42NTJlZjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgTUlHUkFURV9VTk1PVkFCTEUgICAgIDAKICNkZWZpbmUgTUlHUkFURV9SRUNMQUlNQUJMRSAgIDEKICNkZWZpbmUgTUlHUkFURV9NT1ZBQkxFICAgICAgIDIKKyNkZWZpbmUgTUlHUkFURV9QQ1BUWVBFUyAgICAgIDMgLyogdGhlIG51bWJlciBvZiB0eXBlcyBvbiB0aGUgcGNwIGxpc3RzICovCiAjZGVmaW5lIE1JR1JBVEVfUkVTRVJWRSAgICAgICAzCiAjZGVmaW5lIE1JR1JBVEVfSVNPTEFURSAgICAgICA0IC8qIGNhbid0IGFsbG9jYXRlIGZyb20gaGVyZSAqLwogI2RlZmluZSBNSUdSQVRFX1RZUEVTICAgICAgICAgNQpAQCAtOTQsMTEgKzk1LDE1IEBACiAJTlJfU0xBQl9SRUNMQUlNQUJMRSwKIAlOUl9TTEFCX1VOUkVDTEFJTUFCTEUsCiAJTlJfUEFHRVRBQkxFLAkJLyogdXNlZCBmb3IgcGFnZXRhYmxlcyAqLworCU5SX0tFUk5FTF9TVEFDSywKKwkvKiBTZWNvbmQgMTI4IGJ5dGUgY2FjaGVsaW5lICovCiAJTlJfVU5TVEFCTEVfTkZTLAkvKiBORlMgdW5zdGFibGUgcGFnZXMgKi8KIAlOUl9CT1VOQ0UsCiAJTlJfVk1TQ0FOX1dSSVRFLAotCS8qIFNlY29uZCAxMjggYnl0ZSBjYWNoZWxpbmUgKi8KIAlOUl9XUklURUJBQ0tfVEVNUCwJLyogV3JpdGViYWNrIHVzaW5nIHRlbXBvcmFyeSBidWZmZXJzICovCisJTlJfSVNPTEFURURfQU5PTiwJLyogVGVtcG9yYXJ5IGlzb2xhdGVkIHBhZ2VzIGZyb20gYW5vbiBscnUgKi8KKwlOUl9JU09MQVRFRF9GSUxFLAkvKiBUZW1wb3JhcnkgaXNvbGF0ZWQgcGFnZXMgZnJvbSBmaWxlIGxydSAqLworCU5SX1NITUVNLAkJLyogc2htZW0gcGFnZXMgKGluY2x1ZGVkIHRtcGZzL0dFTSBwYWdlcykgKi8KICNpZmRlZiBDT05GSUdfTlVNQQogCU5VTUFfSElULAkJLyogYWxsb2NhdGVkIGluIGludGVuZGVkIG5vZGUgKi8KIAlOVU1BX01JU1MsCQkvKiBhbGxvY2F0ZWQgaW4gbm9uIGludGVuZGVkIG5vZGUgKi8KQEAgLTE2NSw3ICsxNzAsOSBAQAogCWludCBjb3VudDsJCS8qIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgbGlzdCAqLwogCWludCBoaWdoOwkJLyogaGlnaCB3YXRlcm1hcmssIGVtcHR5aW5nIG5lZWRlZCAqLwogCWludCBiYXRjaDsJCS8qIGNodW5rIHNpemUgZm9yIGJ1ZGR5IGFkZC9yZW1vdmUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIHRoZSBsaXN0IG9mIHBhZ2VzICovCisKKwkvKiBMaXN0cyBvZiBwYWdlcywgb25lIHBlciBtaWdyYXRlIHR5cGUgc3RvcmVkIG9uIHRoZSBwY3AtbGlzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RzW01JR1JBVEVfUENQVFlQRVNdOwogfTsKIAogc3RydWN0IHBlcl9jcHVfcGFnZXNldCB7CkBAIC0yNjksNiArMjc2LDExIEBACiAJICovCiAJdW5zaWduZWQgbG9uZwkJcmVjZW50X3JvdGF0ZWRbMl07CiAJdW5zaWduZWQgbG9uZwkJcmVjZW50X3NjYW5uZWRbMl07CisKKwkvKgorCSAqIGFjY3VtdWxhdGVkIGZvciBiYXRjaGluZworCSAqLworCXVuc2lnbmVkIGxvbmcJCW5yX3NhdmVkX3NjYW5bTlJfTFJVX0xJU1RTXTsKIH07CiAKIHN0cnVjdCB6b25lIHsKQEAgLTMyMyw3ICszMzUsNiBAQAogCXNwaW5sb2NrX3QJCWxydV9sb2NrOwkKIAlzdHJ1Y3Qgem9uZV9scnUgewogCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfc2F2ZWRfc2NhbjsJLyogYWNjdW11bGF0ZWQgZm9yIGJhdGNoaW5nICovCiAJfSBscnVbTlJfTFJVX0xJU1RTXTsKIAogCXN0cnVjdCB6b25lX3JlY2xhaW1fc3RhdCByZWNsYWltX3N0YXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCAxYmY1OTAwLi5mNThlOWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTM5OSw2ICszOTksMTcgQEAKIAkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKIH07CiAKKy8qIHNwaSAqLworCisjZGVmaW5lIFNQSV9OQU1FX1NJWkUJMzIKKyNkZWZpbmUgU1BJX01PRFVMRV9QUkVGSVggInNwaToiCisKK3N0cnVjdCBzcGlfZGV2aWNlX2lkIHsKKwljaGFyIG5hbWVbU1BJX05BTUVfU0laRV07CisJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGEJLyogRGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgKi8KKwkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKK307CisKIC8qIGRtaSAqLwogZW51bSBkbWlfZmllbGQgewogCURNSV9OT05FLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggZjhmOTJkMC4uMWM3NTViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiAjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CkBAIC0zMjcsMTAgKzMyNiw2IEBACiAJLyogVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKG1heSBiZSBtYW5nbGVkKS4gIFBlb3BsZSBsaWtlCiAJICAga2VlcGluZyBwb2ludGVycyB0byB0aGlzIHN0dWZmICovCiAJY2hhciAqYXJnczsKLSNpZmRlZiBDT05GSUdfTUFSS0VSUwotCXN0cnVjdCBtYXJrZXIgKm1hcmtlcnM7Ci0JdW5zaWduZWQgaW50IG51bV9tYXJrZXJzOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiAJc3RydWN0IHRyYWNlcG9pbnQgKnRyYWNlcG9pbnRzOwogCXVuc2lnbmVkIGludCBudW1fdHJhY2Vwb2ludHM7CkBAIC01MzUsOCArNTMwLDYgQEAKIAogZXh0ZXJuIHZvaWQgcHJpbnRfbW9kdWxlcyh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgbW9kdWxlX3VwZGF0ZV9tYXJrZXJzKHZvaWQpOwotCiBleHRlcm4gdm9pZCBtb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKHZvaWQpOwogZXh0ZXJuIGludCBtb2R1bGVfZ2V0X2l0ZXJfdHJhY2Vwb2ludHMoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiAKQEAgLTY1MSwxMCArNjQ0LDYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV91cGRhdGVfbWFya2Vycyh2b2lkKQotewotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbW9kdWxlX3VwZGF0ZV90cmFjZXBvaW50cyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IDQwMzBlYmEuLjdhMjMyYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTEyMSw2ICsxMjEsNyBAQAogCU5BTkRfRUNDX1NPRlQsCiAJTkFORF9FQ0NfSFcsCiAJTkFORF9FQ0NfSFdfU1lORFJPTUUsCisJTkFORF9FQ0NfSFdfT09CX0ZJUlNULAogfSBuYW5kX2VjY19tb2Rlc190OwogCiAvKgpAQCAtMjcxLDEzICsyNzIsMTMgQEAKIAkJCQkJICAgdWludDhfdCAqY2FsY19lY2MpOwogCWludAkJCSgqcmVhZF9wYWdlX3Jhdykoc3RydWN0IG10ZF9pbmZvICptdGQsCiAJCQkJCQkgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKLQkJCQkJCSB1aW50OF90ICpidWYpOworCQkJCQkJIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpOwogCXZvaWQJCQkoKndyaXRlX3BhZ2VfcmF3KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJCQkJCSAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCQkJCSAgY29uc3QgdWludDhfdCAqYnVmKTsKIAlpbnQJCQkoKnJlYWRfcGFnZSkoc3RydWN0IG10ZF9pbmZvICptdGQsCiAJCQkJCSAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKLQkJCQkJICAgICB1aW50OF90ICpidWYpOworCQkJCQkgICAgIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpOwogCWludAkJCSgqcmVhZF9zdWJwYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJCQkJICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogCQkJCQkgICAgIHVpbnQzMl90IG9mZnMsIHVpbnQzMl90IGxlbiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmRfZWNjLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kX2VjYy5oCmluZGV4IDA5MGRhNTAuLjA1MmVhOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmRfZWNjLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZF9lY2MuaApAQCAtMjEsNiArMjEsMTIgQEAKIGludCBuYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKTsKIAogLyoKKyAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciBlY2NzaXplIGJ5dGUgYmxvY2sKKyAqLworaW50IF9fbmFuZF9jb3JyZWN0X2RhdGEodV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MsCisJCQl1bnNpZ25lZCBpbnQgZWNjc2l6ZSk7CisKKy8qCiAgKiBEZXRlY3QgYW5kIGNvcnJlY3QgYSAxIGJpdCBlcnJvciBmb3IgMjU2IGJ5dGUgYmxvY2sKICAqLwogaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKaW5kZXggOGVkODczMy4uNGU0OWYzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaApAQCAtMjE0LDQgKzIxNCwxMiBAQAogbG9mZl90IG9uZW5hbmRfYWRkcihzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzLCBpbnQgYmxvY2spOwogaW50IGZsZXhvbmVuYW5kX3JlZ2lvbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGFkZHIpOwogCitzdHJ1Y3QgbXRkX3BhcnRpdGlvbjsKKworc3RydWN0IG9uZW5hbmRfcGxhdGZvcm1fZGF0YSB7CisJdm9pZAkJKCptbWNvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc3luY19yZWFkKTsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJdW5zaWduZWQgaW50CW5yX3BhcnRzOworfTsKKwogI2VuZGlmCS8qIF9fTElOVVhfTVREX09ORU5BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAppbmRleCA4NmE2YmJlLi5hY2FkYmY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaApAQCAtMjA3LDYgKzIwNyw5IEBACiAjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVQJCSgxIDw8IDEpCiAjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVRfQUxMCQkoMHhBQUFBKQogI2RlZmluZSBGTEVYT05FTkFORF9VTkNPUlJFQ1RBQkxFX0VSUk9SCSgweDEwMTApCisjZGVmaW5lIE9ORU5BTkRfRUNDXzNCSVQJCSgxIDw8IDIpCisjZGVmaW5lIE9ORU5BTkRfRUNDXzRCSVQJCSgxIDw8IDMpCisjZGVmaW5lIE9ORU5BTkRfRUNDXzRCSVRfVU5DT1JSRUNUQUJMRQkoMHgxMDEwKQogCiAvKgogICogT25lLVRpbWUgUHJvZ3JhbW1hYmxlIChPVFApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKaW5kZXggZDg3MGFlMi4uZWMwZjYwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtNDAsNyArNDAsNyBAQAogICogIC0gZm9sbG93IGxpbmtzIGF0IHRoZSBlbmQKICAqICAtIHJlcXVpcmUgYSBkaXJlY3RvcnkKICAqICAtIGVuZGluZyBzbGFzaGVzIG9rIGV2ZW4gZm9yIG5vbmV4aXN0ZW50IGZpbGVzCi0gKiAgLSBpbnRlcm5hbCAidGhlcmUgYXJlIG1vcmUgcGF0aCBjb21wbmVudHMiIGZsYWcKKyAqICAtIGludGVybmFsICJ0aGVyZSBhcmUgbW9yZSBwYXRoIGNvbXBvbmVudHMiIGZsYWcKICAqICAtIGxvY2tlZCB3aGVuIGxvb2t1cCBkb25lIHdpdGggZGNhY2hlX2xvY2sgaGVsZAogICogIC0gZGVudHJ5IGNhY2hlIGlzIHVudHJ1c3RlZDsgZm9yY2UgYSByZWFsIGxvb2t1cAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCmluZGV4IDMzYjI4MzYuLmM0YzA2MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC0yMzQsNyArMjM0LDcgQEAKIE5lZWRzIHRvIGJlIHVwZGF0ZWQgaWYgbW9yZSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGluIGZ1dHVyZS4qLwogCiAjZGVmaW5lIEZJUlNUX05GUzRfT1AJT1BfQUNDRVNTCi0jZGVmaW5lIExBU1RfTkZTNF9PUCAJT1BfUkVMRUFTRV9MT0NLT1dORVIKKyNkZWZpbmUgTEFTVF9ORlM0X09QIAlPUF9SRUNMQUlNX0NPTVBMRVRFCiAKIGVudW0gbmZzc3RhdDQgewogCU5GUzRfT0sgPSAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKaW5kZXggMmI0OWQ2Ny4uNTEwZmZkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCkBAIC01Niw4ICs1NiwxMSBAQAogZXh0ZXJuIHUzMgkJCW5mc2Rfc3VwcG9ydGVkX21pbm9ydmVyc2lvbjsKIGV4dGVybiBzdHJ1Y3QgbXV0ZXgJCW5mc2RfbXV0ZXg7CiBleHRlcm4gc3RydWN0IHN2Y19zZXJ2CQkqbmZzZF9zZXJ2OworZXh0ZXJuIHNwaW5sb2NrX3QJCW5mc2RfZHJjX2xvY2s7CitleHRlcm4gdW5zaWduZWQgaW50CQluZnNkX2RyY19tYXhfbWVtOworZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kcmNfbWVtX3VzZWQ7CiAKLWV4dGVybiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX2V4cG9ydHNfb3A7CitleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mc19leHBvcnRzX29wOwogCiAvKgogICogRnVuY3Rpb24gcHJvdG90eXBlcy4KQEAgLTE2Myw3ICsxNjYsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfZGVsZWdhdGlvbnM7CiBpbnQgbmZzNF9zdGF0ZV9pbml0KHZvaWQpOwogdm9pZCBuZnNkNF9mcmVlX3NsYWJzKHZvaWQpOwotdm9pZCBuZnM0X3N0YXRlX3N0YXJ0KHZvaWQpOworaW50IG5mczRfc3RhdGVfc3RhcnQodm9pZCk7CiB2b2lkIG5mczRfc3RhdGVfc2h1dGRvd24odm9pZCk7CiB0aW1lX3QgbmZzNF9sZWFzZV90aW1lKHZvaWQpOwogdm9pZCBuZnM0X3Jlc2V0X2xlYXNlKHRpbWVfdCBsZWFzZXRpbWUpOwpAQCAtMTcxLDcgKzE3NCw3IEBACiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgbmZzNF9zdGF0ZV9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnNkNF9mcmVlX3NsYWJzKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIG5mczRfc3RhdGVfc3RhcnQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBuZnM0X3N0YXRlX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnM0X3N0YXRlX3NodXRkb3duKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB0aW1lX3QgbmZzNF9sZWFzZV90aW1lKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnM0X3Jlc2V0X2xlYXNlKHRpbWVfdCBsZWFzZXRpbWUpIHsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmggYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaAppbmRleCA1N2FiMmVkLi5iMzhkMTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaApAQCAtNjAsNiArNjAsMTIgQEAKICNkZWZpbmUgc2lfc3RhdGVvd25lcmlkICAgc2lfb3BhcXVlLnNvX3N0YXRlb3duZXJpZAogI2RlZmluZSBzaV9maWxlaWQgICAgICAgICBzaV9vcGFxdWUuc29fZmlsZWlkCiAKK3N0cnVjdCBuZnNkNF9jYl9zZXF1ZW5jZSB7CisJLyogYXJncy9yZXMgKi8KKwl1MzIJCQljYnNfbWlub3J2ZXJzaW9uOworCXN0cnVjdCBuZnM0X2NsaWVudAkqY2JzX2NscDsKK307CisKIHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gewogCXN0cnVjdCBsaXN0X2hlYWQJZGxfcGVyZmlsZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWRsX3BlcmNsbnQ7CkBAIC04MSwzOCArODcsMzUgQEAKIC8qIGNsaWVudCBkZWxlZ2F0aW9uIGNhbGxiYWNrIGluZm8gKi8KIHN0cnVjdCBuZnM0X2NiX2Nvbm4gewogCS8qIFNFVENMSUVOVElEIGluZm8gKi8KLQl1MzIgICAgICAgICAgICAgICAgICAgICBjYl9hZGRyOwotCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGNiX3BvcnQ7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJY2JfYWRkcjsKKwlzaXplX3QJCQljYl9hZGRybGVuOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGNiX3Byb2c7CiAJdTMyCQkJY2JfbWlub3J2ZXJzaW9uOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGNiX2lkZW50OwkvKiBtaW5vcnZlcnNpb24gMCBvbmx5ICovCiAJLyogUlBDIGNsaWVudCBpbmZvICovCiAJYXRvbWljX3QJCWNiX3NldDsgICAgIC8qIHN1Y2Nlc3NmdWwgQ0JfTlVMTCBjYWxsICovCiAJc3RydWN0IHJwY19jbG50ICogICAgICAgY2JfY2xpZW50OwotCXN0cnVjdCBycGNfY3JlZAkqCWNiX2NyZWQ7CiB9OwogCi0vKiBNYXhpbXVtIG51bWJlciBvZiBzbG90cyBwZXIgc2Vzc2lvbi4gMTI4IGlzIHVzZWZ1bCBmb3IgbG9uZyBoYXVsIFRDUCAqLwotI2RlZmluZSBORlNEX01BWF9TTE9UU19QRVJfU0VTU0lPTgkxMjgKLS8qIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHBlciBzbG90IGNhY2hlIGVudHJ5ICovCi0jZGVmaW5lIE5GU0RfUEFHRVNfUEVSX1NMT1QJMQorLyogTWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgcGVyIHNlc3Npb24uIDE2MCBpcyB1c2VmdWwgZm9yIGxvbmcgaGF1bCBUQ1AgKi8KKyNkZWZpbmUgTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04gICAgIDE2MAogLyogTWF4aW11bSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBwZXIgc2Vzc2lvbiBjb21wb3VuZCAqLwogI2RlZmluZSBORlNEX01BWF9PUFNfUEVSX0NPTVBPVU5ECTE2Ci0KLXN0cnVjdCBuZnNkNF9jYWNoZV9lbnRyeSB7Ci0JX19iZTMyCQljZV9zdGF0dXM7Ci0Jc3RydWN0IGt2ZWMJY2VfZGF0YXY7IC8qIGVuY29kZWQgTkZTdjQuMSBkYXRhIGluIHJxX3Jlcy5oZWFkWzBdICovCi0Jc3RydWN0IHBhZ2UJKmNlX3Jlc3BhZ2VzW05GU0RfUEFHRVNfUEVSX1NMT1QgKyAxXTsKLQlpbnQJCWNlX2NhY2hldGhpczsKLQlzaG9ydAkJY2VfcmVzdXNlZDsKLQlpbnQJCWNlX29wY250OwotCWludAkJY2VfcnBjaGRybGVuOwotfTsKKy8qIE1heGltdW0gIHNlc3Npb24gcGVyIHNsb3QgY2FjaGUgc2l6ZSAqLworI2RlZmluZSBORlNEX1NMT1RfQ0FDSEVfU0laRQkJMTAyNAorLyogTWF4aW11bSBudW1iZXIgb2YgTkZTRF9TTE9UX0NBQ0hFX1NJWkUgc2xvdHMgcGVyIHNlc3Npb24gKi8KKyNkZWZpbmUgTkZTRF9DQUNIRV9TSVpFX1NMT1RTX1BFUl9TRVNTSU9OCTMyCisjZGVmaW5lIE5GU0RfTUFYX01FTV9QRVJfU0VTU0lPTiAgXAorCQkoTkZTRF9DQUNIRV9TSVpFX1NMT1RTX1BFUl9TRVNTSU9OICogTkZTRF9TTE9UX0NBQ0hFX1NJWkUpCiAKIHN0cnVjdCBuZnNkNF9zbG90IHsKLQlib29sCQkJCXNsX2ludXNlOwotCXUzMgkJCQlzbF9zZXFpZDsKLQlzdHJ1Y3QgbmZzZDRfY2FjaGVfZW50cnkJc2xfY2FjaGVfZW50cnk7CisJYm9vbAlzbF9pbnVzZTsKKwlib29sCXNsX2NhY2hldGhpczsKKwl1MTYJc2xfb3BjbnQ7CisJdTMyCXNsX3NlcWlkOworCV9fYmUzMglzbF9zdGF0dXM7CisJdTMyCXNsX2RhdGFsZW47CisJY2hhcglzbF9kYXRhW107CiB9OwogCiBzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyB7CkBAIC0xMjYsNiArMTI5LDI1IEBACiAJdTMyCQlyZG1hX2F0dHJzOwogfTsKIAorc3RydWN0IG5mc2Q0X2NyZWF0ZV9zZXNzaW9uIHsKKwljbGllbnRpZF90CQkJY2xpZW50aWQ7CisJc3RydWN0IG5mczRfc2Vzc2lvbmlkCQlzZXNzaW9uaWQ7CisJdTMyCQkJCXNlcWlkOworCXUzMgkJCQlmbGFnczsKKwlzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycwlmb3JlX2NoYW5uZWw7CisJc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMJYmFja19jaGFubmVsOworCXUzMgkJCQljYWxsYmFja19wcm9nOworCXUzMgkJCQl1aWQ7CisJdTMyCQkJCWdpZDsKK307CisKKy8qIFRoZSBzaW5nbGUgc2xvdCBjbGllbnRpZCBjYWNoZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBuZnNkNF9jbGlkX3Nsb3QgeworCXUzMgkJCQlzbF9zZXFpZDsKKwlfX2JlMzIJCQkJc2xfc3RhdHVzOworCXN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbglzbF9jcl9zZXM7Cit9OworCiBzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiB7CiAJc3RydWN0IGtyZWYJCXNlX3JlZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNlX2hhc2g7CS8qIGhhc2ggYnkgc2Vzc2lvbmlkICovCkBAIC0xMzUsNyArMTU3LDcgQEAKIAlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJc2Vfc2Vzc2lvbmlkOwogCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzIHNlX2ZjaGFubmVsOwogCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzIHNlX2JjaGFubmVsOwotCXN0cnVjdCBuZnNkNF9zbG90CXNlX3Nsb3RzW107CS8qIGZvcndhcmQgY2hhbm5lbCBzbG90cyAqLworCXN0cnVjdCBuZnNkNF9zbG90CSpzZV9zbG90c1tdOwkvKiBmb3J3YXJkIGNoYW5uZWwgc2xvdHMgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMTgwLDcgKzIwMiw3IEBACiAJY2hhciAgICAgICAgICAgICAgICAgICAgY2xfcmVjZGlyW0hFWERJUl9MRU5dOyAvKiByZWNvdmVyeSBkaXIgKi8KIAluZnM0X3ZlcmlmaWVyCQljbF92ZXJpZmllcjsgCS8qIGdlbmVyYXRlZCBieSBjbGllbnQgKi8KIAl0aW1lX3QgICAgICAgICAgICAgICAgICBjbF90aW1lOyAgICAgICAgLyogdGltZSBvZiBsYXN0IGxlYXNlIHJlbmV3YWwgKi8KLQlfX2JlMzIJCQljbF9hZGRyOyAJLyogY2xpZW50IGlwYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCWNsX2FkZHI7IAkvKiBjbGllbnQgaXBhZGRyZXNzICovCiAJdTMyCQkJY2xfZmxhdm9yOwkvKiBzZXRjbGllbnRpZCBwc2V1ZG9mbGF2b3IgKi8KIAljaGFyCQkJKmNsX3ByaW5jaXBhbDsJLyogc2V0Y2xpZW50aWQgcHJpbmNpcGFsIG5hbWUgKi8KIAlzdHJ1Y3Qgc3ZjX2NyZWQJCWNsX2NyZWQ7IAkvKiBzZXRjbGllbnRpZCBwcmluY2lwYWwgKi8KQEAgLTE5Miw5ICsyMTQsMTcgQEAKIAogCS8qIGZvciBuZnM0MSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJY2xfc2Vzc2lvbnM7Ci0Jc3RydWN0IG5mc2Q0X3Nsb3QJY2xfc2xvdDsJLyogY3JlYXRlX3Nlc3Npb24gc2xvdCAqLworCXN0cnVjdCBuZnNkNF9jbGlkX3Nsb3QJY2xfY3Nfc2xvdDsJLyogY3JlYXRlX3Nlc3Npb24gc2xvdCAqLwogCXUzMgkJCWNsX2V4Y2hhbmdlX2ZsYWdzOwogCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAljbF9zZXNzaW9uaWQ7CisKKwkvKiBmb3IgbmZzNDEgY2FsbGJhY2tzICovCisJLyogV2UgY3VycmVudGx5IHN1cHBvcnQgYSBzaW5nbGUgYmFjayBjaGFubmVsIHdpdGggYSBzaW5nbGUgc2xvdCAqLworCXVuc2lnbmVkIGxvbmcJCWNsX2NiX3Nsb3RfYnVzeTsKKwl1MzIJCQljbF9jYl9zZXFfbnI7CisJc3RydWN0IHN2Y194cHJ0CQkqY2xfY2JfeHBydDsJLyogNC4xIGNhbGxiYWNrIHRyYW5zcG9ydCAqLworCXN0cnVjdCBycGNfd2FpdF9xdWV1ZQljbF9jYl93YWl0cTsJLyogYmFja2NoYW5uZWwgY2FsbGVycyBtYXkgKi8KKwkJCQkJCS8qIHdhaXQgaGVyZSBmb3Igc2xvdHMgKi8KIH07CiAKIC8qIHN0cnVjdCBuZnM0X2NsaWVudF9yZXNldApAQCAtMzQ1LDYgKzM3NSw3IEBACiBleHRlcm4gX19iZTMyIG5mczRfY2hlY2tfb3Blbl9yZWNsYWltKGNsaWVudGlkX3QgKmNsaWQpOwogZXh0ZXJuIHZvaWQgcHV0X25mczRfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKTsKIGV4dGVybiB2b2lkIG5mczRfZnJlZV9zdGF0ZW93bmVyKHN0cnVjdCBrcmVmICprcmVmKTsKK2V4dGVybiBpbnQgc2V0X2NhbGxiYWNrX2NyZWQodm9pZCk7CiBleHRlcm4gdm9pZCBuZnNkNF9wcm9iZV9jYWxsYmFjayhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCk7CiBleHRlcm4gdm9pZCBuZnNkNF9jYl9yZWNhbGwoc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApOwogZXh0ZXJuIHZvaWQgbmZzNF9wdXRfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QveGRyNC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaAppbmRleCAyYmFjZjc1Li43MzE2NGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2QveGRyNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC94ZHI0LmgKQEAgLTUxLDcgKzUxLDcgQEAKIAkvKiBGb3Igc2Vzc2lvbnMgRFJDICovCiAJc3RydWN0IG5mc2Q0X3Nlc3Npb24JKnNlc3Npb247CiAJc3RydWN0IG5mc2Q0X3Nsb3QJKnNsb3Q7Ci0JX19iZTMyCQkJKnN0YXRwOworCV9fYmUzMgkJCSpkYXRhcDsKIAlzaXplX3QJCQlpb3ZsZW47CiAJdTMyCQkJbWlub3J2ZXJzaW9uOwogCXUzMgkJCXN0YXR1czsKQEAgLTM2NiwxOCArMzY2LDYgQEAKIAlpbnQJCXNwYV9ob3c7CiB9OwogCi1zdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24gewotCWNsaWVudGlkX3QJCWNsaWVudGlkOwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAlzZXNzaW9uaWQ7Ci0JdTMyCQkJc2VxaWQ7Ci0JdTMyCQkJZmxhZ3M7Ci0Jc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMgZm9yZV9jaGFubmVsOwotCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzIGJhY2tfY2hhbm5lbDsKLQl1MzIJCQljYWxsYmFja19wcm9nOwotCXUzMgkJCXVpZDsKLQl1MzIJCQlnaWQ7Ci19OwotCiBzdHJ1Y3QgbmZzZDRfc2VxdWVuY2UgewogCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAlzZXNzaW9uaWQ7CQkvKiByZXF1ZXN0L3Jlc3BvbnNlICovCiAJdTMyCQkJc2VxaWQ7CQkJLyogcmVxdWVzdC9yZXNwb25zZSAqLwpAQCAtNDc5LDEzICs0NjcsMTIgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbCBuZnNkNF9pc19zb2xvX3NlcXVlbmNlKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCkKIHsKIAlzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzICphcmdzID0gcmVzcC0+cnFzdHAtPnJxX2FyZ3A7Ci0JcmV0dXJuIGFyZ3MtPm9wY250ID09IDE7CisJcmV0dXJuIHJlc3AtPm9wY250ID09IDEgJiYgYXJncy0+b3BzWzBdLm9wbnVtID09IE9QX1NFUVVFTkNFOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfbm90X2NhY2hlZChzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3ApCiB7Ci0JcmV0dXJuICFyZXNwLT5jc3RhdGUuc2xvdC0+c2xfY2FjaGVfZW50cnkuY2VfY2FjaGV0aGlzIHx8Ci0JCQluZnNkNF9pc19zb2xvX3NlcXVlbmNlKHJlc3ApOworCXJldHVybiAhcmVzcC0+Y3N0YXRlLnNsb3QtPnNsX2NhY2hldGhpcyB8fCBuZnNkNF9pc19zb2xvX3NlcXVlbmNlKHJlc3ApOwogfQogCiAjZGVmaW5lIE5GUzRfU1ZDX1hEUlNJWkUJCXNpemVvZihzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vb20uaCBiL2luY2x1ZGUvbGludXgvb29tLmgKaW5kZXggYTc5NzliYS4uNmFhYzVmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vb20uaAorKysgYi9pbmNsdWRlL2xpbnV4L29vbS5oCkBAIC0zMCw1ICszMCwxNiBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9vb21fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfb29tX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogCitleHRlcm4gYm9vbCBvb21fa2lsbGVyX2Rpc2FibGVkOworCitzdGF0aWMgaW5saW5lIHZvaWQgb29tX2tpbGxlcl9kaXNhYmxlKHZvaWQpCit7CisJb29tX2tpbGxlcl9kaXNhYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvb21fa2lsbGVyX2VuYWJsZSh2b2lkKQoreworCW9vbV9raWxsZXJfZGlzYWJsZWQgPSBmYWxzZTsKK30KICNlbmRpZiAvKiBfX0tFUk5FTF9fKi8KICNlbmRpZiAvKiBfSU5DTFVERV9MSU5VWF9PT01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCAyYjg3YWNmLi4xM2RlNzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtMTU4LDYgKzE1OCw5IEBACiBzdGF0aWMgaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkJCVwKIAkJeyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbG5hbWUsICZwYWdlLT5mbGFncyk7IH0KIAorI2RlZmluZSBfX1RFU1RDTEVBUkZMQUcodW5hbWUsIGxuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgX19UZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkJCVwKKwkJeyByZXR1cm4gX190ZXN0X2FuZF9jbGVhcl9iaXQoUEdfIyNsbmFtZSwgJnBhZ2UtPmZsYWdzKTsgfQogCiAjZGVmaW5lIFBBR0VGTEFHKHVuYW1lLCBsbmFtZSkgVEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSkJCVwKIAlTRVRQQUdFRkxBRyh1bmFtZSwgbG5hbWUpIENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lKQpAQCAtMTg0LDYgKzE4Nyw5IEBACiAjZGVmaW5lIFRFU1RDTEVBUkZMQUdfRkFMU0UodW5hbWUpCQkJCQlcCiBzdGF0aWMgaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyByZXR1cm4gMDsgfQogCisjZGVmaW5lIF9fVEVTVENMRUFSRkxBR19GQUxTRSh1bmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgaW50IF9fVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIDA7IH0KKwogc3RydWN0IHBhZ2U7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KIAogVEVTVFBBR0VGTEFHKExvY2tlZCwgbG9ja2VkKSBURVNUU0VURkxBRyhMb2NrZWQsIGxvY2tlZCkKQEAgLTI1MCwxMSArMjU2LDExIEBACiAjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAogI2RlZmluZSBNTE9DS19QQUdFUyAxCiBQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKSBfX0NMRUFSUEFHRUZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKLQlURVNUU0NGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCisJVEVTVFNDRkxBRyhNbG9ja2VkLCBtbG9ja2VkKSBfX1RFU1RDTEVBUkZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKICNlbHNlCiAjZGVmaW5lIE1MT0NLX1BBR0VTIDAKLVBBR0VGTEFHX0ZBTFNFKE1sb2NrZWQpCi0JU0VUUEFHRUZMQUdfTk9PUChNbG9ja2VkKSBURVNUQ0xFQVJGTEFHX0ZBTFNFKE1sb2NrZWQpCitQQUdFRkxBR19GQUxTRShNbG9ja2VkKSBTRVRQQUdFRkxBR19OT09QKE1sb2NrZWQpCisJVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKSBfX1RFU1RDTEVBUkZMQUdfRkFMU0UoTWxvY2tlZCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19VTkNBQ0hFRApAQCAtMzk2LDggKzQwMiw4IEBACiAgKi8KICNkZWZpbmUgUEFHRV9GTEFHU19DSEVDS19BVF9QUkVQCSgoMSA8PCBOUl9QQUdFRkxBR1MpIC0gMSkKIAotI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi8KLQorI2RlZmluZSBQQUdFX0ZMQUdTX1BSSVZBVEUJCQkJXAorCSgxIDw8IFBHX3ByaXZhdGUgfCAxIDw8IFBHX3ByaXZhdGVfMikKIC8qKgogICogcGFnZV9oYXNfcHJpdmF0ZSAtIERldGVybWluZSBpZiBwYWdlIGhhcyBwcml2YXRlIHN0dWZmCiAgKiBAcGFnZTogVGhlIHBhZ2UgdG8gYmUgY2hlY2tlZApAQCAtNDA1LDggKzQxMSwxMSBAQAogICogRGV0ZXJtaW5lIGlmIGEgcGFnZSBoYXMgcHJpdmF0ZSBzdHVmZiwgaW5kaWNhdGluZyB0aGF0IHJlbGVhc2Ugcm91dGluZXMKICAqIHNob3VsZCBiZSBpbnZva2VkIHVwb24gaXQuCiAgKi8KLSNkZWZpbmUgcGFnZV9oYXNfcHJpdmF0ZShwYWdlKQkJCVwKLQkoKHBhZ2UpLT5mbGFncyAmICgoMSA8PCBQR19wcml2YXRlKSB8CVwKLQkJCSAgKDEgPDwgUEdfcHJpdmF0ZV8yKSkpCitzdGF0aWMgaW5saW5lIGludCBwYWdlX2hhc19wcml2YXRlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAhIShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfUFJJVkFURSk7Cit9CisKKyNlbmRpZiAvKiAhX19HRU5FUkFUSU5HX0JPVU5EU19IICovCiAKICNlbmRpZgkvKiBQQUdFX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaAppbmRleCAxM2YxMjZjLi5hZGE3NzlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCkBAIC0xMDUsMTQgKzEwNSwxNCBAQAogCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQCiBleHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQpOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cChzd3BfZW50cnlfdCBlbnQpOwogZXh0ZXJuIGludCBzd2FwX2Nncm91cF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzKTsKIGV4dGVybiB2b2lkIHN3YXBfY2dyb3VwX3N3YXBvZmYoaW50IHR5cGUpOwogI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAKIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCAzYjZiNzg4Li43ODAzNTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNTQzLDYgKzU0Myw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFCTB4NzQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMJMHg3NDUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzJfQlJJREdFCTB4NzQ1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TTUJVUwkweDc4MGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM1X0lERSAgICAweDIwOEYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSAgICAweDIwOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0ZMQVNIICAweDIwOTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCmluZGV4IDk3MmY5MGQuLjM2OGJkNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaApAQCAtMSw1ICsxLDkgQEAKIC8qCi0gKiAgUGVyZm9ybWFuY2UgY291bnRlcnM6CisgKiAgTk9URTogdGhpcyBmaWxlIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZSwgaXQgaXMKKyAqICBwcm92aWRlZCBhcyBhIGNvdXJ0ZXN5IGNvcHkgb2YgdXNlci1zcGFjZSBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoZQorICogIG9sZCAocHJlLXJlbmFtZSkgc3ltYm9scyBhbmQgY29uc3RhbnRzLgorICoKKyAqICBQZXJmb3JtYW5jZSBldmVudHM6CiAgKgogICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgogICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCkBAIC0xMzEsMTkgKzEzNSwxOSBAQAogICogYXMgc3BlY2lmaWVkIGJ5IGF0dHIucmVhZF9mb3JtYXQ6CiAgKgogICogc3RydWN0IHJlYWRfZm9ybWF0IHsKLSAqIAl7IHU2NAkJdmFsdWU7Ci0gKiAJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqIAkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfUlVOTklORwotICogCSAgeyB1NjQJCWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAotICogCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCisgKgl7IHU2NAkJdmFsdWU7CisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAorICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAorICoJfSAmJiAhUEVSRl9GT1JNQVRfR1JPVVAKICAqCi0gKiAJeyB1NjQJCW5yOwotICogCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9FTkFCTEVECi0gKiAJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKLSAqIAkgIHsgdTY0CQl2YWx1ZTsKLSAqIAkgICAgeyB1NjQJaWQ7ICAgICAgICAgICB9ICYmIFBFUkZfRk9STUFUX0lECi0gKiAJICB9CQljbnRyW25yXTsKLSAqIAl9ICYmIFBFUkZfRk9STUFUX0dST1VQCisgKgl7IHU2NAkJbnI7CisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAorICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCXZhbHVlOworICoJICAgIHsgdTY0CWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAorICoJICB9CQljbnRyW25yXTsKKyAqCX0gJiYgUEVSRl9GT1JNQVRfR1JPVVAKICAqIH07CiAgKi8KIGVudW0gcGVyZl9jb3VudGVyX3JlYWRfZm9ybWF0IHsKQEAgLTE5OSwxMCArMjAzLDE0IEBACiAJCQkJaW5oZXJpdF9zdGF0ICAgOiAgMSwgLyogcGVyIHRhc2sgY291bnRzICAgICAgICovCiAJCQkJZW5hYmxlX29uX2V4ZWMgOiAgMSwgLyogbmV4dCBleGVjIGVuYWJsZXMgICAgICovCiAJCQkJdGFzayAgICAgICAgICAgOiAgMSwgLyogdHJhY2UgZm9yay9leGl0ICAgICAgICovCisJCQkJd2F0ZXJtYXJrICAgICAgOiAgMSwgLyogd2FrZXVwX3dhdGVybWFyayAgICAgICovCiAKLQkJCQlfX3Jlc2VydmVkXzEgICA6IDUwOworCQkJCV9fcmVzZXJ2ZWRfMSAgIDogNDk7CiAKLQlfX3UzMgkJCXdha2V1cF9ldmVudHM7CS8qIHdha2V1cCBldmVyeSBuIGV2ZW50cyAqLworCXVuaW9uIHsKKwkJX191MzIJCXdha2V1cF9ldmVudHM7CSAgLyogd2FrZXVwIGV2ZXJ5IG4gZXZlbnRzICovCisJCV9fdTMyCQl3YWtldXBfd2F0ZXJtYXJrOyAvKiBieXRlcyBiZWZvcmUgd2FrZXVwICAgKi8KKwl9OwogCV9fdTMyCQkJX19yZXNlcnZlZF8yOwogCiAJX191NjQJCQlfX3Jlc2VydmVkXzM7CkBAIC0zMTAsOSArMzE4LDkgQEAKIAogCS8qCiAJICogc3RydWN0IHsKLQkgKiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKiAJdTY0CQkJCWlkOwotCSAqIAl1NjQJCQkJbG9zdDsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXU2NAkJCQlpZDsKKwkgKgl1NjQJCQkJbG9zdDsKIAkgKiB9OwogCSAqLwogCVBFUkZfRVZFTlRfTE9TVAkJCT0gMiwKQEAgLTMzMiw2ICszNDAsNyBAQAogCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CiAJICoJdTMyCQkJCXBpZCwgcHBpZDsKIAkgKgl1MzIJCQkJdGlkLCBwdGlkOworCSAqCXU2NAkJCQl0aW1lOwogCSAqIH07CiAJICovCiAJUEVSRl9FVkVOVF9FWElUCQkJPSA0LApAQCAtMzUyLDE2ICszNjEsMTcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKKwkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCiAJICogfTsKIAkgKi8KIAlQRVJGX0VWRU5UX0ZPUksJCQk9IDcsCiAKIAkvKgogCSAqIHN0cnVjdCB7Ci0JICogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICogCXUzMgkJCQlwaWQsIHRpZDsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXUzMgkJCQlwaWQsIHRpZDsKIAkgKgotCSAqIAlzdHJ1Y3QgcmVhZF9mb3JtYXQJCXZhbHVlczsKKwkgKglzdHJ1Y3QgcmVhZF9mb3JtYXQJCXZhbHVlczsKIAkgKiB9OwogCSAqLwogCVBFUkZfRVZFTlRfUkVBRAkJCT0gOCwKQEAgLTM3NywyMyArMzg3LDIzIEBACiAJICoJeyB1NjQJCQlpZDsJICB9ICYmIFBFUkZfU0FNUExFX0lECiAJICoJeyB1NjQJCQlzdHJlYW1faWQ7fSAmJiBQRVJGX1NBTVBMRV9TVFJFQU1fSUQKIAkgKgl7IHUzMgkJCWNwdSwgcmVzOyB9ICYmIFBFUkZfU0FNUExFX0NQVQotCSAqIAl7IHU2NAkJCXBlcmlvZDsgICB9ICYmIFBFUkZfU0FNUExFX1BFUklPRAorCSAqCXsgdTY0CQkJcGVyaW9kOyAgIH0gJiYgUEVSRl9TQU1QTEVfUEVSSU9ECiAJICoKIAkgKgl7IHN0cnVjdCByZWFkX2Zvcm1hdAl2YWx1ZXM7CSAgfSAmJiBQRVJGX1NBTVBMRV9SRUFECiAJICoKIAkgKgl7IHU2NAkJCW5yLAogCSAqCSAgdTY0CQkJaXBzW25yXTsgIH0gJiYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOCiAJICoKLQkgKiAJIwotCSAqIAkjIFRoZSBSQVcgcmVjb3JkIGJlbG93IGlzIG9wYXF1ZSBkYXRhIHdydCB0aGUgQUJJCi0JICogCSMKLQkgKiAJIyBUaGF0IGlzLCB0aGUgQUJJIGRvZXNuJ3QgbWFrZSBhbnkgcHJvbWlzZXMgd3J0IHRvCi0JICogCSMgdGhlIHN0YWJpbGl0eSBvZiBpdHMgY29udGVudCwgaXQgbWF5IHZhcnkgZGVwZW5kaW5nCi0JICogCSMgb24gZXZlbnQsIGhhcmR3YXJlLCBrZXJuZWwgdmVyc2lvbiBhbmQgcGhhc2Ugb2YKLQkgKiAJIyB0aGUgbW9vbi4KLQkgKiAJIwotCSAqIAkjIEluIG90aGVyIHdvcmRzLCBQRVJGX1NBTVBMRV9SQVcgY29udGVudHMgYXJlIG5vdCBhbiBBQkkuCi0JICogCSMKKwkgKgkjCisJICoJIyBUaGUgUkFXIHJlY29yZCBiZWxvdyBpcyBvcGFxdWUgZGF0YSB3cnQgdGhlIEFCSQorCSAqCSMKKwkgKgkjIFRoYXQgaXMsIHRoZSBBQkkgZG9lc24ndCBtYWtlIGFueSBwcm9taXNlcyB3cnQgdG8KKwkgKgkjIHRoZSBzdGFiaWxpdHkgb2YgaXRzIGNvbnRlbnQsIGl0IG1heSB2YXJ5IGRlcGVuZGluZworCSAqCSMgb24gZXZlbnQsIGhhcmR3YXJlLCBrZXJuZWwgdmVyc2lvbiBhbmQgcGhhc2Ugb2YKKwkgKgkjIHRoZSBtb29uLgorCSAqCSMKKwkgKgkjIEluIG90aGVyIHdvcmRzLCBQRVJGX1NBTVBMRV9SQVcgY29udGVudHMgYXJlIG5vdCBhbiBBQkkuCisJICoJIwogCSAqCiAJICoJeyB1MzIJCQlzaXplOwogCSAqCSAgY2hhciAgICAgICAgICAgICAgICAgIGRhdGFbc2l6ZV07fSYmIFBFUkZfU0FNUExFX1JBVwpAQCAtNDE2LDM5MiArNDI2LDE2IEBACiAJUEVSRl9DT05URVhUX01BWAkJPSAoX191NjQpLTQwOTUsCiB9OwogCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkoMVUgPDwgMCkKLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkoMVUgPDwgMSkKLQotI2lmZGVmIF9fS0VSTkVMX18KLS8qCi0gKiBLZXJuZWwtaW50ZXJuYWwgZGF0YSB0eXBlcyBhbmQgZGVmaW5pdGlvbnM6Ci0gKi8KLQotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCi0jIGluY2x1ZGUgPGFzbS9wZXJmX2NvdW50ZXIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0jZGVmaW5lIFBFUkZfTUFYX1NUQUNLX0RFUFRICQkyNTUKLQotc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5IHsKLQlfX3U2NAkJCQlucjsKLQlfX3U2NAkJCQlpcFtQRVJGX01BWF9TVEFDS19ERVBUSF07Ci19OwotCi1zdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkIHsKLQl1MzIJCQkJc2l6ZTsKLQl2b2lkCQkJCSpkYXRhOwotfTsKLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi0vKioKLSAqIHN0cnVjdCBod19wZXJmX2NvdW50ZXIgLSBwZXJmb3JtYW5jZSBjb3VudGVyIGhhcmR3YXJlIGRldGFpbHM6Ci0gKi8KLXN0cnVjdCBod19wZXJmX2NvdW50ZXIgewotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCi0JdW5pb24gewotCQlzdHJ1Y3QgeyAvKiBoYXJkd2FyZSAqLwotCQkJdTY0CQljb25maWc7Ci0JCQl1bnNpZ25lZCBsb25nCWNvbmZpZ19iYXNlOwotCQkJdW5zaWduZWQgbG9uZwljb3VudGVyX2Jhc2U7Ci0JCQlpbnQJCWlkeDsKLQkJfTsKLQkJdW5pb24geyAvKiBzb2Z0d2FyZSAqLwotCQkJYXRvbWljNjRfdAljb3VudDsKLQkJCXN0cnVjdCBocnRpbWVyCWhydGltZXI7Ci0JCX07Ci0JfTsKLQlhdG9taWM2NF90CQkJcHJldl9jb3VudDsKLQl1NjQJCQkJc2FtcGxlX3BlcmlvZDsKLQl1NjQJCQkJbGFzdF9wZXJpb2Q7Ci0JYXRvbWljNjRfdAkJCXBlcmlvZF9sZWZ0OwotCXU2NAkJCQlpbnRlcnJ1cHRzOwotCi0JdTY0CQkJCWZyZXFfY291bnQ7Ci0JdTY0CQkJCWZyZXFfaW50ZXJydXB0czsKLQl1NjQJCQkJZnJlcV9zdGFtcDsKLSNlbmRpZgotfTsKLQotc3RydWN0IHBlcmZfY291bnRlcjsKLQotLyoqCi0gKiBzdHJ1Y3QgcG11IC0gZ2VuZXJpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKLSAqLwotc3RydWN0IHBtdSB7Ci0JaW50ICgqZW5hYmxlKQkJCShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKTsKLQl2b2lkICgqZGlzYWJsZSkJCQkoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcik7Ci0Jdm9pZCAoKnJlYWQpCQkJKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpOwotCXZvaWQgKCp1bnRocm90dGxlKQkJKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpOwotfTsKLQotLyoqCi0gKiBlbnVtIHBlcmZfY291bnRlcl9hY3RpdmVfc3RhdGUgLSB0aGUgc3RhdGVzIG9mIGEgY291bnRlcgotICovCi1lbnVtIHBlcmZfY291bnRlcl9hY3RpdmVfc3RhdGUgewotCVBFUkZfQ09VTlRFUl9TVEFURV9FUlJPUgk9IC0yLAotCVBFUkZfQ09VTlRFUl9TVEFURV9PRkYJCT0gLTEsCi0JUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFCT0gIDAsCi0JUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRQk9ICAxLAotfTsKLQotc3RydWN0IGZpbGU7Ci0KLXN0cnVjdCBwZXJmX21tYXBfZGF0YSB7Ci0Jc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7Ci0JaW50CQkJCW5yX3BhZ2VzOwkvKiBuciBvZiBkYXRhIHBhZ2VzICAqLwotCWludAkJCQl3cml0YWJsZTsJLyogYXJlIHdlIHdyaXRhYmxlICAgKi8KLQlpbnQJCQkJbnJfbG9ja2VkOwkvKiBuciBwYWdlcyBtbG9ja2VkICAqLwotCi0JYXRvbWljX3QJCQlwb2xsOwkJLyogUE9MTF8gZm9yIHdha2V1cHMgKi8KLQlhdG9taWNfdAkJCWV2ZW50czsJCS8qIGV2ZW50IGxpbWl0ICAgICAgICovCi0KLQlhdG9taWNfbG9uZ190CQkJaGVhZDsJCS8qIHdyaXRlIHBvc2l0aW9uICAgICovCi0JYXRvbWljX2xvbmdfdAkJCWRvbmVfaGVhZDsJLyogY29tcGxldGVkIGhlYWQgICAgKi8KLQotCWF0b21pY190CQkJbG9jazsJCS8qIGNvbmN1cnJlbnQgd3JpdGVzICovCi0JYXRvbWljX3QJCQl3YWtldXA7CQkvKiBuZWVkcyBhIHdha2V1cCAgICAqLwotCWF0b21pY190CQkJbG9zdDsJCS8qIG5yIHJlY29yZHMgbG9zdCAgICovCi0KLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSAgICp1c2VyX3BhZ2U7Ci0Jdm9pZAkJCQkqZGF0YV9wYWdlc1swXTsKLX07Ci0KLXN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgewotCXN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKm5leHQ7Ci0Jdm9pZCAoKmZ1bmMpKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKik7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBwZXJmX2NvdW50ZXIgLSBwZXJmb3JtYW5jZSBjb3VudGVyIGtlcm5lbCByZXByZXNlbnRhdGlvbjoKLSAqLwotc3RydWN0IHBlcmZfY291bnRlciB7Ci0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0X2VudHJ5OwotCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2VudHJ5OwotCXN0cnVjdCBsaXN0X2hlYWQJCXNpYmxpbmdfbGlzdDsKLQlpbnQJCQkJbnJfc2libGluZ3M7Ci0Jc3RydWN0IHBlcmZfY291bnRlcgkJKmdyb3VwX2xlYWRlcjsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyCQkqb3V0cHV0OwotCWNvbnN0IHN0cnVjdCBwbXUJCSpwbXU7Ci0KLQllbnVtIHBlcmZfY291bnRlcl9hY3RpdmVfc3RhdGUJc3RhdGU7Ci0JYXRvbWljNjRfdAkJCWNvdW50OwotCi0JLyoKLQkgKiBUaGVzZSBhcmUgdGhlIHRvdGFsIHRpbWUgaW4gbmFub3NlY29uZHMgdGhhdCB0aGUgY291bnRlcgotCSAqIGhhcyBiZWVuIGVuYWJsZWQgKGkuZS4gZWxpZ2libGUgdG8gcnVuLCBhbmQgdGhlIHRhc2sgaGFzCi0JICogYmVlbiBzY2hlZHVsZWQgaW4sIGlmIHRoaXMgaXMgYSBwZXItdGFzayBjb3VudGVyKQotCSAqIGFuZCBydW5uaW5nIChzY2hlZHVsZWQgb250byB0aGUgQ1BVKSwgcmVzcGVjdGl2ZWx5LgotCSAqCi0JICogVGhleSBhcmUgY29tcHV0ZWQgZnJvbSB0c3RhbXBfZW5hYmxlZCwgdHN0YW1wX3J1bm5pbmcgYW5kCi0JICogdHN0YW1wX3N0b3BwZWQgd2hlbiB0aGUgY291bnRlciBpcyBpbiBJTkFDVElWRSBvciBBQ1RJVkUgc3RhdGUuCi0JICovCi0JdTY0CQkJCXRvdGFsX3RpbWVfZW5hYmxlZDsKLQl1NjQJCQkJdG90YWxfdGltZV9ydW5uaW5nOwotCi0JLyoKLQkgKiBUaGVzZSBhcmUgdGltZXN0YW1wcyB1c2VkIGZvciBjb21wdXRpbmcgdG90YWxfdGltZV9lbmFibGVkCi0JICogYW5kIHRvdGFsX3RpbWVfcnVubmluZyB3aGVuIHRoZSBjb3VudGVyIGlzIGluIElOQUNUSVZFIG9yCi0JICogQUNUSVZFIHN0YXRlLCBtZWFzdXJlZCBpbiBuYW5vc2Vjb25kcyBmcm9tIGFuIGFyYml0cmFyeSBwb2ludAotCSAqIGluIHRpbWUuCi0JICogdHN0YW1wX2VuYWJsZWQ6IHRoZSBub3Rpb25hbCB0aW1lIHdoZW4gdGhlIGNvdW50ZXIgd2FzIGVuYWJsZWQKLQkgKiB0c3RhbXBfcnVubmluZzogdGhlIG5vdGlvbmFsIHRpbWUgd2hlbiB0aGUgY291bnRlciB3YXMgc2NoZWR1bGVkIG9uCi0JICogdHN0YW1wX3N0b3BwZWQ6IGluIElOQUNUSVZFIHN0YXRlLCB0aGUgbm90aW9uYWwgdGltZSB3aGVuIHRoZQotCSAqCWNvdW50ZXIgd2FzIHNjaGVkdWxlZCBvZmYuCi0JICovCi0JdTY0CQkJCXRzdGFtcF9lbmFibGVkOwotCXU2NAkJCQl0c3RhbXBfcnVubmluZzsKLQl1NjQJCQkJdHN0YW1wX3N0b3BwZWQ7Ci0KLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIJYXR0cjsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyCQlodzsKLQotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dAkqY3R4OwotCXN0cnVjdCBmaWxlCQkJKmZpbHA7Ci0KLQkvKgotCSAqIFRoZXNlIGFjY3VtdWxhdGUgdG90YWwgdGltZSAoaW4gbmFub3NlY29uZHMpIHRoYXQgY2hpbGRyZW4KLQkgKiBjb3VudGVycyBoYXZlIGJlZW4gZW5hYmxlZCBhbmQgcnVubmluZywgcmVzcGVjdGl2ZWx5LgotCSAqLwotCWF0b21pYzY0X3QJCQljaGlsZF90b3RhbF90aW1lX2VuYWJsZWQ7Ci0JYXRvbWljNjRfdAkJCWNoaWxkX3RvdGFsX3RpbWVfcnVubmluZzsKLQotCS8qCi0JICogUHJvdGVjdCBhdHRhY2gvZGV0YWNoIGFuZCBjaGlsZF9saXN0OgotCSAqLwotCXN0cnVjdCBtdXRleAkJCWNoaWxkX211dGV4OwotCXN0cnVjdCBsaXN0X2hlYWQJCWNoaWxkX2xpc3Q7Ci0Jc3RydWN0IHBlcmZfY291bnRlcgkJKnBhcmVudDsKLQotCWludAkJCQlvbmNwdTsKLQlpbnQJCQkJY3B1OwotCi0Jc3RydWN0IGxpc3RfaGVhZAkJb3duZXJfZW50cnk7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CQkqb3duZXI7Ci0KLQkvKiBtbWFwIGJpdHMgKi8KLQlzdHJ1Y3QgbXV0ZXgJCQltbWFwX211dGV4OwotCWF0b21pY190CQkJbW1hcF9jb3VudDsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEJCSpkYXRhOwotCi0JLyogcG9sbCByZWxhdGVkICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJCXdhaXRxOwotCXN0cnVjdCBmYXN5bmNfc3RydWN0CQkqZmFzeW5jOwotCi0JLyogZGVsYXllZCB3b3JrIGZvciBOTUlzIGFuZCBzdWNoICovCi0JaW50CQkJCXBlbmRpbmdfd2FrZXVwOwotCWludAkJCQlwZW5kaW5nX2tpbGw7Ci0JaW50CQkJCXBlbmRpbmdfZGlzYWJsZTsKLQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5CXBlbmRpbmc7Ci0KLQlhdG9taWNfdAkJCWV2ZW50X2xpbWl0OwotCi0Jdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBwZXJmX2NvdW50ZXIgKik7Ci0Jc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7Ci0KLQlzdHJ1Y3QgcGlkX25hbWVzcGFjZQkJKm5zOwotCXU2NAkJCQlpZDsKLSNlbmRpZgotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgLSBjb3VudGVyIGNvbnRleHQgc3RydWN0dXJlCi0gKgotICogVXNlZCBhcyBhIGNvbnRhaW5lciBmb3IgdGFzayBjb3VudGVycyBhbmQgQ1BVIGNvdW50ZXJzIGFzIHdlbGw6Ci0gKi8KLXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCB7Ci0JLyoKLQkgKiBQcm90ZWN0IHRoZSBzdGF0ZXMgb2YgdGhlIGNvdW50ZXJzIGluIHRoZSBsaXN0LAotCSAqIG5yX2FjdGl2ZSwgYW5kIHRoZSBsaXN0OgotCSAqLwotCXNwaW5sb2NrX3QJCQlsb2NrOwotCS8qCi0JICogUHJvdGVjdCB0aGUgbGlzdCBvZiBjb3VudGVycy4gIExvY2tpbmcgZWl0aGVyIG11dGV4IG9yIGxvY2sKLQkgKiBpcyBzdWZmaWNpZW50IHRvIGVuc3VyZSB0aGUgbGlzdCBkb2Vzbid0IGNoYW5nZTsgdG8gY2hhbmdlCi0JICogdGhlIGxpc3QgeW91IG5lZWQgdG8gbG9jayBib3RoIHRoZSBtdXRleCBhbmQgdGhlIHNwaW5sb2NrLgotCSAqLwotCXN0cnVjdCBtdXRleAkJCW11dGV4OwotCi0Jc3RydWN0IGxpc3RfaGVhZAkJY291bnRlcl9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2xpc3Q7Ci0JaW50CQkJCW5yX2NvdW50ZXJzOwotCWludAkJCQlucl9hY3RpdmU7Ci0JaW50CQkJCWlzX2FjdGl2ZTsKLQlpbnQJCQkJbnJfc3RhdDsKLQlhdG9taWNfdAkJCXJlZmNvdW50OwotCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRhc2s7Ci0KLQkvKgotCSAqIENvbnRleHQgY2xvY2ssIHJ1bnMgd2hlbiBjb250ZXh0IGVuYWJsZWQuCi0JICovCi0JdTY0CQkJCXRpbWU7Ci0JdTY0CQkJCXRpbWVzdGFtcDsKLQotCS8qCi0JICogVGhlc2UgZmllbGRzIGxldCB1cyBkZXRlY3Qgd2hlbiB0d28gY29udGV4dHMgaGF2ZSBib3RoCi0JICogYmVlbiBjbG9uZWQgKGluaGVyaXRlZCkgZnJvbSBhIGNvbW1vbiBhbmNlc3Rvci4KLQkgKi8KLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQJKnBhcmVudF9jdHg7Ci0JdTY0CQkJCXBhcmVudF9nZW47Ci0JdTY0CQkJCWdlbmVyYXRpb247Ci0JaW50CQkJCXBpbl9jb3VudDsKLQlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKLX07Ci0KLS8qKgotICogc3RydWN0IHBlcmZfY291bnRlcl9jcHVfY29udGV4dCAtIHBlciBjcHUgY291bnRlciBjb250ZXh0IHN0cnVjdHVyZQotICovCi1zdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0CWN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQJKnRhc2tfY3R4OwotCWludAkJCQlhY3RpdmVfb25jcHU7Ci0JaW50CQkJCW1heF9wZXJ0YXNrOwotCWludAkJCQlleGNsdXNpdmU7Ci0KLQkvKgotCSAqIFJlY3Vyc2lvbiBhdm9pZGFuY2U6Ci0JICoKLQkgKiB0YXNrLCBzb2Z0aXJxLCBpcnEsIG5taSBjb250ZXh0Ci0JICovCi0JaW50CQkJCXJlY3Vyc2lvbls0XTsKLX07Ci0KLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUworI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAJCSgxVSA8PCAwKQorI2RlZmluZSBQRVJGX0ZMQUdfRkRfT1VUUFVUCQkoMVUgPDwgMSkKIAogLyoKLSAqIFNldCBieSBhcmNoaXRlY3R1cmUgY29kZToKKyAqIEluIGNhc2Ugc29tZSBhcHAgc3RpbGwgcmVmZXJlbmNlcyB0aGUgb2xkIHN5bWJvbHM6CiAgKi8KLWV4dGVybiBpbnQgcGVyZl9tYXhfY291bnRlcnM7CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKTsKKyNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkJX19OUl9wZXJmX2V2ZW50X29wZW4KIAotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSk7Ci1leHRlcm4gaW50IHBlcmZfY291bnRlcl9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7Ci1leHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotZXh0ZXJuIHZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX2RvX3BlbmRpbmcodm9pZCk7Ci1leHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJfcHJpbnRfZGVidWcodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3BlcmZfZGlzYWJsZSh2b2lkKTsKLWV4dGVybiBib29sIF9fcGVyZl9lbmFibGUodm9pZCk7Ci1leHRlcm4gdm9pZCBwZXJmX2Rpc2FibGUodm9pZCk7Ci1leHRlcm4gdm9pZCBwZXJmX2VuYWJsZSh2b2lkKTsKLWV4dGVybiBpbnQgcGVyZl9jb3VudGVyX3Rhc2tfZGlzYWJsZSh2b2lkKTsKLWV4dGVybiBpbnQgcGVyZl9jb3VudGVyX3Rhc2tfZW5hYmxlKHZvaWQpOwotZXh0ZXJuIGludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwX2xlYWRlciwKLQkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsIGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKTsKKyNkZWZpbmUgUFJfVEFTS19QRVJGX0NPVU5URVJTX0RJU0FCTEUJUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCisjZGVmaW5lIFBSX1RBU0tfUEVSRl9DT1VOVEVSU19FTkFCTEUJUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUKIAotc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgewotCXN0cnVjdCBwdF9yZWdzCQkJKnJlZ3M7Ci0JdTY0CQkJCWFkZHI7Ci0JdTY0CQkJCXBlcmlvZDsKLQlzdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkCQkqcmF3OwotfTsKLQotZXh0ZXJuIGludCBwZXJmX2NvdW50ZXJfb3ZlcmZsb3coc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IG5taSwKLQkJCQkgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpOwotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX291dHB1dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBpbnQgbm1pLAotCQkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKTsKLQotLyoKLSAqIFJldHVybiAxIGZvciBhIHNvZnR3YXJlIGNvdW50ZXIsIDAgZm9yIGEgaGFyZHdhcmUgY291bnRlcgotICovCi1zdGF0aWMgaW5saW5lIGludCBpc19zb2Z0d2FyZV9jb3VudGVyKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JcmV0dXJuIChjb3VudGVyLT5hdHRyLnR5cGUgIT0gUEVSRl9UWVBFX1JBVykgJiYKLQkJKGNvdW50ZXItPmF0dHIudHlwZSAhPSBQRVJGX1RZUEVfSEFSRFdBUkUpICYmCi0JCShjb3VudGVyLT5hdHRyLnR5cGUgIT0gUEVSRl9UWVBFX0hXX0NBQ0hFKTsKLX0KLQotZXh0ZXJuIGF0b21pY190IHBlcmZfc3djb3VudGVyX2VuYWJsZWRbUEVSRl9DT1VOVF9TV19NQVhdOwotCi1leHRlcm4gdm9pZCBfX3BlcmZfc3djb3VudGVyX2V2ZW50KHUzMiwgdTY0LCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHU2NCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9zd2NvdW50ZXJfZXZlbnQodTMyIGV2ZW50LCB1NjQgbnIsIGludCBubWksIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikKLXsKLQlpZiAoYXRvbWljX3JlYWQoJnBlcmZfc3djb3VudGVyX2VuYWJsZWRbZXZlbnRdKSkKLQkJX19wZXJmX3N3Y291bnRlcl9ldmVudChldmVudCwgbnIsIG5taSwgcmVncywgYWRkcik7Ci19Ci0KLWV4dGVybiB2b2lkIF9fcGVyZl9jb3VudGVyX21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQotCQlfX3BlcmZfY291bnRlcl9tbWFwKHZtYSk7Ci19Ci0KLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl9jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLQotZXh0ZXJuIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqcGVyZl9jYWxsY2hhaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi1leHRlcm4gaW50IHN5c2N0bF9wZXJmX2NvdW50ZXJfcGFyYW5vaWQ7Ci1leHRlcm4gaW50IHN5c2N0bF9wZXJmX2NvdW50ZXJfbWxvY2s7Ci1leHRlcm4gaW50IHN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGU7Ci0KLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgcGVyZl90cGNvdW50ZXJfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LAotCQkJCSB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKLQotI2lmbmRlZiBwZXJmX21pc2NfZmxhZ3MKLSNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCSh1c2VyX21vZGUocmVncykgPyBQRVJGX0VWRU5UX01JU0NfVVNFUiA6IFwKLQkJCQkgUEVSRl9FVkVOVF9NSVNDX0tFUk5FTCkKLSNkZWZpbmUgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCWluc3RydWN0aW9uX3BvaW50ZXIocmVncykKLSNlbmRpZgotCi0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2NvdW50ZXJfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCBjcHUpCQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9jb3VudGVyX3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQl7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHBlcmZfY291bnRlcl9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkJeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCXsgfQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9kb19wZW5kaW5nKHZvaWQpCQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX3ByaW50X2RlYnVnKHZvaWQpCQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9kaXNhYmxlKHZvaWQpCQkJCQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2VuYWJsZSh2b2lkKQkJCQkJeyB9Ci1zdGF0aWMgaW5saW5lIGludCBwZXJmX2NvdW50ZXJfdGFza19kaXNhYmxlKHZvaWQpCXsgcmV0dXJuIC1FSU5WQUw7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHBlcmZfY291bnRlcl90YXNrX2VuYWJsZSh2b2lkKQl7IHJldHVybiAtRUlOVkFMOyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9zd2NvdW50ZXJfZXZlbnQodTMyIGV2ZW50LCB1NjQgbnIsIGludCBubWksCi0JCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQkJCXsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCXsgfQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NvdW50ZXJfaW5pdCh2b2lkKQkJCQl7IH0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9QRVJGX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VmYWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTAsMCArMSw4NTggQEAKKy8qCisgKiBQZXJmb3JtYW5jZSBldmVudHM6CisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKKyAqCisgKiBEYXRhIHR5cGUgZGVmaW5pdGlvbnMsIGRlY2xhcmF0aW9ucywgcHJvdG90eXBlcy4KKyAqCisgKiAgICBTdGFydGVkIGJ5OiBUaG9tYXMgR2xlaXhuZXIgYW5kIEluZ28gTW9sbmFyCisgKgorICogRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCisgKi8KKyNpZm5kZWYgX0xJTlVYX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfTElOVVhfUEVSRl9FVkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICogVXNlci1zcGFjZSBBQkkgYml0czoKKyAqLworCisvKgorICogYXR0ci50eXBlCisgKi8KK2VudW0gcGVyZl90eXBlX2lkIHsKKwlQRVJGX1RZUEVfSEFSRFdBUkUJCQk9IDAsCisJUEVSRl9UWVBFX1NPRlRXQVJFCQkJPSAxLAorCVBFUkZfVFlQRV9UUkFDRVBPSU5UCQkJPSAyLAorCVBFUkZfVFlQRV9IV19DQUNIRQkJCT0gMywKKwlQRVJGX1RZUEVfUkFXCQkJCT0gNCwKKworCVBFUkZfVFlQRV9NQVgsCQkJCS8qIG5vbi1BQkkgKi8KK307CisKKy8qCisgKiBHZW5lcmFsaXplZCBwZXJmb3JtYW5jZSBldmVudCBldmVudF9pZCB0eXBlcywgdXNlZCBieSB0aGUKKyAqIGF0dHIuZXZlbnRfaWQgcGFyYW1ldGVyIG9mIHRoZSBzeXNfcGVyZl9ldmVudF9vcGVuKCkKKyAqIHN5c2NhbGw6CisgKi8KK2VudW0gcGVyZl9od19pZCB7CisJLyoKKwkgKiBDb21tb24gaGFyZHdhcmUgZXZlbnRzLCBnZW5lcmFsaXplZCBieSB0aGUga2VybmVsOgorCSAqLworCVBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJPSAwLAorCVBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCQk9IDEsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTCQk9IDIsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCT0gMywKKwlQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJPSA0LAorCVBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwkJPSA1LAorCVBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUwkJPSA2LAorCisJUEVSRl9DT1VOVF9IV19NQVgsCQkJLyogbm9uLUFCSSAqLworfTsKKworLyoKKyAqIEdlbmVyYWxpemVkIGhhcmR3YXJlIGNhY2hlIGV2ZW50czoKKyAqCisgKiAgICAgICB7IEwxLUQsIEwxLUksIExMQywgSVRMQiwgRFRMQiwgQlBVIH0geAorICogICAgICAgeyByZWFkLCB3cml0ZSwgcHJlZmV0Y2ggfSB4CisgKiAgICAgICB7IGFjY2Vzc2VzLCBtaXNzZXMgfQorICovCitlbnVtIHBlcmZfaHdfY2FjaGVfaWQgeworCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFECQkJPSAwLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJCQkJPSAxLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTEwJCQk9IDIsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCCQk9IDMsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9JVExCCQk9IDQsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9CUFUJCQk9IDUsCisKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCwJCS8qIG5vbi1BQkkgKi8KK307CisKK2VudW0gcGVyZl9od19jYWNoZV9vcF9pZCB7CisJUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFECQk9IDAsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9XUklURQkJPSAxLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUFJFRkVUQ0gJCT0gMiwKKworCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYLAkJLyogbm9uLUFCSSAqLworfTsKKworZW51bSBwZXJmX2h3X2NhY2hlX29wX3Jlc3VsdF9pZCB7CisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCT0gMCwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTCQk9IDEsCisKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgsCQkvKiBub24tQUJJICovCit9OworCisvKgorICogU3BlY2lhbCAic29mdHdhcmUiIGV2ZW50cyBwcm92aWRlZCBieSB0aGUga2VybmVsLCBldmVuIGlmIHRoZSBoYXJkd2FyZQorICogZG9lcyBub3Qgc3VwcG9ydCBwZXJmb3JtYW5jZSBldmVudHMuIFRoZXNlIGV2ZW50cyBtZWFzdXJlIHZhcmlvdXMKKyAqIHBoeXNpY2FsIGFuZCBzdyBldmVudHMgb2YgdGhlIGtlcm5lbCAoYW5kIGFsbG93IHRoZSBwcm9maWxpbmcgb2YgdGhlbSBhcworICogd2VsbCk6CisgKi8KK2VudW0gcGVyZl9zd19pZHMgeworCVBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLCQkJPSAwLAorCVBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwkJPSAxLAorCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMJCT0gMiwKKwlQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMJCT0gMywKKwlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCQk9IDQsCisJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4JCT0gNSwKKwlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSgkJPSA2LAorCisJUEVSRl9DT1VOVF9TV19NQVgsCQkJLyogbm9uLUFCSSAqLworfTsKKworLyoKKyAqIEJpdHMgdGhhdCBjYW4gYmUgc2V0IGluIGF0dHIuc2FtcGxlX3R5cGUgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbgorICogaW4gdGhlIG92ZXJmbG93IHBhY2tldHMuCisgKi8KK2VudW0gcGVyZl9ldmVudF9zYW1wbGVfZm9ybWF0IHsKKwlQRVJGX1NBTVBMRV9JUAkJCQk9IDFVIDw8IDAsCisJUEVSRl9TQU1QTEVfVElECQkJCT0gMVUgPDwgMSwKKwlQRVJGX1NBTVBMRV9USU1FCQkJPSAxVSA8PCAyLAorCVBFUkZfU0FNUExFX0FERFIJCQk9IDFVIDw8IDMsCisJUEVSRl9TQU1QTEVfUkVBRAkJCT0gMVUgPDwgNCwKKwlQRVJGX1NBTVBMRV9DQUxMQ0hBSU4JCQk9IDFVIDw8IDUsCisJUEVSRl9TQU1QTEVfSUQJCQkJPSAxVSA8PCA2LAorCVBFUkZfU0FNUExFX0NQVQkJCQk9IDFVIDw8IDcsCisJUEVSRl9TQU1QTEVfUEVSSU9ECQkJPSAxVSA8PCA4LAorCVBFUkZfU0FNUExFX1NUUkVBTV9JRAkJCT0gMVUgPDwgOSwKKwlQRVJGX1NBTVBMRV9SQVcJCQkJPSAxVSA8PCAxMCwKKworCVBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDExLAkJLyogbm9uLUFCSSAqLworfTsKKworLyoKKyAqIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgcmV0dXJuZWQgYnkgcmVhZCgpIG9uIGEgcGVyZiBldmVudCBmZCwKKyAqIGFzIHNwZWNpZmllZCBieSBhdHRyLnJlYWRfZm9ybWF0OgorICoKKyAqIHN0cnVjdCByZWFkX2Zvcm1hdCB7CisgKgl7IHU2NAkJdmFsdWU7CisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAorICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAorICoJfSAmJiAhUEVSRl9GT1JNQVRfR1JPVVAKKyAqCisgKgl7IHU2NAkJbnI7CisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAorICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCXZhbHVlOworICoJICAgIHsgdTY0CWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAorICoJICB9CQljbnRyW25yXTsKKyAqCX0gJiYgUEVSRl9GT1JNQVRfR1JPVVAKKyAqIH07CisgKi8KK2VudW0gcGVyZl9ldmVudF9yZWFkX2Zvcm1hdCB7CisJUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECQk9IDFVIDw8IDAsCisJUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCQk9IDFVIDw8IDEsCisJUEVSRl9GT1JNQVRfSUQJCQkJPSAxVSA8PCAyLAorCVBFUkZfRk9STUFUX0dST1VQCQkJPSAxVSA8PCAzLAorCisJUEVSRl9GT1JNQVRfTUFYID0gMVUgPDwgNCwJCS8qIG5vbi1BQkkgKi8KK307CisKKyNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMAk2NAkvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqLworCisvKgorICogSGFyZHdhcmUgZXZlbnRfaWQgdG8gbW9uaXRvciB2aWEgYSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50OgorICovCitzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHsKKworCS8qCisJICogTWFqb3IgdHlwZTogaGFyZHdhcmUvc29mdHdhcmUvdHJhY2Vwb2ludC9ldGMuCisJICovCisJX191MzIJCQl0eXBlOworCisJLyoKKwkgKiBTaXplIG9mIHRoZSBhdHRyIHN0cnVjdHVyZSwgZm9yIGZ3ZC9id2QgY29tcGF0LgorCSAqLworCV9fdTMyCQkJc2l6ZTsKKworCS8qCisJICogVHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorCSAqLworCV9fdTY0CQkJY29uZmlnOworCisJdW5pb24geworCQlfX3U2NAkJc2FtcGxlX3BlcmlvZDsKKwkJX191NjQJCXNhbXBsZV9mcmVxOworCX07CisKKwlfX3U2NAkJCXNhbXBsZV90eXBlOworCV9fdTY0CQkJcmVhZF9mb3JtYXQ7CisKKwlfX3U2NAkJCWRpc2FibGVkICAgICAgIDogIDEsIC8qIG9mZiBieSBkZWZhdWx0ICAgICAgICAqLworCQkJCWluaGVyaXQJICAgICAgIDogIDEsIC8qIGNoaWxkcmVuIGluaGVyaXQgaXQgICAqLworCQkJCXBpbm5lZAkgICAgICAgOiAgMSwgLyogbXVzdCBhbHdheXMgYmUgb24gUE1VICovCisJCQkJZXhjbHVzaXZlICAgICAgOiAgMSwgLyogb25seSBncm91cCBvbiBQTVUgICAgICovCisJCQkJZXhjbHVkZV91c2VyICAgOiAgMSwgLyogZG9uJ3QgY291bnQgdXNlciAgICAgICovCisJCQkJZXhjbHVkZV9rZXJuZWwgOiAgMSwgLyogZGl0dG8ga2VybmVsICAgICAgICAgICovCisJCQkJZXhjbHVkZV9odiAgICAgOiAgMSwgLyogZGl0dG8gaHlwZXJ2aXNvciAgICAgICovCisJCQkJZXhjbHVkZV9pZGxlICAgOiAgMSwgLyogZG9uJ3QgY291bnQgd2hlbiBpZGxlICovCisJCQkJbW1hcCAgICAgICAgICAgOiAgMSwgLyogaW5jbHVkZSBtbWFwIGRhdGEgICAgICovCisJCQkJY29tbQkgICAgICAgOiAgMSwgLyogaW5jbHVkZSBjb21tIGRhdGEgICAgICovCisJCQkJZnJlcSAgICAgICAgICAgOiAgMSwgLyogdXNlIGZyZXEsIG5vdCBwZXJpb2QgICovCisJCQkJaW5oZXJpdF9zdGF0ICAgOiAgMSwgLyogcGVyIHRhc2sgY291bnRzICAgICAgICovCisJCQkJZW5hYmxlX29uX2V4ZWMgOiAgMSwgLyogbmV4dCBleGVjIGVuYWJsZXMgICAgICovCisJCQkJdGFzayAgICAgICAgICAgOiAgMSwgLyogdHJhY2UgZm9yay9leGl0ICAgICAgICovCisJCQkJd2F0ZXJtYXJrICAgICAgOiAgMSwgLyogd2FrZXVwX3dhdGVybWFyayAgICAgICovCisKKwkJCQlfX3Jlc2VydmVkXzEgICA6IDQ5OworCisJdW5pb24geworCQlfX3UzMgkJd2FrZXVwX2V2ZW50czsJICAvKiB3YWtldXAgZXZlcnkgbiBldmVudHMgKi8KKwkJX191MzIJCXdha2V1cF93YXRlcm1hcms7IC8qIGJ5dGVzIGJlZm9yZSB3YWtldXAgICAqLworCX07CisJX191MzIJCQlfX3Jlc2VydmVkXzI7CisKKwlfX3U2NAkJCV9fcmVzZXJ2ZWRfMzsKK307CisKKy8qCisgKiBJb2N0bHMgdGhhdCBjYW4gYmUgZG9uZSBvbiBhIHBlcmYgZXZlbnQgZmQ6CisgKi8KKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfRU5BQkxFCQlfSU8gKCckJywgMCkKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfRElTQUJMRQkJX0lPICgnJCcsIDEpCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1JFRlJFU0gJCV9JTyAoJyQnLCAyKQorI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19SRVNFVAkJX0lPICgnJCcsIDMpCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1BFUklPRAkJX0lPVygnJCcsIDQsIHU2NCkKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVAlfSU8gKCckJywgNSkKKworZW51bSBwZXJmX2V2ZW50X2lvY19mbGFncyB7CisJUEVSRl9JT0NfRkxBR19HUk9VUAkJPSAxVSA8PCAwLAorfTsKKworLyoKKyAqIFN0cnVjdHVyZSBvZiB0aGUgcGFnZSB0aGF0IGNhbiBiZSBtYXBwZWQgdmlhIG1tYXAKKyAqLworc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlIHsKKwlfX3UzMgl2ZXJzaW9uOwkJLyogdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlfX3UzMgljb21wYXRfdmVyc2lvbjsJCS8qIGxvd2VzdCB2ZXJzaW9uIHRoaXMgaXMgY29tcGF0IHdpdGggKi8KKworCS8qCisJICogQml0cyBuZWVkZWQgdG8gcmVhZCB0aGUgaHcgZXZlbnRzIGluIHVzZXItc3BhY2UuCisJICoKKwkgKiAgIHUzMiBzZXE7CisJICogICBzNjQgY291bnQ7CisJICoKKwkgKiAgIGRvIHsKKwkgKiAgICAgc2VxID0gcGMtPmxvY2s7CisJICoKKwkgKiAgICAgYmFycmllcigpCisJICogICAgIGlmIChwYy0+aW5kZXgpIHsKKwkgKiAgICAgICBjb3VudCA9IHBtY19yZWFkKHBjLT5pbmRleCAtIDEpOworCSAqICAgICAgIGNvdW50ICs9IHBjLT5vZmZzZXQ7CisJICogICAgIH0gZWxzZQorCSAqICAgICAgIGdvdG8gcmVndWxhcl9yZWFkOworCSAqCisJICogICAgIGJhcnJpZXIoKTsKKwkgKiAgIH0gd2hpbGUgKHBjLT5sb2NrICE9IHNlcSk7CisJICoKKwkgKiBOT1RFOiBmb3Igb2J2aW91cyByZWFzb24gdGhpcyBvbmx5IHdvcmtzIG9uIHNlbGYtbW9uaXRvcmluZworCSAqICAgICAgIHByb2Nlc3Nlcy4KKwkgKi8KKwlfX3UzMglsb2NrOwkJCS8qIHNlcWxvY2sgZm9yIHN5bmNocm9uaXphdGlvbiAqLworCV9fdTMyCWluZGV4OwkJCS8qIGhhcmR3YXJlIGV2ZW50IGlkZW50aWZpZXIgKi8KKwlfX3M2NAlvZmZzZXQ7CQkJLyogYWRkIHRvIGhhcmR3YXJlIGV2ZW50IHZhbHVlICovCisJX191NjQJdGltZV9lbmFibGVkOwkJLyogdGltZSBldmVudCBhY3RpdmUgKi8KKwlfX3U2NAl0aW1lX3J1bm5pbmc7CQkvKiB0aW1lIGV2ZW50IG9uIGNwdSAqLworCisJCS8qCisJCSAqIEhvbGUgZm9yIGV4dGVuc2lvbiBvZiB0aGUgc2VsZiBtb25pdG9yIGNhcGFiaWxpdGllcworCQkgKi8KKworCV9fdTY0CV9fcmVzZXJ2ZWRbMTIzXTsJLyogYWxpZ24gdG8gMWsgKi8KKworCS8qCisJICogQ29udHJvbCBkYXRhIGZvciB0aGUgbW1hcCgpIGRhdGEgYnVmZmVyLgorCSAqCisJICogVXNlci1zcGFjZSByZWFkaW5nIHRoZSBAZGF0YV9oZWFkIHZhbHVlIHNob3VsZCBpc3N1ZSBhbiBybWIoKSwgb24KKwkgKiBTTVAgY2FwYWJsZSBwbGF0Zm9ybXMsIGFmdGVyIHJlYWRpbmcgdGhpcyB2YWx1ZSAtLSBzZWUKKwkgKiBwZXJmX2V2ZW50X3dha2V1cCgpLgorCSAqCisJICogV2hlbiB0aGUgbWFwcGluZyBpcyBQUk9UX1dSSVRFIHRoZSBAZGF0YV90YWlsIHZhbHVlIHNob3VsZCBiZQorCSAqIHdyaXR0ZW4gYnkgdXNlcnNwYWNlIHRvIHJlZmxlY3QgdGhlIGxhc3QgcmVhZCBkYXRhLiBJbiB0aGlzIGNhc2UKKwkgKiB0aGUga2VybmVsIHdpbGwgbm90IG92ZXItd3JpdGUgdW5yZWFkIGRhdGEuCisJICovCisJX191NjQgICBkYXRhX2hlYWQ7CQkvKiBoZWFkIGluIHRoZSBkYXRhIHNlY3Rpb24gKi8KKwlfX3U2NAlkYXRhX3RhaWw7CQkvKiB1c2VyLXNwYWNlIHdyaXR0ZW4gdGFpbCAqLworfTsKKworI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSwkJKDMgPDwgMCkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX1VOS05PV04JCSgwIDw8IDApCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMCQkJKDEgPDwgMCkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19VU0VSCQkJKDIgPDwgMCkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SCQkoMyA8PCAwKQorCitzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgeworCV9fdTMyCXR5cGU7CisJX191MTYJbWlzYzsKKwlfX3UxNglzaXplOworfTsKKworZW51bSBwZXJmX2V2ZW50X3R5cGUgeworCisJLyoKKwkgKiBUaGUgTU1BUCBldmVudHMgcmVjb3JkIHRoZSBQUk9UX0VYRUMgbWFwcGluZ3Mgc28gdGhhdCB3ZSBjYW4KKwkgKiBjb3JyZWxhdGUgdXNlcnNwYWNlIElQcyB0byBjb2RlLiBUaGV5IGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisJICoKKwkgKiBzdHJ1Y3QgeworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoKKwkgKgl1MzIJCQkJcGlkLCB0aWQ7CisJICoJdTY0CQkJCWFkZHI7CisJICoJdTY0CQkJCWxlbjsKKwkgKgl1NjQJCQkJcGdvZmY7CisJICoJY2hhcgkJCQlmaWxlbmFtZVtdOworCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfTU1BUAkJCT0gMSwKKworCS8qCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXU2NAkJCQlpZDsKKwkgKgl1NjQJCQkJbG9zdDsKKwkgKiB9OworCSAqLworCVBFUkZfUkVDT1JEX0xPU1QJCQk9IDIsCisKKwkvKgorCSAqIHN0cnVjdCB7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgorCSAqCXUzMgkJCQlwaWQsIHRpZDsKKwkgKgljaGFyCQkJCWNvbW1bXTsKKwkgKiB9OworCSAqLworCVBFUkZfUkVDT1JEX0NPTU0JCQk9IDMsCisKKwkvKgorCSAqIHN0cnVjdCB7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1MzIJCQkJcGlkLCBwcGlkOworCSAqCXUzMgkJCQl0aWQsIHB0aWQ7CisJICoJdTY0CQkJCXRpbWU7CisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9FWElUCQkJPSA0LAorCisJLyoKKwkgKiBzdHJ1Y3QgeworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoJdTY0CQkJCXRpbWU7CisJICoJdTY0CQkJCWlkOworCSAqCXU2NAkJCQlzdHJlYW1faWQ7CisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9USFJPVFRMRQkJPSA1LAorCVBFUkZfUkVDT1JEX1VOVEhST1RUTEUJCT0gNiwKKworCS8qCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CisJICoJdTMyCQkJCXRpZCwgcHRpZDsKKwkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9GT1JLCQkJPSA3LAorCisJLyoKKwkgKiBzdHJ1Y3QgeworCSAqIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqIAl1MzIJCQkJcGlkLCB0aWQ7CisJICoKKwkgKiAJc3RydWN0IHJlYWRfZm9ybWF0CQl2YWx1ZXM7CisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9SRUFECQkJPSA4LAorCisJLyoKKwkgKiBzdHJ1Y3QgeworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoKKwkgKgl7IHU2NAkJCWlwOwkgIH0gJiYgUEVSRl9TQU1QTEVfSVAKKwkgKgl7IHUzMgkJCXBpZCwgdGlkOyB9ICYmIFBFUkZfU0FNUExFX1RJRAorCSAqCXsgdTY0CQkJdGltZTsgICAgIH0gJiYgUEVSRl9TQU1QTEVfVElNRQorCSAqCXsgdTY0CQkJYWRkcjsgICAgIH0gJiYgUEVSRl9TQU1QTEVfQUREUgorCSAqCXsgdTY0CQkJaWQ7CSAgfSAmJiBQRVJGX1NBTVBMRV9JRAorCSAqCXsgdTY0CQkJc3RyZWFtX2lkO30gJiYgUEVSRl9TQU1QTEVfU1RSRUFNX0lECisJICoJeyB1MzIJCQljcHUsIHJlczsgfSAmJiBQRVJGX1NBTVBMRV9DUFUKKwkgKgl7IHU2NAkJCXBlcmlvZDsgICB9ICYmIFBFUkZfU0FNUExFX1BFUklPRAorCSAqCisJICoJeyBzdHJ1Y3QgcmVhZF9mb3JtYXQJdmFsdWVzOwkgIH0gJiYgUEVSRl9TQU1QTEVfUkVBRAorCSAqCisJICoJeyB1NjQJCQluciwKKwkgKgkgIHU2NAkJCWlwc1tucl07ICB9ICYmIFBFUkZfU0FNUExFX0NBTExDSEFJTgorCSAqCisJICoJIworCSAqCSMgVGhlIFJBVyByZWNvcmQgYmVsb3cgaXMgb3BhcXVlIGRhdGEgd3J0IHRoZSBBQkkKKwkgKgkjCisJICoJIyBUaGF0IGlzLCB0aGUgQUJJIGRvZXNuJ3QgbWFrZSBhbnkgcHJvbWlzZXMgd3J0IHRvCisJICoJIyB0aGUgc3RhYmlsaXR5IG9mIGl0cyBjb250ZW50LCBpdCBtYXkgdmFyeSBkZXBlbmRpbmcKKwkgKgkjIG9uIGV2ZW50LCBoYXJkd2FyZSwga2VybmVsIHZlcnNpb24gYW5kIHBoYXNlIG9mCisJICoJIyB0aGUgbW9vbi4KKwkgKgkjCisJICoJIyBJbiBvdGhlciB3b3JkcywgUEVSRl9TQU1QTEVfUkFXIGNvbnRlbnRzIGFyZSBub3QgYW4gQUJJLgorCSAqCSMKKwkgKgorCSAqCXsgdTMyCQkJc2l6ZTsKKwkgKgkgIGNoYXIgICAgICAgICAgICAgICAgICBkYXRhW3NpemVdO30mJiBQRVJGX1NBTVBMRV9SQVcKKwkgKiB9OworCSAqLworCVBFUkZfUkVDT1JEX1NBTVBMRQkJPSA5LAorCisJUEVSRl9SRUNPUkRfTUFYLAkJCS8qIG5vbi1BQkkgKi8KK307CisKK2VudW0gcGVyZl9jYWxsY2hhaW5fY29udGV4dCB7CisJUEVSRl9DT05URVhUX0hWCQkJPSAoX191NjQpLTMyLAorCVBFUkZfQ09OVEVYVF9LRVJORUwJCT0gKF9fdTY0KS0xMjgsCisJUEVSRl9DT05URVhUX1VTRVIJCT0gKF9fdTY0KS01MTIsCisKKwlQRVJGX0NPTlRFWFRfR1VFU1QJCT0gKF9fdTY0KS0yMDQ4LAorCVBFUkZfQ09OVEVYVF9HVUVTVF9LRVJORUwJPSAoX191NjQpLTIxNzYsCisJUEVSRl9DT05URVhUX0dVRVNUX1VTRVIJCT0gKF9fdTY0KS0yNTYwLAorCisJUEVSRl9DT05URVhUX01BWAkJPSAoX191NjQpLTQwOTUsCit9OworCisjZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkoMVUgPDwgMCkKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkoMVUgPDwgMSkKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBLZXJuZWwtaW50ZXJuYWwgZGF0YSB0eXBlcyBhbmQgZGVmaW5pdGlvbnM6CisgKi8KKworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworIyBpbmNsdWRlIDxhc20vcGVyZl9ldmVudC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNkZWZpbmUgUEVSRl9NQVhfU1RBQ0tfREVQVEgJCTI1NQorCitzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgeworCV9fdTY0CQkJCW5yOworCV9fdTY0CQkJCWlwW1BFUkZfTUFYX1NUQUNLX0RFUFRIXTsKK307CisKK3N0cnVjdCBwZXJmX3Jhd19yZWNvcmQgeworCXUzMgkJCQlzaXplOworCXZvaWQJCQkJKmRhdGE7Cit9OworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qKgorICogc3RydWN0IGh3X3BlcmZfZXZlbnQgLSBwZXJmb3JtYW5jZSBldmVudCBoYXJkd2FyZSBkZXRhaWxzOgorICovCitzdHJ1Y3QgaHdfcGVyZl9ldmVudCB7CisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJdW5pb24geworCQlzdHJ1Y3QgeyAvKiBoYXJkd2FyZSAqLworCQkJdTY0CQljb25maWc7CisJCQl1bnNpZ25lZCBsb25nCWNvbmZpZ19iYXNlOworCQkJdW5zaWduZWQgbG9uZwlldmVudF9iYXNlOworCQkJaW50CQlpZHg7CisJCX07CisJCXVuaW9uIHsgLyogc29mdHdhcmUgKi8KKwkJCWF0b21pYzY0X3QJY291bnQ7CisJCQlzdHJ1Y3QgaHJ0aW1lcglocnRpbWVyOworCQl9OworCX07CisJYXRvbWljNjRfdAkJCXByZXZfY291bnQ7CisJdTY0CQkJCXNhbXBsZV9wZXJpb2Q7CisJdTY0CQkJCWxhc3RfcGVyaW9kOworCWF0b21pYzY0X3QJCQlwZXJpb2RfbGVmdDsKKwl1NjQJCQkJaW50ZXJydXB0czsKKworCXU2NAkJCQlmcmVxX2NvdW50OworCXU2NAkJCQlmcmVxX2ludGVycnVwdHM7CisJdTY0CQkJCWZyZXFfc3RhbXA7CisjZW5kaWYKK307CisKK3N0cnVjdCBwZXJmX2V2ZW50OworCisvKioKKyAqIHN0cnVjdCBwbXUgLSBnZW5lcmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAorICovCitzdHJ1Y3QgcG11IHsKKwlpbnQgKCplbmFibGUpCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisJdm9pZCAoKmRpc2FibGUpCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisJdm9pZCAoKnJlYWQpCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisJdm9pZCAoKnVudGhyb3R0bGUpCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKK307CisKKy8qKgorICogZW51bSBwZXJmX2V2ZW50X2FjdGl2ZV9zdGF0ZSAtIHRoZSBzdGF0ZXMgb2YgYSBldmVudAorICovCitlbnVtIHBlcmZfZXZlbnRfYWN0aXZlX3N0YXRlIHsKKwlQRVJGX0VWRU5UX1NUQVRFX0VSUk9SCQk9IC0yLAorCVBFUkZfRVZFTlRfU1RBVEVfT0ZGCQk9IC0xLAorCVBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUJPSAgMCwKKwlQRVJGX0VWRU5UX1NUQVRFX0FDVElWRQkJPSAgMSwKK307CisKK3N0cnVjdCBmaWxlOworCitzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgeworCXN0cnVjdCByY3VfaGVhZAkJCXJjdV9oZWFkOworCWludAkJCQlucl9wYWdlczsJLyogbnIgb2YgZGF0YSBwYWdlcyAgKi8KKwlpbnQJCQkJd3JpdGFibGU7CS8qIGFyZSB3ZSB3cml0YWJsZSAgICovCisJaW50CQkJCW5yX2xvY2tlZDsJLyogbnIgcGFnZXMgbWxvY2tlZCAgKi8KKworCWF0b21pY190CQkJcG9sbDsJCS8qIFBPTExfIGZvciB3YWtldXBzICovCisJYXRvbWljX3QJCQlldmVudHM7CQkvKiBldmVudF9pZCBsaW1pdCAgICAgICAqLworCisJYXRvbWljX2xvbmdfdAkJCWhlYWQ7CQkvKiB3cml0ZSBwb3NpdGlvbiAgICAqLworCWF0b21pY19sb25nX3QJCQlkb25lX2hlYWQ7CS8qIGNvbXBsZXRlZCBoZWFkICAgICovCisKKwlhdG9taWNfdAkJCWxvY2s7CQkvKiBjb25jdXJyZW50IHdyaXRlcyAqLworCWF0b21pY190CQkJd2FrZXVwOwkJLyogbmVlZHMgYSB3YWtldXAgICAgKi8KKwlhdG9taWNfdAkJCWxvc3Q7CQkvKiBuciByZWNvcmRzIGxvc3QgICAqLworCisJbG9uZwkJCQl3YXRlcm1hcms7CS8qIHdha2V1cCB3YXRlcm1hcmsgICovCisKKwlzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UJKnVzZXJfcGFnZTsKKwl2b2lkCQkJCSpkYXRhX3BhZ2VzWzBdOworfTsKKworc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSB7CisJc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqbmV4dDsKKwl2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqKTsKK307CisKKy8qKgorICogc3RydWN0IHBlcmZfZXZlbnQgLSBwZXJmb3JtYW5jZSBldmVudCBrZXJuZWwgcmVwcmVzZW50YXRpb246CisgKi8KK3N0cnVjdCBwZXJmX2V2ZW50IHsKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlncm91cF9lbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlldmVudF9lbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWJsaW5nX2xpc3Q7CisJaW50CQkJCW5yX3NpYmxpbmdzOworCXN0cnVjdCBwZXJmX2V2ZW50CQkqZ3JvdXBfbGVhZGVyOworCXN0cnVjdCBwZXJmX2V2ZW50CQkqb3V0cHV0OworCWNvbnN0IHN0cnVjdCBwbXUJCSpwbXU7CisKKwllbnVtIHBlcmZfZXZlbnRfYWN0aXZlX3N0YXRlCXN0YXRlOworCWF0b21pYzY0X3QJCQljb3VudDsKKworCS8qCisJICogVGhlc2UgYXJlIHRoZSB0b3RhbCB0aW1lIGluIG5hbm9zZWNvbmRzIHRoYXQgdGhlIGV2ZW50CisJICogaGFzIGJlZW4gZW5hYmxlZCAoaS5lLiBlbGlnaWJsZSB0byBydW4sIGFuZCB0aGUgdGFzayBoYXMKKwkgKiBiZWVuIHNjaGVkdWxlZCBpbiwgaWYgdGhpcyBpcyBhIHBlci10YXNrIGV2ZW50KQorCSAqIGFuZCBydW5uaW5nIChzY2hlZHVsZWQgb250byB0aGUgQ1BVKSwgcmVzcGVjdGl2ZWx5LgorCSAqCisJICogVGhleSBhcmUgY29tcHV0ZWQgZnJvbSB0c3RhbXBfZW5hYmxlZCwgdHN0YW1wX3J1bm5pbmcgYW5kCisJICogdHN0YW1wX3N0b3BwZWQgd2hlbiB0aGUgZXZlbnQgaXMgaW4gSU5BQ1RJVkUgb3IgQUNUSVZFIHN0YXRlLgorCSAqLworCXU2NAkJCQl0b3RhbF90aW1lX2VuYWJsZWQ7CisJdTY0CQkJCXRvdGFsX3RpbWVfcnVubmluZzsKKworCS8qCisJICogVGhlc2UgYXJlIHRpbWVzdGFtcHMgdXNlZCBmb3IgY29tcHV0aW5nIHRvdGFsX3RpbWVfZW5hYmxlZAorCSAqIGFuZCB0b3RhbF90aW1lX3J1bm5pbmcgd2hlbiB0aGUgZXZlbnQgaXMgaW4gSU5BQ1RJVkUgb3IKKwkgKiBBQ1RJVkUgc3RhdGUsIG1lYXN1cmVkIGluIG5hbm9zZWNvbmRzIGZyb20gYW4gYXJiaXRyYXJ5IHBvaW50CisJICogaW4gdGltZS4KKwkgKiB0c3RhbXBfZW5hYmxlZDogdGhlIG5vdGlvbmFsIHRpbWUgd2hlbiB0aGUgZXZlbnQgd2FzIGVuYWJsZWQKKwkgKiB0c3RhbXBfcnVubmluZzogdGhlIG5vdGlvbmFsIHRpbWUgd2hlbiB0aGUgZXZlbnQgd2FzIHNjaGVkdWxlZCBvbgorCSAqIHRzdGFtcF9zdG9wcGVkOiBpbiBJTkFDVElWRSBzdGF0ZSwgdGhlIG5vdGlvbmFsIHRpbWUgd2hlbiB0aGUKKwkgKglldmVudCB3YXMgc2NoZWR1bGVkIG9mZi4KKwkgKi8KKwl1NjQJCQkJdHN0YW1wX2VuYWJsZWQ7CisJdTY0CQkJCXRzdGFtcF9ydW5uaW5nOworCXU2NAkJCQl0c3RhbXBfc3RvcHBlZDsKKworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJYXR0cjsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudAkJaHc7CisKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0CSpjdHg7CisJc3RydWN0IGZpbGUJCQkqZmlscDsKKworCS8qCisJICogVGhlc2UgYWNjdW11bGF0ZSB0b3RhbCB0aW1lIChpbiBuYW5vc2Vjb25kcykgdGhhdCBjaGlsZHJlbgorCSAqIGV2ZW50cyBoYXZlIGJlZW4gZW5hYmxlZCBhbmQgcnVubmluZywgcmVzcGVjdGl2ZWx5LgorCSAqLworCWF0b21pYzY0X3QJCQljaGlsZF90b3RhbF90aW1lX2VuYWJsZWQ7CisJYXRvbWljNjRfdAkJCWNoaWxkX3RvdGFsX3RpbWVfcnVubmluZzsKKworCS8qCisJICogUHJvdGVjdCBhdHRhY2gvZGV0YWNoIGFuZCBjaGlsZF9saXN0OgorCSAqLworCXN0cnVjdCBtdXRleAkJCWNoaWxkX211dGV4OworCXN0cnVjdCBsaXN0X2hlYWQJCWNoaWxkX2xpc3Q7CisJc3RydWN0IHBlcmZfZXZlbnQJCSpwYXJlbnQ7CisKKwlpbnQJCQkJb25jcHU7CisJaW50CQkJCWNwdTsKKworCXN0cnVjdCBsaXN0X2hlYWQJCW93bmVyX2VudHJ5OworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKm93bmVyOworCisJLyogbW1hcCBiaXRzICovCisJc3RydWN0IG11dGV4CQkJbW1hcF9tdXRleDsKKwlhdG9taWNfdAkJCW1tYXBfY291bnQ7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhCQkqZGF0YTsKKworCS8qIHBvbGwgcmVsYXRlZCAqLworCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0cTsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkJKmZhc3luYzsKKworCS8qIGRlbGF5ZWQgd29yayBmb3IgTk1JcyBhbmQgc3VjaCAqLworCWludAkJCQlwZW5kaW5nX3dha2V1cDsKKwlpbnQJCQkJcGVuZGluZ19raWxsOworCWludAkJCQlwZW5kaW5nX2Rpc2FibGU7CisJc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeQlwZW5kaW5nOworCisJYXRvbWljX3QJCQlldmVudF9saW1pdDsKKworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgcGVyZl9ldmVudCAqKTsKKwlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKKworCXN0cnVjdCBwaWRfbmFtZXNwYWNlCQkqbnM7CisJdTY0CQkJCWlkOworI2VuZGlmCit9OworCisvKioKKyAqIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgLSBldmVudCBjb250ZXh0IHN0cnVjdHVyZQorICoKKyAqIFVzZWQgYXMgYSBjb250YWluZXIgZm9yIHRhc2sgZXZlbnRzIGFuZCBDUFUgZXZlbnRzIGFzIHdlbGw6CisgKi8KK3N0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgeworCS8qCisJICogUHJvdGVjdCB0aGUgc3RhdGVzIG9mIHRoZSBldmVudHMgaW4gdGhlIGxpc3QsCisJICogbnJfYWN0aXZlLCBhbmQgdGhlIGxpc3Q6CisJICovCisJc3BpbmxvY2tfdAkJCWxvY2s7CisJLyoKKwkgKiBQcm90ZWN0IHRoZSBsaXN0IG9mIGV2ZW50cy4gIExvY2tpbmcgZWl0aGVyIG11dGV4IG9yIGxvY2sKKwkgKiBpcyBzdWZmaWNpZW50IHRvIGVuc3VyZSB0aGUgbGlzdCBkb2Vzbid0IGNoYW5nZTsgdG8gY2hhbmdlCisJICogdGhlIGxpc3QgeW91IG5lZWQgdG8gbG9jayBib3RoIHRoZSBtdXRleCBhbmQgdGhlIHNwaW5sb2NrLgorCSAqLworCXN0cnVjdCBtdXRleAkJCW11dGV4OworCisJc3RydWN0IGxpc3RfaGVhZAkJZ3JvdXBfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlldmVudF9saXN0OworCWludAkJCQlucl9ldmVudHM7CisJaW50CQkJCW5yX2FjdGl2ZTsKKwlpbnQJCQkJaXNfYWN0aXZlOworCWludAkJCQlucl9zdGF0OworCWF0b21pY190CQkJcmVmY291bnQ7CisJc3RydWN0IHRhc2tfc3RydWN0CQkqdGFzazsKKworCS8qCisJICogQ29udGV4dCBjbG9jaywgcnVucyB3aGVuIGNvbnRleHQgZW5hYmxlZC4KKwkgKi8KKwl1NjQJCQkJdGltZTsKKwl1NjQJCQkJdGltZXN0YW1wOworCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgbGV0IHVzIGRldGVjdCB3aGVuIHR3byBjb250ZXh0cyBoYXZlIGJvdGgKKwkgKiBiZWVuIGNsb25lZCAoaW5oZXJpdGVkKSBmcm9tIGEgY29tbW9uIGFuY2VzdG9yLgorCSAqLworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQJKnBhcmVudF9jdHg7CisJdTY0CQkJCXBhcmVudF9nZW47CisJdTY0CQkJCWdlbmVyYXRpb247CisJaW50CQkJCXBpbl9jb3VudDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKK307CisKKy8qKgorICogc3RydWN0IHBlcmZfZXZlbnRfY3B1X2NvbnRleHQgLSBwZXIgY3B1IGV2ZW50IGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBwZXJmX2NwdV9jb250ZXh0IHsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0CWN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0CSp0YXNrX2N0eDsKKwlpbnQJCQkJYWN0aXZlX29uY3B1OworCWludAkJCQltYXhfcGVydGFzazsKKwlpbnQJCQkJZXhjbHVzaXZlOworCisJLyoKKwkgKiBSZWN1cnNpb24gYXZvaWRhbmNlOgorCSAqCisJICogdGFzaywgc29mdGlycSwgaXJxLCBubWkgY29udGV4dAorCSAqLworCWludAkJCQlyZWN1cnNpb25bNF07Cit9OworCitzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkJKmV2ZW50OworCXN0cnVjdCBwZXJmX21tYXBfZGF0YQkJKmRhdGE7CisJdW5zaWduZWQgbG9uZwkJCWhlYWQ7CisJdW5zaWduZWQgbG9uZwkJCW9mZnNldDsKKwlpbnQJCQkJbm1pOworCWludAkJCQlzYW1wbGU7CisJaW50CQkJCWxvY2tlZDsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7Cit9OworCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisKKy8qCisgKiBTZXQgYnkgYXJjaGl0ZWN0dXJlIGNvZGU6CisgKi8KK2V4dGVybiBpbnQgcGVyZl9tYXhfZXZlbnRzOworCitleHRlcm4gY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOworZXh0ZXJuIGludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2RvX3BlbmRpbmcodm9pZCk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpOworZXh0ZXJuIHZvaWQgX19wZXJmX2Rpc2FibGUodm9pZCk7CitleHRlcm4gYm9vbCBfX3BlcmZfZW5hYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl9kaXNhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl9lbmFibGUodm9pZCk7CitleHRlcm4gaW50IHBlcmZfZXZlbnRfdGFza19kaXNhYmxlKHZvaWQpOworZXh0ZXJuIGludCBwZXJmX2V2ZW50X3Rhc2tfZW5hYmxlKHZvaWQpOworZXh0ZXJuIGludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCisJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCitzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSB7CisJdTY0CQkJCXR5cGU7CisKKwl1NjQJCQkJaXA7CisJc3RydWN0IHsKKwkJdTMyCXBpZDsKKwkJdTMyCXRpZDsKKwl9CQkJCXRpZF9lbnRyeTsKKwl1NjQJCQkJdGltZTsKKwl1NjQJCQkJYWRkcjsKKwl1NjQJCQkJaWQ7CisJdTY0CQkJCXN0cmVhbV9pZDsKKwlzdHJ1Y3QgeworCQl1MzIJY3B1OworCQl1MzIJcmVzZXJ2ZWQ7CisJfQkJCQljcHVfZW50cnk7CisJdTY0CQkJCXBlcmlvZDsKKwlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkJKmNhbGxjaGFpbjsKKwlzdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkCQkqcmF3OworfTsKKworZXh0ZXJuIHZvaWQgcGVyZl9vdXRwdXRfc2FtcGxlKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhlYWRlciwKKwkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKKwkJCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworZXh0ZXJuIHZvaWQgcGVyZl9wcmVwYXJlX3NhbXBsZShzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhlYWRlciwKKwkJCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKKwkJCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitleHRlcm4gaW50IHBlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbm1pLAorCQkJCSBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKKwkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogUmV0dXJuIDEgZm9yIGEgc29mdHdhcmUgZXZlbnQsIDAgZm9yIGEgaGFyZHdhcmUgZXZlbnQKKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfc29mdHdhcmVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAoZXZlbnQtPmF0dHIudHlwZSAhPSBQRVJGX1RZUEVfUkFXKSAmJgorCQkoZXZlbnQtPmF0dHIudHlwZSAhPSBQRVJGX1RZUEVfSEFSRFdBUkUpICYmCisJCShldmVudC0+YXR0ci50eXBlICE9IFBFUkZfVFlQRV9IV19DQUNIRSk7Cit9CisKK2V4dGVybiBhdG9taWNfdCBwZXJmX3N3ZXZlbnRfZW5hYmxlZFtQRVJGX0NPVU5UX1NXX01BWF07CisKK2V4dGVybiB2b2lkIF9fcGVyZl9zd19ldmVudCh1MzIsIHU2NCwgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCB1NjQpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK3BlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikKK3sKKwlpZiAoYXRvbWljX3JlYWQoJnBlcmZfc3dldmVudF9lbmFibGVkW2V2ZW50X2lkXSkpCisJCV9fcGVyZl9zd19ldmVudChldmVudF9pZCwgbnIsIG5taSwgcmVncywgYWRkcik7Cit9CisKK2V4dGVybiB2b2lkIF9fcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCV9fcGVyZl9ldmVudF9tbWFwKHZtYSk7Cit9CisKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCitleHRlcm4gc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICpwZXJmX2NhbGxjaGFpbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiBpbnQgc3lzY3RsX3BlcmZfZXZlbnRfcGFyYW5vaWQ7CitleHRlcm4gaW50IHN5c2N0bF9wZXJmX2V2ZW50X21sb2NrOworZXh0ZXJuIGludCBzeXNjdGxfcGVyZl9ldmVudF9zYW1wbGVfcmF0ZTsKKworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudChpbnQgZXZlbnRfaWQsIHU2NCBhZGRyLCB1NjQgY291bnQsCisJCQkJIHZvaWQgKnJlY29yZCwgaW50IGVudHJ5X3NpemUpOworCisjaWZuZGVmIHBlcmZfbWlzY19mbGFncworI2RlZmluZSBwZXJmX21pc2NfZmxhZ3MocmVncykJKHVzZXJfbW9kZShyZWdzKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFwKKwkJCQkgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpCisjZGVmaW5lIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQlpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCisjZW5kaWYKKworZXh0ZXJuIGludCBwZXJmX291dHB1dF9iZWdpbihzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQkgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdW5zaWduZWQgaW50IHNpemUsCisJCQkgICAgIGludCBubWksIGludCBzYW1wbGUpOworZXh0ZXJuIHZvaWQgcGVyZl9vdXRwdXRfZW5kKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSk7CitleHRlcm4gdm9pZCBwZXJmX291dHB1dF9jb3B5KHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKKwkJCSAgICAgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQKK3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZAorcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK3BlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSkJCQl7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCXsgfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZG9fcGVuZGluZyh2b2lkKQkJCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpCQkJCXsgfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZGlzYWJsZSh2b2lkKQkJCQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9lbmFibGUodm9pZCkJCQkJCXsgfQorc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldmVudF90YXNrX2Rpc2FibGUodm9pZCkJCQkJeyByZXR1cm4gLUVJTlZBTDsgfQorc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldmVudF90YXNrX2VuYWJsZSh2b2lkKQkJCQl7IHJldHVybiAtRUlOVkFMOyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGVyZl9zd19ldmVudCh1MzIgZXZlbnRfaWQsIHU2NCBuciwgaW50IG5taSwKKwkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IGFkZHIpCQkJeyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2NvbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCkJCQkJeyB9CisKKyNlbmRpZgorCisjZGVmaW5lIHBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIHgpIFwKKwlwZXJmX291dHB1dF9jb3B5KChoYW5kbGUpLCAmKHgpLCBzaXplb2YoeCkpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0xJTlVYX1BFUkZfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbnAuaCBiL2luY2x1ZGUvbGludXgvcG5wLmgKaW5kZXggYjA2M2M3My4uZmRkZmFmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BucC5oCkBAIC0zNjAsNiArMzYwLDcgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJaW50ICgqcHJvYmUpIChzdHJ1Y3QgcG5wX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKTsKIAl2b2lkICgqcmVtb3ZlKSAoc3RydWN0IHBucF9kZXYgKmRldik7CisJdm9pZCAoKnNodXRkb3duKSAoc3RydWN0IHBucF9kZXYgKmRldik7CiAJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAJaW50ICgqcmVzdW1lKSAoc3RydWN0IHBucF9kZXYgKmRldik7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb2lzb24uaCBiL2luY2x1ZGUvbGludXgvcG9pc29uLmgKaW5kZXggNjcyOWY3ZC4uN2ZjMTk0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb2lzb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCkBAIC02NSw2ICs2NSw5IEBACiAjZGVmaW5lIE1VVEVYX0RFQlVHX0lOSVQJMHgxMQogI2RlZmluZSBNVVRFWF9ERUJVR19GUkVFCTB4MjIKIAorLyoqKioqKioqKiogbGliL2ZsZXhfYXJyYXkuYyAqKioqKioqKioqLworI2RlZmluZSBGTEVYX0FSUkFZX0ZSRUUJMHg2YwkvKiBmb3IgdXNlLWFmdGVyLWZyZWUgcG9pc29uaW5nICovCisKIC8qKioqKioqKioqIHNlY3VyaXR5LyAqKioqKioqKioqLwogI2RlZmluZSBLRVlfREVTVFJPWQkJMHhiZAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaAppbmRleCA1OTRjNDk0Li5iNWQwOTZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKQEAgLTM5LDYgKzM5LDEzIEBACiB9OwogCiBlbnVtIHsKKwlQT1dFUl9TVVBQTFlfQ0hBUkdFX1RZUEVfVU5LTk9XTiA9IDAsCisJUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX05PTkUsCisJUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX1RSSUNLTEUsCisJUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX0ZBU1QsCit9OworCitlbnVtIHsKIAlQT1dFUl9TVVBQTFlfSEVBTFRIX1VOS05PV04gPSAwLAogCVBPV0VSX1NVUFBMWV9IRUFMVEhfR09PRCwKIAlQT1dFUl9TVVBQTFlfSEVBTFRIX09WRVJIRUFULApAQCAtNTgsOSArNjUsMTkgQEAKIAlQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MaU1uLAogfTsKIAorZW51bSB7CisJUE9XRVJfU1VQUExZX0NBUEFDSVRZX0xFVkVMX1VOS05PV04gPSAwLAorCVBPV0VSX1NVUFBMWV9DQVBBQ0lUWV9MRVZFTF9DUklUSUNBTCwKKwlQT1dFUl9TVVBQTFlfQ0FQQUNJVFlfTEVWRUxfTE9XLAorCVBPV0VSX1NVUFBMWV9DQVBBQ0lUWV9MRVZFTF9OT1JNQUwsCisJUE9XRVJfU1VQUExZX0NBUEFDSVRZX0xFVkVMX0hJR0gsCisJUE9XRVJfU1VQUExZX0NBUEFDSVRZX0xFVkVMX0ZVTEwsCit9OworCiBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSB7CiAJLyogUHJvcGVydGllcyBvZiB0eXBlIGBpbnQnICovCiAJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTID0gMCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfVFlQRSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9IRUFMVEgsCiAJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKIAlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsCkBAIC04OSw2ICsxMDYsNyBAQAogCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9OT1csCiAJUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX0FWRywKIAlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwgLyogaW4gcGVyY2VudHMhICovCisJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFlfTEVWRUwsCiAJUE9XRVJfU1VQUExZX1BST1BfVEVNUCwKIAlQT1dFUl9TVVBQTFlfUFJPUF9URU1QX0FNQklFTlQsCiAJUE9XRVJfU1VQUExZX1BST1BfVElNRV9UT19FTVBUWV9OT1csCkBAIC0xMjYsNiArMTQ0LDcgQEAKIAkJCSAgICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCiAJCQkgICAgdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCk7CiAJdm9pZCAoKmV4dGVybmFsX3Bvd2VyX2NoYW5nZWQpKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CisJdm9pZCAoKnNldF9jaGFyZ2VkKShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogCiAJLyogRm9yIEFQTSBlbXVsYXRpb24sIHRoaW5rIGxlZ2FjeSB1c2Vyc3BhY2UuICovCiAJaW50IHVzZV9mb3JfYXBtOwpAQCAtMTY1LDggKzE4NCwxMCBAQAogCWludCB1c2VfZm9yX2FwbTsKIH07CiAKK2V4dGVybiBzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwb3dlcl9zdXBwbHlfZ2V0X2J5X25hbWUoY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBwb3dlcl9zdXBwbHlfY2hhbmdlZChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogZXh0ZXJuIGludCBwb3dlcl9zdXBwbHlfYW1faV9zdXBwbGllZChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOworZXh0ZXJuIGludCBwb3dlcl9zdXBwbHlfc2V0X2JhdHRlcnlfY2hhcmdlZChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUE9XRVJfU1VQUExZKSB8fCBkZWZpbmVkKENPTkZJR19QT1dFUl9TVVBQTFlfTU9EVUxFKQogZXh0ZXJuIGludCBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmN0bC5oIGIvaW5jbHVkZS9saW51eC9wcmN0bC5oCmluZGV4IGIwMGRmNGMuLjA3YmZmNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKQEAgLTg1LDcgKzg1LDcgQEAKICNkZWZpbmUgUFJfU0VUX1RJTUVSU0xBQ0sgMjkKICNkZWZpbmUgUFJfR0VUX1RJTUVSU0xBQ0sgMzAKIAotI2RlZmluZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRElTQUJMRQkJMzEKLSNkZWZpbmUgUFJfVEFTS19QRVJGX0NPVU5URVJTX0VOQUJMRQkJMzIKKyNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQorI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IGU2ZTc3ZDMuLjM3OWVhZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC03OCwxMCArNzgsMTkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBkZV9vcGVuZXJzOwkvKiB3aG8gZGlkIC0+b3BlbiwgYnV0IG5vdCAtPnJlbGVhc2UgKi8KIH07CiAKK2VudW0ga2NvcmVfdHlwZSB7CisJS0NPUkVfVEVYVCwKKwlLQ09SRV9WTUFMTE9DLAorCUtDT1JFX1JBTSwKKwlLQ09SRV9WTUVNTUFQLAorCUtDT1JFX09USEVSLAorfTsKKwogc3RydWN0IGtjb3JlX2xpc3QgewotCXN0cnVjdCBrY29yZV9saXN0ICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJc2l6ZV90IHNpemU7CisJaW50IHR5cGU7CiB9OwogCiBzdHJ1Y3Qgdm1jb3JlIHsKQEAgLTIzMywxMSArMjQyLDEyIEBACiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogI2lmICFkZWZpbmVkKENPTkZJR19QUk9DX0tDT1JFKQotc3RhdGljIGlubGluZSB2b2lkIGtjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKm5ldywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQKK2tjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKm5ldywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogfQogI2Vsc2UKLWV4dGVybiB2b2lkIGtjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKiwgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQga2NsaXN0X2FkZChzdHJ1Y3Qga2NvcmVfbGlzdCAqLCB2b2lkICosIHNpemVfdCwgaW50IHR5cGUpOwogI2VuZGlmCiAKIHVuaW9uIHByb2Nfb3AgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IDI2MzYxYzQuLjNlYmIyMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKQEAgLTEzNSw4ICsxMzUsOCBAQAogLyoKICAqIE9wZXJhdGlvbnMgc3VwcG9ydGVkIGZvciBkaXNrcXVvdGFzLgogICovCi1leHRlcm4gc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZHF1b3Rfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZHF1b3Rfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHM7CiAKICNkZWZpbmUgc2JfZHF1b3Rfb3BzICgmZHF1b3Rfb3BlcmF0aW9ucykKICNkZWZpbmUgc2JfcXVvdGFjdGxfb3BzICgmdmZzX3F1b3RhY3RsX29wcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdF9udWxscy5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKaW5kZXggZjlkZGQwMy4uNTg5YTQwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKQEAgLTEwMiw3ICsxMDIsNyBAQAogICovCiAjZGVmaW5lIGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikgXAogCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+Zmlyc3QpOwkJCSBcCi0JCSghaXNfYV9udWxscyhwb3MpKSAmJiAJCQlcCisJCSghaXNfYV9udWxscyhwb3MpKSAmJgkJCVwKIAkJKHsgdHBvcyA9IGhsaXN0X251bGxzX2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKIAkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA5NWUwNjE1Li42ZmUwMzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uIAorICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE4LDcgKzE4LDcgQEAKICAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDEKICAqCiAgKiBBdXRob3I6IERpcGFua2FyIFNhcm1hIDxkaXBhbmthckBpbi5pYm0uY29tPgotICogCisgKgogICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIHdvcmsgYnkgUGF1bCBNY0tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgogICogYW5kIGlucHV0cyBmcm9tIFJ1c3R5IFJ1c3NlbGwsIEFuZHJlYSBBcmNhbmdlbGkgYW5kIEFuZGkgS2xlZW4uCiAgKiBQYXBlcnM6CkBAIC0yNiw3ICsyNiw3IEBACiAgKiBodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMuc2MucGRmIChPTFMyMDAxKQogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKKyAqCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKICAqCiAgKi8KIApAQCAtNTIsOCArNTIsMTMgQEAKIH07CiAKIC8qIEV4cG9ydGVkIGNvbW1vbiBpbnRlcmZhY2VzICovCisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdSh2b2lkKTsKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworI2RlZmluZSBzeW5jaHJvbml6ZV9yY3Ugc3luY2hyb25pemVfc2NoZWQKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9iaCh2b2lkKTsKK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3NjaGVkKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X2JhcnJpZXIodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfYmFycmllcl9iaCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpOwpAQCAtMjYyLDI0ICsyNjcsNiBAQAogZXh0ZXJuIHZvaWQgd2FrZW1lX2FmdGVyX3JjdShzdHJ1Y3QgcmN1X2hlYWQgICpoZWFkKTsKIAogLyoqCi0gKiBzeW5jaHJvbml6ZV9zY2hlZCAtIGJsb2NrIHVudGlsIGFsbCBDUFVzIGhhdmUgZXhpdGVkIGFueSBub24tcHJlZW1wdGl2ZQotICoga2VybmVsIGNvZGUgc2VxdWVuY2VzLgotICoKLSAqIFRoaXMgbWVhbnMgdGhhdCBhbGwgcHJlZW1wdF9kaXNhYmxlIGNvZGUgc2VxdWVuY2VzLCBpbmNsdWRpbmcgTk1JIGFuZAotICogaGFyZHdhcmUtaW50ZXJydXB0IGhhbmRsZXJzLCBpbiBwcm9ncmVzcyBvbiBlbnRyeSB3aWxsIGhhdmUgY29tcGxldGVkCi0gKiBiZWZvcmUgdGhpcyBwcmltaXRpdmUgcmV0dXJucy4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQKLSAqIHNvZnRpcnEgaGFuZGxlcnMgd2lsbCBoYXZlIGNvbXBsZXRlZCwgc2luY2UgaW4gc29tZSBrZXJuZWxzLCB0aGVzZQotICogaGFuZGxlcnMgY2FuIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQsIGFuZCBjYW4gYmxvY2suCi0gKgotICogVGhpcyBwcmltaXRpdmUgcHJvdmlkZXMgdGhlIGd1YXJhbnRlZXMgbWFkZSBieSB0aGUgKG5vdyByZW1vdmVkKQotICogc3luY2hyb25pemVfa2VybmVsKCkgQVBJLiAgSW4gY29udHJhc3QsIHN5bmNocm9uaXplX3JjdSgpIG9ubHkKLSAqIGd1YXJhbnRlZXMgdGhhdCByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbnMgd2lsbCBoYXZlIGNvbXBsZXRlZC4KLSAqIEluICJjbGFzc2ljIFJDVSIsIHRoZXNlIHR3byBndWFyYW50ZWVzIGhhcHBlbiB0byBiZSBvbmUgYW5kCi0gKiB0aGUgc2FtZSwgYnV0IGNhbiBkaWZmZXIgaW4gcmVhbHRpbWUgUkNVIGltcGxlbWVudGF0aW9ucy4KLSAqLwotI2RlZmluZSBzeW5jaHJvbml6ZV9zY2hlZCgpIF9fc3luY2hyb25pemVfc2NoZWQoKQotCi0vKioKICAqIGNhbGxfcmN1IC0gUXVldWUgYW4gUkNVIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgogICogQGhlYWQ6IHN0cnVjdHVyZSB0byBiZSB1c2VkIGZvciBxdWV1ZWluZyB0aGUgUkNVIHVwZGF0ZXMuCiAgKiBAZnVuYzogYWN0dWFsIHVwZGF0ZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBncmFjZSBwZXJpb2QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggYTg5MzA3Ny4uMzc2ODI3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCURvY3VtZW50YXRpb24vUkNVCisgKglEb2N1bWVudGF0aW9uL1JDVQogICovCiAKICNpZm5kZWYgX19MSU5VWF9SQ1VUUkVFX0gKQEAgLTUzLDYgKzUzLDggQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCisjZGVmaW5lIF9fc3luY2hyb25pemVfc2NoZWQoKSBzeW5jaHJvbml6ZV9yY3UoKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF9yY3Uodm9pZCkKIHsKIH0KQEAgLTY4LDggKzcwLDYgQEAKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAotI2RlZmluZSBfX3N5bmNocm9uaXplX3NjaGVkKCkgc3luY2hyb25pemVfcmN1KCkKLQogZXh0ZXJuIHZvaWQgY2FsbF9yY3Vfc2NoZWQoc3RydWN0IHJjdV9oZWFkICpoZWFkLAogCQkJICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IDI3N2Y0YjkuLjQ5MGM1YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMTI1LDYgKzEyNSw4IEBACiAvKiByZWd1bGF0b3IgZ2V0IGFuZCBwdXQgKi8KIHN0cnVjdCByZWd1bGF0b3IgKl9fbXVzdF9jaGVjayByZWd1bGF0b3JfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgICBjb25zdCBjaGFyICppZCk7CitzdHJ1Y3QgcmVndWxhdG9yICpfX211c3RfY2hlY2sgcmVndWxhdG9yX2dldF9leGNsdXNpdmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmlkKTsKIHZvaWQgcmVndWxhdG9yX3B1dChzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpOwogCiAvKiByZWd1bGF0b3Igb3V0cHV0IGNvbnRyb2wgYW5kIHN0YXR1cyAqLwpAQCAtMTQ0LDYgKzE0Niw4IEBACiAKIGludCByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKTsKIGludCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgdW5zaWduZWQgc2VsZWN0b3IpOworaW50IHJlZ3VsYXRvcl9pc19zdXBwb3J0ZWRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiBpbnQgcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiBpbnQgcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcik7CiBpbnQgcmVndWxhdG9yX3NldF9jdXJyZW50X2xpbWl0KHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKaW5kZXggY2UxYmU3MC4uMzFmMjA1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKQEAgLTM3LDcgKzM3LDggQEAKICAqCiAgKiBAZW5hYmxlOiBDb25maWd1cmUgdGhlIHJlZ3VsYXRvciBhcyBlbmFibGVkLgogICogQGRpc2FibGU6IENvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIGFzIGRpc2FibGVkLgotICogQGlzX2VuYWJsZWQ6IFJldHVybiAxIGlmIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCwgMCBvdGhlcndpc2UuCisgKiBAaXNfZW5hYmxlZDogUmV0dXJuIDEgaWYgdGhlIHJlZ3VsYXRvciBpcyBlbmFibGVkLCAwIGlmIG5vdC4KKyAqCQlNYXkgYWxzbyByZXR1cm4gbmVnYXRpdmUgZXJybm8uCiAgKgogICogQHNldF92b2x0YWdlOiBTZXQgdGhlIHZvbHRhZ2UgZm9yIHRoZSByZWd1bGF0b3Igd2l0aGluIHRoZSByYW5nZSBzcGVjaWZpZWQuCiAgKiAgICAgICAgICAgICAgIFRoZSBkcml2ZXIgc2hvdWxkIHNlbGVjdCB0aGUgdm9sdGFnZSBjbG9zZXN0IHRvIG1pbl91Vi4KQEAgLTE2Miw2ICsxNjMsOCBAQAogc3RydWN0IHJlZ3VsYXRvcl9kZXYgewogCXN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYzsKIAlpbnQgdXNlX2NvdW50OworCWludCBvcGVuX2NvdW50OworCWludCBleGNsdXNpdmU7CiAKIAkvKiBsaXN0cyB3ZSBiZWxvbmcgdG8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ3VsYXRvcnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oCmluZGV4IDkxYjRkYTMuLmU5NGE0YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZml4ZWQuaApAQCAtNSw2ICs1LDkgQEAKICAqCiAgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgogICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogUm9nZXIgUXVhZHJvcyA8ZXh0LXJvZ2VyLnF1YWRyb3NAbm9raWEuY29tPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKQEAgLTE2LDkgKzE5LDMwIEBACiAKIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhOwogCisvKioKKyAqIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyAtIGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHN0cnVjdHVyZQorICogQHN1cHBseV9uYW1lOglOYW1lIG9mIHRoZSByZWd1bGF0b3Igc3VwcGx5CisgKiBAbWljcm92b2x0czoJCU91dHB1dCB2b2x0YWdlIG9mIHJlZ3VsYXRvcgorICogQGdwaW86CQlHUElPIHRvIHVzZSBmb3IgZW5hYmxlIGNvbnRyb2wKKyAqIAkJCXNldCB0byAtRUlOVkFMIGlmIG5vdCB1c2VkCisgKiBAZW5hYmxlX2hpZ2g6CVBvbGFyaXR5IG9mIGVuYWJsZSBHUElPCisgKgkJCTEgPSBBY3RpdmUgaGlnaCwgMCA9IEFjdGl2ZSBsb3cKKyAqIEBlbmFibGVkX2F0X2Jvb3Q6CVdoZXRoZXIgcmVndWxhdG9yIGhhcyBiZWVuIGVuYWJsZWQgYXQKKyAqIAkJCWJvb3Qgb3Igbm90LiAxID0gWWVzLCAwID0gTm8KKyAqIAkJCVRoaXMgaXMgdXNlZCB0byBrZWVwIHRoZSByZWd1bGF0b3IgYXQKKyAqIAkJCXRoZSBkZWZhdWx0IHN0YXRlCisgKiBAaW5pdF9kYXRhOgkJcmVndWxhdG9yX2luaXRfZGF0YQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGZpeGVkIHZvbHRhZ2UgcmVndWxhdG9yIGNvbmZpZ3VyYXRpb24KKyAqIGluZm9ybWF0aW9uIHRoYXQgbXVzdCBiZSBwYXNzZWQgYnkgcGxhdGZvcm0gY29kZSB0byB0aGUgZml4ZWQKKyAqIHZvbHRhZ2UgcmVndWxhdG9yIGRyaXZlci4KKyAqLwogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHsKIAljb25zdCBjaGFyICpzdXBwbHlfbmFtZTsKIAlpbnQgbWljcm92b2x0czsKKwlpbnQgZ3BpbzsKKwl1bnNpZ25lZCBlbmFibGVfaGlnaDoxOworCXVuc2lnbmVkIGVuYWJsZWRfYXRfYm9vdDoxOwogCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKaW5kZXggYmFjNjRmYS4uODdmNWYxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBSRUdVTEFUT1JfQ0hBTkdFX0RSTVMJCTB4MTAKIAogLyoqCi0gKiBzdHJ1Y3QgcmVndWxhdG9yX3N0YXRlIC0gcmVndWxhdG9yIHN0YXRlIGR1cmluZyBsb3cgcG93ZXIgc3lhdGVtIHN0YXRlcworICogc3RydWN0IHJlZ3VsYXRvcl9zdGF0ZSAtIHJlZ3VsYXRvciBzdGF0ZSBkdXJpbmcgbG93IHBvd2VyIHN5c3RlbSBzdGF0ZXMKICAqCiAgKiBUaGlzIGRlc2NyaWJlcyBhIHJlZ3VsYXRvcnMgc3RhdGUgZHVyaW5nIGEgc3lzdGVtIHdpZGUgbG93IHBvd2VyIHN0YXRlLgogICoKQEAgLTExNywyNSArMTE3LDM3IEBACiAJLyogbW9kZSB0byBzZXQgb24gc3RhcnR1cCAqLwogCXVuc2lnbmVkIGludCBpbml0aWFsX21vZGU7CiAKLQkvKiBjb25zdHJpYW50IGZsYWdzICovCisJLyogY29uc3RyYWludCBmbGFncyAqLwogCXVuc2lnbmVkIGFsd2F5c19vbjoxOwkvKiByZWd1bGF0b3IgbmV2ZXIgb2ZmIHdoZW4gc3lzdGVtIGlzIG9uICovCiAJdW5zaWduZWQgYm9vdF9vbjoxOwkvKiBib290bG9hZGVyL2Zpcm13YXJlIGVuYWJsZWQgcmVndWxhdG9yICovCi0JdW5zaWduZWQgYXBwbHlfdVY6MTsJLyogYXBwbHkgdVYgY29uc3RyYWludCBpZmYgbWluID09IG1heCAqLworCXVuc2lnbmVkIGFwcGx5X3VWOjE7CS8qIGFwcGx5IHVWIGNvbnN0cmFpbnQgaWYgbWluID09IG1heCAqLwogfTsKIAogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSAtIHN1cHBseSAtPiBkZXZpY2UgbWFwcGluZwogICoKLSAqIFRoaXMgbWFwcyBhIHN1cHBseSBuYW1lIHRvIGEgZGV2aWNlLgorICogVGhpcyBtYXBzIGEgc3VwcGx5IG5hbWUgdG8gYSBkZXZpY2UuICBPbmx5IG9uZSBvZiBkZXYgb3IgZGV2X25hbWUKKyAqIGNhbiBiZSBzcGVjaWZpZWQuICBVc2Ugb2YgZGV2X25hbWUgYWxsb3dzIHN1cHBvcnQgZm9yIGJ1c2VzIHdoaWNoCisgKiBtYWtlIHN0cnVjdCBkZXZpY2UgYXZhaWxhYmxlIGxhdGUgc3VjaCBhcyBJMkMgYW5kIGlzIHRoZSBwcmVmZXJyZWQKKyAqIGZvcm0uCiAgKgogICogQGRldjogRGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGNvbnN1bWVyLgorICogQGRldl9uYW1lOiBSZXN1bHQgb2YgZGV2X25hbWUoKSBmb3IgdGhlIGNvbnN1bWVyLgogICogQHN1cHBseTogTmFtZSBmb3IgdGhlIHN1cHBseS4KICAqLwogc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgewogCXN0cnVjdCBkZXZpY2UgKmRldjsJLyogY29uc3VtZXIgKi8KKwljb25zdCBjaGFyICpkZXZfbmFtZTsgICAvKiBkZXZfbmFtZSgpIGZvciBjb25zdW1lciAqLwogCWNvbnN0IGNoYXIgKnN1cHBseTsJLyogY29uc3VtZXIgc3VwcGx5IC0gZS5nLiAidmNjIiAqLwogfTsKIAorLyogSW5pdGlhbGl6ZSBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSAqLworI2RlZmluZSBSRUdVTEFUT1JfU1VQUExZKF9uYW1lLCBfZGV2X25hbWUpCQkJXAorewkJCQkJCQkJXAorCS5zdXBwbHkJCT0gX25hbWUsCQkJCVwKKwkuZGV2X25hbWUJPSBfZGV2X25hbWUsCQkJCVwKK30KKwogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAtIHJlZ3VsYXRvciBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBkYXRhLgogICoKQEAgLTE2Niw2ICsxNzgsMTIgQEAKIAogaW50IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIAorI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIHZvaWQgcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHModm9pZCkKK3sKK30KKyNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21heDE1ODYuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21heDE1ODYuaAppbmRleCA0NDU2MzE5Li5kZTlhN2ZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYXgxNTg2LmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWF4MTU4Ni5oCkBAIC0zNiw3ICszNiw3IEBACiAgKiBtYXgxNTg2X3N1YmRldl9kYXRhIC0gcmVndWxhdG9yIGRhdGEKICAqIEBpZDogcmVndWxhdG9yIElkIChlaXRoZXIgTUFYMTU4Nl9WMyBvciBNQVgxNTg2X1Y2KQogICogQG5hbWU6IHJlZ3VsYXRvciBjdXRlIG5hbWUgKGV4YW1wbGUgZm9yIFYzOiAidmNjX2NvcmUiKQotICogQHBsYXRmb3JtX2RhdGE6IHJlZ3VsYXRvciBpbml0IGRhdGEgKGNvbnRyYWludHMsIHN1cHBsaWVzLCAuLi4pCisgKiBAcGxhdGZvcm1fZGF0YTogcmVndWxhdG9yIGluaXQgZGF0YSAoY29uc3RyYWludHMsIHN1cHBsaWVzLCAuLi4pCiAgKi8KIHN0cnVjdCBtYXgxNTg2X3N1YmRldl9kYXRhIHsKIAlpbnQJCQkJaWQ7CkBAIC00Niw3ICs0Niw3IEBACiAKIC8qKgogICogbWF4MTU4Nl9wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gZGF0YSBmb3IgbWF4MTU4NgotICogQG51bV9zdWJkZXZzOiBudW1iZXIgb2YgcmVndWx0b3JzIHVzZWQgKG1heSBiZSAxIG9yIDIpCisgKiBAbnVtX3N1YmRldnM6IG51bWJlciBvZiByZWd1bGF0b3JzIHVzZWQgKG1heSBiZSAxIG9yIDIpCiAgKiBAc3ViZGV2czogcmVndWxhdG9yIHVzZWQKICAqICAgICAgICAgICBBdCBtb3N0LCB0aGVyZSB3aWxsIGJlIGEgcmVndWxhdG9yIGZvciBWMyBhbmQgb25lIGZvciBWNiB2b2x0YWdlcy4KICAqIEB2M19nYWluOiBnYWluIG9uIHRoZSBWMyB2b2x0YWdlIG91dHB1dCBtdWx0aXBsaWVkIGJ5IDFlNi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggYmYxMTZkMC4uNDc3ODQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTcxLDE0ICs3MSwxMCBAQAogdm9pZCBwYWdlX2FkZF9maWxlX3JtYXAoc3RydWN0IHBhZ2UgKik7CiB2b2lkIHBhZ2VfcmVtb3ZlX3JtYXAoc3RydWN0IHBhZ2UgKik7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfVk0KLXZvaWQgcGFnZV9kdXBfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZHVwX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9kdXBfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlhdG9taWNfaW5jKCZwYWdlLT5fbWFwY291bnQpOwogfQotI2VuZGlmCiAKIC8qCiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhhZjNkMjQuLmNiZjJhM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogc3RydWN0IGJpbzsKIHN0cnVjdCBmc19zdHJ1Y3Q7CiBzdHJ1Y3QgYnRzX2NvbnRleHQ7Ci1zdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQ7CitzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0OwogCiAvKgogICogTGlzdCBvZiBmbGFncyB3ZSB3YW50IHRvIHNoYXJlIGZvciBrZXJuZWwgdGhyZWFkcywKQEAgLTE0MCw2ICsxNDAsMTAgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5yX3J1bm5pbmcodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl91bmludGVycnVwdGlibGUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl9pb3dhaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBucl9pb3dhaXRfY3B1KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhpc19jcHVfbG9hZCh2b2lkKTsKKworCiBleHRlcm4gdm9pZCBjYWxjX2dsb2JhbF9sb2FkKHZvaWQpOwogZXh0ZXJuIHU2NCBjcHVfbnJfbWlncmF0aW9ucyhpbnQgY3B1KTsKIApAQCAtMjU3LDcgKzI2MSw3IEBACiBleHRlcm4gdm9pZCBpbml0X2lkbGUoc3RydWN0IHRhc2tfc3RydWN0ICppZGxlLCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGluaXRfaWRsZV9ib290dXBfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpOwogCi1leHRlcm4gaW50IHJ1bnF1ZXVlX2lzX2xvY2tlZCh2b2lkKTsKK2V4dGVybiBpbnQgcnVucXVldWVfaXNfbG9ja2VkKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgdGFza19ycV91bmxvY2tfd2FpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiBleHRlcm4gY3B1bWFza192YXJfdCBub2h6X2NwdV9tYXNrOwpAQCAtNDIyLDYgKzQyNiwxNSBAQAogCXJldHVybiBtYXgobW0tPmhpd2F0ZXJfcnNzLCBnZXRfbW1fcnNzKG1tKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRtYXhfbW1faGl3YXRlcl9yc3ModW5zaWduZWQgbG9uZyAqbWF4cnNzLAorCQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzcyA9IGdldF9tbV9oaXdhdGVyX3JzcyhtbSk7CisKKwlpZiAoKm1heHJzcyA8IGhpd2F0ZXJfcnNzKQorCQkqbWF4cnNzID0gaGl3YXRlcl9yc3M7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbW1faGl3YXRlcl92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3ZtLCBtbS0+dG90YWxfdm0pOwpAQCAtNDM0LDcgKzQ0Nyw5IEBACiAvKiBkdW1wYWJsZSBiaXRzICovCiAjZGVmaW5lIE1NRl9EVU1QQUJMRSAgICAgIDAgIC8qIGNvcmUgZHVtcCBpcyBwZXJtaXR0ZWQgKi8KICNkZWZpbmUgTU1GX0RVTVBfU0VDVVJFTFkgMSAgLyogY29yZSBmaWxlIGlzIHJlYWRhYmxlIG9ubHkgYnkgcm9vdCAqLworCiAjZGVmaW5lIE1NRl9EVU1QQUJMRV9CSVRTIDIKKyNkZWZpbmUgTU1GX0RVTVBBQkxFX01BU0sgKCgxIDw8IE1NRl9EVU1QQUJMRV9CSVRTKSAtIDEpCiAKIC8qIGNvcmVkdW1wIGZpbHRlciBiaXRzICovCiAjZGVmaW5lIE1NRl9EVU1QX0FOT05fUFJJVkFURQkyCkBAIC00NDQsNiArNDU5LDcgQEAKICNkZWZpbmUgTU1GX0RVTVBfRUxGX0hFQURFUlMJNgogI2RlZmluZSBNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUgNwogI2RlZmluZSBNTUZfRFVNUF9IVUdFVExCX1NIQVJFRCAgOAorCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVAlNTUZfRFVNUEFCTEVfQklUUwogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk3CiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFwKQEAgLTQ1Nyw2ICs0NzMsMTAgQEAKICNlbHNlCiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGCTAKICNlbmRpZgorCQkJCQkvKiBsZWF2ZSByb29tIGZvciBtb3JlIGR1bXAgZmxhZ3MgKi8KKyNkZWZpbmUgTU1GX1ZNX01FUkdFQUJMRQkxNgkvKiBLU00gbWF5IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLworCisjZGVmaW5lIE1NRl9JTklUX01BU0sJCShNTUZfRFVNUEFCTEVfTUFTSyB8IE1NRl9EVU1QX0ZJTFRFUl9NQVNLKQogCiBzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgewogCWF0b21pY190CQljb3VudDsKQEAgLTQ3Myw2ICs0OTMsMTMgQEAKIAl1bnNpZ25lZCBsb25nCQlhY19taW5mbHQsIGFjX21hamZsdDsKIH07CiAKK3N0cnVjdCBjcHVfaXRpbWVyIHsKKwljcHV0aW1lX3QgZXhwaXJlczsKKwljcHV0aW1lX3QgaW5jcjsKKwl1MzIgZXJyb3I7CisJdTMyIGluY3JfZXJyb3I7Cit9OworCiAvKioKICAqIHN0cnVjdCB0YXNrX2NwdXRpbWUgLSBjb2xsZWN0ZWQgQ1BVIHRpbWUgY291bnRzCiAgKiBAdXRpbWU6CQl0aW1lIHNwZW50IGluIHVzZXIgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cwpAQCAtNTY3LDkgKzU5NCwxMiBAQAogCXN0cnVjdCBwaWQgKmxlYWRlcl9waWQ7CiAJa3RpbWVfdCBpdF9yZWFsX2luY3I7CiAKLQkvKiBJVElNRVJfUFJPRiBhbmQgSVRJTUVSX1ZJUlRVQUwgdGltZXJzIGZvciB0aGUgcHJvY2VzcyAqLwotCWNwdXRpbWVfdCBpdF9wcm9mX2V4cGlyZXMsIGl0X3ZpcnRfZXhwaXJlczsKLQljcHV0aW1lX3QgaXRfcHJvZl9pbmNyLCBpdF92aXJ0X2luY3I7CisJLyoKKwkgKiBJVElNRVJfUFJPRiBhbmQgSVRJTUVSX1ZJUlRVQUwgdGltZXJzIGZvciB0aGUgcHJvY2Vzcywgd2UgdXNlCisJICogQ1BVQ0xPQ0tfUFJPRiBhbmQgQ1BVQ0xPQ0tfVklSVCBmb3IgaW5kZXhpbmcgYXJyYXkgYXMgdGhlc2UKKwkgKiB2YWx1ZXMgYXJlIGRlZmluZWQgdG8gMCBhbmQgMSByZXNwZWN0aXZlbHkKKwkgKi8KKwlzdHJ1Y3QgY3B1X2l0aW1lciBpdFsyXTsKIAogCS8qCiAJICogVGhyZWFkIGdyb3VwIHRvdGFscyBmb3IgcHJvY2VzcyBDUFUgdGltZXJzLgpAQCAtNjAxLDYgKzYzMSw3IEBACiAJdW5zaWduZWQgbG9uZyBudmNzdywgbml2Y3N3LCBjbnZjc3csIGNuaXZjc3c7CiAJdW5zaWduZWQgbG9uZyBtaW5fZmx0LCBtYWpfZmx0LCBjbWluX2ZsdCwgY21hal9mbHQ7CiAJdW5zaWduZWQgbG9uZyBpbmJsb2NrLCBvdWJsb2NrLCBjaW5ibG9jaywgY291YmxvY2s7CisJdW5zaWduZWQgbG9uZyBtYXhyc3MsIGNtYXhyc3M7CiAJc3RydWN0IHRhc2tfaW9fYWNjb3VudGluZyBpb2FjOwogCiAJLyoKQEAgLTYzMiw2ICs2NjMsOCBAQAogCXVuc2lnbmVkIGF1ZGl0X3R0eTsKIAlzdHJ1Y3QgdHR5X2F1ZGl0X2J1ZiAqdHR5X2F1ZGl0X2J1ZjsKICNlbmRpZgorCisJaW50IG9vbV9hZGo7CS8qIE9PTSBraWxsIHNjb3JlIGFkanVzdG1lbnQgKGJpdCBzaGlmdCkgKi8KIH07CiAKIC8qIENvbnRleHQgc3dpdGNoIG11c3QgYmUgdW5sb2NrZWQgaWYgaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZCAqLwpAQCAtNzAxLDcgKzczNCw3IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlhdG9taWNfbG9uZ190IGxvY2tlZF92bTsKICNlbmRpZgogfTsKQEAgLTEwNzUsNiArMTEwOCw4IEBACiAJdm9pZCAoKnByaW9fY2hhbmdlZCkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJICAgICBpbnQgb2xkcHJpbywgaW50IHJ1bm5pbmcpOwogCisJdW5zaWduZWQgaW50ICgqZ2V0X3JyX2ludGVydmFsKSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJdm9pZCAoKm1vdmVkX2dyb3VwKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKICNlbmRpZgpAQCAtMTIxMiw3ICsxMjQ3LDYgQEAKIAkgKiBhIHNob3J0IHRpbWUKIAkgKi8KIAl1bnNpZ25lZCBjaGFyIGZwdV9jb3VudGVyOwotCXM4IG9vbWtpbGxhZGo7IC8qIE9PTSBraWxsIHNjb3JlIGFkanVzdG1lbnQgKGJpdCBzaGlmdCkuICovCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UKIAl1bnNpZ25lZCBpbnQgYnRyYWNlX3NlcTsKICNlbmRpZgpAQCAtMTQ0OSwxMCArMTQ4MywxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcGlfc3RhdGVfbGlzdDsKIAlzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKnBpX3N0YXRlX2NhY2hlOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKnBlcmZfY291bnRlcl9jdHhwOwotCXN0cnVjdCBtdXRleCBwZXJmX2NvdW50ZXJfbXV0ZXg7Ci0Jc3RydWN0IGxpc3RfaGVhZCBwZXJmX2NvdW50ZXJfbGlzdDsKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwZXJmX2V2ZW50X2N0eHA7CisJc3RydWN0IG11dGV4IHBlcmZfZXZlbnRfbXV0ZXg7CisJc3RydWN0IGxpc3RfaGVhZCBwZXJmX2V2ZW50X2xpc3Q7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTlVNQQogCXN0cnVjdCBtZW1wb2xpY3kgKm1lbXBvbGljeTsJLyogUHJvdGVjdGVkIGJ5IGFsbG9jX2xvY2sgKi8KQEAgLTE1MDUsNiArMTUzOSw3IEBACiAJLyogYml0bWFzayBvZiB0cmFjZSByZWN1cnNpb24gKi8KIAl1bnNpZ25lZCBsb25nIHRyYWNlX3JlY3Vyc2lvbjsKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLworCXVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQ7CiB9OwogCiAvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLwpAQCAtMTcxMSw3ICsxNzQ2LDcgQEAKICNkZWZpbmUgUEZfRlJPWkVOCTB4MDAwMTAwMDAJLyogZnJvemVuIGZvciBzeXN0ZW0gc3VzcGVuZCAqLwogI2RlZmluZSBQRl9GU1RSQU5TCTB4MDAwMjAwMDAJLyogaW5zaWRlIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiAqLwogI2RlZmluZSBQRl9LU1dBUEQJMHgwMDA0MDAwMAkvKiBJIGFtIGtzd2FwZCAqLwotI2RlZmluZSBQRl9TV0FQT0ZGCTB4MDAwODAwMDAJLyogSSBhbSBpbiBzd2Fwb2ZmICovCisjZGVmaW5lIFBGX09PTV9PUklHSU4JMHgwMDA4MDAwMAkvKiBBbGxvY2F0aW5nIG11Y2ggbWVtb3J5IHRvIG90aGVycyAqLwogI2RlZmluZSBQRl9MRVNTX1RIUk9UVExFIDB4MDAxMDAwMDAJLyogVGhyb3R0bGUgbWUgbGVzczogSSBjbGVhbiBtZW1vcnkgKi8KICNkZWZpbmUgUEZfS1RIUkVBRAkweDAwMjAwMDAwCS8qIEkgYW0gYSBrZXJuZWwgdGhyZWFkICovCiAjZGVmaW5lIFBGX1JBTkRPTUlaRQkweDAwNDAwMDAwCS8qIHJhbmRvbWl6ZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKi8KQEAgLTE3NTMsNyArMTc4OCw2IEBACiAKICNkZWZpbmUgUkNVX1JFQURfVU5MT0NLX0JMT0NLRUQgKDEgPDwgMCkgLyogYmxvY2tlZCB3aGlsZSBpbiBSQ1UgcmVhZC1zaWRlLiAqLwogI2RlZmluZSBSQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUyAoMSA8PCAxKSAvKiBSQ1UgY29yZSBuZWVkcyBDUFUgcmVzcG9uc2UuICovCi0jZGVmaW5lIFJDVV9SRUFEX1VOTE9DS19HT1RfUVMgICgxIDw8IDIpIC8qIENQVSBoYXMgcmVzcG9uZGVkIHRvIFJDVSBjb3JlLiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2NvcHlfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWwuaAppbmRleCBlNWJiNzVhLi5jODYxM2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsLmgKQEAgLTEyMiw2ICsxMjIsNyBAQAogCiAvKiBJbnRlcm5hbCBmbGFncyB1c2VkIG9ubHkgYnkga2VybmVsICovCiAjZGVmaW5lIEFTWU5DQl9JTklUSUFMSVpFRAkzMSAvKiBTZXJpYWwgcG9ydCB3YXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQVNZTkNCX1NVU1BFTkRFRAkzMCAvKiBTZXJpYWwgcG9ydCBpcyBzdXNwZW5kZWQgKi8KICNkZWZpbmUgQVNZTkNCX05PUk1BTF9BQ1RJVkUJMjkgLyogTm9ybWFsIGRldmljZSBpcyBhY3RpdmUgKi8KICNkZWZpbmUgQVNZTkNCX0JPT1RfQVVUT0NPTkYJMjggLyogQXV0b2NvbmZpZ3VyZSBwb3J0IG9uIGJvb3R1cCAqLwogI2RlZmluZSBBU1lOQ0JfQ0xPU0lORwkJMjcgLyogU2VyaWFsIHBvcnQgaXMgY2xvc2luZyAqLwpAQCAtMTMzLDYgKzEzNCw3IEBACiAjZGVmaW5lIEFTWU5DQl9GSVJTVF9LRVJORUwJMjIKIAogI2RlZmluZSBBU1lOQ19IVVBfTk9USUZZCSgxVSA8PCBBU1lOQ0JfSFVQX05PVElGWSkKKyNkZWZpbmUgQVNZTkNfU1VTUEVOREVECQkoMVUgPDwgQVNZTkNCX1NVU1BFTkRFRCkKICNkZWZpbmUgQVNZTkNfRk9VUlBPUlQJCSgxVSA8PCBBU1lOQ0JfRk9VUlBPUlQpCiAjZGVmaW5lIEFTWU5DX1NBSwkJKDFVIDw8IEFTWU5DQl9TQUspCiAjZGVmaW5lIEFTWU5DX1NQTElUX1RFUk1JT1MJKDFVIDw8IEFTWU5DQl9TUExJVF9URVJNSU9TKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oCmluZGV4IGQ0ZDJhNzguLmZiNDZhYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsXzgyNTAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF84MjUwLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAl2b2lkIF9faW9tZW0JKm1lbWJhc2U7CS8qIGlvcmVtYXAgY29va2llIG9yIE5VTEwgKi8KIAlyZXNvdXJjZV9zaXplX3QJbWFwYmFzZTsJLyogcmVzb3VyY2UgYmFzZSAqLwogCXVuc2lnbmVkIGludAlpcnE7CQkvKiBpbnRlcnJ1cHQgbnVtYmVyICovCisJdW5zaWduZWQgbG9uZwlpcnFmbGFnczsJLyogcmVxdWVzdF9pcnEgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQJdWFydGNsazsJLyogVUFSVCBjbG9jayByYXRlICovCiAJdm9pZCAgICAgICAgICAgICpwcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhcglyZWdzaGlmdDsJLyogcmVnaXN0ZXIgc2hpZnQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCAyM2QyZmIwLi5mZTY2MWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0yMCw2ICsyMCw4IEBACiAjaWZuZGVmIExJTlVYX1NFUklBTF9DT1JFX0gKICNkZWZpbmUgTElOVVhfU0VSSUFMX0NPUkVfSAogCisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisKIC8qCiAgKiBUaGUgdHlwZSBkZWZpbml0aW9ucy4gIFRoZXNlIGFyZSBmcm9tIFRlZCBUcydvJ3Mgc2VyaWFsLmgKICAqLwpAQCAtMTg2LDcgKzE4OCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KIAogc3RydWN0IHVhcnRfcG9ydDsKLXN0cnVjdCB1YXJ0X2luZm87CiBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdDsKIHN0cnVjdCBkZXZpY2U7CiAKQEAgLTI2NSw2ICsyNjYsNyBAQAogCXVuc2lnbmVkIGludAkJKCpzZXJpYWxfaW4pKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50KTsKIAl2b2lkCQkJKCpzZXJpYWxfb3V0KShzdHJ1Y3QgdWFydF9wb3J0ICosIGludCwgaW50KTsKIAl1bnNpZ25lZCBpbnQJCWlycTsJCQkvKiBpcnEgbnVtYmVyICovCisJdW5zaWduZWQgbG9uZwkJaXJxZmxhZ3M7CQkvKiBpcnEgZmxhZ3MgICovCiAJdW5zaWduZWQgaW50CQl1YXJ0Y2xrOwkJLyogYmFzZSB1YXJ0IGNsb2NrICovCiAJdW5zaWduZWQgaW50CQlmaWZvc2l6ZTsJCS8qIHR4IGZpZm8gc2l6ZSAqLwogCXVuc2lnbmVkIGNoYXIJCXhfY2hhcjsJCQkvKiB4b24veG9mZiBjaGFyICovCkBAIC0yODMsNyArMjg1LDcgQEAKIAogCXVuc2lnbmVkIGludAkJcmVhZF9zdGF0dXNfbWFzazsJLyogZHJpdmVyIHNwZWNpZmljICovCiAJdW5zaWduZWQgaW50CQlpZ25vcmVfc3RhdHVzX21hc2s7CS8qIGRyaXZlciBzcGVjaWZpYyAqLwotCXN0cnVjdCB1YXJ0X2luZm8JKmluZm87CQkJLyogcG9pbnRlciB0byBwYXJlbnQgaW5mbyAqLworCXN0cnVjdCB1YXJ0X3N0YXRlCSpzdGF0ZTsJCQkvKiBwb2ludGVyIHRvIHBhcmVudCBzdGF0ZSAqLwogCXN0cnVjdCB1YXJ0X2ljb3VudAlpY291bnQ7CQkJLyogc3RhdGlzdGljcyAqLwogCiAJc3RydWN0IGNvbnNvbGUJCSpjb25zOwkJCS8qIHN0cnVjdCBjb25zb2xlLCBpZiBhbnkgKi8KQEAgLTMzNSw1MiArMzM3LDE2IEBACiB9OwogCiAvKgotICogVGhpcyBpcyB0aGUgc3RhdGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgb25seSB2YWxpZCB3aGVuIHRoZSBwb3J0Ci0gKiBpcyBvcGVuOyBpdCBtYXkgYmUgY2xlYXJlZCB0aGUgY29yZSBkcml2ZXIgb25jZSB0aGUgZGV2aWNlIGhhcwotICogYmVlbiBjbG9zZWQuICBFaXRoZXIgdGhlIGxvdyBsZXZlbCBkcml2ZXIgb3IgdGhlIGNvcmUgY2FuIG1vZGlmeQotICogc3R1ZmYgaGVyZS4KLSAqLwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlX18gdWlmX3Q7Ci0KLXN0cnVjdCB1YXJ0X2luZm8gewotCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKLQlzdHJ1Y3QgY2lyY19idWYJCXhtaXQ7Ci0JdWlmX3QJCQlmbGFnczsKLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBpbmZvLT5mbGFncy4gIFRoZXNlIGFyZSBfcHJpdmF0ZV8gdG8gc2VyaWFsX2NvcmUsIGFuZAotICogYXJlIHNwZWNpZmljIHRvIHRoaXMgc3RydWN0dXJlLiAgVGhleSBtYXkgYmUgcXVlcmllZCBieSBsb3cgbGV2ZWwgZHJpdmVycy4KLSAqCi0gKiBGSVhNRTogdXNlIHRoZSBBU1lfIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgVUlGX0NIRUNLX0NECQkoKF9fZm9yY2UgdWlmX3QpICgxIDw8IDI1KSkKLSNkZWZpbmUgVUlGX0NUU19GTE9XCQkoKF9fZm9yY2UgdWlmX3QpICgxIDw8IDI2KSkKLSNkZWZpbmUgVUlGX05PUk1BTF9BQ1RJVkUJKChfX2ZvcmNlIHVpZl90KSAoMSA8PCAyOSkpCi0jZGVmaW5lIFVJRl9JTklUSUFMSVpFRAkJKChfX2ZvcmNlIHVpZl90KSAoMSA8PCAzMSkpCi0jZGVmaW5lIFVJRl9TVVNQRU5ERUQJCSgoX19mb3JjZSB1aWZfdCkgKDEgPDwgMzApKQotCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXRsZXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7Ci19OwotCi0vKgogICogVGhpcyBpcyB0aGUgc3RhdGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgcGVyc2lzdGVudCBhY3Jvc3Mgb3BlbnMuCi0gKiBUaGUgbG93IGxldmVsIGRyaXZlciBtdXN0IG5vdCB0byB0b3VjaCBhbnkgZWxlbWVudHMgY29udGFpbmVkCi0gKiB3aXRoaW4uCiAgKi8KIHN0cnVjdCB1YXJ0X3N0YXRlIHsKLQl1bnNpZ25lZCBpbnQJCWNsb3NlX2RlbGF5OwkJLyogbXNlYyAqLwotCXVuc2lnbmVkIGludAkJY2xvc2luZ193YWl0OwkJLyogbXNlYyAqLworCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKIAotI2RlZmluZSBVU0ZfQ0xPU0lOR19XQUlUX0lORgkoMCkKLSNkZWZpbmUgVVNGX0NMT1NJTkdfV0FJVF9OT05FCSh+MFUpCi0KLQlpbnQJCQljb3VudDsKIAlpbnQJCQlwbV9zdGF0ZTsKLQlzdHJ1Y3QgdWFydF9pbmZvCWluZm87Ci0Jc3RydWN0IHVhcnRfcG9ydAkqcG9ydDsKKwlzdHJ1Y3QgY2lyY19idWYJCXhtaXQ7CiAKLQlzdHJ1Y3QgbXV0ZXgJCW11dGV4OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0bGV0OworCXN0cnVjdCB1YXJ0X3BvcnQJKnVhcnRfcG9ydDsKIH07CiAKICNkZWZpbmUgVUFSVF9YTUlUX1NJWkUJUEFHRV9TSVpFCkBAIC00NjEsNyArNDI3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdWFydF90eF9zdG9wcGVkKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJaWYodHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC00NzYsNyArNDQyLDcgQEAKICNpZmRlZiBTVVBQT1JUX1NZU1JRCiAJaWYgKHBvcnQtPnN5c3JxKSB7CiAJCWlmIChjaCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBwb3J0LT5zeXNycSkpIHsKLQkJCWhhbmRsZV9zeXNycShjaCwgcG9ydC0+aW5mby0+cG9ydC50dHkpOworCQkJaGFuZGxlX3N5c3JxKGNoLCBwb3J0LT5zdGF0ZS0+cG9ydC50dHkpOwogCQkJcG9ydC0+c3lzcnEgPSAwOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTQ5NCw3ICs0NjAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCB1YXJ0X2hhbmRsZV9icmVhayhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSBwb3J0LT5pbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHBvcnQtPnN0YXRlOwogI2lmZGVmIFNVUFBPUlRfU1lTUlEKIAlpZiAocG9ydC0+Y29ucyAmJiBwb3J0LT5jb25zLT5pbmRleCA9PSBwb3J0LT5saW5lKSB7CiAJCWlmICghcG9ydC0+c3lzcnEpIHsKQEAgLTUwNSw1OSArNDcxLDYwIEBACiAJfQogI2VuZGlmCiAJaWYgKHBvcnQtPmZsYWdzICYgVVBGX1NBSykKLQkJZG9fU0FLKGluZm8tPnBvcnQudHR5KTsKKwkJZG9fU0FLKHN0YXRlLT5wb3J0LnR0eSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgogICoJdWFydF9oYW5kbGVfZGNkX2NoYW5nZSAtIGhhbmRsZSBhIGNoYW5nZSBvZiBjYXJyaWVyIGRldGVjdCBzdGF0ZQotICoJQHBvcnQ6IHVhcnRfcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoZSBvcGVuIHBvcnQKKyAqCUB1cG9ydDogdWFydF9wb3J0IHN0cnVjdHVyZSBmb3IgdGhlIG9wZW4gcG9ydAogICoJQHN0YXR1czogbmV3IGNhcnJpZXIgZGV0ZWN0IHN0YXR1cywgbm9uemVybyBpZiBhY3RpdmUKICAqLwogc3RhdGljIGlubGluZSB2b2lkCi11YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBzdGF0dXMpCit1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQogewotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSBwb3J0LT5pbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHVwb3J0LT5zdGF0ZTsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAKLQlwb3J0LT5pY291bnQuZGNkKys7CisJdXBvcnQtPmljb3VudC5kY2QrKzsKIAogI2lmZGVmIENPTkZJR19IQVJEX1BQUwotCWlmICgocG9ydC0+ZmxhZ3MgJiBVUEZfSEFSRFBQU19DRCkgJiYgc3RhdHVzKQorCWlmICgodXBvcnQtPmZsYWdzICYgVVBGX0hBUkRQUFNfQ0QpICYmIHN0YXR1cykKIAkJaGFyZHBwcygpOwogI2VuZGlmCiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBVSUZfQ0hFQ0tfQ0QpIHsKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgewogCQlpZiAoc3RhdHVzKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7Ci0JCWVsc2UgaWYgKGluZm8tPnBvcnQudHR5KQotCQkJdHR5X2hhbmd1cChpbmZvLT5wb3J0LnR0eSk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJCWVsc2UgaWYgKHBvcnQtPnR0eSkKKwkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKIAl9CiB9CiAKIC8qKgogICoJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSAtIGhhbmRsZSBhIGNoYW5nZSBvZiBjbGVhci10by1zZW5kIHN0YXRlCi0gKglAcG9ydDogdWFydF9wb3J0IHN0cnVjdHVyZSBmb3IgdGhlIG9wZW4gcG9ydAorICoJQHVwb3J0OiB1YXJ0X3BvcnQgc3RydWN0dXJlIGZvciB0aGUgb3BlbiBwb3J0CiAgKglAc3RhdHVzOiBuZXcgY2xlYXIgdG8gc2VuZCBzdGF0dXMsIG5vbnplcm8gaWYgYWN0aXZlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdWFydF9oYW5kbGVfY3RzX2NoYW5nZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQordWFydF9oYW5kbGVfY3RzX2NoYW5nZShzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCwgdW5zaWduZWQgaW50IHN0YXR1cykKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gcG9ydC0+aW5mbzsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnVwb3J0LT5zdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwogCi0JcG9ydC0+aWNvdW50LmN0cysrOworCXVwb3J0LT5pY291bnQuY3RzKys7CiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBVSUZfQ1RTX0ZMT1cpIHsKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgewogCQlpZiAodHR5LT5od19zdG9wcGVkKSB7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJdHR5LT5od19zdG9wcGVkID0gMDsKLQkJCQlwb3J0LT5vcHMtPnN0YXJ0X3R4KHBvcnQpOwotCQkJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCQkJCXVwb3J0LT5vcHMtPnN0YXJ0X3R4KHVwb3J0KTsKKwkJCQl1YXJ0X3dyaXRlX3dha2V1cCh1cG9ydCk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIXN0YXR1cykgewogCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7Ci0JCQkJcG9ydC0+b3BzLT5zdG9wX3R4KHBvcnQpOworCQkJCXVwb3J0LT5vcHMtPnN0b3BfdHgodXBvcnQpOwogCQkJfQogCQl9CiAJfQpAQCAtNTY5LDcgKzUzNiw3IEBACiB1YXJ0X2luc2VydF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBzdGF0dXMsCiAJCSB1bnNpZ25lZCBpbnQgb3ZlcnJ1biwgdW5zaWduZWQgaW50IGNoLCB1bnNpZ25lZCBpbnQgZmxhZykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAogCWlmICgoc3RhdHVzICYgcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICYgfm92ZXJydW4pID09IDApCiAJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsYWcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZmkuaCBiL2luY2x1ZGUvbGludXgvc2ZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2Zjc2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2ZpLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qIHNmaS5oIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgKi8KKworLyoKKworICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisKKyAgR1BMIExJQ0VOU0UgU1VNTUFSWQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorCisgIEJTRCBMSUNFTlNFCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIF9MSU5VWF9TRklfSAorI2RlZmluZSBfTElOVVhfU0ZJX0gKKworLyogVGFibGUgc2lnbmF0dXJlcyByZXNlcnZlZCBieSB0aGUgU0ZJIHNwZWNpZmljYXRpb24gKi8KKyNkZWZpbmUgU0ZJX1NJR19TWVNUCQkiU1lTVCIKKyNkZWZpbmUgU0ZJX1NJR19GUkVRCQkiRlJFUSIKKyNkZWZpbmUgU0ZJX1NJR19JRExFCQkiSURMRSIKKyNkZWZpbmUgU0ZJX1NJR19DUFVTCQkiQ1BVUyIKKyNkZWZpbmUgU0ZJX1NJR19NVE1SCQkiTVRNUiIKKyNkZWZpbmUgU0ZJX1NJR19NUlRDCQkiTVJUQyIKKyNkZWZpbmUgU0ZJX1NJR19NTUFQCQkiTU1BUCIKKyNkZWZpbmUgU0ZJX1NJR19BUElDCQkiQVBJQyIKKyNkZWZpbmUgU0ZJX1NJR19YU0RUCQkiWFNEVCIKKyNkZWZpbmUgU0ZJX1NJR19XQUtFCQkiV0FLRSIKKyNkZWZpbmUgU0ZJX1NJR19TUElCCQkiU1BJQiIKKyNkZWZpbmUgU0ZJX1NJR19JMkNCCQkiSTJDQiIKKyNkZWZpbmUgU0ZJX1NJR19HUEVNCQkiR1BFTSIKKworI2RlZmluZSBTRklfU0lHTkFUVVJFX1NJWkUJNAorI2RlZmluZSBTRklfT0VNX0lEX1NJWkUJCTYKKyNkZWZpbmUgU0ZJX09FTV9UQUJMRV9JRF9TSVpFCTgKKworI2RlZmluZSBTRklfU1lTVF9TRUFSQ0hfQkVHSU4JCTB4MDAwRTAwMDAKKyNkZWZpbmUgU0ZJX1NZU1RfU0VBUkNIX0VORAkJMHgwMDBGRkZGRgorCisjZGVmaW5lIFNGSV9HRVRfTlVNX0VOVFJJRVMocHRhYmxlLCBlbnRyeV90eXBlKSBcCisJKChwdGFibGUtPmhlYWRlci5sZW4gLSBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIpKSAvIFwKKwkoc2l6ZW9mKGVudHJ5X3R5cGUpKSkKKy8qCisgKiBUYWJsZSBzdHJ1Y3R1cmVzIG11c3QgYmUgYnl0ZS1wYWNrZWQgdG8gbWF0Y2ggdGhlIFNGSSBzcGVjaWZpY2F0aW9uLAorICogYXMgdGhleSBhcmUgcHJvdmlkZWQgYnkgdGhlIEJJT1MuCisgKi8KK3N0cnVjdCBzZmlfdGFibGVfaGVhZGVyIHsKKwljaGFyCXNpZ1tTRklfU0lHTkFUVVJFX1NJWkVdOworCXUzMglsZW47CisJdTgJcmV2OworCXU4CWNzdW07CisJY2hhcglvZW1faWRbU0ZJX09FTV9JRF9TSVpFXTsKKwljaGFyCW9lbV90YWJsZV9pZFtTRklfT0VNX1RBQkxFX0lEX1NJWkVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV90YWJsZV9zaW1wbGUgeworCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyCQloZWFkZXI7CisJdTY0CQkJCXBlbnRyeVsxXTsKK30gX19wYWNrZWQ7CisKKy8qIENvbXBseSB3aXRoIFVFRkkgc3BlYyAyLjEgKi8KK3N0cnVjdCBzZmlfbWVtX2VudHJ5IHsKKwl1MzIJdHlwZTsKKwl1NjQJcGh5c19zdGFydDsKKwl1NjQJdmlydF9zdGFydDsKKwl1NjQJcGFnZXM7CisJdTY0CWF0dHJpYjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzZmlfY3B1X3RhYmxlX2VudHJ5IHsKKwl1MzIJYXBpY19pZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzZmlfY3N0YXRlX3RhYmxlX2VudHJ5IHsKKwl1MzIJaGludDsJCS8qIE1XQUlUIGhpbnQgKi8KKwl1MzIJbGF0ZW5jeTsJLyogbGF0ZW5jeSBpbiBtcyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV9hcGljX3RhYmxlX2VudHJ5IHsKKwl1NjQJcGh5c19hZGRyOwkvKiBwaHkgYmFzZSBhZGRyIGZvciBBUElDIHJlZyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV9mcmVxX3RhYmxlX2VudHJ5IHsKKwl1MzIJZnJlcV9taHo7CS8qIGluIE1IWiAqLworCXUzMglsYXRlbmN5OwkvKiB0cmFuc2l0aW9uIGxhdGVuY3kgaW4gbXMgKi8KKwl1MzIJY3RybF92YWw7CS8qIHZhbHVlIHRvIHdyaXRlIHRvIFBFUkZfQ1RMICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX3dha2VfdGFibGVfZW50cnkgeworCXU2NAlwaHlzX2FkZHI7CS8qIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHdha2UgdmVjdG9yIGxvY2F0ZXMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgeworCXU2NAlwaHlzX2FkZHI7CS8qIHBoeSBiYXNlIGFkZHIgZm9yIHRoZSB0aW1lciAqLworCXUzMglmcmVxX2h6OwkvKiBpbiBIWiAqLworCXUzMglpcnE7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSB7CisJdTY0CXBoeXNfYWRkcjsJLyogcGh5IGJhc2UgYWRkciBmb3IgdGhlIFJUQyAqLworCXUzMglpcnE7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX3NwaV90YWJsZV9lbnRyeSB7CisJdTE2CWhvc3RfbnVtOwkvKiBhdHRhY2hlZCB0byBob3N0IDAsIDEuLi4qLworCXUxNgljczsJCS8qIGNoaXAgc2VsZWN0ICovCisJdTE2CWlycV9pbmZvOworCWNoYXIJbmFtZVsxNl07CisJdTgJZGV2X2luZm9bMTBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV9pMmNfdGFibGVfZW50cnkgeworCXUxNglob3N0X251bTsKKwl1MTYJYWRkcjsJCS8qIHNsYXZlIGFkZHIgKi8KKwl1MTYJaXJxX2luZm87CisJY2hhcgluYW1lWzE2XTsKKwl1OAlkZXZfaW5mb1sxMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX2dwZV90YWJsZV9lbnRyeSB7CisJdTE2CWxvZ2ljYWxfaWQ7CS8qIGxvZ2ljYWwgaWQgKi8KKwl1MTYJcGh5c19pZDsJLyogcGh5c2ljYWwgR1BFIGlkICovCit9IF9fcGFja2VkOworCisKK3R5cGVkZWYgaW50ICgqc2ZpX3RhYmxlX2hhbmRsZXIpIChzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCisjaWZkZWYgQ09ORklHX1NGSQorZXh0ZXJuIHZvaWQgX19pbml0IHNmaV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgc2ZpX3BsYXRmb3JtX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgc2ZpX2luaXRfbGF0ZSh2b2lkKTsKK2V4dGVybiBpbnQgc2ZpX3RhYmxlX3BhcnNlKGNoYXIgKnNpZ25hdHVyZSwgY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQsCisJCQkJc2ZpX3RhYmxlX2hhbmRsZXIgaGFuZGxlcik7CisKK2V4dGVybiBpbnQgc2ZpX2Rpc2FibGVkOworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfc2ZpKHZvaWQpCit7CisJc2ZpX2Rpc2FibGVkID0gMTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19TRkkgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNmaV9pbml0KHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZmlfaW5pdF9sYXRlKHZvaWQpCit7Cit9CisKKyNkZWZpbmUgc2ZpX2Rpc2FibGVkCTAKKworc3RhdGljIGlubGluZSBpbnQgc2ZpX3RhYmxlX3BhcnNlKGNoYXIgKnNpZ25hdHVyZSwgY2hhciAqb2VtX2lkLAorCQkJCQljaGFyICpvZW1fdGFibGVfaWQsCisJCQkJCXNmaV90YWJsZV9oYW5kbGVyIGhhbmRsZXIpCit7CisJcmV0dXJuIC0xOworfQorCisjZW5kaWYgLyogIUNPTkZJR19TRkkgKi8KKworI2VuZGlmIC8qX0xJTlVYX1NGSV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2ZpX2FjcGkuaCBiL2luY2x1ZGUvbGludXgvc2ZpX2FjcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE1YThjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZmlfYWNwaS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIHNmaS5oIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgKi8KKworLyoKKworICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisKKyAgR1BMIExJQ0VOU0UgU1VNTUFSWQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorCisgIEJTRCBMSUNFTlNFCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIF9MSU5VWF9TRklfQUNQSV9ICisjZGVmaW5lIF9MSU5VWF9TRklfQUNQSV9ICisKKyNpZmRlZiBDT05GSUdfU0ZJCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CQkvKiBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKi8KKworZXh0ZXJuIGludCBzZmlfYWNwaV90YWJsZV9wYXJzZShjaGFyICpzaWduYXR1cmUsIGNoYXIgKm9lbV9pZCwKKwkJCQljaGFyICpvZW1fdGFibGVfaWQsCisJCQkJaW50ICgqaGFuZGxlcikoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopKTsKKworc3RhdGljIGlubGluZSBpbnQgYWNwaV9zZmlfdGFibGVfcGFyc2UoY2hhciAqc2lnbmF0dXJlLAorCQkJCWludCAoKmhhbmRsZXIpKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKSkKK3sKKwlpZiAoIWFjcGlfdGFibGVfcGFyc2Uoc2lnbmF0dXJlLCBoYW5kbGVyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2ZpX2FjcGlfdGFibGVfcGFyc2Uoc2lnbmF0dXJlLCBOVUxMLCBOVUxMLCBoYW5kbGVyKTsKK30KKyNlbHNlIC8qICFDT05GSUdfU0ZJICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNmaV9hY3BpX3RhYmxlX3BhcnNlKGNoYXIgKnNpZ25hdHVyZSwgY2hhciAqb2VtX2lkLAorCQkJCWNoYXIgKm9lbV90YWJsZV9pZCwKKwkJCQlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKikpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBhY3BpX3NmaV90YWJsZV9wYXJzZShjaGFyICpzaWduYXR1cmUsCisJCQkJaW50ICgqaGFuZGxlcikoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopKQoreworCXJldHVybiBhY3BpX3RhYmxlX3BhcnNlKHNpZ25hdHVyZSwgaGFuZGxlcik7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TRkkgKi8KKworI2VuZGlmIC8qX0xJTlVYX1NGSV9BQ1BJX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbWMzMzg4MC5oIGIvaW5jbHVkZS9saW51eC9zcGkvbWMzMzg4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmZjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9tYzMzODgwLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBMSU5VWF9TUElfTUMzMzg4MF9ICisjZGVmaW5lIExJTlVYX1NQSV9NQzMzODgwX0gKKworc3RydWN0IG1jMzM4ODBfcGxhdGZvcm1fZGF0YSB7CisJLyogbnVtYmVyIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBHUElPICovCisJdW5zaWduZWQJYmFzZTsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCmluZGV4IGM0N2M0YjQuLjk3YjYwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCkBAIC0yMCw2ICsyMCw3IEBACiAjZGVmaW5lIF9fTElOVVhfU1BJX0gKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiAvKgogICogSU5URVJGQUNFUyBiZXR3ZWVuIFNQSSBtYXN0ZXItc2lkZSBkcml2ZXJzIGFuZCBTUEkgaW5mcmFzdHJ1Y3R1cmUuCkBAIC04Niw3ICs4Nyw3IEBACiAJaW50CQkJaXJxOwogCXZvaWQJCQkqY29udHJvbGxlcl9zdGF0ZTsKIAl2b2lkCQkJKmNvbnRyb2xsZXJfZGF0YTsKLQljaGFyCQkJbW9kYWxpYXNbMzJdOworCWNoYXIJCQltb2RhbGlhc1tTUElfTkFNRV9TSVpFXTsKIAogCS8qCiAJICogbGlrZWx5IG5lZWQgbW9yZSBob29rcyBmb3IgbW9yZSBwcm90b2NvbCBvcHRpb25zIGFmZmVjdGluZyBob3cKQEAgLTE0NSw2ICsxNDYsNyBAQAogCiAvKioKICAqIHN0cnVjdCBzcGlfZHJpdmVyIC0gSG9zdCBzaWRlICJwcm90b2NvbCIgZHJpdmVyCisgKiBAaWRfdGFibGU6IExpc3Qgb2YgU1BJIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCiAgKiBAcHJvYmU6IEJpbmRzIHRoaXMgZHJpdmVyIHRvIHRoZSBzcGkgZGV2aWNlLiAgRHJpdmVycyBjYW4gdmVyaWZ5CiAgKgl0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgcHJlc2VudCwgYW5kIG1heSBuZWVkIHRvIGNvbmZpZ3VyZQogICoJY2hhcmFjdGVyaXN0aWNzIChzdWNoIGFzIGJpdHNfcGVyX3dvcmQpIHdoaWNoIHdlcmVuJ3QgbmVlZGVkIGZvcgpAQCAtMTcwLDYgKzE3Miw3IEBACiAgKiBNTUMsIFJUQywgZmlsZXN5c3RlbSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGVzLCBhbmQgaGFyZHdhcmUgbW9uaXRvcmluZy4KICAqLwogc3RydWN0IHNwaV9kcml2ZXIgeworCWNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkICppZF90YWJsZTsKIAlpbnQJCQkoKnByb2JlKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKIAlpbnQJCQkoKnJlbW92ZSkoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSk7CiAJdm9pZAkJCSgqc2h1dGRvd24pKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOwpAQCAtMjA3LDYgKzIxMCw4IEBACiAgKgllYWNoIHNsYXZlIGhhcyBhIGNoaXBzZWxlY3Qgc2lnbmFsLCBidXQgaXQncyBjb21tb24gdGhhdCBub3QKICAqCWV2ZXJ5IGNoaXBzZWxlY3QgaXMgY29ubmVjdGVkIHRvIGEgc2xhdmUuCiAgKiBAZG1hX2FsaWdubWVudDogU1BJIGNvbnRyb2xsZXIgY29uc3RyYWludCBvbiBETUEgYnVmZmVycyBhbGlnbm1lbnQuCisgKiBAbW9kZV9iaXRzOiBmbGFncyB1bmRlcnN0b29kIGJ5IHRoaXMgY29udHJvbGxlciBkcml2ZXIKKyAqIEBmbGFnczogb3RoZXIgY29uc3RyYWludHMgcmVsZXZhbnQgdG8gdGhpcyBkcml2ZXIKICAqIEBzZXR1cDogdXBkYXRlcyB0aGUgZGV2aWNlIG1vZGUgYW5kIGNsb2NraW5nIHJlY29yZHMgdXNlZCBieSBhCiAgKglkZXZpY2UncyBTUEkgY29udHJvbGxlcjsgcHJvdG9jb2wgY29kZSBtYXkgY2FsbCB0aGlzLiAgVGhpcwogICoJbXVzdCBmYWlsIGlmIGFuIHVucmVjb2duaXplZCBvciB1bnN1cHBvcnRlZCBtb2RlIGlzIHJlcXVlc3RlZC4KQEAgLTI1Myw2ICsyNTgsOCBAQAogCS8qIG90aGVyIGNvbnN0cmFpbnRzIHJlbGV2YW50IHRvIHRoaXMgZHJpdmVyICovCiAJdTE2CQkJZmxhZ3M7CiAjZGVmaW5lIFNQSV9NQVNURVJfSEFMRl9EVVBMRVgJQklUKDApCQkvKiBjYW4ndCBkbyBmdWxsIGR1cGxleCAqLworI2RlZmluZSBTUElfTUFTVEVSX05PX1JYCUJJVCgxKQkJLyogY2FuJ3QgZG8gYnVmZmVyIHJlYWQgKi8KKyNkZWZpbmUgU1BJX01BU1RFUl9OT19UWAlCSVQoMikJCS8qIGNhbid0IGRvIGJ1ZmZlciB3cml0ZSAqLwogCiAJLyogU2V0dXAgbW9kZSBhbmQgY2xvY2ssIGV0YyAoc3BpIGRyaXZlciBtYXkgY2FsbCBtYW55IHRpbWVzKS4KIAkgKgpAQCAtNTMzLDQyICs1NDAsNyBAQAogfQogCiBleHRlcm4gaW50IHNwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKLQotLyoqCi0gKiBzcGlfYXN5bmMgLSBhc3luY2hyb25vdXMgU1BJIHRyYW5zZmVyCi0gKiBAc3BpOiBkZXZpY2Ugd2l0aCB3aGljaCBkYXRhIHdpbGwgYmUgZXhjaGFuZ2VkCi0gKiBAbWVzc2FnZTogZGVzY3JpYmVzIHRoZSBkYXRhIHRyYW5zZmVycywgaW5jbHVkaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sKLSAqIENvbnRleHQ6IGFueSAoaXJxcyBtYXkgYmUgYmxvY2tlZCwgZXRjKQotICoKLSAqIFRoaXMgY2FsbCBtYXkgYmUgdXNlZCBpbl9pcnEgYW5kIG90aGVyIGNvbnRleHRzIHdoaWNoIGNhbid0IHNsZWVwLAotICogYXMgd2VsbCBhcyBmcm9tIHRhc2sgY29udGV4dHMgd2hpY2ggY2FuIHNsZWVwLgotICoKLSAqIFRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGludm9rZWQgaW4gYSBjb250ZXh0IHdoaWNoIGNhbid0IHNsZWVwLgotICogQmVmb3JlIHRoYXQgaW52b2NhdGlvbiwgdGhlIHZhbHVlIG9mIG1lc3NhZ2UtPnN0YXR1cyBpcyB1bmRlZmluZWQuCi0gKiBXaGVuIHRoZSBjYWxsYmFjayBpcyBpc3N1ZWQsIG1lc3NhZ2UtPnN0YXR1cyBob2xkcyBlaXRoZXIgemVybyAodG8KLSAqIGluZGljYXRlIGNvbXBsZXRlIHN1Y2Nlc3MpIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4gIEFmdGVyIHRoYXQKLSAqIGNhbGxiYWNrIHJldHVybnMsIHRoZSBkcml2ZXIgd2hpY2ggaXNzdWVkIHRoZSB0cmFuc2ZlciByZXF1ZXN0IG1heQotICogZGVhbGxvY2F0ZSB0aGUgYXNzb2NpYXRlZCBtZW1vcnk7IGl0J3Mgbm8gbG9uZ2VyIGluIHVzZSBieSBhbnkgU1BJCi0gKiBjb3JlIG9yIGNvbnRyb2xsZXIgZHJpdmVyIGNvZGUuCi0gKgotICogTm90ZSB0aGF0IGFsdGhvdWdoIGFsbCBtZXNzYWdlcyB0byBhIHNwaV9kZXZpY2UgYXJlIGhhbmRsZWQgaW4KLSAqIEZJRk8gb3JkZXIsIG1lc3NhZ2VzIG1heSBnbyB0byBkaWZmZXJlbnQgZGV2aWNlcyBpbiBvdGhlciBvcmRlcnMuCi0gKiBTb21lIGRldmljZSBtaWdodCBiZSBoaWdoZXIgcHJpb3JpdHksIG9yIGhhdmUgdmFyaW91cyAiaGFyZCIgYWNjZXNzCi0gKiB0aW1lIHJlcXVpcmVtZW50cywgZm9yIGV4YW1wbGUuCi0gKgotICogT24gZGV0ZWN0aW9uIG9mIGFueSBmYXVsdCBkdXJpbmcgdGhlIHRyYW5zZmVyLCBwcm9jZXNzaW5nIG9mCi0gKiB0aGUgZW50aXJlIG1lc3NhZ2UgaXMgYWJvcnRlZCwgYW5kIHRoZSBkZXZpY2UgaXMgZGVzZWxlY3RlZC4KLSAqIFVudGlsIHJldHVybmluZyBmcm9tIHRoZSBhc3NvY2lhdGVkIG1lc3NhZ2UgY29tcGxldGlvbiBjYWxsYmFjaywKLSAqIG5vIG90aGVyIHNwaV9tZXNzYWdlIHF1ZXVlZCB0byB0aGF0IGRldmljZSB3aWxsIGJlIHByb2Nlc3NlZC4KLSAqIChUaGlzIHJ1bGUgYXBwbGllcyBlcXVhbGx5IHRvIGFsbCB0aGUgc3luY2hyb25vdXMgdHJhbnNmZXIgY2FsbHMsCi0gKiB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIHRoaXMgY29yZSBhc3luY2hyb25vdXMgcHJpbWl0aXZlLikKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXNwaV9hc3luYyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1lc3NhZ2UpCi17Ci0JbWVzc2FnZS0+c3BpID0gc3BpOwotCXJldHVybiBzcGktPm1hc3Rlci0+dHJhbnNmZXIoc3BpLCBtZXNzYWdlKTsKLX0KK2V4dGVybiBpbnQgc3BpX2FzeW5jKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNzMyLDcgKzcwNCw3IEBACiAJICogY29udHJvbGxlcl9kYXRhIGdvZXMgdG8gc3BpX2RldmljZS5jb250cm9sbGVyX2RhdGEsCiAJICogaXJxIGlzIGNvcGllZCB0b28KIAkgKi8KLQljaGFyCQltb2RhbGlhc1szMl07CisJY2hhcgkJbW9kYWxpYXNbU1BJX05BTUVfU0laRV07CiAJY29uc3Qgdm9pZAkqcGxhdGZvcm1fZGF0YTsKIAl2b2lkCQkqY29udHJvbGxlcl9kYXRhOwogCWludAkJaXJxOwpAQCAtODAwLDQgKzc3Miw3IEBACiAJCWRldmljZV91bnJlZ2lzdGVyKCZzcGktPmRldik7CiB9CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqCitzcGlfZ2V0X2RldmljZV9pZChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc2Rldik7CisKICNlbmRpZiAvKiBfX0xJTlVYX1NQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggM2Y2MzIxOC4uOTk2ZGY0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtMTExLDcgKzExMSw3IEBACiAJdm9pZAkJCSgqY3JkZXN0cm95KShzdHJ1Y3QgcnBjX2NyZWQgKik7CiAKIAlpbnQJCQkoKmNybWF0Y2gpKHN0cnVjdCBhdXRoX2NyZWQgKiwgc3RydWN0IHJwY19jcmVkICosIGludCk7Ci0Jdm9pZAkJCSgqY3JiaW5kKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IHJwY19jcmVkICopOworCXZvaWQJCQkoKmNyYmluZCkoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOwogCV9fYmUzMiAqCQkoKmNybWFyc2hhbCkoc3RydWN0IHJwY190YXNrICosIF9fYmUzMiAqKTsKIAlpbnQJCQkoKmNycmVmcmVzaCkoc3RydWN0IHJwY190YXNrICopOwogCV9fYmUzMiAqCQkoKmNydmFsaWRhdGUpKHN0cnVjdCBycGNfdGFzayAqLCBfX2JlMzIgKik7CkBAIC0xNDAsNyArMTQwLDcgQEAKIHZvaWQJCQlycGNhdXRoX2luaXRfY3JlZChzdHJ1Y3QgcnBjX2NyZWQgKiwgY29uc3Qgc3RydWN0IGF1dGhfY3JlZCAqLCBzdHJ1Y3QgcnBjX2F1dGggKiwgY29uc3Qgc3RydWN0IHJwY19jcmVkb3BzICopOwogc3RydWN0IHJwY19jcmVkICoJcnBjYXV0aF9sb29rdXBjcmVkKHN0cnVjdCBycGNfYXV0aCAqLCBpbnQpOwogdm9pZAkJCXJwY2F1dGhfYmluZGNyZWQoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOwotdm9pZAkJCXJwY2F1dGhfZ2VuZXJpY19iaW5kX2NyZWQoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqKTsKK3ZvaWQJCQlycGNhdXRoX2dlbmVyaWNfYmluZF9jcmVkKHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgcnBjX2NyZWQgKiwgaW50KTsKIHZvaWQJCQlwdXRfcnBjY3JlZChzdHJ1Y3QgcnBjX2NyZWQgKik7CiB2b2lkCQkJcnBjYXV0aF91bmJpbmRjcmVkKHN0cnVjdCBycGNfdGFzayAqKTsKIF9fYmUzMiAqCQlycGNhdXRoX21hcnNoY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKiwgX19iZTMyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCmluZGV4IGFiM2Y2ZTkuLjhlZDk2NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAKIHN0cnVjdCBycGNfaW5vZGU7CiAKQEAgLTExMyw2ICsxMTQsNyBAQAogCXJwY19hdXRoZmxhdm9yX3QJYXV0aGZsYXZvcjsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAljaGFyCQkJKmNsaWVudF9uYW1lOworCXN0cnVjdCBzdmNfeHBydAkJKmJjX3hwcnQ7CS8qIE5GU3Y0LjEgYmFja2NoYW5uZWwgKi8KIH07CiAKIC8qIFZhbHVlcyBmb3IgImZsYWdzIiBmaWVsZCAqLwpAQCAtMTg4LDUgKzE5MCwxMTcgQEAKICNkZWZpbmUgSVBWNl9TQ09QRV9ERUxJTUlURVIJCSclJwogI2RlZmluZSBJUFY2X1NDT1BFX0lEX0xFTgkJc2l6ZW9mKCIlbm5ubm5ubm5ubiIpCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jbXBfYWRkcjQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwMjsKKworCXJldHVybiBzaW4xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2luMi0+c2luX2FkZHIuc19hZGRyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgX19ycGNfY29weV9hZGRyNChzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzcmMpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzcmM7CisJc3RydWN0IHNvY2thZGRyX2luICpkc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBkc3Q7CisKKwlkc2luLT5zaW5fZmFtaWx5ID0gc3Npbi0+c2luX2ZhbWlseTsKKwlkc2luLT5zaW5fYWRkci5zX2FkZHIgPSBzc2luLT5zaW5fYWRkci5zX2FkZHI7CisJcmV0dXJuIHRydWU7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXAxOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDI7CisJcmV0dXJuIGlwdjZfYWRkcl9lcXVhbCgmc2luMS0+c2luNl9hZGRyLCAmc2luMi0+c2luNl9hZGRyKTsKK30KKworc3RhdGljIGlubGluZSBib29sIF9fcnBjX2NvcHlfYWRkcjYoc3RydWN0IHNvY2thZGRyICpkc3QsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc3JjKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNzaW42ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc3JjOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmRzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0OworCisJZHNpbjYtPnNpbjZfZmFtaWx5ID0gc3NpbjYtPnNpbjZfZmFtaWx5OworCWlwdjZfYWRkcl9jb3B5KCZkc2luNi0+c2luNl9hZGRyLCAmc3NpbjYtPnNpbjZfYWRkcik7CisJcmV0dXJuIHRydWU7Cit9CisjZWxzZQkvKiAhKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jb3B5X2FkZHI2KHN0cnVjdCBzb2NrYWRkciAqZHN0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNyYykKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCisKKy8qKgorICogcnBjX2NtcF9hZGRyIC0gY29tcGFyZSB0aGUgYWRkcmVzcyBwb3J0aW9uIG9mIHR3byBzb2NrYWRkcnMuCisgKiBAc2FwMTogZmlyc3Qgc29ja2FkZHIKKyAqIEBzYXAyOiBzZWNvbmQgc29ja2FkZHIKKyAqCisgKiBKdXN0IGNvbXBhcmVzIHRoZSBmYW1pbHkgYW5kIGFkZHJlc3MgcG9ydGlvbi4gSWdub3JlcyBwb3J0LCBzY29wZSwgZXRjLgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBhZGRycyBhcmUgZXF1YWwsIGZhbHNlIGlmIHRoZXkgYXJlbid0LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcnBjX2NtcF9hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMSwKKwkJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCit7CisJaWYgKHNhcDEtPnNhX2ZhbWlseSA9PSBzYXAyLT5zYV9mYW1pbHkpIHsKKwkJc3dpdGNoIChzYXAxLT5zYV9mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQkJcmV0dXJuIF9fcnBjX2NtcF9hZGRyNChzYXAxLCBzYXAyKTsKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCXJldHVybiBfX3JwY19jbXBfYWRkcjYoc2FwMSwgc2FwMik7CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHJwY19jb3B5X2FkZHIgLSBjb3B5IHRoZSBhZGRyZXNzIHBvcnRpb24gb2Ygb25lIHNvY2thZGRyIHRvIGFub3RoZXIKKyAqIEBkc3Q6IGRlc3RpbmF0aW9uIHNvY2thZGRyCisgKiBAc3JjOiBzb3VyY2Ugc29ja2FkZHIKKyAqCisgKiBKdXN0IGNvcGllcyB0aGUgYWRkcmVzcyBwb3J0aW9uIGFuZCBmYW1pbHkuIElnbm9yZXMgcG9ydCwgc2NvcGUsIGV0Yy4KKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIGNlcnRhaW4gdGhhdCBkc3QgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQKKyAqIHRoZSBhZGRyZXNzIGluIHNyYy4gUmV0dXJucyB0cnVlIGlmIGFkZHJlc3MgZmFtaWx5IGlzIHN1cHBvcnRlZC4gUmV0dXJucworICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcnBjX2NvcHlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKwkJCQkgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzcmMpCit7CisJc3dpdGNoIChzcmMtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIF9fcnBjX2NvcHlfYWRkcjQoZHN0LCBzcmMpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBfX3JwY19jb3B5X2FkZHI2KGRzdCwgc3JjKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHJwY19nZXRfc2NvcGVfaWQgLSByZXR1cm4gc2NvcGVpZCBmb3IgYSBnaXZlbiBzb2NrYWRkcgorICogQHNhOiBzb2NrYWRkciB0byBnZXQgc2NvcGVpZCBmcm9tCisgKgorICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNpbjZfc2NvcGVfaWQgZm9yIEFGX0lORVQ2IGFkZHJzLCBvciAwIGlmCisgKiBub3QgYW4gQUZfSU5FVDYgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgcnBjX2dldF9zY29wZV9pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCWlmIChzYS0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2KQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc2EpLT5zaW42X3Njb3BlX2lkOworfQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQ0xOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCmluZGV4IGVhODAwOTYuLjUyZThjYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCkBAIC05NCw4ICs5NCw2IEBACiAJc3RydWN0IG1vZHVsZSAqCQlzdl9tb2R1bGU7CS8qIG9wdGlvbmFsIG1vZHVsZSB0byBjb3VudCB3aGVuCiAJCQkJCQkgKiBhZGRpbmcgdGhyZWFkcyAqLwogCXN2Y190aHJlYWRfZm4JCXN2X2Z1bmN0aW9uOwkvKiBtYWluIGZ1bmN0aW9uIGZvciB0aHJlYWRzICovCi0JdW5zaWduZWQgaW50CQlzdl9kcmNfbWF4X3BhZ2VzOyAvKiBUb3RhbCBwYWdlcyBmb3IgRFJDICovCi0JdW5zaWduZWQgaW50CQlzdl9kcmNfcGFnZXNfdXNlZDsvKiBEUkMgcGFnZXMgdXNlZCAqLwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCXN0cnVjdCBsaXN0X2hlYWQJc3ZfY2JfbGlzdDsJLyogcXVldWUgZm9yIGNhbGxiYWNrIHJlcXVlc3RzCiAJCQkJCQkgKiB0aGF0IGFycml2ZSBvdmVyIHRoZSBzYW1lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAppbmRleCAyMjIzYWUwLi41ZjRlMThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKQEAgLTY1LDYgKzY1LDcgQEAKIAlzaXplX3QJCQl4cHRfbG9jYWxsZW47CS8qIGxlbmd0aCBvZiBhZGRyZXNzICovCiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJeHB0X3JlbW90ZTsJLyogcmVtb3RlIHBlZXIncyBhZGRyZXNzICovCiAJc2l6ZV90CQkJeHB0X3JlbW90ZWxlbjsJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJeHB0X2JjX3BlbmRpbmc7CS8qIGJhY2tjaGFubmVsIHdhaXQgcXVldWUgKi8KIH07CiAKIGludAlzdmNfcmVnX3hwcnRfY2xhc3Moc3RydWN0IHN2Y194cHJ0X2NsYXNzICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oCmluZGV4IDA0ZGJhMjMuLjFiMzUzYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAkvKiBwcml2YXRlIFRDUCBwYXJ0ICovCiAJdTMyCQkJc2tfcmVjbGVuOwkvKiBsZW5ndGggb2YgcmVjb3JkICovCiAJdTMyCQkJc2tfdGNwbGVuOwkvKiBjdXJyZW50IHJlYWQgbGVuZ3RoICovCisJc3RydWN0IHJwY194cHJ0CQkqc2tfYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCB4cHJ0ICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveGRyLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaAppbmRleCA3ZGE0NjZiLi5mNWNjMDg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiAvKgpAQCAtMTE3LDE0ICsxMTgsMTQgQEAKIHN0YXRpYyBpbmxpbmUgX19iZTMyICoKIHhkcl9lbmNvZGVfaHlwZXIoX19iZTMyICpwLCBfX3U2NCB2YWwpCiB7Ci0JKihfX2JlNjQgKilwID0gY3B1X3RvX2JlNjQodmFsKTsKKwlwdXRfdW5hbGlnbmVkX2JlNjQodmFsLCBwKTsKIAlyZXR1cm4gcCArIDI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgX19iZTMyICoKIHhkcl9kZWNvZGVfaHlwZXIoX19iZTMyICpwLCBfX3U2NCAqdmFscCkKIHsKLQkqdmFscCA9IGJlNjRfdG9fY3B1cCgoX19iZTY0ICopcCk7CisJKnZhbHAgPSBnZXRfdW5hbGlnbmVkX2JlNjQocCk7CiAJcmV0dXJuIHAgKyAyOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKaW5kZXggYzA5MGRmNC4uNmY5NDU3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaApAQCAtMTI0LDYgKzEyNCwyMyBAQAogCXZvaWQJCSgqcHJpbnRfc3RhdHMpKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHNlcV9maWxlICpzZXEpOwogfTsKIAorLyoKKyAqIFJQQyB0cmFuc3BvcnQgaWRlbnRpZmllcnMKKyAqCisgKiBUbyBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGhpc3RvcmljYWwgdXNlIG9mIHJhdyBJUCBwcm90b2NvbAorICogaWQncyBmb3IgdHJhbnNwb3J0IHNlbGVjdGlvbiwgVURQIGFuZCBUQ1AgaWRlbnRpZmllcnMgYXJlIHNwZWNpZmllZAorICogd2l0aCB0aGUgcHJldmlvdXMgdmFsdWVzLiBObyBzdWNoIHJlc3RyaWN0aW9uIGV4aXN0cyBmb3IgbmV3IHRyYW5zcG9ydHMsCisgKiBleGNlcHQgdGhhdCB0aGV5IG1heSBub3QgY29sbGlkZSB3aXRoIHRoZXNlIHZhbHVlcyAoMTcgYW5kIDYsCisgKiByZXNwZWN0aXZlbHkpLgorICovCisjZGVmaW5lIFhQUlRfVFJBTlNQT1JUX0JDICAgICAgICgxIDw8IDMxKQorZW51bSB4cHJ0X3RyYW5zcG9ydHMgeworCVhQUlRfVFJBTlNQT1JUX1VEUAk9IElQUFJPVE9fVURQLAorCVhQUlRfVFJBTlNQT1JUX1RDUAk9IElQUFJPVE9fVENQLAorCVhQUlRfVFJBTlNQT1JUX0JDX1RDUAk9IElQUFJPVE9fVENQIHwgWFBSVF9UUkFOU1BPUlRfQkMsCisJWFBSVF9UUkFOU1BPUlRfUkRNQQk9IDI1NgorfTsKKwogc3RydWN0IHJwY194cHJ0IHsKIAlzdHJ1Y3Qga3JlZgkJa3JlZjsJCS8qIFJlZmVyZW5jZSBjb3VudCAqLwogCXN0cnVjdCBycGNfeHBydF9vcHMgKglvcHM7CQkvKiB0cmFuc3BvcnQgbWV0aG9kcyAqLwpAQCAtMTc5LDYgKzE5Niw3IEBACiAJc3BpbmxvY2tfdAkJcmVzZXJ2ZV9sb2NrOwkvKiBsb2NrIHNsb3QgdGFibGUgKi8KIAl1MzIJCQl4aWQ7CQkvKiBOZXh0IFhJRCB2YWx1ZSB0byB1c2UgKi8KIAlzdHJ1Y3QgcnBjX3Rhc2sgKglzbmRfdGFzazsJLyogVGFzayBibG9ja2VkIGluIHNlbmQgKi8KKwlzdHJ1Y3Qgc3ZjX3hwcnQJCSpiY194cHJ0OwkvKiBORlN2NC4xIGJhY2tjaGFubmVsICovCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAJc3RydWN0IHN2Y19zZXJ2CQkqYmNfc2VydjsgICAgICAgLyogVGhlIFJQQyBzZXJ2aWNlIHdoaWNoIHdpbGwgKi8KIAkJCQkJCS8qIHByb2Nlc3MgdGhlIGNhbGxiYWNrICovCkBAIC0yMzEsNiArMjQ5LDcgQEAKIAlzdHJ1Y3Qgc29ja2FkZHIgKglzcmNhZGRyOwkvKiBvcHRpb25hbCBsb2NhbCBhZGRyZXNzICovCiAJc3RydWN0IHNvY2thZGRyICoJZHN0YWRkcjsJLyogcmVtb3RlIHBlZXIgYWRkcmVzcyAqLwogCXNpemVfdAkJCWFkZHJsZW47CisJc3RydWN0IHN2Y194cHJ0CQkqYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCAqLwogfTsKIAogc3RydWN0IHhwcnRfY2xhc3MgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRyZG1hLmgKaW5kZXggNTRhMzc5Yy4uYzJmMDRlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0cmRtYS5oCkBAIC00MSwxMSArNDEsNiBAQAogI2RlZmluZSBfTElOVVhfU1VOUlBDX1hQUlRSRE1BX0gKIAogLyoKLSAqIFJQQyB0cmFuc3BvcnQgaWRlbnRpZmllciBmb3IgUkRNQQotICovCi0jZGVmaW5lIFhQUlRfVFJBTlNQT1JUX1JETUEJMjU2Ci0KLS8qCiAgKiBycGNiaW5kICh2MyspIFJETUEgbmV0aWQuCiAgKi8KICNkZWZpbmUgUlBDQklORF9ORVRJRF9SRE1BCSJyZG1hIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHNvY2suaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRzb2NrLmgKaW5kZXggYzJhNDZjNC4uM2YxNGEwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHNvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oCkBAIC0xMywxNyArMTMsNiBAQAogdm9pZAkJY2xlYW51cF9zb2NrZXRfeHBydCh2b2lkKTsKIAogLyoKLSAqIFJQQyB0cmFuc3BvcnQgaWRlbnRpZmllcnMgZm9yIFVEUCwgVENQCi0gKgotICogVG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBoaXN0b3JpY2FsIHVzZSBvZiByYXcgSVAgcHJvdG9jb2wKLSAqIGlkJ3MgZm9yIHRyYW5zcG9ydCBzZWxlY3Rpb24sIHRoZXNlIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgcHJldmlvdXMKLSAqIHZhbHVlcy4gTm8gc3VjaCByZXN0cmljdGlvbiBleGlzdHMgZm9yIG5ldyB0cmFuc3BvcnRzLCBleGNlcHQgdGhhdAotICogdGhleSBtYXkgbm90IGNvbGxpZGUgd2l0aCB0aGVzZSB2YWx1ZXMgKDE3IGFuZCA2LCByZXNwZWN0aXZlbHkpLgotICovCi0jZGVmaW5lIFhQUlRfVFJBTlNQT1JUX1VEUAlJUFBST1RPX1VEUAotI2RlZmluZSBYUFJUX1RSQU5TUE9SVF9UQ1AJSVBQUk9UT19UQ1AKLQotLyoKICAqIFJQQyBzbG90IHRhYmxlIHNpemVzIGZvciBVRFAsIFRDUCB0cmFuc3BvcnRzCiAgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgeHBydF91ZHBfc2xvdF90YWJsZV9lbnRyaWVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA3YzE1MzM0Li42Yzk5MGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNDE5LDEwICs0MTksMjIgQEAKIH0KIAogLyogbGludXgvbW0vdGhyYXNoLmMgKi8KLSNkZWZpbmUgcHV0X3N3YXBfdG9rZW4obW0pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZ3JhYl9zd2FwX3Rva2VuKG1tKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGhhc19zd2FwX3Rva2VuKG1tKQkwCi0jZGVmaW5lIGRpc2FibGVfc3dhcF90b2tlbigpCWRvIHsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyYWJfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgaGFzX3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3N3YXBfdG9rZW4odm9pZCkKK3sKK30KIAogc3RhdGljIGlubGluZSB2b2lkCiBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3dwX2VudHJ5X3QgZW50KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IGE4ZTM3ODIuLmE5OTBhY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTU1LDcgKzU1LDcgQEAKIHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkOwogc3RydWN0IGdldGNwdV9jYWNoZTsKIHN0cnVjdCBvbGRfbGludXhfZGlyZW50Owotc3RydWN0IHBlcmZfY291bnRlcl9hdHRyOworc3RydWN0IHBlcmZfZXZlbnRfYXR0cjsKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgpAQCAtMTAwLDMzICsxMDAsMjUgQEAKIAogI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCiAjZGVmaW5lIFRSQUNFX1NZU19FTlRFUl9QUk9GSUxFKHNuYW1lKQkJCQkJICAgICAgIFwKLXN0YXRpYyBpbnQgcHJvZl9zeXNlbnRlcl9lbmFibGVfIyNzbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpICBcCitzdGF0aWMgaW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlXyMjc25hbWUodm9pZCkJCQkJICAgICAgIFwKIHsJCQkJCQkJCQkgICAgICAgXAotCWludCByZXQgPSAwOwkJCQkJCQkgICAgICAgXAotCWlmICghYXRvbWljX2luY19yZXR1cm4oJmV2ZW50X2VudGVyXyMjc25hbWUucHJvZmlsZV9jb3VudCkpCSAgICAgICBcCi0JCXJldCA9IHJlZ19wcm9mX3N5c2NhbGxfZW50ZXIoInN5cyIjc25hbWUpOwkJICAgICAgIFwKLQlyZXR1cm4gcmV0OwkJCQkJCQkgICAgICAgXAorCXJldHVybiByZWdfcHJvZl9zeXNjYWxsX2VudGVyKCJzeXMiI3NuYW1lKTsJCQkgICAgICAgXAogfQkJCQkJCQkJCSAgICAgICBcCiAJCQkJCQkJCQkgICAgICAgXAotc3RhdGljIHZvaWQgcHJvZl9zeXNlbnRlcl9kaXNhYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKVwKK3N0YXRpYyB2b2lkIHByb2Zfc3lzZW50ZXJfZGlzYWJsZV8jI3NuYW1lKHZvaWQpCQkJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmV2ZW50X2VudGVyXyMjc25hbWUucHJvZmlsZV9jb3VudCkpICAgICAgIFwKLQkJdW5yZWdfcHJvZl9zeXNjYWxsX2VudGVyKCJzeXMiI3NuYW1lKTsJCQkgICAgICAgXAorCXVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcigic3lzIiNzbmFtZSk7CQkJCSAgICAgICBcCiB9CiAKICNkZWZpbmUgVFJBQ0VfU1lTX0VYSVRfUFJPRklMRShzbmFtZSkJCQkJCSAgICAgICBcCi1zdGF0aWMgaW50IHByb2Zfc3lzZXhpdF9lbmFibGVfIyNzbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpICAgXAorc3RhdGljIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlXyMjc25hbWUodm9pZCkJCQkJICAgICAgIFwKIHsJCQkJCQkJCQkgICAgICAgXAotCWludCByZXQgPSAwOwkJCQkJCQkgICAgICAgXAotCWlmICghYXRvbWljX2luY19yZXR1cm4oJmV2ZW50X2V4aXRfIyNzbmFtZS5wcm9maWxlX2NvdW50KSkJICAgICAgIFwKLQkJcmV0ID0gcmVnX3Byb2Zfc3lzY2FsbF9leGl0KCJzeXMiI3NuYW1lKTsJCSAgICAgICBcCi0JcmV0dXJuIHJldDsJCQkJCQkJICAgICAgIFwKKwlyZXR1cm4gcmVnX3Byb2Zfc3lzY2FsbF9leGl0KCJzeXMiI3NuYW1lKTsJCQkgICAgICAgXAogfQkJCQkJCQkJCSAgICAgICBcCiAJCQkJCQkJCQkgICAgICAgXAotc3RhdGljIHZvaWQgcHJvZl9zeXNleGl0X2Rpc2FibGVfIyNzbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpIFwKK3N0YXRpYyB2b2lkIHByb2Zfc3lzZXhpdF9kaXNhYmxlXyMjc25hbWUodm9pZCkJCQkJICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKGF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZldmVudF9leGl0XyMjc25hbWUucHJvZmlsZV9jb3VudCkpCSAgICAgICBcCi0JCXVucmVnX3Byb2Zfc3lzY2FsbF9leGl0KCJzeXMiI3NuYW1lKTsJCQkgICAgICAgXAorCXVucmVnX3Byb2Zfc3lzY2FsbF9leGl0KCJzeXMiI3NuYW1lKTsJCQkJICAgICAgIFwKIH0KIAogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQkJCQkgICAgICAgXApAQCAtNDY4LDggKzQ2MCw3IEBACiAJCQkJdm9pZCBfX3VzZXIgKmRhdGEpOwogYXNtbGlua2FnZSBsb25nIHN5c191bW91bnQoY2hhciBfX3VzZXIgKm5hbWUsIGludCBmbGFncyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX29sZHVtb3VudChjaGFyIF9fdXNlciAqbmFtZSk7Ci1hc21saW5rYWdlIGxvbmcgc3lzX3RydW5jYXRlKGNvbnN0IGNoYXIgX191c2VyICpwYXRoLAotCQkJCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdHJ1bmNhdGUoY29uc3QgY2hhciBfX3VzZXIgKnBhdGgsIGxvbmcgbGVuZ3RoKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZnRydW5jYXRlKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgbG9uZyBsZW5ndGgpOwogYXNtbGlua2FnZSBsb25nIHN5c19zdGF0KGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCXN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCBfX3VzZXIgKnN0YXRidWYpOwpAQCAtODg1LDcgKzg3Niw3IEBACiBpbnQga2VybmVsX2V4ZWN2ZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pOwogCiAKLWFzbWxpbmthZ2UgbG9uZyBzeXNfcGVyZl9jb3VudGVyX29wZW4oCi0JCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciBfX3VzZXIgKmF0dHJfdXB0ciwKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuKAorCQlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIF9fdXNlciAqYXR0cl91cHRyLAogCQlwaWRfdCBwaWQsIGludCBjcHUsIGludCBncm91cF9mZCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5LmggYi9pbmNsdWRlL2xpbnV4L3R0eS5oCmluZGV4IGE5MTZhMzEuLmYwZjQzZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5LmgKKysrIGIvaW5jbHVkZS9saW51eC90dHkuaApAQCAtMTg3LDcgKzE4NywxMiBAQAogc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgewogCS8qIFJldHVybiAxIGlmIHRoZSBjYXJyaWVyIGlzIHJhaXNlZCAqLwogCWludCAoKmNhcnJpZXJfcmFpc2VkKShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpOworCS8qIENvbnRyb2wgdGhlIERUUiBsaW5lICovCiAJdm9pZCAoKmR0cl9ydHMpKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwgaW50IHJhaXNlKTsKKwkvKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCBjbG9zZSBjb21wbGV0ZXMgb3IgYSBoYW5ndXAgZmluaXNoZXMKKwkgICBJRkYgdGhlIHBvcnQgd2FzIGluaXRpYWxpemVkLiBEbyBub3QgdXNlIHRvIGZyZWUgcmVzb3VyY2VzICovCisJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpOworCXZvaWQgKCpkcm9wKShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpOwogfTsKIAkKIHN0cnVjdCB0dHlfcG9ydCB7CkBAIC0xOTgsMTEgKzIwMywxMiBAQAogCWludAkJCWNvdW50OwkJLyogVXNhZ2UgY291bnQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7CS8qIE9wZW4gd2FpdGVycyAqLwogCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7CS8qIENsb3NlIHdhaXRlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlkZWx0YV9tc3Jfd2FpdDsJLyogTW9kZW0gc3RhdHVzIGNoYW5nZSAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogVFRZIGZsYWdzIEFTWV8qLwogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CQkvKiBMb2NraW5nICovCiAJdW5zaWduZWQgY2hhcgkJKnhtaXRfYnVmOwkvKiBPcHRpb25hbCBidWZmZXIgKi8KLQlpbnQJCQljbG9zZV9kZWxheTsJLyogQ2xvc2UgcG9ydCBkZWxheSAqLwotCWludAkJCWNsb3Npbmdfd2FpdDsJLyogRGVsYXkgZm9yIG91dHB1dCAqLworCXVuc2lnbmVkIGludAkJY2xvc2VfZGVsYXk7CS8qIENsb3NlIHBvcnQgZGVsYXkgKi8KKwl1bnNpZ25lZCBpbnQJCWNsb3Npbmdfd2FpdDsJLyogRGVsYXkgZm9yIG91dHB1dCAqLwogCWludAkJCWRyYWluX2RlbGF5OwkvKiBTZXQgdG8gemVybyBpZiBubyBwdXJlIHRpbWUKIAkJCQkJCSAgIGJhc2VkIGRyYWluIGlzIG5lZWRlZCBlbHNlCiAJCQkJCQkgICBzZXQgdG8gc2l6ZSBvZiBmaWZvICovCkBAIC00NTksNiArNDY1LDEyIEBACiBleHRlcm4gaW50IHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBleHRlcm4gdm9pZCB0dHlfcG9ydF9jbG9zZV9lbmQoc3RydWN0IHR0eV9wb3J0ICpwb3J0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHR0eV9wb3J0X2Nsb3NlKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW5saW5lIGludCB0dHlfcG9ydF91c2VycyhzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIHBvcnQtPmNvdW50ICsgcG9ydC0+YmxvY2tlZF9vcGVuOworfQogCiBleHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzY19vcHMgKm5ld19sZGlzYyk7CiBleHRlcm4gaW50IHR0eV91bnJlZ2lzdGVyX2xkaXNjKGludCBkaXNjKTsKQEAgLTUyNCw1ICs1MzYsOCBAQAogZXh0ZXJuIGludCB2dF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAorZXh0ZXJuIGxvbmcgdnRfY29tcGF0X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWNiMTQwMC5oIGIvaW5jbHVkZS9saW51eC91Y2IxNDAwLmgKaW5kZXggYWU3NzliYi4uYWRiNDQwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91Y2IxNDAwLmgKKysrIGIvaW5jbHVkZS9saW51eC91Y2IxNDAwLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKIC8qCiAgKiBVQ0IxNDAwIEFDLWxpbmsgcmVnaXN0ZXJzCkBAIC04Miw2ICs4MywxNyBAQAogI2RlZmluZSBVQ0JfSUQJCQkweDdlCiAjZGVmaW5lIFVDQl9JRF8xNDAwICAgICAgICAgICAgIDB4NDMwNAogCitzdHJ1Y3QgdWNiMTQwMF9ncGlvX2RhdGEgeworCWludCBncGlvX29mZnNldDsKKwlpbnQgKCpncGlvX3NldHVwKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBuZ3Bpbyk7CisJaW50ICgqZ3Bpb190ZWFyZG93bikoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbmdwaW8pOworfTsKKworc3RydWN0IHVjYjE0MDBfZ3BpbyB7CisJc3RydWN0IGdwaW9fY2hpcAlnYzsKKwlzdHJ1Y3Qgc25kX2FjOTcJCSphYzk3OworfTsKKwogc3RydWN0IHVjYjE0MDBfdHMgewogCXN0cnVjdCBpbnB1dF9kZXYJKnRzX2lkZXY7CiAJc3RydWN0IHRhc2tfc3RydWN0CSp0c190YXNrOwpAQCAtOTUsNiArMTA3LDcgQEAKIAogc3RydWN0IHVjYjE0MDAgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnVjYjE0MDBfdHM7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqdWNiMTQwMF9ncGlvOwogfTsKIAogc3RhdGljIGlubGluZSB1MTYgdWNiMTQwMF9yZWdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHUxNiByZWcpCkBAIC0xNDcsNCArMTYwLDEwIEBACiB1bnNpZ25lZCBpbnQgdWNiMTQwMF9hZGNfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHUxNiBhZGNfY2hhbm5lbCwKIAkJCSAgICAgIGludCBhZGNzeW5jKTsKIAorI2lmZGVmIENPTkZJR19HUElPX1VDQjE0MDAKK3ZvaWQgX19pbml0IHVjYjE0MDBfZ3Bpb19zZXRfZGF0YShzdHJ1Y3QgdWNiMTQwMF9ncGlvX2RhdGEgKmRhdGEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB1Y2IxNDAwX2dwaW9fc2V0X2RhdGEoc3RydWN0IHVjYjE0MDBfZ3Bpb19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggYjFlM2MyZi4uYTM0ZmE4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogaW50ZXJmYWNlIHNwZWNpZmljIGRldmljZSBpbmZvICovCiAJc3RydWN0IGRldmljZSAqdXNiX2RldjsKLQlpbnQgcG1fdXNhZ2VfY250OwkJLyogdXNhZ2UgY291bnRlciBmb3IgYXV0b3N1c3BlbmQgKi8KKwlhdG9taWNfdCBwbV91c2FnZV9jbnQ7CQkvKiB1c2FnZSBjb3VudGVyIGZvciBhdXRvc3VzcGVuZCAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF93czsJLyogZm9yIHJlc2V0cyBpbiBhdG9taWMgY29udGV4dCAqLwogfTsKICNkZWZpbmUJdG9fdXNiX2ludGVyZmFjZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9pbnRlcmZhY2UsIGRldikKQEAgLTU1MSwxMyArNTUxLDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfYXV0b3BtX2VuYWJsZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlpbnRmLT5wbV91c2FnZV9jbnQgPSAwOworCWF0b21pY19zZXQoJmludGYtPnBtX3VzYWdlX2NudCwgMCk7CiAJdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKGludGYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXNiX2F1dG9wbV9kaXNhYmxlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCWludGYtPnBtX3VzYWdlX2NudCA9IDE7CisJYXRvbWljX3NldCgmaW50Zi0+cG1fdXNhZ2VfY250LCAxKTsKIAl1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UoaW50Zik7CiB9CiAKQEAgLTkyMiw3ICs5MjIsNyBAQAogLyoqCiAgKiBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciAtIGlkZW50aWZpZXMgYSBVU0IgZHJpdmVyIHRoYXQgd2FudHMgdG8gdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyCiAgKiBAbmFtZTogdGhlIHVzYiBjbGFzcyBkZXZpY2UgbmFtZSBmb3IgdGhpcyBkcml2ZXIuICBXaWxsIHNob3cgdXAgaW4gc3lzZnMuCi0gKiBAbm9kZW5hbWU6IENhbGxiYWNrIHRvIHByb3ZpZGUgYSBuYW1pbmcgaGludCBmb3IgYSBwb3NzaWJsZQorICogQGRldm5vZGU6IENhbGxiYWNrIHRvIHByb3ZpZGUgYSBuYW1pbmcgaGludCBmb3IgYSBwb3NzaWJsZQogICoJZGV2aWNlIG5vZGUgdG8gY3JlYXRlLgogICogQGZvcHM6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2YgdGhpcyBkcml2ZXIuCiAgKiBAbWlub3JfYmFzZTogdGhlIHN0YXJ0IG9mIHRoZSBtaW5vciByYW5nZSBmb3IgdGhpcyBkcml2ZXIuCkBAIC05MzMsNyArOTMzLDcgQEAKICAqLwogc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgewogCWNoYXIgKm5hbWU7Ci0JY2hhciAqKCpub2RlbmFtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwljaGFyICooKmRldm5vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKTsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwogCWludCBtaW5vcl9iYXNlOwogfTsKQEAgLTEwMzYsOSArMTAzNiwxMCBAQAogICogQHRyYW5zZmVyX2ZsYWdzOiBBIHZhcmlldHkgb2YgZmxhZ3MgbWF5IGJlIHVzZWQgdG8gYWZmZWN0IGhvdyBVUkIKICAqCXN1Ym1pc3Npb24sIHVubGlua2luZywgb3Igb3BlcmF0aW9uIGFyZSBoYW5kbGVkLiAgRGlmZmVyZW50CiAgKglraW5kcyBvZiBVUkIgY2FuIHVzZSBkaWZmZXJlbnQgZmxhZ3MuCi0gKiBAdHJhbnNmZXJfYnVmZmVyOiAgVGhpcyBpZGVudGlmaWVzIHRoZSBidWZmZXIgdG8gKG9yIGZyb20pIHdoaWNoCi0gKiAJdGhlIEkvTyByZXF1ZXN0IHdpbGwgYmUgcGVyZm9ybWVkICh1bmxlc3MgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAKLSAqCWlzIHNldCkuICBUaGlzIGJ1ZmZlciBtdXN0IGJlIHN1aXRhYmxlIGZvciBETUE7IGFsbG9jYXRlIGl0IHdpdGgKKyAqIEB0cmFuc2Zlcl9idWZmZXI6ICBUaGlzIGlkZW50aWZpZXMgdGhlIGJ1ZmZlciB0byAob3IgZnJvbSkgd2hpY2ggdGhlIEkvTworICoJcmVxdWVzdCB3aWxsIGJlIHBlcmZvcm1lZCB1bmxlc3MgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgaXMgc2V0CisgKgkoaG93ZXZlciwgZG8gbm90IGxlYXZlIGdhcmJhZ2UgaW4gdHJhbnNmZXJfYnVmZmVyIGV2ZW4gdGhlbikuCisgKglUaGlzIGJ1ZmZlciBtdXN0IGJlIHN1aXRhYmxlIGZvciBETUE7IGFsbG9jYXRlIGl0IHdpdGgKICAqCWttYWxsb2MoKSBvciBlcXVpdmFsZW50LiAgRm9yIHRyYW5zZmVycyB0byAiaW4iIGVuZHBvaW50cywgY29udGVudHMKICAqCW9mIHRoaXMgYnVmZmVyIHdpbGwgYmUgbW9kaWZpZWQuICBUaGlzIGJ1ZmZlciBpcyB1c2VkIGZvciB0aGUgZGF0YQogICoJc3RhZ2Ugb2YgY29udHJvbCB0cmFuc2ZlcnMuCkBAIC0xMDcxLDcgKzEwNzIsNyBAQAogICogQHN0YXJ0X2ZyYW1lOiBSZXR1cm5zIHRoZSBpbml0aWFsIGZyYW1lIGZvciBpc29jaHJvbm91cyB0cmFuc2ZlcnMuCiAgKiBAbnVtYmVyX29mX3BhY2tldHM6IExpc3RzIHRoZSBudW1iZXIgb2YgSVNPIHRyYW5zZmVyIGJ1ZmZlcnMuCiAgKiBAaW50ZXJ2YWw6IFNwZWNpZmllcyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgaW50ZXJydXB0IG9yIGlzb2Nocm9ub3VzCi0gKgl0cmFuc2ZlcnMuICBUaGUgdW5pdHMgYXJlIGZyYW1lcyAobWlsbGlzZWNvbmRzKSBmb3IgZm9yIGZ1bGwgYW5kIGxvdworICoJdHJhbnNmZXJzLiAgVGhlIHVuaXRzIGFyZSBmcmFtZXMgKG1pbGxpc2Vjb25kcykgZm9yIGZ1bGwgYW5kIGxvdwogICoJc3BlZWQgZGV2aWNlcywgYW5kIG1pY3JvZnJhbWVzICgxLzggbWlsbGlzZWNvbmQpIGZvciBoaWdoc3BlZWQgb25lcy4KICAqIEBlcnJvcl9jb3VudDogUmV0dXJucyB0aGUgbnVtYmVyIG9mIElTTyB0cmFuc2ZlcnMgdGhhdCByZXBvcnRlZCBlcnJvcnMuCiAgKiBAY29udGV4dDogRm9yIHVzZSBpbiBjb21wbGV0aW9uIGZ1bmN0aW9ucy4gIFRoaXMgbm9ybWFsbHkgcG9pbnRzIHRvCkBAIC0xMTA0LDkgKzExMDUsMTUgQEAKICAqIGFsbG9jYXRlIGEgRE1BIGJ1ZmZlciB3aXRoIHVzYl9idWZmZXJfYWxsb2MoKSBvciBjYWxsIHVzYl9idWZmZXJfbWFwKCkuCiAgKiBXaGVuIHRoZXNlIHRyYW5zZmVyIGZsYWdzIGFyZSBwcm92aWRlZCwgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgd2lsbAogICogYXR0ZW1wdCB0byB1c2UgdGhlIGRtYSBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHRyYW5zZmVyX2RtYSBhbmQvb3IKLSAqIHNldHVwX2RtYSBmaWVsZHMgcmF0aGVyIHRoYW4gZGV0ZXJtaW5pbmcgYSBkbWEgYWRkcmVzcyB0aGVtc2VsdmVzLiAgKE5vdGUKLSAqIHRoYXQgdHJhbnNmZXJfYnVmZmVyIGFuZCBzZXR1cF9wYWNrZXQgbXVzdCBzdGlsbCBiZSBzZXQgYmVjYXVzZSBub3QgYWxsCi0gKiBob3N0IGNvbnRyb2xsZXJzIHVzZSBETUEsIG5vciBkbyB2aXJ0dWFsIHJvb3QgaHVicykuCisgKiBzZXR1cF9kbWEgZmllbGRzIHJhdGhlciB0aGFuIGRldGVybWluaW5nIGEgZG1hIGFkZHJlc3MgdGhlbXNlbHZlcy4KKyAqCisgKiBOb3RlIHRoYXQgdHJhbnNmZXJfYnVmZmVyIG11c3Qgc3RpbGwgYmUgc2V0IGlmIHRoZSBjb250cm9sbGVyCisgKiBkb2VzIG5vdCBzdXBwb3J0IERNQSAoYXMgaW5kaWNhdGVkIGJ5IGJ1cy51c2VzX2RtYSkgYW5kIHdoZW4gdGFsa2luZworICogdG8gcm9vdCBodWIuIElmIHlvdSBoYXZlIHRvIHRyYXNmZXIgYmV0d2VlbiBoaWdobWVtIHpvbmUgYW5kIHRoZSBkZXZpY2UKKyAqIG9uIHN1Y2ggY29udHJvbGxlciwgY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBvciBiYWlsIG91dCB3aXRoIGFuIGVycm9yLgorICogSWYgdHJhbnNmZXJfYnVmZmVyIGNhbm5vdCBiZSBzZXQgKGlzIGluIGhpZ2htZW0pIGFuZCB0aGUgY29udHJvbGxlciBpcyBETUEKKyAqIGNhcGFibGUsIGFzc2lnbiBOVUxMIHRvIGl0LCBzbyB0aGF0IHVzYm1vbiBrbm93cyBub3QgdG8gdXNlIHRoZSB2YWx1ZS4KKyAqIFRoZSBzZXR1cF9wYWNrZXQgbXVzdCBhbHdheXMgYmUgc2V0LCBzbyBpdCBjYW5ub3QgYmUgbG9jYXRlZCBpbiBoaWdobWVtLgogICoKICAqIEluaXRpYWxpemF0aW9uOgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCmluZGV4IGI1NzQ0YmMuLmVhZjlkZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaApAQCAtMjQsODggKzI0LDc4IEBACiAjZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wJMHgwMQogI2RlZmluZSBVU0JfU1VCQ0xBU1NfQVVESU9TVFJFQU1JTkcJMHgwMgogI2RlZmluZSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlORwkweDAzCi0jZGVmaW5lIFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQwkweGZmCiAKLS8qIEEuNSBBdWRpbyBDbGFzcy1TcGVjaWZpYyBBQyBpbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyovCi0jZGVmaW5lIEhFQURFUgkJCQkweDAxCi0jZGVmaW5lIElOUFVUX1RFUk1JTkFMCQkJMHgwMgotI2RlZmluZSBPVVRQVVRfVEVSTUlOQUwJCQkweDAzCi0jZGVmaW5lIE1JWEVSX1VOSVQJCQkweDA0Ci0jZGVmaW5lIFNFTEVDVE9SX1VOSVQJCQkweDA1Ci0jZGVmaW5lIEZFQVRVUkVfVU5JVAkJCTB4MDYKLSNkZWZpbmUgUFJPQ0VTU0lOR19VTklUCQkJMHgwNwotI2RlZmluZSBFWFRFTlNJT05fVU5JVAkJCTB4MDgKKy8qIEEuNSBBdWRpbyBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLworI2RlZmluZSBVQUNfSEVBREVSCQkJMHgwMQorI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUwJCTB4MDIKKyNkZWZpbmUgVUFDX09VVFBVVF9URVJNSU5BTAkJMHgwMworI2RlZmluZSBVQUNfTUlYRVJfVU5JVAkJCTB4MDQKKyNkZWZpbmUgVUFDX1NFTEVDVE9SX1VOSVQJCTB4MDUKKyNkZWZpbmUgVUFDX0ZFQVRVUkVfVU5JVAkJMHgwNgorI2RlZmluZSBVQUNfUFJPQ0VTU0lOR19VTklUCQkweDA3CisjZGVmaW5lIFVBQ19FWFRFTlNJT05fVU5JVAkJMHgwOAogCi0jZGVmaW5lIEFTX0dFTkVSQUwJCQkweDAxCi0jZGVmaW5lIEZPUk1BVF9UWVBFCQkJMHgwMgotI2RlZmluZSBGT1JNQVRfU1BFQ0lGSUMJCQkweDAzCisvKiBBLjYgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVUFDX0FTX0dFTkVSQUwJCQkweDAxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRQkJCTB4MDIKKyNkZWZpbmUgVUFDX0ZPUk1BVF9TUEVDSUZJQwkJMHgwMwogCi0jZGVmaW5lIEVQX0dFTkVSQUwJCQkweDAxCisvKiBBLjggQXVkaW8gQ2xhc3MtU3BlY2lmaWMgRW5kcG9pbnQgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLworI2RlZmluZSBVQUNfRVBfR0VORVJBTAkJCTB4MDEKIAotI2RlZmluZSBNU19HRU5FUkFMCQkJMHgwMQotI2RlZmluZSBNSURJX0lOX0pBQ0sJCQkweDAyCi0jZGVmaW5lIE1JRElfT1VUX0pBQ0sJCQkweDAzCisvKiBBLjkgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBDb2RlcyAqLworI2RlZmluZSBVQUNfU0VUXwkJCTB4MDAKKyNkZWZpbmUgVUFDX0dFVF8JCQkweDgwCiAKLS8qIGVuZHBvaW50IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgRVBfQVRUUl9NQVNLCQkJMHgwYwotI2RlZmluZSBFUF9BVFRSX0FTWU5DCQkJMHgwNAotI2RlZmluZSBFUF9BVFRSX0FEQVBUSVZFCQkweDA4Ci0jZGVmaW5lIEVQX0FUVFJfU1lOQwkJCTB4MGMKKyNkZWZpbmUgVUFDX19DVVIJCQkweDEKKyNkZWZpbmUgVUFDX19NSU4JCQkweDIKKyNkZWZpbmUgVUFDX19NQVgJCQkweDMKKyNkZWZpbmUgVUFDX19SRVMJCQkweDQKKyNkZWZpbmUgVUFDX19NRU0JCQkweDUKIAotLyogY3MgZW5kcG9pbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBFUF9DU19BVFRSX1NBTVBMRV9SQVRFCQkweDAxCi0jZGVmaW5lIEVQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCi0jZGVmaW5lIEVQX0NTX0FUVFJfRklMTF9NQVgJCTB4ODAKKyNkZWZpbmUgVUFDX1NFVF9DVVIJCQkoVUFDX1NFVF8gfCBVQUNfX0NVUikKKyNkZWZpbmUgVUFDX0dFVF9DVVIJCQkoVUFDX0dFVF8gfCBVQUNfX0NVUikKKyNkZWZpbmUgVUFDX1NFVF9NSU4JCQkoVUFDX1NFVF8gfCBVQUNfX01JTikKKyNkZWZpbmUgVUFDX0dFVF9NSU4JCQkoVUFDX0dFVF8gfCBVQUNfX01JTikKKyNkZWZpbmUgVUFDX1NFVF9NQVgJCQkoVUFDX1NFVF8gfCBVQUNfX01BWCkKKyNkZWZpbmUgVUFDX0dFVF9NQVgJCQkoVUFDX0dFVF8gfCBVQUNfX01BWCkKKyNkZWZpbmUgVUFDX1NFVF9SRVMJCQkoVUFDX1NFVF8gfCBVQUNfX1JFUykKKyNkZWZpbmUgVUFDX0dFVF9SRVMJCQkoVUFDX0dFVF8gfCBVQUNfX1JFUykKKyNkZWZpbmUgVUFDX1NFVF9NRU0JCQkoVUFDX1NFVF8gfCBVQUNfX01FTSkKKyNkZWZpbmUgVUFDX0dFVF9NRU0JCQkoVUFDX0dFVF8gfCBVQUNfX01FTSkKIAotLyogQXVkaW8gQ2xhc3Mgc3BlY2lmaWMgUmVxdWVzdCBDb2RlcyAqLwotI2RlZmluZSBVU0JfQVVESU9fU0VUX0lOVEYJCTB4MjEKLSNkZWZpbmUgVVNCX0FVRElPX1NFVF9FTkRQT0lOVAkJMHgyMgotI2RlZmluZSBVU0JfQVVESU9fR0VUX0lOVEYJCTB4YTEKLSNkZWZpbmUgVVNCX0FVRElPX0dFVF9FTkRQT0lOVAkJMHhhMgorI2RlZmluZSBVQUNfR0VUX1NUQVQJCQkweGZmCiAKLSNkZWZpbmUgU0VUXwkweDAwCi0jZGVmaW5lIEdFVF8JMHg4MAorLyogTUlESSAtIEEuMSBNUyBDbGFzcy1TcGVjaWZpYyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLworI2RlZmluZSBVQUNfTVNfSEVBREVSCQkJMHgwMQorI2RlZmluZSBVQUNfTUlESV9JTl9KQUNLCQkweDAyCisjZGVmaW5lIFVBQ19NSURJX09VVF9KQUNLCQkweDAzCiAKLSNkZWZpbmUgX0NVUgkweDEKLSNkZWZpbmUgX01JTgkweDIKLSNkZWZpbmUgX01BWAkweDMKLSNkZWZpbmUgX1JFUwkweDQKLSNkZWZpbmUgX01FTQkweDUKKy8qIE1JREkgLSBBLjEgTVMgQ2xhc3MtU3BlY2lmaWMgRW5kcG9pbnQgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLworI2RlZmluZSBVQUNfTVNfR0VORVJBTAkJCTB4MDEKIAotI2RlZmluZSBTRVRfQ1VSCQkoU0VUXyB8IF9DVVIpCi0jZGVmaW5lIEdFVF9DVVIJCShHRVRfIHwgX0NVUikKLSNkZWZpbmUgU0VUX01JTgkJKFNFVF8gfCBfTUlOKQotI2RlZmluZSBHRVRfTUlOCQkoR0VUXyB8IF9NSU4pCi0jZGVmaW5lIFNFVF9NQVgJCShTRVRfIHwgX01BWCkKLSNkZWZpbmUgR0VUX01BWAkJKEdFVF8gfCBfTUFYKQotI2RlZmluZSBTRVRfUkVTCQkoU0VUXyB8IF9SRVMpCi0jZGVmaW5lIEdFVF9SRVMJCShHRVRfIHwgX1JFUykKLSNkZWZpbmUgU0VUX01FTQkJKFNFVF8gfCBfTUVNKQotI2RlZmluZSBHRVRfTUVNCQkoR0VUXyB8IF9NRU0pCi0KLSNkZWZpbmUgR0VUX1NUQVQJMHhmZgotCi0jZGVmaW5lIFVTQl9BQ19URVJNSU5BTF9VTkRFRklORUQJMHgxMDAKLSNkZWZpbmUgVVNCX0FDX1RFUk1JTkFMX1NUUkVBTUlORwkweDEwMQotI2RlZmluZSBVU0JfQUNfVEVSTUlOQUxfVkVORE9SX1NQRUMJMHgxRkYKKy8qIFRlcm1pbmFscyAtIDIuMSBVU0IgVGVybWluYWwgVHlwZXMgKi8KKyNkZWZpbmUgVUFDX1RFUk1JTkFMX1VOREVGSU5FRAkJMHgxMDAKKyNkZWZpbmUgVUFDX1RFUk1JTkFMX1NUUkVBTUlORwkJMHgxMDEKKyNkZWZpbmUgVUFDX1RFUk1JTkFMX1ZFTkRPUl9TUEVDCTB4MUZGCiAKIC8qIFRlcm1pbmFsIENvbnRyb2wgU2VsZWN0b3JzICovCiAvKiA0LjMuMiAgQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1c2JfYWNfaGVhZGVyX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvciB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiA4ICsgbiAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KLQlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIFVTQl9NU19IRUFERVIgKi8KKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIFVBQ19NU19IRUFERVIgKi8KIAlfX2xlMTYgYmNkQURDOwkJCS8qIDB4MDEwMCAqLwogCV9fbGUxNiB3VG90YWxMZW5ndGg7CQkvKiBpbmNsdWRlcyBVbml0IGFuZCBUZXJtaW5hbCBkZXNjLiAqLwogCV9fdTggIGJJbkNvbGxlY3Rpb247CQkvKiBuICovCiAJX191OCAgYmFJbnRlcmZhY2VOcltdOwkJLyogW25dICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBVU0JfRFRfQUNfSEVBREVSX1NJWkUobikJKDggKyAobikpCisjZGVmaW5lIFVBQ19EVF9BQ19IRUFERVJfU0laRShuKQkoOCArIChuKSkKIAogLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCi0jZGVmaW5lIERFQ0xBUkVfVVNCX0FDX0hFQURFUl9ERVNDUklQVE9SKG4pIAkJCVwKLXN0cnVjdCB1c2JfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuIHsJCQkJXAorI2RlZmluZSBERUNMQVJFX1VBQ19BQ19IRUFERVJfREVTQ1JJUFRPUihuKSAJCQlcCitzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yXyMjbiB7CQkJCVwKIAlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkJCQlcCkBAIC0xMTYsNyArMTA2LDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCiAKIC8qIDQuMy4yLjEgSW5wdXQgVGVybWluYWwgRGVzY3JpcHRvciAqLwotc3RydWN0IHVzYl9pbnB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfaW5wdXRfdGVybWluYWxfZGVzY3JpcHRvciB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogMTIgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBDU19JTlRFUkZBQ0UgZGVzY3JpcHRvciB0eXBlICovCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBJTlBVVF9URVJNSU5BTCBkZXNjcmlwdG9yIHN1YnR5cGUgKi8KQEAgLTEyOSwxOCArMTE5LDE5IEBACiAJX191OCAgaVRlcm1pbmFsOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgVVNCX0RUX0FDX0lOUFVUX1RFUk1JTkFMX1NJWkUJCQkxMgorI2RlZmluZSBVQUNfRFRfSU5QVVRfVEVSTUlOQUxfU0laRQkJCTEyCiAKLSNkZWZpbmUgVVNCX0FDX0lOUFVUX1RFUk1JTkFMX1VOREVGSU5FRAkJCTB4MjAwCi0jZGVmaW5lIFVTQl9BQ19JTlBVVF9URVJNSU5BTF9NSUNST1BIT05FCQkweDIwMQotI2RlZmluZSBVU0JfQUNfSU5QVVRfVEVSTUlOQUxfREVTS1RPUF9NSUNST1BIT05FCTB4MjAyCi0jZGVmaW5lIFVTQl9BQ19JTlBVVF9URVJNSU5BTF9QRVJTT05BTF9NSUNST1BIT05FCTB4MjAzCi0jZGVmaW5lIFVTQl9BQ19JTlBVVF9URVJNSU5BTF9PTU5JX0RJUl9NSUNST1BIT05FCTB4MjA0Ci0jZGVmaW5lIFVTQl9BQ19JTlBVVF9URVJNSU5BTF9NSUNST1BIT05FX0FSUkFZCQkweDIwNQotI2RlZmluZSBVU0JfQUNfSU5QVVRfVEVSTUlOQUxfUFJPQ19NSUNST1BIT05FX0FSUkFZCTB4MjA2CisvKiBUZXJtaW5hbHMgLSAyLjIgSW5wdXQgVGVybWluYWwgVHlwZXMgKi8KKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX1VOREVGSU5FRAkJCTB4MjAwCisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9NSUNST1BIT05FCQkJMHgyMDEKKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX0RFU0tUT1BfTUlDUk9QSE9ORQkJMHgyMDIKKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX1BFUlNPTkFMX01JQ1JPUEhPTkUJCTB4MjAzCisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9PTU5JX0RJUl9NSUNST1BIT05FCQkweDIwNAorI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfTUlDUk9QSE9ORV9BUlJBWQkJMHgyMDUKKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX1BST0NfTUlDUk9QSE9ORV9BUlJBWQkweDIwNgogCiAvKiA0LjMuMi4yIE91dHB1dCBUZXJtaW5hbCBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgdXNiX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDkgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBDU19JTlRFUkZBQ0UgZGVzY3JpcHRvciB0eXBlICovCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBPVVRQVVRfVEVSTUlOQUwgZGVzY3JpcHRvciBzdWJ0eXBlICovCkBAIC0xNTEsMjMgKzE0MiwyNCBAQAogCV9fdTggIGlUZXJtaW5hbDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIFVTQl9EVF9BQ19PVVRQVVRfVEVSTUlOQUxfU0laRQkJCQk5CisjZGVmaW5lIFVBQ19EVF9PVVRQVVRfVEVSTUlOQUxfU0laRQkJCTkKIAotI2RlZmluZSBVU0JfQUNfT1VUUFVUX1RFUk1JTkFMX1VOREVGSU5FRAkJCTB4MzAwCi0jZGVmaW5lIFVTQl9BQ19PVVRQVVRfVEVSTUlOQUxfU1BFQUtFUgkJCQkweDMwMQotI2RlZmluZSBVU0JfQUNfT1VUUFVUX1RFUk1JTkFMX0hFQURQSE9ORVMJCQkweDMwMgotI2RlZmluZSBVU0JfQUNfT1VUUFVUX1RFUk1JTkFMX0hFQURfTU9VTlRFRF9ESVNQTEFZX0FVRElPCTB4MzAzCi0jZGVmaW5lIFVTQl9BQ19PVVRQVVRfVEVSTUlOQUxfREVTS1RPUF9TUEVBS0VSCQkJMHgzMDQKLSNkZWZpbmUgVVNCX0FDX09VVFBVVF9URVJNSU5BTF9ST09NX1NQRUFLRVIJCQkweDMwNQotI2RlZmluZSBVU0JfQUNfT1VUUFVUX1RFUk1JTkFMX0NPTU1VTklDQVRJT05fU1BFQUtFUgkJMHgzMDYKLSNkZWZpbmUgVVNCX0FDX09VVFBVVF9URVJNSU5BTF9MT1dfRlJFUV9FRkZFQ1RTX1NQRUFLRVIJCTB4MzA3CisvKiBUZXJtaW5hbHMgLSAyLjMgT3V0cHV0IFRlcm1pbmFsIFR5cGVzICovCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfVU5ERUZJTkVECQkJMHgzMDAKKyNkZWZpbmUgVUFDX09VVFBVVF9URVJNSU5BTF9TUEVBS0VSCQkJMHgzMDEKKyNkZWZpbmUgVUFDX09VVFBVVF9URVJNSU5BTF9IRUFEUEhPTkVTCQkJMHgzMDIKKyNkZWZpbmUgVUFDX09VVFBVVF9URVJNSU5BTF9IRUFEX01PVU5URURfRElTUExBWV9BVURJTwkweDMwMworI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMX0RFU0tUT1BfU1BFQUtFUgkJMHgzMDQKKyNkZWZpbmUgVUFDX09VVFBVVF9URVJNSU5BTF9ST09NX1NQRUFLRVIJCTB4MzA1CisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfQ09NTVVOSUNBVElPTl9TUEVBS0VSCTB4MzA2CisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfTE9XX0ZSRVFfRUZGRUNUU19TUEVBS0VSCTB4MzA3CiAKIC8qIFNldCBiQ29udHJvbFNpemUgPSAyIGFzIGRlZmF1bHQgc2V0dGluZyAqLwotI2RlZmluZSBVU0JfRFRfQUNfRkVBVFVSRV9VTklUX1NJWkUoY2gpCQkoNyArICgoY2gpICsgMSkgKiAyKQorI2RlZmluZSBVQUNfRFRfRkVBVFVSRV9VTklUX1NJWkUoY2gpCQkoNyArICgoY2gpICsgMSkgKiAyKQogCiAvKiBBcyBhYm92ZSwgYnV0IG1vcmUgdXNlZnVsIGZvciBkZWZpbmluZyB5b3VyIG93biBkZXNjcmlwdG9yczogKi8KLSNkZWZpbmUgREVDTEFSRV9VU0JfQUNfRkVBVFVSRV9VTklUX0RFU0NSSVBUT1IoY2gpIAkJXAotc3RydWN0IHVzYl9hY19mZWF0dXJlX3VuaXRfZGVzY3JpcHRvcl8jI2NoIHsJCQlcCisjZGVmaW5lIERFQ0xBUkVfVUFDX0ZFQVRVUkVfVU5JVF9ERVNDUklQVE9SKGNoKSAJCVwKK3N0cnVjdCB1YWNfZmVhdHVyZV91bml0X2Rlc2NyaXB0b3JfIyNjaCB7CQkJXAogCV9fdTggIGJMZW5ndGg7CQkJCQkJXAogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKQEAgLTE3OSw3ICsxNzEsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKIAogLyogNC41LjIgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1c2JfYXNfaGVhZGVyX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvciB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogNyAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEFTX0dFTkVSQUwgKi8KQEAgLTE4OCwxNiArMTgwLDE3IEBACiAJX19sZTE2IHdGb3JtYXRUYWc7CQkvKiBUaGUgQXVkaW8gRGF0YSBGb3JtYXQgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIFVTQl9EVF9BU19IRUFERVJfU0laRQkJNworI2RlZmluZSBVQUNfRFRfQVNfSEVBREVSX1NJWkUJCTcKIAotI2RlZmluZSBVU0JfQVNfQVVESU9fRk9STUFUX1RZUEVfSV9VTkRFRklORUQJMHgwCi0jZGVmaW5lIFVTQl9BU19BVURJT19GT1JNQVRfVFlQRV9JX1BDTQkJMHgxCi0jZGVmaW5lIFVTQl9BU19BVURJT19GT1JNQVRfVFlQRV9JX1BDTTgJCTB4MgotI2RlZmluZSBVU0JfQVNfQVVESU9fRk9STUFUX1RZUEVfSV9JRUVFX0ZMT0FUCTB4MwotI2RlZmluZSBVU0JfQVNfQVVESU9fRk9STUFUX1RZUEVfSV9BTEFXCQkweDQKLSNkZWZpbmUgVVNCX0FTX0FVRElPX0ZPUk1BVF9UWVBFX0lfTVVMQVcJMHg1CisvKiBGb3JtYXRzIC0gQS4xLjEgQXVkaW8gRGF0YSBGb3JtYXQgVHlwZSBJIENvZGVzICovCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JX1VOREVGSU5FRAkweDAKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfUENNCQkweDEKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfUENNOAkJMHgyCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JX0lFRUVfRkxPQVQJMHgzCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JX0FMQVcJCTB4NAorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9NVUxBVwkJMHg1CiAKLXN0cnVjdCB1c2JfYXNfZm9ybWF0X3R5cGVfaV9jb250aW51b3VzX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2NvbnRpbnVvdXNfZGVzY3JpcHRvciB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogOCArIChucyAqIDMpICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogRk9STUFUX1RZUEUgKi8KQEAgLTIxMCw5ICsyMDMsOSBAQAogCV9fdTggIHRVcHBlclNhbUZyZXFbM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBVU0JfQVNfRk9STUFUX1RZUEVfSV9DT05USU5VT1VTX0RFU0NfU0laRQkxNAorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9DT05USU5VT1VTX0RFU0NfU0laRQkxNAogCi1zdHJ1Y3QgdXNiX2FzX2Zvcm1hdGVfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDggKyAobnMgKiAzKSAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEZPUk1BVF9UWVBFICovCkBAIC0yMjQsOCArMjE3LDggQEAKIAlfX3U4ICB0U2FtRnJlcVtdWzNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgREVDTEFSRV9VU0JfQVNfRk9STUFUX1RZUEVfSV9ESVNDUkVURV9ERVNDKG4pIAkJXAotc3RydWN0IHVzYl9hc19mb3JtYXRlX3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yXyMjbiB7CQlcCisjZGVmaW5lIERFQ0xBUkVfVUFDX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQyhuKSAJCVwKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yXyMjbiB7CQlcCiAJX191OCAgYkxlbmd0aDsJCQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQkJXAogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJCQkJXApAQCAtMjM3LDE4ICsyMzAsMTUgQEAKIAlfX3U4ICB0U2FtRnJlcVtuXVszXTsJCQkJCVwKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCiAKLSNkZWZpbmUgVVNCX0FTX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQ19TSVpFKG4pCSg4ICsgKG4gKiAzKSkKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQ19TSVpFKG4pCSg4ICsgKG4gKiAzKSkKIAotI2RlZmluZSBVU0JfQVNfRk9STUFUX1RZUEVfVU5ERUZJTkVECTB4MAotI2RlZmluZSBVU0JfQVNfRk9STUFUX1RZUEVfSQkJMHgxCi0jZGVmaW5lIFVTQl9BU19GT1JNQVRfVFlQRV9JSQkJMHgyCi0jZGVmaW5lIFVTQl9BU19GT1JNQVRfVFlQRV9JSUkJCTB4MworLyogRm9ybWF0cyAtIEEuMiBGb3JtYXQgVHlwZSBDb2RlcyAqLworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfVU5ERUZJTkVECTB4MAorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSQkJMHgxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSQkJMHgyCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUkJCTB4MwogCi0jZGVmaW5lIFVTQl9BU19FTkRQT0lOVF9BU1lOQwkJKDEgPDwgMikKLSNkZWZpbmUgVVNCX0FTX0VORFBPSU5UX0FEQVBUSVZFCSgyIDw8IDIpCi0jZGVmaW5lIFVTQl9BU19FTkRQT0lOVF9TWU5DCQkoMyA8PCAyKQotCi1zdHJ1Y3QgdXNiX2FzX2lzb19lbmRwb2ludF9kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfaXNvX2VuZHBvaW50X2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDcgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfRU5EUE9JTlQgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEVQX0dFTkVSQUwgKi8KQEAgLTI1NiwzMCArMjQ2LDM3IEBACiAJX191OCAgYkxvY2tEZWxheVVuaXRzOwogCV9fbGUxNiB3TG9ja0RlbGF5OwogfTsKLSNkZWZpbmUgVVNCX0FTX0lTT19FTkRQT0lOVF9ERVNDX1NJWkUJNworI2RlZmluZSBVQUNfSVNPX0VORFBPSU5UX0RFU0NfU0laRQk3CiAKLSNkZWZpbmUgRlVfQ09OVFJPTF9VTkRFRklORUQJCTB4MDAKLSNkZWZpbmUgTVVURV9DT05UUk9MCQkJMHgwMQotI2RlZmluZSBWT0xVTUVfQ09OVFJPTAkJCTB4MDIKLSNkZWZpbmUgQkFTU19DT05UUk9MCQkJMHgwMwotI2RlZmluZSBNSURfQ09OVFJPTAkJCTB4MDQKLSNkZWZpbmUgVFJFQkxFX0NPTlRST0wJCQkweDA1Ci0jZGVmaW5lIEdSQVBISUNfRVFVQUxJWkVSX0NPTlRST0wJMHgwNgotI2RlZmluZSBBVVRPTUFUSUNfR0FJTl9DT05UUk9MCQkweDA3Ci0jZGVmaW5lIERFTEFZX0NPTlRST0wJCQkweDA4Ci0jZGVmaW5lIEJBU1NfQk9PU1RfQ09OVFJPTAkJMHgwOQotI2RlZmluZSBMT1VETkVTU19DT05UUk9MCQkweDBhCisjZGVmaW5lIFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFCTB4MDEKKyNkZWZpbmUgVUFDX0VQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCisjZGVmaW5lIFVBQ19FUF9DU19BVFRSX0ZJTExfTUFYCQkweDgwCiAKLSNkZWZpbmUgRlVfTVVURQkJKDEgPDwgKE1VVEVfQ09OVFJPTCAtIDEpKQotI2RlZmluZSBGVV9WT0xVTUUJKDEgPDwgKFZPTFVNRV9DT05UUk9MIC0gMSkpCi0jZGVmaW5lIEZVX0JBU1MJCSgxIDw8IChCQVNTX0NPTlRST0wgLSAxKSkKLSNkZWZpbmUgRlVfTUlECQkoMSA8PCAoTUlEX0NPTlRST0wgLSAxKSkKLSNkZWZpbmUgRlVfVFJFQkxFCSgxIDw8IChUUkVCTEVfQ09OVFJPTCAtIDEpKQotI2RlZmluZSBGVV9HUkFQSElDX0VRCSgxIDw8IChHUkFQSElDX0VRVUFMSVpFUl9DT05UUk9MIC0gMSkpCi0jZGVmaW5lIEZVX0FVVE9fR0FJTgkoMSA8PCAoQVVUT01BVElDX0dBSU5fQ09OVFJPTCAtIDEpKQotI2RlZmluZSBGVV9ERUxBWQkoMSA8PCAoREVMQVlfQ09OVFJPTCAtIDEpKQotI2RlZmluZSBGVV9CQVNTX0JPT1NUCSgxIDw8IChCQVNTX0JPT1NUX0NPTlRST0wgLSAxKSkKLSNkZWZpbmUgRlVfTE9VRE5FU1MJKDEgPDwgKExPVURORVNTX0NPTlRST0wgLSAxKSkKKy8qIEEuMTAuMiBGZWF0dXJlIFVuaXQgQ29udHJvbCBTZWxlY3RvcnMgKi8KKyNkZWZpbmUgVUFDX0ZVX0NPTlRST0xfVU5ERUZJTkVECTB4MDAKKyNkZWZpbmUgVUFDX01VVEVfQ09OVFJPTAkJMHgwMQorI2RlZmluZSBVQUNfVk9MVU1FX0NPTlRST0wJCTB4MDIKKyNkZWZpbmUgVUFDX0JBU1NfQ09OVFJPTAkJMHgwMworI2RlZmluZSBVQUNfTUlEX0NPTlRST0wJCQkweDA0CisjZGVmaW5lIFVBQ19UUkVCTEVfQ09OVFJPTAkJMHgwNQorI2RlZmluZSBVQUNfR1JBUEhJQ19FUVVBTElaRVJfQ09OVFJPTAkweDA2CisjZGVmaW5lIFVBQ19BVVRPTUFUSUNfR0FJTl9DT05UUk9MCTB4MDcKKyNkZWZpbmUgVUFDX0RFTEFZX0NPTlRST0wJCTB4MDgKKyNkZWZpbmUgVUFDX0JBU1NfQk9PU1RfQ09OVFJPTAkJMHgwOQorI2RlZmluZSBVQUNfTE9VRE5FU1NfQ09OVFJPTAkJMHgwYQorCisjZGVmaW5lIFVBQ19GVV9NVVRFCQkoMSA8PCAoVUFDX01VVEVfQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfVk9MVU1FCQkoMSA8PCAoVUFDX1ZPTFVNRV9DT05UUk9MIC0gMSkpCisjZGVmaW5lIFVBQ19GVV9CQVNTCQkoMSA8PCAoVUFDX0JBU1NfQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfTUlECQkoMSA8PCAoVUFDX01JRF9DT05UUk9MIC0gMSkpCisjZGVmaW5lIFVBQ19GVV9UUkVCTEUJCSgxIDw8IChVQUNfVFJFQkxFX0NPTlRST0wgLSAxKSkKKyNkZWZpbmUgVUFDX0ZVX0dSQVBISUNfRVEJKDEgPDwgKFVBQ19HUkFQSElDX0VRVUFMSVpFUl9DT05UUk9MIC0gMSkpCisjZGVmaW5lIFVBQ19GVV9BVVRPX0dBSU4JKDEgPDwgKFVBQ19BVVRPTUFUSUNfR0FJTl9DT05UUk9MIC0gMSkpCisjZGVmaW5lIFVBQ19GVV9ERUxBWQkJKDEgPDwgKFVBQ19ERUxBWV9DT05UUk9MIC0gMSkpCisjZGVmaW5lIFVBQ19GVV9CQVNTX0JPT1NUCSgxIDw8IChVQUNfQkFTU19CT09TVF9DT05UUk9MIC0gMSkpCisjZGVmaW5lIFVBQ19GVV9MT1VETkVTUwkJKDEgPDwgKFVBQ19MT1VETkVTU19DT05UUk9MIC0gMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCiAKIHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMjkwLDE4ICsyODcsNiBAQAogCWludCAoKmdldCkoc3RydWN0IHVzYl9hdWRpb19jb250cm9sICpjb24sIHU4IGNtZCk7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBnZW5lcmljX3NldF9jbWQoc3RydWN0IHVzYl9hdWRpb19jb250cm9sICpjb24sIHU4IGNtZCwgaW50IHZhbHVlKQotewotCWNvbi0+ZGF0YVtjbWRdID0gdmFsdWU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ2VuZXJpY19nZXRfY21kKHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCAqY29uLCB1OCBjbWQpCi17Ci0JcmV0dXJuIGNvbi0+ZGF0YVtjbWRdOwotfQotCiBzdHJ1Y3QgdXNiX2F1ZGlvX2NvbnRyb2xfc2VsZWN0b3IgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNvbnRyb2w7CkBAIC0zMTEsNCArMjk2LDYgQEAKIAlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpkZXNjOwogfTsKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9fTElOVVhfVVNCX0FVRElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKaW5kZXggOTMyMjM2My4uOTQwMTJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKQEAgLTI1OCw2ICsyNTgsOCBAQAogI2RlZmluZSBVU0JfQ0xBU1NfQVBQX1NQRUMJCTB4ZmUKICNkZWZpbmUgVVNCX0NMQVNTX1ZFTkRPUl9TUEVDCQkweGZmCiAKKyNkZWZpbmUgVVNCX1NVQkNMQVNTX1ZFTkRPUl9TUEVDCTB4ZmYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogVVNCX0RUX0NPTkZJRzogQ29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIGluZm9ybWF0aW9uLgpAQCAtMzQ4LDYgKzM1MCwxMiBAQAogI2RlZmluZSBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0sJMHgwZgkvKiBpbiBiRW5kcG9pbnRBZGRyZXNzICovCiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9ESVJfTUFTSwkJMHg4MAogCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DVFlQRQkJMHgwYworI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ19OT05FCQkoMCA8PCAyKQorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ19BU1lOQwkJKDEgPDwgMikKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NZTkNfQURBUFRJVkUJKDIgPDwgMikKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NZTkNfU1lOQwkJKDMgPDwgMikKKwogI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSwkweDAzCS8qIGluIGJtQXR0cmlidXRlcyAqLwogI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MCTAKICNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfSVNPQwkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaCBiL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfZGVmLmgKaW5kZXggNWI4OGUzNi4uYWY0Yjg2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oCkBAIC0xMDUsNiArMTA1LDcgQEAKICNkZWZpbmUgUE9SVF9XS0RJU0NfRQkoMTw8MjEpCQkvKiB3YWtlIG9uIGRpc2Nvbm5lY3QgKGVuYWJsZSkgKi8KICNkZWZpbmUgUE9SVF9XS0NPTk5fRQkoMTw8MjApCQkvKiB3YWtlIG9uIGNvbm5lY3QgKGVuYWJsZSkgKi8KIC8qIDE5OjE2IGZvciBwb3J0IHRlc3RpbmcgKi8KKyNkZWZpbmUgUE9SVF9URVNUX1BLVAkoMHg0PDwxNikJLyogUG9ydCBUZXN0IENvbnRyb2wgLSBwYWNrZXQgdGVzdCAqLwogI2RlZmluZSBQT1JUX0xFRF9PRkYJKDA8PDE0KQogI2RlZmluZSBQT1JUX0xFRF9BTUJFUgkoMTw8MTQpCiAjZGVmaW5lIFBPUlRfTEVEX0dSRUVOCSgyPDwxNCkKQEAgLTEzMiw2ICsxMzMsMTkgQEAKICNkZWZpbmUgVVNCTU9ERV9DTV9IQwkoMzw8MCkJCS8qIGhvc3QgY29udHJvbGxlciBtb2RlICovCiAjZGVmaW5lIFVTQk1PREVfQ01fSURMRQkoMDw8MCkJCS8qIGlkbGUgc3RhdGUgKi8KIAorLyogTW9vcmVzdG93biBoYXMgc29tZSBub24tc3RhbmRhcmQgcmVnaXN0ZXJzLCBwYXJ0aWFsbHkgZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAqIGl0cyBFSENJIGNvbnRyb2xsZXIgaGFzIGJvdGggVFQgYW5kIExQTSBzdXBwb3J0LiBIT1NUUEN4IGFyZSBleHRlbnRpb25zIHRvCisgKiBQT1JUU0N4CisgKi8KKyNkZWZpbmUgSE9TVFBDMAkJMHg4NAkJLyogSE9TVFBDIGV4dGVuc2lvbiAqLworI2RlZmluZSBIT1NUUENfUEhDRAkoMTw8MjIpCQkvKiBQaHkgY2xvY2sgZGlzYWJsZSAqLworI2RlZmluZSBIT1NUUENfUFNQRAkoMzw8MjUpCQkvKiBQb3J0IHNwZWVkIGRldGVjdGlvbiAqLworI2RlZmluZSBVU0JNT0RFX0VYCTB4YzgJCS8qIFVTQiBEZXZpY2UgbW9kZSBleHRlbnNpb24gKi8KKyNkZWZpbmUgVVNCTU9ERV9FWF9WQlBTCSgxPDw1KQkJLyogVkJ1cyBQb3dlciBTZWxlY3QgT24gKi8KKyNkZWZpbmUgVVNCTU9ERV9FWF9IQwkoMzw8MCkJCS8qIGhvc3QgY29udHJvbGxlciBtb2RlICovCisjZGVmaW5lIFRYRklMTFRVTklORwkweDI0CQkvKiBUWCBGSUZPIFR1bmluZyByZWdpc3RlciAqLworI2RlZmluZSBUWEZJRk9fREVGQVVMVAkoODw8MTYpCQkvKiBGSUZPIGJ1cnN0IHRocmVzaG9sZCA4ICovCisKIC8qIEFwcGVuZGl4IEMsIERlYnVnIHBvcnQgLi4uIGludGVuZGVkIGZvciB1c2Ugd2l0aCBzcGVjaWFsICJkZWJ1ZyBkZXZpY2VzIgogICogdGhhdCBjYW4gaGVscCBpZiB0aGVyZSdzIG5vIHNlcmlhbCBjb25zb2xlLiAgKG5vbnN0YW5kYXJkIGVudW1lcmF0aW9uLikKICAqLwpAQCAtMTU3LDQgKzE3MSwyNSBAQAogI2RlZmluZSBEQkdQX0VQQUREUihkZXYsIGVwKQkoKChkZXYpPDw4KXwoZXApKQogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1AKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CitleHRlcm4gaW50IF9faW5pdCBlYXJseV9kYmdwX2luaXQoY2hhciAqcyk7CitleHRlcm4gc3RydWN0IGNvbnNvbGUgZWFybHlfZGJncF9jb25zb2xlOworI2VuZGlmIC8qIENPTkZJR19FQVJMWV9QUklOVEtfREJHUCAqLworCisjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQCisvKiBDYWxsIGJhY2tzIGZyb20gZWhjaSBob3N0IGRyaXZlciB0byBlaGNpIGRlYnVnIGRyaXZlciAqLworZXh0ZXJuIGludCBkYmdwX2V4dGVybmFsX3N0YXJ0dXAodm9pZCk7CitleHRlcm4gaW50IGRiZ3BfcmVzZXRfcHJlcCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBkYmdwX3Jlc2V0X3ByZXAodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCh2b2lkKQoreworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogX19MSU5VWF9VU0JfRUhDSV9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvaXNwMTM2Mi5oIGIvaW5jbHVkZS9saW51eC91c2IvaXNwMTM2Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MjY4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9pc3AxMzYyLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGJvYXJkIGluaXRpYWxpemF0aW9uIGNvZGUgc2hvdWxkIHB1dCBvbmUgb2YgdGhlc2UgaW50byBkZXYtPnBsYXRmb3JtX2RhdGEKKyAqIGFuZCBwbGFjZSB0aGUgaXNwMTM2MiBvbnRvIHBsYXRmb3JtX2J1cy4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX0lTUDEzNjJfSF9fCisjZGVmaW5lIF9fTElOVVhfVVNCX0lTUDEzNjJfSF9fCisKK3N0cnVjdCBpc3AxMzYyX3BsYXRmb3JtX2RhdGEgeworCS8qIEVuYWJsZSBpbnRlcm5hbCBwdWxsZG93biByZXNpc3RvcnMgb24gZG93bnN0cmVhbSBwb3J0cyAqLworCXVuc2lnbmVkIHNlbDE1S3JlczoxOworCS8qIENsb2NrIGNhbm5vdCBiZSBzdG9wcGVkICovCisJdW5zaWduZWQgY2xrbm90c3RvcDoxOworCS8qIE9uLWNoaXAgb3ZlcmN1cnJlbnQgcHJvdGVjdGlvbiAqLworCXVuc2lnbmVkIG9jX2VuYWJsZToxOworCS8qIElOVCBvdXRwdXQgcG9sYXJpdHkgKi8KKwl1bnNpZ25lZCBpbnRfYWN0X2hpZ2g6MTsKKwkvKiBJTlQgZWRnZSBvciBsZXZlbCB0cmlnZ2VyZWQgKi8KKwl1bnNpZ25lZCBpbnRfZWRnZV90cmlnZ2VyZWQ6MTsKKwkvKiBEUkVRIG91dHB1dCBwb2xhcml0eSAqLworCXVuc2lnbmVkIGRyZXFfYWN0X2hpZ2g6MTsKKwkvKiBEQUNLIGlucHV0IHBvbGFyaXR5ICovCisJdW5zaWduZWQgZGFja19hY3RfaGlnaDoxOworCS8qIGNoaXAgY2FuIGJlIHJlc3VtZWQgdmlhIEhfV0FLRVVQIHBpbiAqLworCXVuc2lnbmVkIHJlbW90ZV93YWtldXBfY29ubmVjdGVkOjE7CisJLyogU3dpdGNoIG9yIG5vdCB0byBzd2l0Y2ggKGtlZXAgYWx3YXlzIHBvd2VyZWQpICovCisJdW5zaWduZWQgbm9fcG93ZXJfc3dpdGNoaW5nOjE7CisJLyogR2FuZ2VkIHBvcnQgcG93ZXIgc3dpdGNoaW5nICgwKSBvciBpbmRpdmlkdWFsIHBvcnQgcG93ZXIgc3dpdGNoaW5nICgxKSAqLworCXVuc2lnbmVkIHBvd2VyX3N3aXRjaGluZ19tb2RlOjE7CisJLyogR2l2ZW4gcG9ydF9wb3dlciwgbXNlYy8yIGFmdGVyIHBvd2VyIG9uIHRpbGwgcG93ZXIgZ29vZCAqLworCXU4IHBvdHBnOworCS8qIEhhcmR3YXJlIHJlc2V0IHNldC9jbGVhciAqLworCXZvaWQgKCpyZXNldCkgKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNldCk7CisJLyogQ2xvY2sgc3RhcnQvc3RvcCAqLworCXZvaWQgKCpjbG9jaykgKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHN0YXJ0KTsKKwkvKiBJbnRlci1pbyBkZWxheSAobnMpLiBUaGUgY2hpcCBpcyBwaWNreSBhYm91dCBhY2Nlc3MgdGltaW5nczsgaXQKKwkgKiBleHBlY3RzIGF0IGxlYXN0OgorCSAqIDExMG5zIGRlbGF5IGJldHdlZW4gY29uc2VjdXRpdmUgYWNjZXNzZXMgdG8gREFUQV9SRUcsCisJICogMzAwbnMgZGVsYXkgYmV0d2VlbiBhY2Nlc3MgdG8gQUREUl9SRUcgYW5kIERBVEFfUkVHIChyZWdpc3RlcnMpCisJICogNDYybnMgZGVsYXkgYmV0d2VlbiBhY2Nlc3MgdG8gQUREUl9SRUcgYW5kIERBVEFfUkVHIChidWZmZXIgbWVtb3J5KQorCSAqIFdFIE1VU1QgTk9UIGJlIGFjdGl2YXRlZCBkdXJpbmcgdGhlc2UgaW50ZXJ2YWxzIChldmVuIHdpdGhvdXQgQ1MhKQorCSAqLworCXZvaWQgKCpkZWxheSkgKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5KTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvaXNwMTc2MC5oIGIvaW5jbHVkZS9saW51eC91c2IvaXNwMTc2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2RlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9pc3AxNzYwLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGJvYXJkIGluaXRpYWxpemF0aW9uIHNob3VsZCBwdXQgb25lIG9mIHRoZXNlIGludG8gZGV2LT5wbGF0Zm9ybV9kYXRhCisgKiBhbmQgcGxhY2UgdGhlIGlzcDE3NjAgb250byBwbGF0Zm9ybV9idXMgbmFtZWQgImlzcDE3NjAtaGNkIi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX0lTUDE3NjBfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9JU1AxNzYwX0gKKworc3RydWN0IGlzcDE3NjBfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaXNfaXNwMTc2MToxOwkJCS8qIENoaXAgaXMgSVNQMTc2MSAqLworCXVuc2lnbmVkIGJ1c193aWR0aF8xNjoxOwkJLyogMTYvMzItYml0IGRhdGEgYnVzIHdpZHRoICovCisJdW5zaWduZWQgcG9ydDFfb3RnOjE7CQkJLyogUG9ydCAxIHN1cHBvcnRzIE9URyAqLworCXVuc2lnbmVkIGFuYWxvZ19vYzoxOwkJCS8qIEFuYWxvZyBvdmVyY3VycmVudCAqLworCXVuc2lnbmVkIGRhY2tfcG9sYXJpdHlfaGlnaDoxOwkJLyogREFDSyBhY3RpdmUgaGlnaCAqLworCXVuc2lnbmVkIGRyZXFfcG9sYXJpdHlfaGlnaDoxOwkJLyogRFJFUSBhY3RpdmUgaGlnaCAqLworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfVVNCX0lTUDE3NjBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCAwZWM1MGJhLi5jMTdlYjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtNTksNiArNTksNyBAQAogICogQGJ1bGtfb3V0X2J1ZmZlcjogcG9pbnRlciB0byB0aGUgYnVsayBvdXQgYnVmZmVyIGZvciB0aGlzIHBvcnQuCiAgKiBAYnVsa19vdXRfc2l6ZTogdGhlIHNpemUgb2YgdGhlIGJ1bGtfb3V0X2J1ZmZlciwgaW4gYnl0ZXMuCiAgKiBAd3JpdGVfdXJiOiBwb2ludGVyIHRvIHRoZSBidWxrIG91dCBzdHJ1Y3QgdXJiIGZvciB0aGlzIHBvcnQuCisgKiBAd3JpdGVfZmlmbzoga2ZpZm8gdXNlZCB0byBidWZmZXIgb3V0Z29pbmcgZGF0YQogICogQHdyaXRlX3VyYl9idXN5OiBwb3J0YHMgd3JpdGluZyBzdGF0dXMKICAqIEBidWxrX291dF9lbmRwb2ludEFkZHJlc3M6IGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBidWxrIG91dCBwaXBlIGZvciB0aGlzCiAgKglwb3J0LgpAQCAtOTYsNiArOTcsNyBAQAogCXVuc2lnbmVkIGNoYXIJCSpidWxrX291dF9idWZmZXI7CiAJaW50CQkJYnVsa19vdXRfc2l6ZTsKIAlzdHJ1Y3QgdXJiCQkqd3JpdGVfdXJiOworCXN0cnVjdCBrZmlmbwkJKndyaXRlX2ZpZm87CiAJaW50CQkJd3JpdGVfdXJiX2J1c3k7CiAJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKIApAQCAtMjM4LDkgKzI0MCw4IEBACiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIAogCS8qIHNlcmlhbCBmdW5jdGlvbiBjYWxscyAqLwotCS8qIENhbGxlZCBieSBjb25zb2xlIHdpdGggdHR5ID0gTlVMTCBhbmQgYnkgdHR5ICovCi0JaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CisJLyogQ2FsbGVkIGJ5IGNvbnNvbGUgYW5kIGJ5IHRoZSB0dHkgbGF5ZXIgKi8KKwlpbnQgICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiAJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIAlpbnQgICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC0yNjEsNiArMjYyLDkgQEAKIAkgICBiZSBhbiBhdHRhY2hlZCB0dHkgYXQgdGhpcyBwb2ludCAqLwogCXZvaWQgKCpkdHJfcnRzKShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pOwogCWludCAgKCpjYXJyaWVyX3JhaXNlZCkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisJLyogQ2FsbGVkIGJ5IHRoZSB1c2Igc2VyaWFsIGhvb2tzIHRvIGFsbG93IHRoZSB1c2VyIHRvIHJld29yayB0aGUKKwkgICB0ZXJtaW9zIHN0YXRlICovCisJdm9pZCAoKmluaXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJLyogVVNCIGV2ZW50cyAqLwogCXZvaWQgKCpyZWFkX2ludF9jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiKTsKIAl2b2lkICgqd3JpdGVfaW50X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICp1cmIpOwpAQCAtMzAwLDcgKzMwNCw3IEBACiBleHRlcm4gc3RydWN0IHVzYl9zZXJpYWwgKnVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KHVuc2lnbmVkIGludCBtaW5vcik7CiBleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX3B1dChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CiBleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAppbmRleCAwMDQ0ZDliLi5iMmE3ZDhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKQEAgLTc3LDYgKzc3LDcgQEAKIAogI2RlZmluZSBVU0JERVZGU19VUkJfU0hPUlRfTk9UX09LCTB4MDEKICNkZWZpbmUgVVNCREVWRlNfVVJCX0lTT19BU0FQCQkweDAyCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9CVUxLX0NPTlRJTlVBVElPTgkweDA0CiAjZGVmaW5lIFVTQkRFVkZTX1VSQl9OT19GU0JSCQkweDIwCiAjZGVmaW5lIFVTQkRFVkZTX1VSQl9aRVJPX1BBQ0tFVAkweDQwCiAjZGVmaW5lIFVTQkRFVkZTX1VSQl9OT19JTlRFUlJVUFQJMHg4MApAQCAtMTc1LDQgKzE3Niw2IEBACiAjZGVmaW5lIFVTQkRFVkZTX0NMRUFSX0hBTFQgICAgICAgIF9JT1IoJ1UnLCAyMSwgdW5zaWduZWQgaW50KQogI2RlZmluZSBVU0JERVZGU19ESVNDT05ORUNUICAgICAgICBfSU8oJ1UnLCAyMikKICNkZWZpbmUgVVNCREVWRlNfQ09OTkVDVCAgICAgICAgICAgX0lPKCdVJywgMjMpCisjZGVmaW5lIFVTQkRFVkZTX0NMQUlNX1BPUlQgICAgICAgIF9JT1IoJ1UnLCAyNCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19SRUxFQVNFX1BPUlQgICAgICBfSU9SKCdVJywgMjUsIHVuc2lnbmVkIGludCkKICNlbmRpZiAvKiBfTElOVVhfVVNCREVWSUNFX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmdhYXJiLmggYi9pbmNsdWRlL2xpbnV4L3ZnYWFyYi5oCmluZGV4IGU4MWM2NGEuLjkyM2Y5MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmdhYXJiLmgKKysrIGIvaW5jbHVkZS9saW51eC92Z2FhcmIuaApAQCAtNDEsNyArNDEsNyBAQAogICogICAgIGludGVycnVwdHMgYXQgYW55IHRpbWUuCiAgKi8KIGV4dGVybiB2b2lkIHZnYV9zZXRfbGVnYWN5X2RlY29kaW5nKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQkJCQkJdW5zaWduZWQgaW50IGRlY29kZXMpOworCQkJCSAgICB1bnNpZ25lZCBpbnQgZGVjb2Rlcyk7CiAKIC8qKgogICogICAgIHZnYV9nZXQgICAgICAgICAtIGFjcXVpcmUgJiBsb2NrcyBWR0EgcmVzb3VyY2VzCkBAIC0xOTMsOCArMTkzLDE3IEBACiAgKiBUaGV5IGRyaXZlciB3aWxsIGdldCBhIGNhbGxiYWNrIHdoZW4gVkdBIGFyYml0cmF0aW9uIGlzIGZpcnN0IHVzZWQKICAqIGJ5IHVzZXJzcGFjZSBzaW5jZSB3ZSBzb21lIG9sZGVyIFggc2VydmVycyBoYXZlIGlzc3Vlcy4KICAqLworI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9BUkIpCiBpbnQgdmdhX2NsaWVudF9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqY29va2llLAogCQkJdm9pZCAoKmlycV9zZXRfc3RhdGUpKHZvaWQgKmNvb2tpZSwgYm9vbCBzdGF0ZSksCiAJCQl1bnNpZ25lZCBpbnQgKCpzZXRfdmdhX2RlY29kZSkodm9pZCAqY29va2llLCBib29sIHN0YXRlKSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdmdhX2NsaWVudF9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqY29va2llLAorCQkJCSAgICAgIHZvaWQgKCppcnFfc2V0X3N0YXRlKSh2b2lkICpjb29raWUsIGJvb2wgc3RhdGUpLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAoKnNldF92Z2FfZGVjb2RlKSh2b2lkICpjb29raWUsIGJvb2wgc3RhdGUpKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9WR0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggMzY4OWQ3ZC4uYjU5ZTc4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC05MTAsOSArOTEwLDEwIEBACiAJVjRMMl9DT0xPUkZYX1NFUElBCT0gMiwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX0FVVE9CUklHSFRORVNTCQkJKFY0TDJfQ0lEX0JBU0UrMzIpCisjZGVmaW5lIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIJCShWNEwyX0NJRF9CQVNFKzMzKQogCiAvKiBsYXN0IENJRCArIDEgKi8KLSNkZWZpbmUgVjRMMl9DSURfTEFTVFAxICAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzMzKQorI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzQpCiAKIC8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgCQkJKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW8uaAppbmRleCA0ZmNhNGY1Li4wNTdhMmUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKQEAgLTM0LDcgKzM0LDcgQEAKICAqCW91dF9udW06IHRoZSBudW1iZXIgb2Ygc2cgcmVhZGFibGUgYnkgb3RoZXIgc2lkZQogICoJaW5fbnVtOiB0aGUgbnVtYmVyIG9mIHNnIHdoaWNoIGFyZSB3cml0YWJsZSAoYWZ0ZXIgcmVhZGFibGUgb25lcykKICAqCWRhdGE6IHRoZSB0b2tlbiBpZGVudGlmeWluZyB0aGUgYnVmZmVyLgotICogICAgICBSZXR1cm5zIDAgb3IgYW4gZXJyb3IuCisgKiAgICAgIFJldHVybnMgcmVtYWluaW5nIGNhcGFjaXR5IG9mIHF1ZXVlIChzZyBzZWdtZW50cykgb3IgYSBuZWdhdGl2ZSBlcnJvci4KICAqIEBraWNrOiB1cGRhdGUgYWZ0ZXIgYWRkX2J1ZgogICoJdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlCiAgKglBZnRlciBvbmUgb3IgbW9yZSBhZGRfYnVmIGNhbGxzLCBpbnZva2UgdGhpcyB0byBraWNrIHRoZSBvdGhlciBzaWRlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKaW5kZXggYjNjNGE2MC4uZWE3MjI2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCkBAIC00LDggKzQsNiBAQAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCi0vKiBUaGUgSUQgZm9yIHZpcnRpbyBjb25zb2xlICovCi0jZGVmaW5lIFZJUlRJT19JRF85UAk5CiAvKiBNYXhpbXVtIG51bWJlciBvZiB2aXJ0aW8gY2hhbm5lbHMgcGVyIHBhcnRpdGlvbiAoMSBmb3Igbm93KSAqLwogI2RlZmluZSBNQVhfOVBfQ0hBTgkxCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAppbmRleCA4NzI2ZmY3Li4wOWQ3MzAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCkBAIC00LDkgKzQsNiBAQAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCi0vKiBUaGUgSUQgZm9yIHZpcnRpb19iYWxsb29uICovCi0jZGVmaW5lIFZJUlRJT19JRF9CQUxMT09OCTUKLQogLyogVGhlIGZlYXR1cmUgYml0bWFwIGZvciB2aXJ0aW8gYmFsbG9vbiAqLwogI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9GX01VU1RfVEVMTF9IT1NUCTAgLyogVGVsbCBiZWZvcmUgcmVjbGFpbWluZyBwYWdlcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDhkYWI5ZjIuLjE1Y2I2NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC01LDkgKzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCi0vKiBUaGUgSUQgZm9yIHZpcnRpb19ibG9jayAqLwotI2RlZmluZSBWSVJUSU9fSURfQkxPQ0sJMgotCiAvKiBGZWF0dXJlIGJpdHMgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0JBUlJJRVIJMAkvKiBEb2VzIGhvc3Qgc3VwcG9ydCBiYXJyaWVycz8gKi8KICNkZWZpbmUgVklSVElPX0JMS19GX1NJWkVfTUFYCTEJLyogSW5kaWNhdGVzIG1heGltdW0gc2VnbWVudCBzaXplICovCkBAIC0xNyw2ICsxNCw3IEBACiAjZGVmaW5lIFZJUlRJT19CTEtfRl9CTEtfU0laRQk2CS8qIEJsb2NrIHNpemUgb2YgZGlzayBpcyBhdmFpbGFibGUqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfU0NTSQk3CS8qIFN1cHBvcnRzIHNjc2kgY29tbWFuZCBwYXNzdGhydSAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfSURFTlRJRlkJOAkvKiBBVEEgSURFTlRJRlkgc3VwcG9ydGVkICovCisjZGVmaW5lIFZJUlRJT19CTEtfRl9GTFVTSAk5CS8qIENhY2hlIGZsdXNoIGNvbW1hbmQgc3VwcG9ydCAqLwogCiAjZGVmaW5lIFZJUlRJT19CTEtfSURfQllURVMJKHNpemVvZihfX3UxNlsyNTZdKSkJLyogSURFTlRJRlkgREFUQSAqLwogCkBAIC0zOCw2ICszNiwxNyBAQAogCV9fdTggaWRlbnRpZnlbVklSVElPX0JMS19JRF9CWVRFU107CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisvKgorICogQ29tbWFuZCB0eXBlcworICoKKyAqIFVzYWdlIGlzIGEgYml0IHRyaWNreSBhcyBzb21lIGJpdHMgYXJlIHVzZWQgYXMgZmxhZ3MgYW5kIHNvbWUgYXJlIG5vdC4KKyAqCisgKiBSdWxlczoKKyAqICAgVklSVElPX0JMS19UX09VVCBtYXkgYmUgY29tYmluZWQgd2l0aCBWSVJUSU9fQkxLX1RfU0NTSV9DTUQgb3IKKyAqICAgVklSVElPX0JMS19UX0JBUlJJRVIuICBWSVJUSU9fQkxLX1RfRkxVU0ggaXMgYSBjb21tYW5kIG9mIGl0cyBvd24KKyAqICAgYW5kIG1heSBub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGZsYWdzLgorICovCisKIC8qIFRoZXNlIHR3byBkZWZpbmUgZGlyZWN0aW9uLiAqLwogI2RlZmluZSBWSVJUSU9fQkxLX1RfSU4JCTAKICNkZWZpbmUgVklSVElPX0JMS19UX09VVAkxCkBAIC00NSw2ICs1NCw5IEBACiAvKiBUaGlzIGJpdCBzYXlzIGl0J3MgYSBzY3NpIGNvbW1hbmQsIG5vdCBhbiBhY3R1YWwgcmVhZCBvciB3cml0ZS4gKi8KICNkZWZpbmUgVklSVElPX0JMS19UX1NDU0lfQ01ECTIKIAorLyogQ2FjaGUgZmx1c2ggY29tbWFuZCAqLworI2RlZmluZSBWSVJUSU9fQkxLX1RfRkxVU0gJNAorCiAvKiBCYXJyaWVyIGJlZm9yZSB0aGlzIG9wLiAqLwogI2RlZmluZSBWSVJUSU9fQkxLX1RfQkFSUklFUgkweDgwMDAwMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKaW5kZXggZTU0N2UzYy4uMDA5M2RkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKQEAgLTEwOSw4ICsxMDksNyBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBmYml0KQogewogCS8qIERpZCB5b3UgZm9yZ2V0IHRvIGZpeCBhc3N1bXB0aW9ucyBvbiBtYXggZmVhdHVyZXM/ICovCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZiaXQpKQotCQlCVUlMRF9CVUdfT04oZmJpdCA+PSAzMik7CisJTUFZQkVfQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOwogCiAJaWYgKGZiaXQgPCBWSVJUSU9fVFJBTlNQT1JUX0ZfU1RBUlQpCiAJCXZpcnRpb19jaGVja19kcml2ZXJfb2ZmZXJlZF9mZWF0dXJlKHZkZXYsIGZiaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGRjMTYxMTEuLmI1ZjUxOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTUsOSArNSw2IEBACiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAKLS8qIFRoZSBJRCBmb3IgdmlydGlvIGNvbnNvbGUgKi8KLSNkZWZpbmUgVklSVElPX0lEX0NPTlNPTEUJMwotCiAvKiBGZWF0dXJlIGJpdHMgKi8KICNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9TSVpFCTAJLyogRG9lcyBob3N0IHByb3ZpZGUgY29uc29sZSBzaXplPyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19pZHMuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjYwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19pZHMuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9MSU5VWF9WSVJUSU9fSURTX0gKKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19JRFNfSAorLyoKKyAqIFZpcnRpbyBJRHMKKyAqCisgKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAorICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKi8KKworI2RlZmluZSBWSVJUSU9fSURfTkVUCQkxIC8qIHZpcnRpbyBuZXQgKi8KKyNkZWZpbmUgVklSVElPX0lEX0JMT0NLCQkyIC8qIHZpcnRpbyBibG9jayAqLworI2RlZmluZSBWSVJUSU9fSURfQ09OU09MRQkzIC8qIHZpcnRpbyBjb25zb2xlICovCisjZGVmaW5lIFZJUlRJT19JRF9STkcJCTQgLyogdmlydGlvIHJpbmcgKi8KKyNkZWZpbmUgVklSVElPX0lEX0JBTExPT04JNSAvKiB2aXJ0aW8gYmFsbG9vbiAqLworI2RlZmluZSBWSVJUSU9fSURfOVAJCTkgLyogOXAgdmlydGlvIGNvbnNvbGUgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fSURTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKaW5kZXggZDhkZDUzOS4uMWY0MTczNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKQEAgLTYsOSArNiw2IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKLS8qIFRoZSBJRCBmb3IgdmlydGlvX25ldCAqLwotI2RlZmluZSBWSVJUSU9fSURfTkVUCTEKLQogLyogVGhlIGZlYXR1cmUgYml0bWFwIGZvciB2aXJ0aW8gbmV0ICovCiAjZGVmaW5lIFZJUlRJT19ORVRfRl9DU1VNCTAJLyogSG9zdCBoYW5kbGVzIHBrdHMgdy8gcGFydGlhbCBjc3VtICovCiAjZGVmaW5lIFZJUlRJT19ORVRfRl9HVUVTVF9DU1VNCTEJLyogR3Vlc3QgaGFuZGxlcyBwa3RzIHcvIHBhcnRpYWwgY3N1bSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaAppbmRleCAxYTg1ZGFiLi40ODEyMWMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaApAQCAtNCw3ICs0LDQgQEAKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAotLyogVGhlIElEIGZvciB2aXJ0aW9fcm5nICovCi0jZGVmaW5lIFZJUlRJT19JRF9STkcJNAotCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19STkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKaW5kZXggODFhOTdjZi4uMmQwZjIyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC0xNjYsMTUgKzE2Niw4IEBACiAJcmV0dXJuIHg7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdsb2JhbF9scnVfcGFnZXModm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6b25lX2xydV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSkKLXsKLQlyZXR1cm4gKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfQU5PTikKLQkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUpCi0JCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pCi0JCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpKTsKLX0KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcyh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpOwogCiAjaWZkZWYgQ09ORklHX05VTUEKIC8qCkBAIC0yMTAsMTEgKzIwMyw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCi0jZGVmaW5lIF9fYWRkX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgX19kKQlcCi0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgX19kKQotI2RlZmluZSBfX3N1Yl96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkJXAotCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksLShfX2QpKQotCiAjZGVmaW5lIGFkZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkgbW9kX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgX19kKQogI2RlZmluZSBzdWJfem9uZV9wYWdlX3N0YXRlKF9feiwgX19pLCBfX2QpIG1vZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIC0oX19kKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dC5oIGIvaW5jbHVkZS9saW51eC92dC5oCmluZGV4IDAyYzFjMDIuLjdhZmNhMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0LmgKQEAgLTEsMTcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfVlRfSAogI2RlZmluZSBfTElOVVhfVlRfSAogCi0jaWZkZWYgX19LRVJORUxfXwotc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwotCi1zdHJ1Y3QgdnRfbm90aWZpZXJfcGFyYW0gewotCXN0cnVjdCB2Y19kYXRhICp2YzsJLyogVkMgb24gd2hpY2ggdGhlIHVwZGF0ZSBoYXBwZW5lZCAqLwotCXVuc2lnbmVkIGludCBjOwkJLyogUHJpbnRlZCBjaGFyICovCi19OwotCi1leHRlcm4gaW50IHJlZ2lzdGVyX3Z0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotZXh0ZXJuIGludCB1bnJlZ2lzdGVyX3Z0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotI2VuZGlmCiAKIC8qCiAgKiBUaGVzZSBjb25zdGFudHMgYXJlIGFsc28gdXNlZnVsIGZvciB1c2VyLWxldmVsIGFwcHMgKGUuZy4sIFZDCkBAIC03NCw0ICs2MywyNSBAQAogI2RlZmluZSBWVF9VTkxPQ0tTV0lUQ0ggMHg1NjBDICAvKiBhbGxvdyB2dCBzd2l0Y2hpbmcgKi8KICNkZWZpbmUgVlRfR0VUSElGT05UTUFTSyAweDU2MEQgIC8qIHJldHVybiBoaSBmb250IG1hc2sgKi8KIAorc3RydWN0IHZ0X2V2ZW50IHsKKwl1bnNpZ25lZCBpbnQgZXZlbnQ7CisjZGVmaW5lIFZUX0VWRU5UX1NXSVRDSAkJMHgwMDAxCS8qIENvbnNvbGUgc3dpdGNoICovCisjZGVmaW5lIFZUX0VWRU5UX0JMQU5LCQkweDAwMDIJLyogU2NyZWVuIGJsYW5rICovCisjZGVmaW5lIFZUX0VWRU5UX1VOQkxBTksJMHgwMDA0CS8qIFNjcmVlbiB1bmJsYW5rICovCisjZGVmaW5lIFZUX0VWRU5UX1JFU0laRQkJMHgwMDA4CS8qIFJlc2l6ZSBkaXNwbGF5ICovCisjZGVmaW5lIFZUX01BWF9FVkVOVAkJMHgwMDBGCisJdW5zaWduZWQgaW50IG9sZDsJCS8qIE9sZCBjb25zb2xlICovCisJdW5zaWduZWQgaW50IG5ldzsJCS8qIE5ldyBjb25zb2xlIChpZiBjaGFuZ2luZykgKi8KKwl1bnNpZ25lZCBpbnQgcGFkWzRdOwkJLyogUGFkZGluZyBmb3IgZXhwYW5zaW9uICovCit9OworCisjZGVmaW5lIFZUX1dBSVRFVkVOVAkweDU2MEUJLyogV2FpdCBmb3IgYW4gZXZlbnQgKi8KKworc3RydWN0IHZ0X3NldGFjdGl2YXRlIHsKKwl1bnNpZ25lZCBpbnQgY29uc29sZTsKKwlzdHJ1Y3QgdnRfbW9kZSBtb2RlOworfTsKKworI2RlZmluZSBWVF9TRVRBQ1RJVkFURQkweDU2MEYJLyogQWN0aXZhdGUgYW5kIHNldCB0aGUgbW9kZSBvZiBhIGNvbnNvbGUgKi8KKwogI2VuZGlmIC8qIF9MSU5VWF9WVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaCBiL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oCmluZGV4IDJmMTExMzQuLmMwYzRlMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oCisrKyBiL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZV9zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGVtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCiAvKgogICogUHJlc2VudGx5LCBhIGxvdCBvZiBncmFwaGljcyBwcm9ncmFtcyBkbyBub3QgcmVzdG9yZSB0aGUgY29udGVudHMgb2YKQEAgLTkxLDcgKzkyLDggQEAKICNlbmRpZgogCiAvKiB2dC5jICovCi1pbnQgdnRfd2FpdGFjdGl2ZShpbnQgdnQpOwordm9pZCB2dF9ldmVudF9wb3N0KHVuc2lnbmVkIGludCBldmVudCwgdW5zaWduZWQgaW50IG9sZCwgdW5zaWduZWQgaW50IG5ldyk7CitpbnQgdnRfd2FpdGFjdGl2ZShpbnQgbik7CiB2b2lkIGNoYW5nZV9jb25zb2xlKHN0cnVjdCB2Y19kYXRhICpuZXdfdmMpOwogdm9pZCByZXNldF92YyhzdHJ1Y3QgdmNfZGF0YSAqdmMpOwogZXh0ZXJuIGludCB1bmJpbmRfY29uX2RyaXZlcihjb25zdCBzdHJ1Y3QgY29uc3cgKmNzdywgaW50IGZpcnN0LCBpbnQgbGFzdCwKQEAgLTExNiw0ICsxMTgsMTYgQEAKIH07CiBleHRlcm4gc3RydWN0IHZ0X3NwYXduX2NvbnNvbGUgdnRfc3Bhd25fY29uOwogCitleHRlcm4gaW50IHZ0X21vdmVfdG9fY29uc29sZSh1bnNpZ25lZCBpbnQgdnQsIGludCBhbGxvYyk7CisKKy8qIEludGVyZmFjZXMgZm9yIFZDIG5vdGlmaWNhdGlvbiBvZiBjaGFyYWN0ZXIgZXZlbnRzIChmb3IgYWNjZXNzaWJpbGl0eSBldGMpICovCisKK3N0cnVjdCB2dF9ub3RpZmllcl9wYXJhbSB7CisJc3RydWN0IHZjX2RhdGEgKnZjOwkvKiBWQyBvbiB3aGljaCB0aGUgdXBkYXRlIGhhcHBlbmVkICovCisJdW5zaWduZWQgaW50IGM7CQkvKiBQcmludGVkIGNoYXIgKi8KK307CisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfdnRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfdnRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CisKICNlbmRpZiAvKiBfVlRfS0VSTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dtOTd4eC5oIGIvaW5jbHVkZS9saW51eC93bTk3eHguaAppbmRleCAwYzk4NzgxLi4zOGU4YzRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dtOTd4eC5oCisrKyBiL2luY2x1ZGUvbGludXgvd205N3h4LmgKQEAgLTI5Myw2ICsyOTMsMjQgQEAKIAl1MTYgc3VzcGVuZF9tb2RlOyAgICAgICAgICAgICAgIC8qIFBSUCBpbiBzdXNwZW5kIG1vZGUgKi8KIH07CiAKK3N0cnVjdCB3bTk3eHhfYmF0dF9wZGF0YSB7CisJaW50CWJhdHRfYXV4OworCWludAl0ZW1wX2F1eDsKKwlpbnQJY2hhcmdlX2dwaW87CisJaW50CW1pbl92b2x0YWdlOworCWludAltYXhfdm9sdGFnZTsKKwlpbnQJYmF0dF9kaXY7CisJaW50CWJhdHRfbXVsdDsKKwlpbnQJdGVtcF9kaXY7CisJaW50CXRlbXBfbXVsdDsKKwlpbnQJYmF0dF90ZWNoOworCWNoYXIJKmJhdHRfbmFtZTsKK307CisKK3N0cnVjdCB3bTk3eHhfcGRhdGEgeworCXN0cnVjdCB3bTk3eHhfYmF0dF9wZGF0YQkqYmF0dF9wZGF0YTsJLyogYmF0dGVyeSBkYXRhICovCit9OworCiAvKgogICogQ29kZWMgR1BJTyBhY2Nlc3MgKG5vdCBzdXBwb3J0ZWQgb24gV005NzA1KQogICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQvZ2V0IGNvZGVjIEdQSU8gYW5kIFZpcnR1YWwgR1BJTyBzdGF0dXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dtOTd4eF9iYXR0LmggYi9pbmNsdWRlL2xpbnV4L3dtOTd4eF9iYXR0LmgKaW5kZXggOTY4MWQxYS4uYTFkNjQxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93bTk3eHhfYmF0dC5oCisrKyBiL2luY2x1ZGUvbGludXgvd205N3h4X2JhdHQuaApAQCAtMywyMiArMywxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvd205N3h4Lmg+CiAKLXN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIHsKLQlpbnQJYmF0dF9hdXg7Ci0JaW50CXRlbXBfYXV4OwotCWludAljaGFyZ2VfZ3BpbzsKLQlpbnQJbWluX3ZvbHRhZ2U7Ci0JaW50CW1heF92b2x0YWdlOwotCWludAliYXR0X2RpdjsKLQlpbnQJYmF0dF9tdWx0OwotCWludAl0ZW1wX2RpdjsKLQlpbnQJdGVtcF9tdWx0OwotCWludAliYXR0X3RlY2g7Ci0JY2hhcgkqYmF0dF9uYW1lOwotfTsKKyN3YXJuaW5nIFRoaXMgZmlsZSB3aWxsIGJlIHJlbW92ZWQgc29vbiwgdXNlIHdtOTd4eC5oIGluc3RlYWQhCisKKyNkZWZpbmUgd205N3h4X2JhdHRfaW5mbyB3bTk3eHhfYmF0dF9wZGF0YQogCiAjaWZkZWYgQ09ORklHX0JBVFRFUllfV005N1hYCi12b2lkIF9faW5pdCB3bTk3eHhfYmF0X3NldF9wZGF0YShzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyAqZGF0YSk7Cit2b2lkIHdtOTd4eF9iYXRfc2V0X3BkYXRhKHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvICpkYXRhKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgd205N3h4X2JhdF9zZXRfcGRhdGEoc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gKmRhdGEpIHt9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDYyNzNmYTkuLjdlZjBjN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtOTQsNyArOTQsNyBAQAogLyoKICAqIGluaXRpYWxpemUgYWxsIG9mIGEgd29yayBpdGVtIGluIG9uZSBnbwogICoKLSAqIE5PVEUhIE5vIHBvaW50IGluIHVzaW5nICJhdG9taWNfbG9uZ19zZXQoKSI6IHVzZWluZyBhIGRpcmVjdAorICogTk9URSEgTm8gcG9pbnQgaW4gdXNpbmcgImF0b21pY19sb25nX3NldCgpIjogdXNpbmcgYSBkaXJlY3QKICAqIGFzc2lnbm1lbnQgb2YgdGhlIHdvcmsgZGF0YSBpbml0aWFsaXplciBhbGxvd3MgdGhlIGNvbXBpbGVyCiAgKiB0byBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2NjZGNfdHlwZXMuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9jY2RjX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3Mzg3NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9jY2RjX3R5cGVzLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0NDRENfVFlQRVNfSAorI2RlZmluZSBfQ0NEQ19UWVBFU19ICitlbnVtIGNjZGNfcGl4Zm10IHsKKwlDQ0RDX1BJWEZNVF9SQVcsCisJQ0NEQ19QSVhGTVRfWUNCQ1JfMTZCSVQsCisJQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVAorfTsKKworZW51bSBjY2RjX2ZybWZtdCB7CisJQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCisJQ0NEQ19GUk1GTVRfSU5URVJMQUNFRAorfTsKKworLyogUElYRUwgT1JERVIgSU4gTUVNT1JZIGZyb20gTFNCIHRvIE1TQiAqLworLyogb25seSBhcHBsaWNhYmxlIGZvciA4LWJpdCBpbnB1dCBtb2RlICAqLworZW51bSBjY2RjX3BpeG9yZGVyIHsKKwlDQ0RDX1BJWE9SREVSX1lDQllDUiwKKwlDQ0RDX1BJWE9SREVSX0NCWUNSWSwKK307CisKK2VudW0gY2NkY19idWZ0eXBlIHsKKwlDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVELAorCUNDRENfQlVGVFlQRV9GTERfU0VQQVJBVEVECit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2RtMzU1X2NjZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjhhN2IxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2RtMzU1X2NjZGMuaApAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfRE0zNTVfQ0NEQ19ICisjZGVmaW5lIF9ETTM1NV9DQ0RDX0gKKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2NjZGNfdHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfdHlwZXMuaD4KKworLyogZW51bSBmb3IgTm8gb2YgcGl4ZWwgcGVyIGxpbmUgdG8gYmUgYXZnLiBpbiBCbGFjayBDbGFtcGluZyAqLworZW51bSBjY2RjX3NhbXBsZV9sZW5ndGggeworCUNDRENfU0FNUExFXzFQSVhFTFMsCisJQ0NEQ19TQU1QTEVfMlBJWEVMUywKKwlDQ0RDX1NBTVBMRV80UElYRUxTLAorCUNDRENfU0FNUExFXzhQSVhFTFMsCisJQ0NEQ19TQU1QTEVfMTZQSVhFTFMKK307CisKKy8qIGVudW0gZm9yIE5vIG9mIGxpbmVzIGluIEJsYWNrIENsYW1waW5nICovCitlbnVtIGNjZGNfc2FtcGxlX2xpbmUgeworCUNDRENfU0FNUExFXzFMSU5FUywKKwlDQ0RDX1NBTVBMRV8yTElORVMsCisJQ0NEQ19TQU1QTEVfNExJTkVTLAorCUNDRENfU0FNUExFXzhMSU5FUywKKwlDQ0RDX1NBTVBMRV8xNkxJTkVTCit9OworCisvKiBlbnVtIGZvciBBbGF3IGdhbWEgd2lkdGggKi8KK2VudW0gY2NkY19nYW1tYV93aWR0aCB7CisJQ0NEQ19HQU1NQV9CSVRTXzEzXzQsCisJQ0NEQ19HQU1NQV9CSVRTXzEyXzMsCisJQ0NEQ19HQU1NQV9CSVRTXzExXzIsCisJQ0NEQ19HQU1NQV9CSVRTXzEwXzEsCisJQ0NEQ19HQU1NQV9CSVRTXzA5XzAKK307CisKK2VudW0gY2NkY19jb2xwYXRzIHsKKwlDQ0RDX1JFRCwKKwlDQ0RDX0dSRUVOX1JFRCwKKwlDQ0RDX0dSRUVOX0JMVUUsCisJQ0NEQ19CTFVFCit9OworCitzdHJ1Y3QgY2NkY19jb2xfcGF0IHsKKwllbnVtIGNjZGNfY29scGF0cyBvbG9wOworCWVudW0gY2NkY19jb2xwYXRzIG9sZXA7CisJZW51bSBjY2RjX2NvbHBhdHMgZWxvcDsKKwllbnVtIGNjZGNfY29scGF0cyBlbGVwOworfTsKKworZW51bSBjY2RjX2RhdGFzZnQgeworCUNDRENfREFUQV9OT19TSElGVCwKKwlDQ0RDX0RBVEFfU0hJRlRfMUJJVCwKKwlDQ0RDX0RBVEFfU0hJRlRfMkJJVCwKKwlDQ0RDX0RBVEFfU0hJRlRfM0JJVCwKKwlDQ0RDX0RBVEFfU0hJRlRfNEJJVCwKKwlDQ0RDX0RBVEFfU0hJRlRfNUJJVCwKKwlDQ0RDX0RBVEFfU0hJRlRfNkJJVAorfTsKKworZW51bSBjY2RjX2RhdGFfc2l6ZSB7CisJQ0NEQ19EQVRBXzE2QklUUywKKwlDQ0RDX0RBVEFfMTVCSVRTLAorCUNDRENfREFUQV8xNEJJVFMsCisJQ0NEQ19EQVRBXzEzQklUUywKKwlDQ0RDX0RBVEFfMTJCSVRTLAorCUNDRENfREFUQV8xMUJJVFMsCisJQ0NEQ19EQVRBXzEwQklUUywKKwlDQ0RDX0RBVEFfOEJJVFMKK307CitlbnVtIGNjZGNfbWZpbHQxIHsKKwlDQ0RDX05PX01FRElBTl9GSUxURVIxLAorCUNDRENfQVZFUkFHRV9GSUxURVIxLAorCUNDRENfTUVESUFOX0ZJTFRFUjEKK307CisKK2VudW0gY2NkY19tZmlsdDIgeworCUNDRENfTk9fTUVESUFOX0ZJTFRFUjIsCisJQ0NEQ19BVkVSQUdFX0ZJTFRFUjIsCisJQ0NEQ19NRURJQU5fRklMVEVSMgorfTsKKworLyogc3RydWN0dXJlIGZvciBBTGF3ICovCitzdHJ1Y3QgY2NkY19hX2xhdyB7CisJLyogRW5hYmxlL2Rpc2FibGUgQS1MYXcgKi8KKwl1bnNpZ25lZCBjaGFyIGVuYWJsZTsKKwkvKiBHYW1hIFdpZHRoIElucHV0ICovCisJZW51bSBjY2RjX2dhbW1hX3dpZHRoIGdhbWFfd2Q7Cit9OworCisvKiBzdHJ1Y3R1cmUgZm9yIEJsYWNrIENsYW1waW5nICovCitzdHJ1Y3QgY2NkY19ibGFja19jbGFtcCB7CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgVFJVRSAqLworCXVuc2lnbmVkIGNoYXIgYl9jbGFtcF9lbmFibGU7CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgVFJVRSAqLworCWVudW0gY2NkY19zYW1wbGVfbGVuZ3RoIHNhbXBsZV9waXhlbDsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBUUlVFICovCisJZW51bSBjY2RjX3NhbXBsZV9saW5lIHNhbXBsZV9sbjsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBUUlVFICovCisJdW5zaWduZWQgc2hvcnQgc3RhcnRfcGl4ZWw7CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgRkFMU0UgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydCBkY19zdWI7Cit9OworCisvKiBzdHJ1Y3R1cmUgZm9yIEJsYWNrIExldmVsIENvbXBlbnNhdGlvbiAqLworc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uIHsKKwkvKiBDb25zdGFudCB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIFJlZCBjb21wb25lbnQgKi8KKwl1bnNpZ25lZCBjaGFyIHI7CisJLyogQ29uc3RhbnQgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBHciBjb21wb25lbnQgKi8KKwl1bnNpZ25lZCBjaGFyIGdyOworCS8qIENvbnN0YW50IHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gQmx1ZSBjb21wb25lbnQgKi8KKwl1bnNpZ25lZCBjaGFyIGI7CisJLyogQ29uc3RhbnQgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBHYiBjb21wb25lbnQgKi8KKwl1bnNpZ25lZCBjaGFyIGdiOworfTsKKworc3RydWN0IGNjZGNfZmxvYXQgeworCWludCBpbnRlZ2VyOworCXVuc2lnbmVkIGludCBkZWNpbWFsOworfTsKKworI2RlZmluZSBDQ0RDX0NTQ19DT0VGRl9UQUJMRV9TSVpFCTE2CisvKiBzdHJ1Y3R1cmUgZm9yIGNvbG9yIHNwYWNlIGNvbnZlcnRlciAqLworc3RydWN0IGNjZGNfY3NjIHsKKwl1bnNpZ25lZCBjaGFyIGVuYWJsZTsKKwkvKgorCSAqIFM4UTUuIFVzZSAyIGRlY2ltYWwgcHJlY2lzaW9uLCB1c2VyIHZhbHVlcyByYW5nZSBmcm9tIC0zLjAwIHRvIDMuOTkuCisJICogZXhhbXBsZSAtIHRvIHVzZSAxLjAzLCBzZXQgaW50ZWdlciBwYXJ0IGFzIDEsIGFuZCBkZWNpbWFsIHBhcnQgYXMgMworCSAqIHRvIHVzZSAtMS4wMywgc2V0IGludGVnZXIgcGFydCBhcyAtMSBhbmQgZGVjaW1hbCBwYXJ0IGFzIDMKKwkgKi8KKwlzdHJ1Y3QgY2NkY19mbG9hdCBjb2VmZltDQ0RDX0NTQ19DT0VGRl9UQUJMRV9TSVpFXTsKK307CisKKy8qIFN0cnVjdHVyZXMgZm9yIFZlcnRpY2FsIERlZmVjdCBDb3JyZWN0aW9uKi8KK2VudW0gY2NkY192ZGZfY3NsIHsKKwlDQ0RDX1ZERl9OT1JNQUwsCisJQ0NEQ19WREZfSE9SWl9JTlRFUlBPTF9TQVQsCisJQ0NEQ19WREZfSE9SWl9JTlRFUlBPTAorfTsKKworZW51bSBjY2RjX3ZkZl9jdWRhIHsKKwlDQ0RDX1ZERl9XSE9MRV9MSU5FX0NPUlJFQ1QsCisJQ0NEQ19WREZfVVBQRVJfRElTQUJMRQorfTsKKworZW51bSBjY2RjX2RmY19td3IgeworCUNDRENfREZDX01XUl9XUklURV9DT01QTEVURSwKKwlDQ0RDX0RGQ19XUklURV9SRUcKK307CisKK2VudW0gY2NkY19kZmNfbXJkIHsKKwlDQ0RDX0RGQ19SRUFEX0NPTVBMRVRFLAorCUNDRENfREZDX1JFQURfUkVHCit9OworCitlbnVtIGNjZGNfZGZjX21hX3JzdCB7CisJQ0NEQ19ERkNfSU5DUl9BRERSLAorCUNDRENfREZDX0NMUl9BRERSCit9OworCitlbnVtIGNjZGNfZGZjX21jbHIgeworCUNDRENfREZDX0NMRUFSX0NPTVBMRVRFLAorCUNDRENfREZDX0NMRUFSCit9OworCitzdHJ1Y3QgY2NkY19kZnRfY29ycl9jdGwgeworCWVudW0gY2NkY192ZGZfY3NsIHZkZmNzbDsKKwllbnVtIGNjZGNfdmRmX2N1ZGEgdmRmY3VkYTsKKwl1bnNpZ25lZCBpbnQgdmRmbHNmdDsKK307CisKK3N0cnVjdCBjY2RjX2RmdF9jb3JyX21lbV9jdGwgeworCWVudW0gY2NkY19kZmNfbXdyIGRmY213cjsKKwllbnVtIGNjZGNfZGZjX21yZCBkZmNtcmQ7CisJZW51bSBjY2RjX2RmY19tYV9yc3QgZGZjbWFyc3Q7CisJZW51bSBjY2RjX2RmY19tY2xyIGRmY21jbHI7Cit9OworCisjZGVmaW5lIENDRENfREZUX1RBQkxFX1NJWkUJMTYKKy8qCisgKiBNYWluIFN0cnVjdHVyZSBmb3IgdmVydGljYWwgZGVmZWN0IGNvcnJlY3Rpb24uIFZlcnRpY2FsIGRlZmVjdAorICogY29ycmVjdGlvbiBjYW4gY29ycmVjdCB1cHRvIDE2IGRlZmVjdHMgaWYgZGVmZWN0cyBsZXNzIHRoYW4gMTYKKyAqIHRoZW4gcGFkIHRoZSByZXN0IHdpdGggMAorICovCitzdHJ1Y3QgY2NkY192ZXJ0aWNhbF9kZnQgeworCXVuc2lnbmVkIGNoYXIgdmVyX2RmdF9lbjsKKwl1bnNpZ25lZCBjaGFyIGdlbl9kZnRfZW47CisJdW5zaWduZWQgaW50IHNhdHVyYXRpb25fY3RsOworCXN0cnVjdCBjY2RjX2RmdF9jb3JyX2N0bCBkZnRfY29ycl9jdGw7CisJc3RydWN0IGNjZGNfZGZ0X2NvcnJfbWVtX2N0bCBkZnRfY29ycl9tZW1fY3RsOworCWludCB0YWJsZV9zaXplOworCXVuc2lnbmVkIGludCBkZnRfY29ycl9ob3J6W0NDRENfREZUX1RBQkxFX1NJWkVdOworCXVuc2lnbmVkIGludCBkZnRfY29ycl92ZXJ0W0NDRENfREZUX1RBQkxFX1NJWkVdOworCXVuc2lnbmVkIGludCBkZnRfY29ycl9zdWIxW0NDRENfREZUX1RBQkxFX1NJWkVdOworCXVuc2lnbmVkIGludCBkZnRfY29ycl9zdWIyW0NDRENfREZUX1RBQkxFX1NJWkVdOworCXVuc2lnbmVkIGludCBkZnRfY29ycl9zdWIzW0NDRENfREZUX1RBQkxFX1NJWkVdOworfTsKKworc3RydWN0IGNjZGNfZGF0YV9vZmZzZXQgeworCXVuc2lnbmVkIGNoYXIgaG9yel9vZmZzZXQ7CisJdW5zaWduZWQgY2hhciB2ZXJ0X29mZnNldDsKK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIENDREMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciByYXcgY2FwdHVyZSBtb2RlIHBhc3NlZAorICogYnkgYXBwbGljYXRpb24KKyAqLworc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgeworCS8qIGRhdGEgc2hpZnQgdG8gYmUgYXBwbGllZCBiZWZvcmUgc3RvcmluZyAqLworCWVudW0gY2NkY19kYXRhc2Z0IGRhdGFzZnQ7CisJLyogZGF0YSBzaXplIHZhbHVlIGZyb20gOCB0byAxNiBiaXRzICovCisJZW51bSBjY2RjX2RhdGFfc2l6ZSBkYXRhX3N6OworCS8qIG1lZGlhbiBmaWx0ZXIgZm9yIHNkcmFtICovCisJZW51bSBjY2RjX21maWx0MSBtZmlsdDE7CisJZW51bSBjY2RjX21maWx0MiBtZmlsdDI7CisJLyogbG93IHBhc3MgZmlsdGVyIGVuYWJsZS9kaXNhYmxlICovCisJdW5zaWduZWQgY2hhciBscGZfZW5hYmxlOworCS8qIFRocmVzaG9sZCBvZiBtZWRpYW4gZmlsdGVyICovCisJaW50IG1lZF9maWx0X3RocmVzOworCS8qCisJICogaG9yeiBhbmQgdmVydGljYWwgZGF0YSBvZmZzZXQuIEFwcGxpYWJsZSBmb3IgZGVmZWN0IGNvcnJlY3Rpb24KKwkgKiBhbmQgbHNjCisJICovCisJc3RydWN0IGNjZGNfZGF0YV9vZmZzZXQgZGF0YV9vZmZzZXQ7CisJLyogU3RydWN0dXJlIGZvciBPcHRpb25hbCBBLUxhdyAqLworCXN0cnVjdCBjY2RjX2FfbGF3IGFsYXc7CisJLyogU3RydWN0dXJlIGZvciBPcHRpY2FsIEJsYWNrIENsYW1wICovCisJc3RydWN0IGNjZGNfYmxhY2tfY2xhbXAgYmxrX2NsYW1wOworCS8qIFN0cnVjdHVyZSBmb3IgQmxhY2sgQ29tcGVuc2F0aW9uICovCisJc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uIGJsa19jb21wOworCS8qIHN0cnV0dXJlIGZvciB2ZXJ0aWNhbCBEZWZlY3QgQ29ycmVjdGlvbiBNb2R1bGUgQ29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3ZlcnRpY2FsX2RmdCB2ZXJ0aWNhbF9kZnQ7CisJLyogc3RydWN0dXJlIGZvciBjb2xvciBzcGFjZSBjb252ZXJ0ZXIgTW9kdWxlIENvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19jc2MgY3NjOworCS8qIGNvbG9yIHBhdHRlcnMgZm9yIGJheWVyIGNhcHR1cmUgKi8KKwlzdHJ1Y3QgY2NkY19jb2xfcGF0IGNvbF9wYXRfZmllbGQwOworCXN0cnVjdCBjY2RjX2NvbF9wYXQgY29sX3BhdF9maWVsZDE7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgQ0NEQ19XSU5fUEFMCXswLCAwLCA3MjAsIDU3Nn0KKyNkZWZpbmUgQ0NEQ19XSU5fVkdBCXswLCAwLCA2NDAsIDQ4MH0KKworc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIHsKKwkvKiBwaXhlbCBmb3JtYXQgKi8KKwllbnVtIGNjZGNfcGl4Zm10IHBpeF9mbXQ7CisJLyogcHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlZCBmcmFtZSAqLworCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdDsKKwkvKiB2aWRlbyB3aW5kb3cgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IHdpbjsKKwkvKiBmaWVsZCBpZCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGZpZF9wb2w7CisJLyogdmVydGljYWwgc3luYyBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIHZkX3BvbDsKKwkvKiBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBoZF9wb2w7CisJLyogZW5hYmxlIEJULjY1NiBlbWJlZGRlZCBzeW5jIG1vZGUgKi8KKwlpbnQgYnQ2NTZfZW5hYmxlOworCS8qIGNiOnk6Y3I6eSBvciB5OmNiOnk6Y3IgaW4gbWVtb3J5ICovCisJZW51bSBjY2RjX3BpeG9yZGVyIHBpeF9vcmRlcjsKKwkvKiBpbnRlcmxlYXZlZCBvciBzZXBhcmF0ZWQgZmllbGRzICAqLworCWVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlOworfTsKKworLyogR2FpbiBhcHBsaWVkIHRvIFJhdyBCYXllciBkYXRhICovCitzdHJ1Y3QgY2NkY19nYWluIHsKKwl1bnNpZ25lZCBzaG9ydCByX3llOworCXVuc2lnbmVkIHNob3J0IGdyX2N5OworCXVuc2lnbmVkIHNob3J0IGdiX2c7CisJdW5zaWduZWQgc2hvcnQgYl9tZzsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgQ0NEQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHJhdyBjYXB0dXJlIG1vZGUgKi8KK3N0cnVjdCBjY2RjX3BhcmFtc19yYXcgeworCS8qIHBpeGVsIGZvcm1hdCAqLworCWVudW0gY2NkY19waXhmbXQgcGl4X2ZtdDsKKwkvKiBwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2VkIGZyYW1lICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIHZpZGVvIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIGlkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGhvcml6b250YWwgc3luYyBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBpbnRlcmxlYXZlZCBvciBzZXBhcmF0ZWQgZmllbGRzICovCisJZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGU7CisJLyogR2FpbiB2YWx1ZXMgKi8KKwlzdHJ1Y3QgY2NkY19nYWluIGdhaW47CisJLyogb2Zmc2V0ICovCisJdW5zaWduZWQgaW50IGNjZGNfb2Zmc2V0OworCS8qIGhvcml6b250YWwgZmxpcCBlbmFibGUgKi8KKwl1bnNpZ25lZCBjaGFyIGhvcnpfZmxpcF9lbmFibGU7CisJLyoKKwkgKiBlbmFibGUgdG8gc3RvcmUgdGhlIGltYWdlIGluIGludmVyc2Ugb3JkZXIgaW4gbWVtb3J5CisJICogKGJvdHRvbSB0byB0b3ApCisJICovCisJdW5zaWduZWQgY2hhciBpbWFnZV9pbnZlcnRfZW5hYmxlOworCS8qIENvbmZpZ3VyYWJsZSBwYXJ0IG9mIHJhdyBkYXRhICovCisJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgY29uZmlnX3BhcmFtczsKK307CisKKyNlbmRpZgorI2VuZGlmCQkJCS8qIERNMzU1X0NDRENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2RtNjQ0eF9jY2RjLmggYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG02NDR4X2NjZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE3OGViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2RtNjQ0eF9jY2RjLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX0RNNjQ0WF9DQ0RDX0gKKyNkZWZpbmUgX0RNNjQ0WF9DQ0RDX0gKKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2NjZGNfdHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfdHlwZXMuaD4KKworLyogZW51bSBmb3IgTm8gb2YgcGl4ZWwgcGVyIGxpbmUgdG8gYmUgYXZnLiBpbiBCbGFjayBDbGFtcGluZyovCitlbnVtIGNjZGNfc2FtcGxlX2xlbmd0aCB7CisJQ0NEQ19TQU1QTEVfMVBJWEVMUywKKwlDQ0RDX1NBTVBMRV8yUElYRUxTLAorCUNDRENfU0FNUExFXzRQSVhFTFMsCisJQ0NEQ19TQU1QTEVfOFBJWEVMUywKKwlDQ0RDX1NBTVBMRV8xNlBJWEVMUworfTsKKworLyogZW51bSBmb3IgTm8gb2YgbGluZXMgaW4gQmxhY2sgQ2xhbXBpbmcgKi8KK2VudW0gY2NkY19zYW1wbGVfbGluZSB7CisJQ0NEQ19TQU1QTEVfMUxJTkVTLAorCUNDRENfU0FNUExFXzJMSU5FUywKKwlDQ0RDX1NBTVBMRV80TElORVMsCisJQ0NEQ19TQU1QTEVfOExJTkVTLAorCUNDRENfU0FNUExFXzE2TElORVMKK307CisKKy8qIGVudW0gZm9yIEFsYXcgZ2FtYSB3aWR0aCAqLworZW51bSBjY2RjX2dhbWFfd2lkdGggeworCUNDRENfR0FNTUFfQklUU18xNV82LAorCUNDRENfR0FNTUFfQklUU18xNF81LAorCUNDRENfR0FNTUFfQklUU18xM180LAorCUNDRENfR0FNTUFfQklUU18xMl8zLAorCUNDRENfR0FNTUFfQklUU18xMV8yLAorCUNDRENfR0FNTUFfQklUU18xMF8xLAorCUNDRENfR0FNTUFfQklUU18wOV8wCit9OworCitlbnVtIGNjZGNfZGF0YV9zaXplIHsKKwlDQ0RDX0RBVEFfMTZCSVRTLAorCUNDRENfREFUQV8xNUJJVFMsCisJQ0NEQ19EQVRBXzE0QklUUywKKwlDQ0RDX0RBVEFfMTNCSVRTLAorCUNDRENfREFUQV8xMkJJVFMsCisJQ0NEQ19EQVRBXzExQklUUywKKwlDQ0RDX0RBVEFfMTBCSVRTLAorCUNDRENfREFUQV84QklUUworfTsKKworLyogc3RydWN0dXJlIGZvciBBTGF3ICovCitzdHJ1Y3QgY2NkY19hX2xhdyB7CisJLyogRW5hYmxlL2Rpc2FibGUgQS1MYXcgKi8KKwl1bnNpZ25lZCBjaGFyIGVuYWJsZTsKKwkvKiBHYW1hIFdpZHRoIElucHV0ICovCisJZW51bSBjY2RjX2dhbWFfd2lkdGggZ2FtYV93ZDsKK307CisKKy8qIHN0cnVjdHVyZSBmb3IgQmxhY2sgQ2xhbXBpbmcgKi8KK3N0cnVjdCBjY2RjX2JsYWNrX2NsYW1wIHsKKwl1bnNpZ25lZCBjaGFyIGVuYWJsZTsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBUUlVFICovCisJZW51bSBjY2RjX3NhbXBsZV9sZW5ndGggc2FtcGxlX3BpeGVsOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwllbnVtIGNjZGNfc2FtcGxlX2xpbmUgc2FtcGxlX2xuOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdGFydF9waXhlbDsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBUUlVFICovCisJdW5zaWduZWQgc2hvcnQgc2dhaW47CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgRkFMU0UgKi8KKwl1bnNpZ25lZCBzaG9ydCBkY19zdWI7Cit9OworCisvKiBzdHJ1Y3R1cmUgZm9yIEJsYWNrIExldmVsIENvbXBlbnNhdGlvbiAqLworc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uIHsKKwkvKiBDb25zdGFudCB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIFJlZCBjb21wb25lbnQgKi8KKwljaGFyIHI7CisJLyogQ29uc3RhbnQgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBHciBjb21wb25lbnQgKi8KKwljaGFyIGdyOworCS8qIENvbnN0YW50IHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gQmx1ZSBjb21wb25lbnQgKi8KKwljaGFyIGI7CisJLyogQ29uc3RhbnQgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBHYiBjb21wb25lbnQgKi8KKwljaGFyIGdiOworfTsKKworLyogc3RydWN0dXJlIGZvciBmYXVsdCBwaXhlbCBjb3JyZWN0aW9uICovCitzdHJ1Y3QgY2NkY19mYXVsdF9waXhlbCB7CisJLyogRW5hYmxlIG9yIERpc2FibGUgZmF1bHQgcGl4ZWwgY29ycmVjdGlvbiAqLworCXVuc2lnbmVkIGNoYXIgZW5hYmxlOworCS8qIE51bWJlciBvZiBmYXVsdCBwaXhlbCAqLworCXVuc2lnbmVkIHNob3J0IGZwX251bTsKKwkvKiBBZGRyZXNzIG9mIGZhdWx0IHBpeGVsIHRhYmxlICovCisJdW5zaWduZWQgaW50IGZwY190YWJsZV9hZGRyOworfTsKKworLyogU3RydWN0dXJlIGZvciBDQ0RDIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgcmF3IGNhcHR1cmUgbW9kZSBwYXNzZWQKKyAqIGJ5IGFwcGxpY2F0aW9uCisgKi8KK3N0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3IHsKKwkvKiBkYXRhIHNpemUgdmFsdWUgZnJvbSA4IHRvIDE2IGJpdHMgKi8KKwllbnVtIGNjZGNfZGF0YV9zaXplIGRhdGFfc3o7CisJLyogU3RydWN0dXJlIGZvciBPcHRpb25hbCBBLUxhdyAqLworCXN0cnVjdCBjY2RjX2FfbGF3IGFsYXc7CisJLyogU3RydWN0dXJlIGZvciBPcHRpY2FsIEJsYWNrIENsYW1wICovCisJc3RydWN0IGNjZGNfYmxhY2tfY2xhbXAgYmxrX2NsYW1wOworCS8qIFN0cnVjdHVyZSBmb3IgQmxhY2sgQ29tcGVuc2F0aW9uICovCisJc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uIGJsa19jb21wOworCS8qIFN0cnVjdHVyZSBmb3IgRmF1bHQgUGl4ZWwgTW9kdWxlIENvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19mYXVsdF9waXhlbCBmYXVsdF9weGw7Cit9OworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKy8qIERlZmluZSB0byBlbmFibGUvZGlzYWJsZSB2aWRlbyBwb3J0ICovCisjZGVmaW5lIEZQX05VTV9CWVRFUwkJNAorLyogRGVmaW5lIGZvciBleHRyYSBwaXhlbC9saW5lIGFuZCBleHRyYSBsaW5lcy9mcmFtZSAqLworI2RlZmluZSBOVU1fRVhUUkFQSVhFTFMJCTgKKyNkZWZpbmUgTlVNX0VYVFJBTElORVMJCTgKKworLyogc2V0dGluZ3MgZm9yIGNvbW1vbmx5IHVzZWQgdmlkZW8gZm9ybWF0cyAqLworI2RlZmluZSBDQ0RDX1dJTl9QQUwgICAgIHswLCAwLCA3MjAsIDU3Nn0KKy8qIG50c2Mgc3F1YXJlIHBpeGVsICovCisjZGVmaW5lIENDRENfV0lOX1ZHQQl7MCwgMCwgKDY0MCArIE5VTV9FWFRSQVBJWEVMUyksICg0ODAgKyBOVU1fRVhUUkFMSU5FUyl9CisKKy8qIFN0cnVjdHVyZSBmb3IgQ0NEQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHJhdyBjYXB0dXJlIG1vZGUgKi8KK3N0cnVjdCBjY2RjX3BhcmFtc19yYXcgeworCS8qIHBpeGVsIGZvcm1hdCAqLworCWVudW0gY2NkY19waXhmbXQgcGl4X2ZtdDsKKwkvKiBwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2VkIGZyYW1lICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIHZpZGVvIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIGlkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGhvcml6b250YWwgc3luYyBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBpbnRlcmxlYXZlZCBvciBzZXBhcmF0ZWQgZmllbGRzICovCisJZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGU7CisJLyoKKwkgKiBlbmFibGUgdG8gc3RvcmUgdGhlIGltYWdlIGluIGludmVyc2UKKwkgKiBvcmRlciBpbiBtZW1vcnkoYm90dG9tIHRvIHRvcCkKKwkgKi8KKwl1bnNpZ25lZCBjaGFyIGltYWdlX2ludmVydF9lbmFibGU7CisJLyogY29uZmlndXJhYmxlIHBhcmFtYXRlcnMgKi8KKwlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyBjb25maWdfcGFyYW1zOworfTsKKworc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIHsKKwkvKiBwaXhlbCBmb3JtYXQgKi8KKwllbnVtIGNjZGNfcGl4Zm10IHBpeF9mbXQ7CisJLyogcHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlZCBmcmFtZSAqLworCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdDsKKwkvKiB2aWRlbyB3aW5kb3cgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IHdpbjsKKwkvKiBmaWVsZCBpZCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGZpZF9wb2w7CisJLyogdmVydGljYWwgc3luYyBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIHZkX3BvbDsKKwkvKiBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBoZF9wb2w7CisJLyogZW5hYmxlIEJULjY1NiBlbWJlZGRlZCBzeW5jIG1vZGUgKi8KKwlpbnQgYnQ2NTZfZW5hYmxlOworCS8qIGNiOnk6Y3I6eSBvciB5OmNiOnk6Y3IgaW4gbWVtb3J5ICovCisJZW51bSBjY2RjX3BpeG9yZGVyIHBpeF9vcmRlcjsKKwkvKiBpbnRlcmxlYXZlZCBvciBzZXBhcmF0ZWQgZmllbGRzICAqLworCWVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlOworfTsKKyNlbmRpZgorI2VuZGlmCQkJCS8qIF9ETTY0NFhfQ0NEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBmZV9jYXB0dXJlLmggYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBmZV9jYXB0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkODk4MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGZlX2NhcHR1cmUuaApAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9WUEZFX0NBUFRVUkVfSAorI2RlZmluZSBfVlBGRV9DQVBUVVJFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogSGVhZGVyIGZpbGVzICovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGZlX3R5cGVzLmg+CisKKyNkZWZpbmUgVlBGRV9DQVBUVVJFX05VTV9ERUNPREVSUyAgICAgICAgNQorCisvKiBNYWNyb3MgKi8KKyNkZWZpbmUgVlBGRV9NQUpPUl9SRUxFQVNFICAgICAgICAgICAgICAwCisjZGVmaW5lIFZQRkVfTUlOT1JfUkVMRUFTRSAgICAgICAgICAgICAgMAorI2RlZmluZSBWUEZFX0JVSUxEICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVlBGRV9DQVBUVVJFX1ZFUlNJT05fQ09ERSAgICAgICAoKFZQRkVfTUFKT1JfUkVMRUFTRSA8PCAxNikgfCBcCisJCQkJCShWUEZFX01JTk9SX1JFTEVBU0UgPDwgOCkgIHwgXAorCQkJCQlWUEZFX0JVSUxEKQorCisjZGVmaW5lIENBUFRVUkVfRFJWX05BTUUJCSJ2cGZlLWNhcHR1cmUiCisKK3N0cnVjdCB2cGZlX3BpeGVsX2Zvcm1hdCB7CisJc3RydWN0IHY0bDJfZm10ZGVzYyBmbXRkZXNjOworCS8qIGJ5dGVzIHBlciBwaXhlbCAqLworCWludCBicHA7Cit9OworCitzdHJ1Y3QgdnBmZV9zdGRfaW5mbyB7CisJaW50IGFjdGl2ZV9waXhlbHM7CisJaW50IGFjdGl2ZV9saW5lczsKKwkvKiBjdXJyZW50IGZyYW1lIGZvcm1hdCAqLworCWludCBmcmFtZV9mb3JtYXQ7Cit9OworCitzdHJ1Y3QgdnBmZV9yb3V0ZSB7CisJdTMyIGlucHV0OworCXUzMiBvdXRwdXQ7Cit9OworCitzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyB7CisJLyogU3ViIGRldmljZSBuYW1lICovCisJY2hhciBuYW1lWzMyXTsKKwkvKiBTdWIgZGV2aWNlIGdyb3VwIGlkICovCisJaW50IGdycF9pZDsKKwkvKiBOdW1iZXIgb2YgaW5wdXRzIHN1cHBvcnRlZCAqLworCWludCBudW1faW5wdXRzOworCS8qIGlucHV0cyBhdmFpbGFibGUgYXQgdGhlIHN1YiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXRzOworCS8qIFN1YiBkZXYgcm91dGluZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBpbnB1dCAqLworCXN0cnVjdCB2cGZlX3JvdXRlICpyb3V0ZXM7CisJLyogY2hlY2sgaWYgc3ViIGRldiBzdXBwb3J0cyByb3V0aW5nICovCisJaW50IGNhbl9yb3V0ZTsKKwkvKiBjY2RjIGJ1cy9pbnRlcmZhY2UgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtIGNjZGNfaWZfcGFyYW1zOworCS8qIGkyYyBzdWJkZXZpY2UgYm9hcmQgaW5mbyAqLworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBib2FyZF9pbmZvOworfTsKKworc3RydWN0IHZwZmVfY29uZmlnIHsKKwkvKiBOdW1iZXIgb2Ygc3ViIGRldmljZXMgY29ubmVjdGVkIHRvIHZwZmUgKi8KKwlpbnQgbnVtX3N1YmRldnM7CisJLyogaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBzdWJkZXYgKi8KKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc3ViX2RldnM7CisJLyogZXZtIGNhcmQgaW5mbyAqLworCWNoYXIgKmNhcmRfbmFtZTsKKwkvKiBjY2RjIG5hbWUgKi8KKwljaGFyICpjY2RjOworCS8qIHZwZmUgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICp2cHNzY2xrOworCXN0cnVjdCBjbGsgKnNsYXZlY2xrOworfTsKKworc3RydWN0IHZwZmVfZGV2aWNlIHsKKwkvKiBWNGwyIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwkvKiBJZGVudGlmaWVzIHZpZGVvIGRldmljZSBmb3IgdGhpcyBjaGFubmVsICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OworCS8qIHN1YiBkZXZpY2VzICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICoqc2Q7CisJLyogdnBmZSBjZmcgKi8KKwlzdHJ1Y3QgdnBmZV9jb25maWcgKmNmZzsKKwkvKiBWNGwyIGRldmljZSAqLworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwkvKiBwYXJlbnQgZGV2aWNlICovCisJc3RydWN0IGRldmljZSAqcGRldjsKKwkvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2Ygc3RhdGUgb2YgdGhlIHByaW9yaXR5ICovCisJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOworCS8qIG51bWJlciBvZiBvcGVuIGluc3RhbmNlcyBvZiB0aGUgY2hhbm5lbCAqLworCXUzMiB1c3JzOworCS8qIEluZGljYXRlcyBpZCBvZiB0aGUgZmllbGQgd2hpY2ggaXMgYmVpbmcgZGlzcGxheWVkICovCisJdTMyIGZpZWxkX2lkOworCS8qIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBkZWNvZGVyIGlzIGluaXRpYWxpemVkICovCisJdTggaW5pdGlhbGl6ZWQ7CisJLyogY3VycmVudCBpbnRlcmZhY2UgdHlwZSAqLworCXN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtIHZwZmVfaWZfcGFyYW1zOworCS8qIHB0ciB0byBjdXJyZW50bHkgc2VsZWN0ZWQgc3ViIGRldmljZSAqLworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpjdXJyZW50X3N1YmRldjsKKwkvKiBjdXJyZW50IGlucHV0IGF0IHRoZSBzdWIgZGV2aWNlICovCisJaW50IGN1cnJlbnRfaW5wdXQ7CisJLyogS2VlcHMgdHJhY2sgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFuZGFyZCAqLworCXN0cnVjdCB2cGZlX3N0ZF9pbmZvIHN0ZF9pbmZvOworCS8qIHN0ZCBpbmRleCBpbnRvIHN0ZCB0YWJsZSAqLworCWludCBzdGRfaW5kZXg7CisJLyogQ0NEQyBJUlFzIHVzZWQgd2hlbiBDQ0RDL0lTSUYgb3V0cHV0IHRvIFNEUkFNICovCisJdW5zaWduZWQgaW50IGNjZGNfaXJxMDsKKwl1bnNpZ25lZCBpbnQgY2NkY19pcnExOworCS8qIG51bWJlciBvZiBidWZmZXJzIGluIGZidWZmZXJzICovCisJdTMyIG51bWJ1ZmZlcnM7CisJLyogTGlzdCBvZiBidWZmZXIgcG9pbnRlcnMgZm9yIHN0b3JpbmcgZnJhbWVzICovCisJdTggKmZidWZmZXJzW1ZJREVPX01BWF9GUkFNRV07CisJLyogUG9pbnRlciBwb2ludGluZyB0byBjdXJyZW50IHY0bDJfYnVmZmVyICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqY3VyX2ZybTsKKwkvKiBQb2ludGVyIHBvaW50aW5nIHRvIG5leHQgdjRsMl9idWZmZXIgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpuZXh0X2ZybTsKKwkvKgorCSAqIFRoaXMgZmllbGQga2VlcHMgdHJhY2sgb2YgdHlwZSBvZiBidWZmZXIgZXhjaGFuZ2UgbWVjaGFuaXNtCisJICogdXNlciBoYXMgc2VsZWN0ZWQKKwkgKi8KKwllbnVtIHY0bDJfbWVtb3J5IG1lbW9yeTsKKwkvKiBVc2VkIHRvIHN0b3JlIHBpeGVsIGZvcm1hdCAqLworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7CisJLyoKKwkgKiB1c2VkIHdoZW4gSU1QIGlzIGNoYWluZWQgdG8gc3RvcmUgdGhlIGNyb3Agd2luZG93IHdoaWNoCisJICogaXMgZGlmZmVyZW50IGZyb20gdGhlIGltYWdlIHdpbmRvdworCSAqLworCXN0cnVjdCB2NGwyX3JlY3QgY3JvcDsKKwkvKiBCdWZmZXIgcXVldWUgdXNlZCBpbiB2aWRlby1idWYgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgYnVmZmVyX3F1ZXVlOworCS8qIFF1ZXVlIG9mIGZpbGxlZCBmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9xdWV1ZTsKKwkvKiBVc2VkIGluIHZpZGVvLWJ1ZiAqLworCXNwaW5sb2NrX3QgaXJxbG9jazsKKwkvKiBJUlEgbG9jayBmb3IgRE1BIHF1ZXVlICovCisJc3BpbmxvY2tfdCBkbWFfcXVldWVfbG9jazsKKwkvKiBsb2NrIHVzZWQgdG8gYWNjZXNzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IG11dGV4IGxvY2s7CisJLyogbnVtYmVyIG9mIHVzZXJzIHBlcmZvcm1pbmcgSU8gKi8KKwl1MzIgaW9fdXNyczsKKwkvKiBJbmRpY2F0ZXMgd2hldGhlciBzdHJlYW1pbmcgc3RhcnRlZCAqLworCXU4IHN0YXJ0ZWQ7CisJLyoKKwkgKiBvZmZzZXQgd2hlcmUgc2Vjb25kIGZpZWxkIHN0YXJ0cyBmcm9tIHRoZSBzdGFydGluZyBvZiB0aGUKKwkgKiBidWZmZXIgZm9yIGZpZWxkIHNlcGVyYXRlZCBZQ2JDciBmb3JtYXRzCisJICovCisJdTMyIGZpZWxkX29mZjsKK307CisKKy8qIEZpbGUgaGFuZGxlIHN0cnVjdHVyZSAqLworc3RydWN0IHZwZmVfZmggeworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXY7CisJLyogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmaWxlIGhhbmRsZSBpcyBkb2luZyBJTyAqLworCXU4IGlvX2FsbG93ZWQ7CisJLyogVXNlZCB0byBrZWVwIHRyYWNrIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgKi8KKwllbnVtIHY0bDJfcHJpb3JpdHkgcHJpbzsKK307CisKK3N0cnVjdCB2cGZlX2NvbmZpZ19wYXJhbXMgeworCXU4IG1pbl9udW1idWZmZXJzOworCXU4IG51bWJ1ZmZlcnM7CisJdTMyIG1pbl9idWZzaXplOworCXUzMiBkZXZpY2VfYnVmc2l6ZTsKK307CisKKyNlbmRpZgkJCQkvKiBFbmQgb2YgX19LRVJORUxfXyAqLworLyoqCisgKiBWUEZFX0NNRF9TX0NDRENfUkFXX1BBUkFNUyAtIEVYUEVSSU1FTlRBTCBJT0NUTCB0byBzZXQgcmF3IGNhcHR1cmUgcGFyYW1zCisgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBtb2R1bGVzIHN1Y2ggYXMgZGVmZWN0IHBpeGVsIGNvcnJlY3Rpb24sCisgKiBjb2xvciBzcGFjZSBjb252ZXJzaW9uLCBjdWxsaW5nIGV0Yy4gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW9jdGwgdGhhdAorICogd2lsbCBjaGFuZ2UgaW4gZnV0dXJlIGtlcm5lbHMuIFNvIHVzZSB0aGlzIGlvY3RsIHdpdGggY2FyZSAhCisgKiBUT0RPOiBUaGlzIGlzIHRvIGJlIHNwbGl0IGludG8gbXVsdGlwbGUgaW9jdGxzIGFuZCBhbHNvIGV4cGxvcmUgdGhlCisgKiBwb3NzaWJpbGl0eSBvZiBleHRlbmRpbmcgdGhlIHY0bDIgYXBpIHRvIGluY2x1ZGUgdGhpcworICoqLworI2RlZmluZSBWUEZFX0NNRF9TX0NDRENfUkFXX1BBUkFNUyBfSU9XKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDEsIFwKKwkJCQkJdm9pZCAqKQorI2VuZGlmCQkJCS8qIF9EQVZJTkNJX1ZQRkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwZmVfdHlwZXMuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGZlX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmYjc0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGZlX3R5cGVzLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbilhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9WUEZFX1RZUEVTX0gKKyNkZWZpbmUgX1ZQRkVfVFlQRVNfSAorCisjaWZkZWYgX19LRVJORUxfXworCitlbnVtIHZwZmVfcGluX3BvbCB7CisJVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJVlBGRV9QSU5QT0xfTkVHQVRJVkUKK307CisKK2VudW0gdnBmZV9od19pZl90eXBlIHsKKwkvKiBCVDY1NiAtIDggYml0ICovCisJVlBGRV9CVDY1NiwKKwkvKiBCVDExMjAgLSAxNiBiaXQgKi8KKwlWUEZFX0JUMTEyMCwKKwkvKiBSYXcgQmF5ZXIgKi8KKwlWUEZFX1JBV19CQVlFUiwKKwkvKiBZQ2JDciAtIDggYml0IHdpdGggZXh0ZXJuYWwgc3luYyAqLworCVZQRkVfWUNCQ1JfU1lOQ184LAorCS8qIFlDYkNyIC0gMTYgYml0IHdpdGggZXh0ZXJuYWwgc3luYyAqLworCVZQRkVfWUNCQ1JfU1lOQ18xNiwKKwkvKiBCVDY1NiAtIDEwIGJpdCAqLworCVZQRkVfQlQ2NTZfMTBCSVQKK307CisKKy8qIGludGVyZmFjZSBkZXNjcmlwdGlvbiAqLworc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0geworCWVudW0gdnBmZV9od19pZl90eXBlIGlmX3R5cGU7CisJZW51bSB2cGZlX3Bpbl9wb2wgaGRwb2w7CisJZW51bSB2cGZlX3Bpbl9wb2wgdmRwb2w7Cit9OworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkZmY3NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogdnBzcyAtIHZpZGVvIHByb2Nlc3Npbmcgc3Vic3lzdGVtIG1vZHVsZSBoZWFkZXIgZmlsZS4KKyAqCisgKiBJbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGUgaWYgYSBkcml2ZXIgbmVlZHMgdG8gY29uZmlndXJlIHZwc3Mgc3lzdGVtCisgKiBtb2R1bGUuIEl0IGV4cG9ydHMgYSBzZXQgb2YgbGlicmFyeSBmdW5jdGlvbnMgIGZvciB2aWRlbyBkcml2ZXJzIHRvCisgKiBjb25maWd1cmUgdnBzcyBzeXN0ZW0gbW9kdWxlIGZ1bmN0aW9ucyBzdWNoIGFzIGNsb2NrIGVuYWJsZS9kaXNhYmxlLAorICogdnBzcyBpbnRlcnJ1cHQgbXV4IHRvIGFybSwgYW5kIG90aGVyIGNvbW1vbiB2cHNzIHN5c3RlbSBtb2R1bGUKKyAqIGZ1bmN0aW9ucy4KKyAqLworI2lmbmRlZiBfVlBTU19ICisjZGVmaW5lIF9WUFNTX0gKKworLyogc2VsZWN0b3IgZm9yIGNjZGMgaW5wdXQgc2VsZWN0aW9uIG9uIERNMzU1ICovCitlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHsKKwlWUFNTX0NDRENJTiwKKwlWUFNTX0hTU0lJTgorfTsKKworLyogVXNlZCBmb3IgZW5hYmxlL2RpYWJsZSBWUFNTIENsb2NrICovCitlbnVtIHZwc3NfY2xvY2tfc2VsIHsKKwkvKiBETTM1NS9ETTM2NSAqLworCVZQU1NfQ0NEQ19DTE9DSywKKwlWUFNTX0lQSVBFX0NMT0NLLAorCVZQU1NfSDNBX0NMT0NLLAorCVZQU1NfQ0ZBTERfQ0xPQ0ssCisJLyoKKwkgKiBXaGVuIHVzaW5nIFZQU1NfVkVOQ19DTE9DS19TRUwgaW4gdnBzc19lbmFibGVfY2xvY2soKSBhcGkKKwkgKiBmb2xsb3dpbmcgYXBwbGllczotCisJICogZW4gPSAwIHNlbGVjdHMgRU5DX0NMSworCSAqIGVuID0gMSBzZWxlY3RzIEVOQ19DTEsvMgorCSAqLworCVZQU1NfVkVOQ19DTE9DS19TRUwsCisJVlBTU19WUEJFX0NMT0NLLAorfTsKKworLyogc2VsZWN0IGlucHV0IHRvIGNjZGMgb24gZG0zNTUgKi8KK2ludCB2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpOworLyogZW5hYmxlL2Rpc2FibGUgYSB2cHNzIGNsb2NrLCAwIC0gc3VjY2VzcywgLTEgLSBmYWlsdXJlICovCitpbnQgdnBzc19lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbik7CisKKy8qIHdibCByZXNldCBmb3IgZG02NDR4ICovCitlbnVtIHZwc3Nfd2JsX3NlbCB7CisJVlBTU19QQ1JfQUVXX1dCTF8wID0gMTYsCisJVlBTU19QQ1JfQUZfV0JMXzAsCisJVlBTU19QQ1JfUlNaNF9XQkxfMCwKKwlWUFNTX1BDUl9SU1ozX1dCTF8wLAorCVZQU1NfUENSX1JTWjJfV0JMXzAsCisJVlBTU19QQ1JfUlNaMV9XQkxfMCwKKwlWUFNTX1BDUl9QUkVWX1dCTF8wLAorCVZQU1NfUENSX0NDRENfV0JMX08sCit9OworaW50IHZwc3NfY2xlYXJfd2JsX292ZXJmbG93KGVudW0gdnBzc193Ymxfc2VsIHdibF9zZWwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCmluZGV4IDIzZWNlYWQuLjNkNzRlNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCkBAIC0xNiwyNCArMTYsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogCiBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKLQlzdHJ1Y3QgZGV2aWNlICpjb250cm9sOwotCXVuc2lnbmVkIHNob3J0IHdpZHRoOwkJLyogQ3VycmVudCB3aW5kb3cgKi8KLQl1bnNpZ25lZCBzaG9ydCBoZWlnaHQ7CQkvKiBzaXplcyAqLwotCXVuc2lnbmVkIHNob3J0IHhfbWluOwkJLyogQ2FtZXJhIGNhcGFiaWxpdGllcyAqLwotCXVuc2lnbmVkIHNob3J0IHlfbWluOwotCXVuc2lnbmVkIHNob3J0IHhfY3VycmVudDsJLyogQ3VycmVudCB3aW5kb3cgbG9jYXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCB5X2N1cnJlbnQ7CisJc3RydWN0IGRldmljZSAqcGRldjsJCS8qIFBsYXRmb3JtIGRldmljZSAqLworCXMzMiB1c2VyX3dpZHRoOworCXMzMiB1c2VyX2hlaWdodDsKIAl1bnNpZ25lZCBzaG9ydCB3aWR0aF9taW47Ci0JdW5zaWduZWQgc2hvcnQgd2lkdGhfbWF4OwogCXVuc2lnbmVkIHNob3J0IGhlaWdodF9taW47Ci0JdW5zaWduZWQgc2hvcnQgaGVpZ2h0X21heDsKIAl1bnNpZ25lZCBzaG9ydCB5X3NraXBfdG9wOwkvKiBMaW5lcyB0byBza2lwIGF0IHRoZSB0b3AgKi8KLQl1bnNpZ25lZCBzaG9ydCBnYWluOwotCXVuc2lnbmVkIHNob3J0IGV4cG9zdXJlOwogCXVuc2lnbmVkIGNoYXIgaWZhY2U7CQkvKiBIb3N0IG51bWJlciAqLwogCXVuc2lnbmVkIGNoYXIgZGV2bnVtOwkJLyogRGV2aWNlIG51bWJlciBwZXIgaG9zdCAqLwogCXVuc2lnbmVkIGNoYXIgYnVzd2lkdGg7CQkvKiBTZWUgY29tbWVudCBpbiAuYyAqLwpAQCAtNDYsNyArMzksNiBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqdXNlcl9mb3JtYXRzOwogCWludCBudW1fdXNlcl9mb3JtYXRzOwogCWVudW0gdjRsMl9maWVsZCBmaWVsZDsJCS8qIFByZXNlcnZlIGZpZWxkIG92ZXIgY2xvc2UoKSAqLwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCXZvaWQgKmhvc3RfcHJpdjsJCS8qIFBlci1kZXZpY2UgaG9zdCBwcml2YXRlIGRhdGEgKi8KIAkvKiBzb2NfY2FtZXJhLmMgcHJpdmF0ZSBjb3VudC4gT25seSBhY2Nlc3NlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KIAlpbnQgdXNlX2NvdW50OwpAQCAtNTksOCArNTEsOCBAQAogfTsKIAogc3RydWN0IHNvY19jYW1lcmFfaG9zdCB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgY2hhciBucjsJCQkJLyogSG9zdCBudW1iZXIgKi8KIAl2b2lkICpwcml2OwogCWNvbnN0IGNoYXIgKmRydl9uYW1lOwpAQCAtNzMsOSArNjUsMTggQEAKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHBtX21lc3NhZ2VfdCk7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CisJLyoKKwkgKiAuZ2V0X2Zvcm1hdHMoKSBpcyBjYWxsZWQgZm9yIGVhY2ggY2xpZW50IGRldmljZSBmb3JtYXQsIGJ1dAorCSAqIC5wdXRfZm9ybWF0cygpIGlzIG9ubHkgY2FsbGVkIG9uY2UuIEZ1cnRoZXIsIGlmIGFueSBvZiB0aGUgY2FsbHMgdG8KKwkgKiAuZ2V0X2Zvcm1hdHMoKSBmYWlsLCAucHV0X2Zvcm1hdHMoKSB3aWxsIG5vdCBiZSBjYWxsZWQgYXQgYWxsLCB0aGUKKwkgKiBmYWlsaW5nIC5nZXRfZm9ybWF0cygpIG11c3QgdGhlbiBjbGVhbiB1cCBpbnRlcm5hbGx5LgorCSAqLwogCWludCAoKmdldF9mb3JtYXRzKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgaW50LAogCQkJICAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICopOwotCWludCAoKnNldF9jcm9wKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKKwl2b2lkICgqcHV0X2Zvcm1hdHMpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKKwlpbnQgKCpjcm9wY2FwKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY3JvcGNhcCAqKTsKKwlpbnQgKCpnZXRfY3JvcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Nyb3AgKik7CisJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jcm9wICopOwogCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKik7CiAJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAl2b2lkICgqaW5pdF92aWRlb2J1Zikoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICosCkBAIC04Myw3ICs4NCwxMSBAQAogCWludCAoKnJlcWJ1ZnMpKHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKiwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKik7CiAJaW50ICgqcXVlcnljYXApKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKiwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqKTsKIAlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIpOworCWludCAoKmdldF9jdHJsKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKKwlpbnQgKCpzZXRfY3RybCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7CiAJdW5zaWduZWQgaW50ICgqcG9sbCkoc3RydWN0IGZpbGUgKiwgcG9sbF90YWJsZSAqKTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmNvbnRyb2xzOworCWludCBudW1fY29udHJvbHM7CiB9OwogCiAjZGVmaW5lIFNPQ0FNX1NFTlNPUl9JTlZFUlRfUENMSwkoMSA8PCAwKQpAQCAtMTAyLDYgKzEwNywxMiBAQAogCWludCBpMmNfYWRhcHRlcl9pZDsKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmJvYXJkX2luZm87CiAJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CisJLyoKKwkgKiBGb3Igbm9uLUkyQyBkZXZpY2VzIHBsYXRmb3JtIHBsYXRmb3JtIGhhcyB0byBwcm92aWRlIG1ldGhvZHMgdG8KKwkgKiBhZGQgYSBkZXZpY2UgdG8gdGhlIHN5c3RlbSBhbmQgdG8gcmVtb3ZlCisJICovCisJaW50ICgqYWRkX2RldmljZSkoc3RydWN0IHNvY19jYW1lcmFfbGluayAqLCBzdHJ1Y3QgZGV2aWNlICopOworCXZvaWQgKCpkZWxfZGV2aWNlKShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICopOwogCS8qIE9wdGlvbmFsIGNhbGxiYWNrcyB0byBwb3dlciBvbiBvciBvZmYgYW5kIHJlc2V0IHRoZSBzZW5zb3IgKi8KIAlpbnQgKCpwb3dlcikoc3RydWN0IGRldmljZSAqLCBpbnQpOwogCWludCAoKnJlc2V0KShzdHJ1Y3QgZGV2aWNlICopOwpAQCAtMTE1LDI3ICsxMjYsNDUgQEAKIAl2b2lkICgqZnJlZV9idXMpKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKik7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqdG9fc29jX2NhbWVyYV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKnRvX3NvY19jYW1lcmFfZGV2KAorCWNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlLCBkZXYpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKnRvX3NvY19jYW1lcmFfaG9zdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKnRvX3NvY19jYW1lcmFfaG9zdCgKKwljb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QsIHY0bDJfZGV2KTsKIH0KIAotZXh0ZXJuIGludCBzb2NfY2FtZXJhX2hvc3RfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpKTsKLWV4dGVybiB2b2lkIHNvY19jYW1lcmFfaG9zdF91bnJlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSk7Ci1leHRlcm4gaW50IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKLWV4dGVybiB2b2lkIHNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICp0b19zb2NfY2FtZXJhX2xpbmsoCisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJcmV0dXJuIGljZC0+ZGV2LnBsYXRmb3JtX2RhdGE7Cit9CiAKLWV4dGVybiBpbnQgc29jX2NhbWVyYV92aWRlb19zdGFydChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7Ci1leHRlcm4gdm9pZCBzb2NfY2FtZXJhX3ZpZGVvX3N0b3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICp0b19zb2NfY2FtZXJhX2NvbnRyb2woCisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmaWNkLT5kZXYpOworfQogCi1leHRlcm4gY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKnNvY19jYW1lcmFfZm9ybWF0X2J5X2ZvdXJjYygKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHY0bDJfc3ViZGV2ICpzb2NfY2FtZXJhX3RvX3N1YmRldigKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpjb250cm9sID0gdG9fc29jX2NhbWVyYV9jb250cm9sKGljZCk7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YShjb250cm9sKTsKK30KKworaW50IHNvY19jYW1lcmFfaG9zdF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kpOwordm9pZCBzb2NfY2FtZXJhX2hvc3RfdW5yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kpOworCitjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqc29jX2NhbWVyYV9mb3JtYXRfYnlfZm91cmNjKAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1bnNpZ25lZCBpbnQgZm91cmNjKTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKAorY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICpzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYygKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdW5zaWduZWQgaW50IGZvdXJjYyk7CiAKIHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IHsKQEAgLTE2MywzMCArMTkyLDExIEBACiB9OwogCiBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgewotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCWludCAoKnByb2JlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci0Jdm9pZCAoKnJlbW92ZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKmluaXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLQlpbnQgKCpyZWxlYXNlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci0JaW50ICgqc3RhcnRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKnN0b3BfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKnNldF9jcm9wKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKLQlpbnQgKCpzZXRfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwotCWludCAoKnRyeV9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKik7CiAJdW5zaWduZWQgbG9uZyAoKnF1ZXJ5X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKLQlpbnQgKCpnZXRfY2hpcF9pZCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosCi0JCQkgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqKTsKLQlpbnQgKCpzZXRfc3RkKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgdjRsMl9zdGRfaWQgKik7CiAJaW50ICgqZW51bV9pbnB1dCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2lucHV0ICopOwotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQlpbnQgKCpnZXRfcmVnaXN0ZXIpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKik7Ci0JaW50ICgqc2V0X3JlZ2lzdGVyKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICopOwotI2VuZGlmCi0JaW50ICgqZ2V0X2NvbnRyb2wpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwotCWludCAoKnNldF9jb250cm9sKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKIAljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmNvbnRyb2xzOwogCWludCBudW1fY29udHJvbHM7CiB9OwpAQCAtMjY4LDYgKzI3OCwyMSBAQAogCQljb21tb25fZmxhZ3M7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2NfY2FtZXJhX2xpbWl0X3NpZGUodW5zaWduZWQgaW50ICpzdGFydCwKKwkJdW5zaWduZWQgaW50ICpsZW5ndGgsIHVuc2lnbmVkIGludCBzdGFydF9taW4sCisJCXVuc2lnbmVkIGludCBsZW5ndGhfbWluLCB1bnNpZ25lZCBpbnQgbGVuZ3RoX21heCkKK3sKKwlpZiAoKmxlbmd0aCA8IGxlbmd0aF9taW4pCisJCSpsZW5ndGggPSBsZW5ndGhfbWluOworCWVsc2UgaWYgKCpsZW5ndGggPiBsZW5ndGhfbWF4KQorCQkqbGVuZ3RoID0gbGVuZ3RoX21heDsKKworCWlmICgqc3RhcnQgPCBzdGFydF9taW4pCisJCSpzdGFydCA9IHN0YXJ0X21pbjsKKwllbHNlIGlmICgqc3RhcnQgPiBzdGFydF9taW4gKyBsZW5ndGhfbWF4IC0gKmxlbmd0aCkKKwkJKnN0YXJ0ID0gc3RhcnRfbWluICsgbGVuZ3RoX21heCAtICpsZW5ndGg7Cit9CisKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKIAkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCmluZGV4IDFkMDkyYjQuLmJiNzA0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCkBAIC0xMiwxNSArMTIsMTggQEAKICNkZWZpbmUgX19TT0NfQ0FNRVJBX0hfXwogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorCitzdHJ1Y3QgZGV2aWNlOwogCiBzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvIHsKLQlpbnQgaWZhY2U7Ci0JY2hhciAqZm9ybWF0X25hbWU7CisJY29uc3QgY2hhciAqZm9ybWF0X25hbWU7CiAJdW5zaWduZWQgbG9uZyBmb3JtYXRfZGVwdGg7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmb3JtYXQ7CiAJdW5zaWduZWQgbG9uZyBidXNfcGFyYW07Ci0Jdm9pZCAoKnBvd2VyKShpbnQpOworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgKCpzZXRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywgaW50IGVuYWJsZSk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayBsaW5rOwogfTsKIAogI2VuZGlmIC8qIF9fU09DX0NBTUVSQV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAppbmRleCBjMTQ2ZjJmLi40ZDViNTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R1bmVyLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCkBAIC0xMjcsNiArMTI3LDggQEAKICNkZWZpbmUgVFVORVJfUEhJTElQU19GTTEyMTZNSzUJCTc5CiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfRlExMjE2TE1FX01LMwk4MAkvKiBBY3RpdmUgbG9vcHRocm91Z2gsIG5vIEZNICovCiAjZGVmaW5lIFRVTkVSX1BBUlRTTklDX1BUSV81TkYwNQk4MQorI2RlZmluZSBUVU5FUl9QSElMSVBTX0NVMTIxNkwgICAgICAgICAgIDgyCisjZGVmaW5lIFRVTkVSX05YUF9UREExODI3MQkJODMKIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHZwNTE0eC5oIGIvaW5jbHVkZS9tZWRpYS90dnA1MTR4LmgKaW5kZXggNWU3ZWU5Ni4uNzQzODdlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dnA1MTR4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dnA1MTR4LmgKQEAgLTEwNCwxMCArMTA0LDYgQEAKICAqIEAgdnNfcG9sYXJpdHk6IFZTWU5DIFBvbGFyaXR5IGNvbmZpZ3VyYXRpb24gZm9yIGN1cnJlbnQgaW50ZXJmYWNlLgogICovCiBzdHJ1Y3QgdHZwNTE0eF9wbGF0Zm9ybV9kYXRhIHsKLQljaGFyICptYXN0ZXI7Ci0JaW50ICgqcG93ZXJfc2V0KSAoZW51bSB2NGwyX3Bvd2VyIG9uKTsKLQlpbnQgKCppZnBhcm0pIChzdHJ1Y3QgdjRsMl9pZnBhcm0gKnApOwotCWludCAoKnByaXZfZGF0YV9zZXQpICh2b2lkICopOwogCS8qIEludGVyZmFjZSBjb250cm9sIHBhcmFtcyAqLwogCWJvb2wgY2xrX3BvbGFyaXR5OwogCWJvb2wgaHNfcG9sYXJpdHk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAppbmRleCA5NGU5MDhjLi5jZjE2Njg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKQEAgLTEzNSw2ICsxMzUsOSBAQAogCS8qIG1vZHVsZSBhZHY3MTc1OiBqdXN0IGlkZW50IDcxNzUgKi8KIAlWNEwyX0lERU5UX0FEVjcxNzUgPSA3MTc1LAogCisJLyogbW9kdWxlIGFkdjcxODA6IGp1c3QgaWRlbnQgNzE4MCAqLworCVY0TDJfSURFTlRfQURWNzE4MCA9IDcxODAsCisKIAkvKiBtb2R1bGUgc2FhNzE4NToganVzdCBpZGVudCA3MTg1ICovCiAJVjRMMl9JREVOVF9TQUE3MTg1ID0gNzE4NSwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCmluZGV4IDMzYTE4NDIuLjFjMjViMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKQEAgLTEzOSwzMCArMTM5LDI0IEBACiAvKiBMb2FkIGFuIGkyYyBtb2R1bGUgYW5kIHJldHVybiBhbiBpbml0aWFsaXplZCB2NGwyX3N1YmRldiBzdHJ1Y3QuCiAgICBPbmx5IGNhbGwgcmVxdWVzdF9tb2R1bGUgaWYgbW9kdWxlX25hbWUgIT0gTlVMTC4KICAgIFRoZSBjbGllbnRfdHlwZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgY2hpcCB0aGF0J3Mgb24gdGhlIGFkYXB0ZXIuICovCi1zdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKLQkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsIHU4IGFkZHIpOwotLyogUHJvYmUgYW5kIGxvYWQgYW4gaTJjIG1vZHVsZSBhbmQgcmV0dXJuIGFuIGluaXRpYWxpemVkIHY0bDJfc3ViZGV2IHN0cnVjdC4KLSAgIE9ubHkgY2FsbCByZXF1ZXN0X21vZHVsZSBpZiBtb2R1bGVfbmFtZSAhPSBOVUxMLgotICAgVGhlIGNsaWVudF90eXBlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBjaGlwIHRoYXQncyBvbiB0aGUgYWRhcHRlci4gKi8KLXN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKLQkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsCi0JCWNvbnN0IHVuc2lnbmVkIHNob3J0ICphZGRycyk7Ci0vKiBMaWtlIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2LCBleGNlcHQgcHJvYmUgZm9yIGEgc2luZ2xlIGFkZHJlc3MuICovCi1zdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2X2FkZHIoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKLQkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsIHU4IGFkZHIpOwotCi0vKiBMb2FkIGFuIGkyYyBtb2R1bGUgYW5kIHJldHVybiBhbiBpbml0aWFsaXplZCB2NGwyX3N1YmRldiBzdHJ1Y3QuCi0gICBPbmx5IGNhbGwgcmVxdWVzdF9tb2R1bGUgaWYgbW9kdWxlX25hbWUgIT0gTlVMTC4KLSAgIFRoZSBjbGllbnRfdHlwZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgY2hpcCB0aGF0J3Mgb24gdGhlIGFkYXB0ZXIuICovCiBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXZfY2ZnKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCiAJCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAkJY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IGNoYXIgKmNsaWVudF90eXBlLAogCQlpbnQgaXJxLCB2b2lkICpwbGF0Zm9ybV9kYXRhLAogCQl1OCBhZGRyLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHJvYmVfYWRkcnMpOwogCisvKiBMb2FkIGFuIGkyYyBtb2R1bGUgYW5kIHJldHVybiBhbiBpbml0aWFsaXplZCB2NGwyX3N1YmRldiBzdHJ1Y3QuCisgICBPbmx5IGNhbGwgcmVxdWVzdF9tb2R1bGUgaWYgbW9kdWxlX25hbWUgIT0gTlVMTC4KKyAgIFRoZSBjbGllbnRfdHlwZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgY2hpcCB0aGF0J3Mgb24gdGhlIGFkYXB0ZXIuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAorCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCBjaGFyICpjbGllbnRfdHlwZSwKKwkJdTggYWRkciwgY29uc3QgdW5zaWduZWQgc2hvcnQgKnByb2JlX2FkZHJzKQoreworCXJldHVybiB2NGwyX2kyY19uZXdfc3ViZGV2X2NmZyh2NGwyX2RldiwgYWRhcHRlciwgbW9kdWxlX25hbWUsCisJCQkJY2xpZW50X3R5cGUsIDAsIE5VTEwsIGFkZHIsIHByb2JlX2FkZHJzKTsKK30KKwogc3RydWN0IGkyY19ib2FyZF9pbmZvOwogCiBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCAyMDU4ZGQ0Li43M2M5ODY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC0xMDAsOCArMTAwLDEwIEBACiAKICAgIEFsc28gbm90ZSB0aGF0IHZkZXYtPm1pbm9yIGlzIHNldCB0byAtMSBpZiB0aGUgcmVnaXN0cmF0aW9uIGZhaWxlZC4gKi8KIGludCBfX211c3RfY2hlY2sgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIpOwotaW50IF9fbXVzdF9jaGVjayB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwKLQkJCQkJCWludCB0eXBlLCBpbnQgbnIsIGludCBpbmRleCk7CisKKy8qIFNhbWUgYXMgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlLCBidXQgbm8gd2FybmluZyBpcyBpc3N1ZWQgaWYgdGhlIGRlc2lyZWQKKyAgIGRldmljZSBub2RlIG51bWJlciB3YXMgYWxyZWFkeSBpbiB1c2UuICovCitpbnQgX19tdXN0X2NoZWNrIHZpZGVvX3JlZ2lzdGVyX2RldmljZV9ub193YXJuKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIpOwogCiAvKiBVbnJlZ2lzdGVyIHZpZGVvIGRldmljZXMuIFdpbGwgZG8gbm90aGluZyBpZiB2ZGV2ID09IE5VTEwgb3IKICAgIHZkZXYtPm1pbm9yIDwgMC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwLzlwLmggYi9pbmNsdWRlL25ldC85cC85cC5oCmluZGV4IGI3N2MxNDcuLmE3ZmI1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwLzlwLmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvOXAuaApAQCAtMzgsNiArMzgsOCBAQAogICogQFA5X0RFQlVHX1NMQUJTOiBtZW1vcnkgbWFuYWdlbWVudCB0cmFjaW5nCiAgKiBAUDlfREVCVUdfRkNBTEw6IHZlcmJvc2UgZHVtcCBvZiBwcm90b2NvbCBtZXNzYWdlcwogICogQFA5X0RFQlVHX0ZJRDogZmlkIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRyYWNraW5nCisgKiBAUDlfREVCVUdfUEtUOiBwYWNrZXQgbWFyc2hhbGxpbmcvdW5tYXJzaGFsbGluZworICogQFA5X0RFQlVHX0ZTQzogRlMtY2FjaGUgdHJhY2luZwogICoKICAqIFRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgYXQgbW91bnQgdGltZSB0byB0dXJuIG9uIHZhcmlvdXMgbGV2ZWxzIG9mCiAgKiB2ZXJib3NpdHkgYW5kIHRyYWNpbmcgd2hpY2ggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHN5c3RlbSBsb2dzLgpAQCAtNTQsNiArNTYsNyBAQAogCVA5X0RFQlVHX0ZDQUxMID0JKDE8PDgpLAogCVA5X0RFQlVHX0ZJRCA9CQkoMTw8OSksCiAJUDlfREVCVUdfUEtUID0JCSgxPDwxMCksCisJUDlfREVCVUdfRlNDID0JCSgxPDwxMSksCiB9OwogCiAjaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2NtLmggYi9pbmNsdWRlL3JkbWEvaWJfY20uaAppbmRleCA5Mzg4NTgzLi5jOGY5NGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfY20uaApAQCAtNDgyLDcgKzQ4Miw3IEBACiAgKiAgIG1lc3NhZ2UuCiAgKiBAY21faWQ6IENvbm5lY3Rpb24gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gbWVzc2FnZS4KICAqIEBzZXJ2aWNlX3RpbWVvdXQ6IFRoZSBsb3dlciA1LWJpdHMgc3BlY2lmeSB0aGUgbWF4aW11bSB0aW1lIHJlcXVpcmVkIGZvcgotICogICB0aGUgc2VuZGVyIHRvIHJlcGx5IHRvIHRvIHRoZSBjb25uZWN0aW9uIG1lc3NhZ2UuICBUaGUgdXBwZXIgMy1iaXRzCisgKiAgIHRoZSBzZW5kZXIgdG8gcmVwbHkgdG8gdGhlIGNvbm5lY3Rpb24gbWVzc2FnZS4gIFRoZSB1cHBlciAzLWJpdHMKICAqICAgc3BlY2lmeSBhZGRpdGlvbmFsIGNvbnRyb2wgZmxhZ3MuCiAgKiBAcHJpdmF0ZV9kYXRhOiBPcHRpb25hbCB1c2VyLWRlZmluZWQgcHJpdmF0ZSBkYXRhIHNlbnQgd2l0aCB0aGUKICAqICAgbWVzc2FnZSByZWNlaXB0IGFja25vd2xlZGdlbWVudC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mYy9mY19mYzIuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mYzIuaAppbmRleCBjZmY4YThjLi5mODc3NzdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmMvZmNfZmMyLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjL2ZjX2ZjMi5oCkBAIC05Miw4ICs5Miw3IEBACiAJX191OAlfZXNiX3Jlc3ZkWzRdOwogCV9fdTgJZXNiX3NlcnZpY2VfcGFyYW1zWzExMl07IC8qIFRCRCAqLwogCV9fdTgJZXNiX3NlcV9zdGF0dXNbOF07CS8qIHNlcXVlbmNlIHN0YXR1c2VzLCA4IGJ5dGVzIGVhY2ggKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7OwotCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKgogICogRGVmaW5lIGV4cGVjdGVkIHNpemUgZm9yIEFTU0VSVHMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmgKaW5kZXggMTQ5M2M1NC4uZWFmNDZiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMva21lbS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2ttZW0uaApAQCAtMjI1LDYgKzIyNSwxNjkgQEAKIAogCVRQX3ByaW50aygiY2FsbF9zaXRlPSVseCBwdHI9JXAiLCBfX2VudHJ5LT5jYWxsX3NpdGUsIF9fZW50cnktPnB0cikKICk7CisKK1RSQUNFX0VWRU5UKG1tX3BhZ2VfZnJlZV9kaXJlY3QsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKSwKKworCVRQX0FSR1MocGFnZSwgb3JkZXIpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCW9yZGVyCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wYWdlCQk9IHBhZ2U7CisJCV9fZW50cnktPm9yZGVyCQk9IG9yZGVyOworCSksCisKKwlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCIsCisJCQlfX2VudHJ5LT5wYWdlLAorCQkJcGFnZV90b19wZm4oX19lbnRyeS0+cGFnZSksCisJCQlfX2VudHJ5LT5vcmRlcikKKyk7CisKK1RSQUNFX0VWRU5UKG1tX3BhZ2V2ZWNfZnJlZSwKKworCVRQX1BST1RPKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgY29sZCksCisKKwlUUF9BUkdTKHBhZ2UsIGNvbGQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAlpbnQsCQljb2xkCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wYWdlCQk9IHBhZ2U7CisJCV9fZW50cnktPmNvbGQJCT0gY29sZDsKKwkpLAorCisJVFBfcHJpbnRrKCJwYWdlPSVwIHBmbj0lbHUgb3JkZXI9MCBjb2xkPSVkIiwKKwkJCV9fZW50cnktPnBhZ2UsCisJCQlwYWdlX3RvX3BmbihfX2VudHJ5LT5wYWdlKSwKKwkJCV9fZW50cnktPmNvbGQpCispOworCitUUkFDRV9FVkVOVChtbV9wYWdlX2FsbG9jLAorCisJVFBfUFJPVE8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKKwkJCWdmcF90IGdmcF9mbGFncywgaW50IG1pZ3JhdGV0eXBlKSwKKworCVRQX0FSR1MocGFnZSwgb3JkZXIsIGdmcF9mbGFncywgbWlncmF0ZXR5cGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCW9yZGVyCQkpCisJCV9fZmllbGQoCWdmcF90LAkJZ2ZwX2ZsYWdzCSkKKwkJX19maWVsZCgJaW50LAkJbWlncmF0ZXR5cGUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cGFnZQkJPSBwYWdlOworCQlfX2VudHJ5LT5vcmRlcgkJPSBvcmRlcjsKKwkJX19lbnRyeS0+Z2ZwX2ZsYWdzCT0gZ2ZwX2ZsYWdzOworCQlfX2VudHJ5LT5taWdyYXRldHlwZQk9IG1pZ3JhdGV0eXBlOworCSksCisKKwlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCBtaWdyYXRldHlwZT0lZCBnZnBfZmxhZ3M9JXMiLAorCQlfX2VudHJ5LT5wYWdlLAorCQlwYWdlX3RvX3BmbihfX2VudHJ5LT5wYWdlKSwKKwkJX19lbnRyeS0+b3JkZXIsCisJCV9fZW50cnktPm1pZ3JhdGV0eXBlLAorCQlzaG93X2dmcF9mbGFncyhfX2VudHJ5LT5nZnBfZmxhZ3MpKQorKTsKKworVFJBQ0VfRVZFTlQobW1fcGFnZV9hbGxvY196b25lX2xvY2tlZCwKKworCVRQX1BST1RPKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSksCisKKwlUUF9BUkdTKHBhZ2UsIG9yZGVyLCBtaWdyYXRldHlwZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlzdHJ1Y3QgcGFnZSAqLAlwYWdlCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJb3JkZXIJCSkKKwkJX19maWVsZCgJaW50LAkJbWlncmF0ZXR5cGUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cGFnZQkJPSBwYWdlOworCQlfX2VudHJ5LT5vcmRlcgkJPSBvcmRlcjsKKwkJX19lbnRyeS0+bWlncmF0ZXR5cGUJPSBtaWdyYXRldHlwZTsKKwkpLAorCisJVFBfcHJpbnRrKCJwYWdlPSVwIHBmbj0lbHUgb3JkZXI9JXUgbWlncmF0ZXR5cGU9JWQgcGVyY3B1X3JlZmlsbD0lZCIsCisJCV9fZW50cnktPnBhZ2UsCisJCXBhZ2VfdG9fcGZuKF9fZW50cnktPnBhZ2UpLAorCQlfX2VudHJ5LT5vcmRlciwKKwkJX19lbnRyeS0+bWlncmF0ZXR5cGUsCisJCV9fZW50cnktPm9yZGVyID09IDApCispOworCitUUkFDRV9FVkVOVChtbV9wYWdlX3BjcHVfZHJhaW4sCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpLAorCisJVFBfQVJHUyhwYWdlLCBvcmRlciwgbWlncmF0ZXR5cGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAlpbnQsCQlvcmRlcgkJKQorCQlfX2ZpZWxkKAlpbnQsCQltaWdyYXRldHlwZQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wYWdlCQk9IHBhZ2U7CisJCV9fZW50cnktPm9yZGVyCQk9IG9yZGVyOworCQlfX2VudHJ5LT5taWdyYXRldHlwZQk9IG1pZ3JhdGV0eXBlOworCSksCisKKwlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCBtaWdyYXRldHlwZT0lZCIsCisJCV9fZW50cnktPnBhZ2UsCisJCXBhZ2VfdG9fcGZuKF9fZW50cnktPnBhZ2UpLAorCQlfX2VudHJ5LT5vcmRlciwKKwkJX19lbnRyeS0+bWlncmF0ZXR5cGUpCispOworCitUUkFDRV9FVkVOVChtbV9wYWdlX2FsbG9jX2V4dGZyYWcsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCWludCBhbGxvY19vcmRlciwgaW50IGZhbGxiYWNrX29yZGVyLAorCQkJaW50IGFsbG9jX21pZ3JhdGV0eXBlLCBpbnQgZmFsbGJhY2tfbWlncmF0ZXR5cGUpLAorCisJVFBfQVJHUyhwYWdlLAorCQlhbGxvY19vcmRlciwgZmFsbGJhY2tfb3JkZXIsCisJCWFsbG9jX21pZ3JhdGV0eXBlLCBmYWxsYmFja19taWdyYXRldHlwZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlzdHJ1Y3QgcGFnZSAqLAlwYWdlCQkJKQorCQlfX2ZpZWxkKAlpbnQsCQlhbGxvY19vcmRlcgkJKQorCQlfX2ZpZWxkKAlpbnQsCQlmYWxsYmFja19vcmRlcgkJKQorCQlfX2ZpZWxkKAlpbnQsCQlhbGxvY19taWdyYXRldHlwZQkpCisJCV9fZmllbGQoCWludCwJCWZhbGxiYWNrX21pZ3JhdGV0eXBlCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnBhZ2UJCQk9IHBhZ2U7CisJCV9fZW50cnktPmFsbG9jX29yZGVyCQk9IGFsbG9jX29yZGVyOworCQlfX2VudHJ5LT5mYWxsYmFja19vcmRlcgkJPSBmYWxsYmFja19vcmRlcjsKKwkJX19lbnRyeS0+YWxsb2NfbWlncmF0ZXR5cGUJPSBhbGxvY19taWdyYXRldHlwZTsKKwkJX19lbnRyeS0+ZmFsbGJhY2tfbWlncmF0ZXR5cGUJPSBmYWxsYmFja19taWdyYXRldHlwZTsKKwkpLAorCisJVFBfcHJpbnRrKCJwYWdlPSVwIHBmbj0lbHUgYWxsb2Nfb3JkZXI9JWQgZmFsbGJhY2tfb3JkZXI9JWQgcGFnZWJsb2NrX29yZGVyPSVkIGFsbG9jX21pZ3JhdGV0eXBlPSVkIGZhbGxiYWNrX21pZ3JhdGV0eXBlPSVkIGZyYWdtZW50aW5nPSVkIGNoYW5nZV9vd25lcnNoaXA9JWQiLAorCQlfX2VudHJ5LT5wYWdlLAorCQlwYWdlX3RvX3BmbihfX2VudHJ5LT5wYWdlKSwKKwkJX19lbnRyeS0+YWxsb2Nfb3JkZXIsCisJCV9fZW50cnktPmZhbGxiYWNrX29yZGVyLAorCQlwYWdlYmxvY2tfb3JkZXIsCisJCV9fZW50cnktPmFsbG9jX21pZ3JhdGV0eXBlLAorCQlfX2VudHJ5LT5mYWxsYmFja19taWdyYXRldHlwZSwKKwkJX19lbnRyeS0+ZmFsbGJhY2tfb3JkZXIgPCBwYWdlYmxvY2tfb3JkZXIsCisJCV9fZW50cnktPmFsbG9jX21pZ3JhdGV0eXBlID09IF9fZW50cnktPmZhbGxiYWNrX21pZ3JhdGV0eXBlKQorKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9LTUVNX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9wb3dlci5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZkNTc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaApAQCAtMCwwICsxLDgxIEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBwb3dlcgorCisjaWYgIWRlZmluZWQoX1RSQUNFX1BPV0VSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9QT1dFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI2lmbmRlZiBfVFJBQ0VfUE9XRVJfRU5VTV8KKyNkZWZpbmUgX1RSQUNFX1BPV0VSX0VOVU1fCitlbnVtIHsKKwlQT1dFUl9OT05FID0gMCwKKwlQT1dFUl9DU1RBVEUgPSAxLAorCVBPV0VSX1BTVEFURSA9IDIsCit9OworI2VuZGlmCisKKworCitUUkFDRV9FVkVOVChwb3dlcl9zdGFydCwKKworCVRQX1BST1RPKHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3RhdGUpLAorCisJVFBfQVJHUyh0eXBlLCBzdGF0ZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1NjQsCQl0eXBlCQkpCisJCV9fZmllbGQoCXU2NCwJCXN0YXRlCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT50eXBlID0gdHlwZTsKKwkJX19lbnRyeS0+c3RhdGUgPSBzdGF0ZTsKKwkpLAorCisJVFBfcHJpbnRrKCJ0eXBlPSVsdSBzdGF0ZT0lbHUiLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT50eXBlLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT5zdGF0ZSkKKyk7CisKK1RSQUNFX0VWRU5UKHBvd2VyX2VuZCwKKworCVRQX1BST1RPKGludCBkdW1teSksCisKKwlUUF9BUkdTKGR1bW15KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXU2NCwJCWR1bW15CQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kdW1teSA9IDB4ZmZmZjsKKwkpLAorCisJVFBfcHJpbnRrKCJkdW1teT0lbHUiLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT5kdW1teSkKKworKTsKKworCitUUkFDRV9FVkVOVChwb3dlcl9mcmVxdWVuY3ksCisKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN0YXRlKSwKKworCVRQX0FSR1ModHlwZSwgc3RhdGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdTY0LAkJdHlwZQkJKQorCQlfX2ZpZWxkKAl1NjQsCQlzdGF0ZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dHlwZSA9IHR5cGU7CisJCV9fZW50cnktPnN0YXRlID0gc3RhdGU7CisJKSwKKworCVRQX3ByaW50aygidHlwZT0lbHUgc3RhdGU9JWx1IiwgKHVuc2lnbmVkIGxvbmcpX19lbnRyeS0+dHlwZSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPnN0YXRlKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9QT1dFUl9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKaW5kZXggYjQ4ZjFhZC4uNDA2OWM0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCkBAIC0zODAsNiArMzgwLDM5IEBACiApOwogCiAvKgorICogVHJhY2Vwb2ludCBmb3IgYWNjb3VudGluZyBydW50aW1lICh0aW1lIHRoZSB0YXNrIGlzIGV4ZWN1dGluZworICogb24gYSBDUFUpLgorICovCitUUkFDRV9FVkVOVChzY2hlZF9zdGF0X3J1bnRpbWUsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IHJ1bnRpbWUsIHU2NCB2cnVudGltZSksCisKKwlUUF9BUkdTKHRzaywgcnVudGltZSwgdnJ1bnRpbWUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSggY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoIHBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoIHU2NCwJcnVudGltZQkJCSkKKwkJX19maWVsZCggdTY0LAl2cnVudGltZQkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCB0c2stPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gdHNrLT5waWQ7CisJCV9fZW50cnktPnJ1bnRpbWUJPSBydW50aW1lOworCQlfX2VudHJ5LT52cnVudGltZQk9IHZydW50aW1lOworCSkKKwlUUF9wZXJmX2Fzc2lnbigKKwkJX19wZXJmX2NvdW50KHJ1bnRpbWUpOworCSksCisKKwlUUF9wcmludGsoInRhc2s6ICVzOiVkIHJ1bnRpbWU6ICVMdSBbbnNdLCB2cnVudGltZTogJUx1IFtuc10iLAorCQkJX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5ydW50aW1lLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT52cnVudGltZSkKKyk7CisKKy8qCiAgKiBUcmFjZXBvaW50IGZvciBhY2NvdW50aW5nIHNsZWVwIHRpbWUgKHRpbWUgdGhlIHRhc2sgaXMgbm90IHJ1bm5hYmxlLAogICogaW5jbHVkaW5nIGlvd2FpdCwgc2VlIGJlbG93KS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0NGM0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKQEAgLTAsMCArMSwzNDIgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRpbWVyCisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfVElNRVJfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX1RJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworLyoqCisgKiB0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIGluaXRpYWxpemVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKKyAqLworVFJBQ0VfRVZFTlQodGltZXJfaW5pdCwKKworCVRQX1BST1RPKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciksCisKKwlUUF9BUkdTKHRpbWVyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoIHZvaWQgKiwJdGltZXIJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKKwkpLAorCisJVFBfcHJpbnRrKCJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiB0aW1lcl9zdGFydCAtIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBpcyBzdGFydGVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKKyAqIEBleHBpcmVzOgl0aGUgdGltZXJzIGV4cGlyeSB0aW1lCisgKi8KK1RSQUNFX0VWRU5UKHRpbWVyX3N0YXJ0LAorCisJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpLAorCisJVFBfQVJHUyh0aW1lciwgZXhwaXJlcyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCQkpCisJCV9fZmllbGQoIHZvaWQgKiwJZnVuY3Rpb24JKQorCQlfX2ZpZWxkKCB1bnNpZ25lZCBsb25nLAlleHBpcmVzCQkpCisJCV9fZmllbGQoIHVuc2lnbmVkIGxvbmcsCW5vdwkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJCT0gdGltZXI7CisJCV9fZW50cnktPmZ1bmN0aW9uCT0gdGltZXItPmZ1bmN0aW9uOworCQlfX2VudHJ5LT5leHBpcmVzCT0gZXhwaXJlczsKKwkJX19lbnRyeS0+bm93CQk9IGppZmZpZXM7CisJKSwKKworCVRQX3ByaW50aygidGltZXIgJXA6IGZ1bmMgJXBmLCBleHBpcmVzICVsdSwgdGltZW91dCAlbGQiLAorCQkgIF9fZW50cnktPnRpbWVyLCBfX2VudHJ5LT5mdW5jdGlvbiwgX19lbnRyeS0+ZXhwaXJlcywKKwkJICAobG9uZylfX2VudHJ5LT5leHBpcmVzIC0gX19lbnRyeS0+bm93KQorKTsKKworLyoqCisgKiB0aW1lcl9leHBpcmVfZW50cnkgLSBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0aW1lciBjYWxsYmFjaworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCB0aW1lcl9saXN0CisgKgorICogQWxsb3dzIHRvIGRldGVybWluZSB0aGUgdGltZXIgbGF0ZW5jeS4KKyAqLworVFJBQ0VfRVZFTlQodGltZXJfZXhwaXJlX2VudHJ5LAorCisJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKSwKKworCVRQX0FSR1ModGltZXIpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggdm9pZCAqLAl0aW1lcgkpCisJCV9fZmllbGQoIHVuc2lnbmVkIGxvbmcsCW5vdwkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT50aW1lcgkJPSB0aW1lcjsKKwkJX19lbnRyeS0+bm93CQk9IGppZmZpZXM7CisJKSwKKworCVRQX3ByaW50aygidGltZXIgJXA6IG5vdyAlbHUiLCBfX2VudHJ5LT50aW1lciwgX19lbnRyeS0+bm93KQorKTsKKworLyoqCisgKiB0aW1lcl9leHBpcmVfZXhpdCAtIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGltZXIgY2FsbGJhY2sgcmV0dXJucworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCB0aW1lcl9saXN0CisgKgorICogV2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHRpbWVyX2V4cGlyZV9lbnRyeSB0cmFjZXBvaW50IHdlIGNhbgorICogZGV0ZXJtaW5lIHRoZSBydW50aW1lIG9mIHRoZSB0aW1lciBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBOT1RFOiBEbyBOT1QgZGVyZWZlcm5jZSB0aW1lciBpbiBUUF9mYXN0X2Fzc2lnbi4gVGhlIHBvaW50ZXIgbWlnaHQKKyAqIGJlIGludmFsaWQuIFdlIHNvbGVseSB0cmFjayB0aGUgcG9pbnRlci4KKyAqLworVFJBQ0VfRVZFTlQodGltZXJfZXhwaXJlX2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHZvaWQgKiwJdGltZXIJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKKwkpLAorCisJVFBfcHJpbnRrKCJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiB0aW1lcl9jYW5jZWwgLSBjYWxsZWQgd2hlbiB0aGUgdGltZXIgaXMgY2FuY2VsZWQKKyAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgdGltZXJfbGlzdAorICovCitUUkFDRV9FVkVOVCh0aW1lcl9jYW5jZWwsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJKSwKKworCVRQX3ByaW50aygidGltZXIgJXAiLCBfX2VudHJ5LT50aW1lcikKKyk7CisKKy8qKgorICogaHJ0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIGhydGltZXIgaXMgaW5pdGlhbGl6ZWQKKyAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgaHJ0aW1lcgorICogQGNsb2NraWQ6CXRoZSBocnRpbWVycyBjbG9jaworICogQG1vZGU6CXRoZSBocnRpbWVycyBtb2RlCisgKi8KK1RSQUNFX0VWRU5UKGhydGltZXJfaW5pdCwKKworCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICp0aW1lciwgY2xvY2tpZF90IGNsb2NraWQsCisJCSBlbnVtIGhydGltZXJfbW9kZSBtb2RlKSwKKworCVRQX0FSR1ModGltZXIsIGNsb2NraWQsIG1vZGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggdm9pZCAqLAkJdGltZXIJCSkKKwkJX19maWVsZCggY2xvY2tpZF90LAkJY2xvY2tpZAkJKQorCQlfX2ZpZWxkKCBlbnVtIGhydGltZXJfbW9kZSwJbW9kZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJCT0gdGltZXI7CisJCV9fZW50cnktPmNsb2NraWQJPSBjbG9ja2lkOworCQlfX2VudHJ5LT5tb2RlCQk9IG1vZGU7CisJKSwKKworCVRQX3ByaW50aygiaHJ0aW1lciAlcCwgY2xvY2tpZCAlcywgbW9kZSAlcyIsIF9fZW50cnktPnRpbWVyLAorCQkgIF9fZW50cnktPmNsb2NraWQgPT0gQ0xPQ0tfUkVBTFRJTUUgPworCQkJIkNMT0NLX1JFQUxUSU1FIiA6ICJDTE9DS19NT05PVE9OSUMiLAorCQkgIF9fZW50cnktPm1vZGUgPT0gSFJUSU1FUl9NT0RFX0FCUyA/CisJCQkiSFJUSU1FUl9NT0RFX0FCUyIgOiAiSFJUSU1FUl9NT0RFX1JFTCIpCispOworCisvKioKKyAqIGhydGltZXJfc3RhcnQgLSBjYWxsZWQgd2hlbiB0aGUgaHJ0aW1lciBpcyBzdGFydGVkCisgKiBAdGltZXI6IHBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqLworVFJBQ0VfRVZFTlQoaHJ0aW1lcl9zdGFydCwKKworCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICp0aW1lciksCisKKwlUUF9BUkdTKHRpbWVyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoIHZvaWQgKiwJdGltZXIJCSkKKwkJX19maWVsZCggdm9pZCAqLAlmdW5jdGlvbgkpCisJCV9fZmllbGQoIHM2NCwJCWV4cGlyZXMJCSkKKwkJX19maWVsZCggczY0LAkJc29mdGV4cGlyZXMJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJCT0gdGltZXI7CisJCV9fZW50cnktPmZ1bmN0aW9uCT0gdGltZXItPmZ1bmN0aW9uOworCQlfX2VudHJ5LT5leHBpcmVzCT0gaHJ0aW1lcl9nZXRfZXhwaXJlcyh0aW1lcikudHY2NDsKKwkJX19lbnRyeS0+c29mdGV4cGlyZXMJPSBocnRpbWVyX2dldF9zb2Z0ZXhwaXJlcyh0aW1lcikudHY2NDsKKwkpLAorCisJVFBfcHJpbnRrKCJocnRpbWVyICVwLCBmdW5jICVwZiwgZXhwaXJlcyAlbGx1LCBzb2Z0ZXhwaXJlcyAlbGx1IiwKKwkJICBfX2VudHJ5LT50aW1lciwgX19lbnRyeS0+ZnVuY3Rpb24sCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucygoa3RpbWVfdCkgeworCQkJCSAgLnR2NjQgPSBfX2VudHJ5LT5leHBpcmVzIH0pLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoKGt0aW1lX3QpIHsKKwkJCQkgIC50djY0ID0gX19lbnRyeS0+c29mdGV4cGlyZXMgfSkpCispOworCisvKioKKyAqIGh0aW1tZXJfZXhwaXJlX2VudHJ5IC0gY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgaHJ0aW1lciBjYWxsYmFjaworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCBocnRpbWVyCisgKiBAbm93Oglwb2ludGVyIHRvIHZhcmlhYmxlIHdoaWNoIGNvbnRhaW5zIGN1cnJlbnQgdGltZSBvZiB0aGUKKyAqCQl0aW1lcnMgYmFzZS4KKyAqCisgKiBBbGxvd3MgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lciBsYXRlbmN5LgorICovCitUUkFDRV9FVkVOVChocnRpbWVyX2V4cGlyZV9lbnRyeSwKKworCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICp0aW1lciwga3RpbWVfdCAqbm93KSwKKworCVRQX0FSR1ModGltZXIsIG5vdyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkJX19maWVsZCggczY0LAkJbm93CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJCV9fZW50cnktPm5vdwk9IG5vdy0+dHY2NDsKKwkpLAorCisJVFBfcHJpbnRrKCJocnRpbWVyICVwLCBub3cgJWxsdSIsIF9fZW50cnktPnRpbWVyLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoKGt0aW1lX3QpIHsKKwkJCQkgIC50djY0ID0gX19lbnRyeS0+bm93IH0pKQorICk7CisKKy8qKgorICogaHJ0aW1lcl9leHBpcmVfZXhpdCAtIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgaHJ0aW1lciBjYWxsYmFjayByZXR1cm5zCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqCisgKiBXaGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgaHJ0aW1lcl9leHBpcmVfZW50cnkgdHJhY2Vwb2ludCB3ZSBjYW4KKyAqIGRldGVybWluZSB0aGUgcnVudGltZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKi8KK1RSQUNFX0VWRU5UKGhydGltZXJfZXhwaXJlX2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJKSwKKworCVRQX3ByaW50aygiaHJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiBocnRpbWVyX2NhbmNlbCAtIGNhbGxlZCB3aGVuIHRoZSBocnRpbWVyIGlzIGNhbmNlbGVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqLworVFJBQ0VfRVZFTlQoaHJ0aW1lcl9jYW5jZWwsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJKSwKKworCVRQX3ByaW50aygiaHJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiBpdGltZXJfc3RhdGUgLSBjYWxsZWQgd2hlbiBpdGltZXIgaXMgc3RhcnRlZCBvciBjYW5jZWxlZAorICogQHdoaWNoOgluYW1lIG9mIHRoZSBpbnRlcnZhbCB0aW1lcgorICogQHZhbHVlOgl0aGUgaXRpbWVycyB2YWx1ZSwgaXRpbWVyIGlzIGNhbmNlbGVkIGlmIHZhbHVlLT5pdF92YWx1ZSBpcworICoJCXplcm8sIG90aGVyd2lzZSBpdCBpcyBzdGFydGVkCisgKiBAZXhwaXJlczoJdGhlIGl0aW1lcnMgZXhwaXJ5IHRpbWUKKyAqLworVFJBQ0VfRVZFTlQoaXRpbWVyX3N0YXRlLAorCisJVFBfUFJPVE8oaW50IHdoaWNoLCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpjb25zdCB2YWx1ZSwKKwkJIGNwdXRpbWVfdCBleHBpcmVzKSwKKworCVRQX0FSR1Mod2hpY2gsIHZhbHVlLCBleHBpcmVzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJCXdoaWNoCQkpCisJCV9fZmllbGQoCWNwdXRpbWVfdCwJZXhwaXJlcwkJKQorCQlfX2ZpZWxkKAlsb25nLAkJdmFsdWVfc2VjCSkKKwkJX19maWVsZCgJbG9uZywJCXZhbHVlX3VzZWMJKQorCQlfX2ZpZWxkKAlsb25nLAkJaW50ZXJ2YWxfc2VjCSkKKwkJX19maWVsZCgJbG9uZywJCWludGVydmFsX3VzZWMJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+d2hpY2gJCT0gd2hpY2g7CisJCV9fZW50cnktPmV4cGlyZXMJPSBleHBpcmVzOworCQlfX2VudHJ5LT52YWx1ZV9zZWMJPSB2YWx1ZS0+aXRfdmFsdWUudHZfc2VjOworCQlfX2VudHJ5LT52YWx1ZV91c2VjCT0gdmFsdWUtPml0X3ZhbHVlLnR2X3VzZWM7CisJCV9fZW50cnktPmludGVydmFsX3NlYwk9IHZhbHVlLT5pdF9pbnRlcnZhbC50dl9zZWM7CisJCV9fZW50cnktPmludGVydmFsX3VzZWMJPSB2YWx1ZS0+aXRfaW50ZXJ2YWwudHZfdXNlYzsKKwkpLAorCisJVFBfcHJpbnRrKCJ3aGljaCAlZCwgZXhwaXJlcyAlbHUsIGl0X3ZhbHVlICVsdS4lbHUsIGl0X2ludGVydmFsICVsdS4lbHUiLAorCQkgIF9fZW50cnktPndoaWNoLCBfX2VudHJ5LT5leHBpcmVzLAorCQkgIF9fZW50cnktPnZhbHVlX3NlYywgX19lbnRyeS0+dmFsdWVfdXNlYywKKwkJICBfX2VudHJ5LT5pbnRlcnZhbF9zZWMsIF9fZW50cnktPmludGVydmFsX3VzZWMpCispOworCisvKioKKyAqIGl0aW1lcl9leHBpcmUgLSBjYWxsZWQgd2hlbiBpdGltZXIgZXhwaXJlcworICogQHdoaWNoOgl0eXBlIG9mIHRoZSBpbnRlcnZhbCB0aW1lcgorICogQHBpZDoJcGlkIG9mIHRoZSBwcm9jZXNzIHdoaWNoIG93bnMgdGhlIHRpbWVyCisgKiBAbm93OgljdXJyZW50IHRpbWUsIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBsYXRlbmN5IG9mIGl0aW1lcgorICovCitUUkFDRV9FVkVOVChpdGltZXJfZXhwaXJlLAorCisJVFBfUFJPVE8oaW50IHdoaWNoLCBzdHJ1Y3QgcGlkICpwaWQsIGNwdXRpbWVfdCBub3cpLAorCisJVFBfQVJHUyh3aGljaCwgcGlkLCBub3cpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggaW50ICwJCXdoaWNoCSkKKwkJX19maWVsZCggcGlkX3QsCQlwaWQJKQorCQlfX2ZpZWxkKCBjcHV0aW1lX3QsCW5vdwkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT53aGljaAk9IHdoaWNoOworCQlfX2VudHJ5LT5ub3cJPSBub3c7CisJCV9fZW50cnktPnBpZAk9IHBpZF9ucihwaWQpOworCSksCisKKwkgICAgVFBfcHJpbnRrKCJ3aGljaCAlZCwgcGlkICVkLCBub3cgJWx1IiwgX19lbnRyeS0+d2hpY2gsCisJCSAgICAgIChpbnQpIF9fZW50cnktPnBpZCwgX19lbnRyeS0+bm93KQorKTsKKworI2VuZGlmIC8qICBfVFJBQ0VfVElNRVJfSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCmluZGV4IDcyYTNiNDMuLmNjMGQ5NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaApAQCAtMzc4LDI0ICszNzgsMTggQEAKICNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQogCiAvKgotICogR2VuZXJhdGUgdGhlIGZ1bmN0aW9ucyBuZWVkZWQgZm9yIHRyYWNlcG9pbnQgcGVyZl9jb3VudGVyIHN1cHBvcnQuCisgKiBHZW5lcmF0ZSB0aGUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgdHJhY2Vwb2ludCBwZXJmX2V2ZW50IHN1cHBvcnQuCiAgKgogICogTk9URTogVGhlIGluc2VydGlvbiBwcm9maWxlIGNhbGxiYWNrIChmdHJhY2VfcHJvZmlsZV88Y2FsbD4pIGlzIGRlZmluZWQgbGF0ZXIKICAqCi0gKiBzdGF0aWMgaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV88Y2FsbD4oc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKQorICogc3RhdGljIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGVfPGNhbGw+KHZvaWQpCiAgKiB7Ci0gKiAJaW50IHJldCA9IDA7Ci0gKgotICogCWlmICghYXRvbWljX2luY19yZXR1cm4oJmV2ZW50X2NhbGwtPnByb2ZpbGVfY291bnQpKQotICogCQlyZXQgPSByZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX3Byb2ZpbGVfPGNhbGw+KTsKLSAqCi0gKiAJcmV0dXJuIHJldDsKKyAqIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9wcm9maWxlXzxjYWxsPik7CiAgKiB9CiAgKgotICogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV88Y2FsbD4oc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKQorICogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV88Y2FsbD4odm9pZCkKICAqIHsKLSAqIAlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmV2ZW50LT5jYWxsLT5wcm9maWxlX2NvdW50KSkKLSAqIAkJdW5yZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX3Byb2ZpbGVfPGNhbGw+KTsKKyAqIAl1bnJlZ2lzdGVyX3RyYWNlXzxjYWxsPihmdHJhY2VfcHJvZmlsZV88Y2FsbD4pOwogICogfQogICoKICAqLwpAQCAtNDA1LDIwICszOTksMTQgQEAKIAkJCQkJCQkJCVwKIHN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90byk7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpIFwKK3N0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCh2b2lkKQkJCQlcCiB7CQkJCQkJCQkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKCFhdG9taWNfaW5jX3JldHVybigmZXZlbnRfY2FsbC0+cHJvZmlsZV9jb3VudCkpCQlcCi0JCXJldCA9IHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcHJvZmlsZV8jI2NhbGwpOwlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAorCXJldHVybiByZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpXAorc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI2NhbGwodm9pZCkJCQkJXAogewkJCQkJCQkJCVwKLQlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmV2ZW50X2NhbGwtPnByb2ZpbGVfY291bnQpKQlcCi0JCXVucmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9wcm9maWxlXyMjY2FsbCk7CQlcCisJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJCQlcCiB9CiAKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQpAQCAtNjU2LDE1ICs2NDQsMTYgQEAKICAqIHsKICAqCXN0cnVjdCBmdHJhY2VfZGF0YV9vZmZzZXRzXzxjYWxsPiBfX21heWJlX3VudXNlZCBfX2RhdGFfb2Zmc2V0czsKICAqCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCA9ICZldmVudF88Y2FsbD47Ci0gKglleHRlcm4gdm9pZCBwZXJmX3RwY291bnRlcl9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CisgKglleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCwgdTY0LCB1NjQsIHZvaWQgKiwgaW50KTsKICAqCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CiAgKgl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CiAgKgl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKyAqCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwogICoJaW50IF9fZW50cnlfc2l6ZTsKICAqCWludCBfX2RhdGFfc2l6ZTsKKyAqCWludCBfX2NwdQogICoJaW50IHBjOwogICoKLSAqCWxvY2FsX3NhdmVfZmxhZ3MoaXJxX2ZsYWdzKTsKICAqCXBjID0gcHJlZW1wdF9jb3VudCgpOwogICoKICAqCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXzxjYWxsPigmX19kYXRhX29mZnNldHMsIGFyZ3MpOwpAQCAtNjc1LDI1ICs2NjQsMzQgQEAKICAqCQkJICAgICBzaXplb2YodTY0KSk7CiAgKglfX2VudHJ5X3NpemUgLT0gc2l6ZW9mKHUzMik7CiAgKgotICoJZG8gewotICoJCWNoYXIgcmF3X2RhdGFbX19lbnRyeV9zaXplXTsgPC0gYWxsb2NhdGUgb3VyIHNhbXBsZSBpbiB0aGUgc3RhY2sKLSAqCQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKKyAqCS8vIFByb3RlY3QgdGhlIG5vbiBubWkgYnVmZmVyCisgKgkvLyBUaGlzIGFsc28gcHJvdGVjdHMgdGhlIHJjdSByZWFkIHNpZGUKKyAqCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisgKglfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKICAqCi0gKgkJemVybyBkZWFkIGJ5dGVzIGZyb20gYWxpZ25tZW50IHRvIGF2b2lkIHN0YWNrIGxlYWsgdG8gdXNlcnNwYWNlOgorICoJaWYgKGluX25taSgpKQorICoJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CisgKgllbHNlCisgKgkJcmF3X2RhdGEgPSByY3VfZGVyZWZlcmVuY2UodHJhY2VfcHJvZmlsZV9idWYpOwogICoKLSAqCQkqKHU2NCAqKSgmcmF3X2RhdGFbX19lbnRyeV9zaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7Ci0gKgkJZW50cnkgPSAoc3RydWN0IGZ0cmFjZV9yYXdfPGNhbGw+ICopcmF3X2RhdGE7Ci0gKgkJZW50ID0gJmVudHJ5LT5lbnQ7Ci0gKgkJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwotICoJCWVudC0+dHlwZSA9IGV2ZW50X2NhbGwtPmlkOworICoJaWYgKCFyYXdfZGF0YSkKKyAqCQlnb3RvIGVuZDsKICAqCi0gKgkJPHRzdHJ1Y3Q+IDwtIGRvIHNvbWUgam9icyB3aXRoIGR5bmFtaWMgYXJyYXlzCisgKglyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHJhd19kYXRhLCBfX2NwdSk7CiAgKgotICoJCTxhc3NpZ24+ICA8LSBhZmZlY3Qgb3VyIHZhbHVlcworICoJLy96ZXJvIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbm1lbnQgdG8gYXZvaWQgc3RhY2sgbGVhayB0byB1c2Vyc3BhY2U6CisgKgkqKHU2NCAqKSgmcmF3X2RhdGFbX19lbnRyeV9zaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisgKgllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4gKilyYXdfZGF0YTsKKyAqCWVudCA9ICZlbnRyeS0+ZW50OworICoJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOworICoJZW50LT50eXBlID0gZXZlbnRfY2FsbC0+aWQ7CiAgKgotICoJCXBlcmZfdHBjb3VudGVyX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAotICoJCQkgICAgIF9fZW50cnlfc2l6ZSk7ICA8LSBzdWJtaXQgdGhlbSB0byBwZXJmIGNvdW50ZXIKLSAqCX0gd2hpbGUgKDApOworICoJPHRzdHJ1Y3Q+IDwtIGRvIHNvbWUgam9icyB3aXRoIGR5bmFtaWMgYXJyYXlzCisgKgorICoJPGFzc2lnbj4gIDwtIGFmZmVjdCBvdXIgdmFsdWVzCisgKgorICoJcGVyZl90cF9ldmVudChldmVudF9jYWxsLT5pZCwgX19hZGRyLCBfX2NvdW50LCBlbnRyeSwKKyAqCQkgICAgIF9fZW50cnlfc2l6ZSk7ICA8LSBzdWJtaXQgdGhlbSB0byBwZXJmIGNvdW50ZXIKICAqCiAgKiB9CiAgKi8KQEAgLTcxMiwxNSArNzEwLDE3IEBACiB7CQkJCQkJCQkJXAogCXN0cnVjdCBmdHJhY2VfZGF0YV9vZmZzZXRzXyMjY2FsbCBfX21heWJlX3VudXNlZCBfX2RhdGFfb2Zmc2V0cztcCiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsID0gJmV2ZW50XyMjY2FsbDsJCVwKLQlleHRlcm4gdm9pZCBwZXJmX3RwY291bnRlcl9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CVwKKwlleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCwgdTY0LCB1NjQsIHZvaWQgKiwgaW50KTsJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKIAl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CQkJCQlcCisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCQlcCiAJaW50IF9fZW50cnlfc2l6ZTsJCQkJCQlcCiAJaW50IF9fZGF0YV9zaXplOwkJCQkJCVwKKwljaGFyICpyYXdfZGF0YTsJCQkJCQkJXAorCWludCBfX2NwdTsJCQkJCQkJXAogCWludCBwYzsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CQkJCQlcCiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7CQkJCQkJXAogCQkJCQkJCQkJXAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCkBAIC03MjgsMjMgKzcyOCwzOCBAQAogCQkJICAgICBzaXplb2YodTY0KSk7CQkJCVwKIAlfX2VudHJ5X3NpemUgLT0gc2l6ZW9mKHUzMik7CQkJCQlcCiAJCQkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQljaGFyIHJhd19kYXRhW19fZW50cnlfc2l6ZV07CQkJCVwKLQkJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCVwKKwlpZiAoV0FSTl9PTkNFKF9fZW50cnlfc2l6ZSA+IEZUUkFDRV9NQVhfUFJPRklMRV9TSVpFLAkJXAorCQkgICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQkJXAorCQlyZXR1cm47CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQkJKih1NjQgKikoJnJhd19kYXRhW19fZW50cnlfc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwlcCi0JCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKXJhd19kYXRhOwkJXAotCQllbnQgPSAmZW50cnktPmVudDsJCQkJCVwKLQkJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwlcCi0JCWVudC0+dHlwZSA9IGV2ZW50X2NhbGwtPmlkOwkJCQlcCisJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsJCQkJCVwKKwlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsJCQkJCVwKIAkJCQkJCQkJCVwKLQkJdHN0cnVjdAkJCQkJCQlcCisJaWYgKGluX25taSgpKQkJCQkJCQlcCisJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zik7CQlcCiAJCQkJCQkJCQlcCi0JCXsgYXNzaWduOyB9CQkJCQkJXAorCWlmICghcmF3X2RhdGEpCQkJCQkJCVwKKwkJZ290byBlbmQ7CQkJCQkJXAogCQkJCQkJCQkJXAotCQlwZXJmX3RwY291bnRlcl9ldmVudChldmVudF9jYWxsLT5pZCwgX19hZGRyLCBfX2NvdW50LCBlbnRyeSxcCisJcmF3X2RhdGEgPSBwZXJfY3B1X3B0cihyYXdfZGF0YSwgX19jcHUpOwkJCVwKKwkJCQkJCQkJCVwKKwkqKHU2NCAqKSgmcmF3X2RhdGFbX19lbnRyeV9zaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CQlcCisJZW50cnkgPSAoc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsICopcmF3X2RhdGE7CQkJXAorCWVudCA9ICZlbnRyeS0+ZW50OwkJCQkJCVwKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgaXJxX2ZsYWdzLCBwYyk7CQlcCisJZW50LT50eXBlID0gZXZlbnRfY2FsbC0+aWQ7CQkJCQlcCisJCQkJCQkJCQlcCisJdHN0cnVjdAkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXsgYXNzaWduOyB9CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlwZXJmX3RwX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAkJXAogCQkJICAgICBfX2VudHJ5X3NpemUpOwkJCQlcCi0JfSB3aGlsZSAoMCk7CQkJCQkJCVwKKwkJCQkJCQkJCVwKK2VuZDoJCQkJCQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsJCQkJCVwKIAkJCQkJCQkJCVwKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9kYTh4eC1mYi5oIGIvaW5jbHVkZS92aWRlby9kYTh4eC1mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTFhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL2RhOHh4LWZiLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgVEkgREE4WFggTENEIGNvbnRyb2xsZXIgcGxhdGZvcm0gZGF0YS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBEQThYWF9GQl9ICisjZGVmaW5lIERBOFhYX0ZCX0gKKworZW51bSBwYW5lbF90eXBlIHsKKwlRVkdBID0gMAorfTsKKworZW51bSBwYW5lbF9zaGFkZSB7CisJTU9OT0NIUk9NRSA9IDAsCisJQ09MT1JfQUNUSVZFLAorCUNPTE9SX1BBU1NJVkUsCit9OworCitlbnVtIHJhc3Rlcl9sb2FkX21vZGUgeworCUxPQURfREFUQSA9IDEsCisJTE9BRF9QQUxFVFRFLAorfTsKKworc3RydWN0IGRpc3BsYXlfcGFuZWwgeworCWVudW0gcGFuZWxfdHlwZSBwYW5lbF90eXBlOyAvKiBRVkdBICovCisJaW50IG1heF9icHA7CisJaW50IG1pbl9icHA7CisJZW51bSBwYW5lbF9zaGFkZSBwYW5lbF9zaGFkZTsKK307CisKK3N0cnVjdCBkYTh4eF9sY2RjX3BsYXRmb3JtX2RhdGEgeworCWNvbnN0IGNoYXIgbWFudV9uYW1lWzEwXTsKKwl2b2lkICpjb250cm9sbGVyX2RhdGE7CisJY29uc3QgY2hhciB0eXBlWzI1XTsKK307CisKK3N0cnVjdCBsY2RfY3RybF9jb25maWcgeworCWNvbnN0IHN0cnVjdCBkaXNwbGF5X3BhbmVsICpwX2Rpc3BfcGFuZWw7CisKKwkvKiBBQyBCaWFzIFBpbiBGcmVxdWVuY3kgKi8KKwlpbnQgYWNfYmlhczsKKworCS8qIEFDIEJpYXMgUGluIFRyYW5zaXRpb25zIHBlciBJbnRlcnJ1cHQgKi8KKwlpbnQgYWNfYmlhc19pbnRycHQ7CisKKwkvKiBETUEgYnVyc3Qgc2l6ZSAqLworCWludCBkbWFfYnVyc3Rfc3o7CisKKwkvKiBCaXRzIHBlciBwaXhlbCAqLworCWludCBicHA7CisKKwkvKiBGSUZPIERNQSBSZXF1ZXN0IERlbGF5ICovCisJaW50IGZkZDsKKworCS8qIFRGVCBBbHRlcm5hdGl2ZSBTaWduYWwgTWFwcGluZyAoT25seSBmb3IgYWN0aXZlKSAqLworCXVuc2lnbmVkIGNoYXIgdGZ0X2FsdF9tb2RlOworCisJLyogMTIgQml0IFBlciBQaXhlbCAoNS02LTUpIE1vZGUgKE9ubHkgZm9yIHBhc3NpdmUpICovCisJdW5zaWduZWQgY2hhciBzdG5fNTY1X21vZGU7CisKKwkvKiBNb25vIDgtYml0IE1vZGU6IDE9RDAtRDcgb3IgMD1EMC1EMyAqLworCXVuc2lnbmVkIGNoYXIgbW9ub184Yml0X21vZGU7CisKKwkvKiBJbnZlcnQgbGluZSBjbG9jayAqLworCXVuc2lnbmVkIGNoYXIgaW52ZXJ0X2xpbmVfY2xvY2s7CisKKwkvKiBJbnZlcnQgZnJhbWUgY2xvY2sgICovCisJdW5zaWduZWQgY2hhciBpbnZlcnRfZnJtX2Nsb2NrOworCisJLyogSG9yaXpvbnRhbCBhbmQgVmVydGljYWwgU3luYyBFZGdlOiAwPXJpc2luZyAxPWZhbGxpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIHN5bmNfZWRnZTsKKworCS8qIEhvcml6b250YWwgYW5kIFZlcnRpY2FsIFN5bmM6IENvbnRyb2w6IDA9aWdub3JlICovCisJdW5zaWduZWQgY2hhciBzeW5jX2N0cmw7CisKKwkvKiBSYXN0ZXIgRGF0YSBPcmRlciBTZWxlY3Q6IDE9TW9zdC10by1sZWFzdCAwPUxlYXN0LXRvLW1vc3QgKi8KKwl1bnNpZ25lZCBjaGFyIHJhc3Rlcl9vcmRlcjsKK307CisKK3N0cnVjdCBsY2Rfc3luY19hcmcgeworCWludCBiYWNrX3BvcmNoOworCWludCBmcm9udF9wb3JjaDsKKwlpbnQgcHVsc2Vfd2lkdGg7Cit9OworCisvKiBpb2N0bHMgKi8KKyNkZWZpbmUgRkJJT0dFVF9DT05UUkFTVAlfSU9SKCdGJywgMSwgaW50KQorI2RlZmluZSBGQklPUFVUX0NPTlRSQVNUCV9JT1coJ0YnLCAyLCBpbnQpCisjZGVmaW5lIEZCSUdFVF9CUklHSFRORVNTCV9JT1IoJ0YnLCAzLCBpbnQpCisjZGVmaW5lIEZCSVBVVF9CUklHSFRORVNTCV9JT1coJ0YnLCAzLCBpbnQpCisjZGVmaW5lIEZCSUdFVF9DT0xPUgkJX0lPUignRicsIDUsIGludCkKKyNkZWZpbmUgRkJJUFVUX0NPTE9SCQlfSU9XKCdGJywgNiwgaW50KQorI2RlZmluZSBGQklQVVRfSFNZTkMJCV9JT1coJ0YnLCA5LCBpbnQpCisjZGVmaW5lIEZCSVBVVF9WU1lOQwkJX0lPVygnRicsIDEwLCBpbnQpCisKKyNlbmRpZiAgLyogaWZuZGVmIERBOFhYX0ZCX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDg1YzI0ZmYuLmM3YmFjMzkgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTMzMSw3ICszMzEsOCBAQAogCSAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgUkNVIGltcGxlbWVudGF0aW9uIHRoYXQgaXMKIAkgIGRlc2lnbmVkIGZvciB2ZXJ5IGxhcmdlIFNNUCBzeXN0ZW1zIHdpdGggaHVuZHJlZHMgb3IKIAkgIHRob3VzYW5kcyBvZiBDUFVzLCBidXQgZm9yIHdoaWNoIHJlYWwtdGltZSByZXNwb25zZQotCSAgaXMgYWxzbyByZXF1aXJlZC4KKwkgIGlzIGFsc28gcmVxdWlyZWQuICBJdCBhbHNvIHNjYWxlcyBkb3duIG5pY2VseSB0bworCSAgc21hbGxlciBzeXN0ZW1zLgogCiBlbmRjaG9pY2UKIApAQCAtOTE1LDMxICs5MTYsMzYgQEAKICAgICAgICAgICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmcKICAgICAgICAgICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay4KIAotY29uZmlnIEhBVkVfUEVSRl9DT1VOVEVSUworY29uZmlnIEhBVkVfUEVSRl9FVkVOVFMKIAlib29sCiAJaGVscAogCSAgU2VlIHRvb2xzL3BlcmYvZGVzaWduLnR4dCBmb3IgZGV0YWlscy4KIAotbWVudSAiUGVyZm9ybWFuY2UgQ291bnRlcnMiCittZW51ICJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycyIKIAotY29uZmlnIFBFUkZfQ09VTlRFUlMKLQlib29sICJLZXJuZWwgUGVyZm9ybWFuY2UgQ291bnRlcnMiCi0JZGVmYXVsdCB5IGlmIFBST0ZJTElORwotCWRlcGVuZHMgb24gSEFWRV9QRVJGX0NPVU5URVJTCitjb25maWcgUEVSRl9FVkVOVFMKKwlib29sICJLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVycyIKKwlkZWZhdWx0IHkgaWYgKFBST0ZJTElORyB8fCBQRVJGX0NPVU5URVJTKQorCWRlcGVuZHMgb24gSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBBTk9OX0lOT0RFUwogCWhlbHAKLQkgIEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgcGVyZm9ybWFuY2UgY291bnRlciBoYXJkd2FyZS4KKwkgIEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdmFyaW91cyBwZXJmb3JtYW5jZSBldmVudHMgcHJvdmlkZWQKKwkgIGJ5IHNvZnR3YXJlIGFuZCBoYXJkd2FyZS4KIAotCSAgUGVyZm9ybWFuY2UgY291bnRlcnMgYXJlIHNwZWNpYWwgaGFyZHdhcmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQotCSAgb24gbW9zdCBtb2Rlcm4gQ1BVcy4gVGhlc2UgcmVnaXN0ZXJzIGNvdW50IHRoZSBudW1iZXIgb2YgY2VydGFpbgorCSAgU29mdHdhcmUgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgZWl0aGVyIGJ1aWxkLWluIG9yIHZpYSB0aGUKKwkgIHVzZSBvZiBnZW5lcmljIHRyYWNlcG9pbnRzLgorCisJICBNb3N0IG1vZGVybiBDUFVzIHN1cHBvcnQgcGVyZm9ybWFuY2UgZXZlbnRzIHZpYSBwZXJmb3JtYW5jZQorCSAgY291bnRlciByZWdpc3RlcnMuIFRoZXNlIHJlZ2lzdGVycyBjb3VudCB0aGUgbnVtYmVyIG9mIGNlcnRhaW4KIAkgIHR5cGVzIG9mIGh3IGV2ZW50czogc3VjaCBhcyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQsIGNhY2hlbWlzc2VzCiAJICBzdWZmZXJlZCwgb3IgYnJhbmNoZXMgbWlzLXByZWRpY3RlZCAtIHdpdGhvdXQgc2xvd2luZyBkb3duIHRoZQogCSAga2VybmVsIG9yIGFwcGxpY2F0aW9ucy4gVGhlc2UgcmVnaXN0ZXJzIGNhbiBhbHNvIHRyaWdnZXIgaW50ZXJydXB0cwogCSAgd2hlbiBhIHRocmVzaG9sZCBudW1iZXIgb2YgZXZlbnRzIGhhdmUgcGFzc2VkIC0gYW5kIGNhbiB0aHVzIGJlCiAJICB1c2VkIHRvIHByb2ZpbGUgdGhlIGNvZGUgdGhhdCBydW5zIG9uIHRoYXQgQ1BVLgogCi0JICBUaGUgTGludXggUGVyZm9ybWFuY2UgQ291bnRlciBzdWJzeXN0ZW0gcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb2YKLQkgIHRoZXNlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhIHN5c3RlbSBjYWxsLiBJdAorCSAgVGhlIExpbnV4IFBlcmZvcm1hbmNlIEV2ZW50IHN1YnN5c3RlbSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvZgorCSAgdGhlc2Ugc29mdHdhcmUgYW5kIGhhcmR3YXJlIGNldmVudCBhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhCisJICBzeXN0ZW0gY2FsbCBhbmQgdXNlZCBieSB0aGUgInBlcmYiIHV0aWxpdHkgaW4gdG9vbHMvcGVyZi8uIEl0CiAJICBwcm92aWRlcyBwZXIgdGFzayBhbmQgcGVyIENQVSBjb3VudGVycywgYW5kIGl0IHByb3ZpZGVzIGV2ZW50CiAJICBjYXBhYmlsaXRpZXMgb24gdG9wIG9mIHRob3NlLgogCkBAIC05NDcsMTcgKzk1MywyOSBAQAogCiBjb25maWcgRVZFTlRfUFJPRklMRQogCWJvb2wgIlRyYWNlcG9pbnQgcHJvZmlsaW5nIHNvdXJjZXMiCi0JZGVwZW5kcyBvbiBQRVJGX0NPVU5URVJTICYmIEVWRU5UX1RSQUNJTkcKKwlkZXBlbmRzIG9uIFBFUkZfRVZFTlRTICYmIEVWRU5UX1RSQUNJTkcKIAlkZWZhdWx0IHkKIAloZWxwCi0JIEFsbG93IHRoZSB1c2Ugb2YgdHJhY2Vwb2ludHMgYXMgc29mdHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMuCisJIEFsbG93IHRoZSB1c2Ugb2YgdHJhY2Vwb2ludHMgYXMgc29mdHdhcmUgcGVyZm9ybWFuY2UgZXZlbnRzLgogCi0JIFdoZW4gdGhpcyBpcyBlbmFibGVkLCB5b3UgY2FuIGNyZWF0ZSBwZXJmIGNvdW50ZXJzIGJhc2VkIG9uCisJIFdoZW4gdGhpcyBpcyBlbmFibGVkLCB5b3UgY2FuIGNyZWF0ZSBwZXJmIGV2ZW50cyBiYXNlZCBvbgogCSB0cmFjZXBvaW50cyB1c2luZyBQRVJGX1RZUEVfVFJBQ0VQT0lOVCBhbmQgdGhlIHRyYWNlcG9pbnQgSUQKIAkgZm91bmQgaW4gZGVidWdmczovL3RyYWNpbmcvZXZlbnRzLyovKi9pZC4gKFRoZSAtZS8tLWV2ZW50cwogCSBvcHRpb24gdG8gdGhlIHBlcmYgdG9vbCBjYW4gcGFyc2UgYW5kIGludGVycHJldCBzeW1ib2xpYwogCSB0cmFjZXBvaW50cywgaW4gdGhlIHN1YnN5c3RlbTp0cmFjZXBvaW50X25hbWUgZm9ybWF0LikKIAorY29uZmlnIFBFUkZfQ09VTlRFUlMKKwlib29sICJLZXJuZWwgcGVyZm9ybWFuY2UgY291bnRlcnMgKG9sZCBjb25maWcgb3B0aW9uKSIKKwlkZXBlbmRzIG9uIEhBVkVfUEVSRl9FVkVOVFMKKwloZWxwCisJICBUaGlzIGNvbmZpZyBoYXMgYmVlbiBvYnNvbGV0ZWQgYnkgdGhlIFBFUkZfRVZFTlRTCisJICBjb25maWcgb3B0aW9uIC0gcGxlYXNlIHNlZSB0aGF0IG9uZSBmb3IgZGV0YWlscy4KKworCSAgSXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUga2VybmVsIHdoZXRoZXIgeW91IGVuYWJsZQorCSAgaXQgb3Igbm90LCBpdCBpcyBhIGNvbXBhdGliaWxpdHkgcGxhY2Vob2xkZXIuCisKKwkgIFNheSBOIGlmIHVuc3VyZS4KKwogZW5kbWVudQogCiBjb25maWcgVk1fRVZFTlRfQ09VTlRFUlMKQEAgLTEwNDYsMTMgKzEwNjQsNiBAQAogY29uZmlnIFRSQUNFUE9JTlRTCiAJYm9vbAogCi1jb25maWcgTUFSS0VSUwotCWJvb2wgIkFjdGl2YXRlIG1hcmtlcnMiCi0Jc2VsZWN0IFRSQUNFUE9JTlRTCi0JaGVscAotCSAgUGxhY2UgYW4gZW1wdHkgZnVuY3Rpb24gY2FsbCBhdCBlYWNoIG1hcmtlciBzaXRlLiBDYW4gYmUKLQkgIGR5bmFtaWNhbGx5IGNoYW5nZWQgZm9yIGEgcHJvYmUgZnVuY3Rpb24uCi0KIHNvdXJjZSAiYXJjaC9LY29uZmlnIgogCiBjb25maWcgU0xPV19XT1JLCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDM0OTcxYmUuLjYxMDcyMjMgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgogI2luY2x1ZGUgPHRyYWNlL2Jvb3QuaD4KIApAQCAtNjY4LDEyICs2NjksMTIgQEAKICNlbmRpZgogCXRocmVhZF9pbmZvX2NhY2hlX2luaXQoKTsKIAljcmVkX2luaXQoKTsKLQlmb3JrX2luaXQobnVtX3BoeXNwYWdlcyk7CisJZm9ya19pbml0KHRvdGFscmFtX3BhZ2VzKTsKIAlwcm9jX2NhY2hlc19pbml0KCk7CiAJYnVmZmVyX2luaXQoKTsKIAlrZXlfaW5pdCgpOwogCXNlY3VyaXR5X2luaXQoKTsKLQl2ZnNfY2FjaGVzX2luaXQobnVtX3BoeXNwYWdlcyk7CisJdmZzX2NhY2hlc19pbml0KHRvdGFscmFtX3BhZ2VzKTsKIAlyYWRpeF90cmVlX2luaXQoKTsKIAlzaWduYWxzX2luaXQoKTsKIAkvKiByb290ZnMgcG9wdWxhdGluZyBtaWdodCBuZWVkIHBhZ2Utd3JpdGViYWNrICovCkBAIC02ODksNiArNjkwLDcgQEAKIAljaGVja19idWdzKCk7CiAKIAlhY3BpX2Vhcmx5X2luaXQoKTsgLyogYmVmb3JlIExBUElDIGFuZCBTTVAgaW5pdCAqLworCXNmaV9pbml0X2xhdGUoKTsKIAogCWZ0cmFjZV9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBjNWU2OGFkLi5lZTlkNjk3IDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtcXVldWVfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtcXVldWVfZmlsZV9vcGVyYXRpb25zOwotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1xdWV1ZV9zdXBlcl9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbXF1ZXVlX3N1cGVyX29wczsKIHN0YXRpYyB2b2lkIHJlbW92ZV9ub3RpZmljYXRpb24oc3RydWN0IG1xdWV1ZV9pbm9kZV9pbmZvICppbmZvKTsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcXVldWVfaW5vZGVfY2FjaGVwOwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAkucmVhZCA9IG1xdWV1ZV9yZWFkX2ZpbGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbXF1ZXVlX3N1cGVyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtcXVldWVfc3VwZXJfb3BzID0gewogCS5hbGxvY19pbm9kZSA9IG1xdWV1ZV9hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZSA9IG1xdWV1ZV9kZXN0cm95X2lub2RlLAogCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLApkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDMwMTYyYTUuLjllYjE0ODggMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCQlpZiAoc2htZmxnICYgU0hNX05PUkVTRVJWRSkKIAkJCWFjY3RmbGFnID0gVk1fTk9SRVNFUlZFOwogCQlmaWxlID0gaHVnZXRsYl9maWxlX3NldHVwKG5hbWUsIHNpemUsIGFjY3RmbGFnLAotCQkJCQkJCSZzaHAtPm1sb2NrX3VzZXIpOworCQkJCQkmc2hwLT5tbG9ja191c2VyLCBIVUdFVExCX1NITUZTX0lOT0RFKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBEbyBub3QgYWxsb3cgbm8gYWNjb3VudGluZyBmb3IgT1ZFUkNPTU1JVF9ORVZFUiwgZXZlbgpkaWZmIC0tZ2l0IGEvaXBjL3V0aWwuYyBiL2lwYy91dGlsLmMKaW5kZXggYjhlNGJhOS4uNzljZTg0ZSAxMDA2NDQKLS0tIGEvaXBjL3V0aWwuYworKysgYi9pcGMvdXRpbC5jCkBAIC05NDIsNyArOTQyLDcgQEAKIAlyZXR1cm4gaWZhY2UtPnNob3cocywgaXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN5c3ZpcGNfcHJvY19zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN5c3ZpcGNfcHJvY19zZXFvcHMgPSB7CiAJLnN0YXJ0ID0gc3lzdmlwY19wcm9jX3N0YXJ0LAogCS5zdG9wICA9IHN5c3ZpcGNfcHJvY19zdG9wLAogCS5uZXh0ICA9IHN5c3ZpcGNfcHJvY19uZXh0LApkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDNkOWM3ZTIuLjE4N2M4OWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTg3LDcgKzg3LDYgQEAKIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHV0c25hbWVfc3lzY3RsLm8KIG9iai0kKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpICs9IGRlbGF5YWNjdC5vCiBvYmotJChDT05GSUdfVEFTS1NUQVRTKSArPSB0YXNrc3RhdHMubyB0c2FjY3Qubwotb2JqLSQoQ09ORklHX01BUktFUlMpICs9IG1hcmtlci5vCiBvYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IHRyYWNlcG9pbnQubwogb2JqLSQoQ09ORklHX0xBVEVOQ1lUT1ApICs9IGxhdGVuY3l0b3Aubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikgKz0gdHJhY2UvCkBAIC05Niw3ICs5NSw3IEBACiBvYmotJChDT05GSUdfUklOR19CVUZGRVIpICs9IHRyYWNlLwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc2NoZWRfY3B1cHJpLm8KIG9iai0kKENPTkZJR19TTE9XX1dPUkspICs9IHNsb3ctd29yay5vCi1vYmotJChDT05GSUdfUEVSRl9DT1VOVEVSUykgKz0gcGVyZl9jb3VudGVyLm8KK29iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCiAKIGlmbmVxICgkKENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCiAjIEFjY29yZGluZyB0byBBbGFuIE1vZHJhIDxhbGFuQGxpbnV4Y2FyZS5jb20uYXU+LCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBjN2VjZThmLi5jZDgzZDk5IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC01OTYsNyArNTk2LDcgQEAKIHN0YXRpYyBpbnQgY2dyb3VwX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKIHN0YXRpYyBpbnQgY2dyb3VwX3JtZGlyKHN0cnVjdCBpbm9kZSAqdW51c2VkX2Rpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIHN0YXRpYyBpbnQgY2dyb3VwX3BvcHVsYXRlX2RpcihzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2dyb3VwX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBzdGF0c19vcGVyYXRpb25zOwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gY2dyb3VwX2JhY2tpbmdfZGV2X2luZm8gPSB7CkBAIC05NjEsNyArOTYxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2dyb3VwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjZ3JvdXBfb3BzID0gewogCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlID0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCiAJLnNob3dfb3B0aW9ucyA9IGNncm91cF9zaG93X29wdGlvbnMsCkBAIC0xNzExLDcgKzE3MTEsNyBAQAogCS5yZWxlYXNlID0gY2dyb3VwX2ZpbGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2dyb3VwX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewogCS5sb29rdXAgPSBzaW1wbGVfbG9va3VwLAogCS5ta2RpciA9IGNncm91cF9ta2RpciwKIAkucm1kaXIgPSBjZ3JvdXBfcm1kaXIsCkBAIC0yMzE0LDcgKzIzMTQsNyBAQAogCXJldHVybiBzZXFfcHJpbnRmKHMsICIlZFxuIiwgKihpbnQgKil2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjZ3JvdXBfdGFza3Nfc2VxX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNncm91cF90YXNrc19zZXFfb3BlcmF0aW9ucyA9IHsKIAkuc3RhcnQgPSBjZ3JvdXBfdGFza3Nfc3RhcnQsCiAJLnN0b3AgPSBjZ3JvdXBfdGFza3Nfc3RvcCwKIAkubmV4dCA9IGNncm91cF90YXNrc19uZXh0LApkaWZmIC0tZ2l0IGEva2VybmVsL2NyZWQuYyBiL2tlcm5lbC9jcmVkLmMKaW5kZXggZDdmN2EwMS4uZGQ3NmNmZSAxMDA2NDQKLS0tIGEva2VybmVsL2NyZWQuYworKysgYi9rZXJuZWwvY3JlZC5jCkBAIC03ODIsNiArNzgyLDI1IEBACiAKICNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKIAorYm9vbCBjcmVkc19hcmVfaW52YWxpZChjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKK3sKKwlpZiAoY3JlZC0+bWFnaWMgIT0gQ1JFRF9NQUdJQykKKwkJcmV0dXJuIHRydWU7CisJaWYgKGF0b21pY19yZWFkKCZjcmVkLT51c2FnZSkgPCBhdG9taWNfcmVhZCgmY3JlZC0+c3Vic2NyaWJlcnMpKQorCQlyZXR1cm4gdHJ1ZTsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWAorCWlmIChzZWxpbnV4X2lzX2VuYWJsZWQoKSkgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKQorCQkJcmV0dXJuIHRydWU7CisJCWlmICgoKih1MzIgKiljcmVkLT5zZWN1cml0eSAmIDB4ZmZmZmZmMDApID09CisJCSAgICAoUE9JU09OX0ZSRUUgPDwgMjQgfCBQT0lTT05fRlJFRSA8PCAxNiB8IFBPSVNPTl9GUkVFIDw8IDgpKQorCQkJcmV0dXJuIHRydWU7CisJfQorI2VuZGlmCisJcmV0dXJuIGZhbHNlOworfQorRVhQT1JUX1NZTUJPTChjcmVkc19hcmVfaW52YWxpZCk7CisKIC8qCiAgKiBkdW1wIGludmFsaWQgY3JlZGVudGlhbHMKICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggYWU1ZDg2Ni4uNjBkNmZkYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTE1NCw4ICsxNTQsOCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHRhc2tfc3RydWN0LCByY3UpOwogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLQlXQVJOX09OX09OQ0UodHNrLT5wZXJmX2NvdW50ZXJfY3R4cCk7CisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJV0FSTl9PTl9PTkNFKHRzay0+cGVyZl9ldmVudF9jdHhwKTsKICNlbmRpZgogCXRyYWNlX3NjaGVkX3Byb2Nlc3NfZnJlZSh0c2spOwogCXB1dF90YXNrX3N0cnVjdCh0c2spOwpAQCAtMzU5LDggKzM1OSwxMCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAotCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKQorCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKSB7CiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9TSUQsIHBpZCk7CisJCXByb2Nfc2lkX2Nvbm5lY3RvcihjdXJyKTsKKwl9CiAKIAlpZiAodGFza19wZ3JwKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1BHSUQsIHBpZCk7CkBAIC05NDUsNiArOTQ3LDggQEAKIAlpZiAoZ3JvdXBfZGVhZCkgewogCQlocnRpbWVyX2NhbmNlbCgmdHNrLT5zaWduYWwtPnJlYWxfdGltZXIpOwogCQlleGl0X2l0aW1lcnModHNrLT5zaWduYWwpOworCQlpZiAodHNrLT5tbSkKKwkJCXNldG1heF9tbV9oaXdhdGVyX3JzcygmdHNrLT5zaWduYWwtPm1heHJzcywgdHNrLT5tbSk7CiAJfQogCWFjY3RfY29sbGVjdChjb2RlLCBncm91cF9kZWFkKTsKIAlpZiAoZ3JvdXBfZGVhZCkKQEAgLTk4MSw3ICs5ODUsNyBAQAogCSAqIEZsdXNoIGluaGVyaXRlZCBjb3VudGVycyB0byB0aGUgcGFyZW50IC0gYmVmb3JlIHRoZSBwYXJlbnQKIAkgKiBnZXRzIHdva2VuIHVwIGJ5IGNoaWxkLWV4aXQgbm90aWZpY2F0aW9ucy4KIAkgKi8KLQlwZXJmX2NvdW50ZXJfZXhpdF90YXNrKHRzayk7CisJcGVyZl9ldmVudF9leGl0X3Rhc2sodHNrKTsKIAogCWV4aXRfbm90aWZ5KHRzaywgZ3JvdXBfZGVhZCk7CiAjaWZkZWYgQ09ORklHX05VTUEKQEAgLTEyMDgsNiArMTIxMiw3IEBACiAJaWYgKGxpa2VseSghdHJhY2VkKSAmJiBsaWtlbHkoIXRhc2tfZGV0YWNoZWQocCkpKSB7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpwc2lnOwogCQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCQl1bnNpZ25lZCBsb25nIG1heHJzczsKIAogCQkvKgogCQkgKiBUaGUgcmVzb3VyY2UgY291bnRlcnMgZm9yIHRoZSBncm91cCBsZWFkZXIgYXJlIGluIGl0cwpAQCAtMTI1Niw2ICsxMjYxLDkgQEAKIAkJcHNpZy0+Y291YmxvY2sgKz0KIAkJCXRhc2tfaW9fZ2V0X291YmxvY2socCkgKwogCQkJc2lnLT5vdWJsb2NrICsgc2lnLT5jb3VibG9jazsKKwkJbWF4cnNzID0gbWF4KHNpZy0+bWF4cnNzLCBzaWctPmNtYXhyc3MpOworCQlpZiAocHNpZy0+Y21heHJzcyA8IG1heHJzcykKKwkJCXBzaWctPmNtYXhyc3MgPSBtYXhyc3M7CiAJCXRhc2tfaW9fYWNjb3VudGluZ19hZGQoJnBzaWctPmlvYWMsICZwLT5pb2FjKTsKIAkJdGFza19pb19hY2NvdW50aW5nX2FkZCgmcHNpZy0+aW9hYywgJnNpZy0+aW9hYyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmcC0+cmVhbF9wYXJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggYmZlZTkzMS4uNTFhZDBiMCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9rc20uaD4KICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CkBAIC02MSw3ICs2Miw4IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CkBAIC0xMzYsOSArMTM4LDE3IEBACiAvKiBTTEFCIGNhY2hlIGZvciBtbV9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLT5tbSkgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbW1fY2FjaGVwOwogCitzdGF0aWMgdm9pZCBhY2NvdW50X2tlcm5lbF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpLCBpbnQgYWNjb3VudCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZSh2aXJ0X3RvX3BhZ2UodGkpKTsKKworCW1vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfS0VSTkVMX1NUQUNLLCBhY2NvdW50KTsKK30KKwogdm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJcHJvcF9sb2NhbF9kZXN0cm95X3NpbmdsZSgmdHNrLT5kaXJ0aWVzKTsKKwlhY2NvdW50X2tlcm5lbF9zdGFjayh0c2stPnN0YWNrLCAtMSk7CiAJZnJlZV90aHJlYWRfaW5mbyh0c2stPnN0YWNrKTsKIAlydF9tdXRleF9kZWJ1Z190YXNrX2ZyZWUodHNrKTsKIAlmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHRzayk7CkBAIC0yNTMsNiArMjYzLDkgQEAKIAl0c2stPmJ0cmFjZV9zZXEgPSAwOwogI2VuZGlmCiAJdHNrLT5zcGxpY2VfcGlwZSA9IE5VTEw7CisKKwlhY2NvdW50X2tlcm5lbF9zdGFjayh0aSwgMSk7CisKIAlyZXR1cm4gdHNrOwogCiBvdXQ6CkBAIC0yODgsNiArMzAxLDkgQEAKIAlyYl9saW5rID0gJm1tLT5tbV9yYi5yYl9ub2RlOwogCXJiX3BhcmVudCA9IE5VTEw7CiAJcHByZXYgPSAmbW0tPm1tYXA7CisJcmV0dmFsID0ga3NtX2ZvcmsobW0sIG9sZG1tKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKIAogCWZvciAobXBudCA9IG9sZG1tLT5tbWFwOyBtcG50OyBtcG50ID0gbXBudC0+dm1fbmV4dCkgewogCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKQEAgLTQyNCw3ICs0NDAsOCBAQAogCWF0b21pY19zZXQoJm1tLT5tbV9jb3VudCwgMSk7CiAJaW5pdF9yd3NlbSgmbW0tPm1tYXBfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmbW0tPm1tbGlzdCk7Ci0JbW0tPmZsYWdzID0gKGN1cnJlbnQtPm1tKSA/IGN1cnJlbnQtPm1tLT5mbGFncyA6IGRlZmF1bHRfZHVtcF9maWx0ZXI7CisJbW0tPmZsYWdzID0gKGN1cnJlbnQtPm1tKSA/CisJCShjdXJyZW50LT5tbS0+ZmxhZ3MgJiBNTUZfSU5JVF9NQVNLKSA6IGRlZmF1bHRfZHVtcF9maWx0ZXI7CiAJbW0tPmNvcmVfc3RhdGUgPSBOVUxMOwogCW1tLT5ucl9wdGVzID0gMDsKIAlzZXRfbW1fY291bnRlcihtbSwgZmlsZV9yc3MsIDApOwpAQCAtNDg1LDYgKzUwMiw3IEBACiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbW0tPm1tX3VzZXJzKSkgewogCQlleGl0X2FpbyhtbSk7CisJCWtzbV9leGl0KG1tKTsKIAkJZXhpdF9tbWFwKG1tKTsKIAkJc2V0X21tX2V4ZV9maWxlKG1tLCBOVUxMKTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZtbS0+bW1saXN0KSkgewpAQCAtNzg4LDEwICs4MDYsMTAgQEAKIAl0aHJlYWRfZ3JvdXBfY3B1dGltZV9pbml0KHNpZyk7CiAKIAkvKiBFeHBpcmF0aW9uIHRpbWVzIGFuZCBpbmNyZW1lbnRzLiAqLwotCXNpZy0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXNpZy0+aXRfdmlydF9pbmNyID0gY3B1dGltZV96ZXJvOwotCXNpZy0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXNpZy0+aXRfcHJvZl9pbmNyID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRbQ1BVQ0xPQ0tfUFJPRl0uZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKKwlzaWctPml0W0NQVUNMT0NLX1BST0ZdLmluY3IgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdFtDUFVDTE9DS19WSVJUXS5leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRbQ1BVQ0xPQ0tfVklSVF0uaW5jciA9IGNwdXRpbWVfemVybzsKIAogCS8qIENhY2hlZCBleHBpcmF0aW9uIHRpbWVzLiAqLwogCXNpZy0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gY3B1dGltZV96ZXJvOwpAQCAtODQ5LDYgKzg2Nyw3IEBACiAJc2lnLT5udmNzdyA9IHNpZy0+bml2Y3N3ID0gc2lnLT5jbnZjc3cgPSBzaWctPmNuaXZjc3cgPSAwOwogCXNpZy0+bWluX2ZsdCA9IHNpZy0+bWFqX2ZsdCA9IHNpZy0+Y21pbl9mbHQgPSBzaWctPmNtYWpfZmx0ID0gMDsKIAlzaWctPmluYmxvY2sgPSBzaWctPm91YmxvY2sgPSBzaWctPmNpbmJsb2NrID0gc2lnLT5jb3VibG9jayA9IDA7CisJc2lnLT5tYXhyc3MgPSBzaWctPmNtYXhyc3MgPSAwOwogCXRhc2tfaW9fYWNjb3VudGluZ19pbml0KCZzaWctPmlvYWMpOwogCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgPSAwOwogCXRhc2tzdGF0c190Z2lkX2luaXQoc2lnKTsKQEAgLTg2Myw2ICs4ODIsOCBAQAogCiAJdHR5X2F1ZGl0X2Zvcmsoc2lnKTsKIAorCXNpZy0+b29tX2FkaiA9IGN1cnJlbnQtPnNpZ25hbC0+b29tX2FkajsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDc1LDEwICsxMDk2LDEyIEBACiAKIAlwLT5idHMgPSBOVUxMOwogCisJcC0+c3RhY2tfc3RhcnQgPSBzdGFja19zdGFydDsKKwogCS8qIFBlcmZvcm0gc2NoZWR1bGVyIHJlbGF0ZWQgc2V0dXAuIEFzc2lnbiB0aGlzIHRhc2sgdG8gYSBDUFUuICovCiAJc2NoZWRfZm9yayhwLCBjbG9uZV9mbGFncyk7CiAKLQlyZXR2YWwgPSBwZXJmX2NvdW50ZXJfaW5pdF90YXNrKHApOworCXJldHZhbCA9IHBlcmZfZXZlbnRfaW5pdF90YXNrKHApOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9wb2xpY3k7CiAKQEAgLTEyNTMsNyArMTI3Niw3IEBACiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJcHJvY19mb3JrX2Nvbm5lY3RvcihwKTsKIAljZ3JvdXBfcG9zdF9mb3JrKHApOwotCXBlcmZfY291bnRlcl9mb3JrKHApOworCXBlcmZfZXZlbnRfZm9yayhwKTsKIAlyZXR1cm4gcDsKIAogYmFkX2ZvcmtfZnJlZV9waWQ6CkBAIC0xMjgwLDcgKzEzMDMsNyBAQAogYmFkX2ZvcmtfY2xlYW51cF9hdWRpdDoKIAlhdWRpdF9mcmVlKHApOwogYmFkX2ZvcmtfY2xlYW51cF9wb2xpY3k6Ci0JcGVyZl9jb3VudGVyX2ZyZWVfdGFzayhwKTsKKwlwZXJmX2V2ZW50X2ZyZWVfdGFzayhwKTsKICNpZmRlZiBDT05GSUdfTlVNQQogCW1wb2xfcHV0KHAtPm1lbXBvbGljeSk7CiBiYWRfZm9ya19jbGVhbnVwX2Nncm91cDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGMwM2YyMjEuLmU1ZDk4Y2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNDgsNiArNDgsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy90aW1lci5oPgorCiAvKgogICogVGhlIHRpbWVyIGJhc2VzOgogICoKQEAgLTQ0Miw2ICs0NDQsMjYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19ocnRpbWVyX2RlYWN0aXZhdGUoc3RydWN0IGhydGltZXIgKnRpbWVyKSB7IH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHZvaWQKK2RlYnVnX2luaXQoc3RydWN0IGhydGltZXIgKnRpbWVyLCBjbG9ja2lkX3QgY2xvY2tpZCwKKwkgICBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQoreworCWRlYnVnX2hydGltZXJfaW5pdCh0aW1lcik7CisJdHJhY2VfaHJ0aW1lcl9pbml0KHRpbWVyLCBjbG9ja2lkLCBtb2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2FjdGl2YXRlKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlkZWJ1Z19ocnRpbWVyX2FjdGl2YXRlKHRpbWVyKTsKKwl0cmFjZV9ocnRpbWVyX3N0YXJ0KHRpbWVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RlYWN0aXZhdGUoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJdHJhY2VfaHJ0aW1lcl9jYW5jZWwodGltZXIpOworfQorCiAvKiBIaWdoIHJlc29sdXRpb24gdGltZXIgcmVsYXRlZCBmdW5jdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiAKQEAgLTc5OCw3ICs4MjAsNyBAQAogCXN0cnVjdCBocnRpbWVyICplbnRyeTsKIAlpbnQgbGVmdG1vc3QgPSAxOwogCi0JZGVidWdfaHJ0aW1lcl9hY3RpdmF0ZSh0aW1lcik7CisJZGVidWdfYWN0aXZhdGUodGltZXIpOwogCiAJLyoKIAkgKiBGaW5kIHRoZSByaWdodCBwbGFjZSBpbiB0aGUgcmJ0cmVlOgpAQCAtODg0LDcgKzkwNiw3IEBACiAJCSAqIHJlcHJvZ3JhbW1pbmcgaGFwcGVucyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMgaXMgYQogCQkgKiByYXJlIGNhc2UgYW5kIGxlc3MgZXhwZW5zaXZlIHRoYW4gYSBzbXAgY2FsbC4KIAkJICovCi0JCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJCWRlYnVnX2RlYWN0aXZhdGUodGltZXIpOwogCQl0aW1lcl9zdGF0c19ocnRpbWVyX2NsZWFyX3N0YXJ0X2luZm8odGltZXIpOwogCQlyZXByb2dyYW0gPSBiYXNlLT5jcHVfYmFzZSA9PSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKIAkJX19yZW1vdmVfaHJ0aW1lcih0aW1lciwgYmFzZSwgSFJUSU1FUl9TVEFURV9JTkFDVElWRSwKQEAgLTExMTcsNyArMTEzOSw3IEBACiB2b2lkIGhydGltZXJfaW5pdChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGNsb2NraWRfdCBjbG9ja19pZCwKIAkJICBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQogewotCWRlYnVnX2hydGltZXJfaW5pdCh0aW1lcik7CisJZGVidWdfaW5pdCh0aW1lciwgY2xvY2tfaWQsIG1vZGUpOwogCV9faHJ0aW1lcl9pbml0KHRpbWVyLCBjbG9ja19pZCwgbW9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2luaXQpOwpAQCAtMTE0MSw3ICsxMTYzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfZ2V0X3Jlcyk7CiAKLXN0YXRpYyB2b2lkIF9fcnVuX2hydGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKQorc3RhdGljIHZvaWQgX19ydW5faHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgKm5vdykKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gdGltZXItPmJhc2U7CiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlID0gYmFzZS0+Y3B1X2Jhc2U7CkBAIC0xMTUwLDcgKzExNzIsNyBAQAogCiAJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJZGVidWdfZGVhY3RpdmF0ZSh0aW1lcik7CiAJX19yZW1vdmVfaHJ0aW1lcih0aW1lciwgYmFzZSwgSFJUSU1FUl9TVEFURV9DQUxMQkFDSywgMCk7CiAJdGltZXJfc3RhdHNfYWNjb3VudF9ocnRpbWVyKHRpbWVyKTsKIAlmbiA9IHRpbWVyLT5mdW5jdGlvbjsKQEAgLTExNjEsNyArMTE4Myw5IEBACiAJICogdGhlIHRpbWVyIGJhc2UuCiAJICovCiAJc3Bpbl91bmxvY2soJmNwdV9iYXNlLT5sb2NrKTsKKwl0cmFjZV9ocnRpbWVyX2V4cGlyZV9lbnRyeSh0aW1lciwgbm93KTsKIAlyZXN0YXJ0ID0gZm4odGltZXIpOworCXRyYWNlX2hydGltZXJfZXhwaXJlX2V4aXQodGltZXIpOwogCXNwaW5fbG9jaygmY3B1X2Jhc2UtPmxvY2spOwogCiAJLyoKQEAgLTEyNzIsNyArMTI5Niw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCV9fcnVuX2hydGltZXIodGltZXIpOworCQkJX19ydW5faHJ0aW1lcih0aW1lciwgJmJhc2Vub3cpOwogCQl9CiAJCWJhc2UrKzsKIAl9CkBAIC0xMzk0LDcgKzE0MTgsNyBAQAogCQkJCQlocnRpbWVyX2dldF9leHBpcmVzX3R2NjQodGltZXIpKQogCQkJCWJyZWFrOwogCi0JCQlfX3J1bl9ocnRpbWVyKHRpbWVyKTsKKwkJCV9fcnVuX2hydGltZXIodGltZXIsICZiYXNlLT5zb2Z0aXJxX3RpbWUpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZjcHVfYmFzZS0+bG9jayk7CiAJfQpAQCAtMTU3MSw3ICsxNTk1LDcgQEAKIAl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmb2xkX2Jhc2UtPmFjdGl2ZSkpKSB7CiAJCXRpbWVyID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhydGltZXIsIG5vZGUpOwogCQlCVUdfT04oaHJ0aW1lcl9jYWxsYmFja19ydW5uaW5nKHRpbWVyKSk7Ci0JCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJCWRlYnVnX2RlYWN0aXZhdGUodGltZXIpOwogCiAJCS8qCiAJCSAqIE1hcmsgaXQgYXMgU1RBVEVfTUlHUkFURSBub3QgSU5BQ1RJVkUgb3RoZXJ3aXNlIHRoZQpkaWZmIC0tZ2l0IGEva2VybmVsL2l0aW1lci5jIGIva2VybmVsL2l0aW1lci5jCmluZGV4IDU4NzYyZjcuLmIwMzQ1MWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pdGltZXIuYworKysgYi9rZXJuZWwvaXRpbWVyLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy90aW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNDEsMTAgKzQyLDQzIEBACiAJcmV0dXJuIGt0aW1lX3RvX3RpbWV2YWwocmVtKTsKIH0KIAorc3RhdGljIHZvaWQgZ2V0X2NwdV9pdGltZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCBjbG9ja19pZCwKKwkJCSAgIHN0cnVjdCBpdGltZXJ2YWwgKmNvbnN0IHZhbHVlKQoreworCWNwdXRpbWVfdCBjdmFsLCBjaW50ZXJ2YWw7CisJc3RydWN0IGNwdV9pdGltZXIgKml0ID0gJnRzay0+c2lnbmFsLT5pdFtjbG9ja19pZF07CisKKwlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJY3ZhbCA9IGl0LT5leHBpcmVzOworCWNpbnRlcnZhbCA9IGl0LT5pbmNyOworCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwkJY3B1dGltZV90IHQ7CisKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWVyKHRzaywgJmNwdXRpbWUpOworCQlpZiAoY2xvY2tfaWQgPT0gQ1BVQ0xPQ0tfUFJPRikKKwkJCXQgPSBjcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwkJZWxzZQorCQkJLyogQ1BVQ0xPQ0tfVklSVCAqLworCQkJdCA9IGNwdXRpbWUudXRpbWU7CisKKwkJaWYgKGNwdXRpbWVfbGUoY3ZhbCwgdCkpCisJCQkvKiBhYm91dCB0byBmaXJlICovCisJCQljdmFsID0gY3B1dGltZV9vbmVfamlmZnk7CisJCWVsc2UKKwkJCWN2YWwgPSBjcHV0aW1lX3N1YihjdmFsLCB0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJnZhbHVlLT5pdF92YWx1ZSk7CisJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJnZhbHVlLT5pdF9pbnRlcnZhbCk7Cit9CisKIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JY3B1dGltZV90IGNpbnRlcnZhbCwgY3ZhbDsKIAogCXN3aXRjaCAod2hpY2gpIHsKIAljYXNlIElUSU1FUl9SRUFMOgpAQCAtNTUsNDQgKzg5LDEwIEBACiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfVklSVFVBTDoKLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXM7Ci0JCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2luY3I7Ci0JCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pKSB7Ci0JCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7Ci0JCQljcHV0aW1lX3QgdXRpbWU7Ci0KLQkJCXRocmVhZF9ncm91cF9jcHV0aW1lcih0c2ssICZjcHV0aW1lKTsKLQkJCXV0aW1lID0gY3B1dGltZS51dGltZTsKLQkJCWlmIChjcHV0aW1lX2xlKGN2YWwsIHV0aW1lKSkgeyAvKiBhYm91dCB0byBmaXJlICovCi0JCQkJY3ZhbCA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY3ZhbCA9IGNwdXRpbWVfc3ViKGN2YWwsIHV0aW1lKTsKLQkJCX0KLQkJfQotCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmdmFsdWUtPml0X3ZhbHVlKTsKLQkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJnZhbHVlLT5pdF9pbnRlcnZhbCk7CisJCWdldF9jcHVfaXRpbWVyKHRzaywgQ1BVQ0xPQ0tfVklSVCwgdmFsdWUpOwogCQlicmVhazsKIAljYXNlIElUSU1FUl9QUk9GOgotCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlczsKLQkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfaW5jcjsKLQkJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykpIHsKLQkJCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGltZXM7Ci0JCQljcHV0aW1lX3QgcHRpbWU7Ci0KLQkJCXRocmVhZF9ncm91cF9jcHV0aW1lcih0c2ssICZ0aW1lcyk7Ci0JCQlwdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLnV0aW1lLCB0aW1lcy5zdGltZSk7Ci0JCQlpZiAoY3B1dGltZV9sZShjdmFsLCBwdGltZSkpIHsgLyogYWJvdXQgdG8gZmlyZSAqLwotCQkJCWN2YWwgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7Ci0JCQl9IGVsc2UgewotCQkJCWN2YWwgPSBjcHV0aW1lX3N1YihjdmFsLCBwdGltZSk7Ci0JCQl9Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJnZhbHVlLT5pdF92YWx1ZSk7Ci0JCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOworCQlnZXRfY3B1X2l0aW1lcih0c2ssIENQVUNMT0NLX1BST0YsIHZhbHVlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuKC1FSU5WQUwpOwpAQCAtMTIzLDExICsxMjMsNjIgQEAKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0KIAkJY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCwgcmVhbF90aW1lcik7CiAKKwl0cmFjZV9pdGltZXJfZXhwaXJlKElUSU1FUl9SRUFMLCBzaWctPmxlYWRlcl9waWQsIDApOwogCWtpbGxfcGlkX2luZm8oU0lHQUxSTSwgU0VORF9TSUdfUFJJViwgc2lnLT5sZWFkZXJfcGlkKTsKIAogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgY3B1dGltZV9zdWJfbnMoY3B1dGltZV90IGN0LCBzNjQgcmVhbF9ucykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJczY0IGNwdV9uczsKKworCWNwdXRpbWVfdG9fdGltZXNwZWMoY3QsICZ0cyk7CisJY3B1X25zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKKworCXJldHVybiAoY3B1X25zIDw9IHJlYWxfbnMpID8gMCA6IGNwdV9ucyAtIHJlYWxfbnM7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jcHVfaXRpbWVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBpbnQgY2xvY2tfaWQsCisJCQkgICBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpjb25zdCB2YWx1ZSwKKwkJCSAgIHN0cnVjdCBpdGltZXJ2YWwgKmNvbnN0IG92YWx1ZSkKK3sKKwljcHV0aW1lX3QgY3ZhbCwgbnZhbCwgY2ludGVydmFsLCBuaW50ZXJ2YWw7CisJczY0IG5zX25pbnRlcnZhbCwgbnNfbnZhbDsKKwlzdHJ1Y3QgY3B1X2l0aW1lciAqaXQgPSAmdHNrLT5zaWduYWwtPml0W2Nsb2NrX2lkXTsKKworCW52YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF92YWx1ZSk7CisJbnNfbnZhbCA9IHRpbWV2YWxfdG9fbnMoJnZhbHVlLT5pdF92YWx1ZSk7CisJbmludGVydmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOworCW5zX25pbnRlcnZhbCA9IHRpbWV2YWxfdG9fbnMoJnZhbHVlLT5pdF9pbnRlcnZhbCk7CisKKwlpdC0+aW5jcl9lcnJvciA9IGNwdXRpbWVfc3ViX25zKG5pbnRlcnZhbCwgbnNfbmludGVydmFsKTsKKwlpdC0+ZXJyb3IgPSBjcHV0aW1lX3N1Yl9ucyhudmFsLCBuc19udmFsKTsKKworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwljdmFsID0gaXQtPmV4cGlyZXM7CisJY2ludGVydmFsID0gaXQtPmluY3I7CisJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykgfHwKKwkgICAgIWNwdXRpbWVfZXEobnZhbCwgY3B1dGltZV96ZXJvKSkgeworCQlpZiAoY3B1dGltZV9ndChudmFsLCBjcHV0aW1lX3plcm8pKQorCQkJbnZhbCA9IGNwdXRpbWVfYWRkKG52YWwsIGNwdXRpbWVfb25lX2ppZmZ5KTsKKwkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKHRzaywgY2xvY2tfaWQsICZudmFsLCAmY3ZhbCk7CisJfQorCWl0LT5leHBpcmVzID0gbnZhbDsKKwlpdC0+aW5jciA9IG5pbnRlcnZhbDsKKwl0cmFjZV9pdGltZXJfc3RhdGUoY2xvY2tfaWQgPT0gQ1BVQ0xPQ0tfVklSVCA/CisJCQkgICBJVElNRVJfVklSVFVBTCA6IElUSU1FUl9QUk9GLCB2YWx1ZSwgbnZhbCk7CisKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwlpZiAob3ZhbHVlKSB7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmb3ZhbHVlLT5pdF92YWx1ZSk7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZvdmFsdWUtPml0X2ludGVydmFsKTsKKwl9Cit9CisKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRpbWV2YWwgaXMgaW4gY2Fub25pY2FsIGZvcm0KICAqLwpAQCAtMTM5LDcgKzE5MCw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKIAlrdGltZV90IGV4cGlyZXM7Ci0JY3B1dGltZV90IGN2YWwsIGNpbnRlcnZhbCwgbnZhbCwgbmludGVydmFsOwogCiAJLyoKIAkgKiBWYWxpZGF0ZSB0aGUgdGltZXZhbHMgaW4gdmFsdWUuCkBAIC0xNzEsNTEgKzIyMSwxNCBAQAogCQl9IGVsc2UKIAkJCXRzay0+c2lnbmFsLT5pdF9yZWFsX2luY3IudHY2NCA9IDA7CiAKKwkJdHJhY2VfaXRpbWVyX3N0YXRlKElUSU1FUl9SRUFMLCB2YWx1ZSwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfVklSVFVBTDoKLQkJbnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X3ZhbHVlKTsKLQkJbmludGVydmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOwotCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlczsKLQkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jcjsKLQkJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykgfHwKLQkJICAgICFjcHV0aW1lX2VxKG52YWwsIGNwdXRpbWVfemVybykpIHsKLQkJCWlmIChjcHV0aW1lX2d0KG52YWwsIGNwdXRpbWVfemVybykpCi0JCQkJbnZhbCA9IGNwdXRpbWVfYWRkKG52YWwsCi0JCQkJCQkgICBqaWZmaWVzX3RvX2NwdXRpbWUoMSkpOwotCQkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKHRzaywgQ1BVQ0xPQ0tfVklSVCwKLQkJCQkJICAgICAgJm52YWwsICZjdmFsKTsKLQkJfQotCQl0c2stPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzID0gbnZhbDsKLQkJdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jciA9IG5pbnRlcnZhbDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlpZiAob3ZhbHVlKSB7Ci0JCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJm92YWx1ZS0+aXRfdmFsdWUpOwotCQkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJm92YWx1ZS0+aXRfaW50ZXJ2YWwpOwotCQl9CisJCXNldF9jcHVfaXRpbWVyKHRzaywgQ1BVQ0xPQ0tfVklSVCwgdmFsdWUsIG92YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgSVRJTUVSX1BST0Y6Ci0JCW52YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF92YWx1ZSk7Ci0JCW5pbnRlcnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X2ludGVydmFsKTsKLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXM7Ci0JCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3I7Ci0JCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pIHx8Ci0JCSAgICAhY3B1dGltZV9lcShudmFsLCBjcHV0aW1lX3plcm8pKSB7Ci0JCQlpZiAoY3B1dGltZV9ndChudmFsLCBjcHV0aW1lX3plcm8pKQotCQkJCW52YWwgPSBjcHV0aW1lX2FkZChudmFsLAotCQkJCQkJICAgamlmZmllc190b19jcHV0aW1lKDEpKTsKLQkJCXNldF9wcm9jZXNzX2NwdV90aW1lcih0c2ssIENQVUNMT0NLX1BST0YsCi0JCQkJCSAgICAgICZudmFsLCAmY3ZhbCk7Ci0JCX0KLQkJdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcyA9IG52YWw7Ci0JCXRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3IgPSBuaW50ZXJ2YWw7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJaWYgKG92YWx1ZSkgewotCQkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZvdmFsdWUtPml0X3ZhbHVlKTsKLQkJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZvdmFsdWUtPml0X2ludGVydmFsKTsKLQkJfQorCQlzZXRfY3B1X2l0aW1lcih0c2ssIENQVUNMT0NLX1BST0YsIHZhbHVlLCBvdmFsdWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rYWxsc3ltcy5jIGIva2VybmVsL2thbGxzeW1zLmMKaW5kZXggM2EyOWRiZS4uOGI2YjhiNiAxMDA2NDQKLS0tIGEva2VybmVsL2thbGxzeW1zLmMKKysrIGIva2VybmVsL2thbGxzeW1zLmMKQEAgLTU5LDcgKzU5LDggQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBhZGRyKQogewotCWlmIChhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zdGV4dCAmJiBhZGRyIDw9ICh1bnNpZ25lZCBsb25nKV9ldGV4dCkKKwlpZiAoKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICYmIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpX2V0ZXh0KSB8fAorCSAgICBhcmNoX2lzX2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gaW5fZ2F0ZV9hcmVhX25vX3Rhc2soYWRkcik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwva2ZpZm8uYyBiL2tlcm5lbC9rZmlmby5jCmluZGV4IDI2NTM5ZTMuLjM3NjVmZjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZmlmby5jCisrKyBiL2tlcm5lbC9rZmlmby5jCkBAIC0xMTcsNyArMTE3LDcgQEAKICAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgogICovCiB1bnNpZ25lZCBpbnQgX19rZmlmb19wdXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgbDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2ttb2QuYyBiL2tlcm5lbC9rbW9kLmMKaW5kZXggOWZjYjUzYS4uNjg5ZDIwZiAxMDA2NDQKLS0tIGEva2VybmVsL2ttb2QuYworKysgYi9rZXJuZWwva21vZC5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIHN0YXRpYyBpbnQgX19fX2NhbGxfdXNlcm1vZGVoZWxwZXIodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICpzdWJfaW5mbyA9IGRhdGE7CisJZW51bSB1bWhfd2FpdCB3YWl0ID0gc3ViX2luZm8tPndhaXQ7CiAJaW50IHJldHZhbDsKIAogCUJVR19PTihhdG9taWNfcmVhZCgmc3ViX2luZm8tPmNyZWQtPnVzYWdlKSAhPSAxKTsKQEAgLTE4NCwxMCArMTg1LDE0IEBACiAJICovCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAwKTsKIAorCWlmICh3YWl0ID09IFVNSF9XQUlUX0VYRUMpCisJCWNvbXBsZXRlKHN1Yl9pbmZvLT5jb21wbGV0ZSk7CisKIAlyZXR2YWwgPSBrZXJuZWxfZXhlY3ZlKHN1Yl9pbmZvLT5wYXRoLCBzdWJfaW5mby0+YXJndiwgc3ViX2luZm8tPmVudnApOwogCiAJLyogRXhlYyBmYWlsZWQ/ICovCi0Jc3ViX2luZm8tPnJldHZhbCA9IHJldHZhbDsKKwlpZiAod2FpdCAhPSBVTUhfV0FJVF9FWEVDKQorCQlzdWJfaW5mby0+cmV0dmFsID0gcmV0dmFsOwogCWRvX2V4aXQoMCk7CiB9CiAKQEAgLTI2NiwxNiArMjcxLDE0IEBACiAKIAlzd2l0Y2ggKHdhaXQpIHsKIAljYXNlIFVNSF9OT19XQUlUOgorCWNhc2UgVU1IX1dBSVRfRVhFQzoKIAkJYnJlYWs7CiAKIAljYXNlIFVNSF9XQUlUX1BST0M6CiAJCWlmIChwaWQgPiAwKQogCQkJYnJlYWs7CiAJCXN1Yl9pbmZvLT5yZXR2YWwgPSBwaWQ7Ci0JCS8qIEZBTExUSFJPVUdIICovCi0KLQljYXNlIFVNSF9XQUlUX0VYRUM6Ci0JCWNvbXBsZXRlKHN1Yl9pbmZvLT5jb21wbGV0ZSk7CisJCWJyZWFrOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZWYxNzdkNi4uY2ZhZGMxMiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGtwcm9iZXNfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMga3Byb2Jlc19zZXFfb3BzID0gewogCS5zdGFydCA9IGtwcm9iZV9zZXFfc3RhcnQsCiAJLm5leHQgID0ga3Byb2JlX3NlcV9uZXh0LAogCS5zdG9wICA9IGtwcm9iZV9zZXFfc3RvcCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IGY3NGQyZDcuLjM4MTVhYzFkIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTU3OCw2ICs1NzgsOSBAQAogCWlmICgoYWRkciA+PSBzdGFydCkgJiYgKGFkZHIgPCBlbmQpKQogCQlyZXR1cm4gMTsKIAorCWlmIChhcmNoX2lzX2tlcm5lbF9kYXRhKGFkZHIpKQorCQlyZXR1cm4gMTsKKwogI2lmZGVmIENPTkZJR19TTVAKIAkvKgogCSAqIHBlcmNwdSB2YXI/CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcF9wcm9jLmMgYi9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKaW5kZXggZDRiM2RiYy4uZDRhYmE0ZiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXBfcHJvYy5jCisrKyBiL2tlcm5lbC9sb2NrZGVwX3Byb2MuYwpAQCAtNTk0LDcgKzU5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbG9ja3N0YXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsb2Nrc3RhdF9vcHMgPSB7CiAJLnN0YXJ0CT0gbHNfc3RhcnQsCiAJLm5leHQJPSBsc19uZXh0LAogCS5zdG9wCT0gbHNfc3RvcCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9tYXJrZXIuYyBiL2tlcm5lbC9tYXJrZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1NGYyNi4uMDAwMDAwMAotLS0gYS9rZXJuZWwvbWFya2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBNYXRoaWV1IERlc25veWVycwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvamhhc2guaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgbWFya2VyIF9fc3RhcnRfX19tYXJrZXJzW107Ci1leHRlcm4gc3RydWN0IG1hcmtlciBfX3N0b3BfX19tYXJrZXJzW107Ci0KLS8qIFNldCB0byAxIHRvIGVuYWJsZSBtYXJrZXIgZGVidWcgb3V0cHV0ICovCi1zdGF0aWMgY29uc3QgaW50IG1hcmtlcl9kZWJ1ZzsKLQotLyoKLSAqIG1hcmtlcnNfbXV0ZXggbmVzdHMgaW5zaWRlIG1vZHVsZV9tdXRleC4gTWFya2VycyBtdXRleCBwcm90ZWN0cyB0aGUgYnVpbHRpbgotICogYW5kIG1vZHVsZSBtYXJrZXJzIGFuZCB0aGUgaGFzaCB0YWJsZS4KLSAqLwotc3RhdGljIERFRklORV9NVVRFWChtYXJrZXJzX211dGV4KTsKLQotLyoKLSAqIE1hcmtlciBoYXNoIHRhYmxlLCBjb250YWluaW5nIHRoZSBhY3RpdmUgbWFya2Vycy4KLSAqIFByb3RlY3RlZCBieSBtb2R1bGVfbXV0ZXguCi0gKi8KLSNkZWZpbmUgTUFSS0VSX0hBU0hfQklUUyA2Ci0jZGVmaW5lIE1BUktFUl9UQUJMRV9TSVpFICgxIDw8IE1BUktFUl9IQVNIX0JJVFMpCi1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbWFya2VyX3RhYmxlW01BUktFUl9UQUJMRV9TSVpFXTsKLQotLyoKLSAqIE5vdGUgYWJvdXQgUkNVIDoKLSAqIEl0IGlzIHVzZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5IGhhbmRsZXIgaGFzIGZpbmlzaGVkIHVzaW5nIGl0cyBwcml2YXRlIGRhdGEKLSAqIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIG9wZXJhdGlvbiAoYWRkIG9yIHJlbW92ZSkgb24gYSBnaXZlbiBtYXJrZXIuICBJdCBpcwotICogYWxzbyB1c2VkIHRvIGRlbGF5IHRoZSBmcmVlIG9mIG11bHRpcGxlIHByb2JlcyBhcnJheSB1bnRpbCBhIHF1aWVzY2VudCBzdGF0ZQotICogaXMgcmVhY2hlZC4KLSAqIG1hcmtlciBlbnRyaWVzIG1vZGlmaWNhdGlvbnMgYXJlIHByb3RlY3RlZCBieSB0aGUgbWFya2Vyc19tdXRleC4KLSAqLwotc3RydWN0IG1hcmtlcl9lbnRyeSB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7Ci0JY2hhciAqZm9ybWF0OwotCQkJLyogUHJvYmUgd3JhcHBlciAqLwotCXZvaWQgKCpjYWxsKShjb25zdCBzdHJ1Y3QgbWFya2VyICptZGF0YSwgdm9pZCAqY2FsbF9wcml2YXRlLCAuLi4pOwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSBzaW5nbGU7Ci0Jc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICptdWx0aTsKLQlpbnQgcmVmY291bnQ7CS8qIE51bWJlciBvZiB0aW1lcyBhcm1lZC4gMCBpZiBkaXNhcm1lZC4gKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwotCXZvaWQgKm9sZHB0cjsKLQlpbnQgcmN1X3BlbmRpbmc7Ci0JdW5zaWduZWQgY2hhciBwdHlwZToxOwotCXVuc2lnbmVkIGNoYXIgZm9ybWF0X2FsbG9jYXRlZDoxOwotCWNoYXIgbmFtZVswXTsJLyogQ29udGFpbnMgbmFtZSdcMCdmb3JtYXQnXDAnICovCi19OwotCi0vKioKLSAqIF9fbWFya19lbXB0eV9mdW5jdGlvbiAtIEVtcHR5IHByb2JlIGNhbGxiYWNrCi0gKiBAcHJvYmVfcHJpdmF0ZTogcHJvYmUgcHJpdmF0ZSBkYXRhCi0gKiBAY2FsbF9wcml2YXRlOiBjYWxsIHNpdGUgcHJpdmF0ZSBkYXRhCi0gKiBAZm10OiBmb3JtYXQgc3RyaW5nCi0gKiBALi4uOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0Ci0gKgotICogRW1wdHkgY2FsbGJhY2sgcHJvdmlkZWQgYXMgYSBwcm9iZSB0byB0aGUgbWFya2Vycy4gQnkgcHJvdmlkaW5nIHRoaXMgdG8gYQotICogZGlzYWJsZWQgbWFya2VyLCB3ZSBtYWtlIHN1cmUgdGhlICBleGVjdXRpb24gZmxvdyBpcyBhbHdheXMgdmFsaWQgZXZlbgotICogdGhvdWdoIHRoZSBmdW5jdGlvbiBwb2ludGVyIGNoYW5nZSBhbmQgdGhlIG1hcmtlciBlbmFibGluZyBhcmUgdHdvIGRpc3RpbmN0Ci0gKiBvcGVyYXRpb25zIHRoYXQgbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHByZWVtcHRpYmxlIGNvZGUuCi0gKi8KLW5vdHJhY2Ugdm9pZCBfX21hcmtfZW1wdHlfZnVuY3Rpb24odm9pZCAqcHJvYmVfcHJpdmF0ZSwgdm9pZCAqY2FsbF9wcml2YXRlLAotCWNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCAqYXJncykKLXsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fbWFya19lbXB0eV9mdW5jdGlvbik7Ci0KLS8qCi0gKiBtYXJrZXJfcHJvYmVfY2IgQ2FsbGJhY2sgdGhhdCBwcmVwYXJlcyB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmb3IgcHJvYmVzLgotICogQG1kYXRhOiBwb2ludGVyIG9mIHR5cGUgc3RydWN0IG1hcmtlcgotICogQGNhbGxfcHJpdmF0ZTogY2FsbGVyIHNpdGUgcHJpdmF0ZSBkYXRhCi0gKiBALi4uOiAgVmFyaWFibGUgYXJndW1lbnQgbGlzdC4KLSAqCi0gKiBTaW5jZSB3ZSBkbyBub3QgdXNlICJ0eXBpY2FsIiBwb2ludGVyIGJhc2VkIFJDVSBpbiB0aGUgMSBhcmd1bWVudCBjYXNlLCB3ZQotICogbmVlZCB0byBwdXQgYSBmdWxsIHNtcF9ybWIoKSBpbiB0aGlzIGJyYW5jaC4gVGhpcyBpcyB3aHkgd2UgZG8gbm90IHVzZQotICogcmN1X2RlcmVmZXJlbmNlKCkgZm9yIHRoZSBwb2ludGVyIHJlYWQuCi0gKi8KLW5vdHJhY2Ugdm9pZCBtYXJrZXJfcHJvYmVfY2IoY29uc3Qgc3RydWN0IG1hcmtlciAqbWRhdGEsCi0JCXZvaWQgKmNhbGxfcHJpdmF0ZSwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQljaGFyIHB0eXBlOwotCi0JLyoKLQkgKiByY3VfcmVhZF9sb2NrX3NjaGVkIGRvZXMgdHdvIHRoaW5ncyA6IGRpc2FibGluZyBwcmVlbXB0aW9uIHRvIG1ha2UKLQkgKiBzdXJlIHRoZSB0ZWFyZG93biBvZiB0aGUgY2FsbGJhY2tzIGNhbiBiZSBkb25lIGNvcnJlY3RseSB3aGVuIHRoZXkKLQkgKiBhcmUgaW4gbW9kdWxlcyBhbmQgdGhleSBpbnN1cmUgUkNVIHJlYWQgY29oZXJlbmN5LgotCSAqLwotCXJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZSgpOwotCXB0eXBlID0gbWRhdGEtPnB0eXBlOwotCWlmIChsaWtlbHkoIXB0eXBlKSkgewotCQltYXJrZXJfcHJvYmVfZnVuYyAqZnVuYzsKLQkJLyogTXVzdCByZWFkIHRoZSBwdHlwZSBiZWZvcmUgcHRyLiBUaGV5IGFyZSBub3QgZGF0YSBkZXBlbmRhbnQsCi0JCSAqIHNvIHdlIHB1dCBhbiBleHBsaWNpdCBzbXBfcm1iKCkgaGVyZS4gKi8KLQkJc21wX3JtYigpOwotCQlmdW5jID0gbWRhdGEtPnNpbmdsZS5mdW5jOwotCQkvKiBNdXN0IHJlYWQgdGhlIHB0ciBiZWZvcmUgcHJpdmF0ZSBkYXRhLiBUaGV5IGFyZSBub3QgZGF0YQotCQkgKiBkZXBlbmRhbnQsIHNvIHdlIHB1dCBhbiBleHBsaWNpdCBzbXBfcm1iKCkgaGVyZS4gKi8KLQkJc21wX3JtYigpOwotCQl2YV9zdGFydChhcmdzLCBjYWxsX3ByaXZhdGUpOwotCQlmdW5jKG1kYXRhLT5zaW5nbGUucHJvYmVfcHJpdmF0ZSwgY2FsbF9wcml2YXRlLCBtZGF0YS0+Zm9ybWF0LAotCQkJJmFyZ3MpOwotCQl2YV9lbmQoYXJncyk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICptdWx0aTsKLQkJaW50IGk7Ci0JCS8qCi0JCSAqIFJlYWQgbWRhdGEtPnB0eXBlIGJlZm9yZSBtZGF0YS0+bXVsdGkuCi0JCSAqLwotCQlzbXBfcm1iKCk7Ci0JCW11bHRpID0gbWRhdGEtPm11bHRpOwotCQkvKgotCQkgKiBtdWx0aSBwb2ludHMgdG8gYW4gYXJyYXksIHRoZXJlZm9yZSBhY2Nlc3NpbmcgdGhlIGFycmF5Ci0JCSAqIGRlcGVuZHMgb24gcmVhZGluZyBtdWx0aS4gSG93ZXZlciwgZXZlbiBpbiB0aGlzIGNhc2UsCi0JCSAqIHdlIG11c3QgaW5zdXJlIHRoYXQgdGhlIHBvaW50ZXIgaXMgcmVhZCBfYmVmb3JlXyB0aGUgYXJyYXkKLQkJICogZGF0YS4gU2FtZSBhcyByY3VfZGVyZWZlcmVuY2UsIGJ1dCB3ZSBuZWVkIGEgZnVsbCBzbXBfcm1iKCkKLQkJICogaW4gdGhlIGZhc3QgcGF0aCwgc28gcHV0IHRoZSBleHBsaWNpdCBiYXJyaWVyIGhlcmUuCi0JCSAqLwotCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKLQkJZm9yIChpID0gMDsgbXVsdGlbaV0uZnVuYzsgaSsrKSB7Ci0JCQl2YV9zdGFydChhcmdzLCBjYWxsX3ByaXZhdGUpOwotCQkJbXVsdGlbaV0uZnVuYyhtdWx0aVtpXS5wcm9iZV9wcml2YXRlLCBjYWxsX3ByaXZhdGUsCi0JCQkJbWRhdGEtPmZvcm1hdCwgJmFyZ3MpOwotCQkJdmFfZW5kKGFyZ3MpOwotCQl9Ci0JfQotCXJjdV9yZWFkX3VubG9ja19zY2hlZF9ub3RyYWNlKCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfcHJvYmVfY2IpOwotCi0vKgotICogbWFya2VyX3Byb2JlX2NiIENhbGxiYWNrIHRoYXQgZG9lcyBub3QgcHJlcGFyZSB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KLSAqIEBtZGF0YTogcG9pbnRlciBvZiB0eXBlIHN0cnVjdCBtYXJrZXIKLSAqIEBjYWxsX3ByaXZhdGU6IGNhbGxlciBzaXRlIHByaXZhdGUgZGF0YQotICogQC4uLjogIFZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuCi0gKgotICogU2hvdWxkIGJlIGNvbm5lY3RlZCB0byBtYXJrZXJzICJNQVJLX05PQVJHUyIuCi0gKi8KLXN0YXRpYyBub3RyYWNlIHZvaWQgbWFya2VyX3Byb2JlX2NiX25vYXJnKGNvbnN0IHN0cnVjdCBtYXJrZXIgKm1kYXRhLAotCQl2b2lkICpjYWxsX3ByaXZhdGUsIC4uLikKLXsKLQl2YV9saXN0IGFyZ3M7CS8qIG5vdCBpbml0aWFsaXplZCAqLwotCWNoYXIgcHR5cGU7Ci0KLQlyY3VfcmVhZF9sb2NrX3NjaGVkX25vdHJhY2UoKTsKLQlwdHlwZSA9IG1kYXRhLT5wdHlwZTsKLQlpZiAobGlrZWx5KCFwdHlwZSkpIHsKLQkJbWFya2VyX3Byb2JlX2Z1bmMgKmZ1bmM7Ci0JCS8qIE11c3QgcmVhZCB0aGUgcHR5cGUgYmVmb3JlIHB0ci4gVGhleSBhcmUgbm90IGRhdGEgZGVwZW5kYW50LAotCQkgKiBzbyB3ZSBwdXQgYW4gZXhwbGljaXQgc21wX3JtYigpIGhlcmUuICovCi0JCXNtcF9ybWIoKTsKLQkJZnVuYyA9IG1kYXRhLT5zaW5nbGUuZnVuYzsKLQkJLyogTXVzdCByZWFkIHRoZSBwdHIgYmVmb3JlIHByaXZhdGUgZGF0YS4gVGhleSBhcmUgbm90IGRhdGEKLQkJICogZGVwZW5kYW50LCBzbyB3ZSBwdXQgYW4gZXhwbGljaXQgc21wX3JtYigpIGhlcmUuICovCi0JCXNtcF9ybWIoKTsKLQkJZnVuYyhtZGF0YS0+c2luZ2xlLnByb2JlX3ByaXZhdGUsIGNhbGxfcHJpdmF0ZSwgbWRhdGEtPmZvcm1hdCwKLQkJCSZhcmdzKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgbWFya2VyX3Byb2JlX2Nsb3N1cmUgKm11bHRpOwotCQlpbnQgaTsKLQkJLyoKLQkJICogUmVhZCBtZGF0YS0+cHR5cGUgYmVmb3JlIG1kYXRhLT5tdWx0aS4KLQkJICovCi0JCXNtcF9ybWIoKTsKLQkJbXVsdGkgPSBtZGF0YS0+bXVsdGk7Ci0JCS8qCi0JCSAqIG11bHRpIHBvaW50cyB0byBhbiBhcnJheSwgdGhlcmVmb3JlIGFjY2Vzc2luZyB0aGUgYXJyYXkKLQkJICogZGVwZW5kcyBvbiByZWFkaW5nIG11bHRpLiBIb3dldmVyLCBldmVuIGluIHRoaXMgY2FzZSwKLQkJICogd2UgbXVzdCBpbnN1cmUgdGhhdCB0aGUgcG9pbnRlciBpcyByZWFkIF9iZWZvcmVfIHRoZSBhcnJheQotCQkgKiBkYXRhLiBTYW1lIGFzIHJjdV9kZXJlZmVyZW5jZSwgYnV0IHdlIG5lZWQgYSBmdWxsIHNtcF9ybWIoKQotCQkgKiBpbiB0aGUgZmFzdCBwYXRoLCBzbyBwdXQgdGhlIGV4cGxpY2l0IGJhcnJpZXIgaGVyZS4KLQkJICovCi0JCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOwotCQlmb3IgKGkgPSAwOyBtdWx0aVtpXS5mdW5jOyBpKyspCi0JCQltdWx0aVtpXS5mdW5jKG11bHRpW2ldLnByb2JlX3ByaXZhdGUsIGNhbGxfcHJpdmF0ZSwKLQkJCQltZGF0YS0+Zm9ybWF0LCAmYXJncyk7Ci0JfQotCXJjdV9yZWFkX3VubG9ja19zY2hlZF9ub3RyYWNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfb2xkX2Nsb3N1cmUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGhlYWQsCi0JCXN0cnVjdCBtYXJrZXJfZW50cnksIHJjdSk7Ci0Ja2ZyZWUoZW50cnktPm9sZHB0cik7Ci0JLyogTWFrZSBzdXJlIHdlIGZyZWUgdGhlIGRhdGEgYmVmb3JlIHNldHRpbmcgdGhlIHBlbmRpbmcgZmxhZyB0byAwICovCi0Jc21wX3dtYigpOwotCWVudHJ5LT5yY3VfcGVuZGluZyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlYnVnX3ByaW50X3Byb2JlcyhzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeSkKLXsKLQlpbnQgaTsKLQotCWlmICghbWFya2VyX2RlYnVnKQotCQlyZXR1cm47Ci0KLQlpZiAoIWVudHJ5LT5wdHlwZSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiU2luZ2xlIHByb2JlIDogJXAgJXBcbiIsCi0JCQllbnRyeS0+c2luZ2xlLmZ1bmMsCi0JCQllbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUpOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGVudHJ5LT5tdWx0aVtpXS5mdW5jOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTXVsdGkgcHJvYmUgJWQgOiAlcCAlcFxuIiwgaSwKLQkJCQllbnRyeS0+bXVsdGlbaV0uZnVuYywKLQkJCQllbnRyeS0+bXVsdGlbaV0ucHJvYmVfcHJpdmF0ZSk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICoKLW1hcmtlcl9lbnRyeV9hZGRfcHJvYmUoc3RydWN0IG1hcmtlcl9lbnRyeSAqZW50cnksCi0JCW1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwgdm9pZCAqcHJvYmVfcHJpdmF0ZSkKLXsKLQlpbnQgbnJfcHJvYmVzID0gMDsKLQlzdHJ1Y3QgbWFya2VyX3Byb2JlX2Nsb3N1cmUgKm9sZCwgKm5ldzsKLQotCVdBUk5fT04oIXByb2JlKTsKLQotCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0Jb2xkID0gZW50cnktPm11bHRpOwotCWlmICghZW50cnktPnB0eXBlKSB7Ci0JCWlmIChlbnRyeS0+c2luZ2xlLmZ1bmMgPT0gcHJvYmUgJiYKLQkJCQllbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUgPT0gcHJvYmVfcHJpdmF0ZSkKLQkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7Ci0JCWlmIChlbnRyeS0+c2luZ2xlLmZ1bmMgPT0gX19tYXJrX2VtcHR5X2Z1bmN0aW9uKSB7Ci0JCQkvKiAwIC0+IDEgcHJvYmVzICovCi0JCQllbnRyeS0+c2luZ2xlLmZ1bmMgPSBwcm9iZTsKLQkJCWVudHJ5LT5zaW5nbGUucHJvYmVfcHJpdmF0ZSA9IHByb2JlX3ByaXZhdGU7Ci0JCQllbnRyeS0+cmVmY291bnQgPSAxOwotCQkJZW50cnktPnB0eXBlID0gMDsKLQkJCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCS8qIDEgLT4gMiBwcm9iZXMgKi8KLQkJCW5yX3Byb2JlcyA9IDE7Ci0JCQlvbGQgPSBOVUxMOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogKE4gLT4gTisxKSwgKE4gIT0gMCwgMSkgcHJvYmVzICovCi0JCWZvciAobnJfcHJvYmVzID0gMDsgb2xkW25yX3Byb2Jlc10uZnVuYzsgbnJfcHJvYmVzKyspCi0JCQlpZiAob2xkW25yX3Byb2Jlc10uZnVuYyA9PSBwcm9iZQotCQkJCQkmJiBvbGRbbnJfcHJvYmVzXS5wcm9iZV9wcml2YXRlCi0JCQkJCQk9PSBwcm9iZV9wcml2YXRlKQotCQkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7Ci0JfQotCS8qICsgMiA6IG9uZSBmb3IgbmV3IHByb2JlLCBvbmUgZm9yIE5VTEwgZnVuYyAqLwotCW5ldyA9IGt6YWxsb2MoKG5yX3Byb2JlcyArIDIpICogc2l6ZW9mKHN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAobmV3ID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCWlmICghb2xkKQotCQluZXdbMF0gPSBlbnRyeS0+c2luZ2xlOwotCWVsc2UKLQkJbWVtY3B5KG5ldywgb2xkLAotCQkJbnJfcHJvYmVzICogc2l6ZW9mKHN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSkpOwotCW5ld1tucl9wcm9iZXNdLmZ1bmMgPSBwcm9iZTsKLQluZXdbbnJfcHJvYmVzXS5wcm9iZV9wcml2YXRlID0gcHJvYmVfcHJpdmF0ZTsKLQllbnRyeS0+cmVmY291bnQgPSBucl9wcm9iZXMgKyAxOwotCWVudHJ5LT5tdWx0aSA9IG5ldzsKLQllbnRyeS0+cHR5cGUgPSAxOwotCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0JcmV0dXJuIG9sZDsKLX0KLQotc3RhdGljIHN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqCi1tYXJrZXJfZW50cnlfcmVtb3ZlX3Byb2JlKHN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5LAotCQltYXJrZXJfcHJvYmVfZnVuYyAqcHJvYmUsIHZvaWQgKnByb2JlX3ByaXZhdGUpCi17Ci0JaW50IG5yX3Byb2JlcyA9IDAsIG5yX2RlbCA9IDAsIGk7Ci0Jc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICpvbGQsICpuZXc7Ci0KLQlvbGQgPSBlbnRyeS0+bXVsdGk7Ci0KLQlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOwotCWlmICghZW50cnktPnB0eXBlKSB7Ci0JCS8qIDAgLT4gTiBpcyBhbiBlcnJvciAqLwotCQlXQVJOX09OKGVudHJ5LT5zaW5nbGUuZnVuYyA9PSBfX21hcmtfZW1wdHlfZnVuY3Rpb24pOwotCQkvKiAxIC0+IDAgcHJvYmVzICovCi0JCVdBUk5fT04ocHJvYmUgJiYgZW50cnktPnNpbmdsZS5mdW5jICE9IHByb2JlKTsKLQkJV0FSTl9PTihlbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUgIT0gcHJvYmVfcHJpdmF0ZSk7Ci0JCWVudHJ5LT5zaW5nbGUuZnVuYyA9IF9fbWFya19lbXB0eV9mdW5jdGlvbjsKLQkJZW50cnktPnJlZmNvdW50ID0gMDsKLQkJZW50cnktPnB0eXBlID0gMDsKLQkJZGVidWdfcHJpbnRfcHJvYmVzKGVudHJ5KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyogKE4gLT4gTSksIChOID4gMSwgTSA+PSAwKSBwcm9iZXMgKi8KLQkJZm9yIChucl9wcm9iZXMgPSAwOyBvbGRbbnJfcHJvYmVzXS5mdW5jOyBucl9wcm9iZXMrKykgewotCQkJaWYgKCghcHJvYmUgfHwgb2xkW25yX3Byb2Jlc10uZnVuYyA9PSBwcm9iZSkKLQkJCQkJJiYgb2xkW25yX3Byb2Jlc10ucHJvYmVfcHJpdmF0ZQotCQkJCQkJPT0gcHJvYmVfcHJpdmF0ZSkKLQkJCQlucl9kZWwrKzsKLQkJfQotCX0KLQotCWlmIChucl9wcm9iZXMgLSBucl9kZWwgPT0gMCkgewotCQkvKiBOIC0+IDAsIChOID4gMSkgKi8KLQkJZW50cnktPnNpbmdsZS5mdW5jID0gX19tYXJrX2VtcHR5X2Z1bmN0aW9uOwotCQllbnRyeS0+cmVmY291bnQgPSAwOwotCQllbnRyeS0+cHR5cGUgPSAwOwotCX0gZWxzZSBpZiAobnJfcHJvYmVzIC0gbnJfZGVsID09IDEpIHsKLQkJLyogTiAtPiAxLCAoTiA+IDEpICovCi0JCWZvciAoaSA9IDA7IG9sZFtpXS5mdW5jOyBpKyspCi0JCQlpZiAoKHByb2JlICYmIG9sZFtpXS5mdW5jICE9IHByb2JlKSB8fAotCQkJCQlvbGRbaV0ucHJvYmVfcHJpdmF0ZSAhPSBwcm9iZV9wcml2YXRlKQotCQkJCWVudHJ5LT5zaW5nbGUgPSBvbGRbaV07Ci0JCWVudHJ5LT5yZWZjb3VudCA9IDE7Ci0JCWVudHJ5LT5wdHlwZSA9IDA7Ci0JfSBlbHNlIHsKLQkJaW50IGogPSAwOwotCQkvKiBOIC0+IE0sIChOID4gMSwgTSA+IDEpICovCi0JCS8qICsgMSBmb3IgTlVMTCAqLwotCQluZXcgPSBremFsbG9jKChucl9wcm9iZXMgLSBucl9kZWwgKyAxKQotCQkJKiBzaXplb2Yoc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChuZXcgPT0gTlVMTCkKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCQlmb3IgKGkgPSAwOyBvbGRbaV0uZnVuYzsgaSsrKQotCQkJaWYgKChwcm9iZSAmJiBvbGRbaV0uZnVuYyAhPSBwcm9iZSkgfHwKLQkJCQkJb2xkW2ldLnByb2JlX3ByaXZhdGUgIT0gcHJvYmVfcHJpdmF0ZSkKLQkJCQluZXdbaisrXSA9IG9sZFtpXTsKLQkJZW50cnktPnJlZmNvdW50ID0gbnJfcHJvYmVzIC0gbnJfZGVsOwotCQllbnRyeS0+cHR5cGUgPSAxOwotCQllbnRyeS0+bXVsdGkgPSBuZXc7Ci0JfQotCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0JcmV0dXJuIG9sZDsKLX0KLQotLyoKLSAqIEdldCBtYXJrZXIgaWYgdGhlIG1hcmtlciBpcyBwcmVzZW50IGluIHRoZSBtYXJrZXIgaGFzaCB0YWJsZS4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggbWFya2Vyc19tdXRleCBoZWxkLgotICogUmV0dXJucyBOVUxMIGlmIG5vdCBwcmVzZW50LgotICovCi1zdGF0aWMgc3RydWN0IG1hcmtlcl9lbnRyeSAqZ2V0X21hcmtlcihjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmU7Ci0JdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBzdHJsZW4obmFtZSksIDApOwotCi0JaGVhZCA9ICZtYXJrZXJfdGFibGVbaGFzaCAmICgoMSA8PCBNQVJLRVJfSEFTSF9CSVRTKS0xKV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpCi0JCQlyZXR1cm4gZTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBBZGQgdGhlIG1hcmtlciB0byB0aGUgbWFya2VyIGhhc2ggdGFibGUuIE11c3QgYmUgY2FsbGVkIHdpdGggbWFya2Vyc19tdXRleAotICogaGVsZC4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXJrZXJfZW50cnkgKmFkZF9tYXJrZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0KQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmU7Ci0Jc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpICsgMTsKLQlzaXplX3QgZm9ybWF0X2xlbiA9IDA7Ci0JdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBuYW1lX2xlbi0xLCAwKTsKLQotCWlmIChmb3JtYXQpCi0JCWZvcm1hdF9sZW4gPSBzdHJsZW4oZm9ybWF0KSArIDE7Ci0JaGVhZCA9ICZtYXJrZXJfdGFibGVbaGFzaCAmICgoMSA8PCBNQVJLRVJfSEFTSF9CSVRTKS0xKV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRQotCQkJCSJNYXJrZXIgJXMgYnVzeVxuIiwgbmFtZSk7Ci0JCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOwkvKiBBbHJlYWR5IHRoZXJlICovCi0JCX0KLQl9Ci0JLyoKLQkgKiBVc2luZyBrbWFsbG9jIGhlcmUgdG8gYWxsb2NhdGUgYSB2YXJpYWJsZSBsZW5ndGggZWxlbWVudC4gQ291bGQKLQkgKiBjYXVzZSBzb21lIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlmIG92ZXJ1c2VkLgotCSAqLwotCWUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFya2VyX2VudHJ5KSArIG5hbWVfbGVuICsgZm9ybWF0X2xlbiwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JbWVtY3B5KCZlLT5uYW1lWzBdLCBuYW1lLCBuYW1lX2xlbik7Ci0JaWYgKGZvcm1hdCkgewotCQllLT5mb3JtYXQgPSAmZS0+bmFtZVtuYW1lX2xlbl07Ci0JCW1lbWNweShlLT5mb3JtYXQsIGZvcm1hdCwgZm9ybWF0X2xlbik7Ci0JCWlmIChzdHJjbXAoZS0+Zm9ybWF0LCBNQVJLX05PQVJHUykgPT0gMCkKLQkJCWUtPmNhbGwgPSBtYXJrZXJfcHJvYmVfY2Jfbm9hcmc7Ci0JCWVsc2UKLQkJCWUtPmNhbGwgPSBtYXJrZXJfcHJvYmVfY2I7Ci0JCXRyYWNlX21hcmsoY29yZV9tYXJrZXJfZm9ybWF0LCAibmFtZSAlcyBmb3JtYXQgJXMiLAotCQkJCWUtPm5hbWUsIGUtPmZvcm1hdCk7Ci0JfSBlbHNlIHsKLQkJZS0+Zm9ybWF0ID0gTlVMTDsKLQkJZS0+Y2FsbCA9IG1hcmtlcl9wcm9iZV9jYjsKLQl9Ci0JZS0+c2luZ2xlLmZ1bmMgPSBfX21hcmtfZW1wdHlfZnVuY3Rpb247Ci0JZS0+c2luZ2xlLnByb2JlX3ByaXZhdGUgPSBOVUxMOwotCWUtPm11bHRpID0gTlVMTDsKLQllLT5wdHlwZSA9IDA7Ci0JZS0+Zm9ybWF0X2FsbG9jYXRlZCA9IDA7Ci0JZS0+cmVmY291bnQgPSAwOwotCWUtPnJjdV9wZW5kaW5nID0gMDsKLQlobGlzdF9hZGRfaGVhZCgmZS0+aGxpc3QsIGhlYWQpOwotCXJldHVybiBlOwotfQotCi0vKgotICogUmVtb3ZlIHRoZSBtYXJrZXIgZnJvbSB0aGUgbWFya2VyIGhhc2ggdGFibGUuIE11c3QgYmUgY2FsbGVkIHdpdGggbXV0ZXhfbG9jawotICogaGVsZC4KLSAqLwotc3RhdGljIGludCByZW1vdmVfbWFya2VyKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IG1hcmtlcl9lbnRyeSAqZTsKLQlpbnQgZm91bmQgPSAwOwotCXNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwotCXUzMiBoYXNoID0gamhhc2gobmFtZSwgbGVuLTEsIDApOwotCi0JaGVhZCA9ICZtYXJrZXJfdGFibGVbaGFzaCAmICgoMSA8PCBNQVJLRVJfSEFTSF9CSVRTKS0xKV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghZm91bmQpCi0JCXJldHVybiAtRU5PRU5UOwotCWlmIChlLT5zaW5nbGUuZnVuYyAhPSBfX21hcmtfZW1wdHlfZnVuY3Rpb24pCi0JCXJldHVybiAtRUJVU1k7Ci0JaGxpc3RfZGVsKCZlLT5obGlzdCk7Ci0JaWYgKGUtPmZvcm1hdF9hbGxvY2F0ZWQpCi0JCWtmcmVlKGUtPmZvcm1hdCk7Ci0JLyogTWFrZSBzdXJlIHRoZSBjYWxsX3JjdSBoYXMgYmVlbiBleGVjdXRlZCAqLwotCWlmIChlLT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQlrZnJlZShlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldCB0aGUgbWFya19lbnRyeSBmb3JtYXQgdG8gdGhlIGZvcm1hdCBmb3VuZCBpbiB0aGUgZWxlbWVudC4KLSAqLwotc3RhdGljIGludCBtYXJrZXJfc2V0X2Zvcm1hdChzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeSwgY29uc3QgY2hhciAqZm9ybWF0KQotewotCWVudHJ5LT5mb3JtYXQgPSBrc3RyZHVwKGZvcm1hdCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlbnRyeS0+Zm9ybWF0KQotCQlyZXR1cm4gLUVOT01FTTsKLQllbnRyeS0+Zm9ybWF0X2FsbG9jYXRlZCA9IDE7Ci0KLQl0cmFjZV9tYXJrKGNvcmVfbWFya2VyX2Zvcm1hdCwgIm5hbWUgJXMgZm9ybWF0ICVzIiwKLQkJCWVudHJ5LT5uYW1lLCBlbnRyeS0+Zm9ybWF0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHMgdGhlIHByb2JlIGNhbGxiYWNrIGNvcnJlc3BvbmRpbmcgdG8gb25lIG1hcmtlci4KLSAqLwotc3RhdGljIGludCBzZXRfbWFya2VyKHN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgbWFya2VyICplbGVtLAotCQlpbnQgYWN0aXZlKQotewotCWludCByZXQgPSAwOwotCVdBUk5fT04oc3RyY21wKGVudHJ5LT5uYW1lLCBlbGVtLT5uYW1lKSAhPSAwKTsKLQotCWlmIChlbnRyeS0+Zm9ybWF0KSB7Ci0JCWlmIChzdHJjbXAoZW50cnktPmZvcm1hdCwgZWxlbS0+Zm9ybWF0KSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCQkiRm9ybWF0IG1pc21hdGNoIGZvciBwcm9iZSAlcyAiCi0JCQkJIiglcyksIG1hcmtlciAoJXMpXG4iLAotCQkJCWVudHJ5LT5uYW1lLAotCQkJCWVudHJ5LT5mb3JtYXQsCi0JCQkJZWxlbS0+Zm9ybWF0KTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0KLQl9IGVsc2UgewotCQlyZXQgPSBtYXJrZXJfc2V0X2Zvcm1hdChlbnRyeSwgZWxlbS0+Zm9ybWF0KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyoKLQkgKiBwcm9iZV9jYiBzZXR1cCAoc3RhdGljYWxseSBrbm93bikgaXMgZG9uZSBoZXJlLiBJdCBpcwotCSAqIGFzeW5jaHJvbm91cyB3aXRoIHRoZSByZXN0IG9mIGV4ZWN1dGlvbiwgdGhlcmVmb3JlIHdlIG9ubHkKLQkgKiBwYXNzIGZyb20gYSAic2FmZSIgY2FsbGJhY2sgKHdpdGggYXJndW1lbnQpIHRvIGFuICJ1bnNhZmUiCi0JICogY2FsbGJhY2sgKGRvZXMgbm90IHNldCBhcmd1bWVudHMpLgotCSAqLwotCWVsZW0tPmNhbGwgPSBlbnRyeS0+Y2FsbDsKLQkvKgotCSAqIFNhbml0eSBjaGVjayA6Ci0JICogV2Ugb25seSB1cGRhdGUgdGhlIHNpbmdsZSBwcm9iZSBwcml2YXRlIGRhdGEgd2hlbiB0aGUgcHRyIGlzCi0JICogc2V0IHRvIGEgX25vbl8gc2luZ2xlIHByb2JlISAoMCAtPiAxIGFuZCBOIC0+IDEsIE4gIT0gMSkKLQkgKi8KLQlXQVJOX09OKGVsZW0tPnNpbmdsZS5mdW5jICE9IF9fbWFya19lbXB0eV9mdW5jdGlvbgotCQkmJiBlbGVtLT5zaW5nbGUucHJvYmVfcHJpdmF0ZSAhPSBlbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUKLQkJJiYgIWVsZW0tPnB0eXBlKTsKLQllbGVtLT5zaW5nbGUucHJvYmVfcHJpdmF0ZSA9IGVudHJ5LT5zaW5nbGUucHJvYmVfcHJpdmF0ZTsKLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgcHJpdmF0ZSBkYXRhIGlzIHZhbGlkIHdoZW4gd2UgdXBkYXRlIHRoZQotCSAqIHNpbmdsZSBwcm9iZSBwdHIuCi0JICovCi0Jc21wX3dtYigpOwotCWVsZW0tPnNpbmdsZS5mdW5jID0gZW50cnktPnNpbmdsZS5mdW5jOwotCS8qCi0JICogV2UgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByb2JlIGNhbGxiYWNrcyBhcnJheSBpcyBjb25zaXN0ZW50Ci0JICogYmVmb3JlIHNldHRpbmcgYSBwb2ludGVyIHRvIGl0LgotCSAqLwotCXJjdV9hc3NpZ25fcG9pbnRlcihlbGVtLT5tdWx0aSwgZW50cnktPm11bHRpKTsKLQkvKgotCSAqIFVwZGF0ZSB0aGUgZnVuY3Rpb24gb3IgbXVsdGkgcHJvYmUgYXJyYXkgcG9pbnRlciBiZWZvcmUgc2V0dGluZyB0aGUKLQkgKiBwdHlwZS4KLQkgKi8KLQlzbXBfd21iKCk7Ci0JZWxlbS0+cHR5cGUgPSBlbnRyeS0+cHR5cGU7Ci0KLQlpZiAoZWxlbS0+dHBfbmFtZSAmJiAoYWN0aXZlIF4gZWxlbS0+c3RhdGUpKSB7Ci0JCVdBUk5fT04oIWVsZW0tPnRwX2NiKTsKLQkJLyoKLQkJICogSXQgaXMgb2sgdG8gZGlyZWN0bHkgY2FsbCB0aGUgcHJvYmUgcmVnaXN0cmF0aW9uIGJlY2F1c2UgdHlwZQotCQkgKiBjaGVja2luZyBoYXMgYmVlbiBkb25lIGluIHRoZSBfX3RyYWNlX21hcmtfdHAoKSBtYWNyby4KLQkJICovCi0KLQkJaWYgKGFjdGl2ZSkgewotCQkJLyoKLQkJCSAqIHRyeV9tb2R1bGVfZ2V0IHNob3VsZCBhbHdheXMgc3VjY2VlZCBiZWNhdXNlIHdlIGhvbGQKLQkJCSAqIGxvY2tfbW9kdWxlKCkgdG8gZ2V0IHRoZSB0cF9jYiBhZGRyZXNzLgotCQkJICovCi0JCQlyZXQgPSB0cnlfbW9kdWxlX2dldChfX21vZHVsZV90ZXh0X2FkZHJlc3MoCi0JCQkJKHVuc2lnbmVkIGxvbmcpZWxlbS0+dHBfY2IpKTsKLQkJCUJVR19PTighcmV0KTsKLQkJCXJldCA9IHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXJfbm91cGRhdGUoCi0JCQkJZWxlbS0+dHBfbmFtZSwKLQkJCQllbGVtLT50cF9jYik7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSB0cmFjZXBvaW50X3Byb2JlX3VucmVnaXN0ZXJfbm91cGRhdGUoCi0JCQkJZWxlbS0+dHBfbmFtZSwKLQkJCQllbGVtLT50cF9jYik7Ci0JCQkvKgotCQkJICogdHJhY2Vwb2ludF9wcm9iZV91cGRhdGVfYWxsKCkgbXVzdCBiZSBjYWxsZWQKLQkJCSAqIGJlZm9yZSB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdHBfY2IgaXMgdW5sb2FkZWQuCi0JCQkgKi8KLQkJCW1vZHVsZV9wdXQoX19tb2R1bGVfdGV4dF9hZGRyZXNzKAotCQkJCSh1bnNpZ25lZCBsb25nKWVsZW0tPnRwX2NiKSk7Ci0JCX0KLQl9Ci0JZWxlbS0+c3RhdGUgPSBhY3RpdmU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogRGlzYWJsZSBhIG1hcmtlciBhbmQgaXRzIHByb2JlIGNhbGxiYWNrLgotICogTm90ZTogb25seSB3YWl0aW5nIGFuIFJDVSBwZXJpb2QgYWZ0ZXIgc2V0dGluZyBlbGVtLT5jYWxsIHRvIHRoZSBlbXB0eQotICogZnVuY3Rpb24gaW5zdXJlcyB0aGF0IHRoZSBvcmlnaW5hbCBjYWxsYmFjayBpcyBub3QgdXNlZCBhbnltb3JlLiBUaGlzIGluc3VyZWQKLSAqIGJ5IHJjdV9yZWFkX2xvY2tfc2NoZWQgYXJvdW5kIHRoZSBjYWxsIHNpdGUuCi0gKi8KLXN0YXRpYyB2b2lkIGRpc2FibGVfbWFya2VyKHN0cnVjdCBtYXJrZXIgKmVsZW0pCi17Ci0JaW50IHJldDsKLQotCS8qIGxlYXZlICJjYWxsIiBhcyBpcy4gSXQgaXMga25vd24gc3RhdGljYWxseS4gKi8KLQlpZiAoZWxlbS0+dHBfbmFtZSAmJiBlbGVtLT5zdGF0ZSkgewotCQlXQVJOX09OKCFlbGVtLT50cF9jYik7Ci0JCS8qCi0JCSAqIEl0IGlzIG9rIHRvIGRpcmVjdGx5IGNhbGwgdGhlIHByb2JlIHJlZ2lzdHJhdGlvbiBiZWNhdXNlIHR5cGUKLQkJICogY2hlY2tpbmcgaGFzIGJlZW4gZG9uZSBpbiB0aGUgX190cmFjZV9tYXJrX3RwKCkgbWFjcm8uCi0JCSAqLwotCQlyZXQgPSB0cmFjZXBvaW50X3Byb2JlX3VucmVnaXN0ZXJfbm91cGRhdGUoZWxlbS0+dHBfbmFtZSwKLQkJCWVsZW0tPnRwX2NiKTsKLQkJV0FSTl9PTihyZXQpOwotCQkvKgotCQkgKiB0cmFjZXBvaW50X3Byb2JlX3VwZGF0ZV9hbGwoKSBtdXN0IGJlIGNhbGxlZAotCQkgKiBiZWZvcmUgdGhlIG1vZHVsZSBjb250YWluaW5nIHRwX2NiIGlzIHVubG9hZGVkLgotCQkgKi8KLQkJbW9kdWxlX3B1dChfX21vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpZWxlbS0+dHBfY2IpKTsKLQl9Ci0JZWxlbS0+c3RhdGUgPSAwOwotCWVsZW0tPnNpbmdsZS5mdW5jID0gX19tYXJrX2VtcHR5X2Z1bmN0aW9uOwotCS8qIFVwZGF0ZSB0aGUgZnVuY3Rpb24gYmVmb3JlIHNldHRpbmcgdGhlIHB0eXBlICovCi0Jc21wX3dtYigpOwotCWVsZW0tPnB0eXBlID0gMDsJLyogc2luZ2xlIHByb2JlICovCi0JLyoKLQkgKiBMZWF2ZSB0aGUgcHJpdmF0ZSBkYXRhIGFuZCBpZCB0aGVyZSwgYmVjYXVzZSByZW1vdmFsIGlzIHJhY3kgYW5kCi0JICogc2hvdWxkIGJlIGRvbmUgb25seSBhZnRlciBhbiBSQ1UgcGVyaW9kLiBUaGVzZSBhcmUgbmV2ZXIgdXNlZCB1bnRpbAotCSAqIHRoZSBuZXh0IGluaXRpYWxpemF0aW9uIGFueXdheS4KLQkgKi8KLX0KLQotLyoqCi0gKiBtYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlIC0gVXBkYXRlIGEgcHJvYmUgcmFuZ2UKLSAqIEBiZWdpbjogYmVnaW5uaW5nIG9mIHRoZSByYW5nZQotICogQGVuZDogZW5kIG9mIHRoZSByYW5nZQotICoKLSAqIFVwZGF0ZXMgdGhlIHByb2JlIGNhbGxiYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSByYW5nZSBvZiBtYXJrZXJzLgotICovCi12b2lkIG1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IG1hcmtlciAqYmVnaW4sCi0Jc3RydWN0IG1hcmtlciAqZW5kKQotewotCXN0cnVjdCBtYXJrZXIgKml0ZXI7Ci0Jc3RydWN0IG1hcmtlcl9lbnRyeSAqbWFya19lbnRyeTsKLQotCW11dGV4X2xvY2soJm1hcmtlcnNfbXV0ZXgpOwotCWZvciAoaXRlciA9IGJlZ2luOyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKLQkJbWFya19lbnRyeSA9IGdldF9tYXJrZXIoaXRlci0+bmFtZSk7Ci0JCWlmIChtYXJrX2VudHJ5KSB7Ci0JCQlzZXRfbWFya2VyKG1hcmtfZW50cnksIGl0ZXIsICEhbWFya19lbnRyeS0+cmVmY291bnQpOwotCQkJLyoKLQkJCSAqIGlnbm9yZSBlcnJvciwgY29udGludWUKLQkJCSAqLwotCQl9IGVsc2UgewotCQkJZGlzYWJsZV9tYXJrZXIoaXRlcik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLX0KLQotLyoKLSAqIFVwZGF0ZSBwcm9iZXMsIHJlbW92aW5nIHRoZSBmYXVsdHkgcHJvYmVzLgotICoKLSAqIEludGVybmFsIGNhbGxiYWNrIG9ubHkgY2hhbmdlZCBiZWZvcmUgdGhlIGZpcnN0IHByb2JlIGlzIGNvbm5lY3RlZCB0byBpdC4KLSAqIFNpbmdsZSBwcm9iZSBwcml2YXRlIGRhdGEgY2FuIG9ubHkgYmUgY2hhbmdlZCBvbiAwIC0+IDEgYW5kIDIgLT4gMQotICogdHJhbnNpdGlvbnMuICBBbGwgb3RoZXIgdHJhbnNpdGlvbnMgd2lsbCBsZWF2ZSB0aGUgb2xkIHByaXZhdGUgZGF0YSB2YWxpZC4KLSAqIFRoaXMgbWFrZXMgdGhlIG5vbi1hdG9taWNpdHkgb2YgdGhlIGNhbGxiYWNrL3ByaXZhdGUgZGF0YSB1cGRhdGVzIHZhbGlkLgotICoKLSAqICJzcGVjaWFsIGNhc2UiIHVwZGF0ZXMgOgotICogMCAtPiAxIGNhbGxiYWNrCi0gKiAxIC0+IDAgY2FsbGJhY2sKLSAqIDEgLT4gMiBjYWxsYmFja3MKLSAqIDIgLT4gMSBjYWxsYmFja3MKLSAqIE90aGVyIHVwZGF0ZXMgYWxsIGJlaGF2ZSB0aGUgc2FtZSwganVzdCBsaWtlIHRoZSAyIC0+IDMgb3IgMyAtPiAyIHVwZGF0ZXMuCi0gKiBTaXRlIGVmZmVjdCA6IG1hcmtlcl9zZXRfZm9ybWF0IG1heSBkZWxldGUgdGhlIG1hcmtlciBlbnRyeSAoY3JlYXRpbmcgYQotICogcmVwbGFjZW1lbnQpLgotICovCi1zdGF0aWMgdm9pZCBtYXJrZXJfdXBkYXRlX3Byb2Jlcyh2b2lkKQotewotCS8qIENvcmUga2VybmVsIG1hcmtlcnMgKi8KLQltYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlKF9fc3RhcnRfX19tYXJrZXJzLCBfX3N0b3BfX19tYXJrZXJzKTsKLQkvKiBNYXJrZXJzIGluIG1vZHVsZXMuICovCi0JbW9kdWxlX3VwZGF0ZV9tYXJrZXJzKCk7Ci0JdHJhY2Vwb2ludF9wcm9iZV91cGRhdGVfYWxsKCk7Ci19Ci0KLS8qKgotICogbWFya2VyX3Byb2JlX3JlZ2lzdGVyIC0gIENvbm5lY3QgYSBwcm9iZSB0byBhIG1hcmtlcgotICogQG5hbWU6IG1hcmtlciBuYW1lCi0gKiBAZm9ybWF0OiBmb3JtYXQgc3RyaW5nCi0gKiBAcHJvYmU6IHByb2JlIGhhbmRsZXIKLSAqIEBwcm9iZV9wcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKLSAqCi0gKiBwcml2YXRlIGRhdGEgbXVzdCBiZSBhIHZhbGlkIGFsbG9jYXRlZCBtZW1vcnkgYWRkcmVzcywgb3IgTlVMTC4KLSAqIFJldHVybnMgMCBpZiBvaywgZXJyb3IgdmFsdWUgb24gZXJyb3IuCi0gKiBUaGUgcHJvYmUgYWRkcmVzcyBtdXN0IGF0IGxlYXN0IGJlIGFsaWduZWQgb24gdGhlIGFyY2hpdGVjdHVyZSBwb2ludGVyIHNpemUuCi0gKi8KLWludCBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LAotCQkJbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLCB2b2lkICpwcm9iZV9wcml2YXRlKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OwotCWludCByZXQgPSAwOwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqb2xkOwotCi0JbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7Ci0JZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwotCWlmICghZW50cnkpIHsKLQkJZW50cnkgPSBhZGRfbWFya2VyKG5hbWUsIGZvcm1hdCk7Ci0JCWlmIChJU19FUlIoZW50cnkpKQotCQkJcmV0ID0gUFRSX0VSUihlbnRyeSk7Ci0JfSBlbHNlIGlmIChmb3JtYXQpIHsKLQkJaWYgKCFlbnRyeS0+Zm9ybWF0KQotCQkJcmV0ID0gbWFya2VyX3NldF9mb3JtYXQoZW50cnksIGZvcm1hdCk7Ci0JCWVsc2UgaWYgKHN0cmNtcChlbnRyeS0+Zm9ybWF0LCBmb3JtYXQpKQotCQkJcmV0ID0gLUVQRVJNOwotCX0KLQlpZiAocmV0KQotCQlnb3RvIGVuZDsKLQotCS8qCi0JICogSWYgd2UgZGV0ZWN0IHRoYXQgYSBjYWxsX3JjdSBpcyBwZW5kaW5nIGZvciB0aGlzIG1hcmtlciwKLQkgKiBtYWtlIHN1cmUgaXQncyBleGVjdXRlZCBub3cuCi0JICovCi0JaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQlvbGQgPSBtYXJrZXJfZW50cnlfYWRkX3Byb2JlKGVudHJ5LCBwcm9iZSwgcHJvYmVfcHJpdmF0ZSk7Ci0JaWYgKElTX0VSUihvbGQpKSB7Ci0JCXJldCA9IFBUUl9FUlIob2xkKTsKLQkJZ290byBlbmQ7Ci0JfQotCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7Ci0JbWFya2VyX3VwZGF0ZV9wcm9iZXMoKTsKLQltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKLQllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7Ci0JaWYgKCFlbnRyeSkKLQkJZ290byBlbmQ7Ci0JaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQllbnRyeS0+b2xkcHRyID0gb2xkOwotCWVudHJ5LT5yY3VfcGVuZGluZyA9IDE7Ci0JLyogd3JpdGUgcmN1X3BlbmRpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIFJDVSBjYWxsYmFjayAqLwotCXNtcF93bWIoKTsKLQljYWxsX3JjdV9zY2hlZCgmZW50cnktPnJjdSwgZnJlZV9vbGRfY2xvc3VyZSk7Ci1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX3JlZ2lzdGVyKTsKLQotLyoqCi0gKiBtYXJrZXJfcHJvYmVfdW5yZWdpc3RlciAtICBEaXNjb25uZWN0IGEgcHJvYmUgZnJvbSBhIG1hcmtlcgotICogQG5hbWU6IG1hcmtlciBuYW1lCi0gKiBAcHJvYmU6IHByb2JlIGZ1bmN0aW9uIHBvaW50ZXIKLSAqIEBwcm9iZV9wcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKLSAqCi0gKiBSZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgZ2l2ZW4gdG8gbWFya2VyX3Byb2JlX3JlZ2lzdGVyLCBvciBhbiBFUlJfUFRSKCkuCi0gKiBXZSBkbyBub3QgbmVlZCB0byBjYWxsIGEgc3luY2hyb25pemVfc2NoZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm9iZXMgaGF2ZQotICogZmluaXNoZWQgcnVubmluZyBiZWZvcmUgZG9pbmcgYSBtb2R1bGUgdW5sb2FkLCBiZWNhdXNlIHRoZSBtb2R1bGUgdW5sb2FkCi0gKiBpdHNlbGYgdXNlcyBzdG9wX21hY2hpbmUoKSwgd2hpY2ggaW5zdXJlcyB0aGF0IGV2ZXJ5IHByZWVtcHQgZGlzYWJsZWQgc2VjdGlvbgotICogaGF2ZSBmaW5pc2hlZC4KLSAqLwotaW50IG1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCi0JbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLCB2b2lkICpwcm9iZV9wcml2YXRlKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqb2xkOwotCWludCByZXQgPSAtRU5PRU5UOwotCi0JbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7Ci0JZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwotCWlmICghZW50cnkpCi0JCWdvdG8gZW5kOwotCWlmIChlbnRyeS0+cmN1X3BlbmRpbmcpCi0JCXJjdV9iYXJyaWVyX3NjaGVkKCk7Ci0Jb2xkID0gbWFya2VyX2VudHJ5X3JlbW92ZV9wcm9iZShlbnRyeSwgcHJvYmUsIHByb2JlX3ByaXZhdGUpOwotCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7Ci0JbWFya2VyX3VwZGF0ZV9wcm9iZXMoKTsKLQltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKLQllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7Ci0JaWYgKCFlbnRyeSkKLQkJZ290byBlbmQ7Ci0JaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQllbnRyeS0+b2xkcHRyID0gb2xkOwotCWVudHJ5LT5yY3VfcGVuZGluZyA9IDE7Ci0JLyogd3JpdGUgcmN1X3BlbmRpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIFJDVSBjYWxsYmFjayAqLwotCXNtcF93bWIoKTsKLQljYWxsX3JjdV9zY2hlZCgmZW50cnktPnJjdSwgZnJlZV9vbGRfY2xvc3VyZSk7Ci0JcmVtb3ZlX21hcmtlcihuYW1lKTsJLyogSWdub3JlIGJ1c3kgZXJyb3IgbWVzc2FnZSAqLwotCXJldCA9IDA7Ci1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX3VucmVnaXN0ZXIpOwotCi1zdGF0aWMgc3RydWN0IG1hcmtlcl9lbnRyeSAqCi1nZXRfbWFya2VyX2Zyb21fcHJpdmF0ZV9kYXRhKG1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwgdm9pZCAqcHJvYmVfcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVJLRVJfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhlYWQgPSAmbWFya2VyX3RhYmxlW2ldOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJCWlmICghZW50cnktPnB0eXBlKSB7Ci0JCQkJaWYgKGVudHJ5LT5zaW5nbGUuZnVuYyA9PSBwcm9iZQotCQkJCQkJJiYgZW50cnktPnNpbmdsZS5wcm9iZV9wcml2YXRlCi0JCQkJCQk9PSBwcm9iZV9wcml2YXRlKQotCQkJCQlyZXR1cm4gZW50cnk7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqY2xvc3VyZTsKLQkJCQljbG9zdXJlID0gZW50cnktPm11bHRpOwotCQkJCWZvciAoaSA9IDA7IGNsb3N1cmVbaV0uZnVuYzsgaSsrKSB7Ci0JCQkJCWlmIChjbG9zdXJlW2ldLmZ1bmMgPT0gcHJvYmUgJiYKLQkJCQkJCQljbG9zdXJlW2ldLnByb2JlX3ByaXZhdGUKLQkJCQkJCQk9PSBwcm9iZV9wcml2YXRlKQotCQkJCQkJcmV0dXJuIGVudHJ5OwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBtYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcl9wcml2YXRlX2RhdGEgLSAgRGlzY29ubmVjdCBhIHByb2JlIGZyb20gYSBtYXJrZXIKLSAqIEBwcm9iZTogcHJvYmUgZnVuY3Rpb24KLSAqIEBwcm9iZV9wcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKLSAqCi0gKiBVbnJlZ2lzdGVyIGEgcHJvYmUgYnkgcHJvdmlkaW5nIHRoZSByZWdpc3RlcmVkIHByaXZhdGUgZGF0YS4KLSAqIE9ubHkgcmVtb3ZlcyB0aGUgZmlyc3QgbWFya2VyIGZvdW5kIGluIGhhc2ggdGFibGUuCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlLgotICogV2UgZG8gbm90IG5lZWQgdG8gY2FsbCBhIHN5bmNocm9uaXplX3NjaGVkIHRvIG1ha2Ugc3VyZSB0aGUgcHJvYmVzIGhhdmUKLSAqIGZpbmlzaGVkIHJ1bm5pbmcgYmVmb3JlIGRvaW5nIGEgbW9kdWxlIHVubG9hZCwgYmVjYXVzZSB0aGUgbW9kdWxlIHVubG9hZAotICogaXRzZWxmIHVzZXMgc3RvcF9tYWNoaW5lKCksIHdoaWNoIGluc3VyZXMgdGhhdCBldmVyeSBwcmVlbXB0IGRpc2FibGVkIHNlY3Rpb24KLSAqIGhhdmUgZmluaXNoZWQuCi0gKi8KLWludCBtYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcl9wcml2YXRlX2RhdGEobWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLAotCQl2b2lkICpwcm9iZV9wcml2YXRlKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OwotCWludCByZXQgPSAwOwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqb2xkOwotCi0JbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7Ci0JZW50cnkgPSBnZXRfbWFya2VyX2Zyb21fcHJpdmF0ZV9kYXRhKHByb2JlLCBwcm9iZV9wcml2YXRlKTsKLQlpZiAoIWVudHJ5KSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZW5kOwotCX0KLQlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQotCQlyY3VfYmFycmllcl9zY2hlZCgpOwotCW9sZCA9IG1hcmtlcl9lbnRyeV9yZW1vdmVfcHJvYmUoZW50cnksIE5VTEwsIHByb2JlX3ByaXZhdGUpOwotCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7Ci0JbWFya2VyX3VwZGF0ZV9wcm9iZXMoKTsKLQltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKLQllbnRyeSA9IGdldF9tYXJrZXJfZnJvbV9wcml2YXRlX2RhdGEocHJvYmUsIHByb2JlX3ByaXZhdGUpOwotCWlmICghZW50cnkpCi0JCWdvdG8gZW5kOwotCWlmIChlbnRyeS0+cmN1X3BlbmRpbmcpCi0JCXJjdV9iYXJyaWVyX3NjaGVkKCk7Ci0JZW50cnktPm9sZHB0ciA9IG9sZDsKLQllbnRyeS0+cmN1X3BlbmRpbmcgPSAxOwotCS8qIHdyaXRlIHJjdV9wZW5kaW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBSQ1UgY2FsbGJhY2sgKi8KLQlzbXBfd21iKCk7Ci0JY2FsbF9yY3Vfc2NoZWQoJmVudHJ5LT5yY3UsIGZyZWVfb2xkX2Nsb3N1cmUpOwotCXJlbW92ZV9tYXJrZXIoZW50cnktPm5hbWUpOwkvKiBJZ25vcmUgYnVzeSBlcnJvciBtZXNzYWdlICovCi1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX3VucmVnaXN0ZXJfcHJpdmF0ZV9kYXRhKTsKLQotLyoqCi0gKiBtYXJrZXJfZ2V0X3ByaXZhdGVfZGF0YSAtIEdldCBhIG1hcmtlcidzIHByb2JlIHByaXZhdGUgZGF0YQotICogQG5hbWU6IG1hcmtlciBuYW1lCi0gKiBAcHJvYmU6IHByb2JlIHRvIG1hdGNoCi0gKiBAbnVtOiBnZXQgdGhlIG50aCBtYXRjaGluZyBwcm9iZSdzIHByaXZhdGUgZGF0YQotICoKLSAqIFJldHVybnMgdGhlIG50aCBwcml2YXRlIGRhdGEgcG9pbnRlciAoc3RhcnRpbmcgZnJvbSAwKSBtYXRjaGluZywgb3IgYW4KLSAqIEVSUl9QVFIuCi0gKiBSZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciwgb3IgYW4gRVJSX1BUUi4KLSAqIFRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzaG91bGQgX29ubHlfIGJlIGRlcmVmZXJlbmNlZCBpZiB0aGUgY2FsbGVyIGlzIHRoZQotICogb3duZXIgb2YgdGhlIGRhdGEsIG9yIGl0cyBjb250ZW50IGNvdWxkIHZhbmlzaC4gVGhpcyBpcyBtb3N0bHkgdXNlZCB0bwotICogY29uZmlybSB0aGF0IGEgY2FsbGVyIGlzIHRoZSBvd25lciBvZiBhIHJlZ2lzdGVyZWQgcHJvYmUuCi0gKi8KLXZvaWQgKm1hcmtlcl9nZXRfcHJpdmF0ZV9kYXRhKGNvbnN0IGNoYXIgKm5hbWUsIG1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwKLQkJaW50IG51bSkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplOwotCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBuYW1lX2xlbi0xLCAwKTsKLQlpbnQgaTsKLQotCWhlYWQgPSAmbWFya2VyX3RhYmxlW2hhc2ggJiAoKDEgPDwgTUFSS0VSX0hBU0hfQklUUyktMSldOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsIGhlYWQsIGhsaXN0KSB7Ci0JCWlmICghc3RyY21wKG5hbWUsIGUtPm5hbWUpKSB7Ci0JCQlpZiAoIWUtPnB0eXBlKSB7Ci0JCQkJaWYgKG51bSA9PSAwICYmIGUtPnNpbmdsZS5mdW5jID09IHByb2JlKQotCQkJCQlyZXR1cm4gZS0+c2luZ2xlLnByb2JlX3ByaXZhdGU7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqY2xvc3VyZTsKLQkJCQlpbnQgbWF0Y2ggPSAwOwotCQkJCWNsb3N1cmUgPSBlLT5tdWx0aTsKLQkJCQlmb3IgKGkgPSAwOyBjbG9zdXJlW2ldLmZ1bmM7IGkrKykgewotCQkJCQlpZiAoY2xvc3VyZVtpXS5mdW5jICE9IHByb2JlKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWlmIChtYXRjaCsrID09IG51bSkKLQkJCQkJCXJldHVybiBjbG9zdXJlW2ldLnByb2JlX3ByaXZhdGU7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfZ2V0X3ByaXZhdGVfZGF0YSk7Ci0KLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCi1pbnQgbWFya2VyX21vZHVsZV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAotCQkJIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGRhdGE7Ci0KLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgTU9EVUxFX1NUQVRFX0NPTUlORzoKLQkJbWFya2VyX3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPm1hcmtlcnMsCi0JCQltb2QtPm1hcmtlcnMgKyBtb2QtPm51bV9tYXJrZXJzKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RVTEVfU1RBVEVfR09JTkc6Ci0JCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAotCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2Vycyk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1hcmtlcl9tb2R1bGVfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBtYXJrZXJfbW9kdWxlX25vdGlmeSwKLQkucHJpb3JpdHkgPSAwLAotfTsKLQotc3RhdGljIGludCBpbml0X21hcmtlcnModm9pZCkKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKCZtYXJrZXJfbW9kdWxlX25iKTsKLX0KLV9faW5pdGNhbGwoaW5pdF9tYXJrZXJzKTsKLQotI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMDVjZTQ5Yy4uZTZiYzRiMiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGljZW5zZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KQEAgLTE1MzUsNiArMTUzNiwxMCBAQAogCiAJLyogRmluYWxseSwgZnJlZSB0aGUgY29yZSAoY29udGFpbmluZyB0aGUgbW9kdWxlIHN0cnVjdHVyZSkgKi8KIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCisjaWZkZWYgQ09ORklHX01QVQorCXVwZGF0ZV9wcm90ZWN0aW9ucyhjdXJyZW50LT5tbSk7CisjZW5kaWYKIH0KIAogdm9pZCAqX19zeW1ib2xfZ2V0KGNvbnN0IGNoYXIgKnN5bWJvbCkKQEAgLTIyMzcsMTAgKzIyNDIsNiBAQAogCQkJCSAgc2l6ZW9mKCptb2QtPmN0b3JzKSwgJm1vZC0+bnVtX2N0b3JzKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BUktFUlMKLQltb2QtPm1hcmtlcnMgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19tYXJrZXJzIiwKLQkJCQkgICAgc2l6ZW9mKCptb2QtPm1hcmtlcnMpLCAmbW9kLT5udW1fbWFya2Vycyk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKIAltb2QtPnRyYWNlcG9pbnRzID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKIAkJCQkJIl9fdHJhY2Vwb2ludHMiLApAQCAtMjk1OCwyMCArMjk1OSw2IEBACiBFWFBPUlRfU1lNQk9MKG1vZHVsZV9sYXlvdXQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTUFSS0VSUwotdm9pZCBtb2R1bGVfdXBkYXRlX21hcmtlcnModm9pZCkKLXsKLQlzdHJ1Y3QgbW9kdWxlICptb2Q7Ci0KLQltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkKLQkJaWYgKCFtb2QtPnRhaW50cykKLQkJCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAotCQkJCW1vZC0+bWFya2VycyArIG1vZC0+bnVtX21hcmtlcnMpOwotCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiB2b2lkIG1vZHVsZV91cGRhdGVfdHJhY2Vwb2ludHModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggNTEyYWI3My4uYmNkZWYyNiAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICogICdXJyAtIFRhaW50IG9uIHdhcm5pbmcuCiAgKiAgJ0MnIC0gbW9kdWxlcyBmcm9tIGRyaXZlcnMvc3RhZ2luZyBhcmUgbG9hZGVkLgogICoKLSAqCVRoZSBzdHJpbmcgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgY2FsbCB0byBwcmludF90YWludCgpLgorICoJVGhlIHN0cmluZyBpcyBvdmVyd3JpdHRlbiBieSB0aGUgbmV4dCBjYWxsIHRvIHByaW50X3RhaW50ZWQoKS4KICAqLwogY29uc3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfY291bnRlci5jIGIva2VybmVsL3BlcmZfY291bnRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2I5NGE1Li4wMDAwMDAwCi0tLSBhL2tlcm5lbC9wZXJmX2NvdW50ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5NjMgKzAsMCBAQAotLyoKLSAqIFBlcmZvcm1hbmNlIGNvdW50ZXIgY29yZSBjb2RlCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgotICogIENvcHlyaWdodCAgqSAgMjAwOSBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnAuIDxwYXVsdXNAYXUxLmlibS5jb20+Ci0gKgotICogIEZvciBsaWNlbnNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgotCi0jaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+Ci0KLS8qCi0gKiBFYWNoIENQVSBoYXMgYSBsaXN0IG9mIHBlciBDUFUgY291bnRlcnM6Ci0gKi8KLURFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0LCBwZXJmX2NwdV9jb250ZXh0KTsKLQotaW50IHBlcmZfbWF4X2NvdW50ZXJzIF9fcmVhZF9tb3N0bHkgPSAxOwotc3RhdGljIGludCBwZXJmX3Jlc2VydmVkX3BlcmNwdSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGludCBwZXJmX292ZXJjb21taXQgX19yZWFkX21vc3RseSA9IDE7Ci0KLXN0YXRpYyBhdG9taWNfdCBucl9jb3VudGVycyBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGF0b21pY190IG5yX21tYXBfY291bnRlcnMgX19yZWFkX21vc3RseTsKLXN0YXRpYyBhdG9taWNfdCBucl9jb21tX2NvdW50ZXJzIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgYXRvbWljX3QgbnJfdGFza19jb3VudGVycyBfX3JlYWRfbW9zdGx5OwotCi0vKgotICogcGVyZiBjb3VudGVyIHBhcmFub2lhIGxldmVsOgotICogIC0xIC0gbm90IHBhcmFub2lkIGF0IGFsbAotICogICAwIC0gZGlzYWxsb3cgcmF3IHRyYWNlcG9pbnQgYWNjZXNzIGZvciB1bnByaXYKLSAqICAgMSAtIGRpc2FsbG93IGNwdSBjb3VudGVycyBmb3IgdW5wcml2Ci0gKiAgIDIgLSBkaXNhbGxvdyBrZXJuZWwgcHJvZmlsaW5nIGZvciB1bnByaXYKLSAqLwotaW50IHN5c2N0bF9wZXJmX2NvdW50ZXJfcGFyYW5vaWQgX19yZWFkX21vc3RseSA9IDE7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJmX3BhcmFub2lkX3RyYWNlcG9pbnRfcmF3KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2N0bF9wZXJmX2NvdW50ZXJfcGFyYW5vaWQgPiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHBlcmZfcGFyYW5vaWRfY3B1KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2N0bF9wZXJmX2NvdW50ZXJfcGFyYW5vaWQgPiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF9rZXJuZWwodm9pZCkKLXsKLQlyZXR1cm4gc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCA+IDE7Ci19Ci0KLWludCBzeXNjdGxfcGVyZl9jb3VudGVyX21sb2NrIF9fcmVhZF9tb3N0bHkgPSA1MTI7IC8qICdmcmVlJyBrYiBwZXIgdXNlciAqLwotCi0vKgotICogbWF4IHBlcmYgY291bnRlciBzYW1wbGUgcmF0ZQotICovCi1pbnQgc3lzY3RsX3BlcmZfY291bnRlcl9zYW1wbGVfcmF0ZSBfX3JlYWRfbW9zdGx5ID0gMTAwMDAwOwotCi1zdGF0aWMgYXRvbWljNjRfdCBwZXJmX2NvdW50ZXJfaWQ7Ci0KLS8qCi0gKiBMb2NrIGZvciAoc3lzYWRtaW4tY29uZmlndXJhYmxlKSBjb3VudGVyIHJlc2VydmF0aW9uczoKLSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhwZXJmX3Jlc291cmNlX2xvY2spOwotCi0vKgotICogQXJjaGl0ZWN0dXJlIHByb3ZpZGVkIEFQSXMgLSB3ZWFrIGFsaWFzZXM6Ci0gKi8KLWV4dGVybiBfX3dlYWsgY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBfX3dlYWsgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCQl7IGJhcnJpZXIoKTsgfQotdm9pZCBfX3dlYWsgaHdfcGVyZl9lbmFibGUodm9pZCkJCXsgYmFycmllcigpOyB9Ci0KLXZvaWQgX193ZWFrIGh3X3BlcmZfY291bnRlcl9zZXR1cChpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQotdm9pZCBfX3dlYWsgaHdfcGVyZl9jb3VudGVyX3NldHVwX29ubGluZShpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQotCi1pbnQgX193ZWFrCi1od19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwX2xlYWRlciwKLQkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsIGludCBjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX193ZWFrIHBlcmZfY291bnRlcl9wcmludF9kZWJ1Zyh2b2lkKQl7IH0KLQotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcGVyZl9kaXNhYmxlX2NvdW50KTsKLQotdm9pZCBfX3BlcmZfZGlzYWJsZSh2b2lkKQotewotCV9fZ2V0X2NwdV92YXIocGVyZl9kaXNhYmxlX2NvdW50KSsrOwotfQotCi1ib29sIF9fcGVyZl9lbmFibGUodm9pZCkKLXsKLQlyZXR1cm4gIS0tX19nZXRfY3B1X3ZhcihwZXJmX2Rpc2FibGVfY291bnQpOwotfQotCi12b2lkIHBlcmZfZGlzYWJsZSh2b2lkKQotewotCV9fcGVyZl9kaXNhYmxlKCk7Ci0JaHdfcGVyZl9kaXNhYmxlKCk7Ci19Ci0KLXZvaWQgcGVyZl9lbmFibGUodm9pZCkKLXsKLQlpZiAoX19wZXJmX2VuYWJsZSgpKQotCQlod19wZXJmX2VuYWJsZSgpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCVdBUk5fT04oIWF0b21pY19pbmNfbm90X3plcm8oJmN0eC0+cmVmY291bnQpKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9jdHgoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4OwotCi0JY3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCwgcmN1X2hlYWQpOwotCWtmcmVlKGN0eCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dF9jdHgoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmY291bnQpKSB7Ci0JCWlmIChjdHgtPnBhcmVudF9jdHgpCi0JCQlwdXRfY3R4KGN0eC0+cGFyZW50X2N0eCk7Ci0JCWlmIChjdHgtPnRhc2spCi0JCQlwdXRfdGFza19zdHJ1Y3QoY3R4LT50YXNrKTsKLQkJY2FsbF9yY3UoJmN0eC0+cmN1X2hlYWQsIGZyZWVfY3R4KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHVuY2xvbmVfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCWlmIChjdHgtPnBhcmVudF9jdHgpIHsKLQkJcHV0X2N0eChjdHgtPnBhcmVudF9jdHgpOwotCQljdHgtPnBhcmVudF9jdHggPSBOVUxMOwotCX0KLX0KLQotLyoKLSAqIElmIHdlIGluaGVyaXQgY291bnRlcnMgd2Ugd2FudCB0byByZXR1cm4gdGhlIHBhcmVudCBjb3VudGVyIGlkCi0gKiB0byB1c2Vyc3BhY2UuCi0gKi8KLXN0YXRpYyB1NjQgcHJpbWFyeV9jb3VudGVyX2lkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JdTY0IGlkID0gY291bnRlci0+aWQ7Ci0KLQlpZiAoY291bnRlci0+cGFyZW50KQotCQlpZCA9IGNvdW50ZXItPnBhcmVudC0+aWQ7Ci0KLQlyZXR1cm4gaWQ7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIHBlcmZfY291bnRlcl9jb250ZXh0IGZvciBhIHRhc2sgYW5kIGxvY2sgaXQuCi0gKiBUaGlzIGhhcyB0byBjb3BlIHdpdGggd2l0aCB0aGUgZmFjdCB0aGF0IHVudGlsIGl0IGlzIGxvY2tlZCwKLSAqIHRoZSBjb250ZXh0IGNvdWxkIGdldCBtb3ZlZCB0byBhbm90aGVyIHRhc2suCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKgotcGVyZl9sb2NrX3Rhc2tfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4OwotCi0JcmN1X3JlYWRfbG9jaygpOwotIHJldHJ5OgotCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5wZXJmX2NvdW50ZXJfY3R4cCk7Ci0JaWYgKGN0eCkgewotCQkvKgotCQkgKiBJZiB0aGlzIGNvbnRleHQgaXMgYSBjbG9uZSBvZiBhbm90aGVyLCBpdCBtaWdodAotCQkgKiBnZXQgc3dhcHBlZCBmb3IgYW5vdGhlciB1bmRlcm5lYXRoIHVzIGJ5Ci0JCSAqIHBlcmZfY291bnRlcl90YXNrX3NjaGVkX291dCwgdGhvdWdoIHRoZQotCQkgKiByY3VfcmVhZF9sb2NrKCkgcHJvdGVjdHMgdXMgZnJvbSBhbnkgY29udGV4dAotCQkgKiBnZXR0aW5nIGZyZWVkLiAgTG9jayB0aGUgY29udGV4dCBhbmQgY2hlY2sgaWYgaXQKLQkJICogZ290IHN3YXBwZWQgYmVmb3JlIHdlIGNvdWxkIGdldCB0aGUgbG9jaywgYW5kIHJldHJ5Ci0JCSAqIGlmIHNvLiAgSWYgd2UgbG9ja2VkIHRoZSByaWdodCBjb250ZXh0LCB0aGVuIGl0Ci0JCSAqIGNhbid0IGdldCBzd2FwcGVkIG9uIHVzIGFueSBtb3JlLgotCQkgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgKmZsYWdzKTsKLQkJaWYgKGN0eCAhPSByY3VfZGVyZWZlcmVuY2UodGFzay0+cGVyZl9jb3VudGVyX2N0eHApKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssICpmbGFncyk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0KLQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdHgtPnJlZmNvdW50KSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOwotCQkJY3R4ID0gTlVMTDsKLQkJfQotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gY3R4OwotfQotCi0vKgotICogR2V0IHRoZSBjb250ZXh0IGZvciBhIHRhc2sgYW5kIGluY3JlbWVudCBpdHMgcGluX2NvdW50IHNvIGl0Ci0gKiBjYW4ndCBnZXQgc3dhcHBlZCB0byBhbm90aGVyIHRhc2suICBUaGlzIGFsc28gaW5jcmVtZW50cyBpdHMKLSAqIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IHRoZSBjb250ZXh0IGNhbid0IGdldCBmcmVlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqcGVyZl9waW5fdGFza19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JY3R4ID0gcGVyZl9sb2NrX3Rhc2tfY29udGV4dCh0YXNrLCAmZmxhZ3MpOwotCWlmIChjdHgpIHsKLQkJKytjdHgtPnBpbl9jb3VudDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiBjdHg7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfdW5waW5fY29udGV4dChzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOwotCS0tY3R4LT5waW5fY291bnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7Ci0JcHV0X2N0eChjdHgpOwotfQotCi0vKgotICogQWRkIGEgY291bnRlciBmcm9tIHRoZSBsaXN0cyBmb3IgaXRzIGNvbnRleHQuCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGN0eC0+bXV0ZXggYW5kIGN0eC0+bG9jayBoZWxkLgotICovCi1zdGF0aWMgdm9pZAotbGlzdF9hZGRfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cF9sZWFkZXIgPSBjb3VudGVyLT5ncm91cF9sZWFkZXI7Ci0KLQkvKgotCSAqIERlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGEgc3RhbmRhbG9uZSBvciBzaWJsaW5nIGNvdW50ZXIsCi0JICogYWRkIGl0IHN0cmFpZ2h0IHRvIHRoZSBjb250ZXh0J3MgY291bnRlciBsaXN0LCBvciB0byB0aGUgZ3JvdXAKLQkgKiBsZWFkZXIncyBzaWJsaW5nIGxpc3Q6Ci0JICovCi0JaWYgKGdyb3VwX2xlYWRlciA9PSBjb3VudGVyKQotCQlsaXN0X2FkZF90YWlsKCZjb3VudGVyLT5saXN0X2VudHJ5LCAmY3R4LT5jb3VudGVyX2xpc3QpOwotCWVsc2UgewotCQlsaXN0X2FkZF90YWlsKCZjb3VudGVyLT5saXN0X2VudHJ5LCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QpOwotCQlncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzKys7Ci0JfQotCi0JbGlzdF9hZGRfcmN1KCZjb3VudGVyLT5ldmVudF9lbnRyeSwgJmN0eC0+ZXZlbnRfbGlzdCk7Ci0JY3R4LT5ucl9jb3VudGVycysrOwotCWlmIChjb3VudGVyLT5hdHRyLmluaGVyaXRfc3RhdCkKLQkJY3R4LT5ucl9zdGF0Kys7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSBjb3VudGVyIGZyb20gdGhlIGxpc3RzIGZvciBpdHMgY29udGV4dC4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBhbmQgY3R4LT5sb2NrIGhlbGQuCi0gKi8KLXN0YXRpYyB2b2lkCi1saXN0X2RlbF9jb3VudGVyKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKnNpYmxpbmcsICp0bXA7Ci0KLQlpZiAobGlzdF9lbXB0eSgmY291bnRlci0+bGlzdF9lbnRyeSkpCi0JCXJldHVybjsKLQljdHgtPm5yX2NvdW50ZXJzLS07Ci0JaWYgKGNvdW50ZXItPmF0dHIuaW5oZXJpdF9zdGF0KQotCQljdHgtPm5yX3N0YXQtLTsKLQotCWxpc3RfZGVsX2luaXQoJmNvdW50ZXItPmxpc3RfZW50cnkpOwotCWxpc3RfZGVsX3JjdSgmY291bnRlci0+ZXZlbnRfZW50cnkpOwotCi0JaWYgKGNvdW50ZXItPmdyb3VwX2xlYWRlciAhPSBjb3VudGVyKQotCQljb3VudGVyLT5ncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzLS07Ci0KLQkvKgotCSAqIElmIHRoaXMgd2FzIGEgZ3JvdXAgY291bnRlciB3aXRoIHNpYmxpbmcgY291bnRlcnMgdGhlbgotCSAqIHVwZ3JhZGUgdGhlIHNpYmxpbmdzIHRvIHNpbmdsZXRvbiBjb3VudGVycyBieSBhZGRpbmcgdGhlbQotCSAqIHRvIHRoZSBjb250ZXh0IGxpc3QgZGlyZWN0bHk6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIHRtcCwKLQkJCQkgJmNvdW50ZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkgewotCi0JCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5saXN0X2VudHJ5LCAmY3R4LT5jb3VudGVyX2xpc3QpOwotCQlzaWJsaW5nLT5ncm91cF9sZWFkZXIgPSBzaWJsaW5nOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWNvdW50ZXJfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCSAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJICBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQlpZiAoY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRSkKLQkJcmV0dXJuOwotCi0JY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkU7Ci0JaWYgKGNvdW50ZXItPnBlbmRpbmdfZGlzYWJsZSkgewotCQljb3VudGVyLT5wZW5kaW5nX2Rpc2FibGUgPSAwOwotCQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9PRkY7Ci0JfQotCWNvdW50ZXItPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOwotCWNvdW50ZXItPnBtdS0+ZGlzYWJsZShjb3VudGVyKTsKLQljb3VudGVyLT5vbmNwdSA9IC0xOwotCi0JaWYgKCFpc19zb2Z0d2FyZV9jb3VudGVyKGNvdW50ZXIpKQotCQljcHVjdHgtPmFjdGl2ZV9vbmNwdS0tOwotCWN0eC0+bnJfYWN0aXZlLS07Ci0JaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVzaXZlIHx8ICFjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKLQkJY3B1Y3R4LT5leGNsdXNpdmUgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3JvdXBfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwX2NvdW50ZXIsCi0JCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQlpZiAoZ3JvdXBfY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRSkKLQkJcmV0dXJuOwotCi0JY291bnRlcl9zY2hlZF9vdXQoZ3JvdXBfY291bnRlciwgY3B1Y3R4LCBjdHgpOwotCi0JLyoKLQkgKiBTY2hlZHVsZSBvdXQgc2libGluZ3MgKGlmIGFueSk6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZ3JvdXBfY291bnRlci0+c2libGluZ19saXN0LCBsaXN0X2VudHJ5KQotCQljb3VudGVyX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0KLQlpZiAoZ3JvdXBfY291bnRlci0+YXR0ci5leGNsdXNpdmUpCi0JCWNwdWN0eC0+ZXhjbHVzaXZlID0gMDsKLX0KLQotLyoKLSAqIENyb3NzIENQVSBjYWxsIHRvIHJlbW92ZSBhIHBlcmZvcm1hbmNlIGNvdW50ZXIKLSAqCi0gKiBXZSBkaXNhYmxlIHRoZSBjb3VudGVyIG9uIHRoZSBoYXJkd2FyZSBsZXZlbCBmaXJzdC4gQWZ0ZXIgdGhhdCB3ZQotICogcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfcmVtb3ZlX2Zyb21fY29udGV4dCh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gaW5mbzsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHRhc2sgY29udGV4dCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzCi0JICogdGhlIGN1cnJlbnQgdGFzayBjb250ZXh0IG9mIHRoaXMgY3B1LiBJZiBub3QgaXQgaGFzIGJlZW4KLQkgKiBzY2hlZHVsZWQgb3V0IGJlZm9yZSB0aGUgc21wIGNhbGwgYXJyaXZlZC4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBQcm90ZWN0IHRoZSBsaXN0IG9wZXJhdGlvbiBhZ2FpbnN0IE5NSSBieSBkaXNhYmxpbmcgdGhlCi0JICogY291bnRlcnMgb24gYSBnbG9iYWwgbGV2ZWwuCi0JICovCi0JcGVyZl9kaXNhYmxlKCk7Ci0KLQljb3VudGVyX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0KLQlsaXN0X2RlbF9jb3VudGVyKGNvdW50ZXIsIGN0eCk7Ci0KLQlpZiAoIWN0eC0+dGFzaykgewotCQkvKgotCQkgKiBBbGxvdyBtb3JlIHBlciB0YXNrIGNvdW50ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUKLQkJICogcmVzZXJ2YXRpb246Ci0JCSAqLwotCQljcHVjdHgtPm1heF9wZXJ0YXNrID0KLQkJCW1pbihwZXJmX21heF9jb3VudGVycyAtIGN0eC0+bnJfY291bnRlcnMsCi0JCQkgICAgcGVyZl9tYXhfY291bnRlcnMgLSBwZXJmX3Jlc2VydmVkX3BlcmNwdSk7Ci0JfQotCi0JcGVyZl9lbmFibGUoKTsKLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLX0KLQotCi0vKgotICogUmVtb3ZlIHRoZSBjb3VudGVyIGZyb20gYSB0YXNrJ3MgKG9yIGEgQ1BVJ3MpIGxpc3Qgb2YgY291bnRlcnMuCi0gKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGhlbGQuCi0gKgotICogQ1BVIGNvdW50ZXJzIGFyZSByZW1vdmVkIHdpdGggYSBzbXAgY2FsbC4gRm9yIHRhc2sgY291bnRlcnMgd2Ugb25seQotICogY2FsbCB3aGVuIHRoZSB0YXNrIGlzIG9uIGEgQ1BVLgotICoKLSAqIElmIGNvdW50ZXItPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKLSAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgY291bnRlci0+Y3R4LT50YXNrIGNvdWxkIHBvc3NpYmx5IHBvaW50IHRvCi0gKiByZW1haW5zIHZhbGlkLiAgVGhpcyBpcyBPSyB3aGVuIGNhbGxlZCBmcm9tIHBlcmZfcmVsZWFzZSBzaW5jZQotICogdGhhdCBvbmx5IGNhbGxzIHVzIG9uIHRoZSB0b3AtbGV2ZWwgY29udGV4dCwgd2hpY2ggY2FuJ3QgYmUgYSBjbG9uZS4KLSAqIFdoZW4gY2FsbGVkIGZyb20gcGVyZl9jb3VudGVyX2V4aXRfdGFzaywgaXQncyBPSyBiZWNhdXNlIHRoZQotICogY29udGV4dCBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIGl0cyB0YXNrLgotICovCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfcmVtb3ZlX2Zyb21fY29udGV4dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gY291bnRlci0+Y3R4OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN0eC0+dGFzazsKLQotCWlmICghdGFzaykgewotCQkvKgotCQkgKiBQZXIgY3B1IGNvdW50ZXJzIGFyZSByZW1vdmVkIHZpYSBhbiBzbXAgY2FsbCBhbmQKLQkJICogdGhlIHJlbW92YWwgaXMgYWx3YXlzIHN1Y2Vzc2Z1bC4KLQkJICovCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjb3VudGVyLT5jcHUsCi0JCQkJCSBfX3BlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0LAotCQkJCQkgY291bnRlciwgMSk7Ci0JCXJldHVybjsKLQl9Ci0KLXJldHJ5OgotCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0LAotCQkJCSBjb3VudGVyKTsKLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBJZiB0aGUgY29udGV4dCBpcyBhY3RpdmUgd2UgbmVlZCB0byByZXRyeSB0aGUgc21wIGNhbGwuCi0JICovCi0JaWYgKGN0eC0+bnJfYWN0aXZlICYmICFsaXN0X2VtcHR5KCZjb3VudGVyLT5saXN0X2VudHJ5KSkgewotCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCi0JLyoKLQkgKiBUaGUgbG9jayBwcmV2ZW50cyB0aGF0IHRoaXMgY29udGV4dCBpcyBzY2hlZHVsZWQgaW4gc28gd2UKLQkgKiBjYW4gcmVtb3ZlIHRoZSBjb3VudGVyIHNhZmVseSwgaWYgdGhlIGNhbGwgYWJvdmUgZGlkIG5vdAotCSAqIHN1Y2NlZWQuCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZjb3VudGVyLT5saXN0X2VudHJ5KSkgewotCQlsaXN0X2RlbF9jb3VudGVyKGNvdW50ZXIsIGN0eCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgcGVyZl9jbG9jayh2b2lkKQotewotCXJldHVybiBjcHVfY2xvY2soc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLX0KLQotLyoKLSAqIFVwZGF0ZSB0aGUgcmVjb3JkIG9mIHRoZSBjdXJyZW50IHRpbWUgaW4gYSBjb250ZXh0LgotICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfY29udGV4dF90aW1lKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7Ci0KLQljdHgtPnRpbWUgKz0gbm93IC0gY3R4LT50aW1lc3RhbXA7Ci0JY3R4LT50aW1lc3RhbXAgPSBub3c7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgdGhlIHRvdGFsX3RpbWVfZW5hYmxlZCBhbmQgdG90YWxfdGltZV9ydW5uaW5nIGZpZWxkcyBmb3IgYSBjb3VudGVyLgotICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfY291bnRlcl90aW1lcyhzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gY291bnRlci0+Y3R4OwotCXU2NCBydW5fZW5kOwotCi0JaWYgKGNvdW50ZXItPnN0YXRlIDwgUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFIHx8Ci0JICAgIGNvdW50ZXItPmdyb3VwX2xlYWRlci0+c3RhdGUgPCBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpCi0JCXJldHVybjsKLQotCWNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCA9IGN0eC0+dGltZSAtIGNvdW50ZXItPnRzdGFtcF9lbmFibGVkOwotCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKLQkJcnVuX2VuZCA9IGNvdW50ZXItPnRzdGFtcF9zdG9wcGVkOwotCWVsc2UKLQkJcnVuX2VuZCA9IGN0eC0+dGltZTsKLQotCWNvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZyA9IHJ1bl9lbmQgLSBjb3VudGVyLT50c3RhbXBfcnVubmluZzsKLX0KLQotLyoKLSAqIFVwZGF0ZSB0b3RhbF90aW1lX2VuYWJsZWQgYW5kIHRvdGFsX3RpbWVfcnVubmluZyBmb3IgYWxsIGNvdW50ZXJzIGluIGEgZ3JvdXAuCi0gKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF90aW1lcyhzdHJ1Y3QgcGVyZl9jb3VudGVyICpsZWFkZXIpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQotCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGxlYWRlcik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpCi0JCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNvdW50ZXIpOwotfQotCi0vKgotICogQ3Jvc3MgQ1BVIGNhbGwgdG8gZGlzYWJsZSBhIHBlcmZvcm1hbmNlIGNvdW50ZXIKLSAqLwotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfZGlzYWJsZSh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBpbmZvOwotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGNvdW50ZXIsIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzCi0JICogY291bnRlcidzIHRhc2sgaXMgdGhlIGN1cnJlbnQgdGFzayBvbiB0aGlzIGNwdS4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0KLQkvKgotCSAqIElmIHRoZSBjb3VudGVyIGlzIG9uLCB0dXJuIGl0IG9mZi4KLQkgKiBJZiBpdCBpcyBpbiBlcnJvciBzdGF0ZSwgbGVhdmUgaXQgaW4gZXJyb3Igc3RhdGUuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkgewotCQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7Ci0JCXVwZGF0ZV9ncm91cF90aW1lcyhjb3VudGVyKTsKLQkJaWYgKGNvdW50ZXIgPT0gY291bnRlci0+Z3JvdXBfbGVhZGVyKQotCQkJZ3JvdXBfc2NoZWRfb3V0KGNvdW50ZXIsIGNwdWN0eCwgY3R4KTsKLQkJZWxzZQotCQkJY291bnRlcl9zY2hlZF9vdXQoY291bnRlciwgY3B1Y3R4LCBjdHgpOwotCQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9PRkY7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBEaXNhYmxlIGEgY291bnRlci4KLSAqCi0gKiBJZiBjb3VudGVyLT5jdHggaXMgYSBjbG9uZWQgY29udGV4dCwgY2FsbGVycyBtdXN0IG1ha2Ugc3VyZSB0aGF0Ci0gKiBldmVyeSB0YXNrIHN0cnVjdCB0aGF0IGNvdW50ZXItPmN0eC0+dGFzayBjb3VsZCBwb3NzaWJseSBwb2ludCB0bwotICogcmVtYWlucyB2YWxpZC4gIFRoaXMgY29uZGl0aW9uIGlzIHNhdGlzaWZlZCB3aGVuIGNhbGxlZCB0aHJvdWdoCi0gKiBwZXJmX2NvdW50ZXJfZm9yX2VhY2hfY2hpbGQgb3IgcGVyZl9jb3VudGVyX2Zvcl9lYWNoIGJlY2F1c2UgdGhleQotICogaG9sZCB0aGUgdG9wLWxldmVsIGNvdW50ZXIncyBjaGlsZF9tdXRleCwgc28gYW55IGRlc2NlbmRhbnQgdGhhdAotICogZ29lcyB0byBleGl0IHdpbGwgYmxvY2sgaW4gc3luY19jaGlsZF9jb3VudGVyLgotICogV2hlbiBjYWxsZWQgZnJvbSBwZXJmX3BlbmRpbmdfY291bnRlciBpdCdzIE9LIGJlY2F1c2UgY291bnRlci0+Y3R4Ci0gKiBpcyB0aGUgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgQ1BVIGFuZCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLAotICogaGVuY2Ugd2UgY2FuJ3QgZ2V0IGludG8gcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0IGZvciB0aGlzIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSBjb3VudGVyLT5jdHg7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3R4LT50YXNrOwotCi0JaWYgKCF0YXNrKSB7Ci0JCS8qCi0JCSAqIERpc2FibGUgdGhlIGNvdW50ZXIgb24gdGhlIGNwdSB0aGF0IGl0J3Mgb24KLQkJICovCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjb3VudGVyLT5jcHUsIF9fcGVyZl9jb3VudGVyX2Rpc2FibGUsCi0JCQkJCSBjb3VudGVyLCAxKTsKLQkJcmV0dXJuOwotCX0KLQotIHJldHJ5OgotCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY291bnRlcl9kaXNhYmxlLCBjb3VudGVyKTsKLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBJZiB0aGUgY291bnRlciBpcyBzdGlsbCBhY3RpdmUsIHdlIG5lZWQgdG8gcmV0cnkgdGhlIGNyb3NzLWNhbGwuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkUpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotCQlnb3RvIHJldHJ5OwotCX0KLQotCS8qCi0JICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCi0JICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKSB7Ci0JCXVwZGF0ZV9ncm91cF90aW1lcyhjb3VudGVyKTsKLQkJY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKLX0KLQotc3RhdGljIGludAotY291bnRlcl9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkgaW50IGNwdSkKLXsKLQlpZiAoY291bnRlci0+c3RhdGUgPD0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikKLQkJcmV0dXJuIDA7Ci0KLQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkU7Ci0JY291bnRlci0+b25jcHUgPSBjcHU7CS8qIFRPRE86IHB1dCAnY3B1JyBpbnRvIGNwdWN0eC0+Y3B1ICovCi0JLyoKLQkgKiBUaGUgbmV3IHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdHVybiBpdCBvbiBpbiB0aGUgaGFyZHdhcmU6Ci0JICovCi0Jc21wX3dtYigpOwotCi0JaWYgKGNvdW50ZXItPnBtdS0+ZW5hYmxlKGNvdW50ZXIpKSB7Ci0JCWNvdW50ZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFOwotCQljb3VudGVyLT5vbmNwdSA9IC0xOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQljb3VudGVyLT50c3RhbXBfcnVubmluZyArPSBjdHgtPnRpbWUgLSBjb3VudGVyLT50c3RhbXBfc3RvcHBlZDsKLQotCWlmICghaXNfc29mdHdhcmVfY291bnRlcihjb3VudGVyKSkKLQkJY3B1Y3R4LT5hY3RpdmVfb25jcHUrKzsKLQljdHgtPm5yX2FjdGl2ZSsrOwotCi0JaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVzaXZlKQotCQljcHVjdHgtPmV4Y2x1c2l2ZSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfY291bnRlciAqZ3JvdXBfY291bnRlciwKLQkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JICAgICAgIGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgKnBhcnRpYWxfZ3JvdXA7Ci0JaW50IHJldDsKLQotCWlmIChncm91cF9jb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oZ3JvdXBfY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwotCi0JaWYgKGNvdW50ZXJfc2NoZWRfaW4oZ3JvdXBfY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSkpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JLyoKLQkgKiBTY2hlZHVsZSBpbiBzaWJsaW5ncyBhcyBvbmUgZ3JvdXAgKGlmIGFueSk6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZ3JvdXBfY291bnRlci0+c2libGluZ19saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCWlmIChjb3VudGVyX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpKSB7Ci0JCQlwYXJ0aWFsX2dyb3VwID0gY291bnRlcjsKLQkJCWdvdG8gZ3JvdXBfZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotZ3JvdXBfZXJyb3I6Ci0JLyoKLQkgKiBHcm91cHMgY2FuIGJlIHNjaGVkdWxlZCBpbiBhcyBvbmUgdW5pdCBvbmx5LCBzbyB1bmRvIGFueQotCSAqIHBhcnRpYWwgZ3JvdXAgYmVmb3JlIHJldHVybmluZzoKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZncm91cF9jb3VudGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpIHsKLQkJaWYgKGNvdW50ZXIgPT0gcGFydGlhbF9ncm91cCkKLQkJCWJyZWFrOwotCQljb3VudGVyX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0JfQotCWNvdW50ZXJfc2NoZWRfb3V0KGdyb3VwX2NvdW50ZXIsIGNwdWN0eCwgY3R4KTsKLQotCXJldHVybiAtRUFHQUlOOwotfQotCi0vKgotICogUmV0dXJuIDEgZm9yIGEgZ3JvdXAgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBjb3VudGVycywKLSAqIDAgaWYgdGhlIGdyb3VwIGNvbnRhaW5zIGFueSBoYXJkd2FyZSBjb3VudGVycy4KLSAqLwotc3RhdGljIGludCBpc19zb2Z0d2FyZV9vbmx5X2dyb3VwKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmxlYWRlcikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JaWYgKCFpc19zb2Z0d2FyZV9jb3VudGVyKGxlYWRlcikpCi0JCXJldHVybiAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpCi0JCWlmICghaXNfc29mdHdhcmVfY291bnRlcihjb3VudGVyKSkKLQkJCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBXb3JrIG91dCB3aGV0aGVyIHdlIGNhbiBwdXQgdGhpcyBjb3VudGVyIGdyb3VwIG9uIHRoZSBDUFUgbm93LgotICovCi1zdGF0aWMgaW50IGdyb3VwX2Nhbl9nb19vbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJCSAgIGludCBjYW5fYWRkX2h3KQotewotCS8qCi0JICogR3JvdXBzIGNvbnNpc3RpbmcgZW50aXJlbHkgb2Ygc29mdHdhcmUgY291bnRlcnMgY2FuIGFsd2F5cyBnbyBvbi4KLQkgKi8KLQlpZiAoaXNfc29mdHdhcmVfb25seV9ncm91cChjb3VudGVyKSkKLQkJcmV0dXJuIDE7Ci0JLyoKLQkgKiBJZiBhbiBleGNsdXNpdmUgZ3JvdXAgaXMgYWxyZWFkeSBvbiwgbm8gb3RoZXIgaGFyZHdhcmUKLQkgKiBjb3VudGVycyBjYW4gZ28gb24uCi0JICovCi0JaWYgKGNwdWN0eC0+ZXhjbHVzaXZlKQotCQlyZXR1cm4gMDsKLQkvKgotCSAqIElmIHRoaXMgZ3JvdXAgaXMgZXhjbHVzaXZlIGFuZCB0aGVyZSBhcmUgYWxyZWFkeQotCSAqIGNvdW50ZXJzIG9uIHRoZSBDUFUsIGl0IGNhbid0IGdvIG9uLgotCSAqLwotCWlmIChjb3VudGVyLT5hdHRyLmV4Y2x1c2l2ZSAmJiBjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBPdGhlcndpc2UsIHRyeSB0byBhZGQgaXQgaWYgYWxsIHByZXZpb3VzIGdyb3VwcyB3ZXJlIGFibGUKLQkgKiB0byBnbyBvbi4KLQkgKi8KLQlyZXR1cm4gY2FuX2FkZF9odzsKLX0KLQotc3RhdGljIHZvaWQgYWRkX2NvdW50ZXJfdG9fY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgpCi17Ci0JbGlzdF9hZGRfY291bnRlcihjb3VudGVyLCBjdHgpOwotCWNvdW50ZXItPnRzdGFtcF9lbmFibGVkID0gY3R4LT50aW1lOwotCWNvdW50ZXItPnRzdGFtcF9ydW5uaW5nID0gY3R4LT50aW1lOwotCWNvdW50ZXItPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOwotfQotCi0vKgotICogQ3Jvc3MgQ1BVIGNhbGwgdG8gaW5zdGFsbCBhbmQgZW5hYmxlIGEgcGVyZm9ybWFuY2UgY291bnRlcgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBoZWxkCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGluZm87Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSBjb3VudGVyLT5jdHg7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqbGVhZGVyID0gY291bnRlci0+Z3JvdXBfbGVhZGVyOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaW50IGVycjsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHRhc2sgY29udGV4dCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzCi0JICogdGhlIGN1cnJlbnQgdGFzayBjb250ZXh0IG9mIHRoaXMgY3B1LiBJZiBub3QgaXQgaGFzIGJlZW4KLQkgKiBzY2hlZHVsZWQgb3V0IGJlZm9yZSB0aGUgc21wIGNhbGwgYXJyaXZlZC4KLQkgKiBPciBwb3NzaWJseSB0aGlzIGlzIHRoZSByaWdodCBjb250ZXh0IGJ1dCBpdCBpc24ndAotCSAqIG9uIHRoaXMgY3B1IGJlY2F1c2UgaXQgaGFkIG5vIGNvdW50ZXJzLgotCSAqLwotCWlmIChjdHgtPnRhc2sgJiYgY3B1Y3R4LT50YXNrX2N0eCAhPSBjdHgpIHsKLQkJaWYgKGNwdWN0eC0+dGFza19jdHggfHwgY3R4LT50YXNrICE9IGN1cnJlbnQpCi0JCQlyZXR1cm47Ci0JCWNwdWN0eC0+dGFza19jdHggPSBjdHg7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWN0eC0+aXNfYWN0aXZlID0gMTsKLQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7Ci0KLQkvKgotCSAqIFByb3RlY3QgdGhlIGxpc3Qgb3BlcmF0aW9uIGFnYWluc3QgTk1JIGJ5IGRpc2FibGluZyB0aGUKLQkgKiBjb3VudGVycyBvbiBhIGdsb2JhbCBsZXZlbC4gTk9QIGZvciBub24gTk1JIGJhc2VkIGNvdW50ZXJzLgotCSAqLwotCXBlcmZfZGlzYWJsZSgpOwotCi0JYWRkX2NvdW50ZXJfdG9fY3R4KGNvdW50ZXIsIGN0eCk7Ci0KLQkvKgotCSAqIERvbid0IHB1dCB0aGUgY291bnRlciBvbiBpZiBpdCBpcyBkaXNhYmxlZCBvciBpZgotCSAqIGl0IGlzIGluIGEgZ3JvdXAgYW5kIHRoZSBncm91cCBpc24ndCBvbi4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFIHx8Ci0JICAgIChsZWFkZXIgIT0gY291bnRlciAmJiBsZWFkZXItPnN0YXRlICE9IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkUpKQotCQlnb3RvIHVubG9jazsKLQotCS8qCi0JICogQW4gZXhjbHVzaXZlIGNvdW50ZXIgY2FuJ3QgZ28gb24gaWYgdGhlcmUgYXJlIGFscmVhZHkgYWN0aXZlCi0JICogaGFyZHdhcmUgY291bnRlcnMsIGFuZCBubyBoYXJkd2FyZSBjb3VudGVyIGNhbiBnbyBvbiBpZiB0aGVyZQotCSAqIGlzIGFscmVhZHkgYW4gZXhjbHVzaXZlIGNvdW50ZXIgb24uCi0JICovCi0JaWYgKCFncm91cF9jYW5fZ29fb24oY291bnRlciwgY3B1Y3R4LCAxKSkKLQkJZXJyID0gLUVFWElTVDsKLQllbHNlCi0JCWVyciA9IGNvdW50ZXJfc2NoZWRfaW4oY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0KLQlpZiAoZXJyKSB7Ci0JCS8qCi0JCSAqIFRoaXMgY291bnRlciBjb3VsZG4ndCBnbyBvbi4gIElmIGl0IGlzIGluIGEgZ3JvdXAKLQkJICogdGhlbiB3ZSBoYXZlIHRvIHB1bGwgdGhlIHdob2xlIGdyb3VwIG9mZi4KLQkJICogSWYgdGhlIGNvdW50ZXIgZ3JvdXAgaXMgcGlubmVkIHRoZW4gcHV0IGl0IGluIGVycm9yIHN0YXRlLgotCQkgKi8KLQkJaWYgKGxlYWRlciAhPSBjb3VudGVyKQotCQkJZ3JvdXBfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4LCBjdHgpOwotCQlpZiAobGVhZGVyLT5hdHRyLnBpbm5lZCkgewotCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGxlYWRlcik7Ci0JCQlsZWFkZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX0VSUk9SOwotCQl9Ci0JfQotCi0JaWYgKCFlcnIgJiYgIWN0eC0+dGFzayAmJiBjcHVjdHgtPm1heF9wZXJ0YXNrKQotCQljcHVjdHgtPm1heF9wZXJ0YXNrLS07Ci0KLSB1bmxvY2s6Ci0JcGVyZl9lbmFibGUoKTsKLQotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotfQotCi0vKgotICogQXR0YWNoIGEgcGVyZm9ybWFuY2UgY291bnRlciB0byBhIGNvbnRleHQKLSAqCi0gKiBGaXJzdCB3ZSBhZGQgdGhlIGNvdW50ZXIgdG8gdGhlIGxpc3Qgd2l0aCB0aGUgaGFyZHdhcmUgZW5hYmxlIGJpdAotICogaW4gY291bnRlci0+aHdfY29uZmlnIGNsZWFyZWQuCi0gKgotICogSWYgdGhlIGNvdW50ZXIgaXMgYXR0YWNoZWQgdG8gYSB0YXNrIHdoaWNoIGlzIG9uIGEgQ1BVIHdlIHVzZSBhIHNtcAotICogY2FsbCB0byBlbmFibGUgaXQgaW4gdGhlIHRhc2sgY29udGV4dC4gVGhlIHRhc2sgbWlnaHQgaGF2ZSBiZWVuCi0gKiBzY2hlZHVsZWQgYXdheSwgYnV0IHdlIGNoZWNrIHRoaXMgaW4gdGhlIHNtcCBjYWxsIGFnYWluLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBoZWxkLgotICovCi1zdGF0aWMgdm9pZAotcGVyZl9pbnN0YWxsX2luX2NvbnRleHQoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JCQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJaW50IGNwdSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7Ci0KLQlpZiAoIXRhc2spIHsKLQkJLyoKLQkJICogUGVyIGNwdSBjb3VudGVycyBhcmUgaW5zdGFsbGVkIHZpYSBhbiBzbXAgY2FsbCBhbmQKLQkJICogdGhlIGluc3RhbGwgaXMgYWx3YXlzIHN1Y2Vzc2Z1bC4KLQkJICovCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQsCi0JCQkJCSBjb3VudGVyLCAxKTsKLQkJcmV0dXJuOwotCX0KLQotcmV0cnk6Ci0JdGFza19vbmNwdV9mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQsCi0JCQkJIGNvdW50ZXIpOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKLQkvKgotCSAqIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHNtcCBjYWxsLgotCSAqLwotCWlmIChjdHgtPmlzX2FjdGl2ZSAmJiBsaXN0X2VtcHR5KCZjb3VudGVyLT5saXN0X2VudHJ5KSkgewotCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCi0JLyoKLQkgKiBUaGUgbG9jayBwcmV2ZW50cyB0aGF0IHRoaXMgY29udGV4dCBpcyBzY2hlZHVsZWQgaW4gc28gd2UKLQkgKiBjYW4gYWRkIHRoZSBjb3VudGVyIHNhZmVseSwgaWYgaXQgdGhlIGNhbGwgYWJvdmUgZGlkIG5vdAotCSAqIHN1Y2NlZWQuCi0JICovCi0JaWYgKGxpc3RfZW1wdHkoJmNvdW50ZXItPmxpc3RfZW50cnkpKQotCQlhZGRfY291bnRlcl90b19jdHgoY291bnRlciwgY3R4KTsKLQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBQdXQgYSBjb3VudGVyIGludG8gaW5hY3RpdmUgc3RhdGUgYW5kIHVwZGF0ZSB0aW1lIGZpZWxkcy4KLSAqIEVuYWJsaW5nIHRoZSBsZWFkZXIgb2YgYSBncm91cCBlZmZlY3RpdmVseSBlbmFibGVzIGFsbAotICogdGhlIGdyb3VwIG1lbWJlcnMgdGhhdCBhcmVuJ3QgZXhwbGljaXRseSBkaXNhYmxlZCwgc28gd2UKLSAqIGhhdmUgdG8gdXBkYXRlIHRoZWlyIC0+dHN0YW1wX2VuYWJsZWQgYWxzby4KLSAqIE5vdGU6IHRoaXMgd29ya3MgZm9yIGdyb3VwIG1lbWJlcnMgYXMgd2VsbCBhcyBncm91cCBsZWFkZXJzCi0gKiBzaW5jZSB0aGUgbm9uLWxlYWRlciBtZW1iZXJzJyBzaWJsaW5nX2xpc3RzIHdpbGwgYmUgZW1wdHkuCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9jb3VudGVyX21hcmtfZW5hYmxlZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpzdWI7Ci0KLQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRTsKLQljb3VudGVyLT50c3RhbXBfZW5hYmxlZCA9IGN0eC0+dGltZSAtIGNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmNvdW50ZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkKLQkJaWYgKHN1Yi0+c3RhdGUgPj0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKQotCQkJc3ViLT50c3RhbXBfZW5hYmxlZCA9Ci0JCQkJY3R4LT50aW1lIC0gc3ViLT50b3RhbF90aW1lX2VuYWJsZWQ7Ci19Ci0KLS8qCi0gKiBDcm9zcyBDUFUgY2FsbCB0byBlbmFibGUgYSBwZXJmb3JtYW5jZSBjb3VudGVyCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9jb3VudGVyX2VuYWJsZSh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBpbmZvOwotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpsZWFkZXIgPSBjb3VudGVyLT5ncm91cF9sZWFkZXI7Ci0JaW50IGVycjsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGNvdW50ZXIsIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzCi0JICogY291bnRlcidzIHRhc2sgaXMgdGhlIGN1cnJlbnQgdGFzayBvbiB0aGlzIGNwdS4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KSB7Ci0JCWlmIChjcHVjdHgtPnRhc2tfY3R4IHx8IGN0eC0+dGFzayAhPSBjdXJyZW50KQotCQkJcmV0dXJuOwotCQljcHVjdHgtPnRhc2tfY3R4ID0gY3R4OwotCX0KLQotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQljdHgtPmlzX2FjdGl2ZSA9IDE7Ci0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwotCi0JaWYgKGNvdW50ZXItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKLQkJZ290byB1bmxvY2s7Ci0JX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7Ci0KLQkvKgotCSAqIElmIHRoZSBjb3VudGVyIGlzIGluIGEgZ3JvdXAgYW5kIGlzbid0IHRoZSBncm91cCBsZWFkZXIsCi0JICogdGhlbiBkb24ndCBwdXQgaXQgb24gdW5sZXNzIHRoZSBncm91cCBpcyBvbi4KLQkgKi8KLQlpZiAobGVhZGVyICE9IGNvdW50ZXIgJiYgbGVhZGVyLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQlnb3RvIHVubG9jazsKLQotCWlmICghZ3JvdXBfY2FuX2dvX29uKGNvdW50ZXIsIGNwdWN0eCwgMSkpIHsKLQkJZXJyID0gLUVFWElTVDsKLQl9IGVsc2UgewotCQlwZXJmX2Rpc2FibGUoKTsKLQkJaWYgKGNvdW50ZXIgPT0gbGVhZGVyKQotCQkJZXJyID0gZ3JvdXBfc2NoZWRfaW4oY291bnRlciwgY3B1Y3R4LCBjdHgsCi0JCQkJCSAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJZWxzZQotCQkJZXJyID0gY291bnRlcl9zY2hlZF9pbihjb3VudGVyLCBjcHVjdHgsIGN0eCwKLQkJCQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCXBlcmZfZW5hYmxlKCk7Ci0JfQotCi0JaWYgKGVycikgewotCQkvKgotCQkgKiBJZiB0aGlzIGNvdW50ZXIgY2FuJ3QgZ28gb24gYW5kIGl0J3MgcGFydCBvZiBhCi0JCSAqIGdyb3VwLCB0aGVuIHRoZSB3aG9sZSBncm91cCBoYXMgdG8gY29tZSBvZmYuCi0JCSAqLwotCQlpZiAobGVhZGVyICE9IGNvdW50ZXIpCi0JCQlncm91cF9zY2hlZF9vdXQobGVhZGVyLCBjcHVjdHgsIGN0eCk7Ci0JCWlmIChsZWFkZXItPmF0dHIucGlubmVkKSB7Ci0JCQl1cGRhdGVfZ3JvdXBfdGltZXMobGVhZGVyKTsKLQkJCWxlYWRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfRVJST1I7Ci0JCX0KLQl9Ci0KLSB1bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBFbmFibGUgYSBjb3VudGVyLgotICoKLSAqIElmIGNvdW50ZXItPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKLSAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgY291bnRlci0+Y3R4LT50YXNrIGNvdWxkIHBvc3NpYmx5IHBvaW50IHRvCi0gKiByZW1haW5zIHZhbGlkLiAgVGhpcyBjb25kaXRpb24gaXMgc2F0aXNmaWVkIHdoZW4gY2FsbGVkIHRocm91Z2gKLSAqIHBlcmZfY291bnRlcl9mb3JfZWFjaF9jaGlsZCBvciBwZXJmX2NvdW50ZXJfZm9yX2VhY2ggYXMgZGVzY3JpYmVkCi0gKiBmb3IgcGVyZl9jb3VudGVyX2Rpc2FibGUuCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7Ci0KLQlpZiAoIXRhc2spIHsKLQkJLyoKLQkJICogRW5hYmxlIHRoZSBjb3VudGVyIG9uIHRoZSBjcHUgdGhhdCBpdCdzIG9uCi0JCSAqLwotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY291bnRlci0+Y3B1LCBfX3BlcmZfY291bnRlcl9lbmFibGUsCi0JCQkJCSBjb3VudGVyLCAxKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JaWYgKGNvdW50ZXItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIElmIHRoZSBjb3VudGVyIGlzIGluIGVycm9yIHN0YXRlLCBjbGVhciB0aGF0IGZpcnN0LgotCSAqIFRoYXQgd2F5LCBpZiB3ZSBzZWUgdGhlIGNvdW50ZXIgaW4gZXJyb3Igc3RhdGUgYmVsb3csIHdlCi0JICoga25vdyB0aGF0IGl0IGhhcyBnb25lIGJhY2sgaW50byBlcnJvciBzdGF0ZSwgYXMgZGlzdGluY3QKLQkgKiBmcm9tIHRoZSB0YXNrIGhhdmluZyBiZWVuIHNjaGVkdWxlZCBhd2F5IGJlZm9yZSB0aGUKLQkgKiBjcm9zcy1jYWxsIGFycml2ZWQuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9FUlJPUikKLQkJY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGOwotCi0gcmV0cnk6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY291bnRlcl9lbmFibGUsIGNvdW50ZXIpOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKLQotCS8qCi0JICogSWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlIGFuZCB0aGUgY291bnRlciBpcyBzdGlsbCBvZmYsCi0JICogd2UgbmVlZCB0byByZXRyeSB0aGUgY3Jvc3MtY2FsbC4KLQkgKi8KLQlpZiAoY3R4LT5pc19hY3RpdmUgJiYgY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikKLQkJZ290byByZXRyeTsKLQotCS8qCi0JICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCi0JICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikKLQkJX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7Ci0KLSBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWZyZXNoKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCByZWZyZXNoKQotewotCS8qCi0JICogbm90IHN1cHBvcnRlZCBvbiBpbmhlcml0ZWQgY291bnRlcnMKLQkgKi8KLQlpZiAoY291bnRlci0+YXR0ci5pbmhlcml0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWF0b21pY19hZGQocmVmcmVzaCwgJmNvdW50ZXItPmV2ZW50X2xpbWl0KTsKLQlwZXJmX2NvdW50ZXJfZW5hYmxlKGNvdW50ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19wZXJmX2NvdW50ZXJfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWN0eC0+aXNfYWN0aXZlID0gMDsKLQlpZiAobGlrZWx5KCFjdHgtPm5yX2NvdW50ZXJzKSkKLQkJZ290byBvdXQ7Ci0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwotCi0JcGVyZl9kaXNhYmxlKCk7Ci0JaWYgKGN0eC0+bnJfYWN0aXZlKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCQlpZiAoY291bnRlciAhPSBjb3VudGVyLT5ncm91cF9sZWFkZXIpCi0JCQkJY291bnRlcl9zY2hlZF9vdXQoY291bnRlciwgY3B1Y3R4LCBjdHgpOwotCQkJZWxzZQotCQkJCWdyb3VwX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0JCX0KLQl9Ci0JcGVyZl9lbmFibGUoKTsKLSBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBUZXN0IHdoZXRoZXIgdHdvIGNvbnRleHRzIGFyZSBlcXVpdmFsZW50LCBpLmUuIHdoZXRoZXIgdGhleQotICogaGF2ZSBib3RoIGJlZW4gY2xvbmVkIGZyb20gdGhlIHNhbWUgdmVyc2lvbiBvZiB0aGUgc2FtZSBjb250ZXh0Ci0gKiBhbmQgdGhleSBib3RoIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVuYWJsZWQgY291bnRlcnMuCi0gKiBJZiB0aGUgbnVtYmVyIG9mIGVuYWJsZWQgY291bnRlcnMgaXMgdGhlIHNhbWUsIHRoZW4gdGhlIHNldAotICogb2YgZW5hYmxlZCBjb3VudGVycyBzaG91bGQgYmUgdGhlIHNhbWUsIGJlY2F1c2UgdGhlc2UgYXJlIGJvdGgKLSAqIGluaGVyaXRlZCBjb250ZXh0cywgdGhlcmVmb3JlIHdlIGNhbid0IGFjY2VzcyBpbmRpdmlkdWFsIGNvdW50ZXJzCi0gKiBpbiB0aGVtIGRpcmVjdGx5IHdpdGggYW4gZmQ7IHdlIGNhbiBvbmx5IGVuYWJsZS9kaXNhYmxlIGFsbAotICogY291bnRlcnMgdmlhIHByY3RsLCBvciBlbmFibGUvZGlzYWJsZSBhbGwgY291bnRlcnMgaW4gYSBmYW1pbHkKLSAqIHZpYSBpb2N0bCwgd2hpY2ggd2lsbCBoYXZlIHRoZSBzYW1lIGVmZmVjdCBvbiBib3RoIGNvbnRleHRzLgotICovCi1zdGF0aWMgaW50IGNvbnRleHRfZXF1aXYoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgxLAotCQkJIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4MikKLXsKLQlyZXR1cm4gY3R4MS0+cGFyZW50X2N0eCAmJiBjdHgxLT5wYXJlbnRfY3R4ID09IGN0eDItPnBhcmVudF9jdHgKLQkJJiYgY3R4MS0+cGFyZW50X2dlbiA9PSBjdHgyLT5wYXJlbnRfZ2VuCi0JCSYmICFjdHgxLT5waW5fY291bnQgJiYgIWN0eDItPnBpbl9jb3VudDsKLX0KLQotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfcmVhZCh2b2lkICpjb3VudGVyKTsKLQotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfc3luY19zdGF0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkJICAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyICpuZXh0X2NvdW50ZXIpCi17Ci0JdTY0IHZhbHVlOwotCi0JaWYgKCFjb3VudGVyLT5hdHRyLmluaGVyaXRfc3RhdCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBVcGRhdGUgdGhlIGNvdW50ZXIgdmFsdWUsIHdlIGNhbm5vdCB1c2UgcGVyZl9jb3VudGVyX3JlYWQoKQotCSAqIGJlY2F1c2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbnRleHQgc3dpdGNoIGFuZCBoYXZlIElSUXMKLQkgKiBkaXNhYmxlZCwgd2hpY2ggdXBzZXRzIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpLCBob3dldmVyCi0JICogd2Uga25vdyB0aGUgY291bnRlciBtdXN0IGJlIG9uIHRoZSBjdXJyZW50IENQVSwgdGhlcmVmb3JlIHdlCi0JICogZG9uJ3QgbmVlZCB0byB1c2UgaXQuCi0JICovCi0Jc3dpdGNoIChjb3VudGVyLT5zdGF0ZSkgewotCWNhc2UgUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRToKLQkJX19wZXJmX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRToKLQkJdXBkYXRlX2NvdW50ZXJfdGltZXMoY291bnRlcik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBJbiBvcmRlciB0byBrZWVwIHBlci10YXNrIHN0YXRzIHJlbGlhYmxlIHdlIG5lZWQgdG8gZmxpcCB0aGUgY291bnRlcgotCSAqIHZhbHVlcyB3aGVuIHdlIGZsaXAgdGhlIGNvbnRleHRzLgotCSAqLwotCXZhbHVlID0gYXRvbWljNjRfcmVhZCgmbmV4dF9jb3VudGVyLT5jb3VudCk7Ci0JdmFsdWUgPSBhdG9taWM2NF94Y2hnKCZjb3VudGVyLT5jb3VudCwgdmFsdWUpOwotCWF0b21pYzY0X3NldCgmbmV4dF9jb3VudGVyLT5jb3VudCwgdmFsdWUpOwotCi0Jc3dhcChjb3VudGVyLT50b3RhbF90aW1lX2VuYWJsZWQsIG5leHRfY291bnRlci0+dG90YWxfdGltZV9lbmFibGVkKTsKLQlzd2FwKGNvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZywgbmV4dF9jb3VudGVyLT50b3RhbF90aW1lX3J1bm5pbmcpOwotCi0JLyoKLQkgKiBTaW5jZSB3ZSBzd2l6emxlZCB0aGUgdmFsdWVzLCB1cGRhdGUgdGhlIHVzZXIgdmlzaWJsZSBkYXRhIHRvby4KLQkgKi8KLQlwZXJmX2NvdW50ZXJfdXBkYXRlX3VzZXJwYWdlKGNvdW50ZXIpOwotCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UobmV4dF9jb3VudGVyKTsKLX0KLQotI2RlZmluZSBsaXN0X25leHRfZW50cnkocG9zLCBtZW1iZXIpIFwKLQlsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKQotCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfc3luY19zdGF0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJCSAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqbmV4dF9jdHgpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgKm5leHRfY291bnRlcjsKLQotCWlmICghY3R4LT5ucl9zdGF0KQotCQlyZXR1cm47Ci0KLQljb3VudGVyID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT5ldmVudF9saXN0LAotCQkJCSAgIHN0cnVjdCBwZXJmX2NvdW50ZXIsIGV2ZW50X2VudHJ5KTsKLQotCW5leHRfY291bnRlciA9IGxpc3RfZmlyc3RfZW50cnkoJm5leHRfY3R4LT5ldmVudF9saXN0LAotCQkJCQlzdHJ1Y3QgcGVyZl9jb3VudGVyLCBldmVudF9lbnRyeSk7Ci0KLQl3aGlsZSAoJmNvdW50ZXItPmV2ZW50X2VudHJ5ICE9ICZjdHgtPmV2ZW50X2xpc3QgJiYKLQkgICAgICAgJm5leHRfY291bnRlci0+ZXZlbnRfZW50cnkgIT0gJm5leHRfY3R4LT5ldmVudF9saXN0KSB7Ci0KLQkJX19wZXJmX2NvdW50ZXJfc3luY19zdGF0KGNvdW50ZXIsIG5leHRfY291bnRlcik7Ci0KLQkJY291bnRlciA9IGxpc3RfbmV4dF9lbnRyeShjb3VudGVyLCBldmVudF9lbnRyeSk7Ci0JCW5leHRfY291bnRlciA9IGxpc3RfbmV4dF9lbnRyeShuZXh0X2NvdW50ZXIsIGV2ZW50X2VudHJ5KTsKLQl9Ci19Ci0KLS8qCi0gKiBDYWxsZWQgZnJvbSBzY2hlZHVsZXIgdG8gcmVtb3ZlIHRoZSBjb3VudGVycyBvZiB0aGUgY3VycmVudCB0YXNrLAotICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICoKLSAqIFdlIHN0b3AgZWFjaCBjb3VudGVyIGFuZCB1cGRhdGUgdGhlIGNvdW50ZXIgdmFsdWUgaW4gY291bnRlci0+Y291bnQuCi0gKgotICogVGhpcyBkb2VzIG5vdCBwcm90ZWN0IHVzIGFnYWluc3QgTk1JLCBidXQgZGlzYWJsZSgpCi0gKiBzZXRzIHRoZSBkaXNhYmxlZCBiaXQgaW4gdGhlIGNvbnRyb2wgZmllbGQgb2YgY291bnRlciBfYmVmb3JlXwotICogYWNjZXNzaW5nIHRoZSBjb3VudGVyIGNvbnRyb2wgcmVnaXN0ZXIuIElmIGEgTk1JIGhpdHMsIHRoZW4gaXQgd2lsbAotICogbm90IHJlc3RhcnQgdGhlIGNvdW50ZXIuCi0gKi8KLXZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOwotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9jb3VudGVyX2N0eHA7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpuZXh0X2N0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKnBhcmVudDsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQlpbnQgZG9fc3dpdGNoID0gMTsKLQotCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0JcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTLCAxLCAxLCByZWdzLCAwKTsKLQotCWlmIChsaWtlbHkoIWN0eCB8fCAhY3B1Y3R4LT50YXNrX2N0eCkpCi0JCXJldHVybjsKLQotCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlwYXJlbnQgPSByY3VfZGVyZWZlcmVuY2UoY3R4LT5wYXJlbnRfY3R4KTsKLQluZXh0X2N0eCA9IG5leHQtPnBlcmZfY291bnRlcl9jdHhwOwotCWlmIChwYXJlbnQgJiYgbmV4dF9jdHggJiYKLQkgICAgcmN1X2RlcmVmZXJlbmNlKG5leHRfY3R4LT5wYXJlbnRfY3R4KSA9PSBwYXJlbnQpIHsKLQkJLyoKLQkJICogTG9va3MgbGlrZSB0aGUgdHdvIGNvbnRleHRzIGFyZSBjbG9uZXMsIHNvIHdlIG1pZ2h0IGJlCi0JCSAqIGFibGUgdG8gb3B0aW1pemUgdGhlIGNvbnRleHQgc3dpdGNoLiAgV2UgbG9jayBib3RoCi0JCSAqIGNvbnRleHRzIGFuZCBjaGVjayB0aGF0IHRoZXkgYXJlIGNsb25lcyB1bmRlciB0aGUKLQkJICogbG9jayAoaW5jbHVkaW5nIHJlLWNoZWNraW5nIHRoYXQgbmVpdGhlciBoYXMgYmVlbgotCQkgKiB1bmNsb25lZCBpbiB0aGUgbWVhbnRpbWUpLiAgSXQgZG9lc24ndCBtYXR0ZXIgd2hpY2gKLQkJICogb3JkZXIgd2UgdGFrZSB0aGUgbG9ja3MgYmVjYXVzZSBubyBvdGhlciBjcHUgY291bGQKLQkJICogYmUgdHJ5aW5nIHRvIGxvY2sgYm90aCBvZiB0aGVzZSB0YXNrcy4KLQkJICovCi0JCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQkJc3Bpbl9sb2NrX25lc3RlZCgmbmV4dF9jdHgtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKLQkJaWYgKGNvbnRleHRfZXF1aXYoY3R4LCBuZXh0X2N0eCkpIHsKLQkJCS8qCi0JCQkgKiBYWFggZG8gd2UgbmVlZCBhIG1lbW9yeSBiYXJyaWVyIG9mIHNvcnRzCi0JCQkgKiB3cnQgdG8gcmN1X2RlcmVmZXJlbmNlKCkgb2YgcGVyZl9jb3VudGVyX2N0eHAKLQkJCSAqLwotCQkJdGFzay0+cGVyZl9jb3VudGVyX2N0eHAgPSBuZXh0X2N0eDsKLQkJCW5leHQtPnBlcmZfY291bnRlcl9jdHhwID0gY3R4OwotCQkJY3R4LT50YXNrID0gbmV4dDsKLQkJCW5leHRfY3R4LT50YXNrID0gdGFzazsKLQkJCWRvX3N3aXRjaCA9IDA7Ci0KLQkJCXBlcmZfY291bnRlcl9zeW5jX3N0YXQoY3R4LCBuZXh0X2N0eCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJm5leHRfY3R4LT5sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JaWYgKGRvX3N3aXRjaCkgewotCQlfX3BlcmZfY291bnRlcl9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOwotCQljcHVjdHgtPnRhc2tfY3R4ID0gTlVMTDsKLQl9Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCWlmICghY3B1Y3R4LT50YXNrX2N0eCkKLQkJcmV0dXJuOwotCi0JaWYgKFdBUk5fT05fT05DRShjdHggIT0gY3B1Y3R4LT50YXNrX2N0eCkpCi0JCXJldHVybjsKLQotCV9fcGVyZl9jb3VudGVyX3NjaGVkX291dChjdHgsIGNwdWN0eCk7Ci0JY3B1Y3R4LT50YXNrX2N0eCA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jcHVfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCi17Ci0JX19wZXJmX2NvdW50ZXJfc2NoZWRfb3V0KCZjcHVjdHgtPmN0eCwgY3B1Y3R4KTsKLX0KLQotc3RhdGljIHZvaWQKLV9fcGVyZl9jb3VudGVyX3NjaGVkX2luKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCWludCBjYW5fYWRkX2h3ID0gMTsKLQotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQljdHgtPmlzX2FjdGl2ZSA9IDE7Ci0JaWYgKGxpa2VseSghY3R4LT5ucl9jb3VudGVycykpCi0JCWdvdG8gb3V0OwotCi0JY3R4LT50aW1lc3RhbXAgPSBwZXJmX2Nsb2NrKCk7Ci0KLQlwZXJmX2Rpc2FibGUoKTsKLQotCS8qCi0JICogRmlyc3QgZ28gdGhyb3VnaCB0aGUgbGlzdCBhbmQgcHV0IG9uIGFueSBwaW5uZWQgZ3JvdXBzCi0JICogaW4gb3JkZXIgdG8gZ2l2ZSB0aGVtIHRoZSBiZXN0IGNoYW5jZSBvZiBnb2luZyBvbi4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZjdHgtPmNvdW50ZXJfbGlzdCwgbGlzdF9lbnRyeSkgewotCQlpZiAoY291bnRlci0+c3RhdGUgPD0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRiB8fAotCQkgICAgIWNvdW50ZXItPmF0dHIucGlubmVkKQotCQkJY29udGludWU7Ci0JCWlmIChjb3VudGVyLT5jcHUgIT0gLTEgJiYgY291bnRlci0+Y3B1ICE9IGNwdSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjb3VudGVyICE9IGNvdW50ZXItPmdyb3VwX2xlYWRlcikKLQkJCWNvdW50ZXJfc2NoZWRfaW4oY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCWVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihjb3VudGVyLCBjcHVjdHgsIDEpKQotCQkJCWdyb3VwX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpOwotCQl9Ci0KLQkJLyoKLQkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAotCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCi0JCSAqLwotCQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKSB7Ci0JCQl1cGRhdGVfZ3JvdXBfdGltZXMoY291bnRlcik7Ci0JCQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9FUlJPUjsKLQkJfQotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCS8qCi0JCSAqIElnbm9yZSBjb3VudGVycyBpbiBPRkYgb3IgRVJST1Igc3RhdGUsIGFuZAotCQkgKiBpZ25vcmUgcGlubmVkIGNvdW50ZXJzIHNpbmNlIHdlIGRpZCB0aGVtIGFscmVhZHkuCi0JCSAqLwotCQlpZiAoY291bnRlci0+c3RhdGUgPD0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRiB8fAotCQkgICAgY291bnRlci0+YXR0ci5waW5uZWQpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBMaXN0ZW4gdG8gdGhlICdjcHUnIHNjaGVkdWxpbmcgZmlsdGVyIGNvbnN0cmFpbnQKLQkJICogb2YgY291bnRlcnM6Ci0JCSAqLwotCQlpZiAoY291bnRlci0+Y3B1ICE9IC0xICYmIGNvdW50ZXItPmNwdSAhPSBjcHUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoY291bnRlciAhPSBjb3VudGVyLT5ncm91cF9sZWFkZXIpIHsKLQkJCWlmIChjb3VudGVyX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpKQotCQkJCWNhbl9hZGRfaHcgPSAwOwotCQl9IGVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihjb3VudGVyLCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7Ci0JCQkJaWYgKGdyb3VwX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpKQotCQkJCQljYW5fYWRkX2h3ID0gMDsKLQkJCX0KLQkJfQotCX0KLQlwZXJmX2VuYWJsZSgpOwotIG91dDoKLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLX0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHNjaGVkdWxlciB0byBhZGQgdGhlIGNvdW50ZXJzIG9mIHRoZSBjdXJyZW50IHRhc2sKLSAqIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLSAqCi0gKiBXZSByZXN0b3JlIHRoZSBjb3VudGVyIHZhbHVlIGFuZCB0aGVuIGVuYWJsZSBpdC4KLSAqCi0gKiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdXMgYWdhaW5zdCBOTUksIGJ1dCBlbmFibGUoKQotICogc2V0cyB0aGUgZW5hYmxlZCBiaXQgaW4gdGhlIGNvbnRyb2wgZmllbGQgb2YgY291bnRlciBfYmVmb3JlXwotICogYWNjZXNzaW5nIHRoZSBjb3VudGVyIGNvbnRyb2wgcmVnaXN0ZXIuIElmIGEgTk1JIGhpdHMsIHRoZW4gaXQgd2lsbAotICoga2VlcCB0aGUgY291bnRlciBydW5uaW5nLgotICovCi12b2lkIHBlcmZfY291bnRlcl90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfY291bnRlcl9jdHhwOwotCi0JaWYgKGxpa2VseSghY3R4KSkKLQkJcmV0dXJuOwotCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKLQkJcmV0dXJuOwotCV9fcGVyZl9jb3VudGVyX3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBjcHUpOwotCWNwdWN0eC0+dGFza19jdHggPSBjdHg7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jcHVfc2NoZWRfaW4oc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKLQotCV9fcGVyZl9jb3VudGVyX3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBjcHUpOwotfQotCi0jZGVmaW5lIE1BWF9JTlRFUlJVUFRTICh+MFVMTCkKLQotc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IGVuYWJsZSk7Ci0KLXN0YXRpYyB2b2lkIHBlcmZfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCB1NjQgZXZlbnRzKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQl1NjQgcGVyaW9kLCBzYW1wbGVfcGVyaW9kOwotCXM2NCBkZWx0YTsKLQotCWV2ZW50cyAqPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JcGVyaW9kID0gZGl2NjRfdTY0KGV2ZW50cywgY291bnRlci0+YXR0ci5zYW1wbGVfZnJlcSk7Ci0KLQlkZWx0YSA9IChzNjQpKHBlcmlvZCAtIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JZGVsdGEgPSAoZGVsdGEgKyA3KSAvIDg7IC8qIGxvdyBwYXNzIGZpbHRlciAqLwotCi0Jc2FtcGxlX3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZCArIGRlbHRhOwotCi0JaWYgKCFzYW1wbGVfcGVyaW9kKQotCQlzYW1wbGVfcGVyaW9kID0gMTsKLQotCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IHNhbXBsZV9wZXJpb2Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY3R4X2FkanVzdF9mcmVxKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOwotCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOwotCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCWlmIChjb3VudGVyLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQkJY29udGludWU7Ci0KLQkJaHdjID0gJmNvdW50ZXItPmh3OwotCi0JCWludGVycnVwdHMgPSBod2MtPmludGVycnVwdHM7Ci0JCWh3Yy0+aW50ZXJydXB0cyA9IDA7Ci0KLQkJLyoKLQkJICogdW50aHJvdHRsZSBjb3VudGVycyBvbiB0aGUgdGljawotCQkgKi8KLQkJaWYgKGludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpIHsKLQkJCXBlcmZfbG9nX3Rocm90dGxlKGNvdW50ZXIsIDEpOwotCQkJY291bnRlci0+cG11LT51bnRocm90dGxlKGNvdW50ZXIpOwotCQkJaW50ZXJydXB0cyA9IDIqc3lzY3RsX3BlcmZfY291bnRlcl9zYW1wbGVfcmF0ZS9IWjsKLQkJfQotCi0JCWlmICghY291bnRlci0+YXR0ci5mcmVxIHx8ICFjb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogaWYgdGhlIHNwZWNpZmllZCBmcmVxIDwgSFogdGhlbiB3ZSBuZWVkIHRvIHNraXAgdGlja3MKLQkJICovCi0JCWlmIChjb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxIDwgSFopIHsKLQkJCWZyZXEgPSBjb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxOwotCi0JCQlod2MtPmZyZXFfY291bnQgKz0gZnJlcTsKLQkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzICs9IGludGVycnVwdHM7Ci0KLQkJCWlmIChod2MtPmZyZXFfY291bnQgPCBIWikKLQkJCQljb250aW51ZTsKLQotCQkJaW50ZXJydXB0cyA9IGh3Yy0+ZnJlcV9pbnRlcnJ1cHRzOwotCQkJaHdjLT5mcmVxX2ludGVycnVwdHMgPSAwOwotCQkJaHdjLT5mcmVxX2NvdW50IC09IEhaOwotCQl9IGVsc2UKLQkJCWZyZXEgPSBIWjsKLQotCQlwZXJmX2FkanVzdF9wZXJpb2QoY291bnRlciwgZnJlcSAqIGludGVycnVwdHMpOwotCi0JCS8qCi0JCSAqIEluIG9yZGVyIHRvIGF2b2lkIGJlaW5nIHN0YWxsZWQgYnkgYW4gKGFjY2lkZW50YWwpIGh1Z2UKLQkJICogc2FtcGxlIHBlcmlvZCwgZm9yY2UgcmVzZXQgdGhlIHNhbXBsZSBwZXJpb2QgaWYgd2UgZGlkbid0Ci0JCSAqIGdldCBhbnkgZXZlbnRzIGluIHRoaXMgZnJlcSBwZXJpb2QuCi0JCSAqLwotCQlpZiAoIWludGVycnVwdHMpIHsKLQkJCXBlcmZfZGlzYWJsZSgpOwotCQkJY291bnRlci0+cG11LT5kaXNhYmxlKGNvdW50ZXIpOwotCQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKLQkJCWNvdW50ZXItPnBtdS0+ZW5hYmxlKGNvdW50ZXIpOwotCQkJcGVyZl9lbmFibGUoKTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLX0KLQotLyoKLSAqIFJvdW5kLXJvYmluIGEgY29udGV4dCdzIGNvdW50ZXJzOgotICovCi1zdGF0aWMgdm9pZCByb3RhdGVfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQlpZiAoIWN0eC0+bnJfY291bnRlcnMpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQkvKgotCSAqIFJvdGF0ZSB0aGUgZmlyc3QgZW50cnkgbGFzdCAod29ya3MganVzdCBmaW5lIGZvciBncm91cCBjb3VudGVycyB0b28pOgotCSAqLwotCXBlcmZfZGlzYWJsZSgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZjb3VudGVyLT5saXN0X2VudHJ5LCAmY3R4LT5jb3VudGVyX2xpc3QpOwotCQlicmVhazsKLQl9Ci0JcGVyZl9lbmFibGUoKTsKLQotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotfQotCi12b2lkIHBlcmZfY291bnRlcl90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgY3B1KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHg7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZucl9jb3VudGVycykpCi0JCXJldHVybjsKLQotCWNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7Ci0JY3R4ID0gY3Vyci0+cGVyZl9jb3VudGVyX2N0eHA7Ci0KLQlwZXJmX2N0eF9hZGp1c3RfZnJlcSgmY3B1Y3R4LT5jdHgpOwotCWlmIChjdHgpCi0JCXBlcmZfY3R4X2FkanVzdF9mcmVxKGN0eCk7Ci0KLQlwZXJmX2NvdW50ZXJfY3B1X3NjaGVkX291dChjcHVjdHgpOwotCWlmIChjdHgpCi0JCV9fcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KGN0eCk7Ci0KLQlyb3RhdGVfY3R4KCZjcHVjdHgtPmN0eCk7Ci0JaWYgKGN0eCkKLQkJcm90YXRlX2N0eChjdHgpOwotCi0JcGVyZl9jb3VudGVyX2NwdV9zY2hlZF9pbihjcHVjdHgsIGNwdSk7Ci0JaWYgKGN0eCkKLQkJcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfaW4oY3VyciwgY3B1KTsKLX0KLQotLyoKLSAqIEVuYWJsZSBhbGwgb2YgYSB0YXNrJ3MgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGVuYWJsZS1vbi1leGVjLgotICogVGhpcyBleHBlY3RzIHRhc2sgPT0gY3VycmVudC4KLSAqLwotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX2VuYWJsZV9vbl9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVuYWJsZWQgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0eCA9IHRhc2stPnBlcmZfY291bnRlcl9jdHhwOwotCWlmICghY3R4IHx8ICFjdHgtPm5yX2NvdW50ZXJzKQotCQlnb3RvIG91dDsKLQotCV9fcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KGN0eCk7Ci0KLQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZjdHgtPmNvdW50ZXJfbGlzdCwgbGlzdF9lbnRyeSkgewotCQlpZiAoIWNvdW50ZXItPmF0dHIuZW5hYmxlX29uX2V4ZWMpCi0JCQljb250aW51ZTsKLQkJY291bnRlci0+YXR0ci5lbmFibGVfb25fZXhlYyA9IDA7Ci0JCWlmIChjb3VudGVyLT5zdGF0ZSA+PSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpCi0JCQljb250aW51ZTsKLQkJX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7Ci0JCWVuYWJsZWQgPSAxOwotCX0KLQotCS8qCi0JICogVW5jbG9uZSB0aGlzIGNvbnRleHQgaWYgd2UgZW5hYmxlZCBhbnkgY291bnRlci4KLQkgKi8KLQlpZiAoZW5hYmxlZCkKLQkJdW5jbG9uZV9jdHgoY3R4KTsKLQotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotCi0JcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfaW4odGFzaywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLSBvdXQ6Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogQ3Jvc3MgQ1BVIGNhbGwgdG8gcmVhZCB0aGUgaGFyZHdhcmUgY291bnRlcgotICovCi1zdGF0aWMgdm9pZCBfX3BlcmZfY291bnRlcl9yZWFkKHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBpbmZvOwotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gY291bnRlci0+Y3R4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIElmIHRoaXMgaXMgYSB0YXNrIGNvbnRleHQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcwotCSAqIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dCBvZiB0aGlzIGNwdS4gIElmIG5vdCBpdCBoYXMgYmVlbgotCSAqIHNjaGVkdWxlZCBvdXQgYmVmb3JlIHRoZSBzbXAgY2FsbCBhcnJpdmVkLiAgSW4gdGhhdCBjYXNlCi0JICogY291bnRlci0+Y291bnQgd291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYSByZWNlbnQgc2FtcGxlCi0JICogd2hlbiB0aGUgY291bnRlciB3YXMgc2NoZWR1bGVkIG91dC4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKGN0eC0+aXNfYWN0aXZlKQotCQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7Ci0JY291bnRlci0+cG11LT5yZWFkKGNvdW50ZXIpOwotCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNvdW50ZXIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHU2NCBwZXJmX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCS8qCi0JICogSWYgY291bnRlciBpcyBlbmFibGVkIGFuZCBjdXJyZW50bHkgYWN0aXZlIG9uIGEgQ1BVLCB1cGRhdGUgdGhlCi0JICogdmFsdWUgaW4gdGhlIGNvdW50ZXIgc3RydWN0dXJlOgotCSAqLwotCWlmIChjb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKSB7Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjb3VudGVyLT5vbmNwdSwKLQkJCQkJIF9fcGVyZl9jb3VudGVyX3JlYWQsIGNvdW50ZXIsIDEpOwotCX0gZWxzZSBpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKSB7Ci0JCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNvdW50ZXIpOwotCX0KLQotCXJldHVybiBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jb3VudCk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBwZXJmX2NvdW50ZXIgY29udGV4dCBpbiBhIHRhc2tfc3RydWN0OgotICovCi1zdGF0aWMgdm9pZAotX19wZXJmX2NvdW50ZXJfaW5pdF9jb250ZXh0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwotCXNwaW5fbG9ja19pbml0KCZjdHgtPmxvY2spOwotCW11dGV4X2luaXQoJmN0eC0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjdHgtPmNvdW50ZXJfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmN0eC0+ZXZlbnRfbGlzdCk7Ci0JYXRvbWljX3NldCgmY3R4LT5yZWZjb3VudCwgMSk7Ci0JY3R4LT50YXNrID0gdGFzazsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqZmluZF9nZXRfY29udGV4dChwaWRfdCBwaWQsIGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHg7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBJZiBjcHUgaXMgbm90IGEgd2lsZGNhcmQgdGhlbiB0aGlzIGlzIGEgcGVyY3B1IGNvdW50ZXI6Ci0JICovCi0JaWYgKGNwdSAhPSAtMSkgewotCQkvKiBNdXN0IGJlIHJvb3QgdG8gb3BlcmF0ZSBvbiBhIENQVSBjb3VudGVyOiAqLwotCQlpZiAocGVyZl9wYXJhbm9pZF9jcHUoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwotCi0JCWlmIChjcHUgPCAwIHx8IGNwdSA+IG51bV9wb3NzaWJsZV9jcHVzKCkpCi0JCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCQkvKgotCQkgKiBXZSBjb3VsZCBiZSBjbGV2ZXIgYW5kIGFsbG93IHRvIGF0dGFjaCBhIGNvdW50ZXIgdG8gYW4KLQkJICogb2ZmbGluZSBDUFUgYW5kIGFjdGl2YXRlIGl0IHdoZW4gdGhlIENQVSBjb21lcyB1cCwgYnV0Ci0JCSAqIHRoYXQncyBmb3IgbGF0ZXIuCi0JCSAqLwotCQlpZiAoIWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwotCi0JCWNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7Ci0JCWN0eCA9ICZjcHVjdHgtPmN0eDsKLQkJZ2V0X2N0eChjdHgpOwotCi0JCXJldHVybiBjdHg7Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmICghcGlkKQotCQl0YXNrID0gY3VycmVudDsKLQllbHNlCi0JCXRhc2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwotCWlmICh0YXNrKQotCQlnZXRfdGFza19zdHJ1Y3QodGFzayk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlpZiAoIXRhc2spCi0JCXJldHVybiBFUlJfUFRSKC1FU1JDSCk7Ci0KLQkvKgotCSAqIENhbid0IGF0dGFjaCBjb3VudGVycyB0byBhIGR5aW5nIHRhc2suCi0JICovCi0JZXJyID0gLUVTUkNIOwotCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCi0JCWdvdG8gZXJyb3V0OwotCi0JLyogUmV1c2UgcHRyYWNlIHBlcm1pc3Npb24gY2hlY2tzIGZvciBub3cuICovCi0JZXJyID0gLUVBQ0NFUzsKLQlpZiAoIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQotCQlnb3RvIGVycm91dDsKLQotIHJldHJ5OgotCWN0eCA9IHBlcmZfbG9ja190YXNrX2NvbnRleHQodGFzaywgJmZsYWdzKTsKLQlpZiAoY3R4KSB7Ci0JCXVuY2xvbmVfY3R4KGN0eCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOwotCX0KLQotCWlmICghY3R4KSB7Ci0JCWN0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCksIEdGUF9LRVJORUwpOwotCQllcnIgPSAtRU5PTUVNOwotCQlpZiAoIWN0eCkKLQkJCWdvdG8gZXJyb3V0OwotCQlfX3BlcmZfY291bnRlcl9pbml0X2NvbnRleHQoY3R4LCB0YXNrKTsKLQkJZ2V0X2N0eChjdHgpOwotCQlpZiAoY21weGNoZygmdGFzay0+cGVyZl9jb3VudGVyX2N0eHAsIE5VTEwsIGN0eCkpIHsKLQkJCS8qCi0JCQkgKiBXZSByYWNlZCB3aXRoIHNvbWUgb3RoZXIgdGFzazsgdXNlCi0JCQkgKiB0aGUgY29udGV4dCB0aGV5IHNldC4KLQkJCSAqLwotCQkJa2ZyZWUoY3R4KTsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQkJZ2V0X3Rhc2tfc3RydWN0KHRhc2spOwotCX0KLQotCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKLQlyZXR1cm4gY3R4OwotCi0gZXJyb3V0OgotCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2NvdW50ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JY291bnRlciA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcGVyZl9jb3VudGVyLCByY3VfaGVhZCk7Ci0JaWYgKGNvdW50ZXItPm5zKQotCQlwdXRfcGlkX25zKGNvdW50ZXItPm5zKTsKLQlrZnJlZShjb3VudGVyKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9wZW5kaW5nX3N5bmMoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcik7Ci0KLXN0YXRpYyB2b2lkIGZyZWVfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXBlcmZfcGVuZGluZ19zeW5jKGNvdW50ZXIpOwotCi0JaWYgKCFjb3VudGVyLT5wYXJlbnQpIHsKLQkJYXRvbWljX2RlYygmbnJfY291bnRlcnMpOwotCQlpZiAoY291bnRlci0+YXR0ci5tbWFwKQotCQkJYXRvbWljX2RlYygmbnJfbW1hcF9jb3VudGVycyk7Ci0JCWlmIChjb3VudGVyLT5hdHRyLmNvbW0pCi0JCQlhdG9taWNfZGVjKCZucl9jb21tX2NvdW50ZXJzKTsKLQkJaWYgKGNvdW50ZXItPmF0dHIudGFzaykKLQkJCWF0b21pY19kZWMoJm5yX3Rhc2tfY291bnRlcnMpOwotCX0KLQotCWlmIChjb3VudGVyLT5vdXRwdXQpIHsKLQkJZnB1dChjb3VudGVyLT5vdXRwdXQtPmZpbHApOwotCQljb3VudGVyLT5vdXRwdXQgPSBOVUxMOwotCX0KLQotCWlmIChjb3VudGVyLT5kZXN0cm95KQotCQljb3VudGVyLT5kZXN0cm95KGNvdW50ZXIpOwotCi0JcHV0X2N0eChjb3VudGVyLT5jdHgpOwotCWNhbGxfcmN1KCZjb3VudGVyLT5yY3VfaGVhZCwgZnJlZV9jb3VudGVyX3JjdSk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGZpbGUgaXMgZ29uZS4KLSAqLwotc3RhdGljIGludCBwZXJmX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0KLQlXQVJOX09OX09OQ0UoY3R4LT5wYXJlbnRfY3R4KTsKLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKLQlwZXJmX2NvdW50ZXJfcmVtb3ZlX2Zyb21fY29udGV4dChjb3VudGVyKTsKLQltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOwotCi0JbXV0ZXhfbG9jaygmY291bnRlci0+b3duZXItPnBlcmZfY291bnRlcl9tdXRleCk7Ci0JbGlzdF9kZWxfaW5pdCgmY291bnRlci0+b3duZXJfZW50cnkpOwotCW11dGV4X3VubG9jaygmY291bnRlci0+b3duZXItPnBlcmZfY291bnRlcl9tdXRleCk7Ci0JcHV0X3Rhc2tfc3RydWN0KGNvdW50ZXItPm93bmVyKTsKLQotCWZyZWVfY291bnRlcihjb3VudGVyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWFkX3NpemUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlpbnQgZW50cnkgPSBzaXplb2YodTY0KTsgLyogdmFsdWUgKi8KLQlpbnQgc2l6ZSA9IDA7Ci0JaW50IG5yID0gMTsKLQotCWlmIChjb3VudGVyLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEKQotCQlzaXplICs9IHNpemVvZih1NjQpOwotCi0JaWYgKGNvdW50ZXItPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpCi0JCXNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoY291bnRlci0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQotCQllbnRyeSArPSBzaXplb2YodTY0KTsKLQotCWlmIChjb3VudGVyLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApIHsKLQkJbnIgKz0gY291bnRlci0+Z3JvdXBfbGVhZGVyLT5ucl9zaWJsaW5nczsKLQkJc2l6ZSArPSBzaXplb2YodTY0KTsKLQl9Ci0KLQlzaXplICs9IGVudHJ5ICogbnI7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIHU2NCBwZXJmX2NvdW50ZXJfcmVhZF92YWx1ZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNoaWxkOwotCXU2NCB0b3RhbCA9IDA7Ci0KLQl0b3RhbCArPSBwZXJmX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmY291bnRlci0+Y2hpbGRfbGlzdCwgY2hpbGRfbGlzdCkKLQkJdG90YWwgKz0gcGVyZl9jb3VudGVyX3JlYWQoY2hpbGQpOwotCi0JcmV0dXJuIHRvdGFsOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWFkX2VudHJ5KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkJICAgdTY0IHJlYWRfZm9ybWF0LCBjaGFyIF9fdXNlciAqYnVmKQotewotCWludCBuID0gMCwgY291bnQgPSAwOwotCXU2NCB2YWx1ZXNbMl07Ci0KLQl2YWx1ZXNbbisrXSA9IHBlcmZfY291bnRlcl9yZWFkX3ZhbHVlKGNvdW50ZXIpOwotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQotCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfY291bnRlcl9pZChjb3VudGVyKTsKLQotCWNvdW50ID0gbiAqIHNpemVvZih1NjQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvdW50ZXJfcmVhZF9ncm91cChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSAgIHU2NCByZWFkX2Zvcm1hdCwgY2hhciBfX3VzZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpsZWFkZXIgPSBjb3VudGVyLT5ncm91cF9sZWFkZXIsICpzdWI7Ci0JaW50IG4gPSAwLCBzaXplID0gMCwgZXJyID0gLUVGQVVMVDsKLQl1NjQgdmFsdWVzWzNdOwotCi0JdmFsdWVzW24rK10gPSAxICsgbGVhZGVyLT5ucl9zaWJsaW5nczsKLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpIHsKLQkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfZW5hYmxlZCArCi0JCQlhdG9taWM2NF9yZWFkKCZsZWFkZXItPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7Ci0JfQotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykgewotCQl2YWx1ZXNbbisrXSA9IGxlYWRlci0+dG90YWxfdGltZV9ydW5uaW5nICsKLQkJCWF0b21pYzY0X3JlYWQoJmxlYWRlci0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKLQl9Ci0KLQlzaXplID0gbiAqIHNpemVvZih1NjQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyID0gcGVyZl9jb3VudGVyX3JlYWRfZW50cnkobGVhZGVyLCByZWFkX2Zvcm1hdCwgYnVmICsgc2l6ZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlzaXplICs9IGVycjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpIHsKLQkJZXJyID0gcGVyZl9jb3VudGVyX3JlYWRfZW50cnkoc3ViLCByZWFkX2Zvcm1hdCwKLQkJCQlidWYgKyBzaXplKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCi0JCXNpemUgKz0gZXJyOwotCX0KLQotCXJldHVybiBzaXplOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWFkX29uZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSB1NjQgcmVhZF9mb3JtYXQsIGNoYXIgX191c2VyICpidWYpCi17Ci0JdTY0IHZhbHVlc1s0XTsKLQlpbnQgbiA9IDA7Ci0KLQl2YWx1ZXNbbisrXSA9IHBlcmZfY291bnRlcl9yZWFkX3ZhbHVlKGNvdW50ZXIpOwotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgewotCQl2YWx1ZXNbbisrXSA9IGNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCArCi0JCQlhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOwotCX0KLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKLQkJdmFsdWVzW24rK10gPSBjb3VudGVyLT50b3RhbF90aW1lX3J1bm5pbmcgKwotCQkJYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKLQl9Ci0JaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCi0JCXZhbHVlc1tuKytdID0gcHJpbWFyeV9jb3VudGVyX2lkKGNvdW50ZXIpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgbiAqIHNpemVvZih1NjQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gbiAqIHNpemVvZih1NjQpOwotfQotCi0vKgotICogUmVhZCB0aGUgcGVyZm9ybWFuY2UgY291bnRlciAtIHNpbXBsZSBub24gYmxvY2tpbmcgdmVyc2lvbiBmb3Igbm93Ci0gKi8KLXN0YXRpYyBzc2l6ZV90Ci1wZXJmX3JlYWRfaHcoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXU2NCByZWFkX2Zvcm1hdCA9IGNvdW50ZXItPmF0dHIucmVhZF9mb3JtYXQ7Ci0JaW50IHJldDsKLQotCS8qCi0JICogUmV0dXJuIGVuZC1vZi1maWxlIGZvciBhIHJlYWQgb24gYSBjb3VudGVyIHRoYXQgaXMgaW4KLQkgKiBlcnJvciBzdGF0ZSAoaS5lLiBiZWNhdXNlIGl0IHdhcyBwaW5uZWQgYnV0IGl0IGNvdWxkbid0IGJlCi0JICogc2NoZWR1bGVkIG9uIHRvIHRoZSBDUFUgYXQgc29tZSBwb2ludCkuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9FUlJPUikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY291bnQgPCBwZXJmX2NvdW50ZXJfcmVhZF9zaXplKGNvdW50ZXIpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCVdBUk5fT05fT05DRShjb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJmNvdW50ZXItPmNoaWxkX211dGV4KTsKLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkKLQkJcmV0ID0gcGVyZl9jb3VudGVyX3JlYWRfZ3JvdXAoY291bnRlciwgcmVhZF9mb3JtYXQsIGJ1Zik7Ci0JZWxzZQotCQlyZXQgPSBwZXJmX2NvdW50ZXJfcmVhZF9vbmUoY291bnRlciwgcmVhZF9mb3JtYXQsIGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZjb3VudGVyLT5jaGlsZF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdAotcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHBlcmZfcmVhZF9odyhjb3VudGVyLCBidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwZXJmX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgaW50IGV2ZW50cyA9IFBPTExfSFVQOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoY291bnRlci0+ZGF0YSk7Ci0JaWYgKGRhdGEpCi0JCWV2ZW50cyA9IGF0b21pY194Y2hnKCZkYXRhLT5wb2xsLCAwKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXBvbGxfd2FpdChmaWxlLCAmY291bnRlci0+d2FpdHEsIHdhaXQpOwotCi0JcmV0dXJuIGV2ZW50czsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX3Jlc2V0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JKHZvaWQpcGVyZl9jb3VudGVyX3JlYWQoY291bnRlcik7Ci0JYXRvbWljNjRfc2V0KCZjb3VudGVyLT5jb3VudCwgMCk7Ci0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLX0KLQotLyoKLSAqIEhvbGRpbmcgdGhlIHRvcC1sZXZlbCBjb3VudGVyJ3MgY2hpbGRfbXV0ZXggbWVhbnMgdGhhdCBhbnkKLSAqIGRlc2NlbmRhbnQgcHJvY2VzcyB0aGF0IGhhcyBpbmhlcml0ZWQgdGhpcyBjb3VudGVyIHdpbGwgYmxvY2sKLSAqIGluIHN5bmNfY2hpbGRfY291bnRlciBpZiBpdCBnb2VzIHRvIGV4aXQsIHRodXMgc2F0aXNmeWluZyB0aGUKLSAqIHRhc2sgZXhpc3RlbmNlIHJlcXVpcmVtZW50cyBvZiBwZXJmX2NvdW50ZXJfZW5hYmxlL2Rpc2FibGUuCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9mb3JfZWFjaF9jaGlsZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCQl2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfY291bnRlciAqKSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjaGlsZDsKLQotCVdBUk5fT05fT05DRShjb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJmNvdW50ZXItPmNoaWxkX211dGV4KTsKLQlmdW5jKGNvdW50ZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZjb3VudGVyLT5jaGlsZF9saXN0LCBjaGlsZF9saXN0KQotCQlmdW5jKGNoaWxkKTsKLQltdXRleF91bmxvY2soJmNvdW50ZXItPmNoaWxkX211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX2Zvcl9lYWNoKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkJICB2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfY291bnRlciAqKSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpzaWJsaW5nOwotCi0JV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7Ci0JbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7Ci0JY291bnRlciA9IGNvdW50ZXItPmdyb3VwX2xlYWRlcjsKLQotCXBlcmZfY291bnRlcl9mb3JfZWFjaF9jaGlsZChjb3VudGVyLCBmdW5jKTsKLQlmdW5jKGNvdW50ZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJmNvdW50ZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkKLQkJcGVyZl9jb3VudGVyX2Zvcl9lYWNoX2NoaWxkKGNvdW50ZXIsIGZ1bmMpOwotCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9jb3VudGVyX3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCB1NjQgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSBjb3VudGVyLT5jdHg7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWludCByZXQgPSAwOwotCXU2NCB2YWx1ZTsKLQotCWlmICghY291bnRlci0+YXR0ci5zYW1wbGVfcGVyaW9kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNpemUgPSBjb3B5X2Zyb21fdXNlcigmdmFsdWUsIGFyZywgc2l6ZW9mKHZhbHVlKSk7Ci0JaWYgKHNpemUgIT0gc2l6ZW9mKHZhbHVlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIXZhbHVlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JaWYgKGNvdW50ZXItPmF0dHIuZnJlcSkgewotCQlpZiAodmFsdWUgPiBzeXNjdGxfcGVyZl9jb3VudGVyX3NhbXBsZV9yYXRlKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byB1bmxvY2s7Ci0JCX0KLQotCQljb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxID0gdmFsdWU7Ci0JfSBlbHNlIHsKLQkJY291bnRlci0+YXR0ci5zYW1wbGVfcGVyaW9kID0gdmFsdWU7Ci0JCWNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QgPSB2YWx1ZTsKLQl9Ci11bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHBlcmZfY291bnRlcl9zZXRfb3V0cHV0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBvdXRwdXRfZmQpOwotCi1zdGF0aWMgbG9uZyBwZXJmX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9jb3VudGVyICopOwotCXUzMiBmbGFncyA9IGFyZzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBQRVJGX0NPVU5URVJfSU9DX0VOQUJMRToKLQkJZnVuYyA9IHBlcmZfY291bnRlcl9lbmFibGU7Ci0JCWJyZWFrOwotCWNhc2UgUEVSRl9DT1VOVEVSX0lPQ19ESVNBQkxFOgotCQlmdW5jID0gcGVyZl9jb3VudGVyX2Rpc2FibGU7Ci0JCWJyZWFrOwotCWNhc2UgUEVSRl9DT1VOVEVSX0lPQ19SRVNFVDoKLQkJZnVuYyA9IHBlcmZfY291bnRlcl9yZXNldDsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9JT0NfUkVGUkVTSDoKLQkJcmV0dXJuIHBlcmZfY291bnRlcl9yZWZyZXNoKGNvdW50ZXIsIGFyZyk7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9JT0NfUEVSSU9EOgotCQlyZXR1cm4gcGVyZl9jb3VudGVyX3BlcmlvZChjb3VudGVyLCAodTY0IF9fdXNlciAqKWFyZyk7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9JT0NfU0VUX09VVFBVVDoKLQkJcmV0dXJuIHBlcmZfY291bnRlcl9zZXRfb3V0cHV0KGNvdW50ZXIsIGFyZyk7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RUWTsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBQRVJGX0lPQ19GTEFHX0dST1VQKQotCQlwZXJmX2NvdW50ZXJfZm9yX2VhY2goY291bnRlciwgZnVuYyk7Ci0JZWxzZQotCQlwZXJmX2NvdW50ZXJfZm9yX2VhY2hfY2hpbGQoY291bnRlciwgZnVuYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBlcmZfY291bnRlcl90YXNrX2VuYWJsZSh2b2lkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQltdXRleF9sb2NrKCZjdXJyZW50LT5wZXJmX2NvdW50ZXJfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN1cnJlbnQtPnBlcmZfY291bnRlcl9saXN0LCBvd25lcl9lbnRyeSkKLQkJcGVyZl9jb3VudGVyX2Zvcl9lYWNoX2NoaWxkKGNvdW50ZXIsIHBlcmZfY291bnRlcl9lbmFibGUpOwotCW11dGV4X3VubG9jaygmY3VycmVudC0+cGVyZl9jb3VudGVyX211dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgcGVyZl9jb3VudGVyX3Rhc2tfZGlzYWJsZSh2b2lkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQltdXRleF9sb2NrKCZjdXJyZW50LT5wZXJmX2NvdW50ZXJfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN1cnJlbnQtPnBlcmZfY291bnRlcl9saXN0LCBvd25lcl9lbnRyeSkKLQkJcGVyZl9jb3VudGVyX2Zvcl9lYWNoX2NoaWxkKGNvdW50ZXIsIHBlcmZfY291bnRlcl9kaXNhYmxlKTsKLQltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfY291bnRlcl9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmbmRlZiBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUCi0jIGRlZmluZSBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUIDAKLSNlbmRpZgotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9pbmRleChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCWlmIChjb3VudGVyLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBjb3VudGVyLT5ody5pZHggKyAxIC0gUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVDsKLX0KLQotLyoKLSAqIENhbGxlcnMgbmVlZCB0byBlbnN1cmUgdGhlcmUgY2FuIGJlIG5vIG5lc3Rpbmcgb2YgdGhpcyBmdW5jdGlvbiwgb3RoZXJ3aXNlCi0gKiB0aGUgc2VxbG9jayBsb2dpYyBnb2VzIGJhZC4gV2UgY2FuIG5vdCBzZXJpYWxpemUgdGhpcyBiZWNhdXNlIHRoZSBhcmNoCi0gKiBjb2RlIGNhbGxzIHRoaXMgZnJvbSBOTUkgY29udGV4dC4KLSAqLwotdm9pZCBwZXJmX2NvdW50ZXJfdXBkYXRlX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9tbWFwX3BhZ2UgKnVzZXJwZzsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5kYXRhKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gdW5sb2NrOwotCi0JdXNlcnBnID0gZGF0YS0+dXNlcl9wYWdlOwotCi0JLyoKLQkgKiBEaXNhYmxlIHByZWVtcHRpb24gc28gYXMgdG8gbm90IGxldCB0aGUgY29ycmVzcG9uZGluZyB1c2VyLXNwYWNlCi0JICogc3BpbiB0b28gbG9uZyBpZiB3ZSBnZXQgcHJlZW1wdGVkLgotCSAqLwotCXByZWVtcHRfZGlzYWJsZSgpOwotCSsrdXNlcnBnLT5sb2NrOwotCWJhcnJpZXIoKTsKLQl1c2VycGctPmluZGV4ID0gcGVyZl9jb3VudGVyX2luZGV4KGNvdW50ZXIpOwotCXVzZXJwZy0+b2Zmc2V0ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y291bnQpOwotCWlmIChjb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQl1c2VycGctPm9mZnNldCAtPSBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5ody5wcmV2X2NvdW50KTsKLQotCXVzZXJwZy0+dGltZV9lbmFibGVkID0gY291bnRlci0+dG90YWxfdGltZV9lbmFibGVkICsKLQkJCWF0b21pYzY0X3JlYWQoJmNvdW50ZXItPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7Ci0KLQl1c2VycGctPnRpbWVfcnVubmluZyA9IGNvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZyArCi0JCQlhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOwotCi0JYmFycmllcigpOwotCSsrdXNlcnBnLT5sb2NrOwotCXByZWVtcHRfZW5hYmxlKCk7Ci11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwotCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7Ci0KLQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgewotCQlpZiAodm1mLT5wZ29mZiA9PSAwKQotCQkJcmV0ID0gMDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5kYXRhKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKHZtZi0+cGdvZmYgPT0gMCkgewotCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+dXNlcl9wYWdlKTsKLQl9IGVsc2UgewotCQlpbnQgbnIgPSB2bWYtPnBnb2ZmIC0gMTsKLQotCQlpZiAoKHVuc2lnbmVkKW5yID4gZGF0YS0+bnJfcGFnZXMpCi0JCQlnb3RvIHVubG9jazsKLQotCQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpCi0JCQlnb3RvIHVubG9jazsKLQotCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+ZGF0YV9wYWdlc1tucl0pOwotCX0KLQotCWdldF9wYWdlKHZtZi0+cGFnZSk7Ci0Jdm1mLT5wYWdlLT5tYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7Ci0Jdm1mLT5wYWdlLT5pbmRleCAgID0gdm1mLT5wZ29mZjsKLQotCXJldCA9IDA7Ci11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBucl9wYWdlcykKLXsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWludCBpOwotCi0JV0FSTl9PTihhdG9taWNfcmVhZCgmY291bnRlci0+bW1hcF9jb3VudCkpOwotCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEpOwotCXNpemUgKz0gbnJfcGFnZXMgKiBzaXplb2Yodm9pZCAqKTsKLQotCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJZ290byBmYWlsOwotCi0JZGF0YS0+dXNlcl9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhLT51c2VyX3BhZ2UpCi0JCWdvdG8gZmFpbF91c2VyX3BhZ2U7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQlkYXRhLT5kYXRhX3BhZ2VzW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghZGF0YS0+ZGF0YV9wYWdlc1tpXSkKLQkJCWdvdG8gZmFpbF9kYXRhX3BhZ2VzOwotCX0KLQotCWRhdGEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7Ci0JYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOwotCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGNvdW50ZXItPmRhdGEsIGRhdGEpOwotCi0JcmV0dXJuIDA7Ci0KLWZhaWxfZGF0YV9wYWdlczoKLQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT51c2VyX3BhZ2UpOwotCi1mYWlsX3VzZXJfcGFnZToKLQlrZnJlZShkYXRhKTsKLQotZmFpbDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2ZyZWVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKTsKLQotCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwotCV9fZnJlZV9wYWdlKHBhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBfX3BlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKLXsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEsIHJjdV9oZWFkKTsKLQotCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+dXNlcl9wYWdlKTsKLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnJfcGFnZXM7IGkrKykKLQkJcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKLQotCWtmcmVlKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gY291bnRlci0+ZGF0YTsKLQotCVdBUk5fT04oYXRvbWljX3JlYWQoJmNvdW50ZXItPm1tYXBfY291bnQpKTsKLQotCXJjdV9hc3NpZ25fcG9pbnRlcihjb3VudGVyLT5kYXRhLCBOVUxMKTsKLQljYWxsX3JjdSgmZGF0YS0+cmN1X2hlYWQsIF9fcGVyZl9tbWFwX2RhdGFfZnJlZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWF0b21pY19pbmMoJmNvdW50ZXItPm1tYXBfY291bnQpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JV0FSTl9PTl9PTkNFKGNvdW50ZXItPmN0eC0+cGFyZW50X2N0eCk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmNvdW50ZXItPm1tYXBfY291bnQsICZjb3VudGVyLT5tbWFwX211dGV4KSkgewotCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKLQotCQlhdG9taWNfbG9uZ19zdWIoY291bnRlci0+ZGF0YS0+bnJfcGFnZXMgKyAxLCAmdXNlci0+bG9ja2VkX3ZtKTsKLQkJdm1hLT52bV9tbS0+bG9ja2VkX3ZtIC09IGNvdW50ZXItPmRhdGEtPm5yX2xvY2tlZDsKLQkJcGVyZl9tbWFwX2RhdGFfZnJlZShjb3VudGVyKTsKLQkJbXV0ZXhfdW5sb2NrKCZjb3VudGVyLT5tbWFwX211dGV4KTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGVyZl9tbWFwX3Ztb3BzID0gewotCS5vcGVuCQk9IHBlcmZfbW1hcF9vcGVuLAotCS5jbG9zZQkJPSBwZXJmX21tYXBfY2xvc2UsCi0JLmZhdWx0CQk9IHBlcmZfbW1hcF9mYXVsdCwKLQkucGFnZV9ta3dyaXRlCT0gcGVyZl9tbWFwX2ZhdWx0LAotfTsKLQotc3RhdGljIGludCBwZXJmX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyB1c2VyX2xvY2tlZCwgdXNlcl9sb2NrX2xpbWl0OwotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGN1cnJlbnRfdXNlcigpOwotCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OwotCXVuc2lnbmVkIGxvbmcgdm1hX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBucl9wYWdlczsKLQlsb25nIHVzZXJfZXh0cmEsIGV4dHJhOwotCWludCByZXQgPSAwOwotCi0JaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jdm1hX3NpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JbnJfcGFnZXMgPSAodm1hX3NpemUgLyBQQUdFX1NJWkUpIC0gMTsKLQotCS8qCi0JICogSWYgd2UgaGF2ZSBkYXRhIHBhZ2VzIGVuc3VyZSB0aGV5J3JlIGEgcG93ZXItb2YtdHdvIG51bWJlciwgc28gd2UKLQkgKiBjYW4gZG8gYml0bWFza3MgaW5zdGVhZCBvZiBtb2R1bG8uCi0JICovCi0JaWYgKG5yX3BhZ2VzICE9IDAgJiYgIWlzX3Bvd2VyX29mXzIobnJfcGFnZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh2bWFfc2l6ZSAhPSBQQUdFX1NJWkUgKiAoMSArIG5yX3BhZ2VzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodm1hLT52bV9wZ29mZiAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCVdBUk5fT05fT05DRShjb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJmNvdW50ZXItPm1tYXBfbXV0ZXgpOwotCWlmIChjb3VudGVyLT5vdXRwdXQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JaWYgKGF0b21pY19pbmNfbm90X3plcm8oJmNvdW50ZXItPm1tYXBfY291bnQpKSB7Ci0JCWlmIChucl9wYWdlcyAhPSBjb3VudGVyLT5kYXRhLT5ucl9wYWdlcykKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXVzZXJfZXh0cmEgPSBucl9wYWdlcyArIDE7Ci0JdXNlcl9sb2NrX2xpbWl0ID0gc3lzY3RsX3BlcmZfY291bnRlcl9tbG9jayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKLQotCS8qCi0JICogSW5jcmVhc2UgdGhlIGxpbWl0IGxpbmVhcmx5IHdpdGggbW9yZSBDUFVzOgotCSAqLwotCXVzZXJfbG9ja19saW1pdCAqPSBudW1fb25saW5lX2NwdXMoKTsKLQotCXVzZXJfbG9ja2VkID0gYXRvbWljX2xvbmdfcmVhZCgmdXNlci0+bG9ja2VkX3ZtKSArIHVzZXJfZXh0cmE7Ci0KLQlleHRyYSA9IDA7Ci0JaWYgKHVzZXJfbG9ja2VkID4gdXNlcl9sb2NrX2xpbWl0KQotCQlleHRyYSA9IHVzZXJfbG9ja2VkIC0gdXNlcl9sb2NrX2xpbWl0OwotCi0JbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXI7Ci0JbG9ja19saW1pdCA+Pj0gUEFHRV9TSElGVDsKLQlsb2NrZWQgPSB2bWEtPnZtX21tLT5sb2NrZWRfdm0gKyBleHRyYTsKLQotCWlmICgobG9ja2VkID4gbG9ja19saW1pdCkgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkgewotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCVdBUk5fT04oY291bnRlci0+ZGF0YSk7Ci0JcmV0ID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoY291bnRlciwgbnJfcGFnZXMpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwotCi0JYXRvbWljX3NldCgmY291bnRlci0+bW1hcF9jb3VudCwgMSk7Ci0JYXRvbWljX2xvbmdfYWRkKHVzZXJfZXh0cmEsICZ1c2VyLT5sb2NrZWRfdm0pOwotCXZtYS0+dm1fbW0tPmxvY2tlZF92bSArPSBleHRyYTsKLQljb3VudGVyLT5kYXRhLT5ucl9sb2NrZWQgPSBleHRyYTsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQotCQljb3VudGVyLT5kYXRhLT53cml0YWJsZSA9IDE7Ci0KLXVubG9jazoKLQltdXRleF91bmxvY2soJmNvdW50ZXItPm1tYXBfbXV0ZXgpOwotCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKLQl2bWEtPnZtX29wcyA9ICZwZXJmX21tYXBfdm1vcHM7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBlcmZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCByZXR2YWw7Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZjb3VudGVyLT5mYXN5bmMpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGVyZl9mb3BzID0gewotCS5yZWxlYXNlCQk9IHBlcmZfcmVsZWFzZSwKLQkucmVhZAkJCT0gcGVyZl9yZWFkLAotCS5wb2xsCQkJPSBwZXJmX3BvbGwsCi0JLnVubG9ja2VkX2lvY3RsCQk9IHBlcmZfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bAkJPSBwZXJmX2lvY3RsLAotCS5tbWFwCQkJPSBwZXJmX21tYXAsCi0JLmZhc3luYwkJCT0gcGVyZl9mYXN5bmMsCi19OwotCi0vKgotICogUGVyZiBjb3VudGVyIHdha2V1cAotICoKLSAqIElmIHRoZXJlJ3MgZGF0YSwgZW5zdXJlIHdlIHNldCB0aGUgcG9sbCgpIHN0YXRlIGFuZCBwdWJsaXNoIGV2ZXJ5dGhpbmcKLSAqIHRvIHVzZXItc3BhY2UgYmVmb3JlIHdha2luZyBldmVyeWJvZHkgdXAuCi0gKi8KLQotdm9pZCBwZXJmX2NvdW50ZXJfd2FrZXVwKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jd2FrZV91cF9hbGwoJmNvdW50ZXItPndhaXRxKTsKLQotCWlmIChjb3VudGVyLT5wZW5kaW5nX2tpbGwpIHsKLQkJa2lsbF9mYXN5bmMoJmNvdW50ZXItPmZhc3luYywgU0lHSU8sIGNvdW50ZXItPnBlbmRpbmdfa2lsbCk7Ci0JCWNvdW50ZXItPnBlbmRpbmdfa2lsbCA9IDA7Ci0JfQotfQotCi0vKgotICogUGVuZGluZyB3YWtldXBzCi0gKgotICogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gd2FrZXVwIHVwIGZyb20gTk1JIChvciBycS0+bG9jaykgY29udGV4dC4KLSAqCi0gKiBUaGUgTk1JIGJpdCBtZWFucyB3ZSBjYW5ub3QgcG9zc2libHkgdGFrZSBsb2Nrcy4gVGhlcmVmb3JlLCBtYWludGFpbiBhCi0gKiBzaW5nbGUgbGlua2VkIGxpc3QgYW5kIHVzZSBjbXB4Y2hnKCkgdG8gYWRkIGVudHJpZXMgbG9ja2xlc3MuCi0gKi8KLQotc3RhdGljIHZvaWQgcGVyZl9wZW5kaW5nX2NvdW50ZXIoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqZW50cnkpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGNvbnRhaW5lcl9vZihlbnRyeSwKLQkJCXN0cnVjdCBwZXJmX2NvdW50ZXIsIHBlbmRpbmcpOwotCi0JaWYgKGNvdW50ZXItPnBlbmRpbmdfZGlzYWJsZSkgewotCQljb3VudGVyLT5wZW5kaW5nX2Rpc2FibGUgPSAwOwotCQlfX3BlcmZfY291bnRlcl9kaXNhYmxlKGNvdW50ZXIpOwotCX0KLQotCWlmIChjb3VudGVyLT5wZW5kaW5nX3dha2V1cCkgewotCQljb3VudGVyLT5wZW5kaW5nX3dha2V1cCA9IDA7Ci0JCXBlcmZfY291bnRlcl93YWtldXAoY291bnRlcik7Ci0JfQotfQotCi0jZGVmaW5lIFBFTkRJTkdfVEFJTCAoKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKiktMVVMKQotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqLCBwZXJmX3BlbmRpbmdfaGVhZCkgPSB7Ci0JUEVORElOR19UQUlMLAotfTsKLQotc3RhdGljIHZvaWQgcGVyZl9wZW5kaW5nX3F1ZXVlKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKmVudHJ5LAotCQkJICAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopKQotewotCXN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKipoZWFkOwotCi0JaWYgKGNtcHhjaGcoJmVudHJ5LT5uZXh0LCBOVUxMLCBQRU5ESU5HX1RBSUwpICE9IE5VTEwpCi0JCXJldHVybjsKLQotCWVudHJ5LT5mdW5jID0gZnVuYzsKLQotCWhlYWQgPSAmZ2V0X2NwdV92YXIocGVyZl9wZW5kaW5nX2hlYWQpOwotCi0JZG8gewotCQllbnRyeS0+bmV4dCA9ICpoZWFkOwotCX0gd2hpbGUgKGNtcHhjaGcoaGVhZCwgZW50cnktPm5leHQsIGVudHJ5KSAhPSBlbnRyeS0+bmV4dCk7Ci0KLQlzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcoKTsKLQotCXB1dF9jcHVfdmFyKHBlcmZfcGVuZGluZ19oZWFkKTsKLX0KLQotc3RhdGljIGludCBfX3BlcmZfcGVuZGluZ19ydW4odm9pZCkKLXsKLQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICpsaXN0OwotCWludCBuciA9IDA7Ci0KLQlsaXN0ID0geGNoZygmX19nZXRfY3B1X3ZhcihwZXJmX3BlbmRpbmdfaGVhZCksIFBFTkRJTkdfVEFJTCk7Ci0Jd2hpbGUgKGxpc3QgIT0gUEVORElOR19UQUlMKSB7Ci0JCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopOwotCQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICplbnRyeSA9IGxpc3Q7Ci0KLQkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0KLQkJZnVuYyA9IGVudHJ5LT5mdW5jOwotCQllbnRyeS0+bmV4dCA9IE5VTEw7Ci0JCS8qCi0JCSAqIEVuc3VyZSB3ZSBvYnNlcnZlIHRoZSB1bnF1ZXVlIGJlZm9yZSB3ZSBpc3N1ZSB0aGUgd2FrZXVwLAotCQkgKiBzbyB0aGF0IHdlIHdvbid0IGJlIHdhaXRpbmcgZm9yZXZlci4KLQkJICogLS0gc2VlIHBlcmZfbm90X3BlbmRpbmcoKS4KLQkJICovCi0JCXNtcF93bWIoKTsKLQotCQlmdW5jKGVudHJ5KTsKLQkJbnIrKzsKLQl9Ci0KLQlyZXR1cm4gbnI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBlcmZfbm90X3BlbmRpbmcoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQkvKgotCSAqIElmIHdlIGZsdXNoIG9uIHdoYXRldmVyIGNwdSB3ZSBydW4sIHRoZXJlIGlzIGEgY2hhbmNlIHdlIGRvbid0Ci0JICogbmVlZCB0byB3YWl0LgotCSAqLwotCWdldF9jcHUoKTsKLQlfX3BlcmZfcGVuZGluZ19ydW4oKTsKLQlwdXRfY3B1KCk7Ci0KLQkvKgotCSAqIEVuc3VyZSB3ZSBzZWUgdGhlIHByb3BlciBxdWV1ZSBzdGF0ZSBiZWZvcmUgZ29pbmcgdG8gc2xlZXAKLQkgKiBzbyB0aGF0IHdlIGRvIG5vdCBtaXNzIHRoZSB3YWtldXAuIC0tIHNlZSBwZXJmX3BlbmRpbmdfaGFuZGxlKCkKLQkgKi8KLQlzbXBfcm1iKCk7Ci0JcmV0dXJuIGNvdW50ZXItPnBlbmRpbmcubmV4dCA9PSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXdhaXRfZXZlbnQoY291bnRlci0+d2FpdHEsIHBlcmZfbm90X3BlbmRpbmcoY291bnRlcikpOwotfQotCi12b2lkIHBlcmZfY291bnRlcl9kb19wZW5kaW5nKHZvaWQpCi17Ci0JX19wZXJmX3BlbmRpbmdfcnVuKCk7Ci19Ci0KLS8qCi0gKiBDYWxsY2hhaW4gc3VwcG9ydCAtLSBhcmNoIHNwZWNpZmljCi0gKi8KLQotX193ZWFrIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqcGVyZl9jYWxsY2hhaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBPdXRwdXQKLSAqLwotCi1zdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyCSpjb3VudGVyOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YQkqZGF0YTsKLQl1bnNpZ25lZCBsb25nCQloZWFkOwotCXVuc2lnbmVkIGxvbmcJCW9mZnNldDsKLQlpbnQJCQlubWk7Ci0JaW50CQkJc2FtcGxlOwotCWludAkJCWxvY2tlZDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLX07Ci0KLXN0YXRpYyBib29sIHBlcmZfb3V0cHV0X3NwYWNlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBoZWFkKQotewotCXVuc2lnbmVkIGxvbmcgdGFpbDsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQlpZiAoIWRhdGEtPndyaXRhYmxlKQotCQlyZXR1cm4gdHJ1ZTsKLQotCW1hc2sgPSAoZGF0YS0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCkgLSAxOwotCS8qCi0JICogVXNlcnNwYWNlIGNvdWxkIGNob29zZSB0byBpc3N1ZSBhIG1iKCkgYmVmb3JlIHVwZGF0aW5nIHRoZSB0YWlsCi0JICogcG9pbnRlci4gU28gdGhhdCBhbGwgcmVhZHMgd2lsbCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSB3cml0ZSBpcwotCSAqIGlzc3VlZC4KLQkgKi8KLQl0YWlsID0gQUNDRVNTX09OQ0UoZGF0YS0+dXNlcl9wYWdlLT5kYXRhX3RhaWwpOwotCXNtcF9ybWIoKTsKLQotCW9mZnNldCA9IChvZmZzZXQgLSB0YWlsKSAmIG1hc2s7Ci0JaGVhZCAgID0gKGhlYWQgICAtIHRhaWwpICYgbWFzazsKLQotCWlmICgoaW50KShoZWFkIC0gb2Zmc2V0KSA8IDApCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX291dHB1dF93YWtldXAoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQotewotCWF0b21pY19zZXQoJmhhbmRsZS0+ZGF0YS0+cG9sbCwgUE9MTF9JTik7Ci0KLQlpZiAoaGFuZGxlLT5ubWkpIHsKLQkJaGFuZGxlLT5jb3VudGVyLT5wZW5kaW5nX3dha2V1cCA9IDE7Ci0JCXBlcmZfcGVuZGluZ19xdWV1ZSgmaGFuZGxlLT5jb3VudGVyLT5wZW5kaW5nLAotCQkJCSAgIHBlcmZfcGVuZGluZ19jb3VudGVyKTsKLQl9IGVsc2UKLQkJcGVyZl9jb3VudGVyX3dha2V1cChoYW5kbGUtPmNvdW50ZXIpOwotfQotCi0vKgotICogQ3VyaW91cyBsb2NraW5nIGNvbnN0cnVjdC4KLSAqCi0gKiBXZSBuZWVkIHRvIGVuc3VyZSBhIGxhdGVyIGV2ZW50IGRvZXNuJ3QgcHVibGlzaCBhIGhlYWQgd2hlbiBhIGZvcm1lcgotICogZXZlbnQgaXNuJ3QgZG9uZSB3cml0aW5nLiBIb3dldmVyIHNpbmNlIHdlIG5lZWQgdG8gZGVhbCB3aXRoIE5NSXMgd2UKLSAqIGNhbm5vdCBmdWxseSBzZXJpYWxpemUgdGhpbmdzLgotICoKLSAqIFdoYXQgd2UgZG8gaXMgc2VyaWFsaXplIGJldHdlZW4gQ1BVcyBzbyB3ZSBvbmx5IGhhdmUgdG8gZGVhbCB3aXRoIE5NSQotICogbmVzdGluZyBvbiBhIHNpbmdsZSBDUFUuCi0gKgotICogV2Ugb25seSBwdWJsaXNoIHRoZSBoZWFkIChhbmQgZ2VuZXJhdGUgYSB3YWtldXApIHdoZW4gdGhlIG91dGVyLW1vc3QKLSAqIGV2ZW50IGNvbXBsZXRlcy4KLSAqLwotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfbG9jayhzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCi17Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gaGFuZGxlLT5kYXRhOwotCWludCBjcHU7Ci0KLQloYW5kbGUtPmxvY2tlZCA9IDA7Ci0KLQlsb2NhbF9pcnFfc2F2ZShoYW5kbGUtPmZsYWdzKTsKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoaW5fbm1pKCkgJiYgYXRvbWljX3JlYWQoJmRhdGEtPmxvY2spID09IGNwdSkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZkYXRhLT5sb2NrLCAtMSwgY3B1KSAhPSAtMSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQloYW5kbGUtPmxvY2tlZCA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfb3V0cHV0X3VubG9jayhzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCi17Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gaGFuZGxlLT5kYXRhOwotCXVuc2lnbmVkIGxvbmcgaGVhZDsKLQlpbnQgY3B1OwotCi0JZGF0YS0+ZG9uZV9oZWFkID0gZGF0YS0+aGVhZDsKLQotCWlmICghaGFuZGxlLT5sb2NrZWQpCi0JCWdvdG8gb3V0OwotCi1hZ2FpbjoKLQkvKgotCSAqIFRoZSB4Y2hnIGltcGxpZXMgYSBmdWxsIGJhcnJpZXIgdGhhdCBlbnN1cmVzIGFsbCB3cml0ZXMgYXJlIGRvbmUKLQkgKiBiZWZvcmUgd2UgcHVibGlzaCB0aGUgbmV3IGhlYWQsIG1hdGNoZWQgYnkgYSBybWIoKSBpbiB1c2Vyc3BhY2Ugd2hlbgotCSAqIHJlYWRpbmcgdGhpcyBwb3NpdGlvbi4KLQkgKi8KLQl3aGlsZSAoKGhlYWQgPSBhdG9taWNfbG9uZ194Y2hnKCZkYXRhLT5kb25lX2hlYWQsIDApKSkKLQkJZGF0YS0+dXNlcl9wYWdlLT5kYXRhX2hlYWQgPSBoZWFkOwotCi0JLyoKLQkgKiBOTUkgY2FuIGhhcHBlbiBoZXJlLCB3aGljaCBtZWFucyB3ZSBjYW4gbWlzcyBhIGRvbmVfaGVhZCB1cGRhdGUuCi0JICovCi0KLQljcHUgPSBhdG9taWNfeGNoZygmZGF0YS0+bG9jaywgLTEpOwotCVdBUk5fT05fT05DRShjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCS8qCi0JICogVGhlcmVmb3JlIHdlIGhhdmUgdG8gdmFsaWRhdGUgd2UgZGlkIG5vdCBpbmRlZWQgZG8gc28uCi0JICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19sb25nX3JlYWQoJmRhdGEtPmRvbmVfaGVhZCkpKSB7Ci0JCS8qCi0JCSAqIFNpbmNlIHdlIGhhZCBpdCBsb2NrZWQsIHdlIGNhbiBsb2NrIGl0IGFnYWluLgotCQkgKi8KLQkJd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZkYXRhLT5sb2NrLCAtMSwgY3B1KSAhPSAtMSkKLQkJCWNwdV9yZWxheCgpOwotCi0JCWdvdG8gYWdhaW47Ci0JfQotCi0JaWYgKGF0b21pY194Y2hnKCZkYXRhLT53YWtldXAsIDApKQotCQlwZXJmX291dHB1dF93YWtldXAoaGFuZGxlKTsKLW91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShoYW5kbGUtPmZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfY29weShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBpbnQgcGFnZXNfbWFzazsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXVuc2lnbmVkIGludCBzaXplOwotCXZvaWQgKipwYWdlczsKLQotCW9mZnNldAkJPSBoYW5kbGUtPm9mZnNldDsKLQlwYWdlc19tYXNrCT0gaGFuZGxlLT5kYXRhLT5ucl9wYWdlcyAtIDE7Ci0JcGFnZXMJCT0gaGFuZGxlLT5kYXRhLT5kYXRhX3BhZ2VzOwotCi0JZG8gewotCQl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQ7Ci0JCWludCBucjsKLQotCQlucgkgICAgPSAob2Zmc2V0ID4+IFBBR0VfU0hJRlQpICYgcGFnZXNfbWFzazsKLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCXNpemUJICAgID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUgLSBwYWdlX29mZnNldCwgbGVuKTsKLQotCQltZW1jcHkocGFnZXNbbnJdICsgcGFnZV9vZmZzZXQsIGJ1Ziwgc2l6ZSk7Ci0KLQkJbGVuCSAgICAtPSBzaXplOwotCQlidWYJICAgICs9IHNpemU7Ci0JCW9mZnNldAkgICAgKz0gc2l6ZTsKLQl9IHdoaWxlIChsZW4pOwotCi0JaGFuZGxlLT5vZmZzZXQgPSBvZmZzZXQ7Ci0KLQkvKgotCSAqIENoZWNrIHdlIGRpZG4ndCBjb3B5IHBhc3Qgb3VyIHJlc2VydmF0aW9uIHdpbmRvdywgdGFraW5nIHRoZQotCSAqIHBvc3NpYmxlIHVuc2lnbmVkIGludCB3cmFwIGludG8gYWNjb3VudC4KLQkgKi8KLQlXQVJOX09OX09OQ0UoKChsb25nKShoYW5kbGUtPmhlYWQgLSBoYW5kbGUtPm9mZnNldCkpIDwgMCk7Ci19Ci0KLSNkZWZpbmUgcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgeCkgXAotCXBlcmZfb3V0cHV0X2NvcHkoKGhhbmRsZSksICYoeCksIHNpemVvZih4KSkKLQotc3RhdGljIGludCBwZXJmX291dHB1dF9iZWdpbihzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGludCBzaXplLAotCQkJICAgICBpbnQgbm1pLCBpbnQgc2FtcGxlKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKm91dHB1dF9jb3VudGVyOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBoZWFkOwotCWludCBoYXZlX2xvc3Q7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKLQkJdTY0CQkJIGlkOwotCQl1NjQJCQkgbG9zdDsKLQl9IGxvc3RfZXZlbnQ7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JLyoKLQkgKiBGb3IgaW5oZXJpdGVkIGNvdW50ZXJzIHdlIHNlbmQgYWxsIHRoZSBvdXRwdXQgdG93YXJkcyB0aGUgcGFyZW50LgotCSAqLwotCWlmIChjb3VudGVyLT5wYXJlbnQpCi0JCWNvdW50ZXIgPSBjb3VudGVyLT5wYXJlbnQ7Ci0KLQlvdXRwdXRfY291bnRlciA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5vdXRwdXQpOwotCWlmIChvdXRwdXRfY291bnRlcikKLQkJY291bnRlciA9IG91dHB1dF9jb3VudGVyOwotCi0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5kYXRhKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gb3V0OwotCi0JaGFuZGxlLT5kYXRhCT0gZGF0YTsKLQloYW5kbGUtPmNvdW50ZXIJPSBjb3VudGVyOwotCWhhbmRsZS0+bm1pCT0gbm1pOwotCWhhbmRsZS0+c2FtcGxlCT0gc2FtcGxlOwotCi0JaWYgKCFkYXRhLT5ucl9wYWdlcykKLQkJZ290byBmYWlsOwotCi0JaGF2ZV9sb3N0ID0gYXRvbWljX3JlYWQoJmRhdGEtPmxvc3QpOwotCWlmIChoYXZlX2xvc3QpCi0JCXNpemUgKz0gc2l6ZW9mKGxvc3RfZXZlbnQpOwotCi0JcGVyZl9vdXRwdXRfbG9jayhoYW5kbGUpOwotCi0JZG8gewotCQlvZmZzZXQgPSBoZWFkID0gYXRvbWljX2xvbmdfcmVhZCgmZGF0YS0+aGVhZCk7Ci0JCWhlYWQgKz0gc2l6ZTsKLQkJaWYgKHVubGlrZWx5KCFwZXJmX291dHB1dF9zcGFjZShkYXRhLCBvZmZzZXQsIGhlYWQpKSkKLQkJCWdvdG8gZmFpbDsKLQl9IHdoaWxlIChhdG9taWNfbG9uZ19jbXB4Y2hnKCZkYXRhLT5oZWFkLCBvZmZzZXQsIGhlYWQpICE9IG9mZnNldCk7Ci0KLQloYW5kbGUtPm9mZnNldAk9IG9mZnNldDsKLQloYW5kbGUtPmhlYWQJPSBoZWFkOwotCi0JaWYgKChvZmZzZXQgPj4gUEFHRV9TSElGVCkgIT0gKGhlYWQgPj4gUEFHRV9TSElGVCkpCi0JCWF0b21pY19zZXQoJmRhdGEtPndha2V1cCwgMSk7Ci0KLQlpZiAoaGF2ZV9sb3N0KSB7Ci0JCWxvc3RfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX0VWRU5UX0xPU1Q7Ci0JCWxvc3RfZXZlbnQuaGVhZGVyLm1pc2MgPSAwOwotCQlsb3N0X2V2ZW50LmhlYWRlci5zaXplID0gc2l6ZW9mKGxvc3RfZXZlbnQpOwotCQlsb3N0X2V2ZW50LmlkICAgICAgICAgID0gY291bnRlci0+aWQ7Ci0JCWxvc3RfZXZlbnQubG9zdCAgICAgICAgPSBhdG9taWNfeGNoZygmZGF0YS0+bG9zdCwgMCk7Ci0KLQkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgbG9zdF9ldmVudCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWZhaWw6Ci0JYXRvbWljX2luYygmZGF0YS0+bG9zdCk7Ci0JcGVyZl9vdXRwdXRfdW5sb2NrKGhhbmRsZSk7Ci1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfZW5kKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gaGFuZGxlLT5jb3VudGVyOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKLQotCWludCB3YWtldXBfZXZlbnRzID0gY291bnRlci0+YXR0ci53YWtldXBfZXZlbnRzOwotCi0JaWYgKGhhbmRsZS0+c2FtcGxlICYmIHdha2V1cF9ldmVudHMpIHsKLQkJaW50IGV2ZW50cyA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5ldmVudHMpOwotCQlpZiAoZXZlbnRzID49IHdha2V1cF9ldmVudHMpIHsKLQkJCWF0b21pY19zdWIod2FrZXVwX2V2ZW50cywgJmRhdGEtPmV2ZW50cyk7Ci0JCQlhdG9taWNfc2V0KCZkYXRhLT53YWtldXAsIDEpOwotCQl9Ci0JfQotCi0JcGVyZl9vdXRwdXRfdW5sb2NrKGhhbmRsZSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB1MzIgcGVyZl9jb3VudGVyX3BpZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JLyoKLQkgKiBvbmx5IHRvcCBsZXZlbCBjb3VudGVycyBoYXZlIHRoZSBwaWQgbmFtZXNwYWNlIHRoZXkgd2VyZSBjcmVhdGVkIGluCi0JICovCi0JaWYgKGNvdW50ZXItPnBhcmVudCkKLQkJY291bnRlciA9IGNvdW50ZXItPnBhcmVudDsKLQotCXJldHVybiB0YXNrX3RnaWRfbnJfbnMocCwgY291bnRlci0+bnMpOwotfQotCi1zdGF0aWMgdTMyIHBlcmZfY291bnRlcl90aWQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCS8qCi0JICogb25seSB0b3AgbGV2ZWwgY291bnRlcnMgaGF2ZSB0aGUgcGlkIG5hbWVzcGFjZSB0aGV5IHdlcmUgY3JlYXRlZCBpbgotCSAqLwotCWlmIChjb3VudGVyLT5wYXJlbnQpCi0JCWNvdW50ZXIgPSBjb3VudGVyLT5wYXJlbnQ7Ci0KLQlyZXR1cm4gdGFza19waWRfbnJfbnMocCwgY291bnRlci0+bnMpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX291dHB1dF9yZWFkX29uZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkJIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JdTY0IHJlYWRfZm9ybWF0ID0gY291bnRlci0+YXR0ci5yZWFkX2Zvcm1hdDsKLQl1NjQgdmFsdWVzWzRdOwotCWludCBuID0gMDsKLQotCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y291bnQpOwotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgewotCQl2YWx1ZXNbbisrXSA9IGNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCArCi0JCQlhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOwotCX0KLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKLQkJdmFsdWVzW24rK10gPSBjb3VudGVyLT50b3RhbF90aW1lX3J1bm5pbmcgKwotCQkJYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKLQl9Ci0JaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCi0JCXZhbHVlc1tuKytdID0gcHJpbWFyeV9jb3VudGVyX2lkKGNvdW50ZXIpOwotCi0JcGVyZl9vdXRwdXRfY29weShoYW5kbGUsIHZhbHVlcywgbiAqIHNpemVvZih1NjQpKTsKLX0KLQotLyoKLSAqIFhYWCBQRVJGX0ZPUk1BVF9HUk9VUCB2cyBpbmhlcml0ZWQgY291bnRlcnMgc2VlbXMgZGlmZmljdWx0LgotICovCi1zdGF0aWMgdm9pZCBwZXJmX291dHB1dF9yZWFkX2dyb3VwKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKLQkJCSAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmxlYWRlciA9IGNvdW50ZXItPmdyb3VwX2xlYWRlciwgKnN1YjsKLQl1NjQgcmVhZF9mb3JtYXQgPSBjb3VudGVyLT5hdHRyLnJlYWRfZm9ybWF0OwotCXU2NCB2YWx1ZXNbNV07Ci0JaW50IG4gPSAwOwotCi0JdmFsdWVzW24rK10gPSAxICsgbGVhZGVyLT5ucl9zaWJsaW5nczsKLQotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkKLQkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfZW5hYmxlZDsKLQotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykKLQkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfcnVubmluZzsKLQotCWlmIChsZWFkZXIgIT0gY291bnRlcikKLQkJbGVhZGVyLT5wbXUtPnJlYWQobGVhZGVyKTsKLQotCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmbGVhZGVyLT5jb3VudCk7Ci0JaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCi0JCXZhbHVlc1tuKytdID0gcHJpbWFyeV9jb3VudGVyX2lkKGxlYWRlcik7Ci0KLQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkgewotCQluID0gMDsKLQotCQlpZiAoc3ViICE9IGNvdW50ZXIpCi0JCQlzdWItPnBtdS0+cmVhZChzdWIpOwotCi0JCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmc3ViLT5jb3VudCk7Ci0JCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQotCQkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2NvdW50ZXJfaWQoc3ViKTsKLQotCQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfcmVhZChzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKGNvdW50ZXItPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkKLQkJcGVyZl9vdXRwdXRfcmVhZF9ncm91cChoYW5kbGUsIGNvdW50ZXIpOwotCWVsc2UKLQkJcGVyZl9vdXRwdXRfcmVhZF9vbmUoaGFuZGxlLCBjb3VudGVyKTsKLX0KLQotdm9pZCBwZXJmX2NvdW50ZXJfb3V0cHV0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBubWksCi0JCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCi17Ci0JaW50IHJldDsKLQl1NjQgc2FtcGxlX3R5cGUgPSBjb3VudGVyLT5hdHRyLnNhbXBsZV90eXBlOwotCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOwotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTY0IGlwOwotCXN0cnVjdCB7Ci0JCXUzMiBwaWQsIHRpZDsKLQl9IHRpZF9lbnRyeTsKLQlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmNhbGxjaGFpbiA9IE5VTEw7Ci0JaW50IGNhbGxjaGFpbl9zaXplID0gMDsKLQl1NjQgdGltZTsKLQlzdHJ1Y3QgewotCQl1MzIgY3B1LCByZXNlcnZlZDsKLQl9IGNwdV9lbnRyeTsKLQotCWhlYWRlci50eXBlID0gUEVSRl9FVkVOVF9TQU1QTEU7Ci0JaGVhZGVyLnNpemUgPSBzaXplb2YoaGVhZGVyKTsKLQotCWhlYWRlci5taXNjID0gMDsKLQloZWFkZXIubWlzYyB8PSBwZXJmX21pc2NfZmxhZ3MoZGF0YS0+cmVncyk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JUCkgewotCQlpcCA9IHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihkYXRhLT5yZWdzKTsKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKGlwKTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpIHsKLQkJLyogbmFtZXNwYWNlIGlzc3VlcyAqLwotCQl0aWRfZW50cnkucGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCBjdXJyZW50KTsKLQkJdGlkX2VudHJ5LnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgY3VycmVudCk7Ci0KLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHRpZF9lbnRyeSk7Ci0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgewotCQkvKgotCQkgKiBNYXliZSBkbyBiZXR0ZXIgb24geDg2IGFuZCBwcm92aWRlIGNwdV9jbG9ja19ubWkoKQotCQkgKi8KLQkJdGltZSA9IHNjaGVkX2Nsb2NrKCk7Ci0KLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQUREUikKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9TVFJFQU1fSUQpCi0JCWhlYWRlci5zaXplICs9IHNpemVvZih1NjQpOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKSB7Ci0JCWhlYWRlci5zaXplICs9IHNpemVvZihjcHVfZW50cnkpOwotCi0JCWNwdV9lbnRyeS5jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQljcHVfZW50cnkucmVzZXJ2ZWQgPSAwOwotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUFEKQotCQloZWFkZXIuc2l6ZSArPSBwZXJmX2NvdW50ZXJfcmVhZF9zaXplKGNvdW50ZXIpOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSB7Ci0JCWNhbGxjaGFpbiA9IHBlcmZfY2FsbGNoYWluKGRhdGEtPnJlZ3MpOwotCi0JCWlmIChjYWxsY2hhaW4pIHsKLQkJCWNhbGxjaGFpbl9zaXplID0gKDEgKyBjYWxsY2hhaW4tPm5yKSAqIHNpemVvZih1NjQpOwotCQkJaGVhZGVyLnNpemUgKz0gY2FsbGNoYWluX3NpemU7Ci0JCX0gZWxzZQotCQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7Ci0JCWludCBzaXplID0gc2l6ZW9mKHUzMik7Ci0KLQkJaWYgKGRhdGEtPnJhdykKLQkJCXNpemUgKz0gZGF0YS0+cmF3LT5zaXplOwotCQllbHNlCi0JCQlzaXplICs9IHNpemVvZih1MzIpOwotCi0JCVdBUk5fT05fT05DRShzaXplICYgKHNpemVvZih1NjQpLTEpKTsKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZTsKLQl9Ci0KLQlyZXQgPSBwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBjb3VudGVyLCBoZWFkZXIuc2l6ZSwgbm1pLCAxKTsKLQlpZiAocmV0KQotCQlyZXR1cm47Ci0KLQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgaGVhZGVyKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKQotCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgaXApOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElEKQotCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgdGlkX2VudHJ5KTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpCi0JCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCB0aW1lKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCi0JCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBkYXRhLT5hZGRyKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lEKSB7Ci0JCXU2NCBpZCA9IHByaW1hcnlfY291bnRlcl9pZChjb3VudGVyKTsKLQotCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgaWQpOwotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKLQkJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIGNvdW50ZXItPmlkKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkKLQkJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIGNwdV9lbnRyeSk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpCi0JCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBkYXRhLT5wZXJpb2QpOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVBRCkKLQkJcGVyZl9vdXRwdXRfcmVhZCgmaGFuZGxlLCBjb3VudGVyKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgewotCQlpZiAoY2FsbGNoYWluKQotCQkJcGVyZl9vdXRwdXRfY29weSgmaGFuZGxlLCBjYWxsY2hhaW4sIGNhbGxjaGFpbl9zaXplKTsKLQkJZWxzZSB7Ci0JCQl1NjQgbnIgPSAwOwotCQkJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIG5yKTsKLQkJfQotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgewotCQlpZiAoZGF0YS0+cmF3KSB7Ci0JCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgZGF0YS0+cmF3LT5zaXplKTsKLQkJCXBlcmZfb3V0cHV0X2NvcHkoJmhhbmRsZSwgZGF0YS0+cmF3LT5kYXRhLCBkYXRhLT5yYXctPnNpemUpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHsKLQkJCQl1MzIJc2l6ZTsKLQkJCQl1MzIJZGF0YTsKLQkJCX0gcmF3ID0gewotCQkJCS5zaXplID0gc2l6ZW9mKHUzMiksCi0JCQkJLmRhdGEgPSAwLAotCQkJfTsKLQkJCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCByYXcpOwotCQl9Ci0JfQotCi0JcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOwotfQotCi0vKgotICogcmVhZCBldmVudAotICovCi0KLXN0cnVjdCBwZXJmX3JlYWRfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0KLQl1MzIJCQkJcGlkOwotCXUzMgkJCQl0aWQ7Ci19OwotCi1zdGF0aWMgdm9pZAotcGVyZl9jb3VudGVyX3JlYWRfZXZlbnQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlzdHJ1Y3QgcGVyZl9yZWFkX2V2ZW50IGV2ZW50ID0gewotCQkuaGVhZGVyID0gewotCQkJLnR5cGUgPSBQRVJGX0VWRU5UX1JFQUQsCi0JCQkubWlzYyA9IDAsCi0JCQkuc2l6ZSA9IHNpemVvZihldmVudCkgKyBwZXJmX2NvdW50ZXJfcmVhZF9zaXplKGNvdW50ZXIpLAotCQl9LAotCQkucGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCB0YXNrKSwKLQkJLnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgdGFzayksCi0JfTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgY291bnRlciwgZXZlbnQuaGVhZGVyLnNpemUsIDAsIDApOwotCWlmIChyZXQpCi0JCXJldHVybjsKLQotCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBldmVudCk7Ci0JcGVyZl9vdXRwdXRfcmVhZCgmaGFuZGxlLCBjb3VudGVyKTsKLQotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLX0KLQotLyoKLSAqIHRhc2sgdHJhY2tpbmcgLS0gZm9yay9leGl0Ci0gKgotICogZW5hYmxlZCBieTogYXR0ci5jb21tIHwgYXR0ci5tbWFwIHwgYXR0ci50YXNrCi0gKi8KLQotc3RydWN0IHBlcmZfdGFza19ldmVudCB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CQkqdGFzazsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQJKnRhc2tfY3R4OwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQotCQl1MzIJCQkJcGlkOwotCQl1MzIJCQkJcHBpZDsKLQkJdTMyCQkJCXRpZDsKLQkJdTMyCQkJCXB0aWQ7Ci0JfSBldmVudDsKLX07Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl90YXNrX291dHB1dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSAgICAgc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlpbnQgc2l6ZSA9IHRhc2tfZXZlbnQtPmV2ZW50LmhlYWRlci5zaXplOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IHRhc2tfZXZlbnQtPnRhc2s7Ci0JaW50IHJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGNvdW50ZXIsIHNpemUsIDAsIDApOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuOwotCi0JdGFza19ldmVudC0+ZXZlbnQucGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCB0YXNrKTsKLQl0YXNrX2V2ZW50LT5ldmVudC5wcGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCBjdXJyZW50KTsKLQotCXRhc2tfZXZlbnQtPmV2ZW50LnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgdGFzayk7Ci0JdGFza19ldmVudC0+ZXZlbnQucHRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgY3VycmVudCk7Ci0KLQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgdGFza19ldmVudC0+ZXZlbnQpOwotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvdW50ZXJfdGFza19tYXRjaChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCWlmIChjb3VudGVyLT5hdHRyLmNvbW0gfHwgY291bnRlci0+YXR0ci5tbWFwIHx8IGNvdW50ZXItPmF0dHIudGFzaykKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJCSAgc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY291bnRlciwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKLQkJaWYgKHBlcmZfY291bnRlcl90YXNrX21hdGNoKGNvdW50ZXIpKQotCQkJcGVyZl9jb3VudGVyX3Rhc2tfb3V0cHV0KGNvdW50ZXIsIHRhc2tfZXZlbnQpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfZXZlbnQoc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gdGFza19ldmVudC0+dGFza19jdHg7Ci0KLQljcHVjdHggPSAmZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0JcGVyZl9jb3VudGVyX3Rhc2tfY3R4KCZjcHVjdHgtPmN0eCwgdGFza19ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKCFjdHgpCi0JCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrX2V2ZW50LT50YXNrLT5wZXJmX2NvdW50ZXJfY3R4cCk7Ci0JaWYgKGN0eCkKLQkJcGVyZl9jb3VudGVyX3Rhc2tfY3R4KGN0eCwgdGFza19ldmVudCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCSAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqdGFza19jdHgsCi0JCQkgICAgICBpbnQgbmV3KQotewotCXN0cnVjdCBwZXJmX3Rhc2tfZXZlbnQgdGFza19ldmVudDsKLQotCWlmICghYXRvbWljX3JlYWQoJm5yX2NvbW1fY291bnRlcnMpICYmCi0JICAgICFhdG9taWNfcmVhZCgmbnJfbW1hcF9jb3VudGVycykgJiYKLQkgICAgIWF0b21pY19yZWFkKCZucl90YXNrX2NvdW50ZXJzKSkKLQkJcmV0dXJuOwotCi0JdGFza19ldmVudCA9IChzdHJ1Y3QgcGVyZl90YXNrX2V2ZW50KXsKLQkJLnRhc2sJICA9IHRhc2ssCi0JCS50YXNrX2N0eCA9IHRhc2tfY3R4LAotCQkuZXZlbnQgICAgPSB7Ci0JCQkuaGVhZGVyID0gewotCQkJCS50eXBlID0gbmV3ID8gUEVSRl9FVkVOVF9GT1JLIDogUEVSRl9FVkVOVF9FWElULAotCQkJCS5taXNjID0gMCwKLQkJCQkuc2l6ZSA9IHNpemVvZih0YXNrX2V2ZW50LmV2ZW50KSwKLQkJCX0sCi0JCQkvKiAucGlkICAqLwotCQkJLyogLnBwaWQgKi8KLQkJCS8qIC50aWQgICovCi0JCQkvKiAucHRpZCAqLwotCQl9LAotCX07Ci0KLQlwZXJmX2NvdW50ZXJfdGFza19ldmVudCgmdGFza19ldmVudCk7Ci19Ci0KLXZvaWQgcGVyZl9jb3VudGVyX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotCXBlcmZfY291bnRlcl90YXNrKHRhc2ssIE5VTEwsIDEpOwotfQotCi0vKgotICogY29tbSB0cmFja2luZwotICovCi0KLXN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgewotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKLQljaGFyCQkJKmNvbW07Ci0JaW50CQkJY29tbV9zaXplOwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQotCQl1MzIJCQkJcGlkOwotCQl1MzIJCQkJdGlkOwotCX0gZXZlbnQ7Ci19OwotCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfY29tbV9vdXRwdXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkgICAgIHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7Ci0JaW50IHNpemUgPSBjb21tX2V2ZW50LT5ldmVudC5oZWFkZXIuc2l6ZTsKLQlpbnQgcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgY291bnRlciwgc2l6ZSwgMCwgMCk7Ci0KLQlpZiAocmV0KQotCQlyZXR1cm47Ci0KLQljb21tX2V2ZW50LT5ldmVudC5waWQgPSBwZXJmX2NvdW50ZXJfcGlkKGNvdW50ZXIsIGNvbW1fZXZlbnQtPnRhc2spOwotCWNvbW1fZXZlbnQtPmV2ZW50LnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgY29tbV9ldmVudC0+dGFzayk7Ci0KLQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgY29tbV9ldmVudC0+ZXZlbnQpOwotCXBlcmZfb3V0cHV0X2NvcHkoJmhhbmRsZSwgY29tbV9ldmVudC0+Y29tbSwKLQkJCQkgICBjb21tX2V2ZW50LT5jb21tX3NpemUpOwotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvdW50ZXJfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCWlmIChjb3VudGVyLT5hdHRyLmNvbW0pCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jb21tX2N0eChzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCwKLQkJCQkgIHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKLQkJcmV0dXJuOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNvdW50ZXIsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChwZXJmX2NvdW50ZXJfY29tbV9tYXRjaChjb3VudGVyKSkKLQkJCXBlcmZfY291bnRlcl9jb21tX291dHB1dChjb3VudGVyLCBjb21tX2V2ZW50KTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jb21tX2V2ZW50KHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07Ci0KLQltZW1zZXQoY29tbSwgMCwgc2l6ZW9mKGNvbW0pKTsKLQlzdHJuY3B5KGNvbW0sIGNvbW1fZXZlbnQtPnRhc2stPmNvbW0sIHNpemVvZihjb21tKSk7Ci0Jc2l6ZSA9IEFMSUdOKHN0cmxlbihjb21tKSsxLCBzaXplb2YodTY0KSk7Ci0KLQljb21tX2V2ZW50LT5jb21tID0gY29tbTsKLQljb21tX2V2ZW50LT5jb21tX3NpemUgPSBzaXplOwotCi0JY29tbV9ldmVudC0+ZXZlbnQuaGVhZGVyLnNpemUgPSBzaXplb2YoY29tbV9ldmVudC0+ZXZlbnQpICsgc2l6ZTsKLQotCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlwZXJmX2NvdW50ZXJfY29tbV9jdHgoJmNwdWN0eC0+Y3R4LCBjb21tX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQkvKgotCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCi0JICogZXZlbnRzIGVuZHMgdXAgaW4uCi0JICovCi0JY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfY291bnRlcl9jdHhwKTsKLQlpZiAoY3R4KQotCQlwZXJmX2NvdW50ZXJfY29tbV9jdHgoY3R4LCBjb21tX2V2ZW50KTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotdm9pZCBwZXJmX2NvdW50ZXJfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0Jc3RydWN0IHBlcmZfY29tbV9ldmVudCBjb21tX2V2ZW50OwotCi0JaWYgKHRhc2stPnBlcmZfY291bnRlcl9jdHhwKQotCQlwZXJmX2NvdW50ZXJfZW5hYmxlX29uX2V4ZWModGFzayk7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZucl9jb21tX2NvdW50ZXJzKSkKLQkJcmV0dXJuOwotCi0JY29tbV9ldmVudCA9IChzdHJ1Y3QgcGVyZl9jb21tX2V2ZW50KXsKLQkJLnRhc2sJPSB0YXNrLAotCQkvKiAuY29tbSAgICAgICovCi0JCS8qIC5jb21tX3NpemUgKi8KLQkJLmV2ZW50ICA9IHsKLQkJCS5oZWFkZXIgPSB7Ci0JCQkJLnR5cGUgPSBQRVJGX0VWRU5UX0NPTU0sCi0JCQkJLm1pc2MgPSAwLAotCQkJCS8qIC5zaXplICovCi0JCQl9LAotCQkJLyogLnBpZCAqLwotCQkJLyogLnRpZCAqLwotCQl9LAotCX07Ci0KLQlwZXJmX2NvdW50ZXJfY29tbV9ldmVudCgmY29tbV9ldmVudCk7Ci19Ci0KLS8qCi0gKiBtbWFwIHRyYWNraW5nCi0gKi8KLQotc3RydWN0IHBlcmZfbW1hcF9ldmVudCB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0CSp2bWE7Ci0KLQljb25zdCBjaGFyCQkqZmlsZV9uYW1lOwotCWludAkJCWZpbGVfc2l6ZTsKLQotCXN0cnVjdCB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0KLQkJdTMyCQkJCXBpZDsKLQkJdTMyCQkJCXRpZDsKLQkJdTY0CQkJCXN0YXJ0OwotCQl1NjQJCQkJbGVuOwotCQl1NjQJCQkJcGdvZmY7Ci0JfSBldmVudDsKLX07Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9tbWFwX291dHB1dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSAgICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlpbnQgc2l6ZSA9IG1tYXBfZXZlbnQtPmV2ZW50LmhlYWRlci5zaXplOwotCWludCByZXQgPSBwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBjb3VudGVyLCBzaXplLCAwLCAwKTsKLQotCWlmIChyZXQpCi0JCXJldHVybjsKLQotCW1tYXBfZXZlbnQtPmV2ZW50LnBpZCA9IHBlcmZfY291bnRlcl9waWQoY291bnRlciwgY3VycmVudCk7Ci0JbW1hcF9ldmVudC0+ZXZlbnQudGlkID0gcGVyZl9jb3VudGVyX3RpZChjb3VudGVyLCBjdXJyZW50KTsKLQotCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBtbWFwX2V2ZW50LT5ldmVudCk7Ci0JcGVyZl9vdXRwdXRfY29weSgmaGFuZGxlLCBtbWFwX2V2ZW50LT5maWxlX25hbWUsCi0JCQkJICAgbW1hcF9ldmVudC0+ZmlsZV9zaXplKTsKLQlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9jb3VudGVyX21tYXBfbWF0Y2goc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkgICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50KQotewotCWlmIChjb3VudGVyLT5hdHRyLm1tYXApCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9tbWFwX2N0eChzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCwKLQkJCQkgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKLQkJcmV0dXJuOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNvdW50ZXIsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChwZXJmX2NvdW50ZXJfbW1hcF9tYXRjaChjb3VudGVyLCBtbWFwX2V2ZW50KSkKLQkJCXBlcmZfY291bnRlcl9tbWFwX291dHB1dChjb3VudGVyLCBtbWFwX2V2ZW50KTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9tbWFwX2V2ZW50KHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1tYXBfZXZlbnQtPnZtYTsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQljaGFyIHRtcFsxNl07Ci0JY2hhciAqYnVmID0gTlVMTDsKLQljb25zdCBjaGFyICpuYW1lOwotCi0JbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCi0JaWYgKGZpbGUpIHsKLQkJLyoKLQkJICogZF9wYXRoIHdvcmtzIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGJhY2t3YXJkcywgc28gd2UKLQkJICogbmVlZCB0byBhZGQgZW5vdWdoIHplcm8gYnl0ZXMgYWZ0ZXIgdGhlIHN0cmluZyB0byBoYW5kbGUKLQkJICogdGhlIDY0Yml0IGFsaWdubWVudCB3ZSBkbyBsYXRlci4KLQkJICovCi0JCWJ1ZiA9IGt6YWxsb2MoUEFUSF9NQVggKyBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghYnVmKSB7Ci0JCQluYW1lID0gc3RybmNweSh0bXAsICIvL2Vub21lbSIsIHNpemVvZih0bXApKTsKLQkJCWdvdG8gZ290X25hbWU7Ci0JCX0KLQkJbmFtZSA9IGRfcGF0aCgmZmlsZS0+Zl9wYXRoLCBidWYsIFBBVEhfTUFYKTsKLQkJaWYgKElTX0VSUihuYW1lKSkgewotCQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiLy90b29sb25nIiwgc2l6ZW9mKHRtcCkpOwotCQkJZ290byBnb3RfbmFtZTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChhcmNoX3ZtYV9uYW1lKG1tYXBfZXZlbnQtPnZtYSkpIHsKLQkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgYXJjaF92bWFfbmFtZShtbWFwX2V2ZW50LT52bWEpLAotCQkJCSAgICAgICBzaXplb2YodG1wKSk7Ci0JCQlnb3RvIGdvdF9uYW1lOwotCQl9Ci0KLQkJaWYgKCF2bWEtPnZtX21tKSB7Ci0JCQluYW1lID0gc3RybmNweSh0bXAsICJbdmRzb10iLCBzaXplb2YodG1wKSk7Ci0JCQlnb3RvIGdvdF9uYW1lOwotCQl9Ci0KLQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiLy9hbm9uIiwgc2l6ZW9mKHRtcCkpOwotCQlnb3RvIGdvdF9uYW1lOwotCX0KLQotZ290X25hbWU6Ci0Jc2l6ZSA9IEFMSUdOKHN0cmxlbihuYW1lKSsxLCBzaXplb2YodTY0KSk7Ci0KLQltbWFwX2V2ZW50LT5maWxlX25hbWUgPSBuYW1lOwotCW1tYXBfZXZlbnQtPmZpbGVfc2l6ZSA9IHNpemU7Ci0KLQltbWFwX2V2ZW50LT5ldmVudC5oZWFkZXIuc2l6ZSA9IHNpemVvZihtbWFwX2V2ZW50LT5ldmVudCkgKyBzaXplOwotCi0JY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCXBlcmZfY291bnRlcl9tbWFwX2N0eCgmY3B1Y3R4LT5jdHgsIG1tYXBfZXZlbnQpOwotCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCS8qCi0JICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKLQkgKiBldmVudHMgZW5kcyB1cCBpbi4KLQkgKi8KLQljdHggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cGVyZl9jb3VudGVyX2N0eHApOwotCWlmIChjdHgpCi0JCXBlcmZfY291bnRlcl9tbWFwX2N0eChjdHgsIG1tYXBfZXZlbnQpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0Ja2ZyZWUoYnVmKTsKLX0KLQotdm9pZCBfX3BlcmZfY291bnRlcl9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBwZXJmX21tYXBfZXZlbnQgbW1hcF9ldmVudDsKLQotCWlmICghYXRvbWljX3JlYWQoJm5yX21tYXBfY291bnRlcnMpKQotCQlyZXR1cm47Ci0KLQltbWFwX2V2ZW50ID0gKHN0cnVjdCBwZXJmX21tYXBfZXZlbnQpewotCQkudm1hCT0gdm1hLAotCQkvKiAuZmlsZV9uYW1lICovCi0JCS8qIC5maWxlX3NpemUgKi8KLQkJLmV2ZW50ICA9IHsKLQkJCS5oZWFkZXIgPSB7Ci0JCQkJLnR5cGUgPSBQRVJGX0VWRU5UX01NQVAsCi0JCQkJLm1pc2MgPSAwLAotCQkJCS8qIC5zaXplICovCi0JCQl9LAotCQkJLyogLnBpZCAqLwotCQkJLyogLnRpZCAqLwotCQkJLnN0YXJ0ICA9IHZtYS0+dm1fc3RhcnQsCi0JCQkubGVuICAgID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJLnBnb2ZmICA9IHZtYS0+dm1fcGdvZmYsCi0JCX0sCi0JfTsKLQotCXBlcmZfY291bnRlcl9tbWFwX2V2ZW50KCZtbWFwX2V2ZW50KTsKLX0KLQotLyoKLSAqIElSUSB0aHJvdHRsZSBsb2dnaW5nCi0gKi8KLQotc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkJdTY0CQkJCXRpbWU7Ci0JCXU2NAkJCQlpZDsKLQkJdTY0CQkJCXN0cmVhbV9pZDsKLQl9IHRocm90dGxlX2V2ZW50ID0gewotCQkuaGVhZGVyID0gewotCQkJLnR5cGUgPSBQRVJGX0VWRU5UX1RIUk9UVExFLAotCQkJLm1pc2MgPSAwLAotCQkJLnNpemUgPSBzaXplb2YodGhyb3R0bGVfZXZlbnQpLAotCQl9LAotCQkudGltZQkJPSBzY2hlZF9jbG9jaygpLAotCQkuaWQJCT0gcHJpbWFyeV9jb3VudGVyX2lkKGNvdW50ZXIpLAotCQkuc3RyZWFtX2lkCT0gY291bnRlci0+aWQsCi0JfTsKLQotCWlmIChlbmFibGUpCi0JCXRocm90dGxlX2V2ZW50LmhlYWRlci50eXBlID0gUEVSRl9FVkVOVF9VTlRIUk9UVExFOwotCi0JcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgY291bnRlciwgc2l6ZW9mKHRocm90dGxlX2V2ZW50KSwgMSwgMCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuOwotCi0JcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIHRocm90dGxlX2V2ZW50KTsKLQlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Ci19Ci0KLS8qCi0gKiBHZW5lcmljIGNvdW50ZXIgb3ZlcmZsb3cgaGFuZGxpbmcsIHNhbXBsaW5nLgotICovCi0KLWludCBwZXJmX2NvdW50ZXJfb3ZlcmZsb3coc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IG5taSwKLQkJCSAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCi17Ci0JaW50IGV2ZW50cyA9IGF0b21pY19yZWFkKCZjb3VudGVyLT5ldmVudF9saW1pdCk7Ci0JaW50IHRocm90dGxlID0gY291bnRlci0+cG11LT51bnRocm90dGxlICE9IE5VTEw7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCWludCByZXQgPSAwOwotCi0JaWYgKCF0aHJvdHRsZSkgewotCQlod2MtPmludGVycnVwdHMrKzsKLQl9IGVsc2UgewotCQlpZiAoaHdjLT5pbnRlcnJ1cHRzICE9IE1BWF9JTlRFUlJVUFRTKSB7Ci0JCQlod2MtPmludGVycnVwdHMrKzsKLQkJCWlmIChIWiAqIGh3Yy0+aW50ZXJydXB0cyA+Ci0JCQkJCSh1NjQpc3lzY3RsX3BlcmZfY291bnRlcl9zYW1wbGVfcmF0ZSkgewotCQkJCWh3Yy0+aW50ZXJydXB0cyA9IE1BWF9JTlRFUlJVUFRTOwotCQkJCXBlcmZfbG9nX3Rocm90dGxlKGNvdW50ZXIsIDApOwotCQkJCXJldCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogS2VlcCByZS1kaXNhYmxpbmcgY291bnRlcnMgZXZlbiB0aG91Z2ggb24gdGhlIHByZXZpb3VzCi0JCQkgKiBwYXNzIHdlIGRpc2FibGVkIGl0IC0ganVzdCBpbiBjYXNlIHdlIHJhY2VkIHdpdGggYQotCQkJICogc2NoZWQtaW4gYW5kIHRoZSBjb3VudGVyIGdvdCBlbmFibGVkIGFnYWluOgotCQkJICovCi0JCQlyZXQgPSAxOwotCQl9Ci0JfQotCi0JaWYgKGNvdW50ZXItPmF0dHIuZnJlcSkgewotCQl1NjQgbm93ID0gc2NoZWRfY2xvY2soKTsKLQkJczY0IGRlbHRhID0gbm93IC0gaHdjLT5mcmVxX3N0YW1wOwotCi0JCWh3Yy0+ZnJlcV9zdGFtcCA9IG5vdzsKLQotCQlpZiAoZGVsdGEgPiAwICYmIGRlbHRhIDwgVElDS19OU0VDKQotCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGNvdW50ZXIsIE5TRUNfUEVSX1NFQyAvIChpbnQpZGVsdGEpOwotCX0KLQotCS8qCi0JICogWFhYIGV2ZW50X2xpbWl0IG1pZ2h0IG5vdCBxdWl0ZSB3b3JrIGFzIGV4cGVjdGVkIG9uIGluaGVyaXRlZAotCSAqIGNvdW50ZXJzCi0JICovCi0KLQljb3VudGVyLT5wZW5kaW5nX2tpbGwgPSBQT0xMX0lOOwotCWlmIChldmVudHMgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmY291bnRlci0+ZXZlbnRfbGltaXQpKSB7Ci0JCXJldCA9IDE7Ci0JCWNvdW50ZXItPnBlbmRpbmdfa2lsbCA9IFBPTExfSFVQOwotCQlpZiAobm1pKSB7Ci0JCQljb3VudGVyLT5wZW5kaW5nX2Rpc2FibGUgPSAxOwotCQkJcGVyZl9wZW5kaW5nX3F1ZXVlKCZjb3VudGVyLT5wZW5kaW5nLAotCQkJCQkgICBwZXJmX3BlbmRpbmdfY291bnRlcik7Ci0JCX0gZWxzZQotCQkJcGVyZl9jb3VudGVyX2Rpc2FibGUoY291bnRlcik7Ci0JfQotCi0JcGVyZl9jb3VudGVyX291dHB1dChjb3VudGVyLCBubWksIGRhdGEpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBHZW5lcmljIHNvZnR3YXJlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUKLSAqLwotCi0vKgotICogV2UgZGlyZWN0bHkgaW5jcmVtZW50IGNvdW50ZXItPmNvdW50IGFuZCBrZWVwIGEgc2Vjb25kIHZhbHVlIGluCi0gKiBjb3VudGVyLT5ody5wZXJpb2RfbGVmdCB0byBjb3VudCBpbnRlcnZhbHMuIFRoaXMgcGVyaW9kIGNvdW50ZXIKLSAqIGlzIGtlcHQgaW4gdGhlIHJhbmdlIFstc2FtcGxlX3BlcmlvZCwgMF0gc28gdGhhdCB3ZSBjYW4gdXNlIHRoZQotICogc2lnbiBhcyB0cmlnZ2VyLgotICovCi0KLXN0YXRpYyB1NjQgcGVyZl9zd2NvdW50ZXJfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQl1NjQgcGVyaW9kID0gaHdjLT5sYXN0X3BlcmlvZDsKLQl1NjQgbnIsIG9mZnNldDsKLQlzNjQgb2xkLCB2YWw7Ci0KLQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwotCi1hZ2FpbjoKLQlvbGQgPSB2YWwgPSBhdG9taWM2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKLQlpZiAodmFsIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQluciA9IGRpdjY0X3U2NChwZXJpb2QgKyB2YWwsIHBlcmlvZCk7Ci0Jb2Zmc2V0ID0gbnIgKiBwZXJpb2Q7Ci0JdmFsIC09IG9mZnNldDsKLQlpZiAoYXRvbWljNjRfY21weGNoZygmaHdjLT5wZXJpb2RfbGVmdCwgb2xkLCB2YWwpICE9IG9sZCkKLQkJZ290byBhZ2FpbjsKLQotCXJldHVybiBucjsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9zd2NvdW50ZXJfb3ZlcmZsb3coc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkgICAgaW50IG5taSwgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCXU2NCBvdmVyZmxvdzsKLQotCWRhdGEtPnBlcmlvZCA9IGNvdW50ZXItPmh3Lmxhc3RfcGVyaW9kOwotCW92ZXJmbG93ID0gcGVyZl9zd2NvdW50ZXJfc2V0X3BlcmlvZChjb3VudGVyKTsKLQotCWlmIChod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpCi0JCXJldHVybjsKLQotCWZvciAoOyBvdmVyZmxvdzsgb3ZlcmZsb3ctLSkgewotCQlpZiAocGVyZl9jb3VudGVyX292ZXJmbG93KGNvdW50ZXIsIG5taSwgZGF0YSkpIHsKLQkJCS8qCi0JCQkgKiBXZSBpbmhpYml0IHRoZSBvdmVyZmxvdyBmcm9tIGhhcHBlbmluZyB3aGVuCi0JCQkgKiBod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMuCi0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3N3Y291bnRlcl91bnRocm90dGxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JLyoKLQkgKiBOb3RoaW5nIHRvIGRvLCB3ZSBhbHJlYWR5IHJlc2V0IGh3Yy0+aW50ZXJydXB0cy4KLQkgKi8KLX0KLQotc3RhdGljIHZvaWQgcGVyZl9zd2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHU2NCBuciwKLQkJCSAgICAgICBpbnQgbm1pLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0KLQlhdG9taWM2NF9hZGQobnIsICZjb3VudGVyLT5jb3VudCk7Ci0KLQlpZiAoIWh3Yy0+c2FtcGxlX3BlcmlvZCkKLQkJcmV0dXJuOwotCi0JaWYgKCFkYXRhLT5yZWdzKQotCQlyZXR1cm47Ci0KLQlpZiAoIWF0b21pYzY0X2FkZF9uZWdhdGl2ZShuciwgJmh3Yy0+cGVyaW9kX2xlZnQpKQotCQlwZXJmX3N3Y291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCBubWksIGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHBlcmZfc3djb3VudGVyX2lzX2NvdW50aW5nKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JLyoKLQkgKiBUaGUgY291bnRlciBpcyBhY3RpdmUsIHdlJ3JlIGdvb2QhCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkUpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBUaGUgY291bnRlciBpcyBvZmYvZXJyb3IsIG5vdCBjb3VudGluZy4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIGNvdW50ZXIgaXMgaW5hY3RpdmUsIGlmIHRoZSBjb250ZXh0IGlzIGFjdGl2ZQotCSAqIHdlJ3JlIHBhcnQgb2YgYSBncm91cCB0aGF0IGRpZG4ndCBtYWtlIGl0IG9uIHRoZSAncG11JywKLQkgKiBub3QgY291bnRpbmcuCi0JICovCi0JaWYgKGNvdW50ZXItPmN0eC0+aXNfYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogV2UncmUgaW5hY3RpdmUgYW5kIHRoZSBjb250ZXh0IGlzIHRvbywgdGhpcyBtZWFucyB0aGUKLQkgKiB0YXNrIGlzIHNjaGVkdWxlZCBvdXQsIHdlJ3JlIGNvdW50aW5nIGV2ZW50cyB0aGF0IGhhcHBlbgotCSAqIHRvIHVzLCBsaWtlIG1pZ3JhdGlvbiBldmVudHMuCi0JICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9zd2NvdW50ZXJfbWF0Y2goc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQllbnVtIHBlcmZfdHlwZV9pZCB0eXBlLAotCQkJCXUzMiBldmVudCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaWYgKCFwZXJmX3N3Y291bnRlcl9pc19jb3VudGluZyhjb3VudGVyKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY291bnRlci0+YXR0ci50eXBlICE9IHR5cGUpCi0JCXJldHVybiAwOwotCWlmIChjb3VudGVyLT5hdHRyLmNvbmZpZyAhPSBldmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocmVncykgewotCQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX3VzZXIgJiYgdXNlcl9tb2RlKHJlZ3MpKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVkZV9rZXJuZWwgJiYgIXVzZXJfbW9kZShyZWdzKSkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3N3Y291bnRlcl9jdHhfZXZlbnQoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JCQkJICAgICBlbnVtIHBlcmZfdHlwZV9pZCB0eXBlLAotCQkJCSAgICAgdTMyIGV2ZW50LCB1NjQgbnIsIGludCBubWksCi0JCQkJICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY291bnRlciwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKLQkJaWYgKHBlcmZfc3djb3VudGVyX21hdGNoKGNvdW50ZXIsIHR5cGUsIGV2ZW50LCBkYXRhLT5yZWdzKSkKLQkJCXBlcmZfc3djb3VudGVyX2FkZChjb3VudGVyLCBuciwgbm1pLCBkYXRhKTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyBpbnQgKnBlcmZfc3djb3VudGVyX3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCi17Ci0JaWYgKGluX25taSgpKQotCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzNdOwotCi0JaWYgKGluX2lycSgpKQotCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzJdOwotCi0JaWYgKGluX3NvZnRpcnEoKSkKLQkJcmV0dXJuICZjcHVjdHgtPnJlY3Vyc2lvblsxXTsKLQotCXJldHVybiAmY3B1Y3R4LT5yZWN1cnNpb25bMF07Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3BlcmZfc3djb3VudGVyX2V2ZW50KGVudW0gcGVyZl90eXBlX2lkIHR5cGUsIHUzMiBldmVudCwKLQkJCQkgICAgdTY0IG5yLCBpbnQgbm1pLAotCQkJCSAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCWludCAqcmVjdXJzaW9uID0gcGVyZl9zd2NvdW50ZXJfcmVjdXJzaW9uX2NvbnRleHQoY3B1Y3R4KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQotCWlmICgqcmVjdXJzaW9uKQotCQlnb3RvIG91dDsKLQotCSgqcmVjdXJzaW9uKSsrOwotCWJhcnJpZXIoKTsKLQotCXBlcmZfc3djb3VudGVyX2N0eF9ldmVudCgmY3B1Y3R4LT5jdHgsIHR5cGUsIGV2ZW50LAotCQkJCSBuciwgbm1pLCBkYXRhKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JLyoKLQkgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggb2YgdGhlIGNoaWxkIGNvbnRleHRzIHRoZQotCSAqIGV2ZW50cyBlbmRzIHVwIGluLgotCSAqLwotCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2NvdW50ZXJfY3R4cCk7Ci0JaWYgKGN0eCkKLQkJcGVyZl9zd2NvdW50ZXJfY3R4X2V2ZW50KGN0eCwgdHlwZSwgZXZlbnQsIG5yLCBubWksIGRhdGEpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JYmFycmllcigpOwotCSgqcmVjdXJzaW9uKS0tOwotCi1vdXQ6Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci19Ci0KLXZvaWQgX19wZXJmX3N3Y291bnRlcl9ldmVudCh1MzIgZXZlbnQsIHU2NCBuciwgaW50IG5taSwKLQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IGFkZHIpCi17Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YSA9IHsKLQkJLnJlZ3MgPSByZWdzLAotCQkuYWRkciA9IGFkZHIsCi0JfTsKLQotCWRvX3BlcmZfc3djb3VudGVyX2V2ZW50KFBFUkZfVFlQRV9TT0ZUV0FSRSwgZXZlbnQsIG5yLCBubWksICZkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9zd2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotfQotCi1zdGF0aWMgaW50IHBlcmZfc3djb3VudGVyX2VuYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQkJcGVyZl9zd2NvdW50ZXJfc2V0X3BlcmlvZChjb3VudGVyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfc3djb3VudGVyX2Rpc2FibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcGVyZl9vcHNfZ2VuZXJpYyA9IHsKLQkuZW5hYmxlCQk9IHBlcmZfc3djb3VudGVyX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHBlcmZfc3djb3VudGVyX2Rpc2FibGUsCi0JLnJlYWQJCT0gcGVyZl9zd2NvdW50ZXJfcmVhZCwKLQkudW50aHJvdHRsZQk9IHBlcmZfc3djb3VudGVyX3VudGhyb3R0bGUsCi19OwotCi0vKgotICogaHJ0aW1lciBiYXNlZCBzd2NvdW50ZXIgY2FsbGJhY2sKLSAqLwotCi1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2NvdW50ZXJfaHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKLXsKLQllbnVtIGhydGltZXJfcmVzdGFydCByZXQgPSBIUlRJTUVSX1JFU1RBUlQ7Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXU2NCBwZXJpb2Q7Ci0KLQljb3VudGVyCT0gY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBwZXJmX2NvdW50ZXIsIGh3LmhydGltZXIpOwotCWNvdW50ZXItPnBtdS0+cmVhZChjb3VudGVyKTsKLQotCWRhdGEuYWRkciA9IDA7Ci0JZGF0YS5yZWdzID0gZ2V0X2lycV9yZWdzKCk7Ci0JLyoKLQkgKiBJbiBjYXNlIHdlIGV4Y2x1ZGUga2VybmVsIElQcyBvciBhcmUgc29tZWhvdyBub3QgaW4gaW50ZXJydXB0Ci0JICogY29udGV4dCwgcHJvdmlkZSB0aGUgbmV4dCBiZXN0IHRoaW5nLCB0aGUgdXNlciBJUC4KLQkgKi8KLQlpZiAoKGNvdW50ZXItPmF0dHIuZXhjbHVkZV9rZXJuZWwgfHwgIWRhdGEucmVncykgJiYKLQkJCSFjb3VudGVyLT5hdHRyLmV4Y2x1ZGVfdXNlcikKLQkJZGF0YS5yZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwotCi0JaWYgKGRhdGEucmVncykgewotCQlpZiAocGVyZl9jb3VudGVyX292ZXJmbG93KGNvdW50ZXIsIDAsICZkYXRhKSkKLQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOwotCX0KLQotCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpOwotCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUocGVyaW9kKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogU29mdHdhcmUgY291bnRlcjogY3B1IHdhbGwgdGltZSBjbG9jawotICovCi0KLXN0YXRpYyB2b2lkIGNwdV9jbG9ja19wZXJmX2NvdW50ZXJfdXBkYXRlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JczY0IHByZXY7Ci0JdTY0IG5vdzsKLQotCW5vdyA9IGNwdV9jbG9jayhjcHUpOwotCXByZXYgPSBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5ody5wcmV2X2NvdW50KTsKLQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIG5vdyk7Ci0JYXRvbWljNjRfYWRkKG5vdyAtIHByZXYsICZjb3VudGVyLT5jb3VudCk7Ci19Ci0KLXN0YXRpYyBpbnQgY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0JaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3djb3VudGVyX2hydGltZXI7Ci0JaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgewotCQl1NjQgcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKLQkJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZod2MtPmhydGltZXIsCi0JCQkJbnNfdG9fa3RpbWUocGVyaW9kKSwgMCwKLQkJCQlIUlRJTUVSX01PREVfUkVMLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZjb3VudGVyLT5ody5ocnRpbWVyKTsKLQljcHVfY2xvY2tfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyKTsKLX0KLQotc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9yZWFkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JY3B1X2Nsb2NrX3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlcik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBlcmZfb3BzX2NwdV9jbG9jayA9IHsKLQkuZW5hYmxlCQk9IGNwdV9jbG9ja19wZXJmX2NvdW50ZXJfZW5hYmxlLAotCS5kaXNhYmxlCT0gY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9kaXNhYmxlLAotCS5yZWFkCQk9IGNwdV9jbG9ja19wZXJmX2NvdW50ZXJfcmVhZCwKLX07Ci0KLS8qCi0gKiBTb2Z0d2FyZSBjb3VudGVyOiB0YXNrIHRpbWUgY2xvY2sKLSAqLwotCi1zdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl91cGRhdGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgdTY0IG5vdykKLXsKLQl1NjQgcHJldjsKLQlzNjQgZGVsdGE7Ci0KLQlwcmV2ID0gYXRvbWljNjRfeGNoZygmY291bnRlci0+aHcucHJldl9jb3VudCwgbm93KTsKLQlkZWx0YSA9IG5vdyAtIHByZXY7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmY291bnRlci0+Y291bnQpOwotfQotCi1zdGF0aWMgaW50IHRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX2VuYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQl1NjQgbm93OwotCi0Jbm93ID0gY291bnRlci0+Y3R4LT50aW1lOwotCi0JYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsIG5vdyk7Ci0JaHJ0aW1lcl9pbml0KCZod2MtPmhydGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JaHdjLT5ocnRpbWVyLmZ1bmN0aW9uID0gcGVyZl9zd2NvdW50ZXJfaHJ0aW1lcjsKLQlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7Ci0JCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOwotCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKLQkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAotCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZjb3VudGVyLT5ody5ocnRpbWVyKTsKLQl0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgY291bnRlci0+Y3R4LT50aW1lKTsKLQotfQotCi1zdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl9yZWFkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JdTY0IHRpbWU7Ci0KLQlpZiAoIWluX25taSgpKSB7Ci0JCXVwZGF0ZV9jb250ZXh0X3RpbWUoY291bnRlci0+Y3R4KTsKLQkJdGltZSA9IGNvdW50ZXItPmN0eC0+dGltZTsKLQl9IGVsc2UgewotCQl1NjQgbm93ID0gcGVyZl9jbG9jaygpOwotCQl1NjQgZGVsdGEgPSBub3cgLSBjb3VudGVyLT5jdHgtPnRpbWVzdGFtcDsKLQkJdGltZSA9IGNvdW50ZXItPmN0eC0+dGltZSArIGRlbHRhOwotCX0KLQotCXRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCB0aW1lKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcGVyZl9vcHNfdGFza19jbG9jayA9IHsKLQkuZW5hYmxlCQk9IHRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX2Rpc2FibGUsCi0JLnJlYWQJCT0gdGFza19jbG9ja19wZXJmX2NvdW50ZXJfcmVhZCwKLX07Ci0KLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQotdm9pZCBwZXJmX3RwY291bnRlcl9ldmVudChpbnQgZXZlbnRfaWQsIHU2NCBhZGRyLCB1NjQgY291bnQsIHZvaWQgKnJlY29yZCwKLQkJCSAgaW50IGVudHJ5X3NpemUpCi17Ci0Jc3RydWN0IHBlcmZfcmF3X3JlY29yZCByYXcgPSB7Ci0JCS5zaXplID0gZW50cnlfc2l6ZSwKLQkJLmRhdGEgPSByZWNvcmQsCi0JfTsKLQotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGEgPSB7Ci0JCS5yZWdzID0gZ2V0X2lycV9yZWdzKCksCi0JCS5hZGRyID0gYWRkciwKLQkJLnJhdyA9ICZyYXcsCi0JfTsKLQotCWlmICghZGF0YS5yZWdzKQotCQlkYXRhLnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7Ci0KLQlkb19wZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX1RZUEVfVFJBQ0VQT0lOVCwgZXZlbnRfaWQsIGNvdW50LCAxLCAmZGF0YSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwZXJmX3RwY291bnRlcl9ldmVudCk7Ci0KLWV4dGVybiBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlKGludCk7Ci1leHRlcm4gdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlKGludCk7Ci0KLXN0YXRpYyB2b2lkIHRwX3BlcmZfY291bnRlcl9kZXN0cm95KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZShjb3VudGVyLT5hdHRyLmNvbmZpZyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11ICp0cF9wZXJmX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCS8qCi0JICogUmF3IHRyYWNlcG9pbnQgZGF0YSBpcyBhIHNldmVyZSBkYXRhIGxlYWssIG9ubHkgYWxsb3cgcm9vdCB0bwotCSAqIGhhdmUgdGhlc2UuCi0JICovCi0JaWYgKChjb3VudGVyLT5hdHRyLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSAmJgotCQkJcGVyZl9wYXJhbm9pZF90cmFjZXBvaW50X3JhdygpICYmCi0JCQkhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKLQotCWlmIChmdHJhY2VfcHJvZmlsZV9lbmFibGUoY291bnRlci0+YXR0ci5jb25maWcpKQotCQlyZXR1cm4gTlVMTDsKLQotCWNvdW50ZXItPmRlc3Ryb3kgPSB0cF9wZXJmX2NvdW50ZXJfZGVzdHJveTsKLQotCXJldHVybiAmcGVyZl9vcHNfZ2VuZXJpYzsKLX0KLSNlbHNlCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBtdSAqdHBfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZgotCi1hdG9taWNfdCBwZXJmX3N3Y291bnRlcl9lbmFibGVkW1BFUkZfQ09VTlRfU1dfTUFYXTsKLQotc3RhdGljIHZvaWQgc3dfcGVyZl9jb3VudGVyX2Rlc3Ryb3koc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQl1NjQgZXZlbnQgPSBjb3VudGVyLT5hdHRyLmNvbmZpZzsKLQotCVdBUk5fT04oY291bnRlci0+cGFyZW50KTsKLQotCWF0b21pY19kZWMoJnBlcmZfc3djb3VudGVyX2VuYWJsZWRbZXZlbnRdKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgKnN3X3BlcmZfY291bnRlcl9pbml0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JY29uc3Qgc3RydWN0IHBtdSAqcG11ID0gTlVMTDsKLQl1NjQgZXZlbnQgPSBjb3VudGVyLT5hdHRyLmNvbmZpZzsKLQotCS8qCi0JICogU29mdHdhcmUgY291bnRlcnMgKGN1cnJlbnRseSkgY2FuJ3QgaW4gZ2VuZXJhbCBkaXN0aW5ndWlzaAotCSAqIGJldHdlZW4gdXNlciwga2VybmVsIGFuZCBoeXBlcnZpc29yIGV2ZW50cy4KLQkgKiBIb3dldmVyLCBjb250ZXh0IHN3aXRjaGVzIGFuZCBjcHUgbWlncmF0aW9ucyBhcmUgY29uc2lkZXJlZAotCSAqIHRvIGJlIGtlcm5lbCBldmVudHMsIGFuZCBwYWdlIGZhdWx0cyBhcmUgbmV2ZXIgaHlwZXJ2aXNvcgotCSAqIGV2ZW50cy4KLQkgKi8KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBQRVJGX0NPVU5UX1NXX0NQVV9DTE9DSzoKLQkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKLQotCQlicmVhazsKLQljYXNlIFBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSzoKLQkJLyoKLQkJICogSWYgdGhlIHVzZXIgaW5zdGFudGlhdGVzIHRoaXMgYXMgYSBwZXItY3B1IGNvdW50ZXIsCi0JCSAqIHVzZSB0aGUgY3B1X2Nsb2NrIGNvdW50ZXIgaW5zdGVhZC4KLQkJICovCi0JCWlmIChjb3VudGVyLT5jdHgtPnRhc2spCi0JCQlwbXUgPSAmcGVyZl9vcHNfdGFza19jbG9jazsKLQkJZWxzZQotCQkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKLQotCQlicmVhazsKLQljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFM6Ci0JY2FzZSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTjoKLQljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKOgotCWNhc2UgUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTOgotCWNhc2UgUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUzoKLQkJaWYgKCFjb3VudGVyLT5wYXJlbnQpIHsKLQkJCWF0b21pY19pbmMoJnBlcmZfc3djb3VudGVyX2VuYWJsZWRbZXZlbnRdKTsKLQkJCWNvdW50ZXItPmRlc3Ryb3kgPSBzd19wZXJmX2NvdW50ZXJfZGVzdHJveTsKLQkJfQotCQlwbXUgPSAmcGVyZl9vcHNfZ2VuZXJpYzsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHBtdTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgY291bnRlciBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXIgKgotcGVyZl9jb3VudGVyX2FsbG9jKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0ciwKLQkJICAgaW50IGNwdSwKLQkJICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JCSAgIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwX2xlYWRlciwKLQkJICAgc3RydWN0IHBlcmZfY291bnRlciAqcGFyZW50X2NvdW50ZXIsCi0JCSAgIGdmcF90IGdmcGZsYWdzKQotewotCWNvbnN0IHN0cnVjdCBwbXUgKnBtdTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YzsKLQlsb25nIGVycjsKLQotCWNvdW50ZXIgPSBremFsbG9jKHNpemVvZigqY291bnRlciksIGdmcGZsYWdzKTsKLQlpZiAoIWNvdW50ZXIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JLyoKLQkgKiBTaW5nbGUgY291bnRlcnMgYXJlIHRoZWlyIG93biBncm91cCBsZWFkZXJzLCB3aXRoIGFuCi0JICogZW1wdHkgc2libGluZyBsaXN0OgotCSAqLwotCWlmICghZ3JvdXBfbGVhZGVyKQotCQlncm91cF9sZWFkZXIgPSBjb3VudGVyOwotCi0JbXV0ZXhfaW5pdCgmY291bnRlci0+Y2hpbGRfbXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb3VudGVyLT5jaGlsZF9saXN0KTsKLQotCUlOSVRfTElTVF9IRUFEKCZjb3VudGVyLT5saXN0X2VudHJ5KTsKLQlJTklUX0xJU1RfSEVBRCgmY291bnRlci0+ZXZlbnRfZW50cnkpOwotCUlOSVRfTElTVF9IRUFEKCZjb3VudGVyLT5zaWJsaW5nX2xpc3QpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvdW50ZXItPndhaXRxKTsKLQotCW11dGV4X2luaXQoJmNvdW50ZXItPm1tYXBfbXV0ZXgpOwotCi0JY291bnRlci0+Y3B1CQk9IGNwdTsKLQljb3VudGVyLT5hdHRyCQk9ICphdHRyOwotCWNvdW50ZXItPmdyb3VwX2xlYWRlcgk9IGdyb3VwX2xlYWRlcjsKLQljb3VudGVyLT5wbXUJCT0gTlVMTDsKLQljb3VudGVyLT5jdHgJCT0gY3R4OwotCWNvdW50ZXItPm9uY3B1CQk9IC0xOwotCi0JY291bnRlci0+cGFyZW50CQk9IHBhcmVudF9jb3VudGVyOwotCi0JY291bnRlci0+bnMJCT0gZ2V0X3BpZF9ucyhjdXJyZW50LT5uc3Byb3h5LT5waWRfbnMpOwotCWNvdW50ZXItPmlkCQk9IGF0b21pYzY0X2luY19yZXR1cm4oJnBlcmZfY291bnRlcl9pZCk7Ci0KLQljb3VudGVyLT5zdGF0ZQkJPSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkU7Ci0KLQlpZiAoYXR0ci0+ZGlzYWJsZWQpCi0JCWNvdW50ZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRjsKLQotCXBtdSA9IE5VTEw7Ci0KLQlod2MgPSAmY291bnRlci0+aHc7Ci0JaHdjLT5zYW1wbGVfcGVyaW9kID0gYXR0ci0+c2FtcGxlX3BlcmlvZDsKLQlpZiAoYXR0ci0+ZnJlcSAmJiBhdHRyLT5zYW1wbGVfZnJlcSkKLQkJaHdjLT5zYW1wbGVfcGVyaW9kID0gMTsKLQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwotCi0JYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOwotCi0JLyoKLQkgKiB3ZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgUEVSRl9GT1JNQVRfR1JPVVAgb24gaW5oZXJpdGVkIGNvdW50ZXJzCi0JICovCi0JaWYgKGF0dHItPmluaGVyaXQgJiYgKGF0dHItPnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApKQotCQlnb3RvIGRvbmU7Ci0KLQlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKLQljYXNlIFBFUkZfVFlQRV9SQVc6Ci0JY2FzZSBQRVJGX1RZUEVfSEFSRFdBUkU6Ci0JY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6Ci0JCXBtdSA9IGh3X3BlcmZfY291bnRlcl9pbml0KGNvdW50ZXIpOwotCQlicmVhazsKLQotCWNhc2UgUEVSRl9UWVBFX1NPRlRXQVJFOgotCQlwbXUgPSBzd19wZXJmX2NvdW50ZXJfaW5pdChjb3VudGVyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZfVFlQRV9UUkFDRVBPSU5UOgotCQlwbXUgPSB0cF9wZXJmX2NvdW50ZXJfaW5pdChjb3VudGVyKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci1kb25lOgotCWVyciA9IDA7Ci0JaWYgKCFwbXUpCi0JCWVyciA9IC1FSU5WQUw7Ci0JZWxzZSBpZiAoSVNfRVJSKHBtdSkpCi0JCWVyciA9IFBUUl9FUlIocG11KTsKLQotCWlmIChlcnIpIHsKLQkJaWYgKGNvdW50ZXItPm5zKQotCQkJcHV0X3BpZF9ucyhjb3VudGVyLT5ucyk7Ci0JCWtmcmVlKGNvdW50ZXIpOwotCQlyZXR1cm4gRVJSX1BUUihlcnIpOwotCX0KLQotCWNvdW50ZXItPnBtdSA9IHBtdTsKLQotCWlmICghY291bnRlci0+cGFyZW50KSB7Ci0JCWF0b21pY19pbmMoJm5yX2NvdW50ZXJzKTsKLQkJaWYgKGNvdW50ZXItPmF0dHIubW1hcCkKLQkJCWF0b21pY19pbmMoJm5yX21tYXBfY291bnRlcnMpOwotCQlpZiAoY291bnRlci0+YXR0ci5jb21tKQotCQkJYXRvbWljX2luYygmbnJfY29tbV9jb3VudGVycyk7Ci0JCWlmIChjb3VudGVyLT5hdHRyLnRhc2spCi0JCQlhdG9taWNfaW5jKCZucl90YXNrX2NvdW50ZXJzKTsKLQl9Ci0KLQlyZXR1cm4gY291bnRlcjsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvcHlfYXR0cihzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgX191c2VyICp1YXR0ciwKLQkJCSAgc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQotewotCWludCByZXQ7Ci0JdTMyIHNpemU7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhdHRyLCBQRVJGX0FUVFJfU0laRV9WRVIwKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSAqIHplcm8gdGhlIGZ1bGwgc3RydWN0dXJlLCBzbyB0aGF0IGEgc2hvcnQgY29weSB3aWxsIGJlIG5pY2UuCi0JICovCi0JbWVtc2V0KGF0dHIsIDAsIHNpemVvZigqYXR0cikpOwotCi0JcmV0ID0gZ2V0X3VzZXIoc2l6ZSwgJnVhdHRyLT5zaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHNpemUgPiBQQUdFX1NJWkUpCS8qIHNpbGx5IGxhcmdlICovCi0JCWdvdG8gZXJyX3NpemU7Ci0KLQlpZiAoIXNpemUpCQkvKiBhYmkgY29tcGF0ICovCi0JCXNpemUgPSBQRVJGX0FUVFJfU0laRV9WRVIwOwotCi0JaWYgKHNpemUgPCBQRVJGX0FUVFJfU0laRV9WRVIwKQotCQlnb3RvIGVycl9zaXplOwotCi0JLyoKLQkgKiBJZiB3ZSdyZSBoYW5kZWQgYSBiaWdnZXIgc3RydWN0IHRoYW4gd2Uga25vdyBvZiwKLQkgKiBlbnN1cmUgYWxsIHRoZSB1bmtub3duIGJpdHMgYXJlIDAuCi0JICovCi0JaWYgKHNpemUgPiBzaXplb2YoKmF0dHIpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdmFsOwotCQl1bnNpZ25lZCBsb25nIF9fdXNlciAqYWRkcjsKLQkJdW5zaWduZWQgbG9uZyBfX3VzZXIgKmVuZDsKLQotCQlhZGRyID0gUFRSX0FMSUdOKCh2b2lkIF9fdXNlciAqKXVhdHRyICsgc2l6ZW9mKCphdHRyKSwKLQkJCQlzaXplb2YodW5zaWduZWQgbG9uZykpOwotCQllbmQgID0gUFRSX0FMSUdOKCh2b2lkIF9fdXNlciAqKXVhdHRyICsgc2l6ZSwKLQkJCQlzaXplb2YodW5zaWduZWQgbG9uZykpOwotCi0JCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyICs9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgewotCQkJcmV0ID0gZ2V0X3VzZXIodmFsLCBhZGRyKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWlmICh2YWwpCi0JCQkJZ290byBlcnJfc2l6ZTsKLQkJfQotCQlzaXplID0gc2l6ZW9mKCphdHRyKTsKLQl9Ci0KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihhdHRyLCB1YXR0ciwgc2l6ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSAqIElmIHRoZSB0eXBlIGV4aXN0cywgdGhlIGNvcnJlc3BvbmRpbmcgY3JlYXRpb24gd2lsbCB2ZXJpZnkKLQkgKiB0aGUgYXR0ci0+Y29uZmlnLgotCSAqLwotCWlmIChhdHRyLT50eXBlID49IFBFUkZfVFlQRV9NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGF0dHItPl9fcmVzZXJ2ZWRfMSB8fCBhdHRyLT5fX3Jlc2VydmVkXzIgfHwgYXR0ci0+X19yZXNlcnZlZF8zKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhdHRyLT5zYW1wbGVfdHlwZSAmIH4oUEVSRl9TQU1QTEVfTUFYLTEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhdHRyLT5yZWFkX2Zvcm1hdCAmIH4oUEVSRl9GT1JNQVRfTUFYLTEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotb3V0OgotCXJldHVybiByZXQ7Ci0KLWVycl9zaXplOgotCXB1dF91c2VyKHNpemVvZigqYXR0ciksICZ1YXR0ci0+c2l6ZSk7Ci0JcmV0ID0gLUUyQklHOwotCWdvdG8gb3V0OwotfQotCi1pbnQgcGVyZl9jb3VudGVyX3NldF9vdXRwdXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IG91dHB1dF9mZCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpvdXRwdXRfY291bnRlciA9IE5VTEw7Ci0Jc3RydWN0IGZpbGUgKm91dHB1dF9maWxlID0gTlVMTDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpvbGRfb3V0cHV0OwotCWludCBmcHV0X25lZWRlZCA9IDA7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIW91dHB1dF9mZCkKLQkJZ290byBzZXQ7Ci0KLQlvdXRwdXRfZmlsZSA9IGZnZXRfbGlnaHQob3V0cHV0X2ZkLCAmZnB1dF9uZWVkZWQpOwotCWlmICghb3V0cHV0X2ZpbGUpCi0JCXJldHVybiAtRUJBREY7Ci0KLQlpZiAob3V0cHV0X2ZpbGUtPmZfb3AgIT0gJnBlcmZfZm9wcykKLQkJZ290byBvdXQ7Ci0KLQlvdXRwdXRfY291bnRlciA9IG91dHB1dF9maWxlLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBEb24ndCBjaGFpbiBvdXRwdXQgZmRzICovCi0JaWYgKG91dHB1dF9jb3VudGVyLT5vdXRwdXQpCi0JCWdvdG8gb3V0OwotCi0JLyogRG9uJ3Qgc2V0IGFuIG91dHB1dCBmZCB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhbiBvdXRwdXQgY2hhbm5lbCAqLwotCWlmIChjb3VudGVyLT5kYXRhKQotCQlnb3RvIG91dDsKLQotCWF0b21pY19sb25nX2luYygmb3V0cHV0X2ZpbGUtPmZfY291bnQpOwotCi1zZXQ6Ci0JbXV0ZXhfbG9jaygmY291bnRlci0+bW1hcF9tdXRleCk7Ci0Jb2xkX291dHB1dCA9IGNvdW50ZXItPm91dHB1dDsKLQlyY3VfYXNzaWduX3BvaW50ZXIoY291bnRlci0+b3V0cHV0LCBvdXRwdXRfY291bnRlcik7Ci0JbXV0ZXhfdW5sb2NrKCZjb3VudGVyLT5tbWFwX211dGV4KTsKLQotCWlmIChvbGRfb3V0cHV0KSB7Ci0JCS8qCi0JCSAqIHdlIG5lZWQgdG8gbWFrZSBzdXJlIG5vIGV4aXN0aW5nIHBlcmZfb3V0cHV0XyooKQotCQkgKiBpcyBzdGlsbCByZWZlcmVuY2luZyB0aGlzIGNvdW50ZXIuCi0JCSAqLwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJZnB1dChvbGRfb3V0cHV0LT5maWxwKTsKLQl9Ci0KLQlyZXQgPSAwOwotb3V0OgotCWZwdXRfbGlnaHQob3V0cHV0X2ZpbGUsIGZwdXRfbmVlZGVkKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHN5c19wZXJmX2NvdW50ZXJfb3BlbiAtIG9wZW4gYSBwZXJmb3JtYW5jZSBjb3VudGVyLCBhc3NvY2lhdGUgaXQgdG8gYSB0YXNrL2NwdQotICoKLSAqIEBhdHRyX3VwdHI6CWV2ZW50IHR5cGUgYXR0cmlidXRlcyBmb3IgbW9uaXRvcmluZy9zYW1wbGluZwotICogQHBpZDoJCXRhcmdldCBwaWQKLSAqIEBjcHU6CQl0YXJnZXQgY3B1Ci0gKiBAZ3JvdXBfZmQ6CQlncm91cCBsZWFkZXIgY291bnRlciBmZAotICovCi1TWVNDQUxMX0RFRklORTUocGVyZl9jb3VudGVyX29wZW4sCi0JCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciBfX3VzZXIgKiwgYXR0cl91cHRyLAotCQlwaWRfdCwgcGlkLCBpbnQsIGNwdSwgaW50LCBncm91cF9mZCwgdW5zaWduZWQgbG9uZywgZmxhZ3MpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgKmdyb3VwX2xlYWRlcjsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgYXR0cjsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3QgZmlsZSAqY291bnRlcl9maWxlID0gTlVMTDsKLQlzdHJ1Y3QgZmlsZSAqZ3JvdXBfZmlsZSA9IE5VTEw7Ci0JaW50IGZwdXRfbmVlZGVkID0gMDsKLQlpbnQgZnB1dF9uZWVkZWQyID0gMDsKLQlpbnQgZXJyOwotCi0JLyogZm9yIGZ1dHVyZSBleHBhbmRhYmlsaXR5Li4uICovCi0JaWYgKGZsYWdzICYgfihQRVJGX0ZMQUdfRkRfTk9fR1JPVVAgfCBQRVJGX0ZMQUdfRkRfT1VUUFVUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllcnIgPSBwZXJmX2NvcHlfYXR0cihhdHRyX3VwdHIsICZhdHRyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFhdHRyLmV4Y2x1ZGVfa2VybmVsKSB7Ci0JCWlmIChwZXJmX3BhcmFub2lkX2tlcm5lbCgpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0JfQotCi0JaWYgKGF0dHIuZnJlcSkgewotCQlpZiAoYXR0ci5zYW1wbGVfZnJlcSA+IHN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIEdldCB0aGUgdGFyZ2V0IGNvbnRleHQgKHRhc2sgb3IgcGVyY3B1KToKLQkgKi8KLQljdHggPSBmaW5kX2dldF9jb250ZXh0KHBpZCwgY3B1KTsKLQlpZiAoSVNfRVJSKGN0eCkpCi0JCXJldHVybiBQVFJfRVJSKGN0eCk7Ci0KLQkvKgotCSAqIExvb2sgdXAgdGhlIGdyb3VwIGxlYWRlciAod2Ugd2lsbCBhdHRhY2ggdGhpcyBjb3VudGVyIHRvIGl0KToKLQkgKi8KLQlncm91cF9sZWFkZXIgPSBOVUxMOwotCWlmIChncm91cF9mZCAhPSAtMSAmJiAhKGZsYWdzICYgUEVSRl9GTEFHX0ZEX05PX0dST1VQKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlncm91cF9maWxlID0gZmdldF9saWdodChncm91cF9mZCwgJmZwdXRfbmVlZGVkKTsKLQkJaWYgKCFncm91cF9maWxlKQotCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7Ci0JCWlmIChncm91cF9maWxlLT5mX29wICE9ICZwZXJmX2ZvcHMpCi0JCQlnb3RvIGVycl9wdXRfY29udGV4dDsKLQotCQlncm91cF9sZWFkZXIgPSBncm91cF9maWxlLT5wcml2YXRlX2RhdGE7Ci0JCS8qCi0JCSAqIERvIG5vdCBhbGxvdyBhIHJlY3Vyc2l2ZSBoaWVyYXJjaHkgKHRoaXMgbmV3IHNpYmxpbmcKLQkJICogYmVjb21pbmcgcGFydCBvZiBhbm90aGVyIGdyb3VwLXNpYmxpbmcpOgotCQkgKi8KLQkJaWYgKGdyb3VwX2xlYWRlci0+Z3JvdXBfbGVhZGVyICE9IGdyb3VwX2xlYWRlcikKLQkJCWdvdG8gZXJyX3B1dF9jb250ZXh0OwotCQkvKgotCQkgKiBEbyBub3QgYWxsb3cgdG8gYXR0YWNoIHRvIGEgZ3JvdXAgaW4gYSBkaWZmZXJlbnQKLQkJICogdGFzayBvciBDUFUgY29udGV4dDoKLQkJICovCi0JCWlmIChncm91cF9sZWFkZXItPmN0eCAhPSBjdHgpCi0JCQlnb3RvIGVycl9wdXRfY29udGV4dDsKLQkJLyoKLQkJICogT25seSBhIGdyb3VwIGxlYWRlciBjYW4gYmUgZXhjbHVzaXZlIG9yIHBpbm5lZAotCQkgKi8KLQkJaWYgKGF0dHIuZXhjbHVzaXZlIHx8IGF0dHIucGlubmVkKQotCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7Ci0JfQotCi0JY291bnRlciA9IHBlcmZfY291bnRlcl9hbGxvYygmYXR0ciwgY3B1LCBjdHgsIGdyb3VwX2xlYWRlciwKLQkJCQkgICAgIE5VTEwsIEdGUF9LRVJORUwpOwotCWVyciA9IFBUUl9FUlIoY291bnRlcik7Ci0JaWYgKElTX0VSUihjb3VudGVyKSkKLQkJZ290byBlcnJfcHV0X2NvbnRleHQ7Ci0KLQllcnIgPSBhbm9uX2lub2RlX2dldGZkKCJbcGVyZl9jb3VudGVyXSIsICZwZXJmX2ZvcHMsIGNvdW50ZXIsIDApOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycl9mcmVlX3B1dF9jb250ZXh0OwotCi0JY291bnRlcl9maWxlID0gZmdldF9saWdodChlcnIsICZmcHV0X25lZWRlZDIpOwotCWlmICghY291bnRlcl9maWxlKQotCQlnb3RvIGVycl9mcmVlX3B1dF9jb250ZXh0OwotCi0JaWYgKGZsYWdzICYgUEVSRl9GTEFHX0ZEX09VVFBVVCkgewotCQllcnIgPSBwZXJmX2NvdW50ZXJfc2V0X291dHB1dChjb3VudGVyLCBncm91cF9mZCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9mcHV0X2ZyZWVfcHV0X2NvbnRleHQ7Ci0JfQotCi0JY291bnRlci0+ZmlscCA9IGNvdW50ZXJfZmlsZTsKLQlXQVJOX09OX09OQ0UoY3R4LT5wYXJlbnRfY3R4KTsKLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKLQlwZXJmX2luc3RhbGxfaW5fY29udGV4dChjdHgsIGNvdW50ZXIsIGNwdSk7Ci0JKytjdHgtPmdlbmVyYXRpb247Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKLQotCWNvdW50ZXItPm93bmVyID0gY3VycmVudDsKLQlnZXRfdGFza19zdHJ1Y3QoY3VycmVudCk7Ci0JbXV0ZXhfbG9jaygmY3VycmVudC0+cGVyZl9jb3VudGVyX211dGV4KTsKLQlsaXN0X2FkZF90YWlsKCZjb3VudGVyLT5vd25lcl9lbnRyeSwgJmN1cnJlbnQtPnBlcmZfY291bnRlcl9saXN0KTsKLQltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfY291bnRlcl9tdXRleCk7Ci0KLWVycl9mcHV0X2ZyZWVfcHV0X2NvbnRleHQ6Ci0JZnB1dF9saWdodChjb3VudGVyX2ZpbGUsIGZwdXRfbmVlZGVkMik7Ci0KLWVycl9mcmVlX3B1dF9jb250ZXh0OgotCWlmIChlcnIgPCAwKQotCQlrZnJlZShjb3VudGVyKTsKLQotZXJyX3B1dF9jb250ZXh0OgotCWlmIChlcnIgPCAwKQotCQlwdXRfY3R4KGN0eCk7Ci0KLQlmcHV0X2xpZ2h0KGdyb3VwX2ZpbGUsIGZwdXRfbmVlZGVkKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBpbmhlcml0IGEgY291bnRlciBmcm9tIHBhcmVudCB0YXNrIHRvIGNoaWxkIHRhc2s6Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGVyZl9jb3VudGVyICoKLWluaGVyaXRfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpwYXJlbnRfY291bnRlciwKLQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKLQkgICAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKnBhcmVudF9jdHgsCi0JICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKLQkgICAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cF9sZWFkZXIsCi0JICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjaGlsZF9jdHgpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY2hpbGRfY291bnRlcjsKLQotCS8qCi0JICogSW5zdGVhZCBvZiBjcmVhdGluZyByZWN1cnNpdmUgaGllcmFyY2hpZXMgb2YgY291bnRlcnMsCi0JICogd2UgbGluayBpbmhlcml0ZWQgY291bnRlcnMgYmFjayB0byB0aGUgb3JpZ2luYWwgcGFyZW50LAotCSAqIHdoaWNoIGhhcyBhIGZpbHAgZm9yIHN1cmUsIHdoaWNoIHdlIHVzZSBhcyB0aGUgcmVmZXJlbmNlCi0JICogY291bnQ6Ci0JICovCi0JaWYgKHBhcmVudF9jb3VudGVyLT5wYXJlbnQpCi0JCXBhcmVudF9jb3VudGVyID0gcGFyZW50X2NvdW50ZXItPnBhcmVudDsKLQotCWNoaWxkX2NvdW50ZXIgPSBwZXJmX2NvdW50ZXJfYWxsb2MoJnBhcmVudF9jb3VudGVyLT5hdHRyLAotCQkJCQkgICBwYXJlbnRfY291bnRlci0+Y3B1LCBjaGlsZF9jdHgsCi0JCQkJCSAgIGdyb3VwX2xlYWRlciwgcGFyZW50X2NvdW50ZXIsCi0JCQkJCSAgIEdGUF9LRVJORUwpOwotCWlmIChJU19FUlIoY2hpbGRfY291bnRlcikpCi0JCXJldHVybiBjaGlsZF9jb3VudGVyOwotCWdldF9jdHgoY2hpbGRfY3R4KTsKLQotCS8qCi0JICogTWFrZSB0aGUgY2hpbGQgc3RhdGUgZm9sbG93IHRoZSBzdGF0ZSBvZiB0aGUgcGFyZW50IGNvdW50ZXIsCi0JICogbm90IGl0cyBhdHRyLmRpc2FibGVkIGJpdC4gIFdlIGhvbGQgdGhlIHBhcmVudCdzIG11dGV4LAotCSAqIHNvIHdlIHdvbid0IHJhY2Ugd2l0aCBwZXJmX2NvdW50ZXJfe2VuLCBkaXN9YWJsZV9mYW1pbHkuCi0JICovCi0JaWYgKHBhcmVudF9jb3VudGVyLT5zdGF0ZSA+PSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpCi0JCWNoaWxkX2NvdW50ZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFOwotCWVsc2UKLQkJY2hpbGRfY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGOwotCi0JaWYgKHBhcmVudF9jb3VudGVyLT5hdHRyLmZyZXEpCi0JCWNoaWxkX2NvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QgPSBwYXJlbnRfY291bnRlci0+aHcuc2FtcGxlX3BlcmlvZDsKLQotCS8qCi0JICogTGluayBpdCB1cCBpbiB0aGUgY2hpbGQncyBjb250ZXh0OgotCSAqLwotCWFkZF9jb3VudGVyX3RvX2N0eChjaGlsZF9jb3VudGVyLCBjaGlsZF9jdHgpOwotCi0JLyoKLQkgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmaWxwIC0gd2Ugd2lsbCBmcHV0IGl0Ci0JICogd2hlbiB0aGUgY2hpbGQgY291bnRlciBleGl0cy4gVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UKLQkgKiB3ZSBhcmUgaW4gdGhlIHBhcmVudCBhbmQgd2Uga25vdyB0aGF0IHRoZSBmaWxwIHN0aWxsCi0JICogZXhpc3RzIGFuZCBoYXMgYSBub256ZXJvIGNvdW50OgotCSAqLwotCWF0b21pY19sb25nX2luYygmcGFyZW50X2NvdW50ZXItPmZpbHAtPmZfY291bnQpOwotCi0JLyoKLQkgKiBMaW5rIHRoaXMgaW50byB0aGUgcGFyZW50IGNvdW50ZXIncyBjaGlsZCBsaXN0Ci0JICovCi0JV0FSTl9PTl9PTkNFKHBhcmVudF9jb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJnBhcmVudF9jb3VudGVyLT5jaGlsZF9tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmY2hpbGRfY291bnRlci0+Y2hpbGRfbGlzdCwgJnBhcmVudF9jb3VudGVyLT5jaGlsZF9saXN0KTsKLQltdXRleF91bmxvY2soJnBhcmVudF9jb3VudGVyLT5jaGlsZF9tdXRleCk7Ci0KLQlyZXR1cm4gY2hpbGRfY291bnRlcjsKLX0KLQotc3RhdGljIGludCBpbmhlcml0X2dyb3VwKHN0cnVjdCBwZXJmX2NvdW50ZXIgKnBhcmVudF9jb3VudGVyLAotCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LAotCSAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqcGFyZW50X2N0eCwKLQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAotCSAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY2hpbGRfY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmxlYWRlcjsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpzdWI7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY2hpbGRfY3RyOwotCi0JbGVhZGVyID0gaW5oZXJpdF9jb3VudGVyKHBhcmVudF9jb3VudGVyLCBwYXJlbnQsIHBhcmVudF9jdHgsCi0JCQkJIGNoaWxkLCBOVUxMLCBjaGlsZF9jdHgpOwotCWlmIChJU19FUlIobGVhZGVyKSkKLQkJcmV0dXJuIFBUUl9FUlIobGVhZGVyKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJnBhcmVudF9jb3VudGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpIHsKLQkJY2hpbGRfY3RyID0gaW5oZXJpdF9jb3VudGVyKHN1YiwgcGFyZW50LCBwYXJlbnRfY3R4LAotCQkJCQkgICAgY2hpbGQsIGxlYWRlciwgY2hpbGRfY3R4KTsKLQkJaWYgKElTX0VSUihjaGlsZF9jdHIpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGRfY3RyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bmNfY2hpbGRfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjaGlsZF9jb3VudGVyLAotCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqcGFyZW50X2NvdW50ZXIgPSBjaGlsZF9jb3VudGVyLT5wYXJlbnQ7Ci0JdTY0IGNoaWxkX3ZhbDsKLQotCWlmIChjaGlsZF9jb3VudGVyLT5hdHRyLmluaGVyaXRfc3RhdCkKLQkJcGVyZl9jb3VudGVyX3JlYWRfZXZlbnQoY2hpbGRfY291bnRlciwgY2hpbGQpOwotCi0JY2hpbGRfdmFsID0gYXRvbWljNjRfcmVhZCgmY2hpbGRfY291bnRlci0+Y291bnQpOwotCi0JLyoKLQkgKiBBZGQgYmFjayB0aGUgY2hpbGQncyBjb3VudCB0byB0aGUgcGFyZW50J3MgY291bnQ6Ci0JICovCi0JYXRvbWljNjRfYWRkKGNoaWxkX3ZhbCwgJnBhcmVudF9jb3VudGVyLT5jb3VudCk7Ci0JYXRvbWljNjRfYWRkKGNoaWxkX2NvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCwKLQkJICAgICAmcGFyZW50X2NvdW50ZXItPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7Ci0JYXRvbWljNjRfYWRkKGNoaWxkX2NvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZywKLQkJICAgICAmcGFyZW50X2NvdW50ZXItPmNoaWxkX3RvdGFsX3RpbWVfcnVubmluZyk7Ci0KLQkvKgotCSAqIFJlbW92ZSB0aGlzIGNvdW50ZXIgZnJvbSB0aGUgcGFyZW50J3MgbGlzdAotCSAqLwotCVdBUk5fT05fT05DRShwYXJlbnRfY291bnRlci0+Y3R4LT5wYXJlbnRfY3R4KTsKLQltdXRleF9sb2NrKCZwYXJlbnRfY291bnRlci0+Y2hpbGRfbXV0ZXgpOwotCWxpc3RfZGVsX2luaXQoJmNoaWxkX2NvdW50ZXItPmNoaWxkX2xpc3QpOwotCW11dGV4X3VubG9jaygmcGFyZW50X2NvdW50ZXItPmNoaWxkX211dGV4KTsKLQotCS8qCi0JICogUmVsZWFzZSB0aGUgcGFyZW50IGNvdW50ZXIsIGlmIHRoaXMgd2FzIHRoZSBsYXN0Ci0JICogcmVmZXJlbmNlIHRvIGl0LgotCSAqLwotCWZwdXQocGFyZW50X2NvdW50ZXItPmZpbHApOwotfQotCi1zdGF0aWMgdm9pZAotX19wZXJmX2NvdW50ZXJfZXhpdF90YXNrKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNoaWxkX2NvdW50ZXIsCi0JCQkgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjaGlsZF9jdHgsCi0JCQkgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpwYXJlbnRfY291bnRlcjsKLQotCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNoaWxkX2NvdW50ZXIpOwotCXBlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0KGNoaWxkX2NvdW50ZXIpOwotCi0JcGFyZW50X2NvdW50ZXIgPSBjaGlsZF9jb3VudGVyLT5wYXJlbnQ7Ci0JLyoKLQkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgcGFyZW50IGV4aXRzIGZpcnN0LCBhbmQgaGFzIGNvdW50ZXJzCi0JICogdGhhdCBhcmUgc3RpbGwgYXJvdW5kIGR1ZSB0byB0aGUgY2hpbGQgcmVmZXJlbmNlLiBUaGVzZQotCSAqIGNvdW50ZXJzIG5lZWQgdG8gYmUgemFwcGVkIC0gYnV0IG90aGVyd2lzZSBsaW5nZXIuCi0JICovCi0JaWYgKHBhcmVudF9jb3VudGVyKSB7Ci0JCXN5bmNfY2hpbGRfY291bnRlcihjaGlsZF9jb3VudGVyLCBjaGlsZCk7Ci0JCWZyZWVfY291bnRlcihjaGlsZF9jb3VudGVyKTsKLQl9Ci19Ci0KLS8qCi0gKiBXaGVuIGEgY2hpbGQgdGFzayBleGl0cywgZmVlZCBiYWNrIGNvdW50ZXIgdmFsdWVzIHRvIHBhcmVudCBjb3VudGVycy4KLSAqLwotdm9pZCBwZXJmX2NvdW50ZXJfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY2hpbGRfY291bnRlciwgKnRtcDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmNoaWxkX2N0eDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGxpa2VseSghY2hpbGQtPnBlcmZfY291bnRlcl9jdHhwKSkgewotCQlwZXJmX2NvdW50ZXJfdGFzayhjaGlsZCwgTlVMTCwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JLyoKLQkgKiBXZSBjYW4ndCByZXNjaGVkdWxlIGhlcmUgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKLQkgKiBhbmQgZWl0aGVyIGNoaWxkIGlzIGN1cnJlbnQgb3IgaXQgaXMgYSB0YXNrIHRoYXQgY2FuJ3QgYmUKLQkgKiBzY2hlZHVsZWQsIHNvIHdlIGFyZSBub3cgc2FmZSBmcm9tIHJlc2NoZWR1bGluZyBjaGFuZ2luZwotCSAqIG91ciBjb250ZXh0LgotCSAqLwotCWNoaWxkX2N0eCA9IGNoaWxkLT5wZXJmX2NvdW50ZXJfY3R4cDsKLQlfX3BlcmZfY291bnRlcl90YXNrX3NjaGVkX291dChjaGlsZF9jdHgpOwotCi0JLyoKLQkgKiBUYWtlIHRoZSBjb250ZXh0IGxvY2sgaGVyZSBzbyB0aGF0IGlmIGZpbmRfZ2V0X2NvbnRleHQgaXMKLQkgKiByZWFkaW5nIGNoaWxkLT5wZXJmX2NvdW50ZXJfY3R4cCwgd2Ugd2FpdCB1bnRpbCBpdCBoYXMKLQkgKiBpbmNyZW1lbnRlZCB0aGUgY29udGV4dCdzIHJlZmNvdW50IGJlZm9yZSB3ZSBkbyBwdXRfY3R4IGJlbG93LgotCSAqLwotCXNwaW5fbG9jaygmY2hpbGRfY3R4LT5sb2NrKTsKLQljaGlsZC0+cGVyZl9jb3VudGVyX2N0eHAgPSBOVUxMOwotCS8qCi0JICogSWYgdGhpcyBjb250ZXh0IGlzIGEgY2xvbmU7IHVuY2xvbmUgaXQgc28gaXQgY2FuJ3QgZ2V0Ci0JICogc3dhcHBlZCB0byBhbm90aGVyIHByb2Nlc3Mgd2hpbGUgd2UncmUgcmVtb3ZpbmcgYWxsCi0JICogdGhlIGNvdW50ZXJzIGZyb20gaXQuCi0JICovCi0JdW5jbG9uZV9jdHgoY2hpbGRfY3R4KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlsZF9jdHgtPmxvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUmVwb3J0IHRoZSB0YXNrIGRlYWQgYWZ0ZXIgdW5zY2hlZHVsaW5nIHRoZSBjb3VudGVycyBzbyB0aGF0IHdlCi0JICogd29uJ3QgZ2V0IGFueSBzYW1wbGVzIGFmdGVyIFBFUkZfRVZFTlRfRVhJVC4gV2UgY2FuIGhvd2V2ZXIgc3RpbGwKLQkgKiBnZXQgYSBmZXcgUEVSRl9FVkVOVF9SRUFEIGV2ZW50cy4KLQkgKi8KLQlwZXJmX2NvdW50ZXJfdGFzayhjaGlsZCwgY2hpbGRfY3R4LCAwKTsKLQotCS8qCi0JICogV2UgY2FuIHJlY3Vyc2Ugb24gdGhlIHNhbWUgbG9jayB0eXBlIHRocm91Z2g6Ci0JICoKLQkgKiAgIF9fcGVyZl9jb3VudGVyX2V4aXRfdGFzaygpCi0JICogICAgIHN5bmNfY2hpbGRfY291bnRlcigpCi0JICogICAgICAgZnB1dChwYXJlbnRfY291bnRlci0+ZmlscCkKLQkgKiAgICAgICAgIHBlcmZfcmVsZWFzZSgpCi0JICogICAgICAgICAgIG11dGV4X2xvY2soJmN0eC0+bXV0ZXgpCi0JICoKLQkgKiBCdXQgc2luY2UgaXRzIHRoZSBwYXJlbnQgY29udGV4dCBpdCB3b24ndCBiZSB0aGUgc2FtZSBpbnN0YW5jZS4KLQkgKi8KLQltdXRleF9sb2NrX25lc3RlZCgmY2hpbGRfY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwotCi1hZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfY291bnRlciwgdG1wLCAmY2hpbGRfY3R4LT5jb3VudGVyX2xpc3QsCi0JCQkJIGxpc3RfZW50cnkpCi0JCV9fcGVyZl9jb3VudGVyX2V4aXRfdGFzayhjaGlsZF9jb3VudGVyLCBjaGlsZF9jdHgsIGNoaWxkKTsKLQotCS8qCi0JICogSWYgdGhlIGxhc3QgY291bnRlciB3YXMgYSBncm91cCBjb3VudGVyLCBpdCB3aWxsIGhhdmUgYXBwZW5kZWQgYWxsCi0JICogaXRzIHNpYmxpbmdzIHRvIHRoZSBsaXN0LCBidXQgd2Ugb2J0YWluZWQgJ3RtcCcgYmVmb3JlIHRoYXQgd2hpY2gKLQkgKiB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBsaXN0IGhlYWQgdGVybWluYXRpbmcgdGhlIGl0ZXJhdGlvbi4KLQkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmNoaWxkX2N0eC0+Y291bnRlcl9saXN0KSkKLQkJZ290byBhZ2FpbjsKLQotCW11dGV4X3VubG9jaygmY2hpbGRfY3R4LT5tdXRleCk7Ci0KLQlwdXRfY3R4KGNoaWxkX2N0eCk7Ci19Ci0KLS8qCi0gKiBmcmVlIGFuIHVuZXhwb3NlZCwgdW51c2VkIGNvbnRleHQgYXMgY3JlYXRlZCBieSBpbmhlcml0YW5jZSBieQotICogaW5pdF90YXNrIGJlbG93LCB1c2VkIGJ5IGZvcmsoKSBpbiBjYXNlIG9mIGZhaWwuCi0gKi8KLXZvaWQgcGVyZl9jb3VudGVyX2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSB0YXNrLT5wZXJmX2NvdW50ZXJfY3R4cDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCAqdG1wOwotCi0JaWYgKCFjdHgpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOwotYWdhaW46Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvdW50ZXIsIHRtcCwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCXN0cnVjdCBwZXJmX2NvdW50ZXIgKnBhcmVudCA9IGNvdW50ZXItPnBhcmVudDsKLQotCQlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQotCQkJY29udGludWU7Ci0KLQkJbXV0ZXhfbG9jaygmcGFyZW50LT5jaGlsZF9tdXRleCk7Ci0JCWxpc3RfZGVsX2luaXQoJmNvdW50ZXItPmNoaWxkX2xpc3QpOwotCQltdXRleF91bmxvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOwotCi0JCWZwdXQocGFyZW50LT5maWxwKTsKLQotCQlsaXN0X2RlbF9jb3VudGVyKGNvdW50ZXIsIGN0eCk7Ci0JCWZyZWVfY291bnRlcihjb3VudGVyKTsKLQl9Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+Y291bnRlcl9saXN0KSkKLQkJZ290byBhZ2FpbjsKLQotCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7Ci0KLQlwdXRfY3R4KGN0eCk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBwZXJmX2NvdW50ZXIgY29udGV4dCBpbiB0YXNrX3N0cnVjdAotICovCi1pbnQgcGVyZl9jb3VudGVyX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY2hpbGRfY3R4LCAqcGFyZW50X2N0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmNsb25lZF9jdHg7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCA9IGN1cnJlbnQ7Ci0JaW50IGluaGVyaXRlZF9hbGwgPSAxOwotCWludCByZXQgPSAwOwotCi0JY2hpbGQtPnBlcmZfY291bnRlcl9jdHhwID0gTlVMTDsKLQotCW11dGV4X2luaXQoJmNoaWxkLT5wZXJmX2NvdW50ZXJfbXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjaGlsZC0+cGVyZl9jb3VudGVyX2xpc3QpOwotCi0JaWYgKGxpa2VseSghcGFyZW50LT5wZXJmX2NvdW50ZXJfY3R4cCkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGlzIGlzIGV4ZWN1dGVkIGZyb20gdGhlIHBhcmVudCB0YXNrIGNvbnRleHQsIHNvIGluaGVyaXQKLQkgKiBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZm9yIGNsb25pbmcuCi0JICogRmlyc3QgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBjb250ZXh0IGZvciB0aGUgY2hpbGQuCi0JICovCi0KLQljaGlsZF9jdHggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNoaWxkX2N0eCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlfX3BlcmZfY291bnRlcl9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7Ci0JY2hpbGQtPnBlcmZfY291bnRlcl9jdHhwID0gY2hpbGRfY3R4OwotCWdldF90YXNrX3N0cnVjdChjaGlsZCk7Ci0KLQkvKgotCSAqIElmIHRoZSBwYXJlbnQncyBjb250ZXh0IGlzIGEgY2xvbmUsIHBpbiBpdCBzbyBpdCB3b24ndCBnZXQKLQkgKiBzd2FwcGVkIHVuZGVyIHVzLgotCSAqLwotCXBhcmVudF9jdHggPSBwZXJmX3Bpbl90YXNrX2NvbnRleHQocGFyZW50KTsKLQotCS8qCi0JICogTm8gbmVlZCB0byBjaGVjayBpZiBwYXJlbnRfY3R4ICE9IE5VTEwgaGVyZTsgc2luY2Ugd2Ugc2F3Ci0JICogaXQgbm9uLU5VTEwgZWFybGllciwgdGhlIG9ubHkgcmVhc29uIGZvciBpdCB0byBiZWNvbWUgTlVMTAotCSAqIGlzIGlmIHdlIGV4aXQsIGFuZCBzaW5jZSB3ZSdyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZgotCSAqIGEgZm9yayB3ZSBjYW4ndCBiZSBleGl0aW5nIGF0IHRoZSBzYW1lIHRpbWUuCi0JICovCi0KLQkvKgotCSAqIExvY2sgdGhlIHBhcmVudCBsaXN0LiBObyBuZWVkIHRvIGxvY2sgdGhlIGNoaWxkIC0gbm90IFBJRAotCSAqIGhhc2hlZCB5ZXQgYW5kIG5vdCBydW5uaW5nLCBzbyBub2JvZHkgY2FuIGFjY2VzcyBpdC4KLQkgKi8KLQltdXRleF9sb2NrKCZwYXJlbnRfY3R4LT5tdXRleCk7Ci0KLQkvKgotCSAqIFdlIGRvbnQgaGF2ZSB0byBkaXNhYmxlIE5NSXMgLSB3ZSBhcmUgb25seSBsb29raW5nIGF0Ci0JICogdGhlIGxpc3QsIG5vdCBtYW5pcHVsYXRpbmcgaXQ6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY291bnRlciwgJnBhcmVudF9jdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChjb3VudGVyICE9IGNvdW50ZXItPmdyb3VwX2xlYWRlcikKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghY291bnRlci0+YXR0ci5pbmhlcml0KSB7Ci0JCQlpbmhlcml0ZWRfYWxsID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmV0ID0gaW5oZXJpdF9ncm91cChjb3VudGVyLCBwYXJlbnQsIHBhcmVudF9jdHgsCi0JCQkJCSAgICAgY2hpbGQsIGNoaWxkX2N0eCk7Ci0JCWlmIChyZXQpIHsKLQkJCWluaGVyaXRlZF9hbGwgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoaW5oZXJpdGVkX2FsbCkgewotCQkvKgotCQkgKiBNYXJrIHRoZSBjaGlsZCBjb250ZXh0IGFzIGEgY2xvbmUgb2YgdGhlIHBhcmVudAotCQkgKiBjb250ZXh0LCBvciBvZiB3aGF0ZXZlciB0aGUgcGFyZW50IGlzIGEgY2xvbmUgb2YuCi0JCSAqIE5vdGUgdGhhdCBpZiB0aGUgcGFyZW50IGlzIGEgY2xvbmUsIGl0IGNvdWxkIGdldAotCQkgKiB1bmNsb25lZCBhdCBhbnkgcG9pbnQsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyCi0JCSAqIGJlY2F1c2UgdGhlIGxpc3Qgb2YgY291bnRlcnMgYW5kIHRoZSBnZW5lcmF0aW9uCi0JCSAqIGNvdW50IGNhbid0IGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSB0b29rIHRoZSBtdXRleC4KLQkJICovCi0JCWNsb25lZF9jdHggPSByY3VfZGVyZWZlcmVuY2UocGFyZW50X2N0eC0+cGFyZW50X2N0eCk7Ci0JCWlmIChjbG9uZWRfY3R4KSB7Ci0JCQljaGlsZF9jdHgtPnBhcmVudF9jdHggPSBjbG9uZWRfY3R4OwotCQkJY2hpbGRfY3R4LT5wYXJlbnRfZ2VuID0gcGFyZW50X2N0eC0+cGFyZW50X2dlbjsKLQkJfSBlbHNlIHsKLQkJCWNoaWxkX2N0eC0+cGFyZW50X2N0eCA9IHBhcmVudF9jdHg7Ci0JCQljaGlsZF9jdHgtPnBhcmVudF9nZW4gPSBwYXJlbnRfY3R4LT5nZW5lcmF0aW9uOwotCQl9Ci0JCWdldF9jdHgoY2hpbGRfY3R4LT5wYXJlbnRfY3R4KTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnBhcmVudF9jdHgtPm11dGV4KTsKLQotCXBlcmZfdW5waW5fY29udGV4dChwYXJlbnRfY3R4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBwZXJmX2NvdW50ZXJfaW5pdF9jcHUoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwotCi0JY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKLQlfX3BlcmZfY291bnRlcl9pbml0X2NvbnRleHQoJmNwdWN0eC0+Y3R4LCBOVUxMKTsKLQotCXNwaW5fbG9jaygmcGVyZl9yZXNvdXJjZV9sb2NrKTsKLQljcHVjdHgtPm1heF9wZXJ0YXNrID0gcGVyZl9tYXhfY291bnRlcnMgLSBwZXJmX3Jlc2VydmVkX3BlcmNwdTsKLQlzcGluX3VubG9jaygmcGVyZl9yZXNvdXJjZV9sb2NrKTsKLQotCWh3X3BlcmZfY291bnRlcl9zZXR1cChjcHUpOwotfQotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgdm9pZCBfX3BlcmZfY291bnRlcl9leGl0X2NwdSh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvdW50ZXIsIHRtcCwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KQotCQlfX3BlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0KGNvdW50ZXIpOwotfQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX2V4aXRfY3B1KGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSAmY3B1Y3R4LT5jdHg7Ci0KLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKLQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3BlcmZfY291bnRlcl9leGl0X2NwdSwgTlVMTCwgMSk7Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX2V4aXRfY3B1KGludCBjcHUpIHsgfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19jcHVpbml0Ci1wZXJmX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKLXsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gKGxvbmcpaGNwdTsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0KLQljYXNlIENQVV9VUF9QUkVQQVJFOgotCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgotCQlwZXJmX2NvdW50ZXJfaW5pdF9jcHUoY3B1KTsKLQkJYnJlYWs7Ci0KLQljYXNlIENQVV9PTkxJTkU6Ci0JY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJaHdfcGVyZl9jb3VudGVyX3NldHVwX29ubGluZShjcHUpOwotCQlicmVhazsKLQotCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKLQljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgotCQlwZXJmX2NvdW50ZXJfZXhpdF9jcHUoY3B1KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gTk9USUZZX09LOwotfQotCi0vKgotICogVGhpcyBoYXMgdG8gaGF2ZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIG1pZ3JhdGlvbl9ub3RpZmllciBpbiBzY2hlZC5jLgotICovCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgcGVyZl9jcHVfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJCT0gcGVyZl9jcHVfbm90aWZ5LAotCS5wcmlvcml0eQkJPSAyMCwKLX07Ci0KLXZvaWQgX19pbml0IHBlcmZfY291bnRlcl9pbml0KHZvaWQpCi17Ci0JcGVyZl9jcHVfbm90aWZ5KCZwZXJmX2NwdV9uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCi0JCQkodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcGVyZl9jcHVfbm90aWZ5KCZwZXJmX2NwdV9uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX09OTElORSwKLQkJCSh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnBlcmZfY3B1X25iKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcGVyZl9zaG93X3Jlc2VydmVfcGVyY3B1KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1KTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXBlcmZfc2V0X3Jlc2VydmVfcGVyY3B1KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAotCQkJY29uc3QgY2hhciAqYnVmLAotCQkJc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IGVyciwgY3B1LCBtcHQ7Ci0KLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWlmICh2YWwgPiBwZXJmX21heF9jb3VudGVycykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7Ci0JcGVyZl9yZXNlcnZlZF9wZXJjcHUgPSB2YWw7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKLQkJc3Bpbl9sb2NrX2lycSgmY3B1Y3R4LT5jdHgubG9jayk7Ci0JCW1wdCA9IG1pbihwZXJmX21heF9jb3VudGVycyAtIGNwdWN0eC0+Y3R4Lm5yX2NvdW50ZXJzLAotCQkJICBwZXJmX21heF9jb3VudGVycyAtIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1KTsKLQkJY3B1Y3R4LT5tYXhfcGVydGFzayA9IG1wdDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjcHVjdHgtPmN0eC5sb2NrKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBlcmZfc2hvd19vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBlcmZfb3ZlcmNvbW1pdCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1wZXJmX3NldF9vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlpZiAodmFsID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7Ci0JcGVyZl9vdmVyY29tbWl0ID0gdmFsOwotCXNwaW5fdW5sb2NrKCZwZXJmX3Jlc291cmNlX2xvY2spOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoCi0JCQkJcmVzZXJ2ZV9wZXJjcHUsCi0JCQkJMDY0NCwKLQkJCQlwZXJmX3Nob3dfcmVzZXJ2ZV9wZXJjcHUsCi0JCQkJcGVyZl9zZXRfcmVzZXJ2ZV9wZXJjcHUKLQkJCSk7Ci0KLXN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUigKLQkJCQlvdmVyY29tbWl0LAotCQkJCTA2NDQsCi0JCQkJcGVyZl9zaG93X292ZXJjb21taXQsCi0JCQkJcGVyZl9zZXRfb3ZlcmNvbW1pdAotCQkJKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBlcmZjbGFzc19hdHRyc1tdID0gewotCSZhdHRyX3Jlc2VydmVfcGVyY3B1LmF0dHIsCi0JJmF0dHJfb3ZlcmNvbW1pdC5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBlcmZjbGFzc19hdHRyX2dyb3VwID0gewotCS5hdHRycwkJCT0gcGVyZmNsYXNzX2F0dHJzLAotCS5uYW1lCQkJPSAicGVyZl9jb3VudGVycyIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwZXJmX2NvdW50ZXJfc3lzZnNfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmNwdV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAotCQkJCSAgJnBlcmZjbGFzc19hdHRyX2dyb3VwKTsKLX0KLWRldmljZV9pbml0Y2FsbChwZXJmX2NvdW50ZXJfc3lzZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmFjNGRiCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMCwwICsxLDUwMDAgQEAKKy8qCisgKiBQZXJmb3JtYW5jZSBldmVudHMgY29yZSBjb2RlOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgIKkgIDIwMDkgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3JwLiA8cGF1bHVzQGF1MS5pYm0uY29tPgorICoKKyAqIEZvciBsaWNlbnNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORworICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKworI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorCisvKgorICogRWFjaCBDUFUgaGFzIGEgbGlzdCBvZiBwZXIgQ1BVIGV2ZW50czoKKyAqLworREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY3B1X2NvbnRleHQsIHBlcmZfY3B1X2NvbnRleHQpOworCitpbnQgcGVyZl9tYXhfZXZlbnRzIF9fcmVhZF9tb3N0bHkgPSAxOworc3RhdGljIGludCBwZXJmX3Jlc2VydmVkX3BlcmNwdSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGludCBwZXJmX292ZXJjb21taXQgX19yZWFkX21vc3RseSA9IDE7CisKK3N0YXRpYyBhdG9taWNfdCBucl9ldmVudHMgX19yZWFkX21vc3RseTsKK3N0YXRpYyBhdG9taWNfdCBucl9tbWFwX2V2ZW50cyBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGF0b21pY190IG5yX2NvbW1fZXZlbnRzIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgYXRvbWljX3QgbnJfdGFza19ldmVudHMgX19yZWFkX21vc3RseTsKKworLyoKKyAqIHBlcmYgZXZlbnQgcGFyYW5vaWEgbGV2ZWw6CisgKiAgLTEgLSBub3QgcGFyYW5vaWQgYXQgYWxsCisgKiAgIDAgLSBkaXNhbGxvdyByYXcgdHJhY2Vwb2ludCBhY2Nlc3MgZm9yIHVucHJpdgorICogICAxIC0gZGlzYWxsb3cgY3B1IGV2ZW50cyBmb3IgdW5wcml2CisgKiAgIDIgLSBkaXNhbGxvdyBrZXJuZWwgcHJvZmlsaW5nIGZvciB1bnByaXYKKyAqLworaW50IHN5c2N0bF9wZXJmX2V2ZW50X3BhcmFub2lkIF9fcmVhZF9tb3N0bHkgPSAxOworCitzdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF90cmFjZXBvaW50X3Jhdyh2b2lkKQoreworCXJldHVybiBzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCA+IC0xOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF9jcHUodm9pZCkKK3sKKwlyZXR1cm4gc3lzY3RsX3BlcmZfZXZlbnRfcGFyYW5vaWQgPiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF9rZXJuZWwodm9pZCkKK3sKKwlyZXR1cm4gc3lzY3RsX3BlcmZfZXZlbnRfcGFyYW5vaWQgPiAxOworfQorCitpbnQgc3lzY3RsX3BlcmZfZXZlbnRfbWxvY2sgX19yZWFkX21vc3RseSA9IDUxMjsgLyogJ2ZyZWUnIGtiIHBlciB1c2VyICovCisKKy8qCisgKiBtYXggcGVyZiBldmVudCBzYW1wbGUgcmF0ZQorICovCitpbnQgc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUgX19yZWFkX21vc3RseSA9IDEwMDAwMDsKKworc3RhdGljIGF0b21pYzY0X3QgcGVyZl9ldmVudF9pZDsKKworLyoKKyAqIExvY2sgZm9yIChzeXNhZG1pbi1jb25maWd1cmFibGUpIGV2ZW50IHJlc2VydmF0aW9uczoKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhwZXJmX3Jlc291cmNlX2xvY2spOworCisvKgorICogQXJjaGl0ZWN0dXJlIHByb3ZpZGVkIEFQSXMgLSB3ZWFrIGFsaWFzZXM6CisgKi8KK2V4dGVybiBfX3dlYWsgY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3dlYWsgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCQl7IGJhcnJpZXIoKTsgfQordm9pZCBfX3dlYWsgaHdfcGVyZl9lbmFibGUodm9pZCkJCXsgYmFycmllcigpOyB9CisKK3ZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXAoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KK3ZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCXsgYmFycmllcigpOyB9CisKK2ludCBfX3dlYWsKK2h3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKKwkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KQoreworCXJldHVybiAwOworfQorCit2b2lkIF9fd2VhayBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpCXsgfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwZXJmX2Rpc2FibGVfY291bnQpOworCit2b2lkIF9fcGVyZl9kaXNhYmxlKHZvaWQpCit7CisJX19nZXRfY3B1X3ZhcihwZXJmX2Rpc2FibGVfY291bnQpKys7Cit9CisKK2Jvb2wgX19wZXJmX2VuYWJsZSh2b2lkKQoreworCXJldHVybiAhLS1fX2dldF9jcHVfdmFyKHBlcmZfZGlzYWJsZV9jb3VudCk7Cit9CisKK3ZvaWQgcGVyZl9kaXNhYmxlKHZvaWQpCit7CisJX19wZXJmX2Rpc2FibGUoKTsKKwlod19wZXJmX2Rpc2FibGUoKTsKK30KKwordm9pZCBwZXJmX2VuYWJsZSh2b2lkKQoreworCWlmIChfX3BlcmZfZW5hYmxlKCkpCisJCWh3X3BlcmZfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9jdHgoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCVdBUk5fT04oIWF0b21pY19pbmNfbm90X3plcm8oJmN0eC0+cmVmY291bnQpKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jdHgoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKworCWN0eCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0LCByY3VfaGVhZCk7CisJa2ZyZWUoY3R4KTsKK30KKworc3RhdGljIHZvaWQgcHV0X2N0eChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmY291bnQpKSB7CisJCWlmIChjdHgtPnBhcmVudF9jdHgpCisJCQlwdXRfY3R4KGN0eC0+cGFyZW50X2N0eCk7CisJCWlmIChjdHgtPnRhc2spCisJCQlwdXRfdGFza19zdHJ1Y3QoY3R4LT50YXNrKTsKKwkJY2FsbF9yY3UoJmN0eC0+cmN1X2hlYWQsIGZyZWVfY3R4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVuY2xvbmVfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoY3R4LT5wYXJlbnRfY3R4KSB7CisJCXB1dF9jdHgoY3R4LT5wYXJlbnRfY3R4KTsKKwkJY3R4LT5wYXJlbnRfY3R4ID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBJZiB3ZSBpbmhlcml0IGV2ZW50cyB3ZSB3YW50IHRvIHJldHVybiB0aGUgcGFyZW50IGV2ZW50IGlkCisgKiB0byB1c2Vyc3BhY2UuCisgKi8KK3N0YXRpYyB1NjQgcHJpbWFyeV9ldmVudF9pZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJdTY0IGlkID0gZXZlbnQtPmlkOworCisJaWYgKGV2ZW50LT5wYXJlbnQpCisJCWlkID0gZXZlbnQtPnBhcmVudC0+aWQ7CisKKwlyZXR1cm4gaWQ7Cit9CisKKy8qCisgKiBHZXQgdGhlIHBlcmZfZXZlbnRfY29udGV4dCBmb3IgYSB0YXNrIGFuZCBsb2NrIGl0LgorICogVGhpcyBoYXMgdG8gY29wZSB3aXRoIHdpdGggdGhlIGZhY3QgdGhhdCB1bnRpbCBpdCBpcyBsb2NrZWQsCisgKiB0aGUgY29udGV4dCBjb3VsZCBnZXQgbW92ZWQgdG8gYW5vdGhlciB0YXNrLgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqCitwZXJmX2xvY2tfdGFza19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCisJcmN1X3JlYWRfbG9jaygpOworIHJldHJ5OgorCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBjb250ZXh0IGlzIGEgY2xvbmUgb2YgYW5vdGhlciwgaXQgbWlnaHQKKwkJICogZ2V0IHN3YXBwZWQgZm9yIGFub3RoZXIgdW5kZXJuZWF0aCB1cyBieQorCQkgKiBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0LCB0aG91Z2ggdGhlCisJCSAqIHJjdV9yZWFkX2xvY2soKSBwcm90ZWN0cyB1cyBmcm9tIGFueSBjb250ZXh0CisJCSAqIGdldHRpbmcgZnJlZWQuICBMb2NrIHRoZSBjb250ZXh0IGFuZCBjaGVjayBpZiBpdAorCQkgKiBnb3Qgc3dhcHBlZCBiZWZvcmUgd2UgY291bGQgZ2V0IHRoZSBsb2NrLCBhbmQgcmV0cnkKKwkJICogaWYgc28uICBJZiB3ZSBsb2NrZWQgdGhlIHJpZ2h0IGNvbnRleHQsIHRoZW4gaXQKKwkJICogY2FuJ3QgZ2V0IHN3YXBwZWQgb24gdXMgYW55IG1vcmUuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOworCQlpZiAoY3R4ICE9IHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5wZXJmX2V2ZW50X2N0eHApKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssICpmbGFncyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisKKwkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdHgtPnJlZmNvdW50KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOworCQkJY3R4ID0gTlVMTDsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY3R4OworfQorCisvKgorICogR2V0IHRoZSBjb250ZXh0IGZvciBhIHRhc2sgYW5kIGluY3JlbWVudCBpdHMgcGluX2NvdW50IHNvIGl0CisgKiBjYW4ndCBnZXQgc3dhcHBlZCB0byBhbm90aGVyIHRhc2suICBUaGlzIGFsc28gaW5jcmVtZW50cyBpdHMKKyAqIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IHRoZSBjb250ZXh0IGNhbid0IGdldCBmcmVlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnBlcmZfcGluX3Rhc2tfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljdHggPSBwZXJmX2xvY2tfdGFza19jb250ZXh0KHRhc2ssICZmbGFncyk7CisJaWYgKGN0eCkgeworCQkrK2N0eC0+cGluX2NvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIGN0eDsKK30KKworc3RhdGljIHZvaWQgcGVyZl91bnBpbl9jb250ZXh0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCS0tY3R4LT5waW5fY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7CisJcHV0X2N0eChjdHgpOworfQorCisvKgorICogQWRkIGEgZXZlbnQgZnJvbSB0aGUgbGlzdHMgZm9yIGl0cyBjb250ZXh0LgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGFuZCBjdHgtPmxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQKK2xpc3RfYWRkX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyOworCisJLyoKKwkgKiBEZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcyBhIHN0YW5kYWxvbmUgb3Igc2libGluZyBldmVudCwKKwkgKiBhZGQgaXQgc3RyYWlnaHQgdG8gdGhlIGNvbnRleHQncyBldmVudCBsaXN0LCBvciB0byB0aGUgZ3JvdXAKKwkgKiBsZWFkZXIncyBzaWJsaW5nIGxpc3Q6CisJICovCisJaWYgKGdyb3VwX2xlYWRlciA9PSBldmVudCkKKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCAmY3R4LT5ncm91cF9saXN0KTsKKwllbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QpOworCQlncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzKys7CisJfQorCisJbGlzdF9hZGRfcmN1KCZldmVudC0+ZXZlbnRfZW50cnksICZjdHgtPmV2ZW50X2xpc3QpOworCWN0eC0+bnJfZXZlbnRzKys7CisJaWYgKGV2ZW50LT5hdHRyLmluaGVyaXRfc3RhdCkKKwkJY3R4LT5ucl9zdGF0Kys7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBldmVudCBmcm9tIHRoZSBsaXN0cyBmb3IgaXRzIGNvbnRleHQuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGN0eC0+bXV0ZXggYW5kIGN0eC0+bG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZAorbGlzdF9kZWxfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnNpYmxpbmcsICp0bXA7CisKKwlpZiAobGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkKKwkJcmV0dXJuOworCWN0eC0+bnJfZXZlbnRzLS07CisJaWYgKGV2ZW50LT5hdHRyLmluaGVyaXRfc3RhdCkKKwkJY3R4LT5ucl9zdGF0LS07CisKKwlsaXN0X2RlbF9pbml0KCZldmVudC0+Z3JvdXBfZW50cnkpOworCWxpc3RfZGVsX3JjdSgmZXZlbnQtPmV2ZW50X2VudHJ5KTsKKworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KQorCQlldmVudC0+Z3JvdXBfbGVhZGVyLT5ucl9zaWJsaW5ncy0tOworCisJLyoKKwkgKiBJZiB0aGlzIHdhcyBhIGdyb3VwIGV2ZW50IHdpdGggc2libGluZyBldmVudHMgdGhlbgorCSAqIHVwZ3JhZGUgdGhlIHNpYmxpbmdzIHRvIHNpbmdsZXRvbiBldmVudHMgYnkgYWRkaW5nIHRoZW0KKwkgKiB0byB0aGUgY29udGV4dCBsaXN0IGRpcmVjdGx5OgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCB0bXAsICZldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCisJCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7CisJCXNpYmxpbmctPmdyb3VwX2xlYWRlciA9IHNpYmxpbmc7CisJfQorfQorCitzdGF0aWMgdm9pZAorZXZlbnRfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47CisKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCWlmIChldmVudC0+cGVuZGluZ19kaXNhYmxlKSB7CisJCWV2ZW50LT5wZW5kaW5nX2Rpc2FibGUgPSAwOworCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKKwl9CisJZXZlbnQtPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOworCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOworCWV2ZW50LT5vbmNwdSA9IC0xOworCisJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCWNwdWN0eC0+YWN0aXZlX29uY3B1LS07CisJY3R4LT5ucl9hY3RpdmUtLTsKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVzaXZlIHx8ICFjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKKwkJY3B1Y3R4LT5leGNsdXNpdmUgPSAwOworfQorCitzdGF0aWMgdm9pZAorZ3JvdXBfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9ldmVudCwKKwkJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWlmIChncm91cF9ldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCisJCXJldHVybjsKKworCWV2ZW50X3NjaGVkX291dChncm91cF9ldmVudCwgY3B1Y3R4LCBjdHgpOworCisJLyoKKwkgKiBTY2hlZHVsZSBvdXQgc2libGluZ3MgKGlmIGFueSk6CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmdyb3VwX2V2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KQorCQlldmVudF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworCWlmIChncm91cF9ldmVudC0+YXR0ci5leGNsdXNpdmUpCisJCWNwdWN0eC0+ZXhjbHVzaXZlID0gMDsKK30KKworLyoKKyAqIENyb3NzIENQVSBjYWxsIHRvIHJlbW92ZSBhIHBlcmZvcm1hbmNlIGV2ZW50CisgKgorICogV2UgZGlzYWJsZSB0aGUgZXZlbnQgb24gdGhlIGhhcmR3YXJlIGxldmVsIGZpcnN0LiBBZnRlciB0aGF0IHdlCisgKiByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCBsaXN0LgorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dCh2b2lkICppbmZvKQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSB0YXNrIGNvbnRleHQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcworCSAqIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dCBvZiB0aGlzIGNwdS4gSWYgbm90IGl0IGhhcyBiZWVuCisJICogc2NoZWR1bGVkIG91dCBiZWZvcmUgdGhlIHNtcCBjYWxsIGFycml2ZWQuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCS8qCisJICogUHJvdGVjdCB0aGUgbGlzdCBvcGVyYXRpb24gYWdhaW5zdCBOTUkgYnkgZGlzYWJsaW5nIHRoZQorCSAqIGV2ZW50cyBvbiBhIGdsb2JhbCBsZXZlbC4KKwkgKi8KKwlwZXJmX2Rpc2FibGUoKTsKKworCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCisJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7CisKKwlpZiAoIWN0eC0+dGFzaykgeworCQkvKgorCQkgKiBBbGxvdyBtb3JlIHBlciB0YXNrIGV2ZW50cyB3aXRoIHJlc3BlY3QgdG8gdGhlCisJCSAqIHJlc2VydmF0aW9uOgorCQkgKi8KKwkJY3B1Y3R4LT5tYXhfcGVydGFzayA9CisJCQltaW4ocGVyZl9tYXhfZXZlbnRzIC0gY3R4LT5ucl9ldmVudHMsCisJCQkgICAgcGVyZl9tYXhfZXZlbnRzIC0gcGVyZl9yZXNlcnZlZF9wZXJjcHUpOworCX0KKworCXBlcmZfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKKworLyoKKyAqIFJlbW92ZSB0aGUgZXZlbnQgZnJvbSBhIHRhc2sncyAob3IgYSBDUFUncykgbGlzdCBvZiBldmVudHMuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGhlbGQuCisgKgorICogQ1BVIGV2ZW50cyBhcmUgcmVtb3ZlZCB3aXRoIGEgc21wIGNhbGwuIEZvciB0YXNrIGV2ZW50cyB3ZSBvbmx5CisgKiBjYWxsIHdoZW4gdGhlIHRhc2sgaXMgb24gYSBDUFUuCisgKgorICogSWYgZXZlbnQtPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKKyAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgZXZlbnQtPmN0eC0+dGFzayBjb3VsZCBwb3NzaWJseSBwb2ludCB0bworICogcmVtYWlucyB2YWxpZC4gIFRoaXMgaXMgT0sgd2hlbiBjYWxsZWQgZnJvbSBwZXJmX3JlbGVhc2Ugc2luY2UKKyAqIHRoYXQgb25seSBjYWxscyB1cyBvbiB0aGUgdG9wLWxldmVsIGNvbnRleHQsIHdoaWNoIGNhbid0IGJlIGEgY2xvbmUuCisgKiBXaGVuIGNhbGxlZCBmcm9tIHBlcmZfZXZlbnRfZXhpdF90YXNrLCBpdCdzIE9LIGJlY2F1c2UgdGhlCisgKiBjb250ZXh0IGhhcyBiZWVuIGRldGFjaGVkIGZyb20gaXRzIHRhc2suCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7CisKKwlpZiAoIXRhc2spIHsKKwkJLyoKKwkJICogUGVyIGNwdSBldmVudHMgYXJlIHJlbW92ZWQgdmlhIGFuIHNtcCBjYWxsIGFuZAorCQkgKiB0aGUgcmVtb3ZhbCBpcyBhbHdheXMgc3VjZXNzZnVsLgorCQkgKi8KKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGV2ZW50LT5jcHUsCisJCQkJCSBfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dCwKKwkJCQkJIGV2ZW50LCAxKTsKKwkJcmV0dXJuOworCX0KKworcmV0cnk6CisJdGFza19vbmNwdV9mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0LAorCQkJCSBldmVudCk7CisKKwlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCS8qCisJICogSWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHNtcCBjYWxsLgorCSAqLworCWlmIChjdHgtPm5yX2FjdGl2ZSAmJiAhbGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkgeworCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CisJCWdvdG8gcmV0cnk7CisJfQorCisJLyoKKwkgKiBUaGUgbG9jayBwcmV2ZW50cyB0aGF0IHRoaXMgY29udGV4dCBpcyBzY2hlZHVsZWQgaW4gc28gd2UKKwkgKiBjYW4gcmVtb3ZlIHRoZSBldmVudCBzYWZlbHksIGlmIHRoZSBjYWxsIGFib3ZlIGRpZCBub3QKKwkgKiBzdWNjZWVkLgorCSAqLworCWlmICghbGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkgeworCQlsaXN0X2RlbF9ldmVudChldmVudCwgY3R4KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCisvKgorICogVXBkYXRlIHRoZSByZWNvcmQgb2YgdGhlIGN1cnJlbnQgdGltZSBpbiBhIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9jb250ZXh0X3RpbWUoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7CisKKwljdHgtPnRpbWUgKz0gbm93IC0gY3R4LT50aW1lc3RhbXA7CisJY3R4LT50aW1lc3RhbXAgPSBub3c7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHRvdGFsX3RpbWVfZW5hYmxlZCBhbmQgdG90YWxfdGltZV9ydW5uaW5nIGZpZWxkcyBmb3IgYSBldmVudC4KKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX2V2ZW50X3RpbWVzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OworCXU2NCBydW5fZW5kOworCisJaWYgKGV2ZW50LT5zdGF0ZSA8IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUgfHwKKwkgICAgZXZlbnQtPmdyb3VwX2xlYWRlci0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQlyZXR1cm47CisKKwlldmVudC0+dG90YWxfdGltZV9lbmFibGVkID0gY3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9lbmFibGVkOworCisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQlydW5fZW5kID0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOworCWVsc2UKKwkJcnVuX2VuZCA9IGN0eC0+dGltZTsKKworCWV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcgPSBydW5fZW5kIC0gZXZlbnQtPnRzdGFtcF9ydW5uaW5nOworfQorCisvKgorICogVXBkYXRlIHRvdGFsX3RpbWVfZW5hYmxlZCBhbmQgdG90YWxfdGltZV9ydW5uaW5nIGZvciBhbGwgZXZlbnRzIGluIGEgZ3JvdXAuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF90aW1lcyhzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCXVwZGF0ZV9ldmVudF90aW1lcyhsZWFkZXIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpCisJCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7Cit9CisKKy8qCisgKiBDcm9zcyBDUFUgY2FsbCB0byBkaXNhYmxlIGEgcGVyZm9ybWFuY2UgZXZlbnQKKyAqLworc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X2Rpc2FibGUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgcGVyLXRhc2sgZXZlbnQsIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzCisJICogZXZlbnQncyB0YXNrIGlzIHRoZSBjdXJyZW50IHRhc2sgb24gdGhpcyBjcHUuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCisJLyoKKwkgKiBJZiB0aGUgZXZlbnQgaXMgb24sIHR1cm4gaXQgb2ZmLgorCSAqIElmIGl0IGlzIGluIGVycm9yIHN0YXRlLCBsZWF2ZSBpdCBpbiBlcnJvciBzdGF0ZS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOworCQl1cGRhdGVfZ3JvdXBfdGltZXMoZXZlbnQpOworCQlpZiAoZXZlbnQgPT0gZXZlbnQtPmdyb3VwX2xlYWRlcikKKwkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCQllbHNlCisJCQlldmVudF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKwkJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CisJfQorCisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIGEgZXZlbnQuCisgKgorICogSWYgZXZlbnQtPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKKyAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgZXZlbnQtPmN0eC0+dGFzayBjb3VsZCBwb3NzaWJseSBwb2ludCB0bworICogcmVtYWlucyB2YWxpZC4gIFRoaXMgY29uZGl0aW9uIGlzIHNhdGlzaWZlZCB3aGVuIGNhbGxlZCB0aHJvdWdoCisgKiBwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkIG9yIHBlcmZfZXZlbnRfZm9yX2VhY2ggYmVjYXVzZSB0aGV5CisgKiBob2xkIHRoZSB0b3AtbGV2ZWwgZXZlbnQncyBjaGlsZF9tdXRleCwgc28gYW55IGRlc2NlbmRhbnQgdGhhdAorICogZ29lcyB0byBleGl0IHdpbGwgYmxvY2sgaW4gc3luY19jaGlsZF9ldmVudC4KKyAqIFdoZW4gY2FsbGVkIGZyb20gcGVyZl9wZW5kaW5nX2V2ZW50IGl0J3MgT0sgYmVjYXVzZSBldmVudC0+Y3R4CisgKiBpcyB0aGUgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgQ1BVIGFuZCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLAorICogaGVuY2Ugd2UgY2FuJ3QgZ2V0IGludG8gcGVyZl9ldmVudF90YXNrX3NjaGVkX291dCBmb3IgdGhpcyBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3R4LT50YXNrOworCisJaWYgKCF0YXNrKSB7CisJCS8qCisJCSAqIERpc2FibGUgdGhlIGV2ZW50IG9uIHRoZSBjcHUgdGhhdCBpdCdzIG9uCisJCSAqLworCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoZXZlbnQtPmNwdSwgX19wZXJmX2V2ZW50X2Rpc2FibGUsCisJCQkJCSBldmVudCwgMSk7CisJCXJldHVybjsKKwl9CisKKyByZXRyeToKKwl0YXNrX29uY3B1X2Z1bmN0aW9uX2NhbGwodGFzaywgX19wZXJmX2V2ZW50X2Rpc2FibGUsIGV2ZW50KTsKKworCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CisJLyoKKwkgKiBJZiB0aGUgZXZlbnQgaXMgc3RpbGwgYWN0aXZlLCB3ZSBuZWVkIHRvIHJldHJ5IHRoZSBjcm9zcy1jYWxsLgorCSAqLworCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworCQlnb3RvIHJldHJ5OworCX0KKworCS8qCisJICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCisJICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJdXBkYXRlX2dyb3VwX3RpbWVzKGV2ZW50KTsKKwkJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworfQorCitzdGF0aWMgaW50CitldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCSBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkgaW50IGNwdSkKK3sKKwlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQlyZXR1cm4gMDsKKworCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOworCWV2ZW50LT5vbmNwdSA9IGNwdTsJLyogVE9ETzogcHV0ICdjcHUnIGludG8gY3B1Y3R4LT5jcHUgKi8KKwkvKgorCSAqIFRoZSBuZXcgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0dXJuIGl0IG9uIGluIHRoZSBoYXJkd2FyZToKKwkgKi8KKwlzbXBfd21iKCk7CisKKwlpZiAoZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KSkgeworCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCQlldmVudC0+b25jcHUgPSAtMTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKKworCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQljcHVjdHgtPmFjdGl2ZV9vbmNwdSsrOworCWN0eC0+bnJfYWN0aXZlKys7CisKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVzaXZlKQorCQljcHVjdHgtPmV4Y2x1c2l2ZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2V2ZW50LAorCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJICAgICAgIGludCBjcHUpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqcGFydGlhbF9ncm91cDsKKwlpbnQgcmV0OworCisJaWYgKGdyb3VwX2V2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBod19wZXJmX2dyb3VwX3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisKKwlpZiAoZXZlbnRfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCS8qCisJICogU2NoZWR1bGUgaW4gc2libGluZ3MgYXMgb25lIGdyb3VwIChpZiBhbnkpOgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZncm91cF9ldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKSB7CisJCQlwYXJ0aWFsX2dyb3VwID0gZXZlbnQ7CisJCQlnb3RvIGdyb3VwX2Vycm9yOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2dyb3VwX2Vycm9yOgorCS8qCisJICogR3JvdXBzIGNhbiBiZSBzY2hlZHVsZWQgaW4gYXMgb25lIHVuaXQgb25seSwgc28gdW5kbyBhbnkKKwkgKiBwYXJ0aWFsIGdyb3VwIGJlZm9yZSByZXR1cm5pbmc6CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmdyb3VwX2V2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChldmVudCA9PSBwYXJ0aWFsX2dyb3VwKQorCQkJYnJlYWs7CisJCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCX0KKwlldmVudF9zY2hlZF9vdXQoZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworCXJldHVybiAtRUFHQUlOOworfQorCisvKgorICogUmV0dXJuIDEgZm9yIGEgZ3JvdXAgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBldmVudHMsCisgKiAwIGlmIHRoZSBncm91cCBjb250YWlucyBhbnkgaGFyZHdhcmUgZXZlbnRzLgorICovCitzdGF0aWMgaW50IGlzX3NvZnR3YXJlX29ubHlfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlcikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGxlYWRlcikpCisJCXJldHVybiAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKKwkJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogV29yayBvdXQgd2hldGhlciB3ZSBjYW4gcHV0IHRoaXMgZXZlbnQgZ3JvdXAgb24gdGhlIENQVSBub3cuCisgKi8KK3N0YXRpYyBpbnQgZ3JvdXBfY2FuX2dvX29uKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJCQkgICBpbnQgY2FuX2FkZF9odykKK3sKKwkvKgorCSAqIEdyb3VwcyBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHNvZnR3YXJlIGV2ZW50cyBjYW4gYWx3YXlzIGdvIG9uLgorCSAqLworCWlmIChpc19zb2Z0d2FyZV9vbmx5X2dyb3VwKGV2ZW50KSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBJZiBhbiBleGNsdXNpdmUgZ3JvdXAgaXMgYWxyZWFkeSBvbiwgbm8gb3RoZXIgaGFyZHdhcmUKKwkgKiBldmVudHMgY2FuIGdvIG9uLgorCSAqLworCWlmIChjcHVjdHgtPmV4Y2x1c2l2ZSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBJZiB0aGlzIGdyb3VwIGlzIGV4Y2x1c2l2ZSBhbmQgdGhlcmUgYXJlIGFscmVhZHkKKwkgKiBldmVudHMgb24gdGhlIENQVSwgaXQgY2FuJ3QgZ28gb24uCisJICovCisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1c2l2ZSAmJiBjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBPdGhlcndpc2UsIHRyeSB0byBhZGQgaXQgaWYgYWxsIHByZXZpb3VzIGdyb3VwcyB3ZXJlIGFibGUKKwkgKiB0byBnbyBvbi4KKwkgKi8KKwlyZXR1cm4gY2FuX2FkZF9odzsKK30KKworc3RhdGljIHZvaWQgYWRkX2V2ZW50X3RvX2N0eChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCWxpc3RfYWRkX2V2ZW50KGV2ZW50LCBjdHgpOworCWV2ZW50LT50c3RhbXBfZW5hYmxlZCA9IGN0eC0+dGltZTsKKwlldmVudC0+dHN0YW1wX3J1bm5pbmcgPSBjdHgtPnRpbWU7CisJZXZlbnQtPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOworfQorCisvKgorICogQ3Jvc3MgQ1BVIGNhbGwgdG8gaW5zdGFsbCBhbmQgZW5hYmxlIGEgcGVyZm9ybWFuY2UgZXZlbnQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGN0eC0+bXV0ZXggaGVsZAorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfaW5zdGFsbF9pbl9jb250ZXh0KHZvaWQgKmluZm8pCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGluZm87CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBlcnI7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSB0YXNrIGNvbnRleHQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcworCSAqIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dCBvZiB0aGlzIGNwdS4gSWYgbm90IGl0IGhhcyBiZWVuCisJICogc2NoZWR1bGVkIG91dCBiZWZvcmUgdGhlIHNtcCBjYWxsIGFycml2ZWQuCisJICogT3IgcG9zc2libHkgdGhpcyBpcyB0aGUgcmlnaHQgY29udGV4dCBidXQgaXQgaXNuJ3QKKwkgKiBvbiB0aGlzIGNwdSBiZWNhdXNlIGl0IGhhZCBubyBldmVudHMuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkgeworCQlpZiAoY3B1Y3R4LT50YXNrX2N0eCB8fCBjdHgtPnRhc2sgIT0gY3VycmVudCkKKwkJCXJldHVybjsKKwkJY3B1Y3R4LT50YXNrX2N0eCA9IGN0eDsKKwl9CisKKwlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJY3R4LT5pc19hY3RpdmUgPSAxOworCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKKworCS8qCisJICogUHJvdGVjdCB0aGUgbGlzdCBvcGVyYXRpb24gYWdhaW5zdCBOTUkgYnkgZGlzYWJsaW5nIHRoZQorCSAqIGV2ZW50cyBvbiBhIGdsb2JhbCBsZXZlbC4gTk9QIGZvciBub24gTk1JIGJhc2VkIGV2ZW50cy4KKwkgKi8KKwlwZXJmX2Rpc2FibGUoKTsKKworCWFkZF9ldmVudF90b19jdHgoZXZlbnQsIGN0eCk7CisKKwkvKgorCSAqIERvbid0IHB1dCB0aGUgZXZlbnQgb24gaWYgaXQgaXMgZGlzYWJsZWQgb3IgaWYKKwkgKiBpdCBpcyBpbiBhIGdyb3VwIGFuZCB0aGUgZ3JvdXAgaXNuJ3Qgb24uCisJICovCisJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFIHx8CisJICAgIChsZWFkZXIgIT0gZXZlbnQgJiYgbGVhZGVyLT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkpCisJCWdvdG8gdW5sb2NrOworCisJLyoKKwkgKiBBbiBleGNsdXNpdmUgZXZlbnQgY2FuJ3QgZ28gb24gaWYgdGhlcmUgYXJlIGFscmVhZHkgYWN0aXZlCisJICogaGFyZHdhcmUgZXZlbnRzLCBhbmQgbm8gaGFyZHdhcmUgZXZlbnQgY2FuIGdvIG9uIGlmIHRoZXJlCisJICogaXMgYWxyZWFkeSBhbiBleGNsdXNpdmUgZXZlbnQgb24uCisJICovCisJaWYgKCFncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCisJCWVyciA9IC1FRVhJU1Q7CisJZWxzZQorCQllcnIgPSBldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7CisKKwlpZiAoZXJyKSB7CisJCS8qCisJCSAqIFRoaXMgZXZlbnQgY291bGRuJ3QgZ28gb24uICBJZiBpdCBpcyBpbiBhIGdyb3VwCisJCSAqIHRoZW4gd2UgaGF2ZSB0byBwdWxsIHRoZSB3aG9sZSBncm91cCBvZmYuCisJCSAqIElmIHRoZSBldmVudCBncm91cCBpcyBwaW5uZWQgdGhlbiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCisJCSAqLworCQlpZiAobGVhZGVyICE9IGV2ZW50KQorCQkJZ3JvdXBfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4LCBjdHgpOworCQlpZiAobGVhZGVyLT5hdHRyLnBpbm5lZCkgeworCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGxlYWRlcik7CisJCQlsZWFkZXItPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9FUlJPUjsKKwkJfQorCX0KKworCWlmICghZXJyICYmICFjdHgtPnRhc2sgJiYgY3B1Y3R4LT5tYXhfcGVydGFzaykKKwkJY3B1Y3R4LT5tYXhfcGVydGFzay0tOworCisgdW5sb2NrOgorCXBlcmZfZW5hYmxlKCk7CisKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKK30KKworLyoKKyAqIEF0dGFjaCBhIHBlcmZvcm1hbmNlIGV2ZW50IHRvIGEgY29udGV4dAorICoKKyAqIEZpcnN0IHdlIGFkZCB0aGUgZXZlbnQgdG8gdGhlIGxpc3Qgd2l0aCB0aGUgaGFyZHdhcmUgZW5hYmxlIGJpdAorICogaW4gZXZlbnQtPmh3X2NvbmZpZyBjbGVhcmVkLgorICoKKyAqIElmIHRoZSBldmVudCBpcyBhdHRhY2hlZCB0byBhIHRhc2sgd2hpY2ggaXMgb24gYSBDUFUgd2UgdXNlIGEgc21wCisgKiBjYWxsIHRvIGVuYWJsZSBpdCBpbiB0aGUgdGFzayBjb250ZXh0LiBUaGUgdGFzayBtaWdodCBoYXZlIGJlZW4KKyAqIHNjaGVkdWxlZCBhd2F5LCBidXQgd2UgY2hlY2sgdGhpcyBpbiB0aGUgc21wIGNhbGwgYWdhaW4uCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkCitwZXJmX2luc3RhbGxfaW5fY29udGV4dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQlpbnQgY3B1KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN0eC0+dGFzazsKKworCWlmICghdGFzaykgeworCQkvKgorCQkgKiBQZXIgY3B1IGV2ZW50cyBhcmUgaW5zdGFsbGVkIHZpYSBhbiBzbXAgY2FsbCBhbmQKKwkJICogdGhlIGluc3RhbGwgaXMgYWx3YXlzIHN1Y2Vzc2Z1bC4KKwkJICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQsCisJCQkJCSBldmVudCwgMSk7CisJCXJldHVybjsKKwl9CisKK3JldHJ5OgorCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfaW5zdGFsbF9pbl9jb250ZXh0LAorCQkJCSBldmVudCk7CisKKwlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCS8qCisJICogd2UgbmVlZCB0byByZXRyeSB0aGUgc21wIGNhbGwuCisJICovCisJaWYgKGN0eC0+aXNfYWN0aXZlICYmIGxpc3RfZW1wdHkoJmV2ZW50LT5ncm91cF9lbnRyeSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworCQlnb3RvIHJldHJ5OworCX0KKworCS8qCisJICogVGhlIGxvY2sgcHJldmVudHMgdGhhdCB0aGlzIGNvbnRleHQgaXMgc2NoZWR1bGVkIGluIHNvIHdlCisJICogY2FuIGFkZCB0aGUgZXZlbnQgc2FmZWx5LCBpZiBpdCB0aGUgY2FsbCBhYm92ZSBkaWQgbm90CisJICogc3VjY2VlZC4KKwkgKi8KKwlpZiAobGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkKKwkJYWRkX2V2ZW50X3RvX2N0eChldmVudCwgY3R4KTsKKwlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Cit9CisKKy8qCisgKiBQdXQgYSBldmVudCBpbnRvIGluYWN0aXZlIHN0YXRlIGFuZCB1cGRhdGUgdGltZSBmaWVsZHMuCisgKiBFbmFibGluZyB0aGUgbGVhZGVyIG9mIGEgZ3JvdXAgZWZmZWN0aXZlbHkgZW5hYmxlcyBhbGwKKyAqIHRoZSBncm91cCBtZW1iZXJzIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkgZGlzYWJsZWQsIHNvIHdlCisgKiBoYXZlIHRvIHVwZGF0ZSB0aGVpciAtPnRzdGFtcF9lbmFibGVkIGFsc28uCisgKiBOb3RlOiB0aGlzIHdvcmtzIGZvciBncm91cCBtZW1iZXJzIGFzIHdlbGwgYXMgZ3JvdXAgbGVhZGVycworICogc2luY2UgdGhlIG5vbi1sZWFkZXIgbWVtYmVycycgc2libGluZ19saXN0cyB3aWxsIGJlIGVtcHR5LgorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzdWI7CisKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCWV2ZW50LT50c3RhbXBfZW5hYmxlZCA9IGN0eC0+dGltZSAtIGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKKwkJaWYgKHN1Yi0+c3RhdGUgPj0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJCXN1Yi0+dHN0YW1wX2VuYWJsZWQgPQorCQkJCWN0eC0+dGltZSAtIHN1Yi0+dG90YWxfdGltZV9lbmFibGVkOworfQorCisvKgorICogQ3Jvc3MgQ1BVIGNhbGwgdG8gZW5hYmxlIGEgcGVyZm9ybWFuY2UgZXZlbnQKKyAqLworc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X2VuYWJsZSh2b2lkICppbmZvKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGluZm87CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CisJaW50IGVycjsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGV2ZW50LCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhpcworCSAqIGV2ZW50J3MgdGFzayBpcyB0aGUgY3VycmVudCB0YXNrIG9uIHRoaXMgY3B1LgorCSAqLworCWlmIChjdHgtPnRhc2sgJiYgY3B1Y3R4LT50YXNrX2N0eCAhPSBjdHgpIHsKKwkJaWYgKGNwdWN0eC0+dGFza19jdHggfHwgY3R4LT50YXNrICE9IGN1cnJlbnQpCisJCQlyZXR1cm47CisJCWNwdWN0eC0+dGFza19jdHggPSBjdHg7CisJfQorCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCWN0eC0+aXNfYWN0aXZlID0gMTsKKwl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CisKKwlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCisJCWdvdG8gdW5sb2NrOworCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7CisKKwkvKgorCSAqIElmIHRoZSBldmVudCBpcyBpbiBhIGdyb3VwIGFuZCBpc24ndCB0aGUgZ3JvdXAgbGVhZGVyLAorCSAqIHRoZW4gZG9uJ3QgcHV0IGl0IG9uIHVubGVzcyB0aGUgZ3JvdXAgaXMgb24uCisJICovCisJaWYgKGxlYWRlciAhPSBldmVudCAmJiBsZWFkZXItPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlnb3RvIHVubG9jazsKKworCWlmICghZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKSB7CisJCWVyciA9IC1FRVhJU1Q7CisJfSBlbHNlIHsKKwkJcGVyZl9kaXNhYmxlKCk7CisJCWlmIChldmVudCA9PSBsZWFkZXIpCisJCQllcnIgPSBncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsCisJCQkJCSAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJZWxzZQorCQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LAorCQkJCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJcGVyZl9lbmFibGUoKTsKKwl9CisKKwlpZiAoZXJyKSB7CisJCS8qCisJCSAqIElmIHRoaXMgZXZlbnQgY2FuJ3QgZ28gb24gYW5kIGl0J3MgcGFydCBvZiBhCisJCSAqIGdyb3VwLCB0aGVuIHRoZSB3aG9sZSBncm91cCBoYXMgdG8gY29tZSBvZmYuCisJCSAqLworCQlpZiAobGVhZGVyICE9IGV2ZW50KQorCQkJZ3JvdXBfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4LCBjdHgpOworCQlpZiAobGVhZGVyLT5hdHRyLnBpbm5lZCkgeworCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGxlYWRlcik7CisJCQlsZWFkZXItPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9FUlJPUjsKKwkJfQorCX0KKworIHVubG9jazoKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKK30KKworLyoKKyAqIEVuYWJsZSBhIGV2ZW50LgorICoKKyAqIElmIGV2ZW50LT5jdHggaXMgYSBjbG9uZWQgY29udGV4dCwgY2FsbGVycyBtdXN0IG1ha2Ugc3VyZSB0aGF0CisgKiBldmVyeSB0YXNrIHN0cnVjdCB0aGF0IGV2ZW50LT5jdHgtPnRhc2sgY291bGQgcG9zc2libHkgcG9pbnQgdG8KKyAqIHJlbWFpbnMgdmFsaWQuICBUaGlzIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQgd2hlbiBjYWxsZWQgdGhyb3VnaAorICogcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZCBvciBwZXJmX2V2ZW50X2Zvcl9lYWNoIGFzIGRlc2NyaWJlZAorICogZm9yIHBlcmZfZXZlbnRfZGlzYWJsZS4KKyAqLworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3R4LT50YXNrOworCisJaWYgKCF0YXNrKSB7CisJCS8qCisJCSAqIEVuYWJsZSB0aGUgZXZlbnQgb24gdGhlIGNwdSB0aGF0IGl0J3Mgb24KKwkJICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShldmVudC0+Y3B1LCBfX3BlcmZfZXZlbnRfZW5hYmxlLAorCQkJCQkgZXZlbnQsIDEpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJZiB0aGUgZXZlbnQgaXMgaW4gZXJyb3Igc3RhdGUsIGNsZWFyIHRoYXQgZmlyc3QuCisJICogVGhhdCB3YXksIGlmIHdlIHNlZSB0aGUgZXZlbnQgaW4gZXJyb3Igc3RhdGUgYmVsb3csIHdlCisJICoga25vdyB0aGF0IGl0IGhhcyBnb25lIGJhY2sgaW50byBlcnJvciBzdGF0ZSwgYXMgZGlzdGluY3QKKwkgKiBmcm9tIHRoZSB0YXNrIGhhdmluZyBiZWVuIHNjaGVkdWxlZCBhd2F5IGJlZm9yZSB0aGUKKwkgKiBjcm9zcy1jYWxsIGFycml2ZWQuCisJICovCisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SKQorCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKKworIHJldHJ5OgorCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwl0YXNrX29uY3B1X2Z1bmN0aW9uX2NhbGwodGFzaywgX19wZXJmX2V2ZW50X2VuYWJsZSwgZXZlbnQpOworCisJc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKKworCS8qCisJICogSWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlIGFuZCB0aGUgZXZlbnQgaXMgc3RpbGwgb2ZmLAorCSAqIHdlIG5lZWQgdG8gcmV0cnkgdGhlIGNyb3NzLWNhbGwuCisJICovCisJaWYgKGN0eC0+aXNfYWN0aXZlICYmIGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJZ290byByZXRyeTsKKworCS8qCisJICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCisJICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQlfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKGV2ZW50LCBjdHgpOworCisgb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3JlZnJlc2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgcmVmcmVzaCkKK3sKKwkvKgorCSAqIG5vdCBzdXBwb3J0ZWQgb24gaW5oZXJpdGVkIGV2ZW50cworCSAqLworCWlmIChldmVudC0+YXR0ci5pbmhlcml0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF0b21pY19hZGQocmVmcmVzaCwgJmV2ZW50LT5ldmVudF9saW1pdCk7CisJcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19wZXJmX2V2ZW50X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwljdHgtPmlzX2FjdGl2ZSA9IDA7CisJaWYgKGxpa2VseSghY3R4LT5ucl9ldmVudHMpKQorCQlnb3RvIG91dDsKKwl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CisKKwlwZXJmX2Rpc2FibGUoKTsKKwlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQorCQkJCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCQkJZWxzZQorCQkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCQl9CisJfQorCXBlcmZfZW5hYmxlKCk7Cisgb3V0OgorCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworfQorCisvKgorICogVGVzdCB3aGV0aGVyIHR3byBjb250ZXh0cyBhcmUgZXF1aXZhbGVudCwgaS5lLiB3aGV0aGVyIHRoZXkKKyAqIGhhdmUgYm90aCBiZWVuIGNsb25lZCBmcm9tIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIHNhbWUgY29udGV4dAorICogYW5kIHRoZXkgYm90aCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbmFibGVkIGV2ZW50cy4KKyAqIElmIHRoZSBudW1iZXIgb2YgZW5hYmxlZCBldmVudHMgaXMgdGhlIHNhbWUsIHRoZW4gdGhlIHNldAorICogb2YgZW5hYmxlZCBldmVudHMgc2hvdWxkIGJlIHRoZSBzYW1lLCBiZWNhdXNlIHRoZXNlIGFyZSBib3RoCisgKiBpbmhlcml0ZWQgY29udGV4dHMsIHRoZXJlZm9yZSB3ZSBjYW4ndCBhY2Nlc3MgaW5kaXZpZHVhbCBldmVudHMKKyAqIGluIHRoZW0gZGlyZWN0bHkgd2l0aCBhbiBmZDsgd2UgY2FuIG9ubHkgZW5hYmxlL2Rpc2FibGUgYWxsCisgKiBldmVudHMgdmlhIHByY3RsLCBvciBlbmFibGUvZGlzYWJsZSBhbGwgZXZlbnRzIGluIGEgZmFtaWx5CisgKiB2aWEgaW9jdGwsIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3Qgb24gYm90aCBjb250ZXh0cy4KKyAqLworc3RhdGljIGludCBjb250ZXh0X2VxdWl2KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDEsCisJCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4MikKK3sKKwlyZXR1cm4gY3R4MS0+cGFyZW50X2N0eCAmJiBjdHgxLT5wYXJlbnRfY3R4ID09IGN0eDItPnBhcmVudF9jdHgKKwkJJiYgY3R4MS0+cGFyZW50X2dlbiA9PSBjdHgyLT5wYXJlbnRfZ2VuCisJCSYmICFjdHgxLT5waW5fY291bnQgJiYgIWN0eDItPnBpbl9jb3VudDsKK30KKworc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X3JlYWQodm9pZCAqZXZlbnQpOworCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfc3luY19zdGF0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpuZXh0X2V2ZW50KQoreworCXU2NCB2YWx1ZTsKKworCWlmICghZXZlbnQtPmF0dHIuaW5oZXJpdF9zdGF0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgZXZlbnQgdmFsdWUsIHdlIGNhbm5vdCB1c2UgcGVyZl9ldmVudF9yZWFkKCkKKwkgKiBiZWNhdXNlIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBjb250ZXh0IHN3aXRjaCBhbmQgaGF2ZSBJUlFzCisJICogZGlzYWJsZWQsIHdoaWNoIHVwc2V0cyBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKSwgaG93ZXZlcgorCSAqIHdlIGtub3cgdGhlIGV2ZW50IG11c3QgYmUgb24gdGhlIGN1cnJlbnQgQ1BVLCB0aGVyZWZvcmUgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHVzZSBpdC4KKwkgKi8KKwlzd2l0Y2ggKGV2ZW50LT5zdGF0ZSkgeworCWNhc2UgUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU6CisJCV9fcGVyZl9ldmVudF9yZWFkKGV2ZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkU6CisJCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBJbiBvcmRlciB0byBrZWVwIHBlci10YXNrIHN0YXRzIHJlbGlhYmxlIHdlIG5lZWQgdG8gZmxpcCB0aGUgZXZlbnQKKwkgKiB2YWx1ZXMgd2hlbiB3ZSBmbGlwIHRoZSBjb250ZXh0cy4KKwkgKi8KKwl2YWx1ZSA9IGF0b21pYzY0X3JlYWQoJm5leHRfZXZlbnQtPmNvdW50KTsKKwl2YWx1ZSA9IGF0b21pYzY0X3hjaGcoJmV2ZW50LT5jb3VudCwgdmFsdWUpOworCWF0b21pYzY0X3NldCgmbmV4dF9ldmVudC0+Y291bnQsIHZhbHVlKTsKKworCXN3YXAoZXZlbnQtPnRvdGFsX3RpbWVfZW5hYmxlZCwgbmV4dF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkKTsKKwlzd2FwKGV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsIG5leHRfZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyk7CisKKwkvKgorCSAqIFNpbmNlIHdlIHN3aXp6bGVkIHRoZSB2YWx1ZXMsIHVwZGF0ZSB0aGUgdXNlciB2aXNpYmxlIGRhdGEgdG9vLgorCSAqLworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShuZXh0X2V2ZW50KTsKK30KKworI2RlZmluZSBsaXN0X25leHRfZW50cnkocG9zLCBtZW1iZXIpIFwKKwlsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N5bmNfc3RhdChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqbmV4dF9jdHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqbmV4dF9ldmVudDsKKworCWlmICghY3R4LT5ucl9zdGF0KQorCQlyZXR1cm47CisKKwlldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoJmN0eC0+ZXZlbnRfbGlzdCwKKwkJCQkgICBzdHJ1Y3QgcGVyZl9ldmVudCwgZXZlbnRfZW50cnkpOworCisJbmV4dF9ldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoJm5leHRfY3R4LT5ldmVudF9saXN0LAorCQkJCQlzdHJ1Y3QgcGVyZl9ldmVudCwgZXZlbnRfZW50cnkpOworCisJd2hpbGUgKCZldmVudC0+ZXZlbnRfZW50cnkgIT0gJmN0eC0+ZXZlbnRfbGlzdCAmJgorCSAgICAgICAmbmV4dF9ldmVudC0+ZXZlbnRfZW50cnkgIT0gJm5leHRfY3R4LT5ldmVudF9saXN0KSB7CisKKwkJX19wZXJmX2V2ZW50X3N5bmNfc3RhdChldmVudCwgbmV4dF9ldmVudCk7CisKKwkJZXZlbnQgPSBsaXN0X25leHRfZW50cnkoZXZlbnQsIGV2ZW50X2VudHJ5KTsKKwkJbmV4dF9ldmVudCA9IGxpc3RfbmV4dF9lbnRyeShuZXh0X2V2ZW50LCBldmVudF9lbnRyeSk7CisJfQorfQorCisvKgorICogQ2FsbGVkIGZyb20gc2NoZWR1bGVyIHRvIHJlbW92ZSB0aGUgZXZlbnRzIG9mIHRoZSBjdXJyZW50IHRhc2ssCisgKiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICogV2Ugc3RvcCBlYWNoIGV2ZW50IGFuZCB1cGRhdGUgdGhlIGV2ZW50IHZhbHVlIGluIGV2ZW50LT5jb3VudC4KKyAqCisgKiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdXMgYWdhaW5zdCBOTUksIGJ1dCBkaXNhYmxlKCkKKyAqIHNldHMgdGhlIGRpc2FibGVkIGJpdCBpbiB0aGUgY29udHJvbCBmaWVsZCBvZiBldmVudCBfYmVmb3JlXworICogYWNjZXNzaW5nIHRoZSBldmVudCBjb250cm9sIHJlZ2lzdGVyLiBJZiBhIE5NSSBoaXRzLCB0aGVuIGl0IHdpbGwKKyAqIG5vdCByZXN0YXJ0IHRoZSBldmVudC4KKyAqLwordm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpuZXh0X2N0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnQ7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJaW50IGRvX3N3aXRjaCA9IDE7CisKKwlyZWdzID0gdGFza19wdF9yZWdzKHRhc2spOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTLCAxLCAxLCByZWdzLCAwKTsKKworCWlmIChsaWtlbHkoIWN0eCB8fCAhY3B1Y3R4LT50YXNrX2N0eCkpCisJCXJldHVybjsKKworCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwYXJlbnQgPSByY3VfZGVyZWZlcmVuY2UoY3R4LT5wYXJlbnRfY3R4KTsKKwluZXh0X2N0eCA9IG5leHQtPnBlcmZfZXZlbnRfY3R4cDsKKwlpZiAocGFyZW50ICYmIG5leHRfY3R4ICYmCisJICAgIHJjdV9kZXJlZmVyZW5jZShuZXh0X2N0eC0+cGFyZW50X2N0eCkgPT0gcGFyZW50KSB7CisJCS8qCisJCSAqIExvb2tzIGxpa2UgdGhlIHR3byBjb250ZXh0cyBhcmUgY2xvbmVzLCBzbyB3ZSBtaWdodCBiZQorCQkgKiBhYmxlIHRvIG9wdGltaXplIHRoZSBjb250ZXh0IHN3aXRjaC4gIFdlIGxvY2sgYm90aAorCQkgKiBjb250ZXh0cyBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSBjbG9uZXMgdW5kZXIgdGhlCisJCSAqIGxvY2sgKGluY2x1ZGluZyByZS1jaGVja2luZyB0aGF0IG5laXRoZXIgaGFzIGJlZW4KKwkJICogdW5jbG9uZWQgaW4gdGhlIG1lYW50aW1lKS4gIEl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoCisJCSAqIG9yZGVyIHdlIHRha2UgdGhlIGxvY2tzIGJlY2F1c2Ugbm8gb3RoZXIgY3B1IGNvdWxkCisJCSAqIGJlIHRyeWluZyB0byBsb2NrIGJvdGggb2YgdGhlc2UgdGFza3MuCisJCSAqLworCQlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJCXNwaW5fbG9ja19uZXN0ZWQoJm5leHRfY3R4LT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCWlmIChjb250ZXh0X2VxdWl2KGN0eCwgbmV4dF9jdHgpKSB7CisJCQkvKgorCQkJICogWFhYIGRvIHdlIG5lZWQgYSBtZW1vcnkgYmFycmllciBvZiBzb3J0cworCQkJICogd3J0IHRvIHJjdV9kZXJlZmVyZW5jZSgpIG9mIHBlcmZfZXZlbnRfY3R4cAorCQkJICovCisJCQl0YXNrLT5wZXJmX2V2ZW50X2N0eHAgPSBuZXh0X2N0eDsKKwkJCW5leHQtPnBlcmZfZXZlbnRfY3R4cCA9IGN0eDsKKwkJCWN0eC0+dGFzayA9IG5leHQ7CisJCQluZXh0X2N0eC0+dGFzayA9IHRhc2s7CisJCQlkb19zd2l0Y2ggPSAwOworCisJCQlwZXJmX2V2ZW50X3N5bmNfc3RhdChjdHgsIG5leHRfY3R4KTsKKwkJfQorCQlzcGluX3VubG9jaygmbmV4dF9jdHgtPmxvY2spOworCQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAoZG9fc3dpdGNoKSB7CisJCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOworCQljcHVjdHgtPnRhc2tfY3R4ID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCisJaWYgKCFjcHVjdHgtPnRhc2tfY3R4KQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTl9PTkNFKGN0eCAhPSBjcHVjdHgtPnRhc2tfY3R4KSkKKwkJcmV0dXJuOworCisJX19wZXJmX2V2ZW50X3NjaGVkX291dChjdHgsIGNwdWN0eCk7CisJY3B1Y3R4LT50YXNrX2N0eCA9IE5VTEw7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3B1X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQoreworCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoJmNwdWN0eC0+Y3R4LCBjcHVjdHgpOworfQorCitzdGF0aWMgdm9pZAorX19wZXJmX2V2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsIGludCBjcHUpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCWludCBjYW5fYWRkX2h3ID0gMTsKKworCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwljdHgtPmlzX2FjdGl2ZSA9IDE7CisJaWYgKGxpa2VseSghY3R4LT5ucl9ldmVudHMpKQorCQlnb3RvIG91dDsKKworCWN0eC0+dGltZXN0YW1wID0gcGVyZl9jbG9jaygpOworCisJcGVyZl9kaXNhYmxlKCk7CisKKwkvKgorCSAqIEZpcnN0IGdvIHRocm91Z2ggdGhlIGxpc3QgYW5kIHB1dCBvbiBhbnkgcGlubmVkIGdyb3VwcworCSAqIGluIG9yZGVyIHRvIGdpdmUgdGhlbSB0aGUgYmVzdCBjaGFuY2Ugb2YgZ29pbmcgb24uCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAorCQkgICAgIWV2ZW50LT5hdHRyLnBpbm5lZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IGNwdSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQorCQkJZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCQllbHNlIHsKKwkJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCisJCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAorCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCisJCSAqLworCQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJCXVwZGF0ZV9ncm91cF90aW1lcyhldmVudCk7CisJCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SOworCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJLyoKKwkJICogSWdub3JlIGV2ZW50cyBpbiBPRkYgb3IgRVJST1Igc3RhdGUsIGFuZAorCQkgKiBpZ25vcmUgcGlubmVkIGV2ZW50cyBzaW5jZSB3ZSBkaWQgdGhlbSBhbHJlYWR5LgorCQkgKi8KKwkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAorCQkgICAgZXZlbnQtPmF0dHIucGlubmVkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTGlzdGVuIHRvIHRoZSAnY3B1JyBzY2hlZHVsaW5nIGZpbHRlciBjb25zdHJhaW50CisJCSAqIG9mIGV2ZW50czoKKwkJICovCisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQorCQkJY29udGludWU7CisKKwkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpIHsKKwkJCWlmIChldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCisJCQkJY2FuX2FkZF9odyA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7CisJCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKKwkJCQkJY2FuX2FkZF9odyA9IDA7CisJCQl9CisJCX0KKwl9CisJcGVyZl9lbmFibGUoKTsKKyBvdXQ6CisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBzY2hlZHVsZXIgdG8gYWRkIHRoZSBldmVudHMgb2YgdGhlIGN1cnJlbnQgdGFzaworICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqIFdlIHJlc3RvcmUgdGhlIGV2ZW50IHZhbHVlIGFuZCB0aGVuIGVuYWJsZSBpdC4KKyAqCisgKiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdXMgYWdhaW5zdCBOTUksIGJ1dCBlbmFibGUoKQorICogc2V0cyB0aGUgZW5hYmxlZCBiaXQgaW4gdGhlIGNvbnRyb2wgZmllbGQgb2YgZXZlbnQgX2JlZm9yZV8KKyAqIGFjY2Vzc2luZyB0aGUgZXZlbnQgY29udHJvbCByZWdpc3Rlci4gSWYgYSBOTUkgaGl0cywgdGhlbiBpdCB3aWxsCisgKiBrZWVwIHRoZSBldmVudCBydW5uaW5nLgorICovCit2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOworCisJaWYgKGxpa2VseSghY3R4KSkKKwkJcmV0dXJuOworCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKKwkJcmV0dXJuOworCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKKwljcHVjdHgtPnRhc2tfY3R4ID0gY3R4OworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKKworCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKK30KKworI2RlZmluZSBNQVhfSU5URVJSVVBUUyAofjBVTEwpCisKK3N0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSk7CisKK3N0YXRpYyB2b2lkIHBlcmZfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBldmVudHMpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IHBlcmlvZCwgc2FtcGxlX3BlcmlvZDsKKwlzNjQgZGVsdGE7CisKKwlldmVudHMgKj0gaHdjLT5zYW1wbGVfcGVyaW9kOworCXBlcmlvZCA9IGRpdjY0X3U2NChldmVudHMsIGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxKTsKKworCWRlbHRhID0gKHM2NCkocGVyaW9kIC0gaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwlkZWx0YSA9IChkZWx0YSArIDcpIC8gODsgLyogbG93IHBhc3MgZmlsdGVyICovCisKKwlzYW1wbGVfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kICsgZGVsdGE7CisKKwlpZiAoIXNhbXBsZV9wZXJpb2QpCisJCXNhbXBsZV9wZXJpb2QgPSAxOworCisJaHdjLT5zYW1wbGVfcGVyaW9kID0gc2FtcGxlX3BlcmlvZDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9jdHhfYWRqdXN0X2ZyZXEoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOworCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCisJCWludGVycnVwdHMgPSBod2MtPmludGVycnVwdHM7CisJCWh3Yy0+aW50ZXJydXB0cyA9IDA7CisKKwkJLyoKKwkJICogdW50aHJvdHRsZSBldmVudHMgb24gdGhlIHRpY2sKKwkJICovCisJCWlmIChpbnRlcnJ1cHRzID09IE1BWF9JTlRFUlJVUFRTKSB7CisJCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMSk7CisJCQlldmVudC0+cG11LT51bnRocm90dGxlKGV2ZW50KTsKKwkJCWludGVycnVwdHMgPSAyKnN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlL0haOworCQl9CisKKwkJaWYgKCFldmVudC0+YXR0ci5mcmVxIHx8ICFldmVudC0+YXR0ci5zYW1wbGVfZnJlcSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIGlmIHRoZSBzcGVjaWZpZWQgZnJlcSA8IEhaIHRoZW4gd2UgbmVlZCB0byBza2lwIHRpY2tzCisJCSAqLworCQlpZiAoZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXEgPCBIWikgeworCQkJZnJlcSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOworCisJCQlod2MtPmZyZXFfY291bnQgKz0gZnJlcTsKKwkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzICs9IGludGVycnVwdHM7CisKKwkJCWlmIChod2MtPmZyZXFfY291bnQgPCBIWikKKwkJCQljb250aW51ZTsKKworCQkJaW50ZXJydXB0cyA9IGh3Yy0+ZnJlcV9pbnRlcnJ1cHRzOworCQkJaHdjLT5mcmVxX2ludGVycnVwdHMgPSAwOworCQkJaHdjLT5mcmVxX2NvdW50IC09IEhaOworCQl9IGVsc2UKKwkJCWZyZXEgPSBIWjsKKworCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIGZyZXEgKiBpbnRlcnJ1cHRzKTsKKworCQkvKgorCQkgKiBJbiBvcmRlciB0byBhdm9pZCBiZWluZyBzdGFsbGVkIGJ5IGFuIChhY2NpZGVudGFsKSBodWdlCisJCSAqIHNhbXBsZSBwZXJpb2QsIGZvcmNlIHJlc2V0IHRoZSBzYW1wbGUgcGVyaW9kIGlmIHdlIGRpZG4ndAorCQkgKiBnZXQgYW55IGV2ZW50cyBpbiB0aGlzIGZyZXEgcGVyaW9kLgorCQkgKi8KKwkJaWYgKCFpbnRlcnJ1cHRzKSB7CisJCQlwZXJmX2Rpc2FibGUoKTsKKwkJCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOworCQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKKwkJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CisJCQlwZXJmX2VuYWJsZSgpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworfQorCisvKgorICogUm91bmQtcm9iaW4gYSBjb250ZXh0J3MgZXZlbnRzOgorICovCitzdGF0aWMgdm9pZCByb3RhdGVfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWN0eC0+bnJfZXZlbnRzKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJLyoKKwkgKiBSb3RhdGUgdGhlIGZpcnN0IGVudHJ5IGxhc3QgKHdvcmtzIGp1c3QgZmluZSBmb3IgZ3JvdXAgZXZlbnRzIHRvbyk6CisJICovCisJcGVyZl9kaXNhYmxlKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7CisJCWJyZWFrOworCX0KKwlwZXJmX2VuYWJsZSgpOworCisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKK3ZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCisJaWYgKCFhdG9taWNfcmVhZCgmbnJfZXZlbnRzKSkKKwkJcmV0dXJuOworCisJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwljdHggPSBjdXJyLT5wZXJmX2V2ZW50X2N0eHA7CisKKwlwZXJmX2N0eF9hZGp1c3RfZnJlcSgmY3B1Y3R4LT5jdHgpOworCWlmIChjdHgpCisJCXBlcmZfY3R4X2FkanVzdF9mcmVxKGN0eCk7CisKKwlwZXJmX2V2ZW50X2NwdV9zY2hlZF9vdXQoY3B1Y3R4KTsKKwlpZiAoY3R4KQorCQlfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoY3R4KTsKKworCXJvdGF0ZV9jdHgoJmNwdWN0eC0+Y3R4KTsKKwlpZiAoY3R4KQorCQlyb3RhdGVfY3R4KGN0eCk7CisKKwlwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihjcHVjdHgsIGNwdSk7CisJaWYgKGN0eCkKKwkJcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKGN1cnIsIGNwdSk7Cit9CisKKy8qCisgKiBFbmFibGUgYWxsIG9mIGEgdGFzaydzIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZW5hYmxlLW9uLWV4ZWMuCisgKiBUaGlzIGV4cGVjdHMgdGFzayA9PSBjdXJyZW50LgorICovCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2VuYWJsZV9vbl9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVuYWJsZWQgPSAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKKwlpZiAoIWN0eCB8fCAhY3R4LT5ucl9ldmVudHMpCisJCWdvdG8gb3V0OworCisJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KGN0eCk7CisKKwlzcGluX2xvY2soJmN0eC0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjKQorCQkJY29udGludWU7CisJCWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjID0gMDsKKwkJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQkJY29udGludWU7CisJCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7CisJCWVuYWJsZWQgPSAxOworCX0KKworCS8qCisJICogVW5jbG9uZSB0aGlzIGNvbnRleHQgaWYgd2UgZW5hYmxlZCBhbnkgZXZlbnQuCisJICovCisJaWYgKGVuYWJsZWQpCisJCXVuY2xvbmVfY3R4KGN0eCk7CisKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKworCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbih0YXNrLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworIG91dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBDcm9zcyBDUFUgY2FsbCB0byByZWFkIHRoZSBoYXJkd2FyZSBldmVudAorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfcmVhZCh2b2lkICppbmZvKQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHRhc2sgY29udGV4dCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzCisJICogdGhlIGN1cnJlbnQgdGFzayBjb250ZXh0IG9mIHRoaXMgY3B1LiAgSWYgbm90IGl0IGhhcyBiZWVuCisJICogc2NoZWR1bGVkIG91dCBiZWZvcmUgdGhlIHNtcCBjYWxsIGFycml2ZWQuICBJbiB0aGF0IGNhc2UKKwkgKiBldmVudC0+Y291bnQgd291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYSByZWNlbnQgc2FtcGxlCisJICogd2hlbiB0aGUgZXZlbnQgd2FzIHNjaGVkdWxlZCBvdXQuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChjdHgtPmlzX2FjdGl2ZSkKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOworCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOworCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdTY0IHBlcmZfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJLyoKKwkgKiBJZiBldmVudCBpcyBlbmFibGVkIGFuZCBjdXJyZW50bHkgYWN0aXZlIG9uIGEgQ1BVLCB1cGRhdGUgdGhlCisJICogdmFsdWUgaW4gdGhlIGV2ZW50IHN0cnVjdHVyZToKKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKSB7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShldmVudC0+b25jcHUsCisJCQkJCSBfX3BlcmZfZXZlbnRfcmVhZCwgZXZlbnQsIDEpOworCX0gZWxzZSBpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJdXBkYXRlX2V2ZW50X3RpbWVzKGV2ZW50KTsKKwl9CisKKwlyZXR1cm4gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHBlcmZfZXZlbnQgY29udGV4dCBpbiBhIHRhc2tfc3RydWN0OgorICovCitzdGF0aWMgdm9pZAorX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7CisJc3Bpbl9sb2NrX2luaXQoJmN0eC0+bG9jayk7CisJbXV0ZXhfaW5pdCgmY3R4LT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmN0eC0+Z3JvdXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmN0eC0+ZXZlbnRfbGlzdCk7CisJYXRvbWljX3NldCgmY3R4LT5yZWZjb3VudCwgMSk7CisJY3R4LT50YXNrID0gdGFzazsKK30KKworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmZpbmRfZ2V0X2NvbnRleHQocGlkX3QgcGlkLCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwkvKgorCSAqIElmIGNwdSBpcyBub3QgYSB3aWxkY2FyZCB0aGVuIHRoaXMgaXMgYSBwZXJjcHUgZXZlbnQ6CisJICovCisJaWYgKGNwdSAhPSAtMSkgeworCQkvKiBNdXN0IGJlIHJvb3QgdG8gb3BlcmF0ZSBvbiBhIENQVSBldmVudDogKi8KKwkJaWYgKHBlcmZfcGFyYW5vaWRfY3B1KCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKKworCQlpZiAoY3B1IDwgMCB8fCBjcHUgPiBudW1fcG9zc2libGVfY3B1cygpKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkJLyoKKwkJICogV2UgY291bGQgYmUgY2xldmVyIGFuZCBhbGxvdyB0byBhdHRhY2ggYSBldmVudCB0byBhbgorCQkgKiBvZmZsaW5lIENQVSBhbmQgYWN0aXZhdGUgaXQgd2hlbiB0aGUgQ1BVIGNvbWVzIHVwLCBidXQKKwkJICogdGhhdCdzIGZvciBsYXRlci4KKwkJICovCisJCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1X29ubGluZV9tYXApKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwkJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwkJY3R4ID0gJmNwdWN0eC0+Y3R4OworCQlnZXRfY3R4KGN0eCk7CisKKwkJcmV0dXJuIGN0eDsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKCFwaWQpCisJCXRhc2sgPSBjdXJyZW50OworCWVsc2UKKwkJdGFzayA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CisJaWYgKHRhc2spCisJCWdldF90YXNrX3N0cnVjdCh0YXNrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmICghdGFzaykKKwkJcmV0dXJuIEVSUl9QVFIoLUVTUkNIKTsKKworCS8qCisJICogQ2FuJ3QgYXR0YWNoIGV2ZW50cyB0byBhIGR5aW5nIHRhc2suCisJICovCisJZXJyID0gLUVTUkNIOworCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCWdvdG8gZXJyb3V0OworCisJLyogUmV1c2UgcHRyYWNlIHBlcm1pc3Npb24gY2hlY2tzIGZvciBub3cuICovCisJZXJyID0gLUVBQ0NFUzsKKwlpZiAoIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQorCQlnb3RvIGVycm91dDsKKworIHJldHJ5OgorCWN0eCA9IHBlcmZfbG9ja190YXNrX2NvbnRleHQodGFzaywgJmZsYWdzKTsKKwlpZiAoY3R4KSB7CisJCXVuY2xvbmVfY3R4KGN0eCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCX0KKworCWlmICghY3R4KSB7CisJCWN0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJaWYgKCFjdHgpCisJCQlnb3RvIGVycm91dDsKKwkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChjdHgsIHRhc2spOworCQlnZXRfY3R4KGN0eCk7CisJCWlmIChjbXB4Y2hnKCZ0YXNrLT5wZXJmX2V2ZW50X2N0eHAsIE5VTEwsIGN0eCkpIHsKKwkJCS8qCisJCQkgKiBXZSByYWNlZCB3aXRoIHNvbWUgb3RoZXIgdGFzazsgdXNlCisJCQkgKiB0aGUgY29udGV4dCB0aGV5IHNldC4KKwkJCSAqLworCQkJa2ZyZWUoY3R4KTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJZ2V0X3Rhc2tfc3RydWN0KHRhc2spOworCX0KKworCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwlyZXR1cm4gY3R4OworCisgZXJyb3V0OgorCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2V2ZW50X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBlcmZfZXZlbnQsIHJjdV9oZWFkKTsKKwlpZiAoZXZlbnQtPm5zKQorCQlwdXRfcGlkX25zKGV2ZW50LT5ucyk7CisJa2ZyZWUoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCitzdGF0aWMgdm9pZCBmcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlwZXJmX3BlbmRpbmdfc3luYyhldmVudCk7CisKKwlpZiAoIWV2ZW50LT5wYXJlbnQpIHsKKwkJYXRvbWljX2RlYygmbnJfZXZlbnRzKTsKKwkJaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJCQlhdG9taWNfZGVjKCZucl9tbWFwX2V2ZW50cyk7CisJCWlmIChldmVudC0+YXR0ci5jb21tKQorCQkJYXRvbWljX2RlYygmbnJfY29tbV9ldmVudHMpOworCQlpZiAoZXZlbnQtPmF0dHIudGFzaykKKwkJCWF0b21pY19kZWMoJm5yX3Rhc2tfZXZlbnRzKTsKKwl9CisKKwlpZiAoZXZlbnQtPm91dHB1dCkgeworCQlmcHV0KGV2ZW50LT5vdXRwdXQtPmZpbHApOworCQlldmVudC0+b3V0cHV0ID0gTlVMTDsKKwl9CisKKwlpZiAoZXZlbnQtPmRlc3Ryb3kpCisJCWV2ZW50LT5kZXN0cm95KGV2ZW50KTsKKworCXB1dF9jdHgoZXZlbnQtPmN0eCk7CisJY2FsbF9yY3UoJmV2ZW50LT5yY3VfaGVhZCwgZnJlZV9ldmVudF9yY3UpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBmaWxlIGlzIGdvbmUuCisgKi8KK3N0YXRpYyBpbnQgcGVyZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCVdBUk5fT05fT05DRShjdHgtPnBhcmVudF9jdHgpOworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCXBlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKKworCW11dGV4X2xvY2soJmV2ZW50LT5vd25lci0+cGVyZl9ldmVudF9tdXRleCk7CisJbGlzdF9kZWxfaW5pdCgmZXZlbnQtPm93bmVyX2VudHJ5KTsKKwltdXRleF91bmxvY2soJmV2ZW50LT5vd25lci0+cGVyZl9ldmVudF9tdXRleCk7CisJcHV0X3Rhc2tfc3RydWN0KGV2ZW50LT5vd25lcik7CisKKwlmcmVlX2V2ZW50KGV2ZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfcmVhZF9zaXplKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZW50cnkgPSBzaXplb2YodTY0KTsgLyogdmFsdWUgKi8KKwlpbnQgc2l6ZSA9IDA7CisJaW50IG5yID0gMTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkKKwkJc2l6ZSArPSBzaXplb2YodTY0KTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykKKwkJc2l6ZSArPSBzaXplb2YodTY0KTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQorCQllbnRyeSArPSBzaXplb2YodTY0KTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0dST1VQKSB7CisJCW5yICs9IGV2ZW50LT5ncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzOworCQlzaXplICs9IHNpemVvZih1NjQpOworCX0KKworCXNpemUgKz0gZW50cnkgKiBucjsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdTY0IHBlcmZfZXZlbnRfcmVhZF92YWx1ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmNoaWxkOworCXU2NCB0b3RhbCA9IDA7CisKKwl0b3RhbCArPSBwZXJmX2V2ZW50X3JlYWQoZXZlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZldmVudC0+Y2hpbGRfbGlzdCwgY2hpbGRfbGlzdCkKKwkJdG90YWwgKz0gcGVyZl9ldmVudF9yZWFkKGNoaWxkKTsKKworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3JlYWRfZW50cnkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSAgIHU2NCByZWFkX2Zvcm1hdCwgY2hhciBfX3VzZXIgKmJ1ZikKK3sKKwlpbnQgbiA9IDAsIGNvdW50ID0gMDsKKwl1NjQgdmFsdWVzWzJdOworCisJdmFsdWVzW24rK10gPSBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoZXZlbnQpOworCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQorCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpOworCisJY291bnQgPSBuICogc2l6ZW9mKHU2NCk7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgdmFsdWVzLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfcmVhZF9ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgdTY0IHJlYWRfZm9ybWF0LCBjaGFyIF9fdXNlciAqYnVmKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyLCAqc3ViOworCWludCBuID0gMCwgc2l6ZSA9IDAsIGVyciA9IC1FRkFVTFQ7CisJdTY0IHZhbHVlc1szXTsKKworCXZhbHVlc1tuKytdID0gMSArIGxlYWRlci0+bnJfc2libGluZ3M7CisJaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEKSB7CisJCXZhbHVlc1tuKytdID0gbGVhZGVyLT50b3RhbF90aW1lX2VuYWJsZWQgKworCQkJYXRvbWljNjRfcmVhZCgmbGVhZGVyLT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOworCX0KKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKKwkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfcnVubmluZyArCisJCQlhdG9taWM2NF9yZWFkKCZsZWFkZXItPmNoaWxkX3RvdGFsX3RpbWVfcnVubmluZyk7CisJfQorCisJc2l6ZSA9IG4gKiBzaXplb2YodTY0KTsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCB2YWx1ZXMsIHNpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IHBlcmZfZXZlbnRfcmVhZF9lbnRyeShsZWFkZXIsIHJlYWRfZm9ybWF0LCBidWYgKyBzaXplKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNpemUgKz0gZXJyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJZXJyID0gcGVyZl9ldmVudF9yZWFkX2VudHJ5KHN1YiwgcmVhZF9mb3JtYXQsCisJCQkJYnVmICsgc2l6ZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQlzaXplICs9IGVycjsKKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3JlYWRfb25lKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgdTY0IHJlYWRfZm9ybWF0LCBjaGFyIF9fdXNlciAqYnVmKQoreworCXU2NCB2YWx1ZXNbNF07CisJaW50IG4gPSAwOworCisJdmFsdWVzW24rK10gPSBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoZXZlbnQpOworCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgeworCQl2YWx1ZXNbbisrXSA9IGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQgKworCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CisJfQorCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykgeworCQl2YWx1ZXNbbisrXSA9IGV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcgKworCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfcnVubmluZyk7CisJfQorCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQorCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgbiAqIHNpemVvZih1NjQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gbiAqIHNpemVvZih1NjQpOworfQorCisvKgorICogUmVhZCB0aGUgcGVyZm9ybWFuY2UgZXZlbnQgLSBzaW1wbGUgbm9uIGJsb2NraW5nIHZlcnNpb24gZm9yIG5vdworICovCitzdGF0aWMgc3NpemVfdAorcGVyZl9yZWFkX2h3KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXU2NCByZWFkX2Zvcm1hdCA9IGV2ZW50LT5hdHRyLnJlYWRfZm9ybWF0OworCWludCByZXQ7CisKKwkvKgorCSAqIFJldHVybiBlbmQtb2YtZmlsZSBmb3IgYSByZWFkIG9uIGEgZXZlbnQgdGhhdCBpcyBpbgorCSAqIGVycm9yIHN0YXRlIChpLmUuIGJlY2F1c2UgaXQgd2FzIHBpbm5lZCBidXQgaXQgY291bGRuJ3QgYmUKKwkgKiBzY2hlZHVsZWQgb24gdG8gdGhlIENQVSBhdCBzb21lIHBvaW50KS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfRVJST1IpCisJCXJldHVybiAwOworCisJaWYgKGNvdW50IDwgcGVyZl9ldmVudF9yZWFkX3NpemUoZXZlbnQpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKKwltdXRleF9sb2NrKCZldmVudC0+Y2hpbGRfbXV0ZXgpOworCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0dST1VQKQorCQlyZXQgPSBwZXJmX2V2ZW50X3JlYWRfZ3JvdXAoZXZlbnQsIHJlYWRfZm9ybWF0LCBidWYpOworCWVsc2UKKwkJcmV0ID0gcGVyZl9ldmVudF9yZWFkX29uZShldmVudCwgcmVhZF9mb3JtYXQsIGJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZldmVudC0+Y2hpbGRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHBlcmZfcmVhZF9odyhldmVudCwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVyZl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgaW50IGV2ZW50cyA9IFBPTExfSFVQOworCisJcmN1X3JlYWRfbG9jaygpOworCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmRhdGEpOworCWlmIChkYXRhKQorCQlldmVudHMgPSBhdG9taWNfeGNoZygmZGF0YS0+cG9sbCwgMCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmV2ZW50LT53YWl0cSwgd2FpdCk7CisKKwlyZXR1cm4gZXZlbnRzOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3Jlc2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwkodm9pZClwZXJmX2V2ZW50X3JlYWQoZXZlbnQpOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmNvdW50LCAwKTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKKy8qCisgKiBIb2xkaW5nIHRoZSB0b3AtbGV2ZWwgZXZlbnQncyBjaGlsZF9tdXRleCBtZWFucyB0aGF0IGFueQorICogZGVzY2VuZGFudCBwcm9jZXNzIHRoYXQgaGFzIGluaGVyaXRlZCB0aGlzIGV2ZW50IHdpbGwgYmxvY2sKKyAqIGluIHN5bmNfY2hpbGRfZXZlbnQgaWYgaXQgZ29lcyB0byBleGl0LCB0aHVzIHNhdGlzZnlpbmcgdGhlCisgKiB0YXNrIGV4aXN0ZW5jZSByZXF1aXJlbWVudHMgb2YgcGVyZl9ldmVudF9lbmFibGUvZGlzYWJsZS4KKyAqLworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9ldmVudCAqKSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGQ7CisKKwlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmZXZlbnQtPmNoaWxkX211dGV4KTsKKwlmdW5jKGV2ZW50KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZXZlbnQtPmNoaWxkX2xpc3QsIGNoaWxkX2xpc3QpCisJCWZ1bmMoY2hpbGQpOworCW11dGV4X3VubG9jaygmZXZlbnQtPmNoaWxkX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9mb3JfZWFjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICB2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfZXZlbnQgKikpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZzsKKworCVdBUk5fT05fT05DRShjdHgtPnBhcmVudF9jdHgpOworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCWV2ZW50ID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKworCXBlcmZfZXZlbnRfZm9yX2VhY2hfY2hpbGQoZXZlbnQsIGZ1bmMpOworCWZ1bmMoZXZlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJmV2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KQorCQlwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkKGV2ZW50LCBmdW5jKTsKKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZXQgPSAwOworCXU2NCB2YWx1ZTsKKworCWlmICghZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaXplID0gY29weV9mcm9tX3VzZXIoJnZhbHVlLCBhcmcsIHNpemVvZih2YWx1ZSkpOworCWlmIChzaXplICE9IHNpemVvZih2YWx1ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCWlmIChldmVudC0+YXR0ci5mcmVxKSB7CisJCWlmICh2YWx1ZSA+IHN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQlldmVudC0+YXR0ci5zYW1wbGVfZnJlcSA9IHZhbHVlOworCX0gZWxzZSB7CisJCWV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2QgPSB2YWx1ZTsKKwkJZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QgPSB2YWx1ZTsKKwl9Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHBlcmZfZXZlbnRfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBvdXRwdXRfZmQpOworCitzdGF0aWMgbG9uZyBwZXJmX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCBwZXJmX2V2ZW50ICopOworCXUzMiBmbGFncyA9IGFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBQRVJGX0VWRU5UX0lPQ19FTkFCTEU6CisJCWZ1bmMgPSBwZXJmX2V2ZW50X2VuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFOgorCQlmdW5jID0gcGVyZl9ldmVudF9kaXNhYmxlOworCQlicmVhazsKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1JFU0VUOgorCQlmdW5jID0gcGVyZl9ldmVudF9yZXNldDsKKwkJYnJlYWs7CisKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1JFRlJFU0g6CisJCXJldHVybiBwZXJmX2V2ZW50X3JlZnJlc2goZXZlbnQsIGFyZyk7CisKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1BFUklPRDoKKwkJcmV0dXJuIHBlcmZfZXZlbnRfcGVyaW9kKGV2ZW50LCAodTY0IF9fdXNlciAqKWFyZyk7CisKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQ6CisJCXJldHVybiBwZXJmX2V2ZW50X3NldF9vdXRwdXQoZXZlbnQsIGFyZyk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBQRVJGX0lPQ19GTEFHX0dST1VQKQorCQlwZXJmX2V2ZW50X2Zvcl9lYWNoKGV2ZW50LCBmdW5jKTsKKwllbHNlCisJCXBlcmZfZXZlbnRfZm9yX2VhY2hfY2hpbGQoZXZlbnQsIGZ1bmMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwZXJmX2V2ZW50X3Rhc2tfZW5hYmxlKHZvaWQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCisJbXV0ZXhfbG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN1cnJlbnQtPnBlcmZfZXZlbnRfbGlzdCwgb3duZXJfZW50cnkpCisJCXBlcmZfZXZlbnRfZm9yX2VhY2hfY2hpbGQoZXZlbnQsIHBlcmZfZXZlbnRfZW5hYmxlKTsKKwltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwZXJmX2V2ZW50X3Rhc2tfZGlzYWJsZSh2b2lkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCW11dGV4X2xvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdXJyZW50LT5wZXJmX2V2ZW50X2xpc3QsIG93bmVyX2VudHJ5KQorCQlwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkKGV2ZW50LCBwZXJmX2V2ZW50X2Rpc2FibGUpOworCW11dGV4X3VubG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmbmRlZiBQRVJGX0VWRU5UX0lOREVYX09GRlNFVAorIyBkZWZpbmUgUEVSRl9FVkVOVF9JTkRFWF9PRkZTRVQgMAorI2VuZGlmCisKK3N0YXRpYyBpbnQgcGVyZl9ldmVudF9pbmRleChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZXZlbnQtPmh3LmlkeCArIDEgLSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVDsKK30KKworLyoKKyAqIENhbGxlcnMgbmVlZCB0byBlbnN1cmUgdGhlcmUgY2FuIGJlIG5vIG5lc3Rpbmcgb2YgdGhpcyBmdW5jdGlvbiwgb3RoZXJ3aXNlCisgKiB0aGUgc2VxbG9jayBsb2dpYyBnb2VzIGJhZC4gV2UgY2FuIG5vdCBzZXJpYWxpemUgdGhpcyBiZWNhdXNlIHRoZSBhcmNoCisgKiBjb2RlIGNhbGxzIHRoaXMgZnJvbSBOTUkgY29udGV4dC4KKyAqLwordm9pZCBwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICp1c2VycGc7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCisJcmN1X3JlYWRfbG9jaygpOworCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmRhdGEpOworCWlmICghZGF0YSkKKwkJZ290byB1bmxvY2s7CisKKwl1c2VycGcgPSBkYXRhLT51c2VyX3BhZ2U7CisKKwkvKgorCSAqIERpc2FibGUgcHJlZW1wdGlvbiBzbyBhcyB0byBub3QgbGV0IHRoZSBjb3JyZXNwb25kaW5nIHVzZXItc3BhY2UKKwkgKiBzcGluIHRvbyBsb25nIGlmIHdlIGdldCBwcmVlbXB0ZWQuCisJICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJKyt1c2VycGctPmxvY2s7CisJYmFycmllcigpOworCXVzZXJwZy0+aW5kZXggPSBwZXJmX2V2ZW50X2luZGV4KGV2ZW50KTsKKwl1c2VycGctPm9mZnNldCA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5jb3VudCk7CisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwkJdXNlcnBnLT5vZmZzZXQgLT0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOworCisJdXNlcnBnLT50aW1lX2VuYWJsZWQgPSBldmVudC0+dG90YWxfdGltZV9lbmFibGVkICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOworCisJdXNlcnBnLT50aW1lX3J1bm5pbmcgPSBldmVudC0+dG90YWxfdGltZV9ydW5uaW5nICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOworCisJYmFycmllcigpOworCSsrdXNlcnBnLT5sb2NrOworCXByZWVtcHRfZW5hYmxlKCk7Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJaW50IHJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKKworCWlmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19NS1dSSVRFKSB7CisJCWlmICh2bWYtPnBnb2ZmID09IDApCisJCQlyZXQgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKKwlpZiAoIWRhdGEpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKHZtZi0+cGdvZmYgPT0gMCkgeworCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+dXNlcl9wYWdlKTsKKwl9IGVsc2UgeworCQlpbnQgbnIgPSB2bWYtPnBnb2ZmIC0gMTsKKworCQlpZiAoKHVuc2lnbmVkKW5yID4gZGF0YS0+bnJfcGFnZXMpCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpCisJCQlnb3RvIHVubG9jazsKKworCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+ZGF0YV9wYWdlc1tucl0pOworCX0KKworCWdldF9wYWdlKHZtZi0+cGFnZSk7CisJdm1mLT5wYWdlLT5tYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CisJdm1mLT5wYWdlLT5pbmRleCAgID0gdm1mLT5wZ29mZjsKKworCXJldCA9IDA7Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5yX3BhZ2VzKQoreworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGk7CisKKwlXQVJOX09OKGF0b21pY19yZWFkKCZldmVudC0+bW1hcF9jb3VudCkpOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEpOworCXNpemUgKz0gbnJfcGFnZXMgKiBzaXplb2Yodm9pZCAqKTsKKworCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJZ290byBmYWlsOworCisJZGF0YS0+dXNlcl9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhLT51c2VyX3BhZ2UpCisJCWdvdG8gZmFpbF91c2VyX3BhZ2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlkYXRhLT5kYXRhX3BhZ2VzW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghZGF0YS0+ZGF0YV9wYWdlc1tpXSkKKwkJCWdvdG8gZmFpbF9kYXRhX3BhZ2VzOworCX0KKworCWRhdGEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CisJYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOworCisJaWYgKGV2ZW50LT5hdHRyLndhdGVybWFyaykgeworCQlkYXRhLT53YXRlcm1hcmsgPSBtaW5fdChsb25nLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKKwkJCQkgICAgICBldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrKTsKKwl9CisJaWYgKCFkYXRhLT53YXRlcm1hcmspCisJCWRhdGEtPndhdGVybWFyayA9IG1heChQQUdFX1NJWkUsIFBBR0VfU0laRSAqIG5yX3BhZ2VzIC8gNCk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIGRhdGEpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZGF0YV9wYWdlczoKKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKKworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT51c2VyX3BhZ2UpOworCitmYWlsX3VzZXJfcGFnZToKKwlrZnJlZShkYXRhKTsKKworZmFpbDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX2ZyZWVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKTsKKworCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOworCV9fZnJlZV9wYWdlKHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBfX3BlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJaW50IGk7CisKKwlkYXRhID0gY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEsIHJjdV9oZWFkKTsKKworCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+dXNlcl9wYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnJfcGFnZXM7IGkrKykKKwkJcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKKworCWtmcmVlKGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBldmVudC0+ZGF0YTsKKworCVdBUk5fT04oYXRvbWljX3JlYWQoJmV2ZW50LT5tbWFwX2NvdW50KSk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIE5VTEwpOworCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgX19wZXJmX21tYXBfZGF0YV9mcmVlKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisKKwlhdG9taWNfaW5jKCZldmVudC0+bW1hcF9jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKworCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKKwlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmZXZlbnQtPm1tYXBfY291bnQsICZldmVudC0+bW1hcF9tdXRleCkpIHsKKwkJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gY3VycmVudF91c2VyKCk7CisKKwkJYXRvbWljX2xvbmdfc3ViKGV2ZW50LT5kYXRhLT5ucl9wYWdlcyArIDEsICZ1c2VyLT5sb2NrZWRfdm0pOworCQl2bWEtPnZtX21tLT5sb2NrZWRfdm0gLT0gZXZlbnQtPmRhdGEtPm5yX2xvY2tlZDsKKwkJcGVyZl9tbWFwX2RhdGFfZnJlZShldmVudCk7CisJCW11dGV4X3VubG9jaygmZXZlbnQtPm1tYXBfbXV0ZXgpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwZXJmX21tYXBfdm1vcHMgPSB7CisJLm9wZW4JCT0gcGVyZl9tbWFwX29wZW4sCisJLmNsb3NlCQk9IHBlcmZfbW1hcF9jbG9zZSwKKwkuZmF1bHQJCT0gcGVyZl9tbWFwX2ZhdWx0LAorCS5wYWdlX21rd3JpdGUJPSBwZXJmX21tYXBfZmF1bHQsCit9OworCitzdGF0aWMgaW50IHBlcmZfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdXNlcl9sb2NrZWQsIHVzZXJfbG9ja19saW1pdDsKKwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKKwl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKKwl1bnNpZ25lZCBsb25nIHZtYV9zaXplOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CisJbG9uZyB1c2VyX2V4dHJhLCBleHRyYTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZtYV9zaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCW5yX3BhZ2VzID0gKHZtYV9zaXplIC8gUEFHRV9TSVpFKSAtIDE7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgZGF0YSBwYWdlcyBlbnN1cmUgdGhleSdyZSBhIHBvd2VyLW9mLXR3byBudW1iZXIsIHNvIHdlCisJICogY2FuIGRvIGJpdG1hc2tzIGluc3RlYWQgb2YgbW9kdWxvLgorCSAqLworCWlmIChucl9wYWdlcyAhPSAwICYmICFpc19wb3dlcl9vZl8yKG5yX3BhZ2VzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodm1hX3NpemUgIT0gUEFHRV9TSVpFICogKDEgKyBucl9wYWdlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZtYS0+dm1fcGdvZmYgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmZXZlbnQtPm1tYXBfbXV0ZXgpOworCWlmIChldmVudC0+b3V0cHV0KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZldmVudC0+bW1hcF9jb3VudCkpIHsKKwkJaWYgKG5yX3BhZ2VzICE9IGV2ZW50LT5kYXRhLT5ucl9wYWdlcykKKwkJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXVzZXJfZXh0cmEgPSBucl9wYWdlcyArIDE7CisJdXNlcl9sb2NrX2xpbWl0ID0gc3lzY3RsX3BlcmZfZXZlbnRfbWxvY2sgPj4gKFBBR0VfU0hJRlQgLSAxMCk7CisKKwkvKgorCSAqIEluY3JlYXNlIHRoZSBsaW1pdCBsaW5lYXJseSB3aXRoIG1vcmUgQ1BVczoKKwkgKi8KKwl1c2VyX2xvY2tfbGltaXQgKj0gbnVtX29ubGluZV9jcHVzKCk7CisKKwl1c2VyX2xvY2tlZCA9IGF0b21pY19sb25nX3JlYWQoJnVzZXItPmxvY2tlZF92bSkgKyB1c2VyX2V4dHJhOworCisJZXh0cmEgPSAwOworCWlmICh1c2VyX2xvY2tlZCA+IHVzZXJfbG9ja19saW1pdCkKKwkJZXh0cmEgPSB1c2VyX2xvY2tlZCAtIHVzZXJfbG9ja19saW1pdDsKKworCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOworCWxvY2tfbGltaXQgPj49IFBBR0VfU0hJRlQ7CisJbG9ja2VkID0gdm1hLT52bV9tbS0+bG9ja2VkX3ZtICsgZXh0cmE7CisKKwlpZiAoKGxvY2tlZCA+IGxvY2tfbGltaXQpICYmIHBlcmZfcGFyYW5vaWRfdHJhY2Vwb2ludF9yYXcoKSAmJgorCQkhY2FwYWJsZShDQVBfSVBDX0xPQ0spKSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJV0FSTl9PTihldmVudC0+ZGF0YSk7CisJcmV0ID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKKwlpZiAocmV0KQorCQlnb3RvIHVubG9jazsKKworCWF0b21pY19zZXQoJmV2ZW50LT5tbWFwX2NvdW50LCAxKTsKKwlhdG9taWNfbG9uZ19hZGQodXNlcl9leHRyYSwgJnVzZXItPmxvY2tlZF92bSk7CisJdm1hLT52bV9tbS0+bG9ja2VkX3ZtICs9IGV4dHJhOworCWV2ZW50LT5kYXRhLT5ucl9sb2NrZWQgPSBleHRyYTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQorCQlldmVudC0+ZGF0YS0+d3JpdGFibGUgPSAxOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7CisKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCXZtYS0+dm1fb3BzID0gJnBlcmZfbW1hcF92bW9wczsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0dmFsOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmZXZlbnQtPmZhc3luYyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwZXJmX2ZvcHMgPSB7CisJLnJlbGVhc2UJCT0gcGVyZl9yZWxlYXNlLAorCS5yZWFkCQkJPSBwZXJmX3JlYWQsCisJLnBvbGwJCQk9IHBlcmZfcG9sbCwKKwkudW5sb2NrZWRfaW9jdGwJCT0gcGVyZl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCQk9IHBlcmZfaW9jdGwsCisJLm1tYXAJCQk9IHBlcmZfbW1hcCwKKwkuZmFzeW5jCQkJPSBwZXJmX2Zhc3luYywKK307CisKKy8qCisgKiBQZXJmIGV2ZW50IHdha2V1cAorICoKKyAqIElmIHRoZXJlJ3MgZGF0YSwgZW5zdXJlIHdlIHNldCB0aGUgcG9sbCgpIHN0YXRlIGFuZCBwdWJsaXNoIGV2ZXJ5dGhpbmcKKyAqIHRvIHVzZXItc3BhY2UgYmVmb3JlIHdha2luZyBldmVyeWJvZHkgdXAuCisgKi8KKwordm9pZCBwZXJmX2V2ZW50X3dha2V1cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJd2FrZV91cF9hbGwoJmV2ZW50LT53YWl0cSk7CisKKwlpZiAoZXZlbnQtPnBlbmRpbmdfa2lsbCkgeworCQlraWxsX2Zhc3luYygmZXZlbnQtPmZhc3luYywgU0lHSU8sIGV2ZW50LT5wZW5kaW5nX2tpbGwpOworCQlldmVudC0+cGVuZGluZ19raWxsID0gMDsKKwl9Cit9CisKKy8qCisgKiBQZW5kaW5nIHdha2V1cHMKKyAqCisgKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCB0byB3YWtldXAgdXAgZnJvbSBOTUkgKG9yIHJxLT5sb2NrKSBjb250ZXh0LgorICoKKyAqIFRoZSBOTUkgYml0IG1lYW5zIHdlIGNhbm5vdCBwb3NzaWJseSB0YWtlIGxvY2tzLiBUaGVyZWZvcmUsIG1haW50YWluIGEKKyAqIHNpbmdsZSBsaW5rZWQgbGlzdCBhbmQgdXNlIGNtcHhjaGcoKSB0byBhZGQgZW50cmllcyBsb2NrbGVzcy4KKyAqLworCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfZXZlbnQoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY29udGFpbmVyX29mKGVudHJ5LAorCQkJc3RydWN0IHBlcmZfZXZlbnQsIHBlbmRpbmcpOworCisJaWYgKGV2ZW50LT5wZW5kaW5nX2Rpc2FibGUpIHsKKwkJZXZlbnQtPnBlbmRpbmdfZGlzYWJsZSA9IDA7CisJCV9fcGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTsKKwl9CisKKwlpZiAoZXZlbnQtPnBlbmRpbmdfd2FrZXVwKSB7CisJCWV2ZW50LT5wZW5kaW5nX3dha2V1cCA9IDA7CisJCXBlcmZfZXZlbnRfd2FrZXVwKGV2ZW50KTsKKwl9Cit9CisKKyNkZWZpbmUgUEVORElOR19UQUlMICgoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqKS0xVUwpCisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICosIHBlcmZfcGVuZGluZ19oZWFkKSA9IHsKKwlQRU5ESU5HX1RBSUwsCit9OworCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfcXVldWUoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqZW50cnksCisJCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKikpCit7CisJc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqKmhlYWQ7CisKKwlpZiAoY21weGNoZygmZW50cnktPm5leHQsIE5VTEwsIFBFTkRJTkdfVEFJTCkgIT0gTlVMTCkKKwkJcmV0dXJuOworCisJZW50cnktPmZ1bmMgPSBmdW5jOworCisJaGVhZCA9ICZnZXRfY3B1X3ZhcihwZXJmX3BlbmRpbmdfaGVhZCk7CisKKwlkbyB7CisJCWVudHJ5LT5uZXh0ID0gKmhlYWQ7CisJfSB3aGlsZSAoY21weGNoZyhoZWFkLCBlbnRyeS0+bmV4dCwgZW50cnkpICE9IGVudHJ5LT5uZXh0KTsKKworCXNldF9wZXJmX2V2ZW50X3BlbmRpbmcoKTsKKworCXB1dF9jcHVfdmFyKHBlcmZfcGVuZGluZ19oZWFkKTsKK30KKworc3RhdGljIGludCBfX3BlcmZfcGVuZGluZ19ydW4odm9pZCkKK3sKKwlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICpsaXN0OworCWludCBuciA9IDA7CisKKwlsaXN0ID0geGNoZygmX19nZXRfY3B1X3ZhcihwZXJmX3BlbmRpbmdfaGVhZCksIFBFTkRJTkdfVEFJTCk7CisJd2hpbGUgKGxpc3QgIT0gUEVORElOR19UQUlMKSB7CisJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopOworCQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICplbnRyeSA9IGxpc3Q7CisKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisKKwkJZnVuYyA9IGVudHJ5LT5mdW5jOworCQllbnRyeS0+bmV4dCA9IE5VTEw7CisJCS8qCisJCSAqIEVuc3VyZSB3ZSBvYnNlcnZlIHRoZSB1bnF1ZXVlIGJlZm9yZSB3ZSBpc3N1ZSB0aGUgd2FrZXVwLAorCQkgKiBzbyB0aGF0IHdlIHdvbid0IGJlIHdhaXRpbmcgZm9yZXZlci4KKwkJICogLS0gc2VlIHBlcmZfbm90X3BlbmRpbmcoKS4KKwkJICovCisJCXNtcF93bWIoKTsKKworCQlmdW5jKGVudHJ5KTsKKwkJbnIrKzsKKwl9CisKKwlyZXR1cm4gbnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfbm90X3BlbmRpbmcoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCS8qCisJICogSWYgd2UgZmx1c2ggb24gd2hhdGV2ZXIgY3B1IHdlIHJ1biwgdGhlcmUgaXMgYSBjaGFuY2Ugd2UgZG9uJ3QKKwkgKiBuZWVkIHRvIHdhaXQuCisJICovCisJZ2V0X2NwdSgpOworCV9fcGVyZl9wZW5kaW5nX3J1bigpOworCXB1dF9jcHUoKTsKKworCS8qCisJICogRW5zdXJlIHdlIHNlZSB0aGUgcHJvcGVyIHF1ZXVlIHN0YXRlIGJlZm9yZSBnb2luZyB0byBzbGVlcAorCSAqIHNvIHRoYXQgd2UgZG8gbm90IG1pc3MgdGhlIHdha2V1cC4gLS0gc2VlIHBlcmZfcGVuZGluZ19oYW5kbGUoKQorCSAqLworCXNtcF9ybWIoKTsKKwlyZXR1cm4gZXZlbnQtPnBlbmRpbmcubmV4dCA9PSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJd2FpdF9ldmVudChldmVudC0+d2FpdHEsIHBlcmZfbm90X3BlbmRpbmcoZXZlbnQpKTsKK30KKwordm9pZCBwZXJmX2V2ZW50X2RvX3BlbmRpbmcodm9pZCkKK3sKKwlfX3BlcmZfcGVuZGluZ19ydW4oKTsKK30KKworLyoKKyAqIENhbGxjaGFpbiBzdXBwb3J0IC0tIGFyY2ggc3BlY2lmaWMKKyAqLworCitfX3dlYWsgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICpwZXJmX2NhbGxjaGFpbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIE91dHB1dAorICovCitzdGF0aWMgYm9vbCBwZXJmX291dHB1dF9zcGFjZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgdGFpbCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaWYgKCFkYXRhLT53cml0YWJsZSkKKwkJcmV0dXJuIHRydWU7CisKKwltYXNrID0gKGRhdGEtPm5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC0gMTsKKworCW9mZnNldCA9IChvZmZzZXQgLSB0YWlsKSAmIG1hc2s7CisJaGVhZCAgID0gKGhlYWQgICAtIHRhaWwpICYgbWFzazsKKworCWlmICgoaW50KShoZWFkIC0gb2Zmc2V0KSA8IDApCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBwZXJmX291dHB1dF93YWtldXAoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQoreworCWF0b21pY19zZXQoJmhhbmRsZS0+ZGF0YS0+cG9sbCwgUE9MTF9JTik7CisKKwlpZiAoaGFuZGxlLT5ubWkpIHsKKwkJaGFuZGxlLT5ldmVudC0+cGVuZGluZ193YWtldXAgPSAxOworCQlwZXJmX3BlbmRpbmdfcXVldWUoJmhhbmRsZS0+ZXZlbnQtPnBlbmRpbmcsCisJCQkJICAgcGVyZl9wZW5kaW5nX2V2ZW50KTsKKwl9IGVsc2UKKwkJcGVyZl9ldmVudF93YWtldXAoaGFuZGxlLT5ldmVudCk7Cit9CisKKy8qCisgKiBDdXJpb3VzIGxvY2tpbmcgY29uc3RydWN0LgorICoKKyAqIFdlIG5lZWQgdG8gZW5zdXJlIGEgbGF0ZXIgZXZlbnRfaWQgZG9lc24ndCBwdWJsaXNoIGEgaGVhZCB3aGVuIGEgZm9ybWVyCisgKiBldmVudF9pZCBpc24ndCBkb25lIHdyaXRpbmcuIEhvd2V2ZXIgc2luY2Ugd2UgbmVlZCB0byBkZWFsIHdpdGggTk1JcyB3ZQorICogY2Fubm90IGZ1bGx5IHNlcmlhbGl6ZSB0aGluZ3MuCisgKgorICogV2hhdCB3ZSBkbyBpcyBzZXJpYWxpemUgYmV0d2VlbiBDUFVzIHNvIHdlIG9ubHkgaGF2ZSB0byBkZWFsIHdpdGggTk1JCisgKiBuZXN0aW5nIG9uIGEgc2luZ2xlIENQVS4KKyAqCisgKiBXZSBvbmx5IHB1Ymxpc2ggdGhlIGhlYWQgKGFuZCBnZW5lcmF0ZSBhIHdha2V1cCkgd2hlbiB0aGUgb3V0ZXItbW9zdAorICogZXZlbnRfaWQgY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCBwZXJmX291dHB1dF9sb2NrKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisJaW50IGNwdTsKKworCWhhbmRsZS0+bG9ja2VkID0gMDsKKworCWxvY2FsX2lycV9zYXZlKGhhbmRsZS0+ZmxhZ3MpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChpbl9ubWkoKSAmJiBhdG9taWNfcmVhZCgmZGF0YS0+bG9jaykgPT0gY3B1KQorCQlyZXR1cm47CisKKwl3aGlsZSAoYXRvbWljX2NtcHhjaGcoJmRhdGEtPmxvY2ssIC0xLCBjcHUpICE9IC0xKQorCQljcHVfcmVsYXgoKTsKKworCWhhbmRsZS0+bG9ja2VkID0gMTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfdW5sb2NrKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisJdW5zaWduZWQgbG9uZyBoZWFkOworCWludCBjcHU7CisKKwlkYXRhLT5kb25lX2hlYWQgPSBkYXRhLT5oZWFkOworCisJaWYgKCFoYW5kbGUtPmxvY2tlZCkKKwkJZ290byBvdXQ7CisKK2FnYWluOgorCS8qCisJICogVGhlIHhjaGcgaW1wbGllcyBhIGZ1bGwgYmFycmllciB0aGF0IGVuc3VyZXMgYWxsIHdyaXRlcyBhcmUgZG9uZQorCSAqIGJlZm9yZSB3ZSBwdWJsaXNoIHRoZSBuZXcgaGVhZCwgbWF0Y2hlZCBieSBhIHJtYigpIGluIHVzZXJzcGFjZSB3aGVuCisJICogcmVhZGluZyB0aGlzIHBvc2l0aW9uLgorCSAqLworCXdoaWxlICgoaGVhZCA9IGF0b21pY19sb25nX3hjaGcoJmRhdGEtPmRvbmVfaGVhZCwgMCkpKQorCQlkYXRhLT51c2VyX3BhZ2UtPmRhdGFfaGVhZCA9IGhlYWQ7CisKKwkvKgorCSAqIE5NSSBjYW4gaGFwcGVuIGhlcmUsIHdoaWNoIG1lYW5zIHdlIGNhbiBtaXNzIGEgZG9uZV9oZWFkIHVwZGF0ZS4KKwkgKi8KKworCWNwdSA9IGF0b21pY194Y2hnKCZkYXRhLT5sb2NrLCAtMSk7CisJV0FSTl9PTl9PTkNFKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJLyoKKwkgKiBUaGVyZWZvcmUgd2UgaGF2ZSB0byB2YWxpZGF0ZSB3ZSBkaWQgbm90IGluZGVlZCBkbyBzby4KKwkgKi8KKwlpZiAodW5saWtlbHkoYXRvbWljX2xvbmdfcmVhZCgmZGF0YS0+ZG9uZV9oZWFkKSkpIHsKKwkJLyoKKwkJICogU2luY2Ugd2UgaGFkIGl0IGxvY2tlZCwgd2UgY2FuIGxvY2sgaXQgYWdhaW4uCisJCSAqLworCQl3aGlsZSAoYXRvbWljX2NtcHhjaGcoJmRhdGEtPmxvY2ssIC0xLCBjcHUpICE9IC0xKQorCQkJY3B1X3JlbGF4KCk7CisKKwkJZ290byBhZ2FpbjsKKwl9CisKKwlpZiAoYXRvbWljX3hjaGcoJmRhdGEtPndha2V1cCwgMCkpCisJCXBlcmZfb3V0cHV0X3dha2V1cChoYW5kbGUpOworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGhhbmRsZS0+ZmxhZ3MpOworfQorCit2b2lkIHBlcmZfb3V0cHV0X2NvcHkoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkgICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHBhZ2VzX21hc2s7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl2b2lkICoqcGFnZXM7CisKKwlvZmZzZXQJCT0gaGFuZGxlLT5vZmZzZXQ7CisJcGFnZXNfbWFzawk9IGhhbmRsZS0+ZGF0YS0+bnJfcGFnZXMgLSAxOworCXBhZ2VzCQk9IGhhbmRsZS0+ZGF0YS0+ZGF0YV9wYWdlczsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OworCQlpbnQgbnI7CisKKwkJbnIJICAgID0gKG9mZnNldCA+PiBQQUdFX1NISUZUKSAmIHBhZ2VzX21hc2s7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpOworCQlzaXplCSAgICA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQsIGxlbik7CisKKwkJbWVtY3B5KHBhZ2VzW25yXSArIHBhZ2Vfb2Zmc2V0LCBidWYsIHNpemUpOworCisJCWxlbgkgICAgLT0gc2l6ZTsKKwkJYnVmCSAgICArPSBzaXplOworCQlvZmZzZXQJICAgICs9IHNpemU7CisJfSB3aGlsZSAobGVuKTsKKworCWhhbmRsZS0+b2Zmc2V0ID0gb2Zmc2V0OworCisJLyoKKwkgKiBDaGVjayB3ZSBkaWRuJ3QgY29weSBwYXN0IG91ciByZXNlcnZhdGlvbiB3aW5kb3csIHRha2luZyB0aGUKKwkgKiBwb3NzaWJsZSB1bnNpZ25lZCBpbnQgd3JhcCBpbnRvIGFjY291bnQuCisJICovCisJV0FSTl9PTl9PTkNFKCgobG9uZykoaGFuZGxlLT5oZWFkIC0gaGFuZGxlLT5vZmZzZXQpKSA8IDApOworfQorCitpbnQgcGVyZl9vdXRwdXRfYmVnaW4oc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHVuc2lnbmVkIGludCBzaXplLAorCQkgICAgICBpbnQgbm1pLCBpbnQgc2FtcGxlKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpvdXRwdXRfZXZlbnQ7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgdGFpbCwgb2Zmc2V0LCBoZWFkOworCWludCBoYXZlX2xvc3Q7CisJc3RydWN0IHsKKwkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwkJdTY0CQkJIGlkOworCQl1NjQJCQkgbG9zdDsKKwl9IGxvc3RfZXZlbnQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJLyoKKwkgKiBGb3IgaW5oZXJpdGVkIGV2ZW50cyB3ZSBzZW5kIGFsbCB0aGUgb3V0cHV0IHRvd2FyZHMgdGhlIHBhcmVudC4KKwkgKi8KKwlpZiAoZXZlbnQtPnBhcmVudCkKKwkJZXZlbnQgPSBldmVudC0+cGFyZW50OworCisJb3V0cHV0X2V2ZW50ID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5vdXRwdXQpOworCWlmIChvdXRwdXRfZXZlbnQpCisJCWV2ZW50ID0gb3V0cHV0X2V2ZW50OworCisJZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7CisJaWYgKCFkYXRhKQorCQlnb3RvIG91dDsKKworCWhhbmRsZS0+ZGF0YQk9IGRhdGE7CisJaGFuZGxlLT5ldmVudAk9IGV2ZW50OworCWhhbmRsZS0+bm1pCT0gbm1pOworCWhhbmRsZS0+c2FtcGxlCT0gc2FtcGxlOworCisJaWYgKCFkYXRhLT5ucl9wYWdlcykKKwkJZ290byBmYWlsOworCisJaGF2ZV9sb3N0ID0gYXRvbWljX3JlYWQoJmRhdGEtPmxvc3QpOworCWlmIChoYXZlX2xvc3QpCisJCXNpemUgKz0gc2l6ZW9mKGxvc3RfZXZlbnQpOworCisJcGVyZl9vdXRwdXRfbG9jayhoYW5kbGUpOworCisJZG8geworCQkvKgorCQkgKiBVc2Vyc3BhY2UgY291bGQgY2hvb3NlIHRvIGlzc3VlIGEgbWIoKSBiZWZvcmUgdXBkYXRpbmcgdGhlCisJCSAqIHRhaWwgcG9pbnRlci4gU28gdGhhdCBhbGwgcmVhZHMgd2lsbCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZQorCQkgKiB3cml0ZSBpcyBpc3N1ZWQuCisJCSAqLworCQl0YWlsID0gQUNDRVNTX09OQ0UoZGF0YS0+dXNlcl9wYWdlLT5kYXRhX3RhaWwpOworCQlzbXBfcm1iKCk7CisJCW9mZnNldCA9IGhlYWQgPSBhdG9taWNfbG9uZ19yZWFkKCZkYXRhLT5oZWFkKTsKKwkJaGVhZCArPSBzaXplOworCQlpZiAodW5saWtlbHkoIXBlcmZfb3V0cHV0X3NwYWNlKGRhdGEsIHRhaWwsIG9mZnNldCwgaGVhZCkpKQorCQkJZ290byBmYWlsOworCX0gd2hpbGUgKGF0b21pY19sb25nX2NtcHhjaGcoJmRhdGEtPmhlYWQsIG9mZnNldCwgaGVhZCkgIT0gb2Zmc2V0KTsKKworCWhhbmRsZS0+b2Zmc2V0CT0gb2Zmc2V0OworCWhhbmRsZS0+aGVhZAk9IGhlYWQ7CisKKwlpZiAoaGVhZCAtIHRhaWwgPiBkYXRhLT53YXRlcm1hcmspCisJCWF0b21pY19zZXQoJmRhdGEtPndha2V1cCwgMSk7CisKKwlpZiAoaGF2ZV9sb3N0KSB7CisJCWxvc3RfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9MT1NUOworCQlsb3N0X2V2ZW50LmhlYWRlci5taXNjID0gMDsKKwkJbG9zdF9ldmVudC5oZWFkZXIuc2l6ZSA9IHNpemVvZihsb3N0X2V2ZW50KTsKKwkJbG9zdF9ldmVudC5pZCAgICAgICAgICA9IGV2ZW50LT5pZDsKKwkJbG9zdF9ldmVudC5sb3N0ICAgICAgICA9IGF0b21pY194Y2hnKCZkYXRhLT5sb3N0LCAwKTsKKworCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBsb3N0X2V2ZW50KTsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlhdG9taWNfaW5jKCZkYXRhLT5sb3N0KTsKKwlwZXJmX291dHB1dF91bmxvY2soaGFuZGxlKTsKK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiAtRU5PU1BDOworfQorCit2b2lkIHBlcmZfb3V0cHV0X2VuZChzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gaGFuZGxlLT5ldmVudDsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisKKwlpbnQgd2FrZXVwX2V2ZW50cyA9IGV2ZW50LT5hdHRyLndha2V1cF9ldmVudHM7CisKKwlpZiAoaGFuZGxlLT5zYW1wbGUgJiYgd2FrZXVwX2V2ZW50cykgeworCQlpbnQgZXZlbnRzID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmV2ZW50cyk7CisJCWlmIChldmVudHMgPj0gd2FrZXVwX2V2ZW50cykgeworCQkJYXRvbWljX3N1Yih3YWtldXBfZXZlbnRzLCAmZGF0YS0+ZXZlbnRzKTsKKwkJCWF0b21pY19zZXQoJmRhdGEtPndha2V1cCwgMSk7CisJCX0KKwl9CisKKwlwZXJmX291dHB1dF91bmxvY2soaGFuZGxlKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHUzMiBwZXJmX2V2ZW50X3BpZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwkvKgorCSAqIG9ubHkgdG9wIGxldmVsIGV2ZW50cyBoYXZlIHRoZSBwaWQgbmFtZXNwYWNlIHRoZXkgd2VyZSBjcmVhdGVkIGluCisJICovCisJaWYgKGV2ZW50LT5wYXJlbnQpCisJCWV2ZW50ID0gZXZlbnQtPnBhcmVudDsKKworCXJldHVybiB0YXNrX3RnaWRfbnJfbnMocCwgZXZlbnQtPm5zKTsKK30KKworc3RhdGljIHUzMiBwZXJmX2V2ZW50X3RpZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwkvKgorCSAqIG9ubHkgdG9wIGxldmVsIGV2ZW50cyBoYXZlIHRoZSBwaWQgbmFtZXNwYWNlIHRoZXkgd2VyZSBjcmVhdGVkIGluCisJICovCisJaWYgKGV2ZW50LT5wYXJlbnQpCisJCWV2ZW50ID0gZXZlbnQtPnBhcmVudDsKKworCXJldHVybiB0YXNrX3BpZF9ucl9ucyhwLCBldmVudC0+bnMpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX291dHB1dF9yZWFkX29uZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQkJIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1NjQgcmVhZF9mb3JtYXQgPSBldmVudC0+YXR0ci5yZWFkX2Zvcm1hdDsKKwl1NjQgdmFsdWVzWzRdOworCWludCBuID0gMDsKKworCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpIHsKKwkJdmFsdWVzW24rK10gPSBldmVudC0+dG90YWxfdGltZV9lbmFibGVkICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOworCX0KKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKKwkJdmFsdWVzW24rK10gPSBldmVudC0+dG90YWxfdGltZV9ydW5uaW5nICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOworCX0KKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkKKwkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2V2ZW50X2lkKGV2ZW50KTsKKworCXBlcmZfb3V0cHV0X2NvcHkoaGFuZGxlLCB2YWx1ZXMsIG4gKiBzaXplb2YodTY0KSk7Cit9CisKKy8qCisgKiBYWFggUEVSRl9GT1JNQVRfR1JPVVAgdnMgaW5oZXJpdGVkIGV2ZW50cyBzZWVtcyBkaWZmaWN1bHQuCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfb3V0cHV0X3JlYWRfZ3JvdXAoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlciwgKnN1YjsKKwl1NjQgcmVhZF9mb3JtYXQgPSBldmVudC0+YXR0ci5yZWFkX2Zvcm1hdDsKKwl1NjQgdmFsdWVzWzVdOworCWludCBuID0gMDsKKworCXZhbHVlc1tuKytdID0gMSArIGxlYWRlci0+bnJfc2libGluZ3M7CisKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpCisJCXZhbHVlc1tuKytdID0gbGVhZGVyLT50b3RhbF90aW1lX2VuYWJsZWQ7CisKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpCisJCXZhbHVlc1tuKytdID0gbGVhZGVyLT50b3RhbF90aW1lX3J1bm5pbmc7CisKKwlpZiAobGVhZGVyICE9IGV2ZW50KQorCQlsZWFkZXItPnBtdS0+cmVhZChsZWFkZXIpOworCisJdmFsdWVzW24rK10gPSBhdG9taWM2NF9yZWFkKCZsZWFkZXItPmNvdW50KTsKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkKKwkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2V2ZW50X2lkKGxlYWRlcik7CisKKwlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJbiA9IDA7CisKKwkJaWYgKHN1YiAhPSBldmVudCkKKwkJCXN1Yi0+cG11LT5yZWFkKHN1Yik7CisKKwkJdmFsdWVzW24rK10gPSBhdG9taWM2NF9yZWFkKCZzdWItPmNvdW50KTsKKwkJaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCisJCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoc3ViKTsKKworCQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfcmVhZChzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQkgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoZXZlbnQtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkKKwkJcGVyZl9vdXRwdXRfcmVhZF9ncm91cChoYW5kbGUsIGV2ZW50KTsKKwllbHNlCisJCXBlcmZfb3V0cHV0X3JlYWRfb25lKGhhbmRsZSwgZXZlbnQpOworfQorCit2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhlYWRlciwKKwkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXU2NCBzYW1wbGVfdHlwZSA9IGRhdGEtPnR5cGU7CisKKwlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCAqaGVhZGVyKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKQorCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT5pcCk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpCisJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPnRpZF9lbnRyeSk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQorCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT50aW1lKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCisJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPmFkZHIpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSUQpCisJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPmlkKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+c3RyZWFtX2lkKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+Y3B1X2VudHJ5KTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+cGVyaW9kKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFQUQpCisJCXBlcmZfb3V0cHV0X3JlYWQoaGFuZGxlLCBldmVudCk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pIHsKKwkJaWYgKGRhdGEtPmNhbGxjaGFpbikgeworCQkJaW50IHNpemUgPSAxOworCisJCQlpZiAoZGF0YS0+Y2FsbGNoYWluKQorCQkJCXNpemUgKz0gZGF0YS0+Y2FsbGNoYWluLT5ucjsKKworCQkJc2l6ZSAqPSBzaXplb2YodTY0KTsKKworCQkJcGVyZl9vdXRwdXRfY29weShoYW5kbGUsIGRhdGEtPmNhbGxjaGFpbiwgc2l6ZSk7CisJCX0gZWxzZSB7CisJCQl1NjQgbnIgPSAwOworCQkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgbnIpOworCQl9CisJfQorCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CisJCWlmIChkYXRhLT5yYXcpIHsKKwkJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPnJhdy0+c2l6ZSk7CisJCQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgZGF0YS0+cmF3LT5kYXRhLAorCQkJCQkgZGF0YS0+cmF3LT5zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCB7CisJCQkJdTMyCXNpemU7CisJCQkJdTMyCWRhdGE7CisJCQl9IHJhdyA9IHsKKwkJCQkuc2l6ZSA9IHNpemVvZih1MzIpLAorCQkJCS5kYXRhID0gMCwKKwkJCX07CisJCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCByYXcpOworCQl9CisJfQorfQorCit2b2lkIHBlcmZfcHJlcGFyZV9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsCisJCQkgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCisJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXU2NCBzYW1wbGVfdHlwZSA9IGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlOworCisJZGF0YS0+dHlwZSA9IHNhbXBsZV90eXBlOworCisJaGVhZGVyLT50eXBlID0gUEVSRl9SRUNPUkRfU0FNUExFOworCWhlYWRlci0+c2l6ZSA9IHNpemVvZigqaGVhZGVyKTsKKworCWhlYWRlci0+bWlzYyA9IDA7CisJaGVhZGVyLT5taXNjIHw9IHBlcmZfbWlzY19mbGFncyhyZWdzKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKSB7CisJCWRhdGEtPmlwID0gcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+aXApOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkgeworCQkvKiBuYW1lc3BhY2UgaXNzdWVzICovCisJCWRhdGEtPnRpZF9lbnRyeS5waWQgPSBwZXJmX2V2ZW50X3BpZChldmVudCwgY3VycmVudCk7CisJCWRhdGEtPnRpZF9lbnRyeS50aWQgPSBwZXJmX2V2ZW50X3RpZChldmVudCwgY3VycmVudCk7CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT50aWRfZW50cnkpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpIHsKKwkJZGF0YS0+dGltZSA9IHBlcmZfY2xvY2soKTsKKworCQloZWFkZXItPnNpemUgKz0gc2l6ZW9mKGRhdGEtPnRpbWUpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCisJCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+YWRkcik7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkgeworCQlkYXRhLT5pZCA9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpOworCisJCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+aWQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkgeworCQlkYXRhLT5zdHJlYW1faWQgPSBldmVudC0+aWQ7CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT5zdHJlYW1faWQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkgeworCQlkYXRhLT5jcHVfZW50cnkuY3B1CQk9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJCWRhdGEtPmNwdV9lbnRyeS5yZXNlcnZlZAk9IDA7CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT5jcHVfZW50cnkpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT5wZXJpb2QpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVBRCkKKwkJaGVhZGVyLT5zaXplICs9IHBlcmZfZXZlbnRfcmVhZF9zaXplKGV2ZW50KTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgeworCQlpbnQgc2l6ZSA9IDE7CisKKwkJZGF0YS0+Y2FsbGNoYWluID0gcGVyZl9jYWxsY2hhaW4ocmVncyk7CisKKwkJaWYgKGRhdGEtPmNhbGxjaGFpbikKKwkJCXNpemUgKz0gZGF0YS0+Y2FsbGNoYWluLT5ucjsKKworCQloZWFkZXItPnNpemUgKz0gc2l6ZSAqIHNpemVvZih1NjQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgeworCQlpbnQgc2l6ZSA9IHNpemVvZih1MzIpOworCisJCWlmIChkYXRhLT5yYXcpCisJCQlzaXplICs9IGRhdGEtPnJhdy0+c2l6ZTsKKwkJZWxzZQorCQkJc2l6ZSArPSBzaXplb2YodTMyKTsKKworCQlXQVJOX09OX09OQ0Uoc2l6ZSAmIChzaXplb2YodTY0KS0xKSk7CisJCWhlYWRlci0+c2l6ZSArPSBzaXplOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9vdXRwdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbm1pLAorCQkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisKKwlwZXJmX3ByZXBhcmVfc2FtcGxlKCZoZWFkZXIsIGRhdGEsIGV2ZW50LCByZWdzKTsKKworCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwgaGVhZGVyLnNpemUsIG5taSwgMSkpCisJCXJldHVybjsKKworCXBlcmZfb3V0cHV0X3NhbXBsZSgmaGFuZGxlLCAmaGVhZGVyLCBkYXRhLCBldmVudCk7CisKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Cit9CisKKy8qCisgKiByZWFkIGV2ZW50X2lkCisgKi8KKworc3RydWN0IHBlcmZfcmVhZF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKworCXUzMgkJCQlwaWQ7CisJdTMyCQkJCXRpZDsKK307CisKK3N0YXRpYyB2b2lkCitwZXJmX2V2ZW50X3JlYWRfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX3JlYWRfZXZlbnQgcmVhZF9ldmVudCA9IHsKKwkJLmhlYWRlciA9IHsKKwkJCS50eXBlID0gUEVSRl9SRUNPUkRfUkVBRCwKKwkJCS5taXNjID0gMCwKKwkJCS5zaXplID0gc2l6ZW9mKHJlYWRfZXZlbnQpICsgcGVyZl9ldmVudF9yZWFkX3NpemUoZXZlbnQpLAorCQl9LAorCQkucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIHRhc2spLAorCQkudGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIHRhc2spLAorCX07CisJaW50IHJldDsKKworCXJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCByZWFkX2V2ZW50LmhlYWRlci5zaXplLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgcmVhZF9ldmVudCk7CisJcGVyZl9vdXRwdXRfcmVhZCgmaGFuZGxlLCBldmVudCk7CisKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Cit9CisKKy8qCisgKiB0YXNrIHRyYWNraW5nIC0tIGZvcmsvZXhpdAorICoKKyAqIGVuYWJsZWQgYnk6IGF0dHIuY29tbSB8IGF0dHIubW1hcCB8IGF0dHIudGFzaworICovCisKK3N0cnVjdCBwZXJmX3Rhc2tfZXZlbnQgeworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRhc2s7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dAkqdGFza19jdHg7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCisJCXUzMgkJCQlwaWQ7CisJCXUzMgkJCQlwcGlkOworCQl1MzIJCQkJdGlkOworCQl1MzIJCQkJcHRpZDsKKwkJdTY0CQkJCXRpbWU7CisJfSBldmVudF9pZDsKK307CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfdGFza19vdXRwdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSAgICAgc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSB0YXNrX2V2ZW50LT50YXNrOworCWludCByZXQ7CisKKwlzaXplICA9IHRhc2tfZXZlbnQtPmV2ZW50X2lkLmhlYWRlci5zaXplOworCXJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCBzaXplLCAwLCAwKTsKKworCWlmIChyZXQpCisJCXJldHVybjsKKworCXRhc2tfZXZlbnQtPmV2ZW50X2lkLnBpZCA9IHBlcmZfZXZlbnRfcGlkKGV2ZW50LCB0YXNrKTsKKwl0YXNrX2V2ZW50LT5ldmVudF9pZC5wcGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIGN1cnJlbnQpOworCisJdGFza19ldmVudC0+ZXZlbnRfaWQudGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIHRhc2spOworCXRhc2tfZXZlbnQtPmV2ZW50X2lkLnB0aWQgPSBwZXJmX2V2ZW50X3RpZChldmVudCwgY3VycmVudCk7CisKKwl0YXNrX2V2ZW50LT5ldmVudF9pZC50aW1lID0gcGVyZl9jbG9jaygpOworCisJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIHRhc2tfZXZlbnQtPmV2ZW50X2lkKTsKKworCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3Rhc2tfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmIChldmVudC0+YXR0ci5jb21tIHx8IGV2ZW50LT5hdHRyLm1tYXAgfHwgZXZlbnQtPmF0dHIudGFzaykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF90YXNrX2N0eChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkJICBzdHJ1Y3QgcGVyZl90YXNrX2V2ZW50ICp0YXNrX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgeworCQlpZiAocGVyZl9ldmVudF90YXNrX21hdGNoKGV2ZW50KSkKKwkJCXBlcmZfZXZlbnRfdGFza19vdXRwdXQoZXZlbnQsIHRhc2tfZXZlbnQpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF90YXNrX2V2ZW50KHN0cnVjdCBwZXJmX3Rhc2tfZXZlbnQgKnRhc2tfZXZlbnQpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSB0YXNrX2V2ZW50LT50YXNrX2N0eDsKKworCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlwZXJmX2V2ZW50X3Rhc2tfY3R4KCZjcHVjdHgtPmN0eCwgdGFza19ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKCFjdHgpCisJCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrX2V2ZW50LT50YXNrLT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpCisJCXBlcmZfZXZlbnRfdGFza19jdHgoY3R4LCB0YXNrX2V2ZW50KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnRhc2tfY3R4LAorCQkJICAgICAgaW50IG5ldykKK3sKKwlzdHJ1Y3QgcGVyZl90YXNrX2V2ZW50IHRhc2tfZXZlbnQ7CisKKwlpZiAoIWF0b21pY19yZWFkKCZucl9jb21tX2V2ZW50cykgJiYKKwkgICAgIWF0b21pY19yZWFkKCZucl9tbWFwX2V2ZW50cykgJiYKKwkgICAgIWF0b21pY19yZWFkKCZucl90YXNrX2V2ZW50cykpCisJCXJldHVybjsKKworCXRhc2tfZXZlbnQgPSAoc3RydWN0IHBlcmZfdGFza19ldmVudCl7CisJCS50YXNrCSAgPSB0YXNrLAorCQkudGFza19jdHggPSB0YXNrX2N0eCwKKwkJLmV2ZW50X2lkICAgID0geworCQkJLmhlYWRlciA9IHsKKwkJCQkudHlwZSA9IG5ldyA/IFBFUkZfUkVDT1JEX0ZPUksgOiBQRVJGX1JFQ09SRF9FWElULAorCQkJCS5taXNjID0gMCwKKwkJCQkuc2l6ZSA9IHNpemVvZih0YXNrX2V2ZW50LmV2ZW50X2lkKSwKKwkJCX0sCisJCQkvKiAucGlkICAqLworCQkJLyogLnBwaWQgKi8KKwkJCS8qIC50aWQgICovCisJCQkvKiAucHRpZCAqLworCQl9LAorCX07CisKKwlwZXJmX2V2ZW50X3Rhc2tfZXZlbnQoJnRhc2tfZXZlbnQpOworfQorCit2b2lkIHBlcmZfZXZlbnRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcGVyZl9ldmVudF90YXNrKHRhc2ssIE5VTEwsIDEpOworfQorCisvKgorICogY29tbSB0cmFja2luZworICovCisKK3N0cnVjdCBwZXJmX2NvbW1fZXZlbnQgeworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKKwljaGFyCQkJKmNvbW07CisJaW50CQkJY29tbV9zaXplOworCisJc3RydWN0IHsKKwkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKworCQl1MzIJCQkJcGlkOworCQl1MzIJCQkJdGlkOworCX0gZXZlbnRfaWQ7Cit9OworCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NvbW1fb3V0cHV0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgICAgIHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCit7CisJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJaW50IHNpemUgPSBjb21tX2V2ZW50LT5ldmVudF9pZC5oZWFkZXIuc2l6ZTsKKwlpbnQgcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsIHNpemUsIDAsIDApOworCisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJY29tbV9ldmVudC0+ZXZlbnRfaWQucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIGNvbW1fZXZlbnQtPnRhc2spOworCWNvbW1fZXZlbnQtPmV2ZW50X2lkLnRpZCA9IHBlcmZfZXZlbnRfdGlkKGV2ZW50LCBjb21tX2V2ZW50LT50YXNrKTsKKworCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBjb21tX2V2ZW50LT5ldmVudF9pZCk7CisJcGVyZl9vdXRwdXRfY29weSgmaGFuZGxlLCBjb21tX2V2ZW50LT5jb21tLAorCQkJCSAgIGNvbW1fZXZlbnQtPmNvbW1fc2l6ZSk7CisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT5hdHRyLmNvbW0pCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY29tbV9jdHgoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkJCSAgc3RydWN0IHBlcmZfY29tbV9ldmVudCAqY29tbV9ldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9SVU5OSU5HIHx8IGxpc3RfZW1wdHkoJmN0eC0+ZXZlbnRfbGlzdCkpCisJCXJldHVybjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKKwkJaWYgKHBlcmZfZXZlbnRfY29tbV9tYXRjaChldmVudCkpCisJCQlwZXJmX2V2ZW50X2NvbW1fb3V0cHV0KGV2ZW50LCBjb21tX2V2ZW50KTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY29tbV9ldmVudChzdHJ1Y3QgcGVyZl9jb21tX2V2ZW50ICpjb21tX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCXVuc2lnbmVkIGludCBzaXplOworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKworCW1lbXNldChjb21tLCAwLCBzaXplb2YoY29tbSkpOworCXN0cm5jcHkoY29tbSwgY29tbV9ldmVudC0+dGFzay0+Y29tbSwgc2l6ZW9mKGNvbW0pKTsKKwlzaXplID0gQUxJR04oc3RybGVuKGNvbW0pKzEsIHNpemVvZih1NjQpKTsKKworCWNvbW1fZXZlbnQtPmNvbW0gPSBjb21tOworCWNvbW1fZXZlbnQtPmNvbW1fc2l6ZSA9IHNpemU7CisKKwljb21tX2V2ZW50LT5ldmVudF9pZC5oZWFkZXIuc2l6ZSA9IHNpemVvZihjb21tX2V2ZW50LT5ldmVudF9pZCkgKyBzaXplOworCisJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXBlcmZfZXZlbnRfY29tbV9jdHgoJmNwdWN0eC0+Y3R4LCBjb21tX2V2ZW50KTsKKwlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwkvKgorCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCisJICogZXZlbnRzIGVuZHMgdXAgaW4uCisJICovCisJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CisJaWYgKGN0eCkKKwkJcGVyZl9ldmVudF9jb21tX2N0eChjdHgsIGNvbW1fZXZlbnQpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCit2b2lkIHBlcmZfZXZlbnRfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHBlcmZfY29tbV9ldmVudCBjb21tX2V2ZW50OworCisJaWYgKHRhc2stPnBlcmZfZXZlbnRfY3R4cCkKKwkJcGVyZl9ldmVudF9lbmFibGVfb25fZXhlYyh0YXNrKTsKKworCWlmICghYXRvbWljX3JlYWQoJm5yX2NvbW1fZXZlbnRzKSkKKwkJcmV0dXJuOworCisJY29tbV9ldmVudCA9IChzdHJ1Y3QgcGVyZl9jb21tX2V2ZW50KXsKKwkJLnRhc2sJPSB0YXNrLAorCQkvKiAuY29tbSAgICAgICovCisJCS8qIC5jb21tX3NpemUgKi8KKwkJLmV2ZW50X2lkICA9IHsKKwkJCS5oZWFkZXIgPSB7CisJCQkJLnR5cGUgPSBQRVJGX1JFQ09SRF9DT01NLAorCQkJCS5taXNjID0gMCwKKwkJCQkvKiAuc2l6ZSAqLworCQkJfSwKKwkJCS8qIC5waWQgKi8KKwkJCS8qIC50aWQgKi8KKwkJfSwKKwl9OworCisJcGVyZl9ldmVudF9jb21tX2V2ZW50KCZjb21tX2V2ZW50KTsKK30KKworLyoKKyAqIG1tYXAgdHJhY2tpbmcKKyAqLworCitzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50IHsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKnZtYTsKKworCWNvbnN0IGNoYXIJCSpmaWxlX25hbWU7CisJaW50CQkJZmlsZV9zaXplOworCisJc3RydWN0IHsKKwkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKworCQl1MzIJCQkJcGlkOworCQl1MzIJCQkJdGlkOworCQl1NjQJCQkJc3RhcnQ7CisJCXU2NAkJCQlsZW47CisJCXU2NAkJCQlwZ29mZjsKKwl9IGV2ZW50X2lkOworfTsKKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9tbWFwX291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCWludCBzaXplID0gbW1hcF9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemU7CisJaW50IHJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCBzaXplLCAwLCAwKTsKKworCWlmIChyZXQpCisJCXJldHVybjsKKworCW1tYXBfZXZlbnQtPmV2ZW50X2lkLnBpZCA9IHBlcmZfZXZlbnRfcGlkKGV2ZW50LCBjdXJyZW50KTsKKwltbWFwX2V2ZW50LT5ldmVudF9pZC50aWQgPSBwZXJmX2V2ZW50X3RpZChldmVudCwgY3VycmVudCk7CisKKwlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgbW1hcF9ldmVudC0+ZXZlbnRfaWQpOworCXBlcmZfb3V0cHV0X2NvcHkoJmhhbmRsZSwgbW1hcF9ldmVudC0+ZmlsZV9uYW1lLAorCQkJCSAgIG1tYXBfZXZlbnQtPmZpbGVfc2l6ZSk7CisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfbW1hcF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKK3sKKwlpZiAoZXZlbnQtPmF0dHIubW1hcCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9tbWFwX2N0eChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkJICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgeworCQlpZiAocGVyZl9ldmVudF9tbWFwX21hdGNoKGV2ZW50LCBtbWFwX2V2ZW50KSkKKwkJCXBlcmZfZXZlbnRfbW1hcF9vdXRwdXQoZXZlbnQsIG1tYXBfZXZlbnQpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9tbWFwX2V2ZW50KHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtbWFwX2V2ZW50LT52bWE7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJdW5zaWduZWQgaW50IHNpemU7CisJY2hhciB0bXBbMTZdOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisJY29uc3QgY2hhciAqbmFtZTsKKworCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKKworCWlmIChmaWxlKSB7CisJCS8qCisJCSAqIGRfcGF0aCB3b3JrcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBiYWNrd2FyZHMsIHNvIHdlCisJCSAqIG5lZWQgdG8gYWRkIGVub3VnaCB6ZXJvIGJ5dGVzIGFmdGVyIHRoZSBzdHJpbmcgdG8gaGFuZGxlCisJCSAqIHRoZSA2NGJpdCBhbGlnbm1lbnQgd2UgZG8gbGF0ZXIuCisJCSAqLworCQlidWYgPSBremFsbG9jKFBBVEhfTUFYICsgc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikgeworCQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiLy9lbm9tZW0iLCBzaXplb2YodG1wKSk7CisJCQlnb3RvIGdvdF9uYW1lOworCQl9CisJCW5hbWUgPSBkX3BhdGgoJmZpbGUtPmZfcGF0aCwgYnVmLCBQQVRIX01BWCk7CisJCWlmIChJU19FUlIobmFtZSkpIHsKKwkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIi8vdG9vbG9uZyIsIHNpemVvZih0bXApKTsKKwkJCWdvdG8gZ290X25hbWU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYXJjaF92bWFfbmFtZShtbWFwX2V2ZW50LT52bWEpKSB7CisJCQluYW1lID0gc3RybmNweSh0bXAsIGFyY2hfdm1hX25hbWUobW1hcF9ldmVudC0+dm1hKSwKKwkJCQkgICAgICAgc2l6ZW9mKHRtcCkpOworCQkJZ290byBnb3RfbmFtZTsKKwkJfQorCisJCWlmICghdm1hLT52bV9tbSkgeworCQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiW3Zkc29dIiwgc2l6ZW9mKHRtcCkpOworCQkJZ290byBnb3RfbmFtZTsKKwkJfQorCisJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIi8vYW5vbiIsIHNpemVvZih0bXApKTsKKwkJZ290byBnb3RfbmFtZTsKKwl9CisKK2dvdF9uYW1lOgorCXNpemUgPSBBTElHTihzdHJsZW4obmFtZSkrMSwgc2l6ZW9mKHU2NCkpOworCisJbW1hcF9ldmVudC0+ZmlsZV9uYW1lID0gbmFtZTsKKwltbWFwX2V2ZW50LT5maWxlX3NpemUgPSBzaXplOworCisJbW1hcF9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemUgPSBzaXplb2YobW1hcF9ldmVudC0+ZXZlbnRfaWQpICsgc2l6ZTsKKworCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlwZXJmX2V2ZW50X21tYXBfY3R4KCZjcHVjdHgtPmN0eCwgbW1hcF9ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJLyoKKwkgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggb2YgdGhlIGNoaWxkIGNvbnRleHRzIHRoZQorCSAqIGV2ZW50cyBlbmRzIHVwIGluLgorCSAqLworCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpCisJCXBlcmZfZXZlbnRfbW1hcF9jdHgoY3R4LCBtbWFwX2V2ZW50KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWtmcmVlKGJ1Zik7Cit9CisKK3ZvaWQgX19wZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHBlcmZfbW1hcF9ldmVudCBtbWFwX2V2ZW50OworCisJaWYgKCFhdG9taWNfcmVhZCgmbnJfbW1hcF9ldmVudHMpKQorCQlyZXR1cm47CisKKwltbWFwX2V2ZW50ID0gKHN0cnVjdCBwZXJmX21tYXBfZXZlbnQpeworCQkudm1hCT0gdm1hLAorCQkvKiAuZmlsZV9uYW1lICovCisJCS8qIC5maWxlX3NpemUgKi8KKwkJLmV2ZW50X2lkICA9IHsKKwkJCS5oZWFkZXIgPSB7CisJCQkJLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQLAorCQkJCS5taXNjID0gMCwKKwkJCQkvKiAuc2l6ZSAqLworCQkJfSwKKwkJCS8qIC5waWQgKi8KKwkJCS8qIC50aWQgKi8KKwkJCS5zdGFydCAgPSB2bWEtPnZtX3N0YXJ0LAorCQkJLmxlbiAgICA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCS5wZ29mZiAgPSB2bWEtPnZtX3Bnb2ZmLAorCQl9LAorCX07CisKKwlwZXJmX2V2ZW50X21tYXBfZXZlbnQoJm1tYXBfZXZlbnQpOworfQorCisvKgorICogSVJRIHRocm90dGxlIGxvZ2dpbmcKKyAqLworCitzdGF0aWMgdm9pZCBwZXJmX2xvZ190aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBlbmFibGUpCit7CisJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJaW50IHJldDsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJCXU2NAkJCQl0aW1lOworCQl1NjQJCQkJaWQ7CisJCXU2NAkJCQlzdHJlYW1faWQ7CisJfSB0aHJvdHRsZV9ldmVudCA9IHsKKwkJLmhlYWRlciA9IHsKKwkJCS50eXBlID0gUEVSRl9SRUNPUkRfVEhST1RUTEUsCisJCQkubWlzYyA9IDAsCisJCQkuc2l6ZSA9IHNpemVvZih0aHJvdHRsZV9ldmVudCksCisJCX0sCisJCS50aW1lCQk9IHBlcmZfY2xvY2soKSwKKwkJLmlkCQk9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpLAorCQkuc3RyZWFtX2lkCT0gZXZlbnQtPmlkLAorCX07CisKKwlpZiAoZW5hYmxlKQorCQl0aHJvdHRsZV9ldmVudC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX1VOVEhST1RUTEU7CisKKwlyZXQgPSBwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwgc2l6ZW9mKHRocm90dGxlX2V2ZW50KSwgMSwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIHRocm90dGxlX2V2ZW50KTsKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Cit9CisKKy8qCisgKiBHZW5lcmljIGV2ZW50IG92ZXJmbG93IGhhbmRsaW5nLCBzYW1wbGluZy4KKyAqLworCitzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBubWksCisJCQkJICAgaW50IHRocm90dGxlLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKKwkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgZXZlbnRzID0gYXRvbWljX3JlYWQoJmV2ZW50LT5ldmVudF9saW1pdCk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IHJldCA9IDA7CisKKwl0aHJvdHRsZSA9ICh0aHJvdHRsZSAmJiBldmVudC0+cG11LT51bnRocm90dGxlICE9IE5VTEwpOworCisJaWYgKCF0aHJvdHRsZSkgeworCQlod2MtPmludGVycnVwdHMrKzsKKwl9IGVsc2UgeworCQlpZiAoaHdjLT5pbnRlcnJ1cHRzICE9IE1BWF9JTlRFUlJVUFRTKSB7CisJCQlod2MtPmludGVycnVwdHMrKzsKKwkJCWlmIChIWiAqIGh3Yy0+aW50ZXJydXB0cyA+CisJCQkJCSh1NjQpc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUpIHsKKwkJCQlod2MtPmludGVycnVwdHMgPSBNQVhfSU5URVJSVVBUUzsKKwkJCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMCk7CisJCQkJcmV0ID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBLZWVwIHJlLWRpc2FibGluZyBldmVudHMgZXZlbiB0aG91Z2ggb24gdGhlIHByZXZpb3VzCisJCQkgKiBwYXNzIHdlIGRpc2FibGVkIGl0IC0ganVzdCBpbiBjYXNlIHdlIHJhY2VkIHdpdGggYQorCQkJICogc2NoZWQtaW4gYW5kIHRoZSBldmVudCBnb3QgZW5hYmxlZCBhZ2FpbjoKKwkJCSAqLworCQkJcmV0ID0gMTsKKwkJfQorCX0KKworCWlmIChldmVudC0+YXR0ci5mcmVxKSB7CisJCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7CisJCXM2NCBkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV9zdGFtcDsKKworCQlod2MtPmZyZXFfc3RhbXAgPSBub3c7CisKKwkJaWYgKGRlbHRhID4gMCAmJiBkZWx0YSA8IFRJQ0tfTlNFQykKKwkJCXBlcmZfYWRqdXN0X3BlcmlvZChldmVudCwgTlNFQ19QRVJfU0VDIC8gKGludClkZWx0YSk7CisJfQorCisJLyoKKwkgKiBYWFggZXZlbnRfbGltaXQgbWlnaHQgbm90IHF1aXRlIHdvcmsgYXMgZXhwZWN0ZWQgb24gaW5oZXJpdGVkCisJICogZXZlbnRzCisJICovCisKKwlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKKwlpZiAoZXZlbnRzICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJmV2ZW50LT5ldmVudF9saW1pdCkpIHsKKwkJcmV0ID0gMTsKKwkJZXZlbnQtPnBlbmRpbmdfa2lsbCA9IFBPTExfSFVQOworCQlpZiAobm1pKSB7CisJCQlldmVudC0+cGVuZGluZ19kaXNhYmxlID0gMTsKKwkJCXBlcmZfcGVuZGluZ19xdWV1ZSgmZXZlbnQtPnBlbmRpbmcsCisJCQkJCSAgIHBlcmZfcGVuZGluZ19ldmVudCk7CisJCX0gZWxzZQorCQkJcGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTsKKwl9CisKKwlwZXJmX2V2ZW50X291dHB1dChldmVudCwgbm1pLCBkYXRhLCByZWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBubWksCisJCQkgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCBubWksIDEsIGRhdGEsIHJlZ3MpOworfQorCisvKgorICogR2VuZXJpYyBzb2Z0d2FyZSBldmVudCBpbmZyYXN0cnVjdHVyZQorICovCisKKy8qCisgKiBXZSBkaXJlY3RseSBpbmNyZW1lbnQgZXZlbnQtPmNvdW50IGFuZCBrZWVwIGEgc2Vjb25kIHZhbHVlIGluCisgKiBldmVudC0+aHcucGVyaW9kX2xlZnQgdG8gY291bnQgaW50ZXJ2YWxzLiBUaGlzIHBlcmlvZCBldmVudAorICogaXMga2VwdCBpbiB0aGUgcmFuZ2UgWy1zYW1wbGVfcGVyaW9kLCAwXSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlCisgKiBzaWduIGFzIHRyaWdnZXIuCisgKi8KKworc3RhdGljIHU2NCBwZXJmX3N3ZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IHBlcmlvZCA9IGh3Yy0+bGFzdF9wZXJpb2Q7CisJdTY0IG5yLCBvZmZzZXQ7CisJczY0IG9sZCwgdmFsOworCisJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKworYWdhaW46CisJb2xkID0gdmFsID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiAwOworCisJbnIgPSBkaXY2NF91NjQocGVyaW9kICsgdmFsLCBwZXJpb2QpOworCW9mZnNldCA9IG5yICogcGVyaW9kOworCXZhbCAtPSBvZmZzZXQ7CisJaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cGVyaW9kX2xlZnQsIG9sZCwgdmFsKSAhPSBvbGQpCisJCWdvdG8gYWdhaW47CisKKwlyZXR1cm4gbnI7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgIGludCBubWksIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgdGhyb3R0bGUgPSAwOworCXU2NCBvdmVyZmxvdzsKKworCWRhdGEtPnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKKwlvdmVyZmxvdyA9IHBlcmZfc3dldmVudF9zZXRfcGVyaW9kKGV2ZW50KTsKKworCWlmIChod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpCisJCXJldHVybjsKKworCWZvciAoOyBvdmVyZmxvdzsgb3ZlcmZsb3ctLSkgeworCQlpZiAoX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCBubWksIHRocm90dGxlLAorCQkJCQkgICAgZGF0YSwgcmVncykpIHsKKwkJCS8qCisJCQkgKiBXZSBpbmhpYml0IHRoZSBvdmVyZmxvdyBmcm9tIGhhcHBlbmluZyB3aGVuCisJCQkgKiBod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCXRocm90dGxlID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfc3dldmVudF91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwkvKgorCSAqIE5vdGhpbmcgdG8gZG8sIHdlIGFscmVhZHkgcmVzZXQgaHdjLT5pbnRlcnJ1cHRzLgorCSAqLworfQorCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5yLAorCQkJICAgICAgIGludCBubWksIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJYXRvbWljNjRfYWRkKG5yLCAmZXZlbnQtPmNvdW50KTsKKworCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKQorCQlyZXR1cm47CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKworCWlmICghYXRvbWljNjRfYWRkX25lZ2F0aXZlKG5yLCAmaHdjLT5wZXJpb2RfbGVmdCkpCisJCXBlcmZfc3dldmVudF9vdmVyZmxvdyhldmVudCwgbm1pLCBkYXRhLCByZWdzKTsKK30KKworc3RhdGljIGludCBwZXJmX3N3ZXZlbnRfaXNfY291bnRpbmcoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCS8qCisJICogVGhlIGV2ZW50IGlzIGFjdGl2ZSwgd2UncmUgZ29vZCEKKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogVGhlIGV2ZW50IGlzIG9mZi9lcnJvciwgbm90IGNvdW50aW5nLgorCSAqLworCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoZSBldmVudCBpcyBpbmFjdGl2ZSwgaWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlCisJICogd2UncmUgcGFydCBvZiBhIGdyb3VwIHRoYXQgZGlkbid0IG1ha2UgaXQgb24gdGhlICdwbXUnLAorCSAqIG5vdCBjb3VudGluZy4KKwkgKi8KKwlpZiAoZXZlbnQtPmN0eC0+aXNfYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2UncmUgaW5hY3RpdmUgYW5kIHRoZSBjb250ZXh0IGlzIHRvbywgdGhpcyBtZWFucyB0aGUKKwkgKiB0YXNrIGlzIHNjaGVkdWxlZCBvdXQsIHdlJ3JlIGNvdW50aW5nIGV2ZW50cyB0aGF0IGhhcHBlbgorCSAqIHRvIHVzLCBsaWtlIG1pZ3JhdGlvbiBldmVudHMuCisJICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9zd2V2ZW50X21hdGNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQllbnVtIHBlcmZfdHlwZV9pZCB0eXBlLAorCQkJCXUzMiBldmVudF9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKCFwZXJmX3N3ZXZlbnRfaXNfY291bnRpbmcoZXZlbnQpKQorCQlyZXR1cm4gMDsKKworCWlmIChldmVudC0+YXR0ci50eXBlICE9IHR5cGUpCisJCXJldHVybiAwOworCWlmIChldmVudC0+YXR0ci5jb25maWcgIT0gZXZlbnRfaWQpCisJCXJldHVybiAwOworCisJaWYgKHJlZ3MpIHsKKwkJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlciAmJiB1c2VyX21vZGUocmVncykpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgJiYgIXVzZXJfbW9kZShyZWdzKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfY3R4X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJCQkgICAgIGVudW0gcGVyZl90eXBlX2lkIHR5cGUsCisJCQkJICAgICB1MzIgZXZlbnRfaWQsIHU2NCBuciwgaW50IG5taSwKKwkJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCisJaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQorCQlyZXR1cm47CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CisJCWlmIChwZXJmX3N3ZXZlbnRfbWF0Y2goZXZlbnQsIHR5cGUsIGV2ZW50X2lkLCByZWdzKSkKKwkJCXBlcmZfc3dldmVudF9hZGQoZXZlbnQsIG5yLCBubWksIGRhdGEsIHJlZ3MpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIGludCAqcGVyZl9zd2V2ZW50X3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCit7CisJaWYgKGluX25taSgpKQorCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzNdOworCisJaWYgKGluX2lycSgpKQorCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzJdOworCisJaWYgKGluX3NvZnRpcnEoKSkKKwkJcmV0dXJuICZjcHVjdHgtPnJlY3Vyc2lvblsxXTsKKworCXJldHVybiAmY3B1Y3R4LT5yZWN1cnNpb25bMF07Cit9CisKK3N0YXRpYyB2b2lkIGRvX3BlcmZfc3dfZXZlbnQoZW51bSBwZXJmX3R5cGVfaWQgdHlwZSwgdTMyIGV2ZW50X2lkLAorCQkJCSAgICB1NjQgbnIsIGludCBubWksCisJCQkJICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCWludCAqcmVjdXJzaW9uID0gcGVyZl9zd2V2ZW50X3JlY3Vyc2lvbl9jb250ZXh0KGNwdWN0eCk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCisJaWYgKCpyZWN1cnNpb24pCisJCWdvdG8gb3V0OworCisJKCpyZWN1cnNpb24pKys7CisJYmFycmllcigpOworCisJcGVyZl9zd2V2ZW50X2N0eF9ldmVudCgmY3B1Y3R4LT5jdHgsIHR5cGUsIGV2ZW50X2lkLAorCQkJCSBuciwgbm1pLCBkYXRhLCByZWdzKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJLyoKKwkgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggb2YgdGhlIGNoaWxkIGNvbnRleHRzIHRoZQorCSAqIGV2ZW50cyBlbmRzIHVwIGluLgorCSAqLworCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpCisJCXBlcmZfc3dldmVudF9jdHhfZXZlbnQoY3R4LCB0eXBlLCBldmVudF9pZCwgbnIsIG5taSwgZGF0YSwgcmVncyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwliYXJyaWVyKCk7CisJKCpyZWN1cnNpb24pLS07CisKK291dDoKKwlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKK30KKwordm9pZCBfX3BlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCisJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGEgPSB7CisJCS5hZGRyID0gYWRkciwKKwl9OworCisJZG9fcGVyZl9zd19ldmVudChQRVJGX1RZUEVfU09GVFdBUkUsIGV2ZW50X2lkLCBuciwgbm1pLAorCQkJCSZkYXRhLCByZWdzKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworfQorCitzdGF0aWMgaW50IHBlcmZfc3dldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgeworCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOworCQlwZXJmX3N3ZXZlbnRfc2V0X3BlcmlvZChldmVudCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBlcmZfb3BzX2dlbmVyaWMgPSB7CisJLmVuYWJsZQkJPSBwZXJmX3N3ZXZlbnRfZW5hYmxlLAorCS5kaXNhYmxlCT0gcGVyZl9zd2V2ZW50X2Rpc2FibGUsCisJLnJlYWQJCT0gcGVyZl9zd2V2ZW50X3JlYWQsCisJLnVudGhyb3R0bGUJPSBwZXJmX3N3ZXZlbnRfdW50aHJvdHRsZSwKK307CisKKy8qCisgKiBocnRpbWVyIGJhc2VkIHN3ZXZlbnQgY2FsbGJhY2sKKyAqLworCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2V2ZW50X2hydGltZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpCit7CisJZW51bSBocnRpbWVyX3Jlc3RhcnQgcmV0ID0gSFJUSU1FUl9SRVNUQVJUOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXU2NCBwZXJpb2Q7CisKKwlldmVudAk9IGNvbnRhaW5lcl9vZihocnRpbWVyLCBzdHJ1Y3QgcGVyZl9ldmVudCwgaHcuaHJ0aW1lcik7CisJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CisKKwlkYXRhLmFkZHIgPSAwOworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKwkvKgorCSAqIEluIGNhc2Ugd2UgZXhjbHVkZSBrZXJuZWwgSVBzIG9yIGFyZSBzb21laG93IG5vdCBpbiBpbnRlcnJ1cHQKKwkgKiBjb250ZXh0LCBwcm92aWRlIHRoZSBuZXh0IGJlc3QgdGhpbmcsIHRoZSB1c2VyIElQLgorCSAqLworCWlmICgoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgfHwgIXJlZ3MpICYmCisJCQkhZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyKQorCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCisJaWYgKHJlZ3MpIHsKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOworCX0KKworCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKTsKKwlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKHBlcmlvZCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNvZnR3YXJlIGV2ZW50OiBjcHUgd2FsbCB0aW1lIGNsb2NrCisgKi8KKworc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlzNjQgcHJldjsKKwl1NjQgbm93OworCisJbm93ID0gY3B1X2Nsb2NrKGNwdSk7CisJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBub3cpOworCWF0b21pYzY0X2FkZChub3cgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKK30KKworc3RhdGljIGludCBjcHVfY2xvY2tfcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsIGNwdV9jbG9jayhjcHUpKTsKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcHVfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCisJCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJY3B1X2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJY3B1X2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcGVyZl9vcHNfY3B1X2Nsb2NrID0geworCS5lbmFibGUJCT0gY3B1X2Nsb2NrX3BlcmZfZXZlbnRfZW5hYmxlLAorCS5kaXNhYmxlCT0gY3B1X2Nsb2NrX3BlcmZfZXZlbnRfZGlzYWJsZSwKKwkucmVhZAkJPSBjcHVfY2xvY2tfcGVyZl9ldmVudF9yZWFkLAorfTsKKworLyoKKyAqIFNvZnR3YXJlIGV2ZW50OiB0YXNrIHRpbWUgY2xvY2sKKyAqLworCitzdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5vdykKK3sKKwl1NjQgcHJldjsKKwlzNjQgZGVsdGE7CisKKwlwcmV2ID0gYXRvbWljNjRfeGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIG5vdyk7CisJZGVsdGEgPSBub3cgLSBwcmV2OworCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgdGFza19jbG9ja19wZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IG5vdzsKKworCW5vdyA9IGV2ZW50LT5jdHgtPnRpbWU7CisKKwlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgbm93KTsKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKQorCQlocnRpbWVyX2NhbmNlbCgmZXZlbnQtPmh3LmhydGltZXIpOworCXRhc2tfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGV2ZW50LT5jdHgtPnRpbWUpOworCit9CisKK3N0YXRpYyB2b2lkIHRhc2tfY2xvY2tfcGVyZl9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1NjQgdGltZTsKKworCWlmICghaW5fbm1pKCkpIHsKKwkJdXBkYXRlX2NvbnRleHRfdGltZShldmVudC0+Y3R4KTsKKwkJdGltZSA9IGV2ZW50LT5jdHgtPnRpbWU7CisJfSBlbHNlIHsKKwkJdTY0IG5vdyA9IHBlcmZfY2xvY2soKTsKKwkJdTY0IGRlbHRhID0gbm93IC0gZXZlbnQtPmN0eC0+dGltZXN0YW1wOworCQl0aW1lID0gZXZlbnQtPmN0eC0+dGltZSArIGRlbHRhOworCX0KKworCXRhc2tfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIHRpbWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSBwZXJmX29wc190YXNrX2Nsb2NrID0geworCS5lbmFibGUJCT0gdGFza19jbG9ja19wZXJmX2V2ZW50X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlLAorCS5yZWFkCQk9IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9yZWFkLAorfTsKKworI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCit2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsCisJCQkgIGludCBlbnRyeV9zaXplKQoreworCXN0cnVjdCBwZXJmX3Jhd19yZWNvcmQgcmF3ID0geworCQkuc2l6ZSA9IGVudHJ5X3NpemUsCisJCS5kYXRhID0gcmVjb3JkLAorCX07CisKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhID0geworCQkuYWRkciA9IGFkZHIsCisJCS5yYXcgPSAmcmF3LAorCX07CisKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOworCisJaWYgKCFyZWdzKQorCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCisJZG9fcGVyZl9zd19ldmVudChQRVJGX1RZUEVfVFJBQ0VQT0lOVCwgZXZlbnRfaWQsIGNvdW50LCAxLAorCQkJCSZkYXRhLCByZWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHBfZXZlbnQpOworCitleHRlcm4gaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZShpbnQpOworCitzdGF0aWMgdm9pZCB0cF9wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgKnRwX3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJLyoKKwkgKiBSYXcgdHJhY2Vwb2ludCBkYXRhIGlzIGEgc2V2ZXJlIGRhdGEgbGVhaywgb25seSBhbGxvdyByb290IHRvCisJICogaGF2ZSB0aGVzZS4KKwkgKi8KKwlpZiAoKGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSAmJgorCQkJcGVyZl9wYXJhbm9pZF90cmFjZXBvaW50X3JhdygpICYmCisJCQkhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKKworCWlmIChmdHJhY2VfcHJvZmlsZV9lbmFibGUoZXZlbnQtPmF0dHIuY29uZmlnKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlldmVudC0+ZGVzdHJveSA9IHRwX3BlcmZfZXZlbnRfZGVzdHJveTsKKworCXJldHVybiAmcGVyZl9vcHNfZ2VuZXJpYzsKK30KKyNlbHNlCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSAqdHBfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCithdG9taWNfdCBwZXJmX3N3ZXZlbnRfZW5hYmxlZFtQRVJGX0NPVU5UX1NXX01BWF07CisKK3N0YXRpYyB2b2lkIHN3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJdTY0IGV2ZW50X2lkID0gZXZlbnQtPmF0dHIuY29uZmlnOworCisJV0FSTl9PTihldmVudC0+cGFyZW50KTsKKworCWF0b21pY19kZWMoJnBlcmZfc3dldmVudF9lbmFibGVkW2V2ZW50X2lkXSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11ICpzd19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCBwbXUgKnBtdSA9IE5VTEw7CisJdTY0IGV2ZW50X2lkID0gZXZlbnQtPmF0dHIuY29uZmlnOworCisJLyoKKwkgKiBTb2Z0d2FyZSBldmVudHMgKGN1cnJlbnRseSkgY2FuJ3QgaW4gZ2VuZXJhbCBkaXN0aW5ndWlzaAorCSAqIGJldHdlZW4gdXNlciwga2VybmVsIGFuZCBoeXBlcnZpc29yIGV2ZW50cy4KKwkgKiBIb3dldmVyLCBjb250ZXh0IHN3aXRjaGVzIGFuZCBjcHUgbWlncmF0aW9ucyBhcmUgY29uc2lkZXJlZAorCSAqIHRvIGJlIGtlcm5lbCBldmVudHMsIGFuZCBwYWdlIGZhdWx0cyBhcmUgbmV2ZXIgaHlwZXJ2aXNvcgorCSAqIGV2ZW50cy4KKwkgKi8KKwlzd2l0Y2ggKGV2ZW50X2lkKSB7CisJY2FzZSBQRVJGX0NPVU5UX1NXX0NQVV9DTE9DSzoKKwkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKKworCQlicmVhazsKKwljYXNlIFBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSzoKKwkJLyoKKwkJICogSWYgdGhlIHVzZXIgaW5zdGFudGlhdGVzIHRoaXMgYXMgYSBwZXItY3B1IGV2ZW50LAorCQkgKiB1c2UgdGhlIGNwdV9jbG9jayBldmVudCBpbnN0ZWFkLgorCQkgKi8KKwkJaWYgKGV2ZW50LT5jdHgtPnRhc2spCisJCQlwbXUgPSAmcGVyZl9vcHNfdGFza19jbG9jazsKKwkJZWxzZQorCQkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKKworCQlicmVhazsKKwljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFM6CisJY2FzZSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTjoKKwljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKOgorCWNhc2UgUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTOgorCWNhc2UgUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUzoKKwkJaWYgKCFldmVudC0+cGFyZW50KSB7CisJCQlhdG9taWNfaW5jKCZwZXJmX3N3ZXZlbnRfZW5hYmxlZFtldmVudF9pZF0pOworCQkJZXZlbnQtPmRlc3Ryb3kgPSBzd19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisJCX0KKwkJcG11ID0gJnBlcmZfb3BzX2dlbmVyaWM7CisJCWJyZWFrOworCX0KKworCXJldHVybiBwbXU7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGV2ZW50IHN0cnVjdHVyZQorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKgorcGVyZl9ldmVudF9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkgICBpbnQgY3B1LAorCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCSAgIHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCisJCSAgIHN0cnVjdCBwZXJmX2V2ZW50ICpwYXJlbnRfZXZlbnQsCisJCSAgIGdmcF90IGdmcGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBwbXUgKnBtdTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKwlsb25nIGVycjsKKworCWV2ZW50ID0ga3phbGxvYyhzaXplb2YoKmV2ZW50KSwgZ2ZwZmxhZ3MpOworCWlmICghZXZlbnQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyoKKwkgKiBTaW5nbGUgZXZlbnRzIGFyZSB0aGVpciBvd24gZ3JvdXAgbGVhZGVycywgd2l0aCBhbgorCSAqIGVtcHR5IHNpYmxpbmcgbGlzdDoKKwkgKi8KKwlpZiAoIWdyb3VwX2xlYWRlcikKKwkJZ3JvdXBfbGVhZGVyID0gZXZlbnQ7CisKKwltdXRleF9pbml0KCZldmVudC0+Y2hpbGRfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZldmVudC0+Y2hpbGRfbGlzdCk7CisKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPmdyb3VwX2VudHJ5KTsKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPmV2ZW50X2VudHJ5KTsKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPnNpYmxpbmdfbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZlbnQtPndhaXRxKTsKKworCW11dGV4X2luaXQoJmV2ZW50LT5tbWFwX211dGV4KTsKKworCWV2ZW50LT5jcHUJCT0gY3B1OworCWV2ZW50LT5hdHRyCQk9ICphdHRyOworCWV2ZW50LT5ncm91cF9sZWFkZXIJPSBncm91cF9sZWFkZXI7CisJZXZlbnQtPnBtdQkJPSBOVUxMOworCWV2ZW50LT5jdHgJCT0gY3R4OworCWV2ZW50LT5vbmNwdQkJPSAtMTsKKworCWV2ZW50LT5wYXJlbnQJCT0gcGFyZW50X2V2ZW50OworCisJZXZlbnQtPm5zCQk9IGdldF9waWRfbnMoY3VycmVudC0+bnNwcm94eS0+cGlkX25zKTsKKwlldmVudC0+aWQJCT0gYXRvbWljNjRfaW5jX3JldHVybigmcGVyZl9ldmVudF9pZCk7CisKKwlldmVudC0+c3RhdGUJCT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRTsKKworCWlmIChhdHRyLT5kaXNhYmxlZCkKKwkJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CisKKwlwbXUgPSBOVUxMOworCisJaHdjID0gJmV2ZW50LT5odzsKKwlod2MtPnNhbXBsZV9wZXJpb2QgPSBhdHRyLT5zYW1wbGVfcGVyaW9kOworCWlmIChhdHRyLT5mcmVxICYmIGF0dHItPnNhbXBsZV9mcmVxKQorCQlod2MtPnNhbXBsZV9wZXJpb2QgPSAxOworCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisKKwlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisKKwkvKgorCSAqIHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBQRVJGX0ZPUk1BVF9HUk9VUCBvbiBpbmhlcml0ZWQgZXZlbnRzCisJICovCisJaWYgKGF0dHItPmluaGVyaXQgJiYgKGF0dHItPnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApKQorCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKKwljYXNlIFBFUkZfVFlQRV9SQVc6CisJY2FzZSBQRVJGX1RZUEVfSEFSRFdBUkU6CisJY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6CisJCXBtdSA9IGh3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBQRVJGX1RZUEVfU09GVFdBUkU6CisJCXBtdSA9IHN3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDoKKwkJcG11ID0gdHBfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Citkb25lOgorCWVyciA9IDA7CisJaWYgKCFwbXUpCisJCWVyciA9IC1FSU5WQUw7CisJZWxzZSBpZiAoSVNfRVJSKHBtdSkpCisJCWVyciA9IFBUUl9FUlIocG11KTsKKworCWlmIChlcnIpIHsKKwkJaWYgKGV2ZW50LT5ucykKKwkJCXB1dF9waWRfbnMoZXZlbnQtPm5zKTsKKwkJa2ZyZWUoZXZlbnQpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCWV2ZW50LT5wbXUgPSBwbXU7CisKKwlpZiAoIWV2ZW50LT5wYXJlbnQpIHsKKwkJYXRvbWljX2luYygmbnJfZXZlbnRzKTsKKwkJaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJCQlhdG9taWNfaW5jKCZucl9tbWFwX2V2ZW50cyk7CisJCWlmIChldmVudC0+YXR0ci5jb21tKQorCQkJYXRvbWljX2luYygmbnJfY29tbV9ldmVudHMpOworCQlpZiAoZXZlbnQtPmF0dHIudGFzaykKKwkJCWF0b21pY19pbmMoJm5yX3Rhc2tfZXZlbnRzKTsKKwl9CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9jb3B5X2F0dHIoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBfX3VzZXIgKnVhdHRyLAorCQkJICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQoreworCXUzMiBzaXplOworCWludCByZXQ7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhdHRyLCBQRVJGX0FUVFJfU0laRV9WRVIwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKgorCSAqIHplcm8gdGhlIGZ1bGwgc3RydWN0dXJlLCBzbyB0aGF0IGEgc2hvcnQgY29weSB3aWxsIGJlIG5pY2UuCisJICovCisJbWVtc2V0KGF0dHIsIDAsIHNpemVvZigqYXR0cikpOworCisJcmV0ID0gZ2V0X3VzZXIoc2l6ZSwgJnVhdHRyLT5zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNpemUgPiBQQUdFX1NJWkUpCS8qIHNpbGx5IGxhcmdlICovCisJCWdvdG8gZXJyX3NpemU7CisKKwlpZiAoIXNpemUpCQkvKiBhYmkgY29tcGF0ICovCisJCXNpemUgPSBQRVJGX0FUVFJfU0laRV9WRVIwOworCisJaWYgKHNpemUgPCBQRVJGX0FUVFJfU0laRV9WRVIwKQorCQlnb3RvIGVycl9zaXplOworCisJLyoKKwkgKiBJZiB3ZSdyZSBoYW5kZWQgYSBiaWdnZXIgc3RydWN0IHRoYW4gd2Uga25vdyBvZiwKKwkgKiBlbnN1cmUgYWxsIHRoZSB1bmtub3duIGJpdHMgYXJlIDAgLSBpLmUuIG5ldworCSAqIHVzZXItc3BhY2UgZG9lcyBub3QgcmVseSBvbiBhbnkga2VybmVsIGZlYXR1cmUKKwkgKiBleHRlbnNpb25zIHdlIGRvbnQga25vdyBhYm91dCB5ZXQuCisJICovCisJaWYgKHNpemUgPiBzaXplb2YoKmF0dHIpKSB7CisJCXVuc2lnbmVkIGNoYXIgX191c2VyICphZGRyOworCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqZW5kOworCQl1bnNpZ25lZCBjaGFyIHZhbDsKKworCQlhZGRyID0gKHZvaWQgX191c2VyICopdWF0dHIgKyBzaXplb2YoKmF0dHIpOworCQllbmQgID0gKHZvaWQgX191c2VyICopdWF0dHIgKyBzaXplOworCisJCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyKyspIHsKKwkJCXJldCA9IGdldF91c2VyKHZhbCwgYWRkcik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlpZiAodmFsKQorCQkJCWdvdG8gZXJyX3NpemU7CisJCX0KKwkJc2l6ZSA9IHNpemVvZigqYXR0cik7CisJfQorCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYXR0ciwgdWF0dHIsIHNpemUpOworCWlmIChyZXQpCisJCXJldHVybiAtRUZBVUxUOworCisJLyoKKwkgKiBJZiB0aGUgdHlwZSBleGlzdHMsIHRoZSBjb3JyZXNwb25kaW5nIGNyZWF0aW9uIHdpbGwgdmVyaWZ5CisJICogdGhlIGF0dHItPmNvbmZpZy4KKwkgKi8KKwlpZiAoYXR0ci0+dHlwZSA+PSBQRVJGX1RZUEVfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdHRyLT5fX3Jlc2VydmVkXzEgfHwgYXR0ci0+X19yZXNlcnZlZF8yIHx8IGF0dHItPl9fcmVzZXJ2ZWRfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXR0ci0+c2FtcGxlX3R5cGUgJiB+KFBFUkZfU0FNUExFX01BWC0xKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXR0ci0+cmVhZF9mb3JtYXQgJiB+KFBFUkZfRk9STUFUX01BWC0xKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKK291dDoKKwlyZXR1cm4gcmV0OworCitlcnJfc2l6ZToKKwlwdXRfdXNlcihzaXplb2YoKmF0dHIpLCAmdWF0dHItPnNpemUpOworCXJldCA9IC1FMkJJRzsKKwlnb3RvIG91dDsKK30KKworaW50IHBlcmZfZXZlbnRfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBvdXRwdXRfZmQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKm91dHB1dF9ldmVudCA9IE5VTEw7CisJc3RydWN0IGZpbGUgKm91dHB1dF9maWxlID0gTlVMTDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqb2xkX291dHB1dDsKKwlpbnQgZnB1dF9uZWVkZWQgPSAwOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFvdXRwdXRfZmQpCisJCWdvdG8gc2V0OworCisJb3V0cHV0X2ZpbGUgPSBmZ2V0X2xpZ2h0KG91dHB1dF9mZCwgJmZwdXRfbmVlZGVkKTsKKwlpZiAoIW91dHB1dF9maWxlKQorCQlyZXR1cm4gLUVCQURGOworCisJaWYgKG91dHB1dF9maWxlLT5mX29wICE9ICZwZXJmX2ZvcHMpCisJCWdvdG8gb3V0OworCisJb3V0cHV0X2V2ZW50ID0gb3V0cHV0X2ZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIERvbid0IGNoYWluIG91dHB1dCBmZHMgKi8KKwlpZiAob3V0cHV0X2V2ZW50LT5vdXRwdXQpCisJCWdvdG8gb3V0OworCisJLyogRG9uJ3Qgc2V0IGFuIG91dHB1dCBmZCB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhbiBvdXRwdXQgY2hhbm5lbCAqLworCWlmIChldmVudC0+ZGF0YSkKKwkJZ290byBvdXQ7CisKKwlhdG9taWNfbG9uZ19pbmMoJm91dHB1dF9maWxlLT5mX2NvdW50KTsKKworc2V0OgorCW11dGV4X2xvY2soJmV2ZW50LT5tbWFwX211dGV4KTsKKwlvbGRfb3V0cHV0ID0gZXZlbnQtPm91dHB1dDsKKwlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPm91dHB1dCwgb3V0cHV0X2V2ZW50KTsKKwltdXRleF91bmxvY2soJmV2ZW50LT5tbWFwX211dGV4KTsKKworCWlmIChvbGRfb3V0cHV0KSB7CisJCS8qCisJCSAqIHdlIG5lZWQgdG8gbWFrZSBzdXJlIG5vIGV4aXN0aW5nIHBlcmZfb3V0cHV0XyooKQorCQkgKiBpcyBzdGlsbCByZWZlcmVuY2luZyB0aGlzIGV2ZW50LgorCQkgKi8KKwkJc3luY2hyb25pemVfcmN1KCk7CisJCWZwdXQob2xkX291dHB1dC0+ZmlscCk7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlmcHV0X2xpZ2h0KG91dHB1dF9maWxlLCBmcHV0X25lZWRlZCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzeXNfcGVyZl9ldmVudF9vcGVuIC0gb3BlbiBhIHBlcmZvcm1hbmNlIGV2ZW50LCBhc3NvY2lhdGUgaXQgdG8gYSB0YXNrL2NwdQorICoKKyAqIEBhdHRyX3VwdHI6CWV2ZW50X2lkIHR5cGUgYXR0cmlidXRlcyBmb3IgbW9uaXRvcmluZy9zYW1wbGluZworICogQHBpZDoJCXRhcmdldCBwaWQKKyAqIEBjcHU6CQl0YXJnZXQgY3B1CisgKiBAZ3JvdXBfZmQ6CQlncm91cCBsZWFkZXIgZXZlbnQgZmQKKyAqLworU1lTQ0FMTF9ERUZJTkU1KHBlcmZfZXZlbnRfb3BlbiwKKwkJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBfX3VzZXIgKiwgYXR0cl91cHRyLAorCQlwaWRfdCwgcGlkLCBpbnQsIGNwdSwgaW50LCBncm91cF9mZCwgdW5zaWduZWQgbG9uZywgZmxhZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqZ3JvdXBfbGVhZGVyOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisJc3RydWN0IGZpbGUgKmV2ZW50X2ZpbGUgPSBOVUxMOworCXN0cnVjdCBmaWxlICpncm91cF9maWxlID0gTlVMTDsKKwlpbnQgZnB1dF9uZWVkZWQgPSAwOworCWludCBmcHV0X25lZWRlZDIgPSAwOworCWludCBlcnI7CisKKwkvKiBmb3IgZnV0dXJlIGV4cGFuZGFiaWxpdHkuLi4gKi8KKwlpZiAoZmxhZ3MgJiB+KFBFUkZfRkxBR19GRF9OT19HUk9VUCB8IFBFUkZfRkxBR19GRF9PVVRQVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHBlcmZfY29weV9hdHRyKGF0dHJfdXB0ciwgJmF0dHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoIWF0dHIuZXhjbHVkZV9rZXJuZWwpIHsKKwkJaWYgKHBlcmZfcGFyYW5vaWRfa2VybmVsKCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlpZiAoYXR0ci5mcmVxKSB7CisJCWlmIChhdHRyLnNhbXBsZV9mcmVxID4gc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEdldCB0aGUgdGFyZ2V0IGNvbnRleHQgKHRhc2sgb3IgcGVyY3B1KToKKwkgKi8KKwljdHggPSBmaW5kX2dldF9jb250ZXh0KHBpZCwgY3B1KTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIGdyb3VwIGxlYWRlciAod2Ugd2lsbCBhdHRhY2ggdGhpcyBldmVudCB0byBpdCk6CisJICovCisJZ3JvdXBfbGVhZGVyID0gTlVMTDsKKwlpZiAoZ3JvdXBfZmQgIT0gLTEgJiYgIShmbGFncyAmIFBFUkZfRkxBR19GRF9OT19HUk9VUCkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ3JvdXBfZmlsZSA9IGZnZXRfbGlnaHQoZ3JvdXBfZmQsICZmcHV0X25lZWRlZCk7CisJCWlmICghZ3JvdXBfZmlsZSkKKwkJCWdvdG8gZXJyX3B1dF9jb250ZXh0OworCQlpZiAoZ3JvdXBfZmlsZS0+Zl9vcCAhPSAmcGVyZl9mb3BzKQorCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7CisKKwkJZ3JvdXBfbGVhZGVyID0gZ3JvdXBfZmlsZS0+cHJpdmF0ZV9kYXRhOworCQkvKgorCQkgKiBEbyBub3QgYWxsb3cgYSByZWN1cnNpdmUgaGllcmFyY2h5ICh0aGlzIG5ldyBzaWJsaW5nCisJCSAqIGJlY29taW5nIHBhcnQgb2YgYW5vdGhlciBncm91cC1zaWJsaW5nKToKKwkJICovCisJCWlmIChncm91cF9sZWFkZXItPmdyb3VwX2xlYWRlciAhPSBncm91cF9sZWFkZXIpCisJCQlnb3RvIGVycl9wdXRfY29udGV4dDsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRvIGF0dGFjaCB0byBhIGdyb3VwIGluIGEgZGlmZmVyZW50CisJCSAqIHRhc2sgb3IgQ1BVIGNvbnRleHQ6CisJCSAqLworCQlpZiAoZ3JvdXBfbGVhZGVyLT5jdHggIT0gY3R4KQorCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7CisJCS8qCisJCSAqIE9ubHkgYSBncm91cCBsZWFkZXIgY2FuIGJlIGV4Y2x1c2l2ZSBvciBwaW5uZWQKKwkJICovCisJCWlmIChhdHRyLmV4Y2x1c2l2ZSB8fCBhdHRyLnBpbm5lZCkKKwkJCWdvdG8gZXJyX3B1dF9jb250ZXh0OworCX0KKworCWV2ZW50ID0gcGVyZl9ldmVudF9hbGxvYygmYXR0ciwgY3B1LCBjdHgsIGdyb3VwX2xlYWRlciwKKwkJCQkgICAgIE5VTEwsIEdGUF9LRVJORUwpOworCWVyciA9IFBUUl9FUlIoZXZlbnQpOworCWlmIChJU19FUlIoZXZlbnQpKQorCQlnb3RvIGVycl9wdXRfY29udGV4dDsKKworCWVyciA9IGFub25faW5vZGVfZ2V0ZmQoIltwZXJmX2V2ZW50XSIsICZwZXJmX2ZvcHMsIGV2ZW50LCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZV9wdXRfY29udGV4dDsKKworCWV2ZW50X2ZpbGUgPSBmZ2V0X2xpZ2h0KGVyciwgJmZwdXRfbmVlZGVkMik7CisJaWYgKCFldmVudF9maWxlKQorCQlnb3RvIGVycl9mcmVlX3B1dF9jb250ZXh0OworCisJaWYgKGZsYWdzICYgUEVSRl9GTEFHX0ZEX09VVFBVVCkgeworCQllcnIgPSBwZXJmX2V2ZW50X3NldF9vdXRwdXQoZXZlbnQsIGdyb3VwX2ZkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2ZwdXRfZnJlZV9wdXRfY29udGV4dDsKKwl9CisKKwlldmVudC0+ZmlscCA9IGV2ZW50X2ZpbGU7CisJV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CisJcGVyZl9pbnN0YWxsX2luX2NvbnRleHQoY3R4LCBldmVudCwgY3B1KTsKKwkrK2N0eC0+Z2VuZXJhdGlvbjsKKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworCisJZXZlbnQtPm93bmVyID0gY3VycmVudDsKKwlnZXRfdGFza19zdHJ1Y3QoY3VycmVudCk7CisJbXV0ZXhfbG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm93bmVyX2VudHJ5LCAmY3VycmVudC0+cGVyZl9ldmVudF9saXN0KTsKKwltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCitlcnJfZnB1dF9mcmVlX3B1dF9jb250ZXh0OgorCWZwdXRfbGlnaHQoZXZlbnRfZmlsZSwgZnB1dF9uZWVkZWQyKTsKKworZXJyX2ZyZWVfcHV0X2NvbnRleHQ6CisJaWYgKGVyciA8IDApCisJCWtmcmVlKGV2ZW50KTsKKworZXJyX3B1dF9jb250ZXh0OgorCWlmIChlcnIgPCAwKQorCQlwdXRfY3R4KGN0eCk7CisKKwlmcHV0X2xpZ2h0KGdyb3VwX2ZpbGUsIGZwdXRfbmVlZGVkKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBpbmhlcml0IGEgZXZlbnQgZnJvbSBwYXJlbnQgdGFzayB0byBjaGlsZCB0YXNrOgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKgoraW5oZXJpdF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50X2V2ZW50LAorCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LAorCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnBhcmVudF9jdHgsCisJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAorCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfZXZlbnQ7CisKKwkvKgorCSAqIEluc3RlYWQgb2YgY3JlYXRpbmcgcmVjdXJzaXZlIGhpZXJhcmNoaWVzIG9mIGV2ZW50cywKKwkgKiB3ZSBsaW5rIGluaGVyaXRlZCBldmVudHMgYmFjayB0byB0aGUgb3JpZ2luYWwgcGFyZW50LAorCSAqIHdoaWNoIGhhcyBhIGZpbHAgZm9yIHN1cmUsIHdoaWNoIHdlIHVzZSBhcyB0aGUgcmVmZXJlbmNlCisJICogY291bnQ6CisJICovCisJaWYgKHBhcmVudF9ldmVudC0+cGFyZW50KQorCQlwYXJlbnRfZXZlbnQgPSBwYXJlbnRfZXZlbnQtPnBhcmVudDsKKworCWNoaWxkX2V2ZW50ID0gcGVyZl9ldmVudF9hbGxvYygmcGFyZW50X2V2ZW50LT5hdHRyLAorCQkJCQkgICBwYXJlbnRfZXZlbnQtPmNwdSwgY2hpbGRfY3R4LAorCQkJCQkgICBncm91cF9sZWFkZXIsIHBhcmVudF9ldmVudCwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjaGlsZF9ldmVudCkpCisJCXJldHVybiBjaGlsZF9ldmVudDsKKwlnZXRfY3R4KGNoaWxkX2N0eCk7CisKKwkvKgorCSAqIE1ha2UgdGhlIGNoaWxkIHN0YXRlIGZvbGxvdyB0aGUgc3RhdGUgb2YgdGhlIHBhcmVudCBldmVudCwKKwkgKiBub3QgaXRzIGF0dHIuZGlzYWJsZWQgYml0LiAgV2UgaG9sZCB0aGUgcGFyZW50J3MgbXV0ZXgsCisJICogc28gd2Ugd29uJ3QgcmFjZSB3aXRoIHBlcmZfZXZlbnRfe2VuLCBkaXN9YWJsZV9mYW1pbHkuCisJICovCisJaWYgKHBhcmVudF9ldmVudC0+c3RhdGUgPj0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJY2hpbGRfZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRTsKKwllbHNlCisJCWNoaWxkX2V2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGOworCisJaWYgKHBhcmVudF9ldmVudC0+YXR0ci5mcmVxKQorCQljaGlsZF9ldmVudC0+aHcuc2FtcGxlX3BlcmlvZCA9IHBhcmVudF9ldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKKworCS8qCisJICogTGluayBpdCB1cCBpbiB0aGUgY2hpbGQncyBjb250ZXh0OgorCSAqLworCWFkZF9ldmVudF90b19jdHgoY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCk7CisKKwkvKgorCSAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGZpbHAgLSB3ZSB3aWxsIGZwdXQgaXQKKwkgKiB3aGVuIHRoZSBjaGlsZCBldmVudCBleGl0cy4gVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UKKwkgKiB3ZSBhcmUgaW4gdGhlIHBhcmVudCBhbmQgd2Uga25vdyB0aGF0IHRoZSBmaWxwIHN0aWxsCisJICogZXhpc3RzIGFuZCBoYXMgYSBub256ZXJvIGNvdW50OgorCSAqLworCWF0b21pY19sb25nX2luYygmcGFyZW50X2V2ZW50LT5maWxwLT5mX2NvdW50KTsKKworCS8qCisJICogTGluayB0aGlzIGludG8gdGhlIHBhcmVudCBldmVudCdzIGNoaWxkIGxpc3QKKwkgKi8KKwlXQVJOX09OX09OQ0UocGFyZW50X2V2ZW50LT5jdHgtPnBhcmVudF9jdHgpOworCW11dGV4X2xvY2soJnBhcmVudF9ldmVudC0+Y2hpbGRfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJmNoaWxkX2V2ZW50LT5jaGlsZF9saXN0LCAmcGFyZW50X2V2ZW50LT5jaGlsZF9saXN0KTsKKwltdXRleF91bmxvY2soJnBhcmVudF9ldmVudC0+Y2hpbGRfbXV0ZXgpOworCisJcmV0dXJuIGNoaWxkX2V2ZW50OworfQorCitzdGF0aWMgaW50IGluaGVyaXRfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudF9ldmVudCwKKwkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKKwkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnRfY3R4LAorCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXI7CisJc3RydWN0IHBlcmZfZXZlbnQgKnN1YjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfY3RyOworCisJbGVhZGVyID0gaW5oZXJpdF9ldmVudChwYXJlbnRfZXZlbnQsIHBhcmVudCwgcGFyZW50X2N0eCwKKwkJCQkgY2hpbGQsIE5VTEwsIGNoaWxkX2N0eCk7CisJaWYgKElTX0VSUihsZWFkZXIpKQorCQlyZXR1cm4gUFRSX0VSUihsZWFkZXIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmcGFyZW50X2V2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWNoaWxkX2N0ciA9IGluaGVyaXRfZXZlbnQoc3ViLCBwYXJlbnQsIHBhcmVudF9jdHgsCisJCQkJCSAgICBjaGlsZCwgbGVhZGVyLCBjaGlsZF9jdHgpOworCQlpZiAoSVNfRVJSKGNoaWxkX2N0cikpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZF9jdHIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3luY19jaGlsZF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfZXZlbnQsCisJCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50X2V2ZW50ID0gY2hpbGRfZXZlbnQtPnBhcmVudDsKKwl1NjQgY2hpbGRfdmFsOworCisJaWYgKGNoaWxkX2V2ZW50LT5hdHRyLmluaGVyaXRfc3RhdCkKKwkJcGVyZl9ldmVudF9yZWFkX2V2ZW50KGNoaWxkX2V2ZW50LCBjaGlsZCk7CisKKwljaGlsZF92YWwgPSBhdG9taWM2NF9yZWFkKCZjaGlsZF9ldmVudC0+Y291bnQpOworCisJLyoKKwkgKiBBZGQgYmFjayB0aGUgY2hpbGQncyBjb3VudCB0byB0aGUgcGFyZW50J3MgY291bnQ6CisJICovCisJYXRvbWljNjRfYWRkKGNoaWxkX3ZhbCwgJnBhcmVudF9ldmVudC0+Y291bnQpOworCWF0b21pYzY0X2FkZChjaGlsZF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkLAorCQkgICAgICZwYXJlbnRfZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CisJYXRvbWljNjRfYWRkKGNoaWxkX2V2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsCisJCSAgICAgJnBhcmVudF9ldmVudC0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKKworCS8qCisJICogUmVtb3ZlIHRoaXMgZXZlbnQgZnJvbSB0aGUgcGFyZW50J3MgbGlzdAorCSAqLworCVdBUk5fT05fT05DRShwYXJlbnRfZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmcGFyZW50X2V2ZW50LT5jaGlsZF9tdXRleCk7CisJbGlzdF9kZWxfaW5pdCgmY2hpbGRfZXZlbnQtPmNoaWxkX2xpc3QpOworCW11dGV4X3VubG9jaygmcGFyZW50X2V2ZW50LT5jaGlsZF9tdXRleCk7CisKKwkvKgorCSAqIFJlbGVhc2UgdGhlIHBhcmVudCBldmVudCwgaWYgdGhpcyB3YXMgdGhlIGxhc3QKKwkgKiByZWZlcmVuY2UgdG8gaXQuCisJICovCisJZnB1dChwYXJlbnRfZXZlbnQtPmZpbHApOworfQorCitzdGF0aWMgdm9pZAorX19wZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfZXZlbnQsCisJCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LAorCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudF9ldmVudDsKKworCXVwZGF0ZV9ldmVudF90aW1lcyhjaGlsZF9ldmVudCk7CisJcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0KGNoaWxkX2V2ZW50KTsKKworCXBhcmVudF9ldmVudCA9IGNoaWxkX2V2ZW50LT5wYXJlbnQ7CisJLyoKKwkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgcGFyZW50IGV4aXRzIGZpcnN0LCBhbmQgaGFzIGV2ZW50cworCSAqIHRoYXQgYXJlIHN0aWxsIGFyb3VuZCBkdWUgdG8gdGhlIGNoaWxkIHJlZmVyZW5jZS4gVGhlc2UKKwkgKiBldmVudHMgbmVlZCB0byBiZSB6YXBwZWQgLSBidXQgb3RoZXJ3aXNlIGxpbmdlci4KKwkgKi8KKwlpZiAocGFyZW50X2V2ZW50KSB7CisJCXN5bmNfY2hpbGRfZXZlbnQoY2hpbGRfZXZlbnQsIGNoaWxkKTsKKwkJZnJlZV9ldmVudChjaGlsZF9ldmVudCk7CisJfQorfQorCisvKgorICogV2hlbiBhIGNoaWxkIHRhc2sgZXhpdHMsIGZlZWQgYmFjayBldmVudCB2YWx1ZXMgdG8gcGFyZW50IGV2ZW50cy4KKyAqLwordm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpjaGlsZF9ldmVudCwgKnRtcDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjaGlsZF9jdHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChsaWtlbHkoIWNoaWxkLT5wZXJmX2V2ZW50X2N0eHApKSB7CisJCXBlcmZfZXZlbnRfdGFzayhjaGlsZCwgTlVMTCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJLyoKKwkgKiBXZSBjYW4ndCByZXNjaGVkdWxlIGhlcmUgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKKwkgKiBhbmQgZWl0aGVyIGNoaWxkIGlzIGN1cnJlbnQgb3IgaXQgaXMgYSB0YXNrIHRoYXQgY2FuJ3QgYmUKKwkgKiBzY2hlZHVsZWQsIHNvIHdlIGFyZSBub3cgc2FmZSBmcm9tIHJlc2NoZWR1bGluZyBjaGFuZ2luZworCSAqIG91ciBjb250ZXh0LgorCSAqLworCWNoaWxkX2N0eCA9IGNoaWxkLT5wZXJmX2V2ZW50X2N0eHA7CisJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KGNoaWxkX2N0eCk7CisKKwkvKgorCSAqIFRha2UgdGhlIGNvbnRleHQgbG9jayBoZXJlIHNvIHRoYXQgaWYgZmluZF9nZXRfY29udGV4dCBpcworCSAqIHJlYWRpbmcgY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCwgd2Ugd2FpdCB1bnRpbCBpdCBoYXMKKwkgKiBpbmNyZW1lbnRlZCB0aGUgY29udGV4dCdzIHJlZmNvdW50IGJlZm9yZSB3ZSBkbyBwdXRfY3R4IGJlbG93LgorCSAqLworCXNwaW5fbG9jaygmY2hpbGRfY3R4LT5sb2NrKTsKKwljaGlsZC0+cGVyZl9ldmVudF9jdHhwID0gTlVMTDsKKwkvKgorCSAqIElmIHRoaXMgY29udGV4dCBpcyBhIGNsb25lOyB1bmNsb25lIGl0IHNvIGl0IGNhbid0IGdldAorCSAqIHN3YXBwZWQgdG8gYW5vdGhlciBwcm9jZXNzIHdoaWxlIHdlJ3JlIHJlbW92aW5nIGFsbAorCSAqIHRoZSBldmVudHMgZnJvbSBpdC4KKwkgKi8KKwl1bmNsb25lX2N0eChjaGlsZF9jdHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaWxkX2N0eC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBSZXBvcnQgdGhlIHRhc2sgZGVhZCBhZnRlciB1bnNjaGVkdWxpbmcgdGhlIGV2ZW50cyBzbyB0aGF0IHdlCisJICogd29uJ3QgZ2V0IGFueSBzYW1wbGVzIGFmdGVyIFBFUkZfUkVDT1JEX0VYSVQuIFdlIGNhbiBob3dldmVyIHN0aWxsCisJICogZ2V0IGEgZmV3IFBFUkZfUkVDT1JEX1JFQUQgZXZlbnRzLgorCSAqLworCXBlcmZfZXZlbnRfdGFzayhjaGlsZCwgY2hpbGRfY3R4LCAwKTsKKworCS8qCisJICogV2UgY2FuIHJlY3Vyc2Ugb24gdGhlIHNhbWUgbG9jayB0eXBlIHRocm91Z2g6CisJICoKKwkgKiAgIF9fcGVyZl9ldmVudF9leGl0X3Rhc2soKQorCSAqICAgICBzeW5jX2NoaWxkX2V2ZW50KCkKKwkgKiAgICAgICBmcHV0KHBhcmVudF9ldmVudC0+ZmlscCkKKwkgKiAgICAgICAgIHBlcmZfcmVsZWFzZSgpCisJICogICAgICAgICAgIG11dGV4X2xvY2soJmN0eC0+bXV0ZXgpCisJICoKKwkgKiBCdXQgc2luY2UgaXRzIHRoZSBwYXJlbnQgY29udGV4dCBpdCB3b24ndCBiZSB0aGUgc2FtZSBpbnN0YW5jZS4KKwkgKi8KKwltdXRleF9sb2NrX25lc3RlZCgmY2hpbGRfY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCithZ2FpbjoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+Z3JvdXBfbGlzdCwKKwkJCQkgZ3JvdXBfZW50cnkpCisJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOworCisJLyoKKwkgKiBJZiB0aGUgbGFzdCBldmVudCB3YXMgYSBncm91cCBldmVudCwgaXQgd2lsbCBoYXZlIGFwcGVuZGVkIGFsbAorCSAqIGl0cyBzaWJsaW5ncyB0byB0aGUgbGlzdCwgYnV0IHdlIG9idGFpbmVkICd0bXAnIGJlZm9yZSB0aGF0IHdoaWNoCisJICogd2lsbCBzdGlsbCBwb2ludCB0byB0aGUgbGlzdCBoZWFkIHRlcm1pbmF0aW5nIHRoZSBpdGVyYXRpb24uCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPmdyb3VwX2xpc3QpKQorCQlnb3RvIGFnYWluOworCisJbXV0ZXhfdW5sb2NrKCZjaGlsZF9jdHgtPm11dGV4KTsKKworCXB1dF9jdHgoY2hpbGRfY3R4KTsKK30KKworLyoKKyAqIGZyZWUgYW4gdW5leHBvc2VkLCB1bnVzZWQgY29udGV4dCBhcyBjcmVhdGVkIGJ5IGluaGVyaXRhbmNlIGJ5CisgKiBpbml0X3Rhc2sgYmVsb3csIHVzZWQgYnkgZm9yaygpIGluIGNhc2Ugb2YgZmFpbC4KKyAqLwordm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnRtcDsKKworCWlmICghY3R4KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKK2FnYWluOgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50ID0gZXZlbnQtPnBhcmVudDsKKworCQlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQorCQkJY29udGludWU7CisKKwkJbXV0ZXhfbG9jaygmcGFyZW50LT5jaGlsZF9tdXRleCk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5jaGlsZF9saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKworCQlmcHV0KHBhcmVudC0+ZmlscCk7CisKKwkJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7CisJCWZyZWVfZXZlbnQoZXZlbnQpOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ncm91cF9saXN0KSkKKwkJZ290byBhZ2FpbjsKKworCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7CisKKwlwdXRfY3R4KGN0eCk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBwZXJmX2V2ZW50IGNvbnRleHQgaW4gdGFza19zdHJ1Y3QKKyAqLworaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LCAqcGFyZW50X2N0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjbG9uZWRfY3R4OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCA9IGN1cnJlbnQ7CisJaW50IGluaGVyaXRlZF9hbGwgPSAxOworCWludCByZXQgPSAwOworCisJY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCA9IE5VTEw7CisKKwltdXRleF9pbml0KCZjaGlsZC0+cGVyZl9ldmVudF9tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5wZXJmX2V2ZW50X2xpc3QpOworCisJaWYgKGxpa2VseSghcGFyZW50LT5wZXJmX2V2ZW50X2N0eHApKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbyBpbmhlcml0CisJICogZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBmb3IgY2xvbmluZy4KKwkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZSBjaGlsZC4KKwkgKi8KKworCWNoaWxkX2N0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoaWxkX2N0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KGNoaWxkX2N0eCwgY2hpbGQpOworCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7CisJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKKworCS8qCisJICogSWYgdGhlIHBhcmVudCdzIGNvbnRleHQgaXMgYSBjbG9uZSwgcGluIGl0IHNvIGl0IHdvbid0IGdldAorCSAqIHN3YXBwZWQgdW5kZXIgdXMuCisJICovCisJcGFyZW50X2N0eCA9IHBlcmZfcGluX3Rhc2tfY29udGV4dChwYXJlbnQpOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGNoZWNrIGlmIHBhcmVudF9jdHggIT0gTlVMTCBoZXJlOyBzaW5jZSB3ZSBzYXcKKwkgKiBpdCBub24tTlVMTCBlYXJsaWVyLCB0aGUgb25seSByZWFzb24gZm9yIGl0IHRvIGJlY29tZSBOVUxMCisJICogaXMgaWYgd2UgZXhpdCwgYW5kIHNpbmNlIHdlJ3JlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mCisJICogYSBmb3JrIHdlIGNhbid0IGJlIGV4aXRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKwkgKi8KKworCS8qCisJICogTG9jayB0aGUgcGFyZW50IGxpc3QuIE5vIG5lZWQgdG8gbG9jayB0aGUgY2hpbGQgLSBub3QgUElECisJICogaGFzaGVkIHlldCBhbmQgbm90IHJ1bm5pbmcsIHNvIG5vYm9keSBjYW4gYWNjZXNzIGl0LgorCSAqLworCW11dGV4X2xvY2soJnBhcmVudF9jdHgtPm11dGV4KTsKKworCS8qCisJICogV2UgZG9udCBoYXZlIHRvIGRpc2FibGUgTk1JcyAtIHdlIGFyZSBvbmx5IGxvb2tpbmcgYXQKKwkgKiB0aGUgbGlzdCwgbm90IG1hbmlwdWxhdGluZyBpdDoKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJnBhcmVudF9jdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CisJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7CisJCQlpbmhlcml0ZWRfYWxsID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0ID0gaW5oZXJpdF9ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LAorCQkJCQkgICAgIGNoaWxkLCBjaGlsZF9jdHgpOworCQlpZiAocmV0KSB7CisJCQlpbmhlcml0ZWRfYWxsID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGluaGVyaXRlZF9hbGwpIHsKKwkJLyoKKwkJICogTWFyayB0aGUgY2hpbGQgY29udGV4dCBhcyBhIGNsb25lIG9mIHRoZSBwYXJlbnQKKwkJICogY29udGV4dCwgb3Igb2Ygd2hhdGV2ZXIgdGhlIHBhcmVudCBpcyBhIGNsb25lIG9mLgorCQkgKiBOb3RlIHRoYXQgaWYgdGhlIHBhcmVudCBpcyBhIGNsb25lLCBpdCBjb3VsZCBnZXQKKwkJICogdW5jbG9uZWQgYXQgYW55IHBvaW50LCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlcgorCQkgKiBiZWNhdXNlIHRoZSBsaXN0IG9mIGV2ZW50cyBhbmQgdGhlIGdlbmVyYXRpb24KKwkJICogY291bnQgY2FuJ3QgaGF2ZSBjaGFuZ2VkIHNpbmNlIHdlIHRvb2sgdGhlIG11dGV4LgorCQkgKi8KKwkJY2xvbmVkX2N0eCA9IHJjdV9kZXJlZmVyZW5jZShwYXJlbnRfY3R4LT5wYXJlbnRfY3R4KTsKKwkJaWYgKGNsb25lZF9jdHgpIHsKKwkJCWNoaWxkX2N0eC0+cGFyZW50X2N0eCA9IGNsb25lZF9jdHg7CisJCQljaGlsZF9jdHgtPnBhcmVudF9nZW4gPSBwYXJlbnRfY3R4LT5wYXJlbnRfZ2VuOworCQl9IGVsc2UgeworCQkJY2hpbGRfY3R4LT5wYXJlbnRfY3R4ID0gcGFyZW50X2N0eDsKKwkJCWNoaWxkX2N0eC0+cGFyZW50X2dlbiA9IHBhcmVudF9jdHgtPmdlbmVyYXRpb247CisJCX0KKwkJZ2V0X2N0eChjaGlsZF9jdHgtPnBhcmVudF9jdHgpOworCX0KKworCW11dGV4X3VubG9jaygmcGFyZW50X2N0eC0+bXV0ZXgpOworCisJcGVyZl91bnBpbl9jb250ZXh0KHBhcmVudF9jdHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19jcHVpbml0IHBlcmZfZXZlbnRfaW5pdF9jcHUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OworCisJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KCZjcHVjdHgtPmN0eCwgTlVMTCk7CisKKwlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisJY3B1Y3R4LT5tYXhfcGVydGFzayA9IHBlcmZfbWF4X2V2ZW50cyAtIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1OworCXNwaW5fdW5sb2NrKCZwZXJmX3Jlc291cmNlX2xvY2spOworCisJaHdfcGVyZl9ldmVudF9zZXR1cChjcHUpOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfZXhpdF9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gJmNwdWN0eC0+Y3R4OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkKKwkJX19wZXJmX2V2ZW50X3JlbW92ZV9mcm9tX2NvbnRleHQoZXZlbnQpOworfQorc3RhdGljIHZvaWQgcGVyZl9ldmVudF9leGl0X2NwdShpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKKworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcGVyZl9ldmVudF9leGl0X2NwdSwgTlVMTCwgMSk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X2NwdShpbnQgY3B1KSB7IH0KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fY3B1aW5pdAorcGVyZl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IChsb25nKWhjcHU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKKwkJcGVyZl9ldmVudF9pbml0X2NwdShjcHUpOworCQlicmVhazsKKworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgorCQlod19wZXJmX2V2ZW50X3NldHVwX29ubGluZShjcHUpOworCQlicmVhazsKKworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgorCQlwZXJmX2V2ZW50X2V4aXRfY3B1KGNwdSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworLyoKKyAqIFRoaXMgaGFzIHRvIGhhdmUgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBtaWdyYXRpb25fbm90aWZpZXIgaW4gc2NoZWQuYy4KKyAqLworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHBlcmZfY3B1X25iID0geworCS5ub3RpZmllcl9jYWxsCQk9IHBlcmZfY3B1X25vdGlmeSwKKwkucHJpb3JpdHkJCT0gMjAsCit9OworCit2b2lkIF9faW5pdCBwZXJmX2V2ZW50X2luaXQodm9pZCkKK3sKKwlwZXJmX2NwdV9ub3RpZnkoJnBlcmZfY3B1X25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwKKwkJCSh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwZXJmX2NwdV9ub3RpZnkoJnBlcmZfY3B1X25iLCAodW5zaWduZWQgbG9uZylDUFVfT05MSU5FLAorCQkJKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcGVyZl9jcHVfbmIpOworfQorCitzdGF0aWMgc3NpemVfdCBwZXJmX3Nob3dfcmVzZXJ2ZV9wZXJjcHUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcGVyZl9yZXNlcnZlZF9wZXJjcHUpOworfQorCitzdGF0aWMgc3NpemVfdAorcGVyZl9zZXRfcmVzZXJ2ZV9wZXJjcHUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQljb25zdCBjaGFyICpidWYsCisJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyLCBjcHUsIG1wdDsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKHZhbCA+IHBlcmZfbWF4X2V2ZW50cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisJcGVyZl9yZXNlcnZlZF9wZXJjcHUgPSB2YWw7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwkJc3Bpbl9sb2NrX2lycSgmY3B1Y3R4LT5jdHgubG9jayk7CisJCW1wdCA9IG1pbihwZXJmX21heF9ldmVudHMgLSBjcHVjdHgtPmN0eC5ucl9ldmVudHMsCisJCQkgIHBlcmZfbWF4X2V2ZW50cyAtIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1KTsKKwkJY3B1Y3R4LT5tYXhfcGVydGFzayA9IG1wdDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjcHVjdHgtPmN0eC5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBlcmZfc2hvd19vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBlcmZfb3ZlcmNvbW1pdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitwZXJmX3NldF9vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyOworCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisJcGVyZl9vdmVyY29tbWl0ID0gdmFsOworCXNwaW5fdW5sb2NrKCZwZXJmX3Jlc291cmNlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoCisJCQkJcmVzZXJ2ZV9wZXJjcHUsCisJCQkJMDY0NCwKKwkJCQlwZXJmX3Nob3dfcmVzZXJ2ZV9wZXJjcHUsCisJCQkJcGVyZl9zZXRfcmVzZXJ2ZV9wZXJjcHUKKwkJCSk7CisKK3N0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUigKKwkJCQlvdmVyY29tbWl0LAorCQkJCTA2NDQsCisJCQkJcGVyZl9zaG93X292ZXJjb21taXQsCisJCQkJcGVyZl9zZXRfb3ZlcmNvbW1pdAorCQkJKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBlcmZjbGFzc19hdHRyc1tdID0geworCSZhdHRyX3Jlc2VydmVfcGVyY3B1LmF0dHIsCisJJmF0dHJfb3ZlcmNvbW1pdC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBlcmZjbGFzc19hdHRyX2dyb3VwID0geworCS5hdHRycwkJCT0gcGVyZmNsYXNzX2F0dHJzLAorCS5uYW1lCQkJPSAicGVyZl9ldmVudHMiLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGVyZl9ldmVudF9zeXNmc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmY3B1X3N5c2Rldl9jbGFzcy5rc2V0LmtvYmosCisJCQkJICAmcGVyZmNsYXNzX2F0dHJfZ3JvdXApOworfQorZGV2aWNlX2luaXRjYWxsKHBlcmZfZXZlbnRfc3lzZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkLmMgYi9rZXJuZWwvcGlkLmMKaW5kZXggMzEzMTBiNS4uZDNmNzIyZCAxMDA2NDQKLS0tIGEva2VybmVsL3BpZC5jCisrKyBiL2tlcm5lbC9waWQuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBwaWRfaGFzaGZuKG5yLCBucykJXAogCWhhc2hfbG9uZygodW5zaWduZWQgbG9uZyluciArICh1bnNpZ25lZCBsb25nKW5zLCBwaWRoYXNoX3NoaWZ0KQogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpwaWRfaGFzaDsKLXN0YXRpYyBpbnQgcGlkaGFzaF9zaGlmdDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGlkaGFzaF9zaGlmdCA9IDQ7CiBzdHJ1Y3QgcGlkIGluaXRfc3RydWN0X3BpZCA9IElOSVRfU1RSVUNUX1BJRDsKIAogaW50IHBpZF9tYXggPSBQSURfTUFYX0RFRkFVTFQ7CkBAIC00OTksMTkgKzQ5OSwxMiBAQAogdm9pZCBfX2luaXQgcGlkaGFzaF9pbml0KHZvaWQpCiB7CiAJaW50IGksIHBpZGhhc2hfc2l6ZTsKLQl1bnNpZ25lZCBsb25nIG1lZ2FieXRlcyA9IG5yX2tlcm5lbF9wYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKTsKIAotCXBpZGhhc2hfc2hpZnQgPSBtYXgoNCwgZmxzKG1lZ2FieXRlcyAqIDQpKTsKLQlwaWRoYXNoX3NoaWZ0ID0gbWluKDEyLCBwaWRoYXNoX3NoaWZ0KTsKKwlwaWRfaGFzaCA9IGFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJQSUQiLCBzaXplb2YoKnBpZF9oYXNoKSwgMCwgMTgsCisJCQkJCSAgIEhBU0hfRUFSTFkgfCBIQVNIX1NNQUxMLAorCQkJCQkgICAmcGlkaGFzaF9zaGlmdCwgTlVMTCwgNDA5Nik7CiAJcGlkaGFzaF9zaXplID0gMSA8PCBwaWRoYXNoX3NoaWZ0OwogCi0JcHJpbnRrKCJQSUQgaGFzaCB0YWJsZSBlbnRyaWVzOiAlZCAob3JkZXI6ICVkLCAlWmQgYnl0ZXMpXG4iLAotCQlwaWRoYXNoX3NpemUsIHBpZGhhc2hfc2hpZnQsCi0JCXBpZGhhc2hfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOwotCi0JcGlkX2hhc2ggPSBhbGxvY19ib290bWVtKHBpZGhhc2hfc2l6ZSAqCXNpemVvZigqKHBpZF9oYXNoKSkpOwotCWlmICghcGlkX2hhc2gpCi0JCXBhbmljKCJDb3VsZCBub3QgYWxsb2MgcGlkaGFzaCFcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBwaWRoYXNoX3NpemU7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZwaWRfaGFzaFtpXSk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCBlMzNhMjFjLi41YzlkYzIyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTgsMTcgKzgsMTggQEAKICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3RpbWVyLmg+CiAKIC8qCiAgKiBDYWxsZWQgYWZ0ZXIgdXBkYXRpbmcgUkxJTUlUX0NQVSB0byBzZXQgdGltZXIgZXhwaXJhdGlvbiBpZiBuZWNlc3NhcnkuCiAgKi8KIHZvaWQgdXBkYXRlX3JsaW1pdF9jcHUodW5zaWduZWQgbG9uZyBybGltX25ldykKIHsKLQljcHV0aW1lX3QgY3B1dGltZTsKKwljcHV0aW1lX3QgY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShybGltX25ldyk7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKmNvbnN0IHNpZyA9IGN1cnJlbnQtPnNpZ25hbDsKIAotCWNwdXRpbWUgPSBzZWNzX3RvX2NwdXRpbWUocmxpbV9uZXcpOwotCWlmIChjcHV0aW1lX2VxKGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JICAgIGNwdXRpbWVfZ3QoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWUpKSB7CisJaWYgKGNwdXRpbWVfZXEoc2lnLT5pdFtDUFVDTE9DS19QUk9GXS5leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CisJICAgIGNwdXRpbWVfZ3Qoc2lnLT5pdFtDUFVDTE9DS19QUk9GXS5leHBpcmVzLCBjcHV0aW1lKSkgewogCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKGN1cnJlbnQsIENQVUNMT0NLX1BST0YsICZjcHV0aW1lLCBOVUxMKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTU0Miw2ICs1NDMsMTcgQEAKIAkJCQkJICAgICBub3cpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBleHBpcmVzX2d0KGNwdXRpbWVfdCBleHBpcmVzLCBjcHV0aW1lX3QgbmV3X2V4cCkKK3sKKwlyZXR1cm4gY3B1dGltZV9lcShleHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CisJICAgICAgIGNwdXRpbWVfZ3QoZXhwaXJlcywgbmV3X2V4cCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4cGlyZXNfbGUoY3B1dGltZV90IGV4cGlyZXMsIGNwdXRpbWVfdCBuZXdfZXhwKQoreworCXJldHVybiAhY3B1dGltZV9lcShleHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCisJICAgICAgIGNwdXRpbWVfbGUoZXhwaXJlcywgbmV3X2V4cCk7Cit9CiAvKgogICogSW5zZXJ0IHRoZSB0aW1lciBvbiB0aGUgYXBwcm9wcmlhdGUgbGlzdCBiZWZvcmUgYW55IHRpbWVycyB0aGF0CiAgKiBleHBpcmUgbGF0ZXIuICBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHRhc2tsaXN0X2xvY2sgaGVsZApAQCAtNTg2LDM0ICs1OTgsMzIgQEAKIAkJICovCiAKIAkJaWYgKENQVUNMT0NLX1BFUlRIUkVBRCh0aW1lci0+aXRfY2xvY2spKSB7CisJCQl1bmlvbiBjcHVfdGltZV9jb3VudCAqZXhwID0gJm50LT5leHBpcmVzOworCiAJCQlzd2l0Y2ggKENQVUNMT0NLX1dISUNIKHRpbWVyLT5pdF9jbG9jaykpIHsKIAkJCWRlZmF1bHQ6CiAJCQkJQlVHKCk7CiAJCQljYXNlIENQVUNMT0NLX1BST0Y6Ci0JCQkJaWYgKGNwdXRpbWVfZXEocC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLAotCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fAotCQkJCSAgICBjcHV0aW1lX2d0KHAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCwKLQkJCQkJICAgICAgIG50LT5leHBpcmVzLmNwdSkpCi0JCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9Ci0JCQkJCQludC0+ZXhwaXJlcy5jcHU7CisJCQkJaWYgKGV4cGlyZXNfZ3QocC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLAorCQkJCQkgICAgICAgZXhwLT5jcHUpKQorCQkJCQlwLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBleHAtPmNwdTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKLQkJCQlpZiAoY3B1dGltZV9lcShwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsCi0JCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QocC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwLAotCQkJCQkgICAgICAgbnQtPmV4cGlyZXMuY3B1KSkKLQkJCQkJcC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0KLQkJCQkJCW50LT5leHBpcmVzLmNwdTsKKwkJCQlpZiAoZXhwaXJlc19ndChwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsCisJCQkJCSAgICAgICBleHAtPmNwdSkpCisJCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IGV4cC0+Y3B1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19TQ0hFRDoKIAkJCQlpZiAocC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9PSAwIHx8Ci0JCQkJICAgIHAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPgotCQkJCQkJCW50LT5leHBpcmVzLnNjaGVkKQorCQkJCSAgICBwLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID4gZXhwLT5zY2hlZCkKIAkJCQkJcC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9Ci0JCQkJCQludC0+ZXhwaXJlcy5zY2hlZDsKKwkJCQkJCQkJZXhwLT5zY2hlZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpjb25zdCBzaWcgPSBwLT5zaWduYWw7CisJCQl1bmlvbiBjcHVfdGltZV9jb3VudCAqZXhwID0gJnRpbWVyLT5pdC5jcHUuZXhwaXJlczsKKwogCQkJLyoKIAkJCSAqIEZvciBhIHByb2Nlc3MgdGltZXIsIHNldCB0aGUgY2FjaGVkIGV4cGlyYXRpb24gdGltZS4KIAkJCSAqLwpAQCAtNjIxLDMwICs2MzEsMjMgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJQlVHKCk7CiAJCQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCQkJaWYgKCFjcHV0aW1lX2VxKHAtPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzLAotCQkJCQkJY3B1dGltZV96ZXJvKSAmJgotCQkJCSAgICBjcHV0aW1lX2x0KHAtPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzLAotCQkJCQkgICAgICAgdGltZXItPml0LmNwdS5leHBpcmVzLmNwdSkpCisJCQkJaWYgKGV4cGlyZXNfbGUoc2lnLT5pdFtDUFVDTE9DS19WSVJUXS5leHBpcmVzLAorCQkJCQkgICAgICAgZXhwLT5jcHUpKQogCQkJCQlicmVhazsKLQkJCQlwLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9Ci0JCQkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHU7CisJCQkJc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBleHAtPmNwdTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKLQkJCQlpZiAoIWNwdXRpbWVfZXEocC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsCi0JCQkJCQljcHV0aW1lX3plcm8pICYmCi0JCQkJICAgIGNwdXRpbWVfbHQocC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsCi0JCQkJCSAgICAgICB0aW1lci0+aXQuY3B1LmV4cGlyZXMuY3B1KSkKKwkJCQlpZiAoZXhwaXJlc19sZShzaWctPml0W0NQVUNMT0NLX1BST0ZdLmV4cGlyZXMsCisJCQkJCSAgICAgICBleHAtPmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCWkgPSBwLT5zaWduYWwtPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXI7CisJCQkJaSA9IHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cjsKIAkJCQlpZiAoaSAhPSBSTElNX0lORklOSVRZICYmCi0JCQkJICAgIGkgPD0gY3B1dGltZV90b19zZWNzKHRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHUpKQorCQkJCSAgICBpIDw9IGNwdXRpbWVfdG9fc2VjcyhleHAtPmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0KLQkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLmNwdTsKKwkJCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IGV4cC0+Y3B1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJCQlwLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPQotCQkJCQl0aW1lci0+aXQuY3B1LmV4cGlyZXMuc2NoZWQ7CisJCQkJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gZXhwLT5zY2hlZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTA3MSw2ICsxMDc0LDQwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1dGltZXItPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHUzMiBvbmVjcHV0aWNrOworCitzdGF0aWMgdm9pZCBjaGVja19jcHVfaXRpbWVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgY3B1X2l0aW1lciAqaXQsCisJCQkgICAgIGNwdXRpbWVfdCAqZXhwaXJlcywgY3B1dGltZV90IGN1cl90aW1lLCBpbnQgc2lnbm8pCit7CisJaWYgKGNwdXRpbWVfZXEoaXQtPmV4cGlyZXMsIGNwdXRpbWVfemVybykpCisJCXJldHVybjsKKworCWlmIChjcHV0aW1lX2dlKGN1cl90aW1lLCBpdC0+ZXhwaXJlcykpIHsKKwkJaWYgKCFjcHV0aW1lX2VxKGl0LT5pbmNyLCBjcHV0aW1lX3plcm8pKSB7CisJCQlpdC0+ZXhwaXJlcyA9IGNwdXRpbWVfYWRkKGl0LT5leHBpcmVzLCBpdC0+aW5jcik7CisJCQlpdC0+ZXJyb3IgKz0gaXQtPmluY3JfZXJyb3I7CisJCQlpZiAoaXQtPmVycm9yID49IG9uZWNwdXRpY2spIHsKKwkJCQlpdC0+ZXhwaXJlcyA9IGNwdXRpbWVfc3ViKGl0LT5leHBpcmVzLAorCQkJCQkJCSAgY3B1dGltZV9vbmVfamlmZnkpOworCQkJCWl0LT5lcnJvciAtPSBvbmVjcHV0aWNrOworCQkJfQorCQl9IGVsc2UgeworCQkJaXQtPmV4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJCX0KKworCQl0cmFjZV9pdGltZXJfZXhwaXJlKHNpZ25vID09IFNJR1BST0YgPworCQkJCSAgICBJVElNRVJfUFJPRiA6IElUSU1FUl9WSVJUVUFMLAorCQkJCSAgICB0c2stPnNpZ25hbC0+bGVhZGVyX3BpZCwgY3VyX3RpbWUpOworCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oc2lnbm8sIFNFTkRfU0lHX1BSSVYsIHRzayk7CisJfQorCisJaWYgKCFjcHV0aW1lX2VxKGl0LT5leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCisJICAgIChjcHV0aW1lX2VxKCpleHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CisJICAgICBjcHV0aW1lX2x0KGl0LT5leHBpcmVzLCAqZXhwaXJlcykpKSB7CisJCSpleHBpcmVzID0gaXQtPmV4cGlyZXM7CisJfQorfQorCiAvKgogICogQ2hlY2sgZm9yIGFueSBwZXItdGhyZWFkIENQVSB0aW1lcnMgdGhhdCBoYXZlIGZpcmVkIGFuZCBtb3ZlIHRoZW0KICAqIG9mZiB0aGUgdHNrLT4qX3RpbWVycyBsaXN0IG9udG8gdGhlIGZpcmluZyBsaXN0LiAgUGVyLXRocmVhZCB0aW1lcnMKQEAgLTEwOTAsMTAgKzExMjcsMTAgQEAKIAkgKiBEb24ndCBzYW1wbGUgdGhlIGN1cnJlbnQgcHJvY2VzcyBDUFUgY2xvY2tzIGlmIHRoZXJlIGFyZSBubyB0aW1lcnMuCiAJICovCiAJaWYgKGxpc3RfZW1wdHkoJnRpbWVyc1tDUFVDTE9DS19QUk9GXSkgJiYKLQkgICAgY3B1dGltZV9lcShzaWctPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgorCSAgICBjcHV0aW1lX2VxKHNpZy0+aXRbQ1BVQ0xPQ0tfUFJPRl0uZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgogCSAgICBzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSAmJgogCSAgICBsaXN0X2VtcHR5KCZ0aW1lcnNbQ1BVQ0xPQ0tfVklSVF0pICYmCi0JICAgIGNwdXRpbWVfZXEoc2lnLT5pdF92aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKKwkgICAgY3B1dGltZV9lcShzaWctPml0W0NQVUNMT0NLX1ZJUlRdLmV4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKIAkgICAgbGlzdF9lbXB0eSgmdGltZXJzW0NQVUNMT0NLX1NDSEVEXSkpIHsKIAkJc3RvcF9wcm9jZXNzX3RpbWVycyh0c2spOwogCQlyZXR1cm47CkBAIC0xMTUzLDM4ICsxMTkwLDExIEBACiAJLyoKIAkgKiBDaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSBwcm9jZXNzIHRpbWVycy4KIAkgKi8KLQlpZiAoIWNwdXRpbWVfZXEoc2lnLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykpIHsKLQkJaWYgKGNwdXRpbWVfZ2UocHRpbWUsIHNpZy0+aXRfcHJvZl9leHBpcmVzKSkgewotCQkJLyogSVRJTUVSX1BST0YgZmlyZXMgYW5kIHJlbG9hZHMuICAqLwotCQkJc2lnLT5pdF9wcm9mX2V4cGlyZXMgPSBzaWctPml0X3Byb2ZfaW5jcjsKLQkJCWlmICghY3B1dGltZV9lcShzaWctPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSkgewotCQkJCXNpZy0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV9hZGQoCi0JCQkJCXNpZy0+aXRfcHJvZl9leHBpcmVzLCBwdGltZSk7Ci0JCQl9Ci0JCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oU0lHUFJPRiwgU0VORF9TSUdfUFJJViwgdHNrKTsKLQkJfQotCQlpZiAoIWNwdXRpbWVfZXEoc2lnLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKLQkJICAgIChjcHV0aW1lX2VxKHByb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCQkgICAgIGNwdXRpbWVfbHQoc2lnLT5pdF9wcm9mX2V4cGlyZXMsIHByb2ZfZXhwaXJlcykpKSB7Ci0JCQlwcm9mX2V4cGlyZXMgPSBzaWctPml0X3Byb2ZfZXhwaXJlczsKLQkJfQotCX0KLQlpZiAoIWNwdXRpbWVfZXEoc2lnLT5pdF92aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykpIHsKLQkJaWYgKGNwdXRpbWVfZ2UodXRpbWUsIHNpZy0+aXRfdmlydF9leHBpcmVzKSkgewotCQkJLyogSVRJTUVSX1ZJUlRVQUwgZmlyZXMgYW5kIHJlbG9hZHMuICAqLwotCQkJc2lnLT5pdF92aXJ0X2V4cGlyZXMgPSBzaWctPml0X3ZpcnRfaW5jcjsKLQkJCWlmICghY3B1dGltZV9lcShzaWctPml0X3ZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSkgewotCQkJCXNpZy0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV9hZGQoCi0JCQkJCXNpZy0+aXRfdmlydF9leHBpcmVzLCB1dGltZSk7Ci0JCQl9Ci0JCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oU0lHVlRBTFJNLCBTRU5EX1NJR19QUklWLCB0c2spOwotCQl9Ci0JCWlmICghY3B1dGltZV9lcShzaWctPml0X3ZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgotCQkgICAgKGNwdXRpbWVfZXEodmlydF9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JCSAgICAgY3B1dGltZV9sdChzaWctPml0X3ZpcnRfZXhwaXJlcywgdmlydF9leHBpcmVzKSkpIHsKLQkJCXZpcnRfZXhwaXJlcyA9IHNpZy0+aXRfdmlydF9leHBpcmVzOwotCQl9Ci0JfQorCWNoZWNrX2NwdV9pdGltZXIodHNrLCAmc2lnLT5pdFtDUFVDTE9DS19QUk9GXSwgJnByb2ZfZXhwaXJlcywgcHRpbWUsCisJCQkgU0lHUFJPRik7CisJY2hlY2tfY3B1X2l0aW1lcih0c2ssICZzaWctPml0W0NQVUNMT0NLX1ZJUlRdLCAmdmlydF9leHBpcmVzLCB1dGltZSwKKwkJCSBTSUdWVEFMUk0pOworCiAJaWYgKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSB7CiAJCXVuc2lnbmVkIGxvbmcgcHNlY3MgPSBjcHV0aW1lX3RvX3NlY3MocHRpbWUpOwogCQljcHV0aW1lX3QgeDsKQEAgLTE0NTcsNyArMTQ2Nyw3IEBACiAJCWlmICghY3B1dGltZV9lcSgqb2xkdmFsLCBjcHV0aW1lX3plcm8pKSB7CiAJCQlpZiAoY3B1dGltZV9sZSgqb2xkdmFsLCBub3cuY3B1KSkgewogCQkJCS8qIEp1c3QgYWJvdXQgdG8gZmlyZS4gKi8KLQkJCQkqb2xkdmFsID0gamlmZmllc190b19jcHV0aW1lKDEpOworCQkJCSpvbGR2YWwgPSBjcHV0aW1lX29uZV9qaWZmeTsKIAkJCX0gZWxzZSB7CiAJCQkJKm9sZHZhbCA9IGNwdXRpbWVfc3ViKCpvbGR2YWwsIG5vdy5jcHUpOwogCQkJfQpAQCAtMTcwMywxMCArMTcxMywxNSBAQAogCQkubnNsZWVwID0gdGhyZWFkX2NwdV9uc2xlZXAsCiAJCS5uc2xlZXBfcmVzdGFydCA9IHRocmVhZF9jcHVfbnNsZWVwX3Jlc3RhcnQsCiAJfTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsICZwcm9jZXNzKTsKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19USFJFQURfQ1BVVElNRV9JRCwgJnRocmVhZCk7CiAKKwljcHV0aW1lX3RvX3RpbWVzcGVjKGNwdXRpbWVfb25lX2ppZmZ5LCAmdHMpOworCW9uZWNwdXRpY2sgPSB0cy50dl9uc2VjOworCVdBUk5fT04odHMudHZfc2VjICE9IDApOworCiAJcmV0dXJuIDA7CiB9CiBfX2luaXRjYWxsKGluaXRfcG9zaXhfY3B1X3RpbWVycyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvY29uc29sZS5jIGIva2VybmVsL3Bvd2VyL2NvbnNvbGUuYwppbmRleCBhMzk2MWIyMC4uNTE4NzEzNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2NvbnNvbGUuYworKysgYi9rZXJuZWwvcG93ZXIvY29uc29sZS5jCkBAIC0xNCw1NiArMTQsMTMgQEAKICNkZWZpbmUgU1VTUEVORF9DT05TT0xFCShNQVhfTlJfQ09OU09MRVMtMSkKIAogc3RhdGljIGludCBvcmlnX2ZnY29uc29sZSwgb3JpZ19rbXNnOwotc3RhdGljIGludCBkaXNhYmxlX3Z0X3N3aXRjaDsKLQotLyoKLSAqIE5vcm1hbGx5IGR1cmluZyBhIHN1c3BlbmQsIHdlIGFsbG9jYXRlIGEgbmV3IGNvbnNvbGUgYW5kIHN3aXRjaCB0byBpdC4KLSAqIFdoZW4gd2UgcmVzdW1lLCB3ZSBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwgY29uc29sZS4gIFRoaXMgc3dpdGNoCi0gKiBjYW4gYmUgc2xvdywgc28gb24gc3lzdGVtcyB3aGVyZSB0aGUgZnJhbWVidWZmZXIgY2FuIGhhbmRsZSByZXN0b3JhdGlvbgotICogb2YgdmlkZW8gcmVnaXN0ZXJzIGFueXdheXMsIHRoZXJlJ3MgbGl0dGxlIHBvaW50IGluIGRvaW5nIHRoZSBjb25zb2xlCi0gKiBzd2l0Y2guICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nIGl0ICcwJy4KLSAqLwotdm9pZCBwbV9zZXRfdnRfc3dpdGNoKGludCBkb19zd2l0Y2gpCi17Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCWRpc2FibGVfdnRfc3dpdGNoID0gIWRvX3N3aXRjaDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBtX3NldF92dF9zd2l0Y2gpOwogCiBpbnQgcG1fcHJlcGFyZV9jb25zb2xlKHZvaWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCi0JaWYgKGRpc2FibGVfdnRfc3dpdGNoKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jb3JpZ19mZ2NvbnNvbGUgPSBmZ19jb25zb2xlOwotCi0JaWYgKHZjX2FsbG9jYXRlKFNVU1BFTkRfQ09OU09MRSkpIHsKLQkgIC8qIHdlIGNhbid0IGhhdmUgYSBmcmVlIFZDIGZvciBub3cuIFRvbyBiYWQsCi0JICAgKiB3ZSBkb24ndCB3YW50IHRvIG1lc3MgdGhlIHNjcmVlbiBmb3Igbm93LiAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJb3JpZ19mZ2NvbnNvbGUgPSB2dF9tb3ZlX3RvX2NvbnNvbGUoU1VTUEVORF9DT05TT0xFLCAxKTsKKwlpZiAob3JpZ19mZ2NvbnNvbGUgPCAwKQogCQlyZXR1cm4gMTsKLQl9CiAKLQlpZiAoc2V0X2NvbnNvbGUoU1VTUEVORF9DT05TT0xFKSkgewotCQkvKgotCQkgKiBXZSdyZSB1bmFibGUgdG8gc3dpdGNoIHRvIHRoZSBTVVNQRU5EX0NPTlNPTEUuCi0JCSAqIExldCB0aGUgY2FsbGluZyBmdW5jdGlvbiBrbm93IHNvIGl0IGNhbiBkZWNpZGUKLQkJICogd2hhdCB0byBkby4KLQkJICovCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQotCWlmICh2dF93YWl0YWN0aXZlKFNVU1BFTkRfQ09OU09MRSkpIHsKLQkJcHJfZGVidWcoIlN1c3BlbmQ6IENhbid0IHN3aXRjaCBWQ3MuIik7Ci0JCXJldHVybiAxOwotCX0KIAlvcmlnX2ttc2cgPSBrbXNnX3JlZGlyZWN0OwogCWttc2dfcmVkaXJlY3QgPSBTVVNQRU5EX0NPTlNPTEU7CiAJcmV0dXJuIDA7CkBAIC03MSwxOSArMjgsOSBAQAogCiB2b2lkIHBtX3Jlc3RvcmVfY29uc29sZSh2b2lkKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQlpZiAoZGlzYWJsZV92dF9zd2l0Y2gpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQlyZXR1cm47CisJaWYgKG9yaWdfZmdjb25zb2xlID49IDApIHsKKwkJdnRfbW92ZV90b19jb25zb2xlKG9yaWdfZmdjb25zb2xlLCAwKTsKKwkJa21zZ19yZWRpcmVjdCA9IG9yaWdfa21zZzsKIAl9Ci0Jc2V0X2NvbnNvbGUob3JpZ19mZ2NvbnNvbGUpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQotCWlmICh2dF93YWl0YWN0aXZlKG9yaWdfZmdjb25zb2xlKSkgewotCQlwcl9kZWJ1ZygiUmVzdW1lOiBDYW4ndCBzd2l0Y2ggVkNzLiIpOwotCQlyZXR1cm47Ci0JfQotCi0Ja21zZ19yZWRpcmVjdCA9IG9yaWdfa21zZzsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggZGEyMDcyZC4uY2MyZTU1MyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYworKysgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCkBAIC05LDYgKzksNyBAQAogI3VuZGVmIERFQlVHCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vb20uaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggOTc5NTViMC4uMzZjYjE2OCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTYxOSw3ICs2MTksNyBAQAogCQlCVUdfT04oIXJlZ2lvbik7CiAJfSBlbHNlCiAJCS8qIFRoaXMgYWxsb2NhdGlvbiBjYW5ub3QgZmFpbCAqLwotCQlyZWdpb24gPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2Yoc3RydWN0IG5vc2F2ZV9yZWdpb24pKTsKKwkJcmVnaW9uID0gYWxsb2NfYm9vdG1lbShzaXplb2Yoc3RydWN0IG5vc2F2ZV9yZWdpb24pKTsKIAlyZWdpb24tPnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKIAlyZWdpb24tPmVuZF9wZm4gPSBlbmRfcGZuOwogCWxpc3RfYWRkX3RhaWwoJnJlZ2lvbi0+bGlzdCwgJm5vc2F2ZV9yZWdpb25zKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCA2MDIwMzNhLi5mMzhiMDdmIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0yMDYsMTIgKzIwNiwxMSBAQAogI2lmZGVmIENPTkZJR19CT09UX1BSSU5US19ERUxBWQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGJvb3RfZGVsYXk7IC8qIG1zZWNzIGRlbGF5IGFmdGVyIGVhY2ggcHJpbnRrIGR1cmluZyBib290dXAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcHJpbnRrX2RlbGF5X21zZWM7IC8qIHBlciBtc2VjLCBiYXNlZCBvbiBib290X2RlbGF5ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGxvb3BzX3Blcl9tc2VjOwkvKiBiYXNlZCBvbiBib290X2RlbGF5ICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGJvb3RfZGVsYXlfc2V0dXAoY2hhciAqc3RyKQogewogCXVuc2lnbmVkIGxvbmcgbHBqOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBsb29wc19wZXJfbXNlYzsKIAogCWxwaiA9IHByZXNldF9scGogPyBwcmVzZXRfbHBqIDogMTAwMDAwMDsJLyogc29tZSBndWVzcyAqLwogCWxvb3BzX3Blcl9tc2VjID0gKHVuc2lnbmVkIGxvbmcgbG9uZylscGogLyAxMDAwICogSFo7CkBAIC0yMjAsMTAgKzIxOSw5IEBACiAJaWYgKGJvb3RfZGVsYXkgPiAxMCAqIDEwMDApCiAJCWJvb3RfZGVsYXkgPSAwOwogCi0JcHJpbnRrX2RlbGF5X21zZWMgPSBsb29wc19wZXJfbXNlYzsKLQlwcmludGsoS0VSTl9ERUJVRyAiYm9vdF9kZWxheTogJXUsIHByZXNldF9scGo6ICVsZCwgbHBqOiAlbHUsICIKLQkJIkhaOiAlZCwgcHJpbnRrX2RlbGF5X21zZWM6ICVsbHVcbiIsCi0JCWJvb3RfZGVsYXksIHByZXNldF9scGosIGxwaiwgSFosIHByaW50a19kZWxheV9tc2VjKTsKKwlwcl9kZWJ1ZygiYm9vdF9kZWxheTogJXUsIHByZXNldF9scGo6ICVsZCwgbHBqOiAlbHUsICIKKwkJIkhaOiAlZCwgbG9vcHNfcGVyX21zZWM6ICVsbHVcbiIsCisJCWJvb3RfZGVsYXksIHByZXNldF9scGosIGxwaiwgSFosIGxvb3BzX3Blcl9tc2VjKTsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImJvb3RfZGVsYXk9IiwgYm9vdF9kZWxheV9zZXR1cCk7CkBAIC0yMzYsNyArMjM0LDcgQEAKIAlpZiAoYm9vdF9kZWxheSA9PSAwIHx8IHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fQk9PVElORykKIAkJcmV0dXJuOwogCi0JayA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcHJpbnRrX2RlbGF5X21zZWMgKiBib290X2RlbGF5OworCWsgPSAodW5zaWduZWQgbG9uZyBsb25nKWxvb3BzX3Blcl9tc2VjICogYm9vdF9kZWxheTsKIAogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhib290X2RlbGF5KTsKIAl3aGlsZSAoaykgewpAQCAtNjU1LDYgKzY1MywyMCBAQAogc3RhdGljIGludCBuZXdfdGV4dF9saW5lID0gMTsKIHN0YXRpYyBjaGFyIHByaW50a19idWZbMTAyNF07CiAKK2ludCBwcmludGtfZGVsYXlfbXNlYyBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2RlbGF5KHZvaWQpCit7CisJaWYgKHVubGlrZWx5KHByaW50a19kZWxheV9tc2VjKSkgeworCQlpbnQgbSA9IHByaW50a19kZWxheV9tc2VjOworCisJCXdoaWxlIChtLS0pIHsKKwkJCW1kZWxheSgxKTsKKwkJCXRvdWNoX25taV93YXRjaGRvZygpOworCQl9CisJfQorfQorCiBhc21saW5rYWdlIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCWludCBwcmludGVkX2xlbiA9IDA7CkBAIC02NjQsNiArNjc2LDcgQEAKIAljaGFyICpwOwogCiAJYm9vdF9kZWxheV9tc2VjKCk7CisJcHJpbnRrX2RlbGF5KCk7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAkvKiBUaGlzIHN0b3BzIHRoZSBob2xkZXIgb2YgY29uc29sZV9zZW0ganVzdCB3aGVyZSB3ZSB3YW50IGhpbSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3Byb2ZpbGUuYyBiL2tlcm5lbC9wcm9maWxlLmMKaW5kZXggNDE5MjUwZS4uYTU1ZDNhMyAxMDA2NDQKLS0tIGEva2VybmVsL3Byb2ZpbGUuYworKysgYi9rZXJuZWwvcHJvZmlsZS5jCkBAIC00NDIsNDggKzQ0Miw1MSBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgaW50IHByb2ZfY3B1X21hc2tfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcHJvZl9jcHVfbWFza19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSBjcHVtYXNrX3NjbnByaW50ZihwYWdlLCBjb3VudCwgZGF0YSk7Ci0JaWYgKGNvdW50IC0gbGVuIDwgMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JcmV0dXJuIGxlbjsKKwlzZXFfY3B1bWFzayhtLCBwcm9mX2NwdV9tYXNrKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9mX2NwdV9tYXNrX3dyaXRlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsCi0JY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHByb2ZfY3B1X21hc2tfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBjcHVtYXNrICptYXNrID0gZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZ1bGxfY291bnQgPSBjb3VudCwgZXJyOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9mX2NwdV9tYXNrX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByb2ZfY3B1X21hc2tfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQorewogCWNwdW1hc2tfdmFyX3QgbmV3X3ZhbHVlOworCWludCBlcnI7CiAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZuZXdfdmFsdWUsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWVyciA9IGNwdW1hc2tfcGFyc2VfdXNlcihidWZmZXIsIGNvdW50LCBuZXdfdmFsdWUpOwogCWlmICghZXJyKSB7Ci0JCWNwdW1hc2tfY29weShtYXNrLCBuZXdfdmFsdWUpOwotCQllcnIgPSBmdWxsX2NvdW50OworCQljcHVtYXNrX2NvcHkocHJvZl9jcHVfbWFzaywgbmV3X3ZhbHVlKTsKKwkJZXJyID0gY291bnQ7CiAJfQogCWZyZWVfY3B1bWFza192YXIobmV3X3ZhbHVlKTsKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9mX2NwdV9tYXNrX3Byb2NfZm9wcyA9IHsKKwkub3BlbgkJPSBwcm9mX2NwdV9tYXNrX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBwcm9mX2NwdV9tYXNrX3Byb2Nfd3JpdGUsCit9OworCiB2b2lkIGNyZWF0ZV9wcm9mX2NwdV9tYXNrKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdF9pcnFfZGlyKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7Ci0KIAkvKiBjcmVhdGUgL3Byb2MvaXJxL3Byb2ZfY3B1X21hc2sgKi8KLQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwcm9mX2NwdV9tYXNrIiwgMDYwMCwgcm9vdF9pcnFfZGlyKTsKLQlpZiAoIWVudHJ5KQotCQlyZXR1cm47Ci0JZW50cnktPmRhdGEgPSBwcm9mX2NwdV9tYXNrOwotCWVudHJ5LT5yZWFkX3Byb2MgPSBwcm9mX2NwdV9tYXNrX3JlYWRfcHJvYzsKLQllbnRyeS0+d3JpdGVfcHJvYyA9IHByb2ZfY3B1X21hc2tfd3JpdGVfcHJvYzsKKwlwcm9jX2NyZWF0ZSgicHJvZl9jcHVfbWFzayIsIDA2MDAsIHJvb3RfaXJxX2RpciwgJnByb2ZfY3B1X21hc2tfcHJvY19mb3BzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggYmQ1ZDVjOC4uMzdhYzQ1NCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKiBBdXRob3JzOiBEaXBhbmthciBTYXJtYSA8ZGlwYW5rYXJAaW4uaWJtLmNvbT4KICAqCSAgICBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgotICogCisgKgogICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIHdvcmsgYnkgUGF1bCBNY0tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgogICogYW5kIGlucHV0cyBmcm9tIFJ1c3R5IFJ1c3NlbGwsIEFuZHJlYSBBcmNhbmdlbGkgYW5kIEFuZGkgS2xlZW4uCiAgKiBQYXBlcnM6CkBAIC0yNyw3ICsyNyw3IEBACiAgKiBodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMuc2MucGRmIChPTFMyMDAxKQogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKKyAqCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNzQsNiArNzQsOCBAQAogCWNvbXBsZXRlKCZyY3UtPmNvbXBsZXRpb24pOwogfQogCisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKwogLyoqCiAgKiBzeW5jaHJvbml6ZV9yY3UgLSB3YWl0IHVudGlsIGEgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgogICoKQEAgLTg3LDcgKzg5LDcgQEAKIHsKIAlzdHJ1Y3QgcmN1X3N5bmNocm9uaXplIHJjdTsKIAotCWlmIChyY3VfYmxvY2tpbmdfaXNfZ3AoKSkKKwlpZiAoIXJjdV9zY2hlZHVsZXJfYWN0aXZlKQogCQlyZXR1cm47CiAKIAlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKQEAgLTk4LDYgKzEwMCw0NiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTsKIAorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworCisvKioKKyAqIHN5bmNocm9uaXplX3NjaGVkIC0gd2FpdCB1bnRpbCBhbiByY3Utc2NoZWQgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorICoKKyAqIENvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIHJjdS1zY2hlZAorICogZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLCBpbiBvdGhlciB3b3JkcyBhZnRlciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZworICogcmN1LXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gICBUaGVzZSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9ja19zY2hlZCgpIGFuZAorICogcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCksIGFuZCBtYXkgYmUgbmVzdGVkLiAgTm90ZSB0aGF0IHByZWVtcHRfZGlzYWJsZSgpLAorICogbG9jYWxfaXJxX2Rpc2FibGUoKSwgYW5kIHNvIG9uIG1heSBiZSB1c2VkIGluIHBsYWNlIG9mCisgKiByY3VfcmVhZF9sb2NrX3NjaGVkKCkuCisgKgorICogVGhpcyBtZWFucyB0aGF0IGFsbCBwcmVlbXB0X2Rpc2FibGUgY29kZSBzZXF1ZW5jZXMsIGluY2x1ZGluZyBOTUkgYW5kCisgKiBoYXJkd2FyZS1pbnRlcnJ1cHQgaGFuZGxlcnMsIGluIHByb2dyZXNzIG9uIGVudHJ5IHdpbGwgaGF2ZSBjb21wbGV0ZWQKKyAqIGJlZm9yZSB0aGlzIHByaW1pdGl2ZSByZXR1cm5zLiAgSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdAorICogc29mdGlycSBoYW5kbGVycyB3aWxsIGhhdmUgY29tcGxldGVkLCBzaW5jZSBpbiBzb21lIGtlcm5lbHMsIHRoZXNlCisgKiBoYW5kbGVycyBjYW4gcnVuIGluIHByb2Nlc3MgY29udGV4dCwgYW5kIGNhbiBibG9jay4KKyAqCisgKiBUaGlzIHByaW1pdGl2ZSBwcm92aWRlcyB0aGUgZ3VhcmFudGVlcyBtYWRlIGJ5IHRoZSAobm93IHJlbW92ZWQpCisgKiBzeW5jaHJvbml6ZV9rZXJuZWwoKSBBUEkuICBJbiBjb250cmFzdCwgc3luY2hyb25pemVfcmN1KCkgb25seQorICogZ3VhcmFudGVlcyB0aGF0IHJjdV9yZWFkX2xvY2soKSBzZWN0aW9ucyB3aWxsIGhhdmUgY29tcGxldGVkLgorICogSW4gImNsYXNzaWMgUkNVIiwgdGhlc2UgdHdvIGd1YXJhbnRlZXMgaGFwcGVuIHRvIGJlIG9uZSBhbmQKKyAqIHRoZSBzYW1lLCBidXQgY2FuIGRpZmZlciBpbiByZWFsdGltZSBSQ1UgaW1wbGVtZW50YXRpb25zLgorICovCit2b2lkIHN5bmNocm9uaXplX3NjaGVkKHZvaWQpCit7CisJc3RydWN0IHJjdV9zeW5jaHJvbml6ZSByY3U7CisKKwlpZiAocmN1X2Jsb2NraW5nX2lzX2dwKCkpCisJCXJldHVybjsKKworCWluaXRfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOworCS8qIFdpbGwgd2FrZSBtZSBhZnRlciBSQ1UgZmluaXNoZWQuICovCisJY2FsbF9yY3Vfc2NoZWQoJnJjdS5oZWFkLCB3YWtlbWVfYWZ0ZXJfcmN1KTsKKwkvKiBXYWl0IGZvciBpdC4gKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zY2hlZCk7CisKIC8qKgogICogc3luY2hyb25pemVfcmN1X2JoIC0gd2FpdCB1bnRpbCBhbiByY3VfYmggZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IGIzM2RiNTMuLjIzMzc2OGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtMTgsNyArMTgsNyBAQAogICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDYKICAqCiAgKiBBdXRob3JzOiBQYXVsIEUuIE1jS2VubmV5IDxwYXVsbWNrQHVzLmlibS5jb20+Ci0gKiAgICAgICAgICBKb3NoIFRyaXBsZXR0IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4KKyAqCSAgSm9zaCBUcmlwbGV0dCA8am9zaEBmcmVlZGVza3RvcC5vcmc+CiAgKgogICogU2VlIGFsc286ICBEb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAogICovCkBAIC01MCw3ICs1MCw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4gYW5kICIKLSAgICAgICAgICAgICAgIkpvc2ggVHJpcGxldHQgPGpvc2hAZnJlZWRlc2t0b3Aub3JnPiIpOworCSAgICAgICJKb3NoIFRyaXBsZXR0IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4iKTsKIAogc3RhdGljIGludCBucmVhZGVycyA9IC0xOwkvKiAjIHJlYWRlciB0aHJlYWRzLCBkZWZhdWx0cyB0byAyKm5jcHVzICovCiBzdGF0aWMgaW50IG5mYWtld3JpdGVycyA9IDQ7CS8qICMgZmFrZSB3cml0ZXIgdGhyZWFkcyAqLwpAQCAtMTEwLDggKzExMCw4IEBACiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKHJjdV90b3J0dXJlX2ZyZWVsaXN0KTsKLXN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmUgKnJjdV90b3J0dXJlX2N1cnJlbnQgPSBOVUxMOwotc3RhdGljIGxvbmcgcmN1X3RvcnR1cmVfY3VycmVudF92ZXJzaW9uID0gMDsKK3N0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmUgKnJjdV90b3J0dXJlX2N1cnJlbnQ7CitzdGF0aWMgbG9uZyByY3VfdG9ydHVyZV9jdXJyZW50X3ZlcnNpb247CiBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlIHJjdV90b3J0dXJlc1sxMCAqIFJDVV9UT1JUVVJFX1BJUEVfTEVOXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmN1X3RvcnR1cmVfbG9jayk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUobG9uZyBbUkNVX1RPUlRVUkVfUElQRV9MRU4gKyAxXSwgcmN1X3RvcnR1cmVfY291bnQpID0KQEAgLTEyNCwxMSArMTI0LDExIEBACiBzdGF0aWMgYXRvbWljX3Qgbl9yY3VfdG9ydHVyZV9mcmVlOwogc3RhdGljIGF0b21pY190IG5fcmN1X3RvcnR1cmVfbWJlcnJvcjsKIHN0YXRpYyBhdG9taWNfdCBuX3JjdV90b3J0dXJlX2Vycm9yOwotc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV90aW1lcnMgPSAwOworc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV90aW1lcnM7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCByY3VfdG9ydHVyZV9yZW1vdmVkOwogc3RhdGljIGNwdW1hc2tfdmFyX3Qgc2h1ZmZsZV90bXBfbWFzazsKIAotc3RhdGljIGludCBzdHV0dGVyX3BhdXNlX3Rlc3QgPSAwOworc3RhdGljIGludCBzdHV0dGVyX3BhdXNlX3Rlc3Q7CiAKICNpZiBkZWZpbmVkKE1PRFVMRSkgfHwgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVF9SVU5OQUJMRSkKICNkZWZpbmUgUkNVVE9SVFVSRV9SVU5OQUJMRV9JTklUIDEKQEAgLTI2Nyw3ICsyNjcsOCBAQAogCWludCBpcnFfY2FwYWJsZTsKIAljaGFyICpuYW1lOwogfTsKLXN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzICpjdXJfb3BzID0gTlVMTDsKKworc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHM7CiAKIC8qCiAgKiBEZWZpbml0aW9ucyBmb3IgcmN1IHRvcnR1cmUgdGVzdGluZy4KQEAgLTI4MSwxNCArMjgyLDE3IEBACiAKIHN0YXRpYyB2b2lkIHJjdV9yZWFkX2RlbGF5KHN0cnVjdCByY3VfcmFuZG9tX3N0YXRlICpycnNwKQogewotCWxvbmcgZGVsYXk7Ci0JY29uc3QgbG9uZyBsb25nZGVsYXkgPSAyMDA7CisJY29uc3QgdW5zaWduZWQgbG9uZyBzaG9ydGRlbGF5X3VzID0gMjAwOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZ2RlbGF5X21zID0gNTA7CiAKLQkvKiBXZSB3YW50IHRoZXJlIHRvIGJlIGxvbmctcnVubmluZyByZWFkZXJzLCBidXQgbm90IGFsbCB0aGUgdGltZS4gKi8KKwkvKiBXZSB3YW50IGEgc2hvcnQgZGVsYXkgc29tZXRpbWVzIHRvIG1ha2UgYSByZWFkZXIgZGVsYXkgdGhlIGdyYWNlCisJICogcGVyaW9kLCBhbmQgd2Ugd2FudCBhIGxvbmcgZGVsYXkgb2NjYXNpb25hbGx5IHRvIHRyaWdnZXIKKwkgKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUuICovCiAKLQlkZWxheSA9IHJjdV9yYW5kb20ocnJzcCkgJSAobnJlYWxyZWFkZXJzICogMiAqIGxvbmdkZWxheSk7Ci0JaWYgKCFkZWxheSkKLQkJdWRlbGF5KGxvbmdkZWxheSk7CisJaWYgKCEocmN1X3JhbmRvbShycnNwKSAlIChucmVhbHJlYWRlcnMgKiAyMDAwICogbG9uZ2RlbGF5X21zKSkpCisJCW1kZWxheShsb25nZGVsYXlfbXMpOworCWlmICghKHJjdV9yYW5kb20ocnJzcCkgJSAobnJlYWxyZWFkZXJzICogMiAqIHNob3J0ZGVsYXlfdXMpKSkKKwkJdWRlbGF5KHNob3J0ZGVsYXlfdXMpOwogfQogCiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9yZWFkX3VubG9jayhpbnQgaWR4KSBfX3JlbGVhc2VzKFJDVSkKQEAgLTMzOSw4ICszNDMsOCBAQAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdSwKIAkuY2JfYmFycmllcgk9IHJjdV9iYXJyaWVyLAogCS5zdGF0cwkJPSBOVUxMLAotCS5pcnFfY2FwYWJsZSAJPSAxLAotCS5uYW1lIAkJPSAicmN1IgorCS5pcnFfY2FwYWJsZQk9IDEsCisJLm5hbWUJCT0gInJjdSIKIH07CiAKIHN0YXRpYyB2b2lkIHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgcmN1X3RvcnR1cmUgKnApCkBAIC02MzgsNyArNjQyLDggQEAKIAogCWRvIHsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0JCWlmICgocnAgPSByY3VfdG9ydHVyZV9hbGxvYygpKSA9PSBOVUxMKQorCQlycCA9IHJjdV90b3J0dXJlX2FsbG9jKCk7CisJCWlmIChycCA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCXJwLT5ydG9ydF9waXBlX2NvdW50ID0gMDsKIAkJdWRlbGF5KHJjdV9yYW5kb20oJnJhbmQpICYgMHgzZmYpOwpAQCAtMTExMCw3ICsxMTE1LDcgQEAKIAkJcHJpbnRrKEtFUk5fQUxFUlQgInJjdXRvcnR1cmU6IGludmFsaWQgdG9ydHVyZSB0eXBlOiBcIiVzXCJcbiIsCiAJCSAgICAgICB0b3J0dXJlX3R5cGUpOwogCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKLQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjdXJfb3BzLT5pbml0KQogCQljdXJfb3BzLT5pbml0KCk7IC8qIG5vICJnb3RvIHVud2luZCIgcHJpb3IgdG8gdGhpcyBwb2ludCEhISAqLwpAQCAtMTE2MSw3ICsxMTY2LDcgQEAKIAkJZ290byB1bndpbmQ7CiAJfQogCWZha2V3cml0ZXJfdGFza3MgPSBremFsbG9jKG5mYWtld3JpdGVycyAqIHNpemVvZihmYWtld3JpdGVyX3Rhc2tzWzBdKSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKKwkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoZmFrZXdyaXRlcl90YXNrcyA9PSBOVUxMKSB7CiAJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygib3V0IG9mIG1lbW9yeSIpOwogCQlmaXJzdGVyciA9IC1FTk9NRU07CkBAIC0xMTcwLDcgKzExNzUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBuZmFrZXdyaXRlcnM7IGkrKykgewogCQlWRVJCT1NFX1BSSU5US19TVFJJTkcoIkNyZWF0aW5nIHJjdV90b3J0dXJlX2Zha2V3cml0ZXIgdGFzayIpOwogCQlmYWtld3JpdGVyX3Rhc2tzW2ldID0ga3RocmVhZF9ydW4ocmN1X3RvcnR1cmVfZmFrZXdyaXRlciwgTlVMTCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyY3VfdG9ydHVyZV9mYWtld3JpdGVyIik7CisJCQkJCQkgICJyY3VfdG9ydHVyZV9mYWtld3JpdGVyIik7CiAJCWlmIChJU19FUlIoZmFrZXdyaXRlcl90YXNrc1tpXSkpIHsKIAkJCWZpcnN0ZXJyID0gUFRSX0VSUihmYWtld3JpdGVyX3Rhc2tzW2ldKTsKIAkJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygiRmFpbGVkIHRvIGNyZWF0ZSBmYWtld3JpdGVyIik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCA2YjExYjA3Li41MmIwNmY2IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCURvY3VtZW50YXRpb24vUkNVCisgKglEb2N1bWVudGF0aW9uL1JDVQogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEwNywyNyArMTA3LDIzIEBACiAgKi8KIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyZHAgPSAmcGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKLQlyY3VfcHJlZW1wdF9xcyhjcHUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwliYXJyaWVyKCk7CisJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKKwlyY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CiB9CiAKIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyZHAgPSAmcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJYmFycmllcigpOworCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDE7CiB9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKQEAgLTYwNSw4ICs2MDEsNiBAQAogewogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1cjsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9lbmQ7CiAKIAlpZiAoIWNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKQEAgLTYxNSw2ICs2MDksNyBAQAogCiAJLyogQWR2YW5jZSB0byBhIG5ldyBncmFjZSBwZXJpb2QgYW5kIGluaXRpYWxpemUgc3RhdGUuICovCiAJcnNwLT5ncG51bSsrOworCVdBUk5fT05fT05DRShyc3AtPnNpZ25hbGVkID09IFJDVV9HUF9JTklUKTsKIAlyc3AtPnNpZ25hbGVkID0gUkNVX0dQX0lOSVQ7IC8qIEhvbGQgb2ZmIGZvcmNlX3F1aWVzY2VudF9zdGF0ZS4gKi8KIAlyc3AtPmppZmZpZXNfZm9yY2VfcXMgPSBqaWZmaWVzICsgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUzsKIAlyZWNvcmRfZ3Bfc3RhbGxfY2hlY2tfdGltZShyc3ApOwpAQCAtNjMxLDcgKzYyNiw5IEBACiAKIAkvKiBTcGVjaWFsLWNhc2UgdGhlIGNvbW1vbiBzaW5nbGUtbGV2ZWwgY2FzZS4gKi8KIAlpZiAoTlVNX1JDVV9OT0RFUyA9PSAxKSB7CisJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CisJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOwogCQlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgT0suICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CkBAIC02NDQsNDIgKzY0MSwyOCBAQAogCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCiAJLyoKLQkgKiBTZXQgdGhlIHF1aWVzY2VudC1zdGF0ZS1uZWVkZWQgYml0cyBpbiBhbGwgdGhlIG5vbi1sZWFmIFJDVQotCSAqIG5vZGVzIGZvciBhbGwgY3VycmVudGx5IG9ubGluZSBDUFVzLiAgVGhpcyBvcGVyYXRpb24gcmVsaWVzCi0JICogb24gdGhlIGxheW91dCBvZiB0aGUgaGllcmFyY2h5IHdpdGhpbiB0aGUgcnNwLT5ub2RlW10gYXJyYXkuCi0JICogTm90ZSB0aGF0IG90aGVyIENQVXMgd2lsbCBhY2Nlc3Mgb25seSB0aGUgbGVhdmVzIG9mIHRoZQotCSAqIGhpZXJhcmNoeSwgd2hpY2ggc3RpbGwgaW5kaWNhdGUgdGhhdCBubyBncmFjZSBwZXJpb2QgaXMgaW4KLQkgKiBwcm9ncmVzcy4gIEluIGFkZGl0aW9uLCB3ZSBoYXZlIGV4Y2x1ZGVkIENQVS1ob3RwbHVnIG9wZXJhdGlvbnMuCi0JICoKLQkgKiBXZSB0aGVyZWZvcmUgZG8gbm90IG5lZWQgdG8gaG9sZCBhbnkgbG9ja3MuICBBbnkgcmVxdWlyZWQKLQkgKiBtZW1vcnkgYmFycmllcnMgd2lsbCBiZSBzdXBwbGllZCBieSB0aGUgbG9ja3MgZ3VhcmRpbmcgdGhlCi0JICogbGVhZiByY3Vfbm9kZXMgaW4gdGhlIGhpZXJhcmNoeS4KLQkgKi8KLQotCXJucF9lbmQgPSByc3AtPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOwotCWZvciAocm5wX2N1ciA9ICZyc3AtPm5vZGVbMF07IHJucF9jdXIgPCBybnBfZW5kOyBybnBfY3VyKyspCi0JCXJucF9jdXItPnFzbWFzayA9IHJucF9jdXItPnFzbWFza2luaXQ7Ci0KLQkvKgotCSAqIE5vdyBzZXQgdXAgdGhlIGxlYWYgbm9kZXMuICBIZXJlIHdlIG11c3QgYmUgY2FyZWZ1bC4gIEZpcnN0LAotCSAqIHdlIG5lZWQgdG8gaG9sZCB0aGUgbG9jayBpbiBvcmRlciB0byBleGNsdWRlIG90aGVyIENQVXMsIHdoaWNoCi0JICogbWlnaHQgYmUgY29udGVuZGluZyBmb3IgdGhlIGxlYWYgbm9kZXMnIGxvY2tzLiAgU2Vjb25kLCBhcwotCSAqIHNvb24gYXMgd2UgaW5pdGlhbGl6ZSBhIGdpdmVuIGxlYWYgbm9kZSwgaXRzIENQVXMgbWlnaHQgcnVuCi0JICogdXAgdGhlIHJlc3Qgb2YgdGhlIGhpZXJhcmNoeS4gIFdlIG11c3QgdGhlcmVmb3JlIGFjcXVpcmUgbG9ja3MKLQkgKiBmb3IgZWFjaCBub2RlIHRoYXQgd2UgdG91Y2ggZHVyaW5nIHRoaXMgc3RhZ2UuICAoQnV0IHdlIHN0aWxsCi0JICogYXJlIGV4Y2x1ZGluZyBDUFUtaG90cGx1ZyBvcGVyYXRpb25zLikKKwkgKiBTZXQgdGhlIHF1aWVzY2VudC1zdGF0ZS1uZWVkZWQgYml0cyBpbiBhbGwgdGhlIHJjdV9ub2RlCisJICogc3RydWN0dXJlcyBmb3IgYWxsIGN1cnJlbnRseSBvbmxpbmUgQ1BVcyBpbiBicmVhZHRoLWZpcnN0CisJICogb3JkZXIsIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3QgcmN1X25vZGUgc3RydWN0dXJlLiAgVGhpcworCSAqIG9wZXJhdGlvbiByZWxpZXMgb24gdGhlIGxheW91dCBvZiB0aGUgaGllcmFyY2h5IHdpdGhpbiB0aGUKKwkgKiByc3AtPm5vZGVbXSBhcnJheS4gIE5vdGUgdGhhdCBvdGhlciBDUFVzIHdpbGwgYWNjZXNzIG9ubHkKKwkgKiB0aGUgbGVhdmVzIG9mIHRoZSBoaWVyYXJjaHksIHdoaWNoIHN0aWxsIGluZGljYXRlIHRoYXQgbm8KKwkgKiBncmFjZSBwZXJpb2QgaXMgaW4gcHJvZ3Jlc3MsIGF0IGxlYXN0IHVudGlsIHRoZSBjb3JyZXNwb25kaW5nCisJICogbGVhZiBub2RlIGhhcyBiZWVuIGluaXRpYWxpemVkLiAgSW4gYWRkaXRpb24sIHdlIGhhdmUgZXhjbHVkZWQKKwkgKiBDUFUtaG90cGx1ZyBvcGVyYXRpb25zLgogCSAqCiAJICogTm90ZSB0aGF0IHRoZSBncmFjZSBwZXJpb2QgY2Fubm90IGNvbXBsZXRlIHVudGlsIHdlIGZpbmlzaAogCSAqIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBhcyB0aGVyZSB3aWxsIGJlIGF0IGxlYXN0IG9uZQogCSAqIHFzbWFzayBiaXQgc2V0IGluIHRoZSByb290IG5vZGUgdW50aWwgdGhhdCB0aW1lLCBuYW1lbHkgdGhlCi0JICogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDUFUuCisJICogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDUFUsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGhhdmUKKwkgKiBpcnFzIGRpc2FibGVkLgogCSAqLwotCXJucF9lbmQgPSAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOwotCXJucF9jdXIgPSByc3AtPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOwotCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7Ci0JCXNwaW5fbG9jaygmcm5wX2N1ci0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KLQkJcm5wX2N1ci0+cXNtYXNrID0gcm5wX2N1ci0+cXNtYXNraW5pdDsKLQkJc3Bpbl91bmxvY2soJnJucF9jdXItPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJZm9yIChybnAgPSAmcnNwLT5ub2RlWzBdOyBybnAgPCAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOyBybnArKykgeworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhybnApOworCQlybnAtPnFzbWFzayA9IHJucC0+cXNtYXNraW5pdDsKKwkJcm5wLT5ncG51bSA9IHJzcC0+Z3BudW07CisJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJfQogCiAJcnNwLT5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVDsgLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlIG5vdyBPSy4gKi8KQEAgLTcyMiw2ICs3MDUsNyBAQAogc3RhdGljIHZvaWQgY3B1X3F1aWV0X21za19maW5pc2goc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCV9fcmVsZWFzZXMocm5wLT5sb2NrKQogeworCVdBUk5fT05fT05DRShyc3AtPmNvbXBsZXRlZCA9PSByc3AtPmdwbnVtKTsKIAlyc3AtPmNvbXBsZXRlZCA9IHJzcC0+Z3BudW07CiAJcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CiAJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgcm9vdCBub2RlJ3Mgcm5wLT5sb2NrLiAqLwpAQCAtNzM5LDYgKzcyMyw4IEBACiAJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIAlfX3JlbGVhc2VzKHJucC0+bG9jaykKIHsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucF9jOworCiAJLyogV2FsayB1cCB0aGUgcmN1X25vZGUgaGllcmFyY2h5LiAqLwogCWZvciAoOzspIHsKIAkJaWYgKCEocm5wLT5xc21hc2sgJiBtYXNrKSkgewpAQCAtNzYyLDggKzc0OCwxMCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJucF9jID0gcm5wOwogCQlybnAgPSBybnAtPnBhcmVudDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlXQVJOX09OX09OQ0Uocm5wX2MtPnFzbWFzayk7CiAJfQogCiAJLyoKQEAgLTc3NiwxMCArNzY0LDEwIEBACiAKIC8qCiAgKiBSZWNvcmQgYSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVLCB3aGljaCBtdXN0IGVpdGhlciBiZQotICogdGhlIGN1cnJlbnQgQ1BVIG9yIGFuIG9mZmxpbmUgQ1BVLiAgVGhlIGxhc3Rjb21wIGFyZ3VtZW50IGlzIHVzZWQgdG8KLSAqIG1ha2Ugc3VyZSB3ZSBhcmUgc3RpbGwgaW4gdGhlIGdyYWNlIHBlcmlvZCBvZiBpbnRlcmVzdC4gIFdlIGRvbid0IHdhbnQKLSAqIHRvIGVuZCB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgYmFzZWQgb24gcXVpZXNjZW50IHN0YXRlcyBkZXRlY3RlZCBpbgotICogYW4gZWFybGllciBncmFjZSBwZXJpb2QhCisgKiB0aGUgY3VycmVudCBDUFUuICBUaGUgbGFzdGNvbXAgYXJndW1lbnQgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgYXJlCisgKiBzdGlsbCBpbiB0aGUgZ3JhY2UgcGVyaW9kIG9mIGludGVyZXN0LiAgV2UgZG9uJ3Qgd2FudCB0byBlbmQgdGhlIGN1cnJlbnQKKyAqIGdyYWNlIHBlcmlvZCBiYXNlZCBvbiBxdWllc2NlbnQgc3RhdGVzIGRldGVjdGVkIGluIGFuIGVhcmxpZXIgZ3JhY2UKKyAqIHBlcmlvZCEKICAqLwogc3RhdGljIHZvaWQKIGNwdV9xdWlldChpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwLCBsb25nIGxhc3Rjb21wKQpAQCAtODE0LDcgKzgwMiw2IEBACiAJCSAqIFRoaXMgR1AgY2FuJ3QgZW5kIHVudGlsIGNwdSBjaGVja3MgaW4sIHNvIGFsbCBvZiBvdXIKIAkJICogY2FsbGJhY2tzIGNhbiBiZSBwcm9jZXNzZWQgZHVyaW5nIHRoZSBuZXh0IEdQLgogCQkgKi8KLQkJcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAkJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwogCiAJCWNwdV9xdWlldF9tc2sobWFzaywgcnNwLCBybnAsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrICovCkBAIC04NzIsNyArODU5LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAogCS8qIFJlbW92ZSB0aGUgb3V0Z29pbmcgQ1BVIGZyb20gdGhlIG1hc2tzIGluIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkuICovCi0Jcm5wID0gcmRwLT5teW5vZGU7CisJcm5wID0gcmRwLT5teW5vZGU7CS8qIHRoaXMgaXMgdGhlIG91dGdvaW5nIENQVSdzIHJucC4gKi8KIAltYXNrID0gcmRwLT5ncnBtYXNrOwkvKiBybnAtPmdycGxvIGlzIGNvbnN0YW50LiAqLwogCWRvIHsKIAkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwpAQCAtODgxLDcgKzg2OCw3IEBACiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQotCQlyY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wKTsKKwkJcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhyc3AsIHJucCwgcmRwKTsKIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKQEAgLTg5MCw5ICs4NzcsNiBAQAogCiAJc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCi0JLyogQmVpbmcgb2ZmbGluZSBpcyBhIHF1aWVzY2VudCBzdGF0ZSwgc28gZ28gcmVjb3JkIGl0LiAqLwotCWNwdV9xdWlldChjcHUsIHJzcCwgcmRwLCBsYXN0Y29tcCk7Ci0KIAkvKgogCSAqIE1vdmUgY2FsbGJhY2tzIGZyb20gdGhlIG91dGdvaW5nIENQVSB0byB0aGUgcnVubmluZyBDUFUuCiAJICogTm90ZSB0aGF0IHRoZSBvdXRnb2luZyBDUFUgaXMgbm93IHF1aXNjZW50LCBzbyBpdCBpcyBub3cKQEAgLTE0NTcsMjAgKzE0NDEsNyBAQAogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCAmJiAhKHJucC0+cXNtYXNraW5pdCAmIG1hc2spKTsKIAotCXNwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KLQotCS8qCi0JICogQSBuZXcgZ3JhY2UgcGVyaW9kIG1pZ2h0IHN0YXJ0IGhlcmUuICBJZiBzbywgd2Ugd2lsbCBiZSBwYXJ0IG9mCi0JICogaXQsIGFuZCBpdHMgZ3BudW0gd2lsbCBiZSBncmVhdGVyIHRoYW4gb3Vycywgc28gd2Ugd2lsbAotCSAqIHBhcnRpY2lwYXRlLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSBmb3IgdGhlIGdwbnVtIHRvIGhhdmUgYmVlbgotCSAqIGluY3JlbWVudGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQsIGFuZCB0aGUgYml0bWFza3MKLQkgKiB0byBub3QgYmUgZmlsbGVkIG91dCB1bnRpbCBub3csIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBhbHNvCi0JICogcGFydGljaXBhdGUgZHVlIHRvIG91ciBncG51bSBiZWluZyBiZWhpbmQuCi0JICovCi0KLQkvKiBTaW5jZSBpdCBpcyBjb21pbmcgb25saW5lLCB0aGUgQ1BVIGlzIGluIGEgcXVpZXNjZW50IHN0YXRlLiAqLwotCWNwdV9xdWlldChjcHUsIHJzcCwgcmRwLCBsYXN0Y29tcCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2NwdShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuaCBiL2tlcm5lbC9yY3V0cmVlLmgKaW5kZXggYmY4YTZmOS4uOGU4Mjg3YSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuaAorKysgYi9rZXJuZWwvcmN1dHJlZS5oCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKm54dGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkICoqbnh0dGFpbFtSQ1VfTkVYVF9TSVpFXTsKLQlsb25nCQlxbGVuOyAJIAkvKiAjIG9mIHF1ZXVlZCBjYWxsYmFja3MgKi8KKwlsb25nCQlxbGVuOwkJLyogIyBvZiBxdWV1ZWQgY2FsbGJhY2tzICovCiAJbG9uZwkJYmxpbWl0OwkJLyogVXBwZXIgbGltaXQgb24gYSBwcm9jZXNzZWQgYmF0Y2ggKi8KIAogI2lmZGVmIENPTkZJR19OT19IWgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCA0Nzc4OTM2Li4xY2VlMDRmIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtNjQsMjIgKzY0LDMxIEBACiAgKiBub3QgaW4gYSBxdWllc2NlbnQgc3RhdGUuICBUaGVyZSBtaWdodCBiZSBhbnkgbnVtYmVyIG9mIHRhc2tzIGJsb2NrZWQKICAqIHdoaWxlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcXNfcmVjb3JkKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9xcyhpbnQgY3B1KQogewogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKKwliYXJyaWVyKCk7CisJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKIH0KIAogLyoKLSAqIFdlIGhhdmUgZW50ZXJlZCB0aGUgc2NoZWR1bGVyIG9yIGFyZSBiZXR3ZWVuIHNvZnRpcnFzIGluIGtzb2Z0aXJxZC4KLSAqIElmIHdlIGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHdlIG5lZWQgdG8gcmVmbGVjdAotICogdGhhdCBpbiB0aGUgc3RhdGUgb2YgdGhlIHJjdV9ub2RlIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgQ1BVLgotICogQ2FsbGVyIG11c3QgZGlzYWJsZSBoYXJkaXJxcy4KKyAqIFdlIGhhdmUgZW50ZXJlZCB0aGUgc2NoZWR1bGVyLCBhbmQgdGhlIGN1cnJlbnQgdGFzayBtaWdodCBzb29uIGJlCisgKiBjb250ZXh0LXN3aXRjaGVkIGF3YXkgZnJvbS4gIElmIHRoaXMgdGFzayBpcyBpbiBhbiBSQ1UgcmVhZC1zaWRlCisgKiBjcml0aWNhbCBzZWN0aW9uLCB3ZSB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHJlbHkgb24gdGhlIENQVSB0bworICogcmVjb3JkIHRoYXQgZmFjdCwgc28gd2UgZW5xdWV1ZSB0aGUgdGFzayBvbiB0aGUgYXBwcm9wcmlhdGUgZW50cnkKKyAqIG9mIHRoZSBibG9ja2VkX3Rhc2tzW10gYXJyYXkuICBUaGUgdGFzayB3aWxsIGRlcXVldWUgaXRzZWxmIHdoZW4KKyAqIGl0IGV4aXRzIHRoZSBvdXRlcm1vc3QgZW5jbG9zaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqIFRoZXJlZm9yZSwgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIGNhbm5vdCBiZSBwZXJtaXR0ZWQgdG8gY29tcGxldGUKKyAqIHVudGlsIHRoZSBibG9ja2VkX3Rhc2tzW10gZW50cnkgaW5kZXhlZCBieSB0aGUgbG93LW9yZGVyIGJpdCBvZgorICogcm5wLT5ncG51bSBlbXB0aWVzLgorICoKKyAqIENhbGxlciBtdXN0IGRpc2FibGUgcHJlZW1wdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcXMoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBjdXJyZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBoYXNlOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwpAQCAtOTAsNyArOTksNyBAQAogCQkvKiBQb3NzaWJseSBibG9ja2luZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICovCiAJCXJkcCA9IHJjdV9wcmVlbXB0X3N0YXRlLnJkYVtjcHVdOwogCQlybnAgPSByZHAtPm15bm9kZTsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19CTE9DS0VEOwogCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wOwogCkBAIC0xMDMsMTEgKzExMiwxNSBAQAogCQkgKiBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kKSwgdGhlbiBhcyBsb25nCiAJCSAqIGFzIHRoYXQgdGFzayByZW1haW5zIHF1ZXVlZCwgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCiAJCSAqIGNhbm5vdCBlbmQuCisJCSAqCisJCSAqIEJ1dCBmaXJzdCwgbm90ZSB0aGF0IHRoZSBjdXJyZW50IENQVSBtdXN0IHN0aWxsIGJlCisJCSAqIG9uIGxpbmUhCiAJCSAqLwotCQlwaGFzZSA9ICEocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spIF4gKHJucC0+Z3BudW0gJiAweDEpOworCQlXQVJOX09OX09OQ0UoKHJkcC0+Z3JwbWFzayAmIHJucC0+cXNtYXNraW5pdCkgPT0gMCk7CisJCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmdC0+cmN1X25vZGVfZW50cnkpKTsKKwkJcGhhc2UgPSAocm5wLT5ncG51bSArICEocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spKSAmIDB4MTsKIAkJbGlzdF9hZGQoJnQtPnJjdV9ub2RlX2VudHJ5LCAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXSk7Ci0JCXNtcF9tYigpOyAgLyogRW5zdXJlIGxhdGVyIGN0eHQgc3d0Y2ggc2VlbiBhZnRlciBhYm92ZS4gKi8KLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIAogCS8qCkBAIC0xMTksOSArMTMyLDEwIEBACiAJICogZ3JhY2UgcGVyaW9kLCB0aGVuIHRoZSBmYWN0IHRoYXQgdGhlIHRhc2sgaGFzIGJlZW4gZW5xdWV1ZWQKIAkgKiBtZWFucyB0aGF0IHdlIGNvbnRpbnVlIHRvIGJsb2NrIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZC4KIAkgKi8KLQlyY3VfcHJlZW1wdF9xc19yZWNvcmQoY3B1KTsKLQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmPSB+KFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTIHwKLQkJCQkJUkNVX1JFQURfVU5MT0NLX0dPVF9RUyk7CisJcmN1X3ByZWVtcHRfcXMoY3B1KTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0gflJDVV9SRUFEX1VOTE9DS19ORUVEX1FTOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogLyoKQEAgLTE1Nyw3ICsxNzEsNyBAQAogCXNwZWNpYWwgPSB0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbDsKIAlpZiAoc3BlY2lhbCAmIFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTKSB7CiAJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9IH5SQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUzsKLQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgfD0gUkNVX1JFQURfVU5MT0NLX0dPVF9RUzsKKwkJcmN1X3ByZWVtcHRfcXMoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl9CiAKIAkvKiBIYXJkd2FyZSBJUlEgaGFuZGxlcnMgY2Fubm90IGJsb2NrLiAqLwpAQCAtMTc3LDEwICsxOTEsMTAgQEAKIAkJICovCiAJCWZvciAoOzspIHsKIAkJCXJucCA9IHQtPnJjdV9ibG9ja2VkX25vZGU7Ci0JCQlzcGluX2xvY2soJnJucC0+bG9jayk7CisJCQlzcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCQlpZiAocm5wID09IHQtPnJjdV9ibG9ja2VkX25vZGUpCiAJCQkJYnJlYWs7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KIAkJZW1wdHkgPSBsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOwogCQlsaXN0X2RlbF9pbml0KCZ0LT5yY3Vfbm9kZV9lbnRyeSk7CkBAIC0xOTQsOSArMjA4LDggQEAKIAkJICovCiAJCWlmICghZW1wdHkgJiYgcm5wLT5xc21hc2sgPT0gMCAmJgogCQkgICAgbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKSkgewotCQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0KLQkJCQl+KFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTIHwKLQkJCQkgIFJDVV9SRUFEX1VOTE9DS19HT1RfUVMpOworCQkJc3RydWN0IHJjdV9ub2RlICpybnBfcDsKKwogCQkJaWYgKHJucC0+cGFyZW50ID09IE5VTEwpIHsKIAkJCQkvKiBPbmx5IG9uZSByY3Vfbm9kZSBpbiB0aGUgdHJlZS4gKi8KIAkJCQljcHVfcXVpZXRfbXNrX2ZpbmlzaCgmcmN1X3ByZWVtcHRfc3RhdGUsIGZsYWdzKTsKQEAgLTIwNSw5ICsyMTgsMTAgQEAKIAkJCS8qIFJlcG9ydCB1cCB0aGUgcmVzdCBvZiB0aGUgaGllcmFyY2h5LiAqLwogCQkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQkJcm5wID0gcm5wLT5wYXJlbnQ7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCQljcHVfcXVpZXRfbXNrKG1hc2ssICZyY3VfcHJlZW1wdF9zdGF0ZSwgcm5wLCBmbGFncyk7CisJCQlybnBfcCA9IHJucC0+cGFyZW50OworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9wLT5sb2NrLCBmbGFncyk7CisJCQlXQVJOX09OX09OQ0Uocm5wLT5xc21hc2spOworCQkJY3B1X3F1aWV0X21zayhtYXNrLCAmcmN1X3ByZWVtcHRfc3RhdGUsIHJucF9wLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CkBAIC0yNTksNiArMjczLDE5IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCiAKIC8qCisgKiBDaGVjayB0aGF0IHRoZSBsaXN0IG9mIGJsb2NrZWQgdGFza3MgZm9yIHRoZSBuZXdseSBjb21wbGV0ZWQgZ3JhY2UKKyAqIHBlcmlvZCBpcyBpbiBmYWN0IGVtcHR5LiAgSXQgaXMgYSBzZXJpb3VzIGJ1ZyB0byBjb21wbGV0ZSBhIGdyYWNlCisgKiBwZXJpb2QgdGhhdCBzdGlsbCBoYXMgUkNVIHJlYWRlcnMgYmxvY2tlZCEgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZQorICogaW52b2tlZCAtYmVmb3JlLSB1cGRhdGluZyB0aGlzIHJucCdzIC0+Z3BudW0sIGFuZCB0aGUgcm5wJ3MgLT5sb2NrCisgKiBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSkpOworCVdBUk5fT05fT05DRShybnAtPnFzbWFzayk7Cit9CisKKy8qCiAgKiBDaGVjayBmb3IgcHJlZW1wdGVkIFJDVSByZWFkZXJzIGZvciB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KICAqIElmIHRoZSBjYWxsZXIgbmVlZHMgYSByZWxpYWJsZSBhbnN3ZXIsIGl0IG11c3QgaG9sZCB0aGUgcmN1X25vZGUncwogICogPmxvY2suCkBAIC0yODAsNyArMzA3LDggQEAKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGlycXMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wKQorCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCWludCBpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwpAQCAtMjkyLDYgKzMyMCw5IEBACiAJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKIAkJcmV0dXJuOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCiAJfQorCVdBUk5fT05fT05DRShybnAgIT0gcmRwLT5teW5vZGUgJiYKKwkJICAgICAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1swXSkgfHwKKwkJICAgICAgIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1sxXSkpKTsKIAogCS8qCiAJICogTW92ZSB0YXNrcyB1cCB0byByb290IHJjdV9ub2RlLiAgUmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZQpAQCAtMzM1LDIwICszNjYsMTIgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBjdXJyZW50OwogCiAJaWYgKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA9PSAwKSB7Ci0JCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9Ci0JCQl+KFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTIHwgUkNVX1JFQURfVU5MT0NLX0dPVF9RUyk7Ci0JCXJjdV9wcmVlbXB0X3FzX3JlY29yZChjcHUpOworCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmPSB+UkNVX1JFQURfVU5MT0NLX05FRURfUVM7CisJCXJjdV9wcmVlbXB0X3FzKGNwdSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5xc19wZW5kaW5nKSB7Ci0JCWlmICh0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmIFJDVV9SRUFEX1VOTE9DS19HT1RfUVMpIHsKLQkJCXJjdV9wcmVlbXB0X3FzX3JlY29yZChjcHUpOwotCQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0gflJDVV9SRUFEX1VOTE9DS19HT1RfUVM7Ci0JCX0gZWxzZSBpZiAoISh0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmCi0JCQkgICAgIFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTKSkgewotCQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgfD0gUkNVX1JFQURfVU5MT0NLX05FRURfUVM7Ci0JCX0KLQl9CisJaWYgKHBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5xc19wZW5kaW5nKQorCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCB8PSBSQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUzsKIH0KIAogLyoKQEAgLTQzNCw3ICs0NTcsNyBAQAogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCiAgKiBDUFVzIGJlaW5nIGluIHF1aWVzY2VudCBzdGF0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3FzKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCiB7CiB9CiAKQEAgLTQ1MSw2ICs0NzQsMTYgQEAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIAogLyoKKyAqIEJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGFibGUgUkNVLCB0aGVyZSBjYW4gYmUgbm8gcmVhZGVycyBibG9ja2VkLAorICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgYmxvY2tlZCB0YXNrcy4gIFNvIGNoZWNrIG9ubHkgZm9yCisgKiBib2d1cyBxc21hc2sgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCVdBUk5fT05fT05DRShybnAtPnFzbWFzayk7Cit9CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKICAqIFJDVSByZWFkZXJzLgogICovCkBAIC00NjYsNyArNDk5LDggQEAKICAqIHRhc2tzIHRoYXQgd2VyZSBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCkKKwkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggMGVhMWJmZi4uYzg5ZjVlOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQYXBlcnM6ICBodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL1JDVQogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlEb2N1bWVudGF0aW9uL1JDVQorICoJCURvY3VtZW50YXRpb24vUkNVCiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggNzhiMDg3Mi4uZmIxMWE1OCAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTIyMywxMyArMjIzLDEzIEBACiAKIEVYUE9SVF9TWU1CT0wocmVsZWFzZV9yZXNvdXJjZSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykgJiYgIWRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZKQorI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWSkKIC8qCiAgKiBGaW5kcyB0aGUgbG93ZXN0IG1lbW9yeSByZW9zdXJjZSBleGlzdHMgd2l0aGluIFtyZXMtPnN0YXJ0LnJlcy0+ZW5kKQotICogdGhlIGNhbGxlciBtdXN0IHNwZWNpZnkgcmVzLT5zdGFydCwgcmVzLT5lbmQsIHJlcy0+ZmxhZ3MuCisgKiB0aGUgY2FsbGVyIG11c3Qgc3BlY2lmeSByZXMtPnN0YXJ0LCByZXMtPmVuZCwgcmVzLT5mbGFncyBhbmQgIm5hbWUiLgogICogSWYgZm91bmQsIHJldHVybnMgMCwgcmVzIGlzIG92ZXJ3cml0dGVuLCBpZiBub3QgZm91bmQsIHJldHVybnMgLTEuCiAgKi8KLXN0YXRpYyBpbnQgZmluZF9uZXh0X3N5c3RlbV9yYW0oc3RydWN0IHJlc291cmNlICpyZXMpCitzdGF0aWMgaW50IGZpbmRfbmV4dF9zeXN0ZW1fcmFtKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBjaGFyICpuYW1lKQogewogCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOwogCXN0cnVjdCByZXNvdXJjZSAqcDsKQEAgLTI0NSw2ICsyNDUsOCBAQAogCQkvKiBzeXN0ZW0gcmFtIGlzIGp1c3QgbWFya2VkIGFzIElPUkVTT1VSQ0VfTUVNICovCiAJCWlmIChwLT5mbGFncyAhPSByZXMtPmZsYWdzKQogCQkJY29udGludWU7CisJCWlmIChuYW1lICYmIHN0cmNtcChwLT5uYW1lLCBuYW1lKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAocC0+c3RhcnQgPiBlbmQpIHsKIAkJCXAgPSBOVUxMOwogCQkJYnJlYWs7CkBAIC0yNjIsMTkgKzI2NCwyNiBAQAogCQlyZXMtPmVuZCA9IHAtPmVuZDsKIAlyZXR1cm4gMDsKIH0KLWludAotd2Fsa19tZW1vcnlfcmVzb3VyY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZywKLQkJCWludCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKikpCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGNhbGxiYWNrIGFnYWluc3QgYWxsIG1lbW9yeSByYW5nZSBvZiAiU3lzdGVtIFJBTSIKKyAqIHdoaWNoIGFyZSBtYXJrZWQgYXMgSU9SRVNPVVJDRV9NRU0gYW5kIElPUkVTT1VDRV9CVVNZLgorICogTm93LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZm9yICJTeXN0ZW0gUkFNIi4KKyAqLworaW50IHdhbGtfc3lzdGVtX3JhbV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJdm9pZCAqYXJnLCBpbnQgKCpmdW5jKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB2b2lkICopKQogewogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGxlbjsKIAl1NjQgb3JpZ19lbmQ7CiAJaW50IHJldCA9IC0xOworCiAJcmVzLnN0YXJ0ID0gKHU2NCkgc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJcmVzLmVuZCA9ICgodTY0KShzdGFydF9wZm4gKyBucl9wYWdlcykgPDwgUEFHRV9TSElGVCkgLSAxOwogCXJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwogCW9yaWdfZW5kID0gcmVzLmVuZDsKLQl3aGlsZSAoKHJlcy5zdGFydCA8IHJlcy5lbmQpICYmIChmaW5kX25leHRfc3lzdGVtX3JhbSgmcmVzKSA+PSAwKSkgeworCXdoaWxlICgocmVzLnN0YXJ0IDwgcmVzLmVuZCkgJiYKKwkJKGZpbmRfbmV4dF9zeXN0ZW1fcmFtKCZyZXMsICJTeXN0ZW0gUkFNIikgPj0gMCkpIHsKIAkJcGZuID0gKHVuc2lnbmVkIGxvbmcpKHJlcy5zdGFydCA+PiBQQUdFX1NISUZUKTsKIAkJbGVuID0gKHVuc2lnbmVkIGxvbmcpKChyZXMuZW5kICsgMSAtIHJlcy5zdGFydCkgPj4gUEFHRV9TSElGVCk7CiAJCXJldCA9ICgqZnVuYykocGZuLCBsZW4sIGFyZyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGZhZjRkNDYuLjJmNzZlMDZiIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CkBAIC02ODEsMTUgKzY4MSw5IEBACiAgKiBUaGlzIGludGVyZmFjZSBhbGxvd3MgcHJpbnRrIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBydW5xdWV1ZSBsb2NrCiAgKiBoZWxkIGFuZCBrbm93IHdoZXRoZXIgb3Igbm90IGl0IGlzIE9LIHRvIHdha2UgdXAgdGhlIGtsb2dkLgogICovCi1pbnQgcnVucXVldWVfaXNfbG9ja2VkKHZvaWQpCitpbnQgcnVucXVldWVfaXNfbG9ja2VkKGludCBjcHUpCiB7Ci0JaW50IGNwdSA9IGdldF9jcHUoKTsKLQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JaW50IHJldDsKLQotCXJldCA9IHNwaW5faXNfbG9ja2VkKCZycS0+bG9jayk7Ci0JcHV0X2NwdSgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHNwaW5faXNfbG9ja2VkKCZjcHVfcnEoY3B1KS0+bG9jayk7CiB9CiAKIC8qCkBAIC0yMDU5LDcgKzIwNTMsNyBAQAogCQlpZiAodGFza19ob3QocCwgb2xkX3JxLT5jbG9jaywgTlVMTCkpCiAJCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZDJfbWlncmF0aW9ucyk7CiAjZW5kaWYKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUywKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TLAogCQkJCSAgICAgMSwgMSwgTlVMTCwgMCk7CiAJfQogCXAtPnNlLnZydW50aW1lIC09IG9sZF9jZnNycS0+bWluX3ZydW50aW1lIC0KQEAgLTI3MjQsNyArMjcxOCw3IEBACiAJICovCiAJcHJldl9zdGF0ZSA9IHByZXYtPnN0YXRlOwogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKLQlwZXJmX2NvdW50ZXJfdGFza19zY2hlZF9pbihjdXJyZW50LCBjcHVfb2YocnEpKTsKKwlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VycmVudCwgY3B1X29mKHJxKSk7CiAJZmluaXNoX2xvY2tfc3dpdGNoKHJxLCBwcmV2KTsKIAogCWZpcmVfc2NoZWRfaW5fcHJlZW1wdF9ub3RpZmllcnMoY3VycmVudCk7CkBAIC0yOTEwLDYgKzI5MDQsMTkgQEAKIAlyZXR1cm4gc3VtOwogfQogCit1bnNpZ25lZCBsb25nIG5yX2lvd2FpdF9jcHUodm9pZCkKK3sKKwlzdHJ1Y3QgcnEgKnRoaXMgPSB0aGlzX3JxKCk7CisJcmV0dXJuIGF0b21pY19yZWFkKCZ0aGlzLT5ucl9pb3dhaXQpOworfQorCit1bnNpZ25lZCBsb25nIHRoaXNfY3B1X2xvYWQodm9pZCkKK3sKKwlzdHJ1Y3QgcnEgKnRoaXMgPSB0aGlzX3JxKCk7CisJcmV0dXJuIHRoaXMtPmNwdV9sb2FkWzBdOworfQorCisKIC8qIFZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGZvciBjYWxjX2xvYWQgKi8KIHN0YXRpYyBhdG9taWNfbG9uZ190IGNhbGNfbG9hZF90YXNrczsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfbG9hZF91cGRhdGU7CkBAIC01MDg1LDE3ICs1MDkyLDE2IEBACiAgKi8KIHZvaWQgYWNjb3VudF9wcm9jZXNzX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgdXNlcl90aWNrKQogewotCWNwdXRpbWVfdCBvbmVfamlmZnkgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7Ci0JY3B1dGltZV90IG9uZV9qaWZmeV9zY2FsZWQgPSBjcHV0aW1lX3RvX3NjYWxlZChvbmVfamlmZnkpOworCWNwdXRpbWVfdCBvbmVfamlmZnlfc2NhbGVkID0gY3B1dGltZV90b19zY2FsZWQoY3B1dGltZV9vbmVfamlmZnkpOwogCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CiAKIAlpZiAodXNlcl90aWNrKQotCQlhY2NvdW50X3VzZXJfdGltZShwLCBvbmVfamlmZnksIG9uZV9qaWZmeV9zY2FsZWQpOworCQlhY2NvdW50X3VzZXJfdGltZShwLCBjcHV0aW1lX29uZV9qaWZmeSwgb25lX2ppZmZ5X3NjYWxlZCk7CiAJZWxzZSBpZiAoKHAgIT0gcnEtPmlkbGUpIHx8IChpcnFfY291bnQoKSAhPSBIQVJESVJRX09GRlNFVCkpCi0JCWFjY291bnRfc3lzdGVtX3RpbWUocCwgSEFSRElSUV9PRkZTRVQsIG9uZV9qaWZmeSwKKwkJYWNjb3VudF9zeXN0ZW1fdGltZShwLCBIQVJESVJRX09GRlNFVCwgY3B1dGltZV9vbmVfamlmZnksCiAJCQkJICAgIG9uZV9qaWZmeV9zY2FsZWQpOwogCWVsc2UKLQkJYWNjb3VudF9pZGxlX3RpbWUob25lX2ppZmZ5KTsKKwkJYWNjb3VudF9pZGxlX3RpbWUoY3B1dGltZV9vbmVfamlmZnkpOwogfQogCiAvKgpAQCAtNTE5OSw3ICs1MjA1LDcgQEAKIAljdXJyLT5zY2hlZF9jbGFzcy0+dGFza190aWNrKHJxLCBjdXJyLCAwKTsKIAlzcGluX3VubG9jaygmcnEtPmxvY2spOwogCi0JcGVyZl9jb3VudGVyX3Rhc2tfdGljayhjdXJyLCBjcHUpOworCXBlcmZfZXZlbnRfdGFza190aWNrKGN1cnIsIGNwdSk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJcnEtPmlkbGVfYXRfdGljayA9IGlkbGVfY3B1KGNwdSk7CkBAIC01NDE1LDcgKzU0MjEsNyBAQAogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CiAJCXNjaGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOwotCQlwZXJmX2NvdW50ZXJfdGFza19zY2hlZF9vdXQocHJldiwgbmV4dCwgY3B1KTsKKwkJcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChwcmV2LCBuZXh0LCBjcHUpOwogCiAJCXJxLT5ucl9zd2l0Y2hlcysrOwogCQlycS0+Y3VyciA9IG5leHQ7CkBAIC02ODI1LDIzICs2ODMxLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQkvKgotCSAqIFRpbWUgc2xpY2UgaXMgMCBmb3IgU0NIRURfRklGTyB0YXNrcyBhbmQgZm9yIFNDSEVEX09USEVSCi0JICogdGFza3MgdGhhdCBhcmUgb24gYW4gb3RoZXJ3aXNlIGlkbGUgcnVucXVldWU6Ci0JICovCi0JdGltZV9zbGljZSA9IDA7Ci0JaWYgKHAtPnBvbGljeSA9PSBTQ0hFRF9SUikgewotCQl0aW1lX3NsaWNlID0gREVGX1RJTUVTTElDRTsKLQl9IGVsc2UgaWYgKHAtPnBvbGljeSAhPSBTQ0hFRF9GSUZPKSB7Ci0JCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzdHJ1Y3QgcnEgKnJxOworCXRpbWVfc2xpY2UgPSBwLT5zY2hlZF9jbGFzcy0+Z2V0X3JyX2ludGVydmFsKHApOwogCi0JCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7Ci0JCWlmIChycS0+Y2ZzLmxvYWQud2VpZ2h0KQotCQkJdGltZV9zbGljZSA9IE5TX1RPX0pJRkZJRVMoc2NoZWRfc2xpY2UoJnJxLT5jZnMsIHNlKSk7Ci0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwotCX0KIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJamlmZmllc190b190aW1lc3BlYyh0aW1lX3NsaWNlLCAmdCk7CiAJcmV0dmFsID0gY29weV90b191c2VyKGludGVydmFsLCAmdCwgc2l6ZW9mKHQpKSA/IC1FRkFVTFQgOiAwOwpAQCAtNzY5Miw3ICs3NjgzLDcgQEAKIC8qCiAgKiBSZWdpc3RlciBhdCBoaWdoIHByaW9yaXR5IHNvIHRoYXQgdGFzayBtaWdyYXRpb24gKG1pZ3JhdGVfYWxsX3Rhc2tzKQogICogaGFwcGVucyBiZWZvcmUgZXZlcnl0aGluZyBlbHNlLiAgVGhpcyBoYXMgdG8gYmUgbG93ZXIgcHJpb3JpdHkgdGhhbgotICogdGhlIG5vdGlmaWVyIGluIHRoZSBwZXJmX2NvdW50ZXIgc3Vic3lzdGVtLCB0aG91Z2guCisgKiB0aGUgbm90aWZpZXIgaW4gdGhlIHBlcmZfZXZlbnQgc3Vic3lzdGVtLCB0aG91Z2guCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBtaWdyYXRpb25fbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBtaWdyYXRpb25fY2FsbCwKQEAgLTkxNzEsNiArOTE2Miw3IEBACiAJY3B1bWFza192YXJfdCBub25faXNvbGF0ZWRfY3B1czsKIAogCWFsbG9jX2NwdW1hc2tfdmFyKCZub25faXNvbGF0ZWRfY3B1cywgR0ZQX0tFUk5FTCk7CisJYWxsb2NfY3B1bWFza192YXIoJmZhbGxiYWNrX2RvbXMsIEdGUF9LRVJORUwpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkKIAlzY2hlZF9ncm91cF9ub2Rlc19ieWNwdSA9IGt6YWxsb2MobnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKSwKQEAgLTkyMDIsNyArOTE5NCw2IEBACiAJc2NoZWRfaW5pdF9ncmFudWxhcml0eSgpOwogCWZyZWVfY3B1bWFza192YXIobm9uX2lzb2xhdGVkX2NwdXMpOwogCi0JYWxsb2NfY3B1bWFza192YXIoJmZhbGxiYWNrX2RvbXMsIEdGUF9LRVJORUwpOwogCWluaXRfc2NoZWRfcnRfY2xhc3MoKTsKIH0KICNlbHNlCkBAIC05NTQ5LDcgKzk1NDAsNyBAQAogCWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwLCBHRlBfTk9XQUlUKTsKICNlbmRpZiAvKiBTTVAgKi8KIAotCXBlcmZfY291bnRlcl9pbml0KCk7CisJcGVyZl9ldmVudF9pbml0KCk7CiAKIAlzY2hlZHVsZXJfcnVubmluZyA9IDE7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IGUxZDE2YzkuLmFjMmUxZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC00OCwxMyArNDgsNiBAQAogX19yZWFkX21vc3RseSBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOwogCiBzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSB7Ci0JLyoKLQkgKiBSYXcgc3BpbmxvY2sgLSB0aGlzIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGlzIG1pZ2h0IGJlIGNhbGxlZAotCSAqIGZyb20gd2l0aGluIGluc3RydW1lbnRhdGlvbiBjb2RlIHNvIHdlIGRvbnQgd2FudCB0byBkbyBhbnkKLQkgKiBpbnN0cnVtZW50YXRpb24gb3Vyc2VsdmVzLgotCSAqLwotCXJhd19zcGlubG9ja190CQlsb2NrOwotCiAJdTY0CQkJdGlja19yYXc7CiAJdTY0CQkJdGlja19ndG9kOwogCXU2NAkJCWNsb2NrOwpAQCAtODAsNyArNzMsNiBAQAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZCA9IGNwdV9zZGMoY3B1KTsKIAotCQlzY2QtPmxvY2sgPSAocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOwogCQlzY2QtPnRpY2tfcmF3ID0gMDsKIAkJc2NkLT50aWNrX2d0b2QgPSBrdGltZV9ub3c7CiAJCXNjZC0+Y2xvY2sgPSBrdGltZV9ub3c7CkBAIC0xMDksMTQgKzEwMSwxOSBAQAogICogIC0gZmlsdGVyIG91dCBiYWNrd2FyZCBtb3Rpb24KICAqICAtIHVzZSB0aGUgR1RPRCB0aWNrIHZhbHVlIHRvIGNyZWF0ZSBhIHdpbmRvdyB0byBmaWx0ZXIgY3JhenkgVFNDIHZhbHVlcwogICovCi1zdGF0aWMgdTY0IF9fdXBkYXRlX3NjaGVkX2Nsb2NrKHN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2QsIHU2NCBub3cpCitzdGF0aWMgdTY0IHNjaGVkX2Nsb2NrX2xvY2FsKHN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2QpCiB7Ci0JczY0IGRlbHRhID0gbm93IC0gc2NkLT50aWNrX3JhdzsKLQl1NjQgY2xvY2ssIG1pbl9jbG9jaywgbWF4X2Nsb2NrOworCXU2NCBub3csIGNsb2NrLCBvbGRfY2xvY2ssIG1pbl9jbG9jaywgbWF4X2Nsb2NrOworCXM2NCBkZWx0YTsKIAorYWdhaW46CisJbm93ID0gc2NoZWRfY2xvY2soKTsKKwlkZWx0YSA9IG5vdyAtIHNjZC0+dGlja19yYXc7CiAJaWYgKHVubGlrZWx5KGRlbHRhIDwgMCkpCiAJCWRlbHRhID0gMDsKIAorCW9sZF9jbG9jayA9IHNjZC0+Y2xvY2s7CisKIAkvKgogCSAqIHNjZC0+Y2xvY2sgPSBjbGFtcChzY2QtPnRpY2tfZ3RvZCArIGRlbHRhLAogCSAqCQkgICAgICBtYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spLApAQCAtMTI0LDg0ICsxMjEsNzMgQEAKIAkgKi8KIAogCWNsb2NrID0gc2NkLT50aWNrX2d0b2QgKyBkZWx0YTsKLQltaW5fY2xvY2sgPSB3cmFwX21heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayk7Ci0JbWF4X2Nsb2NrID0gd3JhcF9tYXgoc2NkLT5jbG9jaywgc2NkLT50aWNrX2d0b2QgKyBUSUNLX05TRUMpOworCW1pbl9jbG9jayA9IHdyYXBfbWF4KHNjZC0+dGlja19ndG9kLCBvbGRfY2xvY2spOworCW1heF9jbG9jayA9IHdyYXBfbWF4KG9sZF9jbG9jaywgc2NkLT50aWNrX2d0b2QgKyBUSUNLX05TRUMpOwogCiAJY2xvY2sgPSB3cmFwX21heChjbG9jaywgbWluX2Nsb2NrKTsKIAljbG9jayA9IHdyYXBfbWluKGNsb2NrLCBtYXhfY2xvY2spOwogCi0Jc2NkLT5jbG9jayA9IGNsb2NrOworCWlmIChjbXB4Y2hnKCZzY2QtPmNsb2NrLCBvbGRfY2xvY2ssIGNsb2NrKSAhPSBvbGRfY2xvY2spCisJCWdvdG8gYWdhaW47CiAKLQlyZXR1cm4gc2NkLT5jbG9jazsKKwlyZXR1cm4gY2xvY2s7CiB9CiAKLXN0YXRpYyB2b2lkIGxvY2tfZG91YmxlX2Nsb2NrKHN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpkYXRhMSwKLQkJCQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqZGF0YTIpCitzdGF0aWMgdTY0IHNjaGVkX2Nsb2NrX3JlbW90ZShzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkKQogewotCWlmIChkYXRhMSA8IGRhdGEyKSB7Ci0JCV9fcmF3X3NwaW5fbG9jaygmZGF0YTEtPmxvY2spOwotCQlfX3Jhd19zcGluX2xvY2soJmRhdGEyLT5sb2NrKTsKKwlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqbXlfc2NkID0gdGhpc19zY2QoKTsKKwl1NjQgdGhpc19jbG9jaywgcmVtb3RlX2Nsb2NrOworCXU2NCAqcHRyLCBvbGRfdmFsLCB2YWw7CisKKwlzY2hlZF9jbG9ja19sb2NhbChteV9zY2QpOworYWdhaW46CisJdGhpc19jbG9jayA9IG15X3NjZC0+Y2xvY2s7CisJcmVtb3RlX2Nsb2NrID0gc2NkLT5jbG9jazsKKworCS8qCisJICogVXNlIHRoZSBvcHBvcnR1bml0eSB0aGF0IHdlIGhhdmUgYm90aCBsb2NrcworCSAqIHRha2VuIHRvIGNvdXBsZSB0aGUgdHdvIGNsb2Nrczogd2UgdGFrZSB0aGUKKwkgKiBsYXJnZXIgdGltZSBhcyB0aGUgbGF0ZXN0IHRpbWUgZm9yIGJvdGgKKwkgKiBydW5xdWV1ZXMuICh0aGlzIGNyZWF0ZXMgbW9ub3RvbmljIG1vdmVtZW50KQorCSAqLworCWlmIChsaWtlbHkoKHM2NCkocmVtb3RlX2Nsb2NrIC0gdGhpc19jbG9jaykgPCAwKSkgeworCQlwdHIgPSAmc2NkLT5jbG9jazsKKwkJb2xkX3ZhbCA9IHJlbW90ZV9jbG9jazsKKwkJdmFsID0gdGhpc19jbG9jazsKIAl9IGVsc2UgewotCQlfX3Jhd19zcGluX2xvY2soJmRhdGEyLT5sb2NrKTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZkYXRhMS0+bG9jayk7CisJCS8qCisJCSAqIFNob3VsZCBiZSByYXJlLCBidXQgcG9zc2libGU6CisJCSAqLworCQlwdHIgPSAmbXlfc2NkLT5jbG9jazsKKwkJb2xkX3ZhbCA9IHRoaXNfY2xvY2s7CisJCXZhbCA9IHJlbW90ZV9jbG9jazsKIAl9CisKKwlpZiAoY21weGNoZyhwdHIsIG9sZF92YWwsIHZhbCkgIT0gb2xkX3ZhbCkKKwkJZ290byBhZ2FpbjsKKworCXJldHVybiB2YWw7CiB9CiAKIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSkKIHsKLQl1NjQgbm93LCBjbG9jaywgdGhpc19jbG9jaywgcmVtb3RlX2Nsb2NrOwogCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2Q7CisJdTY0IGNsb2NrOworCisJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJaWYgKHNjaGVkX2Nsb2NrX3N0YWJsZSkKIAkJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiAKLQlzY2QgPSBjcHVfc2RjKGNwdSk7Ci0KLQkvKgotCSAqIE5vcm1hbGx5IHRoaXMgaXMgbm90IGNhbGxlZCBpbiBOTUkgY29udGV4dCAtIGJ1dCBpZiBpdCBpcywKLQkgKiB0cnlpbmcgdG8gZG8gYW55IGxvY2tpbmcgaGVyZSBpcyB0b3RhbGx5IGxldGhhbC4KLQkgKi8KLQlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQotCQlyZXR1cm4gc2NkLT5jbG9jazsKLQogCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCiAJCXJldHVybiAwdWxsOwogCi0JV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwotCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CisJc2NkID0gY3B1X3NkYyhjcHUpOwogCi0JaWYgKGNwdSAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSB7Ci0JCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpteV9zY2QgPSB0aGlzX3NjZCgpOwotCi0JCWxvY2tfZG91YmxlX2Nsb2NrKHNjZCwgbXlfc2NkKTsKLQotCQl0aGlzX2Nsb2NrID0gX191cGRhdGVfc2NoZWRfY2xvY2sobXlfc2NkLCBub3cpOwotCQlyZW1vdGVfY2xvY2sgPSBzY2QtPmNsb2NrOwotCi0JCS8qCi0JCSAqIFVzZSB0aGUgb3Bwb3J0dW5pdHkgdGhhdCB3ZSBoYXZlIGJvdGggbG9ja3MKLQkJICogdGFrZW4gdG8gY291cGxlIHRoZSB0d28gY2xvY2tzOiB3ZSB0YWtlIHRoZQotCQkgKiBsYXJnZXIgdGltZSBhcyB0aGUgbGF0ZXN0IHRpbWUgZm9yIGJvdGgKLQkJICogcnVucXVldWVzLiAodGhpcyBjcmVhdGVzIG1vbm90b25pYyBtb3ZlbWVudCkKLQkJICovCi0JCWlmIChsaWtlbHkoKHM2NCkocmVtb3RlX2Nsb2NrIC0gdGhpc19jbG9jaykgPCAwKSkgewotCQkJY2xvY2sgPSB0aGlzX2Nsb2NrOwotCQkJc2NkLT5jbG9jayA9IGNsb2NrOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFNob3VsZCBiZSByYXJlLCBidXQgcG9zc2libGU6Ci0JCQkgKi8KLQkJCWNsb2NrID0gcmVtb3RlX2Nsb2NrOwotCQkJbXlfc2NkLT5jbG9jayA9IHJlbW90ZV9jbG9jazsKLQkJfQotCi0JCV9fcmF3X3NwaW5fdW5sb2NrKCZteV9zY2QtPmxvY2spOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3NwaW5fbG9jaygmc2NkLT5sb2NrKTsKLQkJY2xvY2sgPSBfX3VwZGF0ZV9zY2hlZF9jbG9jayhzY2QsIG5vdyk7Ci0JfQotCi0JX19yYXdfc3Bpbl91bmxvY2soJnNjZC0+bG9jayk7CisJaWYgKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCWNsb2NrID0gc2NoZWRfY2xvY2tfcmVtb3RlKHNjZCk7CisJZWxzZQorCQljbG9jayA9IHNjaGVkX2Nsb2NrX2xvY2FsKHNjZCk7CiAKIAlyZXR1cm4gY2xvY2s7CiB9CkBAIC0yMjMsMTEgKzIwOSw5IEBACiAJbm93X2d0b2QgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CiAJbm93ID0gc2NoZWRfY2xvY2soKTsKIAotCV9fcmF3X3NwaW5fbG9jaygmc2NkLT5sb2NrKTsKIAlzY2QtPnRpY2tfcmF3ID0gbm93OwogCXNjZC0+dGlja19ndG9kID0gbm93X2d0b2Q7Ci0JX191cGRhdGVfc2NoZWRfY2xvY2soc2NkLCBub3cpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZzY2QtPmxvY2spOworCXNjaGVkX2Nsb2NrX2xvY2FsKHNjZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCAxMGQyMThhLi5lY2M2MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTUxMyw2ICs1MTMsNyBAQAogCWlmIChlbnRpdHlfaXNfdGFzayhjdXJyKSkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnRhc2sgPSB0YXNrX29mKGN1cnIpOwogCisJCXRyYWNlX3NjaGVkX3N0YXRfcnVudGltZShjdXJ0YXNrLCBkZWx0YV9leGVjLCBjdXJyLT52cnVudGltZSk7CiAJCWNwdWFjY3RfY2hhcmdlKGN1cnRhc2ssIGRlbHRhX2V4ZWMpOwogCQlhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZShjdXJ0YXNrLCBkZWx0YV9leGVjKTsKIAl9CkBAIC03MDksMzEgKzcxMCwyOCBAQAogCWlmIChpbml0aWFsICYmIHNjaGVkX2ZlYXQoU1RBUlRfREVCSVQpKQogCQl2cnVudGltZSArPSBzY2hlZF92c2xpY2UoY2ZzX3JxLCBzZSk7CiAKLQlpZiAoIWluaXRpYWwpIHsKLQkJLyogc2xlZXBzIHVwdG8gYSBzaW5nbGUgbGF0ZW5jeSBkb24ndCBjb3VudC4gKi8KLQkJaWYgKHNjaGVkX2ZlYXQoRkFJUl9TTEVFUEVSUykpIHsKLQkJCXVuc2lnbmVkIGxvbmcgdGhyZXNoID0gc3lzY3RsX3NjaGVkX2xhdGVuY3k7CisJLyogc2xlZXBzIHVwIHRvIGEgc2luZ2xlIGxhdGVuY3kgZG9uJ3QgY291bnQuICovCisJaWYgKCFpbml0aWFsICYmIHNjaGVkX2ZlYXQoRkFJUl9TTEVFUEVSUykpIHsKKwkJdW5zaWduZWQgbG9uZyB0aHJlc2ggPSBzeXNjdGxfc2NoZWRfbGF0ZW5jeTsKIAotCQkJLyoKLQkJCSAqIENvbnZlcnQgdGhlIHNsZWVwZXIgdGhyZXNob2xkIGludG8gdmlydHVhbCB0aW1lLgotCQkJICogU0NIRURfSURMRSBpcyBhIHNwZWNpYWwgc3ViLWNsYXNzLiAgV2UgY2FyZSBhYm91dAotCQkJICogZmFpcm5lc3Mgb25seSByZWxhdGl2ZSB0byBvdGhlciBTQ0hFRF9JRExFIHRhc2tzLAotCQkJICogYWxsIG9mIHdoaWNoIGhhdmUgdGhlIHNhbWUgd2VpZ2h0LgotCQkJICovCi0JCQlpZiAoc2NoZWRfZmVhdChOT1JNQUxJWkVEX1NMRUVQRVIpICYmCi0JCQkJCSghZW50aXR5X2lzX3Rhc2soc2UpIHx8Ci0JCQkJCSB0YXNrX29mKHNlKS0+cG9saWN5ICE9IFNDSEVEX0lETEUpKQotCQkJCXRocmVzaCA9IGNhbGNfZGVsdGFfZmFpcih0aHJlc2gsIHNlKTsKKwkJLyoKKwkJICogQ29udmVydCB0aGUgc2xlZXBlciB0aHJlc2hvbGQgaW50byB2aXJ0dWFsIHRpbWUuCisJCSAqIFNDSEVEX0lETEUgaXMgYSBzcGVjaWFsIHN1Yi1jbGFzcy4gIFdlIGNhcmUgYWJvdXQKKwkJICogZmFpcm5lc3Mgb25seSByZWxhdGl2ZSB0byBvdGhlciBTQ0hFRF9JRExFIHRhc2tzLAorCQkgKiBhbGwgb2Ygd2hpY2ggaGF2ZSB0aGUgc2FtZSB3ZWlnaHQuCisJCSAqLworCQlpZiAoc2NoZWRfZmVhdChOT1JNQUxJWkVEX1NMRUVQRVIpICYmICghZW50aXR5X2lzX3Rhc2soc2UpIHx8CisJCQkJIHRhc2tfb2Yoc2UpLT5wb2xpY3kgIT0gU0NIRURfSURMRSkpCisJCQl0aHJlc2ggPSBjYWxjX2RlbHRhX2ZhaXIodGhyZXNoLCBzZSk7CiAKLQkJCS8qCi0JCQkgKiBIYWx2ZSB0aGVpciBzbGVlcCB0aW1lJ3MgZWZmZWN0LCB0byBhbGxvdwotCQkJICogZm9yIGEgZ2VudGxlciBlZmZlY3Qgb2Ygc2xlZXBlcnM6Ci0JCQkgKi8KLQkJCWlmIChzY2hlZF9mZWF0KEdFTlRMRV9GQUlSX1NMRUVQRVJTKSkKLQkJCQl0aHJlc2ggPj49IDE7CisJCS8qCisJCSAqIEhhbHZlIHRoZWlyIHNsZWVwIHRpbWUncyBlZmZlY3QsIHRvIGFsbG93CisJCSAqIGZvciBhIGdlbnRsZXIgZWZmZWN0IG9mIHNsZWVwZXJzOgorCQkgKi8KKwkJaWYgKHNjaGVkX2ZlYXQoR0VOVExFX0ZBSVJfU0xFRVBFUlMpKQorCQkJdGhyZXNoID4+PSAxOwogCi0JCQl2cnVudGltZSAtPSB0aHJlc2g7Ci0JCX0KKwkJdnJ1bnRpbWUgLT0gdGhyZXNoOwogCX0KIAogCS8qIGVuc3VyZSB3ZSBuZXZlciBnYWluIHRpbWUgYnkgYmVpbmcgcGxhY2VkIGJhY2t3YXJkcy4gKi8KQEAgLTEzNDIsNyArMTM0MCw4IEBACiAJaW50IHN5bmMgPSB3YWtlX2ZsYWdzICYgV0ZfU1lOQzsKIAogCWlmIChzZF9mbGFnICYgU0RfQkFMQU5DRV9XQUtFKSB7Ci0JCWlmIChzY2hlZF9mZWF0KEFGRklORV9XQUtFVVBTKSkKKwkJaWYgKHNjaGVkX2ZlYXQoQUZGSU5FX1dBS0VVUFMpICYmCisJCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJnAtPmNwdXNfYWxsb3dlZCkpCiAJCQl3YW50X2FmZmluZSA9IDE7CiAJCW5ld19jcHUgPSBwcmV2X2NwdTsKIAl9CkBAIC0xOTQwLDYgKzE5MzksMjUgQEAKIH0KICNlbmRpZgogCit1bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnRhc2stPnNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJxICpycTsKKwl1bnNpZ25lZCBpbnQgcnJfaW50ZXJ2YWwgPSAwOworCisJLyoKKwkgKiBUaW1lIHNsaWNlIGlzIDAgZm9yIFNDSEVEX09USEVSIHRhc2tzIHRoYXQgYXJlIG9uIGFuIG90aGVyd2lzZQorCSAqIGlkbGUgcnVucXVldWU6CisJICovCisJcnEgPSB0YXNrX3JxX2xvY2sodGFzaywgJmZsYWdzKTsKKwlpZiAocnEtPmNmcy5sb2FkLndlaWdodCkKKwkJcnJfaW50ZXJ2YWwgPSBOU19UT19KSUZGSUVTKHNjaGVkX3NsaWNlKCZycS0+Y2ZzLCBzZSkpOworCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCisJcmV0dXJuIHJyX2ludGVydmFsOworfQorCiAvKgogICogQWxsIHRoZSBzY2hlZHVsaW5nIGNsYXNzIG1ldGhvZHM6CiAgKi8KQEAgLTE5NjgsNiArMTk4Niw4IEBACiAJLnByaW9fY2hhbmdlZAkJPSBwcmlvX2NoYW5nZWRfZmFpciwKIAkuc3dpdGNoZWRfdG8JCT0gc3dpdGNoZWRfdG9fZmFpciwKIAorCS5nZXRfcnJfaW50ZXJ2YWwJPSBnZXRfcnJfaW50ZXJ2YWxfZmFpciwKKwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJLm1vdmVkX2dyb3VwCQk9IG1vdmVkX2dyb3VwX2ZhaXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKaW5kZXggYThiNDQ4YS4uYjEzM2EyOCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKKysrIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKQEAgLTk3LDYgKzk3LDExIEBACiAJCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgMCk7CiB9CiAKK3Vuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBTaW1wbGUsIHNwZWNpYWwgc2NoZWR1bGluZyBjbGFzcyBmb3IgdGhlIHBlci1DUFUgaWRsZSB0YXNrczoKICAqLwpAQCAtMTIyLDYgKzEyNyw4IEBACiAJLnNldF9jdXJyX3Rhc2sgICAgICAgICAgPSBzZXRfY3Vycl90YXNrX2lkbGUsCiAJLnRhc2tfdGljawkJPSB0YXNrX3RpY2tfaWRsZSwKIAorCS5nZXRfcnJfaW50ZXJ2YWwJPSBnZXRfcnJfaW50ZXJ2YWxfaWRsZSwKKwogCS5wcmlvX2NoYW5nZWQJCT0gcHJpb19jaGFuZ2VkX2lkbGUsCiAJLnN3aXRjaGVkX3RvCQk9IHN3aXRjaGVkX3RvX2lkbGUsCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggMTNkZTcxMi4uYTRkNzkwYyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTE3MzQsNiArMTczNCwxNyBAQAogCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKK3Vuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCS8qCisJICogVGltZSBzbGljZSBpcyAwIGZvciBTQ0hFRF9GSUZPIHRhc2tzCisJICovCisJaWYgKHRhc2stPnBvbGljeSA9PSBTQ0hFRF9SUikKKwkJcmV0dXJuIERFRl9USU1FU0xJQ0U7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBydF9zY2hlZF9jbGFzcyA9IHsKIAkubmV4dAkJCT0gJmZhaXJfc2NoZWRfY2xhc3MsCiAJLmVucXVldWVfdGFzawkJPSBlbnF1ZXVlX3Rhc2tfcnQsCkBAIC0xNzYyLDYgKzE3NzMsOCBAQAogCS5zZXRfY3Vycl90YXNrICAgICAgICAgID0gc2V0X2N1cnJfdGFza19ydCwKIAkudGFza190aWNrCQk9IHRhc2tfdGlja19ydCwKIAorCS5nZXRfcnJfaW50ZXJ2YWwJPSBnZXRfcnJfaW50ZXJ2YWxfcnQsCisKIAkucHJpb19jaGFuZ2VkCQk9IHByaW9fY2hhbmdlZF9ydCwKIAkuc3dpdGNoZWRfdG8JCT0gc3dpdGNoZWRfdG9fcnQsCiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL3NtcC5jIGIva2VybmVsL3NtcC5jCmluZGV4IDhlMjE4NTAuLmZkNDdhMjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXAuYworKysgYi9rZXJuZWwvc21wLmMKQEAgLTI5LDggKzI5LDcgQEAKIAogc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSB7CiAJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEJY3NkOwotCXNwaW5sb2NrX3QJCWxvY2s7Ci0JdW5zaWduZWQgaW50CQlyZWZzOworCWF0b21pY190CQlyZWZzOwogCWNwdW1hc2tfdmFyX3QJCWNwdW1hc2s7CiB9OwogCkBAIC0zOSw5ICszOCw3IEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSkgPSB7Ci0JLmxvY2sJCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNmZF9kYXRhLmxvY2spLAotfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSk7CiAKIHN0YXRpYyBpbnQKIGhvdHBsdWdfY2ZkKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKQEAgLTE5NiwyNSArMTkzLDE4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGF0YSwgJmNhbGxfZnVuY3Rpb24ucXVldWUsIGNzZC5saXN0KSB7CiAJCWludCByZWZzOwogCi0JCXNwaW5fbG9jaygmZGF0YS0+bG9jayk7Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGRhdGEtPmNwdW1hc2spKSB7Ci0JCQlzcGluX3VubG9jaygmZGF0YS0+bG9jayk7CisJCWlmICghY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCBkYXRhLT5jcHVtYXNrKSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgZGF0YS0+Y3B1bWFzayk7Ci0JCXNwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAogCQlkYXRhLT5jc2QuZnVuYyhkYXRhLT5jc2QuaW5mbyk7CiAKLQkJc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQkJV0FSTl9PTihkYXRhLT5yZWZzID09IDApOwotCQlyZWZzID0gLS1kYXRhLT5yZWZzOworCQlyZWZzID0gYXRvbWljX2RlY19yZXR1cm4oJmRhdGEtPnJlZnMpOworCQlXQVJOX09OKHJlZnMgPCAwKTsKIAkJaWYgKCFyZWZzKSB7CiAJCQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CiAJCQlsaXN0X2RlbF9yY3UoJmRhdGEtPmNzZC5saXN0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAogCQlpZiAocmVmcykKIAkJCWNvbnRpbnVlOwpAQCAtNDE5LDIzICs0MDksMjAgQEAKIAlkYXRhID0gJl9fZ2V0X2NwdV92YXIoY2ZkX2RhdGEpOwogCWNzZF9sb2NrKCZkYXRhLT5jc2QpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKIAlkYXRhLT5jc2QuZnVuYyA9IGZ1bmM7CiAJZGF0YS0+Y3NkLmluZm8gPSBpbmZvOwogCWNwdW1hc2tfYW5kKGRhdGEtPmNwdW1hc2ssIG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CiAJY3B1bWFza19jbGVhcl9jcHUodGhpc19jcHUsIGRhdGEtPmNwdW1hc2spOwotCWRhdGEtPnJlZnMgPSBjcHVtYXNrX3dlaWdodChkYXRhLT5jcHVtYXNrKTsKKwlhdG9taWNfc2V0KCZkYXRhLT5yZWZzLCBjcHVtYXNrX3dlaWdodChkYXRhLT5jcHVtYXNrKSk7CiAKLQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbGxfZnVuY3Rpb24ubG9jaywgZmxhZ3MpOwogCS8qCiAJICogUGxhY2UgZW50cnkgYXQgdGhlIF9IRUFEXyBvZiB0aGUgbGlzdCwgc28gdGhhdCBhbnkgY3B1IHN0aWxsCiAJICogb2JzZXJ2aW5nIHRoZSBlbnRyeSBpbiBnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpCiAJICogd2lsbCBub3QgbWlzcyBhbnkgb3RoZXIgbGlzdCBlbnRyaWVzOgogCSAqLwogCWxpc3RfYWRkX3JjdSgmZGF0YS0+Y3NkLmxpc3QsICZjYWxsX2Z1bmN0aW9uLnF1ZXVlKTsKLQlzcGluX3VubG9jaygmY2FsbF9mdW5jdGlvbi5sb2NrKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWxsX2Z1bmN0aW9uLmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogTWFrZSB0aGUgbGlzdCBhZGRpdGlvbiB2aXNpYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBpcGkuCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYjNmMTA5Ny4uZWJjYjE1NiAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KQEAgLTEzMzgsNiArMTMzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljcHV0aW1lX3QgdXRpbWUsIHN0aW1lOwogCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwl1bnNpZ25lZCBsb25nIG1heHJzcyA9IDA7CiAKIAltZW1zZXQoKGNoYXIgKikgciwgMCwgc2l6ZW9mICpyKTsKIAl1dGltZSA9IHN0aW1lID0gY3B1dGltZV96ZXJvOwpAQCAtMTM0Niw2ICsxMzQ3LDcgQEAKIAkJdXRpbWUgPSB0YXNrX3V0aW1lKGN1cnJlbnQpOwogCQlzdGltZSA9IHRhc2tfc3RpbWUoY3VycmVudCk7CiAJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShwLCByKTsKKwkJbWF4cnNzID0gcC0+c2lnbmFsLT5tYXhyc3M7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTM2Myw2ICsxMzY1LDcgQEAKIAkJCXItPnJ1X21hamZsdCA9IHAtPnNpZ25hbC0+Y21hal9mbHQ7CiAJCQlyLT5ydV9pbmJsb2NrID0gcC0+c2lnbmFsLT5jaW5ibG9jazsKIAkJCXItPnJ1X291YmxvY2sgPSBwLT5zaWduYWwtPmNvdWJsb2NrOworCQkJbWF4cnNzID0gcC0+c2lnbmFsLT5jbWF4cnNzOwogCiAJCQlpZiAod2hvID09IFJVU0FHRV9DSElMRFJFTikKIAkJCQlicmVhazsKQEAgLTEzNzcsNiArMTM4MCw4IEBACiAJCQlyLT5ydV9tYWpmbHQgKz0gcC0+c2lnbmFsLT5tYWpfZmx0OwogCQkJci0+cnVfaW5ibG9jayArPSBwLT5zaWduYWwtPmluYmxvY2s7CiAJCQlyLT5ydV9vdWJsb2NrICs9IHAtPnNpZ25hbC0+b3VibG9jazsKKwkJCWlmIChtYXhyc3MgPCBwLT5zaWduYWwtPm1heHJzcykKKwkJCQltYXhyc3MgPSBwLT5zaWduYWwtPm1heHJzczsKIAkJCXQgPSBwOwogCQkJZG8gewogCQkJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZSh0LCByKTsKQEAgLTEzOTIsNiArMTM5NywxNSBAQAogb3V0OgogCWNwdXRpbWVfdG9fdGltZXZhbCh1dGltZSwgJnItPnJ1X3V0aW1lKTsKIAljcHV0aW1lX3RvX3RpbWV2YWwoc3RpbWUsICZyLT5ydV9zdGltZSk7CisKKwlpZiAod2hvICE9IFJVU0FHRV9DSElMRFJFTikgeworCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGdldF90YXNrX21tKHApOworCQlpZiAobW0pIHsKKwkJCXNldG1heF9tbV9oaXdhdGVyX3JzcygmbWF4cnNzLCBtbSk7CisJCQltbXB1dChtbSk7CisJCX0KKwl9CisJci0+cnVfbWF4cnNzID0gbWF4cnNzICogKFBBR0VfU0laRSAvIDEwMjQpOyAvKiBjb252ZXJ0IHBhZ2VzIHRvIEtCcyAqLwogfQogCiBpbnQgZ2V0cnVzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdobywgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKnJ1KQpAQCAtMTUxMSwxMSArMTUyNSwxMSBAQAogCQljYXNlIFBSX1NFVF9UU0M6CiAJCQllcnJvciA9IFNFVF9UU0NfQ1RMKGFyZzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgUFJfVEFTS19QRVJGX0NPVU5URVJTX0RJU0FCTEU6Ci0JCQllcnJvciA9IHBlcmZfY291bnRlcl90YXNrX2Rpc2FibGUoKTsKKwkJY2FzZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEU6CisJCQllcnJvciA9IHBlcmZfZXZlbnRfdGFza19kaXNhYmxlKCk7CiAJCQlicmVhazsKLQkJY2FzZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRU5BQkxFOgotCQkJZXJyb3IgPSBwZXJmX2NvdW50ZXJfdGFza19lbmFibGUoKTsKKwkJY2FzZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRToKKwkJCWVycm9yID0gcGVyZl9ldmVudF90YXNrX2VuYWJsZSgpOwogCQkJYnJlYWs7CiAJCWNhc2UgUFJfR0VUX1RJTUVSU0xBQ0s6CiAJCQllcnJvciA9IGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c19uaS5jIGIva2VybmVsL3N5c19uaS5jCmluZGV4IDY4MzIwZjYuLjUxNWJjMjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNfbmkuYworKysgYi9rZXJuZWwvc3lzX25pLmMKQEAgLTE3Nyw0ICsxNzcsNCBAQAogY29uZF9zeXNjYWxsKHN5c19ldmVudGZkMik7CiAKIC8qIHBlcmZvcm1hbmNlIGNvdW50ZXJzOiAqLwotY29uZF9zeXNjYWxsKHN5c19wZXJmX2NvdW50ZXJfb3Blbik7Citjb25kX3N5c2NhbGwoc3lzX3BlcmZfZXZlbnRfb3Blbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggMWE2MzFiYS4uMGRmYWE0NyAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMTA2LDYgKzEwNiw5IEBACiBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHR3byA9IDI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvbmVfdWwgPSAxOwogc3RhdGljIGludCBvbmVfaHVuZHJlZCA9IDEwMDsKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitzdGF0aWMgaW50IHRlbl90aG91c2FuZCA9IDEwMDAwOworI2VuZGlmCiAKIC8qIHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgcHJvY19kb3Vsb25ndmVjX21pbm1heCBvZiB2bV9kaXJ0eV9ieXRlcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZGlydHlfYnl0ZXNfbWluID0gMiAqIFBBR0VfU0laRTsKQEAgLTcyMiw2ICs3MjUsMTcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInByaW50a19kZWxheSIsCisJCS5kYXRhCQk9ICZwcmludGtfZGVsYXlfbXNlYywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnRlbl90aG91c2FuZCwKKwl9LAogI2VuZGlmCiAJewogCQkuY3RsX25hbWUJPSBLRVJOX05HUk9VUFNfTUFYLApAQCAtOTY0LDI4ICs5NzgsMjggQEAKIAkJLmNoaWxkCQk9IHNsb3dfd29ya19zeXNjdGxzLAogCX0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZQk9ICJwZXJmX2NvdW50ZXJfcGFyYW5vaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCwKLQkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCksCisJCS5wcm9jbmFtZQk9ICJwZXJmX2V2ZW50X3BhcmFub2lkIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9wZXJmX2V2ZW50X3BhcmFub2lkLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZQk9ICJwZXJmX2NvdW50ZXJfbWxvY2tfa2IiLAotCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfY291bnRlcl9tbG9jaywKLQkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX3BlcmZfY291bnRlcl9tbG9jayksCisJCS5wcm9jbmFtZQk9ICJwZXJmX2V2ZW50X21sb2NrX2tiIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9wZXJmX2V2ZW50X21sb2NrLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfcGVyZl9ldmVudF9tbG9jayksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZQk9ICJwZXJmX2NvdW50ZXJfbWF4X3NhbXBsZV9yYXRlIiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGUsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGUpLAorCQkucHJvY25hbWUJPSAicGVyZl9ldmVudF9tYXhfc2FtcGxlX3JhdGUiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlKSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGJiYjUxMDcuLjVkYjVhOGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00Niw2ICs0Niw5IEBACiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy90aW1lci5oPgorCiB1NjQgamlmZmllc182NCBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IElOSVRJQUxfSklGRklFUzsKIAogRVhQT1JUX1NZTUJPTChqaWZmaWVzXzY0KTsKQEAgLTUyMSw2ICs1MjQsMjUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z190aW1lcl9kZWFjdGl2YXRlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikgeyB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2luaXQoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCWRlYnVnX3RpbWVyX2luaXQodGltZXIpOworCXRyYWNlX3RpbWVyX2luaXQodGltZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RlYnVnX2FjdGl2YXRlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQoreworCWRlYnVnX3RpbWVyX2FjdGl2YXRlKHRpbWVyKTsKKwl0cmFjZV90aW1lcl9zdGFydCh0aW1lciwgZXhwaXJlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kZWFjdGl2YXRlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3sKKwlkZWJ1Z190aW1lcl9kZWFjdGl2YXRlKHRpbWVyKTsKKwl0cmFjZV90aW1lcl9jYW5jZWwodGltZXIpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAogCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCkBAIC01NDksNyArNTcxLDcgQEAKIAkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKLQlkZWJ1Z190aW1lcl9pbml0KHRpbWVyKTsKKwlkZWJ1Z19pbml0KHRpbWVyKTsKIAlfX2luaXRfdGltZXIodGltZXIsIG5hbWUsIGtleSk7CiB9CiBFWFBPUlRfU1lNQk9MKGluaXRfdGltZXJfa2V5KTsKQEAgLTU2OCw3ICs1OTAsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gJnRpbWVyLT5lbnRyeTsKIAotCWRlYnVnX3RpbWVyX2RlYWN0aXZhdGUodGltZXIpOworCWRlYnVnX2RlYWN0aXZhdGUodGltZXIpOwogCiAJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwogCWlmIChjbGVhcl9wZW5kaW5nKQpAQCAtNjMyLDcgKzY1NCw3IEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JZGVidWdfdGltZXJfYWN0aXZhdGUodGltZXIpOworCWRlYnVnX2FjdGl2YXRlKHRpbWVyLCBleHBpcmVzKTsKIAogCW5ld19iYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKIApAQCAtNzg3LDcgKzgwOSw3IEBACiAJQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpIHx8ICF0aW1lci0+ZnVuY3Rpb24pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCBmbGFncyk7CiAJdGltZXJfc2V0X2Jhc2UodGltZXIsIGJhc2UpOwotCWRlYnVnX3RpbWVyX2FjdGl2YXRlKHRpbWVyKTsKKwlkZWJ1Z19hY3RpdmF0ZSh0aW1lciwgdGltZXItPmV4cGlyZXMpOwogCWlmICh0aW1lX2JlZm9yZSh0aW1lci0+ZXhwaXJlcywgYmFzZS0+bmV4dF90aW1lcikgJiYKIAkgICAgIXRiYXNlX2dldF9kZWZlcnJhYmxlKHRpbWVyLT5iYXNlKSkKIAkJYmFzZS0+bmV4dF90aW1lciA9IHRpbWVyLT5leHBpcmVzOwpAQCAtMTAwMCw3ICsxMDIyLDkgQEAKIAkJCQkgKi8KIAkJCQlsb2NrX21hcF9hY3F1aXJlKCZsb2NrZGVwX21hcCk7CiAKKwkJCQl0cmFjZV90aW1lcl9leHBpcmVfZW50cnkodGltZXIpOwogCQkJCWZuKGRhdGEpOworCQkJCXRyYWNlX3RpbWVyX2V4cGlyZV9leGl0KHRpbWVyKTsKIAogCQkJCWxvY2tfbWFwX3JlbGVhc2UoJmxvY2tkZXBfbWFwKTsKIApAQCAtMTE4Nyw3ICsxMjExLDcgQEAKIHsKIAlzdHJ1Y3QgdHZlY19iYXNlICpiYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKIAotCXBlcmZfY291bnRlcl9kb19wZW5kaW5nKCk7CisJcGVyZl9ldmVudF9kb19wZW5kaW5nKCk7CiAKIAlocnRpbWVyX3J1bl9wZW5kaW5nKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggZTcxNjM0Ni4uYjQxNjUxMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTgzLDcgKzgzLDcgQEAKICMgVGhpcyBhbGxvd3MgdGhvc2Ugb3B0aW9ucyB0byBhcHBlYXIgd2hlbiBubyBvdGhlciB0cmFjZXIgaXMgc2VsZWN0ZWQuIEJ1dCB0aGUKICMgb3B0aW9ucyBkbyBub3QgYXBwZWFyIHdoZW4gc29tZXRoaW5nIGVsc2Ugc2VsZWN0cyBpdC4gV2UgbmVlZCB0aGUgdHdvIG9wdGlvbnMKICMgR0VORVJJQ19UUkFDRVIgYW5kIFRSQUNJTkcgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHRvIGFjY29tcGxpc2ggdGhlCi0jIGhpZGRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zIG9wdGlvbnMuCisjIGhpZGRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zLgogCiBjb25maWcgVFJBQ0lORwogCWJvb2wKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZSBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQppbmRleCA4NDQxNjRkLi4yNmYwM2FjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKKysrIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCkBAIC00Miw3ICs0Miw2IEBACiBvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSB0cmFjZV9mdW5jdGlvbnNfZ3JhcGgubwogb2JqLSQoQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcpICs9IHRyYWNlX2JyYW5jaC5vCiBvYmotJChDT05GSUdfSFdfQlJBTkNIX1RSQUNFUikgKz0gdHJhY2VfaHdfYnJhbmNoZXMubwotb2JqLSQoQ09ORklHX1BPV0VSX1RSQUNFUikgKz0gdHJhY2VfcG93ZXIubwogb2JqLSQoQ09ORklHX0tNRU1UUkFDRSkgKz0ga21lbXRyYWNlLm8KIG9iai0kKENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSKSArPSB0cmFjZV93b3JrcXVldWUubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICs9IGJsa3RyYWNlLm8KQEAgLTU0LDUgKzUzLDYgQEAKIG9iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpICs9IHRyYWNlX3N5c2NhbGxzLm8KIG9iai0kKENPTkZJR19FVkVOVF9QUk9GSUxFKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHNfZmlsdGVyLm8KK29iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSBwb3dlci10cmFjZXMubwogCiBsaWJmdHJhY2UteSA6PSBmdHJhY2UubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IGNjNjE1ZjguLjIzZGY3NzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTE1MjAsNyArMTUyMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19mdHJhY2Vfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19mdHJhY2Vfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSB0X3N0YXJ0LAogCS5uZXh0ID0gdF9uZXh0LAogCS5zdG9wID0gdF9zdG9wLApAQCAtMjQxNCwxMSArMjQxNCw5IEBACiBzdGF0aWMgdm9pZCAqCiBfX2dfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCXVuc2lnbmVkIGxvbmcgKmFycmF5ID0gbS0+cHJpdmF0ZTsKLQogCWlmICgqcG9zID49IGZ0cmFjZV9ncmFwaF9jb3VudCkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICZhcnJheVsqcG9zXTsKKwlyZXR1cm4gJmZ0cmFjZV9ncmFwaF9mdW5jc1sqcG9zXTsKIH0KIAogc3RhdGljIHZvaWQgKgpAQCAtMjQ2MSw3ICsyNDU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmdHJhY2VfZ3JhcGhfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZnRyYWNlX2dyYXBoX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gZ19zdGFydCwKIAkubmV4dCA9IGdfbmV4dCwKIAkuc3RvcCA9IGdfc3RvcCwKQEAgLTI0ODIsMTcgKzI0ODAsMTEgQEAKIAkJZnRyYWNlX2dyYXBoX2NvdW50ID0gMDsKIAkJbWVtc2V0KGZ0cmFjZV9ncmFwaF9mdW5jcywgMCwgc2l6ZW9mKGZ0cmFjZV9ncmFwaF9mdW5jcykpOwogCX0KLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCXJldCA9IHNlcV9vcGVuKGZpbGUsICZmdHJhY2VfZ3JhcGhfc2VxX29wcyk7Ci0JCWlmICghcmV0KSB7Ci0JCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCQltLT5wcml2YXRlID0gZnRyYWNlX2dyYXBoX2Z1bmNzOwotCQl9Ci0JfSBlbHNlCi0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZ0cmFjZV9ncmFwaF9mdW5jczsKIAltdXRleF91bmxvY2soJmdyYXBoX2xvY2spOwogCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCXJldCA9IHNlcV9vcGVuKGZpbGUsICZmdHJhY2VfZ3JhcGhfc2VxX29wcyk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNTYwLDcgKzI1NTIsNiBAQAogCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRyYWNlX3BhcnNlciBwYXJzZXI7Ci0JdW5zaWduZWQgbG9uZyAqYXJyYXk7CiAJc2l6ZV90IHJlYWQgPSAwOwogCXNzaXplX3QgcmV0OwogCkBAIC0yNTc0LDEyICsyNTY1LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlhcnJheSA9IG0tPnByaXZhdGU7Ci0JfSBlbHNlCi0JCWFycmF5ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCiAJaWYgKHRyYWNlX3BhcnNlcl9nZXRfaW5pdCgmcGFyc2VyLCBGVFJBQ0VfQlVGRl9NQVgpKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjU5MSw3ICsyNTc2LDcgQEAKIAkJcGFyc2VyLmJ1ZmZlcltwYXJzZXIuaWR4XSA9IDA7CiAKIAkJLyogd2UgYWxsb3cgb25seSBvbmUgZXhwcmVzc2lvbiBhdCBhIHRpbWUgKi8KLQkJcmV0ID0gZnRyYWNlX3NldF9mdW5jKGFycmF5LCAmZnRyYWNlX2dyYXBoX2NvdW50LAorCQlyZXQgPSBmdHJhY2Vfc2V0X2Z1bmMoZnRyYWNlX2dyYXBoX2Z1bmNzLCAmZnRyYWNlX2dyYXBoX2NvdW50LAogCQkJCQlwYXJzZXIuYnVmZmVyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jIGIva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNmM2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvcG93ZXItdHJhY2VzLmMKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIFBvd2VyIHRyYWNlIHBvaW50cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgorCitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHBvd2VyX3N0YXJ0KTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwocG93ZXJfZW5kKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwocG93ZXJfZnJlcXVlbmN5KTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCA2ZWVmMzg5Li5kNGZmMDE5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtMjAxLDggKzIwMSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjaW5nX2lzX29uKTsKIAotI2luY2x1ZGUgInRyYWNlLmgiCi0KICNkZWZpbmUgUkJfRVZOVF9IRFJfU0laRSAob2Zmc2V0b2Yoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50LCBhcnJheSkpCiAjZGVmaW5lIFJCX0FMSUdOTUVOVAkJNFUKICNkZWZpbmUgUkJfTUFYX1NNQUxMX0RBVEEJKFJCX0FMSUdOTUVOVCAqIFJJTkdCVUZfVFlQRV9EQVRBX1RZUEVfTEVOX01BWCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggZmQ1MmExOS4uNmMwZjZhOCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAKIHN0YXRpYyBpbnQgdHJhY2luZ19zZXRfdHJhY2VyKGNvbnN0IGNoYXIgKmJ1Zik7CiAKLSNkZWZpbmUgQk9PVFVQX1RSQUNFUl9TSVpFCQkxMDAKLXN0YXRpYyBjaGFyIGJvb3R1cF90cmFjZXJfYnVmW0JPT1RVUF9UUkFDRVJfU0laRV0gX19pbml0ZGF0YTsKKyNkZWZpbmUgTUFYX1RSQUNFUl9TSVpFCQkxMDAKK3N0YXRpYyBjaGFyIGJvb3R1cF90cmFjZXJfYnVmW01BWF9UUkFDRVJfU0laRV0gX19pbml0ZGF0YTsKIHN0YXRpYyBjaGFyICpkZWZhdWx0X2Jvb3R1cF90cmFjZXI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldF9mdHJhY2UoY2hhciAqc3RyKQogewotCXN0cm5jcHkoYm9vdHVwX3RyYWNlcl9idWYsIHN0ciwgQk9PVFVQX1RSQUNFUl9TSVpFKTsKKwlzdHJuY3B5KGJvb3R1cF90cmFjZXJfYnVmLCBzdHIsIE1BWF9UUkFDRVJfU0laRSk7CiAJZGVmYXVsdF9ib290dXBfdHJhY2VyID0gYm9vdHVwX3RyYWNlcl9idWY7CiAJLyogV2UgYXJlIHVzaW5nIGZ0cmFjZSBlYXJseSwgZXhwYW5kIGl0ICovCiAJcmluZ19idWZmZXJfZXhwYW5kZWQgPSAxOwpAQCAtMjQyLDEzICsyNDIsNiBAQAogc3RhdGljIHN0cnVjdCB0cmFjZXIJCSpjdXJyZW50X3RyYWNlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCi0gKiBtYXhfdHJhY2VyX3R5cGVfbGVuIGlzIHVzZWQgdG8gc2ltcGxpZnkgdGhlIGFsbG9jYXRpbmcgb2YKLSAqIGJ1ZmZlcnMgdG8gcmVhZCB1c2Vyc3BhY2UgdHJhY2VyIG5hbWVzLiBXZSBrZWVwIHRyYWNrIG9mCi0gKiB0aGUgbG9uZ2VzdCB0cmFjZXIgbmFtZSByZWdpc3RlcmVkLgotICovCi1zdGF0aWMgaW50CQkJbWF4X3RyYWNlcl90eXBlX2xlbjsKLQotLyoKICAqIHRyYWNlX3R5cGVzX2xvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSB0cmFjZV90eXBlcyBsaXN0LgogICogVGhpcyBsb2NrIGlzIGFsc28gdXNlZCB0byBrZWVwIHVzZXIgYWNjZXNzIHNlcmlhbGl6ZWQuCiAgKiBBY2Nlc3NlcyBmcm9tIHVzZXJzcGFjZSB3aWxsIGdyYWIgdGhpcyBsb2NrIHdoaWxlIHVzZXJzcGFjZQpAQCAtMjc1LDEyICsyNjgsMTggQEAKICAqLwogdm9pZCB0cmFjZV93YWtlX3VwKHZvaWQpCiB7CisJaW50IGNwdTsKKworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQkxPQ0spCisJCXJldHVybjsKIAkvKgogCSAqIFRoZSBydW5xdWV1ZV9pc19sb2NrZWQoKSBjYW4gZmFpbCwgYnV0IHRoaXMgaXMgdGhlIGJlc3Qgd2UKIAkgKiBoYXZlIGZvciBub3c6CiAJICovCi0JaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0JMT0NLKSAmJiAhcnVucXVldWVfaXNfbG9ja2VkKCkpCisJY3B1ID0gZ2V0X2NwdSgpOworCWlmICghcnVucXVldWVfaXNfbG9ja2VkKGNwdSkpCiAJCXdha2VfdXAoJnRyYWNlX3dhaXQpOworCXB1dF9jcHUoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2V0X2J1Zl9zaXplKGNoYXIgKnN0cikKQEAgLTYxOSw3ICs2MTgsNiBAQAogX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3QgdHJhY2VyICp0OwotCWludCBsZW47CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXR5cGUtPm5hbWUpIHsKQEAgLTYyNyw2ICs2MjUsMTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmIChzdHJsZW4odHlwZS0+bmFtZSkgPiBNQVhfVFJBQ0VSX1NJWkUpIHsKKwkJcHJfaW5mbygiVHJhY2VyIGhhcyBhIG5hbWUgbG9uZ2VyIHRoYW4gJWRcbiIsIE1BWF9UUkFDRVJfU0laRSk7CisJCXJldHVybiAtMTsKKwl9CisKIAkvKgogCSAqIFdoZW4gdGhpcyBnZXRzIGNhbGxlZCB3ZSBob2xkIHRoZSBCS0wgd2hpY2ggbWVhbnMgdGhhdAogCSAqIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFZhcmlvdXMgdHJhY2Ugc2VsZnRlc3RzIGhvd2V2ZXIKQEAgLTY0MSw3ICs2NDQsNyBAQAogCWZvciAodCA9IHRyYWNlX3R5cGVzOyB0OyB0ID0gdC0+bmV4dCkgewogCQlpZiAoc3RyY21wKHR5cGUtPm5hbWUsIHQtPm5hbWUpID09IDApIHsKIAkJCS8qIGFscmVhZHkgZm91bmQgKi8KLQkJCXByX2luZm8oIlRyYWNlICVzIGFscmVhZHkgcmVnaXN0ZXJlZFxuIiwKKwkJCXByX2luZm8oIlRyYWNlciAlcyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCiAJCQkJdHlwZS0+bmFtZSk7CiAJCQlyZXQgPSAtMTsKIAkJCWdvdG8gb3V0OwpAQCAtNjkyLDkgKzY5NSw2IEBACiAKIAl0eXBlLT5uZXh0ID0gdHJhY2VfdHlwZXM7CiAJdHJhY2VfdHlwZXMgPSB0eXBlOwotCWxlbiA9IHN0cmxlbih0eXBlLT5uYW1lKTsKLQlpZiAobGVuID4gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJbWF4X3RyYWNlcl90eXBlX2xlbiA9IGxlbjsKIAogIG91dDoKIAl0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcgPSBmYWxzZTsKQEAgLTcwMyw3ICs3MDMsNyBAQAogCWlmIChyZXQgfHwgIWRlZmF1bHRfYm9vdHVwX3RyYWNlcikKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKHN0cm5jbXAoZGVmYXVsdF9ib290dXBfdHJhY2VyLCB0eXBlLT5uYW1lLCBCT09UVVBfVFJBQ0VSX1NJWkUpKQorCWlmIChzdHJuY21wKGRlZmF1bHRfYm9vdHVwX3RyYWNlciwgdHlwZS0+bmFtZSwgTUFYX1RSQUNFUl9TSVpFKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU3RhcnRpbmcgdHJhY2VyICclcydcbiIsIHR5cGUtPm5hbWUpOwpAQCAtNzI1LDE0ICs3MjUsMTMgQEAKIHZvaWQgdW5yZWdpc3Rlcl90cmFjZXIoc3RydWN0IHRyYWNlciAqdHlwZSkKIHsKIAlzdHJ1Y3QgdHJhY2VyICoqdDsKLQlpbnQgbGVuOwogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJZm9yICh0ID0gJnRyYWNlX3R5cGVzOyAqdDsgdCA9ICYoKnQpLT5uZXh0KSB7CiAJCWlmICgqdCA9PSB0eXBlKQogCQkJZ290byBmb3VuZDsKIAl9Ci0JcHJfaW5mbygiVHJhY2UgJXMgbm90IHJlZ2lzdGVyZWRcbiIsIHR5cGUtPm5hbWUpOworCXByX2luZm8oIlRyYWNlciAlcyBub3QgcmVnaXN0ZXJlZFxuIiwgdHlwZS0+bmFtZSk7CiAJZ290byBvdXQ7CiAKICBmb3VuZDoKQEAgLTc0NSwxNyArNzQ0LDcgQEAKIAkJCWN1cnJlbnRfdHJhY2UtPnN0b3AoJmdsb2JhbF90cmFjZSk7CiAJCWN1cnJlbnRfdHJhY2UgPSAmbm9wX3RyYWNlOwogCX0KLQotCWlmIChzdHJsZW4odHlwZS0+bmFtZSkgIT0gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJZ290byBvdXQ7Ci0KLQltYXhfdHJhY2VyX3R5cGVfbGVuID0gMDsKLQlmb3IgKHQgPSAmdHJhY2VfdHlwZXM7ICp0OyB0ID0gJigqdCktPm5leHQpIHsKLQkJbGVuID0gc3RybGVuKCgqdCktPm5hbWUpOwotCQlpZiAobGVuID4gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJCW1heF90cmFjZXJfdHlwZV9sZW4gPSBsZW47Ci0JfQotIG91dDoKK291dDoKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogfQogCkBAIC0xOTYwLDcgKzE5NDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRyYWNlcl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB0cmFjZXJfc2VxX29wcyA9IHsKIAkuc3RhcnQJCT0gc19zdGFydCwKIAkubmV4dAkJPSBzX25leHQsCiAJLnN0b3AJCT0gc19zdG9wLApAQCAtMjE3NCw3ICsyMTYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzaG93X3RyYWNlc19zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzaG93X3RyYWNlc19zZXFfb3BzID0gewogCS5zdGFydAkJPSB0X3N0YXJ0LAogCS5uZXh0CQk9IHRfbmV4dCwKIAkuc3RvcAkJPSB0X3N0b3AsCkBAIC0yNjA0LDcgKzI1OTMsNyBAQAogdHJhY2luZ19zZXRfdHJhY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbbWF4X3RyYWNlcl90eXBlX2xlbisyXTsKKwljaGFyIGJ1ZltNQVhfVFJBQ0VSX1NJWkUrMl07CiAJaW50IHI7CiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKQEAgLTI3NTQsMTUgKzI3NDMsMTUgQEAKIHRyYWNpbmdfc2V0X3RyYWNlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKLQljaGFyIGJ1ZlttYXhfdHJhY2VyX3R5cGVfbGVuKzFdOworCWNoYXIgYnVmW01BWF9UUkFDRVJfU0laRSsxXTsKIAlpbnQgaTsKIAlzaXplX3QgcmV0OwogCWludCBlcnI7CiAKIAlyZXQgPSBjbnQ7CiAKLQlpZiAoY250ID4gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJY250ID0gbWF4X3RyYWNlcl90eXBlX2xlbjsKKwlpZiAoY250ID4gTUFYX1RSQUNFUl9TSVpFKQorCQljbnQgPSBNQVhfVFJBQ0VSX1NJWkU7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDg2YmNmZjkuLjQwNWNiODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8dHJhY2UvYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW10cmFjZS5oPgotI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CiAKICNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2VfZXZlbnQuaD4KQEAgLTM3LDcgKzM2LDYgQEAKIAlUUkFDRV9IV19CUkFOQ0hFUywKIAlUUkFDRV9LTUVNX0FMTE9DLAogCVRSQUNFX0tNRU1fRlJFRSwKLQlUUkFDRV9QT1dFUiwKIAlUUkFDRV9CTEssCiAKIAlfX1RSQUNFX0xBU1RfVFlQRSwKQEAgLTIwNyw3ICsyMDUsNiBAQAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5LAlcCiAJCQkgIFRSQUNFX0dSQVBIX1JFVCk7CQlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGh3X2JyYW5jaF9lbnRyeSwgVFJBQ0VfSFdfQlJBTkNIRVMpO1wKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfcG93ZXIsIFRSQUNFX1BPV0VSKTsgXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnksCVwKIAkJCSAgVFJBQ0VfS01FTV9BTExPQyk7CVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnksCVwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmggYi9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCmluZGV4IGE0MzE3NDguLmVhZDNkNzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaApAQCAtMzMwLDIzICszMzAsNiBAQAogCUZfcHJpbnRrKCJmcm9tOiAlbGx4IHRvOiAlbGx4IiwgX19lbnRyeS0+ZnJvbSwgX19lbnRyeS0+dG8pCiApOwogCi1GVFJBQ0VfRU5UUlkocG93ZXIsIHRyYWNlX3Bvd2VyLAotCi0JVFJBQ0VfUE9XRVIsCi0KLQlGX1NUUlVDVCgKLQkJX19maWVsZF9zdHJ1Y3QoCXN0cnVjdCBwb3dlcl90cmFjZSwJc3RhdGVfZGF0YQkpCi0JCV9fZmllbGRfZGVzYygJczY0LAlzdGF0ZV9kYXRhLAlzdGFtcAkJKQotCQlfX2ZpZWxkX2Rlc2MoCXM2NCwJc3RhdGVfZGF0YSwJZW5kCQkpCi0JCV9fZmllbGRfZGVzYygJaW50LAlzdGF0ZV9kYXRhLAl0eXBlCQkpCi0JCV9fZmllbGRfZGVzYygJaW50LAlzdGF0ZV9kYXRhLAlzdGF0ZQkJKQotCSksCi0KLQlGX3ByaW50aygiJWxseC0+JWxseCB0eXBlOiV1IHN0YXRlOiV1IiwKLQkJIF9fZW50cnktPnN0YW1wLCBfX2VudHJ5LT5lbmQsCi0JCSBfX2VudHJ5LT50eXBlLCBfX2VudHJ5LT5zdGF0ZSkKLSk7Ci0KIEZUUkFDRV9FTlRSWShrbWVtX2FsbG9jLCBrbWVtdHJhY2VfYWxsb2NfZW50cnksCiAKIAlUUkFDRV9LTUVNX0FMTE9DLApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKaW5kZXggNTVhMjVjOS4uZGQ0NGI4NyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC04LDYgKzgsNTcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlICJ0cmFjZS5oIgogCisvKgorICogV2UgY2FuJ3QgdXNlIGEgc2l6ZSBidXQgYSB0eXBlIGluIGFsbG9jX3BlcmNwdSgpCisgKiBTbyBsZXQncyBjcmVhdGUgYSBkdW1teSB0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgZGVzaXJlZCBzaXplCisgKi8KK3R5cGVkZWYgc3RydWN0IHtjaGFyIGJ1ZltGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRV07fSBwcm9maWxlX2J1Zl90OworCitjaGFyCQkqdHJhY2VfcHJvZmlsZV9idWY7CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9wcm9maWxlX2J1Zik7CisKK2NoYXIJCSp0cmFjZV9wcm9maWxlX2J1Zl9ubWk7CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCisvKiBDb3VudCB0aGUgZXZlbnRzIGluIHVzZSAocGVyIGV2ZW50IGlkLCBub3QgcGVyIGluc3RhbmNlKSAqLworc3RhdGljIGludAl0b3RhbF9wcm9maWxlX2NvdW50OworCitzdGF0aWMgaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV9ldmVudChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50KQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmZXZlbnQtPnByb2ZpbGVfY291bnQpKQorCQlyZXR1cm4gMDsKKworCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCsrKSB7CisJCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOworCQlpZiAoIWJ1ZikKKwkJCWdvdG8gZmFpbF9idWY7CisKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHRyYWNlX3Byb2ZpbGVfYnVmLCBidWYpOworCisJCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOworCQlpZiAoIWJ1ZikKKwkJCWdvdG8gZmFpbF9idWZfbm1pOworCisJCXJjdV9hc3NpZ25fcG9pbnRlcih0cmFjZV9wcm9maWxlX2J1Zl9ubWksIGJ1Zik7CisJfQorCisJcmV0ID0gZXZlbnQtPnByb2ZpbGVfZW5hYmxlKCk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJa2ZyZWUodHJhY2VfcHJvZmlsZV9idWZfbm1pKTsKK2ZhaWxfYnVmX25taToKKwlrZnJlZSh0cmFjZV9wcm9maWxlX2J1Zik7CitmYWlsX2J1ZjoKKwl0b3RhbF9wcm9maWxlX2NvdW50LS07CisJYXRvbWljX2RlYygmZXZlbnQtPnByb2ZpbGVfY291bnQpOworCisJcmV0dXJuIHJldDsKK30KKwogaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZShpbnQgZXZlbnRfaWQpCiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudDsKQEAgLTE3LDcgKzY4LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCQlpZiAoZXZlbnQtPmlkID09IGV2ZW50X2lkICYmIGV2ZW50LT5wcm9maWxlX2VuYWJsZSAmJgogCQkgICAgdHJ5X21vZHVsZV9nZXQoZXZlbnQtPm1vZCkpIHsKLQkJCXJldCA9IGV2ZW50LT5wcm9maWxlX2VuYWJsZShldmVudCk7CisJCQlyZXQgPSBmdHJhY2VfcHJvZmlsZV9lbmFibGVfZXZlbnQoZXZlbnQpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yNiw2ICs3NywzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfZXZlbnQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudCkKK3sKKwljaGFyICpidWYsICpubWlfYnVmOworCisJaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCAmZXZlbnQtPnByb2ZpbGVfY291bnQpKQorCQlyZXR1cm47CisKKwlldmVudC0+cHJvZmlsZV9kaXNhYmxlKCk7CisKKwlpZiAoIS0tdG90YWxfcHJvZmlsZV9jb3VudCkgeworCQlidWYgPSB0cmFjZV9wcm9maWxlX2J1ZjsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHRyYWNlX3Byb2ZpbGVfYnVmLCBOVUxMKTsKKworCQlubWlfYnVmID0gdHJhY2VfcHJvZmlsZV9idWZfbm1pOworCQlyY3VfYXNzaWduX3BvaW50ZXIodHJhY2VfcHJvZmlsZV9idWZfbm1pLCBOVUxMKTsKKworCQkvKgorCQkgKiBFbnN1cmUgZXZlcnkgZXZlbnRzIGluIHByb2ZpbGluZyBoYXZlIGZpbmlzaGVkIGJlZm9yZQorCQkgKiByZWxlYXNpbmcgdGhlIGJ1ZmZlcnMKKwkJICovCisJCXN5bmNocm9uaXplX3NjaGVkKCk7CisKKwkJZnJlZV9wZXJjcHUoYnVmKTsKKwkJZnJlZV9wZXJjcHUobm1pX2J1Zik7CisJfQorfQorCiB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoaW50IGV2ZW50X2lkKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnQ7CkBAIC0zMyw3ICsxMTEsNyBAQAogCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCQlpZiAoZXZlbnQtPmlkID09IGV2ZW50X2lkKSB7Ci0JCQlldmVudC0+cHJvZmlsZV9kaXNhYmxlKGV2ZW50KTsKKwkJCWZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfZXZlbnQoZXZlbnQpOwogCQkJbW9kdWxlX3B1dChldmVudC0+bW9kKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggNTZjMjYwYi4uNmYwM2M4YSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMjcxLDQyICsyNzEsMzIgQEAKIHN0YXRpYyB2b2lkICoKIHRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSB2OwogCiAJKCpwb3MpKys7CiAKLQlmb3IgKDs7KSB7Ci0JCWlmIChsaXN0ID09ICZmdHJhY2VfZXZlbnRzKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJY2FsbCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsLCBsaXN0KTsKLQorCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoY2FsbCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKIAkJLyoKIAkJICogVGhlIGZ0cmFjZSBzdWJzeXN0ZW0gaXMgZm9yIHNob3dpbmcgZm9ybWF0cyBvbmx5LgogCQkgKiBUaGV5IGNhbiBub3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCB2aWEgdGhlIGV2ZW50IGZpbGVzLgogCQkgKi8KIAkJaWYgKGNhbGwtPnJlZ2Z1bmMpCi0JCQlicmVhazsKLQotCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJCXJldHVybiBjYWxsOwogCX0KIAotCW0tPnByaXZhdGUgPSBsaXN0LT5uZXh0OwotCi0JcmV0dXJuIGNhbGw7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICp0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gTlVMTDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGw7CiAJbG9mZl90IGw7CiAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAKLQltLT5wcml2YXRlID0gZnRyYWNlX2V2ZW50cy5uZXh0OworCWNhbGwgPSBsaXN0X2VudHJ5KCZmdHJhY2VfZXZlbnRzLCBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwsIGxpc3QpOwogCWZvciAobCA9IDA7IGwgPD0gKnBvczsgKSB7Ci0JCWNhbGwgPSB0X25leHQobSwgTlVMTCwgJmwpOworCQljYWxsID0gdF9uZXh0KG0sIGNhbGwsICZsKTsKIAkJaWYgKCFjYWxsKQogCQkJYnJlYWs7CiAJfQpAQCAtMzE2LDM3ICszMDYsMjggQEAKIHN0YXRpYyB2b2lkICoKIHNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSB2OwogCiAJKCpwb3MpKys7CiAKLSByZXRyeToKLQlpZiAobGlzdCA9PSAmZnRyYWNlX2V2ZW50cykKLQkJcmV0dXJuIE5VTEw7Ci0KLQljYWxsID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwsIGxpc3QpOwotCi0JaWYgKCFjYWxsLT5lbmFibGVkKSB7Ci0JCWxpc3QgPSBsaXN0LT5uZXh0OwotCQlnb3RvIHJldHJ5OworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoY2FsbCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKKwkJaWYgKGNhbGwtPmVuYWJsZWQpCisJCQlyZXR1cm4gY2FsbDsKIAl9CiAKLQltLT5wcml2YXRlID0gbGlzdC0+bmV4dDsKLQotCXJldHVybiBjYWxsOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCAqc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IE5VTEw7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOwogCWxvZmZfdCBsOwogCiAJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOwogCi0JbS0+cHJpdmF0ZSA9IGZ0cmFjZV9ldmVudHMubmV4dDsKKwljYWxsID0gbGlzdF9lbnRyeSgmZnRyYWNlX2V2ZW50cywgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsLCBsaXN0KTsKIAlmb3IgKGwgPSAwOyBsIDw9ICpwb3M7ICkgewotCQljYWxsID0gc19uZXh0KG0sIE5VTEwsICZsKTsKKwkJY2FsbCA9IHNfbmV4dChtLCBjYWxsLCAmbCk7CiAJCWlmICghY2FsbCkKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKaW5kZXggY2E3ZDdjNC4uMjNiNjM4NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCQkgICAgc2VxX3ByaW50X2lwX3N5bShzZXEsIGl0LT5mcm9tLCBzeW1mbGFncykgJiYKIAkJICAgIHRyYWNlX3NlcV9wcmludGYoc2VxLCAiXG4iKSkKIAkJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTs7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CiAJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3Bvd2VyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxYTAwZi4uMDAwMDAwMAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKgotICogcmluZyBidWZmZXIgYmFzZWQgQy1zdGF0ZSB0cmFjZXIKLSAqCi0gKiBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBNdWNoIGlzIGJvcnJvd2VkIGZyb20gdHJhY2VfYm9vdC5jIHdoaWNoIGlzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpwb3dlcl90cmFjZTsKLXN0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0cmFjZV9wb3dlcl9lbmFibGVkOwotCi1zdGF0aWMgdm9pZCBwcm9iZV9wb3dlcl9zdGFydChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0JaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQotCQlyZXR1cm47Ci0KLQltZW1zZXQoaXQsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfdHJhY2UpKTsKLQlpdC0+c3RhdGUgPSBsZXZlbDsKLQlpdC0+dHlwZSA9IHR5cGU7Ci0JaXQtPnN0YW1wID0ga3RpbWVfZ2V0KCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHJvYmVfcG93ZXJfZW5kKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3Bvd2VyOwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKLQotCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JYnVmZmVyID0gdHItPmJ1ZmZlcjsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWl0LT5lbmQgPSBrdGltZV9nZXQoKTsKLQlkYXRhID0gdHItPmRhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX1BPV0VSLAotCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCWVudHJ5LT5zdGF0ZV9kYXRhID0gKml0OwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCAwKTsKLSBvdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvYmVfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3Bvd2VyOwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKLQotCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JYnVmZmVyID0gdHItPmJ1ZmZlcjsKLQotCW1lbXNldChpdCwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl90cmFjZSkpOwotCWl0LT5zdGF0ZSA9IGxldmVsOwotCWl0LT50eXBlID0gdHlwZTsKLQlpdC0+c3RhbXAgPSBrdGltZV9nZXQoKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpdC0+ZW5kID0gaXQtPnN0YW1wOwotCWRhdGEgPSB0ci0+ZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldOwotCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfUE9XRVIsCi0JCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OwotCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JZW50cnktPnN0YXRlX2RhdGEgPSAqaXQ7Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCi0JCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwotIG91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW50IHRyYWNpbmdfcG93ZXJfcmVnaXN0ZXIodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfcG93ZXJfc3RhcnQocHJvYmVfcG93ZXJfc3RhcnQpOwotCWlmIChyZXQpIHsKLQkJcHJfaW5mbygicG93ZXIgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCi0JCQkiIHByb2JlIHRvIHRyYWNlX3Bvd2VyX3N0YXJ0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfcG93ZXJfZW5kKHByb2JlX3Bvd2VyX2VuZCk7Ci0JaWYgKHJldCkgewotCQlwcl9pbmZvKCJwb3dlciB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKLQkJCSIgcHJvYmUgdG8gdHJhY2VfcG93ZXJfZW5kXG4iKTsKLQkJZ290byBmYWlsX3N0YXJ0OwotCX0KLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9wb3dlcl9tYXJrKHByb2JlX3Bvd2VyX21hcmspOwotCWlmIChyZXQpIHsKLQkJcHJfaW5mbygicG93ZXIgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCi0JCQkiIHByb2JlIHRvIHRyYWNlX3Bvd2VyX21hcmtcbiIpOwotCQlnb3RvIGZhaWxfZW5kOwotCX0KLQlyZXR1cm4gcmV0OwotZmFpbF9lbmQ6Ci0JdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9lbmQocHJvYmVfcG93ZXJfZW5kKTsKLWZhaWxfc3RhcnQ6Ci0JdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9zdGFydChwcm9iZV9wb3dlcl9zdGFydCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRfcG93ZXJfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl0cmFjZV9wb3dlcl9lbmFibGVkID0gMTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcF9wb3dlcl90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXRyYWNlX3Bvd2VyX2VuYWJsZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBwb3dlcl90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXRyYWNlX3Bvd2VyX2VuYWJsZWQgPSAwOwotCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfc3RhcnQocHJvYmVfcG93ZXJfc3RhcnQpOwotCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfZW5kKHByb2JlX3Bvd2VyX2VuZCk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9tYXJrKHByb2JlX3Bvd2VyX21hcmspOwotfQotCi0KLXN0YXRpYyBpbnQgcG93ZXJfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXBvd2VyX3RyYWNlID0gdHI7Ci0KLQl0cmFjZV9wb3dlcl9lbmFibGVkID0gMTsKLQl0cmFjaW5nX3Bvd2VyX3JlZ2lzdGVyKCk7Ci0KLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHBvd2VyX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICpmaWVsZCA7Ci0Jc3RydWN0IHBvd2VyX3RyYWNlICppdDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3QgdGltZXNwZWMgc3RhbXA7Ci0Jc3RydWN0IHRpbWVzcGVjIGR1cmF0aW9uOwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQlpdCA9ICZmaWVsZC0+c3RhdGVfZGF0YTsKLQlzdGFtcCA9IGt0aW1lX3RvX3RpbWVzcGVjKGl0LT5zdGFtcCk7Ci0JZHVyYXRpb24gPSBrdGltZV90b190aW1lc3BlYyhrdGltZV9zdWIoaXQtPmVuZCwgaXQtPnN0YW1wKSk7Ci0KLQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfUE9XRVIpIHsKLQkJaWYgKGl0LT50eXBlID09IFBPV0VSX0NTVEFURSkKLQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlslNWxkLiUwOWxkXSBDU1RBVEU6IEdvaW5nIHRvIEMlaSBvbiBjcHUgJWkgZm9yICVsZC4lMDlsZFxuIiwKLQkJCQkJICBzdGFtcC50dl9zZWMsCi0JCQkJCSAgc3RhbXAudHZfbnNlYywKLQkJCQkJICBpdC0+c3RhdGUsIGl0ZXItPmNwdSwKLQkJCQkJICBkdXJhdGlvbi50dl9zZWMsCi0JCQkJCSAgZHVyYXRpb24udHZfbnNlYyk7Ci0JCWlmIChpdC0+dHlwZSA9PSBQT1dFUl9QU1RBVEUpCi0JCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJTVsZC4lMDlsZF0gUFNUQVRFOiBHb2luZyB0byBQJWkgb24gY3B1ICVpXG4iLAotCQkJCQkgIHN0YW1wLnR2X3NlYywKLQkJCQkJICBzdGFtcC50dl9uc2VjLAotCQkJCQkgIGl0LT5zdGF0ZSwgaXRlci0+Y3B1KTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0JfQotCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgcG93ZXJfcHJpbnRfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqcykKLXsKLQlzZXFfcHV0cyhzLCAiIyAgIFRJTUVTVEFNUCAgICAgIFNUQVRFICBFVkVOVFxuIik7Ci0Jc2VxX3B1dHMocywgIiMgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8XG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCB0cmFjZXIgcG93ZXJfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQotewotCS5uYW1lCQk9ICJwb3dlciIsCi0JLmluaXQJCT0gcG93ZXJfdHJhY2VfaW5pdCwKLQkuc3RhcnQJCT0gc3RhcnRfcG93ZXJfdHJhY2UsCi0JLnN0b3AJCT0gc3RvcF9wb3dlcl90cmFjZSwKLQkucmVzZXQJCT0gcG93ZXJfdHJhY2VfcmVzZXQsCi0JLnByaW50X2xpbmUJPSBwb3dlcl9wcmludF9saW5lLAotCS5wcmludF9oZWFkZXIJPSBwb3dlcl9wcmludF9oZWFkZXIsCi19OwotCi1zdGF0aWMgaW50IGluaXRfcG93ZXJfdHJhY2Uodm9pZCkKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZwb3dlcl90cmFjZXIpOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfcG93ZXJfdHJhY2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCmluZGV4IDY4NzY5OWQuLjI1NDdkODggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA4NzEyY2UzLi45ZmJjZTZjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgpAQCAtMzg0LDEwICszODQsMTMgQEAKIAogc3RhdGljIHZvaWQgcHJvZl9zeXNjYWxsX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGlkKQogewotCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICpyZWM7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c19kYXRhOworCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICpyZWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICpyYXdfZGF0YTsKIAlpbnQgc3lzY2FsbF9ucjsKIAlpbnQgc2l6ZTsKKwlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzKSkKQEAgLTQwMiwyMCArNDA1LDM4IEBACiAJc2l6ZSA9IEFMSUdOKHNpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOwogCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAKLQlkbyB7Ci0JCWNoYXIgcmF3X2RhdGFbc2l6ZV07CisJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCisJCSAgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCisJCXJldHVybjsKIAotCQkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwotCQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOworCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCQlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKikgcmF3X2RhdGE7Ci0JCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKLQkJcmVjLT5lbnQudHlwZSA9IHN5c19kYXRhLT5lbnRlcl9pZDsKLQkJcmVjLT5uciA9IHN5c2NhbGxfbnI7Ci0JCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmcmVjLT5hcmdzKTsKLQkJcGVyZl90cGNvdW50ZXJfZXZlbnQoc3lzX2RhdGEtPmVudGVyX2lkLCAwLCAxLCByZWMsIHNpemUpOwotCX0gd2hpbGUoMCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGluX25taSgpKQorCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCWVsc2UKKwkJcmF3X2RhdGEgPSByY3VfZGVyZWZlcmVuY2UodHJhY2VfcHJvZmlsZV9idWYpOworCisJaWYgKCFyYXdfZGF0YSkKKwkJZ290byBlbmQ7CisKKwlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHJhd19kYXRhLCBjcHUpOworCisJLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KKwkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOworCisJcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICopIHJhd19kYXRhOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKKwlyZWMtPmVudC50eXBlID0gc3lzX2RhdGEtPmVudGVyX2lkOworCXJlYy0+bnIgPSBzeXNjYWxsX25yOworCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyAqKSZyZWMtPmFyZ3MpOworCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmVudGVyX2lkLCAwLCAxLCByZWMsIHNpemUpOworCitlbmQ6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBpbnQgcmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKQpAQCAtNDYwLDggKzQ4MSwxMiBAQAogc3RhdGljIHZvaWQgcHJvZl9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgcmV0KQogewogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKLQlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHJlYzsKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICpyZWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3lzY2FsbF9ucjsKKwljaGFyICpyYXdfZGF0YTsKKwlpbnQgc2l6ZTsKKwlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMpKQpAQCAtNDcxLDEyICs0OTYsNDYgQEAKIAlpZiAoIXN5c19kYXRhKQogCQlyZXR1cm47CiAKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZyZWMuZW50LCAwLCAwKTsKLQlyZWMuZW50LnR5cGUgPSBzeXNfZGF0YS0+ZXhpdF9pZDsKLQlyZWMubnIgPSBzeXNjYWxsX25yOwotCXJlYy5yZXQgPSBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncyk7CisJLyogV2UgY2FuIHByb2JhYmx5IGRvIHRoYXQgYXQgYnVpbGQgdGltZSAqLworCXNpemUgPSBBTElHTihzaXplb2YoKnJlYykgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOworCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAKLQlwZXJmX3RwY291bnRlcl9ldmVudChzeXNfZGF0YS0+ZXhpdF9pZCwgMCwgMSwgJnJlYywgc2l6ZW9mKHJlYykpOworCS8qCisJICogSW1wb3NzaWJsZSwgYnV0IGJlIHBhcmFub2lkIHdpdGggdGhlIGZ1dHVyZQorCSAqIEhvdyB0byBwdXQgdGhpcyBjaGVjayBvdXRzaWRlIHJ1bnRpbWU/CisJICovCisJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCisJCSJleGl0IGV2ZW50IGhhcyBncm93biBhYm92ZSBwcm9maWxlIGJ1ZmZlciBzaXplIikpCisJCXJldHVybjsKKworCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoaW5fbm1pKCkpCisJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CisJZWxzZQorCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zik7CisKKwlpZiAoIXJhd19kYXRhKQorCQlnb3RvIGVuZDsKKworCXJhd19kYXRhID0gcGVyX2NwdV9wdHIocmF3X2RhdGEsIGNwdSk7CisKKwkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLworCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisKKwlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqKXJhd19kYXRhOworCisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmcmVjLT5lbnQsIDAsIDApOworCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZXhpdF9pZDsKKwlyZWMtPm5yID0gc3lzY2FsbF9ucjsKKwlyZWMtPnJldCA9IHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzKTsKKworCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmV4aXRfaWQsIDAsIDEsIHJlYywgc2l6ZSk7CisKK2VuZDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIGludCByZWdfcHJvZl9zeXNjYWxsX2V4aXQoY2hhciAqbmFtZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IDk0ODlhMGEuLmNjODliZTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtNDgsNyArNDgsNyBAQAogCiAvKgogICogTm90ZSBhYm91dCBSQ1UgOgotICogSXQgaXMgdXNlZCB0byB0byBkZWxheSB0aGUgZnJlZSBvZiBtdWx0aXBsZSBwcm9iZXMgYXJyYXkgdW50aWwgYSBxdWllc2NlbnQKKyAqIEl0IGlzIHVzZWQgdG8gZGVsYXkgdGhlIGZyZWUgb2YgbXVsdGlwbGUgcHJvYmVzIGFycmF5IHVudGlsIGEgcXVpZXNjZW50CiAgKiBzdGF0ZSBpcyByZWFjaGVkLgogICogVHJhY2Vwb2ludCBlbnRyaWVzIG1vZGlmaWNhdGlvbnMgYXJlIHByb3RlY3RlZCBieSB0aGUgdHJhY2Vwb2ludHNfbXV0ZXguCiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmttZW1jaGVjayBiL2xpYi9LY29uZmlnLmttZW1jaGVjawppbmRleCA2MDNjODFiLi44NDZlMDM5IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5rbWVtY2hlY2sKKysrIGIvbGliL0tjb25maWcua21lbWNoZWNrCkBAIC0xLDYgKzEsOCBAQAogY29uZmlnIEhBVkVfQVJDSF9LTUVNQ0hFQ0sKIAlib29sCiAKK2lmIEhBVkVfQVJDSF9LTUVNQ0hFQ0sKKwogbWVudWNvbmZpZyBLTUVNQ0hFQ0sKIAlib29sICJrbWVtY2hlY2s6IHRyYXAgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC04OSwzICs5MSw0IEBACiAJICBhY2Nlc3NlcyB3aGVyZSBub3QgYWxsIHRoZSBiaXRzIGFyZSBpbml0aWFsaXplZCBhdCB0aGUgc2FtZSB0aW1lLgogCSAgVGhpcyBtYXkgYWxzbyBoaWRlIHNvbWUgcmVhbCBidWdzLgogCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2ZsZXhfYXJyYXkuYyBiL2xpYi9mbGV4X2FycmF5LmMKaW5kZXggN2JhZWQyZi4uNjZlZWYyZSAxMDA2NDQKLS0tIGEvbGliL2ZsZXhfYXJyYXkuYworKysgYi9saWIvZmxleF9hcnJheS5jCkBAIC0yOCwyMyArMjgsNiBAQAogCWNoYXIgZWxlbWVudHNbRkxFWF9BUlJBWV9QQVJUX1NJWkVdOwogfTsKIAotc3RhdGljIGlubGluZSBpbnQgX19lbGVtZW50c19wZXJfcGFydChpbnQgZWxlbWVudF9zaXplKQotewotCXJldHVybiBGTEVYX0FSUkFZX1BBUlRfU0laRSAvIGVsZW1lbnRfc2l6ZTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYnl0ZXNfbGVmdF9pbl9iYXNlKHZvaWQpCi17Ci0JaW50IGVsZW1lbnRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGZsZXhfYXJyYXksIHBhcnRzKTsKLQlpbnQgYnl0ZXNfbGVmdCA9IEZMRVhfQVJSQVlfQkFTRV9TSVpFIC0gZWxlbWVudF9vZmZzZXQ7Ci0JcmV0dXJuIGJ5dGVzX2xlZnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5yX2Jhc2VfcGFydF9wdHJzKHZvaWQpCi17Ci0JcmV0dXJuIGJ5dGVzX2xlZnRfaW5fYmFzZSgpIC8gc2l6ZW9mKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKik7Ci19Ci0KIC8qCiAgKiBJZiBhIHVzZXIgcmVxdWVzdHMgYW4gYWxsb2NhdGlvbiB3aGljaCBpcyBzbWFsbAogICogZW5vdWdoLCB3ZSBtYXkgc2ltcGx5IHVzZSB0aGUgc3BhY2UgaW4gdGhlCkBAIC01NCw3ICszNyw3IEBACiBzdGF0aWMgaW5saW5lIGludCBlbGVtZW50c19maXRfaW5fYmFzZShzdHJ1Y3QgZmxleF9hcnJheSAqZmEpCiB7CiAJaW50IGRhdGFfc2l6ZSA9IGZhLT5lbGVtZW50X3NpemUgKiBmYS0+dG90YWxfbnJfZWxlbWVudHM7Ci0JaWYgKGRhdGFfc2l6ZSA8PSBieXRlc19sZWZ0X2luX2Jhc2UoKSkKKwlpZiAoZGF0YV9zaXplIDw9IEZMRVhfQVJSQVlfQkFTRV9CWVRFU19MRUZUKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYzLDYgKzQ2LDcgQEAKICAqIGZsZXhfYXJyYXlfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyBmbGV4aWJsZSBhcnJheQogICogQGVsZW1lbnRfc2l6ZToJdGhlIHNpemUgb2YgaW5kaXZpZHVhbCBlbGVtZW50cyBpbiB0aGUgYXJyYXkKICAqIEB0b3RhbDoJCXRvdGFsIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHRoaXMgc2hvdWxkIGhvbGQKKyAqIEBmbGFnczoJCXBhZ2UgYWxsb2NhdGlvbiBmbGFncyB0byB1c2UgZm9yIGJhc2UgYXJyYXkKICAqCiAgKiBOb3RlOiBhbGwgbG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCiAgKgpAQCAtMTAzLDcgKzg3LDggQEAKIAkJCQkJZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IGZsZXhfYXJyYXkgKnJldDsKLQlpbnQgbWF4X3NpemUgPSBucl9iYXNlX3BhcnRfcHRycygpICogX19lbGVtZW50c19wZXJfcGFydChlbGVtZW50X3NpemUpOworCWludCBtYXhfc2l6ZSA9IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTICoKKwkJCQlGTEVYX0FSUkFZX0VMRU1FTlRTX1BFUl9QQVJUKGVsZW1lbnRfc2l6ZSk7CiAKIAkvKiBtYXhfc2l6ZSB3aWxsIGVuZCB1cCAwIGlmIGVsZW1lbnRfc2l6ZSA+IFBBR0VfU0laRSAqLwogCWlmICh0b3RhbCA+IG1heF9zaXplKQpAQCAtMTEzLDE3ICs5OCwyMSBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXQtPmVsZW1lbnRfc2l6ZSA9IGVsZW1lbnRfc2l6ZTsKIAlyZXQtPnRvdGFsX25yX2VsZW1lbnRzID0gdG90YWw7CisJaWYgKGVsZW1lbnRzX2ZpdF9pbl9iYXNlKHJldCkgJiYgIShmbGFncyAmIF9fR0ZQX1pFUk8pKQorCQltZW1zZXQocmV0LT5wYXJ0c1swXSwgRkxFWF9BUlJBWV9GUkVFLAorCQkJCQkJRkxFWF9BUlJBWV9CQVNFX0JZVEVTX0xFRlQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZmFfZWxlbWVudF90b19wYXJ0X25yKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwKIAkJCQkJdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpCiB7Ci0JcmV0dXJuIGVsZW1lbnRfbnIgLyBfX2VsZW1lbnRzX3Blcl9wYXJ0KGZhLT5lbGVtZW50X3NpemUpOworCXJldHVybiBlbGVtZW50X25yIC8gRkxFWF9BUlJBWV9FTEVNRU5UU19QRVJfUEFSVChmYS0+ZWxlbWVudF9zaXplKTsKIH0KIAogLyoqCiAgKiBmbGV4X2FycmF5X2ZyZWVfcGFydHMgLSBqdXN0IGZyZWUgdGhlIHNlY29uZC1sZXZlbCBwYWdlcworICogQGZhOgkJdGhlIGZsZXggYXJyYXkgZnJvbSB3aGljaCB0byBmcmVlIHBhcnRzCiAgKgogICogVGhpcyBpcyB0byBiZSB1c2VkIGluIGNhc2VzIHdoZXJlIHRoZSBiYXNlICdzdHJ1Y3QgZmxleF9hcnJheScKICAqIGhhcyBiZWVuIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgbm90IGJlIGZyZWUuCkBAIC0xMzEsMTEgKzEyMCwxMCBAQAogdm9pZCBmbGV4X2FycmF5X2ZyZWVfcGFydHMoc3RydWN0IGZsZXhfYXJyYXkgKmZhKQogewogCWludCBwYXJ0X25yOwotCWludCBtYXhfcGFydCA9IG5yX2Jhc2VfcGFydF9wdHJzKCk7CiAKIAlpZiAoZWxlbWVudHNfZml0X2luX2Jhc2UoZmEpKQogCQlyZXR1cm47Ci0JZm9yIChwYXJ0X25yID0gMDsgcGFydF9uciA8IG1heF9wYXJ0OyBwYXJ0X25yKyspCisJZm9yIChwYXJ0X25yID0gMDsgcGFydF9uciA8IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTOyBwYXJ0X25yKyspCiAJCWtmcmVlKGZhLT5wYXJ0c1twYXJ0X25yXSk7CiB9CiAKQEAgLTE1MCw3ICsxMzgsOCBAQAogewogCXVuc2lnbmVkIGludCBwYXJ0X29mZnNldDsKIAotCXBhcnRfb2Zmc2V0ID0gZWxlbWVudF9uciAlIF9fZWxlbWVudHNfcGVyX3BhcnQoZmEtPmVsZW1lbnRfc2l6ZSk7CisJcGFydF9vZmZzZXQgPSBlbGVtZW50X25yICUKKwkJCQlGTEVYX0FSUkFZX0VMRU1FTlRTX1BFUl9QQVJUKGZhLT5lbGVtZW50X3NpemUpOwogCXJldHVybiBwYXJ0X29mZnNldCAqIGZhLT5lbGVtZW50X3NpemU7CiB9CiAKQEAgLTE1OSwxNSArMTQ4LDEyIEBACiB7CiAJc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqcGFydCA9IGZhLT5wYXJ0c1twYXJ0X25yXTsKIAlpZiAoIXBhcnQpIHsKLQkJLyoKLQkJICogVGhpcyBsZWF2ZXMgdGhlIHBhcnQgcGFnZXMgdW5pbml0aWFsaXplZAotCQkgKiBhbmQgd2l0aCBwb3RlbnRpYWxseSByYW5kb20gZGF0YSwganVzdAotCQkgKiBhcyBpZiB0aGUgdXNlciBoYWQga21hbGxvYygpJ2QgdGhlIHdob2xlLgotCQkgKiBfX0dGUF9aRVJPIGNhbiBiZSB1c2VkIHRvIHplcm8gaXQuCi0JCSAqLwotCQlwYXJ0ID0ga21hbGxvYyhGTEVYX0FSUkFZX1BBUlRfU0laRSwgZmxhZ3MpOworCQlwYXJ0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZsZXhfYXJyYXlfcGFydCksIGZsYWdzKTsKIAkJaWYgKCFwYXJ0KQogCQkJcmV0dXJuIE5VTEw7CisJCWlmICghKGZsYWdzICYgX19HRlBfWkVSTykpCisJCQltZW1zZXQocGFydCwgRkxFWF9BUlJBWV9GUkVFLAorCQkJCXNpemVvZihzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0KSk7CiAJCWZhLT5wYXJ0c1twYXJ0X25yXSA9IHBhcnQ7CiAJfQogCXJldHVybiBwYXJ0OwpAQCAtMTc1LDkgKzE2MSwxMiBAQAogCiAvKioKICAqIGZsZXhfYXJyYXlfcHV0IC0gY29weSBkYXRhIGludG8gdGhlIGFycmF5IGF0IEBlbGVtZW50X25yCi0gKiBAc3JjOglhZGRyZXNzIG9mIGRhdGEgdG8gY29weSBpbnRvIHRoZSBhcnJheQorICogQGZhOgkJdGhlIGZsZXggYXJyYXkgdG8gY29weSBkYXRhIGludG8KICAqIEBlbGVtZW50X25yOglpbmRleCBvZiB0aGUgcG9zaXRpb24gaW4gd2hpY2ggdG8gaW5zZXJ0CiAgKiAJCXRoZSBuZXcgZWxlbWVudC4KKyAqIEBzcmM6CWFkZHJlc3Mgb2YgZGF0YSB0byBjb3B5IGludG8gdGhlIGFycmF5CisgKiBAZmxhZ3M6CXBhZ2UgYWxsb2NhdGlvbiBmbGFncyB0byB1c2UgZm9yIGFycmF5IGV4cGFuc2lvbgorICoKICAqCiAgKiBOb3RlIHRoYXQgdGhpcyAqY29waWVzKiB0aGUgY29udGVudHMgb2YgQHNyYyBpbnRvCiAgKiB0aGUgYXJyYXkuICBJZiB5b3UgYXJlIHRyeWluZyB0byBzdG9yZSBhbiBhcnJheSBvZgpAQCAtMjA3LDkgKzE5NiwzOCBAQAogfQogCiAvKioKKyAqIGZsZXhfYXJyYXlfY2xlYXIgLSBjbGVhciBlbGVtZW50IGluIGFycmF5IGF0IEBlbGVtZW50X25yCisgKiBAZmE6CQl0aGUgZmxleCBhcnJheSBvZiB0aGUgZWxlbWVudC4KKyAqIEBlbGVtZW50X25yOglpbmRleCBvZiB0aGUgcG9zaXRpb24gdG8gY2xlYXIuCisgKgorICogTG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK2ludCBmbGV4X2FycmF5X2NsZWFyKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpCit7CisJaW50IHBhcnRfbnIgPSBmYV9lbGVtZW50X3RvX3BhcnRfbnIoZmEsIGVsZW1lbnRfbnIpOworCXN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKnBhcnQ7CisJdm9pZCAqZHN0OworCisJaWYgKGVsZW1lbnRfbnIgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCQlyZXR1cm4gLUVOT1NQQzsKKwlpZiAoZWxlbWVudHNfZml0X2luX2Jhc2UoZmEpKQorCQlwYXJ0ID0gKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKikmZmEtPnBhcnRzWzBdOworCWVsc2UgeworCQlwYXJ0ID0gZmEtPnBhcnRzW3BhcnRfbnJdOworCQlpZiAoIXBhcnQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHN0ID0gJnBhcnQtPmVsZW1lbnRzW2luZGV4X2luc2lkZV9wYXJ0KGZhLCBlbGVtZW50X25yKV07CisJbWVtc2V0KGRzdCwgRkxFWF9BUlJBWV9GUkVFLCBmYS0+ZWxlbWVudF9zaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBmbGV4X2FycmF5X3ByZWFsbG9jIC0gZ3VhcmFudGVlIHRoYXQgYXJyYXkgc3BhY2UgZXhpc3RzCisgKiBAZmE6CQl0aGUgZmxleCBhcnJheSBmb3Igd2hpY2ggdG8gcHJlYWxsb2NhdGUgcGFydHMKICAqIEBzdGFydDoJaW5kZXggb2YgZmlyc3QgYXJyYXkgZWxlbWVudCBmb3Igd2hpY2ggc3BhY2UgaXMgYWxsb2NhdGVkCiAgKiBAZW5kOglpbmRleCBvZiBsYXN0IChpbmNsdXNpdmUpIGVsZW1lbnQgZm9yIHdoaWNoIHNwYWNlIGlzIGFsbG9jYXRlZAorICogQGZsYWdzOglwYWdlIGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoYXQgbm8gZnV0dXJlIGNhbGxzIHRvIGZsZXhfYXJyYXlfcHV0KCkKICAqIHdpbGwgYWxsb2NhdGUgbWVtb3J5LiAgSXQgY2FuIGJlIHVzZWQgaWYgeW91IGFyZSBleHBlY3RpbmcgdG8KQEAgLTI0Miw2ICsyNjAsNyBAQAogCiAvKioKICAqIGZsZXhfYXJyYXlfZ2V0IC0gcHVsbCBkYXRhIGJhY2sgb3V0IG9mIHRoZSBhcnJheQorICogQGZhOgkJdGhlIGZsZXggYXJyYXkgZnJvbSB3aGljaCB0byBleHRyYWN0IGRhdGEKICAqIEBlbGVtZW50X25yOglpbmRleCBvZiB0aGUgZWxlbWVudCB0byBmZXRjaCBmcm9tIHRoZSBhcnJheQogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGF0IGluZGV4IEBlbGVtZW50X25yLiAgTm90ZQpAQCAtMjY2LDMgKzI4NSw0MyBAQAogCX0KIAlyZXR1cm4gJnBhcnQtPmVsZW1lbnRzW2luZGV4X2luc2lkZV9wYXJ0KGZhLCBlbGVtZW50X25yKV07CiB9CisKK3N0YXRpYyBpbnQgcGFydF9pc19mcmVlKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKnBhcnQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQpOyBpKyspCisJCWlmIChwYXJ0LT5lbGVtZW50c1tpXSAhPSBGTEVYX0FSUkFZX0ZSRUUpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBmbGV4X2FycmF5X3NocmluayAtIGZyZWUgdW51c2VkIHNlY29uZC1sZXZlbCBwYWdlcworICogQGZhOgkJdGhlIGZsZXggYXJyYXkgdG8gc2hyaW5rCisgKgorICogRnJlZXMgYWxsIHNlY29uZC1sZXZlbCBwYWdlcyB0aGF0IGNvbnNpc3Qgc29sZWx5IG9mIHVudXNlZAorICogZWxlbWVudHMuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgZnJlZWQuCisgKgorICogTG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK2ludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqZmEpCit7CisJc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqcGFydDsKKwlpbnQgcGFydF9ucjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChlbGVtZW50c19maXRfaW5fYmFzZShmYSkpCisJCXJldHVybiByZXQ7CisJZm9yIChwYXJ0X25yID0gMDsgcGFydF9uciA8IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTOyBwYXJ0X25yKyspIHsKKwkJcGFydCA9IGZhLT5wYXJ0c1twYXJ0X25yXTsKKwkJaWYgKCFwYXJ0KQorCQkJY29udGludWU7CisJCWlmIChwYXJ0X2lzX2ZyZWUocGFydCkpIHsKKwkJCWZhLT5wYXJ0c1twYXJ0X25yXSA9IE5VTEw7CisJCQlrZnJlZShwYXJ0KTsKKwkJCXJldCsrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGQzMjBjMTguLjczYTE0YjggMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0xMDkyLDEzICsxMDkyLDggQEAKIAogCS8qIFJlamVjdCBvdXQtb2YtcmFuZ2UgdmFsdWVzIGVhcmx5LiAgTGFyZ2UgcG9zaXRpdmUgc2l6ZXMgYXJlCiAJICAgdXNlZCBmb3IgdW5rbm93biBidWZmZXIgc2l6ZXMuICovCi0JaWYgKHVubGlrZWx5KChpbnQpIHNpemUgPCAwKSkgewotCQkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUuLiAqLwotCQlzdGF0aWMgY2hhciB3YXJuID0gMTsKLQkJV0FSTl9PTih3YXJuKTsKLQkJd2FybiA9IDA7CisJaWYgKFdBUk5fT05fT05DRSgoaW50KSBzaXplIDwgMCkpCiAJCXJldHVybiAwOwotCX0KIAogCXN0ciA9IGJ1ZjsKIAllbmQgPSBidWYgKyBzaXplOwpAQCAtMTU0NCwxMyArMTUzOSw4IEBACiAKIAlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYyA9IHswfTsKIAotCWlmICh1bmxpa2VseSgoaW50KSBzaXplIDwgMCkpIHsKLQkJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lLi4gKi8KLQkJc3RhdGljIGNoYXIgd2FybiA9IDE7Ci0JCVdBUk5fT04od2Fybik7Ci0JCXdhcm4gPSAwOworCWlmIChXQVJOX09OX09OQ0UoKGludCkgc2l6ZSA8IDApKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlzdHIgPSBidWY7CiAJZW5kID0gYnVmICsgc2l6ZTsKZGlmZiAtLWdpdCBhL2xpYi96bGliX2RlZmxhdGUvZGVmbGF0ZS5jIGIvbGliL3psaWJfZGVmbGF0ZS9kZWZsYXRlLmMKaW5kZXggYzNlNGEyYmEuLjQ2YTMxZTUgMTAwNjQ0Ci0tLSBhL2xpYi96bGliX2RlZmxhdGUvZGVmbGF0ZS5jCisrKyBiL2xpYi96bGliX2RlZmxhdGUvZGVmbGF0ZS5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBVcGRhdGUgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGdpdmVuIGlucHV0IGJ5dGUKLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCisgKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gVVBEQVRFX0hBU0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQogICogICAgaW5wdXQgY2hhcmFjdGVycywgc28gdGhhdCBhIHJ1bm5pbmcgaGFzaCBrZXkgY2FuIGJlIGNvbXB1dGVkIGZyb20gdGhlCiAgKiAgICBwcmV2aW91cyBrZXkgaW5zdGVhZCBvZiBjb21wbGV0ZSByZWNhbGN1bGF0aW9uIGVhY2ggdGltZS4KICAqLwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgKiBJbnNlcnQgc3RyaW5nIHN0ciBpbiB0aGUgZGljdGlvbmFyeSBhbmQgc2V0IG1hdGNoX2hlYWQgdG8gdGhlIHByZXZpb3VzIGhlYWQKICAqIG9mIHRoZSBoYXNoIGNoYWluICh0aGUgbW9zdCByZWNlbnQgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGtleSkuIFJldHVybgogICogdGhlIHByZXZpb3VzIGxlbmd0aCBvZiB0aGUgaGFzaCBjaGFpbi4KLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMgYW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZAogICogICAgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgogICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAzYWE1MTlmLi43MWViMGI0IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTIxNCw2ICsyMTQsMTggQEAKIGNvbmZpZyBNTVVfTk9USUZJRVIKIAlib29sCiAKK2NvbmZpZyBLU00KKwlib29sICJFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmciCisJZGVwZW5kcyBvbiBNTVUKKwloZWxwCisJICBFbmFibGUgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmc6IEtTTSBwZXJpb2RpY2FsbHkgc2NhbnMgdGhvc2UgYXJlYXMKKwkgIG9mIGFuIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZSB0aGF0IGFuIGFwcCBoYXMgYWR2aXNlZCBtYXkgYmUKKwkgIG1lcmdlYWJsZS4gIFdoZW4gaXQgZmluZHMgcGFnZXMgb2YgaWRlbnRpY2FsIGNvbnRlbnQsIGl0IHJlcGxhY2VzCisJICB0aGUgbWFueSBpbnN0YW5jZXMgYnkgYSBzaW5nbGUgcmVzaWRlbnQgcGFnZSB3aXRoIHRoYXQgY29udGVudCwgc28KKwkgIHNhdmluZyBtZW1vcnkgdW50aWwgb25lIG9yIGFub3RoZXIgYXBwIG5lZWRzIHRvIG1vZGlmeSB0aGUgY29udGVudC4KKwkgIFJlY29tbWVuZGVkIGZvciB1c2Ugd2l0aCBLVk0sIG9yIHdpdGggb3RoZXIgZHVwbGljYXRpdmUgYXBwbGljYXRpb25zLgorCSAgU2VlIERvY3VtZW50YXRpb24vdm0va3NtLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwogY29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUgogICAgICAgICBpbnQgIkxvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb24iCiAgICAgICAgIGRlZmF1bHQgNDA5NgpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWcKaW5kZXggYWE5OWZkMS4uYWY3Y2ZiNCAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZy5kZWJ1ZworKysgYi9tbS9LY29uZmlnLmRlYnVnCkBAIC02LDcgKzYsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFVubWFwIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyBhZnRlciBmcmVlX3BhZ2VzKCkuCiAJICBUaGlzIHJlc3VsdHMgaW4gYSBsYXJnZSBzbG93ZG93biwgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcwotCSAgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLgorCSAgb2YgbWVtb3J5IGNvcnJ1cHRpb24uCiAKIGNvbmZpZyBXQU5UX1BBR0VfREVCVUdfRkxBR1MKIAlib29sCkBAIC0xNywxMSArMTcsMTEgQEAKIAlkZXBlbmRzIG9uICFISUJFUk5BVElPTgogCXNlbGVjdCBERUJVR19QQUdFQUxMT0MKIAlzZWxlY3QgV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgICBGaWxsIHRoZSBwYWdlcyB3aXRoIHBvaXNvbiBwYXR0ZXJucyBhZnRlciBmcmVlX3BhZ2VzKCkgYW5kIHZlcmlmeQogCSAgIHRoZSBwYXR0ZXJucyBiZWZvcmUgYWxsb2NfcGFnZXMoKS4gVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sCi0JICAgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCisJICAgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbi4KIAotCSAgIFRoaXMgb3B0aW9uIGNhbm5vdCBlbmFsYmUgd2l0aCBoaWJlcm5hdGlvbi4gT3RoZXJ3aXNlLCBpdCB3aWxsIGdldAotCSAgIHdyb25nIG1lc3NhZ2VzIGZvciBtZW1vcnkgY29ycnVwdGlvbiBiZWNhdXNlIHRoZSBmcmVlIHBhZ2VzIGFyZSBub3QKLQkgICBzYXZlZCB0byB0aGUgc3VzcGVuZCBpbWFnZS4KKwkgICBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgZW5hYmxlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGhpYmVybmF0aW9uIGFzCisJICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHdhcm5pbmdzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFmdGVyCisJICAgYSByZXN1bWUgYmVjYXVzZSBmcmVlIHBhZ2VzIGFyZSBub3Qgc2F2ZWQgdG8gdGhlIHN1c3BlbmQgaW1hZ2UuCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGVhNGIxOGIuLjg4MTkzZDcgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0xMSwxMCArMTEsMTAgQEAKIAkJCSAgIG1hY2Nlc3MubyBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2subyBcCiAJCQkgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaG1lbS5vIFwKIAkJCSAgIHByaW9fdHJlZS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFwKLQkJCSAgIHBhZ2VfaXNvbGF0aW9uLm8gbW1faW5pdC5vICQobW11LXkpCisJCQkgICBwYWdlX2lzb2xhdGlvbi5vIG1tX2luaXQubyBtbXVfY29udGV4dC5vIFwKKwkJCSAgIHBhZ2V3YWxrLm8gJChtbXUteSkKIG9iai15ICs9IGluaXQtbW0ubwogCi1vYmotJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpICs9IHBhZ2V3YWxrLm8KIG9iai0kKENPTkZJR19CT1VOQ0UpCSs9IGJvdW5jZS5vCiBvYmotJChDT05GSUdfU1dBUCkJKz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vIHRocmFzaC5vCiBvYmotJChDT05GSUdfSEFTX0RNQSkJKz0gZG1hcG9vbC5vCkBAIC0yNSw2ICsyNSw3IEBACiBvYmotJChDT05GSUdfVE1QRlNfUE9TSVhfQUNMKSArPSBzaG1lbV9hY2wubwogb2JqLSQoQ09ORklHX1NMT0IpICs9IHNsb2Iubwogb2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm8KK29iai0kKENPTkZJR19LU00pICs9IGtzbS5vCiBvYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICs9IGRlYnVnLXBhZ2VhbGxvYy5vCiBvYmotJChDT05GSUdfU0xBQikgKz0gc2xhYi5vCiBvYmotJChDT05GSUdfU0xVQikgKz0gc2x1Yi5vCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggZGQ1MWM2OGUuLmJjYzczNzIgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTExOSw2ICsxMTksOCBAQAogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwogCW1hcHBpbmctPm5ycGFnZXMtLTsKIAlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9QQUdFUyk7CisJaWYgKFBhZ2VTd2FwQmFja2VkKHBhZ2UpKQorCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0hNRU0pOwogCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAKIAkvKgpAQCAtNDMxLDYgKzQzMyw4IEBACiAJCWlmIChsaWtlbHkoIWVycm9yKSkgewogCQkJbWFwcGluZy0+bnJwYWdlcysrOwogCQkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOworCQkJaWYgKFBhZ2VTd2FwQmFja2VkKHBhZ2UpKQorCQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9TSE1FTSk7CiAJCQlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJCX0gZWxzZSB7CiAJCQlwYWdlLT5tYXBwaW5nID0gTlVMTDsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBiMTZkNjM2Li44MTVkYmQ0IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC00NTYsMjQgKzQ1Niw2IEBACiAJaC0+ZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXSsrOwogfQogCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmRlcXVldWVfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpCi17Ci0JaW50IG5pZDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7Ci0KLQlmb3IgKG5pZCA9IDA7IG5pZCA8IE1BWF9OVU1OT0RFUzsgKytuaWQpIHsKLQkJaWYgKCFsaXN0X2VtcHR5KCZoLT5odWdlcGFnZV9mcmVlbGlzdHNbbmlkXSkpIHsKLQkJCXBhZ2UgPSBsaXN0X2VudHJ5KGgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tuaWRdLm5leHQsCi0JCQkJCSAgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJCWgtPmZyZWVfaHVnZV9wYWdlcy0tOwotCQkJaC0+ZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXS0tOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHBhZ2U7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGVxdWV1ZV9odWdlX3BhZ2Vfdm1hKHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgYXZvaWRfcmVzZXJ2ZSkKQEAgLTY0MSw3ICs2MjMsNyBAQAogCiAvKgogICogVXNlIGEgaGVscGVyIHZhcmlhYmxlIHRvIGZpbmQgdGhlIG5leHQgbm9kZSBhbmQgdGhlbgotICogY29weSBpdCBiYWNrIHRvIGh1Z2V0bGJfbmV4dF9uaWQgYWZ0ZXJ3YXJkczoKKyAqIGNvcHkgaXQgYmFjayB0byBuZXh0X25pZF90b19hbGxvYyBhZnRlcndhcmRzOgogICogb3RoZXJ3aXNlIHRoZXJlJ3MgYSB3aW5kb3cgaW4gd2hpY2ggYSByYWNlciBtaWdodAogICogcGFzcyBpbnZhbGlkIG5pZCBNQVhfTlVNTk9ERVMgdG8gYWxsb2NfcGFnZXNfZXhhY3Rfbm9kZS4KICAqIEJ1dCB3ZSBkb24ndCBuZWVkIHRvIHVzZSBhIHNwaW5fbG9jayBoZXJlOiBpdCByZWFsbHkKQEAgLTY1MCwxMyArNjMyLDEzIEBACiAgKiBpZiB3ZSBqdXN0IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYSBodWdlcGFnZSBzbyB0aGF0CiAgKiB0aGUgbmV4dCBjYWxsZXIgZ2V0cyBodWdlcGFnZXMgb24gdGhlIG5leHQgbm9kZS4KICAqLwotc3RhdGljIGludCBoc3RhdGVfbmV4dF9ub2RlKHN0cnVjdCBoc3RhdGUgKmgpCitzdGF0aWMgaW50IGhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2Moc3RydWN0IGhzdGF0ZSAqaCkKIHsKIAlpbnQgbmV4dF9uaWQ7Ci0JbmV4dF9uaWQgPSBuZXh0X25vZGUoaC0+aHVnZXRsYl9uZXh0X25pZCwgbm9kZV9vbmxpbmVfbWFwKTsKKwluZXh0X25pZCA9IG5leHRfbm9kZShoLT5uZXh0X25pZF90b19hbGxvYywgbm9kZV9vbmxpbmVfbWFwKTsKIAlpZiAobmV4dF9uaWQgPT0gTUFYX05VTU5PREVTKQogCQluZXh0X25pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLQloLT5odWdldGxiX25leHRfbmlkID0gbmV4dF9uaWQ7CisJaC0+bmV4dF9uaWRfdG9fYWxsb2MgPSBuZXh0X25pZDsKIAlyZXR1cm4gbmV4dF9uaWQ7CiB9CiAKQEAgLTY2NywxNCArNjQ5LDE1IEBACiAJaW50IG5leHRfbmlkOwogCWludCByZXQgPSAwOwogCi0Jc3RhcnRfbmlkID0gaC0+aHVnZXRsYl9uZXh0X25pZDsKKwlzdGFydF9uaWQgPSBoLT5uZXh0X25pZF90b19hbGxvYzsKKwluZXh0X25pZCA9IHN0YXJ0X25pZDsKIAogCWRvIHsKLQkJcGFnZSA9IGFsbG9jX2ZyZXNoX2h1Z2VfcGFnZV9ub2RlKGgsIGgtPmh1Z2V0bGJfbmV4dF9uaWQpOworCQlwYWdlID0gYWxsb2NfZnJlc2hfaHVnZV9wYWdlX25vZGUoaCwgbmV4dF9uaWQpOwogCQlpZiAocGFnZSkKIAkJCXJldCA9IDE7Ci0JCW5leHRfbmlkID0gaHN0YXRlX25leHRfbm9kZShoKTsKLQl9IHdoaWxlICghcGFnZSAmJiBoLT5odWdldGxiX25leHRfbmlkICE9IHN0YXJ0X25pZCk7CisJCW5leHRfbmlkID0gaHN0YXRlX25leHRfbm9kZV90b19hbGxvYyhoKTsKKwl9IHdoaWxlICghcGFnZSAmJiBuZXh0X25pZCAhPSBzdGFydF9uaWQpOwogCiAJaWYgKHJldCkKIAkJY291bnRfdm1fZXZlbnQoSFRMQl9CVUREWV9QR0FMTE9DKTsKQEAgLTY4NCw2ICs2NjcsNjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogaGVscGVyIGZvciBmcmVlX3Bvb2xfaHVnZV9wYWdlKCkgLSBmaW5kIG5leHQgbm9kZQorICogZnJvbSB3aGljaCB0byBmcmVlIGEgaHVnZSBwYWdlCisgKi8KK3N0YXRpYyBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgpCit7CisJaW50IG5leHRfbmlkOworCW5leHRfbmlkID0gbmV4dF9ub2RlKGgtPm5leHRfbmlkX3RvX2ZyZWUsIG5vZGVfb25saW5lX21hcCk7CisJaWYgKG5leHRfbmlkID09IE1BWF9OVU1OT0RFUykKKwkJbmV4dF9uaWQgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CisJaC0+bmV4dF9uaWRfdG9fZnJlZSA9IG5leHRfbmlkOworCXJldHVybiBuZXh0X25pZDsKK30KKworLyoKKyAqIEZyZWUgaHVnZSBwYWdlIGZyb20gcG9vbCBmcm9tIG5leHQgbm9kZSB0byBmcmVlLgorICogQXR0ZW1wdCB0byBrZWVwIHBlcnNpc3RlbnQgaHVnZSBwYWdlcyBtb3JlIG9yIGxlc3MKKyAqIGJhbGFuY2VkIG92ZXIgYWxsb3dlZCBub2Rlcy4KKyAqIENhbGxlZCB3aXRoIGh1Z2V0bGJfbG9jayBsb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQgZnJlZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLCBib29sIGFjY3Rfc3VycGx1cykKK3sKKwlpbnQgc3RhcnRfbmlkOworCWludCBuZXh0X25pZDsKKwlpbnQgcmV0ID0gMDsKKworCXN0YXJ0X25pZCA9IGgtPm5leHRfbmlkX3RvX2ZyZWU7CisJbmV4dF9uaWQgPSBzdGFydF9uaWQ7CisKKwlkbyB7CisJCS8qCisJCSAqIElmIHdlJ3JlIHJldHVybmluZyB1bnVzZWQgc3VycGx1cyBwYWdlcywgb25seSBleGFtaW5lCisJCSAqIG5vZGVzIHdpdGggc3VycGx1cyBwYWdlcy4KKwkJICovCisJCWlmICgoIWFjY3Rfc3VycGx1cyB8fCBoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXh0X25pZF0pICYmCisJCSAgICAhbGlzdF9lbXB0eSgmaC0+aHVnZXBhZ2VfZnJlZWxpc3RzW25leHRfbmlkXSkpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0KKwkJCQlsaXN0X2VudHJ5KGgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tuZXh0X25pZF0ubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcGFnZSwgbHJ1KTsKKwkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCQkJaC0+ZnJlZV9odWdlX3BhZ2VzLS07CisJCQloLT5mcmVlX2h1Z2VfcGFnZXNfbm9kZVtuZXh0X25pZF0tLTsKKwkJCWlmIChhY2N0X3N1cnBsdXMpIHsKKwkJCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXMtLTsKKwkJCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXh0X25pZF0tLTsKKwkJCX0KKwkJCXVwZGF0ZV9hbmRfZnJlZV9wYWdlKGgsIHBhZ2UpOworCQkJcmV0ID0gMTsKKwkJfQorCQluZXh0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShoKTsKKwl9IHdoaWxlICghcmV0ICYmIG5leHRfbmlkICE9IHN0YXJ0X25pZCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2J1ZGR5X2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLAogCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTg1NSwyMiArODkzLDEzIEBACiAgKiBXaGVuIHJlbGVhc2luZyBhIGh1Z2V0bGIgcG9vbCByZXNlcnZhdGlvbiwgYW55IHN1cnBsdXMgcGFnZXMgdGhhdCB3ZXJlCiAgKiBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGUgcmVzZXJ2YXRpb24gbXVzdCBiZSBleHBsaWNpdGx5IGZyZWVkIGlmIHRoZXkgd2VyZQogICogbmV2ZXIgdXNlZC4KKyAqIENhbGxlZCB3aXRoIGh1Z2V0bGJfbG9jayBoZWxkLgogICovCiBzdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwKIAkJCQkJdW5zaWduZWQgbG9uZyB1bnVzZWRfcmVzdl9wYWdlcykKIHsKLQlzdGF0aWMgaW50IG5pZCA9IC0xOwotCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAKLQkvKgotCSAqIFdlIHdhbnQgdG8gcmVsZWFzZSBhcyBtYW55IHN1cnBsdXMgcGFnZXMgYXMgcG9zc2libGUsIHNwcmVhZAotCSAqIGV2ZW5seSBhY3Jvc3MgYWxsIG5vZGVzLiBJdGVyYXRlIGFjcm9zcyBhbGwgbm9kZXMgdW50aWwgd2UKLQkgKiBjYW4gbm8gbG9uZ2VyIGZyZWUgdW5yZXNlcnZlZCBzdXJwbHVzIHBhZ2VzLiBUaGlzIG9jY3VycyB3aGVuCi0JICogdGhlIG5vZGVzIHdpdGggc3VycGx1cyBwYWdlcyBoYXZlIG5vIGZyZWUgcGFnZXMuCi0JICovCi0JdW5zaWduZWQgbG9uZyByZW1haW5pbmdfaXRlcmF0aW9ucyA9IG5yX29ubGluZV9ub2RlczsKLQogCS8qIFVuY29tbWl0IHRoZSByZXNlcnZhdGlvbiAqLwogCWgtPnJlc3ZfaHVnZV9wYWdlcyAtPSB1bnVzZWRfcmVzdl9wYWdlczsKIApAQCAtODgwLDI2ICs5MDksMTcgQEAKIAogCW5yX3BhZ2VzID0gbWluKHVudXNlZF9yZXN2X3BhZ2VzLCBoLT5zdXJwbHVzX2h1Z2VfcGFnZXMpOwogCi0Jd2hpbGUgKHJlbWFpbmluZ19pdGVyYXRpb25zLS0gJiYgbnJfcGFnZXMpIHsKLQkJbmlkID0gbmV4dF9ub2RlKG5pZCwgbm9kZV9vbmxpbmVfbWFwKTsKLQkJaWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMpCi0JCQluaWQgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7Ci0KLQkJaWYgKCFoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZoLT5odWdlcGFnZV9mcmVlbGlzdHNbbmlkXSkpIHsKLQkJCXBhZ2UgPSBsaXN0X2VudHJ5KGgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tuaWRdLm5leHQsCi0JCQkJCSAgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJCXVwZGF0ZV9hbmRfZnJlZV9wYWdlKGgsIHBhZ2UpOwotCQkJaC0+ZnJlZV9odWdlX3BhZ2VzLS07Ci0JCQloLT5mcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdLS07Ci0JCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXMtLTsKLQkJCWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0tLTsKLQkJCW5yX3BhZ2VzLS07Ci0JCQlyZW1haW5pbmdfaXRlcmF0aW9ucyA9IG5yX29ubGluZV9ub2RlczsKLQkJfQorCS8qCisJICogV2Ugd2FudCB0byByZWxlYXNlIGFzIG1hbnkgc3VycGx1cyBwYWdlcyBhcyBwb3NzaWJsZSwgc3ByZWFkCisJICogZXZlbmx5IGFjcm9zcyBhbGwgbm9kZXMuIEl0ZXJhdGUgYWNyb3NzIGFsbCBub2RlcyB1bnRpbCB3ZQorCSAqIGNhbiBubyBsb25nZXIgZnJlZSB1bnJlc2VydmVkIHN1cnBsdXMgcGFnZXMuIFRoaXMgb2NjdXJzIHdoZW4KKwkgKiB0aGUgbm9kZXMgd2l0aCBzdXJwbHVzIHBhZ2VzIGhhdmUgbm8gZnJlZSBwYWdlcy4KKwkgKiBmcmVlX3Bvb2xfaHVnZV9wYWdlKCkgd2lsbCBiYWxhbmNlIHRoZSB0aGUgZnJlZXMgYWNyb3NzIHRoZQorCSAqIG9uLWxpbmUgbm9kZXMgZm9yIHVzIGFuZCB3aWxsIGhhbmRsZSB0aGUgaHN0YXRlIGFjY291bnRpbmcuCisJICovCisJd2hpbGUgKG5yX3BhZ2VzLS0pIHsKKwkJaWYgKCFmcmVlX3Bvb2xfaHVnZV9wYWdlKGgsIDEpKQorCQkJYnJlYWs7CiAJfQogfQogCkBAIC0xMDA4LDkgKzEwMjgsMTAgQEAKIAkJdm9pZCAqYWRkcjsKIAogCQlhZGRyID0gX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYygKLQkJCQlOT0RFX0RBVEEoaC0+aHVnZXRsYl9uZXh0X25pZCksCisJCQkJTk9ERV9EQVRBKGgtPm5leHRfbmlkX3RvX2FsbG9jKSwKIAkJCQlodWdlX3BhZ2Vfc2l6ZShoKSwgaHVnZV9wYWdlX3NpemUoaCksIDApOwogCisJCWhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2MoaCk7CiAJCWlmIChhZGRyKSB7CiAJCQkvKgogCQkJICogVXNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGh1Z2UgcGFnZSB0byBzdG9yZSB0aGUKQEAgLTEwMjAsNyArMTA0MSw2IEBACiAJCQltID0gYWRkcjsKIAkJCWdvdG8gZm91bmQ7CiAJCX0KLQkJaHN0YXRlX25leHRfbm9kZShoKTsKIAkJbnJfbm9kZXMtLTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMTQxLDMxICsxMTYxLDQzIEBACiAgKi8KIHN0YXRpYyBpbnQgYWRqdXN0X3Bvb2xfc3VycGx1cyhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgZGVsdGEpCiB7Ci0Jc3RhdGljIGludCBwcmV2X25pZDsKLQlpbnQgbmlkID0gcHJldl9uaWQ7CisJaW50IHN0YXJ0X25pZCwgbmV4dF9uaWQ7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9CVUdfT04oZGVsdGEgIT0gLTEgJiYgZGVsdGEgIT0gMSk7Ci0JZG8gewotCQluaWQgPSBuZXh0X25vZGUobmlkLCBub2RlX29ubGluZV9tYXApOwotCQlpZiAobmlkID09IE1BWF9OVU1OT0RFUykKLQkJCW5pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKIAotCQkvKiBUbyBzaHJpbmsgb24gdGhpcyBub2RlLCB0aGVyZSBtdXN0IGJlIGEgc3VycGx1cyBwYWdlICovCi0JCWlmIChkZWx0YSA8IDAgJiYgIWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0pCi0JCQljb250aW51ZTsKLQkJLyogU3VycGx1cyBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgKi8KLQkJaWYgKGRlbHRhID4gMCAmJiBoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuaWRdID49CisJaWYgKGRlbHRhIDwgMCkKKwkJc3RhcnRfbmlkID0gaC0+bmV4dF9uaWRfdG9fYWxsb2M7CisJZWxzZQorCQlzdGFydF9uaWQgPSBoLT5uZXh0X25pZF90b19mcmVlOworCW5leHRfbmlkID0gc3RhcnRfbmlkOworCisJZG8geworCQlpbnQgbmlkID0gbmV4dF9uaWQ7CisJCWlmIChkZWx0YSA8IDApICB7CisJCQluZXh0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2MoaCk7CisJCQkvKgorCQkJICogVG8gc2hyaW5rIG9uIHRoaXMgbm9kZSwgdGhlcmUgbXVzdCBiZSBhIHN1cnBsdXMgcGFnZQorCQkJICovCisJCQlpZiAoIWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0pCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKGRlbHRhID4gMCkgeworCQkJbmV4dF9uaWQgPSBoc3RhdGVfbmV4dF9ub2RlX3RvX2ZyZWUoaCk7CisJCQkvKgorCQkJICogU3VycGx1cyBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMKKwkJCSAqLworCQkJaWYgKGgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0gPj0KIAkJCQkJCWgtPm5yX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKQotCQkJY29udGludWU7CisJCQkJY29udGludWU7CisJCX0KIAogCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXMgKz0gZGVsdGE7CiAJCWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0gKz0gZGVsdGE7CiAJCXJldCA9IDE7CiAJCWJyZWFrOwotCX0gd2hpbGUgKG5pZCAhPSBwcmV2X25pZCk7CisJfSB3aGlsZSAobmV4dF9uaWQgIT0gc3RhcnRfbmlkKTsKIAotCXByZXZfbmlkID0gbmlkOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMjcsMTAgKzEyNTksOCBAQAogCW1pbl9jb3VudCA9IG1heChjb3VudCwgbWluX2NvdW50KTsKIAl0cnlfdG9fZnJlZV9sb3coaCwgbWluX2NvdW50KTsKIAl3aGlsZSAobWluX2NvdW50IDwgcGVyc2lzdGVudF9odWdlX3BhZ2VzKGgpKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gZGVxdWV1ZV9odWdlX3BhZ2UoaCk7Ci0JCWlmICghcGFnZSkKKwkJaWYgKCFmcmVlX3Bvb2xfaHVnZV9wYWdlKGgsIDApKQogCQkJYnJlYWs7Ci0JCXVwZGF0ZV9hbmRfZnJlZV9wYWdlKGgsIHBhZ2UpOwogCX0KIAl3aGlsZSAoY291bnQgPCBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHsKIAkJaWYgKCFhZGp1c3RfcG9vbF9zdXJwbHVzKGgsIDEpKQpAQCAtMTQ0Miw3ICsxNDcyLDggQEAKIAloLT5mcmVlX2h1Z2VfcGFnZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7ICsraSkKIAkJSU5JVF9MSVNUX0hFQUQoJmgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tpXSk7Ci0JaC0+aHVnZXRsYl9uZXh0X25pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKwloLT5uZXh0X25pZF90b19hbGxvYyA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKwloLT5uZXh0X25pZF90b19mcmVlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwogCXNucHJpbnRmKGgtPm5hbWUsIEhTVEFURV9OQU1FX0xFTiwgImh1Z2VwYWdlcy0lbHVrQiIsCiAJCQkJCWh1Z2VfcGFnZV9zaXplKGgpLzEwMjQpOwogCkBAIC0xOTg1LDYgKzIwMTYsMjYgQEAKIAlyZXR1cm4gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgaWR4KTsKIH0KIAorLyoKKyAqIFJldHVybiB3aGV0aGVyIHRoZXJlIGlzIGEgcGFnZWNhY2hlIHBhZ2UgdG8gYmFjayBnaXZlbiBhZGRyZXNzIHdpdGhpbiBWTUEuCisgKiBDYWxsZXIgZm9sbG93X2h1Z2V0bGJfcGFnZSgpIGhvbGRzIHBhZ2VfdGFibGVfbG9jayBzbyB3ZSBjYW5ub3QgbG9ja19wYWdlLgorICovCitzdGF0aWMgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJcGdvZmZfdCBpZHg7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CisJaWR4ID0gdm1hX2h1Z2VjYWNoZV9vZmZzZXQoaCwgdm1hLCBhZGRyZXNzKTsKKworCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7CisJaWYgKHBhZ2UpCisJCXB1dF9wYWdlKHBhZ2UpOworCXJldHVybiBwYWdlICE9IE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTIxODAsNTQgKzIyMzEsNTUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBodWdlX3plcm9wYWdlX29rKHB0ZV90ICpwdGVwLCBpbnQgd3JpdGUsIGludCBzaGFyZWQpCi17Ci0JaWYgKCFwdGVwIHx8IHdyaXRlIHx8IHNoYXJlZCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZXApKTsKLX0KLQogaW50IGZvbGxvd19odWdldGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcywKIAkJCXVuc2lnbmVkIGxvbmcgKnBvc2l0aW9uLCBpbnQgKmxlbmd0aCwgaW50IGksCi0JCQlpbnQgd3JpdGUpCisJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm5fb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAqcG9zaXRpb247CiAJaW50IHJlbWFpbmRlciA9ICpsZW5ndGg7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKLQlpbnQgemVyb3BhZ2Vfb2sgPSAwOwotCWludCBzaGFyZWQgPSB2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEOwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAl3aGlsZSAodmFkZHIgPCB2bWEtPnZtX2VuZCAmJiByZW1haW5kZXIpIHsKIAkJcHRlX3QgKnB0ZTsKKwkJaW50IGFic2VudDsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAkJLyoKIAkJICogU29tZSBhcmNocyAoc3BhcmM2NCwgc2gqKSBoYXZlIG11bHRpcGxlIHB0ZV90cyB0bwotCQkgKiBlYWNoIGh1Z2VwYWdlLiAgV2UgaGF2ZSB0byBtYWtlICogc3VyZSB3ZSBnZXQgdGhlCisJCSAqIGVhY2ggaHVnZXBhZ2UuICBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlCiAJCSAqIGZpcnN0LCBmb3IgdGhlIHBhZ2UgaW5kZXhpbmcgYmVsb3cgdG8gd29yay4KIAkJICovCiAJCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgdmFkZHIgJiBodWdlX3BhZ2VfbWFzayhoKSk7Ci0JCWlmIChodWdlX3plcm9wYWdlX29rKHB0ZSwgd3JpdGUsIHNoYXJlZCkpCi0JCQl6ZXJvcGFnZV9vayA9IDE7CisJCWFic2VudCA9ICFwdGUgfHwgaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpOwogCi0JCWlmICghcHRlIHx8Ci0JCSAgICAoaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpICYmICF6ZXJvcGFnZV9vaykgfHwKLQkJICAgICh3cml0ZSAmJiAhcHRlX3dyaXRlKGh1Z2VfcHRlcF9nZXQocHRlKSkpKSB7CisJCS8qCisJCSAqIFdoZW4gY29yZWR1bXBpbmcsIGl0IHN1aXRzIGdldF9kdW1wX3BhZ2UgaWYgd2UganVzdCByZXR1cm4KKwkJICogYW4gZXJyb3Igd2hlcmUgdGhlcmUncyBhbiBlbXB0eSBzbG90IHdpdGggbm8gaHVnZSBwYWdlY2FjaGUKKwkJICogdG8gYmFjayBpdC4gIFRoaXMgd2F5LCB3ZSBhdm9pZCBhbGxvY2F0aW5nIGEgaHVnZXBhZ2UsIGFuZAorCQkgKiB0aGUgc3BhcnNlIGR1bXBmaWxlIGF2b2lkcyBhbGxvY2F0aW5nIGRpc2sgYmxvY2tzLCBidXQgaXRzCisJCSAqIGh1Z2UgaG9sZXMgc3RpbGwgc2hvdyB1cCB3aXRoIHplcm9lcyB3aGVyZSB0aGV5IG5lZWQgdG8gYmUuCisJCSAqLworCQlpZiAoYWJzZW50ICYmIChmbGFncyAmIEZPTExfRFVNUCkgJiYKKwkJICAgICFodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoaCwgdm1hLCB2YWRkcikpIHsKKwkJCXJlbWFpbmRlciA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChhYnNlbnQgfHwKKwkJICAgICgoZmxhZ3MgJiBGT0xMX1dSSVRFKSAmJiAhcHRlX3dyaXRlKGh1Z2VfcHRlcF9nZXQocHRlKSkpKSB7CiAJCQlpbnQgcmV0OwogCiAJCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JCQlyZXQgPSBodWdldGxiX2ZhdWx0KG1tLCB2bWEsIHZhZGRyLCB3cml0ZSk7CisJCQlyZXQgPSBodWdldGxiX2ZhdWx0KG1tLCB2bWEsIHZhZGRyLAorCQkJCShmbGFncyAmIEZPTExfV1JJVEUpID8gRkFVTFRfRkxBR19XUklURSA6IDApOwogCQkJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAkJCWlmICghKHJldCAmIFZNX0ZBVUxUX0VSUk9SKSkKIAkJCQljb250aW51ZTsKIAogCQkJcmVtYWluZGVyID0gMDsKLQkJCWlmICghaSkKLQkJCQlpID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIyMzUsMTAgKzIyODcsNyBAQAogCQlwYWdlID0gcHRlX3BhZ2UoaHVnZV9wdGVwX2dldChwdGUpKTsKIHNhbWVfcGFnZToKIAkJaWYgKHBhZ2VzKSB7Ci0JCQlpZiAoemVyb3BhZ2Vfb2spCi0JCQkJcGFnZXNbaV0gPSBaRVJPX1BBR0UoMCk7Ci0JCQllbHNlCi0JCQkJcGFnZXNbaV0gPSBtZW1fbWFwX29mZnNldChwYWdlLCBwZm5fb2Zmc2V0KTsKKwkJCXBhZ2VzW2ldID0gbWVtX21hcF9vZmZzZXQocGFnZSwgcGZuX29mZnNldCk7CiAJCQlnZXRfcGFnZShwYWdlc1tpXSk7CiAJCX0KIApAQCAtMjI2Miw3ICsyMzExLDcgQEAKIAkqbGVuZ3RoID0gcmVtYWluZGVyOwogCSpwb3NpdGlvbiA9IHZhZGRyOwogCi0JcmV0dXJuIGk7CisJcmV0dXJuIGkgPyBpIDogLUVGQVVMVDsKIH0KIAogdm9pZCBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggZjI5MGM0ZC4uMjJlYzhkMiAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAorKysgYi9tbS9pbnRlcm5hbC5oCkBAIC0zNyw2ICszNyw4IEBACiAJYXRvbWljX2RlYygmcGFnZS0+X2NvdW50KTsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9tZW1tYXBfcGZuOworCiAvKgogICogaW4gbW0vdm1zY2FuLmM6CiAgKi8KQEAgLTQ2LDcgKzQ4LDYgQEAKIC8qCiAgKiBpbiBtbS9wYWdlX2FsbG9jLmMKICAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9tZW1tYXBfcGZuOwogZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzX2Jvb3RtZW0oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb3JkZXIpOwogCkBAIC0yNTAsMTMgKzI1MSw4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqLwogCi0jZGVmaW5lIEdVUF9GTEFHU19XUklURSAgICAgICAgICAgICAgICAgIDB4MQotI2RlZmluZSBHVVBfRkxBR1NfRk9SQ0UgICAgICAgICAgICAgICAgICAweDIKLSNkZWZpbmUgR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMgMHg0Ci0jZGVmaW5lIEdVUF9GTEFHU19JR05PUkVfU0lHS0lMTCAgICAgICAgIDB4OAotCiBpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIHVuc2lnbmVkIGludCBmb2xsX2ZsYWdzLAogCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpOwogCiAjZGVmaW5lIFpPTkVfUkVDTEFJTV9OT1NDQU4JLTIKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjYzM3MwotLS0gL2Rldi9udWxsCisrKyBiL21tL2tzbS5jCkBAIC0wLDAgKzEsMTcwMyBAQAorLyoKKyAqIE1lbW9yeSBtZXJnaW5nIHN1cHBvcnQuCisgKgorICogVGhpcyBjb2RlIGVuYWJsZXMgZHluYW1pYyBzaGFyaW5nIG9mIGlkZW50aWNhbCBwYWdlcyBmb3VuZCBpbiBkaWZmZXJlbnQKKyAqIG1lbW9yeSBhcmVhcywgZXZlbiBpZiB0aGV5IGFyZSBub3Qgc2hhcmVkIGJ5IGZvcmsoKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4KKyAqIEF1dGhvcnM6CisgKglJemlrIEVpZHVzCisgKglBbmRyZWEgQXJjYW5nZWxpCisgKglDaHJpcyBXcmlnaHQKKyAqCUh1Z2ggRGlja2lucworICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcm1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgorCisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKy8qCisgKiBBIGZldyBub3RlcyBhYm91dCB0aGUgS1NNIHNjYW5uaW5nIHByb2Nlc3MsCisgKiB0byBtYWtlIGl0IGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVsb3c6CisgKgorICogSW4gb3JkZXIgdG8gcmVkdWNlIGV4Y2Vzc2l2ZSBzY2FubmluZywgS1NNIHNvcnRzIHRoZSBtZW1vcnkgcGFnZXMgYnkgdGhlaXIKKyAqIGNvbnRlbnRzIGludG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHBvaW50ZXJzIHRvIHRoZSBwYWdlcycgbG9jYXRpb25zLgorICoKKyAqIFNpbmNlIHRoZSBjb250ZW50cyBvZiB0aGUgcGFnZXMgbWF5IGNoYW5nZSBhdCBhbnkgbW9tZW50LCBLU00gY2Fubm90IGp1c3QKKyAqIGluc2VydCB0aGUgcGFnZXMgaW50byBhIG5vcm1hbCBzb3J0ZWQgdHJlZSBhbmQgZXhwZWN0IGl0IHRvIGZpbmQgYW55dGhpbmcuCisgKiBUaGVyZWZvcmUgS1NNIHVzZXMgdHdvIGRhdGEgc3RydWN0dXJlcyAtIHRoZSBzdGFibGUgYW5kIHRoZSB1bnN0YWJsZSB0cmVlLgorICoKKyAqIFRoZSBzdGFibGUgdHJlZSBob2xkcyBwb2ludGVycyB0byBhbGwgdGhlIG1lcmdlZCBwYWdlcyAoa3NtIHBhZ2VzKSwgc29ydGVkCisgKiBieSB0aGVpciBjb250ZW50cy4gIEJlY2F1c2UgZWFjaCBzdWNoIHBhZ2UgaXMgd3JpdGUtcHJvdGVjdGVkLCBzZWFyY2hpbmcgb24KKyAqIHRoaXMgdHJlZSBpcyBmdWxseSBhc3N1cmVkIHRvIGJlIHdvcmtpbmcgKGV4Y2VwdCB3aGVuIHBhZ2VzIGFyZSB1bm1hcHBlZCksCisgKiBhbmQgdGhlcmVmb3JlIHRoaXMgdHJlZSBpcyBjYWxsZWQgdGhlIHN0YWJsZSB0cmVlLgorICoKKyAqIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFibGUgdHJlZSwgS1NNIHVzZXMgYSBzZWNvbmQgZGF0YSBzdHJ1Y3R1cmUgY2FsbGVkIHRoZQorICogdW5zdGFibGUgdHJlZTogdGhpcyB0cmVlIGhvbGRzIHBvaW50ZXJzIHRvIHBhZ2VzIHdoaWNoIGhhdmUgYmVlbiBmb3VuZCB0bworICogYmUgInVuY2hhbmdlZCBmb3IgYSBwZXJpb2Qgb2YgdGltZSIuICBUaGUgdW5zdGFibGUgdHJlZSBzb3J0cyB0aGVzZSBwYWdlcworICogYnkgdGhlaXIgY29udGVudHMsIGJ1dCBzaW5jZSB0aGV5IGFyZSBub3Qgd3JpdGUtcHJvdGVjdGVkLCBLU00gY2Fubm90IHJlbHkKKyAqIHVwb24gdGhlIHVuc3RhYmxlIHRyZWUgdG8gd29yayBjb3JyZWN0bHkgLSB0aGUgdW5zdGFibGUgdHJlZSBpcyBsaWFibGUgdG8KKyAqIGJlIGNvcnJ1cHRlZCBhcyBpdHMgY29udGVudHMgYXJlIG1vZGlmaWVkLCBhbmQgc28gaXQgaXMgY2FsbGVkIHVuc3RhYmxlLgorICoKKyAqIEtTTSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGJ5IHNldmVyYWwgdGVjaG5pcXVlczoKKyAqCisgKiAxKSBUaGUgdW5zdGFibGUgdHJlZSBpcyBmbHVzaGVkIGV2ZXJ5IHRpbWUgS1NNIGNvbXBsZXRlcyBzY2FubmluZyBhbGwKKyAqICAgIG1lbW9yeSBhcmVhcywgYW5kIHRoZW4gdGhlIHRyZWUgaXMgcmVidWlsdCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcuCisgKiAyKSBLU00gd2lsbCBvbmx5IGluc2VydCBpbnRvIHRoZSB1bnN0YWJsZSB0cmVlLCBwYWdlcyB3aG9zZSBoYXNoIHZhbHVlCisgKiAgICBoYXMgbm90IGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHNjYW4gb2YgYWxsIG1lbW9yeSBhcmVhcy4KKyAqIDMpIFRoZSB1bnN0YWJsZSB0cmVlIGlzIGEgUmVkQmxhY2sgVHJlZSAtIHNvIGl0cyBiYWxhbmNpbmcgaXMgYmFzZWQgb24gdGhlCisgKiAgICBjb2xvcnMgb2YgdGhlIG5vZGVzIGFuZCBub3Qgb24gdGhlaXIgY29udGVudHMsIGFzc3VyaW5nIHRoYXQgZXZlbiB3aGVuCisgKiAgICB0aGUgdHJlZSBnZXRzICJjb3JydXB0ZWQiIGl0IHdvbid0IGdldCBvdXQgb2YgYmFsYW5jZSwgc28gc2Nhbm5pbmcgdGltZQorICogICAgcmVtYWlucyB0aGUgc2FtZSAoYWxzbywgc2VhcmNoaW5nIGFuZCBpbnNlcnRpbmcgbm9kZXMgaW4gYW4gcmJ0cmVlIHVzZXMKKyAqICAgIHRoZSBzYW1lIGFsZ29yaXRobSwgc28gd2UgaGF2ZSBubyBvdmVyaGVhZCB3aGVuIHdlIGZsdXNoIGFuZCByZWJ1aWxkKS4KKyAqIDQpIEtTTSBuZXZlciBmbHVzaGVzIHRoZSBzdGFibGUgdHJlZSwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGlmIGl0IHdlcmUgdG8KKyAqICAgIHRha2UgMTAgYXR0ZW1wdHMgdG8gZmluZCBhIHBhZ2UgaW4gdGhlIHVuc3RhYmxlIHRyZWUsIG9uY2UgaXQgaXMgZm91bmQsCisgKiAgICBpdCBpcyBzZWN1cmVkIGluIHRoZSBzdGFibGUgdHJlZS4gIChXaGVuIHdlIHNjYW4gYSBuZXcgcGFnZSwgd2UgZmlyc3QKKyAqICAgIGNvbXBhcmUgaXQgYWdhaW5zdCB0aGUgc3RhYmxlIHRyZWUsIGFuZCB0aGVuIGFnYWluc3QgdGhlIHVuc3RhYmxlIHRyZWUuKQorICovCisKKy8qKgorICogc3RydWN0IG1tX3Nsb3QgLSBrc20gaW5mb3JtYXRpb24gcGVyIG1tIHRoYXQgaXMgYmVpbmcgc2Nhbm5lZAorICogQGxpbms6IGxpbmsgdG8gdGhlIG1tX3Nsb3RzIGhhc2ggbGlzdAorICogQG1tX2xpc3Q6IGxpbmsgaW50byB0aGUgbW1fc2xvdHMgbGlzdCwgcm9vdGVkIGluIGtzbV9tbV9oZWFkCisgKiBAcm1hcF9saXN0OiBoZWFkIGZvciB0aGlzIG1tX3Nsb3QncyBsaXN0IG9mIHJtYXBfaXRlbXMKKyAqIEBtbTogdGhlIG1tIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcyB2YWxpZCBmb3IKKyAqLworc3RydWN0IG1tX3Nsb3QgeworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7CisJc3RydWN0IGxpc3RfaGVhZCBtbV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcm1hcF9saXN0OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3NtX3NjYW4gLSBjdXJzb3IgZm9yIHNjYW5uaW5nCisgKiBAbW1fc2xvdDogdGhlIGN1cnJlbnQgbW1fc2xvdCB3ZSBhcmUgc2Nhbm5pbmcKKyAqIEBhZGRyZXNzOiB0aGUgbmV4dCBhZGRyZXNzIGluc2lkZSB0aGF0IHRvIGJlIHNjYW5uZWQKKyAqIEBybWFwX2l0ZW06IHRoZSBjdXJyZW50IHJtYXAgdGhhdCB3ZSBhcmUgc2Nhbm5pbmcgaW5zaWRlIHRoZSBybWFwX2xpc3QKKyAqIEBzZXFucjogY291bnQgb2YgY29tcGxldGVkIGZ1bGwgc2NhbnMgKG5lZWRlZCB3aGVuIHJlbW92aW5nIHVuc3RhYmxlIG5vZGUpCisgKgorICogVGhlcmUgaXMgb25seSB0aGUgb25lIGtzbV9zY2FuIGluc3RhbmNlIG9mIHRoaXMgY3Vyc29yIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGtzbV9zY2FuIHsKKwlzdHJ1Y3QgbW1fc2xvdCAqbW1fc2xvdDsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtOworCXVuc2lnbmVkIGxvbmcgc2VxbnI7Cit9OworCisvKioKKyAqIHN0cnVjdCBybWFwX2l0ZW0gLSByZXZlcnNlIG1hcHBpbmcgaXRlbSBmb3IgdmlydHVhbCBhZGRyZXNzZXMKKyAqIEBsaW5rOiBsaW5rIGludG8gbW1fc2xvdCdzIHJtYXBfbGlzdCAocm1hcF9saXN0IGlzIHBlciBtbSkKKyAqIEBtbTogdGhlIG1lbW9yeSBzdHJ1Y3R1cmUgdGhpcyBybWFwX2l0ZW0gaXMgcG9pbnRpbmcgaW50bworICogQGFkZHJlc3M6IHRoZSB2aXJ0dWFsIGFkZHJlc3MgdGhpcyBybWFwX2l0ZW0gdHJhY2tzICgrIGZsYWdzIGluIGxvdyBiaXRzKQorICogQG9sZGNoZWNrc3VtOiBwcmV2aW91cyBjaGVja3N1bSBvZiB0aGUgcGFnZSBhdCB0aGF0IHZpcnR1YWwgYWRkcmVzcworICogQG5vZGU6IHJiX25vZGUgb2YgdGhpcyBybWFwX2l0ZW0gaW4gZWl0aGVyIHVuc3RhYmxlIG9yIHN0YWJsZSB0cmVlCisgKiBAbmV4dDogbmV4dCBybWFwX2l0ZW0gaGFuZ2luZyBvZmYgdGhlIHNhbWUgbm9kZSBvZiB0aGUgc3RhYmxlIHRyZWUKKyAqIEBwcmV2OiBwcmV2aW91cyBybWFwX2l0ZW0gaGFuZ2luZyBvZmYgdGhlIHNhbWUgbm9kZSBvZiB0aGUgc3RhYmxlIHRyZWUKKyAqLworc3RydWN0IHJtYXBfaXRlbSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsJCS8qICsgbG93IGJpdHMgdXNlZCBmb3IgZmxhZ3MgYmVsb3cgKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIGludCBvbGRjaGVja3N1bTsJCS8qIHdoZW4gdW5zdGFibGUgKi8KKwkJc3RydWN0IHJtYXBfaXRlbSAqbmV4dDsJCQkvKiB3aGVuIHN0YWJsZSAqLworCX07CisJdW5pb24geworCQlzdHJ1Y3QgcmJfbm9kZSBub2RlOwkJCS8qIHdoZW4gdHJlZSBub2RlICovCisJCXN0cnVjdCBybWFwX2l0ZW0gKnByZXY7CQkJLyogaW4gc3RhYmxlIGxpc3QgKi8KKwl9OworfTsKKworI2RlZmluZSBTRVFOUl9NQVNLCTB4MGZmCS8qIGxvdyBiaXRzIG9mIHVuc3RhYmxlIHRyZWUgc2VxbnIgKi8KKyNkZWZpbmUgTk9ERV9GTEFHCTB4MTAwCS8qIGlzIGEgbm9kZSBvZiB1bnN0YWJsZSBvciBzdGFibGUgdHJlZSAqLworI2RlZmluZSBTVEFCTEVfRkxBRwkweDIwMAkvKiBpcyBhIG5vZGUgb3IgbGlzdCBpdGVtIG9mIHN0YWJsZSB0cmVlICovCisKKy8qIFRoZSBzdGFibGUgYW5kIHVuc3RhYmxlIHRyZWUgaGVhZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByb290X3N0YWJsZV90cmVlID0gUkJfUk9PVDsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByb290X3Vuc3RhYmxlX3RyZWUgPSBSQl9ST09UOworCisjZGVmaW5lIE1NX1NMT1RTX0hBU0hfSEVBRFMgMTAyNAorc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICptbV9zbG90c19oYXNoOworCitzdGF0aWMgc3RydWN0IG1tX3Nsb3Qga3NtX21tX2hlYWQgPSB7CisJLm1tX2xpc3QgPSBMSVNUX0hFQURfSU5JVChrc21fbW1faGVhZC5tbV9saXN0KSwKK307CitzdGF0aWMgc3RydWN0IGtzbV9zY2FuIGtzbV9zY2FuID0geworCS5tbV9zbG90ID0gJmtzbV9tbV9oZWFkLAorfTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpybWFwX2l0ZW1fY2FjaGU7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tX3Nsb3RfY2FjaGU7CisKKy8qIFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIHN0YWJsZSB0cmVlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrc21fcGFnZXNfc2hhcmVkOworCisvKiBUaGUgbnVtYmVyIG9mIHBhZ2Ugc2xvdHMgYWRkaXRpb25hbGx5IHNoYXJpbmcgdGhvc2Ugbm9kZXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtzbV9wYWdlc19zaGFyaW5nOworCisvKiBUaGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSB1bnN0YWJsZSB0cmVlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrc21fcGFnZXNfdW5zaGFyZWQ7CisKKy8qIFRoZSBudW1iZXIgb2Ygcm1hcF9pdGVtcyBpbiB1c2U6IHRvIGNhbGN1bGF0ZSBwYWdlc192b2xhdGlsZSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga3NtX3JtYXBfaXRlbXM7CisKKy8qIExpbWl0IG9uIHRoZSBudW1iZXIgb2YgdW5zd2FwcGFibGUgcGFnZXMgdXNlZCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga3NtX21heF9rZXJuZWxfcGFnZXMgPSAyMDAwOworCisvKiBOdW1iZXIgb2YgcGFnZXMga3NtZCBzaG91bGQgc2NhbiBpbiBvbmUgYmF0Y2ggKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQga3NtX3RocmVhZF9wYWdlc190b19zY2FuID0gMjAwOworCisvKiBNaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmV0d2VlbiBiYXRjaGVzICovCitzdGF0aWMgdW5zaWduZWQgaW50IGtzbV90aHJlYWRfc2xlZXBfbWlsbGlzZWNzID0gMjA7CisKKyNkZWZpbmUgS1NNX1JVTl9TVE9QCTAKKyNkZWZpbmUgS1NNX1JVTl9NRVJHRQkxCisjZGVmaW5lIEtTTV9SVU5fVU5NRVJHRQkyCitzdGF0aWMgdW5zaWduZWQgaW50IGtzbV9ydW4gPSBLU01fUlVOX01FUkdFOworCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa3NtX3RocmVhZF93YWl0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoa3NtX3RocmVhZF9tdXRleCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGtzbV9tbWxpc3RfbG9jayk7CisKKyNkZWZpbmUgS1NNX0tNRU1fQ0FDSEUoX19zdHJ1Y3QsIF9fZmxhZ3MpIGttZW1fY2FjaGVfY3JlYXRlKCJrc21fIiNfX3N0cnVjdCxcCisJCXNpemVvZihzdHJ1Y3QgX19zdHJ1Y3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgX19zdHJ1Y3QpLFwKKwkJKF9fZmxhZ3MpLCBOVUxMKQorCitzdGF0aWMgaW50IF9faW5pdCBrc21fc2xhYl9pbml0KHZvaWQpCit7CisJcm1hcF9pdGVtX2NhY2hlID0gS1NNX0tNRU1fQ0FDSEUocm1hcF9pdGVtLCAwKTsKKwlpZiAoIXJtYXBfaXRlbV9jYWNoZSkKKwkJZ290byBvdXQ7CisKKwltbV9zbG90X2NhY2hlID0gS1NNX0tNRU1fQ0FDSEUobW1fc2xvdCwgMCk7CisJaWYgKCFtbV9zbG90X2NhY2hlKQorCQlnb3RvIG91dF9mcmVlOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlOgorCWttZW1fY2FjaGVfZGVzdHJveShybWFwX2l0ZW1fY2FjaGUpOworb3V0OgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQga3NtX3NsYWJfZnJlZSh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShtbV9zbG90X2NhY2hlKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocm1hcF9pdGVtX2NhY2hlKTsKKwltbV9zbG90X2NhY2hlID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgcm1hcF9pdGVtICphbGxvY19ybWFwX2l0ZW0odm9pZCkKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwlybWFwX2l0ZW0gPSBrbWVtX2NhY2hlX3phbGxvYyhybWFwX2l0ZW1fY2FjaGUsIEdGUF9LRVJORUwpOworCWlmIChybWFwX2l0ZW0pCisJCWtzbV9ybWFwX2l0ZW1zKys7CisJcmV0dXJuIHJtYXBfaXRlbTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcm1hcF9pdGVtKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlrc21fcm1hcF9pdGVtcy0tOworCXJtYXBfaXRlbS0+bW0gPSBOVUxMOwkvKiBkZWJ1ZyBzYWZldHkgKi8KKwlrbWVtX2NhY2hlX2ZyZWUocm1hcF9pdGVtX2NhY2hlLCBybWFwX2l0ZW0pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbV9zbG90ICphbGxvY19tbV9zbG90KHZvaWQpCit7CisJaWYgKCFtbV9zbG90X2NhY2hlKQkvKiBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGttZW1fY2FjaGVfemFsbG9jKG1tX3Nsb3RfY2FjaGUsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9tbV9zbG90KHN0cnVjdCBtbV9zbG90ICptbV9zbG90KQoreworCWttZW1fY2FjaGVfZnJlZShtbV9zbG90X2NhY2hlLCBtbV9zbG90KTsKK30KKworc3RhdGljIGludCBfX2luaXQgbW1fc2xvdHNfaGFzaF9pbml0KHZvaWQpCit7CisJbW1fc2xvdHNfaGFzaCA9IGt6YWxsb2MoTU1fU0xPVFNfSEFTSF9IRUFEUyAqIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtbV9zbG90c19oYXNoKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1tX3Nsb3RzX2hhc2hfZnJlZSh2b2lkKQoreworCWtmcmVlKG1tX3Nsb3RzX2hhc2gpOworfQorCitzdGF0aWMgc3RydWN0IG1tX3Nsb3QgKmdldF9tbV9zbG90KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlidWNrZXQgPSAmbW1fc2xvdHNfaGFzaFsoKHVuc2lnbmVkIGxvbmcpbW0gLyBzaXplb2Yoc3RydWN0IG1tX3N0cnVjdCkpCisJCQkJJSBNTV9TTE9UU19IQVNIX0hFQURTXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShtbV9zbG90LCBub2RlLCBidWNrZXQsIGxpbmspIHsKKwkJaWYgKG1tID09IG1tX3Nsb3QtPm1tKQorCQkJcmV0dXJuIG1tX3Nsb3Q7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfdG9fbW1fc2xvdHNfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgc3RydWN0IG1tX3Nsb3QgKm1tX3Nsb3QpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKworCWJ1Y2tldCA9ICZtbV9zbG90c19oYXNoWygodW5zaWduZWQgbG9uZyltbSAvIHNpemVvZihzdHJ1Y3QgbW1fc3RydWN0KSkKKwkJCQklIE1NX1NMT1RTX0hBU0hfSEVBRFNdOworCW1tX3Nsb3QtPm1tID0gbW07CisJSU5JVF9MSVNUX0hFQUQoJm1tX3Nsb3QtPnJtYXBfbGlzdCk7CisJaGxpc3RfYWRkX2hlYWQoJm1tX3Nsb3QtPmxpbmssIGJ1Y2tldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluX3N0YWJsZV90cmVlKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlyZXR1cm4gcm1hcF9pdGVtLT5hZGRyZXNzICYgU1RBQkxFX0ZMQUc7Cit9CisKKy8qCisgKiBrc21kLCBhbmQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKCksIG11c3Qgbm90IHRvdWNoIGFuIG1tJ3MKKyAqIHBhZ2UgdGFibGVzIGFmdGVyIGl0IGhhcyBwYXNzZWQgdGhyb3VnaCBrc21fZXhpdCgpIC0gd2hpY2gsIGlmIG5lY2Vzc2FyeSwKKyAqIHRha2VzIG1tYXBfc2VtIGJyaWVmbHkgdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlbS4gIGtzbV9leGl0KCkgZG9lcyBub3Qgc2V0CisgKiBhIHNwZWNpYWwgZmxhZzogdGhleSBjYW4ganVzdCBiYWNrIG91dCBhcyBzb29uIGFzIG1tX3VzZXJzIGdvZXMgdG8gemVyby4KKyAqIGtzbV90ZXN0X2V4aXQoKSBpcyB1c2VkIHRocm91Z2hvdXQgdG8gbWFrZSB0aGlzIHRlc3QgZm9yIGV4aXQ6IGluIHNvbWUKKyAqIHBsYWNlcyBmb3IgY29ycmVjdG5lc3MsIGluIHNvbWUgcGxhY2VzIGp1c3QgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd29yay4KKyAqLworc3RhdGljIGlubGluZSBib29sIGtzbV90ZXN0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDA7Cit9CisKKy8qCisgKiBXZSB1c2UgYnJlYWtfa3NtIHRvIGJyZWFrIENPVyBvbiBhIGtzbSBwYWdlOiBpdCdzIGEgc3RyaXBwZWQgZG93bgorICoKKyAqCWlmIChnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgYWRkciwgMSwgMSwgMSwgJnBhZ2UsIE5VTEwpID09IDEpCisgKgkJcHV0X3BhZ2UocGFnZSk7CisgKgorICogYnV0IHRha2luZyBncmVhdCBjYXJlIG9ubHkgdG8gdG91Y2ggYSBrc20gcGFnZSwgaW4gYSBWTV9NRVJHRUFCTEUgdm1hLAorICogaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gaGFzIHVubWFwcGVkIGFuZCByZW1hcHBlZCBtbSxhZGRyIG1lYW53aGlsZS4KKyAqIENvdWxkIGEga3NtIHBhZ2UgYXBwZWFyIGFueXdoZXJlIGVsc2U/ICBBY3R1YWxseSB5ZXMsIGluIGEgVk1fUEZOTUFQCisgKiBtbWFwIG9mIC9kZXYvbWVtIG9yIC9kZXYva21lbSwgd2hlcmUgd2Ugd291bGQgbm90IHdhbnQgdG8gdG91Y2ggaXQuCisgKi8KK3N0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldCA9IDA7CisKKwlkbyB7CisJCWNvbmRfcmVzY2hlZCgpOworCQlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBhZGRyLCBGT0xMX0dFVCk7CisJCWlmICghcGFnZSkKKwkJCWJyZWFrOworCQlpZiAoUGFnZUtzbShwYWdlKSkKKwkJCXJldCA9IGhhbmRsZV9tbV9mYXVsdCh2bWEtPnZtX21tLCB2bWEsIGFkZHIsCisJCQkJCQkJRkFVTFRfRkxBR19XUklURSk7CisJCWVsc2UKKwkJCXJldCA9IFZNX0ZBVUxUX1dSSVRFOworCQlwdXRfcGFnZShwYWdlKTsKKwl9IHdoaWxlICghKHJldCAmIChWTV9GQVVMVF9XUklURSB8IFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX09PTSkpKTsKKwkvKgorCSAqIFdlIG11c3QgbG9vcCBiZWNhdXNlIGhhbmRsZV9tbV9mYXVsdCgpIG1heSBiYWNrIG91dCBpZiB0aGVyZSdzCisJICogYW55IGRpZmZpY3VsdHkgZS5nLiBpZiBwdGUgYWNjZXNzZWQgYml0IGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHkuCisJICoKKwkgKiBWTV9GQVVMVF9XUklURSBpcyB3aGF0IHdlIGhhdmUgYmVlbiBob3BpbmcgZm9yOiBpdCBpbmRpY2F0ZXMgdGhhdAorCSAqIENPVyBoYXMgYmVlbiBicm9rZW4sIGV2ZW4gaWYgdGhlIHZtYSBkb2VzIG5vdCBwZXJtaXQgVk1fV1JJVEU7CisJICogYnV0IG5vdGUgdGhhdCBhIGNvbmN1cnJlbnQgZmF1bHQgbWlnaHQgYnJlYWsgUGFnZUtzbSBmb3IgdXMuCisJICoKKwkgKiBWTV9GQVVMVF9TSUdCVVMgY291bGQgb2NjdXIgaWYgd2UgcmFjZSB3aXRoIHRydW5jYXRpb24gb2YgdGhlCisJICogYmFja2luZyBmaWxlLCB3aGljaCBhbHNvIGludmFsaWRhdGVzIGFub255bW91cyBwYWdlczogdGhhdCdzCisJICogb2theSwgdGhhdCB0cnVuY2F0aW9uIHdpbGwgaGF2ZSB1bm1hcHBlZCB0aGUgUGFnZUtzbSBmb3IgdXMuCisJICoKKwkgKiBWTV9GQVVMVF9PT006IGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgKGxhdGUgSnVseSAyMDA5KSwgc2V0dGluZworCSAqIGFzaWRlIG1lbV9jZ3JvdXAgbGltaXRzLCBWTV9GQVVMVF9PT00gd291bGQgb25seSBiZSBzZXQgaWYgdGhlCisJICogY3VycmVudCB0YXNrIGhhcyBUSUZfTUVNRElFIHNldCwgYW5kIHdpbGwgYmUgT09NIGtpbGxlZCBvbiByZXR1cm4KKwkgKiB0byB1c2VyOyBhbmQga3NtZCwgaGF2aW5nIG5vIG1tLCB3b3VsZCBuZXZlciBiZSBjaG9zZW4gZm9yIHRoYXQuCisJICoKKwkgKiBCdXQgaWYgdGhlIG1tIGlzIGluIGEgbGltaXRlZCBtZW1fY2dyb3VwLCB0aGVuIHRoZSBmYXVsdCBtYXkgZmFpbAorCSAqIHdpdGggVk1fRkFVTFRfT09NIGV2ZW4gaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBub3QgVElGX01FTURJRTsgYW5kCisJICogZXZlbiBrc21kIGNhbiBmYWlsIGluIHRoaXMgd2F5IC0gdGhvdWdoIGl0J3MgdXN1YWxseSBicmVha2luZyBrc20KKwkgKiBqdXN0IHRvIHVuZG8gYSBtZXJnZSBpdCBtYWRlIGEgbW9tZW50IGJlZm9yZSwgc28gdW5saWtlbHkgdG8gb29tLgorCSAqCisJICogVGhhdCdzIGEgcGl0eTogd2UgbWlnaHQgdGhlcmVmb3JlIGhhdmUgbW9yZSBrZXJuZWwgcGFnZXMgYWxsb2NhdGVkCisJICogdGhhbiB3ZSdyZSBjb3VudGluZyBhcyBub2RlcyBpbiB0aGUgc3RhYmxlIHRyZWU7IGJ1dCBrc21fZG9fc2NhbgorCSAqIHdpbGwgcmV0cnkgdG8gYnJlYWtfY293IG9uIGVhY2ggcGFzcywgc28gc2hvdWxkIHJlY292ZXIgdGhlIHBhZ2UKKwkgKiBpbiBkdWUgY291cnNlLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyB0byBub3QgbGV0IFZNX01FUkdFQUJMRQorCSAqIGJlIGNsZWFyZWQgd2hpbGUgYW55IHN1Y2ggcGFnZXMgbWlnaHQgcmVtYWluIGluIHRoZSBhcmVhLgorCSAqLworCXJldHVybiAocmV0ICYgVk1fRkFVTFRfT09NKSA/IC1FTk9NRU0gOiAwOworfQorCitzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCisJCWdvdG8gb3V0OworCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcikKKwkJZ290byBvdXQ7CisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX01FUkdFQUJMRSkgfHwgIXZtYS0+YW5vbl92bWEpCisJCWdvdG8gb3V0OworCWJyZWFrX2tzbSh2bWEsIGFkZHIpOworb3V0OgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJtYXBfaXRlbS0+bW07CisJdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLT5hZGRyZXNzOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChrc21fdGVzdF9leGl0KG1tKSkKKwkJZ290byBvdXQ7CisJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOworCWlmICghdm1hIHx8IHZtYS0+dm1fc3RhcnQgPiBhZGRyKQorCQlnb3RvIG91dDsKKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLT5hbm9uX3ZtYSkKKwkJZ290byBvdXQ7CisKKwlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBhZGRyLCBGT0xMX0dFVCk7CisJaWYgKCFwYWdlKQorCQlnb3RvIG91dDsKKwlpZiAoUGFnZUFub24ocGFnZSkpIHsKKwkJZmx1c2hfYW5vbl9wYWdlKHZtYSwgcGFnZSwgYWRkcik7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKHBhZ2UpOworb3V0OgkJcGFnZSA9IE5VTEw7CisJfQorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHBhZ2U7Cit9CisKKy8qCisgKiBnZXRfa3NtX3BhZ2U6IGNoZWNrcyBpZiB0aGUgcGFnZSBhdCB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHJtYXBfaXRlbQorICogaXMgc3RpbGwgUGFnZUtzbSwgaW4gd2hpY2ggY2FzZSB3ZSBjYW4gdHJ1c3QgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2UsCisgKiBhbmQgaXQgcmV0dXJucyB0aGUgZ290dGVuIHBhZ2U7IGJ1dCBOVUxMIGlmIHRoZSBwYWdlIGhhcyBiZWVuIHphcHBlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfa3NtX3BhZ2Uoc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9IGdldF9tZXJnZWFibGVfcGFnZShybWFwX2l0ZW0pOworCWlmIChwYWdlICYmICFQYWdlS3NtKHBhZ2UpKSB7CisJCXB1dF9wYWdlKHBhZ2UpOworCQlwYWdlID0gTlVMTDsKKwl9CisJcmV0dXJuIHBhZ2U7Cit9CisKKy8qCisgKiBSZW1vdmluZyBybWFwX2l0ZW0gZnJvbSBzdGFibGUgb3IgdW5zdGFibGUgdHJlZS4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhbiB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhYmxlL3Vuc3RhYmxlIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlpZiAoaW5fc3RhYmxlX3RyZWUocm1hcF9pdGVtKSkgeworCQlzdHJ1Y3Qgcm1hcF9pdGVtICpuZXh0X2l0ZW0gPSBybWFwX2l0ZW0tPm5leHQ7CisKKwkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyAmIE5PREVfRkxBRykgeworCQkJaWYgKG5leHRfaXRlbSkgeworCQkJCXJiX3JlcGxhY2Vfbm9kZSgmcm1hcF9pdGVtLT5ub2RlLAorCQkJCQkJJm5leHRfaXRlbS0+bm9kZSwKKwkJCQkJCSZyb290X3N0YWJsZV90cmVlKTsKKwkJCQluZXh0X2l0ZW0tPmFkZHJlc3MgfD0gTk9ERV9GTEFHOworCQkJCWtzbV9wYWdlc19zaGFyaW5nLS07CisJCQl9IGVsc2UgeworCQkJCXJiX2VyYXNlKCZybWFwX2l0ZW0tPm5vZGUsICZyb290X3N0YWJsZV90cmVlKTsKKwkJCQlrc21fcGFnZXNfc2hhcmVkLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgcm1hcF9pdGVtICpwcmV2X2l0ZW0gPSBybWFwX2l0ZW0tPnByZXY7CisKKwkJCUJVR19PTihwcmV2X2l0ZW0tPm5leHQgIT0gcm1hcF9pdGVtKTsKKwkJCXByZXZfaXRlbS0+bmV4dCA9IG5leHRfaXRlbTsKKwkJCWlmIChuZXh0X2l0ZW0pIHsKKwkJCQlCVUdfT04obmV4dF9pdGVtLT5wcmV2ICE9IHJtYXBfaXRlbSk7CisJCQkJbmV4dF9pdGVtLT5wcmV2ID0gcm1hcF9pdGVtLT5wcmV2OworCQkJfQorCQkJa3NtX3BhZ2VzX3NoYXJpbmctLTsKKwkJfQorCisJCXJtYXBfaXRlbS0+bmV4dCA9IE5VTEw7CisKKwl9IGVsc2UgaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyAmIE5PREVfRkxBRykgeworCQl1bnNpZ25lZCBjaGFyIGFnZTsKKwkJLyoKKwkJICogVXN1YWxseSBrc21kIGNhbiBhbmQgbXVzdCBza2lwIHRoZSByYl9lcmFzZSwgYmVjYXVzZQorCQkgKiByb290X3Vuc3RhYmxlX3RyZWUgd2FzIGFscmVhZHkgcmVzZXQgdG8gUkJfUk9PVC4KKwkJICogQnV0IGJlIGNhcmVmdWwgd2hlbiBhbiBtbSBpcyBleGl0aW5nOiBkbyB0aGUgcmJfZXJhc2UKKwkJICogaWYgdGhpcyBybWFwX2l0ZW0gd2FzIGluc2VydGVkIGJ5IHRoaXMgc2NhbiwgcmF0aGVyCisJCSAqIHRoYW4gbGVmdCBvdmVyIGZyb20gYmVmb3JlLgorCQkgKi8KKwkJYWdlID0gKHVuc2lnbmVkIGNoYXIpKGtzbV9zY2FuLnNlcW5yIC0gcm1hcF9pdGVtLT5hZGRyZXNzKTsKKwkJQlVHX09OKGFnZSA+IDEpOworCQlpZiAoIWFnZSkKKwkJCXJiX2VyYXNlKCZybWFwX2l0ZW0tPm5vZGUsICZyb290X3Vuc3RhYmxlX3RyZWUpOworCQlrc21fcGFnZXNfdW5zaGFyZWQtLTsKKwl9CisKKwlybWFwX2l0ZW0tPmFkZHJlc3MgJj0gUEFHRV9NQVNLOworCisJY29uZF9yZXNjaGVkKCk7CQkvKiB3ZSdyZSBjYWxsZWQgZnJvbSBtYW55IGxvbmcgbG9vcHMgKi8KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RyYWlsaW5nX3JtYXBfaXRlbXMoc3RydWN0IG1tX3Nsb3QgKm1tX3Nsb3QsCisJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmN1cikKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwl3aGlsZSAoY3VyICE9ICZtbV9zbG90LT5ybWFwX2xpc3QpIHsKKwkJcm1hcF9pdGVtID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOworCQljdXIgPSBjdXItPm5leHQ7CisJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7CisJCWxpc3RfZGVsKCZybWFwX2l0ZW0tPmxpbmspOworCQlmcmVlX3JtYXBfaXRlbShybWFwX2l0ZW0pOworCX0KK30KKworLyoKKyAqIFRob3VnaCBpdCdzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pcyByYXRoZXIKKyAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2Vzbid0IHF1aXRlIHdvcmsgZm9yCisgKiB0aGF0IC0gYW4gcm1hcF9pdGVtIGlzIGFzc2lnbmVkIHRvIHRoZSBzdGFibGUgdHJlZSBhZnRlciBpbnNlcnRpbmcga3NtCisgKiBwYWdlIGFuZCB1cHBpbmcgbW1hcF9zZW0uICBOb3IgZG9lcyBpdCBmaXQgd2l0aCB0aGUgd2F5IHdlIHNraXAgZHVwJ2luZworICogcm1hcF9pdGVtcyBmcm9tIHBhcmVudCB0byBjaGlsZCBhdCBmb3JrIHRpbWUgKHNvIGFzIG5vdCB0byB3YXN0ZSB0aW1lCisgKiBpZiBleGl0IGNvbWVzIGJlZm9yZSB0aGUgbmV4dCBzY2FuIHJlYWNoZXMgaXQpLgorICoKKyAqIFNpbWlsYXJseSwgYWx0aG91Z2ggd2UnZCBsaWtlIHRvIHJlbW92ZSBybWFwX2l0ZW1zIChzbyB1cGRhdGluZyBjb3VudHMKKyAqIGFuZCBmcmVlaW5nIG1lbW9yeSkgd2hlbiB1bm1lcmdpbmcgYW4gYXJlYSwgaXQncyBlYXNpZXIgdG8gbGVhdmUgdGhhdAorICogdG8gdGhlIG5leHQgcGFzcyBvZiBrc21kIC0gY29uc2lkZXIsIGZvciBleGFtcGxlLCBob3cga3NtZCBtaWdodCBiZQorICogaW4gY21wX2FuZF9tZXJnZV9wYWdlIG9uIG9uZSBvZiB0aGUgcm1hcF9pdGVtcyB3ZSB3b3VsZCBiZSByZW1vdmluZy4KKyAqLworc3RhdGljIGludCB1bm1lcmdlX2tzbV9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBlcnIgPSAwOworCisJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQgJiYgIWVycjsgYWRkciArPSBQQUdFX1NJWkUpIHsKKwkJaWYgKGtzbV90ZXN0X2V4aXQodm1hLT52bV9tbSkpCisJCQlicmVhazsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJZXJyID0gLUVSRVNUQVJUU1lTOworCQllbHNlCisJCQllcnIgPSBicmVha19rc20odm1hLCBhZGRyKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19TWVNGUworLyoKKyAqIE9ubHkgY2FsbGVkIHRocm91Z2ggdGhlIHN5c2ZzIGNvbnRyb2wgaW50ZXJmYWNlOgorICovCitzdGF0aWMgaW50IHVubWVyZ2VfYW5kX3JlbW92ZV9hbGxfcm1hcF9pdGVtcyh2b2lkKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWludCBlcnIgPSAwOworCisJc3Bpbl9sb2NrKCZrc21fbW1saXN0X2xvY2spOworCWtzbV9zY2FuLm1tX3Nsb3QgPSBsaXN0X2VudHJ5KGtzbV9tbV9oZWFkLm1tX2xpc3QubmV4dCwKKwkJCQkJCXN0cnVjdCBtbV9zbG90LCBtbV9saXN0KTsKKwlzcGluX3VubG9jaygma3NtX21tbGlzdF9sb2NrKTsKKworCWZvciAobW1fc2xvdCA9IGtzbV9zY2FuLm1tX3Nsb3Q7CisJCQltbV9zbG90ICE9ICZrc21fbW1faGVhZDsgbW1fc2xvdCA9IGtzbV9zY2FuLm1tX3Nsb3QpIHsKKwkJbW0gPSBtbV9zbG90LT5tbTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQkJaWYgKGtzbV90ZXN0X2V4aXQobW0pKQorCQkJCWJyZWFrOworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX01FUkdFQUJMRSkgfHwgIXZtYS0+YW5vbl92bWEpCisJCQkJY29udGludWU7CisJCQllcnIgPSB1bm1lcmdlX2tzbV9wYWdlcyh2bWEsCisJCQkJCQl2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlyZW1vdmVfdHJhaWxpbmdfcm1hcF9pdGVtcyhtbV9zbG90LCBtbV9zbG90LT5ybWFwX2xpc3QubmV4dCk7CisKKwkJc3Bpbl9sb2NrKCZrc21fbW1saXN0X2xvY2spOworCQlrc21fc2Nhbi5tbV9zbG90ID0gbGlzdF9lbnRyeShtbV9zbG90LT5tbV9saXN0Lm5leHQsCisJCQkJCQlzdHJ1Y3QgbW1fc2xvdCwgbW1fbGlzdCk7CisJCWlmIChrc21fdGVzdF9leGl0KG1tKSkgeworCQkJaGxpc3RfZGVsKCZtbV9zbG90LT5saW5rKTsKKwkJCWxpc3RfZGVsKCZtbV9zbG90LT5tbV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworCisJCQlmcmVlX21tX3Nsb3QobW1fc2xvdCk7CisJCQljbGVhcl9iaXQoTU1GX1ZNX01FUkdFQUJMRSwgJm1tLT5mbGFncyk7CisJCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkJbW1kcm9wKG1tKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJfQorCX0KKworCWtzbV9zY2FuLnNlcW5yID0gMDsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJa3NtX3NjYW4ubW1fc2xvdCA9ICZrc21fbW1faGVhZDsKKwlzcGluX3VubG9jaygma3NtX21tbGlzdF9sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLworCitzdGF0aWMgdTMyIGNhbGNfY2hlY2tzdW0oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdTMyIGNoZWNrc3VtOworCXZvaWQgKmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJY2hlY2tzdW0gPSBqaGFzaDIoYWRkciwgUEFHRV9TSVpFIC8gNCwgMTcpOworCWt1bm1hcF9hdG9taWMoYWRkciwgS01fVVNFUjApOworCXJldHVybiBjaGVja3N1bTsKK30KKworc3RhdGljIGludCBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpCit7CisJY2hhciAqYWRkcjEsICphZGRyMjsKKwlpbnQgcmV0OworCisJYWRkcjEgPSBrbWFwX2F0b21pYyhwYWdlMSwgS01fVVNFUjApOworCWFkZHIyID0ga21hcF9hdG9taWMocGFnZTIsIEtNX1VTRVIxKTsKKwlyZXQgPSBtZW1jbXAoYWRkcjEsIGFkZHIyLCBQQUdFX1NJWkUpOworCWt1bm1hcF9hdG9taWMoYWRkcjIsIEtNX1VTRVIxKTsKKwlrdW5tYXBfYXRvbWljKGFkZHIxLCBLTV9VU0VSMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFnZXNfaWRlbnRpY2FsKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKQoreworCXJldHVybiAhbWVtY21wX3BhZ2VzKHBhZ2UxLCBwYWdlMik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcHJvdGVjdF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgIHB0ZV90ICpvcmlnX3B0ZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXB0ZV90ICpwdGVwOworCXNwaW5sb2NrX3QgKnB0bDsKKwlpbnQgc3dhcHBlZDsKKwlpbnQgZXJyID0gLUVGQVVMVDsKKworCWFkZHIgPSBwYWdlX2FkZHJlc3NfaW5fdm1hKHBhZ2UsIHZtYSk7CisJaWYgKGFkZHIgPT0gLUVGQVVMVCkKKwkJZ290byBvdXQ7CisKKwlwdGVwID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIG1tLCBhZGRyLCAmcHRsLCAwKTsKKwlpZiAoIXB0ZXApCisJCWdvdG8gb3V0OworCisJaWYgKHB0ZV93cml0ZSgqcHRlcCkpIHsKKwkJcHRlX3QgZW50cnk7CisKKwkJc3dhcHBlZCA9IFBhZ2VTd2FwQ2FjaGUocGFnZSk7CisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJCS8qCisJCSAqIE9rIHRoaXMgaXMgdHJpY2t5LCB3aGVuIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBydW4gaXQgZG9lc250CisJCSAqIHRha2UgYW55IGxvY2ssIHRoZXJlZm9yZSB0aGUgY2hlY2sgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gbWFrZQorCQkgKiB3aXRoIHRoZSBwYWdlY291bnQgYWdhaW5zdCB0aGUgbWFwY291bnQgaXMgcmFjZXkgYW5kCisJCSAqIE9fRElSRUNUIGNhbiBoYXBwZW4gcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLgorCQkgKiBTbyB3ZSBjbGVhciB0aGUgcHRlIGFuZCBmbHVzaCB0aGUgdGxiIGJlZm9yZSB0aGUgY2hlY2sKKwkJICogdGhpcyBhc3N1cmUgdXMgdGhhdCBubyBPX0RJUkVDVCBjYW4gaGFwcGVuIGFmdGVyIHRoZSBjaGVjaworCQkgKiBvciBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjaGVjay4KKwkJICovCisJCWVudHJ5ID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHIsIHB0ZXApOworCQkvKgorCQkgKiBDaGVjayB0aGF0IG5vIE9fRElSRUNUIG9yIHNpbWlsYXIgSS9PIGlzIGluIHByb2dyZXNzIG9uIHRoZQorCQkgKiBwYWdlCisJCSAqLworCQlpZiAoKHBhZ2VfbWFwY291bnQocGFnZSkgKyAyICsgc3dhcHBlZCkgIT0gcGFnZV9jb3VudChwYWdlKSkgeworCQkJc2V0X3B0ZV9hdF9ub3RpZnkobW0sIGFkZHIsIHB0ZXAsIGVudHJ5KTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCQllbnRyeSA9IHB0ZV93cnByb3RlY3QoZW50cnkpOworCQlzZXRfcHRlX2F0X25vdGlmeShtbSwgYWRkciwgcHRlcCwgZW50cnkpOworCX0KKwkqb3JpZ19wdGUgPSAqcHRlcDsKKwllcnIgPSAwOworCitvdXRfdW5sb2NrOgorCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHJlcGxhY2VfcGFnZSAtIHJlcGxhY2UgcGFnZSBpbiB2bWEgYnkgbmV3IGtzbSBwYWdlCisgKiBAdm1hOiAgICAgIHZtYSB0aGF0IGhvbGRzIHRoZSBwdGUgcG9pbnRpbmcgdG8gb2xkcGFnZQorICogQG9sZHBhZ2U6ICB0aGUgcGFnZSB3ZSBhcmUgcmVwbGFjaW5nIGJ5IG5ld3BhZ2UKKyAqIEBuZXdwYWdlOiAgdGhlIGtzbSBwYWdlIHdlIHJlcGxhY2Ugb2xkcGFnZSBieQorICogQG9yaWdfcHRlOiB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIHB0ZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUZBVUxUIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcmVwbGFjZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqb2xkcGFnZSwKKwkJCXN0cnVjdCBwYWdlICpuZXdwYWdlLCBwdGVfdCBvcmlnX3B0ZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZXA7CisJc3BpbmxvY2tfdCAqcHRsOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlwZ3Byb3RfdCBwcm90OworCWludCBlcnIgPSAtRUZBVUxUOworCisJcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyAmIH5WTV9XUklURSk7CisKKwlhZGRyID0gcGFnZV9hZGRyZXNzX2luX3ZtYShvbGRwYWdlLCB2bWEpOworCWlmIChhZGRyID09IC1FRkFVTFQpCisJCWdvdG8gb3V0OworCisJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CisJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKKwkJZ290byBvdXQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKKwkJZ290byBvdXQ7CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkKKwkJZ290byBvdXQ7CisKKwlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlpZiAoIXB0ZV9zYW1lKCpwdGVwLCBvcmlnX3B0ZSkpIHsKKwkJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOworCQlnb3RvIG91dDsKKwl9CisKKwlnZXRfcGFnZShuZXdwYWdlKTsKKwlwYWdlX2FkZF9rc21fcm1hcChuZXdwYWdlKTsKKworCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKCpwdGVwKSk7CisJcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHIsIHB0ZXApOworCXNldF9wdGVfYXRfbm90aWZ5KG1tLCBhZGRyLCBwdGVwLCBta19wdGUobmV3cGFnZSwgcHJvdCkpOworCisJcGFnZV9yZW1vdmVfcm1hcChvbGRwYWdlKTsKKwlwdXRfcGFnZShvbGRwYWdlKTsKKworCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2UgLSB0YWtlIHR3byBwYWdlcyBhbmQgbWVyZ2UgdGhlbSBpbnRvIG9uZQorICogQHZtYTogdGhlIHZtYSB0aGF0IGhvbGQgdGhlIHB0ZSBwb2ludGluZyBpbnRvIG9sZHBhZ2UKKyAqIEBvbGRwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIHdhbnQgdG8gcmVwbGFjZSB3aXRoIG5ld3BhZ2UKKyAqIEBuZXdwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIHdhbnQgdG8gbWFwIGluc3RlYWQgb2Ygb2xkcGFnZQorICoKKyAqIE5vdGU6CisgKiBvbGRwYWdlIHNob3VsZCBiZSBhIFBhZ2VBbm9uIHBhZ2UsIHdoaWxlIG5ld3BhZ2Ugc2hvdWxkIGJlIGEgUGFnZUtzbSBwYWdlLAorICogb3IgYSBuZXdseSBhbGxvY2F0ZWQga2VybmVsIHBhZ2Ugd2hpY2ggcGFnZV9hZGRfa3NtX3JtYXAgd2lsbCBtYWtlIFBhZ2VLc20uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIHBhZ2VzIHdlcmUgbWVyZ2VkLCAtRUZBVUxUIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJIHN0cnVjdCBwYWdlICpvbGRwYWdlLAorCQkJCSBzdHJ1Y3QgcGFnZSAqbmV3cGFnZSkKK3sKKwlwdGVfdCBvcmlnX3B0ZSA9IF9fcHRlKDApOworCWludCBlcnIgPSAtRUZBVUxUOworCisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX01FUkdFQUJMRSkpCisJCWdvdG8gb3V0OworCisJaWYgKCFQYWdlQW5vbihvbGRwYWdlKSkKKwkJZ290byBvdXQ7CisKKwlnZXRfcGFnZShuZXdwYWdlKTsKKwlnZXRfcGFnZShvbGRwYWdlKTsKKworCS8qCisJICogV2UgbmVlZCB0aGUgcGFnZSBsb2NrIHRvIHJlYWQgYSBzdGFibGUgUGFnZVN3YXBDYWNoZSBpbgorCSAqIHdyaXRlX3Byb3RlY3RfcGFnZSgpLiAgV2UgdXNlIHRyeWxvY2tfcGFnZSgpIGluc3RlYWQgb2YKKwkgKiBsb2NrX3BhZ2UoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBoZXJlIC0gd2UKKwkgKiBwcmVmZXIgdG8gY29udGludWUgc2Nhbm5pbmcgYW5kIG1lcmdpbmcgZGlmZmVyZW50IHBhZ2VzLAorCSAqIHRoZW4gY29tZSBiYWNrIHRvIHRoaXMgcGFnZSB3aGVuIGl0IGlzIHVubG9ja2VkLgorCSAqLworCWlmICghdHJ5bG9ja19wYWdlKG9sZHBhZ2UpKQorCQlnb3RvIG91dF9wdXRwYWdlOworCS8qCisJICogSWYgdGhpcyBhbm9ueW1vdXMgcGFnZSBpcyBtYXBwZWQgb25seSBoZXJlLCBpdHMgcHRlIG1heSBuZWVkCisJICogdG8gYmUgd3JpdGUtcHJvdGVjdGVkLiAgSWYgaXQncyBtYXBwZWQgZWxzZXdoZXJlLCBhbGwgb2YgaXRzCisJICogcHRlcyBhcmUgbmVjZXNzYXJpbHkgYWxyZWFkeSB3cml0ZS1wcm90ZWN0ZWQuICBCdXQgaW4gZWl0aGVyCisJICogY2FzZSwgd2UgbmVlZCB0byBsb2NrIGFuZCBjaGVjayBwYWdlX2NvdW50IGlzIG5vdCByYWlzZWQuCisJICovCisJaWYgKHdyaXRlX3Byb3RlY3RfcGFnZSh2bWEsIG9sZHBhZ2UsICZvcmlnX3B0ZSkpIHsKKwkJdW5sb2NrX3BhZ2Uob2xkcGFnZSk7CisJCWdvdG8gb3V0X3B1dHBhZ2U7CisJfQorCXVubG9ja19wYWdlKG9sZHBhZ2UpOworCisJaWYgKHBhZ2VzX2lkZW50aWNhbChvbGRwYWdlLCBuZXdwYWdlKSkKKwkJZXJyID0gcmVwbGFjZV9wYWdlKHZtYSwgb2xkcGFnZSwgbmV3cGFnZSwgb3JpZ19wdGUpOworCitvdXRfcHV0cGFnZToKKwlwdXRfcGFnZShvbGRwYWdlKTsKKwlwdXRfcGFnZShuZXdwYWdlKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UgLSBsaWtlIHRyeV90b19tZXJnZV90d29fcGFnZXMsCisgKiBidXQgbm8gbmV3IGtlcm5lbCBwYWdlIGlzIGFsbG9jYXRlZDoga3BhZ2UgbXVzdCBhbHJlYWR5IGJlIGEga3NtIHBhZ2UuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0xLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjEsCisJCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UxLAorCQkJCSAgICAgIHN0cnVjdCBwYWdlICprcGFnZSkKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlpbnQgZXJyID0gLUVGQVVMVDsKKworCWRvd25fcmVhZCgmbW0xLT5tbWFwX3NlbSk7CisJaWYgKGtzbV90ZXN0X2V4aXQobW0xKSkKKwkJZ290byBvdXQ7CisKKwl2bWEgPSBmaW5kX3ZtYShtbTEsIGFkZHIxKTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcjEpCisJCWdvdG8gb3V0OworCisJZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZTEsIGtwYWdlKTsKK291dDoKKwl1cF9yZWFkKCZtbTEtPm1tYXBfc2VtKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdHJ5X3RvX21lcmdlX3R3b19wYWdlcyAtIHRha2UgdHdvIGlkZW50aWNhbCBwYWdlcyBhbmQgcHJlcGFyZSB0aGVtCisgKiB0byBiZSBtZXJnZWQgaW50byBvbmUgcGFnZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB3ZSBzdWNjZXNzZnVsbHkgbWFwcGVkIHR3byBpZGVudGljYWwgcGFnZXMKKyAqIGludG8gb25lIHBhZ2UsIC1FRkFVTFQgb3RoZXJ3aXNlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBrZXJuZWwgcGFnZTogaWYgb25lIG9mIHRoZSBwYWdlcworICogaXMgYWxyZWFkeSBhIGtzbSBwYWdlLCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSBzaG91bGQgYmUgdXNlZC4KKyAqLworc3RhdGljIGludCB0cnlfdG9fbWVyZ2VfdHdvX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tMSwgdW5zaWduZWQgbG9uZyBhZGRyMSwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IG1tX3N0cnVjdCAqbW0yLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyMiwgc3RydWN0IHBhZ2UgKnBhZ2UyKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBwYWdlICprcGFnZTsKKwlpbnQgZXJyID0gLUVGQVVMVDsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgc3RhYmxlIHRyZWUKKwkgKiBpcyB0aGUgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0aGF0IHdlIGhvbGQuCisJICovCisJaWYgKGtzbV9tYXhfa2VybmVsX3BhZ2VzICYmCisJICAgIGtzbV9tYXhfa2VybmVsX3BhZ2VzIDw9IGtzbV9wYWdlc19zaGFyZWQpCisJCXJldHVybiBlcnI7CisKKwlrcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTsKKwlpZiAoIWtwYWdlKQorCQlyZXR1cm4gZXJyOworCisJZG93bl9yZWFkKCZtbTEtPm1tYXBfc2VtKTsKKwlpZiAoa3NtX3Rlc3RfZXhpdChtbTEpKSB7CisJCXVwX3JlYWQoJm1tMS0+bW1hcF9zZW0pOworCQlnb3RvIG91dDsKKwl9CisJdm1hID0gZmluZF92bWEobW0xLCBhZGRyMSk7CisJaWYgKCF2bWEgfHwgdm1hLT52bV9zdGFydCA+IGFkZHIxKSB7CisJCXVwX3JlYWQoJm1tMS0+bW1hcF9zZW0pOworCQlnb3RvIG91dDsKKwl9CisKKwljb3B5X3VzZXJfaGlnaHBhZ2Uoa3BhZ2UsIHBhZ2UxLCBhZGRyMSwgdm1hKTsKKwllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlMSwga3BhZ2UpOworCXVwX3JlYWQoJm1tMS0+bW1hcF9zZW0pOworCisJaWYgKCFlcnIpIHsKKwkJZXJyID0gdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UobW0yLCBhZGRyMiwgcGFnZTIsIGtwYWdlKTsKKwkJLyoKKwkJICogSWYgdGhhdCBmYWlscywgd2UgaGF2ZSBhIGtzbSBwYWdlIHdpdGggb25seSBvbmUgcHRlCisJCSAqIHBvaW50aW5nIHRvIGl0OiBzbyBicmVhayBpdC4KKwkJICovCisJCWlmIChlcnIpCisJCQlicmVha19jb3cobW0xLCBhZGRyMSk7CisJfQorb3V0OgorCXB1dF9wYWdlKGtwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogc3RhYmxlX3RyZWVfc2VhcmNoIC0gc2VhcmNoIHBhZ2UgaW5zaWRlIHRoZSBzdGFibGUgdHJlZQorICogQHBhZ2U6IHRoZSBwYWdlIHRoYXQgd2UgYXJlIHNlYXJjaGluZyBpZGVudGljYWwgcGFnZXMgdG8uCisgKiBAcGFnZTI6IHBvaW50ZXIgaW50byBpZGVudGljYWwgcGFnZSB0aGF0IHdlIGFyZSBob2xkaW5nIGluc2lkZSB0aGUgc3RhYmxlCisgKgkgICB0cmVlIHRoYXQgd2UgaGF2ZSBmb3VuZC4KKyAqIEBybWFwX2l0ZW06IHRoZSByZXZlcnNlIG1hcHBpbmcgaXRlbQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZXJlIGlzIGEgcGFnZSBpbnNpZGUgdGhlIHN0YWJsZSB0cmVlCisgKiB3aXRoIGlkZW50aWNhbCBjb250ZW50IHRvIHRoZSBwYWdlIHRoYXQgd2UgYXJlIHNjYW5uaW5nIHJpZ2h0IG5vdy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybiBybWFwX2l0ZW0gcG9pbnRlciB0byB0aGUgaWRlbnRpY2FsIGl0ZW0gaWYgZm91bmQsCisgKiBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnN0YWJsZV90cmVlX3NlYXJjaChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZTIsCisJCQkJCSAgICBzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0pCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290X3N0YWJsZV90cmVlLnJiX25vZGU7CisKKwl3aGlsZSAobm9kZSkgeworCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSwgKm5leHRfcm1hcF9pdGVtOworCQlpbnQgcmV0OworCisJCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7CisJCXdoaWxlICh0cmVlX3JtYXBfaXRlbSkgeworCQkJQlVHX09OKCFpbl9zdGFibGVfdHJlZSh0cmVlX3JtYXBfaXRlbSkpOworCQkJY29uZF9yZXNjaGVkKCk7CisJCQlwYWdlMlswXSA9IGdldF9rc21fcGFnZSh0cmVlX3JtYXBfaXRlbSk7CisJCQlpZiAocGFnZTJbMF0pCisJCQkJYnJlYWs7CisJCQluZXh0X3JtYXBfaXRlbSA9IHRyZWVfcm1hcF9pdGVtLT5uZXh0OworCQkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUodHJlZV9ybWFwX2l0ZW0pOworCQkJdHJlZV9ybWFwX2l0ZW0gPSBuZXh0X3JtYXBfaXRlbTsKKwkJfQorCQlpZiAoIXRyZWVfcm1hcF9pdGVtKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJcmV0ID0gbWVtY21wX3BhZ2VzKHBhZ2UsIHBhZ2UyWzBdKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJcHV0X3BhZ2UocGFnZTJbMF0pOworCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAocmV0ID4gMCkgeworCQkJcHV0X3BhZ2UocGFnZTJbMF0pOworCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OworCQl9IGVsc2UgeworCQkJcmV0dXJuIHRyZWVfcm1hcF9pdGVtOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBzdGFibGVfdHJlZV9pbnNlcnQgLSBpbnNlcnQgcm1hcF9pdGVtIHBvaW50aW5nIHRvIG5ldyBrc20gcGFnZQorICogaW50byB0aGUgc3RhYmxlIHRyZWUuCisgKgorICogQHBhZ2U6IHRoZSBwYWdlIHRoYXQgd2UgYXJlIHNlYXJjaGluZyBpZGVudGljYWwgcGFnZSB0byBpbnNpZGUgdGhlIHN0YWJsZQorICoJICB0cmVlLgorICogQHJtYXBfaXRlbTogcG9pbnRlciB0byB0aGUgcmV2ZXJzZSBtYXBwaW5nIGl0ZW0uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJtYXBfaXRlbSBpZiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnN0YWJsZV90cmVlX2luc2VydChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgIHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZyb290X3N0YWJsZV90cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisKKwl3aGlsZSAoKm5ldykgeworCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSwgKm5leHRfcm1hcF9pdGVtOworCQlzdHJ1Y3QgcGFnZSAqdHJlZV9wYWdlOworCQlpbnQgcmV0OworCisJCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkoKm5ldywgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7CisJCXdoaWxlICh0cmVlX3JtYXBfaXRlbSkgeworCQkJQlVHX09OKCFpbl9zdGFibGVfdHJlZSh0cmVlX3JtYXBfaXRlbSkpOworCQkJY29uZF9yZXNjaGVkKCk7CisJCQl0cmVlX3BhZ2UgPSBnZXRfa3NtX3BhZ2UodHJlZV9ybWFwX2l0ZW0pOworCQkJaWYgKHRyZWVfcGFnZSkKKwkJCQlicmVhazsKKwkJCW5leHRfcm1hcF9pdGVtID0gdHJlZV9ybWFwX2l0ZW0tPm5leHQ7CisJCQlyZW1vdmVfcm1hcF9pdGVtX2Zyb21fdHJlZSh0cmVlX3JtYXBfaXRlbSk7CisJCQl0cmVlX3JtYXBfaXRlbSA9IG5leHRfcm1hcF9pdGVtOworCQl9CisJCWlmICghdHJlZV9ybWFwX2l0ZW0pCisJCQlyZXR1cm4gTlVMTDsKKworCQlyZXQgPSBtZW1jbXBfcGFnZXMocGFnZSwgdHJlZV9wYWdlKTsKKwkJcHV0X3BhZ2UodHJlZV9wYWdlKTsKKworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocmV0IDwgMCkKKwkJCW5ldyA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJldCA+IDApCisJCQluZXcgPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogSXQgaXMgbm90IGEgYnVnIHRoYXQgc3RhYmxlX3RyZWVfc2VhcmNoKCkgZGlkbid0CisJCQkgKiBmaW5kIHRoaXMgbm9kZTogYmVjYXVzZSBhdCB0aGF0IHRpbWUgb3VyIHBhZ2Ugd2FzCisJCQkgKiBub3QgeWV0IHdyaXRlLXByb3RlY3RlZCwgc28gbWF5IGhhdmUgY2hhbmdlZCBzaW5jZS4KKwkJCSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlybWFwX2l0ZW0tPmFkZHJlc3MgfD0gTk9ERV9GTEFHIHwgU1RBQkxFX0ZMQUc7CisJcm1hcF9pdGVtLT5uZXh0ID0gTlVMTDsKKwlyYl9saW5rX25vZGUoJnJtYXBfaXRlbS0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmcm1hcF9pdGVtLT5ub2RlLCAmcm9vdF9zdGFibGVfdHJlZSk7CisKKwlrc21fcGFnZXNfc2hhcmVkKys7CisJcmV0dXJuIHJtYXBfaXRlbTsKK30KKworLyoKKyAqIHVuc3RhYmxlX3RyZWVfc2VhcmNoX2luc2VydCAtIHNlYXJjaCBhbmQgaW5zZXJ0IGl0ZW1zIGludG8gdGhlIHVuc3RhYmxlIHRyZWUuCisgKgorICogQHBhZ2U6IHRoZSBwYWdlIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHNlYXJjaCBmb3IgaWRlbnRpY2FsIHBhZ2Ugb3IgdG8gaW5zZXJ0CisgKgkgIGludG8gdGhlIHVuc3RhYmxlIHRyZWUKKyAqIEBwYWdlMjogcG9pbnRlciBpbnRvIGlkZW50aWNhbCBwYWdlIHRoYXQgd2FzIGZvdW5kIGluc2lkZSB0aGUgdW5zdGFibGUgdHJlZQorICogQHJtYXBfaXRlbTogdGhlIHJldmVyc2UgbWFwcGluZyBpdGVtIG9mIHBhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhIHBhZ2UgaW4gdGhlIHVuc3RhYmxlIHRyZWUgaWRlbnRpY2FsIHRvIHRoZQorICogcGFnZSBjdXJyZW50bHkgYmVpbmcgc2Nhbm5lZDsgYW5kIGlmIG5vIGlkZW50aWNhbCBwYWdlIGlzIGZvdW5kIGluIHRoZQorICogdHJlZSwgd2UgaW5zZXJ0IHJtYXBfaXRlbSBhcyBhIG5ldyBvYmplY3QgaW50byB0aGUgdW5zdGFibGUgdHJlZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcG9pbnRlciB0byBybWFwX2l0ZW0gZm91bmQgdG8gYmUgaWRlbnRpY2FsCisgKiB0byB0aGUgY3VycmVudGx5IHNjYW5uZWQgcGFnZSwgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIGJvdGggc2VhcmNoaW5nIGFuZCBpbnNlcnRpbmcsIGJlY2F1c2UgdGhleSBzaGFyZQorICogdGhlIHNhbWUgd2Fsa2luZyBhbGdvcml0aG0gaW4gYW4gcmJ0cmVlLgorICovCitzdGF0aWMgc3RydWN0IHJtYXBfaXRlbSAqdW5zdGFibGVfdHJlZV9zZWFyY2hfaW5zZXJ0KHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkJc3RydWN0IHBhZ2UgKipwYWdlMiwKKwkJCQkJCXN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZyb290X3Vuc3RhYmxlX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKworCXdoaWxlICgqbmV3KSB7CisJCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOworCQlpbnQgcmV0OworCisJCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkoKm5ldywgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7CisJCXBhZ2UyWzBdID0gZ2V0X21lcmdlYWJsZV9wYWdlKHRyZWVfcm1hcF9pdGVtKTsKKwkJaWYgKCFwYWdlMlswXSkKKwkJCXJldHVybiBOVUxMOworCisJCS8qCisJCSAqIERvbid0IHN1YnN0aXR1dGUgYW4gdW5zd2FwcGFibGUga3NtIHBhZ2UKKwkJICoganVzdCBmb3Igb25lIGdvb2Qgc3dhcHBhYmxlIGZvcmtlZCBwYWdlLgorCQkgKi8KKwkJaWYgKHBhZ2UgPT0gcGFnZTJbMF0pIHsKKwkJCXB1dF9wYWdlKHBhZ2UyWzBdKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJcmV0ID0gbWVtY21wX3BhZ2VzKHBhZ2UsIHBhZ2UyWzBdKTsKKworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocmV0IDwgMCkgeworCQkJcHV0X3BhZ2UocGFnZTJbMF0pOworCQkJbmV3ID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJfSBlbHNlIGlmIChyZXQgPiAwKSB7CisJCQlwdXRfcGFnZShwYWdlMlswXSk7CisJCQluZXcgPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiB0cmVlX3JtYXBfaXRlbTsKKwkJfQorCX0KKworCXJtYXBfaXRlbS0+YWRkcmVzcyB8PSBOT0RFX0ZMQUc7CisJcm1hcF9pdGVtLT5hZGRyZXNzIHw9IChrc21fc2Nhbi5zZXFuciAmIFNFUU5SX01BU0spOworCXJiX2xpbmtfbm9kZSgmcm1hcF9pdGVtLT5ub2RlLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZybWFwX2l0ZW0tPm5vZGUsICZyb290X3Vuc3RhYmxlX3RyZWUpOworCisJa3NtX3BhZ2VzX3Vuc2hhcmVkKys7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBzdGFibGVfdHJlZV9hcHBlbmQgLSBhZGQgYW5vdGhlciBybWFwX2l0ZW0gdG8gdGhlIGxpbmtlZCBsaXN0IG9mCisgKiBybWFwX2l0ZW1zIGhhbmdpbmcgb2ZmIGEgZ2l2ZW4gbm9kZSBvZiB0aGUgc3RhYmxlIHRyZWUsIGFsbCBzaGFyaW5nCisgKiB0aGUgc2FtZSBrc20gcGFnZS4KKyAqLworc3RhdGljIHZvaWQgc3RhYmxlX3RyZWVfYXBwZW5kKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSwKKwkJCSAgICAgICBzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSkKK3sKKwlybWFwX2l0ZW0tPm5leHQgPSB0cmVlX3JtYXBfaXRlbS0+bmV4dDsKKwlybWFwX2l0ZW0tPnByZXYgPSB0cmVlX3JtYXBfaXRlbTsKKworCWlmICh0cmVlX3JtYXBfaXRlbS0+bmV4dCkKKwkJdHJlZV9ybWFwX2l0ZW0tPm5leHQtPnByZXYgPSBybWFwX2l0ZW07CisKKwl0cmVlX3JtYXBfaXRlbS0+bmV4dCA9IHJtYXBfaXRlbTsKKwlybWFwX2l0ZW0tPmFkZHJlc3MgfD0gU1RBQkxFX0ZMQUc7CisKKwlrc21fcGFnZXNfc2hhcmluZysrOworfQorCisvKgorICogY21wX2FuZF9tZXJnZV9wYWdlIC0gZmlyc3Qgc2VlIGlmIHBhZ2UgY2FuIGJlIG1lcmdlZCBpbnRvIHRoZSBzdGFibGUgdHJlZTsKKyAqIGlmIG5vdCwgY29tcGFyZSBjaGVja3N1bSB0byBwcmV2aW91cyBhbmQgaWYgaXQncyB0aGUgc2FtZSwgc2VlIGlmIHBhZ2UgY2FuCisgKiBiZSBpbnNlcnRlZCBpbnRvIHRoZSB1bnN0YWJsZSB0cmVlLCBvciBtZXJnZWQgd2l0aCBhIHBhZ2UgYWxyZWFkeSB0aGVyZSBhbmQKKyAqIGJvdGggdHJhbnNmZXJyZWQgdG8gdGhlIHN0YWJsZSB0cmVlLgorICoKKyAqIEBwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIGFyZSBzZWFyY2hpbmcgaWRlbnRpY2FsIHBhZ2UgdG8uCisgKiBAcm1hcF9pdGVtOiB0aGUgcmV2ZXJzZSBtYXBwaW5nIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGlzIHBhZ2UKKyAqLworc3RhdGljIHZvaWQgY21wX2FuZF9tZXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0pCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UyWzFdOworCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOworCXVuc2lnbmVkIGludCBjaGVja3N1bTsKKwlpbnQgZXJyOworCisJaWYgKGluX3N0YWJsZV90cmVlKHJtYXBfaXRlbSkpCisJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7CisKKwkvKiBXZSBmaXJzdCBzdGFydCB3aXRoIHNlYXJjaGluZyB0aGUgcGFnZSBpbnNpZGUgdGhlIHN0YWJsZSB0cmVlICovCisJdHJlZV9ybWFwX2l0ZW0gPSBzdGFibGVfdHJlZV9zZWFyY2gocGFnZSwgcGFnZTIsIHJtYXBfaXRlbSk7CisJaWYgKHRyZWVfcm1hcF9pdGVtKSB7CisJCWlmIChwYWdlID09IHBhZ2UyWzBdKQkJCS8qIGZvcmtlZCAqLworCQkJZXJyID0gMDsKKwkJZWxzZQorCQkJZXJyID0gdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uocm1hcF9pdGVtLT5tbSwKKwkJCQkJCQkgcm1hcF9pdGVtLT5hZGRyZXNzLAorCQkJCQkJCSBwYWdlLCBwYWdlMlswXSk7CisJCXB1dF9wYWdlKHBhZ2UyWzBdKTsKKworCQlpZiAoIWVycikgeworCQkJLyoKKwkJCSAqIFRoZSBwYWdlIHdhcyBzdWNjZXNzZnVsbHkgbWVyZ2VkOgorCQkJICogYWRkIGl0cyBybWFwX2l0ZW0gdG8gdGhlIHN0YWJsZSB0cmVlLgorCQkJICovCisJCQlzdGFibGVfdHJlZV9hcHBlbmQocm1hcF9pdGVtLCB0cmVlX3JtYXBfaXRlbSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogQSBrc20gcGFnZSBtaWdodCBoYXZlIGdvdCBoZXJlIGJ5IGZvcmssIGJ1dCBpdHMgb3RoZXIKKwkgKiByZWZlcmVuY2VzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3RhYmxlIHRyZWUuCisJICogT3IgaXQgbWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gYSBicmVha19rc20gd2hpY2ggZmFpbGVkCisJICogd2hlbiB0aGUgbWVtX2Nncm91cCBoYWQgcmVhY2hlZCBpdHMgbGltaXQ6IHRyeSBhZ2FpbiBub3cuCisJICovCisJaWYgKFBhZ2VLc20ocGFnZSkpCisJCWJyZWFrX2NvdyhybWFwX2l0ZW0tPm1tLCBybWFwX2l0ZW0tPmFkZHJlc3MpOworCisJLyoKKwkgKiBJbiBjYXNlIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBwYWdlIHdhcyBjaGFuZ2VkIGZyb20gdGhlIGxhc3QgdGltZSB3ZQorCSAqIGhhdmUgY2FsY3VsYXRlZCBpdCwgdGhpcyBwYWdlIHRvIGJlIGNoYW5nZWQgZnJlcXVlbHksIHRoZXJlZm9yZSB3ZQorCSAqIGRvbid0IHdhbnQgdG8gaW5zZXJ0IGl0IHRvIHRoZSB1bnN0YWJsZSB0cmVlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0bworCSAqIHdhc3RlIG91ciB0aW1lIHRvIHNlYXJjaCBpZiB0aGVyZSBpcyBzb21ldGhpbmcgaWRlbnRpY2FsIHRvIGl0IHRoZXJlLgorCSAqLworCWNoZWNrc3VtID0gY2FsY19jaGVja3N1bShwYWdlKTsKKwlpZiAocm1hcF9pdGVtLT5vbGRjaGVja3N1bSAhPSBjaGVja3N1bSkgeworCQlybWFwX2l0ZW0tPm9sZGNoZWNrc3VtID0gY2hlY2tzdW07CisJCXJldHVybjsKKwl9CisKKwl0cmVlX3JtYXBfaXRlbSA9IHVuc3RhYmxlX3RyZWVfc2VhcmNoX2luc2VydChwYWdlLCBwYWdlMiwgcm1hcF9pdGVtKTsKKwlpZiAodHJlZV9ybWFwX2l0ZW0pIHsKKwkJZXJyID0gdHJ5X3RvX21lcmdlX3R3b19wYWdlcyhybWFwX2l0ZW0tPm1tLAorCQkJCQkgICAgIHJtYXBfaXRlbS0+YWRkcmVzcywgcGFnZSwKKwkJCQkJICAgICB0cmVlX3JtYXBfaXRlbS0+bW0sCisJCQkJCSAgICAgdHJlZV9ybWFwX2l0ZW0tPmFkZHJlc3MsIHBhZ2UyWzBdKTsKKwkJLyoKKwkJICogQXMgc29vbiBhcyB3ZSBtZXJnZSB0aGlzIHBhZ2UsIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZQorCQkgKiBybWFwX2l0ZW0gb2YgdGhlIHBhZ2Ugd2UgaGF2ZSBtZXJnZWQgd2l0aCBmcm9tIHRoZSB1bnN0YWJsZQorCQkgKiB0cmVlLCBhbmQgaW5zZXJ0IGl0IGluc3RlYWQgYXMgbmV3IG5vZGUgaW4gdGhlIHN0YWJsZSB0cmVlLgorCQkgKi8KKwkJaWYgKCFlcnIpIHsKKwkJCXJiX2VyYXNlKCZ0cmVlX3JtYXBfaXRlbS0+bm9kZSwgJnJvb3RfdW5zdGFibGVfdHJlZSk7CisJCQl0cmVlX3JtYXBfaXRlbS0+YWRkcmVzcyAmPSB+Tk9ERV9GTEFHOworCQkJa3NtX3BhZ2VzX3Vuc2hhcmVkLS07CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBmYWlsIHRvIGluc2VydCB0aGUgcGFnZSBpbnRvIHRoZSBzdGFibGUgdHJlZSwKKwkJCSAqIHdlIHdpbGwgaGF2ZSAyIHZpcnR1YWwgYWRkcmVzc2VzIHRoYXQgYXJlIHBvaW50aW5nCisJCQkgKiB0byBhIGtzbSBwYWdlIGxlZnQgb3V0c2lkZSB0aGUgc3RhYmxlIHRyZWUsCisJCQkgKiBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYnJlYWtfY293IG9uIGJvdGguCisJCQkgKi8KKwkJCWlmIChzdGFibGVfdHJlZV9pbnNlcnQocGFnZTJbMF0sIHRyZWVfcm1hcF9pdGVtKSkKKwkJCQlzdGFibGVfdHJlZV9hcHBlbmQocm1hcF9pdGVtLCB0cmVlX3JtYXBfaXRlbSk7CisJCQllbHNlIHsKKwkJCQlicmVha19jb3codHJlZV9ybWFwX2l0ZW0tPm1tLAorCQkJCQkJdHJlZV9ybWFwX2l0ZW0tPmFkZHJlc3MpOworCQkJCWJyZWFrX2NvdyhybWFwX2l0ZW0tPm1tLCBybWFwX2l0ZW0tPmFkZHJlc3MpOworCQkJfQorCQl9CisKKwkJcHV0X3BhZ2UocGFnZTJbMF0pOworCX0KK30KKworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKmdldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgbW1fc2xvdCAqbW1fc2xvdCwKKwkJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmN1ciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwl3aGlsZSAoY3VyICE9ICZtbV9zbG90LT5ybWFwX2xpc3QpIHsKKwkJcm1hcF9pdGVtID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOworCQlpZiAoKHJtYXBfaXRlbS0+YWRkcmVzcyAmIFBBR0VfTUFTSykgPT0gYWRkcikgeworCQkJaWYgKCFpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pKQorCQkJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7CisJCQlyZXR1cm4gcm1hcF9pdGVtOworCQl9CisJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPiBhZGRyKQorCQkJYnJlYWs7CisJCWN1ciA9IGN1ci0+bmV4dDsKKwkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUocm1hcF9pdGVtKTsKKwkJbGlzdF9kZWwoJnJtYXBfaXRlbS0+bGluayk7CisJCWZyZWVfcm1hcF9pdGVtKHJtYXBfaXRlbSk7CisJfQorCisJcm1hcF9pdGVtID0gYWxsb2Nfcm1hcF9pdGVtKCk7CisJaWYgKHJtYXBfaXRlbSkgeworCQkvKiBJdCBoYXMgYWxyZWFkeSBiZWVuIHplcm9lZCAqLworCQlybWFwX2l0ZW0tPm1tID0gbW1fc2xvdC0+bW07CisJCXJtYXBfaXRlbS0+YWRkcmVzcyA9IGFkZHI7CisJCWxpc3RfYWRkX3RhaWwoJnJtYXBfaXRlbS0+bGluaywgY3VyKTsKKwl9CisJcmV0dXJuIHJtYXBfaXRlbTsKK30KKworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbW1fc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwlpZiAobGlzdF9lbXB0eSgma3NtX21tX2hlYWQubW1fbGlzdCkpCisJCXJldHVybiBOVUxMOworCisJc2xvdCA9IGtzbV9zY2FuLm1tX3Nsb3Q7CisJaWYgKHNsb3QgPT0gJmtzbV9tbV9oZWFkKSB7CisJCXJvb3RfdW5zdGFibGVfdHJlZSA9IFJCX1JPT1Q7CisKKwkJc3Bpbl9sb2NrKCZrc21fbW1saXN0X2xvY2spOworCQlzbG90ID0gbGlzdF9lbnRyeShzbG90LT5tbV9saXN0Lm5leHQsIHN0cnVjdCBtbV9zbG90LCBtbV9saXN0KTsKKwkJa3NtX3NjYW4ubW1fc2xvdCA9IHNsb3Q7CisJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworbmV4dF9tbToKKwkJa3NtX3NjYW4uYWRkcmVzcyA9IDA7CisJCWtzbV9zY2FuLnJtYXBfaXRlbSA9IGxpc3RfZW50cnkoJnNsb3QtPnJtYXBfbGlzdCwKKwkJCQkJCXN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOworCX0KKworCW1tID0gc2xvdC0+bW07CisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChrc21fdGVzdF9leGl0KG1tKSkKKwkJdm1hID0gTlVMTDsKKwllbHNlCisJCXZtYSA9IGZpbmRfdm1hKG1tLCBrc21fc2Nhbi5hZGRyZXNzKTsKKworCWZvciAoOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTUVSR0VBQkxFKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoa3NtX3NjYW4uYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQpCisJCQlrc21fc2Nhbi5hZGRyZXNzID0gdm1hLT52bV9zdGFydDsKKwkJaWYgKCF2bWEtPmFub25fdm1hKQorCQkJa3NtX3NjYW4uYWRkcmVzcyA9IHZtYS0+dm1fZW5kOworCisJCXdoaWxlIChrc21fc2Nhbi5hZGRyZXNzIDwgdm1hLT52bV9lbmQpIHsKKwkJCWlmIChrc21fdGVzdF9leGl0KG1tKSkKKwkJCQlicmVhazsKKwkJCSpwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBrc21fc2Nhbi5hZGRyZXNzLCBGT0xMX0dFVCk7CisJCQlpZiAoKnBhZ2UgJiYgUGFnZUFub24oKnBhZ2UpKSB7CisJCQkJZmx1c2hfYW5vbl9wYWdlKHZtYSwgKnBhZ2UsIGtzbV9zY2FuLmFkZHJlc3MpOworCQkJCWZsdXNoX2RjYWNoZV9wYWdlKCpwYWdlKTsKKwkJCQlybWFwX2l0ZW0gPSBnZXRfbmV4dF9ybWFwX2l0ZW0oc2xvdCwKKwkJCQkJa3NtX3NjYW4ucm1hcF9pdGVtLT5saW5rLm5leHQsCisJCQkJCWtzbV9zY2FuLmFkZHJlc3MpOworCQkJCWlmIChybWFwX2l0ZW0pIHsKKwkJCQkJa3NtX3NjYW4ucm1hcF9pdGVtID0gcm1hcF9pdGVtOworCQkJCQlrc21fc2Nhbi5hZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJCQl9IGVsc2UKKwkJCQkJcHV0X3BhZ2UoKnBhZ2UpOworCQkJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCQkJcmV0dXJuIHJtYXBfaXRlbTsKKwkJCX0KKwkJCWlmICgqcGFnZSkKKwkJCQlwdXRfcGFnZSgqcGFnZSk7CisJCQlrc21fc2Nhbi5hZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJCWNvbmRfcmVzY2hlZCgpOworCQl9CisJfQorCisJaWYgKGtzbV90ZXN0X2V4aXQobW0pKSB7CisJCWtzbV9zY2FuLmFkZHJlc3MgPSAwOworCQlrc21fc2Nhbi5ybWFwX2l0ZW0gPSBsaXN0X2VudHJ5KCZzbG90LT5ybWFwX2xpc3QsCisJCQkJCQlzdHJ1Y3Qgcm1hcF9pdGVtLCBsaW5rKTsKKwl9CisJLyoKKwkgKiBOdWtlIGFsbCB0aGUgcm1hcF9pdGVtcyB0aGF0IGFyZSBhYm92ZSB0aGlzIGN1cnJlbnQgcm1hcDoKKwkgKiBiZWNhdXNlIHRoZXJlIHdlcmUgbm8gVk1fTUVSR0VBQkxFIHZtYXMgd2l0aCBzdWNoIGFkZHJlc3Nlcy4KKwkgKi8KKwlyZW1vdmVfdHJhaWxpbmdfcm1hcF9pdGVtcyhzbG90LCBrc21fc2Nhbi5ybWFwX2l0ZW0tPmxpbmsubmV4dCk7CisKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJa3NtX3NjYW4ubW1fc2xvdCA9IGxpc3RfZW50cnkoc2xvdC0+bW1fbGlzdC5uZXh0LAorCQkJCQkJc3RydWN0IG1tX3Nsb3QsIG1tX2xpc3QpOworCWlmIChrc21fc2Nhbi5hZGRyZXNzID09IDApIHsKKwkJLyoKKwkJICogV2UndmUgY29tcGxldGVkIGEgZnVsbCBzY2FuIG9mIGFsbCB2bWFzLCBob2xkaW5nIG1tYXBfc2VtCisJCSAqIHRocm91Z2hvdXQsIGFuZCBmb3VuZCBubyBWTV9NRVJHRUFCTEU6IHNvIGRvIHRoZSBzYW1lIGFzCisJCSAqIF9fa3NtX2V4aXQgZG9lcyB0byByZW1vdmUgdGhpcyBtbSBmcm9tIGFsbCBvdXIgbGlzdHMgbm93LgorCQkgKiBUaGlzIGFwcGxpZXMgZWl0aGVyIHdoZW4gY2xlYW5pbmcgdXAgYWZ0ZXIgX19rc21fZXhpdAorCQkgKiAoYnV0IGJld2FyZTogd2UgY2FuIHJlYWNoIGhlcmUgZXZlbiBiZWZvcmUgX19rc21fZXhpdCksCisJCSAqIG9yIHdoZW4gYWxsIFZNX01FUkdFQUJMRSBhcmVhcyBoYXZlIGJlZW4gdW5tYXBwZWQgKGFuZAorCQkgKiBtbWFwX3NlbSB0aGVuIHByb3RlY3RzIGFnYWluc3QgcmFjZSB3aXRoIE1BRFZfTUVSR0VBQkxFKS4KKwkJICovCisJCWhsaXN0X2RlbCgmc2xvdC0+bGluayk7CisJCWxpc3RfZGVsKCZzbG90LT5tbV9saXN0KTsKKwkJc3Bpbl91bmxvY2soJmtzbV9tbWxpc3RfbG9jayk7CisKKwkJZnJlZV9tbV9zbG90KHNsb3QpOworCQljbGVhcl9iaXQoTU1GX1ZNX01FUkdFQUJMRSwgJm1tLT5mbGFncyk7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCW1tZHJvcChtbSk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJfQorCisJLyogUmVwZWF0IHVudGlsIHdlJ3ZlIGNvbXBsZXRlZCBzY2FubmluZyB0aGUgd2hvbGUgbGlzdCAqLworCXNsb3QgPSBrc21fc2Nhbi5tbV9zbG90OworCWlmIChzbG90ICE9ICZrc21fbW1faGVhZCkKKwkJZ290byBuZXh0X21tOworCisJa3NtX3NjYW4uc2VxbnIrKzsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBrc21fZG9fc2NhbiAgLSB0aGUga3NtIHNjYW5uZXIgbWFpbiB3b3JrZXIgZnVuY3Rpb24uCisgKiBAc2Nhbl9ucGFnZXMgLSBudW1iZXIgb2YgcGFnZXMgd2Ugd2FudCB0byBzY2FuIGJlZm9yZSB3ZSByZXR1cm4uCisgKi8KK3N0YXRpYyB2b2lkIGtzbV9kb19zY2FuKHVuc2lnbmVkIGludCBzY2FuX25wYWdlcykKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwl3aGlsZSAoc2Nhbl9ucGFnZXMtLSkgeworCQljb25kX3Jlc2NoZWQoKTsKKwkJcm1hcF9pdGVtID0gc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oJnBhZ2UpOworCQlpZiAoIXJtYXBfaXRlbSkKKwkJCXJldHVybjsKKwkJaWYgKCFQYWdlS3NtKHBhZ2UpIHx8ICFpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pKQorCQkJY21wX2FuZF9tZXJnZV9wYWdlKHBhZ2UsIHJtYXBfaXRlbSk7CisJCWVsc2UgaWYgKHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkgeworCQkJLyoKKwkJCSAqIFJlcGxhY2Ugbm93LXVuc2hhcmVkIGtzbSBwYWdlIGJ5IG9yZGluYXJ5IHBhZ2UuCisJCQkgKi8KKwkJCWJyZWFrX2NvdyhybWFwX2l0ZW0tPm1tLCBybWFwX2l0ZW0tPmFkZHJlc3MpOworCQkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUocm1hcF9pdGVtKTsKKwkJCXJtYXBfaXRlbS0+b2xkY2hlY2tzdW0gPSBjYWxjX2NoZWNrc3VtKHBhZ2UpOworCQl9CisJCXB1dF9wYWdlKHBhZ2UpOworCX0KK30KKworc3RhdGljIGludCBrc21kX3Nob3VsZF9ydW4odm9pZCkKK3sKKwlyZXR1cm4gKGtzbV9ydW4gJiBLU01fUlVOX01FUkdFKSAmJiAhbGlzdF9lbXB0eSgma3NtX21tX2hlYWQubW1fbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQga3NtX3NjYW5fdGhyZWFkKHZvaWQgKm5vdGhpbmcpCit7CisJc2V0X3VzZXJfbmljZShjdXJyZW50LCA1KTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCW11dGV4X2xvY2soJmtzbV90aHJlYWRfbXV0ZXgpOworCQlpZiAoa3NtZF9zaG91bGRfcnVuKCkpCisJCQlrc21fZG9fc2Nhbihrc21fdGhyZWFkX3BhZ2VzX3RvX3NjYW4pOworCQltdXRleF91bmxvY2soJmtzbV90aHJlYWRfbXV0ZXgpOworCisJCWlmIChrc21kX3Nob3VsZF9ydW4oKSkgeworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoa3NtX3RocmVhZF9zbGVlcF9taWxsaXNlY3MpKTsKKwkJfSBlbHNlIHsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShrc21fdGhyZWFkX3dhaXQsCisJCQkJa3NtZF9zaG91bGRfcnVuKCkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCWludCBlcnI7CisKKwlzd2l0Y2ggKGFkdmljZSkgeworCWNhc2UgTUFEVl9NRVJHRUFCTEU6CisJCS8qCisJCSAqIEJlIHNvbWV3aGF0IG92ZXItcHJvdGVjdGl2ZSBmb3Igbm93IQorCQkgKi8KKwkJaWYgKCp2bV9mbGFncyAmIChWTV9NRVJHRUFCTEUgfCBWTV9TSEFSRUQgIHwgVk1fTUFZU0hBUkUgICB8CisJCQkJIFZNX1BGTk1BUCAgICB8IFZNX0lPICAgICAgfCBWTV9ET05URVhQQU5EIHwKKwkJCQkgVk1fUkVTRVJWRUQgIHwgVk1fSFVHRVRMQiB8IFZNX0lOU0VSVFBBR0UgfAorCQkJCSBWTV9NSVhFRE1BUCAgfCBWTV9TQU8pKQorCQkJcmV0dXJuIDA7CQkvKiBqdXN0IGlnbm9yZSB0aGUgYWR2aWNlICovCisKKwkJaWYgKCF0ZXN0X2JpdChNTUZfVk1fTUVSR0VBQkxFLCAmbW0tPmZsYWdzKSkgeworCQkJZXJyID0gX19rc21fZW50ZXIobW0pOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJKnZtX2ZsYWdzIHw9IFZNX01FUkdFQUJMRTsKKwkJYnJlYWs7CisKKwljYXNlIE1BRFZfVU5NRVJHRUFCTEU6CisJCWlmICghKCp2bV9mbGFncyAmIFZNX01FUkdFQUJMRSkpCisJCQlyZXR1cm4gMDsJCS8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi8KKworCQlpZiAodm1hLT5hbm9uX3ZtYSkgeworCQkJZXJyID0gdW5tZXJnZV9rc21fcGFnZXModm1hLCBzdGFydCwgZW5kKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCSp2bV9mbGFncyAmPSB+Vk1fTUVSR0VBQkxFOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9fa3NtX2VudGVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCWludCBuZWVkc193YWtldXA7CisKKwltbV9zbG90ID0gYWxsb2NfbW1fc2xvdCgpOworCWlmICghbW1fc2xvdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBDaGVjayBrc21fcnVuIHRvbz8gIFdvdWxkIG5lZWQgdGlnaHRlciBsb2NraW5nICovCisJbmVlZHNfd2FrZXVwID0gbGlzdF9lbXB0eSgma3NtX21tX2hlYWQubW1fbGlzdCk7CisKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJaW5zZXJ0X3RvX21tX3Nsb3RzX2hhc2gobW0sIG1tX3Nsb3QpOworCS8qCisJICogSW5zZXJ0IGp1c3QgYmVoaW5kIHRoZSBzY2FubmluZyBjdXJzb3IsIHRvIGxldCB0aGUgYXJlYSBzZXR0bGUKKwkgKiBkb3duIGEgbGl0dGxlOyB3aGVuIGZvcmsgaXMgZm9sbG93ZWQgYnkgaW1tZWRpYXRlIGV4ZWMsIHdlIGRvbid0CisJICogd2FudCBrc21kIHRvIHdhc3RlIHRpbWUgc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIGFuIHJtYXBfbGlzdC4KKwkgKi8KKwlsaXN0X2FkZF90YWlsKCZtbV9zbG90LT5tbV9saXN0LCAma3NtX3NjYW4ubW1fc2xvdC0+bW1fbGlzdCk7CisJc3Bpbl91bmxvY2soJmtzbV9tbWxpc3RfbG9jayk7CisKKwlzZXRfYml0KE1NRl9WTV9NRVJHRUFCTEUsICZtbS0+ZmxhZ3MpOworCWF0b21pY19pbmMoJm1tLT5tbV9jb3VudCk7CisKKwlpZiAobmVlZHNfd2FrZXVwKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmtzbV90aHJlYWRfd2FpdCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2tzbV9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCWludCBlYXN5X3RvX2ZyZWUgPSAwOworCisJLyoKKwkgKiBUaGlzIHByb2Nlc3MgaXMgZXhpdGluZzogaWYgaXQncyBzdHJhaWdodGZvcndhcmQgKGFzIGlzIHRoZQorCSAqIGNhc2Ugd2hlbiBrc21kIHdhcyBuZXZlciBydW5uaW5nKSwgZnJlZSBtbV9zbG90IGltbWVkaWF0ZWx5LgorCSAqIEJ1dCBpZiBpdCdzIGF0IHRoZSBjdXJzb3Igb3IgaGFzIHJtYXBfaXRlbXMgbGlua2VkIHRvIGl0LCB1c2UKKwkgKiBtbWFwX3NlbSB0byBzeW5jaHJvbml6ZSB3aXRoIGFueSBicmVha19jb3dzIGJlZm9yZSBwYWdldGFibGVzCisJICogYXJlIGZyZWVkLCBhbmQgbGVhdmUgdGhlIG1tX3Nsb3Qgb24gdGhlIGxpc3QgZm9yIGtzbWQgdG8gZnJlZS4KKwkgKiBCZXdhcmU6IGtzbSBtYXkgYWxyZWFkeSBoYXZlIG5vdGljZWQgaXQgZXhpdGluZyBhbmQgZnJlZWQgdGhlIHNsb3QuCisJICovCisKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJbW1fc2xvdCA9IGdldF9tbV9zbG90KG1tKTsKKwlpZiAobW1fc2xvdCAmJiBrc21fc2Nhbi5tbV9zbG90ICE9IG1tX3Nsb3QpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJm1tX3Nsb3QtPnJtYXBfbGlzdCkpIHsKKwkJCWhsaXN0X2RlbCgmbW1fc2xvdC0+bGluayk7CisJCQlsaXN0X2RlbCgmbW1fc2xvdC0+bW1fbGlzdCk7CisJCQllYXN5X3RvX2ZyZWUgPSAxOworCQl9IGVsc2UgeworCQkJbGlzdF9tb3ZlKCZtbV9zbG90LT5tbV9saXN0LAorCQkJCSAgJmtzbV9zY2FuLm1tX3Nsb3QtPm1tX2xpc3QpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworCisJaWYgKGVhc3lfdG9fZnJlZSkgeworCQlmcmVlX21tX3Nsb3QobW1fc2xvdCk7CisJCWNsZWFyX2JpdChNTUZfVk1fTUVSR0VBQkxFLCAmbW0tPmZsYWdzKTsKKwkJbW1kcm9wKG1tKTsKKwl9IGVsc2UgaWYgKG1tX3Nsb3QpIHsKKwkJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NZU0ZTCisvKgorICogVGhpcyBhbGwgY29tcGlsZXMgd2l0aG91dCBDT05GSUdfU1lTRlMsIGJ1dCBpcyBhIHdhc3RlIG9mIHNwYWNlLgorICovCisKKyNkZWZpbmUgS1NNX0FUVFJfUk8oX25hbWUpIFwKKwlzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIF9uYW1lIyNfYXR0ciA9IF9fQVRUUl9STyhfbmFtZSkKKyNkZWZpbmUgS1NNX0FUVFIoX25hbWUpIFwKKwlzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIF9uYW1lIyNfYXR0ciA9IFwKKwkJX19BVFRSKF9uYW1lLCAwNjQ0LCBfbmFtZSMjX3Nob3csIF9uYW1lIyNfc3RvcmUpCisKK3N0YXRpYyBzc2l6ZV90IHNsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwga3NtX3RocmVhZF9zbGVlcF9taWxsaXNlY3MpOworfQorCitzdGF0aWMgc3NpemVfdCBzbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG1zZWNzOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbXNlY3MpOworCWlmIChlcnIgfHwgbXNlY3MgPiBVSU5UX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrc21fdGhyZWFkX3NsZWVwX21pbGxpc2VjcyA9IG1zZWNzOworCisJcmV0dXJuIGNvdW50OworfQorS1NNX0FUVFIoc2xlZXBfbWlsbGlzZWNzKTsKKworc3RhdGljIHNzaXplX3QgcGFnZXNfdG9fc2Nhbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGtzbV90aHJlYWRfcGFnZXNfdG9fc2Nhbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZucl9wYWdlcyk7CisJaWYgKGVyciB8fCBucl9wYWdlcyA+IFVJTlRfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtzbV90aHJlYWRfcGFnZXNfdG9fc2NhbiA9IG5yX3BhZ2VzOworCisJcmV0dXJuIGNvdW50OworfQorS1NNX0FUVFIocGFnZXNfdG9fc2Nhbik7CisKK3N0YXRpYyBzc2l6ZV90IHJ1bl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGtzbV9ydW4pOworfQorCitzdGF0aWMgc3NpemVfdCBydW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZmxhZ3MpOworCWlmIChlcnIgfHwgZmxhZ3MgPiBVSU5UX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZsYWdzID4gS1NNX1JVTl9VTk1FUkdFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogS1NNX1JVTl9NRVJHRSBzZXRzIGtzbWQgcnVubmluZywgYW5kIDAgc3RvcHMgaXQgcnVubmluZy4KKwkgKiBLU01fUlVOX1VOTUVSR0Ugc3RvcHMgaXQgcnVubmluZyBhbmQgdW5tZXJnZXMgYWxsIHJtYXBfaXRlbXMsCisJICogYnJlYWtpbmcgQ09XIHRvIGZyZWUgdGhlIHVuc3dhcHBhYmxlIHBhZ2VzX3NoYXJlZCAoYnV0IGxlYXZlcworCSAqIG1tX3Nsb3RzIG9uIHRoZSBsaXN0IGZvciB3aGVuIGtzbWQgbWF5IGJlIHNldCBydW5uaW5nIGFnYWluKS4KKwkgKi8KKworCW11dGV4X2xvY2soJmtzbV90aHJlYWRfbXV0ZXgpOworCWlmIChrc21fcnVuICE9IGZsYWdzKSB7CisJCWtzbV9ydW4gPSBmbGFnczsKKwkJaWYgKGZsYWdzICYgS1NNX1JVTl9VTk1FUkdFKSB7CisJCQljdXJyZW50LT5mbGFncyB8PSBQRl9PT01fT1JJR0lOOworCQkJZXJyID0gdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKCk7CisJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfT09NX09SSUdJTjsKKwkJCWlmIChlcnIpIHsKKwkJCQlrc21fcnVuID0gS1NNX1JVTl9TVE9QOworCQkJCWNvdW50ID0gZXJyOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygma3NtX3RocmVhZF9tdXRleCk7CisKKwlpZiAoZmxhZ3MgJiBLU01fUlVOX01FUkdFKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmtzbV90aHJlYWRfd2FpdCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitLU01fQVRUUihydW4pOworCitzdGF0aWMgc3NpemVfdCBtYXhfa2VybmVsX3BhZ2VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbnJfcGFnZXMpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJa3NtX21heF9rZXJuZWxfcGFnZXMgPSBucl9wYWdlczsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgbWF4X2tlcm5lbF9wYWdlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBrc21fbWF4X2tlcm5lbF9wYWdlcyk7Cit9CitLU01fQVRUUihtYXhfa2VybmVsX3BhZ2VzKTsKKworc3RhdGljIHNzaXplX3QgcGFnZXNfc2hhcmVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwga3NtX3BhZ2VzX3NoYXJlZCk7Cit9CitLU01fQVRUUl9STyhwYWdlc19zaGFyZWQpOworCitzdGF0aWMgc3NpemVfdCBwYWdlc19zaGFyaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGtzbV9wYWdlc19zaGFyaW5nKTsKK30KK0tTTV9BVFRSX1JPKHBhZ2VzX3NoYXJpbmcpOworCitzdGF0aWMgc3NpemVfdCBwYWdlc191bnNoYXJlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwga3NtX3BhZ2VzX3Vuc2hhcmVkKTsKK30KK0tTTV9BVFRSX1JPKHBhZ2VzX3Vuc2hhcmVkKTsKKworc3RhdGljIHNzaXplX3QgcGFnZXNfdm9sYXRpbGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlsb25nIGtzbV9wYWdlc192b2xhdGlsZTsKKworCWtzbV9wYWdlc192b2xhdGlsZSA9IGtzbV9ybWFwX2l0ZW1zIC0ga3NtX3BhZ2VzX3NoYXJlZAorCQkJCS0ga3NtX3BhZ2VzX3NoYXJpbmcgLSBrc21fcGFnZXNfdW5zaGFyZWQ7CisJLyoKKwkgKiBJdCB3YXMgbm90IHdvcnRoIGFueSBsb2NraW5nIHRvIGNhbGN1bGF0ZSB0aGF0IHN0YXRpc3RpYywKKwkgKiBidXQgaXQgbWlnaHQgdGhlcmVmb3JlIHNvbWV0aW1lcyBiZSBuZWdhdGl2ZTogY29uY2VhbCB0aGF0LgorCSAqLworCWlmIChrc21fcGFnZXNfdm9sYXRpbGUgPCAwKQorCQlrc21fcGFnZXNfdm9sYXRpbGUgPSAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwga3NtX3BhZ2VzX3ZvbGF0aWxlKTsKK30KK0tTTV9BVFRSX1JPKHBhZ2VzX3ZvbGF0aWxlKTsKKworc3RhdGljIHNzaXplX3QgZnVsbF9zY2Fuc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwga3NtX3NjYW4uc2VxbnIpOworfQorS1NNX0FUVFJfUk8oZnVsbF9zY2Fucyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICprc21fYXR0cnNbXSA9IHsKKwkmc2xlZXBfbWlsbGlzZWNzX2F0dHIuYXR0ciwKKwkmcGFnZXNfdG9fc2Nhbl9hdHRyLmF0dHIsCisJJnJ1bl9hdHRyLmF0dHIsCisJJm1heF9rZXJuZWxfcGFnZXNfYXR0ci5hdHRyLAorCSZwYWdlc19zaGFyZWRfYXR0ci5hdHRyLAorCSZwYWdlc19zaGFyaW5nX2F0dHIuYXR0ciwKKwkmcGFnZXNfdW5zaGFyZWRfYXR0ci5hdHRyLAorCSZwYWdlc192b2xhdGlsZV9hdHRyLmF0dHIsCisJJmZ1bGxfc2NhbnNfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBrc21fYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBrc21fYXR0cnMsCisJLm5hbWUgPSAia3NtIiwKK307CisjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCisKK3N0YXRpYyBpbnQgX19pbml0IGtzbV9pbml0KHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICprc21fdGhyZWFkOworCWludCBlcnI7CisKKwllcnIgPSBrc21fc2xhYl9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtbV9zbG90c19oYXNoX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlMTsKKworCWtzbV90aHJlYWQgPSBrdGhyZWFkX3J1bihrc21fc2Nhbl90aHJlYWQsIE5VTEwsICJrc21kIik7CisJaWYgKElTX0VSUihrc21fdGhyZWFkKSkgeworCQlwcmludGsoS0VSTl9FUlIgImtzbTogY3JlYXRpbmcga3RocmVhZCBmYWlsZWRcbiIpOworCQllcnIgPSBQVFJfRVJSKGtzbV90aHJlYWQpOworCQlnb3RvIG91dF9mcmVlMjsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1lTRlMKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAobW1fa29iaiwgJmtzbV9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAia3NtOiByZWdpc3RlciBzeXNmcyBmYWlsZWRcbiIpOworCQlrdGhyZWFkX3N0b3Aoa3NtX3RocmVhZCk7CisJCWdvdG8gb3V0X2ZyZWUyOworCX0KKyNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KKworCXJldHVybiAwOworCitvdXRfZnJlZTI6CisJbW1fc2xvdHNfaGFzaF9mcmVlKCk7CitvdXRfZnJlZTE6CisJa3NtX3NsYWJfZnJlZSgpOworb3V0OgorCXJldHVybiBlcnI7Cit9Cittb2R1bGVfaW5pdChrc21faW5pdCkKZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuYwppbmRleCA3NmViNDE5Li5kOWFlMjA2IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKKysrIGIvbW0vbWFkdmlzZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAKIC8qCiAgKiBBbnkgYmVoYXZpb3VyIHdoaWNoIHJlc3VsdHMgaW4gY2hhbmdlcyB0byB0aGUgdm1hLT52bV9mbGFncyBuZWVkcyB0bwpAQCAtNDEsNyArNDIsNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IHZtYS0+dm1fbW07CiAJaW50IGVycm9yID0gMDsKIAlwZ29mZl90IHBnb2ZmOwotCWludCBuZXdfZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzID0gdm1hLT52bV9mbGFnczsKIAogCXN3aXRjaCAoYmVoYXZpb3IpIHsKIAljYXNlIE1BRFZfTk9STUFMOgpAQCAtNTcsOCArNTgsMTggQEAKIAkJbmV3X2ZsYWdzIHw9IFZNX0RPTlRDT1BZOwogCQlicmVhazsKIAljYXNlIE1BRFZfRE9GT1JLOgorCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0lPKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQogCQluZXdfZmxhZ3MgJj0gflZNX0RPTlRDT1BZOwogCQlicmVhazsKKwljYXNlIE1BRFZfTUVSR0VBQkxFOgorCWNhc2UgTUFEVl9VTk1FUkdFQUJMRToKKwkJZXJyb3IgPSBrc21fbWFkdmlzZSh2bWEsIHN0YXJ0LCBlbmQsIGJlaGF2aW9yLCAmbmV3X2ZsYWdzKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOwogCX0KIAogCWlmIChuZXdfZmxhZ3MgPT0gdm1hLT52bV9mbGFncykgewpAQCAtMjExLDM3ICsyMjIsMTYgQEAKIG1hZHZpc2Vfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGJlaGF2aW9yKQogewotCWxvbmcgZXJyb3I7Ci0KIAlzd2l0Y2ggKGJlaGF2aW9yKSB7Ci0JY2FzZSBNQURWX0RPRk9SSzoKLQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9JTykgewotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIE1BRFZfRE9OVEZPUks6Ci0JY2FzZSBNQURWX05PUk1BTDoKLQljYXNlIE1BRFZfU0VRVUVOVElBTDoKLQljYXNlIE1BRFZfUkFORE9NOgotCQllcnJvciA9IG1hZHZpc2VfYmVoYXZpb3Iodm1hLCBwcmV2LCBzdGFydCwgZW5kLCBiZWhhdmlvcik7Ci0JCWJyZWFrOwogCWNhc2UgTUFEVl9SRU1PVkU6Ci0JCWVycm9yID0gbWFkdmlzZV9yZW1vdmUodm1hLCBwcmV2LCBzdGFydCwgZW5kKTsKLQkJYnJlYWs7Ci0KKwkJcmV0dXJuIG1hZHZpc2VfcmVtb3ZlKHZtYSwgcHJldiwgc3RhcnQsIGVuZCk7CiAJY2FzZSBNQURWX1dJTExORUVEOgotCQllcnJvciA9IG1hZHZpc2Vfd2lsbG5lZWQodm1hLCBwcmV2LCBzdGFydCwgZW5kKTsKLQkJYnJlYWs7Ci0KKwkJcmV0dXJuIG1hZHZpc2Vfd2lsbG5lZWQodm1hLCBwcmV2LCBzdGFydCwgZW5kKTsKIAljYXNlIE1BRFZfRE9OVE5FRUQ6Ci0JCWVycm9yID0gbWFkdmlzZV9kb250bmVlZCh2bWEsIHByZXYsIHN0YXJ0LCBlbmQpOwotCQlicmVhazsKLQorCQlyZXR1cm4gbWFkdmlzZV9kb250bmVlZCh2bWEsIHByZXYsIHN0YXJ0LCBlbmQpOwogCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlicmVhazsKKwkJcmV0dXJuIG1hZHZpc2VfYmVoYXZpb3Iodm1hLCBwcmV2LCBzdGFydCwgZW5kLCBiZWhhdmlvcik7CiAJfQotCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludApAQCAtMjU2LDEyICsyNDYsMTcgQEAKIAljYXNlIE1BRFZfUkVNT1ZFOgogCWNhc2UgTUFEVl9XSUxMTkVFRDoKIAljYXNlIE1BRFZfRE9OVE5FRUQ6CisjaWZkZWYgQ09ORklHX0tTTQorCWNhc2UgTUFEVl9NRVJHRUFCTEU6CisJY2FzZSBNQURWX1VOTUVSR0VBQkxFOgorI2VuZGlmCiAJCXJldHVybiAxOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQogfQorCiAvKgogICogVGhlIG1hZHZpc2UoMikgc3lzdGVtIGNhbGwuCiAgKgpAQCAtMjg2LDYgKzI4MSwxMiBAQAogICoJCXNvIHRoZSBrZXJuZWwgY2FuIGZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAqICBNQURWX1JFTU9WRSAtIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBmcmVlIHVwIHRoZSBnaXZlbiByYW5nZSBvZgogICoJCXBhZ2VzIGFuZCBhc3NvY2lhdGVkIGJhY2tpbmcgc3RvcmUuCisgKiAgTUFEVl9ET05URk9SSyAtIG9taXQgdGhpcyBhcmVhIGZyb20gY2hpbGQncyBhZGRyZXNzIHNwYWNlIHdoZW4gZm9ya2luZzoKKyAqCQl0eXBpY2FsbHksIHRvIGF2b2lkIENPV2luZyBwYWdlcyBwaW5uZWQgYnkgZ2V0X3VzZXJfcGFnZXMoKS4KKyAqICBNQURWX0RPRk9SSyAtIGNhbmNlbCBNQURWX0RPTlRGT1JLOiBubyBsb25nZXIgb21pdCB0aGlzIGFyZWEgd2hlbiBmb3JraW5nLgorICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluCisgKgkJdGhpcyBhcmVhIHdpdGggcGFnZXMgb2YgaWRlbnRpY2FsIGNvbnRlbnQgZnJvbSBvdGhlciBzdWNoIGFyZWFzLgorICogIE1BRFZfVU5NRVJHRUFCTEUtIGNhbmNlbCBNQURWX01FUkdFQUJMRTogbm8gbG9uZ2VyIG1lcmdlIHBhZ2VzIHdpdGggb3RoZXJzLgogICoKICAqIHJldHVybiB2YWx1ZXM6CiAgKiAgemVybyAgICAtIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBmZDQ1MjlkLi45YjEwZDg3IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAlpbnQgbmlkID0gei0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKIAlpbnQgemlkID0gem9uZV9pZHgoeik7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwotCWludCBscnUgPSBMUlVfRklMRSAqICEhZmlsZSArICEhYWN0aXZlOworCWludCBscnUgPSBMUlVfRklMRSAqIGZpbGUgKyBhY3RpdmU7CiAJaW50IHJldDsKIAogCUJVR19PTighbWVtX2NvbnQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBlOGY2M2Q5Li5iMTQ0M2FjMDcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgpAQCAtMTA3LDYgKzEwOCwxOCBAQAogfQogX19zZXR1cCgibm9yYW5kbWFwcyIsIGRpc2FibGVfcmFuZG1hcHMpOwogCit1bnNpZ25lZCBsb25nIHplcm9fcGZuIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5OworCisvKgorICogQ09ORklHX01NVSBhcmNoaXRlY3R1cmVzIHNldCB1cCBaRVJPX1BBR0UgaW4gdGhlaXIgcGFnaW5nX2luaXQoKQorICovCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3plcm9fcGZuKHZvaWQpCit7CisJemVyb19wZm4gPSBwYWdlX3RvX3BmbihaRVJPX1BBR0UoMCkpOworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChpbml0X3plcm9fcGZuKTsKIAogLyoKICAqIElmIGEgcD9kX2JhZCBlbnRyeSBpcyBmb3VuZCB3aGlsZSB3YWxraW5nIHBhZ2UgdGFibGVzLCByZXBvcnQKQEAgLTQ0Myw2ICs0NTYsMjAgQEAKIAlyZXR1cm4gKGZsYWdzICYgKFZNX1NIQVJFRCB8IFZNX01BWVdSSVRFKSkgPT0gVk1fTUFZV1JJVEU7CiB9CiAKKyNpZm5kZWYgaXNfemVyb19wZm4KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3plcm9fcGZuKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXJldHVybiBwZm4gPT0gemVyb19wZm47Cit9CisjZW5kaWYKKworI2lmbmRlZiBteV96ZXJvX3Bmbgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG15X3plcm9fcGZuKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gemVyb19wZm47Cit9CisjZW5kaWYKKwogLyoKICAqIHZtX25vcm1hbF9wYWdlIC0tIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgInN0cnVjdCBwYWdlIiBhc3NvY2lhdGVkIHdpdGggYSBwdGUuCiAgKgpAQCAtNDk4LDcgKzUyNSw5IEBACiAJaWYgKEhBVkVfUFRFX1NQRUNJQUwpIHsKIAkJaWYgKGxpa2VseSghcHRlX3NwZWNpYWwocHRlKSkpCiAJCQlnb3RvIGNoZWNrX3BmbjsKLQkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9QRk5NQVAgfCBWTV9NSVhFRE1BUCkpKQorCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9QRk5NQVAgfCBWTV9NSVhFRE1BUCkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFpc196ZXJvX3BmbihwZm4pKQogCQkJcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgTlVMTCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTUyMCw2ICs1NDksOCBAQAogCQl9CiAJfQogCisJaWYgKGlzX3plcm9fcGZuKHBmbikpCisJCXJldHVybiBOVUxMOwogY2hlY2tfcGZuOgogCWlmICh1bmxpa2VseShwZm4gPiBoaWdoZXN0X21lbW1hcF9wZm4pKSB7CiAJCXByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIE5VTEwpOwpAQCAtNTk3LDggKzYyOCw4IEBACiAJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlKTsKIAlpZiAocGFnZSkgewogCQlnZXRfcGFnZShwYWdlKTsKLQkJcGFnZV9kdXBfcm1hcChwYWdlLCB2bWEsIGFkZHIpOwotCQlyc3NbISFQYWdlQW5vbihwYWdlKV0rKzsKKwkJcGFnZV9kdXBfcm1hcChwYWdlKTsKKwkJcnNzW1BhZ2VBbm9uKHBhZ2UpXSsrOwogCX0KIAogb3V0X3NldF9wdGU6CkBAIC0xMTQzLDkgKzExNzQsMTQgQEAKIAkJZ290byBub19wYWdlOwogCWlmICgoZmxhZ3MgJiBGT0xMX1dSSVRFKSAmJiAhcHRlX3dyaXRlKHB0ZSkpCiAJCWdvdG8gdW5sb2NrOworCiAJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkcmVzcywgcHRlKTsKLQlpZiAodW5saWtlbHkoIXBhZ2UpKQotCQlnb3RvIGJhZF9wYWdlOworCWlmICh1bmxpa2VseSghcGFnZSkpIHsKKwkJaWYgKChmbGFncyAmIEZPTExfRFVNUCkgfHwKKwkJICAgICFpc196ZXJvX3BmbihwdGVfcGZuKHB0ZSkpKQorCQkJZ290byBiYWRfcGFnZTsKKwkJcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7CisJfQogCiAJaWYgKGZsYWdzICYgRk9MTF9HRVQpCiAJCWdldF9wYWdlKHBhZ2UpOwpAQCAtMTE3Myw2NSArMTIwOSw0NiBAQAogCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKIAlpZiAoIXB0ZV9ub25lKHB0ZSkpCiAJCXJldHVybiBwYWdlOwotCS8qIEZhbGwgdGhyb3VnaCB0byBaRVJPX1BBR0UgaGFuZGxpbmcgKi8KKwogbm9fcGFnZV90YWJsZToKIAkvKgogCSAqIFdoZW4gY29yZSBkdW1waW5nIGFuIGVub3Jtb3VzIGFub255bW91cyBhcmVhIHRoYXQgbm9ib2R5Ci0JICogaGFzIHRvdWNoZWQgc28gZmFyLCB3ZSBkb24ndCB3YW50IHRvIGFsbG9jYXRlIHBhZ2UgdGFibGVzLgorCSAqIGhhcyB0b3VjaGVkIHNvIGZhciwgd2UgZG9uJ3Qgd2FudCB0byBhbGxvY2F0ZSB1bm5lY2Vzc2FyeSBwYWdlcyBvcgorCSAqIHBhZ2UgdGFibGVzLiAgUmV0dXJuIGVycm9yIGluc3RlYWQgb2YgTlVMTCB0byBza2lwIGhhbmRsZV9tbV9mYXVsdCwKKwkgKiB0aGVuIGdldF9kdW1wX3BhZ2UoKSB3aWxsIHJldHVybiBOVUxMIHRvIGxlYXZlIGEgaG9sZSBpbiB0aGUgZHVtcC4KKwkgKiBCdXQgd2UgY2FuIG9ubHkgbWFrZSB0aGlzIG9wdGltaXphdGlvbiB3aGVyZSBhIGhvbGUgd291bGQgc3VyZWx5CisJICogYmUgemVyby1maWxsZWQgaWYgaGFuZGxlX21tX2ZhdWx0KCkgYWN0dWFsbHkgZGlkIGhhbmRsZSBpdC4KIAkgKi8KLQlpZiAoZmxhZ3MgJiBGT0xMX0FOT04pIHsKLQkJcGFnZSA9IFpFUk9fUEFHRSgwKTsKLQkJaWYgKGZsYWdzICYgRk9MTF9HRVQpCi0JCQlnZXRfcGFnZShwYWdlKTsKLQkJQlVHX09OKGZsYWdzICYgRk9MTF9XUklURSk7Ci0JfQorCWlmICgoZmxhZ3MgJiBGT0xMX0RVTVApICYmCisJICAgICghdm1hLT52bV9vcHMgfHwgIXZtYS0+dm1fb3BzLT5mYXVsdCkpCisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCXJldHVybiBwYWdlOwogfQogCi0vKiBDYW4gd2UgZG8gdGhlIEZPTExfQU5PTiBvcHRpbWl6YXRpb24/ICovCi1zdGF0aWMgaW5saW5lIGludCB1c2VfemVyb19wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byBvcHRpbWl6ZSBGT0xMX0FOT04gZm9yIG1ha2VfcGFnZXNfcHJlc2VudCgpCi0JICogd2hlbiBpdCB0cmllcyB0byBwYWdlIGluIGEgVk1fTE9DS0VEIHJlZ2lvbi4gQXMgdG8gVk1fU0hBUkVELAotCSAqIHdlIHdhbnQgdG8gZ2V0IHRoZSBwYWdlIGZyb20gdGhlIHBhZ2UgdGFibGVzIHRvIG1ha2Ugc3VyZQotCSAqIHRoYXQgd2Ugc2VyaWFsaXplIGFuZCB1cGRhdGUgd2l0aCBhbnkgb3RoZXIgdXNlciBvZiB0aGF0Ci0JICogbWFwcGluZy4KLQkgKi8KLQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9MT0NLRUQgfCBWTV9TSEFSRUQpKQotCQlyZXR1cm4gMDsKLQkvKgotCSAqIEFuZCBpZiB3ZSBoYXZlIGEgZmF1bHQgcm91dGluZSwgaXQncyBub3QgYW4gYW5vbnltb3VzIHJlZ2lvbi4KLQkgKi8KLQlyZXR1cm4gIXZtYS0+dm1fb3BzIHx8ICF2bWEtPnZtX29wcy0+ZmF1bHQ7Ci19Ci0KLQotCiBpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2VzLCBpbnQgZmxhZ3MsCisJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLAogCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IHZtX2ZsYWdzID0gMDsKLQlpbnQgd3JpdGUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19XUklURSk7Ci0JaW50IGZvcmNlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfRk9SQ0UpOwotCWludCBpZ25vcmUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TKTsKLQlpbnQgaWdub3JlX3NpZ2tpbGwgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfU0lHS0lMTCk7CisJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAogCWlmIChucl9wYWdlcyA8PSAwKQogCQlyZXR1cm4gMDsKKworCVZNX0JVR19PTighIXBhZ2VzICE9ICEhKGd1cF9mbGFncyAmIEZPTExfR0VUKSk7CisKIAkvKiAKIAkgKiBSZXF1aXJlIHJlYWQgb3Igd3JpdGUgcGVybWlzc2lvbnMuCi0JICogSWYgJ2ZvcmNlJyBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCisJICogSWYgRk9MTF9GT1JDRSBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCiAJICovCi0Jdm1fZmxhZ3MgID0gd3JpdGUgPyAoVk1fV1JJVEUgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX01BWVJFQUQpOwotCXZtX2ZsYWdzICY9IGZvcmNlID8gKFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX1dSSVRFKTsKKwl2bV9mbGFncyAgPSAoZ3VwX2ZsYWdzICYgRk9MTF9XUklURSkgPworCQkJKFZNX1dSSVRFIHwgVk1fTUFZV1JJVEUpIDogKFZNX1JFQUQgfCBWTV9NQVlSRUFEKTsKKwl2bV9mbGFncyAmPSAoZ3VwX2ZsYWdzICYgRk9MTF9GT1JDRSkgPworCQkJKFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX1dSSVRFKTsKIAlpID0gMDsKIAogCWRvIHsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JCXVuc2lnbmVkIGludCBmb2xsX2ZsYWdzOwogCiAJCXZtYSA9IGZpbmRfZXh0ZW5kX3ZtYShtbSwgc3RhcnQpOwogCQlpZiAoIXZtYSAmJiBpbl9nYXRlX2FyZWEodHNrLCBzdGFydCkpIHsKQEAgLTEyNDMsNyArMTI2MCw3IEBACiAJCQlwdGVfdCAqcHRlOwogCiAJCQkvKiB1c2VyIGdhdGUgcGFnZXMgYXJlIHJlYWQtb25seSAqLwotCQkJaWYgKCFpZ25vcmUgJiYgd3JpdGUpCisJCQlpZiAoZ3VwX2ZsYWdzICYgRk9MTF9XUklURSkKIAkJCQlyZXR1cm4gaSA/IDogLUVGQVVMVDsKIAkJCWlmIChwZyA+IFRBU0tfU0laRSkKIAkJCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2socGcpOwpAQCAtMTI3NywzOCArMTI5NCwyNiBAQAogCiAJCWlmICghdm1hIHx8CiAJCSAgICAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpIHx8Ci0JCSAgICAoIWlnbm9yZSAmJiAhKHZtX2ZsYWdzICYgdm1hLT52bV9mbGFncykpKQorCQkgICAgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKQogCQkJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiAKIAkJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7CiAJCQlpID0gZm9sbG93X2h1Z2V0bGJfcGFnZShtbSwgdm1hLCBwYWdlcywgdm1hcywKLQkJCQkJCSZzdGFydCwgJm5yX3BhZ2VzLCBpLCB3cml0ZSk7CisJCQkJCSZzdGFydCwgJm5yX3BhZ2VzLCBpLCBndXBfZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlmb2xsX2ZsYWdzID0gRk9MTF9UT1VDSDsKLQkJaWYgKHBhZ2VzKQotCQkJZm9sbF9mbGFncyB8PSBGT0xMX0dFVDsKLQkJaWYgKCF3cml0ZSAmJiB1c2VfemVyb19wYWdlKHZtYSkpCi0JCQlmb2xsX2ZsYWdzIHw9IEZPTExfQU5PTjsKLQogCQlkbyB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJCXVuc2lnbmVkIGludCBmb2xsX2ZsYWdzID0gZ3VwX2ZsYWdzOwogCiAJCQkvKgogCQkJICogSWYgd2UgaGF2ZSBhIHBlbmRpbmcgU0lHS0lMTCwgZG9uJ3Qga2VlcCBmYXVsdGluZwotCQkJICogcGFnZXMgYW5kIHBvdGVudGlhbGx5IGFsbG9jYXRpbmcgbWVtb3J5LCB1bmxlc3MKLQkJCSAqIGN1cnJlbnQgaXMgaGFuZGxpbmcgbXVubG9jay0tZS5nLiwgb24gZXhpdC4gSW4KLQkJCSAqIHRoYXQgY2FzZSwgd2UgYXJlIG5vdCBhbGxvY2F0aW5nIG1lbW9yeS4gIFJhdGhlciwKLQkJCSAqIHdlJ3JlIG9ubHkgdW5sb2NraW5nIGFscmVhZHkgcmVzaWRlbnQvbWFwcGVkIHBhZ2VzLgorCQkJICogcGFnZXMgYW5kIHBvdGVudGlhbGx5IGFsbG9jYXRpbmcgbWVtb3J5LgogCQkJICovCi0JCQlpZiAodW5saWtlbHkoIWlnbm9yZV9zaWdraWxsICYmCi0JCQkJCWZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSkKKwkJCWlmICh1bmxpa2VseShmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkpCiAJCQkJcmV0dXJuIGkgPyBpIDogLUVSRVNUQVJUU1lTOwogCi0JCQlpZiAod3JpdGUpCi0JCQkJZm9sbF9mbGFncyB8PSBGT0xMX1dSSVRFOwotCiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCXdoaWxlICghKHBhZ2UgPSBmb2xsb3dfcGFnZSh2bWEsIHN0YXJ0LCBmb2xsX2ZsYWdzKSkpIHsKIAkJCQlpbnQgcmV0OwpAQCAtMTQxOSwxOCArMTQyNCw0NyBAQAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIGludCB3cml0ZSwgaW50IGZvcmNlLAogCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQogewotCWludCBmbGFncyA9IDA7CisJaW50IGZsYWdzID0gRk9MTF9UT1VDSDsKIAorCWlmIChwYWdlcykKKwkJZmxhZ3MgfD0gRk9MTF9HRVQ7CiAJaWYgKHdyaXRlKQotCQlmbGFncyB8PSBHVVBfRkxBR1NfV1JJVEU7CisJCWZsYWdzIHw9IEZPTExfV1JJVEU7CiAJaWYgKGZvcmNlKQotCQlmbGFncyB8PSBHVVBfRkxBR1NfRk9SQ0U7CisJCWZsYWdzIHw9IEZPTExfRk9SQ0U7CiAKIAlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyh0c2ssIG1tLCBzdGFydCwgbnJfcGFnZXMsIGZsYWdzLCBwYWdlcywgdm1hcyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZ2V0X3VzZXJfcGFnZXMpOwogCisvKioKKyAqIGdldF9kdW1wX3BhZ2UoKSAtIHBpbiB1c2VyIHBhZ2UgaW4gbWVtb3J5IHdoaWxlIHdyaXRpbmcgaXQgdG8gY29yZSBkdW1wCisgKiBAYWRkcjogdXNlciBhZGRyZXNzCisgKgorICogUmV0dXJucyBzdHJ1Y3QgcGFnZSBwb2ludGVyIG9mIHVzZXIgcGFnZSBwaW5uZWQgZm9yIGR1bXAsCisgKiB0byBiZSBmcmVlZCBhZnRlcndhcmRzIGJ5IHBhZ2VfY2FjaGVfcmVsZWFzZSgpIG9yIHB1dF9wYWdlKCkuCisgKgorICogUmV0dXJucyBOVUxMIG9uIGFueSBraW5kIG9mIGZhaWx1cmUgLSBhIGhvbGUgbXVzdCB0aGVuIGJlIGluc2VydGVkIGludG8KKyAqIHRoZSBjb3JlZmlsZSwgdG8gcHJlc2VydmUgYWxpZ25tZW50IHdpdGggaXRzIGhlYWRlcnM7IGFuZCBhbHNvIHJldHVybnMKKyAqIE5VTEwgd2hlcmV2ZXIgdGhlIFpFUk9fUEFHRSwgb3IgYW4gYW5vbnltb3VzIHB0ZV9ub25lLCBoYXMgYmVlbiBmb3VuZCAtCisgKiBhbGxvd2luZyBhIGhvbGUgdG8gYmUgbGVmdCBpbiB0aGUgY29yZWZpbGUgdG8gc2F2ZSBkaXNrc3BhY2UuCisgKgorICogQ2FsbGVkIHdpdGhvdXQgbW1hcF9zZW0sIGJ1dCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkcyBoYXZlIGJlZW4ga2lsbGVkLgorICovCisjaWZkZWYgQ09ORklHX0VMRl9DT1JFCitzdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAoX19nZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgMSwKKwkJCUZPTExfRk9SQ0UgfCBGT0xMX0RVTVAgfCBGT0xMX0dFVCwgJnBhZ2UsICZ2bWEpIDwgMSkKKwkJcmV0dXJuIE5VTEw7CisJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwlyZXR1cm4gcGFnZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRUxGX0NPUkUgKi8KKwogcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlzcGlubG9ja190ICoqcHRsKQogewpAQCAtMTYwOCw3ICsxNjQyLDggQEAKIAkgKiBJZiB3ZSBkb24ndCBoYXZlIHB0ZSBzcGVjaWFsLCB0aGVuIHdlIGhhdmUgdG8gdXNlIHRoZSBwZm5fdmFsaWQoKQogCSAqIGJhc2VkIFZNX01JWEVETUFQIHNjaGVtZSAoc2VlIHZtX25vcm1hbF9wYWdlKSwgYW5kIHRodXMgd2UgKm11c3QqCiAJICogcmVmY291bnQgdGhlIHBhZ2UgaWYgcGZuX3ZhbGlkIGlzIHRydWUgKGhlbmNlIGluc2VydF9wYWdlIHJhdGhlcgotCSAqIHRoYW4gaW5zZXJ0X3BmbikuCisJICogdGhhbiBpbnNlcnRfcGZuKS4gIElmIGEgemVyb19wZm4gd2VyZSBpbnNlcnRlZCBpbnRvIGEgVk1fTUlYRURNQVAKKwkgKiB3aXRob3V0IHB0ZSBzcGVjaWFsLCBpdCB3b3VsZCB0aGVyZSBiZSByZWZjb3VudGVkIGFzIGEgbm9ybWFsIHBhZ2UuCiAJICovCiAJaWYgKCFIQVZFX1BURV9TUEVDSUFMICYmIHBmbl92YWxpZChwZm4pKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMTk3NCw3ICsyMDA5LDcgQEAKIAkgKiBUYWtlIG91dCBhbm9ueW1vdXMgcGFnZXMgZmlyc3QsIGFub255bW91cyBzaGFyZWQgdm1hcyBhcmUKIAkgKiBub3QgZGlydHkgYWNjb3VudGFibGUuCiAJICovCi0JaWYgKFBhZ2VBbm9uKG9sZF9wYWdlKSkgeworCWlmIChQYWdlQW5vbihvbGRfcGFnZSkgJiYgIVBhZ2VLc20ob2xkX3BhZ2UpKSB7CiAJCWlmICghdHJ5bG9ja19wYWdlKG9sZF9wYWdlKSkgewogCQkJcGFnZV9jYWNoZV9nZXQob2xkX3BhZ2UpOwogCQkJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwpAQCAtMjA3NSwxMCArMjExMCwxOSBAQAogCiAJaWYgKHVubGlrZWx5KGFub25fdm1hX3ByZXBhcmUodm1hKSkpCiAJCWdvdG8gb29tOwotCVZNX0JVR19PTihvbGRfcGFnZSA9PSBaRVJPX1BBR0UoMCkpOwotCW5ld19wYWdlID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsIHZtYSwgYWRkcmVzcyk7Ci0JaWYgKCFuZXdfcGFnZSkKLQkJZ290byBvb207CisKKwlpZiAoaXNfemVyb19wZm4ocHRlX3BmbihvcmlnX3B0ZSkpKSB7CisJCW5ld19wYWdlID0gYWxsb2NfemVyb2VkX3VzZXJfaGlnaHBhZ2VfbW92YWJsZSh2bWEsIGFkZHJlc3MpOworCQlpZiAoIW5ld19wYWdlKQorCQkJZ290byBvb207CisJfSBlbHNlIHsKKwkJbmV3X3BhZ2UgPSBhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVJfTU9WQUJMRSwgdm1hLCBhZGRyZXNzKTsKKwkJaWYgKCFuZXdfcGFnZSkKKwkJCWdvdG8gb29tOworCQljb3dfdXNlcl9wYWdlKG5ld19wYWdlLCBvbGRfcGFnZSwgYWRkcmVzcywgdm1hKTsKKwl9CisJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOworCiAJLyoKIAkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKIAkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCkBAIC0yMDg4LDggKzIxMzIsNiBAQAogCQljbGVhcl9wYWdlX21sb2NrKG9sZF9wYWdlKTsKIAkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwogCX0KLQljb3dfdXNlcl9wYWdlKG5ld19wYWdlLCBvbGRfcGFnZSwgYWRkcmVzcywgdm1hKTsKLQlfX1NldFBhZ2VVcHRvZGF0ZShuZXdfcGFnZSk7CiAKIAlpZiAobWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShuZXdfcGFnZSwgbW0sIEdGUF9LRVJORUwpKQogCQlnb3RvIG9vbV9mcmVlX25ldzsKQEAgLTIxMTUsOSArMjE1NywxNCBAQAogCQkgKiBzZWVuIGluIHRoZSBwcmVzZW5jZSBvZiBvbmUgdGhyZWFkIGRvaW5nIFNNQyBhbmQgYW5vdGhlcgogCQkgKiB0aHJlYWQgZG9pbmcgQ09XLgogCQkgKi8KLQkJcHRlcF9jbGVhcl9mbHVzaF9ub3RpZnkodm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlKTsKKwkJcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwogCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKG5ld19wYWdlLCB2bWEsIGFkZHJlc3MpOwotCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CisJCS8qCisJCSAqIFdlIGNhbGwgdGhlIG5vdGlmeSBtYWNybyBoZXJlIGJlY2F1c2UsIHdoZW4gdXNpbmcgc2Vjb25kYXJ5CisJCSAqIG1tdSBwYWdlIHRhYmxlcyAoc3VjaCBhcyBrdm0gc2hhZG93IHBhZ2UgdGFibGVzKSwgd2Ugd2FudCB0aGUKKwkJICogbmV3IHBhZ2UgdG8gYmUgbWFwcGVkIGRpcmVjdGx5IGludG8gdGhlIHNlY29uZGFyeSBwYWdlIHRhYmxlLgorCQkgKi8KKwkJc2V0X3B0ZV9hdF9ub3RpZnkobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAkJaWYgKG9sZF9wYWdlKSB7CiAJCQkvKgpAQCAtMjYyNSw2ICsyNjcyLDE2IEBACiAJc3BpbmxvY2tfdCAqcHRsOwogCXB0ZV90IGVudHJ5OwogCisJaWYgKCEoZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkgeworCQllbnRyeSA9IHB0ZV9ta3NwZWNpYWwocGZuX3B0ZShteV96ZXJvX3BmbihhZGRyZXNzKSwKKwkJCQkJCXZtYS0+dm1fcGFnZV9wcm90KSk7CisJCXB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWQpOworCQlzcGluX2xvY2socHRsKTsKKwkJaWYgKCFwdGVfbm9uZSgqcGFnZV90YWJsZSkpCisJCQlnb3RvIHVubG9jazsKKwkJZ290byBzZXRwdGU7CisJfQorCiAJLyogQWxsb2NhdGUgb3VyIG93biBwcml2YXRlIHBhZ2UuICovCiAJcHRlX3VubWFwKHBhZ2VfdGFibGUpOwogCkBAIC0yNjM5LDEzICsyNjk2LDE2IEBACiAJCWdvdG8gb29tX2ZyZWVfcGFnZTsKIAogCWVudHJ5ID0gbWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KTsKLQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCisJCWVudHJ5ID0gcHRlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpKTsKIAogCXBhZ2VfdGFibGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOwogCWlmICghcHRlX25vbmUoKnBhZ2VfdGFibGUpKQogCQlnb3RvIHJlbGVhc2U7CisKIAlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOwogCXBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKK3NldHB0ZToKIAlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAKIAkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCBlNDQxMmE2Li44MjFkZWU1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTMzOSw4ICszMzksMTEgQEAKIAogdm9pZCBvbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCiAJdG90YWxyYW1fcGFnZXMrKzsKLQludW1fcGh5c3BhZ2VzKys7CisJaWYgKHBmbiA+PSBudW1fcGh5c3BhZ2VzKQorCQludW1fcGh5c3BhZ2VzID0gcGZuICsgMTsKIAogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQpAQCAtNDEwLDcgKzQxMyw3IEBACiAJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJbmVlZF96b25lbGlzdHNfcmVidWlsZCA9IDE7CiAKLQlyZXQgPSB3YWxrX21lbW9yeV9yZXNvdXJjZShwZm4sIG5yX3BhZ2VzLCAmb25saW5lZF9wYWdlcywKKwlyZXQgPSB3YWxrX3N5c3RlbV9yYW1fcmFuZ2UocGZuLCBucl9wYWdlcywgJm9ubGluZWRfcGFnZXMsCiAJCW9ubGluZV9wYWdlc19yYW5nZSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAib25saW5lX3BhZ2VzICVseCBhdCAlbHggZmFpbGVkXG4iLApAQCAtNDIyLDYgKzQyNSw3IEBACiAJem9uZS0+cHJlc2VudF9wYWdlcyArPSBvbmxpbmVkX3BhZ2VzOwogCXpvbmUtPnpvbmVfcGdkYXQtPm5vZGVfcHJlc2VudF9wYWdlcyArPSBvbmxpbmVkX3BhZ2VzOwogCisJem9uZV9wY3BfdXBkYXRlKHpvbmUpOwogCXNldHVwX3Blcl96b25lX3dtYXJrcygpOwogCWNhbGN1bGF0ZV96b25lX2luYWN0aXZlX3JhdGlvKHpvbmUpOwogCWlmIChvbmxpbmVkX3BhZ2VzKSB7CkBAIC03MDEsNyArNzA1LDcgQEAKIHN0YXRpYyB2b2lkCiBvZmZsaW5lX2lzb2xhdGVkX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiB7Ci0Jd2Fsa19tZW1vcnlfcmVzb3VyY2Uoc3RhcnRfcGZuLCBlbmRfcGZuIC0gc3RhcnRfcGZuLCBOVUxMLAorCXdhbGtfc3lzdGVtX3JhbV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4gLSBzdGFydF9wZm4sIE5VTEwsCiAJCQkJb2ZmbGluZV9pc29sYXRlZF9wYWdlc19jYik7CiB9CiAKQEAgLTcyNyw3ICs3MzEsNyBAQAogCWxvbmcgb2ZmbGluZWQgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSB3YWxrX21lbW9yeV9yZXNvdXJjZShzdGFydF9wZm4sIGVuZF9wZm4gLSBzdGFydF9wZm4sICZvZmZsaW5lZCwKKwlyZXQgPSB3YWxrX3N5c3RlbV9yYW1fcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuIC0gc3RhcnRfcGZuLCAmb2ZmbGluZWQsCiAJCQljaGVja19wYWdlc19pc29sYXRlZF9jYik7CiAJaWYgKHJldCA8IDApCiAJCW9mZmxpbmVkID0gKGxvbmcpcmV0OwpAQCAtODMxLDcgKzgzNSw2IEBACiAJem9uZS0+cHJlc2VudF9wYWdlcyAtPSBvZmZsaW5lZF9wYWdlczsKIAl6b25lLT56b25lX3BnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgLT0gb2ZmbGluZWRfcGFnZXM7CiAJdG90YWxyYW1fcGFnZXMgLT0gb2ZmbGluZWRfcGFnZXM7Ci0JbnVtX3BoeXNwYWdlcyAtPSBvZmZsaW5lZF9wYWdlczsKIAogCXNldHVwX3Blcl96b25lX3dtYXJrcygpOwogCWNhbGN1bGF0ZV96b25lX2luYWN0aXZlX3JhdGlvKHpvbmUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jCmluZGV4IDMyZTc1ZDQuLjFhM2JjM2QgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYworKysgYi9tbS9tZW1wb29sLmMKQEAgLTMwOCwxMyArMzA4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9rbWFsbG9jKTsKIAotdm9pZCAqbWVtcG9vbF9remFsbG9jKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpCi17Ci0Jc2l6ZV90IHNpemUgPSAoc2l6ZV90KXBvb2xfZGF0YTsKLQlyZXR1cm4ga3phbGxvYyhzaXplLCBnZnBfbWFzayk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbXBvb2xfa3phbGxvYyk7Ci0KIHZvaWQgbWVtcG9vbF9rZnJlZSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpCiB7CiAJa2ZyZWUoZWxlbWVudCk7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggOTM5ODg4Zi4uMTYwNTJlOCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNjcsNiArNjcsOCBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHBhZ2UyLCBsLCBscnUpIHsKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCisJCQkJcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAkJY291bnQrKzsKIAl9CkBAIC0xNDcsNyArMTQ5LDcgQEAKIHN0YXRpYyB2b2lkIHJlbW92ZV9maWxlX21pZ3JhdGlvbl9wdGVzKHN0cnVjdCBwYWdlICpvbGQsIHN0cnVjdCBwYWdlICpuZXcpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcobmV3KTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG5ldy0+bWFwcGluZzsKIAlzdHJ1Y3QgcHJpb190cmVlX2l0ZXIgaXRlcjsKIAlwZ29mZl90IHBnb2ZmID0gbmV3LT5pbmRleCA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIFBBR0VfU0hJRlQpOwogCkBAIC0yNzAsNyArMjcyLDcgQEAKIAlwc2xvdCA9IHJhZGl4X3RyZWVfbG9va3VwX3Nsb3QoJm1hcHBpbmctPnBhZ2VfdHJlZSwKICAJCQkJCXBhZ2VfaW5kZXgocGFnZSkpOwogCi0JZXhwZWN0ZWRfY291bnQgPSAyICsgISFwYWdlX2hhc19wcml2YXRlKHBhZ2UpOworCWV4cGVjdGVkX2NvdW50ID0gMiArIHBhZ2VfaGFzX3ByaXZhdGUocGFnZSk7CiAJaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gZXhwZWN0ZWRfY291bnQgfHwKIAkJCShzdHJ1Y3QgcGFnZSAqKXJhZGl4X3RyZWVfZGVyZWZfc2xvdChwc2xvdCkgIT0gcGFnZSkgewogCQlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CkBAIC0zMTIsNyArMzE0LDEwIEBACiAJICovCiAJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOwogCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShuZXdwYWdlLCBOUl9GSUxFX1BBR0VTKTsKLQorCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkgeworCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0hNRU0pOworCQlfX2luY196b25lX3BhZ2Vfc3RhdGUobmV3cGFnZSwgTlJfU0hNRU0pOworCX0KIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTY2NCwxMyArNjY5LDE1IEBACiAJCQkgKiAgICBuZWVkcyB0byBiZSBlZmZlY3RpdmUuCiAJCQkgKi8KIAkJCXRyeV90b19mcmVlX2J1ZmZlcnMocGFnZSk7CisJCQlnb3RvIHJjdV91bmxvY2s7CiAJCX0KLQkJZ290byByY3VfdW5sb2NrOworCQlnb3RvIHNraXBfdW5tYXA7CiAJfQogCiAJLyogRXN0YWJsaXNoIG1pZ3JhdGlvbiBwdGVzIG9yIHJlbW92ZSBwdGVzICovCiAJdHJ5X3RvX3VubWFwKHBhZ2UsIDEpOwogCitza2lwX3VubWFwOgogCWlmICghcGFnZV9tYXBwZWQocGFnZSkpCiAJCXJjID0gbW92ZV90b19uZXdfcGFnZShuZXdwYWdlLCBwYWdlKTsKIApAQCAtNjkzLDYgKzcwMCw4IEBACiAgCQkgKiByZXN0b3JlZC4KICAJCSAqLwogIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCisJCQkJcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKQEAgLTczNyw2ICs3NDYsMTMgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTI7CiAJaW50IHN3YXB3cml0ZSA9IGN1cnJlbnQtPmZsYWdzICYgUEZfU1dBUFdSSVRFOwogCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgZnJvbSwgbHJ1KQorCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCisJCQkJcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAoIXN3YXB3cml0ZSkKIAkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfU1dBUFdSSVRFOwpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggNDVlYjY1MC4uYmQ2ZjBlNCAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC0xMzksNDkgKzEzOSwzNiBAQAogfQogCiAvKioKLSAqIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSAgbWxvY2svbXVubG9jayBhIHJhbmdlIG9mIHBhZ2VzIGluIHRoZSB2bWEuCisgKiBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIC0gIG1sb2NrIGEgcmFuZ2Ugb2YgcGFnZXMgaW4gdGhlIHZtYS4KICAqIEB2bWE6ICAgdGFyZ2V0IHZtYQogICogQHN0YXJ0OiBzdGFydCBhZGRyZXNzCiAgKiBAZW5kOiAgIGVuZCBhZGRyZXNzCi0gKiBAbWxvY2s6IDAgaW5kaWNhdGUgbXVubG9jaywgb3RoZXJ3aXNlIG1sb2NrLgogICoKLSAqIElmIEBtbG9jayA9PSAwLCB1bmxvY2sgYW4gbWxvY2tlZCByYW5nZTsKLSAqIGVsc2UgbWxvY2sgdGhlIHJhbmdlIG9mIHBhZ2VzLiAgVGhpcyB0YWtlcyBjYXJlIG9mIG1ha2luZyB0aGUgcGFnZXMgcHJlc2VudCAsCi0gKiB0b28uCisgKiBUaGlzIHRha2VzIGNhcmUgb2YgbWFraW5nIHRoZSBwYWdlcyBwcmVzZW50IHRvby4KICAqCiAgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLgogICoKICAqIHZtYS0+dm1fbW0tPm1tYXBfc2VtIG11c3QgYmUgaGVsZCBmb3IgYXQgbGVhc3QgcmVhZC4KICAqLwogc3RhdGljIGxvbmcgX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJICAgaW50IG1sb2NrKQorCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsgLyogMTYgZ2l2ZXMgYSByZWFzb25hYmxlIGJhdGNoICovCiAJaW50IG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSAvIFBBR0VfU0laRTsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgZ3VwX2ZsYWdzID0gMDsKKwlpbnQgZ3VwX2ZsYWdzOwogCiAJVk1fQlVHX09OKHN0YXJ0ICYgflBBR0VfTUFTSyk7CiAJVk1fQlVHX09OKGVuZCAgICYgflBBR0VfTUFTSyk7CiAJVk1fQlVHX09OKHN0YXJ0IDwgdm1hLT52bV9zdGFydCk7CiAJVk1fQlVHX09OKGVuZCAgID4gdm1hLT52bV9lbmQpOwotCVZNX0JVR19PTigoIXJ3c2VtX2lzX2xvY2tlZCgmbW0tPm1tYXBfc2VtKSkgJiYKLQkJICAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgIT0gMCkpOworCVZNX0JVR19PTighcndzZW1faXNfbG9ja2VkKCZtbS0+bW1hcF9zZW0pKTsKIAotCS8qCi0JICogbWxvY2s6ICAgZG9uJ3QgcGFnZSBwb3B1bGF0ZSBpZiB2bWEgaGFzIFBST1RfTk9ORSBwZXJtaXNzaW9uLgotCSAqIG11bmxvY2s6IGFsd2F5cyBkbyBtdW5sb2NrIGFsdGhvdWdoIHRoZSB2bWEgaGFzIFBST1RfTk9ORQotCSAqICAgICAgICAgIHBlcm1pc3Npb24sIG9yIFNJR0tJTEwgaXMgcGVuZGluZy4KLQkgKi8KLQlpZiAoIW1sb2NrKQotCQlndXBfZmxhZ3MgfD0gR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMgfAotCQkJICAgICBHVVBfRkxBR1NfSUdOT1JFX1NJR0tJTEw7Ci0KKwlndXBfZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9HRVQ7CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKLQkJZ3VwX2ZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKwkJZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiAKIAl3aGlsZSAobnJfcGFnZXMgPiAwKSB7CiAJCWludCBpOwpAQCAtMjAxLDUxICsxODgsNDUgQEAKIAkJICogVGhpcyBjYW4gaGFwcGVuIGZvciwgZS5nLiwgVk1fTk9OTElORUFSIHJlZ2lvbnMgYmVmb3JlCiAJCSAqIGEgcGFnZSBoYXMgYmVlbiBhbGxvY2F0ZWQgYW5kIG1hcHBlZCBhdCBhIGdpdmVuIG9mZnNldCwKIAkJICogb3IgZm9yIGFkZHJlc3NlcyB0aGF0IG1hcCBiZXlvbmQgZW5kIG9mIGEgZmlsZS4KLQkJICogV2UnbGwgbWxvY2sgdGhlIHRoZSBwYWdlcyBpZi93aGVuIHRoZXkgZ2V0IGZhdWx0ZWQgaW4uCisJCSAqIFdlJ2xsIG1sb2NrIHRoZSBwYWdlcyBpZi93aGVuIHRoZXkgZ2V0IGZhdWx0ZWQgaW4uCiAJCSAqLwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwotCQlpZiAocmV0ID09IDApIHsKLQkJCS8qCi0JCQkgKiBXZSBrbm93IHRoZSB2bWEgaXMgdGhlcmUsIHNvIHRoZSBvbmx5IHRpbWUKLQkJCSAqIHdlIGNhbm5vdCBnZXQgYSBzaW5nbGUgcGFnZSBzaG91bGQgYmUgYW4KLQkJCSAqIGVycm9yIChyZXQgPCAwKSBjYXNlLgotCQkJICovCi0JCQlXQVJOX09OKDEpOwotCQkJYnJlYWs7Ci0JCX0KIAogCQlscnVfYWRkX2RyYWluKCk7CS8qIHB1c2ggY2FjaGVkIHBhZ2VzIHRvIExSVSAqLwogCiAJCWZvciAoaSA9IDA7IGkgPCByZXQ7IGkrKykgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKIAotCQkJbG9ja19wYWdlKHBhZ2UpOwotCQkJLyoKLQkJCSAqIEJlY2F1c2Ugd2UgbG9jayBwYWdlIGhlcmUgYW5kIG1pZ3JhdGlvbiBpcyBibG9ja2VkCi0JCQkgKiBieSB0aGUgZWxldmF0ZWQgcmVmZXJlbmNlLCB3ZSBuZWVkIG9ubHkgY2hlY2sgZm9yCi0JCQkgKiBwYWdlIHRydW5jYXRpb24gKGZpbGUtY2FjaGUgb25seSkuCi0JCQkgKi8KIAkJCWlmIChwYWdlLT5tYXBwaW5nKSB7Ci0JCQkJaWYgKG1sb2NrKQorCQkJCS8qCisJCQkJICogVGhhdCBwcmVsaW1pbmFyeSBjaGVjayBpcyBtYWlubHkgdG8gYXZvaWQKKwkJCQkgKiB0aGUgcG9pbnRsZXNzIG92ZXJoZWFkIG9mIGxvY2tfcGFnZSBvbiB0aGUKKwkJCQkgKiBaRVJPX1BBR0U6IHdoaWNoIG1pZ2h0IGJvdW5jZSB2ZXJ5IGJhZGx5IGlmCisJCQkJICogdGhlcmUgaXMgY29udGVudGlvbi4gIEhvd2V2ZXIsIHdlJ3JlIHN0aWxsCisJCQkJICogZGlydHlpbmcgaXRzIGNhY2hlbGluZSB3aXRoIGdldC9wdXRfcGFnZToKKwkJCQkgKiB3ZSdsbCBhZGQgYW5vdGhlciBfX2dldF91c2VyX3BhZ2VzIGZsYWcgdG8KKwkJCQkgKiBhdm9pZCBpdCBpZiB0aGF0IGNhc2UgdHVybnMgb3V0IHRvIG1hdHRlci4KKwkJCQkgKi8KKwkJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQkJLyoKKwkJCQkgKiBCZWNhdXNlIHdlIGxvY2sgcGFnZSBoZXJlIGFuZCBtaWdyYXRpb24gaXMKKwkJCQkgKiBibG9ja2VkIGJ5IHRoZSBlbGV2YXRlZCByZWZlcmVuY2UsIHdlIG5lZWQKKwkJCQkgKiBvbmx5IGNoZWNrIGZvciBmaWxlLWNhY2hlIHBhZ2UgdHJ1bmNhdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAocGFnZS0+bWFwcGluZykKIAkJCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7Ci0JCQkJZWxzZQotCQkJCQltdW5sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJfQotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlwdXRfcGFnZShwYWdlKTsJCS8qIHJlZiBmcm9tIGdldF91c2VyX3BhZ2VzKCkgKi8KLQotCQkJLyoKLQkJCSAqIGhlcmUgd2UgYXNzdW1lIHRoYXQgZ2V0X3VzZXJfcGFnZXMoKSBoYXMgZ2l2ZW4gdXMKLQkJCSAqIGEgbGlzdCBvZiB2aXJ0dWFsbHkgY29udGlndW91cyBwYWdlcy4KLQkJCSAqLwotCQkJYWRkciArPSBQQUdFX1NJWkU7CS8qIGZvciBuZXh0IGdldF91c2VyX3BhZ2VzKCkgKi8KLQkJCW5yX3BhZ2VzLS07CisJCQlwdXRfcGFnZShwYWdlKTsJLyogcmVmIGZyb20gZ2V0X3VzZXJfcGFnZXMoKSAqLwogCQl9CisKKwkJYWRkciArPSByZXQgKiBQQUdFX1NJWkU7CisJCW5yX3BhZ2VzIC09IHJldDsKIAkJcmV0ID0gMDsKIAl9CiAKLQlyZXR1cm4gcmV0OwkvKiBjb3VudCBlbnRpcmUgdm1hIGFzIGxvY2tlZF92bSAqLworCXJldHVybiByZXQ7CS8qIDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSAqLwogfQogCiAvKgpAQCAtMjg5LDcgKzI3MCw3IEBACiAJCQlpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fAogCQkJdm1hID09IGdldF9nYXRlX3ZtYShjdXJyZW50KSkpIHsKIAotCQlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOworCQlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwogCiAJCS8qIEhpZGUgZXJyb3JzIGZyb20gbW1hcCgpIGFuZCBvdGhlciBjYWxsZXJzICovCiAJCXJldHVybiAwOwpAQCAtMzEwLDcgKzI5MSw2IEBACiAJcmV0dXJuIG5yX3BhZ2VzOwkJLyogZXJyb3Igb3IgcGFnZXMgTk9UIG1sb2NrZWQgKi8KIH0KIAotCiAvKgogICogbXVubG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtIG11bmxvY2sgYWxsIHBhZ2VzIGluIHRoZSB2bWEgcmFuZ2UuJwogICogQHZtYSAtIHZtYSBjb250YWluaW5nIHJhbmdlIHRvIGJlIG11bmxvY2soKWVkLgpAQCAtMzMwLDEwICszMTAsMzggQEAKICAqIGZyZWUgdGhlbS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gZnJlZWluZyBtbG9ja2VkIHBhZ2VzLgogICovCiB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWxydV9hZGRfZHJhaW4oKTsKIAl2bWEtPnZtX2ZsYWdzICY9IH5WTV9MT0NLRUQ7Ci0JX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAwKTsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJLyoKKwkJICogQWx0aG91Z2ggRk9MTF9EVU1QIGlzIGludGVuZGVkIGZvciBnZXRfZHVtcF9wYWdlKCksCisJCSAqIGl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGl0cyBzcGVjaWFsIHRyZWF0bWVudCBvZiB0aGUKKwkJICogWkVST19QQUdFIChyZXR1cm5pbmcgYW4gZXJyb3IgaW5zdGVhZCBvZiBkb2luZyBnZXRfcGFnZSkKKwkJICogc3VpdHMgbXVubG9jayB2ZXJ5IHdlbGwgKGFuZCBpZiBzb21laG93IGFuIGFibm9ybWFsIHBhZ2UKKwkJICogaGFzIHNuZWFrZWQgaW50byB0aGUgcmFuZ2UsIHdlIHdvbid0IG9vcHMgaGVyZTogZ3JlYXQpLgorCQkgKi8KKwkJcGFnZSA9IGZvbGxvd19wYWdlKHZtYSwgYWRkciwgRk9MTF9HRVQgfCBGT0xMX0RVTVApOworCQlpZiAocGFnZSAmJiAhSVNfRVJSKHBhZ2UpKSB7CisJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQkvKgorCQkJICogTGlrZSBpbiBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpLAorCQkJICogYmVjYXVzZSB3ZSBsb2NrIHBhZ2UgaGVyZSBhbmQgbWlncmF0aW9uIGlzCisJCQkgKiBibG9ja2VkIGJ5IHRoZSBlbGV2YXRlZCByZWZlcmVuY2UsIHdlIG5lZWQKKwkJCSAqIG9ubHkgY2hlY2sgZm9yIGZpbGUtY2FjaGUgcGFnZSB0cnVuY2F0aW9uLgorCQkJICovCisJCQlpZiAocGFnZS0+bWFwcGluZykKKwkJCQltdW5sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlwdXRfcGFnZShwYWdlKTsKKwkJfQorCQljb25kX3Jlc2NoZWQoKTsKKwl9CiB9CiAKIC8qCkBAIC00MDAsMTggKzQwOCwxNCBAQAogCSAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZQogCSAqIHNldCBWTV9MT0NLRUQsIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay4KIAkgKi8KLQl2bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7CiAKIAlpZiAobG9jaykgewotCQlyZXQgPSBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOwotCi0JCWlmIChyZXQgPiAwKSB7Ci0JCQltbS0+bG9ja2VkX3ZtIC09IHJldDsKLQkJCXJldCA9IDA7Ci0JCX0gZWxzZQotCQkJcmV0ID0gX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4ocmV0KTsgLyogdHJhbnNsYXRlIGlmIG5lZWRlZCAqLworCQl2bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7CisJCXJldCA9IF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0ID0gX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4ocmV0KTsKIAl9IGVsc2UgewotCQlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDApOworCQltdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDI2ODkyZTMuLjIxZDQwMjkgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbW11X25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtNTcwLDkgKzU3MCw5IEBACiAKIAkvKgogCSAqIFdoZW4gY2hhbmdpbmcgb25seSB2bWEtPnZtX2VuZCwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQKLQkgKiBhbm9uX3ZtYSBsb2NrOiBidXQgaXMgdGhhdCBjYXNlIHdvcnRoIG9wdGltaXppbmcgb3V0PworCSAqIGFub25fdm1hIGxvY2suCiAJICovCi0JaWYgKHZtYS0+YW5vbl92bWEpCisJaWYgKHZtYS0+YW5vbl92bWEgJiYgKGluc2VydCB8fCBpbXBvcnRlciB8fCBzdGFydCAhPSB2bWEtPnZtX3N0YXJ0KSkKIAkJYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwogCWlmIChhbm9uX3ZtYSkgewogCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKQEAgLTY1Niw5ICs2NTYsNiBAQAogCXZhbGlkYXRlX21tKG1tKTsKIH0KIAotLyogRmxhZ3MgdGhhdCBjYW4gYmUgaW5oZXJpdGVkIGZyb20gYW4gZXhpc3RpbmcgbWFwcGluZyB3aGVuIG1lcmdpbmcgKi8KLSNkZWZpbmUgVk1fTUVSR0VBQkxFX0ZMQUdTIChWTV9DQU5fTk9OTElORUFSKQotCiAvKgogICogSWYgdGhlIHZtYSBoYXMgYSAtPmNsb3NlIG9wZXJhdGlvbiB0aGVuIHRoZSBkcml2ZXIgcHJvYmFibHkgbmVlZHMgdG8gcmVsZWFzZQogICogcGVyLXZtYSByZXNvdXJjZXMsIHNvIHdlIGRvbid0IGF0dGVtcHQgdG8gbWVyZ2UgdGhvc2UuCkBAIC02NjYsNyArNjYzLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lcmdlYWJsZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyB2bV9mbGFncykKIHsKLQlpZiAoKHZtYS0+dm1fZmxhZ3MgXiB2bV9mbGFncykgJiB+Vk1fTUVSR0VBQkxFX0ZMQUdTKQorCS8qIFZNX0NBTl9OT05MSU5FQVIgbWF5IGdldCBzZXQgbGF0ZXIgYnkgZl9vcC0+bW1hcCgpICovCisJaWYgKCh2bWEtPnZtX2ZsYWdzIF4gdm1fZmxhZ3MpICYgflZNX0NBTl9OT05MSU5FQVIpCiAJCXJldHVybiAwOwogCWlmICh2bWEtPnZtX2ZpbGUgIT0gZmlsZSkKIAkJcmV0dXJuIDA7CkBAIC05NTEsNiArOTQ5LDI0IEBACiAJaWYgKG1tLT5tYXBfY291bnQgPiBzeXNjdGxfbWF4X21hcF9jb3VudCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoZmxhZ3MgJiBNQVBfSFVHRVRMQikgeworCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBOVUxMOworCQlpZiAoZmlsZSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qCisJCSAqIFZNX05PUkVTRVJWRSBpcyB1c2VkIGJlY2F1c2UgdGhlIHJlc2VydmF0aW9ucyB3aWxsIGJlCisJCSAqIHRha2VuIHdoZW4gdm1fb3BzLT5tbWFwKCkgaXMgY2FsbGVkCisJCSAqIEEgZHVtbXkgdXNlciB2YWx1ZSBpcyB1c2VkIGJlY2F1c2Ugd2UgYXJlIG5vdCBsb2NraW5nCisJCSAqIG1lbW9yeSBzbyBubyBhY2NvdW50aW5nIGlzIG5lY2Vzc2FyeQorCQkgKi8KKwkJbGVuID0gQUxJR04obGVuLCBodWdlX3BhZ2Vfc2l6ZSgmZGVmYXVsdF9oc3RhdGUpKTsKKwkJZmlsZSA9IGh1Z2V0bGJfZmlsZV9zZXR1cChIVUdFVExCX0FOT05fRklMRSwgbGVuLCBWTV9OT1JFU0VSVkUsCisJCQkJCQkmdXNlciwgSFVHRVRMQl9BTk9OSFVHRV9JTk9ERSk7CisJCWlmIChJU19FUlIoZmlsZSkpCisJCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKKwl9CisKIAkvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZQogCSAqIHRoYXQgaXQgcmVwcmVzZW50cyBhIHZhbGlkIHNlY3Rpb24gb2YgdGhlIGFkZHJlc3Mgc3BhY2UuCiAJICovCkBAIC05NjUsMTEgKzk4MSw5IEBACiAJdm1fZmxhZ3MgPSBjYWxjX3ZtX3Byb3RfYml0cyhwcm90KSB8IGNhbGNfdm1fZmxhZ19iaXRzKGZsYWdzKSB8CiAJCQltbS0+ZGVmX2ZsYWdzIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQzsKIAotCWlmIChmbGFncyAmIE1BUF9MT0NLRUQpIHsKKwlpZiAoZmxhZ3MgJiBNQVBfTE9DS0VEKQogCQlpZiAoIWNhbl9kb19tbG9jaygpKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJdm1fZmxhZ3MgfD0gVk1fTE9DS0VEOwotCX0KIAogCS8qIG1sb2NrIE1DTF9GVVRVUkU/ICovCiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CkBAIC0xMTk1LDIxICsxMjA5LDIxIEBACiAJCQlnb3RvIHVubWFwX2FuZF9mcmVlX3ZtYTsKIAkJaWYgKHZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKIAkJCWFkZGVkX2V4ZV9maWxlX3ZtYShtbSk7CisKKwkJLyogQ2FuIGFkZHIgaGF2ZSBjaGFuZ2VkPz8KKwkJICoKKwkJICogQW5zd2VyOiBZZXMsIHNldmVyYWwgZGV2aWNlIGRyaXZlcnMgY2FuIGRvIGl0IGluIHRoZWlyCisJCSAqICAgICAgICAgZl9vcC0+bW1hcCBtZXRob2QuIC1EYXZlTQorCQkgKi8KKwkJYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJCXBnb2ZmID0gdm1hLT52bV9wZ29mZjsKKwkJdm1fZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwogCX0gZWxzZSBpZiAodm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHsKIAkJZXJyb3IgPSBzaG1lbV96ZXJvX3NldHVwKHZtYSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZnJlZV92bWE7CiAJfQogCi0JLyogQ2FuIGFkZHIgaGF2ZSBjaGFuZ2VkPz8KLQkgKgotCSAqIEFuc3dlcjogWWVzLCBzZXZlcmFsIGRldmljZSBkcml2ZXJzIGNhbiBkbyBpdCBpbiB0aGVpcgotCSAqICAgICAgICAgZl9vcC0+bW1hcCBtZXRob2QuIC1EYXZlTQotCSAqLwotCWFkZHIgPSB2bWEtPnZtX3N0YXJ0OwotCXBnb2ZmID0gdm1hLT52bV9wZ29mZjsKLQl2bV9mbGFncyA9IHZtYS0+dm1fZmxhZ3M7Ci0KIAlpZiAodm1hX3dhbnRzX3dyaXRlbm90aWZ5KHZtYSkpCiAJCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncyAmIH5WTV9TSEFSRUQpOwogCkBAIC0xMjIwLDcgKzEyMzQsNyBAQAogCWlmIChjb3JyZWN0X3djb3VudCkKIAkJYXRvbWljX2luYygmaW5vZGUtPmlfd3JpdGVjb3VudCk7CiBvdXQ6Ci0JcGVyZl9jb3VudGVyX21tYXAodm1hKTsKKwlwZXJmX2V2ZW50X21tYXAodm1hKTsKIAogCW1tLT50b3RhbF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAl2bV9zdGF0X2FjY291bnQobW0sIHZtX2ZsYWdzLCBmaWxlLCBsZW4gPj4gUEFHRV9TSElGVCk7CkBAIC0yMTExLDYgKzIxMjUsNyBAQAogCS8qIFVzZSAtMSBoZXJlIHRvIGVuc3VyZSBhbGwgVk1BcyBpbiB0aGUgbW0gYXJlIHVubWFwcGVkICovCiAJZW5kID0gdW5tYXBfdm1hcygmdGxiLCB2bWEsIDAsIC0xLCAmbnJfYWNjb3VudGVkLCBOVUxMKTsKIAl2bV91bmFjY3RfbWVtb3J5KG5yX2FjY291bnRlZCk7CisKIAlmcmVlX3BndGFibGVzKHRsYiwgdm1hLCBGSVJTVF9VU0VSX0FERFJFU1MsIDApOwogCXRsYl9maW5pc2hfbW11KHRsYiwgMCwgZW5kKTsKIApAQCAtMjMwOCw3ICsyMzIzLDcgQEAKIAogCW1tLT50b3RhbF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAotCXBlcmZfY291bnRlcl9tbWFwKHZtYSk7CisJcGVyZl9ldmVudF9tbWFwKHZtYSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL21tdV9jb250ZXh0LmMgYi9tbS9tbXVfY29udGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDkwODEKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9tbXVfY29udGV4dC5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKgorICogU2VlIC4uL0NPUFlJTkcgZm9yIGxpY2Vuc2luZyB0ZXJtcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworLyoKKyAqIHVzZV9tbQorICoJTWFrZXMgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZCB0YWtlIG9uIHRoZSBzcGVjaWZpZWQKKyAqCW1tIGNvbnRleHQuCisgKglDYWxsZWQgYnkgdGhlIHJldHJ5IHRocmVhZCBleGVjdXRlIHJldHJpZXMgd2l0aGluIHRoZQorICoJaW9jYiBpc3N1ZXIncyBtbSBjb250ZXh0LCBzbyB0aGF0IGNvcHlfZnJvbS90b191c2VyCisgKglvcGVyYXRpb25zIHdvcmsgc2VhbWxlc3NseSBmb3IgYWlvLgorICoJKE5vdGU6IHRoaXMgcm91dGluZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seQorICoJZnJvbSBhIGtlcm5lbCB0aHJlYWQgY29udGV4dCkKKyAqLwordm9pZCB1c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXRhc2tfbG9jayh0c2spOworCWFjdGl2ZV9tbSA9IHRzay0+YWN0aXZlX21tOworCWlmIChhY3RpdmVfbW0gIT0gbW0pIHsKKwkJYXRvbWljX2luYygmbW0tPm1tX2NvdW50KTsKKwkJdHNrLT5hY3RpdmVfbW0gPSBtbTsKKwl9CisJdHNrLT5tbSA9IG1tOworCXN3aXRjaF9tbShhY3RpdmVfbW0sIG1tLCB0c2spOworCXRhc2tfdW5sb2NrKHRzayk7CisKKwlpZiAoYWN0aXZlX21tICE9IG1tKQorCQltbWRyb3AoYWN0aXZlX21tKTsKK30KKworLyoKKyAqIHVudXNlX21tCisgKglSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzZV9tbSwgaS5lLiByZWxlYXNlcyB0aGUKKyAqCXNwZWNpZmllZCBtbSBjb250ZXh0IHdoaWNoIHdhcyBlYXJsaWVyIHRha2VuIG9uCisgKglieSB0aGUgY2FsbGluZyBrZXJuZWwgdGhyZWFkCisgKgkoTm90ZTogdGhpcyByb3V0aW5lIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbmx5CisgKglmcm9tIGEga2VybmVsIHRocmVhZCBjb250ZXh0KQorICovCit2b2lkIHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXRhc2tfbG9jayh0c2spOworCXRzay0+bW0gPSBOVUxMOworCS8qIGFjdGl2ZV9tbSBpcyBzdGlsbCAnbW0nICovCisJZW50ZXJfbGF6eV90bGIobW0sIHRzayk7CisJdGFza191bmxvY2sodHNrKTsKK30KZGlmZiAtLWdpdCBhL21tL21tdV9ub3RpZmllci5jIGIvbW0vbW11X25vdGlmaWVyLmMKaW5kZXggNWY0ZWYwMi4uN2UzM2YyYyAxMDA2NDQKLS0tIGEvbW0vbW11X25vdGlmaWVyLmMKKysrIGIvbW0vbW11X25vdGlmaWVyLmMKQEAgLTk5LDYgKzk5LDI2IEBACiAJcmV0dXJuIHlvdW5nOwogfQogCit2b2lkIF9fbW11X25vdGlmaWVyX2NoYW5nZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgICBwdGVfdCBwdGUpCit7CisJc3RydWN0IG1tdV9ub3RpZmllciAqbW47CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1uLCBuLCAmbW0tPm1tdV9ub3RpZmllcl9tbS0+bGlzdCwgaGxpc3QpIHsKKwkJaWYgKG1uLT5vcHMtPmNoYW5nZV9wdGUpCisJCQltbi0+b3BzLT5jaGFuZ2VfcHRlKG1uLCBtbSwgYWRkcmVzcywgcHRlKTsKKwkJLyoKKwkJICogU29tZSBkcml2ZXJzIGRvbid0IGhhdmUgY2hhbmdlX3B0ZSwKKwkJICogc28gd2UgbXVzdCBjYWxsIGludmFsaWRhdGVfcGFnZSBpbiB0aGF0IGNhc2UuCisJCSAqLworCQllbHNlIGlmIChtbi0+b3BzLT5pbnZhbGlkYXRlX3BhZ2UpCisJCQltbi0+b3BzLT5pbnZhbGlkYXRlX3BhZ2UobW4sIG1tLCBhZGRyZXNzKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKIHZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jCmluZGV4IGQ4MDMxMWIuLjhiYzk2OWQgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKKysrIGIvbW0vbXByb3RlY3QuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtMzAwLDcgKzMwMCw3IEBACiAJCWVycm9yID0gbXByb3RlY3RfZml4dXAodm1hLCAmcHJldiwgbnN0YXJ0LCB0bXAsIG5ld2ZsYWdzKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7Ci0JCXBlcmZfY291bnRlcl9tbWFwKHZtYSk7CisJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOwogCQluc3RhcnQgPSB0bXA7CiAKIAkJaWYgKG5zdGFydCA8IHByZXYtPnZtX2VuZCkKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggYTM5YjdiOS4uMjBhMDdkYiAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgpAQCAtMTc0LDYgKzE3NSw3IEBACiAJdW5zaWduZWQgbG9uZyBleGNlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl92bTsKIAlpbnQgc3BsaXQgPSAwOworCWludCBlcnI7CiAKIAkvKgogCSAqIFdlJ2QgcHJlZmVyIHRvIGF2b2lkIGZhaWx1cmUgbGF0ZXIgb24gaW4gZG9fbXVubWFwOgpAQCAtMTgyLDYgKzE4NCwxOCBAQAogCWlmIChtbS0+bWFwX2NvdW50ID49IHN5c2N0bF9tYXhfbWFwX2NvdW50IC0gMykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKgorCSAqIEFkdmlzZSBLU00gdG8gYnJlYWsgYW55IEtTTSBwYWdlcyBpbiB0aGUgYXJlYSB0byBiZSBtb3ZlZDoKKwkgKiBpdCB3b3VsZCBiZSBjb25mdXNpbmcgaWYgdGhleSB3ZXJlIHRvIHR1cm4gdXAgYXQgdGhlIG5ldworCSAqIGxvY2F0aW9uLCB3aGVyZSB0aGV5IGhhcHBlbiB0byBjb2luY2lkZSB3aXRoIGRpZmZlcmVudCBLU00KKwkgKiBwYWdlcyByZWNlbnRseSB1bm1hcHBlZC4gIEJ1dCBsZWF2ZSB2bWEtPnZtX2ZsYWdzIGFzIGl0IHdhcywKKwkgKiBzbyBLU00gY2FuIGNvbWUgYXJvdW5kIHRvIG1lcmdlIG9uIHZtYSBhbmQgbmV3X3ZtYSBhZnRlcndhcmRzLgorCSAqLworCWVyciA9IGtzbV9tYWR2aXNlKHZtYSwgb2xkX2FkZHIsIG9sZF9hZGRyICsgb2xkX2xlbiwKKwkJCQkJCU1BRFZfVU5NRVJHRUFCTEUsICZ2bV9mbGFncyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCW5ld19wZ29mZiA9IHZtYS0+dm1fcGdvZmYgKyAoKG9sZF9hZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCk7CiAJbmV3X3ZtYSA9IGNvcHlfdm1hKCZ2bWEsIG5ld19hZGRyLCBuZXdfbGVuLCBuZXdfcGdvZmYpOwogCWlmICghbmV3X3ZtYSkKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDY2ZTgxZTcuLjhkNDg0MjQgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKQpAQCAtNTYsMTIgKzU3LDExIEBACiAJbm9fcHJpbnRrKEtFUk5fREVCVUcgRk1UIlxuIiwgIyNfX1ZBX0FSR1NfXykKICNlbmRpZgogCi0jaW5jbHVkZSAiaW50ZXJuYWwuaCIKLQogdm9pZCAqaGlnaF9tZW1vcnk7CiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOwogdW5zaWduZWQgbG9uZyBudW1fcGh5c3BhZ2VzOwordW5zaWduZWQgbG9uZyBoaWdoZXN0X21lbW1hcF9wZm47CiBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgdm1fY29tbWl0dGVkX2FzOwogaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSA9IE9WRVJDT01NSVRfR1VFU1M7IC8qIGhldXJpc3RpYyBvdmVyY29tbWl0ICovCiBpbnQgc3lzY3RsX292ZXJjb21taXRfcmF0aW8gPSA1MDsgLyogZGVmYXVsdCBpcyA1MCUgKi8KQEAgLTE3MCwyMSArMTcwLDIwIEBACiB9CiAKIGludCBfX2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIGludCBmbGFncywKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIHVuc2lnbmVkIGludCBmb2xsX2ZsYWdzLAogCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAlpbnQgaTsKLQlpbnQgd3JpdGUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19XUklURSk7Ci0JaW50IGZvcmNlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfRk9SQ0UpOwotCWludCBpZ25vcmUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TKTsKIAogCS8qIGNhbGN1bGF0ZSByZXF1aXJlZCByZWFkIG9yIHdyaXRlIHBlcm1pc3Npb25zLgotCSAqIC0gaWYgJ2ZvcmNlJyBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCisJICogSWYgRk9MTF9GT1JDRSBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCiAJICovCi0Jdm1fZmxhZ3MgID0gd3JpdGUgPyAoVk1fV1JJVEUgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX01BWVJFQUQpOwotCXZtX2ZsYWdzICY9IGZvcmNlID8gKFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX1dSSVRFKTsKKwl2bV9mbGFncyAgPSAoZm9sbF9mbGFncyAmIEZPTExfV1JJVEUpID8KKwkJCShWTV9XUklURSB8IFZNX01BWVdSSVRFKSA6IChWTV9SRUFEIHwgVk1fTUFZUkVBRCk7CisJdm1fZmxhZ3MgJj0gKGZvbGxfZmxhZ3MgJiBGT0xMX0ZPUkNFKSA/CisJCQkoVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFKSA6IChWTV9SRUFEIHwgVk1fV1JJVEUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKQEAgLTE5Miw4ICsxOTEsOCBAQAogCQkJZ290byBmaW5pc2hfb3JfZmF1bHQ7CiAKIAkJLyogcHJvdGVjdCB3aGF0IHdlIGNhbiwgaW5jbHVkaW5nIGNoYXJkZXZzICovCi0JCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSB8fAotCQkgICAgKCFpZ25vcmUgJiYgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKSkKKwkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSkgfHwKKwkJICAgICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkKIAkJCWdvdG8gZmluaXNoX29yX2ZhdWx0OwogCiAJCWlmIChwYWdlcykgewpAQCAtMjEyLDcgKzIxMSw2IEBACiAJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiB9CiAKLQogLyoKICAqIGdldCBhIGxpc3Qgb2YgcGFnZXMgaW4gYW4gYWRkcmVzcyByYW5nZSBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmllZCBwcm9jZXNzCiAgKiBhbmQgaW5kaWNhdGUgdGhlIFZNQSB0aGF0IGNvdmVycyBlYWNoIHBhZ2UKQEAgLTIyNyw5ICsyMjUsOSBAQAogCWludCBmbGFncyA9IDA7CiAKIAlpZiAod3JpdGUpCi0JCWZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKwkJZmxhZ3MgfD0gRk9MTF9XUklURTsKIAlpZiAoZm9yY2UpCi0JCWZsYWdzIHw9IEdVUF9GTEFHU19GT1JDRTsKKwkJZmxhZ3MgfD0gRk9MTF9GT1JDRTsKIAogCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIHN0YXJ0LCBucl9wYWdlcywgZmxhZ3MsIHBhZ2VzLCB2bWFzKTsKIH0KQEAgLTYyNyw2ICs2MjUsMjIgQEAKIH0KIAogLyoKKyAqIHVwZGF0ZSBwcm90ZWN0aW9uIG9uIGEgdm1hCisgKi8KK3N0YXRpYyB2b2lkIHByb3RlY3Rfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworI2lmZGVmIENPTkZJR19NUFUKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQgJiBQQUdFX01BU0s7CisJd2hpbGUgKHN0YXJ0IDwgdm1hLT52bV9lbmQpIHsKKwkJcHJvdGVjdF9wYWdlKG1tLCBzdGFydCwgZmxhZ3MpOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorCXVwZGF0ZV9wcm90ZWN0aW9ucyhtbSk7CisjZW5kaWYKK30KKworLyoKICAqIGFkZCBhIFZNQSBpbnRvIGEgcHJvY2VzcydzIG1tX3N0cnVjdCBpbiB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGxpc3QKICAqIGFuZCB0cmVlIGFuZCBhZGQgdG8gdGhlIGFkZHJlc3Mgc3BhY2UncyBwYWdlIHRyZWUgYWxzbyBpZiBub3QgYW4gYW5vbnltb3VzCiAgKiBwYWdlCkBAIC02NDUsNiArNjU5LDggQEAKIAltbS0+bWFwX2NvdW50Kys7CiAJdm1hLT52bV9tbSA9IG1tOwogCisJcHJvdGVjdF92bWEodm1hLCB2bWEtPnZtX2ZsYWdzKTsKKwogCS8qIGFkZCB0aGUgVk1BIHRvIHRoZSBtYXBwaW5nICovCiAJaWYgKHZtYS0+dm1fZmlsZSkgewogCQltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CkBAIC03MDcsNiArNzIzLDggQEAKIAogCWtlbnRlcigiJXAiLCB2bWEpOwogCisJcHJvdGVjdF92bWEodm1hLCAwKTsKKwogCW1tLT5tYXBfY291bnQtLTsKIAlpZiAobW0tPm1tYXBfY2FjaGUgPT0gdm1hKQogCQltbS0+bW1hcF9jYWNoZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCBhN2IyNDYwLi5lYTIxNDdkIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTM0LDYgKzM0LDIzIEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpvbmVfc2Nhbl9sb2NrKTsKIC8qICNkZWZpbmUgREVCVUcgKi8KIAorLyoKKyAqIElzIGFsbCB0aHJlYWRzIG9mIHRoZSB0YXJnZXQgcHJvY2VzcyBub2RlcyBvdmVybGFwIG91cnM/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2ludGVyc2VjdHNfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCXQgPSB0c2s7CisJZG8geworCQlpZiAoY3B1c2V0X21lbXNfYWxsb3dlZF9pbnRlcnNlY3RzKGN1cnJlbnQsIHQpKQorCQkJcmV0dXJuIDE7CisJCXQgPSBuZXh0X3RocmVhZCh0KTsKKwl9IHdoaWxlICh0ICE9IHRzayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBiYWRuZXNzIC0gY2FsY3VsYXRlIGEgbnVtZXJpYyB2YWx1ZSBmb3IgaG93IGJhZCB0aGlzIHRhc2sgaGFzIGJlZW4KICAqIEBwOiB0YXNrIHN0cnVjdCBvZiB3aGljaCB0YXNrIHdlIHNob3VsZCBjYWxjdWxhdGUKQEAgLTU4LDYgKzc1LDEzIEBACiAJdW5zaWduZWQgbG9uZyBwb2ludHMsIGNwdV90aW1lLCBydW5fdGltZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOworCWludCBvb21fYWRqID0gcC0+c2lnbmFsLT5vb21fYWRqOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGFza190aW1lOworCXVuc2lnbmVkIGxvbmcgdXRpbWU7CisJdW5zaWduZWQgbG9uZyBzdGltZTsKKworCWlmIChvb21fYWRqID09IE9PTV9ESVNBQkxFKQorCQlyZXR1cm4gMDsKIAogCXRhc2tfbG9jayhwKTsKIAltbSA9IHAtPm1tOwpAQCAtNzksNyArMTAzLDcgQEAKIAkvKgogCSAqIHN3YXBvZmYgY2FuIGVhc2lseSB1c2UgdXAgYWxsIG1lbW9yeSwgc28ga2lsbCB0aG9zZSBmaXJzdC4KIAkgKi8KLQlpZiAocC0+ZmxhZ3MgJiBQRl9TV0FQT0ZGKQorCWlmIChwLT5mbGFncyAmIFBGX09PTV9PUklHSU4pCiAJCXJldHVybiBVTE9OR19NQVg7CiAKIAkvKgpAQCAtMTAyLDggKzEyNiwxMSBAQAogICAgICAgICAgKiBvZiBzZWNvbmRzLiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBvdGhlciB0aGFuCiAgICAgICAgICAqIHRoYXQgaXQgdHVybmVkIG91dCB0byB3b3JrIHZlcnkgd2VsbCBpbiBwcmFjdGljZS4KIAkgKi8KLQljcHVfdGltZSA9IChjcHV0aW1lX3RvX2ppZmZpZXMocC0+dXRpbWUpICsgY3B1dGltZV90b19qaWZmaWVzKHAtPnN0aW1lKSkKLQkJPj4gKFNISUZUX0haICsgMyk7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJnRhc2tfdGltZSk7CisJdXRpbWUgPSBjcHV0aW1lX3RvX2ppZmZpZXModGFza190aW1lLnV0aW1lKTsKKwlzdGltZSA9IGNwdXRpbWVfdG9famlmZmllcyh0YXNrX3RpbWUuc3RpbWUpOworCWNwdV90aW1lID0gKHV0aW1lICsgc3RpbWUpID4+IChTSElGVF9IWiArIDMpOworCiAKIAlpZiAodXB0aW1lID49IHAtPnN0YXJ0X3RpbWUudHZfc2VjKQogCQlydW5fdGltZSA9ICh1cHRpbWUgLSBwLT5zdGFydF90aW1lLnR2X3NlYykgPj4gMTA7CkBAIC0xNDQsMTkgKzE3MSwxOSBAQAogCSAqIGJlY2F1c2UgcCBtYXkgaGF2ZSBhbGxvY2F0ZWQgb3Igb3RoZXJ3aXNlIG1hcHBlZCBtZW1vcnkgb24KIAkgKiB0aGlzIG5vZGUgYmVmb3JlLiBIb3dldmVyIGl0IHdpbGwgYmUgbGVzcyBsaWtlbHkuCiAJICovCi0JaWYgKCFjcHVzZXRfbWVtc19hbGxvd2VkX2ludGVyc2VjdHMoY3VycmVudCwgcCkpCisJaWYgKCFoYXNfaW50ZXJzZWN0c19tZW1zX2FsbG93ZWQocCkpCiAJCXBvaW50cyAvPSA4OwogCiAJLyoKLQkgKiBBZGp1c3QgdGhlIHNjb3JlIGJ5IG9vbWtpbGxhZGouCisJICogQWRqdXN0IHRoZSBzY29yZSBieSBvb21fYWRqLgogCSAqLwotCWlmIChwLT5vb21raWxsYWRqKSB7Ci0JCWlmIChwLT5vb21raWxsYWRqID4gMCkgeworCWlmIChvb21fYWRqKSB7CisJCWlmIChvb21fYWRqID4gMCkgewogCQkJaWYgKCFwb2ludHMpCiAJCQkJcG9pbnRzID0gMTsKLQkJCXBvaW50cyA8PD0gcC0+b29ta2lsbGFkajsKKwkJCXBvaW50cyA8PD0gb29tX2FkajsKIAkJfSBlbHNlCi0JCQlwb2ludHMgPj49IC0ocC0+b29ta2lsbGFkaik7CisJCQlwb2ludHMgPj49IC0ob29tX2Fkaik7CiAJfQogCiAjaWZkZWYgREVCVUcKQEAgLTIwMCwxMyArMjI3LDEzIEBACiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzZWxlY3RfYmFkX3Byb2Nlc3ModW5zaWduZWQgbG9uZyAqcHBvaW50cywKIAkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjaG9zZW4gPSBOVUxMOwogCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CiAJKnBwb2ludHMgPSAwOwogCiAJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7Ci0JZG9fZWFjaF90aHJlYWQoZywgcCkgeworCWZvcl9lYWNoX3Byb2Nlc3MocCkgewogCQl1bnNpZ25lZCBsb25nIHBvaW50czsKIAogCQkvKgpAQCAtMjUxLDcgKzI3OCw3IEBACiAJCQkqcHBvaW50cyA9IFVMT05HX01BWDsKIAkJfQogCi0JCWlmIChwLT5vb21raWxsYWRqID09IE9PTV9ESVNBQkxFKQorCQlpZiAocC0+c2lnbmFsLT5vb21fYWRqID09IE9PTV9ESVNBQkxFKQogCQkJY29udGludWU7CiAKIAkJcG9pbnRzID0gYmFkbmVzcyhwLCB1cHRpbWUudHZfc2VjKTsKQEAgLTI1OSw3ICsyODYsNyBAQAogCQkJY2hvc2VuID0gcDsKIAkJCSpwcG9pbnRzID0gcG9pbnRzOwogCQl9Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKKwl9CiAKIAlyZXR1cm4gY2hvc2VuOwogfQpAQCAtMzA0LDcgKzMzMSw3IEBACiAJCX0KIAkJcHJpbnRrKEtFUk5fSU5GTyAiWyU1ZF0gJTVkICU1ZCAlOGx1ICU4bHUgJTNkICAgICAlM2QgJXNcbiIsCiAJCSAgICAgICBwLT5waWQsIF9fdGFza19jcmVkKHApLT51aWQsIHAtPnRnaWQsIG1tLT50b3RhbF92bSwKLQkJICAgICAgIGdldF9tbV9yc3MobW0pLCAoaW50KXRhc2tfY3B1KHApLCBwLT5vb21raWxsYWRqLAorCQkgICAgICAgZ2V0X21tX3JzcyhtbSksIChpbnQpdGFza19jcHUocCksIHAtPnNpZ25hbC0+b29tX2FkaiwKIAkJICAgICAgIHAtPmNvbW0pOwogCQl0YXNrX3VubG9jayhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwpAQCAtMzQ2LDExICszNzMsNiBAQAogCiBzdGF0aWMgaW50IG9vbV9raWxsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnE7Ci0KLQltbSA9IHAtPm1tOwotCiAJLyogV0FSTklORzogbW0gbWF5IG5vdCBiZSBkZXJlZmVyZW5jZWQgc2luY2Ugd2UgZGlkIG5vdCBvYnRhaW4gaXRzCiAJICogdmFsdWUgZnJvbSBnZXRfdGFza19tbShwKS4gIFRoaXMgaXMgT0sgc2luY2UgYWxsIHdlIG5lZWQgdG8gZG8gaXMKIAkgKiBjb21wYXJlIG1tIHRvIHEtPm1tIGJlbG93LgpAQCAtMzU5LDMwICszODEsMTEgQEAKIAkgKiBjaGFuZ2UgdG8gTlVMTCBhdCBhbnkgdGltZSBzaW5jZSB3ZSBkbyBub3QgaG9sZCB0YXNrX2xvY2socCkuCiAJICogSG93ZXZlciwgdGhpcyBpcyBvZiBubyBjb25jZXJuIHRvIHVzLgogCSAqLwotCi0JaWYgKG1tID09IE5VTEwpCisJaWYgKCFwLT5tbSB8fCBwLT5zaWduYWwtPm9vbV9hZGogPT0gT09NX0RJU0FCTEUpCiAJCXJldHVybiAxOwogCi0JLyoKLQkgKiBEb24ndCBraWxsIHRoZSBwcm9jZXNzIGlmIGFueSB0aHJlYWRzIGFyZSBzZXQgdG8gT09NX0RJU0FCTEUKLQkgKi8KLQlkb19lYWNoX3RocmVhZChnLCBxKSB7Ci0JCWlmIChxLT5tbSA9PSBtbSAmJiBxLT5vb21raWxsYWRqID09IE9PTV9ESVNBQkxFKQotCQkJcmV0dXJuIDE7Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCBxKTsKLQogCV9fb29tX2tpbGxfdGFzayhwLCAxKTsKIAotCS8qCi0JICoga2lsbCBhbGwgcHJvY2Vzc2VzIHRoYXQgc2hhcmUgdGhlIC0+bW0gKGkuZS4gYWxsIHRocmVhZHMpLAotCSAqIGJ1dCBhcmUgaW4gYSBkaWZmZXJlbnQgdGhyZWFkIGdyb3VwLiBEb24ndCBsZXQgdGhlbSBoYXZlIGFjY2VzcwotCSAqIHRvIG1lbW9yeSByZXNlcnZlcyB0aG91Z2gsIG90aGVyd2lzZSB3ZSBtaWdodCBkZXBsZXRlIGFsbCBtZW1vcnkuCi0JICovCi0JZG9fZWFjaF90aHJlYWQoZywgcSkgewotCQlpZiAocS0+bW0gPT0gbW0gJiYgIXNhbWVfdGhyZWFkX2dyb3VwKHEsIHApKQotCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIHEpOwotCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk0LDggKzM5Nyw5IEBACiAKIAlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGludm9rZWQgb29tLWtpbGxlcjogIgotCQkJImdmcF9tYXNrPTB4JXgsIG9yZGVyPSVkLCBvb21raWxsYWRqPSVkXG4iLAotCQkJY3VycmVudC0+Y29tbSwgZ2ZwX21hc2ssIG9yZGVyLCBjdXJyZW50LT5vb21raWxsYWRqKTsKKwkJCSJnZnBfbWFzaz0weCV4LCBvcmRlcj0lZCwgb29tX2Fkaj0lZFxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sIGdmcF9tYXNrLCBvcmRlciwKKwkJCWN1cnJlbnQtPnNpZ25hbC0+b29tX2Fkaik7CiAJCXRhc2tfbG9jayhjdXJyZW50KTsKIAkJY3B1c2V0X3ByaW50X3Rhc2tfbWVtc19hbGxvd2VkKGN1cnJlbnQpOwogCQl0YXNrX3VubG9jayhjdXJyZW50KTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDFlZWE0ZmEuLjVmMzc4ZGQ1IDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTM4MCw3ICszODAsOCBAQAogCQlzdHJ1Y3Qgem9uZSAqeiA9CiAJCQkmTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzW1pPTkVfSElHSE1FTV07CiAKLQkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKyB6b25lX2xydV9wYWdlcyh6KTsKKwkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKworCQkgICAgIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoeik7CiAJfQogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgdGhlIG51bWJlciBvZiBoaWdobWVtIHBhZ2VzIGlzIG5ldmVyIGxhcmdlcgpAQCAtNDA0LDcgKzQwNSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB4OwogCi0JeCA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICsgZ2xvYmFsX2xydV9wYWdlcygpOworCXggPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSArIGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpOwogCiAJaWYgKCF2bV9oaWdobWVtX2lzX2RpcnR5YWJsZSkKIAkJeCAtPSBoaWdobWVtX2RpcnR5YWJsZV9tZW1vcnkoeCk7CkBAIC00ODUsNiArNDg2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGJkaV90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBwYWdlc193cml0dGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIHdyaXRlX2NodW5rID0gc3luY193cml0ZWJhY2tfcGFnZXMoKTsKKwl1bnNpZ25lZCBsb25nIHBhdXNlID0gMTsKIAogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCkBAIC01NjEsNyArNTYzLDE1IEBACiAJCWlmIChwYWdlc193cml0dGVuID49IHdyaXRlX2NodW5rKQogCQkJYnJlYWs7CQkvKiBXZSd2ZSBkb25lIG91ciBkdXR5ICovCiAKLQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHBhdXNlKTsKKworCQkvKgorCQkgKiBJbmNyZWFzZSB0aGUgZGVsYXkgZm9yIGVhY2ggbG9vcCwgdXAgdG8gb3VyIHByZXZpb3VzCisJCSAqIGRlZmF1bHQgb2YgdGFraW5nIGEgMTAwbXMgbmFwLgorCQkgKi8KKwkJcGF1c2UgPDw9IDE7CisJCWlmIChwYXVzZSA+IEhaIC8gMTApCisJCQlwYXVzZSA9IEhaIC8gMTA7CiAJfQogCiAJaWYgKGJkaV9ucl9yZWNsYWltYWJsZSArIGJkaV9ucl93cml0ZWJhY2sgPCBiZGlfdGhyZXNoICYmCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYTBkZTE1Zi4uNTcxN2YyNyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva21lbS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC03MSw3ICs3Miw2IEBACiAKIHVuc2lnbmVkIGxvbmcgdG90YWxyYW1fcGFnZXMgX19yZWFkX21vc3RseTsKIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzIF9fcmVhZF9tb3N0bHk7Ci11bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5OwogaW50IHBlcmNwdV9wYWdlbGlzdF9mcmFjdGlvbjsKIGdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7CiAKQEAgLTEyMyw4ICsxMjMsOCBAQAogCiBpbnQgbWluX2ZyZWVfa2J5dGVzID0gMTAyNDsKIAotdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIG5yX2tlcm5lbF9wYWdlczsKLXVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBucl9hbGxfcGFnZXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIG5yX2tlcm5lbF9wYWdlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgbnJfYWxsX3BhZ2VzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBkbWFfcmVzZXJ2ZTsKIAogI2lmZGVmIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUApAQCAtNTEwLDcgKzUxMCw3IEBACiB9CiAKIC8qCi0gKiBGcmVlcyBhIGxpc3Qgb2YgcGFnZXMuIAorICogRnJlZXMgYSBudW1iZXIgb2YgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3RzCiAgKiBBc3N1bWVzIGFsbCBwYWdlcyBvbiBsaXN0IGFyZSBpbiBzYW1lIHpvbmUsIGFuZCBvZiBzYW1lIG9yZGVyLgogICogY291bnQgaXMgdGhlIG51bWJlciBvZiBwYWdlcyB0byBmcmVlLgogICoKQEAgLTUyMCwyMiArNTIwLDQyIEBACiAgKiBBbmQgY2xlYXIgdGhlIHpvbmUncyBwYWdlc19zY2FubmVkIGNvdW50ZXIsIHRvIGhvbGQgb2ZmIHRoZSAiYWxsIHBhZ2VzIGFyZQogICogcGlubmVkIiBkZXRlY3Rpb24gbG9naWMuCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IGNvdW50LAotCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgb3JkZXIpCitzdGF0aWMgdm9pZCBmcmVlX3BjcHBhZ2VzX2J1bGsoc3RydWN0IHpvbmUgKnpvbmUsIGludCBjb3VudCwKKwkJCQkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCkKIHsKKwlpbnQgbWlncmF0ZXR5cGUgPSAwOworCWludCBiYXRjaF9mcmVlID0gMDsKKwogCXNwaW5fbG9jaygmem9uZS0+bG9jayk7CiAJem9uZV9jbGVhcl9mbGFnKHpvbmUsIFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUpOwogCXpvbmUtPnBhZ2VzX3NjYW5uZWQgPSAwOwogCi0JX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMsIGNvdW50IDw8IG9yZGVyKTsKLQl3aGlsZSAoY291bnQtLSkgeworCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTLCBjb3VudCk7CisJd2hpbGUgKGNvdW50KSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlOworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JCVZNX0JVR19PTihsaXN0X2VtcHR5KGxpc3QpKTsKLQkJcGFnZSA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCS8qIGhhdmUgdG8gZGVsZXRlIGl0IGFzIF9fZnJlZV9vbmVfcGFnZSBsaXN0IG1hbmlwdWxhdGVzICovCi0JCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQlfX2ZyZWVfb25lX3BhZ2UocGFnZSwgem9uZSwgb3JkZXIsIHBhZ2VfcHJpdmF0ZShwYWdlKSk7CisJCS8qCisJCSAqIFJlbW92ZSBwYWdlcyBmcm9tIGxpc3RzIGluIGEgcm91bmQtcm9iaW4gZmFzaGlvbi4gQQorCQkgKiBiYXRjaF9mcmVlIGNvdW50IGlzIG1haW50YWluZWQgdGhhdCBpcyBpbmNyZW1lbnRlZCB3aGVuIGFuCisJCSAqIGVtcHR5IGxpc3QgaXMgZW5jb3VudGVyZWQuICBUaGlzIGlzIHNvIG1vcmUgcGFnZXMgYXJlIGZyZWVkCisJCSAqIG9mZiBmdWxsZXIgbGlzdHMgaW5zdGVhZCBvZiBzcGlubmluZyBleGNlc3NpdmVseSBhcm91bmQgZW1wdHkKKwkJICogbGlzdHMKKwkJICovCisJCWRvIHsKKwkJCWJhdGNoX2ZyZWUrKzsKKwkJCWlmICgrK21pZ3JhdGV0eXBlID09IE1JR1JBVEVfUENQVFlQRVMpCisJCQkJbWlncmF0ZXR5cGUgPSAwOworCQkJbGlzdCA9ICZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXTsKKwkJfSB3aGlsZSAobGlzdF9lbXB0eShsaXN0KSk7CisKKwkJZG8geworCQkJcGFnZSA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSk7CisJCQkvKiBtdXN0IGRlbGV0ZSBhcyBfX2ZyZWVfb25lX3BhZ2UgbGlzdCBtYW5pcHVsYXRlcyAqLworCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJCQlfX2ZyZWVfb25lX3BhZ2UocGFnZSwgem9uZSwgMCwgbWlncmF0ZXR5cGUpOworCQkJdHJhY2VfbW1fcGFnZV9wY3B1X2RyYWluKHBhZ2UsIDAsIG1pZ3JhdGV0eXBlKTsKKwkJfSB3aGlsZSAoLS1jb3VudCAmJiAtLWJhdGNoX2ZyZWUgJiYgIWxpc3RfZW1wdHkobGlzdCkpOwogCX0KIAlzcGluX3VubG9jaygmem9uZS0+bG9jayk7CiB9CkBAIC01NTcsNyArNTc3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCWludCBiYWQgPSAwOwotCWludCB3YXNNbG9ja2VkID0gVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSk7CisJaW50IHdhc01sb2NrZWQgPSBfX1Rlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpOwogCiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIG9yZGVyKTsKIApAQCAtNzgzLDYgKzgwMywxNyBAQAogCXJldHVybiBtb3ZlX2ZyZWVwYWdlcyh6b25lLCBzdGFydF9wYWdlLCBlbmRfcGFnZSwgbWlncmF0ZXR5cGUpOwogfQogCitzdGF0aWMgdm9pZCBjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGFnZSwKKwkJCQkJaW50IHN0YXJ0X29yZGVyLCBpbnQgbWlncmF0ZXR5cGUpCit7CisJaW50IG5yX3BhZ2VibG9ja3MgPSAxIDw8IChzdGFydF9vcmRlciAtIHBhZ2VibG9ja19vcmRlcik7CisKKwl3aGlsZSAobnJfcGFnZWJsb2Nrcy0tKSB7CisJCXNldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZWJsb2NrX3BhZ2UsIG1pZ3JhdGV0eXBlKTsKKwkJcGFnZWJsb2NrX3BhZ2UgKz0gcGFnZWJsb2NrX25yX3BhZ2VzOworCX0KK30KKwogLyogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yIGZyb20gdGhlIGZhbGxiYWNrIGxpc3QgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogX19ybXF1ZXVlX2ZhbGxiYWNrKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIGludCBzdGFydF9taWdyYXRldHlwZSkKQEAgLTgzNiwxMSArODY3LDE2IEBACiAJCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAkJCXJtdl9wYWdlX29yZGVyKHBhZ2UpOwogCi0JCQlpZiAoY3VycmVudF9vcmRlciA9PSBwYWdlYmxvY2tfb3JkZXIpCi0JCQkJc2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLAorCQkJLyogVGFrZSBvd25lcnNoaXAgZm9yIG9yZGVycyA+PSBwYWdlYmxvY2tfb3JkZXIgKi8KKwkJCWlmIChjdXJyZW50X29yZGVyID49IHBhZ2VibG9ja19vcmRlcikKKwkJCQljaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIGN1cnJlbnRfb3JkZXIsCiAJCQkJCQkJc3RhcnRfbWlncmF0ZXR5cGUpOwogCiAJCQlleHBhbmQoem9uZSwgcGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsIGFyZWEsIG1pZ3JhdGV0eXBlKTsKKworCQkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIG9yZGVyLCBjdXJyZW50X29yZGVyLAorCQkJCXN0YXJ0X21pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7CisKIAkJCXJldHVybiBwYWdlOwogCQl9CiAJfQpAQCAtODc0LDYgKzkxMCw3IEBACiAJCX0KIAl9CiAKKwl0cmFjZV9tbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkKHBhZ2UsIG9yZGVyLCBtaWdyYXRldHlwZSk7CiAJcmV0dXJuIHBhZ2U7CiB9CiAKQEAgLTkzNCw3ICs5NzEsNyBAQAogCQl0b19kcmFpbiA9IHBjcC0+YmF0Y2g7CiAJZWxzZQogCQl0b19kcmFpbiA9IHBjcC0+Y291bnQ7Ci0JZnJlZV9wYWdlc19idWxrKHpvbmUsIHRvX2RyYWluLCAmcGNwLT5saXN0LCAwKTsKKwlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgdG9fZHJhaW4sIHBjcCk7CiAJcGNwLT5jb3VudCAtPSB0b19kcmFpbjsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC05NjAsNyArOTk3LDcgQEAKIAogCQlwY3AgPSAmcHNldC0+cGNwOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWZyZWVfcGFnZXNfYnVsayh6b25lLCBwY3AtPmNvdW50LCAmcGNwLT5saXN0LCAwKTsKKwkJZnJlZV9wY3BwYWdlc19idWxrKHpvbmUsIHBjcC0+Y291bnQsIHBjcCk7CiAJCXBjcC0+Y291bnQgPSAwOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQpAQCAtMTAyNiw3ICsxMDYzLDggQEAKIAlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHdhc01sb2NrZWQgPSBUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKTsKKwlpbnQgbWlncmF0ZXR5cGU7CisJaW50IHdhc01sb2NrZWQgPSBfX1Rlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpOwogCiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIDApOwogCkBAIC0xMDQzLDM1ICsxMDgxLDQ5IEBACiAJa2VybmVsX21hcF9wYWdlcyhwYWdlLCAxLCAwKTsKIAogCXBjcCA9ICZ6b25lX3BjcCh6b25lLCBnZXRfY3B1KCkpLT5wY3A7Ci0Jc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpKTsKKwltaWdyYXRldHlwZSA9IGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSk7CisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBtaWdyYXRldHlwZSk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmICh1bmxpa2VseSh3YXNNbG9ja2VkKSkKIAkJZnJlZV9wYWdlX21sb2NrKHBhZ2UpOwogCV9fY291bnRfdm1fZXZlbnQoUEdGUkVFKTsKIAorCS8qCisJICogV2Ugb25seSB0cmFjayB1bm1vdmFibGUsIHJlY2xhaW1hYmxlIGFuZCBtb3ZhYmxlIG9uIHBjcCBsaXN0cy4KKwkgKiBGcmVlIElTT0xBVEUgcGFnZXMgYmFjayB0byB0aGUgYWxsb2NhdG9yIGJlY2F1c2UgdGhleSBhcmUgYmVpbmcKKwkgKiBvZmZsaW5lZCBidXQgdHJlYXQgUkVTRVJWRSBhcyBtb3ZhYmxlIHBhZ2VzIHNvIHdlIGNhbiBnZXQgdGhvc2UKKwkgKiBhcmVhcyBiYWNrIGlmIG5lY2Vzc2FyeS4gT3RoZXJ3aXNlLCB3ZSBtYXkgaGF2ZSB0byBmcmVlCisJICogZXhjZXNzaXZlbHkgaW50byB0aGUgcGFnZSBhbGxvY2F0b3IKKwkgKi8KKwlpZiAobWlncmF0ZXR5cGUgPj0gTUlHUkFURV9QQ1BUWVBFUykgeworCQlpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9JU09MQVRFKSkgeworCQkJZnJlZV9vbmVfcGFnZSh6b25lLCBwYWdlLCAwLCBtaWdyYXRldHlwZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQltaWdyYXRldHlwZSA9IE1JR1JBVEVfTU9WQUJMRTsKKwl9CisKIAlpZiAoY29sZCkKLQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcGNwLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcGNwLT5saXN0c1ttaWdyYXRldHlwZV0pOwogCWVsc2UKLQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnBjcC0+bGlzdCk7CisJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXSk7CiAJcGNwLT5jb3VudCsrOwogCWlmIChwY3AtPmNvdW50ID49IHBjcC0+aGlnaCkgewotCQlmcmVlX3BhZ2VzX2J1bGsoem9uZSwgcGNwLT5iYXRjaCwgJnBjcC0+bGlzdCwgMCk7CisJCWZyZWVfcGNwcGFnZXNfYnVsayh6b25lLCBwY3AtPmJhdGNoLCBwY3ApOwogCQlwY3AtPmNvdW50IC09IHBjcC0+YmF0Y2g7CiAJfQorCitvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXB1dF9jcHUoKTsKIH0KIAogdm9pZCBmcmVlX2hvdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogeworCXRyYWNlX21tX3BhZ2VfZnJlZV9kaXJlY3QocGFnZSwgMCk7CiAJZnJlZV9ob3RfY29sZF9wYWdlKHBhZ2UsIDApOwogfQogCQotdm9pZCBmcmVlX2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlmcmVlX2hvdF9jb2xkX3BhZ2UocGFnZSwgMSk7Ci19Ci0KIC8qCiAgKiBzcGxpdF9wYWdlIHRha2VzIGEgbm9uLWNvbXBvdW5kIGhpZ2hlci1vcmRlciBwYWdlLCBhbmQgc3BsaXRzIGl0IGludG8KICAqIG4gKDE8PG9yZGVyKSBzdWItcGFnZXM6IHBhZ2VbMC4ubl0KQEAgLTExMTksMzUgKzExNzEsMjMgQEAKIAljcHUgID0gZ2V0X2NwdSgpOwogCWlmIChsaWtlbHkob3JkZXIgPT0gMCkpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAogCQlwY3AgPSAmem9uZV9wY3Aoem9uZSwgY3B1KS0+cGNwOworCQlsaXN0ID0gJnBjcC0+bGlzdHNbbWlncmF0ZXR5cGVdOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWlmICghcGNwLT5jb3VudCkgewotCQkJcGNwLT5jb3VudCA9IHJtcXVldWVfYnVsayh6b25lLCAwLAotCQkJCQlwY3AtPmJhdGNoLCAmcGNwLT5saXN0LAorCQlpZiAobGlzdF9lbXB0eShsaXN0KSkgeworCQkJcGNwLT5jb3VudCArPSBybXF1ZXVlX2J1bGsoem9uZSwgMCwKKwkJCQkJcGNwLT5iYXRjaCwgbGlzdCwKIAkJCQkJbWlncmF0ZXR5cGUsIGNvbGQpOwotCQkJaWYgKHVubGlrZWx5KCFwY3AtPmNvdW50KSkKKwkJCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KGxpc3QpKSkKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQogCi0JCS8qIEZpbmQgYSBwYWdlIG9mIHRoZSBhcHByb3ByaWF0ZSBtaWdyYXRlIHR5cGUgKi8KLQkJaWYgKGNvbGQpIHsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShwYWdlLCAmcGNwLT5saXN0LCBscnUpCi0JCQkJaWYgKHBhZ2VfcHJpdmF0ZShwYWdlKSA9PSBtaWdyYXRldHlwZSkKLQkJCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZwY3AtPmxpc3QsIGxydSkKLQkJCQlpZiAocGFnZV9wcml2YXRlKHBhZ2UpID09IG1pZ3JhdGV0eXBlKQotCQkJCQlicmVhazsKLQkJfQotCi0JCS8qIEFsbG9jYXRlIG1vcmUgdG8gdGhlIHBjcCBsaXN0IGlmIG5lY2Vzc2FyeSAqLwotCQlpZiAodW5saWtlbHkoJnBhZ2UtPmxydSA9PSAmcGNwLT5saXN0KSkgewotCQkJcGNwLT5jb3VudCArPSBybXF1ZXVlX2J1bGsoem9uZSwgMCwKLQkJCQkJcGNwLT5iYXRjaCwgJnBjcC0+bGlzdCwKLQkJCQkJbWlncmF0ZXR5cGUsIGNvbGQpOwotCQkJcGFnZSA9IGxpc3RfZW50cnkocGNwLT5saXN0Lm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCQl9CisJCWlmIChjb2xkKQorCQkJcGFnZSA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSk7CisJCWVsc2UKKwkJCXBhZ2UgPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwogCiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCQlwY3AtPmNvdW50LS07CkBAIC0xNjI3LDEwICsxNjY3LDYgQEAKIAogCS8qIFdlIG5vdyBnbyBpbnRvIHN5bmNocm9ub3VzIHJlY2xhaW0gKi8KIAljcHVzZXRfbWVtb3J5X3ByZXNzdXJlX2J1bXAoKTsKLQotCS8qCi0JICogVGhlIHRhc2sncyBjcHVzZXQgbWlnaHQgaGF2ZSBleHBhbmRlZCBpdHMgc2V0IG9mIGFsbG93YWJsZSBub2RlcwotCSAqLwogCXAtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCWxvY2tkZXBfc2V0X2N1cnJlbnRfcmVjbGFpbV9zdGF0ZShnZnBfbWFzayk7CiAJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CkBAIC0xNzY1LDYgKzE4MDEsNyBAQAogCiAJd2FrZV9hbGxfa3N3YXBkKG9yZGVyLCB6b25lbGlzdCwgaGlnaF96b25laWR4KTsKIAorcmVzdGFydDoKIAkvKgogCSAqIE9LLCB3ZSdyZSBiZWxvdyB0aGUga3N3YXBkIHdhdGVybWFyayBhbmQgaGF2ZSBraWNrZWQgYmFja2dyb3VuZAogCSAqIHJlY2xhaW0uIE5vdyB0aGluZ3MgZ2V0IG1vcmUgY29tcGxleCwgc28gc2V0IHVwIGFsbG9jX2ZsYWdzIGFjY29yZGluZwpAQCAtMTc3Miw3ICsxODA5LDYgQEAKIAkgKi8KIAlhbGxvY19mbGFncyA9IGdmcF90b19hbGxvY19mbGFncyhnZnBfbWFzayk7CiAKLXJlc3RhcnQ6CiAJLyogVGhpcyBpcyB0aGUgbGFzdCBjaGFuY2UsIGluIGdlbmVyYWwsIGJlZm9yZSB0aGUgZ290byBub3BhZ2UuICovCiAJcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG5vZGVtYXNrLCBvcmRlciwgem9uZWxpc3QsCiAJCQloaWdoX3pvbmVpZHgsIGFsbG9jX2ZsYWdzICYgfkFMTE9DX05PX1dBVEVSTUFSS1MsCkBAIC0xOTA3LDYgKzE5NDMsNyBAQAogCQkJCXpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIG5vZGVtYXNrLAogCQkJCXByZWZlcnJlZF96b25lLCBtaWdyYXRldHlwZSk7CiAKKwl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBnZnBfbWFzaywgbWlncmF0ZXR5cGUpOwogCXJldHVybiBwYWdlOwogfQogRVhQT1JUX1NZTUJPTChfX2FsbG9jX3BhZ2VzX25vZGVtYXNrKTsKQEAgLTE5MTYsNDQgKzE5NTMsNDEgQEAKICAqLwogdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IHBhZ2UgKiBwYWdlOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJLyoKKwkgKiBfX2dldF9mcmVlX3BhZ2VzKCkgcmV0dXJucyBhIDMyLWJpdCBhZGRyZXNzLCB3aGljaCBjYW5ub3QgcmVwcmVzZW50CisJICogYSBoaWdobWVtIHBhZ2UKKwkgKi8KKwlWTV9CVUdfT04oKGdmcF9tYXNrICYgX19HRlBfSElHSE1FTSkgIT0gMCk7CisKIAlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAwOwogCXJldHVybiAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOwogfQotCiBFWFBPUlRfU1lNQk9MKF9fZ2V0X2ZyZWVfcGFnZXMpOwogCiB1bnNpZ25lZCBsb25nIGdldF96ZXJvZWRfcGFnZShnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3QgcGFnZSAqIHBhZ2U7Ci0KLQkvKgotCSAqIGdldF96ZXJvZWRfcGFnZSgpIHJldHVybnMgYSAzMi1iaXQgYWRkcmVzcywgd2hpY2ggY2Fubm90IHJlcHJlc2VudAotCSAqIGEgaGlnaG1lbSBwYWdlCi0JICovCi0JVk1fQlVHX09OKChnZnBfbWFzayAmIF9fR0ZQX0hJR0hNRU0pICE9IDApOwotCi0JcGFnZSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrIHwgX19HRlBfWkVSTywgMCk7Ci0JaWYgKHBhZ2UpCi0JCXJldHVybiAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOwotCXJldHVybiAwOworCXJldHVybiBfX2dldF9mcmVlX3BhZ2VzKGdmcF9tYXNrIHwgX19HRlBfWkVSTywgMCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZ2V0X3plcm9lZF9wYWdlKTsKIAogdm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKIHsKIAlpbnQgaSA9IHBhZ2V2ZWNfY291bnQocHZlYyk7CiAKLQl3aGlsZSAoLS1pID49IDApCisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXRyYWNlX21tX3BhZ2V2ZWNfZnJlZShwdmVjLT5wYWdlc1tpXSwgcHZlYy0+Y29sZCk7CiAJCWZyZWVfaG90X2NvbGRfcGFnZShwdmVjLT5wYWdlc1tpXSwgcHZlYy0+Y29sZCk7CisJfQogfQogCiB2b2lkIF9fZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQogewogCWlmIChwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkgeworCQl0cmFjZV9tbV9wYWdlX2ZyZWVfZGlyZWN0KHBhZ2UsIG9yZGVyKTsKIAkJaWYgKG9yZGVyID09IDApCiAJCQlmcmVlX2hvdF9wYWdlKHBhZ2UpOwogCQllbHNlCkBAIC0yMTI4LDIzICsyMTYyLDI4IEBACiAJCX0KIAl9CiAKLQlwcmludGsoIkFjdGl2ZV9hbm9uOiVsdSBhY3RpdmVfZmlsZTolbHUgaW5hY3RpdmVfYW5vbjolbHVcbiIKLQkJIiBpbmFjdGl2ZV9maWxlOiVsdSIKKwlwcmludGsoImFjdGl2ZV9hbm9uOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdSBpc29sYXRlZF9hbm9uOiVsdVxuIgorCQkiIGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9maWxlOiVsdSBpc29sYXRlZF9maWxlOiVsdVxuIgogCQkiIHVuZXZpY3RhYmxlOiVsdSIKLQkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKLQkJIiBmcmVlOiVsdSBzbGFiOiVsdSBtYXBwZWQ6JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCisJCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1IGJ1ZmZlcjolbHVcbiIKKwkJIiBmcmVlOiVsdSBzbGFiX3JlY2xhaW1hYmxlOiVsdSBzbGFiX3VucmVjbGFpbWFibGU6JWx1XG4iCisJCSIgbWFwcGVkOiVsdSBzaG1lbTolbHUgcGFnZXRhYmxlczolbHUgYm91bmNlOiVsdVxuIiwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLAotCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JU09MQVRFRF9BTk9OKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSVNPTEFURURfRklMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VORVZJQ1RBQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyksCisJCW5yX2Jsb2NrZGV2X3BhZ2VzKCksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpLAotCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSArCi0JCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9NQVBQRUQpLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TSE1FTSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1BBR0VUQUJMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0JPVU5DRSkpOwogCkBAIC0yMTYyLDcgKzIyMDEsMjEgQEAKIAkJCSIgYWN0aXZlX2ZpbGU6JWx1a0IiCiAJCQkiIGluYWN0aXZlX2ZpbGU6JWx1a0IiCiAJCQkiIHVuZXZpY3RhYmxlOiVsdWtCIgorCQkJIiBpc29sYXRlZChhbm9uKTolbHVrQiIKKwkJCSIgaXNvbGF0ZWQoZmlsZSk6JWx1a0IiCiAJCQkiIHByZXNlbnQ6JWx1a0IiCisJCQkiIG1sb2NrZWQ6JWx1a0IiCisJCQkiIGRpcnR5OiVsdWtCIgorCQkJIiB3cml0ZWJhY2s6JWx1a0IiCisJCQkiIG1hcHBlZDolbHVrQiIKKwkJCSIgc2htZW06JWx1a0IiCisJCQkiIHNsYWJfcmVjbGFpbWFibGU6JWx1a0IiCisJCQkiIHNsYWJfdW5yZWNsYWltYWJsZTolbHVrQiIKKwkJCSIga2VybmVsX3N0YWNrOiVsdWtCIgorCQkJIiBwYWdldGFibGVzOiVsdWtCIgorCQkJIiB1bnN0YWJsZTolbHVrQiIKKwkJCSIgYm91bmNlOiVsdWtCIgorCQkJIiB3cml0ZWJhY2tfdG1wOiVsdWtCIgogCQkJIiBwYWdlc19zY2FubmVkOiVsdSIKIAkJCSIgYWxsX3VucmVjbGFpbWFibGU/ICVzIgogCQkJIlxuIiwKQEAgLTIxNzYsNyArMjIyOSwyMiBAQAogCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUpKSwKIAkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpKSwKIAkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9GSUxFKSksCiAJCQlLKHpvbmUtPnByZXNlbnRfcGFnZXMpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTUxPQ0spKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZJTEVfRElSVFkpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1dSSVRFQkFDSykpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRklMRV9NQVBQRUQpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1NITUVNKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1JFQ0xBSU1BQkxFKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEUpKSwKKwkJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9LRVJORUxfU1RBQ0spICoKKwkJCQlUSFJFQURfU0laRSAvIDEwMjQsCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9QQUdFVEFCTEUpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VOU1RBQkxFX05GUykpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQk9VTkNFKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9XUklURUJBQ0tfVEVNUCkpLAogCQkJem9uZS0+cGFnZXNfc2Nhbm5lZCwKIAkJCSh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpID8gInllcyIgOiAibm8iKQogCQkJKTsKQEAgLTI3ODMsNyArMjg1MSw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHBmbiwgZW5kX3BmbjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIHJlc2VydmUsIGJsb2NrX21pZ3JhdGV0eXBlOworCXVuc2lnbmVkIGxvbmcgYmxvY2tfbWlncmF0ZXR5cGU7CisJaW50IHJlc2VydmU7CiAKIAkvKiBHZXQgdGhlIHN0YXJ0IHBmbiwgZW5kIHBmbiBhbmQgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gcmVzZXJ2ZSAqLwogCXN0YXJ0X3BmbiA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuOwpAQCAtMjc5MSw2ICsyODYwLDE1IEBACiAJcmVzZXJ2ZSA9IHJvdW5kdXAobWluX3dtYXJrX3BhZ2VzKHpvbmUpLCBwYWdlYmxvY2tfbnJfcGFnZXMpID4+CiAJCQkJCQkJcGFnZWJsb2NrX29yZGVyOwogCisJLyoKKwkgKiBSZXNlcnZlIGJsb2NrcyBhcmUgZ2VuZXJhbGx5IGluIHBsYWNlIHRvIGhlbHAgaGlnaC1vcmRlciBhdG9taWMKKwkgKiBhbGxvY2F0aW9ucyB0aGF0IGFyZSBzaG9ydC1saXZlZC4gQSBtaW5fZnJlZV9rYnl0ZXMgdmFsdWUgdGhhdAorCSAqIHdvdWxkIHJlc3VsdCBpbiBtb3JlIHRoYW4gMiByZXNlcnZlIGJsb2NrcyBmb3IgYXRvbWljIGFsbG9jYXRpb25zCisJICogaXMgYXNzdW1lZCB0byBiZSBpbiBwbGFjZSB0byBoZWxwIGFudGktZnJhZ21lbnRhdGlvbiBmb3IgdGhlCisJICogZnV0dXJlIGFsbG9jYXRpb24gb2YgaHVnZXBhZ2VzIGF0IHJ1bnRpbWUuCisJICovCisJcmVzZXJ2ZSA9IG1pbigyLCByZXNlcnZlKTsKKwogCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBlbmRfcGZuOyBwZm4gKz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7CiAJCWlmICghcGZuX3ZhbGlkKHBmbikpCiAJCQljb250aW51ZTsKQEAgLTI5NjEsNiArMzAzOSw3IEBACiBzdGF0aWMgdm9pZCBzZXR1cF9wYWdlc2V0KHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnAsIHVuc2lnbmVkIGxvbmcgYmF0Y2gpCiB7CiAJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKKwlpbnQgbWlncmF0ZXR5cGU7CiAKIAltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CiAKQEAgLTI5NjgsNyArMzA0Nyw4IEBACiAJcGNwLT5jb3VudCA9IDA7CiAJcGNwLT5oaWdoID0gNiAqIGJhdGNoOwogCXBjcC0+YmF0Y2ggPSBtYXgoMVVMLCAxICogYmF0Y2gpOwotCUlOSVRfTElTVF9IRUFEKCZwY3AtPmxpc3QpOworCWZvciAobWlncmF0ZXR5cGUgPSAwOyBtaWdyYXRldHlwZSA8IE1JR1JBVEVfUENQVFlQRVM7IG1pZ3JhdGV0eXBlKyspCisJCUlOSVRfTElTVF9IRUFEKCZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXSk7CiB9CiAKIC8qCkBAIC0zMTQ2LDYgKzMyMjYsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX3pvbmVfcGNwX3VwZGF0ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCB6b25lICp6b25lID0gZGF0YTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgYmF0Y2ggPSB6b25lX2JhdGNoc2l6ZSh6b25lKSwgZmxhZ3M7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7CisJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7CisJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CisKKwkJcHNldCA9IHpvbmVfcGNwKHpvbmUsIGNwdSk7CisJCXBjcCA9ICZwc2V0LT5wY3A7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKKwkJc2V0dXBfcGFnZXNldChwc2V0LCBiYXRjaCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgem9uZV9wY3BfdXBkYXRlKHN0cnVjdCB6b25lICp6b25lKQoreworCXN0b3BfbWFjaGluZShfX3pvbmVfcGNwX3VwZGF0ZSwgem9uZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBfX21lbWluaXQgdm9pZCB6b25lX3BjcF9pbml0KHN0cnVjdCB6b25lICp6b25lKQogewogCWludCBjcHU7CkBAIC0zNzIwLDcgKzM4MjYsNyBAQAogCQl6b25lX3BjcF9pbml0KHpvbmUpOwogCQlmb3JfZWFjaF9scnUobCkgewogCQkJSU5JVF9MSVNUX0hFQUQoJnpvbmUtPmxydVtsXS5saXN0KTsKLQkJCXpvbmUtPmxydVtsXS5ucl9zYXZlZF9zY2FuID0gMDsKKwkJCXpvbmUtPnJlY2xhaW1fc3RhdC5ucl9zYXZlZF9zY2FuW2xdID0gMDsKIAkJfQogCQl6b25lLT5yZWNsYWltX3N0YXQucmVjZW50X3JvdGF0ZWRbMF0gPSAwOwogCQl6b25lLT5yZWNsYWltX3N0YXQucmVjZW50X3JvdGF0ZWRbMV0gPSAwOwpAQCAtNDUwOSw3ICs0NjE1LDcgQEAKIAljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKLS8qKgorLyoKICAqIFRoZSBpbmFjdGl2ZSBhbm9uIGxpc3Qgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBWTSBuZXZlciBoYXMgdG8KICAqIGRvIHRvbyBtdWNoIHdvcmssIGJ1dCBsYXJnZSBlbm91Z2ggdGhhdCBlYWNoIGluYWN0aXZlIHBhZ2UgaGFzIGEgY2hhbmNlCiAgKiB0byBiZSByZWZlcmVuY2VkIGFnYWluIGJlZm9yZSBpdCBpcyBzd2FwcGVkIG91dC4KQEAgLTQ3MzIsNyArNDgzOCwxNCBAQAogCQkJbnVtZW50cmllcyA8PD0gKFBBR0VfU0hJRlQgLSBzY2FsZSk7CiAKIAkJLyogTWFrZSBzdXJlIHdlJ3ZlIGdvdCBhdCBsZWFzdCBhIDAtb3JkZXIgYWxsb2NhdGlvbi4uICovCi0JCWlmICh1bmxpa2VseSgobnVtZW50cmllcyAqIGJ1Y2tldHNpemUpIDwgUEFHRV9TSVpFKSkKKwkJaWYgKHVubGlrZWx5KGZsYWdzICYgSEFTSF9TTUFMTCkpIHsKKwkJCS8qIE1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgSEFTSF9FQVJMWSAqLworCQkJV0FSTl9PTighKGZsYWdzICYgSEFTSF9FQVJMWSkpOworCQkJaWYgKCEobnVtZW50cmllcyA+PiAqX2hhc2hfc2hpZnQpKSB7CisJCQkJbnVtZW50cmllcyA9IDFVTCA8PCAqX2hhc2hfc2hpZnQ7CisJCQkJQlVHX09OKCFudW1lbnRyaWVzKTsKKwkJCX0KKwkJfSBlbHNlIGlmICh1bmxpa2VseSgobnVtZW50cmllcyAqIGJ1Y2tldHNpemUpIDwgUEFHRV9TSVpFKSkKIAkJCW51bWVudHJpZXMgPSBQQUdFX1NJWkUgLyBidWNrZXRzaXplOwogCX0KIAludW1lbnRyaWVzID0gcm91bmR1cF9wb3dfb2ZfdHdvKG51bWVudHJpZXMpOwpAQCAtNDg3NCwxMyArNDk4NywxNiBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FQlVTWTsKKwlpbnQgem9uZV9pZHg7CiAKIAl6b25lID0gcGFnZV96b25lKHBhZ2UpOworCXpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAkvKgogCSAqIEluIGZ1dHVyZSwgbW9yZSBtaWdyYXRlIHR5cGVzIHdpbGwgYmUgYWJsZSB0byBiZSBpc29sYXRpb24gdGFyZ2V0LgogCSAqLwotCWlmIChnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpICE9IE1JR1JBVEVfTU9WQUJMRSkKKwlpZiAoZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKSAhPSBNSUdSQVRFX01PVkFCTEUgJiYKKwkgICAgem9uZV9pZHggIT0gWk9ORV9NT1ZBQkxFKQogCQlnb3RvIG91dDsKIAlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CiAJbW92ZV9mcmVlcGFnZXNfYmxvY2soem9uZSwgcGFnZSwgTUlHUkFURV9JU09MQVRFKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY2dyb3VwLmMgYi9tbS9wYWdlX2Nncm91cC5jCmluZGV4IGYyMmI0ZWIuLjNkNTM1ZDUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY2dyb3VwLmMKKysrIGIvbW0vcGFnZV9jZ3JvdXAuYwpAQCAtMTE2LDEwICsxMTYsMTYgQEAKIAkJbmlkID0gcGFnZV90b19uaWQocGZuX3RvX3BhZ2UocGZuKSk7CiAJCXRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2VfY2dyb3VwKSAqIFBBR0VTX1BFUl9TRUNUSU9OOwogCQlWTV9CVUdfT04oIXNsYWJfaXNfYXZhaWxhYmxlKCkpOwotCQliYXNlID0ga21hbGxvY19ub2RlKHRhYmxlX3NpemUsCisJCWlmIChub2RlX3N0YXRlKG5pZCwgTl9ISUdIX01FTU9SWSkpIHsKKwkJCWJhc2UgPSBrbWFsbG9jX25vZGUodGFibGVfc2l6ZSwKIAkJCQlHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLCBuaWQpOwotCQlpZiAoIWJhc2UpCi0JCQliYXNlID0gdm1hbGxvY19ub2RlKHRhYmxlX3NpemUsIG5pZCk7CisJCQlpZiAoIWJhc2UpCisJCQkJYmFzZSA9IHZtYWxsb2Nfbm9kZSh0YWJsZV9zaXplLCBuaWQpOworCQl9IGVsc2UgeworCQkJYmFzZSA9IGttYWxsb2ModGFibGVfc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CisJCQlpZiAoIWJhc2UpCisJCQkJYmFzZSA9IHZtYWxsb2ModGFibGVfc2l6ZSk7CisJCX0KIAl9IGVsc2UgewogCQkvKgogIAkJICogV2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBwYWdlX2Nncm91cCBhZ2FpbiwgYnV0CmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMDg5NWI1Yy4uNzIwZmMwMyAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtNzEwLDI3ICs3MTAsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19ERUJVR19WTQotLyoqCi0gKiBwYWdlX2R1cF9ybWFwIC0gZHVwbGljYXRlIHB0ZSBtYXBwaW5nIHRvIGEgcGFnZQotICogQHBhZ2U6CXRoZSBwYWdlIHRvIGFkZCB0aGUgbWFwcGluZyB0bwotICogQHZtYToJdGhlIHZtIGFyZWEgYmVpbmcgZHVwbGljYXRlZAotICogQGFkZHJlc3M6CXRoZSB1c2VyIHZpcnR1YWwgYWRkcmVzcyBtYXBwZWQKLSAqCi0gKiBGb3IgY29weV9wYWdlX3JhbmdlIG9ubHk6IG1pbmltYWwgZXh0cmFjdCBmcm9tIHBhZ2VfYWRkX2ZpbGVfcm1hcCAvCi0gKiBwYWdlX2FkZF9hbm9uX3JtYXAsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHRlc3RzIChhbHJlYWR5IGNoZWNrZWQpIHNvIGl0J3MKLSAqIHF1aWNrZXIuCi0gKgotICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwdGUgbG9jay4KLSAqLwotdm9pZCBwYWdlX2R1cF9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJX19wYWdlX2NoZWNrX2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOwotCWF0b21pY19pbmMoJnBhZ2UtPl9tYXBjb3VudCk7Ci19Ci0jZW5kaWYKLQogLyoqCiAgKiBwYWdlX3JlbW92ZV9ybWFwIC0gdGFrZSBkb3duIHB0ZSBtYXBwaW5nIGZyb20gYSBwYWdlCiAgKiBAcGFnZTogcGFnZSB0byByZW1vdmUgbWFwcGluZyBmcm9tCkBAIC03MzksMzQgKzcxOCwzNyBAQAogICovCiB2b2lkIHBhZ2VfcmVtb3ZlX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JaWYgKGF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZwYWdlLT5fbWFwY291bnQpKSB7Ci0JCS8qCi0JCSAqIE5vdyB0aGF0IHRoZSBsYXN0IHB0ZSBoYXMgZ29uZSwgczM5MCBtdXN0IHRyYW5zZmVyIGRpcnR5Ci0JCSAqIGZsYWcgZnJvbSBzdG9yYWdlIGtleSB0byBzdHJ1Y3QgcGFnZS4gIFdlIGNhbiB1c3VhbGx5IHNraXAKLQkJICogdGhpcyBpZiB0aGUgcGFnZSBpcyBhbm9uLCBzbyBhYm91dCB0byBiZSBmcmVlZDsgYnV0IHBlcmhhcHMKLQkJICogbm90IGlmIGl0J3MgaW4gc3dhcGNhY2hlIC0gdGhlcmUgbWlnaHQgYmUgYW5vdGhlciBwdGUgc2xvdAotCQkgKiBjb250YWluaW5nIHRoZSBzd2FwIGVudHJ5LCBidXQgcGFnZSBub3QgeWV0IHdyaXR0ZW4gdG8gc3dhcC4KLQkJICovCi0JCWlmICgoIVBhZ2VBbm9uKHBhZ2UpIHx8IFBhZ2VTd2FwQ2FjaGUocGFnZSkpICYmCi0JCSAgICBwYWdlX3Rlc3RfZGlydHkocGFnZSkpIHsKLQkJCXBhZ2VfY2xlYXJfZGlydHkocGFnZSk7Ci0JCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJfQotCQlpZiAoUGFnZUFub24ocGFnZSkpCi0JCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7Ci0JCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLAotCQkJUGFnZUFub24ocGFnZSkgPyBOUl9BTk9OX1BBR0VTIDogTlJfRklMRV9NQVBQRUQpOwotCQltZW1fY2dyb3VwX3VwZGF0ZV9tYXBwZWRfZmlsZV9zdGF0KHBhZ2UsIC0xKTsKLQkJLyoKLQkJICogSXQgd291bGQgYmUgdGlkeSB0byByZXNldCB0aGUgUGFnZUFub24gbWFwcGluZyBoZXJlLAotCQkgKiBidXQgdGhhdCBtaWdodCBvdmVyd3JpdGUgYSByYWNpbmcgcGFnZV9hZGRfYW5vbl9ybWFwCi0JCSAqIHdoaWNoIGluY3JlbWVudHMgbWFwY291bnQgYWZ0ZXIgdXMgYnV0IHNldHMgbWFwcGluZwotCQkgKiBiZWZvcmUgdXM6IHNvIGxlYXZlIHRoZSByZXNldCB0byBmcmVlX2hvdF9jb2xkX3BhZ2UsCi0JCSAqIGFuZCByZW1lbWJlciB0aGF0IGl0J3Mgb25seSByZWxpYWJsZSB3aGlsZSBtYXBwZWQuCi0JCSAqIExlYXZpbmcgaXQgc2V0IGFsc28gaGVscHMgc3dhcG9mZiB0byByZWluc3RhdGUgcHRlcwotCQkgKiBmYXN0ZXIgZm9yIHRob3NlIHBhZ2VzIHN0aWxsIGluIHN3YXBjYWNoZS4KLQkJICovCisJLyogcGFnZSBzdGlsbCBtYXBwZWQgYnkgc29tZW9uZSBlbHNlPyAqLworCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJnBhZ2UtPl9tYXBjb3VudCkpCisJCXJldHVybjsKKworCS8qCisJICogTm93IHRoYXQgdGhlIGxhc3QgcHRlIGhhcyBnb25lLCBzMzkwIG11c3QgdHJhbnNmZXIgZGlydHkKKwkgKiBmbGFnIGZyb20gc3RvcmFnZSBrZXkgdG8gc3RydWN0IHBhZ2UuICBXZSBjYW4gdXN1YWxseSBza2lwCisJICogdGhpcyBpZiB0aGUgcGFnZSBpcyBhbm9uLCBzbyBhYm91dCB0byBiZSBmcmVlZDsgYnV0IHBlcmhhcHMKKwkgKiBub3QgaWYgaXQncyBpbiBzd2FwY2FjaGUgLSB0aGVyZSBtaWdodCBiZSBhbm90aGVyIHB0ZSBzbG90CisJICogY29udGFpbmluZyB0aGUgc3dhcCBlbnRyeSwgYnV0IHBhZ2Ugbm90IHlldCB3cml0dGVuIHRvIHN3YXAuCisJICovCisJaWYgKCghUGFnZUFub24ocGFnZSkgfHwgUGFnZVN3YXBDYWNoZShwYWdlKSkgJiYgcGFnZV90ZXN0X2RpcnR5KHBhZ2UpKSB7CisJCXBhZ2VfY2xlYXJfZGlydHkocGFnZSk7CisJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCX0KKwlpZiAoUGFnZUFub24ocGFnZSkpIHsKKwkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOworCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfQU5PTl9QQUdFUyk7CisJfSBlbHNlIHsKKwkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfTUFQUEVEKTsKKwl9CisJbWVtX2Nncm91cF91cGRhdGVfbWFwcGVkX2ZpbGVfc3RhdChwYWdlLCAtMSk7CisJLyoKKwkgKiBJdCB3b3VsZCBiZSB0aWR5IHRvIHJlc2V0IHRoZSBQYWdlQW5vbiBtYXBwaW5nIGhlcmUsCisJICogYnV0IHRoYXQgbWlnaHQgb3ZlcndyaXRlIGEgcmFjaW5nIHBhZ2VfYWRkX2Fub25fcm1hcAorCSAqIHdoaWNoIGluY3JlbWVudHMgbWFwY291bnQgYWZ0ZXIgdXMgYnV0IHNldHMgbWFwcGluZworCSAqIGJlZm9yZSB1czogc28gbGVhdmUgdGhlIHJlc2V0IHRvIGZyZWVfaG90X2NvbGRfcGFnZSwKKwkgKiBhbmQgcmVtZW1iZXIgdGhhdCBpdCdzIG9ubHkgcmVsaWFibGUgd2hpbGUgbWFwcGVkLgorCSAqIExlYXZpbmcgaXQgc2V0IGFsc28gaGVscHMgc3dhcG9mZiB0byByZWluc3RhdGUgcHRlcworCSAqIGZhc3RlciBmb3IgdGhvc2UgcGFnZXMgc3RpbGwgaW4gc3dhcGNhY2hlLgorCSAqLwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggYmQyMGY4Yi4uYjIwNmE3YSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgotI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgpAQCAtMTA5Nyw2ICsxMDk2LDEwIEBACiAJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKIHVubG9jazoKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJLyoKKwkgKiBhZGRfdG9fc3dhcF9jYWNoZSgpIGRvZXNuJ3QgcmV0dXJuIC1FRVhJU1QsIHNvIHdlIGNhbiBzYWZlbHkKKwkgKiBjbGVhciBTV0FQX0hBU19DQUNIRSBmbGFnLgorCSAqLwogCXN3YXBjYWNoZV9mcmVlKHN3YXAsIE5VTEwpOwogcmVkaXJ0eToKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKQEAgLTIzMDYsMTcgKzIzMDksMTQgQEAKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCS8qIFJvdW5kIHVwIHRvIEwxX0NBQ0hFX0JZVEVTIHRvIHJlc2lzdCBmYWxzZSBzaGFyaW5nICovCi0Jc2JpbmZvID0ga21hbGxvYyhtYXgoKGludClzaXplb2Yoc3RydWN0IHNobWVtX3NiX2luZm8pLAorCXNiaW5mbyA9IGt6YWxsb2MobWF4KChpbnQpc2l6ZW9mKHN0cnVjdCBzaG1lbV9zYl9pbmZvKSwKIAkJCQlMMV9DQUNIRV9CWVRFUyksIEdGUF9LRVJORUwpOwogCWlmICghc2JpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNiaW5mby0+bWF4X2Jsb2NrcyA9IDA7Ci0Jc2JpbmZvLT5tYXhfaW5vZGVzID0gMDsKIAlzYmluZm8tPm1vZGUgPSBTX0lSV1hVR08gfCBTX0lTVlRYOwogCXNiaW5mby0+dWlkID0gY3VycmVudF9mc3VpZCgpOwogCXNiaW5mby0+Z2lkID0gY3VycmVudF9mc2dpZCgpOwotCXNiaW5mby0+bXBvbCA9IE5VTEw7CiAJc2ItPnNfZnNfaW5mbyA9IHNiaW5mbzsKIAogI2lmZGVmIENPTkZJR19UTVBGUwpAQCAtMjU5MCw2ICsyNTkwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQoreworCXJldHVybiAwOworfQorCiAjZGVmaW5lIHNobWVtX3ZtX29wcwkJCQlnZW5lcmljX2ZpbGVfdm1fb3BzCiAjZGVmaW5lIHNobWVtX2ZpbGVfb3BlcmF0aW9ucwkJCXJhbWZzX2ZpbGVfb3BlcmF0aW9ucwogI2RlZmluZSBzaG1lbV9nZXRfaW5vZGUoc2IsIG1vZGUsIGRldiwgZmxhZ3MpCXJhbWZzX2dldF9pbm9kZShzYiwgbW9kZSwgZGV2KQpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDdiNWQ0ZGUuLjdkZmE0ODEgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTEzODQsNyArMTM4NCw3IEBACiAJICogRnJhZ21lbnRhdGlvbiByZXNpc3RhbmNlIG9uIGxvdyBtZW1vcnkgLSBvbmx5IHVzZSBiaWdnZXIKIAkgKiBwYWdlIG9yZGVycyBvbiBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiAzMk1CIG9mIG1lbW9yeS4KIAkgKi8KLQlpZiAobnVtX3BoeXNwYWdlcyA+ICgzMiA8PCAyMCkgPj4gUEFHRV9TSElGVCkKKwlpZiAodG90YWxyYW1fcGFnZXMgPiAoMzIgPDwgMjApID4+IFBBR0VfU0hJRlQpCiAJCXNsYWJfYnJlYWtfZ2ZwX29yZGVyID0gQlJFQUtfR0ZQX09SREVSX0hJOwogCiAJLyogQm9vdHN0cmFwIGlzIHRyaWNreSwgYmVjYXVzZSBzZXZlcmFsIG9iamVjdHMgYXJlIGFsbG9jYXRlZApkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDBhMjE2YWEuLjQ5OTZmYzcgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTMzNDUsNiArMzM0NSw5IEBACiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKKwlpZiAoV0FSTl9PTighbmFtZSkpCisJCXJldHVybiBOVUxMOworCiAJZG93bl93cml0ZSgmc2x1Yl9sb2NrKTsKIAlzID0gZmluZF9tZXJnZWFibGUoc2l6ZSwgYWxpZ24sIGZsYWdzLCBuYW1lLCBjdG9yKTsKIAlpZiAocykgewpkaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLXZtZW1tYXAuYyBiL21tL3NwYXJzZS12bWVtbWFwLmMKaW5kZXggYTEzZWE2NC4uZDk3MTRiZCAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuYworKysgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCkBAIC00OCw4ICs0OCwxNCBAQAogewogCS8qIElmIHRoZSBtYWluIGFsbG9jYXRvciBpcyB1cCB1c2UgdGhhdCwgZmFsbGJhY2sgdG8gYm9vdG1lbS4gKi8KIAlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkJaWYgKG5vZGVfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSkpCisJCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLAogCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBnZXRfb3JkZXIoc2l6ZSkpOworCQllbHNlCisJCQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sCisJCQkJZ2V0X29yZGVyKHNpemUpKTsKIAkJaWYgKHBhZ2UpCiAJCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggZGE0MzJkOS4uNmNlNGFhYiAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTYyLDkgKzYyLDEyIEBACiAJdW5zaWduZWQgbG9uZyBhcnJheV9zaXplID0gU0VDVElPTlNfUEVSX1JPT1QgKgogCQkJCSAgIHNpemVvZihzdHJ1Y3QgbWVtX3NlY3Rpb24pOwogCi0JaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpCi0JCXNlY3Rpb24gPSBrbWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwgR0ZQX0tFUk5FTCwgbmlkKTsKLQllbHNlCisJaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKKwkJaWYgKG5vZGVfc3RhdGUobmlkLCBOX0hJR0hfTUVNT1JZKSkKKwkJCXNlY3Rpb24gPSBrbWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwgR0ZQX0tFUk5FTCwgbmlkKTsKKwkJZWxzZQorCQkJc2VjdGlvbiA9IGttYWxsb2MoYXJyYXlfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJfSBlbHNlCiAJCXNlY3Rpb24gPSBhbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIGFycmF5X3NpemUpOwogCiAJaWYgKHNlY3Rpb24pCmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggY2IyOWFlNS4uMzA4ZTU3ZCAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQlzcGluX2xvY2soJnpvbmUtPmxydV9sb2NrKTsKIAkJfQogCQlpZiAoUGFnZUxSVShwYWdlKSAmJiAhUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSB7Ci0JCQlpbnQgbHJ1ID0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQkJaW50IGxydSA9IHBhZ2VfbHJ1X2Jhc2VfdHlwZShwYWdlKTsKIAkJCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbHJ1XS5saXN0KTsKIAkJCXBnbW92ZWQrKzsKIAkJfQpAQCAtMTgxLDcgKzE4MSw3IEBACiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKIAkJaW50IGZpbGUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7Ci0JCWludCBscnUgPSBMUlVfQkFTRSArIGZpbGU7CisJCWludCBscnUgPSBwYWdlX2xydV9iYXNlX3R5cGUocGFnZSk7CiAJCWRlbF9wYWdlX2Zyb21fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKIAogCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCWFkZF9wYWdlX3RvX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CiAJCV9fY291bnRfdm1fZXZlbnQoUEdBQ1RJVkFURSk7CiAKLQkJdXBkYXRlX3BhZ2VfcmVjbGFpbV9zdGF0KHpvbmUsIHBhZ2UsICEhZmlsZSwgMSk7CisJCXVwZGF0ZV9wYWdlX3JlY2xhaW1fc3RhdCh6b25lLCBwYWdlLCBmaWxlLCAxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiB9CkBAIC00OTYsNyArNDk2LDcgQEAKICAqLwogdm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbWVncyA9IG51bV9waHlzcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCk7CisJdW5zaWduZWQgbG9uZyBtZWdzID0gdG90YWxyYW1fcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCk7CiAKICNpZmRlZiBDT05GSUdfU1dBUAogCWJkaV9pbml0KHN3YXBwZXJfc3BhY2UuYmFja2luZ19kZXZfaW5mbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggNWFlNmI4Yi4uNmQxZGFlYiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCisrKyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtNjcsMTAgKzY3LDEwIEBACiB9CiAKIC8qCi0gKiBhZGRfdG9fc3dhcF9jYWNoZSByZXNlbWJsZXMgYWRkX3RvX3BhZ2VfY2FjaGVfbG9ja2VkIG9uIHN3YXBwZXJfc3BhY2UsCisgKiBfX2FkZF90b19zd2FwX2NhY2hlIHJlc2VtYmxlcyBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQgb24gc3dhcHBlcl9zcGFjZSwKICAqIGJ1dCBzZXRzIFN3YXBDYWNoZSBmbGFnIGFuZCBwcml2YXRlIGluc3RlYWQgb2YgbWFwcGluZyBhbmQgaW5kZXguCiAgKi8KLWludCBhZGRfdG9fc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGludCBfX2FkZF90b19zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnRyeSkKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTc4LDI4ICs3OCw0MyBAQAogCVZNX0JVR19PTihQYWdlU3dhcENhY2hlKHBhZ2UpKTsKIAlWTV9CVUdfT04oIVBhZ2VTd2FwQmFja2VkKHBhZ2UpKTsKIAorCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOworCVNldFBhZ2VTd2FwQ2FjaGUocGFnZSk7CisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBlbnRyeS52YWwpOworCisJc3Bpbl9sb2NrX2lycSgmc3dhcHBlcl9zcGFjZS50cmVlX2xvY2spOworCWVycm9yID0gcmFkaXhfdHJlZV9pbnNlcnQoJnN3YXBwZXJfc3BhY2UucGFnZV90cmVlLCBlbnRyeS52YWwsIHBhZ2UpOworCWlmIChsaWtlbHkoIWVycm9yKSkgeworCQl0b3RhbF9zd2FwY2FjaGVfcGFnZXMrKzsKKwkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOworCQlJTkNfQ0FDSEVfSU5GTyhhZGRfdG90YWwpOworCX0KKwlzcGluX3VubG9ja19pcnEoJnN3YXBwZXJfc3BhY2UudHJlZV9sb2NrKTsKKworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJLyoKKwkJICogT25seSB0aGUgY29udGV4dCB3aGljaCBoYXZlIHNldCBTV0FQX0hBU19DQUNIRSBmbGFnCisJCSAqIHdvdWxkIGNhbGwgYWRkX3RvX3N3YXBfY2FjaGUoKS4KKwkJICogU28gYWRkX3RvX3N3YXBfY2FjaGUoKSBkb2Vzbid0IHJldHVybnMgLUVFWElTVC4KKwkJICovCisJCVZNX0JVR19PTihlcnJvciA9PSAtRUVYSVNUKTsKKwkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwVUwpOworCQlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKworaW50IGFkZF90b19zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJaW50IGVycm9yOworCiAJZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOwogCWlmICghZXJyb3IpIHsKLQkJcGFnZV9jYWNoZV9nZXQocGFnZSk7Ci0JCVNldFBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0JCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgZW50cnkudmFsKTsKLQotCQlzcGluX2xvY2tfaXJxKCZzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayk7Ci0JCWVycm9yID0gcmFkaXhfdHJlZV9pbnNlcnQoJnN3YXBwZXJfc3BhY2UucGFnZV90cmVlLAotCQkJCQkJZW50cnkudmFsLCBwYWdlKTsKLQkJaWYgKGxpa2VseSghZXJyb3IpKSB7Ci0JCQl0b3RhbF9zd2FwY2FjaGVfcGFnZXMrKzsKLQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX1BBR0VTKTsKLQkJCUlOQ19DQUNIRV9JTkZPKGFkZF90b3RhbCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayk7CisJCWVycm9yID0gX19hZGRfdG9fc3dhcF9jYWNoZShwYWdlLCBlbnRyeSk7CiAJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKLQotCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDBVTCk7Ci0JCQlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCX0KIAl9CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTM3LDM4ICsxNTIsMzQgQEAKIAlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCVZNX0JVR19PTighUGFnZVVwdG9kYXRlKHBhZ2UpKTsKIAotCWZvciAoOzspIHsKLQkJZW50cnkgPSBnZXRfc3dhcF9wYWdlKCk7Ci0JCWlmICghZW50cnkudmFsKQotCQkJcmV0dXJuIDA7CisJZW50cnkgPSBnZXRfc3dhcF9wYWdlKCk7CisJaWYgKCFlbnRyeS52YWwpCisJCXJldHVybiAwOwogCi0JCS8qCi0JCSAqIFJhZGl4LXRyZWUgbm9kZSBhbGxvY2F0aW9ucyBmcm9tIFBGX01FTUFMTE9DIGNvbnRleHRzIGNvdWxkCi0JCSAqIGNvbXBsZXRlbHkgZXhoYXVzdCB0aGUgcGFnZSBhbGxvY2F0b3IuIF9fR0ZQX05PTUVNQUxMT0MKLQkJICogc3RvcHMgZW1lcmdlbmN5IHJlc2VydmVzIGZyb20gYmVpbmcgYWxsb2NhdGVkLgotCQkgKgotCQkgKiBUT0RPOiB0aGlzIGNvdWxkIGNhdXNlIGEgdGhlb3JldGljYWwgbWVtb3J5IHJlY2xhaW0KLQkJICogZGVhZGxvY2sgaW4gdGhlIHN3YXAgb3V0IHBhdGguCi0JCSAqLwotCQkvKgotCQkgKiBBZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYW5kIG1hcmsgaXQgZGlydHkKLQkJICovCi0JCWVyciA9IGFkZF90b19zd2FwX2NhY2hlKHBhZ2UsIGVudHJ5LAotCQkJCV9fR0ZQX0hJR0h8X19HRlBfTk9NRU1BTExPQ3xfX0dGUF9OT1dBUk4pOworCS8qCisJICogUmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb25zIGZyb20gUEZfTUVNQUxMT0MgY29udGV4dHMgY291bGQKKwkgKiBjb21wbGV0ZWx5IGV4aGF1c3QgdGhlIHBhZ2UgYWxsb2NhdG9yLiBfX0dGUF9OT01FTUFMTE9DCisJICogc3RvcHMgZW1lcmdlbmN5IHJlc2VydmVzIGZyb20gYmVpbmcgYWxsb2NhdGVkLgorCSAqCisJICogVE9ETzogdGhpcyBjb3VsZCBjYXVzZSBhIHRoZW9yZXRpY2FsIG1lbW9yeSByZWNsYWltCisJICogZGVhZGxvY2sgaW4gdGhlIHN3YXAgb3V0IHBhdGguCisJICovCisJLyoKKwkgKiBBZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYW5kIG1hcmsgaXQgZGlydHkKKwkgKi8KKwllcnIgPSBhZGRfdG9fc3dhcF9jYWNoZShwYWdlLCBlbnRyeSwKKwkJCV9fR0ZQX0hJR0h8X19HRlBfTk9NRU1BTExPQ3xfX0dGUF9OT1dBUk4pOwogCi0JCXN3aXRjaCAoZXJyKSB7Ci0JCWNhc2UgMDoJCQkJLyogU3VjY2VzcyAqLwotCQkJU2V0UGFnZURpcnR5KHBhZ2UpOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgLUVFWElTVDoKLQkJCS8qIFJhY2VkIHdpdGggInNwZWN1bGF0aXZlIiByZWFkX3N3YXBfY2FjaGVfYXN5bmMgKi8KLQkJCXN3YXBjYWNoZV9mcmVlKGVudHJ5LCBOVUxMKTsKLQkJCWNvbnRpbnVlOwotCQlkZWZhdWx0OgotCQkJLyogLUVOT01FTSByYWRpeC10cmVlIGFsbG9jYXRpb24gZmFpbHVyZSAqLwotCQkJc3dhcGNhY2hlX2ZyZWUoZW50cnksIE5VTEwpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlpZiAoIWVycikgewkvKiBTdWNjZXNzICovCisJCVNldFBhZ2VEaXJ0eShwYWdlKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsJLyogLUVOT01FTSByYWRpeC10cmVlIGFsbG9jYXRpb24gZmFpbHVyZSAqLworCQkvKgorCQkgKiBhZGRfdG9fc3dhcF9jYWNoZSgpIGRvZXNuJ3QgcmV0dXJuIC1FRVhJU1QsIHNvIHdlIGNhbiBzYWZlbHkKKwkJICogY2xlYXIgU1dBUF9IQVNfQ0FDSEUgZmxhZy4KKwkJICovCisJCXN3YXBjYWNoZV9mcmVlKGVudHJ5LCBOVUxMKTsKKwkJcmV0dXJuIDA7CiAJfQogfQogCkBAIC0yOTAsMjYgKzMwMSwzMSBAQAogCQl9CiAKIAkJLyoKLQkJICogU3dhcCBlbnRyeSBtYXkgaGF2ZSBiZWVuIGZyZWVkIHNpbmNlIG91ciBjYWxsZXIgb2JzZXJ2ZWQgaXQuCisJCSAqIGNhbGwgcmFkaXhfdHJlZV9wcmVsb2FkKCkgd2hpbGUgd2UgY2FuIHdhaXQuCiAJCSAqLwotCQllcnIgPSBzd2FwY2FjaGVfcHJlcGFyZShlbnRyeSk7Ci0JCWlmIChlcnIgPT0gLUVFWElTVCkgLyogc2VlbXMgcmFjeSAqLwotCQkJY29udGludWU7Ci0JCWlmIChlcnIpICAgICAgICAgICAvKiBzd3AgZW50cnkgaXMgb2Jzb2xldGUgPyAqLworCQllcnIgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2sgJiBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwogCiAJCS8qCi0JCSAqIEFzc29jaWF0ZSB0aGUgcGFnZSB3aXRoIHN3YXAgZW50cnkgaW4gdGhlIHN3YXAgY2FjaGUuCi0JCSAqIE1heSBmYWlsICgtRUVYSVNUKSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcGFnZSBhc3NvY2lhdGVkCi0JCSAqIHdpdGggdGhpcyBlbnRyeSBpbiB0aGUgc3dhcCBjYWNoZTogYWRkZWQgYnkgYSByYWNpbmcKLQkJICogcmVhZF9zd2FwX2NhY2hlX2FzeW5jLCBvciBhZGRfdG9fc3dhcCBvciBzaG1lbV93cml0ZXBhZ2UKLQkJICogcmUtdXNpbmcgdGhlIGp1c3QgZnJlZWQgc3dhcCBlbnRyeSBmb3IgYW4gZXhpc3RpbmcgcGFnZS4KLQkJICogTWF5IGZhaWwgKC1FTk9NRU0pIGlmIHJhZGl4LXRyZWUgbm9kZSBhbGxvY2F0aW9uIGZhaWxlZC4KKwkJICogU3dhcCBlbnRyeSBtYXkgaGF2ZSBiZWVuIGZyZWVkIHNpbmNlIG91ciBjYWxsZXIgb2JzZXJ2ZWQgaXQuCiAJCSAqLworCQllcnIgPSBzd2FwY2FjaGVfcHJlcGFyZShlbnRyeSk7CisJCWlmIChlcnIgPT0gLUVFWElTVCkgewkvKiBzZWVtcyByYWN5ICovCisJCQlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZXJyKSB7CQkvKiBzd3AgZW50cnkgaXMgb2Jzb2xldGUgPyAqLworCQkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBNYXkgZmFpbCAoLUVOT01FTSkgaWYgcmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb24gZmFpbGVkLiAqLwogCQlfX3NldF9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CiAJCVNldFBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKLQkJZXJyID0gYWRkX3RvX3N3YXBfY2FjaGUobmV3X3BhZ2UsIGVudHJ5LCBnZnBfbWFzayAmIEdGUF9LRVJORUwpOworCQllcnIgPSBfX2FkZF90b19zd2FwX2NhY2hlKG5ld19wYWdlLCBlbnRyeSk7CiAJCWlmIChsaWtlbHkoIWVycikpIHsKKwkJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKIAkJCS8qCiAJCQkgKiBJbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIHBhZ2UgYW5kIHJldHVybi4KIAkJCSAqLwpAQCAtMzE3LDggKzMzMywxMyBAQAogCQkJc3dhcF9yZWFkcGFnZShuZXdfcGFnZSk7CiAJCQlyZXR1cm4gbmV3X3BhZ2U7CiAJCX0KKwkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCQlDbGVhclBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKIAkJX19jbGVhcl9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CisJCS8qCisJCSAqIGFkZF90b19zd2FwX2NhY2hlKCkgZG9lc24ndCByZXR1cm4gLUVFWElTVCwgc28gd2UgY2FuIHNhZmVseQorCQkgKiBjbGVhciBTV0FQX0hBU19DQUNIRSBmbGFnLgorCQkgKi8KIAkJc3dhcGNhY2hlX2ZyZWUoZW50cnksIE5VTEwpOwogCX0gd2hpbGUgKGVyciAhPSAtRU5PTUVNKTsKIApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNzRmMTEwMi4uZjFiZjE5ZCAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNTc1LDkgKzE1NzUsOSBAQAogCXAtPmZsYWdzICY9IH5TV1BfV1JJVEVPSzsKIAlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NXQVBPRkY7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfT09NX09SSUdJTjsKIAllcnIgPSB0cnlfdG9fdW51c2UodHlwZSk7Ci0JY3VycmVudC0+ZmxhZ3MgJj0gflBGX1NXQVBPRkY7CisJY3VycmVudC0+ZmxhZ3MgJj0gflBGX09PTV9PUklHSU47CiAKIAlpZiAoZXJyKSB7CiAJCS8qIHJlLWluc2VydCBzd2FwIHNwYWNlIGJhY2sgaW50byBzd2FwX2xpc3QgKi8KZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAyMDRiODI0Li42OTUxMWU2IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgotCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMTY4LDExICsxNjgsOSBAQAogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWVyciA9IHZtYXBfcHVkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsICZucik7CiAJCWlmIChlcnIpCi0JCQlicmVhazsKKwkJCXJldHVybiBlcnI7CiAJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKLQlpZiAodW5saWtlbHkoZXJyKSkKLQkJcmV0dXJuIGVycjsKIAlyZXR1cm4gbnI7CiB9CiAKQEAgLTE4Niw3ICsxODQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCkKK2ludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCiB7CiAJLyoKIAkgKiBBUk0sIHg4Ni02NCBhbmQgc3BhcmM2NCBwdXQgbW9kdWxlcyBpbiBhIHNwZWNpYWwgcGxhY2UsCkBAIC0xMjcyLDE3ICsxMjcwLDIxIEBACiAJaWYgKHZhICYmIHZhLT5mbGFncyAmIFZNX1ZNX0FSRUEpIHsKIAkJc3RydWN0IHZtX3N0cnVjdCAqdm0gPSB2YS0+cHJpdmF0ZTsKIAkJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7Ci0KLQkJdm1hcF9kZWJ1Z19mcmVlX3JhbmdlKHZhLT52YV9zdGFydCwgdmEtPnZhX2VuZCk7Ci0JCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKLQkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOwotCisJCS8qCisJCSAqIHJlbW92ZSBmcm9tIGxpc3QgYW5kIGRpc2FsbG93IGFjY2VzcyB0byB0aGlzIHZtX3N0cnVjdAorCQkgKiBiZWZvcmUgdW5tYXAuIChhZGRyZXNzIHJhbmdlIGNvbmZsaWN0aW9uIGlzIG1haW50YWluZWQgYnkKKwkJICogdm1hcC4pCisJCSAqLwogCQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7CiAJCWZvciAocCA9ICZ2bWxpc3Q7ICh0bXAgPSAqcCkgIT0gdm07IHAgPSAmdG1wLT5uZXh0KQogCQkJOwogCQkqcCA9IHRtcC0+bmV4dDsKIAkJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CiAKKwkJdm1hcF9kZWJ1Z19mcmVlX3JhbmdlKHZhLT52YV9zdGFydCwgdmEtPnZhX2VuZCk7CisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOworCiAJCXJldHVybiB2bTsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0xMzg0LDcgKzEzODYsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWlmIChjb3VudCA+IG51bV9waHlzcGFnZXMpCisJaWYgKGNvdW50ID4gdG90YWxyYW1fcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCiAJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcigoY291bnQgPDwgUEFHRV9TSElGVCksIGZsYWdzLApAQCAtMTQ5MSw3ICsxNDkzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlYWxfc2l6ZSA9IHNpemU7CiAKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQlpZiAoIXNpemUgfHwgKHNpemUgPj4gUEFHRV9TSElGVCkgPiBudW1fcGh5c3BhZ2VzKQorCWlmICghc2l6ZSB8fCAoc2l6ZSA+PiBQQUdFX1NISUZUKSA+IHRvdGFscmFtX3BhZ2VzKQogCQlyZXR1cm4gTlVMTDsKIAogCWFyZWEgPSBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgVk1fQUxMT0MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELApAQCAtMTY0MSwxMCArMTY0MywxMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY18zMl91c2VyKTsKIAorLyoKKyAqIHNtYWxsIGhlbHBlciByb3V0aW5lICwgY29weSBjb250ZW50cyB0byBidWYgZnJvbSBhZGRyLgorICogSWYgdGhlIHBhZ2UgaXMgbm90IHByZXNlbnQsIGZpbGwgemVyby4KKyAqLworCitzdGF0aWMgaW50IGFsaWduZWRfdnJlYWQoY2hhciAqYnVmLCBjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXN0cnVjdCBwYWdlICpwOworCWludCBjb3BpZWQgPSAwOworCisJd2hpbGUgKGNvdW50KSB7CisJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsZW5ndGg7CisKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpYWRkciAmIH5QQUdFX01BU0s7CisJCWxlbmd0aCA9IFBBR0VfU0laRSAtIG9mZnNldDsKKwkJaWYgKGxlbmd0aCA+IGNvdW50KQorCQkJbGVuZ3RoID0gY291bnQ7CisJCXAgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisJCS8qCisJCSAqIFRvIGRvIHNhZmUgYWNjZXNzIHRvIHRoaXMgX21hcHBlZF8gYXJlYSwgd2UgbmVlZAorCQkgKiBsb2NrLiBCdXQgYWRkaW5nIGxvY2sgaGVyZSBtZWFucyB0aGF0IHdlIG5lZWQgdG8gYWRkCisJCSAqIG92ZXJoZWFkIG9mIHZtYWxsb2MoKS92ZnJlZSgpIGNhbGxlcyBmb3IgdGhpcyBfZGVidWdfCisJCSAqIGludGVyZmFjZSwgcmFyZWx5IHVzZWQuIEluc3RlYWQgb2YgdGhhdCwgd2UnbGwgdXNlCisJCSAqIGttYXAoKSBhbmQgZ2V0IHNtYWxsIG92ZXJoZWFkIGluIHRoaXMgYWNjZXNzIGZ1bmN0aW9uLgorCQkgKi8KKwkJaWYgKHApIHsKKwkJCS8qCisJCQkgKiB3ZSBjYW4gZXhwZWN0IFVTRVIwIGlzIG5vdCB1c2VkIChzZWUgdnJlYWQvdndyaXRlJ3MKKwkJCSAqIGZ1bmN0aW9uIGRlc2NyaXB0aW9uKQorCQkJICovCisJCQl2b2lkICptYXAgPSBrbWFwX2F0b21pYyhwLCBLTV9VU0VSMCk7CisJCQltZW1jcHkoYnVmLCBtYXAgKyBvZmZzZXQsIGxlbmd0aCk7CisJCQlrdW5tYXBfYXRvbWljKG1hcCwgS01fVVNFUjApOworCQl9IGVsc2UKKwkJCW1lbXNldChidWYsIDAsIGxlbmd0aCk7CisKKwkJYWRkciArPSBsZW5ndGg7CisJCWJ1ZiArPSBsZW5ndGg7CisJCWNvcGllZCArPSBsZW5ndGg7CisJCWNvdW50IC09IGxlbmd0aDsKKwl9CisJcmV0dXJuIGNvcGllZDsKK30KKworc3RhdGljIGludCBhbGlnbmVkX3Z3cml0ZShjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJc3RydWN0IHBhZ2UgKnA7CisJaW50IGNvcGllZCA9IDA7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxlbmd0aDsKKworCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylhZGRyICYgflBBR0VfTUFTSzsKKwkJbGVuZ3RoID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCQlpZiAobGVuZ3RoID4gY291bnQpCisJCQlsZW5ndGggPSBjb3VudDsKKwkJcCA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKwkJLyoKKwkJICogVG8gZG8gc2FmZSBhY2Nlc3MgdG8gdGhpcyBfbWFwcGVkXyBhcmVhLCB3ZSBuZWVkCisJCSAqIGxvY2suIEJ1dCBhZGRpbmcgbG9jayBoZXJlIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBhZGQKKwkJICogb3ZlcmhlYWQgb2Ygdm1hbGxvYygpL3ZmcmVlKCkgY2FsbGVzIGZvciB0aGlzIF9kZWJ1Z18KKwkJICogaW50ZXJmYWNlLCByYXJlbHkgdXNlZC4gSW5zdGVhZCBvZiB0aGF0LCB3ZSdsbCB1c2UKKwkJICoga21hcCgpIGFuZCBnZXQgc21hbGwgb3ZlcmhlYWQgaW4gdGhpcyBhY2Nlc3MgZnVuY3Rpb24uCisJCSAqLworCQlpZiAocCkgeworCQkJLyoKKwkJCSAqIHdlIGNhbiBleHBlY3QgVVNFUjAgaXMgbm90IHVzZWQgKHNlZSB2cmVhZC92d3JpdGUncworCQkJICogZnVuY3Rpb24gZGVzY3JpcHRpb24pCisJCQkgKi8KKwkJCXZvaWQgKm1hcCA9IGttYXBfYXRvbWljKHAsIEtNX1VTRVIwKTsKKwkJCW1lbWNweShtYXAgKyBvZmZzZXQsIGJ1ZiwgbGVuZ3RoKTsKKwkJCWt1bm1hcF9hdG9taWMobWFwLCBLTV9VU0VSMCk7CisJCX0KKwkJYWRkciArPSBsZW5ndGg7CisJCWJ1ZiArPSBsZW5ndGg7CisJCWNvcGllZCArPSBsZW5ndGg7CisJCWNvdW50IC09IGxlbmd0aDsKKwl9CisJcmV0dXJuIGNvcGllZDsKK30KKworLyoqCisgKgl2cmVhZCgpIC0gIHJlYWQgdm1hbGxvYyBhcmVhIGluIGEgc2FmZSB3YXkuCisgKglAYnVmOgkJYnVmZmVyIGZvciByZWFkaW5nIGRhdGEKKyAqCUBhZGRyOgkJdm0gYWRkcmVzcy4KKyAqCUBjb3VudDoJCW51bWJlciBvZiBieXRlcyB0byBiZSByZWFkLgorICoKKyAqCVJldHVybnMgIyBvZiBieXRlcyB3aGljaCBhZGRyIGFuZCBidWYgc2hvdWxkIGJlIGluY3JlYXNlZC4KKyAqCShzYW1lIG51bWJlciB0byBAY291bnQpLiBSZXR1cm5zIDAgaWYgW2FkZHIuLi5hZGRyK2NvdW50KSBkb2Vzbid0CisgKglpbmNsdWRlcyBhbnkgaW50ZXJzZWN0IHdpdGggYWxpdmUgdm1hbGxvYyBhcmVhLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgYWRkciBpcyBhIHZhbGlkIHZtYWxsb2MnZWQgYXJlYSwgYW5kCisgKgljb3B5IGRhdGEgZnJvbSB0aGF0IGFyZWEgdG8gYSBnaXZlbiBidWZmZXIuIElmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2UKKyAqCW9mIFthZGRyLi4uYWRkcitjb3VudCkgaW5jbHVkZXMgc29tZSB2YWxpZCBhZGRyZXNzLCBkYXRhIGlzIGNvcGllZCB0bworICoJcHJvcGVyIGFyZWEgb2YgQGJ1Zi4gSWYgdGhlcmUgYXJlIG1lbW9yeSBob2xlcywgdGhleSdsbCBiZSB6ZXJvLWZpbGxlZC4KKyAqCUlPUkVNQVAgYXJlYSBpcyB0cmVhdGVkIGFzIG1lbW9yeSBob2xlIGFuZCBubyBjb3B5IGlzIGRvbmUuCisgKgorICoJSWYgW2FkZHIuLi5hZGRyK2NvdW50KSBkb2Vzbid0IGluY2x1ZGVzIGFueSBpbnRlcnNlY3RzIHdpdGggYWxpdmUKKyAqCXZtX3N0cnVjdCBhcmVhLCByZXR1cm5zIDAuCisgKglAYnVmIHNob3VsZCBiZSBrZXJuZWwncyBidWZmZXIuIEJlY2F1c2UJdGhpcyBmdW5jdGlvbiB1c2VzIEtNX1VTRVIwLAorICoJdGhlIGNhbGxlciBzaG91bGQgZ3VhcmFudGVlIEtNX1VTRVIwIGlzIG5vdCB1c2VkLgorICoKKyAqCU5vdGU6IEluIHVzdWFsIG9wcywgdnJlYWQoKSBpcyBuZXZlciBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgY2FsbGVyCisgKglzaG91bGQga25vdyB2bWFsbG9jKCkgYXJlYSBpcyB2YWxpZCBhbmQgY2FuIHVzZSBtZW1jcHkoKS4KKyAqCVRoaXMgaXMgZm9yIHJvdXRpbmVzIHdoaWNoIGhhdmUgdG8gYWNjZXNzIHZtYWxsb2MgYXJlYSB3aXRob3V0CisgKglhbnkgaW5mb3JtYWlvbiwgYXMgL2Rldi9rbWVtLgorICoKKyAqLworCiBsb25nIHZyZWFkKGNoYXIgKmJ1ZiwgY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICp0bXA7CiAJY2hhciAqdmFkZHIsICpidWZfc3RhcnQgPSBidWY7CisJdW5zaWduZWQgbG9uZyBidWZsZW4gPSBjb3VudDsKIAl1bnNpZ25lZCBsb25nIG47CiAKIAkvKiBEb24ndCBhbGxvdyBvdmVyZmxvdyAqLwpAQCAtMTY1Miw3ICsxNzY0LDcgQEAKIAkJY291bnQgPSAtKHVuc2lnbmVkIGxvbmcpIGFkZHI7CiAKIAlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKKwlmb3IgKHRtcCA9IHZtbGlzdDsgY291bnQgJiYgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKIAkJdmFkZHIgPSAoY2hhciAqKSB0bXAtPmFkZHI7CiAJCWlmIChhZGRyID49IHZhZGRyICsgdG1wLT5zaXplIC0gUEFHRV9TSVpFKQogCQkJY29udGludWU7CkBAIC0xNjY1LDMyICsxNzc3LDcyIEBACiAJCQljb3VudC0tOwogCQl9CiAJCW4gPSB2YWRkciArIHRtcC0+c2l6ZSAtIFBBR0VfU0laRSAtIGFkZHI7Ci0JCWRvIHsKLQkJCWlmIChjb3VudCA9PSAwKQotCQkJCWdvdG8gZmluaXNoZWQ7Ci0JCQkqYnVmID0gKmFkZHI7Ci0JCQlidWYrKzsKLQkJCWFkZHIrKzsKLQkJCWNvdW50LS07Ci0JCX0gd2hpbGUgKC0tbiA+IDApOworCQlpZiAobiA+IGNvdW50KQorCQkJbiA9IGNvdW50OworCQlpZiAoISh0bXAtPmZsYWdzICYgVk1fSU9SRU1BUCkpCisJCQlhbGlnbmVkX3ZyZWFkKGJ1ZiwgYWRkciwgbik7CisJCWVsc2UgLyogSU9SRU1BUCBhcmVhIGlzIHRyZWF0ZWQgYXMgbWVtb3J5IGhvbGUgKi8KKwkJCW1lbXNldChidWYsIDAsIG4pOworCQlidWYgKz0gbjsKKwkJYWRkciArPSBuOworCQljb3VudCAtPSBuOwogCX0KIGZpbmlzaGVkOgogCXJlYWRfdW5sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JcmV0dXJuIGJ1ZiAtIGJ1Zl9zdGFydDsKKworCWlmIChidWYgPT0gYnVmX3N0YXJ0KQorCQlyZXR1cm4gMDsKKwkvKiB6ZXJvLWZpbGwgbWVtb3J5IGhvbGVzICovCisJaWYgKGJ1ZiAhPSBidWZfc3RhcnQgKyBidWZsZW4pCisJCW1lbXNldChidWYsIDAsIGJ1ZmxlbiAtIChidWYgLSBidWZfc3RhcnQpKTsKKworCXJldHVybiBidWZsZW47CiB9CiAKKy8qKgorICoJdndyaXRlKCkgLSAgd3JpdGUgdm1hbGxvYyBhcmVhIGluIGEgc2FmZSB3YXkuCisgKglAYnVmOgkJYnVmZmVyIGZvciBzb3VyY2UgZGF0YQorICoJQGFkZHI6CQl2bSBhZGRyZXNzLgorICoJQGNvdW50OgkJbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlYWQuCisgKgorICoJUmV0dXJucyAjIG9mIGJ5dGVzIHdoaWNoIGFkZHIgYW5kIGJ1ZiBzaG91bGQgYmUgaW5jcmVzZWQuCisgKgkoc2FtZSBudW1iZXIgdG8gQGNvdW50KS4KKyAqCUlmIFthZGRyLi4uYWRkcitjb3VudCkgZG9lc24ndCBpbmNsdWRlcyBhbnkgaW50ZXJzZWN0IHdpdGggdmFsaWQKKyAqCXZtYWxsb2MgYXJlYSwgcmV0dXJucyAwLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgYWRkciBpcyBhIHZhbGlkIHZtYWxsb2MnZWQgYXJlYSwgYW5kCisgKgljb3B5IGRhdGEgZnJvbSBhIGJ1ZmZlciB0byB0aGUgZ2l2ZW4gYWRkci4gSWYgc3BlY2lmaWVkIHJhbmdlIG9mCisgKglbYWRkci4uLmFkZHIrY291bnQpIGluY2x1ZGVzIHNvbWUgdmFsaWQgYWRkcmVzcywgZGF0YSBpcyBjb3BpZWQgZnJvbQorICoJcHJvcGVyIGFyZWEgb2YgQGJ1Zi4gSWYgdGhlcmUgYXJlIG1lbW9yeSBob2xlcywgbm8gY29weSB0byBob2xlLgorICoJSU9SRU1BUCBhcmVhIGlzIHRyZWF0ZWQgYXMgbWVtb3J5IGhvbGUgYW5kIG5vIGNvcHkgaXMgZG9uZS4KKyAqCisgKglJZiBbYWRkci4uLmFkZHIrY291bnQpIGRvZXNuJ3QgaW5jbHVkZXMgYW55IGludGVyc2VjdHMgd2l0aCBhbGl2ZQorICoJdm1fc3RydWN0IGFyZWEsIHJldHVybnMgMC4KKyAqCUBidWYgc2hvdWxkIGJlIGtlcm5lbCdzIGJ1ZmZlci4gQmVjYXVzZQl0aGlzIGZ1bmN0aW9uIHVzZXMgS01fVVNFUjAsCisgKgl0aGUgY2FsbGVyIHNob3VsZCBndWFyYW50ZWUgS01fVVNFUjAgaXMgbm90IHVzZWQuCisgKgorICoJTm90ZTogSW4gdXN1YWwgb3BzLCB2d3JpdGUoKSBpcyBuZXZlciBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgY2FsbGVyCisgKglzaG91bGQga25vdyB2bWFsbG9jKCkgYXJlYSBpcyB2YWxpZCBhbmQgY2FuIHVzZSBtZW1jcHkoKS4KKyAqCVRoaXMgaXMgZm9yIHJvdXRpbmVzIHdoaWNoIGhhdmUgdG8gYWNjZXNzIHZtYWxsb2MgYXJlYSB3aXRob3V0CisgKglhbnkgaW5mb3JtYWlvbiwgYXMgL2Rldi9rbWVtLgorICoKKyAqCVRoZSBjYWxsZXIgc2hvdWxkIGd1YXJhbnRlZSBLTV9VU0VSMSBpcyBub3QgdXNlZC4KKyAqLworCiBsb25nIHZ3cml0ZShjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqdG1wOwotCWNoYXIgKnZhZGRyLCAqYnVmX3N0YXJ0ID0gYnVmOwotCXVuc2lnbmVkIGxvbmcgbjsKKwljaGFyICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIG4sIGJ1ZmxlbjsKKwlpbnQgY29waWVkID0gMDsKIAogCS8qIERvbid0IGFsbG93IG92ZXJmbG93ICovCiAJaWYgKCh1bnNpZ25lZCBsb25nKSBhZGRyICsgY291bnQgPCBjb3VudCkKIAkJY291bnQgPSAtKHVuc2lnbmVkIGxvbmcpIGFkZHI7CisJYnVmbGVuID0gY291bnQ7CiAKIAlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKKwlmb3IgKHRtcCA9IHZtbGlzdDsgY291bnQgJiYgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKIAkJdmFkZHIgPSAoY2hhciAqKSB0bXAtPmFkZHI7CiAJCWlmIChhZGRyID49IHZhZGRyICsgdG1wLT5zaXplIC0gUEFHRV9TSVpFKQogCQkJY29udGludWU7CkBAIC0xNzAyLDE4ICsxODU0LDIxIEBACiAJCQljb3VudC0tOwogCQl9CiAJCW4gPSB2YWRkciArIHRtcC0+c2l6ZSAtIFBBR0VfU0laRSAtIGFkZHI7Ci0JCWRvIHsKLQkJCWlmIChjb3VudCA9PSAwKQotCQkJCWdvdG8gZmluaXNoZWQ7Ci0JCQkqYWRkciA9ICpidWY7Ci0JCQlidWYrKzsKLQkJCWFkZHIrKzsKLQkJCWNvdW50LS07Ci0JCX0gd2hpbGUgKC0tbiA+IDApOworCQlpZiAobiA+IGNvdW50KQorCQkJbiA9IGNvdW50OworCQlpZiAoISh0bXAtPmZsYWdzICYgVk1fSU9SRU1BUCkpIHsKKwkJCWFsaWduZWRfdndyaXRlKGJ1ZiwgYWRkciwgbik7CisJCQljb3BpZWQrKzsKKwkJfQorCQlidWYgKz0gbjsKKwkJYWRkciArPSBuOworCQljb3VudCAtPSBuOwogCX0KIGZpbmlzaGVkOgogCXJlYWRfdW5sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JcmV0dXJuIGJ1ZiAtIGJ1Zl9zdGFydDsKKwlpZiAoIWNvcGllZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGJ1ZmxlbjsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJhODIyOGUuLjYxM2U4OWYgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xNDgsOCArMTQ4LDggQEAKIAlyZXR1cm4gJnpvbmUtPnJlY2xhaW1fc3RhdDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgem9uZV9ucl9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCi0JCQkJICAgZW51bSBscnVfbGlzdCBscnUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyB6b25lX25yX2xydV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKKwkJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgZW51bSBscnVfbGlzdCBscnUpCiB7CiAJaWYgKCFzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkKIAkJcmV0dXJuIG1lbV9jZ3JvdXBfem9uZV9ucl9wYWdlcyhzYy0+bWVtX2Nncm91cCwgem9uZSwgbHJ1KTsKQEAgLTI4Niw3ICsyODYsMTIgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gcGFnZV9jb3VudChwYWdlKSAtICEhcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSA9PSAyOworCS8qCisJICogQSBmcmVlYWJsZSBwYWdlIGNhY2hlIHBhZ2UgaXMgcmVmZXJlbmNlZCBvbmx5IGJ5IHRoZSBjYWxsZXIKKwkgKiB0aGF0IGlzb2xhdGVkIHRoZSBwYWdlLCB0aGUgcGFnZSBjYWNoZSByYWRpeCB0cmVlIGFuZAorCSAqIG9wdGlvbmFsIGJ1ZmZlciBoZWFkcyBhdCBwYWdlLT5wcml2YXRlLgorCSAqLworCXJldHVybiBwYWdlX2NvdW50KHBhZ2UpIC0gcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSA9PSAyOwogfQogCiBzdGF0aWMgaW50IG1heV93cml0ZV90b19xdWV1ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQpAQCAtMzYxLDcgKzM2Niw2IEBACiAJICogYmxvY2ssIGZvciBzb21lIHRocm90dGxpbmcuIFRoaXMgaGFwcGVucyBieSBhY2NpZGVudCwgYmVjYXVzZQogCSAqIHN3YXBfYmFja2luZ19kZXZfaW5mbyBpcyBidXN0OiBpdCBkb2Vzbid0IHJlZmxlY3QgdGhlCiAJICogY29uZ2VzdGlvbiBzdGF0ZSBvZiB0aGUgc3dhcGRldnMuICBFYXN5IHRvIGZpeCwgaWYgbmVlZGVkLgotCSAqIFNlZSBzd2FwZmlsZS5jOnBhZ2VfcXVldWVfY29uZ2VzdGVkKCkuCiAJICovCiAJaWYgKCFpc19wYWdlX2NhY2hlX2ZyZWVhYmxlKHBhZ2UpKQogCQlyZXR1cm4gUEFHRV9LRUVQOwpAQCAtNTMxLDcgKzUzNSw3IEBACiAJCSAqIHVuZXZpY3RhYmxlIHBhZ2Ugb24gW2luXWFjdGl2ZSBsaXN0LgogCQkgKiBXZSBrbm93IGhvdyB0byBoYW5kbGUgdGhhdC4KIAkJICovCi0JCWxydSA9IGFjdGl2ZSArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJbHJ1ID0gYWN0aXZlICsgcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlscnVfY2FjaGVfYWRkX2xydShwYWdlLCBscnUpOwogCX0gZWxzZSB7CiAJCS8qCkBAIC04MjEsNyArODI1LDcgQEAKIAlpZiAobW9kZSAhPSBJU09MQVRFX0JPVEggJiYgKCFQYWdlQWN0aXZlKHBhZ2UpICE9ICFtb2RlKSkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChtb2RlICE9IElTT0xBVEVfQk9USCAmJiAoIXBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSAhPSAhZmlsZSkpCisJaWYgKG1vZGUgIT0gSVNPTEFURV9CT1RIICYmIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSAhPSBmaWxlKQogCQlyZXR1cm4gcmV0OwogCiAJLyoKQEAgLTkzNSw2ICs5MzksMTYgQEAKIAkJCS8qIENoZWNrIHRoYXQgd2UgaGF2ZSBub3QgY3Jvc3NlZCBhIHpvbmUgYm91bmRhcnkuICovCiAJCQlpZiAodW5saWtlbHkocGFnZV96b25lX2lkKGN1cnNvcl9wYWdlKSAhPSB6b25lX2lkKSkKIAkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGRvbid0IGhhdmUgZW5vdWdoIHN3YXAgc3BhY2UsIHJlY2xhaW1pbmcgb2YKKwkJCSAqIGFub24gcGFnZSB3aGljaCBkb24ndCBhbHJlYWR5IGhhdmUgYSBzd2FwIHNsb3QgaXMKKwkJCSAqIHBvaW50bGVzcy4KKwkJCSAqLworCQkJaWYgKG5yX3N3YXBfcGFnZXMgPD0gMCAmJiBQYWdlQW5vbihjdXJzb3JfcGFnZSkgJiYKKwkJCQkJIVBhZ2VTd2FwQ2FjaGUoY3Vyc29yX3BhZ2UpKQorCQkJCWNvbnRpbnVlOworCiAJCQlpZiAoX19pc29sYXRlX2xydV9wYWdlKGN1cnNvcl9wYWdlLCBtb2RlLCBmaWxlKSA9PSAwKSB7CiAJCQkJbGlzdF9tb3ZlKCZjdXJzb3JfcGFnZS0+bHJ1LCBkc3QpOwogCQkJCW1lbV9jZ3JvdXBfZGVsX2xydShjdXJzb3JfcGFnZSk7CkBAIC05NjEsNyArOTc1LDcgQEAKIAlpZiAoZmlsZSkKIAkJbHJ1ICs9IExSVV9GSUxFOwogCXJldHVybiBpc29sYXRlX2xydV9wYWdlcyhuciwgJnotPmxydVtscnVdLmxpc3QsIGRzdCwgc2Nhbm5lZCwgb3JkZXIsCi0JCQkJCQkJCW1vZGUsICEhZmlsZSk7CisJCQkJCQkJCW1vZGUsIGZpbGUpOwogfQogCiAvKgpAQCAtOTc2LDcgKzk5MCw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBhZ2VfbGlzdCwgbHJ1KSB7Ci0JCWxydSA9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJbHJ1ID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewogCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CiAJCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CkBAIC0xMDM0LDYgKzEwNDgsMzEgQEAKIH0KIAogLyoKKyAqIEFyZSB0aGVyZSB3YXkgdG9vIG1hbnkgcHJvY2Vzc2VzIGluIHRoZSBkaXJlY3QgcmVjbGFpbSBwYXRoIGFscmVhZHk/CisgKi8KK3N0YXRpYyBpbnQgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBmaWxlLAorCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKK3sKKwl1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDsKKworCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQlyZXR1cm4gMDsKKworCWlmICghc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpCisJCXJldHVybiAwOworCisJaWYgKGZpbGUpIHsKKwkJaW5hY3RpdmUgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSk7CisJCWlzb2xhdGVkID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0ZJTEUpOworCX0gZWxzZSB7CisJCWluYWN0aXZlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pOworCQlpc29sYXRlZCA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OKTsKKwl9CisKKwlyZXR1cm4gaXNvbGF0ZWQgPiBpbmFjdGl2ZTsKK30KKworLyoKICAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua196b25lKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXIKICAqIG9mIHJlY2xhaW1lZCBwYWdlcwogICovCkBAIC0xMDQ4LDYgKzEwODcsMTQgQEAKIAlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOwogCWludCBsdW1weV9yZWNsYWltID0gMDsKIAorCXdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZCh6b25lLCBmaWxlLCBzYykpKSB7CisJCWNvbmdlc3Rpb25fd2FpdChXUklURSwgSFovMTApOworCisJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KKwkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CisJfQorCiAJLyoKIAkgKiBJZiB3ZSBuZWVkIGEgbGFyZ2UgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnksIG9yIGhhdmUKIAkgKiB0cm91YmxlIGdldHRpbmcgYSBzbWFsbCBzZXQgb2YgY29udGlndW91cyBwYWdlcywgd2UKQEAgLTEwNzIsMTAgKzExMTksMjYgQEAKIAkJdW5zaWduZWQgbG9uZyBucl9hY3RpdmU7CiAJCXVuc2lnbmVkIGludCBjb3VudFtOUl9MUlVfTElTVFNdID0geyAwLCB9OwogCQlpbnQgbW9kZSA9IGx1bXB5X3JlY2xhaW0gPyBJU09MQVRFX0JPVEggOiBJU09MQVRFX0lOQUNUSVZFOworCQl1bnNpZ25lZCBsb25nIG5yX2Fub247CisJCXVuc2lnbmVkIGxvbmcgbnJfZmlsZTsKIAogCQlucl90YWtlbiA9IHNjLT5pc29sYXRlX3BhZ2VzKHNjLT5zd2FwX2NsdXN0ZXJfbWF4LAogCQkJICAgICAmcGFnZV9saXN0LCAmbnJfc2Nhbiwgc2MtPm9yZGVyLCBtb2RlLAogCQkJCXpvbmUsIHNjLT5tZW1fY2dyb3VwLCAwLCBmaWxlKTsKKworCQlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpIHsKKwkJCXpvbmUtPnBhZ2VzX3NjYW5uZWQgKz0gbnJfc2NhbjsKKwkJCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQkJCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdTQ0FOX0tTV0FQRCwgem9uZSwKKwkJCQkJCSAgICAgICBucl9zY2FuKTsKKwkJCWVsc2UKKwkJCQlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU0NBTl9ESVJFQ1QsIHpvbmUsCisJCQkJCQkgICAgICAgbnJfc2Nhbik7CisJCX0KKworCQlpZiAobnJfdGFrZW4gPT0gMCkKKwkJCWdvdG8gZG9uZTsKKwogCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCwgY291bnQpOwogCQlfX2NvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7CiAKQEAgLTEwODgsOCArMTE1MSwxMCBAQAogCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTiwKIAkJCQkJCS1jb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl0pOwogCi0JCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkKLQkJCXpvbmUtPnBhZ2VzX3NjYW5uZWQgKz0gbnJfc2NhbjsKKwkJbnJfYW5vbiA9IGNvdW50W0xSVV9BQ1RJVkVfQU5PTl0gKyBjb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl07CisJCW5yX2ZpbGUgPSBjb3VudFtMUlVfQUNUSVZFX0ZJTEVdICsgY291bnRbTFJVX0lOQUNUSVZFX0ZJTEVdOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSVNPTEFURURfQU5PTiwgbnJfYW5vbik7CisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9GSUxFLCBucl9maWxlKTsKIAogCQlyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzBdICs9IGNvdW50W0xSVV9JTkFDVElWRV9BTk9OXTsKIAkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFswXSArPSBjb3VudFtMUlVfQUNUSVZFX0FOT05dOwpAQCAtMTEyMywxOCArMTE4OCwxMiBAQAogCQl9CiAKIAkJbnJfcmVjbGFpbWVkICs9IG5yX2ZyZWVkOworCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7Ci0JCQlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU0NBTl9LU1dBUEQsIHpvbmUsIG5yX3NjYW4pOworCQlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkKIAkJCV9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9TVEVBTCwgbnJfZnJlZWQpOwotCQl9IGVsc2UgaWYgKHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQotCQkJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1NDQU5fRElSRUNULCB6b25lLCBucl9zY2FuKTsKLQogCQlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU1RFQUwsIHpvbmUsIG5yX2ZyZWVkKTsKIAotCQlpZiAobnJfdGFrZW4gPT0gMCkKLQkJCWdvdG8gZG9uZTsKLQogCQlzcGluX2xvY2soJnpvbmUtPmxydV9sb2NrKTsKIAkJLyoKIAkJICogUHV0IGJhY2sgYW55IHVuZnJlZWFibGUgcGFnZXMuCkBAIC0xMTUzLDggKzEyMTIsOCBAQAogCQkJU2V0UGFnZUxSVShwYWdlKTsKIAkJCWxydSA9IHBhZ2VfbHJ1KHBhZ2UpOwogCQkJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKLQkJCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCQkJaW50IGZpbGUgPSAhIXBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJCWlmIChpc19hY3RpdmVfbHJ1KGxydSkpIHsKKwkJCQlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CiAJCQkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfcm90YXRlZFtmaWxlXSsrOwogCQkJfQogCQkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKQEAgLTExNjMsMTAgKzEyMjIsMTMgQEAKIAkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCQl9CiAJCX0KKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0FOT04sIC1ucl9hbm9uKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0ZJTEUsIC1ucl9maWxlKTsKKwogICAJfSB3aGlsZSAobnJfc2Nhbm5lZCA8IG1heF9zY2FuKTsKLQlzcGluX3VubG9jaygmem9uZS0+bHJ1X2xvY2spOworCiBkb25lOgotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwogCXJldHVybiBucl9yZWNsYWltZWQ7CiB9CkBAIC0xMjE1LDE1ICsxMjc3LDEwIEBACiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKIAkJcGFnZSA9IGxydV90b19wYWdlKGxpc3QpOwotCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCBsaXN0LCBmbGFncyk7CiAKIAkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwogCQlTZXRQYWdlTFJVKHBhZ2UpOwogCi0JCVZNX0JVR19PTighUGFnZUFjdGl2ZShwYWdlKSk7Ci0JCWlmICghaXNfYWN0aXZlX2xydShscnUpKQotCQkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwkvKiB3ZSBhcmUgZGUtYWN0aXZhdGluZyAqLwotCiAJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xydV0ubGlzdCk7CiAJCW1lbV9jZ3JvdXBfYWRkX2xydV9saXN0KHBhZ2UsIGxydSk7CiAJCXBnbW92ZWQrKzsKQEAgLTEyNDQsNyArMTMwMSw3IEBACiBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHpvbmUgKnpvbmUsCiAJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHByaW9yaXR5LCBpbnQgZmlsZSkKIHsKLQl1bnNpZ25lZCBsb25nIHBnbW92ZWQ7CisJdW5zaWduZWQgbG9uZyBucl90YWtlbjsKIAl1bnNpZ25lZCBsb25nIHBnc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIHZtX2ZsYWdzOwogCUxJU1RfSEVBRChsX2hvbGQpOwkvKiBUaGUgcGFnZXMgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwpAQCAtMTI1MiwxMCArMTMwOSwxMSBAQAogCUxJU1RfSEVBRChsX2luYWN0aXZlKTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOworCXVuc2lnbmVkIGxvbmcgbnJfcm90YXRlZCA9IDA7CiAKIAlscnVfYWRkX2RyYWluKCk7CiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCXBnbW92ZWQgPSBzYy0+aXNvbGF0ZV9wYWdlcyhucl9wYWdlcywgJmxfaG9sZCwgJnBnc2Nhbm5lZCwgc2MtPm9yZGVyLAorCW5yX3Rha2VuID0gc2MtPmlzb2xhdGVfcGFnZXMobnJfcGFnZXMsICZsX2hvbGQsICZwZ3NjYW5uZWQsIHNjLT5vcmRlciwKIAkJCQkJSVNPTEFURV9BQ1RJVkUsIHpvbmUsCiAJCQkJCXNjLT5tZW1fY2dyb3VwLCAxLCBmaWxlKTsKIAkvKgpAQCAtMTI2NSwxNiArMTMyMywxNiBAQAogCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkgewogCQl6b25lLT5wYWdlc19zY2FubmVkICs9IHBnc2Nhbm5lZDsKIAl9Ci0JcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFshIWZpbGVdICs9IHBnbW92ZWQ7CisJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFtmaWxlXSArPSBucl90YWtlbjsKIAogCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdSRUZJTEwsIHpvbmUsIHBnc2Nhbm5lZCk7CiAJaWYgKGZpbGUpCi0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSwgLXBnbW92ZWQpOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUsIC1ucl90YWtlbik7CiAJZWxzZQotCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04sIC1wZ21vdmVkKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OLCAtbnJfdGFrZW4pOworCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgbnJfdGFrZW4pOwogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCi0JcGdtb3ZlZCA9IDA7ICAvKiBjb3VudCByZWZlcmVuY2VkIChtYXBwaW5nKSBtYXBwZWQgcGFnZXMgKi8KIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfaG9sZCkpIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9ob2xkKTsKQEAgLTEyODgsNyArMTM0Niw3IEBACiAJCS8qIHBhZ2VfcmVmZXJlbmNlZCBjbGVhcnMgUGFnZVJlZmVyZW5jZWQgKi8KIAkJaWYgKHBhZ2VfbWFwcGluZ19pbnVzZShwYWdlKSAmJgogCQkgICAgcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwLCAmdm1fZmxhZ3MpKSB7Ci0JCQlwZ21vdmVkKys7CisJCQlucl9yb3RhdGVkKys7CiAJCQkvKgogCQkJICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIHBhZ2VzIGFuZAogCQkJICogZ2l2ZSB0aGVtIG9uZSBtb3JlIHRyaXAgYXJvdW5kIHRoZSBhY3RpdmUgbGlzdC4gU28KQEAgLTEzMDQsNiArMTM2Miw3IEBACiAJCQl9CiAJCX0KIAorCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CS8qIHdlIGFyZSBkZS1hY3RpdmF0aW5nICovCiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2luYWN0aXZlKTsKIAl9CiAKQEAgLTEzMTcsMTMgKzEzNzYsMTMgQEAKIAkgKiBoZWxwcyBiYWxhbmNlIHNjYW4gcHJlc3N1cmUgYmV0d2VlbiBmaWxlIGFuZCBhbm9ueW1vdXMgcGFnZXMgaW4KIAkgKiBnZXRfc2Nhbl9yYXRpby4KIAkgKi8KLQlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkWyEhZmlsZV0gKz0gcGdtb3ZlZDsKKwlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkW2ZpbGVdICs9IG5yX3JvdGF0ZWQ7CiAKIAltb3ZlX2FjdGl2ZV9wYWdlc190b19scnUoem9uZSwgJmxfYWN0aXZlLAogCQkJCQkJTFJVX0FDVElWRSArIGZpbGUgKiBMUlVfRklMRSk7CiAJbW92ZV9hY3RpdmVfcGFnZXNfdG9fbHJ1KHpvbmUsICZsX2luYWN0aXZlLAogCQkJCQkJTFJVX0JBU0UgICArIGZpbGUgKiBMUlVfRklMRSk7Ci0KKwlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIC1ucl90YWtlbik7CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiB9CiAKQEAgLTE0MjksMTAgKzE0ODgsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGFwLCBmcDsKIAlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOwogCi0JYW5vbiAgPSB6b25lX25yX3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0FOT04pICsKLQkJem9uZV9ucl9wYWdlcyh6b25lLCBzYywgTFJVX0lOQUNUSVZFX0FOT04pOwotCWZpbGUgID0gem9uZV9ucl9wYWdlcyh6b25lLCBzYywgTFJVX0FDVElWRV9GSUxFKSArCi0JCXpvbmVfbnJfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9GSUxFKTsKKwlhbm9uICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0FOT04pICsKKwkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9BTk9OKTsKKwlmaWxlICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0ZJTEUpICsKKwkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9GSUxFKTsKIAogCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkgewogCQlmcmVlICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKQEAgLTE1MjYsNiArMTU4NSw3IEBACiAJZW51bSBscnVfbGlzdCBsOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gc2MtPm5yX3JlY2xhaW1lZDsKIAl1bnNpZ25lZCBsb25nIHN3YXBfY2x1c3Rlcl9tYXggPSBzYy0+c3dhcF9jbHVzdGVyX21heDsKKwlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOwogCWludCBub3N3YXAgPSAwOwogCiAJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gcGFnZXMuICovCkBAIC0xNTQwLDE3ICsxNjAwLDE0IEBACiAJCWludCBmaWxlID0gaXNfZmlsZV9scnUobCk7CiAJCXVuc2lnbmVkIGxvbmcgc2NhbjsKIAotCQlzY2FuID0gem9uZV9ucl9wYWdlcyh6b25lLCBzYywgbCk7CisJCXNjYW4gPSB6b25lX25yX2xydV9wYWdlcyh6b25lLCBzYywgbCk7CiAJCWlmIChwcmlvcml0eSB8fCBub3N3YXApIHsKIAkJCXNjYW4gPj49IHByaW9yaXR5OwogCQkJc2NhbiA9IChzY2FuICogcGVyY2VudFtmaWxlXSkgLyAxMDA7CiAJCX0KLQkJaWYgKHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQotCQkJbnJbbF0gPSBucl9zY2FuX3RyeV9iYXRjaChzY2FuLAotCQkJCQkJICAmem9uZS0+bHJ1W2xdLm5yX3NhdmVkX3NjYW4sCi0JCQkJCQkgIHN3YXBfY2x1c3Rlcl9tYXgpOwotCQllbHNlCi0JCQlucltsXSA9IHNjYW47CisJCW5yW2xdID0gbnJfc2Nhbl90cnlfYmF0Y2goc2NhbiwKKwkJCQkJICAmcmVjbGFpbV9zdGF0LT5ucl9zYXZlZF9zY2FuW2xdLAorCQkJCQkgIHN3YXBfY2x1c3Rlcl9tYXgpOwogCX0KIAogCXdoaWxlIChucltMUlVfSU5BQ1RJVkVfQU5PTl0gfHwgbnJbTFJVX0FDVElWRV9GSUxFXSB8fApAQCAtMTY4NSw3ICsxNzQyLDcgQEAKIAkJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCQljb250aW51ZTsKIAotCQkJbHJ1X3BhZ2VzICs9IHpvbmVfbHJ1X3BhZ2VzKHpvbmUpOworCQkJbHJ1X3BhZ2VzICs9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7CiAJCX0KIAl9CiAKQEAgLTE5MDIsNyArMTk1OSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPD0gZW5kX3pvbmU7IGkrKykgewogCQkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGk7CiAKLQkJCWxydV9wYWdlcyArPSB6b25lX2xydV9wYWdlcyh6b25lKTsKKwkJCWxydV9wYWdlcyArPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpOwogCQl9CiAKIAkJLyoKQEAgLTE5NDYsNyArMjAwMyw3IEBACiAJCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChucl9zbGFiID09IDAgJiYgem9uZS0+cGFnZXNfc2Nhbm5lZCA+PQotCQkJCQkJKHpvbmVfbHJ1X3BhZ2VzKHpvbmUpICogNikpCisJCQkJCSh6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpICogNikpCiAJCQkJCXpvbmVfc2V0X2ZsYWcoem9uZSwKIAkJCQkJCSAgICAgIFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUpOwogCQkJLyoKQEAgLTIxMTMsMTIgKzIxNzAsMzkgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBnZGF0LT5rc3dhcGRfd2FpdCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgZ2xvYmFsX2xydV9wYWdlcyh2b2lkKQorLyoKKyAqIFRoZSByZWNsYWltYWJsZSBjb3VudCB3b3VsZCBiZSBtb3N0bHkgYWNjdXJhdGUuCisgKiBUaGUgbGVzcyByZWNsYWltYWJsZSBwYWdlcyBtYXkgYmUKKyAqIC0gbWxvY2tlZCBwYWdlcywgd2hpY2ggd2lsbCBiZSBtb3ZlZCB0byB1bmV2aWN0YWJsZSBsaXN0IHdoZW4gZW5jb3VudGVyZWQKKyAqIC0gbWFwcGVkIHBhZ2VzLCB3aGljaCBtYXkgcmVxdWlyZSBzZXZlcmFsIHRyYXZlbHMgdG8gYmUgcmVjbGFpbWVkCisgKiAtIGRpcnR5IHBhZ2VzLCB3aGljaCBpcyBub3QgImluc3RhbnRseSIgcmVjbGFpbWFibGUKKyAqLwordW5zaWduZWQgbG9uZyBnbG9iYWxfcmVjbGFpbWFibGVfcGFnZXModm9pZCkKIHsKLQlyZXR1cm4gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pCi0JCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpCi0JCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfQU5PTikKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKTsKKwlpbnQgbnI7CisKKwluciA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9GSUxFKSArCisJICAgICBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKTsKKworCWlmIChucl9zd2FwX3BhZ2VzID4gMCkKKwkJbnIgKz0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pICsKKwkJICAgICAgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfQU5PTik7CisKKwlyZXR1cm4gbnI7Cit9CisKK3Vuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlpbnQgbnI7CisKKwluciA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkgKworCSAgICAgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpOworCisJaWYgKG5yX3N3YXBfcGFnZXMgPiAwKQorCQluciArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pICsKKwkJICAgICAgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pOworCisJcmV0dXJuIG5yOwogfQogCiAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCkBAIC0yMTMzLDYgKzIyMTcsNyBAQAogewogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKKwlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdDsKIAogCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJZW51bSBscnVfbGlzdCBsOwpAQCAtMjE0OSwxMSArMjIzNCwxNCBAQAogCQkJCQkJbCA9PSBMUlVfQUNUSVZFX0ZJTEUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQl6b25lLT5scnVbbF0ubnJfc2F2ZWRfc2NhbiArPSAobHJ1X3BhZ2VzID4+IHByaW8pICsgMTsKLQkJCWlmICh6b25lLT5scnVbbF0ubnJfc2F2ZWRfc2NhbiA+PSBucl9wYWdlcyB8fCBwYXNzID4gMykgeworCQkJcmVjbGFpbV9zdGF0ID0gZ2V0X3JlY2xhaW1fc3RhdCh6b25lLCBzYyk7CisJCQlyZWNsYWltX3N0YXQtPm5yX3NhdmVkX3NjYW5bbF0gKz0KKwkJCQkJCShscnVfcGFnZXMgPj4gcHJpbykgKyAxOworCQkJaWYgKHJlY2xhaW1fc3RhdC0+bnJfc2F2ZWRfc2NhbltsXQorCQkJCQkJPj0gbnJfcGFnZXMgfHwgcGFzcyA+IDMpIHsKIAkJCQl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47CiAKLQkJCQl6b25lLT5scnVbbF0ubnJfc2F2ZWRfc2NhbiA9IDA7CisJCQkJcmVjbGFpbV9zdGF0LT5ucl9zYXZlZF9zY2FuW2xdID0gMDsKIAkJCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLCBscnVfcGFnZXMpOwogCQkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLCB6b25lLAogCQkJCQkJCQlzYywgcHJpbyk7CkBAIC0yMTkwLDcgKzIyNzgsNyBAQAogCiAJY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwogCi0JbHJ1X3BhZ2VzID0gZ2xvYmFsX2xydV9wYWdlcygpOworCWxydV9wYWdlcyA9IGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpOwogCW5yX3NsYWIgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKTsKIAkvKiBJZiBzbGFiIGNhY2hlcyBhcmUgaHVnZSwgaXQncyBiZXR0ZXIgdG8gaGl0IHRoZW0gZmlyc3QgKi8KIAl3aGlsZSAobnJfc2xhYiA+PSBscnVfcGFnZXMpIHsKQEAgLTIyMzIsNyArMjMyMCw3IEBACiAKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCQkJc2hyaW5rX3NsYWIoc2MubnJfc2Nhbm5lZCwgc2MuZ2ZwX21hc2ssCi0JCQkJCWdsb2JhbF9scnVfcGFnZXMoKSk7CisJCQkJICAgIGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpKTsKIAkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwogCQkJaWYgKHNjLm5yX3JlY2xhaW1lZCA+PSBucl9wYWdlcykKIAkJCQlnb3RvIG91dDsKQEAgLTIyNDksNyArMjMzNyw4IEBACiAJaWYgKCFzYy5ucl9yZWNsYWltZWQpIHsKIAkJZG8gewogCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7Ci0JCQlzaHJpbmtfc2xhYihucl9wYWdlcywgc2MuZ2ZwX21hc2ssIGdsb2JhbF9scnVfcGFnZXMoKSk7CisJCQlzaHJpbmtfc2xhYihucl9wYWdlcywgc2MuZ2ZwX21hc2ssCisJCQkJICAgIGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpKTsKIAkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwogCQl9IHdoaWxlIChzYy5ucl9yZWNsYWltZWQgPCBucl9wYWdlcyAmJgogCQkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPiAwKTsKQEAgLTI1NjksNyArMjY1OCw3IEBACiByZXRyeToKIAlDbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKIAlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpIHsKLQkJZW51bSBscnVfbGlzdCBsID0gTFJVX0lOQUNUSVZFX0FOT04gKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCWVudW0gbHJ1X2xpc3QgbCA9IHBhZ2VfbHJ1X2Jhc2VfdHlwZShwYWdlKTsKIAogCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKTsKIAkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbF0ubGlzdCk7CmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDEzOGJlZDUuLmM4MTMyMWYgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC02MzksMTEgKzYzOSwxNCBAQAogCSJucl9zbGFiX3JlY2xhaW1hYmxlIiwKIAkibnJfc2xhYl91bnJlY2xhaW1hYmxlIiwKIAkibnJfcGFnZV90YWJsZV9wYWdlcyIsCisJIm5yX2tlcm5lbF9zdGFjayIsCiAJIm5yX3Vuc3RhYmxlIiwKIAkibnJfYm91bmNlIiwKIAkibnJfdm1zY2FuX3dyaXRlIiwKIAkibnJfd3JpdGViYWNrX3RlbXAiLAotCisJIm5yX2lzb2xhdGVkX2Fub24iLAorCSJucl9pc29sYXRlZF9maWxlIiwKKwkibnJfc2htZW0iLAogI2lmZGVmIENPTkZJR19OVU1BCiAJIm51bWFfaGl0IiwKIAkibnVtYV9taXNzIiwKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCA5YmYwYjczLi5iMmUwN2YwIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMKKysrIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb185cC5oPgogCiAjZGVmaW5lIFZJUlRRVUVVRV9OVU0JMTI4CkBAIC0yMDAsNyArMjAxLDcgQEAKIAogCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19TRU5UOwogCi0JaWYgKGNoYW4tPnZxLT52cV9vcHMtPmFkZF9idWYoY2hhbi0+dnEsIGNoYW4tPnNnLCBvdXQsIGluLCByZXEtPnRjKSkgeworCWlmIChjaGFuLT52cS0+dnFfb3BzLT5hZGRfYnVmKGNoYW4tPnZxLCBjaGFuLT5zZywgb3V0LCBpbiwgcmVxLT50YykgPCAwKSB7CiAJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsCiAJCQkiOXAgZGVidWc6IHZpcnRpbyBycGMgYWRkX2J1ZiByZXR1cm5lZCBmYWlsdXJlIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMzM0LDggKzMzNSw2IEBACiAJfQogfQogCi0jZGVmaW5lIFZJUlRJT19JRF85UCA5Ci0KIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVklSVElPX0lEXzlQLCBWSVJUSU9fREVWX0FOWV9JRCB9LAogCXsgMCB9LApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggMDliZWRlYi4uNDlkODQ5NSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC01NzcsMTEgKzU3Nyw2IEBACiAJfQogCiAJaWYgKHNlc3Npb24tPmhpZCkgewotCQlpZiAoc2Vzc2lvbi0+aGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCi0JCQloaWRpbnB1dF9kaXNjb25uZWN0KHNlc3Npb24tPmhpZCk7Ci0JCWlmIChzZXNzaW9uLT5oaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCi0JCQloaWRyYXdfZGlzY29ubmVjdChzZXNzaW9uLT5oaWQpOwotCiAJCWhpZF9kZXN0cm95X2RldmljZShzZXNzaW9uLT5oaWQpOwogCQlzZXNzaW9uLT5oaWQgPSBOVUxMOwogCX0KQEAgLTc0Nyw4ICs3NDIsNiBAQAogCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5pbnRyX3RyYW5zbWl0KTsKIAotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKLQkJaGlkaW5wdXRfZGlzY29ubmVjdChoaWQpOwogCWhpZC0+Y2xhaW1lZCA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCAzMGQ1NDQ2Li41MjQ3MTJhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC0xMjA2LDEyICsxMjA2LDEyIEBACiAKIHZvaWQgX19pbml0IHNrX2luaXQodm9pZCkKIHsKLQlpZiAobnVtX3BoeXNwYWdlcyA8PSA0MDk2KSB7CisJaWYgKHRvdGFscmFtX3BhZ2VzIDw9IDQwOTYpIHsKIAkJc3lzY3RsX3dtZW1fbWF4ID0gMzI3Njc7CiAJCXN5c2N0bF9ybWVtX21heCA9IDMyNzY3OwogCQlzeXNjdGxfd21lbV9kZWZhdWx0ID0gMzI3Njc7CiAJCXN5c2N0bF9ybWVtX2RlZmF1bHQgPSAzMjc2NzsKLQl9IGVsc2UgaWYgKG51bV9waHlzcGFnZXMgPj0gMTMxMDcyKSB7CisJfSBlbHNlIGlmICh0b3RhbHJhbV9wYWdlcyA+PSAxMzEwNzIpIHsKIAkJc3lzY3RsX3dtZW1fbWF4ID0gMTMxMDcxOwogCQlzeXNjdGxfcm1lbV9tYXggPSAxMzEwNzE7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggOTIzZGIwNi4uYmM0NDY3MCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0xMDQ5LDEwICsxMDQ5LDEwIEBACiAJICoKIAkgKiBUaGUgbWV0aG9kb2xvZ3kgaXMgc2ltaWxhciB0byB0aGF0IG9mIHRoZSBidWZmZXIgY2FjaGUuCiAJICovCi0JaWYgKG51bV9waHlzcGFnZXMgPj0gKDEyOCAqIDEwMjQpKQotCQlnb2FsID0gbnVtX3BoeXNwYWdlcyA+PiAoMjEgLSBQQUdFX1NISUZUKTsKKwlpZiAodG90YWxyYW1fcGFnZXMgPj0gKDEyOCAqIDEwMjQpKQorCQlnb2FsID0gdG90YWxyYW1fcGFnZXMgPj4gKDIxIC0gUEFHRV9TSElGVCk7CiAJZWxzZQotCQlnb2FsID0gbnVtX3BoeXNwYWdlcyA+PiAoMjMgLSBQQUdFX1NISUZUKTsKKwkJZ29hbCA9IHRvdGFscmFtX3BhZ2VzID4+ICgyMyAtIFBBR0VfU0hJRlQpOwogCiAJaWYgKHRoYXNoX2VudHJpZXMpCiAJCWdvYWwgPSAodGhhc2hfZW50cmllcyAqCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggOTM4M2QzZS4uNTc2NjJjYSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtMTc1MCw3ICsxNzUwLDcgQEAKIAlkbl9yb3V0ZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIGRlY25ldF9kc3RfZ2NfaW50ZXJ2YWwgKiBIWjsKIAlhZGRfdGltZXIoJmRuX3JvdXRlX3RpbWVyKTsKIAotCWdvYWwgPSBudW1fcGh5c3BhZ2VzID4+ICgyNiAtIFBBR0VfU0hJRlQpOworCWdvYWwgPSB0b3RhbHJhbV9wYWdlcyA+PiAoMjYgLSBQQUdFX1NISUZUKTsKIAogCWZvcihvcmRlciA9IDA7ICgxVUwgPDwgb3JkZXIpIDwgZ29hbDsgb3JkZXIrKykKIAkJLyogTk9USElORyAqLzsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDkxODY3ZDMuLmRmOTM0NzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMzQxNCw3ICszNDE0LDcgQEAKIAkJYWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goIklQIHJvdXRlIGNhY2hlIiwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBydF9oYXNoX2J1Y2tldCksCiAJCQkJCXJoYXNoX2VudHJpZXMsCi0JCQkJCShudW1fcGh5c3BhZ2VzID49IDEyOCAqIDEwMjQpID8KKwkJCQkJKHRvdGFscmFtX3BhZ2VzID49IDEyOCAqIDEwMjQpID8KIAkJCQkJMTUgOiAxNywKIAkJCQkJMCwKIAkJCQkJJnJ0X2hhc2hfbG9nLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxOWEwNjEyLi4yMTM4N2ViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMjg2Miw3ICsyODYyLDcgQEAKIAkJYWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goIlRDUCBlc3RhYmxpc2hlZCIsCiAJCQkJCXNpemVvZihzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQpLAogCQkJCQl0aGFzaF9lbnRyaWVzLAotCQkJCQkobnVtX3BoeXNwYWdlcyA+PSAxMjggKiAxMDI0KSA/CisJCQkJCSh0b3RhbHJhbV9wYWdlcyA+PSAxMjggKiAxMDI0KSA/CiAJCQkJCTEzIDogMTUsCiAJCQkJCTAsCiAJCQkJCSZ0Y3BfaGFzaGluZm8uZWhhc2hfc2l6ZSwKQEAgLTI4NzksNyArMjg3OSw3IEBACiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJUQ1AgYmluZCIsCiAJCQkJCXNpemVvZihzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQpLAogCQkJCQl0Y3BfaGFzaGluZm8uZWhhc2hfc2l6ZSwKLQkJCQkJKG51bV9waHlzcGFnZXMgPj0gMTI4ICogMTAyNCkgPworCQkJCQkodG90YWxyYW1fcGFnZXMgPj0gMTI4ICogMTAyNCkgPwogCQkJCQkxMyA6IDE1LAogCQkJCQkwLAogCQkJCQkmdGNwX2hhc2hpbmZvLmJoYXNoX3NpemUsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCAzOTA3NTEwLi4wOTA2NzVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCisrKyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwbXJfbWZjX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwbXJfbWZjX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gaXBtcl9tZmNfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IGlwbXJfbWZjX3NlcV9uZXh0LAogCS5zdG9wICA9IGlwbXJfbWZjX3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IGIzNzEwOTguLjdjOWVjM2QgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTEyNDUsOSArMTI0NSw5IEBACiAJICogbWFjaGluZSBoYXMgNTEyIGJ1Y2tldHMuID49IDFHQiBtYWNoaW5lcyBoYXZlIDE2Mzg0IGJ1Y2tldHMuICovCiAJaWYgKCFuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpIHsKIAkJbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplCi0JCQk9ICgoKG51bV9waHlzcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAxNjM4NCkKKwkJCT0gKCgodG90YWxyYW1fcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAxNjM4NCkKIAkJCSAgIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7Ci0JCWlmIChudW1fcGh5c3BhZ2VzID4gKDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkpCisJCWlmICh0b3RhbHJhbV9wYWdlcyA+ICgxMDI0ICogMTAyNCAqIDEwMjQgLyBQQUdFX1NJWkUpKQogCQkJbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplID0gMTYzODQ7CiAJCWlmIChuZl9jb25udHJhY2tfaHRhYmxlX3NpemUgPCAzMikKIAkJCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZSA9IDMyOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IGE2YWM4M2EuLmYwMTk1NWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTYxNyw3ICs2MTcsNyBAQAogCWludCBjcHU7CiAKIAkvKiBQZWRhbnRyeTogcHJldmVudCB0aGVtIGZyb20gaGl0dGluZyBCVUcoKSBpbiB2bWFsbG9jLmMgLS1SUiAqLwotCWlmICgoU01QX0FMSUdOKHNpemUpID4+IFBBR0VfU0hJRlQpICsgMiA+IG51bV9waHlzcGFnZXMpCisJaWYgKChTTVBfQUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVCkgKyAyID4gdG90YWxyYW1fcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCiAJbmV3aW5mbyA9IGt6YWxsb2MoWFRfVEFCTEVfSU5GT19TWiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwppbmRleCAyMTlkY2RiLi5kZDE2ZTQwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTE5NCw5ICsxOTQsOSBAQAogCWlmIChtaW5mby0+Y2ZnLnNpemUpCiAJCXNpemUgPSBtaW5mby0+Y2ZnLnNpemU7CiAJZWxzZSB7Ci0JCXNpemUgPSAoKG51bV9waHlzcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAxNjM4NCkgLworCQlzaXplID0gKCh0b3RhbHJhbV9wYWdlcyA8PCBQQUdFX1NISUZUKSAvIDE2Mzg0KSAvCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCk7Ci0JCWlmIChudW1fcGh5c3BhZ2VzID4gKDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkpCisJCWlmICh0b3RhbHJhbV9wYWdlcyA+ICgxMDI0ICogMTAyNCAqIDEwMjQgLyBQQUdFX1NJWkUpKQogCQkJc2l6ZSA9IDgxOTI7CiAJCWlmIChzaXplIDwgMTYpCiAJCQlzaXplID0gMTY7CkBAIC0yNjYsOSArMjY2LDkgQEAKIAlpZiAobWluZm8tPmNmZy5zaXplKSB7CiAJCXNpemUgPSBtaW5mby0+Y2ZnLnNpemU7CiAJfSBlbHNlIHsKLQkJc2l6ZSA9IChudW1fcGh5c3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC8gMTYzODQgLworCQlzaXplID0gKHRvdGFscmFtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC8gMTYzODQgLwogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpOwotCQlpZiAobnVtX3BoeXNwYWdlcyA+IDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkKKwkJaWYgKHRvdGFscmFtX3BhZ2VzID4gMTAyNCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKQogCQkJc2l6ZSA9IDgxOTI7CiAJCWlmIChzaXplIDwgMTYpCiAJCQlzaXplID0gMTY7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggYzVhYWI2YS4uNTUxODBiOSAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMjA5MSwxMCArMjA5MSwxMCBAQAogCWlmICghbmxfdGFibGUpCiAJCWdvdG8gcGFuaWM7CiAKLQlpZiAobnVtX3BoeXNwYWdlcyA+PSAoMTI4ICogMTAyNCkpCi0JCWxpbWl0ID0gbnVtX3BoeXNwYWdlcyA+PiAoMjEgLSBQQUdFX1NISUZUKTsKKwlpZiAodG90YWxyYW1fcGFnZXMgPj0gKDEyOCAqIDEwMjQpKQorCQlsaW1pdCA9IHRvdGFscmFtX3BhZ2VzID4+ICgyMSAtIFBBR0VfU0hJRlQpOwogCWVsc2UKLQkJbGltaXQgPSBudW1fcGh5c3BhZ2VzID4+ICgyMyAtIFBBR0VfU0hJRlQpOworCQlsaW1pdCA9IHRvdGFscmFtX3BhZ2VzID4+ICgyMyAtIFBBR0VfU0hJRlQpOwogCiAJb3JkZXIgPSBnZXRfYml0bWFza19vcmRlcihsaW1pdCkgLSAxICsgUEFHRV9TSElGVDsKIAlsaW1pdCA9ICgxVUwgPDwgb3JkZXIpIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1jYWxsLmMgYi9uZXQvcnhycGMvYXItY2FsbC5jCmluZGV4IGQ5MjMxMjQuLmJjMDAxOWYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1jYWxsLmMKKysrIGIvbmV0L3J4cnBjL2FyLWNhbGwuYwpAQCAtOTYsNyArOTYsNyBAQAogfQogCiAvKgotICogYWxsb2NhdGUgYSBuZXcgY2xpZW50IGNhbGwgYW5kIGF0dGVtcHQgdG8gdG8gZ2V0IGEgY29ubmVjdGlvbiBzbG90IGZvciBpdAorICogYWxsb2NhdGUgYSBuZXcgY2xpZW50IGNhbGwgYW5kIGF0dGVtcHQgdG8gZ2V0IGEgY29ubmVjdGlvbiBzbG90IGZvciBpdAogICovCiBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKAogCXN0cnVjdCByeHJwY19zb2NrICpyeCwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggMzc1ZDY0Yy4uMmM1Yzc2YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTc3LDcgKzc3LDcgQEAKICAqICAgVGhlIHNlcnZpY2UgY3VydmUgcGFyYW1ldGVycyBhcmUgY29udmVydGVkIHRvIHRoZSBpbnRlcm5hbAogICogICByZXByZXNlbnRhdGlvbi4gVGhlIHNsb3BlIHZhbHVlcyBhcmUgc2NhbGVkIHRvIGF2b2lkIG92ZXJmbG93LgogICogICB0aGUgaW52ZXJzZSBzbG9wZSB2YWx1ZXMgYXMgd2VsbCBhcyB0aGUgeS1wcm9qZWN0aW9uIG9mIHRoZSAxc3QKLSAqICAgc2VnbWVudCBhcmUga2VwdCBpbiBvcmRlciB0byB0byBhdm9pZCA2NC1iaXQgZGl2aWRlIG9wZXJhdGlvbnMKKyAqICAgc2VnbWVudCBhcmUga2VwdCBpbiBvcmRlciB0byBhdm9pZCA2NC1iaXQgZGl2aWRlIG9wZXJhdGlvbnMKICAqICAgdGhhdCBhcmUgZXhwZW5zaXZlIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLgogICovCiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGM1NTdmMWYuLjYxMmRjODcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMTE4NCwxMCArMTE4NCwxMCBAQAogCS8qIFNpemUgYW5kIGFsbG9jYXRlIHRoZSBhc3NvY2lhdGlvbiBoYXNoIHRhYmxlLgogCSAqIFRoZSBtZXRob2RvbG9neSBpcyBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHRjcCBoYXNoIHRhYmxlcy4KIAkgKi8KLQlpZiAobnVtX3BoeXNwYWdlcyA+PSAoMTI4ICogMTAyNCkpCi0JCWdvYWwgPSBudW1fcGh5c3BhZ2VzID4+ICgyMiAtIFBBR0VfU0hJRlQpOworCWlmICh0b3RhbHJhbV9wYWdlcyA+PSAoMTI4ICogMTAyNCkpCisJCWdvYWwgPSB0b3RhbHJhbV9wYWdlcyA+PiAoMjIgLSBQQUdFX1NISUZUKTsKIAllbHNlCi0JCWdvYWwgPSBudW1fcGh5c3BhZ2VzID4+ICgyNCAtIFBBR0VfU0hJRlQpOworCQlnb2FsID0gdG90YWxyYW1fcGFnZXMgPj4gKDI0IC0gUEFHRV9TSElGVCk7CiAKIAlmb3IgKG9yZGVyID0gMDsgKDFVTCA8PCBvcmRlcikgPCBnb2FsOyBvcmRlcisrKQogCQk7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggMmEwMjJjMC4uNDk5MTdhMSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtMjM1LDggKzIzNiw2IEBACiAJcmV0dXJuIF9fcHV0X3VzZXIoa2xlbiwgdWxlbik7CiB9CiAKLSNkZWZpbmUgU09DS0ZTX01BR0lDIDB4NTM0RjQzNEIKLQogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzb2NrX2lub2RlX2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgc3RydWN0IGlub2RlICpzb2NrX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0yODUsNyArMjg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNvY2tmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc29ja2ZzX29wcyA9IHsKIAkuYWxsb2NfaW5vZGUgPQlzb2NrX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID1zb2NrX2Rlc3Ryb3lfaW5vZGUsCiAJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGguYyBiL25ldC9zdW5ycGMvYXV0aC5jCmluZGV4IDBjNDMxYzIuLjU0YTRlMDQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aC5jCkBAIC0zODUsNyArMzg1LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJwY2F1dGhfaW5pdF9jcmVkKTsKIAogdm9pZAotcnBjYXV0aF9nZW5lcmljX2JpbmRfY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKK3JwY2F1dGhfZ2VuZXJpY19iaW5kX2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIGludCBsb29rdXBmbGFncykKIHsKIAl0YXNrLT50a19tc2cucnBjX2NyZWQgPSBnZXRfcnBjY3JlZChjcmVkKTsKIAlkcHJpbnRrKCJSUEM6ICU1dSBob2xkaW5nICVzIGNyZWQgJXBcbiIsIHRhc2stPnRrX3BpZCwKQEAgLTM5NCw3ICszOTQsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnBjYXV0aF9nZW5lcmljX2JpbmRfY3JlZCk7CiAKIHN0YXRpYyB2b2lkCi1ycGNhdXRoX2JpbmRfcm9vdF9jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3JwY2F1dGhfYmluZF9yb290X2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrLCBpbnQgbG9va3VwZmxhZ3MpCiB7CiAJc3RydWN0IHJwY19hdXRoICphdXRoID0gdGFzay0+dGtfY2xpZW50LT5jbF9hdXRoOwogCXN0cnVjdCBhdXRoX2NyZWQgYWNyZWQgPSB7CkBAIC00MDUsNyArNDA1LDcgQEAKIAogCWRwcmludGsoIlJQQzogJTV1IGxvb2tpbmcgdXAgJXMgY3JlZFxuIiwKIAkJdGFzay0+dGtfcGlkLCB0YXNrLT50a19jbGllbnQtPmNsX2F1dGgtPmF1X29wcy0+YXVfbmFtZSk7Ci0JcmV0ID0gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCAmYWNyZWQsIDApOworCXJldCA9IGF1dGgtPmF1X29wcy0+bG9va3VwX2NyZWQoYXV0aCwgJmFjcmVkLCBsb29rdXBmbGFncyk7CiAJaWYgKCFJU19FUlIocmV0KSkKIAkJdGFzay0+dGtfbXNnLnJwY19jcmVkID0gcmV0OwogCWVsc2UKQEAgLTQxMywxNCArNDEzLDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1ycGNhdXRoX2JpbmRfbmV3X2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrKQorcnBjYXV0aF9iaW5kX25ld19jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IGxvb2t1cGZsYWdzKQogewogCXN0cnVjdCBycGNfYXV0aCAqYXV0aCA9IHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aDsKIAlzdHJ1Y3QgcnBjX2NyZWQgKnJldDsKIAogCWRwcmludGsoIlJQQzogJTV1IGxvb2tpbmcgdXAgJXMgY3JlZFxuIiwKIAkJdGFzay0+dGtfcGlkLCBhdXRoLT5hdV9vcHMtPmF1X25hbWUpOwotCXJldCA9IHJwY2F1dGhfbG9va3VwY3JlZChhdXRoLCAwKTsKKwlyZXQgPSBycGNhdXRoX2xvb2t1cGNyZWQoYXV0aCwgbG9va3VwZmxhZ3MpOwogCWlmICghSVNfRVJSKHJldCkpCiAJCXRhc2stPnRrX21zZy5ycGNfY3JlZCA9IHJldDsKIAllbHNlCkBAIC00MzAsMTIgKzQzMCwxNiBAQAogdm9pZAogcnBjYXV0aF9iaW5kY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgaW50IGZsYWdzKQogeworCWludCBsb29rdXBmbGFncyA9IDA7CisKKwlpZiAoZmxhZ3MgJiBSUENfVEFTS19BU1lOQykKKwkJbG9va3VwZmxhZ3MgfD0gUlBDQVVUSF9MT09LVVBfTkVXOwogCWlmIChjcmVkICE9IE5VTEwpCi0JCWNyZWQtPmNyX29wcy0+Y3JiaW5kKHRhc2ssIGNyZWQpOworCQljcmVkLT5jcl9vcHMtPmNyYmluZCh0YXNrLCBjcmVkLCBsb29rdXBmbGFncyk7CiAJZWxzZSBpZiAoZmxhZ3MgJiBSUENfVEFTS19ST09UQ1JFRFMpCi0JCXJwY2F1dGhfYmluZF9yb290X2NyZWQodGFzayk7CisJCXJwY2F1dGhfYmluZF9yb290X2NyZWQodGFzaywgbG9va3VwZmxhZ3MpOwogCWVsc2UKLQkJcnBjYXV0aF9iaW5kX25ld19jcmVkKHRhc2spOworCQlycGNhdXRoX2JpbmRfbmV3X2NyZWQodGFzaywgbG9va3VwZmxhZ3MpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dlbmVyaWMuYwppbmRleCA0MDI4NTAyLi5iZjg4YmY4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMKQEAgLTU1LDEzICs1NSwxMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2xvb2t1cF9tYWNoaW5lX2NyZWQpOwogCiBzdGF0aWMgdm9pZAotZ2VuZXJpY19iaW5kX2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCitnZW5lcmljX2JpbmRfY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgaW50IGxvb2t1cGZsYWdzKQogewogCXN0cnVjdCBycGNfYXV0aCAqYXV0aCA9IHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aDsKIAlzdHJ1Y3QgYXV0aF9jcmVkICphY3JlZCA9ICZjb250YWluZXJfb2YoY3JlZCwgc3RydWN0IGdlbmVyaWNfY3JlZCwgZ2NfYmFzZSktPmFjcmVkOwogCXN0cnVjdCBycGNfY3JlZCAqcmV0OwogCi0JcmV0ID0gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCBhY3JlZCwgMCk7CisJcmV0ID0gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCBhY3JlZCwgbG9va3VwZmxhZ3MpOwogCWlmICghSVNfRVJSKHJldCkpCiAJCXRhc2stPnRrX21zZy5ycGNfY3JlZCA9IHJldDsKIAllbHNlCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggMmU2YTE0OC4uZjZjNTFlNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtMTM3NCw4ICsxMzc0LDEwIEBACiAJCWlmIChzdGF0KQogCQkJZ290byBvdXRfZXJyOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb3RvIG91dF9lcnI7CisJLyoKKwkgKiBGb3IgYW55IG90aGVyIGdjX3N2YyB2YWx1ZSwgc3ZjYXV0aF9nc3NfYWNjZXB0KCkgYWxyZWFkeSBzZXQKKwkgKiB0aGUgYXV0aF9lcnJvciBhcHByb3ByaWF0ZWx5OyBqdXN0IGZhbGwgdGhyb3VnaDoKKwkgKi8KIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2FjaGUuYyBiL25ldC9zdW5ycGMvY2FjaGUuYwppbmRleCA0NWNkYWZmLi5kNmVlZTI5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NhY2hlLmMKKysrIGIvbmV0L3N1bnJwYy9jYWNoZS5jCkBAIC0xMDMsMjMgKzEwMywyMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3VucnBjX2NhY2hlX2xvb2t1cCk7CiAKIAotc3RhdGljIHZvaWQgcXVldWVfbG9vc2Uoc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqY2gpOworc3RhdGljIHZvaWQgY2FjaGVfZGVxdWV1ZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsIHN0cnVjdCBjYWNoZV9oZWFkICpjaCk7CiAKLXN0YXRpYyBpbnQgY2FjaGVfZnJlc2hfbG9ja2VkKHN0cnVjdCBjYWNoZV9oZWFkICpoZWFkLCB0aW1lX3QgZXhwaXJ5KQorc3RhdGljIHZvaWQgY2FjaGVfZnJlc2hfbG9ja2VkKHN0cnVjdCBjYWNoZV9oZWFkICpoZWFkLCB0aW1lX3QgZXhwaXJ5KQogewogCWhlYWQtPmV4cGlyeV90aW1lID0gZXhwaXJ5OwogCWhlYWQtPmxhc3RfcmVmcmVzaCA9IGdldF9zZWNvbmRzKCk7Ci0JcmV0dXJuICF0ZXN0X2FuZF9zZXRfYml0KENBQ0hFX1ZBTElELCAmaGVhZC0+ZmxhZ3MpOworCXNldF9iaXQoQ0FDSEVfVkFMSUQsICZoZWFkLT5mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX2ZyZXNoX3VubG9ja2VkKHN0cnVjdCBjYWNoZV9oZWFkICpoZWFkLAotCQkJc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLCBpbnQgbmV3KQorCQkJCSBzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwpCiB7Ci0JaWYgKG5ldykKLQkJY2FjaGVfcmV2aXNpdF9yZXF1ZXN0KGhlYWQpOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmhlYWQtPmZsYWdzKSkgewogCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaGVhZCk7Ci0JCXF1ZXVlX2xvb3NlKGRldGFpbCwgaGVhZCk7CisJCWNhY2hlX2RlcXVldWUoZGV0YWlsLCBoZWFkKTsKIAl9CiB9CiAKQEAgLTEzMiw3ICsxMzAsNiBAQAogCSAqLwogCXN0cnVjdCBjYWNoZV9oZWFkICoqaGVhZDsKIAlzdHJ1Y3QgY2FjaGVfaGVhZCAqdG1wOwotCWludCBpc19uZXc7CiAKIAlpZiAoIXRlc3RfYml0KENBQ0hFX1ZBTElELCAmb2xkLT5mbGFncykpIHsKIAkJd3JpdGVfbG9jaygmZGV0YWlsLT5oYXNoX2xvY2spOwpAQCAtMTQxLDkgKzEzOCw5IEBACiAJCQkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJm9sZC0+ZmxhZ3MpOwogCQkJZWxzZQogCQkJCWRldGFpbC0+dXBkYXRlKG9sZCwgbmV3KTsKLQkJCWlzX25ldyA9IGNhY2hlX2ZyZXNoX2xvY2tlZChvbGQsIG5ldy0+ZXhwaXJ5X3RpbWUpOworCQkJY2FjaGVfZnJlc2hfbG9ja2VkKG9sZCwgbmV3LT5leHBpcnlfdGltZSk7CiAJCQl3cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKLQkJCWNhY2hlX2ZyZXNoX3VubG9ja2VkKG9sZCwgZGV0YWlsLCBpc19uZXcpOworCQkJY2FjaGVfZnJlc2hfdW5sb2NrZWQob2xkLCBkZXRhaWwpOwogCQkJcmV0dXJuIG9sZDsKIAkJfQogCQl3cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKQEAgLTE2NywxMSArMTY0LDExIEBACiAJKmhlYWQgPSB0bXA7CiAJZGV0YWlsLT5lbnRyaWVzKys7CiAJY2FjaGVfZ2V0KHRtcCk7Ci0JaXNfbmV3ID0gY2FjaGVfZnJlc2hfbG9ja2VkKHRtcCwgbmV3LT5leHBpcnlfdGltZSk7CisJY2FjaGVfZnJlc2hfbG9ja2VkKHRtcCwgbmV3LT5leHBpcnlfdGltZSk7CiAJY2FjaGVfZnJlc2hfbG9ja2VkKG9sZCwgMCk7CiAJd3JpdGVfdW5sb2NrKCZkZXRhaWwtPmhhc2hfbG9jayk7Ci0JY2FjaGVfZnJlc2hfdW5sb2NrZWQodG1wLCBkZXRhaWwsIGlzX25ldyk7Ci0JY2FjaGVfZnJlc2hfdW5sb2NrZWQob2xkLCBkZXRhaWwsIDApOworCWNhY2hlX2ZyZXNoX3VubG9ja2VkKHRtcCwgZGV0YWlsKTsKKwljYWNoZV9mcmVzaF91bmxvY2tlZChvbGQsIGRldGFpbCk7CiAJY2FjaGVfcHV0KG9sZCwgZGV0YWlsKTsKIAlyZXR1cm4gdG1wOwogfQpAQCAtMTg0LDYgKzE4MSwyMiBAQAogCXJldHVybiBjZC0+Y2FjaGVfdXBjYWxsKGNkLCBoKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2FjaGVfaXNfdmFsaWQoc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaCkKK3sKKwlpZiAoIXRlc3RfYml0KENBQ0hFX1ZBTElELCAmaC0+ZmxhZ3MpIHx8CisJICAgIGgtPmV4cGlyeV90aW1lIDwgZ2V0X3NlY29uZHMoKSkKKwkJcmV0dXJuIC1FQUdBSU47CisJZWxzZSBpZiAoZGV0YWlsLT5mbHVzaF90aW1lID4gaC0+bGFzdF9yZWZyZXNoKQorCQlyZXR1cm4gLUVBR0FJTjsKKwllbHNlIHsKKwkJLyogZW50cnkgaXMgdmFsaWQgKi8KKwkJaWYgKHRlc3RfYml0KENBQ0hFX05FR0FUSVZFLCAmaC0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIGdlbmVyaWMgY2FjaGUgbWFuYWdlbWVudCByb3V0aW5lIGZvciBhbGwKICAqIHRoZSBhdXRoZW50aWNhdGlvbiBjYWNoZXMuCkBAIC0xOTIsOCArMjA1LDEwIEBACiAgKgogICoKICAqIFJldHVybnMgMCBpZiB0aGUgY2FjaGVfaGVhZCBjYW4gYmUgdXNlZCwgb3IgY2FjaGVfcHV0cyBpdCBhbmQgcmV0dXJucwotICogLUVBR0FJTiBpZiB1cGNhbGwgaXMgcGVuZGluZywKLSAqIC1FVElNRURPVVQgaWYgdXBjYWxsIGZhaWxlZCBhbmQgc2hvdWxkIGJlIHJldHJpZWQsCisgKiAtRUFHQUlOIGlmIHVwY2FsbCBpcyBwZW5kaW5nIGFuZCByZXF1ZXN0IGhhcyBiZWVuIHF1ZXVlZAorICogLUVUSU1FRE9VVCBpZiB1cGNhbGwgZmFpbGVkIG9yIHJlcXVlc3QgY291bGQgbm90IGJlIHF1ZXVlIG9yCisgKiAgICAgICAgICAgdXBjYWxsIGNvbXBsZXRlZCBidXQgaXRlbSBpcyBzdGlsbCBpbnZhbGlkIChpbXBseWluZyB0aGF0CisgKiAgICAgICAgICAgdGhlIGNhY2hlIGl0ZW0gaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIG5ld2VyIG9uZSkuCiAgKiAtRU5PRU5UIGlmIGNhY2hlIGVudHJ5IHdhcyBuZWdhdGl2ZQogICovCiBpbnQgY2FjaGVfY2hlY2soc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLApAQCAtMjAzLDE3ICsyMTgsNyBAQAogCWxvbmcgcmVmcmVzaF9hZ2UsIGFnZTsKIAogCS8qIEZpcnN0IGRlY2lkZSByZXR1cm4gc3RhdHVzIGFzIGJlc3Qgd2UgY2FuICovCi0JaWYgKCF0ZXN0X2JpdChDQUNIRV9WQUxJRCwgJmgtPmZsYWdzKSB8fAotCSAgICBoLT5leHBpcnlfdGltZSA8IGdldF9zZWNvbmRzKCkpCi0JCXJ2ID0gLUVBR0FJTjsKLQllbHNlIGlmIChkZXRhaWwtPmZsdXNoX3RpbWUgPiBoLT5sYXN0X3JlZnJlc2gpCi0JCXJ2ID0gLUVBR0FJTjsKLQllbHNlIHsKLQkJLyogZW50cnkgaXMgdmFsaWQgKi8KLQkJaWYgKHRlc3RfYml0KENBQ0hFX05FR0FUSVZFLCAmaC0+ZmxhZ3MpKQotCQkJcnYgPSAtRU5PRU5UOwotCQllbHNlIHJ2ID0gMDsKLQl9CisJcnYgPSBjYWNoZV9pc192YWxpZChkZXRhaWwsIGgpOwogCiAJLyogbm93IHNlZSBpZiB3ZSB3YW50IHRvIHN0YXJ0IGFuIHVwY2FsbCAqLwogCXJlZnJlc2hfYWdlID0gKGgtPmV4cGlyeV90aW1lIC0gaC0+bGFzdF9yZWZyZXNoKTsKQEAgLTIyOSwxMCArMjM0LDExIEBACiAJCQlzd2l0Y2ggKGNhY2hlX21ha2VfdXBjYWxsKGRldGFpbCwgaCkpIHsKIAkJCWNhc2UgLUVJTlZBTDoKIAkJCQljbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmgtPmZsYWdzKTsKKwkJCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaCk7CiAJCQkJaWYgKHJ2ID09IC1FQUdBSU4pIHsKIAkJCQkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJmgtPmZsYWdzKTsKLQkJCQkJY2FjaGVfZnJlc2hfdW5sb2NrZWQoaCwgZGV0YWlsLAotCQkJCQkgICAgIGNhY2hlX2ZyZXNoX2xvY2tlZChoLCBnZXRfc2Vjb25kcygpK0NBQ0hFX05FV19FWFBJUlkpKTsKKwkJCQkJY2FjaGVfZnJlc2hfbG9ja2VkKGgsIGdldF9zZWNvbmRzKCkrQ0FDSEVfTkVXX0VYUElSWSk7CisJCQkJCWNhY2hlX2ZyZXNoX3VubG9ja2VkKGgsIGRldGFpbCk7CiAJCQkJCXJ2ID0gLUVOT0VOVDsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yNDUsMTAgKzI1MSwxNCBAQAogCQl9CiAJfQogCi0JaWYgKHJ2ID09IC1FQUdBSU4pCi0JCWlmIChjYWNoZV9kZWZlcl9yZXEocnFzdHAsIGgpICE9IDApCi0JCQlydiA9IC1FVElNRURPVVQ7Ci0KKwlpZiAocnYgPT0gLUVBR0FJTikgeworCQlpZiAoY2FjaGVfZGVmZXJfcmVxKHJxc3RwLCBoKSA8IDApIHsKKwkJCS8qIFJlcXVlc3QgaXMgbm90IGRlZmVycmVkICovCisJCQlydiA9IGNhY2hlX2lzX3ZhbGlkKGRldGFpbCwgaCk7CisJCQlpZiAocnYgPT0gLUVBR0FJTikKKwkJCQlydiA9IC1FVElNRURPVVQ7CisJCX0KKwl9CiAJaWYgKHJ2KQogCQljYWNoZV9wdXQoaCwgZGV0YWlsKTsKIAlyZXR1cm4gcnY7CkBAIC0zOTYsNyArNDA2LDcgQEAKIAkJCQkpCiAJCQkJY29udGludWU7CiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENBQ0hFX1BFTkRJTkcsICZjaC0+ZmxhZ3MpKQotCQkJCXF1ZXVlX2xvb3NlKGN1cnJlbnRfZGV0YWlsLCBjaCk7CisJCQkJY2FjaGVfZGVxdWV1ZShjdXJyZW50X2RldGFpbCwgY2gpOwogCiAJCQlpZiAoYXRvbWljX3JlYWQoJmNoLT5yZWYucmVmY291bnQpID09IDEpCiAJCQkJYnJlYWs7CkBAIC00MTIsOCArNDIyLDEwIEBACiAJCWlmICghY2gpCiAJCQljdXJyZW50X2luZGV4ICsrOwogCQlzcGluX3VubG9jaygmY2FjaGVfbGlzdF9sb2NrKTsKLQkJaWYgKGNoKQorCQlpZiAoY2gpIHsKKwkJCWNhY2hlX3JldmlzaXRfcmVxdWVzdChjaCk7CiAJCQljYWNoZV9wdXQoY2gsIGQpOworCQl9CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrKCZjYWNoZV9saXN0X2xvY2spOwogCkBAIC00ODgsNyArNTAwLDcgQEAKIAogc3RhdGljIGludCBjYWNoZV9kZWZlcl9yZXEoc3RydWN0IGNhY2hlX3JlcSAqcmVxLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaXRlbSkKIHsKLQlzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxICpkcmVxOworCXN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEgKmRyZXEsICpkaXNjYXJkOwogCWludCBoYXNoID0gREZSX0hBU0goaXRlbSk7CiAKIAlpZiAoY2FjaGVfZGVmZXJfY250ID49IERGUl9NQVgpIHsKQEAgLTQ5NiwxMSArNTA4LDExIEBACiAJCSAqIG9yIGNvbnRpbnVlIGFuZCBkcm9wIHRoZSBvbGRlc3QgYmVsb3cKIAkJICovCiAJCWlmIChuZXRfcmFuZG9tKCkmMSkKLQkJCXJldHVybiAtRVRJTUVET1VUOworCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRyZXEgPSByZXEtPmRlZmVyKHJlcSk7CiAJaWYgKGRyZXEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZHJlcS0+aXRlbSA9IGl0ZW07CiAKQEAgLTUxMywyMyArNTI1LDI0IEBACiAJbGlzdF9hZGQoJmRyZXEtPmhhc2gsICZjYWNoZV9kZWZlcl9oYXNoW2hhc2hdKTsKIAogCS8qIGl0IGlzIGluLCBub3cgbWF5YmUgY2xlYW4gdXAgKi8KLQlkcmVxID0gTlVMTDsKKwlkaXNjYXJkID0gTlVMTDsKIAlpZiAoKytjYWNoZV9kZWZlcl9jbnQgPiBERlJfTUFYKSB7Ci0JCWRyZXEgPSBsaXN0X2VudHJ5KGNhY2hlX2RlZmVyX2xpc3QucHJldiwKLQkJCQkgIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEsIHJlY2VudCk7Ci0JCWxpc3RfZGVsKCZkcmVxLT5yZWNlbnQpOwotCQlsaXN0X2RlbCgmZHJlcS0+aGFzaCk7CisJCWRpc2NhcmQgPSBsaXN0X2VudHJ5KGNhY2hlX2RlZmVyX2xpc3QucHJldiwKKwkJCQkgICAgIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEsIHJlY2VudCk7CisJCWxpc3RfZGVsX2luaXQoJmRpc2NhcmQtPnJlY2VudCk7CisJCWxpc3RfZGVsX2luaXQoJmRpc2NhcmQtPmhhc2gpOwogCQljYWNoZV9kZWZlcl9jbnQtLTsKIAl9CiAJc3Bpbl91bmxvY2soJmNhY2hlX2RlZmVyX2xvY2spOwogCi0JaWYgKGRyZXEpIHsKKwlpZiAoZGlzY2FyZCkKIAkJLyogdGhlcmUgd2FzIG9uZSB0b28gbWFueSAqLwotCQlkcmVxLT5yZXZpc2l0KGRyZXEsIDEpOwotCX0KKwkJZGlzY2FyZC0+cmV2aXNpdChkaXNjYXJkLCAxKTsKKwogCWlmICghdGVzdF9iaXQoQ0FDSEVfUEVORElORywgJml0ZW0tPmZsYWdzKSkgewogCQkvKiBtdXN0IGhhdmUganVzdCBiZWVuIHZhbGlkYXRlZC4uLiAqLwogCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaXRlbSk7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU1MSw3ICs1NjQsNyBAQAogCQkJZHJlcSA9IGxpc3RfZW50cnkobHAsIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEsIGhhc2gpOwogCQkJbHAgPSBscC0+bmV4dDsKIAkJCWlmIChkcmVxLT5pdGVtID09IGl0ZW0pIHsKLQkJCQlsaXN0X2RlbCgmZHJlcS0+aGFzaCk7CisJCQkJbGlzdF9kZWxfaW5pdCgmZHJlcS0+aGFzaCk7CiAJCQkJbGlzdF9tb3ZlKCZkcmVxLT5yZWNlbnQsICZwZW5kaW5nKTsKIAkJCQljYWNoZV9kZWZlcl9jbnQtLTsKIAkJCX0KQEAgLTU3Nyw3ICs1OTAsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRyZXEsIHRtcCwgJmNhY2hlX2RlZmVyX2xpc3QsIHJlY2VudCkgewogCQlpZiAoZHJlcS0+b3duZXIgPT0gb3duZXIpIHsKLQkJCWxpc3RfZGVsKCZkcmVxLT5oYXNoKTsKKwkJCWxpc3RfZGVsX2luaXQoJmRyZXEtPmhhc2gpOwogCQkJbGlzdF9tb3ZlKCZkcmVxLT5yZWNlbnQsICZwZW5kaW5nKTsKIAkJCWNhY2hlX2RlZmVyX2NudC0tOwogCQl9CkBAIC04ODcsNyArOTAwLDcgQEAKIAogCiAKLXN0YXRpYyB2b2lkIHF1ZXVlX2xvb3NlKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hlX2hlYWQgKmNoKQorc3RhdGljIHZvaWQgY2FjaGVfZGVxdWV1ZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsIHN0cnVjdCBjYWNoZV9oZWFkICpjaCkKIHsKIAlzdHJ1Y3QgY2FjaGVfcXVldWUgKmNxOwogCXNwaW5fbG9jaygmcXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IGZhYzBjYTkuLmE0MTdkNWEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAkJLnNyY2FkZHIgPSBhcmdzLT5zYWRkcmVzcywKIAkJLmRzdGFkZHIgPSBhcmdzLT5hZGRyZXNzLAogCQkuYWRkcmxlbiA9IGFyZ3MtPmFkZHJzaXplLAorCQkuYmNfeHBydCA9IGFyZ3MtPmJjX3hwcnQsCiAJfTsKIAljaGFyIHNlcnZlcm5hbWVbNDhdOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY19waXBlLmMgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKaW5kZXggN2Y2NzZiZC4uNDkyNzhmOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtODYwLDcgKzg2MCw4IEBACiAKIC8qKgogICogcnBjX2NyZWF0ZV9jbGllbnRfZGlyIC0gQ3JlYXRlIGEgbmV3IHJwY19jbGllbnQgZGlyZWN0b3J5IGluIHJwY19waXBlZnMKLSAqIEBwYXRoOiBwYXRoIGZyb20gdGhlIHJwY19waXBlZnMgcm9vdCB0byB0aGUgbmV3IGRpcmVjdG9yeQorICogQGRlbnRyeTogZGVudHJ5IGZyb20gdGhlIHJwY19waXBlZnMgcm9vdCB0byB0aGUgbmV3IGRpcmVjdG9yeQorICogQG5hbWU6ICZzdHJ1Y3QgcXN0ciBmb3IgdGhlIG5hbWUKICAqIEBycGNfY2xpZW50OiBycGMgY2xpZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZGlyZWN0b3J5CiAgKgogICogVGhpcyBjcmVhdGVzIGEgZGlyZWN0b3J5IGF0IHRoZSBnaXZlbiBAcGF0aCBhc3NvY2lhdGVkIHdpdGgKQEAgLTkzMCw3ICs5MzEsNyBAQAogLyoKICAqIHBvcHVsYXRlIHRoZSBmaWxlc3lzdGVtCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzX29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSBycGNfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBycGNfZGVzdHJveV9pbm9kZSwKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmMKaW5kZXggOGY0NTlhYi4uY2VmNzRiYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zY2hlZC5jCisrKyBiL25ldC9zdW5ycGMvc2NoZWQuYwpAQCAtMjEsNiArMjEsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KIAorI2luY2x1ZGUgInN1bnJwYy5oIgorCiAjaWZkZWYgUlBDX0RFQlVHCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQkJUlBDREJHX1NDSEVECiAjZGVmaW5lIFJQQ19UQVNLX01BR0lDX0lECTB4ZjAwYmFhCkBAIC03MTEsMTEgKzcxMyw2IEBACiAJX19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTsKIH0KIAotc3RydWN0IHJwY19idWZmZXIgewotCXNpemVfdAlsZW47Ci0JY2hhcglkYXRhW107Ci19OwotCiAvKioKICAqIHJwY19tYWxsb2MgLSBhbGxvY2F0ZSBhbiBSUEMgYnVmZmVyCiAgKiBAdGFzazogUlBDIHRhc2sgdGhhdCB3aWxsIHVzZSB0aGlzIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdW5ycGMuaCBiL25ldC9zdW5ycGMvc3VucnBjLmgKaW5kZXggNWQ5ZGQ3NC4uOTBjMjkyZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdW5ycGMuaAorKysgYi9uZXQvc3VucnBjL3N1bnJwYy5oCkBAIC0yNywxMSArMjcsMjUgQEAKICNpZm5kZWYgX05FVF9TVU5SUENfU1VOUlBDX0gKICNkZWZpbmUgX05FVF9TVU5SUENfU1VOUlBDX0gKIAorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorCisvKgorICogSGVhZGVyIGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcnBjIGJ1ZmZlcnMuCisgKi8KK3N0cnVjdCBycGNfYnVmZmVyIHsKKwlzaXplX3QJbGVuOworCWNoYXIJZGF0YVtdOworfTsKKwogc3RhdGljIGlubGluZSBpbnQgcnBjX3JlcGx5X2V4cGVjdGVkKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAlyZXR1cm4gKHRhc2stPnRrX21zZy5ycGNfcHJvYyAhPSBOVUxMKSAmJgogCQkodGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX2RlY29kZSAhPSBOVUxMKTsKIH0KIAoraW50IHN2Y19zZW5kX2NvbW1vbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgeGRyX2J1ZiAqeGRyLAorCQkgICAgc3RydWN0IHBhZ2UgKmhlYWRwYWdlLCB1bnNpZ25lZCBsb25nIGhlYWRvZmZzZXQsCisJCSAgICBzdHJ1Y3QgcGFnZSAqdGFpbHBhZ2UsIHVuc2lnbmVkIGxvbmcgdGFpbG9mZnNldCk7CisKICNlbmRpZiAvKiBfTkVUX1NVTlJQQ19TVU5SUENfSCAqLwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKaW5kZXggMjdkNDQzMy4uZGYxMjRmNyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiAJbXV0ZXhfaW5pdCgmeHBydC0+eHB0X211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmeHBydC0+eHB0X2xvY2spOwogCXNldF9iaXQoWFBUX0JVU1ksICZ4cHJ0LT54cHRfZmxhZ3MpOworCXJwY19pbml0X3dhaXRfcXVldWUoJnhwcnQtPnhwdF9iY19wZW5kaW5nLCAieHB0X2JjX3BlbmRpbmciKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y194cHJ0X2luaXQpOwogCkBAIC03MTAsMTAgKzcxMSw3IEBACiAJc3Bpbl91bmxvY2tfYmgoJnBvb2wtPnNwX2xvY2spOwogCiAJbGVuID0gMDsKLQlpZiAodGVzdF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+eHB0X2ZsYWdzKSkgewotCQlkcHJpbnRrKCJzdmNfcmVjdjogZm91bmQgWFBUX0NMT1NFXG4iKTsKLQkJc3ZjX2RlbGV0ZV94cHJ0KHhwcnQpOwotCX0gZWxzZSBpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCAmeHBydC0+eHB0X2ZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CiAJCXN0cnVjdCBzdmNfeHBydCAqbmV3eHB0OwogCQluZXd4cHQgPSB4cHJ0LT54cHRfb3BzLT54cG9fYWNjZXB0KHhwcnQpOwogCQlpZiAobmV3eHB0KSB7CkBAIC03MzksNyArNzM3LDcgQEAKIAkJCXN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdCk7CiAJCX0KIAkJc3ZjX3hwcnRfcmVjZWl2ZWQoeHBydCk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKCF0ZXN0X2JpdChYUFRfQ0xPU0UsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CiAJCWRwcmludGsoInN2Yzogc2VydmVyICVwLCBwb29sICV1LCB0cmFuc3BvcnQgJXAsIGludXNlPSVkXG4iLAogCQkJcnFzdHAsIHBvb2wtPnNwX2lkLCB4cHJ0LAogCQkJYXRvbWljX3JlYWQoJnhwcnQtPnhwdF9yZWYucmVmY291bnQpKTsKQEAgLTc1Miw2ICs3NTAsMTEgQEAKIAkJZHByaW50aygic3ZjOiBnb3QgbGVuPSVkXG4iLCBsZW4pOwogCX0KIAorCWlmICh0ZXN0X2JpdChYUFRfQ0xPU0UsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CisJCWRwcmludGsoInN2Y19yZWN2OiBmb3VuZCBYUFRfQ0xPU0VcbiIpOworCQlzdmNfZGVsZXRlX3hwcnQoeHBydCk7CisJfQorCiAJLyogTm8gZGF0YSwgaW5jb21wbGV0ZSAoVENQKSByZWFkLCBvciBhY2NlcHQoKSAqLwogCWlmIChsZW4gPT0gMCB8fCBsZW4gPT0gLUVBR0FJTikgewogCQlycXN0cC0+cnFfcmVzLmxlbiA9IDA7CkBAIC04MDgsNiArODExLDcgQEAKIAllbHNlCiAJCWxlbiA9IHhwcnQtPnhwdF9vcHMtPnhwb19zZW5kdG8ocnFzdHApOwogCW11dGV4X3VubG9jaygmeHBydC0+eHB0X211dGV4KTsKKwlycGNfd2FrZV91cCgmeHBydC0+eHB0X2JjX3BlbmRpbmcpOwogCXN2Y194cHJ0X3JlbGVhc2UocnFzdHApOwogCiAJaWYgKGxlbiA9PSAtRUNPTk5SRUZVU0VEIHx8IGxlbiA9PSAtRU5PVENPTk4gfHwgbGVuID09IC1FQUdBSU4pCkBAIC0xMTY2LDExICsxMTcwLDYgQEAKIAogCWRwcmludGsoInN2Y19wb29sX3N0YXRzX3N0YXJ0LCAqcGlkeD0ldVxuIiwgcGlkeCk7CiAKLQlsb2NrX2tlcm5lbCgpOwotCS8qIGJ1bXAgdXAgdGhlIHBzZXVkbyByZWZjb3VudCB3aGlsZSB0cmF2ZXJzaW5nICovCi0Jc3ZjX2dldChzZXJ2KTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KIAlpZiAoIXBpZHgpCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CiAJcmV0dXJuIChwaWR4ID4gc2Vydi0+c3ZfbnJwb29scyA/IE5VTEwgOiAmc2Vydi0+c3ZfcG9vbHNbcGlkeC0xXSk7CkBAIC0xMTk4LDEyICsxMTk3LDYgQEAKIAogc3RhdGljIHZvaWQgc3ZjX3Bvb2xfc3RhdHNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7Ci0Jc3RydWN0IHN2Y19zZXJ2ICpzZXJ2ID0gbS0+cHJpdmF0ZTsKLQotCWxvY2tfa2VybmVsKCk7Ci0JLyogdGhpcyBmdW5jdGlvbiByZWFsbHksIHJlYWxseSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBzdmNfcHV0KCkgKi8KLQlzdmNfZGVzdHJveShzZXJ2KTsKLQl1bmxvY2tfa2VybmVsKCk7CiB9CiAKIHN0YXRpYyBpbnQgc3ZjX3Bvb2xfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwppbmRleCA2Y2FmZmEzLi4xMTdmNjhhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKQEAgLTY2OCw2ICs2NjgsNyBAQAogCWNhc2UgMDoKIAkJKmdpcCA9IHVnLT5naTsKIAkJZ2V0X2dyb3VwX2luZm8oKmdpcCk7CisJCWNhY2hlX3B1dCgmdWctPmgsICZ1bml4X2dpZF9jYWNoZSk7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCAyMzEyOGVlLi5jY2M1ZTgzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N0YXRzLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnQuaD4KIAogI2RlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1NWQ1hQUlQKIApAQCAtMTUzLDQ5ICsxNTQsMjcgQEAKIH0KIAogLyoKLSAqIEdlbmVyaWMgc2VuZHRvIHJvdXRpbmUKKyAqIHNlbmQgcm91dGluZSBpbnRlbmRlZCB0byBiZSBzaGFyZWQgYnkgdGhlIGZvcmUtIGFuZCBiYWNrLWNoYW5uZWwKICAqLwotc3RhdGljIGludCBzdmNfc2VuZHRvKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfYnVmICp4ZHIpCitpbnQgc3ZjX3NlbmRfY29tbW9uKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCB4ZHJfYnVmICp4ZHIsCisJCSAgICBzdHJ1Y3QgcGFnZSAqaGVhZHBhZ2UsIHVuc2lnbmVkIGxvbmcgaGVhZG9mZnNldCwKKwkJICAgIHN0cnVjdCBwYWdlICp0YWlscGFnZSwgdW5zaWduZWQgbG9uZyB0YWlsb2Zmc2V0KQogewotCXN0cnVjdCBzdmNfc29jawkqc3ZzayA9Ci0JCWNvbnRhaW5lcl9vZihycXN0cC0+cnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTsKLQlzdHJ1Y3Qgc29ja2V0CSpzb2NrID0gc3Zzay0+c2tfc29jazsKLQlpbnQJCXNsZW47Ci0JdW5pb24gewotCQlzdHJ1Y3QgY21zZ2hkcgloZHI7Ci0JCWxvbmcJCWFsbFtTVkNfUEtUSU5GT19TUEFDRSAvIHNpemVvZihsb25nKV07Ci0JfSBidWZmZXI7Ci0Jc3RydWN0IGNtc2doZHIgKmNtaCA9ICZidWZmZXIuaGRyOwotCWludAkJbGVuID0gMDsKIAlpbnQJCXJlc3VsdDsKIAlpbnQJCXNpemU7CiAJc3RydWN0IHBhZ2UJKipwcGFnZSA9IHhkci0+cGFnZXM7CiAJc2l6ZV90CQliYXNlID0geGRyLT5wYWdlX2Jhc2U7CiAJdW5zaWduZWQgaW50CXBnbGVuID0geGRyLT5wYWdlX2xlbjsKIAl1bnNpZ25lZCBpbnQJZmxhZ3MgPSBNU0dfTU9SRTsKLQlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKKwlpbnQJCXNsZW47CisJaW50CQlsZW4gPSAwOwogCiAJc2xlbiA9IHhkci0+bGVuOwogCi0JaWYgKHJxc3RwLT5ycV9wcm90ID09IElQUFJPVE9fVURQKSB7Ci0JCXN0cnVjdCBtc2doZHIgbXNnID0gewotCQkJLm1zZ19uYW1lCT0gJnJxc3RwLT5ycV9hZGRyLAotCQkJLm1zZ19uYW1lbGVuCT0gcnFzdHAtPnJxX2FkZHJsZW4sCi0JCQkubXNnX2NvbnRyb2wJPSBjbWgsCi0JCQkubXNnX2NvbnRyb2xsZW4JPSBzaXplb2YoYnVmZmVyKSwKLQkJCS5tc2dfZmxhZ3MJPSBNU0dfTU9SRSwKLQkJfTsKLQotCQlzdmNfc2V0X2Ntc2dfZGF0YShycXN0cCwgY21oKTsKLQotCQlpZiAoc29ja19zZW5kbXNnKHNvY2ssICZtc2csIDApIDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KLQogCS8qIHNlbmQgaGVhZCAqLwogCWlmIChzbGVuID09IHhkci0+aGVhZFswXS5pb3ZfbGVuKQogCQlmbGFncyA9IDA7Ci0JbGVuID0ga2VybmVsX3NlbmRwYWdlKHNvY2ssIHJxc3RwLT5ycV9yZXNwYWdlc1swXSwgMCwKKwlsZW4gPSBrZXJuZWxfc2VuZHBhZ2Uoc29jaywgaGVhZHBhZ2UsIGhlYWRvZmZzZXQsCiAJCQkJICB4ZHItPmhlYWRbMF0uaW92X2xlbiwgZmxhZ3MpOwogCWlmIChsZW4gIT0geGRyLT5oZWFkWzBdLmlvdl9sZW4pCiAJCWdvdG8gb3V0OwpAQCAtMjE5LDE2ICsxOTgsNTggQEAKIAkJYmFzZSA9IDA7CiAJCXBwYWdlKys7CiAJfQorCiAJLyogc2VuZCB0YWlsICovCiAJaWYgKHhkci0+dGFpbFswXS5pb3ZfbGVuKSB7Ci0JCXJlc3VsdCA9IGtlcm5lbF9zZW5kcGFnZShzb2NrLCBycXN0cC0+cnFfcmVzcGFnZXNbMF0sCi0JCQkJCSAgICAgKCh1bnNpZ25lZCBsb25nKXhkci0+dGFpbFswXS5pb3ZfYmFzZSkKLQkJCQkJCSYgKFBBR0VfU0laRS0xKSwKLQkJCQkJICAgICB4ZHItPnRhaWxbMF0uaW92X2xlbiwgMCk7Ci0KKwkJcmVzdWx0ID0ga2VybmVsX3NlbmRwYWdlKHNvY2ssIHRhaWxwYWdlLCB0YWlsb2Zmc2V0LAorCQkJCSAgIHhkci0+dGFpbFswXS5pb3ZfbGVuLCAwKTsKIAkJaWYgKHJlc3VsdCA+IDApCiAJCQlsZW4gKz0gcmVzdWx0OwogCX0KKworb3V0OgorCXJldHVybiBsZW47Cit9CisKKworLyoKKyAqIEdlbmVyaWMgc2VuZHRvIHJvdXRpbmUKKyAqLworc3RhdGljIGludCBzdmNfc2VuZHRvKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfYnVmICp4ZHIpCit7CisJc3RydWN0IHN2Y19zb2NrCSpzdnNrID0KKwkJY29udGFpbmVyX29mKHJxc3RwLT5ycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOworCXN0cnVjdCBzb2NrZXQJKnNvY2sgPSBzdnNrLT5za19zb2NrOworCXVuaW9uIHsKKwkJc3RydWN0IGNtc2doZHIJaGRyOworCQlsb25nCQlhbGxbU1ZDX1BLVElORk9fU1BBQ0UgLyBzaXplb2YobG9uZyldOworCX0gYnVmZmVyOworCXN0cnVjdCBjbXNnaGRyICpjbWggPSAmYnVmZmVyLmhkcjsKKwlpbnQJCWxlbiA9IDA7CisJdW5zaWduZWQgbG9uZyB0YWlsb2ZmOworCXVuc2lnbmVkIGxvbmcgaGVhZG9mZjsKKwlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKKworCWlmIChycXN0cC0+cnFfcHJvdCA9PSBJUFBST1RPX1VEUCkgeworCQlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKwkJCS5tc2dfbmFtZQk9ICZycXN0cC0+cnFfYWRkciwKKwkJCS5tc2dfbmFtZWxlbgk9IHJxc3RwLT5ycV9hZGRybGVuLAorCQkJLm1zZ19jb250cm9sCT0gY21oLAorCQkJLm1zZ19jb250cm9sbGVuCT0gc2l6ZW9mKGJ1ZmZlciksCisJCQkubXNnX2ZsYWdzCT0gTVNHX01PUkUsCisJCX07CisKKwkJc3ZjX3NldF9jbXNnX2RhdGEocnFzdHAsIGNtaCk7CisKKwkJaWYgKHNvY2tfc2VuZG1zZyhzb2NrLCAmbXNnLCAwKSA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKKwl0YWlsb2ZmID0gKCh1bnNpZ25lZCBsb25nKXhkci0+dGFpbFswXS5pb3ZfYmFzZSkgJiAoUEFHRV9TSVpFLTEpOworCWhlYWRvZmYgPSAwOworCWxlbiA9IHN2Y19zZW5kX2NvbW1vbihzb2NrLCB4ZHIsIHJxc3RwLT5ycV9yZXNwYWdlc1swXSwgaGVhZG9mZiwKKwkJCSAgICAgICBycXN0cC0+cnFfcmVzcGFnZXNbMF0sIHRhaWxvZmYpOworCiBvdXQ6CiAJZHByaW50aygic3ZjOiBzb2NrZXQgJXAgc2VuZHRvKFslcCAlWnUuLi4gXSwgJWQpID0gJWQgKGFkZHIgJXMpXG4iLAogCQlzdnNrLCB4ZHItPmhlYWRbMF0uaW92X2Jhc2UsIHhkci0+aGVhZFswXS5pb3ZfbGVuLApAQCAtNDMyLDI5ICs0NTMsNDkgQEAKIH0KIAogLyoKKyAqIFNlZSBuZXQvaXB2Ni9pcF9zb2NrZ2x1ZS5jIDogaXBfY21zZ19yZWN2X3BrdGluZm8KKyAqLworc3RhdGljIGludCBzdmNfdWRwX2dldF9kZXN0X2FkZHJlc3M0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCQkJICAgICBzdHJ1Y3QgY21zZ2hkciAqY21oKQoreworCXN0cnVjdCBpbl9wa3RpbmZvICpwa2kgPSBDTVNHX0RBVEEoY21oKTsKKwlpZiAoY21oLT5jbXNnX3R5cGUgIT0gSVBfUEtUSU5GTykKKwkJcmV0dXJuIDA7CisJcnFzdHAtPnJxX2RhZGRyLmFkZHIuc19hZGRyID0gcGtpLT5pcGlfc3BlY19kc3Quc19hZGRyOworCXJldHVybiAxOworfQorCisvKgorICogU2VlIG5ldC9pcHY2L2RhdGFncmFtLmMgOiBkYXRhZ3JhbV9yZWN2X2N0bAorICovCitzdGF0aWMgaW50IHN2Y191ZHBfZ2V0X2Rlc3RfYWRkcmVzczYoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJCQkgICAgIHN0cnVjdCBjbXNnaGRyICpjbWgpCit7CisJc3RydWN0IGluNl9wa3RpbmZvICpwa2kgPSBDTVNHX0RBVEEoY21oKTsKKwlpZiAoY21oLT5jbXNnX3R5cGUgIT0gSVBWNl9QS1RJTkZPKQorCQlyZXR1cm4gMDsKKwlpcHY2X2FkZHJfY29weSgmcnFzdHAtPnJxX2RhZGRyLmFkZHI2LCAmcGtpLT5pcGk2X2FkZHIpOworCXJldHVybiAxOworfQorCisvKgogICogQ29weSB0aGUgVURQIGRhdGFncmFtJ3MgZGVzdGluYXRpb24gYWRkcmVzcyB0byB0aGUgcnFzdHAgc3RydWN0dXJlLgogICogVGhlICdkZXN0aW5hdGlvbicgYWRkcmVzcyBpbiB0aGlzIGNhc2UgaXMgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhlCiAgKiBwZWVyIHNlbnQgdGhlIGRhdGFncmFtLCBpLmUuIG91ciBsb2NhbCBhZGRyZXNzLiBGb3IgbXVsdGlob21lZAogICogaG9zdHMsIHRoaXMgY2FuIGNoYW5nZSBmcm9tIG1zZyB0byBtc2cuIE5vdGUgdGhhdCBvbmx5IHRoZSBJUAogICogYWRkcmVzcyBjaGFuZ2VzLCB0aGUgcG9ydCBudW1iZXIgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KICAqLwotc3RhdGljIHZvaWQgc3ZjX3VkcF9nZXRfZGVzdF9hZGRyZXNzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCi0JCQkJICAgICBzdHJ1Y3QgY21zZ2hkciAqY21oKQorc3RhdGljIGludCBzdmNfdWRwX2dldF9kZXN0X2FkZHJlc3Moc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJCQkgICAgc3RydWN0IGNtc2doZHIgKmNtaCkKIHsKLQlzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPQotCQljb250YWluZXJfb2YocnFzdHAtPnJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7Ci0Jc3dpdGNoIChzdnNrLT5za19zay0+c2tfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOiB7Ci0JCXN0cnVjdCBpbl9wa3RpbmZvICpwa2kgPSBDTVNHX0RBVEEoY21oKTsKLQkJcnFzdHAtPnJxX2RhZGRyLmFkZHIuc19hZGRyID0gcGtpLT5pcGlfc3BlY19kc3Quc19hZGRyOwotCQlicmVhazsKLQkJfQotCWNhc2UgQUZfSU5FVDY6IHsKLQkJc3RydWN0IGluNl9wa3RpbmZvICpwa2kgPSBDTVNHX0RBVEEoY21oKTsKLQkJaXB2Nl9hZGRyX2NvcHkoJnJxc3RwLT5ycV9kYWRkci5hZGRyNiwgJnBraS0+aXBpNl9hZGRyKTsKLQkJYnJlYWs7Ci0JCX0KKwlzd2l0Y2ggKGNtaC0+Y21zZ19sZXZlbCkgeworCWNhc2UgU09MX0lQOgorCQlyZXR1cm4gc3ZjX3VkcF9nZXRfZGVzdF9hZGRyZXNzNChycXN0cCwgY21oKTsKKwljYXNlIFNPTF9JUFY2OgorCQlyZXR1cm4gc3ZjX3VkcF9nZXRfZGVzdF9hZGRyZXNzNihycXN0cCwgY21oKTsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTUzMSwxNiArNTcyLDE1IEBACiAKIAlycXN0cC0+cnFfcHJvdCA9IElQUFJPVE9fVURQOwogCi0JaWYgKGNtaC0+Y21zZ19sZXZlbCAhPSBJUFBST1RPX0lQIHx8Ci0JICAgIGNtaC0+Y21zZ190eXBlICE9IElQX1BLVElORk8pIHsKKwlpZiAoIXN2Y191ZHBfZ2V0X2Rlc3RfYWRkcmVzcyhycXN0cCwgY21oKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKCJycGNzdmM6IHJlY2VpdmVkIHVua25vd24gY29udHJvbCBtZXNzYWdlOiIKLQkJCSAgICAgICAiJWQvJWRcbiIsCi0JCQkgICAgICAgY21oLT5jbXNnX2xldmVsLCBjbWgtPmNtc2dfdHlwZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJInN2YzogcmVjZWl2ZWQgdW5rbm93biBjb250cm9sIG1lc3NhZ2UgJWQvJWQ7ICIKKwkJCQkiZHJvcHBpbmcgUlBDIHJlcGx5IGRhdGFncmFtXG4iLAorCQkJCQljbWgtPmNtc2dfbGV2ZWwsIGNtaC0+Y21zZ190eXBlKTsKIAkJc2tiX2ZyZWVfZGF0YWdyYW0oc3Zzay0+c2tfc2ssIHNrYik7CiAJCXJldHVybiAwOwogCX0KLQlzdmNfdWRwX2dldF9kZXN0X2FkZHJlc3MocnFzdHAsIGNtaCk7CiAKIAlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7CiAJCS8qIHdlIGhhdmUgdG8gY29weSAqLwpAQCAtNjUxLDggKzY5MSw3IEBACiAKIHN0YXRpYyB2b2lkIHN2Y191ZHBfaW5pdChzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfc2VydiAqc2VydikKIHsKLQlpbnQgb25lID0gMTsKLQltbV9zZWdtZW50X3Qgb2xkZnM7CisJaW50IGVyciwgbGV2ZWwsIG9wdG5hbWUsIG9uZSA9IDE7CiAKIAlzdmNfeHBydF9pbml0KCZzdmNfdWRwX2NsYXNzLCAmc3Zzay0+c2tfeHBydCwgc2Vydik7CiAJY2xlYXJfYml0KFhQVF9DQUNIRV9BVVRILCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpOwpAQCAtNjcxLDEyICs3MTAsMjIgQEAKIAlzZXRfYml0KFhQVF9EQVRBLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpOwogCXNldF9iaXQoWFBUX0NITkdCVUYsICZzdnNrLT5za194cHJ0LnhwdF9mbGFncyk7CiAKLQlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhLRVJORUxfRFMpOwogCS8qIG1ha2Ugc3VyZSB3ZSBnZXQgZGVzdGluYXRpb24gYWRkcmVzcyBpbmZvICovCi0Jc3Zzay0+c2tfc29jay0+b3BzLT5zZXRzb2Nrb3B0KHN2c2stPnNrX3NvY2ssIElQUFJPVE9fSVAsIElQX1BLVElORk8sCi0JCQkJICAgICAgIChjaGFyIF9fdXNlciAqKSZvbmUsIHNpemVvZihvbmUpKTsKLQlzZXRfZnMob2xkZnMpOworCXN3aXRjaCAoc3Zzay0+c2tfc2stPnNrX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJbGV2ZWwgPSBTT0xfSVA7CisJCW9wdG5hbWUgPSBJUF9QS1RJTkZPOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlsZXZlbCA9IFNPTF9JUFY2OworCQlvcHRuYW1lID0gSVBWNl9SRUNWUEtUSU5GTzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCWVyciA9IGtlcm5lbF9zZXRzb2Nrb3B0KHN2c2stPnNrX3NvY2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkoY2hhciAqKSZvbmUsIHNpemVvZihvbmUpKTsKKwlkcHJpbnRrKCJzdmM6IGtlcm5lbF9zZXRzb2Nrb3B0IHJldHVybmVkICVkXG4iLCBlcnIpOwogfQogCiAvKgpAQCAtODI2LDIxICs4NzUsMTUgQEAKIH0KIAogLyoKLSAqIFJlY2VpdmUgZGF0YSBmcm9tIGEgVENQIHNvY2tldC4KKyAqIFJlY2VpdmUgZGF0YS4KKyAqIElmIHdlIGhhdmVuJ3QgZ290dGVuIHRoZSByZWNvcmQgbGVuZ3RoIHlldCwgZ2V0IHRoZSBuZXh0IGZvdXIgYnl0ZXMuCisgKiBPdGhlcndpc2UgdHJ5IHRvIGdvYmJsZSB1cCBhcyBtdWNoIGFzIHBvc3NpYmxlIHVwIHRvIHRoZSBjb21wbGV0ZQorICogcmVjb3JkIGxlbmd0aC4KICAqLwotc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCitzdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9yZWNvcmQoc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewotCXN0cnVjdCBzdmNfc29jawkqc3ZzayA9Ci0JCWNvbnRhaW5lcl9vZihycXN0cC0+cnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTsKIAlzdHJ1Y3Qgc3ZjX3NlcnYJKnNlcnYgPSBzdnNrLT5za194cHJ0LnhwdF9zZXJ2ZXI7Ci0JaW50CQlsZW47Ci0Jc3RydWN0IGt2ZWMgKnZlYzsKLQlpbnQgcG51bSwgdmxlbjsKLQotCWRwcmludGsoInN2YzogdGNwX3JlY3YgJXAgZGF0YSAlZCBjb25uICVkIGNsb3NlICVkXG4iLAotCQlzdnNrLCB0ZXN0X2JpdChYUFRfREFUQSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKSwKLQkJdGVzdF9iaXQoWFBUX0NPTk4sICZzdnNrLT5za194cHJ0LnhwdF9mbGFncyksCi0JCXRlc3RfYml0KFhQVF9DTE9TRSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKSk7CisJaW50IGxlbjsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWFBUX0NITkdCVUYsICZzdnNrLT5za194cHJ0LnhwdF9mbGFncykpCiAJCS8qIHNuZGJ1ZiBuZWVkcyB0byBoYXZlIHJvb20gZm9yIG9uZSByZXF1ZXN0CkBAIC04NjEsMTAgKzkwNCw2IEBACiAKIAljbGVhcl9iaXQoWFBUX0RBVEEsICZzdnNrLT5za194cHJ0LnhwdF9mbGFncyk7CiAKLQkvKiBSZWNlaXZlIGRhdGEuIElmIHdlIGhhdmVuJ3QgZ290IHRoZSByZWNvcmQgbGVuZ3RoIHlldCwgZ2V0Ci0JICogdGhlIG5leHQgZm91ciBieXRlcy4gT3RoZXJ3aXNlIHRyeSB0byBnb2JibGUgdXAgYXMgbXVjaCBhcwotCSAqIHBvc3NpYmxlIHVwIHRvIHRoZSBjb21wbGV0ZSByZWNvcmQgbGVuZ3RoLgotCSAqLwogCWlmIChzdnNrLT5za190Y3BsZW4gPCBzaXplb2YocnBjX2ZyYWdoZHIpKSB7CiAJCWludAkJd2FudCA9IHNpemVvZihycGNfZnJhZ2hkcikgLSBzdnNrLT5za190Y3BsZW47CiAJCXN0cnVjdCBrdmVjCWlvdjsKQEAgLTg3OSw3ICs5MTgsNyBAQAogCQkJZHByaW50aygic3ZjOiBzaG9ydCByZWN2ZnJvbSB3aGlsZSByZWFkaW5nIHJlY29yZCAiCiAJCQkJImxlbmd0aCAoJWQgb2YgJWQpXG4iLCBsZW4sIHdhbnQpOwogCQkJc3ZjX3hwcnRfcmVjZWl2ZWQoJnN2c2stPnNrX3hwcnQpOwotCQkJcmV0dXJuIC1FQUdBSU47IC8qIHJlY29yZCBoZWFkZXIgbm90IGNvbXBsZXRlICovCisJCQlnb3RvIGVycl9hZ2FpbjsgLyogcmVjb3JkIGhlYWRlciBub3QgY29tcGxldGUgKi8KIAkJfQogCiAJCXN2c2stPnNrX3JlY2xlbiA9IG50b2hsKHN2c2stPnNrX3JlY2xlbik7CkBAIC04OTQsNiArOTMzLDcgQEAKIAkJCQkJInBlciByZWNvcmQgbm90IHN1cHBvcnRlZFxuIik7CiAJCQlnb3RvIGVycl9kZWxldGU7CiAJCX0KKwogCQlzdnNrLT5za19yZWNsZW4gJj0gUlBDX0ZSQUdNRU5UX1NJWkVfTUFTSzsKIAkJZHByaW50aygic3ZjOiBUQ1AgcmVjb3JkLCAlZCBieXRlc1xuIiwgc3Zzay0+c2tfcmVjbGVuKTsKIAkJaWYgKHN2c2stPnNrX3JlY2xlbiA+IHNlcnYtPnN2X21heF9tZXNnKSB7CkBAIC05MTQsMTcgKzk1NCwxMjEgQEAKIAkJZHByaW50aygic3ZjOiBpbmNvbXBsZXRlIFRDUCByZWNvcmQgKCVkIG9mICVkKVxuIiwKIAkJCWxlbiwgc3Zzay0+c2tfcmVjbGVuKTsKIAkJc3ZjX3hwcnRfcmVjZWl2ZWQoJnN2c2stPnNrX3hwcnQpOwotCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVjb3JkIG5vdCBjb21wbGV0ZSAqLworCQlnb3RvIGVycl9hZ2FpbjsJLyogcmVjb3JkIG5vdCBjb21wbGV0ZSAqLwogCX0KIAlsZW4gPSBzdnNrLT5za19yZWNsZW47CiAJc2V0X2JpdChYUFRfREFUQSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKTsKIAorCXJldHVybiBsZW47CisgZXJyb3I6CisJaWYgKGxlbiA9PSAtRUFHQUlOKSB7CisJCWRwcmludGsoIlJQQzogVENQIHJlY3ZfcmVjb3JkIGdvdCBFQUdBSU5cbiIpOworCQlzdmNfeHBydF9yZWNlaXZlZCgmc3Zzay0+c2tfeHBydCk7CisJfQorCXJldHVybiBsZW47CisgZXJyX2RlbGV0ZToKKwlzZXRfYml0KFhQVF9DTE9TRSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKTsKKyBlcnJfYWdhaW46CisJcmV0dXJuIC1FQUdBSU47Cit9CisKK3N0YXRpYyBpbnQgc3ZjX3Byb2Nlc3NfY2FsbGRpcihzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCQkgICAgICAgc3RydWN0IHJwY19ycXN0ICoqcmVxcHAsIHN0cnVjdCBrdmVjICp2ZWMpCit7CisJc3RydWN0IHJwY19ycXN0ICpyZXEgPSBOVUxMOworCXUzMiAqcDsKKwl1MzIgeGlkOworCXUzMiBjYWxsZGlyOworCWludCBsZW47CisKKwlsZW4gPSBzdmNfcmVjdmZyb20ocnFzdHAsIHZlYywgMSwgOCk7CisJaWYgKGxlbiA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlwID0gKHUzMiAqKXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfYmFzZTsKKwl4aWQgPSAqcCsrOworCWNhbGxkaXIgPSAqcDsKKworCWlmIChjYWxsZGlyID09IDApIHsKKwkJLyogUkVRVUVTVCBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSAqLworCQl2ZWNbMF0gPSBycXN0cC0+cnFfYXJnLmhlYWRbMF07CisJfSBlbHNlIHsKKwkJLyogUkVQTFkgKi8KKwkJaWYgKHN2c2stPnNrX2JjX3hwcnQpCisJCQlyZXEgPSB4cHJ0X2xvb2t1cF9ycXN0KHN2c2stPnNrX2JjX3hwcnQsIHhpZCk7CisKKwkJaWYgKCFyZXEpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCSIlczogR290IHVucmVjb2duaXplZCByZXBseTogIgorCQkJCSJjYWxsZGlyIDB4JXggc2tfYmNfeHBydCAlcCB4aWQgJTA4eFxuIiwKKwkJCQlfX2Z1bmNfXywgbnRvaGwoY2FsbGRpciksCisJCQkJc3Zzay0+c2tfYmNfeHBydCwgeGlkKTsKKwkJCXZlY1swXSA9IHJxc3RwLT5ycV9hcmcuaGVhZFswXTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbWVtY3B5KCZyZXEtPnJxX3ByaXZhdGVfYnVmLCAmcmVxLT5ycV9yY3ZfYnVmLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB4ZHJfYnVmKSk7CisJCS8qIGNvcHkgdGhlIHhpZCBhbmQgY2FsbCBkaXJlY3Rpb24gKi8KKwkJbWVtY3B5KHJlcS0+cnFfcHJpdmF0ZV9idWYuaGVhZFswXS5pb3ZfYmFzZSwKKwkJICAgICAgIHJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfYmFzZSwgOCk7CisJCXZlY1swXSA9IHJlcS0+cnFfcHJpdmF0ZV9idWYuaGVhZFswXTsKKwl9Cisgb3V0OgorCXZlY1swXS5pb3ZfYmFzZSArPSA4OworCXZlY1swXS5pb3ZfbGVuIC09IDg7CisJbGVuID0gc3Zzay0+c2tfcmVjbGVuIC0gODsKKyBlcnJvcjoKKwkqcmVxcHAgPSByZXE7CisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFJlY2VpdmUgZGF0YSBmcm9tIGEgVENQIHNvY2tldC4KKyAqLworc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCit7CisJc3RydWN0IHN2Y19zb2NrCSpzdnNrID0KKwkJY29udGFpbmVyX29mKHJxc3RwLT5ycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOworCXN0cnVjdCBzdmNfc2Vydgkqc2VydiA9IHN2c2stPnNrX3hwcnQueHB0X3NlcnZlcjsKKwlpbnQJCWxlbjsKKwlzdHJ1Y3Qga3ZlYyAqdmVjOworCWludCBwbnVtLCB2bGVuOworCXN0cnVjdCBycGNfcnFzdCAqcmVxID0gTlVMTDsKKworCWRwcmludGsoInN2YzogdGNwX3JlY3YgJXAgZGF0YSAlZCBjb25uICVkIGNsb3NlICVkXG4iLAorCQlzdnNrLCB0ZXN0X2JpdChYUFRfREFUQSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKSwKKwkJdGVzdF9iaXQoWFBUX0NPTk4sICZzdnNrLT5za194cHJ0LnhwdF9mbGFncyksCisJCXRlc3RfYml0KFhQVF9DTE9TRSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKSk7CisKKwlsZW4gPSBzdmNfdGNwX3JlY3ZfcmVjb3JkKHN2c2ssIHJxc3RwKTsKKwlpZiAobGVuIDwgMCkKKwkJZ290byBlcnJvcjsKKwogCXZlYyA9IHJxc3RwLT5ycV92ZWM7CiAJdmVjWzBdID0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdOwogCXZsZW4gPSBQQUdFX1NJWkU7CisKKwkvKgorCSAqIFdlIGhhdmUgZW5vdWdoIGRhdGEgZm9yIHRoZSB3aG9sZSB0Y3AgcmVjb3JkLiBMZXQncyB0cnkgYW5kIHJlYWQgdGhlCisJICogZmlyc3QgOCBieXRlcyB0byBnZXQgdGhlIHhpZCBhbmQgdGhlIGNhbGwgZGlyZWN0aW9uLiBXZSBjYW4gdXNlIHRoaXMKKwkgKiB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSBjYWxsIG9yIGEgcmVwbHkgdG8gYSBjYWxsYmFjay4gSWYKKwkgKiBza19yZWNsZW4gaXMgPCA4ICh4aWQgYW5kIGNhbGxkaXIpLCB0aGVuIHRoaXMgaXMgYSBtYWxmb3JtZWQgcGFja2V0LgorCSAqIEluIHRoYXQgY2FzZSwgZG9uJ3QgYm90aGVyIHdpdGggdGhlIGNhbGxkaXIgYW5kIGp1c3QgcmVhZCB0aGUgZGF0YS4KKwkgKiBJdCB3aWxsIGJlIHJlamVjdGVkIGluIHN2Y19wcm9jZXNzLgorCSAqLworCWlmIChsZW4gPj0gOCkgeworCQlsZW4gPSBzdmNfcHJvY2Vzc19jYWxsZGlyKHN2c2ssIHJxc3RwLCAmcmVxLCB2ZWMpOworCQlpZiAobGVuIDwgMCkKKwkJCWdvdG8gZXJyX2FnYWluOworCQl2bGVuIC09IDg7CisJfQorCiAJcG51bSA9IDE7CiAJd2hpbGUgKHZsZW4gPCBsZW4pIHsKLQkJdmVjW3BudW1dLmlvdl9iYXNlID0gcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9wYWdlc1twbnVtXSk7CisJCXZlY1twbnVtXS5pb3ZfYmFzZSA9IChyZXEpID8KKwkJCXBhZ2VfYWRkcmVzcyhyZXEtPnJxX3ByaXZhdGVfYnVmLnBhZ2VzW3BudW0gLSAxXSkgOgorCQkJcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9wYWdlc1twbnVtXSk7CiAJCXZlY1twbnVtXS5pb3ZfbGVuID0gUEFHRV9TSVpFOwogCQlwbnVtKys7CiAJCXZsZW4gKz0gUEFHRV9TSVpFOwpAQCAtOTM0LDggKzEwNzgsMTggQEAKIAkvKiBOb3cgcmVjZWl2ZSBkYXRhICovCiAJbGVuID0gc3ZjX3JlY3Zmcm9tKHJxc3RwLCB2ZWMsIHBudW0sIGxlbik7CiAJaWYgKGxlbiA8IDApCi0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyX2FnYWluOwogCisJLyoKKwkgKiBBY2NvdW50IGZvciB0aGUgOCBieXRlcyB3ZSByZWFkIGVhcmxpZXIKKwkgKi8KKwlsZW4gKz0gODsKKworCWlmIChyZXEpIHsKKwkJeHBydF9jb21wbGV0ZV9ycXN0KHJlcS0+cnFfdGFzaywgbGVuKTsKKwkJbGVuID0gMDsKKwkJZ290byBvdXQ7CisJfQogCWRwcmludGsoInN2YzogVENQIGNvbXBsZXRlIHJlY29yZCAoJWQgYnl0ZXMpXG4iLCBsZW4pOwogCXJxc3RwLT5ycV9hcmcubGVuID0gbGVuOwogCXJxc3RwLT5ycV9hcmcucGFnZV9iYXNlID0gMDsKQEAgLTk0OSw2ICsxMTAzLDcgQEAKIAlycXN0cC0+cnFfeHBydF9jdHh0ICAgPSBOVUxMOwogCXJxc3RwLT5ycV9wcm90CSAgICAgID0gSVBQUk9UT19UQ1A7CiAKK291dDoKIAkvKiBSZXNldCBUQ1AgcmVhZCBpbmZvICovCiAJc3Zzay0+c2tfcmVjbGVuID0gMDsKIAlzdnNrLT5za190Y3BsZW4gPSAwOwpAQCAtOTYwLDIxICsxMTE1LDE5IEBACiAKIAlyZXR1cm4gbGVuOwogCi0gZXJyX2RlbGV0ZToKLQlzZXRfYml0KFhQVF9DTE9TRSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKTsKLQlyZXR1cm4gLUVBR0FJTjsKLQotIGVycm9yOgorZXJyX2FnYWluOgogCWlmIChsZW4gPT0gLUVBR0FJTikgewogCQlkcHJpbnRrKCJSUEM6IFRDUCByZWN2ZnJvbSBnb3QgRUFHQUlOXG4iKTsKIAkJc3ZjX3hwcnRfcmVjZWl2ZWQoJnN2c2stPnNrX3hwcnQpOwotCX0gZWxzZSB7CisJCXJldHVybiBsZW47CisJfQorZXJyb3I6CisJaWYgKGxlbiAhPSAtRUFHQUlOKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHJlY3Zmcm9tIHJldHVybmVkIGVycm5vICVkXG4iLAogCQkgICAgICAgc3Zzay0+c2tfeHBydC54cHRfc2VydmVyLT5zdl9uYW1lLCAtbGVuKTsKLQkJZ290byBlcnJfZGVsZXRlOworCQlzZXRfYml0KFhQVF9DTE9TRSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKTsKIAl9Ci0KLQlyZXR1cm4gbGVuOworCXJldHVybiAtRUFHQUlOOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYwppbmRleCBmNDEyYTg1Li5mZDQ2ZDQyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnQuYwpAQCAtODMyLDYgKzgzMiwxMSBAQAogCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHhwcnRfaGFzX3RpbWVyKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlyZXR1cm4geHBydC0+aWRsZV90aW1lb3V0ICE9IDA7Cit9CisKIC8qKgogICogeHBydF9wcmVwYXJlX3RyYW5zbWl0IC0gcmVzZXJ2ZSB0aGUgdHJhbnNwb3J0IGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdAogICogQHRhc2s6IFJQQyB0YXNrIGFib3V0IHRvIHNlbmQgYSByZXF1ZXN0CkBAIC0xMDEzLDcgKzEwMTgsNyBAQAogCWlmICghbGlzdF9lbXB0eSgmcmVxLT5ycV9saXN0KSkKIAkJbGlzdF9kZWwoJnJlcS0+cnFfbGlzdCk7CiAJeHBydC0+bGFzdF91c2VkID0gamlmZmllczsKLQlpZiAobGlzdF9lbXB0eSgmeHBydC0+cmVjdikpCisJaWYgKGxpc3RfZW1wdHkoJnhwcnQtPnJlY3YpICYmIHhwcnRfaGFzX3RpbWVyKHhwcnQpKQogCQltb2RfdGltZXIoJnhwcnQtPnRpbWVyLAogCQkJCXhwcnQtPmxhc3RfdXNlZCArIHhwcnQtPmlkbGVfdGltZW91dCk7CiAJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKQEAgLTEwODIsOCArMTA4NywxMSBAQAogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiAJSU5JVF9XT1JLKCZ4cHJ0LT50YXNrX2NsZWFudXAsIHhwcnRfYXV0b2Nsb3NlKTsKLQlzZXR1cF90aW1lcigmeHBydC0+dGltZXIsIHhwcnRfaW5pdF9hdXRvZGlzY29ubmVjdCwKLQkJCSh1bnNpZ25lZCBsb25nKXhwcnQpOworCWlmICh4cHJ0X2hhc190aW1lcih4cHJ0KSkKKwkJc2V0dXBfdGltZXIoJnhwcnQtPnRpbWVyLCB4cHJ0X2luaXRfYXV0b2Rpc2Nvbm5lY3QsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpeHBydCk7CisJZWxzZQorCQlpbml0X3RpbWVyKCZ4cHJ0LT50aW1lcik7CiAJeHBydC0+bGFzdF91c2VkID0gamlmZmllczsKIAl4cHJ0LT5jd25kID0gUlBDX0lOSVRDV05EOwogCXhwcnQtPmJpbmRfaW5kZXggPSAwOwpAQCAtMTEwMiw3ICsxMTEwLDYgQEAKIAogCWRwcmludGsoIlJQQzogICAgICAgY3JlYXRlZCB0cmFuc3BvcnQgJXAgd2l0aCAldSBzbG90c1xuIiwgeHBydCwKIAkJCXhwcnQtPm1heF9yZXFzKTsKLQogCXJldHVybiB4cHJ0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwppbmRleCA1MTUxZjlmLi4wY2Y1ZThjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKQEAgLTczMCwxMiArNzMwLDEyIEBACiAJCWdvdG8gZXJyOwogCiAJbXIgPSBpYl9hbGxvY19mYXN0X3JlZ19tcih4cHJ0LT5zY19wZCwgUlBDU1ZDX01BWFBBR0VTKTsKLQlpZiAoIW1yKQorCWlmIChJU19FUlIobXIpKQogCQlnb3RvIGVycl9mcmVlX2ZybXI7CiAKIAlwbCA9IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAogCQkJCQkgUlBDU1ZDX01BWFBBR0VTKTsKLQlpZiAoIXBsKQorCWlmIChJU19FUlIocGwpKQogCQlnb3RvIGVycl9mcmVlX21yOwogCiAJZnJtci0+bXIgPSBtcjsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCA2MjQzOGYzLi4zN2M1NDc1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3Zjc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0c29jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpZmRlZiBDT05GSUdfTkZTX1Y0XzEKQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogCisjaW5jbHVkZSAic3VucnBjLmgiCiAvKgogICogeHBydHNvY2sgdHVuYWJsZXMKICAqLwpAQCAtNzcxLDYgKzc3Myw3IEBACiAJZHByaW50aygiUlBDOiAgICAgICB4c19jbG9zZSB4cHJ0ICVwXG4iLCB4cHJ0KTsKIAogCXhzX3Jlc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpOworCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPSAwOwogCiAJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CiAJY2xlYXJfYml0KFhQUlRfQ09OTkVDVElPTl9BQk9SVCwgJnhwcnQtPnN0YXRlKTsKQEAgLTEyNjIsNiArMTI2NSwxMiBAQAogCWlmICh4cHJ0LT5zaHV0ZG93bikKIAkJZ290byBvdXQ7CiAKKwkvKiBBbnkgZGF0YSBtZWFucyB3ZSBoYWQgYSB1c2VmdWwgY29udmVyc2F0aW9uLCBzbworCSAqIHRoZSB3ZSBkb24ndCBuZWVkIHRvIGRlbGF5IHRoZSBuZXh0IHJlY29ubmVjdAorCSAqLworCWlmICh4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0KQorCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gMDsKKwogCS8qIFdlIHVzZSByZF9kZXNjIHRvIHBhc3Mgc3RydWN0IHhwcnQgdG8geHNfdGNwX2RhdGFfcmVjdiAqLwogCXJkX2Rlc2MuYXJnLmRhdGEgPSB4cHJ0OwogCWRvIHsKQEAgLTIwMzIsNiArMjA0MSw4IEBACiAJCQkJICAgJnRyYW5zcG9ydC0+Y29ubmVjdF93b3JrZXIsCiAJCQkJICAgeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCk7CiAJCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPDw9IDE7CisJCWlmICh4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0IDwgWFNfVENQX0lOSVRfUkVFU1RfVE8pCisJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gWFNfVENQX0lOSVRfUkVFU1RfVE87CiAJCWlmICh4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID4gWFNfVENQX01BWF9SRUVTVF9UTykKIAkJCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPSBYU19UQ1BfTUFYX1JFRVNUX1RPOwogCX0gZWxzZSB7CkBAIC0yMDk4LDYgKzIxMDksMTM0IEBACiAJCQl4cHJ0LT5zdGF0LmJrbG9nX3UpOwogfQogCisvKgorICogQWxsb2NhdGUgYSBidW5jaCBvZiBwYWdlcyBmb3IgYSBzY3JhdGNoIGJ1ZmZlciBmb3IgdGhlIHJwYyBjb2RlLiBUaGUgcmVhc29uCisgKiB3ZSBhbGxvY2F0ZSBwYWdlcyBpbnN0ZWFkIGRvaW5nIGEga21hbGxvYyBsaWtlIHJwY19tYWxsb2MgaXMgYmVjYXVzZSB3ZSB3YW50CisgKiB0byB1c2UgdGhlIHNlcnZlciBzaWRlIHNlbmQgcm91dGluZXMuCisgKi8KK3ZvaWQgKmJjX21hbGxvYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBycGNfYnVmZmVyICpidWY7CisKKwlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3QgcnBjX2J1ZmZlcikpOworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKworCWJ1ZiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlidWYtPmxlbiA9IFBBR0VfU0laRTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBzcGFjZSBhbGxvY2F0ZWQgaW4gdGhlIGJjX2FsbG9jIHJvdXRpbmUKKyAqLwordm9pZCBiY19mcmVlKHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcnBjX2J1ZmZlciAqYnVmOworCisJaWYgKCFidWZmZXIpCisJCXJldHVybjsKKworCWJ1ZiA9IGNvbnRhaW5lcl9vZihidWZmZXIsIHN0cnVjdCBycGNfYnVmZmVyLCBkYXRhKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKK30KKworLyoKKyAqIFVzZSB0aGUgc3ZjX3NvY2sgdG8gc2VuZCB0aGUgY2FsbGJhY2suIE11c3QgYmUgY2FsbGVkIHdpdGggc3Zzay0+c2tfbXV0ZXgKKyAqIGhlbGQuIEJvcnJvd3MgaGVhdmlseSBmcm9tIHN2Y190Y3Bfc2VuZHRvIGFuZCB4c190Y3Bfc2VuZF9yZXF1ZXN0LgorICovCitzdGF0aWMgaW50IGJjX3NlbmR0byhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCB4ZHJfYnVmICp4YnVmcCA9ICZyZXEtPnJxX3NuZF9idWY7CisJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gcmVxLT5ycV94cHJ0OworCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCA9CisJCQkJY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CisJdW5zaWduZWQgbG9uZyBoZWFkb2ZmOworCXVuc2lnbmVkIGxvbmcgdGFpbG9mZjsKKworCS8qCisJICogU2V0IHVwIHRoZSBycGMgaGVhZGVyIGFuZCByZWNvcmQgbWFya2VyIHN0dWZmCisJICovCisJeHNfZW5jb2RlX3RjcF9yZWNvcmRfbWFya2VyKHhidWZwKTsKKworCXRhaWxvZmYgPSAodW5zaWduZWQgbG9uZyl4YnVmcC0+dGFpbFswXS5pb3ZfYmFzZSAmIH5QQUdFX01BU0s7CisJaGVhZG9mZiA9ICh1bnNpZ25lZCBsb25nKXhidWZwLT5oZWFkWzBdLmlvdl9iYXNlICYgflBBR0VfTUFTSzsKKwlsZW4gPSBzdmNfc2VuZF9jb21tb24oc29jaywgeGJ1ZnAsCisJCQkgICAgICB2aXJ0X3RvX3BhZ2UoeGJ1ZnAtPmhlYWRbMF0uaW92X2Jhc2UpLCBoZWFkb2ZmLAorCQkJICAgICAgeGJ1ZnAtPnRhaWxbMF0uaW92X2Jhc2UsIHRhaWxvZmYpOworCisJaWYgKGxlbiAhPSB4YnVmcC0+bGVuKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiRXJyb3Igc2VuZGluZyBlbnRpcmUgY2FsbGJhY2shXG4iKTsKKwkJbGVuID0gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogVGhlIHNlbmQgcm91dGluZS4gQm9ycm93cyBmcm9tIHN2Y19zZW5kCisgKi8KK3N0YXRpYyBpbnQgYmNfc2VuZF9yZXF1ZXN0KHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2stPnRrX3Jxc3RwOworCXN0cnVjdCBzdmNfeHBydAkqeHBydDsKKwlzdHJ1Y3Qgc3ZjX3NvY2sgICAgICAgICAqc3ZzazsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBsZW47CisKKwlkcHJpbnRrKCJzZW5kaW5nIHJlcXVlc3Qgd2l0aCB4aWQ6ICUwOHhcbiIsIG50b2hsKHJlcS0+cnFfeGlkKSk7CisJLyoKKwkgKiBHZXQgdGhlIHNlcnZlciBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FsbGJhY2sgeHBydAorCSAqLworCXhwcnQgPSByZXEtPnJxX3hwcnQtPmJjX3hwcnQ7CisJc3ZzayA9IGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOworCisJLyoKKwkgKiBHcmFiIHRoZSBtdXRleCB0byBzZXJpYWxpemUgZGF0YSBhcyB0aGUgY29ubmVjdGlvbiBpcyBzaGFyZWQKKwkgKiB3aXRoIHRoZSBmb3JlIGNoYW5uZWwKKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJnhwcnQtPnhwdF9tdXRleCkpIHsKKwkJcnBjX3NsZWVwX29uKCZ4cHJ0LT54cHRfYmNfcGVuZGluZywgdGFzaywgTlVMTCk7CisJCWlmICghbXV0ZXhfdHJ5bG9jaygmeHBydC0+eHB0X211dGV4KSkKKwkJCXJldHVybiAtRUFHQUlOOworCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzaygmeHBydC0+eHB0X2JjX3BlbmRpbmcsIHRhc2spOworCX0KKwlpZiAodGVzdF9iaXQoWFBUX0RFQUQsICZ4cHJ0LT54cHRfZmxhZ3MpKQorCQlsZW4gPSAtRU5PVENPTk47CisJZWxzZQorCQlsZW4gPSBiY19zZW5kdG8ocmVxKTsKKwltdXRleF91bmxvY2soJnhwcnQtPnhwdF9tdXRleCk7CisKKwlpZiAobGVuID4gMCkKKwkJbGVuID0gMDsKKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBUaGUgY2xvc2Ugcm91dGluZS4gU2luY2UgdGhpcyBpcyBjbGllbnQgaW5pdGlhdGVkLCB3ZSBkbyBub3RoaW5nCisgKi8KKworc3RhdGljIHZvaWQgYmNfY2xvc2Uoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCXJldHVybjsKK30KKworLyoKKyAqIFRoZSB4cHJ0IGRlc3Ryb3kgcm91dGluZS4gQWdhaW4sIGJlY2F1c2UgdGhpcyBjb25uZWN0aW9uIGlzIGNsaWVudAorICogaW5pdGlhdGVkLCB3ZSBkbyBub3RoaW5nCisgKi8KKworc3RhdGljIHZvaWQgYmNfZGVzdHJveShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJcmV0dXJuOworfQorCiBzdGF0aWMgc3RydWN0IHJwY194cHJ0X29wcyB4c191ZHBfb3BzID0gewogCS5zZXRfYnVmZmVyX3NpemUJPSB4c191ZHBfc2V0X2J1ZmZlcl9zaXplLAogCS5yZXNlcnZlX3hwcnQJCT0geHBydF9yZXNlcnZlX3hwcnRfY29uZywKQEAgLTIxMzQsNiArMjI3MywyMiBAQAogCS5wcmludF9zdGF0cwkJPSB4c190Y3BfcHJpbnRfc3RhdHMsCiB9OwogCisvKgorICogVGhlIHJwY194cHJ0X29wcyBmb3IgdGhlIHNlcnZlciBiYWNrY2hhbm5lbAorICovCisKK3N0YXRpYyBzdHJ1Y3QgcnBjX3hwcnRfb3BzIGJjX3RjcF9vcHMgPSB7CisJLnJlc2VydmVfeHBydAkJPSB4cHJ0X3Jlc2VydmVfeHBydCwKKwkucmVsZWFzZV94cHJ0CQk9IHhwcnRfcmVsZWFzZV94cHJ0LAorCS5idWZfYWxsb2MJCT0gYmNfbWFsbG9jLAorCS5idWZfZnJlZQkJPSBiY19mcmVlLAorCS5zZW5kX3JlcXVlc3QJCT0gYmNfc2VuZF9yZXF1ZXN0LAorCS5zZXRfcmV0cmFuc190aW1lb3V0CT0geHBydF9zZXRfcmV0cmFuc190aW1lb3V0X2RlZiwKKwkuY2xvc2UJCQk9IGJjX2Nsb3NlLAorCS5kZXN0cm95CQk9IGJjX2Rlc3Ryb3ksCisJLnByaW50X3N0YXRzCQk9IHhzX3RjcF9wcmludF9zdGF0cywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcnBjX3hwcnQgKnhzX3NldHVwX3hwcnQoc3RydWN0IHhwcnRfY3JlYXRlICphcmdzLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBzbG90X3RhYmxlX3NpemUpCiB7CkBAIC0yMzIyLDExICsyNDc3LDkzIEBACiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKKy8qKgorICogeHNfc2V0dXBfYmNfdGNwIC0gU2V0IHVwIHRyYW5zcG9ydCB0byB1c2UgYSBUQ1AgYmFja2NoYW5uZWwgc29ja2V0CisgKiBAYXJnczogcnBjIHRyYW5zcG9ydCBjcmVhdGlvbiBhcmd1bWVudHMKKyAqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcnBjX3hwcnQgKnhzX3NldHVwX2JjX3RjcChzdHJ1Y3QgeHBydF9jcmVhdGUgKmFyZ3MpCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gYXJncy0+ZHN0YWRkcjsKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0OworCXN0cnVjdCBzdmNfc29jayAqYmNfc29jazsKKworCWlmICghYXJncy0+YmNfeHBydCkKKwkJRVJSX1BUUigtRUlOVkFMKTsKKworCXhwcnQgPSB4c19zZXR1cF94cHJ0KGFyZ3MsIHhwcnRfdGNwX3Nsb3RfdGFibGVfZW50cmllcyk7CisJaWYgKElTX0VSUih4cHJ0KSkKKwkJcmV0dXJuIHhwcnQ7CisJdHJhbnNwb3J0ID0gY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOworCisJeHBydC0+cHJvdCA9IElQUFJPVE9fVENQOworCXhwcnQtPnRzaF9zaXplID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAvIHNpemVvZih1MzIpOworCXhwcnQtPm1heF9wYXlsb2FkID0gUlBDX01BWF9GUkFHTUVOVF9TSVpFOworCXhwcnQtPnRpbWVvdXQgPSAmeHNfdGNwX2RlZmF1bHRfdGltZW91dDsKKworCS8qIGJhY2tjaGFubmVsICovCisJeHBydF9zZXRfYm91bmQoeHBydCk7CisJeHBydC0+YmluZF90aW1lb3V0ID0gMDsKKwl4cHJ0LT5jb25uZWN0X3RpbWVvdXQgPSAwOworCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPSAwOworCXhwcnQtPmlkbGVfdGltZW91dCA9IDA7CisKKwkvKgorCSAqIFRoZSBiYWNrY2hhbm5lbCB1c2VzIHRoZSBzYW1lIHNvY2tldCBjb25uZWN0aW9uIGFzIHRoZQorCSAqIGZvcmVjaGFubmVsCisJICovCisJeHBydC0+YmNfeHBydCA9IGFyZ3MtPmJjX3hwcnQ7CisJYmNfc29jayA9IGNvbnRhaW5lcl9vZihhcmdzLT5iY194cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOworCWJjX3NvY2stPnNrX2JjX3hwcnQgPSB4cHJ0OworCXRyYW5zcG9ydC0+c29jayA9IGJjX3NvY2stPnNrX3NvY2s7CisJdHJhbnNwb3J0LT5pbmV0ID0gYmNfc29jay0+c2tfc2s7CisKKwl4cHJ0LT5vcHMgPSAmYmNfdGNwX29wczsKKworCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQl4c19mb3JtYXRfcGVlcl9hZGRyZXNzZXMoeHBydCwgInRjcCIsCisJCQkJCSBSUENCSU5EX05FVElEX1RDUCk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXhzX2Zvcm1hdF9wZWVyX2FkZHJlc3Nlcyh4cHJ0LCAidGNwIiwKKwkJCQkgICBSUENCSU5EX05FVElEX1RDUDYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrZnJlZSh4cHJ0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBRk5PU1VQUE9SVCk7CisJfQorCisJaWYgKHhwcnRfYm91bmQoeHBydCkpCisJCWRwcmludGsoIlJQQzogICAgICAgc2V0IHVwIHhwcnQgdG8gJXMgKHBvcnQgJXMpIHZpYSAlc1xuIiwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0sCisJCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdLAorCQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QUk9UT10pOworCWVsc2UKKwkJZHByaW50aygiUlBDOiAgICAgICBzZXQgdXAgeHBydCB0byAlcyAoYXV0b2JpbmQpIHZpYSAlc1xuIiwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0sCisJCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BST1RPXSk7CisKKwkvKgorCSAqIFNpbmNlIHdlIGRvbid0IHdhbnQgY29ubmVjdGlvbnMgZm9yIHRoZSBiYWNrY2hhbm5lbCwgd2Ugc2V0CisJICogdGhlIHhwcnQgc3RhdHVzIHRvIGNvbm5lY3RlZAorCSAqLworCXhwcnRfc2V0X2Nvbm5lY3RlZCh4cHJ0KTsKKworCisJaWYgKHRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKKwkJcmV0dXJuIHhwcnQ7CisJa2ZyZWUoeHBydC0+c2xvdCk7CisJa2ZyZWUoeHBydCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgeHBydF9jbGFzcwl4c191ZHBfdHJhbnNwb3J0ID0gewogCS5saXN0CQk9IExJU1RfSEVBRF9JTklUKHhzX3VkcF90cmFuc3BvcnQubGlzdCksCiAJLm5hbWUJCT0gInVkcCIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5pZGVudAkJPSBJUFBST1RPX1VEUCwKKwkuaWRlbnQJCT0gWFBSVF9UUkFOU1BPUlRfVURQLAogCS5zZXR1cAkJPSB4c19zZXR1cF91ZHAsCiB9OwogCkBAIC0yMzM0LDEwICsyNTcxLDE4IEBACiAJLmxpc3QJCT0gTElTVF9IRUFEX0lOSVQoeHNfdGNwX3RyYW5zcG9ydC5saXN0KSwKIAkubmFtZQkJPSAidGNwIiwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmlkZW50CQk9IElQUFJPVE9fVENQLAorCS5pZGVudAkJPSBYUFJUX1RSQU5TUE9SVF9UQ1AsCiAJLnNldHVwCQk9IHhzX3NldHVwX3RjcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgeHBydF9jbGFzcwl4c19iY190Y3BfdHJhbnNwb3J0ID0geworCS5saXN0CQk9IExJU1RfSEVBRF9JTklUKHhzX2JjX3RjcF90cmFuc3BvcnQubGlzdCksCisJLm5hbWUJCT0gInRjcCBORlN2NC4xIGJhY2tjaGFubmVsIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlkZW50CQk9IFhQUlRfVFJBTlNQT1JUX0JDX1RDUCwKKwkuc2V0dXAJCT0geHNfc2V0dXBfYmNfdGNwLAorfTsKKwogLyoqCiAgKiBpbml0X3NvY2tldF94cHJ0IC0gc2V0IHVwIHhwcnRzb2NrJ3Mgc3lzY3RscywgcmVnaXN0ZXIgd2l0aCBSUEMgY2xpZW50CiAgKgpAQCAtMjM1MSw2ICsyNTk2LDcgQEAKIAogCXhwcnRfcmVnaXN0ZXJfdHJhbnNwb3J0KCZ4c191ZHBfdHJhbnNwb3J0KTsKIAl4cHJ0X3JlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfdGNwX3RyYW5zcG9ydCk7CisJeHBydF9yZWdpc3Rlcl90cmFuc3BvcnQoJnhzX2JjX3RjcF90cmFuc3BvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzcwLDYgKzI2MTYsNyBAQAogCiAJeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfdWRwX3RyYW5zcG9ydCk7CiAJeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfdGNwX3RyYW5zcG9ydCk7CisJeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfYmNfdGNwX3RyYW5zcG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQgcGFyYW1fc2V0X3VpbnRfbWlubWF4KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCmluZGV4IDQyOWRkMDYuLjU2MWE0NWMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC04MzQsNyArODM0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHJkZXYtPm9wcy0+c2V0X3R4X3Bvd2VyKHdkZXYtPndpcGh5LCB0eXBlLCBkYm0pOzsKKwlyZXR1cm4gcmRldi0+b3BzLT5zZXRfdHhfcG93ZXIod2Rldi0+d2lwaHksIHR5cGUsIGRibSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd3R4cG93ZXIpOwogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0tjb25maWcgYi9zYW1wbGVzL0tjb25maWcKaW5kZXggNDI4YjA2NS4uYjkyYmRlMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9LY29uZmlnCisrKyBiL3NhbXBsZXMvS2NvbmZpZwpAQCAtNywxMiArNyw2IEBACiAKIGlmIFNBTVBMRVMKIAotY29uZmlnIFNBTVBMRV9NQVJLRVJTCi0JdHJpc3RhdGUgIkJ1aWxkIG1hcmtlcnMgZXhhbXBsZXMgLS0gbG9hZGFibGUgbW9kdWxlcyBvbmx5IgotCWRlcGVuZHMgb24gTUFSS0VSUyAmJiBtCi0JaGVscAotCSAgVGhpcyBidWlsZCBtYXJrZXJzIGV4YW1wbGUgbW9kdWxlcy4KLQogY29uZmlnIFNBTVBMRV9UUkFDRVBPSU5UUwogCXRyaXN0YXRlICJCdWlsZCB0cmFjZXBvaW50cyBleGFtcGxlcyAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCiAJZGVwZW5kcyBvbiBUUkFDRVBPSU5UUyAmJiBtCmRpZmYgLS1naXQgYS9zYW1wbGVzL01ha2VmaWxlIGIvc2FtcGxlcy9NYWtlZmlsZQppbmRleCAxM2U0YjQ3Li40MzM0M2EwIDEwMDY0NAotLS0gYS9zYW1wbGVzL01ha2VmaWxlCisrKyBiL3NhbXBsZXMvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACiAjIE1ha2VmaWxlIGZvciBMaW51eCBzYW1wbGVzIGNvZGUKIAotb2JqLSQoQ09ORklHX1NBTVBMRVMpCSs9IG1hcmtlcnMvIGtvYmplY3QvIGtwcm9iZXMvIHRyYWNlcG9pbnRzLyB0cmFjZV9ldmVudHMvCitvYmotJChDT05GSUdfU0FNUExFUykJKz0ga29iamVjdC8ga3Byb2Jlcy8gdHJhY2Vwb2ludHMvIHRyYWNlX2V2ZW50cy8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbWFya2Vycy9NYWtlZmlsZSBiL3NhbXBsZXMvbWFya2Vycy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3MjMxMi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL21hcmtlcnMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgYnVpbGRzIHRoZSBrcHJvYmVzIGV4YW1wbGUga2VybmVsIG1vZHVsZXM7Ci0jIHRoZW4gdG8gdXNlIG9uZSAoYXMgcm9vdCk6ICBpbnNtb2QgPG1vZHVsZV9uYW1lLmtvPgotCi1vYmotJChDT05GSUdfU0FNUExFX01BUktFUlMpICs9IHByb2JlLWV4YW1wbGUubyBtYXJrZXItZXhhbXBsZS5vCmRpZmYgLS1naXQgYS9zYW1wbGVzL21hcmtlcnMvbWFya2VyLWV4YW1wbGUuYyBiL3NhbXBsZXMvbWFya2Vycy9tYXJrZXItZXhhbXBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWNkOWMwLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbWFya2Vycy9tYXJrZXItZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyogbWFya2VyLWV4YW1wbGUuYwotICoKLSAqIEV4ZWN1dGVzIGEgbWFya2VyIHdoZW4gL3Byb2MvbWFya2VyLWV4YW1wbGUgaXMgb3BlbmVkLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNyBNYXRoaWV1IERlc25veWVycyA8bWF0aGlldS5kZXNub3llcnNAcG9seW10bC5jYT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgotICogU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0KLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGVudHJ5X2V4YW1wbGU7Ci0KLXN0YXRpYyBpbnQgbXlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpbnQgaTsKLQotCXRyYWNlX21hcmsoc3Vic3lzdGVtX2V2ZW50LCAiaW50ZWdlciAlZCBzdHJpbmcgJXMiLCAxMjMsCi0JCSJleGFtcGxlIHN0cmluZyIpOwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQl0cmFjZV9tYXJrKHN1YnN5c3RlbV9ldmVudGIsIE1BUktfTk9BUkdTKTsKLQlyZXR1cm4gLUVQRVJNOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXJrX29wcyA9IHsKLQkub3BlbiA9IG15X29wZW4sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBleGFtcGxlX2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9BTEVSVCAiZXhhbXBsZSBpbml0XG4iKTsKLQlwZW50cnlfZXhhbXBsZSA9IHByb2NfY3JlYXRlKCJtYXJrZXItZXhhbXBsZSIsIDA0NDQsIE5VTEwsICZtYXJrX29wcyk7Ci0JaWYgKCFwZW50cnlfZXhhbXBsZSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4YW1wbGVfZXhpdCh2b2lkKQotewotCXByaW50ayhLRVJOX0FMRVJUICJleGFtcGxlIGV4aXRcbiIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJtYXJrZXItZXhhbXBsZSIsIE5VTEwpOwotfQotCi1tb2R1bGVfaW5pdChleGFtcGxlX2luaXQpCi1tb2R1bGVfZXhpdChleGFtcGxlX2V4aXQpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1hcmtlciBleGFtcGxlIik7CmRpZmYgLS1naXQgYS9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jIGIvc2FtcGxlcy9tYXJrZXJzL3Byb2JlLWV4YW1wbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRmYjNiMy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyogcHJvYmUtZXhhbXBsZS5jCi0gKgotICogQ29ubmVjdHMgdHdvIGZ1bmN0aW9ucyB0byBtYXJrZXIgY2FsbCBzaXRlcy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcgTWF0aGlldSBEZXNub3llcnMgPG1hdGhpZXUuZGVzbm95ZXJzQHBvbHltdGwuY2E+Ci0gKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KLSAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1zdHJ1Y3QgcHJvYmVfZGF0YSB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBjaGFyICpmb3JtYXQ7Ci0JbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlX2Z1bmM7Ci19OwotCi12b2lkIHByb2JlX3N1YnN5c3RlbV9ldmVudCh2b2lkICpwcm9iZV9kYXRhLCB2b2lkICpjYWxsX2RhdGEsCi0JY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0ICphcmdzKQotewotCS8qIERlY2xhcmUgYXJncyAqLwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQljb25zdCBjaGFyICpteXN0cjsKLQotCS8qIEFzc2lnbiBhcmdzICovCi0JdmFsdWUgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZih2YWx1ZSkpOwotCW15c3RyID0gdmFfYXJnKCphcmdzLCB0eXBlb2YobXlzdHIpKTsKLQotCS8qIENhbGwgcHJpbnRrICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiVmFsdWUgJXUsIHN0cmluZyAlc1xuIiwgdmFsdWUsIG15c3RyKTsKLQotCS8qIG9yIGNvdW50LCBjaGVjayByaWdodHMsIHNlcmlhbGl6ZSBkYXRhIGluIGEgYnVmZmVyICovCi19Ci0KLWF0b21pY190IGV2ZW50Yl9jb3VudCA9IEFUT01JQ19JTklUKDApOwotCi12b2lkIHByb2JlX3N1YnN5c3RlbV9ldmVudGIodm9pZCAqcHJvYmVfZGF0YSwgdm9pZCAqY2FsbF9kYXRhLAotCWNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCAqYXJncykKLXsKLQkvKiBJbmNyZW1lbnQgY291bnRlciAqLwotCWF0b21pY19pbmMoJmV2ZW50Yl9jb3VudCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHJvYmVfZGF0YSBwcm9iZV9hcnJheVtdID0KLXsKLQl7CS5uYW1lID0gInN1YnN5c3RlbV9ldmVudCIsCi0JCS5mb3JtYXQgPSAiaW50ZWdlciAlZCBzdHJpbmcgJXMiLAotCQkucHJvYmVfZnVuYyA9IHByb2JlX3N1YnN5c3RlbV9ldmVudCB9LAotCXsJLm5hbWUgPSAic3Vic3lzdGVtX2V2ZW50YiIsCi0JCS5mb3JtYXQgPSBNQVJLX05PQVJHUywKLQkJLnByb2JlX2Z1bmMgPSBwcm9iZV9zdWJzeXN0ZW1fZXZlbnRiIH0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwcm9iZV9pbml0KHZvaWQpCi17Ci0JaW50IHJlc3VsdDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2JlX2FycmF5KTsgaSsrKSB7Ci0JCXJlc3VsdCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcihwcm9iZV9hcnJheVtpXS5uYW1lLAotCQkJCXByb2JlX2FycmF5W2ldLmZvcm1hdCwKLQkJCQlwcm9iZV9hcnJheVtpXS5wcm9iZV9mdW5jLCAmcHJvYmVfYXJyYXlbaV0pOwotCQlpZiAocmVzdWx0KQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIHByb2JlICVzXG4iLAotCQkJCXByb2JlX2FycmF5W2ldLm5hbWUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHByb2JlX2Zpbmkodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2JlX2FycmF5KTsgaSsrKQotCQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcihwcm9iZV9hcnJheVtpXS5uYW1lLAotCQkJcHJvYmVfYXJyYXlbaV0ucHJvYmVfZnVuYywgJnByb2JlX2FycmF5W2ldKTsKLQlwcmludGsoS0VSTl9JTkZPICJOdW1iZXIgb2YgZXZlbnQgYiA6ICV1XG4iLAotCQkJYXRvbWljX3JlYWQoJmV2ZW50Yl9jb3VudCkpOwotCW1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7Ci19Ci0KLW1vZHVsZV9pbml0KHByb2JlX2luaXQpOwotbW9kdWxlX2V4aXQocHJvYmVfZmluaSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNVQlNZU1RFTSBQcm9iZSIpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0IGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CmluZGV4IGY0MDUzZGMuLjhmMTRjODEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAorKysgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKQEAgLTEzLDcgKzEzLDYgQEAKICMgMikgbW9kcG9zdCBpcyB0aGVuIHVzZWQgdG8KICMgMykgIGNyZWF0ZSBvbmUgPG1vZHVsZT4ubW9kLmMgZmlsZSBwci4gbW9kdWxlCiAjIDQpICBjcmVhdGUgb25lIE1vZHVsZS5zeW12ZXJzIGZpbGUgd2l0aCBDUkMgZm9yIGFsbCBleHBvcnRlZCBzeW1ib2xzCi0jIDRhKSBbQ09ORklHX01BUktFUlNdIGNyZWF0ZSBvbmUgTW9kdWxlLm1hcmtlcnMgZmlsZSBsaXN0aW5nIGRlZmluZWQgbWFya2VycwogIyA1KSBjb21waWxlIGFsbCA8bW9kdWxlPi5tb2QuYyBmaWxlcwogIyA2KSBmaW5hbCBsaW5rIG9mIHRoZSBtb2R1bGUgdG8gYSA8bW9kdWxlLmtvPiBmaWxlCiAKQEAgLTU5LDEwICs1OCw2IEBACiAKIGtlcm5lbHN5bWZpbGUgOj0gJChvYmp0cmVlKS9Nb2R1bGUuc3ltdmVycwogbW9kdWxlc3ltZmlsZSA6PSAkKGZpcnN0d29yZCAkKEtCVUlMRF9FWFRNT0QpKS9Nb2R1bGUuc3ltdmVycwota2VybmVsbWFya2Vyc2ZpbGUgOj0gJChvYmp0cmVlKS9Nb2R1bGUubWFya2VycwotbW9kdWxlbWFya2Vyc2ZpbGUgOj0gJChmaXJzdHdvcmQgJChLQlVJTERfRVhUTU9EKSkvTW9kdWxlLm1hcmtlcnMKLQotbWFya2Vyc2ZpbGUgPSAkKGlmICQoS0JVSUxEX0VYVE1PRCksJChtb2R1bGVtYXJrZXJzZmlsZSksJChrZXJuZWxtYXJrZXJzZmlsZSkpCiAKICMgU3RlcCAxKSwgZmluZCBhbGwgbW9kdWxlcyBsaXN0ZWQgaW4gJChNT0RWRVJESVIpLwogX19tb2R1bGVzIDo9ICQoc29ydCAkKHNoZWxsIGdyZXAgLWggJ1wua28nIC9kZXYvbnVsbCAkKHdpbGRjYXJkICQoTU9EVkVSRElSKS8qLm1vZCkpKQpAQCAtODUsOCArODAsNiBAQAogICQoaWYgJChLQlVJTERfRVhUUkFfU1lNQk9MUyksICQocGF0c3Vic3QgJSwgLWUgJSwkKEtCVUlMRF9FWFRSQV9TWU1CT0xTKSkpIFwKICAkKGlmICQoS0JVSUxEX0VYVE1PRCksLW8gJChtb2R1bGVzeW1maWxlKSkgICAgICBcCiAgJChpZiAkKENPTkZJR19ERUJVR19TRUNUSU9OX01JU01BVENIKSwsLVMpICAgICAgXAotICQoaWYgJChDT05GSUdfTUFSS0VSUyksLUsgJChrZXJuZWxtYXJrZXJzZmlsZSkpIFwKLSAkKGlmICQoQ09ORklHX01BUktFUlMpLC1NICQobWFya2Vyc2ZpbGUpKQkgXAogICQoaWYgJChLQlVJTERfRVhUTU9EKSQoS0JVSUxEX01PRFBPU1RfV0FSTiksLXcpIFwKICAkKGlmICQoY3Jvc3NfYnVpbGQpLC1jKQogCkBAIC0xMDEsMTcgKzk0LDEyIEBACiAgICAgICBjbWRfa2VybmVsLW1vZCA9ICQobW9kcG9zdCkgJEAKIAogdm1saW51eC5vOiBGT1JDRQotCUBybSAtZnIgJChrZXJuZWxtYXJrZXJzZmlsZSkKIAkkKGNhbGwgY21kLGtlcm5lbC1tb2QpCiAKICMgRGVjbGFyZSBnZW5lcmF0ZWQgZmlsZXMgYXMgdGFyZ2V0cyBmb3IgbW9kcG9zdAogJChzeW12ZXJmaWxlKTogICAgICAgICBfX21vZHBvc3QgOwogJChtb2R1bGVzOi5rbz0ubW9kLmMpOiBfX21vZHBvc3QgOwogCi1pZmRlZiBDT05GSUdfTUFSS0VSUwotJChtYXJrZXJzZmlsZSk6CSAgICAgICBfX21vZHBvc3QgOwotZW5kaWYKLQogCiAjIFN0ZXAgNSksIGNvbXBpbGUgYWxsICoubW9kLmMgZmlsZXMKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKaW5kZXggZDdjMWIwNC4uNmJmMjFmOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYworKysgYi9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCkBAIC0xNiw4ICsxNiw3IEBACiAgKiB0ZWxscyBtYWtlIHdoZW4gdG8gcmVtYWtlIGEgZmlsZS4KICAqCiAgKiBUbyB1c2UgdGhpcyBsaXN0IGFzLWlzIGhvd2V2ZXIgaGFzIHRoZSBkcmF3YmFjayB0aGF0IHZpcnR1YWxseQotICogZXZlcnkgZmlsZSBpbiB0aGUga2VybmVsIGluY2x1ZGVzIDxsaW51eC9jb25maWcuaD4gd2hpY2ggdGhlbiBhZ2FpbgotICogaW5jbHVkZXMgPGxpbnV4L2F1dG9jb25mLmg+CisgKiBldmVyeSBmaWxlIGluIHRoZSBrZXJuZWwgaW5jbHVkZXMgPGxpbnV4L2F1dG9jb25mLmg+LgogICoKICAqIElmIHRoZSB1c2VyIHJlLXJ1bnMgbWFrZSAqY29uZmlnLCBsaW51eC9hdXRvY29uZi5oIHdpbGwgYmUKICAqIHJlZ2VuZXJhdGVkLiAgbWFrZSBub3RpY2VzIHRoYXQgYW5kIHdpbGwgcmVidWlsZCBldmVyeSBmaWxlIHdoaWNoCkBAIC0xMjYsNyArMTI1LDYgQEAKIGNoYXIgKmNtZGxpbmU7CiAKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCi0KIHsKIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBmaXhkZXAgPGRlcGZpbGU+IDx0YXJnZXQ+IDxjbWRsaW5lPlxuIik7CiAJZXhpdCgxKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCAyZDVlY2U3Li44N2JiYjhiIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0xMCw3ICsxMCw3IEBACiBteSAkUCA9ICQwOwogJFAgPX4gc0AuKi9AQGc7CiAKLW15ICRWID0gJzAuMjgnOworbXkgJFYgPSAnMC4yOSc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTI4LDYgKzI4LDQxIEBACiBteSAkc3VtbWFyeV9maWxlID0gMDsKIG15ICRyb290OwogbXkgJWRlYnVnOworbXkgJGhlbHAgPSAwOworCitzdWIgaGVscCB7CisJbXkgKCRleGl0Y29kZSkgPSBAXzsKKworCXByaW50IDw8ICJFT00iOworVXNhZ2U6ICRQIFtPUFRJT05dLi4uIFtGSUxFXS4uLgorVmVyc2lvbjogJFYKKworT3B0aW9uczoKKyAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgcXVpZXQKKyAgLS1uby10cmVlICAgICAgICAgICAgICAgICAgcnVuIHdpdGhvdXQgYSBrZXJuZWwgdHJlZQorICAtLW5vLXNpZ25vZmYgICAgICAgICAgICAgICBkbyBub3QgY2hlY2sgZm9yICdTaWduZWQtb2ZmLWJ5JyBsaW5lCisgIC0tcGF0Y2ggICAgICAgICAgICAgICAgICAgIHRyZWF0IEZJTEUgYXMgcGF0Y2hmaWxlIChkZWZhdWx0KQorICAtLWVtYWNzICAgICAgICAgICAgICAgICAgICBlbWFjcyBjb21waWxlIHdpbmRvdyBmb3JtYXQKKyAgLS10ZXJzZSAgICAgICAgICAgICAgICAgICAgb25lIGxpbmUgcGVyIHJlcG9ydAorICAtZiwgLS1maWxlICAgICAgICAgICAgICAgICB0cmVhdCBGSUxFIGFzIHJlZ3VsYXIgc291cmNlIGZpbGUKKyAgLS1zdWJqZWN0aXZlLCAtLXN0cmljdCAgICAgZW5hYmxlIG1vcmUgc3ViamVjdGl2ZSB0ZXN0cworICAtLXJvb3Q9UEFUSCAgICAgICAgICAgICAgICBQQVRIIHRvIHRoZSBrZXJuZWwgdHJlZSByb290CisgIC0tbm8tc3VtbWFyeSAgICAgICAgICAgICAgIHN1cHByZXNzIHRoZSBwZXItZmlsZSBzdW1tYXJ5CisgIC0tbWFpbGJhY2sgICAgICAgICAgICAgICAgIG9ubHkgcHJvZHVjZSBhIHJlcG9ydCBpbiBjYXNlIG9mIHdhcm5pbmdzL2Vycm9ycworICAtLXN1bW1hcnktZmlsZSAgICAgICAgICAgICBpbmNsdWRlIHRoZSBmaWxlbmFtZSBpbiBzdW1tYXJ5CisgIC0tZGVidWcgS0VZPVswfDFdICAgICAgICAgIHR1cm4gb24vb2ZmIGRlYnVnZ2luZyBvZiBLRVksIHdoZXJlIEtFWSBpcyBvbmUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlcycsICdwb3NzaWJsZScsICd0eXBlJywgYW5kICdhdHRyJyAoZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbGwgb2ZmKQorICAtLXRlc3Qtb25seT1XT1JEICAgICAgICAgICByZXBvcnQgb25seSB3YXJuaW5ncy9lcnJvcnMgY29udGFpbmluZyBXT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxseQorICAtaCwgLS1oZWxwLCAtLXZlcnNpb24gICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorCitXaGVuIEZJTEUgaXMgLSByZWFkIHN0YW5kYXJkIGlucHV0LgorRU9NCisKKwlleGl0KCRleGl0Y29kZSk7Cit9CisKIEdldE9wdGlvbnMoCiAJJ3F8cXVpZXQrJwk9PiBcJHF1aWV0LAogCSd0cmVlIScJCT0+IFwkdHJlZSwKQEAgLTM1LDcgKzcwLDcgQEAKIAkncGF0Y2ghJwk9PiBcJGNoa19wYXRjaCwKIAknZW1hY3MhJwk9PiBcJGVtYWNzLAogCSd0ZXJzZSEnCT0+IFwkdGVyc2UsCi0JJ2ZpbGUhJwkJPT4gXCRmaWxlLAorCSdmfGZpbGUhJwk9PiBcJGZpbGUsCiAJJ3N1YmplY3RpdmUhJwk9PiBcJGNoZWNrLAogCSdzdHJpY3QhJwk9PiBcJGNoZWNrLAogCSdyb290PXMnCT0+IFwkcm9vdCwKQEAgLTQ1LDIyICs4MCwxNiBAQAogCiAJJ2RlYnVnPXMnCT0+IFwlZGVidWcsCiAJJ3Rlc3Qtb25seT1zJwk9PiBcJHRzdF9vbmx5LAotKSBvciBleGl0OworCSdofGhlbHAnCT0+IFwkaGVscCwKKwkndmVyc2lvbicJPT4gXCRoZWxwCispIG9yIGhlbHAoMSk7CisKK2hlbHAoMCkgaWYgKCRoZWxwKTsKIAogbXkgJGV4aXQgPSAwOwogCiBpZiAoJCNBUkdWIDwgMCkgewotCXByaW50ICJ1c2FnZTogJFAgW29wdGlvbnNdIHBhdGNoZmlsZVxuIjsKLQlwcmludCAidmVyc2lvbjogJFZcbiI7Ci0JcHJpbnQgIm9wdGlvbnM6IC1xICAgICAgICAgICAgICAgPT4gcXVpZXRcbiI7Ci0JcHJpbnQgIiAgICAgICAgIC0tbm8tdHJlZSAgICAgICAgPT4gcnVuIHdpdGhvdXQgYSBrZXJuZWwgdHJlZVxuIjsKLQlwcmludCAiICAgICAgICAgLS10ZXJzZSAgICAgICAgICA9PiBvbmUgbGluZSBwZXIgcmVwb3J0XG4iOwotCXByaW50ICIgICAgICAgICAtLWVtYWNzICAgICAgICAgID0+IGVtYWNzIGNvbXBpbGUgd2luZG93IGZvcm1hdFxuIjsKLQlwcmludCAiICAgICAgICAgLS1maWxlICAgICAgICAgICA9PiBjaGVjayBhIHNvdXJjZSBmaWxlXG4iOwotCXByaW50ICIgICAgICAgICAtLXN0cmljdCAgICAgICAgID0+IGVuYWJsZSBtb3JlIHN1YmplY3RpdmUgdGVzdHNcbiI7Ci0JcHJpbnQgIiAgICAgICAgIC0tcm9vdCAgICAgICAgICAgPT4gcGF0aCB0byB0aGUga2VybmVsIHRyZWUgcm9vdFxuIjsKLQlwcmludCAiICAgICAgICAgLS1uby1zdW1tYXJ5ICAgICA9PiBzdXBwcmVzcyB0aGUgcGVyLWZpbGUgc3VtbWFyeVxuIjsKLQlwcmludCAiICAgICAgICAgLS1zdW1tYXJ5LWZpbGUgICA9PiBpbmNsdWRlIHRoZSBmaWxlbmFtZSBpbiBzdW1tYXJ5XG4iOworCXByaW50ICIkUDogbm8gaW5wdXQgZmlsZXNcbiI7CiAJZXhpdCgxKTsKIH0KIApAQCAtMTUzLDcgKzE4Miw3IEBACiB9eDsKIAogb3VyICR0eXBlVHlwZWRlZnMgPSBxcnsoP3g6Ci0JKD86X18pPyg/OnV8c3xiZXxsZSkoPzpcZHxcZFxkKXwKKwkoPzpfXyk/KD86dXxzfGJlfGxlKSg/Ojh8MTZ8MzJ8NjQpfAogCWF0b21pY190CiApfTsKIApAQCAtMzU2LDYgKzM4NSwxMyBAQAogCQkJJG9mZisrOwogCQkJbmV4dDsKIAkJfQorCQlpZiAoJHNhbml0aXNlX3F1b3RlIGVxICcnICYmIHN1YnN0cigkbGluZSwgJG9mZiwgMikgZXEgJy8vJykgeworCQkJJHNhbml0aXNlX3F1b3RlID0gJy8vJzsKKworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDIsICRzYW5pdGlzZV9xdW90ZSk7CisJCQkkb2ZmKys7CisJCQluZXh0OworCQl9CiAKIAkJIyBBIFwgaW4gYSBzdHJpbmcgbWVhbnMgaWdub3JlIHRoZSBuZXh0IGNoYXJhY3Rlci4KIAkJaWYgKCgkc2FuaXRpc2VfcXVvdGUgZXEgIiciIHx8ICRzYW5pdGlzZV9xdW90ZSBlcSAnIicpICYmCkBAIC0zNzksNiArNDE1LDggQEAKIAkJI3ByaW50ICJjPCRjPiBTUTwkc2FuaXRpc2VfcXVvdGU+XG4iOwogCQlpZiAoJG9mZiAhPSAwICYmICRzYW5pdGlzZV9xdW90ZSBlcSAnKi8nICYmICRjIG5lICJcdCIpIHsKIAkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAkOyk7CisJCX0gZWxzaWYgKCRvZmYgIT0gMCAmJiAkc2FuaXRpc2VfcXVvdGUgZXEgJy8vJyAmJiAkYyBuZSAiXHQiKSB7CisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMSwgJDspOwogCQl9IGVsc2lmICgkb2ZmICE9IDAgJiYgJHNhbml0aXNlX3F1b3RlICYmICRjIG5lICJcdCIpIHsKIAkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAnWCcpOwogCQl9IGVsc2UgewpAQCAtMzg2LDYgKzQyNCwxMCBAQAogCQl9CiAJfQogCisJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnLy8nKSB7CisJCSRzYW5pdGlzZV9xdW90ZSA9ICcnOworCX0KKwogCSMgVGhlIHBhdGhuYW1lIG9uIGEgI2luY2x1ZGUgbWF5IGJlIHN1cnJvdW5kZWQgYnkgJzwnIGFuZCAnPicuCiAJaWYgKCRyZXMgPX4gL14uXHMqXCNccyppbmNsdWRlXHMrXDwoLiopXD4vKSB7CiAJCW15ICRjbGVhbiA9ICdYJyB4IGxlbmd0aCgkMSk7CkBAIC0xMzM2LDYgKzEzNzgsMTggQEAKIAkJCVdBUk4oImFkZGluZyBhIGxpbmUgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQogCisjIEJsYWNrZmluOiB1c2UgaGkvbG8gbWFjcm9zCisJCWlmICgkcmVhbGZpbGUgPX4gbUBhcmNoL2JsYWNrZmluLy4qXC5TJEApIHsKKwkJCWlmICgkbGluZSA9fiAvXC5bbExdW1s6c3BhY2U6XV0qPS4qJltbOnNwYWNlOl1dKjB4W2ZGXVtmRl1bZkZdW2ZGXS8pIHsKKwkJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuIjsKKwkJCQlFUlJPUigidXNlIHRoZSBMTygpIG1hY3JvLCBub3QgKC4uLiAmIDB4RkZGRilcbiIgLiAkaGVyZXZldCk7CisJCQl9CisJCQlpZiAoJGxpbmUgPX4gL1wuW2hIXVtbOnNwYWNlOl1dKj0uKj4+W1s6c3BhY2U6XV0qMTYvKSB7CisJCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRsaW5lKSAuICJcbiI7CisJCQkJRVJST1IoInVzZSB0aGUgSEkoKSBtYWNybywgbm90ICguLi4gPj4gMTYpXG4iIC4gJGhlcmV2ZXQpOworCQkJfQorCQl9CisKICMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgQyBvciBwZXJsIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKIAkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLihofGN8cGwpJC8pOwogCkBAIC0xMzU1LDYgKzE0MDksMTYgQEAKIAkJCVdBUk4oIkNWUyBzdHlsZSBrZXl3b3JkIG1hcmtlcnMsIHRoZXNlIHdpbGwgX25vdF8gYmUgdXBkYXRlZFxuIi4gJGhlcmVjdXJyKTsKIAkJfQogCisjIEJsYWNrZmluOiBkb24ndCB1c2UgX19idWlsdGluX2JmaW5fW2NzXXN5bmMKKwkJaWYgKCRsaW5lID1+IC9fX2J1aWx0aW5fYmZpbl9jc3luYy8pIHsKKwkJCW15ICRoZXJldmV0ID0gIiRoZXJlXG4iIC4gY2F0X3ZldCgkbGluZSkgLiAiXG4iOworCQkJRVJST1IoInVzZSB0aGUgQ1NZTkMoKSBtYWNybyBpbiBhc20vYmxhY2tmaW4uaFxuIiAuICRoZXJldmV0KTsKKwkJfQorCQlpZiAoJGxpbmUgPX4gL19fYnVpbHRpbl9iZmluX3NzeW5jLykgeworCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRsaW5lKSAuICJcbiI7CisJCQlFUlJPUigidXNlIHRoZSBTU1lOQygpIG1hY3JvIGluIGFzbS9ibGFja2Zpbi5oXG4iIC4gJGhlcmV2ZXQpOworCQl9CisKICMgQ2hlY2sgZm9yIHBvdGVudGlhbCAnYmFyZScgdHlwZXMKIAkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpOwogCQlpZiAoJHJlYWxjbnQgJiYgJGxpbmUgPX4gLy5ccypcUy8pIHsKQEAgLTEzNzIsNiArMTQzNiw4IEBACiAJCQkjIElnbm9yZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkCiAJCQl9IGVsc2lmICgkcyA9fiAvXi5ccyokSWRlbnRccypcKC9zKSB7CiAKKwkJCX0gZWxzaWYgKCRzID1+IC9eLlxzKmVsc2VcYi9zKSB7CisKIAkJCSMgZGVjbGFyYXRpb25zIGFsd2F5cyBzdGFydCB3aXRoIHR5cGVzCiAJCQl9IGVsc2lmICgkcHJldl92YWx1ZXMgZXEgJ0UnICYmICRzID1+IC9eLlxzKig/OiRTdG9yYWdlXHMrKT8oPzokSW5saW5lXHMrKT8oPzpjb25zdFxzKyk/KCg/OlxzKiRJZGVudCkrPylcYig/OlxzKyRTcGFyc2UpP1xzKlwqKlxzKig/OiRJZGVudHxcKFwqW15cKV0qXCkpKD86XHMqJE1vZGlmaWVyKT9ccyooPzo7fD18LHxcKCkvcykgewogCQkJCW15ICR0eXBlID0gJDE7CkBAIC0xNTMyLDggKzE1OTgsOSBAQAogCQkJCSAgICAkcyA9fiAvXlxzKiNccyo/LyB8fAogCQkJCSAgICAkcyA9fiAvXlxzKiRJZGVudFxzKjovKSB7CiAJCQkJCSRjb250aW51YXRpb24gPSAoJHMgPX4gL14uKj9cXFxuLykgPyAxIDogMDsKLQkJCQkJJHMgPX4gcy9eLio/XG4vLzsKLQkJCQkJJGNvbmRfbGluZXMrKzsKKwkJCQkJaWYgKCRzID1+IHMvXi4qP1xuLy8pIHsKKwkJCQkJCSRjb25kX2xpbmVzKys7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAKQEAgLTE4OTEsNyArMTk1OCw3IEBACiAJCQkJCQkjIEEgdW5hcnkgJyonIG1heSBiZSBjb25zdAogCiAJCQkJCX0gZWxzaWYgKCRjdHggPX4gLy54Vy8pIHsKLQkJCQkJCUVSUk9SKCJBc3BhY2UgcHJvaGliaXRlZCBhZnRlciB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJCUVSUk9SKCJzcGFjZSBwcm9oaWJpdGVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOwogCQkJCQl9CiAKIAkJCQkjIHVuYXJ5ICsrIGFuZCB1bmFyeSAtLSBhcmUgYWxsb3dlZCBubyBzcGFjZSBvbiBvbmUgc2lkZS4KQEAgLTIyNDMsNyArMjMxMCw4IEBACiAJCQkJREVDTEFSRV9QRVJfQ1BVfAogCQkJCURFRklORV9QRVJfQ1BVfAogCQkJCV9fdHlwZW9mX19cKHwKLQkJCQlcLiRJZGVudFxzKj1ccyoKKwkJCQlcLiRJZGVudFxzKj1ccyp8CisJCQkJXlwifFwiJAogCQkJfXg7CiAJCQkjcHJpbnQgIlJFU1Q8JHJlc3Q+IGRzdGF0PCRkc3RhdD5cbiI7CiAJCQlpZiAoJHJlc3QgbmUgJycpIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29ubWFrZWhhc2guYyBiL3NjcmlwdHMvY29ubWFrZWhhc2guYwppbmRleCBlMGM2ODkxLi4yNjNhNDRkIDEwMDY0NAotLS0gYS9zY3JpcHRzL2Nvbm1ha2VoYXNoLmMKKysrIGIvc2NyaXB0cy9jb25tYWtlaGFzaC5jCkBAIC0yNCwxNCArMjQsMTQgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bmljb2RlOwogCi12b2lkIHVzYWdlKGNoYXIgKmFyZ3YwKQorc3RhdGljIHZvaWQgdXNhZ2UoY2hhciAqYXJndjApCiB7CiAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IFxuIgogICAgICAgICAgIiAgICAgICAgJXMgY2hhcnRhYmxlIFtoYXNoc2l6ZV0gW2hhc2hzdGVwXSBbbWF4aGFzaGxldmVsXVxuIiwgYXJndjApOwogICBleGl0KEVYX1VTQUdFKTsKIH0KIAotaW50IGdldHVuaWNvZGUoY2hhciAqKnAwKQorc3RhdGljIGludCBnZXR1bmljb2RlKGNoYXIgKipwMCkKIHsKICAgY2hhciAqcCA9ICpwMDsKIApAQCAtNDksNyArNDksNyBAQAogCQkJCS8qIE1hc3NpdmUgb3ZlcmtpbGwsIGJ1dCB3aG8gY2FyZXM/ICovCiBpbnQgdW5pY291bnRbTUFYX0ZPTlRMRU5dOwogCi12b2lkIGFkZHBhaXIoaW50IGZwLCBpbnQgdW4pCitzdGF0aWMgdm9pZCBhZGRwYWlyKGludCBmcCwgaW50IHVuKQogewogICBpbnQgaTsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9nZW5rc3ltcy5jIGIvc2NyaXB0cy9nZW5rc3ltcy9nZW5rc3ltcy5jCmluZGV4IDNhODI5N2IuLmFmNmI4MzYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMuYworKysgYi9zY3JpcHRzL2dlbmtzeW1zL2dlbmtzeW1zLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCQkJc3RyY21wKGRlZm4tPnN0cmluZywgInsiKSA9PSAwKTsKIH0KIAotc3RydWN0IHN5bWJvbCAqX19hZGRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gc3ltYm9sX3R5cGUgdHlwZSwKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpfX2FkZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwgZW51bSBzeW1ib2xfdHlwZSB0eXBlLAogCQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVmbiwgaW50IGlzX2V4dGVybiwKIAkJCSAgICBpbnQgaXNfcmVmZXJlbmNlKQogewpAQCAtMjY1LDcgKzI2NSw3IEBACiAJcmV0dXJuIF9fYWRkX3N5bWJvbChuYW1lLCB0eXBlLCBkZWZuLCBpc19leHRlcm4sIDApOwogfQogCi1zdHJ1Y3Qgc3ltYm9sICphZGRfcmVmZXJlbmNlX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLCBlbnVtIHN5bWJvbF90eXBlIHR5cGUsCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqYWRkX3JlZmVyZW5jZV9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwgZW51bSBzeW1ib2xfdHlwZSB0eXBlLAogCQkJCSAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlZm4sIGludCBpc19leHRlcm4pCiB7CiAJcmV0dXJuIF9fYWRkX3N5bWJvbChuYW1lLCB0eXBlLCBkZWZuLCBpc19leHRlcm4sIDEpOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKICNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiAKLXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVhZF9ub2RlKEZJTEUgKmYpCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpyZWFkX25vZGUoRklMRSAqZikKIHsKIAljaGFyIGJ1ZmZlclsyNTZdOwogCXN0cnVjdCBzdHJpbmdfbGlzdCBub2RlID0gewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggMjc4YTQ1Yi4uY2RiNDRiNiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC0xMyw3ICsxMyw3IEBACiB1c2Ugc3RyaWN0OwogCiBteSAkUCA9ICQwOwotbXkgJFYgPSAnMC4xNyc7CitteSAkViA9ICcwLjIwJzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMjksNiArMjksOCBAQAogbXkgJGVtYWlsX2dpdF9tYXhfbWFpbnRhaW5lcnMgPSA1OwogbXkgJGVtYWlsX2dpdF9taW5fcGVyY2VudCA9IDU7CiBteSAkZW1haWxfZ2l0X3NpbmNlID0gIjEteWVhci1hZ28iOworbXkgJGVtYWlsX2dpdF9ibGFtZSA9IDA7CitteSAkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMgPSAxOwogbXkgJG91dHB1dF9tdWx0aWxpbmUgPSAxOwogbXkgJG91dHB1dF9zZXBhcmF0b3IgPSAiLCAiOwogbXkgJHNjbSA9IDA7CkBAIC0zNiw2ICszOCw3IEBACiBteSAkc3Vic3lzdGVtID0gMDsKIG15ICRzdGF0dXMgPSAwOwogbXkgJGZyb21fZmlsZW5hbWUgPSAwOworbXkgJHBhdHRlcm5fZGVwdGggPSAwOwogbXkgJHZlcnNpb24gPSAwOwogbXkgJGhlbHAgPSAwOwogCkBAIC02OCw2ICs3MSw4IEBACiAJCSdnaXQtbWF4LW1haW50YWluZXJzPWknID0+IFwkZW1haWxfZ2l0X21heF9tYWludGFpbmVycywKIAkJJ2dpdC1taW4tcGVyY2VudD1pJyA9PiBcJGVtYWlsX2dpdF9taW5fcGVyY2VudCwKIAkJJ2dpdC1zaW5jZT1zJyA9PiBcJGVtYWlsX2dpdF9zaW5jZSwKKwkJJ2dpdC1ibGFtZSEnID0+IFwkZW1haWxfZ2l0X2JsYW1lLAorCQkncmVtb3ZlLWR1cGxpY2F0ZXMhJyA9PiBcJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzLAogCQknbSEnID0+IFwkZW1haWxfbWFpbnRhaW5lciwKIAkJJ24hJyA9PiBcJGVtYWlsX3VzZW5hbWUsCiAJCSdsIScgPT4gXCRlbWFpbF9saXN0LApAQCAtNzgsNiArODMsNyBAQAogCQknc3RhdHVzIScgPT4gXCRzdGF0dXMsCiAJCSdzY20hJyA9PiBcJHNjbSwKIAkJJ3dlYiEnID0+IFwkd2ViLAorCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCiAJCSdmfGZpbGUnID0+IFwkZnJvbV9maWxlbmFtZSwKIAkJJ3Z8dmVyc2lvbicgPT4gXCR2ZXJzaW9uLAogCQknaHxoZWxwJyA9PiBcJGhlbHAsCkBAIC0xMDEsMTQgKzEwNywxOSBAQAogICAgIGRpZSAiJFA6IGFyZ3VtZW50IG1pc3Npbmc6IHBhdGNoZmlsZSBvciAtZiBmaWxlIHBsZWFzZVxuIjsKIH0KIAoraWYgKCRvdXRwdXRfc2VwYXJhdG9yIG5lICIsICIpIHsKKyAgICAkb3V0cHV0X211bHRpbGluZSA9IDA7Cit9CisKIG15ICRzZWxlY3Rpb25zID0gJGVtYWlsICsgJHNjbSArICRzdGF0dXMgKyAkc3Vic3lzdGVtICsgJHdlYjsKIGlmICgkc2VsZWN0aW9ucyA9PSAwKSB7CiAgICAgdXNhZ2UoKTsKICAgICBkaWUgIiRQOiAgTWlzc2luZyByZXF1aXJlZCBvcHRpb246IGVtYWlsLCBzY20sIHN0YXR1cywgc3Vic3lzdGVtIG9yIHdlYlxuIjsKIH0KIAotaWYgKCRlbWFpbCAmJiAoJGVtYWlsX21haW50YWluZXIgKyAkZW1haWxfbGlzdCArICRlbWFpbF9zdWJzY3JpYmVyX2xpc3QKLQkgICAgICAgKyAkZW1haWxfZ2l0ICsgJGVtYWlsX2dpdF9wZW5ndWluX2NoaWVmcykgPT0gMCkgeworaWYgKCRlbWFpbCAmJgorICAgICgkZW1haWxfbWFpbnRhaW5lciArICRlbWFpbF9saXN0ICsgJGVtYWlsX3N1YnNjcmliZXJfbGlzdCArCisgICAgICRlbWFpbF9naXQgKyAkZW1haWxfZ2l0X3Blbmd1aW5fY2hpZWZzICsgJGVtYWlsX2dpdF9ibGFtZSkgPT0gMCkgewogICAgIHVzYWdlKCk7CiAgICAgZGllICIkUDogUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCAxIGVtYWlsIG9wdGlvblxuIjsKIH0KQEAgLTE0Nyw5ICsxNTgsMzYgQEAKIH0KIGNsb3NlKE1BSU5UKTsKIAorbXkgJW1haWxtYXA7CisKK2lmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKKyAgICBvcGVuKE1BSUxNQVAsICI8JHtsa19wYXRofS5tYWlsbWFwIikgfHwgd2FybiAiJFA6IENhbid0IG9wZW4gLm1haWxtYXBcbiI7CisgICAgd2hpbGUgKDxNQUlMTUFQPikgeworCW15ICRsaW5lID0gJF87CisKKwluZXh0IGlmICgkbGluZSA9fiBtL15ccyojLyk7CisJbmV4dCBpZiAoJGxpbmUgPX4gbS9eXHMqJC8pOworCisJbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkbGluZSk7CisJJGxpbmUgPSBmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzKTsKKworCW5leHQgaWYgKCRsaW5lID1+IG0vXlxzKiQvKTsKKworCWlmIChleGlzdHMoJG1haWxtYXB7JG5hbWV9KSkgeworCSAgICBteSAkb2JqID0gJG1haWxtYXB7JG5hbWV9OworCSAgICBwdXNoKEAkb2JqLCAkYWRkcmVzcyk7CisJfSBlbHNlIHsKKwkgICAgbXkgQGFyciA9ICgkYWRkcmVzcyk7CisJICAgICRtYWlsbWFweyRuYW1lfSA9IFxAYXJyOworCX0KKyAgICB9CisgICAgY2xvc2UoTUFJTE1BUCk7Cit9CisKICMjIHVzZSB0aGUgZmlsZW5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgZmluZCB0aGUgZmlsZW5hbWVzIGluIHRoZSBwYXRjaGZpbGVzCiAKIG15IEBmaWxlcyA9ICgpOworbXkgQHJhbmdlID0gKCk7CiAKIGZvcmVhY2ggbXkgJGZpbGUgKEBBUkdWKSB7CiAgICAgIyNpZiAkZmlsZSBpcyBhIGRpcmVjdG9yeSBhbmQgaXQgbGFja3MgYSB0cmFpbGluZyBzbGFzaCwgYWRkIG9uZQpAQCAtMTYyLDEzICsyMDAsMTkgQEAKIAlwdXNoKEBmaWxlcywgJGZpbGUpOwogICAgIH0gZWxzZSB7CiAJbXkgJGZpbGVfY250ID0gQGZpbGVzOworCW15ICRsYXN0ZmlsZTsKIAlvcGVuKFBBVENILCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOwogCXdoaWxlICg8UEFUQ0g+KSB7CiAJICAgIGlmIChtL15cK1wrXCtccysoXFMrKS8pIHsKIAkJbXkgJGZpbGVuYW1lID0gJDE7CiAJCSRmaWxlbmFtZSA9fiBzQF5bXi9dKi9AQDsKIAkJJGZpbGVuYW1lID1+IHNAXG5AQDsKKwkJJGxhc3RmaWxlID0gJGZpbGVuYW1lOwogCQlwdXNoKEBmaWxlcywgJGZpbGVuYW1lKTsKKwkgICAgfSBlbHNpZiAobS9eXEBcQCAtKFxkKyksKFxkKykvKSB7CisJCWlmICgkZW1haWxfZ2l0X2JsYW1lKSB7CisJCSAgICBwdXNoKEByYW5nZSwgIiRsYXN0ZmlsZTokMTokMiIpOworCQl9CiAJICAgIH0KIAl9CiAJY2xvc2UoUEFUQ0gpOwpAQCAtMjAxLDYgKzI0NSw3IEBACiAJICAgIGlmICgkdHlwZSBlcSAnWCcpIHsKIAkJaWYgKGZpbGVfbWF0Y2hfcGF0dGVybigkZmlsZSwgJHZhbHVlKSkgewogCQkgICAgJGV4Y2x1ZGUgPSAxOworCQkgICAgbGFzdDsKIAkJfQogCSAgICB9CiAJfQpAQCAtMjA4LDM1ICsyNTMsNDUgQEAKIAogICAgIGlmICghJGV4Y2x1ZGUpIHsKIAlteSAkdHZpID0gMDsKKwlteSAlaGFzaDsKIAlmb3JlYWNoIG15ICRsaW5lIChAdHlwZXZhbHVlKSB7CiAJICAgIGlmICgkbGluZSA9fiBtL14oXEMpOlxzKiguKikvKSB7CiAJCW15ICR0eXBlID0gJDE7CiAJCW15ICR2YWx1ZSA9ICQyOwogCQlpZiAoJHR5cGUgZXEgJ0YnKSB7CiAJCSAgICBpZiAoZmlsZV9tYXRjaF9wYXR0ZXJuKCRmaWxlLCAkdmFsdWUpKSB7Ci0JCQlhZGRfY2F0ZWdvcmllcygkdHZpKTsKKwkJCW15ICR2YWx1ZV9wZCA9ICgkdmFsdWUgPX4gdHJAL0BAKTsKKwkJCW15ICRmaWxlX3BkID0gKCRmaWxlICA9fiB0ckAvQEApOworCQkJJHZhbHVlX3BkKysgaWYgKHN1YnN0cigkdmFsdWUsLTEsMSkgbmUgIi8iKTsKKwkJCWlmICgkcGF0dGVybl9kZXB0aCA9PSAwIHx8CisJCQkgICAgKCgkZmlsZV9wZCAtICR2YWx1ZV9wZCkgPCAkcGF0dGVybl9kZXB0aCkpIHsKKwkJCSAgICAkaGFzaHskdHZpfSA9ICR2YWx1ZV9wZDsKKwkJCX0KIAkJICAgIH0KIAkJfQogCSAgICB9CiAJICAgICR0dmkrKzsKIAl9CisJZm9yZWFjaCBteSAkbGluZSAoc29ydCB7JGhhc2h7JGJ9IDw9PiAkaGFzaHskYX19IGtleXMgJWhhc2gpIHsKKwkgICAgYWRkX2NhdGVnb3JpZXMoJGxpbmUpOworCX0KICAgICB9CiAKICAgICBpZiAoJGVtYWlsICYmICRlbWFpbF9naXQpIHsKIAlyZWNlbnRfZ2l0X3NpZ25vZmZzKCRmaWxlKTsKICAgICB9CiAKKyAgICBpZiAoJGVtYWlsICYmICRlbWFpbF9naXRfYmxhbWUpIHsKKwlnaXRfYXNzaWduX2JsYW1lKCRmaWxlKTsKKyAgICB9CiB9CiAKIGlmICgkZW1haWwpIHsKICAgICBmb3JlYWNoIG15ICRjaGllZiAoQHBlbmd1aW5fY2hpZWYpIHsKIAlpZiAoJGNoaWVmID1+IG0vXiguKik6KC4qKS8pIHsKIAkgICAgbXkgJGVtYWlsX2FkZHJlc3M7Ci0JICAgIGlmICgkZW1haWxfdXNlbmFtZSkgewotCQkkZW1haWxfYWRkcmVzcyA9IGZvcm1hdF9lbWFpbCgkMSwgJDIpOwotCSAgICB9IGVsc2UgewotCQkkZW1haWxfYWRkcmVzcyA9ICQyOwotCSAgICB9CisKKwkgICAgJGVtYWlsX2FkZHJlc3MgPSBmb3JtYXRfZW1haWwoJDEsICQyKTsKIAkgICAgaWYgKCRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMpIHsKIAkJcHVzaChAZW1haWxfdG8sICRlbWFpbF9hZGRyZXNzKTsKIAkgICAgfSBlbHNlIHsKQEAgLTI1OCwyMiArMzEzLDIyIEBACiB9CiAKIGlmICgkc2NtKSB7Ci0gICAgQHNjbSA9IHNvcnRfYW5kX3VuaXEoQHNjbSk7CisgICAgQHNjbSA9IHVuaXEoQHNjbSk7CiAgICAgb3V0cHV0KEBzY20pOwogfQogCiBpZiAoJHN0YXR1cykgewotICAgIEBzdGF0dXMgPSBzb3J0X2FuZF91bmlxKEBzdGF0dXMpOworICAgIEBzdGF0dXMgPSB1bmlxKEBzdGF0dXMpOwogICAgIG91dHB1dChAc3RhdHVzKTsKIH0KIAogaWYgKCRzdWJzeXN0ZW0pIHsKLSAgICBAc3Vic3lzdGVtID0gc29ydF9hbmRfdW5pcShAc3Vic3lzdGVtKTsKKyAgICBAc3Vic3lzdGVtID0gdW5pcShAc3Vic3lzdGVtKTsKICAgICBvdXRwdXQoQHN1YnN5c3RlbSk7CiB9CiAKIGlmICgkd2ViKSB7Ci0gICAgQHdlYiA9IHNvcnRfYW5kX3VuaXEoQHdlYik7CisgICAgQHdlYiA9IHVuaXEoQHdlYik7CiAgICAgb3V0cHV0KEB3ZWIpOwogfQogCkBAIC0zMTEsMTAgKzM2NiwxMiBAQAogICAgIC0tZ2l0LW1heC1tYWludGFpbmVycyA9PiBtYXhpbXVtIG1haW50YWluZXJzIHRvIGFkZCAoZGVmYXVsdDogNSkKICAgICAtLWdpdC1taW4tcGVyY2VudCA9PiBtaW5pbXVtIHBlcmNlbnRhZ2Ugb2YgY29tbWl0cyByZXF1aXJlZCAoZGVmYXVsdDogNSkKICAgICAtLWdpdC1zaW5jZSA9PiBnaXQgaGlzdG9yeSB0byB1c2UgKGRlZmF1bHQ6IDEteWVhci1hZ28pCisgICAgLS1naXQtYmxhbWUgPT4gdXNlIGdpdCBibGFtZSB0byBmaW5kIG1vZGlmaWVkIGNvbW1pdHMgZm9yIHBhdGNoIG9yIGZpbGUKICAgICAtLW0gPT4gaW5jbHVkZSBtYWludGFpbmVyKHMpIGlmIGFueQogICAgIC0tbiA9PiBpbmNsdWRlIG5hbWUgJ0Z1bGwgTmFtZSA8YWRkclxAZG9tYWluLnRsZD4nCiAgICAgLS1sID0+IGluY2x1ZGUgbGlzdChzKSBpZiBhbnkKICAgICAtLXMgPT4gaW5jbHVkZSBzdWJzY3JpYmVyIG9ubHkgbGlzdChzKSBpZiBhbnkKKyAgICAtLXJlbW92ZS1kdXBsaWNhdGVzID0+IG1pbmltaXplIGR1cGxpY2F0ZSBlbWFpbCBuYW1lcy9hZGRyZXNzZXMKICAgLS1zY20gPT4gcHJpbnQgU0NNIHRyZWUocykgaWYgYW55CiAgIC0tc3RhdHVzID0+IHByaW50IHN0YXR1cyBpZiBhbnkKICAgLS1zdWJzeXN0ZW0gPT4gcHJpbnQgc3Vic3lzdGVtIG5hbWUgaWYgYW55CkBAIC0zMjIsMjQgKzM3OSwyOCBAQAogCiBPdXRwdXQgdHlwZSBvcHRpb25zOgogICAtLXNlcGFyYXRvciBbLCBdID0+IHNlcGFyYXRvciBmb3IgbXVsdGlwbGUgZW50cmllcyBvbiAxIGxpbmUKKyAgICB1c2luZyAtLXNlcGFyYXRvciBhbHNvIHNldHMgLS1ub211bHRpbGluZSBpZiAtLXNlcGFyYXRvciBpcyBub3QgWywgXQogICAtLW11bHRpbGluZSA9PiBwcmludCAxIGVudHJ5IHBlciBsaW5lCiAKLURlZmF1bHQgb3B0aW9uczoKLSAgWy0tZW1haWwgLS1naXQgLS1tIC0tbiAtLWwgLS1tdWx0aWxpbmVdCi0KIE90aGVyIG9wdGlvbnM6CisgIC0tcGF0dGVybi1kZXB0aCA9PiBOdW1iZXIgb2YgcGF0dGVybiBkaXJlY3RvcnkgdHJhdmVyc2FscyAoZGVmYXVsdDogMCAoYWxsKSkKICAgLS12ZXJzaW9uID0+IHNob3cgdmVyc2lvbgogICAtLWhlbHAgPT4gc2hvdyB0aGlzIGhlbHAgaW5mb3JtYXRpb24KIAorRGVmYXVsdCBvcHRpb25zOgorICBbLS1lbWFpbCAtLWdpdCAtLW0gLS1uIC0tbCAtLW11bHRpbGluZSAtLXBhdHRlcm4tZGVwdGg9MCAtLXJlbW92ZS1kdXBsaWNhdGVzXQorCiBOb3RlczoKICAgVXNpbmcgIi1mIGRpcmVjdG9yeSIgbWF5IGdpdmUgdW5leHBlY3RlZCByZXN1bHRzOgotCi0gIFVzZWQgd2l0aCAiLS1naXQiLCBnaXQgc2lnbmF0b3JzIGZvciBfYWxsXyBmaWxlcyBpbiBhbmQgYmVsb3cKLSAgICAgZGlyZWN0b3J5IGFyZSBleGFtaW5lZCBhcyBnaXQgcmVjdXJzZXMgZGlyZWN0b3JpZXMuCi0gICAgIEFueSBzcGVjaWZpZWQgWDogKGV4Y2x1ZGUpIHBhdHRlcm4gbWF0Y2hlcyBhcmUgX25vdF8gaWdub3JlZC4KLSAgVXNlZCB3aXRoICItLW5vZ2l0IiwgZGlyZWN0b3J5IGlzIHVzZWQgYXMgYSBwYXR0ZXJuIG1hdGNoLAotICAgICBubyBpbmRpdmlkdWFsIGZpbGUgd2l0aGluIHRoZSBkaXJlY3Rvcnkgb3Igc3ViZGlyZWN0b3J5Ci0gICAgIGlzIG1hdGNoZWQuCisgICAgICBVc2VkIHdpdGggIi0tZ2l0IiwgZ2l0IHNpZ25hdG9ycyBmb3IgX2FsbF8gZmlsZXMgaW4gYW5kIGJlbG93CisgICAgICAgICAgZGlyZWN0b3J5IGFyZSBleGFtaW5lZCBhcyBnaXQgcmVjdXJzZXMgZGlyZWN0b3JpZXMuCisgICAgICAgICAgQW55IHNwZWNpZmllZCBYOiAoZXhjbHVkZSkgcGF0dGVybiBtYXRjaGVzIGFyZSBfbm90XyBpZ25vcmVkLgorICAgICAgVXNlZCB3aXRoICItLW5vZ2l0IiwgZGlyZWN0b3J5IGlzIHVzZWQgYXMgYSBwYXR0ZXJuIG1hdGNoLAorICAgICAgICAgbm8gaW5kaXZpZHVhbCBmaWxlIHdpdGhpbiB0aGUgZGlyZWN0b3J5IG9yIHN1YmRpcmVjdG9yeQorICAgICAgICAgaXMgbWF0Y2hlZC4KKyAgICAgIFVzZWQgd2l0aCAiLS1naXQtYmxhbWUiLCBkb2VzIG5vdCBpdGVyYXRlIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkKKyAgVXNpbmcgIi0tZ2l0LWJsYW1lIiBpcyBzbG93IGFuZCBtYXkgYWRkIG9sZCBjb21taXR0ZXJzIGFuZCBhdXRob3JzCisgICAgICB0aGF0IGFyZSBubyBsb25nZXIgYWN0aXZlIG1haW50YWluZXJzIHRvIHRoZSBvdXRwdXQuCiBFT1QKIH0KIApAQCAtMzcwLDMwICs0MzEsMTAwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN1YiBmb3JtYXRfZW1haWwgewotICAgIG15ICgkbmFtZSwgJGVtYWlsKSA9IEBfOworc3ViIHBhcnNlX2VtYWlsIHsKKyAgICBteSAoJGZvcm1hdHRlZF9lbWFpbCkgPSBAXzsKKworICAgIG15ICRuYW1lID0gIiI7CisgICAgbXkgJGFkZHJlc3MgPSAiIjsKKworICAgIGlmICgkZm9ybWF0dGVkX2VtYWlsID1+IC9eKFtePF0rKTwoLitcQC4qKT4uKiQvKSB7CisJJG5hbWUgPSAkMTsKKwkkYWRkcmVzcyA9ICQyOworICAgIH0gZWxzaWYgKCRmb3JtYXR0ZWRfZW1haWwgPX4gL15ccyo8KC4rXEBcUyopPi4qJC8pIHsKKwkkYWRkcmVzcyA9ICQxOworICAgIH0gZWxzaWYgKCRmb3JtYXR0ZWRfZW1haWwgPX4gL14oLitcQFxTKikuKiQvKSB7CisJJGFkZHJlc3MgPSAkMTsKKyAgICB9CiAKICAgICAkbmFtZSA9fiBzL15ccyt8XHMrJC8vZzsKICAgICAkbmFtZSA9fiBzL15cInxcIiQvL2c7Ci0gICAgJGVtYWlsID1+IHMvXlxzK3xccyskLy9nOwotCi0gICAgbXkgJGZvcm1hdHRlZF9lbWFpbCA9ICIiOworICAgICRhZGRyZXNzID1+IHMvXlxzK3xccyskLy9nOwogCiAgICAgaWYgKCRuYW1lID1+IC9bXmEtejAtOSBcLlwtXS9pKSB7ICAgICMjaGFzICJtdXN0IHF1b3RlIiBjaGFycwogCSRuYW1lID1+IHMvKD88IVxcKSIvXFwiL2c7ICAgICAgICMjZXNjYXBlIHF1b3RlcwotCSRmb3JtYXR0ZWRfZW1haWwgPSAiXCIke25hbWV9XCJcIFw8JHtlbWFpbH1cPiI7Ci0gICAgfSBlbHNlIHsKLQkkZm9ybWF0dGVkX2VtYWlsID0gIiR7bmFtZX0gXDwke2VtYWlsfVw+IjsKKwkkbmFtZSA9ICJcIiRuYW1lXCIiOwogICAgIH0KKworICAgIHJldHVybiAoJG5hbWUsICRhZGRyZXNzKTsKK30KKworc3ViIGZvcm1hdF9lbWFpbCB7CisgICAgbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBAXzsKKworICAgIG15ICRmb3JtYXR0ZWRfZW1haWw7CisKKyAgICAkbmFtZSA9fiBzL15ccyt8XHMrJC8vZzsKKyAgICAkbmFtZSA9fiBzL15cInxcIiQvL2c7CisgICAgJGFkZHJlc3MgPX4gcy9eXHMrfFxzKyQvL2c7CisKKyAgICBpZiAoJG5hbWUgPX4gL1teYS16MC05IFwuXC1dL2kpIHsgICAgIyNoYXMgIm11c3QgcXVvdGUiIGNoYXJzCisJJG5hbWUgPX4gcy8oPzwhXFwpIi9cXCIvZzsgICAgICAgIyNlc2NhcGUgcXVvdGVzCisJJG5hbWUgPSAiXCIkbmFtZVwiIjsKKyAgICB9CisKKyAgICBpZiAoJGVtYWlsX3VzZW5hbWUpIHsKKwlpZiAoIiRuYW1lIiBlcSAiIikgeworCSAgICAkZm9ybWF0dGVkX2VtYWlsID0gIiRhZGRyZXNzIjsKKwl9IGVsc2UgeworCSAgICAkZm9ybWF0dGVkX2VtYWlsID0gIiRuYW1lIDwke2FkZHJlc3N9PiI7CisJfQorICAgIH0gZWxzZSB7CisJJGZvcm1hdHRlZF9lbWFpbCA9ICRhZGRyZXNzOworICAgIH0KKwogICAgIHJldHVybiAkZm9ybWF0dGVkX2VtYWlsOwogfQogCitzdWIgZmluZF9zdGFydGluZ19pbmRleCB7CisKKyAgICBteSAoJGluZGV4KSA9IEBfOworCisgICAgd2hpbGUgKCRpbmRleCA+IDApIHsKKwlteSAkdHYgPSAkdHlwZXZhbHVlWyRpbmRleF07CisJaWYgKCEoJHR2ID1+IG0vXihcQyk6XHMqKC4qKS8pKSB7CisJICAgIGxhc3Q7CisJfQorCSRpbmRleC0tOworICAgIH0KKworICAgIHJldHVybiAkaW5kZXg7Cit9CisKK3N1YiBmaW5kX2VuZGluZ19pbmRleCB7CisgICAgbXkgKCRpbmRleCkgPSBAXzsKKworICAgIHdoaWxlICgkaW5kZXggPCBAdHlwZXZhbHVlKSB7CisJbXkgJHR2ID0gJHR5cGV2YWx1ZVskaW5kZXhdOworCWlmICghKCR0diA9fiBtL14oXEMpOlxzKiguKikvKSkgeworCSAgICBsYXN0OworCX0KKwkkaW5kZXgrKzsKKyAgICB9CisKKyAgICByZXR1cm4gJGluZGV4OworfQorCiBzdWIgYWRkX2NhdGVnb3JpZXMgewogICAgIG15ICgkaW5kZXgpID0gQF87CiAKLSAgICAkaW5kZXggPSAkaW5kZXggLSAxOwotICAgIHdoaWxlICgkaW5kZXggPj0gMCkgewotCW15ICR0diA9ICR0eXBldmFsdWVbJGluZGV4XTsKKyAgICBteSAkaTsKKyAgICBteSAkc3RhcnQgPSBmaW5kX3N0YXJ0aW5nX2luZGV4KCRpbmRleCk7CisgICAgbXkgJGVuZCA9IGZpbmRfZW5kaW5nX2luZGV4KCRpbmRleCk7CisKKyAgICBwdXNoKEBzdWJzeXN0ZW0sICR0eXBldmFsdWVbJHN0YXJ0XSk7CisKKyAgICBmb3IgKCRpID0gJHN0YXJ0ICsgMTsgJGkgPCAkZW5kOyAkaSsrKSB7CisJbXkgJHR2ID0gJHR5cGV2YWx1ZVskaV07CiAJaWYgKCR0diA9fiBtL14oXEMpOlxzKiguKikvKSB7CiAJICAgIG15ICRwdHlwZSA9ICQxOwogCSAgICBteSAkcHZhbHVlID0gJDI7CkBAIC00MTQsMTkgKzU0NSwxOSBAQAogCQkgICAgfQogCQl9CiAJICAgIH0gZWxzaWYgKCRwdHlwZSBlcSAiTSIpIHsKLQkJbXkgJHBfdXNlZCA9IDA7Ci0JCWlmICgkaW5kZXggPj0gMCkgewotCQkgICAgbXkgJHR2ID0gJHR5cGV2YWx1ZVskaW5kZXggLSAxXTsKLQkJICAgIGlmICgkdHYgPX4gbS9eKFxDKTpccyooLiopLykgewotCQkJaWYgKCQxIGVxICJQIikgewotCQkJICAgIGlmICgkZW1haWxfdXNlbmFtZSkgewotCQkJCXB1c2hfZW1haWxfYWRkcmVzcyhmb3JtYXRfZW1haWwoJDIsICRwdmFsdWUpKTsKLQkJCQkkcF91c2VkID0gMTsKKwkJbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkcHZhbHVlKTsKKwkJaWYgKCRuYW1lIGVxICIiKSB7CisJCSAgICBpZiAoJGkgPiAwKSB7CisJCQlteSAkdHYgPSAkdHlwZXZhbHVlWyRpIC0gMV07CisJCQlpZiAoJHR2ID1+IG0vXihcQyk6XHMqKC4qKS8pIHsKKwkJCSAgICBpZiAoJDEgZXEgIlAiKSB7CisJCQkJJG5hbWUgPSAkMjsKKwkJCQkkcHZhbHVlID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcyk7CiAJCQkgICAgfQogCQkJfQogCQkgICAgfQogCQl9Ci0JCWlmICghJHBfdXNlZCkgeworCQlpZiAoJGVtYWlsX21haW50YWluZXIpIHsKIAkJICAgIHB1c2hfZW1haWxfYWRkcmVzc2VzKCRwdmFsdWUpOwogCQl9CiAJICAgIH0gZWxzaWYgKCRwdHlwZSBlcSAiVCIpIHsKQEAgLTQzNiwzMSArNTY3LDQxIEBACiAJICAgIH0gZWxzaWYgKCRwdHlwZSBlcSAiUyIpIHsKIAkJcHVzaChAc3RhdHVzLCAkcHZhbHVlKTsKIAkgICAgfQotCi0JICAgICRpbmRleC0tOwotCX0gZWxzZSB7Ci0JICAgIHB1c2goQHN1YnN5c3RlbSwkdHYpOwotCSAgICAkaW5kZXggPSAtMTsKIAl9CiAgICAgfQogfQogCitteSAlZW1haWxfaGFzaF9uYW1lOworbXkgJWVtYWlsX2hhc2hfYWRkcmVzczsKKworc3ViIGVtYWlsX2ludXNlIHsKKyAgICBteSAoJG5hbWUsICRhZGRyZXNzKSA9IEBfOworCisgICAgcmV0dXJuIDEgaWYgKCgkbmFtZSBlcSAiIikgJiYgKCRhZGRyZXNzIGVxICIiKSk7CisgICAgcmV0dXJuIDEgaWYgKCgkbmFtZSBuZSAiIikgJiYgZXhpc3RzKCRlbWFpbF9oYXNoX25hbWV7JG5hbWV9KSk7CisgICAgcmV0dXJuIDEgaWYgKCgkYWRkcmVzcyBuZSAiIikgJiYgZXhpc3RzKCRlbWFpbF9oYXNoX2FkZHJlc3N7JGFkZHJlc3N9KSk7CisKKyAgICByZXR1cm4gMDsKK30KKwogc3ViIHB1c2hfZW1haWxfYWRkcmVzcyB7Ci0gICAgbXkgKCRlbWFpbF9hZGRyZXNzKSA9IEBfOworICAgIG15ICgkbGluZSkgPSBAXzsKIAotICAgIG15ICRlbWFpbF9uYW1lID0gIiI7Ci0gICAgaWYgKCRlbWFpbF9hZGRyZXNzID1+IG0vKFtePF0rKTwoLipcQC4qKT4kLykgewotCSRlbWFpbF9uYW1lID0gJDE7Ci0JJGVtYWlsX2FkZHJlc3MgPSAkMjsKKyAgICBteSAoJG5hbWUsICRhZGRyZXNzKSA9IHBhcnNlX2VtYWlsKCRsaW5lKTsKKworICAgIGlmICgkYWRkcmVzcyBlcSAiIikgeworCXJldHVybiAwOwogICAgIH0KIAotICAgIGlmICgkZW1haWxfbWFpbnRhaW5lcikgewotCWlmICgkZW1haWxfdXNlbmFtZSAmJiAkZW1haWxfbmFtZSkgewotCSAgICBwdXNoKEBlbWFpbF90bywgZm9ybWF0X2VtYWlsKCRlbWFpbF9uYW1lLCAkZW1haWxfYWRkcmVzcykpOwotCX0gZWxzZSB7Ci0JICAgIHB1c2goQGVtYWlsX3RvLCAkZW1haWxfYWRkcmVzcyk7Ci0JfQorICAgIGlmICghJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzKSB7CisJcHVzaChAZW1haWxfdG8sIGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MpKTsKKyAgICB9IGVsc2lmICghZW1haWxfaW51c2UoJG5hbWUsICRhZGRyZXNzKSkgeworCXB1c2goQGVtYWlsX3RvLCBmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzKSk7CisJJGVtYWlsX2hhc2hfbmFtZXskbmFtZX0rKzsKKwkkZW1haWxfaGFzaF9hZGRyZXNzeyRhZGRyZXNzfSsrOwogICAgIH0KKworICAgIHJldHVybiAxOwogfQogCiBzdWIgcHVzaF9lbWFpbF9hZGRyZXNzZXMgewpAQCAtNDc2LDcgKzYxNyw5IEBACiAJICAgIHB1c2hfZW1haWxfYWRkcmVzcygkZW50cnkpOwogCX0KICAgICB9IGVsc2UgewotCXdhcm4oIkludmFsaWQgTUFJTlRBSU5FUlMgYWRkcmVzczogJyIgLiAkYWRkcmVzcyAuICInXG4iKTsKKwlpZiAoIXB1c2hfZW1haWxfYWRkcmVzcygkYWRkcmVzcykpIHsKKwkgICAgd2FybigiSW52YWxpZCBNQUlOVEFJTkVSUyBhZGRyZXNzOiAnIiAuICRhZGRyZXNzIC4gIidcbiIpOworCX0KICAgICB9CiB9CiAKQEAgLTQ5Miw2ICs2MzUsMzIgQEAKICAgICByZXR1cm4gIiI7CiB9CiAKK3N1YiBtYWlsbWFwIHsKKyAgICBteSBAbGluZXMgPSBAXzsKKyAgICBteSAlaGFzaDsKKworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworCW15ICgkbmFtZSwgJGFkZHJlc3MpID0gcGFyc2VfZW1haWwoJGxpbmUpOworCWlmICghZXhpc3RzKCRoYXNoeyRuYW1lfSkpIHsKKwkgICAgJGhhc2h7JG5hbWV9ID0gJGFkZHJlc3M7CisJfSBlbHNpZiAoJGFkZHJlc3MgbmUgJGhhc2h7JG5hbWV9KSB7CisJICAgICRhZGRyZXNzID0gJGhhc2h7JG5hbWV9OworCSAgICAkbGluZSA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MpOworCX0KKwlpZiAoZXhpc3RzKCRtYWlsbWFweyRuYW1lfSkpIHsKKwkgICAgbXkgJG9iaiA9ICRtYWlsbWFweyRuYW1lfTsKKwkgICAgZm9yZWFjaCBteSAkbWFwX2FkZHJlc3MgKEAkb2JqKSB7CisJCWlmICgoJG1hcF9hZGRyZXNzIGVxICRhZGRyZXNzKSAmJgorCQkgICAgKCRtYXBfYWRkcmVzcyBuZSAkaGFzaHskbmFtZX0pKSB7CisJCSAgICAkbGluZSA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGhhc2h7JG5hbWV9KTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiBAbGluZXM7Cit9CisKIHN1YiByZWNlbnRfZ2l0X3NpZ25vZmZzIHsKICAgICBteSAoJGZpbGUpID0gQF87CiAKQEAgLTUwMCw2ICs2NjksNyBAQAogICAgIG15ICRvdXRwdXQgPSAiIjsKICAgICBteSAkY291bnQgPSAwOwogICAgIG15IEBsaW5lcyA9ICgpOworICAgIG15ICVoYXNoOwogICAgIG15ICR0b3RhbF9zaWduX29mZnM7CiAKICAgICBpZiAod2hpY2goImdpdCIpIGVxICIiKSB7CkBAIC01MTMsNTIgKzY4MywxMTkgQEAKICAgICB9CiAKICAgICAkY21kID0gImdpdCBsb2cgLS1zaW5jZT0ke2VtYWlsX2dpdF9zaW5jZX0gLS0gJHtmaWxlfSI7Ci0gICAgJGNtZCAuPSAiIHwgZ3JlcCAtRWkgXCJeWy1fIAlhLXpdK2J5Oi4qXFxcQC4qXCRcIiI7Ci0gICAgaWYgKCEkZW1haWxfZ2l0X3Blbmd1aW5fY2hpZWZzKSB7Ci0JJGNtZCAuPSAiIHwgZ3JlcCAtRXYgXCIke3Blbmd1aW5fY2hpZWZzfVwiIjsKLSAgICB9Ci0gICAgJGNtZCAuPSAiIHwgY3V0IC1mMi0gLWRcIjpcIiI7Ci0gICAgJGNtZCAuPSAiIHwgc29ydCB8IHVuaXEgLWMgfCBzb3J0IC1ybiI7CiAKICAgICAkb3V0cHV0ID0gYCR7Y21kfWA7CiAgICAgJG91dHB1dCA9fiBzL15ccyovL2dtOwogCiAgICAgQGxpbmVzID0gc3BsaXQoIlxuIiwgJG91dHB1dCk7CiAKLSAgICAkdG90YWxfc2lnbl9vZmZzID0gMDsKKyAgICBAbGluZXMgPSBncmVwKC9eWy1fIAlhLXpdK2J5Oi4qXEAuKiQvaSwgQGxpbmVzKTsKKyAgICBpZiAoISRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMpIHsKKwlAbGluZXMgPSBncmVwKCEvJHtwZW5ndWluX2NoaWVmc30vaSwgQGxpbmVzKTsKKyAgICB9CisgICAgIyBjdXQgLWYyLSAtZCI6IgorICAgIHMvLio6XHMqKC4rKVxzKi8kMS8gZm9yIChAbGluZXMpOworCisgICAgJHRvdGFsX3NpZ25fb2ZmcyA9IEBsaW5lczsKKworICAgIGlmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKKwlAbGluZXMgPSBtYWlsbWFwKEBsaW5lcyk7CisgICAgfQorCisgICAgQGxpbmVzID0gc29ydChAbGluZXMpOworCisgICAgIyB1bmlxIC1jCisgICAgJGhhc2h7JF99KysgZm9yIEBsaW5lczsKKworICAgICMgc29ydCAtcm4KKyAgICBmb3JlYWNoIG15ICRsaW5lIChzb3J0IHskaGFzaHskYn0gPD0+ICRoYXNoeyRhfX0ga2V5cyAlaGFzaCkgeworCW15ICRzaWduX29mZnMgPSAkaGFzaHskbGluZX07CisJJGNvdW50Kys7CisJbGFzdCBpZiAoJHNpZ25fb2ZmcyA8ICRlbWFpbF9naXRfbWluX3NpZ25hdHVyZXMgfHwKKwkJICRjb3VudCA+ICRlbWFpbF9naXRfbWF4X21haW50YWluZXJzIHx8CisJCSAkc2lnbl9vZmZzICogMTAwIC8gJHRvdGFsX3NpZ25fb2ZmcyA8ICRlbWFpbF9naXRfbWluX3BlcmNlbnQpOworCXB1c2hfZW1haWxfYWRkcmVzcygkbGluZSk7CisgICAgfQorfQorCitzdWIgc2F2ZV9jb21taXRzIHsKKyAgICBteSAoJGNtZCwgQGNvbW1pdHMpID0gQF87CisgICAgbXkgJG91dHB1dDsKKyAgICBteSBAbGluZXMgPSAoKTsKKworICAgICRvdXRwdXQgPSBgJHtjbWR9YDsKKworICAgIEBsaW5lcyA9IHNwbGl0KCJcbiIsICRvdXRwdXQpOwogICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgewotCWlmICgkbGluZSA9fiBtLyhbMC05XSspXHMrKC4qKS8pIHsKLQkgICAgJHRvdGFsX3NpZ25fb2ZmcyArPSAkMTsKLQl9IGVsc2UgewotCSAgICBkaWUoIiRQOiBVbmV4cGVjdGVkIGdpdCBvdXRwdXQ6ICR7bGluZX1cbiIpOworCWlmICgkbGluZSA9fiBtL14oXHcrKSAvKSB7CisJICAgIHB1c2ggKEBjb21taXRzLCAkMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4gQGNvbW1pdHM7Cit9CisKK3N1YiBnaXRfYXNzaWduX2JsYW1lIHsKKyAgICBteSAoJGZpbGUpID0gQF87CisKKyAgICBteSBAbGluZXMgPSAoKTsKKyAgICBteSBAY29tbWl0cyA9ICgpOworICAgIG15ICRjbWQ7CisgICAgbXkgJG91dHB1dDsKKyAgICBteSAlaGFzaDsKKyAgICBteSAkdG90YWxfc2lnbl9vZmZzOworICAgIG15ICRjb3VudDsKKworICAgIGlmIChAcmFuZ2UpIHsKKwlmb3JlYWNoIG15ICRmaWxlX3JhbmdlX2RpZmYgKEByYW5nZSkgeworCSAgICBuZXh0IGlmICghKCRmaWxlX3JhbmdlX2RpZmYgPX4gbS8oLispOiguKyk6KC4rKS8pKTsKKwkgICAgbXkgJGRpZmZfZmlsZSA9ICQxOworCSAgICBteSAkZGlmZl9zdGFydCA9ICQyOworCSAgICBteSAkZGlmZl9sZW5ndGggPSAkMzsKKwkgICAgbmV4dCBpZiAoISgiJGZpbGUiIGVxICIkZGlmZl9maWxlIikpOworCSAgICAkY21kID0gImdpdCBibGFtZSAtbCAtTCAkZGlmZl9zdGFydCwrJGRpZmZfbGVuZ3RoICRmaWxlIjsKKwkgICAgQGNvbW1pdHMgPSBzYXZlX2NvbW1pdHMoJGNtZCwgQGNvbW1pdHMpOworCX0KKyAgICB9IGVsc2UgeworCWlmICgtZiAkZmlsZSkgeworCSAgICAkY21kID0gImdpdCBibGFtZSAtbCAkZmlsZSI7CisJICAgIEBjb21taXRzID0gc2F2ZV9jb21taXRzKCRjbWQsIEBjb21taXRzKTsKIAl9CiAgICAgfQogCi0gICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7Ci0JaWYgKCRsaW5lID1+IG0vKFswLTldKylccysoLiopLykgewotCSAgICBteSAkc2lnbl9vZmZzID0gJDE7Ci0JICAgICRsaW5lID0gJDI7Ci0JICAgICRjb3VudCsrOwotCSAgICBpZiAoJHNpZ25fb2ZmcyA8ICRlbWFpbF9naXRfbWluX3NpZ25hdHVyZXMgfHwKLQkgICAgICAgICRjb3VudCA+ICRlbWFpbF9naXRfbWF4X21haW50YWluZXJzIHx8Ci0JCSRzaWduX29mZnMgKiAxMDAgLyAkdG90YWxfc2lnbl9vZmZzIDwgJGVtYWlsX2dpdF9taW5fcGVyY2VudCkgewotCQlsYXN0OwotCSAgICB9CisgICAgJHRvdGFsX3NpZ25fb2ZmcyA9IDA7CisgICAgQGNvbW1pdHMgPSB1bmlxKEBjb21taXRzKTsKKyAgICBmb3JlYWNoIG15ICRjb21taXQgKEBjb21taXRzKSB7CisJJGNtZCA9ICJnaXQgbG9nIC0xICR7Y29tbWl0fSI7CisKKwkkb3V0cHV0ID0gYCR7Y21kfWA7CisJJG91dHB1dCA9fiBzL15ccyovL2dtOworCUBsaW5lcyA9IHNwbGl0KCJcbiIsICRvdXRwdXQpOworCisJQGxpbmVzID0gZ3JlcCgvXlstXyAJYS16XStieTouKlxALiokL2ksIEBsaW5lcyk7CisJaWYgKCEkZW1haWxfZ2l0X3Blbmd1aW5fY2hpZWZzKSB7CisJICAgIEBsaW5lcyA9IGdyZXAoIS8ke3Blbmd1aW5fY2hpZWZzfS9pLCBAbGluZXMpOwogCX0KLQlpZiAoJGxpbmUgPX4gbS8oLispPCguKyk+LykgewotCSAgICBteSAkZ2l0X25hbWUgPSAkMTsKLQkgICAgbXkgJGdpdF9hZGRyID0gJDI7Ci0JICAgIGlmICgkZW1haWxfdXNlbmFtZSkgewotCQlwdXNoKEBlbWFpbF90bywgZm9ybWF0X2VtYWlsKCRnaXRfbmFtZSwgJGdpdF9hZGRyKSk7Ci0JICAgIH0gZWxzZSB7Ci0JCXB1c2goQGVtYWlsX3RvLCAkZ2l0X2FkZHIpOwotCSAgICB9Ci0JfSBlbHNpZiAoJGxpbmUgPX4gbS88KC4rKT4vKSB7Ci0JICAgIG15ICRnaXRfYWRkciA9ICQxOwotCSAgICBwdXNoKEBlbWFpbF90bywgJGdpdF9hZGRyKTsKLQl9IGVsc2UgewotCSAgICBwdXNoKEBlbWFpbF90bywgJGxpbmUpOworCisJIyBjdXQgLWYyLSAtZCI6IgorCXMvLio6XHMqKC4rKVxzKi8kMS8gZm9yIChAbGluZXMpOworCisJJHRvdGFsX3NpZ25fb2ZmcyArPSBAbGluZXM7CisKKwlpZiAoJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzKSB7CisJICAgIEBsaW5lcyA9IG1haWxtYXAoQGxpbmVzKTsKIAl9CisKKwkkaGFzaHskX30rKyBmb3IgQGxpbmVzOworICAgIH0KKworICAgICRjb3VudCA9IDA7CisgICAgZm9yZWFjaCBteSAkbGluZSAoc29ydCB7JGhhc2h7JGJ9IDw9PiAkaGFzaHskYX19IGtleXMgJWhhc2gpIHsKKwlteSAkc2lnbl9vZmZzID0gJGhhc2h7JGxpbmV9OworCSRjb3VudCsrOworCWxhc3QgaWYgKCRzaWduX29mZnMgPCAkZW1haWxfZ2l0X21pbl9zaWduYXR1cmVzIHx8CisJCSAkY291bnQgPiAkZW1haWxfZ2l0X21heF9tYWludGFpbmVycyB8fAorCQkgJHNpZ25fb2ZmcyAqIDEwMCAvICR0b3RhbF9zaWduX29mZnMgPCAkZW1haWxfZ2l0X21pbl9wZXJjZW50KTsKKwlwdXNoX2VtYWlsX2FkZHJlc3MoJGxpbmUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rYWxsc3ltcy5jIGIvc2NyaXB0cy9rYWxsc3ltcy5jCmluZGV4IDY0MzQzY2MuLjg2YzM4OTYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2FsbHN5bXMuYworKysgYi9zY3JpcHRzL2thbGxzeW1zLmMKQEAgLTU4NSw3ICs1ODUsNyBAQAogewogCWNvbnN0IGNoYXIgKnRhaWwgPSBzdHI7CiAKLQl3aGlsZSAoKnRhaWwgIT0gJ18nKQorCXdoaWxlICgqdGFpbCA9PSAnXycpCiAJCXRhaWwrKzsKIAogCXJldHVybiB0YWlsIC0gc3RyOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCmluZGV4IDQwZTAwNDUuLjYyYTkwMjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTY1Nyw2ICs2NTcsMTUgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyogTG9va3MgbGlrZTogc3BpOlMgKi8KK3N0YXRpYyBpbnQgZG9fc3BpX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqaWQsCisJCQljaGFyICphbGlhcykKK3sKKwlzcHJpbnRmKGFsaWFzLCBTUElfTU9EVUxFX1BSRUZJWCAiJXMiLCBpZC0+bmFtZSk7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlmaWVsZCB7CiAJY29uc3QgY2hhciAqcHJlZml4OwogCWludCBmaWVsZDsKQEAgLTg1Myw2ICs4NjIsMTAgQEAKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBpMmNfZGV2aWNlX2lkKSwgImkyYyIsCiAJCQkgZG9faTJjX2VudHJ5LCBtb2QpOworCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2Rfc3BpX2RldmljZV90YWJsZSIpKQorCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKKwkJCSBzaXplb2Yoc3RydWN0IHNwaV9kZXZpY2VfaWQpLCAic3BpIiwKKwkJCSBkb19zcGlfZW50cnksIG1vZCk7CiAJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9kbWlfZGV2aWNlX3RhYmxlIikpCiAJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAogCQkJIHNpemVvZihzdHJ1Y3QgZG1pX3N5c3RlbV9pZCksICJkbWkiLApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDQ1MjI5NDguLjgwMWExNmEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogICogICBUaGUgJCBzeW50YXggaXMgZm9yIHNlY3Rpb25zIHdoZXJlIGxkIGFwcGVuZCBhIGRvdCBudW1iZXIKICAqICAgdG8gbWFrZSBzZWN0aW9uIG5hbWUgdW5pcXVlLgogICovCi1pbnQgbWF0Y2goY29uc3QgY2hhciAqc3ltLCBjb25zdCBjaGFyICogY29uc3QgcGF0W10pCitzdGF0aWMgaW50IG1hdGNoKGNvbnN0IGNoYXIgKnN5bSwgY29uc3QgY2hhciAqIGNvbnN0IHBhdFtdKQogewogCWNvbnN0IGNoYXIgKnA7CiAJd2hpbGUgKCpwYXQpIHsKQEAgLTE3NDYsNyArMTc0Niw3IEBACiAJYnVmX3ByaW50ZihiLCAifTtcbiIpOwogfQogCi12b2lkIGFkZF9zdGFnaW5nX2ZsYWcoc3RydWN0IGJ1ZmZlciAqYiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIGFkZF9zdGFnaW5nX2ZsYWcoc3RydWN0IGJ1ZmZlciAqYiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqc3RhZ2luZ19kaXIgPSAiZHJpdmVycy9zdGFnaW5nIjsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2Qvc3VtdmVyc2lvbi5jIGIvc2NyaXB0cy9tb2Qvc3VtdmVyc2lvbi5jCmluZGV4IGFhZGM1MjIuLmVjZjljN2QgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL3N1bXZlcnNpb24uYworKysgYi9zY3JpcHRzL21vZC9zdW12ZXJzaW9uLmMKQEAgLTMzNCw4ICszMzQsNiBAQAogCQlkZXBzX2RyaXZlcnMvbmV0L2R1bW15Lm8gOj0gXAogCQkgIGRyaXZlcnMvbmV0L2R1bW15LmMgXAogCQkgICAgJCh3aWxkY2FyZCBpbmNsdWRlL2NvbmZpZy9uZXQvZmFzdHJvdXRlLmgpIFwKLQkJICBpbmNsdWRlL2xpbnV4L2NvbmZpZy5oIFwKLQkJICAgICQod2lsZGNhcmQgaW5jbHVkZS9jb25maWcvaC5oKSBcCiAJCSAgaW5jbHVkZS9saW51eC9tb2R1bGUuaCBcCiAKIAkgICBTdW0gYWxsIGZpbGVzIGluIHRoZSBzYW1lIGRpciBvciBzdWJkaXJzLgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9zZWxpbnV4L21kcC9tZHAuYyBiL3NjcmlwdHMvc2VsaW51eC9tZHAvbWRwLmMKaW5kZXggY2E3NTdkNC4uYjRjZWQ4NSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9zZWxpbnV4L21kcC9tZHAuYworKysgYi9zY3JpcHRzL3NlbGludXgvbWRwL21kcC5jCkBAIC0zMSwxMyArMzEsMTMgQEAKIAogI2luY2x1ZGUgImZsYXNrLmgiCiAKLXZvaWQgdXNhZ2UoY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIHVzYWdlKGNoYXIgKm5hbWUpCiB7CiAJcHJpbnRmKCJ1c2FnZTogJXMgWy1tXSBwb2xpY3lfZmlsZSBjb250ZXh0X2ZpbGVcbiIsIG5hbWUpOwogCWV4aXQoMSk7CiB9CiAKLXZvaWQgZmluZF9jb21tb25fbmFtZShjaGFyICpjbmFtZSwgY2hhciAqZGVzdCwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGZpbmRfY29tbW9uX25hbWUoY2hhciAqY25hbWUsIGNoYXIgKmRlc3QsIGludCBsZW4pCiB7CiAJY2hhciAqc3RhcnQsICplbmQ7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvdHJhY2luZy9wb3dlci5wbCBiL3NjcmlwdHMvdHJhY2luZy9wb3dlci5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY3MjliMy4uMDAwMDAwMAotLS0gYS9zY3JpcHRzL3RyYWNpbmcvcG93ZXIucGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0KLSMgQ29weXJpZ2h0IDIwMDgsIEludGVsIENvcnBvcmF0aW9uCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwKLSMKLSMgVGhpcyBwcm9ncmFtIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtIGluIGEgZmlsZSBuYW1lZCBDT1BZSU5HOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0jIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSMKLSMgQXV0aG9yczoKLSMgCUFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4LmludGVsLmNvbT4KLQotCi0jCi0jIFRoaXMgc2NyaXB0IHR1cm5zIGEgY3N0YXRlIGZ0cmFjZSBvdXRwdXQgaW50byBhIFNWRyBncmFwaGljIHRoYXQgc2hvd3MKLSMgaGlzdG9yaWMgQy1zdGF0ZSBpbmZvcm1hdGlvbgotIwotIwotIyAJY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2UgfCBwZXJsIHBvd2VyLnBsID4gb3V0LnN2ZwotIwotCi1teSBAc3R5bGVzOwotbXkgJGJhc2UgPSAwOwotCi1teSBAcHN0YXRlX2xhc3Q7Ci1teSBAcHN0YXRlX2xldmVsOwotCi0kc3R5bGVzWzBdID0gImZpbGw6cmdiKDAsMCwyNTUpO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1sxXSA9ICJmaWxsOnJnYigwLDI1NSwwKTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKLSRzdHlsZXNbMl0gPSAiZmlsbDpyZ2IoMjU1LDAsMjApO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1szXSA9ICJmaWxsOnJnYigyNTUsMjU1LDIwKTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKLSRzdHlsZXNbNF0gPSAiZmlsbDpyZ2IoMjU1LDAsMjU1KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKLSRzdHlsZXNbNV0gPSAiZmlsbDpyZ2IoMCwyNTUsMjU1KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKLSRzdHlsZXNbNl0gPSAiZmlsbDpyZ2IoMCwxMjgsMjU1KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKLSRzdHlsZXNbN10gPSAiZmlsbDpyZ2IoMCwyNTUsMTI4KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKLSRzdHlsZXNbOF0gPSAiZmlsbDpyZ2IoMCwyNSwyMCk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ci0KLQotcHJpbnQgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBzdGFuZGFsb25lPVwibm9cIj8+IFxuIjsKLXByaW50ICI8c3ZnIHdpZHRoPVwiMTAwMDBcIiBoZWlnaHQ9XCIxMDAlXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiI7Ci0KLW15ICRzY2FsZSA9IDMwMDAwLjA7Ci13aGlsZSAoPD4pIHsKLQlteSAkbGluZSA9ICRfOwotCWlmICgkbGluZSA9fiAvKFswLTlcLl0rKVxdIENTVEFURTogR29pbmcgdG8gQyhbMC05XSkgb24gY3B1IChbMC05XSspIGZvciAoWzAtOVwuXSspLykgewotCQlpZiAoJGJhc2UgPT0gMCkgewotCQkJJGJhc2UgPSAkMTsKLQkJfQotCQlteSAkdGltZSA9ICQxIC0gJGJhc2U7Ci0JCSR0aW1lID0gJHRpbWUgKiAkc2NhbGU7Ci0JCW15ICRDID0gJDI7Ci0JCW15ICRjcHUgPSAkMzsKLQkJbXkgJHkgPSA0MDAgKiAkY3B1OwotCQlteSAkZHVyYXRpb24gPSAkNCAqICRzY2FsZTsKLQkJbXkgJG1zZWMgPSBpbnQoJDQgKiAxMDAwMDApLzEwMC4wOwotCQlteSAkaGVpZ2h0ID0gJEMgKiAyMDsKLQkJJHN0eWxlID0gJHN0eWxlc1skQ107Ci0KLQkJJHkgPSAkeSArIDE0MCAtICRoZWlnaHQ7Ci0KLQkJJHgyID0gJHRpbWUgKyA0OwotCQkkeTIgPSAkeSArIDQ7Ci0KLQotCQlwcmludCAiPHJlY3QgeD1cIiR0aW1lXCIgd2lkdGg9XCIkZHVyYXRpb25cIiB5PVwiJHlcIiBoZWlnaHQ9XCIkaGVpZ2h0XCIgc3R5bGU9XCIkc3R5bGVcIi8+XG4iOwotCQlwcmludCAiPHRleHQgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCR4MiwkeTIpIHJvdGF0ZSg5MClcIj5DJEMgJG1zZWM8L3RleHQ+XG4iOwotCX0KLQlpZiAoJGxpbmUgPX4gLyhbMC05XC5dKylcXSBQU1RBVEU6IEdvaW5nIHRvIFAoWzAtOV0pIG9uIGNwdSAoWzAtOV0rKS8pIHsKLQkJbXkgJHRpbWUgPSAkMSAtICRiYXNlOwotCQlteSAkc3RhdGUgPSAkMjsKLQkJbXkgJGNwdSA9ICQzOwotCi0JCWlmIChkZWZpbmVkKCRwc3RhdGVfbGFzdFskY3B1XSkpIHsKLQkJCW15ICRmcm9tID0gJHBzdGF0ZV9sYXN0WyRjcHVdOwotCQkJbXkgJG9sZHN0YXRlID0gJHBzdGF0ZV9zdGF0ZVskY3B1XTsKLQkJCW15ICRkdXJhdGlvbiA9ICgkdGltZS0kZnJvbSkgKiAkc2NhbGU7Ci0KLQkJCSRmcm9tID0gJGZyb20gKiAkc2NhbGU7Ci0JCQlteSAkdG8gPSAkZnJvbSArICRkdXJhdGlvbjsKLQkJCW15ICRoZWlnaHQgPSAxNDAgLSAoJG9sZHN0YXRlICogKDE0MC84KSk7Ci0KLQkJCW15ICR5ID0gNDAwICogJGNwdSArIDIwMCArICRoZWlnaHQ7Ci0JCQlteSAkeTIgPSAkeSs0OwotCQkJbXkgJHN0eWxlID0gJHN0eWxlc1s4XTsKLQotCQkJcHJpbnQgIjxyZWN0IHg9XCIkZnJvbVwiIHk9XCIkeVwiIHdpZHRoPVwiJGR1cmF0aW9uXCIgaGVpZ2h0PVwiNVwiIHN0eWxlPVwiJHN0eWxlXCIvPlxuIjsKLQkJCXByaW50ICI8dGV4dCB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJGZyb20sJHkyKVwiPlAkb2xkc3RhdGUgKGNwdSAkY3B1KTwvdGV4dD5cbiI7Ci0JCX07Ci0KLQkJJHBzdGF0ZV9sYXN0WyRjcHVdID0gJHRpbWU7Ci0JCSRwc3RhdGVfc3RhdGVbJGNwdV0gPSAkc3RhdGU7Ci0JfQotfQotCi0KLXByaW50ICI8L3N2Zz5cbiI7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwppbmRleCA2YmZjN2VhLi44ZTk3NzdiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9tZWFzdXJtZW50c19zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9tZWFzdXJtZW50c19zZXFvcHMgPSB7CiAJLnN0YXJ0ID0gaW1hX21lYXN1cmVtZW50c19zdGFydCwKIAkubmV4dCA9IGltYV9tZWFzdXJlbWVudHNfbmV4dCwKIAkuc3RvcCA9IGltYV9tZWFzdXJlbWVudHNfc3RvcCwKQEAgLTIyMSw3ICsyMjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2Vxb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSBpbWFfbWVhc3VyZW1lbnRzX3N0YXJ0LAogCS5uZXh0ID0gaW1hX21lYXN1cmVtZW50c19uZXh0LAogCS5zdG9wID0gaW1hX21lYXN1cmVtZW50c19zdG9wLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9nYy5jIGIvc2VjdXJpdHkva2V5cy9nYy5jCmluZGV4IDQ4NWZjNjIuLjQ3NzBiZTMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvZ2MuYworKysgYi9zZWN1cml0eS9rZXlzL2djLmMKQEAgLTE2OSw5ICsxNjksOSBAQAogCiAJLyogdHJhd2wgdGhyb3VnaCB0aGUga2V5cyBsb29raW5nIGZvciBrZXlyaW5ncyAqLwogCWZvciAoOzspIHsKLQkJaWYgKGtleS0+ZXhwaXJ5ID4gbm93ICYmIGtleS0+ZXhwaXJ5IDwgbmV3X3RpbWVyKSB7CisJCWlmIChrZXktPmV4cGlyeSA+IGxpbWl0ICYmIGtleS0+ZXhwaXJ5IDwgbmV3X3RpbWVyKSB7CiAJCQlrZGVidWcoIndpbGwgZXhwaXJlICV4IGluICVsZCIsCi0JCQkgICAgICAga2V5X3NlcmlhbChrZXkpLCBrZXktPmV4cGlyeSAtIG5vdyk7CisJCQkgICAgICAga2V5X3NlcmlhbChrZXkpLCBrZXktPmV4cGlyeSAtIGxpbWl0KTsKIAkJCW5ld190aW1lciA9IGtleS0+ZXhwaXJ5OwogCQl9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCmluZGV4IDFlZDBmMDc2Li5iNGI1ZGExIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTg2OCw4ICs4NjgsMTkgQEAKIAogdm9pZCBhdmNfZGlzYWJsZSh2b2lkKQogewotCWF2Y19mbHVzaCgpOwotCXN5bmNocm9uaXplX3JjdSgpOwotCWlmIChhdmNfbm9kZV9jYWNoZXApCi0JCWttZW1fY2FjaGVfZGVzdHJveShhdmNfbm9kZV9jYWNoZXApOworCS8qCisJICogSWYgeW91IGFyZSBsb29raW5nIGF0IHRoaXMgYmVjYXVzZSB5b3UgaGF2ZSByZWFsaXplZCB0aGF0IHdlIGFyZQorCSAqIG5vdCBkZXN0cm95aW5nIHRoZSBhdmNfbm9kZV9jYWNoZXAgaXQgbWlnaHQgYmUgZWFzeSB0byBmaXgsIGJ1dAorCSAqIEkgZG9uJ3Qga25vdyB0aGUgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIHdlbGwgZW5vdWdoIHRvIGtub3cuICBJdCdzCisJICogcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHRhc2sgZGVyZWZlcmVuY2VkIHNlY3VyaXR5X29wcyB3aGVuCisJICogaXQgc3RpbGwgcG9pbnRlZCB0byBzZWxpbnV4IG9wZXJhdGlvbnMuICBJZiB0aGF0IGlzIHRoZSBjYXNlIGl0J3MKKwkgKiBwb3NzaWJsZSB0aGF0IGl0IGlzIGFib3V0IHRvIHVzZSB0aGUgYXZjIGFuZCBpcyBhYm91dCB0byBuZWVkIHRoZQorCSAqIGF2Y19ub2RlX2NhY2hlcC4gIEkga25vdyBJIGNvdWxkIHdyYXAgdGhlIHNlY3VyaXR5LmMgc2VjdXJpdHlfb3BzIGNhbGwKKwkgKiBpbiBhbiByY3VfbG9jaywgYnV0IHNlcmlvdXNseSwgaXQncyBub3Qgd29ydGggaXQuICBJbnN0ZWFkIEkganVzdCBmbHVzaAorCSAqIHRoZSBjYWNoZSBhbmQgZ2V0IHRoYXQgbWVtb3J5IGJhY2suCisJICovCisJaWYgKGF2Y19ub2RlX2NhY2hlcCkgeworCQlhdmNfZmx1c2goKTsKKwkJLyoga21lbV9jYWNoZV9kZXN0cm95KGF2Y19ub2RlX2NhY2hlcCk7ICovCisJfQogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBhY2FlN2VmNC4uYzMzYjZiYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTMwLDE3ICszMCwxMSBAQAogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgogI2luY2x1ZGUgPG5ldC9jaXBzb19pcHY0Lmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogI2luY2x1ZGUgInNtYWNrLmgiCiAKICNkZWZpbmUgdGFza19zZWN1cml0eSh0YXNrKQkodGFza19jcmVkX3h4eCgodGFzayksIHNlY3VyaXR5KSkKIAotLyoKLSAqIEkgaG9wZSB0aGVzZSBhcmUgdGhlIGhva2V5aXN0IGxpbmVzIG9mIGNvZGUgaW4gdGhlIG1vZHVsZS4gQ2FzZXkuCi0gKi8KLSNkZWZpbmUgREVWUFRTX1NVUEVSX01BR0lDCTB4MWNkMQotI2RlZmluZSBTT0NLRlNfTUFHSUMJCTB4NTM0RjQzNEIKLSNkZWZpbmUgVE1QRlNfTUFHSUMJCTB4MDEwMjE5OTQKLQogLyoqCiAgKiBzbWtfZmV0Y2ggLSBGZXRjaCB0aGUgc21hY2sgbGFiZWwgZnJvbSBhIGZpbGUuCiAgKiBAaXA6IGEgcG9pbnRlciB0byB0aGUgaW5vZGUKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwppbmRleCBmODNhODA5Li5hZWVhZDc1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkvKiBOby1vcCAqLwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxvYWRfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbG9hZF9zZXFfb3BzID0gewogCS5zdGFydCA9IGxvYWRfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IGxvYWRfc2VxX25leHQsCiAJLnNob3cgID0gbG9hZF9zZXFfc2hvdywKQEAgLTUwMyw3ICs1MDMsNyBAQAogCS8qIE5vLW9wICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY2lwc29fc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY2lwc29fc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBjaXBzb19zZXFfc3RhcnQsCiAJLnN0b3AgID0gY2lwc29fc2VxX3N0b3AsCiAJLm5leHQgID0gY2lwc29fc2VxX25leHQsCkBAIC02OTcsNyArNjk3LDcgQEAKIAkvKiBOby1vcCAqLwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5ldGxibGFkZHJfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmV0bGJsYWRkcl9zZXFfb3BzID0gewogCS5zdGFydCA9IG5ldGxibGFkZHJfc2VxX3N0YXJ0LAogCS5zdG9wICA9IG5ldGxibGFkZHJfc2VxX3N0b3AsCiAJLm5leHQgID0gbmV0bGJsYWRkcl9zZXFfbmV4dCwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggNTllNWZiZS4uNTYxZDZkOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTEzODcsMTEgKzEzODcsNiBAQAogCS5wb3N0X2FjdGlvbiA9IHNuZF9wY21fcG9zdF9kcmFpbl9pbml0CiB9OwogCi1zdHJ1Y3QgZHJhaW5fcmVjIHsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQl3YWl0X3F1ZXVlX3Qgd2FpdDsKLX07Ci0KIHN0YXRpYyBpbnQgc25kX3BjbV9kcm9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIAogLyoKQEAgLTE0MDcsMTAgKzE0MDIsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKIAlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgaSwgbnVtX2RyZWNzOwogCWludCBub25ibG9jayA9IDA7Ci0Jc3RydWN0IGRyYWluX3JlYyAqZHJlYywgZHJlY190bXAsICpkOwogCiAJY2FyZCA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkOwogCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CkBAIC0xNDMzLDM4ICsxNDI3LDEwIEBACiAJfSBlbHNlIGlmIChzdWJzdHJlYW0tPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQlub25ibG9jayA9IDE7CiAKLQlpZiAobm9uYmxvY2spCi0JCWdvdG8gbG9jazsgLyogbm8gbmVlZCB0byBhbGxvY2F0ZSB3YWl0cXVldWVzICovCi0KLQkvKiBhbGxvY2F0ZSB0ZW1wb3JhcnkgcmVjb3JkIGZvciBkcmFpbiBzeW5jICovCiAJZG93bl9yZWFkKCZzbmRfcGNtX2xpbmtfcndzZW0pOwotCWlmIChzbmRfcGNtX3N0cmVhbV9saW5rZWQoc3Vic3RyZWFtKSkgewotCQlkcmVjID0ga21hbGxvYyhzdWJzdHJlYW0tPmdyb3VwLT5jb3VudCAqIHNpemVvZigqZHJlYyksIEdGUF9LRVJORUwpOwotCQlpZiAoISBkcmVjKSB7Ci0JCQl1cF9yZWFkKCZzbmRfcGNtX2xpbmtfcndzZW0pOwotCQkJc25kX3Bvd2VyX3VubG9jayhjYXJkKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfSBlbHNlCi0JCWRyZWMgPSAmZHJlY190bXA7Ci0KLQkvKiBjb3VudCBvbmx5IHBsYXliYWNrIHN0cmVhbXMgKi8KLQludW1fZHJlY3MgPSAwOwotCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7Ci0JCXJ1bnRpbWUgPSBzLT5ydW50aW1lOwotCQlpZiAocy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJCWQgPSAmZHJlY1tudW1fZHJlY3MrK107Ci0JCQlkLT5zdWJzdHJlYW0gPSBzOwotCQkJaW5pdF93YWl0cXVldWVfZW50cnkoJmQtPndhaXQsIGN1cnJlbnQpOwotCQkJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmZC0+d2FpdCk7Ci0JCX0KLQl9Ci0JdXBfcmVhZCgmc25kX3BjbV9saW5rX3J3c2VtKTsKLQotIGxvY2s6CiAJc25kX3BjbV9zdHJlYW1fbG9ja19pcnEoc3Vic3RyZWFtKTsKIAkvKiByZXN1bWUgcGF1c2UgKi8KLQlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9QQVVTRUQpCisJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1BBVVNFRCkKIAkJc25kX3BjbV9wYXVzZShzdWJzdHJlYW0sIDApOwogCiAJLyogcHJlLXN0YXJ0L3N0b3AgLSBhbGwgcnVubmluZyBzdHJlYW1zIGFyZSBjaGFuZ2VkIHRvIERSQUlOSU5HIHN0YXRlICovCkBAIC0xNDc5LDI1ICsxNDQ1LDM1IEBACiAKIAlmb3IgKDs7KSB7CiAJCWxvbmcgdG91dDsKKwkJc3RydWN0IHNuZF9wY21fcnVudGltZSAqdG9fY2hlY2s7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJcmVzdWx0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJLyogYWxsIGZpbmlzaGVkPyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2RyZWNzOyBpKyspIHsKLQkJCXJ1bnRpbWUgPSBkcmVjW2ldLnN1YnN0cmVhbS0+cnVudGltZTsKLQkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9EUkFJTklORykKKwkJLyogZmluZCBhIHN1YnN0cmVhbSB0byBkcmFpbiAqLworCQl0b19jaGVjayA9IE5VTEw7CisJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CisJCQlpZiAocy0+c3RyZWFtICE9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQkJY29udGludWU7CisJCQlydW50aW1lID0gcy0+cnVudGltZTsKKwkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9EUkFJTklORykgeworCQkJCXRvX2NoZWNrID0gcnVudGltZTsKIAkJCQlicmVhazsKKwkJCX0KIAkJfQotCQlpZiAoaSA9PSBudW1fZHJlY3MpCi0JCQlicmVhazsgLyogeWVzLCBhbGwgZHJhaW5lZCAqLwotCisJCWlmICghdG9fY2hlY2spCisJCQlicmVhazsgLyogYWxsIGRyYWluZWQgKi8KKwkJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOworCQlhZGRfd2FpdF9xdWV1ZSgmdG9fY2hlY2stPnNsZWVwLCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKKwkJdXBfcmVhZCgmc25kX3BjbV9saW5rX3J3c2VtKTsKIAkJc25kX3Bvd2VyX3VubG9jayhjYXJkKTsKIAkJdG91dCA9IHNjaGVkdWxlX3RpbWVvdXQoMTAgKiBIWik7CiAJCXNuZF9wb3dlcl9sb2NrKGNhcmQpOworCQlkb3duX3JlYWQoJnNuZF9wY21fbGlua19yd3NlbSk7CiAJCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZ0b19jaGVjay0+c2xlZXAsICZ3YWl0KTsKIAkJaWYgKHRvdXQgPT0gMCkgewogCQkJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKQogCQkJCXJlc3VsdCA9IC1FU1RSUElQRTsKQEAgLTE1MTIsMTYgKzE0ODgsNyBAQAogCiAgdW5sb2NrOgogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQotCWlmICghbm9uYmxvY2spIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9kcmVjczsgaSsrKSB7Ci0JCQlkID0gJmRyZWNbaV07Ci0JCQlydW50aW1lID0gZC0+c3Vic3RyZWFtLT5ydW50aW1lOwotCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmZC0+d2FpdCk7Ci0JCX0KLQkJaWYgKGRyZWMgIT0gJmRyZWNfdG1wKQotCQkJa2ZyZWUoZHJlYyk7Ci0JfQorCXVwX3JlYWQoJnNuZF9wY21fbGlua19yd3NlbSk7CiAJc25kX3Bvd2VyX3VubG9jayhjYXJkKTsKIAogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwppbmRleCAxZWRhYjdiLi4zMTM2Yzg4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCisrKyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKQEAgLTExMCw5ICsxMTAsNiBAQAogLy8gcmF0aGVyIHRoYW4gNjRrIGFzIHNvbWUgb2YgdGhlIGdhbWVzIHdvcmsgbW9yZSByZXNwb25zaXZlbHkuCiAvLyBsb2cgYmFzZSAyKCBidWZmIHN6ID0gMzJrKS4KIAotLy9zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZhdWx0b3JkZXIgPSAzOwotLy9NT0RVTEVfUEFSTShkZWZhdWx0b3JkZXIsICJpIik7Ci0KIC8vCiAvLyBUdXJuIG9uL29mZiBkZWJ1Z2dpbmcgY29tcGlsYXRpb24gYnkgY29tbWVudGluZyBvdXQgIiNkZWZpbmUgQ1NERUJVRyIKIC8vCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc3lzX3RpbWVyLmMgYi9zb3VuZC9vc3Mvc3lzX3RpbWVyLmMKaW5kZXggMTA3NTM0NC4uOGRiNmFlZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3N5c190aW1lci5jCisrKyBiL3NvdW5kL29zcy9zeXNfdGltZXIuYwpAQCAtMTAwLDkgKzEwMCw2IEBACiAJY3Vycl90ZW1wbyA9IDYwOwogCWN1cnJfdGltZWJhc2UgPSAxMDA7CiAJb3BlbmVkID0gMTsKLQotCTsKLQogCXsKIAkJZGVmX3Rtci5leHBpcmVzID0gKDEpICsgamlmZmllczsKIAkJYWRkX3RpbWVyKCZkZWZfdG1yKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9seDY0NjRlcy9seDY0NjRlcy5oIGIvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmgKaW5kZXggMDEyYzAxMC4uNTFhZmMwNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmgKKysrIGIvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmgKQEAgLTg2LDcgKzg2LDYgQEAKIAogCS8qIG1lc3NhZ2luZyAqLwogCXNwaW5sb2NrX3QJCW1zZ19sb2NrOyAgICAgICAgICAvKiBtZXNzYWdlIHNwaW5sb2NrICovCi0JYXRvbWljX3QJICAgICAgICBzZW5kX21lc3NhZ2VfbG9ja2VkOwogCXN0cnVjdCBseF9ybWggICAgICAgICAgIHJtaDsKIAogCS8qIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTk1LDcgKzk0LDYgQEAKIAl1aW50ICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9ydW5uaW5nWzJdOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGJvYXJkX3NhbXBsZV9yYXRlOyAvKiBzYW1wbGUgcmF0ZSByZWFkIGZyb20KIAkJCQkJCSAgICAqIGJvYXJkICovCi0JdTMyICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7CSAgIC8qIG91ciBzYW1wbGUgcmF0ZSAqLwogCXUxNiAgICAgICAgICAgICAgICAgICAgIHBjbV9ncmFudWxhcml0eTsgICAvKiBib2FyZCBibG9ja3NpemUgKi8KIAogCS8qIGRtYSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4X2NvcmUuYyBiL3NvdW5kL3BjaS9seDY0NjRlcy9seF9jb3JlLmMKaW5kZXggNTgxMjc4MC4uMzA4NmI3NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4X2NvcmUuYworKysgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHhfY29yZS5jCkBAIC0zMTQsOTggKzMxNCw2IEBACiAjZGVmaW5lIFhJTElOWF9QT0xMX05PX1NMRUVQICAgIDEwMAogI2RlZmluZSBYSUxJTlhfUE9MTF9JVEVSQVRJT05TICAxNTAKIAotI2lmIDAgLyogbm90IHVzZWQgbm93ICovCi1zdGF0aWMgaW50IGx4X21lc3NhZ2Vfc2VuZChzdHJ1Y3QgbHg2NDY0ZXMgKmNoaXAsIHN0cnVjdCBseF9ybWggKnJtaCkKLXsKLQl1MzIgcmVnID0gRURfRFNQX1RJTUVEX09VVDsKLQlpbnQgZHdsb29wOwotCWludCBhbnN3ZXJfcmVjZWl2ZWQ7Ci0KLQlpZiAobHhfZHNwX3JlZ19yZWFkKGNoaXAsIGVSZWdfQ1NNKSAmIChSZWdfQ1NNX01DIHwgUmVnX0NTTV9NUikpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBMWFAgIlBJT1NlbmRNZXNzYWdlIGVSZWdfQ1NNICV4XG4iLCByZWcpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCS8qIHdyaXRlIGNvbW1hbmQgKi8KLQlseF9kc3BfcmVnX3dyaXRlYnVmKGNoaXAsIGVSZWdfQ1JNMSwgcm1oLT5jbWQsIHJtaC0+Y21kX2xlbik7Ci0KLQlzbmRfQlVHX09OKGF0b21pY19yZWFkKCZjaGlwLT5zZW5kX21lc3NhZ2VfbG9ja2VkKSAhPSAwKTsKLQlhdG9taWNfc2V0KCZjaGlwLT5zZW5kX21lc3NhZ2VfbG9ja2VkLCAxKTsKLQotCS8qIE1pY29CbGF6ZSBnb2dvZ28gKi8KLQlseF9kc3BfcmVnX3dyaXRlKGNoaXAsIGVSZWdfQ1NNLCBSZWdfQ1NNX01DKTsKLQotCS8qIHdhaXQgZm9yIGludGVycnVwdCB0byBhbnN3ZXIgKi8KLQlmb3IgKGR3bG9vcCA9IDA7IGR3bG9vcCAhPSBYSUxJTlhfVElNRU9VVF9NUzsgKytkd2xvb3ApIHsKLQkJYW5zd2VyX3JlY2VpdmVkID0gYXRvbWljX3JlYWQoJmNoaXAtPnNlbmRfbWVzc2FnZV9sb2NrZWQpOwotCQlpZiAoYW5zd2VyX3JlY2VpdmVkID09IDApCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0KLQotCWlmIChhbnN3ZXJfcmVjZWl2ZWQgPT0gMCkgewotCQkvKiBpbiBEZWJ1ZyBtb2RlIHZlcmlmeSBSZWdfQ1NNX01SICovCi0JCXNuZF9CVUdfT04oIShseF9kc3BfcmVnX3JlYWQoY2hpcCwgZVJlZ19DU00pICYgUmVnX0NTTV9NUikpOwotCi0JCS8qIGNvbW1hbmQgZmluaXNoZWQsIHJlYWQgc3RhdHVzICovCi0JCWlmIChybWgtPmRzcF9zdGF0ID09IDApCi0JCQlyZWcgPSBseF9kc3BfcmVnX3JlYWQoY2hpcCwgZVJlZ19DUk0xKTsKLQkJZWxzZQotCQkJcmVnID0gMDsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgTFhQICJUSU1FT1VUIGx4X21lc3NhZ2Vfc2VuZCEgIgotCQkJICAgIkludGVycnVwdHMgZGlzYWJsZWQ/XG4iKTsKLQotCQkvKiBhdHRlbnRlIGJpdCBSZWdfQ1NNX01SICovCi0JCWZvciAoaSA9IDA7IGkgIT0gWElMSU5YX1BPTExfSVRFUkFUSU9OUzsgaSsrKSB7Ci0JCQlpZiAoKGx4X2RzcF9yZWdfcmVhZChjaGlwLCBlUmVnX0NTTSkgJiBSZWdfQ1NNX01SKSkgewotCQkJCWlmIChybWgtPmRzcF9zdGF0ID09IDApCi0JCQkJCXJlZyA9IGx4X2RzcF9yZWdfcmVhZChjaGlwLCBlUmVnX0NSTTEpOwotCQkJCWVsc2UKLQkJCQkJcmVnID0gMDsKLQkJCQlnb3RvIHBvbGxpbmdfc3VjY2Vzc2Z1bDsKLQkJCX0KLQotCQkJaWYgKGkgPiBYSUxJTlhfUE9MTF9OT19TTEVFUCkKLQkJCQltc2xlZXAoMSk7Ci0JCX0KLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgTFhQICJUSU1FT1VUIGx4X21lc3NhZ2Vfc2VuZCEgIgotCQkJICAgInBvbGxpbmcgZmFpbGVkXG4iKTsKLQotcG9sbGluZ19zdWNjZXNzZnVsOgotCQlhdG9taWNfc2V0KCZjaGlwLT5zZW5kX21lc3NhZ2VfbG9ja2VkLCAwKTsKLQl9Ci0KLQlpZiAoKHJlZyAmIEVSUk9SX1ZBTFVFKSA9PSAwKSB7Ci0JCS8qIHJlYWQgcmVzcG9uc2UgKi8KLQkJaWYgKHJtaC0+c3RhdF9sZW4pIHsKLQkJCXNuZF9CVUdfT04ocm1oLT5zdGF0X2xlbiA+PSAoUkVHX0NSTV9OVU1CRVItMSkpOwotCi0JCQlseF9kc3BfcmVnX3JlYWRidWYoY2hpcCwgZVJlZ19DUk0yLCBybWgtPnN0YXQsCi0JCQkJCSAgIHJtaC0+c3RhdF9sZW4pOwotCQl9Ci0JfSBlbHNlCi0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HIExYUCAibHhfbWVzc2FnZV9zZW5kOiBlcnJvcl92YWx1ZSAleFxuIiwKLQkJCSAgIHJlZyk7Ci0KLQkvKiBjbGVhciBSZWdfQ1NNX01SICovCi0JbHhfZHNwX3JlZ193cml0ZShjaGlwLCBlUmVnX0NTTSwgMCk7Ci0KLQlzd2l0Y2ggKHJlZykgewotCWNhc2UgRURfRFNQX1RJTUVEX09VVDoKLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgTFhQICJseF9tZXNzYWdlX3NlbmQ6IGRzcCB0aW1lb3V0XG4iKTsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0KLQljYXNlIEVEX0RTUF9DUkFTSEVEOgotCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyBMWFAgImx4X21lc3NhZ2Vfc2VuZDogZHNwIGNyYXNoZWRcbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlseF9tZXNzYWdlX2R1bXAocm1oKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBub3QgdXNlZCBub3cgKi8KIAogc3RhdGljIGludCBseF9tZXNzYWdlX3NlbmRfYXRvbWljKHN0cnVjdCBseDY0NjRlcyAqY2hpcCwgc3RydWN0IGx4X3JtaCAqcm1oKQogewpAQCAtNDIzLDcgKzMzMSw3IEBACiAJLyogTWljb0JsYXplIGdvZ29nbyAqLwogCWx4X2RzcF9yZWdfd3JpdGUoY2hpcCwgZVJlZ19DU00sIFJlZ19DU01fTUMpOwogCi0JLyogd2FpdCBmb3IgaW50ZXJydXB0IHRvIGFuc3dlciAqLworCS8qIHdhaXQgZm9yIGRldmljZSB0byBhbnN3ZXIgKi8KIAlmb3IgKGR3bG9vcCA9IDA7IGR3bG9vcCAhPSBYSUxJTlhfVElNRU9VVF9NUyAqIDEwMDA7ICsrZHdsb29wKSB7CiAJCWlmIChseF9kc3BfcmVnX3JlYWQoY2hpcCwgZVJlZ19DU00pICYgUmVnX0NTTV9NUikgewogCQkJaWYgKHJtaC0+ZHNwX3N0YXQgPT0gMCkKQEAgLTExNzUsMTAgKzEwODMsNiBAQAogCQkqcl9hc3luY19lc2NtZCA9IDE7CiAJfQogCi0JaWYgKGlycXNyYyAmIE1BU0tfU1lTX1NUQVRVU19DTURfRE9ORSkKLQkJLyogeGlsaW54IGNvbW1hbmQgbm90aWZpY2F0aW9uICovCi0JCWF0b21pY19zZXQoJmNoaXAtPnNlbmRfbWVzc2FnZV9sb2NrZWQsIDApOwotCiAJaWYgKGlycV9hc3luYykgewogCQkvKiBzbmRfcHJpbnRkKCJpbnRlcnJ1cHQ6IGFzeW5jIGV2ZW50IHBlbmRpbmdcbiIpOyAqLwogCQkqcl9hc3luY19wZW5kaW5nID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCmluZGV4IDI3NThiOTAuLmU2OTMyMjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwpAQCAtMjc3LDcgKzI3NywxMSBAQAogCWlmICghZGFpLT5hY3RpdmUpCiAJCXJldHVybiAwOwogCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0JGNVhYX01VTFRJQ0hBTl9TVVBQT1JUKQorCXJldCA9IHNwb3J0X3NldF9tdWx0aWNoYW5uZWwoc3BvcnQsIDE2LCAweDNGRiwgMSk7CisjZWxzZQogCXJldCA9IHNwb3J0X3NldF9tdWx0aWNoYW5uZWwoc3BvcnQsIDE2LCAweDFGLCAxKTsKKyNlbmRpZgogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0zMzQsNyArMzM4LDExIEBACiAJCWdvdG8gc3BvcnRfZXJyOwogCX0KIAkvKlNQT1JUIHdvcmtzIGluIFRETSBtb2RlIHRvIHNpbXVsYXRlIEFDOTcgdHJhbnNmZXJzKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfQkY1WFhfTVVMVElDSEFOX1NVUFBPUlQpCisJcmV0ID0gc3BvcnRfc2V0X211bHRpY2hhbm5lbChzcG9ydF9oYW5kbGUsIDE2LCAweDNGRiwgMSk7CisjZWxzZQogCXJldCA9IHNwb3J0X3NldF9tdWx0aWNoYW5uZWwoc3BvcnRfaGFuZGxlLCAxNiwgMHgxRiwgMSk7CisjZW5kaWYKIAlpZiAocmV0KSB7CiAJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQlyZXQgPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5oIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuaAppbmRleCAzZjJhOTExLi5hMWY5N2RkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5oCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvc291bmQvYXJtL2JmNXh4LWFjOTcuaAorICogc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuaAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCmluZGV4IDg3NmFiYWQuLjFlOWQxNjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKQEAgLTIyNyw3ICsyMjcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBiZjV4eF9pMnNfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorc3RhdGljIHZvaWQgYmY1eHhfaTJzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAJcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKQEAgLTIzNiwzNiArMjM3LDMxIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJmNXh4X2kyc19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0KLQkJKHN0cnVjdCBzcG9ydF9kZXZpY2UgKilkYWktPnByaXZhdGVfZGF0YTsKIAogCXByX2RlYnVnKCIlcyA6IHNwb3J0ICVkXG4iLCBfX2Z1bmNfXywgZGFpLT5pZCk7Ci0JaWYgKCFkYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7CisKIAlpZiAoZGFpLT5jYXB0dXJlLmFjdGl2ZSkKLQkJc3BvcnRfcnhfc3RvcChzcG9ydCk7CisJCXNwb3J0X3J4X3N0b3Aoc3BvcnRfaGFuZGxlKTsKIAlpZiAoZGFpLT5wbGF5YmFjay5hY3RpdmUpCi0JCXNwb3J0X3R4X3N0b3Aoc3BvcnQpOworCQlzcG9ydF90eF9zdG9wKHNwb3J0X2hhbmRsZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYmY1eHhfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0KLQkJKHN0cnVjdCBzcG9ydF9kZXZpY2UgKilkYWktPnByaXZhdGVfZGF0YTsKIAogCXByX2RlYnVnKCIlcyA6IHNwb3J0ICVkXG4iLCBfX2Z1bmNfXywgZGFpLT5pZCk7Ci0JaWYgKCFkYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7CiAKLQlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnQsIFJGU1IgfCBSQ0tGRSwgUlNGU0V8MHgxZiwgMCwgMCk7CisJcmV0ID0gc3BvcnRfY29uZmlnX3J4KHNwb3J0X2hhbmRsZSwgYmY1eHhfaTJzLnJjcjEsCisJCQkJICAgICAgYmY1eHhfaTJzLnJjcjIsIDAsIDApOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JcmV0ID0gc3BvcnRfY29uZmlnX3R4KHNwb3J0LCBURlNSIHwgVENLRkUsIFRTRlNFfDB4MWYsIDAsIDApOworCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIGJmNXh4X2kycy50Y3IxLAorCQkJCSAgICAgIGJmNXh4X2kycy50Y3IyLCAwLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5oIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5oCmluZGV4IDcxMDdkMWEuLjI2NGVjZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuaAorKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvc291bmQvYXJtL2JmNXh4LWkycy5oCisgKiBzb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKaW5kZXggNDY5Y2U3Zi4uOTkwNTFmZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCiBpbnQgc3BvcnRfdHhfc3RhcnQoc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQpCiB7Ci0JdW5zaWduZWQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlwcl9kZWJ1ZygiJXM6IHR4X3J1bjolZCwgcnhfcnVuOiVkXG4iLCBfX2Z1bmNfXywKIAkJCXNwb3J0LT50eF9ydW4sIHNwb3J0LT5yeF9ydW4pOwogCWlmIChzcG9ydC0+dHhfcnVuKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKaW5kZXggMDEzNDNkYy4uYzQ4NDg1ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCkBAIC0yNTEsOCArMjUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkMTgzNl9zcGlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gImFkMTgzNi1zcGkiLAotCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm5hbWUJPSAiYWQxODM2IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUJCT0gYWQxODM2X3NwaV9wcm9iZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5jCmluZGV4IDlhMDQ5YTEuLjM0YjMwZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYwpAQCAtNDU2LDcgKzQ1Niw2IEBACiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWQxOTM4X3NwaV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAiYWQxOTM4IiwKLQkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlCQk9IGFkMTkzOF9zcGlfcHJvYmUsCkBAIC01MTUsNiArNTE0LDcgQEAKIAljb2RlYy0+bnVtX2RhaSA9IDE7CiAJY29kZWMtPndyaXRlID0gYWQxOTM4X3dyaXRlX3JlZzsKIAljb2RlYy0+cmVhZCA9IGFkMTkzOF9yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSBhZDE5Mzhfc2V0X2JpYXNfbGV2ZWw7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCmluZGV4IGQ4MGQ0MTQuLjVhZDY3N2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpAQCAtNTk1LDYgKzU5NSw3IEBACiAKIAkvKiBNb25vIENhcHR1cmUgbWl4ZXItbXV4ICovCiAJeyJDYXB0dXJlIFJpZ2h0IE1peGVyIiwgIlN0ZXJlbyIsICJDYXB0dXJlIFJpZ2h0IE11eCJ9LAorCXsiQ2FwdHVyZSBMZWZ0IE1peGVyIiwgIlN0ZXJlbyIsICJDYXB0dXJlIExlZnQgTXV4In0sCiAJeyJDYXB0dXJlIExlZnQgTWl4ZXIiLCAiQW5hbG9ndWUgTWl4IExlZnQiLCAiQ2FwdHVyZSBMZWZ0IE11eCJ9LAogCXsiQ2FwdHVyZSBMZWZ0IE1peGVyIiwgIkFuYWxvZ3VlIE1peCBMZWZ0IiwgIkNhcHR1cmUgUmlnaHQgTXV4In0sCiAJeyJDYXB0dXJlIFJpZ2h0IE1peGVyIiwgIkFuYWxvZ3VlIE1peCBSaWdodCIsICJDYXB0dXJlIExlZnQgTXV4In0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwppbmRleCBjNjRlNTVhLi42ODZlNWFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJCSAgICAgICAtIHdtOTA4MS0+ZnMpOwogCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGNsa19zeXNfcmF0ZXMpOyBpKyspIHsKIAkJY3VyX3ZhbCA9IGFicygod205MDgxLT5zeXNjbGtfcmF0ZSAvCi0JCQkgICAgICAgY2xrX3N5c19yYXRlc1tpXS5yYXRpbykgLSB3bTkwODEtPmZzKTs7CisJCQkgICAgICAgY2xrX3N5c19yYXRlc1tpXS5yYXRpbykgLSB3bTkwODEtPmZzKTsKIAkJaWYgKGN1cl92YWwgPCBiZXN0X3ZhbCkgewogCQkJYmVzdCA9IGk7CiAJCQliZXN0X3ZhbCA9IGN1cl92YWw7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKaW5kZXggZWNhMjJkNy4uN2EwNmMwYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpAQCAtNTEyLDM0ICs1MTIsNDkgQEAKIAkJCQkgICAgICAgaW50IGNoYW5uZWxfc2l6ZSkKIHsKIAl1MzIgZm10ID0gMDsKKwl1MzIgbWFzaywgcm90YXRlOwogCiAJc3dpdGNoIChjaGFubmVsX3NpemUpIHsKIAljYXNlIERBVklOQ0lfQVVESU9fV09SRF84OgogCQlmbXQgPSAweDAzOworCQlyb3RhdGUgPSA2OworCQltYXNrID0gMHgwMDAwMDBmZjsKIAkJYnJlYWs7CiAKIAljYXNlIERBVklOQ0lfQVVESU9fV09SRF8xMjoKIAkJZm10ID0gMHgwNTsKKwkJcm90YXRlID0gNTsKKwkJbWFzayA9IDB4MDAwMDBmZmY7CiAJCWJyZWFrOwogCiAJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMTY6CiAJCWZtdCA9IDB4MDc7CisJCXJvdGF0ZSA9IDQ7CisJCW1hc2sgPSAweDAwMDBmZmZmOwogCQlicmVhazsKIAogCWNhc2UgREFWSU5DSV9BVURJT19XT1JEXzIwOgogCQlmbXQgPSAweDA5OworCQlyb3RhdGUgPSAzOworCQltYXNrID0gMHgwMDBmZmZmZjsKIAkJYnJlYWs7CiAKIAljYXNlIERBVklOQ0lfQVVESU9fV09SRF8yNDoKIAkJZm10ID0gMHgwQjsKKwkJcm90YXRlID0gMjsKKwkJbWFzayA9IDB4MDBmZmZmZmY7CiAJCWJyZWFrOwogCiAJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMjg6CiAJCWZtdCA9IDB4MEQ7CisJCXJvdGF0ZSA9IDE7CisJCW1hc2sgPSAweDBmZmZmZmZmOwogCQlicmVhazsKIAogCWNhc2UgREFWSU5DSV9BVURJT19XT1JEXzMyOgogCQlmbXQgPSAweDBGOworCQlyb3RhdGUgPSAwOworCQltYXNrID0gMHhmZmZmZmZmZjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNTUwLDYgKzU2NSwxMyBAQAogCQkJCQlSWFNTWihmbXQpLCBSWFNTWigweDBGKSk7CiAJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNVF9SRUcsCiAJCQkJCVRYU1NaKGZtdCksIFRYU1NaKDB4MEYpKTsKKwltY2FzcF9tb2RfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1UX1JFRywgVFhST1Qocm90YXRlKSwKKwkJCQkJCQlUWFJPVCg3KSk7CisJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNVF9SRUcsIFJYUk9UKHJvdGF0ZSksCisJCQkJCQkJUlhST1QoNykpOworCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWE1BU0tfUkVHLCBtYXNrKTsKKwltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhNQVNLX1JFRywgbWFzayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjM4LDcgKzY2MCw2IEBACiAJCQlwcmludGsoS0VSTl9FUlIgInBsYXliYWNrIHRkbSBzbG90ICVkIG5vdCBzdXBwb3J0ZWRcbiIsCiAJCQkJZGV2LT50ZG1fc2xvdHMpOwogCi0JCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWE1BU0tfUkVHLCAweEZGRkZGRkZGKTsKIAkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRywgRlNYRFVSKTsKIAl9IGVsc2UgewogCQkvKiBiaXQgc3RyZWFtIGlzIE1TQiBmaXJzdCB3aXRoIG5vIGRlbGF5ICovCkBAIC02NTUsNyArNjc2LDYgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FwdHVyZSB0ZG0gc2xvdCAlZCBub3Qgc3VwcG9ydGVkXG4iLAogCQkJCWRldi0+dGRtX3Nsb3RzKTsKIAotCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhNQVNLX1JFRywgMHhGRkZGRkZGRik7CiAJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEZTUkRVUik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwppbmRleCA1YjllZDY0Li5kMTFhNmQ3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJCQlkb19kaXYodG1wLCBmcmVxX291dCk7CiAJCQl2YWwgPSB0bXA7CiAKLQkJCXZhbCA9ICh2YWwgPDwgMTYpIHwgNjQ7OworCQkJdmFsID0gKHZhbCA8PCAxNikgfCA2NDsKIAkJCXNzcF93cml0ZV9yZWcoc3NwLCBTU0FDREQsIHZhbCk7CiAKIAkJCXNzYWNkIHw9ICgweDYgPDwgNCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCmluZGV4IDhlNzlhNDEuLmMyMTVkMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCkBAIC02Nyw3ICs2Nyw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAjaWZkZWYgRU5GT1JDRV9SQVRFUwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7OworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAjZW5kaWYKIAogCW11dGV4X2xvY2soJmNsa19sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvdW5kX2NvcmUuYyBiL3NvdW5kL3NvdW5kX2NvcmUuYwppbmRleCBiYjRiODhlLi40OWM5OTgxIDEwMDY0NAotLS0gYS9zb3VuZC9zb3VuZF9jb3JlLmMKKysrIGIvc291bmQvc291bmRfY29yZS5jCkBAIC0yOSw3ICsyOSw3IEBACiBNT0RVTEVfQVVUSE9SKCJBbGFuIENveCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgY2hhciAqc291bmRfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKnNvdW5kX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJaWYgKE1BSk9SKGRldi0+ZGV2dCkgPT0gU09VTkRfTUFKT1IpCiAJCXJldHVybiBOVUxMOwpAQCAtNTAsNyArNTAsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihzb3VuZF9jbGFzcyk7CiAJfQogCi0Jc291bmRfY2xhc3MtPm5vZGVuYW1lID0gc291bmRfbm9kZW5hbWU7CisJc291bmRfY2xhc3MtPmRldm5vZGUgPSBzb3VuZF9kZXZub2RlOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY2hlZC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY2hlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlNzkxOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjaGVkLnR4dApAQCAtMCwwICsxLDQxIEBACitwZXJmLXNjaGVkKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLXNjaGVkIC0gVG9vbCB0byB0cmFjZS9tZWFzdXJlIHNjaGVkdWxlciBwcm9wZXJ0aWVzIChsYXRlbmNpZXMpCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgc2NoZWQnIHtyZWNvcmR8bGF0ZW5jeXxyZXBsYXl8dHJhY2V9CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhlcmUncyBmb3VyIHZhcmlhbnRzIG9mIHBlcmYgc2NoZWQ6CisKKyAgJ3BlcmYgc2NoZWQgcmVjb3JkIDxjb21tYW5kPicgdG8gcmVjb3JkIHRoZSBzY2hlZHVsaW5nIGV2ZW50cworICBvZiBhbiBhcmJpdHJhcnkgd29ya2xvYWQuCisKKyAgJ3BlcmYgc2NoZWQgbGF0ZW5jeScgdG8gcmVwb3J0IHRoZSBwZXIgdGFzayBzY2hlZHVsaW5nIGxhdGVuY2llcworICBhbmQgb3RoZXIgc2NoZWR1bGluZyBwcm9wZXJ0aWVzIG9mIHRoZSB3b3JrbG9hZC4KKworICAncGVyZiBzY2hlZCB0cmFjZScgdG8gc2VlIGEgZGV0YWlsZWQgdHJhY2Ugb2YgdGhlIHdvcmtsb2FkIHRoYXQKKyAgd2FzIHJlY29yZGVkLgorCisgICdwZXJmIHNjaGVkIHJlcGxheScgdG8gc2ltdWxhdGUgdGhlIHdvcmtsb2FkIHRoYXQgd2FzIHJlY29yZGVkCisgIHZpYSBwZXJmIHNjaGVkIHJlY29yZC4gKHRoaXMgaXMgZG9uZSBieSBzdGFydGluZyB1cCBtb2NrdXAgdGhyZWFkcworICB0aGF0IG1pbWljIHRoZSB3b3JrbG9hZCBiYXNlZCBvbiB0aGUgZXZlbnRzIGluIHRoZSB0cmFjZS4gVGhlc2UKKyAgdGhyZWFkcyBjYW4gdGhlbiByZXBsYXkgdGhlIHRpbWluZ3MgKENQVSBydW50aW1lIGFuZCBzbGVlcCBwYXR0ZXJucykKKyAgb2YgdGhlIHdvcmtsb2FkIGFzIGl0IG9jY3VyZWQgd2hlbiBpdCB3YXMgcmVjb3JkZWQgLSBhbmQgY2FuIHJlcGVhdAorICBpdCBhIG51bWJlciBvZiB0aW1lcywgbWVhc3VyaW5nIGl0cyBwZXJmb3JtYW5jZS4pCisKK09QVElPTlMKKy0tLS0tLS0KKy1EOjoKKy0tZHVtcC1yYXctdHJhY2U9OjoKKyAgICAgICAgRGlzcGxheSB2ZXJib3NlIGR1bXAgb2YgdGhlIHNjaGVkIGRhdGEuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmVkMzAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CkBAIC0wLDAgKzEsMzggQEAKK3BlcmYtdGltZWNoYXJ0KDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLXRpbWVjaGFydCAtIFRvb2wgdG8gdmlzdWFsaXplIHRvdGFsIHN5c3RlbSBiZWhhdmlvciBkdXJpbmcgYSB3b3JrbG9hZAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIHRpbWVjaGFydCcge3JlY29yZH0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGVyZSBhcmUgdHdvIHZhcmlhbnRzIG9mIHBlcmYgdGltZWNoYXJ0OgorCisgICdwZXJmIHRpbWVjaGFydCByZWNvcmQgPGNvbW1hbmQ+JyB0byByZWNvcmQgdGhlIHN5c3RlbSBsZXZlbCBldmVudHMKKyAgb2YgYW4gYXJiaXRyYXJ5IHdvcmtsb2FkLgorCisgICdwZXJmIHRpbWVjaGFydCcgdG8gdHVybiBhIHRyYWNlIGludG8gYSBTY2FsYWJsZSBWZWN0b3IgR3JhcGhpY3MgZmlsZSwKKyAgdGhhdCBjYW4gYmUgdmlld2VkIHdpdGggcG9wdWxhciBTVkcgdmlld2VycyBzdWNoIGFzICdJbmtzY2FwZScuCisKK09QVElPTlMKKy0tLS0tLS0KKy1vOjoKKy0tb3V0cHV0PTo6CisgICAgICAgIFNlbGVjdCB0aGUgb3V0cHV0IGZpbGUgKGRlZmF1bHQ6IG91dHB1dC5zdmcpCistaTo6CistLWlucHV0PTo6CisgICAgICAgIFNlbGVjdCB0aGUgaW5wdXQgZmlsZSAoZGVmYXVsdDogcGVyZi5kYXRhKQorLXc6OgorLS13aWR0aD06OgorICAgICAgICBTZWxlY3QgdGhlIHdpZHRoIG9mIHRoZSBTVkcgZmlsZSAoZGVmYXVsdDogMTAwMCkKKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlZDc1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dApAQCAtMCwwICsxLDI1IEBACitwZXJmLXRyYWNlKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLXRyYWNlIC0gUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IHRyYWNlIG91dHB1dAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIHRyYWNlJyBbLWkgPGZpbGU+IHwgLS1pbnB1dD1maWxlXSBzeW1ib2xfbmFtZQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCByZWFkcyB0aGUgaW5wdXQgZmlsZSBhbmQgZGlzcGxheXMgdGhlIHRyYWNlIHJlY29yZGVkLgorCitPUFRJT05TCistLS0tLS0tCistRDo6CistLWR1bXAtcmF3LXRyYWNlPTo6CisgICAgICAgIERpc3BsYXkgdmVyYm9zZSBkdW1wIG9mIHRoZSB0cmFjZSBkYXRhLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCA5ZjhkMjA3Li5iNWYxOTUzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTMxOCw3ICszMTgsNyBAQAogCiBMSUJfRklMRT1saWJwZXJmLmEKIAotTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAorTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvbGlzdC5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0zNzMsMTMgKzM3MywxNiBAQAogTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1wYXJzZS5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXJlYWQubwogTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1pbmZvLm8KK0xJQl9PQkpTICs9IHV0aWwvc3ZnaGVscGVyLm8KIAogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tYW5ub3RhdGUubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4taGVscC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1zY2hlZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1saXN0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlY29yZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1yZXBvcnQubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tc3RhdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi10aW1lY2hhcnQubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdG9wLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXRyYWNlLm8KIApAQCAtNzEwLDYgKzcxMywxMiBAQAogCQknLURQRVJGX01BTl9QQVRIPSIkKG1hbmRpcl9TUSkiJyBcCiAJCSctRFBFUkZfSU5GT19QQVRIPSIkKGluZm9kaXJfU1EpIicgJDwKIAorYnVpbHRpbi10aW1lY2hhcnQubzogYnVpbHRpbi10aW1lY2hhcnQuYyBjb21tb24tY21kcy5oIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgXAorCQknLURQRVJGX0hUTUxfUEFUSD0iJChodG1sZGlyX1NRKSInIFwKKwkJJy1EUEVSRl9NQU5fUEFUSD0iJChtYW5kaXJfU1EpIicgXAorCQknLURQRVJGX0lORk9fUEFUSD0iJChpbmZvZGlyX1NRKSInICQ8CisKICQoQlVJTFRfSU5TKTogcGVyZiRYCiAJJChRVUlFVF9CVUlMVF9JTikkKFJNKSAkQCAmJiBcCiAJbG4gcGVyZiRYICRAIDI+L2Rldi9udWxsIHx8IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKaW5kZXggMDQzZDg1Yi4uMWVjNzQxNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKQEAgLTUwNSw3ICs1MDUsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfRVZFTlRfTUlTQ19LRVJORUwpIHsKKwlpZiAoZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKIAkJc2hvdyA9IFNIT1dfS0VSTkVMOwogCQlsZXZlbCA9ICdrJzsKIApAQCAtNTEzLDcgKzUxMyw3IEBACiAKIAkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvLT5uYW1lKTsKIAotCX0gZWxzZSBpZiAoZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9FVkVOVF9NSVNDX1VTRVIpIHsKKwl9IGVsc2UgaWYgKGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfVVNFUikgewogCiAJCXNob3cgPSBTSE9XX1VTRVI7CiAJCWxldmVsID0gJy4nOwpAQCAtNTY1LDcgKzU2NSw3IEBACiAKIAl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5tbWFwLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UX01NQVAgJWQ6IFslcCglcCkgQCAlcF06ICVzXG4iLAorCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9NTUFQICVkOiBbJXAoJXApIEAgJXBdOiAlc1xuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5tbWFwLnBpZCwKQEAgLTU3NSw3ICs1NzUsNyBAQAogCQlldmVudC0+bW1hcC5maWxlbmFtZSk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwgbWFwID09IE5VTEwpIHsKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX01NQVAsIHNraXBwaW5nIGV2ZW50LlxuIik7CisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01OTEsMTQgKzU5MSwxNCBAQAogCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKIAogCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmNvbW0ucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UX0NPTU06ICVzOiVkXG4iLAorCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9DT01NOiAlczolZFxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwKIAkgICAgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsIGV2ZW50LT5jb21tLmNvbW0pKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9DT01NLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJdG90YWxfY29tbSsrOwpAQCAtNjE0LDcgKzYxNCw3IEBACiAKIAl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5mb3JrLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKIAlwYXJlbnQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5mb3JrLnBwaWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfRk9SSzogJWQ6JWRcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX0ZPUks6ICVkOiVkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmZvcmsucGlkLCBldmVudC0+Zm9yay5wcGlkKTsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghdGhyZWFkIHx8ICFwYXJlbnQgfHwgdGhyZWFkX19mb3JrKHRocmVhZCwgcGFyZW50KSkgewotCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfRk9SSywgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9GT1JLLCBza2lwcGluZyBldmVudC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXRvdGFsX2ZvcmsrKzsKQEAgLTYzOSwyMyArNjM5LDIzIEBACiBwcm9jZXNzX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewogCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7Ci0JY2FzZSBQRVJGX0VWRU5UX1NBTVBMRToKKwljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKIAkJcmV0dXJuIHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCi0JY2FzZSBQRVJGX0VWRU5UX01NQVA6CisJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgogCQlyZXR1cm4gcHJvY2Vzc19tbWFwX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCi0JY2FzZSBQRVJGX0VWRU5UX0NPTU06CisJY2FzZSBQRVJGX1JFQ09SRF9DT01NOgogCQlyZXR1cm4gcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCi0JY2FzZSBQRVJGX0VWRU5UX0ZPUks6CisJY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgogCQlyZXR1cm4gcHJvY2Vzc19mb3JrX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCS8qCiAJICogV2UgZG9udCBwcm9jZXNzIHRoZW0gcmlnaHQgbm93IGJ1dCB0aGV5IGFyZSBmaW5lOgogCSAqLwogCi0JY2FzZSBQRVJGX0VWRU5UX1RIUk9UVExFOgotCWNhc2UgUEVSRl9FVkVOVF9VTlRIUk9UVExFOgorCWNhc2UgUEVSRl9SRUNPUkRfVEhST1RUTEU6CisJY2FzZSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOgogCQlyZXR1cm4gMDsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggOTlhMTJmZS4uYTVhMDUwYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNDgsNiArNDgsOCBAQAogc3RhdGljIGludAkJCWluaGVyaXRfc3RhdAkJCT0gMDsKIHN0YXRpYyBpbnQJCQlub19zYW1wbGVzCQkJPSAwOwogc3RhdGljIGludAkJCXNhbXBsZV9hZGRyZXNzCQkJPSAwOworc3RhdGljIGludAkJCW11bHRpcGxleAkJCT0gMDsKK3N0YXRpYyBpbnQJCQltdWx0aXBsZXhfZmQJCQk9IC0xOwogCiBzdGF0aWMgbG9uZwkJCXNhbXBsZXM7CiBzdGF0aWMgc3RydWN0IHRpbWV2YWwJCWxhc3RfcmVhZDsKQEAgLTc1LDcgKzc3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9yZWFkX2hlYWQoc3RydWN0IG1tYXBfZGF0YSAqbWQpCiB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9tbWFwX3BhZ2UgKnBjID0gbWQtPmJhc2U7CisJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICpwYyA9IG1kLT5iYXNlOwogCWxvbmcgaGVhZDsKIAogCWhlYWQgPSBwYy0+ZGF0YV9oZWFkOwpAQCAtODYsNyArODgsNyBAQAogCiBzdGF0aWMgdm9pZCBtbWFwX3dyaXRlX3RhaWwoc3RydWN0IG1tYXBfZGF0YSAqbWQsIHVuc2lnbmVkIGxvbmcgdGFpbCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSAqcGMgPSBtZC0+YmFzZTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjID0gbWQtPmJhc2U7CiAKIAkvKgogCSAqIGVuc3VyZSBhbGwgcmVhZHMgYXJlIGRvbmUgYmVmb3JlIHdlIHdyaXRlIHRoZSB0YWlsIG91dC4KQEAgLTIzMSw3ICsyMzMsNyBAQAogCQl9CiAJfQogCi0JY29tbV9ldi5oZWFkZXIudHlwZSA9IFBFUkZfRVZFTlRfQ09NTTsKKwljb21tX2V2LmhlYWRlci50eXBlID0gUEVSRl9SRUNPUkRfQ09NTTsKIAlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOwogCWNvbW1fZXYuaGVhZGVyLnNpemUgPSBzaXplb2YoY29tbV9ldikgLSAoc2l6ZW9mKGNvbW1fZXYuY29tbSkgLSBzaXplKTsKIApAQCAtMjg2LDcgKzI4OCw3IEBACiAJd2hpbGUgKDEpIHsKIAkJY2hhciBiZltCVUZTSVpdLCAqcGJmID0gYmY7CiAJCXN0cnVjdCBtbWFwX2V2ZW50IG1tYXBfZXYgPSB7Ci0JCQkuaGVhZGVyID0geyAudHlwZSA9IFBFUkZfRVZFTlRfTU1BUCB9LAorCQkJLmhlYWRlciA9IHsgLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQIH0sCiAJCX07CiAJCWludCBuOwogCQlzaXplX3Qgc2l6ZTsKQEAgLTM1Myw3ICszNTUsNyBAQAogCiBzdGF0aWMgaW50IGdyb3VwX2ZkOwogCi1zdGF0aWMgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmdldF9oZWFkZXJfYXR0cihzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmEsIGludCBucikKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqZ2V0X2hlYWRlcl9hdHRyKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmEsIGludCBucikKIHsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqaF9hdHRyOwogCkBAIC0zNjksNyArMzcxLDcgQEAKIAogc3RhdGljIHZvaWQgY3JlYXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsIGludCBjcHUsIHBpZF90IHBpZCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIgPSBhdHRycyArIGNvdW50ZXI7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9IGF0dHJzICsgY291bnRlcjsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqaF9hdHRyOwogCWludCB0cmFjayA9ICFjb3VudGVyOyAvKiBvbmx5IHRoZSBmaXJzdCBjb3VudGVyIG5lZWRzIHRoZXNlICovCiAJc3RydWN0IHsKQEAgLTQxNSw3ICs0MTcsNyBAQAogCWF0dHItPmRpc2FibGVkCQk9IDE7CiAKIHRyeV9hZ2FpbjoKLQlmZFtucl9jcHVdW2NvdW50ZXJdID0gc3lzX3BlcmZfY291bnRlcl9vcGVuKGF0dHIsIHBpZCwgY3B1LCBncm91cF9mZCwgMCk7CisJZmRbbnJfY3B1XVtjb3VudGVyXSA9IHN5c19wZXJmX2V2ZW50X29wZW4oYXR0ciwgcGlkLCBjcHUsIGdyb3VwX2ZkLCAwKTsKIAogCWlmIChmZFtucl9jcHVdW2NvdW50ZXJdIDwgMCkgewogCQlpbnQgZXJyID0gZXJybm87CkBAIC00NDIsNyArNDQ0LDcgQEAKIAkJcHJpbnRmKCJcbiIpOwogCQllcnJvcigicGVyZmNvdW50ZXIgc3lzY2FsbCByZXR1cm5lZCB3aXRoICVkICglcylcbiIsCiAJCQlmZFtucl9jcHVdW2NvdW50ZXJdLCBzdHJlcnJvcihlcnIpKTsKLQkJZGllKCJObyBDT05GSUdfUEVSRl9DT1VOVEVSUz15IGtlcm5lbCBzdXBwb3J0IGNvbmZpZ3VyZWQ/XG4iKTsKKwkJZGllKCJObyBDT05GSUdfUEVSRl9FVkVOVFM9eSBrZXJuZWwgc3VwcG9ydCBjb25maWd1cmVkP1xuIik7CiAJCWV4aXQoLTEpOwogCX0KIApAQCAtNDcwLDIyICs0NzIsMzEgQEAKIAkgKi8KIAlpZiAoZ3JvdXAgJiYgZ3JvdXBfZmQgPT0gLTEpCiAJCWdyb3VwX2ZkID0gZmRbbnJfY3B1XVtjb3VudGVyXTsKKwlpZiAobXVsdGlwbGV4ICYmIG11bHRpcGxleF9mZCA9PSAtMSkKKwkJbXVsdGlwbGV4X2ZkID0gZmRbbnJfY3B1XVtjb3VudGVyXTsKIAotCWV2ZW50X2FycmF5W25yX3BvbGxdLmZkID0gZmRbbnJfY3B1XVtjb3VudGVyXTsKLQlldmVudF9hcnJheVtucl9wb2xsXS5ldmVudHMgPSBQT0xMSU47Ci0JbnJfcG9sbCsrOworCWlmIChtdWx0aXBsZXggJiYgZmRbbnJfY3B1XVtjb3VudGVyXSAhPSBtdWx0aXBsZXhfZmQpIHsKKwkJaW50IHJldDsKIAotCW1tYXBfYXJyYXlbbnJfY3B1XVtjb3VudGVyXS5jb3VudGVyID0gY291bnRlcjsKLQltbWFwX2FycmF5W25yX2NwdV1bY291bnRlcl0ucHJldiA9IDA7Ci0JbW1hcF9hcnJheVtucl9jcHVdW2NvdW50ZXJdLm1hc2sgPSBtbWFwX3BhZ2VzKnBhZ2Vfc2l6ZSAtIDE7Ci0JbW1hcF9hcnJheVtucl9jcHVdW2NvdW50ZXJdLmJhc2UgPSBtbWFwKE5VTEwsIChtbWFwX3BhZ2VzKzEpKnBhZ2Vfc2l6ZSwKLQkJCVBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZFtucl9jcHVdW2NvdW50ZXJdLCAwKTsKLQlpZiAobW1hcF9hcnJheVtucl9jcHVdW2NvdW50ZXJdLmJhc2UgPT0gTUFQX0ZBSUxFRCkgewotCQllcnJvcigiZmFpbGVkIHRvIG1tYXAgd2l0aCAlZCAoJXMpXG4iLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKLQkJZXhpdCgtMSk7CisJCXJldCA9IGlvY3RsKGZkW25yX2NwdV1bY291bnRlcl0sIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsIG11bHRpcGxleF9mZCk7CisJCWFzc2VydChyZXQgIT0gLTEpOworCX0gZWxzZSB7CisJCWV2ZW50X2FycmF5W25yX3BvbGxdLmZkID0gZmRbbnJfY3B1XVtjb3VudGVyXTsKKwkJZXZlbnRfYXJyYXlbbnJfcG9sbF0uZXZlbnRzID0gUE9MTElOOworCQlucl9wb2xsKys7CisKKwkJbW1hcF9hcnJheVtucl9jcHVdW2NvdW50ZXJdLmNvdW50ZXIgPSBjb3VudGVyOworCQltbWFwX2FycmF5W25yX2NwdV1bY291bnRlcl0ucHJldiA9IDA7CisJCW1tYXBfYXJyYXlbbnJfY3B1XVtjb3VudGVyXS5tYXNrID0gbW1hcF9wYWdlcypwYWdlX3NpemUgLSAxOworCQltbWFwX2FycmF5W25yX2NwdV1bY291bnRlcl0uYmFzZSA9IG1tYXAoTlVMTCwgKG1tYXBfcGFnZXMrMSkqcGFnZV9zaXplLAorCQkJCVBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZFtucl9jcHVdW2NvdW50ZXJdLCAwKTsKKwkJaWYgKG1tYXBfYXJyYXlbbnJfY3B1XVtjb3VudGVyXS5iYXNlID09IE1BUF9GQUlMRUQpIHsKKwkJCWVycm9yKCJmYWlsZWQgdG8gbW1hcCB3aXRoICVkICglcylcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCQkJZXhpdCgtMSk7CisJCX0KIAl9CiAKLQlpb2N0bChmZFtucl9jcHVdW2NvdW50ZXJdLCBQRVJGX0NPVU5URVJfSU9DX0VOQUJMRSk7CisJaW9jdGwoZmRbbnJfY3B1XVtjb3VudGVyXSwgUEVSRl9FVkVOVF9JT0NfRU5BQkxFKTsKIH0KIAogc3RhdGljIHZvaWQgb3Blbl9jb3VudGVycyhpbnQgY3B1LCBwaWRfdCBwaWQpCkBAIC01MTMsNiArNTI0LDcgQEAKIAlwaWRfdCBwaWQgPSAwOwogCWludCBmbGFnczsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgd2FraW5nID0gMDsKIAogCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7CiAJbnJfY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOwpAQCAtNjE0LDE3ICs2MjYsMjkgQEAKIAkJaW50IGhpdHMgPSBzYW1wbGVzOwogCiAJCWZvciAoaSA9IDA7IGkgPCBucl9jcHU7IGkrKykgewotCQkJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCi0JCQkJbW1hcF9yZWFkKCZtbWFwX2FycmF5W2ldW2NvdW50ZXJdKTsKKwkJCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBucl9jb3VudGVyczsgY291bnRlcisrKSB7CisJCQkJaWYgKG1tYXBfYXJyYXlbaV1bY291bnRlcl0uYmFzZSkKKwkJCQkJbW1hcF9yZWFkKCZtbWFwX2FycmF5W2ldW2NvdW50ZXJdKTsKKwkJCX0KIAkJfQogCiAJCWlmIChoaXRzID09IHNhbXBsZXMpIHsKIAkJCWlmIChkb25lKQogCQkJCWJyZWFrOwotCQkJcmV0ID0gcG9sbChldmVudF9hcnJheSwgbnJfcG9sbCwgMTAwKTsKKwkJCXJldCA9IHBvbGwoZXZlbnRfYXJyYXksIG5yX3BvbGwsIC0xKTsKKwkJCXdha2luZysrOworCQl9CisKKwkJaWYgKGRvbmUpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBucl9jcHU7IGkrKykgeworCQkJCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBucl9jb3VudGVyczsgY291bnRlcisrKQorCQkJCQlpb2N0bChmZFtpXVtjb3VudGVyXSwgUEVSRl9FVkVOVF9JT0NfRElTQUJMRSk7CisJCQl9CiAJCX0KIAl9CiAKKwlmcHJpbnRmKHN0ZGVyciwgIlsgcGVyZiByZWNvcmQ6IFdva2VuIHVwICVsZCB0aW1lcyB0byB3cml0ZSBkYXRhIF1cbiIsIHdha2luZyk7CisKIAkvKgogCSAqIEFwcHJveGltYXRlIFJJUCBldmVudCBzaXplOiAyNCBieXRlcy4KIAkgKi8KQEAgLTY4MSw2ICs3MDUsOCBAQAogCQkgICAgIlNhbXBsZSBhZGRyZXNzZXMiKSwKIAlPUFRfQk9PTEVBTignbicsICJuby1zYW1wbGVzIiwgJm5vX3NhbXBsZXMsCiAJCSAgICAiZG9uJ3Qgc2FtcGxlIiksCisJT1BUX0JPT0xFQU4oJ00nLCAibXVsdGlwbGV4IiwgJm11bHRpcGxleCwKKwkJICAgICJtdWx0aXBsZXggY291bnRlciBvdXRwdXQgaW4gYSBzaW5nbGUgY2hhbm5lbCIpLAogCU9QVF9FTkQoKQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IGNkZjlhOGQuLjE5NjY5YzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTExMjEsNyArMTEyMSw3IEBACiAJCW1vcmVfZGF0YSArPSBzaXplb2YodTY0KTsKIAl9CiAKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfU0FNUExFIChJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCiAJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAogCQlldmVudC0+aGVhZGVyLm1pc2MsCkBAIC0xMTU4LDkgKzExNTgsOSBAQAogCWlmIChjb21tX2xpc3QgJiYgIXN0cmxpc3RfX2hhc19lbnRyeShjb21tX2xpc3QsIHRocmVhZC0+Y29tbSkpCiAJCXJldHVybiAwOwogCi0JY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfRVZFTlRfTUlTQ19DUFVNT0RFX01BU0s7CisJY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwogCi0JaWYgKGNwdW1vZGUgPT0gUEVSRl9FVkVOVF9NSVNDX0tFUk5FTCkgeworCWlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKSB7CiAJCXNob3cgPSBTSE9XX0tFUk5FTDsKIAkJbGV2ZWwgPSAnayc7CiAKQEAgLTExNjgsNyArMTE2OCw3IEBACiAKIAkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvLT5uYW1lKTsKIAotCX0gZWxzZSBpZiAoY3B1bW9kZSA9PSBQRVJGX0VWRU5UX01JU0NfVVNFUikgeworCX0gZWxzZSBpZiAoY3B1bW9kZSA9PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpIHsKIAogCQlzaG93ID0gU0hPV19VU0VSOwogCQlsZXZlbCA9ICcuJzsKQEAgLTEyMTAsNyArMTIxMCw3IEBACiAKIAl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5tbWFwLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UX01NQVAgJWQvJWQ6IFslcCglcCkgQCAlcF06ICVzXG4iLAorCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9NTUFQICVkLyVkOiBbJXAoJXApIEAgJXBdOiAlc1xuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5tbWFwLnBpZCwKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAJCWV2ZW50LT5tbWFwLmZpbGVuYW1lKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fCBtYXAgPT0gTlVMTCkgewotCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEyMzgsMTQgKzEyMzgsMTQgQEAKIAogCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmNvbW0ucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfQ09NTTogJXM6JWRcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX0NPTU06ICVzOiVkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmNvbW0uY29tbSwgZXZlbnQtPmNvbW0ucGlkKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fAogCSAgICB0aHJlYWRfX3NldF9jb21tX2FkanVzdCh0aHJlYWQsIGV2ZW50LT5jb21tLmNvbW0pKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9DT01NLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJdG90YWxfY29tbSsrOwpAQCAtMTI2MiwxMCArMTI2MiwxMCBAQAogCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCXBhcmVudCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucHBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UXyVzOiAoJWQ6JWQpOiglZDolZClcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEXyVzOiAoJWQ6JWQpOiglZDolZClcbiIsCiAJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQlldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9FVkVOVF9GT1JLID8gIkZPUksiIDogIkVYSVQiLAorCQlldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfRk9SSyA/ICJGT1JLIiA6ICJFWElUIiwKIAkJZXZlbnQtPmZvcmsucGlkLCBldmVudC0+Zm9yay50aWQsCiAJCWV2ZW50LT5mb3JrLnBwaWQsIGV2ZW50LT5mb3JrLnB0aWQpOwogCkBAIC0xMjc2LDExICsxMjc2LDExIEBACiAJaWYgKHRocmVhZCA9PSBwYXJlbnQpCiAJCXJldHVybiAwOwogCi0JaWYgKGV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX0VWRU5UX0VYSVQpCisJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9FWElUKQogCQlyZXR1cm4gMDsKIAogCWlmICghdGhyZWFkIHx8ICFwYXJlbnQgfHwgdGhyZWFkX19mb3JrKHRocmVhZCwgcGFyZW50KSkgewotCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfRk9SSywgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9GT1JLLCBza2lwcGluZyBldmVudC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXRvdGFsX2ZvcmsrKzsKQEAgLTEyOTEsNyArMTI5MSw3IEBACiBzdGF0aWMgaW50CiBwcm9jZXNzX2xvc3RfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCiB7Ci0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfTE9TVDogaWQ6JUxkOiBsb3N0OiVMZFxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfTE9TVDogaWQ6JUxkOiBsb3N0OiVMZFxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5sb3N0LmlkLApAQCAtMTMwNSw3ICsxMzA1LDcgQEAKIHN0YXRpYyBpbnQKIHByb2Nlc3NfcmVhZF9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHI7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cjsKIAogCWF0dHIgPSBwZXJmX2hlYWRlcl9fZmluZF9hdHRyKGV2ZW50LT5yZWFkLmlkLCBoZWFkZXIpOwogCkBAIC0xMzE5LDcgKzEzMTksNyBAQAogCQkJCQkgICBldmVudC0+cmVhZC52YWx1ZSk7CiAJfQogCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfUkVBRDogJWQgJWQgJXMgJUx1XG4iLAorCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9SRUFEOiAlZCAlZCAlcyAlTHVcbiIsCiAJCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCQlldmVudC0+cmVhZC5waWQsCkBAIC0xMzM3LDMxICsxMzM3LDMxIEBACiAJdHJhY2VfZXZlbnQoZXZlbnQpOwogCiAJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKLQljYXNlIFBFUkZfRVZFTlRfU0FNUExFOgorCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgogCQlyZXR1cm4gcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfTU1BUDoKKwljYXNlIFBFUkZfUkVDT1JEX01NQVA6CiAJCXJldHVybiBwcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfQ09NTToKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CiAJCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfRk9SSzoKLQljYXNlIFBFUkZfRVZFTlRfRVhJVDoKKwljYXNlIFBFUkZfUkVDT1JEX0ZPUks6CisJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgogCQlyZXR1cm4gcHJvY2Vzc190YXNrX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCi0JY2FzZSBQRVJGX0VWRU5UX0xPU1Q6CisJY2FzZSBQRVJGX1JFQ09SRF9MT1NUOgogCQlyZXR1cm4gcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCi0JY2FzZSBQRVJGX0VWRU5UX1JFQUQ6CisJY2FzZSBQRVJGX1JFQ09SRF9SRUFEOgogCQlyZXR1cm4gcHJvY2Vzc19yZWFkX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCiAJLyoKIAkgKiBXZSBkb250IHByb2Nlc3MgdGhlbSByaWdodCBub3cgYnV0IHRoZXkgYXJlIGZpbmU6CiAJICovCiAKLQljYXNlIFBFUkZfRVZFTlRfVEhST1RUTEU6Ci0JY2FzZSBQRVJGX0VWRU5UX1VOVEhST1RUTEU6CisJY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKKwljYXNlIFBFUkZfUkVDT1JEX1VOVEhST1RUTEU6CiAJCXJldHVybiAwOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5YzE1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0wLDAgKzEsMjAwNCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwZXJmLmgiCisKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKyNpbmNsdWRlICJ1dGlsL2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKyNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgorI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3RyYWNlLWV2ZW50LmgiCisKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKworI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK3N0YXRpYyBjaGFyCQkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKK3N0YXRpYyBpbnQJCQlpbnB1dDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlwYWdlX3NpemU7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbW1hcF93aW5kb3cgPSAzMjsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCXRvdGFsX2NvbW0gPSAwOworCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QJCXRocmVhZHM7CitzdGF0aWMgc3RydWN0IHRocmVhZAkJKmxhc3RfbWF0Y2g7CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIJKmhlYWRlcjsKK3N0YXRpYyB1NjQJCQlzYW1wbGVfdHlwZTsKKworc3RhdGljIGNoYXIJCQlkZWZhdWx0X3NvcnRfb3JkZXJbXSA9ICJhdmcsIG1heCwgc3dpdGNoLCBydW50aW1lIjsKK3N0YXRpYyBjaGFyCQkJKnNvcnRfb3JkZXIgPSBkZWZhdWx0X3NvcnRfb3JkZXI7CisKKyNkZWZpbmUgUFJfU0VUX05BTUUJCTE1ICAgICAgICAgICAgICAgLyogU2V0IHByb2Nlc3MgbmFtZSAqLworI2RlZmluZSBNQVhfQ1BVUwkJNDA5NgorCisjZGVmaW5lIEJVR19PTih4KQkJYXNzZXJ0KCEoeCkpCisKK3N0YXRpYyB1NjQJCQlydW5fbWVhc3VyZW1lbnRfb3ZlcmhlYWQ7CitzdGF0aWMgdTY0CQkJc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQ7CisKKyNkZWZpbmUgQ09NTV9MRU4JCTIwCisjZGVmaW5lIFNZTV9MRU4JCQkxMjkKKworI2RlZmluZSBNQVhfUElECQkJNjU1MzYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3Rhc2tzOworCitzdHJ1Y3Qgc2NoZWRfYXRvbTsKKworc3RydWN0IHRhc2tfZGVzYyB7CisJdW5zaWduZWQgbG9uZwkJbnI7CisJdW5zaWduZWQgbG9uZwkJcGlkOworCWNoYXIJCQljb21tW0NPTU1fTEVOXTsKKworCXVuc2lnbmVkIGxvbmcJCW5yX2V2ZW50czsKKwl1bnNpZ25lZCBsb25nCQljdXJyX2V2ZW50OworCXN0cnVjdCBzY2hlZF9hdG9tCSoqYXRvbXM7CisKKwlwdGhyZWFkX3QJCXRocmVhZDsKKwlzZW1fdAkJCXNsZWVwX3NlbTsKKworCXNlbV90CQkJcmVhZHlfZm9yX3dvcms7CisJc2VtX3QJCQl3b3JrX2RvbmVfc2VtOworCisJdTY0CQkJY3B1X3VzYWdlOworfTsKKworZW51bSBzY2hlZF9ldmVudF90eXBlIHsKKwlTQ0hFRF9FVkVOVF9SVU4sCisJU0NIRURfRVZFTlRfU0xFRVAsCisJU0NIRURfRVZFTlRfV0FLRVVQLAorfTsKKworc3RydWN0IHNjaGVkX2F0b20geworCWVudW0gc2NoZWRfZXZlbnRfdHlwZQl0eXBlOworCXU2NAkJCXRpbWVzdGFtcDsKKwl1NjQJCQlkdXJhdGlvbjsKKwl1bnNpZ25lZCBsb25nCQlucjsKKwlpbnQJCQlzcGVjaWZpY193YWl0OworCXNlbV90CQkJKndhaXRfc2VtOworCXN0cnVjdCB0YXNrX2Rlc2MJKndha2VlOworfTsKKworc3RhdGljIHN0cnVjdCB0YXNrX2Rlc2MJCSpwaWRfdG9fdGFza1tNQVhfUElEXTsKKworc3RhdGljIHN0cnVjdCB0YXNrX2Rlc2MJCSoqdGFza3M7CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QJCXN0YXJ0X3dvcmtfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHU2NAkJCXN0YXJ0X3RpbWU7CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QJCXdvcmtfZG9uZV93YWl0X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3J1bl9ldmVudHM7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfc2xlZXBfZXZlbnRzOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3dha2V1cF9ldmVudHM7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9zbGVlcF9jb3JyZWN0aW9uczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9ydW5fZXZlbnRzX29wdGltaXplZDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCXRhcmdldGxlc3Nfd2FrZXVwczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQltdWx0aXRhcmdldF93YWtldXBzOworCitzdGF0aWMgdTY0CQkJY3B1X3VzYWdlOworc3RhdGljIHU2NAkJCXJ1bmF2Z19jcHVfdXNhZ2U7CitzdGF0aWMgdTY0CQkJcGFyZW50X2NwdV91c2FnZTsKK3N0YXRpYyB1NjQJCQlydW5hdmdfcGFyZW50X2NwdV91c2FnZTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3J1bnM7CitzdGF0aWMgdTY0CQkJc3VtX3J1bnRpbWU7CitzdGF0aWMgdTY0CQkJc3VtX2ZsdWN0Oworc3RhdGljIHU2NAkJCXJ1bl9hdmc7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlyZXBsYXlfcmVwZWF0ID0gMTA7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfdGltZXN0YW1wczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl91bm9yZGVyZWRfdGltZXN0YW1wczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9zdGF0ZV9tYWNoaW5lX2J1Z3M7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfY29udGV4dF9zd2l0Y2hfYnVnczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9ldmVudHM7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfbG9zdF9jaHVua3M7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfbG9zdF9ldmVudHM7CisKKyNkZWZpbmUgVEFTS19TVEFURV9UT19DSEFSX1NUUiAiUlNEVHRaWCIKKworZW51bSB0aHJlYWRfc3RhdGUgeworCVRIUkVBRF9TTEVFUElORyA9IDAsCisJVEhSRUFEX1dBSVRfQ1BVLAorCVRIUkVBRF9TQ0hFRF9JTiwKKwlUSFJFQURfSUdOT1JFCit9OworCitzdHJ1Y3Qgd29ya19hdG9tIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJZW51bSB0aHJlYWRfc3RhdGUJc3RhdGU7CisJdTY0CQkJc2NoZWRfb3V0X3RpbWU7CisJdTY0CQkJd2FrZV91cF90aW1lOworCXU2NAkJCXNjaGVkX2luX3RpbWU7CisJdTY0CQkJcnVudGltZTsKK307CisKK3N0cnVjdCB3b3JrX2F0b21zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtfbGlzdDsKKwlzdHJ1Y3QgdGhyZWFkCQkqdGhyZWFkOworCXN0cnVjdCByYl9ub2RlCQlub2RlOworCXU2NAkJCW1heF9sYXQ7CisJdTY0CQkJdG90YWxfbGF0OworCXU2NAkJCW5iX2F0b21zOworCXU2NAkJCXRvdGFsX3J1bnRpbWU7Cit9OworCit0eXBlZGVmIGludCAoKnNvcnRfZm5fdCkoc3RydWN0IHdvcmtfYXRvbXMgKiwgc3RydWN0IHdvcmtfYXRvbXMgKik7CisKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdAkJYXRvbV9yb290LCBzb3J0ZWRfYXRvbV9yb290OworCitzdGF0aWMgdTY0CQkJYWxsX3J1bnRpbWU7CitzdGF0aWMgdTY0CQkJYWxsX2NvdW50OworCisKK3N0YXRpYyB1NjQgZ2V0X25zZWNzKHZvaWQpCit7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCisJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cyk7CisKKwlyZXR1cm4gdHMudHZfc2VjICogMTAwMDAwMDAwMFVMTCArIHRzLnR2X25zZWM7Cit9CisKK3N0YXRpYyB2b2lkIGJ1cm5fbnNlY3ModTY0IG5zZWNzKQoreworCXU2NCBUMCA9IGdldF9uc2VjcygpLCBUMTsKKworCWRvIHsKKwkJVDEgPSBnZXRfbnNlY3MoKTsKKwl9IHdoaWxlIChUMSArIHJ1bl9tZWFzdXJlbWVudF9vdmVyaGVhZCA8IFQwICsgbnNlY3MpOworfQorCitzdGF0aWMgdm9pZCBzbGVlcF9uc2Vjcyh1NjQgbnNlY3MpCit7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCisJdHMudHZfbnNlYyA9IG5zZWNzICUgOTk5OTk5OTk5OworCXRzLnR2X3NlYyA9IG5zZWNzIC8gOTk5OTk5OTk5OworCisJbmFub3NsZWVwKCZ0cywgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGlicmF0ZV9ydW5fbWVhc3VyZW1lbnRfb3ZlcmhlYWQodm9pZCkKK3sKKwl1NjQgVDAsIFQxLCBkZWx0YSwgbWluX2RlbHRhID0gMTAwMDAwMDAwMFVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCVQwID0gZ2V0X25zZWNzKCk7CisJCWJ1cm5fbnNlY3MoMCk7CisJCVQxID0gZ2V0X25zZWNzKCk7CisJCWRlbHRhID0gVDEtVDA7CisJCW1pbl9kZWx0YSA9IG1pbihtaW5fZGVsdGEsIGRlbHRhKTsKKwl9CisJcnVuX21lYXN1cmVtZW50X292ZXJoZWFkID0gbWluX2RlbHRhOworCisJcHJpbnRmKCJydW4gbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICVMZCBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKK30KKworc3RhdGljIHZvaWQgY2FsaWJyYXRlX3NsZWVwX21lYXN1cmVtZW50X292ZXJoZWFkKHZvaWQpCit7CisJdTY0IFQwLCBUMSwgZGVsdGEsIG1pbl9kZWx0YSA9IDEwMDAwMDAwMDBVTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlUMCA9IGdldF9uc2VjcygpOworCQlzbGVlcF9uc2VjcygxMDAwMCk7CisJCVQxID0gZ2V0X25zZWNzKCk7CisJCWRlbHRhID0gVDEtVDA7CisJCW1pbl9kZWx0YSA9IG1pbihtaW5fZGVsdGEsIGRlbHRhKTsKKwl9CisJbWluX2RlbHRhIC09IDEwMDAwOworCXNsZWVwX21lYXN1cmVtZW50X292ZXJoZWFkID0gbWluX2RlbHRhOworCisJcHJpbnRmKCJzbGVlcCBtZWFzdXJlbWVudCBvdmVyaGVhZDogJUxkIG5zZWNzXG4iLCBtaW5fZGVsdGEpOworfQorCitzdGF0aWMgc3RydWN0IHNjaGVkX2F0b20gKgorZ2V0X25ld19ldmVudChzdHJ1Y3QgdGFza19kZXNjICp0YXNrLCB1NjQgdGltZXN0YW1wKQoreworCXN0cnVjdCBzY2hlZF9hdG9tICpldmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmV2ZW50KSk7CisJdW5zaWduZWQgbG9uZyBpZHggPSB0YXNrLT5ucl9ldmVudHM7CisJc2l6ZV90IHNpemU7CisKKwlldmVudC0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCWV2ZW50LT5uciA9IGlkeDsKKworCXRhc2stPm5yX2V2ZW50cysrOworCXNpemUgPSBzaXplb2Yoc3RydWN0IHNjaGVkX2F0b20gKikgKiB0YXNrLT5ucl9ldmVudHM7CisJdGFzay0+YXRvbXMgPSByZWFsbG9jKHRhc2stPmF0b21zLCBzaXplKTsKKwlCVUdfT04oIXRhc2stPmF0b21zKTsKKworCXRhc2stPmF0b21zW2lkeF0gPSBldmVudDsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHN0cnVjdCBzY2hlZF9hdG9tICpsYXN0X2V2ZW50KHN0cnVjdCB0YXNrX2Rlc2MgKnRhc2spCit7CisJaWYgKCF0YXNrLT5ucl9ldmVudHMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHRhc2stPmF0b21zW3Rhc2stPm5yX2V2ZW50cyAtIDFdOworfQorCitzdGF0aWMgdm9pZAorYWRkX3NjaGVkX2V2ZW50X3J1bihzdHJ1Y3QgdGFza19kZXNjICp0YXNrLCB1NjQgdGltZXN0YW1wLCB1NjQgZHVyYXRpb24pCit7CisJc3RydWN0IHNjaGVkX2F0b20gKmV2ZW50LCAqY3Vycl9ldmVudCA9IGxhc3RfZXZlbnQodGFzayk7CisKKwkvKgorCSAqIG9wdGltaXplIGFuIGV4aXN0aW5nIFJVTiBldmVudCBieSBtZXJnaW5nIHRoaXMgb25lCisJICogdG8gaXQ6CisJICovCisJaWYgKGN1cnJfZXZlbnQgJiYgY3Vycl9ldmVudC0+dHlwZSA9PSBTQ0hFRF9FVkVOVF9SVU4pIHsKKwkJbnJfcnVuX2V2ZW50c19vcHRpbWl6ZWQrKzsKKwkJY3Vycl9ldmVudC0+ZHVyYXRpb24gKz0gZHVyYXRpb247CisJCXJldHVybjsKKwl9CisKKwlldmVudCA9IGdldF9uZXdfZXZlbnQodGFzaywgdGltZXN0YW1wKTsKKworCWV2ZW50LT50eXBlID0gU0NIRURfRVZFTlRfUlVOOworCWV2ZW50LT5kdXJhdGlvbiA9IGR1cmF0aW9uOworCisJbnJfcnVuX2V2ZW50cysrOworfQorCitzdGF0aWMgdm9pZAorYWRkX3NjaGVkX2V2ZW50X3dha2V1cChzdHJ1Y3QgdGFza19kZXNjICp0YXNrLCB1NjQgdGltZXN0YW1wLAorCQkgICAgICAgc3RydWN0IHRhc2tfZGVzYyAqd2FrZWUpCit7CisJc3RydWN0IHNjaGVkX2F0b20gKmV2ZW50LCAqd2FrZWVfZXZlbnQ7CisKKwlldmVudCA9IGdldF9uZXdfZXZlbnQodGFzaywgdGltZXN0YW1wKTsKKwlldmVudC0+dHlwZSA9IFNDSEVEX0VWRU5UX1dBS0VVUDsKKwlldmVudC0+d2FrZWUgPSB3YWtlZTsKKworCXdha2VlX2V2ZW50ID0gbGFzdF9ldmVudCh3YWtlZSk7CisJaWYgKCF3YWtlZV9ldmVudCB8fCB3YWtlZV9ldmVudC0+dHlwZSAhPSBTQ0hFRF9FVkVOVF9TTEVFUCkgeworCQl0YXJnZXRsZXNzX3dha2V1cHMrKzsKKwkJcmV0dXJuOworCX0KKwlpZiAod2FrZWVfZXZlbnQtPndhaXRfc2VtKSB7CisJCW11bHRpdGFyZ2V0X3dha2V1cHMrKzsKKwkJcmV0dXJuOworCX0KKworCXdha2VlX2V2ZW50LT53YWl0X3NlbSA9IGNhbGxvYygxLCBzaXplb2YoKndha2VlX2V2ZW50LT53YWl0X3NlbSkpOworCXNlbV9pbml0KHdha2VlX2V2ZW50LT53YWl0X3NlbSwgMCwgMCk7CisJd2FrZWVfZXZlbnQtPnNwZWNpZmljX3dhaXQgPSAxOworCWV2ZW50LT53YWl0X3NlbSA9IHdha2VlX2V2ZW50LT53YWl0X3NlbTsKKworCW5yX3dha2V1cF9ldmVudHMrKzsKK30KKworc3RhdGljIHZvaWQKK2FkZF9zY2hlZF9ldmVudF9zbGVlcChzdHJ1Y3QgdGFza19kZXNjICp0YXNrLCB1NjQgdGltZXN0YW1wLAorCQkgICAgICB1NjQgdGFza19zdGF0ZSBfX3VzZWQpCit7CisJc3RydWN0IHNjaGVkX2F0b20gKmV2ZW50ID0gZ2V0X25ld19ldmVudCh0YXNrLCB0aW1lc3RhbXApOworCisJZXZlbnQtPnR5cGUgPSBTQ0hFRF9FVkVOVF9TTEVFUDsKKworCW5yX3NsZWVwX2V2ZW50cysrOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfZGVzYyAqcmVnaXN0ZXJfcGlkKHVuc2lnbmVkIGxvbmcgcGlkLCBjb25zdCBjaGFyICpjb21tKQoreworCXN0cnVjdCB0YXNrX2Rlc2MgKnRhc2s7CisKKwlCVUdfT04ocGlkID49IE1BWF9QSUQpOworCisJdGFzayA9IHBpZF90b190YXNrW3BpZF07CisKKwlpZiAodGFzaykKKwkJcmV0dXJuIHRhc2s7CisKKwl0YXNrID0gY2FsbG9jKDEsIHNpemVvZigqdGFzaykpOworCXRhc2stPnBpZCA9IHBpZDsKKwl0YXNrLT5uciA9IG5yX3Rhc2tzOworCXN0cmNweSh0YXNrLT5jb21tLCBjb21tKTsKKwkvKgorCSAqIGV2ZXJ5IHRhc2sgc3RhcnRzIGluIHNsZWVwaW5nIHN0YXRlIC0gdGhpcyBnZXRzIGlnbm9yZWQKKwkgKiBpZiB0aGVyZSdzIG5vIHdha2V1cCBwb2ludGluZyB0byB0aGlzIHNsZWVwIHN0YXRlOgorCSAqLworCWFkZF9zY2hlZF9ldmVudF9zbGVlcCh0YXNrLCAwLCAwKTsKKworCXBpZF90b190YXNrW3BpZF0gPSB0YXNrOworCW5yX3Rhc2tzKys7CisJdGFza3MgPSByZWFsbG9jKHRhc2tzLCBucl90YXNrcypzaXplb2Yoc3RydWN0IHRhc2tfdGFzayAqKSk7CisJQlVHX09OKCF0YXNrcyk7CisJdGFza3NbdGFzay0+bnJdID0gdGFzazsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGYoInJlZ2lzdGVyZWQgdGFzayAjJWxkLCBQSUQgJWxkICglcylcbiIsIG5yX3Rhc2tzLCBwaWQsIGNvbW0pOworCisJcmV0dXJuIHRhc2s7Cit9CisKKworc3RhdGljIHZvaWQgcHJpbnRfdGFza190cmFjZXModm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19kZXNjICp0YXNrOworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl90YXNrczsgaSsrKSB7CisJCXRhc2sgPSB0YXNrc1tpXTsKKwkJcHJpbnRmKCJ0YXNrICU2bGQgKCUyMHM6JTEwbGQpLCBucl9ldmVudHM6ICVsZFxuIiwKKwkJCXRhc2stPm5yLCB0YXNrLT5jb21tLCB0YXNrLT5waWQsIHRhc2stPm5yX2V2ZW50cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfY3Jvc3NfdGFza193YWtldXBzKHZvaWQpCit7CisJc3RydWN0IHRhc2tfZGVzYyAqdGFzazEsICp0YXNrMjsKKwl1bnNpZ25lZCBsb25nIGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGFza3M7IGkrKykgeworCQl0YXNrMSA9IHRhc2tzW2ldOworCQlqID0gaSArIDE7CisJCWlmIChqID09IG5yX3Rhc2tzKQorCQkJaiA9IDA7CisJCXRhc2syID0gdGFza3Nbal07CisJCWFkZF9zY2hlZF9ldmVudF93YWtldXAodGFzazEsIDAsIHRhc2syKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX3NjaGVkX2V2ZW50KHN0cnVjdCB0YXNrX2Rlc2MgKnRoaXNfdGFzayBfX3VzZWQsIHN0cnVjdCBzY2hlZF9hdG9tICphdG9tKQoreworCWludCByZXQgPSAwOworCXU2NCBub3c7CisJbG9uZyBsb25nIGRlbHRhOworCisJbm93ID0gZ2V0X25zZWNzKCk7CisJZGVsdGEgPSBzdGFydF90aW1lICsgYXRvbS0+dGltZXN0YW1wIC0gbm93OworCisJc3dpdGNoIChhdG9tLT50eXBlKSB7CisJCWNhc2UgU0NIRURfRVZFTlRfUlVOOgorCQkJYnVybl9uc2VjcyhhdG9tLT5kdXJhdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSBTQ0hFRF9FVkVOVF9TTEVFUDoKKwkJCWlmIChhdG9tLT53YWl0X3NlbSkKKwkJCQlyZXQgPSBzZW1fd2FpdChhdG9tLT53YWl0X3NlbSk7CisJCQlCVUdfT04ocmV0KTsKKwkJCWJyZWFrOworCQljYXNlIFNDSEVEX0VWRU5UX1dBS0VVUDoKKwkJCWlmIChhdG9tLT53YWl0X3NlbSkKKwkJCQlyZXQgPSBzZW1fcG9zdChhdG9tLT53YWl0X3NlbSk7CisJCQlCVUdfT04ocmV0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHX09OKDEpOworCX0KK30KKworc3RhdGljIHU2NCBnZXRfY3B1X3VzYWdlX25zZWNfcGFyZW50KHZvaWQpCit7CisJc3RydWN0IHJ1c2FnZSBydTsKKwl1NjQgc3VtOworCWludCBlcnI7CisKKwllcnIgPSBnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZydSk7CisJQlVHX09OKGVycik7CisKKwlzdW0gPSAgcnUucnVfdXRpbWUudHZfc2VjKjFlOSArIHJ1LnJ1X3V0aW1lLnR2X3VzZWMqMWUzOworCXN1bSArPSBydS5ydV9zdGltZS50dl9zZWMqMWU5ICsgcnUucnVfc3RpbWUudHZfdXNlYyoxZTM7CisKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgdTY0IGdldF9jcHVfdXNhZ2VfbnNlY19zZWxmKHZvaWQpCit7CisJY2hhciBmaWxlbmFtZSBbXSA9ICIvcHJvYy8xMjM0NTY3ODkwL3NjaGVkIjsKKwl1bnNpZ25lZCBsb25nIG1zZWNzLCBuc2VjczsKKwljaGFyICpsaW5lID0gTlVMTDsKKwl1NjQgdG90YWwgPSAwOworCXNpemVfdCBsZW4gPSAwOworCXNzaXplX3QgY2hhcnM7CisJRklMRSAqZmlsZTsKKwlpbnQgcmV0OworCisJc3ByaW50ZihmaWxlbmFtZSwgIi9wcm9jLyVkL3NjaGVkIiwgZ2V0cGlkKCkpOworCWZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlCVUdfT04oIWZpbGUpOworCisJd2hpbGUgKChjaGFycyA9IGdldGxpbmUoJmxpbmUsICZsZW4sIGZpbGUpKSAhPSAtMSkgeworCQlyZXQgPSBzc2NhbmYobGluZSwgInNlLnN1bV9leGVjX3J1bnRpbWUgOiAlbGQuJTA2bGRcbiIsCisJCQkmbXNlY3MsICZuc2Vjcyk7CisJCWlmIChyZXQgPT0gMikgeworCQkJdG90YWwgPSBtc2VjcyoxZTYgKyBuc2VjczsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworCWZjbG9zZShmaWxlKTsKKworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIHZvaWQgKnRocmVhZF9mdW5jKHZvaWQgKmN0eCkKK3sKKwlzdHJ1Y3QgdGFza19kZXNjICp0aGlzX3Rhc2sgPSBjdHg7CisJdTY0IGNwdV91c2FnZV8wLCBjcHVfdXNhZ2VfMTsKKwl1bnNpZ25lZCBsb25nIGksIHJldDsKKwljaGFyIGNvbW0yWzIyXTsKKworCXNwcmludGYoY29tbTIsICI6JXMiLCB0aGlzX3Rhc2stPmNvbW0pOworCXByY3RsKFBSX1NFVF9OQU1FLCBjb21tMik7CisKK2FnYWluOgorCXJldCA9IHNlbV9wb3N0KCZ0aGlzX3Rhc2stPnJlYWR5X2Zvcl93b3JrKTsKKwlCVUdfT04ocmV0KTsKKwlyZXQgPSBwdGhyZWFkX211dGV4X2xvY2soJnN0YXJ0X3dvcmtfbXV0ZXgpOworCUJVR19PTihyZXQpOworCXJldCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzdGFydF93b3JrX211dGV4KTsKKwlCVUdfT04ocmV0KTsKKworCWNwdV91c2FnZV8wID0gZ2V0X2NwdV91c2FnZV9uc2VjX3NlbGYoKTsKKworCWZvciAoaSA9IDA7IGkgPCB0aGlzX3Rhc2stPm5yX2V2ZW50czsgaSsrKSB7CisJCXRoaXNfdGFzay0+Y3Vycl9ldmVudCA9IGk7CisJCXByb2Nlc3Nfc2NoZWRfZXZlbnQodGhpc190YXNrLCB0aGlzX3Rhc2stPmF0b21zW2ldKTsKKwl9CisKKwljcHVfdXNhZ2VfMSA9IGdldF9jcHVfdXNhZ2VfbnNlY19zZWxmKCk7CisJdGhpc190YXNrLT5jcHVfdXNhZ2UgPSBjcHVfdXNhZ2VfMSAtIGNwdV91c2FnZV8wOworCisJcmV0ID0gc2VtX3Bvc3QoJnRoaXNfdGFzay0+d29ya19kb25lX3NlbSk7CisJQlVHX09OKHJldCk7CisKKwlyZXQgPSBwdGhyZWFkX211dGV4X2xvY2soJndvcmtfZG9uZV93YWl0X211dGV4KTsKKwlCVUdfT04ocmV0KTsKKwlyZXQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmd29ya19kb25lX3dhaXRfbXV0ZXgpOworCUJVR19PTihyZXQpOworCisJZ290byBhZ2FpbjsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX3Rhc2tzKHZvaWQpCit7CisJc3RydWN0IHRhc2tfZGVzYyAqdGFzazsKKwlwdGhyZWFkX2F0dHJfdCBhdHRyOworCXVuc2lnbmVkIGxvbmcgaTsKKwlpbnQgZXJyOworCisJZXJyID0gcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOworCUJVR19PTihlcnIpOworCWVyciA9IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHIsIChzaXplX3QpKDE2KjEwMjQpKTsKKwlCVUdfT04oZXJyKTsKKwllcnIgPSBwdGhyZWFkX211dGV4X2xvY2soJnN0YXJ0X3dvcmtfbXV0ZXgpOworCUJVR19PTihlcnIpOworCWVyciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmd29ya19kb25lX3dhaXRfbXV0ZXgpOworCUJVR19PTihlcnIpOworCWZvciAoaSA9IDA7IGkgPCBucl90YXNrczsgaSsrKSB7CisJCXRhc2sgPSB0YXNrc1tpXTsKKwkJc2VtX2luaXQoJnRhc2stPnNsZWVwX3NlbSwgMCwgMCk7CisJCXNlbV9pbml0KCZ0YXNrLT5yZWFkeV9mb3Jfd29yaywgMCwgMCk7CisJCXNlbV9pbml0KCZ0YXNrLT53b3JrX2RvbmVfc2VtLCAwLCAwKTsKKwkJdGFzay0+Y3Vycl9ldmVudCA9IDA7CisJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZ0YXNrLT50aHJlYWQsICZhdHRyLCB0aHJlYWRfZnVuYywgdGFzayk7CisJCUJVR19PTihlcnIpOworCX0KK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3JfdGFza3Modm9pZCkKK3sKKwl1NjQgY3B1X3VzYWdlXzAsIGNwdV91c2FnZV8xOworCXN0cnVjdCB0YXNrX2Rlc2MgKnRhc2s7CisJdW5zaWduZWQgbG9uZyBpLCByZXQ7CisKKwlzdGFydF90aW1lID0gZ2V0X25zZWNzKCk7CisJY3B1X3VzYWdlID0gMDsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmd29ya19kb25lX3dhaXRfbXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3Rhc2tzOyBpKyspIHsKKwkJdGFzayA9IHRhc2tzW2ldOworCQlyZXQgPSBzZW1fd2FpdCgmdGFzay0+cmVhZHlfZm9yX3dvcmspOworCQlCVUdfT04ocmV0KTsKKwkJc2VtX2luaXQoJnRhc2stPnJlYWR5X2Zvcl93b3JrLCAwLCAwKTsKKwl9CisJcmV0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZ3b3JrX2RvbmVfd2FpdF9tdXRleCk7CisJQlVHX09OKHJldCk7CisKKwljcHVfdXNhZ2VfMCA9IGdldF9jcHVfdXNhZ2VfbnNlY19wYXJlbnQoKTsKKworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzdGFydF93b3JrX211dGV4KTsKKworCWZvciAoaSA9IDA7IGkgPCBucl90YXNrczsgaSsrKSB7CisJCXRhc2sgPSB0YXNrc1tpXTsKKwkJcmV0ID0gc2VtX3dhaXQoJnRhc2stPndvcmtfZG9uZV9zZW0pOworCQlCVUdfT04ocmV0KTsKKwkJc2VtX2luaXQoJnRhc2stPndvcmtfZG9uZV9zZW0sIDAsIDApOworCQljcHVfdXNhZ2UgKz0gdGFzay0+Y3B1X3VzYWdlOworCQl0YXNrLT5jcHVfdXNhZ2UgPSAwOworCX0KKworCWNwdV91c2FnZV8xID0gZ2V0X2NwdV91c2FnZV9uc2VjX3BhcmVudCgpOworCWlmICghcnVuYXZnX2NwdV91c2FnZSkKKwkJcnVuYXZnX2NwdV91c2FnZSA9IGNwdV91c2FnZTsKKwlydW5hdmdfY3B1X3VzYWdlID0gKHJ1bmF2Z19jcHVfdXNhZ2UqOSArIGNwdV91c2FnZSkvMTA7CisKKwlwYXJlbnRfY3B1X3VzYWdlID0gY3B1X3VzYWdlXzEgLSBjcHVfdXNhZ2VfMDsKKwlpZiAoIXJ1bmF2Z19wYXJlbnRfY3B1X3VzYWdlKQorCQlydW5hdmdfcGFyZW50X2NwdV91c2FnZSA9IHBhcmVudF9jcHVfdXNhZ2U7CisJcnVuYXZnX3BhcmVudF9jcHVfdXNhZ2UgPSAocnVuYXZnX3BhcmVudF9jcHVfdXNhZ2UqOSArCisJCQkJICAgcGFyZW50X2NwdV91c2FnZSkvMTA7CisKKwlyZXQgPSBwdGhyZWFkX211dGV4X2xvY2soJnN0YXJ0X3dvcmtfbXV0ZXgpOworCUJVR19PTihyZXQpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3Rhc2tzOyBpKyspIHsKKwkJdGFzayA9IHRhc2tzW2ldOworCQlzZW1faW5pdCgmdGFzay0+c2xlZXBfc2VtLCAwLCAwKTsKKwkJdGFzay0+Y3Vycl9ldmVudCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBydW5fb25lX3Rlc3Qodm9pZCkKK3sKKwl1NjQgVDAsIFQxLCBkZWx0YSwgYXZnX2RlbHRhLCBmbHVjdCwgc3RkX2RldjsKKworCVQwID0gZ2V0X25zZWNzKCk7CisJd2FpdF9mb3JfdGFza3MoKTsKKwlUMSA9IGdldF9uc2VjcygpOworCisJZGVsdGEgPSBUMSAtIFQwOworCXN1bV9ydW50aW1lICs9IGRlbHRhOworCW5yX3J1bnMrKzsKKworCWF2Z19kZWx0YSA9IHN1bV9ydW50aW1lIC8gbnJfcnVuczsKKwlpZiAoZGVsdGEgPCBhdmdfZGVsdGEpCisJCWZsdWN0ID0gYXZnX2RlbHRhIC0gZGVsdGE7CisJZWxzZQorCQlmbHVjdCA9IGRlbHRhIC0gYXZnX2RlbHRhOworCXN1bV9mbHVjdCArPSBmbHVjdDsKKwlzdGRfZGV2ID0gc3VtX2ZsdWN0IC8gbnJfcnVucyAvIHNxcnQobnJfcnVucyk7CisJaWYgKCFydW5fYXZnKQorCQlydW5fYXZnID0gZGVsdGE7CisJcnVuX2F2ZyA9IChydW5fYXZnKjkgKyBkZWx0YSkvMTA7CisKKwlwcmludGYoIiMlLTNsZDogJTAuM2YsICIsCisJCW5yX3J1bnMsIChkb3VibGUpZGVsdGEvMTAwMDAwMC4wKTsKKworCXByaW50ZigicmF2ZzogJTAuMmYsICIsCisJCShkb3VibGUpcnVuX2F2Zy8xZTYpOworCisJcHJpbnRmKCJjcHU6ICUwLjJmIC8gJTAuMmYiLAorCQkoZG91YmxlKWNwdV91c2FnZS8xZTYsIChkb3VibGUpcnVuYXZnX2NwdV91c2FnZS8xZTYpOworCisjaWYgMAorCS8qCisJICogcnVzYWdlIHN0YXRpc3RpY3MgZG9uZSBieSB0aGUgcGFyZW50LCB0aGVzZSBhcmUgbGVzcworCSAqIGFjY3VyYXRlIHRoYW4gdGhlIHN1bV9leGVjX3J1bnRpbWUgYmFzZWQgc3RhdGlzdGljczoKKwkgKi8KKwlwcmludGYoIiBbJTAuMmYgLyAlMC4yZl0iLAorCQkoZG91YmxlKXBhcmVudF9jcHVfdXNhZ2UvMWU2LAorCQkoZG91YmxlKXJ1bmF2Z19wYXJlbnRfY3B1X3VzYWdlLzFlNik7CisjZW5kaWYKKworCXByaW50ZigiXG4iKTsKKworCWlmIChucl9zbGVlcF9jb3JyZWN0aW9ucykKKwkJcHJpbnRmKCIgKCVsZCBzbGVlcCBjb3JyZWN0aW9ucylcbiIsIG5yX3NsZWVwX2NvcnJlY3Rpb25zKTsKKwlucl9zbGVlcF9jb3JyZWN0aW9ucyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY2FsaWJyYXRpb25zKHZvaWQpCit7CisJdTY0IFQwLCBUMTsKKworCVQwID0gZ2V0X25zZWNzKCk7CisJYnVybl9uc2VjcygxZTYpOworCVQxID0gZ2V0X25zZWNzKCk7CisKKwlwcmludGYoInRoZSBydW4gdGVzdCB0b29rICVMZCBuc2Vjc1xuIiwgVDEtVDApOworCisJVDAgPSBnZXRfbnNlY3MoKTsKKwlzbGVlcF9uc2VjcygxZTYpOworCVQxID0gZ2V0X25zZWNzKCk7CisKKwlwcmludGYoInRoZSBzbGVlcCB0ZXN0IHRvb2sgJUxkIG5zZWNzXG4iLCBUMS1UMCk7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NfY29tbV9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisKKwl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5jb21tLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKworCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBwZXJmX2V2ZW50X2NvbW06ICVzOiVkXG4iLAorCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKKwkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKKwkJZXZlbnQtPmNvbW0uY29tbSwgZXZlbnQtPmNvbW0ucGlkKTsKKworCWlmICh0aHJlYWQgPT0gTlVMTCB8fAorCSAgICB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgZXZlbnQtPmNvbW0uY29tbSkpIHsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBwZXJmX2V2ZW50X2NvbW0sIHNraXBwaW5nIGV2ZW50LlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJdG90YWxfY29tbSsrOworCisJcmV0dXJuIDA7Cit9CisKKworc3RydWN0IHJhd19ldmVudF9zYW1wbGUgeworCXUzMiBzaXplOworCWNoYXIgZGF0YVswXTsKK307CisKKyNkZWZpbmUgRklMTF9GSUVMRChwdHIsIGZpZWxkLCBldmVudCwgZGF0YSkJXAorCXB0ci5maWVsZCA9ICh0eXBlb2YocHRyLmZpZWxkKSkgcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAjZmllbGQsIGRhdGEpCisKKyNkZWZpbmUgRklMTF9BUlJBWShwdHIsIGFycmF5LCBldmVudCwgZGF0YSkJCQlcCitkbyB7CQkJCQkJCQlcCisJdm9pZCAqX19hcnJheSA9IHJhd19maWVsZF9wdHIoZXZlbnQsICNhcnJheSwgZGF0YSk7CVwKKwltZW1jcHkocHRyLmFycmF5LCBfX2FycmF5LCBzaXplb2YocHRyLmFycmF5KSk7CVwKK30gd2hpbGUoMCkKKworI2RlZmluZSBGSUxMX0NPTU1PTl9GSUVMRFMocHRyLCBldmVudCwgZGF0YSkJCQlcCitkbyB7CQkJCQkJCQlcCisJRklMTF9GSUVMRChwdHIsIGNvbW1vbl90eXBlLCBldmVudCwgZGF0YSk7CQlcCisJRklMTF9GSUVMRChwdHIsIGNvbW1vbl9mbGFncywgZXZlbnQsIGRhdGEpOwkJXAorCUZJTExfRklFTEQocHRyLCBjb21tb25fcHJlZW1wdF9jb3VudCwgZXZlbnQsIGRhdGEpOwlcCisJRklMTF9GSUVMRChwdHIsIGNvbW1vbl9waWQsIGV2ZW50LCBkYXRhKTsJCVwKKwlGSUxMX0ZJRUxEKHB0ciwgY29tbW9uX3RnaWQsIGV2ZW50LCBkYXRhKTsJCVwKK30gd2hpbGUgKDApCisKKworCitzdHJ1Y3QgdHJhY2Vfc3dpdGNoX2V2ZW50IHsKKwl1MzIgc2l6ZTsKKworCXUxNiBjb21tb25fdHlwZTsKKwl1OCBjb21tb25fZmxhZ3M7CisJdTggY29tbW9uX3ByZWVtcHRfY291bnQ7CisJdTMyIGNvbW1vbl9waWQ7CisJdTMyIGNvbW1vbl90Z2lkOworCisJY2hhciBwcmV2X2NvbW1bMTZdOworCXUzMiBwcmV2X3BpZDsKKwl1MzIgcHJldl9wcmlvOworCXU2NCBwcmV2X3N0YXRlOworCWNoYXIgbmV4dF9jb21tWzE2XTsKKwl1MzIgbmV4dF9waWQ7CisJdTMyIG5leHRfcHJpbzsKK307CisKK3N0cnVjdCB0cmFjZV9ydW50aW1lX2V2ZW50IHsKKwl1MzIgc2l6ZTsKKworCXUxNiBjb21tb25fdHlwZTsKKwl1OCBjb21tb25fZmxhZ3M7CisJdTggY29tbW9uX3ByZWVtcHRfY291bnQ7CisJdTMyIGNvbW1vbl9waWQ7CisJdTMyIGNvbW1vbl90Z2lkOworCisJY2hhciBjb21tWzE2XTsKKwl1MzIgcGlkOworCXU2NCBydW50aW1lOworCXU2NCB2cnVudGltZTsKK307CisKK3N0cnVjdCB0cmFjZV93YWtldXBfZXZlbnQgeworCXUzMiBzaXplOworCisJdTE2IGNvbW1vbl90eXBlOworCXU4IGNvbW1vbl9mbGFnczsKKwl1OCBjb21tb25fcHJlZW1wdF9jb3VudDsKKwl1MzIgY29tbW9uX3BpZDsKKwl1MzIgY29tbW9uX3RnaWQ7CisKKwljaGFyIGNvbW1bMTZdOworCXUzMiBwaWQ7CisKKwl1MzIgcHJpbzsKKwl1MzIgc3VjY2VzczsKKwl1MzIgY3B1OworfTsKKworc3RydWN0IHRyYWNlX2ZvcmtfZXZlbnQgeworCXUzMiBzaXplOworCisJdTE2IGNvbW1vbl90eXBlOworCXU4IGNvbW1vbl9mbGFnczsKKwl1OCBjb21tb25fcHJlZW1wdF9jb3VudDsKKwl1MzIgY29tbW9uX3BpZDsKKwl1MzIgY29tbW9uX3RnaWQ7CisKKwljaGFyIHBhcmVudF9jb21tWzE2XTsKKwl1MzIgcGFyZW50X3BpZDsKKwljaGFyIGNoaWxkX2NvbW1bMTZdOworCXUzMiBjaGlsZF9waWQ7Cit9OworCitzdHJ1Y3QgdHJhY2Vfc2NoZWRfaGFuZGxlciB7CisJdm9pZCAoKnN3aXRjaF9ldmVudCkoc3RydWN0IHRyYWNlX3N3aXRjaF9ldmVudCAqLAorCQkJICAgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgICAgaW50IGNwdSwKKwkJCSAgICAgdTY0IHRpbWVzdGFtcCwKKwkJCSAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCpydW50aW1lX2V2ZW50KShzdHJ1Y3QgdHJhY2VfcnVudGltZV9ldmVudCAqLAorCQkJICAgICAgc3RydWN0IGV2ZW50ICosCisJCQkgICAgICBpbnQgY3B1LAorCQkJICAgICAgdTY0IHRpbWVzdGFtcCwKKwkJCSAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqd2FrZXVwX2V2ZW50KShzdHJ1Y3QgdHJhY2Vfd2FrZXVwX2V2ZW50ICosCisJCQkgICAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgICBpbnQgY3B1LAorCQkJICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworCisJdm9pZCAoKmZvcmtfZXZlbnQpKHN0cnVjdCB0cmFjZV9mb3JrX2V2ZW50ICosCisJCQkgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgIGludCBjcHUsCisJCQkgICB1NjQgdGltZXN0YW1wLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKK307CisKKworc3RhdGljIHZvaWQKK3JlcGxheV93YWtldXBfZXZlbnQoc3RydWN0IHRyYWNlX3dha2V1cF9ldmVudCAqd2FrZXVwX2V2ZW50LAorCQkgICAgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJICAgIGludCBjcHUgX191c2VkLAorCQkgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCSAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB0YXNrX2Rlc2MgKndha2VyLCAqd2FrZWU7CisKKwlpZiAodmVyYm9zZSkgeworCQlwcmludGYoInNjaGVkX3dha2V1cCBldmVudCAlcFxuIiwgZXZlbnQpOworCisJCXByaW50ZigiIC4uLiBwaWQgJWQgd29rZSB1cCAlcy8lZFxuIiwKKwkJCXdha2V1cF9ldmVudC0+Y29tbW9uX3BpZCwKKwkJCXdha2V1cF9ldmVudC0+Y29tbSwKKwkJCXdha2V1cF9ldmVudC0+cGlkKTsKKwl9CisKKwl3YWtlciA9IHJlZ2lzdGVyX3BpZCh3YWtldXBfZXZlbnQtPmNvbW1vbl9waWQsICI8dW5rbm93bj4iKTsKKwl3YWtlZSA9IHJlZ2lzdGVyX3BpZCh3YWtldXBfZXZlbnQtPnBpZCwgd2FrZXVwX2V2ZW50LT5jb21tKTsKKworCWFkZF9zY2hlZF9ldmVudF93YWtldXAod2FrZXIsIHRpbWVzdGFtcCwgd2FrZWUpOworfQorCitzdGF0aWMgdTY0IGNwdV9sYXN0X3N3aXRjaGVkW01BWF9DUFVTXTsKKworc3RhdGljIHZvaWQKK3JlcGxheV9zd2l0Y2hfZXZlbnQoc3RydWN0IHRyYWNlX3N3aXRjaF9ldmVudCAqc3dpdGNoX2V2ZW50LAorCQkgICAgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJICAgIGludCBjcHUsCisJCSAgICB1NjQgdGltZXN0YW1wLAorCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdGFza19kZXNjICpwcmV2LCAqbmV4dDsKKwl1NjQgdGltZXN0YW1wMDsKKwlzNjQgZGVsdGE7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRmKCJzY2hlZF9zd2l0Y2ggZXZlbnQgJXBcbiIsIGV2ZW50KTsKKworCWlmIChjcHUgPj0gTUFYX0NQVVMgfHwgY3B1IDwgMCkKKwkJcmV0dXJuOworCisJdGltZXN0YW1wMCA9IGNwdV9sYXN0X3N3aXRjaGVkW2NwdV07CisJaWYgKHRpbWVzdGFtcDApCisJCWRlbHRhID0gdGltZXN0YW1wIC0gdGltZXN0YW1wMDsKKwllbHNlCisJCWRlbHRhID0gMDsKKworCWlmIChkZWx0YSA8IDApCisJCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKworCWlmICh2ZXJib3NlKSB7CisJCXByaW50ZigiIC4uLiBzd2l0Y2ggZnJvbSAlcy8lZCB0byAlcy8lZCBbcmFuICVMZCBuc2Vjc11cbiIsCisJCQlzd2l0Y2hfZXZlbnQtPnByZXZfY29tbSwgc3dpdGNoX2V2ZW50LT5wcmV2X3BpZCwKKwkJCXN3aXRjaF9ldmVudC0+bmV4dF9jb21tLCBzd2l0Y2hfZXZlbnQtPm5leHRfcGlkLAorCQkJZGVsdGEpOworCX0KKworCXByZXYgPSByZWdpc3Rlcl9waWQoc3dpdGNoX2V2ZW50LT5wcmV2X3BpZCwgc3dpdGNoX2V2ZW50LT5wcmV2X2NvbW0pOworCW5leHQgPSByZWdpc3Rlcl9waWQoc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwgc3dpdGNoX2V2ZW50LT5uZXh0X2NvbW0pOworCisJY3B1X2xhc3Rfc3dpdGNoZWRbY3B1XSA9IHRpbWVzdGFtcDsKKworCWFkZF9zY2hlZF9ldmVudF9ydW4ocHJldiwgdGltZXN0YW1wLCBkZWx0YSk7CisJYWRkX3NjaGVkX2V2ZW50X3NsZWVwKHByZXYsIHRpbWVzdGFtcCwgc3dpdGNoX2V2ZW50LT5wcmV2X3N0YXRlKTsKK30KKworCitzdGF0aWMgdm9pZAorcmVwbGF5X2ZvcmtfZXZlbnQoc3RydWN0IHRyYWNlX2ZvcmtfZXZlbnQgKmZvcmtfZXZlbnQsCisJCSAgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJICBpbnQgY3B1IF9fdXNlZCwKKwkJICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCWlmICh2ZXJib3NlKSB7CisJCXByaW50Zigic2NoZWRfZm9yayBldmVudCAlcFxuIiwgZXZlbnQpOworCQlwcmludGYoIi4uLiBwYXJlbnQ6ICVzLyVkXG4iLCBmb3JrX2V2ZW50LT5wYXJlbnRfY29tbSwgZm9ya19ldmVudC0+cGFyZW50X3BpZCk7CisJCXByaW50ZigiLi4uICBjaGlsZDogJXMvJWRcbiIsIGZvcmtfZXZlbnQtPmNoaWxkX2NvbW0sIGZvcmtfZXZlbnQtPmNoaWxkX3BpZCk7CisJfQorCXJlZ2lzdGVyX3BpZChmb3JrX2V2ZW50LT5wYXJlbnRfcGlkLCBmb3JrX2V2ZW50LT5wYXJlbnRfY29tbSk7CisJcmVnaXN0ZXJfcGlkKGZvcmtfZXZlbnQtPmNoaWxkX3BpZCwgZm9ya19ldmVudC0+Y2hpbGRfY29tbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfc2NoZWRfaGFuZGxlciByZXBsYXlfb3BzICA9IHsKKwkud2FrZXVwX2V2ZW50CQk9IHJlcGxheV93YWtldXBfZXZlbnQsCisJLnN3aXRjaF9ldmVudAkJPSByZXBsYXlfc3dpdGNoX2V2ZW50LAorCS5mb3JrX2V2ZW50CQk9IHJlcGxheV9mb3JrX2V2ZW50LAorfTsKKworc3RydWN0IHNvcnRfZGltZW5zaW9uIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlzb3J0X2ZuX3QJCWNtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGNtcF9waWQpOworCitzdGF0aWMgaW50Cit0aHJlYWRfbGF0X2NtcChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3Qgd29ya19hdG9tcyAqbCwgc3RydWN0IHdvcmtfYXRvbXMgKnIpCit7CisJc3RydWN0IHNvcnRfZGltZW5zaW9uICpzb3J0OworCWludCByZXQgPSAwOworCisJQlVHX09OKGxpc3RfZW1wdHkobGlzdCkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzb3J0LCBsaXN0LCBsaXN0KSB7CisJCXJldCA9IHNvcnQtPmNtcChsLCByKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCB3b3JrX2F0b21zICoKK3RocmVhZF9hdG9tc19zZWFyY2goc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpzb3J0X2xpc3QpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290LT5yYl9ub2RlOworCXN0cnVjdCB3b3JrX2F0b21zIGtleSA9IHsgLnRocmVhZCA9IHRocmVhZCB9OworCisJd2hpbGUgKG5vZGUpIHsKKwkJc3RydWN0IHdvcmtfYXRvbXMgKmF0b21zOworCQlpbnQgY21wOworCisJCWF0b21zID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCB3b3JrX2F0b21zLCBub2RlKTsKKworCQljbXAgPSB0aHJlYWRfbGF0X2NtcChzb3J0X2xpc3QsICZrZXksIGF0b21zKTsKKwkJaWYgKGNtcCA+IDApCisJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wIDwgMCkKKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlCVUdfT04odGhyZWFkICE9IGF0b21zLT50aHJlYWQpOworCQkJcmV0dXJuIGF0b21zOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorX190aHJlYWRfbGF0ZW5jeV9pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCB3b3JrX2F0b21zICpkYXRhLAorCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnNvcnRfbGlzdCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICYocm9vdC0+cmJfbm9kZSksICpwYXJlbnQgPSBOVUxMOworCisJd2hpbGUgKCpuZXcpIHsKKwkJc3RydWN0IHdvcmtfYXRvbXMgKnRoaXM7CisJCWludCBjbXA7CisKKwkJdGhpcyA9IGNvbnRhaW5lcl9vZigqbmV3LCBzdHJ1Y3Qgd29ya19hdG9tcywgbm9kZSk7CisJCXBhcmVudCA9ICpuZXc7CisKKwkJY21wID0gdGhyZWFkX2xhdF9jbXAoc29ydF9saXN0LCBkYXRhLCB0aGlzKTsKKworCQlpZiAoY21wID4gMCkKKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsKKwkJZWxzZQorCQkJbmV3ID0gJigoKm5ldyktPnJiX3JpZ2h0KTsKKwl9CisKKwlyYl9saW5rX25vZGUoJmRhdGEtPm5vZGUsIHBhcmVudCwgbmV3KTsKKwlyYl9pbnNlcnRfY29sb3IoJmRhdGEtPm5vZGUsIHJvb3QpOworfQorCitzdGF0aWMgdm9pZCB0aHJlYWRfYXRvbXNfaW5zZXJ0KHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXM7CisKKwlhdG9tcyA9IGNhbGxvYyhzaXplb2YoKmF0b21zKSwgMSk7CisJaWYgKCFhdG9tcykKKwkJZGllKCJObyBtZW1vcnkiKTsKKworCWF0b21zLT50aHJlYWQgPSB0aHJlYWQ7CisJSU5JVF9MSVNUX0hFQUQoJmF0b21zLT53b3JrX2xpc3QpOworCV9fdGhyZWFkX2xhdGVuY3lfaW5zZXJ0KCZhdG9tX3Jvb3QsIGF0b21zLCAmY21wX3BpZCk7Cit9CisKK3N0YXRpYyB2b2lkCitsYXRlbmN5X2ZvcmtfZXZlbnQoc3RydWN0IHRyYWNlX2ZvcmtfZXZlbnQgKmZvcmtfZXZlbnQgX191c2VkLAorCQkgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50IF9fdXNlZCwKKwkJICAgaW50IGNwdSBfX3VzZWQsCisJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCS8qIHNob3VsZCBpbnNlcnQgdGhlIG5ld2NvbWVyICovCit9CisKK19fdXNlZAorc3RhdGljIGNoYXIgc2NoZWRfb3V0X3N0YXRlKHN0cnVjdCB0cmFjZV9zd2l0Y2hfZXZlbnQgKnN3aXRjaF9ldmVudCkKK3sKKwljb25zdCBjaGFyICpzdHIgPSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSOworCisJcmV0dXJuIHN0cltzd2l0Y2hfZXZlbnQtPnByZXZfc3RhdGVdOworfQorCitzdGF0aWMgdm9pZAorYWRkX3NjaGVkX291dF9ldmVudChzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXMsCisJCSAgICBjaGFyIHJ1bl9zdGF0ZSwKKwkJICAgIHU2NCB0aW1lc3RhbXApCit7CisJc3RydWN0IHdvcmtfYXRvbSAqYXRvbTsKKworCWF0b20gPSBjYWxsb2Moc2l6ZW9mKCphdG9tKSwgMSk7CisJaWYgKCFhdG9tKQorCQlkaWUoIk5vbiBtZW1vcnkiKTsKKworCWF0b20tPnNjaGVkX291dF90aW1lID0gdGltZXN0YW1wOworCisJaWYgKHJ1bl9zdGF0ZSA9PSAnUicpIHsKKwkJYXRvbS0+c3RhdGUgPSBUSFJFQURfV0FJVF9DUFU7CisJCWF0b20tPndha2VfdXBfdGltZSA9IGF0b20tPnNjaGVkX291dF90aW1lOworCX0KKworCWxpc3RfYWRkX3RhaWwoJmF0b20tPmxpc3QsICZhdG9tcy0+d29ya19saXN0KTsKK30KKworc3RhdGljIHZvaWQKK2FkZF9ydW50aW1lX2V2ZW50KHN0cnVjdCB3b3JrX2F0b21zICphdG9tcywgdTY0IGRlbHRhLCB1NjQgdGltZXN0YW1wIF9fdXNlZCkKK3sKKwlzdHJ1Y3Qgd29ya19hdG9tICphdG9tOworCisJQlVHX09OKGxpc3RfZW1wdHkoJmF0b21zLT53b3JrX2xpc3QpKTsKKworCWF0b20gPSBsaXN0X2VudHJ5KGF0b21zLT53b3JrX2xpc3QucHJldiwgc3RydWN0IHdvcmtfYXRvbSwgbGlzdCk7CisKKwlhdG9tLT5ydW50aW1lICs9IGRlbHRhOworCWF0b21zLT50b3RhbF9ydW50aW1lICs9IGRlbHRhOworfQorCitzdGF0aWMgdm9pZAorYWRkX3NjaGVkX2luX2V2ZW50KHN0cnVjdCB3b3JrX2F0b21zICphdG9tcywgdTY0IHRpbWVzdGFtcCkKK3sKKwlzdHJ1Y3Qgd29ya19hdG9tICphdG9tOworCXU2NCBkZWx0YTsKKworCWlmIChsaXN0X2VtcHR5KCZhdG9tcy0+d29ya19saXN0KSkKKwkJcmV0dXJuOworCisJYXRvbSA9IGxpc3RfZW50cnkoYXRvbXMtPndvcmtfbGlzdC5wcmV2LCBzdHJ1Y3Qgd29ya19hdG9tLCBsaXN0KTsKKworCWlmIChhdG9tLT5zdGF0ZSAhPSBUSFJFQURfV0FJVF9DUFUpCisJCXJldHVybjsKKworCWlmICh0aW1lc3RhbXAgPCBhdG9tLT53YWtlX3VwX3RpbWUpIHsKKwkJYXRvbS0+c3RhdGUgPSBUSFJFQURfSUdOT1JFOworCQlyZXR1cm47CisJfQorCisJYXRvbS0+c3RhdGUgPSBUSFJFQURfU0NIRURfSU47CisJYXRvbS0+c2NoZWRfaW5fdGltZSA9IHRpbWVzdGFtcDsKKworCWRlbHRhID0gYXRvbS0+c2NoZWRfaW5fdGltZSAtIGF0b20tPndha2VfdXBfdGltZTsKKwlhdG9tcy0+dG90YWxfbGF0ICs9IGRlbHRhOworCWlmIChkZWx0YSA+IGF0b21zLT5tYXhfbGF0KQorCQlhdG9tcy0+bWF4X2xhdCA9IGRlbHRhOworCWF0b21zLT5uYl9hdG9tcysrOworfQorCitzdGF0aWMgdm9pZAorbGF0ZW5jeV9zd2l0Y2hfZXZlbnQoc3RydWN0IHRyYWNlX3N3aXRjaF9ldmVudCAqc3dpdGNoX2V2ZW50LAorCQkgICAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkgICAgIGludCBjcHUsCisJCSAgICAgdTY0IHRpbWVzdGFtcCwKKwkJICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB3b3JrX2F0b21zICpvdXRfZXZlbnRzLCAqaW5fZXZlbnRzOworCXN0cnVjdCB0aHJlYWQgKnNjaGVkX291dCwgKnNjaGVkX2luOworCXU2NCB0aW1lc3RhbXAwOworCXM2NCBkZWx0YTsKKworCUJVR19PTihjcHUgPj0gTUFYX0NQVVMgfHwgY3B1IDwgMCk7CisKKwl0aW1lc3RhbXAwID0gY3B1X2xhc3Rfc3dpdGNoZWRbY3B1XTsKKwljcHVfbGFzdF9zd2l0Y2hlZFtjcHVdID0gdGltZXN0YW1wOworCWlmICh0aW1lc3RhbXAwKQorCQlkZWx0YSA9IHRpbWVzdGFtcCAtIHRpbWVzdGFtcDA7CisJZWxzZQorCQlkZWx0YSA9IDA7CisKKwlpZiAoZGVsdGEgPCAwKQorCQlkaWUoImhtLCBkZWx0YTogJUxkIDwgMCA/XG4iLCBkZWx0YSk7CisKKworCXNjaGVkX291dCA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5wcmV2X3BpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwlzY2hlZF9pbiA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKworCW91dF9ldmVudHMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHNjaGVkX291dCwgJmNtcF9waWQpOworCWlmICghb3V0X2V2ZW50cykgeworCQl0aHJlYWRfYXRvbXNfaW5zZXJ0KHNjaGVkX291dCk7CisJCW91dF9ldmVudHMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHNjaGVkX291dCwgJmNtcF9waWQpOworCQlpZiAoIW91dF9ldmVudHMpCisJCQlkaWUoIm91dC1ldmVudDogSW50ZXJuYWwgdHJlZSBlcnJvciIpOworCX0KKwlhZGRfc2NoZWRfb3V0X2V2ZW50KG91dF9ldmVudHMsIHNjaGVkX291dF9zdGF0ZShzd2l0Y2hfZXZlbnQpLCB0aW1lc3RhbXApOworCisJaW5fZXZlbnRzID0gdGhyZWFkX2F0b21zX3NlYXJjaCgmYXRvbV9yb290LCBzY2hlZF9pbiwgJmNtcF9waWQpOworCWlmICghaW5fZXZlbnRzKSB7CisJCXRocmVhZF9hdG9tc19pbnNlcnQoc2NoZWRfaW4pOworCQlpbl9ldmVudHMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHNjaGVkX2luLCAmY21wX3BpZCk7CisJCWlmICghaW5fZXZlbnRzKQorCQkJZGllKCJpbi1ldmVudDogSW50ZXJuYWwgdHJlZSBlcnJvciIpOworCQkvKgorCQkgKiBUYWtlIGNhbWUgaW4gd2UgaGF2ZSBub3QgaGVhcmQgYWJvdXQgeWV0LAorCQkgKiBhZGQgaW4gYW4gaW5pdGlhbCBhdG9tIGluIHJ1bm5hYmxlIHN0YXRlOgorCQkgKi8KKwkJYWRkX3NjaGVkX291dF9ldmVudChpbl9ldmVudHMsICdSJywgdGltZXN0YW1wKTsKKwl9CisJYWRkX3NjaGVkX2luX2V2ZW50KGluX2V2ZW50cywgdGltZXN0YW1wKTsKK30KKworc3RhdGljIHZvaWQKK2xhdGVuY3lfcnVudGltZV9ldmVudChzdHJ1Y3QgdHJhY2VfcnVudGltZV9ldmVudCAqcnVudGltZV9ldmVudCwKKwkJICAgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50IF9fdXNlZCwKKwkJICAgICBpbnQgY3B1LAorCQkgICAgIHU2NCB0aW1lc3RhbXAsCisJCSAgICAgc3RydWN0IHRocmVhZCAqdGhpc190aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB3b3JrX2F0b21zICphdG9tczsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisKKwlCVUdfT04oY3B1ID49IE1BWF9DUFVTIHx8IGNwdSA8IDApOworCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhydW50aW1lX2V2ZW50LT5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHRocmVhZCwgJmNtcF9waWQpOworCWlmICghYXRvbXMpIHsKKwkJdGhyZWFkX2F0b21zX2luc2VydCh0aHJlYWQpOworCQlhdG9tcyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgdGhyZWFkLCAmY21wX3BpZCk7CisJCWlmICghYXRvbXMpCisJCQlkaWUoImluLWV2ZW50OiBJbnRlcm5hbCB0cmVlIGVycm9yIik7CisJCWFkZF9zY2hlZF9vdXRfZXZlbnQoYXRvbXMsICdSJywgdGltZXN0YW1wKTsKKwl9CisKKwlhZGRfcnVudGltZV9ldmVudChhdG9tcywgcnVudGltZV9ldmVudC0+cnVudGltZSwgdGltZXN0YW1wKTsKK30KKworc3RhdGljIHZvaWQKK2xhdGVuY3lfd2FrZXVwX2V2ZW50KHN0cnVjdCB0cmFjZV93YWtldXBfZXZlbnQgKndha2V1cF9ldmVudCwKKwkJICAgICBzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkgICAgIGludCBjcHUgX191c2VkLAorCQkgICAgIHU2NCB0aW1lc3RhbXAsCisJCSAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXM7CisJc3RydWN0IHdvcmtfYXRvbSAqYXRvbTsKKwlzdHJ1Y3QgdGhyZWFkICp3YWtlZTsKKworCS8qIE5vdGUgZm9yIGxhdGVyLCBpdCBtYXkgYmUgaW50ZXJlc3RpbmcgdG8gb2JzZXJ2ZSB0aGUgZmFpbGluZyBjYXNlcyAqLworCWlmICghd2FrZXVwX2V2ZW50LT5zdWNjZXNzKQorCQlyZXR1cm47CisKKwl3YWtlZSA9IHRocmVhZHNfX2ZpbmRuZXcod2FrZXVwX2V2ZW50LT5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHdha2VlLCAmY21wX3BpZCk7CisJaWYgKCFhdG9tcykgeworCQl0aHJlYWRfYXRvbXNfaW5zZXJ0KHdha2VlKTsKKwkJYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHdha2VlLCAmY21wX3BpZCk7CisJCWlmICghYXRvbXMpCisJCQlkaWUoIndha2V1cC1ldmVudDogSW50ZXJuYWwgdHJlZSBlcnJvciIpOworCQlhZGRfc2NoZWRfb3V0X2V2ZW50KGF0b21zLCAnUycsIHRpbWVzdGFtcCk7CisJfQorCisJQlVHX09OKGxpc3RfZW1wdHkoJmF0b21zLT53b3JrX2xpc3QpKTsKKworCWF0b20gPSBsaXN0X2VudHJ5KGF0b21zLT53b3JrX2xpc3QucHJldiwgc3RydWN0IHdvcmtfYXRvbSwgbGlzdCk7CisKKwlpZiAoYXRvbS0+c3RhdGUgIT0gVEhSRUFEX1NMRUVQSU5HKQorCQlucl9zdGF0ZV9tYWNoaW5lX2J1Z3MrKzsKKworCW5yX3RpbWVzdGFtcHMrKzsKKwlpZiAoYXRvbS0+c2NoZWRfb3V0X3RpbWUgPiB0aW1lc3RhbXApIHsKKwkJbnJfdW5vcmRlcmVkX3RpbWVzdGFtcHMrKzsKKwkJcmV0dXJuOworCX0KKworCWF0b20tPnN0YXRlID0gVEhSRUFEX1dBSVRfQ1BVOworCWF0b20tPndha2VfdXBfdGltZSA9IHRpbWVzdGFtcDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9zY2hlZF9oYW5kbGVyIGxhdF9vcHMgID0geworCS53YWtldXBfZXZlbnQJCT0gbGF0ZW5jeV93YWtldXBfZXZlbnQsCisJLnN3aXRjaF9ldmVudAkJPSBsYXRlbmN5X3N3aXRjaF9ldmVudCwKKwkucnVudGltZV9ldmVudAkJPSBsYXRlbmN5X3J1bnRpbWVfZXZlbnQsCisJLmZvcmtfZXZlbnQJCT0gbGF0ZW5jeV9mb3JrX2V2ZW50LAorfTsKKworc3RhdGljIHZvaWQgb3V0cHV0X2xhdF90aHJlYWQoc3RydWN0IHdvcmtfYXRvbXMgKndvcmtfbGlzdCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXU2NCBhdmc7CisKKwlpZiAoIXdvcmtfbGlzdC0+bmJfYXRvbXMpCisJCXJldHVybjsKKwkvKgorCSAqIElnbm9yZSBpZGxlIHRocmVhZHM6CisJICovCisJaWYgKCFzdHJjbXAod29ya19saXN0LT50aHJlYWQtPmNvbW0sICJzd2FwcGVyIikpCisJCXJldHVybjsKKworCWFsbF9ydW50aW1lICs9IHdvcmtfbGlzdC0+dG90YWxfcnVudGltZTsKKwlhbGxfY291bnQgKz0gd29ya19saXN0LT5uYl9hdG9tczsKKworCXJldCA9IHByaW50ZigiICAlczolZCAiLCB3b3JrX2xpc3QtPnRocmVhZC0+Y29tbSwgd29ya19saXN0LT50aHJlYWQtPnBpZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjQgLSByZXQ7IGkrKykKKwkJcHJpbnRmKCIgIik7CisKKwlhdmcgPSB3b3JrX2xpc3QtPnRvdGFsX2xhdCAvIHdvcmtfbGlzdC0+bmJfYXRvbXM7CisKKwlwcmludGYoInwlMTEuM2YgbXMgfCU5bGx1IHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHxcbiIsCisJICAgICAgKGRvdWJsZSl3b3JrX2xpc3QtPnRvdGFsX3J1bnRpbWUgLyAxZTYsCisJCSB3b3JrX2xpc3QtPm5iX2F0b21zLCAoZG91YmxlKWF2ZyAvIDFlNiwKKwkJIChkb3VibGUpd29ya19saXN0LT5tYXhfbGF0IC8gMWU2KTsKK30KKworc3RhdGljIGludCBwaWRfY21wKHN0cnVjdCB3b3JrX2F0b21zICpsLCBzdHJ1Y3Qgd29ya19hdG9tcyAqcikKK3sKKwlpZiAobC0+dGhyZWFkLT5waWQgPCByLT50aHJlYWQtPnBpZCkKKwkJcmV0dXJuIC0xOworCWlmIChsLT50aHJlYWQtPnBpZCA+IHItPnRocmVhZC0+cGlkKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uIHBpZF9zb3J0X2RpbWVuc2lvbiA9IHsKKwkubmFtZQkJCT0gInBpZCIsCisJLmNtcAkJCT0gcGlkX2NtcCwKK307CisKK3N0YXRpYyBpbnQgYXZnX2NtcChzdHJ1Y3Qgd29ya19hdG9tcyAqbCwgc3RydWN0IHdvcmtfYXRvbXMgKnIpCit7CisJdTY0IGF2Z2wsIGF2Z3I7CisKKwlpZiAoIWwtPm5iX2F0b21zKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIXItPm5iX2F0b21zKQorCQlyZXR1cm4gMTsKKworCWF2Z2wgPSBsLT50b3RhbF9sYXQgLyBsLT5uYl9hdG9tczsKKwlhdmdyID0gci0+dG90YWxfbGF0IC8gci0+bmJfYXRvbXM7CisKKwlpZiAoYXZnbCA8IGF2Z3IpCisJCXJldHVybiAtMTsKKwlpZiAoYXZnbCA+IGF2Z3IpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gYXZnX3NvcnRfZGltZW5zaW9uID0geworCS5uYW1lCQkJPSAiYXZnIiwKKwkuY21wCQkJPSBhdmdfY21wLAorfTsKKworc3RhdGljIGludCBtYXhfY21wKHN0cnVjdCB3b3JrX2F0b21zICpsLCBzdHJ1Y3Qgd29ya19hdG9tcyAqcikKK3sKKwlpZiAobC0+bWF4X2xhdCA8IHItPm1heF9sYXQpCisJCXJldHVybiAtMTsKKwlpZiAobC0+bWF4X2xhdCA+IHItPm1heF9sYXQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gbWF4X3NvcnRfZGltZW5zaW9uID0geworCS5uYW1lCQkJPSAibWF4IiwKKwkuY21wCQkJPSBtYXhfY21wLAorfTsKKworc3RhdGljIGludCBzd2l0Y2hfY21wKHN0cnVjdCB3b3JrX2F0b21zICpsLCBzdHJ1Y3Qgd29ya19hdG9tcyAqcikKK3sKKwlpZiAobC0+bmJfYXRvbXMgPCByLT5uYl9hdG9tcykKKwkJcmV0dXJuIC0xOworCWlmIChsLT5uYl9hdG9tcyA+IHItPm5iX2F0b21zKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uIHN3aXRjaF9zb3J0X2RpbWVuc2lvbiA9IHsKKwkubmFtZQkJCT0gInN3aXRjaCIsCisJLmNtcAkJCT0gc3dpdGNoX2NtcCwKK307CisKK3N0YXRpYyBpbnQgcnVudGltZV9jbXAoc3RydWN0IHdvcmtfYXRvbXMgKmwsIHN0cnVjdCB3b3JrX2F0b21zICpyKQoreworCWlmIChsLT50b3RhbF9ydW50aW1lIDwgci0+dG90YWxfcnVudGltZSkKKwkJcmV0dXJuIC0xOworCWlmIChsLT50b3RhbF9ydW50aW1lID4gci0+dG90YWxfcnVudGltZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzb3J0X2RpbWVuc2lvbiBydW50aW1lX3NvcnRfZGltZW5zaW9uID0geworCS5uYW1lCQkJPSAicnVudGltZSIsCisJLmNtcAkJCT0gcnVudGltZV9jbXAsCit9OworCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uICphdmFpbGFibGVfc29ydHNbXSA9IHsKKwkmcGlkX3NvcnRfZGltZW5zaW9uLAorCSZhdmdfc29ydF9kaW1lbnNpb24sCisJJm1heF9zb3J0X2RpbWVuc2lvbiwKKwkmc3dpdGNoX3NvcnRfZGltZW5zaW9uLAorCSZydW50aW1lX3NvcnRfZGltZW5zaW9uLAorfTsKKworI2RlZmluZSBOQl9BVkFJTEFCTEVfU09SVFMJKGludCkoc2l6ZW9mKGF2YWlsYWJsZV9zb3J0cykgLyBzaXplb2Yoc3RydWN0IHNvcnRfZGltZW5zaW9uICopKQorCitzdGF0aWMgTElTVF9IRUFEKHNvcnRfbGlzdCk7CisKK3N0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjaGFyICp0b2ssIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkJfQVZBSUxBQkxFX1NPUlRTOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXZhaWxhYmxlX3NvcnRzW2ldLT5uYW1lLCB0b2spKSB7CisJCQlsaXN0X2FkZF90YWlsKCZhdmFpbGFibGVfc29ydHNbaV0tPmxpc3QsIGxpc3QpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc29ydGluZyh2b2lkKTsKKworc3RhdGljIHZvaWQgc29ydF9sYXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IHdvcmtfYXRvbXMgKmRhdGE7CisJCW5vZGUgPSByYl9maXJzdCgmYXRvbV9yb290KTsKKwkJaWYgKCFub2RlKQorCQkJYnJlYWs7CisKKwkJcmJfZXJhc2Uobm9kZSwgJmF0b21fcm9vdCk7CisJCWRhdGEgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qgd29ya19hdG9tcywgbm9kZSk7CisJCV9fdGhyZWFkX2xhdGVuY3lfaW5zZXJ0KCZzb3J0ZWRfYXRvbV9yb290LCBkYXRhLCAmc29ydF9saXN0KTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfc2NoZWRfaGFuZGxlciAqdHJhY2VfaGFuZGxlcjsKKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nfc2NoZWRfd2FrZXVwX2V2ZW50KHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcsCisJCQkgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX3dha2V1cF9ldmVudCB3YWtldXBfZXZlbnQ7CisKKwlGSUxMX0NPTU1PTl9GSUVMRFMod2FrZXVwX2V2ZW50LCBldmVudCwgcmF3LT5kYXRhKTsKKworCUZJTExfQVJSQVkod2FrZXVwX2V2ZW50LCBjb21tLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKHdha2V1cF9ldmVudCwgcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKHdha2V1cF9ldmVudCwgcHJpbywgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRCh3YWtldXBfZXZlbnQsIHN1Y2Nlc3MsIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQod2FrZXVwX2V2ZW50LCBjcHUsIGV2ZW50LCByYXctPmRhdGEpOworCisJaWYgKHRyYWNlX2hhbmRsZXItPndha2V1cF9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+d2FrZXVwX2V2ZW50KCZ3YWtldXBfZXZlbnQsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworLyoKKyAqIFRyYWNrIHRoZSBjdXJyZW50IHRhc2sgLSB0aGF0IHdheSB3ZSBjYW4ga25vdyB3aGV0aGVyIHRoZXJlJ3MgYW55CisgKiB3ZWlyZCBldmVudHMsIHN1Y2ggYXMgYSB0YXNrIGJlaW5nIHN3aXRjaGVkIGF3YXkgdGhhdCBpcyBub3QgY3VycmVudC4KKyAqLworc3RhdGljIGludCBtYXhfY3B1OworCitzdGF0aWMgdTMyIGN1cnJfcGlkW01BWF9DUFVTXSA9IHsgWzAgLi4uIE1BWF9DUFVTLTFdID0gLTEgfTsKKworc3RhdGljIHN0cnVjdCB0aHJlYWQgKmN1cnJfdGhyZWFkW01BWF9DUFVTXTsKKworc3RhdGljIGNoYXIgbmV4dF9zaG9ydG5hbWUxID0gJ0EnOworc3RhdGljIGNoYXIgbmV4dF9zaG9ydG5hbWUyID0gJzAnOworCitzdGF0aWMgdm9pZAorbWFwX3N3aXRjaF9ldmVudChzdHJ1Y3QgdHJhY2Vfc3dpdGNoX2V2ZW50ICpzd2l0Y2hfZXZlbnQsCisJCSBzdHJ1Y3QgZXZlbnQgKmV2ZW50IF9fdXNlZCwKKwkJIGludCB0aGlzX2NwdSwKKwkJIHU2NCB0aW1lc3RhbXAsCisJCSBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB0aHJlYWQgKnNjaGVkX291dCwgKnNjaGVkX2luOworCWludCBuZXdfc2hvcnRuYW1lOworCXU2NCB0aW1lc3RhbXAwOworCXM2NCBkZWx0YTsKKwlpbnQgY3B1OworCisJQlVHX09OKHRoaXNfY3B1ID49IE1BWF9DUFVTIHx8IHRoaXNfY3B1IDwgMCk7CisKKwlpZiAodGhpc19jcHUgPiBtYXhfY3B1KQorCQltYXhfY3B1ID0gdGhpc19jcHU7CisKKwl0aW1lc3RhbXAwID0gY3B1X2xhc3Rfc3dpdGNoZWRbdGhpc19jcHVdOworCWNwdV9sYXN0X3N3aXRjaGVkW3RoaXNfY3B1XSA9IHRpbWVzdGFtcDsKKwlpZiAodGltZXN0YW1wMCkKKwkJZGVsdGEgPSB0aW1lc3RhbXAgLSB0aW1lc3RhbXAwOworCWVsc2UKKwkJZGVsdGEgPSAwOworCisJaWYgKGRlbHRhIDwgMCkKKwkJZGllKCJobSwgZGVsdGE6ICVMZCA8IDAgP1xuIiwgZGVsdGEpOworCisKKwlzY2hlZF9vdXQgPSB0aHJlYWRzX19maW5kbmV3KHN3aXRjaF9ldmVudC0+cHJldl9waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJc2NoZWRfaW4gPSB0aHJlYWRzX19maW5kbmV3KHN3aXRjaF9ldmVudC0+bmV4dF9waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisKKwljdXJyX3RocmVhZFt0aGlzX2NwdV0gPSBzY2hlZF9pbjsKKworCXByaW50ZigiICAiKTsKKworCW5ld19zaG9ydG5hbWUgPSAwOworCWlmICghc2NoZWRfaW4tPnNob3J0bmFtZVswXSkgeworCQlzY2hlZF9pbi0+c2hvcnRuYW1lWzBdID0gbmV4dF9zaG9ydG5hbWUxOworCQlzY2hlZF9pbi0+c2hvcnRuYW1lWzFdID0gbmV4dF9zaG9ydG5hbWUyOworCisJCWlmIChuZXh0X3Nob3J0bmFtZTEgPCAnWicpIHsKKwkJCW5leHRfc2hvcnRuYW1lMSsrOworCQl9IGVsc2UgeworCQkJbmV4dF9zaG9ydG5hbWUxPSdBJzsKKwkJCWlmIChuZXh0X3Nob3J0bmFtZTIgPCAnOScpIHsKKwkJCQluZXh0X3Nob3J0bmFtZTIrKzsKKwkJCX0gZWxzZSB7CisJCQkJbmV4dF9zaG9ydG5hbWUyPScwJzsKKwkJCX0KKwkJfQorCQluZXdfc2hvcnRuYW1lID0gMTsKKwl9CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8PSBtYXhfY3B1OyBjcHUrKykgeworCQlpZiAoY3B1ICE9IHRoaXNfY3B1KQorCQkJcHJpbnRmKCIgIik7CisJCWVsc2UKKwkJCXByaW50ZigiKiIpOworCisJCWlmIChjdXJyX3RocmVhZFtjcHVdKSB7CisJCQlpZiAoY3Vycl90aHJlYWRbY3B1XS0+cGlkKQorCQkJCXByaW50ZigiJTJzICIsIGN1cnJfdGhyZWFkW2NwdV0tPnNob3J0bmFtZSk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIuICAiKTsKKwkJfSBlbHNlCisJCQlwcmludGYoIiAgICIpOworCX0KKworCXByaW50ZigiICAlMTIuNmYgc2VjcyAiLCAoZG91YmxlKXRpbWVzdGFtcC8xZTkpOworCWlmIChuZXdfc2hvcnRuYW1lKSB7CisJCXByaW50ZigiJXMgPT4gJXM6JWRcbiIsCisJCQlzY2hlZF9pbi0+c2hvcnRuYW1lLCBzY2hlZF9pbi0+Y29tbSwgc2NoZWRfaW4tPnBpZCk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorcHJvY2Vzc19zY2hlZF9zd2l0Y2hfZXZlbnQoc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdywKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQsCisJCQkgICBpbnQgdGhpc19jcHUsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX3N3aXRjaF9ldmVudCBzd2l0Y2hfZXZlbnQ7CisKKwlGSUxMX0NPTU1PTl9GSUVMRFMoc3dpdGNoX2V2ZW50LCBldmVudCwgcmF3LT5kYXRhKTsKKworCUZJTExfQVJSQVkoc3dpdGNoX2V2ZW50LCBwcmV2X2NvbW0sIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQoc3dpdGNoX2V2ZW50LCBwcmV2X3BpZCwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIHByZXZfcHJpbywgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIHByZXZfc3RhdGUsIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfQVJSQVkoc3dpdGNoX2V2ZW50LCBuZXh0X2NvbW0sIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQoc3dpdGNoX2V2ZW50LCBuZXh0X3BpZCwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIG5leHRfcHJpbywgZXZlbnQsIHJhdy0+ZGF0YSk7CisKKwlpZiAoY3Vycl9waWRbdGhpc19jcHVdICE9ICh1MzIpLTEpIHsKKwkJLyoKKwkJICogQXJlIHdlIHRyeWluZyB0byBzd2l0Y2ggYXdheSBhIFBJRCB0aGF0IGlzCisJCSAqIG5vdCBjdXJyZW50PworCQkgKi8KKwkJaWYgKGN1cnJfcGlkW3RoaXNfY3B1XSAhPSBzd2l0Y2hfZXZlbnQucHJldl9waWQpCisJCQlucl9jb250ZXh0X3N3aXRjaF9idWdzKys7CisJfQorCWlmICh0cmFjZV9oYW5kbGVyLT5zd2l0Y2hfZXZlbnQpCisJCXRyYWNlX2hhbmRsZXItPnN3aXRjaF9ldmVudCgmc3dpdGNoX2V2ZW50LCBldmVudCwgdGhpc19jcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKworCWN1cnJfcGlkW3RoaXNfY3B1XSA9IHN3aXRjaF9ldmVudC5uZXh0X3BpZDsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nfc2NoZWRfcnVudGltZV9ldmVudChzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3LAorCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCSAgIGludCBjcHUgX191c2VkLAorCQkJICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB0cmFjZV9ydW50aW1lX2V2ZW50IHJ1bnRpbWVfZXZlbnQ7CisKKwlGSUxMX0FSUkFZKHJ1bnRpbWVfZXZlbnQsIGNvbW0sIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQocnVudGltZV9ldmVudCwgcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKHJ1bnRpbWVfZXZlbnQsIHJ1bnRpbWUsIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQocnVudGltZV9ldmVudCwgdnJ1bnRpbWUsIGV2ZW50LCByYXctPmRhdGEpOworCisJaWYgKHRyYWNlX2hhbmRsZXItPnJ1bnRpbWVfZXZlbnQpCisJCXRyYWNlX2hhbmRsZXItPnJ1bnRpbWVfZXZlbnQoJnJ1bnRpbWVfZXZlbnQsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nfc2NoZWRfZm9ya19ldmVudChzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3LAorCQkJIHN0cnVjdCBldmVudCAqZXZlbnQsCisJCQkgaW50IGNwdSBfX3VzZWQsCisJCQkgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfZm9ya19ldmVudCBmb3JrX2V2ZW50OworCisJRklMTF9DT01NT05fRklFTERTKGZvcmtfZXZlbnQsIGV2ZW50LCByYXctPmRhdGEpOworCisJRklMTF9BUlJBWShmb3JrX2V2ZW50LCBwYXJlbnRfY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChmb3JrX2V2ZW50LCBwYXJlbnRfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0FSUkFZKGZvcmtfZXZlbnQsIGNoaWxkX2NvbW0sIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQoZm9ya19ldmVudCwgY2hpbGRfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5mb3JrX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5mb3JrX2V2ZW50KCZmb3JrX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX3NjaGVkX2V4aXRfZXZlbnQoc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCSBpbnQgY3B1IF9fdXNlZCwKKwkJCSB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCWlmICh2ZXJib3NlKQorCQlwcmludGYoInNjaGVkX2V4aXQgZXZlbnQgJXBcbiIsIGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3NfcmF3X2V2ZW50KGV2ZW50X3QgKnJhd19ldmVudCBfX3VzZWQsIHZvaWQgKm1vcmVfZGF0YSwKKwkJICBpbnQgY3B1LCB1NjQgdGltZXN0YW1wLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdyA9IG1vcmVfZGF0YTsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCWludCB0eXBlOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKHJhdy0+ZGF0YSk7CisJZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOworCisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF9zd2l0Y2giKSkKKwkJcHJvY2Vzc19zY2hlZF9zd2l0Y2hfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF9zdGF0X3J1bnRpbWUiKSkKKwkJcHJvY2Vzc19zY2hlZF9ydW50aW1lX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAic2NoZWRfd2FrZXVwIikpCisJCXByb2Nlc3Nfc2NoZWRfd2FrZXVwX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAic2NoZWRfd2FrZXVwX25ldyIpKQorCQlwcm9jZXNzX3NjaGVkX3dha2V1cF9ldmVudChyYXcsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgInNjaGVkX3Byb2Nlc3NfZm9yayIpKQorCQlwcm9jZXNzX3NjaGVkX2ZvcmtfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF9wcm9jZXNzX2V4aXQiKSkKKwkJcHJvY2Vzc19zY2hlZF9leGl0X2V2ZW50KGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCit7CisJY2hhciBsZXZlbDsKKwlpbnQgc2hvdyA9IDA7CisJc3RydWN0IGRzbyAqZHNvID0gTlVMTDsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJdTY0IGlwID0gZXZlbnQtPmlwLmlwOworCXU2NCB0aW1lc3RhbXAgPSAtMTsKKwl1MzIgY3B1ID0gLTE7CisJdTY0IHBlcmlvZCA9IDE7CisJdm9pZCAqbW9yZV9kYXRhID0gZXZlbnQtPmlwLl9fbW9yZV9kYXRhOworCWludCBjcHVtb2RlOworCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgeworCQl0aW1lc3RhbXAgPSAqKHU2NCAqKW1vcmVfZGF0YTsKKwkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkgeworCQljcHUgPSAqKHUzMiAqKW1vcmVfZGF0YTsKKwkJbW9yZV9kYXRhICs9IHNpemVvZih1MzIpOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHUzMik7IC8qIHJlc2VydmVkICovCisJfQorCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKSB7CisJCXBlcmlvZCA9ICoodTY0ICopbW9yZV9kYXRhOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7CisJfQorCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX1NBTVBMRSAoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAorCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKKwkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKKwkJZXZlbnQtPmhlYWRlci5taXNjLAorCQlldmVudC0+aXAucGlkLCBldmVudC0+aXAudGlkLAorCQkodm9pZCAqKShsb25nKWlwLAorCQkobG9uZyBsb25nKXBlcmlvZCk7CisKKwlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKKworCWlmICh0aHJlYWQgPT0gTlVMTCkgeworCQllcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CisKKwlpZiAoY3B1bW9kZSA9PSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkgeworCQlzaG93ID0gU0hPV19LRVJORUw7CisJCWxldmVsID0gJ2snOworCisJCWRzbyA9IGtlcm5lbF9kc287CisKKwkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvLT5uYW1lKTsKKworCX0gZWxzZSBpZiAoY3B1bW9kZSA9PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpIHsKKworCQlzaG93ID0gU0hPV19VU0VSOworCQlsZXZlbCA9ICcuJzsKKworCX0gZWxzZSB7CisJCXNob3cgPSBTSE9XX0hWOworCQlsZXZlbCA9ICdIJzsKKworCQlkc28gPSBoeXBlcnZpc29yX2RzbzsKKworCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286IFtoeXBlcnZpc29yXVxuIik7CisJfQorCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKQorCQlwcm9jZXNzX3Jhd19ldmVudChldmVudCwgbW9yZV9kYXRhLCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQoreworCXRyYWNlX2V2ZW50KGV2ZW50KTsKKworCW5yX2V2ZW50cysrOworCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7CisJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgorCQlyZXR1cm4gMDsKKwljYXNlIFBFUkZfUkVDT1JEX0xPU1Q6CisJCW5yX2xvc3RfY2h1bmtzKys7CisJCW5yX2xvc3RfZXZlbnRzICs9IGV2ZW50LT5sb3N0Lmxvc3Q7CisJCXJldHVybiAwOworCisJY2FzZSBQRVJGX1JFQ09SRF9DT01NOgorCQlyZXR1cm4gcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOworCisJY2FzZSBQRVJGX1JFQ09SRF9FWElUIC4uLiBQRVJGX1JFQ09SRF9SRUFEOgorCQlyZXR1cm4gMDsKKworCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgorCQlyZXR1cm4gcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CisKKwljYXNlIFBFUkZfUkVDT1JEX01BWDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKK3sKKwlpbnQgcmV0LCByYyA9IEVYSVRfRkFJTFVSRTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisJdW5zaWduZWQgbG9uZyBoZWFkID0gMDsKKwlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CisJZXZlbnRfdCAqZXZlbnQ7CisJdWludDMyX3Qgc2l6ZTsKKwljaGFyICpidWY7CisKKwl0cmFjZV9yZXBvcnQoKTsKKwlyZWdpc3Rlcl9pZGxlX3RocmVhZCgmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCisJaW5wdXQgPSBvcGVuKGlucHV0X25hbWUsIE9fUkRPTkxZKTsKKwlpZiAoaW5wdXQgPCAwKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIG9wZW4gZmlsZSIpOworCQlleGl0KC0xKTsKKwl9CisKKwlyZXQgPSBmc3RhdChpbnB1dCwgJnBlcmZfc3RhdCk7CisJaWYgKHJldCA8IDApIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7CisJCWV4aXQoLTEpOworCX0KKworCWlmICghcGVyZl9zdGF0LnN0X3NpemUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKKwkJZXhpdCgwKTsKKwl9CisJaGVhZGVyID0gcGVyZl9oZWFkZXJfX3JlYWQoaW5wdXQpOworCWhlYWQgPSBoZWFkZXItPmRhdGFfb2Zmc2V0OworCXNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKGhlYWRlcik7CisKKwlpZiAoIShzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpCisJCWRpZSgiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCAiCisJCSAgICAid2l0aG91dCAtUj8iKTsKKworCWlmIChsb2FkX2tlcm5lbCgpIDwgMCkgeworCQlwZXJyb3IoImZhaWxlZCB0byBsb2FkIGtlcm5lbCBzeW1ib2xzIik7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCityZW1hcDoKKwlidWYgPSAoY2hhciAqKW1tYXAoTlVMTCwgcGFnZV9zaXplICogbW1hcF93aW5kb3csIFBST1RfUkVBRCwKKwkJCSAgIE1BUF9TSEFSRUQsIGlucHV0LCBvZmZzZXQpOworCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgeworCQlwZXJyb3IoImZhaWxlZCB0byBtbWFwIGZpbGUiKTsKKwkJZXhpdCgtMSk7CisJfQorCittb3JlOgorCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7CisKKwlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOworCWlmICghc2l6ZSkKKwkJc2l6ZSA9IDg7CisKKwlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgeworCQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOworCQlpbnQgcmVzOworCisJCXJlcyA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KTsKKwkJYXNzZXJ0KHJlcyA9PSAwKTsKKworCQlvZmZzZXQgKz0gc2hpZnQ7CisJCWhlYWQgLT0gc2hpZnQ7CisJCWdvdG8gcmVtYXA7CisJfQorCisJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKKworCisJaWYgKCFzaXplIHx8IHByb2Nlc3NfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCkgPCAwKSB7CisKKwkJLyoKKwkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKKwkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCisJCSAqLworCisJCWlmICh1bmxpa2VseShoZWFkICYgNykpCisJCQloZWFkICY9IH43VUxMOworCisJCXNpemUgPSA4OworCX0KKworCWhlYWQgKz0gc2l6ZTsKKworCWlmIChvZmZzZXQgKyBoZWFkIDwgKHVuc2lnbmVkIGxvbmcpcGVyZl9zdGF0LnN0X3NpemUpCisJCWdvdG8gbW9yZTsKKworCXJjID0gRVhJVF9TVUNDRVNTOworCWNsb3NlKGlucHV0KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYmFkX2V2ZW50cyh2b2lkKQoreworCWlmIChucl91bm9yZGVyZWRfdGltZXN0YW1wcyAmJiBucl90aW1lc3RhbXBzKSB7CisJCXByaW50ZigiICBJTkZPOiAlLjNmJSUgdW5vcmRlcmVkIHRpbWVzdGFtcHMgKCVsZCBvdXQgb2YgJWxkKVxuIiwKKwkJCShkb3VibGUpbnJfdW5vcmRlcmVkX3RpbWVzdGFtcHMvKGRvdWJsZSlucl90aW1lc3RhbXBzKjEwMC4wLAorCQkJbnJfdW5vcmRlcmVkX3RpbWVzdGFtcHMsIG5yX3RpbWVzdGFtcHMpOworCX0KKwlpZiAobnJfbG9zdF9ldmVudHMgJiYgbnJfZXZlbnRzKSB7CisJCXByaW50ZigiICBJTkZPOiAlLjNmJSUgbG9zdCBldmVudHMgKCVsZCBvdXQgb2YgJWxkLCBpbiAlbGQgY2h1bmtzKVxuIiwKKwkJCShkb3VibGUpbnJfbG9zdF9ldmVudHMvKGRvdWJsZSlucl9ldmVudHMqMTAwLjAsCisJCQlucl9sb3N0X2V2ZW50cywgbnJfZXZlbnRzLCBucl9sb3N0X2NodW5rcyk7CisJfQorCWlmIChucl9zdGF0ZV9tYWNoaW5lX2J1Z3MgJiYgbnJfdGltZXN0YW1wcykgeworCQlwcmludGYoIiAgSU5GTzogJS4zZiUlIHN0YXRlIG1hY2hpbmUgYnVncyAoJWxkIG91dCBvZiAlbGQpIiwKKwkJCShkb3VibGUpbnJfc3RhdGVfbWFjaGluZV9idWdzLyhkb3VibGUpbnJfdGltZXN0YW1wcyoxMDAuMCwKKwkJCW5yX3N0YXRlX21hY2hpbmVfYnVncywgbnJfdGltZXN0YW1wcyk7CisJCWlmIChucl9sb3N0X2V2ZW50cykKKwkJCXByaW50ZigiIChkdWUgdG8gbG9zdCBldmVudHM/KSIpOworCQlwcmludGYoIlxuIik7CisJfQorCWlmIChucl9jb250ZXh0X3N3aXRjaF9idWdzICYmIG5yX3RpbWVzdGFtcHMpIHsKKwkJcHJpbnRmKCIgIElORk86ICUuM2YlJSBjb250ZXh0IHN3aXRjaCBidWdzICglbGQgb3V0IG9mICVsZCkiLAorCQkJKGRvdWJsZSlucl9jb250ZXh0X3N3aXRjaF9idWdzLyhkb3VibGUpbnJfdGltZXN0YW1wcyoxMDAuMCwKKwkJCW5yX2NvbnRleHRfc3dpdGNoX2J1Z3MsIG5yX3RpbWVzdGFtcHMpOworCQlpZiAobnJfbG9zdF9ldmVudHMpCisJCQlwcmludGYoIiAoZHVlIHRvIGxvc3QgZXZlbnRzPykiKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgX19jbWRfbGF0KHZvaWQpCit7CisJc3RydWN0IHJiX25vZGUgKm5leHQ7CisKKwlzZXR1cF9wYWdlcigpOworCXJlYWRfZXZlbnRzKCk7CisJc29ydF9sYXQoKTsKKworCXByaW50ZigiXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50ZigiICBUYXNrICAgICAgICAgICAgICAgICAgfCAgIFJ1bnRpbWUgbXMgIHwgU3dpdGNoZXMgfCBBdmVyYWdlIGRlbGF5IG1zIHwgTWF4aW11bSBkZWxheSBtcyB8XG4iKTsKKwlwcmludGYoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwluZXh0ID0gcmJfZmlyc3QoJnNvcnRlZF9hdG9tX3Jvb3QpOworCisJd2hpbGUgKG5leHQpIHsKKwkJc3RydWN0IHdvcmtfYXRvbXMgKndvcmtfbGlzdDsKKworCQl3b3JrX2xpc3QgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3Qgd29ya19hdG9tcywgbm9kZSk7CisJCW91dHB1dF9sYXRfdGhyZWFkKHdvcmtfbGlzdCk7CisJCW5leHQgPSByYl9uZXh0KG5leHQpOworCX0KKworCXByaW50ZigiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGYoIiAgVE9UQUw6ICAgICAgICAgICAgICAgIHwlMTEuM2YgbXMgfCU5TGQgfFxuIiwKKwkJKGRvdWJsZSlhbGxfcnVudGltZS8xZTYsIGFsbF9jb3VudCk7CisKKwlwcmludGYoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisJcHJpbnRfYmFkX2V2ZW50cygpOworCXByaW50ZigiXG4iKTsKKworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX3NjaGVkX2hhbmRsZXIgbWFwX29wcyAgPSB7CisJLndha2V1cF9ldmVudAkJPSBOVUxMLAorCS5zd2l0Y2hfZXZlbnQJCT0gbWFwX3N3aXRjaF9ldmVudCwKKwkucnVudGltZV9ldmVudAkJPSBOVUxMLAorCS5mb3JrX2V2ZW50CQk9IE5VTEwsCit9OworCitzdGF0aWMgdm9pZCBfX2NtZF9tYXAodm9pZCkKK3sKKwltYXhfY3B1ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfQ09ORik7CisKKwlzZXR1cF9wYWdlcigpOworCXJlYWRfZXZlbnRzKCk7CisJcHJpbnRfYmFkX2V2ZW50cygpOworfQorCitzdGF0aWMgdm9pZCBfX2NtZF9yZXBsYXkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwljYWxpYnJhdGVfcnVuX21lYXN1cmVtZW50X292ZXJoZWFkKCk7CisJY2FsaWJyYXRlX3NsZWVwX21lYXN1cmVtZW50X292ZXJoZWFkKCk7CisKKwl0ZXN0X2NhbGlicmF0aW9ucygpOworCisJcmVhZF9ldmVudHMoKTsKKworCXByaW50ZigibnJfcnVuX2V2ZW50czogICAgICAgICVsZFxuIiwgbnJfcnVuX2V2ZW50cyk7CisJcHJpbnRmKCJucl9zbGVlcF9ldmVudHM6ICAgICAgJWxkXG4iLCBucl9zbGVlcF9ldmVudHMpOworCXByaW50ZigibnJfd2FrZXVwX2V2ZW50czogICAgICVsZFxuIiwgbnJfd2FrZXVwX2V2ZW50cyk7CisKKwlpZiAodGFyZ2V0bGVzc193YWtldXBzKQorCQlwcmludGYoInRhcmdldC1sZXNzIHdha2V1cHM6ICAlbGRcbiIsIHRhcmdldGxlc3Nfd2FrZXVwcyk7CisJaWYgKG11bHRpdGFyZ2V0X3dha2V1cHMpCisJCXByaW50ZigibXVsdGktdGFyZ2V0IHdha2V1cHM6ICVsZFxuIiwgbXVsdGl0YXJnZXRfd2FrZXVwcyk7CisJaWYgKG5yX3J1bl9ldmVudHNfb3B0aW1pemVkKQorCQlwcmludGYoInJ1biBhdG9tcyBvcHRpbWl6ZWQ6ICVsZFxuIiwKKwkJCW5yX3J1bl9ldmVudHNfb3B0aW1pemVkKTsKKworCXByaW50X3Rhc2tfdHJhY2VzKCk7CisJYWRkX2Nyb3NzX3Rhc2tfd2FrZXVwcygpOworCisJY3JlYXRlX3Rhc2tzKCk7CisJcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCWZvciAoaSA9IDA7IGkgPCByZXBsYXlfcmVwZWF0OyBpKyspCisJCXJ1bl9vbmVfdGVzdCgpOworfQorCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2NoZWRfdXNhZ2VbXSA9IHsKKwkicGVyZiBzY2hlZCBbPG9wdGlvbnM+XSB7cmVjb3JkfGxhdGVuY3l8bWFwfHJlcGxheXx0cmFjZX0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIHNjaGVkX29wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKKwkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCisJCSAgICAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCisJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwKKwkJICAgICJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSSIpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsYXRlbmN5X3VzYWdlW10gPSB7CisJInBlcmYgc2NoZWQgbGF0ZW5jeSBbPG9wdGlvbnM+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbGF0ZW5jeV9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKKwkJICAgInNvcnQgYnkga2V5KHMpOiBydW50aW1lLCBzd2l0Y2gsIGF2ZywgbWF4IiksCisJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAorCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKSIpLAorCU9QVF9CT09MRUFOKCdEJywgImR1bXAtcmF3LXRyYWNlIiwgJmR1bXBfdHJhY2UsCisJCSAgICAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVwbGF5X3VzYWdlW10gPSB7CisJInBlcmYgc2NoZWQgcmVwbGF5IFs8b3B0aW9ucz5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiByZXBsYXlfb3B0aW9uc1tdID0geworCU9QVF9JTlRFR0VSKCdyJywgInJlcGVhdCIsICZyZXBsYXlfcmVwZWF0LAorCQkgICAgInJlcGVhdCB0aGUgd29ya2xvYWQgcmVwbGF5IE4gdGltZXMgKC0xOiBpbmZpbml0ZSkiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCisJCSAgICAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCisJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwKKwkJICAgICJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSSIpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgc2V0dXBfc29ydGluZyh2b2lkKQoreworCWNoYXIgKnRtcCwgKnRvaywgKnN0ciA9IHN0cmR1cChzb3J0X29yZGVyKTsKKworCWZvciAodG9rID0gc3RydG9rX3Ioc3RyLCAiLCAiLCAmdG1wKTsKKwkJCXRvazsgdG9rID0gc3RydG9rX3IoTlVMTCwgIiwgIiwgJnRtcCkpIHsKKwkJaWYgKHNvcnRfZGltZW5zaW9uX19hZGQodG9rLCAmc29ydF9saXN0KSA8IDApIHsKKwkJCWVycm9yKCJVbmtub3duIC0tc29ydCBrZXk6IGAlcyciLCB0b2spOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxhdGVuY3lfdXNhZ2UsIGxhdGVuY3lfb3B0aW9ucyk7CisJCX0KKwl9CisKKwlmcmVlKHN0cik7CisKKwlzb3J0X2RpbWVuc2lvbl9fYWRkKChjaGFyICopInBpZCIsICZjbXBfcGlkKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlY29yZF9hcmdzW10gPSB7CisJInJlY29yZCIsCisJIi1hIiwKKwkiLVIiLAorCSItTSIsCisJIi1mIiwKKwkiLW0iLCAiMTAyNCIsCisJIi1jIiwgIjEiLAorCSItZSIsICJzY2hlZDpzY2hlZF9zd2l0Y2g6ciIsCisJIi1lIiwgInNjaGVkOnNjaGVkX3N0YXRfd2FpdDpyIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfc3RhdF9zbGVlcDpyIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfc3RhdF9pb3dhaXQ6ciIsCisJIi1lIiwgInNjaGVkOnNjaGVkX3N0YXRfcnVudGltZTpyIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfcHJvY2Vzc19leGl0OnIiLAorCSItZSIsICJzY2hlZDpzY2hlZF9wcm9jZXNzX2Zvcms6ciIsCisJIi1lIiwgInNjaGVkOnNjaGVkX3dha2V1cDpyIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfbWlncmF0ZV90YXNrOnIiLAorfTsKKworc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCByZWNfYXJnYywgaSwgajsKKwljb25zdCBjaGFyICoqcmVjX2FyZ3Y7CisKKwlyZWNfYXJnYyA9IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpICsgYXJnYyAtIDE7CisJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBzdHJkdXAocmVjb3JkX2FyZ3NbaV0pOworCisJZm9yIChqID0gMTsgaiA8ICh1bnNpZ25lZCBpbnQpYXJnYzsgaisrLCBpKyspCisJCXJlY19hcmd2W2ldID0gYXJndltqXTsKKworCUJVR19PTihpICE9IHJlY19hcmdjKTsKKworCXJldHVybiBjbWRfcmVjb3JkKGksIHJlY19hcmd2LCBOVUxMKTsKK30KKworaW50IGNtZF9zY2hlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJc3ltYm9sX19pbml0KCk7CisJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHNjaGVkX29wdGlvbnMsIHNjaGVkX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlpZiAoIWFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzY2hlZF91c2FnZSwgc2NoZWRfb3B0aW9ucyk7CisKKwlpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKSB7CisJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJfSBlbHNlIGlmICghc3RybmNtcChhcmd2WzBdLCAibGF0IiwgMykpIHsKKwkJdHJhY2VfaGFuZGxlciA9ICZsYXRfb3BzOworCQlpZiAoYXJnYyA+IDEpIHsKKwkJCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGxhdGVuY3lfb3B0aW9ucywgbGF0ZW5jeV91c2FnZSwgMCk7CisJCQlpZiAoYXJnYykKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMobGF0ZW5jeV91c2FnZSwgbGF0ZW5jeV9vcHRpb25zKTsKKwkJfQorCQlzZXR1cF9zb3J0aW5nKCk7CisJCV9fY21kX2xhdCgpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAibWFwIikpIHsKKwkJdHJhY2VfaGFuZGxlciA9ICZtYXBfb3BzOworCQlzZXR1cF9zb3J0aW5nKCk7CisJCV9fY21kX21hcCgpOworCX0gZWxzZSBpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlcCIsIDMpKSB7CisJCXRyYWNlX2hhbmRsZXIgPSAmcmVwbGF5X29wczsKKwkJaWYgKGFyZ2MpIHsKKwkJCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHJlcGxheV9vcHRpb25zLCByZXBsYXlfdXNhZ2UsIDApOworCQkJaWYgKGFyZ2MpCisJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlcGxheV91c2FnZSwgcmVwbGF5X29wdGlvbnMpOworCQl9CisJCV9fY21kX3JlcGxheSgpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidHJhY2UiKSkgeworCQkvKgorCQkgKiBBbGlhc2VkIHRvICdwZXJmIHRyYWNlJyBmb3Igbm93OgorCQkgKi8KKwkJcmV0dXJuIGNtZF90cmFjZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCX0gZWxzZSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzY2hlZF91c2FnZSwgc2NoZWRfb3B0aW9ucyk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCA2MWI4MjgyLi4xNmFmMmQ4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgZGVmYXVsdF9hdHRyc1tdID0geworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgZGVmYXVsdF9hdHRyc1tdID0gewogCiAgIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJfSwKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfQ09OVEVYVF9TV0lUQ0hFU30sCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogCSBhdHRyc1tjb3VudGVyXS5jb25maWcgPT0gUEVSRl9DT1VOVF8jI2MpCiAKICNkZWZpbmUgRVJSX1BFUkZfT1BFTiBcCi0iRXJyb3I6IGNvdW50ZXIgJWQsIHN5c19wZXJmX2NvdW50ZXJfb3BlbigpIHN5c2NhbGwgcmV0dXJuZWQgd2l0aCAlZCAoJXMpXG4iCisiRXJyb3I6IGNvdW50ZXIgJWQsIHN5c19wZXJmX2V2ZW50X29wZW4oKSBzeXNjYWxsIHJldHVybmVkIHdpdGggJWQgKCVzKVxuIgogCiBzdGF0aWMgdm9pZCBjcmVhdGVfcGVyZl9zdGF0X2NvdW50ZXIoaW50IGNvdW50ZXIsIGludCBwaWQpCiB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyID0gYXR0cnMgKyBjb3VudGVyOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSBhdHRycyArIGNvdW50ZXI7CiAKIAlpZiAoc2NhbGUpCiAJCWF0dHItPnJlYWRfZm9ybWF0ID0gUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEIHwKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQl1bnNpZ25lZCBpbnQgY3B1OwogCiAJCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1czsgY3B1KyspIHsKLQkJCWZkW2NwdV1bY291bnRlcl0gPSBzeXNfcGVyZl9jb3VudGVyX29wZW4oYXR0ciwgLTEsIGNwdSwgLTEsIDApOworCQkJZmRbY3B1XVtjb3VudGVyXSA9IHN5c19wZXJmX2V2ZW50X29wZW4oYXR0ciwgLTEsIGNwdSwgLTEsIDApOwogCQkJaWYgKGZkW2NwdV1bY291bnRlcl0gPCAwICYmIHZlcmJvc2UpCiAJCQkJZnByaW50ZihzdGRlcnIsIEVSUl9QRVJGX09QRU4sIGNvdW50ZXIsCiAJCQkJCWZkW2NwdV1bY291bnRlcl0sIHN0cmVycm9yKGVycm5vKSk7CkBAIC0xNTQsNyArMTU0LDcgQEAKIAkJYXR0ci0+ZGlzYWJsZWQJICAgICA9IDE7CiAJCWF0dHItPmVuYWJsZV9vbl9leGVjID0gMTsKIAotCQlmZFswXVtjb3VudGVyXSA9IHN5c19wZXJmX2NvdW50ZXJfb3BlbihhdHRyLCBwaWQsIC0xLCAtMSwgMCk7CisJCWZkWzBdW2NvdW50ZXJdID0gc3lzX3BlcmZfZXZlbnRfb3BlbihhdHRyLCBwaWQsIC0xLCAtMSwgMCk7CiAJCWlmIChmZFswXVtjb3VudGVyXSA8IDAgJiYgdmVyYm9zZSkKIAkJCWZwcmludGYoc3RkZXJyLCBFUlJfUEVSRl9PUEVOLCBjb3VudGVyLAogCQkJCWZkWzBdW2NvdW50ZXJdLCBzdHJlcnJvcihlcnJubykpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MDU2ODEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTAsMCArMSwxMTU4IEBACisvKgorICogYnVpbHRpbi10aW1lY2hhcnQuYyAtIG1ha2UgYW4gc3ZnIHRpbWVjaGFydCBvZiBzeXN0ZW0gYWN0aXZpdHkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogICAgIEFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorCisjaW5jbHVkZSAidXRpbC9jb2xvci5oIgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlICJ1dGlsL2NhY2hlLmgiCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKyNpbmNsdWRlICJ1dGlsL3N0cmluZy5oIgorI2luY2x1ZGUgInV0aWwvY2FsbGNoYWluLmgiCisjaW5jbHVkZSAidXRpbC9zdHJsaXN0LmgiCisKKyNpbmNsdWRlICJwZXJmLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgorI2luY2x1ZGUgInV0aWwvc3ZnaGVscGVyLmgiCisKK3N0YXRpYyBjaGFyCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOworc3RhdGljIGNoYXIJCWNvbnN0ICpvdXRwdXRfbmFtZSA9ICJvdXRwdXQuc3ZnIjsKKworCitzdGF0aWMgdW5zaWduZWQgbG9uZwlwYWdlX3NpemU7CitzdGF0aWMgdW5zaWduZWQgbG9uZwltbWFwX3dpbmRvdyA9IDMyOworc3RhdGljIHU2NAkJc2FtcGxlX3R5cGU7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQJbnVtY3B1czsKK3N0YXRpYyB1NjQJCW1pbl9mcmVxOwkvKiBMb3dlc3QgQ1BVIGZyZXF1ZW5jeSBzZWVuICovCitzdGF0aWMgdTY0CQltYXhfZnJlcTsJLyogSGlnaGVzdCBDUFUgZnJlcXVlbmN5IHNlZW4gKi8KK3N0YXRpYyB1NjQJCXR1cmJvX2ZyZXF1ZW5jeTsKKworc3RhdGljIHU2NAkJZmlyc3RfdGltZSwgbGFzdF90aW1lOworCisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIJKmhlYWRlcjsKKworc3RydWN0IHBlcl9waWQ7CitzdHJ1Y3QgcGVyX3BpZGNvbW07CisKK3N0cnVjdCBjcHVfc2FtcGxlOworc3RydWN0IHBvd2VyX2V2ZW50Oworc3RydWN0IHdha2VfZXZlbnQ7CisKK3N0cnVjdCBzYW1wbGVfd3JhcHBlcjsKKworLyoKKyAqIERhdGFzdHJ1Y3R1cmUgbGF5b3V0OgorICogV2Uga2VlcCBhbiBsaXN0IG9mICJwaWQicywgbWF0Y2hpbmcgdGhlIGtlcm5lbHMgbm90aW9uIG9mIGEgdGFzayBzdHJ1Y3QuCisgKiBFYWNoICJwaWQiIGVudHJ5LCBoYXMgYSBsaXN0IG9mICJjb21tInMuCisgKgl0aGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0byB0cmFjayBkaWZmZXJlbnQgcHJvZ3JhbXMgZGlmZmVyZW50LCB3aGlsZQorICoJZXhlYyB3aWxsIHJldXNlIHRoZSBvcmlnaW5hbCBwaWQgKGJ5IGRlc2lnbikuCisgKiBFYWNoIGNvbW0gaGFzIGEgbGlzdCBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRyYXcKKyAqIGZpbmFsIGdyYXBoLgorICovCisKK3N0cnVjdCBwZXJfcGlkIHsKKwlzdHJ1Y3QgcGVyX3BpZCAqbmV4dDsKKworCWludAkJcGlkOworCWludAkJcHBpZDsKKworCXU2NAkJc3RhcnRfdGltZTsKKwl1NjQJCWVuZF90aW1lOworCXU2NAkJdG90YWxfdGltZTsKKwlpbnQJCWRpc3BsYXk7CisKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmFsbDsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmN1cnJlbnQ7CisKKwlpbnQgcGFpbnRlZDsKK307CisKKworc3RydWN0IHBlcl9waWRjb21tIHsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKm5leHQ7CisKKwl1NjQJCXN0YXJ0X3RpbWU7CisJdTY0CQllbmRfdGltZTsKKwl1NjQJCXRvdGFsX3RpbWU7CisKKwlpbnQJCVk7CisJaW50CQlkaXNwbGF5OworCisJbG9uZwkJc3RhdGU7CisJdTY0CQlzdGF0ZV9zaW5jZTsKKworCWNoYXIJCSpjb21tOworCisJc3RydWN0IGNwdV9zYW1wbGUgKnNhbXBsZXM7Cit9OworCitzdHJ1Y3Qgc2FtcGxlX3dyYXBwZXIgeworCXN0cnVjdCBzYW1wbGVfd3JhcHBlciAqbmV4dDsKKworCXU2NAkJdGltZXN0YW1wOworCXVuc2lnbmVkIGNoYXIJZGF0YVswXTsKK307CisKKyNkZWZpbmUgVFlQRV9OT05FCTAKKyNkZWZpbmUgVFlQRV9SVU5OSU5HCTEKKyNkZWZpbmUgVFlQRV9XQUlUSU5HCTIKKyNkZWZpbmUgVFlQRV9CTE9DS0VECTMKKworc3RydWN0IGNwdV9zYW1wbGUgeworCXN0cnVjdCBjcHVfc2FtcGxlICpuZXh0OworCisJdTY0IHN0YXJ0X3RpbWU7CisJdTY0IGVuZF90aW1lOworCWludCB0eXBlOworCWludCBjcHU7Cit9OworCitzdGF0aWMgc3RydWN0IHBlcl9waWQgKmFsbF9kYXRhOworCisjZGVmaW5lIENTVEFURSAxCisjZGVmaW5lIFBTVEFURSAyCisKK3N0cnVjdCBwb3dlcl9ldmVudCB7CisJc3RydWN0IHBvd2VyX2V2ZW50ICpuZXh0OworCWludCB0eXBlOworCWludCBzdGF0ZTsKKwl1NjQgc3RhcnRfdGltZTsKKwl1NjQgZW5kX3RpbWU7CisJaW50IGNwdTsKK307CisKK3N0cnVjdCB3YWtlX2V2ZW50IHsKKwlzdHJ1Y3Qgd2FrZV9ldmVudCAqbmV4dDsKKwlpbnQgd2FrZXI7CisJaW50IHdha2VlOworCXU2NCB0aW1lOworfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcl9ldmVudCAgICAqcG93ZXJfZXZlbnRzOworc3RhdGljIHN0cnVjdCB3YWtlX2V2ZW50ICAgICAqd2FrZV9ldmVudHM7CisKK3N0cnVjdCBzYW1wbGVfd3JhcHBlciAqYWxsX3NhbXBsZXM7CisKK3N0YXRpYyBzdHJ1Y3QgcGVyX3BpZCAqZmluZF9jcmVhdGVfcGlkKGludCBwaWQpCit7CisJc3RydWN0IHBlcl9waWQgKmN1cnNvciA9IGFsbF9kYXRhOworCisJd2hpbGUgKGN1cnNvcikgeworCQlpZiAoY3Vyc29yLT5waWQgPT0gcGlkKQorCQkJcmV0dXJuIGN1cnNvcjsKKwkJY3Vyc29yID0gY3Vyc29yLT5uZXh0OworCX0KKwljdXJzb3IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJfcGlkKSk7CisJYXNzZXJ0KGN1cnNvciAhPSBOVUxMKTsKKwltZW1zZXQoY3Vyc29yLCAwLCBzaXplb2Yoc3RydWN0IHBlcl9waWQpKTsKKwljdXJzb3ItPnBpZCA9IHBpZDsKKwljdXJzb3ItPm5leHQgPSBhbGxfZGF0YTsKKwlhbGxfZGF0YSA9IGN1cnNvcjsKKwlyZXR1cm4gY3Vyc29yOworfQorCitzdGF0aWMgdm9pZCBwaWRfc2V0X2NvbW0oaW50IHBpZCwgY2hhciAqY29tbSkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqcDsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmM7CisJcCA9IGZpbmRfY3JlYXRlX3BpZChwaWQpOworCWMgPSBwLT5hbGw7CisJd2hpbGUgKGMpIHsKKwkJaWYgKGMtPmNvbW0gJiYgc3RyY21wKGMtPmNvbW0sIGNvbW0pID09IDApIHsKKwkJCXAtPmN1cnJlbnQgPSBjOworCQkJcmV0dXJuOworCQl9CisJCWlmICghYy0+Y29tbSkgeworCQkJYy0+Y29tbSA9IHN0cmR1cChjb21tKTsKKwkJCXAtPmN1cnJlbnQgPSBjOworCQkJcmV0dXJuOworCQl9CisJCWMgPSBjLT5uZXh0OworCX0KKwljID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyX3BpZGNvbW0pKTsKKwlhc3NlcnQoYyAhPSBOVUxMKTsKKwltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBwZXJfcGlkY29tbSkpOworCWMtPmNvbW0gPSBzdHJkdXAoY29tbSk7CisJcC0+Y3VycmVudCA9IGM7CisJYy0+bmV4dCA9IHAtPmFsbDsKKwlwLT5hbGwgPSBjOworfQorCitzdGF0aWMgdm9pZCBwaWRfZm9yayhpbnQgcGlkLCBpbnQgcHBpZCwgdTY0IHRpbWVzdGFtcCkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqcCwgKnBwOworCXAgPSBmaW5kX2NyZWF0ZV9waWQocGlkKTsKKwlwcCA9IGZpbmRfY3JlYXRlX3BpZChwcGlkKTsKKwlwLT5wcGlkID0gcHBpZDsKKwlpZiAocHAtPmN1cnJlbnQgJiYgcHAtPmN1cnJlbnQtPmNvbW0gJiYgIXAtPmN1cnJlbnQpCisJCXBpZF9zZXRfY29tbShwaWQsIHBwLT5jdXJyZW50LT5jb21tKTsKKworCXAtPnN0YXJ0X3RpbWUgPSB0aW1lc3RhbXA7CisJaWYgKHAtPmN1cnJlbnQpIHsKKwkJcC0+Y3VycmVudC0+c3RhcnRfdGltZSA9IHRpbWVzdGFtcDsKKwkJcC0+Y3VycmVudC0+c3RhdGVfc2luY2UgPSB0aW1lc3RhbXA7CisJfQorfQorCitzdGF0aWMgdm9pZCBwaWRfZXhpdChpbnQgcGlkLCB1NjQgdGltZXN0YW1wKQoreworCXN0cnVjdCBwZXJfcGlkICpwOworCXAgPSBmaW5kX2NyZWF0ZV9waWQocGlkKTsKKwlwLT5lbmRfdGltZSA9IHRpbWVzdGFtcDsKKwlpZiAocC0+Y3VycmVudCkKKwkJcC0+Y3VycmVudC0+ZW5kX3RpbWUgPSB0aW1lc3RhbXA7Cit9CisKK3N0YXRpYyB2b2lkCitwaWRfcHV0X3NhbXBsZShpbnQgcGlkLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCXN0cnVjdCBwZXJfcGlkICpwOworCXN0cnVjdCBwZXJfcGlkY29tbSAqYzsKKwlzdHJ1Y3QgY3B1X3NhbXBsZSAqc2FtcGxlOworCisJcCA9IGZpbmRfY3JlYXRlX3BpZChwaWQpOworCWMgPSBwLT5jdXJyZW50OworCWlmICghYykgeworCQljID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyX3BpZGNvbW0pKTsKKwkJYXNzZXJ0KGMgIT0gTlVMTCk7CisJCW1lbXNldChjLCAwLCBzaXplb2Yoc3RydWN0IHBlcl9waWRjb21tKSk7CisJCXAtPmN1cnJlbnQgPSBjOworCQljLT5uZXh0ID0gcC0+YWxsOworCQlwLT5hbGwgPSBjOworCX0KKworCXNhbXBsZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGNwdV9zYW1wbGUpKTsKKwlhc3NlcnQoc2FtcGxlICE9IE5VTEwpOworCW1lbXNldChzYW1wbGUsIDAsIHNpemVvZihzdHJ1Y3QgY3B1X3NhbXBsZSkpOworCXNhbXBsZS0+c3RhcnRfdGltZSA9IHN0YXJ0OworCXNhbXBsZS0+ZW5kX3RpbWUgPSBlbmQ7CisJc2FtcGxlLT50eXBlID0gdHlwZTsKKwlzYW1wbGUtPm5leHQgPSBjLT5zYW1wbGVzOworCXNhbXBsZS0+Y3B1ID0gY3B1OworCWMtPnNhbXBsZXMgPSBzYW1wbGU7CisKKwlpZiAoc2FtcGxlLT50eXBlID09IFRZUEVfUlVOTklORyAmJiBlbmQgPiBzdGFydCAmJiBzdGFydCA+IDApIHsKKwkJYy0+dG90YWxfdGltZSArPSAoZW5kLXN0YXJ0KTsKKwkJcC0+dG90YWxfdGltZSArPSAoZW5kLXN0YXJ0KTsKKwl9CisKKwlpZiAoYy0+c3RhcnRfdGltZSA9PSAwIHx8IGMtPnN0YXJ0X3RpbWUgPiBzdGFydCkKKwkJYy0+c3RhcnRfdGltZSA9IHN0YXJ0OworCWlmIChwLT5zdGFydF90aW1lID09IDAgfHwgcC0+c3RhcnRfdGltZSA+IHN0YXJ0KQorCQlwLT5zdGFydF90aW1lID0gc3RhcnQ7CisKKwlpZiAoY3B1ID4gbnVtY3B1cykKKwkJbnVtY3B1cyA9IGNwdTsKK30KKworI2RlZmluZSBNQVhfQ1BVUyA0MDk2CisKK3N0YXRpYyB1NjQgY3B1c19jc3RhdGVfc3RhcnRfdGltZXNbTUFYX0NQVVNdOworc3RhdGljIGludCBjcHVzX2NzdGF0ZV9zdGF0ZVtNQVhfQ1BVU107CitzdGF0aWMgdTY0IGNwdXNfcHN0YXRlX3N0YXJ0X3RpbWVzW01BWF9DUFVTXTsKK3N0YXRpYyB1NjQgY3B1c19wc3RhdGVfc3RhdGVbTUFYX0NQVVNdOworCitzdGF0aWMgaW50Citwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJcGlkX3NldF9jb21tKGV2ZW50LT5jb21tLnBpZCwgZXZlbnQtPmNvbW0uY29tbSk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50Citwcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJcGlkX2ZvcmsoZXZlbnQtPmZvcmsucGlkLCBldmVudC0+Zm9yay5wcGlkLCBldmVudC0+Zm9yay50aW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19leGl0X2V2ZW50KGV2ZW50X3QgKmV2ZW50KQoreworCXBpZF9leGl0KGV2ZW50LT5mb3JrLnBpZCwgZXZlbnQtPmZvcmsudGltZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB0cmFjZV9lbnRyeSB7CisJdTMyCQkJc2l6ZTsKKwl1bnNpZ25lZCBzaG9ydAkJdHlwZTsKKwl1bnNpZ25lZCBjaGFyCQlmbGFnczsKKwl1bnNpZ25lZCBjaGFyCQlwcmVlbXB0X2NvdW50OworCWludAkJCXBpZDsKKwlpbnQJCQl0Z2lkOworfTsKKworc3RydWN0IHBvd2VyX2VudHJ5IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgdGU7CisJczY0CXR5cGU7CisJczY0CXZhbHVlOworfTsKKworI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2CitzdHJ1Y3Qgd2FrZXVwX2VudHJ5IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgdGU7CisJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworCWludCAgIHBpZDsKKwlpbnQgICBwcmlvOworCWludCAgIHN1Y2Nlc3M7Cit9OworCisvKgorICogdHJhY2VfZmxhZ190eXBlIGlzIGFuIGVudW1lcmF0aW9uIHRoYXQgaG9sZHMgZGlmZmVyZW50CisgKiBzdGF0ZXMgd2hlbiBhIHRyYWNlIG9jY3Vycy4gVGhlc2UgYXJlOgorICogIElSUVNfT0ZGICAgICAgICAgICAgLSBpbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQKKyAqICBJUlFTX05PU1VQUE9SVCAgICAgIC0gYXJjaCBkb2VzIG5vdCBzdXBwb3J0IGlycXNfZGlzYWJsZWRfZmxhZ3MKKyAqICBORUVEX1JFU0NFRCAgICAgICAgIC0gcmVzY2hlZHVsZSBpcyByZXF1ZXN0ZWQKKyAqICBIQVJESVJRICAgICAgICAgICAgIC0gaW5zaWRlIGFuIGludGVycnVwdCBoYW5kbGVyCisgKiAgU09GVElSUSAgICAgICAgICAgICAtIGluc2lkZSBhIHNvZnRpcnEgaGFuZGxlcgorICovCitlbnVtIHRyYWNlX2ZsYWdfdHlwZSB7CisJVFJBQ0VfRkxBR19JUlFTX09GRgkJPSAweDAxLAorCVRSQUNFX0ZMQUdfSVJRU19OT1NVUFBPUlQJPSAweDAyLAorCVRSQUNFX0ZMQUdfTkVFRF9SRVNDSEVECQk9IDB4MDQsCisJVFJBQ0VfRkxBR19IQVJESVJRCQk9IDB4MDgsCisJVFJBQ0VfRkxBR19TT0ZUSVJRCQk9IDB4MTAsCit9OworCisKKworc3RydWN0IHNjaGVkX3N3aXRjaCB7CisJc3RydWN0IHRyYWNlX2VudHJ5IHRlOworCWNoYXIgcHJldl9jb21tW1RBU0tfQ09NTV9MRU5dOworCWludCAgcHJldl9waWQ7CisJaW50ICBwcmV2X3ByaW87CisJbG9uZyBwcmV2X3N0YXRlOyAvKiBBcmphbiB3ZWVwcy4gKi8KKwljaGFyIG5leHRfY29tbVtUQVNLX0NPTU1fTEVOXTsKKwlpbnQgIG5leHRfcGlkOworCWludCAgbmV4dF9wcmlvOworfTsKKworc3RhdGljIHZvaWQgY19zdGF0ZV9zdGFydChpbnQgY3B1LCB1NjQgdGltZXN0YW1wLCBpbnQgc3RhdGUpCit7CisJY3B1c19jc3RhdGVfc3RhcnRfdGltZXNbY3B1XSA9IHRpbWVzdGFtcDsKKwljcHVzX2NzdGF0ZV9zdGF0ZVtjcHVdID0gc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIGNfc3RhdGVfZW5kKGludCBjcHUsIHU2NCB0aW1lc3RhbXApCit7CisJc3RydWN0IHBvd2VyX2V2ZW50ICpwd3I7CisJcHdyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcG93ZXJfZXZlbnQpKTsKKwlpZiAoIXB3cikKKwkJcmV0dXJuOworCW1lbXNldChwd3IsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfZXZlbnQpKTsKKworCXB3ci0+c3RhdGUgPSBjcHVzX2NzdGF0ZV9zdGF0ZVtjcHVdOworCXB3ci0+c3RhcnRfdGltZSA9IGNwdXNfY3N0YXRlX3N0YXJ0X3RpbWVzW2NwdV07CisJcHdyLT5lbmRfdGltZSA9IHRpbWVzdGFtcDsKKwlwd3ItPmNwdSA9IGNwdTsKKwlwd3ItPnR5cGUgPSBDU1RBVEU7CisJcHdyLT5uZXh0ID0gcG93ZXJfZXZlbnRzOworCisJcG93ZXJfZXZlbnRzID0gcHdyOworfQorCitzdGF0aWMgdm9pZCBwX3N0YXRlX2NoYW5nZShpbnQgY3B1LCB1NjQgdGltZXN0YW1wLCB1NjQgbmV3X2ZyZXEpCit7CisJc3RydWN0IHBvd2VyX2V2ZW50ICpwd3I7CisJcHdyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcG93ZXJfZXZlbnQpKTsKKworCWlmIChuZXdfZnJlcSA+IDgwMDAwMDApIC8qIGRldGVjdCBpbnZhbGlkIGRhdGEgKi8KKwkJcmV0dXJuOworCisJaWYgKCFwd3IpCisJCXJldHVybjsKKwltZW1zZXQocHdyLCAwLCBzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CisKKwlwd3ItPnN0YXRlID0gY3B1c19wc3RhdGVfc3RhdGVbY3B1XTsKKwlwd3ItPnN0YXJ0X3RpbWUgPSBjcHVzX3BzdGF0ZV9zdGFydF90aW1lc1tjcHVdOworCXB3ci0+ZW5kX3RpbWUgPSB0aW1lc3RhbXA7CisJcHdyLT5jcHUgPSBjcHU7CisJcHdyLT50eXBlID0gUFNUQVRFOworCXB3ci0+bmV4dCA9IHBvd2VyX2V2ZW50czsKKworCWlmICghcHdyLT5zdGFydF90aW1lKQorCQlwd3ItPnN0YXJ0X3RpbWUgPSBmaXJzdF90aW1lOworCisJcG93ZXJfZXZlbnRzID0gcHdyOworCisJY3B1c19wc3RhdGVfc3RhdGVbY3B1XSA9IG5ld19mcmVxOworCWNwdXNfcHN0YXRlX3N0YXJ0X3RpbWVzW2NwdV0gPSB0aW1lc3RhbXA7CisKKwlpZiAoKHU2NCluZXdfZnJlcSA+IG1heF9mcmVxKQorCQltYXhfZnJlcSA9IG5ld19mcmVxOworCisJaWYgKG5ld19mcmVxIDwgbWluX2ZyZXEgfHwgbWluX2ZyZXEgPT0gMCkKKwkJbWluX2ZyZXEgPSBuZXdfZnJlcTsKKworCWlmIChuZXdfZnJlcSA9PSBtYXhfZnJlcSAtIDEwMDApCisJCQl0dXJib19mcmVxdWVuY3kgPSBtYXhfZnJlcTsKK30KKworc3RhdGljIHZvaWQKK3NjaGVkX3dha2V1cChpbnQgY3B1LCB1NjQgdGltZXN0YW1wLCBpbnQgcGlkLCBzdHJ1Y3QgdHJhY2VfZW50cnkgKnRlKQoreworCXN0cnVjdCB3YWtlX2V2ZW50ICp3ZTsKKwlzdHJ1Y3QgcGVyX3BpZCAqcDsKKwlzdHJ1Y3Qgd2FrZXVwX2VudHJ5ICp3YWtlID0gKHZvaWQgKil0ZTsKKworCXdlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2FrZV9ldmVudCkpOworCWlmICghd2UpCisJCXJldHVybjsKKworCW1lbXNldCh3ZSwgMCwgc2l6ZW9mKHN0cnVjdCB3YWtlX2V2ZW50KSk7CisJd2UtPnRpbWUgPSB0aW1lc3RhbXA7CisJd2UtPndha2VyID0gcGlkOworCisJaWYgKCh0ZS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0hBUkRJUlEpIHx8ICh0ZS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX1NPRlRJUlEpKQorCQl3ZS0+d2FrZXIgPSAtMTsKKworCXdlLT53YWtlZSA9IHdha2UtPnBpZDsKKwl3ZS0+bmV4dCA9IHdha2VfZXZlbnRzOworCXdha2VfZXZlbnRzID0gd2U7CisJcCA9IGZpbmRfY3JlYXRlX3BpZCh3ZS0+d2FrZWUpOworCisJaWYgKHAgJiYgcC0+Y3VycmVudCAmJiBwLT5jdXJyZW50LT5zdGF0ZSA9PSBUWVBFX05PTkUpIHsKKwkJcC0+Y3VycmVudC0+c3RhdGVfc2luY2UgPSB0aW1lc3RhbXA7CisJCXAtPmN1cnJlbnQtPnN0YXRlID0gVFlQRV9XQUlUSU5HOworCX0KKwlpZiAocCAmJiBwLT5jdXJyZW50ICYmIHAtPmN1cnJlbnQtPnN0YXRlID09IFRZUEVfQkxPQ0tFRCkgeworCQlwaWRfcHV0X3NhbXBsZShwLT5waWQsIHAtPmN1cnJlbnQtPnN0YXRlLCBjcHUsIHAtPmN1cnJlbnQtPnN0YXRlX3NpbmNlLCB0aW1lc3RhbXApOworCQlwLT5jdXJyZW50LT5zdGF0ZV9zaW5jZSA9IHRpbWVzdGFtcDsKKwkJcC0+Y3VycmVudC0+c3RhdGUgPSBUWVBFX1dBSVRJTkc7CisJfQorfQorCitzdGF0aWMgdm9pZCBzY2hlZF9zd2l0Y2goaW50IGNwdSwgdTY0IHRpbWVzdGFtcCwgc3RydWN0IHRyYWNlX2VudHJ5ICp0ZSkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqcCA9IE5VTEwsICpwcmV2X3A7CisJc3RydWN0IHNjaGVkX3N3aXRjaCAqc3cgPSAodm9pZCAqKXRlOworCisKKwlwcmV2X3AgPSBmaW5kX2NyZWF0ZV9waWQoc3ctPnByZXZfcGlkKTsKKworCXAgPSBmaW5kX2NyZWF0ZV9waWQoc3ctPm5leHRfcGlkKTsKKworCWlmIChwcmV2X3AtPmN1cnJlbnQgJiYgcHJldl9wLT5jdXJyZW50LT5zdGF0ZSAhPSBUWVBFX05PTkUpCisJCXBpZF9wdXRfc2FtcGxlKHN3LT5wcmV2X3BpZCwgVFlQRV9SVU5OSU5HLCBjcHUsIHByZXZfcC0+Y3VycmVudC0+c3RhdGVfc2luY2UsIHRpbWVzdGFtcCk7CisJaWYgKHAgJiYgcC0+Y3VycmVudCkgeworCQlpZiAocC0+Y3VycmVudC0+c3RhdGUgIT0gVFlQRV9OT05FKQorCQkJcGlkX3B1dF9zYW1wbGUoc3ctPm5leHRfcGlkLCBwLT5jdXJyZW50LT5zdGF0ZSwgY3B1LCBwLT5jdXJyZW50LT5zdGF0ZV9zaW5jZSwgdGltZXN0YW1wKTsKKworCQkJcC0+Y3VycmVudC0+c3RhdGVfc2luY2UgPSB0aW1lc3RhbXA7CisJCQlwLT5jdXJyZW50LT5zdGF0ZSA9IFRZUEVfUlVOTklORzsKKwl9CisKKwlpZiAocHJldl9wLT5jdXJyZW50KSB7CisJCXByZXZfcC0+Y3VycmVudC0+c3RhdGUgPSBUWVBFX05PTkU7CisJCXByZXZfcC0+Y3VycmVudC0+c3RhdGVfc2luY2UgPSB0aW1lc3RhbXA7CisJCWlmIChzdy0+cHJldl9zdGF0ZSAmIDIpCisJCQlwcmV2X3AtPmN1cnJlbnQtPnN0YXRlID0gVFlQRV9CTE9DS0VEOworCQlpZiAoc3ctPnByZXZfc3RhdGUgPT0gMCkKKwkJCXByZXZfcC0+Y3VycmVudC0+c3RhdGUgPSBUWVBFX1dBSVRJTkc7CisJfQorfQorCisKK3N0YXRpYyBpbnQKK3Byb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQoreworCWludCBjdXJzb3IgPSAwOworCXU2NCBhZGRyID0gMDsKKwl1NjQgc3RhbXAgPSAwOworCXUzMiBjcHUgPSAwOworCXUzMiBwaWQgPSAwOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqdGU7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JUCkKKwkJY3Vyc29yKys7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpIHsKKwkJcGlkID0gZXZlbnQtPnNhbXBsZS5hcnJheVtjdXJzb3JdPj4zMjsKKwkJY3Vyc29yKys7CisJfQorCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpIHsKKwkJc3RhbXAgPSBldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcisrXTsKKworCQlpZiAoIWZpcnN0X3RpbWUgfHwgZmlyc3RfdGltZSA+IHN0YW1wKQorCQkJZmlyc3RfdGltZSA9IHN0YW1wOworCQlpZiAobGFzdF90aW1lIDwgc3RhbXApCisJCQlsYXN0X3RpbWUgPSBzdGFtcDsKKworCX0KKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9BRERSKQorCQlhZGRyID0gZXZlbnQtPnNhbXBsZS5hcnJheVtjdXJzb3IrK107CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSUQpCisJCWN1cnNvcisrOworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKKwkJY3Vyc29yKys7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKQorCQljcHUgPSBldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcisrXSAmIDB4RkZGRkZGRkY7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKQorCQljdXJzb3IrKzsKKworCXRlID0gKHZvaWQgKikmZXZlbnQtPnNhbXBsZS5hcnJheVtjdXJzb3JdOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXICYmIHRlLT5zaXplID4gMCkgeworCQljaGFyICpldmVudF9zdHI7CisJCXN0cnVjdCBwb3dlcl9lbnRyeSAqcGU7CisKKwkJcGUgPSAodm9pZCAqKXRlOworCisJCWV2ZW50X3N0ciA9IHBlcmZfaGVhZGVyX19maW5kX2V2ZW50KHRlLT50eXBlKTsKKworCQlpZiAoIWV2ZW50X3N0cikKKwkJCXJldHVybiAwOworCisJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAicG93ZXI6cG93ZXJfc3RhcnQiKSA9PSAwKQorCQkJY19zdGF0ZV9zdGFydChjcHUsIHN0YW1wLCBwZS0+dmFsdWUpOworCisJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAicG93ZXI6cG93ZXJfZW5kIikgPT0gMCkKKwkJCWNfc3RhdGVfZW5kKGNwdSwgc3RhbXApOworCisJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAicG93ZXI6cG93ZXJfZnJlcXVlbmN5IikgPT0gMCkKKwkJCXBfc3RhdGVfY2hhbmdlKGNwdSwgc3RhbXAsIHBlLT52YWx1ZSk7CisKKwkJaWYgKHN0cmNtcChldmVudF9zdHIsICJzY2hlZDpzY2hlZF93YWtldXAiKSA9PSAwKQorCQkJc2NoZWRfd2FrZXVwKGNwdSwgc3RhbXAsIHBpZCwgdGUpOworCisJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAic2NoZWQ6c2NoZWRfc3dpdGNoIikgPT0gMCkKKwkJCXNjaGVkX3N3aXRjaChjcHUsIHN0YW1wLCB0ZSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQWZ0ZXIgdGhlIGxhc3Qgc2FtcGxlIHdlIG5lZWQgdG8gd3JhcCB1cCB0aGUgY3VycmVudCBDL1Agc3RhdGUKKyAqIGFuZCBjbG9zZSBvdXQgZWFjaCBDUFUgZm9yIHRoZXNlLgorICovCitzdGF0aWMgdm9pZCBlbmRfc2FtcGxlX3Byb2Nlc3Npbmcodm9pZCkKK3sKKwl1NjQgY3B1OworCXN0cnVjdCBwb3dlcl9ldmVudCAqcHdyOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBudW1jcHVzOyBjcHUrKykgeworCQlwd3IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwb3dlcl9ldmVudCkpOworCQlpZiAoIXB3cikKKwkJCXJldHVybjsKKwkJbWVtc2V0KHB3ciwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl9ldmVudCkpOworCisJCS8qIEMgc3RhdGUgKi8KKyNpZiAwCisJCXB3ci0+c3RhdGUgPSBjcHVzX2NzdGF0ZV9zdGF0ZVtjcHVdOworCQlwd3ItPnN0YXJ0X3RpbWUgPSBjcHVzX2NzdGF0ZV9zdGFydF90aW1lc1tjcHVdOworCQlwd3ItPmVuZF90aW1lID0gbGFzdF90aW1lOworCQlwd3ItPmNwdSA9IGNwdTsKKwkJcHdyLT50eXBlID0gQ1NUQVRFOworCQlwd3ItPm5leHQgPSBwb3dlcl9ldmVudHM7CisKKwkJcG93ZXJfZXZlbnRzID0gcHdyOworI2VuZGlmCisJCS8qIFAgc3RhdGUgKi8KKworCQlwd3IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwb3dlcl9ldmVudCkpOworCQlpZiAoIXB3cikKKwkJCXJldHVybjsKKwkJbWVtc2V0KHB3ciwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl9ldmVudCkpOworCisJCXB3ci0+c3RhdGUgPSBjcHVzX3BzdGF0ZV9zdGF0ZVtjcHVdOworCQlwd3ItPnN0YXJ0X3RpbWUgPSBjcHVzX3BzdGF0ZV9zdGFydF90aW1lc1tjcHVdOworCQlwd3ItPmVuZF90aW1lID0gbGFzdF90aW1lOworCQlwd3ItPmNwdSA9IGNwdTsKKwkJcHdyLT50eXBlID0gUFNUQVRFOworCQlwd3ItPm5leHQgPSBwb3dlcl9ldmVudHM7CisKKwkJaWYgKCFwd3ItPnN0YXJ0X3RpbWUpCisJCQlwd3ItPnN0YXJ0X3RpbWUgPSBmaXJzdF90aW1lOworCQlpZiAoIXB3ci0+c3RhdGUpCisJCQlwd3ItPnN0YXRlID0gbWluX2ZyZXE7CisJCXBvd2VyX2V2ZW50cyA9IHB3cjsKKwl9Cit9CisKK3N0YXRpYyB1NjQgc2FtcGxlX3RpbWUoZXZlbnRfdCAqZXZlbnQpCit7CisJaW50IGN1cnNvcjsKKworCWN1cnNvciA9IDA7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSVApCisJCWN1cnNvcisrOworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkKKwkJY3Vyc29yKys7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkKKwkJcmV0dXJuIGV2ZW50LT5zYW1wbGUuYXJyYXlbY3Vyc29yXTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogV2UgZmlyc3QgcXVldWUgYWxsIGV2ZW50cywgc29ydGVkIGJhY2t3YXJkcyBieSBpbnNlcnRpb24uCisgKiBUaGUgb3JkZXIgd2lsbCBnZXQgZmxpcHBlZCBsYXRlci4KKyAqLworc3RhdGljIGludAorcXVldWVfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQoreworCXN0cnVjdCBzYW1wbGVfd3JhcHBlciAqY29weSwgKnByZXY7CisJaW50IHNpemU7CisKKwlzaXplID0gZXZlbnQtPnNhbXBsZS5oZWFkZXIuc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2FtcGxlX3dyYXBwZXIpICsgODsKKworCWNvcHkgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFjb3B5KQorCQlyZXR1cm4gMTsKKworCW1lbXNldChjb3B5LCAwLCBzaXplKTsKKworCWNvcHktPm5leHQgPSBOVUxMOworCWNvcHktPnRpbWVzdGFtcCA9IHNhbXBsZV90aW1lKGV2ZW50KTsKKworCW1lbWNweSgmY29weS0+ZGF0YSwgZXZlbnQsIGV2ZW50LT5zYW1wbGUuaGVhZGVyLnNpemUpOworCisJLyogaW5zZXJ0IGluIHRoZSByaWdodCBwbGFjZSBpbiB0aGUgbGlzdCAqLworCisJaWYgKCFhbGxfc2FtcGxlcykgeworCQkvKiBmaXJzdCBzYW1wbGUgZXZlciAqLworCQlhbGxfc2FtcGxlcyA9IGNvcHk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhbGxfc2FtcGxlcy0+dGltZXN0YW1wIDwgY29weS0+dGltZXN0YW1wKSB7CisJCS8qIGluc2VydCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCAqLworCQljb3B5LT5uZXh0ID0gYWxsX3NhbXBsZXM7CisJCWFsbF9zYW1wbGVzID0gY29weTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJldiA9IGFsbF9zYW1wbGVzOworCXdoaWxlIChwcmV2LT5uZXh0KSB7CisJCWlmIChwcmV2LT5uZXh0LT50aW1lc3RhbXAgPCBjb3B5LT50aW1lc3RhbXApIHsKKwkJCWNvcHktPm5leHQgPSBwcmV2LT5uZXh0OworCQkJcHJldi0+bmV4dCA9IGNvcHk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwcmV2ID0gcHJldi0+bmV4dDsKKwl9CisJLyogaW5zZXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KKwlwcmV2LT5uZXh0ID0gY29weTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb3J0X3F1ZXVlZF9zYW1wbGVzKHZvaWQpCit7CisJc3RydWN0IHNhbXBsZV93cmFwcGVyICpjdXJzb3IsICpuZXh0OworCisJY3Vyc29yID0gYWxsX3NhbXBsZXM7CisJYWxsX3NhbXBsZXMgPSBOVUxMOworCisJd2hpbGUgKGN1cnNvcikgeworCQluZXh0ID0gY3Vyc29yLT5uZXh0OworCQljdXJzb3ItPm5leHQgPSBhbGxfc2FtcGxlczsKKwkJYWxsX3NhbXBsZXMgPSBjdXJzb3I7CisJCWN1cnNvciA9IG5leHQ7CisJfQorfQorCisvKgorICogU29ydCB0aGUgcGlkIGRhdGFzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgc29ydF9waWRzKHZvaWQpCit7CisJc3RydWN0IHBlcl9waWQgKm5ld19saXN0LCAqcCwgKmN1cnNvciwgKnByZXY7CisJLyogc29ydCBieSBwcGlkIGZpcnN0LCB0aGVuIGJ5IHBpZCwgbG93ZXN0IHRvIGhpZ2hlc3QgKi8KKworCW5ld19saXN0ID0gTlVMTDsKKworCXdoaWxlIChhbGxfZGF0YSkgeworCQlwID0gYWxsX2RhdGE7CisJCWFsbF9kYXRhID0gcC0+bmV4dDsKKwkJcC0+bmV4dCA9IE5VTEw7CisKKwkJaWYgKG5ld19saXN0ID09IE5VTEwpIHsKKwkJCW5ld19saXN0ID0gcDsKKwkJCXAtPm5leHQgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKwkJcHJldiA9IE5VTEw7CisJCWN1cnNvciA9IG5ld19saXN0OworCQl3aGlsZSAoY3Vyc29yKSB7CisJCQlpZiAoY3Vyc29yLT5wcGlkID4gcC0+cHBpZCB8fAorCQkJCShjdXJzb3ItPnBwaWQgPT0gcC0+cHBpZCAmJiBjdXJzb3ItPnBpZCA+IHAtPnBpZCkpIHsKKwkJCQkvKiBtdXN0IGluc2VydCBiZWZvcmUgKi8KKwkJCQlpZiAocHJldikgeworCQkJCQlwLT5uZXh0ID0gcHJldi0+bmV4dDsKKwkJCQkJcHJldi0+bmV4dCA9IHA7CisJCQkJCWN1cnNvciA9IE5VTEw7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZSB7CisJCQkJCXAtPm5leHQgPSBuZXdfbGlzdDsKKwkJCQkJbmV3X2xpc3QgPSBwOworCQkJCQljdXJzb3IgPSBOVUxMOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCXByZXYgPSBjdXJzb3I7CisJCQljdXJzb3IgPSBjdXJzb3ItPm5leHQ7CisJCQlpZiAoIWN1cnNvcikKKwkJCQlwcmV2LT5uZXh0ID0gcDsKKwkJfQorCX0KKwlhbGxfZGF0YSA9IG5ld19saXN0OworfQorCisKK3N0YXRpYyB2b2lkIGRyYXdfY19wX3N0YXRlcyh2b2lkKQoreworCXN0cnVjdCBwb3dlcl9ldmVudCAqcHdyOworCXB3ciA9IHBvd2VyX2V2ZW50czsKKworCS8qCisJICogdHdvIHBhc3MgZHJhd2luZyBzbyB0aGF0IHRoZSBQIHN0YXRlIGJhcnMgYXJlIG9uIHRvcCBvZiB0aGUgQyBzdGF0ZSBibG9ja3MKKwkgKi8KKwl3aGlsZSAocHdyKSB7CisJCWlmIChwd3ItPnR5cGUgPT0gQ1NUQVRFKQorCQkJc3ZnX2NzdGF0ZShwd3ItPmNwdSwgcHdyLT5zdGFydF90aW1lLCBwd3ItPmVuZF90aW1lLCBwd3ItPnN0YXRlKTsKKwkJcHdyID0gcHdyLT5uZXh0OworCX0KKworCXB3ciA9IHBvd2VyX2V2ZW50czsKKwl3aGlsZSAocHdyKSB7CisJCWlmIChwd3ItPnR5cGUgPT0gUFNUQVRFKSB7CisJCQlpZiAoIXB3ci0+c3RhdGUpCisJCQkJcHdyLT5zdGF0ZSA9IG1pbl9mcmVxOworCQkJc3ZnX3BzdGF0ZShwd3ItPmNwdSwgcHdyLT5zdGFydF90aW1lLCBwd3ItPmVuZF90aW1lLCBwd3ItPnN0YXRlKTsKKwkJfQorCQlwd3IgPSBwd3ItPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcmF3X3dha2V1cHModm9pZCkKK3sKKwlzdHJ1Y3Qgd2FrZV9ldmVudCAqd2U7CisJc3RydWN0IHBlcl9waWQgKnA7CisJc3RydWN0IHBlcl9waWRjb21tICpjOworCisJd2UgPSB3YWtlX2V2ZW50czsKKwl3aGlsZSAod2UpIHsKKwkJaW50IGZyb20gPSAwLCB0byA9IDA7CisJCWNoYXIgKnRhc2tfZnJvbSA9IE5VTEwsICp0YXNrX3RvID0gTlVMTDsKKworCQkvKiBsb2NhdGUgdGhlIGNvbHVtbiBvZiB0aGUgd2FrZXIgYW5kIHdha2VlICovCisJCXAgPSBhbGxfZGF0YTsKKwkJd2hpbGUgKHApIHsKKwkJCWlmIChwLT5waWQgPT0gd2UtPndha2VyIHx8IHAtPnBpZCA9PSB3ZS0+d2FrZWUpIHsKKwkJCQljID0gcC0+YWxsOworCQkJCXdoaWxlIChjKSB7CisJCQkJCWlmIChjLT5ZICYmIGMtPnN0YXJ0X3RpbWUgPD0gd2UtPnRpbWUgJiYgYy0+ZW5kX3RpbWUgPj0gd2UtPnRpbWUpIHsKKwkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VyKSB7CisJCQkJCQkJZnJvbSA9IGMtPlk7CisJCQkJCQkJdGFza19mcm9tID0gYy0+Y29tbTsKKwkJCQkJCX0KKwkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlKSB7CisJCQkJCQkJdG8gPSBjLT5ZOworCQkJCQkJCXRhc2tfdG8gPSBjLT5jb21tOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWMgPSBjLT5uZXh0OworCQkJCX0KKwkJCX0KKwkJCXAgPSBwLT5uZXh0OworCQl9CisKKwkJaWYgKHdlLT53YWtlciA9PSAtMSkKKwkJCXN2Z19pbnRlcnJ1cHQod2UtPnRpbWUsIHRvKTsKKwkJZWxzZSBpZiAoZnJvbSAmJiB0byAmJiBhYnMoZnJvbSAtIHRvKSA9PSAxKQorCQkJc3ZnX3dha2VsaW5lKHdlLT50aW1lLCBmcm9tLCB0byk7CisJCWVsc2UKKwkJCXN2Z19wYXJ0aWFsX3dha2VsaW5lKHdlLT50aW1lLCBmcm9tLCB0YXNrX2Zyb20sIHRvLCB0YXNrX3RvKTsKKwkJd2UgPSB3ZS0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdfY3B1X3VzYWdlKHZvaWQpCit7CisJc3RydWN0IHBlcl9waWQgKnA7CisJc3RydWN0IHBlcl9waWRjb21tICpjOworCXN0cnVjdCBjcHVfc2FtcGxlICpzYW1wbGU7CisJcCA9IGFsbF9kYXRhOworCXdoaWxlIChwKSB7CisJCWMgPSBwLT5hbGw7CisJCXdoaWxlIChjKSB7CisJCQlzYW1wbGUgPSBjLT5zYW1wbGVzOworCQkJd2hpbGUgKHNhbXBsZSkgeworCQkJCWlmIChzYW1wbGUtPnR5cGUgPT0gVFlQRV9SVU5OSU5HKQorCQkJCQlzdmdfcHJvY2VzcyhzYW1wbGUtPmNwdSwgc2FtcGxlLT5zdGFydF90aW1lLCBzYW1wbGUtPmVuZF90aW1lLCAic2FtcGxlIiwgYy0+Y29tbSk7CisKKwkJCQlzYW1wbGUgPSBzYW1wbGUtPm5leHQ7CisJCQl9CisJCQljID0gYy0+bmV4dDsKKwkJfQorCQlwID0gcC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdfcHJvY2Vzc19iYXJzKHZvaWQpCit7CisJc3RydWN0IHBlcl9waWQgKnA7CisJc3RydWN0IHBlcl9waWRjb21tICpjOworCXN0cnVjdCBjcHVfc2FtcGxlICpzYW1wbGU7CisJaW50IFkgPSAwOworCisJWSA9IDIgKiBudW1jcHVzICsgMjsKKworCXAgPSBhbGxfZGF0YTsKKwl3aGlsZSAocCkgeworCQljID0gcC0+YWxsOworCQl3aGlsZSAoYykgeworCQkJaWYgKCFjLT5kaXNwbGF5KSB7CisJCQkJYy0+WSA9IDA7CisJCQkJYyA9IGMtPm5leHQ7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXN2Z19ib3goWSwgYy0+c3RhcnRfdGltZSwgYy0+ZW5kX3RpbWUsICJwcm9jZXNzIik7CisJCQlzYW1wbGUgPSBjLT5zYW1wbGVzOworCQkJd2hpbGUgKHNhbXBsZSkgeworCQkJCWlmIChzYW1wbGUtPnR5cGUgPT0gVFlQRV9SVU5OSU5HKQorCQkJCQlzdmdfc2FtcGxlKFksIHNhbXBsZS0+Y3B1LCBzYW1wbGUtPnN0YXJ0X3RpbWUsIHNhbXBsZS0+ZW5kX3RpbWUpOworCQkJCWlmIChzYW1wbGUtPnR5cGUgPT0gVFlQRV9CTE9DS0VEKQorCQkJCQlzdmdfYm94KFksIHNhbXBsZS0+c3RhcnRfdGltZSwgc2FtcGxlLT5lbmRfdGltZSwgImJsb2NrZWQiKTsKKwkJCQlpZiAoc2FtcGxlLT50eXBlID09IFRZUEVfV0FJVElORykKKwkJCQkJc3ZnX3dhaXRpbmcoWSwgc2FtcGxlLT5zdGFydF90aW1lLCBzYW1wbGUtPmVuZF90aW1lKTsKKwkJCQlzYW1wbGUgPSBzYW1wbGUtPm5leHQ7CisJCQl9CisKKwkJCWlmIChjLT5jb21tKSB7CisJCQkJY2hhciBjb21tWzI1Nl07CisJCQkJaWYgKGMtPnRvdGFsX3RpbWUgPiA1MDAwMDAwMDAwKSAvKiA1IHNlY29uZHMgKi8KKwkJCQkJc3ByaW50Zihjb21tLCAiJXM6JWkgKCUyLjJmcykiLCBjLT5jb21tLCBwLT5waWQsIGMtPnRvdGFsX3RpbWUgLyAxMDAwMDAwMDAwLjApOworCQkJCWVsc2UKKwkJCQkJc3ByaW50Zihjb21tLCAiJXM6JWkgKCUzLjFmbXMpIiwgYy0+Y29tbSwgcC0+cGlkLCBjLT50b3RhbF90aW1lIC8gMTAwMDAwMC4wKTsKKworCQkJCXN2Z190ZXh0KFksIGMtPnN0YXJ0X3RpbWUsIGNvbW0pOworCQkJfQorCQkJYy0+WSA9IFk7CisJCQlZKys7CisJCQljID0gYy0+bmV4dDsKKwkJfQorCQlwID0gcC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGV0ZXJtaW5lX2Rpc3BsYXlfdGFza3ModTY0IHRocmVzaG9sZCkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqcDsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmM7CisJaW50IGNvdW50ID0gMDsKKworCXAgPSBhbGxfZGF0YTsKKwl3aGlsZSAocCkgeworCQlwLT5kaXNwbGF5ID0gMDsKKwkJaWYgKHAtPnN0YXJ0X3RpbWUgPT0gMSkKKwkJCXAtPnN0YXJ0X3RpbWUgPSBmaXJzdF90aW1lOworCisJCS8qIG5vIGV4aXQgbWFya2VyLCB0YXNrIGtlcHQgcnVubmluZyB0byB0aGUgZW5kICovCisJCWlmIChwLT5lbmRfdGltZSA9PSAwKQorCQkJcC0+ZW5kX3RpbWUgPSBsYXN0X3RpbWU7CisJCWlmIChwLT50b3RhbF90aW1lID49IHRocmVzaG9sZCkKKwkJCXAtPmRpc3BsYXkgPSAxOworCisJCWMgPSBwLT5hbGw7CisKKwkJd2hpbGUgKGMpIHsKKwkJCWMtPmRpc3BsYXkgPSAwOworCisJCQlpZiAoYy0+c3RhcnRfdGltZSA9PSAxKQorCQkJCWMtPnN0YXJ0X3RpbWUgPSBmaXJzdF90aW1lOworCisJCQlpZiAoYy0+dG90YWxfdGltZSA+PSB0aHJlc2hvbGQpIHsKKwkJCQljLT5kaXNwbGF5ID0gMTsKKwkJCQljb3VudCsrOworCQkJfQorCisJCQlpZiAoYy0+ZW5kX3RpbWUgPT0gMCkKKwkJCQljLT5lbmRfdGltZSA9IGxhc3RfdGltZTsKKworCQkJYyA9IGMtPm5leHQ7CisJCX0KKwkJcCA9IHAtPm5leHQ7CisJfQorCXJldHVybiBjb3VudDsKK30KKworCisKKyNkZWZpbmUgVElNRV9USFJFU0ggMTAwMDAwMDAKKworc3RhdGljIHZvaWQgd3JpdGVfc3ZnX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJdTY0IGk7CisJaW50IGNvdW50OworCisJbnVtY3B1cysrOworCisKKwljb3VudCA9IGRldGVybWluZV9kaXNwbGF5X3Rhc2tzKFRJTUVfVEhSRVNIKTsKKworCS8qIFdlJ2QgbGlrZSB0byBzaG93IGF0IGxlYXN0IDE1IHRhc2tzOyBiZSBsZXNzIHBpY2t5IGlmIHdlIGhhdmUgZmV3ZXIgKi8KKwlpZiAoY291bnQgPCAxNSkKKwkJY291bnQgPSBkZXRlcm1pbmVfZGlzcGxheV90YXNrcyhUSU1FX1RIUkVTSCAvIDEwKTsKKworCW9wZW5fc3ZnKGZpbGVuYW1lLCBudW1jcHVzLCBjb3VudCwgZmlyc3RfdGltZSwgbGFzdF90aW1lKTsKKworCXN2Z190aW1lX2dyaWQoKTsKKwlzdmdfbGVnZW5kYSgpOworCisJZm9yIChpID0gMDsgaSA8IG51bWNwdXM7IGkrKykKKwkJc3ZnX2NwdV9ib3goaSwgbWF4X2ZyZXEsIHR1cmJvX2ZyZXF1ZW5jeSk7CisKKwlkcmF3X2NwdV91c2FnZSgpOworCWRyYXdfcHJvY2Vzc19iYXJzKCk7CisJZHJhd19jX3Bfc3RhdGVzKCk7CisJZHJhd193YWtldXBzKCk7CisKKwlzdmdfY2xvc2UoKTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19ldmVudChldmVudF90ICpldmVudCkKK3sKKworCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7CisKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CisJCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQpOworCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKKwkJcmV0dXJuIHByb2Nlc3NfZm9ya19ldmVudChldmVudCk7CisJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgorCQlyZXR1cm4gcHJvY2Vzc19leGl0X2V2ZW50KGV2ZW50KTsKKwljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKKwkJcmV0dXJuIHF1ZXVlX3NhbXBsZV9ldmVudChldmVudCk7CisKKwkvKgorCSAqIFdlIGRvbnQgcHJvY2VzcyB0aGVtIHJpZ2h0IG5vdyBidXQgdGhleSBhcmUgZmluZToKKwkgKi8KKwljYXNlIFBFUkZfUkVDT1JEX01NQVA6CisJY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKKwljYXNlIFBFUkZfUkVDT1JEX1VOVEhST1RUTEU6CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3NhbXBsZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc2FtcGxlX3dyYXBwZXIgKmN1cnNvcjsKKwlldmVudF90ICpldmVudDsKKworCXNvcnRfcXVldWVkX3NhbXBsZXMoKTsKKworCWN1cnNvciA9IGFsbF9zYW1wbGVzOworCXdoaWxlIChjdXJzb3IpIHsKKwkJZXZlbnQgPSAodm9pZCAqKSZjdXJzb3ItPmRhdGE7CisJCWN1cnNvciA9IGN1cnNvci0+bmV4dDsKKwkJcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgaW50IF9fY21kX3RpbWVjaGFydCh2b2lkKQoreworCWludCByZXQsIHJjID0gRVhJVF9GQUlMVVJFOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGhlYWQsIHNoaWZ0OworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJZXZlbnRfdCAqZXZlbnQ7CisJdWludDMyX3Qgc2l6ZTsKKwljaGFyICpidWY7CisJaW50IGlucHV0OworCisJaW5wdXQgPSBvcGVuKGlucHV0X25hbWUsIE9fUkRPTkxZKTsKKwlpZiAoaW5wdXQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiIGZhaWxlZCB0byBvcGVuIGZpbGU6ICVzIiwgaW5wdXRfbmFtZSk7CisJCWlmICghc3RyY21wKGlucHV0X25hbWUsICJwZXJmLmRhdGEiKSkKKwkJCWZwcmludGYoc3RkZXJyLCAiICAodHJ5ICdwZXJmIHJlY29yZCcgZmlyc3QpIik7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZXhpdCgtMSk7CisJfQorCisJcmV0ID0gZnN0YXQoaW5wdXQsICZzdGF0YnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoImZhaWxlZCB0byBzdGF0IGZpbGUiKTsKKwkJZXhpdCgtMSk7CisJfQorCisJaWYgKCFzdGF0YnVmLnN0X3NpemUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKKwkJZXhpdCgwKTsKKwl9CisKKwloZWFkZXIgPSBwZXJmX2hlYWRlcl9fcmVhZChpbnB1dCk7CisJaGVhZCA9IGhlYWRlci0+ZGF0YV9vZmZzZXQ7CisKKwlzYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShoZWFkZXIpOworCisJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CisJb2Zmc2V0ICs9IHNoaWZ0OworCWhlYWQgLT0gc2hpZnQ7CisKK3JlbWFwOgorCWJ1ZiA9IChjaGFyICopbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAorCQkJICAgTUFQX1NIQVJFRCwgaW5wdXQsIG9mZnNldCk7CisJaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIG1tYXAgZmlsZSIpOworCQlleGl0KC0xKTsKKwl9CisKK21vcmU6CisJZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKKworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisJaWYgKCFzaXplKQorCQlzaXplID0gODsKKworCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KSB7CisJCWludCByZXQyOworCisJCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOworCisJCXJldDIgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7CisJCWFzc2VydChyZXQyID09IDApOworCisJCW9mZnNldCArPSBzaGlmdDsKKwkJaGVhZCAtPSBzaGlmdDsKKwkJZ290byByZW1hcDsKKwl9CisKKwlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOworCisJaWYgKCFzaXplIHx8IHByb2Nlc3NfZXZlbnQoZXZlbnQpIDwgMCkgeworCisJCXByaW50ZigiJXAgWyVwXTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKKwkJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCisJCQlldmVudC0+aGVhZGVyLnR5cGUpOworCisJCS8qCisJCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCisJCSAqIGluY3JlbWVudCBhIHNpbmdsZSB1NjQgaW4gdGhlIGhvcGUgdG8gY2F0Y2ggb24gYWdhaW4gJ3Nvb24nLgorCQkgKi8KKworCQlpZiAodW5saWtlbHkoaGVhZCAmIDcpKQorCQkJaGVhZCAmPSB+N1VMTDsKKworCQlzaXplID0gODsKKwl9CisKKwloZWFkICs9IHNpemU7CisKKwlpZiAob2Zmc2V0ICsgaGVhZCA+PSBoZWFkZXItPmRhdGFfb2Zmc2V0ICsgaGVhZGVyLT5kYXRhX3NpemUpCisJCWdvdG8gZG9uZTsKKworCWlmIChvZmZzZXQgKyBoZWFkIDwgKHVuc2lnbmVkIGxvbmcpc3RhdGJ1Zi5zdF9zaXplKQorCQlnb3RvIG1vcmU7CisKK2RvbmU6CisJcmMgPSBFWElUX1NVQ0NFU1M7CisJY2xvc2UoaW5wdXQpOworCisKKwlwcm9jZXNzX3NhbXBsZXMoKTsKKworCWVuZF9zYW1wbGVfcHJvY2Vzc2luZygpOworCisJc29ydF9waWRzKCk7CisKKwl3cml0ZV9zdmdfZmlsZShvdXRwdXRfbmFtZSk7CisKKwlwcmludGYoIldyaXR0ZW4gJTIuMWYgc2Vjb25kcyBvZiB0cmFjZSB0byAlcy5cbiIsIChsYXN0X3RpbWUgLSBmaXJzdF90aW1lKSAvIDEwMDAwMDAwMDAuMCwgb3V0cHV0X25hbWUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRpbWVjaGFydF91c2FnZVtdID0geworCSJwZXJmIHRpbWVjaGFydCBbPG9wdGlvbnM+XSB7cmVjb3JkfSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnJlY29yZF9hcmdzW10gPSB7CisJInJlY29yZCIsCisJIi1hIiwKKwkiLVIiLAorCSItTSIsCisJIi1mIiwKKwkiLWMiLCAiMSIsCisJIi1lIiwgInBvd2VyOnBvd2VyX3N0YXJ0IiwKKwkiLWUiLCAicG93ZXI6cG93ZXJfZW5kIiwKKwkiLWUiLCAicG93ZXI6cG93ZXJfZnJlcXVlbmN5IiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfd2FrZXVwIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfc3dpdGNoIiwKK307CisKK3N0YXRpYyBpbnQgX19jbWRfcmVjb3JkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgcmVjX2FyZ2MsIGksIGo7CisJY29uc3QgY2hhciAqKnJlY19hcmd2OworCisJcmVjX2FyZ2MgPSBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKSArIGFyZ2MgLSAxOworCXJlY19hcmd2ID0gY2FsbG9jKHJlY19hcmdjICsgMSwgc2l6ZW9mKGNoYXIgKikpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpOyBpKyspCisJCXJlY19hcmd2W2ldID0gc3RyZHVwKHJlY29yZF9hcmdzW2ldKTsKKworCWZvciAoaiA9IDE7IGogPCAodW5zaWduZWQgaW50KWFyZ2M7IGorKywgaSsrKQorCQlyZWNfYXJndltpXSA9IGFyZ3Zbal07CisKKwlyZXR1cm4gY21kX3JlY29yZChpLCByZWNfYXJndiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKKwkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKKwlPUFRfU1RSSU5HKCdvJywgIm91dHB1dCIsICZvdXRwdXRfbmFtZSwgImZpbGUiLAorCQkgICAgIm91dHB1dCBmaWxlIG5hbWUiKSwKKwlPUFRfSU5URUdFUigndycsICJ3aWR0aCIsICZzdmdfcGFnZV93aWR0aCwKKwkJICAgICJwYWdlIHdpZHRoIiksCisJT1BUX0VORCgpCit9OworCisKK2ludCBjbWRfdGltZWNoYXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlzeW1ib2xfX2luaXQoKTsKKworCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCB0aW1lY2hhcnRfdXNhZ2UsCisJCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmIChhcmdjICYmICFzdHJuY21wKGFyZ3ZbMF0sICJyZWMiLCAzKSkKKwkJcmV0dXJuIF9fY21kX3JlY29yZChhcmdjLCBhcmd2KTsKKwllbHNlIGlmIChhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnModGltZWNoYXJ0X3VzYWdlLCBvcHRpb25zKTsKKworCXNldHVwX3BhZ2VyKCk7CisKKwlyZXR1cm4gX19jbWRfdGltZWNoYXJ0KCk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggNDAwMmNjYi4uMWNhODg4OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtOTAxLDcgKzkwMSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbW1hcF9yZWFkX2hlYWQoc3RydWN0IG1tYXBfZGF0YSAqbWQpCiB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9tbWFwX3BhZ2UgKnBjID0gbWQtPmJhc2U7CisJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICpwYyA9IG1kLT5iYXNlOwogCWludCBoZWFkOwogCiAJaGVhZCA9IHBjLT5kYXRhX2hlYWQ7CkBAIC05NzcsOSArOTc3LDkgQEAKIAogCQlvbGQgKz0gc2l6ZTsKIAotCQlpZiAoZXZlbnQtPmhlYWRlci50eXBlID09IFBFUkZfRVZFTlRfU0FNUExFKSB7CisJCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfU0FNUExFKSB7CiAJCQlpbnQgdXNlciA9Ci0JKGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfRVZFTlRfTUlTQ19DUFVNT0RFX01BU0spID09IFBFUkZfRVZFTlRfTUlTQ19VU0VSOworCShldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSykgPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOwogCQkJcHJvY2Vzc19ldmVudChldmVudC0+aXAuaXAsIG1kLT5jb3VudGVyLCB1c2VyKTsKIAkJfQogCX0KQEAgLTEwMDUsNyArMTAwNSw3IEBACiAKIHN0YXRpYyB2b2lkIHN0YXJ0X2NvdW50ZXIoaW50IGksIGludCBjb3VudGVyKQogewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyOwogCWludCBjcHU7CiAKIAljcHUgPSBwcm9maWxlX2NwdTsKQEAgLTEwMTksNyArMTAxOSw3IEBACiAJYXR0ci0+aW5oZXJpdAkJPSAoY3B1IDwgMCkgJiYgaW5oZXJpdDsKIAogdHJ5X2FnYWluOgotCWZkW2ldW2NvdW50ZXJdID0gc3lzX3BlcmZfY291bnRlcl9vcGVuKGF0dHIsIHRhcmdldF9waWQsIGNwdSwgZ3JvdXBfZmQsIDApOworCWZkW2ldW2NvdW50ZXJdID0gc3lzX3BlcmZfZXZlbnRfb3BlbihhdHRyLCB0YXJnZXRfcGlkLCBjcHUsIGdyb3VwX2ZkLCAwKTsKIAogCWlmIChmZFtpXVtjb3VudGVyXSA8IDApIHsKIAkJaW50IGVyciA9IGVycm5vOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAkJcHJpbnRmKCJcbiIpOwogCQllcnJvcigicGVyZmNvdW50ZXIgc3lzY2FsbCByZXR1cm5lZCB3aXRoICVkICglcylcbiIsCiAJCQlmZFtpXVtjb3VudGVyXSwgc3RyZXJyb3IoZXJyKSk7Ci0JCWRpZSgiTm8gQ09ORklHX1BFUkZfQ09VTlRFUlM9eSBrZXJuZWwgc3VwcG9ydCBjb25maWd1cmVkP1xuIik7CisJCWRpZSgiTm8gQ09ORklHX1BFUkZfRVZFTlRTPXkga2VybmVsIHN1cHBvcnQgY29uZmlndXJlZD9cbiIpOwogCQlleGl0KC0xKTsKIAl9CiAJYXNzZXJ0KGZkW2ldW2NvdW50ZXJdID49IDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwppbmRleCA5MTRhYjM2Li5lOWQyNTZlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpAQCAtMzUsMTQgKzM1LDE0IEBACiAKIAl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5jb21tLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UX0NPTU06ICVzOiVkXG4iLAorCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9DT01NOiAlczolZFxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwKIAkgICAgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsIGV2ZW50LT5jb21tLmNvbW0pKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9DT01NLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJdG90YWxfY29tbSsrOwpAQCAtODIsNyArODIsNyBAQAogCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7CiAJfQogCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfU0FNUExFIChJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX1NBTVBMRSAoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmhlYWRlci5taXNjLApAQCAtOTgsOSArOTgsOSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfRVZFTlRfTUlTQ19DUFVNT0RFX01BU0s7CisJY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwogCi0JaWYgKGNwdW1vZGUgPT0gUEVSRl9FVkVOVF9NSVNDX0tFUk5FTCkgeworCWlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKSB7CiAJCXNob3cgPSBTSE9XX0tFUk5FTDsKIAkJbGV2ZWwgPSAnayc7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAJCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsIGRzby0+bmFtZSk7CiAKLQl9IGVsc2UgaWYgKGNwdW1vZGUgPT0gUEVSRl9FVkVOVF9NSVNDX1VTRVIpIHsKKwl9IGVsc2UgaWYgKGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSKSB7CiAKIAkJc2hvdyA9IFNIT1dfVVNFUjsKIAkJbGV2ZWwgPSAnLic7CkBAIC0xNDYsMTkgKzE0NiwxOSBAQAogCXRyYWNlX2V2ZW50KGV2ZW50KTsKIAogCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7Ci0JY2FzZSBQRVJGX0VWRU5UX01NQVAgLi4uIFBFUkZfRVZFTlRfTE9TVDoKKwljYXNlIFBFUkZfUkVDT1JEX01NQVAgLi4uIFBFUkZfUkVDT1JEX0xPU1Q6CiAJCXJldHVybiAwOwogCi0JY2FzZSBQRVJGX0VWRU5UX0NPTU06CisJY2FzZSBQRVJGX1JFQ09SRF9DT01NOgogCQlyZXR1cm4gcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCi0JY2FzZSBQRVJGX0VWRU5UX0VYSVQgLi4uIFBFUkZfRVZFTlRfUkVBRDoKKwljYXNlIFBFUkZfUkVDT1JEX0VYSVQgLi4uIFBFUkZfUkVDT1JEX1JFQUQ6CiAJCXJldHVybiAwOwogCi0JY2FzZSBQRVJGX0VWRU5UX1NBTVBMRToKKwljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKIAkJcmV0dXJuIHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwogCi0JY2FzZSBQRVJGX0VWRU5UX01BWDoKKwljYXNlIFBFUkZfUkVDT1JEX01BWDoKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLmggYi90b29scy9wZXJmL2J1aWx0aW4uaAppbmRleCAzYTYzZTQxLi5lMTFkOGQyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4uaAorKysgYi90b29scy9wZXJmL2J1aWx0aW4uaApAQCAtMTYsMTIgKzE2LDE0IEBACiAKIGV4dGVybiBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2hlbHAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc2NoZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3N0YXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdGltZWNoYXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3RvcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7Ci1leHRlcm4gaW50IGNtZF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKLWV4dGVybiBpbnQgY21kX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdHJhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdmVyc2lvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0IGIvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CmluZGV4IGVlYmNlMzAuLjAwMzI2ZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dAorKysgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKQEAgLTQsNyArNCwxMCBAQAogIwogcGVyZi1hbm5vdGF0ZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWxpc3QJCQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi1zY2hlZAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXJlY29yZAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXJlcG9ydAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXN0YXQJCQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi10aW1lY2hhcnQJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi10b3AJCQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi10cmFjZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2Rlc2lnbi50eHQgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKaW5kZXggZjcxZTBkMi4uZjE5NDZkMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0CisrKyBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dApAQCAtMTgsMTAgKzE4LDEwIEBACiBQZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgYWNjZXNzZWQgdmlhIHNwZWNpYWwgZmlsZSBkZXNjcmlwdG9ycy4KIFRoZXJlJ3Mgb25lIGZpbGUgZGVzY3JpcHRvciBwZXIgdmlydHVhbCBjb3VudGVyIHVzZWQuCiAKLVRoZSBzcGVjaWFsIGZpbGUgZGVzY3JpcHRvciBpcyBvcGVuZWQgdmlhIHRoZSBwZXJmX2NvdW50ZXJfb3BlbigpCitUaGUgc3BlY2lhbCBmaWxlIGRlc2NyaXB0b3IgaXMgb3BlbmVkIHZpYSB0aGUgcGVyZl9ldmVudF9vcGVuKCkKIHN5c3RlbSBjYWxsOgogCi0gICBpbnQgc3lzX3BlcmZfY291bnRlcl9vcGVuKHN0cnVjdCBwZXJmX2NvdW50ZXJfaHdfZXZlbnQgKmh3X2V2ZW50X3VwdHIsCisgICBpbnQgc3lzX3BlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9od19ldmVudCAqaHdfZXZlbnRfdXB0ciwKIAkJCSAgICAgcGlkX3QgcGlkLCBpbnQgY3B1LCBpbnQgZ3JvdXBfZmQsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCkBAIC0zMiw5ICszMiw5IEBACiBNdWx0aXBsZSBjb3VudGVycyBjYW4gYmUga2VwdCBvcGVuIGF0IGEgdGltZSwgYW5kIHRoZSBjb3VudGVycwogY2FuIGJlIHBvbGwoKWVkLgogCi1XaGVuIGNyZWF0aW5nIGEgbmV3IGNvdW50ZXIgZmQsICdwZXJmX2NvdW50ZXJfaHdfZXZlbnQnIGlzOgorV2hlbiBjcmVhdGluZyBhIG5ldyBjb3VudGVyIGZkLCAncGVyZl9ldmVudF9od19ldmVudCcgaXM6CiAKLXN0cnVjdCBwZXJmX2NvdW50ZXJfaHdfZXZlbnQgeworc3RydWN0IHBlcmZfZXZlbnRfaHdfZXZlbnQgewogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgTVNCIG9mIHRoZSBjb25maWcgd29yZCBzaWduaWZpZXMgaWYgdGhlIHJlc3QgY29udGFpbnMgY3B1CiAgICAgICAgICAqIHNwZWNpZmljIChyYXcpIGNvdW50ZXIgY29uZmlndXJhdGlvbiBkYXRhLCBpZiB1bnNldCwgdGhlIG5leHQKQEAgLTkzLDcgKzkzLDcgQEAKIAogLyoKICAqIEdlbmVyYWxpemVkIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnQgdHlwZXMsIHVzZWQgYnkgdGhlIGh3X2V2ZW50LmV2ZW50X2lkCi0gKiBwYXJhbWV0ZXIgb2YgdGhlIHN5c19wZXJmX2NvdW50ZXJfb3BlbigpIHN5c2NhbGw6CisgKiBwYXJhbWV0ZXIgb2YgdGhlIHN5c19wZXJmX2V2ZW50X29wZW4oKSBzeXNjYWxsOgogICovCiBlbnVtIGh3X2V2ZW50X2lkcyB7CiAJLyoKQEAgLTE1OSw3ICsxNTksNyBAQAogICogcmVhZHMgb24gdGhlIGNvdW50ZXIgc2hvdWxkIHJldHVybiB0aGUgaW5kaWNhdGVkIHF1YW50aXRpZXMsCiAgKiBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJpdCB2YWx1ZSwgYWZ0ZXIgdGhlIGNvdW50ZXIgdmFsdWUuCiAgKi8KLWVudW0gcGVyZl9jb3VudGVyX3JlYWRfZm9ybWF0IHsKK2VudW0gcGVyZl9ldmVudF9yZWFkX2Zvcm1hdCB7CiAgICAgICAgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCAgPSAgMSwKICAgICAgICAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HICA9ICAyLAogfTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICogQml0cyB0aGF0IGNhbiBiZSBzZXQgaW4gaHdfZXZlbnQucmVjb3JkX3R5cGUgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbgogICogaW4gdGhlIG92ZXJmbG93IHBhY2tldHMuCiAgKi8KLWVudW0gcGVyZl9jb3VudGVyX3JlY29yZF9mb3JtYXQgeworZW51bSBwZXJmX2V2ZW50X3JlY29yZF9mb3JtYXQgewogICAgICAgICBQRVJGX1JFQ09SRF9JUCAgICAgICAgICA9IDFVIDw8IDAsCiAgICAgICAgIFBFUkZfUkVDT1JEX1RJRCAgICAgICAgID0gMVUgPDwgMSwKICAgICAgICAgUEVSRl9SRUNPUkRfVElNRSAgICAgICAgPSAxVSA8PCAyLApAQCAtMjI4LDcgKzIyOCw3IEBACiBUaGUgJ2NvbW0nIGJpdCBhbGxvd3MgdHJhY2tpbmcgb2YgcHJvY2VzcyBjb21tIGRhdGEgb24gcHJvY2VzcyBjcmVhdGlvbi4KIFRoaXMgdG9vIGlzIHJlY29yZGVkIGluIHRoZSByaW5nLWJ1ZmZlciAoc2VlIGJlbG93KS4KIAotVGhlICdwaWQnIHBhcmFtZXRlciB0byB0aGUgcGVyZl9jb3VudGVyX29wZW4oKSBzeXN0ZW0gY2FsbCBhbGxvd3MgdGhlCitUaGUgJ3BpZCcgcGFyYW1ldGVyIHRvIHRoZSBwZXJmX2V2ZW50X29wZW4oKSBzeXN0ZW0gY2FsbCBhbGxvd3MgdGhlCiBjb3VudGVyIHRvIGJlIHNwZWNpZmljIHRvIGEgdGFzazoKIAogIHBpZCA9PSAwOiBpZiB0aGUgcGlkIHBhcmFtZXRlciBpcyB6ZXJvLCB0aGUgY291bnRlciBpcyBhdHRhY2hlZCB0byB0aGUKQEAgLTI1OCw3ICsyNTgsNyBAQAogCiBUaGUgJ2dyb3VwX2ZkJyBwYXJhbWV0ZXIgYWxsb3dzIGNvdW50ZXIgImdyb3VwcyIgdG8gYmUgc2V0IHVwLiAgQQogY291bnRlciBncm91cCBoYXMgb25lIGNvdW50ZXIgd2hpY2ggaXMgdGhlIGdyb3VwICJsZWFkZXIiLiAgVGhlIGxlYWRlcgotaXMgY3JlYXRlZCBmaXJzdCwgd2l0aCBncm91cF9mZCA9IC0xIGluIHRoZSBwZXJmX2NvdW50ZXJfb3BlbiBjYWxsCitpcyBjcmVhdGVkIGZpcnN0LCB3aXRoIGdyb3VwX2ZkID0gLTEgaW4gdGhlIHBlcmZfZXZlbnRfb3BlbiBjYWxsCiB0aGF0IGNyZWF0ZXMgaXQuICBUaGUgcmVzdCBvZiB0aGUgZ3JvdXAgbWVtYmVycyBhcmUgY3JlYXRlZAogc3Vic2VxdWVudGx5LCB3aXRoIGdyb3VwX2ZkIGdpdmluZyB0aGUgZmQgb2YgdGhlIGdyb3VwIGxlYWRlci4KIChBIHNpbmdsZSBjb3VudGVyIG9uIGl0cyBvd24gaXMgY3JlYXRlZCB3aXRoIGdyb3VwX2ZkID0gLTEgYW5kIGlzCkBAIC0yNzcsMTMgKzI3NywxMyBAQAogYWNjZXNzZWQgdGhyb3VnaCBtbWFwKCkuCiAKIFRoZSBtbWFwIHNpemUgc2hvdWxkIGJlIDErMl5uIHBhZ2VzLCB3aGVyZSB0aGUgZmlyc3QgcGFnZSBpcyBhIG1ldGEtZGF0YSBwYWdlCi0oc3RydWN0IHBlcmZfY291bnRlcl9tbWFwX3BhZ2UpIHRoYXQgY29udGFpbnMgdmFyaW91cyBiaXRzIG9mIGluZm9ybWF0aW9uIHN1Y2gKKyhzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UpIHRoYXQgY29udGFpbnMgdmFyaW91cyBiaXRzIG9mIGluZm9ybWF0aW9uIHN1Y2gKIGFzIHdoZXJlIHRoZSByaW5nLWJ1ZmZlciBoZWFkIGlzLgogCiAvKgogICogU3RydWN0dXJlIG9mIHRoZSBwYWdlIHRoYXQgY2FuIGJlIG1hcHBlZCB2aWEgbW1hcAogICovCi1zdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSB7CitzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgewogICAgICAgICBfX3UzMiAgIHZlcnNpb247ICAgICAgICAgICAgICAgIC8qIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgc3RydWN0dXJlICovCiAgICAgICAgIF9fdTMyICAgY29tcGF0X3ZlcnNpb247ICAgICAgICAgLyogbG93ZXN0IHZlcnNpb24gdGhpcyBpcyBjb21wYXQgd2l0aCAqLwogCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgICogQ29udHJvbCBkYXRhIGZvciB0aGUgbW1hcCgpIGRhdGEgYnVmZmVyLgogICAgICAgICAgKgogICAgICAgICAgKiBVc2VyLXNwYWNlIHJlYWRpbmcgdGhpcyB2YWx1ZSBzaG91bGQgaXNzdWUgYW4gcm1iKCksIG9uIFNNUCBjYXBhYmxlCi0gICAgICAgICAqIHBsYXRmb3JtcywgYWZ0ZXIgcmVhZGluZyB0aGlzIHZhbHVlIC0tIHNlZSBwZXJmX2NvdW50ZXJfd2FrZXVwKCkuCisgICAgICAgICAqIHBsYXRmb3JtcywgYWZ0ZXIgcmVhZGluZyB0aGlzIHZhbHVlIC0tIHNlZSBwZXJmX2V2ZW50X3dha2V1cCgpLgogICAgICAgICAgKi8KICAgICAgICAgX191MzIgICBkYXRhX2hlYWQ7ICAgICAgICAgICAgICAvKiBoZWFkIGluIHRoZSBkYXRhIHNlY3Rpb24gKi8KIH07CkBAIC0zMjcsOSArMzI3LDkgQEAKIAogVGhlIGZvbGxvd2luZyAyXm4gcGFnZXMgYXJlIHRoZSByaW5nLWJ1ZmZlciB3aGljaCBjb250YWlucyBldmVudHMgb2YgdGhlIGZvcm06CiAKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0tFUk5FTCAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBQRVJGX0VWRU5UX01JU0NfVVNFUiAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19PVkVSRkxPVyAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19VU0VSICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19PVkVSRkxPVyAgICAgICAgKDEgPDwgMikKIAogc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIHsKICAgICAgICAgX191MzIgICB0eXBlOwpAQCAtMzUzLDggKzM1Myw4IEBACiAgICAgICAgICAqICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZVtdOwogICAgICAgICAgKiB9OwogICAgICAgICAgKi8KLSAgICAgICAgUEVSRl9FVkVOVF9NTUFQICAgICAgICAgICAgICAgICA9IDEsCi0gICAgICAgIFBFUkZfRVZFTlRfTVVOTUFQICAgICAgICAgICAgICAgPSAyLAorICAgICAgICBQRVJGX1JFQ09SRF9NTUFQICAgICAgICAgICAgICAgICA9IDEsCisgICAgICAgIFBFUkZfUkVDT1JEX01VTk1BUCAgICAgICAgICAgICAgID0gMiwKIAogICAgICAgICAvKgogICAgICAgICAgKiBzdHJ1Y3QgewpAQCAtMzY0LDEwICszNjQsMTAgQEAKICAgICAgICAgICogICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1bXTsKICAgICAgICAgICogfTsKICAgICAgICAgICovCi0gICAgICAgIFBFUkZfRVZFTlRfQ09NTSAgICAgICAgICAgICAgICAgPSAzLAorICAgICAgICBQRVJGX1JFQ09SRF9DT01NICAgICAgICAgICAgICAgICA9IDMsCiAKICAgICAgICAgLyoKLSAgICAgICAgICogV2hlbiBoZWFkZXIubWlzYyAmIFBFUkZfRVZFTlRfTUlTQ19PVkVSRkxPVyB0aGUgZXZlbnRfdHlwZSBmaWVsZAorICAgICAgICAgKiBXaGVuIGhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19PVkVSRkxPVyB0aGUgZXZlbnRfdHlwZSBmaWVsZAogICAgICAgICAgKiB3aWxsIGJlIFBFUkZfUkVDT1JEXyoKICAgICAgICAgICoKICAgICAgICAgICogc3RydWN0IHsKQEAgLTM5Nyw3ICszOTcsNyBAQAogZmNudGwoKSBtYW5hZ2luZyBzaWduYWxzLgogCiBOb3JtYWxseSBhIG5vdGlmaWNhdGlvbiBpcyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IHBhZ2UgZmlsbGVkLCBob3dldmVyIG9uZSBjYW4KLWFkZGl0aW9uYWxseSBzZXQgcGVyZl9jb3VudGVyX2h3X2V2ZW50Lndha2V1cF9ldmVudHMgdG8gZ2VuZXJhdGUgb25lIGV2ZXJ5CithZGRpdGlvbmFsbHkgc2V0IHBlcmZfZXZlbnRfaHdfZXZlbnQud2FrZXVwX2V2ZW50cyB0byBnZW5lcmF0ZSBvbmUgZXZlcnkKIHNvIG1hbnkgY291bnRlciBvdmVyZmxvdyBldmVudHMuCiAKIEZ1dHVyZSB3b3JrIHdpbGwgaW5jbHVkZSBhIHNwbGljZSgpIGludGVyZmFjZSB0byB0aGUgcmluZy1idWZmZXIuCkBAIC00MDksMTEgKzQwOSwxMSBAQAogCiBBbiBpbmRpdmlkdWFsIGNvdW50ZXIgb3IgY291bnRlciBncm91cCBjYW4gYmUgZW5hYmxlZCB3aXRoCiAKLQlpb2N0bChmZCwgUEVSRl9DT1VOVEVSX0lPQ19FTkFCTEUpOworCWlvY3RsKGZkLCBQRVJGX0VWRU5UX0lPQ19FTkFCTEUpOwogCiBvciBkaXNhYmxlZCB3aXRoCiAKLQlpb2N0bChmZCwgUEVSRl9DT1VOVEVSX0lPQ19ESVNBQkxFKTsKKwlpb2N0bChmZCwgUEVSRl9FVkVOVF9JT0NfRElTQUJMRSk7CiAKIEVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgbGVhZGVyIG9mIGEgZ3JvdXAgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUKIHdob2xlIGdyb3VwOyB0aGF0IGlzLCB3aGlsZSB0aGUgZ3JvdXAgbGVhZGVyIGlzIGRpc2FibGVkLCBub25lIG9mIHRoZQpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKIAogQWRkaXRpb25hbGx5LCBub24taW5oZXJpdGVkIG92ZXJmbG93IGNvdW50ZXJzIGNhbiB1c2UKIAotCWlvY3RsKGZkLCBQRVJGX0NPVU5URVJfSU9DX1JFRlJFU0gsIG5yKTsKKwlpb2N0bChmZCwgUEVSRl9FVkVOVF9JT0NfUkVGUkVTSCwgbnIpOwogCiB0byBlbmFibGUgYSBjb3VudGVyIGZvciAnbnInIGV2ZW50cywgYWZ0ZXIgd2hpY2ggaXQgZ2V0cyBkaXNhYmxlZCBhZ2Fpbi4KIAogQSBwcm9jZXNzIGNhbiBlbmFibGUgb3IgZGlzYWJsZSBhbGwgdGhlIGNvdW50ZXIgZ3JvdXBzIHRoYXQgYXJlCiBhdHRhY2hlZCB0byBpdCwgdXNpbmcgcHJjdGw6CiAKLQlwcmN0bChQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRU5BQkxFKTsKKwlwcmN0bChQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRSk7CiAKLQlwcmN0bChQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRElTQUJMRSk7CisJcHJjdGwoUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFKTsKIAogVGhpcyBhcHBsaWVzIHRvIGFsbCBjb3VudGVycyBvbiB0aGUgY3VycmVudCBwcm9jZXNzLCB3aGV0aGVyIGNyZWF0ZWQKIGJ5IHRoaXMgcHJvY2VzcyBvciBieSBhbm90aGVyLCBhbmQgZG9lc24ndCBhZmZlY3QgYW55IGNvdW50ZXJzIHRoYXQKQEAgLTQ0NywxMSArNDQ3LDExIEBACiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBoYXZlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIG1ldHJpY3MsIHlvdSBjYW4KIHN0aWxsIHVzZSB0aGUgZ2VuZXJpYyBzb2Z0d2FyZSBjb3VudGVycyBiYXNlZCBvbiBocnRpbWVycyBmb3Igc2FtcGxpbmcuCiAKLVNvIHRvIHN0YXJ0IHdpdGgsIGluIG9yZGVyIHRvIGFkZCBIQVZFX1BFUkZfQ09VTlRFUlMgdG8geW91ciBLY29uZmlnLCB5b3UKK1NvIHRvIHN0YXJ0IHdpdGgsIGluIG9yZGVyIHRvIGFkZCBIQVZFX1BFUkZfRVZFTlRTIHRvIHlvdXIgS2NvbmZpZywgeW91CiB3aWxsIG5lZWQgYXQgbGVhc3QgdGhpczoKLQktIGFzbS9wZXJmX2NvdW50ZXIuaCAtIGEgYmFzaWMgc3R1YiB3aWxsIHN1ZmZpY2UgYXQgZmlyc3QKKwktIGFzbS9wZXJmX2V2ZW50LmggLSBhIGJhc2ljIHN0dWIgd2lsbCBzdWZmaWNlIGF0IGZpcnN0CiAJLSBzdXBwb3J0IGZvciBhdG9taWM2NCB0eXBlcyAoYW5kIGFzc29jaWF0ZWQgaGVscGVyIGZ1bmN0aW9ucykKLQktIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZygpIGltcGxlbWVudGVkCisJLSBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKCkgaW1wbGVtZW50ZWQKIAogSWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lcyBoYXZlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgeW91IGNhbiBvdmVycmlkZSB0aGUKLXdlYWsgc3R1YiBod19wZXJmX2NvdW50ZXJfaW5pdCgpIHRvIHJlZ2lzdGVyIGhhcmR3YXJlIGNvdW50ZXJzLgord2VhayBzdHViIGh3X3BlcmZfZXZlbnRfaW5pdCgpIHRvIHJlZ2lzdGVyIGhhcmR3YXJlIGNvdW50ZXJzLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmMgYi90b29scy9wZXJmL3BlcmYuYwppbmRleCBmZTQ1ODlkLi4xOWZjN2ZlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuYworKysgYi90b29scy9wZXJmL3BlcmYuYwpAQCAtMjg5LDEwICsyODksMTIgQEAKIAkJeyAicmVjb3JkIiwgY21kX3JlY29yZCwgMCB9LAogCQl7ICJyZXBvcnQiLCBjbWRfcmVwb3J0LCAwIH0sCiAJCXsgInN0YXQiLCBjbWRfc3RhdCwgMCB9LAorCQl7ICJ0aW1lY2hhcnQiLCBjbWRfdGltZWNoYXJ0LCAwIH0sCiAJCXsgInRvcCIsIGNtZF90b3AsIDAgfSwKIAkJeyAiYW5ub3RhdGUiLCBjbWRfYW5ub3RhdGUsIDAgfSwKIAkJeyAidmVyc2lvbiIsIGNtZF92ZXJzaW9uLCAwIH0sCiAJCXsgInRyYWNlIiwgY21kX3RyYWNlLCAwIH0sCisJCXsgInNjaGVkIiwgY21kX3NjaGVkLCAwIH0sCiAJfTsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdGF0aWMgY29uc3QgY2hhciBleHRbXSA9IFNUUklQX0VYVEVOU0lPTjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5oIGIvdG9vbHMvcGVyZi9wZXJmLmgKaW5kZXggMmFiZWIyMC4uOGNjNDYyMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmgKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmgKQEAgLTUyLDE1ICs1MiwxNSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAKLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvdHlwZXMuaCIKIAogLyoKLSAqIHByY3RsKFBSX1RBU0tfUEVSRl9DT1VOVEVSU19ESVNBQkxFKSB3aWxsIChjaGVhcGx5KSBkaXNhYmxlIGFsbAorICogcHJjdGwoUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFKSB3aWxsIChjaGVhcGx5KSBkaXNhYmxlIGFsbAogICogY291bnRlcnMgaW4gdGhlIGN1cnJlbnQgdGFzay4KICAqLwotI2RlZmluZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRElTQUJMRSAgIDMxCi0jZGVmaW5lIFBSX1RBU0tfUEVSRl9DT1VOVEVSU19FTkFCTEUgICAgMzIKKyNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFICAgMzEKKyNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUgICAgMzIKIAogI2lmbmRlZiBOU0VDX1BFUl9TRUMKICMgZGVmaW5lIE5TRUNfUEVSX1NFQwkJCTEwMDAwMDAwMDBVTEwKQEAgLTkwLDEyICs5MCwxMiBAQAogCV9taW4xIDwgX21pbjIgPyBfbWluMSA6IF9taW4yOyB9KQogCiBzdGF0aWMgaW5saW5lIGludAotc3lzX3BlcmZfY291bnRlcl9vcGVuKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0ciwKK3N5c19wZXJmX2V2ZW50X29wZW4oc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKIAkJICAgICAgcGlkX3QgcGlkLCBpbnQgY3B1LCBpbnQgZ3JvdXBfZmQsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJYXR0ci0+c2l6ZSA9IHNpemVvZigqYXR0cik7Ci0JcmV0dXJuIHN5c2NhbGwoX19OUl9wZXJmX2NvdW50ZXJfb3BlbiwgYXR0ciwgcGlkLCBjcHUsCisJcmV0dXJuIHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sIGF0dHIsIHBpZCwgY3B1LAogCQkgICAgICAgZ3JvdXBfZmQsIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCBmYTJkNGU5Li4yYzljMjZkNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9fUEVSRl9FVkVOVF9ICi0jZGVmaW5lIF9fUEVSRl9FVkVOVF9ICisjaWZuZGVmIF9fUEVSRl9SRUNPUkRfSAorI2RlZmluZSBfX1BFUkZfUkVDT1JEX0gKICNpbmNsdWRlICIuLi9wZXJmLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTM5LDYgKzM5LDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwogCXUzMiBwaWQsIHBwaWQ7CiAJdTMyIHRpZCwgcHRpZDsKKwl1NjQgdGltZTsKIH07CiAKIHN0cnVjdCBsb3N0X2V2ZW50IHsKQEAgLTUyLDEzICs1MywxOSBAQAogICovCiBzdHJ1Y3QgcmVhZF9ldmVudCB7CiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKLQl1MzIgcGlkLHRpZDsKKwl1MzIgcGlkLCB0aWQ7CiAJdTY0IHZhbHVlOwogCXU2NCB0aW1lX2VuYWJsZWQ7CiAJdTY0IHRpbWVfcnVubmluZzsKIAl1NjQgaWQ7CiB9OwogCitzdHJ1Y3Qgc2FtcGxlX2V2ZW50eworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAgICAgICAgaGVhZGVyOworCXU2NCBhcnJheVtdOworfTsKKworCiB0eXBlZGVmIHVuaW9uIGV2ZW50X3VuaW9uIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCXN0cnVjdCBpcF9ldmVudAkJCWlwOwpAQCAtNjcsNiArNzQsNyBAQAogCXN0cnVjdCBmb3JrX2V2ZW50CQlmb3JrOwogCXN0cnVjdCBsb3N0X2V2ZW50CQlsb3N0OwogCXN0cnVjdCByZWFkX2V2ZW50CQlyZWFkOworCXN0cnVjdCBzYW1wbGVfZXZlbnQJCXNhbXBsZTsKIH0gZXZlbnRfdDsKIAogc3RydWN0IG1hcCB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKaW5kZXggZWM0ZDRjMi4uZTMwNjg1NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwpAQCAtNywxMCArNyw5IEBACiAjaW5jbHVkZSAiaGVhZGVyLmgiCiAKIC8qCi0gKgorICogQ3JlYXRlIG5ldyBwZXJmLmRhdGEgaGVhZGVyIGF0dHJpYnV0ZToKICAqLwotCi1zdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqcGVyZl9oZWFkZXJfYXR0cl9fbmV3KHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cikKK3N0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpwZXJmX2hlYWRlcl9hdHRyX19uZXcoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKIApAQCAtNDMsOSArNDIsOCBAQAogfQogCiAvKgotICoKKyAqIENyZWF0ZSBuZXcgcGVyZi5kYXRhIGhlYWRlcjoKICAqLwotCiBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBlcmZfaGVhZGVyX19uZXcodm9pZCkKIHsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CkBAIC04Niw2ICs4NCw0NiBAQAogCXNlbGYtPmF0dHJbcG9zXSA9IGF0dHI7CiB9CiAKKyNkZWZpbmUgTUFYX0VWRU5UX05BTUUgNjQKKworc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSB7CisJdTY0CWV2ZW50X2lkOworCWNoYXIJbmFtZVtNQVhfRVZFTlRfTkFNRV07Cit9OworCitzdGF0aWMgaW50IGV2ZW50X2NvdW50Oworc3RhdGljIHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUgKmV2ZW50czsKKwordm9pZCBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudCh1NjQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHN0cmxlbihuYW1lKSA+IE1BWF9FVkVOVF9OQU1FKQorCQlwcmludGYoIkV2ZW50ICVzIHdpbGwgYmUgdHJ1bmNhdGVkXG4iLCBuYW1lKTsKKworCWlmICghZXZlbnRzKSB7CisJCWV2ZW50cyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOworCQlpZiAoIWV2ZW50cykKKwkJCWRpZSgibm9tZW0iKTsKKwl9IGVsc2UgeworCQlldmVudHMgPSByZWFsbG9jKGV2ZW50cywgKGV2ZW50X2NvdW50ICsgMSkgKiBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOworCQlpZiAoIWV2ZW50cykKKwkJCWRpZSgibm9tZW0iKTsKKwl9CisJbWVtc2V0KCZldmVudHNbZXZlbnRfY291bnRdLCAwLCBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOworCWV2ZW50c1tldmVudF9jb3VudF0uZXZlbnRfaWQgPSBpZDsKKwlzdHJuY3B5KGV2ZW50c1tldmVudF9jb3VudF0ubmFtZSwgbmFtZSwgTUFYX0VWRU5UX05BTUUgLSAxKTsKKwlldmVudF9jb3VudCsrOworfQorCitjaGFyICpwZXJmX2hlYWRlcl9fZmluZF9ldmVudCh1NjQgaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMCA7IGkgPCBldmVudF9jb3VudDsgaSsrKSB7CisJCWlmIChldmVudHNbaV0uZXZlbnRfaWQgPT0gaWQpCisJCQlyZXR1cm4gZXZlbnRzW2ldLm5hbWU7CisJfQorCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqX19wZXJmX21hZ2ljID0gIlBFUkZGSUxFIjsKIAogI2RlZmluZSBQRVJGX01BR0lDCSgqKHU2NCAqKV9fcGVyZl9tYWdpYykKQEAgLTk2LDcgKzEzNCw3IEBACiB9OwogCiBzdHJ1Y3QgcGVyZl9maWxlX2F0dHIgewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0cglhdHRyOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJYXR0cjsKIAlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24JaWRzOwogfTsKIApAQCAtMTA2LDYgKzE0NCw3IEBACiAJdTY0CQkJCWF0dHJfc2l6ZTsKIAlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24JYXR0cnM7CiAJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uCWRhdGE7CisJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uCWV2ZW50X3R5cGVzOwogfTsKIAogc3RhdGljIHZvaWQgZG9fd3JpdGUoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQpAQCAtMTU0LDYgKzE5MywxMSBAQAogCQlkb193cml0ZShmZCwgJmZfYXR0ciwgc2l6ZW9mKGZfYXR0cikpOwogCX0KIAorCXNlbGYtPmV2ZW50X29mZnNldCA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CisJc2VsZi0+ZXZlbnRfc2l6ZSA9IGV2ZW50X2NvdW50ICogc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpOworCWlmIChldmVudHMpCisJCWRvX3dyaXRlKGZkLCBldmVudHMsIHNlbGYtPmV2ZW50X3NpemUpOworCiAKIAlzZWxmLT5kYXRhX29mZnNldCA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CiAKQEAgLTE2OSw2ICsyMTMsMTAgQEAKIAkJCS5vZmZzZXQgPSBzZWxmLT5kYXRhX29mZnNldCwKIAkJCS5zaXplCT0gc2VsZi0+ZGF0YV9zaXplLAogCQl9LAorCQkuZXZlbnRfdHlwZXMgPSB7CisJCQkub2Zmc2V0ID0gc2VsZi0+ZXZlbnRfb2Zmc2V0LAorCQkJLnNpemUJPSBzZWxmLT5ldmVudF9zaXplLAorCQl9LAogCX07CiAKIAlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwpAQCAtMjM0LDYgKzI4MiwxNyBAQAogCQlsc2VlayhmZCwgdG1wLCBTRUVLX1NFVCk7CiAJfQogCisJaWYgKGZfaGVhZGVyLmV2ZW50X3R5cGVzLnNpemUpIHsKKwkJbHNlZWsoZmQsIGZfaGVhZGVyLmV2ZW50X3R5cGVzLm9mZnNldCwgU0VFS19TRVQpOworCQlldmVudHMgPSBtYWxsb2MoZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSk7CisJCWlmICghZXZlbnRzKQorCQkJZGllKCJub21lbSIpOworCQlkb19yZWFkKGZkLCBldmVudHMsIGZfaGVhZGVyLmV2ZW50X3R5cGVzLnNpemUpOworCQlldmVudF9jb3VudCA9ICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplIC8gc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpOworCX0KKwlzZWxmLT5ldmVudF9vZmZzZXQgPSBmX2hlYWRlci5ldmVudF90eXBlcy5vZmZzZXQ7CisJc2VsZi0+ZXZlbnRfc2l6ZSAgID0gZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZTsKKwogCXNlbGYtPmRhdGFfb2Zmc2V0ID0gZl9oZWFkZXIuZGF0YS5vZmZzZXQ7CiAJc2VsZi0+ZGF0YV9zaXplICAgPSBmX2hlYWRlci5kYXRhLnNpemU7CiAKQEAgLTI2MSw3ICszMjAsNyBAQAogCXJldHVybiB0eXBlOwogfQogCi1zdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKgorc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqCiBwZXJmX2hlYWRlcl9fZmluZF9hdHRyKHU2NCBpZCwgc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmggYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKaW5kZXggNWQwYTcyZS4uYTA3NjFiYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaApAQCAtMSwxMiArMSwxMiBAQAogI2lmbmRlZiBfUEVSRl9IRUFERVJfSAogI2RlZmluZSBfUEVSRl9IRUFERVJfSAogCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlICJ0eXBlcy5oIgogCiBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9hdHRyIGF0dHI7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCWludCBpZHMsIHNpemU7CiAJdTY0ICppZDsKIAlvZmZfdCBpZF9vZmZzZXQ7CkBAIC0xOSw2ICsxOSw4IEBACiAJczY0IGF0dHJfb2Zmc2V0OwogCXU2NCBkYXRhX29mZnNldDsKIAl1NjQgZGF0YV9zaXplOworCXU2NCBldmVudF9vZmZzZXQ7CisJdTY0IGV2ZW50X3NpemU7CiB9OwogCiBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBlcmZfaGVhZGVyX19yZWFkKGludCBmZCk7CkBAIC0yNywxMiArMjksMTYgQEAKIHZvaWQgcGVyZl9oZWFkZXJfX2FkZF9hdHRyKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKIAkJCSAgIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyKTsKIAordm9pZCBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudCh1NjQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqcGVyZl9oZWFkZXJfX2ZpbmRfZXZlbnQodTY0IGlkKTsKKworCiBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqCi1wZXJmX2hlYWRlcl9hdHRyX19uZXcoc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKTsKK3BlcmZfaGVhZGVyX2F0dHJfX25ldyhzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKTsKIHZvaWQgcGVyZl9oZWFkZXJfYXR0cl9fYWRkX2lkKHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpzZWxmLCB1NjQgaWQpOwogCiB1NjQgcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKTsKLXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqCitzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICoKIHBlcmZfaGVhZGVyX19maW5kX2F0dHIodTY0IGlkLCBzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlcik7CiAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IGE1ODdkNDEuLjEzYWI0YjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTYsMTAgKzYsMTEgQEAKICNpbmNsdWRlICJleGVjX2NtZC5oIgogI2luY2x1ZGUgInN0cmluZy5oIgogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiaGVhZGVyLmgiCiAKIGludAkJCQkJbnJfY291bnRlcnM7CiAKLXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0cgkJYXR0cnNbTUFYX0NPVU5URVJTXTsKK3N0cnVjdCBwZXJmX2V2ZW50X2F0dHIJCWF0dHJzW01BWF9DT1VOVEVSU107CiAKIHN0cnVjdCBldmVudF9zeW1ib2wgewogCXU4CQl0eXBlOwpAQCAtMTgsNiArMTksMTIgQEAKIAljb25zdCBjaGFyCSphbGlhczsKIH07CiAKK2VudW0gZXZlbnRfcmVzdWx0IHsKKwlFVlRfRkFJTEVELAorCUVWVF9IQU5ETEVELAorCUVWVF9IQU5ETEVEX0FMTAorfTsKKwogY2hhciBkZWJ1Z2ZzX3BhdGhbTUFYUEFUSExFTl07CiAKICNkZWZpbmUgQ0hXKHgpIC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV18jI3gKQEAgLTQxLDEzICs0OCwxMyBAQAogICB7IENTVyhDUFVfTUlHUkFUSU9OUyksCSJjcHUtbWlncmF0aW9ucyIsCSJtaWdyYXRpb25zIgl9LAogfTsKIAotI2RlZmluZSBfX1BFUkZfQ09VTlRFUl9GSUVMRChjb25maWcsIG5hbWUpIFwKLQkoKGNvbmZpZyAmIFBFUkZfQ09VTlRFUl8jI25hbWUjI19NQVNLKSA+PiBQRVJGX0NPVU5URVJfIyNuYW1lIyNfU0hJRlQpCisjZGVmaW5lIF9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIG5hbWUpIFwKKwkoKGNvbmZpZyAmIFBFUkZfRVZFTlRfIyNuYW1lIyNfTUFTSykgPj4gUEVSRl9FVkVOVF8jI25hbWUjI19TSElGVCkKIAotI2RlZmluZSBQRVJGX0NPVU5URVJfUkFXKGNvbmZpZykJX19QRVJGX0NPVU5URVJfRklFTEQoY29uZmlnLCBSQVcpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9DT05GSUcoY29uZmlnKQlfX1BFUkZfQ09VTlRFUl9GSUVMRChjb25maWcsIENPTkZJRykKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX1RZUEUoY29uZmlnKQlfX1BFUkZfQ09VTlRFUl9GSUVMRChjb25maWcsIFRZUEUpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JRChjb25maWcpCQlfX1BFUkZfQ09VTlRFUl9GSUVMRChjb25maWcsIEVWRU5UKQorI2RlZmluZSBQRVJGX0VWRU5UX1JBVyhjb25maWcpCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIFJBVykKKyNkZWZpbmUgUEVSRl9FVkVOVF9DT05GSUcoY29uZmlnKQlfX1BFUkZfRVZFTlRfRklFTEQoY29uZmlnLCBDT05GSUcpCisjZGVmaW5lIFBFUkZfRVZFTlRfVFlQRShjb25maWcpCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIFRZUEUpCisjZGVmaW5lIFBFUkZfRVZFTlRfSUQoY29uZmlnKQkJX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgRVZFTlQpCiAKIHN0YXRpYyBjb25zdCBjaGFyICpod19ldmVudF9uYW1lc1tdID0gewogCSJjeWNsZXMiLApAQCAtMTM5LDcgKzE0Niw3IEBACiAJICAgKHN0cmNtcChldnRfZGlyZW50LmRfbmFtZSwgIi4uIikpICYmCQkJCSAgICAgICBcCiAJICAgKCF0cF9ldmVudF9oYXNfaWQoJnN5c19kaXJlbnQsICZldnRfZGlyZW50KSkpCiAKLSNkZWZpbmUgTUFYX0VWRU5UX0xFTkdUSCAzMAorI2RlZmluZSBNQVhfRVZFTlRfTEVOR1RIIDUxMgogCiBpbnQgdmFsaWRfZGVidWdmc19tb3VudChjb25zdCBjaGFyICpkZWJ1Z2ZzKQogewpAQCAtMzQ0LDggKzM1MSw4IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50Ci1wYXJzZV9nZW5lcmljX2h3X2V2ZW50KGNvbnN0IGNoYXIgKipzdHIsIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cikKK3N0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAorcGFyc2VfZ2VuZXJpY19od19ldmVudChjb25zdCBjaGFyICoqc3RyLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCWNvbnN0IGNoYXIgKnMgPSAqc3RyOwogCWludCBjYWNoZV90eXBlID0gLTEsIGNhY2hlX29wID0gLTEsIGNhY2hlX3Jlc3VsdCA9IC0xOwpAQCAtMzU2LDcgKzM2Myw3IEBACiAJICogdGhlbiBiYWlsIG91dDoKIAkgKi8KIAlpZiAoY2FjaGVfdHlwZSA9PSAtMSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBFVlRfRkFJTEVEOwogCiAJd2hpbGUgKChjYWNoZV9vcCA9PSAtMSB8fCBjYWNoZV9yZXN1bHQgPT0gLTEpICYmICpzID09ICctJykgewogCQkrK3M7CkBAIC00MDIsMjcgKzQwOSwxMTUgQEAKIAlhdHRyLT50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFOwogCiAJKnN0ciA9IHM7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIEVWVF9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX3RyYWNlcG9pbnRfZXZlbnQoY29uc3QgY2hhciAqKnN0cnAsCi0JCQkJICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cikKK3N0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAorcGFyc2Vfc2luZ2xlX3RyYWNlcG9pbnRfZXZlbnQoY2hhciAqc3lzX25hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpldnRfbmFtZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBldnRfbGVuZ3RoLAorCQkJICAgICAgY2hhciAqZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqKnN0cnApCit7CisJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyIGlkX2J1Zls0XTsKKwl1NjQgaWQ7CisJaW50IGZkOworCisJaWYgKGZsYWdzKSB7CisJCWlmICghc3RybmNtcChmbGFncywgInJlY29yZCIsIHN0cmxlbihmbGFncykpKSB7CisJCQlhdHRyLT5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9SQVc7CisJCQlhdHRyLT5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9USU1FOworCQkJYXR0ci0+c2FtcGxlX3R5cGUgfD0gUEVSRl9TQU1QTEVfQ1BVOworCQl9CisJfQorCisJc25wcmludGYoZXZ0X3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcy8lcy9pZCIsIGRlYnVnZnNfcGF0aCwKKwkJIHN5c19uYW1lLCBldnRfbmFtZSk7CisKKwlmZCA9IG9wZW4oZXZ0X3BhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gRVZUX0ZBSUxFRDsKKworCWlmIChyZWFkKGZkLCBpZF9idWYsIHNpemVvZihpZF9idWYpKSA8IDApIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gRVZUX0ZBSUxFRDsKKwl9CisKKwljbG9zZShmZCk7CisJaWQgPSBhdG9sbChpZF9idWYpOworCWF0dHItPmNvbmZpZyA9IGlkOworCWF0dHItPnR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKKwkqc3RycCA9IGV2dF9uYW1lICsgZXZ0X2xlbmd0aDsKKworCXJldHVybiBFVlRfSEFORExFRDsKK30KKworLyogc3lzICsgJzonICsgZXZlbnQgKyAnOicgKyBmbGFncyovCisjZGVmaW5lIE1BWF9FVk9QVF9MRU4JKE1BWF9FVkVOVF9MRU5HVEggKiAyICsgMiArIDEyOCkKK3N0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAorcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoY2hhciAqc3lzX25hbWUsIGNoYXIgKmZsYWdzKQoreworCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CisJc3RydWN0IGRpcmVudCAqZXZ0X2VudDsKKwlESVIgKmV2dF9kaXI7CisKKwlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwgZGVidWdmc19wYXRoLCBzeXNfbmFtZSk7CisJZXZ0X2RpciA9IG9wZW5kaXIoZXZ0X3BhdGgpOworCisJaWYgKCFldnRfZGlyKSB7CisJCXBlcnJvcigiQ2FuJ3Qgb3BlbiBldmVudCBkaXIiKTsKKwkJcmV0dXJuIEVWVF9GQUlMRUQ7CisJfQorCisJd2hpbGUgKChldnRfZW50ID0gcmVhZGRpcihldnRfZGlyKSkpIHsKKwkJY2hhciBldmVudF9vcHRbTUFYX0VWT1BUX0xFTiArIDFdOworCQlpbnQgbGVuOworCQl1bnNpZ25lZCBpbnQgcmVtID0gTUFYX0VWT1BUX0xFTjsKKworCQlpZiAoIXN0cmNtcChldnRfZW50LT5kX25hbWUsICIuIikKKwkJICAgIHx8ICFzdHJjbXAoZXZ0X2VudC0+ZF9uYW1lLCAiLi4iKQorCQkgICAgfHwgIXN0cmNtcChldnRfZW50LT5kX25hbWUsICJlbmFibGUiKQorCQkgICAgfHwgIXN0cmNtcChldnRfZW50LT5kX25hbWUsICJmaWx0ZXIiKSkKKwkJCWNvbnRpbnVlOworCisJCWxlbiA9IHNucHJpbnRmKGV2ZW50X29wdCwgTUFYX0VWT1BUX0xFTiwgIiVzOiVzIiwgc3lzX25hbWUsCisJCQkgICAgICAgZXZ0X2VudC0+ZF9uYW1lKTsKKwkJaWYgKGxlbiA8IDApCisJCQlyZXR1cm4gRVZUX0ZBSUxFRDsKKworCQlyZW0gLT0gbGVuOworCQlpZiAoZmxhZ3MpIHsKKwkJCWlmIChyZW0gPCBzdHJsZW4oZmxhZ3MpICsgMSkKKwkJCQlyZXR1cm4gRVZUX0ZBSUxFRDsKKworCQkJc3RyY2F0KGV2ZW50X29wdCwgIjoiKTsKKwkJCXN0cmNhdChldmVudF9vcHQsIGZsYWdzKTsKKwkJfQorCisJCWlmIChwYXJzZV9ldmVudHMoTlVMTCwgZXZlbnRfb3B0LCAwKSkKKwkJCXJldHVybiBFVlRfRkFJTEVEOworCX0KKworCXJldHVybiBFVlRfSEFORExFRF9BTEw7Cit9CisKKworc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0IHBhcnNlX3RyYWNlcG9pbnRfZXZlbnQoY29uc3QgY2hhciAqKnN0cnAsCisJCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJY29uc3QgY2hhciAqZXZ0X25hbWU7CiAJY2hhciAqZmxhZ3M7CiAJY2hhciBzeXNfbmFtZVtNQVhfRVZFTlRfTEVOR1RIXTsKLQljaGFyIGlkX2J1Zls0XTsKLQlpbnQgZmQ7CiAJdW5zaWduZWQgaW50IHN5c19sZW5ndGgsIGV2dF9sZW5ndGg7Ci0JdTY0IGlkOwotCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CiAKIAlpZiAodmFsaWRfZGVidWdmc19tb3VudChkZWJ1Z2ZzX3BhdGgpKQogCQlyZXR1cm4gMDsKIAogCWV2dF9uYW1lID0gc3RyY2hyKCpzdHJwLCAnOicpOwogCWlmICghZXZ0X25hbWUpCi0JCXJldHVybiAwOworCQlyZXR1cm4gRVZUX0ZBSUxFRDsKIAogCXN5c19sZW5ndGggPSBldnRfbmFtZSAtICpzdHJwOwogCWlmIChzeXNfbGVuZ3RoID49IE1BWF9FVkVOVF9MRU5HVEgpCkBAIC00MzQsMzIgKzUyOSwyMiBAQAogCiAJZmxhZ3MgPSBzdHJjaHIoZXZ0X25hbWUsICc6Jyk7CiAJaWYgKGZsYWdzKSB7Ci0JCSpmbGFncyA9ICdcMCc7CisJCS8qIHNwbGl0IGl0IG91dDogKi8KKwkJZXZ0X25hbWUgPSBzdHJuZHVwKGV2dF9uYW1lLCBmbGFncyAtIGV2dF9uYW1lKTsKIAkJZmxhZ3MrKzsKLQkJaWYgKCFzdHJuY21wKGZsYWdzLCAicmVjb3JkIiwgc3RybGVuKGZsYWdzKSkpCi0JCQlhdHRyLT5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9SQVc7CiAJfQogCiAJZXZ0X2xlbmd0aCA9IHN0cmxlbihldnRfbmFtZSk7CiAJaWYgKGV2dF9sZW5ndGggPj0gTUFYX0VWRU5UX0xFTkdUSCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBFVlRfRkFJTEVEOwogCi0Jc25wcmludGYoZXZ0X3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcy8lcy9pZCIsIGRlYnVnZnNfcGF0aCwKLQkJIHN5c19uYW1lLCBldnRfbmFtZSk7Ci0JZmQgPSBvcGVuKGV2dF9wYXRoLCBPX1JET05MWSk7Ci0JaWYgKGZkIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocmVhZChmZCwgaWRfYnVmLCBzaXplb2YoaWRfYnVmKSkgPCAwKSB7Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNsb3NlKGZkKTsKLQlpZCA9IGF0b2xsKGlkX2J1Zik7Ci0JYXR0ci0+Y29uZmlnID0gaWQ7Ci0JYXR0ci0+dHlwZSA9IFBFUkZfVFlQRV9UUkFDRVBPSU5UOwotCSpzdHJwID0gZXZ0X25hbWUgKyBldnRfbGVuZ3RoOwotCXJldHVybiAxOworCWlmICghc3RyY21wKGV2dF9uYW1lLCAiKiIpKSB7CisJCSpzdHJwID0gZXZ0X25hbWUgKyBldnRfbGVuZ3RoOworCQlyZXR1cm4gcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGZsYWdzKTsKKwl9IGVsc2UKKwkJcmV0dXJuIHBhcnNlX3NpbmdsZV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBldnRfbmFtZSwKKwkJCQkJCSAgICAgZXZ0X2xlbmd0aCwgZmxhZ3MsCisJCQkJCQkgICAgIGF0dHIsIHN0cnApOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2V2ZW50cyhjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBpKQpAQCAtNDc3LDggKzU2Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXBhcnNlX3N5bWJvbGljX2V2ZW50KGNvbnN0IGNoYXIgKipzdHJwLCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIpCitzdGF0aWMgZW51bSBldmVudF9yZXN1bHQKK3BhcnNlX3N5bWJvbGljX2V2ZW50KGNvbnN0IGNoYXIgKipzdHJwLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCWNvbnN0IGNoYXIgKnN0ciA9ICpzdHJwOwogCXVuc2lnbmVkIGludCBpOwpAQCAtNDkwLDMyICs1NzUsMzMgQEAKIAkJCWF0dHItPnR5cGUgPSBldmVudF9zeW1ib2xzW2ldLnR5cGU7CiAJCQlhdHRyLT5jb25maWcgPSBldmVudF9zeW1ib2xzW2ldLmNvbmZpZzsKIAkJCSpzdHJwID0gc3RyICsgbjsKLQkJCXJldHVybiAxOworCQkJcmV0dXJuIEVWVF9IQU5ETEVEOwogCQl9CiAJfQotCXJldHVybiAwOworCXJldHVybiBFVlRfRkFJTEVEOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX3Jhd19ldmVudChjb25zdCBjaGFyICoqc3RycCwgc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQorc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0CitwYXJzZV9yYXdfZXZlbnQoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJY29uc3QgY2hhciAqc3RyID0gKnN0cnA7CiAJdTY0IGNvbmZpZzsKIAlpbnQgbjsKIAogCWlmICgqc3RyICE9ICdyJykKLQkJcmV0dXJuIDA7CisJCXJldHVybiBFVlRfRkFJTEVEOwogCW4gPSBoZXgydTY0KHN0ciArIDEsICZjb25maWcpOwogCWlmIChuID4gMCkgewogCQkqc3RycCA9IHN0ciArIG4gKyAxOwogCQlhdHRyLT50eXBlID0gUEVSRl9UWVBFX1JBVzsKIAkJYXR0ci0+Y29uZmlnID0gY29uZmlnOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIEVWVF9IQU5ETEVEOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gRVZUX0ZBSUxFRDsKIH0KIAotc3RhdGljIGludAotcGFyc2VfbnVtZXJpY19ldmVudChjb25zdCBjaGFyICoqc3RycCwgc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQorc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0CitwYXJzZV9udW1lcmljX2V2ZW50KGNvbnN0IGNoYXIgKipzdHJwLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCWNvbnN0IGNoYXIgKnN0ciA9ICpzdHJwOwogCWNoYXIgKmVuZHA7CkBAIC01MzAsMTQgKzYxNiwxNCBAQAogCQkJYXR0ci0+dHlwZSA9IHR5cGU7CiAJCQlhdHRyLT5jb25maWcgPSBjb25maWc7CiAJCQkqc3RycCA9IGVuZHA7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiBFVlRfSEFORExFRDsKIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gRVZUX0ZBSUxFRDsKIH0KIAotc3RhdGljIGludAotcGFyc2VfZXZlbnRfbW9kaWZpZXIoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cikKK3N0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAorcGFyc2VfZXZlbnRfbW9kaWZpZXIoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJY29uc3QgY2hhciAqc3RyID0gKnN0cnA7CiAJaW50IGV1ID0gMSwgZWsgPSAxLCBlaCA9IDE7CkBAIC01NjksMzcgKzY1NSw4NCBAQAogICogRWFjaCBldmVudCBjYW4gaGF2ZSBtdWx0aXBsZSBzeW1ib2xpYyBuYW1lcy4KICAqIFN5bWJvbGljIG5hbWVzIGFyZSAoYWxtb3N0KSBleGFjdGx5IG1hdGNoZWQuCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfZXZlbnRfc3ltYm9scyhjb25zdCBjaGFyICoqc3RyLCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIpCitzdGF0aWMgZW51bSBldmVudF9yZXN1bHQKK3BhcnNlX2V2ZW50X3N5bWJvbHMoY29uc3QgY2hhciAqKnN0ciwgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKLQlpZiAoIShwYXJzZV90cmFjZXBvaW50X2V2ZW50KHN0ciwgYXR0cikgfHwKLQkgICAgICBwYXJzZV9yYXdfZXZlbnQoc3RyLCBhdHRyKSB8fAotCSAgICAgIHBhcnNlX251bWVyaWNfZXZlbnQoc3RyLCBhdHRyKSB8fAotCSAgICAgIHBhcnNlX3N5bWJvbGljX2V2ZW50KHN0ciwgYXR0cikgfHwKLQkgICAgICBwYXJzZV9nZW5lcmljX2h3X2V2ZW50KHN0ciwgYXR0cikpKQotCQlyZXR1cm4gMDsKKwllbnVtIGV2ZW50X3Jlc3VsdCByZXQ7CiAKKwlyZXQgPSBwYXJzZV90cmFjZXBvaW50X2V2ZW50KHN0ciwgYXR0cik7CisJaWYgKHJldCAhPSBFVlRfRkFJTEVEKQorCQlnb3RvIG1vZGlmaWVyOworCisJcmV0ID0gcGFyc2VfcmF3X2V2ZW50KHN0ciwgYXR0cik7CisJaWYgKHJldCAhPSBFVlRfRkFJTEVEKQorCQlnb3RvIG1vZGlmaWVyOworCisJcmV0ID0gcGFyc2VfbnVtZXJpY19ldmVudChzdHIsIGF0dHIpOworCWlmIChyZXQgIT0gRVZUX0ZBSUxFRCkKKwkJZ290byBtb2RpZmllcjsKKworCXJldCA9IHBhcnNlX3N5bWJvbGljX2V2ZW50KHN0ciwgYXR0cik7CisJaWYgKHJldCAhPSBFVlRfRkFJTEVEKQorCQlnb3RvIG1vZGlmaWVyOworCisJcmV0ID0gcGFyc2VfZ2VuZXJpY19od19ldmVudChzdHIsIGF0dHIpOworCWlmIChyZXQgIT0gRVZUX0ZBSUxFRCkKKwkJZ290byBtb2RpZmllcjsKKworCXJldHVybiBFVlRfRkFJTEVEOworCittb2RpZmllcjoKIAlwYXJzZV9ldmVudF9tb2RpZmllcihzdHIsIGF0dHIpOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgc3RvcmVfZXZlbnRfdHlwZShjb25zdCBjaGFyICpvcmduYW1lKQoreworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdLCAqYzsKKwlGSUxFICpmaWxlOworCWludCBpZDsKKworCXNwcmludGYoZmlsZW5hbWUsICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy8lcy9pZCIsIG9yZ25hbWUpOworCWMgPSBzdHJjaHIoZmlsZW5hbWUsICc6Jyk7CisJaWYgKGMpCisJCSpjID0gJy8nOworCisJZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCWlmICghZmlsZSkKKwkJcmV0dXJuOworCWlmIChmc2NhbmYoZmlsZSwgIiVpIiwgJmlkKSA8IDEpCisJCWRpZSgiY2Fubm90IHN0b3JlIGV2ZW50IElEIik7CisJZmNsb3NlKGZpbGUpOworCXBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKK30KKworCiBpbnQgcGFyc2VfZXZlbnRzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsIGNvbnN0IGNoYXIgKnN0ciwgaW50IHVuc2V0IF9fdXNlZCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJZW51bSBldmVudF9yZXN1bHQgcmV0OworCisJaWYgKHN0cmNocihzdHIsICc6JykpCisJCXN0b3JlX2V2ZW50X3R5cGUoc3RyKTsKIAogCWZvciAoOzspIHsKIAkJaWYgKG5yX2NvdW50ZXJzID09IE1BWF9DT1VOVEVSUykKIAkJCXJldHVybiAtMTsKIAogCQltZW1zZXQoJmF0dHIsIDAsIHNpemVvZihhdHRyKSk7Ci0JCWlmICghcGFyc2VfZXZlbnRfc3ltYm9scygmc3RyLCAmYXR0cikpCisJCXJldCA9IHBhcnNlX2V2ZW50X3N5bWJvbHMoJnN0ciwgJmF0dHIpOworCQlpZiAocmV0ID09IEVWVF9GQUlMRUQpCiAJCQlyZXR1cm4gLTE7CiAKIAkJaWYgKCEoKnN0ciA9PSAwIHx8ICpzdHIgPT0gJywnIHx8IGlzc3BhY2UoKnN0cikpKQogCQkJcmV0dXJuIC0xOwogCi0JCWF0dHJzW25yX2NvdW50ZXJzXSA9IGF0dHI7Ci0JCW5yX2NvdW50ZXJzKys7CisJCWlmIChyZXQgIT0gRVZUX0hBTkRMRURfQUxMKSB7CisJCQlhdHRyc1tucl9jb3VudGVyc10gPSBhdHRyOworCQkJbnJfY291bnRlcnMrKzsKKwkJfQogCiAJCWlmICgqc3RyID09IDApCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAppbmRleCA2MDcwNGMxLi4zMGM2MDgxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCkBAIC0xNiw3ICsxNiw3IEBACiAKIGV4dGVybiBpbnQJCQlucl9jb3VudGVyczsKIAotZXh0ZXJuIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciBhdHRyc1tNQVhfQ09VTlRFUlNdOworZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cnNbTUFYX0NPVU5URVJTXTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmV2ZW50X25hbWUoaW50IGN0cik7CiBleHRlcm4gY29uc3QgY2hhciAqX19ldmVudF9uYW1lKGludCB0eXBlLCB1NjQgY29uZmlnKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmggYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oCmluZGV4IDhhYTM0NjQuLjJlZTI0OGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaApAQCAtMTA0LDYgKzEwNCw4IEBACiAJeyAudHlwZSA9IE9QVElPTl9DQUxMQkFDSywgLnNob3J0X25hbWUgPSAocyksIC5sb25nX25hbWUgPSAobCksIC52YWx1ZSA9ICh2KSwgLmFyZ2ggPSAidGltZSIsIC5oZWxwID0gKGgpLCAuY2FsbGJhY2sgPSBwYXJzZV9vcHRfYXBwcm94aWRhdGVfY2IgfQogI2RlZmluZSBPUFRfQ0FMTEJBQ0socywgbCwgdiwgYSwgaCwgZikgXAogCXsgLnR5cGUgPSBPUFRJT05fQ0FMTEJBQ0ssIC5zaG9ydF9uYW1lID0gKHMpLCAubG9uZ19uYW1lID0gKGwpLCAudmFsdWUgPSAodiksIChhKSwgLmhlbHAgPSAoaCksIC5jYWxsYmFjayA9IChmKSB9CisjZGVmaW5lIE9QVF9DQUxMQkFDS19OT09QVChzLCBsLCB2LCBhLCBoLCBmKSBcCisJeyAudHlwZSA9IE9QVElPTl9DQUxMQkFDSywgLnNob3J0X25hbWUgPSAocyksIC5sb25nX25hbWUgPSAobCksIC52YWx1ZSA9ICh2KSwgKGEpLCAuaGVscCA9IChoKSwgLmNhbGxiYWNrID0gKGYpLCAuZmxhZ3MgPSBQQVJTRV9PUFRfTk9BUkcgfQogI2RlZmluZSBPUFRfQ0FMTEJBQ0tfREVGQVVMVChzLCBsLCB2LCBhLCBoLCBmLCBkKSBcCiAJeyAudHlwZSA9IE9QVElPTl9DQUxMQkFDSywgLnNob3J0X25hbWUgPSAocyksIC5sb25nX25hbWUgPSAobCksIC52YWx1ZSA9ICh2KSwgKGEpLCAuaGVscCA9IChoKSwgLmNhbGxiYWNrID0gKGYpLCAuZGVmdmFsID0gKGludHB0cl90KWQsIC5mbGFncyA9IFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3OGZkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwpAQCAtMCwwICsxLDQ4OCBAQAorLyoKKyAqIHN2Z2hlbHBlci5jIC0gaGVscGVyIGZ1bmN0aW9ucyBmb3Igb3V0cHV0dGluZyBzdmcKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogICAgIEFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJzdmdoZWxwZXIuaCIKKworc3RhdGljIHU2NCBmaXJzdF90aW1lLCBsYXN0X3RpbWU7CitzdGF0aWMgdTY0IHR1cmJvX2ZyZXF1ZW5jeSwgbWF4X2ZyZXE7CisKKworI2RlZmluZSBTTE9UX01VTFQgMzAuMAorI2RlZmluZSBTTE9UX0hFSUdIVCAyNS4wCisKK2ludCBzdmdfcGFnZV93aWR0aCA9IDEwMDA7CisKKyNkZWZpbmUgTUlOX1RFWFRfU0laRSAwLjAwMQorCitzdGF0aWMgdTY0IHRvdGFsX2hlaWdodDsKK3N0YXRpYyBGSUxFICpzdmdmaWxlOworCitzdGF0aWMgZG91YmxlIGNwdTJzbG90KGludCBjcHUpCit7CisJcmV0dXJuIDIgKiBjcHUgKyAxOworfQorCitzdGF0aWMgZG91YmxlIGNwdTJ5KGludCBjcHUpCit7CisJcmV0dXJuIGNwdTJzbG90KGNwdSkgKiBTTE9UX01VTFQ7Cit9CisKK3N0YXRpYyBkb3VibGUgdGltZTJwaXhlbHModTY0IHRpbWUpCit7CisJZG91YmxlIFg7CisKKwlYID0gMS4wICogc3ZnX3BhZ2Vfd2lkdGggKiAodGltZSAtIGZpcnN0X3RpbWUpIC8gKGxhc3RfdGltZSAtIGZpcnN0X3RpbWUpOworCXJldHVybiBYOworfQorCisvKgorICogUm91bmQgdGV4dCBzaXplcyBzbyB0aGF0IHRoZSBzdmcgdmlld2VyIG9ubHkgbmVlZHMgYSBkaXNjcmV0ZQorICogbnVtYmVyIG9mIHJlbmRlcmluZ3Mgb2YgdGhlIGZvbnQKKyAqLworc3RhdGljIGRvdWJsZSByb3VuZF90ZXh0X3NpemUoZG91YmxlIHNpemUpCit7CisJaW50IGxvb3AgPSAxMDA7CisJZG91YmxlIHRhcmdldCA9IDEwLjA7CisKKwlpZiAoc2l6ZSA+PSAxMC4wKQorCQlyZXR1cm4gc2l6ZTsKKwl3aGlsZSAobG9vcC0tKSB7CisJCWlmIChzaXplID49IHRhcmdldCkKKwkJCXJldHVybiB0YXJnZXQ7CisJCXRhcmdldCA9IHRhcmdldCAvIDIuMDsKKwl9CisJcmV0dXJuIHNpemU7Cit9CisKK3ZvaWQgb3Blbl9zdmcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjcHVzLCBpbnQgcm93cywgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWludCBuZXdfd2lkdGg7CisKKwlzdmdmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJaWYgKCFzdmdmaWxlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IG9wZW4gJXMgZm9yIG91dHB1dFxuIiwgZmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCWZpcnN0X3RpbWUgPSBzdGFydDsKKwlmaXJzdF90aW1lID0gZmlyc3RfdGltZSAvIDEwMDAwMDAwMCAqIDEwMDAwMDAwMDsKKwlsYXN0X3RpbWUgPSBlbmQ7CisKKwkvKgorCSAqIGlmIHRoZSByZWNvcmRpbmcgaXMgc2hvcnQsIHdlIGRlZmF1bHQgdG8gYSB3aWR0aCBvZiAxMDAwLCBidXQKKwkgKiBmb3IgbG9uZ2VyIHJlY29yZGluZ3Mgd2Ugd2FudCBhdCBsZWFzdCAyMDAgdW5pdHMgb2Ygd2lkdGggcGVyIHNlY29uZAorCSAqLworCW5ld193aWR0aCA9IChsYXN0X3RpbWUgLSBmaXJzdF90aW1lKSAvIDUwMDAwMDA7CisKKwlpZiAobmV3X3dpZHRoID4gc3ZnX3BhZ2Vfd2lkdGgpCisJCXN2Z19wYWdlX3dpZHRoID0gbmV3X3dpZHRoOworCisJdG90YWxfaGVpZ2h0ID0gKDEgKyByb3dzICsgY3B1MnNsb3QoY3B1cykpICogU0xPVF9NVUxUOworCWZwcmludGYoc3ZnZmlsZSwgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBzdGFuZGFsb25lPVwibm9cIj8+IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiPHN2ZyB3aWR0aD1cIiVpXCIgaGVpZ2h0PVwiJWxsdVwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4iLCBzdmdfcGFnZV93aWR0aCwgdG90YWxfaGVpZ2h0KTsKKworCWZwcmludGYoc3ZnZmlsZSwgIjxkZWZzPlxuICA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4gICAgPCFbQ0RBVEFbXG4iKTsKKworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QgICAgICAgICAgeyBzdHJva2Utd2lkdGg6IDE7IH1cbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QucHJvY2VzcyAgeyBmaWxsOnJnYigxODAsMTgwLDE4MCk7IGZpbGwtb3BhY2l0eTowLjk7IHN0cm9rZS13aWR0aDoxOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wcm9jZXNzMiB7IGZpbGw6cmdiKDE4MCwxODAsMTgwKTsgZmlsbC1vcGFjaXR5OjAuOTsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnNhbXBsZSAgIHsgZmlsbDpyZ2IoICAwLCAgMCwyNTUpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYmxvY2tlZCAgeyBmaWxsOnJnYigyNTUsICAwLCAgMCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIxNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuMzsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LldBSVRJTkcgIHsgZmlsbDpyZ2IoMjU1LDIxNCwgNDgpOyBmaWxsLW9wYWNpdHk6MC42OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuY3B1ICAgICAgeyBmaWxsOnJnYigxOTIsMTkyLDE5Mik7IGZpbGwtb3BhY2l0eTowLjI7IHN0cm9rZS13aWR0aDowLjU7IHN0cm9rZTpyZ2IoMTI4LDEyOCwxMjgpOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wc3RhdGUgICB7IGZpbGw6cmdiKDEyOCwxMjgsMTI4KTsgZmlsbC1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjA7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LmMxICAgICAgIHsgZmlsbDpyZ2IoMjU1LDIxNCwyMTQpOyBmaWxsLW9wYWNpdHk6MC41OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYzIgICAgICAgeyBmaWxsOnJnYigyNTUsMTcyLDE3Mik7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jMyAgICAgICB7IGZpbGw6cmdiKDI1NSwxMzAsMTMwKTsgZmlsbC1vcGFjaXR5OjAuNTsgc3Ryb2tlLXdpZHRoOjA7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LmM0ICAgICAgIHsgZmlsbDpyZ2IoMjU1LCA4OCwgODgpOyBmaWxsLW9wYWNpdHk6MC41OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYzUgICAgICAgeyBmaWxsOnJnYigyNTUsIDQ0LCA0NCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jNiAgICAgICB7IGZpbGw6cmdiKDI1NSwgIDAsICAwKTsgZmlsbC1vcGFjaXR5OjAuNTsgc3Ryb2tlLXdpZHRoOjA7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICBsaW5lLnBzdGF0ZSAgIHsgc3Ryb2tlOnJnYigyNTUsMjU1LCAgMCk7IHN0cm9rZS1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjI7IH0gXG4iKTsKKworCWZwcmludGYoc3ZnZmlsZSwgIiAgICBdXT5cbiAgIDwvc3R5bGU+XG48L2RlZnM+XG4iKTsKK30KKwordm9pZCBzdmdfYm94KGludCBZc2xvdCwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKQoreworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJZnByaW50ZihzdmdmaWxlLCAiPHJlY3QgeD1cIiU0LjhmXCIgd2lkdGg9XCIlNC44ZlwiIHk9XCIlNC4xZlwiIGhlaWdodD1cIiU0LjFmXCIgY2xhc3M9XCIlc1wiLz5cbiIsCisJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgdGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCksIFlzbG90ICogU0xPVF9NVUxULCBTTE9UX0hFSUdIVCwgdHlwZSk7Cit9CisKK3ZvaWQgc3ZnX3NhbXBsZShpbnQgWXNsb3QsIGludCBjcHUsIHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlkb3VibGUgdGV4dF9zaXplOworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJZnByaW50ZihzdmdmaWxlLCAiPHJlY3QgeD1cIiU0LjhmXCIgd2lkdGg9XCIlNC44ZlwiIHk9XCIlNC4xZlwiIGhlaWdodD1cIiU0LjFmXCIgY2xhc3M9XCJzYW1wbGVcIi8+XG4iLAorCQl0aW1lMnBpeGVscyhzdGFydCksIHRpbWUycGl4ZWxzKGVuZCktdGltZTJwaXhlbHMoc3RhcnQpLCBZc2xvdCAqIFNMT1RfTVVMVCwgU0xPVF9IRUlHSFQpOworCisJdGV4dF9zaXplID0gKHRpbWUycGl4ZWxzKGVuZCktdGltZTJwaXhlbHMoc3RhcnQpKTsKKwlpZiAoY3B1ID4gOSkKKwkJdGV4dF9zaXplID0gdGV4dF9zaXplLzI7CisJaWYgKHRleHRfc2l6ZSA+IDEuMjUpCisJCXRleHRfc2l6ZSA9IDEuMjU7CisJdGV4dF9zaXplID0gcm91bmRfdGV4dF9zaXplKHRleHRfc2l6ZSk7CisKKwlpZiAodGV4dF9zaXplID4gTUlOX1RFWFRfU0laRSkKKwkJZnByaW50ZihzdmdmaWxlLCAiPHRleHQgeD1cIiUxLjhmXCIgeT1cIiUxLjhmXCIgZm9udC1zaXplPVwiJTEuOGZwdFwiPiVpPC90ZXh0PlxuIiwKKwkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgWXNsb3QgKiAgU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQgLSAxLCB0ZXh0X3NpemUsICBjcHUgKyAxKTsKKworfQorCitzdGF0aWMgY2hhciAqdGltZV90b19zdHJpbmcodTY0IGR1cmF0aW9uKQoreworCXN0YXRpYyBjaGFyIHRleHRbODBdOworCisJdGV4dFswXSA9IDA7CisKKwlpZiAoZHVyYXRpb24gPCAxMDAwKSAvKiBsZXNzIHRoYW4gMSB1c2VjICovCisJCXJldHVybiB0ZXh0OworCisJaWYgKGR1cmF0aW9uIDwgMTAwMCAqIDEwMDApIHsgLyogbGVzcyB0aGFuIDEgbXNlYyAqLworCQlzcHJpbnRmKHRleHQsICIlNC4xZiB1cyIsIGR1cmF0aW9uIC8gMTAwMC4wKTsKKwkJcmV0dXJuIHRleHQ7CisJfQorCXNwcmludGYodGV4dCwgIiU0LjFmIG1zIiwgZHVyYXRpb24gLyAxMDAwLjAgLyAxMDAwKTsKKworCXJldHVybiB0ZXh0OworfQorCit2b2lkIHN2Z193YWl0aW5nKGludCBZc2xvdCwgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWNoYXIgKnRleHQ7CisJY29uc3QgY2hhciAqc3R5bGU7CisJZG91YmxlIGZvbnRfc2l6ZTsKKworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJc3R5bGUgPSAid2FpdGluZyI7CisKKwlpZiAoZW5kLXN0YXJ0ID4gMTAgKiAxMDAwMDAwKSAvKiAxMCBtc2VjICovCisJCXN0eWxlID0gIldBSVRJTkciOworCisJdGV4dCA9IHRpbWVfdG9fc3RyaW5nKGVuZC1zdGFydCk7CisKKwlmb250X3NpemUgPSAxLjAgKiAodGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCkpOworCisJaWYgKGZvbnRfc2l6ZSA+IDMpCisJCWZvbnRfc2l6ZSA9IDM7CisKKwlmb250X3NpemUgPSByb3VuZF90ZXh0X3NpemUoZm9udF9zaXplKTsKKworCWZwcmludGYoc3ZnZmlsZSwgIjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSglNC44ZiwlNC44ZilcIj5cbiIsIHRpbWUycGl4ZWxzKHN0YXJ0KSwgWXNsb3QgKiBTTE9UX01VTFQpOworCWZwcmludGYoc3ZnZmlsZSwgIjxyZWN0IHg9XCIwXCIgd2lkdGg9XCIlNC44ZlwiIHk9XCIwXCIgaGVpZ2h0PVwiJTQuMWZcIiBjbGFzcz1cIiVzXCIvPlxuIiwKKwkJdGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCksIFNMT1RfSEVJR0hULCBzdHlsZSk7CisJaWYgKGZvbnRfc2l6ZSA+IE1JTl9URVhUX1NJWkUpCisJCWZwcmludGYoc3ZnZmlsZSwgIjx0ZXh0IHRyYW5zZm9ybT1cInJvdGF0ZSg5MClcIiBmb250LXNpemU9XCIlMS44ZnB0XCI+ICVzPC90ZXh0PlxuIiwKKwkJCWZvbnRfc2l6ZSwgdGV4dCk7CisJZnByaW50ZihzdmdmaWxlLCAiPC9nPlxuIik7Cit9CisKK3N0YXRpYyBjaGFyICpjcHVfbW9kZWwodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBjcHVfbVsyNTVdOworCWNoYXIgYnVmWzI1Nl07CisJRklMRSAqZmlsZTsKKworCWNwdV9tWzBdID0gMDsKKwkvKiBDUFUgdHlwZSAqLworCWZpbGUgPSBmb3BlbigiL3Byb2MvY3B1aW5mbyIsICJyIik7CisJaWYgKGZpbGUpIHsKKwkJd2hpbGUgKGZnZXRzKGJ1ZiwgMjU1LCBmaWxlKSkgeworCQkJaWYgKHN0cnN0cihidWYsICJtb2RlbCBuYW1lIikpIHsKKwkJCQlzdHJuY3B5KGNwdV9tLCAmYnVmWzEzXSwgMjU1KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlmY2xvc2UoZmlsZSk7CisJfQorCXJldHVybiBjcHVfbTsKK30KKwordm9pZCBzdmdfY3B1X2JveChpbnQgY3B1LCB1NjQgX19tYXhfZnJlcSwgdTY0IF9fdHVyYm9fZnJlcSkKK3sKKwljaGFyIGNwdV9zdHJpbmdbODBdOworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJbWF4X2ZyZXEgPSBfX21heF9mcmVxOworCXR1cmJvX2ZyZXF1ZW5jeSA9IF9fdHVyYm9fZnJlcTsKKworCWZwcmludGYoc3ZnZmlsZSwgIjxyZWN0IHg9XCIlNC44ZlwiIHdpZHRoPVwiJTQuOGZcIiB5PVwiJTQuMWZcIiBoZWlnaHQ9XCIlNC4xZlwiIGNsYXNzPVwiY3B1XCIvPlxuIiwKKwkJdGltZTJwaXhlbHMoZmlyc3RfdGltZSksCisJCXRpbWUycGl4ZWxzKGxhc3RfdGltZSktdGltZTJwaXhlbHMoZmlyc3RfdGltZSksCisJCWNwdTJ5KGNwdSksIFNMT1RfTVVMVCtTTE9UX0hFSUdIVCk7CisKKwlzcHJpbnRmKGNwdV9zdHJpbmcsICJDUFUgJWkiLCAoaW50KWNwdSsxKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8dGV4dCB4PVwiJTQuOGZcIiB5PVwiJTQuOGZcIj4lczwvdGV4dD5cbiIsCisJCTEwK3RpbWUycGl4ZWxzKGZpcnN0X3RpbWUpLCBjcHUyeShjcHUpICsgU0xPVF9IRUlHSFQvMiwgY3B1X3N0cmluZyk7CisKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8dGV4dCB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJTQuOGYsJTQuOGYpXCIgZm9udC1zaXplPVwiMS4yNXB0XCI+JXM8L3RleHQ+XG4iLAorCQkxMCt0aW1lMnBpeGVscyhmaXJzdF90aW1lKSwgY3B1MnkoY3B1KSArIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hUIC0gNCwgY3B1X21vZGVsKCkpOworfQorCit2b2lkIHN2Z19wcm9jZXNzKGludCBjcHUsIHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlkb3VibGUgd2lkdGg7CisKKwlpZiAoIXN2Z2ZpbGUpCisJCXJldHVybjsKKworCisJZnByaW50ZihzdmdmaWxlLCAiPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCU0LjhmLCU0LjhmKVwiPlxuIiwgdGltZTJwaXhlbHMoc3RhcnQpLCBjcHUyeShjcHUpKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8cmVjdCB4PVwiMFwiIHdpZHRoPVwiJTQuOGZcIiB5PVwiMFwiIGhlaWdodD1cIiU0LjFmXCIgY2xhc3M9XCIlc1wiLz5cbiIsCisJCXRpbWUycGl4ZWxzKGVuZCktdGltZTJwaXhlbHMoc3RhcnQpLCBTTE9UX01VTFQrU0xPVF9IRUlHSFQsIHR5cGUpOworCXdpZHRoID0gdGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCk7CisJaWYgKHdpZHRoID4gNikKKwkJd2lkdGggPSA2OworCisJd2lkdGggPSByb3VuZF90ZXh0X3NpemUod2lkdGgpOworCisJaWYgKHdpZHRoID4gTUlOX1RFWFRfU0laRSkKKwkJZnByaW50ZihzdmdmaWxlLCAiPHRleHQgdHJhbnNmb3JtPVwicm90YXRlKDkwKVwiIGZvbnQtc2l6ZT1cIiUzLjhmcHRcIj4lczwvdGV4dD5cbiIsCisJCQl3aWR0aCwgbmFtZSk7CisKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8L2c+XG4iKTsKK30KKwordm9pZCBzdmdfY3N0YXRlKGludCBjcHUsIHU2NCBzdGFydCwgdTY0IGVuZCwgaW50IHR5cGUpCit7CisJZG91YmxlIHdpZHRoOworCWNoYXIgc3R5bGVbMTI4XTsKKworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisKKwlpZiAodHlwZSA+IDYpCisJCXR5cGUgPSA2OworCXNwcmludGYoc3R5bGUsICJjJWkiLCB0eXBlKTsKKworCWZwcmludGYoc3ZnZmlsZSwgIjxyZWN0IGNsYXNzPVwiJXNcIiB4PVwiJTQuOGZcIiB3aWR0aD1cIiU0LjhmXCIgeT1cIiU0LjFmXCIgaGVpZ2h0PVwiJTQuMWZcIi8+XG4iLAorCQlzdHlsZSwKKwkJdGltZTJwaXhlbHMoc3RhcnQpLCB0aW1lMnBpeGVscyhlbmQpLXRpbWUycGl4ZWxzKHN0YXJ0KSwKKwkJY3B1MnkoY3B1KSwgU0xPVF9NVUxUK1NMT1RfSEVJR0hUKTsKKworCXdpZHRoID0gKHRpbWUycGl4ZWxzKGVuZCktdGltZTJwaXhlbHMoc3RhcnQpKS8yLjA7CisJaWYgKHdpZHRoID4gNikKKwkJd2lkdGggPSA2OworCisJd2lkdGggPSByb3VuZF90ZXh0X3NpemUod2lkdGgpOworCisJaWYgKHdpZHRoID4gTUlOX1RFWFRfU0laRSkKKwkJZnByaW50ZihzdmdmaWxlLCAiPHRleHQgeD1cIiU0LjhmXCIgeT1cIiU0LjhmXCIgZm9udC1zaXplPVwiJTMuOGZwdFwiPkMlaTwvdGV4dD5cbiIsCisJCQl0aW1lMnBpeGVscyhzdGFydCksIGNwdTJ5KGNwdSkrd2lkdGgsIHdpZHRoLCB0eXBlKTsKK30KKworc3RhdGljIGNoYXIgKkh6VG9IdW1hbih1bnNpZ25lZCBsb25nIGh6KQoreworCXN0YXRpYyBjaGFyIGJ1ZmZlclsxMDI0XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHo7CisKKwltZW1zZXQoYnVmZmVyLCAwLCAxMDI0KTsKKworCUh6ID0gaHo7CisKKwkvKiBkZWZhdWx0OiBqdXN0IHB1dCB0aGUgTnVtYmVyIGluICovCisJc3ByaW50ZihidWZmZXIsICIlOWxsaSIsIEh6KTsKKworCWlmIChIeiA+IDEwMDApCisJCXNwcmludGYoYnVmZmVyLCAiICU2bGxpIE1oeiIsIChIeis1MDApLzEwMDApOworCisJaWYgKEh6ID4gMTUwMDAwMCkKKwkJc3ByaW50ZihidWZmZXIsICIgJTYuMmYgR2h6IiwgKEh6KzUwMDAuMCkvMTAwMDAwMCk7CisKKwlpZiAoSHogPT0gdHVyYm9fZnJlcXVlbmN5KQorCQlzcHJpbnRmKGJ1ZmZlciwgIlR1cmJvIik7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCit2b2lkIHN2Z19wc3RhdGUoaW50IGNwdSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgZnJlcSkKK3sKKwlkb3VibGUgaGVpZ2h0ID0gMDsKKworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJaWYgKG1heF9mcmVxKQorCQloZWlnaHQgPSBmcmVxICogMS4wIC8gbWF4X2ZyZXEgKiAoU0xPVF9IRUlHSFQgKyBTTE9UX01VTFQpOworCWhlaWdodCA9IDEgKyBjcHUyeShjcHUpICsgU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQgLSBoZWlnaHQ7CisJZnByaW50ZihzdmdmaWxlLCAiPGxpbmUgeDE9XCIlNC44ZlwiIHgyPVwiJTQuOGZcIiB5MT1cIiU0LjFmXCIgeTI9XCIlNC4xZlwiIGNsYXNzPVwicHN0YXRlXCIvPlxuIiwKKwkJdGltZTJwaXhlbHMoc3RhcnQpLCB0aW1lMnBpeGVscyhlbmQpLCBoZWlnaHQsIGhlaWdodCk7CisJZnByaW50ZihzdmdmaWxlLCAiPHRleHQgeD1cIiU0LjhmXCIgeT1cIiU0LjhmXCIgZm9udC1zaXplPVwiMC4yNXB0XCI+JXM8L3RleHQ+XG4iLAorCQl0aW1lMnBpeGVscyhzdGFydCksIGhlaWdodCswLjksIEh6VG9IdW1hbihmcmVxKSk7CisKK30KKworCit2b2lkIHN2Z19wYXJ0aWFsX3dha2VsaW5lKHU2NCBzdGFydCwgaW50IHJvdzEsIGNoYXIgKmRlc2MxLCBpbnQgcm93MiwgY2hhciAqZGVzYzIpCit7CisJZG91YmxlIGhlaWdodDsKKworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisKKwlpZiAocm93MSA8IHJvdzIpIHsKKwkJaWYgKHJvdzEpIHsKKwkJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJTQuMmZcIiBzdHlsZT1cInN0cm9rZTpyZ2IoMzIsMjU1LDMyKTtzdHJva2Utd2lkdGg6MC4wMDlcIi8+XG4iLAorCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MSAqIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hULCAgdGltZTJwaXhlbHMoc3RhcnQpLCByb3cxICogU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQgKyBTTE9UX01VTFQvMzIpOworCQkJaWYgKGRlc2MyKQorCQkJCWZwcmludGYoc3ZnZmlsZSwgIjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSglNC44ZiwlNC44ZilcIj48dGV4dCB0cmFuc2Zvcm09XCJyb3RhdGUoOTApXCIgZm9udC1zaXplPVwiMC4wMnB0XCI+JXMgJmd0OzwvdGV4dD48L2c+XG4iLAorCQkJCQl0aW1lMnBpeGVscyhzdGFydCksIHJvdzEgKiBTTE9UX01VTFQgKyBTTE9UX0hFSUdIVCArIFNMT1RfSEVJR0hULzQ4LCBkZXNjMik7CisJCX0KKwkJaWYgKHJvdzIpIHsKKwkJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJTQuMmZcIiBzdHlsZT1cInN0cm9rZTpyZ2IoMzIsMjU1LDMyKTtzdHJva2Utd2lkdGg6MC4wMDlcIi8+XG4iLAorCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MiAqIFNMT1RfTVVMVCAtIFNMT1RfTVVMVC8zMiwgIHRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MiAqIFNMT1RfTVVMVCk7CisJCQlpZiAoZGVzYzEpCisJCQkJZnByaW50ZihzdmdmaWxlLCAiPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCU0LjhmLCU0LjhmKVwiPjx0ZXh0IHRyYW5zZm9ybT1cInJvdGF0ZSg5MClcIiBmb250LXNpemU9XCIwLjAycHRcIj4lcyAmZ3Q7PC90ZXh0PjwvZz5cbiIsCisJCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MiAqIFNMT1RfTVVMVCAtIFNMT1RfTVVMVC8zMiwgZGVzYzEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJvdzIpIHsKKwkJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJTQuMmZcIiBzdHlsZT1cInN0cm9rZTpyZ2IoMzIsMjU1LDMyKTtzdHJva2Utd2lkdGg6MC4wMDlcIi8+XG4iLAorCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MiAqIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hULCAgdGltZTJwaXhlbHMoc3RhcnQpLCByb3cyICogU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQgKyBTTE9UX01VTFQvMzIpOworCQkJaWYgKGRlc2MxKQorCQkJCWZwcmludGYoc3ZnZmlsZSwgIjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSglNC44ZiwlNC44ZilcIj48dGV4dCB0cmFuc2Zvcm09XCJyb3RhdGUoOTApXCIgZm9udC1zaXplPVwiMC4wMnB0XCI+JXMgJmx0OzwvdGV4dD48L2c+XG4iLAorCQkJCQl0aW1lMnBpeGVscyhzdGFydCksIHJvdzIgKiBTTE9UX01VTFQgKyBTTE9UX0hFSUdIVCArIFNMT1RfTVVMVC80OCwgZGVzYzEpOworCQl9CisJCWlmIChyb3cxKSB7CisJCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiU0LjJmXCIgc3R5bGU9XCJzdHJva2U6cmdiKDMyLDI1NSwzMik7c3Ryb2tlLXdpZHRoOjAuMDA5XCIvPlxuIiwKKwkJCQl0aW1lMnBpeGVscyhzdGFydCksIHJvdzEgKiBTTE9UX01VTFQgLSBTTE9UX01VTFQvMzIsICB0aW1lMnBpeGVscyhzdGFydCksIHJvdzEgKiBTTE9UX01VTFQpOworCQkJaWYgKGRlc2MyKQorCQkJCWZwcmludGYoc3ZnZmlsZSwgIjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSglNC44ZiwlNC44ZilcIj48dGV4dCB0cmFuc2Zvcm09XCJyb3RhdGUoOTApXCIgZm9udC1zaXplPVwiMC4wMnB0XCI+JXMgJmx0OzwvdGV4dD48L2c+XG4iLAorCQkJCQl0aW1lMnBpeGVscyhzdGFydCksIHJvdzEgKiBTTE9UX01VTFQgLSBTTE9UX0hFSUdIVC8zMiwgZGVzYzIpOworCQl9CisJfQorCWhlaWdodCA9IHJvdzEgKiBTTE9UX01VTFQ7CisJaWYgKHJvdzIgPiByb3cxKQorCQloZWlnaHQgKz0gU0xPVF9IRUlHSFQ7CisJaWYgKHJvdzEpCisJCWZwcmludGYoc3ZnZmlsZSwgIjxjaXJjbGUgIGN4PVwiJTQuOGZcIiBjeT1cIiU0LjJmXCIgciA9IFwiMC4wMVwiICBzdHlsZT1cImZpbGw6cmdiKDMyLDI1NSwzMilcIi8+XG4iLAorCQkJdGltZTJwaXhlbHMoc3RhcnQpLCBoZWlnaHQpOworfQorCit2b2lkIHN2Z193YWtlbGluZSh1NjQgc3RhcnQsIGludCByb3cxLCBpbnQgcm93MikKK3sKKwlkb3VibGUgaGVpZ2h0OworCisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKworCWlmIChyb3cxIDwgcm93MikKKwkJZnByaW50ZihzdmdmaWxlLCAiPGxpbmUgeDE9XCIlNC44ZlwiIHkxPVwiJTQuMmZcIiB4Mj1cIiU0LjhmXCIgeTI9XCIlNC4yZlwiIHN0eWxlPVwic3Ryb2tlOnJnYigzMiwyNTUsMzIpO3N0cm9rZS13aWR0aDowLjAwOVwiLz5cbiIsCisJCQl0aW1lMnBpeGVscyhzdGFydCksIHJvdzEgKiBTTE9UX01VTFQgKyBTTE9UX0hFSUdIVCwgIHRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MiAqIFNMT1RfTVVMVCk7CisJZWxzZQorCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiU0LjJmXCIgc3R5bGU9XCJzdHJva2U6cmdiKDMyLDI1NSwzMik7c3Ryb2tlLXdpZHRoOjAuMDA5XCIvPlxuIiwKKwkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MiAqIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hULCAgdGltZTJwaXhlbHMoc3RhcnQpLCByb3cxICogU0xPVF9NVUxUKTsKKworCWhlaWdodCA9IHJvdzEgKiBTTE9UX01VTFQ7CisJaWYgKHJvdzIgPiByb3cxKQorCQloZWlnaHQgKz0gU0xPVF9IRUlHSFQ7CisJZnByaW50ZihzdmdmaWxlLCAiPGNpcmNsZSAgY3g9XCIlNC44ZlwiIGN5PVwiJTQuMmZcIiByID0gXCIwLjAxXCIgIHN0eWxlPVwiZmlsbDpyZ2IoMzIsMjU1LDMyKVwiLz5cbiIsCisJCQl0aW1lMnBpeGVscyhzdGFydCksIGhlaWdodCk7Cit9CisKK3ZvaWQgc3ZnX2ludGVycnVwdCh1NjQgc3RhcnQsIGludCByb3cpCit7CisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8Y2lyY2xlICBjeD1cIiU0LjhmXCIgY3k9XCIlNC4yZlwiIHIgPSBcIjAuMDFcIiAgc3R5bGU9XCJmaWxsOnJnYigyNTUsMTI4LDEyOClcIi8+XG4iLAorCQkJdGltZTJwaXhlbHMoc3RhcnQpLCByb3cgKiBTTE9UX01VTFQpOworCWZwcmludGYoc3ZnZmlsZSwgIjxjaXJjbGUgIGN4PVwiJTQuOGZcIiBjeT1cIiU0LjJmXCIgciA9IFwiMC4wMVwiICBzdHlsZT1cImZpbGw6cmdiKDI1NSwxMjgsMTI4KVwiLz5cbiIsCisJCQl0aW1lMnBpeGVscyhzdGFydCksIHJvdyAqIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hUKTsKK30KKwordm9pZCBzdmdfdGV4dChpbnQgWXNsb3QsIHU2NCBzdGFydCwgY29uc3QgY2hhciAqdGV4dCkKK3sKKwlpZiAoIXN2Z2ZpbGUpCisJCXJldHVybjsKKworCWZwcmludGYoc3ZnZmlsZSwgIjx0ZXh0IHg9XCIlNC44ZlwiIHk9XCIlNC44ZlwiPiVzPC90ZXh0PlxuIiwKKwkJdGltZTJwaXhlbHMoc3RhcnQpLCBZc2xvdCAqIFNMT1RfTVVMVCtTTE9UX0hFSUdIVC8yLCB0ZXh0KTsKK30KKworc3RhdGljIHZvaWQgc3ZnX2xlZ2VuZGFfYm94KGludCBYLCBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBjaGFyICpzdHlsZSkKK3sKKwlkb3VibGUgYm94c2l6ZTsKKwlib3hzaXplID0gU0xPVF9IRUlHSFQgLyAyOworCisJZnByaW50ZihzdmdmaWxlLCAiPHJlY3QgeD1cIiVpXCIgd2lkdGg9XCIlNC44ZlwiIHk9XCIwXCIgaGVpZ2h0PVwiJTQuMWZcIiBjbGFzcz1cIiVzXCIvPlxuIiwKKwkJWCwgYm94c2l6ZSwgYm94c2l6ZSwgc3R5bGUpOworCWZwcmludGYoc3ZnZmlsZSwgIjx0ZXh0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSglNC44ZiwgJTQuOGYpXCIgZm9udC1zaXplPVwiJTQuOGZwdFwiPiVzPC90ZXh0PlxuIiwKKwkJWCArIGJveHNpemUgKyA1LCBib3hzaXplLCAwLjggKiBib3hzaXplLCB0ZXh0KTsKK30KKwordm9pZCBzdmdfbGVnZW5kYSh2b2lkKQoreworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJc3ZnX2xlZ2VuZGFfYm94KDAsCSJSdW5uaW5nIiwgInNhbXBsZSIpOworCXN2Z19sZWdlbmRhX2JveCgxMDAsCSJJZGxlIiwicmVjdC5jMSIpOworCXN2Z19sZWdlbmRhX2JveCgyMDAsCSJEZWVwZXIgSWRsZSIsICJyZWN0LmMzIik7CisJc3ZnX2xlZ2VuZGFfYm94KDM1MCwJIkRlZXBlc3QgSWRsZSIsICJyZWN0LmM2Iik7CisJc3ZnX2xlZ2VuZGFfYm94KDU1MCwJIlNsZWVwaW5nIiwgInByb2Nlc3MyIik7CisJc3ZnX2xlZ2VuZGFfYm94KDY1MCwJIldhaXRpbmcgZm9yIGNwdSIsICJ3YWl0aW5nIik7CisJc3ZnX2xlZ2VuZGFfYm94KDgwMCwJIkJsb2NrZWQgb24gSU8iLCAiYmxvY2tlZCIpOworfQorCit2b2lkIHN2Z190aW1lX2dyaWQodm9pZCkKK3sKKwl1NjQgaTsKKworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJaSA9IGZpcnN0X3RpbWU7CisJd2hpbGUgKGkgPCBsYXN0X3RpbWUpIHsKKwkJaW50IGNvbG9yID0gMjIwOworCQlkb3VibGUgdGhpY2tuZXNzID0gMC4wNzU7CisJCWlmICgoaSAlIDEwMDAwMDAwMCkgPT0gMCkgeworCQkJdGhpY2tuZXNzID0gMC41OworCQkJY29sb3IgPSAxOTI7CisJCX0KKwkJaWYgKChpICUgMTAwMDAwMDAwMCkgPT0gMCkgeworCQkJdGhpY2tuZXNzID0gMi4wOworCQkJY29sb3IgPSAxMjg7CisJCX0KKworCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiVsbHVcIiBzdHlsZT1cInN0cm9rZTpyZ2IoJWksJWksJWkpO3N0cm9rZS13aWR0aDolMS4zZlwiLz5cbiIsCisJCQl0aW1lMnBpeGVscyhpKSwgU0xPVF9NVUxULzIsIHRpbWUycGl4ZWxzKGkpLCB0b3RhbF9oZWlnaHQsIGNvbG9yLCBjb2xvciwgY29sb3IsIHRoaWNrbmVzcyk7CisKKwkJaSArPSAxMDAwMDAwMDsKKwl9Cit9CisKK3ZvaWQgc3ZnX2Nsb3NlKHZvaWQpCit7CisJaWYgKHN2Z2ZpbGUpIHsKKwkJZnByaW50ZihzdmdmaWxlLCAiPC9zdmc+XG4iKTsKKwkJZmNsb3NlKHN2Z2ZpbGUpOworCQlzdmdmaWxlID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmggYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MzE5NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9JTkNMVURFX0dVQVJEX1NWR19IRUxQRVJfCisjZGVmaW5lIF9JTkNMVURFX0dVQVJEX1NWR19IRUxQRVJfCisKKyNpbmNsdWRlICJ0eXBlcy5oIgorCitleHRlcm4gdm9pZCBvcGVuX3N2Zyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGNwdXMsIGludCByb3dzLCB1NjQgc3RhcnQsIHU2NCBlbmQpOworZXh0ZXJuIHZvaWQgc3ZnX2JveChpbnQgWXNsb3QsIHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSk7CitleHRlcm4gdm9pZCBzdmdfc2FtcGxlKGludCBZc2xvdCwgaW50IGNwdSwgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKK2V4dGVybiB2b2lkIHN2Z193YWl0aW5nKGludCBZc2xvdCwgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKK2V4dGVybiB2b2lkIHN2Z19jcHVfYm94KGludCBjcHUsIHU2NCBtYXhfZnJlcXVlbmN5LCB1NjQgdHVyYm9fZnJlcXVlbmN5KTsKKworCitleHRlcm4gdm9pZCBzdmdfcHJvY2VzcyhpbnQgY3B1LCB1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgc3ZnX2NzdGF0ZShpbnQgY3B1LCB1NjQgc3RhcnQsIHU2NCBlbmQsIGludCB0eXBlKTsKK2V4dGVybiB2b2lkIHN2Z19wc3RhdGUoaW50IGNwdSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgZnJlcSk7CisKKworZXh0ZXJuIHZvaWQgc3ZnX3RpbWVfZ3JpZCh2b2lkKTsKK2V4dGVybiB2b2lkIHN2Z19sZWdlbmRhKHZvaWQpOworZXh0ZXJuIHZvaWQgc3ZnX3dha2VsaW5lKHU2NCBzdGFydCwgaW50IHJvdzEsIGludCByb3cyKTsKK2V4dGVybiB2b2lkIHN2Z19wYXJ0aWFsX3dha2VsaW5lKHU2NCBzdGFydCwgaW50IHJvdzEsIGNoYXIgKmRlc2MxLCBpbnQgcm93MiwgY2hhciAqZGVzYzIpOworZXh0ZXJuIHZvaWQgc3ZnX2ludGVycnVwdCh1NjQgc3RhcnQsIGludCByb3cpOworZXh0ZXJuIHZvaWQgc3ZnX3RleHQoaW50IFlzbG90LCB1NjQgc3RhcnQsIGNvbnN0IGNoYXIgKnRleHQpOworZXh0ZXJuIHZvaWQgc3ZnX2Nsb3NlKHZvaWQpOworCitleHRlcm4gaW50IHN2Z19wYWdlX3dpZHRoOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwppbmRleCA3NjM1OTI4Li40NWVmYjVkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCkBAIC04LDcgKzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHRocmVhZCAqdGhyZWFkX19uZXcocGlkX3QgcGlkKQogewotCXN0cnVjdCB0aHJlYWQgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CisJc3RydWN0IHRocmVhZCAqc2VsZiA9IGNhbGxvYygxLCBzaXplb2YoKnNlbGYpKTsKIAogCWlmIChzZWxmICE9IE5VTEwpIHsKIAkJc2VsZi0+cGlkID0gcGlkOwpAQCAtODUsNyArODUsNyBAQAogewogCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoMCwgdGhyZWFkcywgbGFzdF9tYXRjaCk7CiAKLQlpZiAoIXRocmVhZCB8fCB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgIltpbml0XSIpKSB7CisJaWYgKCF0aHJlYWQgfHwgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsICJzd2FwcGVyIikpIHsKIAkJZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKIAkJZXhpdCgtMSk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCmluZGV4IDYzNGYyODAuLjMyYWVhM2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKQEAgLTQsMTAgKzQsMTEgQEAKICNpbmNsdWRlICJzeW1ib2wuaCIKIAogc3RydWN0IHRocmVhZCB7Ci0Jc3RydWN0IHJiX25vZGUJIHJiX25vZGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBtYXBzOwotCXBpZF90CQkgcGlkOwotCWNoYXIJCSAqY29tbTsKKwlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1hcHM7CisJcGlkX3QJCQlwaWQ7CisJY2hhcgkJCXNob3J0bmFtZVszXTsKKwljaGFyCQkJKmNvbW07CiB9OwogCiBpbnQgdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCmluZGV4IDZjOTMwMmEuLmFmNGIwNTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiBzdGF0aWMgdm9pZCByZWFkX2Z0cmFjZV9wcmludGsodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSwgY2hlY2tfc2l6ZTsKLQljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKnBhdGg7CiAJc3RydWN0IHN0YXQgc3Q7CiAJaW50IHJldDsKIApAQCAtNDY4LDIzICs0NjgsMjQgQEAKIAkJLyogbm90IGZvdW5kICovCiAJCXNpemUgPSAwOwogCQl3cml0ZV9vcl9kaWUoJnNpemUsIDQpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAlzaXplID0gZ2V0X3NpemUocGF0aCk7CiAJd3JpdGVfb3JfZGllKCZzaXplLCA0KTsKIAljaGVja19zaXplID0gY29weV9maWxlKHBhdGgpOwogCWlmIChzaXplICE9IGNoZWNrX3NpemUpCiAJCWRpZSgiZXJyb3IgaW4gc2l6ZSBvZiBmaWxlICclcyciLCBwYXRoKTsKLQorb3V0OgorCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICoKLWdldF90cmFjZXBvaW50c19wYXRoKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqcGF0dHJzLCBpbnQgbmJfY291bnRlcnMpCitnZXRfdHJhY2Vwb2ludHNfcGF0aChzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpwYXR0cnMsIGludCBuYl9ldmVudHMpCiB7CiAJc3RydWN0IHRyYWNlcG9pbnRfcGF0aCBwYXRoLCAqcHBhdGggPSAmcGF0aDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBuYl9jb3VudGVyczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5iX2V2ZW50czsgaSsrKSB7CiAJCWlmIChwYXR0cnNbaV0udHlwZSAhPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVCkKIAkJCWNvbnRpbnVlOwogCQlwcGF0aC0+bmV4dCA9IHRyYWNlcG9pbnRfaWRfdG9fcGF0aChwYXR0cnNbaV0uY29uZmlnKTsKQEAgLTQ5NSw3ICs0OTYsNyBAQAogCiAJcmV0dXJuIHBhdGgubmV4dDsKIH0KLXZvaWQgcmVhZF90cmFjaW5nX2RhdGEoc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICpwYXR0cnMsIGludCBuYl9jb3VudGVycykKK3ZvaWQgcmVhZF90cmFjaW5nX2RhdGEoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqcGF0dHJzLCBpbnQgbmJfZXZlbnRzKQogewogCWNoYXIgYnVmW0JVRlNJWl07CiAJc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzOwpAQCAtNTI5LDcgKzUzMCw3IEBACiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAl3cml0ZV9vcl9kaWUoJnBhZ2Vfc2l6ZSwgNCk7CiAKLQl0cHMgPSBnZXRfdHJhY2Vwb2ludHNfcGF0aChwYXR0cnMsIG5iX2NvdW50ZXJzKTsKKwl0cHMgPSBnZXRfdHJhY2Vwb2ludHNfcGF0aChwYXR0cnMsIG5iX2V2ZW50cyk7CiAKIAlyZWFkX2hlYWRlcl9maWxlcygpOwogCXJlYWRfZnRyYWNlX2ZpbGVzKHRwcyk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCmluZGV4IDYyOWU2MDIuLmY2YTg0MzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCkBAIC0xNzc2LDYgKzE3NzYsMjkgQEAKIAl9CiB9CiAKK3Vuc2lnbmVkIGxvbmcgbG9uZworcmF3X2ZpZWxkX3ZhbHVlKHN0cnVjdCBldmVudCAqZXZlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CisKKwlmaWVsZCA9IGZpbmRfYW55X2ZpZWxkKGV2ZW50LCBuYW1lKTsKKwlpZiAoIWZpZWxkKQorCQlyZXR1cm4gMFVMTDsKKworCXJldHVybiByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKK30KKwordm9pZCAqcmF3X2ZpZWxkX3B0cihzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOworCisJZmllbGQgPSBmaW5kX2FueV9maWVsZChldmVudCwgbmFtZSk7CisJaWYgKCFmaWVsZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZGF0YSArIGZpZWxkLT5vZmZzZXQ7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2NvbW1vbl9pbmZvKGNvbnN0IGNoYXIgKnR5cGUsIGludCAqb2Zmc2V0LCBpbnQgKnNpemUpCiB7CiAJc3RydWN0IGV2ZW50ICpldmVudDsKQEAgLTE3OTksNyArMTgyMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfY29tbW9uX3R5cGUodm9pZCAqZGF0YSkKK2ludCB0cmFjZV9wYXJzZV9jb21tb25fdHlwZSh2b2lkICpkYXRhKQogewogCXN0YXRpYyBpbnQgdHlwZV9vZmZzZXQ7CiAJc3RhdGljIGludCB0eXBlX3NpemU7CkBAIC0xODMyLDcgKzE4NTUsNyBAQAogCXJldHVybiByZWFkX3NpemUoZGF0YSArIHBpZF9vZmZzZXQsIHBpZF9zaXplKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldmVudCAqZmluZF9ldmVudChpbnQgaWQpCitzdHJ1Y3QgZXZlbnQgKnRyYWNlX2ZpbmRfZXZlbnQoaW50IGlkKQogewogCXN0cnVjdCBldmVudCAqZXZlbnQ7CiAKQEAgLTI0MjAsOCArMjQ0Myw4IEBACiAJaW50IHR5cGU7CiAJaW50IHBpZDsKIAotCXR5cGUgPSBwYXJzZV9jb21tb25fdHlwZShuZXh0LT5kYXRhKTsKLQlldmVudCA9IGZpbmRfZXZlbnQodHlwZSk7CisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKG5leHQtPmRhdGEpOworCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMjUwMiw4ICsyNTI1LDggQEAKIAlpbnQgdHlwZTsKIAlpbnQgaTsKIAotCXR5cGUgPSBwYXJzZV9jb21tb25fdHlwZShyZXRfcmVjLT5kYXRhKTsKLQlyZXRfZXZlbnQgPSBmaW5kX2V2ZW50KHR5cGUpOworCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShyZXRfcmVjLT5kYXRhKTsKKwlyZXRfZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOwogCiAJZmllbGQgPSBmaW5kX2ZpZWxkKHJldF9ldmVudCwgInJldHRpbWUiKTsKIAlpZiAoIWZpZWxkKQpAQCAtMjY5NiwxMSArMjcxOSwxMyBAQAogCW5zZWNzIC09IHNlY3MgKiBOU0VDU19QRVJfU0VDOwogCXVzZWNzID0gbnNlY3MgLyBOU0VDU19QRVJfVVNFQzsKIAotCXR5cGUgPSBwYXJzZV9jb21tb25fdHlwZShkYXRhKTsKKwl0eXBlID0gdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUoZGF0YSk7CiAKLQlldmVudCA9IGZpbmRfZXZlbnQodHlwZSk7Ci0JaWYgKCFldmVudCkKLQkJZGllKCJ1ZyEgbm8gZXZlbnQgZm91bmQgZm9yIHR5cGUgJWQiLCB0eXBlKTsKKwlldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisJaWYgKCFldmVudCkgeworCQlwcmludGYoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlZFxuIiwgdHlwZSk7CisJCXJldHVybjsKKwl9CiAKIAlwaWQgPSBwYXJzZV9jb21tb25fcGlkKGRhdGEpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYwppbmRleCBhMTIxN2ExLi4xYjVjODQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKQEAgLTQ1OCwxMiArNDU4LDEzIEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXZvaWQgdHJhY2VfcmVwb3J0ICh2b2lkKQordm9pZCB0cmFjZV9yZXBvcnQodm9pZCkKIHsKIAljb25zdCBjaGFyICppbnB1dF9maWxlID0gInRyYWNlLmluZm8iOwogCWNoYXIgYnVmW0JVRlNJWl07CiAJY2hhciB0ZXN0W10gPSB7IDIzLCA4LCA2OCB9OwogCWNoYXIgKnZlcnNpb247CisJaW50IHNob3dfdmVyc2lvbiA9IDA7CiAJaW50IHNob3dfZnVuY3MgPSAwOwogCWludCBzaG93X3ByaW50ayA9IDA7CiAKQEAgLTQ4MCw3ICs0ODEsOCBAQAogCQlkaWUoIm5vdCBhIHRyYWNlIGZpbGUgKG1pc3NpbmcgdHJhY2luZykiKTsKIAogCXZlcnNpb24gPSByZWFkX3N0cmluZygpOwotCXByaW50ZigidmVyc2lvbiA9ICVzXG4iLCB2ZXJzaW9uKTsKKwlpZiAoc2hvd192ZXJzaW9uKQorCQlwcmludGYoInZlcnNpb24gPSAlc1xuIiwgdmVyc2lvbik7CiAJZnJlZSh2ZXJzaW9uKTsKIAogCXJlYWRfb3JfZGllKGJ1ZiwgMSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCmluZGV4IDQyMDI5NGEuLjY5M2Y4MTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCkBAIC0yMzQsNyArMjM0LDEyIEBACiBleHRlcm4gaW50IGhlYWRlcl9wYWdlX2RhdGFfc2l6ZTsKIAogaW50IHBhcnNlX2hlYWRlcl9wYWdlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2ludCB0cmFjZV9wYXJzZV9jb21tb25fdHlwZSh2b2lkICpkYXRhKTsKK3N0cnVjdCBldmVudCAqdHJhY2VfZmluZF9ldmVudChpbnQgaWQpOwordW5zaWduZWQgbG9uZyBsb25nCityYXdfZmllbGRfdmFsdWUoc3RydWN0IGV2ZW50ICpldmVudCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSk7Cit2b2lkICpyYXdfZmllbGRfcHRyKHN0cnVjdCBldmVudCAqZXZlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpOwogCi12b2lkIHJlYWRfdHJhY2luZ19kYXRhKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqcGF0dHJzLCBpbnQgbmJfY291bnRlcnMpOwordm9pZCByZWFkX3RyYWNpbmdfZGF0YShzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpwYXR0cnMsIGludCBuYl9ldmVudHMpOwogCiAjZW5kaWYgLyogX1RSQUNFX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS91c3IvZ2VuX2luaXRfY3Bpby5jIGIvdXNyL2dlbl9pbml0X2NwaW8uYwppbmRleCBmMWQzZmUzLi44M2IzZGRlIDEwMDY0NAotLS0gYS91c3IvZ2VuX2luaXRfY3Bpby5jCisrKyBiL3Vzci9nZW5faW5pdF9jcGlvLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCXJldHVybiByYzsKIH0KIAotdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKQorc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZykKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOlxuIgogCQkiXHQlcyA8Y3Bpb19saXN0PlxuIgo=